diff --git a/Gopkg.lock b/Gopkg.lock
index 73a2d76..d7890af 100644
--- a/Gopkg.lock
+++ b/Gopkg.lock
@@ -1,12 +1,36 @@
# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'.
+[[projects]]
+ name = "github.com/codegangsta/cli"
+ packages = ["."]
+ revision = "cfb38830724cc34fedffe9a2a29fb54fa9169cd1"
+ version = "v1.20.0"
+
[[projects]]
branch = "master"
name = "github.com/dustin/go-humanize"
packages = ["."]
revision = "6d15c0ae71e55ed645c21ac4945aaadbc0e9a590"
+[[projects]]
+ name = "github.com/fatih/structs"
+ packages = ["."]
+ revision = "a720dfa8df582c51dee1b36feabb906bde1588bd"
+ version = "v1.0"
+
+[[projects]]
+ branch = "master"
+ name = "github.com/hashicorp/errwrap"
+ packages = ["."]
+ revision = "7554cd9344cec97297fa6649b055a8c98c2a1e55"
+
+[[projects]]
+ branch = "master"
+ name = "github.com/hashicorp/go-multierror"
+ packages = ["."]
+ revision = "b7773ae218740a7be65057fc60b366a49b538a44"
+
[[projects]]
branch = "master"
name = "github.com/mars9/crypt"
@@ -43,6 +67,18 @@
revision = "f006c2ac4710855cf0f916dd6b77acf6b048dc6e"
version = "v1.0.3"
+[[projects]]
+ name = "github.com/yudai/gotty"
+ packages = ["pkg/homedir"]
+ revision = "a080c85cbc59226c94c6941ad8c395232d72d517"
+ version = "v2.0.0-alpha.3"
+
+[[projects]]
+ branch = "master"
+ name = "github.com/yudai/hcl"
+ packages = [".","hcl","json"]
+ revision = "5fa2393b3552119bf33a69adb1402a1160cba23d"
+
[[projects]]
branch = "master"
name = "golang.org/x/crypto"
@@ -61,9 +97,15 @@
packages = ["transform"]
revision = "88f656faf3f37f690df1a32515b479415e1a6769"
+[[projects]]
+ branch = "v2"
+ name = "gopkg.in/yaml.v2"
+ packages = ["."]
+ revision = "d670f9405373e636a5a2765eea47fac0c9bc91a4"
+
[solve-meta]
analyzer-name = "dep"
analyzer-version = 1
- inputs-digest = "12bd97b8551ca41a157e3e1d8f42f1e0b1ee2e484b00d1eaec92e928e42f0244"
+ inputs-digest = "8ee0066f90aab988cd1553eedcde5f62c9d2a9d3c18d2a4ea0a57a85df4b2eab"
solver-name = "gps-cdcl"
solver-version = 1
diff --git a/vendor/github.com/codegangsta/cli/.flake8 b/vendor/github.com/codegangsta/cli/.flake8
new file mode 100644
index 0000000..6deafc2
--- /dev/null
+++ b/vendor/github.com/codegangsta/cli/.flake8
@@ -0,0 +1,2 @@
+[flake8]
+max-line-length = 120
diff --git a/vendor/github.com/codegangsta/cli/.gitignore b/vendor/github.com/codegangsta/cli/.gitignore
new file mode 100644
index 0000000..faf70c4
--- /dev/null
+++ b/vendor/github.com/codegangsta/cli/.gitignore
@@ -0,0 +1,2 @@
+*.coverprofile
+node_modules/
diff --git a/vendor/github.com/codegangsta/cli/.travis.yml b/vendor/github.com/codegangsta/cli/.travis.yml
new file mode 100644
index 0000000..cf8d098
--- /dev/null
+++ b/vendor/github.com/codegangsta/cli/.travis.yml
@@ -0,0 +1,27 @@
+language: go
+sudo: false
+dist: trusty
+osx_image: xcode8.3
+go: 1.8.x
+
+os:
+- linux
+- osx
+
+cache:
+ directories:
+ - node_modules
+
+before_script:
+- go get github.com/urfave/gfmrun/... || true
+- go get golang.org/x/tools/cmd/goimports
+- if [ ! -f node_modules/.bin/markdown-toc ] ; then
+ npm install markdown-toc ;
+ fi
+
+script:
+- ./runtests gen
+- ./runtests vet
+- ./runtests test
+- ./runtests gfmrun
+- ./runtests toc
diff --git a/vendor/github.com/codegangsta/cli/CHANGELOG.md b/vendor/github.com/codegangsta/cli/CHANGELOG.md
new file mode 100644
index 0000000..401eae5
--- /dev/null
+++ b/vendor/github.com/codegangsta/cli/CHANGELOG.md
@@ -0,0 +1,435 @@
+# Change Log
+
+**ATTN**: This project uses [semantic versioning](http://semver.org/).
+
+## [Unreleased]
+
+## 1.20.0 - 2017-08-10
+
+### Fixed
+
+* `HandleExitCoder` is now correctly iterates over all errors in
+ a `MultiError`. The exit code is the exit code of the last error or `1` if
+ there are no `ExitCoder`s in the `MultiError`.
+* Fixed YAML file loading on Windows (previously would fail validate the file path)
+* Subcommand `Usage`, `Description`, `ArgsUsage`, `OnUsageError` correctly
+ propogated
+* `ErrWriter` is now passed downwards through command structure to avoid the
+ need to redefine it
+* Pass `Command` context into `OnUsageError` rather than parent context so that
+ all fields are avaiable
+* Errors occuring in `Before` funcs are no longer double printed
+* Use `UsageText` in the help templates for commands and subcommands if
+ defined; otherwise build the usage as before (was previously ignoring this
+ field)
+* `IsSet` and `GlobalIsSet` now correctly return whether a flag is set if
+ a program calls `Set` or `GlobalSet` directly after flag parsing (would
+ previously only return `true` if the flag was set during parsing)
+
+### Changed
+
+* No longer exit the program on command/subcommand error if the error raised is
+ not an `OsExiter`. This exiting behavior was introduced in 1.19.0, but was
+ determined to be a regression in functionality. See [the
+ PR](https://github.com/urfave/cli/pull/595) for discussion.
+
+### Added
+
+* `CommandsByName` type was added to make it easy to sort `Command`s by name,
+ alphabetically
+* `altsrc` now handles loading of string and int arrays from TOML
+* Support for definition of custom help templates for `App` via
+ `CustomAppHelpTemplate`
+* Support for arbitrary key/value fields on `App` to be used with
+ `CustomAppHelpTemplate` via `ExtraInfo`
+* `HelpFlag`, `VersionFlag`, and `BashCompletionFlag` changed to explictly be
+ `cli.Flag`s allowing for the use of custom flags satisfying the `cli.Flag`
+ interface to be used.
+
+
+## [1.19.1] - 2016-11-21
+
+### Fixed
+
+- Fixes regression introduced in 1.19.0 where using an `ActionFunc` as
+ the `Action` for a command would cause it to error rather than calling the
+ function. Should not have a affected declarative cases using `func(c
+ *cli.Context) err)`.
+- Shell completion now handles the case where the user specifies
+ `--generate-bash-completion` immediately after a flag that takes an argument.
+ Previously it call the application with `--generate-bash-completion` as the
+ flag value.
+
+## [1.19.0] - 2016-11-19
+### Added
+- `FlagsByName` was added to make it easy to sort flags (e.g. `sort.Sort(cli.FlagsByName(app.Flags))`)
+- A `Description` field was added to `App` for a more detailed description of
+ the application (similar to the existing `Description` field on `Command`)
+- Flag type code generation via `go generate`
+- Write to stderr and exit 1 if action returns non-nil error
+- Added support for TOML to the `altsrc` loader
+- `SkipArgReorder` was added to allow users to skip the argument reordering.
+ This is useful if you want to consider all "flags" after an argument as
+ arguments rather than flags (the default behavior of the stdlib `flag`
+ library). This is backported functionality from the [removal of the flag
+ reordering](https://github.com/urfave/cli/pull/398) in the unreleased version
+ 2
+- For formatted errors (those implementing `ErrorFormatter`), the errors will
+ be formatted during output. Compatible with `pkg/errors`.
+
+### Changed
+- Raise minimum tested/supported Go version to 1.2+
+
+### Fixed
+- Consider empty environment variables as set (previously environment variables
+ with the equivalent of `""` would be skipped rather than their value used).
+- Return an error if the value in a given environment variable cannot be parsed
+ as the flag type. Previously these errors were silently swallowed.
+- Print full error when an invalid flag is specified (which includes the invalid flag)
+- `App.Writer` defaults to `stdout` when `nil`
+- If no action is specified on a command or app, the help is now printed instead of `panic`ing
+- `App.Metadata` is initialized automatically now (previously was `nil` unless initialized)
+- Correctly show help message if `-h` is provided to a subcommand
+- `context.(Global)IsSet` now respects environment variables. Previously it
+ would return `false` if a flag was specified in the environment rather than
+ as an argument
+- Removed deprecation warnings to STDERR to avoid them leaking to the end-user
+- `altsrc`s import paths were updated to use `gopkg.in/urfave/cli.v1`. This
+ fixes issues that occurred when `gopkg.in/urfave/cli.v1` was imported as well
+ as `altsrc` where Go would complain that the types didn't match
+
+## [1.18.1] - 2016-08-28
+### Fixed
+- Removed deprecation warnings to STDERR to avoid them leaking to the end-user (backported)
+
+## [1.18.0] - 2016-06-27
+### Added
+- `./runtests` test runner with coverage tracking by default
+- testing on OS X
+- testing on Windows
+- `UintFlag`, `Uint64Flag`, and `Int64Flag` types and supporting code
+
+### Changed
+- Use spaces for alignment in help/usage output instead of tabs, making the
+ output alignment consistent regardless of tab width
+
+### Fixed
+- Printing of command aliases in help text
+- Printing of visible flags for both struct and struct pointer flags
+- Display the `help` subcommand when using `CommandCategories`
+- No longer swallows `panic`s that occur within the `Action`s themselves when
+ detecting the signature of the `Action` field
+
+## [1.17.1] - 2016-08-28
+### Fixed
+- Removed deprecation warnings to STDERR to avoid them leaking to the end-user
+
+## [1.17.0] - 2016-05-09
+### Added
+- Pluggable flag-level help text rendering via `cli.DefaultFlagStringFunc`
+- `context.GlobalBoolT` was added as an analogue to `context.GlobalBool`
+- Support for hiding commands by setting `Hidden: true` -- this will hide the
+ commands in help output
+
+### Changed
+- `Float64Flag`, `IntFlag`, and `DurationFlag` default values are no longer
+ quoted in help text output.
+- All flag types now include `(default: {value})` strings following usage when a
+ default value can be (reasonably) detected.
+- `IntSliceFlag` and `StringSliceFlag` usage strings are now more consistent
+ with non-slice flag types
+- Apps now exit with a code of 3 if an unknown subcommand is specified
+ (previously they printed "No help topic for...", but still exited 0. This
+ makes it easier to script around apps built using `cli` since they can trust
+ that a 0 exit code indicated a successful execution.
+- cleanups based on [Go Report Card
+ feedback](https://goreportcard.com/report/github.com/urfave/cli)
+
+## [1.16.1] - 2016-08-28
+### Fixed
+- Removed deprecation warnings to STDERR to avoid them leaking to the end-user
+
+## [1.16.0] - 2016-05-02
+### Added
+- `Hidden` field on all flag struct types to omit from generated help text
+
+### Changed
+- `BashCompletionFlag` (`--enable-bash-completion`) is now omitted from
+generated help text via the `Hidden` field
+
+### Fixed
+- handling of error values in `HandleAction` and `HandleExitCoder`
+
+## [1.15.0] - 2016-04-30
+### Added
+- This file!
+- Support for placeholders in flag usage strings
+- `App.Metadata` map for arbitrary data/state management
+- `Set` and `GlobalSet` methods on `*cli.Context` for altering values after
+parsing.
+- Support for nested lookup of dot-delimited keys in structures loaded from
+YAML.
+
+### Changed
+- The `App.Action` and `Command.Action` now prefer a return signature of
+`func(*cli.Context) error`, as defined by `cli.ActionFunc`. If a non-nil
+`error` is returned, there may be two outcomes:
+ - If the error fulfills `cli.ExitCoder`, then `os.Exit` will be called
+ automatically
+ - Else the error is bubbled up and returned from `App.Run`
+- Specifying an `Action` with the legacy return signature of
+`func(*cli.Context)` will produce a deprecation message to stderr
+- Specifying an `Action` that is not a `func` type will produce a non-zero exit
+from `App.Run`
+- Specifying an `Action` func that has an invalid (input) signature will
+produce a non-zero exit from `App.Run`
+
+### Deprecated
+-
+`cli.App.RunAndExitOnError`, which should now be done by returning an error
+that fulfills `cli.ExitCoder` to `cli.App.Run`.
+- the legacy signature for
+`cli.App.Action` of `func(*cli.Context)`, which should now have a return
+signature of `func(*cli.Context) error`, as defined by `cli.ActionFunc`.
+
+### Fixed
+- Added missing `*cli.Context.GlobalFloat64` method
+
+## [1.14.0] - 2016-04-03 (backfilled 2016-04-25)
+### Added
+- Codebeat badge
+- Support for categorization via `CategorizedHelp` and `Categories` on app.
+
+### Changed
+- Use `filepath.Base` instead of `path.Base` in `Name` and `HelpName`.
+
+### Fixed
+- Ensure version is not shown in help text when `HideVersion` set.
+
+## [1.13.0] - 2016-03-06 (backfilled 2016-04-25)
+### Added
+- YAML file input support.
+- `NArg` method on context.
+
+## [1.12.0] - 2016-02-17 (backfilled 2016-04-25)
+### Added
+- Custom usage error handling.
+- Custom text support in `USAGE` section of help output.
+- Improved help messages for empty strings.
+- AppVeyor CI configuration.
+
+### Changed
+- Removed `panic` from default help printer func.
+- De-duping and optimizations.
+
+### Fixed
+- Correctly handle `Before`/`After` at command level when no subcommands.
+- Case of literal `-` argument causing flag reordering.
+- Environment variable hints on Windows.
+- Docs updates.
+
+## [1.11.1] - 2015-12-21 (backfilled 2016-04-25)
+### Changed
+- Use `path.Base` in `Name` and `HelpName`
+- Export `GetName` on flag types.
+
+### Fixed
+- Flag parsing when skipping is enabled.
+- Test output cleanup.
+- Move completion check to account for empty input case.
+
+## [1.11.0] - 2015-11-15 (backfilled 2016-04-25)
+### Added
+- Destination scan support for flags.
+- Testing against `tip` in Travis CI config.
+
+### Changed
+- Go version in Travis CI config.
+
+### Fixed
+- Removed redundant tests.
+- Use correct example naming in tests.
+
+## [1.10.2] - 2015-10-29 (backfilled 2016-04-25)
+### Fixed
+- Remove unused var in bash completion.
+
+## [1.10.1] - 2015-10-21 (backfilled 2016-04-25)
+### Added
+- Coverage and reference logos in README.
+
+### Fixed
+- Use specified values in help and version parsing.
+- Only display app version and help message once.
+
+## [1.10.0] - 2015-10-06 (backfilled 2016-04-25)
+### Added
+- More tests for existing functionality.
+- `ArgsUsage` at app and command level for help text flexibility.
+
+### Fixed
+- Honor `HideHelp` and `HideVersion` in `App.Run`.
+- Remove juvenile word from README.
+
+## [1.9.0] - 2015-09-08 (backfilled 2016-04-25)
+### Added
+- `FullName` on command with accompanying help output update.
+- Set default `$PROG` in bash completion.
+
+### Changed
+- Docs formatting.
+
+### Fixed
+- Removed self-referential imports in tests.
+
+## [1.8.0] - 2015-06-30 (backfilled 2016-04-25)
+### Added
+- Support for `Copyright` at app level.
+- `Parent` func at context level to walk up context lineage.
+
+### Fixed
+- Global flag processing at top level.
+
+## [1.7.1] - 2015-06-11 (backfilled 2016-04-25)
+### Added
+- Aggregate errors from `Before`/`After` funcs.
+- Doc comments on flag structs.
+- Include non-global flags when checking version and help.
+- Travis CI config updates.
+
+### Fixed
+- Ensure slice type flags have non-nil values.
+- Collect global flags from the full command hierarchy.
+- Docs prose.
+
+## [1.7.0] - 2015-05-03 (backfilled 2016-04-25)
+### Changed
+- `HelpPrinter` signature includes output writer.
+
+### Fixed
+- Specify go 1.1+ in docs.
+- Set `Writer` when running command as app.
+
+## [1.6.0] - 2015-03-23 (backfilled 2016-04-25)
+### Added
+- Multiple author support.
+- `NumFlags` at context level.
+- `Aliases` at command level.
+
+### Deprecated
+- `ShortName` at command level.
+
+### Fixed
+- Subcommand help output.
+- Backward compatible support for deprecated `Author` and `Email` fields.
+- Docs regarding `Names`/`Aliases`.
+
+## [1.5.0] - 2015-02-20 (backfilled 2016-04-25)
+### Added
+- `After` hook func support at app and command level.
+
+### Fixed
+- Use parsed context when running command as subcommand.
+- Docs prose.
+
+## [1.4.1] - 2015-01-09 (backfilled 2016-04-25)
+### Added
+- Support for hiding `-h / --help` flags, but not `help` subcommand.
+- Stop flag parsing after `--`.
+
+### Fixed
+- Help text for generic flags to specify single value.
+- Use double quotes in output for defaults.
+- Use `ParseInt` instead of `ParseUint` for int environment var values.
+- Use `0` as base when parsing int environment var values.
+
+## [1.4.0] - 2014-12-12 (backfilled 2016-04-25)
+### Added
+- Support for environment variable lookup "cascade".
+- Support for `Stdout` on app for output redirection.
+
+### Fixed
+- Print command help instead of app help in `ShowCommandHelp`.
+
+## [1.3.1] - 2014-11-13 (backfilled 2016-04-25)
+### Added
+- Docs and example code updates.
+
+### Changed
+- Default `-v / --version` flag made optional.
+
+## [1.3.0] - 2014-08-10 (backfilled 2016-04-25)
+### Added
+- `FlagNames` at context level.
+- Exposed `VersionPrinter` var for more control over version output.
+- Zsh completion hook.
+- `AUTHOR` section in default app help template.
+- Contribution guidelines.
+- `DurationFlag` type.
+
+## [1.2.0] - 2014-08-02
+### Added
+- Support for environment variable defaults on flags plus tests.
+
+## [1.1.0] - 2014-07-15
+### Added
+- Bash completion.
+- Optional hiding of built-in help command.
+- Optional skipping of flag parsing at command level.
+- `Author`, `Email`, and `Compiled` metadata on app.
+- `Before` hook func support at app and command level.
+- `CommandNotFound` func support at app level.
+- Command reference available on context.
+- `GenericFlag` type.
+- `Float64Flag` type.
+- `BoolTFlag` type.
+- `IsSet` flag helper on context.
+- More flag lookup funcs at context level.
+- More tests & docs.
+
+### Changed
+- Help template updates to account for presence/absence of flags.
+- Separated subcommand help template.
+- Exposed `HelpPrinter` var for more control over help output.
+
+## [1.0.0] - 2013-11-01
+### Added
+- `help` flag in default app flag set and each command flag set.
+- Custom handling of argument parsing errors.
+- Command lookup by name at app level.
+- `StringSliceFlag` type and supporting `StringSlice` type.
+- `IntSliceFlag` type and supporting `IntSlice` type.
+- Slice type flag lookups by name at context level.
+- Export of app and command help functions.
+- More tests & docs.
+
+## 0.1.0 - 2013-07-22
+### Added
+- Initial implementation.
+
+[Unreleased]: https://github.com/urfave/cli/compare/v1.18.0...HEAD
+[1.18.0]: https://github.com/urfave/cli/compare/v1.17.0...v1.18.0
+[1.17.0]: https://github.com/urfave/cli/compare/v1.16.0...v1.17.0
+[1.16.0]: https://github.com/urfave/cli/compare/v1.15.0...v1.16.0
+[1.15.0]: https://github.com/urfave/cli/compare/v1.14.0...v1.15.0
+[1.14.0]: https://github.com/urfave/cli/compare/v1.13.0...v1.14.0
+[1.13.0]: https://github.com/urfave/cli/compare/v1.12.0...v1.13.0
+[1.12.0]: https://github.com/urfave/cli/compare/v1.11.1...v1.12.0
+[1.11.1]: https://github.com/urfave/cli/compare/v1.11.0...v1.11.1
+[1.11.0]: https://github.com/urfave/cli/compare/v1.10.2...v1.11.0
+[1.10.2]: https://github.com/urfave/cli/compare/v1.10.1...v1.10.2
+[1.10.1]: https://github.com/urfave/cli/compare/v1.10.0...v1.10.1
+[1.10.0]: https://github.com/urfave/cli/compare/v1.9.0...v1.10.0
+[1.9.0]: https://github.com/urfave/cli/compare/v1.8.0...v1.9.0
+[1.8.0]: https://github.com/urfave/cli/compare/v1.7.1...v1.8.0
+[1.7.1]: https://github.com/urfave/cli/compare/v1.7.0...v1.7.1
+[1.7.0]: https://github.com/urfave/cli/compare/v1.6.0...v1.7.0
+[1.6.0]: https://github.com/urfave/cli/compare/v1.5.0...v1.6.0
+[1.5.0]: https://github.com/urfave/cli/compare/v1.4.1...v1.5.0
+[1.4.1]: https://github.com/urfave/cli/compare/v1.4.0...v1.4.1
+[1.4.0]: https://github.com/urfave/cli/compare/v1.3.1...v1.4.0
+[1.3.1]: https://github.com/urfave/cli/compare/v1.3.0...v1.3.1
+[1.3.0]: https://github.com/urfave/cli/compare/v1.2.0...v1.3.0
+[1.2.0]: https://github.com/urfave/cli/compare/v1.1.0...v1.2.0
+[1.1.0]: https://github.com/urfave/cli/compare/v1.0.0...v1.1.0
+[1.0.0]: https://github.com/urfave/cli/compare/v0.1.0...v1.0.0
diff --git a/vendor/github.com/codegangsta/cli/LICENSE b/vendor/github.com/codegangsta/cli/LICENSE
new file mode 100644
index 0000000..42a597e
--- /dev/null
+++ b/vendor/github.com/codegangsta/cli/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2016 Jeremy Saenz & Contributors
+
+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.
diff --git a/vendor/github.com/codegangsta/cli/README.md b/vendor/github.com/codegangsta/cli/README.md
new file mode 100644
index 0000000..2bbbd8e
--- /dev/null
+++ b/vendor/github.com/codegangsta/cli/README.md
@@ -0,0 +1,1381 @@
+cli
+===
+
+[](https://travis-ci.org/urfave/cli)
+[](https://ci.appveyor.com/project/urfave/cli)
+[](https://godoc.org/github.com/urfave/cli)
+[](https://codebeat.co/projects/github-com-urfave-cli)
+[](https://goreportcard.com/report/urfave/cli)
+[](http://gocover.io/github.com/urfave/cli) /
+[](http://gocover.io/github.com/urfave/cli/altsrc)
+
+**Notice:** This is the library formerly known as
+`github.com/codegangsta/cli` -- Github will automatically redirect requests
+to this repository, but we recommend updating your references for clarity.
+
+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](#overview)
+- [Installation](#installation)
+ * [Supported platforms](#supported-platforms)
+ * [Using the `v2` branch](#using-the-v2-branch)
+ * [Pinning to the `v1` releases](#pinning-to-the-v1-releases)
+- [Getting Started](#getting-started)
+- [Examples](#examples)
+ * [Arguments](#arguments)
+ * [Flags](#flags)
+ + [Placeholder Values](#placeholder-values)
+ + [Alternate Names](#alternate-names)
+ + [Ordering](#ordering)
+ + [Values from the Environment](#values-from-the-environment)
+ + [Values from alternate input sources (YAML, TOML, and others)](#values-from-alternate-input-sources-yaml-toml-and-others)
+ * [Subcommands](#subcommands)
+ * [Subcommands categories](#subcommands-categories)
+ * [Exit code](#exit-code)
+ * [Bash Completion](#bash-completion)
+ + [Enabling](#enabling)
+ + [Distribution](#distribution)
+ + [Customization](#customization)
+ * [Generated Help Text](#generated-help-text)
+ + [Customization](#customization-1)
+ * [Version Flag](#version-flag)
+ + [Customization](#customization-2)
+ + [Full API Example](#full-api-example)
+- [Contribution Guidelines](#contribution-guidelines)
+
+
+
+## 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 version 1.2+ is supported. [See
+the install instructions for Go](http://golang.org/doc/install.html).
+
+To install cli, simply run:
+```
+$ go get github.com/urfave/cli
+```
+
+Make sure your `PATH` includes the `$GOPATH/bin` directory so your commands can
+be easily used:
+```
+export PATH=$PATH:$GOPATH/bin
+```
+
+### Supported platforms
+
+cli is tested against multiple versions of Go on Linux, and against the latest
+released version of Go on OS X and Windows. For full details, see
+[`./.travis.yml`](./.travis.yml) and [`./appveyor.yml`](./appveyor.yml).
+
+### Using the `v2` branch
+
+**Warning**: The `v2` branch is currently unreleased and considered unstable.
+
+There is currently a long-lived branch named `v2` that is intended to land as
+the new `master` branch once development there has settled down. The current
+`master` branch (mirrored as `v1`) is being manually merged into `v2` on
+an irregular human-based schedule, but generally if one wants to "upgrade" to
+`v2` *now* and accept the volatility (read: "awesomeness") that comes along with
+that, please use whatever version pinning of your preference, such as via
+`gopkg.in`:
+
+```
+$ go get gopkg.in/urfave/cli.v2
+```
+
+``` go
+...
+import (
+ "gopkg.in/urfave/cli.v2" // imports as package "cli"
+)
+...
+```
+
+### Pinning to the `v1` releases
+
+Similarly to the section above describing use of the `v2` branch, if one wants
+to avoid any unexpected compatibility pains once `v2` becomes `master`, then
+pinning to `v1` is an acceptable option, e.g.:
+
+```
+$ go get gopkg.in/urfave/cli.v1
+```
+
+``` go
+...
+import (
+ "gopkg.in/urfave/cli.v1" // imports as package "cli"
+)
+...
+```
+
+This will pull the latest tagged `v1` release (e.g. `v1.18.1` at the time of writing).
+
+## 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/urfave/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:
+
+
+``` go
+package main
+
+import (
+ "fmt"
+ "os"
+
+ "github.com/urfave/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.
+
+## Examples
+
+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:
+
+
+``` go
+package main
+
+import (
+ "fmt"
+ "os"
+
+ "github.com/urfave/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`, e.g.:
+
+
+``` go
+package main
+
+import (
+ "fmt"
+ "os"
+
+ "github.com/urfave/cli"
+)
+
+func main() {
+ app := cli.NewApp()
+
+ app.Action = func(c *cli.Context) error {
+ fmt.Printf("Hello %q", c.Args().Get(0))
+ return nil
+ }
+
+ app.Run(os.Args)
+}
+```
+
+### Flags
+
+Setting and querying flags is simple.
+
+
+``` go
+package main
+
+import (
+ "fmt"
+ "os"
+
+ "github.com/urfave/cli"
+)
+
+func main() {
+ app := cli.NewApp()
+
+ app.Flags = []cli.Flag {
+ cli.StringFlag{
+ Name: "lang",
+ Value: "english",
+ Usage: "language for the greeting",
+ },
+ }
+
+ app.Action = func(c *cli.Context) error {
+ name := "Nefertiti"
+ if c.NArg() > 0 {
+ name = c.Args().Get(0)
+ }
+ if c.String("lang") == "spanish" {
+ fmt.Println("Hola", name)
+ } else {
+ fmt.Println("Hello", name)
+ }
+ return nil
+ }
+
+ app.Run(os.Args)
+}
+```
+
+You can also set a destination variable for a flag, to which the content will be
+scanned.
+
+
+``` go
+package main
+
+import (
+ "os"
+ "fmt"
+
+ "github.com/urfave/cli"
+)
+
+func main() {
+ var language string
+
+ app := cli.NewApp()
+
+ 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
+ }
+
+ app.Run(os.Args)
+}
+```
+
+See full list of flags at http://godoc.org/github.com/urfave/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
+package main
+
+import (
+ "os"
+
+ "github.com/urfave/cli"
+)
+
+func main() {
+ app := cli.NewApp()
+
+ app.Flags = []cli.Flag{
+ cli.StringFlag{
+ Name: "config, c",
+ Usage: "Load configuration from `FILE`",
+ },
+ }
+
+ app.Run(os.Args)
+}
+```
+
+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
+package main
+
+import (
+ "os"
+
+ "github.com/urfave/cli"
+)
+
+func main() {
+ app := cli.NewApp()
+
+ app.Flags = []cli.Flag {
+ cli.StringFlag{
+ Name: "lang, l",
+ Value: "english",
+ Usage: "language for the greeting",
+ },
+ }
+
+ app.Run(os.Args)
+}
+```
+
+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.
+
+#### Ordering
+
+Flags for the application and commands are shown in the order they are defined.
+However, it's possible to sort them from outside this library by using `FlagsByName`
+or `CommandsByName` with `sort`.
+
+For example this:
+
+
+``` go
+package main
+
+import (
+ "os"
+ "sort"
+
+ "github.com/urfave/cli"
+)
+
+func main() {
+ app := cli.NewApp()
+
+ app.Flags = []cli.Flag {
+ cli.StringFlag{
+ Name: "lang, l",
+ Value: "english",
+ Usage: "Language for the greeting",
+ },
+ cli.StringFlag{
+ Name: "config, c",
+ Usage: "Load configuration from `FILE`",
+ },
+ }
+
+ app.Commands = []cli.Command{
+ {
+ Name: "complete",
+ Aliases: []string{"c"},
+ Usage: "complete a task on the list",
+ Action: func(c *cli.Context) error {
+ return nil
+ },
+ },
+ {
+ Name: "add",
+ Aliases: []string{"a"},
+ Usage: "add a task to the list",
+ Action: func(c *cli.Context) error {
+ return nil
+ },
+ },
+ }
+
+ sort.Sort(cli.FlagsByName(app.Flags))
+ sort.Sort(cli.CommandsByName(app.Commands))
+
+ app.Run(os.Args)
+}
+```
+
+Will result in help output like:
+
+```
+--config FILE, -c FILE Load configuration from FILE
+--lang value, -l value Language for the greeting (default: "english")
+```
+
+#### Values from the Environment
+
+You can also have the default value set from the environment via `EnvVar`. e.g.
+
+
+``` go
+package main
+
+import (
+ "os"
+
+ "github.com/urfave/cli"
+)
+
+func main() {
+ app := cli.NewApp()
+
+ app.Flags = []cli.Flag {
+ cli.StringFlag{
+ Name: "lang, l",
+ Value: "english",
+ Usage: "language for the greeting",
+ EnvVar: "APP_LANG",
+ },
+ }
+
+ app.Run(os.Args)
+}
+```
+
+The `EnvVar` may also be given as a comma-delimited "cascade", where the first
+environment variable that resolves is used as the default.
+
+
+``` go
+package main
+
+import (
+ "os"
+
+ "github.com/urfave/cli"
+)
+
+func main() {
+ app := cli.NewApp()
+
+ app.Flags = []cli.Flag {
+ cli.StringFlag{
+ Name: "lang, l",
+ Value: "english",
+ Usage: "language for the greeting",
+ EnvVar: "LEGACY_COMPAT_LANG,APP_LANG,LANG",
+ },
+ }
+
+ app.Run(os.Args)
+}
+```
+
+#### Values from alternate input sources (YAML, TOML, and others)
+
+There is a separate package altsrc that adds support for getting flag values
+from other file input sources.
+
+Currently supported input source formats:
+* YAML
+* TOML
+
+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 the aboved specified formats 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
+package notmain
+
+import (
+ "fmt"
+ "os"
+
+ "github.com/urfave/cli"
+ "github.com/urfave/cli/altsrc"
+)
+
+func main() {
+ app := cli.NewApp()
+
+ flags := []cli.Flag{
+ altsrc.NewIntFlag(cli.IntFlag{Name: "test"}),
+ cli.StringFlag{Name: "load"},
+ }
+
+ app.Action = func(c *cli.Context) error {
+ fmt.Println("yaml ist rad")
+ return nil
+ }
+
+ app.Before = altsrc.InitInputSourceWithContext(flags, altsrc.NewYamlSourceFromFlagFunc("load"))
+ app.Flags = flags
+
+ app.Run(os.Args)
+}
+```
+
+### Subcommands
+
+Subcommands can be defined for a more git-like command line app.
+
+
+```go
+package main
+
+import (
+ "fmt"
+ "os"
+
+ "github.com/urfave/cli"
+)
+
+func main() {
+ app := cli.NewApp()
+
+ 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{"t"},
+ 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
+ },
+ },
+ },
+ },
+ }
+
+ app.Run(os.Args)
+}
+```
+
+### 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
+package main
+
+import (
+ "os"
+
+ "github.com/urfave/cli"
+)
+
+func main() {
+ app := cli.NewApp()
+
+ app.Commands = []cli.Command{
+ {
+ Name: "noop",
+ },
+ {
+ Name: "add",
+ Category: "template",
+ },
+ {
+ Name: "remove",
+ Category: "template",
+ },
+ }
+
+ app.Run(os.Args)
+}
+```
+
+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/urfave/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
+package main
+
+import (
+ "fmt"
+ "os"
+
+ "github.com/urfave/cli"
+)
+
+func main() {
+ 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)
+ }
+ },
+ },
+ }
+
+ app.Run(os.Args)
+}
+```
+
+#### Enabling
+
+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`
+
+#### Distribution
+
+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/
+source /etc/bash_completion.d/
+```
+
+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).
+
+#### Customization
+
+The default bash completion flag (`--generate-bash-completion`) is defined as
+`cli.BashCompletionFlag`, and may be redefined if desired, e.g.:
+
+
+``` go
+package main
+
+import (
+ "os"
+
+ "github.com/urfave/cli"
+)
+
+func main() {
+ cli.BashCompletionFlag = cli.BoolFlag{
+ Name: "compgen",
+ Hidden: true,
+ }
+
+ app := cli.NewApp()
+ app.EnableBashCompletion = true
+ app.Commands = []cli.Command{
+ {
+ Name: "wat",
+ },
+ }
+ app.Run(os.Args)
+}
+```
+
+### Generated Help Text
+
+The default help flag (`-h/--help`) is defined as `cli.HelpFlag` and is checked
+by the cli internals in order to print generated help text for the app, command,
+or subcommand, and break execution.
+
+#### 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.:
+
+
+``` go
+package main
+
+import (
+ "fmt"
+ "io"
+ "os"
+
+ "github.com/urfave/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:
+ {{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)
+}
+```
+
+The default flag may be customized to something other than `-h/--help` by
+setting `cli.HelpFlag`, e.g.:
+
+
+``` go
+package main
+
+import (
+ "os"
+
+ "github.com/urfave/cli"
+)
+
+func main() {
+ cli.HelpFlag = cli.BoolFlag{
+ Name: "halp, haaaaalp",
+ Usage: "HALP",
+ EnvVar: "SHOW_HALP,HALPPLZ",
+ }
+
+ cli.NewApp().Run(os.Args)
+}
+```
+
+### Version Flag
+
+The default version flag (`-v/--version`) is defined as `cli.VersionFlag`, which
+is checked by the cli internals in order to print the `App.Version` via
+`cli.VersionPrinter` and break execution.
+
+#### Customization
+
+The default flag may be customized to something other than `-v/--version` by
+setting `cli.VersionFlag`, e.g.:
+
+
+``` go
+package main
+
+import (
+ "os"
+
+ "github.com/urfave/cli"
+)
+
+func main() {
+ cli.VersionFlag = cli.BoolFlag{
+ Name: "print-version, V",
+ Usage: "print only the version",
+ }
+
+ app := cli.NewApp()
+ app.Name = "partay"
+ app.Version = "19.99.0"
+ app.Run(os.Args)
+}
+```
+
+Alternatively, the version printer at `cli.VersionPrinter` may be overridden, e.g.:
+
+
+``` go
+package main
+
+import (
+ "fmt"
+ "os"
+
+ "github.com/urfave/cli"
+)
+
+var (
+ Revision = "fafafaf"
+)
+
+func main() {
+ cli.VersionPrinter = func(c *cli.Context) {
+ fmt.Printf("version=%s revision=%s\n", c.App.Version, Revision)
+ }
+
+ app := cli.NewApp()
+ app.Name = "partay"
+ app.Version = "19.99.0"
+ app.Run(os.Args)
+}
+```
+
+#### Full API Example
+
+**Notice**: This is a contrived (functioning) example meant strictly for API
+demonstration purposes. Use of one's imagination is encouraged.
+
+
+``` go
+package main
+
+import (
+ "errors"
+ "flag"
+ "fmt"
+ "io"
+ "io/ioutil"
+ "os"
+ "time"
+
+ "github.com/urfave/cli"
+)
+
+func init() {
+ cli.AppHelpTemplate += "\nCUSTOMIZED: you bet ur muffins\n"
+ cli.CommandHelpTemplate += "\nYMMV\n"
+ cli.SubcommandHelpTemplate += "\nor something\n"
+
+ cli.HelpFlag = cli.BoolFlag{Name: "halp"}
+ cli.BashCompletionFlag = cli.BoolFlag{Name: "compgen", Hidden: true}
+ cli.VersionFlag = cli.BoolFlag{Name: "print-version, V"}
+
+ cli.HelpPrinter = func(w io.Writer, templ string, data interface{}) {
+ fmt.Fprintf(w, "best of luck to you\n")
+ }
+ cli.VersionPrinter = func(c *cli.Context) {
+ fmt.Fprintf(c.App.Writer, "version=%s\n", c.App.Version)
+ }
+ cli.OsExiter = func(c int) {
+ fmt.Fprintf(cli.ErrWriter, "refusing to exit %d\n", c)
+ }
+ cli.ErrWriter = ioutil.Discard
+ cli.FlagStringer = func(fl cli.Flag) string {
+ return fmt.Sprintf("\t\t%s", fl.GetName())
+ }
+}
+
+type hexWriter struct{}
+
+func (w *hexWriter) Write(p []byte) (int, error) {
+ for _, b := range p {
+ fmt.Printf("%x", b)
+ }
+ fmt.Printf("\n")
+
+ return len(p), nil
+}
+
+type genericType struct{
+ s string
+}
+
+func (g *genericType) Set(value string) error {
+ g.s = value
+ return nil
+}
+
+func (g *genericType) String() string {
+ return g.s
+}
+
+func main() {
+ app := cli.NewApp()
+ app.Name = "kənˈtrīv"
+ app.Version = "19.99.0"
+ app.Compiled = time.Now()
+ app.Authors = []cli.Author{
+ cli.Author{
+ Name: "Example Human",
+ Email: "human@example.com",
+ },
+ }
+ app.Copyright = "(c) 1999 Serious Enterprise"
+ app.HelpName = "contrive"
+ app.Usage = "demonstrate available API"
+ app.UsageText = "contrive - demonstrating the available API"
+ app.ArgsUsage = "[args and such]"
+ app.Commands = []cli.Command{
+ cli.Command{
+ Name: "doo",
+ Aliases: []string{"do"},
+ Category: "motion",
+ Usage: "do the doo",
+ UsageText: "doo - does the dooing",
+ Description: "no really, there is a lot of dooing to be done",
+ ArgsUsage: "[arrgh]",
+ Flags: []cli.Flag{
+ cli.BoolFlag{Name: "forever, forevvarr"},
+ },
+ Subcommands: cli.Commands{
+ cli.Command{
+ Name: "wop",
+ Action: wopAction,
+ },
+ },
+ SkipFlagParsing: false,
+ HideHelp: false,
+ Hidden: false,
+ HelpName: "doo!",
+ BashComplete: func(c *cli.Context) {
+ fmt.Fprintf(c.App.Writer, "--better\n")
+ },
+ Before: func(c *cli.Context) error {
+ fmt.Fprintf(c.App.Writer, "brace for impact\n")
+ return nil
+ },
+ After: func(c *cli.Context) error {
+ fmt.Fprintf(c.App.Writer, "did we lose anyone?\n")
+ return nil
+ },
+ Action: func(c *cli.Context) error {
+ c.Command.FullName()
+ c.Command.HasName("wop")
+ c.Command.Names()
+ c.Command.VisibleFlags()
+ fmt.Fprintf(c.App.Writer, "dodododododoodododddooooododododooo\n")
+ if c.Bool("forever") {
+ c.Command.Run(c)
+ }
+ return nil
+ },
+ OnUsageError: func(c *cli.Context, err error, isSubcommand bool) error {
+ fmt.Fprintf(c.App.Writer, "for shame\n")
+ return err
+ },
+ },
+ }
+ app.Flags = []cli.Flag{
+ cli.BoolFlag{Name: "fancy"},
+ cli.BoolTFlag{Name: "fancier"},
+ cli.DurationFlag{Name: "howlong, H", Value: time.Second * 3},
+ cli.Float64Flag{Name: "howmuch"},
+ cli.GenericFlag{Name: "wat", Value: &genericType{}},
+ cli.Int64Flag{Name: "longdistance"},
+ cli.Int64SliceFlag{Name: "intervals"},
+ cli.IntFlag{Name: "distance"},
+ cli.IntSliceFlag{Name: "times"},
+ cli.StringFlag{Name: "dance-move, d"},
+ cli.StringSliceFlag{Name: "names, N"},
+ cli.UintFlag{Name: "age"},
+ cli.Uint64Flag{Name: "bigage"},
+ }
+ app.EnableBashCompletion = true
+ app.HideHelp = false
+ app.HideVersion = false
+ app.BashComplete = func(c *cli.Context) {
+ fmt.Fprintf(c.App.Writer, "lipstick\nkiss\nme\nlipstick\nringo\n")
+ }
+ app.Before = func(c *cli.Context) error {
+ fmt.Fprintf(c.App.Writer, "HEEEERE GOES\n")
+ return nil
+ }
+ app.After = func(c *cli.Context) error {
+ fmt.Fprintf(c.App.Writer, "Phew!\n")
+ return nil
+ }
+ app.CommandNotFound = func(c *cli.Context, command string) {
+ fmt.Fprintf(c.App.Writer, "Thar be no %q here.\n", command)
+ }
+ app.OnUsageError = func(c *cli.Context, err error, isSubcommand bool) error {
+ if isSubcommand {
+ return err
+ }
+
+ fmt.Fprintf(c.App.Writer, "WRONG: %#v\n", err)
+ return nil
+ }
+ app.Action = func(c *cli.Context) error {
+ cli.DefaultAppComplete(c)
+ cli.HandleExitCoder(errors.New("not an exit coder, though"))
+ cli.ShowAppHelp(c)
+ cli.ShowCommandCompletions(c, "nope")
+ cli.ShowCommandHelp(c, "also-nope")
+ cli.ShowCompletions(c)
+ cli.ShowSubcommandHelp(c)
+ cli.ShowVersion(c)
+
+ categories := c.App.Categories()
+ categories.AddCommand("sounds", cli.Command{
+ Name: "bloop",
+ })
+
+ for _, category := range c.App.Categories() {
+ fmt.Fprintf(c.App.Writer, "%s\n", category.Name)
+ fmt.Fprintf(c.App.Writer, "%#v\n", category.Commands)
+ fmt.Fprintf(c.App.Writer, "%#v\n", category.VisibleCommands())
+ }
+
+ fmt.Printf("%#v\n", c.App.Command("doo"))
+ if c.Bool("infinite") {
+ c.App.Run([]string{"app", "doo", "wop"})
+ }
+
+ if c.Bool("forevar") {
+ c.App.RunAsSubcommand(c)
+ }
+ c.App.Setup()
+ fmt.Printf("%#v\n", c.App.VisibleCategories())
+ fmt.Printf("%#v\n", c.App.VisibleCommands())
+ fmt.Printf("%#v\n", c.App.VisibleFlags())
+
+ fmt.Printf("%#v\n", c.Args().First())
+ if len(c.Args()) > 0 {
+ fmt.Printf("%#v\n", c.Args()[1])
+ }
+ fmt.Printf("%#v\n", c.Args().Present())
+ fmt.Printf("%#v\n", c.Args().Tail())
+
+ set := flag.NewFlagSet("contrive", 0)
+ nc := cli.NewContext(c.App, set, c)
+
+ fmt.Printf("%#v\n", nc.Args())
+ fmt.Printf("%#v\n", nc.Bool("nope"))
+ fmt.Printf("%#v\n", nc.BoolT("nerp"))
+ fmt.Printf("%#v\n", nc.Duration("howlong"))
+ fmt.Printf("%#v\n", nc.Float64("hay"))
+ fmt.Printf("%#v\n", nc.Generic("bloop"))
+ fmt.Printf("%#v\n", nc.Int64("bonk"))
+ fmt.Printf("%#v\n", nc.Int64Slice("burnks"))
+ fmt.Printf("%#v\n", nc.Int("bips"))
+ fmt.Printf("%#v\n", nc.IntSlice("blups"))
+ fmt.Printf("%#v\n", nc.String("snurt"))
+ fmt.Printf("%#v\n", nc.StringSlice("snurkles"))
+ fmt.Printf("%#v\n", nc.Uint("flub"))
+ fmt.Printf("%#v\n", nc.Uint64("florb"))
+ fmt.Printf("%#v\n", nc.GlobalBool("global-nope"))
+ fmt.Printf("%#v\n", nc.GlobalBoolT("global-nerp"))
+ fmt.Printf("%#v\n", nc.GlobalDuration("global-howlong"))
+ fmt.Printf("%#v\n", nc.GlobalFloat64("global-hay"))
+ fmt.Printf("%#v\n", nc.GlobalGeneric("global-bloop"))
+ fmt.Printf("%#v\n", nc.GlobalInt("global-bips"))
+ fmt.Printf("%#v\n", nc.GlobalIntSlice("global-blups"))
+ fmt.Printf("%#v\n", nc.GlobalString("global-snurt"))
+ fmt.Printf("%#v\n", nc.GlobalStringSlice("global-snurkles"))
+
+ fmt.Printf("%#v\n", nc.FlagNames())
+ fmt.Printf("%#v\n", nc.GlobalFlagNames())
+ fmt.Printf("%#v\n", nc.GlobalIsSet("wat"))
+ fmt.Printf("%#v\n", nc.GlobalSet("wat", "nope"))
+ fmt.Printf("%#v\n", nc.NArg())
+ fmt.Printf("%#v\n", nc.NumFlags())
+ fmt.Printf("%#v\n", nc.Parent())
+
+ nc.Set("wat", "also-nope")
+
+ ec := cli.NewExitError("ohwell", 86)
+ fmt.Fprintf(c.App.Writer, "%d", ec.ExitCode())
+ fmt.Printf("made it!\n")
+ return ec
+ }
+
+ if os.Getenv("HEXY") != "" {
+ app.Writer = &hexWriter{}
+ app.ErrWriter = &hexWriter{}
+ }
+
+ app.Metadata = map[string]interface{}{
+ "layers": "many",
+ "explicable": false,
+ "whatever-values": 19.99,
+ }
+
+ app.Run(os.Args)
+}
+
+func wopAction(c *cli.Context) error {
+ fmt.Fprintf(c.App.Writer, ":wave: over here, eh\n")
+ return nil
+}
+```
+
+## 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, we 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 feel like you have contributed to the project but have not yet been
+added as a collaborator, we probably forgot to add you, please open an issue.
diff --git a/vendor/github.com/codegangsta/cli/altsrc/altsrc.go b/vendor/github.com/codegangsta/cli/altsrc/altsrc.go
new file mode 100644
index 0000000..ac34bf6
--- /dev/null
+++ b/vendor/github.com/codegangsta/cli/altsrc/altsrc.go
@@ -0,0 +1,3 @@
+package altsrc
+
+//go:generate python ../generate-flag-types altsrc -i ../flag-types.json -o flag_generated.go
diff --git a/vendor/github.com/codegangsta/cli/altsrc/flag.go b/vendor/github.com/codegangsta/cli/altsrc/flag.go
new file mode 100644
index 0000000..84ef009
--- /dev/null
+++ b/vendor/github.com/codegangsta/cli/altsrc/flag.go
@@ -0,0 +1,261 @@
+package altsrc
+
+import (
+ "fmt"
+ "strconv"
+ "strings"
+ "syscall"
+
+ "gopkg.in/urfave/cli.v1"
+)
+
+// FlagInputSourceExtension is an extension interface of cli.Flag that
+// allows a value to be set on the existing parsed flags.
+type FlagInputSourceExtension interface {
+ cli.Flag
+ ApplyInputSourceValue(context *cli.Context, isc InputSourceContext) error
+}
+
+// ApplyInputSourceValues iterates over all provided flags and
+// executes ApplyInputSourceValue on flags implementing the
+// FlagInputSourceExtension interface to initialize these flags
+// to an alternate input source.
+func ApplyInputSourceValues(context *cli.Context, inputSourceContext InputSourceContext, flags []cli.Flag) error {
+ for _, f := range flags {
+ inputSourceExtendedFlag, isType := f.(FlagInputSourceExtension)
+ if isType {
+ err := inputSourceExtendedFlag.ApplyInputSourceValue(context, inputSourceContext)
+ if err != nil {
+ return err
+ }
+ }
+ }
+
+ return nil
+}
+
+// InitInputSource is used to to setup an InputSourceContext on a cli.Command Before method. It will create a new
+// input source based on the func provided. If there is no error it will then apply the new input source to any flags
+// that are supported by the input source
+func InitInputSource(flags []cli.Flag, createInputSource func() (InputSourceContext, error)) cli.BeforeFunc {
+ return func(context *cli.Context) error {
+ inputSource, err := createInputSource()
+ if err != nil {
+ return fmt.Errorf("Unable to create input source: inner error: \n'%v'", err.Error())
+ }
+
+ return ApplyInputSourceValues(context, inputSource, flags)
+ }
+}
+
+// InitInputSourceWithContext is used to to setup an InputSourceContext on a cli.Command Before method. It will create a new
+// input source based on the func provided with potentially using existing cli.Context values to initialize itself. If there is
+// no error it will then apply the new input source to any flags that are supported by the input source
+func InitInputSourceWithContext(flags []cli.Flag, createInputSource func(context *cli.Context) (InputSourceContext, error)) cli.BeforeFunc {
+ return func(context *cli.Context) error {
+ inputSource, err := createInputSource(context)
+ if err != nil {
+ return fmt.Errorf("Unable to create input source with context: inner error: \n'%v'", err.Error())
+ }
+
+ return ApplyInputSourceValues(context, inputSource, flags)
+ }
+}
+
+// ApplyInputSourceValue applies a generic value to the flagSet if required
+func (f *GenericFlag) ApplyInputSourceValue(context *cli.Context, isc InputSourceContext) error {
+ if f.set != nil {
+ if !context.IsSet(f.Name) && !isEnvVarSet(f.EnvVar) {
+ value, err := isc.Generic(f.GenericFlag.Name)
+ if err != nil {
+ return err
+ }
+ if value != nil {
+ eachName(f.Name, func(name string) {
+ f.set.Set(f.Name, value.String())
+ })
+ }
+ }
+ }
+
+ return nil
+}
+
+// ApplyInputSourceValue applies a StringSlice value to the flagSet if required
+func (f *StringSliceFlag) ApplyInputSourceValue(context *cli.Context, isc InputSourceContext) error {
+ if f.set != nil {
+ if !context.IsSet(f.Name) && !isEnvVarSet(f.EnvVar) {
+ value, err := isc.StringSlice(f.StringSliceFlag.Name)
+ if err != nil {
+ return err
+ }
+ if value != nil {
+ var sliceValue cli.StringSlice = value
+ eachName(f.Name, func(name string) {
+ underlyingFlag := f.set.Lookup(f.Name)
+ if underlyingFlag != nil {
+ underlyingFlag.Value = &sliceValue
+ }
+ })
+ }
+ }
+ }
+ return nil
+}
+
+// ApplyInputSourceValue applies a IntSlice value if required
+func (f *IntSliceFlag) ApplyInputSourceValue(context *cli.Context, isc InputSourceContext) error {
+ if f.set != nil {
+ if !context.IsSet(f.Name) && !isEnvVarSet(f.EnvVar) {
+ value, err := isc.IntSlice(f.IntSliceFlag.Name)
+ if err != nil {
+ return err
+ }
+ if value != nil {
+ var sliceValue cli.IntSlice = value
+ eachName(f.Name, func(name string) {
+ underlyingFlag := f.set.Lookup(f.Name)
+ if underlyingFlag != nil {
+ underlyingFlag.Value = &sliceValue
+ }
+ })
+ }
+ }
+ }
+ return nil
+}
+
+// ApplyInputSourceValue applies a Bool value to the flagSet if required
+func (f *BoolFlag) ApplyInputSourceValue(context *cli.Context, isc InputSourceContext) error {
+ if f.set != nil {
+ if !context.IsSet(f.Name) && !isEnvVarSet(f.EnvVar) {
+ value, err := isc.Bool(f.BoolFlag.Name)
+ if err != nil {
+ return err
+ }
+ if value {
+ eachName(f.Name, func(name string) {
+ f.set.Set(f.Name, strconv.FormatBool(value))
+ })
+ }
+ }
+ }
+ return nil
+}
+
+// ApplyInputSourceValue applies a BoolT value to the flagSet if required
+func (f *BoolTFlag) ApplyInputSourceValue(context *cli.Context, isc InputSourceContext) error {
+ if f.set != nil {
+ if !context.IsSet(f.Name) && !isEnvVarSet(f.EnvVar) {
+ value, err := isc.BoolT(f.BoolTFlag.Name)
+ if err != nil {
+ return err
+ }
+ if !value {
+ eachName(f.Name, func(name string) {
+ f.set.Set(f.Name, strconv.FormatBool(value))
+ })
+ }
+ }
+ }
+ return nil
+}
+
+// ApplyInputSourceValue applies a String value to the flagSet if required
+func (f *StringFlag) ApplyInputSourceValue(context *cli.Context, isc InputSourceContext) error {
+ if f.set != nil {
+ if !(context.IsSet(f.Name) || isEnvVarSet(f.EnvVar)) {
+ value, err := isc.String(f.StringFlag.Name)
+ if err != nil {
+ return err
+ }
+ if value != "" {
+ eachName(f.Name, func(name string) {
+ f.set.Set(f.Name, value)
+ })
+ }
+ }
+ }
+ return nil
+}
+
+// ApplyInputSourceValue applies a int value to the flagSet if required
+func (f *IntFlag) ApplyInputSourceValue(context *cli.Context, isc InputSourceContext) error {
+ if f.set != nil {
+ if !(context.IsSet(f.Name) || isEnvVarSet(f.EnvVar)) {
+ value, err := isc.Int(f.IntFlag.Name)
+ if err != nil {
+ return err
+ }
+ if value > 0 {
+ eachName(f.Name, func(name string) {
+ f.set.Set(f.Name, strconv.FormatInt(int64(value), 10))
+ })
+ }
+ }
+ }
+ return nil
+}
+
+// ApplyInputSourceValue applies a Duration value to the flagSet if required
+func (f *DurationFlag) ApplyInputSourceValue(context *cli.Context, isc InputSourceContext) error {
+ if f.set != nil {
+ if !(context.IsSet(f.Name) || isEnvVarSet(f.EnvVar)) {
+ value, err := isc.Duration(f.DurationFlag.Name)
+ if err != nil {
+ return err
+ }
+ if value > 0 {
+ eachName(f.Name, func(name string) {
+ f.set.Set(f.Name, value.String())
+ })
+ }
+ }
+ }
+ return nil
+}
+
+// ApplyInputSourceValue applies a Float64 value to the flagSet if required
+func (f *Float64Flag) ApplyInputSourceValue(context *cli.Context, isc InputSourceContext) error {
+ if f.set != nil {
+ if !(context.IsSet(f.Name) || isEnvVarSet(f.EnvVar)) {
+ value, err := isc.Float64(f.Float64Flag.Name)
+ if err != nil {
+ return err
+ }
+ if value > 0 {
+ floatStr := float64ToString(value)
+ eachName(f.Name, func(name string) {
+ f.set.Set(f.Name, floatStr)
+ })
+ }
+ }
+ }
+ return nil
+}
+
+func isEnvVarSet(envVars string) bool {
+ for _, envVar := range strings.Split(envVars, ",") {
+ envVar = strings.TrimSpace(envVar)
+ if _, ok := syscall.Getenv(envVar); ok {
+ // TODO: Can't use this for bools as
+ // set means that it was true or false based on
+ // Bool flag type, should work for other types
+ return true
+ }
+ }
+
+ return false
+}
+
+func float64ToString(f float64) string {
+ return fmt.Sprintf("%v", f)
+}
+
+func eachName(longName string, fn func(string)) {
+ parts := strings.Split(longName, ",")
+ for _, name := range parts {
+ name = strings.Trim(name, " ")
+ fn(name)
+ }
+}
diff --git a/vendor/github.com/codegangsta/cli/altsrc/flag_generated.go b/vendor/github.com/codegangsta/cli/altsrc/flag_generated.go
new file mode 100644
index 0000000..0aeb0b0
--- /dev/null
+++ b/vendor/github.com/codegangsta/cli/altsrc/flag_generated.go
@@ -0,0 +1,347 @@
+package altsrc
+
+import (
+ "flag"
+
+ "gopkg.in/urfave/cli.v1"
+)
+
+// WARNING: This file is generated!
+
+// BoolFlag is the flag type that wraps cli.BoolFlag to allow
+// for other values to be specified
+type BoolFlag struct {
+ cli.BoolFlag
+ set *flag.FlagSet
+}
+
+// NewBoolFlag creates a new BoolFlag
+func NewBoolFlag(fl cli.BoolFlag) *BoolFlag {
+ return &BoolFlag{BoolFlag: fl, set: nil}
+}
+
+// Apply saves the flagSet for later usage calls, then calls the
+// wrapped BoolFlag.Apply
+func (f *BoolFlag) Apply(set *flag.FlagSet) {
+ f.set = set
+ f.BoolFlag.Apply(set)
+}
+
+// ApplyWithError saves the flagSet for later usage calls, then calls the
+// wrapped BoolFlag.ApplyWithError
+func (f *BoolFlag) ApplyWithError(set *flag.FlagSet) error {
+ f.set = set
+ return f.BoolFlag.ApplyWithError(set)
+}
+
+// BoolTFlag is the flag type that wraps cli.BoolTFlag to allow
+// for other values to be specified
+type BoolTFlag struct {
+ cli.BoolTFlag
+ set *flag.FlagSet
+}
+
+// NewBoolTFlag creates a new BoolTFlag
+func NewBoolTFlag(fl cli.BoolTFlag) *BoolTFlag {
+ return &BoolTFlag{BoolTFlag: fl, set: nil}
+}
+
+// Apply saves the flagSet for later usage calls, then calls the
+// wrapped BoolTFlag.Apply
+func (f *BoolTFlag) Apply(set *flag.FlagSet) {
+ f.set = set
+ f.BoolTFlag.Apply(set)
+}
+
+// ApplyWithError saves the flagSet for later usage calls, then calls the
+// wrapped BoolTFlag.ApplyWithError
+func (f *BoolTFlag) ApplyWithError(set *flag.FlagSet) error {
+ f.set = set
+ return f.BoolTFlag.ApplyWithError(set)
+}
+
+// DurationFlag is the flag type that wraps cli.DurationFlag to allow
+// for other values to be specified
+type DurationFlag struct {
+ cli.DurationFlag
+ set *flag.FlagSet
+}
+
+// NewDurationFlag creates a new DurationFlag
+func NewDurationFlag(fl cli.DurationFlag) *DurationFlag {
+ return &DurationFlag{DurationFlag: fl, set: nil}
+}
+
+// Apply saves the flagSet for later usage calls, then calls the
+// wrapped DurationFlag.Apply
+func (f *DurationFlag) Apply(set *flag.FlagSet) {
+ f.set = set
+ f.DurationFlag.Apply(set)
+}
+
+// ApplyWithError saves the flagSet for later usage calls, then calls the
+// wrapped DurationFlag.ApplyWithError
+func (f *DurationFlag) ApplyWithError(set *flag.FlagSet) error {
+ f.set = set
+ return f.DurationFlag.ApplyWithError(set)
+}
+
+// Float64Flag is the flag type that wraps cli.Float64Flag to allow
+// for other values to be specified
+type Float64Flag struct {
+ cli.Float64Flag
+ set *flag.FlagSet
+}
+
+// NewFloat64Flag creates a new Float64Flag
+func NewFloat64Flag(fl cli.Float64Flag) *Float64Flag {
+ return &Float64Flag{Float64Flag: fl, set: nil}
+}
+
+// Apply saves the flagSet for later usage calls, then calls the
+// wrapped Float64Flag.Apply
+func (f *Float64Flag) Apply(set *flag.FlagSet) {
+ f.set = set
+ f.Float64Flag.Apply(set)
+}
+
+// ApplyWithError saves the flagSet for later usage calls, then calls the
+// wrapped Float64Flag.ApplyWithError
+func (f *Float64Flag) ApplyWithError(set *flag.FlagSet) error {
+ f.set = set
+ return f.Float64Flag.ApplyWithError(set)
+}
+
+// GenericFlag is the flag type that wraps cli.GenericFlag to allow
+// for other values to be specified
+type GenericFlag struct {
+ cli.GenericFlag
+ set *flag.FlagSet
+}
+
+// NewGenericFlag creates a new GenericFlag
+func NewGenericFlag(fl cli.GenericFlag) *GenericFlag {
+ return &GenericFlag{GenericFlag: fl, set: nil}
+}
+
+// Apply saves the flagSet for later usage calls, then calls the
+// wrapped GenericFlag.Apply
+func (f *GenericFlag) Apply(set *flag.FlagSet) {
+ f.set = set
+ f.GenericFlag.Apply(set)
+}
+
+// ApplyWithError saves the flagSet for later usage calls, then calls the
+// wrapped GenericFlag.ApplyWithError
+func (f *GenericFlag) ApplyWithError(set *flag.FlagSet) error {
+ f.set = set
+ return f.GenericFlag.ApplyWithError(set)
+}
+
+// Int64Flag is the flag type that wraps cli.Int64Flag to allow
+// for other values to be specified
+type Int64Flag struct {
+ cli.Int64Flag
+ set *flag.FlagSet
+}
+
+// NewInt64Flag creates a new Int64Flag
+func NewInt64Flag(fl cli.Int64Flag) *Int64Flag {
+ return &Int64Flag{Int64Flag: fl, set: nil}
+}
+
+// Apply saves the flagSet for later usage calls, then calls the
+// wrapped Int64Flag.Apply
+func (f *Int64Flag) Apply(set *flag.FlagSet) {
+ f.set = set
+ f.Int64Flag.Apply(set)
+}
+
+// ApplyWithError saves the flagSet for later usage calls, then calls the
+// wrapped Int64Flag.ApplyWithError
+func (f *Int64Flag) ApplyWithError(set *flag.FlagSet) error {
+ f.set = set
+ return f.Int64Flag.ApplyWithError(set)
+}
+
+// IntFlag is the flag type that wraps cli.IntFlag to allow
+// for other values to be specified
+type IntFlag struct {
+ cli.IntFlag
+ set *flag.FlagSet
+}
+
+// NewIntFlag creates a new IntFlag
+func NewIntFlag(fl cli.IntFlag) *IntFlag {
+ return &IntFlag{IntFlag: fl, set: nil}
+}
+
+// Apply saves the flagSet for later usage calls, then calls the
+// wrapped IntFlag.Apply
+func (f *IntFlag) Apply(set *flag.FlagSet) {
+ f.set = set
+ f.IntFlag.Apply(set)
+}
+
+// ApplyWithError saves the flagSet for later usage calls, then calls the
+// wrapped IntFlag.ApplyWithError
+func (f *IntFlag) ApplyWithError(set *flag.FlagSet) error {
+ f.set = set
+ return f.IntFlag.ApplyWithError(set)
+}
+
+// IntSliceFlag is the flag type that wraps cli.IntSliceFlag to allow
+// for other values to be specified
+type IntSliceFlag struct {
+ cli.IntSliceFlag
+ set *flag.FlagSet
+}
+
+// NewIntSliceFlag creates a new IntSliceFlag
+func NewIntSliceFlag(fl cli.IntSliceFlag) *IntSliceFlag {
+ return &IntSliceFlag{IntSliceFlag: fl, set: nil}
+}
+
+// Apply saves the flagSet for later usage calls, then calls the
+// wrapped IntSliceFlag.Apply
+func (f *IntSliceFlag) Apply(set *flag.FlagSet) {
+ f.set = set
+ f.IntSliceFlag.Apply(set)
+}
+
+// ApplyWithError saves the flagSet for later usage calls, then calls the
+// wrapped IntSliceFlag.ApplyWithError
+func (f *IntSliceFlag) ApplyWithError(set *flag.FlagSet) error {
+ f.set = set
+ return f.IntSliceFlag.ApplyWithError(set)
+}
+
+// Int64SliceFlag is the flag type that wraps cli.Int64SliceFlag to allow
+// for other values to be specified
+type Int64SliceFlag struct {
+ cli.Int64SliceFlag
+ set *flag.FlagSet
+}
+
+// NewInt64SliceFlag creates a new Int64SliceFlag
+func NewInt64SliceFlag(fl cli.Int64SliceFlag) *Int64SliceFlag {
+ return &Int64SliceFlag{Int64SliceFlag: fl, set: nil}
+}
+
+// Apply saves the flagSet for later usage calls, then calls the
+// wrapped Int64SliceFlag.Apply
+func (f *Int64SliceFlag) Apply(set *flag.FlagSet) {
+ f.set = set
+ f.Int64SliceFlag.Apply(set)
+}
+
+// ApplyWithError saves the flagSet for later usage calls, then calls the
+// wrapped Int64SliceFlag.ApplyWithError
+func (f *Int64SliceFlag) ApplyWithError(set *flag.FlagSet) error {
+ f.set = set
+ return f.Int64SliceFlag.ApplyWithError(set)
+}
+
+// StringFlag is the flag type that wraps cli.StringFlag to allow
+// for other values to be specified
+type StringFlag struct {
+ cli.StringFlag
+ set *flag.FlagSet
+}
+
+// NewStringFlag creates a new StringFlag
+func NewStringFlag(fl cli.StringFlag) *StringFlag {
+ return &StringFlag{StringFlag: fl, set: nil}
+}
+
+// Apply saves the flagSet for later usage calls, then calls the
+// wrapped StringFlag.Apply
+func (f *StringFlag) Apply(set *flag.FlagSet) {
+ f.set = set
+ f.StringFlag.Apply(set)
+}
+
+// ApplyWithError saves the flagSet for later usage calls, then calls the
+// wrapped StringFlag.ApplyWithError
+func (f *StringFlag) ApplyWithError(set *flag.FlagSet) error {
+ f.set = set
+ return f.StringFlag.ApplyWithError(set)
+}
+
+// StringSliceFlag is the flag type that wraps cli.StringSliceFlag to allow
+// for other values to be specified
+type StringSliceFlag struct {
+ cli.StringSliceFlag
+ set *flag.FlagSet
+}
+
+// NewStringSliceFlag creates a new StringSliceFlag
+func NewStringSliceFlag(fl cli.StringSliceFlag) *StringSliceFlag {
+ return &StringSliceFlag{StringSliceFlag: fl, set: nil}
+}
+
+// Apply saves the flagSet for later usage calls, then calls the
+// wrapped StringSliceFlag.Apply
+func (f *StringSliceFlag) Apply(set *flag.FlagSet) {
+ f.set = set
+ f.StringSliceFlag.Apply(set)
+}
+
+// ApplyWithError saves the flagSet for later usage calls, then calls the
+// wrapped StringSliceFlag.ApplyWithError
+func (f *StringSliceFlag) ApplyWithError(set *flag.FlagSet) error {
+ f.set = set
+ return f.StringSliceFlag.ApplyWithError(set)
+}
+
+// Uint64Flag is the flag type that wraps cli.Uint64Flag to allow
+// for other values to be specified
+type Uint64Flag struct {
+ cli.Uint64Flag
+ set *flag.FlagSet
+}
+
+// NewUint64Flag creates a new Uint64Flag
+func NewUint64Flag(fl cli.Uint64Flag) *Uint64Flag {
+ return &Uint64Flag{Uint64Flag: fl, set: nil}
+}
+
+// Apply saves the flagSet for later usage calls, then calls the
+// wrapped Uint64Flag.Apply
+func (f *Uint64Flag) Apply(set *flag.FlagSet) {
+ f.set = set
+ f.Uint64Flag.Apply(set)
+}
+
+// ApplyWithError saves the flagSet for later usage calls, then calls the
+// wrapped Uint64Flag.ApplyWithError
+func (f *Uint64Flag) ApplyWithError(set *flag.FlagSet) error {
+ f.set = set
+ return f.Uint64Flag.ApplyWithError(set)
+}
+
+// UintFlag is the flag type that wraps cli.UintFlag to allow
+// for other values to be specified
+type UintFlag struct {
+ cli.UintFlag
+ set *flag.FlagSet
+}
+
+// NewUintFlag creates a new UintFlag
+func NewUintFlag(fl cli.UintFlag) *UintFlag {
+ return &UintFlag{UintFlag: fl, set: nil}
+}
+
+// Apply saves the flagSet for later usage calls, then calls the
+// wrapped UintFlag.Apply
+func (f *UintFlag) Apply(set *flag.FlagSet) {
+ f.set = set
+ f.UintFlag.Apply(set)
+}
+
+// ApplyWithError saves the flagSet for later usage calls, then calls the
+// wrapped UintFlag.ApplyWithError
+func (f *UintFlag) ApplyWithError(set *flag.FlagSet) error {
+ f.set = set
+ return f.UintFlag.ApplyWithError(set)
+}
diff --git a/vendor/github.com/codegangsta/cli/altsrc/flag_test.go b/vendor/github.com/codegangsta/cli/altsrc/flag_test.go
new file mode 100644
index 0000000..cd18294
--- /dev/null
+++ b/vendor/github.com/codegangsta/cli/altsrc/flag_test.go
@@ -0,0 +1,336 @@
+package altsrc
+
+import (
+ "flag"
+ "fmt"
+ "os"
+ "strings"
+ "testing"
+ "time"
+
+ "gopkg.in/urfave/cli.v1"
+)
+
+type testApplyInputSource struct {
+ Flag FlagInputSourceExtension
+ FlagName string
+ FlagSetName string
+ Expected string
+ ContextValueString string
+ ContextValue flag.Value
+ EnvVarValue string
+ EnvVarName string
+ MapValue interface{}
+}
+
+func TestGenericApplyInputSourceValue(t *testing.T) {
+ v := &Parser{"abc", "def"}
+ c := runTest(t, testApplyInputSource{
+ Flag: NewGenericFlag(cli.GenericFlag{Name: "test", Value: &Parser{}}),
+ FlagName: "test",
+ MapValue: v,
+ })
+ expect(t, v, c.Generic("test"))
+}
+
+func TestGenericApplyInputSourceMethodContextSet(t *testing.T) {
+ p := &Parser{"abc", "def"}
+ c := runTest(t, testApplyInputSource{
+ Flag: NewGenericFlag(cli.GenericFlag{Name: "test", Value: &Parser{}}),
+ FlagName: "test",
+ MapValue: &Parser{"efg", "hig"},
+ ContextValueString: p.String(),
+ })
+ expect(t, p, c.Generic("test"))
+}
+
+func TestGenericApplyInputSourceMethodEnvVarSet(t *testing.T) {
+ c := runTest(t, testApplyInputSource{
+ Flag: NewGenericFlag(cli.GenericFlag{Name: "test", Value: &Parser{}, EnvVar: "TEST"}),
+ FlagName: "test",
+ MapValue: &Parser{"efg", "hij"},
+ EnvVarName: "TEST",
+ EnvVarValue: "abc,def",
+ })
+ expect(t, &Parser{"abc", "def"}, c.Generic("test"))
+}
+
+func TestStringSliceApplyInputSourceValue(t *testing.T) {
+ c := runTest(t, testApplyInputSource{
+ Flag: NewStringSliceFlag(cli.StringSliceFlag{Name: "test"}),
+ FlagName: "test",
+ MapValue: []interface{}{"hello", "world"},
+ })
+ expect(t, c.StringSlice("test"), []string{"hello", "world"})
+}
+
+func TestStringSliceApplyInputSourceMethodContextSet(t *testing.T) {
+ c := runTest(t, testApplyInputSource{
+ Flag: NewStringSliceFlag(cli.StringSliceFlag{Name: "test"}),
+ FlagName: "test",
+ MapValue: []interface{}{"hello", "world"},
+ ContextValueString: "ohno",
+ })
+ expect(t, c.StringSlice("test"), []string{"ohno"})
+}
+
+func TestStringSliceApplyInputSourceMethodEnvVarSet(t *testing.T) {
+ c := runTest(t, testApplyInputSource{
+ Flag: NewStringSliceFlag(cli.StringSliceFlag{Name: "test", EnvVar: "TEST"}),
+ FlagName: "test",
+ MapValue: []interface{}{"hello", "world"},
+ EnvVarName: "TEST",
+ EnvVarValue: "oh,no",
+ })
+ expect(t, c.StringSlice("test"), []string{"oh", "no"})
+}
+
+func TestIntSliceApplyInputSourceValue(t *testing.T) {
+ c := runTest(t, testApplyInputSource{
+ Flag: NewIntSliceFlag(cli.IntSliceFlag{Name: "test"}),
+ FlagName: "test",
+ MapValue: []interface{}{1, 2},
+ })
+ expect(t, c.IntSlice("test"), []int{1, 2})
+}
+
+func TestIntSliceApplyInputSourceMethodContextSet(t *testing.T) {
+ c := runTest(t, testApplyInputSource{
+ Flag: NewIntSliceFlag(cli.IntSliceFlag{Name: "test"}),
+ FlagName: "test",
+ MapValue: []interface{}{1, 2},
+ ContextValueString: "3",
+ })
+ expect(t, c.IntSlice("test"), []int{3})
+}
+
+func TestIntSliceApplyInputSourceMethodEnvVarSet(t *testing.T) {
+ c := runTest(t, testApplyInputSource{
+ Flag: NewIntSliceFlag(cli.IntSliceFlag{Name: "test", EnvVar: "TEST"}),
+ FlagName: "test",
+ MapValue: []interface{}{1, 2},
+ EnvVarName: "TEST",
+ EnvVarValue: "3,4",
+ })
+ expect(t, c.IntSlice("test"), []int{3, 4})
+}
+
+func TestBoolApplyInputSourceMethodSet(t *testing.T) {
+ c := runTest(t, testApplyInputSource{
+ Flag: NewBoolFlag(cli.BoolFlag{Name: "test"}),
+ FlagName: "test",
+ MapValue: true,
+ })
+ expect(t, true, c.Bool("test"))
+}
+
+func TestBoolApplyInputSourceMethodContextSet(t *testing.T) {
+ c := runTest(t, testApplyInputSource{
+ Flag: NewBoolFlag(cli.BoolFlag{Name: "test"}),
+ FlagName: "test",
+ MapValue: false,
+ ContextValueString: "true",
+ })
+ expect(t, true, c.Bool("test"))
+}
+
+func TestBoolApplyInputSourceMethodEnvVarSet(t *testing.T) {
+ c := runTest(t, testApplyInputSource{
+ Flag: NewBoolFlag(cli.BoolFlag{Name: "test", EnvVar: "TEST"}),
+ FlagName: "test",
+ MapValue: false,
+ EnvVarName: "TEST",
+ EnvVarValue: "true",
+ })
+ expect(t, true, c.Bool("test"))
+}
+
+func TestBoolTApplyInputSourceMethodSet(t *testing.T) {
+ c := runTest(t, testApplyInputSource{
+ Flag: NewBoolTFlag(cli.BoolTFlag{Name: "test"}),
+ FlagName: "test",
+ MapValue: false,
+ })
+ expect(t, false, c.BoolT("test"))
+}
+
+func TestBoolTApplyInputSourceMethodContextSet(t *testing.T) {
+ c := runTest(t, testApplyInputSource{
+ Flag: NewBoolTFlag(cli.BoolTFlag{Name: "test"}),
+ FlagName: "test",
+ MapValue: true,
+ ContextValueString: "false",
+ })
+ expect(t, false, c.BoolT("test"))
+}
+
+func TestBoolTApplyInputSourceMethodEnvVarSet(t *testing.T) {
+ c := runTest(t, testApplyInputSource{
+ Flag: NewBoolTFlag(cli.BoolTFlag{Name: "test", EnvVar: "TEST"}),
+ FlagName: "test",
+ MapValue: true,
+ EnvVarName: "TEST",
+ EnvVarValue: "false",
+ })
+ expect(t, false, c.BoolT("test"))
+}
+
+func TestStringApplyInputSourceMethodSet(t *testing.T) {
+ c := runTest(t, testApplyInputSource{
+ Flag: NewStringFlag(cli.StringFlag{Name: "test"}),
+ FlagName: "test",
+ MapValue: "hello",
+ })
+ expect(t, "hello", c.String("test"))
+}
+
+func TestStringApplyInputSourceMethodContextSet(t *testing.T) {
+ c := runTest(t, testApplyInputSource{
+ Flag: NewStringFlag(cli.StringFlag{Name: "test"}),
+ FlagName: "test",
+ MapValue: "hello",
+ ContextValueString: "goodbye",
+ })
+ expect(t, "goodbye", c.String("test"))
+}
+
+func TestStringApplyInputSourceMethodEnvVarSet(t *testing.T) {
+ c := runTest(t, testApplyInputSource{
+ Flag: NewStringFlag(cli.StringFlag{Name: "test", EnvVar: "TEST"}),
+ FlagName: "test",
+ MapValue: "hello",
+ EnvVarName: "TEST",
+ EnvVarValue: "goodbye",
+ })
+ expect(t, "goodbye", c.String("test"))
+}
+
+func TestIntApplyInputSourceMethodSet(t *testing.T) {
+ c := runTest(t, testApplyInputSource{
+ Flag: NewIntFlag(cli.IntFlag{Name: "test"}),
+ FlagName: "test",
+ MapValue: 15,
+ })
+ expect(t, 15, c.Int("test"))
+}
+
+func TestIntApplyInputSourceMethodContextSet(t *testing.T) {
+ c := runTest(t, testApplyInputSource{
+ Flag: NewIntFlag(cli.IntFlag{Name: "test"}),
+ FlagName: "test",
+ MapValue: 15,
+ ContextValueString: "7",
+ })
+ expect(t, 7, c.Int("test"))
+}
+
+func TestIntApplyInputSourceMethodEnvVarSet(t *testing.T) {
+ c := runTest(t, testApplyInputSource{
+ Flag: NewIntFlag(cli.IntFlag{Name: "test", EnvVar: "TEST"}),
+ FlagName: "test",
+ MapValue: 15,
+ EnvVarName: "TEST",
+ EnvVarValue: "12",
+ })
+ expect(t, 12, c.Int("test"))
+}
+
+func TestDurationApplyInputSourceMethodSet(t *testing.T) {
+ c := runTest(t, testApplyInputSource{
+ Flag: NewDurationFlag(cli.DurationFlag{Name: "test"}),
+ FlagName: "test",
+ MapValue: time.Duration(30 * time.Second),
+ })
+ expect(t, time.Duration(30*time.Second), c.Duration("test"))
+}
+
+func TestDurationApplyInputSourceMethodContextSet(t *testing.T) {
+ c := runTest(t, testApplyInputSource{
+ Flag: NewDurationFlag(cli.DurationFlag{Name: "test"}),
+ FlagName: "test",
+ MapValue: time.Duration(30 * time.Second),
+ ContextValueString: time.Duration(15 * time.Second).String(),
+ })
+ expect(t, time.Duration(15*time.Second), c.Duration("test"))
+}
+
+func TestDurationApplyInputSourceMethodEnvVarSet(t *testing.T) {
+ c := runTest(t, testApplyInputSource{
+ Flag: NewDurationFlag(cli.DurationFlag{Name: "test", EnvVar: "TEST"}),
+ FlagName: "test",
+ MapValue: time.Duration(30 * time.Second),
+ EnvVarName: "TEST",
+ EnvVarValue: time.Duration(15 * time.Second).String(),
+ })
+ expect(t, time.Duration(15*time.Second), c.Duration("test"))
+}
+
+func TestFloat64ApplyInputSourceMethodSet(t *testing.T) {
+ c := runTest(t, testApplyInputSource{
+ Flag: NewFloat64Flag(cli.Float64Flag{Name: "test"}),
+ FlagName: "test",
+ MapValue: 1.3,
+ })
+ expect(t, 1.3, c.Float64("test"))
+}
+
+func TestFloat64ApplyInputSourceMethodContextSet(t *testing.T) {
+ c := runTest(t, testApplyInputSource{
+ Flag: NewFloat64Flag(cli.Float64Flag{Name: "test"}),
+ FlagName: "test",
+ MapValue: 1.3,
+ ContextValueString: fmt.Sprintf("%v", 1.4),
+ })
+ expect(t, 1.4, c.Float64("test"))
+}
+
+func TestFloat64ApplyInputSourceMethodEnvVarSet(t *testing.T) {
+ c := runTest(t, testApplyInputSource{
+ Flag: NewFloat64Flag(cli.Float64Flag{Name: "test", EnvVar: "TEST"}),
+ FlagName: "test",
+ MapValue: 1.3,
+ EnvVarName: "TEST",
+ EnvVarValue: fmt.Sprintf("%v", 1.4),
+ })
+ expect(t, 1.4, c.Float64("test"))
+}
+
+func runTest(t *testing.T, test testApplyInputSource) *cli.Context {
+ inputSource := &MapInputSource{valueMap: map[interface{}]interface{}{test.FlagName: test.MapValue}}
+ set := flag.NewFlagSet(test.FlagSetName, flag.ContinueOnError)
+ c := cli.NewContext(nil, set, nil)
+ if test.EnvVarName != "" && test.EnvVarValue != "" {
+ os.Setenv(test.EnvVarName, test.EnvVarValue)
+ defer os.Setenv(test.EnvVarName, "")
+ }
+
+ test.Flag.Apply(set)
+ if test.ContextValue != nil {
+ flag := set.Lookup(test.FlagName)
+ flag.Value = test.ContextValue
+ }
+ if test.ContextValueString != "" {
+ set.Set(test.FlagName, test.ContextValueString)
+ }
+ test.Flag.ApplyInputSourceValue(c, inputSource)
+
+ return c
+}
+
+type Parser [2]string
+
+func (p *Parser) Set(value string) error {
+ parts := strings.Split(value, ",")
+ if len(parts) != 2 {
+ return fmt.Errorf("invalid format")
+ }
+
+ (*p)[0] = parts[0]
+ (*p)[1] = parts[1]
+
+ return nil
+}
+
+func (p *Parser) String() string {
+ return fmt.Sprintf("%s,%s", p[0], p[1])
+}
diff --git a/vendor/github.com/codegangsta/cli/altsrc/helpers_test.go b/vendor/github.com/codegangsta/cli/altsrc/helpers_test.go
new file mode 100644
index 0000000..3b7f7e9
--- /dev/null
+++ b/vendor/github.com/codegangsta/cli/altsrc/helpers_test.go
@@ -0,0 +1,18 @@
+package altsrc
+
+import (
+ "reflect"
+ "testing"
+)
+
+func expect(t *testing.T, a interface{}, b interface{}) {
+ if !reflect.DeepEqual(b, a) {
+ t.Errorf("Expected %#v (type %v) - Got %#v (type %v)", b, reflect.TypeOf(b), a, reflect.TypeOf(a))
+ }
+}
+
+func refute(t *testing.T, a interface{}, b interface{}) {
+ if a == b {
+ t.Errorf("Did not expect %v (type %v) - Got %v (type %v)", b, reflect.TypeOf(b), a, reflect.TypeOf(a))
+ }
+}
diff --git a/vendor/github.com/codegangsta/cli/altsrc/input_source_context.go b/vendor/github.com/codegangsta/cli/altsrc/input_source_context.go
new file mode 100644
index 0000000..276dcda
--- /dev/null
+++ b/vendor/github.com/codegangsta/cli/altsrc/input_source_context.go
@@ -0,0 +1,21 @@
+package altsrc
+
+import (
+ "time"
+
+ "gopkg.in/urfave/cli.v1"
+)
+
+// InputSourceContext is an interface used to allow
+// other input sources to be implemented as needed.
+type InputSourceContext interface {
+ Int(name string) (int, error)
+ Duration(name string) (time.Duration, error)
+ Float64(name string) (float64, error)
+ String(name string) (string, error)
+ StringSlice(name string) ([]string, error)
+ IntSlice(name string) ([]int, error)
+ Generic(name string) (cli.Generic, error)
+ Bool(name string) (bool, error)
+ BoolT(name string) (bool, error)
+}
diff --git a/vendor/github.com/codegangsta/cli/altsrc/map_input_source.go b/vendor/github.com/codegangsta/cli/altsrc/map_input_source.go
new file mode 100644
index 0000000..b3169e0
--- /dev/null
+++ b/vendor/github.com/codegangsta/cli/altsrc/map_input_source.go
@@ -0,0 +1,262 @@
+package altsrc
+
+import (
+ "fmt"
+ "reflect"
+ "strings"
+ "time"
+
+ "gopkg.in/urfave/cli.v1"
+)
+
+// MapInputSource implements InputSourceContext to return
+// data from the map that is loaded.
+type MapInputSource struct {
+ valueMap map[interface{}]interface{}
+}
+
+// nestedVal checks if the name has '.' delimiters.
+// If so, it tries to traverse the tree by the '.' delimited sections to find
+// a nested value for the key.
+func nestedVal(name string, tree map[interface{}]interface{}) (interface{}, bool) {
+ if sections := strings.Split(name, "."); len(sections) > 1 {
+ node := tree
+ for _, section := range sections[:len(sections)-1] {
+ if child, ok := node[section]; !ok {
+ return nil, false
+ } else {
+ if ctype, ok := child.(map[interface{}]interface{}); !ok {
+ return nil, false
+ } else {
+ node = ctype
+ }
+ }
+ }
+ if val, ok := node[sections[len(sections)-1]]; ok {
+ return val, true
+ }
+ }
+ return nil, false
+}
+
+// Int returns an int from the map if it exists otherwise returns 0
+func (fsm *MapInputSource) Int(name string) (int, error) {
+ otherGenericValue, exists := fsm.valueMap[name]
+ if exists {
+ otherValue, isType := otherGenericValue.(int)
+ if !isType {
+ return 0, incorrectTypeForFlagError(name, "int", otherGenericValue)
+ }
+ return otherValue, nil
+ }
+ nestedGenericValue, exists := nestedVal(name, fsm.valueMap)
+ if exists {
+ otherValue, isType := nestedGenericValue.(int)
+ if !isType {
+ return 0, incorrectTypeForFlagError(name, "int", nestedGenericValue)
+ }
+ return otherValue, nil
+ }
+
+ return 0, nil
+}
+
+// Duration returns a duration from the map if it exists otherwise returns 0
+func (fsm *MapInputSource) Duration(name string) (time.Duration, error) {
+ otherGenericValue, exists := fsm.valueMap[name]
+ if exists {
+ otherValue, isType := otherGenericValue.(time.Duration)
+ if !isType {
+ return 0, incorrectTypeForFlagError(name, "duration", otherGenericValue)
+ }
+ return otherValue, nil
+ }
+ nestedGenericValue, exists := nestedVal(name, fsm.valueMap)
+ if exists {
+ otherValue, isType := nestedGenericValue.(time.Duration)
+ if !isType {
+ return 0, incorrectTypeForFlagError(name, "duration", nestedGenericValue)
+ }
+ return otherValue, nil
+ }
+
+ return 0, nil
+}
+
+// Float64 returns an float64 from the map if it exists otherwise returns 0
+func (fsm *MapInputSource) Float64(name string) (float64, error) {
+ otherGenericValue, exists := fsm.valueMap[name]
+ if exists {
+ otherValue, isType := otherGenericValue.(float64)
+ if !isType {
+ return 0, incorrectTypeForFlagError(name, "float64", otherGenericValue)
+ }
+ return otherValue, nil
+ }
+ nestedGenericValue, exists := nestedVal(name, fsm.valueMap)
+ if exists {
+ otherValue, isType := nestedGenericValue.(float64)
+ if !isType {
+ return 0, incorrectTypeForFlagError(name, "float64", nestedGenericValue)
+ }
+ return otherValue, nil
+ }
+
+ return 0, nil
+}
+
+// String returns a string from the map if it exists otherwise returns an empty string
+func (fsm *MapInputSource) String(name string) (string, error) {
+ otherGenericValue, exists := fsm.valueMap[name]
+ if exists {
+ otherValue, isType := otherGenericValue.(string)
+ if !isType {
+ return "", incorrectTypeForFlagError(name, "string", otherGenericValue)
+ }
+ return otherValue, nil
+ }
+ nestedGenericValue, exists := nestedVal(name, fsm.valueMap)
+ if exists {
+ otherValue, isType := nestedGenericValue.(string)
+ if !isType {
+ return "", incorrectTypeForFlagError(name, "string", nestedGenericValue)
+ }
+ return otherValue, nil
+ }
+
+ return "", nil
+}
+
+// StringSlice returns an []string from the map if it exists otherwise returns nil
+func (fsm *MapInputSource) StringSlice(name string) ([]string, error) {
+ otherGenericValue, exists := fsm.valueMap[name]
+ if !exists {
+ otherGenericValue, exists = nestedVal(name, fsm.valueMap)
+ if !exists {
+ return nil, nil
+ }
+ }
+
+ otherValue, isType := otherGenericValue.([]interface{})
+ if !isType {
+ return nil, incorrectTypeForFlagError(name, "[]interface{}", otherGenericValue)
+ }
+
+ var stringSlice = make([]string, 0, len(otherValue))
+ for i, v := range otherValue {
+ stringValue, isType := v.(string)
+
+ if !isType {
+ return nil, incorrectTypeForFlagError(fmt.Sprintf("%s[%d]", name, i), "string", v)
+ }
+
+ stringSlice = append(stringSlice, stringValue)
+ }
+
+ return stringSlice, nil
+}
+
+// IntSlice returns an []int from the map if it exists otherwise returns nil
+func (fsm *MapInputSource) IntSlice(name string) ([]int, error) {
+ otherGenericValue, exists := fsm.valueMap[name]
+ if !exists {
+ otherGenericValue, exists = nestedVal(name, fsm.valueMap)
+ if !exists {
+ return nil, nil
+ }
+ }
+
+ otherValue, isType := otherGenericValue.([]interface{})
+ if !isType {
+ return nil, incorrectTypeForFlagError(name, "[]interface{}", otherGenericValue)
+ }
+
+ var intSlice = make([]int, 0, len(otherValue))
+ for i, v := range otherValue {
+ intValue, isType := v.(int)
+
+ if !isType {
+ return nil, incorrectTypeForFlagError(fmt.Sprintf("%s[%d]", name, i), "int", v)
+ }
+
+ intSlice = append(intSlice, intValue)
+ }
+
+ return intSlice, nil
+}
+
+// Generic returns an cli.Generic from the map if it exists otherwise returns nil
+func (fsm *MapInputSource) Generic(name string) (cli.Generic, error) {
+ otherGenericValue, exists := fsm.valueMap[name]
+ if exists {
+ otherValue, isType := otherGenericValue.(cli.Generic)
+ if !isType {
+ return nil, incorrectTypeForFlagError(name, "cli.Generic", otherGenericValue)
+ }
+ return otherValue, nil
+ }
+ nestedGenericValue, exists := nestedVal(name, fsm.valueMap)
+ if exists {
+ otherValue, isType := nestedGenericValue.(cli.Generic)
+ if !isType {
+ return nil, incorrectTypeForFlagError(name, "cli.Generic", nestedGenericValue)
+ }
+ return otherValue, nil
+ }
+
+ return nil, nil
+}
+
+// Bool returns an bool from the map otherwise returns false
+func (fsm *MapInputSource) Bool(name string) (bool, error) {
+ otherGenericValue, exists := fsm.valueMap[name]
+ if exists {
+ otherValue, isType := otherGenericValue.(bool)
+ if !isType {
+ return false, incorrectTypeForFlagError(name, "bool", otherGenericValue)
+ }
+ return otherValue, nil
+ }
+ nestedGenericValue, exists := nestedVal(name, fsm.valueMap)
+ if exists {
+ otherValue, isType := nestedGenericValue.(bool)
+ if !isType {
+ return false, incorrectTypeForFlagError(name, "bool", nestedGenericValue)
+ }
+ return otherValue, nil
+ }
+
+ return false, nil
+}
+
+// BoolT returns an bool from the map otherwise returns true
+func (fsm *MapInputSource) BoolT(name string) (bool, error) {
+ otherGenericValue, exists := fsm.valueMap[name]
+ if exists {
+ otherValue, isType := otherGenericValue.(bool)
+ if !isType {
+ return true, incorrectTypeForFlagError(name, "bool", otherGenericValue)
+ }
+ return otherValue, nil
+ }
+ nestedGenericValue, exists := nestedVal(name, fsm.valueMap)
+ if exists {
+ otherValue, isType := nestedGenericValue.(bool)
+ if !isType {
+ return true, incorrectTypeForFlagError(name, "bool", nestedGenericValue)
+ }
+ return otherValue, nil
+ }
+
+ return true, nil
+}
+
+func incorrectTypeForFlagError(name, expectedTypeName string, value interface{}) error {
+ valueType := reflect.TypeOf(value)
+ valueTypeName := ""
+ if valueType != nil {
+ valueTypeName = valueType.Name()
+ }
+
+ return fmt.Errorf("Mismatched type for flag '%s'. Expected '%s' but actual is '%s'", name, expectedTypeName, valueTypeName)
+}
diff --git a/vendor/github.com/codegangsta/cli/altsrc/toml_command_test.go b/vendor/github.com/codegangsta/cli/altsrc/toml_command_test.go
new file mode 100644
index 0000000..a5053d4
--- /dev/null
+++ b/vendor/github.com/codegangsta/cli/altsrc/toml_command_test.go
@@ -0,0 +1,310 @@
+// Disabling building of toml support in cases where golang is 1.0 or 1.1
+// as the encoding library is not implemented or supported.
+
+// +build go1.2
+
+package altsrc
+
+import (
+ "flag"
+ "io/ioutil"
+ "os"
+ "testing"
+
+ "gopkg.in/urfave/cli.v1"
+)
+
+func TestCommandTomFileTest(t *testing.T) {
+ app := cli.NewApp()
+ set := flag.NewFlagSet("test", 0)
+ ioutil.WriteFile("current.toml", []byte("test = 15"), 0666)
+ defer os.Remove("current.toml")
+ test := []string{"test-cmd", "--load", "current.toml"}
+ set.Parse(test)
+
+ c := cli.NewContext(app, set, nil)
+
+ command := &cli.Command{
+ Name: "test-cmd",
+ Aliases: []string{"tc"},
+ Usage: "this is for testing",
+ Description: "testing",
+ Action: func(c *cli.Context) error {
+ val := c.Int("test")
+ expect(t, val, 15)
+ return nil
+ },
+ Flags: []cli.Flag{
+ NewIntFlag(cli.IntFlag{Name: "test"}),
+ cli.StringFlag{Name: "load"}},
+ }
+ command.Before = InitInputSourceWithContext(command.Flags, NewTomlSourceFromFlagFunc("load"))
+ err := command.Run(c)
+
+ expect(t, err, nil)
+}
+
+func TestCommandTomlFileTestGlobalEnvVarWins(t *testing.T) {
+ app := cli.NewApp()
+ set := flag.NewFlagSet("test", 0)
+ ioutil.WriteFile("current.toml", []byte("test = 15"), 0666)
+ defer os.Remove("current.toml")
+
+ os.Setenv("THE_TEST", "10")
+ defer os.Setenv("THE_TEST", "")
+ test := []string{"test-cmd", "--load", "current.toml"}
+ set.Parse(test)
+
+ c := cli.NewContext(app, set, nil)
+
+ command := &cli.Command{
+ Name: "test-cmd",
+ Aliases: []string{"tc"},
+ Usage: "this is for testing",
+ Description: "testing",
+ Action: func(c *cli.Context) error {
+ val := c.Int("test")
+ expect(t, val, 10)
+ return nil
+ },
+ Flags: []cli.Flag{
+ NewIntFlag(cli.IntFlag{Name: "test", EnvVar: "THE_TEST"}),
+ cli.StringFlag{Name: "load"}},
+ }
+ command.Before = InitInputSourceWithContext(command.Flags, NewTomlSourceFromFlagFunc("load"))
+
+ err := command.Run(c)
+
+ expect(t, err, nil)
+}
+
+func TestCommandTomlFileTestGlobalEnvVarWinsNested(t *testing.T) {
+ app := cli.NewApp()
+ set := flag.NewFlagSet("test", 0)
+ ioutil.WriteFile("current.toml", []byte("[top]\ntest = 15"), 0666)
+ defer os.Remove("current.toml")
+
+ os.Setenv("THE_TEST", "10")
+ defer os.Setenv("THE_TEST", "")
+ test := []string{"test-cmd", "--load", "current.toml"}
+ set.Parse(test)
+
+ c := cli.NewContext(app, set, nil)
+
+ command := &cli.Command{
+ Name: "test-cmd",
+ Aliases: []string{"tc"},
+ Usage: "this is for testing",
+ Description: "testing",
+ Action: func(c *cli.Context) error {
+ val := c.Int("top.test")
+ expect(t, val, 10)
+ return nil
+ },
+ Flags: []cli.Flag{
+ NewIntFlag(cli.IntFlag{Name: "top.test", EnvVar: "THE_TEST"}),
+ cli.StringFlag{Name: "load"}},
+ }
+ command.Before = InitInputSourceWithContext(command.Flags, NewTomlSourceFromFlagFunc("load"))
+
+ err := command.Run(c)
+
+ expect(t, err, nil)
+}
+
+func TestCommandTomlFileTestSpecifiedFlagWins(t *testing.T) {
+ app := cli.NewApp()
+ set := flag.NewFlagSet("test", 0)
+ ioutil.WriteFile("current.toml", []byte("test = 15"), 0666)
+ defer os.Remove("current.toml")
+
+ test := []string{"test-cmd", "--load", "current.toml", "--test", "7"}
+ set.Parse(test)
+
+ c := cli.NewContext(app, set, nil)
+
+ command := &cli.Command{
+ Name: "test-cmd",
+ Aliases: []string{"tc"},
+ Usage: "this is for testing",
+ Description: "testing",
+ Action: func(c *cli.Context) error {
+ val := c.Int("test")
+ expect(t, val, 7)
+ return nil
+ },
+ Flags: []cli.Flag{
+ NewIntFlag(cli.IntFlag{Name: "test"}),
+ cli.StringFlag{Name: "load"}},
+ }
+ command.Before = InitInputSourceWithContext(command.Flags, NewTomlSourceFromFlagFunc("load"))
+
+ err := command.Run(c)
+
+ expect(t, err, nil)
+}
+
+func TestCommandTomlFileTestSpecifiedFlagWinsNested(t *testing.T) {
+ app := cli.NewApp()
+ set := flag.NewFlagSet("test", 0)
+ ioutil.WriteFile("current.toml", []byte(`[top]
+ test = 15`), 0666)
+ defer os.Remove("current.toml")
+
+ test := []string{"test-cmd", "--load", "current.toml", "--top.test", "7"}
+ set.Parse(test)
+
+ c := cli.NewContext(app, set, nil)
+
+ command := &cli.Command{
+ Name: "test-cmd",
+ Aliases: []string{"tc"},
+ Usage: "this is for testing",
+ Description: "testing",
+ Action: func(c *cli.Context) error {
+ val := c.Int("top.test")
+ expect(t, val, 7)
+ return nil
+ },
+ Flags: []cli.Flag{
+ NewIntFlag(cli.IntFlag{Name: "top.test"}),
+ cli.StringFlag{Name: "load"}},
+ }
+ command.Before = InitInputSourceWithContext(command.Flags, NewTomlSourceFromFlagFunc("load"))
+
+ err := command.Run(c)
+
+ expect(t, err, nil)
+}
+
+func TestCommandTomlFileTestDefaultValueFileWins(t *testing.T) {
+ app := cli.NewApp()
+ set := flag.NewFlagSet("test", 0)
+ ioutil.WriteFile("current.toml", []byte("test = 15"), 0666)
+ defer os.Remove("current.toml")
+
+ test := []string{"test-cmd", "--load", "current.toml"}
+ set.Parse(test)
+
+ c := cli.NewContext(app, set, nil)
+
+ command := &cli.Command{
+ Name: "test-cmd",
+ Aliases: []string{"tc"},
+ Usage: "this is for testing",
+ Description: "testing",
+ Action: func(c *cli.Context) error {
+ val := c.Int("test")
+ expect(t, val, 15)
+ return nil
+ },
+ Flags: []cli.Flag{
+ NewIntFlag(cli.IntFlag{Name: "test", Value: 7}),
+ cli.StringFlag{Name: "load"}},
+ }
+ command.Before = InitInputSourceWithContext(command.Flags, NewTomlSourceFromFlagFunc("load"))
+
+ err := command.Run(c)
+
+ expect(t, err, nil)
+}
+
+func TestCommandTomlFileTestDefaultValueFileWinsNested(t *testing.T) {
+ app := cli.NewApp()
+ set := flag.NewFlagSet("test", 0)
+ ioutil.WriteFile("current.toml", []byte("[top]\ntest = 15"), 0666)
+ defer os.Remove("current.toml")
+
+ test := []string{"test-cmd", "--load", "current.toml"}
+ set.Parse(test)
+
+ c := cli.NewContext(app, set, nil)
+
+ command := &cli.Command{
+ Name: "test-cmd",
+ Aliases: []string{"tc"},
+ Usage: "this is for testing",
+ Description: "testing",
+ Action: func(c *cli.Context) error {
+ val := c.Int("top.test")
+ expect(t, val, 15)
+ return nil
+ },
+ Flags: []cli.Flag{
+ NewIntFlag(cli.IntFlag{Name: "top.test", Value: 7}),
+ cli.StringFlag{Name: "load"}},
+ }
+ command.Before = InitInputSourceWithContext(command.Flags, NewTomlSourceFromFlagFunc("load"))
+
+ err := command.Run(c)
+
+ expect(t, err, nil)
+}
+
+func TestCommandTomlFileFlagHasDefaultGlobalEnvTomlSetGlobalEnvWins(t *testing.T) {
+ app := cli.NewApp()
+ set := flag.NewFlagSet("test", 0)
+ ioutil.WriteFile("current.toml", []byte("test = 15"), 0666)
+ defer os.Remove("current.toml")
+
+ os.Setenv("THE_TEST", "11")
+ defer os.Setenv("THE_TEST", "")
+
+ test := []string{"test-cmd", "--load", "current.toml"}
+ set.Parse(test)
+
+ c := cli.NewContext(app, set, nil)
+
+ command := &cli.Command{
+ Name: "test-cmd",
+ Aliases: []string{"tc"},
+ Usage: "this is for testing",
+ Description: "testing",
+ Action: func(c *cli.Context) error {
+ val := c.Int("test")
+ expect(t, val, 11)
+ return nil
+ },
+ Flags: []cli.Flag{
+ NewIntFlag(cli.IntFlag{Name: "test", Value: 7, EnvVar: "THE_TEST"}),
+ cli.StringFlag{Name: "load"}},
+ }
+ command.Before = InitInputSourceWithContext(command.Flags, NewTomlSourceFromFlagFunc("load"))
+ err := command.Run(c)
+
+ expect(t, err, nil)
+}
+
+func TestCommandTomlFileFlagHasDefaultGlobalEnvTomlSetGlobalEnvWinsNested(t *testing.T) {
+ app := cli.NewApp()
+ set := flag.NewFlagSet("test", 0)
+ ioutil.WriteFile("current.toml", []byte("[top]\ntest = 15"), 0666)
+ defer os.Remove("current.toml")
+
+ os.Setenv("THE_TEST", "11")
+ defer os.Setenv("THE_TEST", "")
+
+ test := []string{"test-cmd", "--load", "current.toml"}
+ set.Parse(test)
+
+ c := cli.NewContext(app, set, nil)
+
+ command := &cli.Command{
+ Name: "test-cmd",
+ Aliases: []string{"tc"},
+ Usage: "this is for testing",
+ Description: "testing",
+ Action: func(c *cli.Context) error {
+ val := c.Int("top.test")
+ expect(t, val, 11)
+ return nil
+ },
+ Flags: []cli.Flag{
+ NewIntFlag(cli.IntFlag{Name: "top.test", Value: 7, EnvVar: "THE_TEST"}),
+ cli.StringFlag{Name: "load"}},
+ }
+ command.Before = InitInputSourceWithContext(command.Flags, NewTomlSourceFromFlagFunc("load"))
+ err := command.Run(c)
+
+ expect(t, err, nil)
+}
diff --git a/vendor/github.com/codegangsta/cli/altsrc/toml_file_loader.go b/vendor/github.com/codegangsta/cli/altsrc/toml_file_loader.go
new file mode 100644
index 0000000..37870fc
--- /dev/null
+++ b/vendor/github.com/codegangsta/cli/altsrc/toml_file_loader.go
@@ -0,0 +1,113 @@
+// Disabling building of toml support in cases where golang is 1.0 or 1.1
+// as the encoding library is not implemented or supported.
+
+// +build go1.2
+
+package altsrc
+
+import (
+ "fmt"
+ "reflect"
+
+ "github.com/BurntSushi/toml"
+ "gopkg.in/urfave/cli.v1"
+)
+
+type tomlMap struct {
+ Map map[interface{}]interface{}
+}
+
+func unmarshalMap(i interface{}) (ret map[interface{}]interface{}, err error) {
+ ret = make(map[interface{}]interface{})
+ m := i.(map[string]interface{})
+ for key, val := range m {
+ v := reflect.ValueOf(val)
+ switch v.Kind() {
+ case reflect.Bool:
+ ret[key] = val.(bool)
+ case reflect.String:
+ ret[key] = val.(string)
+ case reflect.Int:
+ ret[key] = int(val.(int))
+ case reflect.Int8:
+ ret[key] = int(val.(int8))
+ case reflect.Int16:
+ ret[key] = int(val.(int16))
+ case reflect.Int32:
+ ret[key] = int(val.(int32))
+ case reflect.Int64:
+ ret[key] = int(val.(int64))
+ case reflect.Uint:
+ ret[key] = int(val.(uint))
+ case reflect.Uint8:
+ ret[key] = int(val.(uint8))
+ case reflect.Uint16:
+ ret[key] = int(val.(uint16))
+ case reflect.Uint32:
+ ret[key] = int(val.(uint32))
+ case reflect.Uint64:
+ ret[key] = int(val.(uint64))
+ case reflect.Float32:
+ ret[key] = float64(val.(float32))
+ case reflect.Float64:
+ ret[key] = float64(val.(float64))
+ case reflect.Map:
+ if tmp, err := unmarshalMap(val); err == nil {
+ ret[key] = tmp
+ } else {
+ return nil, err
+ }
+ case reflect.Array, reflect.Slice:
+ ret[key] = val.([]interface{})
+ default:
+ return nil, fmt.Errorf("Unsupported: type = %#v", v.Kind())
+ }
+ }
+ return ret, nil
+}
+
+func (self *tomlMap) UnmarshalTOML(i interface{}) error {
+ if tmp, err := unmarshalMap(i); err == nil {
+ self.Map = tmp
+ } else {
+ return err
+ }
+ return nil
+}
+
+type tomlSourceContext struct {
+ FilePath string
+}
+
+// NewTomlSourceFromFile creates a new TOML InputSourceContext from a filepath.
+func NewTomlSourceFromFile(file string) (InputSourceContext, error) {
+ tsc := &tomlSourceContext{FilePath: file}
+ var results tomlMap = tomlMap{}
+ if err := readCommandToml(tsc.FilePath, &results); err != nil {
+ return nil, fmt.Errorf("Unable to load TOML file '%s': inner error: \n'%v'", tsc.FilePath, err.Error())
+ }
+ return &MapInputSource{valueMap: results.Map}, nil
+}
+
+// NewTomlSourceFromFlagFunc creates a new TOML InputSourceContext from a provided flag name and source context.
+func NewTomlSourceFromFlagFunc(flagFileName string) func(context *cli.Context) (InputSourceContext, error) {
+ return func(context *cli.Context) (InputSourceContext, error) {
+ filePath := context.String(flagFileName)
+ return NewTomlSourceFromFile(filePath)
+ }
+}
+
+func readCommandToml(filePath string, container interface{}) (err error) {
+ b, err := loadDataFrom(filePath)
+ if err != nil {
+ return err
+ }
+
+ err = toml.Unmarshal(b, container)
+ if err != nil {
+ return err
+ }
+
+ err = nil
+ return
+}
diff --git a/vendor/github.com/codegangsta/cli/altsrc/yaml_command_test.go b/vendor/github.com/codegangsta/cli/altsrc/yaml_command_test.go
new file mode 100644
index 0000000..9d3f431
--- /dev/null
+++ b/vendor/github.com/codegangsta/cli/altsrc/yaml_command_test.go
@@ -0,0 +1,313 @@
+// Disabling building of yaml support in cases where golang is 1.0 or 1.1
+// as the encoding library is not implemented or supported.
+
+// +build go1.2
+
+package altsrc
+
+import (
+ "flag"
+ "io/ioutil"
+ "os"
+ "testing"
+
+ "gopkg.in/urfave/cli.v1"
+)
+
+func TestCommandYamlFileTest(t *testing.T) {
+ app := cli.NewApp()
+ set := flag.NewFlagSet("test", 0)
+ ioutil.WriteFile("current.yaml", []byte("test: 15"), 0666)
+ defer os.Remove("current.yaml")
+ test := []string{"test-cmd", "--load", "current.yaml"}
+ set.Parse(test)
+
+ c := cli.NewContext(app, set, nil)
+
+ command := &cli.Command{
+ Name: "test-cmd",
+ Aliases: []string{"tc"},
+ Usage: "this is for testing",
+ Description: "testing",
+ Action: func(c *cli.Context) error {
+ val := c.Int("test")
+ expect(t, val, 15)
+ 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)
+
+ expect(t, err, nil)
+}
+
+func TestCommandYamlFileTestGlobalEnvVarWins(t *testing.T) {
+ app := cli.NewApp()
+ set := flag.NewFlagSet("test", 0)
+ ioutil.WriteFile("current.yaml", []byte("test: 15"), 0666)
+ defer os.Remove("current.yaml")
+
+ os.Setenv("THE_TEST", "10")
+ defer os.Setenv("THE_TEST", "")
+ test := []string{"test-cmd", "--load", "current.yaml"}
+ set.Parse(test)
+
+ c := cli.NewContext(app, set, nil)
+
+ command := &cli.Command{
+ Name: "test-cmd",
+ Aliases: []string{"tc"},
+ Usage: "this is for testing",
+ Description: "testing",
+ Action: func(c *cli.Context) error {
+ val := c.Int("test")
+ expect(t, val, 10)
+ return nil
+ },
+ Flags: []cli.Flag{
+ NewIntFlag(cli.IntFlag{Name: "test", EnvVar: "THE_TEST"}),
+ cli.StringFlag{Name: "load"}},
+ }
+ command.Before = InitInputSourceWithContext(command.Flags, NewYamlSourceFromFlagFunc("load"))
+
+ err := command.Run(c)
+
+ expect(t, err, nil)
+}
+
+func TestCommandYamlFileTestGlobalEnvVarWinsNested(t *testing.T) {
+ app := cli.NewApp()
+ set := flag.NewFlagSet("test", 0)
+ ioutil.WriteFile("current.yaml", []byte(`top:
+ test: 15`), 0666)
+ defer os.Remove("current.yaml")
+
+ os.Setenv("THE_TEST", "10")
+ defer os.Setenv("THE_TEST", "")
+ test := []string{"test-cmd", "--load", "current.yaml"}
+ set.Parse(test)
+
+ c := cli.NewContext(app, set, nil)
+
+ command := &cli.Command{
+ Name: "test-cmd",
+ Aliases: []string{"tc"},
+ Usage: "this is for testing",
+ Description: "testing",
+ Action: func(c *cli.Context) error {
+ val := c.Int("top.test")
+ expect(t, val, 10)
+ return nil
+ },
+ Flags: []cli.Flag{
+ NewIntFlag(cli.IntFlag{Name: "top.test", EnvVar: "THE_TEST"}),
+ cli.StringFlag{Name: "load"}},
+ }
+ command.Before = InitInputSourceWithContext(command.Flags, NewYamlSourceFromFlagFunc("load"))
+
+ err := command.Run(c)
+
+ expect(t, err, nil)
+}
+
+func TestCommandYamlFileTestSpecifiedFlagWins(t *testing.T) {
+ app := cli.NewApp()
+ set := flag.NewFlagSet("test", 0)
+ ioutil.WriteFile("current.yaml", []byte("test: 15"), 0666)
+ defer os.Remove("current.yaml")
+
+ test := []string{"test-cmd", "--load", "current.yaml", "--test", "7"}
+ set.Parse(test)
+
+ c := cli.NewContext(app, set, nil)
+
+ command := &cli.Command{
+ Name: "test-cmd",
+ Aliases: []string{"tc"},
+ Usage: "this is for testing",
+ Description: "testing",
+ Action: func(c *cli.Context) error {
+ val := c.Int("test")
+ expect(t, val, 7)
+ 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)
+
+ expect(t, err, nil)
+}
+
+func TestCommandYamlFileTestSpecifiedFlagWinsNested(t *testing.T) {
+ app := cli.NewApp()
+ set := flag.NewFlagSet("test", 0)
+ ioutil.WriteFile("current.yaml", []byte(`top:
+ test: 15`), 0666)
+ defer os.Remove("current.yaml")
+
+ test := []string{"test-cmd", "--load", "current.yaml", "--top.test", "7"}
+ set.Parse(test)
+
+ c := cli.NewContext(app, set, nil)
+
+ command := &cli.Command{
+ Name: "test-cmd",
+ Aliases: []string{"tc"},
+ Usage: "this is for testing",
+ Description: "testing",
+ Action: func(c *cli.Context) error {
+ val := c.Int("top.test")
+ expect(t, val, 7)
+ return nil
+ },
+ Flags: []cli.Flag{
+ NewIntFlag(cli.IntFlag{Name: "top.test"}),
+ cli.StringFlag{Name: "load"}},
+ }
+ command.Before = InitInputSourceWithContext(command.Flags, NewYamlSourceFromFlagFunc("load"))
+
+ err := command.Run(c)
+
+ expect(t, err, nil)
+}
+
+func TestCommandYamlFileTestDefaultValueFileWins(t *testing.T) {
+ app := cli.NewApp()
+ set := flag.NewFlagSet("test", 0)
+ ioutil.WriteFile("current.yaml", []byte("test: 15"), 0666)
+ defer os.Remove("current.yaml")
+
+ test := []string{"test-cmd", "--load", "current.yaml"}
+ set.Parse(test)
+
+ c := cli.NewContext(app, set, nil)
+
+ command := &cli.Command{
+ Name: "test-cmd",
+ Aliases: []string{"tc"},
+ Usage: "this is for testing",
+ Description: "testing",
+ Action: func(c *cli.Context) error {
+ val := c.Int("test")
+ expect(t, val, 15)
+ return nil
+ },
+ Flags: []cli.Flag{
+ NewIntFlag(cli.IntFlag{Name: "test", Value: 7}),
+ cli.StringFlag{Name: "load"}},
+ }
+ command.Before = InitInputSourceWithContext(command.Flags, NewYamlSourceFromFlagFunc("load"))
+
+ err := command.Run(c)
+
+ expect(t, err, nil)
+}
+
+func TestCommandYamlFileTestDefaultValueFileWinsNested(t *testing.T) {
+ app := cli.NewApp()
+ set := flag.NewFlagSet("test", 0)
+ ioutil.WriteFile("current.yaml", []byte(`top:
+ test: 15`), 0666)
+ defer os.Remove("current.yaml")
+
+ test := []string{"test-cmd", "--load", "current.yaml"}
+ set.Parse(test)
+
+ c := cli.NewContext(app, set, nil)
+
+ command := &cli.Command{
+ Name: "test-cmd",
+ Aliases: []string{"tc"},
+ Usage: "this is for testing",
+ Description: "testing",
+ Action: func(c *cli.Context) error {
+ val := c.Int("top.test")
+ expect(t, val, 15)
+ return nil
+ },
+ Flags: []cli.Flag{
+ NewIntFlag(cli.IntFlag{Name: "top.test", Value: 7}),
+ cli.StringFlag{Name: "load"}},
+ }
+ command.Before = InitInputSourceWithContext(command.Flags, NewYamlSourceFromFlagFunc("load"))
+
+ err := command.Run(c)
+
+ expect(t, err, nil)
+}
+
+func TestCommandYamlFileFlagHasDefaultGlobalEnvYamlSetGlobalEnvWins(t *testing.T) {
+ app := cli.NewApp()
+ set := flag.NewFlagSet("test", 0)
+ ioutil.WriteFile("current.yaml", []byte("test: 15"), 0666)
+ defer os.Remove("current.yaml")
+
+ os.Setenv("THE_TEST", "11")
+ defer os.Setenv("THE_TEST", "")
+
+ test := []string{"test-cmd", "--load", "current.yaml"}
+ set.Parse(test)
+
+ c := cli.NewContext(app, set, nil)
+
+ command := &cli.Command{
+ Name: "test-cmd",
+ Aliases: []string{"tc"},
+ Usage: "this is for testing",
+ Description: "testing",
+ Action: func(c *cli.Context) error {
+ val := c.Int("test")
+ expect(t, val, 11)
+ return nil
+ },
+ Flags: []cli.Flag{
+ NewIntFlag(cli.IntFlag{Name: "test", Value: 7, EnvVar: "THE_TEST"}),
+ cli.StringFlag{Name: "load"}},
+ }
+ command.Before = InitInputSourceWithContext(command.Flags, NewYamlSourceFromFlagFunc("load"))
+ err := command.Run(c)
+
+ expect(t, err, nil)
+}
+
+func TestCommandYamlFileFlagHasDefaultGlobalEnvYamlSetGlobalEnvWinsNested(t *testing.T) {
+ app := cli.NewApp()
+ set := flag.NewFlagSet("test", 0)
+ ioutil.WriteFile("current.yaml", []byte(`top:
+ test: 15`), 0666)
+ defer os.Remove("current.yaml")
+
+ os.Setenv("THE_TEST", "11")
+ defer os.Setenv("THE_TEST", "")
+
+ test := []string{"test-cmd", "--load", "current.yaml"}
+ set.Parse(test)
+
+ c := cli.NewContext(app, set, nil)
+
+ command := &cli.Command{
+ Name: "test-cmd",
+ Aliases: []string{"tc"},
+ Usage: "this is for testing",
+ Description: "testing",
+ Action: func(c *cli.Context) error {
+ val := c.Int("top.test")
+ expect(t, val, 11)
+ return nil
+ },
+ Flags: []cli.Flag{
+ NewIntFlag(cli.IntFlag{Name: "top.test", Value: 7, EnvVar: "THE_TEST"}),
+ cli.StringFlag{Name: "load"}},
+ }
+ command.Before = InitInputSourceWithContext(command.Flags, NewYamlSourceFromFlagFunc("load"))
+ err := command.Run(c)
+
+ expect(t, err, nil)
+}
diff --git a/vendor/github.com/codegangsta/cli/altsrc/yaml_file_loader.go b/vendor/github.com/codegangsta/cli/altsrc/yaml_file_loader.go
new file mode 100644
index 0000000..dd808d5
--- /dev/null
+++ b/vendor/github.com/codegangsta/cli/altsrc/yaml_file_loader.go
@@ -0,0 +1,92 @@
+// Disabling building of yaml support in cases where golang is 1.0 or 1.1
+// as the encoding library is not implemented or supported.
+
+// +build go1.2
+
+package altsrc
+
+import (
+ "fmt"
+ "io/ioutil"
+ "net/http"
+ "net/url"
+ "os"
+ "runtime"
+ "strings"
+
+ "gopkg.in/urfave/cli.v1"
+
+ "gopkg.in/yaml.v2"
+)
+
+type yamlSourceContext struct {
+ FilePath string
+}
+
+// NewYamlSourceFromFile creates a new Yaml InputSourceContext from a filepath.
+func NewYamlSourceFromFile(file string) (InputSourceContext, error) {
+ ysc := &yamlSourceContext{FilePath: file}
+ var results map[interface{}]interface{}
+ err := readCommandYaml(ysc.FilePath, &results)
+ if err != nil {
+ return nil, fmt.Errorf("Unable to load Yaml file '%s': inner error: \n'%v'", ysc.FilePath, err.Error())
+ }
+
+ return &MapInputSource{valueMap: results}, nil
+}
+
+// NewYamlSourceFromFlagFunc creates a new Yaml InputSourceContext from a provided flag name and source context.
+func NewYamlSourceFromFlagFunc(flagFileName string) func(context *cli.Context) (InputSourceContext, error) {
+ return func(context *cli.Context) (InputSourceContext, error) {
+ filePath := context.String(flagFileName)
+ return NewYamlSourceFromFile(filePath)
+ }
+}
+
+func readCommandYaml(filePath string, container interface{}) (err error) {
+ b, err := loadDataFrom(filePath)
+ if err != nil {
+ return err
+ }
+
+ err = yaml.Unmarshal(b, container)
+ if err != nil {
+ return err
+ }
+
+ err = nil
+ return
+}
+
+func loadDataFrom(filePath string) ([]byte, error) {
+ u, err := url.Parse(filePath)
+ if err != nil {
+ return nil, err
+ }
+
+ if u.Host != "" { // i have a host, now do i support the scheme?
+ switch u.Scheme {
+ case "http", "https":
+ res, err := http.Get(filePath)
+ if err != nil {
+ return nil, err
+ }
+ return ioutil.ReadAll(res.Body)
+ default:
+ return nil, fmt.Errorf("scheme of %s is unsupported", filePath)
+ }
+ } else if u.Path != "" { // i dont have a host, but I have a path. I am a local file.
+ if _, notFoundFileErr := os.Stat(filePath); notFoundFileErr != nil {
+ return nil, fmt.Errorf("Cannot read from file: '%s' because it does not exist.", filePath)
+ }
+ return ioutil.ReadFile(filePath)
+ } else if runtime.GOOS == "windows" && strings.Contains(u.String(), "\\") {
+ // on Windows systems u.Path is always empty, so we need to check the string directly.
+ if _, notFoundFileErr := os.Stat(filePath); notFoundFileErr != nil {
+ return nil, fmt.Errorf("Cannot read from file: '%s' because it does not exist.", filePath)
+ }
+ return ioutil.ReadFile(filePath)
+ } else {
+ return nil, fmt.Errorf("unable to determine how to load from path %s", filePath)
+ }
+}
diff --git a/vendor/github.com/codegangsta/cli/app.go b/vendor/github.com/codegangsta/cli/app.go
new file mode 100644
index 0000000..51fc45d
--- /dev/null
+++ b/vendor/github.com/codegangsta/cli/app.go
@@ -0,0 +1,497 @@
+package cli
+
+import (
+ "fmt"
+ "io"
+ "io/ioutil"
+ "os"
+ "path/filepath"
+ "sort"
+ "time"
+)
+
+var (
+ changeLogURL = "https://github.com/urfave/cli/blob/master/CHANGELOG.md"
+ appActionDeprecationURL = fmt.Sprintf("%s#deprecated-cli-app-action-signature", changeLogURL)
+ runAndExitOnErrorDeprecationURL = fmt.Sprintf("%s#deprecated-cli-app-runandexitonerror", changeLogURL)
+
+ contactSysadmin = "This is an error in the application. Please contact the distributor of this application if this is not you."
+
+ errInvalidActionType = NewExitError("ERROR invalid Action type. "+
+ fmt.Sprintf("Must be `func(*Context`)` or `func(*Context) error). %s", contactSysadmin)+
+ fmt.Sprintf("See %s", appActionDeprecationURL), 2)
+)
+
+// App is the main structure of a cli application. It is recommended that
+// an app be created with the cli.NewApp() function
+type App struct {
+ // The name of the program. Defaults to path.Base(os.Args[0])
+ Name string
+ // Full name of command for help, defaults to Name
+ HelpName string
+ // Description of the program.
+ Usage string
+ // Text to override the USAGE section of help
+ UsageText string
+ // Description of the program argument format.
+ ArgsUsage string
+ // Version of the program
+ Version string
+ // Description of the program
+ Description string
+ // List of commands to execute
+ Commands []Command
+ // List of flags to parse
+ Flags []Flag
+ // Boolean to enable bash completion commands
+ EnableBashCompletion bool
+ // Boolean to hide built-in help command
+ HideHelp bool
+ // Boolean to hide built-in version flag and the VERSION section of help
+ HideVersion bool
+ // Populate on app startup, only gettable through method Categories()
+ categories CommandCategories
+ // An action to execute when the bash-completion flag is set
+ BashComplete BashCompleteFunc
+ // An action to execute before any subcommands are run, but after the context is ready
+ // If a non-nil error is returned, no subcommands are run
+ Before BeforeFunc
+ // An action to execute after any subcommands are run, but after the subcommand has finished
+ // It is run even if Action() panics
+ After AfterFunc
+
+ // The action to execute when no subcommands are specified
+ // Expects a `cli.ActionFunc` but will accept the *deprecated* signature of `func(*cli.Context) {}`
+ // *Note*: support for the deprecated `Action` signature will be removed in a future version
+ Action interface{}
+
+ // Execute this function if the proper command cannot be found
+ CommandNotFound CommandNotFoundFunc
+ // Execute this function if an usage error occurs
+ OnUsageError OnUsageErrorFunc
+ // Compilation date
+ Compiled time.Time
+ // List of all authors who contributed
+ Authors []Author
+ // Copyright of the binary if any
+ Copyright string
+ // Name of Author (Note: Use App.Authors, this is deprecated)
+ Author string
+ // Email of Author (Note: Use App.Authors, this is deprecated)
+ Email string
+ // Writer writer to write output to
+ Writer io.Writer
+ // ErrWriter writes error output
+ ErrWriter io.Writer
+ // Other custom info
+ Metadata map[string]interface{}
+ // Carries a function which returns app specific info.
+ ExtraInfo func() map[string]string
+ // CustomAppHelpTemplate the text template for app help topic.
+ // cli.go uses text/template to render templates. You can
+ // render custom help text by setting this variable.
+ CustomAppHelpTemplate string
+
+ didSetup bool
+}
+
+// Tries to find out when this binary was compiled.
+// Returns the current time if it fails to find it.
+func compileTime() time.Time {
+ info, err := os.Stat(os.Args[0])
+ if err != nil {
+ return time.Now()
+ }
+ return info.ModTime()
+}
+
+// NewApp creates a new cli Application with some reasonable defaults for Name,
+// Usage, Version and Action.
+func NewApp() *App {
+ return &App{
+ Name: filepath.Base(os.Args[0]),
+ HelpName: filepath.Base(os.Args[0]),
+ Usage: "A new cli application",
+ UsageText: "",
+ Version: "0.0.0",
+ BashComplete: DefaultAppComplete,
+ Action: helpCommand.Action,
+ Compiled: compileTime(),
+ Writer: os.Stdout,
+ }
+}
+
+// Setup runs initialization code to ensure all data structures are ready for
+// `Run` or inspection prior to `Run`. It is internally called by `Run`, but
+// will return early if setup has already happened.
+func (a *App) Setup() {
+ if a.didSetup {
+ return
+ }
+
+ a.didSetup = true
+
+ if a.Author != "" || a.Email != "" {
+ a.Authors = append(a.Authors, Author{Name: a.Author, Email: a.Email})
+ }
+
+ newCmds := []Command{}
+ for _, c := range a.Commands {
+ if c.HelpName == "" {
+ c.HelpName = fmt.Sprintf("%s %s", a.HelpName, c.Name)
+ }
+ newCmds = append(newCmds, c)
+ }
+ a.Commands = newCmds
+
+ if a.Command(helpCommand.Name) == nil && !a.HideHelp {
+ a.Commands = append(a.Commands, helpCommand)
+ if (HelpFlag != BoolFlag{}) {
+ a.appendFlag(HelpFlag)
+ }
+ }
+
+ if !a.HideVersion {
+ a.appendFlag(VersionFlag)
+ }
+
+ a.categories = CommandCategories{}
+ for _, command := range a.Commands {
+ a.categories = a.categories.AddCommand(command.Category, command)
+ }
+ sort.Sort(a.categories)
+
+ if a.Metadata == nil {
+ a.Metadata = make(map[string]interface{})
+ }
+
+ if a.Writer == nil {
+ a.Writer = os.Stdout
+ }
+}
+
+// Run is the entry point to the cli app. Parses the arguments slice and routes
+// to the proper flag/args combination
+func (a *App) Run(arguments []string) (err error) {
+ a.Setup()
+
+ // handle the completion flag separately from the flagset since
+ // completion could be attempted after a flag, but before its value was put
+ // on the command line. this causes the flagset to interpret the completion
+ // flag name as the value of the flag before it which is undesirable
+ // note that we can only do this because the shell autocomplete function
+ // always appends the completion flag at the end of the command
+ shellComplete, arguments := checkShellCompleteFlag(a, arguments)
+
+ // parse flags
+ set, err := flagSet(a.Name, a.Flags)
+ if err != nil {
+ return err
+ }
+
+ set.SetOutput(ioutil.Discard)
+ err = set.Parse(arguments[1:])
+ nerr := normalizeFlags(a.Flags, set)
+ context := NewContext(a, set, nil)
+ if nerr != nil {
+ fmt.Fprintln(a.Writer, nerr)
+ ShowAppHelp(context)
+ return nerr
+ }
+ context.shellComplete = shellComplete
+
+ if checkCompletions(context) {
+ return nil
+ }
+
+ if err != nil {
+ if a.OnUsageError != nil {
+ err := a.OnUsageError(context, err, false)
+ HandleExitCoder(err)
+ return err
+ }
+ fmt.Fprintf(a.Writer, "%s %s\n\n", "Incorrect Usage.", err.Error())
+ ShowAppHelp(context)
+ return err
+ }
+
+ if !a.HideHelp && checkHelp(context) {
+ ShowAppHelp(context)
+ return nil
+ }
+
+ if !a.HideVersion && checkVersion(context) {
+ ShowVersion(context)
+ return nil
+ }
+
+ if a.After != nil {
+ defer func() {
+ if afterErr := a.After(context); afterErr != nil {
+ if err != nil {
+ err = NewMultiError(err, afterErr)
+ } else {
+ err = afterErr
+ }
+ }
+ }()
+ }
+
+ if a.Before != nil {
+ beforeErr := a.Before(context)
+ if beforeErr != nil {
+ ShowAppHelp(context)
+ HandleExitCoder(beforeErr)
+ err = beforeErr
+ return err
+ }
+ }
+
+ args := context.Args()
+ if args.Present() {
+ name := args.First()
+ c := a.Command(name)
+ if c != nil {
+ return c.Run(context)
+ }
+ }
+
+ if a.Action == nil {
+ a.Action = helpCommand.Action
+ }
+
+ // Run default Action
+ err = HandleAction(a.Action, context)
+
+ HandleExitCoder(err)
+ return err
+}
+
+// RunAndExitOnError calls .Run() and exits non-zero if an error was returned
+//
+// Deprecated: instead you should return an error that fulfills cli.ExitCoder
+// to cli.App.Run. This will cause the application to exit with the given eror
+// code in the cli.ExitCoder
+func (a *App) RunAndExitOnError() {
+ if err := a.Run(os.Args); err != nil {
+ fmt.Fprintln(a.errWriter(), err)
+ OsExiter(1)
+ }
+}
+
+// RunAsSubcommand invokes the subcommand given the context, parses ctx.Args() to
+// generate command-specific flags
+func (a *App) RunAsSubcommand(ctx *Context) (err error) {
+ // append help to commands
+ if len(a.Commands) > 0 {
+ if a.Command(helpCommand.Name) == nil && !a.HideHelp {
+ a.Commands = append(a.Commands, helpCommand)
+ if (HelpFlag != BoolFlag{}) {
+ a.appendFlag(HelpFlag)
+ }
+ }
+ }
+
+ newCmds := []Command{}
+ for _, c := range a.Commands {
+ if c.HelpName == "" {
+ c.HelpName = fmt.Sprintf("%s %s", a.HelpName, c.Name)
+ }
+ newCmds = append(newCmds, c)
+ }
+ a.Commands = newCmds
+
+ // parse flags
+ set, err := flagSet(a.Name, a.Flags)
+ if err != nil {
+ return err
+ }
+
+ set.SetOutput(ioutil.Discard)
+ err = set.Parse(ctx.Args().Tail())
+ nerr := normalizeFlags(a.Flags, set)
+ context := NewContext(a, set, ctx)
+
+ if nerr != nil {
+ fmt.Fprintln(a.Writer, nerr)
+ fmt.Fprintln(a.Writer)
+ if len(a.Commands) > 0 {
+ ShowSubcommandHelp(context)
+ } else {
+ ShowCommandHelp(ctx, context.Args().First())
+ }
+ return nerr
+ }
+
+ if checkCompletions(context) {
+ return nil
+ }
+
+ if err != nil {
+ if a.OnUsageError != nil {
+ err = a.OnUsageError(context, err, true)
+ HandleExitCoder(err)
+ return err
+ }
+ fmt.Fprintf(a.Writer, "%s %s\n\n", "Incorrect Usage.", err.Error())
+ ShowSubcommandHelp(context)
+ return err
+ }
+
+ if len(a.Commands) > 0 {
+ if checkSubcommandHelp(context) {
+ return nil
+ }
+ } else {
+ if checkCommandHelp(ctx, context.Args().First()) {
+ return nil
+ }
+ }
+
+ if a.After != nil {
+ defer func() {
+ afterErr := a.After(context)
+ if afterErr != nil {
+ HandleExitCoder(err)
+ if err != nil {
+ err = NewMultiError(err, afterErr)
+ } else {
+ err = afterErr
+ }
+ }
+ }()
+ }
+
+ if a.Before != nil {
+ beforeErr := a.Before(context)
+ if beforeErr != nil {
+ HandleExitCoder(beforeErr)
+ err = beforeErr
+ return err
+ }
+ }
+
+ args := context.Args()
+ if args.Present() {
+ name := args.First()
+ c := a.Command(name)
+ if c != nil {
+ return c.Run(context)
+ }
+ }
+
+ // Run default Action
+ err = HandleAction(a.Action, context)
+
+ HandleExitCoder(err)
+ return err
+}
+
+// Command returns the named command on App. Returns nil if the command does not exist
+func (a *App) Command(name string) *Command {
+ for _, c := range a.Commands {
+ if c.HasName(name) {
+ return &c
+ }
+ }
+
+ return nil
+}
+
+// Categories returns a slice containing all the categories with the commands they contain
+func (a *App) Categories() CommandCategories {
+ return a.categories
+}
+
+// VisibleCategories returns a slice of categories and commands that are
+// Hidden=false
+func (a *App) VisibleCategories() []*CommandCategory {
+ ret := []*CommandCategory{}
+ for _, category := range a.categories {
+ if visible := func() *CommandCategory {
+ for _, command := range category.Commands {
+ if !command.Hidden {
+ return category
+ }
+ }
+ return nil
+ }(); visible != nil {
+ ret = append(ret, visible)
+ }
+ }
+ return ret
+}
+
+// VisibleCommands returns a slice of the Commands with Hidden=false
+func (a *App) VisibleCommands() []Command {
+ ret := []Command{}
+ for _, command := range a.Commands {
+ if !command.Hidden {
+ ret = append(ret, command)
+ }
+ }
+ return ret
+}
+
+// VisibleFlags returns a slice of the Flags with Hidden=false
+func (a *App) VisibleFlags() []Flag {
+ return visibleFlags(a.Flags)
+}
+
+func (a *App) hasFlag(flag Flag) bool {
+ for _, f := range a.Flags {
+ if flag == f {
+ return true
+ }
+ }
+
+ return false
+}
+
+func (a *App) errWriter() io.Writer {
+
+ // When the app ErrWriter is nil use the package level one.
+ if a.ErrWriter == nil {
+ return ErrWriter
+ }
+
+ return a.ErrWriter
+}
+
+func (a *App) appendFlag(flag Flag) {
+ if !a.hasFlag(flag) {
+ a.Flags = append(a.Flags, flag)
+ }
+}
+
+// Author represents someone who has contributed to a cli project.
+type Author struct {
+ Name string // The Authors name
+ Email string // The Authors email
+}
+
+// String makes Author comply to the Stringer interface, to allow an easy print in the templating process
+func (a Author) String() string {
+ e := ""
+ if a.Email != "" {
+ e = " <" + a.Email + ">"
+ }
+
+ return fmt.Sprintf("%v%v", a.Name, e)
+}
+
+// HandleAction attempts to figure out which Action signature was used. If
+// it's an ActionFunc or a func with the legacy signature for Action, the func
+// is run!
+func HandleAction(action interface{}, context *Context) (err error) {
+ if a, ok := action.(ActionFunc); ok {
+ return a(context)
+ } else if a, ok := action.(func(*Context) error); ok {
+ return a(context)
+ } else if a, ok := action.(func(*Context)); ok { // deprecated function signature
+ a(context)
+ return nil
+ } else {
+ return errInvalidActionType
+ }
+}
diff --git a/vendor/github.com/codegangsta/cli/app_test.go b/vendor/github.com/codegangsta/cli/app_test.go
new file mode 100644
index 0000000..e14ddaf
--- /dev/null
+++ b/vendor/github.com/codegangsta/cli/app_test.go
@@ -0,0 +1,1742 @@
+package cli
+
+import (
+ "bytes"
+ "errors"
+ "flag"
+ "fmt"
+ "io"
+ "io/ioutil"
+ "os"
+ "reflect"
+ "strings"
+ "testing"
+)
+
+var (
+ lastExitCode = 0
+ fakeOsExiter = func(rc int) {
+ lastExitCode = rc
+ }
+ fakeErrWriter = &bytes.Buffer{}
+)
+
+func init() {
+ OsExiter = fakeOsExiter
+ ErrWriter = fakeErrWriter
+}
+
+type opCounts struct {
+ Total, BashComplete, OnUsageError, Before, CommandNotFound, Action, After, SubCommand int
+}
+
+func ExampleApp_Run() {
+ // set args for examples sake
+ os.Args = []string{"greet", "--name", "Jeremy"}
+
+ app := NewApp()
+ app.Name = "greet"
+ app.Flags = []Flag{
+ StringFlag{Name: "name", Value: "bob", Usage: "a name to say"},
+ }
+ app.Action = func(c *Context) error {
+ fmt.Printf("Hello %v\n", c.String("name"))
+ return nil
+ }
+ app.UsageText = "app [first_arg] [second_arg]"
+ app.Author = "Harrison"
+ app.Email = "harrison@lolwut.com"
+ app.Authors = []Author{{Name: "Oliver Allen", Email: "oliver@toyshop.com"}}
+ app.Run(os.Args)
+ // Output:
+ // Hello Jeremy
+}
+
+func ExampleApp_Run_subcommand() {
+ // set args for examples sake
+ os.Args = []string{"say", "hi", "english", "--name", "Jeremy"}
+ app := NewApp()
+ app.Name = "say"
+ app.Commands = []Command{
+ {
+ Name: "hello",
+ Aliases: []string{"hi"},
+ Usage: "use it to see a description",
+ Description: "This is how we describe hello the function",
+ Subcommands: []Command{
+ {
+ Name: "english",
+ Aliases: []string{"en"},
+ Usage: "sends a greeting in english",
+ Description: "greets someone in english",
+ Flags: []Flag{
+ StringFlag{
+ Name: "name",
+ Value: "Bob",
+ Usage: "Name of the person to greet",
+ },
+ },
+ Action: func(c *Context) error {
+ fmt.Println("Hello,", c.String("name"))
+ return nil
+ },
+ },
+ },
+ },
+ }
+
+ app.Run(os.Args)
+ // Output:
+ // Hello, Jeremy
+}
+
+func ExampleApp_Run_appHelp() {
+ // set args for examples sake
+ os.Args = []string{"greet", "help"}
+
+ app := NewApp()
+ app.Name = "greet"
+ app.Version = "0.1.0"
+ app.Description = "This is how we describe greet the app"
+ app.Authors = []Author{
+ {Name: "Harrison", Email: "harrison@lolwut.com"},
+ {Name: "Oliver Allen", Email: "oliver@toyshop.com"},
+ }
+ app.Flags = []Flag{
+ StringFlag{Name: "name", Value: "bob", Usage: "a name to say"},
+ }
+ app.Commands = []Command{
+ {
+ Name: "describeit",
+ Aliases: []string{"d"},
+ Usage: "use it to see a description",
+ Description: "This is how we describe describeit the function",
+ Action: func(c *Context) error {
+ fmt.Printf("i like to describe things")
+ return nil
+ },
+ },
+ }
+ app.Run(os.Args)
+ // Output:
+ // NAME:
+ // greet - A new cli application
+ //
+ // USAGE:
+ // greet [global options] command [command options] [arguments...]
+ //
+ // VERSION:
+ // 0.1.0
+ //
+ // DESCRIPTION:
+ // This is how we describe greet the app
+ //
+ // AUTHORS:
+ // Harrison
+ // Oliver Allen
+ //
+ // COMMANDS:
+ // describeit, d use it to see a description
+ // help, h Shows a list of commands or help for one command
+ //
+ // GLOBAL OPTIONS:
+ // --name value a name to say (default: "bob")
+ // --help, -h show help
+ // --version, -v print the version
+}
+
+func ExampleApp_Run_commandHelp() {
+ // set args for examples sake
+ os.Args = []string{"greet", "h", "describeit"}
+
+ app := NewApp()
+ app.Name = "greet"
+ app.Flags = []Flag{
+ StringFlag{Name: "name", Value: "bob", Usage: "a name to say"},
+ }
+ app.Commands = []Command{
+ {
+ Name: "describeit",
+ Aliases: []string{"d"},
+ Usage: "use it to see a description",
+ Description: "This is how we describe describeit the function",
+ Action: func(c *Context) error {
+ fmt.Printf("i like to describe things")
+ return nil
+ },
+ },
+ }
+ app.Run(os.Args)
+ // Output:
+ // NAME:
+ // greet describeit - use it to see a description
+ //
+ // USAGE:
+ // greet describeit [arguments...]
+ //
+ // DESCRIPTION:
+ // This is how we describe describeit the function
+}
+
+func ExampleApp_Run_noAction() {
+ app := App{}
+ app.Name = "greet"
+ app.Run([]string{"greet"})
+ // Output:
+ // NAME:
+ // greet
+ //
+ // USAGE:
+ // [global options] command [command options] [arguments...]
+ //
+ // COMMANDS:
+ // help, h Shows a list of commands or help for one command
+ //
+ // GLOBAL OPTIONS:
+ // --help, -h show help
+ // --version, -v print the version
+}
+
+func ExampleApp_Run_subcommandNoAction() {
+ app := App{}
+ app.Name = "greet"
+ app.Commands = []Command{
+ {
+ Name: "describeit",
+ Aliases: []string{"d"},
+ Usage: "use it to see a description",
+ Description: "This is how we describe describeit the function",
+ },
+ }
+ app.Run([]string{"greet", "describeit"})
+ // Output:
+ // NAME:
+ // describeit - use it to see a description
+ //
+ // USAGE:
+ // describeit [arguments...]
+ //
+ // DESCRIPTION:
+ // This is how we describe describeit the function
+
+}
+
+func ExampleApp_Run_bashComplete() {
+ // set args for examples sake
+ os.Args = []string{"greet", "--generate-bash-completion"}
+
+ app := NewApp()
+ app.Name = "greet"
+ app.EnableBashCompletion = true
+ app.Commands = []Command{
+ {
+ Name: "describeit",
+ Aliases: []string{"d"},
+ Usage: "use it to see a description",
+ Description: "This is how we describe describeit the function",
+ Action: func(c *Context) error {
+ fmt.Printf("i like to describe things")
+ return nil
+ },
+ }, {
+ Name: "next",
+ Usage: "next example",
+ Description: "more stuff to see when generating bash completion",
+ Action: func(c *Context) error {
+ fmt.Printf("the next example")
+ return nil
+ },
+ },
+ }
+
+ app.Run(os.Args)
+ // Output:
+ // describeit
+ // d
+ // next
+ // help
+ // h
+}
+
+func TestApp_Run(t *testing.T) {
+ s := ""
+
+ app := NewApp()
+ app.Action = func(c *Context) error {
+ s = s + c.Args().First()
+ return nil
+ }
+
+ err := app.Run([]string{"command", "foo"})
+ expect(t, err, nil)
+ err = app.Run([]string{"command", "bar"})
+ expect(t, err, nil)
+ expect(t, s, "foobar")
+}
+
+var commandAppTests = []struct {
+ name string
+ expected bool
+}{
+ {"foobar", true},
+ {"batbaz", true},
+ {"b", true},
+ {"f", true},
+ {"bat", false},
+ {"nothing", false},
+}
+
+func TestApp_Command(t *testing.T) {
+ app := NewApp()
+ fooCommand := Command{Name: "foobar", Aliases: []string{"f"}}
+ batCommand := Command{Name: "batbaz", Aliases: []string{"b"}}
+ app.Commands = []Command{
+ fooCommand,
+ batCommand,
+ }
+
+ for _, test := range commandAppTests {
+ expect(t, app.Command(test.name) != nil, test.expected)
+ }
+}
+
+func TestApp_Setup_defaultsWriter(t *testing.T) {
+ app := &App{}
+ app.Setup()
+ expect(t, app.Writer, os.Stdout)
+}
+
+func TestApp_CommandWithArgBeforeFlags(t *testing.T) {
+ var parsedOption, firstArg string
+
+ app := NewApp()
+ command := Command{
+ Name: "cmd",
+ Flags: []Flag{
+ StringFlag{Name: "option", Value: "", Usage: "some option"},
+ },
+ Action: func(c *Context) error {
+ parsedOption = c.String("option")
+ firstArg = c.Args().First()
+ return nil
+ },
+ }
+ app.Commands = []Command{command}
+
+ app.Run([]string{"", "cmd", "my-arg", "--option", "my-option"})
+
+ expect(t, parsedOption, "my-option")
+ expect(t, firstArg, "my-arg")
+}
+
+func TestApp_RunAsSubcommandParseFlags(t *testing.T) {
+ var context *Context
+
+ a := NewApp()
+ a.Commands = []Command{
+ {
+ Name: "foo",
+ Action: func(c *Context) error {
+ context = c
+ return nil
+ },
+ Flags: []Flag{
+ StringFlag{
+ Name: "lang",
+ Value: "english",
+ Usage: "language for the greeting",
+ },
+ },
+ Before: func(_ *Context) error { return nil },
+ },
+ }
+ a.Run([]string{"", "foo", "--lang", "spanish", "abcd"})
+
+ expect(t, context.Args().Get(0), "abcd")
+ expect(t, context.String("lang"), "spanish")
+}
+
+func TestApp_RunAsSubCommandIncorrectUsage(t *testing.T) {
+ a := App{
+ Flags: []Flag{
+ StringFlag{Name: "--foo"},
+ },
+ Writer: bytes.NewBufferString(""),
+ }
+
+ set := flag.NewFlagSet("", flag.ContinueOnError)
+ set.Parse([]string{"", "---foo"})
+ c := &Context{flagSet: set}
+
+ err := a.RunAsSubcommand(c)
+
+ expect(t, err, errors.New("bad flag syntax: ---foo"))
+}
+
+func TestApp_CommandWithFlagBeforeTerminator(t *testing.T) {
+ var parsedOption string
+ var args []string
+
+ app := NewApp()
+ command := Command{
+ Name: "cmd",
+ Flags: []Flag{
+ StringFlag{Name: "option", Value: "", Usage: "some option"},
+ },
+ Action: func(c *Context) error {
+ parsedOption = c.String("option")
+ args = c.Args()
+ return nil
+ },
+ }
+ app.Commands = []Command{command}
+
+ app.Run([]string{"", "cmd", "my-arg", "--option", "my-option", "--", "--notARealFlag"})
+
+ expect(t, parsedOption, "my-option")
+ expect(t, args[0], "my-arg")
+ expect(t, args[1], "--")
+ expect(t, args[2], "--notARealFlag")
+}
+
+func TestApp_CommandWithDash(t *testing.T) {
+ var args []string
+
+ app := NewApp()
+ command := Command{
+ Name: "cmd",
+ Action: func(c *Context) error {
+ args = c.Args()
+ return nil
+ },
+ }
+ app.Commands = []Command{command}
+
+ app.Run([]string{"", "cmd", "my-arg", "-"})
+
+ expect(t, args[0], "my-arg")
+ expect(t, args[1], "-")
+}
+
+func TestApp_CommandWithNoFlagBeforeTerminator(t *testing.T) {
+ var args []string
+
+ app := NewApp()
+ command := Command{
+ Name: "cmd",
+ Action: func(c *Context) error {
+ args = c.Args()
+ return nil
+ },
+ }
+ app.Commands = []Command{command}
+
+ app.Run([]string{"", "cmd", "my-arg", "--", "notAFlagAtAll"})
+
+ expect(t, args[0], "my-arg")
+ expect(t, args[1], "--")
+ expect(t, args[2], "notAFlagAtAll")
+}
+
+func TestApp_VisibleCommands(t *testing.T) {
+ app := NewApp()
+ app.Commands = []Command{
+ {
+ Name: "frob",
+ HelpName: "foo frob",
+ Action: func(_ *Context) error { return nil },
+ },
+ {
+ Name: "frib",
+ HelpName: "foo frib",
+ Hidden: true,
+ Action: func(_ *Context) error { return nil },
+ },
+ }
+
+ app.Setup()
+ expected := []Command{
+ app.Commands[0],
+ app.Commands[2], // help
+ }
+ actual := app.VisibleCommands()
+ expect(t, len(expected), len(actual))
+ for i, actualCommand := range actual {
+ expectedCommand := expected[i]
+
+ if expectedCommand.Action != nil {
+ // comparing func addresses is OK!
+ expect(t, fmt.Sprintf("%p", expectedCommand.Action), fmt.Sprintf("%p", actualCommand.Action))
+ }
+
+ // nil out funcs, as they cannot be compared
+ // (https://github.com/golang/go/issues/8554)
+ expectedCommand.Action = nil
+ actualCommand.Action = nil
+
+ if !reflect.DeepEqual(expectedCommand, actualCommand) {
+ t.Errorf("expected\n%#v\n!=\n%#v", expectedCommand, actualCommand)
+ }
+ }
+}
+
+func TestApp_Float64Flag(t *testing.T) {
+ var meters float64
+
+ app := NewApp()
+ app.Flags = []Flag{
+ Float64Flag{Name: "height", Value: 1.5, Usage: "Set the height, in meters"},
+ }
+ app.Action = func(c *Context) error {
+ meters = c.Float64("height")
+ return nil
+ }
+
+ app.Run([]string{"", "--height", "1.93"})
+ expect(t, meters, 1.93)
+}
+
+func TestApp_ParseSliceFlags(t *testing.T) {
+ var parsedOption, firstArg string
+ var parsedIntSlice []int
+ var parsedStringSlice []string
+
+ app := NewApp()
+ command := Command{
+ Name: "cmd",
+ Flags: []Flag{
+ IntSliceFlag{Name: "p", Value: &IntSlice{}, Usage: "set one or more ip addr"},
+ StringSliceFlag{Name: "ip", Value: &StringSlice{}, Usage: "set one or more ports to open"},
+ },
+ Action: func(c *Context) error {
+ parsedIntSlice = c.IntSlice("p")
+ parsedStringSlice = c.StringSlice("ip")
+ parsedOption = c.String("option")
+ firstArg = c.Args().First()
+ return nil
+ },
+ }
+ app.Commands = []Command{command}
+
+ app.Run([]string{"", "cmd", "my-arg", "-p", "22", "-p", "80", "-ip", "8.8.8.8", "-ip", "8.8.4.4"})
+
+ IntsEquals := func(a, b []int) bool {
+ if len(a) != len(b) {
+ return false
+ }
+ for i, v := range a {
+ if v != b[i] {
+ return false
+ }
+ }
+ return true
+ }
+
+ StrsEquals := func(a, b []string) bool {
+ if len(a) != len(b) {
+ return false
+ }
+ for i, v := range a {
+ if v != b[i] {
+ return false
+ }
+ }
+ return true
+ }
+ var expectedIntSlice = []int{22, 80}
+ var expectedStringSlice = []string{"8.8.8.8", "8.8.4.4"}
+
+ if !IntsEquals(parsedIntSlice, expectedIntSlice) {
+ t.Errorf("%v does not match %v", parsedIntSlice, expectedIntSlice)
+ }
+
+ if !StrsEquals(parsedStringSlice, expectedStringSlice) {
+ t.Errorf("%v does not match %v", parsedStringSlice, expectedStringSlice)
+ }
+}
+
+func TestApp_ParseSliceFlagsWithMissingValue(t *testing.T) {
+ var parsedIntSlice []int
+ var parsedStringSlice []string
+
+ app := NewApp()
+ command := Command{
+ Name: "cmd",
+ Flags: []Flag{
+ IntSliceFlag{Name: "a", Usage: "set numbers"},
+ StringSliceFlag{Name: "str", Usage: "set strings"},
+ },
+ Action: func(c *Context) error {
+ parsedIntSlice = c.IntSlice("a")
+ parsedStringSlice = c.StringSlice("str")
+ return nil
+ },
+ }
+ app.Commands = []Command{command}
+
+ app.Run([]string{"", "cmd", "my-arg", "-a", "2", "-str", "A"})
+
+ var expectedIntSlice = []int{2}
+ var expectedStringSlice = []string{"A"}
+
+ if parsedIntSlice[0] != expectedIntSlice[0] {
+ t.Errorf("%v does not match %v", parsedIntSlice[0], expectedIntSlice[0])
+ }
+
+ if parsedStringSlice[0] != expectedStringSlice[0] {
+ t.Errorf("%v does not match %v", parsedIntSlice[0], expectedIntSlice[0])
+ }
+}
+
+func TestApp_DefaultStdout(t *testing.T) {
+ app := NewApp()
+
+ if app.Writer != os.Stdout {
+ t.Error("Default output writer not set.")
+ }
+}
+
+type mockWriter struct {
+ written []byte
+}
+
+func (fw *mockWriter) Write(p []byte) (n int, err error) {
+ if fw.written == nil {
+ fw.written = p
+ } else {
+ fw.written = append(fw.written, p...)
+ }
+
+ return len(p), nil
+}
+
+func (fw *mockWriter) GetWritten() (b []byte) {
+ return fw.written
+}
+
+func TestApp_SetStdout(t *testing.T) {
+ w := &mockWriter{}
+
+ app := NewApp()
+ app.Name = "test"
+ app.Writer = w
+
+ err := app.Run([]string{"help"})
+
+ if err != nil {
+ t.Fatalf("Run error: %s", err)
+ }
+
+ if len(w.written) == 0 {
+ t.Error("App did not write output to desired writer.")
+ }
+}
+
+func TestApp_BeforeFunc(t *testing.T) {
+ counts := &opCounts{}
+ beforeError := fmt.Errorf("fail")
+ var err error
+
+ app := NewApp()
+
+ app.Before = func(c *Context) error {
+ counts.Total++
+ counts.Before = counts.Total
+ s := c.String("opt")
+ if s == "fail" {
+ return beforeError
+ }
+
+ return nil
+ }
+
+ app.Commands = []Command{
+ {
+ Name: "sub",
+ Action: func(c *Context) error {
+ counts.Total++
+ counts.SubCommand = counts.Total
+ return nil
+ },
+ },
+ }
+
+ app.Flags = []Flag{
+ StringFlag{Name: "opt"},
+ }
+
+ // run with the Before() func succeeding
+ err = app.Run([]string{"command", "--opt", "succeed", "sub"})
+
+ if err != nil {
+ t.Fatalf("Run error: %s", err)
+ }
+
+ if counts.Before != 1 {
+ t.Errorf("Before() not executed when expected")
+ }
+
+ if counts.SubCommand != 2 {
+ t.Errorf("Subcommand not executed when expected")
+ }
+
+ // reset
+ counts = &opCounts{}
+
+ // run with the Before() func failing
+ err = app.Run([]string{"command", "--opt", "fail", "sub"})
+
+ // should be the same error produced by the Before func
+ if err != beforeError {
+ t.Errorf("Run error expected, but not received")
+ }
+
+ if counts.Before != 1 {
+ t.Errorf("Before() not executed when expected")
+ }
+
+ if counts.SubCommand != 0 {
+ t.Errorf("Subcommand executed when NOT expected")
+ }
+
+ // reset
+ counts = &opCounts{}
+
+ afterError := errors.New("fail again")
+ app.After = func(_ *Context) error {
+ return afterError
+ }
+
+ // run with the Before() func failing, wrapped by After()
+ err = app.Run([]string{"command", "--opt", "fail", "sub"})
+
+ // should be the same error produced by the Before func
+ if _, ok := err.(MultiError); !ok {
+ t.Errorf("MultiError expected, but not received")
+ }
+
+ if counts.Before != 1 {
+ t.Errorf("Before() not executed when expected")
+ }
+
+ if counts.SubCommand != 0 {
+ t.Errorf("Subcommand executed when NOT expected")
+ }
+}
+
+func TestApp_AfterFunc(t *testing.T) {
+ counts := &opCounts{}
+ afterError := fmt.Errorf("fail")
+ var err error
+
+ app := NewApp()
+
+ app.After = func(c *Context) error {
+ counts.Total++
+ counts.After = counts.Total
+ s := c.String("opt")
+ if s == "fail" {
+ return afterError
+ }
+
+ return nil
+ }
+
+ app.Commands = []Command{
+ {
+ Name: "sub",
+ Action: func(c *Context) error {
+ counts.Total++
+ counts.SubCommand = counts.Total
+ return nil
+ },
+ },
+ }
+
+ app.Flags = []Flag{
+ StringFlag{Name: "opt"},
+ }
+
+ // run with the After() func succeeding
+ err = app.Run([]string{"command", "--opt", "succeed", "sub"})
+
+ if err != nil {
+ t.Fatalf("Run error: %s", err)
+ }
+
+ if counts.After != 2 {
+ t.Errorf("After() not executed when expected")
+ }
+
+ if counts.SubCommand != 1 {
+ t.Errorf("Subcommand not executed when expected")
+ }
+
+ // reset
+ counts = &opCounts{}
+
+ // run with the Before() func failing
+ err = app.Run([]string{"command", "--opt", "fail", "sub"})
+
+ // should be the same error produced by the Before func
+ if err != afterError {
+ t.Errorf("Run error expected, but not received")
+ }
+
+ if counts.After != 2 {
+ t.Errorf("After() not executed when expected")
+ }
+
+ if counts.SubCommand != 1 {
+ t.Errorf("Subcommand not executed when expected")
+ }
+}
+
+func TestAppNoHelpFlag(t *testing.T) {
+ oldFlag := HelpFlag
+ defer func() {
+ HelpFlag = oldFlag
+ }()
+
+ HelpFlag = BoolFlag{}
+
+ app := NewApp()
+ app.Writer = ioutil.Discard
+ err := app.Run([]string{"test", "-h"})
+
+ if err != flag.ErrHelp {
+ t.Errorf("expected error about missing help flag, but got: %s (%T)", err, err)
+ }
+}
+
+func TestAppHelpPrinter(t *testing.T) {
+ oldPrinter := HelpPrinter
+ defer func() {
+ HelpPrinter = oldPrinter
+ }()
+
+ var wasCalled = false
+ HelpPrinter = func(w io.Writer, template string, data interface{}) {
+ wasCalled = true
+ }
+
+ app := NewApp()
+ app.Run([]string{"-h"})
+
+ if wasCalled == false {
+ t.Errorf("Help printer expected to be called, but was not")
+ }
+}
+
+func TestApp_VersionPrinter(t *testing.T) {
+ oldPrinter := VersionPrinter
+ defer func() {
+ VersionPrinter = oldPrinter
+ }()
+
+ var wasCalled = false
+ VersionPrinter = func(c *Context) {
+ wasCalled = true
+ }
+
+ app := NewApp()
+ ctx := NewContext(app, nil, nil)
+ ShowVersion(ctx)
+
+ if wasCalled == false {
+ t.Errorf("Version printer expected to be called, but was not")
+ }
+}
+
+func TestApp_CommandNotFound(t *testing.T) {
+ counts := &opCounts{}
+ app := NewApp()
+
+ app.CommandNotFound = func(c *Context, command string) {
+ counts.Total++
+ counts.CommandNotFound = counts.Total
+ }
+
+ app.Commands = []Command{
+ {
+ Name: "bar",
+ Action: func(c *Context) error {
+ counts.Total++
+ counts.SubCommand = counts.Total
+ return nil
+ },
+ },
+ }
+
+ app.Run([]string{"command", "foo"})
+
+ expect(t, counts.CommandNotFound, 1)
+ expect(t, counts.SubCommand, 0)
+ expect(t, counts.Total, 1)
+}
+
+func TestApp_OrderOfOperations(t *testing.T) {
+ counts := &opCounts{}
+
+ resetCounts := func() { counts = &opCounts{} }
+
+ app := NewApp()
+ app.EnableBashCompletion = true
+ app.BashComplete = func(c *Context) {
+ counts.Total++
+ counts.BashComplete = counts.Total
+ }
+
+ app.OnUsageError = func(c *Context, err error, isSubcommand bool) error {
+ counts.Total++
+ counts.OnUsageError = counts.Total
+ return errors.New("hay OnUsageError")
+ }
+
+ beforeNoError := func(c *Context) error {
+ counts.Total++
+ counts.Before = counts.Total
+ return nil
+ }
+
+ beforeError := func(c *Context) error {
+ counts.Total++
+ counts.Before = counts.Total
+ return errors.New("hay Before")
+ }
+
+ app.Before = beforeNoError
+ app.CommandNotFound = func(c *Context, command string) {
+ counts.Total++
+ counts.CommandNotFound = counts.Total
+ }
+
+ afterNoError := func(c *Context) error {
+ counts.Total++
+ counts.After = counts.Total
+ return nil
+ }
+
+ afterError := func(c *Context) error {
+ counts.Total++
+ counts.After = counts.Total
+ return errors.New("hay After")
+ }
+
+ app.After = afterNoError
+ app.Commands = []Command{
+ {
+ Name: "bar",
+ Action: func(c *Context) error {
+ counts.Total++
+ counts.SubCommand = counts.Total
+ return nil
+ },
+ },
+ }
+
+ app.Action = func(c *Context) error {
+ counts.Total++
+ counts.Action = counts.Total
+ return nil
+ }
+
+ _ = app.Run([]string{"command", "--nope"})
+ expect(t, counts.OnUsageError, 1)
+ expect(t, counts.Total, 1)
+
+ resetCounts()
+
+ _ = app.Run([]string{"command", "--generate-bash-completion"})
+ expect(t, counts.BashComplete, 1)
+ expect(t, counts.Total, 1)
+
+ resetCounts()
+
+ oldOnUsageError := app.OnUsageError
+ app.OnUsageError = nil
+ _ = app.Run([]string{"command", "--nope"})
+ expect(t, counts.Total, 0)
+ app.OnUsageError = oldOnUsageError
+
+ resetCounts()
+
+ _ = app.Run([]string{"command", "foo"})
+ expect(t, counts.OnUsageError, 0)
+ expect(t, counts.Before, 1)
+ expect(t, counts.CommandNotFound, 0)
+ expect(t, counts.Action, 2)
+ expect(t, counts.After, 3)
+ expect(t, counts.Total, 3)
+
+ resetCounts()
+
+ app.Before = beforeError
+ _ = app.Run([]string{"command", "bar"})
+ expect(t, counts.OnUsageError, 0)
+ expect(t, counts.Before, 1)
+ expect(t, counts.After, 2)
+ expect(t, counts.Total, 2)
+ app.Before = beforeNoError
+
+ resetCounts()
+
+ app.After = nil
+ _ = app.Run([]string{"command", "bar"})
+ expect(t, counts.OnUsageError, 0)
+ expect(t, counts.Before, 1)
+ expect(t, counts.SubCommand, 2)
+ expect(t, counts.Total, 2)
+ app.After = afterNoError
+
+ resetCounts()
+
+ app.After = afterError
+ err := app.Run([]string{"command", "bar"})
+ if err == nil {
+ t.Fatalf("expected a non-nil error")
+ }
+ expect(t, counts.OnUsageError, 0)
+ expect(t, counts.Before, 1)
+ expect(t, counts.SubCommand, 2)
+ expect(t, counts.After, 3)
+ expect(t, counts.Total, 3)
+ app.After = afterNoError
+
+ resetCounts()
+
+ oldCommands := app.Commands
+ app.Commands = nil
+ _ = app.Run([]string{"command"})
+ expect(t, counts.OnUsageError, 0)
+ expect(t, counts.Before, 1)
+ expect(t, counts.Action, 2)
+ expect(t, counts.After, 3)
+ expect(t, counts.Total, 3)
+ app.Commands = oldCommands
+}
+
+func TestApp_Run_CommandWithSubcommandHasHelpTopic(t *testing.T) {
+ var subcommandHelpTopics = [][]string{
+ {"command", "foo", "--help"},
+ {"command", "foo", "-h"},
+ {"command", "foo", "help"},
+ }
+
+ for _, flagSet := range subcommandHelpTopics {
+ t.Logf("==> checking with flags %v", flagSet)
+
+ app := NewApp()
+ buf := new(bytes.Buffer)
+ app.Writer = buf
+
+ subCmdBar := Command{
+ Name: "bar",
+ Usage: "does bar things",
+ }
+ subCmdBaz := Command{
+ Name: "baz",
+ Usage: "does baz things",
+ }
+ cmd := Command{
+ Name: "foo",
+ Description: "descriptive wall of text about how it does foo things",
+ Subcommands: []Command{subCmdBar, subCmdBaz},
+ Action: func(c *Context) error { return nil },
+ }
+
+ app.Commands = []Command{cmd}
+ err := app.Run(flagSet)
+
+ if err != nil {
+ t.Error(err)
+ }
+
+ output := buf.String()
+ t.Logf("output: %q\n", buf.Bytes())
+
+ if strings.Contains(output, "No help topic for") {
+ t.Errorf("expect a help topic, got none: \n%q", output)
+ }
+
+ for _, shouldContain := range []string{
+ cmd.Name, cmd.Description,
+ subCmdBar.Name, subCmdBar.Usage,
+ subCmdBaz.Name, subCmdBaz.Usage,
+ } {
+ if !strings.Contains(output, shouldContain) {
+ t.Errorf("want help to contain %q, did not: \n%q", shouldContain, output)
+ }
+ }
+ }
+}
+
+func TestApp_Run_SubcommandFullPath(t *testing.T) {
+ app := NewApp()
+ buf := new(bytes.Buffer)
+ app.Writer = buf
+ app.Name = "command"
+ subCmd := Command{
+ Name: "bar",
+ Usage: "does bar things",
+ }
+ cmd := Command{
+ Name: "foo",
+ Description: "foo commands",
+ Subcommands: []Command{subCmd},
+ }
+ app.Commands = []Command{cmd}
+
+ err := app.Run([]string{"command", "foo", "bar", "--help"})
+ if err != nil {
+ t.Error(err)
+ }
+
+ output := buf.String()
+ if !strings.Contains(output, "command foo bar - does bar things") {
+ t.Errorf("expected full path to subcommand: %s", output)
+ }
+ if !strings.Contains(output, "command foo bar [arguments...]") {
+ t.Errorf("expected full path to subcommand: %s", output)
+ }
+}
+
+func TestApp_Run_SubcommandHelpName(t *testing.T) {
+ app := NewApp()
+ buf := new(bytes.Buffer)
+ app.Writer = buf
+ app.Name = "command"
+ subCmd := Command{
+ Name: "bar",
+ HelpName: "custom",
+ Usage: "does bar things",
+ }
+ cmd := Command{
+ Name: "foo",
+ Description: "foo commands",
+ Subcommands: []Command{subCmd},
+ }
+ app.Commands = []Command{cmd}
+
+ err := app.Run([]string{"command", "foo", "bar", "--help"})
+ if err != nil {
+ t.Error(err)
+ }
+
+ output := buf.String()
+ if !strings.Contains(output, "custom - does bar things") {
+ t.Errorf("expected HelpName for subcommand: %s", output)
+ }
+ if !strings.Contains(output, "custom [arguments...]") {
+ t.Errorf("expected HelpName to subcommand: %s", output)
+ }
+}
+
+func TestApp_Run_CommandHelpName(t *testing.T) {
+ app := NewApp()
+ buf := new(bytes.Buffer)
+ app.Writer = buf
+ app.Name = "command"
+ subCmd := Command{
+ Name: "bar",
+ Usage: "does bar things",
+ }
+ cmd := Command{
+ Name: "foo",
+ HelpName: "custom",
+ Description: "foo commands",
+ Subcommands: []Command{subCmd},
+ }
+ app.Commands = []Command{cmd}
+
+ err := app.Run([]string{"command", "foo", "bar", "--help"})
+ if err != nil {
+ t.Error(err)
+ }
+
+ output := buf.String()
+ if !strings.Contains(output, "command foo bar - does bar things") {
+ t.Errorf("expected full path to subcommand: %s", output)
+ }
+ if !strings.Contains(output, "command foo bar [arguments...]") {
+ t.Errorf("expected full path to subcommand: %s", output)
+ }
+}
+
+func TestApp_Run_CommandSubcommandHelpName(t *testing.T) {
+ app := NewApp()
+ buf := new(bytes.Buffer)
+ app.Writer = buf
+ app.Name = "base"
+ subCmd := Command{
+ Name: "bar",
+ HelpName: "custom",
+ Usage: "does bar things",
+ }
+ cmd := Command{
+ Name: "foo",
+ Description: "foo commands",
+ Subcommands: []Command{subCmd},
+ }
+ app.Commands = []Command{cmd}
+
+ err := app.Run([]string{"command", "foo", "--help"})
+ if err != nil {
+ t.Error(err)
+ }
+
+ output := buf.String()
+ if !strings.Contains(output, "base foo - foo commands") {
+ t.Errorf("expected full path to subcommand: %s", output)
+ }
+ if !strings.Contains(output, "base foo command [command options] [arguments...]") {
+ t.Errorf("expected full path to subcommand: %s", output)
+ }
+}
+
+func TestApp_Run_Help(t *testing.T) {
+ var helpArguments = [][]string{{"boom", "--help"}, {"boom", "-h"}, {"boom", "help"}}
+
+ for _, args := range helpArguments {
+ buf := new(bytes.Buffer)
+
+ t.Logf("==> checking with arguments %v", args)
+
+ app := NewApp()
+ app.Name = "boom"
+ app.Usage = "make an explosive entrance"
+ app.Writer = buf
+ app.Action = func(c *Context) error {
+ buf.WriteString("boom I say!")
+ return nil
+ }
+
+ err := app.Run(args)
+ if err != nil {
+ t.Error(err)
+ }
+
+ output := buf.String()
+ t.Logf("output: %q\n", buf.Bytes())
+
+ if !strings.Contains(output, "boom - make an explosive entrance") {
+ t.Errorf("want help to contain %q, did not: \n%q", "boom - make an explosive entrance", output)
+ }
+ }
+}
+
+func TestApp_Run_Version(t *testing.T) {
+ var versionArguments = [][]string{{"boom", "--version"}, {"boom", "-v"}}
+
+ for _, args := range versionArguments {
+ buf := new(bytes.Buffer)
+
+ t.Logf("==> checking with arguments %v", args)
+
+ app := NewApp()
+ app.Name = "boom"
+ app.Usage = "make an explosive entrance"
+ app.Version = "0.1.0"
+ app.Writer = buf
+ app.Action = func(c *Context) error {
+ buf.WriteString("boom I say!")
+ return nil
+ }
+
+ err := app.Run(args)
+ if err != nil {
+ t.Error(err)
+ }
+
+ output := buf.String()
+ t.Logf("output: %q\n", buf.Bytes())
+
+ if !strings.Contains(output, "0.1.0") {
+ t.Errorf("want version to contain %q, did not: \n%q", "0.1.0", output)
+ }
+ }
+}
+
+func TestApp_Run_Categories(t *testing.T) {
+ app := NewApp()
+ app.Name = "categories"
+ app.HideHelp = true
+ app.Commands = []Command{
+ {
+ Name: "command1",
+ Category: "1",
+ },
+ {
+ Name: "command2",
+ Category: "1",
+ },
+ {
+ Name: "command3",
+ Category: "2",
+ },
+ }
+ buf := new(bytes.Buffer)
+ app.Writer = buf
+
+ app.Run([]string{"categories"})
+
+ expect := CommandCategories{
+ &CommandCategory{
+ Name: "1",
+ Commands: []Command{
+ app.Commands[0],
+ app.Commands[1],
+ },
+ },
+ &CommandCategory{
+ Name: "2",
+ Commands: []Command{
+ app.Commands[2],
+ },
+ },
+ }
+ if !reflect.DeepEqual(app.Categories(), expect) {
+ t.Fatalf("expected categories %#v, to equal %#v", app.Categories(), expect)
+ }
+
+ output := buf.String()
+ t.Logf("output: %q\n", buf.Bytes())
+
+ if !strings.Contains(output, "1:\n command1") {
+ t.Errorf("want buffer to include category %q, did not: \n%q", "1:\n command1", output)
+ }
+}
+
+func TestApp_VisibleCategories(t *testing.T) {
+ app := NewApp()
+ app.Name = "visible-categories"
+ app.HideHelp = true
+ app.Commands = []Command{
+ {
+ Name: "command1",
+ Category: "1",
+ HelpName: "foo command1",
+ Hidden: true,
+ },
+ {
+ Name: "command2",
+ Category: "2",
+ HelpName: "foo command2",
+ },
+ {
+ Name: "command3",
+ Category: "3",
+ HelpName: "foo command3",
+ },
+ }
+
+ expected := []*CommandCategory{
+ {
+ Name: "2",
+ Commands: []Command{
+ app.Commands[1],
+ },
+ },
+ {
+ Name: "3",
+ Commands: []Command{
+ app.Commands[2],
+ },
+ },
+ }
+
+ app.Setup()
+ expect(t, expected, app.VisibleCategories())
+
+ app = NewApp()
+ app.Name = "visible-categories"
+ app.HideHelp = true
+ app.Commands = []Command{
+ {
+ Name: "command1",
+ Category: "1",
+ HelpName: "foo command1",
+ Hidden: true,
+ },
+ {
+ Name: "command2",
+ Category: "2",
+ HelpName: "foo command2",
+ Hidden: true,
+ },
+ {
+ Name: "command3",
+ Category: "3",
+ HelpName: "foo command3",
+ },
+ }
+
+ expected = []*CommandCategory{
+ {
+ Name: "3",
+ Commands: []Command{
+ app.Commands[2],
+ },
+ },
+ }
+
+ app.Setup()
+ expect(t, expected, app.VisibleCategories())
+
+ app = NewApp()
+ app.Name = "visible-categories"
+ app.HideHelp = true
+ app.Commands = []Command{
+ {
+ Name: "command1",
+ Category: "1",
+ HelpName: "foo command1",
+ Hidden: true,
+ },
+ {
+ Name: "command2",
+ Category: "2",
+ HelpName: "foo command2",
+ Hidden: true,
+ },
+ {
+ Name: "command3",
+ Category: "3",
+ HelpName: "foo command3",
+ Hidden: true,
+ },
+ }
+
+ expected = []*CommandCategory{}
+
+ app.Setup()
+ expect(t, expected, app.VisibleCategories())
+}
+
+func TestApp_Run_DoesNotOverwriteErrorFromBefore(t *testing.T) {
+ app := NewApp()
+ app.Action = func(c *Context) error { return nil }
+ app.Before = func(c *Context) error { return fmt.Errorf("before error") }
+ app.After = func(c *Context) error { return fmt.Errorf("after error") }
+
+ err := app.Run([]string{"foo"})
+ if err == nil {
+ t.Fatalf("expected to receive error from Run, got none")
+ }
+
+ if !strings.Contains(err.Error(), "before error") {
+ t.Errorf("expected text of error from Before method, but got none in \"%v\"", err)
+ }
+ if !strings.Contains(err.Error(), "after error") {
+ t.Errorf("expected text of error from After method, but got none in \"%v\"", err)
+ }
+}
+
+func TestApp_Run_SubcommandDoesNotOverwriteErrorFromBefore(t *testing.T) {
+ app := NewApp()
+ app.Commands = []Command{
+ {
+ Subcommands: []Command{
+ {
+ Name: "sub",
+ },
+ },
+ Name: "bar",
+ Before: func(c *Context) error { return fmt.Errorf("before error") },
+ After: func(c *Context) error { return fmt.Errorf("after error") },
+ },
+ }
+
+ err := app.Run([]string{"foo", "bar"})
+ if err == nil {
+ t.Fatalf("expected to receive error from Run, got none")
+ }
+
+ if !strings.Contains(err.Error(), "before error") {
+ t.Errorf("expected text of error from Before method, but got none in \"%v\"", err)
+ }
+ if !strings.Contains(err.Error(), "after error") {
+ t.Errorf("expected text of error from After method, but got none in \"%v\"", err)
+ }
+}
+
+func TestApp_OnUsageError_WithWrongFlagValue(t *testing.T) {
+ app := NewApp()
+ app.Flags = []Flag{
+ IntFlag{Name: "flag"},
+ }
+ app.OnUsageError = func(c *Context, err error, isSubcommand bool) error {
+ if isSubcommand {
+ t.Errorf("Expect no subcommand")
+ }
+ if !strings.HasPrefix(err.Error(), "invalid value \"wrong\"") {
+ t.Errorf("Expect an invalid value error, but got \"%v\"", err)
+ }
+ return errors.New("intercepted: " + err.Error())
+ }
+ app.Commands = []Command{
+ {
+ Name: "bar",
+ },
+ }
+
+ err := app.Run([]string{"foo", "--flag=wrong"})
+ if err == nil {
+ t.Fatalf("expected to receive error from Run, got none")
+ }
+
+ if !strings.HasPrefix(err.Error(), "intercepted: invalid value") {
+ t.Errorf("Expect an intercepted error, but got \"%v\"", err)
+ }
+}
+
+func TestApp_OnUsageError_WithWrongFlagValue_ForSubcommand(t *testing.T) {
+ app := NewApp()
+ app.Flags = []Flag{
+ IntFlag{Name: "flag"},
+ }
+ app.OnUsageError = func(c *Context, err error, isSubcommand bool) error {
+ if isSubcommand {
+ t.Errorf("Expect subcommand")
+ }
+ if !strings.HasPrefix(err.Error(), "invalid value \"wrong\"") {
+ t.Errorf("Expect an invalid value error, but got \"%v\"", err)
+ }
+ return errors.New("intercepted: " + err.Error())
+ }
+ app.Commands = []Command{
+ {
+ Name: "bar",
+ },
+ }
+
+ err := app.Run([]string{"foo", "--flag=wrong", "bar"})
+ if err == nil {
+ t.Fatalf("expected to receive error from Run, got none")
+ }
+
+ if !strings.HasPrefix(err.Error(), "intercepted: invalid value") {
+ t.Errorf("Expect an intercepted error, but got \"%v\"", err)
+ }
+}
+
+// A custom flag that conforms to the relevant interfaces, but has none of the
+// fields that the other flag types do.
+type customBoolFlag struct {
+ Nombre string
+}
+
+// Don't use the normal FlagStringer
+func (c *customBoolFlag) String() string {
+ return "***" + c.Nombre + "***"
+}
+
+func (c *customBoolFlag) GetName() string {
+ return c.Nombre
+}
+
+func (c *customBoolFlag) Apply(set *flag.FlagSet) {
+ set.String(c.Nombre, c.Nombre, "")
+}
+
+func TestCustomFlagsUnused(t *testing.T) {
+ app := NewApp()
+ app.Flags = []Flag{&customBoolFlag{"custom"}}
+
+ err := app.Run([]string{"foo"})
+ if err != nil {
+ t.Errorf("Run returned unexpected error: %v", err)
+ }
+}
+
+func TestCustomFlagsUsed(t *testing.T) {
+ app := NewApp()
+ app.Flags = []Flag{&customBoolFlag{"custom"}}
+
+ err := app.Run([]string{"foo", "--custom=bar"})
+ if err != nil {
+ t.Errorf("Run returned unexpected error: %v", err)
+ }
+}
+
+func TestCustomHelpVersionFlags(t *testing.T) {
+ app := NewApp()
+
+ // Be sure to reset the global flags
+ defer func(helpFlag Flag, versionFlag Flag) {
+ HelpFlag = helpFlag
+ VersionFlag = versionFlag
+ }(HelpFlag, VersionFlag)
+
+ HelpFlag = &customBoolFlag{"help-custom"}
+ VersionFlag = &customBoolFlag{"version-custom"}
+
+ err := app.Run([]string{"foo", "--help-custom=bar"})
+ if err != nil {
+ t.Errorf("Run returned unexpected error: %v", err)
+ }
+}
+
+func TestHandleAction_WithNonFuncAction(t *testing.T) {
+ app := NewApp()
+ app.Action = 42
+ fs, err := flagSet(app.Name, app.Flags)
+ if err != nil {
+ t.Errorf("error creating FlagSet: %s", err)
+ }
+ err = HandleAction(app.Action, NewContext(app, fs, nil))
+
+ if err == nil {
+ t.Fatalf("expected to receive error from Run, got none")
+ }
+
+ exitErr, ok := err.(*ExitError)
+
+ if !ok {
+ t.Fatalf("expected to receive a *ExitError")
+ }
+
+ if !strings.HasPrefix(exitErr.Error(), "ERROR invalid Action type.") {
+ t.Fatalf("expected an unknown Action error, but got: %v", exitErr.Error())
+ }
+
+ if exitErr.ExitCode() != 2 {
+ t.Fatalf("expected error exit code to be 2, but got: %v", exitErr.ExitCode())
+ }
+}
+
+func TestHandleAction_WithInvalidFuncSignature(t *testing.T) {
+ app := NewApp()
+ app.Action = func() string { return "" }
+ fs, err := flagSet(app.Name, app.Flags)
+ if err != nil {
+ t.Errorf("error creating FlagSet: %s", err)
+ }
+ err = HandleAction(app.Action, NewContext(app, fs, nil))
+
+ if err == nil {
+ t.Fatalf("expected to receive error from Run, got none")
+ }
+
+ exitErr, ok := err.(*ExitError)
+
+ if !ok {
+ t.Fatalf("expected to receive a *ExitError")
+ }
+
+ if !strings.HasPrefix(exitErr.Error(), "ERROR invalid Action type") {
+ t.Fatalf("expected an unknown Action error, but got: %v", exitErr.Error())
+ }
+
+ if exitErr.ExitCode() != 2 {
+ t.Fatalf("expected error exit code to be 2, but got: %v", exitErr.ExitCode())
+ }
+}
+
+func TestHandleAction_WithInvalidFuncReturnSignature(t *testing.T) {
+ app := NewApp()
+ app.Action = func(_ *Context) (int, error) { return 0, nil }
+ fs, err := flagSet(app.Name, app.Flags)
+ if err != nil {
+ t.Errorf("error creating FlagSet: %s", err)
+ }
+ err = HandleAction(app.Action, NewContext(app, fs, nil))
+
+ if err == nil {
+ t.Fatalf("expected to receive error from Run, got none")
+ }
+
+ exitErr, ok := err.(*ExitError)
+
+ if !ok {
+ t.Fatalf("expected to receive a *ExitError")
+ }
+
+ if !strings.HasPrefix(exitErr.Error(), "ERROR invalid Action type") {
+ t.Fatalf("expected an invalid Action signature error, but got: %v", exitErr.Error())
+ }
+
+ if exitErr.ExitCode() != 2 {
+ t.Fatalf("expected error exit code to be 2, but got: %v", exitErr.ExitCode())
+ }
+}
+
+func TestHandleAction_WithUnknownPanic(t *testing.T) {
+ defer func() { refute(t, recover(), nil) }()
+
+ var fn ActionFunc
+
+ app := NewApp()
+ app.Action = func(ctx *Context) error {
+ fn(ctx)
+ return nil
+ }
+ fs, err := flagSet(app.Name, app.Flags)
+ if err != nil {
+ t.Errorf("error creating FlagSet: %s", err)
+ }
+ HandleAction(app.Action, NewContext(app, fs, nil))
+}
+
+func TestShellCompletionForIncompleteFlags(t *testing.T) {
+ app := NewApp()
+ app.Flags = []Flag{
+ IntFlag{
+ Name: "test-completion",
+ },
+ }
+ app.EnableBashCompletion = true
+ app.BashComplete = func(ctx *Context) {
+ for _, command := range ctx.App.Commands {
+ if command.Hidden {
+ continue
+ }
+
+ for _, name := range command.Names() {
+ fmt.Fprintln(ctx.App.Writer, name)
+ }
+ }
+
+ for _, flag := range ctx.App.Flags {
+ for _, name := range strings.Split(flag.GetName(), ",") {
+ if name == BashCompletionFlag.GetName() {
+ continue
+ }
+
+ switch name = strings.TrimSpace(name); len(name) {
+ case 0:
+ case 1:
+ fmt.Fprintln(ctx.App.Writer, "-"+name)
+ default:
+ fmt.Fprintln(ctx.App.Writer, "--"+name)
+ }
+ }
+ }
+ }
+ app.Action = func(ctx *Context) error {
+ return fmt.Errorf("should not get here")
+ }
+ err := app.Run([]string{"", "--test-completion", "--" + BashCompletionFlag.GetName()})
+ if err != nil {
+ t.Errorf("app should not return an error: %s", err)
+ }
+}
+
+func TestHandleActionActuallyWorksWithActions(t *testing.T) {
+ var f ActionFunc
+ called := false
+ f = func(c *Context) error {
+ called = true
+ return nil
+ }
+
+ err := HandleAction(f, nil)
+
+ if err != nil {
+ t.Errorf("Should not have errored: %v", err)
+ }
+
+ if !called {
+ t.Errorf("Function was not called")
+ }
+}
diff --git a/vendor/github.com/codegangsta/cli/appveyor.yml b/vendor/github.com/codegangsta/cli/appveyor.yml
new file mode 100644
index 0000000..1e1489c
--- /dev/null
+++ b/vendor/github.com/codegangsta/cli/appveyor.yml
@@ -0,0 +1,26 @@
+version: "{build}"
+
+os: Windows Server 2016
+
+image: Visual Studio 2017
+
+clone_folder: c:\gopath\src\github.com\urfave\cli
+
+environment:
+ GOPATH: C:\gopath
+ GOVERSION: 1.8.x
+ PYTHON: C:\Python36-x64
+ PYTHON_VERSION: 3.6.x
+ PYTHON_ARCH: 64
+
+install:
+- set PATH=%GOPATH%\bin;C:\go\bin;%PATH%
+- go version
+- go env
+- go get github.com/urfave/gfmrun/...
+- go get -v -t ./...
+
+build_script:
+- python runtests vet
+- python runtests test
+- python runtests gfmrun
diff --git a/vendor/github.com/codegangsta/cli/autocomplete/bash_autocomplete b/vendor/github.com/codegangsta/cli/autocomplete/bash_autocomplete
new file mode 100755
index 0000000..37d9c14
--- /dev/null
+++ b/vendor/github.com/codegangsta/cli/autocomplete/bash_autocomplete
@@ -0,0 +1,16 @@
+#! /bin/bash
+
+: ${PROG:=$(basename ${BASH_SOURCE})}
+
+_cli_bash_autocomplete() {
+ local cur opts base
+ COMPREPLY=()
+ cur="${COMP_WORDS[COMP_CWORD]}"
+ opts=$( ${COMP_WORDS[@]:0:$COMP_CWORD} --generate-bash-completion )
+ COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+ return 0
+}
+
+complete -F _cli_bash_autocomplete $PROG
+
+unset PROG
diff --git a/vendor/github.com/codegangsta/cli/autocomplete/zsh_autocomplete b/vendor/github.com/codegangsta/cli/autocomplete/zsh_autocomplete
new file mode 100644
index 0000000..5430a18
--- /dev/null
+++ b/vendor/github.com/codegangsta/cli/autocomplete/zsh_autocomplete
@@ -0,0 +1,5 @@
+autoload -U compinit && compinit
+autoload -U bashcompinit && bashcompinit
+
+script_dir=$(dirname $0)
+source ${script_dir}/bash_autocomplete
diff --git a/vendor/github.com/codegangsta/cli/category.go b/vendor/github.com/codegangsta/cli/category.go
new file mode 100644
index 0000000..1a60550
--- /dev/null
+++ b/vendor/github.com/codegangsta/cli/category.go
@@ -0,0 +1,44 @@
+package cli
+
+// CommandCategories is a slice of *CommandCategory.
+type CommandCategories []*CommandCategory
+
+// CommandCategory is a category containing commands.
+type CommandCategory struct {
+ Name string
+ Commands Commands
+}
+
+func (c CommandCategories) Less(i, j int) bool {
+ return c[i].Name < c[j].Name
+}
+
+func (c CommandCategories) Len() int {
+ return len(c)
+}
+
+func (c CommandCategories) Swap(i, j int) {
+ c[i], c[j] = c[j], c[i]
+}
+
+// AddCommand adds a command to a category.
+func (c CommandCategories) AddCommand(category string, command Command) CommandCategories {
+ for _, commandCategory := range c {
+ if commandCategory.Name == category {
+ commandCategory.Commands = append(commandCategory.Commands, command)
+ return c
+ }
+ }
+ return append(c, &CommandCategory{Name: category, Commands: []Command{command}})
+}
+
+// VisibleCommands returns a slice of the Commands with Hidden=false
+func (c *CommandCategory) VisibleCommands() []Command {
+ ret := []Command{}
+ for _, command := range c.Commands {
+ if !command.Hidden {
+ ret = append(ret, command)
+ }
+ }
+ return ret
+}
diff --git a/vendor/github.com/codegangsta/cli/cli.go b/vendor/github.com/codegangsta/cli/cli.go
new file mode 100644
index 0000000..90c07eb
--- /dev/null
+++ b/vendor/github.com/codegangsta/cli/cli.go
@@ -0,0 +1,22 @@
+// Package cli provides a minimal framework for creating and organizing command line
+// Go applications. cli is designed to be easy to understand and write, the most simple
+// cli application can be written as follows:
+// func main() {
+// cli.NewApp().Run(os.Args)
+// }
+//
+// Of course this application does not do much, so let's make this an actual application:
+// func main() {
+// app := cli.NewApp()
+// app.Name = "greet"
+// app.Usage = "say a greeting"
+// app.Action = func(c *cli.Context) error {
+// println("Greetings")
+// return nil
+// }
+//
+// app.Run(os.Args)
+// }
+package cli
+
+//go:generate python ./generate-flag-types cli -i flag-types.json -o flag_generated.go
diff --git a/vendor/github.com/codegangsta/cli/command.go b/vendor/github.com/codegangsta/cli/command.go
new file mode 100644
index 0000000..23de294
--- /dev/null
+++ b/vendor/github.com/codegangsta/cli/command.go
@@ -0,0 +1,304 @@
+package cli
+
+import (
+ "fmt"
+ "io/ioutil"
+ "sort"
+ "strings"
+)
+
+// Command is a subcommand for a cli.App.
+type Command struct {
+ // The name of the command
+ Name string
+ // short name of the command. Typically one character (deprecated, use `Aliases`)
+ ShortName string
+ // A list of aliases for the command
+ Aliases []string
+ // A short description of the usage of this command
+ Usage string
+ // Custom text to show on USAGE section of help
+ UsageText string
+ // A longer explanation of how the command works
+ Description string
+ // A short description of the arguments of this command
+ ArgsUsage string
+ // The category the command is part of
+ Category string
+ // The function to call when checking for bash command completions
+ BashComplete BashCompleteFunc
+ // An action to execute before any sub-subcommands are run, but after the context is ready
+ // If a non-nil error is returned, no sub-subcommands are run
+ Before BeforeFunc
+ // An action to execute after any subcommands are run, but after the subcommand has finished
+ // It is run even if Action() panics
+ After AfterFunc
+ // The function to call when this command is invoked
+ Action interface{}
+ // TODO: replace `Action: interface{}` with `Action: ActionFunc` once some kind
+ // of deprecation period has passed, maybe?
+
+ // Execute this function if a usage error occurs.
+ OnUsageError OnUsageErrorFunc
+ // List of child commands
+ Subcommands Commands
+ // List of flags to parse
+ Flags []Flag
+ // Treat all flags as normal arguments if true
+ SkipFlagParsing bool
+ // Skip argument reordering which attempts to move flags before arguments,
+ // but only works if all flags appear after all arguments. This behavior was
+ // removed n version 2 since it only works under specific conditions so we
+ // backport here by exposing it as an option for compatibility.
+ SkipArgReorder bool
+ // Boolean to hide built-in help command
+ HideHelp bool
+ // Boolean to hide this command from help or completion
+ Hidden bool
+
+ // Full name of command for help, defaults to full command name, including parent commands.
+ HelpName string
+ commandNamePath []string
+
+ // CustomHelpTemplate the text template for the command help topic.
+ // cli.go uses text/template to render templates. You can
+ // render custom help text by setting this variable.
+ CustomHelpTemplate string
+}
+
+type CommandsByName []Command
+
+func (c CommandsByName) Len() int {
+ return len(c)
+}
+
+func (c CommandsByName) Less(i, j int) bool {
+ return c[i].Name < c[j].Name
+}
+
+func (c CommandsByName) Swap(i, j int) {
+ c[i], c[j] = c[j], c[i]
+}
+
+// FullName returns the full name of the command.
+// For subcommands this ensures that parent commands are part of the command path
+func (c Command) FullName() string {
+ if c.commandNamePath == nil {
+ return c.Name
+ }
+ return strings.Join(c.commandNamePath, " ")
+}
+
+// Commands is a slice of Command
+type Commands []Command
+
+// Run invokes the command given the context, parses ctx.Args() to generate command-specific flags
+func (c Command) Run(ctx *Context) (err error) {
+ if len(c.Subcommands) > 0 {
+ return c.startApp(ctx)
+ }
+
+ if !c.HideHelp && (HelpFlag != BoolFlag{}) {
+ // append help to flags
+ c.Flags = append(
+ c.Flags,
+ HelpFlag,
+ )
+ }
+
+ set, err := flagSet(c.Name, c.Flags)
+ if err != nil {
+ return err
+ }
+ set.SetOutput(ioutil.Discard)
+
+ if c.SkipFlagParsing {
+ err = set.Parse(append([]string{"--"}, ctx.Args().Tail()...))
+ } else if !c.SkipArgReorder {
+ firstFlagIndex := -1
+ terminatorIndex := -1
+ for index, arg := range ctx.Args() {
+ if arg == "--" {
+ terminatorIndex = index
+ break
+ } else if arg == "-" {
+ // Do nothing. A dash alone is not really a flag.
+ continue
+ } else if strings.HasPrefix(arg, "-") && firstFlagIndex == -1 {
+ firstFlagIndex = index
+ }
+ }
+
+ if firstFlagIndex > -1 {
+ args := ctx.Args()
+ regularArgs := make([]string, len(args[1:firstFlagIndex]))
+ copy(regularArgs, args[1:firstFlagIndex])
+
+ var flagArgs []string
+ if terminatorIndex > -1 {
+ flagArgs = args[firstFlagIndex:terminatorIndex]
+ regularArgs = append(regularArgs, args[terminatorIndex:]...)
+ } else {
+ flagArgs = args[firstFlagIndex:]
+ }
+
+ err = set.Parse(append(flagArgs, regularArgs...))
+ } else {
+ err = set.Parse(ctx.Args().Tail())
+ }
+ } else {
+ err = set.Parse(ctx.Args().Tail())
+ }
+
+ nerr := normalizeFlags(c.Flags, set)
+ if nerr != nil {
+ fmt.Fprintln(ctx.App.Writer, nerr)
+ fmt.Fprintln(ctx.App.Writer)
+ ShowCommandHelp(ctx, c.Name)
+ return nerr
+ }
+
+ context := NewContext(ctx.App, set, ctx)
+ context.Command = c
+ if checkCommandCompletions(context, c.Name) {
+ return nil
+ }
+
+ if err != nil {
+ if c.OnUsageError != nil {
+ err := c.OnUsageError(context, err, false)
+ HandleExitCoder(err)
+ return err
+ }
+ fmt.Fprintln(context.App.Writer, "Incorrect Usage:", err.Error())
+ fmt.Fprintln(context.App.Writer)
+ ShowCommandHelp(context, c.Name)
+ return err
+ }
+
+ if checkCommandHelp(context, c.Name) {
+ return nil
+ }
+
+ if c.After != nil {
+ defer func() {
+ afterErr := c.After(context)
+ if afterErr != nil {
+ HandleExitCoder(err)
+ if err != nil {
+ err = NewMultiError(err, afterErr)
+ } else {
+ err = afterErr
+ }
+ }
+ }()
+ }
+
+ if c.Before != nil {
+ err = c.Before(context)
+ if err != nil {
+ ShowCommandHelp(context, c.Name)
+ HandleExitCoder(err)
+ return err
+ }
+ }
+
+ if c.Action == nil {
+ c.Action = helpSubcommand.Action
+ }
+
+ err = HandleAction(c.Action, context)
+
+ if err != nil {
+ HandleExitCoder(err)
+ }
+ return err
+}
+
+// Names returns the names including short names and aliases.
+func (c Command) Names() []string {
+ names := []string{c.Name}
+
+ if c.ShortName != "" {
+ names = append(names, c.ShortName)
+ }
+
+ return append(names, c.Aliases...)
+}
+
+// HasName returns true if Command.Name or Command.ShortName matches given name
+func (c Command) HasName(name string) bool {
+ for _, n := range c.Names() {
+ if n == name {
+ return true
+ }
+ }
+ return false
+}
+
+func (c Command) startApp(ctx *Context) error {
+ app := NewApp()
+ app.Metadata = ctx.App.Metadata
+ // set the name and usage
+ app.Name = fmt.Sprintf("%s %s", ctx.App.Name, c.Name)
+ if c.HelpName == "" {
+ app.HelpName = c.HelpName
+ } else {
+ app.HelpName = app.Name
+ }
+
+ app.Usage = c.Usage
+ app.Description = c.Description
+ app.ArgsUsage = c.ArgsUsage
+
+ // set CommandNotFound
+ app.CommandNotFound = ctx.App.CommandNotFound
+ app.CustomAppHelpTemplate = c.CustomHelpTemplate
+
+ // set the flags and commands
+ app.Commands = c.Subcommands
+ app.Flags = c.Flags
+ app.HideHelp = c.HideHelp
+
+ app.Version = ctx.App.Version
+ app.HideVersion = ctx.App.HideVersion
+ app.Compiled = ctx.App.Compiled
+ app.Author = ctx.App.Author
+ app.Email = ctx.App.Email
+ app.Writer = ctx.App.Writer
+ app.ErrWriter = ctx.App.ErrWriter
+
+ app.categories = CommandCategories{}
+ for _, command := range c.Subcommands {
+ app.categories = app.categories.AddCommand(command.Category, command)
+ }
+
+ sort.Sort(app.categories)
+
+ // bash completion
+ app.EnableBashCompletion = ctx.App.EnableBashCompletion
+ if c.BashComplete != nil {
+ app.BashComplete = c.BashComplete
+ }
+
+ // set the actions
+ app.Before = c.Before
+ app.After = c.After
+ if c.Action != nil {
+ app.Action = c.Action
+ } else {
+ app.Action = helpSubcommand.Action
+ }
+ app.OnUsageError = c.OnUsageError
+
+ for index, cc := range app.Commands {
+ app.Commands[index].commandNamePath = []string{c.Name, cc.Name}
+ }
+
+ return app.RunAsSubcommand(ctx)
+}
+
+// VisibleFlags returns a slice of the Flags with Hidden=false
+func (c Command) VisibleFlags() []Flag {
+ return visibleFlags(c.Flags)
+}
diff --git a/vendor/github.com/codegangsta/cli/command_test.go b/vendor/github.com/codegangsta/cli/command_test.go
new file mode 100644
index 0000000..4ad994c
--- /dev/null
+++ b/vendor/github.com/codegangsta/cli/command_test.go
@@ -0,0 +1,240 @@
+package cli
+
+import (
+ "errors"
+ "flag"
+ "fmt"
+ "io/ioutil"
+ "strings"
+ "testing"
+)
+
+func TestCommandFlagParsing(t *testing.T) {
+ cases := []struct {
+ testArgs []string
+ skipFlagParsing bool
+ skipArgReorder bool
+ expectedErr error
+ }{
+ // Test normal "not ignoring flags" flow
+ {[]string{"test-cmd", "blah", "blah", "-break"}, false, false, errors.New("flag provided but not defined: -break")},
+
+ // Test no arg reorder
+ {[]string{"test-cmd", "blah", "blah", "-break"}, false, true, nil},
+
+ {[]string{"test-cmd", "blah", "blah"}, true, false, nil}, // Test SkipFlagParsing without any args that look like flags
+ {[]string{"test-cmd", "blah", "-break"}, true, false, nil}, // Test SkipFlagParsing with random flag arg
+ {[]string{"test-cmd", "blah", "-help"}, true, false, nil}, // Test SkipFlagParsing with "special" help flag arg
+ }
+
+ for _, c := range cases {
+ app := NewApp()
+ app.Writer = ioutil.Discard
+ set := flag.NewFlagSet("test", 0)
+ set.Parse(c.testArgs)
+
+ context := NewContext(app, set, nil)
+
+ command := Command{
+ Name: "test-cmd",
+ Aliases: []string{"tc"},
+ Usage: "this is for testing",
+ Description: "testing",
+ Action: func(_ *Context) error { return nil },
+ SkipFlagParsing: c.skipFlagParsing,
+ SkipArgReorder: c.skipArgReorder,
+ }
+
+ err := command.Run(context)
+
+ expect(t, err, c.expectedErr)
+ expect(t, []string(context.Args()), c.testArgs)
+ }
+}
+
+func TestCommand_Run_DoesNotOverwriteErrorFromBefore(t *testing.T) {
+ app := NewApp()
+ app.Commands = []Command{
+ {
+ Name: "bar",
+ Before: func(c *Context) error {
+ return fmt.Errorf("before error")
+ },
+ After: func(c *Context) error {
+ return fmt.Errorf("after error")
+ },
+ },
+ }
+
+ err := app.Run([]string{"foo", "bar"})
+ if err == nil {
+ t.Fatalf("expected to receive error from Run, got none")
+ }
+
+ if !strings.Contains(err.Error(), "before error") {
+ t.Errorf("expected text of error from Before method, but got none in \"%v\"", err)
+ }
+ if !strings.Contains(err.Error(), "after error") {
+ t.Errorf("expected text of error from After method, but got none in \"%v\"", err)
+ }
+}
+
+func TestCommand_Run_BeforeSavesMetadata(t *testing.T) {
+ var receivedMsgFromAction string
+ var receivedMsgFromAfter string
+
+ app := NewApp()
+ app.Commands = []Command{
+ {
+ Name: "bar",
+ Before: func(c *Context) error {
+ c.App.Metadata["msg"] = "hello world"
+ return nil
+ },
+ Action: func(c *Context) error {
+ msg, ok := c.App.Metadata["msg"]
+ if !ok {
+ return errors.New("msg not found")
+ }
+ receivedMsgFromAction = msg.(string)
+ return nil
+ },
+ After: func(c *Context) error {
+ msg, ok := c.App.Metadata["msg"]
+ if !ok {
+ return errors.New("msg not found")
+ }
+ receivedMsgFromAfter = msg.(string)
+ return nil
+ },
+ },
+ }
+
+ err := app.Run([]string{"foo", "bar"})
+ if err != nil {
+ t.Fatalf("expected no error from Run, got %s", err)
+ }
+
+ expectedMsg := "hello world"
+
+ if receivedMsgFromAction != expectedMsg {
+ t.Fatalf("expected msg from Action to match. Given: %q\nExpected: %q",
+ receivedMsgFromAction, expectedMsg)
+ }
+ if receivedMsgFromAfter != expectedMsg {
+ t.Fatalf("expected msg from After to match. Given: %q\nExpected: %q",
+ receivedMsgFromAction, expectedMsg)
+ }
+}
+
+func TestCommand_OnUsageError_hasCommandContext(t *testing.T) {
+ app := NewApp()
+ app.Commands = []Command{
+ {
+ Name: "bar",
+ Flags: []Flag{
+ IntFlag{Name: "flag"},
+ },
+ OnUsageError: func(c *Context, err error, _ bool) error {
+ return fmt.Errorf("intercepted in %s: %s", c.Command.Name, err.Error())
+ },
+ },
+ }
+
+ err := app.Run([]string{"foo", "bar", "--flag=wrong"})
+ if err == nil {
+ t.Fatalf("expected to receive error from Run, got none")
+ }
+
+ if !strings.HasPrefix(err.Error(), "intercepted in bar") {
+ t.Errorf("Expect an intercepted error, but got \"%v\"", err)
+ }
+}
+
+func TestCommand_OnUsageError_WithWrongFlagValue(t *testing.T) {
+ app := NewApp()
+ app.Commands = []Command{
+ {
+ Name: "bar",
+ Flags: []Flag{
+ IntFlag{Name: "flag"},
+ },
+ OnUsageError: func(c *Context, err error, _ bool) error {
+ if !strings.HasPrefix(err.Error(), "invalid value \"wrong\"") {
+ t.Errorf("Expect an invalid value error, but got \"%v\"", err)
+ }
+ return errors.New("intercepted: " + err.Error())
+ },
+ },
+ }
+
+ err := app.Run([]string{"foo", "bar", "--flag=wrong"})
+ if err == nil {
+ t.Fatalf("expected to receive error from Run, got none")
+ }
+
+ if !strings.HasPrefix(err.Error(), "intercepted: invalid value") {
+ t.Errorf("Expect an intercepted error, but got \"%v\"", err)
+ }
+}
+
+func TestCommand_OnUsageError_WithSubcommand(t *testing.T) {
+ app := NewApp()
+ app.Commands = []Command{
+ {
+ Name: "bar",
+ Subcommands: []Command{
+ {
+ Name: "baz",
+ },
+ },
+ Flags: []Flag{
+ IntFlag{Name: "flag"},
+ },
+ OnUsageError: func(c *Context, err error, _ bool) error {
+ if !strings.HasPrefix(err.Error(), "invalid value \"wrong\"") {
+ t.Errorf("Expect an invalid value error, but got \"%v\"", err)
+ }
+ return errors.New("intercepted: " + err.Error())
+ },
+ },
+ }
+
+ err := app.Run([]string{"foo", "bar", "--flag=wrong"})
+ if err == nil {
+ t.Fatalf("expected to receive error from Run, got none")
+ }
+
+ if !strings.HasPrefix(err.Error(), "intercepted: invalid value") {
+ t.Errorf("Expect an intercepted error, but got \"%v\"", err)
+ }
+}
+
+func TestCommand_Run_SubcommandsCanUseErrWriter(t *testing.T) {
+ app := NewApp()
+ app.ErrWriter = ioutil.Discard
+ app.Commands = []Command{
+ {
+ Name: "bar",
+ Usage: "this is for testing",
+ Subcommands: []Command{
+ {
+ Name: "baz",
+ Usage: "this is for testing",
+ Action: func(c *Context) error {
+ if c.App.ErrWriter != ioutil.Discard {
+ return fmt.Errorf("ErrWriter not passed")
+ }
+
+ return nil
+ },
+ },
+ },
+ },
+ }
+
+ err := app.Run([]string{"foo", "bar", "baz"})
+ if err != nil {
+ t.Fatal(err)
+ }
+}
diff --git a/vendor/github.com/codegangsta/cli/context.go b/vendor/github.com/codegangsta/cli/context.go
new file mode 100644
index 0000000..db94191
--- /dev/null
+++ b/vendor/github.com/codegangsta/cli/context.go
@@ -0,0 +1,278 @@
+package cli
+
+import (
+ "errors"
+ "flag"
+ "reflect"
+ "strings"
+ "syscall"
+)
+
+// Context is a type that is passed through to
+// each Handler action in a cli application. Context
+// can be used to retrieve context-specific Args and
+// parsed command-line options.
+type Context struct {
+ App *App
+ Command Command
+ shellComplete bool
+ flagSet *flag.FlagSet
+ setFlags map[string]bool
+ parentContext *Context
+}
+
+// NewContext creates a new context. For use in when invoking an App or Command action.
+func NewContext(app *App, set *flag.FlagSet, parentCtx *Context) *Context {
+ c := &Context{App: app, flagSet: set, parentContext: parentCtx}
+
+ if parentCtx != nil {
+ c.shellComplete = parentCtx.shellComplete
+ }
+
+ return c
+}
+
+// NumFlags returns the number of flags set
+func (c *Context) NumFlags() int {
+ return c.flagSet.NFlag()
+}
+
+// Set sets a context flag to a value.
+func (c *Context) Set(name, value string) error {
+ c.setFlags = nil
+ return c.flagSet.Set(name, value)
+}
+
+// GlobalSet sets a context flag to a value on the global flagset
+func (c *Context) GlobalSet(name, value string) error {
+ globalContext(c).setFlags = nil
+ return globalContext(c).flagSet.Set(name, value)
+}
+
+// IsSet determines if the flag was actually set
+func (c *Context) IsSet(name string) bool {
+ if c.setFlags == nil {
+ c.setFlags = make(map[string]bool)
+
+ c.flagSet.Visit(func(f *flag.Flag) {
+ c.setFlags[f.Name] = true
+ })
+
+ c.flagSet.VisitAll(func(f *flag.Flag) {
+ if _, ok := c.setFlags[f.Name]; ok {
+ return
+ }
+ c.setFlags[f.Name] = false
+ })
+
+ // XXX hack to support IsSet for flags with EnvVar
+ //
+ // There isn't an easy way to do this with the current implementation since
+ // whether a flag was set via an environment variable is very difficult to
+ // determine here. Instead, we intend to introduce a backwards incompatible
+ // change in version 2 to add `IsSet` to the Flag interface to push the
+ // responsibility closer to where the information required to determine
+ // whether a flag is set by non-standard means such as environment
+ // variables is avaliable.
+ //
+ // See https://github.com/urfave/cli/issues/294 for additional discussion
+ flags := c.Command.Flags
+ if c.Command.Name == "" { // cannot == Command{} since it contains slice types
+ if c.App != nil {
+ flags = c.App.Flags
+ }
+ }
+ for _, f := range flags {
+ eachName(f.GetName(), func(name string) {
+ if isSet, ok := c.setFlags[name]; isSet || !ok {
+ return
+ }
+
+ val := reflect.ValueOf(f)
+ if val.Kind() == reflect.Ptr {
+ val = val.Elem()
+ }
+
+ envVarValue := val.FieldByName("EnvVar")
+ if !envVarValue.IsValid() {
+ return
+ }
+
+ eachName(envVarValue.String(), func(envVar string) {
+ envVar = strings.TrimSpace(envVar)
+ if _, ok := syscall.Getenv(envVar); ok {
+ c.setFlags[name] = true
+ return
+ }
+ })
+ })
+ }
+ }
+
+ return c.setFlags[name]
+}
+
+// GlobalIsSet determines if the global flag was actually set
+func (c *Context) GlobalIsSet(name string) bool {
+ ctx := c
+ if ctx.parentContext != nil {
+ ctx = ctx.parentContext
+ }
+
+ for ; ctx != nil; ctx = ctx.parentContext {
+ if ctx.IsSet(name) {
+ return true
+ }
+ }
+ return false
+}
+
+// FlagNames returns a slice of flag names used in this context.
+func (c *Context) FlagNames() (names []string) {
+ for _, flag := range c.Command.Flags {
+ name := strings.Split(flag.GetName(), ",")[0]
+ if name == "help" {
+ continue
+ }
+ names = append(names, name)
+ }
+ return
+}
+
+// GlobalFlagNames returns a slice of global flag names used by the app.
+func (c *Context) GlobalFlagNames() (names []string) {
+ for _, flag := range c.App.Flags {
+ name := strings.Split(flag.GetName(), ",")[0]
+ if name == "help" || name == "version" {
+ continue
+ }
+ names = append(names, name)
+ }
+ return
+}
+
+// Parent returns the parent context, if any
+func (c *Context) Parent() *Context {
+ return c.parentContext
+}
+
+// value returns the value of the flag coressponding to `name`
+func (c *Context) value(name string) interface{} {
+ return c.flagSet.Lookup(name).Value.(flag.Getter).Get()
+}
+
+// Args contains apps console arguments
+type Args []string
+
+// Args returns the command line arguments associated with the context.
+func (c *Context) Args() Args {
+ args := Args(c.flagSet.Args())
+ return args
+}
+
+// NArg returns the number of the command line arguments.
+func (c *Context) NArg() int {
+ return len(c.Args())
+}
+
+// Get returns the nth argument, or else a blank string
+func (a Args) Get(n int) string {
+ if len(a) > n {
+ return a[n]
+ }
+ return ""
+}
+
+// First returns the first argument, or else a blank string
+func (a Args) First() string {
+ return a.Get(0)
+}
+
+// Tail returns the rest of the arguments (not the first one)
+// or else an empty string slice
+func (a Args) Tail() []string {
+ if len(a) >= 2 {
+ return []string(a)[1:]
+ }
+ return []string{}
+}
+
+// Present checks if there are any arguments present
+func (a Args) Present() bool {
+ return len(a) != 0
+}
+
+// Swap swaps arguments at the given indexes
+func (a Args) Swap(from, to int) error {
+ if from >= len(a) || to >= len(a) {
+ return errors.New("index out of range")
+ }
+ a[from], a[to] = a[to], a[from]
+ return nil
+}
+
+func globalContext(ctx *Context) *Context {
+ if ctx == nil {
+ return nil
+ }
+
+ for {
+ if ctx.parentContext == nil {
+ return ctx
+ }
+ ctx = ctx.parentContext
+ }
+}
+
+func lookupGlobalFlagSet(name string, ctx *Context) *flag.FlagSet {
+ if ctx.parentContext != nil {
+ ctx = ctx.parentContext
+ }
+ for ; ctx != nil; ctx = ctx.parentContext {
+ if f := ctx.flagSet.Lookup(name); f != nil {
+ return ctx.flagSet
+ }
+ }
+ return nil
+}
+
+func copyFlag(name string, ff *flag.Flag, set *flag.FlagSet) {
+ switch ff.Value.(type) {
+ case *StringSlice:
+ default:
+ set.Set(name, ff.Value.String())
+ }
+}
+
+func normalizeFlags(flags []Flag, set *flag.FlagSet) error {
+ visited := make(map[string]bool)
+ set.Visit(func(f *flag.Flag) {
+ visited[f.Name] = true
+ })
+ for _, f := range flags {
+ parts := strings.Split(f.GetName(), ",")
+ if len(parts) == 1 {
+ continue
+ }
+ var ff *flag.Flag
+ for _, name := range parts {
+ name = strings.Trim(name, " ")
+ if visited[name] {
+ if ff != nil {
+ return errors.New("Cannot use two forms of the same flag: " + name + " " + ff.Name)
+ }
+ ff = set.Lookup(name)
+ }
+ }
+ if ff == nil {
+ continue
+ }
+ for _, name := range parts {
+ name = strings.Trim(name, " ")
+ if !visited[name] {
+ copyFlag(name, ff, set)
+ }
+ }
+ }
+ return nil
+}
diff --git a/vendor/github.com/codegangsta/cli/context_test.go b/vendor/github.com/codegangsta/cli/context_test.go
new file mode 100644
index 0000000..7acca10
--- /dev/null
+++ b/vendor/github.com/codegangsta/cli/context_test.go
@@ -0,0 +1,403 @@
+package cli
+
+import (
+ "flag"
+ "os"
+ "testing"
+ "time"
+)
+
+func TestNewContext(t *testing.T) {
+ set := flag.NewFlagSet("test", 0)
+ set.Int("myflag", 12, "doc")
+ set.Int64("myflagInt64", int64(12), "doc")
+ set.Uint("myflagUint", uint(93), "doc")
+ set.Uint64("myflagUint64", uint64(93), "doc")
+ set.Float64("myflag64", float64(17), "doc")
+ globalSet := flag.NewFlagSet("test", 0)
+ globalSet.Int("myflag", 42, "doc")
+ globalSet.Int64("myflagInt64", int64(42), "doc")
+ globalSet.Uint("myflagUint", uint(33), "doc")
+ globalSet.Uint64("myflagUint64", uint64(33), "doc")
+ globalSet.Float64("myflag64", float64(47), "doc")
+ globalCtx := NewContext(nil, globalSet, nil)
+ command := Command{Name: "mycommand"}
+ c := NewContext(nil, set, globalCtx)
+ c.Command = command
+ expect(t, c.Int("myflag"), 12)
+ expect(t, c.Int64("myflagInt64"), int64(12))
+ expect(t, c.Uint("myflagUint"), uint(93))
+ expect(t, c.Uint64("myflagUint64"), uint64(93))
+ expect(t, c.Float64("myflag64"), float64(17))
+ expect(t, c.GlobalInt("myflag"), 42)
+ expect(t, c.GlobalInt64("myflagInt64"), int64(42))
+ expect(t, c.GlobalUint("myflagUint"), uint(33))
+ expect(t, c.GlobalUint64("myflagUint64"), uint64(33))
+ expect(t, c.GlobalFloat64("myflag64"), float64(47))
+ expect(t, c.Command.Name, "mycommand")
+}
+
+func TestContext_Int(t *testing.T) {
+ set := flag.NewFlagSet("test", 0)
+ set.Int("myflag", 12, "doc")
+ c := NewContext(nil, set, nil)
+ expect(t, c.Int("myflag"), 12)
+}
+
+func TestContext_Int64(t *testing.T) {
+ set := flag.NewFlagSet("test", 0)
+ set.Int64("myflagInt64", 12, "doc")
+ c := NewContext(nil, set, nil)
+ expect(t, c.Int64("myflagInt64"), int64(12))
+}
+
+func TestContext_Uint(t *testing.T) {
+ set := flag.NewFlagSet("test", 0)
+ set.Uint("myflagUint", uint(13), "doc")
+ c := NewContext(nil, set, nil)
+ expect(t, c.Uint("myflagUint"), uint(13))
+}
+
+func TestContext_Uint64(t *testing.T) {
+ set := flag.NewFlagSet("test", 0)
+ set.Uint64("myflagUint64", uint64(9), "doc")
+ c := NewContext(nil, set, nil)
+ expect(t, c.Uint64("myflagUint64"), uint64(9))
+}
+
+func TestContext_GlobalInt(t *testing.T) {
+ set := flag.NewFlagSet("test", 0)
+ set.Int("myflag", 12, "doc")
+ c := NewContext(nil, set, nil)
+ expect(t, c.GlobalInt("myflag"), 12)
+ expect(t, c.GlobalInt("nope"), 0)
+}
+
+func TestContext_GlobalInt64(t *testing.T) {
+ set := flag.NewFlagSet("test", 0)
+ set.Int64("myflagInt64", 12, "doc")
+ c := NewContext(nil, set, nil)
+ expect(t, c.GlobalInt64("myflagInt64"), int64(12))
+ expect(t, c.GlobalInt64("nope"), int64(0))
+}
+
+func TestContext_Float64(t *testing.T) {
+ set := flag.NewFlagSet("test", 0)
+ set.Float64("myflag", float64(17), "doc")
+ c := NewContext(nil, set, nil)
+ expect(t, c.Float64("myflag"), float64(17))
+}
+
+func TestContext_GlobalFloat64(t *testing.T) {
+ set := flag.NewFlagSet("test", 0)
+ set.Float64("myflag", float64(17), "doc")
+ c := NewContext(nil, set, nil)
+ expect(t, c.GlobalFloat64("myflag"), float64(17))
+ expect(t, c.GlobalFloat64("nope"), float64(0))
+}
+
+func TestContext_Duration(t *testing.T) {
+ set := flag.NewFlagSet("test", 0)
+ set.Duration("myflag", time.Duration(12*time.Second), "doc")
+ c := NewContext(nil, set, nil)
+ expect(t, c.Duration("myflag"), time.Duration(12*time.Second))
+}
+
+func TestContext_String(t *testing.T) {
+ set := flag.NewFlagSet("test", 0)
+ set.String("myflag", "hello world", "doc")
+ c := NewContext(nil, set, nil)
+ expect(t, c.String("myflag"), "hello world")
+}
+
+func TestContext_Bool(t *testing.T) {
+ set := flag.NewFlagSet("test", 0)
+ set.Bool("myflag", false, "doc")
+ c := NewContext(nil, set, nil)
+ expect(t, c.Bool("myflag"), false)
+}
+
+func TestContext_BoolT(t *testing.T) {
+ set := flag.NewFlagSet("test", 0)
+ set.Bool("myflag", true, "doc")
+ c := NewContext(nil, set, nil)
+ expect(t, c.BoolT("myflag"), true)
+}
+
+func TestContext_GlobalBool(t *testing.T) {
+ set := flag.NewFlagSet("test", 0)
+
+ globalSet := flag.NewFlagSet("test-global", 0)
+ globalSet.Bool("myflag", false, "doc")
+ globalCtx := NewContext(nil, globalSet, nil)
+
+ c := NewContext(nil, set, globalCtx)
+ expect(t, c.GlobalBool("myflag"), false)
+ expect(t, c.GlobalBool("nope"), false)
+}
+
+func TestContext_GlobalBoolT(t *testing.T) {
+ set := flag.NewFlagSet("test", 0)
+
+ globalSet := flag.NewFlagSet("test-global", 0)
+ globalSet.Bool("myflag", true, "doc")
+ globalCtx := NewContext(nil, globalSet, nil)
+
+ c := NewContext(nil, set, globalCtx)
+ expect(t, c.GlobalBoolT("myflag"), true)
+ expect(t, c.GlobalBoolT("nope"), false)
+}
+
+func TestContext_Args(t *testing.T) {
+ set := flag.NewFlagSet("test", 0)
+ set.Bool("myflag", false, "doc")
+ c := NewContext(nil, set, nil)
+ set.Parse([]string{"--myflag", "bat", "baz"})
+ expect(t, len(c.Args()), 2)
+ expect(t, c.Bool("myflag"), true)
+}
+
+func TestContext_NArg(t *testing.T) {
+ set := flag.NewFlagSet("test", 0)
+ set.Bool("myflag", false, "doc")
+ c := NewContext(nil, set, nil)
+ set.Parse([]string{"--myflag", "bat", "baz"})
+ expect(t, c.NArg(), 2)
+}
+
+func TestContext_IsSet(t *testing.T) {
+ set := flag.NewFlagSet("test", 0)
+ set.Bool("myflag", false, "doc")
+ set.String("otherflag", "hello world", "doc")
+ globalSet := flag.NewFlagSet("test", 0)
+ globalSet.Bool("myflagGlobal", true, "doc")
+ globalCtx := NewContext(nil, globalSet, nil)
+ c := NewContext(nil, set, globalCtx)
+ set.Parse([]string{"--myflag", "bat", "baz"})
+ globalSet.Parse([]string{"--myflagGlobal", "bat", "baz"})
+ expect(t, c.IsSet("myflag"), true)
+ expect(t, c.IsSet("otherflag"), false)
+ expect(t, c.IsSet("bogusflag"), false)
+ expect(t, c.IsSet("myflagGlobal"), false)
+}
+
+// XXX Corresponds to hack in context.IsSet for flags with EnvVar field
+// Should be moved to `flag_test` in v2
+func TestContext_IsSet_fromEnv(t *testing.T) {
+ var (
+ timeoutIsSet, tIsSet bool
+ noEnvVarIsSet, nIsSet bool
+ passwordIsSet, pIsSet bool
+ unparsableIsSet, uIsSet bool
+ )
+
+ clearenv()
+ os.Setenv("APP_TIMEOUT_SECONDS", "15.5")
+ os.Setenv("APP_PASSWORD", "")
+ a := App{
+ Flags: []Flag{
+ Float64Flag{Name: "timeout, t", EnvVar: "APP_TIMEOUT_SECONDS"},
+ StringFlag{Name: "password, p", EnvVar: "APP_PASSWORD"},
+ Float64Flag{Name: "unparsable, u", EnvVar: "APP_UNPARSABLE"},
+ Float64Flag{Name: "no-env-var, n"},
+ },
+ Action: func(ctx *Context) error {
+ timeoutIsSet = ctx.IsSet("timeout")
+ tIsSet = ctx.IsSet("t")
+ passwordIsSet = ctx.IsSet("password")
+ pIsSet = ctx.IsSet("p")
+ unparsableIsSet = ctx.IsSet("unparsable")
+ uIsSet = ctx.IsSet("u")
+ noEnvVarIsSet = ctx.IsSet("no-env-var")
+ nIsSet = ctx.IsSet("n")
+ return nil
+ },
+ }
+ a.Run([]string{"run"})
+ expect(t, timeoutIsSet, true)
+ expect(t, tIsSet, true)
+ expect(t, passwordIsSet, true)
+ expect(t, pIsSet, true)
+ expect(t, noEnvVarIsSet, false)
+ expect(t, nIsSet, false)
+
+ os.Setenv("APP_UNPARSABLE", "foobar")
+ a.Run([]string{"run"})
+ expect(t, unparsableIsSet, false)
+ expect(t, uIsSet, false)
+}
+
+func TestContext_GlobalIsSet(t *testing.T) {
+ set := flag.NewFlagSet("test", 0)
+ set.Bool("myflag", false, "doc")
+ set.String("otherflag", "hello world", "doc")
+ globalSet := flag.NewFlagSet("test", 0)
+ globalSet.Bool("myflagGlobal", true, "doc")
+ globalSet.Bool("myflagGlobalUnset", true, "doc")
+ globalCtx := NewContext(nil, globalSet, nil)
+ c := NewContext(nil, set, globalCtx)
+ set.Parse([]string{"--myflag", "bat", "baz"})
+ globalSet.Parse([]string{"--myflagGlobal", "bat", "baz"})
+ expect(t, c.GlobalIsSet("myflag"), false)
+ expect(t, c.GlobalIsSet("otherflag"), false)
+ expect(t, c.GlobalIsSet("bogusflag"), false)
+ expect(t, c.GlobalIsSet("myflagGlobal"), true)
+ expect(t, c.GlobalIsSet("myflagGlobalUnset"), false)
+ expect(t, c.GlobalIsSet("bogusGlobal"), false)
+}
+
+// XXX Corresponds to hack in context.IsSet for flags with EnvVar field
+// Should be moved to `flag_test` in v2
+func TestContext_GlobalIsSet_fromEnv(t *testing.T) {
+ var (
+ timeoutIsSet, tIsSet bool
+ noEnvVarIsSet, nIsSet bool
+ passwordIsSet, pIsSet bool
+ unparsableIsSet, uIsSet bool
+ )
+
+ clearenv()
+ os.Setenv("APP_TIMEOUT_SECONDS", "15.5")
+ os.Setenv("APP_PASSWORD", "")
+ a := App{
+ Flags: []Flag{
+ Float64Flag{Name: "timeout, t", EnvVar: "APP_TIMEOUT_SECONDS"},
+ StringFlag{Name: "password, p", EnvVar: "APP_PASSWORD"},
+ Float64Flag{Name: "no-env-var, n"},
+ Float64Flag{Name: "unparsable, u", EnvVar: "APP_UNPARSABLE"},
+ },
+ Commands: []Command{
+ {
+ Name: "hello",
+ Action: func(ctx *Context) error {
+ timeoutIsSet = ctx.GlobalIsSet("timeout")
+ tIsSet = ctx.GlobalIsSet("t")
+ passwordIsSet = ctx.GlobalIsSet("password")
+ pIsSet = ctx.GlobalIsSet("p")
+ unparsableIsSet = ctx.GlobalIsSet("unparsable")
+ uIsSet = ctx.GlobalIsSet("u")
+ noEnvVarIsSet = ctx.GlobalIsSet("no-env-var")
+ nIsSet = ctx.GlobalIsSet("n")
+ return nil
+ },
+ },
+ },
+ }
+ if err := a.Run([]string{"run", "hello"}); err != nil {
+ t.Logf("error running Run(): %+v", err)
+ }
+ expect(t, timeoutIsSet, true)
+ expect(t, tIsSet, true)
+ expect(t, passwordIsSet, true)
+ expect(t, pIsSet, true)
+ expect(t, noEnvVarIsSet, false)
+ expect(t, nIsSet, false)
+
+ os.Setenv("APP_UNPARSABLE", "foobar")
+ if err := a.Run([]string{"run"}); err != nil {
+ t.Logf("error running Run(): %+v", err)
+ }
+ expect(t, unparsableIsSet, false)
+ expect(t, uIsSet, false)
+}
+
+func TestContext_NumFlags(t *testing.T) {
+ set := flag.NewFlagSet("test", 0)
+ set.Bool("myflag", false, "doc")
+ set.String("otherflag", "hello world", "doc")
+ globalSet := flag.NewFlagSet("test", 0)
+ globalSet.Bool("myflagGlobal", true, "doc")
+ globalCtx := NewContext(nil, globalSet, nil)
+ c := NewContext(nil, set, globalCtx)
+ set.Parse([]string{"--myflag", "--otherflag=foo"})
+ globalSet.Parse([]string{"--myflagGlobal"})
+ expect(t, c.NumFlags(), 2)
+}
+
+func TestContext_GlobalFlag(t *testing.T) {
+ var globalFlag string
+ var globalFlagSet bool
+ app := NewApp()
+ app.Flags = []Flag{
+ StringFlag{Name: "global, g", Usage: "global"},
+ }
+ app.Action = func(c *Context) error {
+ globalFlag = c.GlobalString("global")
+ globalFlagSet = c.GlobalIsSet("global")
+ return nil
+ }
+ app.Run([]string{"command", "-g", "foo"})
+ expect(t, globalFlag, "foo")
+ expect(t, globalFlagSet, true)
+
+}
+
+func TestContext_GlobalFlagsInSubcommands(t *testing.T) {
+ subcommandRun := false
+ parentFlag := false
+ app := NewApp()
+
+ app.Flags = []Flag{
+ BoolFlag{Name: "debug, d", Usage: "Enable debugging"},
+ }
+
+ app.Commands = []Command{
+ {
+ Name: "foo",
+ Flags: []Flag{
+ BoolFlag{Name: "parent, p", Usage: "Parent flag"},
+ },
+ Subcommands: []Command{
+ {
+ Name: "bar",
+ Action: func(c *Context) error {
+ if c.GlobalBool("debug") {
+ subcommandRun = true
+ }
+ if c.GlobalBool("parent") {
+ parentFlag = true
+ }
+ return nil
+ },
+ },
+ },
+ },
+ }
+
+ app.Run([]string{"command", "-d", "foo", "-p", "bar"})
+
+ expect(t, subcommandRun, true)
+ expect(t, parentFlag, true)
+}
+
+func TestContext_Set(t *testing.T) {
+ set := flag.NewFlagSet("test", 0)
+ set.Int("int", 5, "an int")
+ c := NewContext(nil, set, nil)
+
+ expect(t, c.IsSet("int"), false)
+ c.Set("int", "1")
+ expect(t, c.Int("int"), 1)
+ expect(t, c.IsSet("int"), true)
+}
+
+func TestContext_GlobalSet(t *testing.T) {
+ gSet := flag.NewFlagSet("test", 0)
+ gSet.Int("int", 5, "an int")
+
+ set := flag.NewFlagSet("sub", 0)
+ set.Int("int", 3, "an int")
+
+ pc := NewContext(nil, gSet, nil)
+ c := NewContext(nil, set, pc)
+
+ c.Set("int", "1")
+ expect(t, c.Int("int"), 1)
+ expect(t, c.GlobalInt("int"), 5)
+
+ expect(t, c.GlobalIsSet("int"), false)
+ c.GlobalSet("int", "1")
+ expect(t, c.Int("int"), 1)
+ expect(t, c.GlobalInt("int"), 1)
+ expect(t, c.GlobalIsSet("int"), true)
+}
diff --git a/vendor/github.com/codegangsta/cli/errors.go b/vendor/github.com/codegangsta/cli/errors.go
new file mode 100644
index 0000000..562b295
--- /dev/null
+++ b/vendor/github.com/codegangsta/cli/errors.go
@@ -0,0 +1,115 @@
+package cli
+
+import (
+ "fmt"
+ "io"
+ "os"
+ "strings"
+)
+
+// OsExiter is the function used when the app exits. If not set defaults to os.Exit.
+var OsExiter = os.Exit
+
+// ErrWriter is used to write errors to the user. This can be anything
+// implementing the io.Writer interface and defaults to os.Stderr.
+var ErrWriter io.Writer = os.Stderr
+
+// MultiError is an error that wraps multiple errors.
+type MultiError struct {
+ Errors []error
+}
+
+// NewMultiError creates a new MultiError. Pass in one or more errors.
+func NewMultiError(err ...error) MultiError {
+ return MultiError{Errors: err}
+}
+
+// Error implements the error interface.
+func (m MultiError) Error() string {
+ errs := make([]string, len(m.Errors))
+ for i, err := range m.Errors {
+ errs[i] = err.Error()
+ }
+
+ return strings.Join(errs, "\n")
+}
+
+type ErrorFormatter interface {
+ Format(s fmt.State, verb rune)
+}
+
+// ExitCoder is the interface checked by `App` and `Command` for a custom exit
+// code
+type ExitCoder interface {
+ error
+ ExitCode() int
+}
+
+// ExitError fulfills both the builtin `error` interface and `ExitCoder`
+type ExitError struct {
+ exitCode int
+ message interface{}
+}
+
+// NewExitError makes a new *ExitError
+func NewExitError(message interface{}, exitCode int) *ExitError {
+ return &ExitError{
+ exitCode: exitCode,
+ message: message,
+ }
+}
+
+// Error returns the string message, fulfilling the interface required by
+// `error`
+func (ee *ExitError) Error() string {
+ return fmt.Sprintf("%v", ee.message)
+}
+
+// ExitCode returns the exit code, fulfilling the interface required by
+// `ExitCoder`
+func (ee *ExitError) ExitCode() int {
+ return ee.exitCode
+}
+
+// HandleExitCoder checks if the error fulfills the ExitCoder interface, and if
+// so prints the error to stderr (if it is non-empty) and calls OsExiter with the
+// given exit code. If the given error is a MultiError, then this func is
+// called on all members of the Errors slice and calls OsExiter with the last exit code.
+func HandleExitCoder(err error) {
+ if err == nil {
+ return
+ }
+
+ if exitErr, ok := err.(ExitCoder); ok {
+ if err.Error() != "" {
+ if _, ok := exitErr.(ErrorFormatter); ok {
+ fmt.Fprintf(ErrWriter, "%+v\n", err)
+ } else {
+ fmt.Fprintln(ErrWriter, err)
+ }
+ }
+ OsExiter(exitErr.ExitCode())
+ return
+ }
+
+ if multiErr, ok := err.(MultiError); ok {
+ code := handleMultiError(multiErr)
+ OsExiter(code)
+ return
+ }
+}
+
+func handleMultiError(multiErr MultiError) int {
+ code := 1
+ for _, merr := range multiErr.Errors {
+ if multiErr2, ok := merr.(MultiError); ok {
+ code = handleMultiError(multiErr2)
+ } else {
+ fmt.Fprintln(ErrWriter, merr)
+ if exitErr, ok := merr.(ExitCoder); ok {
+ code = exitErr.ExitCode()
+ }
+ }
+ }
+ return code
+}
diff --git a/vendor/github.com/codegangsta/cli/errors_test.go b/vendor/github.com/codegangsta/cli/errors_test.go
new file mode 100644
index 0000000..9b609c5
--- /dev/null
+++ b/vendor/github.com/codegangsta/cli/errors_test.go
@@ -0,0 +1,122 @@
+package cli
+
+import (
+ "bytes"
+ "errors"
+ "fmt"
+ "testing"
+)
+
+func TestHandleExitCoder_nil(t *testing.T) {
+ exitCode := 0
+ called := false
+
+ OsExiter = func(rc int) {
+ if !called {
+ exitCode = rc
+ called = true
+ }
+ }
+
+ defer func() { OsExiter = fakeOsExiter }()
+
+ HandleExitCoder(nil)
+
+ expect(t, exitCode, 0)
+ expect(t, called, false)
+}
+
+func TestHandleExitCoder_ExitCoder(t *testing.T) {
+ exitCode := 0
+ called := false
+
+ OsExiter = func(rc int) {
+ if !called {
+ exitCode = rc
+ called = true
+ }
+ }
+
+ defer func() { OsExiter = fakeOsExiter }()
+
+ HandleExitCoder(NewExitError("galactic perimeter breach", 9))
+
+ expect(t, exitCode, 9)
+ expect(t, called, true)
+}
+
+func TestHandleExitCoder_MultiErrorWithExitCoder(t *testing.T) {
+ exitCode := 0
+ called := false
+
+ OsExiter = func(rc int) {
+ if !called {
+ exitCode = rc
+ called = true
+ }
+ }
+
+ defer func() { OsExiter = fakeOsExiter }()
+
+ exitErr := NewExitError("galactic perimeter breach", 9)
+ exitErr2 := NewExitError("last ExitCoder", 11)
+ err := NewMultiError(errors.New("wowsa"), errors.New("egad"), exitErr, exitErr2)
+ HandleExitCoder(err)
+
+ expect(t, exitCode, 11)
+ expect(t, called, true)
+}
+
+// make a stub to not import pkg/errors
+type ErrorWithFormat struct {
+ error
+}
+
+func NewErrorWithFormat(m string) *ErrorWithFormat {
+ return &ErrorWithFormat{error: errors.New(m)}
+}
+
+func (f *ErrorWithFormat) Format(s fmt.State, verb rune) {
+ fmt.Fprintf(s, "This the format: %v", f.error)
+}
+
+func TestHandleExitCoder_ErrorWithFormat(t *testing.T) {
+ called := false
+
+ OsExiter = func(rc int) {
+ if !called {
+ called = true
+ }
+ }
+ ErrWriter = &bytes.Buffer{}
+
+ defer func() {
+ OsExiter = fakeOsExiter
+ ErrWriter = fakeErrWriter
+ }()
+
+ err := NewExitError(NewErrorWithFormat("I am formatted"), 1)
+ HandleExitCoder(err)
+
+ expect(t, called, true)
+ expect(t, ErrWriter.(*bytes.Buffer).String(), "This the format: I am formatted\n")
+}
+
+func TestHandleExitCoder_MultiErrorWithFormat(t *testing.T) {
+ called := false
+
+ OsExiter = func(rc int) {
+ if !called {
+ called = true
+ }
+ }
+ ErrWriter = &bytes.Buffer{}
+
+ defer func() { OsExiter = fakeOsExiter }()
+
+ err := NewMultiError(NewErrorWithFormat("err1"), NewErrorWithFormat("err2"))
+ HandleExitCoder(err)
+
+ expect(t, called, true)
+ expect(t, ErrWriter.(*bytes.Buffer).String(), "This the format: err1\nThis the format: err2\n")
+}
diff --git a/vendor/github.com/codegangsta/cli/flag-types.json b/vendor/github.com/codegangsta/cli/flag-types.json
new file mode 100644
index 0000000..1223107
--- /dev/null
+++ b/vendor/github.com/codegangsta/cli/flag-types.json
@@ -0,0 +1,93 @@
+[
+ {
+ "name": "Bool",
+ "type": "bool",
+ "value": false,
+ "context_default": "false",
+ "parser": "strconv.ParseBool(f.Value.String())"
+ },
+ {
+ "name": "BoolT",
+ "type": "bool",
+ "value": false,
+ "doctail": " that is true by default",
+ "context_default": "false",
+ "parser": "strconv.ParseBool(f.Value.String())"
+ },
+ {
+ "name": "Duration",
+ "type": "time.Duration",
+ "doctail": " (see https://golang.org/pkg/time/#ParseDuration)",
+ "context_default": "0",
+ "parser": "time.ParseDuration(f.Value.String())"
+ },
+ {
+ "name": "Float64",
+ "type": "float64",
+ "context_default": "0",
+ "parser": "strconv.ParseFloat(f.Value.String(), 64)"
+ },
+ {
+ "name": "Generic",
+ "type": "Generic",
+ "dest": false,
+ "context_default": "nil",
+ "context_type": "interface{}"
+ },
+ {
+ "name": "Int64",
+ "type": "int64",
+ "context_default": "0",
+ "parser": "strconv.ParseInt(f.Value.String(), 0, 64)"
+ },
+ {
+ "name": "Int",
+ "type": "int",
+ "context_default": "0",
+ "parser": "strconv.ParseInt(f.Value.String(), 0, 64)",
+ "parser_cast": "int(parsed)"
+ },
+ {
+ "name": "IntSlice",
+ "type": "*IntSlice",
+ "dest": false,
+ "context_default": "nil",
+ "context_type": "[]int",
+ "parser": "(f.Value.(*IntSlice)).Value(), error(nil)"
+ },
+ {
+ "name": "Int64Slice",
+ "type": "*Int64Slice",
+ "dest": false,
+ "context_default": "nil",
+ "context_type": "[]int64",
+ "parser": "(f.Value.(*Int64Slice)).Value(), error(nil)"
+ },
+ {
+ "name": "String",
+ "type": "string",
+ "context_default": "\"\"",
+ "parser": "f.Value.String(), error(nil)"
+ },
+ {
+ "name": "StringSlice",
+ "type": "*StringSlice",
+ "dest": false,
+ "context_default": "nil",
+ "context_type": "[]string",
+ "parser": "(f.Value.(*StringSlice)).Value(), error(nil)"
+ },
+ {
+ "name": "Uint64",
+ "type": "uint64",
+ "context_default": "0",
+ "parser": "strconv.ParseUint(f.Value.String(), 0, 64)"
+ },
+ {
+ "name": "Uint",
+ "type": "uint",
+ "context_default": "0",
+ "parser": "strconv.ParseUint(f.Value.String(), 0, 64)",
+ "parser_cast": "uint(parsed)"
+ }
+]
diff --git a/vendor/github.com/codegangsta/cli/flag.go b/vendor/github.com/codegangsta/cli/flag.go
new file mode 100644
index 0000000..877ff35
--- /dev/null
+++ b/vendor/github.com/codegangsta/cli/flag.go
@@ -0,0 +1,799 @@
+package cli
+
+import (
+ "flag"
+ "fmt"
+ "reflect"
+ "runtime"
+ "strconv"
+ "strings"
+ "syscall"
+ "time"
+)
+
+const defaultPlaceholder = "value"
+
+// BashCompletionFlag enables bash-completion for all commands and subcommands
+var BashCompletionFlag Flag = BoolFlag{
+ Name: "generate-bash-completion",
+ Hidden: true,
+}
+
+// VersionFlag prints the version for the application
+var VersionFlag Flag = BoolFlag{
+ Name: "version, v",
+ Usage: "print the version",
+}
+
+// HelpFlag prints the help for all commands and subcommands
+// Set to the zero value (BoolFlag{}) to disable flag -- keeps subcommand
+// unless HideHelp is set to true)
+var HelpFlag Flag = BoolFlag{
+ Name: "help, h",
+ Usage: "show help",
+}
+
+// FlagStringer converts a flag definition to a string. This is used by help
+// to display a flag.
+var FlagStringer FlagStringFunc = stringifyFlag
+
+// FlagsByName is a slice of Flag.
+type FlagsByName []Flag
+
+func (f FlagsByName) Len() int {
+ return len(f)
+}
+
+func (f FlagsByName) Less(i, j int) bool {
+ return f[i].GetName() < f[j].GetName()
+}
+
+func (f FlagsByName) Swap(i, j int) {
+ f[i], f[j] = f[j], f[i]
+}
+
+// Flag is a common interface related to parsing flags in cli.
+// For more advanced flag parsing techniques, it is recommended that
+// this interface be implemented.
+type Flag interface {
+ fmt.Stringer
+ // Apply Flag settings to the given flag set
+ Apply(*flag.FlagSet)
+ GetName() string
+}
+
+// errorableFlag is an interface that allows us to return errors during apply
+// it allows flags defined in this library to return errors in a fashion backwards compatible
+// TODO remove in v2 and modify the existing Flag interface to return errors
+type errorableFlag interface {
+ Flag
+
+ ApplyWithError(*flag.FlagSet) error
+}
+
+func flagSet(name string, flags []Flag) (*flag.FlagSet, error) {
+ set := flag.NewFlagSet(name, flag.ContinueOnError)
+
+ for _, f := range flags {
+ //TODO remove in v2 when errorableFlag is removed
+ if ef, ok := f.(errorableFlag); ok {
+ if err := ef.ApplyWithError(set); err != nil {
+ return nil, err
+ }
+ } else {
+ f.Apply(set)
+ }
+ }
+ return set, nil
+}
+
+func eachName(longName string, fn func(string)) {
+ parts := strings.Split(longName, ",")
+ for _, name := range parts {
+ name = strings.Trim(name, " ")
+ fn(name)
+ }
+}
+
+// Generic is a generic parseable type identified by a specific flag
+type Generic interface {
+ Set(value string) error
+ String() string
+}
+
+// Apply takes the flagset and calls Set on the generic flag with the value
+// provided by the user for parsing by the flag
+// Ignores parsing errors
+func (f GenericFlag) Apply(set *flag.FlagSet) {
+ f.ApplyWithError(set)
+}
+
+// ApplyWithError takes the flagset and calls Set on the generic flag with the value
+// provided by the user for parsing by the flag
+func (f GenericFlag) ApplyWithError(set *flag.FlagSet) error {
+ val := f.Value
+ if f.EnvVar != "" {
+ for _, envVar := range strings.Split(f.EnvVar, ",") {
+ envVar = strings.TrimSpace(envVar)
+ if envVal, ok := syscall.Getenv(envVar); ok {
+ if err := val.Set(envVal); err != nil {
+ return fmt.Errorf("could not parse %s as value for flag %s: %s", envVal, f.Name, err)
+ }
+ break
+ }
+ }
+ }
+
+ eachName(f.Name, func(name string) {
+ set.Var(f.Value, name, f.Usage)
+ })
+
+ return nil
+}
+
+// StringSlice is an opaque type for []string to satisfy flag.Value and flag.Getter
+type StringSlice []string
+
+// Set appends the string value to the list of values
+func (f *StringSlice) Set(value string) error {
+ *f = append(*f, value)
+ return nil
+}
+
+// String returns a readable representation of this value (for usage defaults)
+func (f *StringSlice) String() string {
+ return fmt.Sprintf("%s", *f)
+}
+
+// Value returns the slice of strings set by this flag
+func (f *StringSlice) Value() []string {
+ return *f
+}
+
+// Get returns the slice of strings set by this flag
+func (f *StringSlice) Get() interface{} {
+ return *f
+}
+
+// Apply populates the flag given the flag set and environment
+// Ignores errors
+func (f StringSliceFlag) Apply(set *flag.FlagSet) {
+ f.ApplyWithError(set)
+}
+
+// ApplyWithError populates the flag given the flag set and environment
+func (f StringSliceFlag) ApplyWithError(set *flag.FlagSet) error {
+ if f.EnvVar != "" {
+ for _, envVar := range strings.Split(f.EnvVar, ",") {
+ envVar = strings.TrimSpace(envVar)
+ if envVal, ok := syscall.Getenv(envVar); ok {
+ newVal := &StringSlice{}
+ for _, s := range strings.Split(envVal, ",") {
+ s = strings.TrimSpace(s)
+ if err := newVal.Set(s); err != nil {
+ return fmt.Errorf("could not parse %s as string value for flag %s: %s", envVal, f.Name, err)
+ }
+ }
+ f.Value = newVal
+ break
+ }
+ }
+ }
+
+ eachName(f.Name, func(name string) {
+ if f.Value == nil {
+ f.Value = &StringSlice{}
+ }
+ set.Var(f.Value, name, f.Usage)
+ })
+
+ return nil
+}
+
+// IntSlice is an opaque type for []int to satisfy flag.Value and flag.Getter
+type IntSlice []int
+
+// Set parses the value into an integer and appends it to the list of values
+func (f *IntSlice) Set(value string) error {
+ tmp, err := strconv.Atoi(value)
+ if err != nil {
+ return err
+ }
+ *f = append(*f, tmp)
+ return nil
+}
+
+// String returns a readable representation of this value (for usage defaults)
+func (f *IntSlice) String() string {
+ return fmt.Sprintf("%#v", *f)
+}
+
+// Value returns the slice of ints set by this flag
+func (f *IntSlice) Value() []int {
+ return *f
+}
+
+// Get returns the slice of ints set by this flag
+func (f *IntSlice) Get() interface{} {
+ return *f
+}
+
+// Apply populates the flag given the flag set and environment
+// Ignores errors
+func (f IntSliceFlag) Apply(set *flag.FlagSet) {
+ f.ApplyWithError(set)
+}
+
+// ApplyWithError populates the flag given the flag set and environment
+func (f IntSliceFlag) ApplyWithError(set *flag.FlagSet) error {
+ if f.EnvVar != "" {
+ for _, envVar := range strings.Split(f.EnvVar, ",") {
+ envVar = strings.TrimSpace(envVar)
+ if envVal, ok := syscall.Getenv(envVar); ok {
+ newVal := &IntSlice{}
+ for _, s := range strings.Split(envVal, ",") {
+ s = strings.TrimSpace(s)
+ if err := newVal.Set(s); err != nil {
+ return fmt.Errorf("could not parse %s as int slice value for flag %s: %s", envVal, f.Name, err)
+ }
+ }
+ f.Value = newVal
+ break
+ }
+ }
+ }
+
+ eachName(f.Name, func(name string) {
+ if f.Value == nil {
+ f.Value = &IntSlice{}
+ }
+ set.Var(f.Value, name, f.Usage)
+ })
+
+ return nil
+}
+
+// Int64Slice is an opaque type for []int to satisfy flag.Value and flag.Getter
+type Int64Slice []int64
+
+// Set parses the value into an integer and appends it to the list of values
+func (f *Int64Slice) Set(value string) error {
+ tmp, err := strconv.ParseInt(value, 10, 64)
+ if err != nil {
+ return err
+ }
+ *f = append(*f, tmp)
+ return nil
+}
+
+// String returns a readable representation of this value (for usage defaults)
+func (f *Int64Slice) String() string {
+ return fmt.Sprintf("%#v", *f)
+}
+
+// Value returns the slice of ints set by this flag
+func (f *Int64Slice) Value() []int64 {
+ return *f
+}
+
+// Get returns the slice of ints set by this flag
+func (f *Int64Slice) Get() interface{} {
+ return *f
+}
+
+// Apply populates the flag given the flag set and environment
+// Ignores errors
+func (f Int64SliceFlag) Apply(set *flag.FlagSet) {
+ f.ApplyWithError(set)
+}
+
+// ApplyWithError populates the flag given the flag set and environment
+func (f Int64SliceFlag) ApplyWithError(set *flag.FlagSet) error {
+ if f.EnvVar != "" {
+ for _, envVar := range strings.Split(f.EnvVar, ",") {
+ envVar = strings.TrimSpace(envVar)
+ if envVal, ok := syscall.Getenv(envVar); ok {
+ newVal := &Int64Slice{}
+ for _, s := range strings.Split(envVal, ",") {
+ s = strings.TrimSpace(s)
+ if err := newVal.Set(s); err != nil {
+ return fmt.Errorf("could not parse %s as int64 slice value for flag %s: %s", envVal, f.Name, err)
+ }
+ }
+ f.Value = newVal
+ break
+ }
+ }
+ }
+
+ eachName(f.Name, func(name string) {
+ if f.Value == nil {
+ f.Value = &Int64Slice{}
+ }
+ set.Var(f.Value, name, f.Usage)
+ })
+ return nil
+}
+
+// Apply populates the flag given the flag set and environment
+// Ignores errors
+func (f BoolFlag) Apply(set *flag.FlagSet) {
+ f.ApplyWithError(set)
+}
+
+// ApplyWithError populates the flag given the flag set and environment
+func (f BoolFlag) ApplyWithError(set *flag.FlagSet) error {
+ val := false
+ if f.EnvVar != "" {
+ for _, envVar := range strings.Split(f.EnvVar, ",") {
+ envVar = strings.TrimSpace(envVar)
+ if envVal, ok := syscall.Getenv(envVar); ok {
+ if envVal == "" {
+ val = false
+ break
+ }
+
+ envValBool, err := strconv.ParseBool(envVal)
+ if err != nil {
+ return fmt.Errorf("could not parse %s as bool value for flag %s: %s", envVal, f.Name, err)
+ }
+
+ val = envValBool
+ break
+ }
+ }
+ }
+
+ eachName(f.Name, func(name string) {
+ if f.Destination != nil {
+ set.BoolVar(f.Destination, name, val, f.Usage)
+ return
+ }
+ set.Bool(name, val, f.Usage)
+ })
+
+ return nil
+}
+
+// Apply populates the flag given the flag set and environment
+// Ignores errors
+func (f BoolTFlag) Apply(set *flag.FlagSet) {
+ f.ApplyWithError(set)
+}
+
+// ApplyWithError populates the flag given the flag set and environment
+func (f BoolTFlag) ApplyWithError(set *flag.FlagSet) error {
+ val := true
+ if f.EnvVar != "" {
+ for _, envVar := range strings.Split(f.EnvVar, ",") {
+ envVar = strings.TrimSpace(envVar)
+ if envVal, ok := syscall.Getenv(envVar); ok {
+ if envVal == "" {
+ val = false
+ break
+ }
+
+ envValBool, err := strconv.ParseBool(envVal)
+ if err != nil {
+ return fmt.Errorf("could not parse %s as bool value for flag %s: %s", envVal, f.Name, err)
+ }
+
+ val = envValBool
+ break
+ }
+ }
+ }
+
+ eachName(f.Name, func(name string) {
+ if f.Destination != nil {
+ set.BoolVar(f.Destination, name, val, f.Usage)
+ return
+ }
+ set.Bool(name, val, f.Usage)
+ })
+
+ return nil
+}
+
+// Apply populates the flag given the flag set and environment
+// Ignores errors
+func (f StringFlag) Apply(set *flag.FlagSet) {
+ f.ApplyWithError(set)
+}
+
+// ApplyWithError populates the flag given the flag set and environment
+func (f StringFlag) ApplyWithError(set *flag.FlagSet) error {
+ if f.EnvVar != "" {
+ for _, envVar := range strings.Split(f.EnvVar, ",") {
+ envVar = strings.TrimSpace(envVar)
+ if envVal, ok := syscall.Getenv(envVar); ok {
+ f.Value = envVal
+ break
+ }
+ }
+ }
+
+ eachName(f.Name, func(name string) {
+ if f.Destination != nil {
+ set.StringVar(f.Destination, name, f.Value, f.Usage)
+ return
+ }
+ set.String(name, f.Value, f.Usage)
+ })
+
+ return nil
+}
+
+// Apply populates the flag given the flag set and environment
+// Ignores errors
+func (f IntFlag) Apply(set *flag.FlagSet) {
+ f.ApplyWithError(set)
+}
+
+// ApplyWithError populates the flag given the flag set and environment
+func (f IntFlag) ApplyWithError(set *flag.FlagSet) error {
+ if f.EnvVar != "" {
+ for _, envVar := range strings.Split(f.EnvVar, ",") {
+ envVar = strings.TrimSpace(envVar)
+ if envVal, ok := syscall.Getenv(envVar); ok {
+ envValInt, err := strconv.ParseInt(envVal, 0, 64)
+ if err != nil {
+ return fmt.Errorf("could not parse %s as int value for flag %s: %s", envVal, f.Name, err)
+ }
+ f.Value = int(envValInt)
+ break
+ }
+ }
+ }
+
+ eachName(f.Name, func(name string) {
+ if f.Destination != nil {
+ set.IntVar(f.Destination, name, f.Value, f.Usage)
+ return
+ }
+ set.Int(name, f.Value, f.Usage)
+ })
+
+ return nil
+}
+
+// Apply populates the flag given the flag set and environment
+// Ignores errors
+func (f Int64Flag) Apply(set *flag.FlagSet) {
+ f.ApplyWithError(set)
+}
+
+// ApplyWithError populates the flag given the flag set and environment
+func (f Int64Flag) ApplyWithError(set *flag.FlagSet) error {
+ if f.EnvVar != "" {
+ for _, envVar := range strings.Split(f.EnvVar, ",") {
+ envVar = strings.TrimSpace(envVar)
+ if envVal, ok := syscall.Getenv(envVar); ok {
+ envValInt, err := strconv.ParseInt(envVal, 0, 64)
+ if err != nil {
+ return fmt.Errorf("could not parse %s as int value for flag %s: %s", envVal, f.Name, err)
+ }
+
+ f.Value = envValInt
+ break
+ }
+ }
+ }
+
+ eachName(f.Name, func(name string) {
+ if f.Destination != nil {
+ set.Int64Var(f.Destination, name, f.Value, f.Usage)
+ return
+ }
+ set.Int64(name, f.Value, f.Usage)
+ })
+
+ return nil
+}
+
+// Apply populates the flag given the flag set and environment
+// Ignores errors
+func (f UintFlag) Apply(set *flag.FlagSet) {
+ f.ApplyWithError(set)
+}
+
+// ApplyWithError populates the flag given the flag set and environment
+func (f UintFlag) ApplyWithError(set *flag.FlagSet) error {
+ if f.EnvVar != "" {
+ for _, envVar := range strings.Split(f.EnvVar, ",") {
+ envVar = strings.TrimSpace(envVar)
+ if envVal, ok := syscall.Getenv(envVar); ok {
+ envValInt, err := strconv.ParseUint(envVal, 0, 64)
+ if err != nil {
+ return fmt.Errorf("could not parse %s as uint value for flag %s: %s", envVal, f.Name, err)
+ }
+
+ f.Value = uint(envValInt)
+ break
+ }
+ }
+ }
+
+ eachName(f.Name, func(name string) {
+ if f.Destination != nil {
+ set.UintVar(f.Destination, name, f.Value, f.Usage)
+ return
+ }
+ set.Uint(name, f.Value, f.Usage)
+ })
+
+ return nil
+}
+
+// Apply populates the flag given the flag set and environment
+// Ignores errors
+func (f Uint64Flag) Apply(set *flag.FlagSet) {
+ f.ApplyWithError(set)
+}
+
+// ApplyWithError populates the flag given the flag set and environment
+func (f Uint64Flag) ApplyWithError(set *flag.FlagSet) error {
+ if f.EnvVar != "" {
+ for _, envVar := range strings.Split(f.EnvVar, ",") {
+ envVar = strings.TrimSpace(envVar)
+ if envVal, ok := syscall.Getenv(envVar); ok {
+ envValInt, err := strconv.ParseUint(envVal, 0, 64)
+ if err != nil {
+ return fmt.Errorf("could not parse %s as uint64 value for flag %s: %s", envVal, f.Name, err)
+ }
+
+ f.Value = uint64(envValInt)
+ break
+ }
+ }
+ }
+
+ eachName(f.Name, func(name string) {
+ if f.Destination != nil {
+ set.Uint64Var(f.Destination, name, f.Value, f.Usage)
+ return
+ }
+ set.Uint64(name, f.Value, f.Usage)
+ })
+
+ return nil
+}
+
+// Apply populates the flag given the flag set and environment
+// Ignores errors
+func (f DurationFlag) Apply(set *flag.FlagSet) {
+ f.ApplyWithError(set)
+}
+
+// ApplyWithError populates the flag given the flag set and environment
+func (f DurationFlag) ApplyWithError(set *flag.FlagSet) error {
+ if f.EnvVar != "" {
+ for _, envVar := range strings.Split(f.EnvVar, ",") {
+ envVar = strings.TrimSpace(envVar)
+ if envVal, ok := syscall.Getenv(envVar); ok {
+ envValDuration, err := time.ParseDuration(envVal)
+ if err != nil {
+ return fmt.Errorf("could not parse %s as duration for flag %s: %s", envVal, f.Name, err)
+ }
+
+ f.Value = envValDuration
+ break
+ }
+ }
+ }
+
+ eachName(f.Name, func(name string) {
+ if f.Destination != nil {
+ set.DurationVar(f.Destination, name, f.Value, f.Usage)
+ return
+ }
+ set.Duration(name, f.Value, f.Usage)
+ })
+
+ return nil
+}
+
+// Apply populates the flag given the flag set and environment
+// Ignores errors
+func (f Float64Flag) Apply(set *flag.FlagSet) {
+ f.ApplyWithError(set)
+}
+
+// ApplyWithError populates the flag given the flag set and environment
+func (f Float64Flag) ApplyWithError(set *flag.FlagSet) error {
+ if f.EnvVar != "" {
+ for _, envVar := range strings.Split(f.EnvVar, ",") {
+ envVar = strings.TrimSpace(envVar)
+ if envVal, ok := syscall.Getenv(envVar); ok {
+ envValFloat, err := strconv.ParseFloat(envVal, 10)
+ if err != nil {
+ return fmt.Errorf("could not parse %s as float64 value for flag %s: %s", envVal, f.Name, err)
+ }
+
+ f.Value = float64(envValFloat)
+ break
+ }
+ }
+ }
+
+ eachName(f.Name, func(name string) {
+ if f.Destination != nil {
+ set.Float64Var(f.Destination, name, f.Value, f.Usage)
+ return
+ }
+ set.Float64(name, f.Value, f.Usage)
+ })
+
+ return nil
+}
+
+func visibleFlags(fl []Flag) []Flag {
+ visible := []Flag{}
+ for _, flag := range fl {
+ field := flagValue(flag).FieldByName("Hidden")
+ if !field.IsValid() || !field.Bool() {
+ visible = append(visible, flag)
+ }
+ }
+ return visible
+}
+
+func prefixFor(name string) (prefix string) {
+ if len(name) == 1 {
+ prefix = "-"
+ } else {
+ prefix = "--"
+ }
+
+ return
+}
+
+// Returns the placeholder, if any, and the unquoted usage string.
+func unquoteUsage(usage string) (string, string) {
+ for i := 0; i < len(usage); i++ {
+ if usage[i] == '`' {
+ for j := i + 1; j < len(usage); j++ {
+ if usage[j] == '`' {
+ name := usage[i+1 : j]
+ usage = usage[:i] + name + usage[j+1:]
+ return name, usage
+ }
+ }
+ break
+ }
+ }
+ return "", usage
+}
+
+func prefixedNames(fullName, placeholder string) string {
+ var prefixed string
+ parts := strings.Split(fullName, ",")
+ for i, name := range parts {
+ name = strings.Trim(name, " ")
+ prefixed += prefixFor(name) + name
+ if placeholder != "" {
+ prefixed += " " + placeholder
+ }
+ if i < len(parts)-1 {
+ prefixed += ", "
+ }
+ }
+ return prefixed
+}
+
+func withEnvHint(envVar, str string) string {
+ envText := ""
+ if envVar != "" {
+ prefix := "$"
+ suffix := ""
+ sep := ", $"
+ if runtime.GOOS == "windows" {
+ prefix = "%"
+ suffix = "%"
+ sep = "%, %"
+ }
+ envText = fmt.Sprintf(" [%s%s%s]", prefix, strings.Join(strings.Split(envVar, ","), sep), suffix)
+ }
+ return str + envText
+}
+
+func flagValue(f Flag) reflect.Value {
+ fv := reflect.ValueOf(f)
+ for fv.Kind() == reflect.Ptr {
+ fv = reflect.Indirect(fv)
+ }
+ return fv
+}
+
+func stringifyFlag(f Flag) string {
+ fv := flagValue(f)
+
+ switch f.(type) {
+ case IntSliceFlag:
+ return withEnvHint(fv.FieldByName("EnvVar").String(),
+ stringifyIntSliceFlag(f.(IntSliceFlag)))
+ case Int64SliceFlag:
+ return withEnvHint(fv.FieldByName("EnvVar").String(),
+ stringifyInt64SliceFlag(f.(Int64SliceFlag)))
+ case StringSliceFlag:
+ return withEnvHint(fv.FieldByName("EnvVar").String(),
+ stringifyStringSliceFlag(f.(StringSliceFlag)))
+ }
+
+ placeholder, usage := unquoteUsage(fv.FieldByName("Usage").String())
+
+ needsPlaceholder := false
+ defaultValueString := ""
+
+ if val := fv.FieldByName("Value"); val.IsValid() {
+ needsPlaceholder = true
+ defaultValueString = fmt.Sprintf(" (default: %v)", val.Interface())
+
+ if val.Kind() == reflect.String && val.String() != "" {
+ defaultValueString = fmt.Sprintf(" (default: %q)", val.String())
+ }
+ }
+
+ if defaultValueString == " (default: )" {
+ defaultValueString = ""
+ }
+
+ if needsPlaceholder && placeholder == "" {
+ placeholder = defaultPlaceholder
+ }
+
+ usageWithDefault := strings.TrimSpace(fmt.Sprintf("%s%s", usage, defaultValueString))
+
+ return withEnvHint(fv.FieldByName("EnvVar").String(),
+ fmt.Sprintf("%s\t%s", prefixedNames(fv.FieldByName("Name").String(), placeholder), usageWithDefault))
+}
+
+func stringifyIntSliceFlag(f IntSliceFlag) string {
+ defaultVals := []string{}
+ if f.Value != nil && len(f.Value.Value()) > 0 {
+ for _, i := range f.Value.Value() {
+ defaultVals = append(defaultVals, fmt.Sprintf("%d", i))
+ }
+ }
+
+ return stringifySliceFlag(f.Usage, f.Name, defaultVals)
+}
+
+func stringifyInt64SliceFlag(f Int64SliceFlag) string {
+ defaultVals := []string{}
+ if f.Value != nil && len(f.Value.Value()) > 0 {
+ for _, i := range f.Value.Value() {
+ defaultVals = append(defaultVals, fmt.Sprintf("%d", i))
+ }
+ }
+
+ return stringifySliceFlag(f.Usage, f.Name, defaultVals)
+}
+
+func stringifyStringSliceFlag(f StringSliceFlag) string {
+ defaultVals := []string{}
+ if f.Value != nil && len(f.Value.Value()) > 0 {
+ for _, s := range f.Value.Value() {
+ if len(s) > 0 {
+ defaultVals = append(defaultVals, fmt.Sprintf("%q", s))
+ }
+ }
+ }
+
+ return stringifySliceFlag(f.Usage, f.Name, defaultVals)
+}
+
+func stringifySliceFlag(usage, name string, defaultVals []string) string {
+ placeholder, usage := unquoteUsage(usage)
+ if placeholder == "" {
+ placeholder = defaultPlaceholder
+ }
+
+ defaultVal := ""
+ if len(defaultVals) > 0 {
+ defaultVal = fmt.Sprintf(" (default: %s)", strings.Join(defaultVals, ", "))
+ }
+
+ usageWithDefault := strings.TrimSpace(fmt.Sprintf("%s%s", usage, defaultVal))
+ return fmt.Sprintf("%s\t%s", prefixedNames(name, placeholder), usageWithDefault)
+}
diff --git a/vendor/github.com/codegangsta/cli/flag_generated.go b/vendor/github.com/codegangsta/cli/flag_generated.go
new file mode 100644
index 0000000..491b619
--- /dev/null
+++ b/vendor/github.com/codegangsta/cli/flag_generated.go
@@ -0,0 +1,627 @@
+package cli
+
+import (
+ "flag"
+ "strconv"
+ "time"
+)
+
+// WARNING: This file is generated!
+
+// BoolFlag is a flag with type bool
+type BoolFlag struct {
+ Name string
+ Usage string
+ EnvVar string
+ Hidden bool
+ Destination *bool
+}
+
+// String returns a readable representation of this value
+// (for usage defaults)
+func (f BoolFlag) String() string {
+ return FlagStringer(f)
+}
+
+// GetName returns the name of the flag
+func (f BoolFlag) GetName() string {
+ return f.Name
+}
+
+// Bool looks up the value of a local BoolFlag, returns
+// false if not found
+func (c *Context) Bool(name string) bool {
+ return lookupBool(name, c.flagSet)
+}
+
+// GlobalBool looks up the value of a global BoolFlag, returns
+// false if not found
+func (c *Context) GlobalBool(name string) bool {
+ if fs := lookupGlobalFlagSet(name, c); fs != nil {
+ return lookupBool(name, fs)
+ }
+ return false
+}
+
+func lookupBool(name string, set *flag.FlagSet) bool {
+ f := set.Lookup(name)
+ if f != nil {
+ parsed, err := strconv.ParseBool(f.Value.String())
+ if err != nil {
+ return false
+ }
+ return parsed
+ }
+ return false
+}
+
+// BoolTFlag is a flag with type bool that is true by default
+type BoolTFlag struct {
+ Name string
+ Usage string
+ EnvVar string
+ Hidden bool
+ Destination *bool
+}
+
+// String returns a readable representation of this value
+// (for usage defaults)
+func (f BoolTFlag) String() string {
+ return FlagStringer(f)
+}
+
+// GetName returns the name of the flag
+func (f BoolTFlag) GetName() string {
+ return f.Name
+}
+
+// BoolT looks up the value of a local BoolTFlag, returns
+// false if not found
+func (c *Context) BoolT(name string) bool {
+ return lookupBoolT(name, c.flagSet)
+}
+
+// GlobalBoolT looks up the value of a global BoolTFlag, returns
+// false if not found
+func (c *Context) GlobalBoolT(name string) bool {
+ if fs := lookupGlobalFlagSet(name, c); fs != nil {
+ return lookupBoolT(name, fs)
+ }
+ return false
+}
+
+func lookupBoolT(name string, set *flag.FlagSet) bool {
+ f := set.Lookup(name)
+ if f != nil {
+ parsed, err := strconv.ParseBool(f.Value.String())
+ if err != nil {
+ return false
+ }
+ return parsed
+ }
+ return false
+}
+
+// DurationFlag is a flag with type time.Duration (see https://golang.org/pkg/time/#ParseDuration)
+type DurationFlag struct {
+ Name string
+ Usage string
+ EnvVar string
+ Hidden bool
+ Value time.Duration
+ Destination *time.Duration
+}
+
+// String returns a readable representation of this value
+// (for usage defaults)
+func (f DurationFlag) String() string {
+ return FlagStringer(f)
+}
+
+// GetName returns the name of the flag
+func (f DurationFlag) GetName() string {
+ return f.Name
+}
+
+// Duration looks up the value of a local DurationFlag, returns
+// 0 if not found
+func (c *Context) Duration(name string) time.Duration {
+ return lookupDuration(name, c.flagSet)
+}
+
+// GlobalDuration looks up the value of a global DurationFlag, returns
+// 0 if not found
+func (c *Context) GlobalDuration(name string) time.Duration {
+ if fs := lookupGlobalFlagSet(name, c); fs != nil {
+ return lookupDuration(name, fs)
+ }
+ return 0
+}
+
+func lookupDuration(name string, set *flag.FlagSet) time.Duration {
+ f := set.Lookup(name)
+ if f != nil {
+ parsed, err := time.ParseDuration(f.Value.String())
+ if err != nil {
+ return 0
+ }
+ return parsed
+ }
+ return 0
+}
+
+// Float64Flag is a flag with type float64
+type Float64Flag struct {
+ Name string
+ Usage string
+ EnvVar string
+ Hidden bool
+ Value float64
+ Destination *float64
+}
+
+// String returns a readable representation of this value
+// (for usage defaults)
+func (f Float64Flag) String() string {
+ return FlagStringer(f)
+}
+
+// GetName returns the name of the flag
+func (f Float64Flag) GetName() string {
+ return f.Name
+}
+
+// Float64 looks up the value of a local Float64Flag, returns
+// 0 if not found
+func (c *Context) Float64(name string) float64 {
+ return lookupFloat64(name, c.flagSet)
+}
+
+// GlobalFloat64 looks up the value of a global Float64Flag, returns
+// 0 if not found
+func (c *Context) GlobalFloat64(name string) float64 {
+ if fs := lookupGlobalFlagSet(name, c); fs != nil {
+ return lookupFloat64(name, fs)
+ }
+ return 0
+}
+
+func lookupFloat64(name string, set *flag.FlagSet) float64 {
+ f := set.Lookup(name)
+ if f != nil {
+ parsed, err := strconv.ParseFloat(f.Value.String(), 64)
+ if err != nil {
+ return 0
+ }
+ return parsed
+ }
+ return 0
+}
+
+// GenericFlag is a flag with type Generic
+type GenericFlag struct {
+ Name string
+ Usage string
+ EnvVar string
+ Hidden bool
+ Value Generic
+}
+
+// String returns a readable representation of this value
+// (for usage defaults)
+func (f GenericFlag) String() string {
+ return FlagStringer(f)
+}
+
+// GetName returns the name of the flag
+func (f GenericFlag) GetName() string {
+ return f.Name
+}
+
+// Generic looks up the value of a local GenericFlag, returns
+// nil if not found
+func (c *Context) Generic(name string) interface{} {
+ return lookupGeneric(name, c.flagSet)
+}
+
+// GlobalGeneric looks up the value of a global GenericFlag, returns
+// nil if not found
+func (c *Context) GlobalGeneric(name string) interface{} {
+ if fs := lookupGlobalFlagSet(name, c); fs != nil {
+ return lookupGeneric(name, fs)
+ }
+ return nil
+}
+
+func lookupGeneric(name string, set *flag.FlagSet) interface{} {
+ f := set.Lookup(name)
+ if f != nil {
+ parsed, err := f.Value, error(nil)
+ if err != nil {
+ return nil
+ }
+ return parsed
+ }
+ return nil
+}
+
+// Int64Flag is a flag with type int64
+type Int64Flag struct {
+ Name string
+ Usage string
+ EnvVar string
+ Hidden bool
+ Value int64
+ Destination *int64
+}
+
+// String returns a readable representation of this value
+// (for usage defaults)
+func (f Int64Flag) String() string {
+ return FlagStringer(f)
+}
+
+// GetName returns the name of the flag
+func (f Int64Flag) GetName() string {
+ return f.Name
+}
+
+// Int64 looks up the value of a local Int64Flag, returns
+// 0 if not found
+func (c *Context) Int64(name string) int64 {
+ return lookupInt64(name, c.flagSet)
+}
+
+// GlobalInt64 looks up the value of a global Int64Flag, returns
+// 0 if not found
+func (c *Context) GlobalInt64(name string) int64 {
+ if fs := lookupGlobalFlagSet(name, c); fs != nil {
+ return lookupInt64(name, fs)
+ }
+ return 0
+}
+
+func lookupInt64(name string, set *flag.FlagSet) int64 {
+ f := set.Lookup(name)
+ if f != nil {
+ parsed, err := strconv.ParseInt(f.Value.String(), 0, 64)
+ if err != nil {
+ return 0
+ }
+ return parsed
+ }
+ return 0
+}
+
+// IntFlag is a flag with type int
+type IntFlag struct {
+ Name string
+ Usage string
+ EnvVar string
+ Hidden bool
+ Value int
+ Destination *int
+}
+
+// String returns a readable representation of this value
+// (for usage defaults)
+func (f IntFlag) String() string {
+ return FlagStringer(f)
+}
+
+// GetName returns the name of the flag
+func (f IntFlag) GetName() string {
+ return f.Name
+}
+
+// Int looks up the value of a local IntFlag, returns
+// 0 if not found
+func (c *Context) Int(name string) int {
+ return lookupInt(name, c.flagSet)
+}
+
+// GlobalInt looks up the value of a global IntFlag, returns
+// 0 if not found
+func (c *Context) GlobalInt(name string) int {
+ if fs := lookupGlobalFlagSet(name, c); fs != nil {
+ return lookupInt(name, fs)
+ }
+ return 0
+}
+
+func lookupInt(name string, set *flag.FlagSet) int {
+ f := set.Lookup(name)
+ if f != nil {
+ parsed, err := strconv.ParseInt(f.Value.String(), 0, 64)
+ if err != nil {
+ return 0
+ }
+ return int(parsed)
+ }
+ return 0
+}
+
+// IntSliceFlag is a flag with type *IntSlice
+type IntSliceFlag struct {
+ Name string
+ Usage string
+ EnvVar string
+ Hidden bool
+ Value *IntSlice
+}
+
+// String returns a readable representation of this value
+// (for usage defaults)
+func (f IntSliceFlag) String() string {
+ return FlagStringer(f)
+}
+
+// GetName returns the name of the flag
+func (f IntSliceFlag) GetName() string {
+ return f.Name
+}
+
+// IntSlice looks up the value of a local IntSliceFlag, returns
+// nil if not found
+func (c *Context) IntSlice(name string) []int {
+ return lookupIntSlice(name, c.flagSet)
+}
+
+// GlobalIntSlice looks up the value of a global IntSliceFlag, returns
+// nil if not found
+func (c *Context) GlobalIntSlice(name string) []int {
+ if fs := lookupGlobalFlagSet(name, c); fs != nil {
+ return lookupIntSlice(name, fs)
+ }
+ return nil
+}
+
+func lookupIntSlice(name string, set *flag.FlagSet) []int {
+ f := set.Lookup(name)
+ if f != nil {
+ parsed, err := (f.Value.(*IntSlice)).Value(), error(nil)
+ if err != nil {
+ return nil
+ }
+ return parsed
+ }
+ return nil
+}
+
+// Int64SliceFlag is a flag with type *Int64Slice
+type Int64SliceFlag struct {
+ Name string
+ Usage string
+ EnvVar string
+ Hidden bool
+ Value *Int64Slice
+}
+
+// String returns a readable representation of this value
+// (for usage defaults)
+func (f Int64SliceFlag) String() string {
+ return FlagStringer(f)
+}
+
+// GetName returns the name of the flag
+func (f Int64SliceFlag) GetName() string {
+ return f.Name
+}
+
+// Int64Slice looks up the value of a local Int64SliceFlag, returns
+// nil if not found
+func (c *Context) Int64Slice(name string) []int64 {
+ return lookupInt64Slice(name, c.flagSet)
+}
+
+// GlobalInt64Slice looks up the value of a global Int64SliceFlag, returns
+// nil if not found
+func (c *Context) GlobalInt64Slice(name string) []int64 {
+ if fs := lookupGlobalFlagSet(name, c); fs != nil {
+ return lookupInt64Slice(name, fs)
+ }
+ return nil
+}
+
+func lookupInt64Slice(name string, set *flag.FlagSet) []int64 {
+ f := set.Lookup(name)
+ if f != nil {
+ parsed, err := (f.Value.(*Int64Slice)).Value(), error(nil)
+ if err != nil {
+ return nil
+ }
+ return parsed
+ }
+ return nil
+}
+
+// StringFlag is a flag with type string
+type StringFlag struct {
+ Name string
+ Usage string
+ EnvVar string
+ Hidden bool
+ Value string
+ Destination *string
+}
+
+// String returns a readable representation of this value
+// (for usage defaults)
+func (f StringFlag) String() string {
+ return FlagStringer(f)
+}
+
+// GetName returns the name of the flag
+func (f StringFlag) GetName() string {
+ return f.Name
+}
+
+// String looks up the value of a local StringFlag, returns
+// "" if not found
+func (c *Context) String(name string) string {
+ return lookupString(name, c.flagSet)
+}
+
+// GlobalString looks up the value of a global StringFlag, returns
+// "" if not found
+func (c *Context) GlobalString(name string) string {
+ if fs := lookupGlobalFlagSet(name, c); fs != nil {
+ return lookupString(name, fs)
+ }
+ return ""
+}
+
+func lookupString(name string, set *flag.FlagSet) string {
+ f := set.Lookup(name)
+ if f != nil {
+ parsed, err := f.Value.String(), error(nil)
+ if err != nil {
+ return ""
+ }
+ return parsed
+ }
+ return ""
+}
+
+// StringSliceFlag is a flag with type *StringSlice
+type StringSliceFlag struct {
+ Name string
+ Usage string
+ EnvVar string
+ Hidden bool
+ Value *StringSlice
+}
+
+// String returns a readable representation of this value
+// (for usage defaults)
+func (f StringSliceFlag) String() string {
+ return FlagStringer(f)
+}
+
+// GetName returns the name of the flag
+func (f StringSliceFlag) GetName() string {
+ return f.Name
+}
+
+// StringSlice looks up the value of a local StringSliceFlag, returns
+// nil if not found
+func (c *Context) StringSlice(name string) []string {
+ return lookupStringSlice(name, c.flagSet)
+}
+
+// GlobalStringSlice looks up the value of a global StringSliceFlag, returns
+// nil if not found
+func (c *Context) GlobalStringSlice(name string) []string {
+ if fs := lookupGlobalFlagSet(name, c); fs != nil {
+ return lookupStringSlice(name, fs)
+ }
+ return nil
+}
+
+func lookupStringSlice(name string, set *flag.FlagSet) []string {
+ f := set.Lookup(name)
+ if f != nil {
+ parsed, err := (f.Value.(*StringSlice)).Value(), error(nil)
+ if err != nil {
+ return nil
+ }
+ return parsed
+ }
+ return nil
+}
+
+// Uint64Flag is a flag with type uint64
+type Uint64Flag struct {
+ Name string
+ Usage string
+ EnvVar string
+ Hidden bool
+ Value uint64
+ Destination *uint64
+}
+
+// String returns a readable representation of this value
+// (for usage defaults)
+func (f Uint64Flag) String() string {
+ return FlagStringer(f)
+}
+
+// GetName returns the name of the flag
+func (f Uint64Flag) GetName() string {
+ return f.Name
+}
+
+// Uint64 looks up the value of a local Uint64Flag, returns
+// 0 if not found
+func (c *Context) Uint64(name string) uint64 {
+ return lookupUint64(name, c.flagSet)
+}
+
+// GlobalUint64 looks up the value of a global Uint64Flag, returns
+// 0 if not found
+func (c *Context) GlobalUint64(name string) uint64 {
+ if fs := lookupGlobalFlagSet(name, c); fs != nil {
+ return lookupUint64(name, fs)
+ }
+ return 0
+}
+
+func lookupUint64(name string, set *flag.FlagSet) uint64 {
+ f := set.Lookup(name)
+ if f != nil {
+ parsed, err := strconv.ParseUint(f.Value.String(), 0, 64)
+ if err != nil {
+ return 0
+ }
+ return parsed
+ }
+ return 0
+}
+
+// UintFlag is a flag with type uint
+type UintFlag struct {
+ Name string
+ Usage string
+ EnvVar string
+ Hidden bool
+ Value uint
+ Destination *uint
+}
+
+// String returns a readable representation of this value
+// (for usage defaults)
+func (f UintFlag) String() string {
+ return FlagStringer(f)
+}
+
+// GetName returns the name of the flag
+func (f UintFlag) GetName() string {
+ return f.Name
+}
+
+// Uint looks up the value of a local UintFlag, returns
+// 0 if not found
+func (c *Context) Uint(name string) uint {
+ return lookupUint(name, c.flagSet)
+}
+
+// GlobalUint looks up the value of a global UintFlag, returns
+// 0 if not found
+func (c *Context) GlobalUint(name string) uint {
+ if fs := lookupGlobalFlagSet(name, c); fs != nil {
+ return lookupUint(name, fs)
+ }
+ return 0
+}
+
+func lookupUint(name string, set *flag.FlagSet) uint {
+ f := set.Lookup(name)
+ if f != nil {
+ parsed, err := strconv.ParseUint(f.Value.String(), 0, 64)
+ if err != nil {
+ return 0
+ }
+ return uint(parsed)
+ }
+ return 0
+}
diff --git a/vendor/github.com/codegangsta/cli/flag_test.go b/vendor/github.com/codegangsta/cli/flag_test.go
new file mode 100644
index 0000000..1ccb639
--- /dev/null
+++ b/vendor/github.com/codegangsta/cli/flag_test.go
@@ -0,0 +1,1215 @@
+package cli
+
+import (
+ "fmt"
+ "os"
+ "reflect"
+ "regexp"
+ "runtime"
+ "strings"
+ "testing"
+ "time"
+)
+
+var boolFlagTests = []struct {
+ name string
+ expected string
+}{
+ {"help", "--help\t"},
+ {"h", "-h\t"},
+}
+
+func TestBoolFlagHelpOutput(t *testing.T) {
+ for _, test := range boolFlagTests {
+ flag := BoolFlag{Name: test.name}
+ output := flag.String()
+
+ if output != test.expected {
+ t.Errorf("%q does not match %q", output, test.expected)
+ }
+ }
+}
+
+func TestFlagsFromEnv(t *testing.T) {
+ var flagTests = []struct {
+ input string
+ output interface{}
+ flag Flag
+ errRegexp string
+ }{
+ {"", false, BoolFlag{Name: "debug", EnvVar: "DEBUG"}, ""},
+ {"1", true, BoolFlag{Name: "debug", EnvVar: "DEBUG"}, ""},
+ {"false", false, BoolFlag{Name: "debug", EnvVar: "DEBUG"}, ""},
+ {"foobar", true, BoolFlag{Name: "debug", EnvVar: "DEBUG"}, fmt.Sprintf(`could not parse foobar as bool value for flag debug: .*`)},
+
+ {"", false, BoolTFlag{Name: "debug", EnvVar: "DEBUG"}, ""},
+ {"1", true, BoolTFlag{Name: "debug", EnvVar: "DEBUG"}, ""},
+ {"false", false, BoolTFlag{Name: "debug", EnvVar: "DEBUG"}, ""},
+ {"foobar", true, BoolTFlag{Name: "debug", EnvVar: "DEBUG"}, fmt.Sprintf(`could not parse foobar as bool value for flag debug: .*`)},
+
+ {"1s", 1 * time.Second, DurationFlag{Name: "time", EnvVar: "TIME"}, ""},
+ {"foobar", false, DurationFlag{Name: "time", EnvVar: "TIME"}, fmt.Sprintf(`could not parse foobar as duration for flag time: .*`)},
+
+ {"1.2", 1.2, Float64Flag{Name: "seconds", EnvVar: "SECONDS"}, ""},
+ {"1", 1.0, Float64Flag{Name: "seconds", EnvVar: "SECONDS"}, ""},
+ {"foobar", 0, Float64Flag{Name: "seconds", EnvVar: "SECONDS"}, fmt.Sprintf(`could not parse foobar as float64 value for flag seconds: .*`)},
+
+ {"1", int64(1), Int64Flag{Name: "seconds", EnvVar: "SECONDS"}, ""},
+ {"1.2", 0, Int64Flag{Name: "seconds", EnvVar: "SECONDS"}, fmt.Sprintf(`could not parse 1.2 as int value for flag seconds: .*`)},
+ {"foobar", 0, Int64Flag{Name: "seconds", EnvVar: "SECONDS"}, fmt.Sprintf(`could not parse foobar as int value for flag seconds: .*`)},
+
+ {"1", 1, IntFlag{Name: "seconds", EnvVar: "SECONDS"}, ""},
+ {"1.2", 0, IntFlag{Name: "seconds", EnvVar: "SECONDS"}, fmt.Sprintf(`could not parse 1.2 as int value for flag seconds: .*`)},
+ {"foobar", 0, IntFlag{Name: "seconds", EnvVar: "SECONDS"}, fmt.Sprintf(`could not parse foobar as int value for flag seconds: .*`)},
+
+ {"1,2", IntSlice{1, 2}, IntSliceFlag{Name: "seconds", EnvVar: "SECONDS"}, ""},
+ {"1.2,2", IntSlice{}, IntSliceFlag{Name: "seconds", EnvVar: "SECONDS"}, fmt.Sprintf(`could not parse 1.2,2 as int slice value for flag seconds: .*`)},
+ {"foobar", IntSlice{}, IntSliceFlag{Name: "seconds", EnvVar: "SECONDS"}, fmt.Sprintf(`could not parse foobar as int slice value for flag seconds: .*`)},
+
+ {"1,2", Int64Slice{1, 2}, Int64SliceFlag{Name: "seconds", EnvVar: "SECONDS"}, ""},
+ {"1.2,2", Int64Slice{}, Int64SliceFlag{Name: "seconds", EnvVar: "SECONDS"}, fmt.Sprintf(`could not parse 1.2,2 as int64 slice value for flag seconds: .*`)},
+ {"foobar", Int64Slice{}, Int64SliceFlag{Name: "seconds", EnvVar: "SECONDS"}, fmt.Sprintf(`could not parse foobar as int64 slice value for flag seconds: .*`)},
+
+ {"foo", "foo", StringFlag{Name: "name", EnvVar: "NAME"}, ""},
+
+ {"foo,bar", StringSlice{"foo", "bar"}, StringSliceFlag{Name: "names", EnvVar: "NAMES"}, ""},
+
+ {"1", uint(1), UintFlag{Name: "seconds", EnvVar: "SECONDS"}, ""},
+ {"1.2", 0, UintFlag{Name: "seconds", EnvVar: "SECONDS"}, fmt.Sprintf(`could not parse 1.2 as uint value for flag seconds: .*`)},
+ {"foobar", 0, UintFlag{Name: "seconds", EnvVar: "SECONDS"}, fmt.Sprintf(`could not parse foobar as uint value for flag seconds: .*`)},
+
+ {"1", uint64(1), Uint64Flag{Name: "seconds", EnvVar: "SECONDS"}, ""},
+ {"1.2", 0, Uint64Flag{Name: "seconds", EnvVar: "SECONDS"}, fmt.Sprintf(`could not parse 1.2 as uint64 value for flag seconds: .*`)},
+ {"foobar", 0, Uint64Flag{Name: "seconds", EnvVar: "SECONDS"}, fmt.Sprintf(`could not parse foobar as uint64 value for flag seconds: .*`)},
+
+ {"foo,bar", &Parser{"foo", "bar"}, GenericFlag{Name: "names", Value: &Parser{}, EnvVar: "NAMES"}, ""},
+ }
+
+ for _, test := range flagTests {
+ os.Clearenv()
+ os.Setenv(reflect.ValueOf(test.flag).FieldByName("EnvVar").String(), test.input)
+ a := App{
+ Flags: []Flag{test.flag},
+ Action: func(ctx *Context) error {
+ if !reflect.DeepEqual(ctx.value(test.flag.GetName()), test.output) {
+ t.Errorf("expected %+v to be parsed as %+v, instead was %+v", test.input, test.output, ctx.value(test.flag.GetName()))
+ }
+ return nil
+ },
+ }
+
+ err := a.Run([]string{"run"})
+
+ if test.errRegexp != "" {
+ if err == nil {
+ t.Errorf("expected error to match %s, got none", test.errRegexp)
+ } else {
+ if matched, _ := regexp.MatchString(test.errRegexp, err.Error()); !matched {
+ t.Errorf("expected error to match %s, got error %s", test.errRegexp, err)
+ }
+ }
+ } else {
+ if err != nil && test.errRegexp == "" {
+ t.Errorf("expected no error got %s", err)
+ }
+ }
+ }
+}
+
+var stringFlagTests = []struct {
+ name string
+ usage string
+ value string
+ expected string
+}{
+ {"foo", "", "", "--foo value\t"},
+ {"f", "", "", "-f value\t"},
+ {"f", "The total `foo` desired", "all", "-f foo\tThe total foo desired (default: \"all\")"},
+ {"test", "", "Something", "--test value\t(default: \"Something\")"},
+ {"config,c", "Load configuration from `FILE`", "", "--config FILE, -c FILE\tLoad configuration from FILE"},
+ {"config,c", "Load configuration from `CONFIG`", "config.json", "--config CONFIG, -c CONFIG\tLoad configuration from CONFIG (default: \"config.json\")"},
+}
+
+func TestStringFlagHelpOutput(t *testing.T) {
+ for _, test := range stringFlagTests {
+ flag := StringFlag{Name: test.name, Usage: test.usage, Value: test.value}
+ output := flag.String()
+
+ if output != test.expected {
+ t.Errorf("%q does not match %q", output, test.expected)
+ }
+ }
+}
+
+func TestStringFlagWithEnvVarHelpOutput(t *testing.T) {
+ os.Clearenv()
+ os.Setenv("APP_FOO", "derp")
+ for _, test := range stringFlagTests {
+ flag := StringFlag{Name: test.name, Value: test.value, EnvVar: "APP_FOO"}
+ output := flag.String()
+
+ expectedSuffix := " [$APP_FOO]"
+ if runtime.GOOS == "windows" {
+ expectedSuffix = " [%APP_FOO%]"
+ }
+ if !strings.HasSuffix(output, expectedSuffix) {
+ t.Errorf("%s does not end with"+expectedSuffix, output)
+ }
+ }
+}
+
+var stringSliceFlagTests = []struct {
+ name string
+ value *StringSlice
+ expected string
+}{
+ {"foo", func() *StringSlice {
+ s := &StringSlice{}
+ s.Set("")
+ return s
+ }(), "--foo value\t"},
+ {"f", func() *StringSlice {
+ s := &StringSlice{}
+ s.Set("")
+ return s
+ }(), "-f value\t"},
+ {"f", func() *StringSlice {
+ s := &StringSlice{}
+ s.Set("Lipstick")
+ return s
+ }(), "-f value\t(default: \"Lipstick\")"},
+ {"test", func() *StringSlice {
+ s := &StringSlice{}
+ s.Set("Something")
+ return s
+ }(), "--test value\t(default: \"Something\")"},
+}
+
+func TestStringSliceFlagHelpOutput(t *testing.T) {
+ for _, test := range stringSliceFlagTests {
+ flag := StringSliceFlag{Name: test.name, Value: test.value}
+ output := flag.String()
+
+ if output != test.expected {
+ t.Errorf("%q does not match %q", output, test.expected)
+ }
+ }
+}
+
+func TestStringSliceFlagWithEnvVarHelpOutput(t *testing.T) {
+ os.Clearenv()
+ os.Setenv("APP_QWWX", "11,4")
+ for _, test := range stringSliceFlagTests {
+ flag := StringSliceFlag{Name: test.name, Value: test.value, EnvVar: "APP_QWWX"}
+ output := flag.String()
+
+ expectedSuffix := " [$APP_QWWX]"
+ if runtime.GOOS == "windows" {
+ expectedSuffix = " [%APP_QWWX%]"
+ }
+ if !strings.HasSuffix(output, expectedSuffix) {
+ t.Errorf("%q does not end with"+expectedSuffix, output)
+ }
+ }
+}
+
+var intFlagTests = []struct {
+ name string
+ expected string
+}{
+ {"hats", "--hats value\t(default: 9)"},
+ {"H", "-H value\t(default: 9)"},
+}
+
+func TestIntFlagHelpOutput(t *testing.T) {
+ for _, test := range intFlagTests {
+ flag := IntFlag{Name: test.name, Value: 9}
+ output := flag.String()
+
+ if output != test.expected {
+ t.Errorf("%s does not match %s", output, test.expected)
+ }
+ }
+}
+
+func TestIntFlagWithEnvVarHelpOutput(t *testing.T) {
+ os.Clearenv()
+ os.Setenv("APP_BAR", "2")
+ for _, test := range intFlagTests {
+ flag := IntFlag{Name: test.name, EnvVar: "APP_BAR"}
+ output := flag.String()
+
+ expectedSuffix := " [$APP_BAR]"
+ if runtime.GOOS == "windows" {
+ expectedSuffix = " [%APP_BAR%]"
+ }
+ if !strings.HasSuffix(output, expectedSuffix) {
+ t.Errorf("%s does not end with"+expectedSuffix, output)
+ }
+ }
+}
+
+var int64FlagTests = []struct {
+ name string
+ expected string
+}{
+ {"hats", "--hats value\t(default: 8589934592)"},
+ {"H", "-H value\t(default: 8589934592)"},
+}
+
+func TestInt64FlagHelpOutput(t *testing.T) {
+ for _, test := range int64FlagTests {
+ flag := Int64Flag{Name: test.name, Value: 8589934592}
+ output := flag.String()
+
+ if output != test.expected {
+ t.Errorf("%s does not match %s", output, test.expected)
+ }
+ }
+}
+
+func TestInt64FlagWithEnvVarHelpOutput(t *testing.T) {
+ os.Clearenv()
+ os.Setenv("APP_BAR", "2")
+ for _, test := range int64FlagTests {
+ flag := IntFlag{Name: test.name, EnvVar: "APP_BAR"}
+ output := flag.String()
+
+ expectedSuffix := " [$APP_BAR]"
+ if runtime.GOOS == "windows" {
+ expectedSuffix = " [%APP_BAR%]"
+ }
+ if !strings.HasSuffix(output, expectedSuffix) {
+ t.Errorf("%s does not end with"+expectedSuffix, output)
+ }
+ }
+}
+
+var uintFlagTests = []struct {
+ name string
+ expected string
+}{
+ {"nerfs", "--nerfs value\t(default: 41)"},
+ {"N", "-N value\t(default: 41)"},
+}
+
+func TestUintFlagHelpOutput(t *testing.T) {
+ for _, test := range uintFlagTests {
+ flag := UintFlag{Name: test.name, Value: 41}
+ output := flag.String()
+
+ if output != test.expected {
+ t.Errorf("%s does not match %s", output, test.expected)
+ }
+ }
+}
+
+func TestUintFlagWithEnvVarHelpOutput(t *testing.T) {
+ os.Clearenv()
+ os.Setenv("APP_BAR", "2")
+ for _, test := range uintFlagTests {
+ flag := UintFlag{Name: test.name, EnvVar: "APP_BAR"}
+ output := flag.String()
+
+ expectedSuffix := " [$APP_BAR]"
+ if runtime.GOOS == "windows" {
+ expectedSuffix = " [%APP_BAR%]"
+ }
+ if !strings.HasSuffix(output, expectedSuffix) {
+ t.Errorf("%s does not end with"+expectedSuffix, output)
+ }
+ }
+}
+
+var uint64FlagTests = []struct {
+ name string
+ expected string
+}{
+ {"gerfs", "--gerfs value\t(default: 8589934582)"},
+ {"G", "-G value\t(default: 8589934582)"},
+}
+
+func TestUint64FlagHelpOutput(t *testing.T) {
+ for _, test := range uint64FlagTests {
+ flag := Uint64Flag{Name: test.name, Value: 8589934582}
+ output := flag.String()
+
+ if output != test.expected {
+ t.Errorf("%s does not match %s", output, test.expected)
+ }
+ }
+}
+
+func TestUint64FlagWithEnvVarHelpOutput(t *testing.T) {
+ os.Clearenv()
+ os.Setenv("APP_BAR", "2")
+ for _, test := range uint64FlagTests {
+ flag := UintFlag{Name: test.name, EnvVar: "APP_BAR"}
+ output := flag.String()
+
+ expectedSuffix := " [$APP_BAR]"
+ if runtime.GOOS == "windows" {
+ expectedSuffix = " [%APP_BAR%]"
+ }
+ if !strings.HasSuffix(output, expectedSuffix) {
+ t.Errorf("%s does not end with"+expectedSuffix, output)
+ }
+ }
+}
+
+var durationFlagTests = []struct {
+ name string
+ expected string
+}{
+ {"hooting", "--hooting value\t(default: 1s)"},
+ {"H", "-H value\t(default: 1s)"},
+}
+
+func TestDurationFlagHelpOutput(t *testing.T) {
+ for _, test := range durationFlagTests {
+ flag := DurationFlag{Name: test.name, Value: 1 * time.Second}
+ output := flag.String()
+
+ if output != test.expected {
+ t.Errorf("%q does not match %q", output, test.expected)
+ }
+ }
+}
+
+func TestDurationFlagWithEnvVarHelpOutput(t *testing.T) {
+ os.Clearenv()
+ os.Setenv("APP_BAR", "2h3m6s")
+ for _, test := range durationFlagTests {
+ flag := DurationFlag{Name: test.name, EnvVar: "APP_BAR"}
+ output := flag.String()
+
+ expectedSuffix := " [$APP_BAR]"
+ if runtime.GOOS == "windows" {
+ expectedSuffix = " [%APP_BAR%]"
+ }
+ if !strings.HasSuffix(output, expectedSuffix) {
+ t.Errorf("%s does not end with"+expectedSuffix, output)
+ }
+ }
+}
+
+var intSliceFlagTests = []struct {
+ name string
+ value *IntSlice
+ expected string
+}{
+ {"heads", &IntSlice{}, "--heads value\t"},
+ {"H", &IntSlice{}, "-H value\t"},
+ {"H, heads", func() *IntSlice {
+ i := &IntSlice{}
+ i.Set("9")
+ i.Set("3")
+ return i
+ }(), "-H value, --heads value\t(default: 9, 3)"},
+}
+
+func TestIntSliceFlagHelpOutput(t *testing.T) {
+ for _, test := range intSliceFlagTests {
+ flag := IntSliceFlag{Name: test.name, Value: test.value}
+ output := flag.String()
+
+ if output != test.expected {
+ t.Errorf("%q does not match %q", output, test.expected)
+ }
+ }
+}
+
+func TestIntSliceFlagWithEnvVarHelpOutput(t *testing.T) {
+ os.Clearenv()
+ os.Setenv("APP_SMURF", "42,3")
+ for _, test := range intSliceFlagTests {
+ flag := IntSliceFlag{Name: test.name, Value: test.value, EnvVar: "APP_SMURF"}
+ output := flag.String()
+
+ expectedSuffix := " [$APP_SMURF]"
+ if runtime.GOOS == "windows" {
+ expectedSuffix = " [%APP_SMURF%]"
+ }
+ if !strings.HasSuffix(output, expectedSuffix) {
+ t.Errorf("%q does not end with"+expectedSuffix, output)
+ }
+ }
+}
+
+var int64SliceFlagTests = []struct {
+ name string
+ value *Int64Slice
+ expected string
+}{
+ {"heads", &Int64Slice{}, "--heads value\t"},
+ {"H", &Int64Slice{}, "-H value\t"},
+ {"H, heads", func() *Int64Slice {
+ i := &Int64Slice{}
+ i.Set("2")
+ i.Set("17179869184")
+ return i
+ }(), "-H value, --heads value\t(default: 2, 17179869184)"},
+}
+
+func TestInt64SliceFlagHelpOutput(t *testing.T) {
+ for _, test := range int64SliceFlagTests {
+ flag := Int64SliceFlag{Name: test.name, Value: test.value}
+ output := flag.String()
+
+ if output != test.expected {
+ t.Errorf("%q does not match %q", output, test.expected)
+ }
+ }
+}
+
+func TestInt64SliceFlagWithEnvVarHelpOutput(t *testing.T) {
+ os.Clearenv()
+ os.Setenv("APP_SMURF", "42,17179869184")
+ for _, test := range int64SliceFlagTests {
+ flag := Int64SliceFlag{Name: test.name, Value: test.value, EnvVar: "APP_SMURF"}
+ output := flag.String()
+
+ expectedSuffix := " [$APP_SMURF]"
+ if runtime.GOOS == "windows" {
+ expectedSuffix = " [%APP_SMURF%]"
+ }
+ if !strings.HasSuffix(output, expectedSuffix) {
+ t.Errorf("%q does not end with"+expectedSuffix, output)
+ }
+ }
+}
+
+var float64FlagTests = []struct {
+ name string
+ expected string
+}{
+ {"hooting", "--hooting value\t(default: 0.1)"},
+ {"H", "-H value\t(default: 0.1)"},
+}
+
+func TestFloat64FlagHelpOutput(t *testing.T) {
+ for _, test := range float64FlagTests {
+ flag := Float64Flag{Name: test.name, Value: float64(0.1)}
+ output := flag.String()
+
+ if output != test.expected {
+ t.Errorf("%q does not match %q", output, test.expected)
+ }
+ }
+}
+
+func TestFloat64FlagWithEnvVarHelpOutput(t *testing.T) {
+ os.Clearenv()
+ os.Setenv("APP_BAZ", "99.4")
+ for _, test := range float64FlagTests {
+ flag := Float64Flag{Name: test.name, EnvVar: "APP_BAZ"}
+ output := flag.String()
+
+ expectedSuffix := " [$APP_BAZ]"
+ if runtime.GOOS == "windows" {
+ expectedSuffix = " [%APP_BAZ%]"
+ }
+ if !strings.HasSuffix(output, expectedSuffix) {
+ t.Errorf("%s does not end with"+expectedSuffix, output)
+ }
+ }
+}
+
+var genericFlagTests = []struct {
+ name string
+ value Generic
+ expected string
+}{
+ {"toads", &Parser{"abc", "def"}, "--toads value\ttest flag (default: abc,def)"},
+ {"t", &Parser{"abc", "def"}, "-t value\ttest flag (default: abc,def)"},
+}
+
+func TestGenericFlagHelpOutput(t *testing.T) {
+ for _, test := range genericFlagTests {
+ flag := GenericFlag{Name: test.name, Value: test.value, Usage: "test flag"}
+ output := flag.String()
+
+ if output != test.expected {
+ t.Errorf("%q does not match %q", output, test.expected)
+ }
+ }
+}
+
+func TestGenericFlagWithEnvVarHelpOutput(t *testing.T) {
+ os.Clearenv()
+ os.Setenv("APP_ZAP", "3")
+ for _, test := range genericFlagTests {
+ flag := GenericFlag{Name: test.name, EnvVar: "APP_ZAP"}
+ output := flag.String()
+
+ expectedSuffix := " [$APP_ZAP]"
+ if runtime.GOOS == "windows" {
+ expectedSuffix = " [%APP_ZAP%]"
+ }
+ if !strings.HasSuffix(output, expectedSuffix) {
+ t.Errorf("%s does not end with"+expectedSuffix, output)
+ }
+ }
+}
+
+func TestParseMultiString(t *testing.T) {
+ (&App{
+ Flags: []Flag{
+ StringFlag{Name: "serve, s"},
+ },
+ Action: func(ctx *Context) error {
+ if ctx.String("serve") != "10" {
+ t.Errorf("main name not set")
+ }
+ if ctx.String("s") != "10" {
+ t.Errorf("short name not set")
+ }
+ return nil
+ },
+ }).Run([]string{"run", "-s", "10"})
+}
+
+func TestParseDestinationString(t *testing.T) {
+ var dest string
+ a := App{
+ Flags: []Flag{
+ StringFlag{
+ Name: "dest",
+ Destination: &dest,
+ },
+ },
+ Action: func(ctx *Context) error {
+ if dest != "10" {
+ t.Errorf("expected destination String 10")
+ }
+ return nil
+ },
+ }
+ a.Run([]string{"run", "--dest", "10"})
+}
+
+func TestParseMultiStringFromEnv(t *testing.T) {
+ os.Clearenv()
+ os.Setenv("APP_COUNT", "20")
+ (&App{
+ Flags: []Flag{
+ StringFlag{Name: "count, c", EnvVar: "APP_COUNT"},
+ },
+ Action: func(ctx *Context) error {
+ if ctx.String("count") != "20" {
+ t.Errorf("main name not set")
+ }
+ if ctx.String("c") != "20" {
+ t.Errorf("short name not set")
+ }
+ return nil
+ },
+ }).Run([]string{"run"})
+}
+
+func TestParseMultiStringFromEnvCascade(t *testing.T) {
+ os.Clearenv()
+ os.Setenv("APP_COUNT", "20")
+ (&App{
+ Flags: []Flag{
+ StringFlag{Name: "count, c", EnvVar: "COMPAT_COUNT,APP_COUNT"},
+ },
+ Action: func(ctx *Context) error {
+ if ctx.String("count") != "20" {
+ t.Errorf("main name not set")
+ }
+ if ctx.String("c") != "20" {
+ t.Errorf("short name not set")
+ }
+ return nil
+ },
+ }).Run([]string{"run"})
+}
+
+func TestParseMultiStringSlice(t *testing.T) {
+ (&App{
+ Flags: []Flag{
+ StringSliceFlag{Name: "serve, s", Value: &StringSlice{}},
+ },
+ Action: func(ctx *Context) error {
+ if !reflect.DeepEqual(ctx.StringSlice("serve"), []string{"10", "20"}) {
+ t.Errorf("main name not set")
+ }
+ if !reflect.DeepEqual(ctx.StringSlice("s"), []string{"10", "20"}) {
+ t.Errorf("short name not set")
+ }
+ return nil
+ },
+ }).Run([]string{"run", "-s", "10", "-s", "20"})
+}
+
+func TestParseMultiStringSliceFromEnv(t *testing.T) {
+ os.Clearenv()
+ os.Setenv("APP_INTERVALS", "20,30,40")
+
+ (&App{
+ Flags: []Flag{
+ StringSliceFlag{Name: "intervals, i", Value: &StringSlice{}, EnvVar: "APP_INTERVALS"},
+ },
+ Action: func(ctx *Context) error {
+ if !reflect.DeepEqual(ctx.StringSlice("intervals"), []string{"20", "30", "40"}) {
+ t.Errorf("main name not set from env")
+ }
+ if !reflect.DeepEqual(ctx.StringSlice("i"), []string{"20", "30", "40"}) {
+ t.Errorf("short name not set from env")
+ }
+ return nil
+ },
+ }).Run([]string{"run"})
+}
+
+func TestParseMultiStringSliceFromEnvCascade(t *testing.T) {
+ os.Clearenv()
+ os.Setenv("APP_INTERVALS", "20,30,40")
+
+ (&App{
+ Flags: []Flag{
+ StringSliceFlag{Name: "intervals, i", Value: &StringSlice{}, EnvVar: "COMPAT_INTERVALS,APP_INTERVALS"},
+ },
+ Action: func(ctx *Context) error {
+ if !reflect.DeepEqual(ctx.StringSlice("intervals"), []string{"20", "30", "40"}) {
+ t.Errorf("main name not set from env")
+ }
+ if !reflect.DeepEqual(ctx.StringSlice("i"), []string{"20", "30", "40"}) {
+ t.Errorf("short name not set from env")
+ }
+ return nil
+ },
+ }).Run([]string{"run"})
+}
+
+func TestParseMultiInt(t *testing.T) {
+ a := App{
+ Flags: []Flag{
+ IntFlag{Name: "serve, s"},
+ },
+ Action: func(ctx *Context) error {
+ if ctx.Int("serve") != 10 {
+ t.Errorf("main name not set")
+ }
+ if ctx.Int("s") != 10 {
+ t.Errorf("short name not set")
+ }
+ return nil
+ },
+ }
+ a.Run([]string{"run", "-s", "10"})
+}
+
+func TestParseDestinationInt(t *testing.T) {
+ var dest int
+ a := App{
+ Flags: []Flag{
+ IntFlag{
+ Name: "dest",
+ Destination: &dest,
+ },
+ },
+ Action: func(ctx *Context) error {
+ if dest != 10 {
+ t.Errorf("expected destination Int 10")
+ }
+ return nil
+ },
+ }
+ a.Run([]string{"run", "--dest", "10"})
+}
+
+func TestParseMultiIntFromEnv(t *testing.T) {
+ os.Clearenv()
+ os.Setenv("APP_TIMEOUT_SECONDS", "10")
+ a := App{
+ Flags: []Flag{
+ IntFlag{Name: "timeout, t", EnvVar: "APP_TIMEOUT_SECONDS"},
+ },
+ Action: func(ctx *Context) error {
+ if ctx.Int("timeout") != 10 {
+ t.Errorf("main name not set")
+ }
+ if ctx.Int("t") != 10 {
+ t.Errorf("short name not set")
+ }
+ return nil
+ },
+ }
+ a.Run([]string{"run"})
+}
+
+func TestParseMultiIntFromEnvCascade(t *testing.T) {
+ os.Clearenv()
+ os.Setenv("APP_TIMEOUT_SECONDS", "10")
+ a := App{
+ Flags: []Flag{
+ IntFlag{Name: "timeout, t", EnvVar: "COMPAT_TIMEOUT_SECONDS,APP_TIMEOUT_SECONDS"},
+ },
+ Action: func(ctx *Context) error {
+ if ctx.Int("timeout") != 10 {
+ t.Errorf("main name not set")
+ }
+ if ctx.Int("t") != 10 {
+ t.Errorf("short name not set")
+ }
+ return nil
+ },
+ }
+ a.Run([]string{"run"})
+}
+
+func TestParseMultiIntSlice(t *testing.T) {
+ (&App{
+ Flags: []Flag{
+ IntSliceFlag{Name: "serve, s", Value: &IntSlice{}},
+ },
+ Action: func(ctx *Context) error {
+ if !reflect.DeepEqual(ctx.IntSlice("serve"), []int{10, 20}) {
+ t.Errorf("main name not set")
+ }
+ if !reflect.DeepEqual(ctx.IntSlice("s"), []int{10, 20}) {
+ t.Errorf("short name not set")
+ }
+ return nil
+ },
+ }).Run([]string{"run", "-s", "10", "-s", "20"})
+}
+
+func TestParseMultiIntSliceFromEnv(t *testing.T) {
+ os.Clearenv()
+ os.Setenv("APP_INTERVALS", "20,30,40")
+
+ (&App{
+ Flags: []Flag{
+ IntSliceFlag{Name: "intervals, i", Value: &IntSlice{}, EnvVar: "APP_INTERVALS"},
+ },
+ Action: func(ctx *Context) error {
+ if !reflect.DeepEqual(ctx.IntSlice("intervals"), []int{20, 30, 40}) {
+ t.Errorf("main name not set from env")
+ }
+ if !reflect.DeepEqual(ctx.IntSlice("i"), []int{20, 30, 40}) {
+ t.Errorf("short name not set from env")
+ }
+ return nil
+ },
+ }).Run([]string{"run"})
+}
+
+func TestParseMultiIntSliceFromEnvCascade(t *testing.T) {
+ os.Clearenv()
+ os.Setenv("APP_INTERVALS", "20,30,40")
+
+ (&App{
+ Flags: []Flag{
+ IntSliceFlag{Name: "intervals, i", Value: &IntSlice{}, EnvVar: "COMPAT_INTERVALS,APP_INTERVALS"},
+ },
+ Action: func(ctx *Context) error {
+ if !reflect.DeepEqual(ctx.IntSlice("intervals"), []int{20, 30, 40}) {
+ t.Errorf("main name not set from env")
+ }
+ if !reflect.DeepEqual(ctx.IntSlice("i"), []int{20, 30, 40}) {
+ t.Errorf("short name not set from env")
+ }
+ return nil
+ },
+ }).Run([]string{"run"})
+}
+
+func TestParseMultiInt64Slice(t *testing.T) {
+ (&App{
+ Flags: []Flag{
+ Int64SliceFlag{Name: "serve, s", Value: &Int64Slice{}},
+ },
+ Action: func(ctx *Context) error {
+ if !reflect.DeepEqual(ctx.Int64Slice("serve"), []int64{10, 17179869184}) {
+ t.Errorf("main name not set")
+ }
+ if !reflect.DeepEqual(ctx.Int64Slice("s"), []int64{10, 17179869184}) {
+ t.Errorf("short name not set")
+ }
+ return nil
+ },
+ }).Run([]string{"run", "-s", "10", "-s", "17179869184"})
+}
+
+func TestParseMultiInt64SliceFromEnv(t *testing.T) {
+ os.Clearenv()
+ os.Setenv("APP_INTERVALS", "20,30,17179869184")
+
+ (&App{
+ Flags: []Flag{
+ Int64SliceFlag{Name: "intervals, i", Value: &Int64Slice{}, EnvVar: "APP_INTERVALS"},
+ },
+ Action: func(ctx *Context) error {
+ if !reflect.DeepEqual(ctx.Int64Slice("intervals"), []int64{20, 30, 17179869184}) {
+ t.Errorf("main name not set from env")
+ }
+ if !reflect.DeepEqual(ctx.Int64Slice("i"), []int64{20, 30, 17179869184}) {
+ t.Errorf("short name not set from env")
+ }
+ return nil
+ },
+ }).Run([]string{"run"})
+}
+
+func TestParseMultiInt64SliceFromEnvCascade(t *testing.T) {
+ os.Clearenv()
+ os.Setenv("APP_INTERVALS", "20,30,17179869184")
+
+ (&App{
+ Flags: []Flag{
+ Int64SliceFlag{Name: "intervals, i", Value: &Int64Slice{}, EnvVar: "COMPAT_INTERVALS,APP_INTERVALS"},
+ },
+ Action: func(ctx *Context) error {
+ if !reflect.DeepEqual(ctx.Int64Slice("intervals"), []int64{20, 30, 17179869184}) {
+ t.Errorf("main name not set from env")
+ }
+ if !reflect.DeepEqual(ctx.Int64Slice("i"), []int64{20, 30, 17179869184}) {
+ t.Errorf("short name not set from env")
+ }
+ return nil
+ },
+ }).Run([]string{"run"})
+}
+
+func TestParseMultiFloat64(t *testing.T) {
+ a := App{
+ Flags: []Flag{
+ Float64Flag{Name: "serve, s"},
+ },
+ Action: func(ctx *Context) error {
+ if ctx.Float64("serve") != 10.2 {
+ t.Errorf("main name not set")
+ }
+ if ctx.Float64("s") != 10.2 {
+ t.Errorf("short name not set")
+ }
+ return nil
+ },
+ }
+ a.Run([]string{"run", "-s", "10.2"})
+}
+
+func TestParseDestinationFloat64(t *testing.T) {
+ var dest float64
+ a := App{
+ Flags: []Flag{
+ Float64Flag{
+ Name: "dest",
+ Destination: &dest,
+ },
+ },
+ Action: func(ctx *Context) error {
+ if dest != 10.2 {
+ t.Errorf("expected destination Float64 10.2")
+ }
+ return nil
+ },
+ }
+ a.Run([]string{"run", "--dest", "10.2"})
+}
+
+func TestParseMultiFloat64FromEnv(t *testing.T) {
+ os.Clearenv()
+ os.Setenv("APP_TIMEOUT_SECONDS", "15.5")
+ a := App{
+ Flags: []Flag{
+ Float64Flag{Name: "timeout, t", EnvVar: "APP_TIMEOUT_SECONDS"},
+ },
+ Action: func(ctx *Context) error {
+ if ctx.Float64("timeout") != 15.5 {
+ t.Errorf("main name not set")
+ }
+ if ctx.Float64("t") != 15.5 {
+ t.Errorf("short name not set")
+ }
+ return nil
+ },
+ }
+ a.Run([]string{"run"})
+}
+
+func TestParseMultiFloat64FromEnvCascade(t *testing.T) {
+ os.Clearenv()
+ os.Setenv("APP_TIMEOUT_SECONDS", "15.5")
+ a := App{
+ Flags: []Flag{
+ Float64Flag{Name: "timeout, t", EnvVar: "COMPAT_TIMEOUT_SECONDS,APP_TIMEOUT_SECONDS"},
+ },
+ Action: func(ctx *Context) error {
+ if ctx.Float64("timeout") != 15.5 {
+ t.Errorf("main name not set")
+ }
+ if ctx.Float64("t") != 15.5 {
+ t.Errorf("short name not set")
+ }
+ return nil
+ },
+ }
+ a.Run([]string{"run"})
+}
+
+func TestParseMultiBool(t *testing.T) {
+ a := App{
+ Flags: []Flag{
+ BoolFlag{Name: "serve, s"},
+ },
+ Action: func(ctx *Context) error {
+ if ctx.Bool("serve") != true {
+ t.Errorf("main name not set")
+ }
+ if ctx.Bool("s") != true {
+ t.Errorf("short name not set")
+ }
+ return nil
+ },
+ }
+ a.Run([]string{"run", "--serve"})
+}
+
+func TestParseDestinationBool(t *testing.T) {
+ var dest bool
+ a := App{
+ Flags: []Flag{
+ BoolFlag{
+ Name: "dest",
+ Destination: &dest,
+ },
+ },
+ Action: func(ctx *Context) error {
+ if dest != true {
+ t.Errorf("expected destination Bool true")
+ }
+ return nil
+ },
+ }
+ a.Run([]string{"run", "--dest"})
+}
+
+func TestParseMultiBoolFromEnv(t *testing.T) {
+ os.Clearenv()
+ os.Setenv("APP_DEBUG", "1")
+ a := App{
+ Flags: []Flag{
+ BoolFlag{Name: "debug, d", EnvVar: "APP_DEBUG"},
+ },
+ Action: func(ctx *Context) error {
+ if ctx.Bool("debug") != true {
+ t.Errorf("main name not set from env")
+ }
+ if ctx.Bool("d") != true {
+ t.Errorf("short name not set from env")
+ }
+ return nil
+ },
+ }
+ a.Run([]string{"run"})
+}
+
+func TestParseMultiBoolFromEnvCascade(t *testing.T) {
+ os.Clearenv()
+ os.Setenv("APP_DEBUG", "1")
+ a := App{
+ Flags: []Flag{
+ BoolFlag{Name: "debug, d", EnvVar: "COMPAT_DEBUG,APP_DEBUG"},
+ },
+ Action: func(ctx *Context) error {
+ if ctx.Bool("debug") != true {
+ t.Errorf("main name not set from env")
+ }
+ if ctx.Bool("d") != true {
+ t.Errorf("short name not set from env")
+ }
+ return nil
+ },
+ }
+ a.Run([]string{"run"})
+}
+
+func TestParseBoolTFromEnv(t *testing.T) {
+ var boolTFlagTests = []struct {
+ input string
+ output bool
+ }{
+ {"", false},
+ {"1", true},
+ {"false", false},
+ {"true", true},
+ }
+
+ for _, test := range boolTFlagTests {
+ os.Clearenv()
+ os.Setenv("DEBUG", test.input)
+ a := App{
+ Flags: []Flag{
+ BoolTFlag{Name: "debug, d", EnvVar: "DEBUG"},
+ },
+ Action: func(ctx *Context) error {
+ if ctx.Bool("debug") != test.output {
+ t.Errorf("expected %+v to be parsed as %+v, instead was %+v", test.input, test.output, ctx.Bool("debug"))
+ }
+ if ctx.Bool("d") != test.output {
+ t.Errorf("expected %+v to be parsed as %+v, instead was %+v", test.input, test.output, ctx.Bool("d"))
+ }
+ return nil
+ },
+ }
+ a.Run([]string{"run"})
+ }
+}
+
+func TestParseMultiBoolT(t *testing.T) {
+ a := App{
+ Flags: []Flag{
+ BoolTFlag{Name: "serve, s"},
+ },
+ Action: func(ctx *Context) error {
+ if ctx.BoolT("serve") != true {
+ t.Errorf("main name not set")
+ }
+ if ctx.BoolT("s") != true {
+ t.Errorf("short name not set")
+ }
+ return nil
+ },
+ }
+ a.Run([]string{"run", "--serve"})
+}
+
+func TestParseDestinationBoolT(t *testing.T) {
+ var dest bool
+ a := App{
+ Flags: []Flag{
+ BoolTFlag{
+ Name: "dest",
+ Destination: &dest,
+ },
+ },
+ Action: func(ctx *Context) error {
+ if dest != true {
+ t.Errorf("expected destination BoolT true")
+ }
+ return nil
+ },
+ }
+ a.Run([]string{"run", "--dest"})
+}
+
+func TestParseMultiBoolTFromEnv(t *testing.T) {
+ os.Clearenv()
+ os.Setenv("APP_DEBUG", "0")
+ a := App{
+ Flags: []Flag{
+ BoolTFlag{Name: "debug, d", EnvVar: "APP_DEBUG"},
+ },
+ Action: func(ctx *Context) error {
+ if ctx.BoolT("debug") != false {
+ t.Errorf("main name not set from env")
+ }
+ if ctx.BoolT("d") != false {
+ t.Errorf("short name not set from env")
+ }
+ return nil
+ },
+ }
+ a.Run([]string{"run"})
+}
+
+func TestParseMultiBoolTFromEnvCascade(t *testing.T) {
+ os.Clearenv()
+ os.Setenv("APP_DEBUG", "0")
+ a := App{
+ Flags: []Flag{
+ BoolTFlag{Name: "debug, d", EnvVar: "COMPAT_DEBUG,APP_DEBUG"},
+ },
+ Action: func(ctx *Context) error {
+ if ctx.BoolT("debug") != false {
+ t.Errorf("main name not set from env")
+ }
+ if ctx.BoolT("d") != false {
+ t.Errorf("short name not set from env")
+ }
+ return nil
+ },
+ }
+ a.Run([]string{"run"})
+}
+
+type Parser [2]string
+
+func (p *Parser) Set(value string) error {
+ parts := strings.Split(value, ",")
+ if len(parts) != 2 {
+ return fmt.Errorf("invalid format")
+ }
+
+ (*p)[0] = parts[0]
+ (*p)[1] = parts[1]
+
+ return nil
+}
+
+func (p *Parser) String() string {
+ return fmt.Sprintf("%s,%s", p[0], p[1])
+}
+
+func (p *Parser) Get() interface{} {
+ return p
+}
+
+func TestParseGeneric(t *testing.T) {
+ a := App{
+ Flags: []Flag{
+ GenericFlag{Name: "serve, s", Value: &Parser{}},
+ },
+ Action: func(ctx *Context) error {
+ if !reflect.DeepEqual(ctx.Generic("serve"), &Parser{"10", "20"}) {
+ t.Errorf("main name not set")
+ }
+ if !reflect.DeepEqual(ctx.Generic("s"), &Parser{"10", "20"}) {
+ t.Errorf("short name not set")
+ }
+ return nil
+ },
+ }
+ a.Run([]string{"run", "-s", "10,20"})
+}
+
+func TestParseGenericFromEnv(t *testing.T) {
+ os.Clearenv()
+ os.Setenv("APP_SERVE", "20,30")
+ a := App{
+ Flags: []Flag{
+ GenericFlag{Name: "serve, s", Value: &Parser{}, EnvVar: "APP_SERVE"},
+ },
+ Action: func(ctx *Context) error {
+ if !reflect.DeepEqual(ctx.Generic("serve"), &Parser{"20", "30"}) {
+ t.Errorf("main name not set from env")
+ }
+ if !reflect.DeepEqual(ctx.Generic("s"), &Parser{"20", "30"}) {
+ t.Errorf("short name not set from env")
+ }
+ return nil
+ },
+ }
+ a.Run([]string{"run"})
+}
+
+func TestParseGenericFromEnvCascade(t *testing.T) {
+ os.Clearenv()
+ os.Setenv("APP_FOO", "99,2000")
+ a := App{
+ Flags: []Flag{
+ GenericFlag{Name: "foos", Value: &Parser{}, EnvVar: "COMPAT_FOO,APP_FOO"},
+ },
+ Action: func(ctx *Context) error {
+ if !reflect.DeepEqual(ctx.Generic("foos"), &Parser{"99", "2000"}) {
+ t.Errorf("value not set from env")
+ }
+ return nil
+ },
+ }
+ a.Run([]string{"run"})
+}
diff --git a/vendor/github.com/codegangsta/cli/funcs.go b/vendor/github.com/codegangsta/cli/funcs.go
new file mode 100644
index 0000000..cba5e6c
--- /dev/null
+++ b/vendor/github.com/codegangsta/cli/funcs.go
@@ -0,0 +1,28 @@
+package cli
+
+// BashCompleteFunc is an action to execute when the bash-completion flag is set
+type BashCompleteFunc func(*Context)
+
+// BeforeFunc is an action to execute before any subcommands are run, but after
+// the context is ready if a non-nil error is returned, no subcommands are run
+type BeforeFunc func(*Context) error
+
+// AfterFunc is an action to execute after any subcommands are run, but after the
+// subcommand has finished it is run even if Action() panics
+type AfterFunc func(*Context) error
+
+// ActionFunc is the action to execute when no subcommands are specified
+type ActionFunc func(*Context) error
+
+// CommandNotFoundFunc is executed if the proper command cannot be found
+type CommandNotFoundFunc func(*Context, string)
+
+// OnUsageErrorFunc is executed if an usage error occurs. This is useful for displaying
+// customized usage error messages. This function is able to replace the
+// original error messages. If this function is not set, the "Incorrect usage"
+// is displayed and the execution is interrupted.
+type OnUsageErrorFunc func(context *Context, err error, isSubcommand bool) error
+
+// FlagStringFunc is used by the help generation to display a flag, which is
+// expected to be a single line.
+type FlagStringFunc func(Flag) string
diff --git a/vendor/github.com/codegangsta/cli/generate-flag-types b/vendor/github.com/codegangsta/cli/generate-flag-types
new file mode 100755
index 0000000..7147381
--- /dev/null
+++ b/vendor/github.com/codegangsta/cli/generate-flag-types
@@ -0,0 +1,255 @@
+#!/usr/bin/env python
+"""
+The flag types that ship with the cli library have many things in common, and
+so we can take advantage of the `go generate` command to create much of the
+source code from a list of definitions. These definitions attempt to cover
+the parts that vary between flag types, and should evolve as needed.
+
+An example of the minimum definition needed is:
+
+ {
+ "name": "SomeType",
+ "type": "sometype",
+ "context_default": "nil"
+ }
+
+In this example, the code generated for the `cli` package will include a type
+named `SomeTypeFlag` that is expected to wrap a value of type `sometype`.
+Fetching values by name via `*cli.Context` will default to a value of `nil`.
+
+A more complete, albeit somewhat redundant, example showing all available
+definition keys is:
+
+ {
+ "name": "VeryMuchType",
+ "type": "*VeryMuchType",
+ "value": true,
+ "dest": false,
+ "doctail": " which really only wraps a []float64, oh well!",
+ "context_type": "[]float64",
+ "context_default": "nil",
+ "parser": "parseVeryMuchType(f.Value.String())",
+ "parser_cast": "[]float64(parsed)"
+ }
+
+The meaning of each field is as follows:
+
+ name (string) - The type "name", which will be suffixed with
+ `Flag` when generating the type definition
+ for `cli` and the wrapper type for `altsrc`
+ type (string) - The type that the generated `Flag` type for `cli`
+ is expected to "contain" as its `.Value` member
+ value (bool) - Should the generated `cli` type have a `Value`
+ member?
+ dest (bool) - Should the generated `cli` type support a
+ destination pointer?
+ doctail (string) - Additional docs for the `cli` flag type comment
+ context_type (string) - The literal type used in the `*cli.Context`
+ reader func signature
+ context_default (string) - The literal value used as the default by the
+ `*cli.Context` reader funcs when no value is
+ present
+ parser (string) - Literal code used to parse the flag `f`,
+ expected to have a return signature of
+ (value, error)
+ parser_cast (string) - Literal code used to cast the `parsed` value
+ returned from the `parser` code
+"""
+
+from __future__ import print_function, unicode_literals
+
+import argparse
+import json
+import os
+import subprocess
+import sys
+import tempfile
+import textwrap
+
+
+class _FancyFormatter(argparse.ArgumentDefaultsHelpFormatter,
+ argparse.RawDescriptionHelpFormatter):
+ pass
+
+
+def main(sysargs=sys.argv[:]):
+ parser = argparse.ArgumentParser(
+ description='Generate flag type code!',
+ formatter_class=_FancyFormatter)
+ parser.add_argument(
+ 'package',
+ type=str, default='cli', choices=_WRITEFUNCS.keys(),
+ help='Package for which flag types will be generated'
+ )
+ parser.add_argument(
+ '-i', '--in-json',
+ type=argparse.FileType('r'),
+ default=sys.stdin,
+ help='Input JSON file which defines each type to be generated'
+ )
+ parser.add_argument(
+ '-o', '--out-go',
+ type=argparse.FileType('w'),
+ default=sys.stdout,
+ help='Output file/stream to which generated source will be written'
+ )
+ parser.epilog = __doc__
+
+ args = parser.parse_args(sysargs[1:])
+ _generate_flag_types(_WRITEFUNCS[args.package], args.out_go, args.in_json)
+ return 0
+
+
+def _generate_flag_types(writefunc, output_go, input_json):
+ types = json.load(input_json)
+
+ tmp = tempfile.NamedTemporaryFile(suffix='.go', delete=False)
+ writefunc(tmp, types)
+ tmp.close()
+
+ new_content = subprocess.check_output(
+ ['goimports', tmp.name]
+ ).decode('utf-8')
+
+ print(new_content, file=output_go, end='')
+ output_go.flush()
+ os.remove(tmp.name)
+
+
+def _set_typedef_defaults(typedef):
+ typedef.setdefault('doctail', '')
+ typedef.setdefault('context_type', typedef['type'])
+ typedef.setdefault('dest', True)
+ typedef.setdefault('value', True)
+ typedef.setdefault('parser', 'f.Value, error(nil)')
+ typedef.setdefault('parser_cast', 'parsed')
+
+
+def _write_cli_flag_types(outfile, types):
+ _fwrite(outfile, """\
+ package cli
+
+ // WARNING: This file is generated!
+
+ """)
+
+ for typedef in types:
+ _set_typedef_defaults(typedef)
+
+ _fwrite(outfile, """\
+ // {name}Flag is a flag with type {type}{doctail}
+ type {name}Flag struct {{
+ Name string
+ Usage string
+ EnvVar string
+ Hidden bool
+ """.format(**typedef))
+
+ if typedef['value']:
+ _fwrite(outfile, """\
+ Value {type}
+ """.format(**typedef))
+
+ if typedef['dest']:
+ _fwrite(outfile, """\
+ Destination *{type}
+ """.format(**typedef))
+
+ _fwrite(outfile, "\n}\n\n")
+
+ _fwrite(outfile, """\
+ // String returns a readable representation of this value
+ // (for usage defaults)
+ func (f {name}Flag) String() string {{
+ return FlagStringer(f)
+ }}
+
+ // GetName returns the name of the flag
+ func (f {name}Flag) GetName() string {{
+ return f.Name
+ }}
+
+ // {name} looks up the value of a local {name}Flag, returns
+ // {context_default} if not found
+ func (c *Context) {name}(name string) {context_type} {{
+ return lookup{name}(name, c.flagSet)
+ }}
+
+ // Global{name} looks up the value of a global {name}Flag, returns
+ // {context_default} if not found
+ func (c *Context) Global{name}(name string) {context_type} {{
+ if fs := lookupGlobalFlagSet(name, c); fs != nil {{
+ return lookup{name}(name, fs)
+ }}
+ return {context_default}
+ }}
+
+ func lookup{name}(name string, set *flag.FlagSet) {context_type} {{
+ f := set.Lookup(name)
+ if f != nil {{
+ parsed, err := {parser}
+ if err != nil {{
+ return {context_default}
+ }}
+ return {parser_cast}
+ }}
+ return {context_default}
+ }}
+ """.format(**typedef))
+
+
+def _write_altsrc_flag_types(outfile, types):
+ _fwrite(outfile, """\
+ package altsrc
+
+ import (
+ "gopkg.in/urfave/cli.v1"
+ )
+
+ // WARNING: This file is generated!
+
+ """)
+
+ for typedef in types:
+ _set_typedef_defaults(typedef)
+
+ _fwrite(outfile, """\
+ // {name}Flag is the flag type that wraps cli.{name}Flag to allow
+ // for other values to be specified
+ type {name}Flag struct {{
+ cli.{name}Flag
+ set *flag.FlagSet
+ }}
+
+ // New{name}Flag creates a new {name}Flag
+ func New{name}Flag(fl cli.{name}Flag) *{name}Flag {{
+ return &{name}Flag{{{name}Flag: fl, set: nil}}
+ }}
+
+ // Apply saves the flagSet for later usage calls, then calls the
+ // wrapped {name}Flag.Apply
+ func (f *{name}Flag) Apply(set *flag.FlagSet) {{
+ f.set = set
+ f.{name}Flag.Apply(set)
+ }}
+
+ // ApplyWithError saves the flagSet for later usage calls, then calls the
+ // wrapped {name}Flag.ApplyWithError
+ func (f *{name}Flag) ApplyWithError(set *flag.FlagSet) error {{
+ f.set = set
+ return f.{name}Flag.ApplyWithError(set)
+ }}
+ """.format(**typedef))
+
+
+def _fwrite(outfile, text):
+ print(textwrap.dedent(text), end='', file=outfile)
+
+
+_WRITEFUNCS = {
+ 'cli': _write_cli_flag_types,
+ 'altsrc': _write_altsrc_flag_types
+}
+
+if __name__ == '__main__':
+ sys.exit(main())
diff --git a/vendor/github.com/codegangsta/cli/help.go b/vendor/github.com/codegangsta/cli/help.go
new file mode 100644
index 0000000..57ec98d
--- /dev/null
+++ b/vendor/github.com/codegangsta/cli/help.go
@@ -0,0 +1,338 @@
+package cli
+
+import (
+ "fmt"
+ "io"
+ "os"
+ "strings"
+ "text/tabwriter"
+ "text/template"
+)
+
+// AppHelpTemplate is the text template for the Default help topic.
+// cli.go uses text/template to render templates. You can
+// render custom help text by setting this variable.
+var AppHelpTemplate = `NAME:
+ {{.Name}}{{if .Usage}} - {{.Usage}}{{end}}
+
+USAGE:
+ {{if .UsageText}}{{.UsageText}}{{else}}{{.HelpName}} {{if .VisibleFlags}}[global options]{{end}}{{if .Commands}} command [command options]{{end}} {{if .ArgsUsage}}{{.ArgsUsage}}{{else}}[arguments...]{{end}}{{end}}{{if .Version}}{{if not .HideVersion}}
+
+VERSION:
+ {{.Version}}{{end}}{{end}}{{if .Description}}
+
+DESCRIPTION:
+ {{.Description}}{{end}}{{if len .Authors}}
+
+AUTHOR{{with $length := len .Authors}}{{if ne 1 $length}}S{{end}}{{end}}:
+ {{range $index, $author := .Authors}}{{if $index}}
+ {{end}}{{$author}}{{end}}{{end}}{{if .VisibleCommands}}
+
+COMMANDS:{{range .VisibleCategories}}{{if .Name}}
+ {{.Name}}:{{end}}{{range .VisibleCommands}}
+ {{join .Names ", "}}{{"\t"}}{{.Usage}}{{end}}{{end}}{{end}}{{if .VisibleFlags}}
+
+GLOBAL OPTIONS:
+ {{range $index, $option := .VisibleFlags}}{{if $index}}
+ {{end}}{{$option}}{{end}}{{end}}{{if .Copyright}}
+
+COPYRIGHT:
+ {{.Copyright}}{{end}}
+`
+
+// CommandHelpTemplate is the text template for the command help topic.
+// cli.go uses text/template to render templates. You can
+// render custom help text by setting this variable.
+var CommandHelpTemplate = `NAME:
+ {{.HelpName}} - {{.Usage}}
+
+USAGE:
+ {{if .UsageText}}{{.UsageText}}{{else}}{{.HelpName}}{{if .VisibleFlags}} [command options]{{end}} {{if .ArgsUsage}}{{.ArgsUsage}}{{else}}[arguments...]{{end}}{{end}}{{if .Category}}
+
+CATEGORY:
+ {{.Category}}{{end}}{{if .Description}}
+
+DESCRIPTION:
+ {{.Description}}{{end}}{{if .VisibleFlags}}
+
+OPTIONS:
+ {{range .VisibleFlags}}{{.}}
+ {{end}}{{end}}
+`
+
+// SubcommandHelpTemplate is the text template for the subcommand help topic.
+// cli.go uses text/template to render templates. You can
+// render custom help text by setting this variable.
+var SubcommandHelpTemplate = `NAME:
+ {{.HelpName}} - {{if .Description}}{{.Description}}{{else}}{{.Usage}}{{end}}
+
+USAGE:
+ {{if .UsageText}}{{.UsageText}}{{else}}{{.HelpName}} command{{if .VisibleFlags}} [command options]{{end}} {{if .ArgsUsage}}{{.ArgsUsage}}{{else}}[arguments...]{{end}}{{end}}
+
+COMMANDS:{{range .VisibleCategories}}{{if .Name}}
+ {{.Name}}:{{end}}{{range .VisibleCommands}}
+ {{join .Names ", "}}{{"\t"}}{{.Usage}}{{end}}
+{{end}}{{if .VisibleFlags}}
+OPTIONS:
+ {{range .VisibleFlags}}{{.}}
+ {{end}}{{end}}
+`
+
+var helpCommand = Command{
+ Name: "help",
+ Aliases: []string{"h"},
+ Usage: "Shows a list of commands or help for one command",
+ ArgsUsage: "[command]",
+ Action: func(c *Context) error {
+ args := c.Args()
+ if args.Present() {
+ return ShowCommandHelp(c, args.First())
+ }
+
+ ShowAppHelp(c)
+ return nil
+ },
+}
+
+var helpSubcommand = Command{
+ Name: "help",
+ Aliases: []string{"h"},
+ Usage: "Shows a list of commands or help for one command",
+ ArgsUsage: "[command]",
+ Action: func(c *Context) error {
+ args := c.Args()
+ if args.Present() {
+ return ShowCommandHelp(c, args.First())
+ }
+
+ return ShowSubcommandHelp(c)
+ },
+}
+
+// Prints help for the App or Command
+type helpPrinter func(w io.Writer, templ string, data interface{})
+
+// Prints help for the App or Command with custom template function.
+type helpPrinterCustom func(w io.Writer, templ string, data interface{}, customFunc map[string]interface{})
+
+// HelpPrinter is a function that writes the help output. If not set a default
+// is used. The function signature is:
+// func(w io.Writer, templ string, data interface{})
+var HelpPrinter helpPrinter = printHelp
+
+// HelpPrinterCustom is same as HelpPrinter but
+// takes a custom function for template function map.
+var HelpPrinterCustom helpPrinterCustom = printHelpCustom
+
+// VersionPrinter prints the version for the App
+var VersionPrinter = printVersion
+
+// ShowAppHelpAndExit - Prints the list of subcommands for the app and exits with exit code.
+func ShowAppHelpAndExit(c *Context, exitCode int) {
+ ShowAppHelp(c)
+ os.Exit(exitCode)
+}
+
+// ShowAppHelp is an action that displays the help.
+func ShowAppHelp(c *Context) (err error) {
+ if c.App.CustomAppHelpTemplate == "" {
+ HelpPrinter(c.App.Writer, AppHelpTemplate, c.App)
+ return
+ }
+ customAppData := func() map[string]interface{} {
+ if c.App.ExtraInfo == nil {
+ return nil
+ }
+ return map[string]interface{}{
+ "ExtraInfo": c.App.ExtraInfo,
+ }
+ }
+ HelpPrinterCustom(c.App.Writer, c.App.CustomAppHelpTemplate, c.App, customAppData())
+ return nil
+}
+
+// DefaultAppComplete prints the list of subcommands as the default app completion method
+func DefaultAppComplete(c *Context) {
+ for _, command := range c.App.Commands {
+ if command.Hidden {
+ continue
+ }
+ for _, name := range command.Names() {
+ fmt.Fprintln(c.App.Writer, name)
+ }
+ }
+}
+
+// ShowCommandHelpAndExit - exits with code after showing help
+func ShowCommandHelpAndExit(c *Context, command string, code int) {
+ ShowCommandHelp(c, command)
+ os.Exit(code)
+}
+
+// ShowCommandHelp prints help for the given command
+func ShowCommandHelp(ctx *Context, command string) error {
+ // show the subcommand help for a command with subcommands
+ if command == "" {
+ HelpPrinter(ctx.App.Writer, SubcommandHelpTemplate, ctx.App)
+ return nil
+ }
+
+ for _, c := range ctx.App.Commands {
+ if c.HasName(command) {
+ if c.CustomHelpTemplate != "" {
+ HelpPrinterCustom(ctx.App.Writer, c.CustomHelpTemplate, c, nil)
+ } else {
+ HelpPrinter(ctx.App.Writer, CommandHelpTemplate, c)
+ }
+ return nil
+ }
+ }
+
+ if ctx.App.CommandNotFound == nil {
+ return NewExitError(fmt.Sprintf("No help topic for '%v'", command), 3)
+ }
+
+ ctx.App.CommandNotFound(ctx, command)
+ return nil
+}
+
+// ShowSubcommandHelp prints help for the given subcommand
+func ShowSubcommandHelp(c *Context) error {
+ return ShowCommandHelp(c, c.Command.Name)
+}
+
+// ShowVersion prints the version number of the App
+func ShowVersion(c *Context) {
+ VersionPrinter(c)
+}
+
+func printVersion(c *Context) {
+ fmt.Fprintf(c.App.Writer, "%v version %v\n", c.App.Name, c.App.Version)
+}
+
+// ShowCompletions prints the lists of commands within a given context
+func ShowCompletions(c *Context) {
+ a := c.App
+ if a != nil && a.BashComplete != nil {
+ a.BashComplete(c)
+ }
+}
+
+// ShowCommandCompletions prints the custom completions for a given command
+func ShowCommandCompletions(ctx *Context, command string) {
+ c := ctx.App.Command(command)
+ if c != nil && c.BashComplete != nil {
+ c.BashComplete(ctx)
+ }
+}
+
+func printHelpCustom(out io.Writer, templ string, data interface{}, customFunc map[string]interface{}) {
+ funcMap := template.FuncMap{
+ "join": strings.Join,
+ }
+ if customFunc != nil {
+ for key, value := range customFunc {
+ funcMap[key] = value
+ }
+ }
+
+ w := tabwriter.NewWriter(out, 1, 8, 2, ' ', 0)
+ t := template.Must(template.New("help").Funcs(funcMap).Parse(templ))
+ err := t.Execute(w, data)
+ if err != nil {
+ // If the writer is closed, t.Execute will fail, and there's nothing
+ // we can do to recover.
+ if os.Getenv("CLI_TEMPLATE_ERROR_DEBUG") != "" {
+ fmt.Fprintf(ErrWriter, "CLI TEMPLATE ERROR: %#v\n", err)
+ }
+ return
+ }
+ w.Flush()
+}
+
+func printHelp(out io.Writer, templ string, data interface{}) {
+ printHelpCustom(out, templ, data, nil)
+}
+
+func checkVersion(c *Context) bool {
+ found := false
+ if VersionFlag.GetName() != "" {
+ eachName(VersionFlag.GetName(), func(name string) {
+ if c.GlobalBool(name) || c.Bool(name) {
+ found = true
+ }
+ })
+ }
+ return found
+}
+
+func checkHelp(c *Context) bool {
+ found := false
+ if HelpFlag.GetName() != "" {
+ eachName(HelpFlag.GetName(), func(name string) {
+ if c.GlobalBool(name) || c.Bool(name) {
+ found = true
+ }
+ })
+ }
+ return found
+}
+
+func checkCommandHelp(c *Context, name string) bool {
+ if c.Bool("h") || c.Bool("help") {
+ ShowCommandHelp(c, name)
+ return true
+ }
+
+ return false
+}
+
+func checkSubcommandHelp(c *Context) bool {
+ if c.Bool("h") || c.Bool("help") {
+ ShowSubcommandHelp(c)
+ return true
+ }
+
+ return false
+}
+
+func checkShellCompleteFlag(a *App, arguments []string) (bool, []string) {
+ if !a.EnableBashCompletion {
+ return false, arguments
+ }
+
+ pos := len(arguments) - 1
+ lastArg := arguments[pos]
+
+ if lastArg != "--"+BashCompletionFlag.GetName() {
+ return false, arguments
+ }
+
+ return true, arguments[:pos]
+}
+
+func checkCompletions(c *Context) bool {
+ if !c.shellComplete {
+ return false
+ }
+
+ if args := c.Args(); args.Present() {
+ name := args.First()
+ if cmd := c.App.Command(name); cmd != nil {
+ // let the command handle the completion
+ return false
+ }
+ }
+
+ ShowCompletions(c)
+ return true
+}
+
+func checkCommandCompletions(c *Context, name string) bool {
+ if !c.shellComplete {
+ return false
+ }
+
+ ShowCommandCompletions(c, name)
+ return true
+}
diff --git a/vendor/github.com/codegangsta/cli/help_test.go b/vendor/github.com/codegangsta/cli/help_test.go
new file mode 100644
index 0000000..70b6300
--- /dev/null
+++ b/vendor/github.com/codegangsta/cli/help_test.go
@@ -0,0 +1,452 @@
+package cli
+
+import (
+ "bytes"
+ "flag"
+ "fmt"
+ "runtime"
+ "strings"
+ "testing"
+)
+
+func Test_ShowAppHelp_NoAuthor(t *testing.T) {
+ output := new(bytes.Buffer)
+ app := NewApp()
+ app.Writer = output
+
+ c := NewContext(app, nil, nil)
+
+ ShowAppHelp(c)
+
+ if bytes.Index(output.Bytes(), []byte("AUTHOR(S):")) != -1 {
+ t.Errorf("expected\n%snot to include %s", output.String(), "AUTHOR(S):")
+ }
+}
+
+func Test_ShowAppHelp_NoVersion(t *testing.T) {
+ output := new(bytes.Buffer)
+ app := NewApp()
+ app.Writer = output
+
+ app.Version = ""
+
+ c := NewContext(app, nil, nil)
+
+ ShowAppHelp(c)
+
+ if bytes.Index(output.Bytes(), []byte("VERSION:")) != -1 {
+ t.Errorf("expected\n%snot to include %s", output.String(), "VERSION:")
+ }
+}
+
+func Test_ShowAppHelp_HideVersion(t *testing.T) {
+ output := new(bytes.Buffer)
+ app := NewApp()
+ app.Writer = output
+
+ app.HideVersion = true
+
+ c := NewContext(app, nil, nil)
+
+ ShowAppHelp(c)
+
+ if bytes.Index(output.Bytes(), []byte("VERSION:")) != -1 {
+ t.Errorf("expected\n%snot to include %s", output.String(), "VERSION:")
+ }
+}
+
+func Test_Help_Custom_Flags(t *testing.T) {
+ oldFlag := HelpFlag
+ defer func() {
+ HelpFlag = oldFlag
+ }()
+
+ HelpFlag = BoolFlag{
+ Name: "help, x",
+ Usage: "show help",
+ }
+
+ app := App{
+ Flags: []Flag{
+ BoolFlag{Name: "foo, h"},
+ },
+ Action: func(ctx *Context) error {
+ if ctx.Bool("h") != true {
+ t.Errorf("custom help flag not set")
+ }
+ return nil
+ },
+ }
+ output := new(bytes.Buffer)
+ app.Writer = output
+ app.Run([]string{"test", "-h"})
+ if output.Len() > 0 {
+ t.Errorf("unexpected output: %s", output.String())
+ }
+}
+
+func Test_Version_Custom_Flags(t *testing.T) {
+ oldFlag := VersionFlag
+ defer func() {
+ VersionFlag = oldFlag
+ }()
+
+ VersionFlag = BoolFlag{
+ Name: "version, V",
+ Usage: "show version",
+ }
+
+ app := App{
+ Flags: []Flag{
+ BoolFlag{Name: "foo, v"},
+ },
+ Action: func(ctx *Context) error {
+ if ctx.Bool("v") != true {
+ t.Errorf("custom version flag not set")
+ }
+ return nil
+ },
+ }
+ output := new(bytes.Buffer)
+ app.Writer = output
+ app.Run([]string{"test", "-v"})
+ if output.Len() > 0 {
+ t.Errorf("unexpected output: %s", output.String())
+ }
+}
+
+func Test_helpCommand_Action_ErrorIfNoTopic(t *testing.T) {
+ app := NewApp()
+
+ set := flag.NewFlagSet("test", 0)
+ set.Parse([]string{"foo"})
+
+ c := NewContext(app, set, nil)
+
+ err := helpCommand.Action.(func(*Context) error)(c)
+
+ if err == nil {
+ t.Fatalf("expected error from helpCommand.Action(), but got nil")
+ }
+
+ exitErr, ok := err.(*ExitError)
+ if !ok {
+ t.Fatalf("expected ExitError from helpCommand.Action(), but instead got: %v", err.Error())
+ }
+
+ if !strings.HasPrefix(exitErr.Error(), "No help topic for") {
+ t.Fatalf("expected an unknown help topic error, but got: %v", exitErr.Error())
+ }
+
+ if exitErr.exitCode != 3 {
+ t.Fatalf("expected exit value = 3, got %d instead", exitErr.exitCode)
+ }
+}
+
+func Test_helpCommand_InHelpOutput(t *testing.T) {
+ app := NewApp()
+ output := &bytes.Buffer{}
+ app.Writer = output
+ app.Run([]string{"test", "--help"})
+
+ s := output.String()
+
+ if strings.Contains(s, "\nCOMMANDS:\nGLOBAL OPTIONS:\n") {
+ t.Fatalf("empty COMMANDS section detected: %q", s)
+ }
+
+ if !strings.Contains(s, "help, h") {
+ t.Fatalf("missing \"help, h\": %q", s)
+ }
+}
+
+func Test_helpSubcommand_Action_ErrorIfNoTopic(t *testing.T) {
+ app := NewApp()
+
+ set := flag.NewFlagSet("test", 0)
+ set.Parse([]string{"foo"})
+
+ c := NewContext(app, set, nil)
+
+ err := helpSubcommand.Action.(func(*Context) error)(c)
+
+ if err == nil {
+ t.Fatalf("expected error from helpCommand.Action(), but got nil")
+ }
+
+ exitErr, ok := err.(*ExitError)
+ if !ok {
+ t.Fatalf("expected ExitError from helpCommand.Action(), but instead got: %v", err.Error())
+ }
+
+ if !strings.HasPrefix(exitErr.Error(), "No help topic for") {
+ t.Fatalf("expected an unknown help topic error, but got: %v", exitErr.Error())
+ }
+
+ if exitErr.exitCode != 3 {
+ t.Fatalf("expected exit value = 3, got %d instead", exitErr.exitCode)
+ }
+}
+
+func TestShowAppHelp_CommandAliases(t *testing.T) {
+ app := &App{
+ Commands: []Command{
+ {
+ Name: "frobbly",
+ Aliases: []string{"fr", "frob"},
+ Action: func(ctx *Context) error {
+ return nil
+ },
+ },
+ },
+ }
+
+ output := &bytes.Buffer{}
+ app.Writer = output
+ app.Run([]string{"foo", "--help"})
+
+ if !strings.Contains(output.String(), "frobbly, fr, frob") {
+ t.Errorf("expected output to include all command aliases; got: %q", output.String())
+ }
+}
+
+func TestShowCommandHelp_CommandAliases(t *testing.T) {
+ app := &App{
+ Commands: []Command{
+ {
+ Name: "frobbly",
+ Aliases: []string{"fr", "frob", "bork"},
+ Action: func(ctx *Context) error {
+ return nil
+ },
+ },
+ },
+ }
+
+ output := &bytes.Buffer{}
+ app.Writer = output
+ app.Run([]string{"foo", "help", "fr"})
+
+ if !strings.Contains(output.String(), "frobbly") {
+ t.Errorf("expected output to include command name; got: %q", output.String())
+ }
+
+ if strings.Contains(output.String(), "bork") {
+ t.Errorf("expected output to exclude command aliases; got: %q", output.String())
+ }
+}
+
+func TestShowSubcommandHelp_CommandAliases(t *testing.T) {
+ app := &App{
+ Commands: []Command{
+ {
+ Name: "frobbly",
+ Aliases: []string{"fr", "frob", "bork"},
+ Action: func(ctx *Context) error {
+ return nil
+ },
+ },
+ },
+ }
+
+ output := &bytes.Buffer{}
+ app.Writer = output
+ app.Run([]string{"foo", "help"})
+
+ if !strings.Contains(output.String(), "frobbly, fr, frob, bork") {
+ t.Errorf("expected output to include all command aliases; got: %q", output.String())
+ }
+}
+
+func TestShowCommandHelp_Customtemplate(t *testing.T) {
+ app := &App{
+ Commands: []Command{
+ {
+ Name: "frobbly",
+ Action: func(ctx *Context) error {
+ return nil
+ },
+ HelpName: "foo frobbly",
+ CustomHelpTemplate: `NAME:
+ {{.HelpName}} - {{.Usage}}
+
+USAGE:
+ {{.HelpName}} [FLAGS] TARGET [TARGET ...]
+
+FLAGS:
+ {{range .VisibleFlags}}{{.}}
+ {{end}}
+EXAMPLES:
+ 1. Frobbly runs with this param locally.
+ $ {{.HelpName}} wobbly
+`,
+ },
+ },
+ }
+ output := &bytes.Buffer{}
+ app.Writer = output
+ app.Run([]string{"foo", "help", "frobbly"})
+
+ if strings.Contains(output.String(), "2. Frobbly runs without this param locally.") {
+ t.Errorf("expected output to exclude \"2. Frobbly runs without this param locally.\"; got: %q", output.String())
+ }
+
+ if !strings.Contains(output.String(), "1. Frobbly runs with this param locally.") {
+ t.Errorf("expected output to include \"1. Frobbly runs with this param locally.\"; got: %q", output.String())
+ }
+
+ if !strings.Contains(output.String(), "$ foo frobbly wobbly") {
+ t.Errorf("expected output to include \"$ foo frobbly wobbly\"; got: %q", output.String())
+ }
+}
+
+func TestShowSubcommandHelp_CommandUsageText(t *testing.T) {
+ app := &App{
+ Commands: []Command{
+ {
+ Name: "frobbly",
+ UsageText: "this is usage text",
+ },
+ },
+ }
+
+ output := &bytes.Buffer{}
+ app.Writer = output
+
+ app.Run([]string{"foo", "frobbly", "--help"})
+
+ if !strings.Contains(output.String(), "this is usage text") {
+ t.Errorf("expected output to include usage text; got: %q", output.String())
+ }
+}
+
+func TestShowSubcommandHelp_SubcommandUsageText(t *testing.T) {
+ app := &App{
+ Commands: []Command{
+ {
+ Name: "frobbly",
+ Subcommands: []Command{
+ {
+ Name: "bobbly",
+ UsageText: "this is usage text",
+ },
+ },
+ },
+ },
+ }
+
+ output := &bytes.Buffer{}
+ app.Writer = output
+ app.Run([]string{"foo", "frobbly", "bobbly", "--help"})
+
+ if !strings.Contains(output.String(), "this is usage text") {
+ t.Errorf("expected output to include usage text; got: %q", output.String())
+ }
+}
+
+func TestShowAppHelp_HiddenCommand(t *testing.T) {
+ app := &App{
+ Commands: []Command{
+ {
+ Name: "frobbly",
+ Action: func(ctx *Context) error {
+ return nil
+ },
+ },
+ {
+ Name: "secretfrob",
+ Hidden: true,
+ Action: func(ctx *Context) error {
+ return nil
+ },
+ },
+ },
+ }
+
+ output := &bytes.Buffer{}
+ app.Writer = output
+ app.Run([]string{"app", "--help"})
+
+ if strings.Contains(output.String(), "secretfrob") {
+ t.Errorf("expected output to exclude \"secretfrob\"; got: %q", output.String())
+ }
+
+ if !strings.Contains(output.String(), "frobbly") {
+ t.Errorf("expected output to include \"frobbly\"; got: %q", output.String())
+ }
+}
+
+func TestShowAppHelp_CustomAppTemplate(t *testing.T) {
+ app := &App{
+ Commands: []Command{
+ {
+ Name: "frobbly",
+ Action: func(ctx *Context) error {
+ return nil
+ },
+ },
+ {
+ Name: "secretfrob",
+ Hidden: true,
+ Action: func(ctx *Context) error {
+ return nil
+ },
+ },
+ },
+ ExtraInfo: func() map[string]string {
+ platform := fmt.Sprintf("OS: %s | Arch: %s", runtime.GOOS, runtime.GOARCH)
+ goruntime := fmt.Sprintf("Version: %s | CPUs: %d", runtime.Version(), runtime.NumCPU())
+ return map[string]string{
+ "PLATFORM": platform,
+ "RUNTIME": goruntime,
+ }
+ },
+ CustomAppHelpTemplate: `NAME:
+ {{.Name}} - {{.Usage}}
+
+USAGE:
+ {{.Name}} {{if .VisibleFlags}}[FLAGS] {{end}}COMMAND{{if .VisibleFlags}} [COMMAND FLAGS | -h]{{end}} [ARGUMENTS...]
+
+COMMANDS:
+ {{range .VisibleCommands}}{{join .Names ", "}}{{ "\t" }}{{.Usage}}
+ {{end}}{{if .VisibleFlags}}
+GLOBAL FLAGS:
+ {{range .VisibleFlags}}{{.}}
+ {{end}}{{end}}
+VERSION:
+ 2.0.0
+{{"\n"}}{{range $key, $value := ExtraInfo}}
+{{$key}}:
+ {{$value}}
+{{end}}`,
+ }
+
+ output := &bytes.Buffer{}
+ app.Writer = output
+ app.Run([]string{"app", "--help"})
+
+ if strings.Contains(output.String(), "secretfrob") {
+ t.Errorf("expected output to exclude \"secretfrob\"; got: %q", output.String())
+ }
+
+ if !strings.Contains(output.String(), "frobbly") {
+ t.Errorf("expected output to include \"frobbly\"; got: %q", output.String())
+ }
+
+ if !strings.Contains(output.String(), "PLATFORM:") ||
+ !strings.Contains(output.String(), "OS:") ||
+ !strings.Contains(output.String(), "Arch:") {
+ t.Errorf("expected output to include \"PLATFORM:, OS: and Arch:\"; got: %q", output.String())
+ }
+
+ if !strings.Contains(output.String(), "RUNTIME:") ||
+ !strings.Contains(output.String(), "Version:") ||
+ !strings.Contains(output.String(), "CPUs:") {
+ t.Errorf("expected output to include \"RUNTIME:, Version: and CPUs:\"; got: %q", output.String())
+ }
+
+ if !strings.Contains(output.String(), "VERSION:") ||
+ !strings.Contains(output.String(), "2.0.0") {
+ t.Errorf("expected output to include \"VERSION:, 2.0.0\"; got: %q", output.String())
+ }
+}
diff --git a/vendor/github.com/codegangsta/cli/helpers_test.go b/vendor/github.com/codegangsta/cli/helpers_test.go
new file mode 100644
index 0000000..109ea7a
--- /dev/null
+++ b/vendor/github.com/codegangsta/cli/helpers_test.go
@@ -0,0 +1,28 @@
+package cli
+
+import (
+ "os"
+ "reflect"
+ "runtime"
+ "strings"
+ "testing"
+)
+
+var (
+ wd, _ = os.Getwd()
+)
+
+func expect(t *testing.T, a interface{}, b interface{}) {
+ _, fn, line, _ := runtime.Caller(1)
+ fn = strings.Replace(fn, wd+"/", "", -1)
+
+ if !reflect.DeepEqual(a, b) {
+ t.Errorf("(%s:%d) Expected %v (type %v) - Got %v (type %v)", fn, line, b, reflect.TypeOf(b), a, reflect.TypeOf(a))
+ }
+}
+
+func refute(t *testing.T, a interface{}, b interface{}) {
+ if reflect.DeepEqual(a, b) {
+ t.Errorf("Did not expect %v (type %v) - Got %v (type %v)", b, reflect.TypeOf(b), a, reflect.TypeOf(a))
+ }
+}
diff --git a/vendor/github.com/codegangsta/cli/helpers_unix_test.go b/vendor/github.com/codegangsta/cli/helpers_unix_test.go
new file mode 100644
index 0000000..ae27fc5
--- /dev/null
+++ b/vendor/github.com/codegangsta/cli/helpers_unix_test.go
@@ -0,0 +1,9 @@
+// +build darwin dragonfly freebsd linux netbsd openbsd solaris
+
+package cli
+
+import "os"
+
+func clearenv() {
+ os.Clearenv()
+}
diff --git a/vendor/github.com/codegangsta/cli/helpers_windows_test.go b/vendor/github.com/codegangsta/cli/helpers_windows_test.go
new file mode 100644
index 0000000..4eb84f9
--- /dev/null
+++ b/vendor/github.com/codegangsta/cli/helpers_windows_test.go
@@ -0,0 +1,20 @@
+package cli
+
+import (
+ "os"
+ "syscall"
+)
+
+// os.Clearenv() doesn't actually unset variables on Windows
+// See: https://github.com/golang/go/issues/17902
+func clearenv() {
+ for _, s := range os.Environ() {
+ for j := 1; j < len(s); j++ {
+ if s[j] == '=' {
+ keyp, _ := syscall.UTF16PtrFromString(s[0:j])
+ syscall.SetEnvironmentVariable(keyp, nil)
+ break
+ }
+ }
+ }
+}
diff --git a/vendor/github.com/codegangsta/cli/runtests b/vendor/github.com/codegangsta/cli/runtests
new file mode 100755
index 0000000..ee22bde
--- /dev/null
+++ b/vendor/github.com/codegangsta/cli/runtests
@@ -0,0 +1,122 @@
+#!/usr/bin/env python
+from __future__ import print_function
+
+import argparse
+import os
+import sys
+import tempfile
+
+from subprocess import check_call, check_output
+
+
+PACKAGE_NAME = os.environ.get(
+ 'CLI_PACKAGE_NAME', 'github.com/urfave/cli'
+)
+
+
+def main(sysargs=sys.argv[:]):
+ targets = {
+ 'vet': _vet,
+ 'test': _test,
+ 'gfmrun': _gfmrun,
+ 'toc': _toc,
+ 'gen': _gen,
+ }
+
+ parser = argparse.ArgumentParser()
+ parser.add_argument(
+ 'target', nargs='?', choices=tuple(targets.keys()), default='test'
+ )
+ args = parser.parse_args(sysargs[1:])
+
+ targets[args.target]()
+ return 0
+
+
+def _test():
+ if check_output('go version'.split()).split()[2] < 'go1.2':
+ _run('go test -v .')
+ return
+
+ coverprofiles = []
+ for subpackage in ['', 'altsrc']:
+ coverprofile = 'cli.coverprofile'
+ if subpackage != '':
+ coverprofile = '{}.coverprofile'.format(subpackage)
+
+ coverprofiles.append(coverprofile)
+
+ _run('go test -v'.split() + [
+ '-coverprofile={}'.format(coverprofile),
+ ('{}/{}'.format(PACKAGE_NAME, subpackage)).rstrip('/')
+ ])
+
+ combined_name = _combine_coverprofiles(coverprofiles)
+ _run('go tool cover -func={}'.format(combined_name))
+ os.remove(combined_name)
+
+
+def _gfmrun():
+ go_version = check_output('go version'.split()).split()[2]
+ if go_version < 'go1.3':
+ print('runtests: skip on {}'.format(go_version), file=sys.stderr)
+ return
+ _run(['gfmrun', '-c', str(_gfmrun_count()), '-s', 'README.md'])
+
+
+def _vet():
+ _run('go vet ./...')
+
+
+def _toc():
+ _run('node_modules/.bin/markdown-toc -i README.md')
+ _run('git diff --exit-code')
+
+
+def _gen():
+ go_version = check_output('go version'.split()).split()[2]
+ if go_version < 'go1.5':
+ print('runtests: skip on {}'.format(go_version), file=sys.stderr)
+ return
+
+ _run('go generate ./...')
+ _run('git diff --exit-code')
+
+
+def _run(command):
+ if hasattr(command, 'split'):
+ command = command.split()
+ print('runtests: {}'.format(' '.join(command)), file=sys.stderr)
+ check_call(command)
+
+
+def _gfmrun_count():
+ with open('README.md') as infile:
+ lines = infile.read().splitlines()
+ return len(filter(_is_go_runnable, lines))
+
+
+def _is_go_runnable(line):
+ return line.startswith('package main')
+
+
+def _combine_coverprofiles(coverprofiles):
+ combined = tempfile.NamedTemporaryFile(
+ suffix='.coverprofile', delete=False
+ )
+ combined.write('mode: set\n')
+
+ for coverprofile in coverprofiles:
+ with open(coverprofile, 'r') as infile:
+ for line in infile.readlines():
+ if not line.startswith('mode: '):
+ combined.write(line)
+
+ combined.flush()
+ name = combined.name
+ combined.close()
+ return name
+
+
+if __name__ == '__main__':
+ sys.exit(main())
diff --git a/vendor/github.com/fatih/structs/.gitignore b/vendor/github.com/fatih/structs/.gitignore
new file mode 100644
index 0000000..8365624
--- /dev/null
+++ b/vendor/github.com/fatih/structs/.gitignore
@@ -0,0 +1,23 @@
+# Compiled Object files, Static and Dynamic libs (Shared Objects)
+*.o
+*.a
+*.so
+
+# Folders
+_obj
+_test
+
+# Architecture specific extensions/prefixes
+*.[568vq]
+[568vq].out
+
+*.cgo1.go
+*.cgo2.c
+_cgo_defun.c
+_cgo_gotypes.go
+_cgo_export.*
+
+_testmain.go
+
+*.exe
+*.test
diff --git a/vendor/github.com/fatih/structs/.travis.yml b/vendor/github.com/fatih/structs/.travis.yml
new file mode 100644
index 0000000..cbf2ccc
--- /dev/null
+++ b/vendor/github.com/fatih/structs/.travis.yml
@@ -0,0 +1,11 @@
+language: go
+go:
+ - 1.7.x
+ - tip
+sudo: false
+before_install:
+- go get github.com/axw/gocov/gocov
+- go get github.com/mattn/goveralls
+- if ! go get github.com/golang/tools/cmd/cover; then go get golang.org/x/tools/cmd/cover; fi
+script:
+- $HOME/gopath/bin/goveralls -service=travis-ci
diff --git a/vendor/github.com/fatih/structs/LICENSE b/vendor/github.com/fatih/structs/LICENSE
new file mode 100644
index 0000000..34504e4
--- /dev/null
+++ b/vendor/github.com/fatih/structs/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014 Fatih Arslan
+
+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.
\ No newline at end of file
diff --git a/vendor/github.com/fatih/structs/README.md b/vendor/github.com/fatih/structs/README.md
new file mode 100644
index 0000000..44e0100
--- /dev/null
+++ b/vendor/github.com/fatih/structs/README.md
@@ -0,0 +1,163 @@
+# Structs [](http://godoc.org/github.com/fatih/structs) [](https://travis-ci.org/fatih/structs) [](https://coveralls.io/r/fatih/structs)
+
+Structs contains various utilities to work with Go (Golang) structs. It was
+initially used by me to convert a struct into a `map[string]interface{}`. With
+time I've added other utilities for structs. It's basically a high level
+package based on primitives from the reflect package. Feel free to add new
+functions or improve the existing code.
+
+## Install
+
+```bash
+go get github.com/fatih/structs
+```
+
+## Usage and Examples
+
+Just like the standard lib `strings`, `bytes` and co packages, `structs` has
+many global functions to manipulate or organize your struct data. Lets define
+and declare a struct:
+
+```go
+type Server struct {
+ Name string `json:"name,omitempty"`
+ ID int
+ Enabled bool
+ users []string // not exported
+ http.Server // embedded
+}
+
+server := &Server{
+ Name: "gopher",
+ ID: 123456,
+ Enabled: true,
+}
+```
+
+```go
+// Convert a struct to a map[string]interface{}
+// => {"Name":"gopher", "ID":123456, "Enabled":true}
+m := structs.Map(server)
+
+// Convert the values of a struct to a []interface{}
+// => ["gopher", 123456, true]
+v := structs.Values(server)
+
+// Convert the names of a struct to a []string
+// (see "Names methods" for more info about fields)
+n := structs.Names(server)
+
+// Convert the values of a struct to a []*Field
+// (see "Field methods" for more info about fields)
+f := structs.Fields(server)
+
+// Return the struct name => "Server"
+n := structs.Name(server)
+
+// Check if any field of a struct is initialized or not.
+h := structs.HasZero(server)
+
+// Check if all fields of a struct is initialized or not.
+z := structs.IsZero(server)
+
+// Check if server is a struct or a pointer to struct
+i := structs.IsStruct(server)
+```
+
+### Struct methods
+
+The structs functions can be also used as independent methods by creating a new
+`*structs.Struct`. This is handy if you want to have more control over the
+structs (such as retrieving a single Field).
+
+```go
+// Create a new struct type:
+s := structs.New(server)
+
+m := s.Map() // Get a map[string]interface{}
+v := s.Values() // Get a []interface{}
+f := s.Fields() // Get a []*Field
+n := s.Names() // Get a []string
+f := s.Field(name) // Get a *Field based on the given field name
+f, ok := s.FieldOk(name) // Get a *Field based on the given field name
+n := s.Name() // Get the struct name
+h := s.HasZero() // Check if any field is initialized
+z := s.IsZero() // Check if all fields are initialized
+```
+
+### Field methods
+
+We can easily examine a single Field for more detail. Below you can see how we
+get and interact with various field methods:
+
+
+```go
+s := structs.New(server)
+
+// Get the Field struct for the "Name" field
+name := s.Field("Name")
+
+// Get the underlying value, value => "gopher"
+value := name.Value().(string)
+
+// Set the field's value
+name.Set("another gopher")
+
+// Get the field's kind, kind => "string"
+name.Kind()
+
+// Check if the field is exported or not
+if name.IsExported() {
+ fmt.Println("Name field is exported")
+}
+
+// Check if the value is a zero value, such as "" for string, 0 for int
+if !name.IsZero() {
+ fmt.Println("Name is initialized")
+}
+
+// Check if the field is an anonymous (embedded) field
+if !name.IsEmbedded() {
+ fmt.Println("Name is not an embedded field")
+}
+
+// Get the Field's tag value for tag name "json", tag value => "name,omitempty"
+tagValue := name.Tag("json")
+```
+
+Nested structs are supported too:
+
+```go
+addrField := s.Field("Server").Field("Addr")
+
+// Get the value for addr
+a := addrField.Value().(string)
+
+// Or get all fields
+httpServer := s.Field("Server").Fields()
+```
+
+We can also get a slice of Fields from the Struct type to iterate over all
+fields. This is handy if you wish to examine all fields:
+
+```go
+s := structs.New(server)
+
+for _, f := range s.Fields() {
+ fmt.Printf("field name: %+v\n", f.Name())
+
+ if f.IsExported() {
+ fmt.Printf("value : %+v\n", f.Value())
+ fmt.Printf("is zero : %+v\n", f.IsZero())
+ }
+}
+```
+
+## Credits
+
+ * [Fatih Arslan](https://github.com/fatih)
+ * [Cihangir Savas](https://github.com/cihangir)
+
+## License
+
+The MIT License (MIT) - see LICENSE.md for more details
diff --git a/vendor/github.com/fatih/structs/field.go b/vendor/github.com/fatih/structs/field.go
new file mode 100644
index 0000000..e697832
--- /dev/null
+++ b/vendor/github.com/fatih/structs/field.go
@@ -0,0 +1,141 @@
+package structs
+
+import (
+ "errors"
+ "fmt"
+ "reflect"
+)
+
+var (
+ errNotExported = errors.New("field is not exported")
+ errNotSettable = errors.New("field is not settable")
+)
+
+// Field represents a single struct field that encapsulates high level
+// functions around the field.
+type Field struct {
+ value reflect.Value
+ field reflect.StructField
+ defaultTag string
+}
+
+// Tag returns the value associated with key in the tag string. If there is no
+// such key in the tag, Tag returns the empty string.
+func (f *Field) Tag(key string) string {
+ return f.field.Tag.Get(key)
+}
+
+// Value returns the underlying value of the field. It panics if the field
+// is not exported.
+func (f *Field) Value() interface{} {
+ return f.value.Interface()
+}
+
+// IsEmbedded returns true if the given field is an anonymous field (embedded)
+func (f *Field) IsEmbedded() bool {
+ return f.field.Anonymous
+}
+
+// IsExported returns true if the given field is exported.
+func (f *Field) IsExported() bool {
+ return f.field.PkgPath == ""
+}
+
+// IsZero returns true if the given field is not initialized (has a zero value).
+// It panics if the field is not exported.
+func (f *Field) IsZero() bool {
+ zero := reflect.Zero(f.value.Type()).Interface()
+ current := f.Value()
+
+ return reflect.DeepEqual(current, zero)
+}
+
+// Name returns the name of the given field
+func (f *Field) Name() string {
+ return f.field.Name
+}
+
+// Kind returns the fields kind, such as "string", "map", "bool", etc ..
+func (f *Field) Kind() reflect.Kind {
+ return f.value.Kind()
+}
+
+// Set sets the field to given value v. It returns an error if the field is not
+// settable (not addressable or not exported) or if the given value's type
+// doesn't match the fields type.
+func (f *Field) Set(val interface{}) error {
+ // we can't set unexported fields, so be sure this field is exported
+ if !f.IsExported() {
+ return errNotExported
+ }
+
+ // do we get here? not sure...
+ if !f.value.CanSet() {
+ return errNotSettable
+ }
+
+ given := reflect.ValueOf(val)
+
+ if f.value.Kind() != given.Kind() {
+ return fmt.Errorf("wrong kind. got: %s want: %s", given.Kind(), f.value.Kind())
+ }
+
+ f.value.Set(given)
+ return nil
+}
+
+// Zero sets the field to its zero value. It returns an error if the field is not
+// settable (not addressable or not exported).
+func (f *Field) Zero() error {
+ zero := reflect.Zero(f.value.Type()).Interface()
+ return f.Set(zero)
+}
+
+// Fields returns a slice of Fields. This is particular handy to get the fields
+// of a nested struct . A struct tag with the content of "-" ignores the
+// checking of that particular field. Example:
+//
+// // Field is ignored by this package.
+// Field *http.Request `structs:"-"`
+//
+// It panics if field is not exported or if field's kind is not struct
+func (f *Field) Fields() []*Field {
+ return getFields(f.value, f.defaultTag)
+}
+
+// Field returns the field from a nested struct. It panics if the nested struct
+// is not exported or if the field was not found.
+func (f *Field) Field(name string) *Field {
+ field, ok := f.FieldOk(name)
+ if !ok {
+ panic("field not found")
+ }
+
+ return field
+}
+
+// FieldOk returns the field from a nested struct. The boolean returns whether
+// the field was found (true) or not (false).
+func (f *Field) FieldOk(name string) (*Field, bool) {
+ value := &f.value
+ // value must be settable so we need to make sure it holds the address of the
+ // variable and not a copy, so we can pass the pointer to strctVal instead of a
+ // copy (which is not assigned to any variable, hence not settable).
+ // see "https://blog.golang.org/laws-of-reflection#TOC_8."
+ if f.value.Kind() != reflect.Ptr {
+ a := f.value.Addr()
+ value = &a
+ }
+ v := strctVal(value.Interface())
+ t := v.Type()
+
+ field, ok := t.FieldByName(name)
+ if !ok {
+ return nil, false
+ }
+
+ return &Field{
+ field: field,
+ value: v.FieldByName(name),
+ }, true
+}
diff --git a/vendor/github.com/fatih/structs/field_test.go b/vendor/github.com/fatih/structs/field_test.go
new file mode 100644
index 0000000..de9dc3b
--- /dev/null
+++ b/vendor/github.com/fatih/structs/field_test.go
@@ -0,0 +1,397 @@
+package structs
+
+import (
+ "reflect"
+ "testing"
+)
+
+// A test struct that defines all cases
+type Foo struct {
+ A string
+ B int `structs:"y"`
+ C bool `json:"c"`
+ d string // not exported
+ E *Baz
+ x string `xml:"x"` // not exported, with tag
+ Y []string
+ Z map[string]interface{}
+ *Bar // embedded
+}
+
+type Baz struct {
+ A string
+ B int
+}
+
+type Bar struct {
+ E string
+ F int
+ g []string
+}
+
+func newStruct() *Struct {
+ b := &Bar{
+ E: "example",
+ F: 2,
+ g: []string{"zeynep", "fatih"},
+ }
+
+ // B and x is not initialized for testing
+ f := &Foo{
+ A: "gopher",
+ C: true,
+ d: "small",
+ E: nil,
+ Y: []string{"example"},
+ Z: nil,
+ }
+ f.Bar = b
+
+ return New(f)
+}
+
+func TestField_Set(t *testing.T) {
+ s := newStruct()
+
+ f := s.Field("A")
+ err := f.Set("fatih")
+ if err != nil {
+ t.Error(err)
+ }
+
+ if f.Value().(string) != "fatih" {
+ t.Errorf("Setted value is wrong: %s want: %s", f.Value().(string), "fatih")
+ }
+
+ f = s.Field("Y")
+ err = f.Set([]string{"override", "with", "this"})
+ if err != nil {
+ t.Error(err)
+ }
+
+ sliceLen := len(f.Value().([]string))
+ if sliceLen != 3 {
+ t.Errorf("Setted values slice length is wrong: %d, want: %d", sliceLen, 3)
+ }
+
+ f = s.Field("C")
+ err = f.Set(false)
+ if err != nil {
+ t.Error(err)
+ }
+
+ if f.Value().(bool) {
+ t.Errorf("Setted value is wrong: %t want: %t", f.Value().(bool), false)
+ }
+
+ // let's pass a different type
+ f = s.Field("A")
+ err = f.Set(123) // Field A is of type string, but we are going to pass an integer
+ if err == nil {
+ t.Error("Setting a field's value with a different type than the field's type should return an error")
+ }
+
+ // old value should be still there :)
+ if f.Value().(string) != "fatih" {
+ t.Errorf("Setted value is wrong: %s want: %s", f.Value().(string), "fatih")
+ }
+
+ // let's access an unexported field, which should give an error
+ f = s.Field("d")
+ err = f.Set("large")
+ if err != errNotExported {
+ t.Error(err)
+ }
+
+ // let's set a pointer to struct
+ b := &Bar{
+ E: "gopher",
+ F: 2,
+ }
+
+ f = s.Field("Bar")
+ err = f.Set(b)
+ if err != nil {
+ t.Error(err)
+ }
+
+ baz := &Baz{
+ A: "helloWorld",
+ B: 42,
+ }
+
+ f = s.Field("E")
+ err = f.Set(baz)
+ if err != nil {
+ t.Error(err)
+ }
+
+ ba := s.Field("E").Value().(*Baz)
+
+ if ba.A != "helloWorld" {
+ t.Errorf("could not set baz. Got: %s Want: helloWorld", ba.A)
+ }
+}
+
+func TestField_NotSettable(t *testing.T) {
+ a := map[int]Baz{
+ 4: Baz{
+ A: "value",
+ },
+ }
+
+ s := New(a[4])
+
+ if err := s.Field("A").Set("newValue"); err != errNotSettable {
+ t.Errorf("Trying to set non-settable field should error with %q. Got %q instead.", errNotSettable, err)
+ }
+}
+
+func TestField_Zero(t *testing.T) {
+ s := newStruct()
+
+ f := s.Field("A")
+ err := f.Zero()
+ if err != nil {
+ t.Error(err)
+ }
+
+ if f.Value().(string) != "" {
+ t.Errorf("Zeroed value is wrong: %s want: %s", f.Value().(string), "")
+ }
+
+ f = s.Field("Y")
+ err = f.Zero()
+ if err != nil {
+ t.Error(err)
+ }
+
+ sliceLen := len(f.Value().([]string))
+ if sliceLen != 0 {
+ t.Errorf("Zeroed values slice length is wrong: %d, want: %d", sliceLen, 0)
+ }
+
+ f = s.Field("C")
+ err = f.Zero()
+ if err != nil {
+ t.Error(err)
+ }
+
+ if f.Value().(bool) {
+ t.Errorf("Zeroed value is wrong: %t want: %t", f.Value().(bool), false)
+ }
+
+ // let's access an unexported field, which should give an error
+ f = s.Field("d")
+ err = f.Zero()
+ if err != errNotExported {
+ t.Error(err)
+ }
+
+ f = s.Field("Bar")
+ err = f.Zero()
+ if err != nil {
+ t.Error(err)
+ }
+
+ f = s.Field("E")
+ err = f.Zero()
+ if err != nil {
+ t.Error(err)
+ }
+
+ v := s.Field("E").value
+ if !v.IsNil() {
+ t.Errorf("could not set baz. Got: %s Want: ", v.Interface())
+ }
+}
+
+func TestField(t *testing.T) {
+ s := newStruct()
+
+ defer func() {
+ err := recover()
+ if err == nil {
+ t.Error("Retrieveing a non existing field from the struct should panic")
+ }
+ }()
+
+ _ = s.Field("no-field")
+}
+
+func TestField_Kind(t *testing.T) {
+ s := newStruct()
+
+ f := s.Field("A")
+ if f.Kind() != reflect.String {
+ t.Errorf("Field A has wrong kind: %s want: %s", f.Kind(), reflect.String)
+ }
+
+ f = s.Field("B")
+ if f.Kind() != reflect.Int {
+ t.Errorf("Field B has wrong kind: %s want: %s", f.Kind(), reflect.Int)
+ }
+
+ // unexported
+ f = s.Field("d")
+ if f.Kind() != reflect.String {
+ t.Errorf("Field d has wrong kind: %s want: %s", f.Kind(), reflect.String)
+ }
+}
+
+func TestField_Tag(t *testing.T) {
+ s := newStruct()
+
+ v := s.Field("B").Tag("json")
+ if v != "" {
+ t.Errorf("Field's tag value of a non existing tag should return empty, got: %s", v)
+ }
+
+ v = s.Field("C").Tag("json")
+ if v != "c" {
+ t.Errorf("Field's tag value of the existing field C should return 'c', got: %s", v)
+ }
+
+ v = s.Field("d").Tag("json")
+ if v != "" {
+ t.Errorf("Field's tag value of a non exported field should return empty, got: %s", v)
+ }
+
+ v = s.Field("x").Tag("xml")
+ if v != "x" {
+ t.Errorf("Field's tag value of a non exported field with a tag should return 'x', got: %s", v)
+ }
+
+ v = s.Field("A").Tag("json")
+ if v != "" {
+ t.Errorf("Field's tag value of a existing field without a tag should return empty, got: %s", v)
+ }
+}
+
+func TestField_Value(t *testing.T) {
+ s := newStruct()
+
+ v := s.Field("A").Value()
+ val, ok := v.(string)
+ if !ok {
+ t.Errorf("Field's value of a A should be string")
+ }
+
+ if val != "gopher" {
+ t.Errorf("Field's value of a existing tag should return 'gopher', got: %s", val)
+ }
+
+ defer func() {
+ err := recover()
+ if err == nil {
+ t.Error("Value of a non exported field from the field should panic")
+ }
+ }()
+
+ // should panic
+ _ = s.Field("d").Value()
+}
+
+func TestField_IsEmbedded(t *testing.T) {
+ s := newStruct()
+
+ if !s.Field("Bar").IsEmbedded() {
+ t.Errorf("Fields 'Bar' field is an embedded field")
+ }
+
+ if s.Field("d").IsEmbedded() {
+ t.Errorf("Fields 'd' field is not an embedded field")
+ }
+}
+
+func TestField_IsExported(t *testing.T) {
+ s := newStruct()
+
+ if !s.Field("Bar").IsExported() {
+ t.Errorf("Fields 'Bar' field is an exported field")
+ }
+
+ if !s.Field("A").IsExported() {
+ t.Errorf("Fields 'A' field is an exported field")
+ }
+
+ if s.Field("d").IsExported() {
+ t.Errorf("Fields 'd' field is not an exported field")
+ }
+}
+
+func TestField_IsZero(t *testing.T) {
+ s := newStruct()
+
+ if s.Field("A").IsZero() {
+ t.Errorf("Fields 'A' field is an initialized field")
+ }
+
+ if !s.Field("B").IsZero() {
+ t.Errorf("Fields 'B' field is not an initialized field")
+ }
+}
+
+func TestField_Name(t *testing.T) {
+ s := newStruct()
+
+ if s.Field("A").Name() != "A" {
+ t.Errorf("Fields 'A' field should have the name 'A'")
+ }
+}
+
+func TestField_Field(t *testing.T) {
+ s := newStruct()
+
+ e := s.Field("Bar").Field("E")
+
+ val, ok := e.Value().(string)
+ if !ok {
+ t.Error("The value of the field 'e' inside 'Bar' struct should be string")
+ }
+
+ if val != "example" {
+ t.Errorf("The value of 'e' should be 'example, got: %s", val)
+ }
+
+ defer func() {
+ err := recover()
+ if err == nil {
+ t.Error("Field of a non existing nested struct should panic")
+ }
+ }()
+
+ _ = s.Field("Bar").Field("e")
+}
+
+func TestField_Fields(t *testing.T) {
+ s := newStruct()
+ fields := s.Field("Bar").Fields()
+
+ if len(fields) != 3 {
+ t.Errorf("We expect 3 fields in embedded struct, was: %d", len(fields))
+ }
+}
+
+func TestField_FieldOk(t *testing.T) {
+ s := newStruct()
+
+ b, ok := s.FieldOk("Bar")
+ if !ok {
+ t.Error("The field 'Bar' should exists.")
+ }
+
+ e, ok := b.FieldOk("E")
+ if !ok {
+ t.Error("The field 'E' should exists.")
+ }
+
+ val, ok := e.Value().(string)
+ if !ok {
+ t.Error("The value of the field 'e' inside 'Bar' struct should be string")
+ }
+
+ if val != "example" {
+ t.Errorf("The value of 'e' should be 'example, got: %s", val)
+ }
+}
diff --git a/vendor/github.com/fatih/structs/structs.go b/vendor/github.com/fatih/structs/structs.go
new file mode 100644
index 0000000..be3816a
--- /dev/null
+++ b/vendor/github.com/fatih/structs/structs.go
@@ -0,0 +1,586 @@
+// Package structs contains various utilities functions to work with structs.
+package structs
+
+import (
+ "fmt"
+
+ "reflect"
+)
+
+var (
+ // DefaultTagName is the default tag name for struct fields which provides
+ // a more granular to tweak certain structs. Lookup the necessary functions
+ // for more info.
+ DefaultTagName = "structs" // struct's field default tag name
+)
+
+// Struct encapsulates a struct type to provide several high level functions
+// around the struct.
+type Struct struct {
+ raw interface{}
+ value reflect.Value
+ TagName string
+}
+
+// New returns a new *Struct with the struct s. It panics if the s's kind is
+// not struct.
+func New(s interface{}) *Struct {
+ return &Struct{
+ raw: s,
+ value: strctVal(s),
+ TagName: DefaultTagName,
+ }
+}
+
+// Map converts the given struct to a map[string]interface{}, where the keys
+// of the map are the field names and the values of the map the associated
+// values of the fields. The default key string is the struct field name but
+// can be changed in the struct field's tag value. The "structs" key in the
+// struct's field tag value is the key name. Example:
+//
+// // Field appears in map as key "myName".
+// Name string `structs:"myName"`
+//
+// A tag value with the content of "-" ignores that particular field. Example:
+//
+// // Field is ignored by this package.
+// Field bool `structs:"-"`
+//
+// A tag value with the content of "string" uses the stringer to get the value. Example:
+//
+// // The value will be output of Animal's String() func.
+// // Map will panic if Animal does not implement String().
+// Field *Animal `structs:"field,string"`
+//
+// A tag value with the option of "flatten" used in a struct field is to flatten its fields
+// in the output map. Example:
+//
+// // The FieldStruct's fields will be flattened into the output map.
+// FieldStruct time.Time `structs:",flatten"`
+//
+// A tag value with the option of "omitnested" stops iterating further if the type
+// is a struct. Example:
+//
+// // Field is not processed further by this package.
+// Field time.Time `structs:"myName,omitnested"`
+// Field *http.Request `structs:",omitnested"`
+//
+// A tag value with the option of "omitempty" ignores that particular field if
+// the field value is empty. Example:
+//
+// // Field appears in map as key "myName", but the field is
+// // skipped if empty.
+// Field string `structs:"myName,omitempty"`
+//
+// // Field appears in map as key "Field" (the default), but
+// // the field is skipped if empty.
+// Field string `structs:",omitempty"`
+//
+// Note that only exported fields of a struct can be accessed, non exported
+// fields will be neglected.
+func (s *Struct) Map() map[string]interface{} {
+ out := make(map[string]interface{})
+ s.FillMap(out)
+ return out
+}
+
+// FillMap is the same as Map. Instead of returning the output, it fills the
+// given map.
+func (s *Struct) FillMap(out map[string]interface{}) {
+ if out == nil {
+ return
+ }
+
+ fields := s.structFields()
+
+ for _, field := range fields {
+ name := field.Name
+ val := s.value.FieldByName(name)
+ isSubStruct := false
+ var finalVal interface{}
+
+ tagName, tagOpts := parseTag(field.Tag.Get(s.TagName))
+ if tagName != "" {
+ name = tagName
+ }
+
+ // if the value is a zero value and the field is marked as omitempty do
+ // not include
+ if tagOpts.Has("omitempty") {
+ zero := reflect.Zero(val.Type()).Interface()
+ current := val.Interface()
+
+ if reflect.DeepEqual(current, zero) {
+ continue
+ }
+ }
+
+ if !tagOpts.Has("omitnested") {
+ finalVal = s.nested(val)
+
+ v := reflect.ValueOf(val.Interface())
+ if v.Kind() == reflect.Ptr {
+ v = v.Elem()
+ }
+
+ switch v.Kind() {
+ case reflect.Map, reflect.Struct:
+ isSubStruct = true
+ }
+ } else {
+ finalVal = val.Interface()
+ }
+
+ if tagOpts.Has("string") {
+ s, ok := val.Interface().(fmt.Stringer)
+ if ok {
+ out[name] = s.String()
+ }
+ continue
+ }
+
+ if isSubStruct && (tagOpts.Has("flatten")) {
+ for k := range finalVal.(map[string]interface{}) {
+ out[k] = finalVal.(map[string]interface{})[k]
+ }
+ } else {
+ out[name] = finalVal
+ }
+ }
+}
+
+// Values converts the given s struct's field values to a []interface{}. A
+// struct tag with the content of "-" ignores the that particular field.
+// Example:
+//
+// // Field is ignored by this package.
+// Field int `structs:"-"`
+//
+// A value with the option of "omitnested" stops iterating further if the type
+// is a struct. Example:
+//
+// // Fields is not processed further by this package.
+// Field time.Time `structs:",omitnested"`
+// Field *http.Request `structs:",omitnested"`
+//
+// A tag value with the option of "omitempty" ignores that particular field and
+// is not added to the values if the field value is empty. Example:
+//
+// // Field is skipped if empty
+// Field string `structs:",omitempty"`
+//
+// Note that only exported fields of a struct can be accessed, non exported
+// fields will be neglected.
+func (s *Struct) Values() []interface{} {
+ fields := s.structFields()
+
+ var t []interface{}
+
+ for _, field := range fields {
+ val := s.value.FieldByName(field.Name)
+
+ _, tagOpts := parseTag(field.Tag.Get(s.TagName))
+
+ // if the value is a zero value and the field is marked as omitempty do
+ // not include
+ if tagOpts.Has("omitempty") {
+ zero := reflect.Zero(val.Type()).Interface()
+ current := val.Interface()
+
+ if reflect.DeepEqual(current, zero) {
+ continue
+ }
+ }
+
+ if tagOpts.Has("string") {
+ s, ok := val.Interface().(fmt.Stringer)
+ if ok {
+ t = append(t, s.String())
+ }
+ continue
+ }
+
+ if IsStruct(val.Interface()) && !tagOpts.Has("omitnested") {
+ // look out for embedded structs, and convert them to a
+ // []interface{} to be added to the final values slice
+ for _, embeddedVal := range Values(val.Interface()) {
+ t = append(t, embeddedVal)
+ }
+ } else {
+ t = append(t, val.Interface())
+ }
+ }
+
+ return t
+}
+
+// Fields returns a slice of Fields. A struct tag with the content of "-"
+// ignores the checking of that particular field. Example:
+//
+// // Field is ignored by this package.
+// Field bool `structs:"-"`
+//
+// It panics if s's kind is not struct.
+func (s *Struct) Fields() []*Field {
+ return getFields(s.value, s.TagName)
+}
+
+// Names returns a slice of field names. A struct tag with the content of "-"
+// ignores the checking of that particular field. Example:
+//
+// // Field is ignored by this package.
+// Field bool `structs:"-"`
+//
+// It panics if s's kind is not struct.
+func (s *Struct) Names() []string {
+ fields := getFields(s.value, s.TagName)
+
+ names := make([]string, len(fields))
+
+ for i, field := range fields {
+ names[i] = field.Name()
+ }
+
+ return names
+}
+
+func getFields(v reflect.Value, tagName string) []*Field {
+ if v.Kind() == reflect.Ptr {
+ v = v.Elem()
+ }
+
+ t := v.Type()
+
+ var fields []*Field
+
+ for i := 0; i < t.NumField(); i++ {
+ field := t.Field(i)
+
+ if tag := field.Tag.Get(tagName); tag == "-" {
+ continue
+ }
+
+ f := &Field{
+ field: field,
+ value: v.FieldByName(field.Name),
+ }
+
+ fields = append(fields, f)
+
+ }
+
+ return fields
+}
+
+// Field returns a new Field struct that provides several high level functions
+// around a single struct field entity. It panics if the field is not found.
+func (s *Struct) Field(name string) *Field {
+ f, ok := s.FieldOk(name)
+ if !ok {
+ panic("field not found")
+ }
+
+ return f
+}
+
+// FieldOk returns a new Field struct that provides several high level functions
+// around a single struct field entity. The boolean returns true if the field
+// was found.
+func (s *Struct) FieldOk(name string) (*Field, bool) {
+ t := s.value.Type()
+
+ field, ok := t.FieldByName(name)
+ if !ok {
+ return nil, false
+ }
+
+ return &Field{
+ field: field,
+ value: s.value.FieldByName(name),
+ defaultTag: s.TagName,
+ }, true
+}
+
+// IsZero returns true if all fields in a struct is a zero value (not
+// initialized) A struct tag with the content of "-" ignores the checking of
+// that particular field. Example:
+//
+// // Field is ignored by this package.
+// Field bool `structs:"-"`
+//
+// A value with the option of "omitnested" stops iterating further if the type
+// is a struct. Example:
+//
+// // Field is not processed further by this package.
+// Field time.Time `structs:"myName,omitnested"`
+// Field *http.Request `structs:",omitnested"`
+//
+// Note that only exported fields of a struct can be accessed, non exported
+// fields will be neglected. It panics if s's kind is not struct.
+func (s *Struct) IsZero() bool {
+ fields := s.structFields()
+
+ for _, field := range fields {
+ val := s.value.FieldByName(field.Name)
+
+ _, tagOpts := parseTag(field.Tag.Get(s.TagName))
+
+ if IsStruct(val.Interface()) && !tagOpts.Has("omitnested") {
+ ok := IsZero(val.Interface())
+ if !ok {
+ return false
+ }
+
+ continue
+ }
+
+ // zero value of the given field, such as "" for string, 0 for int
+ zero := reflect.Zero(val.Type()).Interface()
+
+ // current value of the given field
+ current := val.Interface()
+
+ if !reflect.DeepEqual(current, zero) {
+ return false
+ }
+ }
+
+ return true
+}
+
+// HasZero returns true if a field in a struct is not initialized (zero value).
+// A struct tag with the content of "-" ignores the checking of that particular
+// field. Example:
+//
+// // Field is ignored by this package.
+// Field bool `structs:"-"`
+//
+// A value with the option of "omitnested" stops iterating further if the type
+// is a struct. Example:
+//
+// // Field is not processed further by this package.
+// Field time.Time `structs:"myName,omitnested"`
+// Field *http.Request `structs:",omitnested"`
+//
+// Note that only exported fields of a struct can be accessed, non exported
+// fields will be neglected. It panics if s's kind is not struct.
+func (s *Struct) HasZero() bool {
+ fields := s.structFields()
+
+ for _, field := range fields {
+ val := s.value.FieldByName(field.Name)
+
+ _, tagOpts := parseTag(field.Tag.Get(s.TagName))
+
+ if IsStruct(val.Interface()) && !tagOpts.Has("omitnested") {
+ ok := HasZero(val.Interface())
+ if ok {
+ return true
+ }
+
+ continue
+ }
+
+ // zero value of the given field, such as "" for string, 0 for int
+ zero := reflect.Zero(val.Type()).Interface()
+
+ // current value of the given field
+ current := val.Interface()
+
+ if reflect.DeepEqual(current, zero) {
+ return true
+ }
+ }
+
+ return false
+}
+
+// Name returns the structs's type name within its package. For more info refer
+// to Name() function.
+func (s *Struct) Name() string {
+ return s.value.Type().Name()
+}
+
+// structFields returns the exported struct fields for a given s struct. This
+// is a convenient helper method to avoid duplicate code in some of the
+// functions.
+func (s *Struct) structFields() []reflect.StructField {
+ t := s.value.Type()
+
+ var f []reflect.StructField
+
+ for i := 0; i < t.NumField(); i++ {
+ field := t.Field(i)
+ // we can't access the value of unexported fields
+ if field.PkgPath != "" {
+ continue
+ }
+
+ // don't check if it's omitted
+ if tag := field.Tag.Get(s.TagName); tag == "-" {
+ continue
+ }
+
+ f = append(f, field)
+ }
+
+ return f
+}
+
+func strctVal(s interface{}) reflect.Value {
+ v := reflect.ValueOf(s)
+
+ // if pointer get the underlying element≤
+ for v.Kind() == reflect.Ptr {
+ v = v.Elem()
+ }
+
+ if v.Kind() != reflect.Struct {
+ panic("not struct")
+ }
+
+ return v
+}
+
+// Map converts the given struct to a map[string]interface{}. For more info
+// refer to Struct types Map() method. It panics if s's kind is not struct.
+func Map(s interface{}) map[string]interface{} {
+ return New(s).Map()
+}
+
+// FillMap is the same as Map. Instead of returning the output, it fills the
+// given map.
+func FillMap(s interface{}, out map[string]interface{}) {
+ New(s).FillMap(out)
+}
+
+// Values converts the given struct to a []interface{}. For more info refer to
+// Struct types Values() method. It panics if s's kind is not struct.
+func Values(s interface{}) []interface{} {
+ return New(s).Values()
+}
+
+// Fields returns a slice of *Field. For more info refer to Struct types
+// Fields() method. It panics if s's kind is not struct.
+func Fields(s interface{}) []*Field {
+ return New(s).Fields()
+}
+
+// Names returns a slice of field names. For more info refer to Struct types
+// Names() method. It panics if s's kind is not struct.
+func Names(s interface{}) []string {
+ return New(s).Names()
+}
+
+// IsZero returns true if all fields is equal to a zero value. For more info
+// refer to Struct types IsZero() method. It panics if s's kind is not struct.
+func IsZero(s interface{}) bool {
+ return New(s).IsZero()
+}
+
+// HasZero returns true if any field is equal to a zero value. For more info
+// refer to Struct types HasZero() method. It panics if s's kind is not struct.
+func HasZero(s interface{}) bool {
+ return New(s).HasZero()
+}
+
+// IsStruct returns true if the given variable is a struct or a pointer to
+// struct.
+func IsStruct(s interface{}) bool {
+ v := reflect.ValueOf(s)
+ if v.Kind() == reflect.Ptr {
+ v = v.Elem()
+ }
+
+ // uninitialized zero value of a struct
+ if v.Kind() == reflect.Invalid {
+ return false
+ }
+
+ return v.Kind() == reflect.Struct
+}
+
+// Name returns the structs's type name within its package. It returns an
+// empty string for unnamed types. It panics if s's kind is not struct.
+func Name(s interface{}) string {
+ return New(s).Name()
+}
+
+// nested retrieves recursively all types for the given value and returns the
+// nested value.
+func (s *Struct) nested(val reflect.Value) interface{} {
+ var finalVal interface{}
+
+ v := reflect.ValueOf(val.Interface())
+ if v.Kind() == reflect.Ptr {
+ v = v.Elem()
+ }
+
+ switch v.Kind() {
+ case reflect.Struct:
+ n := New(val.Interface())
+ n.TagName = s.TagName
+ m := n.Map()
+
+ // do not add the converted value if there are no exported fields, ie:
+ // time.Time
+ if len(m) == 0 {
+ finalVal = val.Interface()
+ } else {
+ finalVal = m
+ }
+ case reflect.Map:
+ // get the element type of the map
+ mapElem := val.Type()
+ switch val.Type().Kind() {
+ case reflect.Ptr, reflect.Array, reflect.Map,
+ reflect.Slice, reflect.Chan:
+ mapElem = val.Type().Elem()
+ if mapElem.Kind() == reflect.Ptr {
+ mapElem = mapElem.Elem()
+ }
+ }
+
+ // only iterate over struct types, ie: map[string]StructType,
+ // map[string][]StructType,
+ if mapElem.Kind() == reflect.Struct ||
+ (mapElem.Kind() == reflect.Slice &&
+ mapElem.Elem().Kind() == reflect.Struct) {
+ m := make(map[string]interface{}, val.Len())
+ for _, k := range val.MapKeys() {
+ m[k.String()] = s.nested(val.MapIndex(k))
+ }
+ finalVal = m
+ break
+ }
+
+ // TODO(arslan): should this be optional?
+ finalVal = val.Interface()
+ case reflect.Slice, reflect.Array:
+ if val.Type().Kind() == reflect.Interface {
+ finalVal = val.Interface()
+ break
+ }
+
+ // TODO(arslan): should this be optional?
+ // do not iterate of non struct types, just pass the value. Ie: []int,
+ // []string, co... We only iterate further if it's a struct.
+ // i.e []foo or []*foo
+ if val.Type().Elem().Kind() != reflect.Struct &&
+ !(val.Type().Elem().Kind() == reflect.Ptr &&
+ val.Type().Elem().Elem().Kind() == reflect.Struct) {
+ finalVal = val.Interface()
+ break
+ }
+
+ slices := make([]interface{}, val.Len(), val.Len())
+ for x := 0; x < val.Len(); x++ {
+ slices[x] = s.nested(val.Index(x))
+ }
+ finalVal = slices
+ default:
+ finalVal = val.Interface()
+ }
+
+ return finalVal
+}
diff --git a/vendor/github.com/fatih/structs/structs_example_test.go b/vendor/github.com/fatih/structs/structs_example_test.go
new file mode 100644
index 0000000..329c130
--- /dev/null
+++ b/vendor/github.com/fatih/structs/structs_example_test.go
@@ -0,0 +1,351 @@
+package structs
+
+import (
+ "fmt"
+ "time"
+)
+
+func ExampleNew() {
+ type Server struct {
+ Name string
+ ID int32
+ Enabled bool
+ }
+
+ server := &Server{
+ Name: "Arslan",
+ ID: 123456,
+ Enabled: true,
+ }
+
+ s := New(server)
+
+ fmt.Printf("Name : %v\n", s.Name())
+ fmt.Printf("Values : %v\n", s.Values())
+ fmt.Printf("Value of ID : %v\n", s.Field("ID").Value())
+ // Output:
+ // Name : Server
+ // Values : [Arslan 123456 true]
+ // Value of ID : 123456
+
+}
+
+func ExampleMap() {
+ type Server struct {
+ Name string
+ ID int32
+ Enabled bool
+ }
+
+ s := &Server{
+ Name: "Arslan",
+ ID: 123456,
+ Enabled: true,
+ }
+
+ m := Map(s)
+
+ fmt.Printf("%#v\n", m["Name"])
+ fmt.Printf("%#v\n", m["ID"])
+ fmt.Printf("%#v\n", m["Enabled"])
+ // Output:
+ // "Arslan"
+ // 123456
+ // true
+
+}
+
+func ExampleMap_tags() {
+ // Custom tags can change the map keys instead of using the fields name
+ type Server struct {
+ Name string `structs:"server_name"`
+ ID int32 `structs:"server_id"`
+ Enabled bool `structs:"enabled"`
+ }
+
+ s := &Server{
+ Name: "Zeynep",
+ ID: 789012,
+ }
+
+ m := Map(s)
+
+ // access them by the custom tags defined above
+ fmt.Printf("%#v\n", m["server_name"])
+ fmt.Printf("%#v\n", m["server_id"])
+ fmt.Printf("%#v\n", m["enabled"])
+ // Output:
+ // "Zeynep"
+ // 789012
+ // false
+
+}
+
+func ExampleMap_omitNested() {
+ // By default field with struct types are processed too. We can stop
+ // processing them via "omitnested" tag option.
+ type Server struct {
+ Name string `structs:"server_name"`
+ ID int32 `structs:"server_id"`
+ Time time.Time `structs:"time,omitnested"` // do not convert to map[string]interface{}
+ }
+
+ const shortForm = "2006-Jan-02"
+ t, _ := time.Parse("2006-Jan-02", "2013-Feb-03")
+
+ s := &Server{
+ Name: "Zeynep",
+ ID: 789012,
+ Time: t,
+ }
+
+ m := Map(s)
+
+ // access them by the custom tags defined above
+ fmt.Printf("%v\n", m["server_name"])
+ fmt.Printf("%v\n", m["server_id"])
+ fmt.Printf("%v\n", m["time"].(time.Time))
+ // Output:
+ // Zeynep
+ // 789012
+ // 2013-02-03 00:00:00 +0000 UTC
+}
+
+func ExampleMap_omitEmpty() {
+ // By default field with struct types of zero values are processed too. We
+ // can stop processing them via "omitempty" tag option.
+ type Server struct {
+ Name string `structs:",omitempty"`
+ ID int32 `structs:"server_id,omitempty"`
+ Location string
+ }
+
+ // Only add location
+ s := &Server{
+ Location: "Tokyo",
+ }
+
+ m := Map(s)
+
+ // map contains only the Location field
+ fmt.Printf("%v\n", m)
+ // Output:
+ // map[Location:Tokyo]
+}
+
+func ExampleValues() {
+ type Server struct {
+ Name string
+ ID int32
+ Enabled bool
+ }
+
+ s := &Server{
+ Name: "Fatih",
+ ID: 135790,
+ Enabled: false,
+ }
+
+ m := Values(s)
+
+ fmt.Printf("Values: %+v\n", m)
+ // Output:
+ // Values: [Fatih 135790 false]
+}
+
+func ExampleValues_omitEmpty() {
+ // By default field with struct types of zero values are processed too. We
+ // can stop processing them via "omitempty" tag option.
+ type Server struct {
+ Name string `structs:",omitempty"`
+ ID int32 `structs:"server_id,omitempty"`
+ Location string
+ }
+
+ // Only add location
+ s := &Server{
+ Location: "Ankara",
+ }
+
+ m := Values(s)
+
+ // values contains only the Location field
+ fmt.Printf("Values: %+v\n", m)
+ // Output:
+ // Values: [Ankara]
+}
+
+func ExampleValues_tags() {
+ type Location struct {
+ City string
+ Country string
+ }
+
+ type Server struct {
+ Name string
+ ID int32
+ Enabled bool
+ Location Location `structs:"-"` // values from location are not included anymore
+ }
+
+ s := &Server{
+ Name: "Fatih",
+ ID: 135790,
+ Enabled: false,
+ Location: Location{City: "Ankara", Country: "Turkey"},
+ }
+
+ // Let get all values from the struct s. Note that we don't include values
+ // from the Location field
+ m := Values(s)
+
+ fmt.Printf("Values: %+v\n", m)
+ // Output:
+ // Values: [Fatih 135790 false]
+}
+
+func ExampleFields() {
+ type Access struct {
+ Name string
+ LastAccessed time.Time
+ Number int
+ }
+
+ s := &Access{
+ Name: "Fatih",
+ LastAccessed: time.Now(),
+ Number: 1234567,
+ }
+
+ fields := Fields(s)
+
+ for i, field := range fields {
+ fmt.Printf("[%d] %+v\n", i, field.Name())
+ }
+
+ // Output:
+ // [0] Name
+ // [1] LastAccessed
+ // [2] Number
+}
+
+func ExampleFields_nested() {
+ type Person struct {
+ Name string
+ Number int
+ }
+
+ type Access struct {
+ Person Person
+ HasPermission bool
+ LastAccessed time.Time
+ }
+
+ s := &Access{
+ Person: Person{Name: "fatih", Number: 1234567},
+ LastAccessed: time.Now(),
+ HasPermission: true,
+ }
+
+ // Let's get all fields from the struct s.
+ fields := Fields(s)
+
+ for _, field := range fields {
+ if field.Name() == "Person" {
+ fmt.Printf("Access.Person.Name: %+v\n", field.Field("Name").Value())
+ }
+ }
+
+ // Output:
+ // Access.Person.Name: fatih
+}
+
+func ExampleField() {
+ type Person struct {
+ Name string
+ Number int
+ }
+
+ type Access struct {
+ Person Person
+ HasPermission bool
+ LastAccessed time.Time
+ }
+
+ access := &Access{
+ Person: Person{Name: "fatih", Number: 1234567},
+ LastAccessed: time.Now(),
+ HasPermission: true,
+ }
+
+ // Create a new Struct type
+ s := New(access)
+
+ // Get the Field type for "Person" field
+ p := s.Field("Person")
+
+ // Get the underlying "Name field" and print the value of it
+ name := p.Field("Name")
+
+ fmt.Printf("Value of Person.Access.Name: %+v\n", name.Value())
+
+ // Output:
+ // Value of Person.Access.Name: fatih
+
+}
+
+func ExampleIsZero() {
+ type Server struct {
+ Name string
+ ID int32
+ Enabled bool
+ }
+
+ // Nothing is initalized
+ a := &Server{}
+ isZeroA := IsZero(a)
+
+ // Name and Enabled is initialized, but not ID
+ b := &Server{
+ Name: "Golang",
+ Enabled: true,
+ }
+ isZeroB := IsZero(b)
+
+ fmt.Printf("%#v\n", isZeroA)
+ fmt.Printf("%#v\n", isZeroB)
+ // Output:
+ // true
+ // false
+}
+
+func ExampleHasZero() {
+ // Let's define an Access struct. Note that the "Enabled" field is not
+ // going to be checked because we added the "structs" tag to the field.
+ type Access struct {
+ Name string
+ LastAccessed time.Time
+ Number int
+ Enabled bool `structs:"-"`
+ }
+
+ // Name and Number is not initialized.
+ a := &Access{
+ LastAccessed: time.Now(),
+ }
+ hasZeroA := HasZero(a)
+
+ // Name and Number is initialized.
+ b := &Access{
+ Name: "Fatih",
+ LastAccessed: time.Now(),
+ Number: 12345,
+ }
+ hasZeroB := HasZero(b)
+
+ fmt.Printf("%#v\n", hasZeroA)
+ fmt.Printf("%#v\n", hasZeroB)
+ // Output:
+ // true
+ // false
+}
diff --git a/vendor/github.com/fatih/structs/structs_test.go b/vendor/github.com/fatih/structs/structs_test.go
new file mode 100644
index 0000000..8a18a07
--- /dev/null
+++ b/vendor/github.com/fatih/structs/structs_test.go
@@ -0,0 +1,1453 @@
+package structs
+
+import (
+ "fmt"
+ "reflect"
+ "testing"
+ "time"
+)
+
+func TestMapNonStruct(t *testing.T) {
+ foo := []string{"foo"}
+
+ defer func() {
+ err := recover()
+ if err == nil {
+ t.Error("Passing a non struct into Map should panic")
+ }
+ }()
+
+ // this should panic. We are going to recover and and test it
+ _ = Map(foo)
+}
+
+func TestStructIndexes(t *testing.T) {
+ type C struct {
+ something int
+ Props map[string]interface{}
+ }
+
+ defer func() {
+ err := recover()
+ if err != nil {
+ fmt.Printf("err %+v\n", err)
+ t.Error("Using mixed indexes should not panic")
+ }
+ }()
+
+ // They should not panic
+ _ = Map(&C{})
+ _ = Fields(&C{})
+ _ = Values(&C{})
+ _ = IsZero(&C{})
+ _ = HasZero(&C{})
+}
+
+func TestMap(t *testing.T) {
+ var T = struct {
+ A string
+ B int
+ C bool
+ }{
+ A: "a-value",
+ B: 2,
+ C: true,
+ }
+
+ a := Map(T)
+
+ if typ := reflect.TypeOf(a).Kind(); typ != reflect.Map {
+ t.Errorf("Map should return a map type, got: %v", typ)
+ }
+
+ // we have three fields
+ if len(a) != 3 {
+ t.Errorf("Map should return a map of len 3, got: %d", len(a))
+ }
+
+ inMap := func(val interface{}) bool {
+ for _, v := range a {
+ if reflect.DeepEqual(v, val) {
+ return true
+ }
+ }
+
+ return false
+ }
+
+ for _, val := range []interface{}{"a-value", 2, true} {
+ if !inMap(val) {
+ t.Errorf("Map should have the value %v", val)
+ }
+ }
+
+}
+
+func TestMap_Tag(t *testing.T) {
+ var T = struct {
+ A string `structs:"x"`
+ B int `structs:"y"`
+ C bool `structs:"z"`
+ }{
+ A: "a-value",
+ B: 2,
+ C: true,
+ }
+
+ a := Map(T)
+
+ inMap := func(key interface{}) bool {
+ for k := range a {
+ if reflect.DeepEqual(k, key) {
+ return true
+ }
+ }
+ return false
+ }
+
+ for _, key := range []string{"x", "y", "z"} {
+ if !inMap(key) {
+ t.Errorf("Map should have the key %v", key)
+ }
+ }
+
+}
+
+func TestMap_CustomTag(t *testing.T) {
+ var T = struct {
+ A string `json:"x"`
+ B int `json:"y"`
+ C bool `json:"z"`
+ D struct {
+ E string `json:"jkl"`
+ } `json:"nested"`
+ }{
+ A: "a-value",
+ B: 2,
+ C: true,
+ }
+ T.D.E = "e-value"
+
+ s := New(T)
+ s.TagName = "json"
+
+ a := s.Map()
+
+ inMap := func(key interface{}) bool {
+ for k := range a {
+ if reflect.DeepEqual(k, key) {
+ return true
+ }
+ }
+ return false
+ }
+
+ for _, key := range []string{"x", "y", "z"} {
+ if !inMap(key) {
+ t.Errorf("Map should have the key %v", key)
+ }
+ }
+
+ nested, ok := a["nested"].(map[string]interface{})
+ if !ok {
+ t.Fatalf("Map should contain the D field that is tagged as 'nested'")
+ }
+
+ e, ok := nested["jkl"].(string)
+ if !ok {
+ t.Fatalf("Map should contain the D.E field that is tagged as 'jkl'")
+ }
+
+ if e != "e-value" {
+ t.Errorf("D.E field should be equal to 'e-value', got: '%v'", e)
+ }
+
+}
+
+func TestMap_MultipleCustomTag(t *testing.T) {
+ var A = struct {
+ X string `aa:"ax"`
+ }{"a_value"}
+
+ aStruct := New(A)
+ aStruct.TagName = "aa"
+
+ var B = struct {
+ X string `bb:"bx"`
+ }{"b_value"}
+
+ bStruct := New(B)
+ bStruct.TagName = "bb"
+
+ a, b := aStruct.Map(), bStruct.Map()
+ if !reflect.DeepEqual(a, map[string]interface{}{"ax": "a_value"}) {
+ t.Error("Map should have field ax with value a_value")
+ }
+
+ if !reflect.DeepEqual(b, map[string]interface{}{"bx": "b_value"}) {
+ t.Error("Map should have field bx with value b_value")
+ }
+}
+
+func TestMap_OmitEmpty(t *testing.T) {
+ type A struct {
+ Name string
+ Value string `structs:",omitempty"`
+ Time time.Time `structs:",omitempty"`
+ }
+ a := A{}
+
+ m := Map(a)
+
+ _, ok := m["Value"].(map[string]interface{})
+ if ok {
+ t.Error("Map should not contain the Value field that is tagged as omitempty")
+ }
+
+ _, ok = m["Time"].(map[string]interface{})
+ if ok {
+ t.Error("Map should not contain the Time field that is tagged as omitempty")
+ }
+}
+
+func TestMap_OmitNested(t *testing.T) {
+ type A struct {
+ Name string
+ Value string
+ Time time.Time `structs:",omitnested"`
+ }
+ a := A{Time: time.Now()}
+
+ type B struct {
+ Desc string
+ A A
+ }
+ b := &B{A: a}
+
+ m := Map(b)
+
+ in, ok := m["A"].(map[string]interface{})
+ if !ok {
+ t.Error("Map nested structs is not available in the map")
+ }
+
+ // should not happen
+ if _, ok := in["Time"].(map[string]interface{}); ok {
+ t.Error("Map nested struct should omit recursiving parsing of Time")
+ }
+
+ if _, ok := in["Time"].(time.Time); !ok {
+ t.Error("Map nested struct should stop parsing of Time at is current value")
+ }
+}
+
+func TestMap_Nested(t *testing.T) {
+ type A struct {
+ Name string
+ }
+ a := &A{Name: "example"}
+
+ type B struct {
+ A *A
+ }
+ b := &B{A: a}
+
+ m := Map(b)
+
+ if typ := reflect.TypeOf(m).Kind(); typ != reflect.Map {
+ t.Errorf("Map should return a map type, got: %v", typ)
+ }
+
+ in, ok := m["A"].(map[string]interface{})
+ if !ok {
+ t.Error("Map nested structs is not available in the map")
+ }
+
+ if name := in["Name"].(string); name != "example" {
+ t.Errorf("Map nested struct's name field should give example, got: %s", name)
+ }
+}
+
+func TestMap_NestedMapWithStructValues(t *testing.T) {
+ type A struct {
+ Name string
+ }
+
+ type B struct {
+ A map[string]*A
+ }
+
+ a := &A{Name: "example"}
+
+ b := &B{
+ A: map[string]*A{
+ "example_key": a,
+ },
+ }
+
+ m := Map(b)
+
+ if typ := reflect.TypeOf(m).Kind(); typ != reflect.Map {
+ t.Errorf("Map should return a map type, got: %v", typ)
+ }
+
+ in, ok := m["A"].(map[string]interface{})
+ if !ok {
+ t.Errorf("Nested type of map should be of type map[string]interface{}, have %T", m["A"])
+ }
+
+ example := in["example_key"].(map[string]interface{})
+ if name := example["Name"].(string); name != "example" {
+ t.Errorf("Map nested struct's name field should give example, got: %s", name)
+ }
+}
+
+func TestMap_NestedMapWithStringValues(t *testing.T) {
+ type B struct {
+ Foo map[string]string
+ }
+
+ type A struct {
+ B *B
+ }
+
+ b := &B{
+ Foo: map[string]string{
+ "example_key": "example",
+ },
+ }
+
+ a := &A{B: b}
+
+ m := Map(a)
+
+ if typ := reflect.TypeOf(m).Kind(); typ != reflect.Map {
+ t.Errorf("Map should return a map type, got: %v", typ)
+ }
+
+ in, ok := m["B"].(map[string]interface{})
+ if !ok {
+ t.Errorf("Nested type of map should be of type map[string]interface{}, have %T", m["B"])
+ }
+
+ foo := in["Foo"].(map[string]string)
+ if name := foo["example_key"]; name != "example" {
+ t.Errorf("Map nested struct's name field should give example, got: %s", name)
+ }
+}
+func TestMap_NestedMapWithInterfaceValues(t *testing.T) {
+ type B struct {
+ Foo map[string]interface{}
+ }
+
+ type A struct {
+ B *B
+ }
+
+ b := &B{
+ Foo: map[string]interface{}{
+ "example_key": "example",
+ },
+ }
+
+ a := &A{B: b}
+
+ m := Map(a)
+
+ if typ := reflect.TypeOf(m).Kind(); typ != reflect.Map {
+ t.Errorf("Map should return a map type, got: %v", typ)
+ }
+
+ in, ok := m["B"].(map[string]interface{})
+ if !ok {
+ t.Errorf("Nested type of map should be of type map[string]interface{}, have %T", m["B"])
+ }
+
+ foo := in["Foo"].(map[string]interface{})
+ if name := foo["example_key"]; name != "example" {
+ t.Errorf("Map nested struct's name field should give example, got: %s", name)
+ }
+}
+
+func TestMap_NestedMapWithSliceIntValues(t *testing.T) {
+ type B struct {
+ Foo map[string][]int
+ }
+
+ type A struct {
+ B *B
+ }
+
+ b := &B{
+ Foo: map[string][]int{
+ "example_key": []int{80},
+ },
+ }
+
+ a := &A{B: b}
+
+ m := Map(a)
+
+ if typ := reflect.TypeOf(m).Kind(); typ != reflect.Map {
+ t.Errorf("Map should return a map type, got: %v", typ)
+ }
+
+ in, ok := m["B"].(map[string]interface{})
+ if !ok {
+ t.Errorf("Nested type of map should be of type map[string]interface{}, have %T", m["B"])
+ }
+
+ foo := in["Foo"].(map[string][]int)
+ if name := foo["example_key"]; name[0] != 80 {
+ t.Errorf("Map nested struct's name field should give example, got: %s", name)
+ }
+}
+
+func TestMap_NestedMapWithSliceStructValues(t *testing.T) {
+ type address struct {
+ Country string `structs:"country"`
+ }
+
+ type B struct {
+ Foo map[string][]address
+ }
+
+ type A struct {
+ B *B
+ }
+
+ b := &B{
+ Foo: map[string][]address{
+ "example_key": []address{
+ {Country: "Turkey"},
+ },
+ },
+ }
+
+ a := &A{B: b}
+ m := Map(a)
+
+ if typ := reflect.TypeOf(m).Kind(); typ != reflect.Map {
+ t.Errorf("Map should return a map type, got: %v", typ)
+ }
+
+ in, ok := m["B"].(map[string]interface{})
+ if !ok {
+ t.Errorf("Nested type of map should be of type map[string]interface{}, have %T", m["B"])
+ }
+
+ foo := in["Foo"].(map[string]interface{})
+
+ addresses := foo["example_key"].([]interface{})
+
+ addr, ok := addresses[0].(map[string]interface{})
+ if !ok {
+ t.Errorf("Nested type of map should be of type map[string]interface{}, have %T", m["B"])
+ }
+
+ if _, exists := addr["country"]; !exists {
+ t.Errorf("Expecting country, but found Country")
+ }
+}
+
+func TestMap_NestedSliceWithStructValues(t *testing.T) {
+ type address struct {
+ Country string `structs:"customCountryName"`
+ }
+
+ type person struct {
+ Name string `structs:"name"`
+ Addresses []address `structs:"addresses"`
+ }
+
+ p := person{
+ Name: "test",
+ Addresses: []address{
+ address{Country: "England"},
+ address{Country: "Italy"},
+ },
+ }
+ mp := Map(p)
+
+ mpAddresses := mp["addresses"].([]interface{})
+ if _, exists := mpAddresses[0].(map[string]interface{})["Country"]; exists {
+ t.Errorf("Expecting customCountryName, but found Country")
+ }
+
+ if _, exists := mpAddresses[0].(map[string]interface{})["customCountryName"]; !exists {
+ t.Errorf("customCountryName key not found")
+ }
+}
+
+func TestMap_NestedSliceWithPointerOfStructValues(t *testing.T) {
+ type address struct {
+ Country string `structs:"customCountryName"`
+ }
+
+ type person struct {
+ Name string `structs:"name"`
+ Addresses []*address `structs:"addresses"`
+ }
+
+ p := person{
+ Name: "test",
+ Addresses: []*address{
+ &address{Country: "England"},
+ &address{Country: "Italy"},
+ },
+ }
+ mp := Map(p)
+
+ mpAddresses := mp["addresses"].([]interface{})
+ if _, exists := mpAddresses[0].(map[string]interface{})["Country"]; exists {
+ t.Errorf("Expecting customCountryName, but found Country")
+ }
+
+ if _, exists := mpAddresses[0].(map[string]interface{})["customCountryName"]; !exists {
+ t.Errorf("customCountryName key not found")
+ }
+}
+
+func TestMap_NestedSliceWithIntValues(t *testing.T) {
+ type person struct {
+ Name string `structs:"name"`
+ Ports []int `structs:"ports"`
+ }
+
+ p := person{
+ Name: "test",
+ Ports: []int{80},
+ }
+ m := Map(p)
+
+ ports, ok := m["ports"].([]int)
+ if !ok {
+ t.Errorf("Nested type of map should be of type []int, have %T", m["ports"])
+ }
+
+ if ports[0] != 80 {
+ t.Errorf("Map nested struct's ports field should give 80, got: %v", ports)
+ }
+}
+
+func TestMap_Anonymous(t *testing.T) {
+ type A struct {
+ Name string
+ }
+ a := &A{Name: "example"}
+
+ type B struct {
+ *A
+ }
+ b := &B{}
+ b.A = a
+
+ m := Map(b)
+
+ if typ := reflect.TypeOf(m).Kind(); typ != reflect.Map {
+ t.Errorf("Map should return a map type, got: %v", typ)
+ }
+
+ in, ok := m["A"].(map[string]interface{})
+ if !ok {
+ t.Error("Embedded structs is not available in the map")
+ }
+
+ if name := in["Name"].(string); name != "example" {
+ t.Errorf("Embedded A struct's Name field should give example, got: %s", name)
+ }
+}
+
+func TestMap_Flatnested(t *testing.T) {
+ type A struct {
+ Name string
+ }
+ a := A{Name: "example"}
+
+ type B struct {
+ A `structs:",flatten"`
+ C int
+ }
+ b := &B{C: 123}
+ b.A = a
+
+ m := Map(b)
+
+ _, ok := m["A"].(map[string]interface{})
+ if ok {
+ t.Error("Embedded A struct with tag flatten has to be flat in the map")
+ }
+
+ expectedMap := map[string]interface{}{"Name": "example", "C": 123}
+ if !reflect.DeepEqual(m, expectedMap) {
+ t.Errorf("The exprected map %+v does't correspond to %+v", expectedMap, m)
+ }
+
+}
+
+func TestMap_FlatnestedOverwrite(t *testing.T) {
+ type A struct {
+ Name string
+ }
+ a := A{Name: "example"}
+
+ type B struct {
+ A `structs:",flatten"`
+ Name string
+ C int
+ }
+ b := &B{C: 123, Name: "bName"}
+ b.A = a
+
+ m := Map(b)
+
+ _, ok := m["A"].(map[string]interface{})
+ if ok {
+ t.Error("Embedded A struct with tag flatten has to be flat in the map")
+ }
+
+ expectedMap := map[string]interface{}{"Name": "bName", "C": 123}
+ if !reflect.DeepEqual(m, expectedMap) {
+ t.Errorf("The exprected map %+v does't correspond to %+v", expectedMap, m)
+ }
+}
+
+func TestMap_TimeField(t *testing.T) {
+ type A struct {
+ CreatedAt time.Time
+ }
+
+ a := &A{CreatedAt: time.Now().UTC()}
+ m := Map(a)
+
+ _, ok := m["CreatedAt"].(time.Time)
+ if !ok {
+ t.Error("Time field must be final")
+ }
+}
+
+func TestFillMap(t *testing.T) {
+ var T = struct {
+ A string
+ B int
+ C bool
+ }{
+ A: "a-value",
+ B: 2,
+ C: true,
+ }
+
+ a := make(map[string]interface{}, 0)
+ FillMap(T, a)
+
+ // we have three fields
+ if len(a) != 3 {
+ t.Errorf("FillMap should fill a map of len 3, got: %d", len(a))
+ }
+
+ inMap := func(val interface{}) bool {
+ for _, v := range a {
+ if reflect.DeepEqual(v, val) {
+ return true
+ }
+ }
+
+ return false
+ }
+
+ for _, val := range []interface{}{"a-value", 2, true} {
+ if !inMap(val) {
+ t.Errorf("FillMap should have the value %v", val)
+ }
+ }
+}
+
+func TestFillMap_Nil(t *testing.T) {
+ var T = struct {
+ A string
+ B int
+ C bool
+ }{
+ A: "a-value",
+ B: 2,
+ C: true,
+ }
+
+ defer func() {
+ err := recover()
+ if err != nil {
+ t.Error("FillMap should not panic if a nil map is passed")
+ }
+ }()
+
+ // nil should no
+ FillMap(T, nil)
+}
+func TestStruct(t *testing.T) {
+ var T = struct{}{}
+
+ if !IsStruct(T) {
+ t.Errorf("T should be a struct, got: %T", T)
+ }
+
+ if !IsStruct(&T) {
+ t.Errorf("T should be a struct, got: %T", T)
+ }
+
+}
+
+func TestValues(t *testing.T) {
+ var T = struct {
+ A string
+ B int
+ C bool
+ }{
+ A: "a-value",
+ B: 2,
+ C: true,
+ }
+
+ s := Values(T)
+
+ if typ := reflect.TypeOf(s).Kind(); typ != reflect.Slice {
+ t.Errorf("Values should return a slice type, got: %v", typ)
+ }
+
+ inSlice := func(val interface{}) bool {
+ for _, v := range s {
+ if reflect.DeepEqual(v, val) {
+ return true
+ }
+ }
+ return false
+ }
+
+ for _, val := range []interface{}{"a-value", 2, true} {
+ if !inSlice(val) {
+ t.Errorf("Values should have the value %v", val)
+ }
+ }
+}
+
+func TestValues_OmitEmpty(t *testing.T) {
+ type A struct {
+ Name string
+ Value int `structs:",omitempty"`
+ }
+
+ a := A{Name: "example"}
+ s := Values(a)
+
+ if len(s) != 1 {
+ t.Errorf("Values of omitted empty fields should be not counted")
+ }
+
+ if s[0].(string) != "example" {
+ t.Errorf("Values of omitted empty fields should left the value example")
+ }
+}
+
+func TestValues_OmitNested(t *testing.T) {
+ type A struct {
+ Name string
+ Value int
+ }
+
+ a := A{
+ Name: "example",
+ Value: 123,
+ }
+
+ type B struct {
+ A A `structs:",omitnested"`
+ C int
+ }
+ b := &B{A: a, C: 123}
+
+ s := Values(b)
+
+ if len(s) != 2 {
+ t.Errorf("Values of omitted nested struct should be not counted")
+ }
+
+ inSlice := func(val interface{}) bool {
+ for _, v := range s {
+ if reflect.DeepEqual(v, val) {
+ return true
+ }
+ }
+ return false
+ }
+
+ for _, val := range []interface{}{123, a} {
+ if !inSlice(val) {
+ t.Errorf("Values should have the value %v", val)
+ }
+ }
+}
+
+func TestValues_Nested(t *testing.T) {
+ type A struct {
+ Name string
+ }
+ a := A{Name: "example"}
+
+ type B struct {
+ A A
+ C int
+ }
+ b := &B{A: a, C: 123}
+
+ s := Values(b)
+
+ inSlice := func(val interface{}) bool {
+ for _, v := range s {
+ if reflect.DeepEqual(v, val) {
+ return true
+ }
+ }
+ return false
+ }
+
+ for _, val := range []interface{}{"example", 123} {
+ if !inSlice(val) {
+ t.Errorf("Values should have the value %v", val)
+ }
+ }
+}
+
+func TestValues_Anonymous(t *testing.T) {
+ type A struct {
+ Name string
+ }
+ a := A{Name: "example"}
+
+ type B struct {
+ A
+ C int
+ }
+ b := &B{C: 123}
+ b.A = a
+
+ s := Values(b)
+
+ inSlice := func(val interface{}) bool {
+ for _, v := range s {
+ if reflect.DeepEqual(v, val) {
+ return true
+ }
+ }
+ return false
+ }
+
+ for _, val := range []interface{}{"example", 123} {
+ if !inSlice(val) {
+ t.Errorf("Values should have the value %v", val)
+ }
+ }
+}
+
+func TestNames(t *testing.T) {
+ var T = struct {
+ A string
+ B int
+ C bool
+ }{
+ A: "a-value",
+ B: 2,
+ C: true,
+ }
+
+ s := Names(T)
+
+ if len(s) != 3 {
+ t.Errorf("Names should return a slice of len 3, got: %d", len(s))
+ }
+
+ inSlice := func(val string) bool {
+ for _, v := range s {
+ if reflect.DeepEqual(v, val) {
+ return true
+ }
+ }
+ return false
+ }
+
+ for _, val := range []string{"A", "B", "C"} {
+ if !inSlice(val) {
+ t.Errorf("Names should have the value %v", val)
+ }
+ }
+}
+
+func TestFields(t *testing.T) {
+ var T = struct {
+ A string
+ B int
+ C bool
+ }{
+ A: "a-value",
+ B: 2,
+ C: true,
+ }
+
+ s := Fields(T)
+
+ if len(s) != 3 {
+ t.Errorf("Fields should return a slice of len 3, got: %d", len(s))
+ }
+
+ inSlice := func(val string) bool {
+ for _, v := range s {
+ if reflect.DeepEqual(v.Name(), val) {
+ return true
+ }
+ }
+ return false
+ }
+
+ for _, val := range []string{"A", "B", "C"} {
+ if !inSlice(val) {
+ t.Errorf("Fields should have the value %v", val)
+ }
+ }
+}
+
+func TestFields_OmitNested(t *testing.T) {
+ type A struct {
+ Name string
+ Enabled bool
+ }
+ a := A{Name: "example"}
+
+ type B struct {
+ A A
+ C int
+ Value string `structs:"-"`
+ Number int
+ }
+ b := &B{A: a, C: 123}
+
+ s := Fields(b)
+
+ if len(s) != 3 {
+ t.Errorf("Fields should omit nested struct. Expecting 2 got: %d", len(s))
+ }
+
+ inSlice := func(val interface{}) bool {
+ for _, v := range s {
+ if reflect.DeepEqual(v.Name(), val) {
+ return true
+ }
+ }
+ return false
+ }
+
+ for _, val := range []interface{}{"A", "C"} {
+ if !inSlice(val) {
+ t.Errorf("Fields should have the value %v", val)
+ }
+ }
+}
+
+func TestFields_Anonymous(t *testing.T) {
+ type A struct {
+ Name string
+ }
+ a := A{Name: "example"}
+
+ type B struct {
+ A
+ C int
+ }
+ b := &B{C: 123}
+ b.A = a
+
+ s := Fields(b)
+
+ inSlice := func(val interface{}) bool {
+ for _, v := range s {
+ if reflect.DeepEqual(v.Name(), val) {
+ return true
+ }
+ }
+ return false
+ }
+
+ for _, val := range []interface{}{"A", "C"} {
+ if !inSlice(val) {
+ t.Errorf("Fields should have the value %v", val)
+ }
+ }
+}
+
+func TestIsZero(t *testing.T) {
+ var T = struct {
+ A string
+ B int
+ C bool `structs:"-"`
+ D []string
+ }{}
+
+ ok := IsZero(T)
+ if !ok {
+ t.Error("IsZero should return true because none of the fields are initialized.")
+ }
+
+ var X = struct {
+ A string
+ F *bool
+ }{
+ A: "a-value",
+ }
+
+ ok = IsZero(X)
+ if ok {
+ t.Error("IsZero should return false because A is initialized")
+ }
+
+ var Y = struct {
+ A string
+ B int
+ }{
+ A: "a-value",
+ B: 123,
+ }
+
+ ok = IsZero(Y)
+ if ok {
+ t.Error("IsZero should return false because A and B is initialized")
+ }
+}
+
+func TestIsZero_OmitNested(t *testing.T) {
+ type A struct {
+ Name string
+ D string
+ }
+ a := A{Name: "example"}
+
+ type B struct {
+ A A `structs:",omitnested"`
+ C int
+ }
+ b := &B{A: a, C: 123}
+
+ ok := IsZero(b)
+ if ok {
+ t.Error("IsZero should return false because A, B and C are initialized")
+ }
+
+ aZero := A{}
+ bZero := &B{A: aZero}
+
+ ok = IsZero(bZero)
+ if !ok {
+ t.Error("IsZero should return true because neither A nor B is initialized")
+ }
+
+}
+
+func TestIsZero_Nested(t *testing.T) {
+ type A struct {
+ Name string
+ D string
+ }
+ a := A{Name: "example"}
+
+ type B struct {
+ A A
+ C int
+ }
+ b := &B{A: a, C: 123}
+
+ ok := IsZero(b)
+ if ok {
+ t.Error("IsZero should return false because A, B and C are initialized")
+ }
+
+ aZero := A{}
+ bZero := &B{A: aZero}
+
+ ok = IsZero(bZero)
+ if !ok {
+ t.Error("IsZero should return true because neither A nor B is initialized")
+ }
+
+}
+
+func TestIsZero_Anonymous(t *testing.T) {
+ type A struct {
+ Name string
+ D string
+ }
+ a := A{Name: "example"}
+
+ type B struct {
+ A
+ C int
+ }
+ b := &B{C: 123}
+ b.A = a
+
+ ok := IsZero(b)
+ if ok {
+ t.Error("IsZero should return false because A, B and C are initialized")
+ }
+
+ aZero := A{}
+ bZero := &B{}
+ bZero.A = aZero
+
+ ok = IsZero(bZero)
+ if !ok {
+ t.Error("IsZero should return true because neither A nor B is initialized")
+ }
+}
+
+func TestHasZero(t *testing.T) {
+ var T = struct {
+ A string
+ B int
+ C bool `structs:"-"`
+ D []string
+ }{
+ A: "a-value",
+ B: 2,
+ }
+
+ ok := HasZero(T)
+ if !ok {
+ t.Error("HasZero should return true because A and B are initialized.")
+ }
+
+ var X = struct {
+ A string
+ F *bool
+ }{
+ A: "a-value",
+ }
+
+ ok = HasZero(X)
+ if !ok {
+ t.Error("HasZero should return true because A is initialized")
+ }
+
+ var Y = struct {
+ A string
+ B int
+ }{
+ A: "a-value",
+ B: 123,
+ }
+
+ ok = HasZero(Y)
+ if ok {
+ t.Error("HasZero should return false because A and B is initialized")
+ }
+}
+
+func TestHasZero_OmitNested(t *testing.T) {
+ type A struct {
+ Name string
+ D string
+ }
+ a := A{Name: "example"}
+
+ type B struct {
+ A A `structs:",omitnested"`
+ C int
+ }
+ b := &B{A: a, C: 123}
+
+ // Because the Field A inside B is omitted HasZero should return false
+ // because it will stop iterating deeper andnot going to lookup for D
+ ok := HasZero(b)
+ if ok {
+ t.Error("HasZero should return false because A and C are initialized")
+ }
+}
+
+func TestHasZero_Nested(t *testing.T) {
+ type A struct {
+ Name string
+ D string
+ }
+ a := A{Name: "example"}
+
+ type B struct {
+ A A
+ C int
+ }
+ b := &B{A: a, C: 123}
+
+ ok := HasZero(b)
+ if !ok {
+ t.Error("HasZero should return true because D is not initialized")
+ }
+}
+
+func TestHasZero_Anonymous(t *testing.T) {
+ type A struct {
+ Name string
+ D string
+ }
+ a := A{Name: "example"}
+
+ type B struct {
+ A
+ C int
+ }
+ b := &B{C: 123}
+ b.A = a
+
+ ok := HasZero(b)
+ if !ok {
+ t.Error("HasZero should return false because D is not initialized")
+ }
+}
+
+func TestName(t *testing.T) {
+ type Foo struct {
+ A string
+ B bool
+ }
+ f := &Foo{}
+
+ n := Name(f)
+ if n != "Foo" {
+ t.Errorf("Name should return Foo, got: %s", n)
+ }
+
+ unnamed := struct{ Name string }{Name: "Cihangir"}
+ m := Name(unnamed)
+ if m != "" {
+ t.Errorf("Name should return empty string for unnamed struct, got: %s", n)
+ }
+
+ defer func() {
+ err := recover()
+ if err == nil {
+ t.Error("Name should panic if a non struct is passed")
+ }
+ }()
+
+ Name([]string{})
+}
+
+func TestNestedNilPointer(t *testing.T) {
+ type Collar struct {
+ Engraving string
+ }
+
+ type Dog struct {
+ Name string
+ Collar *Collar
+ }
+
+ type Person struct {
+ Name string
+ Dog *Dog
+ }
+
+ person := &Person{
+ Name: "John",
+ }
+
+ personWithDog := &Person{
+ Name: "Ron",
+ Dog: &Dog{
+ Name: "Rover",
+ },
+ }
+
+ personWithDogWithCollar := &Person{
+ Name: "Kon",
+ Dog: &Dog{
+ Name: "Ruffles",
+ Collar: &Collar{
+ Engraving: "If lost, call Kon",
+ },
+ },
+ }
+
+ defer func() {
+ err := recover()
+ if err != nil {
+ fmt.Printf("err %+v\n", err)
+ t.Error("Internal nil pointer should not panic")
+ }
+ }()
+
+ _ = Map(person) // Panics
+ _ = Map(personWithDog) // Panics
+ _ = Map(personWithDogWithCollar) // Doesn't panic
+}
+
+func TestSetValueOnNestedField(t *testing.T) {
+ type Base struct {
+ ID int
+ }
+
+ type User struct {
+ Base
+ Name string
+ }
+
+ u := User{}
+ s := New(&u)
+ f := s.Field("Base").Field("ID")
+ err := f.Set(10)
+ if err != nil {
+ t.Errorf("Error %v", err)
+ }
+ if f.Value().(int) != 10 {
+ t.Errorf("Value should be equal to 10, got %v", f.Value())
+ }
+}
+
+type Person struct {
+ Name string
+ Age int
+}
+
+func (p *Person) String() string {
+ return fmt.Sprintf("%s(%d)", p.Name, p.Age)
+}
+
+func TestTagWithStringOption(t *testing.T) {
+
+ type Address struct {
+ Country string `json:"country"`
+ Person *Person `json:"person,string"`
+ }
+
+ person := &Person{
+ Name: "John",
+ Age: 23,
+ }
+
+ address := &Address{
+ Country: "EU",
+ Person: person,
+ }
+
+ defer func() {
+ err := recover()
+ if err != nil {
+ fmt.Printf("err %+v\n", err)
+ t.Error("Internal nil pointer should not panic")
+ }
+ }()
+
+ s := New(address)
+
+ s.TagName = "json"
+ m := s.Map()
+
+ if m["person"] != person.String() {
+ t.Errorf("Value for field person should be %s, got: %s", person.String(), m["person"])
+ }
+
+ vs := s.Values()
+ if vs[1] != person.String() {
+ t.Errorf("Value for 2nd field (person) should be %T, got: %T", person.String(), vs[1])
+ }
+}
+
+type Animal struct {
+ Name string
+ Age int
+}
+
+type Dog struct {
+ Animal *Animal `json:"animal,string"`
+}
+
+func TestNonStringerTagWithStringOption(t *testing.T) {
+ a := &Animal{
+ Name: "Fluff",
+ Age: 4,
+ }
+
+ d := &Dog{
+ Animal: a,
+ }
+
+ defer func() {
+ err := recover()
+ if err != nil {
+ fmt.Printf("err %+v\n", err)
+ t.Error("Internal nil pointer should not panic")
+ }
+ }()
+
+ s := New(d)
+
+ s.TagName = "json"
+ m := s.Map()
+
+ if _, exists := m["animal"]; exists {
+ t.Errorf("Value for field Animal should not exist")
+ }
+}
+
+func TestMap_InterfaceValue(t *testing.T) {
+ type TestStruct struct {
+ A interface{}
+ }
+
+ expected := []byte("test value")
+
+ a := TestStruct{A: expected}
+ s := Map(a)
+ if !reflect.DeepEqual(s["A"], expected) {
+ t.Errorf("Value does not match expected: %q != %q", s["A"], expected)
+ }
+}
+
+func TestPointer2Pointer(t *testing.T) {
+ defer func() {
+ err := recover()
+ if err != nil {
+ fmt.Printf("err %+v\n", err)
+ t.Error("Internal nil pointer should not panic")
+ }
+ }()
+ a := &Animal{
+ Name: "Fluff",
+ Age: 4,
+ }
+ _ = Map(&a)
+
+ b := &a
+ _ = Map(&b)
+
+ c := &b
+ _ = Map(&c)
+}
+
+func TestMap_InterfaceTypeWithMapValue(t *testing.T) {
+ type A struct {
+ Name string `structs:"name"`
+ Ip string `structs:"ip"`
+ Query string `structs:"query"`
+ Payload interface{} `structs:"payload"`
+ }
+
+ a := A{
+ Name: "test",
+ Ip: "127.0.0.1",
+ Query: "",
+ Payload: map[string]string{"test_param": "test_param"},
+ }
+
+ defer func() {
+ err := recover()
+ if err != nil {
+ t.Error("Converting Map with an interface{} type with map value should not panic")
+ }
+ }()
+
+ _ = Map(a)
+}
diff --git a/vendor/github.com/fatih/structs/tags.go b/vendor/github.com/fatih/structs/tags.go
new file mode 100644
index 0000000..8859341
--- /dev/null
+++ b/vendor/github.com/fatih/structs/tags.go
@@ -0,0 +1,32 @@
+package structs
+
+import "strings"
+
+// tagOptions contains a slice of tag options
+type tagOptions []string
+
+// Has returns true if the given optiton is available in tagOptions
+func (t tagOptions) Has(opt string) bool {
+ for _, tagOpt := range t {
+ if tagOpt == opt {
+ return true
+ }
+ }
+
+ return false
+}
+
+// parseTag splits a struct field's tag into its name and a list of options
+// which comes after a name. A tag is in the form of: "name,option1,option2".
+// The name can be neglectected.
+func parseTag(tag string) (string, tagOptions) {
+ // tag is one of followings:
+ // ""
+ // "name"
+ // "name,opt"
+ // "name,opt,opt2"
+ // ",opt"
+
+ res := strings.Split(tag, ",")
+ return res[0], res[1:]
+}
diff --git a/vendor/github.com/fatih/structs/tags_test.go b/vendor/github.com/fatih/structs/tags_test.go
new file mode 100644
index 0000000..5d12724
--- /dev/null
+++ b/vendor/github.com/fatih/structs/tags_test.go
@@ -0,0 +1,46 @@
+package structs
+
+import "testing"
+
+func TestParseTag_Name(t *testing.T) {
+ tags := []struct {
+ tag string
+ has bool
+ }{
+ {"", false},
+ {"name", true},
+ {"name,opt", true},
+ {"name , opt, opt2", false}, // has a single whitespace
+ {", opt, opt2", false},
+ }
+
+ for _, tag := range tags {
+ name, _ := parseTag(tag.tag)
+
+ if (name != "name") && tag.has {
+ t.Errorf("Parse tag should return name: %#v", tag)
+ }
+ }
+}
+
+func TestParseTag_Opts(t *testing.T) {
+ tags := []struct {
+ opts string
+ has bool
+ }{
+ {"name", false},
+ {"name,opt", true},
+ {"name , opt, opt2", false}, // has a single whitespace
+ {",opt, opt2", true},
+ {", opt3, opt4", false},
+ }
+
+ // search for "opt"
+ for _, tag := range tags {
+ _, opts := parseTag(tag.opts)
+
+ if opts.Has("opt") != tag.has {
+ t.Errorf("Tag opts should have opt: %#v", tag)
+ }
+ }
+}
diff --git a/vendor/github.com/hashicorp/errwrap/LICENSE b/vendor/github.com/hashicorp/errwrap/LICENSE
new file mode 100644
index 0000000..c33dcc7
--- /dev/null
+++ b/vendor/github.com/hashicorp/errwrap/LICENSE
@@ -0,0 +1,354 @@
+Mozilla Public License, version 2.0
+
+1. Definitions
+
+1.1. “Contributor”
+
+ means each individual or legal entity that creates, contributes to the
+ creation of, or owns Covered Software.
+
+1.2. “Contributor Version”
+
+ means the combination of the Contributions of others (if any) used by a
+ Contributor and that particular Contributor’s Contribution.
+
+1.3. “Contribution”
+
+ means Covered Software of a particular Contributor.
+
+1.4. “Covered Software”
+
+ means Source Code Form to which the initial Contributor has attached the
+ notice in Exhibit A, the Executable Form of such Source Code Form, and
+ Modifications of such Source Code Form, in each case including portions
+ thereof.
+
+1.5. “Incompatible With Secondary Licenses”
+ means
+
+ a. that the initial Contributor has attached the notice described in
+ Exhibit B to the Covered Software; or
+
+ b. that the Covered Software was made available under the terms of version
+ 1.1 or earlier of the License, but not also under the terms of a
+ Secondary License.
+
+1.6. “Executable Form”
+
+ means any form of the work other than Source Code Form.
+
+1.7. “Larger Work”
+
+ means a work that combines Covered Software with other material, in a separate
+ file or files, that is not Covered Software.
+
+1.8. “License”
+
+ means this document.
+
+1.9. “Licensable”
+
+ means having the right to grant, to the maximum extent possible, whether at the
+ time of the initial grant or subsequently, any and all of the rights conveyed by
+ this License.
+
+1.10. “Modifications”
+
+ means any of the following:
+
+ a. any file in Source Code Form that results from an addition to, deletion
+ from, or modification of the contents of Covered Software; or
+
+ b. any new file in Source Code Form that contains any Covered Software.
+
+1.11. “Patent Claims” of a Contributor
+
+ means any patent claim(s), including without limitation, method, process,
+ and apparatus claims, in any patent Licensable by such Contributor that
+ would be infringed, but for the grant of the License, by the making,
+ using, selling, offering for sale, having made, import, or transfer of
+ either its Contributions or its Contributor Version.
+
+1.12. “Secondary License”
+
+ means either the GNU General Public License, Version 2.0, the GNU Lesser
+ General Public License, Version 2.1, the GNU Affero General Public
+ License, Version 3.0, or any later versions of those licenses.
+
+1.13. “Source Code Form”
+
+ means the form of the work preferred for making modifications.
+
+1.14. “You” (or “Your”)
+
+ means an individual or a legal entity exercising rights under this
+ License. For legal entities, “You” includes any entity that controls, is
+ controlled by, or is under common control with You. For purposes of this
+ definition, “control” means (a) the power, direct or indirect, to cause
+ the direction or management of such entity, whether by contract or
+ otherwise, or (b) ownership of more than fifty percent (50%) of the
+ outstanding shares or beneficial ownership of such entity.
+
+
+2. License Grants and Conditions
+
+2.1. Grants
+
+ Each Contributor hereby grants You a world-wide, royalty-free,
+ non-exclusive license:
+
+ a. under intellectual property rights (other than patent or trademark)
+ Licensable by such Contributor to use, reproduce, make available,
+ modify, display, perform, distribute, and otherwise exploit its
+ Contributions, either on an unmodified basis, with Modifications, or as
+ part of a Larger Work; and
+
+ b. under Patent Claims of such Contributor to make, use, sell, offer for
+ sale, have made, import, and otherwise transfer either its Contributions
+ or its Contributor Version.
+
+2.2. Effective Date
+
+ The licenses granted in Section 2.1 with respect to any Contribution become
+ effective for each Contribution on the date the Contributor first distributes
+ such Contribution.
+
+2.3. Limitations on Grant Scope
+
+ The licenses granted in this Section 2 are the only rights granted under this
+ License. No additional rights or licenses will be implied from the distribution
+ or licensing of Covered Software under this License. Notwithstanding Section
+ 2.1(b) above, no patent license is granted by a Contributor:
+
+ a. for any code that a Contributor has removed from Covered Software; or
+
+ b. for infringements caused by: (i) Your and any other third party’s
+ modifications of Covered Software, or (ii) the combination of its
+ Contributions with other software (except as part of its Contributor
+ Version); or
+
+ c. under Patent Claims infringed by Covered Software in the absence of its
+ Contributions.
+
+ This License does not grant any rights in the trademarks, service marks, or
+ logos of any Contributor (except as may be necessary to comply with the
+ notice requirements in Section 3.4).
+
+2.4. Subsequent Licenses
+
+ No Contributor makes additional grants as a result of Your choice to
+ distribute the Covered Software under a subsequent version of this License
+ (see Section 10.2) or under the terms of a Secondary License (if permitted
+ under the terms of Section 3.3).
+
+2.5. Representation
+
+ Each Contributor represents that the Contributor believes its Contributions
+ are its original creation(s) or it has sufficient rights to grant the
+ rights to its Contributions conveyed by this License.
+
+2.6. Fair Use
+
+ This License is not intended to limit any rights You have under applicable
+ copyright doctrines of fair use, fair dealing, or other equivalents.
+
+2.7. Conditions
+
+ Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in
+ Section 2.1.
+
+
+3. Responsibilities
+
+3.1. Distribution of Source Form
+
+ All distribution of Covered Software in Source Code Form, including any
+ Modifications that You create or to which You contribute, must be under the
+ terms of this License. You must inform recipients that the Source Code Form
+ of the Covered Software is governed by the terms of this License, and how
+ they can obtain a copy of this License. You may not attempt to alter or
+ restrict the recipients’ rights in the Source Code Form.
+
+3.2. Distribution of Executable Form
+
+ If You distribute Covered Software in Executable Form then:
+
+ a. such Covered Software must also be made available in Source Code Form,
+ as described in Section 3.1, and You must inform recipients of the
+ Executable Form how they can obtain a copy of such Source Code Form by
+ reasonable means in a timely manner, at a charge no more than the cost
+ of distribution to the recipient; and
+
+ b. You may distribute such Executable Form under the terms of this License,
+ or sublicense it under different terms, provided that the license for
+ the Executable Form does not attempt to limit or alter the recipients’
+ rights in the Source Code Form under this License.
+
+3.3. Distribution of a Larger Work
+
+ You may create and distribute a Larger Work under terms of Your choice,
+ provided that You also comply with the requirements of this License for the
+ Covered Software. If the Larger Work is a combination of Covered Software
+ with a work governed by one or more Secondary Licenses, and the Covered
+ Software is not Incompatible With Secondary Licenses, this License permits
+ You to additionally distribute such Covered Software under the terms of
+ such Secondary License(s), so that the recipient of the Larger Work may, at
+ their option, further distribute the Covered Software under the terms of
+ either this License or such Secondary License(s).
+
+3.4. Notices
+
+ You may not remove or alter the substance of any license notices (including
+ copyright notices, patent notices, disclaimers of warranty, or limitations
+ of liability) contained within the Source Code Form of the Covered
+ Software, except that You may alter any license notices to the extent
+ required to remedy known factual inaccuracies.
+
+3.5. Application of Additional Terms
+
+ You may choose to offer, and to charge a fee for, warranty, support,
+ indemnity or liability obligations to one or more recipients of Covered
+ Software. However, You may do so only on Your own behalf, and not on behalf
+ of any Contributor. You must make it absolutely clear that any such
+ warranty, support, indemnity, or liability obligation is offered by You
+ alone, and You hereby agree to indemnify every Contributor for any
+ liability incurred by such Contributor as a result of warranty, support,
+ indemnity or liability terms You offer. You may include additional
+ disclaimers of warranty and limitations of liability specific to any
+ jurisdiction.
+
+4. Inability to Comply Due to Statute or Regulation
+
+ If it is impossible for You to comply with any of the terms of this License
+ with respect to some or all of the Covered Software due to statute, judicial
+ order, or regulation then You must: (a) comply with the terms of this License
+ to the maximum extent possible; and (b) describe the limitations and the code
+ they affect. Such description must be placed in a text file included with all
+ distributions of the Covered Software under this License. Except to the
+ extent prohibited by statute or regulation, such description must be
+ sufficiently detailed for a recipient of ordinary skill to be able to
+ understand it.
+
+5. Termination
+
+5.1. The rights granted under this License will terminate automatically if You
+ fail to comply with any of its terms. However, if You become compliant,
+ then the rights granted under this License from a particular Contributor
+ are reinstated (a) provisionally, unless and until such Contributor
+ explicitly and finally terminates Your grants, and (b) on an ongoing basis,
+ if such Contributor fails to notify You of the non-compliance by some
+ reasonable means prior to 60 days after You have come back into compliance.
+ Moreover, Your grants from a particular Contributor are reinstated on an
+ ongoing basis if such Contributor notifies You of the non-compliance by
+ some reasonable means, this is the first time You have received notice of
+ non-compliance with this License from such Contributor, and You become
+ compliant prior to 30 days after Your receipt of the notice.
+
+5.2. If You initiate litigation against any entity by asserting a patent
+ infringement claim (excluding declaratory judgment actions, counter-claims,
+ and cross-claims) alleging that a Contributor Version directly or
+ indirectly infringes any patent, then the rights granted to You by any and
+ all Contributors for the Covered Software under Section 2.1 of this License
+ shall terminate.
+
+5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user
+ license agreements (excluding distributors and resellers) which have been
+ validly granted by You or Your distributors under this License prior to
+ termination shall survive termination.
+
+6. Disclaimer of Warranty
+
+ Covered Software is provided under this License on an “as is” basis, without
+ warranty of any kind, either expressed, implied, or statutory, including,
+ without limitation, warranties that the Covered Software is free of defects,
+ merchantable, fit for a particular purpose or non-infringing. The entire
+ risk as to the quality and performance of the Covered Software is with You.
+ Should any Covered Software prove defective in any respect, You (not any
+ Contributor) assume the cost of any necessary servicing, repair, or
+ correction. This disclaimer of warranty constitutes an essential part of this
+ License. No use of any Covered Software is authorized under this License
+ except under this disclaimer.
+
+7. Limitation of Liability
+
+ Under no circumstances and under no legal theory, whether tort (including
+ negligence), contract, or otherwise, shall any Contributor, or anyone who
+ distributes Covered Software as permitted above, be liable to You for any
+ direct, indirect, special, incidental, or consequential damages of any
+ character including, without limitation, damages for lost profits, loss of
+ goodwill, work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses, even if such party shall have been
+ informed of the possibility of such damages. This limitation of liability
+ shall not apply to liability for death or personal injury resulting from such
+ party’s negligence to the extent applicable law prohibits such limitation.
+ Some jurisdictions do not allow the exclusion or limitation of incidental or
+ consequential damages, so this exclusion and limitation may not apply to You.
+
+8. Litigation
+
+ Any litigation relating to this License may be brought only in the courts of
+ a jurisdiction where the defendant maintains its principal place of business
+ and such litigation shall be governed by laws of that jurisdiction, without
+ reference to its conflict-of-law provisions. Nothing in this Section shall
+ prevent a party’s ability to bring cross-claims or counter-claims.
+
+9. Miscellaneous
+
+ This License represents the complete agreement concerning the subject matter
+ hereof. If any provision of this License is held to be unenforceable, such
+ provision shall be reformed only to the extent necessary to make it
+ enforceable. Any law or regulation which provides that the language of a
+ contract shall be construed against the drafter shall not be used to construe
+ this License against a Contributor.
+
+
+10. Versions of the License
+
+10.1. New Versions
+
+ Mozilla Foundation is the license steward. Except as provided in Section
+ 10.3, no one other than the license steward has the right to modify or
+ publish new versions of this License. Each version will be given a
+ distinguishing version number.
+
+10.2. Effect of New Versions
+
+ You may distribute the Covered Software under the terms of the version of
+ the License under which You originally received the Covered Software, or
+ under the terms of any subsequent version published by the license
+ steward.
+
+10.3. Modified Versions
+
+ If you create software not governed by this License, and you want to
+ create a new license for such software, you may create and use a modified
+ version of this License if you rename the license and remove any
+ references to the name of the license steward (except to note that such
+ modified license differs from this License).
+
+10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses
+ If You choose to distribute Source Code Form that is Incompatible With
+ Secondary Licenses under the terms of this version of the License, the
+ notice described in Exhibit B of this License must be attached.
+
+Exhibit A - Source Code Form License Notice
+
+ This Source Code Form is subject to the
+ terms of the Mozilla Public License, v.
+ 2.0. If a copy of the MPL was not
+ distributed with this file, You can
+ obtain one at
+ http://mozilla.org/MPL/2.0/.
+
+If it is not possible or desirable to put the notice in a particular file, then
+You may include the notice in a location (such as a LICENSE file in a relevant
+directory) where a recipient would be likely to look for such a notice.
+
+You may add additional accurate notices of copyright ownership.
+
+Exhibit B - “Incompatible With Secondary Licenses” Notice
+
+ This Source Code Form is “Incompatible
+ With Secondary Licenses”, as defined by
+ the Mozilla Public License, v. 2.0.
+
diff --git a/vendor/github.com/hashicorp/errwrap/README.md b/vendor/github.com/hashicorp/errwrap/README.md
new file mode 100644
index 0000000..1c95f59
--- /dev/null
+++ b/vendor/github.com/hashicorp/errwrap/README.md
@@ -0,0 +1,89 @@
+# errwrap
+
+`errwrap` is a package for Go that formalizes the pattern of wrapping errors
+and checking if an error contains another error.
+
+There is a common pattern in Go of taking a returned `error` value and
+then wrapping it (such as with `fmt.Errorf`) before returning it. The problem
+with this pattern is that you completely lose the original `error` structure.
+
+Arguably the _correct_ approach is that you should make a custom structure
+implementing the `error` interface, and have the original error as a field
+on that structure, such [as this example](http://golang.org/pkg/os/#PathError).
+This is a good approach, but you have to know the entire chain of possible
+rewrapping that happens, when you might just care about one.
+
+`errwrap` formalizes this pattern (it doesn't matter what approach you use
+above) by giving a single interface for wrapping errors, checking if a specific
+error is wrapped, and extracting that error.
+
+## Installation and Docs
+
+Install using `go get github.com/hashicorp/errwrap`.
+
+Full documentation is available at
+http://godoc.org/github.com/hashicorp/errwrap
+
+## Usage
+
+#### Basic Usage
+
+Below is a very basic example of its usage:
+
+```go
+// A function that always returns an error, but wraps it, like a real
+// function might.
+func tryOpen() error {
+ _, err := os.Open("/i/dont/exist")
+ if err != nil {
+ return errwrap.Wrapf("Doesn't exist: {{err}}", err)
+ }
+
+ return nil
+}
+
+func main() {
+ err := tryOpen()
+
+ // We can use the Contains helpers to check if an error contains
+ // another error. It is safe to do this with a nil error, or with
+ // an error that doesn't even use the errwrap package.
+ if errwrap.Contains(err, ErrNotExist) {
+ // Do something
+ }
+ if errwrap.ContainsType(err, new(os.PathError)) {
+ // Do something
+ }
+
+ // Or we can use the associated `Get` functions to just extract
+ // a specific error. This would return nil if that specific error doesn't
+ // exist.
+ perr := errwrap.GetType(err, new(os.PathError))
+}
+```
+
+#### Custom Types
+
+If you're already making custom types that properly wrap errors, then
+you can get all the functionality of `errwraps.Contains` and such by
+implementing the `Wrapper` interface with just one function. Example:
+
+```go
+type AppError {
+ Code ErrorCode
+ Err error
+}
+
+func (e *AppError) WrappedErrors() []error {
+ return []error{e.Err}
+}
+```
+
+Now this works:
+
+```go
+err := &AppError{Err: fmt.Errorf("an error")}
+if errwrap.ContainsType(err, fmt.Errorf("")) {
+ // This will work!
+}
+```
diff --git a/vendor/github.com/hashicorp/errwrap/errwrap.go b/vendor/github.com/hashicorp/errwrap/errwrap.go
new file mode 100644
index 0000000..a733bef
--- /dev/null
+++ b/vendor/github.com/hashicorp/errwrap/errwrap.go
@@ -0,0 +1,169 @@
+// Package errwrap implements methods to formalize error wrapping in Go.
+//
+// All of the top-level functions that take an `error` are built to be able
+// to take any error, not just wrapped errors. This allows you to use errwrap
+// without having to type-check and type-cast everywhere.
+package errwrap
+
+import (
+ "errors"
+ "reflect"
+ "strings"
+)
+
+// WalkFunc is the callback called for Walk.
+type WalkFunc func(error)
+
+// Wrapper is an interface that can be implemented by custom types to
+// have all the Contains, Get, etc. functions in errwrap work.
+//
+// When Walk reaches a Wrapper, it will call the callback for every
+// wrapped error in addition to the wrapper itself. Since all the top-level
+// functions in errwrap use Walk, this means that all those functions work
+// with your custom type.
+type Wrapper interface {
+ WrappedErrors() []error
+}
+
+// Wrap defines that outer wraps inner, returning an error type that
+// can be cleanly used with the other methods in this package, such as
+// Contains, GetAll, etc.
+//
+// This function won't modify the error message at all (the outer message
+// will be used).
+func Wrap(outer, inner error) error {
+ return &wrappedError{
+ Outer: outer,
+ Inner: inner,
+ }
+}
+
+// Wrapf wraps an error with a formatting message. This is similar to using
+// `fmt.Errorf` to wrap an error. If you're using `fmt.Errorf` to wrap
+// errors, you should replace it with this.
+//
+// format is the format of the error message. The string '{{err}}' will
+// be replaced with the original error message.
+func Wrapf(format string, err error) error {
+ outerMsg := ""
+ if err != nil {
+ outerMsg = err.Error()
+ }
+
+ outer := errors.New(strings.Replace(
+ format, "{{err}}", outerMsg, -1))
+
+ return Wrap(outer, err)
+}
+
+// Contains checks if the given error contains an error with the
+// message msg. If err is not a wrapped error, this will always return
+// false unless the error itself happens to match this msg.
+func Contains(err error, msg string) bool {
+ return len(GetAll(err, msg)) > 0
+}
+
+// ContainsType checks if the given error contains an error with
+// the same concrete type as v. If err is not a wrapped error, this will
+// check the err itself.
+func ContainsType(err error, v interface{}) bool {
+ return len(GetAllType(err, v)) > 0
+}
+
+// Get is the same as GetAll but returns the deepest matching error.
+func Get(err error, msg string) error {
+ es := GetAll(err, msg)
+ if len(es) > 0 {
+ return es[len(es)-1]
+ }
+
+ return nil
+}
+
+// GetType is the same as GetAllType but returns the deepest matching error.
+func GetType(err error, v interface{}) error {
+ es := GetAllType(err, v)
+ if len(es) > 0 {
+ return es[len(es)-1]
+ }
+
+ return nil
+}
+
+// GetAll gets all the errors that might be wrapped in err with the
+// given message. The order of the errors is such that the outermost
+// matching error (the most recent wrap) is index zero, and so on.
+func GetAll(err error, msg string) []error {
+ var result []error
+
+ Walk(err, func(err error) {
+ if err.Error() == msg {
+ result = append(result, err)
+ }
+ })
+
+ return result
+}
+
+// GetAllType gets all the errors that are the same type as v.
+//
+// The order of the return value is the same as described in GetAll.
+func GetAllType(err error, v interface{}) []error {
+ var result []error
+
+ var search string
+ if v != nil {
+ search = reflect.TypeOf(v).String()
+ }
+ Walk(err, func(err error) {
+ var needle string
+ if err != nil {
+ needle = reflect.TypeOf(err).String()
+ }
+
+ if needle == search {
+ result = append(result, err)
+ }
+ })
+
+ return result
+}
+
+// Walk walks all the wrapped errors in err and calls the callback. If
+// err isn't a wrapped error, this will be called once for err. If err
+// is a wrapped error, the callback will be called for both the wrapper
+// that implements error as well as the wrapped error itself.
+func Walk(err error, cb WalkFunc) {
+ if err == nil {
+ return
+ }
+
+ switch e := err.(type) {
+ case *wrappedError:
+ cb(e.Outer)
+ Walk(e.Inner, cb)
+ case Wrapper:
+ cb(err)
+
+ for _, err := range e.WrappedErrors() {
+ Walk(err, cb)
+ }
+ default:
+ cb(err)
+ }
+}
+
+// wrappedError is an implementation of error that has both the
+// outer and inner errors.
+type wrappedError struct {
+ Outer error
+ Inner error
+}
+
+func (w *wrappedError) Error() string {
+ return w.Outer.Error()
+}
+
+func (w *wrappedError) WrappedErrors() []error {
+ return []error{w.Outer, w.Inner}
+}
diff --git a/vendor/github.com/hashicorp/errwrap/errwrap_test.go b/vendor/github.com/hashicorp/errwrap/errwrap_test.go
new file mode 100644
index 0000000..5ae5f8e
--- /dev/null
+++ b/vendor/github.com/hashicorp/errwrap/errwrap_test.go
@@ -0,0 +1,94 @@
+package errwrap
+
+import (
+ "fmt"
+ "testing"
+)
+
+func TestWrappedError_impl(t *testing.T) {
+ var _ error = new(wrappedError)
+}
+
+func TestGetAll(t *testing.T) {
+ cases := []struct {
+ Err error
+ Msg string
+ Len int
+ }{
+ {},
+ {
+ fmt.Errorf("foo"),
+ "foo",
+ 1,
+ },
+ {
+ fmt.Errorf("bar"),
+ "foo",
+ 0,
+ },
+ {
+ Wrapf("bar", fmt.Errorf("foo")),
+ "foo",
+ 1,
+ },
+ {
+ Wrapf("{{err}}", fmt.Errorf("foo")),
+ "foo",
+ 2,
+ },
+ {
+ Wrapf("bar", Wrapf("baz", fmt.Errorf("foo"))),
+ "foo",
+ 1,
+ },
+ }
+
+ for i, tc := range cases {
+ actual := GetAll(tc.Err, tc.Msg)
+ if len(actual) != tc.Len {
+ t.Fatalf("%d: bad: %#v", i, actual)
+ }
+ for _, v := range actual {
+ if v.Error() != tc.Msg {
+ t.Fatalf("%d: bad: %#v", i, actual)
+ }
+ }
+ }
+}
+
+func TestGetAllType(t *testing.T) {
+ cases := []struct {
+ Err error
+ Type interface{}
+ Len int
+ }{
+ {},
+ {
+ fmt.Errorf("foo"),
+ "foo",
+ 0,
+ },
+ {
+ fmt.Errorf("bar"),
+ fmt.Errorf("foo"),
+ 1,
+ },
+ {
+ Wrapf("bar", fmt.Errorf("foo")),
+ fmt.Errorf("baz"),
+ 2,
+ },
+ {
+ Wrapf("bar", Wrapf("baz", fmt.Errorf("foo"))),
+ Wrapf("", nil),
+ 0,
+ },
+ }
+
+ for i, tc := range cases {
+ actual := GetAllType(tc.Err, tc.Type)
+ if len(actual) != tc.Len {
+ t.Fatalf("%d: bad: %#v", i, actual)
+ }
+ }
+}
diff --git a/vendor/github.com/hashicorp/go-multierror/.travis.yml b/vendor/github.com/hashicorp/go-multierror/.travis.yml
new file mode 100644
index 0000000..304a835
--- /dev/null
+++ b/vendor/github.com/hashicorp/go-multierror/.travis.yml
@@ -0,0 +1,12 @@
+sudo: false
+
+language: go
+
+go:
+ - 1.x
+
+branches:
+ only:
+ - master
+
+script: make test testrace
diff --git a/vendor/github.com/hashicorp/go-multierror/LICENSE b/vendor/github.com/hashicorp/go-multierror/LICENSE
new file mode 100644
index 0000000..82b4de9
--- /dev/null
+++ b/vendor/github.com/hashicorp/go-multierror/LICENSE
@@ -0,0 +1,353 @@
+Mozilla Public License, version 2.0
+
+1. Definitions
+
+1.1. “Contributor”
+
+ means each individual or legal entity that creates, contributes to the
+ creation of, or owns Covered Software.
+
+1.2. “Contributor Version”
+
+ means the combination of the Contributions of others (if any) used by a
+ Contributor and that particular Contributor’s Contribution.
+
+1.3. “Contribution”
+
+ means Covered Software of a particular Contributor.
+
+1.4. “Covered Software”
+
+ means Source Code Form to which the initial Contributor has attached the
+ notice in Exhibit A, the Executable Form of such Source Code Form, and
+ Modifications of such Source Code Form, in each case including portions
+ thereof.
+
+1.5. “Incompatible With Secondary Licenses”
+ means
+
+ a. that the initial Contributor has attached the notice described in
+ Exhibit B to the Covered Software; or
+
+ b. that the Covered Software was made available under the terms of version
+ 1.1 or earlier of the License, but not also under the terms of a
+ Secondary License.
+
+1.6. “Executable Form”
+
+ means any form of the work other than Source Code Form.
+
+1.7. “Larger Work”
+
+ means a work that combines Covered Software with other material, in a separate
+ file or files, that is not Covered Software.
+
+1.8. “License”
+
+ means this document.
+
+1.9. “Licensable”
+
+ means having the right to grant, to the maximum extent possible, whether at the
+ time of the initial grant or subsequently, any and all of the rights conveyed by
+ this License.
+
+1.10. “Modifications”
+
+ means any of the following:
+
+ a. any file in Source Code Form that results from an addition to, deletion
+ from, or modification of the contents of Covered Software; or
+
+ b. any new file in Source Code Form that contains any Covered Software.
+
+1.11. “Patent Claims” of a Contributor
+
+ means any patent claim(s), including without limitation, method, process,
+ and apparatus claims, in any patent Licensable by such Contributor that
+ would be infringed, but for the grant of the License, by the making,
+ using, selling, offering for sale, having made, import, or transfer of
+ either its Contributions or its Contributor Version.
+
+1.12. “Secondary License”
+
+ means either the GNU General Public License, Version 2.0, the GNU Lesser
+ General Public License, Version 2.1, the GNU Affero General Public
+ License, Version 3.0, or any later versions of those licenses.
+
+1.13. “Source Code Form”
+
+ means the form of the work preferred for making modifications.
+
+1.14. “You” (or “Your”)
+
+ means an individual or a legal entity exercising rights under this
+ License. For legal entities, “You” includes any entity that controls, is
+ controlled by, or is under common control with You. For purposes of this
+ definition, “control” means (a) the power, direct or indirect, to cause
+ the direction or management of such entity, whether by contract or
+ otherwise, or (b) ownership of more than fifty percent (50%) of the
+ outstanding shares or beneficial ownership of such entity.
+
+
+2. License Grants and Conditions
+
+2.1. Grants
+
+ Each Contributor hereby grants You a world-wide, royalty-free,
+ non-exclusive license:
+
+ a. under intellectual property rights (other than patent or trademark)
+ Licensable by such Contributor to use, reproduce, make available,
+ modify, display, perform, distribute, and otherwise exploit its
+ Contributions, either on an unmodified basis, with Modifications, or as
+ part of a Larger Work; and
+
+ b. under Patent Claims of such Contributor to make, use, sell, offer for
+ sale, have made, import, and otherwise transfer either its Contributions
+ or its Contributor Version.
+
+2.2. Effective Date
+
+ The licenses granted in Section 2.1 with respect to any Contribution become
+ effective for each Contribution on the date the Contributor first distributes
+ such Contribution.
+
+2.3. Limitations on Grant Scope
+
+ The licenses granted in this Section 2 are the only rights granted under this
+ License. No additional rights or licenses will be implied from the distribution
+ or licensing of Covered Software under this License. Notwithstanding Section
+ 2.1(b) above, no patent license is granted by a Contributor:
+
+ a. for any code that a Contributor has removed from Covered Software; or
+
+ b. for infringements caused by: (i) Your and any other third party’s
+ modifications of Covered Software, or (ii) the combination of its
+ Contributions with other software (except as part of its Contributor
+ Version); or
+
+ c. under Patent Claims infringed by Covered Software in the absence of its
+ Contributions.
+
+ This License does not grant any rights in the trademarks, service marks, or
+ logos of any Contributor (except as may be necessary to comply with the
+ notice requirements in Section 3.4).
+
+2.4. Subsequent Licenses
+
+ No Contributor makes additional grants as a result of Your choice to
+ distribute the Covered Software under a subsequent version of this License
+ (see Section 10.2) or under the terms of a Secondary License (if permitted
+ under the terms of Section 3.3).
+
+2.5. Representation
+
+ Each Contributor represents that the Contributor believes its Contributions
+ are its original creation(s) or it has sufficient rights to grant the
+ rights to its Contributions conveyed by this License.
+
+2.6. Fair Use
+
+ This License is not intended to limit any rights You have under applicable
+ copyright doctrines of fair use, fair dealing, or other equivalents.
+
+2.7. Conditions
+
+ Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in
+ Section 2.1.
+
+
+3. Responsibilities
+
+3.1. Distribution of Source Form
+
+ All distribution of Covered Software in Source Code Form, including any
+ Modifications that You create or to which You contribute, must be under the
+ terms of this License. You must inform recipients that the Source Code Form
+ of the Covered Software is governed by the terms of this License, and how
+ they can obtain a copy of this License. You may not attempt to alter or
+ restrict the recipients’ rights in the Source Code Form.
+
+3.2. Distribution of Executable Form
+
+ If You distribute Covered Software in Executable Form then:
+
+ a. such Covered Software must also be made available in Source Code Form,
+ as described in Section 3.1, and You must inform recipients of the
+ Executable Form how they can obtain a copy of such Source Code Form by
+ reasonable means in a timely manner, at a charge no more than the cost
+ of distribution to the recipient; and
+
+ b. You may distribute such Executable Form under the terms of this License,
+ or sublicense it under different terms, provided that the license for
+ the Executable Form does not attempt to limit or alter the recipients’
+ rights in the Source Code Form under this License.
+
+3.3. Distribution of a Larger Work
+
+ You may create and distribute a Larger Work under terms of Your choice,
+ provided that You also comply with the requirements of this License for the
+ Covered Software. If the Larger Work is a combination of Covered Software
+ with a work governed by one or more Secondary Licenses, and the Covered
+ Software is not Incompatible With Secondary Licenses, this License permits
+ You to additionally distribute such Covered Software under the terms of
+ such Secondary License(s), so that the recipient of the Larger Work may, at
+ their option, further distribute the Covered Software under the terms of
+ either this License or such Secondary License(s).
+
+3.4. Notices
+
+ You may not remove or alter the substance of any license notices (including
+ copyright notices, patent notices, disclaimers of warranty, or limitations
+ of liability) contained within the Source Code Form of the Covered
+ Software, except that You may alter any license notices to the extent
+ required to remedy known factual inaccuracies.
+
+3.5. Application of Additional Terms
+
+ You may choose to offer, and to charge a fee for, warranty, support,
+ indemnity or liability obligations to one or more recipients of Covered
+ Software. However, You may do so only on Your own behalf, and not on behalf
+ of any Contributor. You must make it absolutely clear that any such
+ warranty, support, indemnity, or liability obligation is offered by You
+ alone, and You hereby agree to indemnify every Contributor for any
+ liability incurred by such Contributor as a result of warranty, support,
+ indemnity or liability terms You offer. You may include additional
+ disclaimers of warranty and limitations of liability specific to any
+ jurisdiction.
+
+4. Inability to Comply Due to Statute or Regulation
+
+ If it is impossible for You to comply with any of the terms of this License
+ with respect to some or all of the Covered Software due to statute, judicial
+ order, or regulation then You must: (a) comply with the terms of this License
+ to the maximum extent possible; and (b) describe the limitations and the code
+ they affect. Such description must be placed in a text file included with all
+ distributions of the Covered Software under this License. Except to the
+ extent prohibited by statute or regulation, such description must be
+ sufficiently detailed for a recipient of ordinary skill to be able to
+ understand it.
+
+5. Termination
+
+5.1. The rights granted under this License will terminate automatically if You
+ fail to comply with any of its terms. However, if You become compliant,
+ then the rights granted under this License from a particular Contributor
+ are reinstated (a) provisionally, unless and until such Contributor
+ explicitly and finally terminates Your grants, and (b) on an ongoing basis,
+ if such Contributor fails to notify You of the non-compliance by some
+ reasonable means prior to 60 days after You have come back into compliance.
+ Moreover, Your grants from a particular Contributor are reinstated on an
+ ongoing basis if such Contributor notifies You of the non-compliance by
+ some reasonable means, this is the first time You have received notice of
+ non-compliance with this License from such Contributor, and You become
+ compliant prior to 30 days after Your receipt of the notice.
+
+5.2. If You initiate litigation against any entity by asserting a patent
+ infringement claim (excluding declaratory judgment actions, counter-claims,
+ and cross-claims) alleging that a Contributor Version directly or
+ indirectly infringes any patent, then the rights granted to You by any and
+ all Contributors for the Covered Software under Section 2.1 of this License
+ shall terminate.
+
+5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user
+ license agreements (excluding distributors and resellers) which have been
+ validly granted by You or Your distributors under this License prior to
+ termination shall survive termination.
+
+6. Disclaimer of Warranty
+
+ Covered Software is provided under this License on an “as is” basis, without
+ warranty of any kind, either expressed, implied, or statutory, including,
+ without limitation, warranties that the Covered Software is free of defects,
+ merchantable, fit for a particular purpose or non-infringing. The entire
+ risk as to the quality and performance of the Covered Software is with You.
+ Should any Covered Software prove defective in any respect, You (not any
+ Contributor) assume the cost of any necessary servicing, repair, or
+ correction. This disclaimer of warranty constitutes an essential part of this
+ License. No use of any Covered Software is authorized under this License
+ except under this disclaimer.
+
+7. Limitation of Liability
+
+ Under no circumstances and under no legal theory, whether tort (including
+ negligence), contract, or otherwise, shall any Contributor, or anyone who
+ distributes Covered Software as permitted above, be liable to You for any
+ direct, indirect, special, incidental, or consequential damages of any
+ character including, without limitation, damages for lost profits, loss of
+ goodwill, work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses, even if such party shall have been
+ informed of the possibility of such damages. This limitation of liability
+ shall not apply to liability for death or personal injury resulting from such
+ party’s negligence to the extent applicable law prohibits such limitation.
+ Some jurisdictions do not allow the exclusion or limitation of incidental or
+ consequential damages, so this exclusion and limitation may not apply to You.
+
+8. Litigation
+
+ Any litigation relating to this License may be brought only in the courts of
+ a jurisdiction where the defendant maintains its principal place of business
+ and such litigation shall be governed by laws of that jurisdiction, without
+ reference to its conflict-of-law provisions. Nothing in this Section shall
+ prevent a party’s ability to bring cross-claims or counter-claims.
+
+9. Miscellaneous
+
+ This License represents the complete agreement concerning the subject matter
+ hereof. If any provision of this License is held to be unenforceable, such
+ provision shall be reformed only to the extent necessary to make it
+ enforceable. Any law or regulation which provides that the language of a
+ contract shall be construed against the drafter shall not be used to construe
+ this License against a Contributor.
+
+
+10. Versions of the License
+
+10.1. New Versions
+
+ Mozilla Foundation is the license steward. Except as provided in Section
+ 10.3, no one other than the license steward has the right to modify or
+ publish new versions of this License. Each version will be given a
+ distinguishing version number.
+
+10.2. Effect of New Versions
+
+ You may distribute the Covered Software under the terms of the version of
+ the License under which You originally received the Covered Software, or
+ under the terms of any subsequent version published by the license
+ steward.
+
+10.3. Modified Versions
+
+ If you create software not governed by this License, and you want to
+ create a new license for such software, you may create and use a modified
+ version of this License if you rename the license and remove any
+ references to the name of the license steward (except to note that such
+ modified license differs from this License).
+
+10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses
+ If You choose to distribute Source Code Form that is Incompatible With
+ Secondary Licenses under the terms of this version of the License, the
+ notice described in Exhibit B of this License must be attached.
+
+Exhibit A - Source Code Form License Notice
+
+ This Source Code Form is subject to the
+ terms of the Mozilla Public License, v.
+ 2.0. If a copy of the MPL was not
+ distributed with this file, You can
+ obtain one at
+ http://mozilla.org/MPL/2.0/.
+
+If it is not possible or desirable to put the notice in a particular file, then
+You may include the notice in a location (such as a LICENSE file in a relevant
+directory) where a recipient would be likely to look for such a notice.
+
+You may add additional accurate notices of copyright ownership.
+
+Exhibit B - “Incompatible With Secondary Licenses” Notice
+
+ This Source Code Form is “Incompatible
+ With Secondary Licenses”, as defined by
+ the Mozilla Public License, v. 2.0.
diff --git a/vendor/github.com/hashicorp/go-multierror/Makefile b/vendor/github.com/hashicorp/go-multierror/Makefile
new file mode 100644
index 0000000..b97cd6e
--- /dev/null
+++ b/vendor/github.com/hashicorp/go-multierror/Makefile
@@ -0,0 +1,31 @@
+TEST?=./...
+
+default: test
+
+# test runs the test suite and vets the code.
+test: generate
+ @echo "==> Running tests..."
+ @go list $(TEST) \
+ | grep -v "/vendor/" \
+ | xargs -n1 go test -timeout=60s -parallel=10 ${TESTARGS}
+
+# testrace runs the race checker
+testrace: generate
+ @echo "==> Running tests (race)..."
+ @go list $(TEST) \
+ | grep -v "/vendor/" \
+ | xargs -n1 go test -timeout=60s -race ${TESTARGS}
+
+# updatedeps installs all the dependencies needed to run and build.
+updatedeps:
+ @sh -c "'${CURDIR}/scripts/deps.sh' '${NAME}'"
+
+# generate runs `go generate` to build the dynamically generated source files.
+generate:
+ @echo "==> Generating..."
+ @find . -type f -name '.DS_Store' -delete
+ @go list ./... \
+ | grep -v "/vendor/" \
+ | xargs -n1 go generate
+
+.PHONY: default test testrace updatedeps generate
diff --git a/vendor/github.com/hashicorp/go-multierror/README.md b/vendor/github.com/hashicorp/go-multierror/README.md
new file mode 100644
index 0000000..ead5830
--- /dev/null
+++ b/vendor/github.com/hashicorp/go-multierror/README.md
@@ -0,0 +1,97 @@
+# go-multierror
+
+[][travis]
+[][godocs]
+
+[travis]: https://travis-ci.org/hashicorp/go-multierror
+[godocs]: https://godoc.org/github.com/hashicorp/go-multierror
+
+`go-multierror` is a package for Go that provides a mechanism for
+representing a list of `error` values as a single `error`.
+
+This allows a function in Go to return an `error` that might actually
+be a list of errors. If the caller knows this, they can unwrap the
+list and access the errors. If the caller doesn't know, the error
+formats to a nice human-readable format.
+
+`go-multierror` implements the
+[errwrap](https://github.com/hashicorp/errwrap) interface so that it can
+be used with that library, as well.
+
+## Installation and Docs
+
+Install using `go get github.com/hashicorp/go-multierror`.
+
+Full documentation is available at
+http://godoc.org/github.com/hashicorp/go-multierror
+
+## Usage
+
+go-multierror is easy to use and purposely built to be unobtrusive in
+existing Go applications/libraries that may not be aware of it.
+
+**Building a list of errors**
+
+The `Append` function is used to create a list of errors. This function
+behaves a lot like the Go built-in `append` function: it doesn't matter
+if the first argument is nil, a `multierror.Error`, or any other `error`,
+the function behaves as you would expect.
+
+```go
+var result error
+
+if err := step1(); err != nil {
+ result = multierror.Append(result, err)
+}
+if err := step2(); err != nil {
+ result = multierror.Append(result, err)
+}
+
+return result
+```
+
+**Customizing the formatting of the errors**
+
+By specifying a custom `ErrorFormat`, you can customize the format
+of the `Error() string` function:
+
+```go
+var result *multierror.Error
+
+// ... accumulate errors here, maybe using Append
+
+if result != nil {
+ result.ErrorFormat = func([]error) string {
+ return "errors!"
+ }
+}
+```
+
+**Accessing the list of errors**
+
+`multierror.Error` implements `error` so if the caller doesn't know about
+multierror, it will work just fine. But if you're aware a multierror might
+be returned, you can use type switches to access the list of errors:
+
+```go
+if err := something(); err != nil {
+ if merr, ok := err.(*multierror.Error); ok {
+ // Use merr.Errors
+ }
+}
+```
+
+**Returning a multierror only if there are errors**
+
+If you build a `multierror.Error`, you can use the `ErrorOrNil` function
+to return an `error` implementation only if there are errors to return:
+
+```go
+var result *multierror.Error
+
+// ... accumulate errors here
+
+// Return the `error` only if errors were added to the multierror, otherwise
+// return nil since there are no errors.
+return result.ErrorOrNil()
+```
diff --git a/vendor/github.com/hashicorp/go-multierror/append.go b/vendor/github.com/hashicorp/go-multierror/append.go
new file mode 100644
index 0000000..775b6e7
--- /dev/null
+++ b/vendor/github.com/hashicorp/go-multierror/append.go
@@ -0,0 +1,41 @@
+package multierror
+
+// Append is a helper function that will append more errors
+// onto an Error in order to create a larger multi-error.
+//
+// If err is not a multierror.Error, then it will be turned into
+// one. If any of the errs are multierr.Error, they will be flattened
+// one level into err.
+func Append(err error, errs ...error) *Error {
+ switch err := err.(type) {
+ case *Error:
+ // Typed nils can reach here, so initialize if we are nil
+ if err == nil {
+ err = new(Error)
+ }
+
+ // Go through each error and flatten
+ for _, e := range errs {
+ switch e := e.(type) {
+ case *Error:
+ if e != nil {
+ err.Errors = append(err.Errors, e.Errors...)
+ }
+ default:
+ if e != nil {
+ err.Errors = append(err.Errors, e)
+ }
+ }
+ }
+
+ return err
+ default:
+ newErrs := make([]error, 0, len(errs)+1)
+ if err != nil {
+ newErrs = append(newErrs, err)
+ }
+ newErrs = append(newErrs, errs...)
+
+ return Append(&Error{}, newErrs...)
+ }
+}
diff --git a/vendor/github.com/hashicorp/go-multierror/append_test.go b/vendor/github.com/hashicorp/go-multierror/append_test.go
new file mode 100644
index 0000000..58ddafa
--- /dev/null
+++ b/vendor/github.com/hashicorp/go-multierror/append_test.go
@@ -0,0 +1,82 @@
+package multierror
+
+import (
+ "errors"
+ "testing"
+)
+
+func TestAppend_Error(t *testing.T) {
+ original := &Error{
+ Errors: []error{errors.New("foo")},
+ }
+
+ result := Append(original, errors.New("bar"))
+ if len(result.Errors) != 2 {
+ t.Fatalf("wrong len: %d", len(result.Errors))
+ }
+
+ original = &Error{}
+ result = Append(original, errors.New("bar"))
+ if len(result.Errors) != 1 {
+ t.Fatalf("wrong len: %d", len(result.Errors))
+ }
+
+ // Test when a typed nil is passed
+ var e *Error
+ result = Append(e, errors.New("baz"))
+ if len(result.Errors) != 1 {
+ t.Fatalf("wrong len: %d", len(result.Errors))
+ }
+
+ // Test flattening
+ original = &Error{
+ Errors: []error{errors.New("foo")},
+ }
+
+ result = Append(original, Append(nil, errors.New("foo"), errors.New("bar")))
+ if len(result.Errors) != 3 {
+ t.Fatalf("wrong len: %d", len(result.Errors))
+ }
+}
+
+func TestAppend_NilError(t *testing.T) {
+ var err error
+ result := Append(err, errors.New("bar"))
+ if len(result.Errors) != 1 {
+ t.Fatalf("wrong len: %d", len(result.Errors))
+ }
+}
+
+func TestAppend_NilErrorArg(t *testing.T) {
+ var err error
+ var nilErr *Error
+ result := Append(err, nilErr)
+ if len(result.Errors) != 0 {
+ t.Fatalf("wrong len: %d", len(result.Errors))
+ }
+}
+
+func TestAppend_NilErrorIfaceArg(t *testing.T) {
+ var err error
+ var nilErr error
+ result := Append(err, nilErr)
+ if len(result.Errors) != 0 {
+ t.Fatalf("wrong len: %d", len(result.Errors))
+ }
+}
+
+func TestAppend_NonError(t *testing.T) {
+ original := errors.New("foo")
+ result := Append(original, errors.New("bar"))
+ if len(result.Errors) != 2 {
+ t.Fatalf("wrong len: %d", len(result.Errors))
+ }
+}
+
+func TestAppend_NonError_Error(t *testing.T) {
+ original := errors.New("foo")
+ result := Append(original, Append(nil, errors.New("bar")))
+ if len(result.Errors) != 2 {
+ t.Fatalf("wrong len: %d", len(result.Errors))
+ }
+}
diff --git a/vendor/github.com/hashicorp/go-multierror/flatten.go b/vendor/github.com/hashicorp/go-multierror/flatten.go
new file mode 100644
index 0000000..aab8e9a
--- /dev/null
+++ b/vendor/github.com/hashicorp/go-multierror/flatten.go
@@ -0,0 +1,26 @@
+package multierror
+
+// Flatten flattens the given error, merging any *Errors together into
+// a single *Error.
+func Flatten(err error) error {
+ // If it isn't an *Error, just return the error as-is
+ if _, ok := err.(*Error); !ok {
+ return err
+ }
+
+ // Otherwise, make the result and flatten away!
+ flatErr := new(Error)
+ flatten(err, flatErr)
+ return flatErr
+}
+
+func flatten(err error, flatErr *Error) {
+ switch err := err.(type) {
+ case *Error:
+ for _, e := range err.Errors {
+ flatten(e, flatErr)
+ }
+ default:
+ flatErr.Errors = append(flatErr.Errors, err)
+ }
+}
diff --git a/vendor/github.com/hashicorp/go-multierror/flatten_test.go b/vendor/github.com/hashicorp/go-multierror/flatten_test.go
new file mode 100644
index 0000000..9fbacad
--- /dev/null
+++ b/vendor/github.com/hashicorp/go-multierror/flatten_test.go
@@ -0,0 +1,48 @@
+package multierror
+
+import (
+ "errors"
+ "fmt"
+ "reflect"
+ "strings"
+ "testing"
+)
+
+func TestFlatten(t *testing.T) {
+ original := &Error{
+ Errors: []error{
+ errors.New("one"),
+ &Error{
+ Errors: []error{
+ errors.New("two"),
+ &Error{
+ Errors: []error{
+ errors.New("three"),
+ },
+ },
+ },
+ },
+ },
+ }
+
+ expected := strings.TrimSpace(`
+3 errors occurred:
+
+* one
+* two
+* three
+ `)
+ actual := fmt.Sprintf("%s", Flatten(original))
+
+ if expected != actual {
+ t.Fatalf("expected: %s, got: %s", expected, actual)
+ }
+}
+
+func TestFlatten_nonError(t *testing.T) {
+ err := errors.New("foo")
+ actual := Flatten(err)
+ if !reflect.DeepEqual(actual, err) {
+ t.Fatalf("bad: %#v", actual)
+ }
+}
diff --git a/vendor/github.com/hashicorp/go-multierror/format.go b/vendor/github.com/hashicorp/go-multierror/format.go
new file mode 100644
index 0000000..6c7a3cc
--- /dev/null
+++ b/vendor/github.com/hashicorp/go-multierror/format.go
@@ -0,0 +1,27 @@
+package multierror
+
+import (
+ "fmt"
+ "strings"
+)
+
+// ErrorFormatFunc is a function callback that is called by Error to
+// turn the list of errors into a string.
+type ErrorFormatFunc func([]error) string
+
+// ListFormatFunc is a basic formatter that outputs the number of errors
+// that occurred along with a bullet point list of the errors.
+func ListFormatFunc(es []error) string {
+ if len(es) == 1 {
+ return fmt.Sprintf("1 error occurred:\n\n* %s", es[0])
+ }
+
+ points := make([]string, len(es))
+ for i, err := range es {
+ points[i] = fmt.Sprintf("* %s", err)
+ }
+
+ return fmt.Sprintf(
+ "%d errors occurred:\n\n%s",
+ len(es), strings.Join(points, "\n"))
+}
diff --git a/vendor/github.com/hashicorp/go-multierror/format_test.go b/vendor/github.com/hashicorp/go-multierror/format_test.go
new file mode 100644
index 0000000..3359e02
--- /dev/null
+++ b/vendor/github.com/hashicorp/go-multierror/format_test.go
@@ -0,0 +1,38 @@
+package multierror
+
+import (
+ "errors"
+ "testing"
+)
+
+func TestListFormatFuncSingle(t *testing.T) {
+ expected := `1 error occurred:
+
+* foo`
+
+ errors := []error{
+ errors.New("foo"),
+ }
+
+ actual := ListFormatFunc(errors)
+ if actual != expected {
+ t.Fatalf("bad: %#v", actual)
+ }
+}
+
+func TestListFormatFuncMultiple(t *testing.T) {
+ expected := `2 errors occurred:
+
+* foo
+* bar`
+
+ errors := []error{
+ errors.New("foo"),
+ errors.New("bar"),
+ }
+
+ actual := ListFormatFunc(errors)
+ if actual != expected {
+ t.Fatalf("bad: %#v", actual)
+ }
+}
diff --git a/vendor/github.com/hashicorp/go-multierror/multierror.go b/vendor/github.com/hashicorp/go-multierror/multierror.go
new file mode 100644
index 0000000..89b1422
--- /dev/null
+++ b/vendor/github.com/hashicorp/go-multierror/multierror.go
@@ -0,0 +1,51 @@
+package multierror
+
+import (
+ "fmt"
+)
+
+// Error is an error type to track multiple errors. This is used to
+// accumulate errors in cases and return them as a single "error".
+type Error struct {
+ Errors []error
+ ErrorFormat ErrorFormatFunc
+}
+
+func (e *Error) Error() string {
+ fn := e.ErrorFormat
+ if fn == nil {
+ fn = ListFormatFunc
+ }
+
+ return fn(e.Errors)
+}
+
+// ErrorOrNil returns an error interface if this Error represents
+// a list of errors, or returns nil if the list of errors is empty. This
+// function is useful at the end of accumulation to make sure that the value
+// returned represents the existence of errors.
+func (e *Error) ErrorOrNil() error {
+ if e == nil {
+ return nil
+ }
+ if len(e.Errors) == 0 {
+ return nil
+ }
+
+ return e
+}
+
+func (e *Error) GoString() string {
+ return fmt.Sprintf("*%#v", *e)
+}
+
+// WrappedErrors returns the list of errors that this Error is wrapping.
+// It is an implementation of the errwrap.Wrapper interface so that
+// multierror.Error can be used with that library.
+//
+// This method is not safe to be called concurrently and is no different
+// than accessing the Errors field directly. It is implemented only to
+// satisfy the errwrap.Wrapper interface.
+func (e *Error) WrappedErrors() []error {
+ return e.Errors
+}
diff --git a/vendor/github.com/hashicorp/go-multierror/multierror_test.go b/vendor/github.com/hashicorp/go-multierror/multierror_test.go
new file mode 100644
index 0000000..5567d1c
--- /dev/null
+++ b/vendor/github.com/hashicorp/go-multierror/multierror_test.go
@@ -0,0 +1,70 @@
+package multierror
+
+import (
+ "errors"
+ "reflect"
+ "testing"
+)
+
+func TestError_Impl(t *testing.T) {
+ var _ error = new(Error)
+}
+
+func TestErrorError_custom(t *testing.T) {
+ errors := []error{
+ errors.New("foo"),
+ errors.New("bar"),
+ }
+
+ fn := func(es []error) string {
+ return "foo"
+ }
+
+ multi := &Error{Errors: errors, ErrorFormat: fn}
+ if multi.Error() != "foo" {
+ t.Fatalf("bad: %s", multi.Error())
+ }
+}
+
+func TestErrorError_default(t *testing.T) {
+ expected := `2 errors occurred:
+
+* foo
+* bar`
+
+ errors := []error{
+ errors.New("foo"),
+ errors.New("bar"),
+ }
+
+ multi := &Error{Errors: errors}
+ if multi.Error() != expected {
+ t.Fatalf("bad: %s", multi.Error())
+ }
+}
+
+func TestErrorErrorOrNil(t *testing.T) {
+ err := new(Error)
+ if err.ErrorOrNil() != nil {
+ t.Fatalf("bad: %#v", err.ErrorOrNil())
+ }
+
+ err.Errors = []error{errors.New("foo")}
+ if v := err.ErrorOrNil(); v == nil {
+ t.Fatal("should not be nil")
+ } else if !reflect.DeepEqual(v, err) {
+ t.Fatalf("bad: %#v", v)
+ }
+}
+
+func TestErrorWrappedErrors(t *testing.T) {
+ errors := []error{
+ errors.New("foo"),
+ errors.New("bar"),
+ }
+
+ multi := &Error{Errors: errors}
+ if !reflect.DeepEqual(multi.Errors, multi.WrappedErrors()) {
+ t.Fatalf("bad: %s", multi.WrappedErrors())
+ }
+}
diff --git a/vendor/github.com/hashicorp/go-multierror/prefix.go b/vendor/github.com/hashicorp/go-multierror/prefix.go
new file mode 100644
index 0000000..5c477ab
--- /dev/null
+++ b/vendor/github.com/hashicorp/go-multierror/prefix.go
@@ -0,0 +1,37 @@
+package multierror
+
+import (
+ "fmt"
+
+ "github.com/hashicorp/errwrap"
+)
+
+// Prefix is a helper function that will prefix some text
+// to the given error. If the error is a multierror.Error, then
+// it will be prefixed to each wrapped error.
+//
+// This is useful to use when appending multiple multierrors
+// together in order to give better scoping.
+func Prefix(err error, prefix string) error {
+ if err == nil {
+ return nil
+ }
+
+ format := fmt.Sprintf("%s {{err}}", prefix)
+ switch err := err.(type) {
+ case *Error:
+ // Typed nils can reach here, so initialize if we are nil
+ if err == nil {
+ err = new(Error)
+ }
+
+ // Wrap each of the errors
+ for i, e := range err.Errors {
+ err.Errors[i] = errwrap.Wrapf(format, e)
+ }
+
+ return err
+ default:
+ return errwrap.Wrapf(format, err)
+ }
+}
diff --git a/vendor/github.com/hashicorp/go-multierror/prefix_test.go b/vendor/github.com/hashicorp/go-multierror/prefix_test.go
new file mode 100644
index 0000000..1d4a6f6
--- /dev/null
+++ b/vendor/github.com/hashicorp/go-multierror/prefix_test.go
@@ -0,0 +1,33 @@
+package multierror
+
+import (
+ "errors"
+ "testing"
+)
+
+func TestPrefix_Error(t *testing.T) {
+ original := &Error{
+ Errors: []error{errors.New("foo")},
+ }
+
+ result := Prefix(original, "bar")
+ if result.(*Error).Errors[0].Error() != "bar foo" {
+ t.Fatalf("bad: %s", result)
+ }
+}
+
+func TestPrefix_NilError(t *testing.T) {
+ var err error
+ result := Prefix(err, "bar")
+ if result != nil {
+ t.Fatalf("bad: %#v", result)
+ }
+}
+
+func TestPrefix_NonError(t *testing.T) {
+ original := errors.New("foo")
+ result := Prefix(original, "bar")
+ if result.Error() != "bar foo" {
+ t.Fatalf("bad: %s", result)
+ }
+}
diff --git a/vendor/github.com/hashicorp/go-multierror/scripts/deps.sh b/vendor/github.com/hashicorp/go-multierror/scripts/deps.sh
new file mode 100755
index 0000000..1d2fcf9
--- /dev/null
+++ b/vendor/github.com/hashicorp/go-multierror/scripts/deps.sh
@@ -0,0 +1,54 @@
+#!/usr/bin/env bash
+#
+# This script updates dependencies using a temporary directory. This is required
+# to avoid any auxillary dependencies that sneak into GOPATH.
+set -e
+
+# Get the parent directory of where this script is.
+SOURCE="${BASH_SOURCE[0]}"
+while [ -h "$SOURCE" ] ; do SOURCE="$(readlink "$SOURCE")"; done
+DIR="$(cd -P "$(dirname "$SOURCE")/.." && pwd)"
+
+# Change into that directory
+cd "$DIR"
+
+# Get the name from the directory
+NAME=${NAME:-"$(basename $(pwd))"}
+
+# Announce
+echo "==> Updating dependencies..."
+
+echo "--> Making tmpdir..."
+tmpdir=$(mktemp -d)
+function cleanup {
+ rm -rf "${tmpdir}"
+}
+trap cleanup EXIT
+
+export GOPATH="${tmpdir}"
+export PATH="${tmpdir}/bin:$PATH"
+
+mkdir -p "${tmpdir}/src/github.com/hashicorp"
+pushd "${tmpdir}/src/github.com/hashicorp" &>/dev/null
+
+echo "--> Copying ${NAME}..."
+cp -R "$DIR" "${tmpdir}/src/github.com/hashicorp/${NAME}"
+pushd "${tmpdir}/src/github.com/hashicorp/${NAME}" &>/dev/null
+rm -rf vendor/
+
+echo "--> Installing dependency manager..."
+go get -u github.com/kardianos/govendor
+govendor init
+
+echo "--> Installing all dependencies (may take some time)..."
+govendor fetch -v +outside
+
+echo "--> Vendoring..."
+govendor add +external
+
+echo "--> Moving into place..."
+vpath="${tmpdir}/src/github.com/hashicorp/${NAME}/vendor"
+popd &>/dev/null
+popd &>/dev/null
+rm -rf vendor/
+cp -R "${vpath}" .
diff --git a/vendor/github.com/yudai/gotty/.github/ISSUE_TEMPLATE.md b/vendor/github.com/yudai/gotty/.github/ISSUE_TEMPLATE.md
new file mode 100644
index 0000000..0e3abab
--- /dev/null
+++ b/vendor/github.com/yudai/gotty/.github/ISSUE_TEMPLATE.md
@@ -0,0 +1,27 @@
+# When file a bug report (see below for feature requests)
+
+Please answer these quesions for a bug report. Thanks!
+
+### What version of GoTTY are you using (`gotty --version`)?
+
+
+### What operating system and browser are you using?
+
+
+### What did you do?
+
+If possible, please provide the command you ran.
+
+
+### What did you expect to see?
+
+
+### What did you see instead?
+
+If possible, please provide the output of the command and your browser's console output.
+
+
+
+# When file a new feature proposal
+
+Please provide an actual usecase that requires your new feature.
diff --git a/vendor/github.com/yudai/gotty/.gitignore b/vendor/github.com/yudai/gotty/.gitignore
new file mode 100644
index 0000000..6ff0bb9
--- /dev/null
+++ b/vendor/github.com/yudai/gotty/.gitignore
@@ -0,0 +1,4 @@
+gotty
+bindata
+builds
+js/node_modules/*
diff --git a/vendor/github.com/yudai/gotty/.gotty b/vendor/github.com/yudai/gotty/.gotty
new file mode 100644
index 0000000..c97448f
--- /dev/null
+++ b/vendor/github.com/yudai/gotty/.gotty
@@ -0,0 +1,302 @@
+// [string] Address to listen, all addresses will be used when empty
+// address = ""
+
+// [string] Port to listen
+// port = "8080"
+
+// [bool] Permit clients to write to the TTY
+// permit_write = false
+
+// [bool] Enable basic authentication
+// enable_basic_auth = false
+
+// [string] Default username and password of basic authentication (user:pass)
+// To enable basic authentication, set `true` to `enable_basic_auth`
+// credential = "user:pass"
+
+// [bool] Enable random URL generation
+// enable_random_url = false
+
+// [int] Default length of random strings appended to URL
+// To enable random URL generation, set `true` to `enable_random_url`
+// random_url_length = 8
+
+// [bool] Enable TLS/SSL
+// enable_tls = false
+
+// [string] Default TLS certificate file path
+// tls_crt_file = "~/.gotty.crt"
+
+// [string] Default TLS key file path
+// tls_key_file = "~/.gotty.key"
+
+// [bool] Enable client certificate authentication
+// enable_tls_client_auth = false
+
+// [string] Certificate file of CA for client certificates
+// tls_ca_crt_file = "~/.gotty.ca.crt"
+
+// [string] Custom index.html file
+// index_file = ""
+
+// [string] Title format of browser window
+// Available variables are:
+// Command Command string
+// Pid PID of the process for the client
+// Hostname Server hostname
+// RemoteAddr Client IP address
+// title_format = "GoTTY - {{ .Command }} ({{ .Hostname }})"
+
+// [bool] Enable client side reconnection when connection closed
+// enable_reconnect = false
+
+// [int] Interval time to try reconnection (seconds)
+// To enable reconnection, set `true` to `enable_reconnect`
+// reconnect_time = 10
+
+// [int] Timeout seconds for waiting a client (0 to disable)
+// timeout = 60
+
+// [int] Maximum connection to gotty, 0(default) means no limit.
+// max_connection = 0
+
+// [bool] Accept only one client and exit gotty once the client exits
+// once = false
+
+// [bool] Permit clients to send command line arguments in URL (e.g. http://example.com:8080/?arg=AAA&arg=BBB)
+// permit_arguments = false
+
+// [object] Client terminal (hterm) preferences
+// preferences {
+
+ // [enum(null, "none", "ctrl-alt", "left-alt", "right-alt")]
+ // Select an AltGr detection hack^Wheuristic.
+ // null: Autodetect based on navigator.language: "en-us" => "none", else => "right-alt"
+ // "none": Disable any AltGr related munging.
+ // "ctrl-alt": Assume Ctrl+Alt means AltGr.
+ // "left-alt": Assume left Alt means AltGr.
+ // "right-alt": Assume right Alt means AltGr.
+ // alt_gr_mode = null
+
+ // [bool] If set, alt-backspace indeed is alt-backspace.
+ // alt_backspace_is_meta_backspace = false
+
+ // [bool] Set whether the alt key acts as a meta key or as a distinct alt key.
+ // alt_is_meta = false
+
+ // [enum("escape", "8-bit", "browser-key")]
+ // Controls how the alt key is handled.
+ // "escape"....... Send an ESC prefix.
+ // "8-bit"........ Add 128 to the unshifted character as in xterm.
+ // "browser-key".. Wait for the keypress event and see what the browser says.
+ // (This won't work well on platforms where the browser performs a default action for some alt sequences.)
+ // alt_sends_what = "escape"
+
+ // [string] URL of the terminal bell sound. Empty string for no audible bell.
+ // audible_bell_sound = "lib-resource:hterm/audio/bell"
+
+ // [bool] If true, terminal bells in the background will create a Web Notification. http://www.w3.org/TR/notifications/
+ // Displaying notifications requires permission from the user.
+ // When this option is set to true, hterm will attempt to ask the user for permission if necessary.
+ // Note browsers may not show this permission request
+ // if it did not originate from a user action.
+ // desktop_notification_bell = false
+
+ // [string] The background color for text with no other color attributes.
+ // background_color = "rgb(16, 16, 16)"
+
+ // [string] CSS value of the background image. Empty string for no image.
+ // For example:
+ // "url(https://goo.gl/anedTK) linear-gradient(top bottom, blue, red)"
+ // background_image = ""
+
+ // [string] CSS value of the background image size. Defaults to none.
+ // background_size = ""
+
+ // [string] CSS value of the background image position.
+ // For example:
+ // "10% 10% center"
+ // background_position = ""
+
+ // [bool] If true, the backspace should send BS ('\x08', aka ^H). Otherwise the backspace key should send '\x7f'.
+ // backspace_sends_backspace = false
+
+ // [map[string]map[string]string]
+ // A nested map where each property is the character set code and the value is a map that is a sparse array itself.
+ // In that sparse array, each property is the received character and the value is the displayed character.
+ // For example:
+ // {"0" = {"+" = "\u2192"
+ // "," = "\u2190"
+ // "-" = "\u2191"
+ // "." = "\u2193"
+ // "0" = "\u2588"}}
+ // character_map_overrides = null
+
+ // [bool] Whether or not to close the window when the command exits.
+ // close_on_exit = true
+
+ // [bool] Whether or not to blink the cursor by default.
+ // cursor_blink = false
+
+ // [2[int]] The cursor blink rate in milliseconds.
+ // A two element array, the first of which is how long the cursor should be on, second is how long it should be off.
+ // cursor_blink_cycle = [1000, 500]
+
+ // [string] The color of the visible cursor.
+ // cursor_color = "rgba(255, 0, 0, 0.5)"
+
+ // [[]string]
+ // Override colors in the default palette.
+ // This can be specified as an array or an object.
+ // Values can be specified as almost any css color value.
+ // This includes #RGB, #RRGGBB, rgb(...), rgba(...), and any color names that are also part of the stock X11 rgb.txt file.
+ // You can use 'null' to specify that the default value should be not be changed.
+ // This is useful for skipping a small number of indicies when the value is specified as an array.
+ // color_palette_overrides = null
+
+ // [bool] Automatically copy mouse selection to the clipboard.
+ // copy_on_select = true
+
+ // [bool] Whether to use the default window copy behaviour
+ // use_default_window_copy = false
+
+ // [bool] Whether to clear the selection after copying.
+ // clear_selection_after_copy = true
+
+ // [bool] If true, Ctrl-Plus/Minus/Zero controls zoom.
+ // If false, Ctrl-Shift-Plus/Minus/Zero controls zoom, Ctrl-Minus sends ^_, Ctrl-Plus/Zero do nothing.
+ // ctrl_plus_minus_zero_zoom = true
+
+ // [bool] Ctrl+C copies if true, send ^C to host if false.
+ // Ctrl+Shift+C sends ^C to host if true, copies if false.
+ // ctrl_c_copy = false
+
+ // [bool] Ctrl+V pastes if true, send ^V to host if false.
+ // Ctrl+Shift+V sends ^V to host if true, pastes if false.
+ // ctrl_v_paste = false
+
+ // [bool] Set whether East Asian Ambiguous characters have two column width.
+ // east_asian_ambiguous_as_two_column = false
+
+ // [bool] True to enable 8-bit control characters, false to ignore them.
+ // We'll respect the two-byte versions of these control characters regardless of this setting.
+ // enable_8_bit_control = false
+
+ // [enum(null, true, false)]
+ // True if we should use bold weight font for text with the bold/bright attribute.
+ // False to use the normal weight font.
+ // Null to autodetect.
+ // enable_bold = null
+
+ // [bool] True if we should use bright colors (8-15 on a 16 color palette) for any text with the bold attribute.
+ // False otherwise.
+ // enable_bold_as_bright = true
+
+ // [bool] Show a message in the terminal when the host writes to the clipboard.
+ // enable_clipboard_notice = true
+
+ // [bool] Allow the host to write directly to the system clipboard.
+ // enable_clipboard_write = true
+
+ // [bool] Respect the host's attempt to change the cursor blink status using DEC Private Mode 12.
+ // enable_dec12 = false
+
+ // [map[string]string] The default environment variables, as an object.
+ // environment = {"TERM" = "xterm-256color"}
+
+ // [string] Default font family for the terminal text.
+ // font_family = "'DejaVu Sans Mono', 'Everson Mono', FreeMono, 'Menlo', 'Terminal', monospace"
+
+ // [int] The default font size in pixels.
+ // font_size = 15
+
+ // [string] CSS font-smoothing property.
+ // font_smoothing = "antialiased"
+
+ // [string] The foreground color for text with no other color attributes.
+ // foreground_color = "rgb(240, 240, 240)"
+
+ // [bool] If true, home/end will control the terminal scrollbar and shift home/end will send the VT keycodes.
+ // If false then home/end sends VT codes and shift home/end scrolls.
+ // home_keys_scroll = false
+
+ // [map[string]string]
+ // A map of key sequence to key actions.
+ // Key sequences include zero or more modifier keys followed by a key code.
+ // Key codes can be decimal or hexadecimal numbers, or a key identifier.
+ // Key actions can be specified a string to send to the host, or an action identifier.
+ // For a full list of key code and action identifiers, see https://goo.gl/8AoD09.
+ // Sample keybindings:
+ // {"Ctrl-Alt-K" = "clearScrollback"
+ // "Ctrl-Shift-L"= "PASS"
+ // "Ctrl-H" = "'HELLO\n'"}
+ // keybindings = null
+
+ // [int] Max length of a DCS, OSC, PM, or APS sequence before we give up and ignore the code.
+ // max_string_sequence = 100000
+
+ // [bool] If true, convert media keys to their Fkey equivalent.
+ // If false, let the browser handle the keys.
+ // media_keys_are_fkeys = false
+
+ // [bool] Set whether the meta key sends a leading escape or not.
+ // meta_sends_escape = true
+
+ // [enum(null, 0, 1, 2, 3, 4, 5, 6]
+ // Mouse paste button, or null to autodetect.
+ // For autodetect, we'll try to enable middle button paste for non-X11 platforms.
+ // On X11 we move it to button 3.
+ // mouse_paste_button = null
+
+ // [bool] If true, page up/down will control the terminal scrollbar and shift page up/down will send the VT keycodes.
+ // If false then page up/down sends VT codes and shift page up/down scrolls.
+ // page_keys_scroll = false
+
+ // [enum(null, true, false)]
+ // Set whether we should pass Alt-1..9 to the browser.
+ // This is handy when running hterm in a browser tab, so that you don't lose Chrome's "switch to tab" keyboard accelerators.
+ // When not running in a tab it's better to send these keys to the host so they can be used in vim or emacs.
+ // If true, Alt-1..9 will be handled by the browser.
+ // If false, Alt-1..9 will be sent to the host.
+ // If null, autodetect based on browser platform and window type.
+ // pass_alt_number = null
+
+ // [enum(null, true, false)]
+ // Set whether we should pass Ctrl-1..9 to the browser.
+ // This is handy when running hterm in a browser tab, so that you don't lose Chrome's "switch to tab" keyboard accelerators.
+ // When not running in a tab it's better to send these keys to the host so they can be used in vim or emacs.
+ // If true, Ctrl-1..9 will be handled by the browser.
+ // If false, Ctrl-1..9 will be sent to the host.
+ // If null, autodetect based on browser platform and window type.
+ // pass_ctrl_number = null
+
+ // [enum(null, true, false)]
+ // Set whether we should pass Meta-1..9 to the browser.
+ // This is handy when running hterm in a browser tab, so that you don't lose Chrome's "switch to tab" keyboard accelerators.
+ // When not running in a tab it's better to send these keys to the host so they can be used in vim or emacs.
+ // If true, Meta-1..9 will be handled by the browser.
+ // If false, Meta-1..9 will be sent to the host. If null, autodetect based on browser platform and window type.
+ // pass_meta_number = null
+
+ // [bool] Set whether meta-V gets passed to host.
+ // pass_meta_v = true
+
+ // [bool] If true, scroll to the bottom on any keystroke.
+ // scroll_on_keystroke = true
+
+ // [bool] If true, scroll to the bottom on terminal output.
+ // scroll_on_output = false
+
+ // [bool] The vertical scrollbar mode.
+ // scrollbar_visible = true
+
+ // [int] The multiplier for the pixel delta in mousewheel event caused by the scroll wheel. Alters how fast the page scrolls.
+ // scroll_wheel_move_multiplier = 1
+
+ // [bool] Shift + Insert pastes if true, sent to host if false.
+ // shift_insert_paste = true
+
+ // [string] URL of user stylesheet to include in the terminal document.
+ // user_css = ""
+
+// }
diff --git a/vendor/github.com/yudai/gotty/CONTRIBUTING.md b/vendor/github.com/yudai/gotty/CONTRIBUTING.md
new file mode 100644
index 0000000..191bbf9
--- /dev/null
+++ b/vendor/github.com/yudai/gotty/CONTRIBUTING.md
@@ -0,0 +1,44 @@
+# How to contribute
+
+GoTTY is MIT licensed and accepts contributions via GitHub pull requests. We also accepts feature requests on GitHub issues.
+
+## Reporting a bug
+
+Reporting a bug is always welcome and one of the best ways to contribute. A good bug report helps the developers to improve the product much easier. We therefore would like to ask you to fill out the quesions on the issue template as much as possible. That helps us to figure out what's happening and discover the root cause.
+
+
+## Requesting a new feature
+
+When you find that GoTTY cannot fullfill your requirements because of lack of ability, you may want to open a new feature request. In that case, please file a new issue with your usecase and requirements.
+
+
+## Opening a pull request
+
+### Code Style
+
+Please run `go fmt` on your Go code and make sure that your commits are organized for each logical change and your commit messages are in proper format (see below).
+
+[Go's official code style guide](https://github.com/golang/go/wiki/CodeReviewComments) is also helpful.
+
+### Format of the commit message
+
+When you write a commit message, we recommend include following information to make review easier and keep the history cleaerer.
+
+* What is the change
+* The reason for the change
+
+The following is an example:
+
+```
+Add something new to existing package
+
+Since the existing function lacks that mechanism for some purpose,
+this commit adds a new structure to provide it.
+```
+
+When your pull request is to add a new feature, we recommend add an actual usecase so that we can discuss the best way to achive your requirement. Opening a proposal issue in advance is another good way to start discussion of new features.
+
+
+## Contact
+
+If you have a trivial question about GoTTY for a bug or new feature, you can contact @i_yudai on Twitter (unfortunately, I cannot provide support on GoTTY though).
diff --git a/vendor/github.com/yudai/gotty/Godeps/Godeps.json b/vendor/github.com/yudai/gotty/Godeps/Godeps.json
new file mode 100644
index 0000000..b17aa5c
--- /dev/null
+++ b/vendor/github.com/yudai/gotty/Godeps/Godeps.json
@@ -0,0 +1,54 @@
+{
+ "ImportPath": "github.com/yudai/gotty",
+ "GoVersion": "go1.9",
+ "GodepVersion": "v79",
+ "Deps": [
+ {
+ "ImportPath": "github.com/NYTimes/gziphandler",
+ "Rev": "967539e5e271a2bc9b3dcb1285078a1b1df105ae"
+ },
+ {
+ "ImportPath": "github.com/codegangsta/cli",
+ "Comment": "v1.19.1",
+ "Rev": "0bdeddeeb0f650497d603c4ad7b20cfe685682f6"
+ },
+ {
+ "ImportPath": "github.com/elazarl/go-bindata-assetfs",
+ "Rev": "d5cac425555ca5cf00694df246e04f05e6a55150"
+ },
+ {
+ "ImportPath": "github.com/fatih/structs",
+ "Rev": "a9f7daa9c2729e97450c2da2feda19130a367d8f"
+ },
+ {
+ "ImportPath": "github.com/gorilla/websocket",
+ "Rev": "b6ab76f1fe9803ee1d59e7e5b2a797c1fe897ce5"
+ },
+ {
+ "ImportPath": "github.com/hashicorp/go-multierror",
+ "Rev": "56912fb08d85084aa318edcf2bba735b97cf35c5"
+ },
+ {
+ "ImportPath": "github.com/kr/pty",
+ "Comment": "release.r56-28-g5cf931e",
+ "Rev": "5cf931ef8f76dccd0910001d74a58a7fca84a83d"
+ },
+ {
+ "ImportPath": "github.com/pkg/errors",
+ "Comment": "v0.8.0-2-g248dadf",
+ "Rev": "248dadf4e9068a0b3e79f02ed0a610d935de5302"
+ },
+ {
+ "ImportPath": "github.com/yudai/hcl",
+ "Rev": "5fa2393b3552119bf33a69adb1402a1160cba23d"
+ },
+ {
+ "ImportPath": "github.com/yudai/hcl/hcl",
+ "Rev": "5fa2393b3552119bf33a69adb1402a1160cba23d"
+ },
+ {
+ "ImportPath": "github.com/yudai/hcl/json",
+ "Rev": "5fa2393b3552119bf33a69adb1402a1160cba23d"
+ }
+ ]
+}
diff --git a/vendor/github.com/yudai/gotty/Godeps/Readme b/vendor/github.com/yudai/gotty/Godeps/Readme
new file mode 100644
index 0000000..4cdaa53
--- /dev/null
+++ b/vendor/github.com/yudai/gotty/Godeps/Readme
@@ -0,0 +1,5 @@
+This directory tree is generated automatically by godep.
+
+Please do not edit.
+
+See https://github.com/tools/godep for more information.
diff --git a/vendor/github.com/yudai/gotty/LICENSE b/vendor/github.com/yudai/gotty/LICENSE
new file mode 100644
index 0000000..e93081f
--- /dev/null
+++ b/vendor/github.com/yudai/gotty/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015-2017 Iwasaki Yudai
+
+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.
diff --git a/vendor/github.com/yudai/gotty/Makefile b/vendor/github.com/yudai/gotty/Makefile
new file mode 100644
index 0000000..0326580
--- /dev/null
+++ b/vendor/github.com/yudai/gotty/Makefile
@@ -0,0 +1,80 @@
+OUTPUT_DIR = ./builds
+GIT_COMMIT = `git rev-parse HEAD | cut -c1-7`
+VERSION = 2.0.0-alpha.3
+BUILD_OPTIONS = -ldflags "-X main.Version=$(VERSION) -X main.CommitID=$(GIT_COMMIT)"
+
+gotty: main.go server/*.go webtty/*.go backend/*.go Makefile
+ godep go build ${BUILD_OPTIONS}
+
+.PHONY: asset
+asset: bindata/static/js/gotty-bundle.js bindata/static/index.html bindata/static/favicon.png bindata/static/css/index.css bindata/static/css/xterm.css bindata/static/css/xterm_customize.css
+ go-bindata -prefix bindata -pkg server -ignore=\\.gitkeep -o server/asset.go bindata/...
+ gofmt -w server/asset.go
+
+.PHONY: all
+all: asset gotty
+
+bindata:
+ mkdir bindata
+
+bindata/static: bindata
+ mkdir bindata/static
+
+bindata/static/index.html: bindata/static resources/index.html
+ cp resources/index.html bindata/static/index.html
+
+bindata/static/favicon.png: bindata/static resources/favicon.png
+ cp resources/favicon.png bindata/static/favicon.png
+
+bindata/static/js: bindata/static
+ mkdir -p bindata/static/js
+
+
+bindata/static/js/gotty-bundle.js: bindata/static/js js/dist/gotty-bundle.js
+ cp js/dist/gotty-bundle.js bindata/static/js/gotty-bundle.js
+
+bindata/static/css: bindata/static
+ mkdir -p bindata/static/css
+
+bindata/static/css/index.css: bindata/static/css resources/index.css
+ cp resources/index.css bindata/static/css/index.css
+
+bindata/static/css/xterm_customize.css: bindata/static/css resources/xterm_customize.css
+ cp resources/xterm_customize.css bindata/static/css/xterm_customize.css
+
+bindata/static/css/xterm.css: bindata/static/css js/node_modules/xterm/dist/xterm.css
+ cp js/node_modules/xterm/dist/xterm.css bindata/static/css/xterm.css
+
+js/node_modules/xterm/dist/xterm.css:
+ cd js && \
+ npm install
+
+js/dist/gotty-bundle.js: js/src/* js/node_modules/webpack
+ cd js && \
+ `npm bin`/webpack
+
+js/node_modules/webpack:
+ cd js && \
+ npm install
+
+tools:
+ go get github.com/tools/godep
+ go get github.com/mitchellh/gox
+ go get github.com/tcnksm/ghr
+ go get github.com/jteeuwen/go-bindata/...
+
+test:
+ if [ `go fmt $(go list ./... | grep -v /vendor/) | wc -l` -gt 0 ]; then echo "go fmt error"; exit 1; fi
+
+cross_compile:
+ GOARM=5 gox -os="darwin linux freebsd netbsd openbsd" -arch="386 amd64 arm" -osarch="!darwin/arm" -output "${OUTPUT_DIR}/pkg/{{.OS}}_{{.Arch}}/{{.Dir}}"
+
+targz:
+ mkdir -p ${OUTPUT_DIR}/dist
+ cd ${OUTPUT_DIR}/pkg/; for osarch in *; do (cd $$osarch; tar zcvf ../../dist/gotty_${VERSION}_$$osarch.tar.gz ./*); done;
+
+shasums:
+ cd ${OUTPUT_DIR}/dist; sha256sum * > ./SHA256SUMS
+
+release:
+ ghr -c ${GIT_COMMIT} --delete --prerelease -u yudai -r gotty pre-release ${OUTPUT_DIR}/dist
diff --git a/vendor/github.com/yudai/gotty/README.md b/vendor/github.com/yudai/gotty/README.md
new file mode 100644
index 0000000..6a89233
--- /dev/null
+++ b/vendor/github.com/yudai/gotty/README.md
@@ -0,0 +1,191 @@
+#  GoTTY - Share your terminal as a web application
+
+[][release]
+[][wercker]
+[][license]
+
+[release]: https://github.com/yudai/gotty/releases
+[wercker]: https://app.wercker.com/project/bykey/03b91f441bebeda34f80e09a9f14126f
+[license]: https://github.com/yudai/gotty/blob/master/LICENSE
+
+GoTTY is a simple command line tool that turns your CLI tools into web applications.
+
+
+
+# Installation
+
+Download the latest stable binary file from the [Releases](https://github.com/yudai/gotty/releases) page. Note that the release marked `Pre-release` is built for testing purpose, which can include unstable or breaking changes. Download a release marked [Latest release](https://github.com/yudai/gotty/releases/latest) for a stabale build.
+
+(Files named with `darwin_amd64` are for Mac OS X users)
+
+## Homebrew Installation
+
+You can install GoTTY with [Homebrew](http://brew.sh/) as well.
+
+```sh
+$ brew install yudai/gotty/gotty
+```
+
+## `go get` Installation (Development)
+
+If you have a Go language environment, you can install GoTTY with the `go get` command. However, this command builds a binary file from the latest master branch, which can include unstable or breaking changes. GoTTY requires go1.9 or later.
+
+```sh
+$ go get github.com/yudai/gotty
+```
+
+# Usage
+
+```
+Usage: gotty [options] []
+```
+
+Run `gotty` with your preferred command as its arguments (e.g. `gotty top`).
+
+By default, GoTTY starts a web server at port 8080. Open the URL on your web browser and you can see the running command as if it were running on your terminal.
+
+## Options
+
+```
+--address value, -a value IP address to listen (default: "0.0.0.0") [$GOTTY_ADDRESS]
+--port value, -p value Port number to liten (default: "8080") [$GOTTY_PORT]
+--permit-write, -w Permit clients to write to the TTY (BE CAREFUL) [$GOTTY_PERMIT_WRITE]
+--credential value, -c value Credential for Basic Authentication (ex: user:pass, default disabled) [$GOTTY_CREDENTIAL]
+--random-url, -r Add a random string to the URL [$GOTTY_RANDOM_URL]
+--random-url-length value Random URL length (default: 8) [$GOTTY_RANDOM_URL_LENGTH]
+--tls, -t Enable TLS/SSL [$GOTTY_TLS]
+--tls-crt value TLS/SSL certificate file path (default: "~/.gotty.crt") [$GOTTY_TLS_CRT]
+--tls-key value TLS/SSL key file path (default: "~/.gotty.key") [$GOTTY_TLS_KEY]
+--tls-ca-crt value TLS/SSL CA certificate file for client certifications (default: "~/.gotty.ca.crt") [$GOTTY_TLS_CA_CRT]
+--index value Custom index.html file [$GOTTY_INDEX]
+--title-format value Title format of browser window (default: "{{ .command }}@{{ .hostname }}") [$GOTTY_TITLE_FORMAT]
+--reconnect Enable reconnection [$GOTTY_RECONNECT]
+--reconnect-time value Time to reconnect (default: 10) [$GOTTY_RECONNECT_TIME]
+--max-connection value Maximum connection to gotty (default: 0) [$GOTTY_MAX_CONNECTION]
+--once Accept only one client and exit on disconnection [$GOTTY_ONCE]
+--timeout value Timeout seconds for waiting a client(0 to disable) (default: 0) [$GOTTY_TIMEOUT]
+--permit-arguments Permit clients to send command line arguments in URL (e.g. http://example.com:8080/?arg=AAA&arg=BBB) [$GOTTY_PERMIT_ARGUMENTS]
+--width value Static width of the screen, 0(default) means dynamically resize (default: 0) [$GOTTY_WIDTH]
+--height value Static height of the screen, 0(default) means dynamically resize (default: 0) [$GOTTY_HEIGHT]
+--ws-origin value A regular expression that matches origin URLs to be accepted by WebSocket. No cross origin requests are acceptable by default [$GOTTY_WS_ORIGIN]
+--term value Terminal name to use on the browser, one of xterm or hterm. (default: "xterm") [$GOTTY_TERM]
+--close-signal value Signal sent to the command process when gotty close it (default: SIGHUP) (default: 1) [$GOTTY_CLOSE_SIGNAL]
+--close-timeout value Time in seconds to force kill process after client is disconnected (default: -1) (default: -1) [$GOTTY_CLOSE_TIMEOUT]
+--config value Config file path (default: "~/.gotty") [$GOTTY_CONFIG]
+--version, -v print the version
+```
+
+### Config File
+
+You can customize default options and your terminal (hterm) by providing a config file to the `gotty` command. GoTTY loads a profile file at `~/.gotty` by default when it exists.
+
+```
+// Listen at port 9000 by default
+port = "9000"
+
+// Enable TSL/SSL by default
+enable_tls = true
+
+// hterm preferences
+// Smaller font and a little bit bluer background color
+preferences {
+ font_size = 5
+ background_color = "rgb(16, 16, 32)"
+}
+```
+
+See the [`.gotty`](https://github.com/yudai/gotty/blob/master/.gotty) file in this repository for the list of configuration options.
+
+### Security Options
+
+By default, GoTTY doesn't allow clients to send any keystrokes or commands except terminal window resizing. When you want to permit clients to write input to the TTY, add the `-w` option. However, accepting input from remote clients is dangerous for most commands. When you need interaction with the TTY for some reasons, consider starting GoTTY with tmux or GNU Screen and run your command on it (see "Sharing with Multiple Clients" section for detail).
+
+To restrict client access, you can use the `-c` option to enable the basic authentication. With this option, clients need to input the specified username and password to connect to the GoTTY server. Note that the credentical will be transmitted between the server and clients in plain text. For more strict authentication, consider the SSL/TLS client certificate authentication described below.
+
+The `-r` option is a little bit casualer way to restrict access. With this option, GoTTY generates a random URL so that only people who know the URL can get access to the server.
+
+All traffic between the server and clients are NOT encrypted by default. When you send secret information through GoTTY, we strongly recommend you use the `-t` option which enables TLS/SSL on the session. By default, GoTTY loads the crt and key files placed at `~/.gotty.crt` and `~/.gotty.key`. You can overwrite these file paths with the `--tls-crt` and `--tls-key` options. When you need to generate a self-signed certification file, you can use the `openssl` command.
+
+```sh
+openssl req -x509 -nodes -days 9999 -newkey rsa:2048 -keyout ~/.gotty.key -out ~/.gotty.crt
+```
+
+(NOTE: For Safari uses, see [how to enable self-signed certificates for WebSockets](http://blog.marcon.me/post/24874118286/secure-websockets-safari) when use self-signed certificates)
+
+For additional security, you can use the SSL/TLS client certificate authentication by providing a CA certificate file to the `--tls-ca-crt` option (this option requires the `-t` or `--tls` to be set). This option requires all clients to send valid client certificates that are signed by the specified certification authority.
+
+## Sharing with Multiple Clients
+
+GoTTY starts a new process with the given command when a new client connects to the server. This means users cannot share a single terminal with others by default. However, you can use terminal multiplexers for sharing a single process with multiple clients.
+
+For example, you can start a new tmux session named `gotty` with `top` command by the command below.
+
+```sh
+$ gotty tmux new -A -s gotty top
+```
+
+This command doesn't allow clients to send keystrokes, however, you can attach the session from your local terminal and run operations like switching the mode of the `top` command. To connect to the tmux session from your terminal, you can use following command.
+
+```sh
+$ tmux new -A -s gotty
+```
+
+By using terminal multiplexers, you can have the control of your terminal and allow clients to just see your screen.
+
+### Quick Sharing on tmux
+
+To share your current session with others by a shortcut key, you can add a line like below to your `.tmux.conf`.
+
+```
+# Start GoTTY in a new window with C-t
+bind-key C-t new-window "gotty tmux attach -t `tmux display -p '#S'`"
+```
+
+## Playing with Docker
+
+When you want to create a jailed environment for each client, you can use Docker containers like following:
+
+```sh
+$ gotty -w docker run -it --rm busybox
+```
+
+## Development
+
+You can build a binary using the following commands. Windows is not supported now. go1.9 is required.
+
+```sh
+# Install tools
+go get github.com/jteeuwen/go-bindata/...
+go get github.com/tools/godep
+
+# Build
+make
+```
+
+To build the frontend part (JS files and other static files), you need `npm`.
+
+## Architecture
+
+GoTTY uses [xterm.js](https://xtermjs.org/) and [hterm](https://groups.google.com/a/chromium.org/forum/#!forum/chromium-hterm) to run a JavaScript based terminal on web browsers. GoTTY itself provides a websocket server that simply relays output from the TTY to clients and receives input from clients and forwards it to the TTY. This hterm + websocket idea is inspired by [Wetty](https://github.com/krishnasrinivas/wetty).
+
+## Alternatives
+
+### Command line client
+
+* [gotty-client](https://github.com/moul/gotty-client): If you want to connect to GoTTY server from your terminal
+
+### Terminal/SSH on Web Browsers
+
+* [Secure Shell (Chrome App)](https://chrome.google.com/webstore/detail/secure-shell/pnhechapfaindjhompbnflcldabbghjo): If you are a chrome user and need a "real" SSH client on your web browser, perhaps the Secure Shell app is what you want
+* [Wetty](https://github.com/krishnasrinivas/wetty): Node based web terminal (SSH/login)
+* [ttyd](https://tsl0922.github.io/ttyd): C port of GoTTY with CJK and IME support
+
+### Terminal Sharing
+
+* [tmate](http://tmate.io/): Forked-Tmux based Terminal-Terminal sharing
+* [termshare](https://termsha.re): Terminal-Terminal sharing through a HTTP server
+* [tmux](https://tmux.github.io/): Tmux itself also supports TTY sharing through SSH)
+
+# License
+
+The MIT License
diff --git a/vendor/github.com/yudai/gotty/backend/doc.go b/vendor/github.com/yudai/gotty/backend/doc.go
new file mode 100644
index 0000000..2480943
--- /dev/null
+++ b/vendor/github.com/yudai/gotty/backend/doc.go
@@ -0,0 +1 @@
+package backend
diff --git a/vendor/github.com/yudai/gotty/backend/localcommand/doc.go b/vendor/github.com/yudai/gotty/backend/localcommand/doc.go
new file mode 100644
index 0000000..47cc2b7
--- /dev/null
+++ b/vendor/github.com/yudai/gotty/backend/localcommand/doc.go
@@ -0,0 +1,3 @@
+// Package localcommand provides an implementation of webtty.Slave
+// that launches a local command with a PTY.
+package localcommand
diff --git a/vendor/github.com/yudai/gotty/backend/localcommand/factory.go b/vendor/github.com/yudai/gotty/backend/localcommand/factory.go
new file mode 100644
index 0000000..11810ed
--- /dev/null
+++ b/vendor/github.com/yudai/gotty/backend/localcommand/factory.go
@@ -0,0 +1,48 @@
+package localcommand
+
+import (
+ "syscall"
+ "time"
+
+ "github.com/yudai/gotty/server"
+)
+
+type Options struct {
+ CloseSignal int `hcl:"close_signal" flagName:"close-signal" flagSName:"" flagDescribe:"Signal sent to the command process when gotty close it (default: SIGHUP)" default:"1"`
+ CloseTimeout int `hcl:"close_timeout" flagName:"close-timeout" flagSName:"" flagDescribe:"Time in seconds to force kill process after client is disconnected (default: -1)" default:"-1"`
+}
+
+type Factory struct {
+ command string
+ argv []string
+ options *Options
+ opts []Option
+}
+
+func NewFactory(command string, argv []string, options *Options) (*Factory, error) {
+ opts := []Option{WithCloseSignal(syscall.Signal(options.CloseSignal))}
+ if options.CloseTimeout >= 0 {
+ opts = append(opts, WithCloseTimeout(time.Duration(options.CloseTimeout)*time.Second))
+ }
+
+ return &Factory{
+ command: command,
+ argv: argv,
+ options: options,
+ opts: opts,
+ }, nil
+}
+
+func (factory *Factory) Name() string {
+ return "local command"
+}
+
+func (factory *Factory) New(params map[string][]string) (server.Slave, error) {
+ argv := make([]string, len(factory.argv))
+ copy(argv, factory.argv)
+ if params["arg"] != nil && len(params["arg"]) > 0 {
+ argv = append(argv, params["arg"]...)
+ }
+
+ return New(factory.command, argv, factory.opts...)
+}
diff --git a/vendor/github.com/yudai/gotty/backend/localcommand/local_command.go b/vendor/github.com/yudai/gotty/backend/localcommand/local_command.go
new file mode 100644
index 0000000..4beca86
--- /dev/null
+++ b/vendor/github.com/yudai/gotty/backend/localcommand/local_command.go
@@ -0,0 +1,132 @@
+package localcommand
+
+import (
+ "os"
+ "os/exec"
+ "syscall"
+ "time"
+ "unsafe"
+
+ "github.com/kr/pty"
+ "github.com/pkg/errors"
+)
+
+const (
+ DefaultCloseSignal = syscall.SIGINT
+ DefaultCloseTimeout = 10 * time.Second
+)
+
+type LocalCommand struct {
+ command string
+ argv []string
+
+ closeSignal syscall.Signal
+ closeTimeout time.Duration
+
+ cmd *exec.Cmd
+ pty *os.File
+ ptyClosed chan struct{}
+}
+
+func New(command string, argv []string, options ...Option) (*LocalCommand, error) {
+ cmd := exec.Command(command, argv...)
+
+ pty, err := pty.Start(cmd)
+ if err != nil {
+ // todo close cmd?
+ return nil, errors.Wrapf(err, "failed to start command `%s`", command)
+ }
+ ptyClosed := make(chan struct{})
+
+ lcmd := &LocalCommand{
+ command: command,
+ argv: argv,
+
+ closeSignal: DefaultCloseSignal,
+ closeTimeout: DefaultCloseTimeout,
+
+ cmd: cmd,
+ pty: pty,
+ ptyClosed: ptyClosed,
+ }
+
+ for _, option := range options {
+ option(lcmd)
+ }
+
+ // When the process is closed by the user,
+ // close pty so that Read() on the pty breaks with an EOF.
+ go func() {
+ defer func() {
+ lcmd.pty.Close()
+ close(lcmd.ptyClosed)
+ }()
+
+ lcmd.cmd.Wait()
+ }()
+
+ return lcmd, nil
+}
+
+func (lcmd *LocalCommand) Read(p []byte) (n int, err error) {
+ return lcmd.pty.Read(p)
+}
+
+func (lcmd *LocalCommand) Write(p []byte) (n int, err error) {
+ return lcmd.pty.Write(p)
+}
+
+func (lcmd *LocalCommand) Close() error {
+ if lcmd.cmd != nil && lcmd.cmd.Process != nil {
+ lcmd.cmd.Process.Signal(lcmd.closeSignal)
+ }
+ for {
+ select {
+ case <-lcmd.ptyClosed:
+ return nil
+ case <-lcmd.closeTimeoutC():
+ lcmd.cmd.Process.Signal(syscall.SIGKILL)
+ }
+ }
+}
+
+func (lcmd *LocalCommand) WindowTitleVariables() map[string]interface{} {
+ return map[string]interface{}{
+ "command": lcmd.command,
+ "argv": lcmd.argv,
+ "pid": lcmd.cmd.Process.Pid,
+ }
+}
+
+func (lcmd *LocalCommand) ResizeTerminal(width int, height int) error {
+ window := struct {
+ row uint16
+ col uint16
+ x uint16
+ y uint16
+ }{
+ uint16(height),
+ uint16(width),
+ 0,
+ 0,
+ }
+ _, _, errno := syscall.Syscall(
+ syscall.SYS_IOCTL,
+ lcmd.pty.Fd(),
+ syscall.TIOCSWINSZ,
+ uintptr(unsafe.Pointer(&window)),
+ )
+ if errno != 0 {
+ return errno
+ } else {
+ return nil
+ }
+}
+
+func (lcmd *LocalCommand) closeTimeoutC() <-chan time.Time {
+ if lcmd.closeTimeout >= 0 {
+ return time.After(lcmd.closeTimeout)
+ }
+
+ return make(chan time.Time)
+}
diff --git a/vendor/github.com/yudai/gotty/backend/localcommand/options.go b/vendor/github.com/yudai/gotty/backend/localcommand/options.go
new file mode 100644
index 0000000..72af01f
--- /dev/null
+++ b/vendor/github.com/yudai/gotty/backend/localcommand/options.go
@@ -0,0 +1,20 @@
+package localcommand
+
+import (
+ "syscall"
+ "time"
+)
+
+type Option func(*LocalCommand)
+
+func WithCloseSignal(signal syscall.Signal) Option {
+ return func(lcmd *LocalCommand) {
+ lcmd.closeSignal = signal
+ }
+}
+
+func WithCloseTimeout(timeout time.Duration) Option {
+ return func(lcmd *LocalCommand) {
+ lcmd.closeTimeout = timeout
+ }
+}
diff --git a/vendor/github.com/yudai/gotty/favicon.psd b/vendor/github.com/yudai/gotty/favicon.psd
new file mode 100755
index 0000000..e6f8925
Binary files /dev/null and b/vendor/github.com/yudai/gotty/favicon.psd differ
diff --git a/vendor/github.com/yudai/gotty/help.go b/vendor/github.com/yudai/gotty/help.go
new file mode 100644
index 0000000..edda2fc
--- /dev/null
+++ b/vendor/github.com/yudai/gotty/help.go
@@ -0,0 +1,19 @@
+package main
+
+var helpTemplate = `NAME:
+ {{.Name}} - {{.Usage}}
+
+USAGE:
+ {{.Name}} [options] []
+
+VERSION:
+ {{.Version}}{{if or .Author .Email}}
+
+AUTHOR:{{if .Author}}
+ {{.Author}}{{if .Email}} - <{{.Email}}>{{end}}{{else}}
+ {{.Email}}{{end}}{{end}}
+
+OPTIONS:
+ {{range .Flags}}{{.}}
+ {{end}}
+`
diff --git a/vendor/github.com/yudai/gotty/js/dist/gotty-bundle.js b/vendor/github.com/yudai/gotty/js/dist/gotty-bundle.js
new file mode 100644
index 0000000..b95cbae
--- /dev/null
+++ b/vendor/github.com/yudai/gotty/js/dist/gotty-bundle.js
@@ -0,0 +1,88 @@
+!function(e){function t(i){if(r[i])return r[i].exports;var o=r[i]={i:i,l:!1,exports:{}};return e[i].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var r={};t.m=e,t.c=r,t.i=function(e){return e},t.d=function(e,r,i){t.o(e,r)||Object.defineProperty(e,r,{configurable:!1,enumerable:!0,get:i})},t.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(r,"a",r),r},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=28)}([function(e,t,r){"use strict";function i(e){var t=this;if(!(this instanceof i))return new i(arguments[0],arguments[1],arguments[2]);t.browser=S,t.cancel=i.cancel,u.EventEmitter.call(this),"number"==typeof e&&(e={cols:arguments[0],rows:arguments[1],handler:arguments[2]}),e=e||{},Object.keys(i.defaults).forEach(function(r){null==e[r]&&(e[r]=i.options[r],i[r]!==i.defaults[r]&&(e[r]=i[r])),t[r]=e[r]}),8===e.colors.length?e.colors=e.colors.concat(i._colors.slice(8)):16===e.colors.length?e.colors=e.colors.concat(i._colors.slice(16)):10===e.colors.length?e.colors=e.colors.slice(0,-2).concat(i._colors.slice(8,-2),e.colors.slice(-2)):18===e.colors.length&&(e.colors=e.colors.concat(i._colors.slice(16,-2),e.colors.slice(-2))),this.colors=e.colors,this.options=e,this.parent=e.body||e.parent||(A?A.getElementsByTagName("body")[0]:null),this.cols=e.cols||e.geometry[0],this.rows=e.rows||e.geometry[1],this.geometry=[this.cols,this.rows],e.handler&&this.on("data",e.handler),this.ybase=0,this.ydisp=0,this.x=0,this.y=0,this.cursorState=0,this.cursorHidden=!1,this.convertEol,this.queue="",this.scrollTop=0,this.scrollBottom=this.rows-1,this.customKeyEventHandler=null,this.cursorBlinkInterval=null,this.applicationKeypad=!1,this.applicationCursor=!1,this.originMode=!1,this.insertMode=!1,this.wraparoundMode=!0,this.normal=null,this.charset=null,this.gcharset=null,this.glevel=0,this.charsets=[null],this.decLocator,this.x10Mouse,this.vt200Mouse,this.vt300Mouse,this.normalMouse,this.mouseEvents,this.sendFocus,this.utfMouse,this.sgrMouse,this.urxvtMouse,this.element,this.children,this.refreshStart,this.refreshEnd,this.savedX,this.savedY,this.savedCols,this.readable=!0,this.writable=!0,this.defAttr=131840,this.curAttr=this.defAttr,this.params=[],this.currentParam=0,this.prefix="",this.postfix="",this.inputHandler=new m.InputHandler(this),this.parser=new y.Parser(this.inputHandler,this),this.renderer=this.renderer||null,this.selectionManager=this.selectionManager||null,this.linkifier=this.linkifier||new _.Linkifier,this.writeBuffer=[],this.writeInProgress=!1,this.xoffSentToCatchUp=!1,this.writeStopped=!1,this.surrogate_high="",this.lines=new f.CircularList(this.scrollback);for(var r=this.rows;r--;)this.lines.push(this.blankLine());this.selectionManager&&this.selectionManager.setBuffer(this.lines),this.tabs,this.setupStops(),this.userScrolling=!1}function o(e,t,r,i){Array.isArray(e)||(e=[e]),e.forEach(function(e){e.addEventListener(t,r,i||!1)})}function s(e,t,r,i){e.removeEventListener(t,r,i||!1)}function n(e,t){function r(){this.constructor=e}r.prototype=t.prototype,e.prototype=new r}function a(e,t){var r=e.browser.isMac&&t.altKey&&!t.ctrlKey&&!t.metaKey||e.browser.isMSWindows&&t.altKey&&t.ctrlKey&&!t.metaKey;return"keypress"==t.type?r:r&&(!t.keyCode||t.keyCode>47)}function l(e,t,r){var o=e<<16|t<<8|r;if(null!=l._cache[o])return l._cache[o];for(var s,n,a,h,c,u=1/0,d=-1,p=0;p>16&255,e>>8&255,255&e]);return t}(),i.defaults={colors:i.colors,theme:"default",convertEol:!1,termName:"xterm",geometry:[80,24],cursorBlink:!1,cursorStyle:"block",visualBell:!1,popOnBell:!1,scrollback:1e3,screenKeys:!1,debug:!1,cancelEvents:!1,disableStdin:!1,useFlowControl:!1,tabStopWidth:8},i.options={},i.focus=null,function(e,t,r){if(e.forEach)return e.forEach(t,r);for(var i=0;it){var o=this.lines.length-t,s=this.ydisp-o<0;this.lines.trimStart(o),this.ybase=Math.max(this.ybase-o,0),this.ydisp=Math.max(this.ydisp-o,0),s&&this.refresh(0,this.rows-1)}this.lines.maxLength=t,this.viewport.syncScrollArea()}}switch(this[e]=t,this.options[e]=t,e){case"cursorBlink":this.setCursorBlinking(t);break;case"cursorStyle":this.element.classList.toggle("xterm-cursor-style-underline","underline"===t),this.element.classList.toggle("xterm-cursor-style-bar","bar"===t);break;case"tabStopWidth":this.setupStops()}},i.prototype.restartCursorBlinking=function(){this.setCursorBlinking(this.options.cursorBlink)},i.prototype.setCursorBlinking=function(e){if(this.element.classList.toggle("xterm-cursor-blink",e),this.clearCursorBlinkingInterval(),e){var t=this;this.cursorBlinkInterval=setInterval(function(){t.element.classList.toggle("xterm-cursor-blink-on")},600)}},i.prototype.clearCursorBlinkingInterval=function(){this.element.classList.remove("xterm-cursor-blink-on"),this.cursorBlinkInterval&&(clearInterval(this.cursorBlinkInterval),this.cursorBlinkInterval=null)},i.bindFocus=function(e){o(e.textarea,"focus",function(t){e.sendFocus&&e.send(g.C0.ESC+"[I"),e.element.classList.add("focus"),e.showCursor(),e.restartCursorBlinking.apply(e),i.focus=e,e.emit("focus",{terminal:e})})},i.prototype.blur=function(){return this.textarea.blur()},i.bindBlur=function(e){o(e.textarea,"blur",function(t){e.refresh(e.y,e.y),e.sendFocus&&e.send(g.C0.ESC+"[O"),e.element.classList.remove("focus"),e.clearCursorBlinkingInterval.apply(e),i.focus=null,e.emit("blur",{terminal:e})})},i.prototype.initGlobal=function(){var e=this,t=this;i.bindKeys(this),i.bindFocus(this),i.bindBlur(this),o(this.element,"copy",function(r){e.mouseEvents||p.copyHandler(r,t,e.selectionManager)});var r=function(e){return p.pasteHandler(e,t)};o(this.textarea,"paste",r),o(this.element,"paste",r),t.browser.isFirefox?o(this.element,"mousedown",function(t){2==t.button&&p.rightClickHandler(t,e.textarea,e.selectionManager)}):o(this.element,"contextmenu",function(t){p.rightClickHandler(t,e.textarea,e.selectionManager)}),t.browser.isLinux&&o(this.element,"auxclick",function(t){1===t.button&&p.moveTextAreaUnderMouseCursor(t,e.textarea,e.selectionManager)})},i.bindKeys=function(e){o(e.element,"keydown",function(t){A.activeElement==this&&e.keyDown(t)},!0),o(e.element,"keypress",function(t){A.activeElement==this&&e.keyPress(t)},!0),o(e.element,"keyup",function(t){h(t)||e.focus(e)},!0),o(e.textarea,"keydown",function(t){e.keyDown(t)},!0),o(e.textarea,"keypress",function(t){e.keyPress(t),this.value=""},!0),o(e.textarea,"compositionstart",e.compositionHelper.compositionstart.bind(e.compositionHelper)),o(e.textarea,"compositionupdate",e.compositionHelper.compositionupdate.bind(e.compositionHelper)),o(e.textarea,"compositionend",e.compositionHelper.compositionend.bind(e.compositionHelper)),e.on("refresh",e.compositionHelper.updateCompositionElements.bind(e.compositionHelper)),e.on("refresh",function(t){e.queueLinkification(t.start,t.end)})},i.prototype.insertRow=function(e){return"object"!=typeof e&&(e=A.createElement("div")),this.rowContainer.appendChild(e),this.children.push(e),e},i.prototype.open=function(e,t){var r=this,i=this,s=0;if(this.parent=e||this.parent,!this.parent)throw new Error("Terminal requires a parent element.");for(this.context=this.parent.ownerDocument.defaultView,this.document=this.parent.ownerDocument,this.body=this.document.getElementsByTagName("body")[0],this.element=this.document.createElement("div"),this.element.classList.add("terminal"),this.element.classList.add("xterm"),this.element.classList.add("xterm-theme-"+this.theme),this.setCursorBlinking(this.options.cursorBlink),this.element.setAttribute("tabindex",0),this.viewportElement=A.createElement("div"),this.viewportElement.classList.add("xterm-viewport"),this.element.appendChild(this.viewportElement),this.viewportScrollArea=A.createElement("div"),this.viewportScrollArea.classList.add("xterm-scroll-area"),this.viewportElement.appendChild(this.viewportScrollArea),this.selectionContainer=A.createElement("div"),this.selectionContainer.classList.add("xterm-selection"),this.element.appendChild(this.selectionContainer),this.rowContainer=A.createElement("div"),this.rowContainer.classList.add("xterm-rows"),this.element.appendChild(this.rowContainer),this.children=[],this.linkifier.attachToDom(A,this.children),this.helperContainer=A.createElement("div"),this.helperContainer.classList.add("xterm-helpers"),this.element.appendChild(this.helperContainer),this.textarea=A.createElement("textarea"),this.textarea.classList.add("xterm-helper-textarea"),this.textarea.setAttribute("autocorrect","off"),this.textarea.setAttribute("autocapitalize","off"),this.textarea.setAttribute("spellcheck","false"),this.textarea.tabIndex=0,this.textarea.addEventListener("focus",function(){i.emit("focus",{terminal:i})}),this.textarea.addEventListener("blur",function(){i.emit("blur",{terminal:i})}),this.helperContainer.appendChild(this.textarea),this.compositionView=A.createElement("div"),this.compositionView.classList.add("composition-view"),this.compositionHelper=new c.CompositionHelper(this.textarea,this.compositionView,this),this.helperContainer.appendChild(this.compositionView),this.charSizeStyleElement=A.createElement("style"),this.helperContainer.appendChild(this.charSizeStyleElement);s div{height:"+this.charMeasure.height+"px;}"},i.prototype.bindMouse=function(){function e(e){var t,r;if(t=n(e),r=v.getRawByteCoords(e,l.rowContainer,l.charMeasure,l.cols,l.rows))switch(i(t,r),e.overrideType||e.type){case"mousedown":h=t;break;case"mouseup":h=32}}function t(e){var t,r=h;(t=v.getRawByteCoords(e,l.rowContainer,l.charMeasure,l.cols,l.rows))&&i(r+=32,t)}function r(e,t){if(l.utfMouse){if(2047===t)return e.push(0);t<127?e.push(t):(t>2047&&(t=2047),e.push(192|t>>6),e.push(128|63&t))}else{if(255===t)return e.push(0);t>127&&(t=127),e.push(t)}}function i(e,t){if(l.vt300Mouse){e&=3,t.x-=32,t.y-=32;var i=g.C0.ESC+"[24";if(0===e)i+="1";else if(1===e)i+="3";else if(2===e)i+="5";else{if(3===e)return;i+="0"}return i+="~["+t.x+","+t.y+"]\r",void l.send(i)}return l.decLocator?(e&=3,t.x-=32,t.y-=32,0===e?e=2:1===e?e=4:2===e?e=6:3===e&&(e=3),void l.send(g.C0.ESC+"["+e+";"+(3===e?4:0)+";"+t.y+";"+t.x+";"+(t.page||0)+"&w")):l.urxvtMouse?(t.x-=32,t.y-=32,t.x++,t.y++,void l.send(g.C0.ESC+"["+e+";"+t.x+";"+t.y+"M")):l.sgrMouse?(t.x-=32,t.y-=32,void l.send(g.C0.ESC+"[<"+((3==(3&e)?-4&e:e)-32)+";"+t.x+";"+t.y+(3==(3&e)?"m":"M"))):(r(i=[],e),r(i,t.x),r(i,t.y),void l.send(g.C0.ESC+"[M"+String.fromCharCode.apply(String,i)))}function n(e){var t,r,i,o,s;switch(e.overrideType||e.type){case"mousedown":t=null!=e.button?+e.button:null!=e.which?e.which-1:null,l.browser.isMSIE&&(t=1===t?0:4===t?1:t);break;case"mouseup":t=3;break;case"DOMMouseScroll":t=e.detail<0?64:65;break;case"wheel":t=e.wheelDeltaY>0?64:65}return r=e.shiftKey?4:0,i=e.metaKey?8:0,o=e.ctrlKey?16:0,s=r|i|o,l.vt200Mouse?s&=o:l.normalMouse||(s=0),t=32+(s<<2)+t}var a=this.element,l=this,h=32;o(a,"mousedown",function(r){if(l.mouseEvents)return e(r),l.focus(),l.vt200Mouse?(r.overrideType="mouseup",e(r),l.cancel(r)):(l.normalMouse&&o(l.document,"mousemove",t),l.x10Mouse||o(l.document,"mouseup",function r(i){return e(i),l.normalMouse&&s(l.document,"mousemove",t),s(l.document,"mouseup",r),l.cancel(i)}),l.cancel(r))}),o(a,"wheel",function(t){if(l.mouseEvents&&!(l.x10Mouse||l.vt300Mouse||l.decLocator))return e(t),l.cancel(t)}),o(a,"wheel",function(e){if(!l.mouseEvents)return l.viewport.onWheel(e),l.cancel(e)}),o(a,"touchstart",function(e){if(!l.mouseEvents)return l.viewport.onTouchStart(e),l.cancel(e)}),o(a,"touchmove",function(e){if(!l.mouseEvents)return l.viewport.onTouchMove(e),l.cancel(e)})},i.prototype.destroy=function(){this.readable=!1,this.writable=!1,this._events={},this.handler=function(){},this.write=function(){},this.element&&this.element.parentNode&&this.element.parentNode.removeChild(this.element)},i.prototype.refresh=function(e,t){this.renderer&&this.renderer.queueRefresh(e,t)},i.prototype.queueLinkification=function(e,t){if(this.linkifier)for(var r=e;r<=t;r++)this.linkifier.linkifyRow(r)},i.prototype.showCursor=function(){this.cursorState||(this.cursorState=1,this.refresh(this.y,this.y))},i.prototype.scroll=function(e){var t;this.lines.length===this.lines.maxLength&&(this.lines.trimStart(1),this.ybase--,0!==this.ydisp&&this.ydisp--),this.ybase++,this.userScrolling||(this.ydisp=this.ybase),t=this.ybase+this.rows-1,(t-=this.rows-1-this.scrollBottom)===this.lines.length?this.lines.push(this.blankLine(void 0,e)):this.lines.splice(t,0,this.blankLine(void 0,e)),0!==this.scrollTop&&(0!==this.ybase&&(this.ybase--,this.userScrolling||(this.ydisp=this.ybase)),this.lines.splice(this.ybase+this.scrollTop,1)),this.updateRange(this.scrollTop),this.updateRange(this.scrollBottom),this.emit("scroll",this.ydisp)},i.prototype.scrollDisp=function(e,t){if(e<0){if(0===this.ydisp)return;this.userScrolling=!0}else e+this.ydisp>=this.ybase&&(this.userScrolling=!1);this.ydisp+=e,this.ydisp>this.ybase?this.ydisp=this.ybase:this.ydisp<0&&(this.ydisp=0),t||this.emit("scroll",this.ydisp),this.refresh(0,this.rows-1)},i.prototype.scrollPages=function(e){this.scrollDisp(e*(this.rows-1))},i.prototype.scrollToTop=function(){this.scrollDisp(-this.ydisp)},i.prototype.scrollToBottom=function(){this.scrollDisp(this.ybase-this.ydisp)},i.prototype.write=function(e){if(this.writeBuffer.push(e),this.options.useFlowControl&&!this.xoffSentToCatchUp&&this.writeBuffer.length>=5&&(this.send(g.C0.DC3),this.xoffSentToCatchUp=!0),!this.writeInProgress&&this.writeBuffer.length>0){this.writeInProgress=!0;var t=this;setTimeout(function(){t.innerWrite()})}},i.prototype.innerWrite=function(){for(var e=this.writeBuffer.splice(0,300);e.length>0;){var t=e.shift();t.length;this.xoffSentToCatchUp&&0===e.length&&0===this.writeBuffer.length&&(this.send(g.C0.DC1),this.xoffSentToCatchUp=!1),this.refreshStart=this.y,this.refreshEnd=this.y;var r=this.parser.parse(t);this.parser.setState(r),this.updateRange(this.y),this.refresh(this.refreshStart,this.refreshEnd)}if(this.writeBuffer.length>0){var i=this;setTimeout(function(){i.innerWrite()},0)}else this.writeInProgress=!1},i.prototype.writeln=function(e){this.write(e+"\r\n")},i.prototype.attachCustomKeydownHandler=function(e){console.warn("attachCustomKeydownHandler() is DEPRECATED and will be removed soon. Please use attachCustomKeyEventHandler() instead."),this.attachCustomKeyEventHandler(e)},i.prototype.attachCustomKeyEventHandler=function(e){this.customKeyEventHandler=e},i.prototype.setHypertextLinkHandler=function(e){if(!this.linkifier)throw new Error("Cannot attach a hypertext link handler before Terminal.open is called");this.linkifier.setHypertextLinkHandler(e),this.refresh(0,this.rows-1)},i.prototype.setHypertextValidationCallback=function(e){if(!this.linkifier)throw new Error("Cannot attach a hypertext validation callback before Terminal.open is called");this.linkifier.setHypertextValidationCallback(e),this.refresh(0,this.rows-1)},i.prototype.registerLinkMatcher=function(e,t,r){if(this.linkifier){var i=this.linkifier.registerLinkMatcher(e,t,r);return this.refresh(0,this.rows-1),i}},i.prototype.deregisterLinkMatcher=function(e){this.linkifier&&this.linkifier.deregisterLinkMatcher(e)&&this.refresh(0,this.rows-1)},i.prototype.hasSelection=function(){return this.selectionManager.hasSelection},i.prototype.getSelection=function(){return this.selectionManager.selectionText},i.prototype.clearSelection=function(){this.selectionManager.clearSelection()},i.prototype.selectAll=function(){this.selectionManager.selectAll()},i.prototype.keyDown=function(e){if(this.customKeyEventHandler&&!1===this.customKeyEventHandler(e))return!1;if(this.restartCursorBlinking(),!this.compositionHelper.keydown.bind(this.compositionHelper)(e))return this.ybase!==this.ydisp&&this.scrollToBottom(),!1;var t=this.evaluateKeyEscapeSequence(e);return t.key===g.C0.DC3?this.writeStopped=!0:t.key===g.C0.DC1&&(this.writeStopped=!1),t.scrollDisp?(this.scrollDisp(t.scrollDisp),this.cancel(e,!0)):!!a(this,e)||(t.cancel&&this.cancel(e,!0),!t.key||(this.emit("keydown",e),this.emit("key",t.key,e),this.showCursor(),this.handler(t.key),this.cancel(e,!0)))},i.prototype.evaluateKeyEscapeSequence=function(e){var t={cancel:!1,key:void 0,scrollDisp:void 0},r=e.shiftKey<<0|e.altKey<<1|e.ctrlKey<<2|e.metaKey<<3;switch(e.keyCode){case 8:if(e.shiftKey){t.key=g.C0.BS;break}t.key=g.C0.DEL;break;case 9:if(e.shiftKey){t.key=g.C0.ESC+"[Z";break}t.key=g.C0.HT,t.cancel=!0;break;case 13:t.key=g.C0.CR,t.cancel=!0;break;case 27:t.key=g.C0.ESC,t.cancel=!0;break;case 37:r?(t.key=g.C0.ESC+"[1;"+(r+1)+"D",t.key==g.C0.ESC+"[1;3D"&&(t.key=this.browser.isMac?g.C0.ESC+"b":g.C0.ESC+"[1;5D")):this.applicationCursor?t.key=g.C0.ESC+"OD":t.key=g.C0.ESC+"[D";break;case 39:r?(t.key=g.C0.ESC+"[1;"+(r+1)+"C",t.key==g.C0.ESC+"[1;3C"&&(t.key=this.browser.isMac?g.C0.ESC+"f":g.C0.ESC+"[1;5C")):this.applicationCursor?t.key=g.C0.ESC+"OC":t.key=g.C0.ESC+"[C";break;case 38:r?(t.key=g.C0.ESC+"[1;"+(r+1)+"A",t.key==g.C0.ESC+"[1;3A"&&(t.key=g.C0.ESC+"[1;5A")):this.applicationCursor?t.key=g.C0.ESC+"OA":t.key=g.C0.ESC+"[A";break;case 40:r?(t.key=g.C0.ESC+"[1;"+(r+1)+"B",t.key==g.C0.ESC+"[1;3B"&&(t.key=g.C0.ESC+"[1;5B")):this.applicationCursor?t.key=g.C0.ESC+"OB":t.key=g.C0.ESC+"[B";break;case 45:e.shiftKey||e.ctrlKey||(t.key=g.C0.ESC+"[2~");break;case 46:t.key=r?g.C0.ESC+"[3;"+(r+1)+"~":g.C0.ESC+"[3~";break;case 36:r?t.key=g.C0.ESC+"[1;"+(r+1)+"H":this.applicationCursor?t.key=g.C0.ESC+"OH":t.key=g.C0.ESC+"[H";break;case 35:r?t.key=g.C0.ESC+"[1;"+(r+1)+"F":this.applicationCursor?t.key=g.C0.ESC+"OF":t.key=g.C0.ESC+"[F";break;case 33:e.shiftKey?t.scrollDisp=-(this.rows-1):t.key=g.C0.ESC+"[5~";break;case 34:e.shiftKey?t.scrollDisp=this.rows-1:t.key=g.C0.ESC+"[6~";break;case 112:t.key=r?g.C0.ESC+"[1;"+(r+1)+"P":g.C0.ESC+"OP";break;case 113:t.key=r?g.C0.ESC+"[1;"+(r+1)+"Q":g.C0.ESC+"OQ";break;case 114:t.key=r?g.C0.ESC+"[1;"+(r+1)+"R":g.C0.ESC+"OR";break;case 115:t.key=r?g.C0.ESC+"[1;"+(r+1)+"S":g.C0.ESC+"OS";break;case 116:t.key=r?g.C0.ESC+"[15;"+(r+1)+"~":g.C0.ESC+"[15~";break;case 117:t.key=r?g.C0.ESC+"[17;"+(r+1)+"~":g.C0.ESC+"[17~";break;case 118:t.key=r?g.C0.ESC+"[18;"+(r+1)+"~":g.C0.ESC+"[18~";break;case 119:t.key=r?g.C0.ESC+"[19;"+(r+1)+"~":g.C0.ESC+"[19~";break;case 120:t.key=r?g.C0.ESC+"[20;"+(r+1)+"~":g.C0.ESC+"[20~";break;case 121:t.key=r?g.C0.ESC+"[21;"+(r+1)+"~":g.C0.ESC+"[21~";break;case 122:t.key=r?g.C0.ESC+"[23;"+(r+1)+"~":g.C0.ESC+"[23~";break;case 123:t.key=r?g.C0.ESC+"[24;"+(r+1)+"~":g.C0.ESC+"[24~";break;default:!e.ctrlKey||e.shiftKey||e.altKey||e.metaKey?this.browser.isMac||!e.altKey||e.ctrlKey||e.metaKey?this.browser.isMac&&!e.altKey&&!e.ctrlKey&&e.metaKey&&65===e.keyCode&&this.selectAll():e.keyCode>=65&&e.keyCode<=90?t.key=g.C0.ESC+String.fromCharCode(e.keyCode+32):192===e.keyCode?t.key=g.C0.ESC+"`":e.keyCode>=48&&e.keyCode<=57&&(t.key=g.C0.ESC+(e.keyCode-48)):e.keyCode>=65&&e.keyCode<=90?t.key=String.fromCharCode(e.keyCode-64):32===e.keyCode?t.key=String.fromCharCode(0):e.keyCode>=51&&e.keyCode<=55?t.key=String.fromCharCode(e.keyCode-51+27):56===e.keyCode?t.key=String.fromCharCode(127):219===e.keyCode?t.key=String.fromCharCode(27):220===e.keyCode?t.key=String.fromCharCode(28):221===e.keyCode&&(t.key=String.fromCharCode(29))}return t},i.prototype.setgLevel=function(e){this.glevel=e,this.charset=this.charsets[e]},i.prototype.setgCharset=function(e,t){this.charsets[e]=t,this.glevel===e&&(this.charset=t)},i.prototype.keyPress=function(e){var t;if(this.customKeyEventHandler&&!1===this.customKeyEventHandler(e))return!1;if(this.cancel(e),e.charCode)t=e.charCode;else if(null==e.which)t=e.keyCode;else{if(0===e.which||0===e.charCode)return!1;t=e.which}return!(!t||(e.altKey||e.ctrlKey||e.metaKey)&&!a(this,e))&&(t=String.fromCharCode(t),this.emit("keypress",t,e),this.emit("key",t,e),this.showCursor(),this.handler(t),!0)},i.prototype.send=function(e){var t=this;this.queue||setTimeout(function(){t.handler(t.queue),t.queue=""},1),this.queue+=e},i.prototype.bell=function(){if(this.visualBell){var e=this;this.element.style.borderColor="white",setTimeout(function(){e.element.style.borderColor=""},10),this.popOnBell&&this.focus()}},i.prototype.log=function(){if(this.debug&&this.context.console&&this.context.console.log){var e=Array.prototype.slice.call(arguments);this.context.console.log.apply(this.context.console,e)}},i.prototype.error=function(){if(this.debug&&this.context.console&&this.context.console.error){var e=Array.prototype.slice.call(arguments);this.context.console.error.apply(this.context.console,e)}},i.prototype.resize=function(e,t){if(!isNaN(e)&&!isNaN(t)){t>this.getOption("scrollback")&&this.setOption("scrollback",t);var r,i,o,s,n;if(e!==this.cols||t!==this.rows){if(e<1&&(e=1),t<1&&(t=1),(o=this.cols)0&&this.lines.length<=this.ybase+this.y+n+1?(this.ybase--,n++,this.ydisp>0&&this.ydisp--):this.lines.push(this.blankLine())),this.children.lengtht;)if(this.lines.length>t+this.ybase&&(this.lines.length>this.ybase+this.y+1?this.lines.pop():(this.ybase++,this.ydisp++)),this.children.length>t){if(!(r=this.children.shift()))continue;r.parentNode.removeChild(r)}this.rows=t,this.y>=t&&(this.y=t-1),n&&(this.y+=n),this.x>=e&&(this.x=e-1),this.scrollTop=0,this.scrollBottom=t-1,this.charMeasure.measure(),this.refresh(0,this.rows-1),this.normal=null,this.geometry=[this.cols,this.rows],this.emit("resize",{terminal:this,cols:e,rows:t})}}},i.prototype.updateRange=function(e){ethis.refreshEnd&&(this.refreshEnd=e)},i.prototype.maxRange=function(){this.refreshStart=0,this.refreshEnd=this.rows-1},i.prototype.setupStops=function(e){for(null!=e?this.tabs[e]||(e=this.prevStop(e)):(this.tabs={},e=0);e0;);return e>=this.cols?this.cols-1:e<0?0:e},i.prototype.nextStop=function(e){for(null==e&&(e=this.x);!this.tabs[++e]&&e=this.cols?this.cols-1:e<0?0:e},i.prototype.eraseRight=function(e,t){var r=this.lines.get(this.ybase+t);if(r){for(var i=[this.eraseAttr()," ",1];ethis.scrollBottom&&(this.y--,this.scroll()),this.x>=this.cols&&this.x--},i.prototype.reverseIndex=function(){this.y===this.scrollTop?(this.lines.shiftElements(this.y+this.ybase,this.rows-1,1),this.lines.set(this.y+this.ybase,this.blankLine(!0)),this.updateRange(this.scrollTop),this.updateRange(this.scrollBottom)):this.y--},i.prototype.reset=function(){this.options.rows=this.rows,this.options.cols=this.cols;var e=this.customKeyEventHandler,t=this.cursorBlinkInterval;i.call(this,this.options),this.customKeyEventHandler=e,this.cursorBlinkInterval=t,this.refresh(0,this.rows-1),this.viewport.syncScrollArea()},i.prototype.tabSet=function(){this.tabs[this.x]=!0},i.prototype.matchColor=l,l._cache={},l.distance=function(e,t,r,i,o,s){return Math.pow(30*(e-i),2)+Math.pow(59*(t-o),2)+Math.pow(11*(r-s),2)},i.EventEmitter=u.EventEmitter,i.inherits=n,i.on=o,i.off=s,i.cancel=function(e,t){if(this.cancelEvents||t)return e.preventDefault(),e.stopPropagation(),!1},e.exports=i},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(){this._events=this._events||{}}return e.prototype.on=function(e,t){this._events[e]=this._events[e]||[],this._events[e].push(t)},e.prototype.off=function(e,t){if(this._events[e])for(var r=this._events[e],i=r.length;i--;)if(r[i]===t||r[i].listener===t)return void r.splice(i,1)},e.prototype.removeAllListeners=function(e){this._events[e]&&delete this._events[e]},e.prototype.once=function(e,t){function r(){var i=Array.prototype.slice.call(arguments);return this.off(e,r),t.apply(this,i)}return r.listener=t,this.on(e,r)},e.prototype.emit=function(e){for(var t=[],r=1;r=3?r[2].replace(/^\s*at\s+/,""):r[1].replace(/^\s*global code@/,"")}for(var o=0;ot.length&&(t=t.repeat(e/t.length+1)),t.slice(0,e)+String(this))}),String.prototype.padEnd||(String.prototype.padEnd=function(e,t){return(e-=this.length)<=0?String(this):(void 0===t&&(t=" "),e>t.length&&(t=t.repeat(e/t.length+1)),String(this)+t.slice(0,e))}),i.colors={},i.colors.re_={hex16:/#([a-f0-9])([a-f0-9])([a-f0-9])/i,hex24:/#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/i,rgb:new RegExp("^/s*rgb/s*/(/s*(/d{1,3})/s*,/s*(/d{1,3})/s*,/s*(/d{1,3})/s*/)/s*$".replace(/\//g,"\\"),"i"),rgba:new RegExp("^/s*rgba/s*/(/s*(/d{1,3})/s*,/s*(/d{1,3})/s*,/s*(/d{1,3})/s*(?:,/s*(/d+(?:/./d+)?)/s*)/)/s*$".replace(/\//g,"\\"),"i"),rgbx:new RegExp("^/s*rgba?/s*/(/s*(/d{1,3})/s*,/s*(/d{1,3})/s*,/s*(/d{1,3})/s*(?:,/s*(/d+(?:/./d+)?)/s*)?/)/s*$".replace(/\//g,"\\"),"i"),x11rgb:/^\s*rgb:([a-f0-9]{1,4})\/([a-f0-9]{1,4})\/([a-f0-9]{1,4})\s*$/i,name:/[a-z][a-z0-9\s]+/},i.colors.rgbToX11=function(e){function t(e){return e=(257*Math.min(e,255)).toString(16),i.f.zpad(e,4)}var r=e.match(i.colors.re_.rgbx);return r?"rgb:"+t(r[1])+"/"+t(r[2])+"/"+t(r[3]):null},i.colors.x11HexToCSS=function(e){if(!e.startsWith("#"))return null;if(e=e.substr(1),-1==[3,6,9,12].indexOf(e.length))return null;if(e.match(/[^a-f0-9]/i))return null;var t=e.length/3,r=e.substr(0,t),o=e.substr(t,t),s=e.substr(t+t,t);return i.colors.arrayToRGBA([r,o,s].map(function(e){return e=parseInt(e,16),2==t?e:1==t?e<<4:e>>4*(t-2)}))},i.colors.x11ToCSS=function(e){var t=e.match(i.colors.re_.x11rgb);return t?(t.splice(0,1),i.colors.arrayToRGBA(t.map(function(e){return 1==e.length?parseInt(e+e,16):2==e.length?parseInt(e,16):(3==e.length&&(e+=e.substr(2)),Math.round(parseInt(e,16)/257))}))):e.startsWith("#")?i.colors.x11HexToCSS(e):i.colors.nameToRGB(e)},i.colors.hexToRGB=function(e){function t(e){4==e.length&&(e=e.replace(r,function(e,t,r,i){return"#"+t+t+r+r+i+i}));var t=e.match(o);return t?"rgb("+parseInt(t[1],16)+", "+parseInt(t[2],16)+", "+parseInt(t[3],16)+")":null}var r=i.colors.re_.hex16,o=i.colors.re_.hex24;if(e instanceof Array)for(var s=0;s3?e[3]:1;return"rgba("+e[0]+", "+e[1]+", "+e[2]+", "+t+")"},i.colors.setAlpha=function(e,t){var r=i.colors.crackRGB(e);return r[3]=t,i.colors.arrayToRGBA(r)},i.colors.mix=function(e,t,r){for(var o=i.colors.crackRGB(e),s=i.colors.crackRGB(t),n=0;n<4;++n){var a=s[n]-o[n];o[n]=Math.round(parseInt(o[n])+a*r)}return i.colors.arrayToRGBA(o)},i.colors.crackRGB=function(e){if(e.startsWith("rgba")){if(t=e.match(i.colors.re_.rgba))return t.shift(),t}else{var t=e.match(i.colors.re_.rgb);if(t)return t.shift(),t.push(1),t}return console.error("Couldn't crack: "+e),null},i.colors.nameToRGB=function(e){return e in i.colors.colorNames?i.colors.colorNames[e]:(e=e.toLowerCase())in i.colors.colorNames?i.colors.colorNames[e]:(e=e.replace(/\s+/g,""))in i.colors.colorNames?i.colors.colorNames[e]:null},i.colors.stockColorPalette=i.colors.hexToRGB(["#000000","#CC0000","#4E9A06","#C4A000","#3465A4","#75507B","#06989A","#D3D7CF","#555753","#EF2929","#00BA13","#FCE94F","#729FCF","#F200CB","#00B5BD","#EEEEEC","#000000","#00005F","#000087","#0000AF","#0000D7","#0000FF","#005F00","#005F5F","#005F87","#005FAF","#005FD7","#005FFF","#008700","#00875F","#008787","#0087AF","#0087D7","#0087FF","#00AF00","#00AF5F","#00AF87","#00AFAF","#00AFD7","#00AFFF","#00D700","#00D75F","#00D787","#00D7AF","#00D7D7","#00D7FF","#00FF00","#00FF5F","#00FF87","#00FFAF","#00FFD7","#00FFFF","#5F0000","#5F005F","#5F0087","#5F00AF","#5F00D7","#5F00FF","#5F5F00","#5F5F5F","#5F5F87","#5F5FAF","#5F5FD7","#5F5FFF","#5F8700","#5F875F","#5F8787","#5F87AF","#5F87D7","#5F87FF","#5FAF00","#5FAF5F","#5FAF87","#5FAFAF","#5FAFD7","#5FAFFF","#5FD700","#5FD75F","#5FD787","#5FD7AF","#5FD7D7","#5FD7FF","#5FFF00","#5FFF5F","#5FFF87","#5FFFAF","#5FFFD7","#5FFFFF","#870000","#87005F","#870087","#8700AF","#8700D7","#8700FF","#875F00","#875F5F","#875F87","#875FAF","#875FD7","#875FFF","#878700","#87875F","#878787","#8787AF","#8787D7","#8787FF","#87AF00","#87AF5F","#87AF87","#87AFAF","#87AFD7","#87AFFF","#87D700","#87D75F","#87D787","#87D7AF","#87D7D7","#87D7FF","#87FF00","#87FF5F","#87FF87","#87FFAF","#87FFD7","#87FFFF","#AF0000","#AF005F","#AF0087","#AF00AF","#AF00D7","#AF00FF","#AF5F00","#AF5F5F","#AF5F87","#AF5FAF","#AF5FD7","#AF5FFF","#AF8700","#AF875F","#AF8787","#AF87AF","#AF87D7","#AF87FF","#AFAF00","#AFAF5F","#AFAF87","#AFAFAF","#AFAFD7","#AFAFFF","#AFD700","#AFD75F","#AFD787","#AFD7AF","#AFD7D7","#AFD7FF","#AFFF00","#AFFF5F","#AFFF87","#AFFFAF","#AFFFD7","#AFFFFF","#D70000","#D7005F","#D70087","#D700AF","#D700D7","#D700FF","#D75F00","#D75F5F","#D75F87","#D75FAF","#D75FD7","#D75FFF","#D78700","#D7875F","#D78787","#D787AF","#D787D7","#D787FF","#D7AF00","#D7AF5F","#D7AF87","#D7AFAF","#D7AFD7","#D7AFFF","#D7D700","#D7D75F","#D7D787","#D7D7AF","#D7D7D7","#D7D7FF","#D7FF00","#D7FF5F","#D7FF87","#D7FFAF","#D7FFD7","#D7FFFF","#FF0000","#FF005F","#FF0087","#FF00AF","#FF00D7","#FF00FF","#FF5F00","#FF5F5F","#FF5F87","#FF5FAF","#FF5FD7","#FF5FFF","#FF8700","#FF875F","#FF8787","#FF87AF","#FF87D7","#FF87FF","#FFAF00","#FFAF5F","#FFAF87","#FFAFAF","#FFAFD7","#FFAFFF","#FFD700","#FFD75F","#FFD787","#FFD7AF","#FFD7D7","#FFD7FF","#FFFF00","#FFFF5F","#FFFF87","#FFFFAF","#FFFFD7","#FFFFFF","#080808","#121212","#1C1C1C","#262626","#303030","#3A3A3A","#444444","#4E4E4E","#585858","#626262","#6C6C6C","#767676","#808080","#8A8A8A","#949494","#9E9E9E","#A8A8A8","#B2B2B2","#BCBCBC","#C6C6C6","#D0D0D0","#DADADA","#E4E4E4","#EEEEEE"]),i.colors.colorPalette=i.colors.stockColorPalette,i.colors.colorNames={aliceblue:"rgb(240, 248, 255)",antiquewhite:"rgb(250, 235, 215)",antiquewhite1:"rgb(255, 239, 219)",antiquewhite2:"rgb(238, 223, 204)",antiquewhite3:"rgb(205, 192, 176)",antiquewhite4:"rgb(139, 131, 120)",aquamarine:"rgb(127, 255, 212)",aquamarine1:"rgb(127, 255, 212)",aquamarine2:"rgb(118, 238, 198)",aquamarine3:"rgb(102, 205, 170)",aquamarine4:"rgb(69, 139, 116)",azure:"rgb(240, 255, 255)",azure1:"rgb(240, 255, 255)",azure2:"rgb(224, 238, 238)",azure3:"rgb(193, 205, 205)",azure4:"rgb(131, 139, 139)",beige:"rgb(245, 245, 220)",bisque:"rgb(255, 228, 196)",bisque1:"rgb(255, 228, 196)",bisque2:"rgb(238, 213, 183)",bisque3:"rgb(205, 183, 158)",bisque4:"rgb(139, 125, 107)",black:"rgb(0, 0, 0)",blanchedalmond:"rgb(255, 235, 205)",blue:"rgb(0, 0, 255)",blue1:"rgb(0, 0, 255)",blue2:"rgb(0, 0, 238)",blue3:"rgb(0, 0, 205)",blue4:"rgb(0, 0, 139)",blueviolet:"rgb(138, 43, 226)",brown:"rgb(165, 42, 42)",brown1:"rgb(255, 64, 64)",brown2:"rgb(238, 59, 59)",brown3:"rgb(205, 51, 51)",brown4:"rgb(139, 35, 35)",burlywood:"rgb(222, 184, 135)",burlywood1:"rgb(255, 211, 155)",burlywood2:"rgb(238, 197, 145)",burlywood3:"rgb(205, 170, 125)",burlywood4:"rgb(139, 115, 85)",cadetblue:"rgb(95, 158, 160)",cadetblue1:"rgb(152, 245, 255)",cadetblue2:"rgb(142, 229, 238)",cadetblue3:"rgb(122, 197, 205)",cadetblue4:"rgb(83, 134, 139)",chartreuse:"rgb(127, 255, 0)",chartreuse1:"rgb(127, 255, 0)",chartreuse2:"rgb(118, 238, 0)",chartreuse3:"rgb(102, 205, 0)",chartreuse4:"rgb(69, 139, 0)",chocolate:"rgb(210, 105, 30)",chocolate1:"rgb(255, 127, 36)",chocolate2:"rgb(238, 118, 33)",chocolate3:"rgb(205, 102, 29)",chocolate4:"rgb(139, 69, 19)",coral:"rgb(255, 127, 80)",coral1:"rgb(255, 114, 86)",coral2:"rgb(238, 106, 80)",coral3:"rgb(205, 91, 69)",coral4:"rgb(139, 62, 47)",cornflowerblue:"rgb(100, 149, 237)",cornsilk:"rgb(255, 248, 220)",cornsilk1:"rgb(255, 248, 220)",cornsilk2:"rgb(238, 232, 205)",cornsilk3:"rgb(205, 200, 177)",cornsilk4:"rgb(139, 136, 120)",cyan:"rgb(0, 255, 255)",cyan1:"rgb(0, 255, 255)",cyan2:"rgb(0, 238, 238)",cyan3:"rgb(0, 205, 205)",cyan4:"rgb(0, 139, 139)",darkblue:"rgb(0, 0, 139)",darkcyan:"rgb(0, 139, 139)",darkgoldenrod:"rgb(184, 134, 11)",darkgoldenrod1:"rgb(255, 185, 15)",darkgoldenrod2:"rgb(238, 173, 14)",darkgoldenrod3:"rgb(205, 149, 12)",darkgoldenrod4:"rgb(139, 101, 8)",darkgray:"rgb(169, 169, 169)",darkgreen:"rgb(0, 100, 0)",darkgrey:"rgb(169, 169, 169)",darkkhaki:"rgb(189, 183, 107)",darkmagenta:"rgb(139, 0, 139)",darkolivegreen:"rgb(85, 107, 47)",darkolivegreen1:"rgb(202, 255, 112)",darkolivegreen2:"rgb(188, 238, 104)",darkolivegreen3:"rgb(162, 205, 90)",darkolivegreen4:"rgb(110, 139, 61)",darkorange:"rgb(255, 140, 0)",darkorange1:"rgb(255, 127, 0)",darkorange2:"rgb(238, 118, 0)",darkorange3:"rgb(205, 102, 0)",darkorange4:"rgb(139, 69, 0)",darkorchid:"rgb(153, 50, 204)",darkorchid1:"rgb(191, 62, 255)",darkorchid2:"rgb(178, 58, 238)",darkorchid3:"rgb(154, 50, 205)",darkorchid4:"rgb(104, 34, 139)",darkred:"rgb(139, 0, 0)",darksalmon:"rgb(233, 150, 122)",darkseagreen:"rgb(143, 188, 143)",darkseagreen1:"rgb(193, 255, 193)",darkseagreen2:"rgb(180, 238, 180)",darkseagreen3:"rgb(155, 205, 155)",darkseagreen4:"rgb(105, 139, 105)",darkslateblue:"rgb(72, 61, 139)",darkslategray:"rgb(47, 79, 79)",darkslategray1:"rgb(151, 255, 255)",darkslategray2:"rgb(141, 238, 238)",darkslategray3:"rgb(121, 205, 205)",darkslategray4:"rgb(82, 139, 139)",darkslategrey:"rgb(47, 79, 79)",darkturquoise:"rgb(0, 206, 209)",darkviolet:"rgb(148, 0, 211)",debianred:"rgb(215, 7, 81)",deeppink:"rgb(255, 20, 147)",deeppink1:"rgb(255, 20, 147)",deeppink2:"rgb(238, 18, 137)",deeppink3:"rgb(205, 16, 118)",deeppink4:"rgb(139, 10, 80)",deepskyblue:"rgb(0, 191, 255)",deepskyblue1:"rgb(0, 191, 255)",deepskyblue2:"rgb(0, 178, 238)",deepskyblue3:"rgb(0, 154, 205)",deepskyblue4:"rgb(0, 104, 139)",dimgray:"rgb(105, 105, 105)",dimgrey:"rgb(105, 105, 105)",dodgerblue:"rgb(30, 144, 255)",dodgerblue1:"rgb(30, 144, 255)",dodgerblue2:"rgb(28, 134, 238)",dodgerblue3:"rgb(24, 116, 205)",dodgerblue4:"rgb(16, 78, 139)",firebrick:"rgb(178, 34, 34)",firebrick1:"rgb(255, 48, 48)",firebrick2:"rgb(238, 44, 44)",firebrick3:"rgb(205, 38, 38)",firebrick4:"rgb(139, 26, 26)",floralwhite:"rgb(255, 250, 240)",forestgreen:"rgb(34, 139, 34)",gainsboro:"rgb(220, 220, 220)",ghostwhite:"rgb(248, 248, 255)",gold:"rgb(255, 215, 0)",gold1:"rgb(255, 215, 0)",gold2:"rgb(238, 201, 0)",gold3:"rgb(205, 173, 0)",gold4:"rgb(139, 117, 0)",goldenrod:"rgb(218, 165, 32)",goldenrod1:"rgb(255, 193, 37)",goldenrod2:"rgb(238, 180, 34)",goldenrod3:"rgb(205, 155, 29)",goldenrod4:"rgb(139, 105, 20)",gray:"rgb(190, 190, 190)",gray0:"rgb(0, 0, 0)",gray1:"rgb(3, 3, 3)",gray10:"rgb(26, 26, 26)",gray100:"rgb(255, 255, 255)",gray11:"rgb(28, 28, 28)",gray12:"rgb(31, 31, 31)",gray13:"rgb(33, 33, 33)",gray14:"rgb(36, 36, 36)",gray15:"rgb(38, 38, 38)",gray16:"rgb(41, 41, 41)",gray17:"rgb(43, 43, 43)",gray18:"rgb(46, 46, 46)",gray19:"rgb(48, 48, 48)",gray2:"rgb(5, 5, 5)",gray20:"rgb(51, 51, 51)",gray21:"rgb(54, 54, 54)",gray22:"rgb(56, 56, 56)",gray23:"rgb(59, 59, 59)",gray24:"rgb(61, 61, 61)",gray25:"rgb(64, 64, 64)",gray26:"rgb(66, 66, 66)",gray27:"rgb(69, 69, 69)",gray28:"rgb(71, 71, 71)",gray29:"rgb(74, 74, 74)",gray3:"rgb(8, 8, 8)",gray30:"rgb(77, 77, 77)",gray31:"rgb(79, 79, 79)",gray32:"rgb(82, 82, 82)",gray33:"rgb(84, 84, 84)",gray34:"rgb(87, 87, 87)",gray35:"rgb(89, 89, 89)",gray36:"rgb(92, 92, 92)",gray37:"rgb(94, 94, 94)",gray38:"rgb(97, 97, 97)",gray39:"rgb(99, 99, 99)",gray4:"rgb(10, 10, 10)",gray40:"rgb(102, 102, 102)",gray41:"rgb(105, 105, 105)",gray42:"rgb(107, 107, 107)",gray43:"rgb(110, 110, 110)",gray44:"rgb(112, 112, 112)",gray45:"rgb(115, 115, 115)",gray46:"rgb(117, 117, 117)",gray47:"rgb(120, 120, 120)",gray48:"rgb(122, 122, 122)",gray49:"rgb(125, 125, 125)",gray5:"rgb(13, 13, 13)",gray50:"rgb(127, 127, 127)",gray51:"rgb(130, 130, 130)",gray52:"rgb(133, 133, 133)",gray53:"rgb(135, 135, 135)",gray54:"rgb(138, 138, 138)",gray55:"rgb(140, 140, 140)",gray56:"rgb(143, 143, 143)",gray57:"rgb(145, 145, 145)",gray58:"rgb(148, 148, 148)",gray59:"rgb(150, 150, 150)",gray6:"rgb(15, 15, 15)",gray60:"rgb(153, 153, 153)",gray61:"rgb(156, 156, 156)",gray62:"rgb(158, 158, 158)",gray63:"rgb(161, 161, 161)",gray64:"rgb(163, 163, 163)",gray65:"rgb(166, 166, 166)",gray66:"rgb(168, 168, 168)",gray67:"rgb(171, 171, 171)",gray68:"rgb(173, 173, 173)",gray69:"rgb(176, 176, 176)",gray7:"rgb(18, 18, 18)",gray70:"rgb(179, 179, 179)",gray71:"rgb(181, 181, 181)",gray72:"rgb(184, 184, 184)",gray73:"rgb(186, 186, 186)",gray74:"rgb(189, 189, 189)",gray75:"rgb(191, 191, 191)",gray76:"rgb(194, 194, 194)",gray77:"rgb(196, 196, 196)",gray78:"rgb(199, 199, 199)",gray79:"rgb(201, 201, 201)",gray8:"rgb(20, 20, 20)",gray80:"rgb(204, 204, 204)",gray81:"rgb(207, 207, 207)",gray82:"rgb(209, 209, 209)",gray83:"rgb(212, 212, 212)",gray84:"rgb(214, 214, 214)",gray85:"rgb(217, 217, 217)",gray86:"rgb(219, 219, 219)",gray87:"rgb(222, 222, 222)",gray88:"rgb(224, 224, 224)",gray89:"rgb(227, 227, 227)",gray9:"rgb(23, 23, 23)",gray90:"rgb(229, 229, 229)",gray91:"rgb(232, 232, 232)",gray92:"rgb(235, 235, 235)",gray93:"rgb(237, 237, 237)",gray94:"rgb(240, 240, 240)",gray95:"rgb(242, 242, 242)",gray96:"rgb(245, 245, 245)",gray97:"rgb(247, 247, 247)",gray98:"rgb(250, 250, 250)",gray99:"rgb(252, 252, 252)",green:"rgb(0, 255, 0)",green1:"rgb(0, 255, 0)",green2:"rgb(0, 238, 0)",green3:"rgb(0, 205, 0)",green4:"rgb(0, 139, 0)",greenyellow:"rgb(173, 255, 47)",grey:"rgb(190, 190, 190)",grey0:"rgb(0, 0, 0)",grey1:"rgb(3, 3, 3)",grey10:"rgb(26, 26, 26)",grey100:"rgb(255, 255, 255)",grey11:"rgb(28, 28, 28)",grey12:"rgb(31, 31, 31)",grey13:"rgb(33, 33, 33)",grey14:"rgb(36, 36, 36)",grey15:"rgb(38, 38, 38)",grey16:"rgb(41, 41, 41)",grey17:"rgb(43, 43, 43)",grey18:"rgb(46, 46, 46)",grey19:"rgb(48, 48, 48)",grey2:"rgb(5, 5, 5)",grey20:"rgb(51, 51, 51)",grey21:"rgb(54, 54, 54)",grey22:"rgb(56, 56, 56)",grey23:"rgb(59, 59, 59)",grey24:"rgb(61, 61, 61)",grey25:"rgb(64, 64, 64)",grey26:"rgb(66, 66, 66)",grey27:"rgb(69, 69, 69)",grey28:"rgb(71, 71, 71)",grey29:"rgb(74, 74, 74)",grey3:"rgb(8, 8, 8)",grey30:"rgb(77, 77, 77)",grey31:"rgb(79, 79, 79)",grey32:"rgb(82, 82, 82)",grey33:"rgb(84, 84, 84)",grey34:"rgb(87, 87, 87)",grey35:"rgb(89, 89, 89)",grey36:"rgb(92, 92, 92)",grey37:"rgb(94, 94, 94)",grey38:"rgb(97, 97, 97)",grey39:"rgb(99, 99, 99)",grey4:"rgb(10, 10, 10)",grey40:"rgb(102, 102, 102)",grey41:"rgb(105, 105, 105)",grey42:"rgb(107, 107, 107)",grey43:"rgb(110, 110, 110)",grey44:"rgb(112, 112, 112)",grey45:"rgb(115, 115, 115)",grey46:"rgb(117, 117, 117)",grey47:"rgb(120, 120, 120)",grey48:"rgb(122, 122, 122)",grey49:"rgb(125, 125, 125)",grey5:"rgb(13, 13, 13)",grey50:"rgb(127, 127, 127)",grey51:"rgb(130, 130, 130)",grey52:"rgb(133, 133, 133)",grey53:"rgb(135, 135, 135)",grey54:"rgb(138, 138, 138)",grey55:"rgb(140, 140, 140)",grey56:"rgb(143, 143, 143)",grey57:"rgb(145, 145, 145)",grey58:"rgb(148, 148, 148)",grey59:"rgb(150, 150, 150)",grey6:"rgb(15, 15, 15)",grey60:"rgb(153, 153, 153)",grey61:"rgb(156, 156, 156)",grey62:"rgb(158, 158, 158)",grey63:"rgb(161, 161, 161)",grey64:"rgb(163, 163, 163)",grey65:"rgb(166, 166, 166)",grey66:"rgb(168, 168, 168)",grey67:"rgb(171, 171, 171)",grey68:"rgb(173, 173, 173)",grey69:"rgb(176, 176, 176)",grey7:"rgb(18, 18, 18)",grey70:"rgb(179, 179, 179)",grey71:"rgb(181, 181, 181)",grey72:"rgb(184, 184, 184)",grey73:"rgb(186, 186, 186)",grey74:"rgb(189, 189, 189)",grey75:"rgb(191, 191, 191)",grey76:"rgb(194, 194, 194)",grey77:"rgb(196, 196, 196)",grey78:"rgb(199, 199, 199)",grey79:"rgb(201, 201, 201)",grey8:"rgb(20, 20, 20)",grey80:"rgb(204, 204, 204)",grey81:"rgb(207, 207, 207)",grey82:"rgb(209, 209, 209)",grey83:"rgb(212, 212, 212)",grey84:"rgb(214, 214, 214)",grey85:"rgb(217, 217, 217)",grey86:"rgb(219, 219, 219)",grey87:"rgb(222, 222, 222)",grey88:"rgb(224, 224, 224)",grey89:"rgb(227, 227, 227)",grey9:"rgb(23, 23, 23)",grey90:"rgb(229, 229, 229)",grey91:"rgb(232, 232, 232)",grey92:"rgb(235, 235, 235)",grey93:"rgb(237, 237, 237)",grey94:"rgb(240, 240, 240)",grey95:"rgb(242, 242, 242)",grey96:"rgb(245, 245, 245)",grey97:"rgb(247, 247, 247)",grey98:"rgb(250, 250, 250)",grey99:"rgb(252, 252, 252)",honeydew:"rgb(240, 255, 240)",honeydew1:"rgb(240, 255, 240)",honeydew2:"rgb(224, 238, 224)",honeydew3:"rgb(193, 205, 193)",honeydew4:"rgb(131, 139, 131)",hotpink:"rgb(255, 105, 180)",hotpink1:"rgb(255, 110, 180)",hotpink2:"rgb(238, 106, 167)",hotpink3:"rgb(205, 96, 144)",hotpink4:"rgb(139, 58, 98)",indianred:"rgb(205, 92, 92)",indianred1:"rgb(255, 106, 106)",indianred2:"rgb(238, 99, 99)",indianred3:"rgb(205, 85, 85)",indianred4:"rgb(139, 58, 58)",ivory:"rgb(255, 255, 240)",ivory1:"rgb(255, 255, 240)",ivory2:"rgb(238, 238, 224)",ivory3:"rgb(205, 205, 193)",ivory4:"rgb(139, 139, 131)",khaki:"rgb(240, 230, 140)",khaki1:"rgb(255, 246, 143)",khaki2:"rgb(238, 230, 133)",khaki3:"rgb(205, 198, 115)",khaki4:"rgb(139, 134, 78)",lavender:"rgb(230, 230, 250)",lavenderblush:"rgb(255, 240, 245)",lavenderblush1:"rgb(255, 240, 245)",lavenderblush2:"rgb(238, 224, 229)",lavenderblush3:"rgb(205, 193, 197)",lavenderblush4:"rgb(139, 131, 134)",lawngreen:"rgb(124, 252, 0)",lemonchiffon:"rgb(255, 250, 205)",lemonchiffon1:"rgb(255, 250, 205)",lemonchiffon2:"rgb(238, 233, 191)",lemonchiffon3:"rgb(205, 201, 165)",lemonchiffon4:"rgb(139, 137, 112)",lightblue:"rgb(173, 216, 230)",lightblue1:"rgb(191, 239, 255)",lightblue2:"rgb(178, 223, 238)",lightblue3:"rgb(154, 192, 205)",lightblue4:"rgb(104, 131, 139)",lightcoral:"rgb(240, 128, 128)",lightcyan:"rgb(224, 255, 255)",lightcyan1:"rgb(224, 255, 255)",lightcyan2:"rgb(209, 238, 238)",lightcyan3:"rgb(180, 205, 205)",lightcyan4:"rgb(122, 139, 139)",lightgoldenrod:"rgb(238, 221, 130)",lightgoldenrod1:"rgb(255, 236, 139)",lightgoldenrod2:"rgb(238, 220, 130)",lightgoldenrod3:"rgb(205, 190, 112)",lightgoldenrod4:"rgb(139, 129, 76)",lightgoldenrodyellow:"rgb(250, 250, 210)",lightgray:"rgb(211, 211, 211)",lightgreen:"rgb(144, 238, 144)",lightgrey:"rgb(211, 211, 211)",lightpink:"rgb(255, 182, 193)",lightpink1:"rgb(255, 174, 185)",lightpink2:"rgb(238, 162, 173)",lightpink3:"rgb(205, 140, 149)",lightpink4:"rgb(139, 95, 101)",lightsalmon:"rgb(255, 160, 122)",lightsalmon1:"rgb(255, 160, 122)",lightsalmon2:"rgb(238, 149, 114)",lightsalmon3:"rgb(205, 129, 98)",lightsalmon4:"rgb(139, 87, 66)",lightseagreen:"rgb(32, 178, 170)",lightskyblue:"rgb(135, 206, 250)",lightskyblue1:"rgb(176, 226, 255)",lightskyblue2:"rgb(164, 211, 238)",lightskyblue3:"rgb(141, 182, 205)",lightskyblue4:"rgb(96, 123, 139)",lightslateblue:"rgb(132, 112, 255)",lightslategray:"rgb(119, 136, 153)",lightslategrey:"rgb(119, 136, 153)",lightsteelblue:"rgb(176, 196, 222)",lightsteelblue1:"rgb(202, 225, 255)",lightsteelblue2:"rgb(188, 210, 238)",lightsteelblue3:"rgb(162, 181, 205)",lightsteelblue4:"rgb(110, 123, 139)",lightyellow:"rgb(255, 255, 224)",lightyellow1:"rgb(255, 255, 224)",lightyellow2:"rgb(238, 238, 209)",lightyellow3:"rgb(205, 205, 180)",lightyellow4:"rgb(139, 139, 122)",limegreen:"rgb(50, 205, 50)",linen:"rgb(250, 240, 230)",magenta:"rgb(255, 0, 255)",magenta1:"rgb(255, 0, 255)",magenta2:"rgb(238, 0, 238)",magenta3:"rgb(205, 0, 205)",magenta4:"rgb(139, 0, 139)",maroon:"rgb(176, 48, 96)",maroon1:"rgb(255, 52, 179)",maroon2:"rgb(238, 48, 167)",maroon3:"rgb(205, 41, 144)",maroon4:"rgb(139, 28, 98)",mediumaquamarine:"rgb(102, 205, 170)",mediumblue:"rgb(0, 0, 205)",mediumorchid:"rgb(186, 85, 211)",mediumorchid1:"rgb(224, 102, 255)",mediumorchid2:"rgb(209, 95, 238)",mediumorchid3:"rgb(180, 82, 205)",mediumorchid4:"rgb(122, 55, 139)",mediumpurple:"rgb(147, 112, 219)",mediumpurple1:"rgb(171, 130, 255)",mediumpurple2:"rgb(159, 121, 238)",mediumpurple3:"rgb(137, 104, 205)",mediumpurple4:"rgb(93, 71, 139)",mediumseagreen:"rgb(60, 179, 113)",mediumslateblue:"rgb(123, 104, 238)",mediumspringgreen:"rgb(0, 250, 154)",mediumturquoise:"rgb(72, 209, 204)",mediumvioletred:"rgb(199, 21, 133)",midnightblue:"rgb(25, 25, 112)",mintcream:"rgb(245, 255, 250)",mistyrose:"rgb(255, 228, 225)",mistyrose1:"rgb(255, 228, 225)",mistyrose2:"rgb(238, 213, 210)",mistyrose3:"rgb(205, 183, 181)",mistyrose4:"rgb(139, 125, 123)",moccasin:"rgb(255, 228, 181)",navajowhite:"rgb(255, 222, 173)",navajowhite1:"rgb(255, 222, 173)",navajowhite2:"rgb(238, 207, 161)",navajowhite3:"rgb(205, 179, 139)",navajowhite4:"rgb(139, 121, 94)",navy:"rgb(0, 0, 128)",navyblue:"rgb(0, 0, 128)",oldlace:"rgb(253, 245, 230)",olivedrab:"rgb(107, 142, 35)",olivedrab1:"rgb(192, 255, 62)",olivedrab2:"rgb(179, 238, 58)",olivedrab3:"rgb(154, 205, 50)",olivedrab4:"rgb(105, 139, 34)",orange:"rgb(255, 165, 0)",orange1:"rgb(255, 165, 0)",orange2:"rgb(238, 154, 0)",orange3:"rgb(205, 133, 0)",orange4:"rgb(139, 90, 0)",orangered:"rgb(255, 69, 0)",orangered1:"rgb(255, 69, 0)",orangered2:"rgb(238, 64, 0)",orangered3:"rgb(205, 55, 0)",orangered4:"rgb(139, 37, 0)",orchid:"rgb(218, 112, 214)",orchid1:"rgb(255, 131, 250)",orchid2:"rgb(238, 122, 233)",orchid3:"rgb(205, 105, 201)",orchid4:"rgb(139, 71, 137)",palegoldenrod:"rgb(238, 232, 170)",palegreen:"rgb(152, 251, 152)",palegreen1:"rgb(154, 255, 154)",palegreen2:"rgb(144, 238, 144)",palegreen3:"rgb(124, 205, 124)",palegreen4:"rgb(84, 139, 84)",paleturquoise:"rgb(175, 238, 238)",paleturquoise1:"rgb(187, 255, 255)",paleturquoise2:"rgb(174, 238, 238)",paleturquoise3:"rgb(150, 205, 205)",paleturquoise4:"rgb(102, 139, 139)",palevioletred:"rgb(219, 112, 147)",palevioletred1:"rgb(255, 130, 171)",palevioletred2:"rgb(238, 121, 159)",palevioletred3:"rgb(205, 104, 137)",palevioletred4:"rgb(139, 71, 93)",papayawhip:"rgb(255, 239, 213)",peachpuff:"rgb(255, 218, 185)",peachpuff1:"rgb(255, 218, 185)",peachpuff2:"rgb(238, 203, 173)",peachpuff3:"rgb(205, 175, 149)",peachpuff4:"rgb(139, 119, 101)",peru:"rgb(205, 133, 63)",pink:"rgb(255, 192, 203)",pink1:"rgb(255, 181, 197)",pink2:"rgb(238, 169, 184)",pink3:"rgb(205, 145, 158)",pink4:"rgb(139, 99, 108)",plum:"rgb(221, 160, 221)",plum1:"rgb(255, 187, 255)",plum2:"rgb(238, 174, 238)",plum3:"rgb(205, 150, 205)",plum4:"rgb(139, 102, 139)",powderblue:"rgb(176, 224, 230)",purple:"rgb(160, 32, 240)",purple1:"rgb(155, 48, 255)",purple2:"rgb(145, 44, 238)",purple3:"rgb(125, 38, 205)",purple4:"rgb(85, 26, 139)",red:"rgb(255, 0, 0)",red1:"rgb(255, 0, 0)",red2:"rgb(238, 0, 0)",red3:"rgb(205, 0, 0)",red4:"rgb(139, 0, 0)",rosybrown:"rgb(188, 143, 143)",rosybrown1:"rgb(255, 193, 193)",rosybrown2:"rgb(238, 180, 180)",rosybrown3:"rgb(205, 155, 155)",rosybrown4:"rgb(139, 105, 105)",royalblue:"rgb(65, 105, 225)",royalblue1:"rgb(72, 118, 255)",royalblue2:"rgb(67, 110, 238)",royalblue3:"rgb(58, 95, 205)",royalblue4:"rgb(39, 64, 139)",saddlebrown:"rgb(139, 69, 19)",salmon:"rgb(250, 128, 114)",salmon1:"rgb(255, 140, 105)",salmon2:"rgb(238, 130, 98)",salmon3:"rgb(205, 112, 84)",salmon4:"rgb(139, 76, 57)",sandybrown:"rgb(244, 164, 96)",seagreen:"rgb(46, 139, 87)",seagreen1:"rgb(84, 255, 159)",seagreen2:"rgb(78, 238, 148)",seagreen3:"rgb(67, 205, 128)",seagreen4:"rgb(46, 139, 87)",seashell:"rgb(255, 245, 238)",seashell1:"rgb(255, 245, 238)",seashell2:"rgb(238, 229, 222)",seashell3:"rgb(205, 197, 191)",seashell4:"rgb(139, 134, 130)",sienna:"rgb(160, 82, 45)",sienna1:"rgb(255, 130, 71)",sienna2:"rgb(238, 121, 66)",sienna3:"rgb(205, 104, 57)",sienna4:"rgb(139, 71, 38)",skyblue:"rgb(135, 206, 235)",skyblue1:"rgb(135, 206, 255)",skyblue2:"rgb(126, 192, 238)",skyblue3:"rgb(108, 166, 205)",skyblue4:"rgb(74, 112, 139)",slateblue:"rgb(106, 90, 205)",slateblue1:"rgb(131, 111, 255)",slateblue2:"rgb(122, 103, 238)",slateblue3:"rgb(105, 89, 205)",slateblue4:"rgb(71, 60, 139)",slategray:"rgb(112, 128, 144)",slategray1:"rgb(198, 226, 255)",slategray2:"rgb(185, 211, 238)",slategray3:"rgb(159, 182, 205)",slategray4:"rgb(108, 123, 139)",slategrey:"rgb(112, 128, 144)",snow:"rgb(255, 250, 250)",snow1:"rgb(255, 250, 250)",snow2:"rgb(238, 233, 233)",snow3:"rgb(205, 201, 201)",snow4:"rgb(139, 137, 137)",springgreen:"rgb(0, 255, 127)",springgreen1:"rgb(0, 255, 127)",springgreen2:"rgb(0, 238, 118)",springgreen3:"rgb(0, 205, 102)",springgreen4:"rgb(0, 139, 69)",steelblue:"rgb(70, 130, 180)",steelblue1:"rgb(99, 184, 255)",steelblue2:"rgb(92, 172, 238)",steelblue3:"rgb(79, 148, 205)",steelblue4:"rgb(54, 100, 139)",tan:"rgb(210, 180, 140)",tan1:"rgb(255, 165, 79)",tan2:"rgb(238, 154, 73)",tan3:"rgb(205, 133, 63)",tan4:"rgb(139, 90, 43)",thistle:"rgb(216, 191, 216)",thistle1:"rgb(255, 225, 255)",thistle2:"rgb(238, 210, 238)",thistle3:"rgb(205, 181, 205)",thistle4:"rgb(139, 123, 139)",tomato:"rgb(255, 99, 71)",tomato1:"rgb(255, 99, 71)",tomato2:"rgb(238, 92, 66)",tomato3:"rgb(205, 79, 57)",tomato4:"rgb(139, 54, 38)",turquoise:"rgb(64, 224, 208)",turquoise1:"rgb(0, 245, 255)",turquoise2:"rgb(0, 229, 238)",turquoise3:"rgb(0, 197, 205)",turquoise4:"rgb(0, 134, 139)",violet:"rgb(238, 130, 238)",violetred:"rgb(208, 32, 144)",violetred1:"rgb(255, 62, 150)",violetred2:"rgb(238, 58, 140)",violetred3:"rgb(205, 50, 120)",violetred4:"rgb(139, 34, 82)",wheat:"rgb(245, 222, 179)",wheat1:"rgb(255, 231, 186)",wheat2:"rgb(238, 216, 174)",wheat3:"rgb(205, 186, 150)",wheat4:"rgb(139, 126, 102)",white:"rgb(255, 255, 255)",whitesmoke:"rgb(245, 245, 245)",yellow:"rgb(255, 255, 0)",yellow1:"rgb(255, 255, 0)",yellow2:"rgb(238, 238, 0)",yellow3:"rgb(205, 205, 0)",yellow4:"rgb(139, 139, 0)",yellowgreen:"rgb(154, 205, 50)"},i.f={},i.f.createEnum=function(e){return new String(e)},i.f.replaceVars=function(e,t){return e.replace(/%([a-z]*)\(([^\)]+)\)/gi,function(e,r,o){if(void 0===t[o])throw"Unknown variable: "+o;var s=t[o];if(r in i.f.replaceVars.functions)s=i.f.replaceVars.functions[r](s);else if(r)throw"Unknown escape function: "+r;return s})},i.f.replaceVars.functions={encodeURI:encodeURI,encodeURIComponent:encodeURIComponent,escapeHTML:function(e){var t={"<":"<",">":">","&":"&",'"':""","'":"'"};return e.replace(/[<>&\"\']/g,function(e){return t[e]})}},i.f.getAcceptLanguages=function(e){i.f.getAcceptLanguages.chromeSupported()?chrome.i18n.getAcceptLanguages(e):setTimeout(function(){e([navigator.language.replace(/-/g,"_")])},0)},i.f.getAcceptLanguages.chromeSupported=function(){return window.chrome&&chrome.i18n},i.f.parseQuery=function(e){e.startsWith("?")&&(e=e.substr(1));for(var t={},r=e.split("&"),i=0;ir?r:e},i.f.zpad=function(e,t){return String(e).padStart(t,"0")},i.f.getWhitespace=function(e){if(e<=0)return"";var t=this.getWhitespace;for(t.whitespace||(t.whitespace=" ");e>t.whitespace.length;)t.whitespace+=t.whitespace;return t.whitespace.substr(0,e)},i.f.alarm=function(e,t){var r=t||5e3,o=i.f.getStack(1);return function(){var t=setTimeout(function(){var i="string"==typeof e?i:e.name;i=i?": "+i:"",console.warn("lib.f.alarm: timeout expired: "+r/1e3+"s"+i),console.log(o),t=null},r),i=function(e){return function(){return t&&(clearTimeout(t),t=null),e.apply(null,arguments)}};return"string"==typeof e?i:i(e)}()},i.f.getStack=function(e){var t,r=e?e+2:2;try{throw new Error}catch(e){t=e.stack.split("\n")}for(var i={},o=r;o=0&&this.observers.splice(t,1)},i.PreferenceManager.Record.prototype.get=function(){return this.currentValue===this.DEFAULT_VALUE?/^(string|number)$/.test(typeof this.defaultValue)?this.defaultValue:"object"==typeof this.defaultValue?JSON.parse(JSON.stringify(this.defaultValue)):this.defaultValue:this.currentValue},i.PreferenceManager.prototype.deactivate=function(){if(!this.isActive_)throw new Error("Not activated");this.isActive_=!1,this.storage.removeObserver(this.storageObserver_)},i.PreferenceManager.prototype.activate=function(){if(this.isActive_)throw new Error("Already activated");this.isActive_=!0,this.storage.addObserver(this.storageObserver_)},i.PreferenceManager.prototype.readStorage=function(e){function t(){0==--r&&e&&e()}var r=0,i=Object.keys(this.prefRecords_).map(function(e){return this.prefix+e}.bind(this));this.trace&&console.log("Preferences read: "+this.prefix),this.storage.getItems(i,function(i){var o=this.prefix.length;for(var s in i){var n=i[s],a=s.substr(o),l=a in this.childLists_&&JSON.stringify(n)!=JSON.stringify(this.prefRecords_[a].currentValue);this.prefRecords_[a].currentValue=n,l&&(r++,this.syncChildList(a,t))}0==r&&e&&setTimeout(e)}.bind(this))},i.PreferenceManager.prototype.definePreference=function(e,t,r){var o=this.prefRecords_[e];o?this.changeDefault(e,t):o=this.prefRecords_[e]=new i.PreferenceManager.Record(e,t),r&&o.addObserver(r)},i.PreferenceManager.prototype.definePreferences=function(e){for(var t=0;t=0&&s.splice(l,1),!this.childLists_[e][a]){var h=this.childFactories_[e](this,a);if(!h){console.warn("Unable to restore child: "+e+": "+a);continue}h.trace=this.trace,this.childLists_[e][a]=h,r++,h.readStorage(function(){0==--r&&t&&t()})}}for(n=0;n=0;i--){var o=e[i],s=this.storage_.getItem(o);if("string"==typeof s)try{r[o]=JSON.parse(s)}catch(e){r[o]=s}else e.splice(i,1)}setTimeout(t.bind(null,r),0)},i.Storage.Local.prototype.setItem=function(e,t,r){this.storage_.setItem(e,JSON.stringify(t)),r&&setTimeout(r,0)},i.Storage.Local.prototype.setItems=function(e,t){for(var r in e)this.storage_.setItem(r,JSON.stringify(e[r]));t&&setTimeout(t,0)},i.Storage.Local.prototype.removeItem=function(e,t){this.storage_.removeItem(e),t&&setTimeout(t,0)},i.Storage.Local.prototype.removeItems=function(e,t){for(var r=0;r=0;i--){var o=e[i],s=this.storage_[o];if("string"==typeof s)try{r[o]=JSON.parse(s)}catch(e){r[o]=s}else e.splice(i,1)}setTimeout(t.bind(null,r),0)},i.Storage.Memory.prototype.setItem=function(e,t,r){var i=this.storage_[e];this.storage_[e]=JSON.stringify(t);var o={};o[e]={oldValue:i,newValue:t},setTimeout(function(){for(var e=0;e{let t="";switch(e){case"debug":case"warn":case"error":t=e.toUpperCase()+": "}const r=this.console_[e];this[e]=this.console_[e]=((...e)=>{this.save&&(this.data+=this.prefix_+t+e.join(" ")+"\n"),r.apply(this.console_,e)})}),["group","groupCollapsed"].forEach(e=>{const t=this.console_[e];this[e]=this.console_[e]=((e="")=>{t(e),this.save&&(this.data+=this.prefix_+e+"\n"),this.prefix_=" ".repeat(++this.prefixStack_)})});const t=this.console_.groupEnd;this.groupEnd=this.console_.groupEnd=(()=>{t(),this.prefix_=" ".repeat(--this.prefixStack_)})},i.TestManager.Suite=function(e){function t(t,r){this.testManager_=t,this.suiteName=e,this.setup(r)}return t.suiteName=e,t.addTest=i.TestManager.Suite.addTest,t.disableTest=i.TestManager.Suite.disableTest,t.getTest=i.TestManager.Suite.getTest,t.getTestList=i.TestManager.Suite.getTestList,t.testList_=[],t.testMap_={},t.prototype=Object.create(i.TestManager.Suite.prototype),t.constructor=i.TestManager.Suite,i.TestManager.Suite.subclasses.push(t),t},i.TestManager.Suite.subclasses=[],i.TestManager.Suite.addTest=function(e,t){if(e in this.testMap_)throw"Duplicate test name: "+e;var r=new i.TestManager.Test(this,e,t);this.testMap_[e]=r,this.testList_.push(r)},i.TestManager.Suite.disableTest=function(e,t){if(e in this.testMap_)throw"Duplicate test name: "+e;var r=new i.TestManager.Test(this,e,t);console.log("Disabled test: "+r.fullName)},i.TestManager.Suite.getTest=function(e){return this.testMap_[e]},i.TestManager.Suite.getTestList=function(){return this.testList_},i.TestManager.Suite.prototype.setDefaults=function(e,t){for(var r in t)this[r]=r in e?e[r]:t[r]},i.TestManager.Suite.prototype.setup=function(e){},i.TestManager.Suite.prototype.preamble=function(e,t){},i.TestManager.Suite.prototype.postamble=function(e,t){},i.TestManager.Test=function(e,t,r){this.suiteClass=e,this.testName=t,this.fullName=e.suiteName+"["+t+"]",this.testFunction_=r},i.TestManager.Test.prototype.run=function(e){try{this.testFunction_.apply(e.suite,[e,e.testRun.cx])}catch(t){if(t instanceof i.TestManager.Result.TestComplete)return;e.println("Test raised an exception: "+t),t.stack&&(t.stack instanceof Array?e.println(t.stack.join("\n")):e.println(t.stack)),e.completeTest_(e.FAILED,!1)}},i.TestManager.TestRun=function(e,t){this.testManager=e,this.log=e.log,this.cx=t||{},this.failures=[],this.passes=[],this.startDate=null,this.duration=null,this.currentResult=null,this.maxFailures=0,this.panic=!1,this.testQueue_=[]},i.TestManager.TestRun.prototype.ALL_TESTS=i.f.createEnum(""),i.TestManager.TestRun.prototype.selectTest=function(e){this.testQueue_.push(e)},i.TestManager.TestRun.prototype.selectSuite=function(e,t){for(var r=t||this.ALL_TESTS,i=0,o=e.getTestList(),s=0;s500&&this.log.warn("Slow test took "+this.msToSeconds_(e.duration)),this.log.groupEnd(),e.status==e.FAILED)this.failures.push(e),this.currentSuite=null;else{if(e.status!=e.PASSED)return this.log.error("Unknown result status: "+e.test.fullName+": "+e.status),this.panic=!0;this.passes.push(e)}this.runNextTest_()},i.TestManager.TestRun.prototype.onResultReComplete=function(e,t){this.log.error("Late complete for test: "+e.test.fullName+": "+t);var r=this.passes.indexOf(e);r>=0&&(this.passes.splice(r,1),this.failures.push(e))},i.TestManager.TestRun.prototype.runNextTest_=function(){if(this.panic||!this.testQueue_.length)return this.onTestRunComplete_();if(this.maxFailures&&this.failures.length>=this.maxFailures)return this.log.error("Maximum failure count reached, aborting test run."),this.onTestRunComplete_();var e=this.testQueue_[0],t=this.currentResult?this.currentResult.suite:null;try{t&&t instanceof e.suiteClass||(t&&this.log.groupEnd(),this.log.group(e.suiteClass.suiteName),t=new e.suiteClass(this.testManager,this.cx))}catch(e){return this.log.error("Exception during setup: "+(e.stack?e.stack:e)),this.panic=!0,void this.onTestRunComplete_()}try{this.log.group(e.testName),this.currentResult=new i.TestManager.Result(this,t,e),this.testManager.testPreamble(this.currentResult,this.cx),t.preamble(this.currentResult,this.cx),this.testQueue_.shift()}catch(e){return this.log.error("Unexpected exception during test preamble: "+(e.stack?e.stack:e)),this.log.groupEnd(),this.panic=!0,void this.onTestRunComplete_()}try{this.currentResult.run()}catch(e){this.log.error("Unexpected exception during test run: "+(e.stack?e.stack:e)),this.panic=!0}},i.TestManager.TestRun.prototype.run=function(){this.log.info("Running "+this.testQueue_.length+" test(s)"),window.onerror=this.onUncaughtException_.bind(this),this.startDate=new Date,this.runNextTest_()},i.TestManager.TestRun.prototype.msToSeconds_=function(e){return(e/1e3).toFixed(2)+"s"},i.TestManager.TestRun.prototype.summarize=function(){if(this.failures.length)for(var e=0;e1?"\n"+t.join("\n"):t.join("\n")}if(e!==t&&!(t instanceof Array&&this.arrayEQ_(e,t))){var o=r?"["+r+"]":"";this.fail("assertEQ"+o+": "+this.getCallerLocation_(1)+": "+i(e)+" !== "+i(t))}},i.TestManager.Result.prototype.assert=function(e,t){if(!0!==e){var r=t?"["+t+"]":"";this.fail("assert"+r+": "+this.getCallerLocation_(1)+": "+String(e))}},i.TestManager.Result.prototype.getCallerLocation_=function(e){try{throw new Error}catch(r){var t=r.stack.split("\n")[e+2].match(/([^/]+:\d+):\d+\)?$/);return t?t[1]:"???"}},i.TestManager.Result.prototype.println=function(e){this.testRun.log.info(e)},i.TestManager.Result.prototype.fail=function(e){arguments.length&&this.println(e),this.completeTest_(this.FAILED,!0)},i.TestManager.Result.prototype.pass=function(){this.completeTest_(this.PASSED,!0)},i.UTF8Decoder=function(){this.bytesLeft=0,this.codePoint=0,this.lowerBound=0},i.UTF8Decoder.prototype.decode=function(e){for(var t="",r=0;r1114111?t+="�":o<65536?t+=String.fromCharCode(o):(o-=65536,t+=String.fromCharCode(55296+(o>>>10&1023),56320+(1023&o)))}}else t+="�",this.bytesLeft=0,r--}return t},i.decodeUTF8=function(e){return(new i.UTF8Decoder).decode(e)},i.encodeUTF8=function(e){for(var t="",r=0;r>>6),s=1):i<=65535?(t+=String.fromCharCode(224|i>>>12),s=2):(t+=String.fromCharCode(240|i>>>18),s=3);s>0;)s--,t+=String.fromCharCode(128|i>>>6*s&63)}return t},i.wc={},i.wc.nulWidth=0,i.wc.controlWidth=0,i.wc.regardCjkAmbiguous=!1,i.wc.cjkAmbiguousWidth=2,i.wc.combining=[[768,879],[1155,1158],[1160,1161],[1425,1469],[1471,1471],[1473,1474],[1476,1477],[1479,1479],[1536,1539],[1552,1557],[1611,1630],[1648,1648],[1750,1764],[1767,1768],[1770,1773],[1807,1807],[1809,1809],[1840,1866],[1958,1968],[2027,2035],[2305,2306],[2364,2364],[2369,2376],[2381,2381],[2385,2388],[2402,2403],[2433,2433],[2492,2492],[2497,2500],[2509,2509],[2530,2531],[2561,2562],[2620,2620],[2625,2626],[2631,2632],[2635,2637],[2672,2673],[2689,2690],[2748,2748],[2753,2757],[2759,2760],[2765,2765],[2786,2787],[2817,2817],[2876,2876],[2879,2879],[2881,2883],[2893,2893],[2902,2902],[2946,2946],[3008,3008],[3021,3021],[3134,3136],[3142,3144],[3146,3149],[3157,3158],[3260,3260],[3263,3263],[3270,3270],[3276,3277],[3298,3299],[3393,3395],[3405,3405],[3530,3530],[3538,3540],[3542,3542],[3633,3633],[3636,3642],[3655,3662],[3761,3761],[3764,3769],[3771,3772],[3784,3789],[3864,3865],[3893,3893],[3895,3895],[3897,3897],[3953,3966],[3968,3972],[3974,3975],[3984,3991],[3993,4028],[4038,4038],[4141,4144],[4146,4146],[4150,4151],[4153,4153],[4184,4185],[4448,4607],[4959,4959],[5906,5908],[5938,5940],[5970,5971],[6002,6003],[6068,6069],[6071,6077],[6086,6086],[6089,6099],[6109,6109],[6155,6157],[6313,6313],[6432,6434],[6439,6440],[6450,6450],[6457,6459],[6679,6680],[6912,6915],[6964,6964],[6966,6970],[6972,6972],[6978,6978],[7019,7027],[7616,7626],[7678,7679],[8203,8207],[8234,8238],[8288,8291],[8298,8303],[8400,8431],[12330,12335],[12441,12442],[43014,43014],[43019,43019],[43045,43046],[64286,64286],[65024,65039],[65056,65059],[65279,65279],[65529,65531],[68097,68099],[68101,68102],[68108,68111],[68152,68154],[68159,68159],[119143,119145],[119155,119170],[119173,119179],[119210,119213],[119362,119364],[917505,917505],[917536,917631],[917760,917999]],i.wc.ambiguous=[[161,161],[164,164],[167,168],[170,170],[174,174],[176,180],[182,186],[188,191],[198,198],[208,208],[215,216],[222,225],[230,230],[232,234],[236,237],[240,240],[242,243],[247,250],[252,252],[254,254],[257,257],[273,273],[275,275],[283,283],[294,295],[299,299],[305,307],[312,312],[319,322],[324,324],[328,331],[333,333],[338,339],[358,359],[363,363],[462,462],[464,464],[466,466],[468,468],[470,470],[472,472],[474,474],[476,476],[593,593],[609,609],[708,708],[711,711],[713,715],[717,717],[720,720],[728,731],[733,733],[735,735],[913,929],[931,937],[945,961],[963,969],[1025,1025],[1040,1103],[1105,1105],[8208,8208],[8211,8214],[8216,8217],[8220,8221],[8224,8226],[8228,8231],[8240,8240],[8242,8243],[8245,8245],[8251,8251],[8254,8254],[8308,8308],[8319,8319],[8321,8324],[8364,8364],[8451,8451],[8453,8453],[8457,8457],[8467,8467],[8470,8470],[8481,8482],[8486,8486],[8491,8491],[8531,8532],[8539,8542],[8544,8555],[8560,8569],[8592,8601],[8632,8633],[8658,8658],[8660,8660],[8679,8679],[8704,8704],[8706,8707],[8711,8712],[8715,8715],[8719,8719],[8721,8721],[8725,8725],[8730,8730],[8733,8736],[8739,8739],[8741,8741],[8743,8748],[8750,8750],[8756,8759],[8764,8765],[8776,8776],[8780,8780],[8786,8786],[8800,8801],[8804,8807],[8810,8811],[8814,8815],[8834,8835],[8838,8839],[8853,8853],[8857,8857],[8869,8869],[8895,8895],[8978,8978],[9312,9449],[9451,9547],[9552,9587],[9600,9615],[9618,9621],[9632,9633],[9635,9641],[9650,9651],[9654,9655],[9660,9661],[9664,9665],[9670,9672],[9675,9675],[9678,9681],[9698,9701],[9711,9711],[9733,9734],[9737,9737],[9742,9743],[9748,9749],[9756,9756],[9758,9758],[9792,9792],[9794,9794],[9824,9825],[9827,9829],[9831,9834],[9836,9837],[9839,9839],[10045,10045],[10102,10111],[57344,63743],[65533,65533],[983040,1048573],[1048576,1114109]],i.wc.isSpace=function(e){var t,r=0,o=i.wc.combining.length-1;if(ei.wc.combining[o][1])return!1;for(;o>=r;)if(t=Math.floor((r+o)/2),e>i.wc.combining[t][1])r=t+1;else{if(!(ei.wc.ambiguous[o][1])return!1;for(;o>=r;)if(t=Math.floor((r+o)/2),e>i.wc.ambiguous[t][1])r=t+1;else{if(!(e=127&&e<160?i.wc.controlWidth:e<127?1:i.wc.isSpace(e)?0:1+(e>=4352&&(e<=4447||9001==e||9002==e||e>=11904&&e<=42191&&12351!=e||e>=44032&&e<=55203||e>=63744&&e<=64255||e>=65040&&e<=65049||e>=65072&&e<=65135||e>=65280&&e<=65376||e>=65504&&e<=65510||e>=131072&&e<=196605||e>=196608&&e<=262141))},i.wc.charWidthRegardAmbiguous=function(e){return i.wc.isCjkAmbiguous(e)?i.wc.cjkAmbiguousWidth:i.wc.charWidthDisregardAmbiguous(e)},i.wc.strWidth=function(e){for(var t,r=0,o=0;ot);o++);if(void 0!=r){for(s=o,n=0;sr&&s--,e.substring(o,s)}return e.substr(o)},i.wc.substring=function(e,t,r){return i.wc.substr(e,t,r-t)},i.resource.add("libdot/changelog/version","text/plain","1.16"),i.resource.add("libdot/changelog/date","text/plain","2017-08-16"),i.rtdep("lib.Storage");var o={};o.windowType=null,o.zoomWarningMessage="ZOOM != 100%",o.notifyCopyMessage="✂",o.desktopNotificationTitle="♪ %(title) ♪",o.testDeps=["hterm.ScrollPort.Tests","hterm.Screen.Tests","hterm.Terminal.Tests","hterm.VT.Tests","hterm.VT.CannedTests"],i.registerInit("hterm",function(e){function t(t){o.windowType=t.type,setTimeout(e,0)}o.defaultStorage||(window.chrome&&chrome.storage&&chrome.storage.sync?o.defaultStorage=new i.Storage.Chrome(chrome.storage.sync):o.defaultStorage=new i.Storage.Local);var r=!1;if(window.chrome&&chrome.runtime&&chrome.runtime.getManifest){var s=chrome.runtime.getManifest();r=s.app&&s.app.background}r?setTimeout(t.bind(null,{type:"popup"}),0):window.chrome&&chrome.tabs?chrome.tabs.getCurrent(function(r){r&&window.chrome?chrome.windows.get(r.windowId,null,t):(o.windowType="normal",setTimeout(e,0))}):setTimeout(t.bind(null,{type:"normal"}),0)}),o.getClientSize=function(e){return e.getBoundingClientRect()},o.getClientWidth=function(e){return e.getBoundingClientRect().width},o.getClientHeight=function(e){return e.getBoundingClientRect().height},o.copySelectionToClipboard=function(e){try{e.execCommand("copy")}catch(e){}},o.pasteFromClipboard=function(e){try{return e.execCommand("paste")}catch(e){return!1}},o.notify=function(e){var t=(e,t)=>void 0!==e?e:t;void 0!==e&&null!==e||(e={});var r={body:e.body,icon:t(e.icon,i.resource.getDataUrl("hterm/images/icon-96"))},s=t(e.title,window.document.title);s||(s="hterm"),s=i.f.replaceVars(o.desktopNotificationTitle,{title:s});var n=new Notification(s,r);return n.onclick=function(){window.focus(),this.close()},n},o.Size=function(e,t){this.width=e,this.height=t},o.Size.prototype.resize=function(e,t){this.width=e,this.height=t},o.Size.prototype.clone=function(){return new o.Size(this.width,this.height)},o.Size.prototype.setTo=function(e){this.width=e.width,this.height=e.height},o.Size.prototype.equals=function(e){return this.width==e.width&&this.height==e.height},o.Size.prototype.toString=function(){return"[hterm.Size: "+this.width+", "+this.height+"]"},o.RowCol=function(e,t,r){this.row=e,this.column=t,this.overflow=!!r},o.RowCol.prototype.move=function(e,t,r){this.row=e,this.column=t,this.overflow=!!r},o.RowCol.prototype.clone=function(){return new o.RowCol(this.row,this.column,this.overflow)},o.RowCol.prototype.setTo=function(e){this.row=e.row,this.column=e.column,this.overflow=e.overflow},o.RowCol.prototype.equals=function(e){return this.row==e.row&&this.column==e.column&&this.overflow==e.overflow},o.RowCol.prototype.toString=function(){return"[hterm.RowCol: "+this.row+", "+this.column+", "+this.overflow+"]"},i.rtdep("lib.f"),o.Frame=function(e,t,r){this.terminal_=e,this.div_=e.div_,this.url=t,this.options=r||{},this.iframe_=null,this.container_=null,this.messageChannel_=null},o.Frame.prototype.onMessage_=function(e){switch(e.data.name){case"ipc-init-ok":return void this.sendTerminalInfo_();case"terminal-info-ok":return this.container_.style.display="flex",this.messageChannel_.port1.onmessage=this.onMessage.bind(this),void this.onLoad();default:return void console.log("Unknown message from frame:",e.data)}},o.Frame.prototype.onMessage=function(){},o.Frame.prototype.onLoad_=function(){this.messageChannel_=new MessageChannel,this.messageChannel_.port1.onmessage=this.onMessage_.bind(this),this.messageChannel_.port1.start(),this.iframe_.contentWindow.postMessage({name:"ipc-init",argv:[{messagePort:this.messageChannel_.port2}]},this.url,[this.messageChannel_.port2])},o.Frame.prototype.onLoad=function(){},o.Frame.prototype.sendTerminalInfo_=function(){i.f.getAcceptLanguages(function(e){this.postMessage("terminal-info",[{acceptLanguages:e,foregroundColor:this.terminal_.getForegroundColor(),backgroundColor:this.terminal_.getBackgroundColor(),cursorColor:this.terminal_.getCursorColor(),fontSize:this.terminal_.getFontSize(),fontFamily:this.terminal_.getFontFamily(),baseURL:i.f.getURL("/")}])}.bind(this))},o.Frame.prototype.onCloseClicked_=function(){this.close()},o.Frame.prototype.close=function(){this.container_&&this.container_.parentNode&&(this.container_.parentNode.removeChild(this.container_),this.onClose())},o.Frame.prototype.onClose=function(){},o.Frame.prototype.postMessage=function(e,t){if(!this.messageChannel_)throw new Error("Message channel is not set up.");this.messageChannel_.port1.postMessage({name:e,argv:t})},o.Frame.prototype.show=function(){function e(e,r){return e in t.options?t.options[e]:r}var t=this,t=this;if(this.container_&&this.container_.parentNode)console.error("Frame already visible");else{var r=o.getClientSize(this.div_),i=e("width",640),s=e("height",480),n=(r.width,r.height,this.terminal_.document_),a=this.container_=n.createElement("div");a.style.cssText="position: absolute;display: none;flex-direction: column;top: 10%;left: 4%;width: 90%;height: 80%;min-height: 20%;max-height: 80%;box-shadow: 0 0 2px "+this.terminal_.getForegroundColor()+";border: 2px "+this.terminal_.getForegroundColor()+" solid;";var l=this.iframe_=n.createElement("iframe");l.onload=this.onLoad_.bind(this),l.style.cssText="display: flex;flex: 1;width: 100%",l.setAttribute("src",this.url),l.setAttribute("seamless",!0),a.appendChild(l),this.div_.appendChild(a)}},i.rtdep("hterm.Keyboard.KeyMap"),o.Keyboard=function(e){this.terminal=e,this.keyboardElement_=null,this.handlers_=[["focusout",this.onFocusOut_.bind(this)],["keydown",this.onKeyDown_.bind(this)],["keypress",this.onKeyPress_.bind(this)],["keyup",this.onKeyUp_.bind(this)],["textInput",this.onTextInput_.bind(this)]],this.keyMap=new o.Keyboard.KeyMap(this),this.bindings=new o.Keyboard.Bindings(this),this.altGrMode="none",this.shiftInsertPaste=!0,this.homeKeysScroll=!1,this.pageKeysScroll=!1,this.ctrlPlusMinusZeroZoom=!0,this.ctrlCCopy=!1,this.ctrlVPaste=!1,this.applicationKeypad=!1,this.applicationCursor=!1,this.backspaceSendsBackspace=!1,this.characterEncoding="utf-8",this.metaSendsEscape=!0,this.passMetaV=!0,this.altSendsWhat="escape",this.altIsMeta=!1,this.altBackspaceIsMetaBackspace=!1,this.altKeyPressed=0,this.mediaKeysAreFKeys=!1,this.previousAltSendsWhat_=null},o.Keyboard.KeyActions={CANCEL:i.f.createEnum("CANCEL"),DEFAULT:i.f.createEnum("DEFAULT"),PASS:i.f.createEnum("PASS"),STRIP:i.f.createEnum("STRIP")},o.Keyboard.prototype.encode=function(e){return"utf-8"==this.characterEncoding?this.terminal.vt.encodeUTF8(e):e},o.Keyboard.prototype.installKeyboard=function(e){if(e!=this.keyboardElement_){e&&this.keyboardElement_&&this.installKeyboard(null);for(var t=0;t=32&&(r=e.charCode);r&&this.terminal.onVTKeystroke(String.fromCharCode(r)),e.preventDefault(),e.stopPropagation()}},o.Keyboard.prototype.preventChromeAppNonCtrlShiftDefault_=function(e){window.chrome&&window.chrome.app&&window.chrome.app.window&&(e.ctrlKey&&e.shiftKey||e.preventDefault())},o.Keyboard.prototype.onFocusOut_=function(e){this.altKeyPressed=0},o.Keyboard.prototype.onKeyUp_=function(e){18==e.keyCode&&(this.altKeyPressed=this.altKeyPressed&~(1<=64&&_<=95&&(f=String.fromCharCode(_-64))),u&&"8-bit"==this.altSendsWhat&&1==f.length){var _=f.charCodeAt(0)+128;f=String.fromCharCode(_)}(u&&"escape"==this.altSendsWhat||d&&this.metaSendsEscape)&&(f=""+f)}this.terminal.onVTKeystroke(f)}else console.warn("Invalid action: "+JSON.stringify(f))}else console.warn("No definition for keyCode: "+e.keyCode)},o.Keyboard.Bindings=function(){this.bindings_={}},o.Keyboard.Bindings.prototype.clear=function(){this.bindings_={}},o.Keyboard.Bindings.prototype.addBinding_=function(e,t){var r=null,i=this.bindings_[e.keyCode];if(i)for(var s=0;s",d,s(f,p),d,d],[191,"/?",d,i(a("_"),a("?")),d,d],[17,"[CTRL]",p,p,p,p],[18,"[ALT]",p,p,p,p],[91,"[LAPL]",p,p,p,p],[32," ",d,a("@"),d,d],[92,"[RAPL]",p,p,p,p],[93,"[RMENU]",p,p,p,p],[42,"[PRTSCR]",p,p,p,p],[145,"[SCRLK]",p,p,p,p],[19,"[BREAK]",p,p,p,p],[45,"[INSERT]",l("onKeyInsert_"),d,d,d],[36,"[HOME]",l("onKeyHome_"),d,d,d],[33,"[PGUP]",l("onKeyPageUp_"),d,d,d],[46,"[DEL]",l("onKeyDel_"),d,d,d],[35,"[END]",l("onKeyEnd_"),d,d,d],[34,"[PGDOWN]",l("onKeyPageDown_"),d,d,d],[38,"[UP]",l("onKeyArrowUp_"),d,d,d],[40,"[DOWN]",l("onKeyArrowDown_"),d,d,d],[39,"[RIGHT]",t("[C","OC"),d,d,d],[37,"[LEFT]",t("[D","OD"),d,d,d],[144,"[NUMLOCK]",p,p,p,p],[96,"[KP0]",d,d,d,d],[97,"[KP1]",d,d,d,d],[98,"[KP2]",d,d,d,d],[99,"[KP3]",d,d,d,d],[100,"[KP4]",d,d,d,d],[101,"[KP5]",d,d,d,d],[102,"[KP6]",d,d,d,d],[103,"[KP7]",d,d,d,d],[104,"[KP8]",d,d,d,d],[105,"[KP9]",d,d,d,d],[107,"[KP+]",d,l("onPlusMinusZero_"),d,l("onPlusMinusZero_")],[109,"[KP-]",d,l("onPlusMinusZero_"),d,l("onPlusMinusZero_")],[106,"[KP*]",d,d,d,d],[111,"[KP/]",d,d,d,d],[110,"[KP.]",d,d,d,d],[166,"[BACK]",h(n("OP","[P")),d,"[23~",d],[167,"[FWD]",h(n("OQ","[Q")),d,"[24~",d],[168,"[RELOAD]",h(n("OR","[R")),d,"[25~",d],[183,"[FSCR]",h(n("OS","[S")),d,"[26~",d],[182,"[WINS]",h("[15~"),d,"[28~",d],[216,"[BRIT-]",h("[17~"),d,"[29~",d],[217,"[BRIT+]",h("[18~"),d,"[31~",d])},o.Keyboard.KeyMap.prototype.onKeyInsert_=function(e){return this.keyboard.shiftInsertPaste&&e.shiftKey?o.Keyboard.KeyActions.PASS:"[2~"},o.Keyboard.KeyMap.prototype.onKeyHome_=function(e){return!this.keyboard.homeKeysScroll^e.shiftKey?e.altey||e.ctrlKey||e.shiftKey||!this.keyboard.applicationCursor?"[H":"OH":(this.keyboard.terminal.scrollHome(),o.Keyboard.KeyActions.CANCEL)},o.Keyboard.KeyMap.prototype.onKeyEnd_=function(e){return!this.keyboard.homeKeysScroll^e.shiftKey?e.altKey||e.ctrlKey||e.shiftKey||!this.keyboard.applicationCursor?"[F":"OF":(this.keyboard.terminal.scrollEnd(),o.Keyboard.KeyActions.CANCEL)},o.Keyboard.KeyMap.prototype.onKeyPageUp_=function(e){return!this.keyboard.pageKeysScroll^e.shiftKey?"[5~":(this.keyboard.terminal.scrollPageUp(),o.Keyboard.KeyActions.CANCEL)},o.Keyboard.KeyMap.prototype.onKeyDel_=function(e){return this.keyboard.altBackspaceIsMetaBackspace&&this.keyboard.altKeyPressed&&!e.altKey?"":"[3~"},o.Keyboard.KeyMap.prototype.onKeyPageDown_=function(e){return!this.keyboard.pageKeysScroll^e.shiftKey?"[6~":(this.keyboard.terminal.scrollPageDown(),o.Keyboard.KeyActions.CANCEL)},o.Keyboard.KeyMap.prototype.onKeyArrowUp_=function(e){return!this.keyboard.applicationCursor&&e.shiftKey?(this.keyboard.terminal.scrollLineUp(),o.Keyboard.KeyActions.CANCEL):e.shiftKey||e.ctrlKey||e.altKey||e.metaKey||!this.keyboard.applicationCursor?"[A":"OA"},o.Keyboard.KeyMap.prototype.onKeyArrowDown_=function(e){return!this.keyboard.applicationCursor&&e.shiftKey?(this.keyboard.terminal.scrollLineDown(),o.Keyboard.KeyActions.CANCEL):e.shiftKey||e.ctrlKey||e.altKey||e.metaKey||!this.keyboard.applicationCursor?"[B":"OB"},o.Keyboard.KeyMap.prototype.onClear_=function(e,t){return this.keyboard.terminal.wipeContents(),o.Keyboard.KeyActions.CANCEL},o.Keyboard.KeyMap.prototype.onCtrlNum_=function(e,t){function r(e){return String.fromCharCode(e.charCodeAt(0)-64)}if(this.keyboard.terminal.passCtrlNumber&&!e.shiftKey)return o.Keyboard.KeyActions.PASS;switch(t.keyCap.substr(0,1)){case"1":return"1";case"2":return r("@");case"3":return r("[");case"4":return r("\\");case"5":return r("]");case"6":return r("^");case"7":return r("_");case"8":return"";case"9":return"9"}},o.Keyboard.KeyMap.prototype.onAltNum_=function(e,t){return this.keyboard.terminal.passAltNumber&&!e.shiftKey?o.Keyboard.KeyActions.PASS:o.Keyboard.KeyActions.DEFAULT},o.Keyboard.KeyMap.prototype.onMetaNum_=function(e,t){return this.keyboard.terminal.passMetaNumber&&!e.shiftKey?o.Keyboard.KeyActions.PASS:o.Keyboard.KeyActions.DEFAULT},o.Keyboard.KeyMap.prototype.onCtrlC_=function(e,t){var r=this.keyboard.terminal.getDocument().getSelection();if(!r.isCollapsed){if(this.keyboard.ctrlCCopy&&!e.shiftKey)return this.keyboard.terminal.clearSelectionAfterCopy&&setTimeout(r.collapseToEnd.bind(r),50),o.Keyboard.KeyActions.PASS;if(!this.keyboard.ctrlCCopy&&e.shiftKey)return this.keyboard.terminal.clearSelectionAfterCopy&&setTimeout(r.collapseToEnd.bind(r),50),this.keyboard.terminal.copySelectionToClipboard(),o.Keyboard.KeyActions.CANCEL}return""},o.Keyboard.KeyMap.prototype.onCtrlN_=function(e,t){return e.shiftKey?(window.open(document.location.href,"","chrome=no,close=yes,resize=yes,scrollbars=yes,minimizable=yes,width="+window.innerWidth+",height="+window.innerHeight),o.Keyboard.KeyActions.CANCEL):""},o.Keyboard.KeyMap.prototype.onCtrlV_=function(e,t){return!e.shiftKey&&this.keyboard.ctrlVPaste||e.shiftKey&&!this.keyboard.ctrlVPaste?this.keyboard.terminal.paste()?o.Keyboard.KeyActions.CANCEL:o.Keyboard.KeyActions.PASS:""},o.Keyboard.KeyMap.prototype.onMetaN_=function(e,t){return e.shiftKey?(window.open(document.location.href,"","chrome=no,close=yes,resize=yes,scrollbars=yes,minimizable=yes,width="+window.outerWidth+",height="+window.outerHeight),o.Keyboard.KeyActions.CANCEL):o.Keyboard.KeyActions.DEFAULT},o.Keyboard.KeyMap.prototype.onMetaC_=function(e,t){var r=this.keyboard.terminal.getDocument();return e.shiftKey||r.getSelection().isCollapsed?t.keyCap.substr(e.shiftKey?1:0,1):(this.keyboard.terminal.clearSelectionAfterCopy&&setTimeout(function(){r.getSelection().collapseToEnd()},50),o.Keyboard.KeyActions.PASS)},o.Keyboard.KeyMap.prototype.onMetaV_=function(e,t){return e.shiftKey?o.Keyboard.KeyActions.PASS:this.keyboard.passMetaV?o.Keyboard.KeyActions.PASS:o.Keyboard.KeyActions.DEFAULT},o.Keyboard.KeyMap.prototype.onPlusMinusZero_=function(e,t){if(!(this.keyboard.ctrlPlusMinusZeroZoom^e.shiftKey))return"-_"==t.keyCap?"":o.Keyboard.KeyActions.CANCEL;if(1!=this.keyboard.terminal.getZoomFactor())return o.Keyboard.KeyActions.PASS;var r=t.keyCap.substr(0,1);if("0"==r)this.keyboard.terminal.setFontSize(0);else{var i=this.keyboard.terminal.getFontSize();"-"==r||"[KP-]"==t.keyCap?i-=1:i+=1,this.keyboard.terminal.setFontSize(i)}return o.Keyboard.KeyActions.CANCEL},o.Keyboard.KeyPattern=function(e){this.wildcardCount=0,this.keyCode=e.keyCode,o.Keyboard.KeyPattern.modifiers.forEach(function(t){this[t]=e[t]||!1,"*"==this[t]&&this.wildcardCount++}.bind(this))},o.Keyboard.KeyPattern.modifiers=["shift","ctrl","alt","meta"],o.Keyboard.KeyPattern.sortCompare=function(e,t){return e.wildcardCountt.wildcardCount?1:0},o.Keyboard.KeyPattern.prototype.match_=function(e,t){if(this.keyCode!=e.keyCode)return!1;var r=!0;return o.Keyboard.KeyPattern.modifiers.forEach(function(i){var o=i in e&&e[i];r&&(t||"*"!=this[i])&&this[i]!=o&&(r=!1)}.bind(this)),r},o.Keyboard.KeyPattern.prototype.matchKeyDown=function(e){return this.match_(e,!1)},o.Keyboard.KeyPattern.prototype.matchKeyPattern=function(e){return this.match_(e,!0)},o.Options=function(e){this.wraparound=!e||e.wraparound,this.reverseWraparound=!!e&&e.reverseWraparound,this.originMode=!!e&&e.originMode,this.autoCarriageReturn=!!e&&e.autoCarriageReturn,this.cursorVisible=!!e&&e.cursorVisible,this.cursorBlink=!!e&&e.cursorBlink,this.insertMode=!!e&&e.insertMode,this.reverseVideo=!!e&&e.reverseVideo,this.bracketedPaste=!!e&&e.bracketedPaste},i.rtdep("hterm.Keyboard.KeyActions"),o.Parser=function(){this.source="",this.pos=0,this.ch=null},o.Parser.prototype.error=function(e){return new Error("Parse error at "+this.pos+": "+e)},o.Parser.prototype.isComplete=function(){return this.pos==this.source.length},o.Parser.prototype.reset=function(e,t){this.source=e,this.pos=t||0,this.ch=e.substr(0,1)},o.Parser.prototype.parseKeySequence=function(){var e={keyCode:null};for(var t in o.Parser.identifiers.modifierKeys)e[o.Parser.identifiers.modifierKeys[t]]=!1;for(;this.pos 'none', else => 'right-alt'\n'none': Disable any AltGr related munging.\n'ctrl-alt': Assume Ctrl+Alt means AltGr.\n'left-alt': Assume left Alt means AltGr.\n'right-alt': Assume right Alt means AltGr.\n"],"alt-backspace-is-meta-backspace":[o.PreferenceManager.categories.Keyboard,!1,"bool","If set, undoes the Chrome OS Alt-Backspace->DEL remap, so that alt-backspace indeed is alt-backspace."],"alt-is-meta":[o.PreferenceManager.categories.Keyboard,!1,"bool","Set whether the alt key acts as a meta key or as a distinct alt key."],"alt-sends-what":[o.PreferenceManager.categories.Keyboard,"escape",["escape","8-bit","browser-key"],"Controls how the alt key is handled.\n\n escape....... Send an ESC prefix.\n 8-bit........ Add 128 to the unshifted character as in xterm.\n browser-key.. Wait for the keypress event and see what the browser \n says. (This won't work well on platforms where the \n browser performs a default action for some alt sequences.)"],"audible-bell-sound":[o.PreferenceManager.categories.Sounds,"lib-resource:hterm/audio/bell","url","URL of the terminal bell sound. Empty string for no audible bell."],"desktop-notification-bell":[o.PreferenceManager.categories.Sounds,!1,"bool",'If true, terminal bells in the background will create a Web Notification. https://www.w3.org/TR/notifications/\n\nDisplaying notifications requires permission from the user. When this option is set to true, hterm will attempt to ask the user for permission if necessary. Note browsers may not show this permission request if it did not originate from a user action.\n\nChrome extensions with the "notifications" permission have permission to display notifications.'],"background-color":[o.PreferenceManager.categories.Appearance,"rgb(16, 16, 16)","color","The background color for text with no other color attributes."],"background-image":[o.PreferenceManager.categories.Appearance,"","string","CSS value of the background image. Empty string for no image.\n\nFor example:\n url(https://goo.gl/anedTK)\n linear-gradient(top bottom, blue, red)"],"background-size":[o.PreferenceManager.categories.Appearance,"","string","CSS value of the background image size. Defaults to none."],"background-position":[o.PreferenceManager.categories.Appearance,"","string","CSS value of the background image position.\n\nFor example:\n 10% 10%\n center"],"backspace-sends-backspace":[o.PreferenceManager.categories.Keyboard,!1,"bool","If true, the backspace should send BS ('\\x08', aka ^H). Otherwise the backspace key should send '\\x7f'."],"character-map-overrides":[o.PreferenceManager.categories.Appearance,null,"value",'This is specified as an object. It is a sparse array, where each property is the character set code and the value is an object that is a sparse array itself. In that sparse array, each property is the received character and the value is the displayed character.\n\nFor example:\n {"0":{"+":"\\u2192",",":"\\u2190","-":"\\u2191",".":"\\u2193", "0":"\\u2588"}}'],"close-on-exit":[o.PreferenceManager.categories.Miscellaneous,!0,"bool","Whether or not to close the window when the command exits."],"cursor-blink":[o.PreferenceManager.categories.Appearance,!1,"bool","Whether or not to blink the cursor by default."],"cursor-blink-cycle":[o.PreferenceManager.categories.Appearance,[1e3,500],"value","The cursor blink rate in milliseconds.\n\nA two element array, the first of which is how long the cursor should be on, second is how long it should be off."],"cursor-color":[o.PreferenceManager.categories.Appearance,"rgba(255, 0, 0, 0.5)","color","The color of the visible cursor."],"color-palette-overrides":[o.PreferenceManager.categories.Appearance,null,"value","Override colors in the default palette.\n\nThis can be specified as an array or an object. If specified as an object it is assumed to be a sparse array, where each property is a numeric index into the color palette.\n\nValues can be specified as almost any css color value. This includes #RGB, #RRGGBB, rgb(...), rgba(...), and any color names that are also part of the stock X11 rgb.txt file.\n\nYou can use 'null' to specify that the default value should be not be changed. This is useful for skipping a small number of indices when the value is specified as an array."],"copy-on-select":[o.PreferenceManager.categories.CopyPaste,!0,"bool","Automatically copy mouse selection to the clipboard."],"use-default-window-copy":[o.PreferenceManager.categories.CopyPaste,!1,"bool","Whether to use the default window copy behavior"],"clear-selection-after-copy":[o.PreferenceManager.categories.CopyPaste,!0,"bool","Whether to clear the selection after copying."],"ctrl-plus-minus-zero-zoom":[o.PreferenceManager.categories.Keyboard,!0,"bool","If true, Ctrl-Plus/Minus/Zero controls zoom.\nIf false, Ctrl-Shift-Plus/Minus/Zero controls zoom, Ctrl-Minus sends ^_, Ctrl-Plus/Zero do nothing."],"ctrl-c-copy":[o.PreferenceManager.categories.Keyboard,!1,"bool","Ctrl+C copies if true, send ^C to host if false.\nCtrl+Shift+C sends ^C to host if true, copies if false."],"ctrl-v-paste":[o.PreferenceManager.categories.Keyboard,!1,"bool","Ctrl+V pastes if true, send ^V to host if false.\nCtrl+Shift+V sends ^V to host if true, pastes if false."],"east-asian-ambiguous-as-two-column":[o.PreferenceManager.categories.Keyboard,!1,"bool","Set whether East Asian Ambiguous characters have two column width."],"enable-8-bit-control":[o.PreferenceManager.categories.Keyboard,!1,"bool","True to enable 8-bit control characters, false to ignore them.\n\nWe'll respect the two-byte versions of these control characters regardless of this setting."],"enable-bold":[o.PreferenceManager.categories.Appearance,null,"tristate","True if we should use bold weight font for text with the bold/bright attribute. False to use the normal weight font. Null to autodetect."],"enable-bold-as-bright":[o.PreferenceManager.categories.Appearance,!0,"bool","True if we should use bright colors (8-15 on a 16 color palette) for any text with the bold attribute. False otherwise."],"enable-blink":[o.PreferenceManager.categories.Appearance,!0,"bool","True if we should respect the blink attribute. False to ignore it. "],"enable-clipboard-notice":[o.PreferenceManager.categories.CopyPaste,!0,"bool","Show a message in the terminal when the host writes to the clipboard."],"enable-clipboard-write":[o.PreferenceManager.categories.CopyPaste,!0,"bool","Allow the host to write directly to the system clipboard."],"enable-dec12":[o.PreferenceManager.categories.Miscellaneous,!1,"bool","Respect the host's attempt to change the cursor blink status using DEC Private Mode 12."],environment:[o.PreferenceManager.categories.Miscellaneous,{TERM:"xterm-256color"},"value","The default environment variables, as an object."],"font-family":[o.PreferenceManager.categories.Appearance,'"DejaVu Sans Mono", "Everson Mono", FreeMono, "Menlo", "Terminal", monospace',"string","Default font family for the terminal text."],"font-size":[o.PreferenceManager.categories.Appearance,15,"int","The default font size in pixels."],"font-smoothing":[o.PreferenceManager.categories.Appearance,"antialiased","string","CSS font-smoothing property."],"foreground-color":[o.PreferenceManager.categories.Appearance,"rgb(240, 240, 240)","color","The foreground color for text with no other color attributes."],"home-keys-scroll":[o.PreferenceManager.categories.Keyboard,!1,"bool","If true, home/end will control the terminal scrollbar and shift home/end will send the VT keycodes. If false then home/end sends VT codes and shift home/end scrolls."],keybindings:[o.PreferenceManager.categories.Keyboard,null,"value",'A map of key sequence to key actions. Key sequences include zero or more modifier keys followed by a key code. Key codes can be decimal or hexadecimal numbers, or a key identifier. Key actions can be specified a string to send to the host, or an action identifier. For a full explanation of the format, see https://goo.gl/LWRndr.\n\nSample keybindings:\n{\n "Ctrl-Alt-K": "clearScrollback",\n "Ctrl-Shift-L": "PASS",\n "Ctrl-H": "\'HELLO\\n\'"\n}'],"max-string-sequence":[o.PreferenceManager.categories.Encoding,1e5,"int","Max length of a DCS, OSC, PM, or APS sequence before we give up and ignore the code."],"media-keys-are-fkeys":[o.PreferenceManager.categories.Keyboard,!1,"bool","If true, convert media keys to their Fkey equivalent. If false, let the browser handle the keys."],"meta-sends-escape":[o.PreferenceManager.categories.Keyboard,!0,"bool","Set whether the meta key sends a leading escape or not."],"mouse-right-click-paste":[o.PreferenceManager.categories.CopyPaste,!0,"bool",'Paste on right mouse button clicks.\n\nThis option is activate independent of the "mouse-paste-button" setting.\n\nNote: This will handle left & right handed mice correctly.'],"mouse-paste-button":[o.PreferenceManager.categories.CopyPaste,null,[null,0,1,2,3,4,5,6],"Mouse paste button, or null to autodetect.\n\nFor autodetect, we'll use the middle mouse button for non-X11 platforms (including Chrome OS). On X11, we'll use the right mouse button (since the native window manager should paste via the middle mouse button).\n\n0 == left (primary) button.\n1 == middle (auxiliary) button.\n2 == right (secondary) button.\n\nThis option is activate independent of the \"mouse-right-click-paste\" setting.\n\nNote: This will handle left & right handed mice correctly."],"word-break-match-left":[o.PreferenceManager.categories.CopyPaste,"[^\\s\\[\\](){}<>\"'\\^!@#$%&*,;:`]","string",'Regular expression to halt matching to the left (start) of a selection.\n\nNormally this is a character class to reject specific characters.\nWe allow "~" and "." by default as paths frequently start with those.'],"word-break-match-right":[o.PreferenceManager.categories.CopyPaste,"[^\\s\\[\\](){}<>\"'\\^!@#$%&*,;:~.`]","string","Regular expression to halt matching to the right (end) of a selection.\n\nNormally this is a character class to reject specific characters."],"word-break-match-middle":[o.PreferenceManager.categories.CopyPaste,"[^\\s\\[\\](){}<>\"'\\^]*","string","Regular expression to match all the characters in the middle.\n\nNormally this is a character class to reject specific characters.\n\nUsed to expand the selection surrounding the starting point."],"page-keys-scroll":[o.PreferenceManager.categories.Keyboard,!1,"bool","If true, page up/down will control the terminal scrollbar and shift page up/down will send the VT keycodes. If false then page up/down sends VT codes and shift page up/down scrolls."],"pass-alt-number":[o.PreferenceManager.categories.Keyboard,null,"tristate","Set whether we should pass Alt-1..9 to the browser.\n\nThis is handy when running hterm in a browser tab, so that you don't lose Chrome's \"switch to tab\" keyboard accelerators. When not running in a tab it's better to send these keys to the host so they can be used in vim or emacs.\n\nIf true, Alt-1..9 will be handled by the browser. If false, Alt-1..9 will be sent to the host. If null, autodetect based on browser platform and window type."],"pass-ctrl-number":[o.PreferenceManager.categories.Keyboard,null,"tristate","Set whether we should pass Ctrl-1..9 to the browser.\n\nThis is handy when running hterm in a browser tab, so that you don't lose Chrome's \"switch to tab\" keyboard accelerators. When not running in a tab it's better to send these keys to the host so they can be used in vim or emacs.\n\nIf true, Ctrl-1..9 will be handled by the browser. If false, Ctrl-1..9 will be sent to the host. If null, autodetect based on browser platform and window type."],"pass-meta-number":[o.PreferenceManager.categories.Keyboard,null,"tristate","Set whether we should pass Meta-1..9 to the browser.\n\nThis is handy when running hterm in a browser tab, so that you don't lose Chrome's \"switch to tab\" keyboard accelerators. When not running in a tab it's better to send these keys to the host so they can be used in vim or emacs.\n\nIf true, Meta-1..9 will be handled by the browser. If false, Meta-1..9 will be sent to the host. If null, autodetect based on browser platform and window type."],"pass-meta-v":[o.PreferenceManager.categories.Keyboard,!0,"bool","Set whether meta-V gets passed to host."],"receive-encoding":[o.PreferenceManager.categories.Encoding,"utf-8",["utf-8","raw"],"Set the expected encoding for data received from the host.\n\nValid values are 'utf-8' and 'raw'."],"scroll-on-keystroke":[o.PreferenceManager.categories.Scrolling,!0,"bool","If true, scroll to the bottom on any keystroke."],"scroll-on-output":[o.PreferenceManager.categories.Scrolling,!1,"bool","If true, scroll to the bottom on terminal output."],"scrollbar-visible":[o.PreferenceManager.categories.Scrolling,!0,"bool","The vertical scrollbar mode."],"scroll-wheel-may-send-arrow-keys":[o.PreferenceManager.categories.Scrolling,!1,"bool","When using the alternative screen buffer, and DECCKM (Application Cursor Keys) is active, mouse wheel scroll events will emulate arrow keys.\n\nIt can be temporarily disabled by holding the shift key.\n\nThis frequently comes up when using pagers (less) or reading man pages or text editors (vi/nano) or using screen/tmux."],"scroll-wheel-move-multiplier":[o.PreferenceManager.categories.Scrolling,1,"int","The multiplier for the pixel delta in wheel events caused by the scroll wheel. Alters how fast the page scrolls."],"send-encoding":[o.PreferenceManager.categories.Encoding,"utf-8",["utf-8","raw"],"Set the encoding for data sent to host."],"terminal-encoding":[o.PreferenceManager.categories.Encoding,"iso-2022",["iso-2022","utf-8","utf-8-locked"],"The default terminal encoding (DOCS).\n\nISO-2022 enables character map translations (like graphics maps).\nUTF-8 disables support for those.\n\nThe locked variant means the encoding cannot be changed at runtime via terminal escape sequences.\n\nYou should stick with UTF-8 unless you notice broken rendering with legacy applications."],"shift-insert-paste":[o.PreferenceManager.categories.Keyboard,!0,"bool","Shift + Insert pastes if true, sent to host if false."],"user-css":[o.PreferenceManager.categories.Appearance,"","url","URL of user stylesheet to include in the terminal document."],"user-css-text":[o.PreferenceManager.categories.Appearance,"","multiline-string","Custom CSS text for styling the terminal."]},o.PreferenceManager.prototype=Object.create(i.PreferenceManager.prototype),o.PreferenceManager.constructor=o.PreferenceManager,o.PubSub=function(){this.observers_={}},o.PubSub.addBehavior=function(e){var t=new o.PubSub;for(var r in o.PubSub.prototype)e[r]=o.PubSub.prototype[r].bind(t)},o.PubSub.prototype.subscribe=function(e,t){e in this.observers_||(this.observers_[e]=[]),this.observers_[e].push(t)},o.PubSub.prototype.unsubscribe=function(e,t){var r=this.observers_[e];if(!r)throw"Invalid subject: "+e;var i=r.indexOf(t);if(i<0)throw"Not subscribed: "+e;r.splice(i,1)},o.PubSub.prototype.publish=function(e,t,r){function i(e){e=e&&this.setCursorPosition(this.cursorPosition.row,e-1)},o.Screen.prototype.shiftRow=function(){return this.shiftRows(1)[0]},o.Screen.prototype.shiftRows=function(e){return this.rowsArray.splice(0,e)},o.Screen.prototype.unshiftRow=function(e){this.rowsArray.splice(0,0,e)},o.Screen.prototype.unshiftRows=function(e){this.rowsArray.unshift.apply(this.rowsArray,e)},o.Screen.prototype.popRow=function(){return this.popRows(1)[0]},o.Screen.prototype.popRows=function(e){return this.rowsArray.splice(this.rowsArray.length-e,e)},o.Screen.prototype.pushRow=function(e){this.rowsArray.push(e)},o.Screen.prototype.pushRows=function(e){e.push.apply(this.rowsArray,e)},o.Screen.prototype.insertRow=function(e,t){this.rowsArray.splice(e,0,t)},o.Screen.prototype.insertRows=function(e,t){for(var r=0;r=this.rowsArray.length?(console.error("Row out of bounds: "+e),e=this.rowsArray.length-1):e<0&&(console.error("Row out of bounds: "+e),e=0),t>=this.columnCount_?(console.error("Column out of bounds: "+t),t=this.columnCount_-1):t<0&&(console.error("Column out of bounds: "+t),t=0),this.cursorPosition.overflow=!1;var r=this.rowsArray[e],i=r.firstChild;i||(i=r.ownerDocument.createTextNode(""),r.appendChild(i));var s=0;for(r==this.cursorRowNode_?t>=this.cursorPosition.column-this.cursorOffset_&&(i=this.cursorNode_,s=this.cursorPosition.column-this.cursorOffset_):this.cursorRowNode_=r,this.cursorPosition.move(e,t);i;){var n=t-s,a=o.TextAttributes.nodeWidth(i);if(!i.nextSibling||a>n)return this.cursorNode_=i,void(this.cursorOffset_=n);s+=a,i=i.nextSibling}}else console.warn("Attempt to set cursor position on empty screen.")},o.Screen.prototype.syncSelectionCaret=function(e){try{e.collapse(this.cursorNode_,this.cursorOffset_)}catch(e){}},o.Screen.prototype.splitNode_=function(e,t){var r=e.cloneNode(!1),s=e.textContent;e.textContent=o.TextAttributes.nodeSubstr(e,0,t),r.textContent=i.wc.substr(s,t),r.textContent&&e.parentNode.insertBefore(r,e.nextSibling),e.textContent||e.parentNode.removeChild(e)},o.Screen.prototype.maybeClipCurrentRow=function(){var e=o.TextAttributes.nodeWidth(this.cursorRowNode_);if(e<=this.columnCount_)this.cursorPosition.column>=this.columnCount_&&(this.setCursorPosition(this.cursorPosition.row,this.columnCount_-1),this.cursorPosition.overflow=!0);else{var t=this.cursorPosition.column;this.setCursorPosition(this.cursorPosition.row,this.columnCount_-1),e=o.TextAttributes.nodeWidth(this.cursorNode_),this.cursorOffset_o.TextAttributes.nodeWidth(e);){if(!e.hasAttribute("line-overflow")||!e.nextSibling)return-1;t-=o.TextAttributes.nodeWidth(e),e=e.nextSibling}return this.getNodeAndOffsetWithinRow_(e,t)},o.Screen.prototype.getNodeAndOffsetWithinRow_=function(e,t){for(var r=0;ro)){var p=i.wc.substring(h,o,i.wc.strWidth(h)),f=new RegExp("^"+l+a),g=p.match(f);if(g){var m=o+i.wc.strWidth(g[0]);-1==m||ms.rowIndex)t();else if(i.focusNode==i.anchorNode)i.anchorOffset=this.lastRowCount_},o.ScrollPort.prototype.drawTopFold_=function(e){if(!this.selection.startRow||this.selection.startRow.rowIndex>=e)this.rowNodes_.firstChild!=this.topFold_&&this.rowNodes_.insertBefore(this.topFold_,this.rowNodes_.firstChild);else{if(!this.selection.isMultiline||this.selection.endRow.rowIndex>=e)this.selection.startRow.nextSibling!=this.topFold_&&this.rowNodes_.insertBefore(this.topFold_,this.selection.startRow.nextSibling);else for(this.selection.endRow.nextSibling!=this.topFold_&&this.rowNodes_.insertBefore(this.topFold_,this.selection.endRow.nextSibling);this.selection.startRow.nextSibling!=this.selection.endRow;)this.rowNodes_.removeChild(this.selection.startRow.nextSibling);for(;this.rowNodes_.firstChild!=this.selection.startRow;)this.rowNodes_.removeChild(this.rowNodes_.firstChild)}},o.ScrollPort.prototype.drawBottomFold_=function(e){if(!this.selection.endRow||this.selection.endRow.rowIndex<=e)this.rowNodes_.lastChild!=this.bottomFold_&&this.rowNodes_.appendChild(this.bottomFold_);else{if(!this.selection.isMultiline||this.selection.startRow.rowIndex<=e)this.bottomFold_.nextSibling!=this.selection.endRow&&this.rowNodes_.insertBefore(this.bottomFold_,this.selection.endRow);else for(this.bottomFold_.nextSibling!=this.selection.startRow&&this.rowNodes_.insertBefore(this.bottomFold_,this.selection.startRow);this.selection.startRow.nextSibling!=this.selection.endRow;)this.rowNodes_.removeChild(this.selection.startRow.nextSibling);for(;this.rowNodes_.lastChild!=this.selection.endRow;)this.rowNodes_.removeChild(this.rowNodes_.lastChild)}},o.ScrollPort.prototype.drawVisibleRows_=function(e,t){function r(e,t){for(;e!=t;){if(!e)throw"Did not encounter target node";if(e==i.bottomFold_)throw"Encountered bottom fold before target node";var r=e;e=e.nextSibling,r.parentNode.removeChild(r)}}for(var i=this,o=this.selection.startRow,s=this.selection.endRow,n=this.bottomFold_,a=this.topFold_.nextSibling,l=Math.min(this.visibleRowCount,this.rowProvider_.getRowCount()),h=0;h=this.lastRowCount_;var t=e*this.characterSize.height+this.visibleRowTopMargin,r=this.getScrollMax_();t>r&&(t=r),this.screen_.scrollTop!=t&&(this.screen_.scrollTop=t,this.scheduleRedraw())},o.ScrollPort.prototype.scrollRowToBottom=function(e){this.syncScrollHeight(),this.isScrolledEnd=e+this.visibleRowCount>=this.lastRowCount_;var t=e*this.characterSize.height+this.visibleRowTopMargin+this.visibleRowBottomMargin;(t-=this.visibleRowCount*this.characterSize.height)<0&&(t=0),this.screen_.scrollTop!=t&&(this.screen_.scrollTop=t)},o.ScrollPort.prototype.getTopRowIndex=function(){return Math.round(this.screen_.scrollTop/this.characterSize.height)},o.ScrollPort.prototype.getBottomRowIndex=function(e){return e+this.visibleRowCount-1},o.ScrollPort.prototype.onScroll_=function(e){var t=this.getScreenSize();t.width==this.lastScreenWidth_&&t.height==this.lastScreenHeight_?(this.redraw_(),this.publish("scroll",{scrollPort:this})):this.resize()},o.ScrollPort.prototype.onScrollWheel=function(e){},o.ScrollPort.prototype.onScrollWheel_=function(e){if(this.onScrollWheel(e),!e.defaultPrevented){var t=this.scrollWheelDelta(e),r=this.screen_.scrollTop-t;r<0&&(r=0);var i=this.getScrollMax_();r>i&&(r=i),r!=this.screen_.scrollTop&&(this.screen_.scrollTop=r,e.preventDefault())}},o.ScrollPort.prototype.scrollWheelDelta=function(e){var t;switch(e.deltaMode){case WheelEvent.DOM_DELTA_PIXEL:t=e.deltaY*this.scrollWheelMultiplier_;break;case WheelEvent.DOM_DELTA_LINE:t=e.deltaY*this.characterSize.height;break;case WheelEvent.DOM_DELTA_PAGE:t=e.deltaY*this.characterSize.height*this.screen_.getHeight()}return-1*t},o.ScrollPort.prototype.onTouch=function(e){},o.ScrollPort.prototype.onTouch_=function(e){if(this.onTouch(e),!e.defaultPrevented){var t,r,i=function(e){return{id:e.identifier,y:e.clientY,x:e.clientX}};switch(e.type){case"touchstart":for(t=0;tn&&(s=n),s!=this.screen_.scrollTop&&(this.screen_.scrollTop=s)}e.preventDefault()}},o.ScrollPort.prototype.onResize_=function(e){this.syncCharacterSize(),this.resize()},o.ScrollPort.prototype.onCopy=function(e){},o.ScrollPort.prototype.onCopy_=function(e){if(this.onCopy(e),!e.defaultPrevented&&(this.resetSelectBags_(),this.selection.sync(),this.selection.startRow&&!(this.selection.endRow.rowIndex-this.selection.startRow.rowIndex<2))){var t=this.getTopRowIndex(),r=this.getBottomRowIndex(t);if(this.selection.startRow.rowIndexr){var o;o=this.selection.startRow.rowIndex>r?this.selection.startRow.rowIndex+1:this.bottomFold_.previousSibling.rowIndex+1,this.bottomSelectBag_.textContent=this.rowProvider_.getRowsText(o,this.selection.endRow.rowIndex),this.rowNodes_.insertBefore(this.bottomSelectBag_,this.selection.endRow)}}},o.ScrollPort.prototype.onBodyKeyDown_=function(e){if(this.ctrlVPaste){var t=String.fromCharCode(e.which).toLowerCase();(e.ctrlKey||e.metaKey)&&"v"==t&&this.pasteTarget_.focus()}},o.ScrollPort.prototype.onPaste_=function(e){this.pasteTarget_.focus();var t=this;setTimeout(function(){t.publish("paste",{text:t.pasteTarget_.value}),t.pasteTarget_.value="",t.screen_.focus()},0)},o.ScrollPort.prototype.handlePasteTargetTextInput_=function(e){e.stopPropagation()},o.ScrollPort.prototype.setScrollbarVisible=function(e){this.screen_.style.overflowY=e?"scroll":"hidden"},o.ScrollPort.prototype.setScrollWheelMoveMultipler=function(e){this.scrollWheelMultiplier_=e},i.rtdep("lib.colors","lib.PreferenceManager","lib.resource","lib.wc","lib.f","hterm.Keyboard","hterm.Options","hterm.PreferenceManager","hterm.Screen","hterm.ScrollPort","hterm.Size","hterm.TextAttributes","hterm.VT"),o.Terminal=function(e){this.profileId_=null,this.primaryScreen_=new o.Screen,this.alternateScreen_=new o.Screen,this.screen_=this.primaryScreen_,this.screenSize=new o.Size(0,0),this.scrollPort_=new o.ScrollPort(this),this.scrollPort_.subscribe("resize",this.onResize_.bind(this)),this.scrollPort_.subscribe("scroll",this.onScroll_.bind(this)),this.scrollPort_.subscribe("paste",this.onPaste_.bind(this)),this.scrollPort_.onCopy=this.onCopy_.bind(this),this.div_=null,this.document_=window.document,this.scrollbackRows_=[],this.tabStops_=[],this.defaultTabStops=!0,this.vtScrollTop_=null,this.vtScrollBottom_=null,this.cursorNode_=null,this.cursorShape_=o.Terminal.cursorShape.BLOCK,this.cursorColor_=null,this.cursorBlinkCycle_=[100,100],this.myOnCursorBlink_=this.onCursorBlink_.bind(this),this.backgroundColor_=null,this.foregroundColor_=null,this.scrollOnOutput_=null,this.scrollOnKeystroke_=null,this.scrollWheelArrowKeys_=null,this.defeatMouseReports_=!1,this.bellAudio_=this.document_.createElement("audio"),this.bellAudio_.id="hterm:bell-audio",this.bellAudio_.setAttribute("preload","auto"),this.bellNotificationList_=[],this.desktopNotificationBell_=!1,this.savedOptions_={},this.options_=new o.Options,this.timeouts_={},this.vt=new o.VT(this),this.keyboard=new o.Keyboard(this),this.io=new o.Terminal.IO(this),this.enableMouseDragScroll=!0,this.copyOnSelect=null,this.mouseRightClickPaste=null,this.mousePasteButton=null,this.useDefaultWindowCopy=!1,this.clearSelectionAfterCopy=!0,this.realizeSize_(80,24),this.setDefaultTabStops(),this.setProfile(e||"default",function(){this.onTerminalReady()}.bind(this))},o.Terminal.cursorShape={BLOCK:"BLOCK",BEAM:"BEAM",UNDERLINE:"UNDERLINE"},o.Terminal.prototype.onTerminalReady=function(){},o.Terminal.prototype.tabWidth=8,o.Terminal.prototype.setProfile=function(e,t){this.profileId_=e.replace(/\//g,"");var r=this;this.prefs_&&this.prefs_.deactivate(),this.prefs_=new o.PreferenceManager(this.profileId_),this.prefs_.addObservers(null,{"alt-gr-mode":function(e){e=null==e?"en-us"==navigator.language.toLowerCase()?"none":"right-alt":"string"==typeof e?e.toLowerCase():"none",/^(none|ctrl-alt|left-alt|right-alt)$/.test(e)||(e="none"),r.keyboard.altGrMode=e},"alt-backspace-is-meta-backspace":function(e){r.keyboard.altBackspaceIsMetaBackspace=e},"alt-is-meta":function(e){r.keyboard.altIsMeta=e},"alt-sends-what":function(e){/^(escape|8-bit|browser-key)$/.test(e)||(e="escape"),r.keyboard.altSendsWhat=e},"audible-bell-sound":function(e){var t=e.match(/^lib-resource:(\S+)/);t?r.bellAudio_.setAttribute("src",i.resource.getDataUrl(t[1])):r.bellAudio_.setAttribute("src",e)},"desktop-notification-bell":function(e){e&&Notification?(r.desktopNotificationBell_="granted"===Notification.permission,r.desktopNotificationBell_||console.warn("desktop-notification-bell is true but we do not have permission to display notifications.")):r.desktopNotificationBell_=!1},"background-color":function(e){r.setBackgroundColor(e)},"background-image":function(e){r.scrollPort_.setBackgroundImage(e)},"background-size":function(e){r.scrollPort_.setBackgroundSize(e)},"background-position":function(e){r.scrollPort_.setBackgroundPosition(e)},"backspace-sends-backspace":function(e){r.keyboard.backspaceSendsBackspace=e},"character-map-overrides":function(e){null==e||e instanceof Object?(r.vt.characterMaps.reset(),r.vt.characterMaps.setOverrides(e)):console.warn("Preference character-map-modifications is not an object: "+e)},"cursor-blink":function(e){r.setCursorBlink(!!e)},"cursor-blink-cycle":function(e){e instanceof Array&&"number"==typeof e[0]&&"number"==typeof e[1]?r.cursorBlinkCycle_=e:r.cursorBlinkCycle_="number"==typeof e?[e,e]:[100,100]},"cursor-color":function(e){r.setCursorColor(e)},"color-palette-overrides":function(e){if(null==e||e instanceof Object||e instanceof Array){if(i.colors.colorPalette=i.colors.stockColorPalette.concat(),e)for(var t in e){var o=parseInt(t);if(isNaN(o)||o<0||o>255)console.log("Invalid value in palette: "+t+": "+e[t]);else if(e[o]){var s=i.colors.normalizeCSS(e[o]);s&&(i.colors.colorPalette[o]=s)}}r.primaryScreen_.textAttributes.resetColorPalette(),r.alternateScreen_.textAttributes.resetColorPalette()}else console.warn("Preference color-palette-overrides is not an array or object: "+e)},"copy-on-select":function(e){r.copyOnSelect=!!e},"use-default-window-copy":function(e){r.useDefaultWindowCopy=!!e},"clear-selection-after-copy":function(e){r.clearSelectionAfterCopy=!!e},"ctrl-plus-minus-zero-zoom":function(e){r.keyboard.ctrlPlusMinusZeroZoom=e},"ctrl-c-copy":function(e){r.keyboard.ctrlCCopy=e},"ctrl-v-paste":function(e){r.keyboard.ctrlVPaste=e,r.scrollPort_.setCtrlVPaste(e)},"east-asian-ambiguous-as-two-column":function(e){i.wc.regardCjkAmbiguous=e},"enable-8-bit-control":function(e){r.vt.enable8BitControl=!!e},"enable-bold":function(e){r.syncBoldSafeState()},"enable-bold-as-bright":function(e){r.primaryScreen_.textAttributes.enableBoldAsBright=!!e,r.alternateScreen_.textAttributes.enableBoldAsBright=!!e},"enable-blink":function(e){r.syncBlinkState()},"enable-clipboard-write":function(e){r.vt.enableClipboardWrite=!!e},"enable-dec12":function(e){r.vt.enableDec12=!!e},"font-family":function(e){r.syncFontFamily()},"font-size":function(e){r.setFontSize(e)},"font-smoothing":function(e){r.syncFontFamily()},"foreground-color":function(e){r.setForegroundColor(e)},"home-keys-scroll":function(e){r.keyboard.homeKeysScroll=e},keybindings:function(e){if(r.keyboard.bindings.clear(),e)if(e instanceof Object)try{r.keyboard.bindings.addBindings(e)}catch(e){console.error("Error in keybindings preference: "+e)}else console.error("Error in keybindings preference: Expected object")},"max-string-sequence":function(e){r.vt.maxStringSequence=e},"media-keys-are-fkeys":function(e){r.keyboard.mediaKeysAreFKeys=e},"meta-sends-escape":function(e){r.keyboard.metaSendsEscape=e},"mouse-right-click-paste":function(e){r.mouseRightClickPaste=e},"mouse-paste-button":function(e){r.syncMousePasteButton()},"page-keys-scroll":function(e){r.keyboard.pageKeysScroll=e},"pass-alt-number":function(e){null==e&&(e=!window.navigator.userAgent.match(/Mac OS X/)&&"popup"!=o.windowType),r.passAltNumber=e},"pass-ctrl-number":function(e){null==e&&(e=!window.navigator.userAgent.match(/Mac OS X/)&&"popup"!=o.windowType),r.passCtrlNumber=e},"pass-meta-number":function(e){null==e&&(e=window.navigator.userAgent.match(/Mac OS X/)&&"popup"!=o.windowType),r.passMetaNumber=e},"pass-meta-v":function(e){r.keyboard.passMetaV=e},"receive-encoding":function(e){/^(utf-8|raw)$/.test(e)||(console.warn('Invalid value for "receive-encoding": '+e),e="utf-8"),r.vt.characterEncoding=e},"scroll-on-keystroke":function(e){r.scrollOnKeystroke_=e},"scroll-on-output":function(e){r.scrollOnOutput_=e},"scrollbar-visible":function(e){r.setScrollbarVisible(e)},"scroll-wheel-may-send-arrow-keys":function(e){r.scrollWheelArrowKeys_=e},"scroll-wheel-move-multiplier":function(e){r.setScrollWheelMoveMultipler(e)},"send-encoding":function(e){/^(utf-8|raw)$/.test(e)||(console.warn('Invalid value for "send-encoding": '+e),e="utf-8"),r.keyboard.characterEncoding=e},"shift-insert-paste":function(e){r.keyboard.shiftInsertPaste=e},"terminal-encoding":function(e){r.vt.setEncoding(e)},"user-css":function(e){r.scrollPort_.setUserCssUrl(e)},"user-css-text":function(e){r.scrollPort_.setUserCssText(e)},"word-break-match-left":function(e){r.primaryScreen_.wordBreakMatchLeft=e,r.alternateScreen_.wordBreakMatchLeft=e},"word-break-match-right":function(e){r.primaryScreen_.wordBreakMatchRight=e,r.alternateScreen_.wordBreakMatchRight=e},"word-break-match-middle":function(e){r.primaryScreen_.wordBreakMatchMiddle=e,r.alternateScreen_.wordBreakMatchMiddle=e}}),this.prefs_.readStorage(function(){this.prefs_.notifyAll(),t&&t()}.bind(this))},o.Terminal.prototype.getPrefs=function(){return this.prefs_},o.Terminal.prototype.setBracketedPaste=function(e){this.options_.bracketedPaste=e},o.Terminal.prototype.setCursorColor=function(e){this.cursorColor_=e,this.cursorNode_.style.backgroundColor=e,this.cursorNode_.style.borderColor=e},o.Terminal.prototype.getCursorColor=function(){return this.cursorColor_},o.Terminal.prototype.setSelectionEnabled=function(e){this.enableMouseDragScroll=e},o.Terminal.prototype.setBackgroundColor=function(e){this.backgroundColor_=i.colors.normalizeCSS(e),this.primaryScreen_.textAttributes.setDefaults(this.foregroundColor_,this.backgroundColor_),this.alternateScreen_.textAttributes.setDefaults(this.foregroundColor_,this.backgroundColor_),this.scrollPort_.setBackgroundColor(e)},o.Terminal.prototype.getBackgroundColor=function(){return this.backgroundColor_},o.Terminal.prototype.setForegroundColor=function(e){this.foregroundColor_=i.colors.normalizeCSS(e),this.primaryScreen_.textAttributes.setDefaults(this.foregroundColor_,this.backgroundColor_),this.alternateScreen_.textAttributes.setDefaults(this.foregroundColor_,this.backgroundColor_),this.scrollPort_.setForegroundColor(e)},o.Terminal.prototype.getForegroundColor=function(){return this.foregroundColor_},o.Terminal.prototype.runCommandClass=function(e,t){var r=this.prefs_.get("environment");"object"==typeof r&&null!=r||(r={});var i=this;this.command=new e({argString:t||"",io:this.io.push(),environment:r,onExit:function(e){i.io.pop(),i.uninstallKeyboard(),i.prefs_.get("close-on-exit")&&window.close()}}),this.installKeyboard(),this.command.run()},o.Terminal.prototype.isPrimaryScreen=function(){return this.screen_==this.primaryScreen_},o.Terminal.prototype.installKeyboard=function(){this.keyboard.installKeyboard(this.scrollPort_.getDocument().body)},o.Terminal.prototype.uninstallKeyboard=function(){this.keyboard.installKeyboard(null)},o.Terminal.prototype.setCssVar=function(e,t,r="--hterm-"){this.document_.documentElement.style.setProperty(`${r}${e}`,t)},o.Terminal.prototype.setFontSize=function(e){0===e&&(e=this.prefs_.get("font-size")),this.scrollPort_.setFontSize(e),this.setCssVar("charsize-width",this.scrollPort_.characterSize.width+"px"),this.setCssVar("charsize-height",this.scrollPort_.characterSize.height+"px")},o.Terminal.prototype.getFontSize=function(){return this.scrollPort_.getFontSize()},o.Terminal.prototype.getFontFamily=function(){return this.scrollPort_.getFontFamily()},o.Terminal.prototype.syncFontFamily=function(){this.scrollPort_.setFontFamily(this.prefs_.get("font-family"),this.prefs_.get("font-smoothing")),this.syncBoldSafeState()},o.Terminal.prototype.syncMousePasteButton=function(){var e=this.prefs_.get("mouse-paste-button");if("number"!=typeof e){var t=navigator.userAgent.match(/\(X11;\s+(\S+)/);t&&"CrOS"!=t[1]?this.mousePasteButton=2:this.mousePasteButton=1}else this.mousePasteButton=e},o.Terminal.prototype.syncBoldSafeState=function(){var e=this.prefs_.get("enable-bold");if(null!==e)return this.primaryScreen_.textAttributes.enableBold=e,void(this.alternateScreen_.textAttributes.enableBold=e);var t=this.scrollPort_.measureCharacterSize(),r=this.scrollPort_.measureCharacterSize("bold"),i=t.equals(r);i||console.warn("Bold characters disabled: Size of bold weight differs from normal. Font family is: "+this.scrollPort_.getFontFamily()),this.primaryScreen_.textAttributes.enableBold=i,this.alternateScreen_.textAttributes.enableBold=i},o.Terminal.prototype.syncBlinkState=function(){this.setCssVar("node-duration",this.prefs_.get("enable-blink")?"0.7s":"0")},o.Terminal.prototype.syncMouseStyle=function(){this.setCssVar("mouse-cursor-style",this.vt.mouseReport==this.vt.MOUSE_REPORT_DISABLED?"var(--hterm-mouse-cursor-text)":"var(--hterm-mouse-cursor-pointer)")},o.Terminal.prototype.saveCursor=function(){return this.screen_.cursorPosition.clone()},o.Terminal.prototype.getTextAttributes=function(){return this.screen_.textAttributes},o.Terminal.prototype.setTextAttributes=function(e){this.screen_.textAttributes=e},o.Terminal.prototype.getZoomFactor=function(){return this.scrollPort_.characterSize.zoomFactor},o.Terminal.prototype.setWindowTitle=function(e){window.document.title=e},o.Terminal.prototype.restoreCursor=function(e){var t=i.f.clamp(e.row,0,this.screenSize.height-1),r=i.f.clamp(e.column,0,this.screenSize.width-1);this.screen_.setCursorPosition(t,r),(e.column>r||e.column==r&&e.overflow)&&(this.screen_.cursorPosition.overflow=!0)},o.Terminal.prototype.clearCursorOverflow=function(){this.screen_.cursorPosition.overflow=!1},o.Terminal.prototype.setCursorShape=function(e){this.cursorShape_=e,this.restyleCursor_()},o.Terminal.prototype.getCursorShape=function(){return this.cursorShape_},o.Terminal.prototype.setWidth=function(e){null!=e?(this.div_.style.width=Math.ceil(this.scrollPort_.characterSize.width*e+this.scrollPort_.currentScrollbarWidthPx)+"px",this.realizeSize_(e,this.screenSize.height),this.scheduleSyncCursorPosition_()):this.div_.style.width="100%"},o.Terminal.prototype.setHeight=function(e){null!=e?(this.div_.style.height=this.scrollPort_.characterSize.height*e+"px",this.realizeSize_(this.screenSize.width,e),this.scheduleSyncCursorPosition_()):this.div_.style.height="100%"},o.Terminal.prototype.realizeSize_=function(e,t){e!=this.screenSize.width&&this.realizeWidth_(e),t!=this.screenSize.height&&this.realizeHeight_(t),this.io.onTerminalResize_(e,t)},o.Terminal.prototype.realizeWidth_=function(e){if(e<=0)throw new Error("Attempt to realize bad width: "+e);var t=e-this.screen_.getWidth();if(this.screenSize.width=e,this.screen_.setColumnCount(e),t>0)this.defaultTabStops&&this.setDefaultTabStops(this.screenSize.width-t);else for(var r=this.tabStops_.length-1;r>=0&&!(this.tabStops_[r]0){if(t<=this.scrollbackRows_.length){var s=Math.min(t,this.scrollbackRows_.length),n=this.scrollbackRows_.splice(this.scrollbackRows_.length-s,s);this.screen_.unshiftRows(n),t-=s,r.row+=s}t&&this.appendRows_(t)}this.setVTScrollRegion(null,null),this.restoreCursor(r)},o.Terminal.prototype.scrollHome=function(){this.scrollPort_.scrollRowToTop(0)},o.Terminal.prototype.scrollEnd=function(){this.scrollPort_.scrollRowToBottom(this.getRowCount())},o.Terminal.prototype.scrollPageUp=function(){var e=this.scrollPort_.getTopRowIndex();this.scrollPort_.scrollRowToTop(e-this.screenSize.height+1)},o.Terminal.prototype.scrollPageDown=function(){var e=this.scrollPort_.getTopRowIndex();this.scrollPort_.scrollRowToTop(e+this.screenSize.height-1)},o.Terminal.prototype.scrollLineUp=function(){var e=this.scrollPort_.getTopRowIndex();this.scrollPort_.scrollRowToTop(e-1)},o.Terminal.prototype.scrollLineDown=function(){var e=this.scrollPort_.getTopRowIndex();this.scrollPort_.scrollRowToTop(e+1)},o.Terminal.prototype.wipeContents=function(){this.scrollbackRows_.length=0,this.scrollPort_.resetCache(),[this.primaryScreen_,this.alternateScreen_].forEach(function(e){var t=e.getHeight();t>0&&(this.renumberRows_(0,t),this.clearHome(e))}.bind(this)),this.syncCursorPosition_(),this.scrollPort_.invalidate()},o.Terminal.prototype.reset=function(){this.clearAllTabStops(),this.setDefaultTabStops(),this.clearHome(this.primaryScreen_),this.primaryScreen_.textAttributes.reset(),this.clearHome(this.alternateScreen_),this.alternateScreen_.textAttributes.reset(),this.setCursorBlink(!!this.prefs_.get("cursor-blink")),this.vt.reset(),this.softReset()},o.Terminal.prototype.softReset=function(){this.options_=new o.Options,this.options_.cursorBlink=!!this.timeouts_.cursorBlink,this.primaryScreen_.textAttributes.resetColorPalette(),this.alternateScreen_.textAttributes.resetColorPalette(),this.setVTScrollRegion(null,null),this.setCursorVisible(!0)},o.Terminal.prototype.forwardTabStop=function(){for(var e=this.screen_.cursorPosition.column,t=0;te)return void this.setCursorColumn(this.tabStops_[t]);var r=this.screen_.cursorPosition.overflow;this.setCursorColumn(this.screenSize.width-1),this.screen_.cursorPosition.overflow=r},o.Terminal.prototype.backwardTabStop=function(){for(var e=this.screen_.cursorPosition.column,t=this.tabStops_.length-1;t>=0;t--)if(this.tabStops_[t]=0;t--){if(this.tabStops_[t]==e)return;if(this.tabStops_[t]0){var n=this.screen_.shiftRows(s);Array.prototype.push.apply(this.scrollbackRows_,n),this.scrollPort_.isScrolledEnd&&this.scheduleScrollDown_()}t>=this.screen_.rowsArray.length&&(t=this.screen_.rowsArray.length-1),this.setAbsoluteCursorPosition(t,0)},o.Terminal.prototype.moveRows_=function(e,t,r){var i=this.screen_.removeRows(e,t);this.screen_.insertRows(r,i);var o,s;e=this.screenSize.width&&(a=!0,n=this.screenSize.width-this.screen_.cursorPosition.column),a&&!this.options_.wraparound?(s=i.wc.substr(e,t,n-1)+i.wc.substr(e,r-1),n=r):s=i.wc.substr(e,t,n);for(var l=o.TextAttributes.splitWidecharString(s),h=0;h=0;o--)this.setAbsoluteCursorPosition(t+o,0),this.screen_.clearCursorRow()},o.Terminal.prototype.deleteLines=function(e){var t=this.saveCursor(),r=t.row,i=this.getVTScrollBottom(),o=i-r+1,s=i-(e=Math.min(e,o))+1;e!=o&&this.moveRows_(r,e,s);for(var n=0;nt)this.setCssVar("cursor-offset-row","-1");else{this.options_.cursorVisible&&"none"==this.cursorNode_.style.display&&(this.cursorNode_.style.display=""),this.setCssVar("cursor-offset-row",`${r-e} + `+`${this.scrollPort_.visibleRowTopMargin}px`),this.setCssVar("cursor-offset-col",this.screen_.cursorPosition.column),this.cursorNode_.setAttribute("title","("+this.screen_.cursorPosition.column+", "+this.screen_.cursorPosition.row+")");var i=this.document_.getSelection();i&&i.isCollapsed&&this.screen_.syncSelectionCaret(i)}},o.Terminal.prototype.restyleCursor_=function(){var e=this.cursorShape_;"false"==this.cursorNode_.getAttribute("focus")&&(e=o.Terminal.cursorShape.BLOCK);var t=this.cursorNode_.style;switch(e){case o.Terminal.cursorShape.BEAM:t.height="var(--hterm-charsize-height)",t.backgroundColor="transparent",t.borderBottomStyle=null,t.borderLeftStyle="solid";break;case o.Terminal.cursorShape.UNDERLINE:t.height=this.scrollPort_.characterSize.baseline+"px",t.backgroundColor="transparent",t.borderBottomStyle="solid",t.borderLeftStyle=null;break;default:t.height="var(--hterm-charsize-height)",t.backgroundColor=this.cursorColor_,t.borderBottomStyle=null,t.borderLeftStyle=null}},o.Terminal.prototype.scheduleSyncCursorPosition_=function(){if(!this.timeouts_.syncCursor){var e=this;this.timeouts_.syncCursor=setTimeout(function(){e.syncCursorPosition_(),delete e.timeouts_.syncCursor},0)}},o.Terminal.prototype.showZoomWarning_=function(e){if(!this.zoomWarningNode_){if(!e)return;this.zoomWarningNode_=this.document_.createElement("div"),this.zoomWarningNode_.id="hterm:zoom-warning",this.zoomWarningNode_.style.cssText="color: black;background-color: #ff2222;font-size: large;border-radius: 8px;opacity: 0.75;padding: 0.2em 0.5em 0.2em 0.5em;top: 0.5em;right: 1.2em;position: absolute;-webkit-text-size-adjust: none;-webkit-user-select: none;-moz-text-size-adjust: none;-moz-user-select: none;",this.zoomWarningNode_.addEventListener("click",function(e){this.parentNode.removeChild(this)})}this.zoomWarningNode_.textContent=i.MessageManager.replaceReferences(o.zoomWarningMessage,[parseInt(100*this.scrollPort_.characterSize.zoomFactor)]),this.zoomWarningNode_.style.fontFamily=this.prefs_.get("font-family"),e?this.zoomWarningNode_.parentNode||this.div_.parentNode.appendChild(this.zoomWarningNode_):this.zoomWarningNode_.parentNode&&this.zoomWarningNode_.parentNode.removeChild(this.zoomWarningNode_)},o.Terminal.prototype.showOverlay=function(e,t){if(!this.overlayNode_){if(!this.div_)return;this.overlayNode_=this.document_.createElement("div"),this.overlayNode_.style.cssText="border-radius: 15px;font-size: xx-large;opacity: 0.75;padding: 0.2em 0.5em 0.2em 0.5em;position: absolute;-webkit-user-select: none;-webkit-transition: opacity 180ms ease-in;-moz-user-select: none;-moz-transition: opacity 180ms ease-in;",this.overlayNode_.addEventListener("mousedown",function(e){e.preventDefault(),e.stopPropagation()},!0)}this.overlayNode_.style.color=this.prefs_.get("background-color"),this.overlayNode_.style.backgroundColor=this.prefs_.get("foreground-color"),this.overlayNode_.style.fontFamily=this.prefs_.get("font-family"),this.overlayNode_.textContent=e,this.overlayNode_.style.opacity="0.75",this.overlayNode_.parentNode||this.div_.appendChild(this.overlayNode_);var r=o.getClientSize(this.div_),i=o.getClientSize(this.overlayNode_);this.overlayNode_.style.top=(r.height-i.height)/2+"px",this.overlayNode_.style.left=(r.width-i.width-this.scrollPort_.currentScrollbarWidthPx)/2+"px";var s=this;this.overlayTimeout_&&clearTimeout(this.overlayTimeout_),null!==t&&(this.overlayTimeout_=setTimeout(function(){s.overlayNode_.style.opacity="0",s.overlayTimeout_=setTimeout(function(){s.overlayNode_.parentNode&&s.overlayNode_.parentNode.removeChild(s.overlayNode_),s.overlayTimeout_=null,s.overlayNode_.style.opacity="0.75"},200)},t||1500))},o.Terminal.prototype.paste=function(){return o.pasteFromClipboard(this.document_)},o.Terminal.prototype.copyStringToClipboard=function(e){this.prefs_.get("enable-clipboard-notice")&&setTimeout(this.showOverlay.bind(this,o.notifyCopyMessage,500),200);var t=this.document_.createElement("pre");t.id="hterm:copy-to-clipboard-source",t.textContent=e,t.style.cssText="-webkit-user-select: text;-moz-user-select: text;position: absolute;top: -99px",this.document_.body.appendChild(t);var r=this.document_.getSelection(),i=r.anchorNode,s=r.anchorOffset,n=r.focusNode,a=r.focusOffset;r.selectAllChildren(t),o.copySelectionToClipboard(this.document_),r.extend&&(r.collapse(i,s),r.extend(n,a)),t.parentNode.removeChild(t)},o.Terminal.prototype.getSelectionText=function(){var e=this.scrollPort_.selection;if(e.sync(),e.isCollapsed)return null;var t=e.startOffset,r=e.startNode;if("X-ROW"!=r.nodeName)for("#text"==r.nodeName&&"SPAN"==r.parentNode.nodeName&&(r=r.parentNode);r.previousSibling;)r=r.previousSibling,t+=o.TextAttributes.nodeWidth(r);var s=o.TextAttributes.nodeWidth(e.endNode)-e.endOffset;if("X-ROW"!=(r=e.endNode).nodeName)for("#text"==r.nodeName&&"SPAN"==r.parentNode.nodeName&&(r=r.parentNode);r.nextSibling;)r=r.nextSibling,s+=o.TextAttributes.nodeWidth(r);var n=this.getRowsText(e.startRow.rowIndex,e.endRow.rowIndex+1);return i.wc.substring(n,t,i.wc.strWidth(n)-s)},o.Terminal.prototype.copySelectionToClipboard=function(){var e=this.getSelectionText();null!=e&&this.copyStringToClipboard(e)},o.Terminal.prototype.overlaySize=function(){this.showOverlay(this.screenSize.width+"x"+this.screenSize.height)},o.Terminal.prototype.onVTKeystroke=function(e){this.scrollOnKeystroke_&&this.scrollPort_.scrollRowToBottom(this.getRowCount()),this.io.onVTKeystroke(this.keyboard.encode(e))},o.Terminal.prototype.openUrl=function(e){window.chrome&&window.chrome.browser?chrome.browser.openTab({url:e}):window.open(e,"_blank").focus()},o.Terminal.prototype.openSelectedUrl_=function(){var e=this.getSelectionText();if((null!=e||(this.screen_.expandSelection(this.document_.getSelection()),null!=(e=this.getSelectionText())))&&!(e.length>2048||e.search(/[\s\[\](){}<>"'\\^`]/)>=0)){if(e.search("^[a-zA-Z][a-zA-Z0-9+.-]*://")<0)switch(e.split(":",1)[0]){case"mailto":break;default:e="http://"+e}this.openUrl(e)}},o.Terminal.prototype.onMouse_=function(e){if(!e.processedByTerminalHandler_){var t=!this.defeatMouseReports_&&this.vt.mouseReport!=this.vt.MOUSE_REPORT_DISABLED;if(e.processedByTerminalHandler_=!0,e.terminalRow=parseInt((e.clientY-this.scrollPort_.visibleRowTopMargin)/this.scrollPort_.characterSize.height)+1,e.terminalColumn=parseInt(e.clientX/this.scrollPort_.characterSize.width)+1,!("mousedown"==e.type&&e.terminalColumn>this.screenSize.width)){if(this.options_.cursorVisible&&!t&&(e.terminalRow-1==this.screen_.cursorPosition.row&&e.terminalColumn-1==this.screen_.cursorPosition.column?this.cursorNode_.style.display="none":"none"==this.cursorNode_.style.display&&(this.cursorNode_.style.display="")),"mousedown"==e.type&&(e.altKey||!t?(this.defeatMouseReports_=!0,this.setSelectionEnabled(!0)):(this.defeatMouseReports_=!1,this.document_.getSelection().collapseToEnd(),this.setSelectionEnabled(!1),e.preventDefault())),t)this.scrollBlockerNode_.engaged||("mousedown"==e.type?(this.scrollBlockerNode_.engaged=!0,this.scrollBlockerNode_.style.top=e.clientY-5+"px",this.scrollBlockerNode_.style.left=e.clientX-5+"px"):"mousemove"==e.type&&(this.document_.getSelection().collapseToEnd(),e.preventDefault())),this.onMouse(e);else{if("dblclick"==e.type&&this.copyOnSelect&&(this.screen_.expandSelection(this.document_.getSelection()),this.copySelectionToClipboard(this.document_)),"click"==e.type&&!e.shiftKey&&(e.ctrlKey||e.metaKey))return clearTimeout(this.timeouts_.openUrl),void(this.timeouts_.openUrl=setTimeout(this.openSelectedUrl_.bind(this),500));if("mousedown"==e.type&&(this.mouseRightClickPaste&&2==e.button||e.button==this.mousePasteButton)&&(this.paste()||console.warning("Could not paste manually due to web restrictions")),"mouseup"==e.type&&0==e.button&&this.copyOnSelect&&!this.document_.getSelection().isCollapsed&&this.copySelectionToClipboard(this.document_),"mousemove"!=e.type&&"mouseup"!=e.type||!this.scrollBlockerNode_.engaged||(this.scrollBlockerNode_.engaged=!1,this.scrollBlockerNode_.style.top="-99px"),this.scrollWheelArrowKeys_&&!e.shiftKey&&this.keyboard.applicationCursor&&!this.isPrimaryScreen()&&"wheel"==e.type){var r=this.scrollPort_.scrollWheelDelta(e),o=i.f.smartFloorDivide(Math.abs(r),this.scrollPort_.characterSize.height),s="O"+(r<0?"B":"A");this.io.sendString(s.repeat(o)),e.preventDefault()}}"mouseup"==e.type&&this.document_.getSelection().isCollapsed&&(this.defeatMouseReports_=!1)}}},o.Terminal.prototype.onMouse=function(e){},o.Terminal.prototype.onFocusChange_=function(e){this.cursorNode_.setAttribute("focus",e),this.restyleCursor_(),!0===e&&this.closeBellNotifications_()},o.Terminal.prototype.onScroll_=function(){this.scheduleSyncCursorPosition_()},o.Terminal.prototype.onPaste_=function(e){var t=e.text.replace(/\n/gm,"\r");t=this.keyboard.encode(t),this.options_.bracketedPaste&&(t="[200~"+t+"[201~"),this.io.sendString(t)},o.Terminal.prototype.onCopy_=function(e){this.useDefaultWindowCopy||(e.preventDefault(),setTimeout(this.copySelectionToClipboard.bind(this),0))},o.Terminal.prototype.onResize_=function(){var e=Math.floor(this.scrollPort_.getScreenWidth()/this.scrollPort_.characterSize.width)||0,t=i.f.smartFloorDivide(this.scrollPort_.getScreenHeight(),this.scrollPort_.characterSize.height)||0;if(!(e<=0||t<=0)){var r=e!=this.screenSize.width||t!=this.screenSize.height;this.realizeSize_(e,t),this.showZoomWarning_(1!=this.scrollPort_.characterSize.zoomFactor),r&&this.overlaySize(),this.restyleCursor_(),this.scheduleSyncCursorPosition_()}},o.Terminal.prototype.onCursorBlink_=function(){this.options_.cursorBlink?"false"==this.cursorNode_.getAttribute("focus")||"0"==this.cursorNode_.style.opacity?(this.cursorNode_.style.opacity="1",this.timeouts_.cursorBlink=setTimeout(this.myOnCursorBlink_,this.cursorBlinkCycle_[0])):(this.cursorNode_.style.opacity="0",this.timeouts_.cursorBlink=setTimeout(this.myOnCursorBlink_,this.cursorBlinkCycle_[1])):delete this.timeouts_.cursorBlink},o.Terminal.prototype.setScrollbarVisible=function(e){this.scrollPort_.setScrollbarVisible(e)},o.Terminal.prototype.setScrollWheelMoveMultipler=function(e){this.scrollPort_.setScrollWheelMoveMultipler(e)},o.Terminal.prototype.closeBellNotifications_=function(){this.bellNotificationList_.forEach(function(e){e.close()}),this.bellNotificationList_.length=0},i.rtdep("lib.encodeUTF8"),o.Terminal.IO=function(e){this.terminal_=e,this.previousIO_=null},o.Terminal.IO.prototype.showOverlay=function(e,t){this.terminal_.showOverlay(e,t)},o.Terminal.IO.prototype.createFrame=function(e,t){return new o.Frame(this.terminal_,e,t)},o.Terminal.IO.prototype.setTerminalProfile=function(e){this.terminal_.setProfile(e)},o.Terminal.IO.prototype.push=function(){var e=new o.Terminal.IO(this.terminal_);return e.keyboardCaptured_=this.keyboardCaptured_,e.columnCount=this.columnCount,e.rowCount=this.rowCount,e.previousIO_=this.terminal_.io,this.terminal_.io=e,e},o.Terminal.IO.prototype.pop=function(){this.terminal_.io=this.previousIO_},o.Terminal.IO.prototype.sendString=function(e){console.log("Unhandled sendString: "+e)},o.Terminal.IO.prototype.onVTKeystroke=function(e){console.log("Unobserverd VT keystroke: "+JSON.stringify(e))},o.Terminal.IO.prototype.onTerminalResize_=function(e,t){for(var r=this;r;)r.columnCount=e,r.rowCount=t,r=r.previousIO_;this.onTerminalResize(e,t)},o.Terminal.IO.prototype.onTerminalResize=function(e,t){},o.Terminal.IO.prototype.writeUTF8=function(e){if(this.terminal_.io!=this)throw"Attempt to print from inactive IO object.";this.terminal_.interpret(e)},o.Terminal.IO.prototype.writelnUTF8=function(e){if(this.terminal_.io!=this)throw"Attempt to print from inactive IO object.";this.terminal_.interpret(e+"\r\n")},o.Terminal.IO.prototype.print=o.Terminal.IO.prototype.writeUTF16=function(e){this.writeUTF8(i.encodeUTF8(e))},o.Terminal.IO.prototype.println=o.Terminal.IO.prototype.writelnUTF16=function(e){this.writelnUTF8(i.encodeUTF8(e))},i.rtdep("lib.colors"),o.TextAttributes=function(e){this.document_=e,this.foregroundSource=this.SRC_DEFAULT,this.backgroundSource=this.SRC_DEFAULT,this.foreground=this.DEFAULT_COLOR,this.background=this.DEFAULT_COLOR,this.defaultForeground="rgb(255, 255, 255)",this.defaultBackground="rgb(0, 0, 0)",this.bold=!1,this.faint=!1,this.italic=!1,this.blink=!1,this.underline=!1,this.strikethrough=!1,this.inverse=!1,this.invisible=!1,this.wcNode=!1,this.asciiNode=!0,this.tileData=null,this.colorPalette=null,this.resetColorPalette()},o.TextAttributes.prototype.enableBold=!0,o.TextAttributes.prototype.enableBoldAsBright=!0,o.TextAttributes.prototype.DEFAULT_COLOR=i.f.createEnum(""),o.TextAttributes.prototype.SRC_DEFAULT="default",o.TextAttributes.prototype.SRC_RGB="rgb",o.TextAttributes.prototype.setDocument=function(e){this.document_=e},o.TextAttributes.prototype.clone=function(){var e=new o.TextAttributes(null);for(var t in this)e[t]=this[t];return e.colorPalette=this.colorPalette.concat(),e},o.TextAttributes.prototype.reset=function(){this.foregroundSource=this.SRC_DEFAULT,this.backgroundSource=this.SRC_DEFAULT,this.foreground=this.DEFAULT_COLOR,this.background=this.DEFAULT_COLOR,this.bold=!1,this.faint=!1,this.italic=!1,this.blink=!1,this.underline=!1,this.strikethrough=!1,this.inverse=!1,this.invisible=!1,this.wcNode=!1,this.asciiNode=!0},o.TextAttributes.prototype.resetColorPalette=function(){this.colorPalette=i.colors.colorPalette.concat(),this.syncColors()},o.TextAttributes.prototype.isDefault=function(){return this.foregroundSource==this.SRC_DEFAULT&&this.backgroundSource==this.SRC_DEFAULT&&!this.bold&&!this.faint&&!this.italic&&!this.blink&&!this.underline&&!this.strikethrough&&!this.inverse&&!this.invisible&&!this.wcNode&&this.asciiNode&&null==this.tileData},o.TextAttributes.prototype.createContainer=function(e){if(this.isDefault())return this.document_.createTextNode(e);var t=this.document_.createElement("span"),r=t.style,i=[];this.foreground!=this.DEFAULT_COLOR&&(r.color=this.foreground),this.background!=this.DEFAULT_COLOR&&(r.backgroundColor=this.background),this.enableBold&&this.bold&&(r.fontWeight="bold"),this.faint&&(t.faint=!0),this.italic&&(r.fontStyle="italic"),this.blink&&(i.push("blink-node"),t.blinkNode=!0);var o="";return this.underline&&(o+=" underline",t.underline=!0),this.strikethrough&&(o+=" line-through",t.strikethrough=!0),o&&(r.textDecoration=o),this.wcNode&&(i.push("wc-node"),t.wcNode=!0,t.asciiNode=!1),null!=this.tileData&&(i.push("tile"),i.push("tile_"+this.tileData),t.tileNode=!0),e&&(t.textContent=e),i.length&&(t.className=i.join(" ")),t},o.TextAttributes.prototype.matchesContainer=function(e){if("string"==typeof e||3==e.nodeType)return this.isDefault();var t=e.style;return!(this.wcNode||e.wcNode||this.asciiNode!=this.asciiNode||null!=this.tileData||e.tileNode||this.foreground!=t.color||this.background!=t.backgroundColor||(this.enableBold&&this.bold)!=!!t.fontWeight||this.blink!=e.blinkNode||this.italic!=!!t.fontStyle||!!this.underline!=!!e.underline||!!this.strikethrough!=!!e.strikethrough)},o.TextAttributes.prototype.setDefaults=function(e,t){this.defaultForeground=e,this.defaultBackground=t,this.syncColors()},o.TextAttributes.prototype.syncColors=function(){var e=this.foregroundSource,t=this.backgroundSource,r=this.DEFAULT_COLOR,o=this.DEFAULT_COLOR;if(this.inverse&&(e=this.backgroundSource,t=this.foregroundSource,r=this.defaultBackground,o=this.defaultForeground),this.enableBoldAsBright&&this.bold&&e!=this.SRC_DEFAULT&&e!=this.SRC_RGB&&(e=function(e){return e<8?e+8:e}(e)),this.invisible&&(e=t,r=this.defaultBackground),e!=this.SRC_RGB&&(this.foreground=e==this.SRC_DEFAULT?r:this.colorPalette[e]),this.faint&&!this.invisible){var s=this.foreground==this.DEFAULT_COLOR?this.defaultForeground:this.foreground;this.foreground=i.colors.mix(s,"rgb(0, 0, 0)",.3333)}t!=this.SRC_RGB&&(this.background=t==this.SRC_DEFAULT?o:this.colorPalette[t])},o.TextAttributes.containersMatch=function(e,t){if("string"==typeof e)return o.TextAttributes.containerIsDefault(t);if(e.nodeType!=t.nodeType)return!1;if(3==e.nodeType)return!0;var r=e.style,i=t.style;return r.color==i.color&&r.backgroundColor==i.backgroundColor&&r.fontWeight==i.fontWeight&&r.fontStyle==i.fontStyle&&r.textDecoration==i.textDecoration},o.TextAttributes.containerIsDefault=function(e){return"string"==typeof e||3==e.nodeType},o.TextAttributes.nodeWidth=function(e){return e.asciiNode?e.textContent.length:i.wc.strWidth(e.textContent)},o.TextAttributes.nodeSubstr=function(e,t,r){return e.asciiNode?e.textContent.substr(t,r):i.wc.substr(e.textContent,t,r)},o.TextAttributes.nodeSubstring=function(e,t,r){return e.asciiNode?e.textContent.substring(t,r):i.wc.substring(e.textContent,t,r)},o.TextAttributes.splitWidecharString=function(e){for(var t=[],r=0,o=0,s=!0,n=0;n0?0:1),n|=r,t="[M"+String.fromCharCode(n)+o+s,e.preventDefault();break;case"mousedown":var n=Math.min(e.button,2)+32;n|=r,t="[M"+String.fromCharCode(n)+o+s;break;case"mouseup":t="[M#"+o+s;break;case"mousemove":this.mouseReport==this.MOUSE_REPORT_DRAG&&e.buttons&&(n=32,1&e.buttons?n+=0:4&e.buttons?n+=1:2&e.buttons?n+=2:n+=3,n+=32,n|=r,t="[M"+String.fromCharCode(n)+o+s);break;case"click":case"dblclick":break;default:console.error("Unknown mouse event: "+e.type,e)}t&&this.terminal.io.sendString(t)}},o.VT.prototype.interpret=function(e){for(this.parseState_.resetBuf(this.decode(e));!this.parseState_.isComplete();){var t=this.parseState_.func,r=this.parseState_.pos,e=this.parseState_.buf;if(this.parseState_.func.call(this,this.parseState_),this.parseState_.func==t&&this.parseState_.pos==r&&this.parseState_.buf==e)throw"Parser did not alter the state!"}},o.VT.prototype.decode=function(e){return"utf-8"==this.characterEncoding?this.decodeUTF8(e):e},o.VT.prototype.encodeUTF8=function(e){return i.encodeUTF8(e)},o.VT.prototype.decodeUTF8=function(e){return this.utf8Decoder_.decode(e)},o.VT.prototype.setEncoding=function(e){switch(e){default:console.warn('Invalid value for "terminal-encoding": '+e);case"iso-2022":this.codingSystemUtf8_=!1,this.codingSystemLocked_=!1;break;case"utf-8-locked":this.codingSystemUtf8_=!0,this.codingSystemLocked_=!0;break;case"utf-8":this.codingSystemUtf8_=!0,this.codingSystemLocked_=!1}this.updateEncodingState_()},o.VT.prototype.updateEncodingState_=function(){var e=Object.keys(o.VT.CC1).filter(e=>!this.codingSystemUtf8_||e.charCodeAt()<128).map(e=>"\\x"+i.f.zpad(e.charCodeAt().toString(16),2)).join("");this.cc1Pattern_=new RegExp(`[${e}]`)},o.VT.prototype.parseUnknown_=function(e){function t(e){!r.codingSystemUtf8_&&r[r.GL].GL&&(e=r[r.GL].GL(e)),r.terminal.print(e)}var r=this,i=e.peekRemainingBuf(),o=i.search(this.cc1Pattern_);return 0==o?(this.dispatch("CC1",i.substr(0,1),e),void e.advance(1)):-1==o?(t(i),void e.reset()):(t(i.substr(0,o)),this.dispatch("CC1",i.substr(o,1),e),void e.advance(o+1))},o.VT.prototype.parseCSI_=function(e){var t=e.peekChar(),r=e.args;t>="@"&&t<="~"?(this.dispatch("CSI",this.leadingModifier_+this.trailingModifier_+t,e),e.resetParseFunction()):";"==t?this.trailingModifier_?e.resetParseFunction():(r.length||r.push(""),r.push("")):t>="0"&&t<="9"?this.trailingModifier_?e.resetParseFunction():r.length?r[r.length-1]+=t:r[0]=t:t>=" "&&t<="?"&&":"!=t?r.length?this.trailingModifier_+=t:this.leadingModifier_+=t:this.cc1Pattern_.test(t)?this.dispatch("CC1",t,e):e.resetParseFunction(),e.advance(1)},o.VT.prototype.parseUntilStringTerminator_=function(e){var t=e.peekRemainingBuf(),r=t.search(/(\x1b\\|\x07)/),i=e.args;if(i.length||(i[0]="",i[1]=new Date),-1==r){i[0]+=t;var o;return i[0].length>this.maxStringSequence&&(o="too long: "+i[0].length),-1!=i[0].indexOf("")&&(o="embedded escape: "+i[0].indexOf("")),new Date-i[1]>this.oscTimeLimit_&&(o="timeout expired: "+new Date-i[1]),o?(console.log("parseUntilStringTerminator_: aborting: "+o,i[0]),e.reset(i[0]),!1):(e.advance(t.length),!0)}return i[0].length+r>this.maxStringSequence?(e.reset(i[0]+t),!1):(i[0]+=t.substr(0,r),e.resetParseFunction(),e.advance(r+(""==t.substr(r,1)?2:1)),!0)},o.VT.prototype.dispatch=function(e,t,r){var i=o.VT[e][t];i?i!=o.VT.ignore?"CC1"==e&&t>""&&!this.enable8BitControl?console.warn("Ignoring 8-bit control code: 0x"+t.charCodeAt(0).toString(16)):i.apply(this,[r,t]):this.warnUnimplemented&&console.warn("Ignored "+e+" code: "+JSON.stringify(t)):this.warnUnimplemented&&console.warn("Unknown "+e+" code: "+JSON.stringify(t))},o.VT.prototype.setANSIMode=function(e,t){4==e?this.terminal.setInsertMode(t):20==e?this.terminal.setAutoCarriageReturn(t):this.warnUnimplemented&&console.warn("Unimplemented ANSI Mode: "+e)},o.VT.prototype.setDECMode=function(e,t){switch(parseInt(e,10)){case 1:this.terminal.keyboard.applicationCursor=t;break;case 3:this.allowColumnWidthChanges_&&(this.terminal.setWidth(t?132:80),this.terminal.clearHome(),this.terminal.setVTScrollRegion(null,null));break;case 5:this.terminal.setReverseVideo(t);break;case 6:this.terminal.setOriginMode(t);break;case 7:this.terminal.setWraparound(t);break;case 12:this.enableDec12&&this.terminal.setCursorBlink(t);break;case 25:this.terminal.setCursorVisible(t);break;case 30:this.terminal.setScrollbarVisible(t);break;case 40:this.terminal.allowColumnWidthChanges_=t;break;case 45:this.terminal.setReverseWraparound(t);break;case 67:this.terminal.keyboard.backspaceSendsBackspace=t;break;case 1e3:this.mouseReport=t?this.MOUSE_REPORT_CLICK:this.MOUSE_REPORT_DISABLED,this.terminal.syncMouseStyle();break;case 1002:this.mouseReport=t?this.MOUSE_REPORT_DRAG:this.MOUSE_REPORT_DISABLED,this.terminal.syncMouseStyle();break;case 1010:this.terminal.scrollOnOutput=t;break;case 1011:this.terminal.scrollOnKeystroke=t;break;case 1036:this.terminal.keyboard.metaSendsEscape=t;break;case 1039:t?this.terminal.keyboard.previousAltSendsWhat_||(this.terminal.keyboard.previousAltSendsWhat_=this.terminal.keyboard.altSendsWhat,this.terminal.keyboard.altSendsWhat="escape"):this.terminal.keyboard.previousAltSendsWhat_&&(this.terminal.keyboard.altSendsWhat=this.terminal.keyboard.previousAltSendsWhat_,this.terminal.keyboard.previousAltSendsWhat_=null);break;case 47:case 1047:this.terminal.setAlternateMode(t);break;case 1048:this.savedState_.save();case 1049:t?(this.savedState_.save(),this.terminal.setAlternateMode(t),this.terminal.clear()):(this.terminal.setAlternateMode(t),this.savedState_.restore());break;case 2004:this.terminal.setBracketedPaste(t);break;default:this.warnUnimplemented&&console.warn("Unimplemented DEC Private Mode: "+e)}},o.VT.ignore=function(){},o.VT.CC1={},o.VT.ESC={},o.VT.CSI={},o.VT.OSC={},o.VT.VT52={},o.VT.CC1["\0"]=o.VT.ignore,o.VT.CC1[""]=o.VT.ignore,o.VT.CC1[""]=function(){this.terminal.ringBell()},o.VT.CC1["\b"]=function(){this.terminal.cursorLeft(1)},o.VT.CC1["\t"]=function(){this.terminal.forwardTabStop()},o.VT.CC1["\n"]=function(){this.terminal.formFeed()},o.VT.CC1["\v"]=o.VT.CC1["\n"],o.VT.CC1["\f"]=o.VT.CC1["\n"],o.VT.CC1["\r"]=function(){this.terminal.setCursorColumn(0)},o.VT.CC1[""]=function(){this.GL="G1"},o.VT.CC1[""]=function(){this.GL="G0"},o.VT.CC1[""]=o.VT.ignore,o.VT.CC1[""]=o.VT.ignore,o.VT.CC1[""]=function(e){"G1"==this.GL&&(this.GL="G0"),e.resetParseFunction(),this.terminal.print("?")},o.VT.CC1[""]=o.VT.CC1[""],o.VT.CC1[""]=function(e){function t(e){var r=e.consumeChar();""!=r&&(this.dispatch("ESC",r,e),e.func==t&&e.resetParseFunction())}e.func=t},o.VT.CC1[""]=o.VT.ignore,o.VT.CC1[""]=o.VT.ESC.D=function(){this.terminal.lineFeed()},o.VT.CC1["
"]=o.VT.ESC.E=function(){this.terminal.setCursorColumn(0),this.terminal.cursorDown(1)},o.VT.CC1[""]=o.VT.ESC.H=function(){this.terminal.setTabStop(this.terminal.getCursorColumn())},o.VT.CC1[""]=o.VT.ESC.M=function(){this.terminal.reverseLineFeed()},o.VT.CC1[""]=o.VT.ESC.N=o.VT.ignore,o.VT.CC1[""]=o.VT.ESC.O=o.VT.ignore,o.VT.CC1[""]=o.VT.ESC.P=function(e){e.resetArguments(),e.func=this.parseUntilStringTerminator_},o.VT.CC1[""]=o.VT.ESC.V=o.VT.ignore,o.VT.CC1[""]=o.VT.ESC.W=o.VT.ignore,o.VT.CC1[""]=o.VT.ESC.X=o.VT.ignore,o.VT.CC1[""]=o.VT.ESC.Z=function(){this.terminal.io.sendString("[?1;2c")},o.VT.CC1[""]=o.VT.ESC["["]=function(e){e.resetArguments(),this.leadingModifier_="",this.trailingModifier_="",e.func=this.parseCSI_},o.VT.CC1[""]=o.VT.ESC["\\"]=o.VT.ignore,o.VT.CC1[""]=o.VT.ESC["]"]=function(e){function t(e){if(this.parseUntilStringTerminator_(e)&&e.func!=t){var r=e.args[0].match(/^(\d+);(.*)$/);r?(e.args[0]=r[2],this.dispatch("OSC",r[1],e)):console.warn("Invalid OSC: "+JSON.stringify(e.args[0]))}}e.resetArguments(),e.func=t},o.VT.CC1[""]=o.VT.ESC["^"]=function(e){e.resetArguments(),e.func=this.parseUntilStringTerminator_},o.VT.CC1[""]=o.VT.ESC._=function(e){e.resetArguments(),e.func=this.parseUntilStringTerminator_},o.VT.ESC[" "]=function(e){e.func=function(e){var t=e.consumeChar();this.warnUnimplemented&&console.warn("Unimplemented sequence: ESC 0x20 "+t),e.resetParseFunction()}},o.VT.ESC["#"]=function(e){e.func=function(e){"8"==e.consumeChar()&&this.terminal.fill("E"),e.resetParseFunction()}},o.VT.ESC["%"]=function(e){e.func=function(e){var t=e.consumeChar();if(this.codingSystemLocked_)return"/"==t&&e.consumeChar(),void e.resetParseFunction();switch(t){case"@":this.setEncoding("iso-2022");break;case"G":this.setEncoding("utf-8");break;case"/":switch(t=e.consumeChar()){case"G":case"H":case"I":this.setEncoding("utf-8-locked");break;default:this.warnUnimplemented&&console.warn("Unknown ESC % / argument: "+JSON.stringify(t))}break;default:this.warnUnimplemented&&console.warn("Unknown ESC % argument: "+JSON.stringify(t))}e.resetParseFunction()}},o.VT.ESC["("]=o.VT.ESC[")"]=o.VT.ESC["*"]=o.VT.ESC["+"]=o.VT.ESC["-"]=o.VT.ESC["."]=o.VT.ESC["/"]=function(e,t){e.func=function(e){var r=e.consumeChar();if(""==r)return e.resetParseFunction(),void e.func();var i=this.characterMaps.getMap(r);void 0!==i?"("==t?this.G0=i:")"==t||"-"==t?this.G1=i:"*"==t||"."==t?this.G2=i:"+"!=t&&"/"!=t||(this.G3=i):this.warnUnimplemented&&console.log('Invalid character set for "'+t+'": '+r),e.resetParseFunction()}},o.VT.ESC[6]=o.VT.ignore,o.VT.ESC[7]=function(){this.savedState_.save()},o.VT.ESC[8]=function(){this.savedState_.restore()},o.VT.ESC[9]=o.VT.ignore,o.VT.ESC["="]=function(){this.terminal.keyboard.applicationKeypad=!0},o.VT.ESC[">"]=function(){this.terminal.keyboard.applicationKeypad=!1},o.VT.ESC.F=o.VT.ignore,o.VT.ESC.c=function(){this.reset(),this.terminal.reset()},o.VT.ESC.l=o.VT.ESC.m=o.VT.ignore,o.VT.ESC.n=function(){this.GL="G2"},o.VT.ESC.o=function(){this.GL="G3"},o.VT.ESC["|"]=function(){this.GR="G3"},o.VT.ESC["}"]=function(){this.GR="G2"},o.VT.ESC["~"]=function(){this.GR="G1"},o.VT.OSC[0]=function(e){this.terminal.setWindowTitle(e.args[0])},o.VT.OSC[2]=o.VT.OSC[0],o.VT.OSC[4]=function(e){for(var t=e.args[0].split(";"),r=parseInt(t.length/2),o=this.terminal.getTextAttributes().colorPalette,s=[],n=0;n=o.length||("?"!=l?(l=i.colors.x11ToCSS(l))&&(o[a]=l):(l=i.colors.rgbToX11(o[a]))&&s.push(a+";"+l))}s.length&&this.terminal.io.sendString("]4;"+s.join(";")+"")},o.VT.OSC[9]=function(e){o.notify({body:e.args[0]})},o.VT.OSC[10]=function(e){var t=e.args[0].split(";");if(t){var r=i.colors.x11ToCSS(t.shift());r&&this.terminal.setForegroundColor(r),t.length>0&&(e.args[0]=t.join(";"),o.VT.OSC[11].apply(this,[e]))}},o.VT.OSC[11]=function(e){var t=e.args[0].split(";");if(t){var r=i.colors.x11ToCSS(t.shift());r&&this.terminal.setBackgroundColor(r)}},o.VT.OSC[50]=function(e){var t=e.args[0].match(/CursorShape=(.)/i);if(t)switch(t[1]){case"1":this.terminal.setCursorShape(o.Terminal.cursorShape.BEAM);break;case"2":this.terminal.setCursorShape(o.Terminal.cursorShape.UNDERLINE);break;default:this.terminal.setCursorShape(o.Terminal.cursorShape.BLOCK)}else console.warn("Could not parse OSC 50 args: "+e.args[0])},o.VT.OSC[52]=function(e){var t=e.args[0].match(/^[cps01234567]*;(.*)/);if(t){var r=window.atob(t[1]);r&&this.terminal.copyStringToClipboard(this.decode(r))}},o.VT.OSC[777]=function(e){var t;switch(e.args[0].split(";",1)[0]){case"notify":var r,i;(t=e.args[0].match(/^[^;]+;([^;]*)(;([\s\S]*))?$/))&&(r=t[1],i=t[3]),o.notify({title:r,body:i});break;default:console.warn("Unknown urxvt module: "+e.args[0])}},o.VT.CSI["@"]=function(e){this.terminal.insertSpace(e.iarg(0,1))},o.VT.CSI.A=function(e){this.terminal.cursorUp(e.iarg(0,1))},o.VT.CSI.B=function(e){this.terminal.cursorDown(e.iarg(0,1))},o.VT.CSI.C=function(e){this.terminal.cursorRight(e.iarg(0,1))},o.VT.CSI.D=function(e){this.terminal.cursorLeft(e.iarg(0,1))},o.VT.CSI.E=function(e){this.terminal.cursorDown(e.iarg(0,1)),this.terminal.setCursorColumn(0)},o.VT.CSI.F=function(e){this.terminal.cursorUp(e.iarg(0,1)),this.terminal.setCursorColumn(0)},o.VT.CSI.G=function(e){this.terminal.setCursorColumn(e.iarg(0,1)-1)},o.VT.CSI.H=function(e){this.terminal.setCursorPosition(e.iarg(0,1)-1,e.iarg(1,1)-1)},o.VT.CSI.I=function(e){var t=e.iarg(0,1);t=i.f.clamp(t,1,this.terminal.screenSize.width);for(var r=0;rT"]=o.VT.ignore,o.VT.CSI.X=function(e){this.terminal.eraseToRight(e.iarg(0,1))},o.VT.CSI.Z=function(e){var t=e.iarg(0,1);t=i.f.clamp(t,1,this.terminal.screenSize.width);for(var r=0;rc"]=function(e){this.terminal.io.sendString("[>0;256;0c")},o.VT.CSI.d=function(e){this.terminal.setAbsoluteCursorRow(e.iarg(0,1)-1)},o.VT.CSI.f=o.VT.CSI.H,o.VT.CSI.g=function(e){e.args[0]&&0!=e.args[0]?3==e.args[0]&&this.terminal.clearAllTabStops():this.terminal.clearTabStopAtCursor(!1)},o.VT.CSI.h=function(e){for(var t=0;t=i.colorPalette.length)continue;i.foregroundSource=a}else if(39==s)i.foregroundSource=i.SRC_DEFAULT;else if(s<48)i.backgroundSource=s-40;else if(48==s){var n=r(o);if(null!=n)i.backgroundSource=i.SRC_RGB,i.background=n,o+=5;else{var a=t(o);if(null==a)break;if(o+=2,a>=i.colorPalette.length)continue;i.backgroundSource=a}}else i.backgroundSource=i.SRC_DEFAULT;else s>=90&&s<=97?i.foregroundSource=s-90+8:s>=100&&s<=107&&(i.backgroundSource=s-100+8)}i.setDefaults(this.terminal.getForegroundColor(),this.terminal.getBackgroundColor())}else i.reset()},o.VT.CSI[">m"]=o.VT.ignore,o.VT.CSI.n=function(e){if(5==e.args[0])this.terminal.io.sendString("0n");else if(6==e.args[0]){var t=this.terminal.getCursorRow()+1,r=this.terminal.getCursorColumn()+1;this.terminal.io.sendString("["+t+";"+r+"R")}},o.VT.CSI[">n"]=o.VT.ignore,o.VT.CSI["?n"]=function(e){if(6==e.args[0]){var t=this.terminal.getCursorRow()+1,r=this.terminal.getCursorColumn()+1;this.terminal.io.sendString("["+t+";"+r+"R")}else 15==e.args[0]?this.terminal.io.sendString("[?11n"):25==e.args[0]?this.terminal.io.sendString("[?21n"):26==e.args[0]?this.terminal.io.sendString("[?12;1;0;0n"):53==e.args[0]&&this.terminal.io.sendString("[?50n")},o.VT.CSI[">p"]=o.VT.ignore,o.VT.CSI["!p"]=function(){this.reset(),this.terminal.softReset()},o.VT.CSI.$p=o.VT.ignore,o.VT.CSI["?$p"]=o.VT.ignore,o.VT.CSI['"p']=o.VT.ignore,o.VT.CSI.q=o.VT.ignore,o.VT.CSI[" q"]=function(e){var t=e.args[0];0==t||1==t?(this.terminal.setCursorShape(o.Terminal.cursorShape.BLOCK),this.terminal.setCursorBlink(!0)):2==t?(this.terminal.setCursorShape(o.Terminal.cursorShape.BLOCK),this.terminal.setCursorBlink(!1)):3==t?(this.terminal.setCursorShape(o.Terminal.cursorShape.UNDERLINE),this.terminal.setCursorBlink(!0)):4==t?(this.terminal.setCursorShape(o.Terminal.cursorShape.UNDERLINE),this.terminal.setCursorBlink(!1)):5==t?(this.terminal.setCursorShape(o.Terminal.cursorShape.BEAM),this.terminal.setCursorBlink(!0)):6==t?(this.terminal.setCursorShape(o.Terminal.cursorShape.BEAM),this.terminal.setCursorBlink(!1)):console.warn("Unknown cursor style: "+t)},o.VT.CSI['"q']=o.VT.ignore,o.VT.CSI.r=function(e){var t=e.args,r=t[0]?parseInt(t[0],10)-1:null,i=t[1]?parseInt(t[1],10)-1:null;this.terminal.setVTScrollRegion(r,i),this.terminal.setCursorPosition(0,0)},o.VT.CSI["?r"]=o.VT.ignore,o.VT.CSI.$r=o.VT.ignore,o.VT.CSI.s=function(){this.savedState_.save()},o.VT.CSI["?s"]=o.VT.ignore,o.VT.CSI.t=o.VT.ignore,o.VT.CSI.$t=o.VT.ignore,o.VT.CSI[">t"]=o.VT.ignore,o.VT.CSI[" t"]=o.VT.ignore,o.VT.CSI.u=function(){this.savedState_.restore()},o.VT.CSI[" u"]=o.VT.ignore,o.VT.CSI.$v=o.VT.ignore,o.VT.CSI["'w"]=o.VT.ignore,o.VT.CSI.x=o.VT.ignore,o.VT.CSI["*x"]=o.VT.ignore,o.VT.CSI.$x=o.VT.ignore,o.VT.CSI.z=function(e){if(!(e.args.length<1)){var t=e.args[0];if(0==t){if(e.args.length<2)return;this.terminal.getTextAttributes().tileData=e.args[1]}else 1==t&&(this.terminal.getTextAttributes().tileData=null)}},o.VT.CSI["'z"]=o.VT.ignore,o.VT.CSI.$z=o.VT.ignore,o.VT.CSI["'{"]=o.VT.ignore,o.VT.CSI["'|"]=o.VT.ignore,o.VT.CSI["'}"]=o.VT.ignore,o.VT.CSI["'~"]=o.VT.ignore,i.rtdep("lib.f"),o.VT.CharacterMap=function(e,t){this.description=e,this.GL=null,this.glmapBase_=t,this.sync_()},o.VT.CharacterMap.prototype.sync_=function(e){if(!this.glmapBase_&&!e)return this.GL=null,delete this.glmap_,void delete this.glre_;this.glmap_=e?Object.assign({},this.glmapBase_,e):this.glmapBase_;var t=Object.keys(this.glmap_).map(e=>"\\x"+i.f.zpad(e.charCodeAt(0).toString(16)));this.glre_=new RegExp("["+t.join("")+"]","g"),this.GL=(e=>e.replace(this.glre_,e=>this.glmap_[e]))},o.VT.CharacterMap.prototype.reset=function(){this.glmap_!==this.glmapBase_&&this.sync_()},o.VT.CharacterMap.prototype.setOverrides=function(e){this.sync_(e)},o.VT.CharacterMap.prototype.clone=function(){var e=new o.VT.CharacterMap(this.description,this.glmapBase_);return this.glmap_!==this.glmapBase_&&e.setOverrides(this.glmap_),e},o.VT.CharacterMaps=function(){this.maps_=o.VT.CharacterMaps.DefaultMaps,this.mapsBase_=this.maps_},o.VT.CharacterMaps.prototype.getMap=function(e){return this.maps_.hasOwnProperty(e)?this.maps_[e]:void 0},o.VT.CharacterMaps.prototype.addMap=function(e,t){this.maps_===this.mapsBase_&&(this.maps_=Object.assign({},this.mapsBase_)),this.maps_[e]=t},o.VT.CharacterMaps.prototype.reset=function(){this.maps_!==o.VT.CharacterMaps.DefaultMaps&&(this.maps_=o.VT.CharacterMaps.DefaultMaps)},o.VT.CharacterMaps.prototype.setOverrides=function(e){this.maps_===this.mapsBase_&&(this.maps_=Object.assign({},this.mapsBase_));for(var t in e){var r=this.getMap(t);void 0!==r?(this.maps_[t]=r.clone(),this.maps_[t].setOverrides(e[t])):this.addMap(t,new o.VT.CharacterMap("user "+t,e[t]))}},o.VT.CharacterMaps.DefaultMaps={},o.VT.CharacterMaps.DefaultMaps[0]=new o.VT.CharacterMap("graphic",{"`":"◆",a:"▒",b:"␉",c:"␌",d:"␍",e:"␊",f:"°",g:"±",h:"",i:"␋",j:"┘",k:"┐",l:"┌",m:"└",n:"┼",o:"⎺",p:"⎻",q:"─",r:"⎼",s:"⎽",t:"├",u:"┤",v:"┴",w:"┬",x:"│",y:"≤",z:"≥","{":"π","|":"≠","}":"£","~":"·"}),o.VT.CharacterMaps.DefaultMaps.A=new o.VT.CharacterMap("british",{"#":"£"}),o.VT.CharacterMaps.DefaultMaps.B=new o.VT.CharacterMap("us",null),o.VT.CharacterMaps.DefaultMaps[4]=new o.VT.CharacterMap("dutch",{"#":"£","@":"¾","[":"IJ","\\":"½","]":"|","{":"¨","|":"f","}":"¼","~":"´"}),o.VT.CharacterMaps.DefaultMaps.C=o.VT.CharacterMaps.DefaultMaps[5]=new o.VT.CharacterMap("finnish",{"[":"Ä","\\":"Ö","]":"Å","^":"Ü","`":"é","{":"ä","|":"ö","}":"å","~":"ü"}),o.VT.CharacterMaps.DefaultMaps.R=new o.VT.CharacterMap("french",{"#":"£","@":"à","[":"°","\\":"ç","]":"§","{":"é","|":"ù","}":"è","~":"¨"}),o.VT.CharacterMaps.DefaultMaps.Q=new o.VT.CharacterMap("french canadian",{"@":"à","[":"â","\\":"ç","]":"ê","^":"î","`":"ô","{":"é","|":"ù","}":"è","~":"û"}),o.VT.CharacterMaps.DefaultMaps.K=new o.VT.CharacterMap("german",{"@":"§","[":"Ä","\\":"Ö","]":"Ü","{":"ä","|":"ö","}":"ü","~":"ß"}),o.VT.CharacterMaps.DefaultMaps.Y=new o.VT.CharacterMap("italian",{"#":"£","@":"§","[":"°","\\":"ç","]":"é","`":"ù","{":"à","|":"ò","}":"è","~":"ì"}),o.VT.CharacterMaps.DefaultMaps.E=o.VT.CharacterMaps.DefaultMaps[6]=new o.VT.CharacterMap("norwegian/danish",{"@":"Ä","[":"Æ","\\":"Ø","]":"Å","^":"Ü","`":"ä","{":"æ","|":"ø","}":"å","~":"ü"}),o.VT.CharacterMaps.DefaultMaps.Z=new o.VT.CharacterMap("spanish",{"#":"£","@":"§","[":"¡","\\":"Ñ","]":"¿","{":"°","|":"ñ","}":"ç"}),o.VT.CharacterMaps.DefaultMaps[7]=o.VT.CharacterMaps.DefaultMaps.H=new o.VT.CharacterMap("swedish",{"@":"É","[":"Ä","\\":"Ö","]":"Å","^":"Ü","`":"é","{":"ä","|":"ö","}":"å","~":"ü"}),o.VT.CharacterMaps.DefaultMaps["="]=new o.VT.CharacterMap("swiss",{"#":"ù","@":"à","[":"é","\\":"ç","]":"ê","^":"î",_:"è","`":"ô","{":"ä","|":"ö","}":"ü","~":"û"}),i.resource.add("hterm/audio/bell","audio/ogg;base64","T2dnUwACAAAAAAAAAADhqW5KAAAAAMFvEjYBHgF2b3JiaXMAAAAAAYC7AAAAAAAAAHcBAAAAAAC4AU9nZ1MAAAAAAAAAAAAA4aluSgEAAAAAesI3EC3//////////////////8kDdm9yYmlzHQAAAFhpcGguT3JnIGxpYlZvcmJpcyBJIDIwMDkwNzA5AAAAAAEFdm9yYmlzKUJDVgEACAAAADFMIMWA0JBVAAAQAABgJCkOk2ZJKaWUoSh5mJRISSmllMUwiZiUicUYY4wxxhhjjDHGGGOMIDRkFQAABACAKAmOo+ZJas45ZxgnjnKgOWlOOKcgB4pR4DkJwvUmY26mtKZrbs4pJQgNWQUAAAIAQEghhRRSSCGFFGKIIYYYYoghhxxyyCGnnHIKKqigggoyyCCDTDLppJNOOumoo4466ii00EILLbTSSkwx1VZjrr0GXXxzzjnnnHPOOeecc84JQkNWAQAgAAAEQgYZZBBCCCGFFFKIKaaYcgoyyIDQkFUAACAAgAAAAABHkRRJsRTLsRzN0SRP8ixREzXRM0VTVE1VVVVVdV1XdmXXdnXXdn1ZmIVbuH1ZuIVb2IVd94VhGIZhGIZhGIZh+H3f933f930gNGQVACABAKAjOZbjKaIiGqLiOaIDhIasAgBkAAAEACAJkiIpkqNJpmZqrmmbtmirtm3LsizLsgyEhqwCAAABAAQAAAAAAKBpmqZpmqZpmqZpmqZpmqZpmqZpmmZZlmVZlmVZlmVZlmVZlmVZlmVZlmVZlmVZlmVZlmVZlmVZlmVZQGjIKgBAAgBAx3Ecx3EkRVIkx3IsBwgNWQUAyAAACABAUizFcjRHczTHczzHczxHdETJlEzN9EwPCA1ZBQAAAgAIAAAAAABAMRzFcRzJ0SRPUi3TcjVXcz3Xc03XdV1XVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVYHQkFUAAAQAACGdZpZqgAgzkGEgNGQVAIAAAAAYoQhDDAgNWQUAAAQAAIih5CCa0JrzzTkOmuWgqRSb08GJVJsnuamYm3POOeecbM4Z45xzzinKmcWgmdCac85JDJqloJnQmnPOeRKbB62p0ppzzhnnnA7GGWGcc85p0poHqdlYm3POWdCa5qi5FJtzzomUmye1uVSbc84555xzzjnnnHPOqV6czsE54Zxzzonam2u5CV2cc875ZJzuzQnhnHPOOeecc84555xzzglCQ1YBAEAAAARh2BjGnYIgfY4GYhQhpiGTHnSPDpOgMcgppB6NjkZKqYNQUhknpXSC0JBVAAAgAACEEFJIIYUUUkghhRRSSCGGGGKIIaeccgoqqKSSiirKKLPMMssss8wyy6zDzjrrsMMQQwwxtNJKLDXVVmONteaec645SGultdZaK6WUUkoppSA0ZBUAAAIAQCBkkEEGGYUUUkghhphyyimnoIIKCA1ZBQAAAgAIAAAA8CTPER3RER3RER3RER3RER3P8RxREiVREiXRMi1TMz1VVFVXdm1Zl3Xbt4Vd2HXf133f141fF4ZlWZZlWZZlWZZlWZZlWZZlCUJDVgEAIAAAAEIIIYQUUkghhZRijDHHnINOQgmB0JBVAAAgAIAAAAAAR3EUx5EcyZEkS7IkTdIszfI0T/M00RNFUTRNUxVd0RV10xZlUzZd0zVl01Vl1XZl2bZlW7d9WbZ93/d93/d93/d93/d939d1IDRkFQAgAQCgIzmSIimSIjmO40iSBISGrAIAZAAABACgKI7iOI4jSZIkWZImeZZniZqpmZ7pqaIKhIasAgAAAQAEAAAAAACgaIqnmIqniIrniI4oiZZpiZqquaJsyq7ruq7ruq7ruq7ruq7ruq7ruq7ruq7ruq7ruq7ruq7ruq7rukBoyCoAQAIAQEdyJEdyJEVSJEVyJAcIDVkFAMgAAAgAwDEcQ1Ikx7IsTfM0T/M00RM90TM9VXRFFwgNWQUAAAIACAAAAAAAwJAMS7EczdEkUVIt1VI11VItVVQ9VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV1TRN0zSB0JCVAAAZAAAjQQYZhBCKcpBCbj1YCDHmJAWhOQahxBiEpxAzDDkNInSQQSc9uJI5wwzz4FIoFURMg40lN44gDcKmXEnlOAhCQ1YEAFEAAIAxyDHEGHLOScmgRM4xCZ2UyDknpZPSSSktlhgzKSWmEmPjnKPSScmklBhLip2kEmOJrQAAgAAHAIAAC6HQkBUBQBQAAGIMUgophZRSzinmkFLKMeUcUko5p5xTzjkIHYTKMQadgxAppRxTzinHHITMQeWcg9BBKAAAIMABACDAQig0ZEUAECcA4HAkz5M0SxQlSxNFzxRl1xNN15U0zTQ1UVRVyxNV1VRV2xZNVbYlTRNNTfRUVRNFVRVV05ZNVbVtzzRl2VRV3RZV1bZl2xZ+V5Z13zNNWRZV1dZNVbV115Z9X9ZtXZg0zTQ1UVRVTRRV1VRV2zZV17Y1UXRVUVVlWVRVWXZlWfdVV9Z9SxRV1VNN2RVVVbZV2fVtVZZ94XRVXVdl2fdVWRZ+W9eF4fZ94RhV1dZN19V1VZZ9YdZlYbd13yhpmmlqoqiqmiiqqqmqtm2qrq1bouiqoqrKsmeqrqzKsq+rrmzrmiiqrqiqsiyqqiyrsqz7qizrtqiquq3KsrCbrqvrtu8LwyzrunCqrq6rsuz7qizruq3rxnHrujB8pinLpqvquqm6um7runHMtm0co6rqvirLwrDKsu/rui+0dSFRVXXdlF3jV2VZ921fd55b94WybTu/rfvKceu60vg5z28cubZtHLNuG7+t+8bzKz9hOI6lZ5q2baqqrZuqq+uybivDrOtCUVV9XZVl3zddWRdu3zeOW9eNoqrquirLvrDKsjHcxm8cuzAcXds2jlvXnbKtC31jyPcJz2vbxnH7OuP2daOvDAnHjwAAgAEHAIAAE8pAoSErAoA4AQAGIecUUxAqxSB0EFLqIKRUMQYhc05KxRyUUEpqIZTUKsYgVI5JyJyTEkpoKZTSUgehpVBKa6GU1lJrsabUYu0gpBZKaS2U0lpqqcbUWowRYxAy56RkzkkJpbQWSmktc05K56CkDkJKpaQUS0otVsxJyaCj0kFIqaQSU0mptVBKa6WkFktKMbYUW24x1hxKaS2kEltJKcYUU20txpojxiBkzknJnJMSSmktlNJa5ZiUDkJKmYOSSkqtlZJSzJyT0kFIqYOOSkkptpJKTKGU1kpKsYVSWmwx1pxSbDWU0lpJKcaSSmwtxlpbTLV1EFoLpbQWSmmttVZraq3GUEprJaUYS0qxtRZrbjHmGkppraQSW0mpxRZbji3GmlNrNabWam4x5hpbbT3WmnNKrdbUUo0txppjbb3VmnvvIKQWSmktlNJiai3G1mKtoZTWSiqxlZJabDHm2lqMOZTSYkmpxZJSjC3GmltsuaaWamwx5ppSi7Xm2nNsNfbUWqwtxppTS7XWWnOPufVWAADAgAMAQIAJZaDQkJUAQBQAAEGIUs5JaRByzDkqCULMOSepckxCKSlVzEEIJbXOOSkpxdY5CCWlFksqLcVWaykptRZrLQAAoMABACDABk2JxQEKDVkJAEQBACDGIMQYhAYZpRiD0BikFGMQIqUYc05KpRRjzknJGHMOQioZY85BKCmEUEoqKYUQSkklpQIAAAocAAACbNCUWByg0JAVAUAUAABgDGIMMYYgdFQyKhGETEonqYEQWgutddZSa6XFzFpqrbTYQAithdYySyXG1FpmrcSYWisAAOzAAQDswEIoNGQlAJAHAEAYoxRjzjlnEGLMOegcNAgx5hyEDirGnIMOQggVY85BCCGEzDkIIYQQQuYchBBCCKGDEEIIpZTSQQghhFJK6SCEEEIppXQQQgihlFIKAAAqcAAACLBRZHOCkaBCQ1YCAHkAAIAxSjkHoZRGKcYglJJSoxRjEEpJqXIMQikpxVY5B6GUlFrsIJTSWmw1dhBKaS3GWkNKrcVYa64hpdZirDXX1FqMteaaa0otxlprzbkAANwFBwCwAxtFNicYCSo0ZCUAkAcAgCCkFGOMMYYUYoox55xDCCnFmHPOKaYYc84555RijDnnnHOMMeecc845xphzzjnnHHPOOeecc44555xzzjnnnHPOOeecc84555xzzgkAACpwAAAIsFFkc4KRoEJDVgIAqQAAABFWYowxxhgbCDHGGGOMMUYSYowxxhhjbDHGGGOMMcaYYowxxhhjjDHGGGOMMcYYY4wxxhhjjDHGGGOMMcYYY4wxxhhjjDHGGGOMMcYYY4wxxhhjjDHGGFtrrbXWWmuttdZaa6211lprrQBAvwoHAP8HG1ZHOCkaCyw0ZCUAEA4AABjDmHOOOQYdhIYp6KSEDkIIoUNKOSglhFBKKSlzTkpKpaSUWkqZc1JSKiWlllLqIKTUWkottdZaByWl1lJqrbXWOgiltNRaa6212EFIKaXWWostxlBKSq212GKMNYZSUmqtxdhirDGk0lJsLcYYY6yhlNZaazHGGGstKbXWYoy1xlprSam11mKLNdZaCwDgbnAAgEiwcYaVpLPC0eBCQ1YCACEBAARCjDnnnHMQQgghUoox56CDEEIIIURKMeYcdBBCCCGEjDHnoIMQQgghhJAx5hx0EEIIIYQQOucchBBCCKGEUkrnHHQQQgghlFBC6SCEEEIIoYRSSikdhBBCKKGEUkopJYQQQgmllFJKKaWEEEIIoYQSSimllBBCCKWUUkoppZQSQgghlFJKKaWUUkIIoZRQSimllFJKCCGEUkoppZRSSgkhhFBKKaWUUkopIYQSSimllFJKKaUAAIADBwCAACPoJKPKImw04cIDUGjISgCADAAAcdhq6ynWyCDFnISWS4SQchBiLhFSijlHsWVIGcUY1ZQxpRRTUmvonGKMUU+dY0oxw6yUVkookYLScqy1dswBAAAgCAAwECEzgUABFBjIAIADhAQpAKCwwNAxXAQE5BIyCgwKx4Rz0mkDABCEyAyRiFgMEhOqgaJiOgBYXGDIB4AMjY20iwvoMsAFXdx1IIQgBCGIxQEUkICDE2544g1PuMEJOkWlDgIAAAAA4AAAHgAAkg0gIiKaOY4Ojw+QEJERkhKTE5QAAAAAALABgA8AgCQFiIiIZo6jw+MDJERkhKTE5AQlAAAAAAAAAAAACAgIAAAAAAAEAAAACAhPZ2dTAAQYOwAAAAAAAOGpbkoCAAAAmc74DRgyNjM69TAzOTk74dnLubewsbagmZiNp4d0KbsExSY/I3XUTwJgkeZdn1HY4zoj33/q9DFtv3Ui1/jmx7lCUtPt18/sYf9MkgAsAGRBd3gMGP4sU+qCPYBy9VrA3YqJosW3W2/ef1iO/u3cg8ZG/57jU+pPmbGEJUgkfnaI39DbPqxddZphbMRmCc5rKlkUMkyx8iIoug5dJv1OYH9a59c+3Gevqc7Z2XFdDjL/qHztRfjWEWxJ/aiGezjohu9HsCZdQBKbiH0VtU/3m85lDG2T/+xkZcYnX+E+aqzv/xTgOoTFG+x7SNqQ4N+oAABSxuVXw77Jd5bmmTmuJakX7509HH0kGYKvARPpwfOSAPySPAc2EkneDwB2HwAAJlQDYK5586N79GJCjx4+p6aDUd27XSvRyXLJkIC5YZ1jLv5lpOhZTz0s+DmnF1diptrnM6UDgIW11Xh8cHTd0/SmbgOAdxcyWwMAAGIrZ3fNSfZbzKiYrK4+tPqtnMVLOeWOG2kVvUY+p2PJ/hkCl5aFRO4TLGYPZcIU3vYM1hohS4jHFlnyW/2T5J7kGsShXWT8N05V+3C/GPqJ1QdWisGPxEzHqXISBPIinWDUt7IeJv/f5OtzBxpTzZZQ+CYEhHXfqG4aABQli72GJhN4oJv+hXcApAJSErAW8G2raAX4NUcABnVt77CzZAB+LsHcVe+Q4h+QB1wh/ZrJTPxSBdI8mgTeAdTsQOoFUEng9BHcVPhxSRRYkKWZJXOFYP6V4AEripJoEjXgA2wJRZHSExmJDm8F0A6gEXsg5a4ZsALItrMB7+fh7UKLvYWSdtsDwFf1mzYzS1F82N1h2Oyt2e76B1QdS0SAsQigLPMOgJS9JRC7hFXA6kUsLFNKD5cA5cTRvgSqPc3Fl99xW3QTi/MHR8DEm6WnvaVQATwRqRKjywQ9BrrhugR2AKTsPQeQckrAOgDOhbTESyrXQ50CkNpXdtWjW7W2/3UjeX3U95gIdalfRAoAmqUEiwp53hCdcCwlg47fcbfzlmQMAgaBkh7c+fcDgF+ifwDXfzegLPcLYJsAAJQArTXjnh/uXGy3v1Hk3pV6/3t5ruW81f6prfbM2Q3WNVy98BwUtbCwhFhAWuPev6Oe/4ZaFQUcgKrVs4defzh1TADA1DEh5b3VlDaECw5b+bPfkKos3tIAue3vJZOih3ga3l6O3PSfIkrLv0PAS86PPdL7g8oc2KteNFKKzKRehOv2gJoFLBPXmaXvPBQILgJon0bbWBszrYZYYwE7jl2j+vTdU7Vpk21LiU0QajPkywAAHqbUC0/YsYOdb4e6BOp7E0cCi04Ao/TgD8ZVAMid6h/A8IeBNkp6/xsAACZELEYIk+yvI6Qz1NN6lIftB/6IMWjWJNOqPTMedAmyaj6Es0QBklJpiSWWHnQ2CoYbGWAmt+0gLQBFKCBnp2QUUQZ/1thtZDBJUpFWY82z34ocorB62oX7qB5y0oPAv/foxH25wVmgIHf2xFOr8leZcBq1Kx3ZvCq9Bga639AxuHuPNL/71YCF4EywJpqHFAX6XF0sjVbuANnvvdLcrufYwOM/iDa6iA468AYAAB6mNBMXcgTD8HSRqJ4vw8CjAlCEPACASlX/APwPOJKl9xQAAAPmnev2eWp33Xgyw3Dvfz6myGk3oyP8YTKsCOvzAgALQi0o1c6Nzs2O2Pg2h4ACIJAgAGP0aNn5x0BDgVfH7u2TtyfDcRIuYAyQhBF/lvSRAttgA6TPbWZA9gaUrZWAUEAA+Dx47Q3/r87HxUUqZmB0BmUuMlojFjHt1gDunnvuX8MImsjSq5WkzSzGS62OEIlOufWWezxWpv6FBgDgJVltfXFYtNAAnqU0xQoD0YLiXo5cF5QV4CnY1tBLAkZCOABAhbk/AM+/AwSCCdlWAAAMcFjS7owb8GVDzveDiZvznbt2tF4bL5odN1YKl88TAEABCZvufq9YCTBtMwVAQUEAwGtNltzSaHvADYC3TxLVjqiRA+OZAMhzcqEgRcAOwoCgvdTxsTHLQEF6+oOb2+PAI8ciPQcXg7pOY+LjxQSv2fjmFuj34gGwz310/bGK6z3xgT887eomWULEaDd04wHetYxdjcgV2SxvSwn0VoZXJRqkRC5ASQ/muVoAUsX7AgAQMBNaVwAAlABRxT/1PmfqLqSRNDbhXb07berpB3b94jpuWEZjBCD2OcdXFpCKEgCDfcFPMw8AAADUwT4lnUm50lmwrpMMhPQIKj6u0E8fr2vGBngMNdIlrZsigjahljud6AFVg+tzXwUnXL3TJLpajaWKA4VAAAAMiFfqJgKAZ08XrtS3dxtQNYcpPvYEG8ClvrQRJgBephwnNWJjtGqmp6VEPSvBe7EBiU3qgJbQAwD4Le8LAMDMhHbNAAAlgK+tFs5O+YyJc9yCnJa3rxLPulGnxwsXV9Fsk2k4PisCAHC8FkwbGE9gJQAAoMnyksj0CdFMZLLgoz8M+FxziwYBgIx+zHiCBAKAlBKNpF1sO9JpVcyEi9ar15YlHgrut5fPJnkdJ6vEwZPyAHQBIEDUrlMcBAAd2KAS0Qq+JwRsE4AJZtMnAD6GnOYwYlOIZvtzUNdjreB7fiMkWI0CmBB6AIAKc38A9osEFlTSGECB+cbeRDC0aRpLHqNPplcK/76Lxn2rpmqyXsYJWRi/FQAAAKBQk9MCAOibrQBQADCDsqpooPutd+05Ce9g6iEdiYXgVmQAI4+4wskEBEiBloNQ6Ki0/KTQ0QjWfjxzi+AeuXKoMjEVfQOZzr0y941qLgM2AExvbZOqcxZ6J6krlrj4y2j9AdgKDx6GnJsVLhbc42uq584+ouSdNBpoCiCVHrz+WzUA/DDtD8ATgA3h0lMCAAzcFv+S+fSSNkeYWlTpb34mf2RfmqqJeMeklhHAfu7VoAEACgAApKRktL+KkQDWMwYCUAAAAHCKsp80xhp91UjqQBw3x45cetqkjQEyu3G9B6N+R650Uq8OVig7wOm6Wun0ea4lKDPoabJs6aLqgbhPzpv4KR4iODilw88ZpY7q1IOMcbASAOAVtmcCnobcrkG4KGS7/ZnskVWRNF9J0RUHKOnByy9WA8Dv6L4AAARMCQUA4GritfVM2lcZfH3Q3T/vZ47J2YHhcmBazjfdyuV25gLAzrc0cwAAAAAYCh6PdwAAAGyWjFW4yScjaWa2mGcofHxWxewKALglWBpLUvwwk+UOh5eNGyUOs1/EF+pZr+ud5OzoGwYdAABg2p52LiSgAY/ZVlOmilEgHn6G3OcwYjzI7vOj1t6xsx4S3lBY96EUQBF6AIBAmPYH4PoGYCoJAADWe+OZJZi7/x76/yH7Lzf9M5XzRKnFPmveMsilQHwVAAAAAKB3LQD8PCIAAADga0QujBLywzeJ4a6Z/ERVBAUlAEDqvoM7BQBAuAguzFqILtmjH3Kd4wfKobnOhA3z85qWoRPm9hwoOHoDAAlCbwDAA56FHAuXflHo3fe2ttG9XUDeA9YmYCBQ0oPr/1QC8IvuCwAAApbUAQCK22MmE3O78VAbHQT9PIPNoT9zNc3l2Oe7TAVLANBufT8MAQAAAGzT4PS8AQAAoELGHb2uaCwwEv1EWhFriUkbAaAZ27/fVZnTZXbWz3BwWpjUaMZKRj7dZ0J//gUeTdpVEwAAZOFsNxKAjQSgA+ABPoY8Jj5y2wje81jsXc/1TOQWTDYZBmAkNDiqVwuA2NJ9AQAAEBKAt9Vrsfs/2N19MO91S9rd8EHTZHnzC5MYmfQEACy/FBcAAADA5c4gi4z8RANs/m6FNXVo9DV46JG1BBDukqlw/Va5G7QbuGVSI+2aZaoLXJrdVj2zlC9Z5QEAEFz/5QzgVZwAAAAA/oXcxyC6WfTu+09Ve/c766J4VTAGUFmA51+VANKi/QPoPwYgYAkA715OH4S0s5KDHvj99MMq8TPFc3roKZnGOoT1bmIhVgc7XAMBAAAAAMAW1VbQw3gapzOpJd+Kd2fc4iSO62fJv9+movui1wUNPAj059N3OVxzk4gV73PmE8FIA2F5mRq37Evc76vLXfF4rD5UJJAw46hW6LZCb5sNLdx+kzMCAAB+hfy95+965ZCLP7B3/VlTHCvDEKtQhTm4KiCgAEAbrfbWTPssAAAAXpee1tVrozYYn41wD1aeYtkKfswN5/SXPO0JDnhO/4laUortv/s412fybe/nONdncoCHnBVliu0CQGBWlPY/5Kwom2L/kruPM6Q7oz4tvDQy+bZ3HzOi+gNHA4DZEgA="),i.resource.add("hterm/images/icon-96","image/png;base64","iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAAuIwAALiMBeKU/dgAAFKhJREFUeNrtXXlsXMd5/30z8649uDzEmxRFibIsOXZ8VInTJFYSW3actE1ctWkctEF6I0VRFEWAoihQoAjQFmiBogWaIEADFCmQXklto04TO0ndWI4bxZalWHJinTYtkRJFkctzl9zd977+8c49+UjuipbCD1y+9+ae75vvmJlv3gO2YRu2YRu2YRu2YUuAtroBN3nfeKsaSXWurarvRvUrTnlccV/5a3lDReRKFdc4Za6nzvW2b7OIpwZh7N37iHYiPztyvy4iqA00Tng/WXH1f3GQsFki0Qbz+cAV12jeRkTwwUd2yfsVI89OjbLrwnoJILw8EoAOIAFgLwDTCxcAJBEJIiIAgoiICAIgIgIBJGpdPRCRq3sPCBAJAii8QgAk/PIFkSBBQvh3QRkQXtECBKpxH9br5hMikhcg4QV4dYkgARFBSkmlUmnp7LmLX8rl8q95OPKJ0DQCkPeTEcQrAD179+7+7LsP3vtJw9A1ZvbwFfQM/r1/AyD64KLBv5JHIaIwIpI5GIbevd82r0I3OMjvJfOo5ffCqw1EhIRlQQi3a37p0atfTVB22PhIuHt95tnnBr75zHN/AGASoYjyxVVTCOCPfOWN9sGfue+df/L4r3z8MSGUOv3aWYDIq43BEXXEQRPCQK5qFleFMdduOwMV3WKUBXFVyVXhtm3jrjtvw13vuL1uPXGAAUghkGlLPXJ9ZvZzL738oz8HsOhFF2u3aH0E8JEvAWhe+n2PHD70Z7/xmccfLBSK9M1nX0AqnYFSKiB7fIiOzg3k21BeYHW1gMkr1/DBB+6HkGLTxmRfbxf9+qc/8WszM9lzF99468twxZCAq5wbQiMCREWPBkDXde3eI489+he/+1u/et/c3AK+/uSzyLTvgK7rm+tBE4CZA1HRaFT7oqNQKCCdsqBp61GD9eHBD77XunJ16o/+6q+/cLJYLP2fhzfGGkRYiwBRK2fnL/3iRz7/uT/8nfuuz2Txla8+hXRbJ6QUKBaLuJmgVLJRKuShlIBpatiEFApACIFHH/lA//NHj33qe0ePvQJXEa/JnHEIoABYd925/zOPf+JjBxMJC//yxX+GYaZgGAZse00ue1uByyWMQrGEldVVKCWbQgAA6OnegQP7997zvaPH2gGsIpQidWuoRwA/o2/bDz70off+nFIa/fczz2Pq2hzSbRksLCxsNT43BI7jYCW/ihd/cBKWZTZhQcFV9qMjQ0gmEwm4hkqsOVEjDogq37bOjvaElBKLizmYVgKWZW01HjeOLGaAbUipoJTWHAKwa4KYpmHCJUB0lQCoU0scK0gCMJRSqqOjHel0EqZpIpFIbDUeNwwOM2y7gO4dnWhrSzVFBDEzMpkULNM04BIgFsS1ggxNUzKVSiCRsEBEUEoFiRq2v5HNXjMd18pSHVeZnuuniZaopIIQBAIhnUqgvb1tU3OBKFiWCdMydABWBH+bIoCvA3RNU9KyDOiahG2XAAAzszO4NHkZINcKALuddRHi3VWFReLcWy8dhxO5aFpvkhamD5HFwQQuStgwLPpsOza45GD/yD4MDw2jVCrCMHSkUwmws3kCMADD0GCZpialMG3bia4trVsJ+xkJAKSUStM0oWsSQrgTGdu2MXllEmezF/HRhz+C4b6hyEgrnyjVLLzhcho1iFsDiGomOzt+Ds/8z7PIzmfR39eP1dVVSOEijR0nRsFrg1ISpmkoQ9cTufxKrBbHmoUoJZWmlPDXRZgdMDNsx8HuXbtx3zvvhRQKTdFmLQACoT2dwY9efRWlvA1m1xJy2IEggkPrnUvXB9M0lGkaiVx+xR/ADQuPRQAppaY0JfzOBB0joFAs4Oyb59E0Y7pF4DDDdmw47LgygQHbbs7Ij4JpGMIwjGRFcF0xFJcDdE0pUb3YQ1hYWsDFSxff7vgHMyO3kkMGiaAPzScAwzB0YVlmAuHo3zQHkKaUppTHAUQBLQnAYm4J41feCldAGeHe2FaCq9fdXQMP8qt5sB6OlGbP4pkBwzBgGHoKMdcIG82Ew0RK6UqTxHAJEHSBCLmVHCavXwUcwGpXMJIS2YnVhrq01cAOQxkC7YMG5i6vwi65LV4trIK10GJyHLvpTTR0DZZlJtEEMxR+IVJJTSlFAFdZL47joFgswrEZ3X06Dv3eAH787Vm8/t0s8nMld9PjBhHCN1G7dlm490g3rIzCt/5yHIWiA5dxGQ5HOcBpatuYGZquwTSNTXMAogVoSukuAXwlzFUpSRCyl1cx+VoOBz/Zi93vyeDE16bx1iuLsIsOSLSWCuwwEh0a9h/uxDs+2gWnxDj+79dQKjhlg4bZl/vkiaDmtkvXNFimmURMJ4VYOkBpSldSug91TDYiIDdXwtEvTeDNlxZw3y/34PDnduLCi/M4+eQ0Zt5cCdI1G/FKFxg5mME9R7rRMWTi/AtzOPnENLKXV2tyrA+lFqzkKk3BNI0k3BWE5swDXA7wlm0bFEkEODbjzWPzmDqTw4HDnbjz57swdHcKp56+jte/k0VurtRUInSPJXD3Y90YfXcbZt7I49t/M45LJ5ZgF7lMAbsN9BfiXE5uthXEzFBK+TpAhrVunAAEeEp4DQ4oyyQI+fkSjn/tGsZfWcA9j3Xjvk/0Yte72vD8FyZw/Y2VauRsAA483ImDn+oF28DL/zqFn3wni/xcESSoTvkExxdBBNilFnCAlLBMM+Hhdk3HtThoIE1TulTuDlscAgAuNxCA6XN5HP+Pa8heWsHAgSQyA0ZzFr8IGHhHCukeHedfmMOpb8wgly021jXkTsjYm9C0YjNJSgFvHuAP7qbMA3TpcwAo1ooDOwwjKTH2QDvu/lg3lCnwg69cxcSpJc8dZJPgACeeuAYhgf0Pd6JjyMArX5/GlZ8sg23U5TCf+ESt0QFCCFiWYcF131kT4lhBpDSXAMy+Eq1PAXYAIYHBu9O490g3evclMf7yAk785zSuX8i7Y68ZOoCA6xdW8N2/u4TRd2dw75FuPPqnu3Dmu7N49RszWLiyGvgGRfM47HjNdzmg6U6kRLAs02wGAXwieBwgggoaMUD7oI67fmEHbjvUgfmrBTz395fw5ksLKK26pmgzO0wCsFcZ576XxeTpZdzxaCfu+HAXRg624eST0zh/dB6FXDjK3TUgVwQREUot0AFCEEx3U8ZoBgEAVwdoUnheFnWGLztA1y4Tj/zxCIyUwI+emsaPn5nF8qyvFFs0D/C805Zni3jpq1MY/+EC7jnSg/f+5gB69yXw/BcnYBfDIeMrYaLW6ACAYFmmjpi7YqpmCRWMq2maLgIOqFcUQ7MErp5ZxqmnZ0Jx0+IJWNBIr5qpszl852/fwp73ZNC3PwmhKCQAUWCGAu5MuNlriEQEy6zaFauLhHg6QClNejte9YQICcL1i3k8/4UJd/bZZHETGwGCYK8yzjw3h4vHFmAXym19dxfNE0EtcqkxTVPTdd0qFApRPNaEtcxQAiA0TelCeKvRDTSoXWTYJb5ho75Rq0kApbwDrphrOREd0Ip5AOBuyhiGHsttpB4BohiUmqZpgel4Mx1qournYCbcUg4wpLccUasVZVCLAJUZhKaUTp5hvTWCpXnAcEIOsG00fxuVYRq6MA3dX5JuCGt5xhEAqWkq4IC4M+GYbV0/bLJ6h92dmlaJIG9ThkyzbE9gQ0rYB6lpSgUc0CT8C0nQzPUvCDk2o7iysUU0gmsFcSCCnJZspeq6BtPUk3HSxrGChKZpmu/U2gwKsMPo2Z/E+397AELFL48EMHFqGd//x0k49gYwR+VWUGvmAQxD12GZZgox1tpiuSa6HOCJIJ8umxo5hELOxvSFPEiuIxcR5idXNzVqqwnQXBZghr8r5m/KbHgxzs+oNE1T/sBvhggiAcyOr+B//+FyUzsfD0ERM7RFIkjTgj2BNTmgnhUUXcd2N4SpBUp4C6DVHABmaEr5+8L+rtiGlTADUK4I8kJ8XeDDes/KAw37zPUSrYUn5tpJOJqE4ThOSACn+RzAAKSU/p7AmgI2phWkyeB4ZqQiAsFZtkFOZI+Ao7SgytVgeJoQVBkf+HRGrxVhVBFGqHj24imSP3psFUAylYCSEsWSDdu2y86WNQukuytmIdwVq3tSJo5zrtI0JUMjiAJzbrB/AA8YRnCWNnLON3JuFyEiIj8AZen9Vc0wL0JkRtMgGlfjDHBwDSLKzwp7dRZL+aYivZwAApZlWnAPt0TxuSYBKocCA1BKUxIgMBy0taUAOCiVikilUkin0/FbFnEz3xxQLGMg6rpemX9paQm37x2DlLLMU6IZIITwOUCraEAVERotR4ccoDQJAI7DGBrsx8MP3o+nv/V9dHf3BAc1IjguO00d+OpHffYrw5ir09WMi5wd4PC8QLDHXHGmIHr1G8dgsOOgoyOJB973LjR/KSLYFYtuymxYCZOUUtM8z2i/w48cPgTTMPDD46eQX1mG768Smqq+qAFEROwIQSASZVdBAiQIQggI8q7+c/AjSCEgZBgm/TgZ3stovKy4RsqzLBMjOweRSiXhNOFwRi0CmJbhE2BTm/KspNQ0pcrMVaUkDj/0fnzg0P0olkqhs+4a71xoeA0LKCurIrhmf2rJzca9cl0Um3U0qZoAqNwV25AS9pEdnA2IguM4kFLC95bYLPiiJYIjtEI83BggWKapCSEsx3E2txinlPJOx9z8k7AbBUTBSRkrl8tv+GUdDIClksphFsvL+ZacKLn1gL3V0DICrOuQXvSohUNE2rnz41QqcdPNtVsRGEBbOgnbdkjTVKUZWgWqRn4fHABOoVBcNE2ztHPnoL7NAfHANHS8dPzE0sxMdsILqvsGrXocEGRYXFx67fUz5y729e7Yw4ADjumb2AJoWq2xCtrwdh0TQRz74YmLpZI9HitHjTCCa0KZANKGoX88lUo+pCmlhBASYMmAjE76Ea4CoNyerDYuUZHRXwiq2Pan8r/yNkcMAiqvv+pwFFWmpQqbl6isaqoVVtajsJfB0piXwCEidhyHp6/PHpudnfs8gDm4b07xX+xXBnEW43jv2Ojo73/20x+ezc47Fy6MN/IOXZ+ZxBvIE6eeCovbn0FXzjXqt4urEsVlGsPQ8NFHP0RP/dez4sv/9G8ZuK8wq2uKxtkRs+44cNs7e3t61NEXXwVIVUye1o+f+nnXsT1ZlrwiH9dKjLp+TZVhoRNy/Jb5PrPjlyfAzDiwf28vgD4AV+AuS5dq5au3FuS/I0IB6B3bM7L7wsW3IJSBjvb2ls0gb3YgIiym0hi/NImB/p5Mpi09Or+weBqu+CliHYtx/ruCpGWZu3cOD/Sceu08ioUiFhcX12rHTy0QEXTdwKVLV7B/326tt3fHnvmFRQMu8v03aAERIjTyC5IAtJGdg/s7OjLmbHYBXV29TVt6uFVB13VMXZtFwrIwMNA3dvbcGxaAFYQb9LE5QAFI7Nk9cgdAyOeL2CFlS8XPrbDUoZTC4lIexVIJw0P9IwDScBVxzVOT9QggvbiuvWOjY9nsPBxmLC0tbc+G1wApJWyHMTObxcjwYB+ALgBTCN8+WTYpa0QAQUTDu0eH+ycmp5BOtyGVSm0r4Big6wYmJqYwNNTfIaXss237DEIRVMYFUQIEnnDwOGBwoG9ff19P+tXT52BZiVtCRLS6D8wM0zRx6fJV/Oz991jdOzp3Xp2a9iVKlTlayQFR89PYPTp8wLJMys4tItNuYH5+fqvx97YHIQQ0XcfUtRmkUgnq7+8duTo1raGOj1AlB0TnAOm9Y6O35XJ5MAskk8lt8bMOmMzOwHEYw0P9IydOnjYR6oC6BADK5wD9e8d2DV65Og3dMKGUuuUUcCvFkcPA/PwCRnYODAJoA3AdNRy1anGABCA7O9vHRnYOdrx84sdgBubm5rY5ICa4m/8Sk1enMTQ00A2gG8BbKOcCBmpzgASgj44M7+/oaJfXpmfR3t5xy07AWsUFhUIRlyemcOcde9OpVHJgaWn5FawhgqLfhkmOje26nZmRyxXQtePmfU3xVoFpmbg2PYtMW1rr6+3eeX5pOaqEgyWJShHkJ9px297RXddnsiiWbCwuLv5UiJ9aX/bYSBlE7nV5OYe2dAqDA727zl94s5IAZSIoKv9FImHt2rN7pDs7N4/l5WVIOesRwH8Tbs2qgwvXi6uKr9PB+u8ujomSeKlonZG0RmRl6AcPHcTAQC8GB/uGEb5RPToh46j3bhCxc3hg39Bgn9nbswPpVBK53ErZR2tqOV358eVx4X2wzRRx2K103q12yEXo5Bvcry99I4ewuI5kYdsj6SIOxV5omXOwphS6ujoghMDw0EAvXEvoSgTfAKrfaUMA9F0jQ7d3d3chk0njoQ+9b83NiK0VTnHendOqdnLdIIY7K3YJ0N8ppeixbecMYixFpHaNDI+mU0n3pdl8a9n+NxJ87ujv7030dO8YvHL1mr8zWsYBlZrZymTSKaUlQNLAVo/vmxsIxCV0tLeJzs72bo8AboSH71qroStLS8u567PzyK86G9ox32yjW1lU6/sTrYFhmQqWZSGdSmZqpVZlqV3IzcxkZ6evTWFpebWmT2+tj6MF76OtdbSL61gyzDXTlZ0hKE9Q9rEGrrK8uELec1Vc+bcJIvfRwyM1wpiry2sU5opvRqYtCcuUKBSKJYQf/QzcFX0CRN0Rc8dPnD5qJZ7okVKCHYd8V27/RRcM9gAAewc/2bsLH+GnCf+Xp/PmFsFtEBumLqss8oTIX9lzUFCQJ9rAijRV92VtjTxHyquqpKzLjn+Fu+xsKyULzLzyxhuXnkSNL66WnYRB+KnCDNydHP/dZzpCU7WWUuAGzxwjvlYZ9cLWm4cbxMUpD2vkqQzzkVwEUIC7Gb/iXQvez3fSYlWR0YZLuUUvkYHw453+JGK9EKdTrdT0Db2TW9CO6DeGSyhHetWXVqOfvXAq7m0vY9xvBW+28RvJ3ygP4ca3KcpJUU7wER/VAQBqK2H/DRZ+hspDe81EYKsQsZV1Vg7oKNKjyGegsXNuFOE302Ywr/G8Fe2pq4fqIfZmQvjbHbZ6AGzDNmzDNmzD2xT+H+5UT7Tyxc2HAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE2LTA2LTMwVDExOjUwOjAyLTA0OjAwOaSkCgAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxMy0xMS0wMVQxMDozODoyNC0wNDowMNba8BsAAAAASUVORK5CYII="),i.resource.add("hterm/concat/date","text/plain","Tue, 22 Aug 2017 06:42:31 +0000"),i.resource.add("hterm/changelog/version","text/plain","1.70"),i.resource.add("hterm/changelog/date","text/plain","2017-08-16"),i.resource.add("hterm/git/HEAD","text/plain","git rev-parse HEAD"),e.exports={hterm:o,lib:i}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.CHARSETS={},t.DEFAULT_CHARSET=t.CHARSETS.B,t.CHARSETS[0]={"`":"◆",a:"▒",b:"\t",c:"\f",d:"\r",e:"\n",f:"°",g:"±",h:"",i:"\v",j:"┘",k:"┐",l:"┌",m:"└",n:"┼",o:"⎺",p:"⎻",q:"─",r:"⎼",s:"⎽",t:"├",u:"┤",v:"┴",w:"┬",x:"│",y:"≤",z:"≥","{":"π","|":"≠","}":"£","~":"·"},t.CHARSETS.A={"#":"£"},t.CHARSETS.B=null,t.CHARSETS[4]={"#":"£","@":"¾","[":"ij","\\":"½","]":"|","{":"¨","|":"f","}":"¼","~":"´"},t.CHARSETS.C=t.CHARSETS[5]={"[":"Ä","\\":"Ö","]":"Å","^":"Ü","`":"é","{":"ä","|":"ö","}":"å","~":"ü"},t.CHARSETS.R={"#":"£","@":"à","[":"°","\\":"ç","]":"§","{":"é","|":"ù","}":"è","~":"¨"},t.CHARSETS.Q={"@":"à","[":"â","\\":"ç","]":"ê","^":"î","`":"ô","{":"é","|":"ù","}":"è","~":"û"},t.CHARSETS.K={"@":"§","[":"Ä","\\":"Ö","]":"Ü","{":"ä","|":"ö","}":"ü","~":"ß"},t.CHARSETS.Y={"#":"£","@":"§","[":"°","\\":"ç","]":"é","`":"ù","{":"à","|":"ò","}":"è","~":"ì"},t.CHARSETS.E=t.CHARSETS[6]={"@":"Ä","[":"Æ","\\":"Ø","]":"Å","^":"Ü","`":"ä","{":"æ","|":"ø","}":"å","~":"ü"},t.CHARSETS.Z={"#":"£","@":"§","[":"¡","\\":"Ñ","]":"¿","{":"°","|":"ñ","}":"ç"},t.CHARSETS.H=t.CHARSETS[7]={"@":"É","[":"Ä","\\":"Ö","]":"Å","^":"Ü","`":"é","{":"ä","|":"ö","}":"å","~":"ü"},t.CHARSETS["="]={"#":"ù","@":"à","[":"é","\\":"ç","]":"ê","^":"î",_:"è","`":"ô","{":"ä","|":"ö","}":"ü","~":"û"}},function(e,t,r){/**
+ * Implements the attach method, that attaches the terminal to a WebSocket stream.
+ * @module xterm/addons/attach/attach
+ * @license MIT
+ */
+!function(t){e.exports=t(r(0))}(function(e){"use strict";var t={};return t.attach=function(e,t,r,i){r=void 0===r||r,e.socket=t,e._flushBuffer=function(){e.write(e._attachSocketBuffer),e._attachSocketBuffer=null,clearTimeout(e._attachSocketBufferTimer),e._attachSocketBufferTimer=null},e._pushToBuffer=function(t){e._attachSocketBuffer?e._attachSocketBuffer+=t:(e._attachSocketBuffer=t,setTimeout(e._flushBuffer,10))},e._getMessage=function(t){i?e._pushToBuffer(t.data):e.write(t.data)},e._sendData=function(e){t.send(e)},t.addEventListener("message",e._getMessage),r&&e.on("data",e._sendData),t.addEventListener("close",e.detach.bind(e,t)),t.addEventListener("error",e.detach.bind(e,t))},t.detach=function(e,t){e.off("data",e._sendData),(t=void 0===t?e.socket:t)&&t.removeEventListener("message",e._getMessage),delete e.socket},e.prototype.attach=function(e,r,i){return t.attach(this,e,r,i)},e.prototype.detach=function(e){return t.detach(this,e)},t})},function(e,t,r){/**
+ * Fit terminal columns and rows to the dimensions of its DOM element.
+ *
+ * ## Approach
+ * - Rows: Truncate the division of the terminal parent element height by the terminal row height.
+ *
+ * - Columns: Truncate the division of the terminal parent element width by the terminal character
+ * width (apply display: inline at the terminal row and truncate its width with the current
+ * number of columns).
+ * @module xterm/addons/fit/fit
+ * @license MIT
+ */
+!function(t){e.exports=t(r(0))}(function(e){var t={};return t.proposeGeometry=function(e){if(!e.element.parentElement)return null;var t,r,i,o,s=window.getComputedStyle(e.element.parentElement),n=parseInt(s.getPropertyValue("height")),a=Math.max(0,parseInt(s.getPropertyValue("width"))-17),l=window.getComputedStyle(e.element),h=n-(parseInt(l.getPropertyValue("padding-top"))+parseInt(l.getPropertyValue("padding-bottom"))),c=a-(parseInt(l.getPropertyValue("padding-right"))+parseInt(l.getPropertyValue("padding-left"))),u=(e.rowContainer,e.rowContainer.firstElementChild),d=u.innerHTML;return u.style.display="inline",u.innerHTML="W",i=u.getBoundingClientRect().width,u.style.display="",t=u.getBoundingClientRect().height,u.innerHTML=d,r=parseInt(h/t),o=parseInt(c/i),{cols:o,rows:r}},t.fit=function(e){var r=t.proposeGeometry(e);r&&e.resize(r.cols,r.rows)},e.prototype.proposeGeometry=function(){return t.proposeGeometry(this)},e.prototype.fit=function(){return t.fit(this)},t})},function(e,t,r){/**
+ * Fullscreen addon for xterm.js
+ * @module xterm/addons/fullscreen/fullscreen
+ * @license MIT
+ */
+!function(t){e.exports=t(r(0))}(function(e){var t={};return t.toggleFullScreen=function(e,t){var r;r=void 0===t?e.element.classList.contains("fullscreen")?"remove":"add":t?"add":"remove",e.element.classList[r]("fullscreen")},e.prototype.toggleFullscreen=function(e){t.toggleFullScreen(this,e)},t})},function(e,t,r){/**
+ * This module provides methods for attaching a terminal to a terminado WebSocket stream.
+ *
+ * @module xterm/addons/terminado/terminado
+ * @license MIT
+ */
+!function(t){e.exports=t(r(0))}(function(e){"use strict";var t={};return t.terminadoAttach=function(e,t,r,i){r=void 0===r||r,e.socket=t,e._flushBuffer=function(){e.write(e._attachSocketBuffer),e._attachSocketBuffer=null,clearTimeout(e._attachSocketBufferTimer),e._attachSocketBufferTimer=null},e._pushToBuffer=function(t){e._attachSocketBuffer?e._attachSocketBuffer+=t:(e._attachSocketBuffer=t,setTimeout(e._flushBuffer,10))},e._getMessage=function(t){var r=JSON.parse(t.data);"stdout"==r[0]&&(i?e._pushToBuffer(r[1]):e.write(r[1]))},e._sendData=function(e){t.send(JSON.stringify(["stdin",e]))},e._setSize=function(e){t.send(JSON.stringify(["set_size",e.rows,e.cols]))},t.addEventListener("message",e._getMessage),r&&e.on("data",e._sendData),e.on("resize",e._setSize),t.addEventListener("close",e.terminadoDetach.bind(e,t)),t.addEventListener("error",e.terminadoDetach.bind(e,t))},t.terminadoDetach=function(e,t){e.off("data",e._sendData),(t=void 0===t?e.socket:t)&&t.removeEventListener("message",e._getMessage),delete e.socket},e.prototype.terminadoAttach=function(e,r,i){return t.terminadoAttach(this,e,r,i)},e.prototype.terminadoDetach=function(e){return t.terminadoDetach(this,e)},t})},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=r(27),o="undefined"==typeof navigator,s=o?"node":navigator.userAgent,n=o?"node":navigator.platform;t.isFirefox=!!~s.indexOf("Firefox"),t.isMSIE=!!~s.indexOf("MSIE")||!!~s.indexOf("Trident"),t.isMac=i.contains(["Macintosh","MacIntel","MacPPC","Mac68K"],n),t.isIpad="iPad"===n,t.isIphone="iPhone"===n,t.isMSWindows=i.contains(["Windows","Win16","Win32","WinCE"],n),t.isLinux=n.indexOf("Linux")>=0},function(e,t,r){"use strict";function i(e,t){if(null==e.pageX)return null;for(var r=e.pageX,i=e.pageY;t&&t!==self.document.documentElement;)r-=t.offsetLeft,i-=t.offsetTop,t="offsetParent"in t?t.offsetParent:t.parentElement;return[r,i]}function o(e,t,r,o,s,n){var a=i(e,t);return a[0]=Math.ceil((a[0]+(n?r.width/2:0))/r.width),a[1]=Math.ceil(a[1]/r.height),a[0]=Math.min(Math.max(a[0],1),o+1),a[1]=Math.min(Math.max(a[1],1),s+1),a}Object.defineProperty(t,"__esModule",{value:!0}),t.getCoordsRelativeToElement=i,t.getCoords=o,t.getRawByteCoords=function(e,t,r,i,s){var n=o(e,t,r,i,s),a=n[0],l=n[1];return a+=32,l+=32,{x:a,y:l}}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=r(3),o=function(){function e(e){this.elem=e,i.hterm.defaultStorage=new i.lib.Storage.Memory,this.term=new i.hterm.Terminal,this.term.getPrefs().set("send-encoding","raw"),this.term.decorate(this.elem),this.io=this.term.io.push(),this.term.installKeyboard()}return e.prototype.info=function(){return{columns:this.columns,rows:this.rows}},e.prototype.output=function(e){null!=this.term.io&&this.term.io.writeUTF8(e)},e.prototype.showMessage=function(e,t){this.message=e,t>0?this.term.io.showOverlay(e,t):this.term.io.showOverlay(e,null)},e.prototype.removeMessage=function(){this.term.io.showOverlay(this.message,0)},e.prototype.setWindowTitle=function(e){this.term.setWindowTitle(e)},e.prototype.setPreferences=function(e){var t=this;Object.keys(e).forEach(function(r){t.term.getPrefs().set(r,e[r])})},e.prototype.onInput=function(e){this.io.onVTKeystroke=function(t){e(t)},this.io.sendString=function(t){e(t)}},e.prototype.onResize=function(e){var t=this;this.io.onTerminalResize=function(r,i){t.columns=r,t.rows=i,e(r,i)}},e.prototype.deactivate=function(){this.io.onVTKeystroke=null,this.io.sendString=null,this.io.onTerminalResize=null,this.term.uninstallKeyboard()},e.prototype.reset=function(){this.removeMessage(),this.term.installKeyboard()},e.prototype.close=function(){this.term.uninstallKeyboard()},e}();t.Hterm=o},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){this.url=e,this.protocols=t}return e.prototype.create=function(){return new o(this.url,this.protocols)},e}();t.ConnectionFactory=i;var o=function(){function e(e,t){this.bare=new WebSocket(e,t)}return e.prototype.open=function(){},e.prototype.close=function(){this.bare.close()},e.prototype.send=function(e){this.bare.send(e)},e.prototype.isOpen=function(){return this.bare.readyState==WebSocket.CONNECTING||this.bare.readyState==WebSocket.OPEN},e.prototype.onOpen=function(e){this.bare.onopen=function(t){e()}},e.prototype.onReceive=function(e){this.bare.onmessage=function(t){e(t.data)}},e.prototype.onClose=function(e){this.bare.onclose=function(t){e()}},e}();t.Connection=o},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.protocols=["webtty"],t.msgInputUnknown="0",t.msgInput="1",t.msgPing="2",t.msgResizeTerminal="3",t.msgUnknownOutput="0",t.msgOutput="1",t.msgPong="2",t.msgSetWindowTitle="3",t.msgSetPreferences="4",t.msgSetReconnect="5";var i=function(){function e(e,t,r,i){this.term=e,this.connectionFactory=t,this.args=r,this.authToken=i,this.reconnect=-1}return e.prototype.open=function(){var e,r,i=this,o=this.connectionFactory.create(),s=function(){o.onOpen(function(){var r=i.term.info();o.send(JSON.stringify({Arguments:i.args,AuthToken:i.authToken}));var s=function(e,r){o.send(t.msgResizeTerminal+JSON.stringify({columns:e,rows:r}))};i.term.onResize(s),s(r.columns,r.rows),i.term.onInput(function(e){o.send(t.msgInput+e)}),e=setInterval(function(){o.send(t.msgPing)},3e4)}),o.onReceive(function(e){var r=e.slice(1);switch(e[0]){case t.msgOutput:i.term.output(atob(r));break;case t.msgPong:break;case t.msgSetWindowTitle:i.term.setWindowTitle(r);break;case t.msgSetPreferences:var o=JSON.parse(r);i.term.setPreferences(o);break;case t.msgSetReconnect:var s=JSON.parse(r);console.log("Enabling reconnect: "+s+" seconds"),i.reconnect=s}}),o.onClose(function(){clearInterval(e),i.term.deactivate(),i.term.showMessage("Connection Closed",0),i.reconnect>0&&(r=setTimeout(function(){o=i.connectionFactory.create(),i.term.reset(),s()},1e3*i.reconnect))}),o.open()};return s(),function(){clearTimeout(r),o.close()}},e}();t.WebTTY=i},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=r(0),o=r(3);i.loadAddon("fit");var s=function(){function e(e){var t=this;this.elem=e,this.term=new i,this.message=e.ownerDocument.createElement("div"),this.message.className="xterm-overlay",this.messageTimeout=2e3,this.resizeListener=function(){t.term.fit(),t.term.scrollToBottom(),t.showMessage(String(t.term.cols)+"x"+String(t.term.rows),t.messageTimeout)},this.term.on("open",function(){t.resizeListener(),window.addEventListener("resize",function(){t.resizeListener()})}),this.term.open(e,!0),this.decoder=new o.lib.UTF8Decoder}return e.prototype.info=function(){return{columns:this.term.cols,rows:this.term.rows}},e.prototype.output=function(e){this.term.write(this.decoder.decode(e))},e.prototype.showMessage=function(e,t){var r=this;this.message.textContent=e,this.elem.appendChild(this.message),this.messageTimer&&clearTimeout(this.messageTimer),t>0&&(this.messageTimer=setTimeout(function(){r.elem.removeChild(r.message)},t))},e.prototype.removeMessage=function(){this.message.parentNode==this.elem&&this.elem.removeChild(this.message)},e.prototype.setWindowTitle=function(e){document.title=e},e.prototype.setPreferences=function(e){},e.prototype.onInput=function(e){this.term.on("data",function(t){e(t)})},e.prototype.onResize=function(e){this.term.on("resize",function(t){e(t.cols,t.rows)})},e.prototype.deactivate=function(){this.term.off("data"),this.term.off("resize"),this.term.blur()},e.prototype.reset=function(){this.removeMessage(),this.term.clear()},e.prototype.close=function(){window.removeEventListener("resize",this.resizeListener),this.term.destroy()},e}();t.Xterm=s},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t,r){this.textarea=e,this.compositionView=t,this.terminal=r,this.isComposing=!1,this.isSendingComposition=!1,this.compositionPosition={start:null,end:null}}return e.prototype.compositionstart=function(){this.isComposing=!0,this.compositionPosition.start=this.textarea.value.length,this.compositionView.textContent="",this.compositionView.classList.add("active")},e.prototype.compositionupdate=function(e){var t=this;this.compositionView.textContent=e.data,this.updateCompositionElements(),setTimeout(function(){t.compositionPosition.end=t.textarea.value.length},0)},e.prototype.compositionend=function(){this.finalizeComposition(!0)},e.prototype.keydown=function(e){if(this.isComposing||this.isSendingComposition){if(229===e.keyCode)return!1;if(16===e.keyCode||17===e.keyCode||18===e.keyCode)return!1;this.finalizeComposition(!1)}return 229!==e.keyCode||(this.handleAnyTextareaChanges(),!1)},e.prototype.finalizeComposition=function(e){var t=this;if(this.compositionView.classList.remove("active"),this.isComposing=!1,this.clearTextareaPosition(),e){var r={start:this.compositionPosition.start,end:this.compositionPosition.end};this.isSendingComposition=!0,setTimeout(function(){if(t.isSendingComposition){t.isSendingComposition=!1;var e=void 0;e=t.isComposing?t.textarea.value.substring(r.start,r.end):t.textarea.value.substring(r.start),t.terminal.handler(e)}},0)}else{this.isSendingComposition=!1;var i=this.textarea.value.substring(this.compositionPosition.start,this.compositionPosition.end);this.terminal.handler(i)}},e.prototype.handleAnyTextareaChanges=function(){var e=this,t=this.textarea.value;setTimeout(function(){if(!e.isComposing){var r=e.textarea.value.replace(t,"");r.length>0&&e.terminal.handler(r)}},0)},e.prototype.updateCompositionElements=function(e){var t=this;if(this.isComposing){var r=this.terminal.element.querySelector(".terminal-cursor");if(r){var i=this.terminal.element.querySelector(".xterm-rows").offsetTop+r.offsetTop;this.compositionView.style.left=r.offsetLeft+"px",this.compositionView.style.top=i+"px",this.compositionView.style.height=r.offsetHeight+"px",this.compositionView.style.lineHeight=r.offsetHeight+"px";var o=this.compositionView.getBoundingClientRect();this.textarea.style.left=r.offsetLeft+"px",this.textarea.style.top=i+"px",this.textarea.style.width=o.width+"px",this.textarea.style.height=o.height+"px",this.textarea.style.lineHeight=o.height+"px"}e||setTimeout(function(){return t.updateCompositionElements(!0)},0)}},e.prototype.clearTextareaPosition=function(){this.textarea.style.left="",this.textarea.style.top=""},e}();t.CompositionHelper=i},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=r(2),o=r(4),s=function(){function e(e){this._terminal=e}return e.prototype.addChar=function(e,t){if(e>=" "){var r=n(t);this._terminal.charset&&this._terminal.charset[e]&&(e=this._terminal.charset[e]);var i=this._terminal.y+this._terminal.ybase;if(!r&&this._terminal.x)return void(this._terminal.lines.get(i)[this._terminal.x-1]&&(this._terminal.lines.get(i)[this._terminal.x-1][2]?this._terminal.lines.get(i)[this._terminal.x-1][1]+=e:this._terminal.lines.get(i)[this._terminal.x-2]&&(this._terminal.lines.get(i)[this._terminal.x-2][1]+=e),this._terminal.updateRange(this._terminal.y)));if(this._terminal.x+r-1>=this._terminal.cols)if(this._terminal.wraparoundMode)this._terminal.x=0,++this._terminal.y>this._terminal.scrollBottom?(this._terminal.y--,this._terminal.scroll(!0)):this._terminal.lines.get(this._terminal.y).isWrapped=!0;else if(2===r)return;if(i=this._terminal.y+this._terminal.ybase,this._terminal.insertMode)for(var o=0;othis._terminal.scrollBottom&&(this._terminal.y--,this._terminal.scroll()),this._terminal.x>=this._terminal.cols&&this._terminal.x--},e.prototype.carriageReturn=function(){this._terminal.x=0},e.prototype.backspace=function(){this._terminal.x>0&&this._terminal.x--},e.prototype.tab=function(){this._terminal.x=this._terminal.nextStop()},e.prototype.shiftOut=function(){this._terminal.setgLevel(1)},e.prototype.shiftIn=function(){this._terminal.setgLevel(0)},e.prototype.insertChars=function(e){var t,r,i,o;for((t=e[0])<1&&(t=1),r=this._terminal.y+this._terminal.ybase,i=this._terminal.x,o=[this._terminal.eraseAttr()," ",1];t--&&i=this._terminal.rows&&(this._terminal.y=this._terminal.rows-1),this._terminal.x>=this._terminal.cols&&this._terminal.x--},e.prototype.cursorForward=function(e){var t=e[0];t<1&&(t=1),this._terminal.x+=t,this._terminal.x>=this._terminal.cols&&(this._terminal.x=this._terminal.cols-1)},e.prototype.cursorBackward=function(e){var t=e[0];t<1&&(t=1),this._terminal.x>=this._terminal.cols&&this._terminal.x--,this._terminal.x-=t,this._terminal.x<0&&(this._terminal.x=0)},e.prototype.cursorNextLine=function(e){var t=e[0];t<1&&(t=1),this._terminal.y+=t,this._terminal.y>=this._terminal.rows&&(this._terminal.y=this._terminal.rows-1),this._terminal.x=0},e.prototype.cursorPrecedingLine=function(e){var t=e[0];t<1&&(t=1),this._terminal.y-=t,this._terminal.y<0&&(this._terminal.y=0),this._terminal.x=0},e.prototype.cursorCharAbsolute=function(e){var t=e[0];t<1&&(t=1),this._terminal.x=t-1},e.prototype.cursorPosition=function(e){var t,r;t=e[0]-1,r=e.length>=2?e[1]-1:0,t<0?t=0:t>=this._terminal.rows&&(t=this._terminal.rows-1),r<0?r=0:r>=this._terminal.cols&&(r=this._terminal.cols-1),this._terminal.x=r,this._terminal.y=t},e.prototype.cursorForwardTab=function(e){for(var t=e[0]||1;t--;)this._terminal.x=this._terminal.nextStop()},e.prototype.eraseInDisplay=function(e){var t;switch(e[0]){case 0:for(this._terminal.eraseRight(this._terminal.x,this._terminal.y),t=this._terminal.y+1;t0&&(this._terminal.lines.trimStart(r),this._terminal.ybase=Math.max(this._terminal.ybase-r,0),this._terminal.ydisp=Math.max(this._terminal.ydisp-r,0))}},e.prototype.eraseInLine=function(e){switch(e[0]){case 0:this._terminal.eraseRight(this._terminal.x,this._terminal.y);break;case 1:this._terminal.eraseLeft(this._terminal.x,this._terminal.y);break;case 2:this._terminal.eraseLine(this._terminal.y)}},e.prototype.insertLines=function(e){var t,r,i;for((t=e[0])<1&&(t=1),r=this._terminal.y+this._terminal.ybase,i=this._terminal.rows-1-this._terminal.scrollBottom,i=this._terminal.rows-1+this._terminal.ybase-i+1;t--;)this._terminal.lines.length===this._terminal.lines.maxLength&&(this._terminal.lines.trimStart(1),this._terminal.ybase--,this._terminal.ydisp--,r--,i--),this._terminal.lines.splice(r,0,this._terminal.blankLine(!0)),this._terminal.lines.splice(i,1);this._terminal.updateRange(this._terminal.y),this._terminal.updateRange(this._terminal.scrollBottom)},e.prototype.deleteLines=function(e){var t,r,i;for((t=e[0])<1&&(t=1),r=this._terminal.y+this._terminal.ybase,i=this._terminal.rows-1-this._terminal.scrollBottom,i=this._terminal.rows-1+this._terminal.ybase-i;t--;)this._terminal.lines.length===this._terminal.lines.maxLength&&(this._terminal.lines.trimStart(1),this._terminal.ybase-=1,this._terminal.ydisp-=1),this._terminal.lines.splice(i+1,0,this._terminal.blankLine(!0)),this._terminal.lines.splice(r,1);this._terminal.updateRange(this._terminal.y),this._terminal.updateRange(this._terminal.scrollBottom)},e.prototype.deleteChars=function(e){var t,r,i;for((t=e[0])<1&&(t=1),r=this._terminal.y+this._terminal.ybase,i=[this._terminal.eraseAttr()," ",1];t--;)this._terminal.lines.get(r).splice(this._terminal.x,1),this._terminal.lines.get(r).push(i)},e.prototype.scrollUp=function(e){for(var t=e[0]||1;t--;)this._terminal.lines.splice(this._terminal.ybase+this._terminal.scrollTop,1),this._terminal.lines.splice(this._terminal.ybase+this._terminal.scrollBottom,0,this._terminal.blankLine());this._terminal.updateRange(this._terminal.scrollTop),this._terminal.updateRange(this._terminal.scrollBottom)},e.prototype.scrollDown=function(e){for(var t=e[0]||1;t--;)this._terminal.lines.splice(this._terminal.ybase+this._terminal.scrollBottom,1),this._terminal.lines.splice(this._terminal.ybase+this._terminal.scrollTop,0,this._terminal.blankLine());this._terminal.updateRange(this._terminal.scrollTop),this._terminal.updateRange(this._terminal.scrollBottom)},e.prototype.eraseChars=function(e){var t,r,i,o;for((t=e[0])<1&&(t=1),r=this._terminal.y+this._terminal.ybase,i=this._terminal.x,o=[this._terminal.eraseAttr()," ",1];t--&&i=this._terminal.cols&&(this._terminal.x=this._terminal.cols-1)},e.prototype.HPositionRelative=function(e){var t=e[0];t<1&&(t=1),this._terminal.x+=t,this._terminal.x>=this._terminal.cols&&(this._terminal.x=this._terminal.cols-1)},e.prototype.repeatPrecedingCharacter=function(e){for(var t=e[0]||1,r=this._terminal.lines.get(this._terminal.ybase+this._terminal.y),i=r[this._terminal.x-1]||[this._terminal.defAttr," ",1];t--;)r[this._terminal.x++]=i},e.prototype.sendDeviceAttributes=function(e){e[0]>0||(this._terminal.prefix?">"===this._terminal.prefix&&(this._terminal.is("xterm")?this._terminal.send(i.C0.ESC+"[>0;276;0c"):this._terminal.is("rxvt-unicode")?this._terminal.send(i.C0.ESC+"[>85;95;0c"):this._terminal.is("linux")?this._terminal.send(e[0]+"c"):this._terminal.is("screen")&&this._terminal.send(i.C0.ESC+"[>83;40003;0c")):this._terminal.is("xterm")||this._terminal.is("rxvt-unicode")||this._terminal.is("screen")?this._terminal.send(i.C0.ESC+"[?1;2c"):this._terminal.is("linux")&&this._terminal.send(i.C0.ESC+"[?6c"))},e.prototype.linePosAbsolute=function(e){var t=e[0];t<1&&(t=1),this._terminal.y=t-1,this._terminal.y>=this._terminal.rows&&(this._terminal.y=this._terminal.rows-1)},e.prototype.VPositionRelative=function(e){var t=e[0];t<1&&(t=1),this._terminal.y+=t,this._terminal.y>=this._terminal.rows&&(this._terminal.y=this._terminal.rows-1),this._terminal.x>=this._terminal.cols&&this._terminal.x--},e.prototype.HVPosition=function(e){e[0]<1&&(e[0]=1),e[1]<1&&(e[1]=1),this._terminal.y=e[0]-1,this._terminal.y>=this._terminal.rows&&(this._terminal.y=this._terminal.rows-1),this._terminal.x=e[1]-1,this._terminal.x>=this._terminal.cols&&(this._terminal.x=this._terminal.cols-1)},e.prototype.tabClear=function(e){var t=e[0];t<=0?delete this._terminal.tabs[this._terminal.x]:3===t&&(this._terminal.tabs={})},e.prototype.setMode=function(e){if(e.length>1)for(var t=0;t1e3,this._terminal.mouseEvents=!0,this._terminal.element.classList.add("enable-mouse-events"),this._terminal.selectionManager.disable(),this._terminal.log("Binding to mouse events.");break;case 1004:this._terminal.sendFocus=!0;break;case 1005:this._terminal.utfMouse=!0;break;case 1006:this._terminal.sgrMouse=!0;break;case 1015:this._terminal.urxvtMouse=!0;break;case 25:this._terminal.cursorHidden=!1;break;case 1049:case 47:case 1047:if(!this._terminal.normal){var r={lines:this._terminal.lines,ybase:this._terminal.ybase,ydisp:this._terminal.ydisp,x:this._terminal.x,y:this._terminal.y,scrollTop:this._terminal.scrollTop,scrollBottom:this._terminal.scrollBottom,tabs:this._terminal.tabs};this._terminal.reset(),this._terminal.viewport.syncScrollArea(),this._terminal.normal=r,this._terminal.showCursor()}}}else switch(e[0]){case 4:this._terminal.insertMode=!0}},e.prototype.resetMode=function(e){if(e.length>1)for(var t=0;t>18,s=this._terminal.curAttr>>9&511,n=511&this._terminal.curAttr;i=30&&t<=37?s=t-30:t>=40&&t<=47?n=t-40:t>=90&&t<=97?s=(t+=8)-90:t>=100&&t<=107?n=(t+=8)-100:0===t?(o=this._terminal.defAttr>>18,s=this._terminal.defAttr>>9&511,n=511&this._terminal.defAttr):1===t?o|=1:4===t?o|=2:5===t?o|=4:7===t?o|=8:8===t?o|=16:22===t?o&=-2:24===t?o&=-3:25===t?o&=-5:27===t?o&=-9:28===t?o&=-17:39===t?s=this._terminal.defAttr>>9&511:49===t?n=511&this._terminal.defAttr:38===t?2===e[i+1]?(i+=2,-1===(s=this._terminal.matchColor(255&e[i],255&e[i+1],255&e[i+2]))&&(s=511),i+=2):5===e[i+1]&&(s=t=255&e[i+=2]):48===t?2===e[i+1]?(i+=2,-1===(n=this._terminal.matchColor(255&e[i],255&e[i+1],255&e[i+2]))&&(n=511),i+=2):5===e[i+1]&&(n=t=255&e[i+=2]):100===t?(s=this._terminal.defAttr>>9&511,n=511&this._terminal.defAttr):this._terminal.error("Unknown SGR attribute: %d.",t);this._terminal.curAttr=o<<18|s<<9|n}else this._terminal.curAttr=this._terminal.defAttr},e.prototype.deviceStatus=function(e){if(this._terminal.prefix){if("?"===this._terminal.prefix)switch(e[0]){case 6:this._terminal.send(i.C0.ESC+"[?"+(this._terminal.y+1)+";"+(this._terminal.x+1)+"R")}}else switch(e[0]){case 5:this._terminal.send(i.C0.ESC+"[0n");break;case 6:this._terminal.send(i.C0.ESC+"["+(this._terminal.y+1)+";"+(this._terminal.x+1)+"R")}},e.prototype.softReset=function(e){this._terminal.cursorHidden=!1,this._terminal.insertMode=!1,this._terminal.originMode=!1,this._terminal.wraparoundMode=!0,this._terminal.applicationKeypad=!1,this._terminal.viewport.syncScrollArea(),this._terminal.applicationCursor=!1,this._terminal.scrollTop=0,this._terminal.scrollBottom=this._terminal.rows-1,this._terminal.curAttr=this._terminal.defAttr,this._terminal.x=this._terminal.y=0,this._terminal.charset=null,this._terminal.glevel=0,this._terminal.charsets=[null]},e.prototype.setCursorStyle=function(e){var t=e[0]<1?1:e[0];switch(t){case 1:case 2:this._terminal.setOption("cursorStyle","block");break;case 3:case 4:this._terminal.setOption("cursorStyle","underline");break;case 5:case 6:this._terminal.setOption("cursorStyle","bar")}var r=t%2==1;this._terminal.setOption("cursorBlink",r)},e.prototype.setScrollRegion=function(e){this._terminal.prefix||(this._terminal.scrollTop=(e[0]||1)-1,this._terminal.scrollBottom=(e[1]&&e[1]<=this._terminal.rows?e[1]:this._terminal.rows)-1,this._terminal.x=0,this._terminal.y=0)},e.prototype.saveCursor=function(e){this._terminal.savedX=this._terminal.x,this._terminal.savedY=this._terminal.y},e.prototype.restoreCursor=function(e){this._terminal.x=this._terminal.savedX||0,this._terminal.y=this._terminal.savedY||0},e}();t.InputHandler=s;var n=function(e){function t(e){var t,r=0,o=i.length-1;if(ei[o][1])return!1;for(;o>=r;)if(t=Math.floor((r+o)/2),e>i[t][1])r=t+1;else{if(!(e=4352&&(e<=4447||9001===e||9002===e||e>=11904&&e<=42191&&12351!==e||e>=44032&&e<=55203||e>=63744&&e<=64255||e>=65040&&e<=65049||e>=65072&&e<=65135||e>=65280&&e<=65376||e>=65504&&e<=65510||e>=131072&&e<=196605||e>=196608&&e<=262141)}var i=[[768,879],[1155,1158],[1160,1161],[1425,1469],[1471,1471],[1473,1474],[1476,1477],[1479,1479],[1536,1539],[1552,1557],[1611,1630],[1648,1648],[1750,1764],[1767,1768],[1770,1773],[1807,1807],[1809,1809],[1840,1866],[1958,1968],[2027,2035],[2305,2306],[2364,2364],[2369,2376],[2381,2381],[2385,2388],[2402,2403],[2433,2433],[2492,2492],[2497,2500],[2509,2509],[2530,2531],[2561,2562],[2620,2620],[2625,2626],[2631,2632],[2635,2637],[2672,2673],[2689,2690],[2748,2748],[2753,2757],[2759,2760],[2765,2765],[2786,2787],[2817,2817],[2876,2876],[2879,2879],[2881,2883],[2893,2893],[2902,2902],[2946,2946],[3008,3008],[3021,3021],[3134,3136],[3142,3144],[3146,3149],[3157,3158],[3260,3260],[3263,3263],[3270,3270],[3276,3277],[3298,3299],[3393,3395],[3405,3405],[3530,3530],[3538,3540],[3542,3542],[3633,3633],[3636,3642],[3655,3662],[3761,3761],[3764,3769],[3771,3772],[3784,3789],[3864,3865],[3893,3893],[3895,3895],[3897,3897],[3953,3966],[3968,3972],[3974,3975],[3984,3991],[3993,4028],[4038,4038],[4141,4144],[4146,4146],[4150,4151],[4153,4153],[4184,4185],[4448,4607],[4959,4959],[5906,5908],[5938,5940],[5970,5971],[6002,6003],[6068,6069],[6071,6077],[6086,6086],[6089,6099],[6109,6109],[6155,6157],[6313,6313],[6432,6434],[6439,6440],[6450,6450],[6457,6459],[6679,6680],[6912,6915],[6964,6964],[6966,6970],[6972,6972],[6978,6978],[7019,7027],[7616,7626],[7678,7679],[8203,8207],[8234,8238],[8288,8291],[8298,8303],[8400,8431],[12330,12335],[12441,12442],[43014,43014],[43019,43019],[43045,43046],[64286,64286],[65024,65039],[65056,65059],[65279,65279],[65529,65531],[68097,68099],[68101,68102],[68108,68111],[68152,68154],[68159,68159],[119143,119145],[119155,119170],[119173,119179],[119210,119213],[119362,119364],[917505,917505],[917536,917631],[917760,917999]];return function(i){return 0===i?e.nul:i<32||i>=127&&i<160?e.control:t(i)?0:r(i)?2:1}}({nul:0,control:0})},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=new RegExp("(?:^|[^\\da-z\\.-]+)((https?:\\/\\/)((([\\da-z\\.-]+)\\.([a-z\\.]{2,6}))|((\\d{1,3}\\.){3}\\d{1,3})|(localhost))(:\\d{1,5})?(\\/[\\/\\w\\.\\-%~]*)*(\\?[0-9\\w\\[\\]\\(\\)\\/\\?\\!#@$%&'*+,:;~\\=\\.\\-]*)?(#[0-9\\w\\[\\]\\(\\)\\/\\?\\!#@$%&'*+,:;~\\=\\.\\-]*)?)($|[^\\/\\w\\.\\-%]+)"),o=0,s=function(){function e(){this._nextLinkMatcherId=o,this._rowTimeoutIds=[],this._linkMatchers=[],this.registerLinkMatcher(i,null,{matchIndex:1})}return e.prototype.attachToDom=function(e,t){this._document=e,this._rows=t},e.prototype.linkifyRow=function(t){if(this._document){var r=this._rowTimeoutIds[t];r&&clearTimeout(r),this._rowTimeoutIds[t]=setTimeout(this._linkifyRow.bind(this,t),e.TIME_BEFORE_LINKIFY)}},e.prototype.setHypertextLinkHandler=function(e){this._linkMatchers[o].handler=e},e.prototype.setHypertextValidationCallback=function(e){this._linkMatchers[o].validationCallback=e},e.prototype.registerLinkMatcher=function(e,t,r){if(void 0===r&&(r={}),this._nextLinkMatcherId!==o&&!t)throw new Error("handler must be defined");var i={id:this._nextLinkMatcherId++,regex:e,handler:t,matchIndex:r.matchIndex,validationCallback:r.validationCallback,priority:r.priority||0};return this._addLinkMatcherToList(i),i.id},e.prototype._addLinkMatcherToList=function(e){if(0!==this._linkMatchers.length){for(var t=this._linkMatchers.length-1;t>=0;t--)if(e.priority<=this._linkMatchers[t].priority)return void this._linkMatchers.splice(t+1,0,e);this._linkMatchers.splice(0,0,e)}else this._linkMatchers.push(e)},e.prototype.deregisterLinkMatcher=function(e){for(var t=1;t0){if(i.validationCallback)for(var s=function(e){var t=o[e];i.validationCallback(t.textContent,t,function(e){e||t.classList.add("xterm-invalid-link")})},n=0;n=0){var d=this._createAnchorElement(a,t.handler,i);if(c.textContent.length===a.length)if(3===c.nodeType)this._replaceNode(c,d);else{var p=c;if("A"===p.nodeName)return r;p.innerHTML="",p.appendChild(d)}else if(c.childNodes.length>1)for(var f=0;f"]=function(e){return e.setPrefix(">")},a["!"]=function(e){return e.setPrefix("!")},a[0]=function(e){return e.setParam(10*e.getParam())},a[1]=function(e){return e.setParam(10*e.getParam()+1)},a[2]=function(e){return e.setParam(10*e.getParam()+2)},a[3]=function(e){return e.setParam(10*e.getParam()+3)},a[4]=function(e){return e.setParam(10*e.getParam()+4)},a[5]=function(e){return e.setParam(10*e.getParam()+5)},a[6]=function(e){return e.setParam(10*e.getParam()+6)},a[7]=function(e){return e.setParam(10*e.getParam()+7)},a[8]=function(e){return e.setParam(10*e.getParam()+8)},a[9]=function(e){return e.setParam(10*e.getParam()+9)},a.$=function(e){return e.setPostfix("$")},a['"']=function(e){return e.setPostfix('"')},a[" "]=function(e){return e.setPostfix(" ")},a["'"]=function(e){return e.setPostfix("'")},a[";"]=function(e){return e.finalizeParam()},a[i.C0.CAN]=function(e){return e.setState(h.NORMAL)};var l={};l["@"]=function(e,t,r){return e.insertChars(t)},l.A=function(e,t,r){return e.cursorUp(t)},l.B=function(e,t,r){return e.cursorDown(t)},l.C=function(e,t,r){return e.cursorForward(t)},l.D=function(e,t,r){return e.cursorBackward(t)},l.E=function(e,t,r){return e.cursorNextLine(t)},l.F=function(e,t,r){return e.cursorPrecedingLine(t)},l.G=function(e,t,r){return e.cursorCharAbsolute(t)},l.H=function(e,t,r){return e.cursorPosition(t)},l.I=function(e,t,r){return e.cursorForwardTab(t)},l.J=function(e,t,r){return e.eraseInDisplay(t)},l.K=function(e,t,r){return e.eraseInLine(t)},l.L=function(e,t,r){return e.insertLines(t)},l.M=function(e,t,r){return e.deleteLines(t)},l.P=function(e,t,r){return e.deleteChars(t)},l.S=function(e,t,r){return e.scrollUp(t)},l.T=function(e,t,r){t.length<2&&!r&&e.scrollDown(t)},l.X=function(e,t,r){return e.eraseChars(t)},l.Z=function(e,t,r){return e.cursorBackwardTab(t)},l["`"]=function(e,t,r){return e.charPosAbsolute(t)},l.a=function(e,t,r){return e.HPositionRelative(t)},l.b=function(e,t,r){return e.repeatPrecedingCharacter(t)},l.c=function(e,t,r){return e.sendDeviceAttributes(t)},l.d=function(e,t,r){return e.linePosAbsolute(t)},l.e=function(e,t,r){return e.VPositionRelative(t)},l.f=function(e,t,r){return e.HVPosition(t)},l.g=function(e,t,r){return e.tabClear(t)},l.h=function(e,t,r){return e.setMode(t)},l.l=function(e,t,r){return e.resetMode(t)},l.m=function(e,t,r){return e.charAttributes(t)},l.n=function(e,t,r){return e.deviceStatus(t)},l.p=function(e,t,r){switch(r){case"!":e.softReset(t)}},l.q=function(e,t,r,i){" "===i&&e.setCursorStyle(t)},l.r=function(e,t){return e.setScrollRegion(t)},l.s=function(e,t){return e.saveCursor(t)},l.u=function(e,t){return e.restoreCursor(t)},l[i.C0.CAN]=function(e,t,r,i,o){return o.setState(h.NORMAL)};var h;!function(e){e[e.NORMAL=0]="NORMAL",e[e.ESCAPED=1]="ESCAPED",e[e.CSI_PARAM=2]="CSI_PARAM",e[e.CSI=3]="CSI",e[e.OSC=4]="OSC",e[e.CHARSET=5]="CHARSET",e[e.DCS=6]="DCS",e[e.IGNORE=7]="IGNORE"}(h||(h={}));var c=function(){function e(e,t){this._inputHandler=e,this._terminal=t,this._state=h.NORMAL}return e.prototype.parse=function(e){var t,r,c,u,d=e.length;for(this._position=0,this._terminal.surrogate_high&&(e=this._terminal.surrogate_high+e,this._terminal.surrogate_high="");this._position":this._terminal.log("Switching back to normal keypad."),this._terminal.applicationKeypad=!1,this._terminal.viewport.syncScrollArea(),this._state=h.NORMAL;break;default:this._state=h.NORMAL,this._terminal.error("Unknown ESC control: %s.",r)}break;case h.CHARSET:r in o.CHARSETS?(t=o.CHARSETS[r],"/"===r&&this.skipNextChar()):t=o.DEFAULT_CHARSET,this._terminal.setgCharset(this._terminal.gcharset,t),this._terminal.gcharset=null,this._state=h.NORMAL;break;case h.OSC:if(r===i.C0.ESC||r===i.C0.BEL){switch(r===i.C0.ESC&&this._position++,this._terminal.params.push(this._terminal.currentParam),this._terminal.params[0]){case 0:case 1:case 2:this._terminal.params[1]&&(this._terminal.title=this._terminal.params[1],this._terminal.handleTitle(this._terminal.title))}this._terminal.params=[],this._terminal.currentParam=0,this._state=h.NORMAL}else this._terminal.params.length?this._terminal.currentParam+=r:r>="0"&&r<="9"?this._terminal.currentParam=10*this._terminal.currentParam+r.charCodeAt(0)-48:";"===r&&(this._terminal.params.push(this._terminal.currentParam),this._terminal.currentParam="");break;case h.CSI_PARAM:if(r in a){a[r](this);break}this.finalizeParam(),this._state=h.CSI;case h.CSI:r in l?l[r](this._inputHandler,this._terminal.params,this._terminal.prefix,this._terminal.postfix,this):this._terminal.error("Unknown CSI code: %s.",r),this._state=h.NORMAL,this._terminal.prefix="",this._terminal.postfix="";break;case h.DCS:if(r===i.C0.ESC||r===i.C0.BEL){r===i.C0.ESC&&this._position++;var p=void 0,f=void 0;switch(this._terminal.prefix){case"":break;case"$q":switch(p=this._terminal.currentParam,f=!1,p){case'"q':p='0"q';break;case'"p':p='61"p';break;case"r":p=this._terminal.scrollTop+1+";"+(this._terminal.scrollBottom+1)+"r";break;case"m":p="0m";break;default:this._terminal.error("Unknown DCS Pt: %s.",p),p=""}this._terminal.send(i.C0.ESC+"P"+ +f+"$r"+p+i.C0.ESC+"\\");break;case"+p":break;case"+q":p=this._terminal.currentParam,f=!1,this._terminal.send(i.C0.ESC+"P"+ +f+"+r"+p+i.C0.ESC+"\\");break;default:this._terminal.error("Unknown DCS prefix: %s.",this._terminal.prefix)}this._terminal.currentParam=0,this._terminal.prefix="",this._state=h.NORMAL}else this._terminal.currentParam?this._terminal.currentParam+=r:this._terminal.prefix||"$"===r||"+"===r?2===this._terminal.prefix.length?this._terminal.currentParam=r:this._terminal.prefix+=r:this._terminal.currentParam=r;break;case h.IGNORE:r!==i.C0.ESC&&r!==i.C0.BEL||(r===i.C0.ESC&&this._position++,this._state=h.NORMAL)}}return this._state},e.prototype.setState=function(e){this._state=e},e.prototype.setPrefix=function(e){this._terminal.prefix=e},e.prototype.setPostfix=function(e){this._terminal.postfix=e},e.prototype.setParam=function(e){this._terminal.currentParam=e},e.prototype.getParam=function(){return this._terminal.currentParam},e.prototype.finalizeParam=function(){this._terminal.params.push(this._terminal.currentParam),this._terminal.currentParam=0},e.prototype.skipNextChar=function(){this._position++},e}();t.Parser=c},function(e,t,r){"use strict";function i(e){var t=e.ownerDocument.createElement("span");t.innerHTML="hello world",e.appendChild(t);var r=t.offsetWidth,i=t.offsetHeight;t.style.fontWeight="bold";var o=t.offsetWidth,s=t.offsetHeight;return e.removeChild(t),r!==o||i!==s}Object.defineProperty(t,"__esModule",{value:!0});var o,s=r(26);!function(e){e[e.BOLD=1]="BOLD",e[e.UNDERLINE=2]="UNDERLINE",e[e.BLINK=4]="BLINK",e[e.INVERSE=8]="INVERSE",e[e.INVISIBLE=16]="INVISIBLE"}(o||(o={}));var n=null,a=function(){function e(e){this._terminal=e,this._refreshRowsQueue=[],this._refreshFramesSkipped=0,this._refreshAnimationFrame=null,this._spanElementObjectPool=new s.DomElementObjectPool("span"),null===n&&(n=i(this._terminal.element)),this._spanElementObjectPool=new s.DomElementObjectPool("span")}return e.prototype.queueRefresh=function(e,t){this._refreshRowsQueue.push({start:e,end:t}),this._refreshAnimationFrame||(this._refreshAnimationFrame=window.requestAnimationFrame(this._refreshLoop.bind(this)))},e.prototype._refreshLoop=function(){if(this._terminal.writeBuffer.length>0&&this._refreshFramesSkipped++<=5)this._refreshAnimationFrame=window.requestAnimationFrame(this._refreshLoop.bind(this));else{this._refreshFramesSkipped=0;var e,t;if(this._refreshRowsQueue.length>4)e=0,t=this._terminal.rows-1;else{e=this._refreshRowsQueue[0].start,t=this._refreshRowsQueue[0].end;for(var r=1;rt&&(t=this._refreshRowsQueue[r].end)}this._refreshRowsQueue=[],this._refreshAnimationFrame=null,this._refresh(e,t)}},e.prototype._refresh=function(e,t){var r;t-e>=this._terminal.rows/2&&(r=this._terminal.element.parentNode)&&this._terminal.element.removeChild(this._terminal.rowContainer);var i=this._terminal.cols,s=e;for(t>=this._terminal.rows&&(this._terminal.log("`end` is too large. Most likely a bad CSR."),t=this._terminal.rows-1);s<=t;s++){var a=s+this._terminal.ydisp,l=this._terminal.lines.get(a),h=void 0;h=this._terminal.y===s-(this._terminal.ybase-this._terminal.ydisp)&&this._terminal.cursorState&&!this._terminal.cursorHidden?this._terminal.x:-1;for(var c=this._terminal.defAttr,u=document.createDocumentFragment(),d="",p=void 0;this._terminal.children[s].children.length;){var f=this._terminal.children[s].children[0];this._terminal.children[s].removeChild(f),this._spanElementObjectPool.release(f)}for(var g=0;g>9&511,w=m>>18;if(w&o.BOLD&&(n||p.classList.add("xterm-bold"),C<8&&(C+=8)),w&o.UNDERLINE&&p.classList.add("xterm-underline"),w&o.BLINK&&p.classList.add("xterm-blink"),w&o.INVERSE){var S=_;_=C,C=S,1&w&&C<8&&(C+=8)}w&o.INVISIBLE&&p.classList.add("xterm-hidden"),w&o.INVERSE&&(257===_&&(_=15),256===C&&(C=0)),_<256&&p.classList.add("xterm-bg-color-"+_),C<256&&p.classList.add("xterm-color-"+C)}if(2===b)d+=''+y+"";else if(y.charCodeAt(0)>255)d+=''+y+"";else switch(y){case"&":d+="&";break;case"<":d+="<";break;case">":d+=">";break;default:d+=y<=" "?" ":y}c=m}}d&&!p&&(p=this._spanElementObjectPool.acquire()),p&&(d&&(p.innerHTML=d,d=""),u.appendChild(p),p=null),this._terminal.children[s].appendChild(u)}r&&this._terminal.element.appendChild(this._terminal.rowContainer),this._terminal.emit("refresh",{element:this._terminal.element,start:e,end:t})},e.prototype.refreshSelection=function(e,t){for(;this._terminal.selectionContainer.children.length;)this._terminal.selectionContainer.removeChild(this._terminal.selectionContainer.children[0]);if(e&&t){var r=e[1]-this._terminal.ydisp,i=t[1]-this._terminal.ydisp,o=Math.max(r,0),s=Math.min(i,this._terminal.rows-1);if(!(o>=this._terminal.rows||s<0)){var n=document.createDocumentFragment(),a=r===o?e[0]:0,l=o===s?t[0]:this._terminal.cols;n.appendChild(this._createSelectionElement(o,a,l));var h=s-o-1;if(n.appendChild(this._createSelectionElement(o+1,0,this._terminal.cols,h)),o!==s){var c=i===s?t[0]:this._terminal.cols;n.appendChild(this._createSelectionElement(s,0,c))}this._terminal.selectionContainer.appendChild(n)}}},e.prototype._createSelectionElement=function(e,t,r,i){void 0===i&&(i=1);var o=document.createElement("div");return o.style.height=i*this._terminal.charMeasure.height+"px",o.style.top=e*this._terminal.charMeasure.height+"px",o.style.left=t*this._terminal.charMeasure.width+"px",o.style.width=this._terminal.charMeasure.width*(r-t)+"px",o},e}();t.Renderer=a},function(e,t,r){"use strict";var i=this&&this.__extends||function(){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])};return function(t,r){function i(){this.constructor=t}e(t,r),t.prototype=null===r?Object.create(r):(i.prototype=r.prototype,new i)}}();Object.defineProperty(t,"__esModule",{value:!0});var o,s=r(10),n=r(9),a=r(1),l=r(21),h=String.fromCharCode(160),c=new RegExp(h,"g");!function(e){e[e.NORMAL=0]="NORMAL",e[e.WORD=1]="WORD",e[e.LINE=2]="LINE"}(o||(o={}));var u=function(e){function t(t,r,i,s){var n=e.call(this)||this;return n._terminal=t,n._buffer=r,n._rowContainer=i,n._charMeasure=s,n._initListeners(),n.enable(),n._model=new l.SelectionModel(t),n._lastMouseDownTime=0,n._activeSelectionMode=o.NORMAL,n}return i(t,e),t.prototype._initListeners=function(){var e=this;this._bufferTrimListener=function(t){return e._onTrim(t)},this._mouseMoveListener=function(t){return e._onMouseMove(t)},this._mouseDownListener=function(t){return e._onMouseDown(t)},this._mouseUpListener=function(t){return e._onMouseUp(t)}},t.prototype.disable=function(){this.clearSelection(),this._buffer.off("trim",this._bufferTrimListener),this._rowContainer.removeEventListener("mousedown",this._mouseDownListener)},t.prototype.enable=function(){this._buffer.on("trim",this._bufferTrimListener),this._rowContainer.addEventListener("mousedown",this._mouseDownListener)},t.prototype.setBuffer=function(e){this._buffer=e,this.clearSelection()},Object.defineProperty(t.prototype,"hasSelection",{get:function(){var e=this._model.finalSelectionStart,t=this._model.finalSelectionEnd;return!(!e||!t)&&(e[0]!==t[0]||e[1]!==t[1])},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"selectionText",{get:function(){var e=this._model.finalSelectionStart,t=this._model.finalSelectionEnd;if(!e||!t)return"";var r=e[1]===t[1]?t[0]:null,i=[];i.push(this._translateBufferLineToString(this._buffer.get(e[1]),!0,e[0],r));for(var o=e[1]+1;o<=t[1]-1;o++){var s=this._buffer.get(o),a=this._translateBufferLineToString(s,!0);s.isWrapped?i[i.length-1]+=a:i.push(a)}if(e[1]!==t[1]){var s=this._buffer.get(t[1]),a=this._translateBufferLineToString(s,!0,0,t[0]);s.isWrapped?i[i.length-1]+=a:i.push(a)}return i.map(function(e){return e.replace(c," ")}).join(n.isMSWindows?"\r\n":"\n")},enumerable:!0,configurable:!0}),t.prototype.clearSelection=function(){this._model.clearSelection(),this._removeMouseDownListeners(),this.refresh()},t.prototype._translateBufferLineToString=function(e,t,r,i){void 0===r&&(r=0),void 0===i&&(i=null);for(var o="",s=r,n=i,a=0;a=a&&s--,i>=a&&n--)}var h=n||e.length;if(t){var c=o.search(/\s+$/);if(-1!==c&&(h=Math.min(h,c)),h<=s)return""}return o.substring(s,h)},t.prototype.refresh=function(e){var t=this;this._refreshAnimationFrame||(this._refreshAnimationFrame=window.requestAnimationFrame(function(){return t._refresh()})),n.isLinux&&e&&this.selectionText.length&&this.emit("newselection",this.selectionText)},t.prototype._refresh=function(){this._refreshAnimationFrame=null,this.emit("refresh",{start:this._model.finalSelectionStart,end:this._model.finalSelectionEnd})},t.prototype.selectAll=function(){this._model.isSelectAllActive=!0,this.refresh()},t.prototype._onTrim=function(e){this._model.onTrim(e)&&this.refresh()},t.prototype._getMouseBufferCoords=function(e){var t=s.getCoords(e,this._rowContainer,this._charMeasure,this._terminal.cols,this._terminal.rows,!0);return t[0]--,t[1]--,t[1]+=this._terminal.ydisp,t},t.prototype._getMouseEventScrollAmount=function(e){var t=s.getCoordsRelativeToElement(e,this._rowContainer)[1],r=this._terminal.rows*this._charMeasure.height;return t>=0&&t<=r?0:(t>r&&(t-=r),t=Math.min(Math.max(t,-50),50),(t/=50)/Math.abs(t)+Math.round(14*t))},t.prototype._onMouseDown=function(e){0===e.button&&(e.preventDefault(),this._dragScrollAmount=0,this._setMouseClickCount(e),e.shiftKey?this._onShiftClick(e):1===this._clickCount?this._onSingleClick(e):2===this._clickCount?this._onDoubleClick(e):3===this._clickCount&&this._onTripleClick(e),this._addMouseDownListeners(),this.refresh(!0))},t.prototype._addMouseDownListeners=function(){var e=this;this._rowContainer.ownerDocument.addEventListener("mousemove",this._mouseMoveListener),this._rowContainer.ownerDocument.addEventListener("mouseup",this._mouseUpListener),this._dragScrollIntervalTimer=setInterval(function(){return e._dragScroll()},50)},t.prototype._removeMouseDownListeners=function(){this._rowContainer.ownerDocument.removeEventListener("mousemove",this._mouseMoveListener),this._rowContainer.ownerDocument.removeEventListener("mouseup",this._mouseUpListener),clearInterval(this._dragScrollIntervalTimer),this._dragScrollIntervalTimer=null},t.prototype._onShiftClick=function(e){this._model.selectionStart&&(this._model.selectionEnd=this._getMouseBufferCoords(e))},t.prototype._onSingleClick=function(e){this._model.selectionStartLength=0,this._model.isSelectAllActive=!1,this._activeSelectionMode=o.NORMAL,this._model.selectionStart=this._getMouseBufferCoords(e),this._model.selectionStart&&(this._model.selectionEnd=null,0===this._buffer.get(this._model.selectionStart[1])[this._model.selectionStart[0]][2]&&this._model.selectionStart[0]++)},t.prototype._onDoubleClick=function(e){var t=this._getMouseBufferCoords(e);t&&(this._activeSelectionMode=o.WORD,this._selectWordAt(t))},t.prototype._onTripleClick=function(e){var t=this._getMouseBufferCoords(e);t&&(this._activeSelectionMode=o.LINE,this._selectLineAt(t[1]))},t.prototype._setMouseClickCount=function(e){var t=(new Date).getTime();(t-this._lastMouseDownTime>400||this._distanceFromLastMousePosition(e)>10)&&(this._clickCount=0),this._lastMouseDownTime=t,this._lastMousePosition=[e.pageX,e.pageY],this._clickCount++},t.prototype._distanceFromLastMousePosition=function(e){return Math.max(Math.abs(this._lastMousePosition[0]-e.pageX),Math.abs(this._lastMousePosition[1]-e.pageY))},t.prototype._onMouseMove=function(e){var t=this._model.selectionEnd?[this._model.selectionEnd[0],this._model.selectionEnd[1]]:null;if(this._model.selectionEnd=this._getMouseBufferCoords(e),this._activeSelectionMode===o.LINE?this._model.selectionEnd[1]0?this._model.selectionEnd[0]=this._terminal.cols-1:this._dragScrollAmount<0&&(this._model.selectionEnd[0]=0),this._model.selectionEnd[1]0?this._model.selectionEnd=[this._terminal.cols-1,this._terminal.ydisp+this._terminal.rows]:this._model.selectionEnd=[0,this._terminal.ydisp],this.refresh())},t.prototype._onMouseUp=function(e){this._removeMouseDownListeners()},t.prototype._convertViewportColToCharacterIndex=function(e,t){for(var r=t[0],i=0;t[0]>=i;i++)0===e[i][2]&&r--;return r},t.prototype._getWordAt=function(e){var t=this._buffer.get(e[1]),r=this._translateBufferLineToString(t,!1),i=this._convertViewportColToCharacterIndex(t,e),o=i,s=e[0]-o,n=0,a=0;if(" "===r.charAt(o)){for(;o>0&&" "===r.charAt(o-1);)o--;for(;i0&&!this._isCharWordSeparator(r.charAt(o-1));)0===t[l-1][2]&&(n++,l--),o--,l--;for(;i+1=0},t.prototype._selectLineAt=function(e){this._model.selectionStart=[0,e],this._model.selectionStartLength=this._terminal.cols},t}(a.EventEmitter);t.SelectionManager=u},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e){this._terminal=e,this.clearSelection()}return e.prototype.clearSelection=function(){this.selectionStart=null,this.selectionEnd=null,this.isSelectAllActive=!1,this.selectionStartLength=0},Object.defineProperty(e.prototype,"finalSelectionStart",{get:function(){return this.isSelectAllActive?[0,0]:this.selectionEnd&&this.selectionStart&&this.areSelectionValuesReversed()?this.selectionEnd:this.selectionStart},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"finalSelectionEnd",{get:function(){return this.isSelectAllActive?[this._terminal.cols,this._terminal.ybase+this._terminal.rows-1]:this.selectionStart?!this.selectionEnd||this.areSelectionValuesReversed()?[this.selectionStart[0]+this.selectionStartLength,this.selectionStart[1]]:this.selectionStartLength&&this.selectionEnd[1]===this.selectionStart[1]?[Math.max(this.selectionStart[0]+this.selectionStartLength,this.selectionEnd[0]),this.selectionEnd[1]]:this.selectionEnd:null},enumerable:!0,configurable:!0}),e.prototype.areSelectionValuesReversed=function(){var e=this.selectionStart,t=this.selectionEnd;return e[1]>t[1]||e[1]===t[1]&&e[0]>t[0]},e.prototype.onTrim=function(e){return this.selectionStart&&(this.selectionStart[1]-=e),this.selectionEnd&&(this.selectionEnd[1]-=e),this.selectionEnd&&this.selectionEnd[1]<0?(this.clearSelection(),!0):(this.selectionStart&&this.selectionStart[1]<0&&(this.selectionStart[1]=0),!1)},e}();t.SelectionModel=i},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t,r,i){var o=this;this.terminal=e,this.viewportElement=t,this.scrollArea=r,this.charMeasure=i,this.currentRowHeight=0,this.lastRecordedBufferLength=0,this.lastRecordedViewportHeight=0,this.terminal.on("scroll",this.syncScrollArea.bind(this)),this.terminal.on("resize",this.syncScrollArea.bind(this)),this.viewportElement.addEventListener("scroll",this.onScroll.bind(this)),setTimeout(function(){return o.syncScrollArea()},0)}return e.prototype.refresh=function(){if(this.charMeasure.height>0){var e=this.charMeasure.height!==this.currentRowHeight;e&&(this.currentRowHeight=this.charMeasure.height,this.viewportElement.style.lineHeight=this.charMeasure.height+"px",this.terminal.rowContainer.style.lineHeight=this.charMeasure.height+"px");var t=this.lastRecordedViewportHeight!==this.terminal.rows;(e||t)&&(this.lastRecordedViewportHeight=this.terminal.rows,this.viewportElement.style.height=this.charMeasure.height*this.terminal.rows+"px",this.terminal.selectionContainer.style.height=this.viewportElement.style.height),this.scrollArea.style.height=this.charMeasure.height*this.lastRecordedBufferLength+"px"}},e.prototype.syncScrollArea=function(){this.lastRecordedBufferLength!==this.terminal.lines.length?(this.lastRecordedBufferLength=this.terminal.lines.length,this.refresh()):this.lastRecordedViewportHeight!==this.terminal.rows?this.refresh():this.charMeasure.height!==this.currentRowHeight&&this.refresh();var e=this.terminal.ydisp*this.currentRowHeight;this.viewportElement.scrollTop!==e&&(this.viewportElement.scrollTop=e)},e.prototype.onScroll=function(e){var t=Math.round(this.viewportElement.scrollTop/this.currentRowHeight)-this.terminal.ydisp;this.terminal.scrollDisp(t,!0)},e.prototype.onWheel=function(e){if(0!==e.deltaY){var t=1;e.deltaMode===WheelEvent.DOM_DELTA_LINE?t=this.currentRowHeight:e.deltaMode===WheelEvent.DOM_DELTA_PAGE&&(t=this.currentRowHeight*this.terminal.rows),this.viewportElement.scrollTop+=e.deltaY*t,e.preventDefault()}},e.prototype.onTouchStart=function(e){this.lastTouchY=e.touches[0].pageY},e.prototype.onTouchMove=function(e){var t=this.lastTouchY-e.touches[0].pageY;this.lastTouchY=e.touches[0].pageY,0!==t&&(this.viewportElement.scrollTop+=t,e.preventDefault())},e}();t.Viewport=i},function(e,t,r){"use strict";function i(e,t){return t?e.replace(/\r?\n/g,"\r"):e}function o(e,t){t.style.position="fixed",t.style.width="20px",t.style.height="20px",t.style.left=e.clientX-10+"px",t.style.top=e.clientY-10+"px",t.style.zIndex="1000",t.focus(),setTimeout(function(){t.style.position=null,t.style.width=null,t.style.height=null,t.style.left=null,t.style.top=null,t.style.zIndex=null},4)}Object.defineProperty(t,"__esModule",{value:!0}),t.prepareTextForTerminal=i,t.copyHandler=function(e,t,r){t.browser.isMSIE?window.clipboardData.setData("Text",r.selectionText):e.clipboardData.setData("text/plain",r.selectionText),e.preventDefault()},t.pasteHandler=function(e,t){e.stopPropagation();var r=function(r){return r=i(r,t.browser.isMSWindows),t.handler(r),t.textarea.value="",t.emit("paste",r),t.cancel(e)};t.browser.isMSIE?window.clipboardData&&r(window.clipboardData.getData("Text")):e.clipboardData&&r(e.clipboardData.getData("text/plain"))},t.moveTextAreaUnderMouseCursor=o,t.rightClickHandler=function(e,t,r){o(e,t),t.value=r.selectionText,t.select()}},function(e,t,r){"use strict";var i=this&&this.__extends||function(){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])};return function(t,r){function i(){this.constructor=t}e(t,r),t.prototype=null===r?Object.create(r):(i.prototype=r.prototype,new i)}}();Object.defineProperty(t,"__esModule",{value:!0});var o=function(e){function t(t,r){var i=e.call(this)||this;return i._document=t,i._parentElement=r,i}return i(t,e),Object.defineProperty(t.prototype,"width",{get:function(){return this._width},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"height",{get:function(){return this._height},enumerable:!0,configurable:!0}),t.prototype.measure=function(){var e=this;this._measureElement?this._doMeasure():(this._measureElement=this._document.createElement("span"),this._measureElement.style.position="absolute",this._measureElement.style.top="0",this._measureElement.style.left="-9999em",this._measureElement.textContent="W",this._measureElement.setAttribute("aria-hidden","true"),this._parentElement.appendChild(this._measureElement),setTimeout(function(){return e._doMeasure()},0))},t.prototype._doMeasure=function(){var e=this._measureElement.getBoundingClientRect();0!==e.width&&0!==e.height&&(this._width===e.width&&this._height===e.height||(this._width=e.width,this._height=e.height,this.emit("charsizechanged")))},t}(r(1).EventEmitter);t.CharMeasure=o},function(e,t,r){"use strict";var i=this&&this.__extends||function(){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])};return function(t,r){function i(){this.constructor=t}e(t,r),t.prototype=null===r?Object.create(r):(i.prototype=r.prototype,new i)}}();Object.defineProperty(t,"__esModule",{value:!0});var o=function(e){function t(t){var r=e.call(this)||this;return r._array=new Array(t),r._startIndex=0,r._length=0,r}return i(t,e),Object.defineProperty(t.prototype,"maxLength",{get:function(){return this._array.length},set:function(e){for(var t=new Array(e),r=0;rthis._length)for(var t=this._length;t=e;o--)this._array[this._getCyclicIndex(o+r.length)]=this._array[this._getCyclicIndex(o)];for(var o=0;othis.maxLength){var s=this._length+r.length-this.maxLength;this._startIndex+=s,this._length=this.maxLength,this.emit("trim",s)}else this._length+=r.length}},t.prototype.trimStart=function(e){e>this._length&&(e=this._length),this._startIndex+=e,this._length-=e,this.emit("trim",e)},t.prototype.shiftElements=function(e,t,r){if(!(t<=0)){if(e<0||e>=this._length)throw new Error("start argument out of range");if(e+r<0)throw new Error("Cannot shift elements in list beyond index 0");if(r>0){for(o=t-1;o>=0;o--)this.set(e+o+r,this.get(e+o));var i=e+t+r-this._length;if(i>0)for(this._length+=i;this._length>this.maxLength;)this._length--,this._startIndex++,this.emit("trim",1)}else for(var o=0;o=0}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=r(11),o=r(14),s=r(13),n=r(12),a=document.getElementById("terminal");if(null!==a){var l;l="hterm"==gotty_term?new i.Hterm(a):new o.Xterm(a);var h=("https:"==window.location.protocol?"wss://":"ws://")+window.location.host+window.location.pathname+"ws",c=window.location.search,u=new n.ConnectionFactory(h,s.protocols),d=new s.WebTTY(l,u,c,gotty_auth_token).open();window.addEventListener("unload",function(){d(),l.close()})}},function(e,t,r){function i(e){return r(o(e))}function o(e){var t=s[e];if(!(t+1))throw new Error("Cannot find module '"+e+"'.");return t}var s={"./attach/attach":5,"./attach/attach.js":5,"./attach/package.json":30,"./fit/fit":6,"./fit/fit.js":6,"./fit/package.json":31,"./fullscreen/fullscreen":7,"./fullscreen/fullscreen.css":32,"./fullscreen/fullscreen.js":7,"./fullscreen/package.json":33,"./terminado/package.json":34,"./terminado/terminado":8,"./terminado/terminado.js":8};i.keys=function(){return Object.keys(s)},i.resolve=o,e.exports=i,i.id=29},function(e,t){e.exports={name:"xterm.attach",main:"attach.js",private:!0}},function(e,t){e.exports={name:"xterm.fit",main:"fit.js",private:!0}},function(e,t){throw new Error("Module parse failed: /home/yudai/archive/products/2015/gotty/src/github.com/yudai/gotty/js/node_modules/xterm/lib/addons/fullscreen/fullscreen.css Unexpected token (1:0)\nYou may need an appropriate loader to handle this file type.\n| .xterm.fullscreen {\n| position: fixed;\n| top: 0;")},function(e,t){e.exports={name:"xterm.fullscreen",main:"fullscreen.js",private:!0}},function(e,t){e.exports={name:"xterm.terminado",main:"terminado.js",private:!0}}]);
\ No newline at end of file
diff --git a/vendor/github.com/yudai/gotty/js/dist/hterm.d.ts b/vendor/github.com/yudai/gotty/js/dist/hterm.d.ts
new file mode 100644
index 0000000..2402bda
--- /dev/null
+++ b/vendor/github.com/yudai/gotty/js/dist/hterm.d.ts
@@ -0,0 +1,24 @@
+import * as bare from "libapps";
+export declare class Hterm {
+ elem: HTMLElement;
+ term: bare.hterm.Terminal;
+ io: bare.hterm.IO;
+ columns: number;
+ rows: number;
+ message: string;
+ constructor(elem: HTMLElement);
+ info(): {
+ columns: number;
+ rows: number;
+ };
+ output(data: string): void;
+ showMessage(message: string, timeout: number): void;
+ removeMessage(): void;
+ setWindowTitle(title: string): void;
+ setPreferences(value: object): void;
+ onInput(callback: (input: string) => void): void;
+ onResize(callback: (colmuns: number, rows: number) => void): void;
+ deactivate(): void;
+ reset(): void;
+ close(): void;
+}
diff --git a/vendor/github.com/yudai/gotty/js/dist/main.d.ts b/vendor/github.com/yudai/gotty/js/dist/main.d.ts
new file mode 100644
index 0000000..e69de29
diff --git a/vendor/github.com/yudai/gotty/js/dist/websocket.d.ts b/vendor/github.com/yudai/gotty/js/dist/websocket.d.ts
new file mode 100644
index 0000000..0ce5eab
--- /dev/null
+++ b/vendor/github.com/yudai/gotty/js/dist/websocket.d.ts
@@ -0,0 +1,17 @@
+export declare class ConnectionFactory {
+ url: string;
+ protocols: string[];
+ constructor(url: string, protocols: string[]);
+ create(): Connection;
+}
+export declare class Connection {
+ bare: WebSocket;
+ constructor(url: string, protocols: string[]);
+ open(): void;
+ close(): void;
+ send(data: string): void;
+ isOpen(): boolean;
+ onOpen(callback: () => void): void;
+ onReceive(callback: (data: string) => void): void;
+ onClose(callback: () => void): void;
+}
diff --git a/vendor/github.com/yudai/gotty/js/dist/webtty.d.ts b/vendor/github.com/yudai/gotty/js/dist/webtty.d.ts
new file mode 100644
index 0000000..782c815
--- /dev/null
+++ b/vendor/github.com/yudai/gotty/js/dist/webtty.d.ts
@@ -0,0 +1,48 @@
+export declare const protocols: string[];
+export declare const msgInputUnknown = "0";
+export declare const msgInput = "1";
+export declare const msgPing = "2";
+export declare const msgResizeTerminal = "3";
+export declare const msgUnknownOutput = "0";
+export declare const msgOutput = "1";
+export declare const msgPong = "2";
+export declare const msgSetWindowTitle = "3";
+export declare const msgSetPreferences = "4";
+export declare const msgSetReconnect = "5";
+export interface Terminal {
+ info(): {
+ columns: number;
+ rows: number;
+ };
+ output(data: string): void;
+ showMessage(message: string, timeout: number): void;
+ removeMessage(): void;
+ setWindowTitle(title: string): void;
+ setPreferences(value: object): void;
+ onInput(callback: (input: string) => void): void;
+ onResize(callback: (colmuns: number, rows: number) => void): void;
+ reset(): void;
+ deactivate(): void;
+ close(): void;
+}
+export interface Connection {
+ open(): void;
+ close(): void;
+ send(data: string): void;
+ isOpen(): boolean;
+ onOpen(callback: () => void): void;
+ onReceive(callback: (data: string) => void): void;
+ onClose(callback: () => void): void;
+}
+export interface ConnectionFactory {
+ create(): Connection;
+}
+export declare class WebTTY {
+ term: Terminal;
+ connectionFactory: ConnectionFactory;
+ args: string;
+ authToken: string;
+ reconnect: number;
+ constructor(term: Terminal, connectionFactory: ConnectionFactory, args: string, authToken: string);
+ open(): () => void;
+}
diff --git a/vendor/github.com/yudai/gotty/js/dist/xterm.d.ts b/vendor/github.com/yudai/gotty/js/dist/xterm.d.ts
new file mode 100644
index 0000000..053d8e8
--- /dev/null
+++ b/vendor/github.com/yudai/gotty/js/dist/xterm.d.ts
@@ -0,0 +1,26 @@
+import * as bare from "xterm";
+import { lib } from "libapps";
+export declare class Xterm {
+ elem: HTMLElement;
+ term: bare;
+ resizeListener: () => void;
+ decoder: lib.UTF8Decoder;
+ message: HTMLElement;
+ messageTimeout: number;
+ messageTimer: number;
+ constructor(elem: HTMLElement);
+ info(): {
+ columns: number;
+ rows: number;
+ };
+ output(data: string): void;
+ showMessage(message: string, timeout: number): void;
+ removeMessage(): void;
+ setWindowTitle(title: string): void;
+ setPreferences(value: object): void;
+ onInput(callback: (input: string) => void): void;
+ onResize(callback: (colmuns: number, rows: number) => void): void;
+ deactivate(): void;
+ reset(): void;
+ close(): void;
+}
diff --git a/vendor/github.com/yudai/gotty/js/package-lock.json b/vendor/github.com/yudai/gotty/js/package-lock.json
new file mode 100644
index 0000000..0a9eede
--- /dev/null
+++ b/vendor/github.com/yudai/gotty/js/package-lock.json
@@ -0,0 +1,2404 @@
+{
+ "requires": true,
+ "lockfileVersion": 1,
+ "dependencies": {
+ "acorn": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.1.1.tgz",
+ "integrity": "sha512-vOk6uEMctu0vQrvuSqFdJyqj1Q0S5VTDL79qtjo+DhRr+1mmaD+tluFSCZqhvi/JUhXSzoZN2BhtstaPEeE8cw==",
+ "dev": true
+ },
+ "acorn-dynamic-import": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz",
+ "integrity": "sha1-x1K9IQvvZ5UBtsbLf8hPj0cVjMQ=",
+ "dev": true,
+ "requires": {
+ "acorn": "4.0.13"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "4.0.13",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz",
+ "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=",
+ "dev": true
+ }
+ }
+ },
+ "ajv": {
+ "version": "4.11.8",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz",
+ "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=",
+ "dev": true,
+ "requires": {
+ "co": "4.6.0",
+ "json-stable-stringify": "1.0.1"
+ }
+ },
+ "ajv-keywords": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-1.5.1.tgz",
+ "integrity": "sha1-MU3QpLM2j609/NxU7eYXG4htrzw=",
+ "dev": true
+ },
+ "align-text": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz",
+ "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2",
+ "longest": "1.0.1",
+ "repeat-string": "1.6.1"
+ }
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "anymatch": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.0.tgz",
+ "integrity": "sha1-o+Uvo5FoyCX/V7AkgSbOWo/5VQc=",
+ "dev": true,
+ "requires": {
+ "arrify": "1.0.1",
+ "micromatch": "2.3.11"
+ }
+ },
+ "aproba": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.1.2.tgz",
+ "integrity": "sha512-ZpYajIfO0j2cOFTO955KUMIKNmj6zhX8kVztMAxFsDaMwz+9Z9SV0uou2pC9HJqcfpffOsjnbrDMvkNy+9RXPw==",
+ "dev": true
+ },
+ "arr-diff": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz",
+ "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "1.1.0"
+ }
+ },
+ "arr-flatten": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
+ "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
+ "dev": true
+ },
+ "array-unique": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz",
+ "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=",
+ "dev": true
+ },
+ "arrify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
+ "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=",
+ "dev": true
+ },
+ "asn1.js": {
+ "version": "4.9.1",
+ "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.9.1.tgz",
+ "integrity": "sha1-SLokC0WpKA6UdImQull9IWYX/UA=",
+ "dev": true,
+ "requires": {
+ "bn.js": "4.11.7",
+ "inherits": "2.0.3",
+ "minimalistic-assert": "1.0.0"
+ }
+ },
+ "assert": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz",
+ "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=",
+ "dev": true,
+ "requires": {
+ "util": "0.10.3"
+ }
+ },
+ "async": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/async/-/async-2.5.0.tgz",
+ "integrity": "sha512-e+lJAJeNWuPCNyxZKOBdaJGyLGHugXVQtrAwtuAe2vhxTYxFTKE73p8JuTmdH0qdQZtDvI4dhJwjZc5zsfIsYw==",
+ "dev": true,
+ "requires": {
+ "lodash": "4.17.4"
+ }
+ },
+ "async-each": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz",
+ "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=",
+ "dev": true
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true
+ },
+ "base64-js": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.1.tgz",
+ "integrity": "sha512-dwVUVIXsBZXwTuwnXI9RK8sBmgq09NDHzyR9SAph9eqk76gKK2JSQmZARC2zRC81JC2QTtxD0ARU5qTS25gIGw==",
+ "dev": true
+ },
+ "big.js": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.1.3.tgz",
+ "integrity": "sha1-TK2iGTZS6zyp7I5VyQFWacmAaXg=",
+ "dev": true
+ },
+ "binary-extensions": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.9.0.tgz",
+ "integrity": "sha1-ZlBsFs5vTWkopbPNajPKQelB43s=",
+ "dev": true
+ },
+ "bluebird": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.0.tgz",
+ "integrity": "sha1-eRQg1/VR7qKJdFOop3ZT+WYG1nw=",
+ "dev": true
+ },
+ "bn.js": {
+ "version": "4.11.7",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.7.tgz",
+ "integrity": "sha512-LxFiV5mefv0ley0SzqkOPR1bC4EbpPx8LkOz5vMe/Yi15t5hzwgO/G+tc7wOtL4PZTYjwHu8JnEiSLumuSjSfA==",
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz",
+ "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=",
+ "dev": true,
+ "requires": {
+ "balanced-match": "1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "braces": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz",
+ "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=",
+ "dev": true,
+ "requires": {
+ "expand-range": "1.8.2",
+ "preserve": "0.2.0",
+ "repeat-element": "1.1.2"
+ }
+ },
+ "brorand": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
+ "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=",
+ "dev": true
+ },
+ "browserify-aes": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.0.6.tgz",
+ "integrity": "sha1-Xncl297x/Vkw1OurSFZ85FHEigo=",
+ "dev": true,
+ "requires": {
+ "buffer-xor": "1.0.3",
+ "cipher-base": "1.0.4",
+ "create-hash": "1.1.3",
+ "evp_bytestokey": "1.0.0",
+ "inherits": "2.0.3"
+ }
+ },
+ "browserify-cipher": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.0.tgz",
+ "integrity": "sha1-mYgkSHS/XtTijalWZtzWasj8Njo=",
+ "dev": true,
+ "requires": {
+ "browserify-aes": "1.0.6",
+ "browserify-des": "1.0.0",
+ "evp_bytestokey": "1.0.0"
+ }
+ },
+ "browserify-des": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.0.tgz",
+ "integrity": "sha1-2qJ3cXRwki7S/hhZQRihdUOXId0=",
+ "dev": true,
+ "requires": {
+ "cipher-base": "1.0.4",
+ "des.js": "1.0.0",
+ "inherits": "2.0.3"
+ }
+ },
+ "browserify-rsa": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz",
+ "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=",
+ "dev": true,
+ "requires": {
+ "bn.js": "4.11.7",
+ "randombytes": "2.0.5"
+ }
+ },
+ "browserify-sign": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz",
+ "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=",
+ "dev": true,
+ "requires": {
+ "bn.js": "4.11.7",
+ "browserify-rsa": "4.0.1",
+ "create-hash": "1.1.3",
+ "create-hmac": "1.1.6",
+ "elliptic": "6.4.0",
+ "inherits": "2.0.3",
+ "parse-asn1": "5.1.0"
+ }
+ },
+ "browserify-zlib": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz",
+ "integrity": "sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=",
+ "dev": true,
+ "requires": {
+ "pako": "0.2.9"
+ }
+ },
+ "buffer": {
+ "version": "4.9.1",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz",
+ "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=",
+ "dev": true,
+ "requires": {
+ "base64-js": "1.2.1",
+ "ieee754": "1.1.8",
+ "isarray": "1.0.0"
+ }
+ },
+ "buffer-xor": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
+ "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=",
+ "dev": true
+ },
+ "builtin-modules": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
+ "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=",
+ "dev": true
+ },
+ "builtin-status-codes": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz",
+ "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=",
+ "dev": true
+ },
+ "cacache": {
+ "version": "9.2.9",
+ "resolved": "https://registry.npmjs.org/cacache/-/cacache-9.2.9.tgz",
+ "integrity": "sha512-ghg1j5OyTJ6qsrqU++dN23QiTDxb5AZCFGsF3oB+v9v/gY+F4X8L/0gdQMEjd+8Ot3D29M2etX5PKozHRn2JQw==",
+ "dev": true,
+ "requires": {
+ "bluebird": "3.5.0",
+ "chownr": "1.0.1",
+ "glob": "7.1.2",
+ "graceful-fs": "4.1.11",
+ "lru-cache": "4.1.1",
+ "mississippi": "1.3.0",
+ "mkdirp": "0.5.1",
+ "move-concurrently": "1.0.1",
+ "promise-inflight": "1.0.1",
+ "rimraf": "2.6.1",
+ "ssri": "4.1.6",
+ "unique-filename": "1.1.0",
+ "y18n": "3.2.1"
+ }
+ },
+ "camelcase": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz",
+ "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=",
+ "dev": true
+ },
+ "center-align": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz",
+ "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=",
+ "dev": true,
+ "requires": {
+ "align-text": "0.1.4",
+ "lazy-cache": "1.0.4"
+ }
+ },
+ "chokidar": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz",
+ "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=",
+ "dev": true,
+ "requires": {
+ "anymatch": "1.3.0",
+ "async-each": "1.0.1",
+ "glob-parent": "2.0.0",
+ "inherits": "2.0.3",
+ "is-binary-path": "1.0.1",
+ "is-glob": "2.0.1",
+ "path-is-absolute": "1.0.1",
+ "readdirp": "2.1.0"
+ }
+ },
+ "chownr": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.0.1.tgz",
+ "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=",
+ "dev": true
+ },
+ "cipher-base": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
+ "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "cliui": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz",
+ "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=",
+ "dev": true,
+ "requires": {
+ "center-align": "0.1.3",
+ "right-align": "0.1.3",
+ "wordwrap": "0.0.2"
+ }
+ },
+ "co": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
+ "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
+ "dev": true
+ },
+ "code-point-at": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
+ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
+ "dev": true
+ },
+ "colors": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz",
+ "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=",
+ "dev": true
+ },
+ "commander": {
+ "version": "2.11.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz",
+ "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==",
+ "dev": true
+ },
+ "commondir": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
+ "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=",
+ "dev": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "concat-stream": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz",
+ "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.3",
+ "typedarray": "0.0.6"
+ }
+ },
+ "console-browserify": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz",
+ "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=",
+ "dev": true,
+ "requires": {
+ "date-now": "0.1.4"
+ }
+ },
+ "constants-browserify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz",
+ "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=",
+ "dev": true
+ },
+ "copy-concurrently": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.3.tgz",
+ "integrity": "sha1-Rft4ZiSaHKiJqlcI5svSc+dbslA=",
+ "dev": true,
+ "requires": {
+ "aproba": "1.1.2",
+ "fs-write-stream-atomic": "1.0.10",
+ "iferr": "0.1.5",
+ "mkdirp": "0.5.1",
+ "rimraf": "2.6.1",
+ "run-queue": "1.0.3"
+ }
+ },
+ "core-util-is": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true
+ },
+ "create-ecdh": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.0.tgz",
+ "integrity": "sha1-iIxyNZbN92EvZJgjPuvXo1MBc30=",
+ "dev": true,
+ "requires": {
+ "bn.js": "4.11.7",
+ "elliptic": "6.4.0"
+ }
+ },
+ "create-hash": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz",
+ "integrity": "sha1-YGBCrIuSYnUPSDyt2rD1gZFy2P0=",
+ "dev": true,
+ "requires": {
+ "cipher-base": "1.0.4",
+ "inherits": "2.0.3",
+ "ripemd160": "2.0.1",
+ "sha.js": "2.4.8"
+ }
+ },
+ "create-hmac": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.6.tgz",
+ "integrity": "sha1-rLniIaThe9sHbpBlfEK5PjcmzwY=",
+ "dev": true,
+ "requires": {
+ "cipher-base": "1.0.4",
+ "create-hash": "1.1.3",
+ "inherits": "2.0.3",
+ "ripemd160": "2.0.1",
+ "safe-buffer": "5.1.1",
+ "sha.js": "2.4.8"
+ }
+ },
+ "crypto-browserify": {
+ "version": "3.11.1",
+ "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.11.1.tgz",
+ "integrity": "sha512-Na7ZlwCOqoaW5RwUK1WpXws2kv8mNhWdTlzob0UXulk6G9BDbyiJaGTYBIX61Ozn9l1EPPJpICZb4DaOpT9NlQ==",
+ "dev": true,
+ "requires": {
+ "browserify-cipher": "1.0.0",
+ "browserify-sign": "4.0.4",
+ "create-ecdh": "4.0.0",
+ "create-hash": "1.1.3",
+ "create-hmac": "1.1.6",
+ "diffie-hellman": "5.0.2",
+ "inherits": "2.0.3",
+ "pbkdf2": "3.0.12",
+ "public-encrypt": "4.0.0",
+ "randombytes": "2.0.5"
+ }
+ },
+ "cyclist": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz",
+ "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=",
+ "dev": true
+ },
+ "date-now": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz",
+ "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=",
+ "dev": true
+ },
+ "decamelize": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
+ "dev": true
+ },
+ "des.js": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz",
+ "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "minimalistic-assert": "1.0.0"
+ }
+ },
+ "diffie-hellman": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.2.tgz",
+ "integrity": "sha1-tYNXOScM/ias9jIJn97SoH8gnl4=",
+ "dev": true,
+ "requires": {
+ "bn.js": "4.11.7",
+ "miller-rabin": "4.0.0",
+ "randombytes": "2.0.5"
+ }
+ },
+ "domain-browser": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.1.7.tgz",
+ "integrity": "sha1-hnqksJP6oF8d4IwG9NeyH9+GmLw=",
+ "dev": true
+ },
+ "duplexify": {
+ "version": "3.5.1",
+ "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.5.1.tgz",
+ "integrity": "sha512-j5goxHTwVED1Fpe5hh3q9R93Kip0Bg2KVAt4f8CEYM3UEwYcPSvWbXaUQOzdX/HtiNomipv+gU7ASQPDbV7pGQ==",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "1.4.0",
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.3",
+ "stream-shift": "1.0.0"
+ }
+ },
+ "elliptic": {
+ "version": "6.4.0",
+ "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz",
+ "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=",
+ "dev": true,
+ "requires": {
+ "bn.js": "4.11.7",
+ "brorand": "1.1.0",
+ "hash.js": "1.1.3",
+ "hmac-drbg": "1.0.1",
+ "inherits": "2.0.3",
+ "minimalistic-assert": "1.0.0",
+ "minimalistic-crypto-utils": "1.0.1"
+ }
+ },
+ "emojis-list": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz",
+ "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=",
+ "dev": true
+ },
+ "end-of-stream": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.0.tgz",
+ "integrity": "sha1-epDYM+/abPpurA9JSduw+tOmMgY=",
+ "dev": true,
+ "requires": {
+ "once": "1.4.0"
+ }
+ },
+ "enhanced-resolve": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-3.3.0.tgz",
+ "integrity": "sha512-2qbxE7ek3YxPJ1ML6V+satHkzHpJQKWkRHmRx6mfAoW59yP8YH8BFplbegSP+u2hBd6B6KCOpvJQ3dZAP+hkpg==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "memory-fs": "0.4.1",
+ "object-assign": "4.1.1",
+ "tapable": "0.2.7"
+ }
+ },
+ "errno": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.4.tgz",
+ "integrity": "sha1-uJbiOp5ei6M4cfyZar02NfyaHH0=",
+ "dev": true,
+ "requires": {
+ "prr": "0.0.0"
+ }
+ },
+ "error-ex": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz",
+ "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=",
+ "dev": true,
+ "requires": {
+ "is-arrayish": "0.2.1"
+ }
+ },
+ "events": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz",
+ "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=",
+ "dev": true
+ },
+ "evp_bytestokey": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.0.tgz",
+ "integrity": "sha1-SXtmrZ/vZc18CKYYCCS6FHa2blM=",
+ "dev": true,
+ "requires": {
+ "create-hash": "1.1.3"
+ }
+ },
+ "expand-brackets": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz",
+ "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=",
+ "dev": true,
+ "requires": {
+ "is-posix-bracket": "0.1.1"
+ }
+ },
+ "expand-range": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz",
+ "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=",
+ "dev": true,
+ "requires": {
+ "fill-range": "2.2.3"
+ }
+ },
+ "extglob": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz",
+ "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "1.0.0"
+ }
+ },
+ "fast-deep-equal": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz",
+ "integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8=",
+ "dev": true
+ },
+ "filename-regex": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz",
+ "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=",
+ "dev": true
+ },
+ "fill-range": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz",
+ "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=",
+ "dev": true,
+ "requires": {
+ "is-number": "2.1.0",
+ "isobject": "2.1.0",
+ "randomatic": "1.1.7",
+ "repeat-element": "1.1.2",
+ "repeat-string": "1.6.1"
+ }
+ },
+ "find-cache-dir": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz",
+ "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=",
+ "dev": true,
+ "requires": {
+ "commondir": "1.0.1",
+ "make-dir": "1.0.0",
+ "pkg-dir": "2.0.0"
+ }
+ },
+ "find-up": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
+ "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
+ "dev": true,
+ "requires": {
+ "path-exists": "2.1.0",
+ "pinkie-promise": "2.0.1"
+ }
+ },
+ "flush-write-stream": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.2.tgz",
+ "integrity": "sha1-yBuQ2HRnZvGmCaRoCZRsRd2K5Bc=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.3"
+ }
+ },
+ "for-in": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
+ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
+ "dev": true
+ },
+ "for-own": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz",
+ "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=",
+ "dev": true,
+ "requires": {
+ "for-in": "1.0.2"
+ }
+ },
+ "from2": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz",
+ "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.3"
+ }
+ },
+ "fs-write-stream-atomic": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz",
+ "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "iferr": "0.1.5",
+ "imurmurhash": "0.1.4",
+ "readable-stream": "2.3.3"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "get-caller-file": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz",
+ "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=",
+ "dev": true
+ },
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "glob-base": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz",
+ "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=",
+ "dev": true,
+ "requires": {
+ "glob-parent": "2.0.0",
+ "is-glob": "2.0.1"
+ }
+ },
+ "glob-parent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz",
+ "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=",
+ "dev": true,
+ "requires": {
+ "is-glob": "2.0.1"
+ }
+ },
+ "graceful-fs": {
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
+ "dev": true
+ },
+ "hash-base": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz",
+ "integrity": "sha1-ZuodhW206KVHDK32/OI65SRO8uE=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3"
+ }
+ },
+ "hash.js": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz",
+ "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "minimalistic-assert": "1.0.0"
+ }
+ },
+ "hmac-drbg": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
+ "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
+ "dev": true,
+ "requires": {
+ "hash.js": "1.1.3",
+ "minimalistic-assert": "1.0.0",
+ "minimalistic-crypto-utils": "1.0.1"
+ }
+ },
+ "hosted-git-info": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz",
+ "integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==",
+ "dev": true
+ },
+ "https-browserify": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-0.0.1.tgz",
+ "integrity": "sha1-P5E2XKvmC3ftDruiS0VOPgnZWoI=",
+ "dev": true
+ },
+ "ieee754": {
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz",
+ "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=",
+ "dev": true
+ },
+ "iferr": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz",
+ "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=",
+ "dev": true
+ },
+ "imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
+ "dev": true
+ },
+ "indexof": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz",
+ "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "requires": {
+ "once": "1.4.0",
+ "wrappy": "1.0.2"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "interpret": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.0.3.tgz",
+ "integrity": "sha1-y8NcYu7uc/Gat7EKgBURQBr8D5A=",
+ "dev": true
+ },
+ "invert-kv": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
+ "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=",
+ "dev": true
+ },
+ "is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
+ "dev": true
+ },
+ "is-binary-path": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
+ "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
+ "dev": true,
+ "requires": {
+ "binary-extensions": "1.9.0"
+ }
+ },
+ "is-buffer": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.5.tgz",
+ "integrity": "sha1-Hzsm72E7IUuIy8ojzGwB2Hlh7sw=",
+ "dev": true
+ },
+ "is-builtin-module": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz",
+ "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=",
+ "dev": true,
+ "requires": {
+ "builtin-modules": "1.1.1"
+ }
+ },
+ "is-dotfile": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz",
+ "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=",
+ "dev": true
+ },
+ "is-equal-shallow": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz",
+ "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=",
+ "dev": true,
+ "requires": {
+ "is-primitive": "2.0.0"
+ }
+ },
+ "is-extendable": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+ "dev": true
+ },
+ "is-extglob": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
+ "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
+ "dev": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
+ },
+ "is-glob": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
+ "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "1.0.0"
+ }
+ },
+ "is-number": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz",
+ "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ }
+ },
+ "is-posix-bracket": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz",
+ "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=",
+ "dev": true
+ },
+ "is-primitive": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz",
+ "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=",
+ "dev": true
+ },
+ "is-utf8": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
+ "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "dev": true,
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ },
+ "json-loader": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/json-loader/-/json-loader-0.5.7.tgz",
+ "integrity": "sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w==",
+ "dev": true
+ },
+ "json-schema-traverse": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz",
+ "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=",
+ "dev": true
+ },
+ "json-stable-stringify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz",
+ "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=",
+ "dev": true,
+ "requires": {
+ "jsonify": "0.0.0"
+ }
+ },
+ "json5": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
+ "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=",
+ "dev": true
+ },
+ "jsonify": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz",
+ "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.5"
+ }
+ },
+ "lazy-cache": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz",
+ "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=",
+ "dev": true
+ },
+ "lcid": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
+ "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
+ "dev": true,
+ "requires": {
+ "invert-kv": "1.0.0"
+ }
+ },
+ "libapps": {
+ "version": "github:yudai/libapps#424e3e95e5346ef0c0c281aaf2ef73463a55b39e"
+ },
+ "license-loader": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/license-loader/-/license-loader-0.5.0.tgz",
+ "integrity": "sha512-4p+estbTHilHxOXv/wh8qHndksfINzBT6HGvgIU4sfwWu28kCByHGV57K/HVgSujoFFv2wCITghGbK/qRiRbUQ==",
+ "dev": true
+ },
+ "load-json-file": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
+ "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "parse-json": "2.2.0",
+ "pify": "2.3.0",
+ "pinkie-promise": "2.0.1",
+ "strip-bom": "2.0.0"
+ }
+ },
+ "loader-runner": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.3.0.tgz",
+ "integrity": "sha1-9IKuqC1UPgeSFwDVpG7yb9rGuKI=",
+ "dev": true
+ },
+ "loader-utils": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz",
+ "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=",
+ "dev": true,
+ "requires": {
+ "big.js": "3.1.3",
+ "emojis-list": "2.1.0",
+ "json5": "0.5.1"
+ }
+ },
+ "locate-path": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
+ "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
+ "dev": true,
+ "requires": {
+ "p-locate": "2.0.0",
+ "path-exists": "3.0.0"
+ },
+ "dependencies": {
+ "path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+ "dev": true
+ }
+ }
+ },
+ "lodash": {
+ "version": "4.17.4",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz",
+ "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=",
+ "dev": true
+ },
+ "longest": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
+ "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=",
+ "dev": true
+ },
+ "lru-cache": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz",
+ "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==",
+ "dev": true,
+ "requires": {
+ "pseudomap": "1.0.2",
+ "yallist": "2.1.2"
+ }
+ },
+ "make-dir": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.0.0.tgz",
+ "integrity": "sha1-l6ARdR6R3YfPre9Ygy67BJNt6Xg=",
+ "dev": true,
+ "requires": {
+ "pify": "2.3.0"
+ }
+ },
+ "memory-fs": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz",
+ "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=",
+ "dev": true,
+ "requires": {
+ "errno": "0.1.4",
+ "readable-stream": "2.3.3"
+ }
+ },
+ "micromatch": {
+ "version": "2.3.11",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz",
+ "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=",
+ "dev": true,
+ "requires": {
+ "arr-diff": "2.0.0",
+ "array-unique": "0.2.1",
+ "braces": "1.8.5",
+ "expand-brackets": "0.1.5",
+ "extglob": "0.3.2",
+ "filename-regex": "2.0.1",
+ "is-extglob": "1.0.0",
+ "is-glob": "2.0.1",
+ "kind-of": "3.2.2",
+ "normalize-path": "2.1.1",
+ "object.omit": "2.0.1",
+ "parse-glob": "3.0.4",
+ "regex-cache": "0.4.3"
+ }
+ },
+ "miller-rabin": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.0.tgz",
+ "integrity": "sha1-SmL7HUKTPAVYOYL0xxb2+55sbT0=",
+ "dev": true,
+ "requires": {
+ "bn.js": "4.11.7",
+ "brorand": "1.1.0"
+ }
+ },
+ "minimalistic-assert": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz",
+ "integrity": "sha1-cCvi3aazf0g2vLP121ZkG2Sh09M=",
+ "dev": true
+ },
+ "minimalistic-crypto-utils": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
+ "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=",
+ "dev": true
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "1.1.8"
+ }
+ },
+ "minimist": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
+ "dev": true
+ },
+ "mississippi": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-1.3.0.tgz",
+ "integrity": "sha1-0gFYPrEjJ+PFwWQqQEqcrPlONPU=",
+ "dev": true,
+ "requires": {
+ "concat-stream": "1.6.0",
+ "duplexify": "3.5.1",
+ "end-of-stream": "1.4.0",
+ "flush-write-stream": "1.0.2",
+ "from2": "2.3.0",
+ "parallel-transform": "1.1.0",
+ "pump": "1.0.2",
+ "pumpify": "1.3.5",
+ "stream-each": "1.2.0",
+ "through2": "2.0.3"
+ }
+ },
+ "mkdirp": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+ "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+ "dev": true,
+ "requires": {
+ "minimist": "0.0.8"
+ }
+ },
+ "move-concurrently": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz",
+ "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=",
+ "dev": true,
+ "requires": {
+ "aproba": "1.1.2",
+ "copy-concurrently": "1.0.3",
+ "fs-write-stream-atomic": "1.0.10",
+ "mkdirp": "0.5.1",
+ "rimraf": "2.6.1",
+ "run-queue": "1.0.3"
+ }
+ },
+ "node-libs-browser": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.0.0.tgz",
+ "integrity": "sha1-o6WeyXAkmFtG6Vg3lkb5bEthZkY=",
+ "dev": true,
+ "requires": {
+ "assert": "1.4.1",
+ "browserify-zlib": "0.1.4",
+ "buffer": "4.9.1",
+ "console-browserify": "1.1.0",
+ "constants-browserify": "1.0.0",
+ "crypto-browserify": "3.11.1",
+ "domain-browser": "1.1.7",
+ "events": "1.1.1",
+ "https-browserify": "0.0.1",
+ "os-browserify": "0.2.1",
+ "path-browserify": "0.0.0",
+ "process": "0.11.10",
+ "punycode": "1.4.1",
+ "querystring-es3": "0.2.1",
+ "readable-stream": "2.3.3",
+ "stream-browserify": "2.0.1",
+ "stream-http": "2.7.2",
+ "string_decoder": "0.10.31",
+ "timers-browserify": "2.0.2",
+ "tty-browserify": "0.0.0",
+ "url": "0.11.0",
+ "util": "0.10.3",
+ "vm-browserify": "0.0.4"
+ },
+ "dependencies": {
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "dev": true
+ }
+ }
+ },
+ "normalize-package-data": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
+ "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==",
+ "dev": true,
+ "requires": {
+ "hosted-git-info": "2.5.0",
+ "is-builtin-module": "1.0.0",
+ "semver": "5.3.0",
+ "validate-npm-package-license": "3.0.1"
+ }
+ },
+ "normalize-path": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
+ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+ "dev": true,
+ "requires": {
+ "remove-trailing-separator": "1.0.2"
+ }
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "dev": true
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+ "dev": true
+ },
+ "object.omit": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz",
+ "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=",
+ "dev": true,
+ "requires": {
+ "for-own": "0.1.5",
+ "is-extendable": "0.1.1"
+ }
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1.0.2"
+ }
+ },
+ "os-browserify": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.2.1.tgz",
+ "integrity": "sha1-Y/xMzuXS13Y9Jrv4YBB45sLgBE8=",
+ "dev": true
+ },
+ "os-locale": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz",
+ "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=",
+ "dev": true,
+ "requires": {
+ "lcid": "1.0.0"
+ }
+ },
+ "p-limit": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.1.0.tgz",
+ "integrity": "sha1-sH/y2aXYi+yAYDWJWiurZqJ5iLw=",
+ "dev": true
+ },
+ "p-locate": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
+ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
+ "dev": true,
+ "requires": {
+ "p-limit": "1.1.0"
+ }
+ },
+ "pako": {
+ "version": "0.2.9",
+ "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz",
+ "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=",
+ "dev": true
+ },
+ "parallel-transform": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz",
+ "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=",
+ "dev": true,
+ "requires": {
+ "cyclist": "0.2.2",
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.3"
+ }
+ },
+ "parse-asn1": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.0.tgz",
+ "integrity": "sha1-N8T5t+06tlx0gXtfJICTf7+XxxI=",
+ "dev": true,
+ "requires": {
+ "asn1.js": "4.9.1",
+ "browserify-aes": "1.0.6",
+ "create-hash": "1.1.3",
+ "evp_bytestokey": "1.0.0",
+ "pbkdf2": "3.0.12"
+ }
+ },
+ "parse-glob": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz",
+ "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=",
+ "dev": true,
+ "requires": {
+ "glob-base": "0.3.0",
+ "is-dotfile": "1.0.3",
+ "is-extglob": "1.0.0",
+ "is-glob": "2.0.1"
+ }
+ },
+ "parse-json": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
+ "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
+ "dev": true,
+ "requires": {
+ "error-ex": "1.3.1"
+ }
+ },
+ "path-browserify": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz",
+ "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=",
+ "dev": true
+ },
+ "path-exists": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
+ "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
+ "dev": true,
+ "requires": {
+ "pinkie-promise": "2.0.1"
+ }
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true
+ },
+ "path-type": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
+ "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "pify": "2.3.0",
+ "pinkie-promise": "2.0.1"
+ }
+ },
+ "pbkdf2": {
+ "version": "3.0.12",
+ "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.12.tgz",
+ "integrity": "sha1-vjZ4XFBn6kjYBv+SMojF91C2uKI=",
+ "dev": true,
+ "requires": {
+ "create-hash": "1.1.3",
+ "create-hmac": "1.1.6",
+ "ripemd160": "2.0.1",
+ "safe-buffer": "5.1.1",
+ "sha.js": "2.4.8"
+ }
+ },
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true
+ },
+ "pinkie": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
+ "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
+ "dev": true
+ },
+ "pinkie-promise": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
+ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
+ "dev": true,
+ "requires": {
+ "pinkie": "2.0.4"
+ }
+ },
+ "pkg-dir": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz",
+ "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=",
+ "dev": true,
+ "requires": {
+ "find-up": "2.1.0"
+ },
+ "dependencies": {
+ "find-up": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
+ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
+ "dev": true,
+ "requires": {
+ "locate-path": "2.0.0"
+ }
+ }
+ }
+ },
+ "preserve": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz",
+ "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=",
+ "dev": true
+ },
+ "process": {
+ "version": "0.11.10",
+ "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
+ "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
+ "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=",
+ "dev": true
+ },
+ "promise-inflight": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz",
+ "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=",
+ "dev": true
+ },
+ "prr": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/prr/-/prr-0.0.0.tgz",
+ "integrity": "sha1-GoS4WQgyVQFBGFPQCB7j+obikmo=",
+ "dev": true
+ },
+ "pseudomap": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
+ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
+ "dev": true
+ },
+ "public-encrypt": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.0.tgz",
+ "integrity": "sha1-OfaZ86RlYN1eusvKaTyvfGXBjMY=",
+ "dev": true,
+ "requires": {
+ "bn.js": "4.11.7",
+ "browserify-rsa": "4.0.1",
+ "create-hash": "1.1.3",
+ "parse-asn1": "5.1.0",
+ "randombytes": "2.0.5"
+ }
+ },
+ "pump": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.2.tgz",
+ "integrity": "sha1-Oz7mUS+U8OV1U4wXmV+fFpkKXVE=",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "1.4.0",
+ "once": "1.4.0"
+ }
+ },
+ "pumpify": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.3.5.tgz",
+ "integrity": "sha1-G2ccYZlAq8rqwK0OOjwWS+dgmTs=",
+ "dev": true,
+ "requires": {
+ "duplexify": "3.5.1",
+ "inherits": "2.0.3",
+ "pump": "1.0.2"
+ }
+ },
+ "punycode": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
+ "dev": true
+ },
+ "querystring": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
+ "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=",
+ "dev": true
+ },
+ "querystring-es3": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz",
+ "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=",
+ "dev": true
+ },
+ "randomatic": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz",
+ "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==",
+ "dev": true,
+ "requires": {
+ "is-number": "3.0.0",
+ "kind-of": "4.0.0"
+ },
+ "dependencies": {
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.5"
+ }
+ }
+ }
+ },
+ "kind-of": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
+ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.5"
+ }
+ }
+ }
+ },
+ "randombytes": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.5.tgz",
+ "integrity": "sha512-8T7Zn1AhMsQ/HI1SjcCfT/t4ii3eAqco3yOcSzS4mozsOz69lHLsoMXmF9nZgnFanYscnSlUSgs8uZyKzpE6kg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "read-pkg": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
+ "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
+ "dev": true,
+ "requires": {
+ "load-json-file": "1.1.0",
+ "normalize-package-data": "2.4.0",
+ "path-type": "1.1.0"
+ }
+ },
+ "read-pkg-up": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
+ "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
+ "dev": true,
+ "requires": {
+ "find-up": "1.1.2",
+ "read-pkg": "1.1.0"
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
+ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "1.0.7",
+ "safe-buffer": "5.1.1",
+ "string_decoder": "1.0.3",
+ "util-deprecate": "1.0.2"
+ }
+ },
+ "readdirp": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz",
+ "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "minimatch": "3.0.4",
+ "readable-stream": "2.3.3",
+ "set-immediate-shim": "1.0.1"
+ }
+ },
+ "regex-cache": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.3.tgz",
+ "integrity": "sha1-mxpsNdTQ3871cRrmUejp09cRQUU=",
+ "dev": true,
+ "requires": {
+ "is-equal-shallow": "0.1.3",
+ "is-primitive": "2.0.0"
+ }
+ },
+ "remove-trailing-separator": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.0.2.tgz",
+ "integrity": "sha1-abBi2XhyetFNxrVrpKt3L9jXBRE=",
+ "dev": true
+ },
+ "repeat-element": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz",
+ "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=",
+ "dev": true
+ },
+ "repeat-string": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
+ "dev": true
+ },
+ "require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
+ "dev": true
+ },
+ "require-main-filename": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
+ "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=",
+ "dev": true
+ },
+ "right-align": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz",
+ "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=",
+ "dev": true,
+ "requires": {
+ "align-text": "0.1.4"
+ }
+ },
+ "rimraf": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz",
+ "integrity": "sha1-wjOOxkPfeht/5cVPqG9XQopV8z0=",
+ "dev": true,
+ "requires": {
+ "glob": "7.1.2"
+ }
+ },
+ "ripemd160": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz",
+ "integrity": "sha1-D0WEKVxTo2KK9+bXmsohzlfRxuc=",
+ "dev": true,
+ "requires": {
+ "hash-base": "2.0.2",
+ "inherits": "2.0.3"
+ }
+ },
+ "run-queue": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz",
+ "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=",
+ "dev": true,
+ "requires": {
+ "aproba": "1.1.2"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
+ "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==",
+ "dev": true
+ },
+ "schema-utils": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.3.0.tgz",
+ "integrity": "sha1-9YdyIs4+kx7a4DnxfrNxbnE3+M8=",
+ "dev": true,
+ "requires": {
+ "ajv": "5.2.2"
+ },
+ "dependencies": {
+ "ajv": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.2.2.tgz",
+ "integrity": "sha1-R8aNaehvXZUxA7AHSpQw3GPaXjk=",
+ "dev": true,
+ "requires": {
+ "co": "4.6.0",
+ "fast-deep-equal": "1.0.0",
+ "json-schema-traverse": "0.3.1",
+ "json-stable-stringify": "1.0.1"
+ }
+ }
+ }
+ },
+ "semver": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz",
+ "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=",
+ "dev": true
+ },
+ "set-blocking": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
+ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
+ "dev": true
+ },
+ "set-immediate-shim": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz",
+ "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=",
+ "dev": true
+ },
+ "setimmediate": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
+ "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=",
+ "dev": true
+ },
+ "sha.js": {
+ "version": "2.4.8",
+ "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.8.tgz",
+ "integrity": "sha1-NwaMLEdra69ALRSknGf1l5IfY08=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3"
+ }
+ },
+ "source-list-map": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-1.1.2.tgz",
+ "integrity": "sha1-mIkBnRAkzOVc3AaUmDN+9hhqEaE=",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.5.6",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz",
+ "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=",
+ "dev": true
+ },
+ "spdx-correct": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz",
+ "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=",
+ "dev": true,
+ "requires": {
+ "spdx-license-ids": "1.2.2"
+ }
+ },
+ "spdx-expression-parse": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz",
+ "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=",
+ "dev": true
+ },
+ "spdx-license-ids": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz",
+ "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=",
+ "dev": true
+ },
+ "ssri": {
+ "version": "4.1.6",
+ "resolved": "https://registry.npmjs.org/ssri/-/ssri-4.1.6.tgz",
+ "integrity": "sha512-WUbCdgSAMQjTFZRWvSPpauryvREEA+Krn19rx67UlJEJx/M192ZHxMmJXjZ4tkdFm+Sb0SXGlENeQVlA5wY7kA==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "stream-browserify": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz",
+ "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.3"
+ }
+ },
+ "stream-each": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.0.tgz",
+ "integrity": "sha1-HpXUdXP1gNgU3A/4zQ9m8c5TyZE=",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "1.4.0",
+ "stream-shift": "1.0.0"
+ }
+ },
+ "stream-http": {
+ "version": "2.7.2",
+ "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.7.2.tgz",
+ "integrity": "sha512-c0yTD2rbQzXtSsFSVhtpvY/vS6u066PcXOX9kBB3mSO76RiUQzL340uJkGBWnlBg4/HZzqiUXtaVA7wcRcJgEw==",
+ "dev": true,
+ "requires": {
+ "builtin-status-codes": "3.0.0",
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.3",
+ "to-arraybuffer": "1.0.1",
+ "xtend": "4.0.1"
+ }
+ },
+ "stream-shift": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz",
+ "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=",
+ "dev": true
+ },
+ "string_decoder": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "dev": true,
+ "requires": {
+ "code-point-at": "1.1.0",
+ "is-fullwidth-code-point": "1.0.0",
+ "strip-ansi": "3.0.1"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "strip-bom": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
+ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
+ "dev": true,
+ "requires": {
+ "is-utf8": "0.2.1"
+ }
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "dev": true,
+ "requires": {
+ "has-flag": "1.0.0"
+ }
+ },
+ "tapable": {
+ "version": "0.2.7",
+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.2.7.tgz",
+ "integrity": "sha1-5GwNqsuyuKmLmwzqD0BSEFgX7Vw=",
+ "dev": true
+ },
+ "through2": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
+ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "2.3.3",
+ "xtend": "4.0.1"
+ }
+ },
+ "timers-browserify": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.2.tgz",
+ "integrity": "sha1-q0iDz1l9zVCvIRNJoA+8pWrIa4Y=",
+ "dev": true,
+ "requires": {
+ "setimmediate": "1.0.5"
+ }
+ },
+ "to-arraybuffer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz",
+ "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=",
+ "dev": true
+ },
+ "ts-loader": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-2.0.3.tgz",
+ "integrity": "sha1-ibjIdZjwSN8GV2bgfhU48OrrEWU=",
+ "dev": true,
+ "requires": {
+ "colors": "1.1.2",
+ "enhanced-resolve": "3.3.0",
+ "loader-utils": "1.1.0",
+ "semver": "5.3.0"
+ }
+ },
+ "tty-browserify": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz",
+ "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=",
+ "dev": true
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
+ "dev": true
+ },
+ "typescript": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.3.2.tgz",
+ "integrity": "sha1-8PBF4Zb2mnLwayX9O9OdAcPOmYQ=",
+ "dev": true
+ },
+ "uglify-js": {
+ "version": "2.8.29",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz",
+ "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=",
+ "dev": true,
+ "requires": {
+ "source-map": "0.5.6",
+ "uglify-to-browserify": "1.0.2",
+ "yargs": "3.10.0"
+ },
+ "dependencies": {
+ "yargs": {
+ "version": "3.10.0",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz",
+ "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=",
+ "dev": true,
+ "requires": {
+ "camelcase": "1.2.1",
+ "cliui": "2.1.0",
+ "decamelize": "1.2.0",
+ "window-size": "0.1.0"
+ }
+ }
+ }
+ },
+ "uglify-to-browserify": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz",
+ "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=",
+ "dev": true,
+ "optional": true
+ },
+ "uglifyjs-webpack-plugin": {
+ "version": "1.0.0-beta.2",
+ "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.0.0-beta.2.tgz",
+ "integrity": "sha512-vTt+xUdBbjfIAmaSm3li3y/9k0m35GXV5AZWAUrSDMOAtI0mmhQ4FAQFtqEkmgEGS+A3S+qFaA0dk1lKheYQSw==",
+ "dev": true,
+ "requires": {
+ "cacache": "9.2.9",
+ "find-cache-dir": "1.0.0",
+ "schema-utils": "0.3.0",
+ "source-map": "0.5.6",
+ "uglify-es": "3.0.28",
+ "webpack-sources": "1.0.1",
+ "worker-farm": "1.5.0"
+ },
+ "dependencies": {
+ "source-list-map": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.0.tgz",
+ "integrity": "sha512-I2UmuJSRr/T8jisiROLU3A3ltr+swpniSmNPI4Ml3ZCX6tVnDsuZzK7F2hl5jTqbZBWCEKlj5HRQiPExXLgE8A==",
+ "dev": true
+ },
+ "uglify-es": {
+ "version": "3.0.28",
+ "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.0.28.tgz",
+ "integrity": "sha512-xw1hJsSp361OO0Sq0XvNyTI2wfQ4eKNljfSYyeYX/dz9lKEDj+DK+A8CzB0NmoCwWX1MnEx9f16HlkKXyG65CQ==",
+ "dev": true,
+ "requires": {
+ "commander": "2.11.0",
+ "source-map": "0.5.6"
+ }
+ },
+ "webpack-sources": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.0.1.tgz",
+ "integrity": "sha512-05tMxipUCwHqYaVS8xc7sYPTly8PzXayRCB4dTxLhWTqlKUiwH6ezmEe0OSreL1c30LAuA3Zqmc+uEBUGFJDjw==",
+ "dev": true,
+ "requires": {
+ "source-list-map": "2.0.0",
+ "source-map": "0.5.6"
+ }
+ }
+ }
+ },
+ "unique-filename": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.0.tgz",
+ "integrity": "sha1-0F8v5AMlYIcfMOk8vnNe6iAVFPM=",
+ "dev": true,
+ "requires": {
+ "unique-slug": "2.0.0"
+ }
+ },
+ "unique-slug": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.0.tgz",
+ "integrity": "sha1-22Z258fMBimHj/GWCXx4hVrp9Ks=",
+ "dev": true,
+ "requires": {
+ "imurmurhash": "0.1.4"
+ }
+ },
+ "url": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
+ "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=",
+ "dev": true,
+ "requires": {
+ "punycode": "1.3.2",
+ "querystring": "0.2.0"
+ },
+ "dependencies": {
+ "punycode": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
+ "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=",
+ "dev": true
+ }
+ }
+ },
+ "util": {
+ "version": "0.10.3",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
+ "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.1"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
+ "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=",
+ "dev": true
+ }
+ }
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true
+ },
+ "validate-npm-package-license": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz",
+ "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=",
+ "dev": true,
+ "requires": {
+ "spdx-correct": "1.0.2",
+ "spdx-expression-parse": "1.0.4"
+ }
+ },
+ "vm-browserify": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz",
+ "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=",
+ "dev": true,
+ "requires": {
+ "indexof": "0.0.1"
+ }
+ },
+ "watchpack": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.4.0.tgz",
+ "integrity": "sha1-ShRyvLuVK9Cpu0A2gB+VTfs5+qw=",
+ "dev": true,
+ "requires": {
+ "async": "2.5.0",
+ "chokidar": "1.7.0",
+ "graceful-fs": "4.1.11"
+ }
+ },
+ "webpack": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/webpack/-/webpack-2.5.1.tgz",
+ "integrity": "sha1-YXQvDPivVVuHRgqc2Lui8ePuL84=",
+ "dev": true,
+ "requires": {
+ "acorn": "5.1.1",
+ "acorn-dynamic-import": "2.0.2",
+ "ajv": "4.11.8",
+ "ajv-keywords": "1.5.1",
+ "async": "2.5.0",
+ "enhanced-resolve": "3.3.0",
+ "interpret": "1.0.3",
+ "json-loader": "0.5.7",
+ "json5": "0.5.1",
+ "loader-runner": "2.3.0",
+ "loader-utils": "0.2.17",
+ "memory-fs": "0.4.1",
+ "mkdirp": "0.5.1",
+ "node-libs-browser": "2.0.0",
+ "source-map": "0.5.6",
+ "supports-color": "3.2.3",
+ "tapable": "0.2.7",
+ "uglify-js": "2.8.29",
+ "watchpack": "1.4.0",
+ "webpack-sources": "0.2.3",
+ "yargs": "6.6.0"
+ },
+ "dependencies": {
+ "loader-utils": {
+ "version": "0.2.17",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz",
+ "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=",
+ "dev": true,
+ "requires": {
+ "big.js": "3.1.3",
+ "emojis-list": "2.1.0",
+ "json5": "0.5.1",
+ "object-assign": "4.1.1"
+ }
+ }
+ }
+ },
+ "webpack-sources": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-0.2.3.tgz",
+ "integrity": "sha1-F8Yr+vE8cH+dAsR54Nzd6DgGl/s=",
+ "dev": true,
+ "requires": {
+ "source-list-map": "1.1.2",
+ "source-map": "0.5.6"
+ }
+ },
+ "which-module": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz",
+ "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=",
+ "dev": true
+ },
+ "window-size": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz",
+ "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=",
+ "dev": true
+ },
+ "wordwrap": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz",
+ "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=",
+ "dev": true
+ },
+ "worker-farm": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.5.0.tgz",
+ "integrity": "sha512-DHRiUggxtbruaTwnLDm2/BRDKZIoOYvrgYUj5Bam4fU6Gtvc0FaEyoswFPBjMXAweGW2H4BDNIpy//1yXXuaqQ==",
+ "dev": true,
+ "requires": {
+ "errno": "0.1.4",
+ "xtend": "4.0.1"
+ }
+ },
+ "wrap-ansi": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
+ "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
+ "dev": true,
+ "requires": {
+ "string-width": "1.0.2",
+ "strip-ansi": "3.0.1"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ },
+ "xtend": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
+ "dev": true
+ },
+ "xterm": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/xterm/-/xterm-2.8.1.tgz",
+ "integrity": "sha512-AuqLOWpprmhSe4TcGE6Gh2uwkR0wUC95V0Q736OFUmG+84W+w+g6RzcgVhrbOTo/Fzcq9i0TRR5nYksRt2DSIQ=="
+ },
+ "y18n": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz",
+ "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=",
+ "dev": true
+ },
+ "yallist": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
+ "dev": true
+ },
+ "yargs": {
+ "version": "6.6.0",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz",
+ "integrity": "sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=",
+ "dev": true,
+ "requires": {
+ "camelcase": "3.0.0",
+ "cliui": "3.2.0",
+ "decamelize": "1.2.0",
+ "get-caller-file": "1.0.2",
+ "os-locale": "1.4.0",
+ "read-pkg-up": "1.0.1",
+ "require-directory": "2.1.1",
+ "require-main-filename": "1.0.1",
+ "set-blocking": "2.0.0",
+ "string-width": "1.0.2",
+ "which-module": "1.0.0",
+ "y18n": "3.2.1",
+ "yargs-parser": "4.2.1"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz",
+ "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=",
+ "dev": true
+ },
+ "cliui": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
+ "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
+ "dev": true,
+ "requires": {
+ "string-width": "1.0.2",
+ "strip-ansi": "3.0.1",
+ "wrap-ansi": "2.1.0"
+ }
+ }
+ }
+ },
+ "yargs-parser": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-4.2.1.tgz",
+ "integrity": "sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=",
+ "dev": true,
+ "requires": {
+ "camelcase": "3.0.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz",
+ "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=",
+ "dev": true
+ }
+ }
+ }
+ }
+}
diff --git a/vendor/github.com/yudai/gotty/js/package.json b/vendor/github.com/yudai/gotty/js/package.json
new file mode 100644
index 0000000..8beaeb5
--- /dev/null
+++ b/vendor/github.com/yudai/gotty/js/package.json
@@ -0,0 +1,13 @@
+{
+ "devDependencies": {
+ "license-loader": "^0.5.0",
+ "ts-loader": "^2.0.3",
+ "typescript": "^2.3.2",
+ "uglifyjs-webpack-plugin": "^1.0.0-beta.2",
+ "webpack": "^2.5.1"
+ },
+ "dependencies": {
+ "libapps": "github:yudai/libapps#release-hterm-1.70",
+ "xterm": "^2.7.0"
+ }
+}
diff --git a/vendor/github.com/yudai/gotty/js/src/hterm.ts b/vendor/github.com/yudai/gotty/js/src/hterm.ts
new file mode 100644
index 0000000..b49a22f
--- /dev/null
+++ b/vendor/github.com/yudai/gotty/js/src/hterm.ts
@@ -0,0 +1,92 @@
+import * as bare from "libapps";
+
+export class Hterm {
+ elem: HTMLElement;
+
+ term: bare.hterm.Terminal;
+ io: bare.hterm.IO;
+
+ columns: number;
+ rows: number;
+
+ // to "show" the current message when removeMessage() is called
+ message: string;
+
+ constructor(elem: HTMLElement) {
+ this.elem = elem;
+ bare.hterm.defaultStorage = new bare.lib.Storage.Memory();
+ this.term = new bare.hterm.Terminal();
+ this.term.getPrefs().set("send-encoding", "raw");
+ this.term.decorate(this.elem);
+
+ this.io = this.term.io.push();
+ this.term.installKeyboard();
+ };
+
+ info(): { columns: number, rows: number } {
+ return { columns: this.columns, rows: this.rows };
+ };
+
+ output(data: string) {
+ if (this.term.io != null) {
+ this.term.io.writeUTF8(data);
+ }
+ };
+
+ showMessage(message: string, timeout: number) {
+ this.message = message;
+ if (timeout > 0) {
+ this.term.io.showOverlay(message, timeout);
+ } else {
+ this.term.io.showOverlay(message, null);
+ }
+ };
+
+ removeMessage(): void {
+ // there is no hideOverlay(), so show the same message with 0 sec
+ this.term.io.showOverlay(this.message, 0);
+ }
+
+ setWindowTitle(title: string) {
+ this.term.setWindowTitle(title);
+ };
+
+ setPreferences(value: object) {
+ Object.keys(value).forEach((key) => {
+ this.term.getPrefs().set(key, value[key]);
+ });
+ };
+
+ onInput(callback: (input: string) => void) {
+ this.io.onVTKeystroke = (data) => {
+ callback(data);
+ };
+ this.io.sendString = (data) => {
+ callback(data);
+ };
+ };
+
+ onResize(callback: (colmuns: number, rows: number) => void) {
+ this.io.onTerminalResize = (columns: number, rows: number) => {
+ this.columns = columns;
+ this.rows = rows;
+ callback(columns, rows);
+ };
+ };
+
+ deactivate(): void {
+ this.io.onVTKeystroke = function(){};
+ this.io.sendString = function(){};
+ this.io.onTerminalResize = function(){};
+ this.term.uninstallKeyboard();
+ }
+
+ reset(): void {
+ this.removeMessage();
+ this.term.installKeyboard();
+ }
+
+ close(): void {
+ this.term.uninstallKeyboard();
+ }
+}
diff --git a/vendor/github.com/yudai/gotty/js/src/main.ts b/vendor/github.com/yudai/gotty/js/src/main.ts
new file mode 100644
index 0000000..101190a
--- /dev/null
+++ b/vendor/github.com/yudai/gotty/js/src/main.ts
@@ -0,0 +1,30 @@
+import { Hterm } from "./hterm";
+import { Xterm } from "./xterm";
+import { Terminal, WebTTY, protocols } from "./webtty";
+import { ConnectionFactory } from "./websocket";
+
+// @TODO remove these
+declare var gotty_auth_token: string;
+declare var gotty_term: string;
+
+const elem = document.getElementById("terminal")
+
+if (elem !== null) {
+ var term: Terminal;
+ if (gotty_term == "hterm") {
+ term = new Hterm(elem);
+ } else {
+ term = new Xterm(elem);
+ }
+ const httpsEnabled = window.location.protocol == "https:";
+ const url = (httpsEnabled ? 'wss://' : 'ws://') + window.location.host + window.location.pathname + 'ws';
+ const args = window.location.search;
+ const factory = new ConnectionFactory(url, protocols);
+ const wt = new WebTTY(term, factory, args, gotty_auth_token);
+ const closer = wt.open();
+
+ window.addEventListener("unload", () => {
+ closer();
+ term.close();
+ });
+};
diff --git a/vendor/github.com/yudai/gotty/js/src/websocket.ts b/vendor/github.com/yudai/gotty/js/src/websocket.ts
new file mode 100644
index 0000000..7f65177
--- /dev/null
+++ b/vendor/github.com/yudai/gotty/js/src/websocket.ts
@@ -0,0 +1,60 @@
+export class ConnectionFactory {
+ url: string;
+ protocols: string[];
+
+ constructor(url: string, protocols: string[]) {
+ this.url = url;
+ this.protocols = protocols;
+ };
+
+ create(): Connection {
+ return new Connection(this.url, this.protocols);
+ };
+}
+
+export class Connection {
+ bare: WebSocket;
+
+
+ constructor(url: string, protocols: string[]) {
+ this.bare = new WebSocket(url, protocols);
+ }
+
+ open() {
+ // nothing todo for websocket
+ };
+
+ close() {
+ this.bare.close();
+ };
+
+ send(data: string) {
+ this.bare.send(data);
+ };
+
+ isOpen(): boolean {
+ if (this.bare.readyState == WebSocket.CONNECTING ||
+ this.bare.readyState == WebSocket.OPEN) {
+ return true
+ }
+ return false
+ }
+
+ onOpen(callback: () => void) {
+ this.bare.onopen = (event) => {
+ callback();
+ }
+ };
+
+ onReceive(callback: (data: string) => void) {
+ this.bare.onmessage = (event) => {
+ callback(event.data);
+ }
+ };
+
+ onClose(callback: () => void) {
+ this.bare.onclose = (event) => {
+ callback();
+ };
+ };
+}
diff --git a/vendor/github.com/yudai/gotty/js/src/webtty.ts b/vendor/github.com/yudai/gotty/js/src/webtty.ts
new file mode 100644
index 0000000..1cd79ac
--- /dev/null
+++ b/vendor/github.com/yudai/gotty/js/src/webtty.ts
@@ -0,0 +1,148 @@
+export const protocols = ["webtty"];
+
+export const msgInputUnknown = '0';
+export const msgInput = '1';
+export const msgPing = '2';
+export const msgResizeTerminal = '3';
+
+export const msgUnknownOutput = '0';
+export const msgOutput = '1';
+export const msgPong = '2';
+export const msgSetWindowTitle = '3';
+export const msgSetPreferences = '4';
+export const msgSetReconnect = '5';
+
+
+export interface Terminal {
+ info(): { columns: number, rows: number };
+ output(data: string): void;
+ showMessage(message: string, timeout: number): void;
+ removeMessage(): void;
+ setWindowTitle(title: string): void;
+ setPreferences(value: object): void;
+ onInput(callback: (input: string) => void): void;
+ onResize(callback: (colmuns: number, rows: number) => void): void;
+ reset(): void;
+ deactivate(): void;
+ close(): void;
+}
+
+export interface Connection {
+ open(): void;
+ close(): void;
+ send(data: string): void;
+ isOpen(): boolean;
+ onOpen(callback: () => void): void;
+ onReceive(callback: (data: string) => void): void;
+ onClose(callback: () => void): void;
+}
+
+export interface ConnectionFactory {
+ create(): Connection;
+}
+
+
+export class WebTTY {
+ term: Terminal;
+ connectionFactory: ConnectionFactory;
+ args: string;
+ authToken: string;
+ reconnect: number;
+
+ constructor(term: Terminal, connectionFactory: ConnectionFactory, args: string, authToken: string) {
+ this.term = term;
+ this.connectionFactory = connectionFactory;
+ this.args = args;
+ this.authToken = authToken;
+ this.reconnect = -1;
+ };
+
+ open() {
+ let connection = this.connectionFactory.create();
+ let pingTimer: number;
+ let reconnectTimeout: number;
+
+ const setup = () => {
+ connection.onOpen(() => {
+ const termInfo = this.term.info();
+
+ connection.send(JSON.stringify(
+ {
+ Arguments: this.args,
+ AuthToken: this.authToken,
+ }
+ ));
+
+
+ const resizeHandler = (colmuns: number, rows: number) => {
+ connection.send(
+ msgResizeTerminal + JSON.stringify(
+ {
+ columns: colmuns,
+ rows: rows
+ }
+ )
+ );
+ };
+
+ this.term.onResize(resizeHandler);
+ resizeHandler(termInfo.columns, termInfo.rows);
+
+ this.term.onInput(
+ (input: string) => {
+ connection.send(msgInput + input);
+ }
+ );
+
+ pingTimer = setInterval(() => {
+ connection.send(msgPing)
+ }, 30 * 1000);
+
+ });
+
+ connection.onReceive((data) => {
+ const payload = data.slice(1);
+ switch (data[0]) {
+ case msgOutput:
+ this.term.output(atob(payload));
+ break;
+ case msgPong:
+ break;
+ case msgSetWindowTitle:
+ this.term.setWindowTitle(payload);
+ break;
+ case msgSetPreferences:
+ const preferences = JSON.parse(payload);
+ this.term.setPreferences(preferences);
+ break;
+ case msgSetReconnect:
+ const autoReconnect = JSON.parse(payload);
+ console.log("Enabling reconnect: " + autoReconnect + " seconds")
+ this.reconnect = autoReconnect;
+ break;
+ }
+ });
+
+ connection.onClose(() => {
+ clearInterval(pingTimer);
+ this.term.deactivate();
+ this.term.showMessage("Connection Closed", 0);
+ if (this.reconnect > 0) {
+ reconnectTimeout = setTimeout(() => {
+ connection = this.connectionFactory.create();
+ this.term.reset();
+ setup();
+ }, this.reconnect * 1000);
+ }
+ });
+
+ connection.open();
+ }
+
+ setup();
+ return () => {
+ clearTimeout(reconnectTimeout);
+ connection.close();
+ }
+ };
+};
diff --git a/vendor/github.com/yudai/gotty/js/src/xterm.ts b/vendor/github.com/yudai/gotty/js/src/xterm.ts
new file mode 100644
index 0000000..16a3e63
--- /dev/null
+++ b/vendor/github.com/yudai/gotty/js/src/xterm.ts
@@ -0,0 +1,105 @@
+import * as bare from "xterm";
+import { lib } from "libapps"
+
+
+bare.loadAddon("fit");
+
+export class Xterm {
+ elem: HTMLElement;
+ term: bare;
+ resizeListener: () => void;
+ decoder: lib.UTF8Decoder;
+
+ message: HTMLElement;
+ messageTimeout: number;
+ messageTimer: number;
+
+
+ constructor(elem: HTMLElement) {
+ this.elem = elem;
+ this.term = new bare();
+
+ this.message = elem.ownerDocument.createElement("div");
+ this.message.className = "xterm-overlay";
+ this.messageTimeout = 2000;
+
+ this.resizeListener = () => {
+ this.term.fit();
+ this.term.scrollToBottom();
+ this.showMessage(String(this.term.cols) + "x" + String(this.term.rows), this.messageTimeout);
+ };
+
+ this.term.on("open", () => {
+ this.resizeListener();
+ window.addEventListener("resize", () => { this.resizeListener(); });
+ });
+
+ this.term.open(elem, true);
+
+ this.decoder = new lib.UTF8Decoder()
+ };
+
+ info(): { columns: number, rows: number } {
+ return { columns: this.term.cols, rows: this.term.rows };
+ };
+
+ output(data: string) {
+ this.term.write(this.decoder.decode(data));
+ };
+
+ showMessage(message: string, timeout: number) {
+ this.message.textContent = message;
+ this.elem.appendChild(this.message);
+
+ if (this.messageTimer) {
+ clearTimeout(this.messageTimer);
+ }
+ if (timeout > 0) {
+ this.messageTimer = setTimeout(() => {
+ this.elem.removeChild(this.message);
+ }, timeout);
+ }
+ };
+
+ removeMessage(): void {
+ if (this.message.parentNode == this.elem) {
+ this.elem.removeChild(this.message);
+ }
+ }
+
+ setWindowTitle(title: string) {
+ document.title = title;
+ };
+
+ setPreferences(value: object) {
+ };
+
+ onInput(callback: (input: string) => void) {
+ this.term.on("data", (data) => {
+ callback(data);
+ });
+
+ };
+
+ onResize(callback: (colmuns: number, rows: number) => void) {
+ this.term.on("resize", (data) => {
+ callback(data.cols, data.rows);
+ });
+ };
+
+ deactivate(): void {
+ this.term.off("data");
+ this.term.off("resize");
+ this.term.blur();
+ }
+
+ reset(): void {
+ this.removeMessage();
+ this.term.clear();
+ }
+
+ close(): void {
+ window.removeEventListener("resize", this.resizeListener);
+ this.term.destroy();
+ }
+}
diff --git a/vendor/github.com/yudai/gotty/js/tsconfig.json b/vendor/github.com/yudai/gotty/js/tsconfig.json
new file mode 100644
index 0000000..58346f0
--- /dev/null
+++ b/vendor/github.com/yudai/gotty/js/tsconfig.json
@@ -0,0 +1,20 @@
+{
+ "compilerOptions": {
+ "strictNullChecks": true,
+ "noUnusedLocals" : true,
+ "noImplicitThis": true,
+ "alwaysStrict": true,
+ "outDir": "./dist/",
+ "declaration": true,
+ "sourceMap": true,
+ "target": "es5",
+ "module": "commonJS",
+ "baseUrl": ".",
+ "paths": {
+ "*": ["./typings/*"]
+ }
+ },
+ "exclude": [
+ "node_modules"
+ ]
+}
diff --git a/vendor/github.com/yudai/gotty/js/typings/libapps/index.d.ts b/vendor/github.com/yudai/gotty/js/typings/libapps/index.d.ts
new file mode 100644
index 0000000..81eb66d
--- /dev/null
+++ b/vendor/github.com/yudai/gotty/js/typings/libapps/index.d.ts
@@ -0,0 +1,51 @@
+export declare namespace hterm {
+ export class Terminal {
+ io: IO;
+ onTerminalReady: () => void;
+
+ constructor();
+ getPrefs(): Prefs;
+ decorate(HTMLElement);
+ installKeyboard(): void;
+ uninstallKeyboard(): void;
+ setWindowTitle(title: string): void;
+ reset(): void;
+ softReset(): void;
+ }
+
+ export class IO {
+ writeUTF8: ((data: string) => void);
+ writeUTF16: ((data: string) => void);
+ onVTKeystroke: ((data: string) => void) | null;
+ sendString: ((data: string) => void) | null;
+ onTerminalResize: ((columns: number, rows: number) => void) | null;
+
+ push(): IO;
+ writeUTF(data: string);
+ showOverlay(message: string, timeout: number | null);
+ }
+
+ export class Prefs {
+ set(key: string, value: string): void;
+ }
+
+ export var defaultStorage: lib.Storage;
+}
+
+export declare namespace lib {
+ export interface Storage {
+ }
+
+ export interface Memory {
+ new (): Storage;
+ Memory(): Storage
+ }
+
+ export var Storage: {
+ Memory: Memory
+ }
+
+ export class UTF8Decoder {
+ decode(str: string)
+ }
+}
diff --git a/vendor/github.com/yudai/gotty/js/webpack.config.js b/vendor/github.com/yudai/gotty/js/webpack.config.js
new file mode 100644
index 0000000..e035379
--- /dev/null
+++ b/vendor/github.com/yudai/gotty/js/webpack.config.js
@@ -0,0 +1,29 @@
+const UglifyJSPlugin = require('uglifyjs-webpack-plugin');
+
+module.exports = {
+ entry: "./src/main.ts",
+ output: {
+ filename: "./dist/gotty-bundle.js"
+ },
+ devtool: "source-map",
+ resolve: {
+ extensions: [".ts", ".tsx", ".js"],
+ },
+ module: {
+ rules: [
+ {
+ test: /\.tsx?$/,
+ loader: "ts-loader",
+ exclude: /node_modules/
+ },
+ {
+ test: /\.js$/,
+ include: /node_modules/,
+ loader: 'license-loader'
+ }
+ ]
+ },
+ plugins: [
+ new UglifyJSPlugin()
+ ]
+};
diff --git a/vendor/github.com/yudai/gotty/main.go b/vendor/github.com/yudai/gotty/main.go
new file mode 100644
index 0000000..b6290be
--- /dev/null
+++ b/vendor/github.com/yudai/gotty/main.go
@@ -0,0 +1,152 @@
+package main
+
+import (
+ "context"
+ "fmt"
+ "log"
+ "os"
+ "os/signal"
+ "strings"
+ "syscall"
+
+ "github.com/codegangsta/cli"
+
+ "github.com/yudai/gotty/backend/localcommand"
+ "github.com/yudai/gotty/pkg/homedir"
+ "github.com/yudai/gotty/server"
+ "github.com/yudai/gotty/utils"
+)
+
+func main() {
+ app := cli.NewApp()
+ app.Name = "gotty"
+ app.Version = Version + "+" + CommitID
+ app.Usage = "Share your terminal as a web application"
+ app.HideHelp = true
+ cli.AppHelpTemplate = helpTemplate
+
+ appOptions := &server.Options{}
+ if err := utils.ApplyDefaultValues(appOptions); err != nil {
+ exit(err, 1)
+ }
+ backendOptions := &localcommand.Options{}
+ if err := utils.ApplyDefaultValues(backendOptions); err != nil {
+ exit(err, 1)
+ }
+
+ cliFlags, flagMappings, err := utils.GenerateFlags(appOptions, backendOptions)
+ if err != nil {
+ exit(err, 3)
+ }
+
+ app.Flags = append(
+ cliFlags,
+ cli.StringFlag{
+ Name: "config",
+ Value: "~/.gotty",
+ Usage: "Config file path",
+ EnvVar: "GOTTY_CONFIG",
+ },
+ )
+
+ app.Action = func(c *cli.Context) {
+ if len(c.Args()) == 0 {
+ msg := "Error: No command given."
+ cli.ShowAppHelp(c)
+ exit(fmt.Errorf(msg), 1)
+ }
+
+ configFile := c.String("config")
+ _, err := os.Stat(homedir.Expand(configFile))
+ if configFile != "~/.gotty" || !os.IsNotExist(err) {
+ if err := utils.ApplyConfigFile(configFile, appOptions, backendOptions); err != nil {
+ exit(err, 2)
+ }
+ }
+
+ utils.ApplyFlags(cliFlags, flagMappings, c, appOptions, backendOptions)
+
+ appOptions.EnableBasicAuth = c.IsSet("credential")
+ appOptions.EnableTLSClientAuth = c.IsSet("tls-ca-crt")
+
+ err = appOptions.Validate()
+ if err != nil {
+ exit(err, 6)
+ }
+
+ args := c.Args()
+ factory, err := localcommand.NewFactory(args[0], args[1:], backendOptions)
+ if err != nil {
+ exit(err, 3)
+ }
+
+ hostname, _ := os.Hostname()
+ appOptions.TitleVariables = map[string]interface{}{
+ "command": args[0],
+ "argv": args[1:],
+ "hostname": hostname,
+ }
+
+ srv, err := server.New(factory, appOptions)
+ if err != nil {
+ exit(err, 3)
+ }
+
+ ctx, cancel := context.WithCancel(context.Background())
+ gCtx, gCancel := context.WithCancel(context.Background())
+
+ log.Printf("GoTTY is starting with command: %s", strings.Join(args, " "))
+
+ errs := make(chan error, 1)
+ go func() {
+ errs <- srv.Run(ctx, server.WithGracefullContext(gCtx))
+ }()
+ err = waitSignals(errs, cancel, gCancel)
+
+ if err != nil && err != context.Canceled {
+ fmt.Printf("Error: %s\n", err)
+ exit(err, 8)
+ }
+
+ }
+ app.Run(os.Args)
+}
+
+func exit(err error, code int) {
+ if err != nil {
+ fmt.Println(err)
+ }
+ os.Exit(code)
+}
+
+func waitSignals(errs chan error, cancel context.CancelFunc, gracefullCancel context.CancelFunc) error {
+ sigChan := make(chan os.Signal, 1)
+ signal.Notify(
+ sigChan,
+ syscall.SIGINT,
+ syscall.SIGTERM,
+ )
+
+ select {
+ case err := <-errs:
+ return err
+
+ case s := <-sigChan:
+ switch s {
+ case syscall.SIGINT:
+ gracefullCancel()
+ fmt.Println("C-C to force close")
+ select {
+ case err := <-errs:
+ return err
+ case <-sigChan:
+ fmt.Println("Force closing...")
+ cancel()
+ return <-errs
+ }
+ default:
+ cancel()
+ return <-errs
+ }
+ }
+}
diff --git a/vendor/github.com/yudai/gotty/pkg/homedir/expand.go b/vendor/github.com/yudai/gotty/pkg/homedir/expand.go
new file mode 100644
index 0000000..724a203
--- /dev/null
+++ b/vendor/github.com/yudai/gotty/pkg/homedir/expand.go
@@ -0,0 +1,13 @@
+package homedir
+
+import (
+ "os"
+)
+
+func Expand(path string) string {
+ if path[0:2] == "~/" {
+ return os.Getenv("HOME") + path[1:]
+ } else {
+ return path
+ }
+}
diff --git a/vendor/github.com/yudai/gotty/pkg/randomstring/generate.go b/vendor/github.com/yudai/gotty/pkg/randomstring/generate.go
new file mode 100644
index 0000000..b5062ce
--- /dev/null
+++ b/vendor/github.com/yudai/gotty/pkg/randomstring/generate.go
@@ -0,0 +1,18 @@
+package randomstring
+
+import (
+ "crypto/rand"
+ "math/big"
+ "strconv"
+)
+
+func Generate(length int) string {
+ const base = 36
+ size := big.NewInt(base)
+ n := make([]byte, length)
+ for i, _ := range n {
+ c, _ := rand.Int(rand.Reader, size)
+ n[i] = strconv.FormatInt(c.Int64(), base)[0]
+ }
+ return string(n)
+}
diff --git a/vendor/github.com/yudai/gotty/resources/favicon.png b/vendor/github.com/yudai/gotty/resources/favicon.png
new file mode 100644
index 0000000..3b1eb39
Binary files /dev/null and b/vendor/github.com/yudai/gotty/resources/favicon.png differ
diff --git a/vendor/github.com/yudai/gotty/resources/index.css b/vendor/github.com/yudai/gotty/resources/index.css
new file mode 100644
index 0000000..26c6f33
--- /dev/null
+++ b/vendor/github.com/yudai/gotty/resources/index.css
@@ -0,0 +1,7 @@
+html, body, #terminal {
+ background: black;
+ height: 100%;
+ width: 100%;
+ padding: 0%;
+ margin: 0%;
+}
\ No newline at end of file
diff --git a/vendor/github.com/yudai/gotty/resources/index.html b/vendor/github.com/yudai/gotty/resources/index.html
new file mode 100644
index 0000000..67c1c0f
--- /dev/null
+++ b/vendor/github.com/yudai/gotty/resources/index.html
@@ -0,0 +1,16 @@
+
+
+
+ {{ .title }}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vendor/github.com/yudai/gotty/resources/xterm_customize.css b/vendor/github.com/yudai/gotty/resources/xterm_customize.css
new file mode 100644
index 0000000..8e4ddd9
--- /dev/null
+++ b/vendor/github.com/yudai/gotty/resources/xterm_customize.css
@@ -0,0 +1,19 @@
+.terminal {
+ font-family: "DejaVu Sans Mono", "Everson Mono", FreeMono, Menlo, Terminal, monospace, "Apple Symbols";
+}
+
+.xterm-overlay {
+ font-family: "DejaVu Sans Mono", "Everson Mono", FreeMono, Menlo, Terminal, monospace, "Apple Symbols";
+ border-radius: 15px;
+ font-size: xx-large;
+ color: black;
+ background: white;
+ opacity: 0.75;
+ padding: 0.2em 0.5em 0.2em 0.5em;
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+ user-select: none;
+ transition: opacity 180ms ease-in;
+}
\ No newline at end of file
diff --git a/vendor/github.com/yudai/gotty/screenshot.gif b/vendor/github.com/yudai/gotty/screenshot.gif
new file mode 100644
index 0000000..6d13c83
Binary files /dev/null and b/vendor/github.com/yudai/gotty/screenshot.gif differ
diff --git a/vendor/github.com/yudai/gotty/server/asset.go b/vendor/github.com/yudai/gotty/server/asset.go
new file mode 100644
index 0000000..ff62dbe
--- /dev/null
+++ b/vendor/github.com/yudai/gotty/server/asset.go
@@ -0,0 +1,379 @@
+// Code generated by go-bindata.
+// sources:
+// bindata/static/css/index.css
+// bindata/static/css/xterm.css
+// bindata/static/css/xterm_customize.css
+// bindata/static/favicon.png
+// bindata/static/index.html
+// bindata/static/js/bundle.js
+// bindata/static/js/gotty-bundle.js
+// DO NOT EDIT!
+
+package server
+
+import (
+ "bytes"
+ "compress/gzip"
+ "fmt"
+ "io"
+ "io/ioutil"
+ "os"
+ "path/filepath"
+ "strings"
+ "time"
+)
+
+func bindataRead(data []byte, name string) ([]byte, error) {
+ gz, err := gzip.NewReader(bytes.NewBuffer(data))
+ if err != nil {
+ return nil, fmt.Errorf("Read %q: %v", name, err)
+ }
+
+ var buf bytes.Buffer
+ _, err = io.Copy(&buf, gz)
+ clErr := gz.Close()
+
+ if err != nil {
+ return nil, fmt.Errorf("Read %q: %v", name, err)
+ }
+ if clErr != nil {
+ return nil, err
+ }
+
+ return buf.Bytes(), nil
+}
+
+type asset struct {
+ bytes []byte
+ info os.FileInfo
+}
+
+type bindataFileInfo struct {
+ name string
+ size int64
+ mode os.FileMode
+ modTime time.Time
+}
+
+func (fi bindataFileInfo) Name() string {
+ return fi.name
+}
+func (fi bindataFileInfo) Size() int64 {
+ return fi.size
+}
+func (fi bindataFileInfo) Mode() os.FileMode {
+ return fi.mode
+}
+func (fi bindataFileInfo) ModTime() time.Time {
+ return fi.modTime
+}
+func (fi bindataFileInfo) IsDir() bool {
+ return false
+}
+func (fi bindataFileInfo) Sys() interface{} {
+ return nil
+}
+
+var _staticCssIndexCss = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4c\xc8\x41\x0a\x02\x31\x0c\x05\xd0\xbd\xa7\xf8\x20\xee\x66\x31\x6e\xeb\x69\xd2\xc9\x90\x84\xb6\xa9\x94\x88\x88\x78\x77\xc1\x22\xcc\xf2\x3d\x8d\x56\x17\xe4\xce\xaf\x05\xe7\xd8\x47\x33\xa7\x8a\xf7\x09\x00\x32\x6d\x45\x46\x7f\x38\x27\xe4\x4a\x5b\xb9\xfd\x5a\x77\x13\x8d\x84\xeb\xba\x5e\xe6\x3c\x8d\x43\x8f\x71\x27\x66\x73\x49\xf8\x47\xa3\x21\xe6\xd3\x9f\x6f\x00\x00\x00\xff\xff\xd7\x5b\x0e\xbd\x74\x00\x00\x00")
+
+func staticCssIndexCssBytes() ([]byte, error) {
+ return bindataRead(
+ _staticCssIndexCss,
+ "static/css/index.css",
+ )
+}
+
+func staticCssIndexCss() (*asset, error) {
+ bytes, err := staticCssIndexCssBytes()
+ if err != nil {
+ return nil, err
+ }
+
+ info := bindataFileInfo{name: "static/css/index.css", size: 116, mode: os.FileMode(436), modTime: time.Unix(1503381631, 0)}
+ a := &asset{bytes: bytes, info: info}
+ return a, nil
+}
+
+var _staticCssXtermCss = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xb4\x9d\x5d\x93\xda\x48\xb6\xb5\xef\xfd\x2b\x32\xdc\x17\x6d\x3b\xa0\x0a\x89\x6f\x26\xe2\x8d\xa0\xcb\x54\x9b\x77\xca\xe0\xa8\xc2\xe3\xe9\xcb\x04\xa5\x0a\xb9\x41\x62\x24\x51\x1f\x33\x31\xff\xfd\x44\x4a\x99\x85\x2b\x37\x5a\xb9\x3d\x73\x8e\xb9\xe8\x36\xd4\x5a\x5b\x12\xa9\x07\x69\x79\x19\x5f\x7e\xf8\xf0\x46\x7c\x10\x4f\xa5\xca\xf7\x17\xdf\x8b\x49\xfd\x7f\x2d\x91\xa4\xa2\xdc\x2a\xb1\xce\xb3\xc7\x42\xe5\xfa\x47\xae\xb2\xc3\x73\x9e\xdc\x6f\x4b\xf1\x6e\xf3\x5e\x84\x9d\xa0\xd7\x0e\x3b\xc1\xa0\x25\xee\xb2\x63\xbe\x51\x37\x32\xc9\xc5\x97\x3c\x79\x90\xa5\x12\x57\xd9\xfe\x20\xd3\x67\xf1\xee\xf1\xf1\xf1\xa2\xa8\x5e\xdf\xc9\x24\xbf\xd8\x64\x7b\xf1\xee\xf3\x7c\x25\x6e\x92\x8d\x4a\x0b\xf5\xfe\xac\x71\xa8\x8d\xbb\x2d\x71\xb5\xcd\x93\xa2\xcc\x0e\x5b\x95\x8b\xff\xaf\xe2\x38\x57\xcf\x54\xbd\x2d\xcb\x43\x31\xb9\xbc\xbc\x4f\xca\xed\x71\xad\x27\x5c\x6e\xb6\xdf\xbf\x5f\x9a\x1d\x7a\x23\xaa\xfd\xfb\xa2\xf2\x7d\x52\x14\x49\x96\x8a\xa4\x10\x5b\x95\xab\xf5\xb3\xb8\xcf\x65\x5a\xaa\xa8\x25\xe2\x5c\x29\x91\xc5\x62\xb3\x95\xf9\xbd\x6a\x89\x32\x13\x7a\xeb\x0f\x2a\x2f\xb2\x54\x64\xeb\x52\x26\x69\x92\xde\x0b\x29\x36\xd9\xe1\x59\xfb\x65\xb1\x28\xb7\x49\x21\x8a\x2c\x2e\x1f\x65\xae\x84\x4c\x23\x21\x8b\x22\xdb\x24\xb2\x54\x91\x88\xb2\xcd\x71\xaf\xd2\x52\x96\x7a\x64\x9c\xec\x54\x21\xde\xe9\x03\xfa\xf6\xce\x28\xde\xbe\xaf\xe6\x44\x4a\xee\xb4\xa1\x39\xde\xf6\x55\xf1\x98\x94\xdb\xec\x58\x8a\x5c\x15\x65\x9e\x6c\xb4\x8d\x7e\x53\x36\xbb\x63\xa4\xb7\xc4\xbe\xbc\x4b\xf6\x89\x19\xa2\xe5\xd5\x61\xd4\xfb\xac\xad\x8f\x85\x6a\x55\x1b\xdc\x12\xfb\x2c\x4a\x62\xfd\x5f\x55\xed\xdf\xe1\xb8\xde\x25\xc5\xb6\x25\xa2\x44\xbb\xaf\x8f\xa5\x6a\x89\x42\x3f\x59\x1d\xd7\x96\xde\x9b\xcb\x2c\x17\x85\xda\x55\x1b\xb7\xc9\x0e\x89\x2a\xea\x9d\x3e\x6d\x63\xf5\x63\x7a\xd0\x41\x1f\xdc\xd2\x1c\xae\x42\x3f\xf3\xb8\xcd\xf6\xaf\xf7\x27\xa9\xb6\x2a\x3e\xe6\x69\x52\x6c\x55\x25\x8b\x32\x51\x64\xd5\xdc\xef\x6a\x53\xea\x67\xb4\x22\xce\x76\xbb\xec\x51\xef\xe3\x26\x4b\xa3\x44\xef\x5a\x31\x31\xef\xe2\x6a\xab\x84\x5c\x67\x0f\xaa\xda\xad\x7a\xcd\xa4\x59\x99\x6c\xea\xe3\x5f\xbd\x23\x87\xd3\x3b\x6d\x5e\x2a\xb6\x72\xb7\x13\x6b\x65\x0e\x9f\x8a\x44\x92\x6a\x37\xfd\xac\xdd\xb3\x5c\x6f\x46\x51\xca\xb4\x4c\xe4\x4e\x1c\xb2\xbc\x9a\xeb\xee\xf1\x85\xdd\x8e\x4f\x33\x71\xb7\xbc\x5e\x7d\x9b\xde\xce\xc4\xfc\x4e\x7c\xb9\x5d\xfe\x6d\xfe\x71\xf6\x51\xbc\x9d\xde\x89\xf9\xdd\xdb\x96\xf8\x36\x5f\x7d\x5a\x7e\x5d\x89\x6f\xd3\xdb\xdb\xe9\x62\xf5\x87\x58\x5e\x8b\xe9\xe2\x0f\xf1\xd7\xf9\xe2\x63\x4b\xcc\xfe\xfe\xe5\x76\x76\x77\x27\x96\xb7\xda\x6d\xfe\xf9\xcb\xcd\x7c\xf6\xb1\x25\xe6\x8b\xab\x9b\xaf\x1f\xe7\x8b\xdf\xc5\x6f\x5f\x57\x62\xb1\x5c\x89\x9b\xf9\xe7\xf9\x6a\xf6\x51\xac\x96\xd5\x4c\xe3\x36\x9f\xdd\x69\xbf\xcf\xb3\xdb\xab\x4f\xd3\xc5\x6a\xfa\xdb\xfc\x66\xbe\xfa\xa3\xa5\xbd\xae\xe7\xab\x85\x76\xbe\x5e\xde\x8a\xa9\xf8\x32\xbd\x5d\xcd\xaf\xbe\xde\x4c\x6f\xc5\x97\xaf\xb7\x5f\x96\x77\x33\x31\x5d\x7c\x14\x8b\xe5\x62\xbe\xb8\xbe\x9d\x2f\x7e\x9f\x7d\x9e\x2d\x56\x17\x62\xbe\x10\x8b\xa5\x98\xfd\x6d\xb6\x58\x89\xbb\x4f\xd3\x9b\x1b\x3d\x4d\xdb\x4d\xbf\xae\x3e\x2d\x6f\xf5\x86\x8a\xab\xe5\x97\x3f\x6e\xe7\xbf\x7f\x5a\x89\x4f\xcb\x9b\x8f\xb3\xdb\x3b\xf1\xdb\x4c\xdc\xcc\xa7\xbf\xdd\xcc\xea\x69\x8b\x3f\xc4\xd5\xcd\x74\xfe\xb9\x25\x3e\x4e\x3f\x4f\x7f\x9f\x55\xaa\xe5\xea\xd3\xac\xda\x49\xfd\x93\xf5\x66\x8a\x6f\x9f\x66\xfa\x59\x3d\x75\xba\x10\xd3\xab\xd5\x7c\xb9\xd0\xfb\x73\xb5\x5c\xac\x6e\xa7\x57\xab\x96\x58\x2d\x6f\x57\x2f\xea\x6f\xf3\xbb\x59\x4b\x4c\x6f\xe7\x77\xfa\xc8\x5c\xdf\x2e\x3f\x57\x7b\xaa\x8f\xee\xf2\x5a\xff\xd4\x7c\xa1\xa5\x8b\x59\x6d\xa4\x8f\xfc\xeb\x37\x68\x79\x5b\xfd\xfe\xeb\xdd\xec\xc5\x53\x7c\x9c\x4d\x6f\xe6\x8b\xdf\xef\xc4\x7c\xe1\xbe\xa1\xf6\x4d\x5e\xe6\xc9\x7d\x92\xca\xdd\xee\x59\xc4\x59\xfe\xa7\x8a\x44\x9c\x6b\x7c\xe9\x53\xaf\x5a\x15\xf2\x58\x6e\xb3\xfc\xd7\x1f\x97\xdc\x7b\xbd\x52\x85\x10\xd7\x72\x9d\xeb\xa5\xf7\x9b\xda\xed\x64\x1e\xfd\x5a\x88\xef\xf2\x41\x16\x9b\x3c\x39\x94\xe2\xa1\x0c\x3a\x1d\xed\x29\xbe\x17\xbb\x24\x3d\x3e\x19\x91\x26\xd9\xe4\xf2\x72\x5d\x6b\x2e\xb2\xfc\xfe\xd2\xfc\xc0\x65\xfd\x03\x04\x94\x81\x3b\xa8\xfe\x39\x7d\x9a\x64\x66\xeb\x45\xa4\x8a\xe4\x3e\x15\xb9\xda\xcb\x24\x2d\x2e\xaa\x17\x35\x1b\xab\x17\x93\xb2\x50\xbb\xd8\x8c\x97\x85\x58\x2b\x95\x0a\xf5\x54\xaa\x34\xaa\xcf\x51\x73\xca\xd4\x9f\x0a\xe2\xea\x6e\x2e\x36\x59\xa4\x8a\x96\x90\xfb\x2c\xbd\xaf\x85\x59\xa9\x01\x1d\x2b\x59\x1e\x73\x55\xe8\xc3\x77\xf9\xe6\xcd\x65\x75\x0c\xc5\x47\x15\xcb\xe3\xae\x14\x45\xf9\xbc\x53\xd5\x3e\x3f\x9d\xc0\x7c\xf9\xe6\xcd\xc5\xcb\xa6\xfc\xeb\x8d\x10\x42\xac\xe5\xe6\xcf\xfb\x3c\x3b\xa6\x51\x7b\x93\xed\xb2\x7c\x22\x7e\xe9\x74\x3a\x7f\xa9\x5e\xb3\x4f\xc4\x71\x5c\x3f\x11\x67\x69\xd9\x8e\xe5\x3e\xd9\x3d\x4f\xc4\x26\x3b\xe6\x89\xca\xdb\xa9\x7a\x6c\xd9\xdf\x68\xf0\xa5\x59\x71\x90\x1b\xf5\xa3\xa2\xde\xd2\x76\xa1\xca\x32\x49\xef\x8b\x89\x78\xbb\x4b\xee\xe5\x5b\x61\xe6\x1c\xb2\xa2\xc2\xce\x44\xe4\x6a\x27\xcb\xe4\xc1\x88\x8f\x85\xca\xdb\x85\xda\xa9\x4d\x39\x11\x69\x96\x9a\xa7\xdb\xfb\xa2\xdd\xf4\xd2\xa3\x5a\xff\x99\x94\xe7\x5e\xfe\xf7\x0f\xfb\x7e\x11\x67\x9b\x63\xd1\x3a\x3d\x31\xa9\x9e\x30\x87\x24\x3b\x96\xbb\x24\x55\xe7\x84\xe2\xa2\x3a\x9a\xed\xad\xda\x69\xf8\x1a\xc1\x69\xfb\xe5\xba\xc8\x76\xc7\xd2\x6c\x4d\x99\x1d\x26\x7a\x1f\x9b\x1d\xda\xa5\x7a\x2a\x65\xae\xa4\x71\xd2\x6f\xa2\xfe\xf5\x41\x7c\x9a\x5e\xfd\x75\xa2\x17\x44\x9c\x3c\x89\xf9\xec\xd7\x42\xac\x77\x49\xfa\x67\x85\xe9\x63\x5e\x64\xb9\xfd\xc1\xcf\x9a\xce\x2f\x36\xfa\x23\xca\x30\xb4\xd8\xe4\x7a\x71\x59\xca\xcb\x5c\xec\x54\x5c\xb6\x44\xa1\x9f\x90\x65\xf5\x6c\x6d\xa5\x3f\xa1\xd3\xac\x14\x0f\x49\x91\xac\x77\x1a\xba\x95\xf5\x25\xdc\xb9\xec\x20\x37\x49\xf9\x3c\xb1\x6f\xa2\x36\x9f\x88\xf6\x78\x3c\x1e\xab\xfd\xeb\xfd\xd7\xff\xff\x98\x44\xe5\xf6\xe5\x77\x5b\xa5\xcf\xaa\x97\xdf\xfe\xb3\x9d\xa4\x91\x7a\x9a\x88\x76\x60\x9e\xb9\xfc\xf0\x41\x7c\xc9\xd5\x83\x4a\x4b\xf1\x98\xcb\xc3\x41\xef\x78\x51\xef\xca\xfc\xf3\x4c\xc8\xc3\x41\xc9\xbc\x10\xf2\x5e\x9f\x64\xf5\xce\xbc\x1c\x04\xbb\x73\x59\x9e\xeb\xcf\x39\xbb\x07\x76\x8f\x1e\xb7\x49\xa9\xda\xd5\x22\xd5\xef\xb1\xb6\x37\xbb\xf4\xa0\xf2\x78\x97\x3d\x4e\xc4\x36\x89\x22\x95\xd6\xcf\xe6\xaa\x48\xfe\x79\x7e\x35\xd8\xb7\xcd\x9c\x28\x49\xba\x55\x79\x52\x9a\x9d\x57\x4f\x65\x3b\x52\x9b\x2c\x97\xf5\xe1\x3b\xa7\x9f\x6c\xf5\x4c\xeb\x52\xbd\x19\x13\x71\xc8\x92\xb4\x54\x79\x83\xcd\x31\x8d\x54\xae\xd7\xa7\xeb\x65\x16\x56\x92\x3e\xc8\x5d\x12\xb5\xf5\x6a\x39\x6b\xaf\x1d\xd9\x9b\x58\x9f\x29\x93\x34\x2b\xdf\x19\xff\xda\xa6\x5d\xf1\xa5\xfd\xb2\x31\xef\x1b\x7f\x64\x2d\xf3\xf7\xe2\xc5\xcf\xbc\xd6\x0c\x9f\x17\xd6\xbc\xa2\xd1\x8f\x9b\x54\x4f\xaa\xb6\xab\xd1\xf8\xe5\x14\x0e\x0e\x4f\xa2\xc8\x76\x49\xf4\x83\xb3\x79\xb1\x9d\xc5\x71\xa1\xf4\x9a\x0d\x0e\x4f\x7f\x69\xd8\x9e\x32\x97\x69\x71\x90\xb9\x4a\xcb\x73\x5b\xf1\x9f\x1f\x92\x7a\x07\x5e\xbf\x5a\x9d\xe1\xed\x2c\xe5\x1f\xae\x57\x9b\x77\x6e\x25\xbe\x7a\x2f\xcf\x6f\x0a\x99\xd6\xc2\x92\x97\x1d\x6c\xda\xcc\x73\x38\xff\xf7\xcf\x6f\xc6\x64\xb2\x56\x71\x96\xab\xff\x78\x73\xac\xc1\xcb\x49\x9a\x96\x2a\x2d\x27\xe2\xed\xdb\xfa\x58\x45\x49\x71\xd8\xc9\xe7\x89\x58\xef\xb2\xcd\x9f\xee\x47\xd1\x6b\xda\x35\xad\xd4\xff\x62\xbf\xcc\x66\xfd\x08\xc9\x75\x56\x96\xd9\xde\x41\xea\x6b\x80\x56\x6b\xd5\x33\x95\x7d\x48\xd0\xbc\xfc\x15\xa1\x2d\xb0\x39\xe3\xd7\x32\x6f\x5c\xdd\xcc\x05\xff\xb3\xef\xfd\xff\xd6\x3c\xde\x89\xf6\x5f\xec\xff\xff\xdd\x9e\xfe\xfc\x3e\xd9\x15\xfc\xe3\xc5\xc9\x26\xdb\xdb\x53\xa0\xfd\x90\xa8\x47\x22\x3e\x77\x7d\x78\x7d\x7d\xed\x9c\x51\xa7\x2b\xb2\xa6\x13\xaa\xf1\x43\xf8\xe5\x5a\x20\xf0\x6d\xdb\x85\xdc\x68\xb8\x98\x4d\x74\xcf\xe6\x73\x17\x5d\x5a\xa5\x6f\x35\x5f\xae\xb6\xc4\x32\x15\xcb\x3b\xf1\xf7\xfa\x4e\x36\x29\x44\xae\xfe\x71\x4c\xf2\xea\x8e\x55\x64\x79\xa4\x2f\xb3\xb3\xdc\x5e\x4e\x65\xfa\xae\x56\xe6\x55\x5a\x51\x5d\x7f\x88\xf8\xa8\xef\x56\xb2\x83\xfc\xc7\x51\xd9\xcb\x0b\x74\x45\x6d\xaf\x30\xda\xcf\x13\x63\x78\x7e\x43\x1f\x93\x48\xb5\x37\x5b\xf9\x23\x8b\xed\x6b\x69\x96\xef\xf5\x9b\xbc\x95\xb9\xbb\xeb\x49\x5a\x7d\xb0\x81\x23\x90\x67\x8f\xbe\xab\xd6\x57\x14\x40\x97\xb0\x95\xd7\xff\x13\x51\xf2\x70\x3a\x9e\x37\x49\xaa\x8a\x0a\xb5\x26\xc1\x29\x0e\x32\x2d\xea\xb0\x40\x3d\x95\x22\xd5\x37\x33\x22\xdb\xc8\xea\xee\xad\xba\xd7\xd3\x6f\xbd\xbe\x69\x3a\x24\xa5\x12\x6b\xa5\x45\xd5\xf1\x96\x7b\x55\x43\x4f\xbc\xfb\xa5\x1b\x0e\xdf\xc3\xcb\xb7\x73\xdb\x57\x1f\xe0\xf6\x0f\x97\xd7\xd5\x05\x6e\xb2\xab\x2e\x5b\xed\x25\xde\x39\xa5\x3e\xb6\xed\xbd\x92\x85\xbe\x6b\x51\x3b\xb5\xd7\x97\xa1\xf0\x58\x37\xb9\xfb\x0f\xf4\xcb\x15\xf3\xab\x8f\x6a\x95\xca\xf5\x4e\xb5\xf7\xd9\xb1\x50\xed\xea\x32\xb8\x38\x1d\xe4\x6f\x5b\x95\x8a\xea\x25\x61\x5e\x92\xb9\x12\xb5\x24\x12\xef\xd4\xfd\x85\x28\xf7\xc7\xa7\xf7\x2d\xa1\xaf\xa0\xf3\x97\xa4\xa7\x28\x65\x1a\xc9\x3c\xb2\x57\x98\xf6\xf2\xdf\x1c\x58\x7b\x81\x18\xd5\xb7\x90\x0d\x07\xb5\xba\xa9\xd2\x57\xd3\xbc\x7b\x1f\xb2\xa2\x7e\x3c\xbf\x5f\xdf\x47\x5c\x74\xed\xf1\xaa\xb6\xce\xec\x36\xba\x0d\x3b\x6d\xcc\x69\x11\xfe\xfc\x27\xf8\xe9\xd6\xb9\xf6\x57\xf6\x08\xd4\x80\x2b\xe8\x5d\x34\xd9\x90\x75\xb6\x8b\xcc\xfc\xea\x8e\xf7\xd1\x7c\x5c\xea\xe7\xcf\x6f\xfa\xe9\x33\xfa\x5f\x3f\x77\x9d\x6f\x27\x56\xcc\x6f\xd0\x56\x2f\x36\xdc\x77\x56\x0b\xf3\x67\xcf\x07\x7d\x1c\xda\x9d\xd7\x77\x3b\xbf\x84\xaa\xdb\xeb\x0e\x1a\x36\xef\xde\x11\x9d\x39\xfc\x48\x5f\x8b\x03\x67\xe2\x66\xd3\x21\xb7\x03\x64\x62\xd0\x3c\x11\xe9\x6b\x71\xe8\x4c\xec\xa9\xb1\xec\xf8\xf6\x31\x6c\x9e\x88\xf4\xb5\xb8\xeb\xee\x63\x4f\xfa\xf7\xb1\x0b\xf6\x11\xe8\x6b\x71\xcf\x99\xd8\xed\x0d\xfa\xb2\xe7\x99\xd8\x6b\x9e\x88\xf4\xb5\xb8\xef\x4c\x1c\xf6\xfb\x9d\xe1\xda\x33\xb1\xdf\x3c\x11\xe9\x6b\xf1\xc0\x99\xd8\x19\x8c\x47\x63\xe9\x99\x38\x00\x99\x18\xd0\xd7\xe2\xa1\x33\x31\xea\x46\xc3\x0d\xb9\xbe\x72\x26\x0e\x9b\x27\x22\x7d\x2d\x1e\x39\x13\xfb\xfd\xfe\xb0\xdf\xf5\x4c\x1c\x35\x4f\x44\xfa\x5a\x3c\x76\x26\xaa\x38\x1c\x87\x63\xcf\xc4\x71\xf3\x44\xa4\x37\x27\xb3\x0b\x9d\x91\x54\x61\xd7\xb7\x58\x03\x40\x1d\x64\x60\xd4\x2e\x76\xe2\x8d\x1a\xf7\x7c\x6f\x65\x00\xb8\x83\x0c\x8c\xda\x05\xcf\x30\x1c\xc7\xde\xe5\x13\x00\xf2\x20\x03\xa3\x76\xd1\x23\xa3\x61\x2c\x47\xbe\x99\x80\x3d\xc8\xc0\xa8\x29\x7c\x54\xa8\x42\xdf\x4c\x48\x9f\x66\x03\xa3\x76\xf1\xa3\xf4\xaf\x8d\x6f\x26\xe0\x0f\x32\x30\x6a\x02\xa0\x0e\xe7\xa3\x0b\x11\x08\x18\x18\xb5\x8b\x20\x2d\xe8\x7b\xd7\x10\x60\x10\x32\x30\x6a\x17\x42\x5a\x32\x1a\xfa\x66\x02\x0a\x21\x03\xa3\x76\x31\xa4\x25\xd2\xbb\x9f\x80\x43\xc8\xc0\x7c\xc4\xbb\x1c\xd2\x92\xc8\xb7\x9f\x21\xe0\x10\x32\x30\x6a\x97\x43\x5a\x42\x6f\xd9\xdd\x99\x80\x43\xc8\xc0\xa8\x5d\x0e\xe9\x05\xe0\x5d\xb7\x21\xe0\x10\x32\x30\x6a\x97\x43\x5a\xe2\x5d\xb7\x21\xe0\x10\x32\x30\x6a\x97\x43\x5a\xe2\x5d\xb7\x21\xe0\x10\x32\x30\x6a\x97\x43\x5a\xe2\x5d\xb7\x21\xe0\x10\x32\x30\x6a\xca\xa1\x7e\xec\x5f\xb7\x90\x43\xcd\x06\x46\x4d\x39\xd4\x3f\x13\x35\xb9\x33\x21\x87\x9a\x0d\x8c\x9a\x72\x68\x34\xf4\xaf\x5b\xc8\xa1\x66\x03\xa3\xa6\x1c\x1a\x0d\xfd\xeb\x16\x72\xa8\xd9\xc0\x5c\xf8\x53\x0e\x8d\x86\xde\x75\xdb\x85\x1c\x6a\x36\x30\x6a\xca\xa1\xd1\xd0\xbb\x6e\xbb\x90\x43\xcd\x06\x46\x4d\x39\x34\x1a\x7a\xd7\x6d\x17\x72\xa8\xd9\xc0\xa8\x29\x87\x46\x43\xef\xba\xed\x42\x0e\x35\x1b\x18\x35\xe5\x90\xf4\xf3\xb6\x0b\x39\xd4\x6c\x60\xd4\x94\x43\xd2\xcf\xdb\x2e\xe4\x50\xb3\x81\x51\x53\x0e\x49\x3f\x6f\xbb\x90\x43\xcd\x06\x46\x4d\x39\x24\xfd\xbc\xed\x42\x0e\x35\x1b\x18\x35\xe5\x90\xf4\xf3\xb6\x0b\x39\xd4\x6c\x60\xd4\x94\x43\xd2\xcf\xdb\x2e\xe4\x50\xb3\x41\xad\xee\x51\x0e\x45\x7e\xde\xf6\x20\x87\x9a\x0d\x8c\x9a\x72\x28\xf2\xf3\xb6\x07\x39\xd4\x6c\x60\xd4\x94\x43\x91\x9f\xb7\x3d\xc8\xa1\x66\x03\xa3\xa6\x1c\x8a\xfc\xbc\xed\x41\x0e\x35\x1b\x18\x35\xe5\x50\xe4\xe7\x6d\x0f\x72\xa8\xd9\xc0\xa8\x29\x87\x22\x3f\x6f\x7b\x90\x43\xcd\x06\x46\x4d\x39\x14\xfb\x79\xdb\x83\x1c\x6a\x36\x30\x6a\xca\xa1\xd8\xcf\xdb\x1e\xe4\x50\xb3\x81\x51\x53\x0e\xc5\x7e\xde\xf6\x20\x87\x9a\x0d\x8c\x9a\x72\x28\xf6\xf3\xb6\x07\x39\xd4\x6c\x50\xab\xfb\x94\x43\xb1\x9f\xb7\x7d\xc8\xa1\x66\x03\xa3\xa6\x1c\x8a\xfd\xbc\xed\x43\x0e\x35\x1b\x18\xb5\xcb\x21\x7d\x53\xe5\x5d\xb7\x7d\xc0\x21\x64\x60\xd4\x2e\x87\xb4\xc4\xbb\x6e\xfb\x80\x43\xc8\xc0\xa8\x5d\x0e\x69\x89\x77\xdd\xf6\x01\x87\x90\x81\x51\xbb\x1c\xd2\x12\xef\xba\xed\x03\x0e\x21\x03\xa3\x76\x39\xa4\x25\xfe\x75\x0b\x38\x84\x0c\x8c\xda\xe5\x90\x96\xf8\xd7\x2d\xe0\x10\x32\x30\x6a\x12\x52\xc7\x8c\x3c\xa1\x8f\x52\x6a\x60\x60\xd4\x2e\x87\xb4\xc4\xbf\x6e\x01\x87\x90\x41\xad\x1e\xb8\x1c\xd2\x02\xef\xba\x1d\x00\x0e\x21\x03\xa3\x76\x39\xa4\x25\xde\x75\x3b\x00\x1c\x42\x06\x46\x4d\x39\xc4\xc8\x13\x06\x90\x43\xbe\x3c\x61\x40\x39\xc4\xc8\x13\x06\x90\x43\xbe\x3c\x61\x40\x39\xc4\xc8\x13\x06\x90\x43\xbe\x3c\x61\x40\x39\xc4\xc8\x13\x06\x90\x43\xbe\x3c\x61\x40\x39\xc4\xc8\x13\x06\x90\x43\xbe\x3c\x61\x40\x39\xc4\xc8\x13\x06\x90\x43\xbe\x3c\x61\x40\x39\xc4\xc8\x13\x06\x90\x43\xbe\x3c\x61\x40\x39\xc4\xc8\x13\x06\x90\x43\xbe\x3c\x61\x48\x39\xc4\xc8\x13\x86\x90\x43\xbe\x3c\x61\x48\x39\xc4\xc8\x13\x86\x90\x43\xbe\x3c\x61\x48\x39\xc4\xc8\x13\x86\x90\x43\xbe\x3c\x61\x48\x39\xc4\xc8\x13\x86\x90\x43\xbe\x3c\x61\x48\x39\xc4\xc8\x13\x86\x90\x43\xbe\x3c\x61\x48\x39\xc4\xc8\x13\x86\x90\x43\xbe\x3c\x61\x48\x39\xc4\xc8\x13\x86\x90\x43\xbe\x3c\x61\x48\x39\xc4\xc8\x13\x86\x90\x43\xbe\x3c\x61\x48\x39\xc4\xc8\x13\x86\x90\x43\xbe\x3c\x61\x48\x39\xc4\xc8\x13\x86\x90\x43\xbe\x3c\x61\x44\x39\xc4\xc8\x13\x46\x90\x43\xbe\x3c\x61\x44\x39\xc4\xc8\x13\x46\x90\x43\xbe\x3c\x61\x44\x39\xc4\xc8\x13\x46\x90\x43\xbe\x3c\x61\x44\x39\xc4\xc8\x13\x46\x90\x43\xbe\x3c\x61\x44\x39\xc4\xc8\x13\x46\x90\x43\xbe\x3c\x61\x44\x39\xc4\xc8\x13\x46\x90\x43\xbe\x3c\x61\x44\x39\xc4\xc8\x13\x46\x90\x43\xbe\x3c\x61\x44\x39\xc4\xc8\x13\x46\x90\x43\xbe\x3c\x61\xe4\x72\x48\x5f\x9c\xfa\xd7\x2d\xe0\x10\x32\x30\x6a\x97\x43\x5a\xe2\x5f\xb7\x80\x43\xc8\xa0\x56\x8f\x49\x7f\x68\xc8\xc8\x13\xc6\xa8\x3f\x04\x0c\x8c\xda\xe5\x90\x96\x78\xd7\xed\x18\x70\x08\x19\x18\xb5\xcb\x21\x2d\xf1\xae\xdb\x31\xe0\x10\x32\x30\x6a\x97\x43\x5a\xe2\x5d\xb7\x63\xc0\x21\x64\x60\xd4\x2e\x87\xf4\x0d\x8e\x77\xdd\x8e\x01\x87\x90\x81\x51\xbb\x1c\xd2\x12\xef\xba\x1d\x03\x0e\x21\x03\xa3\x76\x39\xa4\x25\xfe\x75\x0b\x38\x84\x0c\x8c\xda\xe5\x90\x96\xf8\xd7\x2d\xe0\x10\x32\x30\x6a\xca\x21\x46\x9e\x30\x86\x1c\xf2\xe5\x09\x63\xca\x21\x46\x9e\x30\x86\x1c\xf2\xe5\x09\x41\x87\x82\x88\x11\x28\x9c\x64\x67\xa7\xfa\x12\x85\xa0\x43\x51\xc4\x88\x14\x4e\xb2\x86\xa9\x9e\x4e\x58\x87\xc2\x88\x11\x2a\x9c\x64\x0d\x53\x3d\xad\xb0\x0e\xc5\x11\x23\x56\x38\xc9\x1a\xa6\xe2\xf5\x1b\x74\x28\x90\x18\xc1\xc2\x49\xd6\x30\x15\xaf\xe0\xa0\x43\x91\xc4\x88\x16\x4e\xb2\x86\xa9\xbe\x35\x4c\xa1\xc4\x08\x17\x4e\xb2\xb3\x53\x7d\xe9\x42\xd0\xa1\x58\x62\xc4\x0b\x27\x59\xc3\x54\xdf\x1a\xa6\x60\x62\x04\x0c\x27\x59\xc3\x54\xdf\x1a\xa6\x68\x62\x44\x0c\x27\x59\xc3\x54\xcf\x1a\xa6\x25\xeb\x21\x23\x64\x08\x60\xcb\x1a\x38\x58\x39\x65\x13\x23\x66\x08\x50\xcf\x1a\x39\x58\x39\x65\x13\x23\x68\x08\x50\xd3\x1a\x39\x58\x39\x65\x13\x23\x6a\x08\x50\xd7\x1a\x39\x58\x39\x65\x13\x23\x6c\x08\x50\xdb\x1a\x39\x58\x39\x65\x13\x23\x6e\x08\x50\xdf\x1a\x39\x58\x39\x65\x13\x23\x70\x08\x50\xe3\x1a\x39\x58\x39\x65\x13\x23\x72\x08\x50\xe7\x1a\x39\x58\x39\x65\x13\x23\x74\x08\x50\xeb\x1a\x39\x58\x39\x65\x13\x23\x76\x08\x50\xef\x1a\x39\x18\x39\x29\x5e\x6b\x8d\x7f\x0d\xa3\xe6\x35\x72\xb0\x72\xca\x26\x46\xf4\x10\xa0\xee\x35\x72\xb0\x72\xca\x26\x46\xf8\x10\xa0\xf6\x35\x72\xb0\x72\xca\x26\x46\xfc\x10\xa0\xfe\x35\x72\xb0\x72\x97\x4d\x92\x53\x68\x08\x50\x03\x1b\x39\x58\xb9\xcb\x26\xc9\xa9\x34\x04\xa8\x83\x8d\x1c\xac\xdc\x65\x93\xe4\x94\x1a\x02\xd4\xc2\x46\x0e\x56\xee\xb2\x49\x72\x6a\x0d\x01\xea\x61\x23\x07\x2b\x77\xd9\x24\x39\xc5\x86\x00\x35\xb1\x91\x83\x95\xbb\x6c\x92\x9c\x6a\x43\x80\xba\xd8\xc8\xc1\xc8\x49\x19\x5b\x72\xca\x0d\x01\x6a\x63\x23\x07\x2b\x77\xd9\x24\x39\xf5\x86\x00\xf5\xb1\x91\x83\x95\xbb\x6c\x92\x9c\x82\x43\x80\x1a\xd9\xc8\xc1\xca\xc9\x5f\x51\xe3\x54\x1c\x02\xd4\xc9\x46\x0e\x56\x4e\xd9\xc4\x08\x25\x02\xd4\xca\x46\x0e\x56\x4e\xd9\xc4\x88\x25\x02\xd4\xcb\x46\x0e\x56\x4e\xd9\xc4\xc9\x25\x50\x33\x1b\x39\x58\x39\x65\x13\x27\x97\x40\xdd\x6c\xe4\x60\xe5\x94\x4d\x9c\x5c\x02\xb5\xb3\x91\x83\x95\x53\x36\x71\x72\x09\xd4\xcf\x46\x0e\x46\x4e\x0a\xda\x92\x53\x78\x08\x50\x43\x1b\x39\x58\x39\x65\x13\x27\x97\x40\x1d\x6d\xe4\x60\xe5\x94\x4d\x9c\x5c\x02\xb5\xb4\x91\x83\x95\x53\x36\x71\x72\x09\xd4\xd3\x46\x0e\x56\x4e\xd9\xc4\xc9\x25\x50\x53\x1b\x39\x58\x39\x65\x13\x27\x97\x40\x5d\x6d\xe4\x60\xe5\x94\x4d\x9c\x5c\x02\xb5\xb5\x91\x83\x95\x53\x36\x71\x72\x09\xd4\xd7\x46\x0e\x56\x4e\xd9\xc4\xc9\x25\x50\x63\x1b\x39\x58\x39\x65\x13\x27\x97\x40\x9d\x6d\xe4\x60\xe4\xa4\xb4\x2d\x39\x25\x88\x00\xb5\xb6\x91\x83\x95\x53\x36\x71\x72\x09\xd4\xdb\x46\x0e\x56\x4e\xd9\xc4\xc9\x25\x50\x73\x1b\x39\x58\x39\x65\x13\x27\x97\x40\xdd\x6d\xe4\x60\xe5\x94\x4d\x9c\x5c\x02\xb5\xb7\x91\x83\x95\x53\x36\x71\x72\x09\xd4\xdf\x46\x0e\x56\x4e\xd9\xc4\xc9\x25\x50\x83\x1b\x39\x58\x39\x65\x13\x27\x97\x40\x1d\x6e\xe4\x60\xe5\x94\x4d\x9c\x5c\x02\xb5\xb8\x91\x83\x95\x53\x36\x71\x72\x09\xd4\xe3\x46\x0e\x46\x4e\x8a\xdc\x11\xa7\x18\x11\xa0\x26\x37\x72\xb0\x72\x97\x4d\x11\xa7\x1a\x11\xa0\x2e\x37\x72\xb0\x72\x97\x4d\x11\xa7\x1c\x11\xa0\x36\x37\x72\xb0\x72\x97\x4d\x11\xa7\x1e\x11\xa0\x3e\x37\x72\xb0\x72\x97\x4d\x11\xa7\x20\x11\xa0\x46\x37\x72\xb0\x72\x97\x4d\x11\xa7\x22\x11\xa0\x4e\x37\x72\xb0\x72\x97\x4d\x11\xa7\x24\x11\xa0\x56\x37\x72\xb0\x72\xf2\x0d\x48\x9c\x9a\x44\x80\x7a\xdd\xc8\xc1\xca\x5d\x36\x45\x9c\xa2\x44\x80\x9a\xdd\xc8\xc1\xca\x5d\x36\x45\x9c\xaa\x44\x80\xba\xdd\xc8\xc1\xc8\x49\xb9\x3b\xe2\x94\x25\x02\xd4\xee\x46\x0e\x56\x4e\xd9\xc4\xc9\x25\x50\xbf\x1b\x39\x58\x39\x65\x13\x27\x97\x40\x0d\x6f\xe4\x60\xe5\x94\x4d\x9c\x5c\x02\x75\xbc\x91\x83\x95\x53\x36\x71\x72\x09\xd4\xf2\x46\x0e\x56\x4e\xd9\xc4\xc9\x25\x50\xcf\x1b\x39\x58\x39\x65\x13\x27\x97\x40\x4d\x6f\xe4\x60\xe5\x94\x4d\x9c\x5c\x02\x75\xbd\x91\x83\x95\x53\x36\x71\x72\x09\xd4\xf6\x46\x0e\x56\x4e\xd9\xc4\xc9\x25\x50\xdf\x1b\x39\x18\x39\x29\x7c\x47\xac\xbe\x04\x6a\x7c\x23\x07\x2b\xa7\x6c\xe2\xe4\x12\xa8\xf3\x8d\x1c\xac\x9c\xb2\x89\x93\x4b\xa0\xd6\x37\x72\xb0\x72\xca\x26\x4e\x2e\x81\x7a\xdf\xc8\xc1\xca\x29\x9b\x38\xb9\x04\x6a\x7e\x23\x07\x2b\xa7\x6c\xe2\xe4\x12\xa8\xfb\x8d\x1c\xac\x9c\xb2\x89\x93\x4b\xa0\xf6\x37\x72\xb0\x72\xca\x26\x4e\x2e\x81\xfa\xdf\xc8\xc1\xca\x29\x9b\x38\xb9\x04\x6a\x80\x23\x07\x2b\xa7\x6c\xe2\xe4\x12\xa8\x03\x8e\x1c\x8c\x9c\x94\xc0\x23\x56\x5f\x02\xb5\xc0\x91\x83\x95\x53\x36\x71\x72\x09\xd4\x03\x47\x0e\x56\x4e\xd9\xc4\xc9\x25\x50\x13\x1c\x39\x58\x39\x65\x13\x27\x97\x40\x5d\x70\xe4\x60\xe5\x94\x4d\x9c\x5c\x02\xb5\xc1\x91\x83\x95\x53\x36\x71\x72\x09\xd4\x07\x47\x0e\x56\xee\xb2\x29\x66\xf5\x25\x50\x23\x1c\x39\x58\xb9\xcb\xa6\x98\xd5\x97\x40\x9d\x70\xe4\x60\xe5\x2e\x9b\x62\x56\x5f\x02\xb5\xc2\x91\x83\x95\xbb\x6c\x8a\x59\x7d\x09\xd4\x0b\x47\x0e\xb5\x3c\x24\xbd\xf0\x98\xd3\x97\x08\x51\x2f\x1c\x39\x58\x39\xf9\x8a\x5b\x4e\x5f\x22\x44\xbd\x70\xe4\x60\xe5\x2e\x9b\x62\x4e\x5f\x22\x44\xbd\x70\xe4\x60\xe5\x2e\x9b\x62\x4e\x5f\x22\x44\xbd\x70\xe4\x60\xe5\x2e\x9b\x62\x4e\x5f\x22\x44\xbd\x70\xe4\x60\xe5\x2e\x9b\x62\x4e\x5f\x22\x44\xbd\x70\xe4\x60\xe5\x94\x4d\x9c\x2f\x99\x44\xbd\x70\xe4\x60\xe5\x94\x4d\x9c\xaf\x99\x44\xbd\x70\xe4\x60\xe5\x94\x4d\x9c\x2f\x9a\x44\xbd\x70\xe4\x60\xe5\x94\x4d\x9c\xaf\x9a\x44\xbd\x70\xe4\x60\xe4\xa4\x17\x1e\x73\xfa\x12\x21\xea\x85\x23\x07\x2b\xa7\x6c\x62\xe4\x12\x21\xfc\xfe\x6d\x6f\x5f\x22\x24\xbd\xf0\x98\xd3\x97\x08\x51\x2f\x1c\x39\x58\x39\x65\x13\x23\x97\x08\x51\x2f\x1c\x39\x58\x39\x65\x13\x23\x97\x08\x51\x2f\x1c\x39\x58\x39\x65\x13\x23\x97\x08\x51\x2f\x1c\x39\x58\x39\x65\x13\x23\x97\x08\x51\x2f\x1c\x39\x58\x39\x65\x13\x23\x97\x08\x51\x2f\x1c\x39\x58\x39\x65\x13\x23\x97\x08\x51\x2f\x1c\x39\x58\x39\x65\x13\x23\x97\x08\x51\x2f\x1c\x39\x18\x39\xe9\x85\xc7\x9c\xbe\x44\x88\x7a\xe1\xc8\xc1\xca\x29\x9b\x18\xb9\x44\x88\x7a\xe1\xc8\xc1\xca\x29\x9b\x18\xb9\x44\x88\x7a\xe1\xc8\xc1\xca\x29\x9b\x18\xb9\x44\x88\x7a\xe1\xc8\xc1\xca\x29\x9b\x18\xb9\x44\x88\x7a\xe1\xc8\xc1\xca\x29\x9b\x18\xb9\x44\x88\x7a\xe1\xc8\xc1\xca\x29\x9b\x18\xb9\x44\x88\x7a\xe1\xc8\xc1\xca\x29\x9b\x18\xb9\x44\x88\x7a\xe1\xc8\xc1\xca\x29\x9b\x18\xb9\x44\x88\x7a\xe1\xc8\xc1\xca\x29\x9b\x18\xb9\x44\x88\x7a\xe1\xc8\xc1\xc8\x49\x2f\x3c\xe6\xf4\x25\x42\xd4\x0b\x47\x0e\x56\x4e\xd9\xc4\xc8\x25\x42\xd4\x0b\x47\x0e\x56\x4e\xbe\x20\x77\xa4\x1f\xde\xa9\xe8\x1b\x72\x81\x83\x95\xbb\x6c\x0a\x42\xfd\xf0\x4e\x05\x6c\x42\x0e\x56\xee\xb2\x29\xd8\xe8\x87\x77\x2a\x60\x13\x72\xb0\x72\x97\x4d\xe1\x40\x3f\xbc\x53\x01\x9b\x90\x83\x95\xbb\x6c\xea\x76\xf4\xc3\x3b\x15\xb0\x09\x39\x58\xb9\xcb\xa6\xae\xd4\x0f\xef\x54\xc0\x26\xe4\x60\xe5\x2e\x9b\x7a\xd5\x2f\xef\x54\xc0\x26\xe4\x60\xe5\x2e\x9b\x7a\x4a\x3f\xbc\x53\x01\x9b\x90\x83\x91\x93\x5e\x78\x7f\xa4\x1f\xbe\xa9\xa8\x17\x8e\x1c\xac\xdc\x65\x53\xb5\x00\xbd\xe7\x2b\xea\x85\x23\x07\x2b\x77\xd9\x34\xd8\xe8\x87\x77\x2a\x60\x13\x72\xb0\x72\x97\x4d\xc3\x81\x7e\x78\xa7\x02\x36\x21\x07\x2b\x27\x7f\xd7\xb7\xc2\xa8\x77\x2a\xfa\xbb\xbe\xc0\xc1\xca\xc9\xdf\xf5\x95\xfa\xe1\x9d\x8a\xfe\xae\x2f\x70\xb0\x72\x97\x4d\xe3\x9e\x7e\x78\xa7\x02\x36\x21\x07\x2b\x77\xd9\x34\x56\xfa\xe1\x9d\x0a\xd8\x84\x1c\xac\x9c\x74\x2f\xab\x03\xe4\x9d\x8a\xba\x97\xc0\xc1\xca\x5d\x36\xad\x43\xfd\xf0\x4e\x05\x6c\x42\x0e\x46\x4e\x7a\xe1\xeb\x8d\x7e\xf8\xa6\xa2\x5e\x38\x72\xb0\x72\xf2\xaf\x4c\x56\x27\xb9\x77\x2a\xfa\x77\x26\x81\x83\x95\x93\x3f\xa7\xeb\xe8\x87\x77\x2a\xfa\x73\x3a\xe0\x60\xe5\xe4\xcf\xe9\xa4\x7e\x78\xa7\xa2\x3f\xa7\x03\x0e\x56\xee\xb2\xa9\xfa\x98\xf2\x9e\xaf\xa8\x17\x8e\x1c\xac\xfc\xec\x3f\xfb\xe6\x3d\x5f\x51\x2f\xfc\xe4\xf0\x3f\x01\x00\x00\xff\xff\xa8\x8d\x33\x24\xc6\x8b\x00\x00")
+
+func staticCssXtermCssBytes() ([]byte, error) {
+ return bindataRead(
+ _staticCssXtermCss,
+ "static/css/xterm.css",
+ )
+}
+
+func staticCssXtermCss() (*asset, error) {
+ bytes, err := staticCssXtermCssBytes()
+ if err != nil {
+ return nil, err
+ }
+
+ info := bindataFileInfo{name: "static/css/xterm.css", size: 35782, mode: os.FileMode(436), modTime: time.Unix(1503381631, 0)}
+ a := &asset{bytes: bytes, info: info}
+ return a, nil
+}
+
+var _staticCssXterm_customizeCss = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xbc\x8e\x41\x6b\xe3\x30\x10\x85\xef\xfe\x15\x83\x21\xb0\x0b\x96\x71\x16\xcc\x2e\xca\x69\xa1\xed\x2d\xa7\x94\xde\xc7\xf6\x38\x55\x23\xcd\x08\x49\x4e\xed\x96\xfc\xf7\xe2\xda\x69\xf3\x0b\x7a\x19\xde\x1b\x3d\xbd\x6f\xca\x44\xc1\x19\x46\x0b\xef\x19\x00\x40\x2f\x9c\x54\x8f\xce\xd8\x49\x43\x7e\x47\x2f\xf8\x34\xc0\x01\x39\xc2\x5e\x58\xf2\x02\xf2\xfb\x33\x85\x28\x7c\xf5\x0f\x81\x68\x96\x05\xec\x89\xad\x14\xf0\xb8\x16\x16\xe0\x84\x25\x7a\x6c\xa9\x80\xfc\xbf\xf7\x96\xe0\x30\xb9\x46\x6c\xcc\x77\xd9\x25\xcb\xca\x71\x66\x2b\x39\x53\xb0\x38\xfd\x30\x7f\x66\x35\x12\x3a\x0a\x2a\x60\x67\x86\xa8\x61\x5b\xfb\x71\xf7\x7d\x44\x34\x6f\xa4\x61\x1c\x95\xc5\x70\xa4\xe5\xa1\x15\x2b\x41\x43\x63\xb1\x3d\xad\x1d\xd8\x9e\x8e\x41\x06\xee\x34\xbc\x3e\x9b\xb4\x06\xc5\x63\x6b\xd2\xa4\xa1\x2a\xff\xd6\xcb\xca\x63\xd7\x19\x3e\xce\xab\x3f\xe4\xa0\x2a\xeb\xcf\xf9\xa5\xd7\x94\x44\x93\x8c\xb0\x06\x6c\xa2\xd8\xe1\x5a\x98\xc4\x6b\xa8\xab\xcd\xe2\x2c\xf5\xe9\xc6\xa6\x80\x1c\x7b\x09\x4e\x2f\xd2\x62\xa2\x5f\xaa\xae\x36\x05\xcc\xf3\xf7\x92\x1a\x22\x05\x15\xc9\x52\x9b\x34\xb0\x30\xdd\x7c\x5e\x99\xeb\xd9\xb0\xfd\x57\xb9\x08\x84\x91\x94\xe1\x5d\x76\xf9\x08\x00\x00\xff\xff\xa9\x5f\x6b\xf4\x26\x02\x00\x00")
+
+func staticCssXterm_customizeCssBytes() ([]byte, error) {
+ return bindataRead(
+ _staticCssXterm_customizeCss,
+ "static/css/xterm_customize.css",
+ )
+}
+
+func staticCssXterm_customizeCss() (*asset, error) {
+ bytes, err := staticCssXterm_customizeCssBytes()
+ if err != nil {
+ return nil, err
+ }
+
+ info := bindataFileInfo{name: "static/css/xterm_customize.css", size: 550, mode: os.FileMode(436), modTime: time.Unix(1503469811, 0)}
+ a := &asset{bytes: bytes, info: info}
+ return a, nil
+}
+
+var _staticFaviconPng = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x00\x5f\x03\xa0\xfc\x89\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\x00\x00\x20\x00\x00\x00\x20\x08\x03\x00\x00\x00\x44\xa4\x8a\xc6\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\x00\x41\x64\x6f\x62\x65\x20\x49\x6d\x61\x67\x65\x52\x65\x61\x64\x79\x71\xc9\x65\x3c\x00\x00\x01\xa4\x50\x4c\x54\x45\x1c\x1c\x1c\x2e\x2e\x2e\x1a\x1a\x1a\x25\x25\x25\x26\x26\x26\x24\x24\x24\x4e\x4e\x4e\x5f\x5f\x5f\x20\x20\x20\x1e\x1e\x1e\x1f\x1f\x1f\x22\x22\x22\x1d\x1d\x1d\x21\x21\x21\x3b\x3b\x3b\x19\x19\x19\x16\x16\x16\x2c\x2c\x2c\x29\x29\x29\x28\x28\x28\x27\x27\x27\x2b\x2b\x2b\x2a\x2a\x2a\x2d\x2d\x2d\x2f\x2f\x2f\x00\xac\x3a\x00\xa9\x3a\x60\x60\x60\x3a\x3a\x3a\x00\xae\x3b\x05\x9a\x38\x5e\x5e\x5e\x25\x24\x24\x52\x52\x52\x18\x18\x18\x39\x39\x39\x55\x55\x55\x5c\x5c\x5c\x5d\x5d\x5d\x37\x37\x37\x32\x32\x32\x50\x50\x50\x61\x61\x61\x5b\x5b\x5b\x4f\x4f\x4f\x58\x58\x58\x53\x53\x53\x59\x59\x59\x30\x27\x2d\x28\x1e\x24\x56\x56\x56\x54\x54\x54\x14\x14\x14\x2f\x2c\x2e\x17\x17\x17\x1b\x1b\x1b\x44\x44\x44\x35\x35\x35\x33\x33\x33\x4a\x4a\x4a\x36\x36\x36\x38\x38\x38\x20\x62\x36\x34\x34\x34\x30\x30\x30\x31\x31\x31\x23\x24\x24\x75\x75\x75\x2a\x22\x27\x20\x55\x32\x2e\x2b\x2d\x27\x1f\x24\x2e\x2a\x2d\x29\x26\x28\x62\x62\x62\x25\x21\x24\x26\x25\x25\x26\x2e\x29\x2b\x28\x2a\x20\x60\x36\x1f\x3b\x29\x2d\x25\x2b\x1f\x53\x32\x11\x70\x32\x25\x24\x25\x1d\x4f\x2e\x25\x29\x27\x1f\x52\x31\x00\xb1\x3b\x27\x2e\x2a\x77\x77\x77\x28\x2f\x2b\x2a\x31\x2d\x00\xb6\x3c\x23\x23\x23\x28\x25\x27\x2f\x2e\x2f\x11\x71\x32\x5a\x5a\x5a\x14\x66\x30\x30\x28\x2d\x2e\x25\x2c\x22\x5a\x35\x1e\x51\x2f\x2e\x31\x2f\x29\x21\x26\x2a\x3e\x31\x25\x26\x26\x2b\x32\x2d\x1c\x4f\x2d\x2c\x24\x2a\x30\x26\x2c\x28\x20\x25\x57\x57\x57\x00\xae\x3a\x27\x25\x26\x2a\x27\x29\x2c\x29\x2b\x25\x2d\x28\x00\xaf\x3b\x2c\x34\x2f\x22\x23\x23\x27\x1e\x24\x29\x30\x2c\x2b\x33\x2e\x04\xa0\x3a\x26\x23\x25\x1a\x50\x2d\x1f\x51\x30\x00\xb5\x3b\x00\xb3\x3b\x2b\x23\x28\x03\xa0\x39\x11\x6e\x31\x05\x99\x38\x1d\x50\x2f\x00\xb4\x3c\x2d\x2a\x2c\x63\x63\x63\x2f\x2b\x2e\x63\xda\xc5\x2e\x00\x00\x01\x51\x49\x44\x41\x54\x38\xcb\x85\xcc\xd5\x76\xc2\x40\x14\x40\xd1\x0b\x24\x78\x25\x81\x00\x2d\x69\x53\xdc\xdd\x1d\xea\xee\xee\xee\xee\xee\xde\x9f\x6e\xf2\x3c\x0c\xec\xe7\xb3\x0e\xcc\x72\x46\x19\x96\x91\x6b\x03\x2e\xc9\xd6\x62\xb1\x49\x1b\xfc\xb2\x54\x2c\x18\x0c\xae\x8b\xca\xa1\x58\x37\xf4\xb2\xdd\xbb\xf9\xa1\xfc\xe6\xf6\xb2\x01\xa5\x67\x8d\xe0\xb6\x1c\x75\xbc\x5c\xbd\x3e\x5c\xc7\xca\x1d\x2c\x42\xb0\x31\x7a\xda\xd8\xd0\x7c\xff\x87\x09\x8c\xb9\x91\xa9\x26\x3e\xd8\xef\xd4\xa3\x98\x9c\x0c\x64\x8e\xc3\x67\x21\x98\xff\xa1\x50\x3a\x07\xc7\x07\x6f\x5b\x42\x70\x77\xc1\xa0\x68\x3e\xe0\xb2\xed\x5f\x42\x30\x37\xa8\x43\x69\xb2\x76\xb0\xa7\x76\x26\x84\x60\xe6\x9c\x46\x69\x53\x36\xb0\x15\x8e\x0f\xf8\xe0\x73\xa0\x47\x83\x22\x0a\x1e\xb0\xa5\x6f\x9f\x16\xa6\xbf\xdf\x2f\x97\xb4\x28\x49\xda\x03\x1e\x67\xdf\xf0\xca\xc7\xd8\xda\xe4\x19\x81\x22\x9d\xab\x10\x70\xb6\x3e\x86\x42\xa1\xae\xfe\xbd\xb2\x81\x0f\x02\xa5\x9b\x16\xc1\xb8\xa4\x8c\xc5\x12\x1f\x14\x55\x24\x96\xaa\xe8\x83\x13\x91\x5c\x85\x25\x17\x85\x21\xac\x57\xd6\x60\x29\xf5\x56\x08\x53\x0a\x39\x96\x82\xb2\x82\x95\x51\x2b\xb1\xd4\x8c\x15\x22\x3a\x50\x60\x81\x2e\x02\x7e\x3a\xa1\xc6\x4a\xd0\x7e\x30\xd1\x62\xc0\x12\x0b\x81\xa6\x52\xa0\x31\x55\x09\xb4\x26\x70\x11\x66\x31\x96\x59\xeb\xaa\x16\x78\xf9\x20\x5e\x87\x15\x27\xbc\xe0\x25\xa3\xf5\x58\x51\x52\x0a\x19\x03\x29\xc1\x22\x0d\x19\xb0\x4b\x2b\xb2\xff\x03\x80\x64\x51\xf1\x29\x1a\xc2\x9c\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\x01\x00\x00\xff\xff\xb0\xaa\xd3\x73\x5f\x03\x00\x00")
+
+func staticFaviconPngBytes() ([]byte, error) {
+ return bindataRead(
+ _staticFaviconPng,
+ "static/favicon.png",
+ )
+}
+
+func staticFaviconPng() (*asset, error) {
+ bytes, err := staticFaviconPngBytes()
+ if err != nil {
+ return nil, err
+ }
+
+ info := bindataFileInfo{name: "static/favicon.png", size: 863, mode: os.FileMode(436), modTime: time.Unix(1503381631, 0)}
+ a := &asset{bytes: bytes, info: info}
+ return a, nil
+}
+
+var _staticIndexHtml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x9c\x91\x51\x6a\xc3\x30\x0c\x86\xdf\x77\x0a\xcd\xef\x8b\x2f\xa0\xe4\x2a\x25\xb5\x95\x44\xad\x63\x07\x4b\x09\xcd\x4a\xef\x3e\x3c\xb7\x30\xe8\x60\xa3\x4f\x16\xfa\xbf\xef\xc7\xd8\xf8\xee\x93\xd3\x7d\x21\x98\x74\x0e\xdd\x1b\xd6\x03\x00\x27\xea\x7d\x19\x00\x50\x59\x03\x75\xd7\x2b\x34\xdf\x13\xdc\x6e\x68\xeb\xae\xe6\x81\xe3\x19\x32\x85\xd6\xb0\x4b\xd1\x40\xe9\x6b\x0d\xcf\xfd\x48\x76\x89\xa3\x81\x29\xd3\xd0\x9a\xa1\xdf\x4a\xde\x94\xd5\x93\x29\xba\x07\x92\x89\x48\x1f\x78\x63\x9d\x88\xe5\xe8\xe9\xd2\x38\x11\x03\xf6\xdf\xd2\x45\x29\xcf\x2f\x49\x07\xb7\x8a\xa6\x99\x3f\xe9\x87\x8e\xf6\xf1\x18\x78\x4c\x7e\xbf\x37\x7a\xde\x80\x7d\x6b\x8a\xc6\xb1\x0f\xa6\x43\xeb\x79\xbb\xa7\xe2\x32\x2f\x0a\x92\x5d\xe9\xef\x57\x9d\x0e\x9a\xce\x14\x9b\x93\x14\xb0\xc6\xbf\xb2\x2e\xc5\x81\xc7\xbf\xb9\x93\xd8\x31\xa9\xee\x1f\xc7\x35\xfa\x40\x4f\x02\xda\x7a\x59\xb4\xf5\x4f\xbf\x02\x00\x00\xff\xff\x92\x6e\x9e\x42\xeb\x01\x00\x00")
+
+func staticIndexHtmlBytes() ([]byte, error) {
+ return bindataRead(
+ _staticIndexHtml,
+ "static/index.html",
+ )
+}
+
+func staticIndexHtml() (*asset, error) {
+ bytes, err := staticIndexHtmlBytes()
+ if err != nil {
+ return nil, err
+ }
+
+ info := bindataFileInfo{name: "static/index.html", size: 491, mode: os.FileMode(436), modTime: time.Unix(1503385310, 0)}
+ a := &asset{bytes: bytes, info: info}
+ return a, nil
+}
+
+var _staticJsBundleJs = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xbd\xeb\x73\x1b\x49\xf2\x20\xf6\x79\xf9\x57\xa4\x38\x77\x83\x86\x08\x82\x00\xf8\x90\x44\x0a\xd2\x42\x04\x39\xd2\x8e\x5e\x47\x72\x76\x76\x8f\xc3\x1f\xb7\xd0\x5d\x00\x5a\x6a\x74\x63\xbb\x1b\x24\xb1\x23\xce\x27\xdb\x11\xfe\xe8\x2f\x0e\x7f\xb8\x08\xbf\xce\xfe\xdd\x39\x1c\x8e\xb3\xe3\xe2\xc2\x0e\x9f\xed\x88\x9d\x7f\xcc\x51\x59\xef\xee\x6a\x00\xd4\x63\x67\x7e\x71\x0b\xcd\x48\x40\x3d\xb2\xb2\xb2\x32\xb3\xb2\xaa\xb2\xb2\xb6\xee\xe3\x67\x0b\xbc\xe1\x2c\xf6\xf3\x30\x89\xbd\x49\x12\xcc\x22\x9a\xd5\xe1\x47\xd8\xda\x82\x6b\x3a\x98\x12\xff\xfd\xb3\x24\xc9\xb3\x3c\x25\xd3\x35\x55\xe3\x37\x5b\x5b\x70\x36\xa6\xc0\xcb\x83\x4f\xfc\x31\x35\x72\xaf\x48\x0a\x61\x9c\xe5\x24\x8a\x68\xf0\x8a\xc3\x84\x2e\xfc\x78\x7b\xa0\x0a\x95\x61\xa5\xf4\xcf\xb3\x30\xa5\x20\x91\x31\x4a\xc8\x24\xb8\xbc\x14\x38\x5d\x8a\xd2\x97\x97\x02\xe7\x17\x41\x1d\x7e\x74\x41\x67\xe0\x0f\xc7\xd4\x7f\x0f\xe1\x50\xe2\x1b\x66\x10\xc6\x25\xac\x7f\x13\x0e\xbd\x22\xd6\xe7\x12\xfa\x85\x09\x1e\x7e\xf3\x9b\xdf\xa4\x34\x9f\xa5\x71\xa9\x9b\xba\x42\x93\xde\x4c\x93\x34\xcf\x0e\xcc\x6a\xb7\x45\xcc\x52\x4a\x72\x0a\x04\x62\x7a\x2d\xb1\xf3\x48\x1c\xc0\x74\x96\x43\x98\x43\x18\xe7\x09\xe4\x63\x41\xe2\xba\x59\x9b\x11\x59\xd4\xe8\x2e\x40\x83\xd1\xdd\x42\x3c\xdc\x07\x99\xd9\xb0\x32\xa2\x7d\x18\x92\x28\xa3\x76\xaa\xe8\xc5\x3e\xfc\x68\xe1\xee\x1e\x4a\xd6\xa5\xa3\x1b\xea\xcf\x72\x8a\x58\x0b\xfc\x1c\x43\xfa\x9b\x49\x89\x5e\x3e\x89\x22\x31\x9a\x92\x76\x0d\x01\x41\xfe\xab\xd3\x1d\x9c\x50\xaf\x44\xe9\x38\x22\x23\x13\x1f\x92\x41\x94\x90\x80\x06\x65\x84\x9a\x11\x74\x21\x4f\x67\xb4\x12\xd8\x09\x1f\x78\x06\x4e\x60\x03\xc9\xd0\x80\x6e\x16\x17\x4c\x62\x23\x6f\x32\xc4\x6d\xb9\x15\x5b\x32\x58\x9d\xcc\x24\x66\x06\xc9\xe0\x1d\xf5\x73\xf0\x34\x09\x44\xce\xe5\xa5\xc9\x20\x0e\x0a\x35\x27\xd0\x95\x60\xaa\x44\xb1\xd4\x60\x49\x4e\x5c\x80\x7d\x07\x0f\x56\xb5\x10\x06\x34\xce\xc3\x7c\xae\xd8\x02\x86\x49\x0a\x6c\xf4\xc3\x78\x04\x63\x92\x4e\x92\x78\x0e\xe1\x84\xd3\xf6\x3a\xcc\xc7\x5c\x02\x92\x34\x65\xfd\xf6\x93\x38\xa7\x37\xf9\x12\x84\x42\xe8\x2a\xf8\xde\x15\x89\x66\x94\x29\x35\x31\x1e\xf8\xfb\x00\x2a\xd5\x51\x40\x87\x61\x4c\x61\x44\xf3\x9c\xa6\x36\x9a\x12\x3d\x31\x96\x4b\xb0\x08\x4c\x2c\x14\xef\xc6\x64\x42\x1b\x02\x7a\x41\xad\x84\x43\xef\x9e\x0b\x50\x62\xd7\xae\x17\xb5\xd1\x1b\xe4\x89\x26\x47\xfc\x6d\x9a\x4c\x69\x9a\xcf\x8b\x2d\xda\x55\x7e\xe3\x27\xf1\x30\x1c\xcd\x52\x32\x88\xa8\x53\xf4\x7f\x43\xe3\xd9\x84\x8a\x7c\x26\x13\x85\xec\x11\xcd\xf7\x45\x37\xac\x8c\xdb\x7a\xa5\xce\xab\x24\xf9\x88\xe6\x7d\x3a\x24\xb3\x28\x3f\x42\xa4\x0b\xcc\x91\x4c\xa6\x24\x0f\x07\x61\xc4\xf8\x06\x59\x22\x4e\xe2\x4d\x39\x18\x82\xa5\x97\x0c\x46\x6c\x0e\x06\xaf\x52\x20\x23\x53\xa9\x62\xd0\xa5\x9c\xc0\xd7\x5f\x4b\xf1\xbd\xbc\xa4\x19\x67\x6d\x78\x6a\xf5\x57\xa1\xaa\x3b\xe1\x19\xdc\xc6\xab\x9f\xd7\x02\x9e\x55\xbb\x38\x80\x5b\xd8\xaf\x84\xc0\x9b\xe0\x54\xc8\xca\x70\x2c\xb6\x85\xdf\xb8\xd9\xce\xe3\xbd\x68\x40\x8d\xd4\x14\xa7\x1d\x38\x34\x13\xcf\x3a\x58\x65\x84\x04\x8b\x4d\xd3\x24\x4f\xf2\xf9\x94\x36\xc7\x24\x7b\x73\x1d\x4b\x66\x43\xf5\xbd\x64\x04\x12\x73\x04\xb8\x1a\x6b\xc0\x54\x00\x30\x7a\xba\x4a\x53\xe5\xfa\x0b\x04\x5a\x23\x33\x9d\x0d\xa2\xd0\xbf\x9c\x92\x7c\x7c\x79\xb9\x04\xdd\x29\x74\x61\x7d\xbd\x0a\xe6\xcb\x84\x04\x40\xe3\x3c\x9d\xab\x69\x25\x0e\x64\x0f\xca\xea\x41\x64\xb8\x2c\x18\x57\xdb\xcc\x5e\x6a\xef\x9a\x63\x76\xab\x94\xfb\xa7\x7f\x8c\xae\x78\xe7\x6b\x5b\xf7\xa1\x05\x22\xad\x6c\x0d\x36\x60\xe1\xa4\x0b\x3f\xae\xad\xad\xcf\x32\x0a\x59\x9e\x86\x7e\xbe\x7e\xb0\xb6\xb6\x44\x19\xad\x6b\x41\x5a\x6f\xc0\x8f\x5c\x1b\x73\x05\x03\x4c\x75\x30\x29\x3c\x4c\x26\xd3\x24\x0b\x19\x1a\xcf\x69\x34\xa5\xe9\x65\x1b\xba\x4e\xe2\xb5\xf7\x44\x95\xa3\x2b\x1a\xe7\x47\x93\x90\x31\x74\x75\x69\x51\xf8\xf7\x21\xbd\x66\xe8\x54\x16\xec\x6c\x4b\x4c\xa2\x70\x3a\x48\x48\x1a\x54\x16\xdd\x6e\xc9\xa2\x61\xea\xcf\x22\x92\xbe\x0c\xb3\x6a\xc0\xdb\x1d\x89\x6f\xe6\x93\x29\x3d\xa5\x7f\x9e\xd1\xd8\xa7\x59\x35\x26\xa2\xfc\x8b\x78\x3a\xcb\x9f\x93\x38\x88\x16\xf5\xef\x81\x28\xfd\x96\xa4\xd9\xa2\x72\x8f\x44\xb9\x13\x1a\x07\x34\x5d\x50\xb2\x23\x7b\xf7\x32\x8c\xdf\x87\xc3\x70\x11\xd0\x87\xa2\xe8\x29\x8d\x28\xb2\xd0\x2b\x12\x93\xd1\x22\xe0\x72\x3c\x0e\xc7\x24\x7d\x45\x49\x36\x4b\x69\x35\xe5\x64\xe1\x67\x69\x72\x9d\xa1\x8e\x76\x15\x93\x48\xbc\x4a\x66\x59\x35\x30\xd9\xff\x20\xf1\x67\x13\x1a\xe7\xd0\x05\x8f\xa9\x9a\x64\x08\xd7\x61\x1c\x24\xd7\x70\xaf\x0b\xb5\x59\xcc\x99\x38\xa8\xd5\xe1\xa9\xc8\x68\xaa\x2a\xfb\x10\xcf\xa2\x88\xc3\xf9\xfe\xe4\xc5\xd9\xd1\xe5\xb3\xef\x8e\x8f\x8f\x4e\x2e\xdf\xf6\xbe\x3b\x3d\xba\x3c\x7b\x7e\x72\x74\xfa\xfc\xcd\xcb\x3e\x74\x61\xd7\x2a\xd5\x3b\x3b\x7c\x7e\x79\xfa\xe2\x5f\x1e\x41\x17\xb6\x5b\x2d\x41\x82\xef\x4e\x4e\xdf\x9c\x5c\x3e\x7b\xf9\xe2\xf5\xb7\x97\x2f\x5e\x9f\x1d\x9d\xfc\xbe\xf7\x12\xba\xb0\xc7\x0a\xa8\x09\xe2\x8c\xa6\x93\x30\x26\x91\x97\x4c\xd9\x6f\xb6\x54\x5b\x03\x00\x60\x10\x32\x1a\x0d\x99\xf5\x3a\x0e\xb3\x03\x4c\x0c\x87\xe0\xdd\xf3\xd8\x6f\x6e\x9c\xc5\x3e\xeb\x9f\x04\x51\x97\x75\xd9\x47\xa8\x27\xb6\x0c\x51\x4d\x90\x74\x84\x1d\xcd\xce\x5b\x17\x0d\xd0\xbf\xda\xd6\xaf\xce\x45\x9d\xb7\x76\x8b\x7f\x33\x24\x9a\x03\x35\x42\x62\xac\x0e\x74\x9e\xcf\xd0\x60\x56\xb6\x6c\x47\xa4\xf0\x22\xb6\x14\x37\xcd\x9f\x5c\xed\xb3\xde\xd4\x75\xf7\xc4\x98\x09\x6a\x40\xb7\xdb\x85\x5a\x3c\x9b\x0c\x68\x5a\x33\xbb\xa7\xf2\x8d\x34\xf6\xf1\x93\x28\xdb\x07\xab\xa3\x56\x3e\xc3\x7e\xdf\xee\xba\x95\x3f\xe6\xf2\xb8\x6f\xd1\x43\x95\xb8\x35\x09\xa3\x51\x90\xdf\x3e\x7c\xc0\x25\x31\xcb\x14\x2a\xf3\x3d\x9d\x67\x9e\xa2\x8b\x30\x18\xb2\x7a\x73\x98\xa4\x47\xc4\x1f\x2b\xd5\x0c\xde\x7b\x3a\x37\xfb\xc7\x48\x21\xc0\x9e\xbf\xa7\xf3\x0b\xe8\x76\x91\x39\xeb\x85\xfe\xda\x65\xf4\x10\x98\xe9\x07\x56\x0d\x06\x59\x16\xe3\xd5\xee\x75\x8d\x8a\x12\x47\xcc\x2a\xb6\xb6\xa0\x45\x47\x4b\xb7\x6b\xe5\x6f\x8c\x63\x64\xd5\x32\x8e\xb7\x06\x23\x88\xdc\xa6\x9f\x44\x49\x9a\x35\x23\x1a\x8f\xf2\x31\xf2\xc3\x43\x07\x23\x88\x62\x1a\xaa\xac\xe7\x27\xb1\x4f\x72\x3d\x06\x97\x22\x3d\x8b\x42\x9f\x7a\x0f\xeb\x16\xaf\xd3\x28\xa3\x4b\x1a\x6f\xef\x7d\xbe\xd6\xdb\x7b\x77\x6f\xbe\x75\x97\xe6\x79\x33\xad\x06\x6c\x76\xea\xcb\x28\x81\x85\x1a\x6e\x08\x9b\x9d\xbb\x23\xfa\x19\x47\xa9\xbd\x77\x17\xe4\x98\x42\xa9\x6a\xe8\x40\x97\x28\x89\xaf\x91\x37\x25\x29\x9f\x42\x64\xed\x41\x12\xcc\x99\x78\xcb\xdf\xa2\xc0\x87\x0f\xe0\xa9\xd9\xe3\xa9\x9a\x7b\x9a\x23\x9a\x1f\x45\x14\xd5\xc7\xb3\xf9\x19\x19\xbd\x26\x13\xea\xd5\x18\x90\x5a\xfd\xbc\x75\x21\x26\x9a\xfa\x81\x85\x6f\x01\xdb\xcc\x6c\x6f\x44\x93\x09\xcd\xd3\xf9\x79\xeb\xc2\xa8\xc4\x94\x99\x51\x09\x7f\xba\x2a\xb5\xcd\x4a\x32\x15\xba\x70\xae\x9a\x6e\x68\x80\x17\x65\x11\x14\x4a\xd1\x1c\x50\x4e\xc2\xd8\xab\x05\x24\x67\x4b\x92\x62\xd1\xd2\x80\xcc\x07\x24\xa3\xd0\x85\x96\x81\xca\x3c\x08\xb3\x69\x21\xed\xa6\x58\xa6\xf0\xdb\x9f\xa5\x59\x92\x9e\xe6\x24\x2f\x42\xe3\x39\xcf\xc3\x20\xa0\xb8\x32\x64\xeb\x5f\x8b\xc2\xf1\x15\x4d\xf3\xa3\x24\x32\x12\xff\x3c\xa3\x33\x06\xa7\x56\x33\x12\x33\x3f\x4d\xa2\xe8\x2c\x29\xa2\xc6\xd3\x9f\x25\x79\x9e\x4c\xc4\xb4\xcc\x69\xbe\x09\x6d\x0b\x8f\x2c\x4f\x26\xdf\xd2\x39\xce\x75\xc2\xc0\x83\xae\xb0\x2d\x0a\xe8\x3e\x8b\xc2\xf8\xfd\x8b\x38\xa7\xe9\x15\x89\xca\x85\xc8\x74\x1a\x85\x3e\x61\xb4\xfd\x96\xce\xa7\x24\x70\x74\xcc\x28\x73\x88\x30\x1d\x65\x92\x34\x1c\x85\xf1\xab\x24\xa0\x8e\xcc\x30\xce\x68\x9a\x57\x64\x5e\xa7\x64\x4a\xd2\x64\x16\x07\xa2\x00\xdf\x4b\x53\xf9\x71\x92\x4e\x5c\x98\xfb\x63\x66\xb0\xe6\xe5\x8c\x51\x75\x4e\x44\xaf\xd0\x90\x68\x95\xe1\x30\x3e\x3f\x67\xe5\x4d\x56\x0e\xa8\xff\x32\xf1\x49\x9e\xa4\x26\x03\xb5\x5b\x68\x29\x1a\x49\x57\x79\xa7\xe5\x48\xdc\x2e\x27\xf2\xde\x14\x53\x27\xec\x37\x8e\xa6\xa9\x24\x32\x1a\x07\xc7\x89\x3f\x33\xd3\x66\xf9\xb0\x58\x39\x1b\xa5\xc5\xa4\x59\x7a\x73\x95\x17\x13\x29\x57\x18\x56\xd7\xc3\x28\x48\x69\x6c\x4a\x3c\x1d\xa6\x34\x1b\x9f\xe6\x24\xcd\xcb\xc9\x47\x71\x60\x36\x4c\xae\x68\xf0\x87\x62\xc2\x1f\x8b\x09\x87\x49\x94\x59\xa0\x48\x40\x06\x91\x63\xa4\xaf\xd3\x30\x77\xe7\x04\x74\xd8\xcb\x73\xc6\x77\x5e\x0b\x1e\x3f\x46\xdd\xff\x01\xbc\xce\xee\x03\xf6\xeb\x91\xf8\xb1\xc7\x7e\xb4\xea\xb6\x08\x88\x7a\x26\x18\x5b\x0f\x93\x09\x0e\xfd\x85\x5d\x8d\x69\xdf\xb7\x2c\xb3\xc0\x2d\xd3\x94\x0e\xc3\x9b\xa2\x40\x4f\x93\x2c\x77\x24\x87\xc6\x02\x8c\x71\x23\xbd\x2e\xac\xc9\x9a\xe6\x4f\xd3\x50\x95\xc8\x65\xaa\xa2\x5c\x9e\x35\xf9\x17\xaf\xd4\x00\xd7\xb0\x75\x8b\xd2\x7c\xa5\xa6\x54\x89\xfc\xfd\xe1\x43\x51\x32\xb2\xc2\xfa\x4b\x56\x29\xa5\x97\xab\x46\x72\x95\x27\xeb\xe8\x04\x56\x98\x5e\x9b\xeb\xc0\xa6\xfa\xee\xd5\x0b\x23\x4f\x9f\xcd\x86\x43\x84\x62\x8d\x05\x66\xbd\x88\xdf\xa6\xc9\x28\xa5\x59\xe6\x50\x20\x37\xc9\x70\x78\x4a\xe3\xfc\x2c\x39\x24\xb9\x3f\xfe\x6e\xea\x54\x32\x61\x4e\x4f\xf3\x64\x3a\xa5\x2e\x0d\x97\xcd\xd2\x34\x19\x91\x9c\x5e\x8e\xc3\xd1\xb8\x38\x8c\x51\x18\xe3\x69\x14\xeb\x8b\xbd\x62\x6f\x9a\x3f\x3d\x43\x87\x0f\x88\xff\x5e\x74\x10\x8f\xb6\x4c\x6d\xce\x93\xaf\xc7\x61\x44\xc1\x0b\x37\x37\x4b\xb3\x1e\xb6\xd7\x9c\xce\xb2\x31\x07\x39\x88\x48\xfc\xfe\x65\x18\x53\xcf\xb6\x43\x70\x35\xe3\x1a\xa5\x12\xc4\x62\x81\x66\x46\x73\x4e\x6e\x4f\xb7\x58\x9e\x52\x73\x32\xb0\xf5\x51\x3e\x9b\x32\x22\x66\xd6\xe0\xcd\x32\x9a\x9e\x62\xaf\xc3\x78\xa4\x89\x7b\xbb\x16\xc6\x63\x9a\x86\xb9\x5e\x9f\x34\x16\x2d\xd6\xea\x07\x6b\xca\x3a\xd3\xfb\x78\x34\x25\x19\x15\x32\xac\xd7\x32\xb2\x83\x62\x0d\xea\x59\x4a\xe2\x6b\xf8\xa9\x75\xd3\x1e\x0e\x51\x2b\x58\x6a\xe0\x6b\xe0\x19\x07\x6b\xb7\x46\x63\x39\x89\x47\xc9\xa1\x34\xe7\xce\x11\x70\xed\xab\x0e\xdd\xde\xd9\xde\xab\x35\xc4\x4f\xdf\x6f\xb5\x5a\x2d\xf5\x73\x87\x3e\x22\x2d\x23\x77\x87\x98\xb9\xdb\x3b\x7b\xbb\x64\x47\xfd\x7c\xb0\xbb\xdb\x7a\x30\x50\x3f\x5b\x7b\x8f\x1e\x3e\x22\xea\x67\xb0\x1d\x3c\xf0\x87\xea\xe7\xee\xee\xee\x83\xdd\x6d\xf5\x93\x0e\x3b\x8f\x3a\x8f\xd4\xcf\x87\x84\x76\xb6\x35\xe4\xa1\x4f\x1f\xed\xe8\xba\x0f\x3a\x8f\x86\x06\x28\x12\x3c\x18\x92\x87\x06\x56\xb4\x43\x3b\x1a\x32\xfb\xf8\xb5\xb5\x0b\x83\x14\xca\xa8\xf5\xca\xb4\x66\x7c\xac\xf2\x5d\xc4\x13\xd6\x72\xbd\x01\x28\xc4\xad\x9b\x56\xab\x01\xad\x9b\xdd\x21\xfb\xfb\xe1\x03\xf6\x37\xc1\xef\x01\x7e\x1f\x0e\x2f\x1a\x10\x0a\x5b\x50\x6b\xd9\x61\x92\x82\x77\x00\x21\x3c\x86\x4e\x7b\xef\x00\xc2\x8d\x0d\xcb\xce\x9f\xe5\x5e\x7a\xee\x85\xb0\x05\xdb\x7b\x75\xf8\xe7\xb0\x07\x1f\xa0\x75\xd1\x00\x91\x58\x48\x0b\xd9\x2f\x7b\xbb\xa1\xa2\xad\x9d\x52\x53\xac\x17\x0f\x61\x03\x42\xb8\x0f\xed\xd6\x81\x8d\x42\x03\xd8\x7f\x16\x60\x45\x32\x51\x60\xd4\x80\x81\x09\x4f\xac\x29\x50\xae\x6b\x5f\xd5\x60\x03\xc6\xf4\xc6\x4b\xeb\xe2\xcb\x48\x7e\x19\xd4\xdd\x60\x59\x9e\x6f\x01\x84\x2e\xf8\xcd\x3c\x39\xcd\xd3\x30\x1e\xf1\x7d\x4d\x85\x3c\x97\x0c\x5f\xae\x98\x1e\x43\x07\x9e\x42\xad\xc5\x9a\xf5\x61\x1f\x7c\xb3\x09\x59\x58\xac\x60\x6e\xeb\x9e\x29\x8c\x97\xe5\x51\xb7\x96\x47\x66\xd9\xab\x65\x1c\x94\xcc\x72\xd4\xf0\x0d\x07\x2f\xf1\x94\x06\x1f\x21\x51\xa0\x3c\x50\xbb\x65\xa6\xc0\x92\xd0\x05\x9c\x30\x5f\xc4\xb9\xc7\x21\x9d\x87\x17\xcd\x6c\x36\xc8\x04\x79\xea\x0d\xb0\x48\x94\xcc\x72\x3e\x18\xe7\x2a\x89\x7d\x78\x65\x78\xf2\x04\x57\xe2\x5f\x23\xa7\x36\x2a\x4a\x3c\x74\x17\xe0\xf9\x3c\x47\x65\xd8\x5c\x28\x48\x9e\xcc\xf2\x12\xbd\xe5\x06\x89\xda\x7a\xe2\xbd\xd9\x2f\x11\x4a\xa8\x60\x3a\xa1\xfb\xa0\xce\x8a\x1a\xa2\x8a\x5c\x8b\xa8\x73\x3a\x2c\x4c\xd3\x09\x5b\x2a\xee\x43\xed\x86\x7d\x17\xa5\xe5\x8a\x6d\x1f\xce\x1f\xb6\x1a\xd0\xd9\x11\x7b\x56\xc6\x0a\xc2\x02\x23\x97\x48\xf3\x88\x41\x1a\x44\x89\xff\x5e\x40\xba\x0a\xb3\x19\x89\x9e\xd1\xc8\x6e\x77\x9a\x4c\xdf\xc4\xa5\x54\x3d\x55\xee\x43\xbb\xd5\x6a\xa9\x54\x4a\xd9\x62\x24\xb3\x0a\x07\x74\x30\x1b\xd9\x58\xe0\x26\x20\xb7\x9a\xed\xa2\x61\xc6\xcc\xc8\xd3\x3c\x08\x63\x2b\x63\x96\xd1\xe3\x28\xb9\x3e\x4c\xe2\x3c\x2d\x52\x86\x0c\xd8\xcc\xf6\x7d\x18\xe4\xe3\x7d\x78\x68\x4d\x10\xc6\x56\xa0\x99\x3c\x64\xa6\xb9\x5a\x64\x50\xe2\x8f\xbd\x8a\xdd\xb8\x06\x38\xb7\xe1\xec\x4d\xb2\xaa\x2d\xb2\x03\xab\x6c\xb3\x6a\x3f\xae\x50\xe7\xd6\x3d\x9d\x4a\x9c\x2b\xa7\x52\x3e\xef\xd3\x9b\x9c\xa4\x94\xf0\xe2\x5e\x61\xbe\xd4\xd0\x46\x34\x7f\x83\xe8\x58\x10\xdf\xd3\x79\x03\xe4\x01\xba\x32\x54\xee\xb1\x74\x08\xe3\x32\xc6\x75\xdb\x5c\x49\x93\x6b\xb4\xb4\x8e\xd2\x34\x49\xbd\xda\xeb\x44\x2c\xfd\xf9\x21\x2e\x03\xb2\xce\x94\x18\xfb\xb2\x01\xb5\xf5\x5a\xd9\x24\xe2\x1b\xbc\xe6\x1e\x8c\xde\x86\xb4\x36\xe8\x4b\x9b\xd9\xa5\x3a\x0e\x91\x65\x65\x24\x91\x9d\x54\xc9\x7e\x75\x54\xc9\xae\xc3\xdc\x1f\x97\xb6\x80\x7d\x92\x51\xa8\x69\x29\xac\xed\x5b\x5a\x8c\xe1\x87\x08\xc3\x63\x6d\xbc\xba\x36\x6c\xd1\xaf\x28\x63\xa6\x5f\xed\x94\xe6\x39\xb3\x02\xf3\x31\x35\xc4\x9b\xf7\x1b\x22\x66\xbf\xe7\x63\xc2\x5d\x61\xf8\x9e\x3b\x24\x43\xdc\x32\x87\xda\x41\x09\x2e\x83\xb9\xd1\x85\x75\x6f\x1d\x36\x8c\xcd\x90\x0d\x58\xaf\x43\x98\x41\x9c\xe4\x40\xa2\x28\xb9\xa6\x41\x73\xbd\x5c\xdb\x4f\xe2\x2c\x89\x68\xf3\x9a\xa4\xb1\x37\xc9\x46\xf5\x72\x11\x31\xa2\xc6\x6a\x40\x7e\x6e\x4b\x94\x70\xb3\x93\x35\xa0\xce\x2a\xdc\x98\x17\xb3\xf0\x93\xea\x0a\x92\x90\x64\x92\xcc\xd8\x5a\xe6\x2c\x0d\x27\xc6\x8a\x4a\xc3\xd8\x14\xce\x28\x95\x10\x62\x4a\x83\xec\x84\x2f\xd8\xf1\x90\x4a\xef\x84\x6d\xda\xe0\xf5\x6a\xb9\xf8\x31\x9a\xcd\xd3\x70\x82\xdb\x01\x9e\x59\x77\x51\x3d\xb9\x13\xf7\x8a\xe4\xe3\xe6\x84\xdc\x78\x46\xaa\x8d\x41\x63\x31\x02\x72\xfb\xae\x00\xc8\xd1\x95\x6a\x40\x6c\x20\x4c\x8a\x54\xd1\x1e\x0a\x5b\x1d\x5e\xab\x61\x6f\xc0\x55\xc0\xbf\x2d\xa5\x96\x53\x0c\x6a\x4e\xc8\xcd\x4b\xb1\x87\x5d\x35\x8e\x7c\xf3\x48\x1c\x37\x37\xb3\x79\xec\xf3\xd5\x55\x2f\xa5\xc4\xab\x2f\xe2\xd3\x41\x4a\xc9\xfb\xe2\x2a\x4e\xce\x14\x46\x6b\x65\x5e\xb6\xb2\x17\xaa\x0b\xc3\x26\x28\xe8\x0b\xb9\x46\x3c\xd4\x25\x98\xdd\xc5\x39\xfe\xa0\x0a\xd1\x22\x64\xb4\x2a\x5c\x90\xc5\xf6\x55\xd3\x8f\x48\x96\xb1\xf5\x76\x33\x4f\x46\xa3\x88\x7a\xeb\x68\xca\x6c\xf2\xea\x9b\x19\xab\xbf\xc9\xb4\x7c\xca\x28\xbe\x2e\x94\x2e\x3f\xe7\x53\xc9\xb5\x02\x42\x77\x6f\x61\x40\x52\x1b\xf6\x80\xa4\x45\xa8\xce\x6e\x9a\x96\x46\x05\x05\x0b\xab\x6c\xe7\xf0\xba\xe7\x9e\x94\x66\x4c\x54\xed\x21\x70\xce\xf7\x15\xa3\x65\xb2\x86\xb9\x83\x5c\x69\x03\x94\x40\x58\xad\xd1\x98\x59\x62\x81\xd5\x68\x25\x99\x6b\x16\x99\x07\xc8\x62\x0d\x90\x20\xcc\xfd\xb9\x88\x92\xd4\x6e\x55\xee\x70\x7b\xc6\x01\x5f\xa1\x71\xa8\x3a\xf4\x86\xc5\x3b\xe6\x19\xcd\x15\xf4\x32\x1d\xe5\x07\x4f\xaa\xef\xd2\xb5\xcd\x24\x36\xf9\xe5\xb6\xe1\x3e\xcf\xaf\x2f\x1e\xf0\x05\xa4\xa8\x1e\xf6\x32\x9a\x29\x9d\x24\x57\xcb\xd0\x54\x73\x9a\x83\x4e\x96\xa2\x60\x38\x29\x92\x55\xd6\x58\x89\xf8\x7a\xb3\xd1\xa6\xc0\x20\x14\x7b\xe3\x56\x2f\x19\xf6\x12\x93\x24\xc6\x9f\xca\x98\x6d\x40\x0d\xcd\xd9\x9a\x69\x8d\xd3\xab\xe2\x99\x38\xd6\x51\x3b\xef\xc5\x51\x56\xb9\x5e\xc9\x19\xa7\x79\xd8\x6a\x1e\x9d\x1e\x32\xf3\xeb\xfc\x85\x35\xb2\x6b\x56\xed\x32\xf1\x49\x10\x78\x02\x37\x93\x28\xd8\xd4\x38\xb9\xe6\xa3\xeb\x15\xb3\x9c\xa2\x8e\x67\x35\x73\x4e\x07\x5d\xbe\xb4\x64\x61\xf9\x05\x70\x74\x12\xe6\x9e\xa2\xd0\x8f\x98\xc8\xea\xec\xe3\x37\x75\x70\x7e\x5b\xa9\x08\x06\xd1\x6c\xe1\x26\x9d\xbd\xb2\x60\xa5\x8b\x0b\x0b\x36\xa6\xcf\x8a\x50\x96\x0c\x29\x83\xb3\x60\x44\x05\xa5\xf8\x8c\x8e\x3f\xe6\x0d\x9e\x38\x37\xe8\xf3\xd9\xc6\xfd\xcd\x9d\xc6\x5d\x0a\x9d\x7b\xe8\x17\x48\xf6\x8a\xa3\xac\x65\xa7\x30\xca\x82\x68\x1f\x31\xc8\x61\x1c\xe6\xdf\x44\xc9\xa0\x42\xbb\x30\xf5\x7a\x89\xde\x43\xa6\x7e\x65\xa9\x08\xdf\x4c\xb4\x46\x9d\xad\xf6\xcd\xe3\x8f\xb2\x98\x57\xe6\x32\x86\x31\x33\x19\x8f\x18\x3a\xae\x01\x35\x3f\x99\xce\x0b\x2c\x42\xe3\xbc\x28\xf7\x97\xc5\x83\xb8\x22\x0b\x70\x36\x76\x0d\xaf\xe1\xf0\xd7\x64\x8d\xc9\xf3\x1c\x6c\x87\xb3\x5b\x83\x93\xa5\xbc\x53\xaf\x09\x2e\x29\x35\x25\x59\x4e\x05\x88\xef\x53\x32\x9d\x52\x5b\x20\x24\xf6\x52\xae\xcc\xd6\xcd\xba\x66\xf3\xdc\xd3\xd5\x24\x8f\x21\x42\x58\xa9\xd6\x70\x35\x5c\x49\xd3\xe5\x75\x94\x4c\x09\xcf\xae\x66\x98\x1d\x87\x29\x1d\x26\x37\xd6\x76\x6e\x09\x32\x8e\x40\x90\x5c\xc7\x8b\x87\x4c\x36\x81\x19\xcd\xc1\x2c\xcf\xd9\x7a\xbb\x0b\x1d\x97\x7d\x6f\x92\x28\x0d\x47\xe3\xfc\x30\x0a\xfd\xf7\x05\x3a\x5d\x16\xe8\xb2\x70\xc0\xca\x4c\x70\x5b\xf6\x5f\x59\xd4\x4d\x71\x27\x61\x42\xe3\xd9\xf2\x8e\x7e\x19\xfc\x6f\xcb\x3b\x27\xf6\x78\xbd\x0c\xe3\xd9\x92\xd1\x22\xb3\x1b\x9f\xe1\xf2\x51\x83\xd5\x85\xf6\xb2\xd1\x62\x0a\xf2\x8c\xde\xe4\x6c\xed\xf3\x1d\x33\xde\xf1\x50\x5b\xcc\x88\x9f\x7b\xe0\x8a\x73\x11\xd3\x4a\x4b\xe7\x22\x4d\x8b\xf7\x74\xee\xe0\xdb\xa2\x9e\x51\x2e\x3c\xc4\xcf\xc3\x2b\x2a\xbc\x78\xe0\x1e\xd7\x8d\xab\x2b\x1d\x6c\xfc\x3d\x9d\xf7\x93\xeb\x98\x35\x23\x3a\xd1\xc0\xa3\x73\x43\x6e\x4b\x38\x4e\x53\x9a\x2d\x33\x82\x3e\x37\x92\x6f\x59\x9b\x77\xc2\x72\x36\x5d\x82\xe2\xbd\x6b\x92\xbd\x4a\xe2\x00\x0f\x93\xbf\xa5\xf3\x37\x71\xc4\xfd\x61\x58\x59\xe7\xf4\xcd\x37\x33\x0b\x93\xe6\xed\x02\x84\x0c\x1d\xb9\x7c\x6c\xef\x32\x1e\x36\xe0\x65\x03\x52\x41\x44\x50\x5b\x05\x7c\x0d\xaa\xce\xac\x97\xb6\xe9\x6b\x57\x79\x34\x21\x6b\xc2\x24\xf2\x8b\x2e\xf4\xcd\x62\x49\x14\x0b\xcf\x5d\xb8\xbe\x52\x83\xb3\x69\x40\x70\xe6\x58\xde\x22\x2f\xfa\xe9\x4d\xd2\x38\x58\xa9\x3d\x1a\x07\xab\x34\x86\xb9\x49\xec\xd5\x84\x59\x59\x0d\x9b\x77\xc0\xb8\x98\x20\x5d\xf6\x3e\xb2\x19\xcd\x20\x01\xc9\x49\x89\x45\xd0\xd5\x4c\xf8\x57\x70\x6f\x2d\x2c\xd7\xc4\x91\x6b\x00\x7e\xa7\x71\xb0\x82\x8d\x97\xd1\x34\x3f\x49\xae\x2d\xdd\x97\x26\xd7\xe6\xc6\xb5\xd8\x64\x4f\x85\xdb\x3b\xbf\x5a\x63\x6f\xa9\x23\x00\xa5\x49\x7c\xbc\xb7\x2a\x28\xe0\xd5\x82\xf0\xaa\x56\x76\x38\x48\xf9\xe1\x0c\x09\x63\x9a\x32\x23\x97\xc6\xc1\xe1\x38\x8c\x02\x6c\xdd\xe1\xb8\xc4\xcf\xef\x74\xa6\x30\x89\xd2\xe4\xba\xaa\x73\xc9\x94\xda\xfb\xf2\xdc\xd1\xb2\x01\x43\xd3\xec\xaf\xb6\x63\x8d\xcd\x03\x75\x50\x19\x84\x57\xb6\xd7\x0e\x77\xed\xd4\x2e\x9c\x46\xba\x36\x8e\xee\x19\xa9\x0b\xf7\xfa\x65\x2f\xe4\x7d\xe7\x0c\x88\x84\x2d\xd7\x14\x0e\x52\x0a\x03\x43\x6e\x21\xf3\x0a\xcd\xe4\x3a\xa6\x69\x5f\x8e\x89\x38\x6b\xf8\x7d\x48\xaf\x4d\x67\x2b\x7d\xc1\xa1\xb2\xaa\x51\x1c\x3d\x57\xbb\x76\xd5\x65\xfe\xa9\x07\xa5\xbd\x88\x12\x84\x6a\x7e\xa9\xd8\xc2\xc0\x55\xb4\x5c\xd0\xac\x52\x96\x9f\x80\xae\x5a\x70\x13\x0f\x5a\x37\x6b\xf2\x28\x02\x7f\xd6\x0f\x3e\x72\x2f\xad\xd4\x64\x46\xf3\x5e\x9e\xa7\xe1\x60\x96\x53\xaf\x96\x13\xa6\x21\xe8\x4d\xad\x61\xfb\xb3\xc9\x5d\xe1\x23\x45\xb4\x55\xe9\x55\xa8\xe9\xee\xa2\x2c\xe4\x24\x8a\x29\x8e\x2e\x90\xae\xd6\xf4\xc6\xf5\x47\xa0\xaa\x2b\xbb\xb1\xe5\xe7\x4b\x9b\x4c\xe1\x2f\xec\x6a\x25\xe2\xba\x81\xba\xcb\x15\x4e\x69\xa2\x3b\xe0\x5e\xae\x5c\x81\xbb\x2c\xb7\x1a\xa9\xcb\x60\x2d\x3f\x3f\x43\x6b\xde\x01\x57\x4b\xd9\x3a\xb1\x64\x2b\x81\xd5\x10\x34\x61\xb9\x14\x75\xd1\xab\x4f\xf9\x08\x36\x49\x9e\x13\x7f\x7c\x96\xf4\x93\x89\x32\x3b\x1b\x76\x65\x13\xe0\x18\x27\xc9\x8f\xe9\x6e\xa1\xa6\xbb\xc7\xbc\xd0\x8a\x9d\x2e\x40\x34\xeb\x48\x4b\x64\x01\x7e\xb2\x48\xcd\x55\x6f\x11\x76\x9b\x8b\x6b\xda\x9a\x84\xcc\xf2\x44\xdc\x83\xaf\x35\xa0\x96\x0c\x87\x2b\xd7\x22\xd3\x30\x27\x51\xf8\x17\x7a\x87\x8a\xd9\x94\x46\x91\x3f\xa6\xb8\x22\xac\xe1\xc1\xaa\xbb\x5a\x4e\x06\x2f\x98\x86\x2b\xb8\xd7\xaa\x7c\x12\x04\x68\xcd\x33\x12\xd0\x98\xa6\x9e\x63\xf3\xd6\x9c\x35\xf9\xf6\x7b\xe5\x1e\x26\x4e\xdb\xb7\x85\xdd\x96\x65\x2d\x96\xf6\x16\x2b\x1a\x74\x6c\xa7\x55\xb7\x57\x64\xc3\x12\x57\x49\x84\xec\xcb\x1b\xca\x4a\x64\x93\xf5\x1d\xb8\xbe\x50\xb3\xc8\x57\x46\x36\x6a\xff\xaa\xba\xdc\x36\x95\x3e\xb0\xe5\xab\xb6\xcd\x52\x5a\x71\x9b\xc9\x85\x4d\xd9\x65\x79\x29\x75\x0a\x10\x6c\x5d\x43\xd2\xd3\xf0\x2f\x14\x4f\x10\x97\xcf\x90\x78\x8c\xb7\x50\x43\x94\x1b\x77\xb4\x20\x00\x18\x1e\x6a\xea\xd4\xb8\xe4\xa7\x86\x39\xca\xbc\xf6\xca\x46\x9b\x30\xb5\x4a\x0d\xd3\xf2\x14\xeb\xeb\xfb\xaf\x72\x58\xcc\x1b\xb1\x4d\xe3\x57\x51\xaf\x2e\xd0\x5b\x06\x54\x5c\x7c\xe0\xe5\x88\xf0\x2f\xd4\x1f\x93\x78\x44\x83\xc5\xd2\x20\xd6\x3b\x26\x91\xd4\x19\xe6\x6d\x55\x2b\x13\x81\xa3\x6b\x06\x17\x1d\xd3\x57\xaf\x9b\xf2\xab\xc7\x0d\x70\xd7\x7c\xdf\xa8\xb2\x22\x1a\xa5\xc6\x2b\x9c\xe5\x59\x9b\xfa\x96\x73\x53\x7e\x2d\xf9\xe7\x3b\x9c\xe6\x59\xd5\xf2\x5d\xe6\x66\x31\xc9\x44\x1f\xfd\x02\x1a\xe5\x29\x79\x31\xba\x25\x8f\xee\x55\x97\x8a\x97\x56\x6f\xd5\x7d\x0f\x09\x6e\xd9\x92\x71\x31\x02\x31\xbd\xd6\x96\x4d\xc3\xda\x39\xbb\xc9\xcb\x58\x28\xdd\x2b\xb7\x30\x58\xc2\x41\x55\x21\xe5\x8c\x56\x91\xcf\x5b\x76\x32\x1c\xc3\x8d\x9b\x8b\x45\x0e\x96\x4b\x46\xf7\xa6\xa1\x3a\x3a\xaa\x1f\xd8\x00\x4b\x36\x66\x69\xf2\xf8\xac\xcd\x2d\xf1\x49\x11\x7a\x45\x1e\xcd\x98\x67\xe0\x62\x9d\x2e\x8e\x84\x2a\xfd\xdf\xd0\x85\x8b\x66\x19\x19\xe1\x4e\xd2\x1f\x93\x19\x04\x61\x80\x2e\x56\x53\x82\x5e\x5b\x14\xfe\x84\x40\xfe\xa4\x2e\x2e\x43\x18\xc3\x9f\x2a\x96\xd8\x5e\xfd\x4f\xcd\x1f\x62\xc3\xa7\x4b\x02\xdf\xe8\x42\xed\xcc\x05\x2c\x4e\xae\x41\x79\xbe\xe6\x09\xfc\x29\x4f\x67\xf4\x4f\x30\x98\xe5\x80\xdc\x18\xc6\x23\xee\xeb\x86\xa6\x50\xf3\x5d\x06\xdb\xcd\x16\x54\xb4\x10\xe6\x70\x1d\x46\x91\x04\x88\xf0\xd0\x18\xf9\x53\xd3\xa8\x61\x7b\x88\xf1\xea\x06\x7b\xa9\xc3\x52\x75\x17\x49\xef\x94\x0f\x8b\x87\x84\x38\x04\x16\x87\xde\xaa\xad\xa9\xc2\xce\x7f\x69\xbf\xdc\xe1\xa0\xc0\xd9\xc2\x9c\xbd\x46\x34\xd7\x42\x5a\x47\xef\xe8\x88\x4c\x33\xbc\xce\xa2\x2a\x34\xc3\xec\x50\xa6\x37\x20\xcc\x4e\x98\xd6\x66\x5d\xe0\x5c\x60\xd4\xe9\x42\x6d\x90\x24\x11\x25\x71\x0d\x9e\xc2\x3d\x9d\xb3\x6f\x40\x63\xd5\xb0\x28\xc2\xa9\xd9\x07\xa6\xf7\x04\x78\xa7\x23\x44\x49\x56\x6f\xcb\x42\xc9\x96\xb8\xb8\x9d\x6f\xe9\x7e\x6e\x52\x31\x1e\xaa\x15\x76\xa8\xa2\x84\x04\xbd\x20\x28\xf8\x55\x12\x96\xd2\xc0\x60\x50\x78\xe9\xc6\xdc\xa3\x4a\x6d\x57\xbb\x05\x01\x55\x3a\x3b\x75\x6f\xbd\xb9\xb5\x0e\x1b\x80\x00\x61\x03\x6a\x5b\x35\xf9\xab\x7c\xb4\x63\x88\x96\x08\xfd\xc4\xc8\x24\xb1\x72\xb9\x96\x8a\xb6\xbc\xf3\x5a\x73\x0b\x81\x66\x1a\xbe\xdd\xda\x85\xd1\x9b\x05\x67\x4a\x92\x7b\x29\xdf\x25\x3a\x24\x31\x93\x56\x46\x24\x20\x32\xbe\x0c\x13\x98\x64\x96\x03\x61\x36\xdb\x24\x89\x7f\x77\x0a\x49\x0a\x27\x1c\x95\xdf\x9d\x02\x8d\xaf\xc2\x34\x89\xad\x3d\x24\x70\x3a\x46\x56\xf9\x9f\xb8\xe6\xfc\x6a\xc7\x13\x97\x01\x85\x0a\x9c\xcd\x7a\x68\xae\x29\x14\xd6\x9b\x7c\xcd\x73\x1d\x06\x74\x93\xd5\xfb\xf1\x1a\x7d\xb3\x95\x2f\xa8\x69\x44\x60\x16\xdc\x87\x0e\x6c\xc0\xfa\xf4\xe6\xe0\x76\x1d\x36\x2c\xa6\xf4\x24\x38\x7e\xff\x72\x45\x80\x12\x58\xbd\x0a\x1a\xea\xe1\x27\x10\x84\x57\x3f\x8e\x69\x38\x1a\xe7\x6e\x68\x3c\x4f\x83\xab\x74\xa1\x90\x12\x51\x79\xb8\x8e\xb7\x57\x6d\x85\x62\xed\x48\xe2\x59\x02\xea\x84\xed\x8e\x30\x4c\x25\x9c\x8c\xc6\xc1\x33\x3c\x7a\x2b\x9c\x2f\x30\xb8\xfc\x4c\xae\x01\xd3\xc4\xf0\x89\x92\x07\x75\x30\xa2\xb9\xae\xa9\xf3\xa7\x09\x1b\x6a\x11\x35\x85\x29\xa8\x13\x72\xfd\x6c\x9e\xd3\xc3\x24\x49\x83\xcc\xa3\x57\x1c\xb9\x82\x55\xc3\x43\x7a\x68\xea\xc8\x14\xbc\x24\x2e\xcb\x67\x05\xef\x8c\x7b\xd3\x24\xab\x5b\x63\x50\x3c\x74\x62\xdd\xe3\xe7\x3f\x46\x5f\x0c\x28\xd2\xa9\x91\x5e\x35\x93\x2b\x9a\xa6\x61\x40\xcf\x98\x7a\xfb\xf0\x01\xe8\x15\x6a\xba\xa2\x22\xe3\xee\x7a\xfa\x3c\xda\xf6\xd5\x43\x02\x28\x6a\xf3\x36\x0f\x4a\x25\x0a\x1e\x80\x05\xb0\xb3\xe9\x42\xa0\x72\x08\x57\x02\x78\x3d\xa6\x34\x72\x80\x2b\x54\xb8\x35\x14\x8a\xc5\x1a\xaf\x92\x2b\x5a\xc9\x18\xd0\x95\x68\x15\x58\xe4\x57\xc5\x02\x02\xd7\x0d\x9b\x72\x8b\x18\xa3\x40\x07\x1a\xfb\x49\x40\xd1\x04\x6e\x80\x3f\x2e\x1d\x39\xf2\x55\x8e\xb8\x81\xed\x3a\xe0\xf6\x79\x68\x8a\xce\xee\x6e\xbd\x34\x10\x42\xa7\xa2\x4d\x8d\xc7\x16\x45\x8f\x65\x01\xe0\x09\xb4\x3b\x0f\xca\xd5\x19\x68\x96\x63\xd7\xd1\xd0\xfc\xb1\xd3\xf5\xa8\x30\x69\x14\x11\x6d\xed\x38\x9a\x5a\x15\xd3\xc7\x88\xa9\xe3\x04\xbf\x02\x2b\x28\x39\x2c\x3b\xb0\xb3\x28\xe1\xc6\x4f\x91\x83\x65\x97\x45\xc4\xc0\xfb\xe6\xb0\x05\x1f\x38\xac\x27\xa0\x62\xa1\x54\x15\x7e\x28\x0b\x7f\x0d\xad\x9b\xed\xe3\x62\xf1\x62\xb4\x19\x87\x10\x95\xf9\xac\xc0\x42\xc8\x41\x3a\x30\x40\x91\x78\x82\x83\xbf\xee\xc2\xb6\xdd\xf6\x34\xc9\x9a\x37\xb0\x59\xd6\x09\x2c\x63\xee\xca\xc0\x50\x55\x24\x27\xd0\x2d\xc7\x0d\x33\x5d\xd6\x3a\x3b\xb5\xf2\xe0\x1a\x2e\x1a\xad\x32\xfd\x11\x2c\x33\xb3\xdb\x85\xaa\xca\x34\xb2\x5c\x3c\xaa\xeb\x6f\xaf\x50\xbf\xb3\xa0\xfe\xee\x0a\xf5\xb7\xab\xf8\xbb\x5c\xb5\xba\xa1\x56\xad\x2c\x76\x98\xf1\xd3\x39\x33\xdb\xf8\xe8\x6c\x40\xad\x21\x7f\xe1\x2d\x9c\x8b\x1f\xd2\x42\x3d\x1c\x7e\x74\x23\xc4\x65\xf9\xc1\x42\x75\x76\x5b\xe6\x1c\x1d\x8f\xe2\x0b\x72\xce\x72\x06\x50\x93\x42\xe7\xa3\xc6\x5f\x55\xdf\xf9\xa8\xe1\x57\xd5\xf7\x3e\x6a\xf4\x55\xf5\xed\xaa\xb1\x59\x28\x2f\xb5\x12\xc0\x0d\x01\xd2\x91\x51\x3b\x70\x15\xb7\x10\x84\xa7\xb0\x03\xfb\x2e\x2a\x57\x55\xc7\x81\xbb\x53\xe9\x9b\xd5\x51\x63\xc5\xa7\x6c\x19\xfd\xe1\x43\x05\x4e\x5f\x5f\x17\xaf\x39\xac\xc0\xb8\x3a\x20\x49\x91\x71\xef\xce\x9f\x58\x63\x63\xc3\x51\xba\x98\xb8\xea\x90\xaa\x21\xe4\x74\x31\x25\xfa\xc0\x92\xe8\x57\x1f\xd1\x75\x19\x9e\xe5\xd3\x3b\xbe\x62\x77\x1e\x3b\x07\xd6\x93\x5c\xf7\x35\x6c\xd7\x15\xeb\xa9\xb4\x9f\xb6\x61\x5f\xfc\xaa\xc3\x26\x6c\x3b\xe4\xee\xf3\x70\x58\x15\xf7\xba\xf1\xab\x4d\x6a\xb0\x8f\x74\x5f\x99\xf0\xc6\xc4\x77\x6e\xc4\x8b\xb3\x6c\x3b\xd1\xd1\x8a\x5c\xec\xd0\xa2\x4c\xd3\x77\x7c\xc5\x41\x79\xc5\xf8\x88\x5f\xd4\x6f\x0e\xd3\x64\xc2\x56\xcc\x87\x49\x40\x85\x2b\x37\xcf\xe1\x3b\xae\x15\xd7\xff\xad\x45\x58\xc5\xf2\x2d\x1b\x87\xc3\xbc\x01\x13\x8a\x06\x6c\x9e\x46\x18\x06\xfd\xcb\x2e\x82\x94\x3e\xa5\x57\xd2\xb5\xf3\x1e\xf7\x3d\x77\x1a\x6e\x4f\x61\x43\x15\x74\x16\xd8\x67\x80\xae\xc7\xa1\x3f\x5e\x08\x87\xc3\x52\x45\x37\xa1\x5d\x59\x6c\xbf\xe0\x09\x2f\x3f\x4a\x44\xb5\xcb\xeb\xab\xd3\x17\x47\x55\x37\x04\x55\x47\xcd\xd9\x0d\x9e\x42\x4b\x49\x0e\x26\xed\xc0\x53\x68\xab\xa4\x72\xab\xe5\xeb\x81\x1f\xb1\x48\xac\x9a\xc4\x16\x82\xeb\xbf\x79\x85\x9a\x88\x1f\x89\x2c\x19\xca\x80\xe6\x24\x8c\xe0\x31\xb4\x2a\x86\x71\x6f\xa7\x62\xf8\xf6\x76\x3f\xc7\xb2\xd5\x40\x05\xcb\xf4\x69\x94\x93\x3f\xc2\x93\x2f\x82\x8f\x11\x3e\x92\x49\x10\x6f\x16\xbf\x7e\x4b\xe7\x72\x86\x36\xb7\x9a\x51\xbd\xd0\xab\x26\xfb\xc6\x8b\x3c\xb4\x8b\x30\xe1\xe3\x45\xd8\x37\x5e\xa4\xbd\x57\x00\x93\xe0\xe6\x2d\xb6\xf8\x81\x03\xfd\x80\x15\x0f\x5c\x6b\x86\x4e\xc5\x9a\x81\x41\xf9\xba\x5b\xa8\x57\x58\x00\xea\xd5\xab\x11\x7f\xcc\x05\xa8\x6b\xe2\xa7\x81\xa8\xd1\xf0\xb6\x3b\x4c\x57\xb3\xa2\x8f\x1f\x43\xa7\x5e\x57\x53\x67\x69\xf3\xd0\x4c\x56\x7b\xe1\x34\x5a\xe0\xe2\xef\x5e\x6f\x9b\x57\x32\x16\x4e\x01\xf6\x06\x57\x41\x43\x97\x36\xa4\x57\xa0\x6c\x51\x4b\x76\xb5\x44\x16\x27\x66\x77\xcb\x06\x35\x8c\x40\xb6\x76\x19\x87\xc5\x60\x8e\x91\x05\x2b\x89\xc5\x32\x40\x9d\xe7\x72\x84\x26\xc9\x15\xad\x35\xd4\x36\x4e\x71\xe3\x04\xeb\xc8\xa8\x75\xa5\xf8\xae\x15\x30\x6d\x07\xec\xd9\xb4\x30\x3e\xab\x74\x7d\xb5\x4e\x29\x44\x86\xc3\xbb\xf6\x6e\x69\x55\xec\xc4\x6c\xea\xa8\xb2\x6c\x58\xc0\x38\xad\xb0\x87\x69\x51\xcd\x5b\xed\x90\x8c\x9c\xce\xb5\xdb\x67\xe5\x72\x45\x50\x39\xa0\x56\xe9\x0f\x1f\xa0\xb0\xc5\xe0\xcc\x36\xd6\x91\x1f\x25\x52\x9f\x9b\x06\x77\x15\x74\xd6\x43\x79\x41\x3e\x89\xbf\x67\x2d\x7c\x3c\x82\x79\x32\xf3\xc7\xd2\x11\xfe\xcb\x61\x79\xc6\x9a\xe1\x81\x14\x3e\x0d\x55\x21\x0f\x5f\x18\x53\xb9\x1f\xbc\x3a\xa2\xee\x33\x8d\x80\x66\x79\x9a\xcc\xab\xcf\x84\x8c\x78\x90\xae\xa8\x7d\x15\x59\x97\x78\xf9\x47\xc6\xe4\x51\xc9\x63\x15\x6c\xd1\x3e\x76\xbf\x2d\x40\x2d\x9d\xb0\xc8\x12\xea\x8e\xb3\xf4\x4b\xfe\xfa\x6b\xdb\x0b\x90\xbb\xe8\xbc\x4e\x02\x5a\x3a\xfe\x2d\x17\x11\x57\x3c\x2b\x3d\x79\xaa\xaf\xf1\xcb\xe8\x1d\x1a\x49\xe1\x93\x41\xe3\xc0\x3a\xe3\x34\xbd\x39\x4a\x18\x29\x37\x0f\xbc\x1b\x20\x22\x60\x98\x90\x16\xa3\x51\xbe\x51\xb0\x2a\x46\xca\xbf\xd3\x44\x09\x7d\xa4\x64\x38\x44\xac\x8c\x0e\x53\x5d\x06\xa1\xe4\x2b\x05\x65\x57\x51\xfe\x6d\x7e\x92\x5c\x7b\x61\xf9\x68\xb9\x2a\x3e\x81\xba\x41\xed\x64\x41\xed\x89\x6f\xc4\xfd\x2d\xd1\xd1\x8e\x09\xdc\x3e\x28\x52\x59\xdc\x2f\x66\x3f\xe6\xc2\x45\x63\xbe\x84\xb6\xdc\x3f\xc4\xc2\x29\xcc\xf8\x15\xca\xc0\x3c\xf1\xc3\xbb\x0c\x45\xda\x52\x2b\x12\xb6\x91\xaa\xc2\x8b\x54\x04\x95\xd4\xc1\x5c\xda\xc5\x6b\x44\x18\x9f\x65\x73\xd3\x9e\x69\x78\x0e\x06\x5c\xb9\x87\x7b\x81\xae\x11\xc2\x7c\xb3\xa6\xb9\x3f\xae\x61\xcb\xdd\x19\x4d\x72\x2b\x72\x64\x09\x63\x19\xfd\x45\x43\x30\x8d\x49\x7e\xbd\x44\xe7\x59\x21\x82\x54\xbc\x64\x56\x6a\xb3\x10\x49\x19\x36\x85\x07\x93\x11\x6d\x59\x63\x86\x70\xbb\x8e\xc0\x3b\x77\x08\xd3\xa9\x7c\x6c\x1a\xa0\xc7\x74\xd1\x59\xbe\x01\x2f\x9b\x62\x50\xbd\x34\xb9\x6e\x80\x74\xf7\xb9\x0b\x64\x1d\x14\x54\x05\x99\x2e\x8d\x9c\x1e\x59\xa4\xdc\x82\x91\x2d\xf2\xc4\x8a\xe3\xb7\xd2\x38\xda\xdc\x62\x7f\x2b\x13\xa4\x3c\xd2\xaa\x83\x0d\xe5\x08\x65\xb0\x1c\x77\x4c\x40\x0f\x95\x02\x3d\x4c\x6f\x93\x8a\x52\x9c\x29\xca\x6e\x29\xca\xa9\x4b\x77\xac\x3a\x30\x0a\x96\xed\xf3\xbe\x1b\xfe\x78\x61\x36\x6d\x40\x36\x9b\xe2\x81\x2a\xa7\xde\x91\x79\x61\x16\xef\x5f\xb2\x5a\x8f\xab\x06\x8d\xd3\xd3\x35\x68\x0b\x6e\x62\x96\xc6\xcb\xe1\xd9\xa4\xd6\x8a\xd8\xc2\x86\x39\x7c\x4f\xcc\xf1\x2b\x89\x42\x45\x08\xd8\xa2\x16\xe0\x60\xbb\xc0\xfe\x2d\x28\x35\xd1\xca\xa2\x46\x16\xeb\x03\xed\x96\xa3\xcb\x16\x28\x68\x41\x69\x15\x85\xe6\xde\x82\x31\x59\x89\x0d\x0a\xbd\x5d\xe0\xb3\xb7\x88\x61\xde\x92\x51\xc1\x83\x66\x4a\x46\xf4\x30\x99\x69\x6c\x0c\x46\x65\xec\xa5\x0b\xc0\x7d\xf0\xec\xb6\x96\x34\x76\x96\xf0\x20\xf4\x55\xe1\x81\x74\x1b\x9b\x2b\x73\xfc\x59\xa2\x02\xd8\x2f\x07\x6b\x48\xf5\xe6\x2a\x42\x55\xb6\xdd\x4c\xff\x56\x6d\xde\xf1\xe0\xc6\x5c\x39\x1b\x47\x6d\xc5\x40\x6e\x4d\x3b\x22\x24\x33\xf6\xb8\x66\x2b\xc7\x94\x96\x76\xa0\x09\x5e\x46\x75\xeb\x2e\x7c\xcc\xc7\x11\x8d\xb9\x6a\xb7\xb8\x7f\xb8\x5d\x9c\x96\x5d\xd1\xad\x5d\x1e\x89\xf7\x34\x76\x46\xb4\xec\x45\x58\x3b\x84\xa3\x1c\x6c\x5b\x37\x05\x8b\xc2\x27\x65\x34\x3f\x0b\x27\x34\x99\xe5\xcb\x42\x24\x85\x71\x4c\xd3\xef\x59\x3b\x96\x7b\xe0\x12\x6b\x49\xd7\xaa\x74\x8d\xe2\x5d\x64\x34\x92\x3a\xc2\xec\xb4\x98\x45\x5a\x8d\xd2\x8b\x4a\xa2\x65\x11\x8f\x5b\x43\xa9\xa0\x93\x71\xbc\x60\x94\xc5\x4d\x3c\xb3\x43\xac\x18\xb3\xee\xd0\xbf\x80\x43\x52\xf7\x45\xdf\x35\xc0\xcf\x1a\xe0\x8f\x1b\xe0\x27\x01\x6d\x40\xc4\x26\x7b\x7f\x7c\x89\x5e\x67\x0d\x6d\xf2\x59\x2c\xeb\x64\xc9\x32\xba\x38\x2f\x2c\x1a\x77\xe7\xc4\xb1\x94\x2f\x8b\xe1\xef\x2a\x79\xb3\x10\x4c\xf1\xd6\x69\x2a\xa3\x09\xaa\x54\xb9\xdb\x9c\x3e\x8a\x03\x47\x09\xe4\x40\x61\x87\x63\x1e\x0f\x92\xcf\xff\x29\x9e\xaa\x9b\x05\x32\x9a\xa3\xfd\xee\x61\xed\x62\xa1\x92\x1d\x30\x2f\x96\xb0\x8c\x7c\xb3\x1b\x8d\x22\xd6\x6e\x73\x6c\xb9\x04\x7e\x39\xe1\xd2\xb7\x48\xab\xad\xcf\x85\x71\xf6\xab\xc4\x12\x2b\x45\xf1\x0a\x0a\xd9\xe3\x2e\x13\x50\xfb\x21\xfd\xa1\xe4\xd9\xab\x01\xf2\xdb\x80\x87\xf2\x81\x93\x20\xb9\x8e\x9f\x3b\x96\xf4\xbe\xa3\x80\xa9\x0b\x0c\x57\xf6\x6a\x88\x1e\x46\x11\xed\x1f\xbd\x3d\x39\x3a\xec\x9d\x1d\xf5\xf1\x35\x46\x74\x1b\x1f\x50\xe0\x0b\xf7\x00\xb2\x24\x89\x9b\xf0\x36\xa2\x6c\x8a\x9a\x65\x14\x0a\xf0\xcc\x27\x58\x18\xc0\x38\xcb\x29\x09\xa4\x97\xf9\x02\x0f\x73\x24\xcd\x22\x60\xce\x3e\xae\x48\xb7\xc2\xc3\x30\x0e\xc2\x99\x25\x6c\x17\xdd\x0a\x18\xce\xf4\x05\x41\x01\x9f\xcf\xa7\x34\xcd\xe9\x4d\xfe\x32\x8c\xdf\xbb\x50\x29\xbc\xf9\xa3\xe7\x30\xe7\xde\x41\xe9\x56\xbc\xf0\x77\xe6\x1d\x07\x02\x63\xd9\x1e\xb0\xfa\xf2\x99\x35\x18\xd0\x61\x92\x52\x33\x7c\x32\x8d\xd9\xb0\xfb\xf8\xee\xb0\xe3\xde\xbc\xde\x6e\xa8\xe8\x84\x67\xbf\x40\xf4\x91\xb6\x9e\x01\xfb\xf7\x24\x0a\x03\xfe\xba\x8e\x70\xfb\xb6\x87\xcc\xe1\xd9\xfe\x79\x08\x75\xa5\x1a\x56\x0e\xe7\x9f\x8b\x5e\xe5\x3e\x79\x05\x9f\xf6\x8f\xa3\x5b\x4a\x47\x61\x96\xd3\x94\x8d\xc7\x2b\x36\xe7\x14\x98\x2a\xa5\x23\x7a\xd3\x90\xa3\xaf\x5e\x8d\x5a\x6d\x7f\x0a\x35\x07\x07\xfa\x22\x28\xbd\x66\xe2\x6a\xbb\xb2\xbd\x8a\xc9\x63\x41\x4c\x59\xf9\x64\xaf\x6c\x7f\xb1\xe2\x0d\xe8\x32\x4a\x28\x40\xab\xf5\xbd\x9c\xeb\x6e\xc3\x80\xeb\xb4\x21\x56\xe8\xe9\xe2\xfd\xba\x31\xc9\x4e\x8d\xfb\x2f\x8b\xc3\x09\x96\x2e\x50\x99\xb5\x17\x44\x2d\xff\x84\x16\x54\xc2\x19\xde\x55\x5b\x10\x95\x73\x71\x23\x6e\xe8\x76\xc5\xea\xc8\xeb\xbc\x62\x2f\x5a\x10\xe4\xb3\x02\xf3\x5e\x14\x55\x83\x15\xf1\x8b\x0a\xf1\xe6\x4a\x1c\xe4\x9e\x23\xa4\xcd\xe9\xcc\x45\x30\xcc\xf4\x44\xab\xc2\x71\x3f\xc6\xbd\x65\xe0\x0c\x72\x69\xde\x6f\x13\x7b\xb7\xa5\xd8\x3b\x22\x60\x93\x88\xb4\xe3\x2c\x53\x2f\x46\x8a\x72\x6c\x8b\x19\x4b\x52\xa7\xc5\x6c\xad\x78\xcb\xf7\x9d\x16\xf5\xcf\x69\xee\xe1\x8e\x2f\xcd\x66\x91\xb2\x8e\xe9\x15\x89\x66\x24\xa7\x8c\x9e\x96\x69\xae\x0f\x5f\x70\xdb\x12\x2b\xb1\x6e\x23\x95\x2b\x57\x97\x4e\xb3\x4f\x3f\x8c\x54\xb9\x23\xb4\x1a\xfc\xf6\x32\xf8\x25\x2a\x18\xb0\xf5\xb6\x40\x79\xc5\xac\x77\x0c\xca\x85\x4b\x3a\x94\x0f\xb7\x3c\xa1\xb2\xa2\x61\xe9\x46\xc3\xec\x6c\x1c\xa6\xc1\x4b\x7a\x45\xa3\x53\x5c\xbd\xe5\x78\x83\xa6\xc0\x13\x12\xa4\x63\xc5\x2d\x30\xe1\x0d\x95\x8f\x0c\x96\xb4\x7f\x4f\x53\x74\x85\xf6\x8c\xcd\x27\x1d\x8a\x4c\x31\x80\x9d\x5b\x6b\x80\x86\x5d\x2c\x55\x0e\x28\x8b\xc9\x62\x02\x33\x86\x59\xe4\x2e\x26\xa9\x5b\x8b\x54\xb2\x6c\x85\x5e\xb1\x98\xde\xb8\xe0\x86\xcd\x59\xaf\x74\xb0\xcf\x7b\x3a\xdf\x07\xbd\x0f\xae\x57\x49\x8a\x23\x8c\x6c\x4e\x42\x2d\x5b\x93\x84\x07\x8c\xcb\x0a\x2e\x3e\x8f\x1f\x43\x0b\xd0\x09\x8e\x44\x32\xa1\xcd\x13\xa4\xff\xce\xe3\xc7\xd0\xe1\x29\xd2\xe9\xe7\xf1\x63\xe9\x7e\x65\xf8\xd5\xbd\xa7\xf3\xc3\xc2\xe1\x20\x7a\x3a\x3d\x2c\x3f\xae\x60\x20\xe0\xda\x3c\x37\x45\xce\x2d\x70\xcf\x4e\x57\xf2\xb4\xb2\x3d\xce\x96\x83\xed\x1f\xbd\xb4\x01\xb8\xe2\x98\x3f\xfa\x02\xfd\x91\xce\x92\xff\xd2\xf1\x18\xc4\x67\xe8\xd7\xf3\xb3\xa2\x6b\x8e\x21\xc0\xa5\xbd\xae\xaa\x8e\xb7\xb7\xf7\xef\xd8\xee\xe1\xc9\xe7\x68\xb7\xf3\xe0\xae\xed\x1e\x9d\x1e\x7e\x8e\x86\xb7\x1f\x94\x87\x5a\xc9\xd1\xa7\x0d\x74\x1b\xdd\xab\x35\x34\xd8\x80\x76\x9d\xe5\xf4\x1d\x1c\x50\x9a\x86\x96\xc1\xde\xee\xd7\xaa\x7c\x39\x2d\x14\xc5\xf1\x9d\x76\x02\x25\x7e\x1d\x9e\x2e\x84\x3e\xa8\xc1\xfe\xb2\xe6\x77\x5d\x9d\xb8\x5d\xc0\xc1\xf6\x11\x46\xe9\xd5\xd5\x4f\x22\xf5\x9b\x22\x32\x2b\x5d\xc4\x5a\x7d\x24\x17\x83\x77\xb2\x95\x43\x83\x7c\x69\xb6\x3a\xfc\x2c\x6c\x75\xf8\xc5\xd8\x6a\xb8\x0a\x5b\xb9\x3a\xf1\x8b\xb1\x55\x11\x99\xcf\xcc\x56\x8b\xc1\x3b\xd9\xca\x31\xd1\x7e\x69\xb6\xea\x7d\x16\xb6\xea\xad\xc6\x56\xcb\xd8\xc3\x85\xcc\x2f\xc6\x1e\x45\x64\x3e\x33\x7b\x2c\x06\xef\x62\x8f\x9d\xd6\xdf\x9e\x3d\x9e\x7d\x16\xf6\x78\xf6\x79\xd8\xc3\x85\xcc\x2f\xc6\x1e\x45\x64\x3e\x33\x7b\x2c\x06\xef\x64\x8f\xdd\x32\x7b\xdc\x33\x17\x0a\x5f\x7f\x0d\xf7\xf4\xa2\xe0\xd3\x18\xa6\xf3\xd3\xdd\xf1\xdb\xfb\x62\xec\xbb\x5d\xc5\xbe\x8b\xb1\xfc\xe4\x41\xda\xbe\x3b\x15\xb6\x17\x52\xe1\x4b\x88\xf0\xf3\xaa\x9b\xc6\x15\x52\xf1\x09\x32\xe1\x6a\xea\x13\xba\x54\x04\xe7\xa4\xa7\x83\xeb\xbf\x2c\x3d\x8f\xff\x76\xf4\x74\x35\xf5\x09\x5d\x2a\x82\x73\xd2\x73\xfb\x63\x17\xc7\x96\xd3\xd8\xa6\x57\xb5\x85\x0e\x9f\x5f\x0c\x77\x3f\x42\x0c\x77\x3e\x4b\x37\x1d\x6e\x9b\x5f\xa8\x8f\x7b\x77\xef\x63\xbb\xdd\xf9\xdb\x1b\x0c\x6f\xbf\xa8\xc6\x7d\xb3\x18\xbc\x9b\x0a\x0e\x8e\xfe\xd2\x54\xf8\x17\x5f\x96\x0a\x8b\xc1\xbb\xa9\xe0\x60\xf8\x2f\x4d\x85\x93\x2f\x4b\x85\xc5\xe0\xdd\x54\x58\x38\x5b\x7c\x19\x2a\x9c\x7e\x59\x2a\x2c\x06\xef\xa6\xc2\x97\xb3\xc4\xda\xbb\xbf\x90\x29\xd6\xfe\x88\x49\xa0\xdd\xfe\x82\xdb\x83\x0f\x7e\x29\x42\x3c\xf8\x18\x42\x7c\xc1\x9d\x87\x87\xbf\x14\x21\x1e\x7e\x0c\x21\xbe\xe0\xce\xde\xa3\x5f\x8a\x10\x8f\x3e\x82\x10\x9d\x2f\xb7\xd9\xd0\x69\xfd\x42\x84\xe8\xb4\x3e\x86\x10\xed\x2f\x47\x88\xca\x39\xe3\x4b\x13\xa2\xfd\x31\x84\xf8\x72\xd6\x64\xe7\x97\x5a\xc0\x77\x3e\x62\x05\xdf\xee\x7c\x39\x83\xb2\xb3\xf3\x4b\x11\x62\xe7\x4e\x84\x10\xc1\x89\x9d\x6b\x28\x79\xe8\x2c\xb6\x9b\x8a\xdb\x4f\xe2\x90\x5a\xfc\x12\xe7\xd1\x2e\xaa\x09\x70\xe2\x50\x1a\x9e\x74\x61\x6f\x97\x55\x33\xd2\x1e\x77\xe1\x51\xc9\x1f\xdc\xd9\x79\x47\xf8\x1a\x13\xf8\x26\xec\xed\x38\x6e\xda\x97\xe3\x9d\xa8\xc5\xbe\x51\x19\x03\xfe\x38\x1f\x6f\x5c\x09\x0d\xd7\xeb\xef\xab\x35\xfc\xa4\x0b\xbb\xed\x32\x49\x76\x77\x3f\x0f\x49\x76\xdb\xb0\x01\x9d\x07\x9f\x44\x97\xdd\xbd\x8f\xc6\xa5\xfd\x89\x4d\x77\xda\x8f\x3e\xba\xed\x4f\x6d\xba\xf3\xf1\x5c\xd9\x79\xf8\x89\x4d\x3b\x1f\xa6\x5c\xad\xe9\x47\x4b\x9b\xae\xd8\x60\xbf\x57\x3e\x2f\x14\x7c\x69\x8b\x7b\x41\x37\xfc\xad\xa4\x7f\x81\xea\x5b\x22\x05\x1b\x4c\xb2\x3f\x65\x3c\xda\x8f\x56\xd3\x0c\x8b\xb4\xf3\x9f\x96\x9e\x7b\x54\x61\xf0\xa4\x0b\x3b\x0f\x1d\x1a\xc2\x19\xfa\xf4\x2e\x38\xd9\x9a\x62\x67\x39\xcf\x2e\x3a\x99\x29\xf1\x4d\x79\x9e\x30\x18\xe7\x4e\x7c\xc3\x86\x60\xaf\x52\x1f\x1a\xce\xa6\xc2\xb7\xf4\x2e\x9d\x30\xe6\x44\x71\xaf\x5b\x86\x4b\x67\x34\x5c\xe0\x3e\x3f\x42\xcf\x3d\xcb\xa3\x6c\x64\xf9\xbf\x8e\x22\x51\x60\x64\xf8\xb9\xe1\x7b\x26\x54\x39\x57\x8a\x9f\xd9\xf9\xe8\x62\x51\x53\x87\xaa\x96\xd1\x58\x03\x44\x6d\xfb\xfa\x84\x86\x08\x5d\x59\x42\xbb\x69\x5a\x98\x75\xbb\x50\xbe\xf5\xae\x31\xb4\x2a\x57\xb9\x4b\xcb\x77\x41\x17\xb8\xd6\xbd\xa7\xf3\x02\x02\x7f\x3b\xff\xdd\x62\x9c\x10\x69\xde\x08\x2d\x61\xc2\xe1\xe2\x62\x64\x3a\xfd\x50\x55\xc0\xb7\x2e\x8f\x0d\xe7\x84\x20\x18\x77\x31\x80\x7b\xf2\xa2\x9c\xd1\x64\xf9\x2a\xbc\x82\x89\x95\x4a\x10\x97\x93\x01\x35\x3b\x83\xf2\xe1\x03\x78\x9e\x96\xc9\x0f\x96\x73\xe1\x87\x0f\x96\x48\x32\x81\x5d\xe4\xa0\xba\x0a\xfd\xab\xa7\x28\xed\xdd\x69\x3b\x8e\xca\x87\x68\x1d\x6e\xa3\xa6\x73\xe9\xdd\xbd\x4a\xcb\xee\xa4\xe8\x78\x56\x25\x70\x78\xf1\xcf\x7d\xa1\xcc\xe9\x34\xad\x27\x4f\x0c\x58\x62\x12\x67\xf5\xab\x73\x12\x57\xfc\xc1\xe1\x1c\x94\x4b\x61\x86\xf1\xd6\x2e\xf0\xeb\x75\x8e\xf8\x03\xbc\xe4\x06\xbf\x01\x5a\x19\xf0\x9f\x56\x78\xf0\xeb\x2e\x5d\x85\xd9\x8c\x44\xcf\x68\x14\xd5\x0b\x43\x7e\x50\x4d\x11\x3e\x66\xf2\x69\xc9\x7c\x1e\xd1\xe6\x20\x49\x03\x9a\x1e\x26\x11\x06\x42\xa9\x5d\x8f\xc3\x5c\xbe\xe8\xb1\x94\x48\xfc\xad\xb3\x45\xe0\xf4\xd3\xc3\xed\x56\xf1\xae\xf5\x34\x99\xbe\x89\xed\x0e\x60\xba\x0a\xc9\xe6\xa6\x4d\x94\x8c\x96\x90\x26\xa0\x83\xd9\xc8\x4d\x15\xf3\x6a\x00\xbe\x83\xda\x14\x57\xf1\x98\xa4\x39\x33\x58\x7b\xd5\x14\x26\xe9\x88\xa9\xd8\x5e\x9a\x92\xb9\xc9\xab\x51\xe8\xd3\xa6\x4f\xa2\xc8\x93\x0f\xd9\x58\x2f\x44\x39\xda\x10\x01\x3f\x5d\xd9\x0d\x6c\xa6\xda\xad\x3a\x4d\x97\x06\xb1\xf9\xbc\x24\xc1\x16\xbf\x38\x51\xb0\x95\x8f\x27\x4b\x4a\xb3\xf0\x2f\xb6\x6b\xf9\x4d\x03\xe6\x26\x6d\xc2\xec\x35\x79\xed\xdd\xd4\x59\x4f\xf9\xf7\xb9\x43\x85\x16\xb5\xf6\x5c\x86\xa3\x18\xd1\xfc\x0d\xde\xeb\x92\x91\x1f\x06\xc4\x7f\x5f\xab\x3b\xee\xf5\xbb\xca\x31\x5c\x4c\xd0\x78\x33\x3c\x8c\x69\x03\x68\xd4\x80\x90\x5f\x07\x1f\x37\x80\x04\xc1\x59\xf2\x47\x3d\x56\x37\x3a\x0c\x8d\x9f\x44\x78\x95\x7f\xae\x93\xf0\x81\x84\xa5\x5d\xb8\x81\xc7\x66\x00\xee\x1b\x1d\xbc\x88\x77\xd0\xca\x9d\xeb\xdc\x77\x60\xb4\xac\x2b\xbc\x83\xc7\x70\x63\x79\xb6\x8f\xa1\x0b\xe7\x82\xf3\x86\xbd\x3c\x4f\x1b\x50\x83\x5a\x03\xda\x46\xe4\xdd\x10\x1c\xd1\x74\x74\xb6\xb8\x78\x1f\x6e\x6e\x16\xf5\xb2\xc8\x31\xea\x8e\x68\xee\x85\x75\x79\x7f\xba\x80\x8c\x35\x16\x56\xf9\x65\x4f\x11\x94\xe2\x15\x21\xc1\xbb\x70\x63\x4e\x71\x34\x9f\x4d\x4f\xf3\x64\x9a\x79\xaa\x48\xbd\x40\x2d\x7c\xf4\x0f\x93\xf8\x60\xea\x30\x23\x92\x7a\x96\xb9\x5d\x7a\xcc\xa5\x44\x94\x77\x1b\x1b\xc5\x4a\x50\x19\x0a\xea\x31\xcc\x55\xcc\x96\x62\x00\x95\x52\x4d\x7e\xc5\xe9\x89\x11\x2a\xc0\x86\xe5\x0a\xad\x34\xe7\x2f\x14\xb1\x8e\xe1\x8e\xda\x82\xf5\x80\x33\x70\x90\xfc\x70\x18\xc5\x60\xdd\x65\x14\x45\x48\x98\xca\xe5\x29\x54\x06\xa0\x32\x3f\xe5\x45\x5e\xc5\xb2\x6f\x41\x77\xaa\x43\x3d\xb9\xde\x94\x58\xb4\xde\xd1\x36\xb8\x7c\xc2\x5c\x8f\x5e\x25\x33\x97\x9e\x8c\x2c\xc3\xbe\xad\xb6\x4c\x25\x2f\x6d\x6e\xc2\x93\x55\x79\xe9\xc9\x5d\x78\xa9\x50\xd3\xcd\x38\x8b\xf9\x45\x10\x38\x99\x2e\x5f\x3f\x3a\x7a\x58\x02\x67\xc5\x1b\x73\x97\x60\x2c\xe3\x2a\xf1\x51\x83\xe7\xa0\x2b\x58\x02\xae\x2a\x94\x02\x85\x98\xb0\xef\xd1\xa8\xe2\xb5\x93\x24\xce\xc3\xb8\x78\x59\x83\x37\x51\x15\x6e\x90\x46\xab\xeb\x3b\xf4\xbe\xe9\x42\x71\x9d\x38\x87\x27\x5d\xbb\x67\x22\xb9\x0b\x73\xed\xac\xa3\xa7\x1b\x2e\xd8\x8e\xf2\x1b\x5d\x6b\x7a\x2b\x84\xc6\xb8\x61\xcd\xdc\x94\xaa\xb1\xd9\xea\xa6\xd8\x8c\x75\xed\x72\x5a\x78\x3d\xd8\x0c\xde\x65\xe3\xa8\x96\xd6\x8b\x9e\x1d\x5d\xe5\x95\x45\x1e\xc6\x16\xba\x46\x48\x71\x61\x23\x24\x13\x9a\xa7\x73\x35\x1f\xf2\xc7\x8c\x14\x9c\x8b\xd2\x62\x8a\xdb\x2d\x85\x77\x83\xf9\x12\x8f\xd5\xdd\x87\x1b\x8c\x04\x93\xed\xc3\x7c\x41\x78\x4d\x23\x70\x89\x65\x02\x59\xf6\xcf\x5c\xbd\x4a\x6b\xc4\x2d\x29\x58\xe3\x85\xc8\x2c\xf3\x83\xb2\x1d\x64\x84\x38\x71\xd6\xe5\x11\x5b\xe6\x55\xa8\x4e\xc8\x4d\x19\x4f\x6b\xf3\xa4\x80\x43\xab\x3c\x36\x46\x50\x18\xed\x31\x56\xb9\x71\x23\x26\x6c\x3b\xc8\xa2\x65\x18\xca\x10\xf3\xc5\x6b\xc0\xdc\x1e\xce\xc9\x20\x3b\x0f\x2f\x4a\x2a\x53\xc5\x9e\x49\xe9\x15\x6b\xc1\x19\x8e\x12\x2a\x02\xad\x30\xa0\x46\xd8\x52\x09\xd0\x8a\x47\x56\x7c\x4d\x18\xcd\x30\x08\x99\x1c\x15\x2d\xd2\x9c\x0c\x18\x0a\xdf\x87\x41\x3e\x76\xd8\xa4\xa2\x0b\x85\xab\xbd\x6e\x8a\xc9\xee\xd8\xb6\xb4\x49\xaf\x1b\xb5\xed\x62\xd9\x94\x5c\x5c\x39\x70\x31\xdb\x18\x04\xdc\xdc\xbc\xb9\x60\x56\xc6\x0d\xce\xe5\xaa\xa2\xb5\x21\x70\xa3\x02\xcc\xb1\xae\xaa\x32\x4f\x0d\x73\xcc\x8c\xf0\xbf\x0f\xcc\xb2\x6d\x89\xe0\xfb\x37\x55\x2c\x10\xd3\x9b\xfc\x0b\x74\x68\x63\x43\x76\xc8\x18\x9e\xbf\x69\xc7\x68\x4a\x32\x7a\x82\x8f\x0a\x56\xad\x7b\xe4\x32\xc3\x36\xbe\x99\x41\x6c\xcd\xcf\x73\xf3\x2e\x3d\x2b\xb3\x78\x51\xc1\xa0\x1a\x46\x3f\xe2\xc1\xcc\x7e\xaf\x5e\x30\xfc\x05\x07\xdf\xd8\x1c\x7c\x63\xc7\x78\x65\xed\x9d\xdf\xf0\x8d\xd2\x92\x92\x37\x43\x32\xcd\x17\x2c\x8a\x49\x46\x5f\xd2\xe1\xaf\x96\x10\xea\xa5\x1a\xc1\x47\x37\xf6\x3a\xe7\x33\x90\x00\x63\x46\x54\xee\x0b\x18\x9d\xb4\x43\x83\xcd\xcb\x91\xc0\xca\xdd\x34\x28\x96\xd1\x5c\xcd\x8c\x15\x34\xe4\x3f\xea\xe6\x7c\x69\x07\xab\xb5\xa6\xe3\x42\x24\x46\x13\x51\x3b\x4d\xff\xb6\x22\x08\xb7\x57\x7a\x6e\x7d\xb9\xe9\xbe\x5a\xcc\x46\xf8\xf8\x48\xa0\x9c\x47\x39\x0b\x3a\x66\x68\xcd\x40\x28\xd1\xac\xf1\xea\xc1\x56\xe8\x17\xc2\x3a\xa5\x66\x40\x58\x83\xf3\x49\x9e\xf3\xe8\x4d\x69\x51\xf7\x18\x2c\x6b\xa8\x1f\x73\x2d\x7f\x50\xe0\x74\x62\xae\xef\x1b\x52\xa8\xce\x2f\x1a\xe6\x04\xc6\xf7\x5b\x0a\x98\x48\x4e\x6f\xaa\x1c\xe8\x6a\x7c\x57\x98\xf9\x1c\x7a\x23\x2c\x0b\x8d\xd0\xb9\x2c\xbb\x52\x58\xc6\x45\xc2\x15\xa2\xbe\xd8\x94\xaa\x96\x6e\x83\x66\x55\x1b\x20\x15\xa1\x0c\x6d\x7b\x84\xd9\x7e\xe6\x80\xc5\x64\xa2\x54\x15\xcb\x7b\x4d\x26\xd4\x9a\x51\x3c\x2c\xb1\x01\xb5\x5a\xbd\x19\xc6\x01\xbd\x79\x33\x14\x40\x50\x9e\xab\x9a\x75\x45\x46\x37\x77\xd6\x4b\xa1\x31\x83\x30\x23\x83\x88\x9e\xe6\x41\x18\x2f\xdf\x69\x32\xa4\xb7\x3a\x6e\x8a\x65\xbc\xdb\x31\x53\x4a\x61\x2e\x18\x6e\x35\xf1\x20\xd2\xe2\x3e\x9d\x85\x79\x64\x8b\x43\xce\x52\x6c\xf1\x42\x98\x98\xce\x64\x16\xf3\x2b\x07\x88\x11\xb5\xda\x48\x9d\x9b\x71\xac\xe5\x32\xa9\xbc\xfe\x28\xaf\x82\xcc\x0d\x0a\xa3\xb8\xe7\x8e\x17\x68\x1b\x0e\xe5\xc5\x91\x84\x56\x1d\x42\xfe\x8a\xa6\x19\x7d\x51\xd9\x19\xc6\x6c\xef\x4a\x3d\x51\x1b\x8c\x3a\x5c\xb2\x5b\xa3\xe2\x42\x56\x3c\xe1\x9c\x79\x6a\x99\xaf\xf9\xa0\xa0\x42\x1b\x50\x8a\x38\xae\xe7\x95\xea\xea\x5a\x5d\x63\xc8\x91\xa5\x71\x1b\x8b\x51\x9e\x97\x95\xb4\x22\x3d\x57\x1b\xed\xf3\xe5\xe4\x2e\x1e\x10\x5b\x4c\x23\x85\x4a\x2c\xb4\x0b\xbb\x85\x56\x11\xb1\xf7\xa8\xb5\x9f\xd6\xc2\x15\xa1\xf9\x78\x51\x77\x7c\x3e\x5d\x57\x45\x50\x7a\x11\xe7\x34\xbd\x22\x7a\x6f\xa2\x9c\xc5\xeb\xa9\x6e\xe2\x5e\x3e\x5f\x9a\x9a\xa8\x5a\x9b\xfa\x77\x0b\x1b\x68\xd4\x73\xe1\x55\x89\xd2\xca\xb3\xb4\x7a\xce\x22\x9b\xc7\x3e\x8f\xe8\xdc\x4b\x29\xa9\x3e\x6e\x62\xeb\xa8\x45\x23\x88\x96\x3f\x17\x3d\xbd\x9a\xba\x3d\x58\x53\xc5\xc5\x1b\x1d\x0c\x98\x11\x10\xce\x27\xd3\x7c\x96\x52\xeb\xa4\x86\x1f\x98\x84\x19\xfe\xeb\xd1\xa8\x5e\xda\x14\x3e\xa7\xd1\x85\xcd\x92\xcd\x61\x92\x1e\x11\x7f\x6c\x9c\xd0\xc9\xa7\x24\xac\xca\xfc\x8c\x8e\x04\xfc\x29\xda\x97\x61\x96\xd3\x98\xa6\x9e\x1b\x2b\xf8\xf0\x41\x9c\xe7\x8b\xc6\x18\x75\x8c\x1e\x0d\x87\x2b\x74\x89\x46\x62\xdb\xe9\xae\x2d\x1a\x2d\x19\x91\x85\x86\x49\xea\xd3\xf2\xc1\x16\x2f\xc1\x5f\x33\xc1\xe3\x71\xab\x9c\x7b\x5e\xa2\x57\xb8\xa4\xa5\x71\xde\xe7\xae\x96\x52\xd5\xd2\xab\x66\x96\x27\xd3\xb7\x69\x32\x25\x23\x22\x23\xad\x41\xe9\x30\xdd\xc0\x30\x8c\xc7\x34\x0d\xf3\xcc\xc3\x9d\xbc\x06\xf0\x4d\x37\xd9\xbe\x2a\x36\xf4\xca\x0e\x1d\x49\x9c\xe5\xe9\xcc\xcf\xf1\xf0\x0e\xab\x5b\x06\x8f\xe6\x41\xe8\x0a\xb0\x3a\x89\x97\xc4\x4a\x56\xb9\x98\x5e\xc3\xb0\x80\x20\x37\x05\x92\xc1\xbb\x06\xe8\x78\x54\xd2\x58\x4e\x06\xef\xac\x93\x17\xf7\xa9\x0b\xa3\x77\x32\x78\x87\xb6\x55\xb7\x0b\xc5\xed\x48\x41\x9d\xd0\x61\x73\x6d\xb6\x6d\x6c\xca\xce\x0b\x34\x9d\xa0\xdb\x80\x81\x58\xae\xca\x7c\x2b\x22\x66\xd0\x74\xf2\x09\x1e\x70\x1f\x3e\x28\x74\x4b\xa0\x4e\xbf\x0f\xe3\x80\x29\x8a\x22\xc0\x6a\x78\x96\xcb\x0a\x27\x7c\x17\xb4\xa3\x84\x2b\x6c\x97\xd9\x21\x07\x95\xec\x0e\x7f\xfd\x35\xbf\x5c\x2e\xfd\xac\xb8\x13\x88\x72\x3b\x83\x9d\x07\x28\x25\xce\xad\xb4\xdc\x1f\xcb\xc3\x77\xfd\xc3\xd0\x46\x3a\xd1\x4b\xdb\x0d\x18\xb5\x1b\x30\x68\x9b\xb4\x1f\x13\x7c\x5f\xc6\x4b\xdb\x18\xeb\x6a\xaf\x0e\x1f\xc0\x1b\xe1\x8f\x87\xec\xfb\xc0\x38\x28\xd4\xc0\x9a\x97\x3e\xf1\xc7\xf4\x9c\xd5\xbe\x70\x6d\x9e\x99\x61\x2c\xcb\x35\x4a\xe7\xa0\x41\x38\x1c\x42\x17\x5e\xc4\xc3\x30\x0e\xf3\x39\x5b\x54\x40\x17\x36\xdb\x2a\x56\xb6\xdf\x80\xb4\xd3\x80\x51\xa7\x01\x83\x4e\x03\x58\xf9\x83\xe2\x42\x41\x11\xe8\xca\x67\x2d\xaa\x23\xc6\xe2\xb2\xc1\x87\x6e\xa9\xec\x79\x68\x9c\x54\xa6\x1d\x26\xa1\xe7\x2d\x23\x69\xc4\x93\xcc\xf3\xcc\x01\x4f\xea\x18\x49\xa2\x1b\x46\xaf\x83\x30\xcb\x99\xca\x32\xa8\x6f\xf6\xa4\xf0\x44\x1b\xaf\xef\x0a\xcc\x8d\xf4\x08\xed\x8d\xfc\xca\xc7\x0b\x15\xa8\xc7\x9c\xb2\x25\x60\x02\x4f\x4d\xc5\xaa\x66\x6e\xcb\xbc\x5b\xc5\x04\x5d\x88\x42\xc6\xa6\xa5\x7c\xb1\xc9\xe9\x20\x8a\x1d\xb2\xd5\x4d\x20\x7b\x55\xf6\x8a\xe4\xe3\xe6\x34\xb9\xf6\xb6\x5b\x70\x1f\x99\x76\x13\xd2\x4e\xbd\x61\xbe\x0f\xbd\xa1\x4b\xed\x3e\x62\xa5\x46\xac\xd4\xa8\xba\x54\xbb\xcd\x4a\x0d\x58\xa9\x01\x2f\x65\xcf\xe8\x94\xcd\xb7\xa8\x4f\xc3\x1c\xe7\xb0\x24\x36\x27\x26\xa6\x52\xc5\xac\x5c\xf4\x91\x00\x23\xcf\xd3\x95\x1d\x9b\x18\x2d\xce\xc2\x86\x7a\x2e\x72\x2d\xab\xce\x2d\x30\x3f\x89\x1b\xc0\xd5\x33\x3a\x0e\x24\x83\x77\x3a\x6c\xbe\x46\xfb\x9a\x64\xaf\x92\x98\xdf\x7d\xf8\x96\xce\xdf\xc4\x11\x37\xbe\x0c\xb7\x40\x81\x65\xd1\xcd\x76\xcf\xd4\xa0\xc5\xcc\x07\x8b\x32\x1f\x5a\xda\xff\x3d\x9d\x67\x8c\x3c\x26\xb5\xde\x0c\xde\x51\x1f\x9d\x62\xb3\x12\xb5\x8c\x3c\x4f\x77\x4a\xf8\x2e\xa2\xc3\x59\x66\xbc\xe6\x8b\xf4\x7b\x4f\xe7\x10\x22\x9d\x8b\xf3\x97\x00\x66\x45\x94\x7d\x73\x1d\xb3\xc9\x9e\xa6\xf9\x9c\x93\x12\x47\xf5\x3d\x9d\x97\x82\xd8\xb2\xb6\xf8\x6e\x91\x76\x5a\xab\x10\x08\x56\xd4\xd2\xcf\x48\xe5\xa3\x49\x98\xe7\x68\xfa\x9a\x3f\x2f\xdb\x56\xae\x61\x81\x4a\xc3\x82\xc9\x9f\xf8\x6a\xe4\x62\xf0\xd8\x24\x36\x53\x50\x82\x13\x26\xc0\x86\x7d\x2e\x02\xba\xf1\x2f\x07\x6b\x93\x24\x98\x45\xb4\x49\x6f\x98\x09\x9c\x19\x6a\xef\x60\x6d\x6d\x6b\xeb\x2b\xc8\x92\x59\xea\xd3\x57\x64\x3a\x0d\xe3\xd1\x77\x27\x2f\xbb\x37\x38\x5d\xbe\xcb\x9a\x13\x32\x5d\x5b\x5b\xdb\xba\x7f\xff\xfe\x16\xdc\xd6\x1b\x6b\x5b\xf7\xa1\x0d\xf7\xb7\x44\x8a\xb2\x3e\x3d\xde\x42\x03\x44\x13\x0d\xb8\xbc\xbc\xa6\x83\x29\xf1\xdf\x5f\xa6\xf4\xcf\xb3\x30\xa5\x97\x97\x8c\xb6\x6b\xeb\xb3\x8c\x42\x96\xa7\xa1\x9f\xaf\x1f\xac\xad\x89\xd1\xe1\xe1\x19\xe5\x98\x78\x0a\xca\xfa\xe5\x25\xcd\x5e\x21\xec\xf5\x06\xfc\x08\x57\x24\x9a\xd1\x7d\xb4\xb6\xd1\x3a\x3d\x58\x63\x5c\x51\x20\xb4\xc3\x6b\x4d\xa5\x98\x45\xcb\xb6\x99\x7e\x45\xce\xfa\xf9\xe1\x83\x3a\x9e\xe1\x23\x6e\x42\x31\x38\xab\x10\xda\x97\x9b\xbc\x91\xb0\x80\xab\x1a\x3b\x67\xc5\x2e\x0a\x4d\x8a\xc4\x0f\x1f\xac\x37\xab\xcb\x25\x38\x6b\xaa\x26\x04\x8e\x07\x0b\x91\x44\x86\x59\x05\x4b\x6d\x6d\x5b\x6d\x16\x45\x64\xf1\xd3\xdb\xc9\xe0\x9d\xb3\x6f\x07\x56\x29\x97\x49\x0a\x0b\x9d\x81\x0a\xa6\xa9\xc4\x9f\x91\x8c\x27\x37\x55\x92\x99\xef\x3a\x96\x67\x0d\x8b\xf7\x40\xc2\x46\x29\xae\x86\xab\x8b\xe0\x3a\x3e\x5f\x48\x75\xbe\x24\xea\x45\x91\x5c\x10\x65\xa5\x41\x28\x92\x7e\x39\xe5\x03\x1a\xd1\x9c\x2e\x24\xee\x2a\xb8\x25\xc5\x29\xb8\x9a\x25\xcc\xd5\x6d\x11\x9b\x8f\x73\x01\x94\x1f\xbe\x91\x30\x1c\x8a\xc6\xad\xd7\xd8\xc1\xdc\xcb\xe5\x48\x19\xfe\x81\xca\x1f\xb0\x3c\x32\x49\x6c\x70\x81\xaa\x7b\xe0\x30\xd3\xb3\x66\x12\x17\x9b\x5e\x4c\x35\x3a\x09\xf3\x85\x63\x68\xd0\xc3\x14\x62\x35\xdd\x5f\x8a\x43\x8b\x4b\x36\xe1\x2b\xb2\xa8\x69\xff\xd2\xf1\x00\x22\x03\x77\x7e\x19\xc2\x26\xb4\x99\xc6\x50\x95\xce\x2f\xc3\xd2\x98\xc3\xdf\x4e\x82\xef\x68\xc1\x00\x97\x39\x26\xa3\x4b\x47\x71\xf1\x18\x44\x2b\x09\x93\x39\xca\x95\xfa\xf5\xd6\x5a\xf0\xdb\x93\xf3\x2d\x9e\x0d\x89\x49\x69\xd1\xb4\x5e\x35\x9d\x5a\xe8\xbb\x67\xd5\xce\xaf\x68\x56\x65\x43\x79\xd8\x3a\x58\x33\x26\xd2\x43\xb5\x12\x39\x6c\x35\x5f\x7f\xf7\x12\xba\x50\xfb\xe1\xa6\xd5\x12\x8e\xde\x87\xad\xe6\xe9\x9b\xe7\x22\xb1\x6d\x24\x9e\xfd\x41\x24\x76\x74\xe2\x91\x4a\xdc\x36\x12\xdf\x9c\x89\xc4\x1d\x23\xf1\xf5\xbf\x10\x89\xbb\x3a\xb1\x77\xf8\xad\x48\xdc\xd3\x89\xcf\x8e\x24\x4a\x0f\x8c\xc4\x53\x91\xf6\x50\xa7\x3d\x97\xcd\x3c\xd2\x69\x2f\x8f\x45\x1a\xd1\x69\xbf\x97\xe5\x06\x3a\xed\x58\x96\xf3\x75\xda\xe1\x89\x48\x0b\x4c\x52\x88\x34\x6a\xa4\xbd\x10\x69\x43\x9d\xd6\x7f\x79\xc4\x13\xdb\x06\x1d\xfb\x87\x6d\x91\xd8\x36\x13\x3b\x22\xb1\x63\x26\x6e\x8b\xc4\x6d\x33\x71\x47\x24\x1a\x74\x7c\xdd\x13\x24\x6b\x1b\x74\x3c\xfd\xe3\x6b\x91\xb8\x67\x8e\xcd\x33\x91\x68\xd0\xf1\xb0\x27\x4b\x1a\x84\x3c\x7a\x25\xd2\x0c\x42\x9e\x7e\x27\x6b\x1b\x94\x3c\x3a\x3d\x14\x89\x26\x29\xc5\xd0\xb4\x0d\x52\x7e\x23\xd3\x0c\x52\x9e\xc8\x34\x83\x94\xdf\xc9\x34\x83\x94\xa7\x6f\x79\x5a\xc7\xa4\xa4\xe4\x89\x07\xac\xe0\x6d\xdd\x3b\x6c\x41\x57\xca\x52\xf3\xb0\x85\x57\x70\x8c\x9f\x6c\x7d\x5a\x47\xa3\xb2\x42\x8a\xed\xab\x7b\x15\x82\xbc\xfd\x2b\x12\x64\xd5\xb9\xe7\xbd\x93\xd3\xa3\xb3\x53\xb1\x04\x97\xc9\xfd\xa3\xe3\xde\x77\x2f\xcf\x2e\x45\xb6\x49\x1c\x51\xe1\xbc\xf6\xac\x76\x51\x86\x73\x5e\x6b\xd5\x2e\x54\x70\xf6\xda\x9f\x6a\xfb\x50\xfb\x61\xd6\xd9\xf5\xf7\x6a\x3c\x00\x7b\x8d\xc8\xa4\x47\x1d\x99\x34\xe0\x49\xad\x56\xeb\x91\x4c\xf2\x55\x92\x2f\x93\x02\x95\x14\xc8\x24\xaa\x92\x88\x4c\x1a\xca\xa4\x41\x4b\x26\x8d\x54\x52\x5b\x26\x8d\x05\x12\x3b\x9d\x1d\x99\x14\x2a\x58\x03\x99\xf4\x4e\xa2\xda\x7e\x28\x93\xde\xab\x24\x05\x3e\x92\x49\x1a\xd5\x89\x2a\xa5\xc0\xc7\x32\x69\x5b\x95\x4a\x44\xd2\xf6\x40\x61\x3f\x55\x49\x0a\x89\x3f\x2b\xf0\xaa\xc5\x54\x95\x52\xb0\x32\x95\xa4\x88\x93\x2b\x24\x54\xa9\x99\x4c\xd2\xdd\xbe\x52\x78\xa9\xa4\x6b\x55\x4a\x55\xbc\x51\x48\xa8\x41\x9b\x8b\xa4\xce\x9e\xaa\xf8\x17\x95\xb4\x2b\x93\x7e\x14\x54\xdd\xf6\x15\xf6\x1f\x54\x29\x95\x74\x2b\x69\x4f\xb6\x65\xd2\x4f\x6a\xd0\x1e\xd4\xd6\x6e\x5d\x8c\xd6\x33\x19\xed\x2b\x56\xfc\xaf\xff\x63\x45\xd1\x67\x58\x94\x3b\x62\x96\x73\x77\x5c\x80\x04\x1a\xbf\xc5\x9f\xff\xaf\xfc\x79\xce\x7e\x86\xef\xe4\xcf\x1f\x7e\xc0\xec\xff\x47\xfe\xbe\x60\x3f\x3f\x58\x7d\xff\xeb\xbf\xb1\xfa\x3d\xb4\xba\xfc\xd7\xff\x68\x75\xf7\xaf\xff\xbe\x02\xff\x43\x86\x21\x16\x2c\xe7\xed\x1a\xd8\x6b\x1c\x7f\xfe\xcf\x6a\xfa\xc1\x03\x81\xe7\xcf\xff\xb5\x99\x86\xb8\xfe\xfc\x9f\x9b\x49\xff\x80\x49\xff\xca\x4c\x42\x01\xfe\xf9\xdf\x9a\x49\xd8\xad\x9f\xff\xb5\x99\x84\x5d\xfb\xf9\x3f\x98\x49\xd8\xbf\x9f\xff\x27\x33\x09\xfb\xf8\xf3\x7f\xac\x49\xab\xaa\xdc\x97\x93\x65\x23\xf1\xf3\x7f\x67\x8d\xc4\x5f\xff\x9d\x3d\x12\x3f\xff\xa3\x35\x12\x7f\xfd\x47\x6b\x28\x54\x37\x04\xbe\xff\x97\x35\x16\x3f\xff\x1b\x7b\x2c\xfe\x4d\xc5\x58\xfc\x0b\x13\x47\x17\x52\x3f\xff\x0f\x0b\x91\xfa\xf9\x7f\x91\x3f\x39\xb9\xff\x37\xf9\x93\x93\xfa\xdf\x7f\x3c\xca\x3f\xff\xdf\x15\x28\x7f\x5b\x42\x59\x53\xc6\xe6\x96\x22\xa7\x08\x94\xff\x95\x8d\xd4\xbf\xb6\x91\xfa\x0f\x36\x52\x36\x4f\xff\xfc\xdf\x56\x20\xf5\xc7\xa5\x52\xf7\x8f\x77\x19\x6b\x4d\xa9\x3f\xd9\x94\xfa\xd1\x1e\x22\x8e\xf2\xff\xb1\x90\x8e\xff\x6b\x05\xca\x47\x0b\xc4\x70\xaf\x28\x86\xbf\x2d\x8b\x21\xa7\xf5\x7f\xe1\x90\xcc\xff\xe6\x63\x25\xf3\x5f\x97\x25\xf3\x7f\x2e\x4b\xe6\xff\xf9\xc9\x92\xf9\x2f\xef\x3a\x5a\xff\x7d\x61\xb4\xfe\x2b\x5b\x32\xff\x3f\x5b\x49\xfe\x3b\x7b\x78\xfe\x77\x7b\x78\xfe\xb1\x62\x3c\x9e\x2f\x18\x8f\x07\xee\xf1\xf8\x2f\xcb\xe3\xf1\x4f\x52\x53\x76\x4b\xe3\xa1\x39\xde\xa9\x94\xfe\xed\xc7\x29\xa5\x4b\x5b\x3e\x9c\x3a\xea\x4e\xea\x80\xeb\x28\xb7\x19\x2d\xa2\x27\x54\xd9\xcf\x3b\x9f\x64\x3f\x6f\xdd\xbf\xbf\x06\xf7\xe1\xc5\x64\x2a\x5c\x91\x20\x1f\xcb\x47\x3a\x61\x42\xf3\x71\x12\x34\x20\x1f\x13\xf9\x00\x22\xe5\x05\xe4\x8d\x0b\xc8\x13\x20\xf0\x3d\x1d\x9c\x26\xfe\x7b\x9a\x33\x4b\x9c\x92\x49\x93\x81\xfc\x2d\xc7\x01\x70\x6b\x7c\x8b\x04\x41\x12\x67\x5b\x1c\x88\xf8\x07\x4b\x45\xa1\x4f\xe3\x8c\xc2\xab\x17\x67\x6b\xac\x27\xe6\x22\x9a\x17\xe3\x0b\x69\xdc\xe1\x4b\xf5\xed\xf4\xad\xfb\x9c\x31\xee\xc3\x61\x32\x99\x24\xf1\xef\x4e\x81\xc6\x57\x61\x9a\xc4\xac\x1b\x22\x6f\x0b\xff\x2d\xed\xe6\x73\xb8\x9e\x83\x26\x5e\x8b\xbb\x48\xdd\x1a\xd1\x41\xe6\x53\x9a\x0c\x81\x2f\x29\xf0\x04\x5b\x22\x58\x2b\xe3\x72\xc2\x01\x35\xdf\x65\x10\x66\x40\xae\x48\x18\x91\x41\x44\x2d\x74\x38\x24\xef\xbc\xd6\x6c\x6e\x35\x9b\x5b\x48\x9f\xda\x45\x43\x60\x65\x36\x5f\x84\xfe\x36\x22\x61\x0c\xe2\x50\xbe\xb2\xbb\xa2\x77\xd7\x78\x5e\xdf\x94\x27\x17\x1c\x2e\x5b\xd5\x69\xfa\xfe\x41\x3b\x4f\xd6\xf4\x3a\xaa\x76\xb0\xb6\xc6\x77\xb2\x34\xc5\xd8\x2a\x68\x8d\xa1\x82\xb8\xdc\x87\x9e\xc9\x0c\xa3\xf0\x8a\xc6\x16\x4b\xe8\xd4\x0c\xf9\xa2\x89\xb5\x78\xd5\xdf\x4e\x49\x4a\x26\xf0\x23\x36\x7e\x8b\xd5\x60\x13\xce\x0a\x4c\x35\x90\x4c\x48\x83\x6a\x80\x0a\x96\x62\xc0\x5b\x91\x2f\x20\x8a\x1f\x8c\x49\x39\x47\x33\x38\xfe\x2c\x4d\x69\x9c\xab\xe6\x0a\xb0\x06\x49\x12\x51\x12\xdf\xc2\x20\x0c\xc2\x94\x3f\x01\x48\x22\xd8\x84\xef\xc7\x34\x1f\xd3\xd4\xe6\xff\x6c\x9c\xcc\xa2\x00\x30\xe8\x42\x40\x72\xc2\x61\x2d\xfd\x88\x2e\x09\xfc\x48\x06\xd7\x34\xaa\x46\x04\x5f\x3d\xa6\x41\x01\x87\x94\xc6\x01\x4d\xc3\x78\x04\xc9\x10\xc2\xd8\x4f\x26\xec\xfb\x6a\x48\x08\xb4\xc7\x64\x8a\xef\x93\xc6\x59\x4e\xe2\x3c\x9a\x43\x92\x02\x13\x75\x98\x90\x9b\x70\x32\x9b\x2c\x07\x34\x4c\xf9\xf2\x7e\xce\x90\x68\x1b\x38\x4d\x69\x0a\xed\xd6\x24\xe3\x9d\x62\x9c\x29\xd5\xb5\x18\x8a\xa2\x13\x6f\x43\x50\xa3\x61\x13\xbe\xa1\xba\x2f\xa5\xcd\x1e\x97\xae\x92\xd0\x42\x7a\x17\x6a\xea\x19\xb3\x5a\x1d\x9e\xf2\x55\xfe\xbe\x5d\x4c\x78\xbc\xd1\x74\xd2\x14\x63\xd1\x15\x68\x20\xbf\x8b\xac\xcb\x61\x34\xcb\xc6\xfc\xf1\x69\xa7\x87\x9b\x28\xc7\x5f\x6a\xe6\x55\x78\x2f\x39\x57\xf2\x9a\x6a\xaf\xb6\xaa\x80\x75\x2b\x0e\x00\xef\x25\xc8\xc0\x12\x55\x75\x58\xfe\x72\xc8\x58\xca\x02\x7f\x6b\xf5\x6f\x3a\xcb\xc6\x67\x89\xa3\x83\xa6\x87\xb3\xd0\xc1\x55\xbd\x33\x8f\xeb\xaa\x3a\xa8\xc2\x79\xf0\x72\xb7\x25\x5f\xd1\x6a\xca\x98\xf5\xac\x90\x1b\xa5\x11\x32\x62\x68\x18\xbb\xe2\x46\x6f\x47\x34\x7f\xa5\x1e\xb8\x76\x45\xfd\xe1\x3d\x2d\xf2\x9d\x9b\x5c\x1e\xbd\x6a\x5a\xcf\xa6\xbb\x3b\xc5\x59\xa3\x54\xd6\x81\x1d\x53\x25\x7d\xfe\x40\x7e\xd5\x38\x08\x1d\x88\xef\xcd\x1b\xf0\x24\x1c\x91\x5d\x72\x62\xac\x89\x17\xb4\x6b\x8d\x12\x21\xea\xa2\x2a\xf6\xdb\x14\x90\x02\x87\x27\xb1\xf2\x2c\xb7\xb1\x55\x8e\x14\x8b\x31\xf0\xa3\x24\x53\xed\x07\x94\x8d\xb3\x78\x62\xd4\xd0\x00\xd2\x4b\xb9\x12\x0a\x46\xbc\x58\x0d\x4a\x61\xde\xea\xd3\xea\x79\x6b\x98\x26\x93\xd2\x44\xf3\x31\x13\x17\xc7\x88\x06\x6e\x88\x77\x9b\xba\x10\x04\x0f\xb8\x94\x27\x02\xb2\x39\x8b\x2d\xd7\xd0\xf6\x34\x67\x2a\x62\x01\xad\x4a\x11\x2b\xf7\x5d\x1c\xf8\xe1\xb0\x7a\xe4\x8d\xd1\x32\xf4\xb1\x4c\x28\x2b\x62\x43\xdd\xee\xdb\xea\x96\xf1\x9f\xdd\xba\x62\x03\x97\x93\xec\x62\x8e\x36\x18\x52\x9e\xfc\xea\x96\x1d\xcc\x61\x19\x35\x45\x2b\xc1\x65\x85\x38\x98\xe3\xef\x96\xc8\x3f\x01\x4b\x04\x25\xb8\xf4\xfa\xbf\x25\x08\x2b\xda\x22\xd2\x11\xcc\x32\x6d\xc4\xf9\xec\x32\x10\xcb\xd4\x53\x89\x03\x17\xa8\x93\x5f\x5c\xa7\x14\x49\xea\xd0\x2d\xb6\x5c\x17\x28\xc7\xcb\x5b\x94\x33\x08\x64\x17\x3e\x58\xbb\x65\x4a\xc7\x5e\x06\xef\x7e\x8e\x65\xf0\x71\x68\x90\xdb\x4f\xa2\xd9\x24\xce\x80\xc4\x01\x06\x12\x90\xa2\x12\x84\x13\x1a\x67\x61\x12\x67\xc8\xee\x79\x06\xfd\x37\xaf\xd4\xd5\x81\x35\x40\x48\x5f\x7d\x05\xbd\xe9\x34\x4d\xc4\x32\x77\x13\x4e\x30\x14\xc1\x59\x3a\x8b\x7d\x82\x3e\x28\x0c\xd0\x55\x98\xf1\x8b\x02\xb6\x28\x73\x2f\x76\x09\x12\xc6\x14\x6f\x2a\x0f\xe6\x76\xa9\x34\xb9\x16\x59\xb2\xd1\x4d\x38\xe4\x38\x7f\x64\x43\xd7\x61\x90\x8f\x4b\xed\xf8\x63\x92\x12\x3f\xa7\x29\x6b\x82\x17\xf1\xd0\x0f\x01\x82\x30\x9b\x46\x64\xbe\x0f\x61\x8c\x97\x19\x49\x5e\xc6\x90\x51\x2f\x97\xc8\x30\x62\x71\x08\xd7\x61\x5e\xe0\xb9\xfb\x10\xcf\x26\x03\x9a\x32\x24\x05\xe9\xeb\xd5\x1b\x09\xc3\x30\x67\xff\x2f\xdd\x42\x18\x86\xf9\xe7\xdf\x3f\x18\x86\xf9\xaf\x6d\xf3\x80\xf5\xf3\x93\x77\x0e\x58\xbf\xee\xb6\x6d\xe0\xdc\x25\x90\x32\x3d\x4d\x93\x69\x92\xd1\x6f\x74\x68\x0f\xf7\xb5\x4d\xee\x75\xc3\xf4\x87\x14\x22\xce\x97\x47\xc5\x0b\x3a\x42\x0d\x18\xab\x18\xfc\x9b\x21\x61\xd5\x38\xcd\xe7\x78\xa3\x51\xf4\x65\x44\xf3\xc3\x64\x32\x9d\xe5\x34\xc0\x1c\x6f\x41\x5b\x7a\xbb\xd1\x4a\x7f\x4e\x45\xb0\x80\x29\xc1\x4b\x81\xb9\x57\x6e\x90\xb5\x23\x8f\x9c\x7f\x4f\xa2\x19\xf5\x6a\x5c\x3c\x6b\xf5\x2a\xb0\x18\x75\x02\xba\xdc\xa5\x7a\x42\x6e\xbc\x56\xe3\x8e\x2d\x5c\xcb\xb8\x15\x9b\xd0\x7e\x60\x34\x43\xef\x4e\x89\x72\xed\xb7\x24\x08\xc2\x78\xf4\x7b\x5c\x80\x29\xbc\xe8\x62\x8c\xa6\xbc\xd2\x66\x9e\x4c\x19\x5e\x1b\x77\xae\x38\xc0\x2b\x85\x16\xd1\x6c\x7c\x9e\x27\x1f\x83\x4f\x2a\x86\xe2\x23\x30\x8a\xe8\xd0\x1e\x44\x25\x9b\x26\x5f\x94\xb8\x65\xb3\x4c\x47\x07\x08\xc9\x03\x0e\xc6\x28\x02\x78\x9e\x18\x00\xfc\x24\xce\x49\xc8\x3d\xf5\x70\x18\xd3\xe4\xfa\x50\xa6\x19\xcf\xba\xcf\xd0\x25\xe2\x24\xb9\x76\x95\x6b\x0e\xc3\x34\x93\x8d\x62\xdc\x23\xbb\x01\x1a\xeb\x15\xb8\x86\xd4\x0c\xe3\x98\xa6\xcf\xcf\x5e\xbd\x34\x4a\xcb\x59\x82\x77\x5e\x67\x30\x9d\xe3\x28\x86\x3d\x34\x1b\x8b\x8c\x52\x32\x1a\x90\x5c\x5a\xe8\x96\x79\xf4\x4c\x31\xf1\x40\x17\x6a\x7c\xea\x91\x91\x38\x1d\x28\xb2\x42\xdf\xd7\x0e\x60\x6b\x4b\x68\x7a\x8d\x03\x3a\xe2\xf1\x48\x46\xcc\x50\x44\x59\x6a\x00\x89\xf2\x71\x32\x1b\x8d\x21\x89\x61\x92\xc4\x49\x36\x25\x3e\x57\xc2\x36\xf2\x36\x49\x46\x34\x7f\x96\xcc\x62\x36\x4c\x87\x51\x48\xe3\xfc\x84\xfa\xb9\x57\x6f\x22\xd0\x12\x76\xa5\x6e\x70\x04\x4f\xe8\x15\x4d\x73\xc0\x5c\x18\xd0\x61\x92\x52\xf0\x49\xe4\xcf\x22\x92\x33\x0c\xb9\x3e\x69\x40\x16\xc6\x3e\x4e\xed\x73\xbc\x8b\x42\xd3\xe6\x9a\x63\x0c\x56\x43\x90\xc3\x5c\x48\x3f\x8b\x13\xc4\x98\x88\x9b\xb8\x4a\x94\x8a\x22\xb1\x55\xc4\x46\x2c\xc8\xc4\xf5\xdc\x72\x3d\x4e\xd3\xad\x02\x91\xe5\xea\xd2\x88\x0f\xf5\x23\x0f\xef\xc4\x03\x44\xf1\x08\x4f\xec\x6f\xdb\x21\x51\x73\x90\xb4\x21\xe5\xac\x34\x2c\xba\xa1\x16\x02\x08\x18\x2d\x55\x4c\x64\xbc\x8a\xb1\x62\x95\x55\x0a\x9b\x25\x3c\x42\x95\xca\x15\x21\xad\xd4\x4f\x0c\x41\xa9\xe7\x31\x8e\x65\xd1\x8e\x5e\x34\x87\x56\x98\xd2\x25\x6c\xc7\x61\x66\xd8\xd2\xc5\x16\x8a\xf4\xa8\x80\xca\x6c\x83\x02\xa4\x15\xac\xf2\xbd\xcf\x62\x95\xcf\xa2\x28\xf3\x53\x4a\x63\x40\xeb\x0f\xc5\x56\xde\xb8\xa8\xb6\x10\x55\x2d\xe3\xab\xd3\x5e\x34\xcd\x45\x55\xf2\x0b\x58\x8d\x0a\xf6\xaf\xce\x78\xd4\xbd\xfe\x74\x1b\x52\xf7\xf2\x33\x98\x92\x6a\x65\x7c\x96\x8c\x46\x11\x75\x6c\xdb\xd5\x32\xa3\x49\x46\x74\xda\xbc\xcb\x76\x5d\xce\xe1\x32\x10\x60\xc0\xa8\xd8\xff\x30\x5a\xda\x94\x28\x19\x69\xa8\x4e\x90\x5b\x12\xb6\x8c\x19\x82\xc7\xef\x6a\x97\x76\xde\x78\xab\x8c\xaf\x4f\x79\xcd\xf2\x1e\x5c\x91\x13\x39\x81\x86\xb1\xa1\x76\x04\x7f\x18\x08\x14\xf7\xda\xa4\x3a\x1a\xc6\xea\x76\xb0\x34\x7b\xfd\x88\x64\xd9\xcb\x30\xc3\x30\xc1\xcc\x18\xc8\xbc\x9a\x86\xc4\xec\xa4\xa7\x50\xe3\x7b\x6e\x35\xd8\x87\x1a\x09\xa4\x97\xa9\xc1\xa1\xf7\xca\x58\x8a\xc6\x64\x55\xab\x8a\x5d\xc2\x80\x68\xec\x7f\x97\xf0\x3b\x1f\xc6\x17\x36\x6a\xd5\xba\x4c\xd3\x35\x2b\xd3\xb5\x8c\x6b\xd5\x70\x88\x6d\x88\xa2\x58\xac\xaa\xf4\x1e\x7c\x0e\xa5\x77\x36\x0e\x33\xa1\x43\x60\x9a\x26\x57\x61\x40\x33\x71\x20\x9f\xa1\x02\xe4\x7b\x4d\xcc\x2a\x20\x85\xe3\x78\xf1\x2b\x48\x9c\x07\xf3\x95\x0a\x53\x55\xd3\xdf\xfe\x7e\x42\xff\xf7\x13\xfa\xbf\x9f\xd0\xff\x27\xb3\x2f\xae\xf4\xa1\x94\xff\xde\xdf\x8f\xea\xff\x7e\x54\x8f\x9f\x5f\xef\x51\x3d\x53\x83\x01\x3f\x2f\xff\xdd\xe9\x9b\xd7\x4d\x5c\x59\xaa\x93\x76\x45\x0e\x0f\x0b\x9d\xb7\x2e\x18\xbb\xad\x67\x79\x90\xcc\xf2\x75\x28\xde\x21\x75\x9d\xf9\x3b\x4f\xfd\x11\x58\xfb\xc2\xbc\x7f\x57\x8e\xaa\x6d\x70\x9a\xa3\xfc\x82\x6e\xdf\xd1\x07\x00\xfb\x9d\xe1\x4b\x35\xe1\x70\xee\x9d\xd7\xb2\x3c\x08\x63\x11\xfd\xed\xa2\x5e\x77\xf1\x51\x46\xf3\xd3\xe2\xbb\x0f\x6c\xb9\xba\x6a\x0b\x34\xbf\x14\xf1\x97\xd9\x3f\xb8\x98\x15\x5f\xd9\x32\xb7\xd4\xe8\x2f\xea\x93\x60\x15\x55\x71\xa3\x2d\x3a\xd4\x97\xe1\x69\x79\x2e\x28\x05\xd9\xff\x2c\x2e\x0c\x2b\x82\xfb\xbb\x2f\x43\xb5\x2f\x43\x81\x84\x7f\x77\x6a\xf8\xbb\x53\xc3\x7f\x62\xc6\x5b\x69\x2d\xbc\xc0\x88\xfb\x38\xef\x86\x02\xc4\xbf\xbb\x39\xd0\x85\x6a\x67\xa1\xbf\x43\xa1\xe2\x27\x38\x3e\x3c\xfc\x15\xdd\x9f\x65\xb6\xd8\x37\x4c\x89\x85\xfe\x65\x1b\xba\xae\x56\xbd\xed\x1d\x51\x30\xcc\x5e\x63\xfc\x23\xa5\x5b\x63\x72\x15\x8e\x08\xc6\xf9\xab\x5c\x12\x88\xc8\x82\xac\xfe\x2c\xa3\x69\x6f\xc4\x58\xa7\x8b\x4f\x54\xe1\x7b\x88\x4f\xa1\x16\x27\x01\x6e\x59\x29\x70\x4d\x55\x92\x57\x9c\x46\x24\x1f\x26\xe9\x64\x69\x3d\x59\x50\x5f\x35\x09\xb3\xe3\x30\xa5\xc3\xe4\x06\xba\x70\xef\xde\x4f\x0a\xb0\x8a\x24\x5c\x13\xf9\xb5\xba\x59\xe9\xd5\xe9\x8b\xa3\xca\x1a\x2c\xb3\x86\x6f\x6b\xb9\xf3\xcf\xd2\x30\xa0\x71\x5e\x80\x48\x7c\xe8\x6a\x5a\xeb\x4d\xbc\xf3\xda\x2b\xe2\x87\x71\x9e\x64\xe3\x5a\x03\xd8\x8f\x17\x71\x4e\x23\xf1\xfd\xed\xdb\x43\xf1\x6d\xef\xe1\xb7\xb5\x8b\x86\xa2\x85\x05\xfc\xc5\x94\x04\xd0\x35\xe8\xc4\x86\x23\x7c\x4b\x82\x9a\x5d\x6a\x9c\x60\x04\xeb\x62\x39\x96\x5c\xb3\xbb\x2f\x83\x07\x56\xa0\x2c\xb2\x19\x6a\xdf\x87\x71\x7b\x4f\x7c\xd9\xee\x88\x2f\x87\x47\x95\xb8\xbe\x0c\xe3\xd9\x8d\x81\x84\xa6\x1b\xe6\xd4\xea\xf0\x04\xa3\x3a\xbb\xef\xd6\x3c\x13\x01\x0e\xdd\x57\x6b\x1e\xfd\x8a\x44\x4b\xe9\x15\x3c\xc3\x4f\xd2\x20\x3b\xa1\x11\xc9\xc3\x2b\x7a\x96\x88\xf3\x5b\x0f\x63\x75\x34\xa0\x10\xd8\x94\x07\x60\xe4\xae\x0e\x23\xfa\x07\xd7\xcb\x9f\x0b\x1c\x2b\x6e\xf0\xf9\x4e\x55\x5b\x87\x16\x9b\x5b\x19\xe2\x65\x1a\x11\x7f\x48\x3a\x14\x7d\xfd\xb5\xf2\x2d\xba\xd7\xed\xf2\x77\x10\x83\xc4\xc7\x20\x2c\xea\x4b\xc9\xcd\x03\xe0\x06\x36\xbb\xca\xa3\x2a\x19\x0e\x33\x9a\xbf\xa4\x43\xe3\x7d\xaf\x79\xb9\xc0\x59\x32\xd5\xf9\xb2\xd5\x2e\xd4\x78\xee\x5b\x3c\x5d\xaf\x41\x18\xab\xbc\xa7\x05\x00\xbc\x08\xec\x83\xd3\x33\xc4\xa4\x8b\x20\xd7\xf9\x4d\x03\xe6\x17\x07\x6b\xb7\x8a\x1d\xab\xc7\x06\xba\x0b\x06\xce\x35\xba\x72\x30\xad\x53\x7d\x30\x9e\xe0\xc1\x67\x6e\x0e\x93\x99\x2a\x84\xdf\xc2\xec\x14\x9f\x12\x0e\x13\xeb\xdc\xc0\x47\x98\x0b\x91\x70\x35\xa8\xce\x6c\x59\x0d\x5c\x3b\x73\x57\x15\x9f\x86\x91\xe7\xe9\xe4\x0d\xa6\x48\x55\xc3\xf0\xd4\xc4\x93\x9f\x80\xc3\x16\x74\x60\x1f\x5a\xf5\xba\x38\xe2\xb5\x72\xed\x76\xda\x76\x3b\x3a\xd5\xae\x39\xb6\x8f\x95\x0b\x28\x4e\xc2\xd8\x53\x6e\x35\x2a\xb7\x01\xed\xba\x26\x1c\x3e\xab\x55\xd1\xb4\xab\x7e\x5b\xd4\x97\xe4\x36\xea\xcb\xe8\xf7\x58\xd0\xc9\x12\x26\xf1\xed\x01\x3f\x21\xd7\xcf\xe6\x39\xfd\x84\x71\x5f\x3c\xd4\x1f\x07\xf2\xc0\x52\x01\x8a\x82\xb6\x02\x50\x84\xe1\xc9\x37\xb0\xd1\x85\xed\x0e\xff\x31\x37\x7f\x08\xfa\xfc\x08\x37\xf8\x30\xd3\x1c\x5f\x65\x2a\xd0\xc9\xa2\x03\xef\x80\x95\x54\xa5\xc4\x5f\x25\xb3\x8c\x56\x05\xdf\x6b\xfd\x8a\x74\x38\xa3\xda\x80\xa4\xb4\xc2\x32\x6a\x4b\xcb\xe8\x39\xae\xc7\x17\x07\xe6\xc3\x32\xa8\x68\x4b\x81\xf2\x58\x22\x70\xf5\xa8\x35\x22\x6b\xb7\x39\x16\x37\x26\x30\x9a\xf3\x69\x9e\xa4\x7c\x63\x2d\xa6\xd7\x3c\x3f\x0a\x07\x4d\x91\xdc\x7c\x45\x27\x49\x3a\xf7\x8a\x71\xe0\x05\x6a\xaa\x0a\x07\x29\xcf\x30\x9c\xc5\xb9\x67\x15\x1d\x66\x5e\x1d\xa3\xd5\xaf\xb3\xe5\xdc\x26\x8d\xfd\x24\x08\xe3\xd1\x7a\x03\xd6\x53\x72\xbd\xee\xac\x19\x50\x3f\x49\x49\x2e\x42\xce\x63\x6f\x0b\xc5\xc2\xc4\x7c\xed\xa1\x19\x26\x3c\xc4\x9f\x13\x1a\x2e\xc4\xa2\xe8\x5b\x3a\x1f\x24\x24\x0d\xec\x97\x03\xf8\xf7\xe7\x05\x03\x3f\x8c\x87\x49\xc5\x3e\xb2\xc1\xd4\xbe\x74\xbb\x95\x51\xe7\xd9\x2f\xe9\x9c\xa2\x63\xac\xdf\x5a\xa1\xb3\xdc\x0d\x26\xb3\x7c\x3a\xcb\x17\x6c\xfc\x19\xc1\xee\x44\x8f\x5d\x71\x84\x0b\x1d\x4f\xf8\x36\xe4\x77\x67\xc7\xed\x3d\xcf\xba\x82\x54\x08\x1c\xe6\x46\x2a\x1b\x27\xd7\xae\x7d\x58\xb1\x53\xd1\x80\x9c\xef\xf0\x96\x58\x71\xa2\x2a\x89\x6f\x07\x76\x2f\x78\x35\xd7\x23\x95\x16\xf2\xac\xfd\x37\x57\x34\x8d\xc8\xbc\xdc\x66\x79\x4b\xd5\xf9\xc0\xe1\x72\x80\x48\xc3\x3b\xd1\x85\x6f\xdf\xb8\x28\x63\x76\x67\x6b\x8b\x2d\x3b\x53\x0a\x61\x06\x71\x02\xe3\x30\xa0\xb2\xed\x3a\x5b\xf3\x01\xc3\x86\x6f\x58\x90\x09\x95\x94\xe2\x2e\xd2\x2d\xc8\xa8\xef\x62\x65\xbb\x0f\x26\xb1\x1b\xd0\xb2\x03\xf2\x95\x46\x93\xe6\xdc\xe0\x5e\xf2\xf2\x87\xdd\xa2\x5d\xcb\x93\x6f\x80\x2c\xe7\x1d\x2e\xfc\x34\xc5\x20\x50\x56\x6b\xa8\x1f\x8b\x21\x00\x2f\x59\x93\xd6\x6b\xdc\xec\x63\x86\xb8\xe5\xd5\x1c\x11\xfd\xdf\xd3\xd2\x33\x92\x97\x95\x5a\x08\x43\xe3\x22\xa8\xf3\xf7\x74\x6e\xed\xcc\xaf\xd2\xad\x24\x7e\x11\x17\x05\xd5\x27\xfc\xcd\xe2\x12\x01\xc3\xa4\x99\xc4\xbf\x3f\xfb\x96\xce\xb3\x3c\x4d\xde\xd3\x85\xe2\xcd\x3e\x12\x52\x49\x56\x4b\xda\x0f\xf7\xe7\xf9\x2b\xf5\x9f\x0a\x75\x49\x7f\x4f\xca\x0f\x45\xbb\x3a\x5c\x3d\x86\x9a\x14\x72\xba\x70\x81\x34\x95\xa7\x7b\x34\xe5\xc5\x8c\xae\xd4\xbb\x07\x8e\x42\xc2\x3f\x51\x3f\x12\x52\x22\x82\xdd\xd2\xdd\xa8\x11\x50\xe2\xe7\xe1\x15\xc9\xab\xa5\xbe\x6a\xe0\xcd\x73\xc3\x8a\x51\x74\x17\x71\x90\xcd\x51\x10\x11\x9d\xc5\x55\x53\x5d\x95\x1e\xab\x7a\x7d\x05\xf4\xa3\x21\x86\xaa\xbb\xdb\xf4\xea\x6e\x13\x0f\x54\x16\xb7\xb9\x52\x5f\xc4\x24\x8c\xe0\x8b\xa1\x27\xa5\x21\x25\x32\x8b\xb6\xe1\xaf\x29\x32\x33\xc6\x90\x4c\xe2\x98\x2f\xa1\x8e\x89\x9f\x27\xe8\xee\xb9\xc8\x06\x2c\x95\xf7\x66\x69\xd4\x00\xa4\xb1\xf3\xd5\xa3\x59\x1a\x41\x17\x66\x69\x91\x69\x54\x0d\xe8\xea\xda\x65\xe3\xa8\xd4\x9e\x39\x9c\x29\x5d\x24\x0d\x72\x87\x81\x5e\x1b\x50\x3c\x89\x54\xa3\x80\x86\x4b\x01\x0b\x08\x25\x1c\x8a\x63\xee\x22\xa2\xa3\x92\x4d\xef\x95\x09\xbd\x8c\xc2\xc2\xbc\x67\xfd\x54\xdb\xd3\xc5\x3a\x26\x61\x35\x64\x53\xd7\x4e\x0b\xae\x6b\x05\x6b\x22\x4e\x72\x74\xfc\xca\x93\x20\x41\x5f\xb0\x6b\x3a\xd0\x87\x37\x36\xd9\x9c\x0d\xac\x20\x7b\x68\xdc\x63\x39\xcf\x35\x1a\x4e\xb0\x78\x4c\xb3\x68\x12\xd2\x90\x1d\x77\xd7\x97\x00\x0f\xb3\x37\x8b\xc8\xa2\x8c\x62\x04\x9f\x52\x12\xcc\x4f\x73\xe4\xc8\xae\x1e\x89\xe6\xe1\x9b\xd7\xaf\x8f\x0e\xcf\x5e\xbc\xfe\xc6\x8c\xc6\x6f\xa3\x56\x55\xf7\xcd\xdb\xa3\xd7\xee\x48\xc0\xc6\xdb\xb0\x60\x99\xa1\xf6\x73\x38\x46\x3f\xdd\xc3\x1e\x97\x7a\x58\x69\x51\x20\xa6\x49\x5c\xe2\x14\x5c\xea\x57\xce\xfb\x4b\x66\xb9\x0a\xac\x4e\xa8\x4f\xc3\xab\xe5\x33\xbf\x89\xd8\xc4\xe9\xb5\xb1\x08\x37\xbe\x97\xb8\x82\x65\x52\x81\xe5\x61\x89\xa7\x97\xe1\x58\x96\x82\x4f\xa2\x5e\x49\x41\x55\x6b\x26\x4b\x25\x95\xe7\xa5\x5f\x53\x6c\x63\xe3\x56\x81\x9a\x22\xce\xd7\xaf\xe9\x20\xcf\xe7\xeb\x46\xa8\xd3\x49\x36\x42\x83\xf8\xbb\xf8\x7d\x9c\x5c\xa3\x83\x6f\xab\x56\xce\x66\xe9\x6d\x3b\xfd\x2d\x37\x7a\x6a\x1d\x3b\x99\x1b\x39\xd2\xe4\x61\x05\xb6\xed\x02\xa2\xa5\x37\x72\xc1\x5c\x6c\x4f\x67\x14\x1b\x4c\x9c\x0d\x9e\x16\x97\x45\xc5\x06\x4f\x8b\x2b\x99\xda\x4e\xa9\xc0\x09\xf5\xf9\xc0\xb2\xec\xdd\x1a\x9f\x67\xbe\xa7\x83\xb3\xb3\x3f\x2e\x99\x63\x78\x21\xe1\xac\xe0\x17\x27\x2c\x1e\xee\xbb\x01\x64\x96\x8f\xcf\x92\xf7\x34\x76\x1a\x4b\xe2\x8a\x57\x61\x76\x2f\x01\xe3\x57\x7a\x8a\x33\xa2\x55\x47\x04\x62\x67\xff\x14\x73\x24\x06\x2c\x5b\x7e\x3f\x28\x1a\x8b\x9a\x0a\x9b\xed\xb2\x21\xc1\xfb\xba\xea\x8c\x57\xbd\xa2\xe0\xfb\x9d\x86\x54\xb9\xfb\x2b\x8c\x13\x53\x80\xf1\x1c\x30\x8c\x47\xe8\x6e\x67\x27\x2b\xe4\x85\xdb\x9a\x9d\x8b\xcf\xa2\x57\xa2\x0a\xfc\xde\x9c\xd4\x4f\x5c\xa3\x3b\x46\xdd\xfc\xe0\x4b\x5e\x34\x9d\xbc\xe0\x5b\x4d\x97\xa6\x41\x3d\x4c\x3c\xc7\xf3\x0a\x46\x0b\x2e\xef\xac\x72\x13\xec\xd3\x93\xc1\xef\xf7\x45\x13\xc8\x50\xee\xa2\x72\x58\x55\x51\x99\x50\x2e\x7f\x5b\x77\x20\xc8\xc9\xc8\xe4\xf7\xb9\xe3\xd9\x54\x3f\x89\x26\xb3\xaa\x25\x5e\x55\x1f\xab\x35\xc3\x06\xac\xd4\x7f\x0e\x54\xec\xd3\x49\x14\x2a\x4b\xea\x7b\x65\xce\x22\xce\x5e\xdf\x96\x93\x8c\xc1\x94\x0b\x68\xcf\x22\x8c\xf3\xf1\x0c\x23\xdf\x93\x9c\xa1\x77\x15\x55\x4a\x61\xdd\xea\x6c\x13\x95\xae\xc1\x80\x21\xfb\xfd\x11\x34\xe7\xca\x7b\x03\x78\x7d\x47\xdf\x1d\x69\x4a\xbe\xa0\xcb\xc4\x46\xbe\x44\xb9\x44\x1c\x96\x20\xc2\x66\x0b\x57\xfb\x0d\xc0\xa7\xad\xda\xad\x56\xab\x90\x5d\x44\xcd\x92\x4f\x61\xdb\x78\x8b\x37\x4e\x40\xdd\x32\x9f\x47\x09\x9e\x8d\xb3\x52\xfc\x99\x0e\xcf\xf5\x00\x4a\x76\x1d\xe6\xfe\x98\x03\x3b\x6f\x95\x1e\x90\x50\xa8\x90\x8c\x42\x69\xca\xda\xaf\xe4\x4a\x73\x68\xb1\xa8\x17\x50\x3f\x09\xe8\x77\x27\x2f\x0e\x93\xc9\x34\x89\x69\x9c\x7b\xc5\xc7\x44\x26\x64\x2a\x9e\x12\xc9\x93\x81\x27\xba\x50\x6f\x98\x02\x59\x85\x9f\xfc\x08\xd3\xa6\xf6\xcf\x6b\xb0\x01\x5e\xad\xd5\x62\xff\xfa\x4d\x7f\x4c\xd2\xc3\x24\xa0\xbd\xdc\x6b\xd5\x9b\x79\xc2\x37\x30\xbc\xf6\x5e\xbd\x2e\x68\xb3\xd9\x71\x10\x47\x0f\x4c\xf3\x5d\x12\xc6\x5e\xad\x56\x77\x89\x93\xfc\x14\x9e\x6b\x5b\x44\x3f\x36\xb3\x57\x53\xef\x0e\x80\x6c\x5b\x60\xa5\x01\x29\xec\x8f\x4a\x3a\x7f\x96\x7e\xd9\x96\x47\x35\x3a\xc8\xa3\x96\x89\x62\xb8\x44\x2f\xc7\xc8\xee\x8d\xd1\xa2\x67\x00\xfd\x6c\x3d\x52\xa6\xd2\xe2\xfe\x90\x59\x9e\x98\x56\xd5\x9d\x7a\xe4\x27\x71\x96\x44\xb4\x19\x25\x23\x6f\xfd\x28\x26\x83\x88\x19\x9b\x6a\x86\xdf\x87\x75\xd8\x28\xb4\xb0\x01\xeb\x90\xb1\x5f\x41\xb6\xbe\x94\x56\xa6\xa1\x63\x81\xb9\x33\x91\x6e\x57\xd7\x59\xb8\xd2\x59\xa2\x45\xf1\x46\x82\xd2\xb8\x4a\x13\x2f\x9e\x2e\xf4\xae\xa6\xcb\xea\x30\xb9\x43\x9f\x07\x79\xeb\xc6\xb2\x06\x31\x0b\xd6\xf5\x09\x84\xf9\x61\x2b\xf4\x22\xd5\x1c\x07\x3f\xf2\x53\x34\xc3\xf8\x24\x22\xaf\x12\x2c\x9f\x43\x6c\xb2\x29\xc3\x6a\x15\xe3\x70\x41\xcf\x71\xa7\x74\x51\x59\xb4\x0f\xab\x0a\xdc\x36\x4a\x7c\xe3\x9c\xb2\xe0\x4e\x0c\xc1\x4c\x4c\xf7\x19\x41\x09\x19\xb9\x21\x51\x6d\xbc\x9a\x37\x59\x8a\x43\x50\x8d\x83\xb5\x51\x04\x8b\x17\xc8\xdc\xf8\x2f\x2e\x8e\xd5\x1a\x49\x66\x97\x97\xc5\xbf\xa6\x97\x42\x96\x1c\xe5\xb3\x01\xe5\x27\xea\x09\x09\x7a\x41\x90\xc4\xde\xfa\x30\xcc\xd7\x45\xcd\x3f\xac\x70\xc0\xff\x07\xe7\x01\xff\x92\xd3\x15\xe7\xd1\xbf\xeb\xdc\xbe\xb4\x83\xaf\x37\x6c\x58\xe5\x66\x72\x1d\xd3\xb4\x2f\x5d\xb5\xb8\x88\x48\x47\xa1\xf5\x20\xbc\x2a\x1d\xd7\x8b\xfa\xfc\xde\xee\x6b\x32\x61\x90\xd6\xf1\xe6\xe4\x66\xc2\x0f\x29\xd7\xdd\x35\xb4\x78\x77\x5a\xad\x56\x69\x21\xc9\x6c\xe1\x97\xfa\x4d\xb2\x6a\xce\x35\x84\x74\x18\x96\x44\xd4\x54\x5e\xe2\x89\x7b\xfe\x74\xbd\xbb\xa0\xa9\xe0\x84\x55\x63\x40\xe0\x3b\xbf\x1b\xb0\x7e\xc3\xa6\x8f\x72\x3e\x1a\xe6\x52\xd4\xed\x6e\x2e\x38\xcb\x93\x37\x54\xd6\x99\x40\xaf\x37\x96\x76\xd5\xa6\x4d\xb1\x1f\xe2\x72\x69\xe9\xe6\xc9\x3a\xaf\x56\x84\x5f\x05\xd3\x52\x3c\xb7\xce\x63\x1f\xd4\x3f\x8c\x69\x1a\x28\x1e\x0e\xa7\x8a\xa2\xd7\xf4\xc7\x38\x55\x28\xc2\x5b\x6e\x15\x8a\xdc\x4e\x85\x53\x6c\x77\x05\xdf\x0a\x0d\x55\xdf\xdb\x72\x6d\x51\x17\x41\x7f\x8c\x87\xc4\x12\x59\x96\x12\x95\xd3\x9b\xfc\x90\x47\x60\x71\xf9\x51\x28\xb9\x6f\xe2\x6d\x83\x00\xa3\xf8\x58\x0e\x01\xc6\xa8\xa9\x5d\x72\x83\x2b\x4b\x6f\x3c\xda\xb7\x19\x4b\xa5\x5d\x1b\xdd\xab\x38\x73\x98\x40\xee\x32\x99\x5f\xea\x1e\xf2\x43\x48\xde\xc3\xcb\x8a\x2e\x02\x9f\x67\xab\xbc\x43\x16\x8e\xe2\x6a\xfe\x1c\x45\x22\x0a\x47\x51\xee\xcd\xde\xd5\x03\xe2\xa4\x42\xa9\x1f\x15\xdd\xb0\xb0\x2d\x71\xdb\x1d\x3c\x38\x94\xbf\x6d\x2e\xca\xe2\xbf\xab\xb0\xf4\x8a\x8e\x1b\x8b\x45\xee\x2e\x6e\x12\x4a\x03\x32\xa9\xb3\x34\xd4\x9d\xbc\x19\x56\x91\xd7\x95\xdd\x19\x6c\xc4\x1c\xca\x73\x29\x6a\x42\x6b\xe1\xd7\xa2\xab\xc1\x2a\xa8\xae\xea\x6b\xa0\xae\xb4\x71\xf2\xb9\x75\x35\xcb\x16\x9d\x70\x16\x18\x44\xb3\xb4\x70\xe0\x57\x16\x92\xcf\xe1\x2c\x80\x4a\x66\x49\x4b\x8b\x8f\x29\xc5\x0c\xe7\xba\x42\xa7\xc7\xc9\x31\xab\x55\x38\x1a\x66\x79\x9a\xcc\xdd\xbe\x05\x7f\x70\xf9\x16\x48\x1b\xee\x0f\x6e\xdf\x82\x4f\x7b\x96\xc3\x36\x56\xb7\xb6\x78\x38\x90\x61\x18\x51\xb8\x26\x19\x8c\x58\x3f\x48\x4e\x03\x18\xcc\x21\x0a\x07\x41\x92\x6f\x0d\xc2\x78\xcb\x4f\x62\x9f\xe4\xcd\x6c\xdc\x64\x75\x5e\xe4\x30\x26\x19\x0c\x30\xa8\x0d\x49\xdf\xd3\x00\x52\x4a\x82\xcd\x24\x8e\xe6\x78\x6c\x3c\x4f\x66\x29\x64\x64\x48\xf3\x79\x13\xe0\x84\xe4\x63\x9a\xae\xa1\xb7\x1a\x89\x81\x06\x61\x0e\x61\x0e\xfc\x56\x57\x34\x6f\xc0\x34\xa2\x6c\x15\x3f\x49\x82\x70\x38\x87\x24\xa6\x22\x9e\x28\x43\x15\x7d\x72\x59\x5d\x86\x63\xd6\x6c\x32\x04\xd8\x4f\x81\xdc\xbb\x6c\x2b\x0a\x07\xcd\x77\x59\x29\xed\x72\x9a\x44\xf3\x61\x18\x45\xce\x4c\x3f\x89\x92\x34\x73\x66\x0d\x9d\xa9\x42\x91\x5e\x4e\x48\x4c\x46\x78\xb1\xc3\xd1\xa2\xd2\x6a\x0b\x8b\xa5\x94\xf7\xca\x99\x99\x09\x2f\xd9\x05\x79\x97\xfe\x38\x4d\x26\x8b\x8b\x44\x89\x4f\xdc\x3d\x97\x25\x26\xe8\x86\xeb\x2c\x92\xd3\x2c\x5f\xd8\x83\x59\x3e\x7c\x68\x67\xe4\xe3\x30\x0d\x2e\xa7\x24\xcd\xe7\x5b\xd7\x3e\xfa\xde\x63\xc9\x6b\x5f\x94\x43\x77\x5e\x56\x9f\xfb\xf5\xba\x12\x2f\x87\x29\x51\xdd\x2a\x64\xbd\x17\x3e\x3a\x8b\x73\x2f\x07\x21\xc6\xa1\xcb\x96\x14\x7b\x4f\xe7\x13\x32\x5d\x5e\x68\x4a\xf2\x9c\xa6\xb1\xbb\x60\x32\x65\xa2\x57\xd1\x14\xee\x23\xa5\x8b\xf2\x2e\xf1\xf2\x55\x38\x0c\x69\x5a\x05\xa3\x8a\x9d\x8a\xe5\x66\x83\x6c\x36\x70\xe7\xf1\x30\x43\x95\x79\x49\x14\x31\x85\xe1\xce\x57\xb7\x14\x17\xe6\x5e\x86\x49\x55\x81\x9b\xfc\x92\xe4\x79\x1a\x0e\x66\x39\xad\xe8\xe3\x55\x45\xdb\x57\xf9\xa5\x8a\xd7\x77\x59\x39\x56\x5c\xdd\xf1\xbc\x35\x96\x7f\xfa\xe6\xbb\x93\xc3\x23\x38\x7e\xf1\xf2\x68\xdf\xa9\x22\x0e\x93\xe9\x1c\x03\x76\xe2\xe6\x74\xa7\xd5\xee\xe0\xcd\xce\x43\x26\x51\xe1\x6c\x02\x6f\x4e\xf1\x90\x8a\xe9\x06\xe8\x45\x11\x60\xd9\x0c\xd8\xd4\x94\x5e\xd1\x00\xd5\xdf\x77\x99\x50\x50\x61\x26\xf4\x13\xf8\xcc\x44\x0b\x33\x18\xb1\x25\x69\xcc\xd5\x27\x81\x67\xa7\xfd\x4d\x1e\x72\x51\x86\x3a\xc2\x07\x8f\x7c\x12\xc3\x80\xeb\xb4\x64\x16\x07\x10\xc6\xe8\xa3\xfb\xf2\xc5\xe1\xd1\xeb\xd3\x23\x54\x74\xcd\xb5\xb5\xb5\x35\x23\x04\x51\x14\x0e\xe0\x9e\x7d\x75\x71\x8d\xcd\x32\x69\x72\x8d\x2b\xef\xa3\x34\x4d\x52\xaf\xf6\x4d\x94\x0c\x48\x04\xeb\x51\x38\x58\x87\x04\x37\x22\x80\x44\xe8\x77\x02\xf4\x26\xcc\xf2\xac\x59\xab\x1f\xac\xe1\x56\x01\x03\x29\xa2\xfb\x88\xc8\x50\xaf\xc8\x94\xf5\x6b\x3d\xa0\xcc\xdc\xa7\xb1\x3f\x5f\x87\x3c\x81\xf3\x75\xde\xc9\xf5\x06\x34\x9b\xcd\x0b\x19\xea\xe9\x88\xf8\x63\xd0\x45\x31\xe8\x91\x6c\x33\x26\x13\x7c\xb7\xfc\x3d\x45\x5c\x9a\xc3\x6c\xbd\x01\x12\x0c\x2b\xc9\xfa\x3b\x4b\x23\xa4\x07\x03\xc6\xe1\x64\x90\x70\x52\x70\x30\x4d\x8c\x0a\xc5\xea\xa7\xb3\x98\x99\xdd\x7d\xd9\x5a\x48\xb3\xcb\x02\xf2\x6c\x12\x06\x0c\x5a\xc6\xa7\xc4\x8c\xd3\x3a\xa6\x3c\x8a\xd0\x80\x42\x18\x5f\x25\x6c\xaa\x0a\x78\x50\xce\x28\x1c\xa4\x24\x9d\x43\x18\x87\x79\x48\xa2\xf0\x2f\x04\x37\x9c\xcc\xde\xc9\x0b\x5d\x62\x80\x58\xc9\x43\x61\x80\x65\x97\x40\xd2\x94\x60\xb7\xc3\x3c\xa3\xd1\x10\x08\xe4\xd7\xc9\xa6\xac\x83\xb9\x18\x66\x5a\x5e\xd4\x6a\x71\x12\x65\xe3\x04\x23\x71\x22\x12\x01\xcd\xfc\x34\x1c\xa0\xcf\x15\xeb\xf7\x75\xcc\xe3\x54\xcb\xe6\x20\x4d\x66\x79\x18\xd3\x06\xcc\x32\x3a\x9c\x45\x0c\x1e\x9b\x60\x03\x3a\x98\x8d\x46\x61\x3c\x6a\x82\x82\xdf\x96\x84\x95\x46\xa2\xa2\x85\x26\x64\xa1\x0b\xfc\x41\x74\x49\xc2\x13\xea\xe3\x05\x19\x02\x82\xde\xc6\xf0\x4a\xba\xa0\xb9\xc0\x19\x58\xa0\x04\xd7\x63\x1a\xb3\x19\x1f\xae\x49\x8c\x77\xf6\xe9\xcd\x34\xa5\x99\x80\xb3\x59\x00\x04\x7c\xc0\xfd\x64\x32\x65\x46\x07\xcb\x6d\x02\xb3\x28\xd0\x87\x9d\xd1\x3a\x67\x25\xe5\xa0\x11\x0c\x96\xb6\x39\x8c\x68\x30\xa2\x81\x1a\xb4\x6c\x9e\xe5\x74\x02\x49\xaa\x99\x07\x81\xe7\x29\xf1\xdf\xd3\x14\x21\xd6\x32\x78\x37\xcb\x72\xe1\x22\x9f\x27\x30\x21\xef\x29\x33\x3c\xa6\x49\x96\x85\x83\x88\xf2\xdb\xdb\x83\x19\xd2\x5e\x00\xca\xd0\x3b\x9e\xad\x36\xd3\x59\x1c\x63\x10\xb4\x28\xe2\x54\xe5\x11\x00\x91\x0a\x6f\x34\x9b\x67\x40\x52\x0a\xd9\x94\xfa\x4c\x95\x07\x40\x32\x31\xb6\x59\x13\xe0\x38\x49\x81\xde\x90\xc9\x34\xa2\xcc\x72\xe1\x95\xd9\x07\x99\x3a\x0f\xe8\xd4\xab\xb1\xaf\xdc\x1a\xa9\x35\x00\x7f\xe9\xc5\xd1\x2b\xae\xf6\x31\x32\x5d\xb9\x61\xe4\x6d\x46\xb3\x01\x85\x34\x49\x84\xd5\xc6\x40\xd4\x9a\x00\x7f\x4c\x66\x30\x21\x73\x36\x4a\x5c\x55\x61\x6f\xfd\x88\xa1\x4b\x0a\x64\x4b\x62\x20\xf1\xdc\x10\x3b\x3e\xd4\x14\x7c\x0c\xe8\x0a\xd3\x34\x19\xa5\x64\x82\xf0\x18\x77\x21\xfe\x34\xce\x66\x29\x3d\x29\x8b\xa6\x57\x07\xc2\x38\x9c\xa4\xf9\x6c\x0a\x21\xc6\xc6\x4c\xd2\x80\xa6\xc8\x1c\x58\x4b\xbc\xfc\xc6\x14\x6c\x91\xd5\x42\x9a\xc1\x98\x5c\x51\x61\x5e\x52\x85\x8f\xbc\x9d\xcf\xc9\x7b\x0b\x57\x24\xbd\x44\x6f\x92\x37\xcc\x60\x4c\x61\x92\xa4\x52\x73\x64\xee\x01\xd1\xfa\x84\x91\xde\xb0\xff\x3d\x09\x4b\x47\x8c\xe4\xca\x0a\xef\xca\xe7\xe9\x5c\x06\xf7\x28\x28\x5c\x11\xb1\xcd\x27\x78\x26\x4b\x6f\xcc\xeb\x72\x59\x4e\xfc\xf7\x78\x64\x8a\x01\x5f\x9b\xf8\xbb\x99\x4d\xa3\x30\xf7\x6a\x3f\x88\x68\x83\xe8\x75\xf9\x22\x86\x53\x32\x24\x69\xd8\x10\xf1\x21\xb2\x59\x84\x51\x79\x0d\x10\xd7\x61\x14\x01\xda\xd7\x48\x9b\x8e\xd4\x4d\xfc\x15\x01\xe4\x5f\x0e\x8c\x19\x40\x57\x61\x30\x23\x91\xec\x36\x32\xe8\x30\x49\x27\xcc\x98\x09\x44\x5c\x5f\x1a\xe7\xd1\x9c\x07\xf7\xc5\x28\x22\xaa\xa5\x66\x44\xe3\x51\x3e\x86\x27\x5d\xd8\x36\xa3\x8a\xe0\x34\xd7\x35\x50\x3a\xef\x5c\x34\x53\x3a\x8d\x88\x4f\xbd\xad\x7f\xf8\x21\xbb\x4f\xf2\x1f\xb2\x8d\xad\x06\xd4\x64\xd7\x0a\x81\x8b\x5c\x30\xda\x05\x18\x23\x3e\x81\x31\x59\xfb\xad\x05\x6a\x4d\x04\x27\x61\xca\xcf\xc3\x4b\xfe\xd0\x85\xd6\x01\x84\xf0\x18\x88\x74\x40\x11\xb8\x1f\x40\xb8\xb1\x61\x0e\xc5\x94\x60\x50\x65\x55\xee\x3c\x14\xd7\x0a\x59\xd7\x31\x93\x47\xd2\xf0\xd9\x54\x8b\x88\xe9\x9e\x2b\x76\x69\xe2\xd3\x04\x5e\x14\x0e\x1a\x08\xd0\xdd\x49\x3c\x58\x44\x47\x28\xbe\x40\x74\x4c\x5c\xe7\xac\xf6\x85\x5c\x2b\x62\xb4\x4b\x92\xce\xeb\x6a\xed\xb8\x52\x75\xa1\xba\x55\x0d\x7e\x39\x8d\x93\xd8\xa2\x99\x31\x45\x1e\xa1\xe8\x65\x4b\x64\x8f\x71\xcb\x84\xe6\x0d\x8c\x29\x12\x03\xbd\xf1\x29\x1a\xba\x7c\x76\x49\x93\x6b\x3d\x47\x5e\xd1\x74\x0e\xb3\x78\x42\x73\xc7\x8c\xc1\x59\x76\x40\x21\x4a\x46\x23\x1d\xca\xef\x77\xa7\xea\xec\x14\xe0\xc5\x50\x4c\x07\x6c\x01\x98\xe3\xca\xcf\xb6\x28\x38\x70\x54\x5f\x08\x2e\x25\x61\x46\x2d\xb4\xb4\x50\x57\xea\xa3\x4b\x53\xd2\xb5\x84\x4f\x49\x96\xd1\x80\x91\x1a\x9d\x6c\x4d\xe6\x12\x3c\x01\x55\xb6\x87\x25\xe7\x48\x73\x34\x3f\xba\x95\x15\xcc\x31\x67\x95\xb8\x02\xef\x62\x43\x52\x27\x70\xd3\x4c\xeb\x04\xa2\x76\xd8\x78\x9c\xec\x9b\x1c\x6a\x7c\x6b\xa2\x26\x67\x7a\x21\x2e\x42\x6f\x03\xaf\x75\x9d\xa4\xef\x69\x0a\x61\x5e\xcb\x24\x34\xa6\xb3\x69\x00\x35\x66\xa7\xd4\x9a\x0a\x8b\x64\xf0\x0e\xba\x20\xc2\x45\xc2\x87\x0f\x78\x8f\x5e\x70\x8f\x4b\xd0\x10\x6b\x97\x90\x09\x36\xf6\xb0\xc0\x79\x78\xc1\x68\x97\x0c\xde\xd5\xcd\x5d\x15\x39\xea\xd7\x24\x8d\xbd\xda\xab\x30\xcb\x98\x8a\x5b\xaf\x61\xd8\xfc\x7c\x0c\x1b\x50\x43\xd3\x90\xcd\x6a\x38\x93\xd5\x1a\x06\x6d\x8d\xbd\x15\x35\x6e\x86\xf7\x33\x14\xcf\xbf\x45\x24\x23\x10\x7d\x4c\x06\xef\xce\x25\x72\x17\x05\x95\x82\xa8\x73\xa0\x75\xa7\x96\xaf\x1d\x93\x90\x91\xcf\xc1\xe3\xfe\x98\xfa\xef\xd9\xb8\xdd\x9a\x66\xd4\x28\xcc\x72\x8a\xd2\x63\x1b\x97\x96\x41\x26\xa7\xd8\x8a\x22\x5c\x10\xa5\xcd\x1a\xc6\x90\x22\xd8\x94\x97\xe2\xd3\x29\xb3\xbc\x50\x7a\x84\x65\xe7\xd5\xd1\x1c\xe5\x75\x98\x65\xc8\x8c\x58\xb5\xc7\xc5\x05\x48\xb8\x5c\x13\x60\xe4\x8f\x28\xe0\xa4\x4a\x73\x9a\x36\x78\x48\x1b\x06\x0f\xed\x54\x55\xcf\xb6\x9e\xd1\xda\x0b\x73\x34\xe0\x22\x9a\x53\x34\x7f\x19\x94\xdc\xb4\x5b\xcb\x06\x75\x71\xf6\x66\xa3\x01\x3d\x61\x0d\x73\x33\x78\x9a\x33\xcc\x30\xc3\x61\x02\x4b\x73\x73\xc8\x8d\x3e\xc0\x38\x55\xd2\x0a\x36\x5b\x50\xa2\x2e\xbf\xd4\x6f\xb5\x49\xbc\x80\xe2\xac\xa3\xa9\x18\x3b\x0e\x50\x9e\x18\xc9\x12\xb7\xdc\x26\x92\xb0\x14\xe9\x0c\xc3\x42\xd4\x7f\x11\x5b\xc1\xcf\x3d\xbe\x20\xb2\xb7\x81\xcb\xf6\x38\x57\xe2\xe7\x76\x61\x7e\x81\x50\x86\x01\x10\x89\x16\xc3\xbd\x90\xfd\xe1\x61\xac\x85\x8d\x6c\x59\xec\x38\xf6\x25\xd3\x4b\x20\xeb\x62\x6d\x6b\x26\x20\x71\x80\x6c\x81\x2c\x80\x96\xa2\x51\xb5\x8a\x7f\x65\xfb\x2f\xec\x7c\xc6\x5b\xd9\x3c\xf6\xc7\x69\x12\x27\x33\x66\x24\x9f\x69\x9c\xe5\x22\x80\xaf\x58\x99\x0a\x62\xd6\x2b\xc3\x0d\x57\x3e\xb8\x44\x8a\x91\xb6\x6a\xd0\x0c\x86\x2f\x70\x9a\x56\xf9\xb7\xb2\x16\x6b\xca\x1c\x6e\xd1\x23\xce\xd3\x45\x3c\x25\x97\x49\x4e\x77\x33\xd9\x7d\x06\x7d\x9a\x5f\x46\xc9\xe8\x58\x42\xee\xc5\xc0\x37\x87\x48\x64\x35\x97\x51\x4e\x48\x54\x98\x76\x73\x29\x8d\x70\xdb\x35\x4a\x46\xf2\x24\x8e\x59\xec\xf6\xca\xcd\xe4\x28\xde\xa3\x46\xb1\x6d\x3d\xbd\x71\x33\xa2\xcc\x64\x2a\xc4\x2f\x4b\x7e\xcd\x66\x95\xd2\xec\xc8\x75\x22\xe3\x21\xae\xeb\xed\x98\x98\x29\xf5\xd1\x98\x9a\x37\xb3\x71\x38\x34\x0e\xc4\x59\xa5\x22\x3a\x4a\x3b\x17\x32\xbc\x1a\x6b\x7e\x1f\x98\xfa\x4f\xa9\x7f\xde\xd2\xf7\x64\xd9\xcf\xf6\x85\x87\xfb\x06\x4d\x12\x91\x74\xe2\x49\x54\xeb\x6e\xa3\x8b\xd3\xc2\x2b\xbd\x79\x60\x6c\xa0\x08\x06\xb8\x67\xc5\x70\x76\x6b\x7b\x39\x35\x25\x8c\x44\x57\x24\x0a\x03\x65\x39\xee\x0b\x38\x62\xa6\x5e\x6c\x75\x78\xbc\x90\x71\x1c\x29\xbb\xc1\xdd\x98\x6e\x0f\x16\xef\x58\x15\x37\xb0\xf5\xd6\x55\xa7\xd5\x7e\xf0\x6b\xdd\xb6\x2a\x44\x93\x16\x2a\xea\xb7\x2c\x97\x35\x72\x15\xd2\x6b\x78\x2b\x3a\xc6\xe3\x8d\x1f\x9d\x76\x5a\xed\xbd\x0d\x18\x52\x92\xa3\x7d\x7a\x4d\xd5\x56\xc2\x2c\xa3\x5c\x04\xf8\xe6\x5f\x3e\xcd\xf6\xb7\xb6\x02\x7a\x45\xa3\x64\x4a\xd3\xe6\x24\xf9\x4b\x18\x45\xa4\x99\xa4\xa3\x2d\x1a\x6f\x7e\x77\xba\x15\x24\x7e\xb6\xf5\x3d\x1d\x6c\xfd\x8e\x5c\x91\x53\x9c\x54\xb6\x4e\xe4\x72\x7a\x8b\xef\x8f\x5d\xf2\x55\x74\xb6\xc5\x1d\x2c\xb6\xa6\x24\x38\x65\x8b\x55\xdc\x70\xbb\xc7\x13\xcd\x97\x32\x44\x36\x97\x82\xca\x6c\x53\x8c\x72\x92\x8e\x68\xfe\x12\x85\x87\xad\x16\xc4\x0d\x5c\x15\x34\x7c\x8b\x59\xbe\x78\x2f\x9f\x6f\x03\x31\xa5\x28\xb6\xe9\xa2\x24\x1e\x01\x8d\x93\xd9\x68\xdc\x30\xee\xe3\x41\x90\xdc\xe3\xec\x6a\x80\x86\x4d\xb1\x4e\x10\x26\x99\x12\x5d\xab\xd0\xe3\x2e\xb4\xea\x4a\xb6\x70\x1a\x11\x9e\x25\xe2\xd9\x0d\x63\x29\xa4\xae\x0a\x77\xbb\xa0\xf6\x1a\x65\x65\x23\x1b\x6a\x50\xb3\x8c\x55\x74\xc3\x64\x3d\x9a\x92\x80\x75\x67\xc2\x96\xb0\xd3\x88\x62\x34\x98\x0c\x7b\xd5\x74\xa3\xf7\x44\xc3\x95\xea\xc6\xd1\x9e\x2e\x93\xd2\x29\x25\xb9\x67\x03\xd9\x2a\x03\x11\x31\x74\xcc\xe3\x36\x5d\x86\x3b\x11\xb7\x1a\x16\x39\xeb\xda\xe7\xc6\x7c\x90\xe4\xf6\x4b\x33\xdf\x51\x1c\x54\xb3\xde\x51\x1c\x54\x33\xde\x91\x75\x2d\xf2\xef\x6c\xf7\xeb\x64\x3b\xb3\xdb\xb8\xda\x59\xcc\x85\x8a\xed\x16\xcf\x0e\xd6\x09\xe6\x3f\x9d\x63\x0d\xf7\xfc\xf0\x9a\xad\xcd\xa6\xc4\xc7\x8d\x2a\xc0\xae\xc1\x2c\x0f\xa3\x30\x0f\xa9\xb1\x6f\xc7\xfb\x5c\xd8\xf9\x3f\x0e\xd3\x2c\x67\x6b\xc5\x09\xb3\xcd\xe3\x18\x4f\xa3\x47\xb3\x88\xbf\x62\x90\xd2\x8c\x3f\xa9\x79\x4d\x6b\x29\x85\x51\x22\x18\x9b\xa1\x81\x18\x8a\xe3\x6f\x61\x3d\xae\x2d\x8b\x02\xfb\xec\xa4\x77\x78\x04\x7f\x7c\xf3\xdd\xc9\xe9\xd1\xcb\xe3\x55\x6a\x00\x40\xe3\xa7\x9f\x7e\xfa\xa9\xb9\x4a\xc9\x0f\x4f\x2e\x1f\xc3\x4f\x3f\xad\x50\x74\xfb\x4f\x9b\x9b\x9b\xb5\xcd\xad\x55\xc0\x6e\xef\xb3\xcf\x0f\x57\x3f\x2c\x2f\xdb\x4d\xba\xbc\x70\x63\x85\xc2\xf0\x01\x44\x61\x2c\xbd\xa0\xc2\xd9\xf3\x23\x38\x39\xfa\xe6\xbb\x97\xbd\x13\x38\xfa\xc3\xdb\x93\xa3\xd3\xd3\x17\x6f\x5e\x9f\x2e\x6f\xa2\x77\x72\x04\x87\x6f\x5e\xbd\x78\xfd\x8d\xb1\x68\x4e\x69\x0d\x23\xde\x5c\x93\x39\x2e\x4f\xd9\xca\x9f\xab\xb0\x93\x23\x88\xc2\x9c\xa6\x24\x62\xeb\x02\xd0\x8a\xb8\x09\x70\x1c\xde\x70\x4e\xbd\x1e\xcf\x21\x48\xe2\x1a\x6e\x3d\xcd\x93\xd9\x53\x80\x37\x63\x5c\xe6\x00\x89\xb2\x84\x9f\x18\x58\x2d\xa0\xcf\x1e\x5b\x34\x73\xc5\x80\x50\x82\x84\x66\x71\x8d\x9f\x58\xa4\xd3\x94\x22\x34\x9a\xf9\x64\x4a\x8d\xc5\x4f\x96\x53\x12\x34\x98\x4d\x93\xe5\x49\x32\xe5\xdb\x60\x61\x06\x6a\xdf\xb3\x0e\x4c\x18\xde\x17\x99\xbc\x99\x52\x3c\xe2\x5a\x43\x55\x77\x78\x7a\x0a\x63\x7a\xc3\x25\xa3\x01\x5f\x9d\x7c\xf3\x8c\xe9\xb5\x31\xbd\x69\xef\xed\xc3\xd6\x57\xde\x39\xd9\x1c\xb6\x36\x1f\x5d\xd4\x5d\xdf\xb6\xc2\xc6\x5a\x05\x9c\x93\x6f\xbe\x79\x26\x41\x75\x76\x2c\x50\x3f\x76\x6e\xeb\xd5\x3f\x6c\x98\xe9\x68\x20\x61\xa6\xa3\x81\x97\xa6\x69\x63\x34\x1a\x35\x06\x83\x41\x9d\x01\x4f\x47\x83\x7d\x34\xb1\x4f\xe8\xe8\xe8\x66\xea\x09\x4d\xeb\xd5\xfe\x61\x2b\xbb\x9f\x8e\x06\x5b\xd9\xfd\x2d\x6f\x2b\xbb\xef\x6d\x05\x3f\xb6\x1b\xdb\xb7\xf5\xad\xec\x7e\xa3\xf8\xbb\x06\x1b\x72\x35\x51\x2b\xe4\x6d\xb1\xbf\xfe\x59\x4d\x66\xd7\xf5\xa6\xf2\x0f\x5b\x5b\xa3\x06\xd4\x7e\xf8\xa1\x56\x6f\x40\x2d\xac\xd5\x57\xc3\xba\x41\x08\x91\x98\x93\x85\xa8\x93\xad\xec\xbe\x85\xd9\xd2\x7e\x14\x7e\x9b\x95\xbd\xa7\xfb\x22\x7b\xc3\x7b\xba\xbf\xd5\xdc\x0a\x36\xea\x4f\x59\xa1\xfa\x47\xf4\xf0\x28\xc4\x90\xd3\x27\xdf\x3c\x63\x4b\x99\x93\x6f\x9e\xf5\x44\x87\x6e\x16\x77\xe8\xe9\xdf\xa6\x47\x4f\x3f\xa2\x4b\xbd\x18\xfe\xd0\x6e\xc3\x3a\xe3\xa7\x20\x08\x82\x2d\xf5\xd7\x3a\x77\xa4\x67\x3d\xbc\x69\xb7\x91\xdf\xf0\x40\x81\x7d\xd3\x7c\xdb\x6e\xec\xdc\xd6\x7f\xd8\x5a\x9a\x90\xdd\xff\x67\x9a\xbf\x8f\xe2\x51\x14\x66\x63\x31\x2b\xc5\x64\x82\xad\xb0\x7f\xf7\x61\xeb\x9c\x6c\xfe\xe5\x82\xfd\xd5\xda\x7c\xf4\x43\x76\xb1\xb1\xd5\x30\x77\x66\x0e\x93\x18\xdf\x5d\x24\x92\xdd\xbc\x20\x08\x1a\xe2\xff\xba\x80\x88\x88\x33\x2d\x92\x00\xe1\xfd\x33\xd2\xd5\x89\x23\x8e\x25\x83\x62\x64\x8a\x3d\xc2\x51\x9c\xa4\x7c\x83\x5d\xec\xf0\x64\x24\x0e\x73\xb6\xfe\xc7\xe7\x2b\xc6\x24\x0e\x22\xb1\x49\xa6\x8e\xb6\x6b\x41\x10\xd4\x70\x6b\x03\xef\xf6\x89\xd3\xfb\x98\xc2\x60\x9e\x53\x81\x92\x3e\x43\x0b\x63\x08\xa8\x1f\x4e\x30\x62\x75\xc5\x61\x1c\xab\x81\x36\x87\x8d\x23\x43\xcb\xe7\x64\xb0\x37\xd5\x64\x4d\x56\xa7\xd0\x69\xc6\xaf\xf1\x2c\x8a\x98\xd5\xc6\x4c\x08\x9e\xe8\x63\xe8\x73\x7e\xde\xa9\xf7\x66\x10\x32\xdf\xfc\xb1\xd5\xe7\x68\x70\x96\x30\xb8\xd6\x29\x9f\xf2\x2e\x55\xdb\x32\x99\x4f\x22\xea\xa9\x67\x3f\xae\xa0\x0b\x9e\x8a\xd3\x79\xd5\x80\xce\xee\x6e\x1d\xee\x43\x67\xf7\x81\x7d\x11\xd1\xf2\xe3\xe3\x7b\x15\x7f\x99\x92\x80\x55\xd9\x11\x0f\x2e\x59\x1b\x31\x7c\x34\x27\x24\xf7\xc7\x9e\xad\xe5\x19\xaa\x37\x58\xc5\x3e\x0b\xb2\x62\xe7\xea\x2d\xc0\x1a\x63\xe9\x1a\x6c\x08\xcc\x49\x3a\x3f\x6f\x5f\x30\xbb\xb2\xb6\x65\xa7\x76\x9c\xa9\xdb\x17\xf6\x6e\xb5\x66\xd1\x88\x8e\x88\x3f\x57\x63\x71\x45\x8b\xac\x29\x79\xb8\xd9\x6c\xd6\x5d\x3c\x7a\x36\xa6\x73\xc8\xc9\x7b\x6e\x91\x0f\x93\x74\xb2\xcf\x92\xdb\x1d\x18\x84\xf9\x3e\x4e\x5a\x7a\x5e\xdf\x7c\x02\x5f\x9d\xb4\x5a\xad\x6f\x5a\xad\xd6\xb3\x56\xab\xc5\x4a\x76\x76\x64\x49\x9c\x96\xcc\x92\x27\xad\xd6\x37\xdf\xb4\x5a\xcf\x9e\xf1\x92\xdb\x7b\xaa\xe4\xc9\x37\xac\xec\x33\x5d\xf2\xa4\xf5\xcd\x37\xdf\xb4\x9e\x3d\x7b\x86\x25\x77\x1e\xea\x92\xac\x28\x2b\xfb\x4c\x60\x9b\x51\x14\x20\x86\xed\x24\xc9\x72\xc8\xc2\x51\x1c\x0e\x43\x9f\xc4\x39\xab\xa4\x66\x71\xf5\xe6\xb9\x90\x3a\xdc\xfd\x0d\x92\x6b\xdc\xd4\xe3\x48\xab\x97\x53\x49\x5e\xcb\x70\x77\x95\x51\x2b\x9b\x4d\xb9\x4f\x67\x91\x3b\x6f\xda\xed\xe7\xf4\xe6\x2c\x61\x85\x4c\x06\xd5\x0f\x9e\xdd\xbb\x6a\xe2\x09\x7a\xf6\x7d\x98\x8f\xbd\xda\x57\xb5\xba\x83\x2b\x50\x3f\x31\x9e\x9c\xf2\x9d\x5f\x4a\x02\x66\x9e\x7c\x05\xc9\x70\xc8\x94\x14\xe3\xe6\xab\x66\x36\x1b\x64\x79\xea\x89\x65\x09\xbe\x06\x8b\x5e\x04\x33\x11\x51\x23\x0b\xff\x82\x16\x0b\xb6\x7b\xbe\xdd\x80\xbd\x06\x3c\x6a\x40\xbb\x73\xa1\x62\x5e\x5f\xa9\xe5\x4d\xb7\x0b\x9b\x6d\x37\x83\x6a\xc8\x71\x12\x6f\x32\x33\x83\xd3\x4b\x82\xbe\x12\xec\xbf\x75\xfe\x0f\x42\xdd\x6e\x85\xae\x5e\x89\x6e\x4d\xa3\x30\x17\x9e\x17\x68\xf5\x27\x33\x0c\xd6\x8f\x67\x6e\xdc\xc1\x5a\x62\x05\x5b\xb0\x7d\x20\xb2\x52\xb3\xcb\x2d\xfe\x72\x4c\x5d\x66\x8e\xcc\x4c\x96\x53\xc8\x1f\x14\xf3\x99\xe8\x98\xc5\x38\x6a\xaf\x93\x74\x22\xf6\xdb\x13\x68\xef\x49\x5e\xd1\x4a\x25\x4e\xd2\x49\x7b\xcf\xd6\x2a\xea\x61\xda\xab\x06\x14\xf5\x07\xef\x4f\x17\x3a\xf0\x14\xae\x60\x5f\x09\xc9\xd6\x96\x00\x6f\x3a\x81\xcb\xc2\x6d\x2c\xfc\xf8\x31\xec\xf0\x1a\x5b\x5b\xf0\xb0\x58\xf6\x0a\x9e\x3c\x01\x6f\x07\xee\xf3\x37\x78\x60\x13\x3a\xf5\xfa\x01\x96\xed\xec\x30\x35\xbb\xdd\x11\x55\x6e\xd7\x2c\x6d\x26\xf8\x14\xbd\x98\xce\x12\x66\x3c\x78\xe7\x69\x03\x46\x0d\x18\x5c\x34\x27\x64\xea\xf1\x2e\xd6\x2b\x94\x49\x69\x1e\xbb\x8b\x12\xc1\xba\xbc\xd6\x84\xcc\xd1\x0b\xc8\x84\xc7\x8f\x47\xf8\xe9\x34\x53\x29\x62\xca\x18\x2a\xad\xc3\xc0\x30\x25\x39\x1e\x8f\xc7\x5b\xea\x2f\x71\xdc\x6c\xcc\x79\x02\xb1\x0c\x22\x9a\x65\xdc\x37\x79\x07\x82\x70\x14\xe6\x19\x84\xb9\x38\x01\x98\x92\x20\xa0\x01\x63\x3e\x36\xd8\x3b\xe8\xa2\x21\x66\x8d\x40\xe9\x80\x61\x88\x4e\x62\xea\x50\x8d\x4d\xa2\xcb\x67\xca\x22\x89\x56\x99\x29\x8b\xb3\xeb\x67\x98\x29\x6f\xda\xed\x2a\x45\x54\x35\x4b\x6e\x6d\xc1\x5b\xc2\x89\x22\x54\x22\xc6\x14\xd5\x74\x1c\x26\xb3\x54\x90\x12\x4f\x78\xc2\x0c\xc4\x9b\xe7\xe0\x4d\xd3\x64\x40\x06\x91\x98\xe5\xb6\xb6\x00\xb5\x02\xcd\xc4\xcb\xbb\xc2\x75\x2b\x08\x87\xc3\xd0\x9f\x45\x48\xf6\x8c\xf0\xd3\x20\x6e\xdd\xa0\xa6\xc5\xc2\x90\x51\x3a\xc9\x20\x4f\x24\x28\x92\xa6\x78\xba\xc9\xe6\x33\x31\x72\x9c\x24\xc2\x4b\x26\x86\x29\x4d\xf1\x49\x01\xbe\x5d\x90\x4c\x06\x61\x2c\x8e\x54\x87\x12\xc8\x88\x4c\x26\x8c\x4f\x52\xf1\xea\x48\x43\x50\x9c\x6f\x50\xe4\x29\x89\x33\xee\x4e\x83\x79\x0c\xf2\x9f\x67\x24\xce\xd5\x81\xa7\xda\x70\x52\xfa\x89\x49\xab\x3e\x44\x61\xca\x8d\xf3\x89\x60\xb6\x29\x51\x0c\x86\x84\x1b\xcc\x81\x6f\x37\x49\xbf\x40\xe5\x0a\xdb\x04\x58\x1f\xae\xc3\x80\xfa\xc9\x84\x66\x1a\xde\xfa\x70\x38\x1c\xae\x37\x01\x4e\x7d\x82\x37\xd1\x91\x33\x09\x28\x25\xac\x76\x76\x84\x4b\x33\x6b\xa3\xb3\xfb\x40\x3a\x12\x64\x64\x42\x35\x34\x92\x81\x3f\xcb\x73\xfe\x44\xcd\x50\x99\x85\x4d\x80\xef\x29\x64\xef\xc5\x6c\x33\x09\x83\x20\x62\xcb\x5a\x3a\x45\x22\xa0\xb3\x5d\x90\xcc\xd4\xa3\x97\x22\x3e\xad\x81\xbd\xbd\x1d\xa8\x35\x22\x6c\x80\xa9\x15\x6f\xdd\x24\xec\x14\x48\x38\x09\x23\x92\x42\x40\x49\x04\x6c\xc1\xde\x04\x94\xa8\x29\x09\x32\xc8\xaf\x13\x4e\x5c\x35\x65\x17\x48\xaa\xe1\xa0\xc1\xeb\xb1\xe1\x65\x3c\x0e\xb3\xa9\x20\x4d\x9d\x51\x13\x59\xad\xb0\x73\xc4\xcb\x85\x39\x9a\x01\x1a\x0e\xa7\x78\x3c\xbf\x26\x73\x5c\xee\xfb\x24\xe6\x24\x91\xa1\xdc\xc6\x4c\x5a\xc3\x11\x86\x96\x51\x8b\x15\x27\x39\x96\x93\x62\xdb\x22\xc5\xd9\x38\xa5\xd4\xee\x2f\x13\x0c\x71\x72\x2f\xe4\xa0\xc4\x54\x43\xc4\x04\x6b\x35\x35\x2c\xda\x1c\x35\xa1\xdd\x1a\x4a\x1e\x63\xdf\x87\x32\x1f\xed\x09\x36\x58\x72\x8e\xec\xd8\x68\xb2\x61\x41\xea\x70\xc5\x38\xa6\xd0\x31\x16\x14\x4d\x73\xca\x43\x1b\x3b\x4d\x66\x71\xe0\x15\x3a\x0e\x5b\x48\x7e\x97\x0d\xed\xb6\x9f\xf9\x82\xcf\xb6\xa0\xb5\xa2\xe2\xf1\x6e\x84\x7d\x84\x16\x2e\x17\xde\xa6\x41\x58\xa7\xa5\xe5\x9a\x0f\x0d\xbb\xcd\xbb\x12\x7d\xa7\x51\x46\x2b\x2b\xb0\xc9\x0a\xe7\x4f\x51\x1c\x7b\x84\x67\xa7\x53\xb9\xf9\xdb\x36\x0f\xf8\x2b\xe6\x5e\x56\x83\xcd\xba\xc8\x7b\xee\x49\x37\xe3\x17\x67\x84\x1f\x24\xd3\xe7\x35\x61\x47\xd7\xec\x35\x23\xce\xc4\xf9\x98\x86\xa9\x9a\x88\x85\x5b\xb1\x7a\xc6\x17\x7d\xe0\xf8\xea\x52\xcd\x1b\x6c\x82\xc3\xf5\x79\x93\xcf\xa3\x62\xaa\x21\xb1\xf0\x40\x55\x05\x1b\x7a\xf2\x14\x2b\xfa\x80\x4f\x0f\x6c\xa2\x72\xcf\x8a\x1f\xb8\xeb\xe1\x63\xfe\xeb\xc9\x2d\xf4\xe4\x4c\x6a\x4c\xf0\xa9\xf0\xb8\x4e\x86\x3a\x95\xeb\x7e\x6b\x86\x73\xcd\x9d\x25\xf8\xe8\xc7\xa1\x7a\xa6\x1a\x50\xf6\xaa\x3d\x43\x8e\xd9\x90\xb3\x36\x8d\x19\x92\xa4\x23\x7d\xd6\x8e\xfb\x70\xe2\xb4\xdd\x60\x4c\x4c\x3e\xd0\x65\x3a\x3b\xce\x32\x9d\x1d\xee\x7d\x26\x27\x5b\x81\x98\x37\xd6\x0e\xa5\x8c\x4d\xc7\xf4\xc6\xd0\x00\x3b\x5a\x03\x30\x25\xdf\x65\x7f\xab\x1d\x14\x6c\x58\xdf\x25\xf4\xc6\x0d\x10\xc6\x9b\xe3\x42\xf4\xfa\x57\xeb\xb0\x01\xa9\xf8\x7f\x24\xfe\x1f\xb0\xff\x95\x37\x95\x75\xf7\x5a\x0b\x24\x6b\x93\x8b\x24\x76\xa3\xae\x8f\x82\x4c\x97\xc6\xa2\x71\x6f\x2d\x65\x3d\xee\x00\x26\x34\x00\x5f\xcd\x72\x35\xb0\x01\xb5\x06\x18\x7b\x49\x76\xa9\xce\x4a\xa5\xb6\x75\xa9\x7a\xed\xc0\xf4\xf8\x22\xe9\xa8\xd2\xeb\xb3\xc2\xc9\xd4\xed\xf9\x46\xd2\xd1\x79\x78\xc1\x23\xdf\xe1\xb0\xf1\x04\xd3\x19\xc1\xf4\x56\x60\xed\x5a\x65\xb5\x5a\x10\x54\x21\xe9\x68\x35\xf9\x56\x66\x34\x13\x5d\x4b\xae\xdd\x92\xaf\x36\xa5\x87\xe2\x05\x34\x12\xe3\xfe\xa6\x06\xc2\x1d\x90\x49\x34\x1d\x13\x18\x86\x34\x0a\xb4\xd3\x27\x90\x6b\x32\xff\xf5\xe9\x07\x45\x83\xb2\x92\x30\x95\x1b\x67\x5b\xa1\x30\xbe\xa0\xa6\xc0\x5d\xa7\xe7\x28\x8f\x65\x4d\x51\x12\x70\x36\x6b\x19\x9e\xa4\xda\x63\x47\x40\xf3\x53\xe2\xbf\x67\x73\x87\x9c\xde\x96\xc8\x96\x29\x5a\x5f\x31\xb9\x32\xf6\xa5\x3c\xcf\x12\x8c\xd6\x45\x9d\x2d\x1d\x99\x6c\xd8\xe1\x6a\x4b\x1f\xaf\x20\x9c\x58\x0f\x1e\xde\xb1\x5e\x47\xd4\x6b\xd5\xed\x6d\xb4\x06\xec\xd5\xff\x89\xca\xe5\x19\x11\xce\x70\xdc\x47\xc8\xcf\x32\x21\x6d\x78\x7e\x1d\xe2\x48\xe3\xb2\x83\x55\xc6\x05\x22\x5f\x01\xa7\xa3\x01\xe3\x20\x26\x79\xf6\xd2\xf7\x04\xdb\xc9\x96\x2c\xe8\x70\x73\x01\x77\x1f\xca\x4b\x39\x95\x55\x58\xce\x05\x74\xa8\x77\x96\x02\x3a\x5c\xb8\xb5\xe4\x98\xf8\x10\x80\x72\xa9\x72\x6c\x5f\x36\x73\x9a\xe5\x58\xca\x02\x15\xd0\xa1\xb9\x75\xe9\xb4\x8b\x38\x68\xe7\x8e\xe4\x36\xa3\xd3\x0e\x58\x57\xaa\x4c\x32\x0a\xcd\xc5\x65\xb5\x44\x0c\xc3\x7e\xb2\xc5\x71\x6e\x38\xc9\xa1\xaa\xeb\x9a\xce\x6e\xf0\x84\x59\xd7\x4f\x81\x4f\x1f\xb0\x0f\xed\x03\x7b\xf3\x95\xe0\x94\xc5\x85\x48\x4d\x3f\xc0\x85\xc3\xfe\xdd\x31\x7f\x63\x4b\x62\x1e\x32\x7a\xfb\xe6\x8a\xa6\xfc\x74\x51\xab\x5e\x7f\x4c\xe2\x98\x46\x4c\x89\xf1\x8e\x6e\x21\xb3\x60\xbf\x4a\xdd\xcc\x68\xde\x13\xbd\x50\x7d\x4c\x47\x83\x06\x87\xe5\xf2\x07\xac\xd2\x2e\xa2\xc7\x5d\x5e\x73\x25\xa3\xd4\x1e\xb9\x57\xe1\x0d\x5b\x77\xd3\xd4\xa7\x71\x4e\x46\xb8\xe8\x24\x90\x87\xe8\xc1\x1e\xa1\x3f\x1d\x1b\x3b\x18\x90\x8c\x56\xf4\x66\x12\x5a\xba\x93\x95\x6c\x20\x84\x86\x84\x6b\xf5\xa8\x5d\xd1\x25\x56\x4f\xed\xea\x91\x74\xde\xa9\x28\xc7\x20\xd7\x0f\xaa\x2e\x96\xec\x1c\xc0\xc6\x46\x68\xaa\xe8\x20\x1c\x0e\xb9\xf3\x63\x87\x29\x97\x4d\xc4\x41\x5d\x27\x11\x3f\xe4\x4b\x5f\x85\xd5\x8d\xc8\x65\xc6\x08\x82\xb9\xaf\x7a\x54\xd4\x34\xd5\xf4\x6e\xdb\x04\xe7\x7b\xa4\x25\x1e\x51\x32\xa2\xe6\xc2\x30\xcf\xf4\xc6\x97\x32\x04\xde\xc4\x90\xcd\x7c\x9f\x66\x59\x03\x48\x49\xd0\xe4\xfd\x0d\x8e\x14\x3a\x94\x1f\x73\xbd\x25\x66\x3f\xc3\x5a\x60\xd0\x64\xf9\x8c\xbf\xdc\xdb\x2e\x8d\xad\xa4\xba\x39\xc0\x98\xa5\x75\x13\x67\x0a\x53\x3b\xb1\x5e\xd5\xea\xe5\x69\x92\x97\xac\x3a\x4f\x21\xc6\x74\x69\x2c\x07\xc1\xe5\xb6\xaa\xd4\xfb\xbc\x62\x6a\x58\xb5\xd1\x3b\xb4\xa9\x6e\xec\xb4\x17\xa3\xc1\x98\x42\x5e\x9c\xa0\xdc\x3d\xf5\x90\xcd\x05\xf1\x0f\xb5\x1c\x90\x9e\xdc\x85\x96\x93\xd1\x10\x59\x6e\x10\x2c\xdb\x9a\x45\x5f\x7b\x21\x94\x96\x45\x69\xcd\x4b\xaf\xf5\x35\xc7\x3c\x0d\xa7\x53\x1a\x30\x96\xc2\xdd\x30\x7e\xfd\x4c\xdb\x47\x79\x02\x51\x72\x4d\x53\x9f\x64\xe2\x7e\x0f\x63\x11\xde\x0c\x5a\x7c\xe2\xcc\xa1\x21\x26\xb9\x4c\x73\x97\xe9\xae\x1e\x89\xcb\xbc\x06\x96\x79\x82\xab\xbe\x09\x7f\x9d\x8d\xd5\x0c\x68\x1a\x5e\x99\x0f\x88\x67\x79\xe2\xbf\x67\xbd\x13\x1b\xc0\xcd\xfc\x26\x37\x7d\x7b\xdc\x77\x10\xce\xe4\x09\x83\x6a\x67\xe9\x26\x2c\x6e\x0d\x66\xd3\x04\x63\x0d\x54\x10\xce\x9e\x97\xe5\x6c\x57\xbc\x13\xa0\x39\x5f\x0c\x85\xa5\xa5\xd8\x3f\x48\xfc\xaa\xf9\x59\x97\xc0\x4b\x03\x17\xa8\xc9\x62\x1e\x23\x0d\x0f\xaa\xf3\xe4\x25\x1b\x8e\x43\x22\x83\xe8\x7d\xb9\xa6\xf4\xe9\x7d\xb6\x81\xc7\xf7\xb5\x2f\xd0\x60\x15\x77\x9f\xa9\xe1\xe7\x43\x39\x25\x11\xcd\xf3\xf2\x40\x60\x99\x43\xf6\xfd\x2d\x2f\x61\xcf\x0b\xd2\xde\x59\x03\xf0\xce\x71\x63\x8d\xc2\x7a\xef\xf5\xe9\x0b\x68\xef\xad\xe3\x0d\x5e\x00\xa8\x7d\xd5\xc2\x0f\x9b\xd8\xbf\x3a\x3c\x54\x5f\x77\x8e\x1e\xf5\x5a\x7b\x3c\x75\xa7\x87\xa9\xa2\xfc\xf6\xce\xde\x6e\x6f\x07\x73\x1e\xec\xee\xb6\x1e\x3c\xc3\xaf\xad\xbd\x47\x0f\x1f\xf5\xf0\x6b\x7f\xbb\xff\xe0\xf0\x58\x95\xdf\xdd\xdd\x7d\xb0\xbb\x8d\x39\x47\xc7\x9d\x47\x9d\x47\xbc\x7c\xeb\x59\xaf\xcd\x53\x8f\x0f\x8f\x1e\xed\xe8\xf2\x0f\x3a\x8f\x8e\x59\x75\x96\xd3\x69\xb5\x0e\x9f\xc9\xf2\xbb\xcf\xfa\x1c\x0a\xfb\x1c\xd6\x1a\x6a\x97\x8e\x75\x6c\xef\x66\x4f\x50\xcb\x9f\x0d\x78\x68\x95\x52\xf7\xd8\x97\xdd\x63\xf5\xf5\xe1\x03\xf5\xb5\xa7\x53\xfb\x3a\xf5\x58\x23\xc5\x2a\x2a\x28\xbb\xc7\x0a\xca\xee\xb1\x82\xb2\x7b\xdc\xd3\xa9\x7d\x9d\x6a\x41\x79\xf8\x40\x41\x79\xf8\x40\x41\x79\xf8\x40\x41\x79\xf8\xa0\xa7\x53\xfb\x3a\xd5\x82\xd2\xd3\xb8\xf4\x34\x2e\x3d\x8d\x4b\x4f\xe3\xd2\xd3\xb8\xf4\x6c\x5c\xfa\x1a\x97\xbe\xc6\xa5\xaf\x71\xe9\x6b\x5c\xfa\x1a\x97\xbe\x8d\xcb\xb1\xc6\xe5\x58\xe3\x72\xac\x71\x39\xd6\xb8\x1c\x6b\x5c\x8e\x39\x2e\x92\x47\x8e\xd5\x20\xb1\xaf\x02\x0c\xfb\x2a\xc0\xb0\xaf\x3d\x9d\xda\xd7\xa9\x06\x32\x6c\x5c\x14\x14\x35\x48\xec\x8b\x82\xa2\x06\x89\x7d\xed\xeb\x54\x0b\x8a\x1a\x24\xf6\x55\x41\x51\x83\xc4\xbe\xf6\x74\x6a\x5f\xa7\x5a\x50\x7a\x1a\x97\x9e\xc6\xa5\xa7\x71\xe9\x69\x5c\x7a\x1a\x97\x9e\x8d\x4b\x5f\xe3\xd2\xd7\xb8\xf4\x35\x2e\x7d\x8d\x4b\x5f\xe3\xd2\xb7\x71\x39\xd6\xb8\x1c\x6b\x5c\x8e\x35\x2e\xc7\x1a\x97\x63\x8d\x8b\x3d\x48\x8c\x2c\x02\x0c\xfb\x2a\xc0\xb0\xaf\x02\x0c\xfb\xda\xd3\xa9\x7d\x9d\x6a\x20\xc3\x28\xaa\xa0\xa8\x41\x62\x5f\x15\x14\x35\x48\xec\x6b\x5f\xa7\x5a\x50\xd4\x20\xb1\xaf\x0a\x8a\x1a\x24\xf6\xa5\xa7\x53\xfb\x3a\xd5\x82\xd2\xd3\xb8\xf4\x34\x2e\x3d\x8d\x4b\x4f\xe3\xd2\xd3\xb8\xf4\x6c\x5c\xfa\x1a\x97\xbe\xc6\xa5\xaf\x71\xe9\x6b\x5c\xfa\x1a\x97\xbe\x8d\xcb\xb1\xc6\xe5\x58\xe3\x72\xac\x71\x39\xd6\xb8\x1c\x6b\x5c\xec\x41\xea\x69\x49\xea\x69\x49\xea\x69\x49\xea\x69\x49\xea\x69\x49\xea\xd9\x92\xd4\xd3\x92\xd4\xd3\x92\xd4\xd3\x92\xd4\xd3\x92\xd4\xd3\x92\xd4\xb3\x25\xa9\xa7\x25\xa9\xa7\x25\xa9\xa7\x25\xa9\xa7\x25\xa9\xa7\x25\xa9\x67\x4b\x52\x4f\x4b\x52\x4f\x4b\x52\x4f\x4b\x52\x4f\x4b\x52\x4f\x4b\x52\xcf\x96\xa4\x9e\x96\xa4\x9e\x96\xa4\x9e\x96\xa4\x9e\x96\xa4\x9e\x96\xa4\x9e\x2d\x49\x3d\x2d\x49\x3d\x2d\x49\x3d\x2d\x49\x3d\x2d\x49\x3d\x2d\x49\xbd\x82\x24\xf5\xb5\x24\xf5\xb5\x24\xf5\xb5\x24\xf5\xb5\x24\xf5\xb5\x24\xf5\x6d\x49\xea\x6b\x49\xea\x6b\x49\xea\x6b\x49\xea\x6b\x49\xea\x6b\x49\xea\xdb\x92\xd4\xd7\x92\xd4\xd7\x92\xd4\xd7\x92\xd4\xd7\x92\xd4\xd7\x92\xd4\xb7\x25\xa9\xaf\x25\xa9\xaf\x25\xa9\xaf\x25\xa9\xaf\x25\xa9\xaf\x25\xa9\x6f\x4b\x52\x5f\x4b\x52\x5f\x4b\x52\x5f\x4b\x52\x5f\x4b\x52\x5f\x4b\x52\xdf\x96\xa4\xbe\x96\xa4\xbe\x96\xa4\xbe\x96\xa4\xbe\x96\xa4\xbe\x96\xa4\x7e\x41\x92\x8e\xb5\x24\x1d\x6b\x49\x3a\xd6\x92\x74\xac\x25\xe9\x58\x4b\xd2\xb1\x2d\x49\xc7\x5a\x92\x8e\xb5\x24\x1d\x6b\x49\x3a\xd6\x92\x74\xac\x25\xe9\xd8\x96\xa4\x63\x2d\x49\xc7\x5a\x92\x8e\xb5\x24\x1d\x6b\x49\x3a\xd6\x92\x74\x6c\x4b\xd2\xb1\x96\xa4\x63\x2d\x49\xc7\x5a\x92\x8e\xb5\x24\x1d\x6b\x49\x3a\xb6\x25\xe9\x58\x4b\xd2\xb1\x96\xa4\x63\x2d\x49\xc7\x5a\x92\x8e\xb5\x24\x1d\xdb\x92\x74\xac\x25\xe9\x58\x4b\xd2\xb1\x96\xa4\x63\x2d\x49\xc7\x5a\x92\x8e\x2d\x49\x12\xb6\xdf\x28\xa5\x73\x7e\x8e\x9d\x92\xc9\xd4\x30\xfd\x1e\xb2\x3f\x58\xaf\xdd\x61\x7f\xf8\xd7\x43\xf6\x07\xbf\x76\xf6\xd8\x1f\xfc\xba\xdd\x62\x7f\xf8\xd7\x1e\xfb\xa3\x30\xdd\xc1\x0f\xe6\xec\x1c\xb1\x3f\x7c\x72\x7c\xc8\xfe\xe0\x57\x04\xc2\x61\xef\x1d\xb2\x3f\xf8\xf5\xc1\x1e\xfb\xa3\xd5\x3b\x22\xc3\x55\x76\x8f\xfd\xc1\xaf\x8f\x76\xd8\x1f\xfe\xf5\x88\xfd\xe1\xea\x02\x4b\xe0\xd7\x67\x1d\xf6\x47\x41\x79\x76\xc8\xfe\x60\x0e\xb6\xc4\x71\xef\xb7\xd8\x1f\xfe\xb5\xc7\xfe\xe0\x57\xc4\x95\xc3\x46\x8b\xf9\x08\x9d\x93\x2f\xea\xf6\x3a\xc3\x9f\xa5\x29\x55\x5b\x5a\x62\xa5\xd1\x90\x51\x85\xe6\xfc\x2c\x63\x96\xd1\x14\xf7\xf1\x46\x8e\x53\x02\xbf\x72\x01\x52\x5a\x9f\xd8\x57\x64\x02\xe9\x0b\x47\x7c\x3f\x49\x03\xe1\x90\x60\xad\x7d\x4b\x0b\xdf\x72\xcb\xaf\x45\xf0\x09\xb6\xf4\x5c\x27\x51\xe8\xd3\x41\x34\xa3\xeb\xfb\xe8\x57\xed\x75\x76\x5a\x0d\xe8\xec\x3c\xe4\xae\xaf\xeb\x0d\x2c\x14\xe7\xe1\x9f\x67\xf4\x7a\x1c\xe6\xba\xdc\x2e\x2b\xb7\xbd\xdb\x80\x4e\xdb\x55\xae\xad\x0b\xb2\x32\xdb\x8f\x58\xc1\x47\x8e\x82\x1d\x55\x70\x9b\x35\xda\xd9\x6e\x40\xa7\xb5\xe3\x28\xb8\xad\x0a\xb6\x76\x1b\xd0\x7e\xd4\x69\x40\xfb\xc1\x9e\xa3\xe0\x8e\x2c\xd8\x66\xad\xb6\xb7\xdb\x0d\x68\x77\x5a\xb2\xe0\x9f\x67\x64\x42\xd2\x30\x56\x3d\x69\x77\x1e\x60\x67\x19\x82\x9d\x52\xa9\xf6\x6a\xc5\x54\x2f\xda\x6d\xd6\x0b\xd6\x95\xf6\xa3\x87\xa5\x62\xaa\x0f\xed\x56\x87\xf5\x93\x75\xe4\x41\x19\x35\xd5\x83\x3d\xec\x00\xfb\xab\xad\x7a\xfa\x97\x59\x5a\x18\x2d\x44\x4a\x8f\x16\x2b\xd0\x5e\x5a\x42\xd3\xbd\xb3\x23\x30\xee\x6c\x3f\x34\x4b\x68\x64\x1f\x6d\x0b\x64\x3b\x2d\x0b\x86\x41\xe9\xb6\x44\x74\x5b\x0e\xf2\x80\x86\x23\x03\x51\x56\x1b\xff\x52\x43\x31\x08\xb3\x3f\x1b\x8c\x87\x38\x76\x90\x70\x7b\x56\x89\xf6\xf2\x22\x05\x26\x6a\x6f\x37\xa0\xfd\x70\xdb\x2a\x52\x60\x9f\x87\xac\xc8\xee\x43\xab\x48\x81\x71\x3a\xac\x5c\xeb\x81\x2c\x12\x11\xff\xbd\x2c\xd0\x6a\x00\xfb\x4f\x67\xc5\xfe\x98\x06\x24\x9a\x24\x71\x50\x60\x7c\x8b\x6a\xa6\xa4\x71\x18\x7a\x54\x58\x5e\x7b\x51\x66\xa7\x90\xa9\x46\x8b\x65\x6e\x17\x32\xad\x26\x77\xec\x4c\x63\x8c\xa2\x19\xbd\x0a\x93\x88\xe6\xba\xeb\x0f\x1b\xb0\xc3\xc6\xbb\xa3\x48\x9c\x26\xd7\xb1\xca\xdf\xdb\x6d\xc0\x4e\x87\xfd\x6f\x66\xdb\x63\xb4\xb7\xc3\xfe\x37\xf3\xed\x01\xda\x7d\xc4\xfe\x37\xf3\xed\xd1\xd9\x6d\xb3\xff\xcd\x7c\x7b\x68\x18\x51\xb7\x55\x07\x67\x69\x34\xbf\x4e\x12\x4d\xf8\x0e\x53\x0d\x0f\x77\x58\x47\x4b\x85\x0a\xcc\xd4\x66\x7c\xbb\x5b\x2a\x65\xa3\xdb\x7e\xf4\xe0\xff\x67\xef\xdf\xbb\xdb\xb8\x91\x84\x71\xf8\x7f\x7f\x0a\xd8\x4f\x36\x24\x6d\x8a\x12\x65\x59\xbe\x64\x94\x79\x34\x8e\x33\xeb\x3d\x8e\x93\x8d\x9d\xcd\xbb\x47\xd1\x78\x41\x36\x48\x76\xd4\x6c\x30\x8d\x6e\x49\x9c\xd8\xef\x67\xff\x1d\x54\x15\x80\x02\xba\x79\x71\x92\x99\x9d\x99\x27\x73\xc6\x8a\xd4\x5d\x8d\x46\x17\x0a\x85\xba\xd7\x50\x8c\x4f\x5a\x50\x09\x49\x3d\x3e\x02\xa2\x49\xa1\x12\xaa\x1a\x3f\x1a\x8a\x27\x0e\x68\x2a\x33\x55\x73\xa2\x78\xfa\x08\xc8\x72\x28\xc6\xa7\x47\x29\x4c\x60\x45\x8f\x8e\xdd\x66\x7a\xd4\x1a\x29\x70\x22\xbb\x4a\xc7\xc7\x4f\x39\xa5\x78\xa8\xb0\xb7\x01\x59\xf6\x03\x03\xc9\x78\x28\x3f\x75\xd8\x2d\x0f\x4f\x38\xe9\x4c\x17\xb2\xaa\x2b\xd5\x98\x0e\x46\x7a\xd4\x82\xe9\x60\xa3\x6d\xa0\x0e\x26\xda\x06\xea\x60\xa1\x6d\xa0\x36\x03\x0d\x30\x7a\xaa\x0b\xc9\x0e\xb2\xb1\x5d\x36\x3b\xcc\xc3\x16\x4c\x4c\x2c\x30\xf5\x87\xa7\x29\x50\x42\x2b\x76\xea\x0f\x1f\xa6\x40\x09\xa9\xc0\xd4\x9f\xa6\x40\x31\xa5\xc0\xd4\x3d\x8c\xae\x64\xd1\x9e\xcd\x93\x23\x7e\x3f\x99\xee\xf8\x64\x28\x9e\x9c\x72\x80\x64\xaa\x47\xa7\xe9\x08\xf1\x34\x9f\x8e\xed\x2c\xf8\xfd\x64\x86\x96\x0d\x3c\x0e\xf7\xcb\x19\x58\xff\x39\x3d\x8f\x8f\x2c\x76\x4f\x80\x08\x39\xa4\xc9\x8b\xab\x78\x27\x82\xc8\x71\x7c\x94\xc0\x8c\xf7\x01\x4a\xb8\xff\xc3\xe3\x88\x98\x09\x28\xfe\xb4\x63\x98\xd7\xe3\x74\x4a\xa9\xe8\x70\xca\x45\x87\xe9\x5a\x96\x8c\x91\x26\x87\xaa\xbd\x3b\xde\x7e\x9b\x33\xf0\xe4\xc0\xb5\xb7\x39\x0b\x4f\x4e\x5b\x7b\x9b\x33\xf1\xe4\xa8\xcd\x64\x75\xd5\x3e\x5a\xe2\xfb\xc9\xec\x3b\x46\x98\xeb\x22\x53\x65\x15\x18\x29\xf1\x50\xfb\x63\xdc\x05\x97\xd0\xdb\x13\xe0\x5d\x5d\x80\x09\xdd\x3d\xb6\xdc\xe4\xa4\x0b\x30\xd9\x26\x27\x70\x0c\x77\x01\x26\x0b\x75\x34\x1e\x8a\x27\x1c\xae\x92\xeb\x70\x62\x59\x08\xfa\x11\xc1\x28\x15\x61\xe4\x88\x1d\xe9\x04\xb0\x73\x90\xab\x85\xbc\xca\x03\xbe\x9e\x3a\xc9\xc2\x8b\x0d\x16\x68\x29\xe7\xaa\xac\x65\x34\xe5\xd6\xfa\xe8\x22\xbf\x56\xd1\x9c\x9e\xa0\xfc\xc1\xf6\x58\x0c\x17\xd0\x0f\xec\x04\xf7\xfc\x71\x27\x68\xe0\xac\x4f\xbc\x78\x7a\x74\xd2\x09\x1a\xf8\xeb\xa9\xe3\xaf\x4f\x8f\x3a\x21\xc3\x1a\x8c\x1d\x41\x9d\x72\x3a\xd1\x95\xd5\x7f\x62\x1a\x39\x49\x70\x8c\x30\x1d\x7c\xb6\x0d\xd4\xc1\x67\xdb\x40\x1d\x7c\xb6\x0d\xd4\xe6\xb3\x31\xcc\x74\x91\x87\x3d\xf0\xe8\xe1\x50\x80\xae\x13\xe3\x0b\x80\xc2\xa9\x06\xac\xf2\x98\x6f\xf8\x00\x15\x90\xff\xd8\xca\x3e\xd1\xbe\x0f\x50\x01\xef\x8f\x4e\xdc\x1b\xdb\x63\x85\xa9\x1f\x9d\x0c\x45\x7c\x22\x5b\xa8\x4a\x65\x29\x99\xf1\x6f\x33\x20\xa2\x06\x44\x82\x10\x0c\x62\x0b\xa7\x1b\xa3\x64\x44\x88\xe3\x13\x90\xa7\x2d\xd6\x4f\x1e\x76\xc0\x8d\x63\x45\x01\xd6\xf0\x69\x17\x20\x23\x43\xc7\x02\xc7\x4f\x8e\x3a\x00\x19\x32\x1e\x39\x3d\x29\xc2\xac\x03\x64\xf8\x78\xe4\x98\x5a\x84\x36\x63\x0f\x56\xce\x1b\x1f\x1f\x5b\x32\x4d\xf1\x06\x60\x9c\x6b\x9c\x3c\x1e\x8a\xc7\x4f\xed\xbf\x2e\x28\x26\x8a\x8d\x5b\xac\x3e\x82\x64\xe2\xd8\xb8\xc5\xf5\x23\x48\x26\x92\x8d\x5b\x07\x40\x04\x19\xc4\xb2\xe3\x4e\x46\x4e\x80\x6a\xfb\xc7\xd4\x4d\xf5\x53\xa3\x73\xa3\xa2\x63\xe7\xd4\xfe\xe0\x60\x89\x7a\x60\x4f\xe0\x23\x10\x9c\x1d\x8c\x9a\xe4\xb2\x64\x74\x77\x6c\x25\x5c\x2b\x9b\x04\x08\xb5\x5a\xe5\x65\x72\xde\x83\x5c\xf0\x38\x01\x19\xef\x01\x93\xf0\x01\xfb\xef\x61\x0a\x93\xb0\x81\x53\xe0\x17\x09\x4c\x7a\x84\x30\x59\xc8\x82\x98\xab\x75\x72\xa4\xc2\x26\x67\xcb\x1c\x80\xc6\x7b\x41\xf1\xe3\x1f\x58\x01\x23\x84\x00\xc5\xa5\x00\x60\x05\x8c\x08\x02\x54\x24\x0c\x1c\xc5\x6c\x20\x5f\x46\xc7\x1f\x32\xc2\x47\xd1\xc6\xb0\x20\x6a\x3b\x88\xce\xe6\xb1\x28\xf7\x10\x56\xe3\x24\xfa\x38\x0f\x34\xde\x0b\x2a\x2c\xdd\x13\x12\x2c\x18\x0a\x3c\x54\x58\x3c\x90\x3c\x4e\x23\x14\x78\xa8\xb0\x7c\xa7\x43\xf1\xf8\x09\xc7\xc0\x2c\xaf\xd4\xa4\xca\x83\xba\x0e\xd8\x7e\x08\x0c\x33\x05\x89\x29\xce\x52\xf7\xc9\x93\x14\x26\xa6\x38\xfb\x71\x27\xad\x71\x62\x8a\xb3\x70\x0f\x5b\xe3\xc4\x14\x77\x6c\x3f\xcc\x89\xe7\xb3\xc2\x8a\xd7\x89\x85\x0d\xb8\x0a\x98\xe3\x1c\x61\xce\x74\xa5\x4c\x1d\x31\x67\x3a\x03\xd8\xb7\xcd\x65\x5e\x9a\x89\xae\x74\x50\x88\x8f\x40\x6c\xe6\xb2\xf3\x7c\xa1\x4d\x1d\xbf\x0f\x84\xeb\xd8\xf2\x67\xe5\xad\x44\x61\x66\xfa\x96\xbd\x9b\xea\xd3\xc9\xed\x44\x34\xb7\x72\x1a\xbf\x9d\x6a\xd0\x0f\xe3\xdb\xa9\xea\xfc\x38\xbe\x1d\x09\xab\xc7\xc0\x09\x4e\x2d\xf2\x8f\x53\x98\x44\xbe\xb0\xa7\x94\x67\x19\x9b\x84\x54\x7b\x42\x05\x94\x6e\x10\x50\xe1\x9b\x9f\xa6\x40\x29\x67\x01\x56\xe6\x80\xf8\xd6\x7c\x0a\xfc\x02\x7f\xb0\xfb\x47\xb1\x1c\xcf\x6f\x85\x7d\x36\x14\xf6\xff\xfc\x96\x7f\x0c\x29\x8b\x51\x17\xde\x3e\x4a\x28\x2b\x3a\xb4\x00\x64\xcc\xf7\x27\xfe\xe3\xb7\x3d\x86\x1e\x8e\x87\x02\xff\xf1\xdb\x1e\x37\x56\xac\xc0\x7f\xfc\xb6\xc7\x8a\xd5\xaa\xf0\x1f\xbf\xfd\xc8\xdf\x7e\x92\xec\x1f\xb8\x7d\xea\xcf\xb2\xf1\x50\xe0\x3f\x7e\xfb\xb1\xbf\xfd\x10\xcd\x57\x27\xd1\xbb\x9f\xf8\xdb\xa7\x43\x81\xff\xf8\xed\xa7\xfe\xf6\x93\x84\x07\x44\x47\xf8\xa3\xa1\xb0\xff\xe7\xb7\x3c\x4e\xd1\x64\xc5\xcc\x56\x70\xdb\x23\x14\x64\x3a\xf8\xc7\x6f\x87\x91\x4f\x87\x02\xff\xf1\xdb\x1e\xa1\x68\x2f\x63\x36\x33\xb8\x1d\x8c\x1c\x63\x14\x69\x4e\xa3\x77\x7b\x84\xa2\x35\x8e\x59\xe4\xe0\xb6\x47\xe8\xe9\xe9\x50\xe0\x3f\x7e\xfb\x31\xb7\xa0\xe0\x3f\x7e\xdb\x23\xf4\xf1\x78\x28\xf0\x1f\xbf\xed\x11\xfa\xf8\x64\x28\xf0\x1f\xbb\xed\xbf\xeb\xc9\x50\x3c\x09\x8a\x1b\xdc\xf2\x08\x7d\x6c\x65\x16\xf8\xc7\x6f\x7b\x84\xa2\x38\xc3\x44\x1a\xb8\x7d\xcc\x25\x23\xfc\xc7\x6f\x87\x17\x9f\x0c\x05\xfe\xe3\xb7\x83\x5c\x65\xc5\x17\xf8\xc7\x6f\x7b\x84\x5a\x35\x0f\xff\xf1\xdb\x1e\xa1\x4f\x8f\x87\x02\xff\xf1\xdb\x1e\xa1\x4f\x4f\x86\x02\xff\xf1\xdb\x1e\xa1\x4f\x1f\x0f\x05\xfe\xe3\xb7\x3d\x42\x9f\x3e\x1d\x0a\xfc\xc7\x6e\x33\x29\x18\x25\x99\x31\xe7\x19\x27\x47\xe1\xf6\x31\x29\x45\xe3\x23\x3e\xb9\x93\xf1\x36\x51\x00\x20\x82\x1c\x6b\x35\x52\xf7\x83\x43\x3c\x8c\xd5\x41\xfa\xc1\x21\x98\xc2\x78\x0c\xba\x2a\x57\x58\x01\xe2\x51\x80\x78\x44\xb6\xd2\xf1\x38\x9a\xc7\x69\x80\x78\x4c\x47\xc2\x78\x1c\xcd\xe3\x71\x90\xa3\x41\xb3\x39\xe2\x36\x1c\x80\x78\x12\x20\x8e\x41\xf7\xe1\x0a\x10\x40\x3c\x0d\x10\x8f\x9c\x27\xe0\x98\xcf\x23\x4c\x14\x2c\xa3\xf6\x1f\xbf\x1b\x30\x6e\x75\x59\xf7\x83\x43\x04\x8c\x83\xc4\x44\x3f\x38\x44\xc0\x38\xa8\x69\xf4\x83\x43\x04\x8c\x3f\x04\xe5\xe7\x11\xb7\x78\x03\x04\x3b\x89\x40\x42\xc2\x1f\x1c\x22\x7c\xc8\xc9\x11\xe9\xe7\xe3\x93\x68\x1e\xa7\xb1\x1a\x48\x3f\x38\x44\xc0\xf8\x09\xe8\xf8\x8f\xb8\xb5\x1c\x20\x9e\x44\xfa\x83\xfb\xc1\x21\x02\xc6\x41\x1f\xa5\x1f\x0c\x22\x4c\x03\x0e\x5e\x66\x6a\x82\xbb\x47\x91\xc2\xee\x7e\x70\x08\xa6\xb3\x59\x7d\x80\x7e\x70\x88\x80\x71\xb0\xc0\xd3\x0f\x0e\xc1\x8c\x23\x56\x85\xa4\x1f\x1c\x82\x89\xa5\x76\x0a\xf4\x83\x43\x04\x8c\x5b\xae\xeb\x7e\x70\x88\xf0\xa9\xa7\x20\xd3\xe0\x0f\x0e\x11\x30\x6e\x79\xaf\xfb\xc1\x21\x02\xc6\xc1\xda\x46\x3f\x38\x44\xc0\xf8\xe3\x53\x70\xa5\x72\x7f\xaa\x85\x08\x2f\x71\x7a\x16\x9f\xc3\xe3\x80\x71\xcb\x87\xdd\x0f\x0e\x11\x30\xfe\xc4\x4e\x90\x7e\x70\x08\x66\x10\x38\x71\x3e\x9b\x88\x27\x3f\x0e\x18\x7f\x62\x27\x48\x3f\x38\x44\xc0\x38\x9a\xdf\xf0\x07\x87\x08\x18\xb7\xba\x99\xfb\xc1\x21\x02\xc6\x2d\x67\x76\x3f\x38\x44\x40\xc6\xd3\x53\xf0\x3f\x72\x27\x24\x40\x04\x8c\x3f\x05\xcb\x3d\xfe\xe0\x10\x4f\x83\xf0\x38\x26\x61\xf8\xf8\x88\xcf\xe3\x49\x00\x40\xed\x37\xe2\x5b\x4f\x82\x00\x77\x04\x7a\xe1\x09\xb7\x4a\x01\x04\x33\x09\x82\x47\x07\x7f\x70\x88\x20\xe5\x1e\x3d\x05\x55\x9f\xeb\xfb\x00\x11\x44\x5c\xcb\xa0\xdd\x0f\x0e\x71\x12\x20\xec\x14\xe8\x07\x87\x78\x14\x20\xec\x14\xe8\x07\x87\x38\x0d\x10\x18\x1a\xc0\xe3\x03\x00\xe2\x71\x50\x5f\xc0\x91\x85\x3f\x38\x44\x40\x17\xb8\xb0\xe9\x07\x87\x08\x18\x07\xb7\x13\xfd\x60\x10\x01\xe0\xa1\x55\x46\xed\x3f\x7e\x37\x60\x1c\xfc\x68\xf4\x83\x43\x04\x8c\x83\xdb\x81\x7e\x70\x08\xa6\x57\x78\x87\x70\xc4\xa5\x9f\x06\x8c\x3f\x7c\x0c\x8e\x12\xee\x2d\x01\x88\x80\x71\x0c\xcf\x88\x94\x42\x80\x08\x18\x07\xb7\x1f\xfd\xe0\x10\x01\xe3\xc1\x17\x1f\x71\xe9\xa7\x01\xe3\x27\x76\x0a\xf4\x83\x43\x04\x8c\x83\x5e\x4a\x3f\x38\x44\x40\x28\x38\x29\xe9\x87\x87\x88\x4d\xee\x91\x1f\x30\x36\x25\x76\xde\x6d\x39\x50\xa2\xbb\x2d\xff\x49\x74\xb7\xe5\x3e\x89\xee\xae\x55\x51\xe8\x9b\x88\x67\xa2\x41\x20\x7c\xbe\xda\xa1\xb7\xa9\xcd\x7a\x9b\xda\xac\xb7\xa9\xed\x7a\x9b\xda\xad\xb7\xa9\xed\x7a\x9b\xda\xae\xb7\xa9\xed\x7a\x9b\xda\xae\xb7\xa9\xed\x7a\x9b\xda\xae\xb7\xa9\xed\x7a\x9b\xda\xae\xb7\xa9\xed\x7a\x9b\xda\xac\xb7\xa9\xed\x7a\x9b\xda\xae\xb7\xa9\xed\x7a\x9b\xda\xae\xb7\xa9\xed\x7a\x9b\xda\xae\xb7\xa9\xed\x7a\x9b\xda\xae\xb7\xa9\xed\x7a\x9b\xda\xae\xb7\xa9\xcd\x7a\x9b\xda\xae\xb7\xa9\xed\x7a\x9b\xda\xae\xb7\xa9\xed\x7a\x9b\xda\xae\xb7\xa9\xed\x7a\x9b\xda\xae\xb7\xa9\xed\x7a\x9b\xda\xae\xb7\xa9\xed\x7a\x9b\xda\xaa\xb7\xa9\x9d\x7a\x9b\xda\xa9\xb7\xa9\x9d\x7a\x9b\xda\xa9\xb7\xa9\x9d\x7a\x9b\xda\xa9\xb7\xa9\x9d\x7a\x9b\xda\xa9\xb7\xa9\x9d\x7a\x9b\xda\xa9\xb7\xa9\xad\x7a\x9b\xda\xa9\xb7\xa9\x9d\x7a\x9b\xda\xa9\xb7\xa9\x9d\x7a\x9b\xda\xa9\xb7\xa9\x9d\x7a\x9b\xda\xa9\xb7\xa9\x9d\x7a\x9b\xda\xa9\xb7\xa9\x9d\x7a\x9b\xda\xaa\xb7\xa9\x9d\x7a\x9b\xda\xa9\xb7\xa9\x9d\x7a\x9b\xda\xa9\xb7\xa9\x9d\x7a\x9b\xda\xa9\xb7\xa9\x9d\x7a\x9b\xda\xa9\xb7\xa9\x9d\x7a\x9b\xda\xa9\xb7\xa9\xad\x7a\x9b\xda\xa9\xb7\xa9\x9d\x7a\x9b\xda\xa9\xb7\xa9\x9d\x7a\x9b\xda\xa9\xb7\xa9\x9d\x7a\x9b\xda\xa9\xb7\xa9\x9d\x7a\x9b\xda\xa9\xb7\xa9\x9d\x7a\x9b\xda\xaa\xb7\xa9\x9d\x7a\x9b\xda\xa9\xb7\xa9\x9d\x7a\x9b\xda\xa9\xb7\xa9\x9d\x7a\x9b\xda\xa9\xb7\xa9\x9d\x7a\x9b\xda\xa9\xb7\xa9\x9d\x7a\x9b\xda\xa9\xb7\xa9\xad\x7a\x9b\xda\xa9\xb7\xa9\x9d\x7a\x9b\xda\xa9\xb7\xa9\x9d\x7a\x9b\xda\xa9\xb7\xa9\x9d\x7a\x9b\xda\xa9\xb7\xa9\x9d\x7a\x9b\xda\xa9\xb7\xa9\x1d\x7a\xdb\x42\x97\x6a\x9d\xa9\x9b\xf8\x6b\x30\x22\xef\x28\x81\xe9\x8a\x3c\x6f\x01\x75\x05\x9f\x7b\x0a\x70\x40\x1d\xf1\xe7\x21\xac\xc4\x01\x75\x86\xa0\x8f\x3d\x50\xdd\x0a\x3c\x40\x21\xe9\xc9\x51\x0c\x92\x86\x4e\x1e\x75\xc0\x74\x44\x4f\x8e\x4f\x1f\xc7\x30\x49\x00\xe5\x29\x38\xc3\x63\x90\xd8\x3b\x68\x0f\x2b\x9f\x28\x90\x97\x59\x12\x4b\x01\xa3\x70\x99\xd4\x83\x24\x33\x86\xd9\x1c\x9d\xa6\x50\xf1\x9c\x23\x01\xd4\xc3\xc4\x73\x7e\xc2\xe3\x93\x3d\x4c\x7b\xd2\xfe\x80\xcd\xaf\x75\xb5\xee\x50\x51\xfd\xa2\x03\xc0\x78\x27\x44\x1a\xc5\x19\xd1\x04\x40\xa4\x21\x9c\x11\x41\x00\x44\x1a\xbf\x19\x51\x43\x14\xab\x87\xd4\xf9\x30\x12\x9b\x00\x20\x8d\x38\x3d\xe5\x62\x13\x40\xa4\x13\x3d\xe2\x02\x1e\x40\xa4\xa9\x2a\x4f\xb8\x38\x0c\x10\xe9\x44\xad\xaa\xe5\x10\x5a\xc8\x6b\x55\x66\xaa\x0a\xaf\x71\x53\x0d\x7b\xd6\xc1\x4c\x8a\xc6\x2c\x92\x19\x1f\x71\x06\x11\x01\xa6\xdf\xb6\x19\x32\xcd\xca\x39\xe1\x0c\x34\x82\x4c\xbf\xf5\x21\x84\x93\x77\x41\x76\xe5\xe5\x78\x0f\x7b\x21\x6f\xca\x38\xe8\x0c\xde\xf9\x88\x05\xf0\x15\x6a\xa9\xcb\xe9\x22\x9f\xcd\x58\x08\x5b\x08\x92\xf0\x7a\x0f\x87\x4b\xc9\x6e\x23\x60\xba\xa8\x0f\xb9\xac\xc1\x01\x53\x22\x04\x51\xb2\x6b\xc4\xf4\x73\x1f\x73\xad\xa9\xc8\xe7\x8b\x28\xf0\x1f\x4d\x4e\x10\xec\xe2\xd5\x09\x0f\x14\xc7\x19\x62\x32\x95\xb7\x00\x79\xa8\x38\xce\x10\x33\xa9\xbc\xd2\xe0\xa1\xe2\x38\x43\x48\xa3\x62\x18\x71\x50\x71\x9c\xa1\xe3\xad\x1c\x2a\x8e\x48\x07\xfd\x03\xa2\x7a\x8e\xa3\x37\xf2\xa8\x63\xa4\xa2\xd8\x7c\xe5\x81\xc6\x7b\x41\x25\x52\x50\x1c\x4d\xe7\xa1\x98\xec\xd9\x0e\xa5\xf6\x50\x27\xb1\x36\x19\x87\xd1\x01\x54\x3b\xc6\x04\x37\xc3\x98\xeb\x7c\x31\x64\x9a\xf6\x76\xba\x79\xd0\x74\x8b\x1d\x6d\x1e\x35\xdd\x63\x47\x2d\x52\xda\x14\x7b\x62\x25\x1f\xaf\x1c\xc4\x90\xb1\xc9\x93\x09\x06\xe3\x78\x12\x2c\x60\x05\xd2\x65\xdc\x8f\x18\x28\x0a\x17\x75\x67\x7a\x38\xfb\x1c\xd4\xee\xa1\xda\x07\x36\x44\x39\x7a\x3e\xef\x81\x92\x03\xf0\x31\xe8\x20\x8f\x52\xa8\xe4\xd0\x3e\x3d\xe6\xfa\x94\x87\x4a\xe3\xce\x31\x69\x21\x85\x8a\x71\x0b\xa9\x3a\x47\xd1\xdc\x93\xf0\x5a\x98\xd7\x69\x14\x5e\xcb\xc0\xc6\x7b\xc2\x25\x5f\x00\x31\xf1\xe3\x93\x36\x5c\xf2\x0d\x76\xe5\x9f\x3e\x69\x83\xc5\x1f\xf1\xe4\x31\x33\x20\x22\x54\x12\xfc\xfb\xf0\x98\xa2\x15\x43\xa2\x22\xc2\xc5\xf1\x91\x63\x4c\x74\x3b\x8d\x0e\x29\x06\x37\x8e\xb4\xd6\x63\x30\x73\xc7\xfb\x3b\x8d\x92\x1c\x9f\x9e\x38\x0a\x89\xb7\x78\x1a\x28\x09\x91\xb5\x40\x25\xc9\x2e\x4f\x63\x25\x41\x1c\x3b\x7e\xd8\xda\x92\xad\x18\xe1\xf1\x43\x67\xe7\x4a\xe7\x98\x86\x09\x8f\xc7\x3e\x4f\xe4\xd1\xc3\x0e\x48\xb5\x07\x64\xad\x54\x11\x1f\x05\x4e\x53\x3d\x4e\xe8\xc1\x41\x26\x91\xff\xc7\x6d\x66\xe9\x41\x93\xc8\xff\xf1\x51\x1b\x9d\x0e\x34\x8e\xfc\x07\xb5\x3f\x45\xa8\x03\x4d\x42\xff\x3b\x70\x9a\x72\x17\x2f\xf4\x1d\x9f\xb4\xc1\xba\x84\xc3\x2e\xb8\x2e\x11\xf1\xa8\xe3\xb5\x5d\x82\xe2\x93\xa3\x36\x5c\x97\xb8\xc8\x50\xbe\x8c\xf3\x31\x1e\xb9\xc3\x84\x11\x78\xa9\xca\x98\x83\x92\x58\x49\x00\x49\xe6\x07\x7a\xb4\xf8\x62\x11\xc0\x78\x27\x44\xfc\xe9\xd1\x2a\x12\x44\xfc\xd1\x91\xa0\x43\x10\xf1\xe7\x46\x19\x28\x4b\x59\xe9\xc0\xb9\x80\x02\x4f\xac\xc2\x70\x1a\xdd\x8f\xa7\xf9\xe8\x98\x5b\x8e\x10\x22\x09\x95\x7d\xc2\x55\x24\x84\x88\xa7\x09\x5b\xd7\x9f\x12\x08\x91\x84\xc9\x72\x05\x69\xa9\xb2\xbc\x59\x76\xe4\x70\x77\xa4\x53\x23\x6c\x47\xc6\x6d\x40\x0b\x40\x24\xf9\x1e\x4f\x4e\x51\x07\x0a\xc7\x12\x07\x8b\xc5\x94\xf1\x51\xc4\x22\x38\x60\x2c\xa9\x3c\x7d\x14\x2d\x18\x83\x8b\x65\x95\x98\x89\x71\xb8\x58\x5a\x79\xf4\x28\x5a\x3c\x80\x5b\x35\xd5\xaa\x08\x18\x39\x79\xec\x58\xd8\xb8\x0b\x8e\xf1\xe3\x31\xd9\xb1\xd3\x0f\x41\x40\x66\x5c\x85\xed\x31\x6e\x7f\x09\x02\x32\xab\xf6\x63\x0a\x4a\x4f\x3f\x05\x01\x03\x3f\x7e\x88\x3e\xa8\xf4\x4b\xd2\x23\x08\x8e\x46\xb0\x53\x7a\x6b\x3d\x01\xb6\x18\x37\x70\xa2\xa3\x93\xf6\x1c\xcd\xaa\xca\xcb\x79\xdb\x01\x8d\x51\xf6\x11\x68\x2b\x31\xe2\xf1\xb1\xb7\xb8\xc5\x90\x98\x1b\xc1\x73\x6e\x9e\x82\x3d\x8c\x2b\x84\xcb\x3c\x2b\x53\x61\x1f\x19\x36\x17\xe2\x96\x79\x59\x4f\x2b\x25\x97\xb1\xb1\x87\x94\x16\x0f\x64\xea\x75\xa5\x4d\x47\xce\xfc\xb1\xf7\x72\x78\xa0\x8e\xb4\xf9\x0e\xa8\x8e\xcc\xf9\x20\x00\x7a\xa8\xae\xe4\x79\x6f\x11\xf6\x50\x5d\xf9\xf3\xde\x2e\xb7\xd4\xd3\xa9\x34\x79\xd9\x9e\x55\x18\xa9\x94\xd7\xf2\x47\xdd\x11\x05\x7f\x1c\x89\x6d\x0c\x2c\xfd\xc8\x4d\x70\x69\x1c\xfa\x63\xee\x00\x60\x70\x69\x40\x7a\xa4\x14\x30\xb8\xf4\x53\xc7\xcc\x2f\x58\xca\xeb\x75\xcc\x72\x82\x52\x64\xef\x75\x64\x6a\xfa\xfb\xba\xc8\x0a\x39\x65\x5f\xff\xd0\x99\xfc\xfc\x99\x02\x09\x78\x59\x25\x27\x81\xf9\x41\x7a\xfa\x31\xcb\x89\xf7\x30\x4c\x73\x74\x39\x82\xa7\xc7\x29\x10\x53\x1c\x9d\x56\xf5\xe8\x49\x0a\x14\xeb\x8d\xf1\x39\xe8\x81\x3a\xd2\xb1\xbc\x86\xdf\x95\x0e\x78\xca\xa2\x34\x3a\x53\x01\xdb\x00\x89\x38\x6c\x27\x13\x03\x24\x4b\xf8\xf0\x61\x0a\x90\x88\xf1\x47\xe9\x7d\x6e\x7f\x03\x84\x3d\xed\x80\x18\xef\x06\x89\x67\x7a\xda\x9a\x68\xcb\xf4\xf6\xa8\xf5\xb1\x2d\xcb\xdb\xc3\xc7\x1c\x84\x1f\x5c\x98\xff\x80\x0c\xff\x24\x82\x48\x50\xfa\x70\xcc\x79\x4a\x7a\x5a\x01\x52\xc1\x66\xef\x39\x58\x72\x50\x1d\x7b\x57\x73\x70\x82\xa4\x67\x94\x9d\x2a\x72\x76\x77\xf8\xaf\x64\xa1\x36\xe8\xd3\xa8\x61\x1c\x71\xc0\x48\x9d\x44\x5b\x34\x14\x6a\x38\x4e\x81\xc6\x31\x55\xc2\x07\x7a\x76\xee\xa1\x8e\xb7\xa9\xa6\x1e\xea\x61\x6c\x7a\x42\x2d\xaa\x05\x15\x82\x0d\x5c\xe2\xcd\x13\x0e\xd3\x3a\x3c\xc6\x8f\x1f\xb5\x2c\x15\x11\x20\xf3\xb6\x3d\x6e\x59\x3e\x22\x48\xb6\x4f\xdb\x25\x5b\x22\x48\xb6\x59\xdb\x16\x90\x08\xf2\x24\x12\xa1\x12\x2b\x88\x85\x6c\x9d\x71\xe0\xf3\xc1\x20\x80\x93\xc7\x5d\x80\x29\xbd\x1d\x71\x27\x67\x04\x99\x92\x1d\xac\x71\xe7\xcb\x53\xea\x3b\x49\x69\xcb\x43\xb6\x89\xd0\x9b\x0e\x56\x72\x25\xd7\xf2\x66\x91\xaf\x12\x2b\x0d\x1c\xda\x1e\x4a\xc9\xe9\x62\xd5\xcc\x66\x31\x10\x3a\x52\x1f\xa5\x40\x69\xfe\x53\x37\x54\x7a\xfc\x44\x5e\x5d\x0f\x95\x1e\x3e\x8f\xb8\x15\xc2\x43\xa5\x49\x51\x4f\xb9\x19\x62\xa5\xaa\xa6\xcd\xff\xbc\x23\xbb\x6d\x5c\x41\xfb\x1f\xbf\x9f\x66\xf5\x8f\xb9\x41\xb7\xcb\xa4\xf2\x94\x3b\x7f\xbb\xac\x29\x8f\xb8\x3f\xbe\xc3\x90\x02\x5f\xe0\xef\x17\x4d\x10\x82\x80\x22\x4e\x21\x71\x6d\xcc\xee\xa7\x53\x7c\x1c\x6d\x99\xa2\x59\xa6\x05\x07\x22\x81\xd0\x02\xa4\x79\x5c\x91\x5e\x60\x01\xd2\x1c\xae\xe3\x68\x5f\xe8\x9b\x2c\xa9\x73\x81\x56\x8d\x13\x7e\x50\x27\x02\xb9\xfd\x0c\x70\x33\x9e\xc4\x00\x8c\x85\x51\x06\x22\xfb\x96\x44\x04\xb7\xa8\x3c\x89\x3f\x26\x91\xbd\x8f\x29\xfb\x90\x7d\x4d\x2c\x74\x83\x6e\x13\x99\x25\xd3\xf3\x8e\x1d\x88\xad\xdd\x1c\xdf\x6b\x29\xa5\xec\x5e\x4b\x1d\x65\xf7\x5a\x8a\xa8\xbf\xa7\xcd\x3a\x2e\x37\x44\x59\xe7\xdc\x09\xe3\x81\x3a\xd2\xfa\x82\x9d\xd0\x43\x75\xe4\xf5\x05\x63\x80\x87\xea\x48\xec\x0b\x19\xe7\x1e\xaa\x23\xb3\x2f\xc4\x5b\x55\x7a\x2d\x23\x43\xce\xa9\x3f\x28\x8f\x5b\x30\x63\xae\x5c\x60\xbd\x9b\x47\x2d\x20\x3f\xf5\xd3\xc7\xe4\x94\x0c\x0b\xef\x81\x42\xb4\xe1\x13\x52\x34\xdb\x33\x0a\x31\x9c\x4f\x51\x12\x09\xab\x6f\x64\x96\x15\x2a\x46\x7a\xab\xfc\x4c\x6a\xd8\xf4\xd6\x7e\x2f\x6a\x74\xda\x34\x4f\x8e\x38\x7e\x3a\xcd\x99\xf6\x74\xf0\xea\x7d\xa7\x21\xd3\x9e\x34\x4f\xe2\xd7\x24\x3c\xfe\x74\x28\x1e\x3d\xf6\x00\x65\x16\x93\xd0\xb1\xdd\x30\x60\x4c\xf4\xd6\x8c\x54\xc1\x3c\x39\x75\x47\xf9\xe3\x04\x62\xcc\x4f\x7b\x12\x2f\x9e\x26\x30\xfe\x8b\x1e\xfb\xda\x1a\x3e\x46\xaa\x55\xd0\xe0\xf4\xb1\x17\x2d\x52\x98\x93\xad\xd3\x31\x0b\x55\xc4\x15\x80\x48\x2f\x78\x92\xc0\xa4\x4e\xbe\x4e\xa0\xd4\xf9\xf0\x94\x1b\x1b\x1d\x50\xea\x76\x78\xcc\x7d\x62\x0e\xa8\xc3\x93\x19\xdc\x18\x26\x57\x65\x29\x23\x16\xf8\xe4\x78\x28\xbc\xcf\x11\xef\x77\x08\x0c\x5e\x5e\x40\x88\x0e\x41\xc1\x5b\xad\x11\xa2\x43\x40\x08\x34\x01\x10\x6d\xc1\x20\x60\x65\xa3\x2d\xdb\x6b\x54\x2d\x33\x36\xb3\x77\x27\x30\x81\x5d\x03\x9f\x85\x13\x36\x7d\x15\xab\x62\xf5\x84\x82\xc9\xc2\xb6\x4d\xed\xd6\xe0\xda\x18\x47\x27\x50\xdb\xf2\x61\xa7\xf2\x34\x3a\xc6\x3c\x0c\x9b\xb4\x3d\x4f\xc7\x51\x81\x02\x0f\xc5\xa6\x0d\x81\xa6\x91\xfb\xd0\x43\x3d\x8c\x34\xbc\x27\x4f\x3b\x5f\x18\x66\x6e\x17\xea\xa8\x35\xf1\xd8\x82\x7e\xec\x98\x89\x17\xc9\x3b\xea\x6c\x3c\x7d\xd2\xf2\x1a\x74\xd4\xd8\x78\xf2\xa8\xe5\x32\xe8\xa8\xaf\x01\x86\xac\xd8\xd4\xd6\xae\xad\x81\x0b\x13\x5b\xb6\x3b\x8c\xfa\x1d\x93\x2f\x5b\x76\xef\xc8\x75\x6f\xef\x77\xb9\xa5\x23\x80\x0e\x77\x74\x50\xc8\x2c\x40\x87\x1b\x3a\xa8\x63\x16\xa0\xcb\xfd\xec\x25\xe6\x4d\xd6\xb0\x47\x3c\xde\x95\x01\xb5\xd2\x32\x3a\xa1\x5a\xe9\x19\xa1\xe8\x06\x83\x6a\xa5\x69\x84\x98\x66\x06\xd5\x4a\xd7\xf0\x71\xec\x2d\x7f\xc9\x63\x1f\x88\xeb\x8f\xf5\xb6\xa7\xe4\xe9\x53\x8a\x53\x64\xf4\xd3\xf2\x91\x60\x4d\xd1\x78\xbf\xb6\xbc\x23\x60\x13\x3a\x89\x44\xac\xb6\x5f\x04\x7c\xeb\x47\x11\xe5\xd7\xcc\x13\x4e\xf1\x45\x3c\xf8\xa4\x96\x2d\x8f\xe0\x23\x16\x26\x5f\xcb\xf4\xe4\xb4\xaf\xf0\x3a\x44\x2d\xd3\x63\x33\x92\xfb\x6b\x59\xb6\xad\x1e\x5e\xa0\xaa\x17\xb9\xa9\x0b\x56\x11\xef\xd4\x95\x31\xf1\x55\x47\x09\x24\x35\xb7\x45\xba\x2a\xc1\xa4\x16\xc5\x48\x6a\x21\x98\xd4\x9e\x18\xb9\x9a\x08\x26\x35\xb1\x45\x3b\xb1\xd6\x4b\x59\xeb\x68\x36\x4f\x9f\xb2\x63\x03\xef\x8f\x77\x01\x24\xe1\x51\xc7\xec\x58\x41\x80\x78\xa2\x76\xe9\xfd\xa9\x82\x00\x49\x60\xd4\x09\x3b\x55\x5a\xa6\x80\x53\x1f\xed\x78\xd4\x82\x89\x76\x58\x5c\xda\xb1\xad\xff\x1f\xb5\x0a\x3b\xb6\x35\xff\xa3\x56\x59\xc7\xb6\xce\x7f\xd4\xaa\xea\x18\x57\xfb\x09\x22\x5a\x78\x53\xdb\x1e\x60\x19\x25\xd8\x70\x3c\x0b\xdc\x60\x0a\x00\xb7\xa2\x67\x73\x1b\xac\x00\x10\xbd\x7d\xd2\x02\x4a\x2c\x65\x51\x72\xc0\x06\xdd\xdf\x7e\x99\xcf\x23\xb9\x59\x28\x19\xbe\xeb\x24\x18\x8b\x9f\x72\x80\x34\x7c\x63\xcc\xa3\x96\x01\x22\xa5\x6e\x88\xbe\x3e\xe1\x10\x29\x6d\x9f\xf2\x8f\x06\x88\x94\xb2\x4f\x39\x0f\xec\xaa\x01\x13\x91\x03\x00\x98\xa5\xbe\xea\x2a\xae\xeb\x25\xab\x4d\xfe\xd7\xa3\xe8\x7e\x87\xe3\x35\x06\xe8\xf0\xb8\xc6\x00\x1d\xae\xd6\x18\xa0\xc3\xc7\x1a\x03\x24\xc6\x3e\x6e\x5c\xbe\xf3\xe1\xb3\x3b\x87\x87\xe2\xcd\xd7\xdf\x7d\xfb\xfc\x85\xf8\xf2\xe5\xab\x17\xcf\x44\x91\x4f\x32\x5d\x1f\xfe\x68\x0e\x8b\x7c\xf2\x6e\x36\xfa\xd1\x58\x90\xe7\x7a\xb5\xae\xf2\xf9\xa2\x16\xfd\xe9\xc0\x9e\x84\xc7\x50\xac\xfb\xf9\xa2\xd2\xcb\xbc\x59\x8a\xaf\xdf\x88\xf3\xa6\x5e\xe8\xca\x8c\xc4\x79\x51\x08\x80\x35\xa2\x52\x46\x55\xd7\x2a\x1b\xd9\x31\xbe\x33\xa1\x4f\xba\xd1\x4d\x35\x55\x62\xaa\x33\x25\x72\x23\xe6\xfa\x5a\x55\x25\xb6\xd1\x96\xe2\x4f\x6f\xbe\x38\x30\xf5\xba\x50\xa2\xc8\xa7\xaa\x34\x4a\xd4\x0b\x59\x43\xcb\xef\x89\xb2\x23\xcd\x74\x53\x42\x47\xd4\x7a\xa1\xc4\xab\x97\xcf\x5f\xbc\x7e\xf3\x82\x2a\x72\xdf\xe9\x35\x06\x3b\x69\x4d\xeb\x5e\x28\xef\xfd\xe7\x4a\x4e\xc4\x44\xce\xed\x04\x9a\x3a\x2f\xf2\x7a\xed\x5b\x45\xb1\x0a\xe2\x33\x71\x26\x7e\xe6\x6d\xbd\x2a\x25\x6b\x25\xa4\x68\xca\xfc\xa7\x46\x09\x55\x36\xcb\xb8\x7b\xd7\xff\x35\xcd\x6a\x55\x29\x63\xc4\xcf\x45\x5e\xd6\xcf\x17\x6a\x7a\x65\x3e\x6c\x6c\x87\x75\x2e\x16\xcd\x52\x96\x62\x56\xe5\xaa\xcc\x8a\x35\x5e\x9d\x41\x5b\xcb\x49\x33\x9f\x53\xa7\xc5\xd0\x18\xeb\xeb\xc9\x8f\x6a\x5a\x7f\x10\xe7\xd1\x14\x00\x1f\x37\xba\xec\xd5\xd0\x77\x4e\x56\x4a\xa8\x9f\x1a\x59\x08\x68\x4c\xb7\xae\x17\x79\x39\x87\x1e\x6b\xec\xd3\x46\x53\xf8\x98\x17\xf6\xf9\xce\x3e\x59\x87\x87\xe2\x7b\x25\x2c\xfa\xa4\xc0\x16\xa2\x42\xc3\xdb\x85\x34\xa2\xd4\x61\x50\x61\x16\xd0\x31\x73\x62\xa1\xa9\xdf\xf9\x52\x1c\x1c\x88\x1b\x25\x6e\x64\x59\x43\xd7\x68\x3b\x9c\x5b\x8a\x72\x2e\x56\x55\xbe\xcc\xeb\xfc\x5a\x19\xea\xb0\x59\xac\x47\x42\xfc\xa9\xa9\xe9\xc3\x55\x65\xb0\xc5\x5d\x5e\x4e\x8b\x26\x53\x42\x37\xd8\x32\x6c\xc4\xfa\x52\xa9\x1b\x9a\x18\xce\x3a\xea\x51\xf5\x2d\x36\xc8\x12\xd7\xb2\xca\xe5\xa4\x50\xa2\x52\x33\x55\xa9\x72\x0a\x3d\xb9\x85\x64\x7d\x2c\x2d\xf8\x7f\x11\x18\x76\x5e\xd3\xd8\x49\x6d\xa6\xab\xa5\xf8\xb7\x2f\xbf\x7b\xfd\xfc\xed\xcb\xaf\x5f\xf7\xff\xeb\xfc\xdb\xd7\xe7\x5f\xbd\x18\x8c\x84\x70\xd7\x2c\xb1\xca\x52\xe8\x95\xc5\x9d\x2c\xec\x48\xca\x4c\xe5\x4a\x85\xf6\xb3\x76\x09\x56\xab\x62\xed\x6a\xc7\x47\xe4\xf2\xa5\xae\x84\xba\x95\xcb\x55\xa1\xb0\x71\x2e\x2e\x0d\x75\xf7\xfa\x2f\x59\x99\xfe\xbd\x7f\xeb\xdb\x2d\x5b\xe7\xe5\x7c\x30\x14\xff\xa6\x4a\xbb\x49\xbe\xfb\xf6\xe5\x73\xd7\x60\x10\x3f\xde\x6e\xf1\xfb\x9d\xad\x61\x7f\x16\xee\xf9\x67\xe2\xde\xbf\x5b\x1e\xb0\x19\x16\x9b\x8c\x3d\x13\xf7\xfe\xac\xf5\xbc\x50\x0f\xee\x61\x33\x6a\x98\xeb\xf7\x76\x39\x2a\x65\x9a\xa2\xb6\x18\xc4\xa1\x86\x02\x21\xff\xed\xf8\x4f\xf7\x38\x71\xb1\x2f\xe0\xd4\x65\xea\x6a\x68\x97\xc4\x20\x89\xd1\x42\x9a\xba\x0a\x0d\xcd\xfe\xad\x7f\x21\x0f\xfe\x7a\x79\x7f\xf0\x43\xbf\x7f\xf1\x97\x1f\x06\x97\x0f\x06\x3f\x0c\x0e\xe7\x39\x6b\xb0\x0d\x2d\x01\x87\x62\x56\xc2\x58\x81\x62\x5d\x3f\xc0\x7a\xbd\x52\x7a\x06\xef\xb9\x20\x80\x4b\x71\x76\x26\x7a\x4d\x09\xdd\x62\x55\xd6\x1b\xf8\x76\xba\xd0\x70\x59\xf4\xbe\xc3\x56\x79\x9e\x5e\xb0\xd3\x1f\x3d\x4d\x8d\xb4\xb1\x39\x61\x05\x7d\xf9\xf9\xd8\xfe\xb6\x7d\xf9\xac\x74\xcd\xd7\x22\x2c\x8c\x3c\x7b\x89\x9a\x82\x5f\x53\x47\x82\x0d\xb0\x17\xb3\xf2\xb2\x5f\x5d\xfb\xb6\x85\xd4\x29\x11\xdf\xc3\x07\x4a\xbe\x22\x21\x42\xfc\x98\x59\xe9\x87\xb9\x13\xb7\x41\xac\xae\xa9\x0b\x62\xbc\x87\xbe\x74\xd3\xe0\x0c\xd7\xee\x62\x6a\x21\xcd\xa7\x4c\x44\xf2\xbc\xc8\x55\x59\x1b\x80\x95\x59\x86\x44\xef\x7a\x0c\xd6\x5a\xa8\xdb\x5a\x95\x59\x07\x99\x0f\x36\x50\x4f\xc0\x05\xf5\x50\xf0\x1b\xe0\x59\xf8\x75\xc8\xaf\xfb\x8d\xf1\xac\xe3\x1a\x40\x02\x72\xfe\xfd\xed\x57\xaf\x9e\x45\x94\xc9\xdb\x5e\x2e\xe5\x8a\xde\x07\x8d\x2d\xfe\xd0\x7b\x26\x7a\x9f\x16\xf5\x67\xd4\xe9\x42\x88\xde\xe7\x70\x69\xce\x2f\x7d\x0a\x97\xe4\x72\xc5\xae\xdd\x83\x6b\x3f\x35\x9a\x01\xde\xeb\xdd\xb3\x17\xff\xcf\xc3\xa7\x9f\xf5\x10\xef\x71\xa7\xf6\x68\x3f\x5c\xfc\xe1\xf3\x4f\x7f\xb8\xf7\x43\xef\xf2\x70\xce\xb7\xc0\x40\xfc\xec\xc0\x97\x72\x75\xb1\xbc\xa4\xb6\xf1\x1f\xf8\x02\xfe\x59\xd5\xc0\x73\x5c\x87\x47\x39\x9d\xaa\x55\xad\x32\xf1\xdd\x4b\x51\xc8\x72\xde\xc8\x79\x68\x54\xee\x0e\x28\xff\x0e\xec\x06\xfd\x41\x4c\x65\x51\x4c\xe4\xf4\xca\xd3\x83\x5d\xc8\xbc\xbc\xd6\x57\x0a\xe9\xc0\xbe\x02\x19\x83\x19\x09\x2b\x08\x38\xf6\x02\x23\xaa\x5a\x55\xc0\x27\xfd\x34\x0a\x0d\xcd\x50\xec\xde\xe1\x87\xed\x68\xae\xea\x73\x98\xe1\x2b\x37\xb7\xa8\x79\x29\x4d\x23\x74\x71\xdc\xf4\xd4\x68\x6a\xe5\x10\xf5\xa6\x59\xad\x74\x55\xab\xac\xef\x3b\x9a\xe2\x8d\x51\x3e\x7e\x52\x76\x3c\x17\x5e\xf1\x59\xda\x95\xd4\xa8\xfa\x6d\xbe\x54\xba\xa9\xfb\x7e\x42\x7c\xff\xb9\x27\xfb\x17\xa5\xbc\xce\xe7\xb2\xd6\xd5\xc8\x61\x38\xac\xe5\x01\xb4\x6a\x7c\xd7\x1b\x5c\x86\x1d\x6d\xe5\xb3\xb0\x70\xfb\x7e\x12\x47\x4c\xc4\x4b\x6f\xf2\x32\xd3\x37\x04\x2e\x3e\xfd\x94\x7f\x72\xb4\xb9\xbf\x91\x15\x1c\xed\x3f\x35\xaa\x5a\xbb\x63\x99\xba\x93\x2e\xa4\x59\x44\x2d\x42\x6b\x79\x65\x8f\x46\xd1\x54\x45\xfa\x40\x38\x29\x7b\x76\x41\xc7\x67\x70\xc0\x7d\x6a\x7f\x3f\xc6\xdf\x7b\x42\x96\x99\x1d\x6a\xea\x7a\xeb\xb3\xfe\xdc\x24\x52\xf0\x13\xf7\x67\xa0\x8c\xf1\x33\xd1\xc3\xc7\x87\xf0\xf7\xb1\xff\x5b\x7c\x18\x51\x63\x7d\x49\xad\xf5\x41\x6a\x92\xab\x95\xb2\xc7\xcd\xb2\x29\xea\x7c\x55\x28\x51\xe7\x4b\x3c\xec\xed\xc8\x7c\xd6\x43\xa1\x4b\x7b\x20\x23\xa1\x16\xd2\xd4\xd4\xf9\x1b\x24\x0e\x1c\xc7\x3d\x87\x74\x9d\x34\x67\x2d\x33\xd7\xdf\xde\x4a\x0b\x2b\x69\x2c\x4b\xb4\x2c\xb8\x99\x2f\x44\xa6\x52\xa6\x23\x26\x6a\xa6\x2b\x25\x26\xca\xa2\x4c\x66\x99\x02\x74\x90\x40\x40\x47\x2a\x22\x62\x53\xf3\x54\x98\x3e\x49\x61\xd8\x7e\xb3\xa2\x7e\x34\xd0\xf1\x18\xbb\xbf\xe6\xb5\xc0\x66\xbe\xb8\x2d\xa5\xdb\x86\x85\x92\xd0\xbd\xa6\xf7\xc7\x1e\x76\x11\xee\xfd\xb1\xe7\x1b\x08\xe7\xf3\x52\x57\xbc\xbb\xf9\x6c\x04\x43\xfe\x27\x20\x8c\x91\x19\x9b\x42\xd8\x82\xec\x62\xd4\x48\xf8\x8f\xae\xcd\x39\x9f\xf8\x99\x88\xc0\x9b\x89\xa9\x2b\xe8\xc9\x7b\x87\x9d\xac\x3f\x7f\xf0\x7f\xaf\x64\x0e\xe2\x43\xf4\xd4\xaa\xc8\xeb\x7e\xef\x53\xec\x77\xda\xd5\x47\x1a\x9e\xea\xea\x52\xef\x86\x14\x67\x08\x73\x91\x5f\xba\xe1\xce\x7a\xb4\x21\xab\xeb\x8b\xf6\xfa\xf5\x2d\xf8\xc5\xd1\xe5\xe0\x52\x9c\x75\x2c\x2f\xde\x1e\x5f\xb6\x3a\x4b\xdb\x63\x35\xda\xd4\xdf\x7d\xfb\x8a\x63\x74\x25\xeb\x45\x07\x37\xfb\xee\xdb\x57\x1d\x1c\x8c\x1f\x10\xb4\xa7\xab\xa6\xb4\x34\x4e\xcf\xe0\x70\xbc\x71\xab\xbd\xd0\x9e\xc1\xaf\x66\x25\xf4\xda\xf6\x15\x7a\x41\xdc\x09\xb9\x90\xcb\x95\xdf\xa8\x79\x59\xab\xb9\xaa\x40\x28\x16\x66\xa5\xa6\xf9\x2c\x57\x99\x80\xe0\x9b\x94\xf4\x09\xf6\x83\xb8\x06\x8a\xc7\x1d\x5a\x6b\x4b\xb3\x53\x3b\x28\xd2\x6c\x1b\x7c\x99\x97\xf0\xc0\x32\x2f\xf3\x65\xb3\xa4\x43\x0f\x74\x00\x2f\x7b\x77\x3c\x25\x6f\xf1\x29\x79\xbb\xf1\x29\xaf\x39\xc1\x37\x31\xb4\x5d\x0f\xed\xdb\x86\xf6\xe1\xb0\x9e\xd7\xe2\x0f\xf6\x6a\xb4\x70\xcb\xbc\xfc\xcc\xdf\xfe\x1c\xe0\xa3\xdb\xf2\x96\x75\x95\xbe\x8e\x10\xf9\x4a\xcd\x6a\xb1\x92\x99\x90\xa2\x6c\x96\x13\x87\x44\xc4\x2b\x35\xd3\x87\x6d\xef\x76\xfb\x5f\x55\xa5\x5b\x87\x3b\xf2\x8d\xf7\xfe\xb3\x69\x28\xfb\xe5\x61\xd4\x95\xdc\x80\x5a\x7a\x8d\x85\xce\x94\xc9\x2b\x95\xd1\xa5\xcd\xdd\x9b\x57\xc0\xee\xdc\xe0\xd2\x44\x9a\x97\x43\xe8\x5f\xed\x77\x71\x25\x14\xa0\x87\x34\x78\x44\x94\x4e\xe1\x03\x88\xc1\x68\x25\xb3\x37\x96\xed\xf4\x11\x74\x28\x7a\x47\xbd\x54\x11\xc4\x4e\xdf\x8e\x65\x4e\x75\x59\xcb\xbc\x04\x4e\xec\x8e\x0f\x9c\x9c\x6b\xb3\x2d\xa6\x0b\x59\xc9\x69\xad\x82\x58\x0b\x87\xe0\x52\xd5\x0b\x9d\x89\xa5\xcc\x61\x04\xfc\x14\x59\xe7\x53\x31\x95\xd3\x85\xd7\x1a\x0b\x59\xcd\x95\xa9\x85\x5c\xea\xa6\x84\x93\x0d\x4d\x48\x76\x68\x50\x10\xaf\x55\x25\x2a\xf5\x53\xa3\x4c\x0d\x7d\xde\x5f\xd6\xa4\x41\x5b\xfd\xdd\x09\xd8\xb5\x16\x73\x55\xaa\x0a\xec\x0d\x76\xe3\x18\x59\xaa\x62\x2d\x16\xcd\x5c\x85\xa1\xa1\x13\xbc\x1f\x7d\xe3\x0e\xea\x58\xb7\xae\xd9\x8d\xba\x4e\x9e\x73\x87\xb8\xd0\x85\x9c\x3e\xd4\x7f\x03\x23\x02\x26\xca\x7d\xef\xc7\xe5\x4b\xcb\x97\x14\xb8\x1e\x4e\xed\x0f\x67\xe2\x28\xda\x0a\xbd\x9e\x3f\x06\x66\xe2\x0c\x94\x88\x78\x50\xb7\x8f\xee\xce\x46\xe1\x0b\x70\x08\x7e\x45\x9c\x89\x5e\xd0\x6e\x71\xd0\x9b\x45\x5e\x28\xff\xea\xcf\x23\xf8\x11\x9f\x60\x32\xd4\x83\xb3\xe8\xef\x94\xdd\x47\xc3\xd0\xe9\x76\xe4\x89\x18\x89\x52\x10\x55\xbe\x28\x4d\x53\x91\x21\x4b\x06\x63\x41\x6e\x40\x92\x24\x05\x0b\xec\x14\x53\x55\x59\x6a\x03\x69\x46\x14\xf9\x32\xf7\x32\xc2\x9b\x7c\x69\xc5\x9c\xc6\xc8\xb9\x12\x85\xd6\x57\x56\xcd\xba\x52\x88\xab\x91\x83\x02\x5d\xab\x52\xf3\xdc\xd4\xaa\x7a\x59\xe6\x35\x1d\x34\xb2\x90\xd5\xb2\xaf\x4b\x7b\x69\xe0\x95\x7c\x20\x74\x10\x0d\x0a\x6d\x37\xc8\x8d\xac\x4a\xd6\xf8\x8e\xba\xe3\x5b\xc4\xe3\x93\xfd\x81\x9d\x73\xa9\x6b\x52\x08\xdc\xc4\xed\x58\x8f\x84\x51\x53\x5d\x66\x7e\x17\xbd\x9c\x89\xb5\x6e\x7a\x56\x64\x52\x95\x15\xf5\xec\xc8\xc6\x1e\x2e\x7a\x65\x29\x1d\x54\x0b\x8b\x91\xa5\x5c\x83\xc8\x29\x0a\x5d\xc2\x71\xb1\x90\x65\x18\xce\x0e\x02\xe2\xa4\x2c\x41\xf6\x12\x52\x64\x0d\x3d\x9e\x5b\x1e\x5b\x14\xb9\x03\x95\x06\xe6\xed\x0c\x34\x34\x44\x50\x4c\xe2\xa9\xb9\xe1\x9c\x70\x9b\xa9\xb2\xb6\x27\x94\x95\x06\x4d\xad\x24\xb4\xe2\x97\x41\x21\x72\xeb\x36\x84\xef\x2a\x0a\x31\x57\x35\x8a\x5d\x37\x95\x15\x23\x2b\xb7\x87\x75\x25\x2a\x59\x2f\xdc\xa7\x48\x61\xf2\x72\x5e\x28\x07\x36\x12\xe2\x85\x9c\x2e\x60\x60\x42\xb5\x1d\x24\x3c\x7c\x83\xb6\x17\xe2\x64\xf8\x54\x26\xae\x55\x65\xec\x47\xd3\x7e\xf4\xd3\xba\x81\x1d\x5e\x6b\x3b\x86\x14\x66\x21\xe1\x4f\x54\x5f\x40\x41\xcb\x8d\x5d\x35\x2b\x3c\x4d\xa5\x51\x46\xdc\x2c\x54\xa5\x00\x01\x64\xaf\x13\x8a\xd3\x67\x6d\xcf\x14\x53\xdb\xe1\x74\xa9\x10\x07\x46\x01\xf3\x70\xef\x84\x01\x1d\x09\x90\xb8\x2b\xdd\x3b\x85\xba\x5d\xe5\x55\xd0\x34\x71\x5b\x03\x01\x7a\xf3\x07\x92\x63\x6f\xa6\xea\xe9\x82\x64\x61\x90\xc9\xbc\x51\x4c\xeb\x11\xdc\x44\x0b\x68\xdf\x91\xef\x9b\x66\x3a\x55\xc6\x0c\x86\xc2\x5d\xf9\x52\xe6\x45\x53\xa9\x40\xd3\x2d\xc5\xf6\x3e\x57\x6a\x2d\x53\xe4\xc6\x3a\x8b\x5c\xb0\x10\x96\x38\x62\x7a\x12\x7e\xb0\xc4\xf4\x6e\x69\xc4\xd7\x8e\xa6\xc2\xf1\x11\x91\x9e\x1d\x4b\xe6\x5e\xf8\xaf\x64\x6e\x17\xdd\xc9\xe4\x7e\x78\x21\xbe\x50\x33\x09\x46\x35\x23\x1e\x1d\x1d\x1d\x89\xbe\xa7\xf4\x41\x7c\xae\xba\x69\x7e\xb0\xe4\xea\x3f\x00\x54\xeb\xf0\x05\x0b\xe5\x14\x17\x14\x22\x82\x62\x33\xf1\x7a\xb9\xbd\xef\x88\xc8\x8d\x83\x2a\x44\x3c\xaa\xd3\x32\x36\x8e\xe9\x06\x9c\xa8\x78\x0e\xb2\xf6\xa7\x97\x01\x3b\x6d\xfa\xb6\x48\xef\x77\x94\xd0\x52\xf5\x87\x84\x6b\xe4\xc6\x60\x97\xb1\xfa\x00\x2d\xc0\xfb\xf7\xe2\x91\xb8\x2f\xc6\x47\x47\x47\x9f\xd1\x6d\x53\xdb\xb9\x3b\x9a\x9a\xab\xfa\x8d\xbd\xe0\x74\x0c\x9a\x7e\x5b\x83\x87\x3e\xad\xb9\x11\xba\xa9\x55\xd5\xc5\x8d\xf3\xe5\x52\x65\xb9\xac\x15\x98\xa9\x5f\xd6\x3d\x23\x60\xcb\xd4\x5a\x4c\xe5\xaa\x6e\x80\xda\x4b\x75\xe3\x46\x33\x53\xbd\x42\x3b\xbe\x45\x9b\xdb\x06\xce\xb6\x38\x8a\xba\xc3\xf6\xe8\x76\x2f\xd8\xaa\x73\xe3\x76\xed\x64\x8d\xf6\x33\x37\x44\xe0\x38\x56\x09\x05\x3e\x81\x23\x85\xcd\x4f\x2c\xc5\xab\x3c\xee\xd1\xb3\x1d\x46\x0c\x0b\x0b\x8a\xf4\x99\xb7\xa0\xfa\x41\xcf\xce\x44\x0f\x89\xa1\x37\x10\x7f\x44\xb0\x67\x81\x74\xd0\x46\x1a\x0c\xc8\xe2\x0c\xff\xf3\x47\xd1\xef\xa1\xed\x11\x8d\xb4\xcf\xe0\x58\x27\x8b\x09\x1e\x25\x23\x7b\xc2\xf4\x7b\x8c\x10\x9e\x25\x6c\x23\xc3\x11\xfa\x4b\x23\x0e\x61\xb1\x07\xe2\x81\xe8\x19\x3f\x6a\x3a\x60\xa1\xe7\x7d\xa0\x03\x7f\x27\x60\xa0\x6c\x8a\x82\x4c\x9d\x43\xb1\x34\x03\xb2\xbb\xd9\x4f\x27\xbc\xfd\xd9\xf3\xdc\x8d\xa6\x27\x26\xa5\x74\xda\x82\xc0\x04\x8d\xaf\xe4\x97\x85\x98\x16\x4a\x56\x6e\x05\x1c\xc4\x67\x0c\xa0\x6b\xa2\x91\xbd\x36\x68\x80\x0e\xf5\xe0\x5b\xe8\x5b\xf0\xa1\x90\xd5\xbc\x59\xaa\xb2\x36\xc1\xba\x14\x99\x17\x99\x6d\xbc\x73\x65\xe3\x6f\x4b\x11\x12\xdb\x28\xd3\xbb\x89\xed\x6c\xd0\xef\x94\xc2\x6b\xde\xd1\xd7\x1e\x76\xb8\x61\xe5\xcc\xee\x3b\x73\x95\xaf\x56\xdd\x72\xf9\xac\x72\xb6\xc2\x54\x1a\x87\x63\xa7\x56\x65\x86\x32\xb3\x13\x9f\x23\x17\x1a\x98\x7b\x50\xd0\xc6\xd9\x1b\x21\x41\x42\xc1\xb3\x24\x3a\xdc\x4b\x01\x66\xcf\xa1\x98\xa8\xa9\x6c\xc0\xd7\x18\xc4\x1e\x44\x94\x95\x08\x8c\x90\x16\xcc\x88\xc9\xda\x0e\x94\x11\x0b\xc7\x4d\x29\x2d\x7f\xb0\x32\xd1\x0d\xf8\xe5\xd0\x0b\xe6\x26\x7f\x2e\xea\xf5\x2a\x9f\xca\x02\x11\xb0\x04\x2f\xaa\x95\xde\x40\x78\x63\x72\x5b\x4c\xd1\xbd\x37\xda\x7e\xb1\xfd\x9a\x9b\x7c\x7a\x05\xf6\x26\x2b\xaa\xc9\xb5\x98\xca\xa5\xea\x0d\x53\x9e\x37\x70\xa7\xa7\xe5\x0e\x9b\xfe\xf7\x5a\xd7\xf9\xd4\x7d\xe3\x72\x29\xc5\x5f\x22\x39\x10\xdc\x7a\xab\x2a\x2f\xd1\x8c\xbc\x54\x06\x64\x4d\x12\x06\x7f\x34\x6e\x86\x43\x31\xd3\x45\xa1\x6f\xc8\x63\xeb\xac\x7a\xa4\x9d\x80\x60\x53\xa2\xde\x4e\x53\xd7\xa2\x52\xd7\x4a\x16\xd4\x4d\xd9\x12\x72\x72\x58\xe3\xda\xe3\x61\x8b\x26\xaa\x2f\x81\x06\x80\x65\xea\xf6\xd1\x8b\x84\x84\x74\x42\xa2\x0f\x90\x3c\x3c\x8a\x56\x69\x21\xa7\x75\x23\x0b\xd1\x73\x38\xea\xe1\x12\xd8\xa3\xae\xb8\xb1\x8b\xd9\x61\x0b\x73\xb0\x9c\x1d\xa4\x73\x0a\xc7\x53\x34\xd3\xb3\xf6\xe4\xff\xd8\xbe\xf4\x40\x1c\x8b\x67\xe2\xd8\x6b\x3b\xf0\x21\x40\x83\x70\xa9\xae\xd6\xc4\x43\xd0\xc5\x63\x0f\xd3\x17\x55\xa5\xab\x3e\x19\xa9\xa7\xd2\x4a\x4c\x7d\x75\xeb\x78\x4d\x18\x40\x9c\x09\x75\x3b\x42\xf4\x92\xa1\xeb\x87\xb2\x17\xcc\x54\xfe\x75\xb4\x0f\xd0\xf8\x96\x58\xd5\xf8\x64\xd1\xc0\x16\x5e\xd0\x65\x65\x63\x03\x5e\xe4\xe2\x20\x7a\xfe\xd2\x1e\x42\xfe\xe9\x8b\xfc\x32\x98\xc6\xff\xf2\x83\xb9\x2f\xeb\x1f\xcc\x83\xc3\xa1\xe8\xf5\x5a\xa6\x34\x36\x6a\xc4\x57\xbe\xc8\xaf\xf3\x4c\xa1\x90\x5f\xdf\x68\x22\x08\x34\xd1\xce\x0a\xad\x2b\xc3\xbd\x13\x43\xd1\x94\x85\x32\xee\x9a\xd5\xe4\x33\x74\x4e\xd8\xab\x60\x93\x05\xf1\xdc\xea\x11\xd3\x4a\x65\xd0\x61\xdc\x2c\x2d\x91\x80\xcc\x33\xb4\x82\xa1\xa3\x68\xa3\x44\x1e\x18\x0a\x6c\x21\x95\x17\xce\x63\xef\x84\xec\xc6\xa8\x59\x53\x58\x09\x1b\xb9\x9f\x33\x84\x58\xe1\xa1\x6a\xca\xa9\xb4\xfa\xb3\x5c\xad\x2a\x7d\x9b\x2f\x25\x3a\xba\xc0\x45\x62\x15\x1f\x3b\x10\x1a\x9a\xf1\xbc\x37\x5a\x64\xda\xb2\x80\x2c\xbf\xce\x41\xf4\x77\xfe\x17\xa3\xfc\xa7\xaf\x73\x55\x58\xcd\x27\xf8\x6a\xdd\xa7\x80\xd2\x54\x68\xa3\xd0\x74\x74\xb3\xb0\x3c\x0d\x1f\xdb\xb4\xfd\xca\x66\x89\xfc\xbd\xeb\x66\xa6\x4a\xbd\xcc\x4b\x7f\xdb\xc9\xa9\x74\x9f\xed\x22\xb3\x94\x55\xfd\xa5\x5d\x0f\x5c\xb0\xc4\xd8\x83\xaf\x18\x0a\x3e\x62\xd8\x54\xd7\xb2\x80\x13\x91\xc0\xc4\x21\x07\x73\x92\x1f\xe1\x5e\x9c\x89\xaf\x64\xbd\x18\xd9\x3f\xfb\xd7\xb2\x18\x38\x33\x81\xbb\x7f\x00\xc3\xfd\x41\x8c\x8e\x8e\x8e\xc6\x8e\x66\xdd\xa1\x8a\x30\x2d\xe7\x0f\xdd\x86\x81\x81\xa8\xfc\xc8\x2d\x6f\x9b\x14\x95\x2c\x33\xbd\xf4\x96\x4e\xd0\xe1\xc1\xbe\x29\xfa\x10\xcb\x60\xf2\x6b\x35\xd8\x84\x6e\x67\xbb\xb4\xbc\xd4\xd4\x7c\x10\xa0\x58\x67\x26\x6d\x3f\x47\xd6\xcb\x45\x3e\x5f\x6c\x7f\x30\x59\x23\x71\xee\x26\x4c\x84\x39\x51\xf5\x8d\x52\x60\xa9\x14\x9f\xda\x71\x23\xbf\x2c\x80\xbe\x2c\x6b\xbe\x7e\xb1\xe5\xb3\x8d\x2b\xf8\x15\x9f\xec\x0f\xc4\x7d\xd1\xb7\x93\x3d\x80\x17\x3c\x10\xe3\x81\x95\xe6\xc0\x2c\xba\x33\xf8\x88\x8e\x9f\x77\x4b\x59\xca\xb9\xaa\xfe\x45\x42\x91\xbe\xc2\xaf\xfa\x0a\x3f\x4a\x4c\x0b\x69\x8c\x58\xc8\x32\x2b\x14\x8a\x36\x55\x29\xf1\xb4\xcb\xff\xaa\x32\x12\x41\xbc\x28\xf4\x5a\xd7\xea\x19\xf7\xf1\x89\xdc\x94\xbd\x5a\x98\x66\x36\xcb\xa7\x39\x3a\x9f\x40\x90\x41\xc9\x02\x0e\xc5\xf1\xc8\xa2\xa8\x52\x3d\xcb\x25\x26\x0d\x78\xf1\xc8\xca\x4f\xe6\x97\x2b\x05\x4e\xba\xa6\x94\xd7\x32\x2f\x50\x27\x29\x45\x8e\xc7\xeb\x33\x16\x3d\xb2\xa8\xeb\x95\x79\x76\x78\x38\xad\x26\xcd\x7c\x34\xd5\xcb\xc3\xf1\xc3\xa3\xe3\xa3\x23\x07\x72\x0c\xaf\xb2\x07\x3f\x88\x7c\x16\xa9\x4b\xb9\x06\xe1\x68\xa2\xc4\x4a\x4e\xaf\xe4\x5c\x65\xb8\x4b\x9e\xe3\x14\x20\x44\xc0\x32\x37\x3f\xdf\x87\xdd\x83\xc0\x00\x15\x3a\xb6\x2d\xa9\x54\xb2\x5a\x27\x43\xd6\x8b\xbc\xca\x0e\x2c\xd4\x9a\x4d\xba\xeb\x45\x7c\x57\xc1\xe9\xf4\x21\x78\xc8\xc5\x2b\xe7\xb8\xf6\x57\x6a\x2d\x0a\x2d\xb3\xa1\x5b\x6a\x5d\x65\x60\xdc\x51\xfe\x3d\x21\x28\xca\x02\x82\xa1\xf7\xb5\xba\x51\x95\x93\xa2\x8c\x0b\x9f\x10\xba\xb0\xcf\xea\x52\x99\x91\x10\x3d\x55\xf6\x44\x6e\xbc\x99\xa0\x81\xb8\x57\x2b\x2f\x16\x6b\x74\x1d\x3a\x9b\xd6\x2c\xaf\x4c\xed\xa7\x64\x99\x5c\x5e\x3b\x63\x9c\x2c\x2a\x25\xb3\xb5\x58\x59\x32\x47\xd9\x13\xf7\x70\x42\x6d\xdc\x30\xeb\xbe\x0d\xf7\x31\x18\x11\xfd\xb5\x77\x56\xa7\xf6\xbe\xe8\xa5\x5c\xf5\x49\x57\xf0\x8f\xab\x82\x45\x24\xa8\xa2\xc3\xe7\x0d\x01\x0a\xc4\x8d\x93\xd1\x47\xf6\x1c\xbe\xfd\x7a\xd6\xb7\x5f\x3f\xb0\x3a\xc9\xc1\x78\x40\x42\x4f\x0c\xd8\x94\x66\x91\xcf\x6a\x04\x44\x01\xc9\x42\x78\x9c\xa2\x08\xc3\x98\xf2\x79\x96\x79\xb9\x15\x82\x7f\x72\x8a\x68\xd1\x91\x48\xeb\x78\x4a\x87\xd3\x3b\xf5\x51\x1b\x0a\xd1\x5b\x4a\x22\x3d\x22\x27\x37\x87\xd1\x8f\x46\x97\xb8\xe7\x85\x78\xa3\xc0\xe8\xf2\x07\xb7\x4f\x32\x75\xad\x0a\x6d\xf5\x73\xda\xb3\x76\xcb\x78\x42\x34\x87\x76\x0b\x1f\xb8\x91\x3e\xdf\xb4\x6e\xa3\x55\xa5\x6b\x6d\x55\xb9\x91\xcc\xb2\xaf\xc2\xc7\xfb\xe5\xc8\xd4\x8c\x16\xd2\x0b\x73\x57\x6a\x6d\xa9\x35\xdc\xc1\x83\x33\x53\x33\xf0\x6a\xce\xcc\xc5\x95\x5a\x5f\x32\x55\xf1\x6e\xa6\x66\x23\x58\xc5\x05\x90\x28\x8b\x5c\x8a\x90\x0e\xcf\xe1\x18\xee\x1a\xe9\xd8\xfc\x10\x05\x3d\xc4\x45\xe5\xdd\xfb\xe4\xf5\xf9\x57\x2f\x3e\xb9\x27\xf8\xf0\x28\xcc\xdc\xfb\x64\x7c\x6f\x28\x54\x3d\x1d\xed\xf9\x2e\x4f\x6a\x4c\x91\x3e\xfc\xe1\x13\x0c\x23\xbb\xf8\xcb\x0f\xe6\x87\x4f\x2e\x1f\x0c\x7e\xf8\xe4\x30\x9f\x0f\x19\x48\x38\xbf\x86\x22\x0e\x21\x8b\xb4\x60\x8f\x98\x08\x13\x17\x10\x8a\x58\xeb\x57\xfa\x46\x55\xcf\xa5\x51\xfd\xc1\xe5\x68\xaa\xad\x22\x5a\x73\x85\xfe\x03\x69\xe2\x1f\x52\x59\xe1\x95\x96\x19\xdb\xc5\x81\xcd\xfa\xfd\xec\x28\x73\xd2\xd8\xa3\x60\x53\x5c\xc0\x4a\xd6\xf6\x84\x10\xe7\x10\x9a\xe1\xfe\x8a\x7c\x5c\x16\xa1\x64\xe1\x05\xf7\x14\x04\xdf\x38\xfe\x02\x66\x1a\x62\x55\x73\x3d\xda\x1c\x07\x34\x74\xd1\x40\xba\x7c\xae\x97\xab\x42\xd5\x2a\x8a\x07\x9a\x28\xef\xb9\xb0\xa2\xae\xe5\x79\xcc\xda\x99\x1b\x08\x4c\xb5\x4f\x91\x2e\x66\x85\x75\x52\xa1\xa5\x9b\x19\x71\x59\x83\x26\x5d\x2b\x36\x83\x18\x2f\xf3\x02\x03\x26\xec\xff\xa2\xd8\x21\x30\x59\x06\x2c\x46\xe1\x46\xe4\xdd\x39\x1a\x8a\x52\xd3\x53\x46\xdc\xa8\x4a\x85\x91\x80\x2d\xef\xde\x62\xb3\xbc\xcc\xce\xcb\xcc\x2e\x59\xd7\x56\x83\x05\x26\xcc\x0f\x19\x7a\x82\x00\x5b\xb0\x70\xa6\x94\xa1\x4d\xb5\xd5\x01\x50\x99\x03\x58\x98\x95\x38\x13\x17\x97\xee\x12\x22\x80\x2e\xdd\x09\x94\x2b\x74\xe9\xe2\x83\xdc\x3b\xfb\xa6\x96\xb5\x27\x65\xbb\x89\xa3\x0b\x22\x0c\x1f\xb8\x39\x32\xd4\x41\xe7\x96\xf5\xaf\xde\x04\x1e\xb8\x45\x80\x88\x3d\x68\xa0\xc2\xbe\x56\xb7\x3e\x96\x69\xc3\xab\x02\xe2\xfa\x38\xc9\x21\xbd\x3d\xda\x42\x84\x92\x64\xc8\x76\x08\x83\x3b\x39\xd8\x9a\xe1\xa1\x43\xcc\xe2\x5b\x1f\x0d\xdc\xf7\x4b\x17\x4e\xc0\xe1\x9d\x6e\x73\x49\x1b\xe1\xa3\x49\x5e\x66\x30\xf2\xd0\xea\x73\xea\x17\x3e\x3a\x93\x85\x41\x8f\x85\xf8\x10\xae\x0f\x9c\x05\x20\x45\x5f\xca\x48\xfc\xf1\x37\xab\xf4\x52\xc8\xae\xa3\x68\x37\x99\x17\xdb\xe8\xbb\xa9\x0a\x4b\xdb\xe4\x6d\x41\xbb\xbc\x2e\xc1\x10\x11\xe8\xfc\x76\x61\x25\x8a\x52\xdd\x88\xff\xdf\x57\xaf\xfe\xbd\xae\x57\xdf\xa2\x87\xb8\x8f\x1f\x72\xbb\xa8\x46\xba\x84\xc5\x2d\x3b\xa2\x4e\x90\x8c\x2c\x90\xa5\xd9\xc6\x88\xbb\x67\xe2\xf8\xe8\x28\x0e\xed\xe5\xef\xf5\x98\x66\x17\xd9\xf3\x83\xcf\xe2\x28\xd7\x88\x62\x81\x16\xd8\xd9\xd9\xff\x8f\x37\x5f\xbf\xc6\xc0\x27\x18\xa2\x52\x66\xa5\x4b\xa3\xde\xaa\x5b\xf4\x8e\xc2\x12\xd2\xe7\xf7\xbb\x17\x0a\xbe\x6f\xa5\xca\x7e\xef\xcf\x2f\xde\xf6\x86\x16\x67\x00\x08\x53\x52\x65\xd6\x32\x89\xe2\x59\xf8\xc9\x78\x34\x1a\x7d\x52\xf2\x00\x75\x1f\x55\xa9\x0a\x05\x06\x5d\x27\x7b\xc8\x6a\x4e\x96\xc7\x4d\x07\xc2\xd2\xcc\x5d\xb4\x3e\x3b\x05\xb8\xa8\x63\x79\xaa\xb3\x14\xb3\x97\x8e\x3a\x24\x60\x78\x1d\x9a\x92\x92\xc1\xfc\x00\x68\x9e\xd8\x48\x5e\xad\xed\x16\x69\x8e\x66\x0e\x46\xeb\x38\x1a\x7c\x69\xe6\x41\x7a\xfc\xe1\x93\xfe\x0f\xd9\x83\x01\x8f\x7d\x15\xf6\xc4\x06\x81\xb1\x65\x8e\xb7\x63\x5d\xc0\x2d\x71\x20\xc6\x97\x9d\x41\xcd\xdf\xa8\xea\x20\x2f\x4d\x2d\x4b\xd0\xf2\x56\x6b\x8b\xdb\xd6\x34\xf7\xd8\x2f\x1d\x9f\x06\xef\xdb\x07\x0b\xa9\xd1\xc0\x1f\xf6\x98\x01\x32\xf4\x16\xce\x62\x4d\x73\x83\xb3\xdc\xd9\xf7\x45\xad\xf5\x16\x02\x80\x43\xbd\x9b\x08\xe0\x16\x11\x13\x33\xe7\xce\x55\xdd\xb5\xfe\x76\x63\x01\x0d\x78\x5f\xa7\xdc\x93\x18\x5a\xd3\xb2\x43\x39\x2b\xb9\x1f\xcd\xc7\x74\xd1\xfa\xe5\x34\x31\xfa\x04\x54\x66\xdc\x79\x0d\xaa\xf5\x48\x90\x2b\xc1\x44\x9f\x00\xe0\x93\xb5\xb3\xc3\xef\xb1\x7a\x73\x55\x27\xa4\xe8\x11\x0f\x9f\x3c\xe4\x33\x66\xfe\x47\x27\xdf\x92\x22\xe3\xa7\x5a\xc6\x72\xaa\x23\x4d\x37\xc1\xb3\x44\x8c\xa5\xe7\xf0\x40\x8f\x4e\x42\x3b\x6a\x14\x79\x07\x6a\xbd\x63\x76\x61\xbc\x24\x94\x99\x3e\xd4\x4d\x68\xc0\xe5\x78\x7a\x28\x6c\x97\xd8\xf7\xe6\x92\x06\x08\x0c\xdd\x6d\x61\x9c\x68\x87\x39\xff\x11\x5f\xce\x24\xb3\x42\xfc\xd1\x2f\xe0\x33\x0e\x97\x1c\xe3\x30\x33\x87\xed\x38\x0a\x2e\xc1\xf1\xdd\xbe\xa7\x43\xb7\x71\xf5\x0c\xd9\x12\x85\x45\xfa\xfb\x67\xe2\xc2\xfd\x7e\xc9\x5d\xbe\x1b\x8e\x7e\x7a\x53\x58\xf5\x84\x55\x54\xda\xb2\x7b\x21\x8b\xc2\xed\x99\x7b\x16\xdf\xf7\xc4\xa2\x5e\x16\x42\xd6\x75\x95\x4f\x9a\xda\x9e\xbb\xce\xec\xe3\x5c\x57\x99\x5e\x8a\x59\x25\xe7\x4b\x15\x3c\x3f\x6f\xc1\xe8\x2c\x0b\x71\xa3\xab\x2b\xb1\x90\xab\x95\x2a\x21\x3e\x79\x85\xef\x79\x39\x7e\x52\x9e\xbb\x31\xf7\x20\xe1\xae\xc7\x62\x25\x50\x2f\x03\xe5\x96\x3a\x83\xbb\x99\x5e\x8e\x30\xa0\x56\x15\x6a\x5a\xeb\xea\xbc\x28\xfa\xbd\x0b\xfb\x5d\x97\xa4\x52\x77\x45\xd5\xc2\xe3\x91\xbd\x3f\x9c\xa3\x5d\x13\xe9\xc3\x03\x17\xf9\x65\x37\x4a\x19\x2e\x3d\x1a\x9d\x2d\x25\xc4\x85\xda\x31\x38\xf6\xc0\xc0\x15\xe0\x49\x6f\x21\x6e\x24\xa4\xb0\x87\xb8\x0b\xa4\x46\x35\xe3\x4a\x39\x05\x43\x5e\xa9\x92\x1c\x43\x13\xc5\x06\x01\x4d\xc2\xbb\xd3\x79\x5c\x37\x67\x2e\x3c\x86\xc9\x82\xb1\x37\x89\x05\x44\x35\xde\x7b\x77\x4f\xf4\xed\x36\xa8\xcc\x54\x57\x6a\x60\x5f\x3d\x14\x79\x6d\x88\xcb\xa1\x2f\xc0\x59\x6f\xc0\xd7\xa0\x6e\xeb\xe7\xa8\x33\x3a\xf2\xa2\xf3\xde\xbd\xec\x2b\x3e\x03\xb0\x32\xc2\x79\x6d\x39\xa6\x86\x68\x22\x46\x82\xba\x0c\xd6\x09\x1a\x06\xe5\x08\xf4\x50\xae\x2a\x35\xcb\x6f\xd1\x7d\x58\x2f\x84\x14\x99\x2e\x0a\x59\x09\x93\xcf\xcb\x91\xe0\x89\x68\xdc\x05\xf9\x87\x49\x53\xd7\xba\x14\x79\x76\xd6\xb3\x22\xcc\x01\xfe\xdd\x8b\xf3\xc7\xec\xb2\x9c\xf5\x7e\xbe\x27\xab\x5c\x1e\x14\x72\xa2\xa0\x70\xca\x27\x79\x76\x6f\x68\xd1\xf2\x4c\xdc\x7b\xf3\xe2\xf5\x17\xef\xfe\xf4\xdd\xdb\xb7\x5f\xbf\x7e\xf7\xea\xfc\x4f\x2f\x5e\xdd\xfb\x90\x8c\xf1\xf9\x1f\x0e\x71\xec\xcf\xd9\x7a\x87\x01\x63\x4e\xef\x62\xd7\xad\x4e\xd9\xd4\x88\xd4\xe8\x1d\xe7\xdf\xbe\x3c\xa7\x17\x8d\xc8\x4c\x8a\x7e\x4e\x59\x13\xe9\x65\x9c\xf0\x6e\xec\x0a\xda\xed\x48\x5e\x64\xf0\x26\xc9\x0a\xa2\xb9\x1c\xd0\xd0\x65\x31\xb0\x98\x7d\x4a\x68\xc0\x87\xbe\xfb\xe6\x9b\x17\xdf\xbe\x3b\x7f\xfd\xc5\xbb\xef\x5e\x7f\xf1\xe2\x5b\x01\x76\xe2\x5f\xb8\x8d\x23\xff\x88\xce\x42\x46\xe6\x73\x7c\x23\x7e\x44\xa1\x6f\x54\x75\x20\xcb\xec\x20\x93\x66\xa1\xcc\xbd\x94\xac\x21\xcb\x02\x1f\xbc\x97\x4c\xef\x9e\x9f\x1f\x8f\xdb\x69\xca\x2b\xca\x84\xea\xcc\x45\xf2\xb6\xbc\x51\xad\xbf\x5b\xad\x9c\xe9\x23\xe8\x65\xb0\x41\xcf\x70\xdf\xce\x55\x1d\xb8\x41\xcf\xde\xe9\x79\x6f\xcc\xdd\x70\xa6\x39\xe1\x3c\xf2\x75\xd2\x38\x4c\x28\x87\x07\x36\x78\x3c\xdd\x71\xa6\x40\x03\xe8\x3d\x97\xe5\x0f\xbd\x1a\x13\x23\x30\xf8\xc4\x4e\xa7\x96\xf3\xd7\x96\x76\x1e\x88\xde\xff\xf1\x17\xf3\xcc\xfe\x8d\x27\x9e\x7f\x83\x73\xb5\xaa\x5b\xef\x85\x3c\x3c\x44\x45\x0b\xe2\xf3\x82\xdc\x61\x18\xaf\x22\xe6\x15\xb3\x28\x33\xea\xb0\xc0\xc1\x8b\x78\xe4\x91\x82\xc9\x70\x7a\x54\x3d\x24\x70\xa3\xea\x1a\x3d\x8a\x2e\x68\xae\xae\xad\x8e\x75\xa5\xd6\x2c\x74\xc5\x1d\xb7\x67\x30\x34\x99\xf1\x68\x74\xbb\xb1\xef\x9d\xcd\xb4\xbe\x37\x14\x95\x3a\x70\x11\x0d\x5e\xee\xcf\xa2\x9d\x35\xf2\x42\x03\x8d\x19\x25\x75\x9c\xf5\x06\x41\x86\xb0\x1f\x73\x26\x3c\x58\x48\xe6\x20\x41\x65\xd3\x9c\x3e\xdc\x89\xa6\xf6\x09\x4e\x6d\x2a\x8b\x69\x53\xc8\x5a\xb5\xc4\xba\xed\x53\xfa\xc4\xe5\x99\xf0\x37\x22\x1d\xb7\x89\xb0\x35\x59\x88\x24\x7a\x67\x17\xff\x4a\xad\x9d\xc8\x64\x67\x96\xa3\xe8\x5d\x38\x2b\x9d\x33\x35\x72\x94\xb3\xa8\xe4\x7e\x2c\x2d\xd9\xc9\xe2\x42\x9d\xc1\x6e\x71\x91\x51\x40\x86\x8c\xe9\x03\xfa\xf0\x11\x2b\x00\x72\x30\xc3\xe7\x6d\xc7\x1a\x5a\xd8\xe0\x73\xdc\xee\x29\x5b\xf9\xe5\xfd\x17\x73\x96\x3d\xd7\xa5\xa9\xab\xc6\x8a\x2d\xb0\xad\x2c\x63\xfd\xc6\x7f\xac\xf3\x6a\xe0\xb9\xcc\xc2\x85\x94\x9d\x32\x5e\x14\x19\x48\x60\xf6\x0c\x5c\xa9\xca\xe4\xa6\x06\x2d\x69\x21\x4b\x72\xeb\x18\x4c\xfa\x30\xb5\xae\x9c\xb6\x5c\xea\x3a\x9f\xad\xc9\x9c\x69\x99\x4d\xb3\x04\x73\xf5\x42\x95\x62\xc5\xd4\x76\x1c\xc5\x4b\x0a\x75\x1c\x9c\xe4\xce\x9e\x89\x9c\x5e\x41\xe0\x73\xad\x2b\x8b\x3a\xf2\x12\x19\x1f\xdf\xa3\x43\xa0\xf0\xbf\xbf\xfd\xea\xd5\x23\x3b\x18\x4d\x67\x28\x26\x0d\x8c\x52\xd9\xc3\x51\x95\xbd\x5a\xc8\x72\x0d\x89\xf5\x18\xc9\x4b\xef\x58\x6a\x10\x23\x84\x78\x49\xf9\x79\x4d\x8d\xe1\xbc\x64\xff\x24\xf7\x99\x74\x6e\x3f\xb9\xca\xf1\xdb\xed\x94\xcc\xba\x9c\x1e\x00\x12\x2c\x4d\x1f\xa2\xf8\x02\x19\x53\x28\x26\xdd\xa8\x5e\x06\x21\x4d\x14\x30\xd1\x4a\x5a\xb3\xab\xf2\x06\x27\x3c\xba\xff\xc1\xa3\x12\xf3\xd6\xf0\x77\x12\x9d\x6a\x8d\x05\x06\xc0\x11\x89\x78\xf1\xfe\x33\x3b\x97\x8d\xaa\x24\x8a\x33\x71\x30\x10\x5d\x4b\xa2\xc0\x2c\xcb\x0e\x8b\xc4\xed\xde\x94\xac\x2a\x7a\x87\xbd\x90\xf2\x11\x15\x33\xc0\x83\xdd\x28\x3b\x81\x5a\x89\x42\x5d\xab\x02\x6c\x31\x8b\x5c\x55\xb2\x9a\x2e\xd6\x3e\x93\x3e\xf7\xb1\xed\x73\x4d\x01\xf3\x0b\x79\x4d\x24\x7f\x95\x97\x19\xed\x99\x72\x8e\x56\xeb\x55\xa5\xaf\x73\xb0\x72\xda\xf5\xc1\xa9\x27\xae\x43\xe0\x73\x4e\x5c\xeb\x1d\xf6\xf0\xc1\x52\xd7\xec\xe1\xbc\x76\x3a\x2f\x10\xaf\x85\xf2\x12\x47\x7b\x63\x44\x99\xf8\x44\x50\x01\x9b\xcc\xf1\xe7\x96\xe9\xcc\x2d\xd8\x67\xc9\x9d\xaf\x27\xc0\x11\xaa\x77\x8e\x0b\xea\x92\x56\xfc\x39\x6c\x82\x77\x2d\x2b\xa6\x05\xca\xcd\xf9\xb4\xce\xaf\x95\x7d\x0a\x4c\x9e\x7e\x58\x69\xaf\xcb\x5a\xf5\x19\x74\x5d\x51\xee\x08\x42\xba\xa4\x40\x5c\xe5\x33\x4e\x06\xef\xdf\xdb\x2f\xf7\xc2\x05\x5e\x1d\xa9\x32\xa3\x53\xe2\xd0\x9d\x12\x04\xff\xe0\x0c\xe1\xef\x78\x05\x86\xc6\xc4\x5f\xe2\x1b\xdf\xaa\xa9\xae\x32\x70\x81\x62\x78\x14\x72\xfd\x42\x4f\x64\xe1\xd0\x00\x77\xc9\x3c\x0f\xb7\xa7\x8b\xbc\xc8\xbe\x94\x96\x51\xe5\xca\x3f\x8b\x92\xc4\x57\x72\x05\xce\xe4\xdc\xd4\x07\x70\x62\xd5\x5a\xfc\xbc\xc4\x8b\xf0\x1c\x4c\xc3\xb9\x24\xcd\x07\x7c\xea\xdc\xf2\x12\x90\xcd\xc5\xe1\x21\x5e\x62\xaf\x7a\x95\x9b\x1a\x5f\x73\xc7\x05\xfc\xf5\x56\x95\xb6\xcc\xf4\x20\xcf\x4c\xef\x19\xbb\x21\x44\x4f\x97\xaa\xf7\x4c\xb4\x08\x64\xc8\x61\xea\x1b\xbd\x0b\xc6\x4d\x07\xce\xf5\x21\x9f\x99\x10\xbd\x59\xa5\x27\x1d\xef\x8e\x9e\xa1\xdf\x3e\xdc\xe9\xfe\x96\xd8\x95\xfb\x9d\x01\x31\x0b\x22\x22\x0a\x2c\xa8\x91\x97\x59\x3e\x45\xa9\x81\x38\x9f\x8b\x2e\x45\xae\x45\x6a\x55\xd8\xff\xb4\xb7\x48\x0b\x44\xa5\x10\x8c\xe6\x35\xe4\x46\xa1\x41\x03\x9f\x25\x83\x46\x30\xc6\x86\x51\x1c\xc3\x7b\xf1\x53\x23\xa1\x76\x4c\xad\x4c\x6d\x84\x9c\xcb\xbc\x34\x35\x1e\x8d\x38\xc8\x57\xdf\xbd\x79\x0b\x2c\xae\x77\x76\x76\xd6\x13\xba\x12\xbd\xbb\xf6\x17\x64\x52\x72\x3a\x6d\x2c\x67\xd9\xb2\x67\x99\xa2\xf0\xc5\x8b\x2f\xcf\xbf\x7b\xf5\xf6\xdd\x7f\x9d\xbf\xfa\xee\x85\x0f\x72\x0f\x65\x5c\xfa\x3d\x82\x00\x35\xde\xf9\xbf\x4b\x40\xd2\x75\x9e\x35\xb2\xe8\xf8\x84\xf8\x70\x04\xb5\x17\x5e\x4c\xa1\xe7\xaa\x83\x00\x20\x51\x24\x64\xac\x95\xca\x27\x9b\x60\xd8\x0a\xd6\x7f\xc9\xf2\x4a\x4d\xeb\x62\xbd\xed\xdb\x70\x6b\xa5\xe5\x67\x86\x6e\x21\xfe\xcb\xa2\x90\x71\x25\x16\x5a\xee\xf7\x21\x07\x45\xbf\xb0\xff\xd3\xc3\x10\x4d\x38\x18\xb8\x16\x21\xd3\x43\x6a\xb7\x9f\x69\x3b\xf3\x40\x02\x74\x22\x7a\x93\xb1\xc5\x4d\xbc\x22\x56\x32\xa8\x29\x7f\x66\x29\xaf\x20\x3c\x10\xa2\x0d\xaf\x55\x35\xd1\x66\xeb\x2a\x23\x26\x36\x2f\xb6\xb7\x2c\xef\x4d\x20\xdc\xd1\x80\xc9\x5f\x3c\x73\x09\xe9\xcf\xe7\x6c\x61\x74\x62\x6e\xf8\x4e\x21\x99\x68\x63\x79\x08\x8a\x88\x74\x29\xf5\x9d\x93\xfb\x20\x1c\x46\xa3\x3c\x1b\x9f\x87\xe2\xea\x48\x60\x70\x36\x65\x39\x4d\x55\x7e\x8d\x7a\x40\xa9\x6e\x5c\xe0\x65\x6a\xbc\x0e\x13\x1d\x86\x94\x9a\x0c\xa2\x1e\xdd\x07\x90\x22\xdf\x3e\x06\xa5\x09\xae\x62\xf3\x51\xab\x22\xb3\xcc\xb1\xfc\x28\x20\x98\xae\x31\x5a\xf5\x94\x34\x5a\x35\x66\x11\x20\x62\x8e\x56\x56\x7e\x6d\xca\x80\x2a\x1f\xdc\xbf\x01\xf5\x0c\xab\xe7\x16\x11\xd7\xb9\x6e\x0c\x78\x0a\x70\x30\x9e\xd5\xf3\x31\x5f\x57\xa9\xa5\xbe\x56\xbb\x3f\xd0\x99\x06\x93\x0f\x75\x41\x3c\xec\x5b\xf1\x40\xce\xc5\xe7\x3e\xbd\x33\x79\xc6\xac\xac\x6e\xd0\xcf\x87\x62\x9c\xd4\x9e\x81\x44\x30\x6f\x91\xf3\x1a\x47\xcc\xc1\xf6\xfe\xb4\xc4\xdc\x1f\xf2\x4f\x3b\x18\xc4\x59\x17\x8b\xe0\x3e\xca\xc3\xbf\xf4\x29\x8f\x9a\xd2\x90\x3f\x39\x1c\xd9\x13\xc0\x19\xc7\x5b\x8c\x69\x90\xa4\x56\xb4\x00\xda\x09\x1a\x1d\xcc\xed\x4c\xf4\x5c\x62\x1c\x8f\xa9\xf9\xde\x57\xd9\x0a\x19\x82\xcf\xbf\xfe\xe6\xbf\xdd\x4e\x89\x4f\x35\xa3\xf1\xac\x6c\x8c\xe5\x72\x53\x59\x86\x81\x96\x3a\xcb\x67\x6b\xf2\xe8\x54\x72\x6d\x4f\x2b\x92\xd3\xed\x19\xa8\x9b\x1a\x79\x82\x73\xfb\x44\x03\x8f\xe2\x2f\x64\x96\x1b\xf8\xd5\x65\x4e\xac\xfb\x1d\xc8\x89\x0c\x03\x9b\x51\x14\x47\x84\xb7\x16\x2e\x22\x9f\x37\xb5\x5e\xb5\x38\x1a\x49\x54\x74\xe0\x57\x4c\x0f\xb3\xb2\x6e\xc2\xef\x9e\xa3\xad\xc7\xaa\x70\x6d\xd1\xde\xdc\x58\x71\xad\xa9\x21\x1f\xb2\xeb\x0d\x56\xf1\x28\x51\x91\x33\xda\xe9\x49\x70\x70\x66\x50\xa6\xcd\xd2\x23\xa8\x95\xb9\xca\x84\x9c\xd8\xa1\xf2\xaa\x52\x85\xba\xb6\x4b\xc9\xa6\xb2\x5b\x2c\xc8\x94\x13\x9e\xbb\x29\xfc\x6e\x2c\x7a\x0f\x3a\x93\x09\x7a\xaf\x75\x2d\xdc\x38\x59\x6f\x2f\x99\x9d\x10\x97\xb0\x8d\x7e\xa7\x9a\x30\x48\x56\xc7\x6a\x36\xbb\x56\xc0\xe5\xe4\x06\x06\x17\x3e\x35\xdb\xb4\xb8\x28\x9d\xa0\xa9\xdc\xe3\x25\xc7\x54\x14\x14\xe4\x7c\xee\xd0\x48\x88\xff\xf6\x0b\x42\x52\x0c\xa5\xe0\x5a\x20\x59\x0b\x88\x16\x94\x45\xfe\x57\xca\x4d\xce\xad\x70\x22\x21\x38\x33\xaf\x7b\x26\x89\xce\xa4\xf8\x27\x3c\x5d\xbc\x49\x7f\x1a\x4c\x16\xfb\xad\xe7\xf6\xd5\xdc\x6b\x31\xcf\x29\xfc\x73\xe7\x82\xd6\x55\xd3\x5e\x4f\x76\xc8\xed\xb3\x98\xdf\x2a\x32\x92\x4d\x92\xe5\xa4\xf4\x47\xc3\x77\x88\x5f\xdc\xff\xf6\x32\xa4\xc8\xa8\x46\x98\xb6\xcb\xd8\x8d\x75\xa8\x4a\x51\xc1\x2f\x2e\x84\x0d\x8b\x2e\x40\x4e\xf2\x8c\xd3\x01\xf9\xa0\x51\xb5\xef\xd8\x9a\x20\x64\x2c\x75\x99\xd7\x94\x9d\xc9\xec\x0e\x7c\xe6\x44\x8c\x43\xcb\x31\x83\xc0\x0b\xea\x77\x9b\x56\x96\x1a\x93\xa5\x4b\xf8\x88\x28\x8a\xd4\x5b\xd7\x2b\x35\x6d\x2a\x93\x5f\x2b\x38\xa9\x65\x66\xa2\xd7\xd9\xa1\x82\xf2\x17\xcf\xd9\x10\xcd\xdd\xa8\xa2\xe8\x1e\xdb\x92\xab\x59\x97\xd3\x45\xa5\x4b\xdd\x98\x21\xf1\x2c\x3f\x53\xfb\xbe\x36\x92\x86\x2e\x93\xfe\xfe\xb2\x31\xf5\x7d\x4c\x57\x76\x49\xab\xbb\x84\x90\xfe\x00\x2d\x31\x5e\xa4\xf4\x5e\xfd\x59\x47\x99\xb0\x90\x41\x2c\x7d\x28\xdf\x42\x86\xa8\xc0\x6c\xbf\xbd\x61\x1f\x7f\xe3\x6d\x13\x51\x42\x56\x9c\xa3\x09\x96\x02\x55\x66\x79\x39\x7f\x6e\xb1\x5a\xa9\x12\x7c\x99\x49\xfc\x1c\xdc\xf3\x71\x67\xfc\x8c\x3f\x38\x68\x3d\x7e\x26\x8e\xc4\xa7\x9f\x46\x1f\xed\xce\x75\x7e\xad\x1f\x27\x58\x81\x07\xf2\x8c\x52\x0d\x47\xf6\xaf\x7e\xcb\xb4\x30\xd8\x1d\x52\xcd\xed\x14\x0f\x84\x2a\xa2\xf0\xa3\x24\xb0\x1a\x0c\x27\x83\xc8\x35\x02\x29\x84\xdf\x30\x5b\xa5\xc5\x24\xfa\x3d\xd8\xc8\x8c\x4b\x38\x66\x30\x57\xf5\xcb\x5a\x2d\x4d\xdf\xce\x9c\x15\xa0\xcb\xed\xc5\x38\x79\x18\xc7\x78\x85\x71\x97\x67\x7c\x5c\xe7\x37\x76\x01\x59\x2d\x8f\x48\x3c\x98\x4f\xfb\x01\x75\x0d\x6e\x32\x07\x82\x88\x73\x95\xaf\xd4\xda\x19\xf4\xf9\x04\x06\x09\xb0\x52\xd9\x9b\x75\x39\x15\x67\xa2\x1f\x05\x6c\x70\x8b\xc3\xa7\x9f\x6e\x08\xde\x13\x22\x95\x62\xae\x51\x35\xbd\x7b\xb6\xf1\x09\xd1\x25\xf7\xf0\x45\x87\x18\xe2\xcb\x48\x84\x19\x0c\x42\xd0\x5a\x87\x05\xaa\xe3\x09\x28\x45\x19\x04\x48\x47\xbd\xee\x73\xe3\xa0\xe6\x84\xa2\x1f\x3c\x88\x72\x8f\x61\xd5\xd7\xe5\xf4\xb9\xc3\x08\x29\xe3\xc9\x2e\x19\xf0\xb4\x64\xf7\x5f\x16\xa1\xf7\x31\xdb\x26\xaa\xab\x17\x01\x90\x48\x18\xd3\x38\xcf\xfb\x03\xe3\x8c\x90\x9d\x16\x8d\xdc\x78\x55\xc8\x08\x29\x22\x9b\x82\xd3\x27\xad\xb2\x68\xbf\x0c\x32\xb3\xd0\x6e\x41\x62\x5b\xc7\x90\x9d\xb5\x7b\xdf\x6e\xd4\x48\x5d\x8d\x0d\xe7\xa6\x46\xba\x04\x93\x0a\xaf\xc0\x40\xbb\xd9\x69\x36\x6d\x3d\x95\x2a\x47\xdc\x54\x79\x5d\x43\xf0\x02\x9d\x7c\x6e\x6f\xb6\xa7\x46\x0a\xc9\xfb\x89\xd6\x85\x92\xe5\x7b\xe4\x3a\xef\x21\x56\xe6\x7d\xd9\x14\xc5\x07\xda\x56\x6f\x5b\x8a\x01\x16\x13\x72\x94\x10\x7f\xcd\xb9\xab\x21\xcc\xeb\x80\x56\x8a\xb2\x4b\xd0\xf9\x09\x11\x11\x50\x35\xe2\x5a\x16\xb9\x67\xf2\xa9\x92\xf0\xcb\x0d\x09\xab\xfa\x5d\x50\x7b\x7d\x50\xd8\x96\xb3\xa6\xc3\x96\xb1\xd1\xcc\xe0\xc6\xdb\x6d\x6d\xd8\x60\x66\x70\x03\xfc\x0a\x6b\x03\x17\xe9\x2d\x75\x07\x88\x56\x38\x2e\x92\x34\x4d\x16\xc3\x5f\x91\x94\xed\x86\x77\xd5\xf4\x9c\x71\x6d\x03\x1f\x71\xda\x39\xc2\x45\x61\xd3\x88\x2e\xaa\x4b\xd2\x67\x2f\x6b\x17\xc6\xdc\xf5\x16\x11\x38\xa4\x15\x50\xb7\xa9\xeb\xed\x17\xb9\x53\x2d\xfa\x42\xf6\xda\x48\x54\x8d\x80\xba\x98\x85\x2f\x0c\xb9\x4a\x43\x6d\x7d\x3d\x1e\x4f\x4e\x96\x11\x6d\x48\x0b\xf3\xfe\x96\xf3\xd2\xe9\xc9\x33\xf1\xf0\xc0\xc5\xdc\x60\x52\x83\xab\xe8\x53\x2f\x2a\xe5\xe3\x71\xbc\xa1\x0a\x9e\x4a\xa2\x97\x2c\x99\x5d\x40\xcc\x90\x5b\x56\xfa\x96\x4b\x46\x3e\xc8\xa1\xdc\x38\xfb\xd9\x42\x36\x93\x55\x9a\x31\x04\x9f\x95\x64\x0d\xb1\x10\x30\x07\xd1\x95\xf5\xed\xd4\xf5\x68\x7c\x3f\xe6\x45\x7e\x79\x71\x74\xe9\x79\x30\xfc\x3d\x4e\xfe\x3e\xbe\x6c\x67\xd4\x3a\x2e\x5f\x62\x7e\x9d\xca\x7c\x8e\x48\x2a\x2a\x07\xb5\x3d\xbd\x01\x36\xed\x2c\x9f\xc1\xdf\x35\xea\xfe\x3f\x36\xa6\x06\x2e\x0a\x51\xb5\x6c\x19\x59\x58\x17\x6a\x79\x54\xcc\x46\x41\x75\x26\x18\x1a\x2b\x7e\xfb\x08\x62\xc8\x00\x6b\x8b\xec\xee\x08\x58\x2a\x59\x46\x05\xab\x88\x85\x71\x8f\x33\xb3\xcf\xb7\x3e\x0b\xd9\xcd\x5c\xd5\x58\x27\x0b\x58\xab\x74\x26\x54\x67\x53\xe8\x55\x0a\xf4\x92\x8a\x2a\xff\xe9\x0a\xce\x0c\xb2\x55\xc8\x52\xf8\xe8\xcc\xb6\x8a\x11\x57\xaf\x4f\xce\x39\x8b\xed\xd7\x58\xa7\xde\x17\xa6\xe7\x99\x3a\x53\x3a\xe4\xfd\xd7\x5a\xbc\x86\x32\x43\x54\xa2\x3e\x6f\xdb\x96\x39\x96\x54\x78\x0d\x1d\x98\x53\x70\x49\xb7\xa9\x1c\x63\xdc\x3a\x8f\x4a\xef\xab\xad\x35\x65\x13\x25\x14\xe3\x46\xa3\x45\xcc\xe8\x2c\x80\xda\x0f\x46\xe3\xf3\x79\x69\x31\x7d\x28\xb3\xec\x10\x6d\x1a\xa1\x2e\x19\x2e\x14\xd6\x03\x5b\x73\x7e\x9f\xa2\x02\x62\xf3\x56\x58\xb7\x8f\x52\x58\xdb\xe6\x5b\xe6\x1d\x5c\x8b\xf3\xa4\x70\x92\x93\x1a\xd2\x32\x80\xde\xd3\x4c\xa4\xe7\x92\x02\x8c\x8a\xd7\x41\x89\x19\x8d\xec\xc7\x4d\x4f\xbc\x3b\xa1\x3e\xb3\xdd\x13\xdb\xa2\x28\xe8\xb8\x73\x4b\x99\x79\x1a\xb0\xdc\x1c\xde\xdb\x5e\xa7\x8f\x3a\xe5\x98\x7a\x16\x9f\x71\x8e\x2a\x86\x11\xba\xe8\x80\x3b\x3c\xec\x12\x01\xc1\xeb\xae\x8b\xac\x8b\x00\xd8\xca\xdf\xd9\xc4\xaf\xc2\x2b\x2f\x2e\x37\x25\xf2\x38\x13\x76\xe9\xe5\xe4\x96\xc7\x7b\xe8\xe7\x8e\xb6\xcd\x2e\x8f\xf0\x85\x03\xb9\x84\x58\xee\xf0\x81\x9f\x75\xf8\x42\x23\xe0\xc4\x2b\xea\xbd\x3b\x96\xf0\x88\xb9\xec\xf6\xe2\x7c\xe9\x69\x11\x1d\xd9\xe2\x9c\xf9\x86\x3c\x15\x62\x8c\x32\x2c\xb9\xba\x56\xd5\x3a\x39\x71\x50\xe0\x91\xc6\x40\xb9\x22\x67\x73\x60\xf6\x34\x5d\xc6\x22\x9f\xeb\x5e\xb1\x94\x2b\x71\x2e\xc8\xe5\xcd\x9d\xb3\x18\x4d\x37\x65\x65\xc2\xe2\x17\xb8\x97\x26\xef\x91\xe5\x56\x37\x63\xa7\xff\x26\x3a\xfc\x10\x09\x43\x3b\xa5\x60\x6a\x23\xcc\x7c\xfa\xa9\x20\x9b\x3c\x5d\xb8\x7b\x26\x7a\xee\xc9\xde\x06\x0b\xdc\xcb\x12\x58\x35\x1e\xdd\xcf\xe8\x49\xd3\x0b\x8a\x3a\x5e\x61\x3e\x91\x34\xa0\x00\xfd\x46\x04\x16\x62\xe1\xed\x0c\xd3\xb8\x49\x7f\x58\x3b\xcd\xd6\x7f\x86\x0b\xa0\x8f\x54\xde\xc8\xf2\x30\xf0\x59\xb6\xc9\x17\xb8\xac\x80\xb0\x3c\xac\x92\xd7\x67\x77\xee\x6c\xd3\x50\xb9\x58\xb6\x94\x2b\xbc\xda\x71\xbc\xe7\x66\x25\x9d\x9b\x07\x09\x55\x04\x0f\xac\xb3\x8a\xa5\xd3\x30\x2c\xc0\x8a\xe2\x98\xa8\xc8\x4a\x6c\xbe\x85\x9a\x52\xdc\x60\xe4\x6c\x4d\x06\xb2\xf6\x29\x63\x1f\x8c\xf3\x10\xe8\xbb\x5a\x15\xf9\x14\x4d\x8e\x90\x34\x69\x81\xac\x3e\x8c\x22\x62\x63\x54\xd5\x35\x09\x38\xf7\x78\x67\x04\xf2\x16\xf8\x23\x3e\xeb\x94\x0f\xc0\x79\x00\xb2\x08\x84\x8c\xdf\x81\x4a\x8d\x85\x65\xcf\xc8\x76\x87\xb8\xe9\x30\x22\x1b\x55\x1a\x73\x93\xd7\xd3\x85\x3b\xd4\x99\x48\x43\x36\x96\xbd\x36\x00\x86\xb2\x9d\x17\x45\xdb\xba\xdc\xa2\xa2\x36\xb1\x70\x61\x0f\x47\x22\xde\xd7\xf7\xd1\x8f\xd1\x02\xbf\xd6\xee\xb8\xdc\xb0\xbc\x94\x2d\xf1\xab\x35\x6e\x52\x4c\x11\xe1\x1f\x83\x09\x9a\x7f\x77\x07\x9c\x8f\xd1\xa2\xee\x92\x1a\xd5\xcd\x0e\x76\x6f\x26\xa8\x61\x13\x1b\x76\x48\xc7\x99\x2b\x97\x40\xd9\x25\x94\x77\xf3\x8e\xee\x3c\x8d\x14\xec\x22\xbf\x24\x9d\x2b\x32\x42\x6d\x7c\x17\x4d\x28\x78\x6f\x3b\x14\x81\x14\xc6\xbe\x83\x8f\x3e\x24\xdd\x95\x22\xc3\x12\x82\xf1\x0d\x96\xbc\x74\xd1\x21\xeb\x39\x09\x04\x69\x07\xa1\xec\x01\xc9\x33\x45\x7c\x50\xe0\x22\x2f\x93\xc4\x70\xe8\xd7\x23\xad\x34\x43\x06\x18\xac\xaa\x41\xd1\x02\xb2\xa9\xf5\x81\x13\xb9\x40\xb6\x49\x45\x1f\xbb\xdf\xed\x3b\xd1\x7d\x54\xd1\x04\x9c\xcc\x85\x45\x69\x2b\xa3\x60\x87\xc7\xb1\x7d\x56\x94\x6a\xa0\x6c\xd4\x4e\x81\x1b\xea\x9d\xf8\x2f\x03\xce\x86\xa8\x71\xa2\x97\x57\x40\x2c\x13\xd9\x18\x26\x09\x5f\xff\x75\x84\x0b\x50\x38\xb0\xa7\x12\x69\x9d\x4e\x30\xda\x38\x4a\x9e\x85\x31\x72\xc0\x94\xbe\x56\x55\x95\x67\x38\x1d\x8f\x2d\x1a\x63\xf7\xde\xc3\x6f\x41\x55\x8d\x97\x20\xf1\xe2\x97\x9b\xfb\x66\x21\x6c\xc7\xff\x70\xda\x2c\x5c\x21\x33\x3c\x5e\xdb\xcb\x67\x9f\xf9\xfb\x9f\x71\x63\x43\xee\xed\x21\x79\xe6\xea\xb8\x65\x21\xb8\xdb\x0a\x91\x2e\xda\xc1\x82\xde\x0d\x05\x4b\x3a\x36\xff\x17\x0d\x9e\x2c\x84\x69\xdc\xf9\x7e\xa5\x43\xfe\x41\x36\x68\x67\x03\x1e\x1e\x8a\x6f\xf2\xe9\x95\xaf\x2b\x35\x74\xe4\x78\x72\x90\xe5\xf3\xbc\x16\x0b\x75\xcb\xeb\x14\x73\xe9\x9c\xe2\xff\xd0\x33\x4f\x35\xaf\xef\xe6\x99\x78\xff\x5e\x74\x7f\x40\xc8\xb4\xce\x42\x5b\x22\x57\xf2\xa9\x3f\x1e\x8a\xa3\xdb\xd9\x6c\x36\x1b\x8c\x6a\x4d\x65\xd8\xc7\xa7\xde\x1c\xcc\x9e\xf9\xeb\x4a\x66\xfd\x3c\x1b\x8a\x93\x70\x97\x10\x6b\x17\x35\x58\x7f\x3d\x72\x81\x32\x2d\x26\x10\x11\x1d\x19\xff\x80\xba\x10\xc7\xba\x5d\xa4\x26\x29\x3c\xc7\xda\x01\xfc\x51\x1f\x54\x1a\x1c\x25\x2d\x90\x4a\x19\x55\x9f\x17\x05\x8f\x45\xed\x14\xc6\x2f\xf2\xcc\x4b\xef\xf4\x30\x52\x51\x46\x51\x3f\x34\x01\x34\xad\x33\xb2\xb3\x53\x33\x51\x4d\xda\x78\x8c\x48\xbc\x07\x45\x54\xb6\x4d\x03\x9e\x05\x38\x66\x82\xa0\xa6\x03\xd6\x4b\x1d\x96\x03\x41\x15\x52\x03\x71\xe3\x7c\x34\xd0\x9c\x33\xf4\xc6\xec\xc5\x9e\xf8\x49\xcc\x58\x55\x92\x1b\x8c\x77\x42\x41\x46\x54\xac\x3b\x59\x4d\x9e\x31\xb6\xf7\xf2\x8b\x7d\x3d\x82\x76\xbc\x2d\xac\x84\x73\x01\xfb\xbd\x9c\x0f\xc0\x63\x31\xac\x5d\x2f\x00\x4b\xc9\x60\x2f\x2e\x22\xce\xd2\xad\x15\x62\xa0\xa2\x3d\x66\xa1\xe2\xd8\x27\x7f\x4a\x77\x11\x0a\x6d\x84\x4c\x41\xdd\x95\xed\x14\xd9\xdd\xfd\x60\xd3\x61\x1a\xce\x11\x26\x8f\x21\x1f\x67\xe9\x8e\x6c\x7d\x75\xe5\x0f\x0c\x57\x6d\x0a\x65\x9b\xda\xbb\x3c\xaa\x50\xec\xd5\xe7\x47\xdd\x61\x55\x52\xc9\xe1\x50\x11\xab\x94\xa5\x50\xb7\x53\xb5\x42\x4f\xf6\x4c\x94\x3a\x81\x04\xdb\x11\x46\xbc\xff\x82\x83\x13\x6a\xab\xe6\xe5\xbe\x24\xe7\x61\xee\xc7\x49\xeb\x91\x54\x11\xcf\xaf\x95\xc0\x1e\xd9\x45\x08\x49\x98\xbe\xbe\x17\x4d\x3b\xca\xdc\x44\xd0\x1d\xb9\xe9\xa8\xe6\x79\x2c\x74\x78\x37\x07\x3b\x44\xd3\x80\xb4\xf8\x80\x62\xe2\xa9\x1b\x2c\xe2\xbf\x29\x09\x7a\x81\xb8\x9f\x67\x58\x58\x8e\x80\x06\x5c\x25\xdd\x9d\x46\xbe\x4b\x2f\xbd\x97\x9e\xa2\xf7\xf8\xf1\xea\x0e\x53\xcf\x60\x93\x44\xf4\x0f\x29\xef\xb5\x33\x6c\xed\x9e\xe7\x51\x56\x9a\xd3\xb8\xa6\xca\x57\x49\xac\x6f\x34\xcc\xc1\xa4\x06\x26\xac\xed\x00\x9b\x89\x55\x3a\xe2\x40\x28\x02\xb7\x6c\x74\xb8\x5d\xa3\x0a\xba\x50\x15\x0b\x84\xd4\x7b\x43\x71\x0f\x19\x9e\xfd\xd5\x32\xf3\x7b\x53\xbd\x5c\xea\xf2\x9e\xdd\x20\x2b\x55\xd5\xb9\xf2\xae\x07\xba\xb2\xa6\x6a\x72\x52\xf0\x14\x83\x03\x94\xe3\xfe\xa7\xae\x1a\xf5\x3f\x71\xfe\xef\x10\x99\x40\x54\x89\x58\x8a\x33\x71\xd1\xc3\x27\x6f\x7b\x43\x41\xbf\xae\x7b\x97\x04\x30\x61\x00\x78\x95\x6e\x58\xa4\x79\x4b\x99\xe9\xcb\xa1\x98\x0c\xc4\xd9\xe7\x3e\xf9\xf7\x67\x14\xbf\x9f\x89\x9f\x85\x1f\xff\x19\xc4\x25\x89\x0f\x43\x3a\x2d\xec\xdd\x0f\x43\x81\x9f\xca\x20\xd7\x1e\xd2\xca\x0a\x21\x6b\xd8\x0e\x48\x16\xdc\x8c\x21\x46\x48\x63\x1a\x57\xe3\xf0\x7f\xe4\xff\xd8\x9d\xc9\x53\x06\xb8\x0e\x11\xf9\x7c\x2e\x90\x5d\x5c\x7e\x10\x12\x7b\x04\x69\x53\x83\x39\x95\x1e\x6a\x2d\xfe\xa6\xc7\x27\xe2\xbc\xa4\x72\x7f\x1b\x9e\x6b\xf5\x79\x2d\x79\x08\x66\xfc\x69\x87\x88\x10\xbe\xf4\x5b\xd8\x4b\xbc\x10\x9c\xb5\xe0\x9a\xfc\x1c\x35\xe1\x82\xad\xe3\x56\xe6\xc3\xf0\x4e\x38\xba\xd9\x05\xbf\x20\xf0\xf7\x87\x8d\x7a\xa3\xec\x52\x14\x2d\x17\x98\xf8\x93\x52\x5e\xe4\x97\x2d\x31\xb4\xba\x1e\xe1\x2b\x2e\xec\xed\x4b\x16\xaf\xd6\xaa\x1e\x55\x5d\x8f\x60\xb6\x5d\x90\x6e\xbb\x77\x4d\x6d\xb2\x69\x6a\xfd\xc9\x45\x7e\x69\xf9\x97\x1b\x79\x60\xe5\x66\x7e\x15\xa7\xe6\x0d\x68\x56\xee\xc9\x4b\x1f\x89\x51\x5d\x93\x68\x92\x5d\x4c\x92\x29\x75\xb5\x08\x73\x81\x91\x14\xc3\x95\xff\x55\xb1\x7e\x89\x1b\xce\x6e\xc3\x5c\x01\x3e\x49\x85\x88\xd9\x0e\x06\x8f\x07\xb1\x0e\xa5\x9a\x56\x9f\x17\x1c\xa3\xce\xb1\xd1\xd0\x5a\x2c\x73\x03\x4d\x7c\x43\xec\x59\x99\x61\xfc\x98\xdb\x27\xad\x38\x32\x3b\x20\xd8\xb2\x5c\x60\x02\x44\x0c\x60\xf4\x21\x0b\x62\x83\x7d\x07\xc5\xd8\xa0\xa9\x4b\xe8\xb3\x17\xfb\x63\xb1\xab\xc4\x44\x91\xb4\xf3\x4b\x8e\x7c\x13\xd0\xd8\x1d\x72\xf0\x8b\x62\xd7\xec\xa8\x77\x3a\x0a\xda\xed\x75\xa6\x47\x91\x35\x5b\x7c\x1d\x69\x28\xdb\xb6\x58\xb6\x76\x28\x1b\x99\x3a\x7f\xfb\x48\x36\xca\x53\x6f\x71\x2d\x72\x16\x28\x71\x1f\xdd\xd9\xf7\x31\xeb\x51\xf2\x48\xe8\x51\x6c\xde\x7a\xb9\x51\x88\x0e\xef\xa1\x82\x34\x9e\x04\x6b\x57\x28\x3e\xc4\xd5\x5a\x84\x12\xa1\xb9\x77\x99\x1a\x09\x1a\x06\xc7\xc1\x60\xc2\xf4\xb8\x2a\x33\x96\xdd\x99\xe5\x66\x2a\x2b\x14\x29\x61\x7a\xba\xc8\x70\x6a\xad\x50\xbd\x4e\x39\x27\x69\x5b\xb8\x0f\xd3\xed\x07\x0c\x0c\xe9\x75\x9b\x8d\x6d\x01\x76\x53\x2f\x43\xd0\x9e\x03\xd8\x45\x7e\xc9\x6b\x02\xe0\x0c\x5e\x42\x31\xac\x33\x7a\x5b\xaa\x98\x50\x5e\x3d\x07\x0d\x99\x1a\xc2\x3d\x44\x7a\x0a\x07\x43\x95\x25\x38\x18\xb6\x6b\x24\x71\x98\xe0\xaf\xd0\xe4\xfd\xfb\xf8\x18\x51\x1b\xd6\xa4\xb0\x11\x64\x31\x83\x78\x4e\xd9\xd6\x3b\x0d\x30\x6c\x24\x62\xe7\xf8\xb7\x8f\x71\xdb\xc3\x9a\x20\xc4\x47\x5b\x0d\xf0\xa1\x8d\x01\x7a\x89\x7d\xc2\xfb\x34\xfa\xf1\xbe\x4f\x4b\x25\x76\xd1\x15\x2d\x6a\x07\x4d\xed\xd6\x2e\xf1\x59\x7b\x9c\x45\xe1\x39\x77\x53\x06\xd3\xc9\x5b\x36\x87\xfa\x45\xfa\xaa\x81\x82\x68\xb1\x4f\x37\x87\xbc\x7d\x54\x13\xc0\x37\xd3\x3e\xc6\x32\xee\x4b\x6a\x05\xf6\xe5\x2d\x87\x01\x6a\x6e\xd8\x11\x82\x2a\xe3\x77\x7b\x4a\x5b\x1e\x88\x78\x6a\x60\x25\xd8\xd7\x54\x61\xe2\x2c\xa4\xff\x1d\x4f\x43\x47\xee\xc6\xcb\x5a\x2d\xfb\x71\x84\x71\x80\x0f\x31\x62\x71\xe4\xe9\xdd\xad\x79\x52\x5d\x4f\x6c\x4a\xbd\xfc\x08\x8f\x12\xd1\x47\x94\xd3\x6f\x84\x4b\x69\xac\x17\x2a\xaf\xda\x94\xb2\xe7\xd2\x74\x7a\xc5\x90\x63\xa1\x23\x2f\x54\x60\x75\xfb\x6a\xab\xc2\xcd\x58\xf5\xfe\xaa\x33\xdf\xb4\x89\xfe\x1c\xca\xb7\x71\x85\x35\xb2\x53\x75\xef\xfe\x9d\x0e\x3d\x1f\x39\xbe\x2b\xda\x78\xfb\x9a\xef\x1d\xb2\xbc\x89\x0c\x84\x77\xe1\x81\xf9\x94\x95\x54\xf9\xf0\xcb\x42\xea\xe3\x58\xfa\x8e\x24\x3c\x16\x51\x9f\xd6\xf4\xdc\xba\x5b\x30\x1e\x1e\x41\xdc\x9c\x67\xba\xb2\x8a\x77\xbf\x4d\xcc\x1b\xc3\x98\x5d\x5b\x24\xab\xc4\x5a\x1e\x75\xa3\x5d\x01\xb2\x20\xa8\xd8\x33\x2d\xc7\x50\x96\x52\xd7\x07\xea\xa7\x46\x16\xcc\x3c\x37\xd1\xf5\x82\x57\x2d\xf3\x45\xc0\xcc\x54\x16\xb2\x82\xd8\x05\xb4\xfb\xea\xe5\xca\x02\xc0\x00\xb1\xf1\xc1\x0e\xe5\x1a\x99\x40\x8e\x97\xe8\x97\x9a\xd9\x3b\x06\x43\x2c\x4a\x72\x93\x1b\xdf\x04\xce\xce\x39\x62\xc3\xae\xc0\x99\x15\xe8\x0b\xe8\x13\x8a\x45\xa7\x6f\x42\x7e\xe2\x74\xa1\xa6\x57\xf6\x43\x23\x06\x0f\x79\x20\xc1\x75\x2b\xbe\x65\x9d\x12\xa1\x0b\xa4\xeb\xa1\x06\x43\xd0\x57\xa0\xf4\x7d\xeb\xbe\xfc\x46\x61\x50\x9f\x43\x16\xe4\xa0\xdf\xc1\x26\xdb\xd4\xdc\x67\xc2\xc2\x00\x53\x26\x7f\xdf\xaa\xf6\xe7\xc1\x9c\x47\x6f\x49\xed\x81\x93\x0d\x30\x7b\xc4\x3a\xe5\xb3\x59\xb7\xce\x7d\x78\xe8\x8c\xac\x16\x30\x09\x57\x1c\x0a\xd7\x42\xce\xae\xa2\x2b\xee\x2f\x0c\x76\xfe\x5c\x55\xf9\x32\x07\x1d\x0b\x03\x6d\x50\x71\x25\xd3\x9a\x1c\xc0\x6e\x75\x7f\x4e\xac\xfe\x4a\x1b\xe0\x6e\xff\xf0\x2f\x7d\x6f\x6a\xf3\xc1\xe2\x14\x3b\x8e\x07\x5e\x9a\xd3\x2a\x07\x83\xa4\x5b\x4a\x97\x3a\x2b\xe1\x9d\x93\xd8\x88\x86\x47\x71\x3b\x15\x35\x09\x9d\xec\x20\x26\xdf\x39\xc7\x34\x13\x68\x8c\x61\x15\xd3\x8e\xfc\x28\xee\xf9\xf5\x2a\x51\xa6\x95\x6b\x86\x50\xab\x6a\x9f\xe2\x10\xae\x3d\x10\xe6\xf7\x01\x5d\x82\x34\x51\x64\x49\x18\xbb\x10\xdf\xa3\x52\x28\x6b\x57\xc7\x71\xd8\x19\xe5\x80\xf6\x3b\x8c\xe7\x73\xe9\x9e\x1f\x17\xe2\xe0\x3d\xd7\xb0\x7d\x5a\x0d\x60\xee\x7f\xb0\x87\xff\x7f\xf9\x98\x7e\x2b\x09\xc4\x58\x76\x1e\xc1\x8f\x0d\x16\x8e\x62\xc0\xdb\x25\x1a\xdc\x5b\xff\xfe\xf2\x4b\x50\x38\xec\x36\x71\xa2\x09\x4f\x15\x66\xb3\x63\x75\xd6\xbe\x88\xd0\xb2\x90\xd0\x27\x25\xf0\x9d\xa8\x4e\xf4\x87\x5f\x2e\xf8\xb8\x5e\x92\x50\xc3\x05\x4b\x43\xfa\xb0\x36\x8a\xec\x46\x4e\xd5\xde\x16\x54\x5c\xc9\x32\x00\xda\xd0\x5e\x8e\x4a\xca\x5c\xb8\xef\xfb\xac\x6b\xde\xbb\x1e\xb9\xb3\x4d\xde\xda\x73\xe3\x76\xc5\xd2\xa7\x84\xdd\x19\xed\x07\xc4\x7d\xf0\xb9\x60\x55\xa5\x08\x3f\x6b\x5f\xa3\x38\xd0\x70\x94\x96\xb1\x67\x58\x69\x44\xb8\x71\xbd\x69\x17\x16\x97\xe6\x9f\xb1\x78\xb9\x8e\xfc\x07\x08\xca\x5f\xca\x15\xe4\xa0\xb5\x45\xd2\x37\x1d\x0a\x4b\xba\xe6\xff\x0b\xfa\x8a\xfd\xb4\xb6\xba\x62\x92\x42\xcf\xf7\x79\x42\x90\x3f\xda\x2c\xd4\x5e\x59\x3f\x6e\x7d\x92\xe4\x9f\xb4\x65\xfe\x56\xc3\x58\x5b\x27\xfa\xdf\xe4\x2e\x64\x09\xda\x18\x83\x95\x70\x1f\x07\xca\x59\x4e\x1a\x9e\xe9\xa5\xeb\x8f\xe0\x57\xdd\xea\x53\xbc\xed\x23\xd1\xd4\x60\x9e\x66\x87\x16\xc7\x46\xdf\x90\xbd\xf3\x51\x5a\xda\xbe\x9a\x63\x30\x1c\x7e\xaf\x7c\x1e\xf2\x52\x96\x40\xbf\xc2\xa8\x32\xf3\x11\x52\x78\x32\x52\xec\xa5\x8b\xf1\xf7\xd1\x0d\x50\xf5\xec\x46\x05\xe3\xa0\x4b\x9b\x56\xd7\x50\xe3\x16\xc2\x80\x67\x39\xb6\xe0\xe5\x23\xb9\x0e\x9e\x37\xaa\x77\xad\x7c\x4b\x24\xe2\xf8\x38\x1c\x13\x0a\x68\x25\x8c\xb6\x47\x3f\x0e\x6a\x94\x62\x81\x96\x61\x2a\x22\x53\x85\x5c\x43\x36\x05\x96\xc3\xc0\xc1\x22\x2c\x36\x65\x9d\xbb\xf6\x96\x6c\xba\x43\x62\x15\x68\x51\x67\x6d\x85\x29\x5e\x55\x42\xe6\x06\x7d\x2c\xf6\xdf\x64\xde\x74\x57\x0a\x21\x94\xdc\x70\x05\xb7\xde\xa6\x68\x04\x0c\xb2\x16\xdc\x46\x53\xff\x2c\x43\x81\xd3\x72\x3a\x85\xb8\x21\x58\x8e\x4c\xad\x60\x41\x4a\x1c\x4d\x0a\x96\x4c\x1e\x8d\x6b\xdf\xc9\x0c\x39\xdb\x54\x1d\x6a\xab\x33\x14\x47\xf1\xb1\xf2\x67\x55\xc7\x75\x5d\xf6\xc9\xb8\xec\xe6\x66\xf3\x7d\x4d\x2f\xf3\x7f\x04\xc3\x8b\x73\xf9\x44\x2c\xa5\x23\x56\xa3\x28\x44\xa9\xcb\x03\x77\xe6\x46\xb9\x4c\x26\xa9\x72\x1d\xc9\xcc\x18\xd6\x87\xa1\x3d\xa5\x32\xb5\xda\x54\x4c\xc0\x57\x12\xd8\x8d\x39\x75\xbb\xd2\x55\x7d\x6e\xfe\xc3\xe8\xb2\xdb\x3a\x82\x0e\xc3\x0f\xdd\x91\xe8\x5b\x4d\x0e\x9b\x12\xb1\xb9\x07\xd0\x65\x11\x52\x3f\x9c\xc8\xa0\x92\x78\x12\xa2\x7a\xf5\x9d\x26\x75\x7a\xa8\xcb\xf8\x19\x1b\xd5\x09\x10\x4c\xea\xee\xae\x9b\x0b\xda\x26\x7e\xce\xb3\x67\x10\x8a\xf1\xa3\xd1\xe5\xb3\x24\xa2\xa8\x74\xd1\x44\x11\xfa\xfa\x83\x0f\x83\xc4\x9c\x9c\x78\x31\xf7\xa5\x46\x87\xc0\x6e\xe9\xb4\x4b\x38\x6d\x7d\x45\x38\xdb\xe2\x1a\x3a\x91\xb1\xa5\xdb\x49\xf9\x72\x69\xbf\xc9\x11\xe2\xa4\xd0\x93\x38\x8d\xc3\xf0\x92\x2d\x21\x38\x14\x5c\x94\x1c\x1f\x6d\xa1\x88\x62\x5c\x7f\x2b\xda\xcd\x61\xa2\x5f\x56\x7a\x99\x52\xaf\x5d\xb4\x0d\x51\xef\xe1\xd6\xbe\x44\x9a\x1a\xf8\xec\x08\xf1\x5a\x6d\x24\x46\xfb\xc4\x7e\xd4\x88\xe6\xbe\xcb\x11\x05\xaa\x26\x6f\xb6\x58\xe8\x72\xa9\x90\x85\xb1\x0c\xb1\x61\xee\xd1\xe0\x46\x61\xcf\x0e\x58\xb8\xed\xc6\x71\x43\xec\xae\x13\xd6\xa0\xf9\x78\x88\xb8\xe9\x7a\x3a\x59\x8b\x7e\xf4\x4d\x80\xf2\xed\x3b\xc3\x47\xc6\xe1\x2b\x03\x8a\x37\x35\x58\x7b\xce\x9a\x91\xe9\xb2\x2b\x50\xb1\x5d\xb9\x77\x4f\x05\xa3\x9d\xfa\xd5\x15\xa8\xc5\xab\xa9\x46\x55\x15\x98\xc3\x73\xc3\x7c\xa5\xd3\x4b\xb8\xf8\xf0\x91\x53\x8c\xab\xb1\x7e\xac\x16\x14\x19\x84\xf3\xdb\xb8\x07\xd3\x95\x5a\x8f\x0a\x69\xea\x97\xe4\x4c\x64\x80\xf6\xb0\xb7\x1c\xe8\x68\xb0\xc1\x91\xf6\x21\x78\x28\xdb\xf5\x3b\xda\x15\x43\x22\x27\xe3\xb6\x2c\x26\x5e\x10\x0d\x3a\xa5\xe7\x4b\xb0\x0a\xf6\x8a\xa2\xab\xd6\x16\x06\x82\x82\x5e\x23\x21\x79\xd6\x05\x25\x90\x4d\x6c\xd4\x0a\xea\x48\x26\xbf\x9b\x4b\x87\xef\x74\xf6\x99\x33\xaf\x44\x8e\x62\x41\x7e\x73\xee\x47\x9b\x37\x43\x2f\xe3\xb4\x5c\x1d\x41\x77\xb2\xfc\x64\xe0\xfe\xb5\xce\x33\x10\xc9\xe2\x85\x06\xdd\x24\x49\xd4\x48\x95\x92\x28\x74\x2f\x7c\x56\x14\xb7\x27\xde\xbf\xe7\xb7\xce\x80\x3b\x70\xb6\xd6\xad\x72\x74\x7d\x81\xe7\x08\x31\x2b\xd8\x4f\x39\x62\x1e\xdb\x6d\xce\x25\xc6\x39\xb6\x97\x54\xaf\x14\xd6\x3a\xff\x17\x29\xa4\xfe\x86\x57\xba\x92\xa5\x7d\x95\xfb\xc2\xa4\x6e\xba\xdd\x1f\x8d\x41\xad\xcd\x8a\xa5\xff\x21\xaf\xe5\x9b\x69\x95\xaf\xa0\xce\x6d\x39\x67\xdb\x68\xaa\x8b\x42\x4d\xed\xd1\x9d\x35\x98\x5a\x2f\x26\x0d\x45\xc2\x9a\x5a\xad\xc8\x0d\xe1\x7a\x66\xe4\x25\x5a\x4a\x54\x95\x63\x32\x73\xcf\xb2\x35\x8f\x68\x99\x65\xfd\xd1\x68\x34\xc0\x2e\xfd\x26\x34\x53\x85\xde\x17\xff\xd7\xc1\xdd\xa3\x4a\xb3\xf9\x35\xe6\xc2\xb8\x75\x9b\xe4\xe5\x21\x36\x57\x1c\x99\x05\xab\x6a\x55\xea\x32\x9f\xca\x42\x34\x46\x61\x4e\xbe\x69\x59\x9e\x29\xcf\xd3\x97\xc8\x8e\x2b\x80\x91\xa2\xbb\xd6\x4d\xe5\x71\x46\xed\x36\xec\xf7\xd8\xfd\x05\x03\xeb\xa2\x80\x1e\xed\x8c\x65\x7b\xf0\x33\x6a\x78\x46\x18\x7f\xf7\x4c\xfc\xfc\x21\xed\x5a\x2b\xfd\xfd\xad\x16\xe3\x24\x35\xdf\x3f\x23\x78\x89\x35\x57\x1a\x1d\xda\xda\x52\x2c\x3e\xcc\x94\x4d\x13\x05\x34\x3f\x27\xd7\x4b\xd0\x2c\x24\x66\x51\x43\x7f\xe5\xce\x28\x6a\x70\x4e\x9c\x8b\x25\xb8\x68\xec\xef\xe9\x64\xc0\x8d\x71\xaf\x92\x37\xf7\x30\xbe\x9b\xec\x7a\x94\x72\x39\x29\x5a\x36\xed\x4c\xd6\x92\x99\xa4\xe8\xf0\xe6\xf8\x88\x11\x6a\x89\xa5\x6d\x45\xb2\x73\x19\xc2\x58\xc8\x80\xa2\x27\x02\xf2\xbd\x40\x4c\x16\xc0\xf5\x4a\x3d\xc3\x67\xe1\x6f\x7b\xf7\x19\x5a\x52\x30\x4c\x42\xd6\xf2\x19\xfc\xc4\xa0\xc7\x58\x83\xab\x72\x05\xf1\x4f\x7e\xa9\x89\x59\x45\x3d\xa0\xe8\x16\x7c\x65\xee\x53\x2f\xa8\x83\xcf\x3d\x7b\xf9\x5e\x08\xdf\xf5\x1f\x6f\x65\x71\x0b\x16\x69\x7e\x7b\x79\x11\xfc\x1b\x3b\x5a\xbd\xc5\x61\xee\xc1\x93\xa0\x77\x34\x69\xf3\x63\xba\x66\xd5\xa5\xae\xd9\xf1\xc9\x62\x59\x75\x77\x2c\xeb\x3d\x8b\xe2\x7b\x43\x71\xcf\xce\xd4\x85\x33\x47\xdf\x1e\x45\xb4\xfa\x85\xeb\xd0\xe5\x87\xad\x4f\xe0\x51\xf1\x4e\x6c\xd8\xb0\xfc\x3b\xe2\xd2\xbb\x0e\xb9\x38\x38\xdd\xab\xfe\x6e\xcc\xa0\xf8\x6f\x8c\x41\xef\x2c\x69\xba\x95\x3e\xbb\x09\x2d\xa2\xa5\x7f\x22\x9a\xb8\xff\xa1\xbd\x15\xba\xd7\xfa\x0b\xbb\x49\xfe\x1f\x5c\xef\x91\x45\xc9\x8e\x45\x07\x73\x10\xf2\xa3\xa6\x6a\xd5\x2b\xfa\xc7\x5e\xfe\xf3\x30\x71\xa1\x4a\x2b\xf8\x64\xe2\x5a\x55\x06\x6c\xc0\x3b\xf9\x3d\x11\xc6\x77\x55\xb1\x2f\x6d\xa0\xd4\xee\xcf\xdf\x74\xb4\x4d\xcf\x7e\x16\x96\xab\x07\x13\xb6\x4b\xed\x1f\x84\xd3\xee\x81\xe8\x0d\xa3\xab\x7e\xe5\xb6\x8b\x94\xce\x92\xfe\xaf\x21\x51\x5a\x95\xd6\xac\x24\x65\x92\x41\x80\xc2\x52\x95\x35\x55\xcf\xd1\x33\xd7\x6e\x07\x8c\xe0\x2b\x6d\x4c\x3e\x29\xd6\x62\x5a\xe8\x26\x3b\x98\xc8\xe9\x95\x22\x31\xd1\x97\xb6\xc3\x15\x0f\xd5\x3e\x4b\x75\x43\x21\x3f\xfd\xc1\x9e\xa8\x7d\x47\x4d\x32\xff\x35\x30\x4c\x1f\xe3\x0c\x02\x13\x69\x54\x26\x20\x2c\x82\x92\x43\x4a\x2c\x02\x8b\x3d\x32\x66\xd2\x95\x45\xa0\x2e\x44\x15\x5a\x10\xac\xb8\xe5\xd3\x8a\xb0\x42\x75\xd4\xaf\x27\x5d\xba\xd6\x52\x8c\x9e\x63\xcf\xa0\x76\x33\x99\x76\x03\x99\x77\x1d\x1d\x64\x74\x47\xcf\x94\xf8\xd3\x46\xce\x1f\x0a\x05\xde\x5e\x01\xd1\xb8\x5a\xc4\xfe\xd6\xe6\xa0\x2a\x32\xa5\x50\xff\x0a\x87\xae\xf8\xb3\x58\x54\xbf\xbb\x6f\xb0\x00\x7a\xce\x0b\x48\xc4\x9f\x9c\xd8\x80\x70\x1a\x1c\x0f\xbe\x66\xb0\xac\x94\x0c\x4e\x06\xd0\xd9\xa3\x2f\xbc\x70\x00\x97\xde\x5e\xeb\x30\xb6\xb9\xba\x4b\x5a\xf5\x41\x77\xd7\x7b\xe0\x8e\x6c\x1d\xd5\x7a\xa0\xe9\x75\x45\x55\xfa\x0e\x11\x3c\x01\xc2\x95\x13\xda\x50\x9f\xbb\x95\x55\xb1\x94\xab\xc1\x87\x50\x47\x28\x8a\xc6\xe9\xca\xa7\xc0\x61\xef\xf8\xca\x5c\x89\x81\x6b\x23\xf2\x37\x74\x61\x88\x2b\x00\xa7\x28\x02\xab\x7d\x77\xd0\x31\x6f\xc3\x90\x86\xf0\xfc\xa6\x3d\x18\x36\x7e\xd1\xe6\xce\x0b\xed\xb2\xc6\xed\xce\x0b\xef\x7c\x5c\x7f\x54\x3f\x95\xa7\x1d\x77\x91\xc4\xe6\xe6\x0b\x5f\x60\x24\x38\xd4\x7c\xc2\x10\x00\x57\xc3\x8d\xf1\xe7\xdf\x82\x04\x30\xe4\xfc\xce\xf6\x82\xd0\x1b\xb1\x06\x99\xec\xdb\xeb\x40\x47\x5b\x0b\x1f\x60\x8e\xfc\xbd\x83\xd4\x5b\x4e\xcc\x6f\x83\x53\xb6\x15\x54\x26\x03\x4f\xa9\xd5\x72\x97\x47\xd3\xfe\xd7\x65\x29\x37\xab\x2d\x15\x52\x07\xfb\xa3\xd5\x87\x38\x39\xcc\x4e\x94\xb2\xe2\x2a\xca\x8f\xfb\xa0\x96\xca\x3e\x73\xe4\x42\x18\xcc\x36\xec\x5a\x29\x2a\x06\x42\x21\xa8\xb3\xa1\x87\x89\xa2\x88\x38\xc2\x5a\xfc\x85\xea\x6e\x42\xd4\xaf\xef\xe9\xbb\x0b\x65\x60\xcc\xfe\x38\x84\x19\xc8\x5d\xda\x86\xb2\xbd\x70\x66\x12\xa4\x99\xbd\xb0\x66\x52\xb4\xc5\xe1\x45\x94\x08\x5f\x6e\xda\x80\x5d\x54\xe5\xac\x30\x5e\x5a\x9f\x28\x32\x35\xec\x11\x02\x14\x60\x37\x04\x02\x19\x55\x41\x91\x7e\xe5\x13\xdd\x41\xa2\xf0\x91\x40\xd3\xa9\x5a\xd5\x2d\xdb\xce\xaf\xca\xc0\x73\x2f\x32\xaa\x8e\x12\xf0\x78\x1f\x07\x6c\xba\xa7\xe3\x5a\xf6\xf6\x01\x8a\xd8\x05\xc6\xe6\xca\x7f\xdd\x09\x7d\x88\x2a\xd7\xc5\xc0\x55\x23\xce\xb1\xac\x54\xd4\x6d\x00\xc2\x52\x57\x19\xb8\x33\x59\x84\x04\x6f\x72\xb5\x91\x3a\xcc\x86\x1d\xc5\x8a\xf8\xb6\x79\xbd\x9e\xfc\xe8\xdb\xce\xe9\xc9\x8f\xe0\x3c\x08\x25\xbf\x53\x52\x32\xaa\xee\xeb\xc9\x8f\xc9\x60\x2d\x6a\xf2\xbb\x8e\xa8\x7e\x33\x55\x75\x46\xf0\x5d\xa9\xf5\x21\x3d\x89\xa1\x62\xc9\x00\xbf\xaf\xb5\x5b\x6b\x13\xb7\x50\x4a\x17\xa6\x83\x19\xec\xb1\x82\xae\x20\x0c\x56\xcd\x8f\xf3\x6e\xf7\x3b\x6a\x20\x8a\x0f\x52\x93\x7f\xfb\xe5\xa2\xba\xa9\xbf\x72\xc5\xdc\x68\xae\x46\xdf\xdf\x7e\xc5\x42\x34\x5b\x6b\x83\xee\x5a\x33\x7c\xb4\x03\xb6\x6b\xd9\xfc\xde\x83\x93\x6e\xeb\xea\x6d\x3a\xf6\x7e\x5f\xbe\x6d\xcb\xd7\x71\xfa\xee\xbf\x80\x29\xf0\xfe\x46\x9c\x77\xf0\x21\xff\x22\x86\x86\x9b\xbc\xcc\xf4\xcd\x08\x3e\xe9\xcd\xc7\x5b\x1b\x20\x7d\x22\x36\x38\xfc\x0a\x6b\xc3\x2b\xa0\x90\x56\xe4\x59\xb7\x29\xa1\x6d\x7d\xe8\xf8\x16\x0b\x46\x97\x65\x96\xbd\xb8\x56\x65\xed\x6d\x0c\x3d\x7a\xb4\x37\x74\x65\x7e\xdf\x38\x32\xf9\x3b\x9a\x1b\xe0\x9b\xbb\xc2\x39\x22\x6b\x03\xb3\x2e\x78\xc3\xc2\x79\xa5\xe4\x6e\x93\xc2\xe1\xa1\xf8\x8f\x37\x68\xcd\x36\xad\xf2\x4b\xa1\x75\x1b\x10\x1b\xd4\xb0\xb1\x30\xcb\x55\xbd\xa6\x26\x0d\x23\xf1\x46\x0b\x4a\xee\xc2\xe1\x74\x59\xac\xa9\xee\x21\x19\x83\x7d\xe9\xa6\xba\x6a\xea\xc5\x7a\x14\xea\xa1\x63\x32\x3e\x1b\x6e\x18\x0a\x94\x53\xfc\x69\x99\x61\xc5\x5f\x88\x0a\x2b\x75\x0d\x5d\x34\xec\xe8\x3e\x5b\xdf\xaa\xdc\xce\xf3\xaf\x46\x3e\x62\xfb\x8f\xbc\xf3\x5c\xb8\x3e\x10\xcf\x18\xd4\x67\xa1\x20\x41\x18\xc2\x07\x2d\x24\x43\x84\x50\xf4\x67\x0c\xca\x0d\xa1\x83\x78\x76\xa1\x46\x24\x9e\xa1\x01\xc6\xbd\xed\x59\x98\x2b\x39\x14\x69\x8c\x67\x7e\x02\x5b\xab\xa7\xfc\x32\x5b\x8f\xfe\x67\xb3\xf2\xa4\x34\xff\x4f\x6f\xe4\x49\x3f\xe8\x77\x1b\xcf\x1e\x36\x9e\x14\x69\xbf\x9b\x78\x7e\x2b\x13\x4f\x8a\xd9\xfd\x2c\x3c\xbc\x11\x57\xcb\x6e\x01\xc9\x1f\x57\x6a\xcd\xda\x8f\xa1\x3b\xf5\xda\xfb\x50\x11\x15\xbe\x61\x69\x5d\xad\x59\xd8\x2c\x0e\xcb\xb8\x6d\x68\xfd\x22\x84\xa5\xb0\x7a\xba\x10\xee\x98\xa3\xe0\x3e\x4c\xc0\x98\x4a\x2b\x8e\xe2\x79\xc3\xe4\x4a\x48\xac\x73\x3e\xc9\x5a\x34\x65\x38\x33\x58\x54\x33\x23\x00\xbf\x7b\xe1\x70\xc7\x40\x56\x9c\x44\x8b\x1c\xfe\x15\xec\x57\x7b\xd0\xc3\x4e\xeb\xd5\xc6\x90\xff\x1c\x83\x39\x5d\x74\xbd\x38\x10\x63\x7b\x80\x7d\x8e\x07\xd9\xc1\x01\xaf\x87\x60\x77\x04\x42\xfb\x10\xfb\x7d\x29\x2d\xf1\xdc\x6f\x24\xb5\x98\xd8\x20\xf0\x9d\x8e\xe7\x0d\x04\xd7\x4d\x72\xbf\x92\xe8\xe2\x37\x5f\xc7\xf1\x89\x1d\xc1\x8d\x80\xc0\x76\x61\xd0\x7d\x69\xb7\xba\x6e\x13\xee\xef\x06\xc4\x7f\x4a\xa3\x52\xba\x3f\x3f\xda\x7e\xd8\xb2\x2c\xb9\x4d\x34\x4c\x5b\x13\xe2\x2e\xd8\x7c\x66\xee\x7b\x62\xfe\x6e\x5c\xfc\xfb\xd1\xc1\x3e\xb6\xc5\x34\xc0\x5f\x4f\x7e\x8c\x34\x86\xbd\x88\xc3\x99\x9d\x07\xed\x96\x6c\xbf\x84\x46\x7e\x37\x5f\xfe\x0d\x68\xe2\x57\x5b\x2f\xdb\x92\xdc\xaf\x5c\xdf\xdf\xed\x9c\x7f\xdb\x75\x8e\x0b\xb8\x56\x9d\x0b\xdd\x59\x8a\xb5\x5a\x6f\x34\x20\x74\xd1\x84\xac\xd6\x17\xf9\xe5\xaf\xdb\xfa\xfb\x19\x50\x97\x6a\xa9\xab\xf5\xbf\x88\x05\xf5\x65\x79\x80\xdf\x13\xac\x2a\xbf\x24\x4e\x0b\xe0\xed\x78\xbf\xc8\x72\xfa\x15\xce\xe0\x17\x9b\x4e\x37\x35\x1a\xfb\x87\x34\x1f\xe1\xc7\xfe\x2b\xd9\x8f\x5a\x5f\xf4\xbb\x01\x69\x0f\x03\x52\x0b\x6b\x7b\x58\x90\x2c\xc2\x94\x37\xe4\xa6\x52\x53\x6c\x4a\x27\x86\xa9\x9c\x4a\xf7\x73\x30\xf3\x46\x80\x70\x7f\xc8\x6c\xbd\x2e\xf1\xee\x83\xe7\xa5\x5d\xfb\x2d\x66\xa7\xc9\xc6\xfd\xc5\xf6\xe1\x4e\x0b\x71\x94\x00\xc7\xbc\x1b\x43\x97\x1d\xf8\xbb\xf9\x6c\x1b\x5d\xfd\x4a\xfb\x19\x35\xb4\xff\xdd\x6e\xf6\xcf\x66\x37\xdb\x44\x08\xff\x78\x86\x33\x22\xb1\xdf\x0d\x66\xbf\x1b\xcc\xfe\x5f\x30\x94\xb4\x36\xe6\x2f\x8b\xb8\x0b\xb5\xbf\xba\x37\x53\xfb\xaa\xdb\x21\xa9\x41\xcd\xd7\x13\x0b\xb2\x45\x97\xd8\xd0\x2e\x21\xf6\x0c\xa7\xf8\x4f\x20\x0e\xfc\x6e\x19\xfc\x07\x24\xf8\x7d\x4c\x83\x9c\x2c\xb7\x5b\x0a\x3f\x5e\xd2\x75\x16\xc3\x0f\xed\xaa\x71\x9b\x36\x8c\x37\x32\x7e\xd6\xc1\xb7\xff\x57\xc8\xfe\x37\xb3\x84\xfd\x6e\xe9\xfc\x4d\x69\xfc\xa3\x4c\x9d\xbc\xa3\x41\xb7\xe0\xfd\xbb\x99\xf3\x1f\x7b\x91\x7f\x63\x3b\x67\x27\x41\xa0\x8d\xf3\xf2\x6f\x68\xe3\xac\x95\xa9\xdf\x51\x0d\xb3\x7f\x11\x0b\xe7\xff\xb5\x77\xed\x4b\xae\x73\x75\x23\x58\x51\x98\xa6\xcc\x6b\x61\x3f\xd8\x8a\xaf\xb3\x4a\x2e\xd5\x8d\xae\xae\x60\x91\x78\x51\x49\x59\x7a\x29\x56\xf2\xeb\xf6\xc9\xb8\x4b\x95\x7d\x91\xeb\x2a\x8a\x05\xb9\x2d\xed\xbc\x55\xa6\xfe\x8a\x75\x35\xad\x54\x01\xa4\x06\x76\x56\x68\x82\x77\x8e\x65\x26\x97\x7a\x49\xfd\xb0\xf2\xba\x67\xa0\xba\x62\xa8\x53\x03\x25\x32\x4d\x5e\xce\x0b\x85\xef\x41\x52\x06\xc8\x4a\x49\xa3\x4b\x39\x29\xd6\xc2\x2c\x25\x76\xa5\xea\x9f\xfd\xff\xc7\x57\xa2\xc8\x4b\x65\x05\x23\xfb\x5e\x1c\x54\x14\xba\x16\x4a\x9a\x1c\x37\x88\x6b\xb0\xac\x4b\x1a\x16\x4a\xdd\x40\xc5\x18\xfb\x7d\x76\xa4\x85\xac\x4a\x65\x0c\x56\xb9\xcf\x41\xd8\x60\x0f\x1a\x75\xad\xca\xa8\xaa\xb9\x2e\x0a\x7d\x63\x51\x4a\x1f\x88\x75\xe2\x29\xb7\x9e\xb5\xea\x4b\x71\x73\x80\x75\x16\xb4\xae\xc9\x04\x6d\x27\xad\xca\xba\x5a\xaf\x74\x5e\xe2\xb6\x87\x92\x6e\xa0\x6d\x28\xab\x99\x35\x68\x4c\x6e\x0f\x36\x7a\xa5\xe7\xe2\x40\xbc\xd2\xf3\xb9\x85\xb6\x94\x98\x63\x76\x7e\x07\xec\x9b\x26\xaf\x95\x38\x10\xe7\x0e\xdd\x2e\xb1\xdf\x2d\x70\xc7\x33\xf6\x77\x78\x84\x96\xc4\xc2\x6e\x01\xfd\xb6\x29\xc5\x81\xc0\x2b\x48\x19\xea\x56\x4d\x1b\xf7\x26\x09\xbc\x6c\xc7\x2b\xbf\x55\xa6\x29\x5a\x2f\xb5\xfb\xac\x29\xa8\xb8\xa8\xe7\xf9\x16\x89\x54\xc1\x84\xb6\x8a\x27\x76\xb1\xc8\x55\x25\xab\xe9\x62\x8d\x64\x71\xa5\xd4\x4a\x55\xae\x90\x41\xa1\xe7\x1b\xca\xb6\x74\x60\x18\xf9\xbd\x7d\xc4\xb3\xfa\xae\x75\x08\xe3\xc1\x26\x7a\xa5\xe7\xc6\xf5\x30\x67\xbb\x91\x1a\x22\x59\x9e\xa6\x97\x79\x1d\x99\x4c\x39\x99\x24\xf6\xd1\x42\xcf\x99\x81\xdc\xce\xe5\xcc\xcf\x0a\x0b\x7c\x75\xcd\x09\xea\x99\x76\xf7\x72\x77\x94\xe5\xf0\xe7\x5b\xa9\xc3\x0d\xc7\x1a\x37\xe8\x01\xc0\x71\x6f\x59\xfd\x18\x3c\x36\x57\x76\x23\x60\xe3\x76\x3b\x88\x01\x82\x33\xaa\x6e\x56\xfd\xc1\xd0\xe1\x65\x55\x29\xb9\x9c\x14\xaa\x4f\xfb\x15\x40\xa7\xd2\xee\x20\x2a\x52\x15\xa6\x51\x35\xe5\x48\x20\xd3\x71\xcb\x6c\xa8\x57\x3c\x13\xe3\xd3\x0f\xbf\x0f\x4c\x77\x24\xc4\x4b\xcb\x0a\x54\x59\xe7\x95\x2a\xd6\xa2\x59\xb9\xe5\x60\xb3\xbb\x01\x3f\x4f\xdd\xf3\x66\x47\xe8\x98\x81\x3d\xd2\xda\xab\xd2\xea\x98\xee\x88\x3e\xb5\x66\x53\x81\x3e\xb2\xa9\x74\xad\x0e\x3d\x49\x85\x79\xe9\xa1\x2d\x05\x08\xfd\x7a\x49\x63\xf4\x34\x0f\x05\x3c\x5b\x8b\xe6\x25\x05\xcf\xb5\x9f\x53\x9d\xe1\xa5\x5c\xf3\x46\xf1\xc8\xe1\xec\xc9\x09\x1e\xb0\xd5\xaa\xd2\xab\x0a\xda\x0e\xba\x8f\xd9\x85\x04\x5d\xd2\x67\x3c\x77\xc2\x09\x43\x44\x8d\xb7\x06\xa8\xd2\x24\xb1\xf9\x6a\xa6\xa1\x3e\x34\x4c\x7c\xf7\x27\xe5\x06\x68\x61\xc7\x5e\x45\xd6\xf1\x81\x78\x85\xab\x67\x63\x7f\x8d\x88\x5c\x89\x66\x35\xd5\x4b\x28\x13\x4d\x44\xe4\xd8\x5a\x4a\xe8\xd3\x5b\x6c\x66\xa8\xcb\x5a\xdd\x46\xc3\x84\x15\xd9\x85\x24\x0b\xf7\x0d\x11\x3d\xc7\x0f\x4e\x6d\x28\x80\x58\xda\x28\x72\xe5\xa7\xf7\xc4\xd0\x2c\x2f\x73\xb3\x68\xbb\xf9\x7e\x31\x8e\x68\xc0\xec\xef\x87\x23\x6d\xea\xbd\x91\xf4\x05\xc8\x33\x98\xca\x01\x33\x76\x5c\x44\xe8\xa6\x5e\x35\xac\x0e\xf3\x8d\x38\xff\xe6\xa5\xef\xf9\xe1\x9b\xf1\x50\x2b\x11\xc7\x8e\x89\x79\x0b\xa1\x46\xf3\x91\xf8\x5e\x09\xd3\xac\xa0\xa8\x6e\x5e\xce\x34\x71\x2f\xe8\x61\x37\x18\x0a\x05\xf5\xa5\xed\x2f\xf5\x74\x34\x1a\xa1\xf9\xb4\xc8\xaf\xfc\x68\x23\x7a\x88\x00\xb6\x31\x51\x7a\xfd\xdb\xd6\x54\x40\xac\xd7\x8d\xe5\xd7\x45\x61\xcf\xab\x39\xb2\xc6\x4a\x37\xf3\x85\x3f\x64\xde\xb8\x6a\x72\xd0\x8c\x5b\x18\xa9\x97\x0a\xbe\x97\x3e\xcf\xd4\xb2\xcc\x64\x95\xf9\xc1\xcf\xbf\x79\xd9\xbd\x16\xaf\xe0\x48\x89\xb9\x18\x3e\x73\x46\xff\xe5\xc1\x2a\x56\x4f\x39\xc3\xce\x44\xde\x04\x97\x61\x5d\xa8\x5e\xcf\x5f\xc1\x22\x77\xef\xba\x2e\xbe\xa9\xe5\xf4\xea\x1d\x76\xcd\xc4\x14\x93\xe7\x72\x55\x37\x15\x7e\x2e\x5f\x19\x10\x8d\x04\xc8\x46\x60\xa2\x82\x45\x06\xa9\x5a\x02\x69\x41\x1f\x22\x28\x48\x68\x1f\x33\x94\xfe\x82\x25\x08\x8b\xf5\x48\xd8\xc5\x74\xed\x8e\x26\x4a\xb8\x06\x84\xd8\x9a\xd2\x28\x45\x45\x13\x47\xbe\x34\xbe\x2c\x8c\x86\xb2\xc8\xc6\x75\x99\xb6\x43\x01\x56\x6b\x2d\xac\xc8\x68\xdf\xa6\x2a\x23\xfa\x40\x2c\x37\xca\xe3\x1f\x29\x64\x30\x72\xdf\x4a\xdf\xf0\x8e\x0e\x6b\xfa\xd3\xa2\xe2\xa2\x57\xe8\x79\x6f\x28\x7a\x99\x9a\x34\xf0\x8b\xa5\x19\xfb\x5f\x3b\x86\xfd\x2f\x50\x59\xef\xd2\x37\xb1\xea\x17\xea\x5a\x15\x03\x71\xf6\x39\xa9\x4e\x85\xaa\xc5\xd2\xcc\xbf\xc1\x4a\x82\x0e\xc7\x42\x98\x9b\x1c\x5c\x00\x04\xef\x7b\x94\x59\xbc\xd1\xeb\x9e\x45\xd7\xe0\x8d\xf1\x25\x7c\xf9\x33\xef\x00\xe0\xef\x81\x71\x47\xb5\xfe\x6e\xb5\x52\xd5\x73\x69\x54\x7f\x40\x2d\x1b\x43\x31\xe3\x49\xa5\xe4\x55\x54\xa3\xd5\x7e\x7b\x2d\x34\x92\x59\x84\x9c\x0b\x18\xf0\x32\xd8\xa6\xe8\xc2\x06\x38\x71\x26\xfa\xa3\xd1\x48\x56\x73\xc3\x90\xc1\x0a\xa7\x5a\xe2\x0c\xd5\x6e\x03\x69\x3e\x38\x8b\xa9\xf2\x01\xfb\xaa\x07\xc2\x8e\x37\xfa\x51\xe7\x65\xbf\x27\x7a\xf0\x41\x3f\x94\xfe\x83\xec\xb4\x47\x72\xb5\x2a\xd6\xfd\x68\x4a\x43\x78\xcc\x19\xac\x40\x5f\xf5\x5d\x53\xbf\xaf\xe4\xea\x70\x92\x97\xa8\x98\xcf\x2b\xdd\xac\xfc\xf6\x02\x6a\xbb\xe8\xc1\x45\xbb\xd6\xf0\xcb\x73\x5d\x14\x72\x65\x54\xc6\x17\x1d\xee\xb0\xef\x24\x34\xfe\x19\x86\x4b\x11\x04\xc0\x1c\x91\x78\x61\x03\x9c\x45\x64\x21\x27\xaa\x38\xeb\xf5\x22\x4c\xe2\xe8\x78\x2f\xea\xf2\xf9\x91\xe8\x85\x01\x12\x4c\xa6\x7c\x41\x88\xde\xa8\x52\x2b\x25\xeb\xfe\x83\x07\x2d\xfe\xd0\x81\x59\x8e\x80\x17\x65\x96\x7e\xdb\x68\x4e\x37\x3c\xbf\x99\xef\x82\xb4\x78\x60\xdf\xef\x87\x76\xed\xfb\xb6\x4c\xf9\xe0\xa0\x7b\xca\xad\x22\x94\xd0\xc8\x0d\x05\x6f\xf8\x80\xaa\x99\xd6\xba\x62\x16\x23\x68\xda\x8b\xcd\x72\x17\xaa\xca\x6b\xb0\x5c\xdd\x81\x9e\xd1\x1d\x5a\x9c\x3b\x52\xbe\x33\x2a\xee\x1b\x07\x02\x5d\x4b\xcc\x27\x41\x9c\x5a\x76\x81\x60\x1c\x77\xb7\xb7\x63\x61\x89\xc7\x62\x2d\xf2\x32\xaf\xc9\xad\xd5\x3d\x59\x6f\x98\x0a\x03\xfe\xb7\x6e\xc0\x78\x51\x2f\x14\x58\xa7\x98\x94\xe9\x35\x00\x90\xf6\x83\xf4\x2f\x96\xaa\x5e\xe8\xcc\x40\x01\x52\x35\x55\xc6\xc8\x6a\x0d\x30\x32\xe3\x5a\xc1\x1d\xec\x19\x17\xbd\xd0\x2b\xd7\xd7\xb2\x12\x5f\xad\x2d\x7e\x0c\x15\x24\xeb\xc4\x57\xbf\x47\x40\x3d\xbb\x3c\xf4\x2c\x5d\x8a\xcd\xf5\xb0\xab\x42\x18\x0f\xca\xf1\xf7\x9d\x17\xf5\x8d\xaa\x0d\x9d\x80\xf9\x5f\xb1\xe7\xdc\x2d\xfe\x9a\xcf\x44\x5e\x0b\x75\x9b\x9b\xda\xf8\x1e\x71\xad\x26\x4d\xe3\x23\x36\x18\x16\x5e\xf5\x47\xb9\x2b\xa8\xee\x9a\x1c\x4d\x6f\x87\xe2\x67\x3b\xf6\x33\x31\x3e\x82\x3e\x05\xf7\x69\x2b\x6c\x9c\xff\x6a\x97\x94\xc9\x3f\xc5\x4a\x0a\xa0\x87\x8b\xbe\xba\x86\x8e\x6e\x53\xbb\x08\xb3\xa6\x10\xba\x54\x66\x00\xda\x82\xc9\x33\x75\xa0\x66\x33\x10\x48\x2c\xa1\x15\xb9\xa9\x87\xc2\x68\x36\x52\xa5\x88\xe2\xf2\xda\xc9\xf5\x10\x82\xc4\x8d\x05\x4e\x6f\xc5\x7a\xfc\x10\xdd\x86\x97\x37\x7a\x0e\xec\x97\x07\x4b\xe1\x7d\xce\x6e\x0a\xac\x52\x2f\xce\x44\xee\xc7\xf9\xd0\x42\xcf\xe1\xa1\xf8\x93\x34\xf9\x54\xa4\xc6\x2c\x5f\x61\x98\xe1\x50\x66\x99\xfd\xa5\xdf\x5b\xe9\xd5\x01\x9a\x29\x7b\xc3\x1d\x48\x64\xb3\x19\xad\xf4\xaa\xcf\x48\x4b\x88\xd0\x46\x30\x37\x56\x7a\x57\x15\x6e\x1d\x99\x17\xd4\x99\xce\x4e\x05\x0e\x5b\xd8\x89\xa6\xd6\x2b\x48\xe0\x1d\x85\x11\xc8\xe4\x81\x4f\xbf\xf8\xcf\x7e\x78\x1d\xce\x70\xc8\x48\xf1\x00\x1d\xed\xf1\xfb\xcf\x49\x45\xb0\xf2\x69\x5e\x66\xf9\x94\x56\x69\x21\x8d\xd3\xd5\x27\x6b\x90\x66\xbc\xda\x8d\x9b\xb2\x3d\x09\x0b\xde\x1f\x04\x74\x0f\x22\x44\xbf\x91\xd0\xfe\xb0\x65\x37\xdc\x8a\x6a\x80\x3e\xf8\x28\x84\x5b\x42\x31\xaa\x98\x11\x2f\x8f\x3f\x18\x12\x88\x9d\x51\x3e\x8d\xb1\x74\x40\x5d\x78\xb5\x23\xc6\x78\x85\x2b\x11\x5e\xdb\x8f\x27\x18\x89\x68\x8f\xf0\xff\xbd\xcc\x6b\x31\x3e\x3a\x5a\x9a\xd0\x6b\xd3\x2e\xbd\xac\x2a\xb9\x16\x14\x5c\xe2\xb9\xa9\xbc\x0a\xc6\x63\x75\x0b\x18\x65\xeb\xd0\x11\x36\x31\xb4\x63\x27\xab\xbe\x93\x24\x1d\x19\xc0\x89\x13\xd4\xc8\x52\xa9\xcc\x08\x59\x62\x5c\xeb\xb1\x9f\x33\x6b\xa9\x9f\xd0\x35\x99\x51\x7c\x53\xc7\x4a\x81\xbe\x64\xd1\x72\x68\xc9\x9c\xf2\xef\xcb\x21\x19\x53\x59\xd7\xd4\x5a\x47\xc3\xa1\xd7\x23\x5f\x2a\x68\x40\xd5\xa6\xbd\x4a\xfd\xd4\x28\x03\x9f\xdf\x3f\xa6\x2f\x6e\x51\x61\x5b\xcf\x72\x3e\x3c\x38\xfd\x5e\x77\x95\x5c\x0d\x87\x63\xb7\x4e\x84\x16\x53\x5e\x56\xd1\x0d\x45\x7e\x0e\x77\x22\xda\xf3\x11\xec\x1d\xf4\xa4\x27\x5c\xb7\x22\xec\x9e\x95\x21\xd8\x9f\xdc\x25\xeb\x27\x7a\x16\x26\x4d\x05\x6c\xdd\xe9\xd0\xac\xfa\x60\x27\x22\xb9\xda\xbe\x78\xd3\x73\x74\x97\xf6\x1b\x55\x58\x6d\x8b\x12\x74\xdf\xc3\x67\xb9\xb1\x3a\xd2\xd6\x67\x18\x8c\x7f\x6e\xae\xea\xad\xcf\xd0\xfd\x14\x9e\x5a\xb4\x6c\x7d\xc6\xc2\xf8\xe7\x6a\xba\x10\xc2\xa4\xfd\xe5\xaf\xe4\xea\x9d\x8f\xec\x80\xab\xfe\x6c\x0c\xdd\x89\xf1\xb0\xea\x77\xbf\xd0\xc3\x0f\xfc\x10\x5c\x04\xda\x30\x4f\x58\xa3\xee\x01\x9d\xc8\xa2\x0c\x85\x32\xd7\xba\x8a\x9a\x4f\xd9\x0b\x91\xb4\x08\x08\xd1\xb3\x0d\xe6\xfb\x30\xde\xd0\x99\xbc\xc9\x0b\xb8\x50\x6b\x71\xa3\x98\x0f\x62\x33\x49\xb3\x59\xb9\x8a\x9f\x51\x99\x7b\xd8\x17\xd0\x0a\x60\xab\xf4\xf9\x36\x1c\x18\xb8\xc1\x57\x39\x5a\x7f\xad\x1c\xc6\x5e\xe1\x9c\xa0\x6b\xec\x49\x00\xf8\xdf\x3a\xbd\x40\xb2\x91\x31\xf1\x35\xd6\x90\x57\xa6\xfe\x92\x2e\x87\x7a\x1b\xee\xbe\x8f\x0f\x76\xf4\xc0\x9b\x83\xf5\xbe\x68\xa0\xbe\x7d\x4d\x5b\x1f\x0b\xc9\xf7\xc4\x03\xe1\x1e\xf7\x11\x42\x35\xbe\x7f\x93\xe5\x96\xcc\xb6\x1b\x66\xe5\x75\x0f\x37\x89\x0b\x07\x78\x49\x9b\x3f\x82\x00\x6a\x46\xf2\xb0\x7f\xa6\x41\xdd\x76\x35\xa1\xac\x34\x6e\xba\xcc\xcb\x55\x9b\xd0\x17\xef\xe0\x7f\x5e\x14\x3a\x6b\x5a\xa1\xe7\xfd\xde\x17\xfc\xeb\xc3\x1b\x47\xb3\xa6\x28\xda\xcd\x7b\xfe\x0c\x11\x83\x9d\xde\x2c\xd7\xc6\xd0\x9e\x4f\x76\xf6\xbf\x19\x35\x77\x9d\x3d\x1e\xa7\xe9\xd1\x93\x29\x93\x57\x6c\x2d\x43\x25\xee\xae\x49\xbb\xda\xec\x70\x0e\xd2\x53\xa0\x65\xf8\x32\x2d\xa4\x80\xdc\x48\x13\xba\x39\x08\xf4\x22\x6f\x23\x95\xc0\xb4\x5b\x64\x12\x79\x30\x36\x50\x73\x1b\xe7\x25\x09\x37\x1d\x0c\x0c\xb5\xb4\x4e\x4b\xf6\xdf\x87\xad\xc4\x27\x4e\x12\xc4\x94\x7e\x28\x6c\xca\x56\xc8\x5c\xe8\x83\x20\xb4\xf7\xca\xa0\x7a\xed\xe8\x6a\x28\x56\x8d\x13\xa8\x55\x68\x1a\x41\xbd\x9f\x49\xab\xaf\x99\xc1\x9c\xab\x8e\xa0\xff\x42\xd0\x0a\xd3\x1f\x8d\xc8\x72\x98\xaa\x55\x90\x83\xd6\x78\x87\x35\x48\xc9\xcb\x5a\x95\x19\xa2\x69\xa2\x7c\xdb\x77\xef\xe0\xc6\x39\xf6\x8c\xd7\xc5\x09\xbf\x28\x89\x21\x0d\x85\xd6\xd6\xc6\x0b\xa5\x91\xa7\x2c\x9f\x2e\x40\x29\x9c\x28\xa7\xdf\x67\xb0\x02\x60\x92\x76\x51\x2e\xb1\x1b\x60\x24\xc4\x97\xba\xf2\xe2\x2c\x73\x8b\x7f\xb5\x4e\x4e\xdc\x1d\xda\x77\xa2\x1e\x9b\x5d\xfa\x31\xc9\xa8\x89\x57\x02\xdb\x3f\xf7\xec\x63\xbd\xb0\x36\x35\x52\x92\xd3\xa5\x9c\xaf\x00\x03\x6f\xdc\x72\x79\x25\x9e\x54\x7e\xde\x81\x3f\x79\x76\x0e\xdc\xa7\x43\xfb\xdf\xe4\x0a\xd8\xd7\x85\xd2\x7a\xd0\x53\x48\x70\xc5\x52\x60\x86\x25\x40\xcb\x70\x0e\x79\x5f\x67\x8a\xd3\xd4\x25\xc7\x6a\x17\x11\x83\xd7\xd5\x7d\xb3\x55\x27\x54\x46\xe5\xa5\x08\x37\x48\x61\x33\x1e\xdb\x84\x5d\x1e\x0c\xef\x31\xe0\x3a\xa8\x24\x44\xb1\x65\x8f\x46\xe4\xd0\xd5\x32\xda\x2e\xbb\xfb\xea\x34\xa9\xda\x92\x7c\x7c\x8f\xec\xa0\x57\x60\xec\x84\xfb\x96\xa8\xfe\x28\xa6\xb7\xf6\xda\x33\x0f\x7d\x71\x75\xd9\x6e\x23\x4d\xac\x06\x3c\x06\xb4\x5f\xa6\xe8\x9b\x23\x3c\x36\xab\x0e\x35\xc2\x05\x88\xb8\xe5\x4f\xea\x8e\x39\x0d\x2f\x30\x38\x29\x4a\x7d\xa0\x57\xd8\xcb\x36\xd9\xb1\x76\x30\xcb\xf6\xf3\x4a\x19\x61\xf4\x52\x89\xab\xbc\xcc\xec\x20\x70\xfb\xe0\x06\xbc\x3e\x76\xe3\xa0\x31\x00\xa2\x56\x2c\xdb\x29\x24\x76\x92\xc8\xb4\xc8\x3d\xb7\x00\x7f\x38\x6c\x75\x70\x80\xe8\x0a\x1c\x44\xb5\x72\xcb\xd4\xc9\xcd\x40\x51\x44\x30\x5a\x7c\x3b\x94\x04\x63\x51\x4e\xce\x14\xf0\xd9\x00\x7b\x77\x3d\xf2\x00\x1b\xf0\x45\xb2\x5c\x33\xef\x1c\x33\x80\xa0\x63\x1e\xb6\x57\x78\xaf\xef\x47\x83\x64\x96\xe5\x66\x2a\x2b\xcb\xd8\xc0\x30\x08\x47\x80\x2e\x03\x19\x12\xd7\xb7\x34\xe0\xf6\x69\xa5\x96\x44\xfe\x51\xe4\xd2\x79\x89\xd6\x2c\x81\xd6\x2c\x63\x55\x4d\xf8\xdb\x2d\x48\xc7\xc7\xa3\xe5\x64\xa2\x44\x9e\xa9\xe5\x4a\xd7\xaa\xc4\xb3\x9a\xb1\xb4\xa1\xdd\x04\x6b\xdd\xf4\x2a\x25\x64\x96\xd9\xd7\x7e\xf1\xf5\x57\xa2\xd4\x19\x75\x9f\x12\x99\x9e\x36\x4b\xe8\xb1\xb0\xb4\x1a\xbe\x69\x2a\x40\xd9\x2c\xaf\x30\xee\x08\x85\x6d\xd4\xc6\xd5\xba\x07\xcd\xef\x6a\xdf\x1c\xb9\x06\x9b\x90\x20\x76\x06\x47\xdd\xd0\x45\x11\xd6\x0b\xb5\x14\x95\x04\x8d\xbd\x5e\xc8\x12\x89\xa5\x41\xb7\xd5\x32\xee\x37\x65\xc7\x9c\xea\xa6\xac\x69\xad\xf3\x0a\xd7\x94\xc5\x0a\x92\xfa\xb0\xaa\xf4\x44\x4e\xb0\xa3\x79\xa1\x66\xf6\xfb\x17\x96\xe6\x20\x6e\xcd\x2e\x1f\xc9\x1f\xbc\x4f\x97\x45\x6e\x28\x59\x17\x18\x85\x9c\xe8\xaa\x66\xab\x92\x85\x08\x1c\xce\xd6\x7e\x5b\xaf\xf2\x7e\xe7\xca\xde\x1b\x3d\xd3\x62\x55\xa9\x03\x24\x0f\xd8\xf4\x7f\xc7\x5d\xce\xdf\xbc\xdf\x1e\x07\x89\x80\xf2\x53\x1a\x8a\xc6\xc1\xc6\x62\x52\x4c\x9a\x72\xba\xb0\xc3\x4e\x74\x5e\xa8\x6a\x55\x48\x17\x9f\x73\x58\x2b\x59\x65\xfa\xa6\xa4\x78\xc5\x12\x77\x53\x6e\xbc\xe0\xe0\x96\xdc\xfc\x0d\xd6\xfc\x1f\x39\x8e\x23\xa5\xa6\x9d\x36\xf6\x8f\x22\x2c\x6d\x6a\x5c\x5f\x8b\xff\x03\xbb\x00\xbf\x13\xd7\x3f\x0a\x71\xfd\x1d\x02\x60\x5a\xc4\xf5\x31\x21\x30\xf8\x7a\x51\xa9\x55\xa5\x8c\x3d\x4c\xa1\xbf\x23\x8f\x99\xcc\x63\x15\x65\xd4\x6a\x23\xe9\x8e\x4f\xf0\x07\x54\xb5\x8f\x8e\xdc\x66\x95\xf1\xca\x03\xe0\x82\x1f\x31\xea\x5a\x55\x3e\x84\xdd\x9b\xcd\xe0\xbc\x9e\xac\xc5\x42\x96\x2d\x35\xb9\xf3\x45\x64\xb1\x7d\x0e\xc1\xb1\x6f\x63\xb1\x04\x23\x66\x83\x88\xdb\x92\x63\x47\x3b\xb5\x70\x8c\x88\x0f\xba\x78\xce\x5c\x15\x43\x38\x27\x31\xe6\x97\x34\x38\xbe\xfa\x34\x09\x67\x35\x68\xa7\x06\x74\xd3\xda\x90\x96\x6a\xf0\x21\xb2\x71\x44\xb9\xb0\x2c\x9c\x91\x52\x07\xe2\x80\x4c\x38\x6d\x85\xd7\xf7\xc8\x7b\x23\x05\x45\xcb\x7a\x89\x45\x62\xbc\x81\x1b\x2e\xa1\xc9\xb6\xf2\xdd\xda\x37\x6d\x22\x4d\x0d\x04\x61\x75\x36\x5a\x6f\x40\xf6\x06\x32\x15\xc4\xca\xb6\xac\x61\xec\xc1\x86\xa4\xd3\xfb\x87\x77\xb8\x4d\x1c\x49\xe1\x8c\xd1\x05\x06\x59\xf0\x17\x6c\x58\xd6\x8e\x15\xed\x58\x4a\xfe\x46\x4f\x2c\x67\xb1\x49\x2b\x7a\x1b\x35\x24\xed\x78\xdd\xc7\xbc\xca\xd9\xae\xa2\x4f\x63\xe6\xfc\x07\xa2\x77\xc1\x4d\x6b\xf6\xc2\x65\xcf\x05\x98\xa4\xa9\xd4\x10\xc8\x19\x51\xcd\x88\x7f\x93\x5b\x1c\xe7\x7f\x70\x7f\x47\x36\x8e\x17\x10\xae\xad\xe2\xfd\xc4\x0d\x0d\x53\x5f\x5b\xb9\x6d\x5e\x4b\x68\x71\xc8\xd9\x8a\xec\x8a\x65\xa0\xe0\xd1\x0e\x49\xd5\x7e\x4a\x5e\xef\xcb\x36\xf6\x66\xe9\x9b\x2d\xa7\xf6\x77\x9e\xef\x12\xc7\xf4\xe2\x68\x14\x00\xe7\x73\xb2\xed\x1a\xa0\x4d\xcb\x0a\xff\xab\x55\x41\x76\x2a\x38\x3f\x25\x14\x58\xd8\x6e\xc4\x1f\xc5\x0e\x22\xbf\x42\x14\x6a\x44\xee\x2f\xa0\x87\xe1\x1d\xb1\xed\x7f\x17\xee\x90\xa0\x67\x28\xf6\x76\x34\xbd\xa5\x0c\x3e\x9f\x17\x7e\xcb\x9b\x2d\xaa\x5b\xbf\x5a\x1d\x06\x3b\x44\x2b\x5c\x72\xf1\xbd\x2e\xf0\x87\x95\xae\x0e\x0e\xd1\x2a\x2f\xeb\xa2\xec\xf7\x80\x61\x54\x32\x07\x0e\xc5\x6a\x59\xa3\xd5\x56\xdd\xf2\x56\xd7\xea\x76\x64\x6a\x9f\x38\x94\x5e\xe5\xb3\x83\x74\xad\xb8\x6f\x75\xf4\x5a\xf7\x0c\x05\x71\xfd\x50\xf6\x06\x83\x2d\x0d\xab\x3b\x9f\x1d\x24\x99\xed\xd1\xf7\x39\x5f\xa8\xfd\xbc\x77\x6e\x71\xbe\x3c\x7f\xf9\xea\xc5\x17\x43\x0c\x85\x6c\x57\x78\xfe\x8e\x84\xa4\xe9\x42\x6b\x7b\xe6\x46\x09\x10\x98\x26\xd3\x94\xa8\xae\x71\x1d\xdd\x14\xf9\x7c\x51\x17\x6b\xb1\xd4\xd0\xc5\xb9\xbc\x56\x65\xae\xca\xba\x7d\xb0\xe2\x89\x6d\xd4\xc6\x78\xa1\x0d\x11\xeb\xfd\xc1\x8e\x4d\xf5\x81\x3b\x29\x3d\x0b\xf7\x09\x3e\x1d\x56\x5c\x77\xe6\xb8\x5d\xbd\x41\x54\x3a\xf7\x87\x52\x94\x34\x00\x09\x39\x6e\x8f\x1a\x77\xd4\x31\x59\x93\x9d\x90\x16\x89\xdb\x8d\x95\xba\x82\x80\x87\xeb\x3c\x6b\x64\xc1\x82\x89\x36\x6f\xfe\x24\x8a\xbf\xd3\x99\x1b\x1d\x01\x0c\x05\x69\xee\x86\xb7\xa2\xb5\x4f\x96\x90\xde\x11\xf9\x80\xf9\xe0\x6f\x16\xba\xaa\xa7\x4d\xed\x58\x49\x32\x7a\xcf\x88\x42\xcf\x93\xa1\x31\x21\x84\x0d\x69\xaf\xb4\x8f\x2d\x77\xd6\xbb\x25\xd8\x2f\x47\x22\xce\xd2\xc0\xd1\x16\xfa\xc6\xeb\x0b\x76\x75\x30\xa8\xcc\x67\x67\x6c\x48\xcb\x20\x4f\x68\x3c\xf7\xe9\xad\x38\xb3\x84\xf1\xfe\xbd\x4b\x7e\x8e\x0f\x76\xf2\x87\x86\x19\xa0\xb5\x44\x95\x60\xcf\x80\x80\x82\x99\xcc\x8b\xa6\x6a\x8d\xec\x2e\x87\xb6\x86\x7b\x8d\x8c\x14\x99\x8c\xb5\x8a\xdc\xa5\x29\x5e\xa1\xd1\x36\x47\xb0\xa9\x65\x55\xab\x0c\x9c\x34\x50\x38\x1f\xad\xfc\x0b\x69\xca\x5e\x8d\x25\x4d\x08\x44\xac\xa1\xd9\x6b\x24\xf4\xd8\x3b\x5f\x48\x88\x3d\xb0\x0f\x6f\x78\x61\x5e\x8a\x65\x5e\x14\xb9\x51\x53\x5d\x66\xc6\x1b\x91\xc2\x2c\x6a\xad\xaf\x78\x18\x07\x9f\x0e\x0e\x16\xe6\xe4\x4b\x38\x75\x4c\x28\x6b\x2a\x54\x3d\x37\xcd\x67\xa9\x21\x45\x6b\x6a\x79\x54\x74\xf4\x46\x08\x88\xe6\x46\xaf\x25\x2c\xe0\x50\xf6\xcd\x42\xbc\x2c\x43\x66\x6b\xa6\x6a\x7b\x80\x83\x32\xe9\x96\x33\x68\xaa\x20\x2b\x14\x0a\xfa\xa1\xfb\x12\x32\x35\x24\xf4\x09\xf0\x45\x84\x44\x98\x88\xe2\xb0\xfc\x11\xc9\x2b\x5d\xdf\xf4\xba\x59\x4e\x50\xb5\x5c\xca\xdb\x7c\xd9\x2c\x03\x89\x89\x78\x27\x85\xe8\xad\x1b\xe7\x45\x10\x25\x3e\x9d\xd3\x5e\xa9\x94\x9c\x2e\x70\x8b\xcc\xc4\x91\x45\x08\x65\x7e\x71\x3b\xa8\x3b\x19\x8c\xa2\x4c\x48\xb2\xa7\x42\xe2\xcb\x50\xa8\x6b\x55\xd2\x8a\xcd\x50\x8b\xb7\x13\x4a\xbe\x6b\x29\x6f\xbf\x0c\x24\x7f\x94\x2c\x53\xd5\x50\x2b\x08\x96\x5d\x25\xd0\x6b\xa4\x64\x55\xac\xc5\x44\x4d\x65\x83\x19\xac\xb2\x14\x4d\xa9\x6e\x57\x38\x15\x4b\x5e\x79\x87\x70\xbe\x92\x65\x3e\x0d\x79\x00\x28\x96\xba\xf8\x85\x95\x2a\x33\x9f\xc2\xe8\x98\x6f\x60\x84\xff\xd9\xa8\x46\xf9\x86\xa3\xec\xc8\x04\xbe\x8f\x8e\x07\xe2\xfe\x21\xad\x0c\x91\xd3\x1f\xa0\x9a\xc4\x23\x99\x82\x05\x1a\xc5\x48\x3b\x12\xb8\x70\x10\x9b\x5b\xf9\x3e\x3b\x23\xcf\x5f\xbd\x7a\xf7\xf6\xc5\x9b\xb7\x6f\x28\xd4\x63\x46\xa7\xe6\x8b\xb2\x59\xf6\x7b\x7f\x90\x45\x01\x16\x13\xf3\x79\x6f\x90\x06\x4d\x70\xc5\x9b\xf3\xd0\x8d\xca\x7f\xfb\xed\x38\xdb\x2e\x87\x2c\xcb\xbd\x08\xc8\x6b\x85\x0c\xec\xfb\x86\x56\x5c\x13\xe6\x0d\x30\xbd\x4e\xaf\xea\x77\x2b\x59\xd7\xaa\x2a\x43\x79\x0a\xba\x40\xc9\x0c\xee\xaf\xf7\xef\x71\x5e\x1e\x75\xae\x13\x07\xbe\xeb\x39\x18\x9d\x81\x1a\x43\x58\x00\xb9\x60\x99\xd2\xc3\x7c\xb3\xd4\x2b\xc0\xbb\x75\x7e\xc4\xc8\xd0\x1f\xc5\x1f\xfc\xb3\x3e\x93\xfc\xc7\x90\x49\xce\x42\x0e\x1c\xd8\xc5\x8f\x14\x0c\x7f\x78\x28\x5e\x6b\x47\x2a\x37\xaa\x57\x59\x91\xc2\x12\xe7\xbd\xbb\x67\x67\xf7\xb8\x0d\xdd\x5e\xb9\x27\x8c\xe6\xa0\x4b\x2b\x3a\x83\xb1\x01\x87\xb2\x4b\x1b\x08\xe5\x0d\x18\x19\x3c\xbb\xe3\x63\x79\xd7\x57\x59\x1b\x67\x5b\xa1\x7e\x2d\x5e\x00\x76\x68\xbc\x7b\x76\x96\xe0\x31\x16\x89\x1d\x1c\x93\x88\xbf\x55\xf3\x17\xb7\x2b\x2e\x12\x43\xbb\x75\x82\x04\x42\x01\xea\xf0\x2a\xed\x60\xc0\xb4\x08\x3b\xb1\xbc\x64\xc5\x9c\x50\x46\x76\x91\x20\x41\x0f\xbe\x7b\x26\x22\x52\xd8\xf0\x38\x97\x98\xc9\x59\xeb\xa8\xd9\xd1\x28\x50\x59\xa0\x8a\x07\x0f\xd2\xfe\xeb\xec\x66\xe2\x7a\x2f\xd0\x67\x53\x82\x68\x07\x52\x31\xee\xf6\x5a\x8b\x39\x62\x1c\x8f\x1d\xe3\x72\x37\xc3\x63\x4e\x17\x87\xb4\x2f\xa0\x10\x7c\xde\xae\x90\x86\xe4\x72\x48\x42\xd7\x37\x9b\xc2\x38\xde\x23\xa2\x3f\xf8\x0d\xf0\x0d\xfd\xb7\x89\xd8\x52\xf0\x37\x01\x42\x5e\xce\xc4\x16\xfe\x32\x64\x1c\x4b\x56\x31\xa3\x72\x8f\x4b\xdf\x8d\x07\x9a\xf9\x78\x8e\x82\xe2\xcf\xad\x9c\x82\x86\x60\x89\x53\xc1\x41\xd1\x3d\x06\x4e\xde\x8d\x01\x2f\x74\x04\x0d\x43\xe2\x7d\xd4\x61\xb3\x8c\xe1\xc0\x05\xa4\xe4\x25\xc5\x9f\x94\xfe\x50\x94\x19\x9e\x07\xd2\x7d\x02\x4c\x09\x4c\x7f\x28\xda\x28\x9f\xce\x1f\x62\x3d\xe1\xe0\x61\xca\xc1\xfe\x1c\xf1\x1b\xcf\x78\x3c\xc7\x6a\x31\xa7\x16\xb7\xd9\x50\x87\x62\x67\x98\x5e\x47\x91\x0a\x3e\xb6\x4b\x73\x61\x9c\x74\x43\x2c\x61\x18\xf3\x22\xbf\xdc\xa1\xbf\xd3\xff\xdc\x57\x45\x95\x2f\xee\xb2\xd7\x47\x41\xa5\x56\x0d\x80\x8c\xb3\xde\x6b\xcd\x57\x56\x65\x34\x63\x08\x4d\xad\xf2\x5a\x55\xb9\x44\xe5\xbb\xf5\x82\x1d\x1b\xef\xdf\xb5\xbe\x52\x19\xa9\x05\xd4\xa2\x4b\x97\x90\x1d\xe6\xb2\xb5\x59\x6a\x72\xce\x04\x37\xb4\x37\x78\xdd\x1f\xd3\x38\x80\xa7\x82\x95\x27\xc4\x4e\xcc\xb5\x68\xca\xa9\x6c\xe6\x8b\x2d\xa6\x99\x98\x2a\x74\xf9\x1d\x3d\xf1\xc2\x8d\xff\xae\x75\x9c\x2d\x95\x31\x72\xae\x86\x50\xef\x61\x08\x25\x22\x2c\xf6\x08\xa9\x74\xd7\x97\x60\xed\xb9\x11\xf7\xb1\x82\xf4\x06\xe2\xec\x4c\x1c\x89\xf7\xef\x69\x55\x5b\xa3\x99\x5a\xd6\x8d\x79\x46\xa2\x4b\x6f\x40\xf5\x5c\x99\xe1\x88\x24\x58\x19\x87\x93\x5b\xee\x46\x17\xac\x7c\xd7\x1f\x90\x55\xaf\xd2\x4b\x21\x43\x69\x5a\x21\xbe\xb7\x27\x93\x1b\xcc\x39\x8b\xe7\x1a\x36\xb5\x95\x9a\x65\x81\x8a\x79\x5e\xa7\xc6\xfd\xd8\x8c\x81\x2f\x08\x27\x9b\xf4\x96\x9b\xbc\xc6\xdc\x49\x2b\x84\x19\x39\xb3\xda\xa1\xf9\xa9\x51\xc5\x94\x62\xb6\x90\x08\xdc\x97\xdf\x09\x56\x21\x51\x57\x78\x2c\x04\x0a\x6e\x4b\xdd\xad\x0e\x68\x6c\x51\xa0\x16\xa2\x5f\x0f\x30\x80\xb6\x9e\x1f\x39\xe1\xf4\x85\x9d\xc6\x57\xf8\xe0\xbb\x41\x6c\x99\x23\xa5\x6e\x29\xd7\x10\xdf\x0e\x29\xb5\xf6\xe3\x50\xbc\x5d\xc8\x32\x2b\xac\xf0\xeb\xfd\x4c\x09\xa6\x9c\x09\x35\xcc\x93\xbe\xc9\xb2\x14\x90\xf6\xcf\x44\x0f\x77\x41\x2f\x14\x0e\x6d\x4f\x15\x89\xc1\x37\x81\x8b\x6f\x7e\xf3\xe2\xf5\x17\x2f\x5f\xff\x19\xf1\xe1\x06\x85\xdc\x6f\x1c\xd3\xef\x74\xcc\x3a\x0e\x78\x09\xd3\xb6\x18\x82\x27\x1f\x88\x5e\x10\xb7\x61\xc3\xb7\xb9\x4e\xc7\x14\xd2\x38\xca\xd6\x4b\xdd\xba\x3c\x10\xbd\x21\xbc\x0d\x4a\xa8\x3c\x10\xbd\x67\xf6\x0f\xd8\x59\x61\xae\xf1\xd8\x31\xb5\x75\x00\xa4\x06\xb4\xc0\x93\x48\xab\x68\x67\xc6\x5b\x56\xe4\x75\x2d\xae\x4f\xc6\x65\x88\xd3\x58\xc2\x7a\xbd\xca\x2d\xb1\xaf\x45\xa5\x0e\xaa\xa6\x34\x22\xaf\x21\x99\x44\x46\xd5\x90\x86\x11\x1b\x2b\x54\xed\xfc\x29\x5f\x7c\xfd\x95\xd5\x56\x27\x79\x91\xff\x15\x8d\x22\x66\xa1\xab\xfa\xa0\x56\xd5\x12\x14\x72\xdd\xd4\x51\xd2\x84\xcb\x86\xca\xd4\xb4\x90\x15\xf3\x27\x31\x33\x4c\x48\xaf\xe0\x72\xc7\x44\xeb\x42\xc9\x12\x73\xc4\xcd\x55\xbe\xa2\xd4\x0f\x08\x03\xa9\x1a\x45\x19\x44\x74\xd1\x1e\xfd\x57\xf9\x6a\x45\x51\x32\xa9\xd3\x0a\x38\x33\xc3\x8d\xc8\x97\x4b\x95\xe5\xb2\x56\x90\x1e\x0d\x28\x22\xdb\x3b\xc8\x08\xce\xb7\x0b\x4c\xc7\x32\x91\x3c\x0e\x17\xdb\x5e\x1c\xa2\x8b\x5b\x27\x45\x22\xda\xbc\x3a\xf9\xcc\x10\x93\x7c\xb7\xf3\x4e\x70\x7f\xe4\x4e\x04\x81\x4d\x0e\x02\x08\xc4\xac\x48\x4b\x95\x73\x55\x61\x55\x1c\x9f\x39\x33\x1a\x8d\x86\xe2\x68\x00\x46\x89\xa5\x5c\x4f\x3c\x07\x5d\xc1\x31\x47\xe6\x13\xbb\xd0\xe0\x3a\xbd\x91\x6b\x96\x99\x59\x57\xf9\x1c\x6c\x9f\xa0\x8c\xd7\x14\xc4\xa3\xdc\x53\xaa\xcc\xdc\x68\xbe\x04\x54\x0d\x59\x3a\x46\x8b\x1b\x05\x7d\x1b\x29\xd7\x9c\xea\x95\xa3\x83\xdd\xa8\xba\x2e\x94\x00\xff\x38\x11\x8c\x6e\x2a\x37\x14\x7e\xe1\xd4\x52\x43\xb3\x82\xf8\xc9\x38\x17\xa8\xc6\x9e\x98\x29\x86\xe3\x72\x91\x43\x20\x1a\x12\xc0\x13\x5e\x96\xda\x77\xfa\xa5\xba\x11\x5f\xc8\x5a\xf5\x07\x03\x71\x90\xd8\xa3\x62\x8e\x34\x8f\x12\x65\xfd\x65\x28\x7e\xc0\x6c\x66\xae\x8a\xae\xe5\x4e\x78\x1e\x0e\x3b\x59\x53\x64\xb2\xe3\x0f\x61\xd0\x91\x7d\x68\xd3\x53\x4b\xf3\x56\xbf\x41\x2b\x18\x31\x19\xf7\x45\x03\xc6\x99\x4c\xb3\x5c\xca\x2a\xff\xab\x22\x0d\x33\x91\x67\x98\x1d\x28\x35\xd7\xb6\x31\x8c\xb8\xdd\xd2\x76\x74\x83\x73\xcc\xc5\xb7\xb1\xa2\x2e\xad\x72\x2d\xbf\xd8\xcd\x85\x21\xba\x96\x11\xfe\xd8\x98\x3a\xf8\x80\x5b\xb5\xd9\x77\x6d\x58\x7c\x53\x57\x51\x97\x6e\x4f\x58\x0b\x5f\x35\xaf\xe7\xe1\x23\x18\xc8\xdc\xeb\x09\x31\xb8\xb7\x42\xe4\x43\x02\x5c\xdf\x6e\xf2\x5f\xb5\x0f\x46\x6f\xaf\x62\xdd\x53\x4b\xe1\x47\xde\x70\x20\x0a\xe6\x6e\xfa\xa3\xf0\xbf\x3e\x13\xea\x76\x10\x65\x80\x93\xb1\xab\x25\xdd\x54\xe9\x29\x4f\x17\xbe\x39\x7f\xf3\xe6\xc5\x17\x83\xae\xc9\x46\x8f\xc0\x4b\xbc\xee\x4d\xb7\xfc\x8e\xfc\x5c\x3c\x3a\x3a\x1a\x74\x09\xfd\x6f\x0a\x7d\xe3\xcc\x4d\xfa\x2a\xc8\x49\xd1\x66\x48\x86\x1b\xc4\x5b\x95\xef\xe0\xce\xaf\x39\xf3\x5f\x83\xe7\x74\x84\x7c\xbf\x57\xc1\x0e\x45\x94\xc1\x30\x46\x07\xbd\xb3\x36\xe1\xee\x8a\x0c\x0d\x9b\x5e\x46\xa8\xe3\x2f\x5b\xb1\x24\x2a\xf6\xaa\xc8\xb3\xd7\x26\x89\xab\xd2\xb2\x55\xda\x25\x4e\x28\xb7\x98\xaa\x3a\x44\x1f\xaa\x62\xd1\x4d\x24\xed\x25\x8b\x73\x06\x3a\xc9\x03\xee\x54\x4d\xf9\x5a\xdd\xd6\x24\x6f\xff\x26\x2c\x23\x6c\x74\x12\xfd\xef\x30\x6b\x77\x46\xa9\x98\x21\x9d\x93\xee\xd0\x99\xcd\xdd\xf9\x8d\x69\x40\x22\x22\x63\xaa\x3d\xa2\xa0\x4e\xdb\xa4\x99\xcf\xd7\x21\xcc\xd3\x39\x77\x5c\x6c\x28\xbd\x01\xd4\x3f\x8c\x2f\xc3\x99\x96\x42\xdd\x5a\x8d\x03\xa5\x90\x52\xc8\xb9\xcc\x4b\xd2\x5e\xca\x38\x3d\x98\xb7\xd9\x40\xbf\x27\x1c\xe1\x50\x7c\x85\xea\xf4\x40\xc0\xb0\x77\x6a\x14\xd2\xd4\x42\x4e\x23\xe9\x1c\x6b\xc1\xc8\x06\xca\xef\xc1\xb9\x8d\x7d\x40\xec\x80\x88\x23\x3a\xb4\x29\xf2\xcd\x1f\xdc\x50\x48\x0b\x0a\x2c\x05\x3b\x2d\x56\x69\xf0\xb1\xb6\x08\x7c\x07\x2a\x03\x5a\x45\xa1\x0a\x68\x75\xce\x00\xd0\xd6\xac\x42\x61\x50\xa3\x48\x25\xf3\x90\xe8\x0d\x12\x84\x1d\x0b\x32\x63\x21\xdf\xbe\x5e\x40\xda\x04\xa5\x63\x3b\x15\xae\x25\xc1\xbe\x2c\x21\x82\x1a\xa3\x93\x2a\x75\xe0\xd6\x32\x68\xde\xe7\xaf\xbe\x3f\xff\xef\x37\x62\xa9\xaf\x95\x81\x5c\x5b\xe7\x49\x75\xb3\x5c\xe5\x45\x4b\xc2\xfc\x5b\x9c\x2d\xad\xb8\xab\x42\xd6\xea\x0d\xee\xed\xb7\x58\x8c\xc8\xfe\x1a\xbb\xa9\x64\x5d\xab\xe5\xaa\x26\xed\x4c\x4d\x75\x95\x45\xde\x64\xf0\x74\xc9\x6a\x73\x22\xd3\xe6\xf3\xeb\x5b\xd5\x75\x82\xb1\xb3\x67\xc8\x66\x18\x57\xd7\x73\x1c\xe4\x95\xac\x83\xc6\xec\x0b\x4d\xfd\x22\x16\xc2\x5e\xe5\x4b\x1e\x51\x4a\x34\xac\x70\xc1\x5e\x05\xca\xa8\x5b\x3f\x74\xfe\xa0\x03\x11\x4a\x5b\x66\xba\x99\x14\xea\x60\x05\x96\x7a\x08\xdf\xc6\xe1\xe8\xf6\x32\x37\x8d\x89\x72\x9c\x2d\xb1\x60\xe1\x27\x6c\x45\x53\x66\xea\xd6\x95\x43\x21\xbe\xea\x2c\x17\x8c\xb5\x42\x23\x1a\x00\xfd\xfc\x4c\x1c\x75\x31\x63\x57\xe5\xdf\x02\x85\x4a\xff\xdb\xcf\x86\xb8\x01\x36\x06\x3f\x88\x12\xc2\x01\x28\x64\xd1\x5e\xf8\xa9\x51\xcd\x86\xa4\xec\xf6\x7a\x73\x06\xdb\x4e\xec\xf2\x4a\x39\x72\xe8\xf7\xef\xc5\xdd\xd4\x8f\x82\xb2\xe6\xa0\xc5\xd3\xdb\x72\x35\x3b\x28\x5b\x1e\xb7\x4f\x3f\xed\x16\x61\x3f\x3f\x6b\x79\xe7\x36\xc9\x30\x5f\xc5\xce\x46\x8a\xd8\x27\xff\xe1\x10\xa3\x5f\x79\x59\xd0\x51\xaf\xe3\x24\xea\x9e\x35\x9d\x48\x87\x87\xe2\x1b\xa5\xae\x9c\xd2\x52\xeb\x15\x0e\x06\xe9\x08\x68\xf0\x71\x35\x8a\xd1\xeb\x5a\x61\x79\x33\xd2\x4c\x90\xc4\x26\xba\xa9\x71\x2c\x64\xa5\x43\xe6\x30\xa1\x4a\xc6\x59\x6e\xea\xa6\x9a\xc0\x4b\xf2\xd2\xef\x20\x12\x78\xed\x57\xe5\x54\x18\xd9\x0e\x43\x7c\x99\x46\xc0\xea\x01\xf8\xc2\xaa\x29\x21\x46\x10\x62\x90\x23\x1f\x4f\xbc\x86\x17\x47\x97\xde\xef\x44\xf2\x46\x87\xab\xf7\x8f\x5d\x26\x0a\x84\x7f\xc6\xa4\x7f\x2f\xd7\xa2\xf9\x15\xee\x5b\xba\xe9\xc7\xe9\x21\x14\x3a\xc0\x62\x14\x07\xb1\xcf\x06\x6e\x24\xb5\x92\xda\x8a\x53\xfb\x56\x3f\x19\x36\x84\x04\xfa\x07\xdc\x47\xba\x1a\x3f\x0c\xba\x9f\x4a\xe3\xa9\xe0\xfd\xa1\x5b\xa0\xa6\xc2\x0e\x49\xe5\x4e\xcc\xd8\x21\x4f\x58\xa9\x6b\x64\x46\xde\xd2\x68\x71\x45\xe7\x69\x08\xde\xe9\xa4\x6d\x6f\xaa\x75\x86\x63\x18\x1e\x59\xe9\x2f\x93\xc0\xc5\x76\x7a\x6f\xab\xba\xb1\xbe\x92\xa0\xdb\x3b\xc9\x78\xc5\x85\x56\xa4\x40\x47\x32\x33\xde\xa4\x74\x66\x0c\xd6\x13\xcc\xe1\xd5\xad\x1b\xb9\x32\x48\xed\xb7\xa4\xab\x45\xfa\xd1\x7e\x0f\xc4\x6f\x24\xf6\x66\x16\xf9\xac\xee\xff\x2a\x3d\xca\x55\x66\xb5\xc4\xe1\xa6\xf2\x2b\xf5\xa9\x0e\xfd\xe3\x6f\xb3\xce\xf1\x6e\xaf\x9a\x72\x23\x2a\x0e\x0f\x05\x87\x72\x56\x31\x84\x83\x6f\x0f\xfe\x0c\x14\x72\xa9\xa1\xd6\x12\x85\xae\x28\x0c\x29\x74\xdd\x99\xeb\x1a\x52\x18\xa0\x12\xca\x52\x49\x2c\x9a\x5d\x81\xe3\xb1\xae\xe0\x30\x77\xe7\x5e\x9d\x96\xe9\xee\xde\x4b\x3b\xd7\xa8\x6a\xca\xdf\x5c\xdd\xed\x38\xb7\xbd\x9f\x8f\x87\x52\x79\x3b\x06\x2b\x31\x15\x99\xe0\x9b\xb2\x65\x72\x35\x50\x8c\x5b\x4c\x65\x09\xc9\x6f\xc6\x34\x14\x50\x85\xc6\x4b\xae\xde\x30\xdb\xaf\x8f\x7e\x66\xb2\x7b\x69\x6a\x25\xb3\x21\x58\x9a\xd0\x8a\xc7\x63\xa4\x31\x79\xd1\x05\x31\xdb\x0f\xf7\x61\x43\xdb\x6d\xc8\x7e\x10\x30\x05\x16\x7a\x4e\x49\x28\xe8\x73\x4e\x52\x50\xa8\xfa\xe6\x5a\x2c\xe4\x6a\x65\x45\x37\x92\xc8\x21\x3e\x53\xcf\x7d\x76\x2c\xe9\x7d\x9b\x23\x09\x47\x42\xfc\x69\xed\xd3\x80\x28\xea\x89\xb2\xac\x5d\x69\x84\x21\x89\xe6\x14\x2c\x73\x9d\xab\x1b\xe5\x2b\xc7\x77\x14\x9e\xd6\x33\x8c\xd6\x9a\x54\xfa\xc6\xa8\xca\xf0\x84\x23\xba\x46\xe9\x9e\xb9\x81\xf0\xab\x6a\xc9\x27\x0b\x6a\x98\x0b\x72\xc1\xfa\xcc\xdf\x2b\xcc\x3f\x47\x8f\x30\x66\x0e\x92\x14\xa0\x51\x79\x41\xf3\xa5\x97\x12\x68\xa9\xed\x41\xba\xc2\xca\x62\x3e\x11\x75\x16\x27\x19\x0e\x05\x26\x76\x16\x4a\x62\xc2\xa3\x9f\x22\xaa\x4b\x33\x30\xe4\x96\x2e\xc8\x13\x23\x2b\x7c\x06\x91\x8f\xff\xcb\xcb\x0d\x45\xa2\x85\xae\xda\x27\x1e\x2f\x27\x7b\x07\x2a\xe3\x51\xca\x17\xac\x3d\xc6\x48\x25\x61\x76\x28\x9a\x7d\x84\xc0\xba\xa1\x09\xa8\xb7\x9f\xf6\xbe\x25\xc1\xc7\x9b\x75\x5a\xf2\xaa\x77\xf7\xf4\xcd\xa0\xb7\xc1\xa2\x49\x8c\xb3\xed\x2e\x65\x06\xe2\xcf\x3a\xc3\x0e\xbd\x15\xf8\xb3\x3d\xec\x18\x5f\xea\x6a\x29\xeb\x38\x1a\x51\x1a\xcb\xc5\xa6\x14\x26\x40\x57\xf7\xc5\x10\xb7\x61\x71\x54\x2d\x0d\xf7\xf8\x4f\x8d\x38\x13\xfd\xa5\x11\x87\x62\x7c\x74\x74\x34\x18\xd5\xfa\xcb\xfc\x56\x65\xfd\x63\x98\xb5\xf7\x6d\x4f\x8d\xc5\x95\xe9\xc5\x75\x76\x68\x0f\xbb\x5e\x88\xce\x48\x04\x46\xe2\xf5\xde\x01\x0a\xce\xa6\xbc\x45\xf1\x48\x14\x82\x9d\x4d\x73\x12\xf8\xae\x96\x39\xec\x2c\x40\xc3\xdc\xb3\x40\x28\xee\xf1\x8b\xfc\xb2\xc3\xb5\xc7\x3a\xb1\xf9\x09\xb6\x55\xa1\xee\x30\x83\xb7\xc1\xd1\xef\xb8\xe4\xb3\xad\x04\xda\x71\xfc\x78\x92\xc5\x6c\x63\xa8\x1c\xe6\x15\x99\xf8\x90\x41\x63\x00\xf1\x56\x67\x8d\x98\xc5\xa1\x76\x1d\x39\x6d\x2e\x3e\x5e\x65\xed\x10\x85\x21\xf0\x1e\x3c\xd7\x79\xc3\x15\x48\xcd\xd6\x25\x6c\x77\x4d\x75\x33\x58\x32\xe6\x79\x88\xbb\xf2\xce\x1d\x4c\x63\x0a\xb9\x58\x39\xf0\x01\xab\xaa\x91\x46\xe5\xdc\x64\x60\x3c\xa3\xce\x1e\xe2\x7e\xc8\x9b\xcc\x32\xe7\x3d\x37\x51\xc0\x20\xf0\xf4\x60\x0c\xa1\xc9\x87\xba\x6a\x94\xb7\x4d\x95\x29\xa8\x3a\x38\xd6\x17\xa4\xd2\x93\xbe\x06\xa8\x17\x0e\x0e\x56\x95\xd6\x33\x71\x53\xd9\x03\x89\x42\xe6\x9d\x05\x0e\xcc\x52\xac\x30\xed\x56\x3b\x11\xed\x00\xcc\x0e\xb0\x62\x80\x3d\x36\x5c\xfc\x7c\xc8\x42\x8b\xd3\x03\x22\xf7\x61\x68\xe4\xb0\x35\x0d\x90\xb2\x00\x61\x7c\xb4\x20\x47\x19\x63\xce\xac\x86\x61\x10\xce\x18\x55\x84\x78\x2f\xff\x26\x17\x10\xb6\xf5\x93\xf0\x7b\x42\x64\x2f\xaa\x3b\xdb\x07\x6c\xb3\x07\xaf\x26\xa4\x35\xf0\x63\xbd\xa0\x9d\x4b\xb0\x0b\x81\x09\xe6\xd2\xa4\x02\xcc\x5d\xa0\xdf\xda\xc1\xd9\x3b\xd0\xb7\xfd\x33\x5b\xc9\x78\x2e\x6e\x73\x43\x76\xc1\x47\x0e\xc9\x22\x36\x37\x44\xb9\xdf\x28\x1f\x29\x0f\xbe\xf5\xa2\xf0\xc5\x48\x9d\x15\x8f\x85\x98\xdf\x28\xd8\xd3\x2c\xb2\xfc\x6f\x11\x5b\xff\x77\x8b\xab\x77\x87\x13\x99\x4e\xa3\x84\xd5\x4e\x72\x70\xae\x14\xfc\x8b\x82\x4b\x9c\xbd\xf1\xbc\x8c\xa3\x76\x92\xaf\x02\x6b\x3a\x14\x9f\x24\xdd\xa2\xd6\x62\xae\x4a\x55\x49\x88\x50\xc0\x21\x3b\xe3\x6e\xfc\xfc\x19\xfb\xfe\x46\x53\x7d\x10\xea\x11\xe8\x32\x13\x69\x8a\xdb\x76\x10\x3b\x5f\xe9\x0b\xc4\x99\xe8\x51\x40\x79\xef\xb3\xdd\x4f\xe1\x99\x28\xec\x53\xf8\xeb\x3e\x0f\xa1\xd3\x09\x1e\xa2\xb0\x2d\x9e\x17\xe9\xb4\x2c\x28\x83\x56\x76\x3b\x70\x45\x1f\xb4\x0e\x5d\x81\xe4\x39\x00\x2e\xae\x4a\xa8\xf8\x51\x6a\x8c\x3a\xd5\x33\x57\xa7\x04\xcd\x9d\x66\x73\x7c\x78\x47\xe0\xd9\x46\x4f\x2c\xc8\x67\x8e\xfb\xe0\x2f\xdd\x21\xe1\x1d\x83\xf2\x36\x0c\x9a\xa2\x99\x37\x95\xc7\xea\xed\x31\x1e\x13\x09\xba\x4d\xe4\x24\x15\xf4\x86\x91\x47\x8e\x3f\x80\xd7\x79\xef\x9a\x37\x76\xdb\x32\xaf\xc1\x56\xfe\xb8\x0f\x61\x75\xca\xe0\xad\xfa\xb2\x7b\x8a\xc6\xf0\x81\x15\x75\x73\x49\x4c\xc4\xc1\xb9\xc9\xb7\xa4\xf8\xf4\x53\x67\x87\xc6\x48\x8e\x77\xb1\x81\x3d\xca\xa5\xcc\xf2\x8c\x4a\xac\x62\xb9\x6e\x4a\x8f\x90\x65\xc6\x6e\x41\x6d\x38\x0a\x6d\xce\x97\xca\x9b\x86\xd1\x06\xd2\x0e\xc3\xda\x95\xb9\x18\xe2\xe3\x12\x96\xe1\xf8\x0f\x72\x02\x93\x70\x09\x16\x76\x45\xc5\x73\xb0\x0d\x94\x9c\xd6\x14\xce\xcc\xc3\x40\xad\x38\x02\x1e\x89\x0d\xda\x2a\xf4\xdd\x58\xe6\x65\x83\x55\x29\x78\x54\x20\x16\x5d\xe7\xda\x6b\x60\x62\x50\x94\xf6\x7e\xa9\xeb\xfb\x42\x36\xb5\x5e\xca\x9a\x22\xbf\x40\x80\xa2\x4c\xa4\xf8\xbb\x72\x5f\x38\x8f\x25\x96\xed\x49\x4b\x88\x09\xce\x11\xa3\x7c\xf9\xba\x62\xbb\x74\x13\xff\x34\x75\x5c\x06\xd4\x57\x09\x98\xb6\xdb\x00\xd9\xf5\x35\xae\x56\xee\x1e\xf3\xd3\x25\x85\x0b\x75\xb8\x47\x22\x1a\xe4\xe7\x50\x4a\xc0\x77\x63\x02\x6e\x05\x70\x76\xd0\x6d\xa8\xe9\xdb\x0b\x7b\x65\x0f\x52\x64\x68\x88\xeb\x15\x4b\xb6\xc6\x58\xb1\xd8\xd3\x7b\x5a\xad\xd8\x3e\xfc\xa7\xa8\xcb\x10\x3c\x45\x96\x22\xb0\xc4\x61\xd7\x6b\xa8\x5a\x2c\x99\x7c\xcd\xa4\x0a\xbe\xab\x80\x6f\xd3\x8b\x32\x2d\x8c\x1e\x85\x4a\x73\xf4\x86\x2d\xb5\x90\x71\x26\x2e\x6a\xcf\xee\x1d\xa8\xc7\x92\x07\xcf\x30\xb4\x9d\xb4\x8f\x61\x3d\x0e\xe9\xc3\xfb\x48\x9f\xc3\x26\xd4\xe8\x26\xf4\x03\x1b\x5f\x09\xab\xd4\xb5\x37\xfb\x78\xc5\x00\x54\x89\x49\x43\x01\x6c\x60\x5a\x73\xb5\xdc\x5d\xf0\x5c\xd0\xab\x78\x82\x3c\x6c\xa9\x38\x82\x16\x02\x91\x59\x29\xe6\x24\x8b\xc2\xd7\x9e\x41\x9d\x4a\x8a\x99\xba\x11\x85\x5c\xab\x0a\x0c\x56\x3a\x0e\xb3\x74\xdd\x54\xe6\xda\xd5\x0f\xe4\x9a\x19\xbe\x0b\x38\x0d\x24\x68\xac\x54\x85\x43\x79\x6d\x42\x96\x42\x99\x3a\x5f\x92\xcd\x68\xa1\x6f\x44\xa1\xcb\x39\xaa\x5f\xbe\x08\x38\x86\xed\x59\xd5\xae\x83\x38\x9c\x3a\x00\xe9\x0d\x4b\xc3\x53\xfe\xb8\xe0\xe7\x8b\x6e\xee\x7b\xae\x30\x0c\x75\x18\x2e\x82\xce\xed\xd8\x3e\xec\x23\x48\x62\x8c\x62\xfa\xfc\x7d\x16\x90\x16\x76\x69\x47\x04\x20\xdd\x8c\x22\xff\x96\x26\x6d\x92\xba\x72\xf5\x73\x98\xa7\x59\x3b\x02\xde\x58\x41\xbb\xe5\xc3\xe7\x06\x4f\x5f\xe3\xbd\x33\x7a\x15\xcb\xc6\xfa\xc6\x79\x74\xcf\x07\x9c\x94\x73\xcb\xd9\x20\x4a\xc5\x8a\xd0\xa1\x74\x69\xad\xa9\xe2\x6c\x4d\xfa\x91\x97\x81\xbc\x52\xbb\xe7\x8a\x44\x0c\x27\x66\xcc\xf6\x5b\x86\x61\x9a\xc9\x12\x75\x9f\xdc\xd1\x39\xbd\x7f\xe0\xa4\x10\xa9\x84\xee\x84\x9c\xd8\x67\xf3\x6d\x53\xb6\x02\xf0\x82\x9d\xae\x1d\xee\x94\x3e\x13\x82\x1e\x9c\x47\x2a\x44\x2c\x79\xab\x8f\xac\xe6\x50\x93\xce\xfb\xa8\xff\x20\x8e\xc5\xfb\xf7\x0c\x13\xf4\x02\xbb\x00\x9b\x7d\x5e\x91\xd8\xd7\x15\x11\x49\x15\xef\xad\x92\x71\xa3\xb1\x32\x2c\xa6\x3b\xa9\x9f\x1a\x59\xec\xb9\x7e\xf0\xd8\x8b\xff\x8c\x96\x4e\x4e\xeb\x46\x16\x43\xaf\xaa\xb0\x88\x61\xbc\x05\xfe\x5a\x7f\x97\xfb\xc8\x3d\x84\x95\xc0\x3c\x84\x3f\xf2\xf0\xa6\xc3\xcb\xdd\x33\xff\x8a\xae\x28\x81\x90\xf8\xda\xd9\xf2\x96\x0f\xf5\x99\x78\xf0\x20\x1f\x78\xaf\x32\xde\xbb\xc8\x2f\xf9\x2b\x2e\xf2\xcb\xb8\xc0\x06\x7b\x41\x94\x5b\xc1\x70\x7c\x0e\xb6\x1f\x3a\x1e\x4b\x7a\x27\x09\x88\xd8\x48\x00\xd2\xc4\x00\xe1\xce\xcc\xe4\x15\x3c\x00\x8b\x84\xb6\xc6\x50\xe3\x4e\x26\x8b\xf5\xce\xce\xce\x7a\x42\xaf\xac\x88\x07\x85\x15\x42\x78\x3c\x16\xff\x82\x02\xeb\x53\xad\xaa\x29\x0b\x31\xa3\x28\xaa\x8d\xbd\x2f\xec\xec\x96\xb2\xba\x72\xc7\x9d\x8b\x79\xc0\x42\x8f\x9c\xb2\x20\x99\x97\xc5\x74\x1a\x52\xc2\x52\x76\x75\xff\x83\xfb\x7c\xa8\xcf\x80\xbf\xfe\x7f\xe4\xbd\x69\x7f\xdb\x38\x92\x38\xfc\x3e\x9f\x02\xc9\x7f\xb7\x29\x25\x92\x2c\xca\xb6\x7c\x64\xdc\xbd\x92\x2c\x75\x3c\x39\x37\x76\x92\xdd\x71\xa7\xb3\x10\x05\x59\x6c\x53\xa4\x86\xa4\x2c\xab\x27\x99\xcf\xfe\xfc\x50\x55\xb8\x48\xca\x47\x92\x9e\x99\xdd\x27\x2f\x62\x1b\x04\x0a\x40\xa1\x50\x28\x14\xea\x98\x0b\x2e\x2f\x60\xd6\x5c\xed\xfa\x1a\x13\x26\xda\xa9\x5e\xef\x2a\x4e\x28\x37\x08\x04\xfd\xe9\xc5\xf2\x77\xe4\x69\x50\xa0\xd4\x7a\xe1\x44\xc4\x79\x38\x5d\x3b\x46\x4c\x06\x09\xd6\x3b\x1f\x84\x71\x80\x53\x93\xdc\xc1\x95\x34\xa0\x84\xe6\x69\x18\x89\xc3\x28\x8c\xb5\x82\x4b\x79\xf0\x40\xfa\xb1\xbb\xee\x1e\xca\x72\x51\x32\x81\x2a\x6e\xa1\x86\x9e\x1c\x29\xa8\xb6\xd8\xbb\x3c\x8c\xc2\x7c\xed\xbc\xa0\x2d\x52\x91\xe7\x6b\x15\xfa\x94\x22\x51\xd8\xa9\x81\xe6\x3c\xaf\x01\x26\xed\x40\x33\x72\x28\xc9\x94\x30\x7c\x74\xc4\x3c\xf4\x25\xf4\x0a\xe4\x0e\xdf\x89\x23\xc2\x5d\x2c\x4f\xd9\x11\x79\xd8\x12\xd0\xa7\xfa\x23\x4f\xd7\x28\x37\x83\x1d\x52\x8e\x21\x5f\x5a\x73\xbe\xd0\xf9\xe9\x59\x4d\x0e\x42\x01\x2f\x64\xb8\x17\x75\xcc\x1f\xa1\x36\xa4\xce\x4f\xcd\x7e\x64\xbe\x51\xb7\x9b\x74\x17\x74\x7b\x99\xf1\x4c\xb2\x44\x48\x39\xdc\x40\x25\x93\x5c\xb8\x64\x3a\x65\x72\x7d\xf3\x8c\x25\xab\x18\x9c\x62\xd4\x7b\x97\x81\x04\xe6\x33\x26\x2b\xb1\x3c\x99\xc0\xef\xf2\x82\x87\xb1\xbc\xd5\x92\xbd\x26\xf5\x04\x37\x5b\xd5\x55\xcb\xc5\x94\x9c\x2c\x64\x2d\x5b\x5b\xf1\x6e\x48\xbf\xef\x06\xbb\x51\x97\xc6\xaa\x9a\xce\x99\x80\xfb\xe5\xe8\xc8\xf0\xa3\x92\x8c\xbf\xb5\xc5\x8e\xb5\x6b\x59\x90\xcc\xe7\x89\xc9\x00\xbb\x5e\x88\x8c\x82\x89\xda\xf7\x38\x1e\x7b\xa0\xa3\xc2\xb0\x3e\x0b\xe5\x16\x5a\x08\xeb\x63\x08\x45\x9e\x69\x8a\xe3\x97\xd9\x7c\x45\xfc\x21\x49\x0a\x31\x06\xd1\xd2\xbb\xf3\x27\x0a\x9c\xa5\x0b\x20\x70\x16\x3b\x84\x1c\x79\x76\x74\x90\x9a\xa7\xf6\x87\xac\x1e\xdb\x16\x7c\x58\xe9\x42\xe4\x60\xa4\x9b\xbe\x48\x02\x38\xe9\x3f\xd5\xfc\x7a\xb5\x95\x1f\xd1\x3e\x8e\x19\xea\x80\x53\x37\xf8\x4b\xe1\x27\x33\x8d\xcd\x2c\xdc\xb0\x6e\xc9\xea\xff\x00\xde\x8c\xf1\x3a\xac\xbb\xb9\x12\xc9\xb0\xe3\xff\x91\xdd\xfe\x0f\x86\x4d\x03\xcb\x2f\x30\x9c\x7d\x94\xa7\xcb\x30\x9b\x3d\x72\x4f\x8c\x7f\x3c\x8b\xd7\xa2\xe5\xbd\x18\xfd\xff\x76\xee\x5d\x25\xf9\xb8\xcc\xba\xb0\x81\xc1\xdd\xa7\xb8\x79\xbf\xcb\x46\xf9\xf6\x6d\x42\xdc\x9c\xb6\x49\xf1\x7e\xa2\x2c\x6a\x00\x7d\x90\x5c\x02\x38\x29\x5c\x51\x54\xa2\x2a\xb4\x58\x01\x13\x99\xf2\xfe\xe0\x6c\x12\xa6\xf9\x9a\xcd\xd0\x4f\xf6\x24\x47\x4a\xca\x9c\x48\x64\x0d\xb4\xe9\x81\x0b\x38\x66\xa1\x16\xd7\x7c\x2e\xd9\xac\xd2\xce\x62\x1f\x3a\x42\xbc\x5e\x3b\xd7\xc0\xbb\xf2\x2e\x09\x03\x3b\x01\xc3\xd9\x33\x0d\x09\x0a\xf1\x55\x4f\x4e\xb1\xc5\x58\x5b\x85\x5a\xa5\x4f\x70\x50\xd0\x43\x16\xf9\x39\x1a\xe7\xc5\x06\xf3\x21\xcc\x7f\x4e\x11\xf8\x52\x1c\x75\x96\x30\xda\xd4\xda\x5b\x5f\xd1\x7a\x4f\x9d\x22\x34\x74\x64\x41\xec\x91\x83\x57\x3c\x85\x1f\xdd\x91\x18\xcb\x8b\x6c\x13\xa6\x99\x76\xd9\x3b\x48\x5d\x23\x86\x98\x39\x77\x83\xf9\x95\x24\x50\x44\xc6\x91\x36\x4c\xb2\xcf\xf6\x73\x0b\xb3\x4f\x58\xe7\x63\x51\x14\x40\x8a\x00\x17\xf8\xda\x56\xed\xfc\xd7\xad\x8f\x4f\x0e\x7f\x99\x3c\xa9\xcb\xff\x7e\xa9\xff\xf4\x6f\x5b\xae\xb1\xac\x6c\xf4\x93\xfc\xff\xdc\xff\x28\x29\xfe\xa7\x9f\x7e\xf2\x4a\x6a\xd0\x0f\x29\x44\xc0\x32\xea\xcf\xc4\x7e\x8d\x46\xf1\xe7\x2e\xb8\x23\xc5\x98\xa3\x12\x40\x90\x85\xd0\x2e\xf2\x2e\xa7\xad\x40\x54\x15\x67\x93\xbc\xe4\xe9\xa5\x6b\x25\x43\x14\x2c\xa5\x90\x65\x6e\x3d\x98\x57\xab\x75\x24\x55\xa1\x66\x04\xd6\xa5\xc0\x88\xdd\x4d\x82\x51\x52\x6c\x33\x09\x65\xfa\x93\xe5\xc9\x62\x93\xbe\x40\x72\x13\x85\x30\x7d\xf3\xb7\x30\x08\x09\x1e\x13\x4b\x80\xbc\x0b\x06\x41\x8f\x56\xc8\x50\xec\xa0\xb0\xea\x62\x5b\x2f\xab\xd4\xed\x76\x96\xd7\xf2\x66\xad\x24\xf9\x4e\x96\x57\x40\xc5\x25\xfa\x27\xaf\xc0\x5d\xa8\x0f\xe3\xa7\x56\xa9\x7e\x2b\x26\x8e\x0f\x61\xf6\xc4\xb7\xb6\xd8\xe9\xeb\x77\x6f\x07\x43\x36\x3a\x79\x31\x3c\x64\x51\x38\x9e\x24\xf9\xd6\x6f\xd9\x56\x14\x8e\x3f\x2d\xf3\xe9\x7e\xeb\xb7\xec\x01\x78\x34\x2c\xd6\x69\x28\x79\x64\x2d\xa8\xb3\x4e\xdb\xef\x00\x0f\x1c\xcc\xd2\x64\x1e\x2e\xe7\xec\xf5\x29\xeb\x2d\xf3\x59\x92\x66\x2d\xd6\x8b\x22\x06\x75\xe1\xe5\x46\xa4\x57\xf2\xce\x25\x6f\x1d\x99\x31\xb2\xc8\x92\x65\x1a\x50\xba\xe7\x30\x63\x17\xc9\x95\x48\x63\x15\x7f\xb4\x7f\x7a\xdc\xcc\xf2\x75\x24\x58\x14\x06\x22\x56\xce\x42\x64\x6a\xb1\xb5\x85\xe9\x6f\xd4\xa1\xfd\xe2\x64\x30\x7c\x75\x3a\x84\x83\xa5\xf5\xe0\x81\xb7\xcc\x50\xa4\x0f\x72\x78\xe7\xdb\x62\x67\xaf\x8f\x5f\xd7\x26\xfc\x2a\x9c\x8c\x45\x5c\x3f\x64\x1f\x94\x65\x20\x31\x52\x11\x07\xc9\x84\x5c\x29\x80\x19\xab\xa8\xdc\x62\xd2\x78\x00\x79\x30\x29\x68\x36\x2e\x2f\x85\xd7\x8d\xd1\xab\x2a\x8c\x9b\xca\x72\xcd\x8d\xe6\x2d\xa7\x2c\x5b\xcf\xf2\x7c\x91\x1d\x6e\x6d\xad\xc2\xcb\xb0\xb5\x9a\xf1\x7c\x75\xd1\x4a\xd2\x0b\xf8\x7b\x0b\xcf\xcc\x21\x0d\xc0\xae\xae\x06\xd5\xca\x16\x22\xb0\xdb\x19\xe9\x12\x0d\x46\xa6\xcb\x88\xbd\x3b\x1b\x35\xf7\xd9\x44\x48\x74\x5a\x12\xc8\xbb\xb3\xd1\xfe\x31\x16\x96\x89\x84\x3c\xad\x4d\xec\x97\xf1\x3a\x17\x19\x7a\x59\x13\x66\xf5\x23\xb5\xf8\xeb\x52\x50\xd8\x43\x20\x24\xa8\xfa\x42\xd6\xa4\xf8\x4f\x04\x2c\x04\x7b\x94\x8b\x54\x40\x1c\xe0\x89\xc0\xec\xde\x6c\x2c\x24\x76\x71\x78\x13\x48\xac\x60\x00\xfc\xc8\xda\x56\x56\xed\x89\x78\x03\x2d\x5c\xb0\x51\xb2\x12\x29\x1b\xc3\xa2\x27\xb1\xa5\xe3\x36\x7d\xdc\x00\x15\x5a\xf7\xa1\x31\x80\x75\x72\x70\x05\x90\xcf\x81\xa3\x30\x4c\x68\xe4\x39\x6f\xb0\x9c\x5f\x82\x7b\x42\x2c\xd9\x5a\x80\x9e\x0d\x68\xca\x08\x5e\x6f\x8b\x54\x5c\x85\xc9\x12\xc4\x0a\xc8\x92\x9c\xe5\xa9\xe0\x73\x38\xdc\x75\xda\x1c\xa4\x2c\x91\x16\xd9\xe9\xa9\x56\xbf\xa6\xd8\x18\x22\x7b\xc8\xaa\x0d\x13\xf5\x5b\xc9\xd6\xe6\x4e\xa0\xa4\x88\x53\xeb\x16\x89\x7a\x71\x89\x86\x65\x1c\x96\x62\x86\x4b\x84\xb0\xb1\xc8\x57\x42\xc4\xac\x7d\xdd\x6e\x5b\x19\x1a\xdb\xd7\xa3\x91\x2b\x61\xa8\x61\x41\x84\x7a\x39\x2c\x5a\x31\x42\x82\x7d\x3b\x91\x98\xf2\xbb\x26\xe6\x55\x99\xe0\x2c\x26\x85\x60\x2a\x5f\xce\xe4\x19\x9f\x8a\x5c\x27\x39\xaf\xd2\xb6\x65\x79\x5a\x65\x30\x07\x59\x41\x49\x4f\x10\xcc\x78\x3a\x48\x26\xa2\x97\xd7\x42\xeb\xea\x5f\xa4\x55\xcb\xdb\x09\x2b\x04\xec\x4f\x47\xac\x7d\xbd\x37\x72\xc3\xcf\x42\x30\x20\x05\xd7\x82\xe9\xb8\xb8\xb6\xaf\x07\x6d\xd9\x3c\x60\x3f\xfc\xc0\x08\xd0\xb1\x03\xa8\x44\xd3\x01\x6b\x32\xd9\xec\xa9\x5b\xc5\xde\x4d\xfe\xd3\xa2\x57\x89\x4d\xbc\xd7\xfb\xed\xca\x91\x0c\x4b\x23\x19\xde\x65\x24\xc3\x9b\x46\xd2\xb9\x6d\x24\xd5\x43\x19\x95\x86\x32\xda\xbb\xc3\x50\x46\x37\x0d\x65\xfb\xe6\xa1\xf8\xed\xf6\xa6\xc1\xec\x97\x06\xd3\xbf\xcb\x60\xf6\x6f\x18\xcc\xce\xcd\x83\xe9\xb4\x37\x8f\x66\x50\x1a\xcd\xf1\x5d\x46\x33\xb8\x61\x34\xbb\x37\x8f\x66\xa7\x5d\x35\x9c\x12\xad\x7b\xbf\x2c\xa7\xd3\xe9\xc4\x2b\xc4\x7c\x73\x6b\xe3\x24\xf6\x4b\xeb\xdb\x2f\x93\x9a\x1e\x61\xb3\xf9\x74\xf3\xf4\x6a\x85\x92\x3f\xfd\x89\x75\xe5\xdd\xb2\x86\xf3\xde\x6f\xd7\x4d\xe3\x5b\xb7\x33\x43\x45\xdc\xcf\x49\x0e\x9e\x01\x51\x64\x4e\x2d\x7a\xae\x50\x7e\x96\x18\xf9\x04\x8f\x13\xf0\xf6\x70\x21\x4c\xc3\x28\x97\x07\xe2\x32\x67\xd9\x32\x4d\x93\x0b\x7c\x97\x0d\x53\xad\xa9\x63\x8a\xfb\x58\x73\x71\xa7\xf2\xd4\xaa\x09\x7c\xc6\xcc\xb1\xb8\x4c\x05\x4b\xda\xcf\x9f\x25\x92\x8f\xf7\xdb\x88\x66\xdd\x4e\xa2\xdb\x00\x41\x5e\x33\x1a\xd5\xcb\xad\x4d\xad\x1f\x61\x6b\x8c\x64\x35\x07\x4b\x1b\x57\xbd\x92\x42\x08\x2b\x20\xa2\x08\x79\x22\x11\xeb\x57\x39\x4a\x97\xf9\x62\x99\xb7\x9c\xea\xc5\x19\xd3\x0e\x2d\x8e\x42\x8f\x03\xcf\x9d\x96\x3c\x57\x07\xc4\xc8\x4d\xfb\xfa\x53\xa7\x51\xe5\xf8\x30\x55\xb5\xb3\x58\xad\x42\x05\x33\x9e\x66\x89\x65\xdc\x61\x38\x25\x7b\x67\x5a\xa3\x27\xac\x66\x4d\xf5\xc7\x1f\x7f\x64\x7e\xbb\xce\x7e\x60\xed\xeb\xed\xd1\xa8\x5e\x8e\x0d\xd7\xbe\x3e\x1e\x60\x33\x6b\x69\xa9\x76\x71\xa6\x0f\xaa\x7e\xff\xb2\x69\x27\x4b\x51\x29\x49\xe0\x71\x1e\x05\xb9\x30\x66\xf3\x65\x94\x87\x4d\x10\x02\xcc\x66\x78\x2b\x56\x61\x3c\x21\x79\x05\x43\xd8\xd8\x40\xd0\xbf\x23\x4a\xc8\x15\x02\x1c\x78\x25\x84\xd6\x6d\x3c\x63\x93\x68\x48\x34\x61\x38\xc1\x17\x4b\x45\xad\xef\xec\xa9\xc8\x2b\x25\x33\x23\x92\xb5\xac\xd0\x6a\x3a\x70\x7a\x20\x9c\x27\x0a\x32\xa6\x81\x0b\x98\xd0\xa2\x59\x68\xbc\xf0\x21\x6c\xc4\xff\x6f\xc4\x31\x6c\x20\x85\x32\x5b\xf8\x92\xb7\x3a\xc7\xf6\xaf\xa6\x1e\x82\x2d\xf1\xad\x56\xaf\x53\x73\xac\xef\x26\x93\x88\x95\xd8\xec\x74\x8c\x03\x83\x15\xd3\x37\xe2\xc2\xd5\xeb\x18\x22\x26\x81\xc3\x18\x37\xd7\x97\x2b\x91\x66\x76\xfe\x23\x75\xdb\x33\x31\x1a\x64\x6d\x67\x7f\x33\x50\x1f\x01\x17\x5a\x61\x86\x8c\xec\x27\xf6\x01\x83\x55\x2e\x16\x22\xce\x24\x17\x82\x10\x16\x97\x62\xbd\x80\x0b\x09\xfa\x22\xa3\x79\x1a\x98\xb2\x90\xe1\x34\x8c\x45\x4a\x7a\x3c\x20\xc6\x0f\xe9\xe3\x24\xf5\xf7\x5f\xbe\xf9\xe9\x06\x62\x39\x33\x77\x48\x30\x08\x95\x58\xd9\xbc\x86\xf6\x6d\x13\xa9\x09\x50\xd5\xd8\x44\x57\xf6\x63\x11\x6e\xe9\x02\x31\x6a\x3a\xcb\xf0\x4e\x42\x14\xa5\x49\x09\x89\x00\xfb\x2b\x12\xc1\xf7\x90\xc0\xe5\x71\x0b\x09\x31\x97\x71\x08\x63\xb1\xae\x7c\xa4\x2d\x91\x2d\xef\x2a\xad\x13\x6f\x2c\x89\xd4\xf6\xf9\x15\x80\x54\x33\x1a\x8d\x8e\x9d\x27\x31\x6a\xbe\x5f\xd1\xbc\x6f\x37\x87\xc8\x07\x4f\x7c\x67\x4a\xf6\xb1\x24\x47\x39\xa9\x18\xe5\x13\xbf\x20\x8a\x98\xb1\x4e\x64\x67\x93\xaa\xb1\x12\x8a\x4e\x57\x10\x83\xb6\x44\xc1\xf6\x09\x15\x18\x39\x16\x8f\x14\x7d\x28\x48\xa1\x48\x1e\x29\x4f\x58\x6d\xa2\x0b\x1d\xf1\x02\x83\xed\x6e\x38\x15\xca\x18\xbb\xf1\x10\x29\x57\x76\xa2\xff\x1a\x39\x20\x90\x3b\x4f\xed\x74\x42\x9c\xe6\xfc\x66\x49\x2b\xee\x57\x37\xdd\xae\xdc\xd0\xc3\xd6\xda\x6a\x38\x65\x40\x55\xa7\x35\x5c\xcd\x3e\xcb\x66\xf2\x44\xee\x9a\x93\xb5\xe2\xa6\x55\xee\xc5\x95\x98\x6e\xec\x66\x68\x75\xe3\x77\xaa\xfb\xe9\x38\xfd\x6c\x3d\xb6\xbb\x52\xe2\xd9\xe3\xad\xbb\xf5\x37\xb2\xfb\xdb\xaf\xee\x6f\xfb\xa9\xbd\x64\xab\x59\x18\x09\x56\x73\x34\x23\x66\x72\x15\x72\xfa\x8d\xfd\xef\x43\xff\x34\x80\x5a\x97\x3d\x36\x10\xea\x4a\xec\xa9\x3b\x6f\xd0\xa5\x03\x7e\x83\xc6\x31\x9f\x85\xe9\xe4\xd3\x82\xa7\xf9\x7a\x6b\x15\xac\xc2\x49\x3e\x03\x15\xe4\x2a\xd8\xa4\x80\xdc\xf9\x6a\x05\xa4\xe4\x8a\xab\xe0\x1f\xa8\x82\xb4\xe2\xdf\x5b\x87\x76\x14\x8e\x53\x48\xfc\x9c\x31\xb2\x0e\xd5\xf9\xa1\x09\x03\xad\xdf\x32\x36\x4f\x26\x4b\x74\xee\x8d\xe5\xe9\xf2\x5b\xa6\x9f\x7a\x93\x34\xbc\x00\x2d\x58\x21\x8b\x20\xf9\x0b\xe3\x00\x79\x7e\x08\xa7\x28\x69\x15\xe3\xc5\xfc\xb7\x0c\xd4\x88\x0b\x1e\x5c\xf2\x0b\xb1\x65\xba\x82\x13\x43\x0d\xd6\x1a\xa7\x0a\x08\x95\x4c\x41\x3f\xbe\xcc\xd8\xf3\xe5\x2c\x96\x17\x29\x6c\x5a\xab\x17\x46\x60\x59\x6e\x4f\x13\xc9\xfb\xe0\xd8\xbb\x5e\x44\x3c\xa6\x11\x26\x73\x91\x99\xd9\xea\x89\x0c\x0a\x80\x0e\x0b\x41\xad\x78\x5c\x91\x31\xd1\x8c\x82\xc7\x13\xb6\x0a\x32\xf5\x67\x4d\x67\x50\x07\x41\xe2\x64\x38\x1c\xb2\xd3\x7c\xc2\xfc\x76\xbb\xd3\xf2\x9b\x9d\x76\xdb\xaf\xc3\x71\xf7\x0e\x8f\x2f\x25\xb3\x48\x5c\x1d\x6e\x6d\xad\x56\xab\x56\xb2\x10\x31\x84\x32\x00\x94\x25\x71\x14\xc6\x62\xb1\x1c\x67\x5b\xed\xf6\xde\x41\x7b\xe7\x60\x6f\x77\x4b\x3b\xd8\x69\x4c\xce\xf2\x79\xf4\x6d\x70\x32\x07\x10\x05\x8b\x9a\x86\xd7\x62\xd2\x84\x2f\x74\xeb\x62\x13\x71\x15\x06\x22\x6b\xb0\x17\x3c\x0f\x63\x23\xc3\x40\xd8\x73\x96\x04\xc1\x72\xb1\xd6\x5e\x95\x12\xcc\xa3\x40\x44\xd1\x23\xb6\x48\xb2\x50\xa1\x0f\xed\xc7\x00\x6c\x43\x8a\xcf\xa9\xe0\x19\x0b\x27\x22\xb9\x48\xf9\x62\x16\x06\x6c\xf0\xe7\xe7\x16\x64\x30\xf9\x45\xc0\x52\xf0\xca\x96\x52\xde\x15\x51\x94\xb5\xd8\x49\x9c\x0b\x78\x56\x85\x48\xaa\xf9\x5a\x4b\xba\xe8\x69\xce\xa3\xa6\x7a\x34\x87\x94\x5a\xf8\xd2\x88\xe1\x16\x6a\xb9\x88\x44\xbe\x5e\x08\xdc\x73\x75\x4b\x1c\x53\x8d\x33\xa6\x1f\x4c\xc0\x8b\x01\xee\x05\x5a\x73\xaf\xf3\x60\xf2\x8b\x54\x00\x7d\xb0\x24\x56\xfe\xf3\x1a\x16\x19\x21\xf3\xc9\x15\x87\xd8\x4a\x8f\x95\x96\x3b\x4b\x52\x48\x49\x96\xac\xd8\x1c\xfc\xda\x45\x14\x69\x2c\x65\x2d\xf6\x2a\x61\x22\xcb\xf9\x38\x82\xbc\x91\xf8\xe4\x0a\x6b\x9c\xe5\x3c\x9e\xf0\x74\x92\x61\x9a\x77\xc6\x21\x8a\x46\xe6\xf4\xff\x4e\x49\x47\xd6\x38\xcc\xfa\x3c\xa0\x9c\x3b\x15\xfd\x4a\x10\x15\x88\x68\x91\x4f\x6c\x9a\x2c\xf3\x30\x16\x60\x77\x09\x58\xc5\x58\x3f\x2a\xf0\x96\x5c\x5c\xd8\x01\xf0\xb2\x2e\xd7\x69\x2c\x66\xfc\x2a\x94\x53\xe5\x19\xa6\xf0\xce\x60\x3b\xb1\x74\x19\xe1\x03\xb9\x95\xeb\x0c\x6e\x1c\x8b\x34\xb9\x0a\x27\x26\x46\x80\x9a\xca\x20\x89\x33\xc9\x15\x96\x3a\xbb\xd5\x28\x49\x51\x87\x4e\x64\xc3\x23\x8b\x68\x1a\x4e\x63\x85\x33\x60\x09\x61\x10\xe6\x14\x58\x00\x76\x6b\x66\xcb\xe2\x4d\xc0\x07\x92\xfc\x55\xc8\x01\x0a\x4e\xc9\xa4\x4b\x15\x6c\xc8\xb3\x9c\xf5\xb2\x10\xef\x0b\xa3\x65\x14\x7d\x80\x16\xb5\x51\xbd\xc1\x3e\x48\x51\xbe\xf6\xa1\xde\x60\xcf\x78\x34\xa5\xed\x53\x7b\x56\xc7\x67\xf6\x57\x3c\x4d\x93\x15\xab\xbd\xe2\x75\x2b\x87\x11\xc6\x66\xc3\x4b\x64\x86\xd1\xea\x70\x0a\x29\x79\x93\x30\x3e\x1f\x87\x17\x4b\x49\xe3\x10\x32\x89\x16\x1a\x81\x73\x34\xd2\xc7\xc5\xa2\xa5\x5e\x66\xa2\x05\x28\xb2\xb6\x28\x1d\x1d\x66\xf4\xac\x07\x50\x93\x65\xc6\x6a\xbd\x3a\x04\x83\xa0\x5c\x8c\xf2\x44\x00\xd8\xc1\x2c\x09\x03\x89\x83\x85\x88\x27\x19\x5b\x2c\x21\xb7\x13\xc4\x14\x5b\xa4\x62\x2a\x52\x41\x8e\xcc\x63\x1e\x5c\xae\x78\x3a\x51\xf1\x35\x78\x1e\xd2\xa6\xc4\x6b\x6a\x08\xe6\x68\xb3\x30\xcb\x93\x94\xf6\x78\x92\xb2\x0f\x22\x83\x70\xfc\x0b\x70\xef\x0f\xf0\x2e\x33\x98\x25\x09\xec\x3c\x64\x23\x84\x42\x4a\xcd\x95\x09\x67\x4a\x60\x03\x07\x71\x83\x7e\x5b\x66\x60\x6e\xc3\xb5\xe1\x05\x5f\x2c\xd2\x64\x91\x86\x52\xfe\x8d\x92\xf8\x02\xc3\x2b\x67\x49\xb4\xc4\x17\x51\x0c\xad\x01\x43\x51\xfd\x93\x53\xdd\x24\xcc\x16\x11\x5f\xd3\xee\x77\xbb\xe4\x99\x8a\x9a\x46\x18\x32\x47\x8b\x9a\x9d\x04\x51\x38\x36\x80\xee\x25\xe9\xad\x59\x6d\xbf\x39\x0e\x73\x7d\x2b\xb3\x40\x83\x1b\x3b\xf5\x8d\x76\x4c\x0e\x06\x24\xfd\xf8\x5d\x68\x9c\x48\xba\xb5\x87\x41\x91\xdd\x24\x92\x7e\x4e\x85\xb8\x04\x6f\xa7\xc1\x3a\x0d\xa3\x28\x0c\x1a\x4c\xe4\x41\x0b\x8f\x2b\xf0\xdc\x88\xd7\x2c\x5f\x2f\x34\xc3\x0d\x28\x78\x1c\x77\xfc\xb6\x5f\xca\x1d\x1c\xc1\xc3\x5a\x04\x9e\x55\x88\x2e\xa2\x08\x79\x0e\xda\xeb\xc2\x5e\x25\x79\x61\x63\xd4\x5e\x89\x65\x9e\xf2\x88\x28\xbd\xc5\x86\x92\x63\x49\xa4\x6a\x74\x6b\x37\x97\x49\x18\xc0\x53\x17\xb7\xa0\xf2\x78\x4d\xfe\x1e\xc5\x45\x68\xb1\x13\x75\xaf\x86\x54\xb1\xf9\x4c\xc0\x40\x31\x2d\xba\x14\x9e\x80\x06\xcc\x14\xc1\x63\x0b\xb3\xcb\x27\xe8\x03\x24\xef\xf0\x9a\xd3\xc1\x79\x82\xc9\xf5\xf4\x62\x48\x06\x06\x1c\x0a\xfd\x4d\xb5\x3f\xf5\xf0\x25\x3b\x7d\xd3\x1b\x0c\x25\xf9\xbe\x7f\xfd\xe2\xdd\xcb\x21\x3b\x79\x75\x36\xfc\xf9\x6d\xef\x85\x15\x3f\x45\xce\x69\x4c\x09\x93\xad\x2b\xf4\x44\x1e\x7e\xb9\xdc\x42\xb0\x2b\xb8\xbb\xc0\x17\xd1\x7a\x31\x6b\xb9\x62\x0c\x80\xd0\x7c\xd7\x30\xfb\xb9\x80\x9d\xc8\xb3\x2c\xbc\x88\x0d\x20\x8b\x7f\xe1\x74\x65\xfb\x18\xd7\xc1\xe1\x8f\xc4\x0c\x42\xf0\x4e\x43\xe3\x02\x43\xa3\x46\xf3\xa5\x1d\xd9\x28\xab\x5b\xc6\xf3\x30\x9b\xf2\x20\x4f\xd2\xb5\x0a\x5c\x2e\x97\x01\x5c\x8e\x14\x1d\x49\xf6\x0d\x5e\x4a\xd0\x54\x1d\x63\xa8\x91\xc2\x93\xcc\xb0\x64\x8a\xa7\xb2\x0a\xe4\xa1\xc2\x5b\xac\x87\x3e\x25\xf3\x04\x13\xdd\x2b\xad\x9a\x08\x42\x50\xd8\x20\x82\x5d\x5a\xb3\x09\xcd\x5a\x3f\x35\xb0\xe2\x22\x8c\xd7\xee\x06\x06\xac\x67\x6a\xd1\xd6\x02\xac\x19\x79\x9c\xad\x70\x22\x6b\x75\x4c\xad\x55\x56\x64\x7d\x82\x19\x81\x52\x9d\x34\xf2\x0c\x1b\x43\x24\x51\xcc\xd5\xd3\x62\xa7\x22\xcf\x69\x19\x97\x0b\xe0\x9a\x52\x60\x31\xf3\x57\xdb\x47\x1f\x95\xc9\x94\x44\x8d\x8a\x83\x58\x42\x01\x6b\x0f\x92\x3e\xc0\x92\x2d\x05\x8d\x16\x8f\x79\xb4\xce\x28\x91\x19\x04\x5f\x97\xa2\x16\xaf\x92\x06\x80\x37\x8c\x97\x39\x46\x48\x55\xd5\x08\x41\x5c\x1b\x5f\x37\xe0\x78\xcd\x75\x76\x17\x0e\x97\x1d\xbd\x1d\x1d\xc2\x84\xb8\xa3\x57\x09\x9c\xdc\xca\xa9\x8d\x4d\x79\x5a\x21\xe1\x92\xea\x06\xe4\x52\xfa\x7d\x8b\xc2\xa1\x6e\xe5\xa9\xef\x6f\x29\xf6\x63\x24\x7f\xd6\x6c\xb2\x4e\xbb\xbd\xd7\x6c\xef\x36\x3b\x5d\x56\x53\x33\xda\x6d\xb5\xeb\x54\xfb\x8d\x44\x51\x96\x91\x65\xf9\x32\x13\x0d\x16\x24\x8b\x75\x43\xde\x66\xc2\xe9\xba\x41\x1e\xae\xf2\x8a\x34\x5e\xe6\xc2\xdc\xc8\xa6\xf9\x8a\xa4\x19\x62\x39\xf2\x8c\x5b\x40\x86\xcd\x18\x3d\x82\xc1\x71\x4e\xc0\x41\x2c\x0f\xe4\xf1\x5a\x4a\x1c\x92\x92\x70\xa7\x22\x5a\xe8\xd4\x08\x22\x1e\xce\x51\x18\x5e\xf1\x54\x56\x0b\x05\x59\x70\xa4\xe2\x42\xae\x37\x65\x33\xb4\xfa\x56\x38\x7a\xc1\xc1\x1c\x87\x54\x93\x87\x36\xce\x82\xa8\x15\xf0\x79\x8b\x07\xad\xe5\xe5\xd6\xdf\xe7\x17\x97\x9d\xdd\xad\x65\x60\x2e\x00\x81\x73\x93\x72\xaf\x41\x5a\x5b\xad\xc4\x1d\x74\xd9\x8a\x96\xf3\x98\x18\x05\x26\x69\x3b\x39\x7d\xcd\xfc\x76\x77\xa7\x6b\x08\x45\xb3\x3f\x09\x2b\x53\x77\x23\xd6\x24\x33\x8e\xc8\xe2\x28\xac\xf6\xee\x09\x3e\xb9\x00\x29\x94\x3a\x68\xb7\xa8\xe9\x6b\x90\x03\x06\xed\xad\x81\x0f\x9b\x24\x4d\x22\xe7\x74\x8d\x27\xec\x78\xf8\x82\x62\x63\x09\x8e\xf1\x4d\x1c\xa3\x7e\x09\xae\xe9\x2b\x78\xaf\x92\xb8\x99\x2d\x78\x00\x9b\x33\x9e\xc8\x63\x35\x42\xe9\x21\x48\xe6\x63\x94\x45\x2d\xf8\x35\xf4\x2f\x8e\x98\x3c\x05\x2e\x24\x13\x03\x4a\x7a\xa9\xf2\x12\x24\x29\x7b\xa9\x43\xa8\x15\x77\x75\x5d\x39\x24\x6e\x9c\xdd\xe9\xeb\xd1\x19\x7b\xf6\xdf\x6f\x9e\x0d\x5f\x21\x46\x7a\xc7\x9b\x30\xe2\xbb\x18\x21\xa3\xca\xdb\x87\x3a\x98\x6e\x1c\x1e\xcd\x41\xa2\xe1\x2f\xc3\xb7\xaf\xd9\x87\x93\xe3\xb3\x67\x74\x5a\xd5\xde\x3d\xe9\xb4\xdb\xfd\xdb\xa7\xf0\x8c\xc7\x17\xcb\x88\xfd\x99\xcf\x13\x06\xc9\x1d\x22\x76\x95\xac\x44\x84\x6b\xa3\xac\x60\xe2\x2c\x89\x79\x9c\x67\x12\xae\xef\x77\xdb\x4d\xf9\x63\x34\x52\xe0\x69\x24\x9b\xf1\x44\x2b\x76\xa3\x74\xaa\x24\x69\xb9\x28\x56\xb1\x94\xb7\x95\x58\x3d\x52\x73\xd6\x38\x92\xe2\x99\xbe\x85\x6b\x14\x9d\x89\x60\x16\xc3\x1d\x81\xfc\x16\xff\x9f\xef\x6f\xc0\x04\x01\xec\xa8\xa1\x56\x8a\xcb\x36\xc5\xa6\x02\x1c\x43\x63\xd7\x72\x27\x54\x80\x70\xdf\x0f\x7e\xbb\x34\xad\xa7\x11\xbf\x00\xd1\x35\xe6\xe3\x88\xf8\xc8\x7a\xd3\xc2\xe8\x81\x80\x8e\x49\xcc\x79\x99\xa6\x4d\xa2\x70\xc9\x78\xc0\x3a\x51\x02\x86\x2d\xbd\xbf\xbf\x7b\xd0\xf4\x61\xed\x3e\xfc\xfc\x62\x47\xa1\xcb\x92\x04\xf4\xf9\x50\xda\x8d\x4a\x6e\xdc\x30\x32\xdf\x0d\x01\xee\x0a\xbc\x18\x78\x4f\xbd\xac\xb8\xe8\x52\xa2\x6f\x68\x71\x1d\x7c\x3e\x78\x40\xbc\xf1\x08\xf3\xb7\x6e\x6d\xb1\x0f\x9a\x45\x49\x8e\x63\x20\xb5\xa8\x6a\x2b\x5e\xd2\xed\x0b\x53\x75\xb9\x4d\x4a\x73\xd2\xcd\xe8\x4b\xa1\xe9\x48\xae\x8c\xf2\x22\xa5\x0c\xc9\x10\x56\xf9\x16\x2a\xd0\x60\x2b\x56\xdb\x24\xb5\x74\xc6\x16\xdf\x02\xd3\x8c\xd4\x02\xa6\x86\xdb\x41\x68\xa7\xa8\xc5\x53\x21\x13\xe3\x24\x6e\x26\x57\x22\x8d\xf8\x62\x41\xaf\x63\x22\xbd\xe2\x51\xa6\x3e\x66\xa5\x6d\x27\xa1\xa8\x90\x0b\x20\x1a\x3d\x5a\xc6\x61\x26\x72\xf6\x24\xe0\xf9\xd1\x4b\x41\x3f\x63\xfc\x39\x98\xb2\xa6\xe4\x69\x0c\xf7\xbc\xdc\xf1\x0c\xd8\x0a\x0b\x1e\x19\xc4\x2a\xb6\x7b\xc4\xce\x41\x2f\x7b\xce\xda\xd7\xed\xed\x76\xbb\x01\x3f\xbb\x23\xf6\xb1\x81\x65\x3b\xfb\xdb\x0d\xfc\xd9\xb5\xca\xf6\xa9\xec\x80\x51\xaa\x33\x28\xdf\x3d\xf0\xa1\x7c\xb7\x7f\xac\xeb\xee\xf6\x47\x54\x66\x60\xee\x0e\xa8\xde\xa0\xe3\xb6\x1f\xec\x50\xf9\xae\x55\x77\x8f\xca\xf6\x74\x59\x97\xc6\xd9\x6d\x6f\x3b\xed\xbb\x3e\x95\xfb\xa6\x7d\x77\xa7\x8f\x65\xbb\x43\x53\xb6\x47\xf5\xf6\xda\x6e\xfb\xe3\x2e\x96\x0f\x77\x4c\xdd\xe1\x1e\x95\xed\x5b\x65\x3d\x2a\x3b\x76\xda\xef\xb5\x71\xae\x7b\x6d\x33\xd7\x3d\x1f\xe7\xba\xe7\xfb\xa6\x6c\x1b\xfb\xdf\xdb\xe9\xb9\xed\x7b\xd8\xff\x5e\xbf\x6d\xea\x0e\x71\xfc\x7b\xa3\x6d\x5d\x76\xd0\x46\x98\x07\x6d\x17\x7f\x07\xdb\x83\x06\xfd\x34\x75\x77\xa8\xee\xce\xbe\x55\x76\x4c\x65\xee\xf8\x0f\x76\xa9\xee\xae\x99\xff\x41\xb7\x83\x65\x5d\xab\xff\x7d\xaa\xb7\xef\xbb\xed\xfb\xd4\x7f\xdf\xea\x9f\xd6\xfa\x60\x60\xc1\x1c\x50\xff\x83\x42\xff\x43\xea\x6b\x68\xfa\xea\xd1\x5c\x7b\x30\x57\x2a\xa3\x79\xf6\x60\x9e\xa6\x7d\x8f\xe6\xda\xdb\xb1\xea\xee\xec\x51\xd9\xbe\x55\xd6\xa7\x32\xb7\xff\x1e\xd1\x45\x6f\xcf\xac\x55\x8f\xe6\xda\xdb\xb7\x60\xd2\x3c\x7b\xfd\x42\xff\x34\xd7\x9e\x45\xbf\x3d\xa2\xdf\xde\xc0\xea\x9f\xe6\xdf\x2b\xcc\xbf\x47\xf3\xef\x59\xf3\xef\xd3\xfc\xfb\x6d\x33\xa6\x3e\xcd\xbf\x5f\x98\x7f\x7f\x7b\x44\xe5\x86\xfe\xfa\x84\x93\xfe\x8e\x05\x93\xd6\xbf\x5f\x98\x7f\x7f\x17\xe9\xaf\xbf\x6b\xf6\x7a\x7f\x1f\xc7\xd4\xb7\xe6\xdf\x1f\x20\x9e\xfa\x03\x77\xff\xf4\x69\x5e\xfd\x81\xd9\xff\x83\xed\x21\x94\x0d\x76\x0c\x4d\x0f\x76\xba\x54\xb6\xef\xb4\x1f\xec\xf4\xa8\xdc\x6a\xbf\xbb\x8b\x65\xd6\x98\x06\x84\xff\x41\x01\xff\x03\xe2\x35\x03\x8b\xd7\x0c\x06\xd4\xd7\xc0\x6a\x3f\xa0\xf6\x05\xfc\x0f\x08\xff\x03\x0b\xff\xc7\x84\xbf\xe3\x1d\xbb\xec\x98\xca\xdc\xf6\xc7\x03\x1c\xff\xf1\xa0\x67\xea\x1e\x23\xcc\xe3\xe3\x1d\xab\xac\x4b\x65\x5d\xa7\xfd\x70\x1b\xfb\x1a\x6e\x9b\xb5\x1e\x6e\xef\x50\x99\x81\x39\x24\x9a\x1e\xee\x0c\xdd\xf6\x7d\x6a\xdf\xb7\xda\xf7\xa9\x7d\xff\xc0\x2a\xeb\x53\x99\x8b\xbf\xe1\x00\xf9\xfa\xd0\x5a\xbf\x91\x8f\x65\x23\xdf\xb4\x1f\x6d\xe3\x9a\x8c\xb6\x77\x9d\xf6\xa3\xed\x3d\x2a\xdf\xb3\xea\x1e\x50\x99\xd5\x7e\x0f\xc7\x39\xda\x73\xc7\x3f\xda\x47\xba\x1a\xed\x1b\x5c\x8d\xf6\xbb\x54\x66\xc1\x3c\xa0\x7a\x07\x7b\x6e\xfb\x03\xea\xcb\xe2\x3f\x23\x5a\xff\x91\x59\x7f\xbf\xdd\x81\xf5\xf3\xdb\xdb\x0e\xfd\xfa\xed\xed\x0e\x95\x77\x4c\xdd\xed\x2e\x95\xed\x59\x65\x07\x54\x76\xe0\xb6\xdf\xdd\xc7\xf2\x5d\x3d\x57\x79\x06\x43\x99\x3c\x86\x55\xd9\xf6\x2e\xd0\xa9\xfc\xe9\xb4\xdf\xf3\xb1\xff\x3d\x5f\xcf\xdf\xdf\xa3\x31\xed\x6d\x5b\x65\xbb\x54\xb6\xbb\xed\xb6\xdf\xa3\xf2\xbd\x6d\x53\x17\xd7\xdf\xdf\xeb\xef\x5a\x65\x7b\x54\x76\xec\xb6\x47\x5c\xc9\x9f\xa6\xee\x00\xe7\xba\x77\x6c\xc1\x3c\x3e\xa6\x32\xb7\xfd\x7e\x1b\xe8\xca\xdf\x6f\x6b\xfa\xf1\xf7\x7b\xd8\x7e\xbf\x67\x70\x72\xd0\x41\x9c\x1c\x74\x9c\xf3\xcb\x3f\xe8\xec\x51\xf9\xbe\xa9\x4b\xf3\x3f\xb0\xd6\xe4\x80\xf0\x7f\xb0\xdd\x77\xda\xf7\x7c\x6c\xdf\xf3\x4d\xfb\x3e\xca\x0a\x7e\xbf\x6d\xc6\xdf\xc7\x3d\x25\x7f\x3a\xed\xfb\xb4\xd6\x7d\xb3\xd7\x7c\xe2\xb5\x7e\xdf\x9c\xa9\x7e\x7f\x07\xc7\xd4\xdf\x71\xc7\xdf\xef\xe2\xfc\xfb\x16\xfe\x8f\x91\x57\xfa\x16\x4f\xf0\x8f\x47\x43\x2c\x1b\x39\xeb\x2f\x85\xb4\x06\xfe\xd4\xb4\xd2\x69\x77\x7a\x58\xd6\x19\x9a\x32\xa4\xa9\x4e\xbb\xbb\xed\xb6\xef\x52\xdd\xae\xd5\xfe\x98\xea\x0e\x75\xd9\x36\xc1\xdc\x6e\x77\x9c\xfe\xb7\xdb\xb8\x7f\xb6\xdb\x07\x7a\xac\xbd\xfd\x36\xe0\x44\xfe\xb4\xca\xfa\x54\xe6\xe0\xbf\xb7\xdf\xd9\xc5\xf2\x8e\xae\x3b\xea\xfb\x30\x57\xf9\x53\x97\x0d\x71\x4d\x46\xc3\xb6\xd3\xff\x68\xd8\xa1\xf2\xce\xb6\xa9\x3b\x1a\x35\xe8\xa7\x2e\x1b\x8d\x60\x9c\xa3\xd1\xc8\x5d\x7f\x25\x2c\xc8\x5f\xcc\x0a\xb4\x7b\xed\x5d\x55\xda\xb5\x4b\x07\xaa\x74\x54\x80\xb2\x4d\xdb\xb8\x67\xd1\x41\xbb\x87\x87\x2b\xfc\x62\x56\xd2\xef\x22\xc9\x1d\xfb\x5d\x97\x17\x1c\xfb\x7b\xdb\xf4\xc5\x9c\x9c\xf2\x8f\x5d\x55\xda\xb7\x4a\x7b\x3d\x2a\xed\xb9\x3b\xea\xb8\x43\xa4\x76\xdc\xd9\xd1\xfb\x7f\xd8\x6e\xe3\x3c\xe1\x17\xab\x14\xd1\x37\x6c\xb7\xf7\x9c\x19\x0d\xdb\x7e\x9b\xbe\xf8\x92\x0a\x1e\x7c\xbc\xff\xcd\xe4\x96\xbb\xd5\xe6\x2b\x0a\xe8\x37\x9a\x3d\xd6\xa4\xbb\x4a\x93\xee\x2a\x4d\xba\xab\x98\x4b\x09\xb7\x6e\x63\xd6\xa5\xa4\xdd\xc3\xc3\xa2\xdd\x33\x87\x5a\xbb\xb7\x43\x65\x3b\x56\xd9\x1e\x95\xb9\x42\x45\x1b\x71\x2b\x7f\x5a\x75\x87\x54\x66\x2e\x05\xed\x3e\x1e\x2a\xed\xfe\x8e\xdb\xbe\xdf\xa5\x72\xab\x3d\x09\x20\x6d\x4b\xd0\x68\xd3\x41\xd3\x1e\xb8\x87\x3a\x6d\x40\xf9\xd3\xd4\x3d\xa6\xb1\x1e\xef\x5b\x65\x34\xa6\xa1\x2b\x54\xb7\x87\x04\x77\x68\x04\x98\xf6\x70\x9f\xca\xac\x31\x0d\x69\x4c\x85\x4b\x49\x7b\x44\xfd\x8f\xac\xfe\x47\x1d\x2a\xdb\xb6\xca\x68\x4c\xa3\x5e\xa1\x3d\xc1\x1d\x0d\xac\xba\x34\xd6\x91\xc1\x9f\x4f\x82\xaa\xdf\x76\xc7\xef\xd3\x05\xc8\xb7\x2e\x40\xbe\xbf\x4d\x65\xdb\x56\x59\x9f\xca\xfa\x6e\xfb\x0e\xce\xdf\xef\x18\x01\xc0\xef\x50\xdd\x4e\xdf\x94\x91\xf0\xe4\x6f\xbb\x97\x42\x1f\x77\xb3\xfc\x69\xd5\x45\x41\xd1\xb7\x2e\x0a\xfe\xce\x0e\x95\xb9\xeb\xef\xef\x50\xfb\x1d\xab\x2f\x12\x00\x7d\x4b\x50\xf5\xf1\x50\x6e\xfb\xbb\x85\xfe\xbb\x34\xfe\xae\x35\xfe\x2e\x8d\xbf\x6b\xc1\x1c\x20\x4e\xfd\x81\x2b\x14\xf9\x44\x3f\xbe\x45\x3f\x3e\x09\x95\xfe\xb1\x35\xfe\x63\x1a\xff\x71\x61\xfc\x24\x6c\xfa\xc7\x5d\xab\x2e\xcd\xc9\xa2\x3f\xff\xb8\x47\x65\xbd\x42\xfb\x01\x95\x9b\xf5\xef\xd0\x45\xb1\xb3\x6b\xd6\xb4\xd3\xa5\xb2\xae\xbb\xfe\x1d\xba\xd4\x77\xac\x0b\x60\x87\x2e\x45\x1d\xeb\x52\xdf\x41\x41\xa3\xdd\x19\xf4\x0b\xed\x8f\xa9\xdc\xe0\xba\x43\x38\xe9\x58\x38\xe9\xd0\x9c\x3a\xc7\x85\xf6\xc7\xd4\xfe\xd8\x6e\x3f\xa2\x32\xb3\x7f\xb7\x49\x79\xb1\xdd\x73\xc7\xbf\xdd\xdb\xa6\x72\x23\xc0\x6e\x93\xa0\xbd\x3d\x30\xf3\xdf\x1e\x50\xbd\x81\xab\x14\xd9\xa1\x7d\xb1\x63\x5d\xe0\x76\x48\x51\xb1\xb3\x63\x29\x5a\x08\xa7\x3b\xbb\xbe\x7b\xa8\xfb\x74\x80\xfb\x6d\x73\xa8\xe3\xfe\xe9\xb4\xfd\xae\x55\xb6\x4f\x65\x07\x85\xf6\x03\x2a\x3f\xb6\x84\x0a\x82\xd9\xe9\x58\x65\x3b\x54\xb6\xe7\xb6\xdf\xa6\xba\xdb\x56\xff\x28\x94\x75\xda\xdb\xdb\x56\xd9\x2e\x95\xed\x16\xda\x93\x50\xb3\xdd\xb7\xea\x0e\xa9\xcc\x12\x6a\xf6\xa8\xff\xbd\x1d\xb7\xfd\xde\x88\xca\x2d\xa1\x06\x2f\xe5\x9d\xb6\xb9\x28\x74\xda\x3d\x9a\x67\xcf\xb9\xd4\x74\xfc\x36\xe2\xca\x37\x22\x41\xc7\x47\x89\x40\xfe\xb4\xca\x0e\xa8\xcc\xc5\x1f\xf1\xaa\x8e\xc5\xab\x3a\xbe\xdf\xa5\x32\x83\x7f\xbf\x83\x63\xf2\x5d\xa1\xb6\x43\xfc\x4b\xfe\xb4\xea\xf6\xa9\xcc\xe0\xc4\xdf\xa5\x7e\x76\xdd\xf9\xfb\xbb\x54\xd7\x28\xb0\x3a\x74\xa9\xe8\x58\xfc\xa3\xe3\xef\x51\xd9\x5e\x61\xfc\x07\x54\x7e\x70\x60\xea\xf6\x91\x56\xfc\xbe\x55\x86\x3c\xa5\x83\x3c\xc5\x6a\x8f\x7c\xa5\xe3\x9b\x0b\x6c\xc7\x47\xa5\x98\xfc\xa9\xcb\x3a\x28\x63\xc8\x9f\x4e\xfb\x4e\xbb\x43\xe5\xdb\x56\xdd\x3d\x2a\xdb\xb7\xca\xfa\x54\xd6\x2f\xb4\x1f\x51\xb9\x59\xff\x0e\x9e\x29\xf2\xa7\x55\xb6\x4b\x65\x2e\xfd\x75\xfc\x1e\x95\xf7\xac\xba\xc7\x58\xd6\x31\x34\xdd\xe9\x6c\x53\x99\x2b\x54\x77\x3a\x04\xb7\xb3\x6b\xd5\xa5\xf1\x77\x06\x56\xd9\x90\xca\x86\x6e\x7b\xbc\x6c\x74\x3a\xdb\x16\xae\xf0\x52\xd1\xe9\x6c\x9b\x3d\xd9\xc1\x73\x46\xfe\x74\xdb\xef\x50\xdd\x1d\xab\xaf\x5d\xc2\xe9\xae\xd9\xbf\x1d\xa2\x89\x02\xff\xed\x74\xba\xd4\x7f\xd7\xea\x9f\x2e\x0a\x1d\x8b\x7e\x3a\x5d\x1a\x7f\xd7\xbd\x94\x74\xf6\xa9\xaf\x7d\x6b\xfd\xf0\x52\xde\xe9\xec\x5b\x30\x0f\x08\x4f\x07\x05\xfc\xe3\xa5\x42\xfe\x34\x75\x7b\x54\xb7\x67\xe1\xb4\x4f\xeb\xdc\x77\xfb\xdf\xc6\x4b\xb1\xfc\xa9\xeb\xee\xd0\x5c\x77\x86\x06\xe6\x0e\x2a\x4a\x3b\xbb\x3b\x2e\xfd\xec\xee\x62\xdd\x5d\x73\x29\xeb\xec\xee\x53\xd9\xbe\xa1\xa9\xdd\x03\xec\x67\xb7\x30\xfe\xdd\x1e\xd5\x35\xf2\x67\x67\x17\xcf\x84\xce\xae\x39\x13\x3a\xbb\x7d\x6a\xdf\x77\xe9\x67\x17\xe5\xc7\xce\x6e\x7f\xcf\xaa\x3b\xa0\x32\xb3\xfe\xbb\x03\xea\x67\xe0\xae\xdf\xee\x80\xda\x1b\x05\x62\x67\x77\x40\x73\x1d\xf4\xad\x32\x5c\xbf\xdd\xe3\x42\xfb\x21\x8d\x6b\x68\x70\xbd\x3b\x1c\x51\x99\x99\x7f\x97\x78\x62\xb7\xed\xc8\xaf\x9d\x2e\xf1\xc5\x6e\xfb\xc0\xaa\x3b\xa4\x32\xab\xbd\x8f\x74\xd6\x2d\xec\xbf\x2e\x9d\x3f\x5d\x7f\x60\xd5\xa5\xf6\xe6\x52\xd8\xe9\xee\xe0\xfc\xbb\x3b\x2e\xff\xe8\xe2\x0d\x48\xfe\x34\x75\x69\xfd\xbb\x5d\xdf\x2a\xdb\xa6\xb2\x42\xff\x78\x43\xeb\x74\xbb\x3d\xab\x2e\x8d\xa9\x7b\x6c\x95\x8d\xa8\xcc\xa5\xbf\xbd\x6d\xe4\x15\x7b\xd6\x5e\xdd\xdb\xc3\x35\xd9\x33\x67\x92\xbc\x8b\x35\xc0\x4b\xd8\xbd\xd4\x8f\x46\x23\x68\x2f\x7f\xea\x0b\x6c\x5b\x55\xb6\x4b\xc1\xd1\x03\x95\x05\x6d\x2c\xc7\x8b\x1a\x1a\x0c\xf4\xc3\x98\xa7\x6b\x96\x09\x9e\x06\x33\x34\x83\x22\xf7\xd5\x7c\x86\xd9\xe6\x63\xe3\x71\xa3\x5f\xfc\xc1\x2f\x2e\x5b\xf0\x40\xd8\x8f\x56\xa5\x28\x46\xe2\x42\xa4\x5f\xd8\x32\xc8\x58\xaf\x02\x88\x6d\x06\xad\x7d\x98\x74\x68\xae\xb3\x74\x29\xdc\x61\xdc\xdc\xfd\x53\x7c\x6a\xd3\x61\xb2\xf2\x99\x48\x57\x61\x66\xa5\xff\x5c\x05\xad\x30\x3b\x85\x56\xb6\x83\x5a\x90\xe9\x10\x15\xbd\xe5\x75\x18\x85\x12\x1f\x8e\x9f\xdf\xd8\xc1\x51\x18\xeb\x2b\x2c\x83\xb7\x56\x95\x52\x72\x1e\xc6\xec\x88\xb5\x1b\x6c\xce\xaf\xd9\x11\x2b\xbe\x89\xa9\xb8\x80\x4d\x74\x06\xc1\x16\x13\x1d\x31\x54\x62\xe9\x4f\xa5\x46\xe7\xed\x8f\xe7\xed\x8f\xec\xf3\x67\xc0\xe2\x8f\xe5\xef\x73\x7e\xfd\xf1\xdc\xff\x58\x15\x4f\x54\xfb\x63\xc8\xf1\xfc\x78\x24\xc7\xa7\x9c\x31\xe6\xe1\x84\x1d\xb1\x97\x3c\x9f\xb5\xa6\x51\x92\xa4\xb5\x9a\x1c\xfc\x13\x39\xf2\x3a\xdb\x62\x1d\xcb\x51\x6a\x53\xbf\xe1\x04\xfa\xd5\xde\x1d\x38\x7b\x09\xf8\x49\x85\xb7\xcb\x86\xd9\x01\x94\xb6\x0d\x05\x50\x27\xa1\x34\x0b\x50\x0a\x81\x08\x4d\x56\x3f\x1d\x7e\xd0\x9d\xbd\x1d\x19\xaf\x7a\x59\x81\xd2\x41\x23\x71\x07\x62\x1f\x72\x4c\x57\x7c\xc3\x9b\xed\x3f\x96\xfc\xab\x34\x27\x60\x80\x6b\x0f\xc8\x22\xfc\xe2\xbb\x74\x89\xfe\x37\x93\xb0\xd6\xa0\xdc\x87\x84\x75\xa3\x0d\x24\x6c\xbe\xff\x63\x49\xd8\xea\xf7\x1b\x48\xb8\x00\xe5\x0f\x27\xe1\x63\x95\x41\xaf\xd2\x84\xab\x82\x48\xbe\x0f\x39\xea\x56\x67\x77\xef\x55\xd3\x9c\x2c\x55\x46\x0b\x65\x72\x93\x28\xdd\x68\x38\xa1\xb0\x49\xe3\x28\x02\x7c\x0b\x0d\x74\x6d\x00\x5a\x8a\x6b\xbd\xa1\xed\x71\x98\xa5\x9b\x9a\x7f\x13\xc6\xb5\xc1\xa0\x32\x1c\x91\xac\xe5\x56\xb6\x51\x4a\x95\xf5\xcf\x5c\xa8\x32\x6e\x36\x9d\x94\x10\xd5\x5f\x32\x51\x34\x68\x2f\xdb\x0f\xb5\x2c\x9e\x70\x04\xc1\x33\x2a\x16\x45\xd9\xef\x3c\x75\x18\xc8\x36\x04\x11\xc7\x5d\x0b\x8e\x98\x53\xf6\xc3\x0f\x0c\xbf\xb5\xaf\x79\xbb\x5e\x05\xca\xb6\xe9\x51\x41\x66\x5f\x2f\xf2\x70\x1e\xfe\x8e\x19\xd7\x7b\xa7\x83\x93\x93\x0d\x03\xfc\x13\xf4\xe2\x80\xf5\x15\x90\x7e\xf1\xf0\x47\xfb\xaa\x8d\x56\x35\x2d\x97\xb6\x49\xe2\x00\xe4\x39\x1d\xb4\x55\x07\x98\xdd\x95\xa7\x69\x78\x25\x28\xc1\xab\x1c\x13\x99\xf3\x72\xcb\x96\x31\xd9\x68\x3c\xd9\x32\xbc\xc3\xa7\x40\x99\x06\x7f\xbe\xdf\x6e\xb3\x1f\x7e\x40\xe6\x83\xf3\xc5\xe2\xdd\xa9\x44\xb4\xfd\x6f\x6b\xcb\xb1\x01\x0c\xe3\x30\x6f\x59\x16\x7f\xc4\xbf\x70\x4d\xe1\xf2\xd4\x39\x50\x8c\x5d\x15\x70\xf6\xf9\x33\xd5\x33\x43\xe8\x88\xfd\xb6\x5e\x44\x59\xc0\x77\x82\xa9\x1e\x13\x42\x7c\x78\x04\x6f\x44\xdb\xd3\xba\x3b\xaa\xad\x2d\x70\xd3\x68\xb5\x5a\xec\xbf\xc3\x12\x64\x1e\xb4\x5d\xc8\x93\x3d\xbe\x8d\x10\xcc\x64\x4e\xd7\x51\x24\x57\x2d\x2b\x35\x9f\x1e\x14\x9a\x4f\xf9\x74\xaa\x9b\xcb\x7e\x07\x8e\x43\xcb\x89\xf2\x55\xab\x00\x25\xfc\x02\x28\xe1\x1f\x68\x50\xef\x45\x0a\xd9\x63\xc0\xd8\xb3\xaa\xf1\x76\xb1\x71\xf7\xa6\x71\x8c\xaa\xa1\x4c\x8b\xb3\x99\x76\xdb\x1a\xca\x68\x19\x45\xc8\x13\x36\xb5\x16\xc5\xd6\xa2\x5b\xaf\x5c\x4e\xf0\x1d\xb7\xab\x76\xa6\xd3\xe9\xa4\xb2\xee\x76\xa9\xee\x36\xd4\x45\xcf\x5d\x0a\x98\x77\xc8\xc4\x3c\xf9\x2d\xb4\x8d\x05\x97\xd9\x12\x3c\x37\x94\xb9\x3b\x8a\xfb\x10\x76\x23\x9c\xb8\x5e\x39\x91\xe4\xbb\x17\x33\x04\x67\xc9\x45\x38\xd9\x6c\x21\x02\x96\xf1\x35\xec\xa7\x99\x14\xc4\xd9\x29\xfa\x07\xc8\x6d\x37\x99\x40\x85\x10\x6c\x6d\x33\x9d\x60\x4c\xcc\x7f\xfa\xb6\xc3\xa0\x78\x08\x18\xd7\x98\x7f\xf5\x43\xe0\xed\x1d\x4e\x00\x87\xc1\xd9\x07\x77\x99\xcf\x6d\xb2\x64\xb4\xd3\x11\xdc\xf9\x8c\xfe\x8a\x25\x31\x61\x4a\xaa\x62\x8c\x66\x79\xaa\x63\xdc\x7e\x2d\x3e\x8b\x81\x50\x56\x41\x2b\xcb\xcb\x92\x8f\x13\x04\x83\x1c\xb7\xd2\x2b\xb2\x3f\xbd\x35\x14\x86\x13\x88\xce\x0a\x05\x05\xa1\x0d\xd4\xdf\x56\x7c\x83\x15\x75\x5f\x44\x6d\x29\xd6\x91\x5c\x4a\xac\xfc\x27\x75\x48\xeb\x75\x69\x92\xfc\x9a\x5e\xb1\x27\x47\x08\x92\x1a\xc9\xbf\x6b\x85\x18\x51\xd3\xa9\x64\x9d\x3f\x31\x9f\x1d\x62\x1c\x02\x5b\xa4\x4d\xaf\x9c\xd5\xfb\x59\x50\xbe\xe6\xe5\x98\x22\x8f\x50\x0a\x41\x22\x51\x44\x76\x32\x9d\x66\x22\x2f\x50\xaf\xb5\x0e\x37\xad\xaa\x1b\x2e\xe5\x42\xe4\x56\x5f\xd3\x34\x99\xb7\x2a\xf7\x1b\x06\xe2\xa7\x80\xcb\xe8\x89\xee\x8e\xa5\x08\xab\x1a\x4c\xb2\xc8\x3f\x21\x52\x37\x91\x8e\x03\xe0\x41\x55\xe8\xe5\xb3\x62\x2d\x43\x5d\x50\x5a\xa0\x2d\x4a\x22\xd0\x30\x7d\x5b\xc9\xe8\xe4\x17\x88\x78\xdc\x60\x22\x9e\xd0\x6f\x2b\xbd\x0d\x81\xf6\x4c\x25\xbc\x02\xae\xb4\x79\xb4\xd5\xbe\x10\x9f\xc5\x7c\x30\x81\x5a\xb0\xdd\x93\x0a\xd2\x2b\x04\x3a\x31\x8d\xeb\x25\x5a\xfc\x11\x41\x2b\x7a\x1c\xa7\x82\x5f\x3a\xb9\x67\x0c\x86\x1f\x1e\xb1\x65\x4c\x76\xff\x4e\x52\x64\x35\x53\x4c\x92\xa3\x11\x60\xe6\xf5\x40\xcb\x18\xba\xaa\x3d\x3d\x79\x68\xd1\xce\x38\x32\x58\xb5\x5a\xdd\x79\xa6\x0a\x7c\xbd\x6e\xf0\xff\xe4\x49\xc5\xa4\xcd\xda\x3d\x70\x07\xa6\x42\x66\xa8\x64\xd4\x79\xda\xd2\xb4\x51\xab\x5a\xde\x7a\x71\x03\x9a\x26\x36\xe2\x4b\x9b\x72\xc3\x86\xc4\x7d\x81\x4e\x36\x13\x77\x4b\xfc\xe3\x37\x61\x75\x2b\x39\xb0\x33\x08\x83\x3a\xa9\x6c\xf1\x55\x9b\xac\x90\xc5\xd2\xde\x67\x22\x9e\x38\x81\xad\x9c\x76\xc5\x9a\xac\x49\x04\x0d\x08\x97\x55\x53\x81\x21\x41\x5a\x7c\x32\xa9\x79\x14\x98\x24\x98\xf1\xf8\x42\x44\xc9\xc5\x16\xb9\x82\x79\x0d\xe6\xe5\xe2\x3a\xdf\x5a\x44\x3c\x8c\xbd\xc6\x03\xcf\x6f\xf9\x5d\x8f\x3d\x79\xe0\x79\x0f\xea\x94\x99\xf3\x16\x50\x13\x9e\x8b\x32\x9c\x4e\xdb\xdf\x6b\xb6\xf7\x9b\x0e\xb4\x62\xbc\x94\x99\x3c\x63\xb7\x7e\xcb\xb6\xe0\x97\xff\xed\xd1\x99\x01\x57\xf9\x44\x2c\x00\x49\xad\xd3\x3c\x49\xf9\x85\x80\xa4\xf7\xb4\x03\xfe\x43\x36\x94\xfd\x5f\x85\x62\xc5\x8e\x45\x10\xf1\x94\xdc\xe6\x10\x03\x8f\x21\x6d\x01\xca\xa2\x18\x3a\x7f\x2e\xd8\x98\x67\x61\xc0\xb2\x19\x4f\xc5\x84\x2d\x21\xdb\x4d\xa8\x72\x00\xf0\x1c\xbd\x84\x92\x84\x65\x73\x70\xf3\x4f\xd8\x04\x31\xc1\x26\x02\xb3\x12\x4e\x60\xbc\x94\xcb\x56\xf2\x6b\xe8\x4b\x3b\xc2\x18\xcf\x3e\xc8\xc2\x01\xde\xd7\xf1\x24\x59\xb1\x59\x82\x2e\xd5\x38\xb4\x42\xf8\x12\x79\x58\xf1\x8c\x2d\xe4\x56\x4a\xa6\x54\x47\x5e\xe8\x6a\xf5\x16\xb3\x12\x15\xc9\xda\xf1\x15\x8f\xc2\x09\x5b\xc6\x79\x08\x4e\xc3\x10\xf3\x80\x47\xe1\xef\x3a\x82\x0a\x66\xa6\xc5\x11\x22\x28\x1c\xc3\x99\x1c\x91\x4e\xf7\xa8\xa2\xdd\xf3\x14\xee\xab\x56\xac\x76\xf2\x6c\x37\xa9\x2f\x28\x62\x01\x84\xd0\x53\x21\xad\x7f\x4f\x92\xb9\xed\x1b\x45\x33\xfa\xef\x64\x09\xeb\xad\x22\x63\x43\x86\x8c\x7c\xa6\xd3\xab\xb3\x28\x09\xe4\x60\x85\xce\x84\x6e\x8f\x53\x02\xa5\x01\x99\xac\x9a\xde\x5f\x5e\xbf\x7e\x29\x4f\x0e\xbf\xdd\xfe\x77\x2b\x6a\x4e\x3f\x0d\xc5\x94\xa1\xb5\xda\x5a\x8f\x5f\xbb\xe5\xe3\x70\xe5\x3e\x92\xc3\x0c\x92\x05\x85\xaf\x00\x09\x34\x0a\x17\xe3\x84\xa7\x7a\xd8\xfd\x35\x9b\x88\x29\x5f\x46\x90\xd8\x87\x3c\xe8\x95\x24\xdf\x7f\xd1\x1b\x3c\x67\xa7\x83\x93\xd3\xd3\xd7\x6f\x4f\x2d\xff\x5c\x70\xce\x5d\xe3\x8c\xc9\x7b\xf9\x1e\x93\xb6\x09\x00\x1c\x81\x8b\x43\x9f\x09\xe6\x21\x7a\x9b\x7a\xc0\xcd\x38\xc9\xc3\x40\x78\x56\x54\x07\x20\x02\x67\x21\x14\x3a\x65\xdd\xe9\x5a\xb2\x00\x0b\x9b\xbf\x2c\x3b\x7b\xed\x8e\xc4\xa3\xa6\x56\x89\xa3\x6c\x26\x07\x1a\xc6\x8c\x4b\x92\xbf\xcc\x93\x05\x83\xe6\x14\x8d\x45\xfb\x3f\x2b\x6a\x00\xdf\x64\x11\x45\x2d\xc6\x7e\x59\x76\x3a\x5d\x0c\xa6\xa8\x71\x36\x3c\xf9\xf9\xd9\xd9\x33\xf6\xea\xf5\xd9\xb0\xc1\xfe\xbd\x96\x87\x79\x24\xea\x85\xc4\x97\x12\x57\x3a\x80\x88\xa6\x32\xa8\x6a\xcf\x82\x86\xf3\xca\x1a\xcd\x99\xac\x43\x93\xe9\x76\x7b\xa6\x03\xfc\xdb\x22\x92\x17\x64\xd8\x08\xe1\x1d\x69\xaf\x82\xfb\x2e\x24\x34\xd7\x77\xb9\x1e\x16\xce\x78\x1a\x8b\x4c\xfb\xa4\x53\x22\x67\x95\x32\x7b\x0d\x6e\x7b\x18\xce\x85\xb2\x7b\xa6\xcb\x38\xd6\x87\x11\x0e\x57\x02\x3a\x16\x0b\xb0\x60\xf4\xb0\xe8\x34\x48\x93\x28\x7a\x93\xa4\x98\x3e\x2f\x93\x0c\x5e\x7f\x11\x22\x56\xa5\x0f\x58\xe9\x1f\xd5\x3b\x23\xec\x14\xdb\xbf\x3f\xbb\xbd\xed\xfb\xb3\xd6\x80\xc7\xb1\x98\x60\xcd\x8f\x2e\x9b\x42\x94\x48\x26\xa2\x4f\xce\x06\x4b\xc5\x45\x98\x41\x3a\x5c\x24\x64\x3c\xb8\xb0\xec\x04\xd9\x52\x81\x80\x29\x7f\xc9\x64\x09\xa7\xb0\xac\x1f\x3a\xf5\x94\x04\xa0\xfa\xf8\xc2\x92\x58\x42\x42\x27\x68\xf5\xd2\x63\xda\xb1\x15\x78\xad\x2e\x21\xda\x43\x18\x5f\x25\x97\x02\x76\x85\x7a\x32\x2c\x70\x3d\xd8\xe1\x26\xd9\xe7\xd6\x83\xd2\x88\x11\x19\x5e\xc3\xca\x26\x01\x03\x40\xb1\x40\x8f\x20\x89\x3f\x00\xaf\xac\x21\xcb\x54\x32\x6a\x05\x1b\xc5\x3f\x5a\x92\xcd\xa3\xb8\x67\x25\xe8\x44\xd0\x0d\xd6\x36\x92\x9d\xd5\xc3\x19\x1f\xd7\x72\x3e\x76\x92\xa5\xf1\x31\x4a\xb0\x00\x33\x90\xa7\xb3\xb0\x62\x1b\xc2\xdf\xd4\x3d\x64\xde\x91\x0d\xe8\xef\x93\x49\x03\x58\x7a\x43\x8f\xbd\x3a\x29\x98\x4a\x77\x90\x5e\x84\xf1\x84\xd7\x0f\xf5\xd2\x41\x68\x27\xb6\x02\x61\x8c\x2d\x17\xe8\x5f\xcf\xae\x7c\xc6\x17\x0b\x2f\x83\x80\x31\x17\x29\x1c\xdc\x0b\xe4\x5c\x0a\xdc\x4b\xbe\x1e\x0b\xe6\x20\xc5\x8b\x93\x58\x78\x14\xf2\x63\x4c\x09\x63\xad\xf8\x2e\x90\x62\x57\x87\x2b\x50\xb0\x2a\xb0\xeb\xc5\x10\x7f\x42\xc7\x90\xdd\x88\xdc\x42\x4a\xb3\x87\x8a\x67\x00\x33\x27\xa9\xc1\xc6\xb4\x83\x62\x08\x07\x89\xc8\xcd\xb0\x6a\xb9\xa4\x95\xad\xe3\xc0\xac\x45\x15\x7c\xca\x10\x6e\xc9\x29\x2d\x10\xb0\x44\xad\x0a\x54\xe5\xea\xdc\x11\xec\x0b\x79\x90\xd4\x8a\x13\xa7\x64\x08\xd4\x59\xce\xc7\x99\x4a\x58\x11\x27\x92\xd3\x2d\x28\x8a\x5c\x18\x33\x0a\xee\x06\x69\xb8\x33\x8a\xb6\x20\x72\x11\xe4\xf8\xb6\x8a\xc0\xd6\xc9\xd2\x83\xa0\x15\x76\x6d\xe4\xef\x51\x98\x4b\xd6\xcb\x57\x10\x44\x48\xbd\xa6\x87\xd9\x1b\xaa\xd9\x5b\x2c\x8c\x23\xed\xcd\x18\x4f\xa5\x08\x53\x55\x22\x09\xfc\x25\x8f\xc3\xa9\xc8\x72\x5b\x95\x32\xa7\x32\x76\x74\x43\x03\x85\x9c\xe2\x90\x54\xe3\x96\x9c\xca\x0f\x3f\x38\x7f\xb7\x0c\x8d\x3b\xf7\x56\x07\x86\x15\xdb\xf4\x8d\x8d\x44\x10\x19\x21\xba\x8d\x75\x80\x87\x46\x50\x92\xcb\xd1\x2a\x33\x08\xdc\xaa\x98\xba\x17\xb7\xef\xdf\x24\x2b\x39\x64\xde\x22\x59\x2c\x17\xde\x97\xba\x66\x1f\x36\xa5\xdc\x84\x50\xd9\x93\x93\xc5\x50\x12\xc5\x85\xc8\x07\x94\xac\x03\xf3\x4a\xc9\x12\x94\x6f\x24\xd3\x81\xb3\x2d\xcc\xd8\x23\xca\xe8\x11\xad\xd5\x99\xf6\x08\x13\xc2\x41\x60\x17\x05\x30\x4f\x16\xf3\x44\x1e\xa8\x29\x9b\x26\x01\x66\x50\xe3\xe3\x96\xcb\xa6\x60\xc2\xa6\xdb\x1a\x30\xbc\x6a\xaa\xbf\x23\x46\x88\x17\x18\x94\x28\xda\xff\x52\x2f\x25\x12\x9b\x88\x20\x9c\xf3\x88\xfd\x4d\xa9\xed\x66\x02\xae\x3f\x5f\x88\xaf\xe1\x15\x79\x92\xcc\x31\x6a\xa2\x75\x70\xcb\x21\x47\xa1\x88\xf3\xd3\xf0\x77\xc7\xea\x64\x92\xcc\x9d\xcb\xe3\x24\x81\xca\x10\xa4\x3d\x8c\x2f\xb0\xd1\x5b\x11\x00\xed\x95\x53\x9b\xa9\x11\x59\x01\x93\xee\x32\x8a\x92\x4e\xf2\x1e\xc3\x68\x91\xf6\x63\xf3\x60\x08\x2b\x77\x1e\xcd\x33\xac\xff\x95\xc3\xc1\xde\xdc\x44\xc1\xc9\x62\x5d\x48\x25\x13\x09\x9d\x72\x14\xb4\x6e\xeb\x2c\x17\xf3\xb2\xac\xae\x44\x89\x67\x67\x2f\x5f\x1c\x27\x01\x24\x7f\xa2\x58\xd8\xf4\x97\x49\xc5\xe3\x00\x0d\x92\xc5\xda\x9e\x9c\xfc\xfb\x54\x55\x38\x4b\x06\xaa\x23\x77\x96\x08\xb2\x98\xe0\x4c\x95\xb7\xc4\xb5\x08\x06\xc9\x7c\xce\xe3\x49\xcd\x93\x10\x3d\x37\xd7\xd9\x34\x4c\xc5\x34\xb9\x1e\xaa\x04\x4f\x16\x1b\x39\xb9\x88\x31\x9f\x7a\x98\xb5\xd8\x68\x54\x95\xb5\x8e\xac\x4a\xe4\xf9\xcc\xf1\x4b\x9a\x26\x29\x05\x11\xd3\x2f\x29\xb8\x37\xe5\x74\xf5\xf3\xc9\x6f\x98\xe9\xde\x58\x28\xb4\x8a\x6f\xe6\x6f\x78\x96\x8b\x4a\x44\x63\x80\x0c\xc8\x52\x83\x91\x22\x10\x9f\xb0\xe3\xd5\x22\xbc\x4a\x72\x71\xc8\x4e\x62\xd4\x24\x88\xad\x11\x4e\x53\x72\xc4\x2d\x71\x9d\x8b\x18\x42\xfc\x88\xf8\x2a\x4c\x93\x18\xd2\x73\x41\xb6\x77\x2f\x8a\x30\xc6\x37\xc5\x8b\x7a\xa4\x3b\x7d\x2b\xf8\xe4\x11\x5b\xe8\xf0\x40\x2d\x26\xa1\x63\x72\x54\x17\x0c\xe6\xc8\x03\x72\xe4\xd1\x8a\xaf\xe1\xf2\x0e\xa9\xc2\x28\x50\x9c\xe2\xbc\x53\x48\xcc\x0e\x3c\x6d\x1c\x25\xc1\x65\xc6\x78\x10\x48\xf1\x5e\x52\x7d\x26\x82\x65\x1a\xe6\x6b\x96\x0a\x9e\x59\xd1\xd4\xee\x40\x5d\x79\xc2\x16\x80\x3c\x89\xa7\xd6\xed\x26\x41\x58\x39\x5b\x06\x81\x10\x13\xf7\x86\x06\x9f\x46\x69\x32\xbf\x17\xf1\xe9\x1d\x57\x45\x83\x00\xf2\x2b\x89\x50\x52\xe1\x4e\x1b\xa4\x82\x24\x9a\x88\x94\x04\xb9\x30\x0e\x92\x34\x15\x90\x55\x9a\xf2\x97\xb9\x34\x6a\xd1\x60\x81\x54\x21\x1e\x9b\xe0\x13\x79\x07\xc3\x61\x83\x3a\x51\x51\x64\xd9\x86\xc8\xa1\xd1\x41\x2a\x30\xd8\x9c\x94\x83\xec\xeb\x68\x71\xb5\x5e\x43\x46\xda\x2f\x0c\xfe\xcc\xd8\x7b\x9e\x86\xc9\x32\xc3\x3f\x05\x3c\x3c\xaa\xfb\x6b\x11\x4a\x49\x15\x8a\x20\x5a\x70\xa1\x44\x45\x0e\xfc\x56\x23\xd9\x2c\x53\xec\x09\x4f\x61\x2f\xc3\xef\xf5\x9b\x60\x8d\x93\xc9\x1a\x73\xb0\xd2\x35\x1c\x0a\x6a\x73\x1e\xa2\x82\xa2\x5e\xbe\xb4\xdb\x64\x80\x50\xcc\x0b\xc1\x44\x4c\xd9\x11\xab\x49\xc6\xd9\x90\x88\x8b\xa4\xf8\x52\x67\x47\x3f\x02\x2f\x85\x0c\xb4\x5a\xc9\xce\x7e\xc2\xc2\x43\x5d\x51\x89\x65\x84\xaa\x23\xa7\xf6\xe7\xcf\xcc\x2a\x97\xa7\x30\x2a\xb7\x55\x21\x6a\xb9\x50\xfa\x17\xe9\x05\xf2\x8f\x65\x26\x52\x2f\xa3\x80\x83\x56\x1e\x34\xa5\x51\xc9\x30\xb4\x9a\xa4\xaf\x0f\x82\xd2\x48\xe4\xfc\x52\xb0\x30\x47\x50\x93\x90\x88\x2b\x8c\xe1\x61\x17\x14\x28\x3c\x63\x59\xbe\x9c\x4e\xd5\x1d\x54\xd2\x5b\x26\x19\x5b\x7c\xa9\xc4\x4e\x4c\xe8\x0a\xc3\x22\x81\xc2\x93\x98\xf5\x0e\x6d\xc4\xab\x9b\xb1\x17\x06\x49\xec\x1d\xca\x51\xd1\xdc\x5b\xb2\xa4\xc1\x1c\xad\xec\x85\xc8\x8f\x79\xce\xdf\xa5\x11\xdd\x18\xb7\xc2\x39\xbf\x10\xd9\x96\xac\xdb\x3c\xe8\x7a\x75\xc8\xdd\xf1\x45\x65\x57\xcd\x49\x13\x61\x41\x85\xa2\x86\xba\xcb\xe9\x4d\x8a\x64\xa2\xb0\xff\x10\xff\x84\xb1\x29\x18\x74\x45\x95\x55\x54\x91\x1c\xdb\xb4\x45\xba\x92\xf7\x3c\xcd\x6a\x37\xeb\x44\x1a\xec\x6f\x1e\xb4\xf5\x0e\x11\xc6\x97\xba\x49\x04\x4b\xf7\x09\xbb\x51\x8d\x06\x4b\x98\x84\xe1\xc5\xad\x24\x0e\xa2\x30\xb8\x2c\x67\x86\x63\x6a\x56\x70\x16\x28\x51\x1b\x33\xdc\x44\x49\x26\x28\xcf\xe7\x53\x23\x15\xc4\x85\x43\x3f\xce\xf2\x74\x19\xe4\x20\x40\x4a\xd1\x83\xd4\x20\x52\xe2\x4a\x45\x90\x98\x53\xfe\x84\xe2\x38\x66\x5a\xf5\x0c\xc1\x29\x31\xc6\xd1\x62\x39\x8e\xc2\x40\xb2\xee\xc9\xd6\x0a\xd2\x75\xce\xc5\x7c\xac\xb6\xb9\x89\xc2\x89\x72\xc7\xc6\x07\x7b\xf3\xea\x67\x3d\xf7\x85\x99\x35\x92\x72\x1b\x12\x9c\x40\x75\x82\xbf\x96\x5b\xa9\xad\x5c\x14\x24\x1d\x89\xd4\x4a\xc8\xa8\x5e\xb9\xf4\x9b\x15\x94\xce\x94\xc8\x55\x21\x3d\xf5\x26\x70\xc0\x9b\xf8\xaf\x66\xb6\x15\xe3\xb9\x65\xf2\x92\x28\xbe\x0a\x01\xb2\xe1\x9d\x90\x60\xa5\x7c\x4b\x45\xf6\x87\x61\x85\x64\x5c\x0e\x92\xde\x26\x3c\xa8\xa3\xda\x8c\xee\x0b\xeb\xe1\x54\xcc\xa2\xe9\x28\xa2\x46\x92\xe4\x73\x0b\xd7\x10\x2b\x51\x13\xd7\x86\xa9\x06\x51\x12\x8b\xf2\x26\x52\x3b\xc3\xe9\xb1\x66\xa6\xdc\xb0\x27\xea\xde\x28\x4e\xe9\x25\x9e\x90\x80\x91\x0f\xed\x85\xd3\xe3\xd6\x81\x9c\x55\x82\x79\x6b\x84\x05\x8a\xb0\x11\x01\xd7\x41\x08\x21\x4f\x29\xde\x51\x6a\xd6\xef\x7f\x1b\x66\x2a\xef\x71\x89\x3d\x53\x09\xa7\x62\x29\x65\x71\x6b\xc3\x7a\xc2\xb7\x8a\x45\x05\xeb\xc5\x70\x5a\x31\x11\x33\xdb\x30\xa3\x68\xe5\x70\x36\x83\x3e\xfd\x8e\xd3\xdc\x04\xf2\x16\xb1\x6e\x9c\xe4\x33\x5d\x97\x98\x92\x4b\x25\x5b\x38\x95\xc6\x8d\x9e\x0e\x95\xc8\x84\x99\x64\xd5\xd8\x54\xd6\xc8\x16\x52\x6d\xac\xb2\x1f\x7e\x70\xb1\xba\x19\xad\x7a\xaf\xd0\xc3\xa9\x8e\xbc\xca\x73\x3b\xe1\x8e\x8d\x8f\xca\x47\x59\x9d\x74\x1a\x35\x09\x98\x4c\x3d\xa4\x77\xb8\x4d\xbc\xc9\x68\x71\x0d\xf4\x0d\xd8\xc8\x93\xd3\xd2\xcb\xae\x83\x0b\xef\xdc\xb4\xb3\xd2\x93\xd3\x7b\x3f\xf3\x1a\xa6\x8c\x06\x01\x09\xcf\xef\x74\x2e\xbd\x4d\x56\x83\x24\xfa\x7e\x27\x13\x8a\xce\xea\x4d\xde\xd1\xa1\x23\x0c\x8c\x10\x28\x40\x7e\xf6\x92\x2b\x91\x4e\xa3\x64\xe5\xb1\x71\xa8\x22\x89\x63\xce\x73\x54\x8a\xe3\x83\x24\xbd\x5b\x82\x66\x5c\x05\x78\x9f\xf1\x8c\x8d\x85\x88\xd9\x9c\x4f\xa0\xf2\x3c\x21\x02\xa5\x90\xf6\xf4\xe0\xae\xd2\x19\xe3\x4b\x3c\x99\xbb\x48\x40\x19\xbe\x4b\x30\x95\x11\x37\xcc\x74\xf6\xa4\x95\x60\x91\xe0\x95\xe0\xc8\xe6\x06\x92\x3c\xf3\x2c\xa7\xe2\x07\x3a\x36\x34\x81\x85\x67\xb3\x8c\x58\x99\x9a\xa4\x9c\x23\xde\xf9\xf0\x9d\x19\xa2\x4c\x13\x78\x39\x7a\x29\x43\x01\xd7\xa5\x61\xa0\x4e\x28\x5a\xe3\x23\x1c\x8f\xd7\x7a\xf2\xf2\x7a\x96\x86\x71\x0e\x1c\xd6\x32\x3d\x0c\x38\x65\x8b\x0f\xd2\xad\x08\xa2\x3e\x42\x54\xfc\x8d\x07\xa4\x5c\x2c\xc9\x23\xe4\xcf\xbb\x1c\x8c\x84\x04\xcb\x88\xe8\x86\x56\x9a\xa3\x24\x8b\xfc\x93\xc6\x81\xce\x9c\x4d\x9f\xd5\x22\xeb\xfd\x25\x31\x86\x44\xa9\xb6\x90\x5c\x6a\xd5\xde\xbd\x5b\x12\xf1\x5a\xfb\x26\x4d\x56\x0d\x1a\x5b\xc3\xe9\xd8\x62\xd5\x72\xb6\x47\x72\xce\x4f\x4d\xee\x5d\x98\xcc\x11\xb5\xd4\xe5\x7a\xd4\x47\xec\xe1\x43\x1b\xda\x26\x49\xc5\xa5\xfe\xbb\xca\x29\x6a\x19\xe4\x6a\x7e\xc5\x52\x00\x11\xfc\xeb\x2c\x87\xc5\xd9\x60\x4f\xfe\x93\x57\xe7\x2b\x24\x26\x9c\x87\x2b\x33\x11\xa9\x6d\x90\x9a\x68\xdd\xc1\xe1\x49\x33\xbe\x8d\x68\xb9\xab\xd4\x84\x0d\x6b\x0a\x2d\x0d\x1b\x1d\x0d\x17\x07\xd5\x42\xd4\x06\x72\xbc\x4d\x84\xa2\x01\x57\x4a\x17\x0a\x37\x77\x15\xa3\x4a\x93\xbf\x4d\x90\xc2\xf5\x87\x33\xbd\x92\x08\xe0\xcb\x66\x4a\x80\xcf\x95\x84\x50\x2d\x65\x15\xd7\xf5\xee\x72\x56\x19\x13\x9b\xc1\x7e\x8b\xac\x95\x26\xab\x2d\xb5\xe6\xb7\x4b\x5a\x25\x7c\xdf\x41\xd6\xaa\x19\xc4\x1b\xcc\x6b\x41\x4b\x61\xde\x41\xbd\xe5\x2c\xc1\x4a\x8b\x50\x58\x85\xca\x27\x83\x3f\x56\x2a\xab\x26\xfc\x9b\x64\xb2\x12\xde\x6e\x95\xca\x6a\x4a\x2c\xc3\xa6\x96\x60\x26\x7b\x77\xc5\x32\x1a\x87\x2a\xdc\x88\x3a\x90\xdb\xea\x95\xb9\xc2\x5c\xdb\xb7\x4f\xd3\x94\xcf\xc5\xff\x31\x0b\xb8\xa9\x6d\xfb\x36\x82\x7c\x3e\x93\x94\x4f\xb5\xc5\x35\xf8\x39\x4f\x79\x60\xf2\x88\x3a\x66\x35\x72\xc1\x39\x83\x64\x6a\x60\x67\xb6\x66\x93\x90\x47\xc9\x45\xd1\x90\x03\x52\xd4\x4b\x41\x2c\xf7\xe8\x15\xc1\x06\xd3\xfc\x11\x5b\xb1\x88\xaf\x45\xda\x62\xec\x2c\xd1\x86\x17\x0c\xde\xf4\x31\xf7\x81\xf0\xa2\x08\xd3\x16\x50\x46\xcf\x00\xd5\xd3\xcd\x1f\xf5\x80\x34\x04\x89\x20\x08\x23\x8f\x3b\x3b\x61\x53\x1e\x84\x51\x28\x05\x40\x3c\x32\x0a\x2d\xf5\x18\x92\x94\x34\x87\xa6\x0e\x7d\x91\x7f\x2f\xe3\x82\xae\xf8\x84\x85\x73\x7e\x81\x4e\x08\x5a\xe0\x86\x8e\xd1\xfc\x92\x65\xe1\x45\x0c\x9a\x31\x78\x32\x20\x1b\x2c\x93\x37\xb4\xe5\x04\xef\xd7\x57\x06\xd2\x4e\x03\xc9\x69\x2d\x33\xbe\xa8\xa9\x11\x17\x58\xa4\x46\xc1\xdf\x5c\xe3\x1e\x7c\x66\x58\x70\x78\x0e\xd3\x95\xf0\x08\xb1\xa5\x95\x65\x1a\xb9\xf9\x43\x65\x41\x9e\xb0\x28\xe1\x9a\xb4\x70\x07\x58\x8d\x40\x04\x20\x7d\xa9\x56\x97\x6b\x01\x47\x7d\x51\xe3\xc7\xe6\x0c\x12\x78\xe8\x80\xe1\xae\x3c\x33\x82\x09\xdb\x9c\x93\x46\xdc\x90\xe3\x69\xd8\x1d\x5a\x07\x98\xaa\xf4\x49\x9e\x46\xf4\xbb\x3e\xa9\x26\xe1\x95\x5d\x0e\x7f\xeb\x8f\x72\x92\x47\x12\xb4\x39\xd8\xb4\xfa\xd7\x9e\xdc\xe7\xcf\xa0\xa4\xa6\x3a\x21\xcc\xe4\x93\x36\x7b\xd4\x07\x26\x26\x78\x4d\x4b\x5f\x48\x45\x3f\x98\xf1\x38\x16\x91\xf9\x6c\x31\xe9\x67\x98\x78\x96\x6a\x5a\xe9\xea\x42\x8d\x75\x07\x49\x16\xdf\x4c\x62\xb2\xc4\xfb\x64\x63\x8e\x0c\x54\xb2\x55\x08\xaf\x35\xa2\x05\x59\x8d\x63\x6e\x6c\x80\x40\x2b\xee\x85\x8b\xa0\x19\xc6\x61\xde\x4c\x2e\xbd\x43\xf3\x2a\xff\x01\x5e\xf9\x95\xe8\x96\x2d\x12\xc9\x77\xf8\x14\xdc\x5c\x21\xcd\x0e\xdc\xf0\xe6\x4c\x35\x07\x5e\x00\xf6\x6c\xd3\x30\x0e\xb3\x99\x7a\xbf\x87\xf9\xcb\xea\x8a\x20\x4f\xe2\x69\xf2\xa9\x56\x7f\xea\x38\x9a\x3c\xb5\x06\xa4\xb7\x64\x18\x4f\x93\xaf\x1c\x95\x03\x63\xd3\xd0\x24\xbf\x9f\x25\x2b\xa4\x4d\xf8\x02\x49\x11\xf9\x5c\x34\x54\x93\x98\xa5\x62\x1c\xca\x5b\xec\x32\xd5\x0f\x2d\x98\x23\x38\xa5\x5b\xa9\x01\x16\xd0\x63\x08\x1b\x8b\x28\x59\x39\x08\x30\xa4\xd1\x02\x4e\xde\x52\xe6\xb0\x47\xcc\x9b\x46\xe2\x5a\x9b\x24\x55\x91\x4b\x6b\x91\xa4\xb9\xdf\x4a\xe2\xb9\x36\xb8\x44\x52\x55\xeb\x8e\xe6\x0d\xb2\xac\xee\xc0\x49\xe2\x17\x09\x9f\x54\xe3\x9a\xde\x51\x14\x6e\xc1\xc5\x33\x12\xad\x28\xb9\xa8\x79\xef\x62\xb4\x6c\x54\xfd\x01\x2d\x02\x62\x0e\xbd\x06\x43\x4a\xaa\x00\xea\xbe\xb2\xc1\x53\x7d\xc6\x02\x78\xec\x93\xe7\x59\x8a\x69\x8e\xc3\xac\xc1\x4e\xd8\xc5\x52\x64\xfa\x79\xf4\x24\x87\x5c\x50\xb1\xa7\xed\x8a\x30\x97\xf8\x02\x8e\xbc\x2c\x17\x31\xe4\x23\x90\x77\xf2\x13\x6f\x4e\xf6\x47\xca\x86\x12\x5f\x13\xdd\xe4\x4f\x33\x91\x0a\x75\xdc\x2c\xd2\x64\xcc\xc7\x11\xe4\x07\xcc\x71\xd5\xb2\x85\xe0\x97\xe6\x81\x28\x4f\x60\x79\x91\x47\x66\x77\xda\x69\x05\x11\xa5\xbc\x8f\x71\xd7\x32\x5c\x01\xcc\x05\x7d\x33\x60\x59\xef\x53\x59\xf2\xd9\xc4\x3e\xc4\x8a\xbd\x74\x4a\x71\x95\xbf\x8a\x7c\x3e\x15\xe8\xe7\x06\x20\xe0\xc2\x60\x75\x45\x9c\xb0\x45\x19\x8f\xc8\xda\x66\x91\x64\x39\xc1\x56\xa9\xec\xff\x26\x19\xcf\xa1\xe1\x36\x5e\x83\xf1\xf4\xe2\xea\x90\x9d\xff\x8d\x7a\x7a\x93\xa4\xf9\xe1\xe6\xbe\x3b\x5f\x3e\x7e\x69\xd8\xc4\x0d\xe7\xc1\xf9\xe6\xfa\x1f\x5d\x21\x58\xd1\xe3\x9c\xaf\x5d\x6a\xbc\x7d\x59\x36\x2f\xf6\x29\xe4\xc5\x73\x64\x19\x60\x38\x96\xdd\xfb\xdd\x58\x78\x89\x41\x96\x29\x01\x5f\xed\x2e\x44\xde\x0b\x02\xb1\xc8\x5f\xf0\xf8\x62\x29\x4f\x8a\x9a\xae\x17\xa9\x22\x63\xaf\x05\x13\xb4\x97\xc3\xe5\xae\x5e\x83\x9d\x5b\xd9\x9b\xb9\x0b\xf9\x90\x69\x88\x96\x25\xf0\x34\x49\x05\x9a\xb5\x0d\x92\x28\x49\x0f\x0b\x47\xb0\x1c\xe1\xc8\xad\x52\xab\x5b\xcd\x8d\x55\xdc\xc6\xe6\x7d\xb7\x8a\xd3\x1c\x95\x77\x1b\x9b\x0e\xcc\x67\xa7\xd9\x34\x41\x0b\xac\xea\xd1\xe2\xb7\x52\x83\x11\x9f\x87\xd1\x7a\x53\x13\xfc\x5a\x98\x5b\x26\xde\xbd\x7d\x71\x68\xd6\xea\xdd\xdb\x17\x35\x6f\xcb\xab\x5b\xd7\x8f\x2f\x1f\xf5\x1f\xca\xec\xcc\xda\x7f\x2e\xd1\xbe\xcb\x44\xca\xe0\xd9\x94\x14\xaa\xf0\x20\x2a\x19\x61\x0e\x46\xbf\x46\xac\x82\x6c\xfd\xa9\x16\x4d\x37\x13\xf4\x40\x42\x18\x20\xc8\x4d\xfc\x46\x3f\xbb\x3a\xfb\x27\xc9\x48\xc8\xbd\x95\x9a\x71\x94\x25\xd8\xf8\x44\x5d\x90\x94\x3e\x7f\x66\xc5\xb2\x16\x72\xe2\x57\xc9\x44\xd4\x0b\x87\x4c\x59\xd4\xb2\x2a\xb7\x52\x31\x4f\xae\xc4\x60\x16\x46\x88\x4d\xab\x9a\x61\x59\x84\x02\x35\xbd\x6f\xe4\x0f\x83\x8a\xa9\x16\x18\x04\xe3\xf7\xe7\x07\xd6\x96\xb5\x81\xc7\x28\x9b\xa4\x17\x57\x45\x8c\x16\x58\x20\xd9\x00\x80\x59\x8d\x3c\x2b\x86\x69\x9a\xa4\x35\x4f\x81\x0c\xb0\x9a\x36\xe6\x15\x39\x5b\x2e\x5a\x5e\xdd\x20\xb8\x9a\xfd\xdb\x9c\x84\x38\xba\x19\xd2\x21\xfc\xff\xa5\xa0\x17\x53\x02\xd6\xbb\x13\xba\x07\xd8\x04\xa4\xfc\x05\xe8\xb4\xcc\xd2\x40\x0d\x49\x5e\x3b\x04\x39\x24\x91\x71\x16\x1a\x9a\x6a\xb7\x80\x1b\xd9\xe9\x0c\x34\x53\x05\xfa\x03\x47\x58\x11\x4d\xe9\x00\x7c\xea\x5a\xd0\x2f\x72\x42\x2f\x49\x46\xef\x79\xb4\x74\x8c\xbc\xe5\x57\x79\x13\x92\x20\xd4\x35\xa1\xe0\x2e\x6d\x7f\x3a\x97\xf5\x3f\x3e\x7d\xe0\x18\x57\x59\xa0\x9f\xda\x16\x1f\xc5\x61\x81\xf9\x7e\x61\xa7\x18\xed\x50\xd5\x46\x51\x32\x3d\xc9\x71\x02\x17\x1c\xef\x53\x3c\x4a\x05\x9f\xac\xd9\x55\x98\x85\xe3\x88\xec\xb8\x5c\xc9\x8d\xc6\x31\x13\x7c\x22\x52\x6d\x97\xe9\xf9\xdd\x85\x94\x4d\x95\x8d\x50\x78\x45\xd6\x07\x15\xc6\xad\x35\x7d\xdb\x32\xd6\x21\xea\x89\x56\x22\xd7\x83\x3f\xbc\x06\xeb\xee\xa0\xbd\x2d\xf6\x47\x3d\x41\x0d\xfc\xcb\x6b\xb0\x9d\x7d\x53\x25\xc2\x3c\xf3\x35\xea\x9c\xde\xe0\x9a\x8c\x3c\x9c\xb7\xd0\xd3\x1c\xcc\x66\x92\x85\x5d\x91\x60\x37\xb5\x11\x00\x54\x55\x53\x51\x76\x77\x47\x45\xf6\xae\xbe\x7c\xd2\x75\x35\xc2\x55\x65\xe7\xa2\xa7\x6d\x71\x02\xb0\x2b\x1b\xe2\xb5\xb6\xe6\x4d\xc2\x2b\x44\xb4\xae\x4d\xa2\x7f\x90\x65\xe0\x1c\x75\xc4\x94\x70\xe4\xa9\x1c\xcc\x87\x8c\x8f\x21\x45\xad\x78\x6a\x74\x56\x1e\xdd\x15\x0e\x59\x9c\xc4\xce\x07\x79\x73\x68\xa2\x18\x0b\x8d\x49\x47\x6b\xd5\xc8\x93\xc5\x21\xf3\xdb\xff\x6e\x97\x49\x84\x1e\xb2\x1d\xa7\x0c\x90\x79\xc8\x0e\xdc\x9a\x88\xb8\x43\xb6\xef\x16\xcf\xc3\xb8\xa9\x3e\x75\x0a\x9f\xf8\x75\x73\x43\xab\x71\x72\xdd\xcc\x66\x7c\x92\xac\x0e\x59\x9b\xb5\x59\x67\x71\x6d\xb4\x75\x37\x8b\x0f\xec\x09\xf3\x5c\x50\xe9\x44\xa4\x87\xf7\x05\xc1\xb2\x24\x0a\x27\x4f\x89\xcd\xc9\x2d\x06\xca\x5d\xcb\x6e\xf1\x15\x64\x8f\xd4\x0a\x0b\xfb\xb4\x6d\xb0\x2c\x61\xb1\xfb\x5d\x79\x61\xc2\xa6\xa1\x2c\xc7\x2d\xed\x59\x40\xc5\x77\xa0\x10\x46\x75\x37\x12\x88\x4d\x04\x72\xd1\x9f\xda\x1a\x4d\x8f\x92\x1f\x37\x49\x08\xc7\x2a\x4d\x11\x4f\xdc\x6a\x6a\x5d\x24\xc6\x9c\x7d\xee\x62\x57\xe2\x57\x0b\x60\xcd\x00\x25\xad\xaf\x5b\x28\xc6\xbc\x1b\xdb\x97\x04\xbd\x72\x7b\x29\x87\x35\x33\x90\xdc\x24\x2f\xaa\xf8\x38\x25\x29\x6d\xd3\x10\x8d\xa4\x46\xb8\x36\xfb\x11\x54\x70\x13\x94\x17\x10\x23\x75\xe2\xd7\x72\xfd\x48\xca\xba\xd3\xfa\x61\xdd\x56\x26\xf2\x5e\x4e\x59\x46\x6b\x5e\x9a\x44\xe0\x76\x8d\x1f\x8b\x55\x37\x2f\xf5\x9c\xa7\x17\x61\xdc\x84\xbd\xdb\xdc\x2e\x4e\x9a\xbe\xa6\xb8\x98\xa5\xcf\x28\x20\x1f\xb2\x45\x02\xba\xdb\xa7\x85\x6e\x73\x71\x9d\x0f\x90\x4e\xc8\xd5\x91\x77\xa6\x9e\x53\x85\x4f\x26\x43\x79\x5f\x7d\x41\x37\xef\x9a\x07\x12\xa8\xd7\x70\xe4\x27\x25\x42\xba\xb2\xab\x45\xcb\x36\x72\x11\x72\xdd\x39\x6a\xe8\xcc\x3f\x2a\xaa\xd4\x36\x61\x1b\x6b\x78\x64\xec\x08\x07\x7e\x12\x47\x78\x3d\xb3\xb4\x1d\xc5\xcb\x2c\x55\xdd\xc8\x7a\x37\xed\x2b\x60\xae\x87\xcc\xaf\xe0\x92\xe0\x32\xec\x00\x77\x96\x3d\x4b\x03\x85\xab\x65\x1a\xdd\x50\x4f\xf0\x79\x24\xb2\x4c\x56\x4e\x97\xa2\x70\x56\xd8\xe8\xc3\xe6\x96\x74\x26\x4f\x59\xa7\x86\x6e\x77\xa7\x97\x8c\x4b\xb1\x46\xe7\x87\xff\x3b\x8f\x19\x28\x90\x3c\x57\x13\x7b\x2e\xd6\x2f\xf9\xc2\x7e\xdc\x50\x9f\x94\xf6\x4e\x89\x9f\x83\x24\xc6\x5c\x95\x49\xfc\x5c\xac\x1f\xa3\xaa\x06\xd3\x9d\xa2\x87\xa8\xfc\xf2\xfe\xec\xb9\x58\x67\x79\x9a\x5c\x0a\x75\xeb\xe2\x59\x96\x04\x21\xcf\x31\x55\xbb\xab\x73\xb7\xd4\xeb\x78\x09\x10\xf0\x6c\x71\xc8\xce\xff\xeb\x6c\xf8\xf6\xe5\x47\xc6\x25\xf6\xc8\xd3\x1a\xe6\x7a\x95\xb7\x7e\x2b\x79\x0b\x54\x29\xf2\x0b\x5d\x58\xc3\x50\xef\xe3\x61\xc6\xf4\xfa\x5a\x22\xb2\x9e\x7f\x85\x72\xdd\x04\xf5\x33\x4f\x05\x57\x39\x3e\xfe\x2c\x52\x41\xe1\xe5\x1c\xe6\xea\x68\xda\x4d\x63\xed\xdb\x21\xbc\x54\x7b\xe1\x44\x6b\x16\xf0\x45\x8e\x5e\xbc\x6a\x6c\x0a\xd1\xd3\xc4\x00\x57\xdf\x68\xcf\x1b\x3d\xb9\xd5\x81\x6c\xa5\xd6\x30\xc3\xb8\x79\x26\x91\x39\x20\x53\x2b\x6f\xc3\x94\x8d\x81\x98\x94\x62\x36\x6b\xb0\x8c\x5f\xc9\x15\x93\xe0\xb2\x04\x95\xc2\x48\x7a\x6c\x19\xc3\x23\x25\x78\x1c\x53\xce\x66\x79\x9b\x74\x58\x61\x03\x1f\x70\x28\x22\xd9\x44\x0f\x5c\x8d\xe7\x93\xce\x30\xc3\xd8\xb9\x07\xf6\xcc\xc9\x32\x37\x9c\x73\x24\x4b\x5e\x2f\x73\x9b\x49\x7d\x6c\xe8\x06\x97\x62\x3d\x49\x56\xb1\xa9\xff\x5c\xac\x8f\x93\x55\xbc\xb9\xfa\x22\x25\x06\xa2\xeb\xbf\x91\x25\x9b\x1b\x2c\x17\x4e\xed\x77\x8b\x0d\x55\xe5\x39\x71\x12\x2f\xec\xc1\x9f\xa9\x22\xa7\xc9\x03\xc6\xf0\x92\x03\xfb\x8c\xd1\x85\x4e\xf9\x5f\x5d\x8a\x35\x9b\xf3\x05\x08\x45\x8f\xb7\xac\x75\x7e\xc9\x17\xa4\xc6\xac\xdc\xb9\x8a\x7f\xab\x16\xb2\xc3\x30\xbe\xc8\xaa\xdb\xf4\xe9\xab\xd5\x4a\x8f\x46\xca\xcc\x87\xec\x38\xcc\x20\x68\x23\x8f\xd7\xac\x17\xe5\x3f\xa7\x2c\x15\x11\xec\x9a\xf9\x32\xbe\x50\x5e\xc3\x8f\x59\x90\xa7\x51\x93\x47\xf9\x21\xeb\x41\x0a\x5b\x36\xc8\xd3\xe8\x49\x2f\xca\xd9\x5c\xf0\x38\xc3\xb6\x54\x57\xca\xd1\x4e\x5d\xb8\xa9\x54\xd7\x05\x96\xe9\x54\x46\x86\x5b\x59\x5b\xe3\x89\xcb\xb2\x97\x92\x8d\x2a\x27\x68\x77\x6e\x27\x53\x38\x39\x1a\xec\x74\x16\x4e\xf3\xe6\x49\x9c\x89\x94\x9e\x3d\xa7\x10\x69\x64\x06\x0f\xaf\x4a\xed\xa0\x5c\x98\x20\x23\x35\x78\xf4\xb4\x34\x1c\x90\x84\x21\xe3\xbe\x5c\x33\x62\x75\x00\x69\x0c\x7a\x75\x6d\x83\x37\x4b\xc0\xba\xcd\x1e\x66\x26\x7b\xc7\xce\xd1\xff\xeb\x88\x22\xdb\x56\x8e\x75\x96\xcc\xc5\x96\x00\x23\xe3\x28\xd2\x81\x2c\x9d\x67\xe5\x0c\x42\x1b\x8c\x79\x8a\x11\x56\x24\x78\xdd\x0c\xa1\x41\x5b\xf5\xdc\xc3\xde\x9f\xc9\x41\xcb\xf3\x26\x6b\x31\x3d\x1b\x7c\xbf\xd1\xdd\x65\xa0\xab\x7d\x7f\x06\xe7\x52\x86\xb6\x43\x12\x94\x0b\x9e\xfa\xce\x0a\x53\x94\x9f\xe5\x11\x80\x41\x17\xac\xac\xbe\xd6\x0c\x4f\xe1\xaa\x9d\x31\x3e\x4e\xae\x44\x83\x5c\x99\xe0\xae\xb0\xe0\x17\x82\x2d\x17\x5b\xf0\x53\xee\xf0\x02\x74\x59\x7e\x1b\x74\x8d\x3f\x49\x91\xcd\x37\xd1\x32\xdb\x7a\x19\xc6\xcb\x6c\xeb\x2f\x22\x4d\x14\x1a\x33\x88\xa0\x52\x5a\x55\x68\x82\x34\x72\x63\x43\xaa\x09\x9f\x09\x5f\xbf\x7e\x6a\x20\x34\xd3\x2d\xb4\x9b\x24\x3a\x98\xa2\x3b\x17\xb9\x83\x64\x35\x00\x22\xab\xfe\x25\x49\xe6\x95\x14\x01\x5b\x6b\x80\x41\x54\x32\x70\x6b\x83\xf9\x51\xbf\x03\x49\x70\x92\xd8\xe4\x17\xe3\xda\x45\xcd\x60\x32\x4f\x06\x95\x95\x11\x8c\x01\x6b\x35\x76\x46\x39\x00\x6f\xd1\x4a\x64\x43\x1f\xef\x71\x8f\x94\x87\xf6\xfe\x0e\x43\x7b\x5f\x59\x19\xc1\x18\xb0\x9b\x86\xf6\x5e\xed\xa3\x8a\xb1\x0d\x21\x24\xcb\xd6\x44\x71\xb4\xc5\x22\x52\xe1\x54\xe4\x81\xc0\x27\x08\x4f\xf1\xe2\x30\x23\x4b\x04\x32\x9e\xe6\x6b\x16\x2f\xe7\x22\x0d\x03\xd8\xe8\x70\x7c\xc2\xfe\xd6\x0f\xce\x96\xf4\xe0\x30\x23\xd3\xd1\x73\xe8\xe7\x4e\xc3\x03\x51\xc9\x1a\xa2\x36\xbe\x9d\x88\x5b\xc7\x49\x75\xbf\x7a\x98\xf8\x18\x70\xcb\x76\x02\xc6\x28\x65\x03\x88\xe8\x44\x31\x5a\x80\xb3\xf4\x4f\x59\xcd\xfb\xe5\xba\xbd\xef\x35\x18\xbf\xe4\xec\xd7\x67\xf5\x16\xc3\x84\xfd\xab\x30\x13\x08\xc7\x6d\x2e\x8f\x3b\x1b\x84\xf7\xcb\xf5\xde\xd4\x2b\x8c\x50\x57\x87\xd7\xa3\xbe\x6e\x5c\x39\x4e\x8c\x67\x16\x24\x13\x0c\xa7\x04\x2a\x50\xc9\x52\x26\x3c\xe7\xb7\xf1\x65\x6d\xa6\x3c\x54\x00\x8e\x98\xb7\xcc\xa7\xcd\xfd\xc2\x39\x72\x2a\x72\x93\xf7\x1c\x3c\x0a\x73\x8e\x73\x01\x1a\xe6\x2c\x12\x1c\xda\x8b\x2c\xe0\x0b\xc1\x92\x54\x6e\xfe\x42\x6f\xb2\x11\xcc\x68\x88\x95\xaa\xb6\xbc\xdd\x91\xac\xdf\x7c\x8f\x81\x03\x94\xc9\x78\x52\x35\x0d\xf9\xf1\xa5\xc8\xf9\xfb\x6a\x2e\xa2\x18\x98\x52\x34\xf3\x08\xc5\x0e\xb0\x2e\x97\x62\x99\xb3\x21\x68\x0a\x2d\xfc\x47\xfa\xf9\x98\x0d\x4f\x07\x10\xfc\x28\xbc\xa6\xad\x8c\x61\xad\x5b\xaa\x5e\x6f\x32\x61\x7e\x67\x5f\x21\x7b\x19\xc3\xa9\x21\x26\x56\x40\x56\x9e\x49\x41\xfe\x9a\x22\x71\x01\x0c\x3a\x70\x9b\x97\x62\xdd\x6a\xb1\x0f\x3c\xcc\xb5\xea\x48\xc9\x6e\x24\xd0\xc2\x39\x27\x04\x5b\x29\x03\x60\x75\x56\x67\x7c\x9d\x29\x70\xee\xbf\x1a\xec\x99\x15\x38\x3e\xae\x92\xf4\x92\xad\x44\x14\xc9\xdb\xc9\x22\xe2\x39\xc4\x18\xa6\x20\x2c\x16\xb8\x4a\x40\x6c\x21\x52\xac\xcf\xb5\x77\x25\x37\x49\x12\x20\xc0\x19\x07\x8f\xcb\xbf\x2e\xe5\x85\x25\x6b\xd5\x8b\x3b\x97\x9c\x31\x31\xe2\xd4\x9c\xe7\x60\x1a\x0f\xa2\xb2\x6c\x18\x66\x6c\x12\x66\x79\x18\x07\xb4\x7d\x81\xbe\x6a\x3c\xca\x4f\x60\x61\x59\x98\x21\x2c\x64\x87\xf5\x92\x10\x04\x64\xf5\x41\xa2\xe6\x88\x79\xb8\x80\xb7\x50\xb0\x22\x02\x1e\xc8\xbb\x5c\x06\x4f\x30\x48\xd3\x0d\xdb\x79\x78\x91\x26\x93\x25\x84\xef\x86\xe5\x26\x19\xd0\x89\xe4\xad\xe7\x99\x2e\xe1\xfd\x06\x23\x62\x35\x94\x88\x01\x81\xcd\xb0\x44\x5e\x55\x64\x01\x5f\xe6\x09\x86\x3f\x31\xd6\xbe\x6a\x4d\xca\x02\x1e\xa1\xe0\x16\x26\x95\x82\x99\x65\x42\x61\x55\xd8\xf1\xf0\x05\x4c\x8f\xee\x50\x3a\xc8\x1c\x60\x97\x47\x79\xd3\xb0\xa4\x24\xa6\x7d\x82\x81\x3d\x5e\x9f\xb2\x2b\x32\x2e\xe2\x00\x5c\xc3\x02\x72\xb4\x67\x6c\xb4\x73\x87\xac\x47\x16\x7b\xe1\x1c\xc3\xcf\xa5\xa1\x5c\xef\x86\x9c\x9a\x06\xdc\x28\xf4\x1c\x66\x52\xf4\x5f\x08\x92\xb3\xf2\x44\x76\xd5\x62\xa7\xb2\xf6\x32\x93\x14\x32\xe7\x6b\x29\x5e\xce\xf8\x62\xb1\x36\xd7\x57\x34\xf4\x00\x53\x5b\x5d\x65\x9a\x2e\xb3\x3c\xc5\xdb\x36\x53\x61\xf5\xc2\xdc\xcb\x58\x38\x5f\x24\x19\x3c\x6b\x00\x7e\x12\xe4\x2b\x7a\x14\x2d\x40\x22\xf9\x13\xd3\xe2\x65\x78\x4b\x96\xfb\x9d\x84\x9b\x15\x7c\x07\x8c\x84\xc1\x25\xec\x72\xb9\x99\x5c\x0c\xe1\x7e\x2d\xa3\xf8\x50\xe3\xd8\x29\x6e\x48\xa8\x24\xa7\x0a\x87\x28\x2f\x12\x10\x02\x1b\x28\xa0\x5e\x88\x9c\x71\xd5\x07\x0a\xde\xf6\x1c\xc9\x21\x47\x2d\x32\x6e\xa7\x38\xc9\x71\xbd\xc4\xa4\x05\xea\x85\x59\x9e\x2f\xb2\xc3\xad\xad\x20\x1d\x2f\x2f\x5a\x41\x32\xdf\xf2\xf7\x76\x76\xfc\x36\x2b\x13\x9c\x3e\x70\x90\xf2\x6e\x39\x7f\xde\x11\x5f\xbe\x14\x62\xc1\xf2\x94\x07\x97\xca\x34\x54\x5d\xf1\xe4\xa4\xe1\xac\xc8\x21\x14\x93\xf6\x28\x8a\x45\x20\xb2\x0c\x72\xae\x24\xa9\x39\x2c\x6f\x1a\x81\x09\x3f\x87\x42\x34\xb0\x45\xc5\x31\xf5\x65\x08\x61\x99\xba\x60\xee\x89\x76\xa6\x9c\x8d\xc3\x7c\xce\x17\x48\x4c\xc8\xfe\xc6\x61\xce\xd4\xfb\x4a\xc6\x20\xe6\x40\xb6\x48\xe2\x89\x65\xbe\xf5\x98\x3d\x8a\x12\x94\x19\x1e\x49\x9e\xb0\x10\x69\xbe\x56\xf3\xd4\xfb\xac\x8c\x4a\x75\xdd\x16\x13\x1d\xc4\xb9\x42\x5e\xd7\x1b\x6f\x2e\x26\x21\x47\x71\x46\xdd\xac\x70\x83\xd0\x50\xc2\x94\x8d\x00\x95\xe2\xaf\xcb\xf0\x8a\x47\xba\x4f\x36\x6c\x5d\xb4\xd8\x23\x89\xa8\x47\x15\x4d\x47\x7e\xcb\x16\xf6\xb1\x3f\x32\x7e\x05\x63\x24\x75\xab\x2b\x9d\xd8\x93\x90\xcb\x7b\x47\x2f\x15\x23\xf9\xb3\x9a\x04\x9e\x25\x11\x19\xb9\x2c\x52\x71\x05\x21\x10\x34\xbf\x9f\x32\x87\x3d\x03\xcb\x3f\x1e\x0e\x4e\x87\x67\x0c\x92\x98\xa3\x67\xd9\xa4\x05\x2e\x5f\x08\xee\x78\x38\x78\x7b\xea\x7e\x6e\xb8\x50\xb4\x28\x38\x01\xd1\x4a\xfb\x05\xa0\x5a\x07\x56\x9a\xee\xf6\x4b\xd0\xd6\x24\xcb\x92\xc8\x40\x03\xed\x59\x60\x2b\xad\x2e\x4f\x29\xf2\x3b\x20\x0a\x82\x48\xa0\xc0\x39\x80\x3b\x22\x04\x2e\xd4\x0a\xab\x88\xaf\xb1\xa7\x92\x4e\x4d\xfe\xd2\x0b\xec\xb0\x01\x46\x3c\x91\xf7\x70\x39\x1c\x11\xe7\xc7\xea\x70\x95\x87\x7d\x9e\x2c\xde\xa4\xc9\x82\x5f\xd8\x91\x10\x51\x77\x67\xc9\x04\x74\xc7\x42\x58\xc2\xb9\x2c\x0c\x7a\xaf\x06\x43\x6d\x6b\x42\xca\xf2\x78\x39\xaf\x79\xf8\xc5\xab\x37\x0a\x92\xa4\xe4\x79\xea\xa8\xb7\x43\x29\x18\x73\xee\xc0\x89\xca\x28\xc5\x16\xb8\x4e\x43\x4c\x26\xd4\xc8\x22\x2c\x15\x3c\x49\xb5\x20\x85\x5b\x41\x7d\xa0\xfd\x0c\x40\xdf\x90\x86\x31\x26\xce\x80\x43\x58\x83\xb2\xb3\xa7\x6c\xd0\x36\x38\x63\x48\x62\xa1\x76\xe6\x3c\x99\x84\xd3\x50\x49\x35\x38\x94\xac\x51\x08\x2f\x2a\x81\xd2\xac\x29\x54\x87\x1c\xb9\x1e\x38\x98\x8e\xd6\xe8\x08\x59\xd7\x35\x1f\xc7\xb8\xfd\x61\xee\xc8\x8e\x4d\x75\x98\x10\x10\x25\x11\x61\x64\x5f\x0a\x52\x31\x38\x3d\x69\x50\x98\x20\xfa\xaa\x26\xc6\xc1\x6b\x4d\x1d\x61\x8c\xa1\xc3\x25\xf8\x66\x3a\xf3\x31\x11\x46\xa4\xe8\x32\x11\x59\x90\x86\x63\x9c\xbd\x52\x20\x2b\x83\x6c\x0c\x9a\xa9\xc0\xa9\xbc\x24\xf2\xd3\xa3\x37\x83\xe6\x29\xe8\xd9\x47\xca\xc4\x41\x6e\xf1\x47\x2c\xc3\xd7\xe2\xea\x89\x29\x75\x0c\x09\xd0\xf2\x98\xd2\x8b\x2b\xcb\x36\x2c\xa9\x89\x5e\xaa\x07\xa3\x5a\x2d\x17\x0b\x91\x82\x61\x2f\x05\x34\x56\x03\x34\x32\xf4\xa5\x58\x07\x1c\x42\xc1\x91\x93\x81\x06\xd2\xdd\x61\x35\x4c\xdb\xe2\xfd\x87\x57\x07\x98\x07\xbb\xba\xe8\x93\x57\xa7\x33\xf4\xa6\x8e\x34\xb0\x52\x87\x73\xd0\x73\x74\x77\x30\x58\x6e\x9c\xab\x83\x64\xce\x2f\x45\xc6\xbc\x5f\xff\xc3\xd3\xb7\xb8\x76\xdb\x33\x1a\x23\xc6\x98\xf7\xeb\x27\xf3\xd1\x9f\x7a\x2d\xc6\x6a\xaf\x12\xe5\x37\x2b\x69\x74\x16\x5e\xa0\x30\xca\x73\xd6\xbe\xf6\xa7\xb2\x93\xf6\x75\xa7\x6d\x4e\x48\xb3\x6e\xb0\x92\x69\x96\x5b\x18\xc5\x29\x42\x80\x5e\x47\xdc\x36\x4b\x65\xdd\x73\xee\xbd\x4c\x80\x35\xa7\x7f\x0c\x05\xac\x8e\x76\x3b\xd1\x98\x42\xda\x72\xc1\xc6\x6b\x79\x09\x2a\x53\xce\x1c\x85\x78\x33\x8e\x20\x89\xa7\xe1\xc5\x32\xc5\xf3\x29\xa3\x4b\x16\x4a\xee\x0d\x40\xd9\xd8\x73\xf6\xbb\x1e\x0b\x85\x40\x2d\xef\x54\xc3\xbc\x84\x75\xe5\x3f\x1e\x8e\x7a\xef\x5e\x9c\x55\x71\x41\xfa\x54\x64\x83\x03\x74\xd8\x75\xa3\xc3\x26\x2c\x59\xe4\xf2\x1c\x81\x40\xc9\xea\x2c\x70\x4e\x7f\x73\x6f\x88\xf0\xf0\xb3\xee\xff\x74\x57\x9b\x08\x60\x38\xf9\x4c\xf3\x0d\x39\xc4\x37\xbd\xd3\xd3\xaa\xf1\xc9\xf2\xe2\xe0\x48\x83\x6b\x08\x02\x63\x4a\x49\x69\xc5\xac\x89\x91\x4b\x06\x7c\xd1\x30\x77\x0c\x81\x8a\xd8\xe7\x62\xdd\x32\xba\x03\x39\x7e\x85\x68\xba\x0e\x23\x17\xa5\xa7\x05\x7c\x2c\x11\x2d\xf7\x88\xaa\xd5\x55\x23\x62\xd2\xca\xe2\x4a\x2f\xfc\x49\x4e\x87\xf7\x74\x19\x91\x77\x3b\xb1\xaf\x89\xba\x78\x41\xd0\x57\x94\xc1\xc2\x9c\x49\x31\x29\xce\x43\xc8\xe8\x92\xe5\x69\xb8\xc8\xcc\xe6\xd4\x8c\x0f\x73\xbd\xd1\x58\xd4\x12\x98\xc8\x5b\xc9\x9c\xa5\x82\x63\x58\x49\x3a\x20\x2e\xd5\x6c\x25\xaa\x4f\xcf\xde\x9e\xbc\xa9\xc2\x35\x7c\xf0\xea\xf6\xc9\x0f\x3a\x11\x61\x9c\xe2\x78\x10\x24\xe9\xc4\x82\xec\x49\xb2\x6d\x2a\xdd\x8b\x1d\x1b\xb9\x52\x04\xb0\xdc\xff\x10\x72\x55\xe2\x0f\x63\xd6\x55\x56\xcd\x68\xdd\x8c\x93\x3c\xc5\x79\x74\x6b\x5d\xe5\x04\xfd\xdd\xd9\x68\x1f\xc0\x3e\x75\x03\xfc\xbb\x26\x9b\xf0\xe8\x26\x4a\x4f\x6e\xf6\x01\x6b\xbd\x1f\xd2\xdb\x9d\xe3\xbb\x65\x2e\x4c\x96\xc2\x8d\x29\xc8\x1a\xa2\xbc\x7b\x06\xf8\x90\x4a\xb1\x97\x95\x2f\x14\x04\x10\x50\xca\x7e\xb8\xb6\x98\xb3\x38\x4c\x8b\xfa\x86\x24\x65\xe3\xe5\x98\xee\x72\x14\xa6\x0d\x47\xa5\x1f\x47\xdf\xf0\x2c\x83\xf5\xc2\xfb\xb6\x09\x26\x17\x45\xe6\x09\xcf\x19\xaf\x7e\x2d\xac\x8a\xc6\x46\x4f\x8d\x5f\x34\x20\xe7\x15\x73\x96\x64\x42\x63\x6d\xa6\xe2\xcf\x06\x34\xfb\x06\x93\x17\x1b\xd4\xa7\xa8\xcb\xbf\xad\xf7\xbc\xe9\x19\xd6\xa2\x17\x1a\x73\xd5\x03\x2d\x0d\xc4\x10\x8f\x1a\xd9\xd1\x51\xf5\x8b\xa9\x4d\x3b\xda\xca\x49\x35\x52\x06\x84\xd5\x8d\xd0\x0c\xc3\x1d\x0b\x84\xcc\xac\x6f\xcc\x4e\xe3\xbe\x7d\xea\x9c\x20\xa1\x49\x05\x02\x76\x50\xe4\x2e\x73\x54\xa8\x7f\x1e\x7e\x34\xf9\x2f\x9c\x99\xca\x7f\x8a\x1a\x4b\xd6\x28\xd4\xfe\xbc\xfd\xb1\xa1\x40\x9f\xfb\x1f\xab\x43\x81\x56\x4e\xb7\x55\xf1\xb0\x7b\x0b\x54\x65\xb7\xb2\xe9\x95\x9a\x06\xeb\xa6\x27\x22\x4a\x70\x77\x9f\x22\x1e\x67\x97\x01\xf1\xf2\x28\x22\x0d\xa6\x0e\xf2\x9a\xc8\xcb\x28\x04\x28\xb3\x94\x3d\x2a\x46\xc5\x2d\x54\xa5\xf7\x42\x15\x5d\x59\xb6\xde\x1b\x56\xbc\xec\xd1\x62\x3d\x00\xd3\x50\xd4\x1c\x3e\xc0\x63\x3f\xe4\xaa\x0b\x72\xcc\xd9\x05\x6e\x3c\xa4\x3a\x40\x87\x2d\x21\xef\xa6\xe3\x65\xce\x56\x82\x4d\x12\x65\x45\xf1\x92\x07\x4a\x96\x95\xa2\x1b\xb8\x79\xc2\x89\xe1\x7a\x95\xf2\xc5\x82\x74\xd1\xd9\x3a\xce\x67\x22\xa7\xd7\x0b\xb8\x67\x80\x62\x0c\x6f\xbd\xb7\xe0\xc4\x7e\xc3\xae\x70\x95\x03\x6b\x6a\xf2\x6e\x2a\xee\x23\x72\x9f\xcb\x16\x51\x98\xd7\x3c\xaf\xde\x9a\x26\xe9\x90\x07\xb3\x9a\xcb\xa0\x1d\x53\x11\xf3\x4c\xae\x2b\xd4\x37\xa0\x56\x69\x12\x2c\xcc\xde\x38\x0f\xfd\xd0\x5f\x31\x0d\x95\x20\x4a\xdb\xaf\x4a\xe2\x39\x62\xe8\xdb\xd9\x92\xa7\xe8\x80\x12\xd3\xd4\x44\x0b\x84\x51\x63\x6b\x9b\xac\x44\xfa\x1c\xaa\xcb\x83\x35\x4f\x5e\xc8\x82\x01\x57\x41\xd8\x24\x86\x6a\x02\x9e\xa8\x64\xad\xcf\x9f\x99\x00\xbd\xff\x73\xb1\xae\x4b\xf6\x52\x33\x00\x8e\x98\x17\x78\xb2\x86\x53\x74\xe5\xd5\x2d\x73\xcb\xd7\x31\x46\x28\x15\x46\x01\xc9\x6a\x92\x8e\xe4\x9f\x52\x98\xac\xd3\xa6\x81\x47\x82\x69\x28\x4f\x1c\xc8\xdb\x9b\x2c\xd6\x5b\xe6\x01\x5b\x82\x7a\x21\x20\xc9\x82\xf3\xec\xad\xee\xb1\xea\x90\x51\xfb\x6a\x2c\x66\xfc\x2a\x4c\xd2\x96\xb3\xc8\x56\x88\x66\x41\xca\x1d\xcd\x31\x5d\x1d\xf4\x11\xf3\x2c\xcd\xbe\x27\x6b\x09\x9d\xec\x07\xd2\x20\xda\xa1\x30\x21\xb9\xe3\x45\x92\x33\xd4\x46\x09\x88\x18\x03\xba\x41\xf9\xb7\xb8\x5e\x50\x9c\xec\xc2\xce\x27\xd5\x0d\x8f\x15\x20\x5b\x05\x0f\x1b\x29\xcc\xd9\x24\x9c\xc4\x5e\x2e\xf7\x53\x98\xd3\x55\x68\x25\x28\x8c\xe9\x58\x60\x98\x09\xf6\xfa\x54\x25\x26\xd5\xa0\x62\x95\xd8\x81\x9d\xbc\x1c\x52\xa8\x56\x15\x27\x07\x8c\xb1\x70\x84\x80\x4d\xa5\x82\x81\x97\x8d\x66\x14\xa2\x7a\x52\x82\x71\xf1\xb8\xb5\xa5\xca\xcf\xec\xc8\x3e\x30\x6b\x78\x17\x00\x35\xbc\x0a\x18\x29\xef\x5a\xeb\x45\x18\x00\xb7\x00\xee\x60\xbd\x5b\xe0\x51\xab\xc0\x41\x1e\x13\x7b\x01\xf2\x84\x6c\x6d\xf5\x63\x80\x14\x1c\x3c\x50\xe1\x7b\xc6\xfe\x36\x98\x6d\xa4\x7a\xd2\xf0\x58\xf9\x97\x1e\x1a\xe9\x59\xd9\xf4\x43\xfb\x60\x56\xde\x05\x8c\x91\x80\x17\xcc\xec\x1c\x4f\xed\x3a\x7b\x22\xef\x47\xb0\xef\xac\xb4\xc1\x16\x6d\xfc\x78\xc4\xb6\x3b\xda\x54\x5f\xc2\x37\x1f\x1d\x0a\x0c\x66\xd6\xa1\x5c\xcd\x5d\x6a\x55\x53\x0b\x66\xf5\x3a\xf1\xab\xa2\x44\xff\x14\x4a\x0b\x7a\xa7\x82\x93\xcf\x1b\x6c\xa3\x77\x8c\xa3\x16\x8b\x93\xb8\x09\xf6\x31\xea\x46\xa8\xbd\x1a\xe1\x10\x98\x41\x6a\xb6\xf9\x18\x42\x7e\xa2\x26\x04\x35\x91\x26\xfc\x2e\xf3\xf8\x62\xd1\x52\xd1\x1e\x97\x51\x44\x11\xa1\x94\xbf\xcd\x30\x0b\xbc\x86\x92\x18\x29\xf9\x03\xa4\x5f\x4f\xf2\x99\xe6\x09\xf0\x51\xfe\xb1\x5c\x10\xb7\x6c\x3c\xa0\x8b\xd8\xf0\x74\x40\xd7\xdf\x39\x0f\x63\x79\x3d\x81\x13\x58\x0e\x26\x8c\x99\xe9\x50\x8d\x4c\x1e\x2b\x2a\xff\xc1\xcd\x1c\x97\x90\x89\xed\x7a\x8b\xc5\xab\x24\x1e\xe4\x69\x04\x6f\xfd\x84\xe1\x8d\x27\x8a\x1b\x59\xfd\xf3\x67\xe6\x96\x40\xec\xf8\xca\x52\xc2\x54\xbd\xc0\xa6\x88\x5c\x2d\x26\x5c\x22\xde\xaa\xd5\x97\xcb\x7c\xc3\x89\xa2\x4d\xd3\x2a\xa6\xb1\x49\xdf\x7d\x0b\x48\xb4\x2f\xdb\x80\x16\xbd\x09\x25\xc3\xf4\xf7\x2d\x72\x2f\x76\x54\x51\xf8\x03\xfb\x7b\xcd\x67\x7f\xfa\x93\x04\xa3\x34\xf7\xac\xc9\xfc\xba\x31\xed\x77\xe0\x77\xf6\x2c\xf8\x77\x59\xcb\x9a\xd8\x7c\x50\xcb\x6b\xf3\x3d\xce\x69\x30\xe0\xfb\x23\x90\xf0\x99\xfd\x03\x70\x60\x44\x88\x63\xa1\x3c\x94\xc8\x7e\xaf\x85\x85\xd9\xb9\xee\xe6\xa3\x26\x4f\xfc\x54\x74\x4a\x5a\xf1\x34\xae\x79\xaf\x12\x06\x91\x81\x43\xad\x6c\xa6\xe6\x68\xc3\x5f\xe4\xce\x85\xf3\x99\xec\x40\x55\x22\x2c\xba\x38\xa2\xbd\xe9\x45\x42\xf7\xf7\x25\x2a\xca\xe5\xc8\x53\x91\x25\xd1\x95\x98\xa0\x7e\xde\xcd\x56\x55\xe1\x7b\x65\x79\x84\x81\xab\xad\x76\xbb\xb3\x8e\x74\x95\xba\xd2\xe8\x39\x0a\x21\x3a\xa8\x30\xc6\x70\x17\x4a\x5f\xa7\xf5\x58\x5c\x01\x32\xb9\x71\x26\x61\xb6\x80\xa8\xda\x61\x5e\x6a\x31\x11\x53\x91\xea\x08\xd1\x8e\x56\xac\xa1\x20\xd1\x2c\xd5\x9b\x21\x28\xaa\x5a\xca\xf5\xac\x0a\x01\x7c\x2e\x2c\x57\x07\xea\xe9\x88\xd6\x59\xb9\xae\xa9\xc3\x51\x22\xdb\xe0\x5a\xca\x3f\x6a\xe4\xda\xb3\x55\x43\xc0\x5f\xc0\x0c\x67\x5d\x03\x7f\x38\xa4\x96\x06\x3b\x17\x0d\x82\xff\x51\xb9\x59\x48\xe0\x1a\xea\x91\xd2\xe6\x49\x81\x0a\x9c\xed\x1e\x9a\x94\x2d\xa5\x7e\xcc\xea\xe8\x2a\xae\xaf\x1d\xd6\xb4\xe9\xc6\x28\x68\xe9\xbd\x17\x94\x80\x69\xb8\x88\x44\x93\x62\x36\xd5\xbc\xa3\xa3\x23\xaf\xce\x92\x85\x48\x79\x9e\x60\x8c\x07\x91\xe5\x18\xa1\x2a\xcc\xd5\x63\x26\x86\x25\xcf\x50\xeb\x91\x73\x08\x21\x1f\xc6\x0c\xfc\x92\x48\x0d\x20\x85\xba\x65\x98\xcd\xe4\x29\x74\x61\x54\xab\x54\x1f\xb5\x59\xf0\x09\xc1\x49\xfc\xb2\x28\xcc\x45\xca\x23\x27\xce\x92\x12\xa4\xf2\x44\x79\x07\x98\x40\x55\xe3\x35\xa6\x9b\x82\x45\xc4\x67\x1f\xed\x9c\x57\xf1\x38\xd5\xc2\x2a\x4a\xda\x57\xe8\xbe\xa9\x05\xd5\x51\x4d\xde\xf4\x4e\x4f\x6f\xac\x2f\x2b\xa8\xca\xa0\x75\xbb\xb1\x36\xd4\x70\xfc\xec\x52\x08\x2e\xa8\x4f\x37\x05\x4a\x0a\xbf\x47\x45\x9b\x89\x9f\xc8\x08\xe3\x90\x29\x81\x5d\x55\x9f\xa3\x49\x45\xa9\xbe\x91\xec\xdd\xab\xcb\xa1\xf9\x43\x27\x65\x8f\xd5\x1e\x6f\xce\x25\xf5\xae\x04\xcb\x96\x29\xa6\x2c\x32\xea\x57\x2d\x18\x69\x25\x3b\xbc\x1a\x3e\x3a\x6f\xb5\x5a\x1f\x1f\x99\x44\x36\x5a\x05\x7f\xc4\x1e\xd6\xb6\x7e\xfd\xe5\xfc\x97\xd5\x93\x5f\x3e\xfe\xdb\x16\x24\xf6\xaa\xe1\xae\x68\x21\x48\xe2\xdf\x2a\x6e\x8b\x6b\x08\xec\x86\x6e\x51\xd6\xca\x14\x21\x85\xb2\xcb\xe8\xbe\x7e\xf8\x41\xa3\xf4\x87\x1f\x24\x0a\x9d\x3c\x2e\xaa\xb1\x19\x3a\x59\x22\x43\x67\x18\x56\x3d\x88\x04\x4f\x41\x2f\x6e\x3f\x0e\xd1\x43\x88\xb9\x96\x28\xfd\x2d\x3e\xd1\xae\x78\x98\xa3\xda\x5f\xe8\xd7\x04\x38\x84\x42\x8d\xd2\x89\x3e\x42\x75\x9a\x17\xbd\xf6\x3a\x68\x3f\x6c\x77\x58\x77\xab\xe8\x0b\xfc\x4f\xd9\x60\x2d\x54\x68\x03\xeb\xcd\xb8\x28\x5c\xd5\xb5\x76\xae\x28\x5a\x74\xea\x56\x92\xac\x6f\x1c\x96\xb2\x11\xff\xf6\x51\xf9\xdf\x3a\x2a\xcb\xf5\x4a\xb1\x46\x75\xd9\x40\x70\x0a\x7e\x15\x8b\xa5\x2a\x9e\x9d\x3b\x08\x98\xb7\x21\xaa\xaa\x66\x72\xe6\xc5\x26\x72\x9f\xdd\xd4\x46\x7e\xf7\xca\x39\x8a\x6e\x66\xfc\x86\xc9\x9f\x4c\xe5\x5e\xe6\xd9\xe5\x29\x49\xc4\x18\xf4\x5f\xe4\xac\x46\x79\xe4\x34\x80\xba\xbc\x42\x23\xcd\x03\x47\x05\x43\x70\x7c\x52\x7b\x40\xb4\x8d\x7e\xd3\x3c\x08\x92\x65\x9c\xd3\x6d\x84\xc8\x58\xbd\x70\x00\xc9\x6b\xcb\x51\xd2\x82\xc9\xab\x37\xc4\x44\x5a\x3f\xa0\x93\x3e\x05\xe7\x50\x93\xda\x4e\xbb\xc6\xc0\xdd\x18\x5e\xb7\x25\x70\xcb\x54\xfb\x8c\x8f\xd5\x63\xa1\x65\x53\x8a\xf0\x1e\x0d\x4e\x4f\xd8\x5f\x28\x9b\x12\xfc\xe1\xb3\xa7\xac\xc3\xfe\xf2\x48\x9d\x06\x38\x9b\x23\x79\x37\x70\xb0\x01\xca\x0a\x75\x5b\x70\xe4\x3b\xb9\x27\x55\xd2\x03\x2d\x91\x69\x69\x0c\x45\x0d\x68\x78\x68\x41\x68\xc8\xd1\xc8\x41\xfc\x8f\xee\xf4\x7f\xc8\x46\x6a\x9c\x5c\x91\x7e\x46\xb2\x9a\x43\x45\xb5\x08\x08\x5c\x21\x78\x94\xe3\x5f\x72\xcd\x0f\xe1\x7f\x8c\xf4\x4f\xa3\x22\xaf\x0f\xc5\xc9\x95\x13\x08\xb8\x8e\xe2\xef\x35\x1a\xb8\x91\x79\xa9\x92\x25\xae\x0d\x1c\x26\xa6\xdf\x9a\xc6\x61\x9e\xb1\x2c\x41\x7d\x24\x64\x8f\x48\x21\x14\xd0\x7c\x19\x53\x0a\x0a\xa5\x6d\x31\xe2\x5a\x6a\x3c\x7c\x15\x7e\xcd\x5e\xc4\xed\x37\x77\xac\xf9\x36\x0a\x60\x6e\x2a\x3a\x4d\xdc\x34\xfa\x96\xb5\x43\xbf\x5a\x04\x93\x17\xe8\x1a\x1a\xd4\x39\x3c\xa6\xc1\x0c\xd2\x2c\x95\x83\x1c\xfe\x9d\xf5\x5d\x66\x1c\x24\x20\x58\xf8\xfe\x40\x76\x9f\x8e\x41\x8f\x03\x01\x4d\xe3\x36\x9b\xc3\x6a\xad\xde\x49\xac\xbf\x34\x5c\xb3\x58\xdc\x10\x10\xdc\x4f\x05\x7d\xc6\xa6\xfa\xb4\xb1\xa2\x73\xc9\xad\x6c\xd2\x05\x9a\xa7\x54\xdd\x8f\x9b\xc3\x70\xa0\x9f\x5a\x83\x64\x6e\x4c\xc7\xf0\x09\x4b\x08\x95\xf3\x37\xe2\xc1\x25\x9b\xf3\x8b\x30\x68\xb9\x8b\xa8\x64\x20\x83\x5a\x23\xe2\x82\x00\xf5\xf9\xf3\x26\xb1\xf7\xa1\x62\xc6\xb2\x8e\x5c\x91\xcf\x9f\x81\xa2\xea\x75\x57\xa5\xa8\x4d\x85\xc2\xcc\xd1\xb5\x5b\xaf\xbc\x94\x02\x95\x30\x06\x39\x12\x31\x0b\xad\x51\x29\x2e\x63\xe7\xcd\xb6\x94\x63\x45\xb1\x38\x50\x2c\x8a\xeb\x90\x02\xaf\x39\x3e\x78\x2d\x6b\x54\x60\x90\xc9\xe3\x02\xdc\x86\x2c\xaf\x7e\x81\x46\x9d\xb7\xca\x15\xa9\x20\x05\x3c\x46\xfb\x4b\x30\x3f\x5e\xca\x6f\xc0\x05\xd1\x26\x22\xa0\xc5\x0d\xe1\xad\xbc\x52\xf7\x08\x89\x99\x60\xa9\x48\x6c\x96\xcb\x65\x0c\x0b\x50\x2e\x95\x92\x57\xc3\x44\x74\xa5\xf0\x92\xf0\x34\xad\x80\x39\xfc\x82\xac\xcf\xe2\x4b\x9c\x66\x02\x4a\xd1\x48\xb8\xe6\xda\xae\xc1\x9d\x31\xa9\x55\xd7\x56\x55\x0f\xcd\xb6\x2f\xe3\x64\x45\x57\xd7\x3c\x5d\xd3\xdd\x35\x54\xb9\x93\x44\x41\xae\x02\xb5\xae\x02\xa6\x9e\x51\x81\x14\xdd\xf5\xda\xa8\xd6\xb6\x48\x0e\x50\xa0\x4f\xe1\xc8\x65\x64\x16\xef\x2a\x5c\x0c\x5b\xc8\xb5\xbe\xc3\xcd\xd0\xd2\x23\xdc\x7e\x33\xb4\x77\x88\x23\x2b\xab\x3c\xfd\x47\x47\xac\x53\xea\xcf\xad\x49\x59\xd9\x6b\xc8\xb7\x7f\x62\x3e\x3b\x64\xed\x7a\x83\xf9\x86\x0b\xde\x43\x67\x5a\xc6\x28\x5e\xad\x2a\xdf\x5f\xa9\xd6\x43\x77\x22\x2e\xea\xe4\x55\x17\x6f\x7d\x5e\xb5\xd6\xe4\x84\x52\x74\x73\x8a\xf5\xe1\xb1\x27\xec\xcf\xa7\xaf\x5f\xb5\xb0\x55\x38\x5d\x53\x3f\xf5\x8d\x7a\x93\x53\x49\xdb\x2e\x51\xab\x4c\x8d\x65\x37\x62\x23\xe0\x64\x21\x18\xb1\x81\xad\xc0\x72\x8e\x37\x68\x04\xa8\xc1\xcc\x78\xa6\x85\x25\x48\x11\x70\x83\xc4\xd4\x22\xac\x54\x1d\x8b\x47\xcc\x48\x9a\x06\x0b\x45\xb2\xb4\x84\xc9\x0d\x40\x40\xee\x74\xa8\xfb\x1e\x8d\x51\x00\xa5\xd6\xc5\xe3\xbc\xb0\x99\x14\x59\xb5\x1b\xac\x53\x87\xd6\xbf\x5c\xfb\xe3\x73\x38\x23\x6b\xc4\xbf\x2d\x8e\x0e\xc4\x67\xb3\xf2\x33\x57\x31\xa4\x6c\xa4\xcc\x43\x0f\xe5\x61\x98\xa8\xec\x55\x79\x1a\x5e\x5c\x40\x0e\x65\x63\x8f\x09\xfc\x00\xec\xbd\x02\xd4\x89\x99\x37\x67\xb5\x42\x70\xe2\xce\xf9\x9a\xf2\xe4\x25\x68\xe2\x68\x6b\x99\xf2\x44\x81\xaa\x34\x49\x24\xf6\x29\x25\x50\x65\x18\xa9\xb5\x47\xf3\x64\x62\xed\x5a\xdc\x60\x70\x96\xb9\x08\xb0\x2e\x30\xf3\x64\x22\x65\xa0\xa7\x1d\xcf\x79\xb6\xb7\xc4\x90\x87\x04\xe7\xc6\xe6\xdb\xe5\xe6\xba\x77\x05\xa7\x70\xb9\x31\x8d\x77\xca\x8d\xad\xdb\xb2\xd5\xbf\xbc\xe3\x94\x9b\xef\xde\xd0\xb7\x0d\xc7\xb9\x76\xab\xc6\xdd\x8d\xf3\xb6\x9b\x22\xb5\x94\x1a\xef\xdd\x3e\xeb\x8d\x93\xde\x57\x6d\x8b\x5c\xd6\xe2\xa4\xdb\x8e\x9a\x00\xdc\x35\x48\x79\x25\xef\x19\xda\x0b\x08\x85\xaf\xdf\x45\x9a\xd8\x19\xf1\x96\x71\x24\x8f\x74\x75\xfe\xb7\x8a\x4c\x19\xf7\x87\x2f\xb9\x97\x1c\xd3\x13\xe6\xee\xa3\x8e\x62\xc8\x55\x99\xa6\x5f\xa3\x4b\x08\xe6\x67\xc4\xee\x79\xce\x22\xc1\x33\x34\xb9\xd4\xc3\x28\xf5\x5a\xda\xac\xee\xa4\x9b\xcc\xaf\xab\x01\x51\x53\xd3\x5c\xb5\x2a\x37\xb1\x50\x59\x4a\xa7\x5b\x16\xef\x0c\x56\xbf\xe2\x84\xa2\x96\x15\xb7\x75\xb5\x09\x8d\x75\xeb\x06\xb8\x6d\x83\x5a\xd5\x86\x9e\x31\x75\x53\xf7\x35\xd3\xd4\xc5\x6e\xf1\xfd\xb2\xbb\x83\x04\x36\x11\xec\x4f\x47\xec\x60\xd7\x1e\x87\x35\xb5\xca\xc7\x49\xd9\xa8\xc9\xba\x3b\x16\xe8\x2f\x0f\xec\x9f\x36\x59\xde\x74\x1d\xc1\xa7\x5e\x73\x11\xb1\xa8\xd7\x37\x03\xb2\xa6\xa8\xae\x44\x55\xaf\xb5\x77\x1c\x79\xdd\xd9\x39\x18\x8b\x38\x15\xd9\x02\xa2\x70\x44\xf9\x56\xd1\xff\x11\xb2\xa9\x86\xda\x56\x73\xce\x17\xfa\xb1\x82\x67\x46\xd7\xab\xa0\xe1\x31\x6e\x3b\x98\x42\x42\xd6\x54\x47\x23\x9c\xe0\xad\x0a\xfa\xd1\x90\xcc\x2d\xc8\xf0\xef\x60\x26\x82\xcb\xaa\x21\xb5\x34\x72\x6f\xc6\x2e\x3d\xaa\xd7\xd9\xe7\xcf\x7a\x9d\x40\x6d\xa3\x9b\x14\x00\xd7\x2b\x68\x9b\x8c\x7c\x9f\x58\x7a\xf8\xa2\x21\xd5\x86\x77\x6d\x12\x63\xee\x13\xc8\xe6\x93\x56\x0d\x6c\x88\x68\xb3\xfb\xbf\x24\xa2\x8d\xca\x6f\x03\xde\x3d\xf0\xf0\x9e\x26\xf3\x0a\x05\xfa\x1b\xf0\xb1\x84\x04\xc4\x3c\x36\x82\x15\x9a\x94\x39\x97\xd9\x11\x28\xa8\x57\x38\x0f\x1d\x46\x43\xcd\xc4\x55\x3e\x81\x8f\x9c\x7a\x8c\x87\xc7\xcd\xea\xe8\x1c\x2c\xcb\x8d\x77\x91\x64\xc8\x91\x3a\x21\xc6\xcb\x30\xca\x9b\x61\xac\x02\x7f\x2c\x60\x51\x30\xc6\xb3\x07\xc6\x93\x71\x18\xc0\x99\x85\x76\x2a\xe0\xd2\x47\x46\xf3\x57\xf8\x74\x22\xaf\x89\xd5\xe1\x3d\xd0\xd4\xb9\xf2\xcd\xb5\x6f\xe2\x83\x54\x19\xb9\xa9\x79\x7f\xa2\x64\xa3\x4e\x72\x0c\x48\x99\x03\x96\x2e\x8a\x88\x6e\xea\xc1\x09\x73\x2a\x78\x6a\xf5\xc8\xee\xd8\x65\x6f\x32\xa1\xf8\xfe\x4a\xdd\xa3\x93\x80\xc9\x45\xe5\x11\x24\xda\x47\xc9\x2f\xc3\xe0\x44\x0b\x9e\x82\x95\x37\x04\xfd\xc9\xd0\xd7\x78\xb1\xc4\x07\x68\x70\x00\x04\xf7\x2c\x4c\x13\xc6\x27\x13\x1a\x2c\x2c\xea\x5c\xca\x6d\x13\x91\xf3\x30\xda\x10\x61\xa8\x82\xb0\xbe\xc8\x05\xa4\xdf\xcb\x39\x68\x3f\xab\x19\x7f\xde\xf4\xb4\xf3\x85\x68\xf2\x8e\x98\x34\x43\x76\x5e\xca\xcd\x18\xd4\x89\x6d\x2c\xdc\x8c\x6e\x50\x45\xda\x07\x03\xb6\x30\xcb\x8b\xea\xc2\x4f\xe7\x06\x4e\xe9\xa5\x5a\x36\x50\xdc\xab\xca\xc4\x55\x7e\xaf\x32\x6c\x35\xad\xcf\xc3\x8f\x2d\xab\x83\x39\xcf\x83\x99\x41\xa4\x35\x87\xba\x7d\x54\x9a\xe1\x13\x0c\x73\x24\x6a\x7d\xbd\x7d\x2e\x5a\x37\x8f\x82\x86\xd3\x55\x19\xea\xb3\xae\xa4\x40\x37\x3d\xfe\xcd\x8c\xe9\x90\x95\x71\x7c\x48\x3f\xbf\x58\x42\xfd\x43\x1b\x4f\x45\x0a\xaf\xc2\x2f\x3b\x62\xe7\x54\xe1\xe3\x66\xd3\xdc\x1b\x41\xb4\x16\xcb\x6c\xa6\x67\xab\x65\x20\x58\x91\x2c\x49\x73\x13\xf8\x9a\x37\xd8\xd8\x46\x2e\xbd\x00\x6f\xa4\x6e\x68\x3e\x48\xe6\x0b\x9e\x8a\x9a\x25\xbd\x30\xc6\x5b\x36\x3e\xc6\xd6\x5f\x5a\x66\xf9\xe2\x18\x05\xdf\x69\x5b\x4f\xc1\x31\xd5\x6c\x49\x12\x09\x14\x13\x57\x37\x67\x71\x1d\x66\x79\x06\x37\x3d\xf2\xd8\x30\x47\xbf\x82\xf5\x12\x6e\x61\x0b\x11\x84\x53\xb4\x81\x25\x20\x19\x26\x3f\x5e\xa4\x22\x10\x13\xbc\x08\x02\x3f\x05\x0b\x76\xf4\x86\x0d\xa3\x49\xc0\xd3\x49\xd6\x62\xec\xe7\xf0\x4a\xc0\xbe\xd6\x07\x82\x1c\xd6\x23\x78\x7c\xe8\x3d\x82\xfb\x26\xfe\xf1\xb8\xd9\x7b\xd4\xa0\x34\x2f\xfa\x33\x3d\xe0\xa1\x46\x56\x95\x5a\xd0\x70\xf8\xb0\x11\xb4\x14\x64\xc0\x81\xf8\x83\xce\x19\x13\xc8\xe8\x67\xa3\xc9\x5c\x85\x49\x20\x6a\xd8\xe8\xd0\x99\x05\xd1\xbe\x13\xd7\xf7\x8d\x64\x8d\x69\x0b\x38\xa4\xe6\x3f\x0a\xa6\x3c\xfd\xc4\x35\x9f\x2f\x22\x71\x88\xa6\xfa\x52\x70\x93\xe0\x28\xfd\x31\xc5\xb5\xb1\xad\x89\x4d\x9e\x31\x7c\x85\x7f\x34\x0b\xd7\xfc\xe1\xa3\x16\xb6\x37\xac\xaa\xe6\x61\x5b\xaf\xc1\x1e\x79\x50\xc7\x7b\x24\x69\xc3\xee\x25\xe0\x71\x20\xa2\x82\x5f\xa4\x88\xf3\x30\x15\x11\x24\xeb\x86\x84\xd5\x56\x34\x9d\x7a\x45\x37\xbd\x28\x6f\x1e\x7b\x8d\x5b\xdf\xf5\x8b\x9d\x8b\x6b\x11\x2c\x29\x1d\x3f\x3a\xbb\xc4\x13\xe3\x57\x62\xe9\x63\x2a\xe7\x75\xe6\x35\x0a\x67\x29\x7a\x3a\x38\x99\x22\x7e\x4e\x72\xc6\xd9\xd9\x43\x4f\xf5\x7d\xc3\xe6\x2b\x98\x08\x3c\x56\x7b\xe9\x71\xc5\x01\xf3\xaf\x77\x30\x15\xce\x25\xf7\x40\x52\x76\xbe\x60\x84\x84\x26\x40\x37\x08\x6d\x78\x8a\x43\x1c\xa0\x0c\x57\x7f\xa5\xb5\x62\xa4\x15\x94\xe2\x53\x85\x4a\x10\xe5\x75\x73\x58\x3a\x23\xd9\xa4\xf6\x7b\x86\xda\x75\x96\xcb\x3d\x87\x46\x4b\x66\x7f\xa9\xe7\x42\x37\x1a\x1b\xee\x29\x52\x74\x2e\x5a\x52\x2e\x06\x2b\x05\x6d\x28\xae\xb4\x00\x18\xa1\x2d\x5d\xd3\xf8\xb4\xda\xea\x88\x2d\xf4\x8e\x3c\xa5\x42\xca\xe3\xcd\x02\x8e\x09\x69\xae\xab\x63\x56\x8b\xeb\xea\x99\xc0\x31\xb4\x68\x85\xd9\x80\x52\x43\xd5\xea\xd5\x00\x16\x2a\xf8\xf5\x10\x6c\xab\xc5\x44\xa5\x21\x55\xa3\x43\xe5\xa9\xfa\x6b\xb3\xbe\x74\x03\x43\x82\x79\xa1\xa1\x96\xbe\xab\x29\xdd\x28\x3c\x0d\x04\x3c\x8a\xf8\x38\x12\x85\x35\xb5\x94\xe4\x85\x65\x55\x18\x76\x16\xd2\x60\xd5\xba\x55\x2d\x0a\x7c\xae\xa6\x95\x25\x25\xac\x6e\xc4\xab\x9b\x07\xe6\xcb\x3f\x09\xbf\x25\x52\xae\x8e\x05\xa8\xc4\x28\x0d\xcd\x22\xf7\xc2\xd9\xab\x53\xc6\xe8\x43\x4d\x0a\xd0\x18\xb3\x64\x49\x3e\x63\xf2\x16\x9e\x4c\x15\xbb\x38\xd4\x6b\xda\x6a\xb5\xbe\xd8\x1e\x39\xe0\x23\x6a\xef\x05\x70\xc6\x81\x85\x07\xb5\x28\x5f\xd0\xf3\x5b\x9c\x27\xcc\x0c\x33\xd3\xb1\x27\x25\x24\xd9\x19\xf8\xd5\x66\x58\xaf\xc4\xa4\x0c\x57\xda\x78\x5e\x29\xb6\xfb\xad\xc7\x16\x53\x87\xd5\xa1\x39\xac\x1a\x05\xd8\x5f\x7d\x58\x31\x3a\xa2\x0e\x6f\x3d\xa2\xb0\xcb\x2f\x05\xa6\xaf\x32\x87\xcd\xf9\xe2\xde\x7c\xd9\xb9\xf2\xcd\xf9\x02\x69\x56\x8b\xf2\xb8\x48\x4c\x7f\x28\x11\x1e\xb2\xd0\x39\x5f\x48\x11\xf4\x63\xbd\x94\xc7\xe8\xad\x39\x2f\x95\x78\xa3\x1e\x4d\xa0\x4c\x64\x39\x89\x3a\xae\x0d\xa8\xb2\xa8\xc0\xb4\xa7\x30\x6f\x79\x13\x5f\x46\x11\x29\x85\x52\x81\x91\x5c\xb0\x75\xf1\x66\xa6\x50\xa2\xc0\xf4\xd4\xb1\x81\xeb\xcc\x95\x85\x86\x09\x57\x22\x09\x0f\xb4\xb1\xca\x29\x11\x2e\x7e\x2a\xc9\x2c\x55\x0b\x45\x66\x9c\xc3\x29\x1c\xab\x79\x66\x04\x07\x78\x70\xc5\x50\x40\x63\x3e\x17\x94\xc4\x71\xbe\xd4\x33\x45\xa9\x12\x8c\x78\xf1\x21\x62\xb3\xa4\x6d\x60\xdf\x71\x65\x8d\x6d\x47\xe1\xc4\x05\x8b\x05\x7d\xfd\xdb\x78\xd1\x93\xd5\xca\xf6\xc8\x70\x7d\xb1\xd8\x90\xb1\x00\xbe\xcf\xa5\xcf\xbd\x77\x3a\x17\x37\xeb\x62\x56\x75\x1b\x94\xa3\xd2\x93\x28\x24\x8d\xa0\x66\x9a\x33\x3a\x23\xbc\x87\x0e\x0c\x95\x8c\xff\xa7\x63\x3a\x13\x33\xb1\xe3\x3a\x9f\x59\xf6\x0a\xa4\x74\x82\x35\x9d\x51\x20\x36\x15\xe4\x39\x07\x8f\x10\xae\x15\x6b\x28\x64\x61\x9c\x17\x88\x6f\x04\xb6\xec\xac\xc6\x2f\x31\xf4\x9d\x31\x51\xcf\xea\xb8\x2f\x64\xb1\x04\x66\x19\xaf\xe7\x22\x8a\x90\x0f\x14\x82\x2c\x53\xf2\xf6\x64\x65\xb9\x72\xe9\x10\xa5\xf6\x41\x43\x86\x2c\x10\xc0\x0d\xb5\x35\x19\xfa\x5f\xc9\xa3\x44\x45\xdd\x29\xc5\x6f\xc8\xc0\xa9\x92\xac\x29\x24\x2c\x63\x5a\x69\x9b\xd1\xb8\x1e\x5d\x8d\xa2\x4a\x9a\x82\x6e\xac\xd2\x24\xbe\xd0\xcf\x89\x8f\x15\x16\x1b\x74\x6f\x48\x31\x19\xa6\xb6\x89\x31\x7e\xd0\x99\xe5\xfe\x73\x1c\x4e\xc1\x3b\x3e\xa7\x30\x39\x59\x83\x65\xcb\x60\x26\xe7\x70\x7c\x95\xa4\xfc\xd2\x99\xa9\x13\xaa\x1a\xfa\x82\xb9\x26\xe8\x01\x4a\x10\x58\xae\x1d\xc4\x40\x45\xa7\xf0\xc7\x38\x5a\xe1\x26\xb1\xeb\xe6\x4d\x4e\x6e\x60\x7b\xbd\x4c\xc7\x10\xa2\xe1\xb1\xba\xe8\x2c\x79\x44\x53\xb6\xf0\x2f\x79\x30\x05\x18\x0b\xb3\x6c\xa9\x0e\x51\x2b\x08\x4a\x26\x7b\x89\x93\xb8\xf9\xee\x54\x77\x94\x49\x46\x0e\x15\x75\xc9\x03\x15\xae\x0b\x14\xf6\x6e\xca\x4f\x1d\xb0\x12\x5d\xfd\x38\x1a\x13\xc9\xbe\xc1\x64\x1c\x4d\x5b\x94\xc7\xdd\x9c\xaf\x31\x1f\xfd\x15\xd9\xb8\x80\xa9\x8d\x14\x8d\x68\x55\xec\xd1\x5b\x6f\x71\x16\x2f\xd6\xa6\x41\x72\x27\x80\xe9\x0b\x8c\x60\x53\xe8\x71\x09\x0b\xa2\x8f\x37\x30\x8a\x0d\xde\xdf\x95\x28\x21\xe8\x71\x38\xcc\x23\x31\x61\x8f\x7a\x14\xbd\x08\xcc\xa9\x21\x9c\xcc\xa6\x70\x48\x18\xdf\xd9\xe6\xdf\xf0\xc9\x52\x90\x5e\x1a\xbf\x64\xf5\xeb\x53\xeb\x1b\xec\xc6\x23\x3b\xeb\x26\xca\xc8\x65\xb9\x8f\x33\x29\xdc\xe1\x06\xb3\x36\xa7\x8d\x28\x6b\xcb\x82\x28\x3f\xe3\xd9\x4c\x59\xd3\x2b\xdf\xcb\x69\x12\x45\xc9\x8a\xce\xc4\xec\x90\x79\xf8\x7c\xe6\x35\xb4\xad\x1e\x1c\xe2\xda\x40\x01\x45\x3d\x30\x35\x50\x5d\xb1\xa6\x32\x0b\xb7\x2e\x0c\x2a\x51\xf2\xda\x0a\x29\xd2\x62\x20\xe9\xe9\x9d\x4d\x62\x94\xec\x58\xc7\x60\x66\x72\x7b\x9a\xcd\x26\xae\x39\x26\x2b\x5c\x25\x16\x1f\xa8\x58\xb4\x07\xc5\x68\x37\x14\x0e\x87\xfa\x24\xe9\xb2\xc1\x3c\xde\x83\xe4\x14\x7d\xf9\xbf\xff\xd0\xc3\xe9\x1c\x3d\xf1\xb0\x22\x81\x71\x6c\xdb\x37\x0c\x4d\xd9\xc5\x23\xfd\x65\x7f\x5d\x72\x29\x78\xa4\x3c\x20\x26\x86\x44\x26\xc5\xc4\xf3\x93\x57\xa7\x1f\x65\x7f\xe7\x2f\x86\xa3\xb3\x8f\xb2\xab\xfe\x5a\x2e\x04\xc4\xfb\x48\xe2\x46\xa1\x3f\xda\xb1\x14\xe3\xdd\x84\xf8\x21\x78\xe3\x65\xae\x02\x82\xa1\xe1\x2d\x9d\x23\x2a\x40\xbb\x1d\xce\x82\x35\xd9\x2b\x74\x9d\x21\xc9\x4d\xd9\x3d\xc8\x6d\x6b\xe6\xa2\x63\xcc\xa8\x54\xbd\x62\xad\xec\xec\x28\xe0\x1e\xf5\xad\x6c\x5a\xc6\xc6\xec\x22\x36\xa2\x54\x8b\x81\x56\x1e\x12\x81\x6a\xc1\x90\x72\x5b\x0a\x65\xc4\x93\x59\x63\xa3\x30\xa6\xdf\x69\x70\x3c\x4a\xec\x6d\xac\x18\xda\x57\x8f\xae\x17\xe5\x7f\xcc\xc8\x6c\xef\x81\x7b\x8f\x8a\x62\x87\xfe\x01\xc3\x82\xc7\xce\xaf\x1b\x97\x8a\x03\x47\x59\x05\xac\x70\x65\x9b\x63\xc6\xf1\x4c\x67\x3d\x91\x22\x95\xec\x08\xdd\x60\x0b\x0e\x41\x60\xc4\xc9\x63\xc6\xd3\x94\xaf\x2b\x3d\xcb\xca\x1e\x44\xa8\xe7\xb5\xee\x85\x14\xec\xca\x49\x7f\xea\x86\x5a\xcb\x8b\x46\x49\xd0\x1f\x0b\x73\x90\x34\x50\xd3\x1c\xd3\x53\xdd\x26\x93\x25\x3a\x56\xc1\xcc\x08\xc5\x44\x6d\x4a\x44\x91\x08\xd5\x11\x16\x24\xf1\xa4\x99\x27\xcd\x88\x67\xb9\x8e\xbc\x42\x28\xc3\x8e\x6d\x6d\xf8\x2a\x0d\xf3\x5c\xc4\x0e\xb7\x83\xc8\x93\xc5\xa0\x70\xc4\x4c\x79\xa6\xb4\xe5\x62\xe2\x44\x4d\x33\xd1\xd2\x74\xa4\x34\xb8\x80\xbb\xc1\xd2\xec\xa3\xf3\x86\xa3\xce\xbd\x99\x3e\x57\xce\x92\xf6\xf1\x07\x36\xf4\xf2\x20\x32\xde\x9f\xea\x0a\x47\x87\xb6\x3a\xf5\xea\x15\xd6\x7f\xc7\x4b\x8c\x6a\x2d\x5c\x5f\x49\xe3\x29\x59\x38\x39\xcf\xad\x77\x98\x89\x98\x6e\xd6\x95\x14\x44\x5d\x0c\x79\x48\xe7\xa9\x94\xbd\x1c\x61\x55\x3f\x74\xe6\x10\x21\x4d\x9d\x06\x76\x7b\x9e\xc9\x5b\x52\x88\xa1\xc9\xd3\x0b\xcc\xb1\x06\xf7\x29\xc6\x86\x3c\x98\x01\x59\xab\xf2\xb0\x0a\x86\xb5\x5e\xdc\x50\x9f\x1a\x47\x8d\xe8\xd3\x0c\x25\x49\x2e\xd1\x50\x02\x54\x12\xb2\x8d\xdc\x73\xe3\xf0\x02\x4f\xf9\x95\xc0\x14\xc4\x10\x27\x01\xa2\xe7\x82\x0c\xaf\xf0\x69\x34\x36\xa9\x20\x73\x0a\x49\xb6\x2c\x4a\x72\xbc\x40\x4b\x21\x14\xc4\xe3\x2b\xb0\x15\x6c\xd5\x69\x20\x72\x32\xa5\x91\x5b\x56\xe9\x5d\x1d\xb9\xe8\x90\x99\xf5\x57\x41\xbb\x8a\x5e\x9c\x8f\x8d\x73\x95\x72\x2b\x31\x51\x91\xc0\xf8\xd7\x58\x7d\xd4\x89\x21\x11\xe9\x19\x82\x23\xde\x04\xaa\x27\xc1\x63\xba\xe5\xa0\x9f\xa2\x1d\x46\xe9\x1e\x44\xec\x68\x57\xae\x78\xfa\x89\xa7\x17\x59\x41\xc5\x62\x5d\x9c\xd5\xca\x66\x55\xb7\x67\xa5\x78\x41\xc8\x35\x5d\xf7\x3c\xfc\x78\xde\xfe\xd8\x70\xde\xe1\xe8\xdf\xdf\x08\x61\x87\xcc\xa9\xed\x57\xd7\x66\x84\xd6\x42\xed\xce\xa6\xda\x84\xf2\x42\xf5\xed\x4d\xd5\xd1\x65\xc5\xae\xba\xb3\xa9\x2a\xfa\xb3\x38\x75\x77\x3f\x56\x55\xfd\x52\x56\x38\x9d\x42\x32\x4e\xc7\x0e\x1f\x19\x9c\x1d\x22\x14\x73\xaa\xdc\x61\x25\x41\x68\xde\x60\x15\xe1\x4a\xd9\x1b\x32\x51\x2a\x9b\x7a\xbd\xe1\x28\x66\xab\xf2\x2f\x78\x34\xe7\x41\x9a\x3c\xd2\xdf\x33\xca\x7e\xce\xd8\x49\x4e\x91\x14\x43\x32\x17\xb6\x03\x35\x2b\xf7\x5b\x70\x52\xa9\x33\x00\xa2\xf7\x3b\xb1\x07\x30\x6e\x59\x53\x1c\x30\xa8\xd1\xb2\xfd\xb3\xc9\x7c\xb7\xa6\x76\x8c\xdc\x5e\x76\xbe\xce\x3b\xd8\xa6\x3b\xae\xc2\x96\xcf\x32\x99\xa4\x7f\xbc\xd5\xa5\xf8\x64\x8a\x82\x67\x29\x09\x03\xe3\x0d\x7c\xef\x1e\x1b\xe5\x41\xa6\xee\xe2\x29\xc4\x37\x5e\x12\x5a\x2a\x1a\x93\x0f\x40\x98\x6b\xb9\x45\x89\x2d\xb6\x61\xa5\xc6\x04\xbf\x74\x9e\xc0\x69\xb4\x26\xe0\x80\x85\x98\x82\xbf\x77\xcd\x78\x72\xa1\x4b\xac\x13\xda\xa7\xc2\x57\xd6\xb6\x09\xb3\xff\x3d\x54\xae\xde\xe4\xbd\x58\x4c\x16\x51\x67\x3f\x31\xce\x0e\xd9\xd8\x7d\x83\xa8\x5e\x44\x7a\x99\x28\x20\x7a\x9e\x4c\x28\xf3\x40\x55\x46\x89\xaf\xc3\x37\x35\xbe\x2f\xbe\x83\x7f\x61\x7c\x63\xd6\x8b\xef\x80\x6f\x89\x68\x1d\xcd\xbc\x09\xe1\xb7\x9a\x4e\xaa\x0b\x97\xcc\x6d\x04\x8d\xb3\xaf\x45\x50\x61\x5e\x9b\x72\x65\x7c\x97\xc9\x59\x6b\x51\x3d\x8d\x6c\xf6\xd5\xd3\xb0\x60\x17\xc6\x5a\xf0\xc7\x54\x39\x2d\xbe\x6d\x22\x44\x39\xd5\xd3\xe0\x51\xfe\x0d\xf3\x20\xd0\xdf\x01\xe3\xb6\x3f\x53\xe5\x40\xe7\xc9\xe4\xab\x07\x7a\xef\x9d\xf5\xad\x3b\x64\x90\xcc\x17\xcb\x5c\xca\x8a\x4a\x74\x33\x3a\x52\x0c\x88\x8a\x0f\x41\x8e\xb7\xa1\x9e\x6a\x90\x47\xb5\x60\x56\x67\x7f\x53\xdd\x56\x47\x73\x2a\x58\x2c\x83\xf1\xb4\x19\x01\x87\x1c\x05\x94\x15\xc6\xa8\x43\xe7\x7c\x01\x31\x40\x38\xc6\x2a\xb5\x3a\xad\xcd\xad\x1e\x8d\xd9\x22\xe1\xd5\x8e\x39\x7a\x3e\xff\x48\xc5\x5f\xcc\x22\x12\x97\x44\xa2\xcb\x53\xd2\xa4\x9b\xb0\xf6\xee\x62\x8a\x49\x6d\x1a\xdf\x6d\x29\xe1\x8d\xc6\xdd\xf9\xa5\xe0\xf4\xb6\x81\xd7\xd6\x16\xeb\x83\x8f\x9f\xe4\x08\x0d\x36\x4a\xd2\x15\x4f\x27\x28\xca\xbf\x15\x90\x14\x14\xf9\x7f\xc2\xf8\x55\x12\x4e\x58\xcc\xaf\xc2\x0b\x0e\x7a\x32\xbe\xe2\xa8\x94\xb5\xa1\xe5\x56\x42\x83\x05\xbf\x10\xad\xa2\x2d\x59\x21\x54\x4f\xb7\x8b\xb4\xe4\x94\xed\x55\x94\xed\xd7\xd9\x4f\x0e\x03\xbf\xed\x85\x94\x1d\xde\xb1\xba\xf2\x32\x65\x96\x15\x7d\x81\x84\xa7\x9b\xc8\x57\x6e\x9d\xe1\xe9\x40\x9b\x69\x2b\xb3\x8e\xc1\xe9\x89\xf6\xd1\xd0\x85\xa7\xa7\xdb\xaa\xf0\xb5\xc9\x05\xfe\xbf\x3a\xda\x88\x7b\x15\xc9\x6a\xca\x74\x1e\x5f\x3f\xa7\xa1\x88\x26\xa0\x74\x3c\x64\xe7\xf4\xea\xd0\x20\x5d\xa4\xba\xba\x35\xb4\x3b\x3b\x78\xb1\x83\xc4\xff\xf1\x81\x05\xc7\xb8\x2a\x43\xdc\x4a\xf5\xe4\x22\x09\xa3\x6d\xf2\xea\xc0\xae\x61\xec\x03\xf8\x9e\xfe\xb6\xcc\x72\xdb\x90\x44\x41\xd3\x61\x8d\x26\xa8\xa9\xc1\x77\x3d\xbc\xee\x8e\xd7\xfa\x96\x80\xf7\x83\x24\xb3\x72\x3d\xb0\xf3\x76\x03\xf4\xae\xef\x5e\x3d\x7f\xf5\xfa\xc3\xab\x8f\x5e\x03\x90\x5a\xfe\xff\x63\x43\x0f\x7e\x04\x91\xa7\xd3\x64\x45\x20\x3a\x7b\x0d\x09\x62\x78\x3a\x90\xcd\x87\xa7\x83\x46\x95\x40\xc2\x74\x30\xee\x86\xf9\xc5\x2a\xa5\xab\xd2\xb9\xef\x77\x1a\xcc\x3b\x1f\xf9\x12\x18\x70\x7c\x49\x5f\x4f\x98\xf7\xc6\x6b\x00\xfd\xc1\xaf\x75\x0b\x08\x16\x3e\xea\x6c\xff\xfd\x51\xa3\x0c\x6d\x1b\xa0\x75\x8a\xd0\xfe\xd3\x40\xfb\xcf\x4a\x68\x3b\x95\xd0\x76\x00\xda\x76\x11\xda\x5b\x03\xed\x6d\x25\xb4\xdd\x4a\x68\xbb\x00\x6d\xa7\x08\xed\xd4\x40\x3b\xad\x84\xd6\xad\x84\xd6\x05\x68\xbb\x00\x8d\x9a\xfb\xbb\x7f\xf7\x8a\xab\x51\x82\xb6\x5f\x09\x6d\x0f\xa0\x75\x1d\x68\x7b\x77\x80\x76\x50\x09\x6d\x1f\xa0\xed\x39\xd0\xf6\x6f\x87\xb6\xed\x57\x42\x3b\x00\x68\xfb\x0e\xb4\x83\x3b\x40\xeb\x54\x41\xeb\xb4\x01\xda\x81\x0d\xad\xd3\xbe\x03\xb4\x4a\x7a\xeb\xf8\x48\xbd\xed\x8f\x66\x11\x3b\xfe\x1d\xa0\x55\xd2\x5b\x87\xf6\x82\x6f\x43\xdb\xbe\x1d\xda\x4e\xf5\x4c\x71\x2f\xf8\x1d\x1b\xda\xce\x1d\xa0\x15\x66\xaa\x18\xc1\x29\x46\x9e\x37\x9c\xc0\x3f\x90\xe3\xfd\x1f\x09\x51\xc3\xc8\x66\x35\x29\xcb\x78\xff\x21\x29\x19\x7e\xfb\xd5\xab\xd7\x1b\x6e\x47\xe6\x1f\xf1\x1a\x00\xb7\x73\x20\x19\x8b\xff\xd0\x06\x17\xd4\x3c\x0c\x45\xf7\x6a\x39\x87\xfc\x0e\x8c\x61\x59\x2f\xca\x55\x11\xfc\xfd\x52\xe4\x1c\x0b\x14\xb8\x5d\xc9\xeb\xbc\xce\x7f\x7c\x2f\x70\xbe\x04\xb7\xfd\xff\xbe\x17\xb8\x8e\x04\xb7\xf3\x6f\xdf\x0b\xdc\xb6\x04\xb7\xfb\xef\xdf\x0b\xdc\x8e\x04\xd7\xfd\xf5\x7b\x81\xdb\x95\xe0\xf6\x7e\xf8\x5e\xe0\xba\x12\xdc\xfe\xe3\xef\x05\x0e\x0e\xb4\x83\xda\x77\x02\xb7\xb3\x2f\xc1\xb5\xeb\x25\x70\x4e\x1a\x54\x09\xa1\x00\xb0\xb2\x92\xde\xcd\xfb\x92\x0b\x36\x3f\xdd\x0e\xf5\x96\xef\x06\xa0\x64\xf9\x47\x4f\xbe\x17\x40\x94\x14\xc4\x34\xb9\x66\xcd\x4f\x20\x79\x1f\x3d\xa1\x9e\xf6\xb6\xbf\xef\xd0\xbb\xfe\x1f\x35\xf2\x93\x9c\x47\x21\x8f\xd9\x93\xc7\x6a\xe8\xb2\xab\x27\x65\x4a\xfb\x8a\xae\x10\xe2\x3e\x0a\x60\xfd\xe7\xa7\x6f\x24\x5b\x1e\x67\x35\x4c\x0a\xda\x60\xde\x2f\x63\x09\x07\x4a\xc6\xf0\xb7\x2c\xaf\x6f\x14\x9f\x8c\x70\x19\xa6\x36\x57\x3e\xc0\x1e\xce\x7a\x7d\xd9\x41\x36\xab\x79\xbf\xe4\xe6\x00\xf8\x8b\x84\x08\x92\x6f\x43\x33\xe0\x06\x2b\xcb\x65\xfb\xc0\xee\xfe\xfa\x9f\x5e\x63\x03\xe7\x66\xc8\xdd\x41\x9a\x2a\x89\x7a\x1a\x0a\x6c\xad\xd5\x87\xdb\xa0\x7c\xb8\x11\x4a\x17\x0e\x06\x31\xbc\x0d\xca\xf0\xe6\xb1\x00\xc7\x4d\xdf\xde\x06\xe5\xed\xcd\x50\x80\x33\xe6\x67\xb7\x41\x39\xbb\x19\x0a\xcc\x68\xfd\xdf\xb7\x41\xf9\xef\x9b\xa1\x00\x5b\x5d\xbe\xbb\x0d\xca\xbb\x1b\xa1\xec\xc1\xd1\x11\x9e\xdc\x06\xe5\xe4\x66\x28\x30\xa3\xe4\xf5\x6d\x50\x5e\xdf\x3c\x23\x38\xb3\x17\x6f\x6e\x83\xf2\xe6\x46\x28\x1d\x94\x18\xff\x76\x1b\x94\xf3\x9b\xa1\x80\x6c\xf7\xf1\xcb\x6d\x50\x3e\xde\x02\x45\xca\x9b\xbf\xfc\xf2\x19\xc0\x6c\x86\xf2\xcb\x2f\xce\x56\x2f\x6f\xf3\x51\xb2\x4c\xf3\x19\xec\x73\x56\xfb\x20\x20\xd4\x90\x15\x1d\xee\xcf\xe8\x3e\x02\x31\xe3\x30\xb2\xf4\xb1\xb8\x3a\x4b\x92\x88\xd2\xb3\xb2\xf3\x0e\xe0\xf6\x7c\xd0\x7b\x03\x36\x37\x66\xe7\xeb\x5f\x36\xfc\xdb\xc4\x22\xba\x40\x7e\x60\x36\xc4\x1c\x14\xc1\x84\x7a\x74\x6a\x56\xfc\xdb\xb8\xfa\x40\x89\xd9\x69\x35\xc0\xd3\xfb\x03\xec\xc2\x51\x3c\x39\xae\x06\x78\x7c\x7f\x80\x7b\x80\xc3\xe9\xa8\x1a\xe0\xe8\x2b\x00\x02\x9b\xbd\xf8\xb9\x1a\xe0\xcf\x5f\x01\x10\xb8\xdc\xec\x59\x35\xc0\x67\x5f\x01\x10\x18\xde\x6f\x7f\x2e\x01\x54\x92\xfe\x9f\x25\x4c\x49\x23\x05\xd0\x1b\x01\x02\xd9\x5c\x3e\xdf\x08\xf0\xb9\x16\xae\x20\x54\xdf\x27\x75\x7f\xd8\x08\x10\xc4\xc1\xe8\xc5\x46\x80\x2f\xee\x39\x42\x7f\x5f\xde\xad\x9f\x1e\x96\x00\x5a\xe7\xe6\xbd\x70\xd8\x81\x8b\xdd\x2f\xde\x23\xaf\xf1\x7d\x00\xfa\xdb\xa8\x83\x79\x75\x36\x7c\x0b\x06\x74\xbf\xa4\x08\x9a\xdc\x2a\x36\x02\xd4\xdf\x2b\x18\x4c\x38\x55\xfc\x85\xc2\x52\x62\xe0\x9f\x8c\x6c\xc6\x54\x8e\x0d\x96\xcd\x92\x34\x0f\x96\x79\xd6\x62\xec\x75\x0c\x8a\x2b\x05\xc3\xe4\x6c\x00\xcf\x27\xe0\x4f\x83\xad\xf7\x90\x18\x98\x32\xf8\xc2\x07\x29\x35\xcb\x0f\x18\x56\x96\x74\x5c\x98\xc4\x41\x81\xa2\xb6\x58\x53\x99\x52\x00\x8f\x23\x03\x25\x1d\x3b\x8d\x9e\xe8\xd0\x81\x82\xb3\x4c\x44\x42\xd9\x51\xa8\xfc\x16\x13\x9b\x55\xbe\x47\xa0\x8f\x9b\xef\x15\x58\x0a\x21\x53\x05\xbd\x06\xe1\xae\x14\x24\x34\x9e\xc8\x84\x98\x93\xbd\x53\x2a\x82\xe4\x22\x0e\x7f\x47\xeb\x14\xc4\x4f\x9e\x24\x75\x75\x43\x06\xd2\x3c\x3f\x7d\x76\x32\x3a\x2b\x2a\xdb\xca\xff\x36\x31\xda\x03\xe0\x3a\xbf\xff\xc5\x3d\x42\x80\xb4\xff\x52\xde\xd0\x1b\xb9\x2b\x30\xc3\xeb\xff\xaa\x80\xf2\x5f\x77\x87\xd2\x05\x89\x2e\x18\x14\xa0\xa8\xeb\xd2\xe0\x93\x03\xca\xad\x20\xd1\x3e\xb0\xe4\xf8\x7d\xc0\xce\xd5\xfb\x0d\xb0\xde\xdf\x06\xeb\xbd\x7d\x27\x00\x58\x60\xbd\x5a\xc1\x01\xfa\x05\x0e\x60\x57\xd0\xbf\xc3\x77\xcd\x54\x00\x5b\xf1\xab\x0d\x63\x7b\x75\xdb\xd8\x5e\x59\x63\xdb\x03\x9c\xcd\x5f\x56\x60\xfe\xe5\xdd\x31\xef\xcb\x05\xf4\x1a\x7f\x72\xa1\xf0\x28\xaf\x11\x17\x71\x38\xdc\x46\x28\x92\x98\xbc\xd6\x8f\xdf\x0a\x45\xca\x46\x5b\x3f\x55\x63\xfb\x93\xd6\xfd\xfc\x04\xbc\xfb\x06\xa9\xe6\x34\xbc\xce\x67\x98\xd7\x19\xac\xf0\x2c\xe5\x12\xaa\x99\x07\x67\x6f\x5f\x6c\x12\x57\x9c\x22\x83\x26\x68\xd7\x7b\x01\x1b\xee\xee\xed\x0e\xe0\x24\x3e\x7f\xd1\x7b\x73\xbf\xfe\xb6\xe1\xc0\x65\x5e\x09\x65\x46\x0d\xb6\x09\x8b\x07\xd0\xf4\xfc\xed\x7d\xbb\x3c\x40\xee\xff\xf6\xe5\xf0\xd5\x3b\xc3\x55\x6e\x6c\xe7\xbe\x68\xc0\x5b\x81\x7a\x12\xd8\xc1\x51\xbc\x79\x7b\x76\x3a\x78\x7b\xe3\x8b\x00\xe2\x77\x07\xd4\xd8\xa7\x83\xb7\x2f\x9e\x5b\xa3\xde\x58\x1d\xee\x05\xe7\xfd\xb7\xc3\xde\x2d\xd5\x9d\xc7\x12\x78\xcd\x4b\xa6\x2c\x0b\xaf\xf1\xe9\x0e\x13\x80\x93\x11\x28\x26\x68\x81\xc1\x83\x30\x71\x7e\xf2\xea\x74\xf8\x16\x16\x1c\x36\xe0\x73\xb1\xc6\xd4\x99\xb4\x4b\x8b\x0b\x50\x5a\x89\x6d\xe4\xd3\xcf\x5e\xbf\x1c\x22\xd5\x28\x30\xcf\x92\xb9\xd0\x5b\xfd\x76\x30\xb8\x30\x6f\x7e\x7e\xf7\xc6\x05\xf3\x86\x5f\x88\x77\x8b\xbb\x8e\x66\x07\x47\x73\x3c\x44\xb2\x30\x60\x8e\x45\x64\xf8\xce\xed\xa3\xd9\x25\x21\xe1\xb8\x00\x66\x18\x4f\xee\x03\x66\x87\x26\x75\x4c\x2f\x46\xf6\xa4\x20\x9b\x49\x15\x8d\x57\x6d\xf6\x9e\x5c\x39\xfd\xc6\x25\x8f\x6d\x2b\x32\x2c\x18\x63\xab\x00\x5a\xb0\xce\x65\xbb\x1c\xcc\x29\xaf\xc0\x99\x58\xad\xd0\x96\x0e\x71\xc8\x2e\xab\xa2\xd3\x29\x07\x2b\x98\x07\x3c\x4a\xa8\x95\xd1\xb3\x80\x41\xd1\xda\xdc\xbe\x32\xf0\x78\xa0\x10\xe1\xc2\xb8\x13\x2a\x70\x24\x70\x3d\x7d\x7b\xf2\xf3\x33\x20\x59\x1e\xd4\x48\x39\x23\x4f\x55\x7a\x14\x1a\xdc\x0d\xd2\x9e\x71\x9e\x68\x30\x0b\xd2\xb1\x81\x74\x7c\xa7\xe5\x39\xf7\x77\xe0\xb1\xeb\xd5\xbb\x97\x2f\x5e\x0f\x9e\xdf\xe9\x65\xf0\x43\x98\xcf\x58\xbc\x9c\xd3\x66\x9d\x6a\x5f\x95\x05\x9f\xb0\x0b\x11\x8b\x94\xe7\x24\x3e\x42\x7a\x0a\x70\x15\x41\x97\xad\xcc\xda\xca\xb6\x98\xe6\xd9\x3b\xdf\x73\x1f\x46\xf1\x3d\x1f\x5c\x66\x0d\x24\x65\x80\x9f\x8a\x4c\xc5\xa0\xdc\xda\x62\x68\x64\x86\x56\xe1\x7a\x80\xb1\x35\xa6\x65\x1c\xfe\x75\x69\x8d\xa8\xd5\x52\xda\x33\xdc\x7b\xcf\xdf\xc0\x8b\xce\x46\xb4\x95\x79\xf9\x1e\xb5\xf3\xef\xd9\x6e\x9f\xda\x75\xee\xd9\xee\x80\xda\x6d\xdf\xaf\x9d\xdf\x06\x12\x7e\xfe\x66\xe7\xbe\xed\x7c\x6c\xb7\x7b\xdf\x76\x1d\x6c\xd7\xbd\x6f\xbb\x6d\x6c\xb7\x77\xdf\x76\x3b\xd8\x6e\xff\xbe\xed\x76\xb1\xdd\xc1\x7d\xdb\xed\x61\xbb\x27\x1f\xbf\x9f\x6a\xbe\x7d\x80\x30\x9b\xdf\x13\x66\x17\x61\x3e\xbe\xe7\xfc\x7c\x5a\xf7\xad\xfb\xb6\x23\x3a\x6b\xdd\xb9\x9d\xbe\xf9\xa1\xfe\xea\xb5\x71\xb1\x64\x79\xb2\xb0\x45\xc3\x2e\xcc\xa5\xdf\x43\x3e\xc5\xc0\xb6\x88\x1e\xd4\x9f\x28\xc3\x01\xf9\x4b\xbd\xf0\x9a\xfe\x64\x83\xd5\x40\x17\x5f\xbf\x3f\xa8\x83\xd2\x81\xf7\x9f\x0a\xde\x7f\x56\xc1\xab\x7c\xc7\xed\xc2\x51\xf3\x76\xf8\xe2\x75\x0f\x40\x3a\xf0\xde\x2a\x78\x6f\xab\xe0\x55\x5a\x0e\xec\xe3\x4b\x2e\xc9\x67\x85\xf1\x9d\x2a\x78\xa7\x55\xf0\x2a\x6d\x07\xf6\x61\x4f\x7e\x20\xef\x3b\x84\x67\x99\x10\x38\x57\x92\x02\xbc\x2a\xeb\x81\x0e\xda\x22\xf4\xdf\x9e\x9c\x35\xd1\xb8\xc1\x82\xb7\x77\x33\xbc\x2a\xfb\x81\x0e\x5a\x23\x48\x78\x4f\x4a\xf0\xf6\x6f\x84\xe7\x5a\x10\x68\x92\xf2\xf7\xb6\xd9\xf9\xcb\x77\x67\xc3\x8f\x0d\xe6\xef\xed\xb0\xf3\xf7\xaf\x5f\x34\x3f\xc2\x79\xe2\xef\xed\xc2\x9f\x4f\x3e\x82\x5b\x21\x98\xb1\x19\x73\x76\x4d\x8b\x0a\x12\xe6\xe0\x63\x73\x1e\xf3\x0b\x91\x36\x30\x63\x84\x07\x99\x00\xae\xc0\xba\x07\xa4\x91\x79\xcb\xca\x2e\x25\x3b\x0f\x33\xc6\xa3\x2c\x29\xbc\x37\x79\x19\x6b\x7e\x52\x76\x40\x92\xb8\x5d\x6f\xd6\x21\x66\xb5\x34\x99\x80\x51\xbf\x90\xa4\x94\x42\x1f\x8e\x2f\xe5\x67\x75\x37\xfb\x7f\x5b\x36\xde\x90\x84\xce\xf1\xc6\x45\x23\x4a\x6c\xf0\x06\x7a\x77\x12\x86\x38\x31\x14\x6e\xb3\xcb\x32\xb1\x0c\xd0\xa2\xac\xf3\x77\xaf\x6a\xba\x59\x90\x26\x94\xb2\x1b\x7f\x85\x8c\xa3\xe3\xe5\x74\x2a\xd2\x6f\x9f\x3b\x08\xf4\x9b\x52\x33\xba\x53\x9f\x25\x73\xf1\x5c\xac\xb3\x53\x1c\xd0\xaf\xf6\xbc\x2d\xbf\x02\x4c\x22\x55\x69\x66\x6a\xaa\x5b\x66\xdb\x85\x5e\x2a\x4c\xb5\x95\x61\xa3\x83\xad\x67\x6e\xa8\x66\xfb\xdb\x6b\xfc\x56\x4e\x49\x6d\x42\xaa\x22\x26\xe5\xe4\x31\x44\xd0\xad\x4b\xa6\x8c\xf5\xfe\xd1\xeb\x23\xef\x26\x7f\xc0\xf2\x54\x9b\x01\x7f\xcf\xf5\x19\xdd\xb0\x3e\xa3\x3b\xae\xcf\x30\x9e\xfc\x8b\x2f\x0f\x5d\x64\xef\xb6\x42\x0b\x7e\xb1\x71\x85\x4a\x48\x3a\xdf\xfd\xbb\xf7\xf4\x56\x0c\x61\xff\xdf\x8e\x24\x44\x42\x9e\x2e\x05\x3b\x1e\xbe\x00\x47\xda\x6c\x39\x86\xd0\x40\x22\xe7\xc6\xaf\x41\xf9\x19\xbe\x8e\xcd\x51\xd0\xa0\x78\xb5\x97\x31\xb1\x65\x1e\xa9\x3c\x51\x0c\x03\x21\x52\x5e\xf3\x0b\x91\x33\x2e\xe1\x53\x8a\x14\xcc\x94\xf0\x98\x05\x11\x0f\xe7\xe4\x8d\x52\x68\x1f\x27\xb9\x72\x45\x6e\x38\x7d\x48\x28\x18\x28\x5a\xa7\x3c\x87\x18\x42\x31\xc5\x73\xe0\x18\xad\x17\x53\x04\x86\x10\x82\xda\x9a\x05\xeb\x73\x88\x17\x1b\xab\x7a\x8b\x54\x4c\xa1\x83\x80\xc7\x72\xe6\x14\x34\xc4\x9d\xbc\x0e\x1f\x11\xf0\xec\x3e\x44\x72\x2c\xa2\xbb\x1d\x2e\x3c\xca\xb5\x0f\x07\x26\xe5\x33\x2e\x1d\x3f\xfc\x40\xbb\xac\xd4\xc4\xce\x83\xf6\x83\x71\x49\x28\x93\x14\x18\x50\x3c\x2d\x1e\x3b\xdb\xff\x8c\x63\x47\xeb\x4a\xfe\x88\x9d\xd3\xbd\xeb\xce\x81\xb0\x43\xff\xda\x0c\x46\xa9\x63\xee\x86\xa7\x12\x73\x2e\x88\x27\xb6\xab\xe9\x26\xc4\xbc\x08\x63\xcd\x52\xee\x81\x18\x37\x3a\xd3\x37\x3a\x72\xdd\x7e\xe6\xfc\x44\x6b\xdd\xf3\xd8\x21\x9d\x2a\xbd\x7f\x02\x1d\x1b\x4d\xd7\x3f\x76\x81\x0c\xe5\xfe\xeb\x2f\x51\xdf\x2c\x51\xdf\x5d\x22\x4c\x3d\x47\x41\x9c\xe6\x3c\x5d\x6f\x41\x40\x84\x98\xe7\xb0\x58\x42\xc4\x99\x72\x3f\x2f\x2f\xde\x5d\x57\x09\x1f\xcd\x9d\xe5\x51\xe9\x94\x2a\xc2\xed\x18\x64\xaf\xc2\x85\x18\x24\x71\x2e\xe2\x3c\xfb\x66\x26\x01\x4f\xa9\xf0\xe6\xea\xb7\x5a\x07\xc5\x47\x55\x45\x86\xf2\xa6\xe4\xc4\x9b\xa0\xd3\xd6\xdc\x9d\x10\x84\x79\xc1\x3d\xa0\xe4\x7c\x18\xc2\x29\x5a\x53\xca\xb7\x85\x08\x42\x1e\x59\x01\x90\xe6\x70\x8b\x83\x50\x17\x09\x76\x13\xc6\xec\x5a\x4e\x44\x76\x7e\x11\x27\x73\xd1\xd4\x33\x47\x0f\xd1\x94\xc7\x17\xf0\x84\x9c\x0a\x80\x0c\xfd\x75\x5a\xad\x7d\x38\xcf\x25\xa8\x95\xca\x58\xc6\x60\x52\x98\x08\x89\xc4\x02\x88\xa6\x8a\x5a\xcd\xd5\x2c\x89\x14\x38\x1a\xd9\x9d\xd7\x8e\x2c\x4e\x6f\x58\xbd\x7f\xbe\xab\x59\xf9\x1c\xd7\x98\x94\xcb\x4e\x73\x18\x8b\x94\x8e\xe7\xaf\xbd\x2c\xaa\x94\xb7\x9b\xd3\x97\xb8\xe9\x6f\x7d\xef\x50\x9f\x8b\x3e\x49\xe3\xf8\xa5\x63\xbe\xa8\x57\x39\xfb\xf3\x76\xe1\xf3\xb9\xfb\x79\xa7\xf0\xf9\x97\x5f\xdc\xef\xbb\x85\xef\x1f\xdd\xcf\xdd\xc2\xe7\x5f\xdd\xcf\x7b\x85\xcf\x9f\xdc\xcf\xfb\xd6\xa4\xb4\x3c\xa3\x3e\x1e\x58\x1f\x0f\xbc\x52\xe8\x00\x7b\x2f\xf6\xa2\xfc\xde\x5b\xf1\x2e\x14\x4b\xe6\xcb\x37\x10\xec\x2d\xe4\x82\x00\xbe\x9d\x5a\x6e\xad\x49\x4a\xa1\x8d\xdc\x0a\x8c\x42\xfe\x08\x14\x29\x13\xf1\xaf\xc7\x11\x41\xf8\xe7\x22\x89\x04\x87\x5f\x07\x90\x3a\x32\xce\x45\xba\x48\x4d\xe6\x7b\x0a\x0f\x0b\x37\x94\x20\x59\xac\x59\x90\xcc\xe7\x3c\xae\x4e\xcf\xb1\x81\xf3\x0d\x6e\x42\x11\x05\xa3\x10\xca\xc3\x77\x03\xba\x2e\x44\x7e\x4c\xb1\x93\x6a\x75\xf9\xd7\xa9\x6a\x63\xe5\xe9\x7b\xa8\x01\x41\x7c\xe3\x28\xe2\x8b\x4c\x4c\x9c\x60\x11\x0e\x74\x29\x29\x0c\x06\x72\x56\x05\xf4\xdb\xe9\xa8\xd0\x60\x49\x99\x14\x01\x0e\xec\xc8\xae\xb6\x61\x12\xe2\x52\x62\x52\x3d\x61\xb6\x0c\x9c\x37\x94\xca\x51\x59\x5d\xb1\xf1\x9a\x45\x22\xcf\x55\xbc\xb8\x42\x6e\x49\xec\x16\x4d\xb1\xe6\x49\x96\x1b\x40\x54\x91\xf2\xbd\xaa\xe8\x3a\x8f\x93\x38\x5a\x3f\x66\x2b\x0e\x91\x9e\x30\x7a\x70\x2e\xae\x73\xe5\x30\x1c\x44\xe1\x02\x95\xee\x96\x53\x2c\xb9\xc4\x7a\x93\x34\xbc\x12\xcd\xf1\xda\x63\x2b\x31\x56\x63\xbe\x81\x78\x21\x25\x8a\x5e\x81\xde\x34\x17\xa9\x44\xa3\xed\xbb\x9b\x89\xfc\x2c\x9c\x8b\x64\x99\xd7\xcc\xaa\x04\xb4\x26\x67\xc9\x30\x9e\x40\x40\x57\xf3\xb1\xde\x60\xbb\x26\x1b\x55\xc1\xd5\xf5\x2e\xfe\xb1\x56\x56\xa9\x87\x37\xac\xf3\x4d\xcb\x8c\x86\x64\x7f\xc4\x62\xcf\x79\x0c\x82\x8d\x32\xc2\x83\x8c\x3c\xab\x24\xbd\x84\x58\x4c\x59\x98\x2f\x29\x62\x24\x64\x49\x35\x80\x54\xc0\xb0\x96\xb8\x16\xc1\x00\xf7\x5e\xcd\x93\x20\xbd\x3a\x6a\x9f\xa3\x64\x65\x12\xb0\xfd\x4b\xac\xd9\xa6\x01\x24\x8b\xb5\xee\xff\x2c\x19\x28\x82\xac\x15\x02\x96\xdf\xe9\x06\x60\x45\x34\x37\xc7\x68\x7b\xbb\xfa\xea\x44\x1c\xee\x95\xe4\x70\xc9\x02\xc2\xf6\xc7\x62\xa5\x74\xfe\xc4\xfa\xe1\x29\x3b\x4a\x50\xf6\xbf\x97\x60\x77\xdb\x09\x50\xa6\x38\xec\xb9\x25\xc7\x52\xd3\x2b\xac\xfb\x9e\x81\x12\xc7\xf3\xca\x51\x87\xbc\x00\xa4\xd2\xa3\x38\x69\x04\x51\x92\x89\xa3\xb5\xc8\x1a\xa9\xc8\xc2\xdf\xf1\x57\x75\xb9\x48\x33\xf8\xd3\x73\xf2\xdc\x11\x88\x79\x18\x87\xf3\xf0\x77\x3e\x8e\xb0\xcd\x2a\x9c\xe4\xb3\x23\x8f\x3d\x51\xa3\x0a\xe3\x58\xa4\x1f\x64\x69\x55\xf3\xc6\x4c\x84\x17\xb3\xbc\xd4\xe0\x19\x14\x7f\xdb\x55\x4e\x2e\xa1\xb8\x71\x09\xdf\xc3\x21\x95\x65\x4b\x29\x25\xe3\xb3\x89\x75\x20\x15\x03\x05\x8f\xc5\x8c\x5f\x85\xd0\x02\x03\xbb\xcb\xfa\x14\x18\x57\xa9\xcb\xb2\x4c\x64\x8e\x15\x29\x9a\x23\x60\x0e\xf6\xc7\xd8\xe7\xc6\x26\xef\x29\xd3\x3b\x45\x01\x9c\x46\x21\x3c\x32\xd9\x51\xeb\x3c\xc9\x7c\x9a\x57\x4d\xe8\xdc\x03\x05\x1d\x46\x65\xa5\x01\xdf\x95\xca\xde\xdf\x46\x65\x35\x3b\x18\x89\xca\xe0\xe6\xb0\xc0\xf7\xf0\xd2\x63\x29\xc5\x6b\x6e\x8b\x0a\xae\x49\x4d\xec\xb4\xdf\x42\x65\x50\x27\x37\x75\x39\x31\x88\x41\xb6\x4c\x33\x11\x5d\xa1\x15\x08\x44\xef\x89\x22\x7d\x56\x6d\xbd\x3e\xc5\xb4\x64\x84\x37\x2b\x8f\x1d\xb5\x6f\x31\x79\x3d\xe4\xe3\x68\x0d\x56\xc5\x73\x1e\xbc\x3e\x6d\x50\xed\x2d\x7b\x7d\xac\xc0\xf4\x3a\xe7\xf2\xb3\x64\x25\xae\x44\x4a\x27\x22\x64\x50\x66\xe9\x32\xc6\x78\xfc\x2b\x31\x06\x33\x92\x34\x44\xe2\x83\xc7\xbd\x70\xca\xc2\x9c\x4d\x79\x18\x65\xa0\x2f\x85\x54\x67\x0a\xdc\x94\xd3\x0d\x9d\x58\x83\x7d\x4c\xc7\x3c\x0f\xaf\x84\x21\xad\xda\x2c\x59\x88\xe9\x32\x8a\xd6\x75\x96\xc9\x4b\xeb\x32\x6b\x6d\x10\x37\x6c\xd9\x0f\xf2\x2e\x7c\x0d\xdb\x13\x51\x26\xee\x7b\x36\x16\xf6\x98\xdf\xad\xdc\x63\xe5\x94\xe0\xdf\x9f\x5f\xa2\x09\xed\xff\x2d\x7e\x99\x2c\xf3\xfb\xf1\x4b\x68\xf0\x3d\xf8\xe5\xb7\xc8\xfb\x64\x80\x9f\xd8\xef\xd0\x4a\x04\x85\x90\xd4\x9b\x2f\x02\x18\xc7\xd0\xbd\x0b\x50\x66\x27\x3b\xe1\x81\x25\x2a\x49\x16\x5c\xc1\x43\x61\x0c\x24\x73\x51\xfa\x79\x78\x74\x07\xfd\x4e\xca\xe3\x6c\x1e\xe6\x8c\xc7\x2a\xc9\x64\x2d\x9c\xb2\x62\xfa\x4d\x10\xa5\xea\x14\xd5\x19\xdf\xf7\xbd\xc0\x93\x1d\x7a\x03\xaf\x6a\x60\x8e\x08\xb7\x02\x8a\xc7\x19\x5b\x08\x50\x11\xd5\xe9\x89\x04\xde\x53\x40\xc5\x97\xa0\xc2\x08\x63\x66\xab\x3b\x4b\x96\x98\x99\x5d\xc6\xc9\x2a\x03\x85\x92\x00\xfb\x96\x99\x98\x53\x5e\xad\x48\x56\x4b\x40\x83\x83\x37\x4e\x44\xe3\x8c\x43\x2c\xd5\xa4\xb0\x2c\xe3\x35\x86\x09\x99\x85\x86\xf3\x40\x4a\x9f\x0b\x1e\xde\x6b\xb3\xdd\x7a\xf7\x52\xdb\xe9\x8e\x57\xaf\xa7\xa5\x3d\xca\x3e\x7f\x36\x52\xaa\x7b\x31\xab\xba\x85\x61\x94\x28\xc0\x20\x24\xc0\xa5\x07\xb2\xb1\x90\xd3\x9c\x89\x68\x02\xd4\x62\xd3\x91\x1e\x61\x41\xf6\xd6\xf6\x85\x84\x34\x13\x11\x8e\x82\xf3\x27\x13\x81\x41\x65\xf9\x04\x75\xaf\xc3\xd3\x01\xab\xa6\xa1\x3c\x5d\x1a\x03\xd4\x95\x20\xe4\x53\x78\xf6\x89\x08\xc2\x89\x64\xf9\xf9\x4a\x88\x18\xe8\x0b\x6c\x1a\x81\xc0\xcc\xee\xad\xd4\x67\x39\x01\xc2\x20\xd5\xaf\x93\x8b\x5e\xa5\x3b\x06\x73\xd7\x88\x76\x5b\xe1\x26\x28\xf7\x40\xc5\xf5\xfb\x1b\x64\x7d\x4b\xce\xb7\x03\x46\x6e\x5c\x46\xe7\x0a\x50\xab\xb3\x2f\x5a\xec\xff\x72\x17\x66\x84\xc7\x50\x99\x13\x41\xdc\x9f\xc4\x84\x0c\x82\x65\x7c\xdf\x60\x13\xb1\xa0\xfc\xe3\x49\x5c\x16\x98\x58\x0f\x0d\x82\xa1\xb5\xc5\x41\xde\x63\xbe\x73\xc9\xcb\xee\xc4\xc7\x50\xba\x2b\xc9\x90\x77\xdd\x58\xb7\xca\x63\xdf\xac\xcd\x29\x3e\x1d\xa2\xbe\xe8\xbd\x0e\x34\x75\x33\x24\x1d\x60\xea\x7e\x87\xc4\x33\xa4\xb9\x69\x12\xe7\xec\xf7\x24\x99\x5b\xf9\x0d\xad\x68\x47\x5e\x66\x52\xc0\xca\x5a\x6c\x06\x14\x3a\x0e\x73\x8c\x90\xae\x44\xf4\x9c\x05\x22\xcd\xb9\xaa\x15\x89\x2b\x81\xd9\x49\x59\x2f\x47\x03\xe0\x39\xa7\x24\x0a\x24\x9a\x61\x58\x6e\x9e\x2d\x53\x31\x61\x78\x74\x62\xae\xfb\x34\x59\x41\x98\x5b\x71\x9d\xb3\x09\x64\xa1\xc8\x48\x93\x81\xfc\x98\xea\xc2\xeb\xc2\x8a\x67\x4c\x5c\x2f\xa2\x30\x08\xf3\x68\x2d\xc9\x5d\xcd\xe1\x83\x4e\xb6\x28\x9c\xad\x06\xc3\x53\xb1\xc4\x24\x53\xbe\xc0\xef\xf8\x50\xfb\x26\x49\x73\x2f\x43\xa4\x48\xd9\x01\xa4\xd7\xc7\x14\x73\x4c\x56\x83\xe9\xde\x95\x7a\x5c\x53\xce\x5b\xa8\xe8\x61\x85\xca\xca\x01\xf0\x17\x39\x72\xe7\x21\xd9\xe5\xb4\x70\xfd\x78\xf3\xf2\x2f\xea\x4d\x21\xc3\xb9\xea\xe7\x28\x9b\x09\x6b\x0b\x85\x44\xbb\xeb\x41\x73\xa8\xb4\x11\x08\xa4\x37\xb1\xa0\xd8\xb6\x0e\x0a\x0c\x9d\xed\x6c\xc5\x31\xe0\xab\xb6\xe6\xd7\x2f\x1d\x18\x21\x3b\xcb\x05\x87\x24\x63\x7c\x3a\x95\xec\x27\xbe\x80\x9e\x8c\x44\xed\x30\x59\x88\xf6\xda\xfc\x54\x8c\xf3\x2a\xc5\x85\xa9\xf7\x14\x3a\xfe\xf5\x93\x36\x16\x7c\x1d\x47\x6b\xf6\xeb\x27\x39\xc4\x2b\x1e\x85\x13\x24\xb6\x84\x84\x22\x27\xdd\x7d\x9c\xa8\xd0\xca\xad\xaf\x92\xcf\x6e\x60\xcd\x17\x22\x97\x4b\x36\xe2\x41\x9e\xa4\xb5\x3a\x7b\x68\xe5\x32\xb7\xf3\x0b\xc2\x0d\x2a\x67\xfe\xa1\x8f\xb8\x9e\x42\x83\x86\x3e\x24\xe4\x95\x88\x3d\xd9\x6a\x6e\xb5\x91\x6e\x15\x22\xe1\xda\xe9\x28\x0a\xa1\x3d\x5e\x7a\x24\x15\x0b\x9e\x85\xc8\x1b\x95\x8d\xfd\x92\x78\xe5\x85\xc0\x48\xa0\xf2\x77\xbf\xdd\xfe\xf7\x3b\xce\xdd\xb9\x65\x40\x32\x76\x48\x0a\x72\x73\x76\x7a\xc8\x35\x4f\x2b\xd8\xf6\x0a\x29\x67\x2b\x5e\x8c\x45\x3e\x4a\xe2\xfc\x34\xfc\x5d\x50\xca\x7a\x27\xcf\x2c\x28\x91\xe5\xc6\xbc\x49\x88\xd1\x00\xea\x56\xc6\x5b\x35\x86\xa6\x27\xe5\x98\x32\x75\xa1\xb5\xb6\x19\x1f\xf4\xd2\x3c\x62\x7e\x65\xb6\x5b\xf8\xfa\xc4\x7c\x7d\x70\xe3\x2b\xb8\x35\x24\xd9\xb0\x7e\x77\xf1\xde\x7a\xa0\xbd\x47\xda\xa8\x05\x65\xab\xfa\xbf\x92\x3c\x1d\x73\xae\xc9\x01\xe8\x6c\x00\xe3\x30\xc7\xa7\x76\x15\x84\x0f\x62\x58\x83\x0c\x37\x0d\x63\x41\x06\x12\x85\xc4\xbd\x67\x76\x3e\x01\x48\x85\x06\x26\xc3\x22\x5e\xce\x05\x66\x2e\xa7\x71\x65\x39\xcf\xc3\x80\x55\xe5\x3d\x93\x70\x74\x3a\x35\x15\x1a\x1b\x82\xc7\x6b\xc8\xa4\x24\x02\x51\x93\xfd\x7f\xec\xbd\x7b\x7f\x1b\x37\x92\x28\xfa\xbf\x3f\x05\xa2\x3d\x1b\x92\x63\x92\x92\x9c\x38\x0f\x3a\xca\xae\x2c\x2b\x89\x6f\xfc\xba\x92\x6c\x67\xd7\xf2\xf8\x82\xdd\x20\xd9\xa3\x66\x83\xd3\x00\x45\x31\x13\x9f\xcf\x7e\x7f\xa8\x2a\xbc\xfa\x41\x52\x8a\x93\xb3\xb3\x7b\xfc\xdb\xcd\x50\x24\x50\x00\x0a\x85\x42\xa1\x9e\x13\x9e\x2b\x01\xa2\xee\xde\x5f\xf6\x8c\xe4\x5a\x2e\xe1\xe2\x2b\x94\xbd\xd0\xc2\x0a\x07\x58\x95\x6d\x0c\x85\x7f\x95\x28\x34\xf5\xc7\x0e\x46\x40\x84\xdf\x0b\xa9\xf1\xb1\xb1\xf7\x97\x3d\x0f\x0b\x4a\xf9\x09\x55\x74\xa0\xac\x9b\x6e\x77\x38\xb0\x75\x4b\x83\x0b\x49\x2d\x44\x12\x38\x17\xd8\xda\xc2\x27\x72\x09\x0f\x86\x83\xb0\x92\x0f\x26\xc3\x04\xcb\xb8\xfd\x13\xce\xd9\x2e\x45\xe3\x26\xb2\x34\xb8\xf2\xd2\xe8\x5c\xa6\xa1\x0f\xc9\xbb\xb9\x4c\xdf\x13\x70\xfc\xfc\xdb\x6f\x88\x82\x47\x91\xae\x85\xda\x1d\xb1\xce\x5f\xdc\xa5\x50\x9f\xf9\xfd\xfb\x70\xd2\x50\x97\x6d\x7e\xee\xc5\xfe\xd9\x6f\xcc\xed\x50\xa1\x88\x2d\x48\xf3\x6b\x61\x47\xec\xdd\x3d\xc6\x3a\x70\x25\x76\xfa\xa8\xff\x33\xff\xcb\x73\xf8\xd3\x3c\x3e\x3a\xf7\xde\x87\x74\x9c\x60\x89\x6a\x48\x92\x0e\xfc\xd7\x30\xe6\x63\x28\x87\xe0\xe5\x06\x28\x85\xdd\x8b\x64\xb1\xa8\xca\xbf\xb9\x59\x15\x45\xaf\x1b\xe9\x09\x6f\x59\x5e\x42\x1d\x3f\x2c\xa4\x6c\xab\x83\x24\x5a\x28\x6d\xcb\x9c\x2d\x6c\x61\xe9\x49\x56\x2a\xdd\xc7\xd7\x2c\xd7\x2c\x97\x52\x89\x7c\xed\x4a\x4e\xb9\x76\x70\x41\x72\x66\x9e\xdb\x50\xda\x48\x96\x99\x5e\x9b\x3e\x50\x81\x04\xea\x17\xb9\xc6\xb7\x28\x44\xcf\x77\x6c\x37\xde\xb2\x11\x41\xcd\xef\x90\x92\x7d\xbe\x61\x43\x2b\xbc\x42\xca\xdf\xb1\x71\xfc\x4d\x24\xb2\x0f\x0e\x9d\x85\xb1\xda\xf1\xfb\x8d\x1d\x0f\x43\x71\xfe\x20\xa2\xb1\x57\x65\x76\xcd\xb5\xb0\x59\x7d\x2d\x9b\xb2\x85\x17\xa9\xb6\xd7\xc2\x96\x0e\x37\xcf\x7e\xa5\x49\x58\x09\x7e\x51\x54\x70\x12\x2a\x54\xc8\x55\x81\x1e\xa9\x35\xbc\xdb\x32\x93\x86\x6c\xa8\xbe\xa4\x0e\x2a\x52\xba\x76\x54\x46\xf2\x23\xb2\x23\x74\x87\x25\x5b\x18\xe5\x4e\x0f\xcb\x8b\xbf\x56\x62\xb2\xcc\x31\x51\xc3\x5a\x2e\x81\x04\xb1\xd0\x8e\x96\xb6\x26\x0f\xf0\x23\x24\x0a\x5c\x9b\x5d\x0a\x2f\x6a\x8b\xd9\x76\xc6\xfc\x61\x00\x50\x91\xe8\x2c\xc7\x7f\xeb\xe3\x38\xcf\xcd\x6f\x75\xf3\x3b\xb0\xa7\xcf\x8e\xcc\xf2\xed\x9f\xd1\x5e\x11\x37\x21\x11\xa6\xbc\x76\x19\xbb\x3f\x01\x0b\x33\x10\xe7\x32\x7d\xc3\xf3\xa5\x21\x4a\xf3\x93\xb9\x52\xe4\xf8\x6f\x3d\xf6\x6f\xe6\x7f\x90\x6f\x8d\xaa\x2c\xed\xb3\xf2\xda\x30\xba\xee\x67\x7e\x61\x56\xb3\x1f\x71\x3a\xd3\x28\xfa\xd2\x0e\x16\x0b\xc6\xb6\xca\x81\x59\x9b\x1b\xa9\xc2\x06\x3d\xbd\x96\xd7\x8f\x9a\x0a\xa4\x12\x61\xd4\x2b\xa0\x12\x5d\x65\x58\x7d\xd1\x57\x4a\x8d\x49\xf9\x7f\x66\x01\xd4\x76\x22\xa6\xa2\xa1\xad\x45\x50\x43\x5d\x00\x52\xbd\xfd\x9d\x64\x80\xde\x6e\xbb\xd4\x7e\xdd\x67\xca\x17\x9d\xb3\x6a\x7d\x4e\x52\x08\x68\x57\xc5\xee\x5c\xfc\xd6\x6b\x6f\x90\x39\x7c\x59\xd5\x4d\x18\xa0\x26\x7d\x58\x6a\x6f\x17\x49\x58\x2e\x50\x76\xfe\x27\x2f\x9c\x4a\x1b\xfd\xef\xe6\x57\x33\xc8\x75\x26\x56\x54\xba\x25\xcb\x05\xcb\xe6\x0b\x2a\x01\x14\x14\x23\x7b\x89\x4b\xc7\x72\xa5\x50\x86\x08\xcb\x51\x2a\x2d\x4b\xa1\x5c\x46\x74\x73\x16\x30\x79\x7a\x22\x8b\x94\x2a\x3d\xd9\x47\x62\xe4\x55\x69\xe8\xc2\x1e\x77\x03\x0e\xae\xaf\xf0\xf5\xce\x94\x28\xcd\x19\x94\x13\x06\x44\x23\xa0\x9a\xa9\x53\xd0\x29\x7e\x9d\x15\xd3\xfd\x52\x98\x19\x50\x01\x23\xcc\x05\x40\x35\x92\xec\xe8\xe6\xb1\x9a\xaf\xa9\x78\x93\x34\xe7\xf5\x3a\x4b\xb1\x1c\x19\x57\x6b\x72\x73\x31\x53\x4c\xe4\x7c\x2e\x0b\xd3\x75\x92\x4d\x97\x25\xa8\x93\xe0\x6e\xa4\x5d\xb7\xf1\x1e\x65\x36\x85\x84\x24\xb0\x51\xe3\x35\x3b\x91\xe5\x9a\x3d\xe7\x49\xc2\xcb\x92\x48\x7d\xdf\xfb\xf5\xca\x42\xe9\x72\x69\x1e\xde\x0e\x0f\x4d\x18\xa5\x51\xc0\xbd\x94\xa3\xd6\xc2\x69\x6c\x69\x41\x16\x4e\x83\x99\x1a\x5f\x1b\x5c\xc5\x8c\x46\x2f\x46\xfb\xfb\xab\xd5\x6a\x78\xad\x0f\x0f\x0e\x86\x85\xd0\xfb\xa9\x4c\xd4\xfe\xb5\x7e\x78\x78\x30\x28\xe7\xfb\x4f\x4e\x4f\xce\x2f\xce\x50\xe6\x4a\xc4\xc2\xaa\xbe\xcc\xbb\x05\xcb\x72\x2d\xb5\x5c\x95\x7c\xc1\xba\xe6\xbf\x58\x4c\xb5\x17\x26\x12\x47\x3f\x57\x2c\xa5\x27\xc4\x5c\x91\x56\x6b\x2c\xd8\xca\x7c\x87\x5e\xb5\xe6\xe9\xd0\x7c\xfe\x09\x05\x47\x1f\xcd\xea\x3f\x80\x72\xfa\x25\xa1\xc1\x95\x25\x00\x6d\x9a\x5c\xac\x51\xc8\x08\xd0\x10\x30\x0a\x8b\xca\xf0\x32\x27\x80\xce\x33\xd6\x9c\x40\xae\x75\x99\x8d\x97\x1a\xca\xac\x93\x71\x06\xca\xef\x1a\xec\x2d\x96\xe3\x3c\x4b\x3c\x81\x01\x75\xf0\x24\x11\x4a\x51\xc8\x27\x02\x72\x54\xec\xe2\x2a\x3c\x72\xd8\x91\x5f\xc9\xbf\xb9\x8f\x61\x83\x91\x2b\xe2\x41\x95\x4a\xaf\x45\xa9\xc4\xdb\x6d\x10\xea\xed\x82\x9b\x1e\x20\x49\x20\xcb\xe7\xf8\x82\x6a\x02\x11\x34\xa8\xf6\x35\xfb\x7c\xc2\xcb\x32\xe3\x53\x41\xec\xbf\x19\x46\x43\xc3\x2a\x2c\x3c\x83\x6f\x32\xac\xdf\xd4\x0c\x26\x6e\xd3\x0c\xe1\x71\x9e\x15\x57\x1b\xfb\x63\x8b\x6a\xef\x0c\x02\x52\x37\xe0\x21\x68\x50\xed\x4b\x58\x7e\x93\xa5\x42\x6e\xde\x08\x6c\x52\xed\x3f\x2e\x79\x72\x25\xb4\x48\x31\x1e\xb6\x19\x42\xa5\x91\x83\xb1\xfd\xfa\x59\xf0\x52\x89\xf2\x9f\x5d\xf7\x72\xdb\xb2\xdd\x95\x33\xcf\x5e\x19\x2c\x34\x97\x03\x5c\x17\x9a\xdf\xe0\x4d\x62\x78\x2d\x9a\x53\x9d\x2d\x6f\xa9\xb4\x9c\x67\xbf\x72\xc7\xcd\x2d\xfb\x00\x88\x65\xbd\xf4\x19\x4c\x80\x99\x29\x18\x81\x83\xfd\x03\xcb\x62\xe2\x13\x88\xd0\x85\x5f\x81\x96\xf3\x2f\xfb\x96\x0c\xe8\xb7\x23\xd6\xc1\xe0\xab\x2a\x9c\x02\xfc\x75\x11\x8e\x2b\x25\x22\x95\xad\x45\x1c\x82\x5a\x48\x85\x4a\x92\xd6\xe9\xfc\x1b\xc1\x71\x6e\xfe\x14\x39\xb8\x05\x70\x32\x63\x47\xbe\x70\x7c\x84\x88\x40\xc6\x12\x65\x29\x23\xc4\xcc\x85\x52\x7c\x2a\x22\xb1\xaa\x10\x2b\x76\x6a\x1a\x76\x3b\x00\x80\x61\x2f\xae\xa1\xf0\xa4\x5b\xc6\x7d\xd6\xc1\x52\x94\x16\xc6\xc6\x91\x33\x65\x5e\xe0\xb9\xd0\xa2\xbe\x2f\xa1\x38\x07\x08\x3a\x0a\xf1\x6e\x0b\x0a\x6e\x82\x5e\xab\x75\x87\x5d\xe1\x16\xfe\xb0\x90\x2a\x50\x58\xb9\xcd\xc4\x0f\x8f\xe2\x9d\xa1\xf6\xe6\xf5\xe4\x35\x59\x80\x5b\x9a\x4c\xac\xb4\x0e\x5f\xef\x80\xaa\x7a\xb4\x15\xea\x73\xc2\x6f\xcd\x71\xa4\xd7\x0a\x3e\x54\xa4\xab\xcb\x1e\xd4\x49\xf2\x37\x3f\x94\x05\x0f\xd7\x4d\x65\xa5\xe1\x69\x61\x3b\xfc\x2c\xd6\x2a\x72\x79\xe0\x2e\xe3\xcd\x90\xb1\x9f\x05\x09\x1d\xa9\x70\x9e\x69\x1c\x7c\xa1\xc4\x14\xdd\xde\xcd\x5f\x0e\xac\xb3\xa2\xb5\x0e\x6b\x0b\xe8\x0f\x19\x7b\xee\x4b\x3b\xa1\x92\x15\x2b\xeb\xfb\x52\xbc\x7f\x93\x66\x21\x20\x47\xe0\x7b\x22\x85\x1a\xdc\x41\xc4\x0a\x22\xa9\x60\x86\x81\x96\x99\xba\x02\x6d\x25\x4d\xd3\xaa\x41\xb2\x22\xc5\x32\xa8\x2e\x96\x76\x59\xf8\x7a\xa1\x91\xd2\xd5\xdc\xfe\x56\xfc\xb2\xd0\x83\x02\xd8\x23\x7c\xd4\x1d\x8f\x18\x3c\x9f\x05\x79\xde\xf2\x28\x47\xd5\xde\xf1\x5e\x3c\x45\xc6\xd8\x57\x0f\x47\xec\x1c\xdf\x42\x98\xa4\x8c\xbe\x3f\xb8\xf9\xf2\xb0\xf9\x17\x70\x52\xab\x0e\x84\x5f\x86\x2d\xda\x00\xc3\x8f\x5b\xa0\xa3\xa5\xbb\x71\x0c\xfa\x29\x6c\xfd\x97\xb0\x25\x4e\x04\x2a\xe5\xae\x84\x11\xa7\x54\x50\x75\x31\xa2\x58\xc0\xb9\x4d\x12\x4a\x85\x93\x0d\x43\xc8\x05\x57\x81\xed\xc9\x10\xc0\xb1\xab\xf2\x0b\xcc\x9e\xce\xb6\x7b\xd4\x57\x1e\xf3\xa0\x12\xed\x83\x49\x31\x28\xa7\xd3\xb7\x64\x84\x43\xf9\x07\x7c\x9d\xcb\x07\x4c\x00\xae\xd3\x9f\xc5\xfa\xdc\xce\xba\xc6\x68\x9c\x1a\x07\x75\x30\xae\xa0\xae\xe1\x9b\xf7\xa0\x4a\x52\x58\xdd\xf4\xca\x3f\xef\xb7\x1c\x3c\x57\xea\xea\xfa\xdd\x4e\xed\xdf\x5d\xbd\x7f\x1f\x29\x5c\xcc\xb8\xab\x99\x79\xac\x75\x1d\x33\xfa\xae\x81\x09\x46\x41\x94\xea\x2a\x5b\x9c\x2f\x78\xe2\xad\x57\x66\xd6\x5a\x5e\x09\x17\x34\x01\x28\xb9\x30\xdf\x58\x8f\x6a\xd0\x7f\x99\x2f\x86\x70\xe9\x1c\x1d\xb1\x0e\x71\x81\xc0\xa2\x55\x5e\x07\xda\x7b\x6c\x7d\xcd\x73\xd2\x7c\x39\x0b\x57\x13\x28\xb7\xe0\x4e\x5c\xad\x6d\x99\x58\x4d\x57\x00\x6e\xa8\xe5\xeb\xc5\x42\x94\x27\x5c\x09\xef\xf1\x6d\xc0\xda\xe6\xbb\x6e\x80\x0f\x21\xf7\xee\x0d\x5b\xba\x0c\x67\x5c\xbd\x5c\x15\xaf\x48\xdd\x63\x87\xec\x85\xce\xef\xa4\xa4\x73\xa5\xa5\xb6\x6d\x2b\xc1\x78\xff\xc8\x41\x30\x8b\x29\xaf\x51\x09\xf7\xf9\xe7\xcc\x7e\xfc\x2c\x32\x47\xe0\x8e\x96\xe0\x71\x97\x29\xbc\xa4\xc3\xc2\xcf\x76\x0c\xbc\x6e\x03\x04\xf6\xfc\x40\x16\x72\xa0\xa2\xac\x6c\xd5\x2e\x38\x75\xdc\x3b\xc2\xe7\x36\xb4\xba\xcb\x60\x07\x94\x46\xa4\xb5\x15\x62\x80\xd1\x78\x41\x1e\x60\x1d\x71\xaf\x8b\xab\x42\xae\x40\x0b\xd9\x8e\xb1\x8f\xdb\x48\x59\xad\xe7\x63\x99\x77\xe2\x4a\x75\x01\x24\xa7\x68\xf5\x53\xf1\x75\x91\xd3\x5b\xb3\x0e\x4f\x70\x8b\x9d\xc9\x2d\x4b\x03\x4a\x73\xea\xe1\x77\x8b\xf7\xbd\x68\xf3\xe0\x2b\x76\xc4\xcc\x74\x7d\xfb\x8f\xb7\x41\xa8\xb8\x59\x88\x44\x8b\x94\x21\x56\x36\xa1\xb5\x01\x66\x1d\xe2\xa9\x85\x17\x48\x20\x21\xef\xa8\xdb\xca\xeb\xcc\xce\x69\xf2\x93\x19\x9c\xa7\x81\x3b\x4f\xe3\x52\xf0\xab\xa0\x55\x40\x73\x9f\xa1\x90\xdc\xdb\x30\x33\x5d\xf2\xf0\x11\xc2\x27\x46\x08\xd7\xbc\x9c\x0a\x30\x90\x75\xec\xf8\x54\x49\xee\x9a\x17\x89\xe8\x06\xfe\x7b\x95\x11\x8f\xc2\x11\xeb\xe3\x3d\xcf\x94\x02\x6f\xce\xea\x00\x15\x95\xfb\x96\x3b\xef\xd8\xc6\xca\x35\x55\x7b\xae\xe2\x6e\xcb\x35\x71\xaf\xf1\x96\xc0\xd7\x49\x27\x32\x90\x54\xaf\x86\xdd\x6e\x84\xea\x41\xda\x74\x54\x38\x55\x96\x0e\xf8\xd1\xb6\xb6\x55\x2e\x14\x92\x69\xa3\x7b\x7d\x3b\xa8\x77\x41\xdf\xf7\x6e\xdb\x37\xf0\x1b\x72\x92\x6f\x3e\x1f\x94\x14\xa8\xf5\x2c\x20\x86\xeb\x47\x61\xe3\xfe\x0b\x71\x85\x41\xdd\x9b\x9f\x55\xe6\x09\x73\xc4\x3a\x97\x9d\x8e\x35\x0c\xd9\xaf\xf6\x3a\x9b\x09\x4c\x88\xab\xa7\xfe\x61\xb0\x65\x10\xd4\xc6\x77\xf7\xdf\xf1\xc1\xaf\x1f\xde\xef\x67\x9b\xdf\x84\x00\x9b\x18\xc0\xae\x80\x0f\x06\xdf\xbe\xdf\xdf\x02\xd6\x51\x73\x1d\x6a\xc8\x34\x62\x06\xee\x65\x43\x03\x64\xe4\x2e\x80\x3e\x83\x1d\x1c\xd9\x99\x7c\x7c\xd4\x76\xfa\xa3\x33\x5b\xf5\xfa\x8a\xf1\x68\x03\x3d\xac\x74\x4c\x43\x06\xfb\x1e\x0f\x0b\x4b\x0a\xbb\x7f\x7c\x54\x83\x8e\x64\xd0\x02\x99\x4e\x6f\x03\x54\xdb\xad\x01\x22\xed\x4d\xdb\x64\x49\x6c\x6c\x9a\xa9\xed\x68\x80\x36\x12\x7d\x70\xa5\xc0\x31\xe9\xec\xb0\xa5\x9b\xc8\xd0\x47\x78\x36\x23\x7a\xd3\x15\x14\x1f\xb6\x8a\x3a\xc2\x0c\x4c\x86\x25\x24\xeb\x83\xc1\xb7\x1f\xde\xdf\xdf\xcf\xa6\xbb\xcc\xb8\x8d\xb8\x0d\xb1\x8d\xb9\x32\x32\xd0\xe1\x41\x8c\x78\x22\xcc\x83\x8e\x0b\xd8\x6a\x7b\x0c\xb0\x01\x3b\xac\xe4\x4e\x8a\x95\x14\x81\xaa\xe6\xb0\xcf\x0e\x7b\x00\xf8\xa6\x53\x29\xcc\x6b\x67\xda\x6d\x58\xf0\xc1\x8d\x39\x70\x7c\x30\x79\x7f\x7f\x7f\x9a\xf5\x6a\xee\x68\x9b\xfa\x5e\xa6\xf7\xf7\xa7\xbd\x66\x25\x89\xb9\xf2\x72\x48\x6f\x98\xca\xe5\x38\x17\xec\xef\x4b\xe9\x59\x60\x68\x10\xa9\xaa\xbd\x5c\x79\x08\x99\x15\xda\xea\xc6\xe0\xae\xe6\x39\x42\x09\x9e\xed\x8c\x9d\xc3\x40\x06\x58\x34\x82\xc2\x20\x80\x31\x25\xf3\x10\x29\xcb\x33\x2d\x4a\x9e\xe7\xeb\x7e\x65\x4a\xd0\x70\x51\x4a\xb0\x1b\x08\x88\x0e\x70\xaf\xdb\x8b\x97\x4f\x5e\x76\xcb\x69\x56\xa4\xbc\x37\x62\x6f\x78\x99\x81\x99\x05\x1d\xcc\x65\xee\xc2\xa0\x42\x4b\xc9\x2b\x3c\x74\x5c\x8b\x8f\x6c\xe1\x3e\x87\x2d\xac\x5a\x12\x57\x73\x5c\x43\xd6\xa0\xba\xcc\xe8\xa1\x4d\xbd\xb7\x3e\x94\xdb\x6e\x0d\xe0\x83\x42\x2d\x73\xed\x15\x9e\xe6\x3b\x1c\xf4\xc8\xb2\x41\xeb\xb0\x89\x5f\x7f\x06\x17\x89\xa1\x58\xff\xf7\x65\xa7\xd3\x76\xf6\x68\x6c\xcb\x02\xe8\xdc\xd5\x58\xaa\x9b\x0d\x3b\x02\xa5\xe4\x99\x98\x9e\xde\x2c\xba\x9d\x77\x97\x97\x97\x97\xe6\x86\xc5\xc1\xee\xb3\x0e\x14\x46\x99\x12\x9c\xdb\x3c\xa4\x4b\x31\xcc\xb9\xd2\x4f\x8b\x54\xdc\x38\x69\x48\xaa\xd0\xdf\x42\x40\x9c\x75\x37\x80\xd1\x6b\x17\x1f\x5f\x17\x64\x4e\x0a\x2e\x74\x22\x2d\x27\x38\x12\x76\xef\x1f\x35\x9c\x59\xc3\x8a\xed\x24\xfa\xf1\xec\x06\xec\xb0\x51\xf4\xac\x34\x72\xcb\x0e\xda\xfb\x8d\x3a\x72\x1b\x15\x89\x05\x97\x55\x77\xdb\xea\xcd\x56\x9b\x35\xd0\x10\x06\xcb\xf8\xa7\x7b\x22\x0b\x9d\x15\xb6\xa6\xfd\xc7\xa6\xc1\x8d\x04\xb2\x69\xf4\xca\x30\x48\x68\x1b\xa6\xd5\x3a\x64\x30\x02\x8c\xbe\xc3\x02\x6d\x05\xed\x65\xae\x2b\xf1\xe4\xb7\xde\x68\xb8\xf8\x62\xa6\x57\x10\xf7\x40\x93\x0c\x64\xf2\x6b\xd2\xeb\xb3\x2e\x19\xe2\x43\x3e\x87\x66\x58\xd3\x1c\x5c\xf2\x02\xeb\xc0\xf1\x0f\x17\xa7\x67\x14\x91\xca\x21\x40\x06\x72\xfa\xe5\x5c\xcd\x86\xbd\xaa\x12\x6e\x57\xde\x40\x41\x50\x8d\xbc\x61\x0e\x9e\xdc\x88\xcb\xce\x5e\x67\x64\xfe\x83\x3e\xfd\x66\x6f\x47\xf0\x5f\xfb\xf7\x25\xfc\x7d\x69\xff\xe6\xf0\xe7\xcd\xc1\xd7\xf6\x8b\x31\x7d\xf1\x8d\xfd\x42\x74\x28\x9d\x96\xfd\x62\x42\x2d\x12\xfb\x45\x41\x5f\x70\xfb\x45\x49\x5f\xa4\xf6\x0b\x4d\x5f\x7c\x6b\xbf\xb8\xa6\x2f\x1c\xd0\x9b\xce\xa8\xba\x32\x2b\x01\x5e\x5b\x2d\x55\xeb\xe5\xff\xfe\x1f\x0f\x3e\xe2\xed\x1f\x91\x4d\x53\x66\x25\x77\x3b\x02\xd4\x3e\x3b\xfc\xaa\x67\x5f\xb6\x34\x93\xe5\xef\x9b\xc9\x97\x9f\x60\x26\x4e\xef\x19\x84\x96\x24\x33\xc8\x10\xc9\x17\xe6\xa8\xce\xf9\xa2\xf6\xa4\xc2\x46\xbd\x56\xe1\xca\x3e\x89\x90\xe2\x47\xde\x70\x94\xcc\x3c\x5f\xb7\x2b\x9c\xf3\xc5\x3b\xfa\xf1\xfd\xa3\x96\x7b\x00\x4e\xf4\x7a\x21\xe4\x84\x79\xed\x8b\xc5\x1c\xdd\x33\x16\x1e\xea\x16\x13\x9e\xe7\xe8\xc2\x16\x0a\x75\xf4\x56\xad\x89\x24\xde\x2b\xca\xfa\x57\x2a\xcd\x4b\x70\xdb\x68\x3d\xa9\xd5\x9b\x1d\xaf\xa7\x8f\x0e\xc2\xb1\xfb\x14\xb9\x9d\xe9\xd0\xba\x07\x0e\x30\x6a\xc1\x8b\x21\x63\xcf\x5f\x9f\x5f\xa0\xc2\x9b\x34\xed\xd0\x74\x6f\x9a\xcb\x31\xcf\xf7\xe8\xf6\x63\x93\x9c\x4f\xef\x76\xe3\x37\x38\x56\x2d\x42\xaf\x2a\x20\x00\xeb\x93\x87\xa3\xb6\xed\xaf\x11\x6c\xcb\x82\xe7\x68\x1a\x1c\xb1\xf3\x05\x2f\xbc\x3b\xb0\xf5\x4c\x47\x18\x74\xef\x59\xc0\x6d\xd7\xad\xa1\x08\x5e\xae\xd9\x91\x6b\x59\xbb\x76\x3d\x99\x9a\x86\xbf\xfd\xd6\x00\x73\x60\x60\xbc\x3b\x78\x6f\x45\xe4\xcf\xfc\x20\x5b\x1f\x02\xce\x43\x11\xe9\xd5\xe2\xc6\xcb\x26\x68\x22\x6c\x1a\xf4\xb0\x8d\x6e\x69\x8f\x70\x52\xf1\xb5\x70\x8c\x2d\x77\x22\x2d\x6b\x61\x4e\xe4\x12\xfc\x69\x5b\x37\x9a\x86\x0f\xf7\x18\xfa\x04\xda\x20\x78\x10\x1c\x21\xa8\xd8\xc4\xb9\xe1\x09\x51\x33\x77\xc6\xc2\x2a\x79\xfc\xa0\x40\xc7\x8e\x59\x9e\x29\x88\xd1\x83\xa0\x2a\x56\xc8\x62\xb0\x9a\x65\x5a\x60\xba\xd7\x88\xf8\xc9\x39\xd8\xde\xa5\x0c\xd7\xee\x89\xfb\x5a\x66\xe9\x46\xd2\x76\xca\xad\xaa\xb7\x10\x4e\x26\x20\xed\xfd\x4b\xb5\x3f\xd4\x42\x69\xcf\xbf\x82\x77\x50\x2c\x6e\xee\x5f\xaa\xfb\xfb\xd3\x39\xa6\x46\x6c\xa1\x59\x9b\xa9\xca\x1a\x94\x03\xf4\x59\xe9\xd8\x0a\x8f\x91\xdc\x18\xd0\x52\x08\xdb\xd3\xd9\x6e\x9b\x41\x43\x54\x97\x1a\x49\x3f\xc3\xcc\x40\x7e\x39\x89\x5a\x1d\x1d\xb1\xc1\x61\x6f\x17\xed\xac\x2c\xc0\x38\x6d\x4e\x43\xb0\xbd\xf7\x59\xa7\x8f\x0e\x22\x70\x50\x22\x23\x86\x65\xf1\x5e\x7a\xda\xd5\x0d\xe6\x43\xa8\x7f\xfb\x27\x77\x89\x71\xbe\x82\x39\x05\x4c\x83\xd7\x63\x68\x5f\x97\x65\xac\x7c\xac\x53\x78\x80\x0e\x23\x6f\x05\x47\xef\x79\x18\x05\x84\xb1\x49\x60\x24\x07\xa7\x7b\xd4\x5c\x93\x77\xb3\x0b\x61\x0c\x5e\xd4\x46\x14\x2d\x05\x5b\x2e\x16\x10\x7f\x64\xe6\x2d\x6d\x76\xe8\x42\x96\x73\x9e\x43\x34\xab\x8d\x01\xcc\x8a\xc5\x52\x83\x61\x77\x0c\x5e\x95\xd3\xec\x9a\x5e\xe8\x6c\xef\xe4\xe2\xec\xd9\xe0\x78\x0f\xe3\x8b\xd0\x98\x4c\x7f\x40\x88\x28\xdf\x43\x2f\xc6\x3c\x07\xb7\xbb\x85\x16\x69\x98\xf5\x73\xc4\x5e\xc0\xdc\x21\xac\x3f\xe1\x45\x21\x35\x04\xe2\xe6\x7c\x81\xb6\xe1\xed\xf6\xa6\x8d\x58\x8b\x0d\x84\x28\xb2\x42\x75\xc6\x91\x8b\xc4\xb9\xc7\x98\x59\xc3\xc8\x46\xe4\xb8\x9c\x9b\x73\x59\x30\x9e\x67\x1c\xf2\xb6\x9c\xbc\x7c\x71\x71\xf6\x32\x6a\x75\xfc\xcc\x40\x81\xf0\x9d\x7b\x8c\x3d\x3f\xbd\x38\x1e\xd9\x30\x9e\x60\xa3\x7e\x76\xa5\x8b\x96\x41\x58\xc4\xe6\x1d\x7a\x65\x58\x18\x26\xfe\x32\x34\x3a\x97\x4a\xe7\x6b\x96\x8b\x89\x66\x72\xa9\x1d\x29\x03\x83\x1d\x8b\x84\x2f\x6d\x4d\x2c\xb3\x7f\x73\x79\x6d\x76\xd7\x10\x2a\xb8\x5b\xd8\x4c\xe0\xce\x67\x2a\x97\x09\xcf\x05\x6e\x27\xe5\xb5\xb0\xf9\x30\x8a\x8a\xef\x0a\xcb\xb3\x2b\x41\xdb\x7a\x7a\x7e\xb2\xd7\x77\xe9\x12\x12\x69\xb6\x8d\xc4\x22\x3b\x17\x39\x81\xc0\xb2\x00\xfd\x8c\x3d\x05\xd7\x7f\xf1\xf7\x65\x76\xcd\x73\x81\x51\xbe\x08\xf0\xc1\xd7\x21\xd5\x1c\xdc\x1c\x8e\xf7\xfe\x20\x12\xb5\xd3\x0f\x86\x3b\x55\x89\xf9\x93\xfe\x12\xf0\x57\x0b\x9d\xbe\x15\x98\xa5\xc3\x0a\x64\x49\x40\x1a\x41\x45\x2a\x5b\xf2\x6a\xc8\xd8\x1e\x41\x4f\xe1\x13\x5f\x08\x04\x4e\x99\x9f\x5c\xc3\x4f\x72\x0e\x22\x73\xf6\xe6\xb3\xe0\x0c\xbb\x47\xd6\x7f\xf6\xc2\xd7\xd9\x39\x3d\x3f\x39\x7e\x75\x3a\x62\x0f\xbe\xee\xe3\x5f\xf6\xe3\x0f\x87\x23\x76\x78\xf8\x00\x3e\x3e\x30\x1f\xbf\x80\x8f\x5f\x98\x8f\x5f\xc2\xc7\x2f\xcd\xc7\x87\xf0\xf1\xa1\xf9\xf8\x15\x7c\xfc\xca\x7c\x44\x08\x5f\x9b\x8f\xdf\xc0\xc7\x6f\xcc\xc7\x6f\xe1\xe3\xb7\x23\x76\xf8\xe0\x00\x87\x38\x30\x9f\x0f\xf1\xb3\x19\xef\x01\x8e\x77\x68\x06\x7c\xf0\x45\x9f\x52\x62\x9c\x99\x3b\x6a\x25\xcd\x74\x5f\xbe\x38\x1d\xb1\x2f\x01\xd0\xc5\xdb\x97\x23\xf6\x10\x00\x5d\xfc\x74\x76\x7a\x3a\x62\x0f\x11\xd2\xcb\xd7\x67\x23\xf6\x10\x21\x3d\x7d\x63\xbe\x87\xa9\x9f\x3f\xfd\x65\xc4\x1e\xc2\xd4\xcf\x4f\xdf\x9c\xbe\x18\xb1\x87\x30\xf9\xd3\xa7\x3f\xfe\x74\x31\x62\x0f\x61\xfa\x2f\x9e\x9a\x01\x1e\xc2\xfc\xff\xf3\xf4\xec\xe5\x88\x7d\x09\x0b\x78\x7c\x7c\xf2\xf3\xf9\xab\xe3\x93\xd3\x11\xc3\xbf\x7f\x3e\x7f\x65\x3f\x9e\xc3\x87\x60\xaa\xb3\x52\x40\xf2\xbf\x8b\xe3\xc7\x23\x06\x73\xfd\x7f\x47\xec\x1b\x98\xdc\xdb\x11\xfb\x06\x31\x3d\x62\x5f\xc1\x4f\x67\x23\xf6\x0d\xcc\xf5\x62\xc4\xbe\x81\xd9\xfd\xc7\x88\x7d\x03\x3f\xbd\x1e\xb1\x6f\x60\x8a\x4f\x47\xec\x6b\x58\xc3\xcb\x11\xfb\x1a\x7e\x32\x83\x1f\x84\x83\x4e\xe4\x12\xf2\xff\x9e\x1c\xbf\x3a\xff\xf0\xec\xe5\xc9\xcf\x23\x86\x48\x36\x5f\x54\xff\xb6\x9f\x8f\x47\xec\x2b\x18\xc0\x2c\x01\x06\x78\x32\x62\x5f\xe1\x8e\x8d\xd8\xd7\xd0\xe6\xc7\x11\xfb\x1a\xa6\xfe\xd3\x88\x7d\x0d\x13\xfd\x7f\x46\xec\x6b\x98\xe8\xcf\x23\xf6\x35\x74\x7f\x36\x62\x5f\x7f\x45\x1c\xf4\xad\x80\xc7\xa3\x28\xc0\x7f\xb1\x48\xbd\xbd\x70\x2a\xc0\xb9\x48\x5c\x43\x21\x5f\x08\x41\xc4\x56\xa4\xee\xa0\x84\xcc\x63\xc1\x0e\x0f\x10\x96\x65\x72\x86\x13\xb2\x85\x90\x8b\x5c\x50\x62\x68\x28\x98\x20\x0d\x87\x30\xa7\x77\x6c\xd8\x23\x78\xe3\x67\x4a\xcb\x72\x0d\xe7\x69\xc8\xd8\xab\x7c\xa9\x68\x5a\x00\xc2\xf2\x42\xb5\xbf\x28\xe5\xb4\xe4\x73\xc8\x20\x6d\x33\xbe\xd2\xfc\x78\x5e\x0a\x9e\x9a\xf3\x8c\x89\x69\xd6\x76\x62\x18\xcf\x06\x6e\xe3\x12\x93\x97\x41\x47\xcc\x3e\x21\x0a\x9d\xaf\xfb\x9e\x1d\x03\xeb\x20\x06\xcd\x20\x72\x38\x4b\xe8\x75\x6a\x76\xff\xc5\xc5\xe9\xd9\x88\xe1\x99\x3a\x7d\x71\x61\x3f\x9e\x9d\x5e\xbc\x3e\x7b\x11\xfc\x85\x1f\x83\x6d\xce\xc0\x03\x8c\xfd\xe7\x88\x7d\x0b\xdb\xf3\xcb\x88\x7d\x03\x1b\x76\x32\x62\x5f\x01\x65\xbd\x19\xb1\x6f\x60\x33\x1e\x8f\xd8\x57\x48\xd4\x23\xf6\x35\xb4\x79\x3e\x62\x5f\x7f\x6d\xc1\x9d\xea\xc4\x40\x22\xaa\xfe\x02\xb6\xd6\x10\x35\x7e\x7a\x75\xf6\xf4\xc5\xc5\x87\xf3\x93\xb3\x53\x73\x52\xbe\xa4\xef\x2e\x0c\x7f\xc0\x3f\xce\x4f\xce\x5e\x3e\x7b\x46\xa4\x76\xf8\xe5\x43\xfa\xee\x99\xff\x0b\x8a\x81\x8e\x18\x1e\xfb\xc7\x67\xee\x23\x56\xf1\x1c\x31\x6c\xf5\xf4\xc5\xb9\xfd\xf8\xd3\xcb\xe7\x66\x26\x30\xe7\x57\xc7\x3f\x9e\x7e\x78\x6d\xa6\x03\xa8\x78\xf5\xa3\xff\xfc\xe4\xf4\xd9\xe9\x85\x61\x03\x5f\xd1\x5f\xf6\xe3\xe9\x8b\x27\x23\xf6\xc5\x43\xd7\xfd\xc9\xcb\xb7\x2f\x46\xec\x8b\x2f\x11\x40\xe5\x2f\xf7\x19\x00\x03\x7a\xb0\xc5\x97\x80\xd7\x33\xe4\x0a\x5f\xc0\x8c\x9f\x9d\x1a\xc9\xe1\x0b\x40\x2f\x55\x4e\x34\xab\xfc\xd2\xa2\x12\xeb\x10\x9a\x13\xf1\xea\x60\xc4\xbe\x85\xc9\xfc\xfc\xea\x70\xc4\xbe\xfd\x1a\x3f\x3e\x18\xb1\x6f\xbf\xc1\x8f\x5f\x8c\xd8\xb7\xdf\xe2\x47\xc3\x40\x0f\x0e\xf0\xb3\xe1\xa0\x07\x87\xf8\xd9\xb0\xd0\x83\x07\xf8\xd9\xf0\xd0\x83\x2f\xf0\xb3\x61\xa2\x07\x78\xf2\x5e\x19\x2e\x7a\xf0\x10\x3f\x7f\x78\xf5\xec\xf5\xb9\xf9\x9b\x46\xfb\x70\xfc\xe4\x49\xf8\xe7\xf3\xa7\x2f\xf0\x77\x1a\xf7\xc3\xf9\xeb\xc7\x17\x67\xc7\x27\x17\xd1\x77\x17\xc7\x86\x22\x0f\xbe\xb2\x9d\x5e\x3f\xbb\x78\xfa\xea\xd9\x7f\x84\xdf\x3d\x79\xfa\xe6\xe9\x93\x53\xc3\xca\x0f\xed\x37\xa7\x27\x4f\x9f\x1f\x3f\x33\x5f\x1d\xd8\xc9\x9c\x9e\x3d\x7d\xf9\x84\xbe\xb9\x57\x29\xf5\x36\x17\x69\x06\xb2\x86\x32\xa8\x3c\x7e\xf3\xf4\xc7\xe3\x8b\xd3\x0f\x86\xbb\x8e\xd8\x21\x51\xab\xfd\xf6\x87\x97\x67\x6f\x8f\xcf\x0c\x24\x24\x6c\x2c\xb4\x66\xfe\x44\x0e\xf5\xfa\xd9\x33\x47\xa0\x87\xc8\xbe\xde\x3e\x7d\xf1\xe4\xe5\xdb\x0f\x2f\xdf\x9c\x9e\xbd\x79\x7a\xfa\xd6\x7c\xff\x00\xa9\xcf\x6c\xe7\x8b\xd3\xf3\x73\xa0\xa9\x07\x78\x57\x05\xdf\xe2\xd6\x3f\x38\xfc\x3a\x94\xe1\x9e\x06\x62\x38\xf9\xa0\x9b\x37\x80\xb7\xf5\x6f\xbb\x79\xad\x07\xc3\x51\xec\x82\xfe\xaa\xb4\x85\x62\x7c\xc6\x19\xc3\x29\x7d\xc0\x95\x5a\x2b\x2d\xe6\x28\x67\x41\xda\x27\xab\x3c\x82\x8e\xde\xfd\x1b\x13\x3f\x8c\xb6\xa6\x86\xe8\x47\x3e\xe7\x6f\x79\xa6\x29\x83\xfc\xde\x95\x58\x43\x72\x96\x3d\x04\xdd\xf7\xa9\x58\xec\x2f\xcc\x66\x88\xaf\x24\xc5\xa6\x29\x50\xd6\xa0\x4d\x73\xb0\xb5\xdb\xa2\x49\x3c\xab\x64\xb7\xc2\xdc\x82\xf1\xfa\x29\xe3\x15\xcd\xc6\x8f\xf9\xea\xf8\xfc\x7c\xd3\x80\x50\xc6\x34\x1a\xed\xdc\x97\xcb\xb0\x31\x3f\xf0\xc2\x5d\xf0\xa9\x11\x36\x3d\xe8\xb0\xfe\x50\xa0\x9f\xb5\x9d\x9c\x13\x66\x7b\xbd\xa2\xdb\xa5\x87\xb9\xc5\x34\x53\xb9\x2a\x9a\x26\xfa\x44\xae\x8a\xdb\x4d\xf5\xae\x65\x36\xb6\x4f\x96\x48\x44\xcb\x1a\x4a\x2f\xe4\x85\xbc\x05\x46\x5d\x8d\xac\x3f\x68\x86\x63\xa9\x35\x25\x12\x8a\x26\xf9\x18\xbe\xff\x93\xe7\xe9\x0b\x86\xb8\x69\x42\xd2\xd9\x86\xda\x20\x34\x5d\xcc\xe8\xe6\x7e\xdf\x65\xbe\xf5\xc2\x1f\xb7\x4c\x64\xb4\x83\x36\xc7\x25\x67\xfb\x40\x95\x13\xff\xd9\xc3\x6b\x83\x00\x27\xf3\x71\xd2\xe9\x33\xf8\x70\xae\x65\xc9\xa7\x22\x8c\x6d\x7a\xe5\x16\xff\x1c\xd7\xce\xd4\x72\x8c\x21\x89\x80\x0c\xc3\xd7\x50\x2b\xce\x5e\xf0\xf3\xf3\x9f\x82\x54\x76\x81\x8e\x06\x33\xb8\x93\x4e\x38\xa7\xb4\x8f\xbc\x60\xb2\x4c\x45\x09\xbe\x0a\xa8\x5d\x45\x1b\x4b\x22\x8b\x82\xd2\x4e\x2e\x4a\x69\x96\x10\x5f\x49\xb5\x29\x85\xfa\x7f\xec\xf0\x94\xd2\x12\x98\x55\xd5\xda\x7b\x4b\x4a\x9f\x88\x84\xa2\x45\x69\xfd\xf5\x14\xab\xd1\xbf\x0e\xd2\xc5\xbe\x9d\xdb\x3e\xe8\xd6\xdd\xb8\x56\xf5\x9f\x8a\x89\xf2\x8e\xaf\xb5\x39\xd0\x90\xfe\x07\xb0\x19\x60\x50\x81\x79\xdc\xaa\xae\x01\xd0\xab\xa7\x5c\xb8\xaa\x54\x1e\xc2\xb0\x1a\x0f\xc7\x34\xe8\xc3\xe8\xef\xae\xc4\xfa\xfd\xbb\xc3\xf7\xbd\x96\x4c\x30\x6d\x53\x4b\xb8\x16\x53\x09\xa1\xcd\xa8\xa7\xdb\xde\xd0\x1d\x33\x76\xc4\x3a\xf6\x73\x67\xa7\x9e\xc7\x8b\x85\xe0\x25\xe9\xf8\x3b\xfe\xaf\xdd\x7a\x9b\x33\x68\x63\x19\x3b\xee\x8f\xdd\xfa\x9e\x9b\x13\x63\xd6\xd8\xc1\x4f\x3b\xf6\x02\xfe\x84\x9e\x26\x1d\xf7\xc7\x6e\x7d\x4f\x8b\x44\xa6\xd4\xd5\x7e\xde\xad\xe7\xf3\x4c\x25\x22\xcf\x79\x21\xe4\x12\xa6\x1c\x7d\x11\xa8\x68\x9f\xd1\x51\xf2\x7d\xfb\xee\x98\x8d\xd7\x2c\xcd\xd4\x22\xe7\x6b\xfc\x8a\x75\xb5\x5c\xc0\xbb\x0f\xee\x87\xde\xa6\x43\x66\x27\xb3\x7e\xe2\x3c\x89\x6d\x1a\xa0\x7f\xb0\x2c\x1d\xb5\x12\x7a\xe3\x56\xf7\x89\x8b\xdf\xe8\x51\xb8\xe7\xac\x3b\x91\x85\x56\x7d\x96\xc8\x5c\x96\xaa\xcf\xb2\x39\x9f\x0a\xd5\xeb\x80\x79\x79\xe7\x71\x1c\x1d\x44\xc3\x60\x6d\x04\x86\x04\x72\x3b\x80\x76\xaf\x22\x78\x6e\x03\x6f\x07\xcb\x9e\x8e\x08\x96\x3b\x32\xb7\x83\xe5\xc8\x2f\x02\xe6\x89\xf2\x96\xd0\xe0\x14\xc4\xa0\xf0\x60\xdc\x0e\x4e\x44\x9a\x11\x38\xf3\xcb\xb0\xf3\x11\x32\x43\xb5\x12\x5a\x9d\x33\xd2\x53\xa3\xc3\x73\x3d\x98\x96\x83\xb9\x4c\x45\x67\x74\x8f\xb1\x77\xb7\x41\x37\x38\xad\xc3\x6c\xde\xc1\x27\xd6\x29\x64\x21\x6c\xf2\xaa\x01\x65\xae\xca\xc5\x44\xdb\xcf\x70\x5f\xc3\x1f\x58\xdc\xb9\x83\xe9\x62\xcd\xc5\x75\x9c\xeb\x1f\x0d\x8b\xd7\x74\x4f\xcd\x78\x72\xf5\xd7\xb7\x33\xb1\x2c\x33\xa5\xb3\x64\x78\x59\x90\x1d\xa9\x13\x7c\xea\x98\x71\x2f\x3b\x23\x23\x15\x48\xec\xeb\x35\xda\x05\xbf\xce\xa6\x5c\xcb\x72\x98\xf3\x62\xba\xe4\x53\x31\xf2\x5d\xf1\xe2\xb9\xec\x88\x62\xb0\x54\x97\x1d\x76\xf4\x3d\xbb\x84\xe9\x5f\x76\xfa\x18\x99\x00\xdf\xb8\x09\x5f\xc6\xc3\x42\xc3\x11\x7b\x92\x29\x4c\x9a\x50\xac\x69\x01\xa5\xc8\xc1\xdd\x67\xbe\x2c\xcc\x4d\x1e\x4e\xdb\x61\x05\x26\xac\xd4\x72\x8e\x21\x71\xf7\x8f\x73\x4d\x29\xd9\x00\x46\xd4\xc7\x62\x2f\xe8\x03\x8a\xfe\x4d\x7d\x82\x49\xbb\x4e\x28\x55\x35\xf4\xc2\x4a\xeb\x9d\xa8\x40\xe8\x20\x53\x83\xb8\xf6\xe7\x1d\x88\x83\x52\xd5\x75\xc6\x52\xa2\x41\x84\x75\x9e\x4e\x98\x12\xba\xcf\x96\x45\x2a\x29\x9c\xdb\x3f\xf9\x8f\x73\x3d\x70\xf5\x3e\x07\xdf\x3f\x39\x7d\xc6\x4a\x31\xe7\x0b\x9f\x5b\xcc\xae\x30\x9a\x2b\xcb\x8a\x54\x88\x14\x8b\x9a\x84\x45\x4e\xc3\x95\xd1\x7a\x3e\xcd\x2a\xce\x85\x66\xab\x99\x70\xc9\xef\x6d\xbd\x56\x9e\x68\x85\x09\x3c\xcc\x58\xf0\x95\x79\x3b\x9b\x2f\x52\x43\xc3\x45\xa2\x6d\xdb\x68\x72\xe6\x25\xad\x06\xab\x19\xd7\x77\x98\x5f\x07\xdd\x67\x70\x6a\xef\xdc\x5f\xac\xf3\xcd\x60\x9c\xc1\x99\xa3\x87\xf3\xe0\x4a\xac\xed\xa9\x3b\xb1\xe9\x58\x67\xf5\x92\xb5\xf8\x96\x4e\x1b\xcf\x1b\x23\x67\x9d\x21\xfe\x63\xe7\x90\x7c\xbc\x00\x8b\x8f\x91\x52\xb3\x9b\x61\xd8\x18\xa6\x30\xb4\x8d\x8f\xd3\x94\x1d\x3e\xf8\xc6\x3e\xac\x96\x05\x18\xd8\x44\x1a\x86\xb1\x2b\x57\x97\x2f\x02\x14\x2c\x61\x38\xf4\x6a\x89\x48\xfb\x80\xaa\x12\xac\xc1\x41\xa9\x48\x42\xb5\x41\xf5\xe4\xfb\x7f\x8a\xaf\xd5\x90\xb1\x2e\xc8\xd4\x2b\x59\x5c\x76\x34\x54\xd8\xc1\x78\x57\x23\x31\xe7\x5c\x4f\x64\x39\xa7\x22\x3b\x00\xb6\x1d\x9c\x1d\x90\x12\x99\xc1\xee\xc7\xd5\x11\xcc\xd4\x21\x89\xb1\xc1\xba\x37\xee\xf5\x3a\xf7\x18\xb3\x64\xb1\x4c\xb3\x71\x2e\x06\x63\x91\xe7\x03\x65\x6e\x8c\x9d\x49\x83\xae\x1c\x78\x7e\x0c\x4a\x81\x2f\xa0\x11\xca\xd7\x06\xac\xdc\x37\x40\x89\x94\x97\xa5\xfd\xf4\xfa\xec\x99\x8d\x31\x77\x6f\x4b\xd3\x90\xc1\xe8\x43\xc6\x4e\xe7\x0b\xbd\xb6\x5e\x8c\x66\x09\x85\x64\x34\x4d\x68\xe8\x48\x3a\x15\xea\x4a\xcb\xc5\xa0\x90\xda\x65\x68\x86\x85\xdc\x7a\x09\xcd\x1c\x04\x13\x61\x46\x93\x54\xf6\x91\x66\x4e\xff\x14\x73\xa5\x80\x4f\x76\x02\x9e\xdb\x8c\xb3\xb7\x62\xec\xd8\xc7\x8b\x60\x62\x43\x48\x99\xa3\x28\x67\xce\xea\x8b\xa1\x2c\xa7\xfb\x17\x67\xfb\xe1\xe4\xd5\x7e\x74\x16\xf0\xc3\x13\x94\xfa\x0c\x32\xa2\xb6\xac\x14\x7f\x5f\x66\xa5\x50\x86\x00\xe6\x99\x52\xb0\xe3\xd6\x3d\x6c\x09\x55\x02\xde\xce\x04\x65\xa2\xb1\x60\x31\x12\xdd\x1c\x3f\x25\xc0\x04\x8a\x8b\x04\x5c\x51\x2e\x7a\xad\xc5\x7c\x01\xbf\x71\x75\xe5\x0d\x9b\x66\x27\x82\x91\x2c\xc0\x6c\xc2\x0a\x91\x08\xa5\x78\xb9\x1e\x62\x01\x4d\x5b\x53\x85\xcd\xf9\x1a\xd2\x04\xab\x19\xf9\x74\x84\x00\xcc\xf4\x85\xd2\x54\xe8\xc4\x82\x4b\xc1\x43\x47\x33\xcc\x27\x63\x50\x1a\x56\x99\x46\xba\x6e\xe4\x18\xc4\xde\xc5\x8d\x16\x85\xc2\x42\x55\x54\xe4\x86\xed\x45\x78\xdb\x0b\x27\x01\xb9\x22\x83\xbf\xb5\x0c\x66\x82\xd2\x76\xd4\xd9\xd1\x9e\xdf\xff\x01\xc8\xbb\x3b\x93\x5c\x20\x47\xb3\x4e\x39\x1d\x77\x0f\xbf\xea\x33\xfc\xff\x1e\x08\x34\x00\x0d\x69\xf0\x22\x26\x34\xf8\x09\xf9\x91\xb8\xa1\x90\xf5\x42\x52\x84\x3c\xfe\xe8\x73\x10\x35\xcd\x14\x24\xf2\xbb\xcd\xd4\x4c\xcd\x86\xed\x20\xbe\xcf\xcf\xc9\xc7\x91\x0e\x73\x30\x51\x18\xa7\xe5\x24\xe3\x6f\x4d\x3b\x18\x26\x45\x08\xb9\xde\xb2\xcc\xbb\xf6\xec\x4c\xa5\x1c\x4e\xf3\x7d\x5e\x88\xf4\xe2\xe7\x5e\xd8\x2a\xcf\x0a\xc1\xcb\xc1\xb4\xe4\x69\x26\x0a\x0d\xaf\x23\x7c\x1a\xf5\xd9\x18\xdc\x4c\x4b\x91\xf6\x1a\x90\xa2\xb2\x5f\xff\x34\x9c\x40\xfe\xe5\x21\x63\x4f\x6c\x62\x2d\x2d\x99\x91\xf0\x9a\x36\xcb\x7a\xdf\xfd\x69\x73\x73\xee\x7e\xb7\xd9\x9c\xc3\x83\x7f\x35\xff\x1f\x7e\x95\x80\x0d\x35\x5c\x11\x0a\x5a\x28\x7d\x7c\x7a\x41\x8f\xd8\x34\x2d\x09\x45\x35\x32\xe0\x82\xe9\xe0\xf1\x39\xeb\x5e\x76\x2e\x2f\x6f\x0e\xbe\x31\x22\x37\xbf\xe2\xec\xaf\x3f\xf5\x86\x2c\x28\x6c\x61\x27\x1f\x03\x01\x07\x94\x00\x10\x00\xf9\x7a\x72\xd9\x71\xdb\xe5\x04\x8a\xc1\x9c\x2f\x06\x36\x71\xbf\xba\xd3\x96\xd1\xc3\x06\xf6\xc8\xfa\x86\x5b\xed\x9b\x4f\x2d\x02\x59\x31\x28\x69\xc5\x90\x7c\x5a\x38\x53\x0b\xf4\xea\x2f\x4b\xbe\xee\x93\xf0\x20\x78\x32\x33\xdb\x81\x2e\x71\x1d\x97\x49\x92\xca\x31\x7a\x59\xc8\x5c\x04\xa0\xb7\xb4\x29\xf7\x29\x10\x36\x18\x89\x52\x6e\xb8\x6b\x84\x75\xe2\x31\x59\xa6\x95\xc8\x27\x43\xac\x4a\xc3\x75\x65\x42\x30\x95\xea\x04\x1c\xa8\x52\x24\x22\xbb\x8e\xc5\xb3\xea\x4c\x20\x51\x0b\x32\xe4\xb0\xa1\x27\xd5\x80\x56\x5b\x88\xd5\xe0\xe2\x1f\x7b\x07\x7b\xa3\x7f\xec\xdd\xdf\x1b\xed\x5d\x5e\x2e\x1f\x1c\x7e\xfb\x60\xaf\xbf\xd7\x77\x7f\x1d\xec\xf5\xf7\x06\xee\xaf\xc3\xbd\xfe\xde\xd0\xfd\xf5\xc5\x5e\xdf\x4f\xd9\x80\x81\xef\x1f\x7e\xf3\xcd\xde\xc7\x8f\x81\x3c\x05\x55\x9c\x06\xb2\x18\x88\x9b\x6c\x77\x29\x3b\x7e\x75\x13\x45\x87\x64\xfe\x96\x5e\x01\xc0\x43\xe1\x6e\x86\x81\x00\x2f\x54\xf5\x6a\x85\x77\xbd\xab\x15\xc2\xcc\x0c\xfc\x35\x80\x59\xcd\x06\xe3\x3c\x2b\xae\xee\x44\x9f\x0d\x87\xaf\x3e\x2b\x00\x6f\x9d\x88\x95\x2c\x83\x74\x7e\x8d\x33\x19\x24\xeb\x24\xbf\x1b\xfb\x7d\x77\x78\x70\x70\xd0\x67\x0f\x0f\x0e\xde\xc7\xc7\xa6\x73\x11\x0c\x0f\xf3\x29\x8d\x1c\x91\x15\x6c\x9e\xe5\x79\xa6\x44\x22\x8b\x54\x35\x72\xb9\x63\xa6\x57\x92\x09\x4c\x50\x69\xa9\xd7\x07\xba\xc8\x09\xe5\xa5\xcc\xf0\x41\x93\x4b\xeb\x41\x8f\xa3\xf9\x2c\x43\x4e\xdc\x82\x52\x40\x66\xc0\xa8\x4f\xa6\x83\xb6\x72\x32\xa9\xe2\xe6\xf7\x89\x14\xbc\xfb\xe0\xe1\xc3\x3e\x3b\xc0\xff\x1b\x3e\xec\x11\x5e\xaa\xa2\x05\x8a\x0c\x74\x1d\x5c\x53\xbe\x3c\x9c\x81\x9f\x90\x69\x33\x58\xf0\x5c\x68\x2d\x3e\x39\x87\xeb\xbc\xb4\xb5\x4e\x50\x69\x68\xa5\x6b\xfb\x8e\xa1\x71\x1b\xf7\x2a\xac\x6b\x58\xe5\x8f\xc8\x94\x30\x91\x94\xe5\x95\xec\xe9\xa4\xd6\xce\x6d\x13\xe5\x0a\x45\x76\x0a\x7a\x8c\x94\x52\x95\x6f\x60\xae\x8e\xa3\x39\x59\xd8\xf0\x62\xeb\x5a\x03\xce\xce\x58\xe0\x4f\x3b\x64\x6f\x5a\x10\xe4\x16\x69\x59\x52\x0e\xde\x42\xbc\x58\xb3\x44\x29\x82\x85\xbe\x3b\x94\xed\xd4\x4d\x81\xd2\x22\xb1\x7f\x39\xfb\xf1\x71\x9f\xfd\xcb\xd9\xd9\x8f\x3f\x3e\x7e\xdc\x67\x46\xd2\x1c\x0e\x87\x3d\xf8\xc4\xe9\x23\xd4\xfd\x32\x30\x01\x1e\x3a\xef\xfa\xab\x90\x6b\xf2\x44\x54\x92\x2d\x78\xa9\x2d\xa5\x28\x2d\x93\x2b\xf6\xcb\xe1\xa1\x01\x35\xd4\x37\x1a\x2d\x55\x4d\x4b\xfa\x0f\xb9\x84\xf5\x2c\x95\x60\x56\x85\x86\x31\x26\x66\x71\x6b\x9f\x3d\xcb\x6e\x38\x32\x7c\x7f\x36\x0c\x5b\xb1\xc0\xc6\x82\x0a\xdf\xa4\x76\xd1\x99\xf3\x65\x85\x97\xee\x55\xb6\x58\x40\x6a\x53\xa6\xe6\x3c\xcf\x19\xc6\x29\x80\xb3\x73\x91\x66\x49\xb0\x38\xc7\x2b\xdd\x05\xd3\x48\x41\xc1\x29\x58\xac\x0d\x53\xc7\x02\x5f\x3b\x13\xbf\xd7\x65\x37\xb0\xf4\xe3\xa5\x96\x73\xae\xb3\x04\x5c\xb9\xb0\x06\xaf\x04\x5b\x9f\x2b\xdc\x66\x49\xc7\x16\xa2\x75\xf3\x59\x2a\x31\x20\x94\x0d\x90\xfd\x0f\xa0\xe2\xee\x1d\x26\xb6\x81\xad\x6b\xef\x2f\x66\xf7\x87\xee\x1a\x2c\x0f\x4d\x15\x26\x1d\x92\x72\x23\x80\xbb\xd9\x0f\x20\x57\xc9\x9d\xe7\xd5\x7e\x07\xc2\xe5\x67\xcd\xd3\x1e\x59\x98\x1a\xc5\x0c\x97\x15\x53\xbf\x73\xba\xcc\x07\x8b\x7c\xa9\x06\xf3\xac\x58\xaa\xc1\xaf\xa2\x94\x83\x5f\xa5\x9c\xdf\x41\xfc\xac\x4f\xc9\x49\x9f\xe0\xbc\xfb\x2a\x5f\xaa\x7d\xa8\x7b\xb4\xff\x9f\xa2\x94\x71\x2d\xa2\xe0\x7c\x3c\x9d\x58\xac\x07\x89\xd1\x36\x76\xa6\x96\xf0\x33\xc8\xa2\x8a\xfd\xf5\x83\x93\x47\x3a\x7e\x74\xe8\x1a\xd4\x1f\x8d\xd0\x90\xdc\x6e\x33\x36\xca\xdd\xa0\x4e\x3e\x31\xe8\xce\x84\x82\x4c\xde\x80\x07\x5b\x72\x5a\x4b\x70\xca\x31\x3f\x40\xe7\x60\xf5\xd0\x13\xd6\x7c\xff\xc4\xae\x25\xea\x80\x90\x3c\x64\x04\x10\xad\xc4\x56\xab\xfd\x74\x4b\x79\x83\x85\xd6\x6a\x4b\x79\xb3\xe3\x52\xde\xd8\xa5\xbc\xa9\x2f\xc5\x43\x8e\x97\x22\xb8\xd2\x03\xae\x32\x5e\x0c\xf8\x7c\x9c\x4d\x97\x72\xa9\x06\x5c\x0d\xf4\x4a\x1a\x09\x60\x39\xdf\xfd\xed\xb7\xb3\x1a\xf9\x94\x2b\xcd\x8e\xcd\x98\xec\xd8\x8e\x19\xc6\x40\x61\x49\xc1\x95\xa1\x3f\x33\x01\x06\xc5\x44\xfd\x8c\x21\x73\xf3\x00\xd4\xad\x03\xa2\xd0\x4f\x33\x47\xa8\xe7\xa0\xa5\xcd\x0d\x0d\x23\xf8\xda\x5b\x6e\x7e\xb6\xae\x8c\x96\xb6\xde\x83\x9e\x89\x79\xe3\xdd\xf3\x56\x5c\x76\xf2\x9c\x95\x42\x2d\xf0\x05\x03\xeb\x1a\x8c\xd7\x5a\xb0\x6b\x51\x2a\x1b\x08\xa3\xc1\xc5\xbf\x3e\x94\x3b\x5d\xa5\x98\xf2\x32\xcd\x85\x52\xde\xdb\x03\xeb\xed\x56\xf1\x32\x96\xf9\xee\xea\xd3\x06\xc9\x48\x97\x99\xd2\x5c\x8b\x10\x27\x51\x8d\x0b\xc3\x8e\xcd\x20\x6c\x85\xc5\xe4\xa0\xe0\x5b\xac\x10\x42\x57\xa2\x3c\xdd\x1f\xa3\x21\xc6\x99\x32\xac\x66\x68\xc8\xd8\x0f\x16\x87\xce\x1d\x18\xe2\x18\x42\xa8\x43\xc6\x5e\x2c\x73\x70\x4e\xe2\xce\xe2\xd5\xb4\x5e\x43\xb0\x38\xd4\x9d\x56\x5e\xe7\xa9\x2d\xab\xc6\xd5\x90\x98\xd8\xfd\x66\x70\xf8\x90\x19\xa6\xcf\x0e\xbf\x8a\x45\xab\x9e\x5b\x31\xf8\x13\x16\xeb\x06\xdc\xb0\x3a\x32\x7c\x8d\xfc\xea\x1a\xef\xfc\x60\xda\x65\x69\x21\x75\xe2\x5b\xa5\x71\x9f\x88\xd6\x33\xb3\x2d\x95\xf9\x39\xe1\x00\xd4\xe0\xb7\x50\xab\x6c\xbc\x6b\xcf\xcd\x53\x85\xdb\x64\xba\x56\x2c\x77\xaa\x70\x27\x3f\x01\xa3\x5b\x95\x99\xe1\x6f\xad\xd2\x4a\x6d\xa6\xd0\xe1\x13\x49\x51\xae\x36\x30\x4c\x45\x4b\x9c\x0d\x4b\xb3\x52\x60\xc9\x08\x2a\x06\x8d\xfe\x9b\xad\x93\x4b\x45\x72\xf8\xe0\xae\xef\xf5\x06\x7e\x76\x16\x6c\xac\x99\xd9\x65\x47\x85\x9a\xf5\xa0\x82\x63\xf4\x52\x35\xc7\x7f\x69\xa4\x5a\x23\xc7\x5a\x42\x7e\x72\x7a\xe2\xca\xf1\x40\x66\xf1\xc3\x07\xc1\xf4\xaf\xb3\x52\x16\xe6\xbd\x7a\xd7\xd9\xff\xa3\x73\x71\x7a\xf6\xbc\x33\x62\x1d\xb0\x87\x0d\x1e\x3c\xfc\x0a\x5f\x8a\x98\x17\xa0\xf6\xb4\xb6\xb2\x60\x30\x34\xbb\xa6\x6c\x33\xaa\x1f\x6b\xa8\xec\x34\x0d\x4b\x19\x4c\xf8\x3c\xcb\x77\x97\x3f\x2a\x1e\x27\x9d\xbd\x27\xe2\x6f\xfc\xcd\x92\x9d\xf3\x42\xb1\xe7\xb2\x90\x7b\x7d\xb6\x77\x6a\x58\xb9\x2c\xec\xdf\x3f\x94\x42\x98\x8f\x7d\xb6\xf7\x5c\x14\x39\x34\xb9\x20\xaa\xf5\x0a\x9c\xce\x5c\x16\x12\x95\x90\x55\x35\x29\x69\x66\x89\xb3\xc2\x84\x6b\x15\x26\x80\xa3\xc4\x4b\xbb\xb3\x12\xf9\xf0\x61\x1f\x92\x57\x35\xe0\xd7\x57\xf3\xcc\x0a\xb6\xc8\x6e\x44\xae\x2a\x83\xce\x25\x8a\x79\x77\xd3\x14\xf0\x42\x67\x18\x3b\x96\x36\x6a\x8b\xe3\x31\xdc\x6b\x37\x98\x43\x29\x3e\x8d\x09\xe4\xc1\x97\x07\x7d\x66\xff\xd3\x68\x05\xf1\x63\xdd\xd1\x0a\x32\x93\x73\x31\xb8\x12\x6b\x35\x40\x1f\xd6\x4f\xac\x7d\x36\xe0\xf7\x85\x33\x06\xfa\x52\x97\x9e\x68\x5c\x29\x77\x34\x1d\x43\x41\x52\xd7\xcd\x3d\x4c\x4d\x77\xe7\xf0\xfe\xe6\xc2\x96\x09\x54\xa8\xbf\x20\xe1\xc7\x70\x5f\xd7\x15\xe5\xce\x37\x17\x14\xdc\xc9\x03\x68\x95\x41\x70\x06\x1e\x27\x57\x62\x6d\x4b\xb4\xdd\xd5\x25\x27\xe6\x0e\xc7\x10\xbc\x24\x27\x95\x74\xcd\x32\x0a\x50\x80\xfc\xdf\x41\x3d\x53\x1b\xcd\x68\x93\x90\xfb\x33\x5a\xc6\x35\x06\x37\x67\x14\x8f\xd3\x89\xa7\x22\xc9\x8c\x44\x13\xc0\x9b\x89\x1b\x6e\xbf\x46\xcd\x00\x78\xd7\x11\x20\x1f\x24\x41\xe0\x6c\xa4\x44\x4d\x1d\xe3\x04\x2a\x6b\xd8\x72\xd5\x62\x7d\x30\x42\x9f\x74\x4f\x64\x87\x8f\x80\xff\x00\x63\x4e\x8c\x70\x65\x41\x89\x9b\x45\xce\x0b\x0c\xb3\x25\x25\xcb\xc4\x48\x64\x10\xfc\x20\x58\xc5\xf8\xf5\xec\xed\x59\x91\x96\x8d\x32\xef\x39\xe8\xbc\x59\xb0\xb1\x81\xb1\xe6\x1f\xa1\x91\x86\x22\xa4\x73\x3d\xf8\x79\x6f\xc4\xf6\x2a\xde\xdb\x7b\xfd\x7a\x5b\x7c\xa6\x3e\x33\xad\x5f\x1d\x9f\x9f\x37\x35\xf9\xc9\xfc\x78\xd9\xf9\xe9\xf4\xd9\xb3\x97\x97\x97\xc5\x65\x67\xcf\xb7\xf9\x68\xa9\x6e\xce\x6f\x06\x88\xb9\x81\x25\x82\x9d\xa9\xcf\xf9\xf2\xb1\xc3\x83\x03\x50\xff\x06\xbc\xf3\x39\xbf\x61\x94\x68\x03\x2a\xfc\x3c\x39\x39\xef\xb3\x97\xe7\x27\x7d\xf6\xea\x39\x6c\xc8\xf1\xab\x73\x4f\x95\x63\x31\x81\x72\x71\x98\x69\x85\x2d\x17\xd1\xc9\xf1\x8f\x0b\x24\x31\x37\x79\x91\x66\x1c\xf9\x08\x2f\xc5\x60\x62\x3e\x7d\x62\x56\x92\xc8\xe2\x5a\x94\x3a\x08\x4c\x22\xca\xca\x4a\xf6\x83\x21\x55\x1f\xc2\x3c\x64\x5e\x95\x90\x0b\x1d\x9b\xb1\xe2\x1a\xed\xb6\xb8\x78\xb0\x12\xcd\xc9\x24\x47\xae\x3c\x9f\x42\x21\x52\xf5\x58\x72\xfe\x49\xc8\xa5\xb8\xcb\x0b\x45\xd9\xa7\xd0\x72\xe0\x27\x25\x97\x4a\x0c\xd0\xab\x2c\xc9\xb3\xe4\xea\x96\xef\xfc\x8d\xa2\x22\xba\x1a\xcb\x82\x3c\xd4\x50\xd9\x36\x5e\x6a\x2d\x0b\x06\x83\x35\xdb\x04\xb0\x98\x94\x73\x9b\x30\x47\xfa\x1a\xed\x09\x58\x06\x1e\x0a\x53\xe1\xa1\xdd\xc3\xf9\xc3\x9c\x07\x08\x79\xcf\x33\x63\x7a\x33\x36\x8d\x81\x91\xd7\xe8\x17\x64\x6e\x00\xda\x34\xf0\xbf\xfb\x9c\xe6\x6b\xbe\x13\x29\x9b\x67\x10\x66\x50\xa2\x78\x5b\xc1\x5c\x38\xf2\x5d\x90\x56\x75\xb3\x3c\xe8\xb3\xc3\x3e\x7b\xd0\x67\x5f\xf4\xd9\x97\x7d\xf6\xb0\xcf\xbe\x22\xc7\xae\xe7\x80\x3d\x2c\x4e\x8f\xe3\xc1\x11\x2b\xea\x6f\xc6\x36\x6b\xb2\x6f\xd2\x67\x2b\x7c\xab\xdb\xe7\xe8\x3c\x4b\xcd\xf2\xa3\x1d\x42\xf7\x81\x62\xf0\xcb\xe1\xa1\x43\xa9\xf7\x97\xea\xe2\x2d\x62\x28\xcb\xf9\xf9\x81\x89\xb7\x60\xbf\x1c\x1e\xd6\x06\x08\x29\xc0\xa9\x97\x71\x9c\xae\xad\x3a\x25\x98\xe1\xc8\xd7\xce\xbe\x36\xb7\x31\x14\x94\x0a\x0d\x96\x7e\x9d\xf1\x70\xc6\xfe\xee\xf2\x33\xef\x35\x62\xe0\x80\x1d\x1d\xe1\xfe\x76\x17\x65\x36\xe7\xe5\xba\x47\xed\x83\xe6\x87\x50\x2a\x11\x41\x77\xf9\xf2\x26\xcb\xb3\xe6\x86\x0f\x4c\x43\x0a\x67\x41\x73\x53\x73\xbb\xdf\x43\xd5\xb5\x53\xf9\x67\x91\xf6\x4a\x96\xe9\x00\xb2\x68\x0f\x20\x29\xd2\xc0\xf4\xbd\x03\x75\xc3\x74\xde\xfd\xf5\xf2\x52\x5d\x5e\xbe\xbb\xbc\x7c\xdf\xed\xfd\xe3\xe3\x77\xdf\xef\x5d\x76\x2e\x2f\xff\xfa\xd9\xbf\xff\xcb\xff\xfa\xd7\xcf\xff\xd2\x7f\x34\xfa\xff\xde\xd7\x84\xe1\x33\x31\x5d\xe6\xbc\x64\xe2\x06\x1c\x00\x49\x33\x3f\xe3\x39\x95\x61\x24\x21\x00\xd3\xde\x99\x1d\x85\x6c\x5d\x3d\x5b\x67\x8e\x14\xd4\x2d\xd8\x29\xe7\xa0\xff\xd7\x64\xcf\xe0\x81\x15\x1c\x43\x75\xb4\x64\xa5\x00\xf3\x14\xc9\x20\x49\xa0\xa4\x1a\x86\xfa\x2e\x2a\x2d\xb6\xf7\xbf\x29\xe5\xc3\x70\x2f\xac\xa6\xc6\x15\x5b\x70\x3d\x53\x6c\x02\x9e\x57\x10\xcb\x03\x13\xb5\xba\x11\x19\x28\x3f\x6a\x38\xbf\x9d\x86\xe7\xb6\x48\xff\xdf\xc3\xdf\x87\x76\x22\x7d\x51\xa4\x7f\x0e\xd6\x5b\xd1\x84\x87\xf5\x13\xe3\xe9\xfd\x5f\x76\xc4\x0d\x15\xb0\xa5\x00\xc3\x40\x95\x49\xfa\x1b\x9c\xdd\x1f\x4d\x88\xfe\xd3\x6b\xaa\x96\x23\x6e\x16\xd6\xa3\xc3\xdb\x6b\xd4\xb2\x84\x07\x9d\x0d\x24\x76\x29\xee\x20\xc9\xa4\x43\xf1\x82\x4f\xff\xc8\x87\x1b\x85\xdb\xee\x43\x6d\xe2\xdb\x3d\xde\xdc\x2d\x54\x03\xb1\xd3\x03\x2e\xea\xe6\x39\x69\xed\x31\x87\x83\x45\xad\xab\x0f\xb9\x05\x57\x6a\xc0\x73\x3d\xc0\x77\xcd\xdd\x1f\x73\x15\x05\x74\x28\xcd\x79\x9d\xa5\x19\x0d\x7c\xe8\x0f\x87\xc3\x6f\x5d\xf4\x2a\x25\xf0\x69\xbd\x6b\xc8\xe1\x7b\x8d\xba\xc3\x72\x59\x40\xd6\x21\xf4\x3b\xcd\x0a\xc6\x9d\xc0\xaa\xf9\xd8\x3b\xe2\xaf\xe5\x92\xa5\xe8\x29\x6d\xa1\x81\xdf\x0b\x5e\xf2\x97\x1d\xc5\xf6\xd4\x2a\x83\x52\xb8\xd2\xf4\xdc\xf3\xd9\x85\x78\x92\x88\x5c\x94\x5c\x43\x0c\x27\xba\xc2\x16\x52\xbb\xa1\xbd\xc5\x9c\x71\xd3\x95\x65\xa0\xa4\x1b\x0b\xad\xd1\xc8\x68\x77\x51\x89\x50\x0a\x47\x3d\x23\xcc\x8f\x12\x6b\x04\xee\x1e\x54\x66\x94\x5d\x67\x73\x23\x0d\x89\x39\x4f\x9a\x4f\x86\xa3\x3f\x87\x47\x9b\x02\x9a\xbc\xe2\x6d\x75\x2a\x8b\x57\x16\x88\xfa\xae\x4f\xa4\x35\x30\x8f\x54\x4a\x6b\xe4\x62\xe2\xa1\x17\xee\x2d\x6f\x88\x5b\x71\x1e\xe4\x24\x47\xf9\xb7\x2d\x68\x32\x40\xec\x81\xb4\x76\x11\xa1\x81\x05\xee\xcf\xa3\x34\x78\x59\xfe\x5f\x52\xfb\xfd\xa4\xe6\x11\x79\x0b\x5a\xf3\x9d\xfe\x6c\x62\x23\x6a\x83\x77\xea\x9f\x47\x6d\xcf\xcd\x70\xff\x97\xda\x7e\x3f\xb5\x79\x44\xde\x82\xda\x7c\xa7\xff\x33\xac\x0d\x88\xed\xfa\x93\x6b\x42\x00\xec\x1b\x36\x15\x5a\x01\x95\xa1\x54\x04\xcb\xb0\xc3\x93\x13\xec\x40\xd8\xc0\xd4\xdb\xab\xc4\x3a\x4b\x3d\x19\x7c\xd3\xe9\xb3\x77\xee\x53\xa7\xe4\x2b\x1f\x00\x89\xd6\x28\x57\xea\xc2\x0e\x05\x4f\xeb\x94\x6b\xce\x9c\x27\xae\x0b\x23\x81\x39\xb6\x38\xab\x65\x29\xba\x4f\x61\x81\xe3\x4b\x1c\xf4\xb2\x03\x42\xcb\xa5\x19\x39\x70\x94\x46\x89\x65\x20\x0b\x10\xe5\x74\x29\xaf\x76\x17\x92\x7d\xa0\xec\x26\x0f\x1c\x45\x99\x35\xc2\x64\x1a\x60\x21\x2e\xd6\xcc\x8d\xd9\x30\x1f\xb9\xd4\x8b\xe5\xee\x2f\x9b\x60\x32\x9b\xc4\xca\xb6\xd9\xf8\x1c\x2a\x30\x6c\x65\x3e\x63\x5e\x0e\xc8\x0f\xf3\xd3\x60\xe7\x62\x06\xbe\x0e\xe0\x64\x16\xc8\xb0\xf3\x50\xa5\x49\xa8\x58\xcd\x84\xc8\x07\x73\xbe\x06\xa5\xe0\x80\x97\xa5\x5c\x0d\x6e\xa5\xde\xdc\x8c\x1a\x60\x53\x68\xd7\xa4\x38\x40\x51\x92\x82\x45\x25\xa5\x10\x05\x65\x14\x41\xaf\xc4\x27\xa7\x27\x27\x3f\x3f\x67\xdd\xe3\x05\x96\x9d\x33\x0f\x86\x13\x34\x94\x5a\x0a\xc4\x7a\x65\x56\x77\x21\xfa\xa4\xce\x81\x75\x58\xfc\x43\xa8\x1e\x29\x1e\xc4\x7c\x99\x43\x88\x96\x59\x19\xea\x42\x1b\x19\x98\xcd\xcb\xc1\xb4\x98\x2f\x64\xc9\xcb\x2c\x87\xd0\x7b\x3e\x26\xe6\x35\x93\xb9\x7f\xb4\x80\x70\x7e\x25\xd6\xed\xf7\x43\xf0\xdc\xc6\x5c\x95\xcb\x05\x5e\x15\x88\x0c\x23\xd8\x97\x8a\x75\x73\xa1\x54\xcf\xf0\xd6\x92\x34\xa4\x73\x8e\x6f\x84\x20\x76\x8b\x4c\x5e\x22\xcd\x34\x78\x41\x5c\x67\xfb\x05\x2f\x24\x74\x43\x68\x88\xca\x7d\x3d\x5f\xde\xb4\x6c\xb0\xbc\x16\x83\xf9\x32\xd7\xd9\x22\xcf\x6e\x71\xa5\x06\x9b\x7b\x58\xb3\x58\x7a\x78\xce\x56\x0a\xf6\x4a\x96\x8a\x5c\x73\x73\x6f\xe0\xae\xd0\x76\x40\x0a\x3d\x77\x0f\xb8\xa7\x0f\x6e\x19\xb4\x1c\x1a\x19\x17\xdc\x91\xe4\x8a\x4d\x6c\x55\x4f\x78\x03\x55\xdf\x3e\x40\xad\x7f\x02\xd7\xac\x31\x4b\x7b\x23\x45\x6c\xdc\x9e\xef\xdf\x35\xa3\x4c\xc9\xc1\x83\x83\x07\x0f\x6c\xa8\xad\xff\xdb\xcf\x16\x3f\x0c\x72\x99\x5c\x89\xd4\x4e\x36\xb4\x1e\x3b\x4e\xe3\x66\xde\x7d\xf2\xf2\xe4\xbc\x59\x1b\xf9\xf4\xfc\x25\x8c\x40\xee\x57\x81\x47\x18\xa6\x23\x2c\x79\xa1\x72\x0a\x3b\xec\x42\x2a\xd6\x69\xc9\x17\xb3\x2c\x81\x74\x85\x2a\x04\xfa\xfa\xe2\x87\xc1\x37\xf6\xbc\x28\xa6\x96\x8b\x85\x2c\x6d\x14\xad\x54\x6d\xbe\xdc\x82\xe1\x52\xd0\x93\xa0\xb0\xc1\xe3\x11\xea\x29\x1d\xa9\xf7\x03\x66\x1c\xa4\x1e\x9d\xcd\x3d\x19\x81\x46\xd6\xad\x1d\xad\x0c\x3e\xf4\xb5\xcd\x49\xd9\x86\xf9\xe8\x2c\xb9\x42\x7d\x18\xae\x63\x59\x80\xdf\x97\x91\xd6\xd0\xbd\xc6\x08\x16\x57\x46\xce\x13\x45\x2a\xc0\xfc\x07\xad\x9d\x0c\x27\xa6\x3c\x59\x33\xee\xd9\x56\x40\xa9\x60\x40\xc3\x02\xf1\x77\xf6\x5f\x6c\x72\xd5\x31\x2c\xe8\x3e\x7b\x0a\x80\x9b\xdc\x18\x75\xdd\x87\x31\x70\x24\x2e\x07\x89\xba\x9b\x3f\x3f\x04\x99\xd5\x02\x7b\x21\x50\x13\xb2\x1d\xa9\x99\xc0\x18\x53\x6b\xe2\xad\xba\x11\xa5\x32\x59\xce\x45\xa0\xec\xb1\xd3\x19\x18\x3e\x77\xf7\x39\x01\x3f\xca\xb3\x42\x0c\x62\xa7\x06\xa8\xd1\xce\x4e\xce\xcf\x91\x8f\x82\xd3\xb8\x5e\xbb\x54\x76\x2e\x31\x95\x99\xce\xa6\x24\x3b\x2e\xdf\x3b\x3b\x32\x80\x6d\xe6\x1f\x8c\x01\xee\x36\xe7\x2d\x72\x7d\x7a\x1b\x72\xc6\xf8\x5a\xf4\xed\xd9\x87\xb6\xe7\xbc\x5a\x8e\xd5\x72\xfc\xcf\x9e\xe7\x8a\x52\xe2\xbc\x36\x1b\xa9\xd7\xa4\x82\xb4\xe5\xb7\x79\x9a\xb2\xc5\x72\x9c\x67\x6a\xb6\xaf\x96\x63\x95\x94\xd9\x58\xec\x2f\x0b\xf7\xd9\x25\x95\xe2\xd0\x1b\x33\xfb\xf3\x82\x89\x1b\xc8\x8f\x30\xb5\xfe\x49\x61\xd6\x9c\xe5\xf8\x7c\x39\x6e\x29\x5a\x29\xc7\x80\x8f\x52\x7d\xa0\xb4\x4a\x41\x52\xc6\x63\x3f\x99\x3e\x73\x33\x40\x39\x26\x9c\xd2\x5c\xe8\x99\x4c\xe1\xb9\xd5\x3c\x13\xcc\xc1\x4c\x9e\x2c\xbe\xcc\xb4\xb5\xc3\x50\x90\x0a\x24\x70\x96\xcb\x64\x26\x52\x7a\x4e\x8a\x12\xf6\xa2\x90\xac\x10\x80\x1f\x03\x68\x25\xcb\x72\x4d\x89\x68\x0d\xf2\xc8\x87\x07\xad\x3c\x71\x0d\xeb\xb0\x82\x82\xad\x8c\x2d\xc7\x7f\x03\x42\xb1\xf1\x7f\x88\x73\x20\x01\xeb\xf7\xcf\xb4\xac\xe3\x6f\xc8\xd3\xf4\xb1\x6d\x10\xd6\x40\x18\xff\xcd\x57\xed\x41\x0a\xa5\x3a\x5a\x61\x6f\xcc\x02\xe7\x2a\xd7\xce\x83\x6a\x9c\x08\xdd\x9f\x22\x4a\xa3\x25\xc7\x7f\x7b\x37\x7f\xef\x4f\x4b\xa5\xd9\xbb\xf9\x7b\xcc\x9d\x85\x43\xf6\x5c\xde\x38\xbb\x79\xe7\x6e\x7b\x30\xdc\x07\xa3\xbd\xcd\x1b\x72\x62\xbd\x1f\x15\x61\x91\x9b\xcd\x0d\xf7\xaa\x5a\x22\x8d\x7e\x06\xbc\xd9\xcf\xe6\xb9\x1d\x0c\x31\x0c\xfb\x39\xe4\x20\xd2\x7b\x1f\x59\xc2\x29\xbb\x1e\xf8\x3c\xd1\xcf\xc8\x41\xaf\xe5\x95\x20\x23\x68\x18\x8f\x5e\xdf\x80\xa0\x18\x85\x1b\x38\xd8\x08\x9a\x58\xdf\x8d\x15\xd4\xa4\xb0\x3f\xe2\x09\x8d\xc8\x3e\xac\x16\xe1\xbf\x7d\x47\x1d\xcc\x06\xbc\x7b\xef\x6b\x46\x34\xb4\x18\x2e\x96\x6a\xd6\x75\x83\x46\x27\xe8\x75\x78\x70\x31\xdc\xff\x6e\xa8\x5e\x56\x00\xed\x8a\xee\x63\xff\x71\x51\x8a\xeb\x4c\x2e\x55\xbe\x66\xa5\x98\x66\x4a\x43\xf6\xad\xeb\x8c\xdb\x42\xf3\x6e\x84\x6e\x6f\x23\xf6\xc3\xb9\x6c\xc7\xbf\x21\x77\xc8\xa4\x77\xd4\x8a\x41\x5b\xc6\xe3\x33\xd3\x2e\xac\x1f\xd3\x79\x5a\x60\x69\x13\x6a\x89\x15\x63\xe8\x0f\x57\x19\x24\x63\x47\x30\x82\xab\xc2\x11\xec\x05\x02\xce\xd8\x77\xec\x20\x02\xfc\x42\x6a\xbf\xde\xb4\x0e\x17\xe0\x29\x23\xeb\x88\x6e\x56\xab\xca\xf2\x0a\x99\x62\xe0\x47\xdc\x72\x90\xdc\x21\x34\x8f\x1a\x6b\x29\x42\xe3\x34\xcf\xd9\x04\x64\x05\x8f\x2e\xc3\x00\xf1\x3c\xa4\x8c\xab\x75\x91\xcc\x4a\x59\xc0\x8e\x0d\x5d\xc6\x42\xe4\xb5\xf8\xf0\xa3\x94\x92\xe4\xf0\xc3\x8b\xb5\x2c\x04\xbd\x1b\x97\x60\xf2\xb2\x67\xfe\x96\xc4\xb6\xb0\xcb\x33\x8b\x1a\x36\x31\x51\xc1\x8e\x0b\xc6\xcb\x71\xa6\x4b\x5e\xae\x1d\x03\x57\x4a\x26\x19\xc7\x72\x8e\x60\x79\x05\xe6\x1d\xa4\x0a\xd9\x4c\xb5\x72\xa1\x3f\xe4\x5c\xe9\x13\x47\xbd\x45\x80\xac\x80\x69\x24\x50\x44\x60\xa2\x45\x69\x69\xd7\x7c\xa1\x02\x64\x43\xb4\xc7\x58\xa0\x02\xd1\xe1\xa0\x95\xa4\xed\x8a\x9b\xc8\x59\xf4\x6b\x13\x43\xca\x76\x33\x82\x21\xd6\xcf\x32\xa5\xbb\x99\x65\xdf\x46\x94\x81\x17\x56\xa6\x98\x11\xe3\x0d\x79\xd0\x46\xc1\x16\xbb\x12\x55\x04\xb2\x4f\xc5\x17\x30\xe7\x3a\x06\xab\x48\x0b\x29\x91\x45\x22\xca\x82\xc9\x65\xa9\x44\x7e\x2d\x28\x05\x88\xb8\x49\xc4\xc2\x72\x4b\xe6\x49\x1d\x88\xd7\x17\x2f\xb5\x65\x14\x95\xd0\x17\x38\x93\xae\x9f\x31\xb8\xc2\x64\xec\xbe\xaf\x62\x68\x7a\xbf\xcb\xde\x77\x83\x6a\xca\xb7\x38\xc3\x70\x84\x3d\x0e\x20\xbd\x1d\xf8\x0f\xc0\x58\x59\x81\x85\x26\x32\x4d\x2f\x1d\x45\x65\x24\x57\xa2\x53\xd2\x1d\xb5\xc6\xaa\x12\x34\x13\xe0\xbf\x46\x7e\x4c\xb8\x46\xe0\x51\xd1\xdf\xe6\x9d\xa9\x4f\x85\x4e\x34\xb0\xea\x5a\x1f\xaa\xa3\x13\x57\x53\xb7\x83\x57\x5b\xbf\xaf\xd4\x2c\x74\x23\xdd\xdb\x8c\xe3\x03\x64\x21\x5b\x44\x5c\x54\x73\xfc\xb3\x8b\xb8\x6d\xa9\x5c\x57\xb6\xbe\x20\xe5\x2c\xc5\xd3\x78\x26\x57\x27\x50\x01\x9a\xfe\x3e\xcf\x7e\x15\xfe\xaf\x0b\x71\xa3\x8f\x9d\xdb\x73\x98\x05\xf6\xdf\xcd\xe0\x66\x0d\xd7\x99\x58\x21\x77\x44\x61\xda\xd5\x81\x53\xbe\x06\x6e\x68\xf0\x36\x6c\x01\xdc\x54\x0d\x62\xc4\x8d\xe3\xd6\x4f\x35\x9b\xf3\xac\xd0\x3c\xa3\x07\xba\xad\x17\x46\x91\x0c\xae\x76\xa4\xe1\xe4\x33\xae\xd8\x98\xab\x2c\x71\xe2\xaf\xf5\xdc\x86\x0a\x2d\xf8\x66\x85\x54\xe3\xd7\xa2\x84\xd0\x0d\x0a\x4b\x4e\x53\x2a\x3f\x5e\x8a\xb9\xbc\x36\x9f\x4b\xb9\x52\x5e\x33\x4d\x24\x10\xa6\xa9\xc5\x65\x99\x11\x0b\x09\xe9\x68\x73\x91\x4e\x5d\xbe\x93\xa6\xdc\xc5\xae\xb0\xaf\x0f\x15\x86\x51\x64\x11\x8c\x61\x88\x20\x15\x88\x19\x30\x2e\xe4\x6b\xab\xbb\x8a\xbb\x61\x55\x4c\x8a\x68\x36\x1c\x0b\xca\xc1\x98\x15\x2a\x1f\x07\x4e\xf3\x06\xf3\x05\xb7\xad\x56\xbc\xc0\x64\x30\xa2\x50\x4b\x73\x49\x19\x50\xf0\x1a\xe4\x85\xde\x38\xb9\x3e\xcb\x74\x47\x91\x7b\x68\x29\xd4\x42\x16\x2a\x1b\x67\xf4\xea\x41\xe4\x11\xbc\x12\x8a\x72\x94\x18\xbb\x6e\xfe\xc0\xb9\xf9\x7b\xef\xc2\x2f\x19\xc2\xfe\x90\x11\xc9\x42\x97\x1c\xb8\x92\x62\xa2\x98\xc8\x32\x11\x54\xba\x27\xb7\x95\x63\xa8\x64\xcf\xa2\xe4\x89\xce\x12\x31\x1c\xc2\x0d\x36\x00\x80\x96\x3c\x89\xae\x68\x8f\x64\x6e\x1e\x42\x2b\x49\x3f\x9f\x13\xa2\x61\xc1\x09\x38\x4b\xbc\x2c\x84\x55\x26\x1a\x60\xe4\x24\x67\xe7\x07\x14\xe3\x5b\x38\x75\x72\x95\x2e\xec\x1c\xe6\xb9\x1d\x03\x27\x00\x9b\x98\xf0\x12\x72\x03\x72\x8d\x88\x35\x82\xc5\x4f\x17\xcf\x9f\x9d\x62\xfe\x07\x70\xd9\x28\xec\x04\x72\x5e\x4e\x21\xc0\xa0\x00\xdd\x81\x9c\xe0\xd4\xfb\x6c\x26\x57\xe2\x5a\x94\x98\x27\x02\xe0\xcc\xf8\x62\x21\x0a\x7a\x50\xf8\xac\x25\x86\x7f\x14\x06\x94\x5b\xb3\xcc\xf3\x57\x92\xe8\x9f\xee\x32\xf2\x71\x67\x9c\x4d\xc4\x8a\x95\xcb\x5c\x50\xa6\x3f\xac\x04\x3b\x64\xec\x94\x27\x33\xbb\x9d\xb6\xb6\x61\x29\xa1\x3a\x34\x51\x65\x82\x7a\x0e\xb3\x14\xa6\xf9\x94\x75\x6e\x06\xa5\x5c\x75\xf0\x60\xc1\xee\x43\x3f\x18\xd1\x52\x06\x16\x94\x73\x19\x0d\x90\xa9\xc9\x12\x29\x2a\x75\x36\x42\x4c\x6a\x40\x27\x0a\x69\x88\x9c\xa4\x0b\x7b\xa6\x5b\x8f\x1b\xa3\x6a\x4a\x59\x41\x3a\x3e\xc4\xb8\xa3\xa9\xf1\xba\x42\x2c\x50\x35\xca\x55\x95\xc2\x04\x34\x18\x61\x86\xba\x00\x2b\x1c\x54\x68\x28\x9c\x10\x78\x83\x35\x22\x1d\x05\x1d\x57\x1c\xcd\xa6\x6f\x33\x2f\x52\x15\x53\x63\xc3\xf1\xa0\x12\xdf\xf9\xda\x72\x1b\xa4\x1f\xc3\xb7\xd8\x9c\xdf\x64\xf3\xe5\xdc\x06\xd0\x42\x65\x43\x33\x8d\x83\xaa\x78\x49\x25\xeb\x51\xa0\xc3\xd6\x27\xd0\x18\x54\xea\x04\xc5\x9f\x7d\x6c\x61\xcb\x3c\x65\x8a\x64\x3a\xc7\x4f\xce\x85\xa0\x13\x6d\x8b\xe8\xc7\x7c\xd5\x7d\x6b\x00\x64\x05\x06\x18\x00\x9b\x36\xf2\x2b\x41\x83\x6c\x86\x48\xbf\x8a\xa2\xfc\xa4\x64\x73\x48\x12\xe1\xdd\xc9\x20\x2d\x44\x9a\x82\xae\x41\x1a\xda\x94\xab\x38\xa9\x15\x41\x3b\x30\xd7\x7e\x21\xb5\xa1\xab\xeb\x2c\x8d\xa5\x4b\xda\xaf\x4a\x9d\xc4\x00\x0f\xbd\x4a\x8d\x0a\x23\x7c\x26\x7d\xb0\x8f\x0c\xe0\xfc\xf2\x04\xca\xa0\x5b\x1f\x40\xb3\x05\xf4\x70\xf5\x5c\x80\xb2\xd3\x83\x3c\x66\x5a\x1c\x43\x66\x10\xf7\x5a\xdd\xdf\xb7\xd8\x8e\x02\x9e\x1d\x92\x03\x40\x58\x4e\xd0\x4f\xef\x03\x3b\xaa\xed\xdc\x6f\xbf\xb1\x6f\x0e\x42\xc0\xee\x6a\x94\xb9\x2c\xfb\x10\x7c\x0a\x49\x49\x45\x99\x67\x05\x95\x3e\x8b\xc3\x3e\x95\x1b\x4b\x47\x57\x7a\xa4\x2d\x89\x6f\xfb\x2e\xda\xb3\x87\x56\x9d\xda\xb3\x33\x38\xa1\xd1\x21\xe9\x01\x9a\xc6\xe9\x8e\x4e\xa4\x2c\x53\xc8\xaf\xe7\xc7\xc3\x9f\x5e\xd9\xdb\x3b\x1c\x0f\x65\x8f\x2e\xc9\x67\x7e\x79\x85\x4c\xf1\xa8\x71\x2c\x22\x67\xb9\x82\xbf\x05\x71\xb8\x4c\x39\xa9\x00\x6e\xd0\xca\x98\x67\x72\xf5\x42\xa6\xc2\x60\xb4\x58\xe6\xf9\xb6\x11\xd4\x82\x17\x56\x28\xb9\xed\x50\x6d\xe3\xc8\xc9\x44\x09\x8d\x17\x5e\x40\x07\x70\x6d\x87\x3d\x7d\x62\xce\xa6\xf1\x2a\x83\xbd\x04\xa0\xd5\xe1\xce\xc4\x54\xdc\x50\xbd\x36\xf4\x8c\x04\x33\x82\x2c\x53\xef\x1d\xe9\x77\xc5\x7c\xff\xb8\x14\xfc\xea\x39\xd7\xc9\xec\x99\x98\x68\x07\xae\xb1\xc5\x19\x48\xc2\x1b\x9b\x3c\x47\x8f\x72\xdb\x26\x78\xb1\x9f\x51\x65\x2c\xcf\xe9\x20\xfe\x10\x43\x3a\xbd\xd8\x59\xd1\x59\xba\xf2\xa8\xbe\xc5\xc7\x7a\xeb\x86\xba\xc3\x44\x9e\xc8\xe3\xec\x1b\xd5\x8a\x39\x1c\x63\xfd\x80\xe7\xd5\x8e\x75\x85\x8b\x04\x6f\xd4\xa9\xd0\x30\x68\x4d\x8f\x4b\x93\xf4\x44\x6d\x9a\x75\x6b\xa7\xba\x5f\xe1\x15\xb6\x44\x7f\x1b\x9e\xe2\x45\xb8\xd9\xd7\x67\x1c\x61\xca\xf1\xfe\x06\xe1\xf3\x76\x8b\xfd\x49\xd0\x86\x37\x2f\xb7\x71\x31\xbb\xaf\xa5\x7d\x03\x76\x59\xce\xdd\xb6\xef\x2d\x9c\xbc\x8d\x0b\x0a\x37\x2c\x5a\x8c\x35\xd7\xb6\x5f\x9f\x0b\x51\x52\xa5\xc1\xe6\xcb\x38\xd9\xe1\x0a\x0e\x60\xb4\x2e\x44\x09\x7d\x12\xdc\x0c\x1b\x4a\x20\x57\xee\x14\x2a\x85\x7c\x2f\x2c\x9d\x1b\x71\x66\xea\xc0\xbe\xa7\xb6\x81\x66\xd6\x0c\x1a\xb5\x6d\xec\x5f\xca\x55\x9f\xd6\x39\xa8\xea\xec\xce\xf0\xc1\xe0\x73\x9e\xc1\xab\x21\x7e\x74\x85\x45\xf4\xb2\x3a\x17\x08\x44\x68\x24\x08\x0f\xe8\x16\x84\x00\xd6\xd2\x33\xb9\xda\x4c\x08\xb6\x95\xea\x1e\xf6\x5c\x4d\xeb\x78\x29\xf1\xb3\x51\xcb\x45\x20\xa1\x56\x16\x03\xd5\xf3\xc2\xfc\x4f\xdb\x89\xa4\x72\x76\xdd\x93\x2b\xae\x1b\x8d\x87\xef\xbb\x00\x33\xdf\x23\x6a\x90\xe1\x8b\x14\x7a\xef\x84\x0f\xd5\x42\x4a\xcd\xe7\x9d\x74\xb3\x07\xb4\xdf\xf1\x5e\x93\xc5\x18\xe4\x37\x46\xb7\x68\x0d\x3f\x55\x1c\x44\xbb\x6b\x3a\x5e\xd8\x3b\x5f\x92\xf8\xb9\x71\x19\x94\x8c\xbb\xb2\xb1\xa5\x5c\x05\x07\xa2\x69\xfa\x07\x7d\x33\x48\xe3\xfc\xf1\xb6\xd8\x71\xfa\x8d\x3b\x01\x10\x2e\xac\x0c\x79\xdb\x85\xa8\xca\x4a\x54\xe3\x52\xa8\xfd\x90\x2f\x16\xf9\xba\x1b\xff\x08\x6b\x53\xad\x07\x31\xe7\x9f\xe6\x1c\x3a\x38\xb7\x38\x86\x0b\xb9\xd8\x7a\x08\xb1\xcd\xce\x47\xd0\x7a\xc3\xfd\x33\x9e\x42\x5a\xea\x5d\xce\x60\xe3\x4d\xcc\x06\xb8\x8a\x9d\xcf\x67\x13\xf2\x3e\xf1\x11\x5d\x2c\xd5\x6c\xc7\xf3\x09\x8a\xe2\x5d\xce\xe5\x2e\xd3\xfe\x64\x47\x93\x16\xd0\x72\x2e\x61\x8f\x4d\x93\x9d\x8f\x62\xd3\x3e\xf8\x7c\x00\xe6\xcb\x8d\xeb\x72\xf4\x8a\xca\x93\x0b\xa7\x46\x71\xab\xb1\xef\xa6\xe1\x27\xdc\x45\x6c\x52\xd9\x47\x18\x17\x39\xe9\x06\x76\x4b\xad\x76\x64\xb9\x7f\x08\x26\xd4\xf0\x0f\xa1\x0c\x87\x14\xd5\x8c\x15\x22\x11\xe7\x80\x90\xb1\x23\x76\xf0\x88\x65\xec\x3b\x9c\x14\x89\xcf\x2c\xbb\x7f\x3f\xaa\xe3\xd5\x8c\x42\x76\x9f\x65\x16\x8d\xea\x5d\xf6\xbe\xee\x7d\x40\xfc\x91\xdf\x82\xbb\x6f\x43\x65\xa0\x9b\x6b\x61\x83\xb5\x7b\x21\x64\x7f\x1b\xd1\x87\xd0\x9a\x68\x6a\x07\xfe\x47\x58\xfe\xb3\x2f\x89\x06\x52\xc3\xa8\xd7\xc8\xae\x30\xfc\xaf\x72\xc1\x38\x14\x37\x51\xe8\xae\x57\x4d\xd4\xbc\x72\x7e\xc1\x53\x80\x6b\xb1\xc9\x72\x13\x59\x55\x94\xd0\xaa\x51\x41\xa4\x25\x43\x8d\x10\x3e\xd5\x73\xc1\x4b\xc5\xe4\x52\x63\xc9\x11\x83\xc4\x92\x94\xb8\x29\xd7\xdc\xc2\x3c\xc6\x24\x58\x14\xbc\x4b\xa7\x5e\x96\x5e\x4f\x49\x69\x7d\xc0\xde\x19\xe8\x59\x9c\x55\x29\x53\xa0\x41\xce\xb3\x14\xdc\x9c\xc0\xc2\xcf\x33\x25\x30\xeb\x94\x4a\x96\xa5\xf0\x26\xdf\x2d\xdc\xc0\x22\xe3\xa4\xaa\xfa\x6a\xf2\x01\xab\xbc\xa2\xcc\x3e\x59\x8d\xd8\x66\x6d\xd6\x06\x05\xd4\x46\x75\x51\xb0\x6f\xbe\x1e\x67\x42\x05\x33\xed\xd1\x20\xf4\x6c\x3b\xba\xb0\x3d\x27\x76\x7e\x1b\x57\x68\xe7\x3f\xcc\x8a\x42\x94\x60\x45\x38\x62\x9d\x4e\xcb\x2a\x89\x62\x9d\x36\xb2\xdb\x01\xc7\x4b\xb3\x9d\x93\x5c\xae\x3a\x55\xec\xf8\x45\x1e\x3c\x6a\xc1\x2c\xbd\x6f\x37\xb4\xb0\xd0\xcd\x3a\x78\xae\x84\x73\x72\x31\xb4\xf3\x28\x7c\x3a\xc7\x4a\xd4\x61\xa6\x48\x4b\xdd\xed\xf9\x72\xa4\x37\xda\x2d\x30\xb2\x6e\xd3\x2f\x60\x9b\x05\xc5\xc4\x2c\xd3\x02\xd2\x86\xd5\xd5\x46\xde\xde\x8e\x15\xe7\xd1\xa1\x18\x9c\x14\x64\x01\x0a\xf7\x6b\x51\x2a\x97\xe7\x1a\x54\xeb\xb0\x27\x90\xb0\xd8\x30\x31\xc1\xfb\x2e\x86\x1b\xc1\x40\x3a\xb6\x8e\x82\x8a\x04\x94\xd9\x4a\x94\x5c\x09\xe7\x81\x37\xb4\xae\x3d\x04\xfc\xa8\x49\x71\x3c\xa4\x5f\x1f\x35\xeb\x95\x87\xbe\x33\xa1\xb2\xb9\x99\x5a\x17\xc9\x09\x4c\xbe\xdb\x73\xe8\x06\xed\x6c\xf3\xa8\xe8\x0c\x7b\x82\x9a\x5b\x51\x76\xcd\xcf\x6d\x27\x65\x08\x06\x87\xf4\x64\x96\xe5\x69\xd7\xc0\xac\x36\x74\x87\x46\xa6\xc2\x7b\x99\xb5\x2e\x64\xcb\x8a\xe3\xa5\x04\xa7\xec\x39\x2f\xaf\x22\xbe\x08\x02\x1f\xb8\xc9\x80\x31\x9a\xa8\x4e\xb8\x5c\x4f\x85\xa1\x10\x43\xef\xa1\x8d\x08\x34\xfb\x8e\x42\x21\xee\x90\x32\x55\xa7\xb4\xef\x98\xe1\x07\x53\x55\x97\x90\x08\xd0\xeb\xfe\x0c\x64\x32\xb6\xa3\xa5\xfd\x4a\x28\x96\x69\xc3\xff\x30\x41\x3b\xdc\x3d\x89\x9c\x8f\xcd\x30\x7a\x05\x39\xb3\x20\x57\x96\x1b\xd2\x19\xf1\x1d\x48\xf0\x7e\xb5\x36\xfe\x78\xbe\x18\xc1\xe8\xca\x86\xb9\x0b\xd8\xa6\x25\x14\x66\x9a\x64\x54\x8b\x17\x35\x64\x14\x92\x03\x56\x3f\xfb\x13\xa4\xda\xe6\xda\x1a\x56\x17\x65\x86\x0a\xdf\x58\x4b\xef\xb8\x39\x85\xdc\xcf\xe7\x99\x46\x5b\x64\x84\xbd\xbe\x75\xc0\xc7\xcc\xec\x8b\x52\x24\x22\xb5\xae\x18\xa5\xb0\x50\x60\x73\x42\x76\x08\x96\x78\xc9\x38\x64\x8c\xa9\xcc\x7a\x23\x97\x84\x89\x3c\xcb\x0a\xf1\x32\xe0\x30\xdb\x39\xa5\x12\xba\x95\x01\xa2\xcf\x7e\xf5\x71\x9f\xcb\x24\xb8\x84\x15\x78\xd3\x32\x8e\xb9\xa8\x80\xea\x9c\xf6\xbb\x55\xb2\xb1\x6f\x02\x48\x9c\x86\xd6\x9d\xea\x1b\x22\x90\x64\x80\xa5\x56\x9a\xfb\x01\x36\xaa\x31\x5b\x2f\x47\x52\x24\x1a\x20\x81\x17\x69\xb3\xfe\x9c\x78\x6a\x22\x0b\x25\x73\x31\x5c\xf1\xb2\xe8\x76\x8e\x7d\x46\x4c\xa8\x42\x52\x21\x0e\x59\x30\x81\x25\x84\x70\x5a\x9d\xa8\x48\x74\xe4\xe1\x64\x90\xf1\xfd\x51\x8b\xee\xbe\x32\xb6\x28\x4b\x59\x76\x3b\xe6\x1e\x34\xe2\x8a\x9c\xb0\x31\xd4\x01\x43\xff\x46\x7c\xf3\xc0\x30\xb0\xfd\x6d\xef\xf6\xc3\xe0\xbe\xb0\x33\xf8\xce\x48\x43\xbf\x67\xb0\x83\x68\x51\x5e\xd1\x5b\xbf\x6f\x9a\x87\x41\x95\x73\xd3\x48\xb4\x4d\x8f\xa8\x17\xdd\xb0\x75\x05\x74\x7d\x61\xd4\xb8\x7d\x6d\xb7\x1d\xd4\x2f\xf2\x56\x77\x7b\x89\xa7\xad\xb6\x25\xef\x4a\xb9\x7a\xff\x28\xbe\x91\xa8\xed\x10\x54\xcf\x70\xaf\x38\x8d\xfa\x67\x70\xc1\xd0\x4a\x2a\xcd\xe5\xaa\x10\xe5\x13\x1b\x95\x82\x57\xd8\x85\xb8\xd1\xe6\xc7\x6e\xa7\xe3\xb7\x0a\x5a\x37\xde\x5a\xce\x13\x90\xee\x90\x93\x60\xd5\x9e\x56\x71\x21\x47\x4d\xcc\x24\xf4\xcd\xab\x12\x40\xa3\x9c\x34\x68\x10\xaf\xbc\x43\x5f\x78\x45\x07\x97\xe9\x23\xfa\xb9\x3a\xcb\x5b\x8e\x13\x78\xf9\x45\x92\x53\xa3\x34\x4c\xeb\xde\xb8\xfb\x20\x55\x87\x7c\x05\xb0\x86\xaf\x81\x6e\xb8\x73\x06\xc5\x64\xb4\x3d\x62\x6e\x86\xd1\x72\x1e\xb9\x86\x2b\x32\x29\x35\x59\xcf\x87\x06\x2a\xd8\x9c\xfc\x26\x06\x94\x32\x34\x77\xfc\x79\x36\x86\x28\xa1\xdf\x7e\x23\x50\xdf\xd3\xd8\x1e\xcf\xad\xd2\x4a\xed\x67\x2f\x01\x23\x0c\xdb\xc4\x73\x35\xc2\x4f\x75\x77\xee\x1f\xe1\xe8\x8f\x42\xd2\xad\xce\xb1\x1e\xe1\x40\x26\x31\xeb\x83\x11\xa4\xe0\xf1\xc1\x1d\x50\xe8\x24\xe1\xa5\xd0\x61\x45\x05\x1d\x0a\x43\xe0\x92\x56\x7f\x27\xb6\xdf\x1c\xeb\x22\x39\xb7\xb0\x4e\x00\x74\xe8\x37\x6c\x7f\xa1\x4b\xb5\x5c\x13\x26\x7d\xe6\xa6\x44\xe6\x39\x5f\x28\xd1\xad\xa2\xb6\xdf\x44\xf0\xc8\xb4\x12\xc8\x80\xd4\x9d\x64\xa5\x98\xc8\x9b\xa7\x90\xc5\x31\x3d\xb5\xaf\xc1\xc0\xe3\xf6\x87\x1f\xc0\x67\x13\xfd\xdc\x21\x1c\x87\xda\x40\xe4\xdc\x4c\x90\x5c\x96\x99\x77\xd6\xa4\xcf\x4a\x4e\x29\x0d\x79\x81\x05\xf0\x0b\xa9\x2d\x28\xaa\xbf\xe9\xac\xda\x34\xed\x61\x6d\x23\x16\x79\xa6\xbd\x18\x06\xfb\x87\xf2\xde\x4a\xc2\x5f\x4e\xa5\x66\xa4\x80\x82\xa8\xc3\x5e\xff\x61\x4d\x2b\xf3\xf7\x8f\xd0\xc6\xb4\x7e\xf2\xf2\x39\x9b\x94\x7c\x0a\x89\x98\x3b\xdf\xa5\xd9\xf5\xf7\xdf\xa9\x05\x2f\xbe\xff\x49\xe4\xb9\x64\x6f\x65\x99\xa7\xdf\xed\xc3\x37\xdf\xed\x9b\x5f\x3b\x18\x7c\xc0\x94\x99\x10\x60\x14\x3c\xec\xb8\x52\x91\x87\x05\x56\x87\xb1\x87\x4c\x4e\xd8\x57\xb6\xee\xca\x0a\x82\x25\x21\x37\x2b\x7a\x9c\xb9\xe1\x51\xd4\x1c\x1b\xf9\x54\x8c\x1a\x26\x63\xe7\x01\xff\x6d\x98\x19\xfa\x45\xda\x29\x80\xdf\x16\xc7\x1a\x35\xde\x41\x06\x13\x54\xe0\x1c\xbc\x03\x3b\xd4\x8b\x08\x04\xf3\x15\x2d\x42\x41\x75\xd5\x50\x3e\xd7\x72\x30\x16\x03\x58\x3c\x6e\x42\xe0\x0d\x67\x5d\x4d\x44\xe9\x53\x75\x58\x78\xe8\x8a\x82\x8e\xbe\x06\x5f\x39\x4f\x44\x8a\x4f\x00\x2d\x1b\x54\x74\xe6\xe5\x6c\xb0\xfb\x11\x7b\x3a\x6f\x16\xa8\x7f\x93\x67\xba\x59\x52\x23\x74\x47\x3e\x29\x76\x51\xa6\xb7\x77\x40\xc1\x15\xe0\x43\xd3\x39\x4f\x24\xc9\xb2\xdc\x7c\x2c\xdd\xa6\x87\xc7\xd1\x80\xee\x47\x3c\xcd\xb0\x4d\x88\x1d\x78\x11\xf0\x99\x24\x97\x85\x80\xcb\x10\xae\xe6\x5e\xf4\xee\x3e\x41\xcd\x84\x6d\x1b\x7c\x65\xce\x66\xf5\xbb\x4d\xdc\xf8\x7c\x39\x56\xba\xa4\x49\x1d\xb8\x79\x19\x30\x6e\x4a\x15\x58\xe8\x37\x0d\x21\x4f\x1a\x1f\x9b\xf4\x5b\xd0\x9b\xae\xdf\x46\x10\x3d\xc7\x53\x87\x0b\x6e\xd8\x1d\x34\x40\xf5\xd4\x63\x08\x48\xf0\xfd\xfa\x35\xa6\xeb\x42\x68\x3e\xab\x2e\xb3\x19\x2e\xea\x4c\x22\xc9\x21\x60\x14\xa7\xe8\x04\x8c\xc4\x67\xc8\x0b\x7c\x9b\xb3\xc5\x42\xa4\xae\x32\x9e\xf7\x3e\x4a\x72\x3e\x5f\x78\xca\x0f\xdd\x0e\x37\x12\xc2\x9c\xaf\xc7\xe2\x24\xcf\x16\xe4\x25\xd6\xa8\x16\xba\xc5\xe5\xd9\x24\xca\x38\x9c\x23\x8c\xef\x36\x08\xb2\x81\xbb\x9a\x61\xc9\x50\xb6\xbb\x90\x1a\x43\x1a\x61\xf5\x10\x1c\x3f\x5e\x6a\x2c\x2b\x8b\x5f\xf3\xf9\xc2\xc5\x41\x6c\x77\x97\x68\x1d\xfc\xf6\xee\x13\x8d\x82\x73\xaf\xe1\xb6\x6f\x92\x6b\xcd\x83\x30\xba\xe7\x2b\x0f\x9a\xfd\x7d\x76\x6e\xd8\x91\x9c\x4c\x62\x35\x2d\xae\x04\x43\x60\x0c\x27\x82\x3d\x64\xa5\x50\x1a\xcb\x43\xb0\x9c\x6b\xe1\xd4\x42\xbb\xcb\x76\xd6\x35\xed\xb9\x35\x39\xfb\x37\x29\x7a\x82\x80\xeb\xb6\x7d\x2d\x7e\x32\x64\x59\x7f\x38\x34\x82\xd8\x52\x1d\xa8\x37\xe0\x25\x79\xd8\x5a\xbc\x81\x4b\xdc\xed\x69\xb1\x42\x88\x0d\x72\xd8\x77\x04\xd5\xcc\xa9\x2e\xbf\xe2\x03\xff\x76\x8c\xcb\x05\x6f\xd4\x25\x97\x83\x26\xe1\x85\xe2\x8a\xfc\xee\x5b\x94\xe4\xb9\x15\x0c\xa0\xb8\x95\xdf\x99\x61\xf3\x9b\x28\x3e\x7e\x8f\x1a\xb4\x74\xe1\xa2\x22\xa9\xb1\x59\xca\xb6\x4f\x9d\x06\x86\xb5\xe1\x71\x51\x97\x47\xed\x83\x36\xa2\xc8\xef\x36\x72\x83\xa7\x91\x7e\x7b\xc5\x31\x9a\x2b\x8b\xbc\x13\x7d\x12\x6f\xb0\xe9\x08\xe0\x8d\x45\x70\x20\x94\x13\xd2\xbc\xc8\x7a\x17\x67\xa9\x70\xde\xbd\x9a\xa2\x78\x7f\x3f\xa8\x25\x9b\x0b\x73\x74\x8d\xa4\x47\x2e\x29\xd6\xf3\x82\x4e\x6f\xb3\x2e\xad\x4a\x76\x9b\xd8\xc6\xc7\x46\xe3\x34\x65\xa3\x8f\x85\xf6\x20\x91\x87\xd3\xaa\x78\xc7\xf9\x40\xb2\x87\x93\x17\x39\x21\x03\xf4\xff\x90\x4b\x14\x8f\x40\x60\x6c\xb8\x32\xba\x3d\xa2\xcd\xac\x60\xb2\x4c\x6d\x79\xb6\x6c\x11\x68\x4b\x3d\xfc\x82\x78\x76\x4c\xc9\x36\xaa\x28\x53\x58\x6c\x70\xb9\x70\x97\x19\x86\xc7\x68\x49\x91\x09\xf9\xda\x85\x1e\x51\xb8\x5c\x4d\xd5\x6a\x60\xe1\x0a\xa3\x7b\xaf\x41\xb5\x17\xc7\xef\xb6\xd8\x8a\xd1\x6b\x3e\x7a\xb9\xe8\xd2\xdf\x8d\x9e\xe8\x5b\xde\xd8\x71\xa3\x0b\xb4\x28\xf8\x2f\x62\x29\xe9\xce\x16\x16\x67\x76\x30\x57\x23\xc4\xc2\x00\x7a\x90\xaf\xb9\xb2\x8d\xb0\x92\xf1\x9a\x2d\x4a\x48\xf1\x0c\xf9\x82\xe4\x5c\x30\x28\x7e\x5e\x4c\x11\xc8\xca\x19\x39\x94\x0d\xb6\xa4\xac\x02\xa0\x76\x2e\xd3\x10\x18\x0e\xc0\x67\x82\x43\xc0\xbc\xce\xe6\xc2\x72\x26\xa5\x4b\xeb\xc8\x69\x65\x33\xfa\x06\x30\x68\xe7\xfc\x02\x2c\x1e\x66\xc2\xab\x19\xd7\x7d\x7b\xa2\xc1\x3d\xc9\x45\x8e\x42\x25\xdb\x90\x1b\x38\x1f\x6d\x48\x28\x7d\x2d\x10\x96\xc1\x12\xe5\x28\x98\x2f\x93\x59\x8b\x63\xbb\x95\x07\xee\x1f\xb9\x39\xda\xc9\x3c\x93\x09\x44\x1a\x27\x33\x51\x31\xaf\xb9\xb7\x58\xac\x77\x68\x52\x88\x58\x0e\x8e\xc6\x08\x2b\xc3\xe3\xf4\xe9\xaf\xb9\xe0\x46\xc2\x0b\xf2\xac\x89\x22\x8d\xf7\x69\x88\x60\xa0\x9e\x5f\x36\x5f\xe4\x99\x55\xa8\xc7\xc2\x1f\xd7\xd5\xee\xf4\x1b\x48\x9c\xf6\x92\xc0\xb9\xbc\xb4\xb3\xde\x72\x79\x7a\xea\xec\xb1\x81\xd3\x51\x58\xdd\x55\x04\x2b\xd0\x09\xee\xef\xb3\x63\x56\x88\x29\xa6\xf4\x2a\xe3\xe5\xfb\x64\x3e\x8d\x5e\xfa\x0b\x9b\xe1\x49\x14\xa9\x05\x66\x97\xe3\xa3\x4e\x24\x79\xad\x81\xfd\x82\xb1\xb7\xa2\x63\xae\x47\xa2\xcd\xc0\x7d\xc4\x93\x73\x85\xa0\x87\x5e\x1f\xa4\x5a\xec\x7a\x83\x68\x7d\x36\xd6\x17\x62\x04\x32\x15\x80\x0a\x4a\x94\x26\xd2\xbc\xc9\xb5\xc8\xd7\x6c\x59\x40\x68\x68\x3a\x64\xec\xb5\x8d\xf1\xe8\x07\x85\xd6\x7d\xa0\x32\x44\x83\x40\x76\x5f\x5d\x66\x57\x42\xcf\x4a\xb9\x9c\xce\xe8\x51\x3b\xf6\xd5\x78\x65\x11\x0c\xda\xf7\x92\x5f\x47\xb3\xa5\x12\x0e\x57\x05\xd1\xab\x54\xf8\x70\x56\x98\xf1\x27\x4f\x29\xaf\x0d\xd8\x93\xac\x56\xab\xd1\x30\xea\x63\x52\x7e\xfb\x2d\x88\x3d\x6d\x34\x9f\x45\x53\xde\xda\x3c\xa8\x33\xbf\xb5\xed\x2a\x01\x56\x1a\xb5\xfb\xac\xa9\x21\x57\x49\x96\xd5\xdb\x36\x35\xd5\x59\x2e\x9e\x70\xcd\xd9\x67\x68\x57\xef\x79\xa1\x7f\x7f\x9f\x3d\x16\x70\xb9\x19\xbc\x25\xa2\xe0\x65\x26\xfb\x56\xb8\x06\x3d\xcf\xa2\x14\xda\x66\x73\x46\xae\xc8\x56\xe6\x01\x1e\x14\xc4\xf5\xc0\x64\x99\x4d\x31\x7a\xd6\x9d\x61\x50\x69\xe9\x92\x1d\x19\x9a\xbb\x6f\x3e\x46\x61\xd4\x24\x14\xd9\xdb\xc0\x1c\xc2\x0b\xc8\x2b\x74\xc4\xbe\x88\x97\x86\xb8\x08\x1b\x37\x21\xcb\xb6\x0b\x9a\xb5\xa0\x8a\xfe\x85\x57\x51\x96\x8b\x5d\xda\x01\x8d\x03\x96\x9f\x98\x0b\x01\x83\xc8\x76\xea\xe3\x49\x01\xcc\xaf\xf1\x4e\x9c\x63\x99\xec\xb1\xdd\x90\x7e\x1c\x92\x40\xd1\xd8\x9c\x4c\xa0\x8e\xb8\xab\xc7\x9b\xb5\xdc\xae\xec\x28\xc4\x34\x5c\xc4\xf7\xcd\xa6\x34\x87\xb5\x9b\xdb\x54\x96\x6e\x26\x2b\xe1\xe2\x33\x93\x30\x52\xd0\xea\x73\x36\xcc\x06\xd9\x0d\x49\x08\xc1\xd4\x36\x9a\x1a\xdc\xb4\xda\x1c\x33\x02\xb5\x04\x02\xef\x87\xb0\xab\x9a\x09\xd6\xac\x9f\x8e\x84\x17\x04\xb3\x83\xba\x9a\x1d\xb1\x98\x4b\x3e\xaa\xe1\x9d\xc4\x9c\x95\x8a\x1e\xb9\x28\xa1\x14\x72\x05\xb1\xd9\x98\x7d\xcb\xe9\x39\x30\xb3\x01\x5d\x67\x28\x2e\x3b\xc9\xb5\xf9\x66\x63\xb5\x7b\x2d\x36\x9e\x35\xf1\x02\x70\xae\x10\xca\x7b\x25\x04\x77\x5d\x70\x91\x5d\x90\xc6\x0f\x84\x56\xca\x06\x49\xea\x3e\x57\x57\x30\x2b\x9a\x27\x55\xbf\x24\x8f\x8e\xfc\x2d\xb9\x81\x3a\xab\xc4\xd9\xc8\x2b\xe4\xad\x40\x1a\xc6\x73\xbf\x02\xb8\x91\xdc\xdb\x20\x04\x67\x7a\xdb\x9b\xd7\x83\x08\x55\x76\x98\x16\x8f\x79\x3e\x78\xff\x56\x80\x02\xc5\x9f\x23\xa3\xa6\xe7\x73\x28\xca\xb1\x46\x7d\xca\x45\xbc\x57\x56\x20\x5b\x95\xd2\x48\xc1\x90\xd0\xc1\xc6\x92\xdb\x9d\x47\x5d\x74\x48\x98\x08\x6a\x2c\xa6\x19\x66\x5a\x96\x65\x8b\xe4\xd5\xc7\x77\x28\x44\xa6\xa7\x7f\xe3\x49\xc4\xc1\xcc\x13\x87\xdf\xa3\x57\xa9\xc1\x73\x06\x42\x67\x91\x82\x2b\xda\xd0\xe5\xec\xa8\x6f\xb5\x91\xb1\xc8\x9f\xda\xcf\xa1\x79\x70\x96\xcc\x44\x72\x45\x86\x1f\xcc\x68\xc4\x14\xb2\x04\x2f\x06\xd9\x5f\xac\x79\x2b\x62\x50\x95\x1f\xbd\x59\xac\xda\xeb\xf3\xcf\x63\x7d\xc7\xb6\x33\x57\xe9\x1f\xdc\x02\x95\x5f\x22\x5a\xc4\x3d\xde\xc0\xcd\x1a\xe7\xdb\xc2\xc9\xaa\x2f\x92\x0d\x03\xf7\x36\x98\xe7\x40\xb9\x22\x22\x0d\xcc\x16\x2f\x28\x7c\xfa\xec\xc4\xd7\x09\x70\xc8\xd8\xeb\x5d\x9d\xa9\x51\xac\x3c\xfb\x6e\x5c\xf2\xc6\x03\xb2\x99\x69\x79\xb2\xdb\x40\xed\x01\xc1\x81\x49\xa4\x46\x6c\xa1\x1d\xf5\xa8\xe5\xb6\xf2\x44\x16\xb6\xbe\x2d\x81\x85\xd7\x5f\x60\x08\xf7\xdf\x36\xb2\xc9\x96\xdf\x37\x50\x5c\x6d\xe2\x3b\x52\x9b\x27\x82\xff\x83\x54\x55\x97\x11\xb6\x91\x15\x39\x36\x52\xed\x17\xcc\x9c\xe5\x5e\x5f\x98\xe0\x93\x17\x6b\xfb\xfc\x0a\x1f\x4b\x33\x51\x9a\xc7\x0b\x14\xd6\xca\x74\xc7\x29\xe5\xa6\x92\x9c\xcb\xbc\x34\x55\x53\x84\x79\x34\x6e\x33\xde\xe3\x5c\x9b\x5d\x84\x6a\xf2\x9c\x61\xea\x4a\xce\x05\x9a\xd3\xa2\xfa\x38\x4d\xf2\x06\x3d\x37\x11\x92\x15\x05\xd1\x00\x97\xe9\x9a\x15\x17\x12\x00\xa1\x63\xf3\x12\xf6\xd2\x9b\x15\xcd\x50\x63\xa1\x57\x61\x52\x01\x6f\x92\x6b\xbb\xfc\xee\x4e\x12\x77\x61\x33\x35\xf9\x71\x33\x65\x6c\x61\x37\x81\xae\xf2\xa5\xf7\xf1\xa6\x67\x69\x4d\x5d\xd9\xec\x88\xfe\x3f\x58\x0d\x59\xc9\xdf\xd1\xaa\x89\x9c\xf3\x9b\x67\xe8\x9a\xd6\xec\xd5\xb5\xc9\xf8\x43\x8a\x01\x07\xa2\x17\x1c\x21\xf6\x4e\xe9\xf2\xbd\x33\xf4\xae\x36\xea\xf4\x6e\x21\x79\xd7\x4c\x34\x9e\xcd\x6f\xb2\xbe\x38\x0b\x6f\x83\xcb\xd3\x11\x90\x5d\x24\xc7\x67\x2a\x08\x2c\x70\xda\x15\xce\x0a\x39\x90\x8b\x3e\x3e\xf1\xe7\x15\xa3\x97\x8f\x32\x69\x65\x46\xb1\x27\xce\x66\x25\xe3\xaa\xf5\xd6\x85\x7e\xa9\xc8\x85\x16\x27\x33\x5e\xaa\xee\x73\xae\x67\xc3\x79\x56\x74\x29\xfd\x92\xdf\x10\x7f\x0c\xa3\x14\x2f\x88\xf5\xe0\x84\xfd\x20\xcb\x15\x2f\xd3\x01\x42\x45\xc5\x10\xb9\x07\x87\xf9\x5b\x76\x3a\x74\x17\xe4\xd9\xa0\x5d\x81\x35\x62\x8c\x08\x3c\x8d\x0a\x8c\x29\x4c\x85\x2f\x52\x28\x81\x07\xf9\x9b\xf2\x35\xe3\x93\x89\x48\x34\xa4\xaa\xa9\x2a\xf2\x04\x53\x7c\x2e\xac\x87\x75\xfd\x20\x6e\x08\xc6\x89\x32\x74\xc8\x49\x08\x5a\x4b\x9a\x9d\x75\x55\x71\x79\x72\x5a\xec\xe4\x08\x64\x9e\x15\xcb\x06\x05\xf3\xb0\x3d\xc9\x41\x75\x0e\x15\x5d\xa5\xcb\x2d\x49\xb8\xda\x78\xc4\x03\x12\x68\x09\x2c\xdd\x60\xc5\x7b\xb4\xa3\x4e\x3a\x34\x08\xc3\x8f\x3b\x99\x85\x19\xa1\xfd\x88\x39\xda\xa4\x78\xd5\x26\x1e\xd3\x00\xdf\x7b\x46\x04\xb9\x0a\x08\xa3\x07\xde\xb5\xf3\xda\x27\x3e\xb0\xe6\x03\x5e\x6a\x24\xfe\xbe\x11\x3b\x9f\x51\xe2\x8a\xd8\x4c\xc9\x3e\xff\x3c\x0c\x8a\x62\x61\xb7\x5b\xb9\xfb\x7d\x02\xef\x94\xe0\xa9\xbb\x5b\x57\xda\xb1\xfb\x2e\x4e\xcb\x74\x75\x4b\xbd\xd5\xf4\x29\x99\xc3\x51\xb4\xfe\x41\x88\x37\x2b\x57\x4b\xab\xb8\x0f\x5b\x7e\xfe\x79\x30\xee\xe7\x9f\xc7\x58\x3c\xf2\xbf\x45\xfa\xba\x17\x32\x24\x78\x50\x8a\x5a\xc6\xb0\xa2\xc7\x6f\x19\xe8\xc9\x51\x84\x2a\xc1\x0f\x71\xcc\xc7\xf9\x9a\xe9\x72\x6d\xd5\xf4\x00\xd0\x9d\x5d\x60\x5b\x71\x3a\x26\x4c\x0a\xbc\xca\xd2\xe0\x94\x79\xc9\xcc\xa6\xb9\x8b\x94\xb1\x0d\x8d\x41\x10\x25\xfe\x0e\xfa\x1c\x23\xbc\x41\x8e\x50\xe7\x95\x57\xd3\xdd\xc1\x17\xb7\x10\xbc\x3a\xac\xe3\x84\xfb\x8d\xee\x44\x0e\x70\x8b\x3b\x51\x0b\x59\x62\x9c\x52\x95\x54\x0e\x9c\x12\xce\x52\xc2\x61\xc3\x9b\x02\xb5\x8b\x2d\x4e\xa3\x48\x1f\x01\xd0\x23\x76\x60\x88\x01\x10\xf7\x59\x9d\xf1\xc4\x2e\xc6\x5b\xbc\x9b\x18\x79\x09\x7b\xb7\x55\x9a\x0c\xfe\x24\xeb\x2a\x3c\xef\x05\x51\x93\x3e\xb3\x09\xc5\x83\x70\x1b\x1f\x50\xc8\x02\x4a\x06\xb8\x27\x44\xc5\xd5\x83\xbc\x12\xac\x76\xfd\xb3\x23\xf6\x85\x59\xda\x67\x9b\x24\x8d\xd0\xd1\x78\xab\x99\x97\x55\x35\xf9\x55\x25\xc7\x26\x3f\xe1\x6d\x4a\x97\xbb\xbd\x87\x02\xc5\xdb\x86\x79\x6d\xb4\x46\x04\x14\xb9\xe3\xfc\x77\x7d\x12\x1f\x34\xaa\x21\x0d\xaa\x61\x43\xdb\x7d\x5a\x76\x74\xd1\xdf\x1e\x66\xe6\xc6\xd9\xa4\x21\x77\x8d\x76\x5a\x4c\xeb\x0b\x3c\x3c\x10\x15\x6d\x0e\xd0\x3a\xdd\x87\xe5\x75\x2c\xcb\x65\x45\xaa\x28\x79\xce\x2f\x83\xb3\x97\x6f\xb1\xb4\x2d\x3c\x36\x82\x8c\x68\x3e\xfe\x1e\x1a\x81\xcc\x62\x0b\xaf\xda\xea\x2b\xd1\x03\xa5\x2a\x61\xa1\x8f\xaa\x11\xc4\x70\x14\x70\x07\x9f\x66\x05\x53\x82\x97\x09\xe6\xc2\xf3\x29\x7c\xe4\xc4\x05\x90\x79\xd1\x08\x41\x18\xb9\x88\x40\x50\xb6\x46\xde\xa2\xad\xb4\x10\x36\xe6\x81\x32\x8f\xa4\x73\x73\x13\x9d\xc9\xd5\x87\xc6\x6c\x14\x24\x09\x94\x72\x55\xa5\xeb\x50\x67\xc4\x1a\x7e\x1f\xce\xb8\x6a\x77\xa8\x08\xbc\x9f\x30\x6c\xa1\xe9\x5c\x7e\x0c\x36\x4e\xae\xa2\x9d\xfb\x11\x42\xa6\x6d\xfa\x49\xc4\xbe\xc7\x01\x5c\x38\x36\x52\xeb\x1c\x77\x48\xed\xba\x45\x3f\xc4\xe4\x50\xdf\x0a\x9b\xb4\x1c\xa4\x77\x0a\x16\x0e\x5b\x6e\x45\xb9\xe9\xd8\x8c\x6e\x72\x38\x23\xeb\xce\xde\xde\xa3\x68\x0b\x02\xa4\x59\xeb\x9a\x59\x64\x4d\x95\x46\x11\x30\xbb\xed\x40\xb8\x07\x35\xde\x52\xe1\x1e\x50\x87\x39\x08\x48\x89\xf6\x07\x4d\x1f\xb5\xb4\x67\xaa\x4a\xb0\x45\x02\xbe\x63\x96\x50\xe9\x3e\x69\xd8\x0c\xb8\xc7\x5e\x90\xfd\x6f\x2a\xec\x9e\x38\x00\x13\x7c\xca\x54\xcf\x48\xa5\x95\x9c\x90\x06\xd5\xd6\xce\xa7\x84\x99\x90\x45\x7a\xeb\x76\xfd\x72\x26\x57\xc7\x04\xaa\xe6\xce\x1d\x1d\x91\xd0\xa7\x0f\xd4\xab\xd6\xda\xfc\xc2\x3c\xc2\x8e\x8e\x8e\x58\x07\x66\xd6\xe9\xd5\x91\x19\x06\x9a\xf8\x5b\xbe\x72\x04\x30\xd6\xa5\x01\xbf\x41\xa4\x27\x78\xef\x21\x9d\x07\x8f\x36\xc3\x24\xe8\xfe\xa7\x26\x16\xe9\xb7\x3e\x1c\x84\x5c\x1d\x33\x1c\x7f\x46\x36\x6f\xa0\x0f\x3b\x9c\x6c\x74\xcd\x7f\x19\xb8\xe5\x47\xf4\x51\x7b\x28\xbe\xba\xfb\xda\x37\xee\xbb\x85\xfb\x36\xd3\x33\xab\x46\xaa\x1e\xd9\x3e\xab\xfb\xf4\xfb\xf0\xb7\xf0\x19\x36\x38\xb4\x8f\x2e\x4b\x96\x67\x3e\xf0\xb1\x4a\x65\x5e\xa0\x03\x60\x41\x8f\x16\x98\x0b\x1f\x37\x7a\x10\x30\x8c\x70\xa8\xcf\x8e\x58\xc0\x3f\x5c\x87\xfb\x5b\x45\x1c\x1f\x3d\xb9\x13\x53\x31\x22\x5f\x85\x91\xdc\x85\xcf\x44\x4b\xac\xf1\x1a\x3f\x7d\x87\xc0\x70\xbb\xb2\xc2\xdc\x66\x0d\x1b\xb4\xd3\xe1\xa1\x0b\x78\x97\xb3\xf3\xc4\x3a\xd0\xdf\x55\x06\x88\x8e\x04\x42\xbf\xd5\x29\x72\x0c\x70\xf3\x31\x0a\xe6\xdd\x0e\x62\xeb\xc9\xda\x1d\x31\x3b\x1f\x2c\xdc\xa9\x1d\x4f\x55\x85\x39\x56\x48\x1a\xbd\x99\x57\x82\xe9\x92\x83\x91\xcd\x69\xa1\xb4\x5c\x54\x0c\xc6\xa5\xe8\xc0\xbe\xcd\x28\x43\xca\x24\x2b\x52\x78\xb7\x0e\x63\xe6\x1d\x0c\x76\x44\x8e\x4d\x75\xfa\x0c\x8f\xe4\x06\x6a\xac\x00\xac\x2e\x32\xb4\xe1\xef\x44\xd4\x11\xac\x83\x9e\xbd\x2a\x9a\xd8\x41\x4b\xaa\xa5\x61\x62\x84\xe5\x17\x50\x38\xbf\x21\xe9\x52\xa0\xcc\x7a\xe1\x22\x78\x83\x3e\xef\xb2\xf7\xd1\xab\x2c\x42\x95\xe3\x7f\x4d\x67\x36\x0c\xc9\xbc\x05\x27\x0a\xc6\xe8\x55\x6e\x46\xb3\x0f\x0d\x47\xdb\x05\x74\x41\x92\x6e\x24\x55\x9f\x70\x9d\x36\xbf\xe9\xf2\xfc\x23\x6f\x46\x77\xbe\xdc\xc0\x8d\x57\x18\xf8\x02\xeb\x32\x13\xd7\xb5\x35\x34\x24\x44\xfa\xc8\x2e\x56\x92\x09\x4c\x88\x84\xd9\x9a\xc2\xf7\x4b\x15\x09\x06\x03\x02\x4a\xba\x62\x7d\x81\x8d\x07\xd6\xac\xf0\xb8\x48\x91\x97\x6c\xbe\x0e\xed\x92\xaa\x4f\x07\x73\x2b\xb8\xe5\x7e\xbf\xcb\x95\x13\x0a\x52\xbf\xef\xd2\x71\xe3\x0e\x6e\x71\xd7\x7d\xba\xbb\xca\x9e\xe5\x1a\x16\xc3\x03\xed\xf0\xf6\xe9\xc8\xd8\x3e\x7e\xfe\xf0\x3b\x6a\x3b\x3d\xbb\x3c\x69\xff\x35\xc9\xb9\xe5\x12\x8a\x69\xf9\xee\x3c\xb4\xd8\xc8\x3c\x6d\x0b\x43\x93\x6f\xef\x14\x41\xef\xd0\xfe\xdd\x51\x0c\xc9\x1f\x81\x96\xd7\xc8\xf9\xab\xe3\x17\x1d\xdf\x0a\xea\x00\xb0\x27\x65\x96\xe7\x2c\x95\x2b\x48\x3e\x56\x04\xa9\xe1\x31\x27\x8c\xe9\x34\x04\x14\xbb\xa7\xff\x6e\x84\x8e\xf7\x5d\x40\xe9\xd8\xbb\x72\x98\xbc\x49\x34\x6e\xff\xde\xb5\x0f\xf4\x40\xe1\xd1\x8e\x96\x5e\x7d\x38\x35\xe7\x60\xff\xaf\x7e\x41\x60\x0e\x3d\x50\xcf\x84\x0f\x27\x0a\x9b\xaf\xce\xa6\xd6\x5d\x14\x29\x3b\x2d\xd2\x5b\x74\x3d\x33\xbf\x7e\xa4\x46\xf0\x07\x64\xcb\x82\x18\xf4\xcd\xe7\x4a\x09\x0d\xed\xeb\xc7\x08\x16\x01\xe6\xa5\x3e\x02\xf6\x7a\x0e\xf8\x29\x22\x97\xe0\x45\xd4\x7e\xeb\x04\x70\xdd\x23\xa9\x09\x54\x28\xb1\x79\xab\x30\xe8\x3f\x8b\xf4\xae\xc3\x8a\x22\x75\x83\xd6\xc1\x34\x0f\x09\xcb\x36\x28\x82\xad\x6c\x98\xeb\xbb\x83\xf7\xfd\x06\x6c\xbc\x3b\xc4\x74\x96\xae\xff\x69\x91\xd6\x06\x85\xbe\xb5\x2f\xa1\x67\x18\xee\x0c\x35\x10\x54\x90\x78\x02\x34\x97\x25\xc6\x0c\xbc\x3e\x7b\x56\x2b\x52\xea\xd2\x4a\x7c\x0c\x3a\x9d\x87\xdd\xb1\xae\xc2\x66\xba\xc0\x36\xbe\x5b\x7b\x76\x0a\x78\xea\xfa\xef\x22\x14\x5a\xbd\x18\x50\xe4\x51\x90\xbe\x62\x4a\x64\x77\xac\xbb\x07\xfe\xc1\x8c\xed\x7e\xfb\x8d\x10\xa7\xa5\x2d\xcb\x82\x1e\x12\xdd\xfd\x4b\xb5\xdf\x6b\x1e\x21\x7a\x94\x47\xca\xd1\x6e\xf3\x53\x9d\xf6\xc6\xb4\x72\xf6\xa9\x5e\x30\x95\xf8\xcd\xee\x06\x82\x0e\x41\xba\xa7\x26\x89\x3f\xa6\xbc\xf0\x7d\xb0\xf3\xbf\xa6\xd9\xfd\x6e\x48\x2f\xbd\xcf\x94\x3b\x7a\x7e\x29\x47\x6c\x70\xd8\x72\xe6\xfe\xe8\xf5\xe2\x1c\x45\x91\xfe\xae\xb5\x3a\x28\x95\x75\x46\x0b\xa8\xaf\x12\xcd\x69\xaf\x15\xba\xb9\x40\x81\xee\x44\x16\x93\x6c\xba\x2c\x21\x9e\x02\x48\x8f\x29\xa1\x75\x56\x4c\x95\x0d\x1b\xcb\xc5\x44\x43\xbd\x10\xc6\x2c\x56\xea\xc5\x48\x2c\x0a\xc1\x41\x84\x5a\x37\x36\x86\xba\x24\x8f\x5c\xc2\x42\x95\xa5\x02\x9b\x37\xb6\xc6\x12\x25\x34\x73\x88\x4a\xc7\x0b\x87\x9e\xcd\xe0\x63\x52\xd3\x48\x87\x67\x03\xb4\xd8\x4e\x68\xc6\xca\x8c\x85\x78\xbd\xb8\x90\x67\x74\x52\xa3\x8c\x11\xe6\x08\x12\x20\xb0\xe9\x07\x08\xf5\x00\xc4\x44\x9f\x89\xe9\x32\xe7\xe5\xe9\xcd\xa2\x14\x4a\xf9\x32\x39\x67\x62\x7a\x7a\xb3\xe8\x7a\x94\xdd\x8f\xd6\x78\x9f\xed\xfd\xaf\x3d\x07\x08\x19\x8f\x48\xf1\xf6\x3c\x8a\x67\x36\x44\xab\x4b\xb7\x71\x34\xbf\xe1\x31\x08\xb3\xe5\x86\xa9\xc4\x5f\x7f\x1f\x1f\xe5\x06\x9a\x00\xcc\x42\x78\x53\xe0\xe6\x33\x0c\x10\xf6\x43\x29\xe7\xdb\x11\x16\x0d\xb3\x33\x5d\x57\x5d\xc8\x08\x5c\xaf\x17\xd1\xd4\x16\x8c\xef\xfd\x75\xaf\x86\x6b\x4f\x8b\x0e\x14\x56\x65\x3c\x8a\xd7\x44\x2c\xb7\x79\x18\xcf\x27\xa1\x6f\x23\xdb\x20\x6c\x9f\x02\xe8\x98\xd7\xdc\xaf\x2d\x0f\xc0\xbc\x3b\x78\x5f\xdb\x43\xe8\x5e\xdd\x41\xf3\xe5\x77\x11\x19\x56\x77\xcf\xc6\xb0\xa3\x6c\x43\x12\x40\xb8\xff\xfd\x10\x98\x15\x70\xcc\xe0\xfe\x8e\xe2\x69\x0a\xdd\xbb\xf6\xc7\x9d\x4a\x6f\xca\x3c\x37\xb2\xe5\x7f\xc7\xf2\x9b\x61\xe1\xdb\x4a\xa9\xcd\xa0\xa4\xe6\x31\xeb\x5c\x67\x62\x65\x90\xd0\x61\x50\x56\x53\x4e\xd8\x24\xbb\x11\xe9\x60\x86\xe5\x78\x20\xf3\x26\x18\xfa\xec\xd3\x16\xc2\x9d\x7c\x6a\xad\x02\xdc\x51\x13\xb9\x58\x0f\xb4\x1c\x24\x79\xb6\x18\x4b\x5e\xba\x52\x8c\x9d\x37\x0e\xbe\x2d\xd6\x00\x41\x8a\x36\x90\x96\x6b\x2c\x61\x68\x56\x69\x63\x45\x5d\x0d\xc3\xcc\xe5\x85\xc2\x2c\xa2\x2e\x23\xf8\x2b\x4c\x01\x56\x42\xd5\xba\xc3\x83\x83\xfe\xc1\xc1\x01\x74\xc3\xbc\x2a\xa6\x55\x50\x95\x30\xa3\x32\x89\x0f\x1e\xfa\xea\x96\x3c\xcf\x49\x55\x69\x7f\x4a\xe5\xdc\xba\x3d\x97\x82\xa2\xe3\x52\xac\xf5\x17\x02\x83\x50\x6d\xae\xae\x18\x95\x53\x3c\x0b\x66\xe3\xa3\xea\xcc\xc1\x8e\x96\x23\x0b\x96\x8a\x39\x64\xa2\xa2\xbc\x4f\x66\x14\xa4\x41\x61\xf6\x99\x32\x7d\x86\x78\xe0\xa5\xe0\x51\x7e\x53\xbb\x57\x58\xc8\x53\x65\x53\x43\x4e\x36\xbb\x13\xee\x09\xe5\xdb\xac\xec\x06\x53\xda\x4c\x7b\x25\xcb\x2b\xd5\x37\xe0\xc4\xb5\x28\xd0\xbb\x89\xe7\x39\x93\x65\x18\x06\x1a\xec\x2e\x96\xd6\xc0\x29\xca\xc9\xa4\x92\x0d\xff\x85\xd4\xc2\xc7\x72\xff\x72\x78\xc8\xe6\xd2\x50\xa6\x1f\xd6\x25\xbf\x31\x23\x7b\x9f\xe3\xea\xc0\xf7\x82\x6a\x8b\xe1\xd8\xc1\x90\x8c\x3d\xd5\xde\xef\x35\xcd\x26\x93\x2c\x59\xe6\x1a\x15\xcb\x37\x48\x58\x86\x4c\xa9\x02\x20\x55\x5d\x35\x28\x02\x1f\xff\x42\xc3\xd3\x11\xe2\xfb\xcd\x6b\x93\xeb\x99\xcc\xe5\x94\xbc\xff\xa1\x24\x66\x30\xb4\xa1\x50\x15\x66\xda\x0a\x37\x99\x1c\xc1\xbc\x45\x56\x35\x57\xad\xd4\x7c\xca\x0a\x3e\x17\xb6\x6a\xe5\xd0\x6d\x23\xd6\x46\x55\x36\x5e\x10\x0e\xfd\xdf\x97\x59\x72\x95\xaf\x19\x57\x66\xce\xe4\xd8\x59\x96\x66\x47\xa9\xf0\x26\xc3\x13\x19\xd0\x89\x3f\x9b\x89\xaa\x3d\x2d\x82\x29\x7f\x8c\x8e\xcc\xb1\x4b\x97\x97\xf0\x05\x48\x4d\x72\x42\x39\xf5\x5c\x71\x5a\xee\x9c\x4d\x4b\x4e\xd1\x83\x98\x9a\x1b\x4f\x48\xc5\x09\xd4\x1e\x8d\xf8\x55\x6a\x07\xc4\x97\x47\x54\x88\x9b\xa7\xe9\x63\xca\xfc\x0c\x12\x7f\xcf\xdf\x03\x41\x47\xca\xb4\x68\xff\xb4\xd2\xdf\xf9\xdb\xe3\x1f\x63\x2f\x55\xac\xed\xb6\x2c\x74\x96\xbb\x7c\x42\x98\x98\x00\x93\x99\x91\x2b\x8b\x6d\x4e\x55\xd5\x2a\xf5\xd3\x0e\x0f\xfa\xec\xd0\x17\x05\x7c\xf2\xf2\x39\x2a\x2d\x20\xdb\xb1\xe1\x79\x7e\x38\x02\x0e\x7e\x3b\x6e\xde\xcb\x1c\x67\xec\x0a\xe4\xd1\xb5\xe6\x1f\x65\xc1\x80\xbe\x78\xa7\x7b\xb5\x05\x88\x80\x0c\x04\x73\xbe\xa0\x64\xca\x58\xd1\xf4\xe8\x7b\x97\x23\x27\xaa\x7d\x6b\x0d\xfe\x69\xc9\x57\x90\x25\xce\x9e\x64\x1b\x99\x47\x09\x32\x4a\x61\x5a\x7c\xe8\xf6\x20\x08\x60\xc8\xd8\x0b\xb2\xd2\xa3\x7b\x23\x54\x6e\xaf\x36\xc6\xa6\x41\x64\x04\x05\x29\x98\x59\x9c\xf0\x64\x56\x2b\x40\x78\xcb\x69\xaf\x78\xc3\xbc\x5d\x78\xa2\x0b\xf7\xab\x4c\xdd\xce\xc7\xfe\x5e\x9d\xd0\x3f\x3e\x06\x0f\x85\x94\xa5\x4b\x08\x37\x40\x3e\x06\x8c\x4f\x93\x7b\xb5\x36\x87\xc0\xba\x78\x52\x31\xcb\xb5\x69\x8b\x95\x5a\x33\xaa\x56\x9b\xfd\x2a\xdc\x98\x39\x57\x1a\xdf\xdf\x20\x0b\xd5\xf2\xdf\xfb\xdf\xb1\x9c\x5d\xad\x42\x63\xb9\x14\x36\x31\x23\x3c\x5f\x7c\xfa\x05\x9e\xbb\x8c\xdc\xc4\xca\x31\x65\x5a\x41\x31\x26\x98\x0a\x7b\x78\xcf\x07\x04\x60\xba\x6b\x73\x84\xbd\xa7\x2a\x9b\x49\xa5\x59\x29\xfe\xbe\x14\x4a\x2b\x62\xc8\x69\xc9\xa7\x76\xe5\xf6\xba\xb0\xb5\xe7\x11\x9e\x11\x9d\x97\x0b\x2a\xe3\x0f\xf1\x3f\x86\x26\x21\x37\xbf\x17\xb2\x6a\x44\x7d\x5a\xc0\xe0\x1f\x5c\x4a\x1f\x1f\xa2\xea\x4a\x34\xa1\x1f\x27\x72\x4b\xcf\x23\xcd\x2f\x94\xc7\xb3\xec\xb3\x52\x0c\x16\x72\xb1\xcc\xcd\x8d\x4b\xfb\x85\x90\x20\xf5\x26\x6c\x1c\xa2\x13\x42\x4c\x3c\xa6\xa1\x9a\x27\x55\x9b\x8b\xaa\x95\xd2\x66\xaf\x66\x42\xe4\x6c\x91\xdd\x88\x9c\xa5\x22\xd7\x9c\xcd\x97\xb9\xce\x16\x79\x86\x97\x75\x56\x98\xeb\x5a\x89\xfd\x54\xe0\x07\x84\xa0\x3d\x04\xb5\x10\x70\xf5\x11\x22\x11\x20\x62\x72\xc8\xce\x85\x30\x52\xa5\x5e\xa8\xd1\xfe\xfe\x54\xca\xe1\x34\xdf\x57\xbf\x88\xbc\xf8\xbb\xc3\x14\x40\x79\x6b\x7a\x3d\x77\x23\x9b\xd9\x1e\xd6\x70\xa5\xe5\x32\x99\xd9\x4d\x5a\x09\xa6\xf8\x2a\x74\x7c\xc3\x9f\x31\xdb\x35\x42\xcd\x8a\x29\xd4\x75\x4e\xc5\x8d\x48\x29\xa0\x77\x4d\xed\xb2\x54\x14\x3a\x9b\x64\xc0\x1b\x8b\x44\x58\xb6\x08\x01\x5f\x73\xcc\x4b\xc3\x0b\x70\x4f\xc6\x0e\x1c\x14\xfb\x11\x72\x2f\xcc\x0f\xe1\x79\xb2\xf5\x6b\x43\x1a\x86\xa9\x13\xae\xe0\xd4\xa4\x01\xf6\x68\xe2\x86\xc6\x57\x41\xfa\x35\x34\x9a\x84\xf5\x6c\x33\x75\x4e\x52\x06\xbe\x40\x3c\x31\xd9\x31\x8f\xd9\x74\x29\x54\x2d\xe0\xc3\xd6\x66\x2e\x6d\x9d\x6f\x90\x5d\xcd\x99\xc1\x73\x8b\xf4\x12\x8c\x44\x1d\xcf\x6d\x3f\x38\xc5\xaf\x6e\xcc\x8e\x7c\x15\x8f\xf8\x76\x26\x28\x53\xaa\x60\x89\x2e\xf3\xc1\x35\xbb\x12\xeb\x4a\x41\x75\x3a\xbd\x0b\xae\x28\xf3\x55\x30\x92\x2e\xf3\x37\xaf\xcc\x0f\x51\xfe\x67\x0c\x95\xc9\xae\x6b\x9c\xc3\xd6\xbc\xad\x72\x8c\x13\x83\x97\xc4\xaa\x96\x71\x9f\x20\x3f\x91\x5c\x6a\x36\xe3\x45\x9a\x87\x95\x76\xf1\x7b\x15\x6c\x1b\x7c\x2f\xc7\xf0\x46\x29\x6b\x3f\x3c\x39\x7d\xfc\xfa\xc7\x0f\x7e\x86\x1f\xdd\xd3\xe0\x55\x29\x6f\xd6\x3e\x94\x1c\xb3\xe1\xd4\x32\xee\xae\x66\x59\x32\x43\xd6\xa9\x34\x28\x3f\x67\x68\x87\x5a\xf1\xfc\x0a\x02\xcf\x50\x4a\x36\xd7\xa9\xf5\x01\xb0\xc5\x3f\xc8\xce\x64\xa5\x0a\xcc\x22\x23\x21\xd6\xd0\x02\x4e\xe4\x5c\x90\xe7\x68\x55\xbe\xa9\xde\xa4\x1f\x89\x18\x40\x12\x31\xa7\x0a\x4d\xf7\xf5\x1a\xe5\x61\x35\xec\xba\x10\x33\x6c\x56\xa3\xba\xdf\x83\xd4\xf9\xfe\x4b\x88\x13\x74\x7f\x55\x4e\x0b\x71\xbb\x6a\xe9\x5f\xdd\x24\x70\x23\x0d\xd9\x8e\x99\x82\x34\x58\x63\x11\x26\x11\x2c\xd9\x64\x69\x3e\xd8\x4a\x3c\x28\x19\x53\xbb\x58\x82\xe6\x45\x32\x93\x25\x42\xa3\x7d\x9c\xc8\x64\x49\x8f\xa4\xcc\xbc\x5d\xed\x35\x6d\xde\xa7\x4b\x5e\xf2\x42\x53\x20\xec\x58\xb0\x5c\x28\x35\x30\x7c\x62\x20\xcb\x81\xf8\xfb\x92\xe7\x03\x2d\x11\x1a\xbe\xdb\x26\x36\x94\xfa\xcc\x9e\x68\xfc\xf5\xe9\x04\x1f\x55\x86\xbd\x40\x95\x3e\xe5\xeb\x06\xc1\x93\x4b\x91\xbe\x97\x62\x32\xce\xa0\xea\xf6\xd3\x48\x14\x41\x48\x01\xbd\x95\xf5\xe7\x81\x4d\x50\xdc\x00\xd5\x9c\xa0\xca\x81\xf4\x3f\x07\xe7\x6b\xcb\x2e\x85\xd9\xac\xfe\x4b\xee\xd1\x14\x9e\x9b\xe5\x0e\xdb\x64\x97\xff\x5f\x7f\xa3\x70\xa0\xe6\x6d\xa2\xab\xc7\x41\xf8\xec\x28\xa2\xbf\xe0\x46\x81\xfb\x16\x6c\x86\x9b\x00\xd5\xa6\x0a\x81\x94\x9c\x2d\x64\x66\xa4\x96\x20\x59\x36\x15\x38\xa9\x8d\x73\xe2\xd6\xd6\x50\xed\x08\x73\x5b\x73\x96\x67\x0a\x36\xc2\xbe\x2a\x6c\x89\xfd\x20\x49\xb3\x2f\x07\xe6\xdf\x1e\x66\xff\x0c\x98\xcc\x7a\xcf\xf3\x24\x81\x72\xe7\x53\x2c\xb2\x91\x8a\x85\x9e\x0d\xf0\x27\xd4\xb6\x5a\x2e\x69\x6d\xaf\xde\x15\xb7\xf0\xe1\xe0\xb3\x2c\x4f\x4b\x01\xa5\x7a\xbc\x7f\xee\x26\x56\x18\xd8\x9a\x0c\x07\xff\xc1\xd5\x22\x08\x79\x24\x1a\x8b\x81\xe9\xf6\x71\x8c\xe3\x72\x5d\x8b\xfa\xc3\x06\xd5\x72\x06\x2d\xce\xbd\x16\xca\x10\xea\x80\xbd\x9c\x50\x83\xcf\xbc\x61\xa0\xe2\xb6\x1b\x7b\x96\xd5\xdc\x06\x7a\x51\x80\x06\xc4\xea\xc1\x2e\xc6\x8b\x22\x23\xba\x5b\xc2\xa3\xc0\xc0\x5f\x5e\xf7\xaa\x36\xf4\xf2\x3a\x0a\x50\x2a\x36\x65\xb3\xdf\x60\x2d\x3f\x5f\x17\xc9\xac\x94\x85\x79\x9c\x82\x36\xc3\xde\xb0\x20\x92\x07\x32\x8f\xa1\x8e\x90\x19\x45\xe5\x6f\xb8\x39\xcb\x83\x15\x5f\x83\xe8\x8c\xf0\x20\xaf\x55\xdf\x51\x56\xe5\x64\xfa\x64\xe3\x18\x61\x8a\xc3\xf6\x41\x6b\x03\x99\xfe\xe0\x08\x18\x88\xbc\xbc\x25\xad\x98\x29\x34\x67\x62\x56\x22\x9f\x10\xf2\x43\x41\x38\x95\xf3\xba\x88\x31\xe3\xf0\x34\x35\x33\x80\x92\x42\x20\xd7\x1b\xe1\x00\x0f\x92\x11\x11\xe8\x74\x64\x85\x97\xdf\xad\x38\x65\x53\xcd\xd9\x54\x07\x60\x2b\x22\xad\x95\x5c\x6a\x7c\x4e\x05\x6f\x2a\x97\xaa\x31\x2a\x74\x64\x1e\x4b\xf8\x5c\x74\xea\xae\x3d\xe4\xdc\x7b\x2e\x1d\x8e\x95\x52\x3c\x08\x6c\x01\x84\xd5\xed\xf9\xaa\x00\x93\xf0\x2a\xc2\x36\x67\x72\xf5\xa8\xf2\x33\xb9\x03\x06\x2a\x6e\x68\xe9\x63\x78\x7c\x53\x67\x5f\xaf\x36\x0e\xd3\x5a\x41\x73\xc7\x5a\xe1\x8e\x89\x47\x25\xf3\x76\x04\x06\x9a\x55\x86\x14\x81\x41\xbf\xd2\xd2\x8f\xe7\xb3\x15\xdd\x0a\xa7\x00\x65\x13\x4a\xa1\xc1\x66\x8c\x36\x2c\xad\x19\xa1\x4d\x8b\x6b\xc3\x67\x65\x79\x55\x74\x36\xed\x62\x13\x3e\x1b\xf7\xb0\x19\xa1\xd5\x1d\x74\xe5\x58\x42\x95\x52\x55\x0e\x1d\x4e\x85\xb6\x21\x65\xdd\x9e\xf9\xcb\xeb\x97\x02\x25\x5b\x4d\x14\x6a\xbe\x79\x37\xdc\xa5\x8d\xd7\x9f\xf7\x2c\x60\xbf\xfd\x16\x2c\x25\x68\x15\xa7\xaf\x0e\x7e\x68\x34\xe0\x3b\xb4\x6e\x40\xa2\x77\xc3\xa7\xa6\x9f\x7f\xce\x3e\xeb\x76\xac\xd4\x04\x66\x07\xf7\xa3\xf3\x78\x0c\x21\xbb\xcf\xb5\xa0\x90\x20\x38\x80\xfa\x37\xd7\x0d\x3a\xaf\x88\x73\x28\x19\x69\xab\x17\x86\xbc\x30\xf6\x99\x03\xf5\x84\x1a\x2c\x8b\x4d\xeb\x73\xae\x64\xcd\xb9\x60\xd0\x1e\x88\xd4\xde\x4e\xd9\x84\x20\xd7\xb0\x01\x3f\xf6\x37\x87\x9e\x00\xaa\xfd\xd8\x8a\x1c\xd7\x79\x1b\x6e\xa0\xe1\xef\x43\x8d\x5b\xd8\x16\xcc\x40\x75\x04\xb7\xad\x4e\x82\xfe\xce\xaf\xc6\x7e\x17\x13\x04\x71\x16\x20\xc0\x20\x94\xb4\x01\xd4\xf7\xed\xa0\x42\x1e\x55\x85\xd4\xb0\x14\xc8\xf6\xd1\xb0\xf9\xa1\x20\xd4\xcc\x16\xd8\x77\xcd\x1c\xca\x8b\x39\x95\x55\xb1\xba\x2b\x60\x3c\x59\x27\xc7\x54\xb3\x82\x5f\x44\x72\x32\xf0\x0f\x94\x61\x85\x79\xf3\x67\x71\x1e\x0c\x7a\xbb\xa8\xa2\xa3\x03\xb7\x46\x0e\x59\x87\x00\x1a\xec\x7a\x50\x3d\xc6\xe7\xd6\x02\x8e\x1f\x06\xcd\x56\x44\x33\x47\x1d\x6e\x4b\xfa\xec\x5d\x13\xf6\xfa\x4d\x54\xf3\xbe\x17\x88\x88\x9f\xb9\xb1\xac\x48\x87\x35\x74\x0a\xb1\x62\xa7\x48\xbb\xaf\x0b\x71\xb3\xc0\xe7\x10\x50\x33\x08\x55\xa0\x4c\x76\xb0\x3b\x21\xc8\x60\xf6\x9b\xf7\xf4\xae\x3b\x13\xe6\x5b\x89\xd9\x72\x03\x89\x7e\x76\x54\xa7\x51\x14\x39\xad\xcc\x79\x61\x24\x51\xce\xd2\xec\xda\xd6\x66\xc9\x54\xdd\x44\xd1\x2c\xf0\x85\x59\x3f\x20\x79\xaa\x08\x45\xbd\x34\xbb\x0e\x34\x25\xa4\xef\x4a\xb3\x6b\x7f\x07\x65\x93\x92\xcf\x05\x7d\xdd\x18\x0c\x4d\x95\x87\xbb\x1d\x6c\x1a\x14\x60\xa5\xbe\x94\x8c\x35\x51\x8a\xfc\x66\x2c\x79\x74\xc6\x90\x3a\x69\xc4\x0e\x1e\x79\x8e\xd2\x41\xfb\xd9\x88\x1d\x1e\x1c\xfc\x6b\xf8\xbd\x75\xdd\x1c\x31\x3e\x56\x32\x5f\x6a\x11\xfe\x0a\x8a\x45\xec\xe4\x13\x94\xdb\x52\x54\x38\x11\xa6\xca\xc4\xc8\x96\xff\x62\x08\xfb\x87\x1f\x86\x2c\x48\xa2\xef\xf4\xf2\xb8\x06\x85\xfd\x73\xc9\x53\xd4\xf5\x1a\x8a\x17\x0a\x3b\xb2\x4c\x87\xd5\x87\xb5\x2f\x92\x6b\x9f\x6e\x38\x9e\xcd\x0b\xd0\x99\xcb\x5f\x9f\x16\x85\x28\xd1\xe2\xf0\x0b\xf0\xf2\x55\x56\xa4\x86\x19\x9b\x61\x48\xbe\xe2\x06\x36\x3c\xf4\xd1\x02\xab\xd7\xf7\x18\xab\xa2\xb2\x34\xa2\x7a\xe7\x5f\x3a\xb0\x44\xb3\x25\x61\x8c\x79\xd8\xb4\x57\xdb\xc3\x21\xcd\xf2\x2d\x0c\x3d\xe4\x69\x7a\x6a\x96\xf6\x2c\x53\x5a\x40\x26\x09\x54\xc6\x76\x6e\xeb\x28\x86\xaa\xcb\xe2\x0c\x7a\x7f\x18\x8e\xb3\x02\x67\xd2\xf3\xe5\x7a\x52\x99\x58\x4e\x11\x2a\x50\x9b\x66\x67\xa9\xcb\x50\x51\x2a\x93\xe1\x58\xa6\xeb\x76\x0a\x9a\xf3\x72\x9a\x15\x23\x76\xb0\xb8\x89\x68\x05\x0d\xcb\xb5\xef\xdb\x68\x2b\xa0\x9e\xf0\x6b\xeb\xc6\x3c\x62\xb3\x2c\x4d\x45\x11\xfe\x86\x71\xf5\x23\xb3\xbc\xee\x60\x00\xe7\x6e\x00\xd6\x87\x01\xfe\x82\x6e\x23\xbd\xb0\xcb\x60\x25\xc6\x57\x99\x1e\x2c\x95\x28\x07\xc8\x77\x46\xf0\xe4\x8f\x1a\xcd\xe5\xaf\x4d\x2d\x2a\x25\x45\x50\x23\x1c\x04\x7c\xbd\x45\x61\xbd\x03\x69\x51\xc6\xcb\xe9\x14\x42\xbf\x05\xe3\x69\xca\x08\x1d\xd6\x20\x6d\x50\x1a\x55\x9b\x92\x93\x09\x6a\xca\x2d\x30\x8a\x36\x40\x1f\x0b\xf2\x73\x08\x92\x53\xb9\x3d\x0c\x77\x87\x06\xb9\x90\x8b\x20\x8f\xeb\xd6\xe6\x8f\xb1\xee\xba\xef\xd1\x49\x78\x9e\x74\x43\xac\x26\x33\x5e\x1a\xd2\x22\x5f\x97\x1e\xfb\x0b\xfb\xa2\xd7\x89\x85\x6d\x70\xd1\x39\x02\x82\xa9\x70\x25\xf8\x09\x99\x92\x4f\x24\x1d\xe4\x68\xb6\x78\x07\xeb\x3f\xfb\x47\xb0\x13\xcc\x9a\xf4\x47\x6c\x9c\xcb\xe4\xea\x51\xf4\x9b\x25\xa5\x4d\x33\x8d\x7b\x40\xa0\xce\x6d\xbb\x7d\xc4\xa9\x9b\x85\xcd\x04\x4f\xa3\xe3\x4e\x14\xe6\xce\xb9\xa1\x9a\x13\xa5\x9e\x65\xc5\xd5\x87\x66\x64\xe4\x59\x71\x15\x30\xe8\xb0\x43\xa5\xa6\x6c\x29\xf2\x4e\x9f\x21\xf6\xd4\x4c\x08\xdd\xa9\x0f\x64\x23\xf7\x37\x63\xbd\x71\xea\x35\x30\x8e\x67\x5f\xbc\x7c\xf2\xb2\x6b\x0e\x75\xca\x7b\x23\x76\x2e\xcb\x72\x8d\xc9\x9f\x58\x07\x69\xf4\x43\x87\x64\x16\x27\xcb\x60\xec\x22\x57\x51\xea\x3b\x84\x06\x89\x7c\xc8\x37\xe5\x6f\x6a\xc8\xd8\x53\x97\x43\x72\x91\x25\x57\x8c\xb3\xb1\x80\x6a\x10\xe0\x02\x32\x91\xa5\xcf\x6d\x2f\xe6\xa0\xbd\xbb\x96\x59\xea\xf5\x15\x89\xcc\xf3\x4c\x91\x7a\xd9\x96\xc0\xb8\xb2\xf5\x23\x32\x91\xa7\x4c\xa4\x99\x06\x7f\x0d\x81\x05\xf3\x30\xd1\x3e\x99\x71\x7d\xa2\x2e\xb0\x23\x33\x5e\xac\x61\xf6\xf7\x6c\x46\xa2\xb1\x00\x00\x02\x63\x30\xdd\x29\x05\xef\x36\x81\x5e\x4d\x69\x98\x22\x0d\xd7\x0e\xda\xa7\xeb\xac\x34\xb0\x11\xd4\x95\x58\x83\x6f\x0f\x8a\x7f\x4f\x9f\x9f\x9a\xc5\x3f\x5e\x62\x81\x67\xcc\x83\xbd\x12\x0c\x74\x5c\x72\x32\x01\x2f\x1f\xb8\xb9\x8a\xc5\x52\xb3\x99\xc8\x17\xa2\x64\xe0\x79\x63\xd7\xce\x35\xb8\x09\x99\x35\x20\x08\xf0\x86\xc3\x4c\x9b\x66\x88\x39\x4c\x27\x2b\x78\x7a\x2d\x4a\x73\xb8\xf2\x35\x9b\x2f\x31\x69\xb1\x82\x0a\x35\x06\x34\xa1\xed\xdc\x2c\x06\xb1\xac\x44\x58\x6a\x0f\xbc\xad\x34\x2f\x52\x5e\xa6\xf4\x24\x02\xcd\x16\xfe\x32\x2e\xe5\x0a\xac\xf1\x94\x13\xb4\x4f\xf6\xd4\xa5\x0e\x0c\xf4\x8a\x4f\x44\xbe\x66\x19\xd6\x62\x64\xe3\x35\xe9\xc6\xa8\xb3\xb7\xc2\x11\x39\x35\x13\xf0\xcd\x00\x7f\x0e\x4e\x0b\xb5\xaf\x1c\x14\xba\xb6\xec\xae\x9b\x43\xa3\xcb\xa5\xd8\xda\x4f\x2d\x44\x9e\x43\x0e\x5b\xd3\x05\xec\x7a\x5b\xfb\xf0\xa5\x96\xb6\xfc\x83\xe9\x25\x27\x93\x1d\xfb\x80\x8b\xd2\xad\xba\xf0\x85\xe6\x39\x88\x03\xac\x63\x6e\xa0\xad\xbd\x4a\x49\xab\x17\x37\x7a\x2c\x6f\xb6\xb6\xd7\x7c\x0c\xfa\x62\xd3\x67\x70\xd8\xd4\xbc\xed\xd2\x87\xba\xa1\x03\x28\x6a\x31\x62\xba\xe4\x85\xc2\x47\x6f\xc8\x37\xdb\x59\xf7\x44\x16\x7a\x30\xe1\xf3\x2c\x5f\x8f\xd8\x5c\x16\x12\x12\x63\xd5\x5a\x18\x86\x3c\x62\x87\x0f\x63\x01\x02\x7e\xba\xe6\x65\xc6\x0b\x3d\xc8\xb3\x29\xd7\xcb\x52\xa8\xfa\x2d\xde\x26\x68\x58\x89\x62\xb0\x1e\x91\x29\xf2\x91\x0b\x96\x1a\xdc\x34\xc9\x19\x90\xd6\x76\x00\x73\x1c\xb1\x45\xd9\x26\xf4\x46\x83\x2c\xb5\xb9\x6b\x70\x56\xec\xb3\x6c\xbe\x90\xa5\xe6\x85\x65\xe1\x4e\xaa\xaa\x31\x64\xc2\x7c\xa8\x82\xa2\xbd\xa8\x0b\x8b\x38\xfb\x4e\xdf\x8a\x7f\xf8\xe6\xa8\x88\x7f\x5b\xa1\x80\xa7\x46\x15\x08\x38\x62\xdc\x16\x12\x38\x48\xc0\x8b\xd7\x83\x43\xdf\x88\xbb\x00\x9a\xcb\x6b\xf1\x29\xe0\x88\x22\xfd\x14\x60\x12\x5e\x24\x21\x9e\xee\x04\x29\x91\x8b\xb5\x07\x71\x22\x17\xeb\xdb\x42\x00\x07\x0a\x0f\x02\xdc\x26\x6a\x30\xf6\xf7\xd9\x13\x74\x77\x42\x87\xa6\xcf\x59\x5a\x4a\xf0\x36\x33\x9c\x61\x9f\xf8\x25\xe6\xd1\xc3\x3b\x11\xdd\x23\xa8\x84\x99\xb9\x89\xba\x6b\xa1\xff\xad\x47\xdc\xdd\x56\xa0\x4c\xc5\x84\x2f\x73\xcd\xc6\xe4\x92\x88\x36\xc0\x44\x16\x93\xa5\x12\xf6\xee\xdf\xbe\x06\x33\x99\x4e\xdf\x3f\x81\xdd\x63\x1f\x73\x95\x99\x17\x08\x0e\xd4\x8d\x74\x56\xd6\xf3\x82\xb1\x8f\xd5\x53\x54\x1b\xe2\x4a\xac\x53\xb9\x2a\x3c\xa2\x1e\xcb\x74\xfd\xb3\x58\x3f\x91\xab\xa2\xfe\x3e\x0a\xdc\xc4\x20\x27\x34\xcf\x8a\x20\x7d\xb3\xf5\xec\x40\x8f\x99\x92\xca\x12\x5a\x1f\x4c\xb0\x9a\xb5\xdc\x60\x69\x76\x1d\x30\x55\xd7\x78\x98\xa5\xe6\x05\x09\xe8\x1a\x95\x72\x35\x00\xfb\x4c\xa7\xa1\x61\x2b\xff\x6d\xe7\xad\xfe\x8d\x0e\xf3\xdd\xf5\x2d\xd5\xf8\x30\x32\xd4\xb2\xf9\x61\x84\x2d\x1a\x08\xb7\xca\xd7\xdc\x9a\x3c\xc6\x5d\xf2\x6c\x5b\x4d\xc5\xbd\x81\xd0\x9f\x8f\xdc\x11\x51\xe6\x5b\xac\x51\x0b\xe0\x1d\x78\xe4\x02\x15\xa6\x8f\xf9\xb4\x5d\x80\x80\x16\x83\x31\x9f\x06\x73\x8c\x7a\xde\x05\xc5\x9b\xf0\x78\xdb\xc7\x45\xfd\x6e\x09\x58\xff\x18\x5e\x66\xd1\x32\x1b\x56\xe0\x2b\xf4\x06\x25\xd6\xc0\x72\x3e\xb6\x69\x8e\xb5\x5c\xb0\x89\x41\x31\x87\x72\x3b\x39\x79\x99\x21\x7c\xfa\xa5\x14\xb4\x1c\xf4\xe4\x07\xb7\xfb\x7b\x54\x6b\x2a\x5f\xa3\x39\xca\xee\x14\xb8\x3e\x83\x40\xca\xe3\xc2\x48\x81\xea\xd3\x88\x84\x10\x1f\x80\xd6\xd8\x7c\x4d\x8e\x8a\xa1\x97\xbc\x9d\x9b\x2c\xed\x5c\x08\x8c\x8b\x08\xb0\x9e\x04\x76\xdd\x3f\xc8\x3c\x6d\xdd\x6e\xb3\x90\x78\xa3\xa1\x79\x74\xde\xb4\x5c\x40\xbb\xc1\x44\x96\xe6\xbd\x39\x70\x33\xee\xd4\x3b\x56\x89\xa3\x46\x14\x0d\x67\xb6\x46\xfa\x16\x5a\x6d\x63\xed\x5a\xe2\x31\xa3\xed\xac\xb7\x8f\x16\x83\xdf\x6f\x5d\xcf\x86\xc9\x05\x90\x63\x5e\x88\xb4\x00\x1a\x4f\x9e\x80\x6b\xaa\x72\x9c\xd0\x3c\x2f\xb2\x84\xe7\x98\x29\x95\xbc\x64\x7d\x71\xb4\x42\x2d\xe7\x20\xf6\xd3\xed\x41\x0f\x1b\x20\x1a\x52\x80\x8f\x97\x93\x89\x28\xc9\xaf\x64\x8d\xa9\x64\xad\x92\x83\xb1\xa7\xba\xa3\xa0\x38\x20\x7a\x4a\x2a\xef\xe9\xec\xdd\x18\xcd\xc3\x70\xb1\x10\xbc\xb4\x8e\x86\xfe\xbd\x80\xaf\xa1\x0c\xd3\x7c\x37\xd5\x10\x5d\xcd\x44\x51\x75\x60\x35\x30\x33\x85\x05\x05\x43\x5b\x37\x66\x87\x57\x42\xb3\x0e\x4c\x30\xcb\x33\xbd\xb6\x27\xbf\x63\xa6\x71\x25\x04\xa6\x95\xb7\x6f\x23\x2c\xf1\x07\xa9\x6e\x83\x4a\x09\x08\x2e\x73\x7e\xca\xfe\xa4\x60\x90\x07\x7a\x39\x77\xe0\xc2\xc6\xdf\x54\x87\x2d\x17\x2b\x78\x41\x76\xe1\x6b\xb8\x9c\xc0\xbd\x16\xfc\x96\x0c\x3e\x7c\x28\x0b\xf9\x96\xf2\xf0\x55\x9e\xcd\x45\xcf\x5c\xf3\x18\xee\x01\xc4\xd0\xaf\x0c\x3e\x15\x9a\x54\xad\xa6\x85\x9c\x18\xbc\x27\x57\xc3\xd8\x75\xef\xb8\x14\x7c\xa7\x3b\x2e\x68\x1e\x11\x2a\x7e\xcf\x4b\xc1\x3b\x8d\x6d\x6b\x07\xad\x01\xd7\xdb\x2f\x99\x00\x62\x4c\xcc\xea\x7a\xea\xd2\x77\x58\xd3\x7a\x83\x63\xbb\xdd\xc0\x4c\xb1\x5f\xa5\x9c\x3b\x77\x34\x23\xe5\x8c\xad\xaf\x3d\x16\x85\xb2\x25\x5d\x97\x66\x79\x52\x69\xe7\x46\x81\x11\x10\xd6\x79\x96\x63\xe9\xb2\xb1\x8b\x51\x19\x36\xa9\x58\xd0\x39\xce\xc7\x79\x01\xce\x58\x21\x94\x35\xfc\x15\x56\x7f\x0e\xda\x87\x42\x6a\x0b\xce\x72\x55\x5a\x89\x5d\x80\x99\x3d\xcb\xc5\xb5\xc8\x51\xc8\xa3\xa7\x39\x78\x80\x58\xe7\x75\xa7\x77\x01\x4d\xbe\xd7\xa7\xbc\x90\x5a\xd8\x29\xe1\xc2\xc1\x73\x7b\x04\x3a\x49\x25\xac\x1e\x24\xe1\x05\xcc\x03\xa3\xb8\xc0\x05\x90\x10\xec\xa6\x66\xa3\x4a\x6f\xe6\x79\xa1\x90\x16\x00\xce\x6a\xb5\x1a\xae\xbe\x18\xca\x72\xba\xff\xe0\xe0\xe0\x60\x5f\x5d\x4f\x83\xcd\xbd\xf6\xf7\x5c\x9a\x5d\x37\x67\x7f\x25\xea\x7b\x71\xde\x05\xd8\x7d\xd6\x31\x30\x7a\x11\x90\x88\xfe\x0c\x42\x06\x88\x24\x59\xc6\x83\x55\xde\xc4\x00\xb0\xd3\xc7\x49\xf7\x36\xb5\xbc\x16\xa5\x32\x6c\xb6\xcf\x3a\x87\xc3\xc3\xea\xe8\xad\x72\xc5\x66\x23\x8a\x96\x8b\x8a\x31\x26\x17\x13\x5d\xf9\xaa\xe1\x70\x18\x7a\x77\xfa\x30\x25\x8a\x94\x8c\xc8\xd6\x56\x65\x37\xe7\x6f\xb8\xa5\x50\x71\x95\xa3\x3b\x36\x9b\xc1\x41\x52\x41\xad\x49\x84\x94\xf0\x85\x46\x17\x20\x81\x2d\x53\x5f\x4c\x63\x82\x55\x07\x0c\x3f\xa3\xec\x0d\x72\x2e\xcc\x5b\x77\x35\x93\x2c\xe1\x65\xe0\x6a\x0d\x5d\x2f\x78\x39\x15\x6d\xaa\x4a\x03\x15\x78\x83\xc7\x61\xd8\x29\xda\x49\xf4\x30\x1f\xc0\xef\x03\x0d\x0d\x3a\xcd\xbd\x76\xd4\x75\xc4\x7d\x1a\x77\x6d\xd3\x9e\x79\x3d\x43\xa0\xa6\x70\x6a\x81\xf0\x3b\xda\xc8\xc5\xcd\x23\x67\xbd\xef\xe0\xf5\x1b\x1b\x49\x3a\x72\xc1\x13\xd8\xdb\x83\xb6\x69\xd2\x0b\xee\xd4\xea\x39\x83\x40\x80\xcd\x1c\x32\x84\xd2\x02\xbb\xf6\x98\x72\xa4\x29\x6e\xf4\xd3\x62\xb1\x74\xaf\x7b\x7c\x34\xbe\xf2\x9d\x2f\x6c\x8b\xfa\x13\x0b\xe5\x10\x0a\x35\x88\xdd\xf9\x28\x84\x07\xfc\x79\x9d\x5e\x88\x88\xac\xd0\x03\x35\x97\x94\x1a\x0f\xc5\x0f\x17\x69\xb9\x20\x93\x6b\xe8\xeb\x6e\x53\xe1\x9a\x9e\x3f\x20\xa0\x37\x3c\x5f\x3a\x8f\xce\x93\xf3\xf3\x48\xfd\x04\x17\xb8\xb9\x50\x2d\x6c\x1b\xcd\x17\x0c\xc1\xd8\xb9\x0f\x3d\xf2\xea\x2a\x18\x63\xd8\x34\xb8\x5c\xe8\x0f\x7e\xd6\x2f\x17\x86\x72\x78\xce\xae\x61\x22\x66\x20\xf7\xda\x8a\x17\x88\x81\x8f\xe6\x1f\xbd\x7f\xe1\xf8\xba\x8c\xe7\x54\x80\x99\xd2\xc5\xba\x1c\xd0\x5b\xad\xce\x4a\xe8\x1f\x3c\x3a\x02\xd3\xb3\x47\x52\x3f\x9e\x73\xec\xba\x1f\x68\x02\x27\x11\x1c\xf7\x87\x0d\x6f\x6f\x00\xd2\x08\x06\x57\x6f\x26\x75\xee\xd0\x74\x14\x4f\xe1\x51\xd5\xb5\x62\x67\x30\x1d\x6f\x97\xc2\x3e\xeb\x22\x39\x09\x23\x1a\x2d\xfd\x6d\x40\xd9\xb4\x0d\x65\xb8\xa8\x30\xc5\x54\x1b\x82\x2a\x34\xae\x19\xb7\xe1\xae\xde\xa0\x13\xd6\xd1\xf2\x12\x6a\x85\xb4\x43\x5a\x28\x96\x79\xde\x07\x49\x01\xf3\x8e\x59\x90\x89\x02\xe5\x45\x2e\x79\x0a\x42\x8b\x19\x2f\xd3\x50\x86\xd8\x76\x63\xb2\x84\x80\x58\x73\x51\x87\xe4\x04\x99\xd0\x20\xe9\x3e\x77\x71\x84\xe6\xf8\x2d\x16\x79\x26\xd2\x60\x80\x5d\xe8\xec\x35\x9a\x93\x5e\x97\x79\x88\xb4\x65\x99\xfb\xa4\x3a\xee\x8f\xed\x06\xb0\x59\x29\x26\x9d\x3e\x33\x3d\x42\x6f\x94\x7a\x37\xef\x70\xe5\x1d\x54\x22\xa3\xe7\x46\xe3\x17\xc0\x08\x2b\xfc\x3b\x0b\x6f\xdb\x20\xe1\xfc\x2b\x83\x84\x79\xdf\x5b\x06\xd9\x46\x7c\x1e\x8f\x74\x09\x39\x44\x1a\x0e\x1c\x9c\xcd\xd0\x78\x57\xb1\xa9\x6a\x97\xfb\x7a\xc3\x40\x28\x21\xd4\xa8\x3b\x72\x09\x80\x36\xdd\xba\x82\xc7\x7d\xbf\xcb\x49\x2a\x45\x50\x02\xf8\x36\xc7\x09\x0c\x0c\x5b\xc7\x50\x1b\xc7\x00\x18\xad\x1c\x2d\xa1\xe6\xbb\x8d\x34\x15\xfa\x71\x5c\xd0\xf8\x36\xab\xa9\xd4\x42\xde\x65\x5d\x1b\x46\xdb\xbc\xae\x71\xad\xe3\xce\xb8\xf4\x63\x3e\x9d\xf3\x69\xe4\xac\x94\x99\x2f\x76\x18\xd3\x76\x84\xf6\xb7\x1b\x93\x62\xce\x7d\x40\x59\xf6\xeb\x2e\x23\x52\x37\xd3\xfa\x76\xe3\x05\x59\xa0\xdc\x98\x71\xae\xc5\x8d\xe3\x06\xdd\x6d\xaf\x5d\xc6\x3f\x89\x62\x1e\xdd\x96\xba\x6f\x83\x91\xa3\xf0\x48\xff\x47\xb5\xfa\x00\x05\x4a\x83\x38\x08\x51\xfe\x56\x21\xe7\x03\x4c\xe3\x9c\x14\x17\x33\x41\xa5\x76\xdc\xa3\xd2\xde\x45\xb1\x56\x04\x1a\x6d\xe5\xfe\x53\x41\xe1\xdc\xd5\x0d\x0c\x62\x19\xf0\x17\x04\x32\x15\xfa\x24\xcf\xcc\x23\xd9\x5c\xc9\x15\xdb\x97\x3b\x45\xc8\x68\xad\x88\x0d\x01\xe6\xf8\x07\x7a\x48\x91\x98\x0d\xdf\xe3\x5a\x06\x1b\xa3\x57\x0d\xfb\xdd\x84\xb8\xa8\xb6\xd7\x06\xcc\xd9\x52\xc2\x59\x3a\x85\x74\xd3\xbe\xa0\xd8\x9d\xd1\x66\xb3\x6d\x6e\xe0\x26\x11\x8a\xbb\x3d\x5a\xf1\xa6\xf5\x50\x6a\x9a\x4d\x0b\xda\x6d\x76\x18\x54\x7e\xbb\xe9\xe1\xe0\x0d\x89\x2e\xa3\xb0\x13\xd2\x78\xc8\x3c\x55\xf5\xd4\x36\x36\x41\xd0\xad\x3d\x2d\x03\xef\xfe\xcd\x93\x76\xd7\x77\x6b\x42\x4e\xab\x56\x74\x4f\xe8\xca\x84\x7f\xf7\x44\x11\x69\xe4\xca\xbb\xfd\x32\x89\x26\x7a\x92\x83\x06\x74\xa9\xa1\x0e\x6b\xc2\x93\x19\x9a\xa8\x5e\xb4\x27\x1f\x09\x06\x2f\x85\x61\x45\xa6\x53\x8b\x14\xb0\x31\x91\xc5\x0e\xc9\x25\xc2\x99\xce\x30\x81\x67\x10\x9f\x15\xa4\x2c\x89\x8e\x16\xf0\x23\x70\xef\x74\x19\x10\x60\x65\x98\xb1\x07\x32\x4e\x70\x4a\x75\x51\x7d\xff\xbd\x84\x48\xa8\x5b\xa5\x71\xb1\x7b\x68\xdf\x5e\x36\xf9\xd2\xad\xb7\x52\x09\x1d\x66\xbf\xd9\x94\xe3\xc5\xbe\x86\x09\xfb\xdd\xc8\x48\xd8\x9a\xd5\xc5\x5d\x45\x33\x91\x2e\x73\x71\x06\x18\xa8\xbc\xa6\x9f\x16\x13\x59\xce\xab\x79\x9d\x9c\x9b\x61\x29\xa5\x0e\x62\x2b\x21\x43\x15\x38\x02\x95\x98\x65\x28\xb2\xbe\x18\x78\x2e\xc3\x54\x21\x59\x2e\x8b\xa9\x28\xcd\x3b\x36\x73\x59\xab\xce\x83\xda\xc0\xe4\x24\xe6\xfd\x80\xa0\x88\x6a\x8a\x5a\xfe\xca\xda\x20\x57\x26\x52\x4c\xb7\xc7\x0a\xb9\x82\xc1\xe8\xd8\x99\x27\x6f\xa1\xb3\x52\xe4\x6b\x48\x60\x24\x4a\x57\x4d\x1d\x22\x4c\x33\xcd\xd2\x2c\x25\x35\x16\xea\x68\x6d\xfe\x24\x03\xa6\xf0\x51\xbf\xe1\x0c\x22\x1f\x61\x1f\x4b\x61\xad\xbe\x94\x5c\x0b\x49\x02\xa3\x49\x13\xa0\xd9\x34\x22\x4e\x75\x95\x2d\x14\x21\x0d\xa1\xba\x74\x49\x00\x76\x62\xde\x5a\x48\x9c\xfd\xd0\x2d\xca\xdc\xaf\x63\x4c\x92\x03\x81\xaa\x94\x3b\x89\x61\x35\xe2\x0a\x7b\x9e\x71\xc5\xc6\x90\x36\x81\xac\x65\x50\x2d\xc6\xe9\xa9\x7d\xb6\x90\x19\x57\x95\x89\x6e\x24\xd1\xac\x80\xcd\xab\xb8\xa0\x37\x17\x9c\x74\x06\xa9\x4a\x6c\x66\x58\x8b\xd1\xd6\x88\x0b\xad\x48\x61\xae\xe9\xa8\xfe\x77\x73\x05\xba\xa0\x78\x00\xe9\x03\xdb\x8a\xc9\x05\x65\xe4\xaa\xa1\xa2\x1b\x19\x91\xe5\x56\xd7\x60\x35\x5a\x9c\xb9\x84\x3b\xee\xda\xba\xf0\xdf\x76\x5d\xfe\x40\x5c\x53\x43\xeb\xc7\xd1\x0f\xdd\x00\x64\xa0\xea\x32\xfb\xff\x06\x8f\xd1\x99\x5c\xa9\x0f\x61\xb3\x7e\x05\xf6\xf6\x57\x94\x3d\xf2\x4f\x37\xec\x9f\x2f\xc3\x6b\x53\x5b\x04\xdb\xdd\x9c\xf5\x35\x8c\x2d\xad\xe6\xc5\x88\x69\x45\x09\x7d\x81\xbf\x74\x5d\x84\x61\xd7\xc7\x68\x50\x11\x47\x08\xd2\x6b\x82\x60\x03\x83\xa1\x81\xff\xda\x85\x6b\x60\xc9\x88\x8a\xc2\xc4\x6a\x04\x23\x71\xf6\x76\xfc\x18\x74\x43\x15\x79\x74\x71\xb3\x51\xbd\x45\xcd\x17\x37\xec\x3e\xeb\x2c\x6e\x02\x5b\x41\x9b\x1e\xa9\x2e\xdb\xd8\x0b\xee\xf7\xcc\x7e\xda\x3c\xfb\x48\x2c\x58\xf0\x52\x89\xa7\x85\xee\x6e\x58\x4b\x3c\xc9\xe7\x94\xed\x0b\xf8\x0d\x4d\xcc\x05\x18\xf9\xbc\x5d\x59\x81\xb9\x80\x6a\xb9\xd2\x42\x15\xe7\x0a\x65\xc2\x0b\xbb\x4d\xf4\xb7\x96\x36\xed\x17\x30\xad\x4e\x21\xcb\x39\xcf\x3b\x2c\x9b\xd8\x1b\x56\xce\x33\x4d\x05\x72\x7d\xa2\x7d\x9f\x60\xec\x23\x3b\xae\xa4\x1c\xa3\xfb\x7b\x2b\xce\x68\xdc\x93\x4a\xfe\x32\x87\x3c\x3f\x6b\x44\xe3\xfe\x3e\x7b\xb1\x9c\x8f\x45\x69\x13\x9f\x7b\xd3\x20\xbf\x16\x25\x27\x79\xc5\x4b\xd1\x75\x54\x59\x1b\x57\x01\x70\x5e\x4e\x9e\x01\x94\x23\x76\x78\x70\xf0\xa8\x3a\x02\xf8\x81\x30\x70\xeb\xcd\x0a\xd1\x38\x94\x7b\x80\xb4\x8f\x64\xfa\xba\x22\xa0\x30\xcc\xbd\x50\x31\x86\xe9\xd5\x22\x15\x95\xcb\xb8\x56\x51\x58\xb5\x59\x72\xa3\x6e\xb1\xb3\x92\xf9\x6a\xe0\xa6\x04\x1e\x9a\x9d\x7a\x97\x36\xdb\xd7\x36\xeb\x57\x93\xfd\xab\xd1\x02\xd6\x68\x03\x8b\x7f\xb7\x6f\x46\xbe\xd4\x32\x70\xc0\x8c\x1b\xd1\xfb\xb1\xd6\xc6\xea\x1b\xd1\x9c\xe6\xdc\xd5\x29\xd4\xc8\x66\x1b\xe3\x4c\x2d\x38\x18\xbf\xc8\x01\x9d\xce\x54\xc2\xf3\x64\x99\x43\x32\x01\x0b\x25\xce\xea\x98\x15\xec\x87\xac\x14\x13\x79\x53\x41\xdd\xf9\x82\x17\xdb\x37\xca\x8c\x5a\xdf\x29\xe8\xdb\xb0\x5b\xa6\xf5\xc0\x8c\x8f\x59\x09\x6a\xdb\x45\xfd\x8a\x42\x94\x3f\x5d\x3c\x7f\x16\xc4\x81\x74\x3b\xbf\x74\x86\xa5\x58\x08\xae\xbb\x9e\xea\x7a\x86\x31\x5e\x96\x9d\x9e\xfd\x29\x22\xfd\x06\x02\xaa\xfb\x82\xb9\x61\x2d\x9e\xfd\xd7\x8f\xb9\x12\x66\xac\x4f\x8d\x85\x31\xc1\xa5\xe5\xe3\xc6\xae\x78\x01\xfc\xca\x66\x5d\xb1\xd6\xcc\x99\x60\xb6\x7d\xdb\xf4\xea\x37\x46\xe7\x80\x6e\x8b\xe6\xf6\x95\x92\xbe\xbf\x54\xac\x14\xc1\xe4\x3d\xe4\xb7\xf6\xd5\x1d\xb0\xdb\xdf\x7e\x03\x0b\xc7\x0e\xae\x3d\xc4\x09\x5c\x6a\x65\x18\x61\x8b\x0a\xa6\xba\x35\x81\xda\xa6\x92\x05\xd2\x81\x23\x35\xc4\x7e\xc0\x98\x36\x87\xaf\xf9\x9e\xc4\x58\xf7\x59\x95\x84\xee\xed\x42\x41\x0e\xb7\x18\x59\x64\x00\xda\x5d\xb3\xc4\x53\xd9\x03\x2c\xa9\x71\x21\x17\x8f\x2a\x03\xd4\xb4\xf6\xb5\x01\xea\xf8\x6e\xee\x13\xb6\x6d\x70\x5f\x68\x71\xfa\xbe\x9e\x06\x8b\xf8\x55\xca\xf9\x0f\x3c\xd1\xa0\xb5\xf5\x0e\x05\xa1\x4f\xc9\xa3\x6d\x43\xd4\x26\x47\x43\x78\xd9\xc1\x6b\x4a\x1b\xd3\xaa\x54\x93\x86\xd6\x1f\xe8\xa5\x18\xcc\x03\x69\xc2\xca\x3c\x95\x5c\xa3\x90\xbd\x27\x05\xaf\x03\x7f\x95\x52\x16\x5b\x5e\x30\x0c\xf9\x02\x0e\xaa\x93\xed\xda\xb2\x9a\x0c\xd6\xa6\xb7\xa8\xb4\x81\x2f\x9b\xa4\x83\xee\x36\xeb\xf4\x99\x79\xa4\xb3\x34\x9b\x8b\x42\x41\x9e\x47\xb3\xa0\x40\x47\x45\xef\x30\x73\x8d\xa3\x97\x1c\xbc\xa9\x39\xbd\xc8\xc8\xaa\x67\x00\x05\x20\x48\x18\xf4\x0e\x6b\xbb\x28\x6a\x36\x2c\xb6\x35\x53\x5f\xe5\x98\x63\x52\xf2\x48\xd5\xca\x06\x75\xe3\x6a\xe2\x1b\x3f\x8a\xac\xa8\x71\x7e\xc9\x48\x30\xa6\x37\x97\x7a\xe2\x56\xf9\xa1\xdb\xdb\xf8\xd0\x58\x2c\xc7\x79\xa6\x5c\xcd\x6a\x17\xf9\xca\xfe\x11\x24\x88\x1b\xa1\x46\xe1\xa3\x65\x28\x95\xe5\x07\x8f\x0a\xec\x73\x26\x57\x17\x12\xdf\x67\x5d\xf8\xba\x41\xe5\x00\x79\x30\xbb\x3d\x97\xac\xc8\x01\xa8\x6a\x55\xf0\xc7\x8f\xcd\x0f\x13\x57\xc5\x06\x5c\xef\x02\x11\xdf\xa5\xfe\xb5\xfa\xc2\x9d\x88\xba\x01\x7f\x2d\x3a\xf4\x50\xc7\xde\xa4\x76\xf5\x5b\xd6\x90\x81\xd5\xf7\x46\xae\xbd\x31\x1b\x6b\xd0\xd8\xaa\x72\x9d\x87\x11\x46\x0d\xd8\xfb\x13\xd2\x56\x72\x9b\xd7\x0d\x50\x30\x16\x94\x1a\x36\xca\x45\xad\xb4\x39\x7a\x2e\xd8\x0e\x64\x28\x9b\xaf\xd5\xba\x1f\x4d\x72\x69\x4e\x50\xb1\x66\x13\x68\x2c\x29\x13\x26\x9e\x34\xe7\x55\x74\xed\x1e\xd7\xb0\xa1\x54\xac\x60\x32\x54\x73\x5e\xea\x1f\x0c\x8c\x27\x99\xd9\x77\x4b\x60\xb5\xd5\xf4\x1b\x58\xc5\xd0\x7a\x68\xfb\x54\x4b\x05\x4b\xe4\x7c\xb1\xd4\xd5\xa7\x80\x5c\x9a\x67\x92\x16\xd3\x92\xe7\x74\x7f\x51\x3a\x5f\x57\x4d\xc3\x4f\x51\x39\xfd\x79\xe3\xdc\xff\xd2\x3e\x95\x68\x26\xa0\x37\x27\x7d\x58\x22\xd8\x58\xe8\x95\x10\x91\x67\x2b\xcd\x0f\x02\x36\xa4\x26\xc4\xd1\x97\x46\x8c\x55\xce\x73\x74\x2c\xd8\x9c\xa7\xe0\x0e\x08\x1c\x4b\x81\x23\x36\x06\x73\xa3\xd3\xa0\x15\x7b\x4b\x91\xc8\x32\xc5\x93\x88\x3e\x2c\x4a\xb2\x4c\x5b\x1f\xb1\xc2\xaa\xb5\x58\xce\x35\x66\x8b\x4d\x05\x6e\xaa\x73\x3e\xb7\x9a\x8e\x86\xdd\xbb\x90\x8b\xe7\x30\xa8\x2d\x0f\x59\xf9\x1d\x4f\xb3\x6b\x52\xdb\x46\x36\xa8\xe3\xd9\x9f\x81\x8a\x27\x37\x2e\xcf\x06\x3c\xb7\x4f\xc5\x3e\xfd\xef\x79\xb5\x91\x01\xe3\x92\x0f\x1d\x3c\xda\xa4\x30\x6b\xa8\x1c\xde\x90\xb6\x2d\x86\x79\xbf\xc6\xad\x89\xcf\x36\x28\xc0\x1a\x8a\xfa\x87\x99\xa4\x2c\x8b\xaa\xdf\x38\x91\x6d\xc5\x05\xb8\xd4\xa3\x59\xac\x7f\x0d\x99\xa4\xaa\x5c\xa3\xaa\x19\xa9\xf6\x9b\x59\x62\xaf\x1f\x80\xfb\xd5\x65\x6f\x86\x64\x5e\x7e\x41\xf2\x26\xb8\x9e\x50\x88\x7b\x66\x7e\xd9\xd2\xdb\x10\x74\x63\xe7\x0b\xb9\x60\x83\x96\x99\x6c\xd3\xc4\x55\xee\xc1\x3a\x97\xde\xdf\x67\x98\x87\x21\xcc\x8e\xcc\x4b\xc1\x03\x97\x75\xa8\x6c\x00\x51\xc9\x99\x4b\xfc\xa2\x98\xb8\x16\xe5\xda\x26\xfd\x75\x6c\x39\x4c\xdd\xdc\xa6\x46\xa7\x3b\x6d\x83\x6b\xb5\xdb\x93\x6e\x2b\xab\xc1\x5c\x97\xdb\xfe\x35\xcc\xab\x29\x13\x51\x73\xbf\xc6\xb3\x76\x87\xde\x11\x53\xd8\x09\x80\xd9\xdc\xca\x4d\x4e\x17\xbe\xb3\x25\x41\x74\x0b\xc8\xe6\x8c\xdb\x9c\x80\xe0\x0c\x65\x65\xdf\xa7\x64\xe4\x9b\x0b\x3d\x93\x29\x24\x05\x44\xf3\x02\xe5\xca\x46\x87\x7b\x65\xdd\x6b\x41\x1a\x40\xc8\x33\xae\x48\x26\x4c\xd0\x77\xff\x2f\xac\x5c\x16\x41\x4a\x51\x6c\x26\x93\x64\x59\xee\xe0\x68\x15\x89\x2a\x3b\x69\x82\x71\x80\x3b\x68\x81\x4b\x3b\xc6\x9d\x34\xc0\xd8\x3b\xd2\xfe\xba\x14\xf5\x6d\xaa\x5f\x5a\x55\xf8\xa6\xa8\x65\x26\xc6\xec\xde\xb2\x68\x49\x71\x6d\x85\x33\xbb\x71\x90\x98\x03\x07\xce\x8a\x69\x1f\x72\x72\x94\x02\xdc\x94\x27\xcb\xdc\x29\x70\x94\xcb\x77\xe8\xec\xba\x58\x2f\x04\x33\x10\x43\xd1\x30\xeb\x43\xe7\x06\xf5\x09\xcd\xc0\x48\x46\xf9\xc7\xad\xdf\xfe\x9a\xad\xf8\x7a\xc8\xd8\x13\x09\xc9\x90\x24\x09\x43\x46\x12\x5a\x96\x63\x0b\xcc\x01\xc1\xc8\x95\x24\x27\x07\xbf\xe5\x82\xf1\x89\xc6\xbc\xaa\x56\x8e\x42\xb1\x6a\x92\x73\x35\x13\x0a\xab\x37\x2a\x6d\x8b\xcb\x64\x85\x2d\x85\x11\xcc\x0b\x6a\x8a\x28\x0d\x29\xd0\x95\x16\x3c\x05\x04\x60\x19\x45\x97\xeb\x12\x95\x43\x94\x0d\xc0\x95\xae\x30\x62\x00\xe4\x50\x50\x9a\xab\x59\x25\x72\x04\xd0\xb2\x0f\x89\x7f\x97\x5a\x65\xa9\xa8\x5e\x33\xc0\xf4\x50\xed\xeb\xea\xb8\xb8\xd2\xaf\xca\xd9\xe8\x6c\x73\xf2\x80\xbc\xb5\xdd\xd5\x96\x60\x68\x7e\x1d\x81\x95\xd5\x45\xcb\xa9\x0f\x21\x97\x74\x79\xa7\xcc\x71\x8f\xd2\xfe\x35\xbc\x76\xb6\xd8\xc4\x29\x57\xf8\x9f\x6e\x64\xba\x20\xa9\xa3\xd2\x24\x68\xf1\xd8\x1b\xe7\xba\x35\xc3\xd3\xdd\xcc\x55\xbb\x3d\xfd\x36\x5a\xe5\x5a\x71\xf9\x68\x27\xe7\x03\x9f\xdb\x2b\x4e\x88\xdf\xf5\xef\xd9\x2a\xce\x6d\x79\xfe\xaa\xf4\xfd\xfd\x51\xc3\xa5\x56\xa9\x57\x59\xc4\xbc\xa1\x68\x8d\xaf\x2c\x85\x2b\x5b\xe4\xec\xe0\xd1\xfd\x51\x3b\x41\xe6\xec\xee\x23\x73\x09\xaa\x2a\x79\xd8\x51\x28\xa4\xab\xff\xd3\xe0\xa0\xc0\xb4\x7b\x23\xc8\x39\xea\x68\xc6\x82\x94\x2f\x41\xf5\x23\x3c\x8a\x20\x87\x18\x68\xc1\x65\xe5\x56\xd1\xc5\x70\xe7\x52\x69\x86\x41\x95\xf6\x2d\xdb\x67\xfc\x8a\x47\xd2\x6e\x2f\x58\x5c\x21\x75\x3f\x06\x64\x27\xe1\xe1\x05\x8f\x62\xe8\x05\xf1\x58\x49\x99\x61\x3c\x21\x4d\xd0\xdf\xb1\xae\x2c\xd2\xdc\xa2\xc3\x63\x0f\xb9\x14\xf1\x56\x03\xcc\xb1\x57\xef\x3b\x52\x63\xd3\x21\x17\xc4\x0b\x5a\x39\xff\x28\xc3\x07\x31\x02\xc0\x21\xcd\xb3\xc5\xf9\xf6\xec\x6e\xc1\x69\x8c\xbc\x76\x83\x83\xe9\x6b\x8b\x56\x39\x90\x4d\x34\xfa\xdb\x6f\xa1\x0b\x73\xbd\x41\x90\x58\xf1\x88\xd5\x40\xd3\x03\x20\xc8\x5b\xec\x1c\x29\x7c\xd8\xaf\xdd\x9e\x3e\x46\x03\x85\x77\x9f\xc0\x7d\x33\x58\x60\x2e\x40\x12\x77\x0e\xb2\x3c\x0f\x9d\x1b\x76\x45\xe2\xf6\x69\xaa\x9d\x53\x80\x8b\x7b\x0d\x17\x14\x04\xc1\x17\x4a\x94\xfa\x31\x90\x5f\x1c\x28\xdb\xaf\x36\xf5\xc0\xad\xc1\xa0\x21\x8b\x65\x15\xa3\x61\xd6\xbf\x36\xa4\x52\x46\xf4\xed\x28\x7d\x69\x2b\xaf\xb9\x7d\xca\xc2\xf3\x6f\x90\x56\x41\x4d\xc3\xce\x85\xee\x10\xbf\x1f\x49\x3b\x48\xbd\x3b\x4c\xa4\x57\x0b\xb4\xd8\xdf\x67\x8f\xa5\x9e\x79\xcf\x9f\x1d\x97\x49\xb8\xdc\xb8\x48\x27\x2e\xfe\x91\xcb\xac\x4f\x24\xcc\xd7\x49\xc5\x85\xb2\x39\x48\x67\x59\x61\xce\xb3\x48\x33\xae\x05\x5a\x80\x71\x7d\xf4\x5e\xdf\x6d\x27\xef\x6d\x9b\x4b\xeb\xba\xeb\x6a\xfa\xed\x9b\x15\x64\xb7\x84\x59\xee\x70\x12\xeb\x50\x63\xfb\xf0\x06\x9b\x46\xf3\x19\xb4\x51\x0c\x1b\xaf\xc7\xf6\x3c\x03\x9f\xe4\x86\xf4\xe0\xff\xe0\x1b\xd2\x8a\xe0\xf1\x3a\xba\x38\xd1\x44\x16\x69\xfb\x25\xe9\xfd\xa2\x1a\xef\xc9\x10\x5e\x78\x55\x42\xad\xa0\xff\xe6\x37\xe5\xe3\x28\x05\x82\xbb\x2c\x2b\xa2\x66\xeb\x7d\x49\x09\xb8\x77\x65\xec\xdf\x1d\x55\x85\xd8\x6d\xd7\xa5\xe7\x7a\xc1\x2e\xed\x7a\x63\xc2\x06\x6e\xbe\x30\x4d\x93\xf8\x94\x86\x4e\x74\xcd\xec\x62\x7b\xf6\x86\x4f\x76\x33\xd6\xc5\x8d\x4d\x28\x74\xd7\x23\x6d\x4b\x16\x9e\xfe\x86\x5b\x23\xcc\x67\xd1\x74\x61\xd4\x18\xe8\xae\xd7\x46\x00\xf8\xce\x37\xc7\x0e\x57\xe2\x27\x5a\x5c\x95\x1b\xff\xe1\x0b\x74\x03\xfe\x4f\xba\x10\xeb\x27\xad\x6d\x3a\xbb\xdf\x86\x0e\xe6\xf6\xcb\x10\x88\x26\x34\xd5\x18\xf1\x1b\xf2\xf0\x78\xbe\xa2\x36\x5f\x8b\x17\x01\x9f\xe7\x4a\x2d\xe7\xb6\x24\x6a\xa4\x00\xe8\x01\xd4\xea\x8b\xbf\x87\x05\x3d\x78\x5e\x0a\x9e\xae\x49\xf3\xd8\xa7\x94\x5e\xf6\xb2\x83\x26\xa0\x6c\x37\x34\x60\xef\x53\x7f\x81\x94\x72\x15\xa4\x56\xc7\x5b\xf9\x1e\xd6\x61\xf2\xdf\x8a\x22\xed\x45\x0b\x85\x95\x05\xf7\x57\x29\x92\x75\x92\x0b\x15\x3a\xa0\x43\xaa\x94\x99\xa8\x96\xb0\x24\xb7\xe8\x85\x54\x30\x15\xf4\xa4\xb6\x05\x85\xad\xda\xac\x94\xab\x73\xac\x1c\x6d\x35\x78\x85\xb0\xc6\xd7\x6c\xc2\x0a\x91\x08\xa5\x78\xb9\xfe\xef\x7a\x85\x86\x0a\x9b\x5a\x7d\xa1\x4d\x0a\x9c\x4d\xd5\x65\x7e\x16\x62\x81\x11\xc1\x18\x62\x9c\x0a\x45\xd5\xde\x5d\x96\x53\x5a\x27\x26\x8f\x77\xc5\x64\x45\x01\x06\x5a\x51\x52\x66\x1d\xc8\x08\x00\x15\x08\x18\xbb\x98\xd9\xd2\xce\x13\x9e\xe5\xcb\x52\x44\xa5\x4a\xf0\x9c\xbd\x36\x80\x20\x1e\x20\x82\xef\xe1\xd8\x53\x4a\xac\x28\x68\x05\x07\xbb\xd6\x8e\x2e\xbf\xa0\x9d\xaf\x48\x84\x09\xec\x3b\x4f\x32\x74\xcc\x77\x73\x27\x30\xb0\xee\x0e\xdd\xa8\x54\x61\x29\x18\x0e\x73\xd6\x4f\x9a\x6e\x6c\x07\xfa\xd4\x82\x14\xd1\x49\x77\xfa\x96\xa6\x71\x20\x4f\xb7\xe0\xb6\x1a\x4a\x30\xa4\x55\xa1\x47\xb3\x08\xff\xaa\x3b\xd6\x33\x07\x2a\x08\x5d\x8e\x78\x9a\xfd\xbd\xca\x45\x8d\x4c\x34\x93\xa5\x9e\x51\xa2\x0f\x8c\x8a\x50\x94\xda\x7a\x2a\x29\x6c\x1c\xe3\x70\x72\xa9\x87\xd5\x7a\x2b\xe7\xbe\x6a\x4a\x0b\x13\x7f\x54\xed\x72\x6a\x0b\xaa\x34\x32\xe8\x58\x5d\x6a\x10\xce\xea\x42\x53\x58\x1f\x09\x4c\xa5\x38\x5f\x71\xc3\xe7\x58\xa7\x2e\x4c\x28\x47\x47\x35\xd3\xa2\xe4\x36\xf9\xcd\x6e\x11\x10\x56\xc9\x0b\x1b\xf8\xa4\xe4\xce\xff\xe0\x39\xd7\xb3\xe1\x3c\xc3\xfa\xc4\x55\x2d\xe3\x0e\x97\xf5\x16\xe3\x1e\x0a\x78\x66\x3b\xba\x40\x27\xc1\xc8\x07\x8f\x82\x3f\xbf\xab\x4e\x2d\xf8\xf1\xfe\xfd\x30\x3c\xa3\x0c\xd4\xce\x81\xca\xfa\xbe\x6f\x5f\xa9\x13\x66\x08\x3f\x78\xd2\xb8\x73\x06\x3e\x21\x9d\x6b\xc1\x66\x99\xae\x8b\xcc\x2b\xef\x4a\x80\xf2\x0c\xe3\xc0\xa8\x6d\x75\x53\x17\x2c\xb2\x8a\xca\x59\x08\x9d\xcc\x48\xf7\xfb\xa1\x5b\x86\x1a\x6b\x77\xb4\xa9\x4b\xe8\x0c\x64\x6b\xaa\xe4\x72\xda\xdd\x3b\x31\x0c\xba\xe8\x68\x06\xc0\xb0\x70\x9f\x81\x32\x62\x7b\xec\x3e\xab\xc1\x64\x6c\x5c\x0a\x7e\xe5\x3c\x7f\xee\xed\x20\x94\xd1\x14\xfa\x2c\xb0\xd3\xc3\x2c\x74\x56\x2c\x45\x24\x66\xb9\x6a\x6b\x1e\xef\x47\xac\x5a\x12\xc5\xe7\xac\xb2\xb1\x49\x64\x16\xc1\x5c\xd3\x90\x7d\xaa\x8f\x17\x14\xcf\x65\x31\xb5\x18\xdc\x50\x4c\x6d\xe3\x84\xea\x67\xf6\xf3\xcf\xeb\x07\x79\x97\x29\xd7\x9f\xed\xb6\x50\x62\x6c\xee\xc1\x7c\xd5\x94\x73\x02\x2f\x6b\xb8\x43\x3c\xac\x95\xc0\xf2\xa7\x58\x92\x9c\xc1\xa3\x26\xbe\x21\x8a\xb8\x6e\xc9\x79\x2c\xd6\x3a\x6c\xd4\xd7\x71\x27\xd4\x10\x6f\x0a\x11\x73\x5a\x79\x5f\xee\x86\x16\x51\xa4\x7f\x1e\x52\x4e\xfd\x63\xa6\x09\x25\xa7\x35\x2d\xd9\x4e\xc4\x1b\xd5\x6b\x39\xf7\x4a\x6b\x56\xfb\xf1\xb4\x22\xe9\xa3\xe3\x98\x08\xae\x45\xa7\x4f\xdd\x6f\xaa\x1e\x4a\x32\x5f\xe4\x6b\x06\x5e\x47\x04\x6c\x2d\xc8\xa4\x19\x71\x14\x28\x5a\x2b\x78\xfa\x3f\x8a\xb3\x20\xa1\xd9\x3a\xa3\x18\xc3\x08\xf9\x81\x78\xce\xf8\xd8\x66\xfe\x63\x48\x20\x58\x2d\xb5\x03\x8c\x45\x2e\x4b\x32\x50\x9f\x09\x60\x2d\x16\x5c\x16\x94\x53\x74\x05\x36\x83\xc8\x4e\x33\x9a\xaf\x45\x74\x1b\x04\x37\xa3\xf7\xf7\x20\x37\x40\x6d\x03\xb1\xd6\x86\xba\x0b\xa7\xbc\xed\x3e\x85\x8b\x8c\xde\xab\x4e\x32\x1b\x2f\xa7\x53\x8c\xe9\xdd\xf8\xec\x6c\x0a\x7f\xac\x41\x8d\x94\x3d\xad\x71\x99\xf7\xda\x79\x46\x70\xa7\xc7\x66\x4f\x48\x14\x64\xe8\x67\x2c\xf5\xcc\x26\x9b\x1c\xf3\x29\xba\x41\x13\xbb\x82\x3a\x0d\xee\x21\x67\xe3\x35\x82\x34\x13\xd6\xa3\x00\x73\xc7\xba\x08\x9a\xc8\x7d\xd1\xea\x79\x1b\x0b\x09\x1b\x38\x14\xfc\xca\x6d\xb1\x7f\x85\x35\x05\xa0\x74\x90\x9c\x4c\x6c\x46\x03\x9f\xbb\x96\x4d\x32\xcc\x33\xbb\xd4\x81\x1b\x36\x65\xdd\x76\xc9\x84\x77\x08\x90\x0f\x9c\x07\x36\xf9\xda\x44\x39\x79\x5b\x92\x05\xc5\x8d\x2a\x21\x21\x61\xf0\x48\x1b\xb4\xba\x4e\x22\x6a\xd9\x8b\x48\x21\x20\x81\xed\x53\xab\xb5\xdb\x30\xbb\x0d\x30\xeb\x13\xac\x36\xae\x6b\x4c\x5e\x19\xce\x13\x45\x64\x93\x63\x0f\x04\xfd\xcb\x89\x53\x48\x38\xbf\x94\xaa\x52\x64\xce\xd7\xe8\x4c\x65\x5d\x51\x49\xd4\xb7\xae\x5d\x1f\xb6\xee\x34\x8c\x65\x79\x56\x25\x76\xdf\xe3\xaa\xd5\x2f\xe1\x1d\x35\x73\x12\xc1\x7b\x0c\xde\xc7\xb7\x5b\xb0\xd6\x1f\x80\xa5\x85\x8e\xe2\x2e\xab\xee\x14\x4a\x20\x67\xe4\x27\x5b\x8b\xb6\xd0\x58\x82\x0c\xbb\xd8\xd3\x86\x28\xca\x26\x81\xa6\x44\x96\xb6\xc7\xdf\x97\xa0\x6f\x28\x80\xf0\x5d\x97\x30\x47\x01\xe6\x92\x0b\x4c\x13\x0e\x61\x24\x79\x2e\x4a\x39\x2d\x85\x72\x99\x2e\x02\xa3\x49\x6a\xab\xe1\x06\xb1\x1f\x66\x36\x5b\x51\x1d\x5d\x0f\x15\x54\x57\xf4\x13\xae\x56\xb1\x23\xe7\x66\x77\x92\xcf\x3f\x0f\x8a\x7f\x17\x1b\x1c\x4f\x2c\xc9\x87\xcf\xbc\xc6\x86\xef\xdc\x46\xd6\xb4\xc1\x61\xdf\xb6\x94\x06\xd1\x25\x15\x1f\xc8\x26\xf2\xe9\xf9\xb3\x15\x11\xa2\xe5\xff\xf7\x2a\xd5\x9b\xeb\xe9\x13\x79\x9e\x47\x09\x96\xaf\x33\xb1\x5a\xec\x16\x25\x6d\xfa\x1f\xe7\x79\x73\xbc\x01\x98\xfd\xe0\x05\x5e\x61\x76\xb5\x97\x71\x54\x4e\xef\xa0\xa2\xac\xd9\xe8\x20\xbd\xbb\x36\xb8\x15\x42\x74\x5b\xdb\x39\x37\xcb\x23\x07\xbd\xc6\x5b\x37\xba\xd3\x2d\x84\x7e\xc5\x7e\x1d\xf4\xdc\xe0\xfa\x54\xa1\x97\xea\x74\xda\x12\x2b\xb8\x52\x5a\xe4\x88\x14\xb9\x84\xb5\xeb\x05\xd8\x80\x1d\x3e\x8a\x7b\x3e\x6a\xb8\x01\x1a\xf1\x16\xed\x59\x38\xec\xff\xcf\xde\xdf\x77\xb7\x71\x63\x79\xe2\xf8\xff\x7e\x15\x70\x76\xc6\x24\x63\x92\x92\xbd\x9b\x9d\x6e\x29\xea\xfe\xc9\xb2\x3c\xed\x8d\x1d\xf9\x48\x72\xd2\x33\x8e\xc7\x01\xab\x40\x0a\xad\x62\xa1\xb6\x00\x92\x62\xda\xde\xd7\xfe\x3b\xb8\x17\x8f\x55\x28\xb2\xe4\x38\xfd\x30\xe7\xdb\x67\xce\xc4\x62\xe1\x19\x17\xc0\x7d\xfc\xdc\xd4\xf6\x75\xd8\x35\xfa\xef\x5e\x57\x03\xd1\xe6\x99\x51\xa4\xf7\x2e\x1a\x62\x72\x1b\x43\x13\x99\x29\xdd\xde\x91\x46\x1f\x7d\x16\xe8\x78\x67\x62\x61\x1f\xa4\xda\x4c\x24\x1c\xe6\x64\xb5\x61\xa6\x01\x79\x1d\x36\x8a\xb0\x3b\xc5\x4a\x37\xf2\xb1\x1d\x69\x22\x41\x7b\xe0\x84\xd7\x72\x63\x4c\xa3\x12\x2c\xe9\x1d\x5f\xae\x96\xd6\x25\xdd\x45\x30\x45\xc1\xfe\x3d\xc0\x8a\x44\x51\xbc\xa6\x77\xd1\xcd\xcd\x22\x58\x82\x61\x3a\x92\x41\x35\x3c\xd3\x47\x91\xe7\xb6\xea\xf4\x0f\xdf\xe9\xfc\x3d\x09\x9a\xd8\xdd\x2d\xc4\xbb\x35\x5d\xc0\x61\x25\xfc\xe3\xeb\x8e\x83\x79\xd8\x94\xc9\x9a\xd2\xe1\x96\x1a\x22\x23\x40\x2c\x10\xab\x3f\xf9\x36\xf0\xff\x9b\xea\x46\xdf\x8b\x3a\xaf\x7d\xee\xdd\x2e\x94\x0d\x32\xf9\x75\x3d\x90\x6a\x9f\xa7\x6a\xda\x37\xb2\xf6\x7a\xbe\x7b\xb9\x43\xfa\x00\x34\x51\x14\x38\x30\xd7\xd4\x8e\x00\x26\xb7\xc9\x5d\x1b\xdc\x68\xf9\x35\xbd\x8b\x23\xdb\x0c\xb9\xe1\x61\x02\xbd\x8c\x1b\xc1\x1f\x7c\x1d\x7c\x41\xc3\xc1\xb9\x4f\xf1\x6d\xe8\x50\x32\x7c\xd1\x13\x5f\xaf\xe5\x21\xdf\x55\xc7\x57\xe9\x87\xcb\xb4\x97\xd4\xe2\xfc\x17\x7f\x17\x6a\x73\x71\x51\xff\xbd\x09\x6e\xf7\x8d\x02\xf7\xb1\xeb\x72\xf2\x99\x11\x7b\x31\x9d\x7e\x4b\x0e\xdb\xf4\x79\xf8\x9b\xd3\x65\xfa\x19\x70\xea\x14\x4b\x2c\xe8\xde\x19\xc4\x86\x45\xd2\x07\x97\x71\xb4\x45\xe3\xf5\x98\x92\x3d\x62\x03\xda\x38\xeb\x00\x50\x0f\x22\xbe\xb5\x20\xff\x35\xea\x93\xbe\x06\x79\x42\xd9\x0b\xb7\xcf\x2b\x74\x1d\x79\xd8\xa7\xc1\x71\xc0\x1c\x03\x16\xd5\xae\x05\x3e\xe8\xde\xc4\xce\x47\xb4\xb5\x7a\xe0\xea\xf3\x8f\xb1\x78\x78\x85\xf4\x59\xbf\x67\xcd\xb0\x83\x6e\x67\x65\x8b\x40\x18\x19\x88\x92\x67\x02\xf8\xd0\x60\xd5\xfe\x04\xf0\xf0\x98\x3f\xcb\x4c\x1c\xb4\x2e\x32\x44\x20\xb5\x09\xe7\xa2\x1c\xcf\xa0\xeb\xf1\x9c\xc2\x40\x06\x07\xc7\x26\x66\x36\x11\xf6\x12\x34\x3e\xb8\x4e\x4b\x0a\x0a\x80\x7c\xc5\xec\xa5\x0a\x29\x55\x96\xb4\xc4\x7c\x9f\xde\xac\x6f\x23\x85\x40\x5a\xa6\xb8\xe2\x74\xb9\xa4\x8a\x67\xa6\xdd\xbd\xab\xe8\xd2\xed\x25\xf8\xa0\x9e\x81\xda\xee\x9a\x88\xa3\x2b\x1f\x06\xf7\x61\x14\xbf\xed\x7c\xb5\xda\x41\xb0\xed\x3a\x26\x8e\x7b\x14\x66\xa6\xe7\xd2\x2c\xb3\x5e\x29\x5a\x48\x01\xeb\x1d\x2a\x4b\x20\x6e\x71\x38\x5b\xa9\x38\x88\x0d\x7e\x86\xaa\x0f\x47\xd3\xa8\x3d\x93\x3b\xa2\x9d\x43\x05\x73\xef\x44\xab\x4d\xa8\x8c\x72\x45\x61\xbb\xae\xbd\x97\xa5\x09\x3f\x02\x60\x3c\xb0\x1b\xda\x00\x73\xcc\x24\x1a\x1e\x21\x9c\x07\x2d\x73\x52\x30\x45\x6c\xea\x6b\xdb\x94\x49\x67\x87\x76\x6b\x3c\x65\xd6\x90\x30\x46\x27\x50\x70\x58\xc8\xc9\xaa\x32\x0d\x06\xb9\x99\x37\xb5\x80\x00\x75\x4c\xf7\xe2\xe2\xfc\xc1\x0b\x94\x46\x83\x46\xd9\xc3\xc1\x46\x90\xb6\xfb\x9d\x29\x11\x84\xbc\xa1\xca\xc1\x80\x1f\xf8\x14\x8e\x29\xd4\x83\x51\x03\xea\x93\x43\x3e\xe8\x8c\x96\x00\x39\x58\xf3\xdc\x24\xbd\x75\x59\x94\xcc\x6a\xdd\x30\xf7\x6c\x42\x72\xc7\xc6\xb1\xb3\x0d\x69\x22\xc8\xa8\x5d\xcb\x56\xea\xbd\x56\xb3\x2e\xcf\x91\x07\x2a\x74\x8a\x25\x20\x26\x58\x75\x6b\x61\xf7\x7d\xf6\x3a\x46\x90\x70\xb2\x79\x94\x76\x5e\x26\x93\xd4\xdc\xc2\x2b\xe5\x47\xff\x3d\xbc\x57\xfc\xbd\x60\x29\x94\xc7\xab\xa5\x17\xd7\xdd\xbd\xad\xa1\x13\xf2\xcc\x40\x1b\xc0\xdb\x59\x8b\x52\x41\xfe\x1f\x97\x5e\x28\x1d\xc5\x66\x7d\x7d\x4c\x16\x41\x47\x56\xcf\x5f\xfe\x30\x0e\xe9\x1a\x87\x60\x3d\x91\xc0\x92\x33\xdb\xda\xc4\x8b\x71\x08\x1f\x0c\x8f\xae\x19\xc6\xad\xda\xfc\x8d\xf6\xb6\xbb\xdf\xca\xa7\x6e\x31\xa0\xd4\xa8\xd4\x90\xf9\x14\xe8\x6c\x6a\x06\xf5\x06\xe9\x86\xe5\x2d\x1e\xe5\xe0\x80\xbc\xe0\x8b\x55\x0d\x69\x92\xc8\x8d\xd8\x90\x39\x35\x19\x3c\x70\x57\x34\x65\x49\x82\x59\x6a\x70\xfe\xd6\x0d\x23\x67\x85\xa2\x41\xf0\xb6\x1d\xc1\x73\xfd\xbb\x1d\x86\x89\xb5\x6b\xc6\x78\x07\xdc\x1b\xb6\x63\x6f\x5a\x15\xb2\x62\x2a\x60\xc2\xee\x23\x7d\xa8\x94\xdc\xa1\xba\x24\x0e\x51\x79\xa7\xc3\xe6\xf0\x82\xab\xf9\x35\x7a\x5b\xf9\x91\x9b\xbc\x67\x34\xba\xee\xc6\x64\x73\xc3\xb3\x1b\xa2\x6a\xbe\x58\xb0\x5a\x06\x11\xc6\xc1\x7d\x94\x62\x0a\x95\x66\x07\x23\x67\xdd\xf8\xb4\xe3\xc9\xd8\x80\x0f\x87\x4b\x8f\x6d\xb1\x47\xf1\xfe\x54\x37\xac\x66\x03\x47\x95\xb6\x31\xb7\x73\xe1\x75\x5d\x51\xa3\x31\xc6\x6d\x56\x37\x35\xc4\xba\x4b\x11\x24\x8f\xb2\x29\xab\x30\xb5\x1b\x26\x20\x5b\xb3\xda\x93\x41\x57\x3a\xd0\xc8\x74\x70\x66\xa0\xd6\x98\x23\x2f\x4a\x82\x7b\xc1\x5a\x2c\x5d\xab\x91\x10\x05\x14\x05\xb9\x6e\x3e\x11\x06\x57\x07\x26\x57\x0b\x1b\xd0\xb3\xa9\x45\xc6\x30\xff\x85\x87\x2b\x44\xc4\x8f\x4f\xe4\x4f\xa6\xdb\xa1\xd3\xa2\x8c\x22\x6a\xee\x23\x7c\x79\xca\xee\xe0\x25\x0c\x15\x6b\xc9\x64\xc3\x55\x76\x83\xa7\xaf\x50\xf4\x75\x60\xc5\xd1\xaf\x26\xf1\x53\x9a\x3e\xbf\x78\xfd\xe1\xf9\xf9\xab\xeb\xd3\x0f\x6f\x5e\xfe\xf9\xfc\xd5\x91\x33\x3d\x62\x3f\xa6\x85\xff\xb0\xa2\x4c\x30\x94\xd7\x18\xce\xce\x59\xfd\x21\x61\x63\xed\xee\xe7\xd5\xcb\xef\xcf\xf7\x75\x93\x96\x98\xee\xd1\xc9\x9b\xd3\x7f\xff\xac\x4e\x82\x79\xc2\xf1\x58\x30\x15\x22\x19\x45\xfd\x7f\x0a\x3c\xc9\x24\x5f\x94\xc8\x98\x43\x52\xf5\x1c\xdf\x3b\x48\x4e\xa8\x29\x1e\xc8\x8b\xdd\x55\x26\xb5\x9b\x21\x0f\x1c\xd8\xd7\x64\x62\x38\xe2\xcf\x7c\xc3\x21\x94\xfc\x1f\xfb\xf5\x86\x34\xc8\x3d\xdf\xed\xe6\x74\xfa\x34\xbd\xe3\x61\x82\xef\xf7\x7f\x92\xce\xef\x00\x84\xc8\x88\xbe\xac\xc8\x03\x2f\xe4\x6b\x3f\x42\x13\x73\x8f\xbe\x6b\x8e\x85\x94\x74\x8d\x8e\x2b\xd8\x16\x96\xcc\x39\xe6\xbb\x1b\xeb\xf7\xf7\x86\x4a\x52\x33\x03\xd1\x03\x2f\x1b\xe6\xbe\x47\x08\x53\x49\x86\x05\xbf\x65\x88\x7b\x36\x32\x40\xd3\xba\x25\xcc\xdd\x2f\x15\xcf\x6e\xad\x1f\x30\x02\x89\x15\x42\x6f\x09\x5f\x32\x23\xe8\x90\x0d\xdd\xea\x91\x80\xb9\x13\x9e\x7f\xb9\x04\xe8\x6e\x6c\xdf\x01\x2b\x89\x15\x9a\x03\xcc\x2a\x4a\x45\x15\x9b\xfa\xb7\x6e\x35\x6b\xed\x9c\xb2\x37\x49\x94\x7b\x81\x10\x9e\x1f\x11\x35\xe5\x39\x2b\x15\x9f\x73\x56\x5b\x57\xc6\xad\xfe\x19\xc1\xc2\xfe\xc3\xfe\x76\xe7\x7f\xfb\x33\xfe\xf6\xe9\x18\x93\x2e\x98\xae\xf9\x18\xc9\xe0\x38\xba\xcc\xf4\x8e\x47\xf7\x58\x98\x4b\xfc\xc8\xfb\xfc\x5c\xd1\x35\x6b\xb8\x5a\xa3\x34\x01\x98\x0b\xd2\x3a\xfd\x80\x93\x24\x47\xc7\x48\x4e\xbe\x25\x6c\x6a\x00\xb2\xaf\x4d\x39\xd4\xa1\x1f\x93\xc7\x8f\x79\xe8\xe2\xa3\xcc\x92\xf8\xf5\x19\x36\xab\xbe\xe3\xef\x03\xaf\x1e\x27\x73\xe1\x2a\xbf\x83\x06\xa6\x3c\x7f\x0f\x6f\xae\x99\x26\x31\xbe\xb5\xc1\x15\xd3\x9c\xa8\x49\x2e\x7e\xd4\xfc\x9d\x95\x79\x38\x7d\x70\xa3\x26\x54\x53\x00\xbb\xe3\x52\xa1\xd0\x02\xe3\xb2\xe4\x3a\x00\xc7\x87\x92\xcb\x1b\x96\x83\x0b\xcf\x67\xad\x89\x9b\xa0\x81\xf5\x68\xce\x33\xb1\x2a\x01\x81\xbc\x3f\xde\x3d\x5b\xc8\xec\x1e\x4c\xeb\x47\x5a\xdc\x86\xf0\xf3\x76\x4a\x16\x89\x5f\x94\x2c\x90\xf7\x96\xac\x5e\xb0\xa0\x38\xaf\x7d\x4b\x46\x27\x40\x78\xa9\xcf\x5d\xc9\xf0\x22\xb6\x27\xa7\x60\xfa\xde\xb4\x58\x2d\x73\x5e\x02\x13\x65\xd8\x97\x39\x95\x06\x64\x97\x90\x98\x07\x3d\x3c\xfe\x5b\x93\x15\xf6\xfc\xd8\x82\xf5\xa4\x08\x6c\xba\x05\x04\x23\xfd\xd7\xf6\xf3\x08\xd2\xaf\xda\x4b\x78\xda\x1c\x0a\xa3\xdf\x03\x03\x2a\xe6\x25\x64\xbc\xe9\xb4\xdc\x22\xe6\x4e\xd2\xdf\xf0\x32\x37\xa8\x67\x7e\xf0\x5f\x9f\xc0\xe3\x17\x2c\x67\x5f\x4e\x9d\x90\x04\xb7\xde\xe4\xd8\x6d\xa3\x7d\xb8\xf6\xb0\xc1\x16\xe7\x4e\x3a\xb8\xf7\xb0\xd2\x5e\x0e\x9e\x7c\x51\x2e\x9e\xec\xe5\xe4\x93\x77\x4a\xc0\xb6\x08\x92\x9b\xf4\xff\x0b\x26\xd5\x4a\x8b\xbe\x08\xa9\x87\x02\x25\x26\x39\x2b\x15\xab\xe7\xac\x76\x51\x1d\xfa\xc1\x70\x3b\xad\x47\x92\x62\xbf\x3b\x5e\xf6\x50\x43\x14\xc9\xe2\x9e\x46\xc0\x23\x05\x4a\xad\x24\x91\x2b\x20\x33\xaf\xf4\x05\xbd\xa6\x54\x74\x2b\x03\x4d\xb0\xf5\x00\xd5\x8d\x55\xf0\xa6\x36\x8c\x25\x06\x3b\x54\xd7\xbb\xa7\x0e\xd4\x2a\x8c\x52\xec\x05\x00\x78\x4d\x1c\x86\xb9\xe4\x65\xc6\x9c\x86\xc9\xf2\x4a\xa8\xf5\xd2\x73\x8f\x72\xee\x5a\xa5\xe4\x4e\xd0\xf8\x5d\x78\xa3\xf7\xe4\x10\x7d\x62\xfc\x7f\x54\x06\xf1\x4c\x8f\xb0\xb1\xc8\xa4\x83\x8c\xf4\x6c\x26\x4a\x4c\xb2\x82\x57\x33\x41\xeb\xbc\x31\xb5\x97\xf3\x54\xb6\x12\xb4\x7f\xb3\xdc\x87\x67\x7a\x7f\x40\x40\x3a\xa2\x5b\x17\x80\x30\xd7\x74\xc8\xcb\x20\x82\xcc\xc7\xe6\x25\xa2\xce\x63\xdf\x6d\xfb\x8e\xdc\x98\x21\x3b\x98\x43\x50\xed\xf0\xb9\x79\x7e\x97\x5c\x4a\x44\x7b\xf2\x39\x42\xdc\x18\x15\xbb\x53\x26\x3f\xb9\x9e\x0c\xa9\x44\x05\xf2\x2b\xbe\x72\x98\x07\xff\xc6\xc5\xb0\x33\xf2\x55\xe0\x74\xf9\x95\xf7\xc9\xb5\x7d\xe8\xe6\x7a\x6e\xc2\x0e\x4e\x5a\x7f\xbe\x27\x23\x6d\x29\xf8\x5e\xd8\x4a\x9f\x05\x7c\xd2\x0c\xe5\x9e\xf4\x08\x55\x26\x4f\x63\x5e\x36\xf2\xde\xf8\x5b\xc0\x33\xed\x82\x01\x09\x86\xd9\x81\xdf\xa2\x8c\x92\x5c\x86\x91\xe9\x6d\xb4\x21\xef\x80\xcd\xca\xfc\x19\xcd\x6e\x35\x75\x1b\x6f\x15\xe7\x86\xbc\x67\x35\x93\x63\x40\x39\x09\x22\xe1\xfb\x8d\x81\xb4\x46\xd0\x15\xc9\x15\x39\xd4\x34\xdc\x72\x1a\xd1\xf8\xe8\x0b\x23\x13\xc0\x35\xfb\x3a\xdd\xe9\x9e\xd6\x76\xec\xde\xe5\x95\xdb\xe5\x7c\x05\xa9\x0d\x86\x8d\xf7\x7a\xc7\x5e\x3f\x26\x4f\xc6\xad\xf1\xf6\xf0\x44\x6b\x0f\x70\x7f\x24\x59\xd7\x60\xda\x3e\x57\x3d\x3c\xd9\x3a\xa8\xb9\x85\x9c\xd3\x07\x5f\xa1\xb1\x9d\x41\x94\x98\x27\x65\x18\x6d\x4f\x62\x4e\x60\x22\x75\x0c\xa3\x93\xa2\x77\x8c\x86\x24\xc6\xd2\x1d\xd1\x18\x6d\xf5\x7e\xe2\x86\x6a\x32\x8d\x32\xb1\xbf\xfb\x5e\x2e\x7d\x7e\x1c\x0f\x7a\xbb\x79\xf7\x24\xf7\xf6\xc8\xc6\x7b\x8e\x7b\x5f\x52\x6f\x8e\xaf\xa3\xdd\xb6\x26\xf8\x85\xc8\x80\xd9\x36\x96\x76\xcc\x6c\x6f\xfc\x60\x44\x49\x28\xc1\xc4\xf1\xe4\x96\x6d\x73\xb1\x29\x2d\x2f\x4e\xa5\x61\x07\x5e\xbc\xd0\x65\xcc\x42\x30\x9b\x58\xdd\x5a\x75\x96\x98\x36\x1f\x93\xea\xb3\x3c\xb4\x8e\x62\x4f\xfd\xe2\x09\x44\xf9\x4c\xe4\xdb\xef\xd8\xf6\xb9\xd8\x94\xa9\x07\xd9\xbf\x90\x41\x2e\xd0\xe6\xdb\xab\x8f\xc9\x2d\xd3\x5c\xd5\x15\xa4\xe3\x99\x6a\x1e\x4d\x73\x99\x67\x22\x67\x43\x36\x05\xf9\xc2\xbd\x61\x85\xd8\xb0\xfa\x3b\x28\x7e\xcb\xb6\x53\x25\x5e\xe9\x1f\xce\xa8\x0c\x6c\xd0\x5a\x1e\x55\x75\xa1\x4b\x7d\xfc\x48\xd8\x74\xc9\x14\xfd\x8e\x6d\x47\xe4\xd1\xa3\xa0\xfe\x09\xf9\x6a\xfd\x55\xe0\xaa\x1c\xa5\x8d\x8f\x12\x02\x47\xbc\x1d\x20\x83\xbb\x35\xb2\x1b\xa4\xa2\x74\x48\x68\xe2\x0f\xb2\x2c\xf6\x58\x4a\x58\x9c\x4e\xae\x26\x3d\xb8\x34\xe6\x69\x02\xdb\x34\x80\x36\x85\x50\x6f\x67\xb1\x85\x76\xc1\x60\xab\x4f\xce\x91\xf9\x1a\x76\x86\x18\xd9\x9f\x46\x11\xec\x69\xa2\x84\x0f\xaa\xf0\x18\xf6\x71\x6e\x65\x92\x04\x48\xc5\x55\x95\x00\x9d\x6e\xf2\xed\xc7\x4b\x1b\xd2\xfe\x94\x5c\x29\x51\xa1\x2f\x09\xf0\xf2\x28\x4c\x89\x8a\x2e\x28\xe8\x8f\xa8\xf4\x96\x1b\xc8\x6b\x8a\xf1\x88\xd0\x47\x6e\xad\x99\x6e\xb1\x31\xde\x62\xef\xe6\x60\xf5\x37\x7e\xce\xd7\x76\xa4\xa9\xfd\x62\x53\xa9\x44\xf5\xc6\x0e\x0a\x1d\x67\x13\x98\xfb\x6b\x56\x23\x72\x83\xf7\x28\x58\x8a\xfc\x33\x53\x83\xb9\x74\x09\x06\x45\x21\xca\x39\xac\xa8\xea\x4e\x3a\xac\xc5\xb2\x79\x21\x36\xff\x41\x4e\x50\xad\x4a\xfe\x48\xac\x21\x9f\x1c\x91\x01\x66\x23\x1a\xb4\xa6\x10\x59\x78\x97\xce\xc6\x32\x45\xa1\x82\x16\x8a\xd5\x12\xcc\x58\xcb\x95\x51\xc2\x44\xfa\x17\x7d\xb5\x81\x97\x4b\xd3\x46\xd5\x2b\x33\x7b\x60\xc5\x7d\x2d\xd6\xcc\x98\x78\xe2\x34\x95\x7e\x4c\xf1\xdc\x13\x76\x21\x72\x12\xcc\x00\x66\xaa\x5f\xb7\x8b\xb7\x97\x67\xe7\xe4\xc5\xcb\x57\xe7\x47\x68\x00\x3f\xf8\x8b\x3c\x80\x7f\x7c\xb0\x28\xff\xd3\xbf\x48\x5d\x54\x4b\x1c\x18\xd1\x3c\xcc\x46\xe4\xe9\xe1\x93\xa7\xa0\x2e\x00\xf3\x20\x5f\x2d\xc9\xc5\x15\x39\x5d\xa9\x1b\x51\xcb\x29\x39\x2d\x0a\x8c\x7e\x96\x44\x0b\x1c\xf5\x9a\xe5\x53\xdd\xc6\x5b\xc9\x1c\xd2\x97\x44\x1c\x90\xcc\xc4\x4c\x2f\xf4\x1e\x95\xfa\x9e\xde\x12\x4a\x9e\x5d\x3d\x9f\xc0\xd6\x91\x82\x67\xac\x94\x26\x9a\x11\xa1\xeb\x75\x4b\x73\xd0\xb7\x1b\x5a\x7f\xf5\xf2\xec\xfc\xfb\xab\x73\x2d\x2a\xb2\xe9\x83\x07\x03\xbd\xda\x52\xd5\x3c\x53\x83\xe3\x07\x0f\x0a\x3e\x9b\xd6\x2a\x67\xd5\x70\xa0\xff\x09\x49\xb5\xe5\x60\x4c\xe0\xaf\x37\x4e\xf1\xff\x9a\x96\x74\xc1\x6a\xfb\xa1\x66\x38\x40\xfb\xf7\x26\x1b\x84\x6c\x1c\xfc\x36\xd7\x1f\x71\x13\xbf\x63\x5b\x10\x7f\xfd\x2f\x17\x95\xde\x21\xe9\x7f\x48\x74\x15\x36\xe8\x88\x81\xb1\xd2\x57\x0a\xee\x5b\xff\x1b\x64\xdd\x68\xd7\xd5\x27\xd6\xe5\xe2\x0f\x3a\xfe\xe1\x1a\xb2\x63\x59\x75\x85\x28\xa5\xaa\x57\x90\xac\xc6\xc6\x31\x5d\x9b\xad\x26\x59\x41\xa5\x93\xdd\x4f\xfd\xef\xd5\x4a\x53\xb3\x12\x0b\x06\x96\x91\x94\xbb\xc4\x98\x84\x33\x00\x79\xd9\x76\xff\xe4\xf0\x10\x52\x5e\xea\xc6\xd1\xc0\x82\xb9\x5c\x8d\x61\x40\x2c\x2b\x54\x59\xdb\xde\x2c\x79\xd3\x82\xab\x6d\xa0\x9b\xaa\x11\x04\x9a\x06\xc9\x1b\xe0\xa9\x9b\x14\x6c\xcd\x0a\x3f\x5a\xbc\xf2\x64\x48\x33\x06\xf7\x1b\xd3\xba\xa0\xed\x07\xb5\xa7\x25\x47\x69\xde\xda\x28\xa4\xa8\xc7\x46\xe4\x37\xa7\xbf\x66\x0b\x87\xf3\x8c\x86\x21\x3b\x50\x70\x0f\x71\x0b\x3e\x25\xe4\x4f\x62\xc3\xd6\xac\x1e\x1b\x7c\x1c\xbe\xa4\xf5\x36\xc0\x1e\x07\x05\x5e\x55\x33\x35\x1c\x59\x95\x22\xe4\x03\x94\xe4\x87\x6b\xdd\x16\x93\x19\xad\x34\xb7\xfb\x7f\x57\x68\x8a\x02\xa5\x43\xb9\x16\xb7\xc6\x2f\x8b\x56\xfa\x1d\xa8\x01\xe9\xa9\x39\xdb\xc8\x8b\x11\x96\x9a\x6c\xa8\x24\x37\x8c\xae\x39\x24\x30\x9b\x17\xd0\x2a\x9c\xb0\x33\x51\x6f\xc9\x6b\x9a\x65\xb4\xae\x45\xc9\x06\x92\xbc\xa8\xe9\x92\xcd\x56\xf3\x39\xab\x63\x2a\xb8\xbe\x78\x7e\x31\xac\x17\xbc\xcc\xe9\xe8\x88\x80\x6d\x17\x9d\x0d\x1a\xd8\x22\x56\x5f\x03\x61\xf2\x75\x90\x55\x48\x9a\xa9\xd2\xda\x64\xd5\x91\x55\x41\xb7\xba\xf0\x86\x67\x00\xa1\xb4\xd1\xa4\x40\xa5\xbe\x9a\xcb\x9c\xd6\x90\x96\x82\x97\x41\x0b\x56\x8d\x83\x8f\x9d\xe9\x01\x88\xf9\xff\x7c\x47\x86\x7a\x95\x4c\x30\xdd\xd6\xec\x50\x90\xd2\x88\x29\x39\xda\x95\x13\xb1\xaa\x85\xbe\x37\x5e\xe6\x04\x4f\xac\xa6\x76\x77\x52\x89\xf9\x4a\x4a\x0a\xe6\x3c\x84\x02\xb4\x59\x11\x0d\x15\xe7\x63\xeb\xed\x03\xc3\x1b\x98\x3f\xa2\x1c\x41\x6e\xb7\x1a\xb9\x0d\x5d\xef\x21\x1f\x64\x7f\x8b\xb0\x93\x0f\x0e\xc8\xf5\x46\xd8\x07\x86\x97\x7a\xb1\xb2\x40\x6f\x69\xc8\x0d\x8f\xdf\x87\x38\xfb\x17\xfc\x16\xa8\x7a\xe0\xe5\x2a\xa9\x62\xbb\x4b\x7b\x93\xfa\x57\xc6\x7a\xf7\x95\x4f\x43\x1e\xbd\xb3\x3e\x30\x2f\x1c\x44\xd8\x42\x21\x34\x1b\x50\x0a\x6b\x8a\x08\x1f\x4b\xfe\x8b\x5e\x5b\xac\xf4\x0c\x48\x50\x5a\xfd\xe5\x9a\x41\x5e\xc5\x5f\x18\x12\x91\xb5\x95\xe6\x3c\x03\x0d\x1c\xba\x82\x55\xfa\x91\x31\x79\x3b\xa7\x84\x3c\x47\xe7\x48\x4c\xec\x87\xda\x5d\x03\x72\xbc\x11\xa0\x5a\xcc\xb9\xa4\x8b\x9a\x81\x71\xf5\xe0\x80\x9c\x16\x52\x60\x01\x5e\xd2\x4c\xf1\xb5\x1d\x99\x66\x71\x75\x23\x18\xa3\x8f\xef\x3d\xcb\x0d\x7e\x12\x87\x88\x66\x48\xc8\x02\x47\x13\x2a\x62\x83\xc9\x35\xba\x4a\xe6\x64\x3b\x44\x5e\x31\x70\x5e\xb0\xfe\xc6\x35\xd8\x06\x31\x74\x73\x25\xcd\x21\x33\x87\x87\xa8\x46\x6a\x90\x69\xfc\xf6\xeb\xfb\xb8\xb5\xa9\xe6\x77\x10\xda\x9a\x79\x27\xa0\xc2\x54\xae\x66\x32\xab\xf9\x8c\x0d\x7d\x6e\x27\xa3\x6f\x34\xba\xf7\xe9\x8c\x1b\xe7\xec\xd1\xde\x26\x9c\xa3\x64\xe4\x95\x76\xaf\x26\x2c\xe7\x6e\x5a\x40\x8e\x76\x6f\x03\x4e\x83\x1d\xe8\x4a\xc3\x5a\xe1\x72\xe7\x7c\x6d\x9e\x09\x9b\xd2\x03\x59\x6a\xcb\xfb\x84\x59\xdb\x9a\xa7\xb1\x95\x12\x3f\x68\x83\x05\xce\xa1\x9a\x24\xf1\x4a\xf0\xf1\xb7\x8b\x42\xcc\xf4\x03\xa2\x1b\x72\x8d\xc0\x0b\x17\x40\x9a\xfa\x17\x51\x4b\x02\xee\x51\x44\x7c\x7f\x3e\x37\xbe\x0b\xe5\x40\x41\xe6\x69\x7b\x36\x24\x3a\xbd\x80\x41\x95\xfa\xc6\xb7\x4c\xa1\x75\xa6\x66\x13\xc9\xc0\xeb\x31\x67\x99\xa8\x21\xa9\xaf\x9f\xa7\x0d\x8b\x23\x27\xc6\x4a\xe8\x7e\x0a\xe7\xed\x33\x2d\xa0\x3f\x83\xf1\x3b\x0b\xd5\xf8\x90\x46\x2e\xca\x42\x4e\xf3\xbc\x66\x12\xac\x5c\x0d\x7a\x9d\xd1\xec\xd6\x62\xa2\xbd\x7b\x6f\x3b\xba\x42\xcf\x0d\x3a\x23\x5a\xd8\xf0\x34\xae\xe8\x0c\x24\xa4\xb8\x34\xa0\xa0\xa9\x9a\x66\xb7\xfa\x7a\xd9\xdc\x20\xa7\x62\xee\x62\xdf\x0a\x0e\x18\x32\x75\xb3\x9a\x4a\x96\x1f\x3b\x3f\xe1\xeb\x67\x67\x26\x43\x52\xc1\x28\x5c\x41\x85\xaf\x17\xdc\xf1\xb4\x66\x7a\xcd\x6b\x26\x95\xa8\x31\x52\xc0\xda\xc9\xe0\x66\x00\x8f\x63\xe6\xf3\x5e\x99\x8a\xd7\x66\xd8\x9a\x30\xeb\x15\x0b\x97\xf3\x87\x6b\x74\xd3\x0b\xee\xc6\x06\xe4\x20\x1c\x72\xa2\x19\x68\x17\x29\x0f\xc6\x0a\xcd\x38\xc0\x90\x81\x73\x71\x4e\xaa\x20\x26\x96\x79\x60\x07\xce\xc4\x72\x49\xcb\xdc\xaf\xe2\xda\x08\x18\xd7\xa2\x0a\x53\x6e\x47\xdf\x50\x67\x9e\x22\xfc\xe7\x2f\x7f\x70\x9a\x16\xcb\x45\xda\x0b\x09\xc7\x32\x0d\x82\xef\xa5\xa8\x6d\xe8\x78\xb3\x21\x17\x88\x8e\x13\x90\x37\x9a\x03\xb2\x6b\xd0\x3c\x85\x58\xe8\x4a\x97\xf9\xe0\x92\xe5\xd9\xa7\x35\xfc\x3a\x7d\xf6\xea\xe2\xec\xbb\x64\x3f\x9a\xfd\xb7\x1d\x24\x47\x7a\xa6\x4b\x34\x87\x7a\x86\xc3\x9b\x15\xbc\xbc\x25\xa2\x3c\xd0\x84\x0e\xd0\x88\xfa\x1c\x2d\xe5\x18\x2c\x7f\x9b\x9a\x2b\xc5\x4a\xcd\x60\x69\x16\x42\x8b\x7f\x19\xbc\x0e\x5b\xcd\x29\x15\x82\xe6\x90\x42\x39\xec\xec\x99\x6e\xf0\x4c\x37\x04\xd4\xfc\xe4\xf0\x70\x4c\x9e\x1c\x1e\x3a\xaa\x7e\x53\xb3\xc9\x0c\x64\x1d\x51\x9e\xf9\x1a\x1f\xac\x45\xcb\xa6\x60\x43\xc4\x1d\xeb\x5b\x9c\x0b\xa3\x3d\x10\x35\x61\xd4\x3e\x9b\x66\x89\xcd\xe8\xb5\x58\xc6\x33\x63\x38\x86\x11\x2d\xb7\x17\x71\x1f\xfe\x06\x0d\x7e\x4d\x5f\xa4\x92\x99\x29\x63\x96\x16\x48\xa7\x92\x1a\x59\xcd\xa8\xf1\xc7\x43\x86\x40\x1f\x21\xba\x60\x60\x26\x33\x0e\x5a\x34\xbb\x21\x62\xa5\xaa\x15\xda\xf3\x6e\xd9\x56\xaa\x5a\xdc\xb2\x10\x28\x84\x97\x5c\x71\x5a\xf0\x5f\x90\x9d\x35\x70\x94\x96\x69\x5b\xa2\x7c\xe5\x26\xa6\xaf\x97\x05\x78\x68\x35\xf6\xd6\x7c\x9f\x8b\x9a\xed\xfa\x8e\xa7\xe8\xa2\xbc\x80\x51\x75\x7e\xfe\xce\x8e\xb4\xa3\x04\x48\xe4\xa7\x75\x2d\x36\xba\x64\xeb\x30\xd4\x2b\x86\x16\x49\xeb\x02\xeb\x8c\xc9\xa8\x3f\x40\x85\x51\xcd\x34\x6b\x60\xd8\x01\x5a\x14\x62\x63\x57\xd2\xe9\x5b\x83\x7b\x87\x51\xf5\x5a\x57\xbe\x84\x5a\x88\x86\x42\x0b\xe9\x2f\x1f\xfb\xc0\xcc\x58\x51\x68\x91\xbc\xf4\x04\xaa\x7f\x3a\x5d\xe5\x5c\xec\x4f\xec\x4b\x75\xb1\x81\x7f\x8d\x7d\xd5\x28\xaf\xaf\xfe\x79\x82\x65\x53\x45\x25\xf3\xe2\xeb\x70\x50\xd5\x4c\x9f\x18\x2d\xc6\xd2\x95\x12\x03\x47\x6d\xa7\xfa\x5a\x8e\xc6\xad\x6f\xce\xb9\xe6\x08\x21\x73\x9a\x7f\x96\xe0\x96\x5f\xb0\x92\xe9\x47\x2e\x27\x43\xcd\xc4\x59\x88\x51\x5e\x6c\x0d\xb3\x76\x23\x36\xe5\x28\x9a\xf5\xf7\x41\x7b\xaf\xb8\x54\xf1\x43\xf3\xa3\x79\x5a\x36\x0c\x7b\xa9\xf4\x58\xa4\xd4\x77\x77\xc0\xa1\x45\x63\x0a\xb6\x44\xde\x2a\x51\x85\x1d\x3c\x63\x26\x22\x29\xdc\x97\xb3\xf8\x3a\xc7\xc7\xd4\x49\x9a\xc6\xa7\x11\x4c\xcb\xcf\xcf\xcf\xae\xce\xfc\x73\xaa\x3f\x18\xcd\x43\x90\xe2\xa6\x71\x07\x82\x0a\x6e\xc6\x95\x74\x57\x77\xeb\xa6\x15\xbe\x0d\xcf\x44\x9a\x86\x03\xd1\xc0\xa4\x8d\x02\x9b\xbd\xcb\x58\x08\xf9\x99\xf5\x13\x3a\x6d\x25\xa7\x6a\x0d\xe9\x87\xeb\xa6\xd4\xeb\xa5\xe4\xe0\x04\xaf\x55\x34\x90\x1f\xae\xdb\x9c\xdc\xad\xd1\xc0\xd8\x9b\xd1\xd5\x75\x1f\xc2\x16\xac\xbe\x26\x6e\xe7\xdf\x81\x56\x0a\xf2\xf2\xc2\x38\xdb\xd0\x2c\xd2\x3c\x99\x40\x60\xe0\xe1\x78\x9d\x63\xfa\x4c\x26\x61\x27\xc4\x4a\x11\x76\xa7\x77\xcc\xe6\xca\x44\x74\x6d\x30\x60\x39\x7a\x75\x69\xf1\x4d\xf8\xad\x88\x46\xe5\x9e\xb2\x97\x17\x8d\x09\x9a\xcb\x01\x6e\x82\x49\x56\xf0\xec\x76\x92\xd7\x74\x11\x7b\xcb\xa7\xb7\x92\x95\x9a\xe3\x82\x6b\xe0\x79\x4d\x17\x26\x78\x2f\x60\x42\xf0\x39\x12\xd5\xf6\xa2\x34\xd0\x24\x8d\xeb\x0b\x7a\xbd\xd4\xfb\x7b\xa6\x7b\x06\x36\x3c\x59\x06\xbe\x3c\x5b\x29\x05\x38\x0b\xe1\xed\x66\x0f\x8d\x01\x21\x05\xd8\x29\x1b\xc8\x00\x6c\x26\xfa\xc5\xcc\xd8\x0d\x5d\xf3\xe0\x49\xd6\x83\xc6\x72\x3f\x42\x31\xeb\x9b\xe2\x0e\x0b\x0e\x5e\x53\x9b\xb3\xd4\x9d\x6a\x7e\xce\x8a\x00\xd1\x24\x6b\x06\x6f\x86\x96\xbc\x3e\x0c\x7f\x77\x38\x26\x4f\xff\x57\xe8\xff\x60\x5d\x6d\x2c\xa7\x16\xe5\x97\x62\xea\x0d\xca\xe5\xb1\xdc\x0e\xd9\xbd\xad\xc4\x9f\x32\xf4\x86\xe6\x09\xe7\x07\x6d\xf6\xe8\x92\xd1\x7c\x3b\x1c\x1d\x93\x4f\xb1\x50\x13\x22\x2d\x19\x94\xa0\x88\x41\x92\x29\xd5\x42\xc8\xff\xe8\x73\xf6\x80\x10\xe0\x82\x8e\xc8\x00\xfe\x0b\xa3\x7b\x76\x7e\xfa\x5a\xff\x70\x7e\xfa\x1a\xfe\x7e\xfb\xfd\xf3\xf3\x4b\x88\x02\x20\x03\xf7\xef\x41\xca\xbd\xa9\xf9\x28\x05\xa6\x07\xbc\xeb\xf4\x8d\x64\xa3\xb5\x42\xc1\xc5\xa1\x58\xeb\xcb\x66\x25\x59\xe8\x6c\xe6\xcb\xd9\x07\x9d\x3a\xc7\x85\x20\xa1\x1f\x2a\xdf\x70\x04\x28\xee\x90\xc0\xa6\xf7\xc0\x04\x0a\xb4\xb2\xfc\x25\x57\x29\xf2\x57\x0f\xf7\xa1\x11\x96\x1c\x7a\x3c\x3d\x0f\xa4\x08\xf4\xbc\x9b\x93\xdf\x79\xef\xcb\x3b\xe8\x61\x77\x67\x8a\xce\x7e\x34\xc9\x39\x7f\xd7\x86\x02\x4a\xa8\x9c\xda\x80\x52\xfa\x39\x8c\x57\xb7\x0a\xdc\xd6\x63\x4c\xaa\x50\x6f\x65\x53\xcd\x51\x29\x45\x06\xba\x43\x2d\x62\xc3\x75\xab\xc2\x8e\xad\x2b\xae\x87\x11\x64\x9b\x1d\x03\x6b\x2a\xd3\xfc\x91\x00\x38\x5f\xea\x5d\xa9\x12\x6d\x10\xf2\x42\xd4\x1b\x7d\x2b\xcb\x82\xca\x1b\xab\x51\x0b\x95\x86\x06\xb6\x0a\x31\x69\x72\xef\xf1\x0f\xaa\xb8\x70\x00\x76\xd7\x50\x9f\xa7\xb7\x5e\x33\x7c\x5e\x9d\xe7\x7e\x01\x38\xdb\xb5\xb8\x65\x9e\x50\xcd\x78\x6c\xff\xaa\xa6\xa5\xc5\x58\x91\x4e\x33\xbd\x67\x6b\xfd\xd5\x10\x92\x90\x5b\x8e\x71\x34\xac\x2e\x3d\x9f\xfb\x63\x5a\x23\xae\xe3\xf0\xe0\xa7\x83\x83\xc5\x98\x0c\x06\x41\xe8\x9c\xd7\x22\x2a\x0b\x00\x1e\xe2\x6c\xcd\x65\x88\x4b\x85\x3f\x4c\x73\x06\xba\x29\x90\xf3\xa3\x24\x6f\xf3\xc6\xf3\xde\x32\x50\x0c\x1b\xc3\x0c\xa2\x61\xb1\x69\x9a\xe7\x17\x33\xb0\xef\xd4\x72\xa8\xaf\xfb\xb1\x31\xc1\x0e\x68\xa1\x26\x8b\x7a\xa2\x39\x8d\xc1\x91\x5f\x94\x75\x8c\xf4\xbd\x06\xb8\xc7\x55\x51\x84\x6e\xb9\x00\x89\x48\xd7\x7c\x41\x95\xa8\xa7\x05\x2d\x17\x2b\xba\x60\xb1\x15\x5c\xd7\x1b\xb0\x72\xb2\x92\x83\xb0\x2a\x21\x6b\xcd\x6d\x96\xa2\x64\x03\xef\x61\xdd\x70\xea\x70\xc5\xc0\x42\x35\xa1\x85\x0a\xcb\x3e\x88\xea\xc0\xe2\x6e\x2b\x26\xe6\x04\xc6\x3a\x40\x62\x8f\x3a\xd5\x6d\xad\xdb\x46\xfa\x64\xcf\xed\xe1\x7d\x0a\x5d\x97\x1f\x1e\xfc\xd7\x50\x7f\xfd\x08\x9e\x0f\xb4\x50\x1f\x0b\x36\x87\x21\x7e\x74\x83\x1d\xfd\xcb\xc1\x54\x31\xa9\x86\xeb\xd1\x28\xd9\xae\xf5\xc9\xb3\x84\x6a\xf9\x9f\x29\x2d\xd4\xbf\xd7\xaf\x11\x0a\x6d\x6d\x4d\xd5\x0f\xfc\x7e\x69\xf2\x94\x15\xcd\xd8\x84\xcb\xc9\x92\x29\xea\x7f\xe9\xd8\xc3\x64\x1f\xcf\x6c\xa5\x97\xf2\x35\x53\xd4\xfd\xd9\xd1\xab\xe9\xeb\x3e\x3d\x60\xc3\x1d\xed\x49\x56\xe6\x72\xb2\xb9\xa1\x6a\x07\xe1\xe9\x85\x46\xbe\xf3\xe3\xef\x26\x33\xae\x3e\x1a\x97\xe0\xc9\x2d\xdb\x76\x2f\x30\xd6\xd8\xb3\xc4\x57\xba\xff\x1f\x35\xcf\x98\x18\xdf\x2a\xd7\x6f\xf9\x04\x04\x21\x90\xb6\x3a\xc6\xa8\x0f\x3b\xad\xb7\x40\x59\xf0\xc6\x0c\x0f\xfe\xab\xe0\xb3\x89\xb5\x4a\x1e\x0d\x7f\xba\x7a\x3c\x3a\x88\x9c\xe5\x69\xbd\x8d\x42\x18\xec\xe0\x3a\x25\x2c\x59\x67\x49\x8e\xa5\xe3\x7f\xa1\x55\x74\xba\x60\xea\x39\x55\xf4\x6d\x5d\xe8\x7e\xdf\x3d\x79\x3f\xea\x26\xfa\x9e\x23\x21\xeb\x51\xec\x27\xef\x96\xcd\x48\x4d\x93\x50\xa6\x82\x35\xdc\x79\xb5\x3c\x7a\x44\x42\x39\x2b\xb9\x36\xdd\xf2\x58\xb4\x2e\xe1\xf7\x69\x20\xef\x9d\xe8\x2b\x61\x51\xd3\x52\xb1\x3c\xb8\x44\xd0\x25\x68\x5f\x1f\xf1\xc5\x75\x70\xa0\x7b\x61\x47\x3e\x55\x3f\x78\x82\x47\x3d\x1b\x7c\xc8\x37\x7e\x00\xa0\x31\x36\x89\xfb\xe3\xc6\x4c\xd8\xae\xae\x02\x81\xf4\x08\x3d\xe9\x13\x56\xd5\x4c\x6a\x8e\x46\xcc\x09\xc5\xd8\x7a\x4c\xdc\x4f\x86\xe0\xe8\x4f\x25\xa1\x65\xdc\xa0\x28\x41\xec\xb0\xe2\xd5\x08\x79\x32\xfd\x10\x90\x82\x4b\xa5\x25\x27\xd4\xfe\xd4\xab\x44\x36\xe6\xa0\xa5\xb8\xd9\x53\x88\x8e\x13\x73\xb2\x11\xf5\x2d\xa8\x2d\x6d\x4a\x0d\xcd\xf6\x58\xf0\xe2\x40\xb0\xa6\x24\xe7\xb4\x10\x0b\x87\x10\x1b\xb6\xe6\x1e\x48\xe0\x61\x28\xf9\x0a\x45\x25\x25\x26\x66\xed\x26\x7e\xf7\xbe\x22\x33\x90\x54\xc2\xd1\x59\x50\xe3\x0d\xad\xcb\x61\x37\xdd\x81\x21\x52\x8b\x64\x0e\xef\x1a\x0c\x44\xa0\x0e\x18\x74\x67\xb7\x1e\xf4\x51\x15\x0c\x46\x9d\xaf\xd1\xbd\x08\xd8\xca\x48\xc9\x13\xe5\x35\x62\x13\x50\x88\xee\xbb\x7d\x25\x83\x6b\x3d\x50\x92\x0d\xd7\xa3\xe3\xce\x36\xf9\x92\x2e\xf6\xbe\x19\x91\xcd\x27\x6c\xff\xa5\xae\xbd\xb3\x7d\xb0\x4d\x7d\x6e\xf3\x60\x77\xdb\xd5\xba\xd5\xba\x7c\x76\x0f\x6f\x4c\x03\xe9\x5e\xf0\x89\xc5\x67\xea\xfe\x0f\xac\xab\x01\xef\xcc\xae\xc7\xd5\xf1\xd2\x93\x25\xad\x26\x56\x6e\x93\xbb\x5e\x45\xcf\x90\x69\xb1\x76\xed\xac\xcc\x62\x4e\x2e\x40\x71\x31\x4a\xc1\xab\xe3\x61\x79\x13\x09\x12\x41\xcf\x90\xb6\xda\x69\xe7\xac\x2d\xb5\xec\x3e\x28\x03\x54\x92\x1c\xe9\x12\xc1\xa3\x10\x46\x06\x90\x08\x92\xdd\x2e\xd2\x5a\xf9\x38\xf2\xd7\xb4\x32\xd1\x0e\x9e\x1d\xeb\x2e\x28\x99\xba\xb0\x0b\xd4\xde\x35\x14\xac\x27\xa0\xfc\xef\x71\x52\x02\x6d\xf9\xf0\xe1\xc3\x9d\xad\x4d\xc0\x86\xd0\xd1\xa6\x7d\xc8\x82\x5d\x38\xad\x6b\xba\x25\x8f\x1e\x45\x0b\x67\x19\xd4\x77\x87\xef\x81\x47\x45\xef\x98\x41\x67\xb1\x27\x51\xb1\xf8\x19\x52\xb1\x32\x21\x36\x4f\xac\x5b\x3c\x75\x8b\x3f\xbe\x7f\xa3\xef\xd6\x63\xb2\x7e\xbf\x93\x5b\x3f\x38\x20\x2f\xa8\x54\xc6\xfa\xe2\xad\xff\xb4\x24\xac\xae\x45\x3d\xed\xdd\x57\x60\x5f\x71\xfd\x25\x77\xa7\xef\xad\x78\xe6\x4d\x46\x09\xba\xd1\x3f\x4f\x2a\x5a\x30\xa5\xd8\x17\x3a\x81\xad\x9f\x81\x24\x7a\x9e\xcb\xf4\x78\x82\x33\x49\x81\xbe\x44\xfd\xe5\x0e\xa7\x77\xb9\xc3\xff\xbc\xc1\xde\xc9\x49\xf8\x45\x2a\x91\xdd\x9e\x05\x9f\xa7\x99\x28\x33\x6a\x91\x0a\xdd\x51\x08\x67\xe9\xd2\xea\xdc\xb2\xad\xe6\x05\xd6\x0d\x41\x90\xd6\x84\x6b\xb9\x9a\xd6\x92\xbd\x2c\xd5\x50\x73\xf6\xc7\x41\x01\xdd\x20\x97\xdf\xd3\xef\x87\x7c\xa4\x17\x95\x93\x6f\xc9\x21\xfe\xe3\x0f\xe4\xe9\x37\xdf\xc4\xcd\xc5\xf9\x0e\x06\x2f\xcb\x35\x2d\x78\x4e\xd0\x2d\x98\x97\xc4\x2c\x2a\x2e\x8b\x1e\xd1\x63\x32\x30\x6b\xf4\xee\x96\x6d\xdf\x47\x5d\x37\x53\x16\x34\x96\xcc\x4d\xf7\x1d\x7f\xdf\x1c\x05\x24\x01\x5a\xcc\xe2\xe5\x2b\x45\xbd\x04\xc5\xe6\xd9\xd5\x15\xd6\x8a\x7b\xd3\x8d\xd5\x8b\xd9\xa8\xb1\xa3\x1d\x5b\xf3\x8e\x03\x12\xfa\x62\x16\x0f\xae\xf9\xaf\xf6\xf5\x1b\x3b\xff\x40\x98\x82\x77\x47\xc4\xbb\x38\xdc\xe3\xc4\xbd\xdc\xf4\x4b\xea\xdd\x46\x70\xe4\xaa\xed\x44\x94\x13\xb4\x86\xed\x3b\xc0\x0d\xa5\xf7\xc3\x87\xcd\x37\x74\x25\xd9\xc4\x28\x77\x27\xa8\xa7\x9e\xe8\x3a\xfb\xda\xed\xd0\x5a\xb7\xdb\x07\xc5\xf5\xc4\x99\xee\x26\xe0\x8a\xd0\xab\x8b\x6e\x95\x77\xa2\x17\x55\x17\x93\xaa\x58\xc9\xc9\x92\x97\x2b\x39\xf9\x85\xd5\x62\xf2\x8b\x10\xcb\xde\x5c\x87\x6e\xe1\x4d\xb1\x92\xaf\x75\xfd\xff\x64\xb5\xf8\x4f\x01\xb0\xa3\xc9\x9e\xb2\x5e\x13\x88\xda\x3e\x33\x63\x4f\xb6\xb7\x9e\xa0\x1f\xd0\x7d\x1a\xfc\xc1\x1a\x29\xd6\x2d\x22\x6b\xb0\x6d\x67\xae\x74\xfb\x02\x67\x54\xaa\x09\x95\x9c\x96\x13\xba\x9c\xf1\xc5\x4a\xac\xe4\x84\xca\x89\xda\x08\xfd\x42\xac\x96\x5d\x3c\x22\x7a\x0c\x4f\x6b\xb6\xa0\x75\x7e\xf6\x97\xdb\x53\x5b\x3b\x31\x47\xb4\xcf\x4c\x40\x0f\x31\xd1\x17\x43\x2d\xba\x04\xdb\x90\x81\xc1\x6a\xbf\x7b\xc6\x21\x16\xa8\x16\x45\x72\xeb\x4d\xe3\x33\x51\x74\xa9\x1a\xfc\xba\x6c\xcb\xec\x99\x28\xf2\x2b\x3a\x67\x57\x8a\x26\x0e\x57\xd0\x98\x5e\x85\x19\xe8\xa4\xf6\x35\xbb\xfb\x56\xc0\x26\x75\xb7\xa7\xf2\x19\xba\x97\x07\xd3\xb8\xc7\xd5\xb0\xbb\xa1\xd6\x14\x7a\xb1\x72\x7a\x41\x74\xc1\x9d\xab\xe1\x22\x9f\x27\x9b\x9a\xef\xa7\x52\xb7\x73\x67\xb6\xde\x8f\xba\xda\xae\xc1\xe6\x2c\x7b\xf2\xb4\x77\xbb\xcf\x75\xe9\x64\x73\x73\x51\xaa\xc9\x9c\x2e\x79\xb1\xf7\x70\xea\xa9\xbf\x10\xa5\x7a\x01\xa5\x5b\x53\x87\x96\x7a\x09\x61\x4c\xe9\x66\xd2\x22\x17\xb6\xb2\x14\x08\x4f\xf6\xab\x87\x64\x7d\x38\x7a\xf3\x6e\x2f\x62\xb7\x8f\xf6\x00\x6f\xc4\x92\x4d\x6e\xd9\x56\x4e\x8c\x2f\x63\xdf\x1b\x48\x57\xfc\x8e\x6d\xa5\xb3\xb5\x36\xb7\x42\x97\xd4\x7c\x6c\xb9\xe8\xe2\x06\x13\x92\x9f\xa9\x80\x57\x7f\x83\x35\x7a\xb8\x1e\xb5\x38\xb1\x06\x5f\xd9\x4f\x98\x03\x86\x7a\x38\x38\xd7\xff\xd1\x8c\x4d\x30\xd2\xc0\x8e\x73\x44\xce\x01\x40\x8b\xe5\xc6\xa2\x3d\xe8\x21\xa6\xd5\xdb\x94\x06\xa3\x3d\x3f\x9a\xe7\xcf\xcc\xbf\x87\x81\x4e\x90\x64\x14\xb1\x87\xee\x7e\xcd\xb8\x35\x4b\x16\x64\xa2\x6a\x70\xff\x4b\x7a\x37\x41\x15\xff\xc4\xfa\x23\xf4\x38\x78\x4b\x7a\x87\x61\x7d\x57\xd6\x87\xa1\xbd\xe3\x90\xa0\x19\x89\x89\xd6\x6c\x32\xd7\xff\xea\xbd\xf5\x50\x59\x13\xd4\x69\xcd\x5e\xe8\xff\x26\x3b\x50\xd4\x68\x15\x8c\x9e\xba\x7f\xeb\x8a\x82\x36\xe1\x1c\x3d\x31\x12\x6d\x83\xdb\x01\x9a\x20\x50\xa3\xd6\xeb\x45\xee\xf0\x1b\x48\xb7\x0e\x2d\x4e\x50\x25\xd7\xe7\x2e\x78\xdd\x70\x38\x68\xdd\x08\x15\x5d\x7c\xde\xe9\xd5\x15\x77\x9e\xde\x8a\x4a\x39\xa1\x85\x9a\x18\x69\xf7\x9e\x06\x2e\xcd\xc3\x0b\x79\xe7\x3d\x6c\xbd\xb5\x6b\x25\x59\x7d\xba\x60\xa5\xb2\x5a\xff\xd7\x34\x23\x17\x57\xe4\xcf\x07\xfe\xb8\x83\x3c\xfc\x8a\x29\x72\x5a\xa8\xc9\x93\xe9\xf4\xf7\x06\xbc\x51\x44\x60\xbe\x43\x25\x88\x61\x26\xd0\x89\x15\x90\xbb\x20\xf9\x87\x28\xc3\x96\x4a\x51\x4e\x74\x0f\x44\x6e\xa5\x62\xe0\xca\x08\x59\x86\xc0\x26\x68\x45\x43\x51\xb1\x12\x63\x0b\xb5\x90\x58\x55\x76\xe4\x7e\x4e\xe4\x84\x0c\x1f\xea\x59\x3d\x7a\x64\xcc\x89\x58\xe4\x7a\x5b\x41\x72\xb3\x41\x25\xaa\x55\x35\x18\x75\x6b\x6f\xf4\x2c\x4e\x0b\xf5\x3d\xc6\xf6\x74\xac\x3a\x30\x84\x7f\xdf\x65\xd7\x0c\xe3\x7f\xb7\x75\xd7\x73\xda\xbd\xf0\x70\xbd\xfc\x7d\x17\xfe\xb5\x1e\xc2\xaf\x5f\xf8\x2f\xb4\xe8\xbf\x7a\xcd\xf5\x74\x7a\xac\xf9\xfa\x1e\xf7\x16\x36\xfa\x43\xa2\xbd\x9a\x65\x8c\xaf\xd9\x84\x95\x99\xc8\xbb\xb9\x2d\xc3\x2c\x1c\xfc\xd7\x70\xa5\xe6\x93\xdf\x7d\xac\xe9\x66\xf4\x2f\x07\x23\x67\x0f\x0d\xb5\x11\xb1\x9a\x29\xd6\x88\xcc\x45\x4d\xbe\x6a\xf6\xf9\x55\x5b\x69\x84\x76\x55\xe8\xcb\xdb\xcf\xbc\x22\x24\xa9\xb0\x3d\x37\xcd\x25\x66\x69\x60\xa6\x45\x39\x71\x5e\xc3\xfd\x94\xf8\x0d\xe7\xdd\xee\x76\xd1\x31\xb9\x6f\xa3\xde\x61\x38\xdd\xe2\x8c\xd6\x13\xe3\x35\xdf\x83\x5f\x6d\xc6\x3f\xb7\x19\xd6\x10\x66\x7b\xb2\xa4\x5b\xe0\x07\x26\xb4\xae\xc5\x66\xd2\x87\xe1\xe8\xf2\x53\xee\x58\x0f\xd3\x8f\x58\xb3\x89\x0f\x2d\xee\x3d\x91\x76\x64\x73\x62\x42\x7a\xfc\x7f\x4b\x9a\x8d\x3a\xfc\x15\x04\xeb\x95\x11\x7d\xc8\xf6\x86\xcf\xd5\x04\x23\x77\xee\xa9\xeb\x80\xaa\x98\x51\xb7\x8b\xbd\xb2\x95\xf6\xad\x63\x78\xd8\x24\x53\x76\xbc\xed\x4d\xd1\x97\xf6\x24\x93\x3d\xa9\xc9\x29\x5a\xde\x4a\x56\x9f\x49\xf9\xb6\x2e\xba\x9b\x9c\x68\xa9\xfe\xf3\xda\x05\xb8\x93\x56\xc3\x1b\x51\xe7\x13\x80\xdb\x9b\xc0\x0b\x33\x29\xd8\xfc\xbe\x2a\x0b\xdd\xc6\x33\xdd\xc4\x6b\xdd\xc2\x2b\x36\x57\x49\xbd\x52\x4b\x43\xb1\xab\x5e\xf7\x00\x3f\x47\xa9\x12\xf7\x74\x69\xb4\x1f\xf7\x1e\x62\xa3\x62\xf7\x18\x97\x3c\xcf\xf7\x5f\x59\x3b\x07\xf9\x1a\x9a\xf8\x9c\x51\x36\x6b\x7e\x1a\x3f\x20\x80\xdd\xd1\x70\x4e\xab\x19\xcd\xaf\x30\xbc\xa4\x8d\x11\x12\x16\x04\xfb\xfb\xf6\xb4\x28\x9c\x4c\xad\x6f\x94\xc8\x69\xcf\x0c\x31\xfc\xcd\x80\x2d\xb5\x1d\x77\xe3\x14\x34\xb2\xe1\x01\x29\x6d\x74\x0a\x7a\xb0\x22\x86\x5e\x39\xe7\x0b\x0c\xea\x6a\x46\x1f\x7e\x1d\x41\x98\x77\xf8\xe9\x7d\xda\xed\x9f\xb8\x60\xea\x0d\xc4\xe6\x74\xe5\xdd\x09\x16\x23\x4e\x26\x0c\x0a\x25\xcd\x22\x59\x70\xca\x59\x4d\xb3\x5b\xa6\xc5\x7e\x44\x2c\x59\x8a\xbc\xe5\x0f\x3a\x13\xa2\x60\xb4\xfc\x64\x90\x36\xae\x6f\x98\xb9\x60\x95\x20\x18\x16\xb7\xc7\x99\xf2\x99\xed\xc4\xde\x68\x9d\x28\x1f\x36\x4a\x61\x3a\x6b\x56\x81\x92\x49\x48\x12\x0c\x00\xb3\xde\xb2\x2e\x02\xcc\xa2\x15\x6e\xc5\x2a\x80\x56\x91\x4c\xd9\x58\x9b\x8a\xd5\x92\x4b\x35\x06\x00\x63\xee\x21\xf2\x71\xdd\xc6\xa4\xa6\x06\x1a\x81\x62\xf2\x63\x74\xa2\x75\x5e\xc9\x5d\x5e\xb3\x38\x9c\x6b\x37\xb0\xbe\x8b\x14\x18\x1e\xc3\x15\x82\x46\xe2\xcc\xb7\x61\x48\x1b\x7c\x3e\x4e\x44\xe6\x19\xa0\x94\x46\xa4\x54\x9f\x1a\xa2\xce\x59\xdd\x28\x9d\x4e\xc4\xd4\x08\xf5\xc3\xf9\x52\x00\x5b\x45\x50\xa4\x88\xd6\xcd\x02\xed\x25\xed\x8e\x85\x68\x13\x78\xb8\x14\x7b\xc8\x1c\x03\xae\x30\x0f\x14\xe4\xae\x0e\x00\xc8\xca\x66\x94\xc5\x97\x25\xfe\x2b\x9f\x8c\x5f\x0f\x25\xdf\x45\xfe\x5d\x91\x1d\xdd\xc4\xef\xf7\x17\x97\xff\x9f\x90\xf0\x9f\xb5\x48\xb4\x93\xf8\x13\x71\x7f\x5d\x56\x53\xac\x7a\x9c\x06\x53\x68\xda\x1a\x7c\xa4\x88\xb4\x00\x6b\xc9\x38\xc2\x71\x7a\x18\xdd\x38\x0c\xbf\x59\x47\x9d\xae\x4a\xa8\xf9\xb6\xb3\xdf\x7d\x6e\x7d\xd0\x5d\x17\x15\x95\x8a\x95\xb9\x79\xd5\xe0\x04\x39\x3c\x0e\x84\x7e\x49\x47\xab\x42\xd4\x14\x0b\xc2\xa5\x2c\x7a\xb0\xfc\xe0\xe3\xa5\xbe\xfe\xac\xcb\x61\x07\xb1\xb4\x2f\x88\xe6\xf2\x25\x4f\x90\x5f\xfa\x7f\xda\x13\xd4\xb0\x7b\xec\x3a\x41\x89\xc8\xd8\xff\xef\x04\xa5\x6c\x47\xf7\x3c\x41\x9d\x54\xf4\x0f\x77\x82\x76\x10\x4b\xfb\x04\x35\x57\x35\xc6\xc9\x86\x98\x61\x42\x21\xe2\xc4\x1a\xa3\xd0\x01\xd9\xad\x8b\x41\x29\x00\xd7\xe2\x7a\x55\xea\xc3\x62\x3c\x79\x21\xac\x09\xa2\x98\xea\x05\x02\x5a\x78\xa6\x21\x1d\x0c\x64\xda\x3a\x03\x28\x24\x3c\x25\x31\xf2\x55\xbb\xdf\x69\xea\x98\xd1\x7a\x81\xd6\x1d\x68\xa4\xd1\xbd\xcf\x9d\x24\x2c\x98\x95\x6d\x68\xc7\xba\xd6\xab\xf2\x2c\x1c\x5d\x74\x02\xfd\xef\x63\xdf\xb7\xcf\x2c\xc4\xca\x35\xaf\x45\xb9\x0c\xd0\x3f\x8d\x1c\xb3\x60\x6a\x38\x08\x3e\x0f\x7c\x06\x2c\x74\xd1\x0b\xab\x3e\x3c\xb1\xae\x5c\x03\x00\x90\x0c\x5b\x35\x2a\x5c\x38\x2f\x71\x77\x7f\xfd\xd4\x05\xc8\x68\x82\x48\x71\xfb\x30\xaa\x28\x9c\x8a\x3d\x7c\x7f\xf5\x53\x3a\x0a\x56\xf6\xe3\x47\x32\x08\x62\x11\xb8\x38\xb2\xf1\xb1\xd3\x6a\x25\x6f\x86\x23\xff\x2d\x18\xd0\x51\xf8\x87\x2f\x21\xca\xf3\x3b\xae\x8e\xc2\x35\xf5\x39\x97\xf0\x7f\x00\xde\xa8\x1b\x17\xd5\x30\x72\x96\x82\x0f\xab\x12\xc8\xb3\x28\x5c\x94\x70\xcb\x73\x0c\x11\x22\x83\x75\xcf\x0a\x21\xd9\x44\x94\x13\x76\xc7\xd5\x60\xd4\xf4\xb5\x32\x2a\x64\x28\x35\x4c\x79\x78\x87\x39\x79\x53\x9d\x87\xeb\xab\xe9\x27\x99\x34\xdc\x78\xa5\xf3\x79\x9c\x71\xc5\x40\x46\xc9\x08\x96\x0c\x7f\x1d\xa3\x9b\x38\x5e\x32\x1b\xee\xa3\x33\xdd\x45\x61\x39\xda\xdd\x14\xcd\xe5\x9b\xf0\xc2\xdf\x7d\x4d\x38\xd0\xa8\x0e\xd4\xa8\x60\x5e\x2f\x71\x2d\x60\xe4\xcd\x08\x6f\x23\xc4\x25\x04\x66\x1f\x33\x69\x30\xf4\x23\x4b\x01\x44\x12\x4a\xc6\x10\x24\x65\xeb\x11\x26\xf4\xa3\x8d\xc8\xfa\x10\x58\xf0\x75\xd4\xee\xae\xc9\xc7\x1b\xd6\x9e\x7c\x14\x87\xde\xda\xdf\xd6\xfb\xb2\x60\xea\xb9\x81\x5a\x18\x8e\xa6\x33\x91\x6f\xf5\x66\xbb\x35\x79\x6b\xc9\xf3\x1e\xab\xb2\x63\xf4\x2d\x6a\xbf\xef\xf8\xe1\xb2\x08\x07\xa8\x79\x25\x4a\xce\xae\xae\xf4\x45\xc1\x0d\xde\x0f\x7c\xf9\x1e\x38\x86\x62\x8b\x03\xe4\x12\x95\x20\xc8\xb8\xb8\xc2\x32\xca\xc8\x08\xf1\x9e\xe0\xe3\xde\xc5\x07\x41\xa8\x29\x4a\x5a\xd8\x40\xc0\x09\xb5\x0a\xa3\x34\x16\xc9\x65\x54\x42\xc6\x30\x73\x83\x87\x43\x6e\xd4\xfe\xa3\x45\x8c\x63\x73\x7e\x17\xf7\xe8\x06\x79\x60\xbe\x62\xa0\x7b\x0f\x39\x5e\xca\x1f\x68\xf4\xac\xea\xa6\xc6\x38\xba\x7b\x44\x67\x39\xfd\x14\xf6\x7f\x32\x98\x4c\xa0\xdb\xc9\x20\xd8\x42\x0f\xe0\x61\xff\x65\x20\x3c\x8c\x30\x8f\x91\xac\x90\xac\xd7\x5e\xd8\x3f\xff\xcb\x5f\x7d\xab\x9f\xfe\xe5\xaf\x7a\x74\x9f\x7e\x36\xe3\x4b\x83\xbe\xce\x85\xc1\x62\xeb\x3e\xa0\x67\x9a\x7a\x43\xe7\xa0\xc3\x11\xa2\xc3\x68\x3a\x30\x1b\x61\xf1\x01\x5c\x73\xd1\xe9\xb6\xcb\xe5\x12\x6f\x12\x88\x33\xd8\xba\x11\x80\x7f\x52\xa0\x78\x6b\x52\x8f\x4d\x07\x58\xe1\x4e\xe6\x4c\xf2\x1a\x18\x2f\xd3\xdb\x98\xb8\xfc\x80\x7d\x58\x6a\x9c\x47\x14\x00\x7c\xe7\x01\xa2\xab\x3b\x88\x15\x33\xa9\x71\xaa\xbb\xd4\xcb\xed\x9d\xaa\x46\x51\xbe\xf0\x98\xed\x34\xeb\x55\xdd\x45\xc0\x05\x48\x45\x43\x88\xf9\xd0\x4d\x4c\x20\x2f\xb1\x45\x4e\x0b\x1b\x89\x13\xed\x61\xfa\xe2\xc7\x64\x50\xdd\x0d\x76\x37\x88\x29\xf9\x52\xf1\x82\x7b\xba\xb0\x29\xde\x6d\x1f\x01\xc1\xfc\xbb\x55\xc9\x99\x87\xaa\xb5\xd3\xcd\xdc\x8d\x3d\xb8\xd5\xf6\x3e\x24\xdf\x9f\xf0\xae\x75\x8b\xda\x63\x74\xe8\x3e\xf7\x2b\xb8\x69\xeb\xc0\x76\xef\x11\x7a\xbf\xb7\xc4\x91\xd3\x77\xed\x57\x81\x7f\xdf\x57\xf7\x7e\x05\x62\xf7\xba\x8e\x27\x20\x41\x8d\x66\x58\x69\x6a\x36\xce\x86\xa3\x1e\xf7\x58\xc7\x71\x70\xde\x81\x21\xd6\x5f\xca\x51\xb5\xb5\x28\x29\x4c\x92\x28\xb3\x7b\xdb\xed\x08\x6e\x8b\x31\x08\x19\x2b\x25\x30\xdb\xa9\x66\x12\xf8\xdc\xc1\x06\x6d\x7b\x2c\x63\xd3\x33\xa9\xbd\x98\x90\xa8\xc4\x7e\x6b\xcd\x3c\xe1\x0f\xd5\xe4\xe4\x6d\xe5\x76\xc4\x4d\x17\x18\x0b\xd6\x40\xc6\x33\x91\x61\x05\x83\x8d\x77\x38\x66\xfc\x34\xfc\xf3\x93\x27\xc7\x3f\xc9\xc7\x41\xe4\x31\x18\x5e\x75\xcd\x8f\x1f\x09\x46\x01\xc3\x88\xce\xea\x8b\xab\xbd\xe3\x79\x72\x8c\x09\xb8\xd0\x98\x63\x14\xae\x2e\x1e\x33\x0a\x02\xea\x6a\xe2\x29\x36\x81\x56\xab\x56\x0b\x7b\x0c\x19\xa2\xc8\x63\x72\x08\x9c\x9b\x91\x0e\x5a\x44\xa0\x5b\xba\x0f\x1d\x44\x34\x9a\x26\x02\xef\xb5\x9c\x96\xe5\xbc\xf3\xb6\x5b\xf0\xa0\xca\xc3\x86\xb3\x4d\x0f\xc5\x4b\xd4\xa1\xff\xe3\xd8\xd7\xef\xef\x68\x9d\x68\x21\x41\x59\xa8\x24\x0a\xb3\xea\x87\xb7\x88\xc9\xd9\x95\x48\xb8\x85\xc9\x7c\x8a\xfc\x5e\x35\x07\x76\xad\x6c\xee\x4a\x69\x37\x41\x53\xb7\x1b\xc9\x94\xfd\xdf\x15\x2d\xe4\xd0\xb6\xef\xa9\xd9\x57\x70\xc9\x2d\x23\x97\x01\x98\x77\x80\x52\x62\xe8\x29\x3f\x22\x30\x4e\x7d\x34\x75\x89\x0d\x3e\x7a\x39\x47\x30\xdb\x64\x34\xd5\x00\xe4\x10\x1c\x14\xe0\xa1\xb8\xe7\x85\x70\x79\x94\xae\xb3\xef\x71\xf0\x09\x60\xee\x4b\x0b\x7e\xe2\xbd\x75\x6b\x9d\xf5\x77\x9f\x3c\x08\xe2\x4b\x1e\x3d\xf8\xa2\x0f\x40\x9f\xc3\xe5\x1c\xf3\xbb\xde\x2a\xcf\xc4\x94\x22\x67\x93\x7c\x55\x43\x08\x6a\x27\x0b\x93\x3a\x79\x10\x26\x30\x22\x7f\x24\x83\xc3\xe9\xbf\x49\xc8\x15\x70\x38\x48\x3f\xc1\x78\x01\x59\x94\x26\xc0\xae\x8f\x26\xd9\xd2\x01\x5a\xdb\x69\x9f\xd7\xe4\x0a\xda\xdb\x3b\x51\x03\x0f\x86\x21\x8c\x30\x86\xce\xd9\xae\x95\x71\xcf\x05\x64\x40\x27\x8a\xaf\xd5\xf4\xf5\xc5\xdb\xab\xf3\x0f\x97\xe7\x6f\x2e\x2e\xaf\x3f\x3c\x7f\x79\x75\xfa\xec\xd5\xf9\x73\xf2\xc7\xf4\x13\x3e\x58\xd3\x7a\x68\x45\x8d\xa8\x7b\x4d\x2c\xa3\x01\x39\xba\x6f\xbd\x4a\x00\xf4\xda\x68\x90\xd4\xa6\x52\xc4\x09\x13\xf3\x94\x45\xd1\x06\x6e\x77\xd8\xcd\x2f\xc5\xe6\x4c\x14\x9f\x80\xdd\xc7\x7f\x1b\xe5\x28\xa9\x99\x81\x90\xb6\xb9\xf2\x6c\xc3\x61\x8b\xbb\xf6\x89\xae\x99\x81\xec\xeb\xa3\xf8\x30\xa6\x48\x1b\x26\x3e\xcd\x0a\x51\x36\x99\x98\xa4\xf6\xf8\x4e\x85\x78\xf3\x9f\xcb\x84\xc6\x79\x02\xfa\x8d\x38\x3e\xfa\xc9\x03\xd0\x35\xbc\x86\x00\x1e\xb7\x84\x3a\x55\xff\x67\x5f\x1b\x46\xf7\x1c\xe2\xf6\x13\x29\x41\x54\xb3\xea\x8e\xb9\x25\x76\x21\x4a\x1e\x39\xa7\xa0\x4d\xa6\x55\x55\x70\x0f\xee\xdc\xe9\xbf\x61\x65\xce\xeb\xdd\xed\xed\x99\xfe\x82\xa9\xff\x14\x62\xf9\x02\xfb\xee\x2d\x47\xc4\x62\xd9\x2f\xae\x85\x58\x49\x0f\x18\x60\x38\x0b\xae\x0a\x9f\xae\xc3\xce\x69\x20\xbd\x3b\x6c\x7a\x7f\xa1\xda\xb5\x6b\xa0\xef\x8e\x62\xa4\xe4\x35\xd4\x09\xb7\x53\xff\x80\x13\x6b\xe0\x51\x4f\x95\x29\x0b\xff\x6d\x6c\x1b\x40\x33\x23\xae\x1a\xa4\xda\x2a\xb6\x06\x34\xb3\xeb\xaa\x30\xb3\x88\x6f\x0a\x53\x58\x4f\xc6\x41\x71\xa2\x9a\x42\x37\xbf\x4f\xc9\x8f\xa5\xda\xf7\x02\xb6\xea\x99\xc0\x5a\x6c\x8c\x5d\x6d\x3e\xcd\x0a\xba\xac\x4c\x89\x69\x2d\x36\x63\x72\x38\x0e\xc9\x37\x14\xa9\x27\xe4\x89\xe3\x94\x30\x1a\x31\xdd\x0c\x7e\x4b\xb6\x84\xf2\xbf\x6d\x28\x3a\x26\xce\xc7\xc4\xa1\x59\xc0\x70\xb0\x31\xc7\x30\x45\x5d\x90\x3f\xd8\x71\xb8\xcc\x90\xf1\xf7\x93\x13\x5b\xe0\xd1\x23\xfb\xc9\xe6\xe6\x89\x98\xd8\x8e\x8b\xd2\x96\x75\xc0\x8e\x0d\x3e\xff\xac\x80\x1c\xfc\xce\xaf\x67\x20\x89\xab\x32\x2f\xe8\x62\xcf\x8e\x41\x60\x15\x4e\xfa\xc2\xf7\xd4\x21\x08\xef\x19\x9f\x41\x5f\x89\xef\x49\x19\x8c\x0d\x91\x1c\x3b\x0e\x11\xc2\x60\x43\x3e\x00\xf8\xd7\xfd\xbc\x82\x2c\x04\xa4\x77\x1c\xd1\x3f\xb4\xbc\x82\x1c\x8e\x36\x7c\x3e\x0e\x52\x84\x6a\xce\x01\x9b\x82\x9c\x82\x9f\x52\x3a\x91\xd6\x14\x3e\xcf\x71\xa7\x35\xd6\x2e\xc7\x1d\x1c\x6d\x53\xcd\xac\x07\x83\x44\xdc\xc0\x0c\x1f\x23\x26\xbb\x7d\xd0\xdf\xbe\x74\x70\x8d\x5d\x8a\x40\xa4\xcc\x33\xb1\x2a\x55\x8f\xcb\x0a\xa1\x1c\x43\xc3\xb9\xad\xec\xb5\x7e\xc1\x8f\xcd\xb8\x08\x65\x93\x0a\x18\xcd\xeb\xc6\x34\x38\x78\x72\x78\xf8\xaf\x83\xa4\x30\xd5\x55\xe5\x35\x55\x37\xd3\x8c\xf1\x22\x32\x70\xef\xd3\xf9\x7d\x6d\x0f\x68\x30\xc6\xc7\x89\xaa\xf8\x4a\x39\xd7\x73\x98\xf8\x9b\xbb\x91\xd1\xe7\x1d\x27\x91\x55\x83\x36\xbb\x2e\xaf\xf0\xbe\xb9\x61\xf9\xaa\x60\x57\xdb\x32\x8b\x2f\x9c\x0f\x1d\xca\x2e\x73\xfd\xfd\xea\x0d\xaf\xf5\x2d\xaf\xe7\x7d\xed\x1b\xe5\xa5\xcd\xa7\xb1\x87\x02\xfe\xc4\x8c\xb3\xac\x23\x01\xdb\x9c\xdf\x7f\xd7\xc1\x9e\xcd\xbf\xb1\x6d\xdd\x63\xf7\x6d\x9d\x7e\x7b\x6e\x4a\x7f\xed\xe7\xbc\x6b\xff\x92\xaf\xc4\xd8\xd5\xfd\x9c\xbd\x7b\xce\x2c\x28\x97\x93\x7f\xc2\xfc\x2c\x3d\xce\x24\xa2\x8a\xba\xc4\x4f\xf8\x45\x4e\xf7\x6e\xac\xaf\xd2\x63\x63\xc3\x65\xe8\x38\xde\xc1\x3a\x24\x0f\x7a\x9c\x7a\xde\xaf\x5f\x00\xcc\x69\x7a\x81\xb3\x14\x9d\x16\x9f\x89\xd8\x4d\x21\xd1\x9c\x39\x41\xad\xf6\x90\x24\x3f\x0c\x83\x7d\x32\x89\x34\x58\x99\x83\x45\x3e\x5e\x7b\x25\x48\x55\xac\x16\xbc\x0c\xe0\xa8\x23\x50\x5c\xd9\x3e\xcd\x41\xdb\xbb\x77\x17\x6f\x99\xc6\xf6\x26\x2c\x37\x9b\x1b\x8a\xa8\xe1\x16\x4c\x38\x17\x25\x4b\x00\x09\x47\xed\x41\xb6\xed\x95\x42\x4b\xee\xaa\xcc\xc1\x9b\x7a\x4a\xc8\x4b\xe5\xf2\xbc\x03\x32\x5e\xe0\x58\xa5\x4f\xb6\x4b\x63\x33\x1c\x59\xd0\x3c\x98\x37\x24\x27\x13\x79\x9c\x77\xbc\x5e\x95\x24\x42\xb1\x83\x0c\xee\x98\x1e\xb3\xaa\xc5\xa2\xa6\xcb\x25\x55\x3c\x73\xb0\xb9\x62\x1e\x9a\x8c\x71\xc0\x76\xe2\x97\xac\xd8\xea\x9b\xc9\xe8\x02\x2c\xcf\x0f\xcf\x7a\x99\x93\x15\x60\x19\x01\x68\x5e\x94\x98\x9f\x2c\x19\x2d\xa5\xcb\x88\x2e\x14\x99\x81\x5d\xda\xd8\x47\x33\x51\xd7\x5a\x7c\x45\x5f\xd3\x2d\x53\x7e\xdd\x4a\x2d\x8c\x35\x91\xd5\x6f\xb8\xfa\x75\x27\x6d\xff\xc9\x41\x9a\xbe\xd7\xcb\xf8\xad\xb3\x8b\xa9\x1b\xcd\x0a\x6b\x42\x3d\xc7\x68\xee\x53\xa5\xd8\xb2\x52\x26\x71\x84\x6e\x9f\xcc\x68\x8e\x4b\x8b\xb1\x39\xad\xc3\xa3\x99\xe1\x9c\x15\x8a\x9e\xe1\xb0\xc9\x49\x34\xb5\x49\xcc\xbf\x2d\xcc\x53\x3e\x8c\x4d\x6e\x31\x7b\x1c\xb5\x90\xe4\x93\xfd\xe7\xf4\x69\x8e\x06\xf4\x07\x72\x68\x1f\x02\x87\xdd\xdb\x48\x11\x33\x8a\x6e\xf5\x36\x2e\x79\x17\x1b\x1f\xf6\x83\xaa\xc0\x50\x8f\xee\x10\x93\xb8\xcb\xba\x6d\x33\xe9\x4c\x0b\x56\x2e\x50\x12\x38\x26\x9c\xfc\xe1\x84\x1c\x1e\x13\x3e\x99\xc4\xd1\x9d\x71\x9d\x77\xfc\x3d\xf9\x36\xda\x00\xa7\xea\x81\x58\x11\x0f\x93\x1a\x77\x15\xf8\xdc\x7c\x8a\x5e\xb7\x8e\x15\x4d\xdf\xa6\xfb\xee\x1f\xf3\xe2\x7d\xb9\x0b\x28\x6e\xf0\x9f\xe1\x06\xc2\x11\xff\xf3\x5c\x41\xbf\xfa\xd9\x36\x0f\x60\x4f\xa6\xec\xfe\xf7\x0e\x2e\x28\x5e\x3c\xf1\x23\xeb\x6e\x9d\x4b\xb1\xd1\x57\x8e\xeb\xa4\x7d\xdf\xe0\x20\x3b\x2e\x1c\xc7\x09\xda\x06\x5c\xeb\x99\x55\x23\x60\x15\xa7\x70\x1c\x36\x6e\x19\x18\xc0\xb7\xfe\x8a\xd1\xcf\x3f\xba\x64\x2d\x84\x22\x72\x49\x0b\x93\x1b\x83\x04\x03\xfe\xfa\x84\x4c\x4c\xe6\xf1\xcd\x0d\x2f\x58\xd0\x56\x8c\x49\x5c\x50\xa9\x2e\x51\xfe\xd6\xc3\xc0\x4c\xe3\x78\x4c\x47\x70\x79\x04\xb7\x85\x2d\x3b\x09\x99\x53\x97\xe9\xcb\xde\x38\x27\x27\xc4\x6b\x3b\xba\x6e\x10\x77\xf9\x60\x87\x10\xea\x67\x9a\x1f\xed\xbc\x75\xec\xba\x57\xa2\xba\x14\x1b\xef\x78\xe7\xa6\x37\x99\xd8\x9b\xe8\x01\x89\x70\x97\xe3\x1b\xe9\x86\xcf\x21\xa7\x7a\xb0\x2e\xc7\x0f\x1a\x7c\xb7\x9f\x5a\xb5\x92\x37\x53\x5a\x55\xd6\x2e\xde\xf8\x3e\xd6\x5d\xd8\x50\xb3\x83\x03\xf2\x23\x23\x7f\x59\x49\xe5\x90\xee\x21\xb9\x9a\x83\xbb\x57\xa2\x8a\xf3\x25\x8e\xf5\x61\xb4\x77\xc4\xaa\xca\xa9\x62\xb6\xa5\x40\x34\x0f\x84\x1f\xaf\x86\x41\x4d\x13\x08\x8c\x4b\x7a\x17\xa8\x99\xec\xdb\xa1\xc7\x87\x19\x09\x23\x88\x47\x4f\x29\x7f\xe8\xa2\xac\x82\xd6\x90\x72\xc9\xbd\x6b\x01\x35\x9e\xec\xa2\x80\x98\xc0\x7c\x19\x23\x39\x99\xd1\xf2\x72\x18\x0c\x70\x57\x73\xc7\x41\x6b\x35\x9e\xc6\x64\x71\x59\x15\x3c\x63\xc3\x07\x0d\xbb\x48\x07\x99\x4e\x9a\x23\x1b\x37\x7f\xf0\x68\x76\x21\xe5\xac\x4a\x4f\x3b\xb5\x27\x9b\xf0\xf0\x4d\x4e\x9a\x4d\x1d\xc7\xca\x33\xbd\x3f\x8f\x3b\x0a\x7d\x4a\x2c\x78\xc4\x3d\xc0\x63\x94\xc3\x5c\x1a\xc4\xfb\x29\xcc\x6d\xf2\xc3\x35\x8a\xf8\x97\x90\xec\xd6\x60\xf9\x1b\xc7\xbe\x40\x2f\xe4\xf4\x99\x56\x89\x19\x0b\xe8\xed\x2c\x34\x4e\x25\x1e\x51\xb1\x99\x07\xc1\x7c\xb3\xfb\x84\x6d\x28\xff\x27\xb1\xec\x34\x80\x85\x5e\x29\x38\x0b\xb1\xb9\x16\xd7\xa2\x1a\x1e\xf6\x1e\x20\xdb\xeb\xb4\x8d\x4d\x9f\x97\x5d\xfe\x91\x1d\xc3\xc0\x1c\x7a\xc3\xf6\x7d\xb9\x7f\x68\x9a\x11\xa9\xe8\x82\x91\x55\x45\x86\x00\xdd\x07\x3f\x15\xbc\x64\x23\x52\xb3\x82\x42\xae\x52\xeb\x79\x8e\x9a\x1a\xf0\xfc\xef\x69\xb5\xc2\x01\xd3\x05\x7b\x5b\xa5\xdd\x13\x78\xca\xf0\xbe\x60\xea\x1a\xae\xd3\x97\x65\xce\xee\x86\x1d\x21\x12\xf1\x3e\xf0\xf8\x21\x8c\x1d\xc3\x9e\xdc\x63\x25\x72\xb1\x29\x7f\xdb\xb5\x78\xae\x7b\xf8\xad\x57\xe3\xf1\x6e\x9d\x7e\x8f\xd5\xd0\x13\xd7\x74\xd1\x31\xf5\xfb\xcd\xfb\x15\x2f\xff\x36\x34\x70\x9f\xc9\xc1\x56\x7f\xb1\xe9\xfd\x8d\xb6\xb5\x31\x41\x34\x48\x34\x5d\xee\x25\xcb\x44\x99\x87\xbf\xd0\x32\xff\xac\xbb\x71\xc3\x2b\x76\x26\x4a\x05\x19\x9a\x76\x5d\x4b\x6d\xbe\x8b\x1c\x26\xe7\x84\x10\xab\x34\xbb\xb1\xd9\x62\xde\x25\x3c\x49\xc6\x69\x07\x91\xf7\xd3\xb9\xa8\xcf\x69\x76\xe3\xe3\xed\x71\x82\xf6\x8d\x47\x9f\x1e\x48\x68\x7a\x62\xb3\x24\x47\x2c\xb1\x7d\xcb\x4c\xa1\x80\xdb\x70\x8f\x10\x0a\x06\xf8\xa0\x1d\x8e\x4d\x73\xf1\xe3\x0b\x76\x1c\xfd\x60\xd8\xee\x03\x69\x33\x8e\xd7\x0f\x5d\x0a\x13\x0a\xcc\xc4\xfa\x70\xc4\x0c\x69\x7b\x1d\xbe\x58\x85\x79\x09\x6d\x06\xd8\x3d\x06\x42\xa6\x3a\x76\x0d\xa6\x70\x5a\x14\x61\x2a\xb2\x5e\x79\xca\xfc\xdc\x13\xfb\xd6\x37\x3c\xcf\xe1\xa6\x77\xb4\xda\xdc\xf8\xfe\xf1\x78\xad\x96\x5b\x78\xe9\x2d\x5f\x9c\x08\x7d\x3d\xdc\xb4\xb5\x4a\x34\x27\xe6\xea\xd2\xfe\x18\xde\x34\x62\xae\x12\xbb\x03\x19\xd6\x58\x3d\x17\xf5\x92\x50\xa2\x2b\xa7\x7d\xd0\xc1\xdb\x5d\x62\xa2\x8b\x9c\x70\x08\x44\xbb\x51\xaa\x3a\x3a\x38\xd8\x6c\x36\xd3\xb5\x7a\x72\x78\x38\x2d\x99\x3a\xc8\x45\x26\x0f\xd6\xea\x9b\x27\x87\x93\x7a\x79\xf0\xfc\xfc\xec\xea\xfa\xf2\x7f\x5c\x7f\x33\xf9\xfd\x9e\x7b\xca\x0e\xbb\x4d\x0e\x07\x07\x04\xbf\xf8\x1b\x12\x51\x0f\xcc\x18\x79\xdd\x18\xe5\x3d\x73\x38\xfe\x08\xf9\x46\x37\xa1\xec\x20\xca\x70\x29\x66\x2b\x65\x13\x5c\xc0\xee\xa2\xfa\x00\x7c\xb5\x40\xea\x6f\xf5\x17\x42\xaf\x03\x10\x29\x2a\x80\x6c\x0e\xc8\xf0\xb3\x1d\xc4\x9f\x21\xd2\x03\x72\xbe\x43\xa7\x32\x80\x6a\x30\xd0\xda\xf1\xa8\xc6\x98\x04\x5b\xdd\x40\x20\x2d\x57\xa0\xcb\x29\x07\xca\xe4\xf4\x64\x6c\xe9\xb4\x39\xe8\x2d\xc0\x72\x42\xcb\xed\xe6\x86\xd5\xac\x23\x65\x7e\x4f\xb0\xe9\xfe\x64\xde\xac\xeb\x73\x55\x42\xc2\x38\xb2\xa4\x25\x32\x35\xec\x4e\xcb\x22\x5c\x81\x93\xc2\xd6\xa4\x20\x87\xf0\x25\xd4\x25\xc5\x53\x9f\xf6\x64\xdb\x5b\x2b\xab\xb7\x59\x76\xee\xf3\xd8\x6c\x34\x93\xa9\xad\x36\xeb\x1a\xed\xb7\x3b\xba\x16\x8f\x4a\xd5\xcd\x90\x90\xd7\x62\xcd\xc2\x1e\xe7\x26\xe9\x9b\x39\x5e\xa0\x22\xb2\x29\xb6\x01\x8b\xcd\x7c\xd0\xc2\xbd\x51\x2d\x82\xb2\x69\x4e\x4a\x41\x96\xa2\x66\x41\x22\x6f\x5a\xb3\x1e\x46\x71\xd3\xa3\xb9\x2a\xd3\x1c\x80\x73\x9e\xd8\xe9\xa4\x05\x85\x60\x59\x23\x45\xea\xe1\x31\x40\xc7\x27\xf5\xa9\xc7\x84\x3f\x7e\xdc\x52\xf6\x46\x1a\x54\xeb\x32\xd1\x78\xe7\x42\x84\x8f\xd5\xb2\x6c\x57\x74\x2f\x5e\x88\xb6\xea\xf4\xa9\x07\x07\x86\xc6\xdc\x7e\x66\xce\x35\x22\xf2\x88\xd0\x34\xf0\xa7\x6b\xbd\xf2\x67\x7f\xba\x9e\x9a\xf5\x08\xdd\x2c\x7a\x78\x3b\x1c\xb7\x08\x22\x1c\x74\x3f\x6f\x93\x6e\x47\x0a\xdf\xcb\x0e\xba\xd2\xec\x4d\x48\x58\xd6\xed\x27\x49\x5c\x73\x5e\x27\xa8\xab\x55\xa5\x2f\x85\xd9\xbe\x7f\x3b\x12\xbb\x9f\xae\x7e\xb7\xa6\xfe\xcb\xd2\x59\xb2\x8d\x26\x93\x0f\xd1\x80\x76\x55\x09\x55\x41\x9a\x4a\x1c\x53\x53\x21\xcc\x4b\xc5\x16\xde\x28\x45\xfe\x93\xd5\xc2\x38\xd3\xfa\x0a\x7b\xfc\x03\xdb\x9b\x11\xce\xff\x8b\x2f\xaf\xf3\x6c\x1a\x35\x96\xeb\xfe\x5b\xe2\x47\x62\x54\x54\x20\x57\x80\xfb\x56\xe0\x7c\xb5\x7b\x4b\x5a\x6d\x1c\xc6\xf5\x93\x3e\x53\xcd\x2d\xda\xe3\x5d\xfb\xbd\x20\x6c\x3e\x67\x99\x32\xf1\xc6\x35\x43\x00\xcd\xfb\xb4\xb3\xcf\x19\xcb\x6c\xe3\xa9\xea\xf2\xae\xfd\x9c\xb3\xd5\xb1\xef\x5c\x4b\x7a\x17\xf3\x61\xc3\xc3\x8d\xeb\xbd\x9d\x3c\x19\x3d\x68\xec\x6a\xc7\x5e\x8d\xd3\x22\x20\x44\xeb\xda\x8b\xa5\xcf\xcc\x03\xde\xbf\x43\x44\x68\x51\x6c\x28\xd2\x35\x0c\x8a\x5d\x0e\x69\x64\x55\x45\x7c\xae\x1b\xe2\x58\xbf\xf5\x98\x67\x1e\x34\xd1\x34\x79\x60\xaf\x0d\xd0\x89\xc4\x03\x0e\x9b\xce\xd6\xac\xde\x5a\x0b\x2f\xf9\x57\x37\x56\xb0\xb3\x8e\x88\x75\x46\xb4\xcd\xeb\x66\x9c\xae\x5b\x56\x2c\xc3\x4c\xc2\xb6\x98\xa8\xc9\xa1\xb9\xa0\x4d\x8b\x5c\x92\xaa\x16\x6b\x9e\xb3\x1c\xed\x6d\xc0\xdb\xe8\xb7\x0c\xac\x68\xf3\x95\x5a\xd5\xcc\x98\xb0\xac\x3f\xb1\x6e\x7c\x49\x56\x55\x34\xee\xc4\xd3\xc8\xee\xb8\x44\x1f\x70\xf7\x06\xc0\x63\x31\x06\x2c\x8e\xe6\xbe\x3c\x30\x39\x8d\xd5\x0d\x55\x9d\x57\x98\xa8\xd4\x07\x98\xab\xcf\x47\xeb\x56\xf6\x17\x7f\xaf\xb9\xdf\xec\xc4\x57\x92\xcd\x57\x85\xcd\x4b\xab\xbb\x99\xf3\xa2\x00\x03\xde\x4a\x11\xc8\x22\x17\x8d\xb3\x23\xf5\xb2\x5e\x85\xbd\x8a\xcd\x96\x40\x19\x52\x9c\x9b\x80\x3f\x70\x38\x9f\x93\x60\x6e\x1f\x3f\x22\xed\xe9\xaf\x9b\xe0\x68\xc1\xa6\x1f\x1b\x29\x06\xe0\x4e\xb0\xbc\x26\x3b\x41\x68\x8b\xee\x34\x07\x62\x5b\xc7\xff\x4e\xc8\x13\x32\x21\xc3\xa1\xfb\x6b\x44\xfe\x95\x6c\x46\xe4\x31\x01\xbe\x23\xba\xc8\xa1\x4c\xc0\x8e\x35\x59\x0f\xfd\xe9\xf1\x09\x69\xb8\x9a\xba\xc7\x62\xc8\x1b\x7a\xf1\xf6\x21\x42\xaf\xd3\x08\x9f\xc0\x24\xab\xd7\xe2\xa3\x35\x72\x8a\x79\x10\x22\xe4\xa1\x5d\x6c\x3a\xe1\xa6\x51\x14\x19\x0d\xd4\xf7\xb0\x9c\xac\x4a\xc5\x0b\xcf\x1e\x67\xb4\x68\xa1\x8c\x39\x37\x51\x55\x93\xab\x64\xaf\x98\xeb\xd8\x8e\x0d\xa4\x28\x29\x2d\xf0\xd0\x5e\x38\x03\x5b\x2f\xc2\x1e\x0b\x71\x81\xd6\xca\x97\x82\x4f\x9f\xe1\x12\x76\x4d\x6f\x91\x19\x0d\xf8\x81\xe7\x2f\x7f\x70\xd0\x37\x54\xc6\xf4\x6c\xd2\x25\x36\xd7\xe2\x4f\xd7\xaf\x5f\x3d\xe7\x6b\x13\xc8\xfe\x89\xe4\x7c\x8d\x01\xdd\x7c\x6d\xb3\xcd\xef\x68\x69\xc7\x32\xe4\x2c\x13\x75\x23\xbe\x28\xe7\xeb\x30\x9c\x9e\xaf\xb5\x70\x9d\xf3\x75\x3a\x60\xdb\xb6\x00\xd5\xf6\x63\x71\x61\xde\xc3\x96\xfe\xa3\x95\x57\x71\xd4\xa3\x2d\x88\x86\xdb\xd5\x14\x06\x9a\xf7\x68\xc9\xb9\x7f\x87\x3c\x4a\x47\xa3\x2e\x73\x62\x77\xc3\x01\x0a\x6c\xab\x25\x07\x2c\xbb\xb7\x3a\x58\x80\x3b\xeb\x23\x8a\x6c\xa8\x2a\x02\xc7\xc9\xb9\xc8\x56\xce\x1c\x08\x7f\x04\xca\xc0\x48\x23\xe5\x22\xc2\x5b\x5d\x04\x41\xfa\x71\x40\x72\x1c\xa2\x1d\xb4\xd5\x42\x6d\x6e\xb5\xd9\xc6\x82\x1e\x45\xda\xbe\x4e\xb8\xe4\xae\x1d\xd9\x09\xcf\x1c\x2d\x8b\xc5\x83\xe8\x50\x81\x7b\x14\x92\x44\x1d\x00\x26\x99\x8a\x32\x13\xa5\x5e\xef\x25\x2b\x57\xcd\x14\xfa\xc6\x8b\x1b\x59\x0f\xe2\xb1\x83\x44\x09\x51\x6d\xb6\x57\xf3\xe7\x87\x68\x3b\x9c\x3d\x98\xb1\xf2\x7b\x4c\x5a\x9d\x1a\xe2\x95\x2b\x80\xea\x19\x5f\x61\x4a\xf3\xfc\x7c\xcd\x4a\xf5\xca\xa4\xa7\x35\xf1\x71\xb9\xd8\x94\x83\xb1\x1d\x43\xcf\x4a\xab\xea\xde\x55\xf4\xc2\x37\x2a\xb5\x26\x20\xca\x60\x73\xf5\x8b\x8a\x85\x61\xa1\x76\xf5\x60\x76\x7e\x00\x54\x6c\x61\x1e\x44\xf9\x42\xff\x89\x21\x3c\xc1\x62\x8e\xe1\xd9\x42\x9a\x3a\x38\x20\xd8\x08\x5c\xb3\x6e\x3d\xd0\xd7\x47\x5a\xe7\xa0\x60\xd5\x29\xa0\xb1\xbc\x78\x61\x70\x35\xb2\x95\xc4\x56\x4c\x05\xc4\x21\x9b\xad\x66\x88\x98\xd2\x7f\xf9\x5b\x88\xbc\xfa\x1d\x46\x15\xe1\xb0\xf7\x6c\xda\xda\xfc\x3e\x8b\x36\x2b\x56\xf5\xfe\x35\x03\xa2\x1d\x79\xf7\x1e\x69\x42\x30\x1b\x87\x20\x03\x54\x33\xf3\xfa\x0c\x07\x18\x74\x89\x14\x02\x7e\xda\xfa\x68\x18\x0b\x8d\x73\xd6\x1e\x0e\x8c\x74\x32\x29\x45\xce\xde\xc1\xaa\x9e\x7c\x05\x1d\x7e\xf5\x9e\xfc\x35\x88\xfc\x1d\x10\x32\x13\x77\x13\xf4\x6b\x3f\x22\x08\xb6\x3a\x99\x89\xbb\xe3\x46\xa1\x46\x3e\xdf\x23\xa2\x6a\x5a\xca\x8a\x82\xe0\xf5\x90\x2f\x2b\x51\x2b\x5a\xaa\x66\x35\x6c\xcf\xf8\x53\x3e\xad\x5a\xcd\xe2\x77\x98\xc9\x11\x91\xa2\xe0\x79\x54\xe2\x53\xf8\xc7\x74\x93\xc1\x7c\x9a\x13\x30\xaf\xed\x11\xe1\x65\xc1\x4b\x36\x99\x15\x22\xbb\x6d\x74\xa4\x57\x69\x42\x0b\xbe\x28\x8f\x48\xc6\x34\x67\xd1\x28\x60\x86\x98\xd1\x22\x1b\x86\xa1\xa3\x31\xe0\xc9\x88\x7c\x4d\x9e\x8e\x1a\x55\xa1\x53\xeb\xba\x95\xac\x6b\x43\x12\x3a\xa7\x76\x54\x0b\xa1\x9a\xf3\x4a\x0f\x01\xbd\xc3\x5a\x07\xbd\x13\x76\xe5\x78\x4f\xa3\xa1\xcf\xd9\x9e\x56\x43\xa4\x95\xae\x66\x91\xec\xc4\x7c\x2e\x99\xd2\xa4\x72\x44\x0e\x7b\x15\xad\xc5\xa6\xbb\x28\xa6\xb2\x8d\xa2\xac\x8f\xc8\xe1\xf4\xdf\x64\x47\xf9\x56\x9c\xf0\x11\x10\x40\x9f\xd2\x26\x3a\xf8\xc8\x4a\x0e\x7d\xea\x18\xf2\xdd\x1d\xa9\xdc\xbd\xf9\xff\xbf\x5b\xb6\x9d\xd7\x74\xc9\xa4\xb1\x7a\x34\xe8\x00\xa4\xd7\xbf\x12\x51\xd1\x8c\xab\xed\x11\x79\x32\x3d\x3c\x26\x9f\x1a\xf4\x2d\xc2\x12\x87\xad\x12\xf1\x41\xf2\xeb\xd9\xec\x8b\x96\x7c\x89\x69\xc8\x4b\xba\x64\x47\x38\xa0\xe3\xae\x32\x7e\x33\xc2\xb9\x27\x76\xab\x79\x64\x7c\x13\x5c\x31\x2c\x32\xc9\xc4\xaa\x54\xfa\x10\xcf\x79\xc9\x15\xeb\xac\xa1\xf8\x92\x97\x8b\x89\xbd\xdf\x8f\x08\xa3\x92\x4d\x38\xa4\xce\xe8\x1e\x29\xaf\x99\x29\xee\x4c\x2b\x8d\x1d\xf1\x0f\xa8\xbf\x7c\x6f\x18\xcd\x8d\x87\xd3\xd9\x0d\x2f\xf2\x21\x6c\x75\x68\xb7\xf4\x78\xd5\x7b\xaf\xee\x9c\xaf\x83\x4e\x42\xa4\x6b\x9e\x93\x13\x32\x80\xd5\x3b\x72\xd9\x14\x4c\x84\x61\xb2\x02\x80\x75\x7e\x4f\xc1\x63\x69\x10\x5c\xf5\xe9\xd2\xf8\x50\x64\xc8\xd5\x06\x8f\x84\xe5\xa6\x8f\x08\x9d\x49\x51\xac\x1a\x4b\x52\xb0\xb9\xea\x75\x23\x46\x5f\x9b\x17\xc0\x28\xde\x7b\x25\xaa\x5d\x6d\x9a\x9b\x72\x67\xa3\xb5\xd8\x34\x1a\x75\x2f\x40\xfb\xea\x37\x77\xe6\x8e\x09\x44\xc5\xef\x7d\x8d\x4f\x36\x6c\x76\xcb\xd5\x04\x9e\x43\xb3\x9a\xe6\x1c\x8e\x5b\xaf\x26\x79\x72\x78\xb8\x94\xf0\x60\xd0\xf8\x01\x9a\x2c\xc5\x2f\x9f\xd5\x46\xca\xd2\x8d\x88\xb1\x5d\x76\x6e\xcc\x5e\x18\x4b\x00\xf7\xb5\x90\x77\x46\x72\x76\x30\xf1\xe1\x11\x6a\x92\xa7\x37\x14\xdf\xb0\xd2\xe6\xa4\x6c\x60\x8e\x0f\x08\x97\x44\xcc\xe7\x64\xc3\x48\xcd\x7c\xa8\xf4\x0d\x97\x84\xe1\xf9\x22\x78\xc4\x8b\x2d\x36\x86\x2e\xf3\x2d\xdc\x0c\xc8\x7f\x4b\x28\x81\x24\x73\x53\x82\x8a\xba\x25\xbd\x65\x92\x9c\xdd\xd4\x62\xa9\xf9\x51\x29\x32\x8e\x3e\xaf\x07\x07\x44\xae\x66\xa8\x46\x31\x08\x40\x9a\xe9\xb6\xbc\xa9\xc1\x51\xb6\x5e\x35\xc8\x78\xb0\x7a\x4a\xc8\x15\x2f\x33\x86\x20\x8f\xd0\x48\xf4\x5d\xcf\x85\x92\x8a\xb1\x9a\x0c\xc1\x12\x4a\x32\xbd\x30\xa3\xd8\x7f\x51\x33\x54\x63\x3f\x01\xdd\x6f\x83\x31\x46\xdd\xa2\x71\xf1\x0f\xab\x81\x52\x12\xfe\x9a\x42\x15\xac\xf7\x52\x0d\x74\xbf\x37\x34\xbb\x45\x53\x2c\xd7\x3f\x80\xfe\xbc\x60\xb4\x64\x52\x91\x0d\xdd\x92\x97\x24\x13\xab\x22\x27\x73\x0e\x0e\x8b\x21\x4f\xf0\x0c\xc7\xff\x39\xb7\x5d\xbb\x81\xe8\xd2\xc3\xe7\x32\xaf\xe9\x62\x12\xaf\xd5\x60\x57\x0b\x9f\x79\xaf\xc1\x15\x34\xf9\xfd\xef\x1b\x4c\xcc\xfe\x4b\xe4\xc9\x61\xa3\x8a\xbd\x2d\xf0\x43\xea\x01\x49\x53\x7f\x7b\x2e\x1d\x88\x7c\x9d\xe2\x1b\x21\xef\x22\x69\x27\x10\x22\x23\xe1\x70\x00\x84\xae\xff\x91\xcf\x0a\xf3\x6f\x3d\xfc\x84\x27\x15\xd0\x55\x80\x62\xdb\xb5\xea\x2d\xb1\x07\x2a\xc6\x72\xa8\x6f\x20\x7c\x87\xee\x57\xd3\x2f\x62\xcf\x7a\x1d\xae\x57\x3b\x47\xb0\x5b\x64\x6c\x0b\x8d\x4d\xad\x8e\xf5\xfc\xea\xf0\xfa\x62\xea\x92\xad\x59\x2d\xd9\x0f\x3c\x67\x62\x88\x22\x5f\x7a\xab\xa1\xe5\x4e\x3f\x40\xd4\x79\x5e\xb2\xbc\xa6\x9b\x6e\x20\x97\x3f\x5d\xbf\x7e\xe5\x1c\x52\xc0\x6c\x00\x19\xeb\x28\x2f\x1b\x0a\xca\xe7\x17\xaf\x89\xe6\x17\xda\x18\x2f\xa0\xed\x34\x2d\xec\x0f\xb1\xb7\x25\x77\xc7\xd7\xbb\x9d\x8c\xfd\xd9\x40\x5b\xd6\x84\x33\xd9\xe9\x69\x81\xea\xb5\x7d\xbe\xd1\x6e\x25\x77\x2c\x92\xb9\xa6\x0c\x4c\x37\xea\x86\x6b\xb1\x21\x60\xa3\x8b\xac\x38\x70\x59\x23\x4e\xbe\xb7\x23\x5d\x8a\xcd\x1b\xb4\x11\xd5\xa8\x05\x9f\xd3\x8c\xc1\x73\xc2\x8c\xcf\xa9\x1e\x0a\x59\x49\x0c\xe4\xe2\x70\x25\xcf\x99\xca\x6e\x30\x64\x40\x94\x24\x67\x08\x44\x0e\x4b\xb0\x45\x57\x00\xa8\x09\xfe\x5f\x4a\x90\x35\x67\x0e\x03\xe5\xfa\xe2\xf9\xc5\xb0\x5e\xf0\x32\xa7\xa3\x23\x72\x26\x4a\x09\x5d\x4b\xba\xe6\xe5\x22\x74\xea\x84\xd6\xa9\x24\x43\x98\xa5\x14\xab\x3a\x63\x63\x44\xce\xc9\x50\x49\x30\x02\xa7\x65\xca\x51\x85\x9f\x89\x52\xb2\x7a\xcd\xc8\x92\x2d\x45\xdd\xd2\x7d\x3b\x2b\x13\xac\x0b\x4c\x0f\x72\xbb\xa3\x4d\xc9\x2d\xd8\x98\x18\xb0\xb4\xbc\xe9\x4f\x6b\xed\x4b\x68\x5d\xe9\x74\xd0\x27\xe4\xa2\x9c\x18\x18\x69\x98\x02\x38\x27\xd1\x62\x43\xb7\xd2\x80\xd0\xfb\xb6\x20\x12\x44\x2a\xdd\x35\xcf\x98\x9c\xb6\xe8\xd7\xa9\xea\xf5\x78\x07\x77\x9a\x61\x1c\x38\x36\xc1\x1c\x08\x30\x3c\x9a\x1c\x3d\xb5\x7e\xe0\xc1\xf1\xae\x46\xd8\x99\xdd\x44\x7f\x29\x36\x46\x5f\xe8\x28\x11\x56\xc1\x87\x80\xe1\x6a\x7d\xbb\x33\x8c\x24\x30\xf7\x26\xcb\xbd\x83\x46\xde\x7b\xf5\x10\xac\x0e\x78\x0b\x93\x13\xb3\x1f\x3b\x23\x9f\x8e\x3b\x90\x96\xf4\xfa\x9e\xd6\x35\xdd\xbe\x0b\x9a\x7c\xdf\x75\x5a\x42\xd2\x89\x4f\x0b\xe0\xf8\x04\xe1\x73\xbf\xd9\x89\x89\x86\xe0\x4f\x8e\x33\x48\xae\xa4\x66\xe9\x30\xa2\xce\x10\x75\xb5\x45\xcf\x45\xdd\x94\x4f\xad\x63\x5d\xbc\x6d\x62\xf4\x4e\x6a\x47\x6a\xed\xa2\x76\x60\xaf\xa0\x84\x9e\x9d\xa7\x7d\x4b\x9f\x4d\x97\xf2\xcf\xa1\x7d\xdb\x56\xe3\x08\xa4\x69\xbf\x39\x7c\x56\xe6\x3b\x07\xaf\xbf\x8b\xf2\x57\x0f\x3c\x05\xca\x42\x4e\x89\xe4\xe5\xa2\x60\x36\x7d\x41\x70\xdc\x1c\x39\x21\x30\xb6\x69\xd7\xd2\x91\x1b\x84\x26\x27\x42\x5e\xf1\x92\x99\x6b\x60\xc6\x48\xc9\x36\xe8\xb2\xcf\x0a\xbe\xe4\x8a\xe5\x63\x64\xbe\x4b\x41\x54\x4d\x39\x98\xad\x4d\x99\x5e\xe7\xd7\x70\x8c\x51\xe6\x23\xcd\x6e\xb3\x32\xf7\x56\x68\x8c\xd3\x7b\xf7\x7e\x97\x19\x98\x95\x79\xe4\x83\x87\x80\x94\xde\x98\xe0\xaf\x0b\x63\xfc\x25\xba\x59\xcc\x39\xa0\xcb\x85\xea\xdb\xc0\x3d\xdd\x34\x0d\xc6\xe9\x47\x8f\xc8\x43\x28\xba\x60\xde\x03\x74\x38\x00\xad\xa3\xf5\x5d\xf3\xf9\x00\x5c\xeb\x83\x9f\x0c\xaa\x2b\x98\x9b\xcd\x36\xe9\xaf\x7f\x11\xbc\x1c\x0e\xd2\xe8\x77\xbb\x4f\xbc\xc7\xe4\xfa\x6f\x72\xce\x77\xbf\x6a\x18\x9d\xab\xd7\xe5\x1f\xe0\x8c\x27\xce\x59\xcf\x03\x86\xeb\x72\x8f\xc7\xad\x79\x36\x82\xc7\x6d\x17\x79\x43\xa9\xe0\xd1\x69\x92\x77\x27\xbd\x09\x45\x8b\x46\x38\xb6\x8d\xfe\xa6\x79\x5e\x33\x89\xb8\x9e\x66\xf9\x34\x49\xe0\x57\xd8\xf4\xe6\x52\xb7\xf0\xe4\x7e\x23\x92\xcd\xc4\xb2\x5a\x29\x23\x79\x1b\x64\xd6\x70\xef\xeb\x16\x67\xed\xa8\xae\x1d\x7d\x8e\x13\xea\x8f\xa5\x1d\x84\xf9\xf5\x81\xe7\x6b\xc5\xe6\x3c\xee\xe0\x08\x1c\xe7\xd0\xce\xaa\xe3\x24\x06\xb8\x12\x4a\xb6\x31\xac\xa6\x66\x61\x41\xbc\x45\x17\x28\x1f\xec\xd8\x84\x4f\x6a\xee\x03\x78\x0a\x97\xc5\xd6\x45\xf8\x6f\x28\xe0\x0f\xd0\x3c\x37\x29\x7c\x6c\x97\xe6\x12\xd2\xe4\x4b\xc8\xf7\x42\x71\x50\xad\x50\x88\xbe\x43\x2f\x96\x0d\x1e\x5a\x69\x86\xe2\x81\x12\x4d\x98\x8f\x19\x4a\xc1\xa5\xb2\x4b\x8e\x21\x51\xd6\x45\x4b\x37\xa5\xb9\x40\x0e\x9e\x5d\xb8\x39\xfa\x44\x0d\xed\x23\x65\xe2\xb4\x48\x65\xb2\x17\x80\xb2\xc6\x79\xf4\x86\x2c\x90\xc9\xd3\xa5\x6e\x78\x79\xeb\x33\x76\xe1\x8c\x66\x05\x2d\x81\x47\x27\x52\x2c\xd9\x06\x5d\x1a\x0d\x58\x38\xe2\x54\x63\x7f\x21\xca\xc2\x98\x14\x42\xdc\xa2\x48\xa0\x85\x7a\x0c\x4c\x1a\x45\xcb\x69\x28\xda\x39\x9c\x55\x74\x0b\x17\x65\x69\xaf\xc3\xb5\xb1\xf1\x5f\x8b\xea\x00\xe3\x45\xc7\xfa\x9d\xce\x18\x8c\x50\xde\x88\x55\x01\x57\xdb\x4c\xdf\xb2\x7a\xe2\xb6\xa7\xe1\x48\x0f\x30\xa3\x12\x80\x2c\xf4\x78\x41\x5a\xd9\x80\x8a\x68\xa9\xfb\xa8\xfd\x48\x9c\x96\xcd\x3e\xdb\x56\x11\xc3\x72\x42\xad\x43\x34\x39\xb4\xdb\x81\x6e\xd2\x98\x95\x98\xe5\xc4\x3e\xde\x69\xf0\x98\x34\x6c\x03\x9c\x44\x20\xd0\x7d\x3e\x68\x41\x98\x72\xec\xb3\xeb\xb0\x1b\x3c\x08\xc2\x65\xdb\x33\xbd\x7d\x44\x8c\xa3\x01\xa8\xa4\xbb\x42\xc0\xdd\x71\x73\xed\xb6\x78\x09\xe3\xdd\x0f\xe3\x68\x71\x12\xb5\x1f\x48\xa7\x9e\x0d\xc5\x1b\xc3\x3b\xe8\x33\xd2\xd2\x36\x35\xab\xea\xfb\x1d\xae\xec\xc1\x60\x14\xd4\x73\x34\x7e\x62\x67\xf5\x98\xf0\x18\x84\x00\xa1\x0e\x56\xf2\xe6\x52\x6c\x86\xb5\xd8\x8c\x22\x20\x6e\x76\xa7\x6a\x8b\x4f\xb1\x73\xf1\x3a\x63\x75\x1d\x04\xb9\x6b\x29\x08\xd0\xdb\x0b\x9d\xe0\x6a\x99\x49\x61\x97\x9e\x04\x7a\xa2\x26\x90\xd0\x9f\x3a\x8a\xcc\x93\x57\x46\x40\x3f\x2f\xf3\x18\x41\xc7\xfa\xa4\xc1\xf7\xe7\x62\x63\xa3\xfb\x3e\x3d\x88\x60\x2c\x35\x61\xfd\x61\xcf\xe2\x8c\x02\x3c\x85\x1e\x84\x88\xa0\x18\x81\xc2\xe9\xd4\xa8\x3c\x1b\xd8\x9a\xae\x41\x44\x5f\x88\x9e\xe2\x42\x64\xfa\x8a\xf7\xb0\x10\x18\x0d\xed\x19\x9a\xc4\x33\xac\x6f\xea\x12\x92\x3a\x35\x2f\x76\x9b\x71\xa7\x66\xd9\x36\x2b\x4c\xb3\x39\x66\x1f\xfe\xe1\xda\x3c\x90\x52\xaf\xaf\x90\x8c\x6c\x6e\x78\x76\x03\xda\x8f\xbc\xb6\x19\xd8\x66\x5b\x5d\xd0\xe4\xa2\x92\x51\xfa\x42\xfd\xcd\xf1\x82\x4b\x5a\xf2\x6a\xa5\x19\x31\xc3\xfc\xf8\xc7\x77\xe4\x9c\x22\xf1\x61\xd5\x37\xd8\xd8\x44\x1b\xe9\x3b\xb8\x00\xf1\x22\x56\xb8\xf8\x16\x48\x0d\xe1\x4e\x30\xac\x25\xcd\xad\x78\x02\x8f\x0d\xbc\x81\x9b\x40\x59\x23\xe6\x73\x64\x16\x24\x73\x3c\x1c\xaf\x5b\x4f\x06\x67\x7a\x14\x35\x9b\xaf\x8a\x62\x8b\xef\x0d\xde\x65\x2c\x27\x52\x10\x8a\x37\x37\xaa\x64\xe6\x56\xa7\xef\xd9\x8f\xae\x9b\x51\xef\xd7\x4b\xc7\xc6\x22\x1b\xea\x94\x58\xf7\xba\x47\xf5\x95\x9f\xac\xa4\x84\xef\x20\x67\x52\xf1\x92\x9a\x4c\xb5\xa6\x9b\x1d\xd7\xae\x7b\xb1\xc2\x4b\xd7\x8d\x79\x8c\x03\x1a\xdb\x2e\x9a\xb2\x57\x4c\xf9\xcc\x3d\x4a\xcd\x06\xda\xe1\x3e\xf8\xaa\x40\x61\xd3\x76\x00\x8a\xe2\x5c\x8c\x41\xe0\xb3\x97\x8e\x5f\xc9\x6f\xe3\xf1\x78\x8f\x61\x57\x04\x6f\x09\x06\x50\x0d\x76\x79\x1e\x9b\x4b\xbc\x89\x8a\x65\x2b\x9b\x72\x61\x55\xdf\x65\x58\xf9\xc1\x83\x64\x2c\x72\x20\xa2\xee\x54\x12\xbf\xec\x0a\x20\xbe\x34\xcd\xa5\x39\x1a\x7b\xd6\x77\x6a\x77\x2c\x85\x69\xde\x89\x01\x23\x0e\x22\x0a\x1c\x94\x96\x48\x64\x42\xcf\x81\xac\x23\xa9\x08\xa8\xec\x32\x60\xf3\xdb\x5c\x7c\x46\x4b\x84\x82\x0a\x8e\x49\x68\x57\x43\x85\xa9\xe1\xdc\xc2\xeb\x69\xa8\x19\x9a\x8c\x96\x03\x45\x72\x06\xce\xd0\x9a\x2f\xb5\x60\x2a\xe6\x0f\xa6\xb2\xd1\x38\x60\x7d\xe0\xdc\xea\x96\x4a\xe1\xc1\xb1\xec\x6a\x35\xb4\xab\x5d\x07\xd1\xeb\x8c\xf6\x1d\x42\xab\x9e\x31\x0b\xd8\x28\x85\x47\x09\xbd\x0e\x8d\x77\x3f\xde\xb8\xd7\x37\xe1\xe5\x6b\x87\xb7\x37\x04\x3c\x20\xa1\xb4\xc2\x63\x1c\x74\x12\xb8\xe0\xdb\x34\x7b\xc1\x08\x3e\x7e\x8c\x0e\x99\xf7\xb6\xec\xc1\x04\xdd\x47\x89\x62\x02\xf7\xbd\xa2\x92\xbf\xef\xe6\x4e\x22\x7c\xe6\x37\x35\x07\x66\xdb\xe7\xce\xec\x14\x41\x6a\x26\x2b\x96\x79\xc4\x64\x70\x64\xc3\x6b\x03\xc8\x7b\x53\xd3\x8a\x62\x06\xd5\x25\x58\x4a\x20\x16\x04\xf5\xd2\x39\xa2\x5d\xc2\x23\x02\x0f\x43\xa7\xd4\x63\x09\x0f\xe2\x2a\xe6\x73\x07\x55\xd3\x78\x70\x02\xd2\xb7\x01\x83\x61\x1e\x18\x7f\xf8\x60\x5a\x5c\x92\xaf\x4b\xa1\xbe\xd6\x6f\xb4\xcd\xf1\x6f\x5c\xfe\x33\x33\xd4\xb7\xe6\x01\xf1\x4e\xf4\x23\x2b\x25\x70\xf3\x96\x51\x35\x30\xe0\x74\x5b\xb1\x1a\xd4\x0c\x6d\xe3\x31\x79\x47\x81\x00\xc1\x08\x94\x20\x95\x5e\xea\x3d\xd4\x07\x65\x92\x4e\xfe\xee\x0a\xbe\xb0\xb4\x73\x18\x5c\xcd\xb5\x85\x3f\x2e\xf8\x6c\xba\xc9\xa6\xf6\x17\x13\x09\xf0\xc0\xa1\x88\x85\x4d\x7c\xeb\x2a\xb6\x22\xe9\x5c\xe0\x78\xb0\xa9\x8f\x1e\xf5\x0a\x10\x6d\x86\x33\xda\xd2\x62\xb9\xe4\xea\x15\x2f\x99\x05\xf2\x1e\xc6\x10\x11\x25\xdb\xe8\xaf\x1e\x88\xd0\xf1\xb0\x99\x11\xdb\xdd\x34\x27\xe1\x4a\x1c\xbb\x72\x39\xcf\x2f\x5a\x70\xdf\xf6\xa3\x5c\xcd\xa4\xaa\x9b\xd1\x7f\x3b\x43\xd3\xec\x1b\xd3\xe0\x40\x03\xc8\x43\x37\xd5\xb8\x6b\x8b\x84\x0e\x7c\xa9\x19\x7c\xb2\x81\x26\x18\x5d\x47\x84\x1c\x69\xc0\x4a\x05\x9d\x3d\x7a\x44\x1e\x76\xed\x98\x1f\xde\xc1\x81\x96\xb2\x95\x27\x47\xbb\x59\x2c\x37\x72\x7e\x09\x99\x9a\xc2\x33\x8c\xfe\x23\xc0\x02\x1a\xe5\x91\x6d\x0a\x42\xc1\x81\x52\x59\x90\x79\xc7\xbe\x0c\x33\xe6\xe3\xc5\x45\xd8\xe9\xd4\xb7\x70\x7d\xf1\xfc\xe2\x28\xc8\x09\xaa\xef\x07\x25\x88\x58\xd5\xfa\x75\x9d\x15\x6c\x69\x7c\x45\xc0\x4b\x7e\xb6\x55\x8c\xbc\xbd\x7e\x31\x79\xf2\xbf\xe3\x28\x1e\x34\x94\xc1\xc6\x06\xa4\x0f\x7f\x6b\xc2\x1f\x87\x64\x62\x18\x1f\x8c\x57\x0a\xf3\xf8\x24\xab\x39\x42\x7b\x32\x6a\x6e\xa4\xfd\x68\xb6\x25\x64\x5c\xee\x3b\x98\x36\xa9\x2b\x71\xcb\x00\x21\xd5\xde\x10\x71\xea\xec\xaa\xe0\xea\x47\x9e\x33\xbd\x0a\x98\xa7\x77\x88\x3d\x98\x96\x92\x61\xf0\xd0\x64\x2a\xfc\x7d\x67\x16\x8e\xe9\x26\xb3\x3e\xfe\xd0\x80\x7e\x52\xf0\xa7\x24\xaa\x5a\xa3\x32\x95\x19\xe7\xad\xfa\xee\xd7\x36\x8c\xa0\x23\x5f\x7c\x50\x5e\xb7\xf2\x03\x27\x98\x55\xb3\x02\xbe\x7d\xbf\x10\xad\x8d\x69\x34\xa0\xe9\x7f\x53\x73\xc5\x76\xb7\x71\x9f\x65\x0a\xee\x9b\x7b\xac\x8d\xbb\x29\x0c\x11\x44\x15\x97\x74\x3b\x63\x67\x05\xaf\xce\xf0\xb5\x0d\x00\x13\xc3\x7b\xfc\xf1\x49\x8a\x17\xde\x13\xf6\xf5\xa0\x25\xb3\x5f\x94\x17\x2b\x55\xad\xd4\x87\x51\x34\x92\x5f\x83\xa0\x66\xe0\xe1\x9d\x10\x6b\xc4\xc4\x88\xad\x68\x41\x8c\xc4\x31\xc9\x96\x55\xb0\x8e\x49\x04\x02\xa7\x47\xee\xbb\x51\xcb\x35\x5f\x68\xc4\x5a\xa0\x55\xc5\x28\xda\xed\x73\x61\x7b\xbd\x62\xaa\x21\xff\x5a\xe9\xd5\xa2\x11\xac\x8a\xa2\x03\xd2\x1e\xaf\x2b\x08\x3b\xb5\xf2\x6d\x3c\x33\xe2\xa4\xfa\xaf\xbf\xbf\xb8\xfe\x1a\x07\xb3\x14\xd2\x83\xc5\x48\x3d\x14\x42\x7e\x64\x9a\x83\xf0\x38\x23\xba\xb9\x85\xd0\xe3\xfa\x4a\xcc\xe7\x13\xcd\x6a\x7d\x85\x80\xb5\x16\x95\x96\x2b\xe3\x77\xf7\x33\xd2\xc7\xcf\xc0\x75\xfd\xac\x96\xab\xbb\x9f\x3d\x40\x84\xe5\x93\x74\x7b\x85\xc8\x68\xd1\x66\x98\xc6\x46\x87\x80\x38\xb2\x91\x1a\x00\xf5\xd3\xa0\x21\x9a\x54\x8b\x55\x75\x50\x2d\xf2\x12\xa1\x70\x4b\xc5\x4b\xcc\xce\xbb\x11\xf5\xad\x16\xbf\x61\x5a\x2b\xc9\x6a\x69\xd4\x9b\xec\xae\x0a\x13\xdb\xb7\x8c\xc4\x56\xa3\xda\x34\x20\xb5\xa0\x08\x03\x3a\xe9\x6a\x06\x49\xb0\xd9\x52\xac\xbe\x8e\x1a\x1b\x5b\xeb\x11\x2f\xb3\x62\x25\xf9\xba\x47\x2a\xe0\x18\xcc\x25\xe2\xcb\xec\x5c\xc6\xd1\x78\xbc\x47\x83\x9f\xec\xc9\x09\x39\xd4\xef\x74\x34\xee\x93\x2e\x10\x79\x7c\xa0\x82\x68\xd8\x40\x13\x0d\xb8\x41\xab\xa2\x38\x6e\x7f\xc5\x66\xc3\x02\xed\x84\x8d\x8d\x96\xdc\x08\x77\x36\x17\x8e\xba\x25\x3d\x44\x46\xa9\x2a\x30\x04\xd2\x2c\x13\x75\x1e\x48\x14\x3f\x5c\xb7\x33\x81\x1b\xbb\xcb\x21\x59\x95\x05\x93\x0d\x87\xab\x1b\x2a\xc9\x0c\x45\xb7\x22\xb7\x29\x7e\x6a\x9e\x29\x2f\x1f\x18\x41\x42\x8a\x25\x23\x9a\x97\xa9\x8d\xc5\xe3\xa5\x72\x5a\x35\xfd\x20\xc2\xf7\x1f\xae\x9b\x17\x0b\xe6\x1a\xcf\xe3\xe6\xac\x0a\x6d\xb7\x2d\x4a\x89\x0a\x68\x1f\xe7\x1b\x8d\x7b\x20\xdb\x24\xbc\xdb\x2e\x65\x69\xec\x3a\x05\x54\xe2\xae\xe8\x68\xef\x1e\x9a\xe4\x15\x2d\x8f\x98\xb0\xd4\x71\x60\xc5\x3e\xec\x32\x25\x9a\xf3\xf2\x79\x1b\xa7\x3a\x33\x7f\x84\x3b\xca\x55\x6b\x2f\x51\x99\xd7\xdc\x4e\xb7\x97\x37\x7c\x71\xd3\x6f\x33\x43\x38\xc9\xd6\x7e\xf6\xdc\x4c\xb3\x04\x5f\x7e\x43\xed\x49\xdf\xbb\xa7\xf6\xb0\xed\xdd\x56\x53\x30\xdc\xd9\xee\x4b\x24\xcc\xcb\xf3\xa6\x16\x5a\x38\x26\x94\x0c\x7e\x2a\x07\x9e\x89\x0e\x4c\x70\xc1\xd3\xcb\x5d\xd4\xe1\x1c\xb1\xd9\xc4\xa6\xb5\xc1\xca\xf3\xee\x68\xcc\x04\x7b\x1d\xe8\xa2\x9d\xc9\x2e\x52\x6b\x05\x7b\x63\xef\x8b\x60\xc9\x5b\xb2\x3d\xb4\xe4\xbc\x66\xf4\x5f\x17\xea\x86\xd5\x1b\x8e\x5a\x69\x2e\x41\xfb\x1a\x71\x0c\xca\x01\x52\x00\x8a\x83\x19\x31\x44\xec\xef\x37\xe4\x1b\xe9\xb3\x03\xce\x04\x3a\x38\x55\xe7\x65\x7e\x31\xbf\xb2\x7a\x9e\x9d\x12\x24\x18\xa2\x4e\x02\xfe\x35\xf1\xbf\xbd\x66\x8a\x06\x9b\xd6\x45\x2f\x1e\xfd\xf9\x54\x1f\x8d\xab\x88\xa7\xd1\x1c\x56\xa6\xf8\x9a\x19\x90\xea\x35\xab\xed\x96\x59\x9b\xf4\xb4\x97\x4c\x8c\x33\x4a\x12\x64\x24\x68\x22\x63\x63\x80\x66\x02\x05\x8f\x1f\x19\xbe\xa6\x63\x52\x39\x98\x3f\xc7\x20\x4e\x43\xfe\xd9\xf6\xf2\xb6\x1a\x3e\x69\x60\x39\x77\x5a\x6d\xf6\xcc\xc0\x22\x69\x47\x58\xda\x89\xed\xed\x35\x23\xab\xaf\x75\x86\x79\xc8\x8b\x8d\xcc\x26\x80\xa2\xac\x54\x2c\x38\xb7\x08\xf5\x70\xfa\xdb\xcc\x2a\x18\xfc\xa9\x81\xd8\x83\x0f\x63\x42\xf3\x35\x35\x1a\x61\x3b\x1c\x68\x40\x9f\x4e\x83\xb3\x88\x30\x7f\x88\x29\xf3\x05\x06\x67\xa0\x92\x42\xc4\xcf\x5e\x4b\xbf\x77\xe1\xa7\x84\x9c\x06\x77\x4f\x78\xe5\x38\x65\xa2\x6d\x09\x38\x5a\xe7\xf1\xe3\x58\x95\xd6\xb5\x33\xf5\xac\x50\x08\xd3\xfd\xa4\x9d\xba\xa3\xb9\xb4\x81\x66\x5e\x5f\x0f\x00\x1f\xdf\xbc\xa2\x82\xd6\xbf\xc8\x72\x46\xbc\xd8\x2b\x7e\x0b\x9e\x1d\xa8\x44\x1b\x13\x76\x97\xb1\x4a\x8b\x0c\x1c\xdc\x9d\xc2\x1d\xef\x05\xd9\x55\xf0\x92\xbd\x60\x2c\x81\xad\x7d\x6f\x84\xa7\x94\x86\xaf\x15\x80\xb5\x5a\x96\xc3\x14\x1a\xd6\xcb\x39\xa4\xfd\x3e\xa3\x75\xcd\xe9\x82\x19\xe6\x05\x51\x8e\x50\x39\x15\x4e\x5a\xef\x84\x1d\x39\xfa\x7c\xec\x46\x22\x5c\xa6\xa7\xd8\xd6\x4b\xb4\xc7\x10\x71\xe9\xd1\xdc\xda\xac\xb7\x1f\x52\x6b\xdf\x9a\xc0\x79\xab\x0a\xac\xc9\x70\x2a\x2b\x21\x25\x9f\x15\x5b\xa3\x66\x07\x16\x27\xb0\xc7\x26\x1c\x49\x3c\x24\x13\xc4\x3a\x41\x10\xfd\x3e\x4f\x8f\x1a\x23\x2e\x5e\xed\xdc\xf0\x40\x9e\x71\x9e\x6c\x01\xeb\xea\x33\x84\x67\x4e\x57\xb1\x87\x3a\x6a\xb1\x39\x0e\xac\xfd\xae\x52\x20\x99\x44\x4b\x8c\x6b\x00\x6e\xae\xa9\x03\x99\x3e\x56\x97\x62\x13\x36\x6e\x15\x7a\x0d\x29\xa6\x2a\x68\xc6\x00\x11\x2c\xc6\xeb\x01\x45\x26\x9b\xab\x8e\xec\xc6\x3e\x9c\xad\xa2\xa8\x82\x68\x71\x56\x71\x1c\x02\xa2\x73\xa1\x9e\xb4\xaa\xc5\x8c\xea\xbd\xfd\x1a\xed\xb4\xa8\x4d\x08\xfa\x87\x50\x37\x93\x86\x02\x06\xa8\xdb\x83\x2e\x29\x76\x38\xf2\x30\x6f\x68\xdb\x0b\x6b\x53\xc0\x18\x9a\xb1\xad\x30\x40\xd6\xf1\xd8\x1f\xf4\x07\x62\x67\x35\x95\xec\x5a\xbc\xd2\xeb\xb0\x83\x3d\x4a\x27\x42\xe9\x38\xe8\x87\x6d\x03\x74\x53\x25\x87\x69\x53\x17\x4c\xfd\x78\xc3\x15\x83\x09\x37\x72\x9b\x3e\x26\x4f\x46\xf7\x49\x86\x70\xae\x27\xe2\x9c\x73\x83\x74\x5a\xad\x3d\xaf\x43\xa1\xc6\xdd\xdd\xcd\xb3\xe6\x54\x54\x5a\x40\x29\x83\xb3\x16\xb3\xd4\x98\x53\xd8\x05\xa5\x1a\x0c\x5d\x73\x42\x55\x00\xf5\xd6\x2a\xa3\x4c\x1e\x22\xe0\xb3\x8d\xa5\x0d\x16\x42\x46\x1e\x1e\x68\xb6\x0d\x54\x4f\xab\x72\x2e\x6a\xb5\x2a\xa9\x62\x41\x4e\x23\xd4\x91\x59\xe7\x6f\x68\xc7\x70\xf0\x88\x19\x08\x8e\xb0\xce\x27\x38\x88\x78\xcc\xf9\x7c\xce\x33\x00\x05\x03\x37\x4e\x46\x56\x55\x40\x8b\xc6\x0d\x11\xd1\x38\xd8\xb2\x52\x5b\xd3\x38\x84\x53\x81\x66\xa8\x1c\x28\xa2\x6a\x5e\x59\x70\xbb\xd0\x64\xfb\xc0\x24\x5a\xb2\x0b\x67\xc8\xed\x12\x93\x3f\x4a\xc2\x17\xa5\xa8\x99\x75\x61\x25\x98\x16\x1c\xc1\xb5\xa8\x83\xcd\x35\xda\x2f\xbb\x06\x39\x5b\x73\xaa\xd0\xd4\x08\xfe\x39\xa0\x0e\xc4\x29\xd1\x45\xcd\x98\x31\x2f\x2c\x4a\xb1\x64\x13\x27\xd4\x68\x26\xe8\x56\x94\x52\x14\x6c\x4c\xee\xe6\x19\xfb\x5f\xee\xdb\x94\x90\x2b\x86\x47\xbc\x9e\xad\x16\xd3\x4c\x2c\x0f\x9e\xfe\xcf\xa7\xff\xf3\xf7\x87\x20\x96\xe6\x4c\x51\x5e\x74\x9a\xba\x45\xa5\x3e\xa4\x3c\x49\x62\xca\x83\x99\xf7\x3b\x8c\x97\xcd\x54\x97\xae\x87\xc6\xfb\xb5\xcf\x58\x17\xc8\x9a\xce\x9c\xb8\xa4\x77\x67\x5f\xc4\x6a\x15\x1a\xef\xfc\x12\xfc\xd1\x27\x90\x71\x3f\x8e\x5d\xa7\x23\x72\xe4\xfe\xdd\xd2\x52\xa7\xd4\xe9\xc1\xa9\x39\x39\x69\x26\xdf\x4c\x55\x78\x7e\xfe\xe2\xf4\xed\xab\xeb\x0f\x67\x17\xaf\x2e\x2e\x43\x5f\xb9\xfd\x2e\x64\xef\xf6\xbc\x67\xef\xbd\x33\x5c\xd2\x80\x53\x8a\x1c\xf3\xf1\x79\xef\xb2\x11\xf9\xf6\x24\x6d\xa3\xd8\x69\x93\xec\xb0\xe1\xe0\x55\x70\x76\x43\x6b\x39\xcc\xda\x39\x70\x12\xe9\x94\x87\xbb\xb1\x4b\xfb\xde\xef\xf7\xb9\xc4\x61\x5c\x7b\x2f\xee\xdd\x43\x6e\x5d\xeb\xe1\x65\xdb\xc1\x1b\x75\xde\xd7\xfb\xce\xdb\x3e\xcd\x40\xaf\xa5\x09\x26\xe2\xec\x38\x5f\x70\xfe\x0d\xe6\xc5\x03\x78\x36\xe2\x2c\x8c\x37\xcc\x6e\x8e\x60\x4c\x6a\xb6\xa0\x75\x0e\x4a\x3c\x31\xef\xb2\xde\xfc\xfa\x95\x3d\x9d\x69\xee\xf7\xde\x4b\x6b\x17\x27\x60\x4d\xcc\xcf\x49\x57\x61\x97\xb4\x29\x32\x7f\xee\x91\xc3\xb8\x17\x5a\xf7\xee\x63\xe8\x81\xf6\x5b\x6e\x66\x07\x6e\x6f\xdb\x9d\xc6\x44\x7a\x80\x7a\xe2\x6f\xb4\x95\xcf\x58\x32\x39\xfb\x3d\xb7\xf2\x32\x48\xc5\x17\xe5\x26\xd9\xa5\xe8\x6c\x6c\x7b\x98\xa4\x0b\x21\xa3\xbf\x3d\x31\x0d\xfd\xe3\x13\xc0\x0b\xde\x4c\xbf\x63\xd8\x2c\x83\xf6\xdb\x12\x30\x7c\x38\x43\x00\xa0\x6b\x7c\xb5\x76\x5a\x5f\x9b\xd0\xa5\xd9\x0d\xd2\x81\x73\xe8\x30\x58\x9d\x36\xe8\x77\xce\x8b\xbd\x01\xe7\x7a\xf0\x61\xb0\xc0\xcd\xfd\x88\xa0\x7b\x33\x0e\xed\x66\xb8\x9d\x46\x57\xff\xc3\x63\xf8\x47\x1b\x5e\xd6\xf8\xc7\xeb\xaf\x7e\xc7\x5d\xe5\x4c\x14\x58\x59\xff\xa3\x13\x9b\x36\x13\x45\xdb\x5b\xa2\x73\x88\x20\xb1\x67\xa2\x48\xa7\x9d\x6b\xbe\x8c\xd9\x4d\x32\xe3\x6a\x5f\x29\x06\x8f\xbb\xe2\x35\xb3\x68\x6e\xc0\xbd\x16\x8c\xc6\xda\x04\xaa\x8c\xc1\x3c\x0d\xb4\x1c\xd2\xc9\x4e\x22\xe9\x74\xb2\xf4\x18\xca\xee\x6d\x11\x15\x03\x94\x56\x30\x87\x1b\x1c\x63\x69\xad\xaf\x8d\xb7\xc7\xa8\xf2\x7a\xc0\x6f\x37\xd3\xcd\x7d\xb6\x0f\x66\x8f\xa4\x47\x0f\xa2\x9c\x47\x27\x27\x51\x8a\xc5\x73\x14\x71\xbc\xb3\xae\xd7\xfa\x4e\x1f\x90\x76\x9e\xf8\xd4\x93\x94\xb8\x8d\xcc\x38\x9c\xa4\x9c\xba\x87\x4c\x99\xce\x1b\xa8\xb3\x8d\xc3\x56\x10\x43\x27\x19\xe9\xeb\x46\xac\x8c\xee\xc8\xaa\x4c\x3b\x00\xe7\xf7\xbe\x1b\x64\x2f\xbd\xa1\x2d\xf0\x1f\x93\xe4\xbe\x20\xb9\xb9\xdb\xcf\x6e\x61\x83\xb9\x2f\x44\xa4\x18\x4d\xe6\xcb\xea\xdc\x5d\xff\xe0\x8d\x49\xa4\x22\x89\xb7\xdc\x87\x88\x20\x16\x35\xe8\x13\x30\xae\x23\x9d\x17\xa0\x19\xbf\x9c\xf4\x00\x6e\xfa\xbf\x80\x9b\x7a\xb5\x92\x37\x18\xe9\x11\x9a\x99\x69\x6d\xdc\x52\xa4\xd2\x32\x1d\x84\xc5\x95\x03\x85\xd9\x8e\x56\x55\xa7\x73\xfb\x68\x47\x3a\x8a\xb6\x50\x8d\x33\x72\x33\xdc\x0b\xad\xed\xb4\x8a\x9f\x13\xe6\xd6\xa1\xd3\x6c\xb3\x2e\x2d\xc3\x30\xee\x76\xd6\xcc\xa9\x6a\xc4\x61\x53\x79\xe2\x7b\x8e\xd2\x15\x2d\xc5\x9a\xa1\x8c\x6e\x02\x43\x1b\xd1\x29\x41\x3e\xda\xda\x46\x2b\x41\xfe\xd9\x5b\x46\x6a\x21\x96\xfa\x52\x7a\xe0\x12\xd4\x1a\xeb\xc9\x50\x8e\x4c\x10\x6f\x16\x36\x9d\x73\xa9\xd0\x66\x84\x21\x2f\x10\x12\x60\x13\xd3\xf8\x81\x9c\x24\xc6\xac\xff\x0d\x1f\x1f\x23\x9b\xa6\x2f\x55\x57\x23\x70\x33\xf3\x61\x9a\x41\xd4\x95\x2b\x38\x0e\x1a\x7c\xec\x3c\x27\x5b\x5c\x9f\x75\xef\x4c\xe6\x08\xe9\x1b\xec\x45\x1e\x93\xfb\xf1\x7d\x9d\xe7\xcb\x04\x53\xf4\x3c\x5f\xdf\xbb\xf8\xe0\x1a\xa2\xc7\x52\x11\xb9\x6d\x67\x35\xbd\x9d\x18\x3c\x05\x0a\xe2\x29\xd1\xed\xc0\x8d\x6a\x9b\x42\x27\x0b\xb0\x4d\x42\x2c\xaa\xa9\xb4\xaa\x8c\x8e\x4e\x0f\x16\x62\xb0\x20\x9d\x83\x41\x12\x30\xd0\xba\xf7\x89\x2d\x75\x87\xce\x28\x23\xf7\x01\xb9\xeb\x42\xfd\x0e\x5d\x27\xc7\x88\xfe\xb2\x55\xc4\xf0\xb7\x5e\xf7\xee\xb3\xd7\x56\x76\x39\xfa\xd5\xad\x1a\x8a\xed\x3a\x9f\x4e\x5d\xe5\x1b\x12\x6b\x76\x65\x22\x97\xfc\x49\x68\x52\x3f\xfe\xf0\xf0\xc4\x37\x90\x3a\x05\x90\x1e\xc9\xf6\x64\xdb\xdd\x21\xe0\xb6\x62\x61\xf7\x90\xbb\x1f\xeb\x7d\xc9\xfd\x4b\x89\x39\x2f\xe1\xda\x95\x41\x00\x95\xa7\x25\xa3\xe2\xee\x97\xf3\xa6\x83\x05\x69\x58\xbf\xfa\x92\xb1\xe9\xfa\x7e\x8f\xc7\x15\x9c\xa4\x5f\x45\xc7\x10\x02\xdc\xa9\x2c\xd3\x4c\x45\x22\x43\x57\xe4\x05\x6d\x82\x78\xfb\xf8\x0f\x7f\x31\x51\x15\x13\xb9\x4d\x7c\xd8\x58\x90\x2e\x26\xa9\xe4\x76\x39\x55\xfc\xde\x26\x6c\x51\xbd\x5f\xfa\x58\x7d\x7e\x8f\x9b\x07\x14\xa4\x3b\x76\x0c\x4b\xe5\xcd\xc7\x3e\xad\x5d\x35\x99\xbe\xa1\x82\x0b\xc7\xe8\xd0\x3d\x73\x69\x98\xd3\xe1\xa8\xad\x79\xee\x52\x23\xde\x33\x97\x9b\x19\x4b\xea\x4c\x47\x14\x93\x22\x37\x5b\x37\xac\xdc\x49\x26\x9f\x1e\xf4\xa7\x95\xab\x1b\x3e\x57\x11\x52\x49\xfc\x9a\xad\x2a\x4d\x4a\x92\xcc\xb6\x09\x03\x1d\x3c\x2e\xc9\x97\xd2\x61\x21\x18\x82\xda\xe1\xff\x0b\xb0\x39\x46\xb9\xf2\x00\xe0\x72\x35\x57\x94\x5b\xf8\xa4\x6b\xcf\x07\xe1\xed\xa1\xcb\x6a\x16\x76\xa5\xbc\x9d\xd7\xde\x45\x60\x2a\xa3\x7e\x5b\x43\x26\xd9\xd2\x54\x90\xb8\xd1\xd8\xd7\x62\xd6\x16\xe7\xa0\x08\x2d\x0a\xcb\x35\x83\x97\x0a\x42\xe6\x84\xa1\x6f\x7a\xa2\x9a\x67\xee\x71\xe5\x01\x54\x73\xfb\xca\xdb\x79\x8a\x6c\x38\xb3\xf3\xc0\xda\x75\x7e\xbc\x4f\xd6\xe7\x5f\x78\xdd\x96\xfa\xa4\x63\x41\x80\x12\xea\xd9\x86\x61\xc0\x06\xf6\x54\x9c\x04\x24\x38\x03\x5d\x65\x20\xd8\x42\xc6\x85\xfd\xb4\x17\x6f\x70\x0f\x71\xa8\x0f\xcd\x76\x79\xbf\xff\x73\x12\xac\x17\xf5\x22\x9a\xfd\xed\x28\xb1\x99\x46\xbc\x61\x09\xfd\xf5\xaa\xc7\x24\x51\x5a\xa6\xa9\xe5\x99\xe2\xbb\xef\x45\x9b\xcd\x50\x99\xfd\x5c\x8e\x01\xee\x49\x04\x8f\x87\x5e\x9f\xf3\x96\x37\xbd\x6e\x66\x20\x6a\xbe\xe0\x25\xc4\xe7\x0e\x08\x02\x47\xe7\x90\xd2\xad\xd9\x5c\x02\xc0\x42\x58\x07\xdc\xce\x3d\xd5\x43\xb3\x64\x19\x04\x65\xc4\xd2\xce\x7d\xab\xf5\xcd\x2f\x19\xef\x5a\x48\x11\x56\x31\xeb\x12\x3b\xb6\xbd\xbb\x70\x5d\xc2\xa8\x33\x4b\x14\x97\x66\x61\x3a\x94\xbd\x36\x2f\x61\x0f\x57\xa4\xee\xba\xbb\xdc\xc1\xc2\x8d\xe1\x4a\x26\xd3\xed\xa7\xb8\xdb\x5a\x6c\xd2\x4c\xaf\xc9\xb1\xba\x7b\x31\xd3\xb3\xde\xb9\xa8\xbd\x9d\xc4\x50\x71\x8f\xdc\x47\x56\xd0\x65\x35\x44\x4b\x4d\x2b\xa4\x06\xfe\xd9\x25\xc0\x19\xed\x89\xf1\x42\x0c\x5b\xb3\xf9\xfa\x0e\xc7\x9d\xee\x0b\x09\x66\xba\xad\x55\x8b\xb7\x69\xc7\x16\xd9\x13\xe8\x78\xdf\xdf\x76\x6f\xd2\x54\xb5\x73\x6f\x92\x4b\x9e\x5c\xa1\x20\x08\xe9\xef\xb7\xc0\x8d\xcb\xb0\x5f\x4a\xda\x2f\x75\x83\x9c\xd9\x29\x27\xd3\xd4\xfe\x5a\x47\xed\xd4\x74\x83\x78\x9c\xf4\x8c\x93\x71\x2b\x9f\x39\xcf\x45\xf7\x3c\x93\x68\x78\xbb\x3c\x7c\xba\xb7\x2c\xd2\x1c\xff\xb3\x3d\x5d\xf1\x1c\xee\x73\x18\x2f\x63\x0b\x78\x6d\xd1\x10\xfa\x3c\x08\xfb\x17\x7c\x1f\xd5\x04\x8b\xde\x97\x64\x7a\x21\x5c\x26\xe7\xd6\x9b\x58\xea\x46\xa2\xf0\x4b\xc4\x8e\x46\xef\x40\x15\x23\x46\xd6\x00\xd7\xae\xdf\x39\x56\xcc\x89\x14\x31\x03\x64\xbe\x86\x69\xf8\xa9\xdc\x96\xd9\x4d\x2d\x4a\xb1\x92\xc5\x76\x0c\x55\x4c\xca\x0a\x58\x18\x5a\x40\x72\xd7\xec\x96\x6c\x78\x09\x06\xf2\x0d\x46\x95\xda\x94\x7d\x50\xc4\xc3\xe6\x66\x82\x16\x4c\x66\x16\xe0\x8a\x5a\x6c\x5e\xec\x7a\x1f\x39\x44\xa0\xf3\x1f\x76\x78\x95\x2b\x44\xc8\x97\x1f\xa6\xd8\x70\xd2\x0d\x0f\xd6\x00\xdf\x51\x77\x99\x36\x2b\x92\x93\x10\x70\x3f\x01\xc7\x6f\x74\x33\xba\xad\x56\xe5\x63\x07\xd9\x5f\xcc\xa3\x48\x6f\xfc\xfc\xc1\x41\x71\x24\x10\xd0\xba\xf7\x70\x16\x20\x7d\x45\x2a\xec\x08\x97\x05\x8f\xfc\xdf\x63\x2b\xbd\x70\xe1\x43\xd0\x41\xde\x69\x84\x42\x7b\xd9\xda\x08\x67\x7e\x8e\x63\xa3\x36\x97\x81\xf5\x57\x37\x96\x0b\x2f\x79\x79\xaf\x8b\x30\x0c\xb1\x07\xf5\x04\x90\x78\xbd\x28\x48\xba\xf2\x9f\x41\x45\x32\x14\xa1\x3e\x87\x92\x7c\x03\x9d\xd4\xd4\xc6\x0d\x80\x22\x4d\xdc\x00\x43\x69\x4f\x0e\x77\x33\x5b\xab\x0a\xdc\xdf\xdb\x6a\xc6\x14\xd4\x54\x2f\x69\x73\x19\xf7\xb0\xcf\x30\x0c\x85\x3a\xd5\x1f\xe1\x85\x88\x45\xf5\xda\x0c\x27\xa1\x22\x77\xf7\x04\x41\x15\xf1\x0f\x30\xc5\xa6\x5c\x1d\x4c\xd2\x1a\x45\xfc\x9c\xac\xdd\x65\xc9\x4b\xf4\xa2\x70\xf1\x91\x09\x11\x8b\xfc\x31\x2d\x1c\x90\x23\x23\x54\x1b\xbb\xcc\x67\xb5\x64\xe5\x03\x72\x94\x0a\xbe\xdc\xc9\xee\x3e\x08\x31\x44\x43\x86\x77\x7f\x48\x16\xda\x6a\x3a\xc3\x3d\xdd\xb2\x8c\xfd\xbc\xa2\xe0\x88\xb6\x2a\x0c\xc1\x42\x77\xd0\x09\xc4\xa5\xa4\xe9\x04\xd9\x85\x10\x60\xd7\x84\xf8\x34\x31\xba\x34\x37\x66\x58\x29\xb8\xd2\x8c\x83\xbd\xc3\xe8\x85\xf2\x95\xb9\x42\x2d\xe0\x85\x95\x40\x6b\x54\xa1\x95\x64\xc3\x20\x74\x01\x9d\xfb\x21\x9d\x35\x94\x0b\xfa\xa2\x92\x6c\x58\x3b\x69\xf6\x6e\xe5\x3e\x4e\xe2\x73\xc9\xb7\x19\xae\xb2\x87\x7c\x23\xf3\xdc\xb7\xe4\x49\xf2\x2e\x35\x33\x3f\xbb\x5f\xec\x5b\x5b\xdb\x60\x76\xe3\xc7\x16\x52\x53\x6f\xb7\xfd\x16\xb2\x13\x97\x41\xf4\xb6\xd1\xb0\x63\x14\xcb\x92\xd6\x0b\x5e\x8e\x21\x71\xc9\x6a\xc9\x20\xb8\x0c\xa7\xa9\x04\x59\x30\x45\xb8\xf2\x6d\xc1\x3e\xda\xc0\x27\x2a\x2d\x04\xb1\xf5\xe3\x81\x28\x57\x5a\x55\x05\x67\x26\xbf\xfd\x06\x42\x34\x79\x69\x29\xcc\x37\xd5\x20\xb5\x69\x08\xa3\x34\x99\xf4\x71\x4b\x0f\x30\x82\x1e\x66\xde\x56\xda\xf6\x55\x77\x76\x94\x92\x6d\x7a\xfa\x68\x04\x35\xdc\x76\xc6\xdb\x3b\xf1\xa0\x3a\x38\x06\x5f\xf4\x5b\xef\x0f\x46\x7c\x9f\xe6\x1f\x13\xb4\x15\xcf\x0b\x21\x6a\x43\x4f\x07\x69\x39\x79\x64\xbd\x57\x83\x1e\x2e\xc1\x99\xf1\x30\xc4\x3e\x3a\x38\xb0\x68\x36\x85\x14\xb0\xac\xc6\x23\x58\x1f\xc0\xc3\x68\xb7\x90\x9d\x27\x8d\x81\x75\x5c\x7a\x8f\x6d\x89\x7f\xed\x72\x9e\x6c\xc0\x20\x85\x6b\x95\x16\xfc\x1f\x07\x65\xda\xad\x6e\x02\xd8\xac\x07\x09\xbb\x96\x93\x87\xd0\xd8\x4e\xef\xcc\x82\x68\xf6\x73\xec\x5b\x46\xca\x88\x14\x6e\xcd\x9d\x74\x0d\x24\xb7\xb4\x69\xf0\x6e\xd8\xd5\xc2\x8e\xf6\x29\xe7\x60\x21\x7b\x5d\xc2\x7f\x8b\x3b\xaf\x15\x15\xf4\x45\x2e\xbd\x94\x0a\xa8\x7f\xa0\x4a\xf7\xa3\x48\x48\x5f\x0d\x52\x8f\x28\x61\x93\x35\x0c\x1d\x95\x45\xcd\x4c\x44\x90\x7e\xd4\x9a\x61\x75\x72\x27\xd0\x3e\x5e\x71\x56\x20\x60\x77\x46\xc8\xd9\x50\x49\xb4\x50\x54\xba\x34\x2a\x09\x6b\x4a\x1c\xeb\xa9\x05\x24\x3c\xb8\x4a\x10\xc9\x20\xe0\xdd\xbe\xc3\xde\x99\xce\xe0\x9a\xf8\x9e\x8c\xbe\x03\xf0\x52\x82\x1e\x7d\x77\xb6\x18\x48\x4d\x10\x91\xc7\xcb\x8c\xe7\xcc\xcb\x1e\x26\xa0\x10\xd4\x26\xa5\x98\xb8\xaa\x03\xb3\x00\x53\x42\x5e\x6f\xc9\x62\xc5\x24\x84\x0b\xba\x48\xd4\x52\xb4\xec\x35\x33\x21\x0a\x46\x4b\x40\x6b\x55\xcc\xa2\xb5\xa2\x37\x99\x64\xfb\xfc\x23\x1a\xe9\xdc\x1a\x70\xaa\x8a\x05\xda\x91\xe6\xe3\x68\x2b\x40\x39\xfb\x8c\x06\x95\x52\x00\x65\x4c\xbd\x70\x5b\xdf\x91\xd2\xb3\x99\x1c\x74\x30\x6a\xd8\xc9\xc3\xd6\x9e\xb9\xc2\x1d\xad\x79\x4a\x8b\x5a\x4b\x18\x03\xee\x39\xcc\x8e\x86\x3f\x73\x98\x1d\x93\x8e\x83\xa0\x7d\x3e\x14\xa3\x78\x9b\xb1\x86\x98\x0c\x92\x35\x64\x4b\x28\x28\x82\x8a\xeb\x22\x84\xae\x72\xae\xef\x2b\x48\x75\x40\x4b\x22\xca\x8c\x91\x8a\x69\xd1\x33\x13\xe5\xde\xe0\x73\x5e\x2e\x9e\xb1\x38\x6c\x20\x20\x0b\xbc\x5b\xc2\xec\x95\xb3\x78\xb6\xa4\x19\xf2\xe7\x56\x66\xd1\x5e\xe7\x51\x97\x58\xbc\x5b\xf4\x05\x79\xb5\xc7\x48\xb0\x60\x77\x06\x59\x27\xe4\x3e\x3d\x3c\x74\xee\x9c\x7a\x0d\xaf\xfe\xef\x8a\x15\xd9\x8d\x19\xc2\x07\x77\xff\xcc\x84\x3e\xf9\xb0\xbe\xfa\x26\x2b\x85\xe2\x73\x9e\x21\x98\xb8\xae\x07\xd0\x2d\x8e\x69\x4c\xb4\xd4\xba\xd1\xa3\xc2\xa7\xba\xe5\x0f\x8d\x34\x49\xb2\xce\x06\xa3\xe8\x8c\x05\x45\xf5\xce\x47\x4e\x29\xd0\x27\x6b\x0c\x7f\x9f\x2a\x81\x78\xa4\xe9\xf4\xb0\x1d\xe7\x11\x64\x89\x1c\x93\x6f\x0e\x0f\xdb\xc7\xab\x47\x4b\x9f\xa2\x89\xe7\x4c\xde\x2a\x51\x7d\x1f\xac\xa5\xa6\xbf\x0f\xde\x77\x27\xc8\x66\x4d\xe5\x0b\xcc\x8d\x18\xa5\xab\x72\xf8\x9c\xb0\x21\xed\x05\x09\xdb\x7e\xc5\xa5\xfa\x60\xd2\x57\x99\x72\x0e\x00\xf5\x0a\x91\x00\x36\x8c\xa8\x1a\x62\xa8\x6b\xca\xcd\x1b\xb6\xe1\x65\x2e\x36\x00\x00\xf8\x47\xa8\x54\x4e\x45\x09\xe9\x48\x1b\x07\xc5\x10\x67\x21\x20\x02\x2b\xea\x5a\x7e\x18\x8e\x8e\xc9\xa7\xd6\x51\xb7\xba\xfa\x40\xa3\x4e\x66\x5c\x05\xe2\x62\xf8\x05\xde\xc4\x31\xc9\x58\x0d\x30\x22\x1e\x48\x2d\x0d\xb6\x65\x13\x3f\x11\x97\x66\x4a\xb3\xa9\xf0\x9a\x30\xc5\xda\xda\xfa\x56\x74\x12\x09\x91\x9e\x90\xc5\x85\x84\x37\xb2\x12\x65\x1e\x82\x47\x07\x7e\x13\x6d\x95\xbf\x9d\x8c\x8d\x05\x80\x20\x81\xf9\x7c\xdf\xf3\x56\xaf\xec\xcb\x16\xae\xc1\x18\xc1\x3d\x21\x20\xaa\xec\xf5\xea\x5d\x78\x15\x45\x9f\x37\x4f\x84\xc5\xdd\x8b\xd7\xc1\x1d\xb7\x63\x39\xec\x86\x1a\x97\xfe\xc4\x86\x86\x5f\xcc\x86\xb2\x3b\x2e\x11\x12\x47\xb3\x1e\x31\x50\x44\xe4\x5a\x64\x14\xaa\x10\x52\x88\xfe\x1e\x86\xef\x6d\x3a\x94\x83\xf1\x44\xb7\x16\xef\xa1\xfd\x95\xb8\x10\x28\xd8\x45\x5a\x6e\xe3\x31\xfc\xfa\x2d\x0b\x66\x79\xff\x2d\x7b\xe9\x80\x67\x7b\x6d\x19\x0f\x8b\x9b\x2d\x4b\x6c\x09\x5d\x69\x0e\xcd\xe0\xc6\x58\xed\x60\xbc\x37\xc9\x22\x0e\x83\xad\x24\x54\xaf\xed\x72\xce\x22\xb0\x65\x90\xf2\x0d\x52\x39\x3a\xe0\x50\x89\x38\x48\x05\x2f\xd9\xd8\x5b\xbc\x7c\xd2\x6a\x49\x21\x59\x37\xa1\xe0\xd3\xa4\xdb\x33\x5e\x44\x39\x9f\xcf\x59\x0d\xa0\x0a\x33\xc1\x0b\x89\xaa\xec\x0d\x30\x97\x9b\x1b\x06\x40\x13\x7a\x77\x45\xc2\x2a\x6b\x38\x59\xf6\xe5\x19\xc7\xd3\x36\xe8\x4f\x9f\x7d\x49\x60\x05\xed\xda\x9f\xa6\x42\x2c\xde\x9a\x84\xba\xac\x79\x17\xda\x6b\xcf\xe4\x5f\x6d\xf8\x95\x29\x14\xd8\x83\x5b\x2b\x8a\xc7\x9e\x0b\x5d\x41\x1f\x00\x04\x3b\x8c\x30\xee\x42\x3c\x3e\x90\xba\x9c\x41\x05\x60\x32\x9a\x70\x58\x98\x59\x2c\x48\xf6\x07\x47\x8d\x54\x54\x2a\xc2\x15\x7a\x9e\x21\x94\x46\xf2\xa0\xb5\xec\xeb\x3b\xce\x59\x63\x59\xee\x7f\xd6\xbc\xe6\xab\xd7\x9e\x6e\xc2\xe2\xdd\x7b\x69\x24\x87\xc9\xfd\xf7\x74\x3e\xff\x75\x9b\x1a\x6c\x46\xa8\x3e\xed\xb9\xa3\xce\xef\x03\xf0\xe0\x7e\xe5\x1d\xd8\xb1\x08\xf7\xdf\xa3\xcb\xa6\x92\xf2\x3e\xd2\xdb\x8f\xfb\x76\xac\x40\xfe\x96\xa9\x0d\x63\x16\xd8\x85\x2f\x69\x8d\x61\xac\xe0\xc6\x0a\xf0\x35\x48\xdb\xa1\x2a\xdb\x7f\x0b\x8f\x24\xdc\xb5\x8d\x5a\x1e\xfb\x30\xdc\x08\x7b\x80\x6c\x7f\xad\xb2\x16\x26\x7a\x43\xab\xca\x24\x8b\xd6\x43\x30\xf6\x3e\xc2\xd0\x39\x52\x74\xc4\xaa\xd9\xea\xe7\x34\xbb\xb1\x6d\x5b\x0c\x36\x09\x1e\x5c\xfa\x66\xed\x70\xf3\xfb\xfc\x6d\x8f\x57\xe5\xfe\xbb\x7d\x6a\xeb\xef\x78\x00\xef\x07\x78\x61\x37\xde\xda\x68\xdc\x08\xaf\xcc\xf7\x23\x62\x04\x55\xd8\x87\xab\x20\x45\x4a\x4b\x0d\xde\x02\xc7\x7c\xf4\x28\x15\x63\xed\x71\x5a\x0e\x83\xfc\x27\x0f\x77\xa6\x59\x09\x02\x7b\x5f\x46\xd7\xa9\x89\x1e\x81\x5c\x95\xd2\xa4\xcf\xd8\xe8\xff\xab\x19\xa1\x1b\xba\x1d\x43\xba\x02\xdb\x0b\x93\x64\x49\xb7\xb6\xa5\x99\xe6\xc5\x4c\x9a\xc6\xa9\x93\x1b\xfa\x66\x7d\xe9\x4e\xe8\x64\xe7\xd7\x8d\xf6\x4f\xeb\x6d\x1a\xea\x9f\xd6\xbb\xb3\xc2\xb4\x03\xd1\x69\xc1\x7f\x41\xb4\x9a\x0f\xe9\x58\x83\x10\xc2\x04\x0a\xa3\x61\xab\x5d\xfa\xa6\x69\xf0\x0a\xf5\x17\xdb\x32\x43\xcb\x9d\x0f\xbf\x4e\x14\xe3\x51\x8e\xa6\x7e\x11\x2c\xb1\x4b\x83\xde\xc7\x66\x50\x42\xe4\xb4\x34\x99\x15\xbc\xbc\x4d\x3d\x19\xd1\xf7\xe0\xc2\x71\x30\x70\x9a\x41\x86\x8f\x60\x13\xe1\x10\x3a\xb9\xe6\x92\xcf\x8a\xe8\xea\x01\x36\xcd\x7e\xf0\xf6\x5e\xe3\x75\x0d\x2d\xd8\x5e\xff\xc3\xa7\x5a\x02\x1e\x1b\x45\x2a\x41\x90\x7f\xd4\x25\x6d\x82\x1c\x3e\xb7\xe9\x68\x10\x3e\x5e\x09\x08\xe5\x16\x12\x21\xb2\x1e\x44\x99\x31\x3d\x5b\xa8\xeb\x14\x05\x29\x18\xbd\x25\x94\x18\x83\xfe\xaf\xe6\x0c\x5a\x2b\x79\xff\x9b\x08\x37\xf3\x19\xb4\xd0\xe7\xc5\xc9\xa2\xf2\xe6\xad\x31\x97\xc8\x43\x1c\xa1\xcd\x5c\xe3\xdd\x16\x82\x4a\xf6\x88\x80\x11\xca\x2a\x2d\x76\x14\x3f\x6e\xa9\x1d\x92\xe5\xda\x8a\x87\xc6\x88\x7f\x40\x32\x18\x25\x0c\x11\xe6\xd3\x50\xd5\x2b\xb6\x93\x62\x2d\x29\x75\xd3\xac\x2d\xd1\x45\xb5\x2c\x45\xa7\x9a\x82\xad\xb2\xef\x4b\x91\x44\x38\xd4\xcf\x25\x0a\xb3\x2e\xf7\x20\x0b\x5f\x23\x45\x18\x2d\xb3\xeb\x4e\x02\xb9\x2f\x89\xf4\x24\x12\x6b\x5f\xeb\x50\x77\x8a\x8a\x66\x5c\xe9\xa7\x60\x70\x38\x38\x4e\xe1\x4b\x20\xed\x74\x66\xf9\xd8\xdf\xee\x93\xc1\xf1\x2e\x42\x8d\x16\x61\xcf\x52\x35\xa0\xc4\xfc\xc4\x44\x19\x9c\xeb\x0f\x09\x98\xd4\x7f\x80\x3d\x88\x95\x64\xc6\x1b\x0d\x5e\x7f\x7d\x6c\x1a\xd7\x36\x26\x43\x46\x45\x61\x90\x49\xbd\x19\x79\xa3\x9b\x72\x02\x33\x20\xeb\x53\x63\x31\xda\x45\xf0\xed\xcd\x4c\x03\x2b\x29\x51\x5d\xfa\x07\x3d\xa5\x01\xbf\xf6\x25\x3c\x44\x2b\xfa\xe3\xed\xa9\xf9\x2c\x2a\x34\x0c\xba\x1a\x1d\x37\x51\x11\x12\xed\xb4\x73\xfa\xa6\x38\xb6\x0e\xf8\x84\x28\x01\x2c\x36\xfe\x87\xc6\xa8\x03\xbe\xed\xcc\x09\x55\x61\x8a\x51\x87\xd0\x02\x96\x54\xae\x88\xde\x79\x9e\xbb\xbc\xe3\x76\x3f\x69\xcd\x68\x0c\xcc\x7c\x26\xe5\x0f\xb4\x76\xca\x7b\xe4\x93\x20\x69\xf0\x98\x0c\x26\x4f\x5c\xea\xe0\xf8\x18\xee\xb9\xe7\x1b\x2c\x6b\xfb\x40\x5a\xfc\x95\x93\x13\x32\x28\x45\xc9\x06\xc1\x0c\x2f\xd9\xc4\x7e\x8e\x4c\x34\x56\x9c\x9c\xc3\x8d\x4d\x25\xb9\xe1\x79\xce\x5c\xce\xd7\xa5\x58\xc9\x04\xf6\xf4\x8e\xbe\xc9\x60\xe0\x26\x74\x70\x40\x5c\x70\x41\xe8\x80\x07\xe9\xae\xcf\xae\xae\x34\x09\x70\x50\xb9\x2e\xa9\xba\x99\x12\x10\xae\x19\xc9\x51\x24\xd6\xbf\x11\x5e\x92\xff\x73\x35\xf6\x40\x13\xf3\x42\x50\x85\x9f\xe0\x7d\xd1\x72\xf3\xaa\x22\x33\x86\x19\xb4\x6b\x10\x9f\x33\x14\xd2\x28\xf6\xaa\x3b\xc2\x74\x35\xba\x06\x36\xe5\x10\x4d\x9d\x44\x5e\xd3\xec\xd6\x30\x3f\x33\x66\x44\xa7\xe6\x7e\x9a\xe5\x4f\x6d\xab\xf9\xf4\xf3\xbf\xfc\xb5\x41\x75\x93\xf0\x88\x7d\x22\x8f\xc9\xcf\x8e\x8e\x7f\xfe\x97\xbf\xb6\x8e\x8d\xa1\x29\xf0\x75\xac\x5e\x83\xe3\xcd\xa7\xea\xee\xe7\xd8\x94\x9d\xa4\xae\x4c\x14\x83\x9e\x3e\xe0\xc9\x3b\x3d\x32\xe1\x28\xae\x0a\x36\xd8\x69\x79\xc7\xa5\x18\x0e\x9a\x99\xed\x3b\x6c\xf9\xfb\x9b\x1a\x93\x7d\x6d\x81\xa7\xdc\xfe\x86\x46\x03\x67\x1a\x7b\x5b\xe5\xd4\x04\x96\x67\xb4\x66\x0a\xf3\xda\x3f\x79\xb2\x25\xd5\xaa\xd6\x1c\xae\x9c\x7a\x73\x9e\xb9\x80\x5b\xd9\xbf\x17\x4c\x5d\xd9\xaf\x43\x17\xb0\xed\x2b\x3c\x7a\xe4\x6b\x4f\xb9\x3c\x13\x45\x41\x2b\xc9\xf2\x51\x3b\x7c\x1a\x64\x15\x5b\xf6\x4c\x8f\xc8\xb7\x13\xf3\x69\xa7\xf9\x5f\x56\xd2\x7a\x14\x03\x30\xae\x98\xb7\x76\xad\x9d\x6c\xa5\x81\x75\x20\x6f\x68\x85\x42\x43\x19\xea\x7e\x33\x56\x14\x24\xe7\x4b\x56\x4a\x7d\xd1\xec\x45\xf7\x86\x01\xe0\x25\xd9\xf1\x8e\x40\x47\x76\xe9\xb0\xf3\x2b\xfd\x53\x43\x1c\x0f\x29\x2e\x36\x1a\xce\x45\xb6\x92\x83\x11\x5c\x5e\xc0\xdb\x85\xb7\xd7\x69\xb1\xa1\x5b\x89\x28\x3f\x94\xcc\x0a\x91\xdd\x3a\x26\x54\xcb\x4b\xab\x12\xaa\x83\x62\x92\x10\x37\x98\xc6\x8c\x82\x61\x4d\x9f\xbd\xba\x38\xfb\xee\x38\xc4\x28\xc5\x45\x3e\xe9\xb8\xe0\x60\x1a\x72\xc3\x55\x76\x43\x86\xd0\xbe\xe3\xfa\xa9\x64\x3b\x7b\x3a\x3f\x7d\x6d\x3d\x49\xf1\xae\xbc\xb1\x5e\xa9\x83\x35\xad\x87\x93\x09\x54\x9e\xe8\xdd\xd1\x12\xe6\xc4\xc8\xba\x83\xe3\xa8\x52\xdb\x54\x3c\x50\x35\x2d\x65\x45\xf5\x7e\x37\x0b\x8b\x3a\x67\x35\xbe\xbf\x57\x66\x5e\x3e\xed\x53\x5c\xea\x15\x9b\x2b\x5b\x66\x20\x45\xc1\x73\xd7\xd8\xac\x66\xf4\xd6\xf0\x60\xfb\xa6\xf9\xf6\xfb\xe7\xe7\x97\xaf\x5e\x7e\x7f\xde\x31\xd7\xd6\x4d\xe7\xa8\x11\x04\xfc\x19\x95\x0c\x72\x48\x3e\x26\x83\xea\xee\x4b\xcf\xbd\x31\x2f\xfd\x00\xa0\x6a\x05\x8f\x17\xff\x05\x24\x89\x0a\xe0\xaa\x09\xbb\xa3\x80\x77\x63\x01\x01\xcc\xc8\xf6\x2c\x5d\xb8\xbc\xe1\xba\x19\x4f\x9a\xdf\x84\x02\x02\x52\x85\x9f\x3e\x7c\x19\x2a\x48\x4c\xe5\x9e\xac\x6d\x2b\x7a\x3c\xcd\xc0\xba\x58\x8e\x6d\x99\xfd\x7d\x22\x39\xb6\x65\xd6\x37\xa8\xa2\x0f\x47\x9d\x0a\xae\x70\xf5\x3e\x27\xb8\xc2\x55\xde\xeb\x11\x81\x41\x13\x69\x19\x0e\x4b\x74\x84\x5f\xb8\x2a\x5d\xa1\x3a\x57\xfa\xd6\x15\xb5\xe6\x0c\xf1\x25\xfd\x45\x88\x25\xd9\xd0\xba\xc4\x94\xac\x6e\x1b\xc3\xdf\x41\x1b\x4e\x96\x4c\x4a\xba\x60\xee\x47\x5d\x7b\x25\x11\x75\x5e\x19\xdc\xa9\x59\x2d\x36\xfa\x27\xa8\xbd\x5c\x49\x85\xbe\x6b\x98\x9c\x43\x90\x27\x87\x87\xff\xaa\xb9\x40\xa0\x52\x78\xbe\x6f\xac\x47\x9c\x83\x1d\xc0\x7c\xea\xc5\xb6\xaf\x4e\xe1\xc6\x58\x63\xcc\xf0\x02\x65\x02\xcc\x91\xef\x55\x27\xdc\x88\xcd\x7f\x0a\xb1\xfc\x11\xa7\xd5\x4c\xf2\x6d\xd5\x02\xa0\x26\x80\x1d\xfd\xc5\x17\x86\x37\x25\x94\x85\x8d\x22\xa1\x53\xee\x6d\xd6\x6d\xf3\x27\x59\xcd\xa8\x62\xe7\x05\xd3\x7f\x0e\x07\x39\x5f\x0f\x42\x7f\x92\x66\x03\x53\x9e\xeb\x9b\x07\x66\x77\xa4\x3f\x4e\xcc\xf6\x0c\x76\x55\xc2\xcb\x22\x93\xf2\x9a\xdd\x41\x44\x85\xe3\xc3\x06\xe0\x9b\x74\x44\x66\x05\xcd\x6e\x8f\x07\x01\x87\xd6\x72\x1b\x3b\x22\xff\x63\x3e\x7f\xfa\xf4\xe9\xd3\xb8\xd8\x5c\x94\x6a\xa2\x6f\xbe\x23\x52\xd0\x7a\xc1\x1a\x8d\xc0\xd6\x4f\x6a\x9a\xf3\x95\x3c\x22\xbf\xab\xee\xe2\xef\x46\x0f\x71\x44\x0e\xa7\xff\xf6\x4d\xfc\xa9\xa2\xb9\x66\x8e\xf4\xa7\xa7\x6c\x49\x0e\xa7\xdf\xc0\xff\x77\xff\x8e\x4b\x2b\x51\x1d\xa5\x7e\x07\x5f\x85\x23\xf2\x44\xd7\x6b\xb4\x6f\x4e\xd9\x91\x4b\x2e\x1a\x7f\x9f\x6c\xd8\xec\x96\xab\x89\x62\x77\x38\xc1\x09\x05\xb6\xee\x88\x68\xf9\x2c\x5d\x56\x9f\x8f\x09\x32\x85\xc9\x62\x4b\xf1\x4b\xbf\xf6\x74\xc1\x44\x63\xa3\x5d\xc4\x35\xa5\x79\x7e\xbe\x66\xa5\x7a\xc5\xa5\x62\x25\xd3\x52\x46\xc1\xb3\xdb\xc1\xd8\x53\x38\x6b\xe0\xd9\xe2\x2b\xac\xab\x4f\x31\x0f\xc9\xd9\x0d\x2f\x8c\xcb\x95\xb9\x53\x1a\x60\x3f\xad\x5e\xf5\x7c\xce\x0c\x76\x1c\xba\x09\xbf\xc6\xa3\xf9\x9a\x96\x74\xc1\xea\xa9\xc9\x5f\x72\xc9\x8c\x9b\x81\xb4\xe4\x87\x67\x34\x68\xd0\x54\xb4\xa2\xcb\x3b\xc8\xd7\xfe\xb2\x54\xc3\x3d\x0c\x88\x6e\xe2\x05\xcd\x94\xa8\xc9\xd7\xfa\xd2\x19\xbd\x0f\x04\xa5\x8e\xd3\xa0\xe9\xf6\x05\x5d\xf2\xc2\xd9\x59\x62\x0f\xcc\x52\x4d\xe6\xf0\x79\xe0\x11\x61\x5b\x6a\xc3\xf4\x0d\x11\xac\xea\x28\x5c\xec\x9c\xaf\xc3\x6f\x26\xc7\x94\x5f\xf1\xf6\x55\x73\x1c\xe7\xcb\xda\xdb\x5b\xe8\xb7\xb7\xa3\x5c\x6b\xaf\x3b\x7a\x6e\xbd\x24\x91\xfa\x41\xac\x59\x5d\xd0\x2d\x8a\x65\x06\x39\x87\x2e\xc1\x9b\x5c\x8b\x3b\x7c\x19\xa1\xf0\xb7\xaa\xd9\xec\xbc\xbc\x24\xbc\x44\xbf\xe8\x35\x78\xfd\xf2\x92\x50\xbc\x4b\x88\xde\x86\x31\xc9\x58\x09\xb8\x46\x00\x34\xb3\x36\x7c\x44\x90\x9a\x23\xb0\x96\x38\x67\xe6\x5b\xc6\x30\xd9\x88\xed\xce\x3e\x67\xb3\x9a\xb3\x39\x64\x83\x85\xcc\xc1\xe8\x20\xd3\xe8\x12\x24\xae\xad\x58\xf9\xe6\xf4\xd2\x0d\x94\xb7\xb1\x64\x37\x2c\xbb\x75\x0c\x28\x22\xe0\xc4\xab\x33\xe7\x75\x1b\xff\xc6\x82\x6d\x2f\xe5\xc2\x2c\xca\x9d\xc2\x4c\x3f\x7f\xba\x7e\xfd\x6a\xe4\x06\x69\xac\x38\x7a\xdc\x26\x9a\xc7\x4c\x63\x9a\x42\x8e\x10\x95\xfa\x60\x98\x02\x68\x35\xde\x04\x70\x58\xa0\x5c\x91\x19\x9b\x8b\x9a\x91\x39\x05\x99\x53\xac\xe0\xb1\x46\x72\xf1\xed\x93\x48\xd5\xff\x64\xfa\x8d\xf1\xe3\x95\x53\x42\xde\x50\x29\x81\xc1\x84\xd7\xd6\x42\x4d\x9b\x9a\xb6\x31\xa9\xe8\x96\xac\x2a\x70\xc3\xd7\x7b\x35\x14\x35\x59\x95\x8a\x23\xac\x79\x69\x3d\xc1\x0a\xba\xdd\x97\x9f\x4b\xbf\xd4\x17\x66\xf7\x82\x47\x7a\x29\x17\xe3\x70\xca\xcd\xf7\xda\xb4\xde\x7e\xab\xdd\x19\xdc\xa1\xa7\x0e\xea\xde\xfb\xad\x0e\x2b\xef\x7a\x72\x1b\x6f\xe2\x93\x6f\x9a\x8f\x62\xf0\xa4\xde\xdd\x4d\x12\xaf\xea\x17\x7b\x35\xfb\xbe\x81\xfb\xde\x35\xfb\x54\x6a\xc1\xce\x34\x68\x2d\x0c\x4f\x7e\x77\xb8\x94\x84\x51\xc9\x26\xbc\xec\xf7\xca\xb5\x9f\xcc\xfd\xed\x8e\xba\xb6\x31\xf1\x2a\x82\x62\x54\x8b\x1d\x1d\x2f\x23\xd3\x4f\x81\xae\xe2\xd0\xfa\x8e\xdd\x17\xa9\x44\xf5\xa6\x16\x15\x5d\x50\xaf\x52\x02\xce\xdb\x98\xeb\xc2\xb7\x32\x45\x11\xa1\xf8\xb7\xdb\x4b\xff\x78\x47\x33\x1d\xf2\xe4\xee\x20\x82\x5d\x0d\xde\xf7\x39\x6c\xb7\x13\xf3\x01\x4b\xb9\xd8\xd5\x5d\x68\xd7\x9a\xfe\xdb\x37\xde\x04\xd5\x3e\xc3\xad\xd7\xd4\xbf\xa5\xad\x07\x34\x3a\xfb\x4e\x4e\xcb\xf9\x5a\xb3\x09\x4e\xa9\xb4\x60\xea\xac\xe0\xac\x54\xfa\xd7\xa1\xbf\x16\xac\x61\xc3\xb4\xb2\xaf\x4e\xbb\xb3\xae\xd9\x02\x4e\xad\x21\xa1\xa1\x19\x8d\x0f\x3e\x0e\xba\xb3\xbe\x12\xe4\x80\x3c\x0d\xb4\x29\x5d\xed\x16\x18\xe5\xea\x9a\xb4\xd1\x53\x61\x8b\xe6\xb7\xae\x30\x09\x23\xe4\x5f\x59\xdc\x03\xf0\xf8\x78\x73\x17\x8f\x20\x25\xef\x46\x36\x0f\xec\x2f\x0e\x3b\x68\x9b\xea\x9a\xc5\x5c\x23\xe1\x03\x76\x72\xd2\xce\x83\xdc\x5a\xdc\xde\xb1\x06\x20\x30\xef\xa1\xbf\xc1\x71\xa2\xf0\x3d\xa2\x19\x9c\x4a\x79\xbe\x9b\x6e\xed\xff\x76\x95\x8c\x38\xb3\x56\x41\x77\x0f\xed\x18\x6d\xa8\x00\xea\xbb\x02\x78\x02\x6d\x0d\x17\xa1\x62\xfe\x08\x77\xe7\xe3\x47\xf2\x04\x03\x31\x02\xd6\xf0\x0d\x95\x8a\x05\x39\x87\xb6\x52\xb1\x25\xc9\x0a\x5e\xcd\x04\xad\xf3\x66\x5a\xd6\x3d\xcf\x7e\x05\xad\x75\x61\xcd\x60\x35\x28\xf3\xa2\x16\xcb\x33\xdb\xc9\x30\x7e\xab\xe3\x01\x9e\x89\x6a\x4b\x28\x41\xee\xcb\xb9\xe2\x36\x86\xe9\xd0\x1a\x85\x62\x47\xc6\x1b\xac\x66\xa8\x0b\xc1\xf7\x89\xe5\xa4\xa6\xe5\x82\x35\x93\x84\x8f\x35\x13\x69\x94\x55\x9a\xe8\xdb\x08\x9c\x96\xef\x93\xaa\x36\xbe\xd0\x76\x24\x99\xa8\xb6\xfb\xa2\x3b\x45\xb5\x45\xd0\xd6\x6b\xe1\xe6\x1b\xab\x2d\xea\x86\x0a\x2b\xbc\xbb\x31\xc2\x7f\xe2\xe6\x39\x29\x85\xe2\x19\x1b\x8c\x90\x2a\x03\xea\xc6\xcb\xc1\x73\x5d\x3e\xfc\x66\x1c\x45\xbc\xe8\xe5\xb4\xa2\x1a\x84\xe5\x04\x21\x4d\x18\x33\x5a\x6d\xaf\xc4\xaa\xce\xd8\x5e\x1e\xaa\xaa\xd9\xc0\x40\x8d\xd9\x3a\x91\x8a\x43\xff\x3c\x51\x22\x18\xbd\x84\x42\x83\x46\x9d\xf8\xf1\x91\xaa\x6e\x7c\xef\x62\xc7\xd2\x1c\x8e\x6e\x2d\x60\x43\x12\x8c\x4a\xb3\xc4\x4e\x46\x0a\x95\x13\x93\xdf\xff\xbe\xba\x0b\x5f\x4f\xbf\x28\x33\x91\x6f\xa3\xc7\xcc\x8f\x3c\x8a\x59\xeb\x6f\xe4\x02\x17\xc2\x32\xbb\x41\x3b\x08\xc6\xa6\x19\x23\x97\xff\x39\x2e\x78\x61\xfd\x13\x9b\x45\xf1\x83\x2d\x0c\xc6\x9a\x56\xa3\xee\xd7\xa8\x58\xa2\xc9\xe0\x77\x34\xcb\xb8\x2f\xf8\xaf\xd3\xa2\x80\x25\xa8\x59\xd9\x5a\x05\xa4\x41\xf8\xd5\xd6\x0a\x4e\x44\xfb\x06\x40\x33\xe2\xcb\x73\x70\xb2\x83\x4c\x13\xab\xaa\x12\x75\xe0\xb0\x31\x65\x77\x8a\x95\xf9\xd4\xe6\x51\xa2\xa5\xf4\xa8\x46\xae\x14\xb6\x83\xc9\x2a\xcc\x35\x24\x4a\xf2\xf2\x7c\xda\xb4\x26\x9a\xe6\x5c\x4e\x17\xf7\x7b\x66\xcc\x8a\x43\xbf\xf8\xe3\x68\xd9\x6d\x86\x97\x46\x4b\x43\xb7\xae\xe3\x70\x45\x3d\x9b\x19\x90\x78\xc7\x23\x12\x2d\x62\x0b\x40\x4c\x06\x33\x65\x39\x90\x35\xa0\xaa\x81\x94\xc7\xe7\xa4\x14\x28\xa3\x42\xc2\x65\x2c\xd4\x02\x19\xc3\xcb\xec\xa3\xae\xf2\x69\x2f\x9a\x98\xdf\x39\x3c\x88\x29\x73\x64\x93\xd0\xe3\x80\x57\xf3\xf1\x38\x26\x9e\x6d\x99\x05\xa9\x7b\x76\x98\x74\xcd\xa8\xf1\x99\x34\x24\x72\x65\xa2\x32\x80\x5a\x4d\x04\x5b\x90\x77\x6d\xc6\x16\xbc\x2c\xd1\xe3\x12\xd1\x16\x30\xc3\xa0\x31\x3d\xd2\x5a\x25\x08\x3d\xf8\xdd\x9e\x89\xb2\x79\x6a\xa0\x0c\x9e\x1a\x33\x70\x5d\x04\xf2\x44\x7e\x4f\x97\x8c\x3c\x3c\x21\x83\x3f\x4f\x2e\x2f\x7e\x1c\x24\xfc\x94\xdd\x2a\x39\xea\xc6\x59\x94\x84\x96\xe4\x6e\x52\x8b\x0d\x74\x38\xc6\x30\x22\xae\x40\x3f\x0f\x91\x5c\x26\x29\xba\x58\x32\x4c\x60\xce\x4b\x69\xcd\x03\x50\x6f\x4a\xc8\x69\x9e\x43\x88\x56\x33\x0d\x9d\x8b\x6f\x90\x7c\x56\xf0\x72\x21\x6d\x6b\x3e\x9b\x7a\xb0\x96\xd3\x07\x4e\xfa\x8e\x27\x76\x72\x42\x06\xff\x43\x13\xd6\x80\x3c\x7a\x04\xc3\x0c\xc9\x37\x2a\x76\xf5\xe6\xf4\xfb\x41\x13\xf1\xa4\x34\xbe\xff\xca\xea\x50\xf0\x07\x40\x4e\xd2\x37\x7d\x4e\x64\x45\xad\xf3\xcf\xaa\xf2\x18\x9d\xb4\xc4\xde\x4c\x6b\x66\x47\x1a\x03\x88\x40\x2a\xd0\xf5\x1b\xc7\x6f\x67\x7f\x85\x93\x0f\x50\x40\xc2\x76\xe2\x42\xde\x60\xe7\xe9\xe4\xb1\x37\x6f\x77\x24\x08\xd5\xff\x6a\x66\x08\x3b\x38\x20\xe7\x10\x69\xd2\x41\xa6\x41\x18\x4a\x48\xa0\xac\xcc\x1d\x79\xee\xcb\x4b\x1a\xdc\x3f\x65\x8e\x1a\xc5\x49\xca\x67\x23\x2a\x17\xdc\x49\x2d\x0a\x37\xcd\x7c\x11\xfa\x86\xf9\xfd\xa6\xd4\xed\x03\xb2\x3a\xc9\x9b\xb9\x1d\xf8\xef\x46\xdc\x25\xbb\x53\x3b\x09\x3b\x28\xe0\xf4\x21\x8e\xb6\x3e\x8f\xa4\x01\x70\x6b\x1d\xc0\x05\x5f\x8a\x0d\xb0\x68\xc3\xc6\x25\x79\x29\x36\x2e\x78\x61\xb7\x67\x53\x44\x7b\x61\x35\x48\x18\x7e\xec\x25\x89\x82\xcf\xa6\x9b\x6c\x2a\x57\x33\x7c\xc0\x86\xf5\x7a\x1c\x9e\xd2\xb1\x2b\xa1\x50\x2a\x1e\xd6\xeb\x11\x99\x90\x90\xe2\x9b\x32\x46\x04\x05\xef\x08\xb8\x43\xe0\x30\xb4\x8b\xb9\xc6\xb8\x32\x36\x72\x8a\x91\xb6\x9a\x4d\xc9\x99\xd1\xf8\xee\x13\x0e\x12\xdc\x50\x87\xc7\x28\x3e\xba\x76\xb5\xa3\xc7\xd8\x7b\x47\x41\xa9\x87\xa1\x18\x8e\xce\x0a\x29\x39\x04\x0a\x9b\x95\xe8\x1c\x64\xac\x50\x49\x01\x3d\x04\x52\x47\x47\x66\x8b\xc7\x64\x70\xd7\xf0\x31\x8b\xa3\x4b\xa2\xf4\x32\x6b\x71\xcb\x72\x32\xdb\x36\xbd\x5e\xbe\x63\x5b\x5c\x9e\x0d\xc6\xd6\xfe\x70\x4d\x6e\xd9\x56\xaa\x5a\xdc\xc2\x99\xcb\x99\x8a\x99\x9c\xb6\x00\xa7\xaf\x87\x6b\x13\xba\x8e\x7f\xd5\x0c\xd3\x92\x2b\x6b\x26\x77\x4d\x8e\xf5\xb1\x7d\x7b\xfd\x62\xf2\xe4\x7f\xef\xd9\x47\x51\xfe\x70\xfd\x9d\x1b\x49\x2c\xdc\xb9\x13\x19\x46\x46\x89\xa2\xb8\x28\x5d\x8d\x0f\xb1\xbf\xda\x0e\xf4\xc5\xe0\xa4\x79\xf4\x45\x07\x65\x2f\xe2\x81\x60\xe9\x5b\xb3\x68\x53\x56\x66\x22\x67\x76\x48\xf1\x9a\xbf\xa2\xab\x32\xbb\x61\x92\xac\xea\x02\x2f\x2b\x88\xfc\xa6\xb3\xae\xa5\xd4\xe5\xde\x5e\xbe\xd2\xa7\xa3\x80\xba\xad\x5a\xbb\x96\xab\x62\xe5\xdb\x3a\x82\x0d\x59\xd5\x85\x5f\x25\x04\x50\x98\x66\x37\xb5\x58\x42\x04\x48\xf4\xc3\xd4\xf8\x2d\x04\xaf\xce\x0b\x51\x93\x33\x2c\xbd\x7e\x4a\x68\x55\xc9\x71\x98\x46\x0d\x3d\x4e\xb9\x24\xa7\x6f\x5e\x82\xbb\x91\xf1\x5a\x20\x7a\x20\xa6\x71\x89\x17\x6f\xdc\x05\x8c\xf4\x9a\xce\x86\x7f\x1d\xac\xea\x62\x70\xa4\xa7\xfd\xa9\xed\xff\x0e\x59\x80\xb8\xe6\x78\xcd\x40\x75\x35\x3d\xa5\x31\x19\x7c\x98\x15\xb4\xbc\xb5\xa6\x86\x0d\x37\x42\x94\x4b\x41\xe6\xb6\xe0\xa2\x32\xc1\x94\x8e\x9f\x5f\xd5\xfb\xb4\x2d\xba\x9f\x2b\x53\xfc\x6d\x5d\x74\x79\x08\xaa\x7a\xd7\xb5\xf1\x20\x78\xb8\x51\x65\x52\x0a\x7f\xff\x8d\x01\xdf\x82\x96\x39\x61\x77\x95\xfe\x0f\xbc\xcb\xc6\x8e\xb7\x25\x60\xa3\x46\xef\x3f\xb4\xb1\xd6\xc4\xaa\x00\x1b\x18\x3a\xe0\x85\x89\x6d\x78\x71\x77\xa7\x28\x6c\xc5\xaa\xbd\xc3\xb7\x13\x80\xc1\x80\x0b\x4c\x49\x18\x66\xfa\xac\x68\xc6\xc6\xe6\xd1\x98\xba\x27\x3f\x1c\x66\xc3\x9c\xe4\xd9\xb5\xd7\x2e\x76\x4b\x13\x3a\x97\x04\xa2\xd8\xac\x21\x4e\x2f\x3d\x7a\xe1\xd8\x16\xad\xb3\xfc\x1f\xc8\xd3\xc3\xff\xf5\x3b\xf2\xf1\xa3\x1e\xf9\x54\x32\x5a\x67\x37\xc3\x83\x77\x3f\xc9\x9f\xde\xfd\xf4\x7e\x38\xfa\xeb\xa7\x6f\xff\xf0\xd5\xe0\xa7\x9f\xfe\xeb\xe7\xf7\x07\x23\x48\x76\xd7\x52\x96\x7a\x3e\xea\xed\xe5\x4b\xc2\x81\x7f\x42\x79\x93\xe5\x56\x5d\x05\xa4\xdb\x04\xe4\x00\xb9\x53\x62\x50\xaa\x6e\xe5\x47\xe6\x12\xc4\x6d\xe8\x56\xf3\x97\xb7\x25\xb2\x48\xf0\xd6\x19\x4f\x3c\x99\xdd\xb0\x25\x1d\x13\x29\x08\x95\x80\x33\x78\xa3\x54\x15\xce\xcc\x4c\x62\xf0\x5f\xef\xe8\xe4\x97\xd3\xc9\x7f\xbe\x37\xff\x3d\x9c\xfc\xfe\xf1\x74\xf2\xfe\xeb\xa3\x83\x83\xc1\x28\xc4\xbe\x0b\xfa\x06\x20\x02\xae\x58\xc1\xa5\x22\x94\xcc\xd9\x86\x00\x01\x67\xa2\x30\xe2\x7a\x41\xb3\x5b\x42\x57\xea\x46\xd4\x5c\x71\x26\x0d\x9c\xe5\xca\xf1\x6f\x25\xd0\x9b\xf5\x1b\x3f\x38\x98\x12\xf2\x8a\xdf\x32\xb2\xa4\xbc\x50\x26\x71\xab\xf3\x10\xd5\xc3\xad\x0a\xae\x86\x83\xa3\xc1\x98\x3c\x19\xbd\x3b\x7c\x1f\x44\xa0\x50\xc9\xc8\x00\xeb\x0d\x3c\xca\xa8\xf3\xb5\x23\x6d\xbf\x41\x4b\x80\x03\xbd\x28\x7a\xa2\xe4\xb1\x55\x51\xb5\x2a\xc7\x61\x98\xe6\x9a\x03\x0d\xdf\xb1\x3e\xe9\xde\xc3\x38\x8f\x54\x90\x97\x62\x83\x73\x36\x7f\x1b\xc8\x3b\xbc\xa6\x60\x45\x00\x54\x4e\x2f\x00\x58\xb6\x60\x85\x0c\xa4\x67\x49\xe6\x98\xca\x8b\x20\xaf\x22\xca\xd7\xba\xe0\x70\x94\x32\xdf\xef\xef\x28\x13\x10\xed\x0c\xc3\x8b\x40\xfe\x21\x18\xc6\x3b\x11\xba\xcc\xd2\xc1\xb0\x9a\x6f\x05\x18\xee\x3e\x11\x66\xb2\x5e\xba\x72\x68\x80\x2e\xf3\x62\x5f\xc2\x2f\x33\x97\xe8\x5a\x0b\x3c\xbc\xb4\xb4\x26\x32\x26\x25\xcb\x9f\x6d\x6d\xf5\x3f\x41\xc3\xf5\x87\x98\x12\x6b\xb6\xe0\x52\x33\x68\x62\x55\x9b\x41\xe0\x08\x6a\x8b\xd5\xe1\x02\x82\xc6\x16\xf1\x54\xff\x57\x05\x89\xce\xb0\x31\x0b\xb5\x6a\x80\x6f\xc0\x23\x9a\xd5\x53\x42\x5e\x87\xfb\x03\x74\x2d\xb2\x6c\x55\x93\x38\x02\xc3\x37\x14\x37\x60\xe1\x0a\xf4\x19\x04\xd7\x8a\xf6\xb0\x66\x2b\x85\x31\x1a\xfa\x3a\xd8\x50\x58\x47\xdb\x98\x59\x08\x5d\x63\x49\xd4\x86\x67\x46\x8e\x38\x38\x08\x16\x21\xa3\xba\xe6\x5f\xb4\xa8\x65\x4c\xa4\x64\xb6\x9a\x81\x48\x40\x66\xcc\x06\x66\x20\x8c\x1d\x46\x9b\x12\x10\xbe\x30\x6a\x5e\xea\x0b\xc2\xb6\xa6\xc7\xc1\x32\x51\x5b\x17\x7f\x6c\x4d\xcc\xfe\xa2\xef\x13\xe3\x83\x8a\xe8\x74\x9a\xb0\xb6\x5a\x8c\x53\x8c\xe6\xc9\x1c\xcb\x20\x46\xb0\x4a\xd4\x0a\x96\xf0\x1c\x57\xf0\xc4\xd9\xfc\xd9\x9c\x51\xfc\x74\x09\xa5\xe4\x87\x46\x3c\xce\x5a\x4d\x97\xfe\xb3\x8b\x19\x5f\xab\xe9\xeb\x8b\xb7\x57\xe7\x1f\x2e\xcf\xdf\x5c\x5c\x5e\x7f\x78\xfe\xf2\xea\xf4\xd9\xab\xf3\xe7\xf8\x66\xec\x24\x1e\xfd\xde\xd4\x2b\x66\x2f\xe3\x8b\x12\x9d\x91\x21\x7f\xd3\x81\x89\xab\x80\xe8\xe5\xdc\x6e\x53\x7c\x0c\x08\x9b\x86\x47\xee\x84\x38\x5f\xa8\x21\x9b\x66\x60\x89\xfc\x0f\x32\x69\x33\x7c\x89\x18\x94\x11\x39\xd8\x25\x31\xed\xf1\xad\xb2\x16\x49\x93\xc5\xd2\x0f\xcb\xc1\x6d\xba\x91\xd9\x81\xfd\x79\x77\x87\xfb\xfb\x34\xf8\xa8\x8f\x03\x94\x4a\x36\xd5\xe7\x19\x84\x66\x6f\xbe\xd7\x8c\x5d\x6b\x40\x7f\xe8\x82\x5b\x75\xa7\xf9\xb5\x6d\xa0\x99\x72\xb8\x0e\xc2\xc1\xee\x1d\xdf\x45\x1e\xb6\x48\xb0\xad\xd5\xf0\x08\x20\x2e\x00\x4d\x33\x44\x00\xa3\x5b\x0a\x2d\x34\x96\x39\x46\x43\x85\x57\x81\x81\x7d\xc1\x96\x6e\x84\x7e\x05\xab\x6a\xec\xe0\x97\xcd\x49\xf6\x4e\xbe\xcd\x08\x31\x10\x76\x1c\x8d\xd9\x86\xfc\x58\xd0\xa9\x4a\x54\x16\xe8\xf7\x96\xb1\x4a\x26\x5b\x02\x35\x09\x40\x0f\xcd\x99\x66\xe3\xdd\x69\xd6\x07\xb6\x10\x19\x2d\x50\xc6\xf4\x52\xb8\xe3\x98\x62\x82\x9e\x90\x27\x7a\x33\xf7\x45\x0c\xb9\x63\x9a\xa0\xbc\x1e\x4d\x84\xb9\x5b\x48\xaf\x00\x38\x88\xbd\x33\x4f\x71\xc3\xf1\xee\x1e\x41\x7b\xbd\x43\xed\x82\x07\xbf\x93\xca\x43\x27\x26\x36\xa5\x85\xfa\x8e\x6d\x35\x6f\xd8\x4d\x6f\x96\xe2\x7e\xb8\x36\x84\x84\x25\x8d\x6b\x77\xce\xa5\x4f\x9f\xa2\x2f\x6a\x04\x1b\x85\x4b\x92\xe5\xb0\x95\xbe\x15\x5a\xa8\x89\x1b\x8a\x21\x39\x7f\x5b\xe1\x93\xe3\xf1\x50\x90\x02\x1a\x9b\xef\xd2\xf7\xb5\x6f\x61\x7b\x49\x86\xb7\x42\xc0\xa0\x9f\x23\x38\xf9\xd0\xb9\xd6\x34\xa4\x26\xbc\x5a\x5d\xdc\x3a\x3c\x29\x73\xfd\x44\x6f\x4a\x56\xcb\x1b\xee\x10\xe2\x70\xb4\x0e\x73\xae\xc7\xb8\xc0\xab\x3c\x1a\x58\x97\x8c\xe1\x8c\x3b\xd7\xe2\xbc\xcc\xbd\xaf\x50\xe7\x6c\xa0\xe9\xc0\xa5\x28\xed\x6c\x14\xd1\x45\xf7\x56\x37\xa8\x26\x9f\x15\xe8\xf3\xeb\x50\x0f\x32\x51\x6d\x2f\x8c\x88\xd7\x20\xcf\x5f\x23\x52\x85\x3a\xa1\x5e\xc6\x38\xe2\xb5\x8e\x8d\x31\xfb\x01\x3f\x64\x53\xc0\x98\xd3\x04\xfe\xe8\x91\x2e\x94\xa9\xba\x30\xe4\xce\xa6\x4b\xa6\xe8\x77\x6c\x3b\x8a\xc8\xfc\x39\x9b\x89\x15\xe4\x27\xd7\x37\x17\x72\x11\x1e\x0a\xd7\x2c\x87\x79\x56\x21\x48\x75\x2b\x56\x16\x70\x31\x17\xab\x59\xc1\xa0\x44\x40\xf1\x56\x2b\x01\xf2\x11\x57\x63\xab\x17\x00\x62\x9f\xf3\x9a\xa1\x94\x88\x67\xc1\xf6\xe0\x98\x2b\x30\x13\xfa\xd6\x40\x80\xc1\x05\x66\x79\x43\xb1\x6d\xd2\x32\x62\x6c\x2c\xaf\xa5\x22\xe1\x60\xad\xbc\xb1\x23\xe2\xdd\x88\x07\xf1\x96\xb4\x3e\xc7\x2e\x2c\x4e\xae\x08\xa5\xfe\x10\x68\x73\xcf\xd3\x1d\xfe\xef\x1b\xe7\x26\x92\xc4\x64\xdf\x7b\xa3\x61\x11\x1c\x12\xf2\x5f\x9a\xd7\x38\xd3\x8b\x80\x3e\x25\xf0\xbe\xcf\x56\x4a\x89\x52\x37\xf1\x94\x1c\x7c\x6d\xd0\x07\xcd\x8f\x5f\x1f\x8c\xc8\xc7\x8f\xc1\x90\xc3\xe2\xbe\x5d\x68\xed\x19\x7c\x08\x3d\x77\xbc\xc3\x19\x38\x94\x0c\x47\xa1\xa3\x4e\x26\x4a\x29\x0a\x36\x35\x01\x16\xc3\xc1\x19\x78\x18\x03\x02\x2e\x0c\x6e\x49\xcb\x15\x2d\x8a\x2d\xc9\x31\x34\x65\xc3\x66\xa4\x66\x98\x72\x5d\xb3\x08\x83\xd1\x71\x8c\xa1\xbe\x63\x59\x56\xd5\xa0\x39\xd9\xc3\xe4\x11\x0e\x5f\xc4\x26\x5e\x69\xe3\x5e\x0a\x4d\x9f\x8d\x77\xe9\x73\x4f\x6d\x6b\xdc\x4b\xb1\x66\x03\x3c\x9d\xad\x09\x8d\xc2\xb1\x06\x1c\xdf\x33\x94\x57\xf0\x59\x64\xe5\x82\x2e\xc2\x01\xea\x23\xcd\x25\xfe\x1c\x30\x67\x13\x2b\xe5\xa0\x96\x5c\x94\x36\x92\xdf\xb1\x49\xd3\xb6\x8b\x5b\xaa\xa7\xe4\xdd\x9e\x28\x1e\x78\xee\x91\x01\xfa\x6e\x44\xcb\x71\x70\x40\xce\x97\xab\x42\x8b\x2f\xb4\xd6\xac\xca\x2d\xdb\x6a\xa1\x48\x4a\xa6\x99\x3b\xea\x92\x1c\xdd\x30\x56\x44\x43\x6c\x68\x71\x7f\xd4\x05\x4e\x75\x13\xdf\xb1\xad\xfc\xd0\xbe\x07\xe3\x35\x74\xca\x58\x48\xc4\x80\x50\xaf\x26\xcc\xcc\x41\xd8\x72\xf9\x26\x84\xd5\x1a\x8e\xe2\x03\x17\xec\x15\x8c\x6e\x10\x9e\x09\x93\x00\x5b\xd1\xa4\xf5\xdd\x8f\xf8\xb9\x2e\x33\x64\x81\x4b\x9a\xae\x59\x98\xa4\xfe\x88\x16\x2f\x97\xb4\x56\x2f\x0a\x21\xea\xe7\x7c\xcd\x73\x36\x8c\xee\x16\x80\xe9\xa7\x33\x39\x84\xee\x46\xe3\x9e\x92\x88\xcb\x0c\x61\xc6\x4a\x61\xa8\x83\x9f\xee\x9e\xcc\x2e\x06\xe4\x31\xc1\xe6\xc8\xb7\xe4\x90\xfc\x91\x0c\x9e\x0d\xc8\x11\x19\x9c\x0e\x82\x71\x5a\x4d\xb7\xe6\xb5\x4d\x32\x6c\xdd\xc8\xb4\x66\x15\xa3\x6a\x08\x53\x18\x85\xdd\x74\xfb\x03\x7f\xf2\x4f\x35\xf2\x25\x07\x5f\xfb\xed\x4d\xbc\xd9\x5f\x1f\xb4\x1c\xd2\xfb\x9c\x89\x1e\x17\xa9\x11\x6c\xd6\xc9\x33\x03\xd6\x4b\x08\xc2\xd1\x4d\x05\x12\x83\x8b\x92\xc0\x0a\x7a\xbc\x61\x7b\xc0\xed\x3b\x90\xdf\x69\xdf\xc3\xdc\x60\xeb\xfa\x9d\xb1\x48\xac\xfd\x66\xd4\x88\x25\xde\xd7\x86\xf5\x84\xf5\x22\x68\xa2\x91\x80\xa1\x4f\xde\x63\x8d\xd5\xbc\xb8\xb1\xf2\x50\xe0\x18\x94\xd7\x74\x31\xb1\x47\x9b\x7a\x66\x9a\x9c\xbe\xb8\x3e\xbf\x0c\x98\x4d\xe0\x97\xc3\xe6\x78\x69\x90\x2c\x40\x83\x88\xb8\xac\x42\x90\xc2\xa0\xa2\x76\xde\x78\x8d\x65\xbf\x2f\x1b\xda\x87\x7c\xbd\x96\xdd\xea\xfe\x02\x4f\xf6\x1d\xcf\xd5\xbd\xdf\x1f\x00\x33\x01\xb5\x07\xb2\x6b\xa2\x24\xa6\x3d\xbd\x3c\x66\x61\x60\x5d\x15\x5b\x56\xa2\xa6\x35\xd7\xef\x6b\x28\x9a\x10\xea\xf4\x68\xa1\x68\x32\x25\xe4\xa2\xd4\x65\x05\xb6\xec\x44\x5e\xcf\x6e\x69\xf6\x10\x55\xfa\x02\xf6\x32\xd4\x44\x81\x46\x8c\x2f\x97\x2c\xe7\x54\xb1\x62\x4b\x6e\x4d\xea\x6d\x08\x79\x95\x4d\x91\xa6\x8f\xe0\x10\x45\x4f\xa1\xef\xb8\xb4\x61\x4a\x5a\xe0\xae\x51\x5a\xe7\xd2\xe4\xbc\xdc\x02\xca\x05\x9c\xca\x52\x6c\x08\x9d\x89\x95\x8a\xf4\x00\xa1\x3a\x16\xf9\x5c\x8f\xab\x6d\x83\xa5\x29\x29\x45\xbd\xa4\x05\x79\x7e\xf1\xda\x02\xc0\x78\x9e\xd2\x2c\x60\x9e\x83\x74\x4c\x0b\x48\x11\x11\x48\xe5\x03\xd0\x46\x0c\x62\x39\x7b\x10\x28\x77\x7f\x2b\xfd\x6c\x53\x3d\x4b\x22\x47\x35\x2d\x60\x6e\x50\x4f\x9d\xad\xa4\x81\x66\x6c\x8d\xc5\x05\x0c\x1b\x38\x09\x0c\x19\xe6\x73\xfb\xb7\x8d\x14\x8e\xb2\x81\xee\x1c\x1a\x80\xbf\x9f\x41\x6f\x91\x02\xd9\x34\xd8\x95\xa7\x20\x01\x8d\x31\xb6\x83\x08\x41\x13\x43\x60\x0e\x6f\x7c\xb7\xa3\x3f\x39\xc1\x5b\x34\x34\xc0\x77\xc2\xbc\x3f\x48\xaf\x97\x8a\x73\x33\x06\x10\x49\x7b\xe7\x8e\xd5\x12\xe6\x40\x73\x0f\x77\x06\xd6\xef\x18\x8d\x71\x24\x04\xee\x39\x0f\x3c\xc6\xdc\x08\x77\x92\x97\xa6\x68\x64\xbc\xef\x4b\x62\xc0\xfd\xa7\x4c\x00\x01\xff\x80\x2e\xc4\x36\x56\x75\x78\xf0\x53\x79\xb0\x5c\x8c\xc9\xe0\x27\x13\x37\x63\x8a\x25\xed\xe1\xfa\x9b\x77\x9e\x88\x94\x84\xb3\x9a\x66\xb7\x4c\xb1\x1c\xc6\x80\x7b\x19\x72\x2c\xef\x9e\x1e\x1e\xfe\x3f\xcd\xb5\xc0\x8f\x8f\xdd\x8f\x4f\xfe\xdf\x20\xb2\xca\x37\x78\x95\x9d\x3b\x8e\x41\xfa\xb5\x31\xfa\x68\x5e\x3f\xf0\xcd\xef\xbf\xd6\x50\xd1\x59\x65\x76\x2e\xf0\x99\xa8\xb6\x5d\x26\x16\xe4\x72\x56\x92\x99\xd7\xe7\x47\xb0\x6f\xeb\x1a\xf6\x51\xe8\x7a\x9f\x9a\x42\x6b\x97\xd4\x12\x65\x89\x38\x4c\xe4\x36\xd9\x75\x20\x10\x19\xb4\xe1\xfc\x0f\x8f\xbe\x43\x28\x30\x77\xb6\x16\xfc\x72\x5e\x33\xc0\x17\xb1\x46\x2e\xbd\xff\xc8\x18\x00\xc0\x2d\x2a\x4d\x41\x3f\x6a\xae\x57\x44\x2f\x68\xa6\x1c\xd2\x7c\x05\x55\xe4\x96\xa3\xcb\x1e\xb4\x32\x63\x85\x28\x17\x12\xb3\xa9\x79\xf4\x55\xb0\xf7\x7c\x4d\x22\x8c\xd5\xb1\x7d\xc2\xf4\x6b\x99\xd1\x52\xdf\xfc\xec\x8e\x65\x2b\x7d\xae\x22\xf8\x0d\xab\xe1\x86\xa7\xd5\x02\x82\x56\xb5\x58\xd4\x74\xb9\xa4\x8a\x67\x04\xbd\x6b\xf0\x4e\xdd\xbb\xd1\x97\xb0\x5a\x1d\x4e\x02\xa8\x6c\x3d\x33\x99\xa6\x82\x34\x68\x2d\xbe\x5e\x33\x0a\x20\x99\xa0\x5f\xd5\x1e\x03\x05\xe9\x6d\x30\xf8\xf8\x91\x1c\x1e\xfb\x3c\x8e\x76\x28\x1d\xc2\x48\xf7\xb0\x2c\x16\xed\x6e\x5d\x48\x4f\xc3\x09\x0e\xca\x25\xdb\xf2\x6b\xf4\xad\x96\xf1\x3f\x7e\xf4\x23\xd5\x3f\xc4\x46\x47\xba\x16\x3c\x37\x52\xae\xe4\x6a\x85\x37\xbe\x89\x5c\x06\x9e\xc1\x80\xae\x48\xb1\x64\x8a\x2f\x59\xc0\xf8\x58\x62\xb3\xcd\x2d\x98\xd2\xe4\xae\x39\xdd\xdc\x5f\x08\x0e\xc4\x50\xd4\x24\x5f\xd5\xd6\xb0\xcf\x4b\xae\x38\x2d\x48\x21\x68\x3e\x36\x36\x0a\xb4\xfe\xd9\xe6\x72\x46\x0b\xab\x68\xa3\xca\xda\x0a\xf1\xe8\x68\x92\x04\x43\xa4\x19\x1d\x9f\x03\xa6\x0b\x73\xae\x0f\xf1\x55\xa4\x3f\x66\x20\x4a\xcb\xd0\xd0\xe1\x21\xaf\x34\xd1\x8d\x81\x0b\xd7\xe3\xd3\xfc\x1a\x5f\xa3\x7b\xd7\xa1\xe6\x93\xd6\x68\x45\x31\x56\x77\x7d\xe9\x1d\x92\x35\x2d\x56\x4c\x76\x5a\x0b\xb9\xfc\x9e\x6d\x8c\x3f\x5a\xb4\x29\x0f\xbb\x92\xdb\x45\x5a\x26\xf7\x3f\xb7\x77\x89\x7a\xa1\xbc\x8a\xdb\x69\x99\x53\x7d\xdb\xd9\x4c\xe7\x00\x60\x94\xf3\x5c\x33\xa0\x78\x0a\xc7\x68\x60\x45\x30\x3b\xf0\x1e\x61\x6b\x56\x6f\x31\xd5\x30\x97\x0f\xac\x34\x61\x00\x70\x2c\x3b\x01\xf7\x83\xee\xf8\x43\x38\xa1\xb1\x1b\x62\x00\x43\xd7\x80\x40\xb9\x07\xbc\xc2\xc3\x13\x9b\x2b\x55\x53\xb3\x5b\xc5\x80\x49\x09\x7c\xfd\x9a\x58\xcd\x4d\x76\xe7\x9e\xac\xc4\x15\xab\xd7\x3c\x8b\x90\xff\x10\x69\x38\x80\x2f\xde\xfd\x4c\x05\x18\xa4\x69\xfc\x9f\x87\x29\x13\x5f\x04\x41\xda\x13\x50\xb4\xcb\x7a\x78\x1f\x0c\x35\x4f\x72\x1d\xc6\x24\x17\xc2\x07\x51\x8c\x91\xb7\xd4\x5e\xc4\x57\xd2\x56\x17\x37\xa0\x94\x1b\xaf\xef\x72\x7b\x11\x2d\xe0\x7d\xf4\xc4\xd1\xa0\xa0\xfa\xd9\x36\x2b\xd8\x87\x77\x87\xef\x3b\x32\xa6\xf5\x42\xc2\xfd\xfb\x8f\xff\xc9\xfb\x04\x50\x86\x01\x69\x76\x46\xe5\x5d\x38\xcd\xed\x42\x01\x54\xf3\x5a\x0b\x5d\x60\x50\x73\xf6\xe9\x26\x6c\x33\xb8\xfd\xfd\x26\xc0\xcd\xe9\xe1\xdf\x1f\xbb\xd9\x45\x16\xf7\x80\x6f\x6e\x64\xb6\x6b\x56\x35\xe5\x93\x90\xd8\x91\xb6\x15\x3c\xe3\x97\x08\x27\xc6\xc1\xb5\xc6\x67\xb0\xc3\xe4\x6a\xe4\x46\x6c\xc8\x9c\x4a\xac\x5c\xd1\x05\x26\x38\x82\x46\x40\x2d\xd1\x50\xdb\xb6\xd6\xf2\x49\x73\x29\x2d\x18\x87\xef\x16\x85\x62\xff\x67\xdf\xd4\x37\x57\x5e\xc9\xfa\x5a\xac\x99\x85\x45\xab\x23\x10\x0c\xd7\xec\xbe\xe5\x6b\xb7\x13\x56\x8e\x5d\xd8\xb5\x7c\x49\xa8\x5e\x46\x36\x8b\xd2\xcd\x49\x82\x71\x9b\xf0\xe6\x46\x29\x02\xf7\xe1\x4f\x76\xc8\xac\x1d\x72\x65\x3a\x7d\xda\x5c\xd4\xe7\x34\xbb\xf1\xd1\xd7\x81\x11\xa7\xc4\x1e\x86\x11\x5a\xd1\x8e\xb6\x8c\x87\xe5\x89\xe6\xc9\x3e\x1d\x3f\x38\x38\x20\x57\x17\x6f\x2f\xcf\xce\xc9\x8b\x97\xaf\xce\x8f\xd0\x5d\xfc\xe0\x2f\xf2\x00\xfe\xf1\xc1\x4e\xf5\x03\x17\xd3\xbf\x48\x5d\x5a\x0b\x2e\x68\x81\x1a\x66\x23\xf2\xf4\xf0\xc9\x53\xd8\x66\x30\x11\xf2\xd5\x92\x5c\x5c\x91\x53\xf0\x43\x94\x53\x72\x5a\x14\x68\xad\xc2\x24\x49\xf5\x5a\xcb\x19\x07\x07\xe4\xad\x74\x80\xa0\x04\xc3\x59\x51\x02\xe0\x92\x2c\xf4\xf3\x59\xe2\x3a\x53\xf2\xec\xea\xf9\x04\xa1\x2d\x0b\x9e\xb1\xd2\x3a\x57\x21\xc7\xaf\x5b\x9a\x43\x8e\x15\xc3\xe3\xbf\x7a\x79\x76\xfe\xfd\xd5\x39\x99\x73\x7d\x31\x3c\x18\xac\x24\x06\x1a\x67\x4a\xcb\x92\x9a\x09\xae\x55\xce\xaa\xe1\x40\xff\x13\x45\xd7\xb7\xd7\x2f\x7e\x07\x21\xa9\xce\x71\xbe\x5a\xa9\x83\x8b\x95\x02\x38\x45\x70\xf3\xa0\x19\x48\x94\x30\x22\x97\x19\x07\xe4\xca\xe5\x72\x55\xea\xb5\x0d\x52\x8f\x36\x73\xaa\x9e\xd9\x0a\x05\xbf\x65\xe4\xe7\x92\x4a\x79\xf3\x33\x30\x6b\x3f\x67\xb5\xd0\xff\xae\x59\xc6\x38\x30\x70\xe0\xe1\x45\x35\x63\x6b\xd7\x26\x2b\xa8\x94\x04\x13\xa2\x56\x3e\x6f\x12\xaf\x09\xad\x17\x6b\xe3\x2b\x66\x0f\x37\xe4\xe9\xb1\xee\x6b\x36\xfd\x91\xc2\xcc\x89\x35\xa3\x9e\xe5\x0d\x53\x22\xc0\xc8\xc5\x4a\x11\x76\x57\x09\x69\x98\xdf\x25\x56\x23\xac\x54\xbc\x6e\xe2\x66\xba\x51\x86\xda\x38\x4c\x1d\xf3\xff\x67\xef\xef\xdb\xd3\xc8\x91\xfd\x71\xf8\xff\xbc\x0a\x65\xce\xf9\x2d\x30\xc1\x18\xf0\x43\x9c\x78\x3c\x59\x8c\xb1\x83\x9f\x03\xd8\x49\x9c\x64\x73\x9a\x6e\x01\x1d\x37\xdd\xa4\xbb\x31\xc6\x3b\x39\xaf\xfd\xbe\x54\x25\xa9\xa5\x6e\x35\x60\x67\xe6\xec\x7e\xcf\x7d\x7c\x6d\x76\x6c\x90\x4a\x52\xa9\x24\x95\x4a\x55\x9f\x12\xec\xc1\x50\x24\xc5\xc4\x47\x89\xee\x54\x5f\xc2\xe4\x79\xc9\x95\xbe\x44\xc6\x34\x1e\x05\x98\xdf\x4e\x1f\xbd\x44\xcf\x8b\x03\xc9\x2b\x19\x5e\x10\x49\x42\x24\xc0\x39\x13\x48\xb2\xe8\x97\x0b\xa9\xbc\x68\x14\xbb\xbe\x15\x2b\x79\x66\xda\x51\xe0\x59\xb1\x96\xb6\x4f\xde\x07\x24\x67\x26\x61\xc0\x6e\x49\x78\xa3\x4d\x02\xa3\xfa\xd4\xa7\x03\x37\x8e\x5e\x33\x42\x6b\xe4\x52\x94\xb2\xc8\x98\x32\xf5\xd5\x8d\x30\xe1\xad\xc5\x95\x72\x9e\xa3\x43\xe7\x40\x6a\xfc\x08\x1d\x24\xbd\x29\x31\x8b\x86\x7f\x17\x80\x23\x76\x34\xed\xcb\x5e\x16\x23\x8a\xfc\x84\x84\x8a\xc8\xc6\x49\x30\x49\xf8\x07\x2e\xab\x64\x0d\x26\xc5\xc5\x51\x06\x3e\xa4\xd0\x88\x00\x1d\xd4\x8a\xf8\x46\x0c\x59\x35\xb8\x21\x91\xf1\x58\x4e\x2f\xf4\x0c\xc3\x84\x65\xcf\x60\x26\xd8\xd5\x8a\x0b\x0b\x1e\x21\x2a\xff\x78\xb3\x6d\x1f\x5a\x3e\x9c\xc6\x4c\x6b\x4f\x72\x22\x5a\x73\x12\x4e\xc1\xdb\x8c\x6d\xac\xb3\x20\xbc\xe5\xe3\x0c\xf9\x2d\x6e\x86\x56\x61\xdf\x9b\x83\x11\xb7\xef\x51\x6c\x99\x4d\xa7\xe5\x41\x4e\x76\x8b\x64\x44\x50\xe6\xdb\xb7\x7c\xd2\xbe\x6c\x26\x33\x90\x3e\x9b\x74\x11\x36\x06\xe9\xb6\x2f\xd4\x2d\x59\x48\x81\xb2\x35\xcb\xad\x90\xec\x49\x21\x11\x57\x1b\x36\xe8\xf6\x85\x70\xde\x04\x49\x15\xb3\x4e\xda\x17\x15\x98\x22\x79\x53\x11\xf1\x91\xed\x8b\x04\xae\xe2\xff\x70\xc6\xfe\x0f\x67\xec\x7f\x18\x67\x8c\xc9\xe5\x52\xa8\x31\x01\x72\x91\x81\x1b\xd3\x97\x84\x16\xbe\x66\xac\xa4\x89\x38\xc4\xe9\x58\x3e\x19\x84\xd6\x58\x82\x89\x88\xb0\x41\xe5\x68\xf2\x9d\x60\x56\x26\x93\x80\x1d\xc4\x4e\x12\xe6\xc9\x93\xcd\x33\x4a\x3c\xbe\x07\x32\x8e\x31\x55\x15\xfd\x51\x66\xb4\xe0\x79\x4a\x5e\x6f\xca\xf3\x58\xad\x0b\x94\x8a\x75\xee\x79\xcd\x36\x47\x7e\xd9\xad\x88\xf5\x03\xd6\x63\x2e\xe5\x60\xc3\xe1\x1b\x92\xc8\x4a\xbf\x8e\x16\x53\x3c\x16\xd8\x00\x16\xc5\x77\xf5\x46\x54\xc6\x78\x05\x96\xd4\x54\x64\x3d\x59\xe9\x02\xb6\x0e\x14\x31\xde\x23\x72\x31\xc1\x57\x2a\xce\x27\xd1\x51\x42\xce\x83\x98\xb8\xe3\x09\x62\x88\xe4\xbc\x65\x68\xd3\x8b\xca\xeb\x21\x90\xd1\x23\xc6\xca\x6a\x8b\x1a\xd0\x8c\x4f\x67\xfc\xe8\x87\x7a\x45\x7d\xc6\xcb\x24\x53\x59\x57\xa5\xe1\x68\xc1\xb3\x2a\x14\xc0\x97\x6c\x4a\x98\x72\x26\x23\x1f\xd2\xea\x12\xe7\x06\x2f\x06\x51\xc2\x92\x9d\x8c\x95\x3e\xf0\x61\x90\x47\x96\x9d\x12\x4c\x13\xb1\x62\xb3\x25\x57\x17\x79\x1a\x8b\x2f\x2e\x79\x7d\x85\x35\x4a\x17\xcc\x02\x4f\x63\x5e\x4b\x2b\xaa\xf3\x00\xb8\xce\x43\xfa\xb2\xc7\x8d\x3c\xc5\x40\x65\x62\xe7\xb1\x1b\x0b\x4d\x8a\xbb\x93\xf6\xa4\x09\xf3\x57\x71\xb8\x58\x51\x14\xd8\x6e\xf2\x1a\x8c\x0f\xa8\x19\x9d\xcc\x85\xd4\xf6\xa0\xb7\xc6\x01\x99\xb0\x0d\xc5\x0e\xfc\x38\x0c\xbc\xcc\x06\xca\x0e\xae\xc1\x00\x8f\xd8\x44\xd9\xc0\xe4\xa8\xa0\x2d\xf1\x03\x8c\xeb\x18\xc2\xde\x2e\x68\x8b\xa3\x4e\x90\x4f\x1e\x9e\x25\x2d\xa6\x09\x4c\x3c\x9a\x97\xf9\x45\x9b\x16\xa6\xd9\x98\xcd\xeb\x6e\xc0\x8e\x4b\x13\x2b\x53\xb2\x89\x4f\x51\x81\x7c\xa6\x6a\x5a\x13\xa6\x8f\x38\x5f\xd3\xef\x57\xf2\x0b\x34\xe8\x05\x15\xdd\x82\xcf\x1f\x5d\xe4\x47\x9c\xac\x62\x58\x47\xcb\x1e\xff\x5b\x10\xd1\xcf\xf7\x94\xdc\xb8\xc1\x6e\x56\x98\x60\x64\xec\x9b\x64\xf5\xb1\xbf\xb4\x27\x1c\xe1\x34\x90\x08\x45\x21\x4a\xd0\x28\xa4\xf2\xb1\x02\x83\xc1\xdb\xc4\x74\xf9\x4c\x75\x28\xad\xac\xe8\xb2\x8d\xe6\x6c\x98\x6c\x78\xba\x63\x9b\x6c\x24\x6c\xb6\xfc\x79\x52\x03\x51\xe7\x62\x25\x2e\x46\x8b\xfc\x01\x14\x55\x5f\xcb\xf9\x1e\x0c\xc8\x84\xc7\x07\x80\xc3\xd2\xf2\x18\x65\xe8\x1a\xd8\x1d\x72\x32\xf1\xa7\xb6\x04\xa1\x91\xe7\x05\x20\xaf\xaf\x93\x0b\xb5\xab\x95\x67\x89\x9f\xa4\x17\x0c\x8b\x85\x2b\x1f\xd5\x78\x55\xbd\x7f\x4d\x78\xc0\x1b\x23\x93\xcb\x45\x2b\x59\x91\x0b\x23\xb2\x9f\xca\xb9\xe4\xd2\xa4\x6a\x8b\x49\x53\xc0\x2a\x61\x5e\xc3\xdb\xb1\x93\x4d\xd1\x51\x60\xc3\x5a\x83\xaf\x5d\x7f\x58\xc0\xd7\x34\xb1\x11\xaf\x16\x34\x7e\x4b\xe7\x24\xa2\xdf\xa7\xa2\xc6\xe2\x39\x59\x29\x2e\x7c\x85\x69\x09\xfa\x60\x80\x08\x1d\x2d\xe4\x1d\xa7\xe6\xb8\x7b\x71\x5e\x41\x7a\xee\x60\x9e\x0a\xef\x5e\xdc\x39\xf1\xb9\xe1\x61\x10\x9e\x4d\xca\x44\x3c\x83\x89\x6d\x2c\xe8\x7f\x53\x30\xf3\x39\x00\x45\xd0\xff\x26\x4c\x3a\x41\xff\x5b\x6a\x1f\x02\x42\xbb\xf2\x4b\x65\xff\x41\xda\xf2\x2b\xb2\x07\x05\xb4\x35\xab\x45\x53\xa6\xba\x9b\xea\x62\xae\x68\x4a\xc1\x04\xc5\xc7\x15\x1e\x28\x3f\x2d\x92\xa8\x49\x99\xa5\xe6\x0f\xa6\xf4\x0d\x99\xd6\xad\x28\x84\x4e\x3c\xaa\xac\x54\x14\x47\xb4\x8a\x74\xe9\x1c\x59\x32\x7f\x59\x39\x53\x38\xf6\x1e\x2c\x2e\x16\xc0\x1d\xec\xc8\x15\xd4\x9f\xc7\x34\x05\xbc\x97\xa3\xf5\x98\x96\x8b\x4e\x2b\x21\x33\x09\xdd\x1c\xb7\x04\x6d\x78\x60\x04\xba\xea\x1d\xee\x2c\x05\x54\xd0\xf6\x7e\xfe\x96\x27\x1e\xb5\xc2\x60\x46\x0a\x0d\x4c\xad\x2d\x1b\x17\x91\x50\x5c\x61\x49\x0e\x20\xc5\x6f\x43\x21\x2a\x92\xb5\x17\x4d\xdb\xe0\xa3\x39\xc7\xed\x31\xdc\x28\x17\x7a\x99\x54\xc1\x7f\x11\x2b\x3d\xff\xdf\x91\x99\xe0\x36\x13\x7e\xf6\x0b\xf9\x5c\xad\x6d\x93\x63\xeb\xce\xea\xda\xa1\x3b\x89\x9f\x2e\x8e\x8f\xe6\x1a\x8e\x6e\x6f\x25\x21\xad\x6d\xe7\x31\x16\xc6\x2f\x65\xb9\xa8\x9b\x6f\xcd\x68\x1c\x97\xd0\xf0\xea\x83\xd7\x24\x0a\x34\x76\x0e\x21\xf5\xd7\xb0\xc4\xf3\x57\x61\x0a\x88\xdb\x2a\x6c\x41\xb9\x5c\xc8\x98\xa5\x86\xfe\xfb\xf8\xab\x95\xc0\x16\xfd\xef\x32\xf6\x03\xfe\x73\xa4\x1a\xfa\x9b\x81\x1f\xc5\xe1\x14\xde\xf4\xd9\x6d\x54\x43\x6d\xe2\xab\x4f\x55\x94\x22\xf9\x21\x19\x43\x5a\x07\x00\x45\x45\xdb\x0f\x46\x31\x09\xd6\x91\x68\x6a\x8f\x88\x05\xe1\xfd\x1c\x7f\x7a\x1d\xb2\xc2\x48\xc4\x6a\x02\xdd\x29\x93\x7e\xe0\x81\x53\xa6\xeb\xc7\x65\xe2\xc6\x96\xe7\xda\x65\x7c\xd1\x2f\x93\xa9\xef\xd0\x90\x89\x20\x3a\x9f\xb0\x91\xdd\x52\x6e\xee\x94\xdd\xd2\xfa\x2c\xee\x80\x51\xfa\x82\x66\x8b\xa1\x12\x8b\xfb\xb5\x81\xeb\x16\x0d\x13\x1b\x02\xb7\xf4\xaa\xfa\x7a\x32\x20\x08\x93\x64\xcb\x85\x46\x31\x3c\x0b\xdc\xbb\x11\x18\x7f\x75\x62\x03\xf4\xd3\x62\x57\x3d\x2b\x76\xfb\xae\xe7\xc6\xf3\x6c\x2e\x25\x45\xc4\xc4\xda\xb2\x93\xa9\x50\xd7\xda\xdb\xde\xd9\xe9\x01\x77\xce\xf9\x91\xb8\xe9\xf4\xe0\xb9\x12\x68\xc9\xcf\x38\x3e\x0d\xe8\x2a\x60\xea\x90\x96\x6b\x02\x17\x46\xad\xa3\xa9\x3b\xa8\x0a\xd6\xa5\x2e\x34\x41\x5c\x59\x6a\xd2\xd1\x9b\xec\xc9\xb6\x77\xa5\x01\x38\xa2\x32\x23\xa4\x8e\x01\xc1\x85\x9e\x5f\xbb\x11\xff\xdc\x8a\x08\x75\xe3\x11\x0d\x5f\x73\x00\xc6\x4e\xf3\xeb\x41\xeb\xb0\x71\x75\xda\x23\xa4\x08\x5e\xcb\x81\x0f\x82\xc5\x9d\x7a\x4a\x49\xb9\xce\xd1\x3e\x3e\xfd\x15\xa5\x29\x8c\x2d\x8a\x42\x38\xec\x17\x49\x58\x26\xc3\x32\xe9\x97\x0a\x6c\x3e\xc6\xbc\x16\xda\x2f\xf9\x4b\x7e\x31\x83\xd6\xe4\x02\x3a\x18\x1c\x41\xd8\xbb\x89\xe5\xd1\x18\x5f\x8f\xa6\x11\xf8\xb6\xc0\xf8\x13\x81\xd6\xc1\x6d\x95\xce\x27\x8f\x8f\x52\xda\x17\x94\x55\x79\xa7\x02\x68\x58\xf6\x08\xaf\xba\xe0\xc4\x24\x0d\x84\xd0\xb7\x98\x31\x18\x83\x0d\xd3\xfd\x79\x26\xd1\x25\x32\xad\xab\xf3\x61\x5b\x7e\xe0\x83\x5b\x41\xe2\x23\x95\x1a\x9f\xe8\x2d\xef\xe9\xd7\xe6\xc5\xe9\x45\xc7\x30\xb6\x9c\x72\xcf\x12\x07\x79\x36\x77\x87\x2a\x5d\x98\xa6\xfa\xd6\x56\x99\x88\xff\x2b\x25\x10\xe7\xbc\xc2\xbe\xda\x00\x54\xa8\x96\x09\xfb\x5f\x49\xd1\x07\xd8\xee\xa1\xba\xdb\xe3\x10\x2c\x38\x6f\x53\x9f\xe2\xde\x92\xf9\xb8\x2f\x92\x8c\x6b\x9f\xca\x9d\x27\xf3\x8d\xb6\x09\x65\x1b\xe1\x6f\x0b\x86\xcf\x13\xc7\x07\xed\x9b\x99\xcd\x61\x74\xf5\x8f\xad\xc8\x76\x5d\xfe\x8d\x08\xa3\xe1\x9e\x2e\x1e\x3d\x40\xdf\x61\x8e\x5e\x2a\xc3\xf9\xbc\x20\xbc\xe4\x42\x9b\x20\x80\x0b\xbf\x2b\x1a\x37\x95\x02\x29\xa7\xaa\xf6\x00\x9b\x07\xb4\x2b\x77\xe8\x0b\x2b\x0b\xb0\x57\xee\x56\x46\xc3\xda\x00\xce\x0e\x89\x55\x02\x86\x7a\x0b\x2b\x32\x56\x60\xe2\x58\x2b\x46\x04\x6d\xc7\x1d\xc0\x2d\x39\x96\x0f\x19\x32\xc7\x2b\x8f\x58\x98\x21\x1e\x3e\xaf\x9a\xbf\x4b\x29\x5a\x02\x42\x5b\xef\xa3\x24\x70\xb8\x8d\x64\x5c\xec\x83\x32\xec\x8c\x7d\x3c\xc4\xf1\x18\x24\x45\x77\x40\xac\x3b\xcb\xf5\x58\xe5\x12\x0c\x03\x3a\x0d\x0e\xe0\xea\x40\x23\x1a\x8b\x98\x79\xb6\x47\x4c\xa8\xef\x50\x5f\xbc\x42\x13\xa5\x71\x5e\xf0\x91\x7d\x6e\x44\xfb\xa1\x48\xb0\xa8\xf5\xbd\x41\x70\x7b\xa2\x1e\x1e\x5e\x96\x1f\x4b\xe7\xc7\x5f\x66\x23\x2b\x16\xe0\x59\xd2\xe5\x11\xf7\x06\xe8\x27\x7f\x3c\xc6\xed\xf3\x97\x95\xba\xa4\x2d\x5f\xe9\x2f\xcb\x91\xba\xfd\xe9\xb8\x58\x50\x55\x87\x46\xd2\x29\xae\xfc\x89\x93\x16\xf7\xe3\x39\xce\xba\xd4\x75\x78\xcf\x52\x1b\xfa\x4a\x1d\x53\x8f\x85\x3d\x52\xe0\x55\xd9\x26\xf0\xc8\xce\xe8\xe7\x90\x95\xf4\xca\x42\x48\x2e\xf0\xb0\x56\xcf\x0f\xf9\xcc\x12\xae\xdc\x51\x76\x2e\xe1\x76\x55\x48\x98\xd5\xd3\x5c\x6c\x39\xb8\x0d\x44\x81\x09\x63\xc1\x0c\x17\x01\x3b\xa3\xfd\xc0\xa1\xba\xa7\x8d\xc9\xb8\xfd\x78\x05\x61\xa5\x21\x44\x34\x16\xd4\x9e\xa4\x07\x98\x0c\xff\x0e\xa5\x13\x8c\x23\x10\x1a\x70\x62\xa5\xd5\x20\xa4\x4d\x7d\xfb\x41\x1a\x0b\x09\x2c\x1d\x91\xed\x05\xbe\x01\x6f\x52\x62\x8e\xaa\xb6\x74\x95\x44\x11\x40\xdd\x60\x7b\x65\x7b\x43\x91\x55\xb8\xa5\x73\xb1\xb6\x84\xa1\x2a\xbc\xfb\x74\x4b\xe7\x5f\xf8\x19\x08\xbf\x4b\x73\x53\x78\x97\xde\x94\x33\x1b\x75\xc5\x0e\x7c\xdb\xe2\xc1\x0e\x9c\x0f\xe1\x5d\xda\xea\xcd\xbd\xdb\x12\x4c\x51\xd8\x7e\xb2\x5a\x24\xec\x57\x4e\x40\x23\x08\x53\xe0\x3e\x6e\xe8\xda\x86\xad\x11\xb8\x88\x18\x4e\x03\xfe\x18\x05\x2e\xdc\xbf\x92\x76\x8c\x8f\x7e\x02\x73\x57\xa1\xc4\x8e\x1f\xb0\x92\x96\xf1\x2d\x9b\x35\xc4\x76\x25\xa6\x7f\xae\x34\x1f\xd0\x78\x8e\xed\xfd\x4f\xd7\xad\xfe\x6c\x9d\xe6\xff\xff\xb4\x0e\xb3\x20\xa6\x15\x64\xf5\x14\x02\xf7\xcc\xd5\x45\xa1\xa9\xaf\x10\x93\x58\xa4\x16\x51\x72\x97\xcd\x5f\x4a\xc8\xb4\xb9\x6f\x03\xf9\x28\xa5\xee\xf4\xd8\x25\xce\x1d\xe4\xdc\xc9\x88\x43\x23\x3b\x74\xd9\xe5\xd1\xe7\x50\xcb\xaa\x52\x20\xb7\x2b\xe9\x36\x2b\x42\x0c\x1f\x4d\x6e\x29\x87\xdc\x88\xfb\x47\xe4\x66\x42\x29\xe6\x2c\x9c\xec\x6a\x50\x31\x04\x72\xd7\xd0\xb2\x6a\xcf\x13\xf9\x37\x7c\x8e\x4b\xc0\xf0\x05\x5f\x05\x26\x52\xb0\x10\x0c\x5f\x24\x6b\xc1\xf0\xa5\xbe\x1c\x4c\x0d\xf2\x15\x61\xfe\x4a\xa2\x75\x65\xbe\xe4\xeb\x22\xcb\xaa\x64\x65\x64\xbf\x4b\x54\x72\x0e\x05\x6a\x3e\x07\x75\x4b\x41\xd1\x42\xac\x6e\x70\x67\x92\x00\xdf\x25\x1e\x9c\xcb\x73\x99\x83\x8f\x5a\x6c\x8f\x84\xc7\xe2\x6a\x27\x00\x7f\xa2\x86\x67\x2c\x5b\xb4\x3e\xf1\xe0\xea\x97\x20\x89\x8b\x07\x70\x0c\xc7\x14\xb2\x59\xe6\x91\x66\x96\x0f\x4e\x42\xd8\xc7\x54\x59\x2c\x59\x21\xe4\x00\x1d\xc5\x01\x77\x33\x18\x90\x71\xe0\x07\x00\x94\x4a\x66\xae\x43\x93\xc8\x1d\x46\x0f\xaf\x08\x81\x4f\x6c\x1a\xc2\x25\x14\x71\xb0\x23\x52\xa4\x95\x61\x45\x80\xeb\x5c\x74\x4b\x1a\xe0\xee\x64\x1a\x13\x6a\xd9\x23\x03\x41\x44\x42\x07\x0e\x0e\x48\xb3\xdb\xe5\x9e\x92\x85\xca\xcc\x5e\x63\x03\x2c\x70\x0d\x6b\x64\x45\x1c\xe1\x87\x87\xa6\x29\x2f\x28\x2d\x46\xfa\x2e\xfe\xca\x26\x10\x1f\x49\x5d\xf4\xbd\x87\xd3\x4f\x9a\x08\x84\x6d\x0e\x5a\x13\xf3\x03\xe9\xa7\x61\x4e\x44\xaf\xca\xf8\x9d\xec\x0b\x65\xbd\x61\x14\x79\x40\x35\xfc\xfe\xf5\xb7\xa1\x37\x9f\x8c\xb8\x35\xe2\xf7\x42\x9e\x71\x15\xdc\x86\x94\x74\x36\xd2\x0d\x06\x26\xc1\xe6\x9f\x0a\x17\x12\xa6\xc4\x48\xd1\xaa\x68\xbb\x14\x9b\x45\x26\xb7\x3f\x48\x43\x9d\xd2\x20\x4c\x64\x41\xcc\xa8\x26\x6e\x42\xd6\x84\x09\x49\x97\xb5\xe5\x6a\x17\xc8\x5d\x53\x8a\xbb\xb2\x7f\xa5\x86\x96\x7a\x36\x90\x5b\x9e\xc0\xe1\xe1\x03\xd1\x95\x4e\x4e\x9f\x35\xcf\x06\x97\xa1\x99\xe4\xcb\x61\x83\x5d\x96\x7f\x88\x15\x2a\xc8\x8c\x39\x11\x4f\xa2\xce\x3e\xc5\xb0\x13\xf1\x8d\x98\xd6\x3d\xf2\xe9\x8b\x9e\xfb\x4c\xd1\x30\x9e\x9b\x54\x07\x9e\x65\x29\x9b\xfc\x2f\xa9\xa8\x13\x54\x54\x91\xa5\x04\x73\xd2\x00\x26\x1f\xeb\xa4\x95\x2b\xab\x40\x6f\x60\x1b\xba\x4a\x91\xad\xd6\xf7\x32\xc3\x3d\xfb\xb6\x90\x1a\x2f\xdb\xe9\x79\x0d\xc6\x26\xa1\xfc\x48\xb4\xcb\x64\x3e\x61\xeb\x4f\x13\x97\x69\xfd\xf1\xeb\x14\xf5\xbe\x1a\x6b\xc5\x99\x0e\x3e\x31\xc5\x02\x7c\x85\x0b\x5c\x04\x08\xb3\xf6\xe1\xe3\x94\xb9\x44\x86\xf9\x31\xc1\x38\x48\x7c\xdd\x04\xea\x9e\x6c\x4e\x1e\x35\x32\x78\x4a\xaf\xf0\x62\x8f\x14\x12\x5b\x74\x41\x69\x56\x55\xd8\x92\x66\x55\x70\x1f\xf5\xa0\x5a\x44\x9e\x11\x59\xe3\xe5\xd4\x16\xd2\x8a\x5f\xa6\x15\x8d\x96\xcc\x39\x84\x90\x2a\xe9\x71\xeb\x1f\x64\xe3\xd2\xf0\xf4\x33\x33\x5e\x6c\xab\x2a\xd7\xa5\x16\x99\x00\xbd\xc0\xe7\xaa\x1a\xa9\x20\x61\xe8\xe9\xf5\xf9\x99\xf9\x5c\x47\xf9\xd6\x1b\x85\xdd\x93\xb7\x98\xfd\xe6\xab\xcc\x04\x20\xa8\xa9\x9d\x63\x9f\x99\x24\x42\xa6\x1a\x54\xb6\x0b\xa5\x96\x96\x42\x2c\x55\x2e\x09\xe0\xe5\x7d\xc1\x38\x12\xa5\x3a\x7c\x81\x89\x3d\x64\x87\xbf\x05\xae\x5f\x2c\x10\x9e\xf4\x8b\x6f\x67\xac\x74\x46\x27\x15\x20\x20\xc2\xed\xde\x11\xc6\x02\xfe\x8a\x55\xce\xee\xdd\x25\x38\xe0\xc0\xb2\x61\x8d\x31\x7c\x09\x96\x16\x7c\xe8\x46\x24\x65\xdb\x37\xfb\xc8\xf9\x0e\x44\x70\x88\xac\x57\x8c\xb6\x78\xb3\x88\xa8\xaa\xca\xda\x60\xad\xe8\xc3\x3b\x0b\x0d\xd9\xc1\x28\x62\xe1\xf1\x48\x16\xef\x89\x56\x38\xa4\xb1\xb4\x66\x88\xc6\x0e\xf9\x69\x35\x99\x86\x93\x80\xed\xa3\xe2\x3a\x8f\x0a\x4b\x39\x49\xce\x87\x96\xa2\xc8\x75\x68\x48\x1d\x55\x3f\xca\x71\x93\x48\x0e\xb9\xa0\xff\x0d\x8c\x1f\x89\x17\x7a\x4c\xd1\x33\x7a\x89\xe2\x2e\x59\x9e\xa8\x68\x2a\x67\x25\x5b\x13\x37\x66\xa6\x27\x98\x39\xbb\xf4\x74\x84\x53\x96\x46\xe6\xe3\x51\x78\xc1\xc0\x5a\x99\x4f\x68\x30\x40\xb7\x96\x3d\x52\xc0\xe1\x02\xd4\x5a\xd0\xff\x06\x69\x55\x7a\x1c\x92\x67\x23\x7b\x5a\x2a\x47\x69\x72\x1e\xf2\x8d\x97\x55\xe7\x67\x9b\x12\x98\xac\x20\x42\x83\xee\xc5\x63\xc4\xa8\x9a\x23\x07\x14\x2f\xbe\xf2\x51\x79\x85\xc7\x47\x7c\x99\xe1\x91\x19\x76\x30\x1e\x83\x33\x8c\xcb\xdf\xa2\x12\x4d\xa0\xa2\xdc\x5d\x9e\xab\xdb\x8e\x18\x94\xd8\x84\x16\xe9\xe0\xe2\x9e\x92\xa3\x95\x3f\x37\xef\x31\xa2\x05\xb1\x33\x98\xda\x50\x4d\x05\x7b\xda\x81\xbd\xe8\xfa\x94\x94\x4d\x9f\xc5\x5a\xad\xc5\xe7\x2f\x23\xf2\xfc\x79\xe6\x00\x36\xb4\x8b\xc6\x03\x9c\xc4\xe4\xe4\xcb\x16\x14\xc6\x07\x9d\x2e\x9e\xbd\x3a\xc3\xd2\x77\x2e\xa8\xc2\xc8\xe7\x5d\xc3\x4c\xf7\x30\x59\x49\x3f\xf5\x74\x0f\xb2\x05\x86\x47\x11\x0a\xa0\x81\xec\x88\xe9\x28\x2b\xef\x59\xaa\x19\xd2\xf0\xba\xa4\xea\x54\x0b\xde\x94\x52\xfa\xd1\x62\x93\xc1\xd5\xc4\x11\x70\xf5\xa2\x21\xfd\x8d\x4d\x7d\xbb\x43\x8c\x6f\x76\xd9\xe1\xf7\x35\xd8\x61\xa9\x84\xdb\xe7\x98\xe8\xc2\x50\x62\xd2\xff\x85\x4b\x86\x32\xb0\x9e\xee\xa9\x21\x3f\x47\xf1\x64\x57\x81\x69\xa4\xee\x50\xe2\x0e\x0c\x9b\x67\xd2\x51\x83\xef\x58\xd2\x9c\xc2\x20\xad\xb9\xf4\xbb\xfd\xb2\xe6\x92\xee\xf1\x01\x2e\xb7\x3c\x4b\xce\x67\x6d\x1d\x12\x84\x65\x48\x63\x7c\x2d\x81\x5c\x4e\x45\x57\xc5\xbf\x75\xc9\x6f\x64\x27\x8d\x7d\x9c\x58\xab\x5c\x25\xbc\xcd\x0b\x66\xb0\xbd\x7b\x03\xf1\x8c\xd3\x38\xef\xb6\x49\x6d\xbb\x4c\x2c\xc7\x21\x3b\x15\x0d\xcd\x94\xb8\xe4\x05\xd9\x49\xc3\x3e\xb6\x07\x89\x01\x54\x12\xae\x6d\xeb\xb6\xb1\xb2\x78\x4c\x03\x8b\x49\x48\xbf\x4f\xd9\x29\xcf\x83\x15\x05\x25\x7e\x18\xe0\x83\x1b\x1d\x59\x77\x6e\x10\xb2\x7e\x0d\xfd\x60\x4c\xd7\x14\xc7\x24\xa5\x47\x9a\x7e\x9b\x67\x36\x4d\x7f\x2e\xae\x31\x79\xa6\xd3\xf4\xe7\xa2\xbc\x69\x8d\x99\xad\xa3\x4a\xe9\xfd\x15\xde\x87\x93\x4b\x02\xca\x8e\x98\xbd\xbc\x01\x99\x3a\x48\x72\x87\x63\x1a\xbe\x9e\xc2\xc0\xf5\x47\x34\x74\x85\x4d\x93\x1f\x50\x85\x48\xb8\x27\xf8\xf3\x71\x10\xf2\x04\x08\xb9\x3c\xc8\x0c\x77\x57\x2d\x9f\xe5\x42\x86\x50\x56\x37\x36\x3c\x0e\xea\x07\x45\x22\xf4\x19\x4e\x3d\x5f\x6c\xc1\x5b\x58\xbe\x73\xb4\x9f\xac\x1f\xc3\x1c\xa4\x56\x5f\xba\x84\x09\xb2\x5a\xb7\xb8\x2d\x98\x5f\xf3\xd4\x3e\x8e\xeb\x22\xe1\x4e\x97\xe2\x06\xb4\x9e\xde\xb5\x22\x32\xf5\x3d\x1a\x45\xc4\xf2\x42\x6a\x39\x73\xa2\xf9\x8e\x84\xc3\x7e\x51\xbe\xfc\x0d\x82\x70\x5c\x79\xb6\x02\x93\x15\xa6\x65\xdf\x1a\x8a\xd9\xba\x06\x13\x6b\x89\xbc\xc9\x83\xa1\xc8\x32\xe0\x75\xd6\x26\xfe\x29\xdd\xc8\x97\x52\x56\xa8\x84\x6d\x36\x6d\x05\x2d\x29\xb9\xa7\x80\x68\x2f\x38\xb3\x6e\xe9\x21\xbf\xd0\x17\x33\xf6\x8d\x3d\xa3\x39\x22\x7f\x08\x89\x3a\x92\x3b\x98\x84\x7a\x69\x37\x87\x93\x8a\xd1\x7f\xec\xde\x17\xd3\x3d\x2d\xa7\x3c\x44\xca\xa4\x5a\xd9\xd8\xd8\xd8\xd0\x19\x91\xd9\x29\x16\x4d\xa4\xf6\x18\x54\xcc\xd6\x7d\xd2\x44\x2a\xfb\x81\x69\x22\xd3\x8d\x98\x80\x45\x62\x00\xec\xe2\x36\x5e\xf1\xce\x1d\x2b\x2f\x1a\xa9\xcb\x63\x24\x6e\x8f\x11\x5e\x1f\x23\x6e\xe1\x4d\xcc\x7f\xa5\x24\xbc\x32\xb9\xea\xfc\x0f\x5f\xda\x6a\xa4\xe1\x1b\x2f\x6d\x0b\xea\xd4\x49\xc3\x47\x55\xea\xd1\xb7\xbd\xc4\x11\x2e\x6f\xec\x39\x0a\x4b\x52\xf1\x0c\x2c\xa5\xfa\xc5\xad\x56\x86\x7e\x99\xee\x6f\x35\xf5\x02\xa7\xdd\xd5\x16\xb7\xd3\x96\x97\x38\xa0\x2c\xcf\x4d\x46\x32\xb9\x00\x3e\x87\xcb\x40\x5d\x7e\xa0\x35\xc0\x4d\x30\xc6\x8a\xd9\x9b\xa3\xb0\xe0\xc9\xdb\x62\x0d\xaf\x8b\x35\xdd\x16\x0a\x7f\xd4\x09\x6f\x37\xb9\x4a\x8a\xbb\x1d\x56\x15\xc6\x4e\x7e\x3d\xaa\x9b\xee\x52\xbc\x64\xc6\x8a\x29\xeb\x2c\xbc\x53\xf1\xda\xaa\xc5\x52\x56\xcc\xbb\x45\x29\x75\xb8\x21\x52\xab\x62\xb8\x20\xf1\x1a\x69\x8b\x9a\xac\x96\x32\xc3\xed\xe6\xaf\x58\x65\xb1\x8a\x30\x76\xfd\x61\x48\x3e\x3b\x44\xe6\xf7\xc7\x7f\xf5\x82\x5c\xb8\xae\x78\x05\xe5\x41\x69\x95\xb5\xd4\x36\x3d\x73\x4a\x3b\x88\x10\x4c\xb3\x29\xc4\x68\x0b\x59\xcc\xff\x61\xf2\x8c\x2d\xdf\x83\xd0\x23\x08\x2c\x9c\x11\x51\x4c\x7e\x26\x7f\x1b\xfe\x6e\xf0\x03\x1f\xd2\xd8\x3d\x09\xde\x55\x28\x7e\xac\xb6\x20\x49\x2b\x14\xc5\x7d\x89\x5d\x1a\x74\x8e\xca\x08\x9e\x9e\xa1\x73\xe8\x23\x67\xea\x5e\x0e\x77\x65\xce\x5d\x95\xa9\xbe\xb4\xef\x02\xd0\x19\x08\x83\x34\xa2\x48\x9f\x16\x3d\x35\xae\x48\x7c\x0b\x85\xf5\x47\x96\x14\x68\x97\x08\x9a\x4e\x15\xe4\x66\xd2\x74\xa2\xca\xdc\x79\xc1\x64\xbc\xb9\x33\x42\x78\xc8\x81\x15\xc6\xe8\xb5\x8b\xef\x95\x8e\xa8\x87\x2c\xb3\x10\x7b\x63\x32\x45\x94\xd9\xcc\xe3\xdf\xd3\x27\x35\xe9\xde\xc2\x59\xe5\xb4\xe5\xa4\x62\x87\x65\xd7\x31\x91\x3c\x64\x4d\x36\xf4\x2e\x5b\x1d\x47\xd5\x93\x42\x15\x07\xc4\xc6\xc8\x5d\x73\x7d\xa3\x50\xd1\xfb\x18\xcc\x78\x8e\x3a\x88\xa7\x08\x56\x17\xab\xa7\x24\x8b\x67\x4e\x2e\x13\x25\xd7\xd6\xea\x72\x06\x24\x33\x52\x96\xa2\xb9\xb2\xcc\x71\x72\xd9\xca\xab\x4b\x20\x20\xdd\xa0\x29\x67\x91\x28\xa2\xd1\x5d\x4a\x23\x2b\x4c\x21\x44\x83\xfd\xf1\xbf\x4d\x0c\x29\xb7\x0c\xf1\x08\xe4\x45\x55\x57\x92\x40\x24\xf2\x33\x42\x98\x0a\x54\xd6\xe4\x90\x0a\x5b\xe1\x23\xa5\xd0\xf5\x87\xf9\x82\x48\xf9\x35\xe5\x11\x62\xc8\xe8\xa5\x6b\x2f\x3c\xa2\x20\xf3\xa8\x72\x92\xfb\x18\xc2\x12\xbb\xc3\x69\x30\x8d\x48\x38\xf5\xe1\xdc\x47\x2f\x84\x35\x60\xba\xe6\x8b\x80\x98\x50\xa2\x18\xfa\x3f\xac\x49\x90\x5f\x5e\x66\x41\x60\x57\x2a\xaa\x0b\xba\xa3\xcf\x6a\x23\x0c\xad\x39\x38\x15\x58\xec\x37\x82\x47\x33\xdc\x37\x30\x62\x89\x07\x1b\x48\x06\x60\x87\xe3\xb0\x8c\x90\x47\x42\x52\xc1\xbd\x23\x91\x05\x57\xc4\x84\x80\x7f\xee\xc2\x01\x2b\x23\x11\xc4\xe0\x3d\xc2\x3c\xda\x0a\x01\xcd\xc9\xd8\x47\xbd\x8e\x20\xa6\x38\x76\xb8\x71\x24\x9e\x3c\x92\x54\x94\xe0\x1a\x0e\xba\x51\x38\xa5\x0b\xc8\xcb\xce\xf9\xde\x9c\x34\xba\xcd\x76\x5b\xf8\x6f\x20\xe1\xe4\x11\x23\x8f\x76\xfe\x32\x80\x89\x79\xef\x3a\x94\x75\xd6\x18\xb5\x9f\x72\x77\xfd\xf4\x25\xb1\x02\x82\xc7\x60\xb5\x4c\x54\x34\x3c\xfc\x2e\xeb\x07\xa8\xba\xc1\xba\x50\x94\xb8\xe4\x37\x92\xa4\x2b\xde\xd5\x0c\x09\x64\x0f\xbe\xb2\x03\x87\x5e\x06\xae\x1f\x37\xe2\xa2\xcb\xef\xf6\x40\xc1\xb7\x43\xca\x9d\x8c\x8b\x36\x40\x1e\xdf\x0f\x06\x83\x41\x89\xbc\x21\x35\xf2\x9a\xd4\x77\xa5\x85\xcb\x26\xbf\x91\x5a\x5d\x31\xec\xf2\xde\xbe\xd8\x4b\xa8\x64\x32\xf5\xf1\xc5\xcc\x98\x82\xba\x8b\x5d\x62\x8d\xd4\x56\xa0\x42\x88\xf1\xf5\x3a\x93\x73\x0e\x9a\xc1\xe7\x5f\x25\x61\x48\x78\x87\xef\xd3\xff\xd4\xee\x0e\xe1\x6b\x4c\xe1\x8c\x47\x12\x63\xbc\x60\xba\x06\x2e\x2d\x1b\x7e\x9d\xfc\x9a\x7c\xff\x43\x49\xe6\x61\x8a\x0e\x21\x32\x95\x87\xa9\x1b\xe9\x4e\xb8\xe5\x64\xe0\x4a\x27\x50\xc8\x5f\x63\xd4\x44\xb6\xb9\xd7\x3c\x4c\xe4\x59\xba\x4b\x5c\x98\x5c\xf2\x22\xcb\x4f\x5d\xbc\x44\x27\xdd\x0c\xef\xa5\x99\x46\x67\x6b\x7a\x2c\x2b\xb1\x33\x9f\x95\x3f\x12\x93\x90\xee\x6f\xbd\x24\x36\xf4\x2e\xfe\xdf\x19\x0e\x5a\x26\xf0\xd7\x40\xfc\x72\xd5\x3b\xdc\x61\x37\x59\x87\x86\x05\x55\x38\x0b\xb8\xff\x5c\xf7\x2a\x4d\xb1\x2f\x9e\x59\x93\x45\xd1\xa4\x98\x65\x91\xd0\xc8\xb6\x26\x54\x82\x5d\x10\x19\xb8\x8d\x9e\x6a\x22\x3e\x42\xf9\x98\xb0\x5d\x10\x5e\xdb\x02\x0d\x11\x84\x5f\x2e\x6d\x6b\x02\x50\x54\x00\x84\x12\x0e\x02\xf6\xed\x50\x66\x57\xfe\x15\x71\x5f\x91\x84\x1b\xf8\x51\x99\x4c\x2c\x17\xe3\xfc\x92\x03\xa3\x4c\x68\x6c\xa7\x9c\x20\x92\xf6\xf9\x9f\x98\xac\x0f\xc0\x5c\x44\x40\xa7\xc7\x61\x2e\xef\x59\xa7\xca\x24\x1e\xc1\xc3\xa7\x0b\x7a\x17\x3e\xf5\x44\x80\xc2\x9e\xa4\x9c\x0c\x29\xa1\x51\x10\xd3\xd0\xb5\xd3\xac\x88\x12\x80\x4c\x44\x0d\x92\x5f\x80\xda\x28\xdc\xd5\x50\x71\x44\x71\x74\x02\x7b\x9d\x97\xee\x4a\x2a\x63\x67\x09\xd4\x5f\xc2\x42\x89\x1e\x28\xa2\x45\x45\x68\x6a\x6a\x56\xc4\x71\x73\xdd\xcb\x07\x04\x84\x69\x27\x22\xbc\x85\x03\xc8\xa5\x27\xcb\x88\xd4\x74\xe7\x86\xf1\x14\x7c\x19\x95\xb7\xad\x5f\xd7\xd3\x41\xfe\x69\x8c\x41\x59\x3c\xc9\x17\x03\xe5\x13\xfc\x0a\x4c\xf3\xad\xa4\x82\x90\x0f\xc0\x6a\x62\x67\x5e\xcd\x98\xd4\x59\xb8\x43\x5c\x5a\x21\x2c\x1e\x2b\xa6\x04\xd2\x4a\x01\x14\x60\xf2\x82\x68\x45\x31\xa6\x3c\xd6\x11\x01\x45\x6e\x79\xf8\x8a\x69\x75\x54\x00\xb5\x73\x98\xab\x89\x15\x45\x22\xed\xc9\x3c\x98\x86\x58\x92\x84\xc1\x34\x86\x38\xe7\xd0\x02\xe5\x07\xc2\xe2\x42\x0a\xe0\x79\x48\x01\xba\x9c\x90\xfd\x2a\x3d\x6f\x12\x48\x45\xe5\x4b\x35\xae\xe5\xba\x57\xb9\x94\x5f\x15\x93\xa2\x57\xfe\xad\x1f\xcc\xfc\xaf\x12\x9b\xbe\xe1\xcf\xc9\x2f\x1e\x36\x4a\xc6\x81\x03\x91\x4f\xd1\x2f\x72\x31\xa7\xc4\xb7\x2c\x83\xbc\x0b\x6f\xd8\xee\x41\x0a\x18\x24\x3d\xe2\x63\x46\xd3\xac\xa4\x43\x04\x26\x10\x8f\xa0\xc1\x4e\x34\xbb\xed\xaf\x72\x04\xbc\xed\x33\x5e\xe5\x2b\x77\xd5\x53\x7a\x17\x87\x96\xeb\xe9\xdd\xab\x10\xd2\xb5\xc6\x54\x4d\x14\x40\x99\xdc\x11\x8b\xa4\xc7\x52\x46\x4a\xf4\xde\xa6\x93\x58\x78\x37\x85\x94\x6f\xa2\x98\x53\x10\x6e\x22\xd3\x31\xac\x57\x2b\x1c\xc2\x0a\x4c\xa2\x63\x45\xfb\xe6\x2e\xbe\x1f\x51\x34\x47\x87\xf0\x2c\x8c\xb8\x60\x13\x11\x3a\xc3\xd9\x67\x83\xc7\x2d\xe3\xa9\x88\x2c\xcc\x60\xbb\x70\xe7\x16\xcf\x0b\x66\x98\x7d\x09\x94\x18\x44\x93\x53\xd3\x4b\x25\xb8\x9b\x29\x10\x46\x4c\x25\x3d\x73\x21\x63\x9b\x84\x64\x94\xf3\x88\xf9\x46\x2c\x9f\x5c\x74\x9b\x2a\x0a\x11\x5f\x4e\x91\xdd\x73\xc7\xf4\xd4\x1d\xbb\x10\xdd\x55\xaf\x56\xab\x55\xd1\x18\x3f\x1a\xd0\x55\xd8\x45\xf5\x19\x41\x45\x1c\xf8\x46\x7a\x35\xf0\x88\x96\x78\x20\x4e\x13\x21\x94\xa9\x43\x86\xfb\x26\xc9\xcd\x44\xf0\x10\x60\xec\xc4\x3c\x91\x9d\xb5\xbe\x1b\x4b\x74\x35\xed\x0a\x43\x08\xaf\xd9\xf0\xf3\x8a\x21\x9c\xba\xb2\xdb\x81\x4d\x78\x44\x58\xe1\x88\xf2\x6b\x3c\xa6\xc4\xfe\x55\x64\x61\x98\x05\xe1\x2d\x3b\x7f\x5e\x02\x49\x31\x45\x11\xe6\x5c\xa1\x73\x00\xc8\xc6\xa7\x83\x59\x80\x28\x2d\xf4\xfb\xd4\xbd\xb3\x3c\x99\xe2\xf1\x57\x72\x16\x44\x31\x64\xea\x8e\x48\x14\xbb\x9e\x87\x57\x00\xb1\x47\xc4\xb3\x60\x0d\x2a\xf2\x60\x57\x6d\x30\xef\x65\x1c\x6e\x6a\x4c\x20\x3d\xfd\xb9\x8c\xa0\x24\x32\x1c\x57\x05\x09\x86\x94\x21\x48\xc9\x8d\xa2\x29\x87\xad\x25\xbf\x58\xb6\xed\x3a\xd4\x8f\x2d\xef\x17\x32\x05\xf0\x4f\x9e\x78\x86\x5f\x59\x84\xe3\x7d\x5f\xfa\x7e\x20\xe8\x96\xd8\xe6\x25\x01\x56\x1d\x71\x26\x5d\xff\x2e\xf0\xee\x20\x62\x3d\x2e\x80\xc9\xc4\xf5\xad\x70\x2e\xc0\xc9\xd4\x8d\x1d\x1f\xb6\x77\xf6\xdd\x58\x9c\x78\x9a\x28\x9b\x44\x80\xad\x01\xe0\x16\x13\xd5\xad\x7a\xa2\x46\xa8\xe8\xce\x60\x0e\x81\x78\x02\x62\xcb\x7c\x40\xa6\xa6\x65\xb6\x20\x84\x85\x51\xb3\xf3\x8b\xc6\x3b\xca\x8a\x65\x53\x57\x00\x2f\x3f\x01\x54\x63\x27\x88\x8e\x5a\xf2\x09\x26\xf5\xd3\x88\x4c\x23\x9e\x0d\x1d\x61\x24\x0e\x5a\x4d\x72\x19\x02\x14\x23\xc2\xfe\xd7\xea\xc6\x6e\x1d\x50\xbb\x56\x37\xf3\x02\x6d\x26\x13\x00\x3f\x23\x02\x71\x4c\x18\x0a\xd8\x82\x86\xb8\x05\x8e\x2d\xa5\x64\x74\x61\x5d\x4f\xb5\x25\x97\x43\x4b\x90\xd9\x23\x85\x69\x3c\x58\xdb\x29\xe8\x6d\x9e\x59\xf7\x42\x69\xc7\x6d\x62\xea\x27\xc2\x40\x0e\x9a\xdd\x32\x9b\x8d\x32\xb9\x3c\x63\x3b\x5d\xe3\x32\xd9\x43\x04\xea\xeb\x8c\xc2\xd3\x06\x92\x9b\x4e\xc0\x18\xa1\x84\x95\xdb\xf8\x06\x21\x85\x1d\xc1\x0f\xd8\x8a\x62\x5b\x13\x8f\xb0\xe0\xb7\x59\x7e\xb4\x33\xa5\xb2\xd8\xed\x95\x49\xe1\xf3\xfd\x2b\xbb\x50\x26\xad\x6e\x93\x14\x3e\x7f\x2e\x94\xe0\x39\x93\x51\x29\xee\xb7\x4e\xe1\xfb\xea\xcb\x42\x49\xbd\xbd\x8f\x28\x4f\x94\x43\x7e\xe1\x56\x06\xd1\xdf\x5f\xc8\x38\xf0\x5d\x91\x5e\x31\x61\xd5\xd8\xba\xc7\xe6\x85\x92\x45\xf6\x48\xad\x5a\xdf\xd4\xf9\x24\xa3\xcb\xe9\x18\xf2\x15\x42\x1e\x15\x8e\x5c\x3d\x43\xf8\x38\xe0\x1c\x37\x65\xe8\x5b\x52\x10\xf2\x03\x01\x69\x25\x72\xcd\x96\xa1\x4c\x46\x18\x52\x3b\x18\xfa\xee\x03\xb8\x5a\xd2\xfb\x89\xe7\xda\x6e\xcc\x16\x1d\x30\x33\xd5\x6b\xd6\x83\x2b\x5f\xc1\x44\x35\x0a\x38\x58\x76\x78\xfc\x90\x88\x7f\x57\xfa\x35\xb6\x26\x11\x80\x6f\xc0\x0d\xe4\xa8\x5a\xa9\x54\x8e\x36\x20\x2d\xd5\xac\x94\x27\x50\x67\xac\x4e\x4a\xe5\x50\x6f\x09\x51\x7a\x93\xef\x29\xf1\x82\xa2\x09\xbd\x0b\x15\xb9\x0d\x2a\x09\x7d\xd8\x14\x5e\x75\xd7\xd1\x86\x32\xb6\x26\x98\x12\x07\x11\xb4\xad\x48\x64\xe0\x72\x87\x3e\xdf\xee\x40\x03\xe1\xcb\x51\x6c\xe0\x08\x25\xe3\xc6\x09\x1e\xf8\xc8\x92\xbb\xa6\xdc\x1d\xbd\x39\x89\x66\x2e\x84\xc2\x60\xb3\xc3\xd0\x9a\x8c\x5c\x3b\x42\x6a\x5a\x5f\x49\xb1\x19\x87\xde\xda\x79\xa9\x42\x40\x49\xe1\x89\xb5\xf8\x4c\x5a\x3e\x82\x1b\x8b\x5d\x5f\x10\x62\x35\x91\x18\xc4\x69\x89\xdd\x14\x53\x4c\x02\x08\xaa\x3f\x9f\x59\x73\x25\xcd\x53\x48\xc1\xdd\x8c\x0c\xa7\x56\x68\xf9\x31\xa5\x64\x06\x21\xf6\xa0\xa3\x5a\xfe\x1c\xa9\x89\x8b\x07\x9b\x12\x0b\x1f\x07\x2c\x20\x06\xe0\xf9\xae\x3d\xf5\xac\x50\xc0\x65\xab\x93\x79\x54\x15\x7a\xf1\x51\x4d\xfe\x56\x97\xbf\x6d\x90\x3d\x7e\x19\xcc\x4e\x7d\x65\x48\xe3\x33\x6b\x52\x2c\xec\x17\x0c\xf3\x8c\x07\xa8\x88\xb9\xd3\xb4\x34\x7d\x0f\xc0\x53\xcc\x62\x5d\x9f\xb0\x45\xca\xe1\xc0\xfa\xa0\x9c\x09\x0c\x4b\x71\xcf\x80\x28\x2a\xfe\x14\x74\x74\xca\x88\xf1\x99\x41\x9b\x1b\x7a\xd3\xbd\xda\x84\x93\x99\x7b\xfe\x55\xef\xeb\x35\x48\x0b\x75\xff\x32\xbd\xfb\x24\xc2\x08\xa4\x58\x3f\x0a\xfb\x85\x32\xb9\xea\xa2\xc1\x2e\xcd\xab\x53\xb6\x75\x1e\x55\x0b\xd9\xd1\xee\xfc\xf5\xa3\xed\xac\x38\x5a\x8b\x8f\x76\x90\x99\xea\x4e\x6e\xf7\x85\xc3\xaa\x3c\x69\xd2\x39\xeb\x74\x15\x05\xf4\x19\x0e\x94\x4f\x5a\xcd\xb3\xc6\xda\xc6\x16\xac\x2f\x50\x09\x21\x41\xdd\x30\x10\x1b\x3a\x7f\x30\x26\x4c\x92\x15\x95\x42\x36\xc5\x11\x9b\x20\xdf\x2d\x53\x42\x82\xf4\x76\x03\xc5\xba\x70\xce\x5f\xc5\x83\x9d\xaf\x99\xf0\x65\xb5\xc4\x29\x90\xc9\x28\xcb\x4d\x05\x07\x2a\xa4\x43\x58\x0d\xf4\x1e\x32\x76\x03\x54\x89\x1a\x01\x07\xd7\x23\xa6\x38\xa2\x9a\xa6\xee\xe1\x51\xe5\x59\x92\xe8\x4c\x40\xa1\xb8\x3e\xd1\x2e\x56\x8c\xda\xf7\xa9\x6b\xdf\x32\x26\x41\x36\x34\x61\x52\x4f\xe2\xf6\xee\x63\x24\x94\x39\x20\xa4\x0a\x6d\xdb\xb5\x4b\xa6\x81\x84\xfe\xd7\x34\xac\xcb\x14\x9c\x92\xc5\x71\x8e\x57\xbf\xa2\xbc\xce\x75\xad\x3b\xc0\xf8\x63\xdb\x83\xe8\xdf\x41\xab\xd9\x6d\x62\xdf\xf5\x01\x58\x3c\x33\x74\x1c\x10\x04\xd9\xb5\x10\x71\xe1\xba\x87\x14\xca\x6c\x4b\x72\x23\xf2\xab\x1f\xc4\xa8\xdc\x70\x98\x3e\x5d\xdf\x8f\x58\x9b\xe6\x3b\x28\xa6\x5d\x4a\x2e\xa1\xba\x93\xc4\x79\x90\xc9\x72\x9b\xd8\x20\x14\x37\x61\xe3\xa5\x1d\x6d\x8b\x82\x14\x1b\x63\xab\xc7\x15\xae\x6a\xb5\x2a\x8c\x23\xfc\xf6\x9f\x24\x66\x5e\x9f\x4e\x78\x73\x20\xc8\xab\xb5\xd9\x3c\x6d\x37\x4f\x98\x3a\x90\xdb\x60\x7d\x61\x83\x80\x73\x1d\xdc\xa1\xf5\x1b\x81\x4f\x2d\xc2\xf3\xfd\x03\x7a\xc3\xcc\x5f\x71\xf0\x9d\xc6\x11\x01\x5f\x07\x09\xf7\x27\x6f\xf9\x44\x81\x13\xd3\xac\x5c\xc2\xa1\x23\xb4\xec\xdb\x48\x07\x95\x50\x53\x54\x0a\xcb\x46\x3b\x86\x20\x98\x81\x4b\x3d\x27\x12\x52\xab\x06\x22\xf7\xa7\x83\x01\x53\xb1\x04\xa6\xbc\xb0\x44\x8a\xcf\xd9\x68\x25\x41\x69\x48\x4a\x9b\xab\xc4\xe7\x3f\xa4\xbf\xe3\xd4\xb7\xb5\x7d\x19\xea\x87\x1a\x01\x63\xc8\x6c\x7f\x3a\x48\x42\x65\x93\xf7\x2b\xf4\x54\xd7\xc6\x8b\x3d\x4c\xb1\x5a\xe1\xa0\x8a\x7e\x92\x74\x8a\xfd\x5d\x16\x2d\x19\xc2\x10\x84\xa3\xfa\x1e\x49\x7d\x92\x20\x3f\x4c\x07\x3c\xb0\x8c\xfd\xf6\xc7\x1f\xfa\x8a\x9e\x04\x91\x30\x94\xa3\x0f\x24\x63\x44\x3e\x31\x2b\x1c\x8a\x68\x54\x23\x50\x43\x8a\x6d\x65\x6d\x5e\xc4\x9c\xe5\xf2\x60\x11\x6a\x47\x96\x05\x50\x04\x2a\x1f\x4a\xef\x7d\x1d\x80\x6a\x7f\x3a\x28\x2a\x03\x2f\x14\x52\xdf\x37\x84\xb9\x25\x93\x3d\x38\x67\x3c\xa6\x65\x9b\xdf\x7d\xad\x6f\x79\x08\x24\xc8\x6f\xd3\x9c\xe6\x74\x09\x39\xaa\x31\x54\x76\xcb\x24\xa5\x9a\x84\xb2\x0d\x12\xe1\xdd\x00\x7f\x6a\x3a\x28\x8b\xa9\x06\x9d\x91\x89\xc6\xca\xc3\xdb\x07\xc1\x5a\x30\x41\x28\x79\xd2\x25\x91\x4f\x84\xea\x95\x48\xde\xc8\x8f\x5f\xe7\xc8\xa5\x91\x07\xd2\x4e\x46\x3c\x37\x8a\x17\x0e\x9f\xd1\xb7\xc2\xe1\xd7\x07\x1a\x06\x09\x1f\x44\xa2\xd1\x84\x17\x4c\xb2\x3f\x55\xbf\xac\x3c\x7a\x29\x3b\x69\x1e\x88\xc6\x14\x46\x30\xda\x15\xfd\x55\x4a\xf5\xd5\x54\x7b\xf8\x9c\x5d\x91\x7d\x87\x0e\x5c\x9f\x3a\x05\x25\xc1\x25\xef\x1f\x5f\xca\xa2\xbc\xc6\x9f\x23\x0a\x48\x91\x82\x39\x60\x92\xf4\x09\xf7\x86\xc8\x4b\x1c\x67\x85\x43\x7f\x3a\x46\x9b\x9e\xa8\xc8\x91\x0b\xc1\x9c\x18\x87\x2e\xbd\xa3\xab\xb0\xc5\xb5\x42\xed\x2d\x18\x29\x4b\x01\xbb\x66\xac\x4e\x1e\x87\xd1\x9b\x27\x19\x1a\x96\xfe\x22\x78\x23\x1f\x92\xf9\x53\x32\x6c\x06\xb0\x1a\xdb\x3e\x20\xf0\x96\x49\xad\x5a\x92\x11\x16\x0d\x65\xd8\xc1\x80\x00\x2b\xdd\x88\xc4\x1c\xd4\x8a\x6f\xc5\x62\x73\x87\x59\xaf\xc8\x17\x5f\x20\xbe\x47\xaa\xa5\x24\x0a\x27\xd9\x02\xa1\xdb\x6a\x76\x4d\xf6\x1f\x11\x10\xcd\x3f\xd1\x8b\x2a\x33\xd2\x70\xee\x2c\x61\x0a\xc0\x13\x49\xdd\x03\x8d\xfe\x2e\x70\x85\xc7\xb4\x1b\x38\x0b\xc1\x80\x6b\xd9\xec\xbe\x88\xf4\x56\x99\x0d\x5e\x54\x9d\x10\x20\xad\x88\x25\x5b\x63\x2f\xf6\xb0\xc5\xd4\x42\xe3\x31\x9d\x94\x84\x74\x6c\xb9\x00\x01\x07\xb9\xa9\x10\x41\x5c\xd9\x86\xb2\xc9\xa9\xe4\x58\x19\xa5\xcc\x70\x85\x37\x87\x9a\x5f\x64\x49\x1b\xab\x8c\x76\x42\xe9\x6d\x47\x90\x49\x6d\x4c\xba\x53\x27\xdf\x98\xc4\x63\xae\x60\x44\xfa\x00\x90\x0c\x80\x94\x3e\xe8\x05\xa2\xda\x77\xfd\x3f\x9b\x09\xd0\x4e\x4e\x03\xab\x72\xa0\x39\xb2\xc2\x47\x8f\xbc\x0c\xa9\x75\x9f\x3e\x78\x76\x10\x59\x69\x39\x57\x87\x0d\x96\x70\x26\xc2\x7f\xe9\xf8\x99\x02\x3a\x1d\xd3\x27\xb1\xe0\xc5\x8b\x5c\x26\x28\xae\xc6\x7c\xbc\x6e\x44\xe8\x78\x12\xcf\xc5\xdb\x93\xa2\x8a\x46\x64\x22\x72\x7b\xa6\x32\x5f\xe4\xee\x99\x51\x93\x27\x69\x59\xda\x69\x01\xf6\xc3\x34\x19\x39\x10\x7e\xa8\xfc\xb6\x27\x57\xb4\x1a\xfc\xaa\x5f\x82\xd4\x16\xee\xd4\x7d\xe0\x0e\x5e\x5d\xee\xe2\x5d\xf5\x52\x55\x2c\xe5\x53\x52\xa3\x28\xad\xbb\x5c\x14\x2d\xb4\x57\xef\xc9\x46\xe4\x3b\x2b\xd4\x42\x7a\x6a\xb2\xe6\x38\x0d\x0b\x9c\xad\x38\xa4\x71\x0a\x35\xaf\x84\x80\x7b\x2a\x1d\xb0\x96\xc8\xba\x47\xa7\xbb\x9a\x1d\x22\xf9\x42\xc1\x8c\x4d\x8c\x51\xf0\x4d\xa2\x0f\x27\xb6\x29\xf8\xa2\x96\x7c\x51\xd7\xbe\xa8\x27\x5f\x6c\x68\x5f\x6c\xac\xc4\x46\x91\xce\xc7\xcc\x49\x8d\x05\xbc\x28\x67\x9f\xc2\x69\x85\x03\x3a\xb3\x33\x3c\x33\x70\x5b\x70\x31\x45\x24\x61\xa5\xc2\x46\x64\x9e\xfc\xa2\x93\xaa\x92\xd8\xf5\xaa\x7a\x95\xc4\xcc\x57\xd3\xbf\x48\xac\x7e\x75\xfd\x8b\x8d\xc4\x1c\x98\x62\xe3\x6a\xf8\x7e\x49\x5f\x16\xd8\x0f\x33\x33\x6d\x2e\x5b\x55\xcb\xd6\x1f\x41\x77\x63\x85\xb2\x06\x43\x9f\xd1\x76\xf6\x04\x9b\xc7\xe3\x1d\x12\x94\x6d\xf0\x2d\x3c\xa1\x27\x0f\xc6\x69\x93\x09\xf8\x92\x72\x0c\x86\x5f\xd0\x47\xa2\xc7\xae\xfa\xae\x3f\xfc\x85\x44\xd4\x16\xa7\xf9\x27\xf0\x5f\x49\x6b\xd7\xa6\x8c\x20\xe8\x51\xa1\xce\x27\x4d\x01\x36\x69\x03\x59\x34\x12\x35\xcc\x48\xbe\x5d\xd3\xf1\x24\x08\xad\x70\x0e\x56\x27\x6b\x88\xca\x7f\x30\x0d\xe1\xe5\x3c\xf0\x23\xd0\x0b\x51\xe5\xc4\xbf\x45\x4d\xf1\x02\x8f\x99\x74\x84\x11\x8a\x95\x1c\x07\x8e\xaa\xd6\xd3\x4a\x34\x72\x07\xf1\x09\x9d\x63\x07\xd8\xd7\x7f\xec\x91\xcd\xe4\xfb\x31\x8d\xad\x13\x3a\x67\x3b\xb9\x9e\xba\x42\xe6\xc8\xaa\x58\x5e\xdc\x8e\xce\x68\x6c\x91\xbf\xfd\x8d\x50\xf6\x27\xa3\xa7\x11\xdc\x49\x08\xda\x71\xe8\xa5\xdb\xab\x6d\xcb\x31\x5f\x1c\x5c\x14\xc3\xa1\xeb\x3b\x56\xe9\x35\x79\x4f\xb5\x3c\x7b\xc2\x98\x2a\x8c\x49\x60\x4e\x5d\x0f\x42\xf6\xfb\x36\xd3\x39\xe9\x7d\x4c\xd1\xa8\x22\x0c\x87\x90\x9b\x88\x1d\x28\x80\xbd\x06\x56\xe2\x60\x3a\x1c\x95\xb9\x43\xc3\x04\x33\xa8\x5a\x18\x75\xf8\x6d\x1a\xc5\xc4\x22\x9e\x1b\xc7\x1e\x2d\x93\x36\x99\x59\x91\x5f\xe0\x46\x48\x91\xe1\x6f\x48\x63\x72\xe7\xc2\x93\xd3\xd8\xb2\xe5\xf3\x05\x77\xcc\x45\x6d\x30\xc2\x27\xcd\x48\x70\xfd\x9e\xec\xf1\x27\xbb\xca\x20\x0c\xc6\xec\xe0\x6f\x06\x0e\x2d\x72\x18\x61\xcf\x1a\x4f\x8a\x54\x72\x16\xdd\x1a\xc8\x0b\xb2\x51\x2f\xc3\xbf\xfa\xd6\x56\x49\x22\x70\xcd\x1f\x45\xab\x13\xcc\xb2\x84\x9e\x11\xf1\x80\xc3\x4a\xce\x27\x09\xaa\x91\x15\x51\x52\x80\xc4\xde\x85\xd7\xfc\x86\x01\xe2\xc4\xc1\xf3\xa9\x97\xba\xa9\x70\xdb\x5c\x8d\xb1\xa3\x4e\x26\xde\x14\xae\x71\x96\xe3\xb8\xfc\xf2\xba\xbd\x29\xf0\x02\xfa\x10\x29\x5a\xa4\x15\x87\x7a\xb1\xf5\x91\xfc\x4a\xd6\x6a\x25\xf2\x3b\xa9\xb2\x9b\x75\x95\xbc\x26\xb5\x12\x79\x41\x5e\x6d\x4b\xaf\x49\x26\x18\xe3\xc0\xd9\x95\x37\x1d\x94\x71\xb6\xc5\x7c\xbe\xaf\xf5\x3f\x9d\x15\xc8\x0b\x23\x27\xfa\x8c\xd0\x3d\x79\x41\xe6\xbb\xcf\x92\x41\x9c\x88\x34\xa4\x09\x4c\x44\x18\x8c\x79\x42\x73\x84\xa6\x86\x1f\x0a\xd9\x91\xa8\x1f\x2b\xf8\x30\xbc\x47\x21\xb5\x6e\x39\x49\xe4\x14\x2c\x6f\x27\x98\xf9\x2a\xb7\xf6\x81\x27\xf8\xc0\x24\xb3\x64\x49\x56\xf1\x9b\x12\xb0\x6a\xa3\x2e\x1a\x05\x9f\x63\xb2\x47\xce\xac\x78\x54\x19\xbb\x7e\x91\x56\xb0\x7c\x99\xd4\x4b\x30\x81\xea\x50\x1a\xbe\x43\xc6\xee\xbd\x50\x3c\xc7\xca\x6a\x8f\x2a\x19\xf6\xfd\x14\xff\x16\x8e\x7c\x3a\xc9\x4a\xc9\x74\x02\x56\x51\x3f\x10\xc8\x49\x7c\x57\x45\xc0\x41\xce\x84\x99\x15\x91\x90\x7a\xd4\x8a\xb8\x03\x85\xb1\x7f\x9f\xef\xeb\x1b\x85\x15\xbb\x32\x0e\xee\xa8\xec\xcc\x23\xb6\xdf\x4e\xe3\x08\x77\x2d\xec\x59\xa4\xfa\x2b\xaf\xaf\x93\x6e\x6c\xf9\x8e\x15\x3a\xa2\xe3\x7d\x97\x23\x54\x50\xf2\x81\x9d\x02\x04\x8e\x05\x3b\xe0\xde\x2b\x21\x34\xc5\x13\x42\xbb\x61\x14\xab\xb4\x38\x09\x78\x4e\xe1\xc8\x8e\xee\x00\xfd\xe7\xfe\x86\x8e\xb0\x20\x32\xf0\x3d\x75\xca\xfc\x23\x37\xe2\xef\xd9\x8e\xe2\x89\xcc\x93\x18\xb8\xb1\xf6\xc8\xa4\xb4\x4b\xe2\x51\x48\x29\x6f\x92\xf5\xb8\x3d\x20\x3e\xbb\xdb\xe0\xfe\x34\x66\x2d\xa9\xd4\x64\xa3\xf1\x88\xfa\x7c\x68\x03\xcf\x1a\xc2\x1b\x30\xb8\x8b\xf1\xe9\xaa\x10\xf2\x1e\x72\xa7\x3a\x81\x8c\x0b\xae\x48\x4a\x4c\x84\x15\x51\x45\x67\xc1\xd0\x0d\x42\x37\x9e\xc3\xd3\x96\xc4\xf3\x80\x26\x5e\xc3\xe8\xcb\x64\xec\x3a\x0e\xdb\x70\x43\x9e\x92\x8b\x24\xd3\x28\x27\x86\xfc\x8d\x54\xef\x6b\xea\xf4\x00\x75\x3e\xb9\xc0\x45\x2c\x59\x51\x0a\xf4\xc9\x0b\xe9\x59\x4d\x74\x2f\x78\x9d\xf0\x66\x1e\x61\xec\x5a\x1e\xe9\xda\x0a\xa4\xeb\x79\xa4\x71\x7e\x73\x28\xd7\x33\x94\x33\x44\x60\x3e\xc8\xc8\x1d\xb2\x73\x47\xcc\x74\x9a\xce\x86\x42\x47\x9b\x96\x86\xe3\x90\x8d\x3a\x3b\xbd\x04\xc2\x19\x57\x98\xc6\x01\xbf\xff\x6b\x64\x52\x93\xba\xca\x0e\x64\xd8\x83\x7e\x6e\x17\x92\x03\xc8\xee\x01\xb6\xe7\xda\xb7\x7c\xfd\xe3\x27\x4e\xdf\x53\x3f\xd4\x2b\x71\x23\x98\xf8\x4a\x24\x02\xa4\x61\x18\x84\xc5\x02\x7f\xa2\x54\x15\x48\xcc\x02\x88\x87\x65\x99\xd0\xf4\x91\xa0\xf8\xe7\x8b\x01\x2a\xe6\x50\xa9\x31\xb9\x81\x92\x40\x32\x29\xa9\x67\x9b\x10\xbe\xc6\xc9\x83\x68\x30\xd0\x9c\xb3\xf9\xbb\xb7\x30\xdd\x84\x34\x02\x93\x38\x4f\x08\x9b\xf8\x14\x3f\x53\xb3\xf8\xeb\xa8\xf2\x3d\xd5\x1e\x84\xf9\x1c\xd1\x43\xd1\x94\xcf\x91\xfb\x4f\x25\x29\x1d\x53\xf9\x1c\x8d\x4a\xb2\x74\x99\x56\xb5\x63\xdd\xe4\xae\xb8\xe4\x26\x4f\x20\xfc\x71\xc1\x06\x09\x98\x0e\xb8\xb6\xc2\x73\x20\x3e\xcf\xd4\x4b\x6c\x12\xc5\x92\x6a\x83\x55\x9f\x2a\xd4\xf2\xec\xf3\x24\xd2\x06\x0d\xf7\x99\x42\x60\x99\x10\x65\xf0\x61\x20\x53\xa6\x3f\x1d\x70\x59\x32\xb6\x51\xb1\x2d\xcf\x83\xc1\x94\x33\x05\x4a\xbc\xa2\x3c\xa5\xd2\x95\xd9\x51\x05\xff\x15\xc0\x36\xa9\xce\xb1\xef\xd9\x7f\x94\x20\x7c\x53\xff\x58\x31\xc9\x71\x92\xa4\x96\xbb\xc4\x77\x22\xc7\x75\x10\x09\xdf\x13\x9e\xbd\x70\x51\x78\x5e\x50\x91\x6a\x14\xc1\x44\x97\xd4\x44\x2a\xff\x24\x41\xe1\x9e\xb1\xa6\xb8\x2c\xc9\x20\x83\x73\x9e\xf4\xce\x33\xe0\xe0\x52\x35\xbf\x99\x0e\x2c\x19\x87\xda\x62\x03\x7a\x4a\x06\x3c\x31\xb4\x08\x7d\x34\xd4\x5b\x23\xbb\x80\xbc\x26\xa3\x38\x9e\x44\xaf\xd7\xd7\xa9\x5f\x99\xb9\xb7\xee\x84\x3a\xae\x55\x09\xc2\xe1\x3a\xfb\x6b\x1d\xa9\xe4\x8d\x34\xc9\xbb\x66\x1c\xad\x12\x6a\xa9\x67\x68\xd3\xf7\x07\x39\x0d\xe8\x58\xac\xc6\x40\x62\xf3\x4b\x38\xbd\xac\xfd\x8c\x67\xb2\x58\x8d\x99\x9e\x74\xa9\x30\x1f\xe6\xba\xc3\x18\x5f\xb9\x64\xf9\x74\xbe\x6e\xf9\x05\xa4\xe3\x8d\x73\x07\x12\xd1\x58\xf1\xd2\x4c\xee\xde\xfc\x33\x1c\x8e\xbc\xe0\x68\x9f\xe6\x6e\xfd\x33\x2b\xf4\x8b\x85\xb6\x0f\xb9\x4e\x94\xa7\xb6\x5f\xc4\x68\xa4\x54\xff\xc2\xcf\x02\x41\x77\x37\xd1\x80\x0f\x2d\xcf\x23\x49\x0a\x36\x79\x16\xb9\x51\xb0\x56\xaf\xd6\xeb\xf2\x2c\x5a\xee\xb2\x63\x2c\x95\x71\xdb\x49\x1d\x42\xa2\x3d\x58\x19\x6b\xe8\x2b\xb4\xbc\x4d\x35\x46\x6e\x41\x93\x6a\x31\x73\x8b\x7f\x5a\x53\xe6\xd1\x25\x59\x6a\xf3\x5c\x7b\x34\x9b\xf8\x20\xa4\xd1\x08\x43\x77\xd0\xdf\x81\xa9\x38\x32\xf5\x78\xe2\x58\x85\x81\x03\xb9\xc2\x66\x6a\x2b\x6b\xc1\x43\xcc\x3b\x8c\x2c\x40\xa7\xff\x1d\xb0\x00\x94\xb9\xab\x6a\x34\x05\x95\x0f\x1d\xe0\xd2\x91\x4e\x6c\xbf\x99\x81\x52\xed\xd3\x3b\xf0\xc9\x5c\x5f\x27\x11\x58\xaa\x82\x88\x92\xb5\x35\x74\xe5\x8c\x47\xe0\x9d\x3b\x12\x30\xb3\xac\x91\xe7\x02\x7c\xdb\xae\x91\x3d\x72\x81\x87\x3c\x53\xc2\x8a\x89\x99\xad\x59\x13\x8f\x85\x95\x81\xcb\x36\xfb\x62\x91\x96\xc8\xde\xef\x1c\xec\x2a\x3b\x4f\x7f\xfc\x41\x28\xec\xb9\x4c\x0f\x6b\xc4\xc5\x12\xf9\x8d\x54\xef\x77\xe4\x9b\x63\x65\x6c\x4d\x04\x8d\xc2\xe7\xcf\xf7\x6c\x39\xa0\xf5\xe1\x61\x62\x39\x45\xbd\x6e\x25\x0e\xb8\xbe\x53\xdb\x2e\xb1\xdb\xac\xa4\x82\xd0\xbf\x8a\xf5\x31\xe5\xcc\x45\x67\xa4\x43\x87\xad\xfb\x49\xf1\xbf\x3e\xfd\xe7\x3f\x6d\xbb\xf6\xe3\xcb\x7f\xa5\x52\x55\xa4\x9d\x60\x32\x4e\x34\xe0\xd7\x03\x2a\x0e\xf8\x98\xc5\x49\xe0\xb6\xf0\x32\xc3\xeb\x52\x2d\xeb\xc5\x86\x6f\x3b\xc5\x66\x75\xbd\x59\x4b\x85\x8f\x83\xe1\xe0\x53\xb3\xd7\x39\xfd\x22\xfd\x5a\x93\x0c\x02\x76\x00\x31\x77\xdc\xdb\x5b\xb8\x74\x0b\x45\x0b\x5e\x9b\x42\x17\x3c\x90\x53\x19\x46\xf9\xed\x4b\x40\x30\xe9\x1d\x91\x7a\x9a\x1b\x4d\xe0\x0e\x95\x7e\xb3\x51\x9e\xd7\x34\x3f\x3b\x45\x56\x13\x05\x41\x79\xdb\xa6\xde\x40\x66\x9b\x56\xe1\x24\xa1\x93\xea\xdb\x36\xc0\x04\xb0\xe2\x06\x91\xf9\xdb\xdf\x80\xd0\x27\xf8\xfa\xe8\xf4\x4b\xe5\xe8\x54\xcc\x33\x3e\x9e\xa7\xbf\x4d\x8e\x66\x02\xdf\x25\x4a\x72\xd2\x2e\x2c\x7a\xe9\xb0\x47\xad\xd0\x1e\x69\xce\x81\x6a\x0c\x7c\x9f\xed\x76\x10\xf5\x28\x27\x42\x18\xdf\x50\x83\x9b\x28\x4f\x5a\xa9\x07\xd8\xa2\xb4\xad\xf9\x1c\x9c\x00\xa3\x2f\xe0\xf5\x0d\x9a\x2d\xa6\xe5\x33\x81\x9a\xd2\xaa\xec\x91\xaa\xe0\x16\x40\x29\x16\xc0\x07\x70\x3a\xee\x7b\xd4\x11\xf7\x79\x76\x52\x1b\x7c\xde\x2b\x89\x32\x29\xa6\xb8\x58\x68\x36\x6b\x85\x32\x51\x5e\x01\xab\x65\x52\x2b\x95\x95\xc1\xf0\xe3\x47\x19\x1d\x7f\xdf\x2c\xd6\x4a\xbb\x9a\x4d\x59\xb9\xa3\xa4\xfa\xbc\x56\x53\x3a\xdd\x43\x87\xf1\x90\x12\x3f\x30\xc4\x14\xc9\xf4\x69\xb8\x8c\xb0\xd7\x38\x65\x4c\xd7\xcc\xf4\x06\x14\xfb\xa2\xb9\x2b\xb2\x9a\x32\x3a\xa5\x6b\xa5\x64\x67\x58\xc0\x11\xa5\x82\x91\x37\x06\xce\xa8\xc3\x7f\x91\x7e\x4c\xc5\xd8\x46\x4b\x86\x9d\xca\x20\x87\x36\xfb\xdb\x99\xda\x34\xc4\xf5\x6c\xf9\x8e\x5c\x8c\xc4\x8d\x55\x5d\xf1\x53\xb3\xdb\xfe\x82\x51\x6c\xc1\x18\xfc\x4b\x07\x53\x8f\xb8\xfe\x20\x08\xc7\x68\x10\xb3\xfa\xc1\x54\x04\xd9\xd9\xdc\x52\xbc\x60\x31\x37\xbb\xed\xa5\x0b\x19\xf0\xd6\x52\x52\xce\x2e\xd3\x89\x74\x73\x87\x38\x95\x23\xe1\x30\x4a\x70\xdb\x47\xe4\xf7\x3d\x52\xf8\x7b\x81\xad\x66\x1b\x1e\x6a\x0b\xff\x5d\xd0\x44\x03\xdd\x61\x71\xdb\x64\x87\xea\x12\xe9\xed\xb6\x0b\xe5\x9c\xe0\xc5\x17\x79\x21\x83\x2f\x88\x3d\x52\x43\xab\xc5\xcf\x22\x91\x37\x7b\xd7\x3d\xd3\x8c\x32\x36\x40\x30\x17\x76\xd5\x01\x5d\x32\xc5\x14\x82\x9a\x1d\xea\xb9\x63\x57\x0e\x24\x41\xe2\x4f\xf7\x4f\xc3\xd0\x35\xd4\x57\x02\x25\x33\xe1\x98\x60\x38\xb4\x20\x68\x8a\x4c\x2c\xc7\xf1\x5c\xbf\x20\x8c\x25\xab\x8c\xc6\x08\xb3\xf0\x5c\x71\xd8\x4a\x19\x2f\x7b\x23\x3a\x27\xc1\xd8\x8d\xe1\xac\x91\x67\x1d\xa8\xe3\x5a\x26\x99\x68\x3a\x99\x78\x73\x14\x62\xfe\x03\x54\x31\x9b\x40\xa1\x94\x31\xc0\x18\xbe\xfd\x91\xe5\x37\x93\xa6\xaa\x2a\x4d\xaf\x54\xe6\x9f\x03\xf2\xf2\x3c\x4e\xb2\xb7\x72\xe7\xd3\x89\xe0\x6a\xe5\xd9\x63\x26\xe3\x9c\xc7\xa5\xca\xea\x7f\xd9\x54\x3c\x72\x26\x12\x6f\x38\x7b\x24\x39\x99\xb6\xe9\x09\xbf\x32\xe9\x7b\xb7\x46\x6a\x5f\xc0\xe3\x69\xa4\xe3\x57\xe4\xf0\x99\xa8\x7c\x7e\x23\xfe\x78\xbe\x47\x0a\xaf\x55\xa6\xcb\x87\xc1\xd4\xca\xcd\xef\x7f\xce\xf2\x4d\x3a\x96\x1a\x4a\xde\xb2\x56\x2a\xa4\x46\x90\x3e\x5b\x2b\x31\x8d\xe2\xa2\x3d\x2a\x29\xfd\x6e\x3e\xe2\xb8\xb4\x47\xa9\x43\x20\x0d\x47\xb4\xbe\x4e\xae\x7c\x19\x37\xa8\xf9\xf1\x24\xe1\xdb\x7d\xcb\xf5\x48\x30\xe5\x4b\x62\x05\x99\xc0\x23\xcd\x7c\x0e\xab\xb7\xe6\x5b\x77\x82\xf1\xf2\x8a\x32\x3a\xf5\x63\xd7\x4b\xf4\x9a\xbc\xe8\xbe\x56\xb7\x49\x44\x50\xdf\xaf\x64\x9f\x7a\x9e\x1e\xd7\xa7\x9a\xf7\x12\xc8\x20\xcb\xb6\xa7\xe3\xa9\x67\xc5\x4a\x14\x46\xb2\xfd\x7f\xaa\x7e\xa9\x10\x72\x66\xdd\x52\x12\x4d\x43\xca\xe3\xb2\xf1\x6a\x0f\xd8\x71\xd2\x77\xb4\x08\xa1\x2a\x69\x4e\x48\xdf\xd2\x92\xd0\x78\x25\x74\x56\xe2\x2c\xcf\xfb\xf5\x31\x98\x42\x20\x8b\x43\x63\x8c\x22\xb5\x50\x6f\x47\x0b\x06\xe0\x48\x80\x7b\x51\x7f\x4e\xec\x11\x85\x97\xf9\x24\x39\xa9\xf4\xd5\x92\x1a\xea\xc8\x8a\xf8\xf5\x0d\xb1\xe6\xd3\xc9\xf6\xcc\x57\x02\xb8\xa7\x29\xf1\x87\x63\xd4\xd2\x2d\x9f\x64\x03\x1b\x55\xb3\xeb\x8c\xdd\xd8\x38\xaa\xfd\x33\x1e\xc3\xaa\xc5\x7e\xaa\xd1\xb7\x7d\x4a\x42\xba\x06\x1d\x70\x92\xc8\xea\x05\x0e\xfb\x66\xf4\x48\x19\x44\x29\xb9\x14\x91\xc0\x1f\x06\x60\x6d\x09\x25\xc3\xf0\x7d\x47\x26\x29\x2e\xdc\x25\x00\x52\xf7\x36\xa5\x0e\xdf\xfe\xc7\xd6\x3d\x49\xc5\x78\x2e\xbb\x43\xc4\xae\x87\x2c\x49\x64\x71\xa9\x22\xf2\x48\x7d\x5b\x91\x72\x4d\xe5\x5e\x2f\x7e\xbe\xaf\xf5\x3f\x7f\xfe\x83\xc9\x76\x69\x7d\x55\x2d\xc6\xb4\x8b\x25\x3b\x70\x81\x5b\x37\xe1\x93\xda\x17\x7e\xcd\x3c\xb0\x30\xe9\x73\x4a\x45\x56\x7b\x96\xd2\x92\xcf\x03\x19\x02\x1e\x84\xf0\xb2\x55\xe6\x01\xef\x29\x38\x01\xf4\x4a\xe4\xba\xb2\xd6\x99\x17\x30\x5a\x7e\xb0\xc3\xc0\xfa\x41\x18\x77\xa8\x15\x05\xbe\x62\x21\x16\x6b\x94\x1f\x0b\xbf\xe7\xc4\xe0\x8a\xdb\x96\x42\x84\x0d\x37\x0e\x02\xe2\x05\xfe\x10\x6d\x56\x3a\x2d\x43\x23\x00\xcb\x77\x31\x28\xc2\xd3\x4c\xa1\xc4\xce\x8f\xb5\x5a\x0e\x69\x3a\xee\x53\x87\x89\x16\x9a\x33\xf4\x16\x52\x84\x94\xa6\x12\x7e\x93\x35\x39\x0d\xbf\x1b\xc0\x15\xf2\x46\xe4\x8e\x29\xd3\x9d\xe9\xfd\xc4\x0d\xa9\x83\xcd\x9a\x88\xaa\xc3\x4b\x48\x24\x07\x9b\xb0\xfc\x79\xc1\xb0\x58\x58\x20\xee\xaf\xb1\x07\xae\x64\x62\x42\xcc\xa4\xa7\x72\x0e\x48\x9d\x29\x73\x17\x4a\x17\xd0\x71\x88\x15\x35\xcb\x70\x96\x24\x6e\x94\xda\x8d\x2a\x9b\xc3\x29\x25\x35\x2f\xd2\x2b\x2d\x57\x8c\xd4\xdb\x2b\x87\xfe\x50\x50\x31\xe0\xc8\x4a\x8e\xc8\x29\x04\x63\x23\x7a\x43\x3c\x72\xfd\x5b\xcc\xfa\x20\x84\xce\x7c\x74\x16\xe5\x02\x20\xc9\x8d\x31\xcd\x04\x18\x88\xbe\x52\x52\x97\xc4\x64\x30\x28\x5d\x2b\x9c\xd0\x39\x57\x41\x85\x2d\x2f\x0c\x13\x4a\x08\x29\xa6\xee\x9b\x49\x0d\x76\xe5\x84\x7b\x05\xc8\x39\x79\x43\xea\xe0\xc8\xa2\x3d\x3a\x64\x72\xc5\x1e\x88\x5b\x23\x3f\xaf\xe4\x81\xc6\x93\xc4\xfb\x8e\x47\x23\x09\x80\xdc\x6c\xd6\x20\xa0\x1f\x7c\x78\x9b\xdd\x36\xfb\xcf\x75\x6f\xab\x2e\x80\x02\x72\x8c\xfd\xa2\x0d\x15\xa1\x08\x1e\x2f\x6d\x30\x4b\x9a\x36\x6e\x6c\x99\x6d\xc3\x82\xe0\x27\x56\xe5\xcb\x27\x56\x45\x46\x3b\x3c\xe7\xc5\x54\xb3\x10\x08\x53\x26\xc2\xbe\x64\xb4\xb1\x8b\xd7\x55\xc8\x4f\x36\x9f\x50\xf2\x82\x14\xa0\x53\xb8\xbc\x8e\xbb\x17\xe7\x15\xdc\x30\xdd\xc1\xbc\xc8\xbe\x28\xe5\x5b\x32\x64\x97\x93\x3e\x57\xd0\x5d\xe2\xa9\xdd\x6b\xa3\xb3\xc5\x9f\xd3\xbd\x98\x63\x2e\x83\x66\x0a\x3a\x79\xe0\x50\xf2\x3b\x13\x97\x97\x83\x42\x92\x70\x20\x83\xfd\xa1\xac\xc3\x36\x5b\x52\xb7\x2e\x87\xa5\x21\x23\xae\xe8\x4c\xc0\x7e\xe0\x46\xfc\xf0\xe9\x4f\xe3\x4a\xa5\xc2\xeb\xc8\xaa\xc2\x24\x2d\xa4\x01\x1e\xb7\x78\x6f\x50\x0e\xd0\x8d\xa4\x10\x91\x61\x10\x1b\xd0\x5f\xca\x82\x14\xae\xf5\x02\x98\x85\x62\x74\x38\xe1\xe8\xfa\x38\x05\x12\x89\xc5\xa1\xd1\x1b\x42\x8e\xa7\x51\x2c\x40\x2d\xc4\xb5\x32\xe9\x17\x18\x12\xb8\x97\x15\x38\x8c\xd1\x30\xb4\xfc\x98\x14\x01\x3e\xa3\xf0\xf9\xfe\x55\xb5\x50\x2a\x93\x22\x00\x69\xb0\x3f\x1d\xf8\xf3\xf2\x0c\xff\xa2\x12\xd7\x82\x11\x2b\x36\x2e\x79\xa9\x41\xa1\x84\xa6\x59\x2f\x40\xdd\x71\x9a\x72\xf8\x62\x27\xb3\xb0\xfd\xba\x71\x24\xb1\x43\x24\xa9\x04\x43\x83\xb5\x90\x51\xae\xcd\xc2\xc2\x28\x66\x71\x68\x5e\x93\xea\x7d\xc1\xb4\xa1\xc0\xb2\x55\x2c\xe4\x55\xdd\x44\x6e\x16\x26\x2e\xe7\x15\x8b\x5d\xd4\xf9\xbb\xf2\xa7\x64\x0d\xe3\xaa\xfe\x92\x7d\x9f\x4b\x5c\x7e\x30\x8b\x0f\x0f\xd6\x52\x9d\x64\x1d\x8a\x5e\x4d\x42\x3d\xf6\xef\x82\x5b\x9e\xf3\x43\xf8\x6a\xc4\x01\xe9\x9e\xad\x77\xce\x44\x19\xe5\xf6\xc4\xe4\x67\xaa\xc1\x6a\xc0\xdb\x19\x7a\xbf\x45\xae\x47\xfd\x04\x91\x23\xdf\x62\xcd\xee\x11\xe7\xdd\xf6\x59\xea\x25\xd8\x16\x70\xb5\xb1\xe2\x57\x6b\xf3\x1c\x67\x9b\x25\xf2\x4f\x94\x72\x48\xb7\x47\xa0\x72\xb1\xdd\x39\x33\x79\x5e\x44\x34\xc6\x62\x67\xf8\x94\x29\xcc\x48\xea\x45\x9a\xd3\xad\x57\x05\xe1\xc6\x34\x0e\xc6\x80\x3d\x7b\x4e\x67\x90\xe6\xab\x78\x7a\x9e\x47\x9e\x15\x6e\x5a\x61\xe8\x5a\x43\x8a\x01\x19\xe6\x66\x72\xf6\x22\xe1\x80\x99\xda\x2a\x55\xc6\xc2\x04\x9e\xc9\x9d\x08\xb6\x9e\x2c\x58\x2e\x9b\xf4\x90\x5f\xe1\x94\xd9\x4f\xa3\xed\x2c\x9b\x6f\x0c\xdb\x5e\x3f\x68\x35\x3b\xdd\xde\xa2\x79\x3b\x68\x35\x97\x4e\x9b\x78\x8b\x95\x31\x71\x58\xa2\x56\x2d\x69\x8e\xa7\xb5\xd7\x88\xa2\xd5\x6a\x36\x4f\xce\x34\x73\x42\xd6\xe5\x78\x32\xf1\xb8\x73\x61\x53\x84\x6e\x40\x83\xb9\x6e\x82\x1b\x09\xf1\x8b\xd3\x33\xc5\x6c\x83\x61\x7d\x39\x70\x62\xaa\x1d\x27\x33\xe5\x88\x9e\x8a\x0f\x8b\x6f\x48\x6d\x83\x9d\xfd\x3b\xd5\x92\xe2\xed\xa4\x57\xb1\x3d\x6a\x85\x6f\x83\x31\x2d\x2a\x68\xa5\x19\xaa\xd7\xbd\x2e\xb8\xa4\x76\xe8\x10\x20\x9b\xa7\x9e\x57\x16\x99\xb3\xb1\xca\x8f\xbc\x31\x6e\xc9\x31\x76\x9b\xe7\x66\x0e\x46\x34\xee\x50\xc8\x27\x75\xed\x3a\x34\x50\x64\xd4\x48\x71\x5b\x52\xbc\xc8\xa5\x77\x11\xba\x43\xd7\x4f\x2d\x2c\x23\xb5\x97\x92\x5a\xe3\x7d\x2e\xb9\xf7\xa1\x35\x41\x7f\xec\x65\xe4\x6a\xf5\xd7\xc2\x49\x33\x8c\x11\x6b\x4a\x05\xbb\xd4\x67\x58\x01\x93\x2a\xe5\x33\x1f\x85\x69\x9f\x91\x5a\xd6\x7a\x3d\xe1\x76\xaf\xd9\xca\x1d\x0e\x52\xbc\x46\xcc\x93\x65\x34\x37\xaa\x7c\x44\xa3\x60\xc6\x3d\x93\xfb\x56\x98\x47\xba\x2b\x0a\xac\x48\x7d\x93\x53\x6f\x00\x6e\xd8\x4e\x95\xac\x81\xd0\x16\xf9\x9a\x28\xc1\xe6\x62\x6c\x6c\x01\xda\xde\xe2\x55\xb7\xc9\x99\xc4\x65\x6e\x6d\x26\x27\x37\xbf\xb1\x44\x44\x57\x17\x85\x6d\x2e\x5a\xfb\x96\x7d\x6b\x85\x61\x30\xc3\xc8\x07\xea\x3b\x11\x18\x6c\x30\xf3\x3a\x1b\xe9\xfe\xc9\x59\x69\xf1\xde\x22\xcb\x77\x59\xf5\x7d\x59\x7b\xd9\x58\x6b\xd5\x6a\xf5\xb5\xea\xe0\x19\x08\x17\x42\x70\x44\x94\x38\x1a\x49\xdb\x7a\x98\x4b\x51\xd1\x15\xc4\xa6\x92\xf5\x58\x46\x88\x8d\xd7\x8b\x42\x49\x76\xcd\x6c\x9d\xfb\x36\xb8\x68\x43\x06\x97\x05\x5e\xed\xb5\x6a\xb5\xbe\x70\x1c\xf0\xf2\x15\x5a\xc3\xe8\x67\xc7\x02\xde\xd7\x7f\xed\x50\x6a\x62\x45\xc1\x5a\x01\xd3\x5c\x10\xc7\xc1\x18\xdc\x25\xe3\x39\x09\xa6\xf1\x64\x1a\x9b\x5b\x81\x2a\x17\xfe\x05\x14\x59\x61\xfa\x6b\xb5\xfc\xb6\x98\x38\x82\x93\xf5\xc2\xa6\x4e\xe8\x3c\x8a\xc3\xe0\x76\x15\x61\xdb\xe0\x7b\x33\x93\x52\x00\x7c\x03\xdf\x16\x08\xc3\xe1\xaf\x1c\xec\x0e\x79\x4b\xe7\x8b\xa5\x7d\x4c\x63\x0b\x04\xbd\x85\x5e\x29\x2b\x34\xfc\xca\xd4\x70\xc3\x8b\xcd\xed\x62\x84\xbc\xd4\x05\x92\x0f\x9f\xe7\xf4\x88\x5d\x0c\xdc\x60\x1a\x35\xbc\x18\x3a\xf6\x7e\x64\xc5\x5f\x75\x27\xea\xc7\xd4\x94\xd8\x5c\x4b\x2a\x5b\x4a\xa5\xdd\xe5\x6d\xa9\xc5\xc1\x1c\x06\xec\x2b\xa8\xee\xd6\xfc\xbf\x29\xdd\xef\x09\x03\x5e\xa9\x0b\xcf\x56\x18\xa3\xb1\xa5\x3c\x5d\x64\x19\x5b\x25\x08\x06\x59\xa4\x93\x6c\xf2\x9d\xf9\x2a\xa2\x4c\x46\x68\x08\xd1\x58\x5d\x3b\xa4\xd4\x27\xfb\xe0\x83\xac\x0a\xd7\xe6\xcb\xd7\x79\x87\x82\xac\xbd\x8a\xaa\x51\xab\x6e\xee\xbc\x96\x48\x4f\x02\x8f\xd2\x8a\x34\x9c\x27\xd9\x8c\x12\xa5\x28\x03\x8a\x35\x5a\x5c\xe4\x59\xff\xc8\x0b\x20\xce\x34\x70\xa6\xcf\x55\x16\x89\x79\x2e\x71\x33\xc7\x97\x0c\xd2\xa8\x4f\x26\xd4\x32\x6f\x8a\x4f\x21\xae\x76\x96\x47\xef\x16\xb3\xef\xbf\x59\x65\xa8\x5a\xdd\xe4\x27\x70\x68\xd9\xb7\x94\xdd\x57\x26\x56\xc4\x2f\x1b\x95\xbc\x29\x95\x85\x2f\x59\xd9\x05\x73\x9a\xf2\xda\x5c\x6e\xd4\x59\x7c\x95\x52\x6f\x43\x86\x1b\x15\xd1\xdd\x0e\x95\xeb\x95\x44\xc8\x89\x46\x56\x88\x28\x90\x06\x1f\x19\x76\x40\x66\x9c\xfc\x10\x80\x11\x73\x7b\x98\xef\xc3\xdc\x5e\xa2\x3b\x17\xfe\x50\x31\xe4\x3d\x2f\x09\x53\x35\xb4\xcb\xb1\xda\xf0\x36\x67\x09\x30\x04\x15\xce\x80\xa3\xb9\xdb\xde\xd4\xe1\x49\x75\xd3\x6e\x6d\xec\xb3\x66\x15\x86\xd0\xac\x91\x88\x42\x8a\x44\xf0\x69\x01\x77\x37\x01\xc1\x09\x1e\x71\xec\x8e\x0f\x9e\x2c\x15\x42\x7a\x02\xe9\x57\x00\xf6\x8a\x9b\x67\xb3\xc6\x31\x74\x01\xb6\x9d\xdb\x1f\xf0\xc9\x9f\x11\x91\xa3\x67\x27\x89\x2d\x47\xa8\x3e\x65\xa2\xbd\x6a\xec\xd3\x71\xe0\xbb\x36\xc6\x11\x81\x63\x79\x24\x2d\xa8\x96\x78\x4e\x4c\x70\xab\x25\x34\x1d\x37\xa9\x21\x07\xd9\xcd\x97\xa0\x4d\x4d\xe0\x0d\x3b\x89\x4f\x13\x66\x1b\x18\x00\xee\x98\x8f\xee\xf1\x4a\x8f\x2d\x7f\xce\x07\xc5\x68\x49\xd7\x76\x47\x82\xd1\xa7\xbd\x78\x9a\xcd\x1a\xd9\x5b\x30\x85\x12\xe4\x18\x91\xc0\x42\xca\x7b\x9c\x08\x8d\x7c\x4b\x85\x37\xc4\x16\x6c\x5b\x6a\x0b\x8c\x69\x8b\x5a\x68\x76\xdb\xa4\xb8\xc0\x95\xa9\x94\xc5\xdb\x47\xbc\xd9\xa4\x0b\x7d\x3a\x74\x7d\x6c\x1f\x1e\xa0\x3f\x15\xd0\x6a\x38\xb6\xe6\x24\xb6\x6e\x29\x02\xd8\x04\xfc\x21\x55\x45\x05\xd7\x58\xd1\x6d\x2f\xec\xe8\x45\xb7\x49\x8a\x17\x98\x97\xc0\x1f\x12\xf4\x2d\x24\xd2\x1a\xfa\xe8\x5e\x7e\x29\x94\xc9\x20\x60\xd7\x16\x91\x2d\x42\x5a\xd9\x79\x04\x26\x60\x81\x60\x7a\xaa\x50\x01\x1a\x8f\xb1\x3c\x0f\xe7\xed\xf6\xd8\xc8\xf6\x5b\xa7\xa9\xe1\x5c\x2c\xe1\x3b\x18\xe8\x33\x9d\x7e\xcf\x14\x25\xd7\xc7\x6f\xd1\x3d\x98\x67\x3b\xd7\x73\x1b\xb8\x11\xbb\xab\xa6\xb7\x07\xa8\xa5\x37\x7a\x3e\xf5\x3c\x52\x3c\xbf\x3a\x95\x4f\xff\xdd\xc5\x26\xb7\x66\xb3\xf6\xa9\xf0\xf9\xbe\x5a\x2d\x7c\x21\x19\x93\xb9\x1a\x17\xf1\x7d\xea\x86\x73\x52\x6c\x9d\xbf\x4b\xbc\x0a\x42\xcb\x8f\xc6\x00\xbe\x1a\xcd\x68\x08\x2f\xee\x63\x1a\x45\xd6\x90\xaa\xab\x55\x3c\x72\x67\x4b\xb1\xa1\x43\x6c\x3d\x78\x25\xf8\x08\x4d\xc2\xd9\x0f\x70\x98\x33\x0a\x21\xd8\xc9\x0e\x89\x27\x86\x79\x08\x5b\x8b\x87\xd0\x61\x73\x2a\x5d\x24\x4a\x39\x44\x5e\x02\x11\x13\x1c\x43\x82\x61\xe1\xfa\x43\x46\x27\xe5\x60\x9e\xdc\x0b\x8b\xfb\x5d\xc9\xa3\xb3\xe0\x4e\x03\xc0\xe6\xfb\x13\x26\x49\xf0\x55\x60\x1a\x81\xc4\x52\x16\x69\x97\x11\x42\xd2\x92\x8e\x17\x50\x67\x6c\x85\x43\xd7\x2f\x33\xce\x61\x00\x2d\x9c\xb6\x7e\x00\x00\x93\x4c\xd4\x6c\xd6\x50\xce\xe0\x76\x96\x0f\x0e\xbb\x79\x4a\x07\x71\xda\x4f\xe5\x6d\x10\xba\x0f\x81\x1f\x5b\x1e\xe9\x59\x7d\x52\x7c\xdb\x5b\x36\x48\x78\xea\x8e\xad\x3e\x89\xe2\x60\x82\x88\x33\xf8\x05\x3a\xbe\xe2\x50\xd8\xd1\xed\x07\x64\x30\x0d\x11\x7e\xf8\x57\x59\x23\x92\xd1\xaf\x00\x8c\x85\x3e\x61\x9e\xeb\xa7\xdf\xb8\xc4\xe8\x5e\x2d\x1f\xdd\x20\x08\x67\x56\xe8\xf4\xac\x7e\x37\x0e\x26\xa9\x09\x3c\x75\x7d\x4a\x0e\x29\x75\x48\xf1\xf4\xb0\xa4\x1d\x90\x60\x0a\xb6\xad\x69\x04\x57\x19\xb0\xfc\x0e\x58\x41\xc8\xa0\x85\x30\xfd\xbe\x92\x45\xa5\x42\xc0\xeb\x53\x9a\x8b\x61\x65\xaa\x16\xe3\x9c\x11\x58\x2b\x8d\x60\xcc\xfa\x98\xea\xfb\x35\x0d\x63\xd7\x16\x53\x73\x9d\x4c\x8d\x8c\x1e\xc4\x98\xf3\xd3\xc3\x9c\xa6\xfb\xfa\xe2\x51\x7a\xa4\xe8\x3a\x41\x38\xe6\x0c\x3a\x3c\x7c\x74\x0b\xf6\x0a\x2d\x08\x7b\xb9\x40\x30\x2a\x36\x3b\xba\x90\x19\x56\x11\x17\xa3\x40\xf7\x19\x5c\x20\x27\xce\x72\x2e\x4b\x33\x1d\x9a\xb8\x8a\xd5\xd4\x43\xca\xc8\x1d\xc4\xe4\x62\x1a\x93\x62\xf7\xa2\x54\x26\xd6\xad\x45\x4e\x03\xfb\x96\x7f\x51\x25\xc5\xd3\x6e\xad\xa4\x1b\xd4\xc9\x51\x2d\x95\x74\xc3\xf5\xc9\x51\xfa\x18\x11\x7d\xa4\xb9\x7d\xe4\x20\x2b\xb5\x82\xa1\x47\x6d\x9f\x14\xbb\xed\x9c\x0e\x55\x33\x1d\xaa\x3e\xa2\x43\x83\x65\x1d\xaa\xea\x1d\x92\x67\xc3\x85\x4f\x8a\x1f\x2e\xce\x65\xe3\xe7\x41\x2c\x26\x89\x1d\x4a\x89\x0e\x2e\x17\x9c\x06\xf8\xd1\x16\x05\xde\x18\xfb\x55\xab\x2d\xde\xf4\x93\x6e\x0c\x06\xac\x1f\x8a\xdc\xfe\xc9\x1d\xd9\x58\xdc\x91\xa6\xe5\xdb\xd4\x23\xc5\x66\x23\x61\x45\x7b\x40\x60\x6b\x73\xa6\x18\x64\x28\x35\xf8\xc4\xa3\x42\xf5\xaf\x80\xc8\xff\xf1\x98\x3a\xae\x15\x53\x6f\xae\xe8\x27\xcf\x78\x4a\x57\xa6\x9e\xd2\x7b\x6a\x4f\x95\x51\xb4\x63\x84\x4a\xe1\xbb\x17\xbc\xe8\x86\x61\xa0\x38\x7c\x72\xf7\x34\x1e\x45\x9c\xa7\x21\xd4\x52\x87\x47\xda\x5f\x40\xbe\x2e\xdf\x51\x02\x10\x32\x52\xa9\xcf\x48\x7e\x19\x0b\xb0\x03\x0e\xb4\x01\xf0\x7c\x0f\x44\xe2\x9e\x44\x61\xc8\xe0\x81\xcb\x5b\x1e\x93\x39\x5c\x05\x5a\x12\x7a\x0d\x80\xe8\xc7\x6a\x3e\x20\xfa\xc2\xc7\x08\x84\xc2\x9b\x42\x6a\xc1\x4f\xfb\x51\xec\xc6\xd3\x98\x92\x62\xf7\x6a\x3f\x6f\xef\x6b\x36\xce\x73\x98\x67\x19\x37\x3f\xc6\x53\x45\xc7\xc2\x0b\x62\xb1\xd5\x6d\xe6\x1c\x10\xb5\xfe\xe2\x39\x48\x42\x75\xd8\x17\xad\x6e\x33\x53\xc2\x1c\x19\xa0\xc0\xcf\x15\x55\xd7\x2c\xee\x22\x8f\x2e\x5b\x9a\x77\x92\x1a\xea\x9c\xb8\xdb\xb6\xba\xcd\x1c\x77\x5b\xa4\xa7\x34\x29\xc2\x9a\x45\x4f\x4b\x39\xde\x51\x26\xbf\xda\xb4\x7b\x0f\x8f\xed\x16\xa4\x52\xd1\xb1\xe0\x40\x5a\x3c\xc8\x55\xf9\x5e\x0e\xf2\x56\xee\x3a\xd9\x21\xe6\x44\x3a\x02\xa9\xd9\x0d\x8d\x09\x6d\xca\x98\x01\xa2\x52\xa9\x28\x51\xfc\x0e\xbd\x27\xc5\xf6\xf9\x81\x14\x9e\x53\xf7\x96\xe9\x48\xa0\x16\x94\xf1\xf2\x79\x2b\x20\x69\x3e\x48\x75\xd0\xd8\xe7\x9d\x4d\xd6\x67\xed\xd6\xf7\xa9\x70\xb0\xfc\x5c\x63\x4d\x19\xb4\x07\xf0\xbc\x07\xf5\xa7\x78\xde\x3a\xcd\xe9\x60\x7f\x1a\x13\x27\xa0\x91\x5f\x88\x89\xe5\x38\x70\xc2\xe6\x28\x9a\x3b\x5b\x86\xee\xb5\x9e\x76\xec\x9a\x15\xd4\x83\x60\xe6\x2f\x56\x50\xa7\x1e\x06\xd6\x74\x69\xcc\x74\xd5\x6e\xce\xec\xef\xec\x18\xba\xfa\x76\xa5\xae\x0a\x2d\x52\xff\x62\x98\x1a\x43\x29\x1d\x86\x0a\x0f\x59\x42\x1e\x3a\x6d\x5d\xbf\x99\x4e\xe0\x56\x90\xaf\xbd\xec\x38\x86\xfe\x9e\xad\x70\x69\xc1\x76\x4f\xcd\x02\xd0\x45\xc3\x10\x6a\x0b\x75\x52\xec\x76\xeb\xc9\x05\x12\x73\x6c\x04\x03\x72\x54\x27\x32\x4f\x09\xf0\x55\x8f\xbd\x4b\x92\xb5\x28\x88\xc6\x0b\x4f\x59\xc3\xf0\xa8\x61\x78\xe7\x8b\x8f\x56\xad\xf3\x1b\xac\xf3\x1b\xa6\xce\x6f\xfc\xf5\x9d\x1f\x18\x3a\x7f\xb1\xb8\xf3\x07\xf4\xce\xb5\x69\x12\x5c\x86\xa6\x87\xe2\x41\xb3\xab\x1c\x32\x1c\x8e\xc5\x22\x07\xcd\x6e\xe2\xa9\x8d\x97\x0c\x24\xb0\x26\x08\x08\x21\x00\xbb\xf6\xa7\x0f\xbd\x56\xe7\x0c\x80\xeb\x1e\xab\xee\x34\x03\x3f\x72\x1d\x1a\x26\x25\x59\xbf\x0e\x5a\xcd\xce\xbb\x6e\xb7\x2c\x70\x46\x62\x11\xcd\x4c\xe9\x98\x70\x17\x8c\xbe\x97\x23\xba\xaf\xaa\x06\xf6\x5c\x2e\x3e\xd1\x72\x83\x0b\x32\x0e\x9c\x19\x80\x0f\xb3\xf3\xee\x6e\x2a\x91\x74\x88\xc2\x31\xb5\x42\x87\x3a\xa4\x11\x52\x8b\x14\xbb\x97\x0d\xc9\xfc\xf7\xae\xe7\x81\x5e\x25\xf9\x90\x33\xb8\x6d\xc3\xe0\xae\x97\x19\x55\x9c\x6c\xe3\xad\xa7\x34\xfe\xd2\xd0\xf8\xfb\x25\xab\x46\x8c\x5d\x88\x5c\xf7\xa2\xfb\xf8\x86\x4d\xbb\xe7\x87\x95\x96\x6b\xb2\x18\x95\x38\xca\x62\xb7\xd9\x2e\xa3\xbe\x7a\xd0\x6a\xb6\x93\xb3\x92\xdf\x07\x65\x42\xce\xf6\x41\x85\x90\x8b\x7e\x14\xc0\xe9\xce\x2e\xc5\x6c\x28\x68\x8e\x24\x76\x81\x14\x0f\x1a\x39\x1b\xfe\x2b\xcb\xd0\xe5\x9b\xe5\x1b\xa8\x0e\xd5\x83\x50\x45\x6f\x6a\xbb\x75\x3b\xa5\x2a\x2e\x0a\x13\x2d\x36\xbb\x6d\x2d\x26\xc7\xa3\x16\xcf\x6e\x39\x0e\xa2\x2c\x0e\x00\x5f\xe2\x10\x3d\x9a\x33\x9a\xbe\x61\x34\x9f\x7e\x6a\x4d\x99\xe3\xbb\x44\xa4\x44\x4e\x34\x97\xf8\x7a\xd1\x82\x6c\x76\xdb\xe9\xe5\x67\x88\x6a\x92\xfc\xb9\xe2\xee\xa4\xf2\x9a\xc3\x76\xbf\xf5\x8b\x6e\x73\xfd\xf2\x6c\xbd\x71\xd9\x24\x76\x30\x1e\x5b\xbe\x13\x71\x43\x98\x34\x3f\x0b\xcc\x16\xd5\xf0\xfc\x8c\x67\xc7\x82\xdd\x4a\xe4\x02\x15\x9e\xaa\x6e\xcc\x7d\x66\xad\x08\x5d\x5f\x93\x87\x00\xad\xfd\x40\x58\xa8\xd2\x13\x04\x60\x37\x0b\x36\x9d\x02\x4f\x41\x97\x33\x87\xb6\x61\x0e\x3f\x7f\x5e\xbc\x8a\x0c\x96\x71\xe0\x06\xf8\xc8\x96\x92\x54\xb9\x9c\x45\x21\xf5\xb0\x34\xb7\x9c\x04\xb2\x3a\x66\x02\xcc\xe9\x99\x49\xd9\xf8\xf2\x13\xd2\x95\xb9\xa3\x5c\x18\xef\x28\x89\x33\xc0\x02\xa6\xaa\xf5\xb4\xb8\x4f\x25\xd8\x4d\x5e\x9d\x67\x56\x3a\x0a\x41\xf5\xa8\x95\x0f\x99\x8b\x2e\x29\x8c\xaf\x6a\x33\xef\xa5\xf3\xb3\xc3\x54\x36\x11\x90\xa5\x04\xf1\xcd\x69\xbc\xa0\x2d\x49\x82\x55\xaf\xc8\xbb\x99\x15\xce\xb3\xc1\x4c\x9f\xaa\x5f\x2a\x00\x94\x57\x5c\xff\x47\xf1\xb3\xf3\xa2\xb4\x5b\xac\xfc\x5a\xfa\xcf\x75\xfe\x38\x89\x01\x1e\xf3\xa4\x7b\xd9\xea\x64\x8f\x51\xfe\x54\xff\xa2\x39\xd0\x24\x57\xb7\x0b\xb8\xba\xb1\x22\xb5\x2f\x06\x38\x81\xd4\x53\xb2\x19\x24\xe7\xa2\xdb\x34\xfa\xc4\x67\x7b\x53\x2a\x29\x98\x52\x8b\xae\x73\x17\xa9\xeb\x1c\xbc\xd1\xda\x73\x72\xc6\x1f\x10\x8a\x97\x67\x8f\x3f\xb4\x4c\x3a\xe6\x3f\xfe\x95\x7a\x48\x23\x71\x5e\x25\x97\x3c\x1f\x9e\x38\x47\x8a\x8d\xcb\xe6\xe3\x87\x68\xd2\x44\xbf\xfe\x2b\x87\x08\x91\xaa\xf7\xf5\x2a\x59\x23\x57\x3e\xf8\x29\x40\xf6\x30\x00\xe0\x41\x50\x94\x88\x92\x00\x1c\x47\xad\x98\x3a\x90\x23\x29\x72\xfb\x90\x31\x15\xdf\x88\x96\x2a\xe5\xaf\x31\xc6\x51\xb6\x74\x48\xd6\x84\xfe\xff\x92\x28\x30\x3b\xf8\xf8\xac\xb8\x37\x47\xa4\xd8\x7d\xd9\xac\xe1\xd1\xa3\x52\x38\x4a\x28\xec\x2c\xa5\xb0\xa3\x50\xd0\x7e\xce\xf7\x01\xb7\x38\xe9\xb3\x15\x45\xd3\x31\x25\xd0\x26\xb1\xbc\x99\x35\x8f\xf2\x27\x38\x3d\xaa\x53\xe8\x53\x8c\xce\xdf\x76\x80\x10\x12\x6c\x8b\xf3\xe8\x1d\xf5\x48\x2d\x3d\x86\xb3\xc5\xe5\xeb\xe9\xf2\xe7\x8b\xcb\x6f\x64\xdf\x9b\x99\xc0\xd5\xab\x2b\x0b\x17\x97\x9e\xdc\xa2\x2b\x99\xa8\x56\xf3\xf9\x58\xe4\xf1\x21\x8e\x86\xd7\x30\xf4\x2a\x1b\x3a\xb8\x7c\x8c\x56\x45\x93\x80\x9d\xeb\x87\x96\xd7\x0c\x15\xd0\xff\x28\xe8\x0f\xbd\x69\x6e\xfd\xc7\xbf\x86\x55\xdc\x98\xb7\x53\x28\x09\x2f\x65\xe1\x74\xd5\xf0\xdc\xa1\x0f\xd9\x67\x7a\xec\x4a\x57\x3c\x68\x35\x1b\xa7\xe7\x66\xa7\xd8\x81\xeb\x79\xc5\x42\x4b\x46\x70\x3e\x9e\x4d\x34\x72\x87\xa0\x4e\x5d\xc0\x4b\x77\x13\x51\xb7\xb8\x16\x53\x3c\xb8\x68\x66\x4c\x35\xc0\xb5\xff\xef\x7f\x96\x6b\xe2\x88\x96\x36\x6d\x91\x68\x51\x81\x0a\xe3\xf0\x4c\x00\x12\x4e\x79\x50\x3a\x66\xbb\x61\x8a\x18\x1e\xf9\x29\xf8\x10\x03\xbc\x59\x49\xc3\x8c\xe0\xb3\xb4\x5e\x48\xfc\x96\x16\x4f\xed\x8a\xf0\x14\x79\x2a\xc8\x65\x18\xd8\x34\x8a\x74\x08\xb4\x90\x89\x6f\xc4\x13\x73\xcb\x60\x0d\x5b\x01\x81\x40\x90\xb7\xbf\x4b\x80\x37\x74\xac\x93\x39\x60\x5b\xcd\xb3\x06\xd9\xd8\xaa\xa4\x5c\xc9\x12\x98\xbe\x62\x02\x81\xa7\x38\x9c\xa9\x0e\x5e\xa2\x8d\xa3\xbc\x36\x04\x20\x63\x6e\x0b\x1c\x0e\x72\x31\xf9\x75\x9d\xfc\x85\xcf\x74\xc5\x39\x89\x43\xcb\xe7\x89\x51\xe2\x00\x40\x7b\x10\x6c\x8d\x69\x41\x49\x9b\x2b\xac\xbc\x3c\x06\x6a\x03\x44\x7f\x48\x80\x6f\x3c\x95\xbb\x78\xaa\xd8\x5b\x43\xb1\x7a\xb6\x58\xdb\x50\x6c\xa3\xa2\xb9\x82\x62\x28\x2f\x60\xb6\x43\x16\x69\x2c\x0a\xdb\x7b\x64\x80\x70\x5e\xc0\x5c\x81\x28\x58\xda\xd5\x4a\xeb\x7c\x26\x59\x6f\x3d\xfc\x59\xc5\x67\x8f\x0f\xcd\x18\x2f\xca\xf6\xda\xff\x8f\xac\xcb\x8b\x9e\x39\x1e\x73\x54\x32\xf7\x4e\xfc\xf9\x23\x47\x3c\x32\x5d\x5e\xad\xbb\x8b\xba\xfa\x88\x8e\x2a\x9d\xcc\x06\x7f\xaf\xb6\xd1\xea\xd6\x4e\x54\x63\x98\x3c\x17\xbb\x8a\x6d\x11\x0f\xfe\x22\xb9\x8c\xf8\xb1\x9f\x79\x14\x2e\x5e\xf7\x6a\xd5\xaa\xaa\x1a\x95\x94\xd2\xe9\x37\xed\xe2\x75\xaf\x5e\xd7\x4a\xff\xaa\x94\xae\x2f\x2d\xfd\x42\x29\xbd\xb1\xb4\xf4\xda\xe2\x9e\x6c\xe8\xfd\xae\x2c\xee\x49\xaa\xf4\xfa\xe2\x9e\x88\xd2\xa0\xbe\x7b\x9e\xd1\x6d\x8b\xda\xa3\x20\x0b\xea\x67\x3a\xdc\x8a\x06\x75\xbd\x64\xf8\xec\x57\xc3\x67\x2f\x0c\x9f\xad\x19\x3e\xab\x18\x3e\x5b\xcf\x3b\x54\x31\x7e\xf4\x7f\x44\x21\xe1\xc8\x12\x86\xab\xeb\xa2\xd3\x2c\xd5\xa9\x85\xc7\x1c\xa4\x39\xb1\x26\x0b\x33\xd9\x48\xbd\x8f\xf5\x8c\x15\x7e\xbe\xb7\x47\x64\x2e\xc3\xd4\x19\xcd\x03\x43\x0b\xc5\x42\xc6\xb7\x1b\x92\xf6\x8c\xad\xc9\x6e\xd6\xd9\x5f\x56\x2b\x15\xc8\x1f\x7f\x10\xf9\xe7\x9a\x81\x4a\x6d\x39\x95\x5f\x75\x2a\x15\x03\x95\xfa\x72\x2a\x2f\x74\x2a\xeb\x06\x2a\x1b\x29\x2a\xcf\x88\x21\x88\x21\x37\x80\x35\x85\xab\x21\x6c\x05\xfa\x82\x02\x60\x5d\xe1\x71\x4d\x5e\x90\x02\xc7\xd4\x95\xb3\xf2\xd4\x4d\x70\xdf\xb2\x6f\xc5\x5b\xdb\x41\xab\xb9\x9f\x98\x5f\xaf\x7b\x9b\x75\xf4\x6a\x9e\x4e\x2a\x64\xe5\xa7\x1e\x58\x36\xdb\x4b\x2c\xdc\xd6\x1d\x25\x3c\x0a\xb5\x08\xb1\x05\x46\x8d\x36\xdf\xd5\xd0\x14\x20\xa0\xa7\x12\x85\x7c\x5b\x4a\x13\x1d\x73\x13\xf9\x0e\x7f\x39\x6e\xfd\x3f\x34\x6f\xaf\x99\x15\x3a\x0a\xf7\x0e\x55\xee\xd5\x6b\x4f\xe5\xde\xab\xc5\xdc\x53\x8d\x21\xb7\x74\x3e\xb1\x1c\x68\xfc\xe4\xb2\x91\xf1\x9b\x03\x72\x7b\xcb\x6d\xf7\xa6\x28\xe1\x13\x24\xbd\x97\x45\xe3\x38\x67\x37\x5e\x4f\x6f\x3b\xeb\xb3\x07\x6d\xff\xfe\x93\x6d\x73\x78\x13\xf5\xd4\x96\x0e\x6e\x5e\x30\xa3\x21\xba\xb8\xd9\x41\xe8\x63\x2a\xa1\x08\x6e\x6c\x8b\xcd\x41\xcf\x94\x8c\xf9\x3c\x09\x89\x1d\x0c\x7d\xf7\x01\x1d\x99\xd1\xe1\x56\xe2\x1e\x8f\x26\xa7\xac\x21\xd6\xce\xfe\x74\xd8\x0c\xc6\x13\x2b\x26\x21\xe5\x9e\xef\x6e\x84\xf6\xee\xb4\x9d\x09\x46\x7f\xb8\x78\x22\x0f\xa7\x9e\xc7\xd3\xde\x16\x3b\x6d\xf3\xad\xce\xce\x65\xa0\x82\x13\x9a\x7e\xc9\xe6\x5f\x28\x5c\x3b\xa3\xe3\x20\x9c\xc3\x1d\x6d\x7d\xea\xb3\xff\xac\x6c\x31\x83\x6e\x78\x86\xb3\x71\xbc\x78\x74\x8a\x7b\x5d\x9d\x14\x4f\xbb\xf5\x92\xee\x5d\x07\x8e\x4f\xe9\x07\x73\x2b\xca\x7a\xd8\x41\x63\xfe\x32\xf7\xba\xba\xee\x5e\xa7\xb4\xbe\xc1\x5a\xdf\x30\xb5\x9e\x7e\xf1\xce\x6d\x3d\x58\xd6\xfa\x46\x6e\xeb\xf5\x32\xe9\x80\x37\x2f\xeb\x44\x67\xd5\x5e\x74\x4c\xbd\xf8\x23\xbf\x17\x9d\x47\xf4\xa2\x6e\xec\x85\x69\x26\x8c\xbd\xf8\xb1\xac\x17\xf9\x33\x51\x53\x7a\x51\x33\xf6\xa2\xb6\x6a\x2f\xfe\x7b\x59\x2f\x52\xfe\x9f\x18\x7f\x4d\x5c\x3b\xf0\x11\x41\x9f\x6d\xcd\x33\xd7\x77\x82\x19\x89\xdd\xd8\xa3\xca\x23\x18\xec\x09\x08\x93\x07\xbd\x4a\x17\xd3\xa3\x1a\x3e\x15\x96\x98\xf6\x0c\x28\x08\x8c\x5e\x8f\x91\x33\x99\xfe\x4d\xfd\x5e\xd6\x85\xba\xbe\x16\x45\xb7\x34\x94\x8b\xf5\x90\x5a\x0e\xb1\x03\x2f\x08\xc9\xc4\xf2\x68\x1c\x1b\x49\x6d\x2e\x75\x63\x6c\x84\xc3\x88\xd8\xc1\x18\xc2\x13\x20\xd5\x11\x8f\x9b\x2a\x00\x88\x59\x6d\x37\x1c\xf6\x6b\xa4\x52\xa9\x90\x5d\xf8\xe0\x9c\x7d\x70\x5e\x50\x00\x90\xf1\x86\x1d\x4d\x3c\x57\xfa\xad\x47\x74\xec\xb2\xbe\xf9\x1c\x60\x87\x86\x56\x4c\x45\x6a\x00\x0e\x67\xe8\x86\x32\x3f\x9c\x19\xd3\xee\x53\xf5\x4b\x05\xa8\x16\x0b\xbb\xdc\x02\x07\x59\x4b\x2c\x37\x6c\x42\xe6\x65\x25\xcb\xb4\x0a\x1d\xba\x4e\xea\x12\x2d\x0f\x18\x74\x89\xfc\x11\x1a\x71\xbc\x30\x43\xa9\x52\x61\x37\x95\x5e\xb0\x11\x86\xd6\x9c\xa7\xd4\x7f\x46\x40\x8d\x2b\x8a\x1e\x9d\x63\x54\xcd\x1e\xa9\xee\xaa\x7f\xff\x96\x74\x77\x97\xbc\x78\x91\x7c\xa3\xdd\x20\x58\x9b\xa8\x78\xa4\x86\xf4\x49\x21\xf5\x2b\xa9\x0b\xd4\x34\x59\x09\xd2\x58\xc3\x63\x57\xa6\x2c\x79\x41\x34\x10\x38\xa5\x91\xdf\xf7\x34\xbe\x08\x48\xb5\x44\x81\x8d\x5d\x7f\x4a\xd3\x75\x79\x5b\x80\xaf\xaa\x3d\x0d\x16\xde\x14\xc8\x98\x5a\x7e\x04\x68\x68\x88\xcf\x8f\x99\xc0\x38\x2c\xa5\xe2\xa8\x8e\x02\xab\x24\xf5\x26\xfa\x40\x3c\xb7\x8f\x53\x10\x55\xc2\x61\xbf\x17\x7c\xa8\xd5\x8a\x6a\x5f\x3f\x25\xc3\x48\x20\xe4\xf4\x2e\x26\xf6\x09\x6d\xde\x10\xaf\x57\xe1\xc2\x0b\x52\xd8\x45\x25\x5c\xd6\x4c\xac\x65\x92\x07\x8a\x3a\x9e\xd7\xd1\xfb\x5a\xad\x17\x34\xbb\xdd\xa2\x46\x29\xbf\x63\x79\xe3\x21\x7b\x4a\x13\xbb\xa6\xa4\x4a\x38\x10\x75\xba\x96\x7a\x6d\x7c\xd9\x84\x41\xea\x14\x30\xf5\xc0\x6e\xa1\xc4\x98\x80\xf0\x4e\xda\x3e\xe5\xf6\x68\x38\xae\x93\x61\x18\xcc\x40\x9d\x70\x07\x5c\x95\x4b\x5b\xf8\x2f\x12\x0d\x77\xd1\x1e\x03\xfa\x19\x18\x8e\x9d\xe9\x78\x22\xcc\xaf\xb1\x1b\x52\x25\xe5\x0c\x40\x74\xca\x78\x2a\xbe\xfd\x41\xe3\xf3\xe2\x3f\x0b\xfd\xc0\x99\x17\x5e\x1b\xb6\x88\x1f\xc6\x2d\x16\xcc\x38\x98\x8f\x60\x10\x84\x74\x88\x98\x1b\xc0\x5e\xd3\x10\x6a\x4b\x76\xfd\x45\xfb\xa4\x08\xe0\xea\x03\x2a\x63\x1c\x5a\xb8\x9d\x41\xc2\x02\x7b\x04\x68\xfc\x3c\x4a\x13\xe2\xf1\x5c\x7f\x88\x04\x2f\xba\x4d\xed\xe5\xe4\x11\x3b\xa1\x02\xf5\x99\x49\x9c\x2a\xf7\x86\x46\x38\xd4\x76\xc1\x0f\xb5\x5a\x8e\xdc\xc2\xe6\x09\x4e\xea\xc5\x92\xa4\x2e\xea\xe4\xe0\x3d\x1d\x4a\xae\x36\x59\xc1\xa4\xf8\xae\x8a\xc1\x98\xc0\x76\xca\xc4\x00\x39\x8f\xf5\xc3\x28\x91\x4a\x5c\x3c\xa9\x19\xaa\x15\xbe\xe4\xc1\x7f\x7d\xc9\xe2\x40\x65\xc5\x80\x6d\x45\x4b\xc5\xa0\xf6\x7f\x62\xf0\x38\x31\xd8\x97\x5c\x35\x89\xc1\x3a\xbc\x5f\xd3\xd7\x1c\x74\x58\xe4\xaf\x65\x43\xae\xd5\x5f\x00\x56\xaf\xc3\x99\xc3\xbd\x92\x2a\x7f\x8d\xf0\xd4\x97\x0b\x0f\x61\xe2\x60\x48\xef\xc4\x63\xb0\xa2\x91\x35\x91\x6a\x65\x02\x7c\xef\x26\x28\x7a\x3c\xb0\x84\x47\x81\x80\x93\xde\x2f\x3c\xc7\x33\xab\xbb\x87\x71\xb7\xbf\x94\xb9\x0f\x00\x0f\xc3\xc5\x2b\x27\x22\x95\xbd\x96\x66\xea\x2a\x59\x23\xfb\xec\x62\x87\x7f\xd6\xc8\x1a\x69\xaf\xed\x53\x6b\x8c\x7f\xd7\xc1\xaf\xc0\xa1\xa1\xe7\xfa\x34\x75\x07\xb6\xe0\xe9\x1e\xb0\x12\x1d\xba\x36\xb0\xec\x38\x20\x91\x48\xe3\xc9\x67\x00\xaf\xc6\xb0\xcb\x93\x3a\xa8\x68\x27\xdc\x6a\x05\x1e\x5e\x10\x60\x03\xf9\xbe\xc0\x9c\x73\xd5\xed\x28\xb1\x54\x60\xcf\xc2\xce\x73\xe9\x16\x09\xd1\xb3\x21\x91\x98\x95\x44\xb2\x2e\xbd\xdc\xb6\x96\xec\xba\x8b\x57\x02\xf7\x10\x52\x59\x5c\xac\x94\xd6\xdd\xd4\xc2\x30\x22\xcb\x35\x41\x49\x61\x17\x65\x04\xc9\x66\x12\xb9\x55\x85\xc6\xd0\x14\x67\xd4\xe4\x49\x16\x98\x50\x3c\x76\x71\xd0\x5d\x3d\x91\x70\x8d\xbf\x4e\xa9\x5d\xac\xbd\xe6\x33\x99\x0b\x0a\xa1\x94\xe6\x59\x8c\x7a\x7a\x34\x00\x7c\x55\xd9\x6f\x35\xce\x16\xa4\xe6\xad\x1b\xda\xae\xbf\x4e\xa4\xe6\x67\x9b\xbf\x3a\x3f\x68\x75\x4e\xdb\xe7\xad\x85\x78\x15\x99\x2e\x54\x5f\xa3\x5c\xff\xf4\xe8\x4f\x2f\x9a\x27\x46\xf8\x3f\xbc\x18\xa1\x9f\x1f\xb1\x3d\x77\x82\xf6\x28\xe9\x59\x6b\x39\x6c\x95\x68\x36\x12\xea\x10\x67\x4a\x31\xed\x9a\x3d\x85\x64\xad\x36\x77\x08\xe7\x5a\x0f\x21\x0d\x12\xd2\x71\x10\x53\x62\x4d\x26\x10\xb6\x3b\xb2\x30\x60\x99\xa7\xc5\xee\x07\xf1\x88\xcc\x42\x97\xa3\x19\x40\x27\xf8\x2a\x90\x9d\x20\x36\x88\x1d\x8d\x22\xa6\xfc\x58\x9e\x37\x07\x4a\xd6\x2d\x45\x44\xfc\x79\x30\x0d\x49\x44\xa3\x28\x05\x00\x91\x10\x70\xac\xd8\x7a\x4a\xca\xca\x67\x90\x75\x29\x27\x19\x21\xae\xc5\xfa\x4f\xdc\x14\x65\x07\x77\xfb\xdb\x9b\x6b\xac\x93\xf2\x7e\x48\xf4\x11\x20\xa5\x89\xba\x7f\x0a\xcf\xd3\x08\x5d\x8f\xd0\xbd\x95\x83\x67\x7c\x48\x6a\x02\xd8\x85\xe5\x38\x21\x8d\xc0\x11\xd5\xf5\x6d\x9e\xe5\x3c\xc1\x65\x75\xfd\x98\x0e\xb9\xa7\x27\x60\x21\x7c\x00\xdc\x7a\x7c\xfc\xc5\xbc\xbf\x9e\xa7\x3d\xfa\xae\xb4\xc5\xfc\xe3\x93\x3d\x89\xaa\xb5\xfa\xc6\xe6\xd6\xf6\xcb\x2f\xbf\x82\x37\xe2\xfa\x0a\xe7\x2f\xcc\xd6\x1e\xbf\xee\x57\xac\x38\xe8\xcb\x7d\x42\x54\x66\x45\x4c\x47\xab\x1d\x4c\xe6\xdc\xc5\x2c\x68\x0a\x16\x68\xd9\x41\xa1\xa6\xae\xfb\x5e\x75\xee\xef\x62\x32\xa1\x21\xe0\x9a\x4e\x3d\x15\x2e\x22\x49\x5d\x23\xdc\xae\x71\x85\x00\xf7\xfb\x73\x12\xde\xdf\xc5\x6b\x53\xdf\x95\xb9\x7d\xdc\x38\xca\x90\x22\x17\x7d\x40\x42\xf2\xe6\x8c\xad\x32\xb5\x1b\x1c\xea\x50\x36\x08\x89\x3d\x8d\xe2\x60\x2c\x6a\x09\x5c\x03\xcf\x85\xd4\xf2\x03\x3a\x03\x47\x66\x08\xf4\x62\xa7\x5e\x24\x00\x55\xc8\xc0\xf5\x1d\x9e\x2a\x48\xf6\x9a\xda\x23\xdf\xb5\xd9\x42\x61\x3d\x0f\x29\xae\x5c\x82\x79\x84\x12\xe4\x5f\x74\x27\xe7\x2d\x92\xa0\x4f\xe7\xe0\x46\xf6\x1b\x7e\x02\x16\xa2\xdf\x77\xc5\x5f\x6c\x06\xca\x64\x1a\x4d\x81\xec\xae\x4c\x5d\xe3\xfc\x6e\x58\x15\x2f\x5f\xbe\x5c\xe5\x88\x9a\x0b\x0d\x6b\xca\xd8\x78\x16\x38\x4b\x74\xb7\x32\xa9\x95\x3e\x55\xbf\x68\x99\xe8\x45\x55\xfd\x08\xc1\xfb\x8f\x9a\x66\xfc\x10\x06\xaf\x7c\x80\x45\x76\xc1\x9a\xb4\xcb\x2f\x50\xfc\x5b\xd6\x25\xf8\xbc\x2c\x6e\x56\x62\xb3\x5e\xea\x77\xfb\xe9\x1f\xbb\x5f\x5e\xec\x16\xd9\x7f\x7e\x2d\x15\x77\x8b\x9f\x3e\x47\x9f\xbb\x5f\x7e\x2d\x95\xde\x48\x3f\x5c\x83\x27\x2e\xc1\xe6\xb8\xfb\x6d\xed\x4b\xf2\xc4\x2f\x30\x30\xf0\x9b\x8d\x2f\x69\xe0\xac\xd4\x75\x0f\xc8\x14\x5e\x8b\xde\x8b\xeb\x1f\xa7\xf2\x63\x15\x90\x24\xb3\x6f\x02\xb0\x99\xcb\xca\x92\xa3\x3e\x0f\x04\x89\x03\xee\x16\xfb\x9e\xe5\xdf\x96\xd4\x38\xc9\x62\xbb\xf9\x36\x13\x88\xd1\x6d\x7f\x2a\xfc\xfd\x31\x46\x45\x17\xe8\x77\x27\x96\xad\x59\x14\x5d\x2b\x1c\x62\x02\xb4\x92\xe9\x0d\xe5\x6a\x42\x8a\xcd\xab\x2b\x63\xf3\x8d\xc7\x34\x8f\xc7\xec\xd5\xe4\x11\x6d\x1f\x30\xce\x16\x9b\x57\x07\xc6\xd6\xf7\x1f\xdf\x3a\x04\x3c\xae\xde\xbe\x78\xbc\x2b\x36\xaf\x0e\x8d\x5d\x68\x3e\xbe\x0b\x60\xdb\x7e\x44\x1f\xd8\x4d\x48\x74\x62\xdf\xd8\x89\x83\xc7\x77\x02\x90\x49\x56\xef\x83\x12\xd9\xda\x3c\x3f\x2d\xa5\x77\x7f\xcf\xbd\xa5\xea\x94\x95\x21\x3f\xca\x44\xbb\xe7\x8c\x83\x3b\x2a\x71\xa5\x00\x55\xc8\x4f\x72\xdb\x32\x62\x00\xeb\x01\x19\x3b\xbd\xb4\x73\x07\x8c\xb2\xf5\x27\xcf\xf6\x23\xc1\x2a\xf8\xf0\x2e\x99\x0a\x04\x3a\x11\x67\xc7\xe5\x62\x76\x5c\x4d\xfe\x12\x66\x1c\xfe\xa9\x0b\xef\x69\xac\x48\xde\x60\x1a\xfd\x28\xf0\x20\xaa\xbf\xf9\x36\x1b\x30\xc6\xfa\x7b\xf4\xc8\xc7\x0f\xad\x79\x63\xb7\xc9\x5a\x3a\xc3\xa0\x98\x21\x1e\xf1\xcd\xd6\xcb\xa5\xb1\x33\x6f\x9f\xd4\x19\x41\x37\xbf\x3b\xa6\xb4\x25\xe9\x9f\x74\xe5\xda\xc2\xb1\x88\xfd\x47\x09\xc4\x2e\x36\x39\x62\x50\x7a\x54\xed\xe5\x0a\x85\xad\xbe\x6e\xa4\x47\xc0\xc4\x40\x14\xc0\xac\xb3\xb6\x67\x8d\x27\x45\xf8\xac\x4c\x6a\xe5\x2c\xb6\x2a\xa5\x7e\xd7\x7d\xa0\x95\x99\xeb\xf0\xcc\x29\xf2\xe9\xc2\xc5\x17\x0b\x97\xfc\x86\x44\x77\x89\xfb\xe2\x85\x86\x32\x11\xe7\xa3\x09\xa5\xce\xc5\x56\xc8\x54\x16\xd7\x87\x04\x1f\x9e\x35\x27\xc5\xd6\x41\x19\x91\xd4\xcd\x07\xc3\xb1\xfe\x0e\x0d\x9f\xbd\x39\x5e\xc5\x49\x8b\xab\xed\x46\x15\x46\x4b\x85\x44\xfe\xf8\x03\x0b\x2a\xa9\x49\xf5\x61\x51\xd6\xeb\x7d\xea\x05\xb3\x62\x1a\xab\x9e\x57\xac\x2d\xa8\xd8\xe8\x07\x02\xd1\x32\x5b\xb1\x6e\xae\xa8\xe0\x56\x66\xeb\x6c\xe8\xb9\x48\xb9\xff\x82\x13\xd8\x11\x89\xac\x39\xe2\xf4\xe1\x63\xcb\x2f\xc8\x6f\x70\x6d\x41\x78\x82\x5f\x44\x4e\x9a\x82\xe7\xa1\xb9\x1d\x9a\x12\xe4\x00\x6c\x84\x4f\x4d\xc4\xae\x4f\xe4\xd6\xf5\x3c\x19\xc5\xc5\xd1\xb4\xed\x5b\x88\x6f\x8e\x48\x38\x15\xc8\x95\xf9\xdd\x37\x4e\x3f\x02\x3f\xb5\x4e\xf9\xdc\x67\x91\x28\xd8\x3c\x9f\x98\xe6\xfe\xe4\x5f\x31\xf7\xbd\x00\x8f\xfa\x27\xcc\x7e\x2f\x80\x03\xfa\x71\xd3\x0f\x35\xd9\xa9\x64\xe0\x21\x57\x2d\xd9\xb7\x4c\x9b\x34\xb3\xee\xf4\xf1\xca\x24\x10\x5c\x45\x91\xe0\x00\x22\xbc\x03\x07\xe6\x0e\x9c\x3d\xa6\x03\x0e\x50\x7c\x6c\x07\x9a\x8a\x52\x7d\xc0\x95\xea\x67\x09\x3e\x19\x06\x7f\x82\xad\x3a\x92\x40\x69\xf0\x6a\x07\x29\x55\x3c\x3a\x88\xcb\x09\x78\xa4\xa5\x1d\xea\x02\x6a\xc4\x34\xb2\x25\xf1\xf9\xa6\x91\xb1\x9e\xae\x34\x32\x0e\x8b\xcd\xf4\xf4\xae\x59\x4d\xef\x3e\xa6\xf5\x3b\x8e\x7f\xbf\x9a\xa2\xce\x1b\x47\x45\xbd\x8b\xdb\x31\x69\x78\x51\x40\x0a\x6d\xdf\x8d\x5d\x2b\xa6\x64\xe4\x0e\x47\x1e\x62\xd5\x01\xdc\x79\x1c\x5a\x90\x47\xa6\x50\x21\x06\xc7\x22\xdc\x8a\x26\x56\x98\x09\xca\x63\x43\xe9\x2d\x1e\x4a\x2a\xf2\x54\xb5\xf6\xff\xc6\x96\x9c\x61\xd9\x88\xf1\xae\x7a\x35\xe8\x24\x29\x40\x38\x36\xe7\x80\x5a\xf1\x34\xa4\x12\x99\x15\xaf\xaa\x90\x0d\x24\x9d\x3a\x51\x3c\x50\x2b\x5e\xe3\x9f\xc8\xef\xe4\x32\x22\x3d\x19\x97\x17\x8e\x2d\xcf\x9b\x97\xc9\x2f\xe0\xa2\xf5\x8b\x80\xad\xe4\xf9\x81\xb1\xad\x0a\x69\x83\x95\x90\x87\xf7\x81\xa5\x90\x97\x93\x09\x26\xfb\xae\xe7\xc6\xf3\x24\xf1\xa4\xec\x26\x80\xeb\x8e\x27\x98\xb9\xd5\x22\x8e\x3b\x00\xfb\x5d\x2c\x7b\x29\x30\x3d\x60\x20\x8c\xd6\x98\x47\xea\xc5\x81\x1e\x44\x78\x19\xf1\xb4\x34\xaf\x93\xe7\x85\x83\x00\x53\x19\xd1\x98\x1b\xa8\xd6\xc1\x9d\xc6\xb3\xfa\xd4\x8b\xc8\x14\xa2\x7b\x47\xf4\xde\x72\xa8\xed\x8e\xd1\x8f\x9b\xbf\x44\xf0\x9a\xdf\xa7\x34\x9c\x3f\xa6\x6e\x7d\xc5\x56\x45\xa8\x0b\xab\xb3\xb1\x72\x7b\xb2\xd6\x6a\x91\xa3\x4c\x48\x7f\xef\x2d\x41\xac\x80\x13\x4d\xdd\x8a\x5a\x39\xf7\xfb\x0f\x8f\x59\xb9\xda\xa9\xf3\x84\x0b\xa6\xa6\x65\xee\x9b\xb5\xcc\x9b\xff\x57\xb5\xcc\x3e\x1f\x65\xbe\x9a\x99\xdc\x67\xe4\x15\x22\xb9\xd8\xbc\x55\xf0\x44\xba\xe0\x19\x16\x3d\xe5\x1e\xf4\x5f\x29\x00\x33\x7e\x37\x5a\xd8\x89\x0e\x80\x0e\xdc\x41\x27\x3a\x46\xaa\xd6\xcf\xdc\xae\x96\xe0\x2e\xe5\xe5\xee\x5b\x70\xa7\x31\x6e\x9a\x13\x11\xda\x37\x91\x37\xe8\x61\x68\x4d\x46\xae\xad\x25\x1f\x7e\x1c\x60\x10\x1b\x7c\x7f\x89\x17\x39\xf5\x1d\x01\x0f\x94\x38\x64\x91\xe2\x65\xe8\x8e\xad\x70\x4e\x0e\x92\x79\xd5\xa1\x7b\xc4\x6d\x7e\x64\x85\x0e\xbe\x87\xc0\x5b\x02\xcf\x54\x4b\x0a\xe8\x02\x00\xaf\x01\x0d\xcc\x7a\xe8\x10\xc8\xfd\x83\xb8\x12\x6c\x26\x0a\xa8\x37\xbb\x31\xa0\x6a\xf4\x29\x1e\x17\x76\x10\x86\x90\xa6\x97\x93\xb3\x08\x44\xe4\x24\x69\xa2\x02\x78\x81\xf8\x15\x8d\xd7\x9e\x47\x78\x4a\x7b\x52\xc8\xe5\x4b\x01\xce\x4b\x03\x36\x74\xc6\x35\xd8\x74\x60\x3e\x37\xbc\x7e\xff\xf1\x87\xf1\x4d\x3c\x57\xe3\x5d\x88\xeb\x92\x79\x4c\x33\x4f\x49\x97\xda\x81\xef\xfc\xfc\xa4\x14\x0c\x5c\x67\xa4\x56\x62\xbc\xc6\x75\x98\x2f\x9d\xed\xe0\xc6\xb4\x12\xe7\x7f\x5f\xc2\xfa\xe5\x0c\xfc\xbd\xba\x5b\xdf\xda\xde\xad\xa6\xc1\x71\xc0\xf4\x64\xd8\xa4\xae\x2f\xcd\xbb\x8e\xf3\xc8\xfd\x41\x50\xc4\x9d\xa0\x13\xcc\x56\x35\xc1\x28\xd8\x71\x4c\x8f\x96\x70\xba\x89\x4d\xe6\xed\xf5\x65\xde\x3e\xba\xdc\x70\x33\x30\xec\x9e\x6f\xd5\xdd\xb3\x67\xf5\x49\x13\x50\x11\x8a\xbd\xfd\x2c\xfc\x23\x2b\x3f\xfc\xab\xd6\xc3\xfa\x3a\x6f\x5a\x00\x2f\xb3\xeb\x01\x5e\x0d\x72\x6f\xbb\xfc\x30\x6a\xf0\x3d\xb7\x08\x81\x0c\xe9\x5b\x9f\xb9\xdd\x8d\x4c\xbb\xf0\x04\x29\x40\x9f\x73\x9b\x6c\x78\x1e\x6f\x35\x32\x9c\x81\x5d\x2a\x12\xfe\x75\xb3\xf0\xca\x8c\x7d\xa3\x25\xd0\x99\x86\x93\xd9\xac\x8f\x67\x8f\x6a\x25\x59\x61\x66\xcc\xee\x97\x32\x44\x98\x64\x7b\x9c\x4e\x39\x81\x48\x85\x98\x66\xcf\x38\x82\x37\x7f\xed\x10\x78\xde\xbe\x47\x8c\xe0\x8c\x3a\xae\x45\x9a\xc1\x64\x4e\x8a\x67\x28\xb4\xa9\xcf\xca\x08\x33\x30\xa1\xb6\x3b\x70\x6d\x15\xfa\x2a\xa2\x09\x7e\x93\xc0\xd7\xc4\x43\xd6\xf5\xd9\x81\x6a\xba\x60\x99\x98\xe2\x9a\xac\x26\xee\x12\x24\x78\xb8\x55\xa0\xb4\x74\xcc\xd2\xe2\xfd\xeb\xa4\x45\x59\x4a\x0b\xc5\x85\x47\xd6\x60\x42\x46\xb3\xc0\xfc\xb5\xa3\x58\x24\x30\x39\x83\x50\x34\x4e\xf5\xf8\x3c\x4a\x50\xbe\xdb\x06\xcf\x78\x78\x2a\x0f\x06\x09\xa2\x57\x19\xb0\x06\xe7\xc2\x50\x67\x09\x5a\x3c\xaa\x21\x22\x7d\x2b\x42\x54\x64\xee\x7d\x2f\x6a\xf2\x6b\x6c\xc5\xc4\xad\xf1\x8a\xd8\xba\x43\x1a\xd7\xb7\xb6\x8b\xae\x0a\x56\x95\x77\x73\x27\x2e\x79\x41\xea\xa6\x3d\xd8\x05\x6f\x74\xf2\x7c\x8f\x6c\xe9\xc8\xba\x3c\x89\x92\xe2\x3d\x91\x51\x53\x81\x68\x99\x54\x93\x04\xf5\x6a\xe7\x7a\xe1\x94\xa2\xeb\xe1\xea\x5d\xdc\x5a\xdc\xc5\xba\xb1\x8b\xe2\x3d\x3d\x34\x5c\x99\xb4\x2e\x62\xb1\x61\x4e\xb1\x0d\xbd\x58\x3f\xa7\xd8\x26\x16\x53\xf9\x52\x08\x87\xfd\x22\xf8\x72\x43\x4e\xe6\x32\xfb\x75\x98\xfc\xda\x67\xbf\x96\x0a\x92\x49\x60\x26\x8d\xe3\x30\x5a\x25\xec\x21\xb1\x9b\x9a\x19\x27\x58\x0b\x04\xd5\x60\xb5\x8c\x43\xdc\x13\x57\x99\xd1\xa8\x8b\xdc\x50\x38\x21\x8c\xab\xbf\x91\x8d\xaa\x1e\xa4\xac\xd8\x79\xe1\xa8\xe5\x51\x8d\x45\x6e\x2a\x29\x25\x00\x0f\x86\x21\xe4\x99\x7d\x31\xa1\x53\xe0\x39\xe9\xda\xfd\xc0\x4b\x62\x29\xf3\x28\xd4\x05\x85\x43\xcb\xf5\xe3\x34\x89\x01\xfb\x70\x29\x8d\x0d\x99\xe4\x37\xb6\x3c\xd7\x4e\x13\x71\xe1\xd3\xa5\x54\x64\xaa\xe0\x8c\xf7\x9f\x20\x34\x15\x5f\x2c\xa5\xb5\x25\xf9\xe2\xb9\xfe\x6d\x86\x31\xec\xc3\xa5\x34\x5e\x26\xa9\x8b\x01\xa6\x37\x33\x2c\xfc\x78\x29\x9d\x1d\x85\x0e\xa6\x00\x35\x50\xc2\x2f\x96\xd2\x7a\x25\x68\x35\xc3\x00\x52\x48\x05\xd3\xcc\x9c\x45\x71\xe8\xde\x52\xb1\x57\x2f\x9d\xff\x7a\x22\x8c\x31\x01\x91\xf9\x1b\x9c\xf0\x03\x93\x3c\x70\x91\xe2\x21\xb2\x66\x59\xd1\xbe\x34\x34\xb8\xa1\x36\xe8\x2e\x96\x98\x65\xb4\x36\x55\x5a\x52\x3c\x32\x2b\x41\x15\x9c\x65\x24\xb7\x34\x7e\x2c\x12\x9f\x65\x94\xa4\x00\x75\x63\x6a\x39\xf3\x7c\xf9\x59\x46\x48\x4a\xd0\xf5\x72\xf9\x59\x46\xeb\x95\x3a\x3c\x7b\x75\x29\xd2\xe9\x3e\x4b\xe3\x0d\xe0\x7e\xb7\x55\xd5\x42\xae\x38\x4c\xdb\x20\x08\xe9\x7a\x3a\xb0\x01\xf3\x98\xf1\xd4\x9b\x23\xcb\x1b\x30\x65\xa2\xb6\xad\xc7\x0a\x26\xa4\x44\x05\xa6\x38\xd4\xb7\x52\xc5\x20\xe5\x0b\xcf\x9a\xe7\xde\x51\x12\x81\x6e\x3b\xe7\x85\x5c\x9f\x0c\xa6\xe0\xc5\x2a\x88\x7d\x9f\x5a\x9e\x3b\x70\xa9\x43\xd8\x61\x15\x96\xc9\xb0\x4c\xfa\x25\x70\xd8\xab\xa4\x76\xeb\xdf\xc8\xc6\x8e\xea\x38\xc6\x45\x5d\x86\x95\x74\x31\x24\x1b\xdc\xfb\xc9\x1a\xd9\xa8\xca\xe0\x2c\xc3\x36\xa9\x51\x62\x5b\xae\x1b\x46\x31\xb1\x47\xd4\xbe\x45\x2b\x79\x38\xa5\xbc\xd3\x80\x71\xc1\xb1\xe6\xf9\x0f\xb8\xc9\x09\x3d\x82\xec\xa5\xd5\x8a\x64\x39\x02\xfe\x83\x2c\xf8\x1c\x53\x40\xea\x28\x47\xf9\xc3\x80\x2f\xba\x9d\xe6\xd7\xce\xd1\xfe\xee\x82\x1a\x7c\x63\x81\x36\x34\x58\x21\x97\xbc\xd8\x23\x5b\x0a\x96\x4f\x3a\xe1\x21\xee\x5f\x72\xd0\x72\x36\x95\x02\x60\xf8\xc5\x21\xa2\x5a\xa7\xf6\x04\xe2\x3d\x18\x3f\x61\x58\x9a\x3d\x31\x0b\x72\x04\xbd\xa9\xeb\x1f\x41\xfd\xdf\xc5\x58\x17\xc4\x18\xe2\x4f\x2a\xd2\x70\x09\x03\x6d\x15\xc5\x28\x5f\x14\x5e\xad\x26\x54\x72\x36\x0e\x5a\x87\x8d\xab\xd3\x5e\x9e\x74\xfd\x46\x36\x0d\x62\x9a\xac\xb9\x94\x98\x6e\x2e\x12\xd3\xcd\x7f\x37\x31\x35\x0d\x63\xb1\x98\x2a\x9b\xcd\xff\x89\xa9\x91\x81\x76\x16\x6c\x2b\xc3\x81\x15\xb8\x2f\xc5\x52\x90\x32\x9d\x0b\xbf\xef\x91\x57\x55\xf2\xb7\xbf\x81\xf0\xfd\xb6\x47\x5e\xbd\x4c\x66\x79\xc9\x7e\xfa\xaa\x4a\x5e\x90\x9d\xdd\x3c\xb2\xb5\xaa\x4a\xb7\x56\xcd\x10\xce\x5d\x01\xac\x26\x50\x16\x1c\x80\xae\xf3\xa3\x8f\xc6\x07\xa8\x90\x47\xd9\xf7\x8c\x74\x44\x61\xc9\xec\xa7\x95\xa9\x97\x0e\x41\x4b\xbf\x7c\xd3\x18\x1f\x43\xd7\x22\x6e\x98\x21\x02\xa4\x04\xdf\x4b\x1f\xf9\x66\xb8\x04\x28\x83\xdb\xcb\xd9\x05\x66\x1a\x89\x0c\xe2\xc5\x83\x6e\x27\xc7\x38\xb4\x45\xd6\xf4\xc2\x15\xd2\xa1\xd1\xd4\x8b\x49\xf1\xe2\xa4\x44\xdc\x08\x72\x58\x56\x09\x38\xcc\x6f\x93\x35\x41\x32\x6b\x8c\xbd\xec\x94\xc8\xa7\x30\x98\xed\xda\xf0\x24\xf4\x45\x12\xe2\x34\x42\xb2\x4b\x6c\xd2\x31\x8c\xc9\x7f\xf4\x63\x3d\x37\x6e\x6e\xad\xfc\xc8\x50\xf5\x0b\xab\xd9\x4b\xb7\xd5\x1b\x61\x18\xcc\x4c\xb7\xd7\xc4\xde\x5d\x62\x97\x76\x2d\x26\x3e\xbf\x7c\xf2\x52\x26\xaa\x2c\xb7\xec\xc3\x75\x3b\x98\xa9\xb1\xe2\xec\xf7\x8e\xe1\xb5\xe4\x80\x3f\xeb\xf3\x24\xe0\xa1\x0a\xd4\xde\xa7\x84\xfa\x90\xd3\x92\xdc\xb9\x16\x91\x82\xf4\x48\xd1\xf3\xff\x5c\xd1\xdb\x26\x8f\x11\x27\x78\x01\xe8\xb6\xc9\x1b\x45\x90\x48\x6d\x2b\x21\x71\x89\xb6\x4c\xc8\x9f\x3e\x8d\x92\xe2\x35\x26\xbd\xa4\x18\x32\x4d\xbd\x44\x82\xf0\x99\xc0\x0c\x16\x5f\xd7\xd8\xd7\x6c\xf4\x58\x04\x0c\xab\x75\x85\xf0\xd5\xc1\x49\x86\x68\x1d\x89\x22\xfa\x0d\x75\x18\x5d\xf9\x0d\xd0\xe3\x9f\x23\x31\x65\xdd\x9c\x88\xb5\x9f\xa5\xf8\x92\xec\x92\x1a\xd9\x25\x55\xf8\xe7\x93\xe2\x79\x10\xc6\x23\xd2\x18\xd3\xd0\xb5\x2d\x5f\x41\x3b\x86\x64\x06\x56\x14\x43\x3a\x24\x19\xcc\x14\xa1\x9d\x8e\xc4\x01\xb9\xee\x6d\xb2\x0d\x94\x4c\x27\x98\x2c\xd6\xa1\x7e\x10\xd3\x64\xe3\x81\x91\x4a\x72\xac\xc4\xe9\x49\xb5\x06\x2f\x5c\xd4\x66\x9a\x36\x66\x65\x21\x5b\x1b\x49\xcf\x4f\x03\x1b\xb2\x06\xa4\x3b\xbe\x45\x36\x88\x2f\xbf\xb5\xee\x2c\xd7\x63\xa2\x56\x66\x8b\x0c\xfd\x47\xa8\xb3\xe6\xfa\x65\xd9\x9c\x64\xd5\x16\x0c\xf3\x3c\x10\x95\xcb\x98\x9d\xd2\x28\x7c\x6f\x9e\xbc\x49\xfc\x3f\xb5\xa2\x97\x6d\x4f\xb5\xd5\xb7\xbc\x4f\x6f\x6a\xb5\x55\x77\xbd\xfa\x63\xc8\xd6\x57\x27\xbb\xfd\x98\xde\xd6\x77\x6b\xbb\xd5\xdd\x95\x77\xea\xad\x8d\x47\x10\xdf\x92\x64\xb5\xb4\x89\xfc\x99\x58\x04\xa1\xa1\xb3\x6b\x1c\x10\x87\xda\xae\x03\x68\xe9\x00\x34\x19\x07\x64\xc4\xfe\x86\x27\x93\x00\xb7\x99\x24\xa5\x3d\x77\xa4\x9a\x46\xac\xe4\x7c\x92\x9c\xe8\xd7\x10\xab\x8c\x9e\x4f\xd2\x59\x4a\x2e\x57\xc5\x17\xea\x9c\xde\xd1\x30\xd3\x84\xe2\xf2\xf4\x96\x7d\xe5\xa2\xdb\x98\xee\x1c\x07\x3a\x84\x88\x28\xe5\x9b\xbc\xe2\xef\xd4\x00\xbc\x73\x23\xe9\x67\x98\x13\xd1\x0f\xf4\x70\xc8\xa1\x7b\x47\xfd\x32\x67\x85\x4c\x62\xc8\xed\x98\x65\x7e\xa8\xb8\x11\x42\x9f\x3f\xda\x0b\xe3\xf7\xc9\x12\x37\x8c\x60\x10\x4b\xec\x4e\xee\x90\x06\xaf\x74\x3d\xb3\x4b\xcb\xf3\xc9\xe3\x21\xcd\xa2\x60\x10\x77\x0c\xb0\x66\x1d\xc4\x61\x46\x2c\x76\x7c\xaf\x82\x0c\x4c\x67\xab\x25\xb1\x4c\x77\xed\x3f\x73\x86\x9a\xda\xd7\xf2\x8a\xa9\xfa\x63\x16\x18\x1e\x81\x0e\x4f\x9f\xd6\xb3\x5f\x96\x34\x79\x1a\x58\x0e\x39\x6d\x1d\x44\xd0\xcc\xe9\x2a\xad\x10\x82\x21\xed\x7d\xaa\x85\x35\x5b\x11\xb9\x73\xc3\x78\x6a\x79\x48\x2f\xb8\xa3\xa1\x67\xcd\x01\x7c\xe2\x57\x0d\xa7\x95\x49\xb7\xe5\xcf\x21\x49\xb3\x15\x66\x53\xdd\xb1\x7e\x7f\x5f\x81\x53\x1c\x2d\x21\x9e\x7b\x94\x33\xe9\x8a\x29\x20\xd7\xbd\x2d\x0e\x66\x9b\x26\x4a\xbe\xaf\x04\x02\xb0\xd8\xdd\x5b\x98\xff\x15\x97\xef\x1c\xbf\xed\xa7\x84\x98\xe7\xd2\x00\x1b\x78\x31\x79\x2e\x5e\xd5\x05\xfc\x2f\xe8\x84\xd1\x25\x21\x1d\x53\xf0\x67\x05\xfb\x3f\x95\x1d\x9b\xff\xa3\x1d\x59\xc4\x92\x9c\xf3\xf6\x49\xf0\x0b\x4f\xe5\x46\xce\xe1\xfc\xe7\xf7\x21\xc3\x08\x13\x24\x86\x08\x90\x55\x57\x30\x06\xc8\x5a\xe1\xd0\xe4\x81\x02\x16\x68\x25\xa1\x7b\x18\xc4\x1c\x73\x3b\x79\xa1\xc6\x1d\xe0\x31\x29\xde\x60\x7f\x5c\x61\xa3\x41\x67\x70\x76\x00\x77\xe8\x10\x6e\x2c\x70\x4a\xed\x9b\x1d\x1c\xc2\xa7\x02\x8d\x88\xc0\x6e\x8c\x8e\xe9\x05\x13\x01\xb6\x56\xfd\x42\xde\xa4\xb0\xda\xaa\x5f\xca\xa4\x56\x2d\x91\xb5\x1a\x79\x2d\x1f\x8d\x93\xca\xfb\x68\x91\xe7\xf5\x6b\xd9\xfa\x35\x51\x9f\xa8\x04\x32\x33\x7b\xdd\xc3\xb1\xe3\xb8\x8b\xb2\x67\x65\xad\x9d\x45\xe1\x82\x32\x44\xae\x8a\x6f\xab\x06\xb0\xdd\x8c\xff\x05\x80\x92\x3d\xd2\x56\xf2\x26\x5c\x92\x25\x1a\x41\x9a\x14\xe7\x08\xd7\x27\x1d\x6a\xc7\x96\x3f\x9c\x7a\x56\xc8\x73\x04\x1e\xb4\x9a\xcd\x46\xa7\x51\x7a\x54\xdb\xff\xb9\xa4\x6d\x40\x2d\xe6\xb2\x5e\x64\x1a\x47\xa5\xfb\xb1\x5b\x32\x10\x8a\x9e\x8a\x5b\x0c\x2d\xfc\x39\x7c\x8c\x16\x8f\x05\x21\x28\xc9\xd8\xf2\xdd\x89\xf4\x0c\x87\x47\x1d\x27\x66\x75\xca\x22\x44\x95\xfd\x97\xde\xc7\xd4\x8f\xdc\xc0\x8f\x1e\xb9\x2a\xe3\x65\x6e\x46\xf8\xe8\xb6\xc2\x6c\x76\xd8\x6c\x3e\xae\xf1\xff\x5c\xd2\x7a\x77\xf5\x58\x8f\x47\x1a\x5d\x56\x68\x98\x6d\xa0\xae\x3f\x5c\xeb\x33\x16\xdf\xb1\x4b\x29\xdf\xf9\xde\xef\x5f\xab\xaa\xcf\xea\xad\x92\xa5\xcc\xc6\x65\x9a\x11\x60\x13\xb1\xe9\x4f\xc0\x62\xb3\xe1\x8d\xad\x70\xe8\xfa\xd9\xd1\x9d\x3d\x79\x74\xd3\x25\xfb\x42\x30\x99\xe7\xec\x03\x9d\x46\x99\x1b\x57\x10\x8d\xfb\xb1\x62\x74\xb7\x2c\x47\x29\xd8\xf0\x0e\x5d\x8f\x1d\x69\xbc\x0b\x5c\x93\x6d\x1d\x76\x1e\xd9\xda\xe7\xc2\x6c\xd9\x34\xe2\x8d\x47\x26\xfa\xbc\x4c\x6c\x49\xb0\x50\x5a\xef\x7a\x97\x8d\xce\x13\x2f\x40\xf7\xcb\x24\x17\x4e\x70\xb9\x5e\xc5\x76\xdc\x62\x1b\x04\xbf\xf5\x35\x9a\xad\x47\x8e\xf9\xd7\x25\xad\x1e\xba\x00\x93\x6d\x98\xdb\xc3\x4e\xa3\x54\xd6\x81\xea\x1f\x37\xb7\x4b\x5a\xbe\x8b\xbf\xc6\xae\x47\x01\x94\xa7\x68\x25\x46\x87\xf3\xc6\xc5\xc8\xb2\x6f\xa1\xcd\x2b\xff\x9c\xc6\x6f\x2d\xfb\x96\x9d\x04\xa4\x18\x51\x4a\x46\x71\x3c\x89\x5e\xaf\xaf\xfb\x34\x66\xc5\x66\xee\xad\x5b\xb1\x83\xf1\x3a\xfb\x65\xfd\x5a\xa1\x39\x10\x7b\x8f\xeb\x0f\x02\x09\x87\xac\x5f\xc6\x06\x56\x88\x7b\x31\x5c\xb2\x48\x11\x42\x14\x89\x45\x86\xde\x7c\x32\x82\x1e\xa0\xc3\x3b\xfc\x6d\x5c\xcc\x0f\x4f\x0f\xac\x13\x71\x75\x89\xc7\xd6\xe2\xbb\x55\xc6\xb3\x0a\x6a\x83\xd7\x85\xda\xeb\x22\xcf\x07\x89\x82\x8b\xc9\x92\xf1\x1b\x44\x89\x2b\x55\x96\x7b\xe5\xd5\xd3\xf9\xf6\x8d\x2f\x3d\x19\xb0\x5e\xc6\xfb\x03\x04\x59\x4a\x0f\x00\xb1\x67\x16\x84\xf3\xae\xaf\x43\x46\x62\x3e\x0a\x93\x1f\xf6\x92\x16\x85\x82\xa6\x07\x41\xe3\x06\x22\xac\xb1\x68\xba\xc5\x1c\xd7\xad\x66\xeb\xb4\xf3\xb4\x95\xfc\x99\x4f\xfb\x92\x48\x35\xe3\xb2\x6a\x89\x65\x55\x7d\xe2\xb2\x5a\xd2\x34\xdf\x46\xc4\x88\x5b\x77\x10\x81\x0b\xbb\xc7\x69\xeb\xa9\xc3\xfd\xe7\x6a\xfb\xa6\x68\x34\x79\xb6\x00\x83\xd1\xe9\xe5\x53\xdb\xfd\x63\x71\xbb\x3c\x3c\x1b\xed\xce\x38\xc8\x76\xf3\xa7\x36\xad\xcf\x1c\x81\x7d\xc1\xa3\x0e\xc4\x43\x5f\x92\x48\x6b\xf6\xe0\x67\x9b\xfd\x6f\x73\xb3\x6c\x75\x5f\x5c\x75\x9a\x2d\x72\xd8\x3e\x6d\xbd\xc6\x02\xeb\xdf\xa2\x75\xf8\xe5\xeb\x5d\xfc\x55\xde\xf8\xbe\x8e\xad\x49\xe5\x5b\xc4\xaa\xb0\x03\x3b\x44\x2c\x78\xbb\x44\xea\xd5\x5a\x1d\x9e\x48\x9a\xa3\x30\x18\xbb\xd3\x31\xb9\xe8\x92\xc6\x34\x1e\x05\x61\x54\x81\xf4\x41\x50\x36\x02\xf3\x62\x78\xc7\xe6\x62\x7d\x9d\x5c\x45\x14\x95\x35\x37\x22\x3c\x1d\x83\xcd\x4d\xab\xc3\xe0\x8e\x86\x3e\xee\xd6\x16\xd9\xef\x1e\xac\xa1\x7d\xc9\x73\x6d\xea\x47\x14\x21\xc4\x6c\xcb\x27\x7d\xca\x28\x0d\xc0\x3d\x81\xe3\x70\x9e\xb6\x9b\xad\xf3\x6e\x8b\x0c\x5c\x8f\x56\x9e\x3d\x2b\x4c\x23\x84\x6a\xb5\xe3\xc2\xee\xb3\x67\x9e\xdb\xaf\x84\xb1\x43\x27\xc5\x02\x44\x39\x02\xcc\x78\xc6\x7b\x7b\x6c\x4d\x48\xd0\xff\x46\x6d\x99\x70\xe2\xcc\x9a\x4c\xd8\xaa\x06\x25\x9b\xa3\xed\x39\x3c\xb8\x17\xf0\x15\x24\x97\xca\x78\xce\x38\x74\x42\x7d\x88\xa6\x13\x3e\xda\xf0\xcc\x03\x56\xea\x9e\x9e\x1e\x46\xb4\x71\xd4\x61\x0d\x63\x6e\x25\x5f\x13\x63\x89\xe2\x29\x8a\xfe\x1d\xb6\x5f\xf2\x4f\xc4\xdc\xfb\x41\x1c\x1a\xd9\xa1\x3b\xc1\xb0\x23\x32\x9a\x8e\x2d\x1f\x9e\x9c\x60\x6f\x52\xbf\x14\x0c\x67\x53\xa9\x12\xba\x80\xd1\xfe\x20\x43\x8f\x8d\x9d\xcd\xe5\xd1\x29\x2b\x94\x0c\xda\xf5\x27\x53\x08\xd1\x0a\xa6\x31\xfb\x2d\x41\xc1\x4a\xcb\x9b\x92\x7f\x48\x3d\xb9\x94\x6e\x94\xb1\x1d\x0e\x34\xc8\xb8\x4f\xd8\xc6\x32\x0a\xc2\x58\xeb\x2d\x9a\xf0\xdd\x48\xe7\x57\x99\xa3\xc6\xc1\xd7\x0e\xed\x4f\x87\x43\x0e\x4c\xcf\xfa\x21\x52\xff\x2a\x64\xf6\x54\xa2\x1c\xa7\x96\xb7\xc9\x46\x2a\xbd\xcb\xe3\x80\xd8\x10\xac\x13\x88\xfc\x21\xc8\x29\x26\x92\xae\x1f\xc5\x96\xe7\x51\x90\x33\x48\x33\xa1\xb6\x06\x79\x24\xa4\x67\xfb\xfa\xba\x78\x06\xb8\xa5\x74\x42\x2c\x9f\x4c\x7d\xfe\x4a\xec\x10\x09\xca\x28\x42\xd0\x71\x2a\x24\x6a\xb6\xe5\x79\xc1\x8c\x29\x2b\x10\x0e\x67\xf9\x14\x32\x9c\x44\x54\x60\xab\xf3\x04\xd7\x98\x4a\xd6\x83\xc7\x41\xf0\x62\x84\x7e\x00\x5b\xf7\xad\x88\x7e\x25\x7b\xc8\x63\xd1\xa1\xf3\x60\x46\xa2\xb9\x6f\x43\x6d\x78\x92\x90\xb5\x99\x82\xe2\x53\xea\xa0\xb3\x27\xde\x13\xe6\xbe\xfd\x35\x75\x33\x68\x8b\x4a\x23\xea\x4d\x68\x08\xdc\x0f\x29\x2b\xc9\x64\x44\x27\x59\x51\x93\x9c\xcb\x5c\x2c\x5c\x9e\x22\x1e\xc7\x90\x16\x66\x94\xc1\x37\x3f\x48\x30\x89\xbf\xa2\x20\x36\x1c\x07\xf6\x79\xcb\x4b\x2a\x33\x11\x44\xab\x36\x2c\xad\x60\xa2\xc0\x33\x81\x4b\x10\x3b\x19\x79\xe9\x05\xa2\x59\x99\x84\x41\x1c\xc4\xf3\x09\xc5\xd1\xaa\xa2\x2a\x3b\x20\xa1\x30\xdb\x03\x0e\x48\x88\x8b\x13\x16\x2a\xcf\x8f\x89\x93\x83\x79\xb1\x19\x37\xd9\x34\x09\x54\xe3\xe7\xe9\x59\xf9\xdb\xdf\xc8\xf3\x14\xf5\xac\x08\x11\xc0\xb6\x83\x63\x20\xa9\xff\xd5\xf4\x79\x48\xbf\x1a\x9d\xf2\xc1\x63\x14\x3b\x15\x6b\x6b\xb9\x42\x78\xca\xcf\x90\xe2\xc3\x13\xb1\x24\x80\x23\x96\xe0\xa3\xb2\x43\x0a\xa2\x81\xc4\x7c\x3a\xe3\x1b\x22\x3c\xcd\x05\x9e\xc3\xd1\xdb\xc3\x21\x75\x40\x82\x09\x4a\xef\xcc\x9a\xa3\xb2\xeb\x03\x14\x8d\xaf\x09\xaf\xe0\x4a\xc2\x80\x64\xf8\x38\x46\xb2\x47\x50\x0a\x2a\x56\x14\xb9\x43\xbf\xf8\xcf\x1f\xe5\xb4\x64\x97\x13\xf9\x00\x9b\x17\x53\xf8\x0c\x74\x52\xb5\x24\x46\xe7\xd0\x63\x9b\x49\x94\xb4\x74\x4b\xe7\xdc\x39\x09\xeb\x96\x2a\x63\x6b\x52\x2c\xde\xd2\x79\x89\xec\xfd\xce\xd5\xd4\xc2\xe7\xcf\xf7\x05\xf2\x82\x87\xc6\x3f\x4c\x2c\x87\x15\x80\x5c\x6b\xcd\xc0\xa1\x8d\xb8\x58\x2d\x55\xe2\x80\xbf\x81\xd6\xb6\x4b\x0a\x7c\x17\x4c\x13\x9b\x5c\x3a\x23\x1d\x3a\x6c\xdd\x4f\x8a\x05\x78\x96\xe6\x5d\xe1\x50\xd6\x08\xce\xff\xa5\x50\x26\x85\x21\xcf\x7e\x91\x08\x46\x31\x8a\x43\xd6\x1d\x76\x94\x55\x42\x3a\xf1\x2c\x9b\x16\x13\xea\x65\xcc\xbe\xb9\xf7\xbb\xca\x84\x4f\xf6\xe8\x8b\x09\x22\x83\x2d\x2c\xb1\x97\xc8\x7d\x44\x2e\xaf\xa2\xe3\x46\xb6\x85\xf0\xb2\xe1\xd4\x8f\xdd\x31\x25\xd3\x89\x63\xc5\x34\xb1\x1f\x09\xcf\x12\xc4\xc3\xb0\xfc\x39\xec\x9b\xb8\x63\xd1\xf8\xe2\x8e\x86\xa1\xeb\xd0\x28\x01\xae\x45\x92\x59\x25\xcc\xbc\x1e\x51\x62\x32\x16\x0c\x91\xae\x96\x8c\xac\x3b\xea\x17\x62\xd2\xa7\xd4\x5f\x2c\xc5\xb0\x66\x0b\xf0\x56\x3b\xe2\x78\xb9\x40\x5c\x48\xa2\x2a\x32\xcf\xf7\x32\x42\xa3\xc8\xa7\x69\x47\x3c\x63\xe2\x2f\x1a\x16\xb1\x59\xb0\x41\x27\x27\x2c\x8f\x07\xe4\xc7\x27\x63\x3d\xdb\x6a\x31\xaf\xfe\x14\x33\x66\xe1\x1a\xa5\xf7\x6e\x04\x17\x07\x39\x13\x56\x44\x5c\x70\xe6\xe2\xcb\x6c\xe6\xc6\x23\xf1\x8a\x27\x4b\x8b\xdd\x8e\x14\x67\x80\xab\x6a\x45\x7c\xe9\x62\xf9\x52\x85\x90\xee\xb4\x8f\x78\xf3\x71\x32\x4d\xac\x8b\x10\xca\xee\x02\x3e\x6e\x18\xcc\x88\xc5\xd6\xee\x24\xa4\x00\xf8\x0a\x5b\x2c\x9b\x44\x36\xa1\xac\xa1\xc8\xbc\x5b\xab\x1a\x43\x32\x03\x62\x8f\x06\x02\x99\x81\xad\xb8\x29\xab\x82\xa4\xc8\x82\xb2\x73\x2a\x13\x23\xb6\x03\x4d\xd8\x21\x8a\xca\x22\x76\x30\x99\xab\x8a\x8f\x38\x18\x60\x34\x3c\xd6\xea\x9f\xc6\xee\xfc\x20\x0d\x58\xb5\x66\xdd\x06\x54\x82\x2c\xba\x72\xce\x78\x6c\x2f\xc0\xa0\x09\x5d\xa8\x93\xe4\x8d\xb9\x0d\x15\xd3\x0a\x4d\x66\x4b\x94\xe8\xc2\x2b\xc9\x33\x93\x4c\x95\xbb\xda\xe6\xc7\x28\x71\x9e\x80\xf6\xf0\x43\x0b\xe2\xf6\x40\x65\xb7\x55\x45\x79\xd1\x74\x46\x39\x66\x48\x56\xed\xab\x16\x31\xae\xe5\xac\xe4\x2e\xa3\xec\xf7\x7f\xb1\x3e\xc5\x3a\x2a\xd4\xa9\xa4\xe7\xa9\x04\x59\xc1\x2d\x99\x4e\x88\x25\xd7\x0e\x34\x30\x74\xa3\x98\x86\xfc\x70\x4c\x2d\x9d\x2e\xd7\xda\x21\x93\x15\x5b\x39\xf0\x0b\x37\x5c\xf3\xe5\xe3\x05\xc1\xed\x94\xeb\xe8\x4b\x64\xb4\x87\xb5\xc0\x99\xcb\x8d\x0b\x11\xee\x8b\x49\x17\x16\x4d\x90\x22\xa0\x98\x29\x54\x9d\x31\xd6\xad\xc4\xca\x94\x8c\xbf\x32\xb2\xa2\x8b\x99\x7f\x19\x06\x13\x1a\xc6\x73\x2c\xa7\x9a\x9a\x14\x5e\x7d\x62\x5f\x7e\xd1\xce\x69\x5e\x46\x66\x1f\x4d\xad\x5a\xec\x36\xb1\x60\x41\x28\xdc\x6b\xf8\xf3\x7c\x16\x03\x78\x12\x2c\x70\xe0\xa5\xf1\xe0\x79\xcc\x14\x68\x97\xa3\x1c\xbe\x8b\x7d\x8f\xcf\x98\xe8\xd0\x8a\xec\xb6\x1c\xc7\xc0\xee\x32\x91\xbb\x9b\xce\x73\xb2\xb7\xb7\x97\x92\x49\xe5\x74\x12\x0b\x2a\x47\x79\x4a\xaa\xec\x6a\x4b\x10\x27\x47\xe4\x3f\xcd\x28\x0a\xa0\x3e\xc2\xa2\xb7\x7c\x07\x60\x0c\xdc\x38\xe2\xdc\x4e\xeb\x0f\x52\xed\x5f\x61\xe8\x39\xe7\x7b\x6a\xc0\x6c\xff\x5a\xbe\x41\x18\x98\xb0\xca\xae\xb2\xea\x29\x0e\xc3\xcf\x3b\xfa\x80\x13\x0d\xc0\xb6\x0a\x06\x39\x87\x04\x6a\xcd\x0b\x37\xc9\x15\x0e\x3d\xd6\xd2\x5f\x2a\x15\x6a\x20\x2f\x2c\x05\x17\xf6\xff\x48\x75\xe5\x54\x72\x0c\xf3\xac\xc2\xb0\xf0\x77\xa5\xb5\x77\x41\x5e\x61\xb3\xcc\xe1\xa1\x98\x44\xe5\xa6\x4b\xe9\xc7\x14\xfb\x02\x3f\x17\x59\x73\x93\x3d\x85\xd7\xc5\x45\xc5\x57\x52\xfe\x81\x5a\x00\xd7\x41\xa6\x82\xcb\x35\x27\x28\x9b\x7c\x16\x13\x98\x38\x3e\xd5\x49\x56\x95\xd5\x8f\x42\x55\xfe\xc8\x1e\xf9\xa7\xd2\x02\x22\x16\x1d\xa5\x51\x97\xe4\x3e\x34\x8a\xe3\xc9\xeb\xf5\xf5\xbb\xb8\x56\xad\x56\x7c\x1a\xaf\x3b\x81\x1d\xad\xdf\xc5\xf5\x7a\x75\x2d\x1c\xaf\x83\x8c\xd6\xd7\x36\x2b\xa3\x78\xec\xad\xd8\x03\x91\xf6\x30\x9f\x47\xc0\xd6\x02\x87\x82\x2a\x94\xe5\x4c\x16\x3e\xdf\x6f\x57\x0b\xaf\x0b\x9f\xa7\xf5\x2d\x7b\xbb\x50\x86\x93\xf6\xbf\xc8\xda\xef\xc4\x71\xad\x71\xe0\x3b\x4a\xb9\x1a\x2f\xf7\xaa\xce\xcb\x59\xac\xdc\x30\xa4\xf3\xb5\x7e\x70\xaf\x14\xac\x63\xc1\xcd\xea\x2b\x5e\xb0\xcf\x0a\x8e\xd6\x63\xa5\xcc\x86\x28\x63\xf3\x32\x36\x2b\x33\x58\x1f\x28\x65\x36\x45\x19\x87\x97\x71\x58\x19\x7b\x3d\x54\xca\x6c\x89\x32\x16\x2f\x43\x59\x19\x4f\xa3\xb3\x0d\x65\xaa\xd5\x7e\x95\x97\x19\xc0\x00\xe9\x30\xa4\x54\x29\xf6\x52\x14\xab\xf1\x62\x43\x56\xec\xc5\xfa\x9a\x52\x66\x87\x37\x57\xdf\xe4\x65\x46\xac\x8c\xbf\xee\x29\x65\x5e\x89\x2e\xf5\x79\x19\x97\x95\xb9\xd3\x86\x6f\x71\x5e\xd6\x76\x78\x99\x6f\xac\x0c\x46\x7d\xae\x81\x7d\x55\x29\xdc\x17\x85\x45\xff\x6f\x59\xe1\x38\x98\x64\x4a\xda\xbc\xa4\xe4\xaa\x27\x4a\x7a\x74\xa0\x16\x74\x04\x49\x31\x8e\xb1\xd2\x7e\xaa\x2c\xe5\x65\x37\x04\x51\x1f\x58\xec\xfa\x74\x0d\xe2\x64\x95\xa2\x03\x2c\xba\xd1\x17\xb3\x11\xb0\xa2\x91\x6d\xf9\xb5\xa4\xd4\xcb\xaa\x28\x25\x18\x34\x11\xa5\x36\x94\x52\x42\xdc\xaa\x62\xd4\xdf\x45\xa9\x2d\xa5\x54\x5d\xd0\x12\x9d\x0b\x45\xa9\x97\x4a\xa9\x0d\x51\x4a\x48\x52\x24\x4a\xbd\x52\x4a\x6d\x0a\xa6\x08\x5a\x31\x0c\x94\x0e\xe2\xb5\x58\x95\x94\x97\x5c\xe8\xb6\xa4\x14\x4c\x59\x41\x98\x8c\x54\xc9\x6d\xc1\x3b\x51\xf2\x4e\xe1\xb3\x5e\xf4\xa5\x20\x2a\x5a\x9f\x89\xb9\xd3\xcb\xed\x08\xbe\x88\x65\x78\x0f\xe2\xc5\x41\xa0\xd6\x30\xa7\x94\x2c\xcd\x85\xb1\xbe\x2d\x3a\x30\xc7\x31\x45\xd1\x1a\xfd\x3e\xb5\x14\xb9\x7d\x69\x89\xa2\x5b\xbc\xe8\x03\x5f\xdf\x56\x4c\xc3\x4c\x69\x14\xca\xea\x86\x2d\xa6\xe7\x9f\xac\xf4\xc4\x55\x8a\xd8\x82\xa0\x28\xf2\x07\x2c\x96\x20\xce\x10\x73\xf8\xd2\xb3\x36\x78\xc9\x1f\xc0\xa6\xd0\x8d\xdd\x68\xb4\x36\x09\xa6\xea\x46\xf4\x92\x8a\x85\xfa\x92\x97\xfe\x6f\x58\xcf\x01\x0a\xed\x0f\xe5\x11\x60\x1f\x29\x3c\x79\x17\xde\x7a\xdc\x2e\xdc\x58\x69\x17\xe6\xc3\xd2\x77\xe1\xfa\x46\xe1\x35\xd1\x79\xf0\x1f\x66\x1e\xa8\xe3\xbb\xea\x92\x46\xb7\xd9\x6e\xe3\x8d\xc1\x0f\x84\xc6\xb3\xea\xd1\x25\xb2\x3b\x2c\xeb\xf2\x34\x2a\x94\x31\x5e\x53\x79\xda\x9a\xc6\xf6\xd3\x39\xbb\xfd\x38\xce\x6e\xae\xd4\x4d\x87\x75\xe9\x29\x7c\x4d\xca\x6f\x56\x45\xf9\x3e\xe5\xe5\xff\xce\xca\x6f\xac\x6f\x2a\xa5\xb6\xfa\xbc\x54\x6d\x43\xac\xc2\x4f\xac\x54\xc1\xfd\x56\x20\x9e\x3b\x04\xef\x25\x52\xc4\x28\x80\x61\x00\xc6\xb3\x78\x44\x18\xd9\xc1\xe0\x4d\x49\x21\x64\xcb\xe6\xc4\xd6\xf4\x99\x11\xaa\xad\xd7\x95\x42\x8e\x28\xf4\x52\xec\x0d\x5f\xd4\x35\x4f\xfa\x56\xf8\x4c\x5f\x9a\x7c\xc8\x3b\xea\xda\x8c\x67\x01\x5b\x24\x91\xbe\x42\xb1\xe4\xf6\xb6\xba\x44\x07\xfa\xd2\xe4\x1d\xb4\xd5\xb5\x59\x5b\xdf\xd4\x57\x24\x2f\xb4\xa9\x2e\x49\xcb\x9e\x72\xac\x02\x55\x68\x0f\x5d\xdf\xff\x99\x45\xf9\xf2\x71\xa2\xd3\x4c\x81\x6e\xe5\x97\xdc\x5a\x49\xc8\x06\xd8\x7d\x5d\xcc\xa4\x40\x54\xed\x4d\x4d\x20\x1a\x05\x32\x1d\x7b\xd6\x34\x36\xcd\xb9\xb3\xad\xce\x79\xe1\xc2\x50\x56\xb2\xdf\xde\x52\xa7\x9e\xd1\x0d\x31\x09\xa5\x28\x29\xe7\xc0\xb1\xd5\x39\x28\x4c\x25\x55\x5d\xe7\xc3\xc2\xf4\x95\xaa\xf4\x15\x68\x81\x4f\x9a\x49\x9c\xe8\xa6\x2a\x4e\x05\x2b\xdb\xdd\x44\xa0\x06\x9a\x40\x15\x02\x43\x59\x39\x34\xba\xa5\x4a\x16\xa3\xab\x0f\x2d\x11\xaf\x41\xde\xd0\x32\x32\x16\x52\xff\x27\x76\xa7\x9d\xc7\x89\x58\x67\x35\xc1\x81\x3e\xfd\x59\xdb\x13\xad\xaa\xdb\x13\x63\xda\x30\xb4\xee\xa8\x69\x93\x4a\x14\xdf\x4f\xa8\xa7\x68\x72\x23\xa7\x8c\xbe\xd4\xa4\xd1\x2e\x10\x9b\x3a\xae\xe7\x59\x26\x71\xb4\x5e\xaa\xe2\x18\x71\xd7\xf1\x68\x3e\xee\x07\x1e\x29\x3a\xc1\xb4\xef\x51\x12\x95\xcc\x72\xf4\x4a\x93\x23\x29\x73\x26\x31\x7a\xa5\x89\xd1\x54\x8c\xd2\x24\x45\x3b\x9a\x14\xd1\x6c\x51\x9a\xd9\x17\x41\x8c\x16\x8b\x50\xd3\xf2\x2d\xc7\xb5\xfc\x27\xcb\xd2\xab\xc7\xc9\xd2\xbb\x47\xc8\x12\xb1\x79\xe7\x74\xa1\x7a\x9a\x90\x50\xfd\x24\xb3\x0a\xc4\x76\x43\x7b\x3a\x1e\x78\xf4\xfe\xa7\xc5\x85\x5a\xda\xee\x45\x73\x88\xcb\x19\xa2\xe2\xf0\xfd\x07\x1e\xab\x5a\x79\xd3\x3e\x36\xd8\xd4\xf6\xb1\x20\xa7\xc2\xbf\x91\x10\x0e\xfa\xe9\xbd\x2c\xc5\x12\x55\x18\x8f\x68\x38\xfe\x09\x19\xac\x55\x1f\x27\x84\x27\xab\x99\x13\xa0\x53\x79\xb2\x27\x77\x88\xbf\xaf\xba\x43\xfc\xf5\x87\xa8\xa3\xe9\x4f\x85\x2b\xc3\xd1\xf8\xd7\x1f\x77\x03\x4d\x91\x4a\x1d\x62\x29\x21\x71\x06\xaa\x90\xd0\xe8\x81\xc6\xd9\x9d\x0a\xd0\xe5\x7e\x46\x3a\x6a\x8f\x93\x8e\x8f\x2b\x49\x87\x8b\xbd\xfa\xb3\xce\xbb\x9f\x11\xa7\xbf\xe0\xfc\x93\xdb\xc7\x97\x3c\xbd\x49\xd9\x9b\x74\x1d\x6b\x9a\xdd\x85\x15\xa1\xab\xa6\x85\x2e\xbd\x81\x24\x32\x57\x4f\xcb\xdc\x9f\xb1\x2d\x51\x5d\xc5\x72\xd5\xa2\xaa\xd0\x9d\x07\xe1\x8c\x0e\x5d\xcb\x5f\x3f\xb0\x7e\x4a\x9d\xaf\xd5\x1f\x27\x7d\xad\x95\xf5\xf9\xed\x95\xe4\xd4\x97\x03\x71\xac\xac\x62\x9f\x08\xa0\xdc\x93\xfe\x9e\xda\x93\x8c\x1b\xd8\xb6\xbe\x81\xb5\x92\x6b\xa1\x71\x0f\xdb\x49\xef\x61\x51\x1c\x06\xb7\xf4\x4f\xba\x08\xfc\x23\x77\xb7\x53\x2e\x02\xfa\x01\x6a\x2d\xde\x1a\xb7\x75\x29\xa5\xa6\xe1\x29\x92\xba\x93\x96\xd4\xf4\xf0\xfe\xd2\xcb\x40\x77\xf2\x93\x12\xba\xf1\x38\x09\xbd\x59\x49\xee\xa2\x89\x41\xdc\xfe\x35\xfb\xa3\x55\xd3\xa4\xf5\x79\x81\x00\x06\x63\x4c\x1d\xa3\xb0\xd6\x34\x61\x3d\x2f\x90\xd8\xf5\x1c\xa3\xac\xf6\x07\x9a\xac\xbe\x51\x08\x9b\xc4\xaa\xaf\x6d\x7e\xa9\x79\x4f\xa4\xa9\xa6\x49\x93\x9f\x69\x5f\x11\xa6\x97\x9a\x30\xa5\xb6\x74\x4d\x46\x66\xd4\xf9\x29\x19\x79\xe4\x83\xcd\xcb\x95\x77\xb1\xb7\xab\x49\x13\xf6\x3f\x77\xf3\x7a\xa5\x6d\x5e\xad\xec\x71\xf5\x6f\x69\xc1\x58\x69\xe3\xfa\xdf\x69\xc1\xe8\xce\xdc\x28\x7a\xba\x38\x3e\xd2\x72\xbd\xb7\xa2\x90\xb9\x51\x94\xb7\x61\x49\x2d\xe7\x3f\xf2\xb4\x9c\x27\xde\x4b\x5f\x69\xe2\x98\xbd\xa8\xfd\x3b\x5c\x49\x93\xf2\x83\x8c\xce\xf5\x55\xd7\xb9\xfe\x9c\xdb\xeb\xbf\xc1\xdd\x64\xa5\x0b\x2c\x84\x68\x50\x8c\x08\xa9\x58\x8e\x53\x2c\x60\x4c\x8a\x35\x75\xdc\x60\xbd\x4f\x3d\xaf\x50\x26\x05\xfc\x2b\x18\x0e\x77\xfb\x56\x44\xb7\x37\x0b\xe5\x67\x85\x5e\xdd\xf1\xaf\x66\x8d\x66\x43\xfe\x1c\x8c\xbe\xbf\xdf\x3a\x81\x5f\xcf\x0e\xef\x5a\xdf\x3e\xee\xbf\x1d\x1e\xd6\xfb\x1b\xc7\xae\xf5\xe1\x0c\x8b\x7c\x6c\xbe\x94\xc5\xdf\xda\xfb\xf8\x4b\x73\xb3\x40\x5e\x3c\x2b\x34\xae\x5e\xf9\x37\xb5\xb3\x86\xfa\xb3\x69\x79\xd3\xee\xb0\x05\xbf\xd3\xa8\xbd\xd1\x6a\x6e\xac\x67\x7e\x76\x6e\x0f\x9c\xf1\xab\xf9\xc7\xb1\xf7\xf0\xf6\x5d\xa3\xd1\x38\x1c\x4d\x80\xa0\x7d\x34\x9c\xf6\x36\x8e\xfd\xf6\xd1\xfd\xe4\xa3\x77\x73\x67\x8f\x8f\x27\xf6\x7c\xff\xb8\x7d\xd0\x9e\x9d\x1d\xdc\xce\xce\x1f\x1a\x5b\xd8\x4c\xeb\x50\x10\x38\xb9\x3a\x3e\xb8\x1e\xb6\x70\x58\x07\x87\x67\xed\xb3\xf7\x8d\xea\xf1\xfe\x35\xf6\xb0\xd1\x78\xd7\x68\xec\x0f\x8f\x9b\xb7\x17\xb7\xf5\x9b\xe3\x13\xeb\xfd\x55\xd0\x1d\x6d\x8d\x8f\x3b\xed\x6e\x77\xec\x79\x67\x57\x33\xf7\xc6\xbd\x72\xed\xab\x8f\x1f\x37\x67\xf7\xf7\xa3\xd1\xb7\x6f\x07\x6f\x8f\x8e\x8e\x2e\xce\xda\x07\x9d\xdb\x43\x56\xbb\xd1\x6c\x9c\x34\xc6\x17\x40\x30\x78\x71\x73\x6c\x45\x9b\x5b\x37\xf7\x43\xff\x9b\x7f\x32\xbc\x78\xef\x5d\x5c\x9c\xd8\xc3\xfd\xcd\x49\x67\xf3\xe0\xf6\x78\x76\x77\x35\xfe\x58\xdf\x1e\xc7\x27\x37\x61\x3f\xda\x9c\x1c\xbf\x1b\x9e\xbf\x7f\x77\xd5\x68\x34\xda\x8d\x77\xad\xe1\x68\xd4\xe9\x74\xbb\xcd\xa3\xc3\xc3\xa3\x93\x36\x10\x6c\x7f\xfc\xf8\xf1\x63\x30\x1c\x8d\xee\xef\xe7\xf3\xe6\x91\xef\xbf\x6d\x9f\x9c\x7c\x77\x87\xc3\x61\x30\x9f\x37\x9b\x07\xbd\x83\xd3\xc9\xe4\xf8\xfc\xe2\x62\x3a\x0e\x82\xcd\xcd\xed\x6d\xd7\xad\x56\x5b\xed\xd3\xd3\x7e\xaf\xdb\xbd\x9d\xdd\xd7\xae\x6f\xbe\x85\x61\xf5\xe8\xc3\x87\xfb\x07\x20\xf8\xf0\xcd\xf7\xfd\xb7\x97\x17\x17\x94\xda\xf6\xce\xe6\xf1\xbb\xdb\xf3\xf7\x8d\x77\x8d\x21\x63\xda\xbb\xe1\xc7\x9b\x9b\xfd\xfd\x66\x93\xf5\xe0\xf0\xa4\x7d\x62\x59\x1f\x6d\xd6\x50\xfb\xe0\xdd\xed\xe1\x55\x83\x31\x71\x08\xfc\xdd\x7f\x7b\xdb\xe9\x1c\x03\xc1\xa8\xd3\x3b\x8d\x3a\x0f\xe7\xd5\x6e\xe7\x72\xc7\xbd\xef\xb4\x1e\x3e\x74\xce\xaa\xd7\xbd\xeb\x56\xed\x9a\xfd\x38\xd7\xb5\x0f\xce\xf8\xc3\x07\xc7\x67\xff\x6a\x37\xe3\xf6\x75\x7f\xfa\xb6\x76\x33\x6d\x5f\xf7\xeb\xed\x6b\xe7\xd5\xe6\xf5\xe8\xa8\x7d\x03\xff\x80\x20\xfb\xe5\xc5\xdb\x8d\xc1\xab\x0d\xf6\xaf\x3a\x3c\x3f\x7a\x77\xdd\x68\x36\xf6\x1b\x27\x8d\x6f\x17\x37\xfd\x6f\x27\x56\xdb\x3d\xfa\x7e\xea\x5e\x58\xed\x83\x51\xdb\x8a\x1a\xc3\xfd\x5b\xd6\xfb\x46\xb3\x71\x7c\xeb\xb6\x27\xb7\xdf\xcf\x8f\x27\xe3\x9b\xef\xe1\x78\xdc\x07\x82\xf1\xd8\x0d\xe3\xf1\xc6\x69\xe4\x3e\x9c\x46\xc3\x79\x6b\xf4\x7d\xc6\xa4\x61\x1f\x26\x9f\xfd\x9c\xec\x4f\xc6\xdf\x6f\xcc\xff\xc6\x37\x37\xde\xf8\x5a\xfe\x03\x82\xea\x07\x79\xff\xde\x1d\x7d\x6b\x9f\x0c\xf7\x1b\x8d\xe1\x7e\xe3\x7e\xa3\x65\xdf\x6f\xb4\x6e\x3b\xd7\xed\xdb\xfb\x8d\x76\xb4\x3f\xc3\x59\x9f\x37\x1a\x0d\x20\xc8\x46\x77\xe5\x3e\x1c\xda\xdf\x3a\x6f\xed\x87\xde\x5b\xfb\xe1\xe1\xad\xfd\x70\xff\xd6\x69\xf5\x8e\xbd\xd6\xc3\xf9\xab\xd6\xec\xb2\xd9\xa8\xdd\xec\xb3\x0e\x0f\x1b\x6d\xec\xf6\x7e\xe3\xac\xf3\x70\x68\x77\x1e\x8e\x19\xef\xaf\xdc\x8d\x9e\xfd\xed\xfa\x03\xae\x94\x87\x8d\x0f\x76\x75\xe3\x03\x63\xfe\xf5\x63\x7e\x3e\xbe\xc5\x99\x66\xac\x69\x1e\x39\x37\x93\x9b\xef\x40\x70\xd8\x18\x3e\xdc\x1e\xb5\x70\x32\xb0\xfd\x8f\xc1\xbb\xd1\xc1\x41\x43\x08\xf0\xbb\x46\xa3\xed\x8e\xb6\x9a\x4d\xab\x7a\x1c\x3e\x3c\xf4\x6e\x2f\xc6\xd3\xf7\xc3\xef\x9d\x6e\xbf\xba\x73\x74\x7c\x7d\x1c\xf9\x53\x6b\xfc\x71\xbc\x71\x89\x2b\x85\xc9\x5f\xff\x6c\xf3\x66\x73\xeb\xfe\xe1\xc1\xf5\x4f\xc6\xf6\xfb\xe1\xd8\x69\x5a\xf6\xce\xd6\xf1\xc1\xf1\x77\x2f\x38\xf6\xdf\x8d\xfd\xcb\x0b\xda\x39\xe9\xef\x6f\xd7\x27\xd5\xc9\xe4\xe1\x61\xe4\xfb\x7e\xe3\xe5\xd1\xd1\xfb\x23\xdb\xde\xd9\x9a\x54\x27\xc1\xdb\xef\x8e\xf7\x11\x08\x32\xca\xef\x9d\xa6\xb5\xf5\xdd\xdd\x3a\x3c\x8e\x1f\x1e\x82\xf1\xd5\x78\x4e\x6b\xd3\xeb\x6e\xdf\xde\xd9\xdc\xda\x62\x0d\x71\xe1\xff\x7e\xbd\x6d\x3f\x44\xad\xad\xcd\x9b\xfb\x87\x87\xc0\xb7\xc6\xf5\xe9\x56\xf3\xba\x6e\xdb\x3b\x2f\xb7\x6e\x8e\x1f\xa6\xb8\x52\xde\xf9\x23\x65\xa5\x20\x81\xa1\xd7\x7c\x57\xfb\xb8\xdf\x80\x1d\xac\x33\xaa\xef\x7f\x3b\xf2\x3f\xb6\x87\x83\x8f\x9b\x47\x1f\x47\xef\x46\x13\xf7\xa8\xf7\xd6\xef\x5e\x1e\x4c\x2e\x86\x67\xf6\x70\x32\xd9\xdf\x3e\xff\x76\x7b\x73\x02\x04\xbf\x7f\x3c\x7f\x77\x35\xba\xf5\x27\x1f\xba\x4d\xb6\x05\xc1\x5c\x36\x9a\xad\xd6\xe1\x71\xbb\xfd\xf1\xea\xea\xea\x56\x6e\x00\x47\x47\x47\x27\xed\xb6\x45\x6d\x7b\x18\x7c\xff\x7e\xd2\xed\xba\x6e\x78\x72\x72\x7a\x79\x76\x16\x45\x51\xb4\x33\x9b\x03\xc1\xf9\xf6\xc3\xc1\xc3\xb7\x30\x8c\xce\xce\xde\xbd\x9b\xcd\xee\xe3\xf3\xe3\x93\xd3\x83\x0f\xd7\xd7\xe3\x8b\xf3\x98\x5a\xd4\xde\xde\xdc\xea\x1e\x4d\xbd\xd8\xb9\xb1\x4e\xb6\xdf\x5f\x5d\xdd\x06\x93\x49\xb7\x51\xbd\xd9\xe7\x3b\x4e\x73\xff\xf6\xb6\xd5\x3a\x3a\xfa\x78\x75\x05\x04\xa1\x07\x93\xd1\x7c\xee\x8e\xfd\xa0\xdd\x3e\x49\xcb\xdc\x4e\xb3\x77\xd9\xea\x6c\x74\x52\xff\x2e\x77\x3a\xf7\x9d\x96\x7b\xdd\x69\xb9\x1f\x3a\x67\x6e\xad\x77\xf6\x50\xc3\x0d\xf6\xfa\xf0\xfa\x83\x33\xae\xdd\x78\x1b\x1f\xfa\xf1\xe6\xb5\x53\x7f\xfb\x61\x50\xdb\xd8\x18\xd4\x36\x6b\x83\xc3\xcd\x1b\xef\xfd\x4d\xf6\x5f\x93\xef\xd8\xd0\x62\xab\xdd\x6e\x7f\x7c\x07\xac\x01\x82\xa3\x9b\x8e\xfb\xed\xe0\xed\x5b\xbf\x7d\x7e\xf1\x6e\x38\xde\x97\x7c\xe4\x6b\xa2\xb3\xd1\xba\xba\xdf\x6a\xd9\xf3\x9b\xd6\x6d\xf7\x65\xfb\xb6\xe7\xb4\xa3\x87\x41\xbb\xda\x5b\x3f\xab\x56\x3b\xe7\x87\x57\xbd\xce\xf9\xd5\xfd\xb5\x53\xed\x5c\xd7\x80\x60\xf5\xfe\xc6\xbb\x7a\xb8\x71\xaa\x0f\xd7\x5e\xb5\x76\xed\xd5\x3e\xdc\x78\xf5\xfe\x8d\xf7\xfe\xa5\xf3\xea\x7d\xff\xe6\xd5\xc6\xba\xa3\xff\x7b\xe5\xd4\xf8\xd6\x3f\x6c\xbc\x6b\x0e\xdb\x0f\xe3\x6e\xdb\x1d\x77\xdb\xdf\xf8\x11\xb0\x59\x75\xbb\xfb\xed\xee\x51\xd8\x68\x37\x6e\x60\x95\x36\x87\x27\xed\x97\xee\x45\x7b\xf3\x5b\xf7\xa6\x7d\xfb\xfe\xa6\x3d\xa6\x37\x37\xbe\x7b\xf3\x7d\x32\xbe\x79\x39\xf9\x6e\xb5\x4f\x70\x1b\x83\x45\xd4\xe2\x47\xe8\xd0\x6a\x7f\xf7\x51\xb0\xdb\xdf\x7d\xb7\x1d\xfa\x6e\x7b\x33\x70\x6f\x6e\x26\xee\xcd\xf7\xef\x53\xeb\x38\x9a\x7f\x7f\x19\x4e\x1f\xf3\xef\x76\x3f\x40\xb1\x69\x06\x8d\x77\x70\xe0\x38\xf3\x63\xf8\x77\xdd\x3d\x6e\x5d\xcf\x8f\x1b\x76\xfb\xe0\xfa\xf6\xb0\x71\x36\x04\x96\xce\x0e\x5a\xf6\xbb\x5a\xfb\xf6\xfe\x65\x3b\xea\x0d\xce\x38\x0f\xcf\x5e\x55\x7b\x67\xaf\xae\x3f\x74\x0e\x0f\x67\xc3\x73\x20\x28\x4e\x30\xa1\x3a\xcc\x8e\x1b\x67\xdd\x97\x2d\xfb\xc1\x69\xdd\x5e\x5d\xb7\xe3\xda\x75\xbb\x56\xbb\x6e\xc7\xd7\xd7\xef\x5e\x2d\xdb\x80\x50\x6c\x94\x9f\x5a\xaf\x73\x5e\x7d\xe8\xee\x57\x8f\x9b\x6c\xa6\x19\x4b\xbf\xbd\x7b\xf7\xf1\x66\xb4\xdf\x3c\xb1\x27\xfb\xcd\xfe\xb7\xda\xc7\xe6\xc1\xdb\xf1\x71\xe3\xfd\xe8\xe2\x9d\x35\xba\xdf\x77\x5b\x93\xfb\xc6\xc3\xc1\xc1\xed\x79\xdb\xef\xbe\x03\x82\xef\xba\xf6\xab\xe9\x71\x7b\x6b\x36\x7b\x78\xd8\x3c\x6c\x07\x87\x57\x9d\xb3\xe1\x66\xd5\x3b\xdf\xdc\x1c\x1e\xd8\x27\xe3\x0f\x2d\xdf\xbb\x68\x8c\xd8\xda\x6e\x35\x0e\x5b\x6c\x30\xf7\xf3\x83\xb7\xad\xa3\xb7\xa7\x17\x5d\x7b\x3c\xec\x9c\x6d\xde\x37\x6f\xea\x57\xf3\x83\x5b\x9c\x94\xc9\xcd\x65\xb7\xdb\xbd\x8d\xbd\xd1\xf0\xe1\xa4\xfb\x7e\xdc\x1a\x5f\x7e\xf3\x4f\x2e\xbb\x5d\x7b\x7c\xeb\xed\x8f\x4e\xdd\x49\xfd\xb6\x35\xbe\x38\x0e\xdf\xc1\x22\x7f\xcb\xe4\xb3\xb9\xfd\xf6\xdd\xed\xfe\xd5\xfe\x3b\xb6\xa4\x8e\xda\x67\x57\xc3\x60\x32\xba\xe9\x74\x71\xb7\x71\xfd\xf1\xed\xe1\xe9\xc9\x19\xbd\xb2\xaf\x6e\x83\xad\xc9\xd6\x7d\xef\xe1\xdb\x6d\xfb\xed\xc7\xde\xc9\xd9\x3b\xcb\x19\xde\x37\x26\x93\xce\x7d\xef\xc1\xf5\xdf\xbe\x6d\xf7\xce\xde\xd1\xf7\xf6\xf0\xd5\xfe\x3e\x53\xcf\xda\x67\x4c\xca\x0e\x1a\xef\xdc\x61\xf5\xa6\x75\x85\x67\x4a\xab\x69\x37\x36\xdf\x36\x6e\x1f\xb6\xce\xaa\xdd\xfb\x77\x5e\xf7\xfe\xfc\xf0\xe1\xbe\xe3\xd5\xee\xcf\xcf\x6b\x5b\x57\xd5\x87\xde\xbb\xda\xd5\x75\xe7\x7a\x7e\x7f\x7e\x5d\xbb\xee\x5c\xd7\xef\x6f\xce\xaf\xfb\x1f\xbd\x5e\xe7\xfc\xbc\x37\xe8\x5c\x5d\x77\xce\x0f\xaf\x3b\xd7\xd7\xd5\xad\x1b\x9c\xe5\xeb\xfe\x75\xfc\xf0\xd0\xf1\xea\xd7\x9d\xeb\x8d\xce\xcd\x75\xad\x7f\xe3\xd5\xef\x6f\x5e\x5c\x6f\xdd\xd4\x36\x1e\xce\xcf\xdf\xb3\xcf\x1c\x46\xe4\xba\x56\xdb\xba\x79\xf5\xe1\xd5\x4d\xfc\xe1\x66\x28\x1b\xea\x75\x3a\xd8\xd0\xc3\x0d\xce\x72\xed\xe5\xc7\xda\xd5\x87\xce\xf5\xd5\xf5\xb5\xf7\xfe\xba\x73\xfd\xfe\xc3\x8d\xf7\x7e\xe0\x5c\x5f\xff\xff\xd8\xfb\xf3\x66\x37\x91\x34\x51\x1c\xfe\xbf\x3e\x85\xa6\xdf\x88\x6b\xd7\xc8\x65\x10\x68\xed\x1a\xf7\x44\xb2\x89\x45\x08\xb1\x0b\x3a\x3a\x2a\xd8\x04\x88\x7d\x47\xcc\xf4\x77\x7f\x43\xe2\x1c\x2f\xe7\xe8\xd8\xc7\xae\x9a\xe9\xba\x37\x7e\x8e\xa8\xb2\x0c\x99\x4f\x3e\xf9\xec\x4b\x4a\xb9\x31\x37\x72\x7f\x1d\xbc\xdf\x23\x92\xa6\x69\xb6\xa9\x21\x27\xad\xd6\x4c\x73\x33\x3f\x4a\xda\x51\x73\x63\xe4\xe4\x6a\xba\x64\x4e\xf5\x8d\x47\xcd\x4f\xe6\x66\x54\x3d\x29\xb8\x61\x30\xdb\x68\xb3\xeb\x60\xc3\x35\x63\xc3\x76\x67\xe8\x25\xc8\x93\x24\x2e\xb2\x22\x2c\x92\x30\x2c\x8a\x22\x29\xea\x04\x29\xca\x62\x66\x67\x4d\x58\x64\x45\xc9\x55\x89\x57\x94\xc5\xc0\x55\xc5\xb4\x2c\x93\xa1\x1c\x55\x2f\x0c\x8b\xb2\x08\x8b\x2a\xbc\x14\x45\x78\x29\xab\x62\x58\x15\xe1\x50\xd6\x45\x58\x34\x05\xca\x55\x25\x6e\x97\x45\x5b\xd6\xcd\x7a\xd7\x5d\x86\xb2\x49\xf1\xa2\x2c\x96\x65\xd5\x8c\xe3\x9a\x02\x2d\xfb\x94\x2e\x9b\x33\xb6\x1e\xc5\x26\x4c\x77\x79\xd1\x16\x4d\x91\x2c\x9b\x64\x55\x36\x29\xcd\xd7\x09\xec\x64\xcb\xb2\x68\xc3\x72\xd7\x95\x04\x57\x35\x50\xd9\x84\x53\xd8\x95\x29\x49\x3b\x1e\xdd\x98\x42\xcf\x1a\xa2\x99\x1b\x64\x76\x72\x17\x0b\x7b\x33\xd7\x2f\xb6\xd2\x40\x37\x80\xe5\xa9\xe5\x1c\xaf\x59\xc2\xad\xbf\x18\x90\xb5\xd3\xd8\x66\x4d\xef\xf6\xcd\x76\x35\xad\xa7\x6b\x7b\xe0\x86\x4d\x20\x30\xcb\xd8\x5c\x14\x88\x6d\x15\x45\x69\x36\x45\x31\x6d\x2e\x76\xd8\x12\xa5\x50\xe3\xaa\xa6\x6d\x8e\xa6\x16\xa3\x83\xeb\x8e\xba\x2c\xb9\x0d\x3a\x78\x82\xbe\xf1\xf6\x59\x51\x16\x4d\x58\xee\xda\x2b\x56\x67\xda\xe9\x93\xb5\xd3\x0c\xc0\x39\xba\x15\x72\x8e\xdb\x63\x6a\x73\x35\x8e\xce\xce\x97\x83\xc3\x0e\x48\x6b\xf7\x29\xbd\x12\x9a\x03\xe2\x5a\x42\x4b\x80\x94\xbe\x01\x3c\x77\x57\x0d\x20\x6f\x1a\x40\xae\x73\x90\xc9\x64\x09\x32\x30\x07\x22\xd8\x32\x9e\xa3\xaa\x3d\x28\x7a\x19\x83\x49\x6a\x57\x30\x9c\xa4\xf2\xa2\x11\x38\xf0\x82\xeb\xa5\x8b\xaa\x92\x79\xc1\x98\x8a\xca\x55\x86\xaf\x31\x8b\x31\xe0\xbc\xb0\x17\x85\x8c\xf2\x8c\x33\x15\x59\xf5\xbd\x20\xd7\x30\xce\x5a\x6e\xd5\x59\xcc\x96\x95\x65\xab\x46\x03\xfb\x39\x66\x72\x96\x8c\xa8\x70\x9c\x17\x85\x63\xab\x7a\xd6\x49\x46\x0f\x2e\x8b\xa5\x14\x0d\x51\xc4\xe6\xb6\xa8\xcb\x49\x54\x8f\xc1\x12\xbc\xe0\x16\x4b\x3c\x22\x22\x96\xcb\x2d\x51\x95\xe1\xac\xd6\xaa\x9e\xbd\x58\xf8\x19\x8e\x28\xa6\xb0\x44\x59\x85\x93\xbc\xbe\x2d\xa4\x47\x54\x54\x73\xbc\x6d\xa8\x3a\x32\xef\x67\x41\x7f\x5d\x28\x22\xe3\x9a\xe5\x1c\xe3\xc1\x8d\x22\x70\xdd\xe7\xd9\xb9\x0f\xb1\x68\x88\x52\x36\x65\x79\xf9\xba\x5a\xbc\x67\xad\x85\x19\xaa\xd7\x85\x12\x43\x90\xe5\xa8\xa8\x63\x93\x95\x07\xf6\xa2\xdc\x16\x32\x04\x41\x8e\xa2\xbc\xce\x59\x4e\xe1\xb6\xea\x2c\xca\xc7\xc8\xa1\x32\x34\x59\x4f\xba\x7e\x96\xf7\xb2\x4d\xe8\xd7\x6d\xb1\x9c\x63\xc9\x72\xd2\xd5\x7d\x9c\xdb\xca\x4e\x9b\x91\x54\xb6\x1b\xb7\x95\xd4\xb5\x66\x96\x56\x81\x6e\x55\x32\x2f\x59\x4b\x35\x64\xb8\xe8\x6b\xc9\x2c\xed\x33\x9d\x8c\x31\x76\x94\xe7\xa5\x25\xca\x3a\x9c\xe4\xbd\x64\xda\xe7\x10\xdd\x26\xf1\xbe\xdc\x5b\xb6\x6e\x25\xf3\x7e\x11\xe4\xb6\xad\xa0\x7a\x92\xee\xb9\xd2\xb5\x55\x35\xbb\xee\x28\x3f\xdb\x36\xaa\x25\x69\xdb\x32\xdc\x48\xbf\x78\xcf\x86\x37\x80\x56\x88\x6e\x67\x09\x57\x67\xa6\xa2\xcb\x61\xd1\xc7\x26\x6b\xd9\x04\x9d\x20\x71\xc1\x0b\xa6\x22\x1b\x51\x92\xf7\x26\x2b\x9f\xf1\xeb\x42\x75\xd5\x58\x96\x6e\x25\x5d\xbf\xc8\x73\x39\x5c\x1d\x13\x24\xdd\x57\xfb\x93\xad\xea\x45\x37\x32\xa5\xcf\x73\x45\x5e\x1d\x75\x3d\x15\x0e\xcd\x49\xd3\x01\x20\x80\x0f\x78\x20\x32\x80\x35\x2d\x42\x8c\x58\x15\xdc\x0c\x29\xb9\x65\xd4\x6a\xc1\x5a\x12\x76\x19\x88\xa8\xc0\xd5\x1d\x2f\xc8\x5e\xee\x44\x3d\xce\xc9\xb1\x36\x90\xe4\x98\x49\xb1\xf6\xf1\x4a\xdd\xbc\x77\x8d\x05\x8e\xeb\x31\x15\x55\xc5\xce\xd1\x74\xeb\x12\xe5\x57\xda\xec\x44\x00\xb2\x07\x43\x8a\x45\x08\xdb\x8b\x24\x47\x68\x11\x0b\x48\xf1\xfa\x6c\xcb\x5c\x05\x13\x18\x66\x2e\x85\xc4\x18\x39\x60\x61\x44\x6d\x79\x91\x29\x54\xe3\x2a\x42\xb9\x24\x9d\xaf\xdc\xde\xd2\xbc\x20\x86\x99\x69\xac\x17\x18\x87\x27\xa4\x4a\x66\x05\x67\xa8\xa2\x1c\x45\x71\x2e\x5e\xe3\x94\xcc\xb9\x7a\x78\x7b\x8f\xab\x3a\x76\xf1\x61\x16\x3c\x64\xa3\x2a\x50\xaf\xd9\xe8\x75\x2d\xde\x30\x7c\x97\x12\x2f\x5c\xb0\x25\x15\x32\x4b\x0b\x83\x14\x75\xbf\xa9\x5d\xd7\x94\xad\xe5\x91\x1a\xa8\xbc\x28\x6d\xc5\x10\x41\x58\x07\xae\x71\x91\x2f\xc7\xed\x8c\xca\x93\xd2\x91\x0d\x3d\xac\x46\x17\x00\x84\x01\x00\x91\xa8\x3a\x92\xc9\xf6\x5b\x31\x06\x2c\xa0\x01\x09\x8c\xac\x97\xce\xc3\x39\x4e\xc9\xed\x8e\x17\x3c\xdf\xd9\x03\xbf\x5f\x04\x17\x92\x08\xcb\x6d\xca\xf0\x82\xe8\xfb\xda\x15\x7b\x1c\xdf\x92\x03\x11\x5d\x23\xb0\x07\x37\xda\x18\x4e\x70\x4d\x10\xb9\x2d\x41\x92\x0c\x93\x9b\x8a\x2c\x8a\x7e\x10\x50\x2c\xb7\x94\x71\x92\x24\x99\x3c\x3f\x8a\xa2\xe8\x87\x41\x4c\x31\x57\xdf\x54\xdc\xf6\xba\xc3\x24\x93\x16\xf0\xc8\xc2\xae\x2e\x16\x07\x74\xf4\x80\x21\x03\x7a\xf9\x1c\xd1\x99\x29\x6d\x39\xc7\xf0\x63\x96\x95\xaf\xd8\x91\x64\xce\x16\x47\x86\x17\xc3\x28\xef\x35\x63\x81\x2d\xb7\x6a\x4c\x95\x15\xc3\x2a\x57\x45\x98\xb9\x01\xc6\x59\x32\xba\xd5\xa3\x3d\x57\x3a\x9a\x61\x2d\xe7\x63\x7c\x98\xbb\x66\x58\x12\xc7\xe3\x8c\x2a\xf8\xda\xb3\x2c\x0b\xce\xae\x1a\x52\x0e\x76\x04\xc0\xbe\xa3\xb0\x0e\xef\x40\x5f\x53\xfb\xd0\x31\x70\x39\x83\x4d\x5c\x05\x11\x70\x80\x8f\xe3\x11\xb5\x15\xae\x74\x57\x8d\x2c\xeb\x17\x8b\x7e\xe4\x32\x8e\xa7\x54\x42\x1f\x04\xce\x32\x8c\x31\x0b\xb8\x06\xa0\xd7\x34\x42\xe0\xf9\x87\xcc\xa0\xcf\x83\x5b\x6a\x41\x3f\x66\x0b\xf3\x2f\xd3\x8d\xc7\x0c\xe2\x06\x70\x4c\x23\x22\x00\xf0\xbc\xbb\xfa\xee\x8a\xa2\x22\x67\xce\x49\x19\x79\x0d\x7b\x19\x50\x5c\xe3\x6d\x8c\xd2\x8d\xac\xeb\xfb\xc0\xb7\xf1\x87\x7a\x03\xaf\x1a\xf2\xf8\x2c\x38\xdb\x0f\xcf\x6e\x00\x79\xc7\x32\x1e\x5f\x3c\x16\x27\x78\xc7\x78\x56\xb0\x78\xcd\xb3\xd1\x38\x50\x75\x59\xda\x47\x5d\x4f\x9a\xfa\x9a\x3a\x58\x4b\x64\x36\x8b\xf3\xb2\x14\x31\xd0\x76\x19\x0d\x0e\x6b\x7a\x3b\x1b\xf9\x89\x5f\xba\x1b\x0d\x49\x30\x07\x00\x3b\x13\x09\x2d\x08\x82\x68\xb8\x01\x63\xe4\x4b\x4e\x26\x6f\x00\xaf\x22\x94\xa9\x7b\x4e\x90\xfd\x38\xa0\x30\x8e\x93\xe3\x41\x89\x72\x2e\xb7\x64\x55\x8f\x0a\xd3\x99\xb1\x32\x17\xea\x71\x1c\x5f\x5d\x80\xa2\xea\x51\x76\x5b\x18\xbb\xe8\xf1\x2c\x66\x8b\x2b\x32\x82\x1f\xc6\xf5\x5e\xb2\x46\x6b\xb3\x44\x66\x08\x49\x31\x9c\x75\xd4\xf5\xac\xaa\xfb\x18\xe3\xe4\x02\x99\x21\x5b\x8e\xdf\x1b\xa6\xac\x26\x45\xdd\xbb\x41\x58\x12\xdb\x08\x8e\xd9\x6a\x77\xdd\xe6\xf2\x12\xc4\x7b\xd3\xb2\x86\xeb\xd6\xab\x9a\xb3\x8f\xba\x91\x5d\xc6\x2c\xe0\x2a\x22\xb2\x95\xcc\x66\x09\xb7\xdb\xbb\xa6\x85\x77\x84\x6f\xa7\x00\xf8\x64\xd8\x39\x86\xa5\xe5\xbb\x03\x0e\x7b\x0f\xc2\x8b\x93\x18\x00\x12\x3e\x4a\x01\x2f\x8a\xbe\x1f\xa8\x57\x91\x59\xe2\x37\xa5\x18\xeb\x36\xaa\xc4\xf1\x9e\xe1\xb8\x63\x39\x85\x3c\x13\x74\x9a\x31\xe3\xe0\x80\x05\xfd\x22\xe8\x61\x72\x4c\x6e\x44\xa1\x71\x1e\xb5\x8a\x54\xa3\x32\xa5\x69\xf1\x36\x2e\xa6\x30\xfc\xaa\x55\x63\x38\x47\x32\x4c\x66\x48\xb2\x1c\x46\xee\x75\x30\x77\x1b\x9c\xe5\xac\x71\x1d\x9c\xc4\x31\xc5\x72\x9c\xa5\x93\xe3\x38\x51\x96\xc3\x24\x8e\x6f\x40\x1f\xf2\x3e\x53\x94\x47\xa0\xec\xe8\x53\x38\xeb\xfa\x82\x61\x32\x53\x12\x6f\x83\x29\x96\xbb\x62\x3a\x0e\x96\x64\xd9\x8f\x82\x1b\xb3\xac\x11\x00\xf3\x08\xf4\xb6\x90\x7a\x0d\x91\x09\xac\xc3\x01\xc0\x0f\x63\x5a\xc1\x72\x07\x8e\x49\x3a\x78\xee\x30\x84\xba\x3d\x33\xb2\x8f\x03\x02\x00\xe0\xb8\x41\xb1\xbc\xa4\xfa\x05\x27\xa8\x94\x91\x75\x79\x2e\x8b\x4e\x80\x85\xbb\x80\x92\xc3\x73\x4c\x57\xba\xc6\x6c\x1d\xd5\x98\x99\x62\x9f\x4b\x92\xa2\x26\xed\x08\x30\xdd\x72\xbc\xaa\x4e\x5d\x03\xce\xfa\x6e\x79\x51\xb5\x28\xcb\x22\x63\x27\x3b\xc5\x65\xe6\x56\x1d\x76\x4d\x52\x70\x00\x3a\x12\x27\x07\x5f\x05\x18\x85\x9d\x99\x2b\x56\x01\x10\x73\xc0\xe1\x5d\xb7\x07\xfd\x11\x88\xe4\x02\x63\xc6\x7c\x19\xf7\x3b\xae\x9f\x4b\x03\x9c\x44\x04\xc0\x70\xf2\x02\x2e\x52\x48\xf9\x3c\x19\x08\x85\x6f\xb1\xa1\xe0\x63\xc6\x71\x4b\x30\xd8\x1c\xf0\x67\x03\x81\xc3\xae\xcd\xf8\x0a\x50\x47\xb7\x9f\x31\x8c\xe8\x63\xf8\x96\xe9\x45\x52\x8d\x18\x7c\x34\x0e\x24\xb2\x98\xcf\xfd\xd9\xa1\xe1\x49\x56\x88\xf4\x98\xf0\xc7\x34\x74\x0e\x00\xa0\x7d\x00\x22\x1f\xf6\x99\x90\xb3\x04\x63\x2e\x9c\xbb\xa9\x48\xb2\xa4\x14\x05\x9c\x42\x2e\x1e\x2a\x4f\x3b\x80\xf9\x60\x0d\x7c\x5c\xa4\x6e\x00\x43\x26\x64\xcc\x6c\x79\xee\xa6\x3c\xf1\x71\x2c\x10\xe3\xcf\x4b\xa8\x38\x78\x58\x05\x8c\xc9\x22\x0e\x82\x83\x89\xb8\x0a\x00\xa2\x21\x74\x0f\x6f\x84\xed\x58\x32\xb5\xa3\xec\x96\x95\x25\xce\x6a\x4e\x48\xfe\x65\x7f\xe6\x97\x1b\x05\x0c\x82\x12\xad\xe6\x6e\xba\x6b\x6c\xaf\xab\x6c\xcb\x4f\xcc\x70\x9f\xcf\x5d\x98\xb3\x2b\xb2\x97\x0d\x88\x41\x8f\xaa\xd2\xb1\x7e\xe4\x99\x6e\x3a\xa3\x8d\xf9\x90\x9d\x6f\x00\x51\x14\x2a\x36\x04\x55\xb7\xa8\x1a\xce\xa0\x73\xd2\xaf\x62\x5c\xad\x0f\xf5\x6c\x0d\x55\xc6\x69\xc3\x47\x3e\xa8\xc0\x56\xc2\x5c\xd4\xe7\xb7\x87\x79\xa5\x4e\x0b\xfc\x60\x60\x97\x8d\x56\x02\xd4\x28\xd8\xac\xd2\x51\x1d\x81\xbc\xd3\x2c\x1c\xf3\x65\xa8\x41\x1d\x7f\x6d\x6e\xa1\xc5\xea\xac\x4e\xf3\x43\x62\x6f\x49\x56\xf5\xa3\x53\x6a\x31\xe8\x86\xb0\x0f\x45\xef\xba\x66\x1e\xd8\xbc\x94\xe0\xce\xa2\xe4\xe2\x48\xe5\xa3\x4b\xbf\x0e\x99\xac\xf1\x17\x2e\xdb\xce\x04\x83\xde\x58\x8b\x8d\x33\x1d\x31\xdc\x7a\x6d\xe1\xac\x4c\xe4\x48\xb9\xc4\x79\x07\x15\xf4\x50\x4b\xa7\xb3\x4e\xea\x3d\x0b\x59\xe1\xd6\x1b\xce\x59\xd0\x6c\xe8\x0a\x37\x5d\x11\xe3\xec\x90\x86\xb5\x5a\x85\xd0\x64\xbd\x88\x89\x2d\xa2\x40\xd3\x3e\x32\x1d\x23\x3d\x4e\xc9\x11\xa0\x55\x0c\x2d\xd4\x2b\xbe\x90\x29\xd4\x76\xda\xaf\xe4\x7d\x21\xce\xf7\xd3\x0c\x00\x4c\xee\x1b\xed\xd8\xad\x56\xac\xbb\xb0\x93\x44\x49\x1a\xd6\x8a\x8e\xab\x05\xbc\xa1\x69\x38\xda\x1a\x5c\x0b\xa4\x43\xde\x9d\x04\x19\x1c\x2e\xf2\x01\x38\xc8\x28\x36\x51\xea\x11\x1d\x86\xd0\x1d\x00\x6c\x2c\x12\x06\xb7\x58\xac\x97\xfb\xd5\x66\xcb\xe2\xe7\x7e\x3e\xcd\x97\x16\xa1\xba\xc8\xea\x28\xb7\xd2\xe5\xb8\x63\x23\x06\x5f\x18\xe6\xec\xbc\x6b\x17\x71\x2e\x04\xa6\x32\xc0\xd5\x94\x48\x52\x6a\xe6\x8e\xd1\x57\x5e\x97\x29\xbf\x54\x09\x9f\xd1\x67\xb3\x63\xb0\x76\x68\xc5\x85\x21\x39\xb1\x7d\x01\xb8\xbd\x73\xd1\x3b\xfe\x9a\x71\x96\x26\x7a\xda\xcb\x27\xd3\x1e\xb8\xd0\x28\xb9\xf9\xb4\x3e\x14\x75\xca\x6b\x3b\xc1\xd3\x85\x2d\x12\x69\xad\x6a\x8c\x5b\xce\x91\x03\x0b\x05\x11\x1e\x2f\x2c\x4a\x12\xe6\xca\x6e\x6b\x1c\x4c\x87\x51\xd1\xd6\xe0\x67\x41\x16\xc8\xf3\x33\x4d\xc5\xe9\x45\x87\x10\x65\xc1\xae\xa2\x6d\x25\x07\x47\x5d\x59\xef\xe1\x85\x36\x45\x71\x68\x7b\x28\xd8\x99\xe8\xea\x61\xb5\x3d\x8c\x06\x96\x1c\xe8\xe2\xc8\xc8\xd8\x81\x09\x53\x9d\x50\xeb\x15\xe3\xb1\x2d\x74\x5a\x08\xf5\x80\xf5\xb9\x32\x98\xa6\x38\xc5\x0d\x32\xa0\x8f\xa7\x62\x3b\xb7\x00\x26\xc6\xe1\x0a\xd9\xb2\xc1\x7e\x9e\xb1\xed\x34\x38\x3a\x20\x07\xec\x35\x77\xd0\x6f\x00\xd7\x5b\xa4\xb4\xc0\x71\xbe\x57\x1d\x80\xa5\x5a\xbd\x5a\xe1\x83\x09\xb0\xe9\xae\xa2\x1d\xcd\x9b\x8a\xf3\x60\x2a\x62\xb3\x2e\x80\xcc\x92\x55\x0e\xbd\x8c\xb9\xcc\x3a\xf1\x15\x0f\xb8\x4a\x25\x0a\x19\xa5\x92\xa9\xbf\xc1\x68\x47\x3b\x04\xfd\x0d\xa0\x2c\x49\x46\xc4\xe9\x26\x7b\x14\x28\xe3\xb0\xd4\xe6\x80\x2c\xc3\x9c\xcd\xc8\xf3\xd1\x07\x48\xc7\x4a\x26\x2d\x93\x7d\xc2\x12\xc9\x9a\x82\xc1\xd2\x27\x8f\x95\xbf\xb0\xe6\x66\x05\x76\x4c\x5d\xf2\xd8\x6a\x7a\x0a\x56\x2a\xb7\x6b\x0d\x7d\xcc\xe8\xdd\xba\x22\x3a\xea\x34\x4b\x06\x63\x90\x67\xd4\x1a\xd9\xcf\x02\x44\xb8\xd4\x88\xb7\x5a\x62\x33\xd1\x95\x61\x19\x54\x62\xe8\xef\x0e\xbc\xe0\xb3\xf2\x86\x95\xf0\x55\x40\x1d\xc1\x32\x52\xab\x1d\xb5\xe7\x88\x85\x03\x16\x8e\x22\xb5\xbe\x3c\xd6\x60\x0f\x0e\x4a\xc5\x9b\x4d\xaf\xa3\xa2\x12\x42\x3c\x2d\xad\x09\x32\x59\xea\x69\x6b\x69\x22\x50\x3a\xa9\x90\xb8\xf3\xa5\x13\x37\x58\x59\x06\x8d\x2f\x21\x80\x53\xaa\x83\xe8\x89\x4e\x54\x02\xc1\x27\x84\xc0\x56\x48\xf9\x52\x1e\xc5\x05\x8c\xdf\x00\x46\xfb\xfc\xe8\xd6\xfa\x59\x5f\xe9\x08\x84\xaa\x67\xef\x88\xaa\x9b\x85\xcf\xb8\x56\x7c\x92\x40\x06\x92\x42\x25\xc3\x2e\x5f\xa0\x01\xee\x3a\x78\x17\xfb\xf3\xd5\xc9\xb1\x4f\x43\x9c\x88\x3c\xf0\x2d\x2c\x0a\x56\xce\xf4\xe4\x10\x3e\x35\x1d\xe5\xf0\xd4\x11\xc7\xd3\xe0\xf9\xbb\x83\xb3\x33\xd8\x0a\x00\x56\x04\xa5\x72\x3c\xa7\x01\xd4\x1c\xb7\x17\xb4\x9d\xd1\x11\x9a\x6b\x4b\x08\xad\x17\x65\xa3\xaf\x67\xa7\x65\x5e\x9e\x6c\x1e\x11\x51\x7d\xaf\x5d\x36\x6b\xac\x53\x6b\x1b\xef\x02\x2a\x18\xe3\x43\xbd\x39\x78\xed\x52\xf0\xa0\xb9\x69\x51\xa2\xea\xf8\x5c\xa9\x55\x73\xd7\x3b\x0d\xc1\x4c\x01\x04\x98\x11\x64\xb0\xb0\x51\x2d\x26\x2c\x12\xef\x16\xf6\xd4\x3e\x9c\x22\x2e\xab\xd0\x9a\x01\x8d\x87\xb6\xac\x29\x84\x01\xea\x5b\x68\xbc\x1c\xad\x0d\x7a\x90\x4f\x4c\x54\xee\x5a\xf8\x00\xe4\xf5\xf2\x70\x70\x77\x2b\x7f\x9d\x39\x08\x57\x7b\x7b\x8a\xe3\x06\x4e\xf2\x02\xa1\x45\x7c\x36\xa3\x76\xd8\xe1\x98\x58\xc7\xf6\x80\x89\xcc\xce\x67\xb3\x14\xb6\x6d\x1d\xab\x86\xd2\x30\x0d\xa3\x23\x57\x63\x7a\x1b\x23\xe7\x69\xab\xb8\xea\x4a\xcb\x23\x64\xb6\x0b\x55\x58\xb4\xce\x87\xe8\xd2\x01\x40\x17\xb6\x8a\xc3\x90\x51\x19\x82\x6b\xcf\xbd\x25\x26\xe4\x2b\x12\x76\xf0\x10\x9e\x83\x0c\x52\x7c\x62\x6d\x6a\x80\x0f\xdd\x65\x00\x81\x35\xe3\x61\x37\x80\xfb\x28\x5f\x42\x7d\x05\x00\x6e\x92\x3b\xd2\x60\xa2\xe9\xa5\x65\x96\xe2\x30\xdb\xef\x97\x31\x73\xaa\x31\x68\xc9\xf0\xfa\x59\x67\xf7\x42\x71\x50\x78\xcf\x05\xc9\xc5\x3a\x2f\xc9\x0a\x16\xb1\x28\x66\xf3\x50\xd6\x75\x3a\x15\x11\x3c\x33\xc6\xf6\xc7\x56\x07\x49\x3d\x85\xfd\x9d\x88\x51\x1c\x8e\xa5\x39\x22\xaa\xaa\x68\x42\xb3\x3a\xa8\x4d\x02\x63\xd5\x9c\xd2\x8d\x35\x32\xa0\xf3\xcc\xc9\x4a\x6c\x89\x64\xc7\x55\x81\x2d\x2e\x70\x76\x00\x2d\x74\xca\x7a\x1a\x59\x74\x5a\xe2\x33\xf4\x69\x34\x5f\x3d\x25\x94\xeb\xd8\x33\x1d\xac\x98\x71\x3d\x6a\xb6\x78\xb1\xc1\x7c\x6b\x89\x6e\x40\xdf\xd0\xcd\x61\xbf\x83\x56\x33\x03\xa7\xe6\xe4\xa5\x63\xf3\x82\xa6\xc0\x71\x79\xa4\xe0\xea\xac\xd9\x0d\xd8\xa7\x6d\xeb\xee\x9c\xb2\x39\x19\x9d\xc0\x8f\x45\x8c\x90\xb0\x96\x21\x98\x2f\xd7\xc0\x00\x00\x5b\x26\x7b\x8c\x3f\x3a\xbe\x42\xac\x69\x59\x2a\xd8\x79\xdb\xad\xf1\x33\x88\x71\xf2\x00\x70\x20\xc7\x47\x08\x1c\xba\x83\xc0\x72\xf1\xa6\xbf\xba\xd1\x43\x92\x7a\x2d\xe2\xe9\x39\x8a\x1e\xfd\xd1\xd1\x77\x28\xd1\x9e\x86\x65\x72\xd9\x46\x68\x76\x39\xac\x0d\x85\xab\x70\xa1\x1d\x80\x0f\x76\x62\x08\x67\x33\x67\xb9\x1f\x2a\x44\x40\x0e\x3e\x12\xcc\x01\xce\xb0\xc0\x07\xdb\x03\x6c\xed\xd3\x45\x0f\x63\x84\xaf\x9d\xe8\x55\x83\x28\xf5\xe5\x34\x3a\x7a\x47\x62\x1a\x03\x5c\xc4\x00\xa3\xa0\xb8\x95\x25\x50\xd7\x3e\x58\x2a\x07\x5b\x37\xc1\xc6\xb7\xd4\xd2\xd4\x81\x4a\x02\x30\x25\xfa\xf9\x4a\x44\xa1\x72\xbd\xa2\x7b\x55\x2d\xcc\x04\x83\xb1\x44\x6d\xf8\x38\x3b\x53\x67\xba\x9e\xf9\xc4\xd8\x5c\x48\xd3\xb6\x39\xae\x79\x26\xa9\xce\x72\xb1\xd0\xa3\x41\x1e\xb6\xf2\x12\x11\x48\x26\x16\x9a\x93\xae\x7b\x43\xaf\xe7\xed\x92\xc2\x7c\xc2\x67\xb5\xb8\x3e\x1d\x29\xa3\xde\x03\x90\x16\x2a\xdc\x8b\x19\x01\x1b\xbb\xf0\x98\x2d\x1c\x6a\x21\x8e\xc9\xe3\x1c\x4f\x8d\x59\x8d\xed\x40\x64\xe2\x02\xc0\x40\x60\x47\x10\xe0\xa7\x10\xe8\x64\x1c\x77\x63\x1d\x00\xc0\x3b\xd4\x59\x5e\x65\x9d\xbd\xde\x6a\xc4\xd0\x7a\x44\x68\xb6\x43\x6a\xd7\x48\x4d\xcd\xed\xdd\x22\x73\xf7\x33\x83\x8b\xd7\x6b\x65\x4c\xcd\x48\x80\xe1\x66\xdb\x9c\x8a\x8d\x81\x2b\x58\xcd\x77\x1a\x10\x55\x12\x74\xdb\x7a\x1f\xd7\x83\x6c\xd1\x2d\x20\x0c\x1c\x55\xfa\x9d\x76\x2e\x42\x09\x4c\x05\x13\xf0\xc1\xe0\x14\xa4\x2f\x39\x40\xe8\x32\xdc\x6f\x5d\xa5\xaf\x14\x7a\x37\x26\x8f\x24\xb5\x9c\x66\x82\x8d\x4c\x0f\x80\x59\x3b\xe1\x41\x74\x8e\xfe\x2a\x17\x8c\xe9\xee\xdc\x8b\x72\x8b\x9c\xce\x09\xd5\x9c\xd1\xb9\xbf\xed\x06\x74\x06\x43\xf6\x96\x5b\x0e\x68\xef\x2b\xeb\xf5\xca\xcb\x12\x5d\xdd\x91\x16\xe1\xc2\xf3\x8e\xf6\xc6\xbe\x9e\xd1\xbb\x67\xc7\xd7\x10\xb9\x6f\xe5\x2e\x85\xb5\xcc\x3c\xb2\x52\x11\x49\xf8\x02\xc8\x22\x94\x34\x5a\x06\xd4\xea\xb8\x02\x3e\x10\x79\x6c\x6f\x69\x1d\x00\x31\xc0\xa4\x5e\x81\x66\x87\xe4\x54\xec\x0a\x59\xda\x13\x76\x70\xb4\xe1\x51\x97\x6d\xaf\xcc\x31\xd4\xde\xcc\xcf\x79\xa3\x93\xe6\x19\xc3\x09\x44\x70\xdc\x23\x95\xe3\x1c\xe9\xe3\xc4\xc9\xa1\x0e\x7c\xb7\x06\x00\x10\x6a\xa7\xcc\xe3\x54\x4d\x16\x70\x9c\x74\x65\xce\xf3\xc1\x41\x64\xb8\xf3\xb2\x81\xc9\xf5\xa9\x44\xda\x31\x93\xc2\x52\x9f\xdf\xbb\x4c\x5c\x9a\x55\xe8\x9f\xad\x20\x3e\x37\xee\x12\x50\x9a\x3f\xad\x87\x63\xa7\xa6\xc7\x1d\xaa\xb0\xbb\xdc\x3a\x5b\x3a\x07\xe6\xda\xad\xd1\x1e\x52\xa7\x82\xf5\x39\x60\xc2\xeb\x63\x59\xcb\xa8\xdb\xd7\xe2\xde\x70\xc6\x70\xee\xd0\x1a\xe4\x76\x8d\xc7\x6d\x29\x4a\xac\x8f\x79\x79\xd0\xa5\x7b\x9d\x3d\xd7\xdb\x22\xc9\x97\x1a\x79\x90\x5b\xcc\x5b\x91\x58\xa8\xa2\x85\xcf\xda\x22\xe8\x88\xf9\xce\x5b\xef\x00\x4f\xf0\x01\x6d\xef\x01\x00\xb1\xcf\x4d\x6b\xaa\x5a\x8c\xf6\x70\x6a\x5c\x58\x67\x73\xc1\x53\xd6\x42\xcb\x7e\x77\x68\xe2\x6d\xda\x77\xd5\x51\xdb\x50\x55\x84\x44\xf3\x43\x58\xe1\x80\xc6\xd7\x54\xd4\xd9\x5b\x72\xe3\xb3\xb7\x2a\x49\x7a\x89\xaa\x33\x8c\xbb\x14\x6f\xee\x76\x7e\x36\xac\xf9\x29\xf5\xd0\x5f\x0e\x3b\x03\xf3\x99\x7e\x3a\xd0\x21\x8e\x01\x0e\xc4\x18\xb7\xcf\xa9\x59\x25\x6c\xd8\x5c\x73\x2e\x64\xb8\xb1\xca\xd9\xc2\x88\x69\xbf\x6c\xea\xc5\xe9\xc0\xa6\x91\xcb\x2e\x5b\xb2\x33\x0f\x17\x40\x8b\x18\x43\x12\x6a\x19\xf3\x0e\x06\xc0\x58\x90\x44\x38\x20\xc3\x62\x31\x65\x3b\xa9\x22\xe7\x80\x35\x6b\x3e\x05\xc4\x72\x9b\x0a\x46\x67\xc4\x02\x63\xb6\xf5\xa0\xee\xdd\x73\xe9\x61\xab\x53\xc8\x47\x3a\x03\xe3\x09\x86\x2d\x01\x03\x38\x07\x5d\x83\x4d\x56\x91\x54\xac\xc8\x5b\x12\x1f\x0d\xec\xd4\xb1\x3d\x89\xc0\x61\x4b\xca\x77\x74\xb1\x3f\xe4\xb1\xc3\x41\xab\xe5\xae\x4f\x91\x32\x4f\x8a\xcb\xb1\x32\x58\x5d\x0a\x21\x4a\xbc\xb5\x86\xc5\x68\xc3\xe3\x40\x08\xed\x52\xc4\x44\x40\xe0\x44\x55\xe4\x59\x76\x68\x6a\x77\x0a\x8f\x19\x3d\xee\x6d\xfc\x65\x48\xba\xa1\x71\xf4\xb5\x44\x04\xcc\x7c\x3a\xef\xaa\x88\xc4\xc8\x10\x8b\xb3\xbd\xb8\xe4\x42\x18\xe2\x14\x11\x16\xcf\xfa\xe9\xdc\x0f\xe1\x14\x78\xcd\x91\xcb\xf8\x33\xa9\x9d\x44\xc1\x1c\x4a\xf8\xb2\x99\xcf\x8a\x9d\xcf\x23\x0f\xaa\xd7\xb7\xb6\x29\x14\x4e\x6f\x2e\xd9\x65\x54\xc6\xe5\x79\x7e\x41\xce\x1b\xe0\xfa\x1c\xd1\x2f\xb7\x29\x5b\x69\xbb\xc0\x76\xe6\x48\x53\x2c\xd6\xf3\x69\xd6\xc8\xee\x1e\xcb\x33\x3c\xc4\x35\xba\x1c\xa6\xfa\xa0\x02\x88\x20\x6a\x62\x0d\x94\x87\xee\x2d\x1a\xc0\x31\x8f\x03\x30\x38\x54\x3b\x95\xa7\x27\x59\xde\x47\x9e\xa1\xc7\x4a\x6e\xa3\xf3\xe4\x84\x48\xa7\xa4\x28\x58\x8f\xf7\xa2\x38\xa0\xc1\xa9\x59\x69\x19\x20\x01\xee\x03\x90\x73\x52\x54\xef\xa6\x5c\x24\x12\x3a\xdf\x19\x63\xe4\xa0\xde\xce\x7b\xe0\x5c\x95\xaf\xe1\x3e\xc8\x37\x33\xf5\x5c\x88\x58\x87\xf6\xf3\x85\xe3\xd5\x45\x74\x16\xc9\x4b\x83\x6e\x37\xd8\x72\x3f\x95\x96\x0b\x58\x2d\xd6\x82\x16\xfa\xab\x4e\x48\x96\x7a\x93\xc2\x9e\x35\x8f\x39\xe2\x90\x59\x36\x5b\xdd\x00\x2e\xad\x5d\xe1\xdb\xc1\x61\xc8\xdb\x39\x27\xcd\x43\x81\x08\xe3\x6e\xbd\x36\x73\x63\x55\xcc\x18\x81\x77\x6c\x20\x03\x01\x68\x75\xe2\xe0\x69\x66\x3b\x65\xb4\x9d\x73\x5b\x79\x05\x99\x69\x15\x69\xba\xb4\xa7\x36\x2c\x2c\xa9\x34\x27\xa4\x23\x97\x2f\x97\x8d\x0e\xd6\x44\xbb\xdc\x5d\x93\x31\x89\xc7\x45\x15\xcc\xb7\x65\x58\x9f\x34\x1e\x89\x1d\xf3\x44\xa3\x22\xaa\x40\xad\x39\x5f\xb1\x88\x41\x07\x4e\x82\x59\xc3\xf9\xe4\x5e\x1a\x0d\x59\xf8\x3b\x30\x94\x0e\xec\x8c\xd9\xd4\xd8\x5f\xc6\x83\xe5\xc1\xbd\x3e\xd8\x5e\xf4\x33\xa5\xcf\x2f\xb2\x73\xb6\x74\x0b\x49\xb6\x4e\x76\xa2\x7b\xbd\xf7\x3a\x0e\xec\xfc\x58\xc7\xf2\x9d\xda\x76\x5d\x34\x55\x85\x60\xe1\xed\xb7\x17\x55\xa8\x66\x10\x49\x4d\x73\xb3\x9c\x36\xee\x42\x18\xc6\xf4\x76\xdb\x19\x2e\x00\x98\x8f\xe4\x0b\x64\x17\xca\x3e\x30\x20\x53\x8b\x85\x24\x8c\x49\x9f\x4e\x97\x5b\x54\x70\x3a\xe3\x3c\x30\xab\x56\x38\xcf\xea\x65\x5f\xf5\x73\x19\x8d\x31\x63\xb3\x24\x55\x11\xa3\x96\x80\xc1\x40\x72\x30\xe8\xf9\x21\x1b\xad\x8d\x81\x67\x2c\x00\x84\xee\x4d\x05\x93\x35\xc3\x15\xd4\xaf\x96\xd0\x85\x5e\xed\x86\xd3\x86\x5f\x1c\x07\x89\x4b\xa9\x43\xd2\x7a\x7c\x15\xc6\x22\xdd\x69\x0f\x67\x1f\xd0\x9d\x48\xac\x0f\xf8\x35\xa7\x24\x7c\x0b\x16\x9b\x33\xb6\x7b\x70\xa3\x83\xc7\xce\xad\xa5\x09\x91\x92\x86\x01\x35\x06\x24\x51\xb4\x19\xbf\xc2\x44\x0c\x34\xc0\x6f\x06\xaa\x60\x76\x75\x72\xa6\x51\xce\x9d\x77\x27\x2e\xb3\x53\x21\x00\xe8\xb0\x5e\x14\x7a\x26\x1d\x92\x4d\xd0\x65\x02\x9d\x11\x00\xc4\xa3\xd8\xd8\x1d\x01\xc0\x62\x49\xd1\xa0\x39\x9e\x62\x3a\x43\x4f\x1e\x52\xd7\xdb\xcd\x51\x25\x3c\xb0\x31\x12\x03\xc7\x44\x38\x3b\x94\xd0\x4c\xc4\xd7\x4c\xdb\xe0\x57\x7a\xe7\xb6\x0a\x44\x9c\x43\x10\x3e\x21\x51\x61\xb5\xd6\x80\x4d\x8b\xca\xd8\xf1\x39\x30\x87\x7d\xa6\x6c\x86\xbd\x83\xc6\x88\xe0\xad\x14\xa0\xed\xc0\x1e\x6b\x4e\xca\x9a\xbf\x9d\xee\xd8\x0e\xca\xfc\x20\xaf\xaf\x9f\x33\x72\xb7\xa5\x6d\xa4\xb1\xf0\xae\x23\xdb\x19\xa9\x07\x54\x19\xaa\x91\x0d\x2c\x60\x22\x2b\xe8\x34\x36\xb9\xcc\x54\x31\x8f\xb6\x3e\xa0\x58\xa7\xe7\x67\xd5\xe2\x4d\x4e\x3a\xaf\x5c\x13\x66\x21\xc8\x57\x3d\xc5\xcd\x35\xb2\x03\xc0\x14\xa8\x6a\xdf\x73\xe0\x2c\xca\x3e\x98\x02\xec\x90\x19\x6b\xf6\xbc\xb8\x20\xdd\xd9\x5b\xcf\xce\xd5\xd1\x81\xc6\xca\x92\x22\x88\xba\x42\x18\x26\x96\x80\x68\x4f\x84\x85\xd6\x35\x00\xd9\xb3\x9b\x2b\x46\x24\xc6\x81\x7a\xa3\x95\xd5\xa9\x82\x90\xfd\x6c\xc3\x0b\x9b\x99\xbc\x29\xdd\x35\x49\x2b\x26\x9d\x0e\xf8\x82\x37\x92\x93\x48\x02\xfc\x02\x51\x98\xf3\x50\x32\x05\x04\x58\x38\x73\x3f\x9c\x0f\x6b\x09\xec\x2b\x28\x59\x52\xfb\xa3\x96\x6d\x08\x6d\xbe\x64\xb7\x33\x0c\x23\x9a\xa8\x88\x3b\x48\xb3\x16\xdb\x95\x68\x37\x5b\x4d\x66\xa6\x88\x65\x5a\xd9\xee\xc8\x96\xae\x76\x46\x86\x18\xdf\x98\x0b\x91\x7c\x68\x14\x52\x03\xb4\x10\x07\x5f\x33\x47\x71\x87\xb2\xa3\xd3\x5f\xf0\xa5\x7e\x52\x9a\x29\xbc\xd1\x3c\xc8\x59\x2d\x97\xec\x5c\x53\xc0\x56\xa5\x12\xb0\x98\x4d\x35\xb0\xe7\x42\x48\x3c\x64\x87\xce\xf0\x0d\x10\x81\xd5\x6c\x21\xd0\x73\x19\x1e\xbb\x15\x0b\x8e\xa0\xdb\xf3\x66\xc3\xf3\xc5\x5a\x39\x50\x0e\x5a\x66\x9c\x99\x6e\x85\x4c\x99\xd9\x09\x13\x68\xbe\xb3\x3a\x02\x7e\x3c\x2c\xc6\x03\x7d\xa6\xd9\x62\x87\xfa\x56\x3e\x08\x39\xeb\x4e\x39\x17\x39\x39\xf3\x50\x16\x96\xc8\x69\xec\xf8\xb4\x9b\x69\x92\xb5\x4d\x38\xeb\xd4\xfd\x01\x9c\xe1\xc5\x66\x8f\x0a\x5a\x3f\x44\x73\x5f\x5b\xa1\x87\x84\x5c\x53\x0c\x40\xa8\x45\x22\x15\xe8\x8a\x6c\x9d\xd5\xb2\xdd\x1d\x4f\xd4\xbc\x24\x16\x2a\xcb\x82\x6e\xbe\x0c\xf4\xe5\xce\xc4\xed\x45\x35\xb6\x32\x77\x6e\x3f\x8d\x86\xab\x3d\xc4\xa6\xc1\xe9\xb2\x59\x4c\x37\xcb\x85\x89\xef\x0e\x2b\x0c\x85\xb4\x58\xa1\xf1\x96\x20\xb9\x5a\x0c\x94\x64\xce\x85\xb8\x0f\x48\x60\x97\x27\x5b\x57\x0e\x55\x75\x45\xfa\x98\x7b\xde\xac\xd6\xca\x6c\x30\x46\xe3\x90\xce\x67\x1d\x31\xb3\x3c\xa3\x8e\xb8\x53\xd5\xed\x17\x90\x7c\x3c\x08\x30\x4b\xa4\x81\x00\xcd\x63\x4b\xcd\xca\xba\x85\xaa\xf9\x0c\x39\x5d\x6c\x0f\x4a\x85\xbd\x9b\x3a\x19\x4e\xa7\x98\x16\x87\x0d\x8c\x8b\x5b\x4c\x8f\x0f\x06\xb4\xe0\xba\xd1\x38\x24\xc8\x0e\x8a\xca\xe6\xc0\x2f\xc5\x55\x36\xcc\xeb\x96\x10\x2f\x53\xdb\x44\xe9\x41\x08\xa7\xfe\x9e\x06\x73\xc2\x24\x7d\xf0\xe1\x36\xf8\xcd\x4f\x3f\x3f\xfe\x38\xf3\x9d\x93\x7f\x61\x62\xf9\x5e\x05\x85\x4e\x96\xfe\xb2\x59\xbe\x79\x37\x79\x73\x7b\x02\xe5\xe9\xe7\xa7\xff\x42\x0d\x13\xa4\x0e\xe6\xb6\x7e\x76\xdd\xe1\x5e\x56\x03\x52\xf5\xaf\x1a\x74\x3b\x6a\xe4\xe3\xd7\xd8\x1c\x10\x61\x42\x3b\xf3\xdb\x93\xad\x8b\x29\xd7\x90\x77\xb7\x3d\xe0\x50\x1f\xdc\x8e\x89\x00\x6a\x50\x23\x77\xd4\x75\xc0\xad\x04\x5a\x88\xae\x4f\x7d\x03\x0e\x64\x45\x04\xc0\x0b\x0d\x00\x18\x9c\x04\x80\x58\xde\x5e\x08\x3e\x00\xb4\xda\x01\x40\x14\x57\xf0\x42\xee\x03\x80\xb9\x5d\xba\xcb\xa5\xc3\x4d\x3c\xcc\x50\x86\xdd\xb1\x02\x0a\x0e\x6b\x00\x75\x04\x94\xed\x90\x34\xba\x89\x6a\xdc\xc9\x54\x3c\x00\x00\x1a\xa6\x03\x60\x17\xf2\x98\xc7\xa9\x90\xeb\x03\x40\x71\x01\x2b\x91\x94\xea\xed\xcb\xfa\x78\x8c\xab\x23\xef\x2e\x20\x14\x1e\xd6\xcb\xf9\xa6\x21\x86\x11\x60\xd2\x4b\x54\x68\x33\x95\x70\x34\xd7\x1a\x93\x2a\x2c\x65\xc8\x3a\x6a\x39\x35\x39\x73\x6a\x3d\x72\x6a\x92\x5a\x32\xb0\x26\x51\xa4\x0e\xb2\x30\x10\x33\x70\x16\xa9\x24\xc4\x32\x5f\xb7\x18\x12\x10\x14\x9e\x88\xc7\x28\xae\x33\x78\x3e\xba\x59\x01\x4e\x5d\x9d\x99\xdb\xbd\x69\xc5\x3a\xcd\x86\xa9\x62\xd4\x91\xc4\x52\x91\x53\x0f\xf1\x66\x70\x37\xab\xd5\x74\xed\xcc\x37\x53\xf5\xdc\x84\xb9\x8d\x13\xb3\xcb\x74\x33\xb5\xbc\xd5\xa2\x6d\x13\x36\x6e\x51\x5f\x40\x0c\xa9\xb9\xfd\x37\x5a\xf4\xeb\x3f\xd4\x06\xd4\x65\x86\xed\xd1\xf4\xe4\x71\x95\x25\x1f\xf5\xa6\xb4\xca\x56\x6a\xd5\x52\x49\x63\xc7\xd1\xa0\x85\x85\xc6\x84\xe4\x49\x1c\xe5\x3a\x73\xd3\x5a\xa6\x43\xab\x23\xf6\x4a\x60\xf2\xce\x0c\x56\x7b\x74\x15\xd2\xc6\x98\xa0\x1f\x86\xfa\xd2\x5e\xe6\x61\x01\x60\x58\x49\x7d\x48\x3f\xd2\xb3\x13\xba\x15\x2b\x2a\x0a\x61\xd1\x1e\xa6\x0e\xd0\x66\xc8\xd9\x93\x22\xa5\xeb\x54\x17\xb9\x9c\x2a\x8d\x59\x6f\x84\xb3\xbd\x2b\xbb\x34\x63\x99\x5d\xb7\x26\x33\x20\x30\x80\xf2\x47\x4d\xea\x08\x05\xef\x1d\xc0\x62\x24\xcb\x84\x0c\xf0\xb3\x90\xc1\x01\xe3\x33\x3e\x83\xb1\xdb\xdc\x3d\x48\xb8\x54\xa0\xd5\x01\xc7\x00\x0b\xc2\x70\x2d\xfa\x20\x82\x0e\x0c\x15\xc9\x18\x26\xb6\x01\x2a\x4a\x91\x78\xac\x49\x1c\xe3\xf2\xb1\x0c\x43\x6f\xec\x72\x11\xf0\x61\x14\x38\xfe\x5c\xd4\xe6\xae\x11\xf9\x40\xa2\x30\x39\x4a\x62\x35\x49\xf3\xd5\x2e\xd9\x1d\xd7\x65\xbc\x2e\x36\x0b\xe1\xc0\xb1\x30\x21\xe2\xd1\xc1\x53\x48\x47\x2c\x01\x31\x5b\x6d\xa6\xab\xe9\x6a\x57\x1d\xd0\xb6\x1e\x8d\x47\xb7\x01\x33\xb3\xb5\x3b\xea\x24\xf2\x50\x39\x83\xc0\x85\x58\xce\xb9\x1d\xd6\x2e\x58\x9a\xb1\x98\x8e\xc9\x99\xc5\x96\xb1\xbd\xd6\x5d\x23\x25\xcc\xa0\x02\x7f\x6e\xd9\x93\x90\x2d\x4e\x27\xbc\xe8\x66\x64\xc0\x48\xb1\x28\x86\xa8\x85\xae\xc6\x18\x1c\xb6\xea\x93\xa2\x61\x08\x72\x08\x98\x86\xae\x37\x8b\x3a\x4d\xb1\x72\xb5\x18\xe8\x3d\x04\xb6\x40\xce\x8c\xf3\xa5\xd7\x34\x05\x17\xf0\xc3\x49\xd0\xf7\x9b\x6a\x7b\x6a\xbc\xa9\x7b\x82\x76\xf3\x12\x1d\xd6\xbc\xbc\x55\x85\x16\xb5\x74\x83\x18\x7b\x05\xc5\x1c\xc5\xc8\xe3\x91\x14\xa5\x03\x2e\x72\x8b\x82\x8a\x3d\x8a\x77\xdd\x46\xe8\x78\x0d\xd5\x39\x15\x3b\x52\xda\x45\x3b\x06\x75\x82\x9e\xcb\x73\xdd\x76\x33\xb4\x6d\x76\xb3\xe6\x70\xdc\x02\xa0\xfa\x41\xb4\x8d\x77\x87\x23\xbb\x31\x5b\x73\x8c\xc1\x77\x2b\x74\x9d\x0d\x6b\xba\x12\x02\x8a\x42\x1a\xd4\xa2\x61\x72\xcd\x92\x2d\xd0\x03\x6f\x9a\x22\x07\x9a\x58\xc1\xe6\x0a\xea\x13\xc7\x39\xed\x30\x99\xdb\xf0\xb3\xf4\x08\x83\x22\x35\x28\x99\x0b\xb1\xd5\x89\x09\x85\xc1\x47\x23\x64\x86\x8d\x99\x96\x41\xeb\x33\x9f\x8f\xca\x19\x44\x60\xd8\x74\x49\x47\xdb\x9d\xd2\x27\xd2\xc9\xee\x4f\x9b\x69\xe1\x40\x6b\xbd\x1a\xf8\x4d\x3c\x50\x9b\xcd\x7c\xb9\xae\xbb\xde\xc4\x41\xb1\xe8\x6c\x31\xe4\x71\x89\xd4\x0f\x58\x44\x1c\x5d\x0f\xf5\x98\xf9\x7a\xf4\xdb\xd3\xc0\x83\xa6\xb3\x06\xf2\x6a\xc8\x41\x01\x37\x85\x1a\x79\xb8\xec\x94\xd6\xe7\x56\x65\x32\xad\x31\x72\x8e\x9b\x60\x46\x4b\x16\xa5\xac\xb2\x62\x2f\x72\x38\xee\x56\x05\x96\x2f\x67\x5b\x62\xe3\xd1\x18\xb1\x5a\x1d\x9b\x94\x9d\x2d\x33\x68\x2c\x58\x2e\x8b\x29\xe4\xec\x58\x63\x77\x40\x4e\xc1\x70\xda\x6e\x23\xc9\x08\x3b\x4c\xe2\x90\x53\xba\x83\xd0\x50\x1a\x56\x50\xa3\x40\xeb\xf4\xd4\x34\x03\xa2\xf4\xb1\xb5\x9e\x06\x47\xc9\x66\x97\xa2\xca\x61\xd6\xae\x61\x13\x5f\xdb\xb1\x12\xd7\xc8\x63\x23\x31\x66\xb0\xdc\xaa\x43\x92\x02\x39\xc0\x19\x8a\xa6\xa1\x18\x40\xd0\x9e\x3e\xa3\x68\xe1\xc1\xde\xa1\x15\xd9\x23\x69\x41\x6c\x4a\x93\x4c\x06\x30\xc3\xdd\x20\x0b\x68\x10\x0e\xa7\x29\x7b\xc6\x7a\x9e\xc5\x21\xe8\xd2\x1f\xa7\x5b\xc3\x32\x47\x4d\xd9\x02\xb3\xf2\x60\xb8\xf1\x66\x0d\x76\xb9\xe8\xbc\x58\x6e\xc9\xd8\xd5\x34\x0e\xd7\x6d\xd1\x07\x60\x29\xa4\x9e\x2f\x1e\x56\x9b\xcd\x6a\x68\xad\x03\x8d\xf8\xdb\x8a\xc9\xc5\xd0\xd5\x9b\x4c\xea\x00\x94\x21\x90\x4d\x0c\x2b\x38\x3b\x9d\xc6\x2d\xa7\x14\x63\x41\x27\x67\x18\x90\x43\x81\x04\x83\x6c\x4b\x51\xb5\xc3\xfb\x6a\xaf\xcc\x51\x8c\x59\x9d\x0d\x5c\x87\xc2\xc0\x85\x1c\x8c\xd3\x4d\xc5\x0c\x44\x87\xd2\x36\x05\x7f\x16\x61\x3f\x21\xbb\x64\x1e\x44\x45\x25\x68\xe4\x99\xc8\xfc\xb1\xbe\x88\xae\x6c\xe1\xdc\x5a\x64\x8c\x71\xbb\x70\x48\x0c\xcd\xe7\x74\x53\x87\x67\xf4\xd9\x13\x76\x5b\x0b\xd8\x6a\x98\x67\xac\xa2\xd3\x80\xeb\xac\x39\x67\xe4\x09\x8d\xb3\x2a\x06\xc7\x22\x9e\xa9\x70\xe5\x70\xb0\x8f\xf3\xac\x24\x17\x85\x30\xf6\x0a\x68\x2f\x86\xc9\xc2\xcc\x99\x9c\x62\x6c\x42\xf5\xf6\x5d\x27\xf0\xc8\x65\xe5\x0b\x73\x37\xd5\x83\x52\x1e\x34\x0a\x23\xc8\x81\xcf\x23\x75\xb7\xe7\xe1\x39\xc6\xf8\x54\x25\xcf\x7c\xbf\xdf\xab\x03\xa7\xc9\x21\x2e\x55\x24\x46\xaa\x64\xf6\xd0\x1e\x91\x0a\xa4\x5d\xd0\xfb\xe3\x99\x77\x67\xeb\x5c\xa6\x35\xcf\x4c\x9b\x26\x0d\x4d\x2b\xcb\x19\x46\xc4\x00\x13\xa4\x6a\xe1\xb7\xf6\xac\x56\x51\x01\xe3\xa8\x50\xc7\x5d\xfe\xe2\x02\x4c\xc7\xe8\xa9\xcd\x64\x78\x0b\x50\x69\xaf\x6e\xb8\x31\xc2\x25\x84\xd0\x0a\xb6\xc8\x11\x00\x30\x54\x83\x30\xdf\xd3\x91\xc9\xec\x1d\x0e\xec\x1a\xd7\x95\xe8\x10\xd5\x74\x4a\xf2\x76\x8e\x7e\x59\xbb\x41\x2f\x2c\x2c\x2a\x6f\xa3\xc0\x4a\x88\x05\x4d\x75\xa2\xd8\xc8\xb5\xdf\xed\x0e\x79\x25\x0c\xd6\x78\xe6\x7d\xb1\x25\xa0\x0b\x31\xe7\x89\x0e\x39\x6b\x78\x89\xf3\xb4\x1c\xa9\x5d\xd2\x55\x68\x84\xf3\x80\x20\xe0\x2d\x6e\xe6\xa1\x15\xf3\x5b\xd4\x0e\xad\x79\x5d\x6a\x15\x3b\xed\x23\x16\x70\xb2\x2a\xd7\x3c\x9c\xe9\x95\x2c\x96\xbe\xb2\x75\x1f\x5c\x00\x7f\x8c\x63\x32\xf1\x06\x0a\xa2\xa5\x60\x98\xe2\x73\x7b\x19\x5c\x48\xbf\x4c\x2f\x67\x6d\xb7\x1b\x02\x27\xc8\x66\x21\x55\x11\xe1\x36\x4b\x84\xa1\x9e\x12\x15\xb4\x1e\x56\x07\x66\x48\x4e\x12\xba\xf1\x0e\x33\x57\xd3\x64\x81\x0c\xcf\x12\x3c\x9e\x5c\x93\x2a\xaa\xf4\x67\x8c\x9c\x27\x51\x26\x6e\x1c\xa5\x39\xf5\x5c\x89\xd9\x74\x92\xa9\x19\x6b\xea\x49\x7c\x20\x8e\x92\xe9\xbb\x3c\xb1\xaf\xfa\x35\xdd\x1c\xed\xba\x47\x87\xb6\x0d\x24\x91\x53\x5c\x2a\xd9\x89\x00\xcf\x14\xc4\xed\x8c\xcd\x68\x1c\x4e\x92\x1e\xb7\x60\x96\xcc\x7a\xf6\x82\x30\xa4\xef\x47\x87\x32\x55\xdb\x23\xb6\xe1\xe1\x78\x1b\x59\xa1\xd6\x4f\x7b\x09\x02\x84\xd8\x1c\x24\x11\xe4\xb9\x65\xc0\xec\x69\x10\x30\x0c\x3e\x67\x14\xa8\xe6\xc2\xc5\x5e\x6c\x48\xd8\x58\xe5\x23\x97\xe7\x04\x41\xb8\x49\x37\x5f\xed\xfc\x8b\x2f\xd2\xb6\x5d\xad\x98\xf3\x9c\xcd\xb7\x3c\xd3\x9d\xb7\x12\xe5\x50\x70\x4f\xb1\x0e\xe1\x92\x70\xae\xda\xa8\x21\xce\x02\x43\xaf\x08\x4a\xee\x4f\xa7\x55\xeb\xd3\xfc\x45\x40\xa3\x88\xdf\x86\x16\x18\x9b\x0f\x83\xec\x80\x6e\xc0\x60\x43\x8b\x13\xd0\xd0\x19\x3a\x88\x74\xc4\x59\x6a\x9e\x2b\x34\x50\x45\x6c\x27\xa6\xc0\x48\xe6\xec\x7c\x76\xf2\xf0\xd8\x05\x5b\x8f\xf6\x10\xca\xc2\x8b\xcd\xc9\x3d\x8a\xfc\x61\x5d\xd4\x8b\x0a\x5b\x0a\xf1\xd6\x1e\x01\xce\xf3\x08\xeb\x06\xcc\xdf\xd2\x19\xc7\xbb\x0e\xb3\x5d\x23\x64\x07\x4b\xdc\x52\x2d\x94\x9e\x06\x2c\x49\xcb\x18\xbe\x4b\x34\x1a\xb7\xda\x63\xa7\x3a\xdd\x36\x3f\xf2\x2c\x23\x23\x46\xaa\x05\x65\x01\xcf\x1c\x20\x88\x7d\x84\xaf\x0c\x7e\x4c\xdd\x16\xe1\xb2\xed\xc2\xe5\x62\xa7\xcd\xeb\x92\xe1\x66\xf0\x96\xbd\xd0\xbb\x36\x57\x14\x09\x26\x4c\x33\x66\x6b\x92\xe4\x7b\x69\xca\x68\x2c\xab\xc8\x31\x05\x28\xd7\xdc\xcd\x57\xe7\x8c\xf2\xab\xae\x24\x4d\xf4\x08\x2f\x89\x16\xf5\x00\xbd\x1a\x0f\x9a\xad\xb4\x64\x0d\xd5\x70\xb5\x4e\xf9\xd8\xdd\x1c\xce\x58\x40\xe3\xfb\xd9\x76\xe5\xc6\xc9\x7c\x03\xfb\x68\xc9\x0c\x78\x0d\x2d\x2e\x34\xa3\x87\x60\xe1\xf6\x5b\x71\x41\x0b\xce\xd5\xe4\x35\xc6\xd6\x2c\x9a\x4e\x91\xf7\xca\x91\x07\x99\xaf\x8d\x01\xa9\xdc\x44\x0d\x38\x76\xf1\x40\xa9\xb9\x2c\xe1\x97\x78\xe6\xf4\x53\x2d\x13\xb0\x01\x32\xc3\x0d\xda\x5e\x3c\x82\x9c\x2d\xed\x7e\x16\x36\xbb\x8a\xa9\x04\x79\x27\xeb\x78\xd3\x75\x64\x00\x5b\x9b\x00\x6a\x7a\xa2\x9a\x22\xbe\x9e\xf6\xc4\x79\x34\x5f\xab\x8d\x2b\x72\xe7\x20\xf6\xe7\xb6\x19\x43\x6d\x14\x5a\x44\x52\x47\xed\x71\x4f\x85\x49\xa2\x4a\x3c\x3b\xd7\x0c\x21\xc2\x72\x39\x76\xe5\xc6\xdf\xcc\x14\xc2\x08\x19\xc2\x3d\x76\x35\xd9\x2a\x1e\xb1\x8f\x7b\xb3\x43\x2f\x10\x3a\x3f\x10\xa3\x60\xbb\xcd\x0e\x0f\x21\x7e\x3e\xf5\x44\xd8\xac\x17\x0e\xee\x32\xb3\x2d\x44\x71\x54\xef\x2f\x12\x9e\xdc\x48\xab\x52\xe2\x75\x25\x84\x40\x3d\x08\x87\x94\xdc\xef\xb8\xa3\x86\xd4\x97\x12\x4c\x63\xaa\x18\x22\x2e\x42\xb1\x3d\x03\x47\x28\xa6\x8f\xf1\xe1\xa2\xea\x88\x23\x58\x75\x71\x02\xdb\x14\x19\x91\x02\x61\x9f\x07\xfd\x30\x24\x44\xa1\x74\x73\x9a\x48\xed\xf3\xb0\x58\x55\x9d\x4b\x3b\x5c\xbe\x58\x4e\xcf\xb5\x07\x45\xb0\xd6\x94\xb5\xa4\x32\xa9\x7c\x60\x8f\x04\x6a\x6c\x60\xe3\x74\x74\xc6\x4a\xbc\x59\xaf\x98\xf9\xa6\x86\xf8\xf9\x62\xc7\x2e\x4c\x9f\x5a\xc5\x3c\xb0\xab\xfd\x06\x3b\x85\x47\x72\xd1\xd4\xc1\x91\x1c\x28\x8c\x9b\x2a\x39\x08\x4a\xad\x49\x01\x20\x3d\x32\x9f\x13\xe2\x3c\xbb\x5c\x44\x66\x7a\x8a\xe4\x73\x0a\xd5\xdb\xca\x1c\xb3\x55\xdd\x01\x9b\x33\x7a\x3c\xb7\x11\x04\x1b\xb5\xb7\x42\x5a\x62\x4d\x5d\xcc\x0e\x32\x10\xcd\x6a\xa4\x0a\x80\xf9\x1a\x65\x12\x22\x9d\x66\x14\xb2\x26\x76\xd0\x50\x50\x29\xda\xa5\x21\xd4\x3b\xa4\x2c\x67\x4a\x1b\x91\x7d\xef\x62\xd8\x3e\x8c\x6f\x00\xa9\x14\x07\xf1\x0e\xe3\xf9\x29\x1d\xb8\x11\x4a\xd7\x4a\x90\x31\xe4\x4c\x69\x62\xa5\x21\xe2\xca\x01\x3e\x68\xf6\x3d\x0e\x96\xc7\xfd\x82\x3e\x4c\x0f\xd6\x3a\xf0\xf4\x8a\x06\xbe\x2c\x5e\x00\x6c\x0e\x54\xb9\x66\xb6\x74\x40\xe3\x4d\xe4\x3d\xb8\x00\xf7\x94\xf0\x42\x6e\xaf\x3b\x3f\xbe\xc0\xc8\xec\x7c\x8c\x94\xea\x6c\x24\x1b\x1c\x36\xce\x7b\x56\xf6\xa9\x96\x6e\xc0\x61\x55\xd8\x3c\x40\x95\xdc\xe9\x40\x36\xcb\x32\x42\xe8\xba\x33\xa7\xd0\x88\x48\xb4\x0d\x14\xfb\x68\x8c\xa7\xdd\x58\xca\x5a\x6e\x9c\xde\x91\x73\xd6\x59\xbb\x26\x7b\xf0\x01\xee\x79\x0d\x30\x02\xff\x04\x1f\xdc\x25\x7b\xbe\xf0\xa0\x3c\x2e\xa0\x6d\x6c\xae\x2b\x1f\x41\xd5\x85\x82\x9f\xa6\xa4\x5c\xc3\x22\x85\xe3\x54\xa8\x1b\x0e\x35\x43\x67\x91\x32\x8f\x83\xb1\x50\x94\x13\xf2\x11\xf0\x97\x29\x59\xcc\x0e\xe0\x68\x00\xc6\xa0\xb1\x66\x23\xdc\xb4\xc4\x6b\x9d\x98\x3f\xad\x2e\x20\x5a\xad\x17\x83\xdc\x1c\xd7\xe1\xca\x58\xae\x4d\x21\xc3\xc1\xb2\x77\xf5\xf5\x1e\x81\x9a\xb9\x22\xb9\x88\xdb\xad\x16\xd4\x58\xda\x3f\x1c\x8a\xb4\x41\x89\xa4\x59\xed\xe7\x1b\xa9\x1a\xf4\x5d\x78\xd9\xb6\xfe\x56\x3a\xf1\xf3\x15\x7d\xde\xbb\x43\xe2\x2f\xd5\x65\x24\xed\x40\x05\x23\xdd\x16\x1c\xbb\xd0\xc3\x3a\xdf\xf7\x33\x8b\x57\x89\x55\xc6\x2c\x57\xa7\x84\xa4\xed\x73\x3b\x1e\x27\xf4\x4f\x49\x89\x29\x03\xba\x59\x9c\xba\x45\x54\xed\x38\x0e\x59\xe6\x89\x3f\x08\x70\x87\x57\x94\x63\x2e\x56\xcb\x63\xef\x29\xb9\xe9\x0e\xbd\x85\x9f\x9a\x29\x0d\x8e\x92\xbf\x44\xe6\x9e\xac\xc0\x43\x00\xb9\xd8\x92\x3a\x12\x67\x0e\x55\xd4\x31\x14\xd1\x3a\x51\x22\xd5\xac\x86\x01\x85\x93\x64\x8f\xaa\x6b\x33\xc3\x7c\x12\x68\x9d\x9b\xa9\x69\xe0\x51\xa9\xbe\xdd\x0d\x35\x98\x5d\xe6\xca\x19\x1a\x7a\x9c\xb9\xa8\x1d\x33\xf5\x92\xca\x3a\xa4\x8b\x94\x5a\x17\x97\x96\xa2\x2a\x98\x80\xf0\xd1\xda\xc0\x0b\x33\x0d\xd1\x73\x5e\xcc\x78\x03\x9a\x92\xf8\xea\x9c\xca\x3e\x74\x9a\x2e\x7c\x6c\xb9\xb9\x1c\x3b\x08\x73\x52\x03\x3b\x11\x8c\xc7\x97\x86\xb5\xd3\x97\x00\x07\x06\x95\x24\xe7\x3c\x5c\x19\x45\x9e\xe0\x92\xce\x17\x48\x62\xed\x7c\x66\x2c\x4b\x17\x94\xa3\x8a\x2b\x9e\x2c\xf3\x85\xd9\x17\x49\x6a\xc2\x6c\x0f\x4f\x19\x56\xdf\x63\x4c\xb9\x28\xf2\x6a\x88\xd7\x0b\x04\x3a\x75\xf9\x0a\x35\xf7\x38\x7a\xe8\x92\x80\xc3\x45\xa0\xea\xf8\x16\x34\x0b\xbe\xd9\xc7\x65\x48\x8a\xe4\x65\x39\x8c\x27\x86\x28\xab\xd9\x05\xb4\xbf\x14\xf1\x78\xef\x9d\x6b\x6f\x63\x88\x0c\xee\xec\x66\x21\x1a\xad\xa1\xb9\xca\xba\x90\x6d\x9a\x34\xa9\x6c\xbb\x2d\x6e\x70\xeb\xcb\x70\xee\xd0\x60\xde\xd2\x54\x02\x8e\x97\x64\xb6\x71\xfb\xd3\x9e\x84\xc9\xda\x29\xa2\x31\x4f\x51\xb4\x83\xe2\xba\x70\x41\x81\x5c\x3a\xec\x2d\xb2\x76\x7a\x11\x84\x00\x56\xbc\x18\xf7\xb8\x56\x22\x14\x39\x3b\xea\x8a\xc1\xda\x8b\x20\x5b\x2d\xa4\x02\x8e\x40\x6e\x77\x44\x99\x07\xa5\x20\x91\x2e\xcc\xe4\x0b\x20\x60\xcd\x25\x08\x47\x17\x40\x57\x75\x9d\x63\x73\x2c\x0b\x42\x35\x29\xcc\xdc\xf7\xe2\x39\xdf\xcf\x8a\xac\x29\x53\x03\xb7\x1d\xd5\x9f\x77\xf9\xce\x71\x54\xab\xd2\x4c\x0d\xdf\x01\x56\x35\x03\xce\x52\x95\x7c\x11\xb4\x8a\x8e\xe7\xc7\x14\x38\x24\x23\x54\x5b\x78\x2c\xc3\x9c\xfa\x46\x33\xa4\x62\xc9\x03\xd4\x3d\x2e\xd8\x06\xdf\xd6\x8b\x3e\x20\x41\xa1\x47\xc5\x9c\xc1\xe7\xfc\x74\x6b\xd8\x1a\x0c\xd9\x3b\x76\x19\x6c\x10\x37\x89\x2d\x96\xd9\x6e\x94\x20\xba\x0c\x36\xb9\xf1\x45\xb8\x34\xb0\x65\x9c\xcb\xbe\xea\x8c\x5c\xc6\x95\x35\x0e\xa7\xe2\x70\x50\x5b\x9c\x88\x90\x6c\x15\x5e\x2a\x55\x85\xfd\xa4\xa2\x1c\x19\xc7\x53\xd6\xac\x72\xaf\x58\x62\xf5\x41\x8d\x50\x5a\xee\xcb\x2d\x1e\x70\x66\x9e\x34\x90\x8a\xf8\x1d\x57\xf1\x87\x0c\x31\x21\x72\x8a\x6e\x56\x0f\x75\xee\x1d\xb5\x9b\xaf\x49\x9e\xa6\x8a\xad\x0b\x41\x3d\x1c\xcd\x37\xbe\xd1\x49\x53\x4d\x57\xb7\x6d\x02\xc4\x9e\x98\x21\x5b\xd3\xf4\xb3\x7e\x56\xe7\x61\x23\x5b\x4b\x5a\xc0\x59\x86\x5d\x37\x49\x9f\x2d\x02\x72\x27\xf4\xad\x4c\x1d\xc8\x70\x54\x3d\xa6\x77\xa4\x45\xe8\x1e\xf7\x83\x56\x14\x5d\x2a\x1e\x31\xd3\x0f\xca\x75\xb9\x48\x20\xce\xa6\xfd\x7e\xa8\xa6\xd9\x9e\x9c\x29\x50\x85\xb5\x81\xef\x87\xc0\xb9\x08\xe5\x14\x83\xa0\x29\x75\x51\x87\xea\x44\xc0\xa4\xc4\xaf\x24\x8a\x89\xce\x0f\x85\xf3\x33\x82\xed\x95\xc4\x4f\x03\x55\x3d\x3a\x2e\xb2\x9f\xcb\x39\xa6\xe6\x73\x7c\x49\x68\x34\xc0\x12\x8b\x2c\x17\xd3\xf5\x6e\x5a\xd6\xe1\x36\x56\x00\xa1\x72\x73\x66\x1d\xb1\xeb\xa3\x47\x10\x5e\x05\x71\xa0\x43\x57\xc3\x41\x95\x4b\x43\x1d\x9d\xd4\xa2\xce\x59\x81\x2d\xc8\xb9\x12\x08\x32\xc0\xd3\xa9\x34\x80\x6b\xec\x07\xe5\x2b\x90\xf8\x0c\x92\x07\x7a\x74\xf1\xb0\xb9\x59\x88\x21\xa8\x28\xb3\x8e\x28\xc1\x64\xa6\x20\x5b\xc9\xfe\xa5\xd6\x7c\x8f\xcd\x44\x0d\x8b\x4e\x53\x5a\x1a\xc5\xa6\xec\xb5\x40\xc3\xa8\x6d\x41\x9f\x91\x79\x98\xc8\x07\x34\xaf\x28\x15\x5c\x62\x03\x97\xc9\x4a\x97\x09\xb7\x41\x2e\xeb\xa5\xbe\x17\x9b\xa8\xb9\xd4\x09\xe3\x76\x5a\x81\xd6\x32\x9b\x2d\x86\xb2\x66\x60\x56\xe5\xcf\x21\x60\x07\xbb\xc4\xa0\x87\xfa\xe2\xda\x90\x52\x5c\xdf\xa7\x3b\x61\x8f\xb2\x0d\x75\x21\x43\xe6\xbc\x06\xa6\x97\x6e\x34\x07\xee\x76\x30\x1b\x49\x35\xef\x6f\xe3\xd3\x99\xa0\xb1\x8e\x90\x77\xdc\xd0\xe5\x2b\x57\x32\x77\x53\xcb\x08\x5b\xb3\x03\x20\x37\x63\x3d\x7d\x88\xbe\x6a\x58\xe9\x1b\xd9\xc0\xb8\xcc\xc1\xc1\x0c\xe3\xd4\x9e\xf1\x79\xec\x02\xd7\x96\x0a\x04\x3c\xd4\xc2\x28\x8c\xd5\x28\x4c\x61\x88\xb2\xa9\x94\x1c\xd0\xbe\x17\x77\x5b\xde\x5f\x96\xb9\x97\x1c\x37\xb9\x25\x26\xe8\xaa\x47\x88\x78\xb7\x1b\x0f\x3c\xaa\x4b\xc6\x64\x18\xa5\x13\x54\xbc\xb4\x48\xa0\x91\x52\x56\x4b\x73\xc7\xc9\x08\x91\x05\xcc\x8a\xd8\x62\x65\xd5\xaf\xf9\x03\x9a\x4d\xd3\x16\xd2\x36\x2e\x7d\x42\x31\xe0\xcc\x98\xb3\xdf\x08\x30\xec\x4e\x85\x9c\x3e\x9d\x8c\xb2\x5b\x84\xe3\x31\x7f\x78\xa3\xf3\xe1\xa2\x73\xe7\x07\x7c\x2d\xee\x08\xfa\x48\x6f\x13\x86\x2e\x67\xdb\xb5\xeb\x57\x82\xe0\x67\x17\x81\xc5\x36\x2b\x74\x77\x96\x20\x4e\xde\x19\x94\x51\x37\x97\xa4\x37\x70\x53\x50\xd5\x9a\x5f\x0f\x48\x08\x75\xf3\xb5\x73\xf0\x95\x51\x6c\xf8\x03\x41\xcc\x97\x9e\x78\x9c\x25\xdb\xd5\x72\x2d\x27\x45\x31\x2d\x00\x45\x4a\x42\xc7\x88\x32\x90\x4d\xcd\xc5\x40\x28\x32\xa2\xef\x33\xeb\x62\x35\x75\x20\x70\x96\x71\xd2\x37\x31\x3f\x81\x14\xdf\x44\xab\x3a\x6b\xb9\xcb\x5c\xaa\x8a\x87\x8c\x1e\xe3\xcf\x42\xe7\x49\x72\x78\x0c\xf6\x02\xd5\x49\x21\x8c\x27\xac\x1d\x90\x08\xa6\x24\x10\x57\xe5\x7b\x11\xce\x9d\x92\xd7\x2c\x35\x22\xce\x10\x7c\x4a\x07\x1f\x3e\xc0\x59\x1c\x15\x41\x35\x9d\x5b\xab\x59\x9f\x79\x00\xde\x71\x78\x33\x6e\x99\x29\x83\xe4\x84\x94\xec\xe0\x58\x1b\x27\x86\xd5\x04\x55\xe1\xc2\xcc\x40\xb1\xef\x34\x64\x01\xe4\x4d\x4e\xba\x29\x40\x18\xbf\xe1\xe7\x11\xb5\xc3\x37\x0b\xdb\xd8\x1d\xc2\x90\x35\x98\x73\x4d\x32\x6b\x14\xf3\x7d\x9d\xb3\xf2\xab\x90\x8d\x87\x02\x50\x12\xa9\xfb\x30\x8d\x0f\xac\xd0\x6f\x86\x75\xb4\x02\x36\xa6\x2a\x98\x2c\x45\x65\xbc\xae\xdb\xe9\x56\x75\x09\x06\x8f\xa3\x2a\x0f\xa8\xaa\xdd\x4d\x4d\xcb\xe1\x76\xe9\xcc\xdf\xa1\x1a\x4c\x30\x78\x29\x34\xe2\xb1\x95\xb3\x40\xdd\x8f\xd1\x17\x52\xa6\xc3\x7c\x26\x16\x8e\x7b\xd8\xd7\x5a\x25\x6d\x49\xcc\x16\xfc\xd4\x76\xa3\xb3\xa2\x71\xaa\xa9\xfb\x7a\x21\xa5\xf3\x13\x0d\x30\x21\xd3\x30\x67\x4f\x22\x43\x4d\x1f\xd2\x6c\xb7\xda\x83\x13\x0d\xf6\xb4\xbc\x76\x0f\x03\x09\x57\xfd\x28\x36\x6e\xc5\xec\x8a\xb6\xda\x96\xc7\xcc\x21\xb7\x92\x71\xa4\xfa\xe5\xea\xa4\x0e\x8b\xcb\x0a\xd9\x78\x2b\xa3\x9b\x03\xe2\xdc\x24\x36\x02\xd8\x4c\x2f\x90\x1e\xaf\xcb\xce\x0d\x60\x45\x94\x86\xd5\xdc\x48\x76\xb9\xc9\x6c\xe8\xb0\xa6\xcf\x0a\x3e\x56\x38\x2d\x98\x33\xc1\x9e\xdb\x66\xc7\xf5\x3a\x56\xb3\x69\x8e\x27\x71\x80\x01\xd9\xe0\x13\x70\x26\x57\x4b\xd2\x9a\xe3\xd9\xfe\xe2\x95\x84\xd1\xa8\x26\x2d\x1d\xbb\xb0\x40\x0e\x56\xba\x2e\xa1\xcb\x3e\x72\x78\x10\x16\x6d\x3b\xcd\x3b\x8a\xd2\xc7\x53\xf9\xb9\x58\xd8\xf1\x32\xac\xac\x22\xd3\xb4\xda\x3a\x57\xec\x09\x83\xf3\xf0\xd8\xe1\x64\xe8\x06\x17\x3a\x5f\x42\x07\x3a\x6f\xdc\xf4\x54\xad\x7d\x22\x99\xdb\xf0\xaa\x3f\x4e\xfb\x23\x96\x92\xfa\x1c\x3d\xb7\x88\x70\xce\x56\x28\x84\xc0\xfd\x74\x8c\xbe\x06\x67\xbe\xa2\x2e\x4b\x7e\x0f\x31\xc2\xd1\x9c\x9a\x3d\xd6\x32\xe4\xd2\xf3\xf0\xac\xb5\x53\x98\x3a\x0e\xe7\x63\x51\xcf\x9b\x92\xac\xb4\x78\x5b\x1d\xc4\xf5\x9e\xa2\x0f\xb0\x74\x80\x5c\x6f\x98\x57\x2d\xb4\xd9\xae\xcd\x86\x5b\x77\x05\xd2\x8c\x87\x46\xfb\x3a\x92\xaa\xe9\x7c\xee\xec\xab\x95\x87\xd6\xcb\xd9\x9e\x3c\x1e\x3b\x8d\xd1\xd4\x8b\x37\xcb\xa6\xa7\x69\x9a\x1e\x2b\x65\x66\xc6\x65\x17\xd2\x1b\x97\x3b\xef\xf2\xa9\x62\x6a\x41\x26\xed\x2f\x10\x6b\x2f\x0e\xe5\xe1\x1c\x5f\x4e\x60\x20\xc2\x31\x9c\x3b\x21\xeb\xd6\x27\xe6\x40\x9b\x82\x46\x5e\xb8\xc5\xc2\x6a\x50\xaa\x91\x21\x06\x66\xb0\x25\x86\xda\xfc\x6a\xb7\xea\x2a\x1d\x65\x58\x19\x3b\xb7\x36\x12\x57\xb0\x6f\xa3\x86\xcf\x84\x97\x04\x0e\x42\x68\xcf\x24\x18\x94\x2f\xf8\x3c\x84\xc7\xca\x92\x50\x4e\x3b\x0f\x2b\x9a\x29\x1e\x87\xb4\x51\xf7\x50\xd9\xe0\xf9\x56\x37\x1b\xd4\x11\x08\x48\x76\xbc\x06\x5e\x87\x99\x1a\x52\x81\x73\x9c\x21\x25\xad\x5c\x60\x91\x3c\x2a\x6e\xc7\x69\x3b\x6d\x85\x41\x28\xb2\xac\x6b\xf4\x44\xa7\x6d\x32\x66\xa3\x92\xc8\x37\xeb\x16\x46\x2d\x40\x4a\xcc\x59\xb9\xe0\x0b\x06\xd4\xec\xd6\xf5\xa1\x6a\x25\x9c\x77\x89\x4d\x1b\xd8\x51\x43\x36\x8a\x56\x2f\x1b\x4a\xc3\x66\xa8\xc6\x1f\xcd\x9a\xea\x4a\xa6\xe3\xf7\x00\x75\x5b\xdb\xd9\xf6\x16\xa0\x0c\x71\xcc\x02\x36\x3b\x72\x21\x02\x8a\x59\xed\xa3\x8d\xe3\xbb\xe0\x22\x78\x3b\x04\xa7\x62\x79\x7d\x3c\x94\x36\xa1\x66\xa6\x82\xcf\x63\xc6\xeb\x35\x86\xed\xe0\xc3\x86\xe9\x08\xd9\xc1\xb4\x7e\xd0\x04\x65\x23\xfa\x7e\x6b\x87\x4d\xab\x0b\x67\x63\x93\x8e\xaa\x77\xc0\xfa\x64\x87\xc3\xb5\xed\x4c\xb7\xb3\x0e\xe4\xac\x7e\xa1\x79\x45\xb0\x7b\xe7\xdc\x19\xd8\x14\xec\x7c\x4c\xc1\xf7\xeb\xa9\xae\x18\xb9\x05\x8b\x40\x54\x15\xa2\x81\x3d\x7a\x7a\x71\x92\x7c\x81\x09\xf5\x65\xab\xc9\x09\x5c\xce\xb1\x70\x8c\x0f\x97\x9d\x91\xb0\x85\xd1\xed\xf7\xca\x89\xb1\x8e\x55\x85\xa0\x2b\x82\x64\x24\x8d\x37\x28\x55\x64\xc8\x34\x25\x3a\x61\x8b\x75\xd9\x76\x73\x3a\xcd\x36\x87\x69\x7d\x54\x16\x08\x66\x86\x5a\x8d\x4b\x3b\x79\x49\xac\x3b\x1e\x1e\xa4\x7e\x79\x62\xc7\xc3\x29\x90\x30\x6c\x36\xb3\xb3\x2b\x0c\x39\x7a\xcc\x11\x6b\x13\x6a\x5c\xac\xc4\xd6\x45\xa4\xa4\xf5\xe6\x60\x1c\x94\x7c\xdd\xed\x58\xfe\x52\xcd\x6b\xa6\xde\x37\x06\xbd\x98\x9e\x8a\xb6\xdf\xac\x0c\x9a\x11\x45\xf8\xe8\x9c\xd4\x5a\x4a\x22\xd5\x4f\xc7\x52\xd5\x6a\xba\x76\x1b\x25\x9b\x95\xd6\x56\x38\xcf\x40\x8c\xc1\x4a\x0a\x84\x64\x63\x2c\x05\x74\x71\x64\x17\x3c\xa8\xa2\x68\x1d\xd7\x6b\x9b\x17\x12\x7e\x10\x3a\x9a\x34\x6e\xb4\xbc\xb8\x42\x7a\x36\xa4\x65\x86\x2f\x31\x40\x70\x8b\x8e\x18\xc5\xc6\x5b\xbb\x08\xa1\x2d\x17\x82\x8f\xba\x3c\xb7\x55\x9b\x46\x55\x1d\xbc\xa5\x22\xe7\x00\xa0\x43\x87\x4b\xa9\x21\x10\x80\xcd\x00\x0a\xdc\xbd\x74\x99\x59\xe9\x16\x60\x38\x58\x09\x9b\x96\xbe\xbe\x73\xcb\x7e\x3d\xaf\x5c\x1f\x6b\xec\x51\x97\x17\xa5\xb1\x60\x70\x6b\x9e\x40\x6b\x39\x9a\x79\x29\xaf\x88\x30\x0c\x10\x7f\xbb\xc6\x6c\x4e\x70\x70\x2c\xc9\x07\x1f\xc8\xfe\x79\x3e\xe7\x57\x53\x28\xb3\xd8\xd3\x31\x4f\x4e\x12\x5a\x2f\xfa\x0b\xbc\x02\x7a\xa5\x52\x81\xca\x48\xf1\xc5\x1b\x01\x3a\x82\xe3\x7a\x1b\x21\xd7\x68\xd6\xb7\xf4\x74\x41\x59\x5d\xe0\x17\xbb\x53\x10\x25\xc2\xd9\x43\x96\xa9\x99\x48\x97\xfe\x28\xd6\xde\x21\x39\xa9\x68\xaf\x65\x54\x9e\xd8\x3e\x72\x30\x6a\x5e\x9f\x95\xe5\x72\x8a\x7a\xde\x71\x91\x0b\x56\x31\x1a\x58\xff\xa2\xb3\x72\x40\x47\xec\x26\xef\x91\xcd\x4a\x3a\xba\x6e\x5a\x85\xa1\x6e\xe3\x5d\xb3\x6b\x17\x6a\xc8\x6e\xac\x23\x64\x1b\x32\x16\x93\xab\x54\x5b\x08\x86\x87\xb8\xa0\x20\xc0\x0a\x59\x0d\xf1\x66\x5e\x2d\x18\x60\xca\x4c\xc6\xb5\x9b\x51\x53\x98\x84\xae\x91\x72\xbf\xca\x89\x6a\xb5\x9f\x43\xf1\x42\xd7\x18\xc1\xab\xa4\x8e\x5e\x2b\x76\x85\x14\x7e\xd7\x1e\xc3\x65\xc3\x95\x9b\x03\x36\x6d\xd6\xcd\x39\x4b\x64\x8f\x8b\xb3\xd4\xdc\xc2\x52\x22\xc5\x4b\xe0\x1c\x68\x47\x01\x22\xbe\x7e\x38\x3e\x03\x35\x5b\xd2\x5e\x48\x07\x25\x0b\xe6\xcb\x33\x6a\x07\x78\xef\xa0\x81\x8f\x6e\x30\x3f\xdd\xa4\x76\xd5\x1d\x72\x0d\xe3\x16\x28\x59\x9a\x12\x52\x17\x82\x86\x2e\xd6\x9e\xd6\xcf\x8f\x48\x37\x48\x52\x8f\x70\x33\x18\x2d\x66\xc8\x85\x3c\x8e\x45\x8c\x05\xd6\x3a\xe5\x65\xb3\x61\xe6\x5e\xd7\x30\x8b\xc8\x70\xab\xf3\x52\x66\x84\x5e\x5b\x64\xc9\x51\xe8\xf2\x40\x5e\x36\xe7\xcc\x0f\x78\xa2\x83\x49\xd0\x1e\xc9\x36\x93\x7d\xe5\x04\xb8\xf2\x64\xa9\x3c\xd8\x50\xf0\x59\x5c\xb9\xa8\x8b\x3a\x63\x95\x38\x82\xd3\x73\x26\x4e\x37\xf6\x1a\xdd\x87\x1c\xac\x29\x29\xed\xa5\xae\x50\xb8\xe9\xce\x65\x18\x63\xc5\xa1\x06\x0b\xef\xd7\x79\xee\x85\xbd\xed\x39\xbc\x11\xf6\x54\x4e\x5b\x7b\x82\x99\x26\x2a\x9c\xa2\xb9\x1b\xaf\xad\x4d\x3a\xdd\xf7\xec\x43\xdd\xa6\x39\xb7\x2b\x18\x85\x5d\x61\x6d\xb4\xf4\x6e\x96\x94\xeb\x41\xaf\x0c\x2c\x36\x4b\xf3\x92\x28\x32\x67\xa9\xb1\xb8\xdf\x01\x2d\x83\xda\xa4\xaf\x98\x1e\xd7\xe0\x7a\xe7\xb1\x43\xb5\x42\xec\x6c\x0d\xec\x4c\xa6\x57\xb3\xa2\xcc\xe4\x7a\x3c\x75\x25\xaf\x9b\xc5\x72\x75\x18\x2e\xdc\x7a\xb9\xdd\x64\x3d\x8a\x5c\xce\xfa\x2c\x56\x97\x50\xa5\x94\x06\x15\x24\x62\xa1\x9b\xf2\xd6\x95\x13\xb3\xc8\x35\x33\x2e\x34\x94\x19\x9c\x3e\x32\x97\x5e\xab\xe8\x54\xee\xd9\x7a\xa2\x20\xd3\xfa\xbc\xe4\x47\x2e\xaf\x96\x42\xed\xda\xf2\x6e\x39\xf3\x2f\x03\x71\x54\x62\x13\x0e\x38\x72\x23\x6e\x4a\x72\x5b\x96\xdc\xba\x21\x77\x9e\x33\xd3\x9c\xa9\xed\xb0\x4c\x7b\x92\xba\x0b\x3f\xeb\xf2\xb0\xbc\x20\x95\xba\xc8\xf2\x56\x2a\x8c\x1a\x77\x1a\x95\xc3\xe4\xd1\xa7\xb0\x86\x78\x82\xc4\xc1\xa1\x8e\x30\x2e\xed\x61\xc9\x59\xbb\x87\x94\x58\x14\xac\xb9\xca\x22\x8d\xc3\x69\xc3\x5d\x6b\xc8\x0a\x92\x24\x87\xdf\xf8\x00\x78\x9d\x03\x21\x76\xb5\xa3\xa7\xdb\x14\x3f\x4d\x8f\x39\x74\x48\xa8\x8a\xaa\x49\xac\x19\x35\x65\x57\x54\xd5\x3a\x53\x98\xe3\x26\x1e\x54\x0a\x17\xd9\x4d\x09\xc2\xb3\xa4\x6d\x10\xad\x3e\x2b\x3d\x7d\x29\x9a\x22\xe7\x86\xdd\x39\x9d\x52\xcd\xb4\xaf\xb8\x8b\xba\x1b\x76\xc3\xa5\x0f\x9a\x63\x1a\xc9\xfb\xdd\x72\xa9\xa7\x86\x84\x4d\xb9\x74\x74\xf4\xc4\xfe\xe2\xd2\x07\xc8\x35\x87\x1c\x57\x57\xba\xae\x36\x60\x3b\xf4\xdd\xb9\x8d\x0d\x73\xe3\xec\xf4\x64\xee\xd8\x3d\xaf\xe6\x04\xd2\x46\x85\x38\x0c\x91\xd6\x91\x2a\x83\xaf\xb6\x36\x14\x1e\xc5\xd6\x1b\xd0\x93\x6c\xc4\xba\x04\x1b\xe6\xc8\x94\x46\x55\xdb\xc8\xa0\xbb\xf9\x02\x9d\xb2\x5b\x6e\x43\x72\xae\x52\xba\x0a\x4c\xd8\x88\xa2\x6f\x70\x61\x49\x78\x5b\xf9\x12\xd0\x5e\xad\x1f\xb5\x42\x38\xb5\x47\x50\xac\x12\xb8\x35\x36\x7d\x8b\xe9\x53\x64\x2d\xb5\x2c\x7a\xf1\x0f\x73\xc7\x42\x6f\x00\x39\x27\x67\x55\x75\xd5\x91\x12\xa4\x01\x11\x2b\x38\x84\x86\x08\xc9\x9c\x06\x55\x4e\x78\xeb\x19\x69\x70\x95\x58\x99\xda\x4c\xf3\x57\x19\xb7\xe7\xce\x97\xad\xe7\x57\xc7\x7d\x43\x09\x24\x0a\x23\x46\x57\x42\xdb\x35\xe5\x21\x79\x31\x3f\x8d\x06\x96\x39\x99\x89\xd8\x9e\x6d\xda\x36\x97\x60\x3b\x10\xfb\x64\xfc\x0f\xe9\x95\x29\x3d\x5d\xa8\xca\x4a\xb9\xf4\x0e\x42\x03\x00\x00\x7b\x94\x28\x9d\x96\x22\xe3\x28\xc5\x42\xb2\xbf\x98\x3a\x05\x9b\x22\xb8\xf0\x04\x89\xec\x14\x30\xd6\xb1\x77\x0a\xdf\x69\x04\xd9\x0b\x67\xb5\x13\xce\xe0\xb2\x53\x00\x2c\x9c\x41\x27\x58\x72\x84\xfb\x00\x00\x5c\x83\x25\x2d\x80\xcd\x2d\x05\x9b\x4a\x5e\xdb\x88\x94\x9b\x69\x04\xf8\x33\xe8\xf9\x0b\xdc\xf3\x32\xdc\xf1\x9a\xd8\xf3\x44\x36\x86\xc4\x02\x91\x5d\xf6\x38\xdc\xed\x89\xac\xe3\xf7\xb6\xb5\xc6\x6e\xad\x79\x20\xab\x9a\x20\x71\x0b\xdc\x60\x98\xd7\x74\xc7\x9d\x2c\x75\xac\x1a\x72\xad\xda\x7b\xf3\x6e\xf2\xa6\xf6\xfa\x1a\xca\x63\x2b\x4c\x6f\x3f\x89\xd3\x78\xef\x26\x08\x32\x01\x8d\x3f\x41\xe0\xd9\x6a\x02\x2f\xff\x3a\x47\xfe\x8a\xce\x26\x53\x18\x7e\x48\xb3\xbf\x01\xfe\x76\x3f\x40\x9c\xf9\x50\xeb\x95\x55\x98\xa5\xcf\x17\x99\xbd\x5f\x7d\x1f\xa4\xfb\xb8\x5e\xf1\xfb\x05\x5e\xff\x32\x5b\xbe\x02\x98\x1f\xd6\x10\x4d\x02\xe2\x39\x18\x3f\xac\x27\xa5\xd7\xfe\x72\xbb\x20\x7e\x72\x1b\xf3\x09\xdc\x37\xae\xbb\xf6\xfa\x3c\x2b\xeb\xf7\xe7\xea\xa7\x24\x73\x9b\xd8\x7b\x3f\x3e\xb8\x5d\xd8\x73\xfb\x81\xa2\xdb\xb0\x87\x69\xef\x6e\x4f\xe2\xd0\xfe\xeb\xf5\x7f\xb7\x2b\x83\x6e\xbf\xc5\xf5\xef\xd0\xe4\x9f\x3f\xbf\xfb\x09\xfa\xf7\xc9\x6c\x31\xf9\x77\xe8\xe1\xd1\xdb\x4f\x97\x39\xdd\x40\xbf\x9b\x3c\xc0\x7e\x37\xf9\xed\xb7\xce\xb3\x73\xcb\x89\x7e\x2b\xbd\xa2\x09\x4b\xef\xb7\xdf\x7e\x9e\xfc\xd7\x4f\x3f\xfd\xe5\xd3\xdd\xd5\x7f\xf9\xf5\xa7\x9f\x1e\xae\x71\x1a\xef\x56\xfa\x78\xf9\xda\x47\x28\x7f\xf9\xed\x37\xaf\xe2\x6f\xb0\xff\xf2\x6e\xf2\x5f\x93\xd6\x8a\x1b\xef\xaf\x93\xba\x6c\xbc\xdb\xef\x2a\xb5\x56\x39\xe2\xfd\xdb\x6c\xf2\xe1\xde\x9a\x6f\x67\xf0\xc3\xb0\xfe\xeb\xc3\xd0\x87\x61\x9d\x67\xd7\xf5\xe5\xe5\x71\xc8\xa7\x71\x55\xe6\x44\x5e\xfd\xf2\xd0\xd9\xc3\x50\x2f\xf6\x92\xc9\x87\x89\x9b\x39\xcd\xed\x2a\x73\xdf\xab\xc9\xf1\x56\x73\xec\xc2\xb8\x6f\xff\xf2\x78\x57\xff\x5f\x7e\xfe\xf5\xa7\xf0\x34\x79\x7b\x1b\xff\x6f\x1f\xc6\x9b\x73\x3f\xbf\xac\xea\x3a\xf0\xd3\xcd\x54\x7e\x76\x45\xf4\x76\xb7\xc2\x87\x0f\x93\xbf\xdc\xc8\xf0\x97\x4f\xb7\x53\x4d\x26\xe3\xab\x4f\x3f\x67\xf6\xdb\xec\x3d\x7d\xfd\xfb\xb6\xc0\xe3\x75\x53\xb7\xff\x7b\x71\xe5\xdd\x9f\xf8\x40\xb5\xf7\xc7\xfb\x13\x47\xfa\xd7\x79\x45\xa6\x96\x1d\x7b\xee\xe4\xc3\xa4\x0b\x53\x37\xeb\xde\xc7\x99\x63\x5d\x25\x63\xbc\x08\xcc\xc9\xe2\x07\x24\xeb\xbc\xfa\xeb\x5f\x7e\xfd\x38\xb9\x29\xe3\xc9\x87\xc9\xdb\x2f\x60\xfc\xe7\xe4\x4d\x57\x55\x7f\x85\xa0\x37\x93\xbf\x5e\x3f\x5e\x3f\xfd\x3c\x99\x3e\x83\x1c\x64\x55\x7d\xe7\x71\x6e\xd5\xc1\xed\xba\xaf\xe9\x75\xf2\x9b\x4f\x6b\x59\xa5\x5f\xdd\x41\xb0\xf2\xac\xd2\x09\x3e\x0d\x3b\x59\x4e\x9d\x95\x97\x07\x02\x7c\xc6\xe7\xf7\x78\x96\xa6\xe3\x2f\x4a\x52\xe3\x98\xb7\x4d\x19\xbf\xfb\x28\x32\x1f\xb7\x5a\xfd\xfc\x09\x5a\x57\x7f\x02\x34\x8e\xd2\x3d\x5b\x51\x8c\xb7\x37\x6d\x7b\x5c\xec\xdd\x0d\xb9\x77\x93\x91\xa7\x56\x53\x07\xbf\xd5\x59\xe4\xa5\x9f\x01\x72\xe2\xac\xf2\xca\x9b\xb4\x75\xf5\xfb\x2c\xf7\xd2\xc7\x3b\xc6\x1e\x36\x64\xb9\x2e\xd9\x7a\x69\xbd\x0b\xab\xda\x4b\xbd\xf2\xed\x5f\x9a\x34\xce\x2c\xf7\x2f\xef\x3e\xdd\x06\xfe\xf6\x73\xf9\x78\x84\xf8\xe9\xae\xb2\x91\xf5\xef\x6f\x2f\x1e\x9f\x5e\xd5\xec\x9f\x3f\xfd\xfa\xcc\x0c\x2c\xff\x64\x66\x00\xcf\x92\x3c\xab\x6e\x37\x6b\xd3\xe3\x65\xde\x1f\x3e\x21\xf6\x69\xe3\x1f\x9f\x3c\x1b\xff\xf6\x6a\x72\xad\xd2\xb3\xde\x4d\x9c\x4f\xef\xb4\xd0\xeb\xde\x4d\x1e\x55\xf4\x0b\xf5\x0a\xc2\xea\xfd\xe3\x9c\xc9\x87\xc9\xe3\xc7\x5f\xbf\x1c\xf1\x04\xd6\xe4\xc3\x53\xe8\xbf\x3e\x85\x38\x2e\x75\x83\x38\x7e\x7c\x32\x22\xac\x1e\x70\x4f\xfd\xc9\x87\xc9\xc9\x8a\x2b\xef\xd9\x08\x79\xbc\xa8\xff\xb3\x4d\xbe\x30\xf4\x33\x64\x0e\x9f\x46\xfe\xd7\xa4\xaa\xad\xb2\xfe\xeb\xcd\x04\xbd\x9b\x78\xa9\x3b\x7e\x9c\xfc\xf3\x73\xed\x7f\x46\xc2\xcf\xaf\x86\xfd\xf4\xee\x06\xea\xb3\x9b\xff\xbe\x94\xc2\x3b\x5b\xba\xf2\xf5\xdb\x68\xbe\x7f\x84\xfb\x05\x23\xde\xdf\x64\xe3\x7d\xec\xa5\x7e\x1d\x7c\x9d\x15\xb7\x39\x78\x96\xd6\x5e\x7a\x05\xf3\xe6\xcd\x37\x86\x3b\xb1\x55\x55\x57\xed\x1a\x7d\xb6\xe5\xd4\x61\xeb\xbd\x79\x54\x93\x5f\xbf\x87\x24\xe3\xe5\xd3\x5f\xd0\xc4\x6b\x3f\xa7\xca\x55\xa2\x7f\xbb\xdd\xd6\x38\xee\xef\xbb\x76\xe2\xb5\xef\x5d\xab\x7e\x2a\x88\xe3\x9a\x9f\x21\xf8\xe0\x84\xaa\xcf\xf5\xbf\xf2\x6a\x25\x4c\xbc\xac\xa9\xef\xe8\xce\xe3\x9f\xdf\x5e\x64\x89\x97\x5e\x5d\xc0\x6f\xaf\xe1\xc8\x3f\xdf\x4d\xe0\x1f\xa2\xdd\xb8\xc6\x57\x84\xe9\x74\xd5\x99\x70\xf8\x7c\xab\x6f\xaf\x22\xf5\xfa\xd5\x22\xef\xe2\x66\x5d\xfa\x15\xfe\x7c\xbc\xb2\xf2\x73\xc9\xfd\xef\xff\x7e\x59\xfd\x9e\xd2\xf0\xe6\xe8\xdb\xeb\x4a\x78\xe6\x7a\xb7\x3b\x2f\x11\x64\xf3\x74\xd4\xe4\xd3\xd5\xb2\x4f\x94\xf7\x93\x16\x3e\xfe\xb9\x39\xf1\x3b\x60\x67\xcb\x2b\x62\x4f\x1f\xae\xee\x3d\x5c\xff\xee\xf5\x9f\x4f\x7f\x91\x25\x37\x80\x3f\xbf\x04\xf1\x9f\x3f\x7d\x1f\xa5\x6e\xcb\x04\x56\xea\xc6\x1e\x48\x2f\xca\x83\xec\xe1\xe3\x45\x60\x6f\x9f\x2c\x73\x7f\x4b\x9f\x96\x7c\xbc\xf1\xf7\xa3\x1d\x7a\x85\xcc\xdc\xd9\xe2\x17\xf2\xd3\x59\x61\x4d\x65\xe5\xd5\xb9\x65\xbe\xf5\x54\x24\xbe\x53\xdf\x3f\x99\xa2\xd2\x4b\xb2\xd6\x7b\x6a\x8d\x26\xaf\xf7\x15\x4e\xec\x59\xe5\x23\xbd\x1e\x15\xf9\x73\x82\x5d\xe9\xff\x6f\x5f\xc7\x7e\xf2\x7d\x8e\xe7\x71\xc3\xe3\xfd\xf1\xf7\x0d\x78\xd5\xd8\xd5\xed\x3e\xe3\xb7\x5f\xb7\xff\xef\x5e\xf6\x0f\x5e\xea\x3e\xe1\xfb\x17\x0e\xf6\x41\x5a\xca\xb7\x37\x34\x7e\xbe\x27\x07\x77\x44\xfa\x16\x8a\x35\x65\xe9\xa5\x35\xfe\x7c\xcd\x5b\x78\xf6\x5c\x07\x1e\x9c\xe9\x37\x76\xf2\x6c\xda\xcd\xed\x7e\x6d\x7b\x5f\x4e\xf9\xe7\x9d\xcd\xbe\xc0\x90\x2f\x3d\xec\xe4\xb5\x86\xff\x51\x1c\x7e\x7b\xb5\x99\x7b\xfc\xf3\xf2\x8c\xfb\xe2\x71\x4f\x4c\xda\x2c\x74\x27\xf0\xfd\x71\x9f\x63\xf5\x51\xe2\x5f\x42\xe6\x36\xe1\x01\xe8\x5d\x5f\xf5\x49\xf8\xbe\xc6\xea\x47\x01\xfc\xea\x98\xe7\x42\xf8\x91\x5d\x77\x9f\xbe\x60\x45\xff\x70\xb4\xbf\x0b\xa9\xdf\x5e\xa7\x38\xf7\x81\x7c\xe6\xe8\x3f\xbd\x7c\x85\x41\x7d\xc9\x98\xbf\xe8\xfc\x5f\xb6\xa1\xd7\x37\x59\xec\x6a\x57\x2a\xdd\xb7\x37\xdf\x19\x01\xdd\x6c\xe2\xab\xe4\xed\x76\xf9\xb4\xd7\x3d\x2e\x7d\x8f\x6f\xcf\x09\x78\x9d\xe4\x86\xa7\xd3\x98\x3a\xde\xe6\xbe\x2f\xbd\x3c\xb6\x1c\xef\xed\xe3\x3e\xde\x4d\xde\xbc\xb9\x43\xfb\x2b\x66\xd7\xa9\x0f\xf1\xd6\xe4\x6f\x13\xf8\xeb\x3a\xf9\x8c\xab\xd7\xd9\xdf\x66\xea\x0f\xc6\x71\x2f\x06\xa1\x5f\x70\xd5\xcd\xd2\x5a\xf2\x9c\xa6\xac\xbc\xd7\x31\xf8\xc6\x8f\x6f\xb1\x63\xf4\xea\xf7\xec\xfc\x83\x51\xaf\xb2\xf2\x93\x74\x3c\x50\xc5\x1b\xf1\x7b\x5f\x34\x5e\x79\x91\xbd\xd8\xbb\xe6\xeb\x6f\xdf\x7c\x1c\xf0\xcb\x38\xef\xcd\x13\x87\x39\x3e\x7d\x8a\xc1\xc7\x3a\x94\x94\x75\xd5\xab\x97\xba\xcd\xf8\xa5\xcc\xba\xea\x29\xc3\x3f\xe1\xad\x64\xf9\xe4\xc3\x27\xd8\xef\xb3\xd3\xe9\x2a\xc8\x59\x3e\x99\x3e\x8c\xf8\xf4\xe8\x8e\x9b\x78\x1a\x5f\x54\xf5\x25\xbe\x86\xec\xa7\xab\xad\xf9\x62\xfe\xee\xfa\x6c\x3a\x79\x93\xf7\x6f\x5e\x0d\xa7\xbe\x21\xf7\x09\xd1\xef\x9c\x1e\x78\xa1\x1f\x3c\x43\x84\x1e\x9f\x7e\x27\xac\x38\x4c\x3d\xfa\x7b\xe1\xdd\xc8\xfc\x25\x38\x2c\x6b\x52\xf7\x23\x0b\x9f\xae\xe5\x7b\xf5\x6d\xc0\xd5\xd3\xc5\xa1\x77\x13\xe6\xfa\x69\x10\xfa\xa5\x25\xf8\x51\x8a\x3f\x01\xf0\x6a\x52\x3f\x99\xd7\x85\x6e\x1d\x3c\xaf\x4d\x8c\xdb\x7c\x78\xfb\x5a\x58\x9f\xf8\x75\x17\x58\xf0\x0d\xc6\x3d\x25\xc9\x17\x1c\xfb\x1e\x88\x5f\xa6\x10\xff\xf6\x82\x51\x99\x7c\xc5\xe6\x3f\x26\x02\xbf\x7d\x23\x81\x1e\xb3\xcb\xaf\x7a\xba\x57\xa4\xb8\xf7\x02\xf1\xaf\x67\xba\xf7\xa5\xe7\x59\x21\xe3\xae\x8c\x3c\x8e\xfa\x02\xbf\x87\xfd\x3e\x43\xf3\xd7\x9f\xfe\xf9\xf6\xe7\x9f\x7f\xfd\xe9\xa1\x22\xf7\xfe\x5e\xb1\xed\xce\xa4\x9f\x20\xe8\xff\x37\x19\xfb\x1c\xbc\x95\xe7\x61\xea\xab\xd2\xee\xc3\x73\x22\x9c\xab\xf7\x89\x95\x3f\x2b\x31\xae\xfe\x64\x25\x46\xb2\x72\xac\xdc\x93\xbd\xa2\xf1\x52\xc7\xab\x5e\xac\xfc\x3f\xf6\x08\xf0\xc0\x2a\x2b\xaf\x7e\x79\xe0\x63\xd3\x81\xb9\x06\x52\xf4\xe8\x7f\xbf\x51\xb6\xfc\x7c\xe8\xdb\xdf\x5e\xac\x4b\xfe\xf6\x59\x19\xf1\xb7\x2f\xeb\x88\xa3\x58\x7e\x0e\xe7\x33\x21\xb4\x5c\xf7\x8a\xf5\x17\x62\xe7\x04\x56\xf9\x6e\xe2\x64\xae\xf7\xb4\x02\x72\x7d\x33\xf9\xdb\x87\xc9\x9b\xc9\x9b\x7b\xae\xce\x09\x7e\x7b\xb4\x2b\x9d\x73\xfb\xf4\xf6\x06\xe5\xd7\x67\xb1\xd4\x97\x38\xbf\x77\x46\xc2\x4d\xfe\xcf\xff\x99\xdc\x7f\xf3\xf7\xeb\xdf\xff\xb8\x17\xd8\x38\x23\xf6\x5f\x9b\xf6\xb5\x22\xc6\x15\xed\x32\xeb\x9e\x43\xb8\x4c\xa6\xcf\x1e\xd9\xd6\xd3\xb4\xe5\x66\x68\x3e\x6e\xfb\x39\xfa\xfd\x4b\x19\xd5\x93\x71\x57\xa3\x57\x5d\xdd\xc8\xdb\x32\xeb\x7e\xfe\xfb\x53\x28\x93\x5f\x26\xb3\xbb\xbb\x9f\x7c\x11\x0b\x7d\x1f\xbc\xbf\x23\x2f\x82\xfc\x61\x2c\x91\x7f\xfc\xfc\x22\xc0\xc9\x33\x59\x7d\x15\xc0\xbf\xcf\xfe\x31\x99\x7e\xb8\xf1\xf9\x0f\xcc\xab\x7e\x84\x5e\x3f\x86\xc8\x13\x58\xa3\x53\x91\xae\x99\xcd\x53\xf2\x5e\xbe\x19\x85\x4f\xee\x44\xb5\xcf\x47\xdd\xe1\x5c\x7f\x0d\x0b\x1f\xc5\xf4\x97\xc9\xec\xaa\xc4\x4f\x55\x26\x8b\xab\x57\x4a\x6b\x57\x5a\xb9\x55\x5e\x7d\x31\xff\xc4\x48\x7c\x65\xe3\xfd\xe4\xc3\x4b\xc9\xfc\x53\x3a\x4c\xa7\x2f\x27\xfd\xcf\xd4\xf4\x6f\x4f\xa7\x57\x4e\x99\xc5\x31\x96\xd5\x75\x96\x7c\x4d\xc0\x9f\x42\xfa\xe5\x97\xfb\xab\xde\x19\x3b\x2e\xf1\x79\x91\xf9\xe9\x9f\x3f\x56\x28\x9f\x09\xca\xfb\xb0\xd2\x4b\x2b\xcf\x6f\x1d\xd8\xe7\xc5\x9d\x97\xb1\x78\xfe\xe4\x2b\x38\x8d\x26\xff\xd1\xa6\x7f\xf8\x30\x41\x5e\xd6\xee\x7b\x62\xf9\x7c\xc1\x2f\xff\xf5\x3b\x0d\xef\x93\x51\x61\x5a\x79\x65\xfd\x92\x44\x9e\xb2\x72\xf2\xf6\x6a\xed\x93\xac\xbd\xd5\x14\xe0\x5f\x1f\x3e\xfe\xc7\x47\xcd\xf8\x75\x32\x9d\xde\x9e\xbd\x24\x36\x37\x6f\x71\x2b\xc0\xba\xcf\x11\x7f\x99\x5d\x2f\xec\xe8\xe7\xf7\x79\x96\x3f\xcd\x12\x3e\xdf\xe0\xc3\x52\x7f\x47\xfe\x71\xa3\x3e\xfc\x22\xf1\x9f\x3b\x9e\xaf\x1b\xb4\xab\xae\xdf\x8c\xeb\x1f\x0f\xf1\x11\x59\xe4\x3b\x54\xef\x95\xa0\x27\x1f\x26\xcf\xde\x35\x25\xa8\xeb\xf2\xdd\x35\x22\x79\x37\x99\xfd\xe3\x77\x18\xe6\x2f\x91\x78\x5f\xe5\x71\xe8\x3c\x33\xd1\xfd\xbb\x09\xfc\xee\x9b\x58\x7c\x47\x35\xe5\xbb\xa9\xd1\x7f\x95\x0c\x0f\xa1\xdb\x83\x3c\xff\xe3\x4e\xb6\xf5\x19\xa4\xa7\x66\xf6\xc7\x3d\xd5\x1d\x43\xf1\x52\x67\xe8\x8f\xd9\xe7\x9b\x37\xef\x26\xf0\x1d\x6e\x7f\x6b\x8b\x4f\xfb\x4d\x0f\xc9\xd0\x0b\xc1\xb1\xed\xc5\xf1\x0f\x54\x1f\xef\x05\x64\x6d\x58\x35\x56\x8c\x79\x71\xfc\xfa\x2a\xd5\x13\x10\x8f\xe5\xa2\x31\xa9\xb3\xb3\xd2\xf5\x4a\x3c\x8b\x6f\x35\xac\x37\x5d\x10\xd6\xde\x9b\x6f\x57\x35\xbf\xcc\x70\x5f\x09\xfc\xcd\x2d\xd5\x9d\xc1\x4f\x6a\x5e\x4f\x40\xe4\x59\x2e\xa4\xf7\x76\xf8\x64\xdc\x29\x73\x9a\x2f\x3a\x74\xaf\x61\xc5\x55\x58\x28\xcf\x7b\xb9\x13\x7c\x2f\xab\xc8\x6e\xb7\xae\x92\xd9\xb7\x30\x7a\x12\x9a\xbc\xc8\x81\x2f\x02\x93\xdf\x1f\x8c\x7c\x2b\x00\xb9\x1f\x74\xdc\x6d\x5c\xdd\x0d\xf9\x5e\x17\xe3\x3d\x9d\xf6\x39\x16\xaf\xe1\x8c\x63\x95\x65\x68\xf9\x9e\x34\x0a\xd6\x57\xeb\x17\x77\x49\xfe\x0d\x1d\xb4\x9c\xa8\xca\x2d\xc7\xfb\x1e\xce\xf7\xf7\xca\xe0\xbf\x77\xa3\xb5\x65\x7f\xcf\xee\x9e\x3c\x4a\xbd\xbe\x96\xeb\x4f\xfe\xfe\xeb\x6b\x55\x41\x78\xaa\x85\xe6\x1b\xa7\x68\x3e\x93\x0d\xaf\xf6\x77\x5e\xeb\xc5\x6f\x67\xaf\x87\xcf\xbc\x9a\x5b\x9f\xc0\xc3\xaf\x02\x3f\x86\x62\xb7\x72\xc8\x17\x4b\xe4\x56\x69\x25\xd5\x53\x2b\x7a\x7b\xfa\xee\x1a\x0d\xbe\x9b\x9c\xaf\xde\xeb\x13\x5f\x6e\xaf\x26\x1f\xc6\xbf\xab\xbf\x7f\x6e\xf2\xaf\x6c\x1f\x5f\xff\xc7\x64\xf6\x65\x5c\xfa\x38\x6b\xf6\x69\xf4\x0f\x86\x9a\xe7\xe7\x93\xfa\x4f\x6f\x9d\xe0\x8e\x8f\xf2\x4a\xab\xf2\xae\x5e\xea\xed\xcf\x77\xc2\x92\x2e\x08\x63\xef\x01\xf1\x5f\x7e\xb9\x86\x59\xe7\xc9\x7f\xfc\x80\x9a\xde\x8f\x56\xce\xd3\xe9\x2d\x40\x71\x82\x7b\xb5\xe7\x17\x67\x3f\x09\x43\x5f\xa5\xf5\xb7\x8a\xb3\x9a\xbf\x96\xbd\xaf\xe1\xe1\x93\x1d\xdf\xe1\xe2\xcb\x96\x79\xf2\xcb\xc3\x02\xdf\x30\xd0\xff\xf1\x4d\xbb\x70\xb9\xe7\x0c\x5e\x43\x0c\xe2\xe9\x09\xa2\x7f\x25\x39\xa6\xaf\x23\xc7\x73\x17\x51\x66\xdd\xb7\x64\xef\xf2\x5c\x29\xae\xb3\x26\xbf\xdc\xc7\xed\x5f\xe9\x9b\x6e\x8c\xa1\xb2\xb2\xb3\x4a\xf7\x4f\xc2\x9b\xfe\x75\xbc\xf9\x51\x12\xdd\xa9\x85\x8e\xf9\xd3\x33\xdc\x5e\x43\x3a\xcc\x72\xa2\x7f\x25\xed\xfe\x47\x65\xe7\x2e\xf9\x5e\x65\x47\xfa\x57\xd8\x91\xbb\x41\xe5\x6b\x68\xbe\xf7\xfa\x7a\x17\xa6\xde\x9f\x44\x5e\xff\x54\xb6\xe4\x9b\x51\xe4\x2b\xe8\x7b\x28\x3d\xc7\x73\xc3\xd4\xff\x53\x11\xf9\x7f\xd6\x7f\xfd\x51\xb4\xbb\x86\x74\xc0\xae\xb2\xb8\xa9\xff\x2c\xa4\xeb\x1f\xe1\x7f\x92\x99\xd7\x68\xd9\xdd\x86\xeb\xfd\x5d\xdc\x02\x53\x27\x8b\x9f\x46\x93\x1f\x77\xf5\xa5\xb4\x7e\xdc\x59\xf5\xf1\x4c\xce\x9d\x82\xc8\xed\x1b\x32\x8f\x20\x66\xff\x78\x49\xe0\xef\x54\x67\xc7\x99\x77\x59\x7c\x2b\x1a\x66\xdd\x3d\x29\x19\x51\xbe\x3b\xeb\xe3\x41\xe2\xeb\x98\xd7\x69\xf1\xdd\x70\xfa\x5b\x41\xc0\x15\xf1\x3b\x98\x7d\x65\x3f\x1f\x31\xbb\x8e\x79\x9d\xd9\x1f\xa1\xbd\xd2\x05\x4e\xee\x8b\xd3\x17\xbc\xbe\xa3\x5e\x65\xd6\xbd\x5e\xd0\x1e\xa2\x0f\xe5\x49\xf6\xf8\x4a\x85\x99\xfc\xf7\x7f\x7f\x8e\xf6\x97\xe9\xc3\xf7\xc7\x02\x4f\xb3\xd0\xc9\x2b\x3d\xd3\x2d\xa9\x61\x52\x22\xac\xf2\xd8\xba\xbc\x62\x23\xe7\xcf\x4a\x51\x5d\x58\x3b\xc1\xe3\xc0\xbf\xc3\xcf\xba\x8e\x8e\x55\x79\x13\xf8\xaf\x5f\x3c\xbb\xb3\x9d\x1b\x0e\x52\xe8\x07\xcf\x0a\xec\xfd\xbb\x67\x5c\xba\x53\x82\xbd\x93\xcb\x5d\x13\xc0\xd9\xf3\x91\xb7\x5e\xc1\xaf\xf7\x32\xb3\xab\x88\xff\x3a\x39\x4f\xa7\xaf\x6c\x7a\xdd\x70\xbe\xfa\x99\xb7\xe7\x57\x35\xf7\xec\xd2\xb3\xa2\x5f\x9f\x53\x67\xf6\x3a\xea\xec\xbc\xd3\x1f\x48\x9c\xe7\xa3\x1e\xc4\xef\xfc\x5c\xf4\xfe\x87\xf7\x8f\x3c\xdf\xff\x1d\x8c\x6f\xdc\xf9\x1a\xd2\xbf\x1f\xe5\x97\x10\x44\x9f\x23\x78\x55\x83\x87\xf2\x9f\xe5\x44\x72\x38\x78\x2f\xf5\x8c\x1e\xdc\xc4\x2f\xaf\xdb\xcf\xd5\x1e\x3e\x81\xfb\x95\x43\x9f\x77\x17\xac\xcb\x30\x91\x6b\xab\xac\x9f\x00\x7a\xa1\x17\x75\xaf\x46\x32\xf9\x30\xe1\xad\x3a\x78\x9f\x58\xfd\xb3\x28\xe5\xf6\xfe\x97\x27\x9b\xff\xf2\xac\xd4\xd7\xc0\xbb\x61\x95\x7f\x0d\xfc\xed\xfd\xeb\xc0\x7f\x53\xc2\xbe\xc3\xf8\xbd\x22\x5c\xfc\xb3\x98\xba\x7f\x99\x19\xf9\x0e\xfd\x7d\x51\xed\xbe\x7f\x99\xd7\x30\x71\x2c\x49\x5e\x17\xf8\xee\x92\xe4\x0f\x94\x23\xbf\x27\x9e\xfd\xe3\x4a\x93\x8f\x01\xd8\x73\x4b\xf2\x79\x1b\xe2\x75\x20\xee\x2f\x3f\xf9\x65\x72\xfe\xd2\x67\x7e\x3d\x22\x79\xf1\x10\xd1\x83\xc9\xfb\xf0\xe1\x05\x93\x98\x58\xfd\xee\x36\xe4\xd5\x8d\xc4\x4f\x36\x6d\x76\x47\x62\xee\x6d\xe6\xde\x81\x8f\x7b\xb6\xe6\xde\xb8\x32\xeb\xee\x3d\x3e\x3f\x7d\xf8\x8a\x4e\xef\x43\xed\xf6\x26\x6b\xf0\x33\x2d\xb3\x63\x2b\x8d\x46\xbd\x28\x1b\xef\xe7\xd7\xd4\x75\x1f\x8b\xc1\xef\x26\xb3\xbb\xcd\xa2\x1f\xeb\xf3\xbe\x7e\xd6\x17\x3d\xaf\xd7\x04\xca\xae\x17\x7b\xb5\xf7\xff\xe9\xe6\xef\xd7\xcd\xff\x27\xf4\x72\xf2\xcb\x87\x7b\x51\xf9\xfd\x30\xe0\xd9\xd0\xd7\x6b\xdc\xcd\x92\xfd\xb1\x3a\x77\x13\xca\xff\xab\xb4\xee\x47\x9a\x74\x3f\xd4\xa1\xfb\x5f\x50\xbb\xdf\xdd\x8f\xfb\xa1\xa6\xdb\xf3\x40\xe9\xa9\xa0\x7f\xa3\xfb\xd6\x54\xc1\xdb\x2f\x3a\x76\xaf\x89\x67\x46\x76\xff\x58\x03\xee\xf7\x14\x15\xbe\x10\xf7\xbb\xda\xfb\x8c\x4b\x23\xaa\x4a\x96\xbf\x92\x32\x3f\x00\x7c\x14\xfb\xaf\xeb\xf2\xcf\xbf\x53\x2d\x3f\x6e\xe3\x7f\x47\x3d\xc7\x09\x3f\xda\x54\xfc\x97\xb0\xf8\x91\x0b\xff\x53\x5c\xbe\x89\xd0\xff\x43\x2c\xbe\x99\xa6\xff\xcd\x53\x12\xff\x9a\xd0\xe7\xcf\x78\x62\xe2\xef\xe7\xe9\xf4\x1f\x93\x0f\x5f\x90\xf1\xfb\xdb\xa2\x7f\x8e\xa2\x6e\x5e\x7a\xed\x8f\x14\x75\x9d\xc0\x2a\x0f\x59\xf5\xe7\xef\xe7\x4c\xfe\x9c\x2d\x72\xfa\xb1\x87\x24\x79\xb1\x55\x87\xed\x9f\x87\x82\xff\x57\x9c\x30\x28\xbd\xdc\xb3\xea\x8f\xdd\xd8\xab\x1d\xb4\x9c\xda\x2b\x7f\x58\xa3\xde\x4d\xe2\xb1\x44\xf7\xa2\xe6\xbf\xce\xd9\x5c\x7e\x7e\x37\x1a\xaa\xeb\xc4\xfb\xdf\x05\xba\xae\xf7\xf4\x8d\xeb\x9d\x5e\x38\x8b\xfe\x75\x05\xbf\xbb\xca\x8f\x59\xa7\xca\x4b\x5d\xc2\x6b\x43\xe7\x66\x4e\x43\xbb\xa9\xbf\x99\x51\x7f\xea\x56\x5e\xc9\x78\xa7\x90\xfc\xf2\xf9\xe4\x7b\xe7\x9c\xf3\xd2\x3b\x85\xcf\xbe\xf5\x76\xef\xdb\x1a\xd5\xdb\x37\xb7\xaf\xaf\xbf\xf9\xf9\xe3\xef\x28\x7d\xf9\xb6\xec\xdb\xfa\x97\x26\x0d\x9d\xcc\xf5\x5e\x1c\x54\x39\xa5\xe7\xa5\x6f\x7e\x7e\x45\x3a\x7a\x25\xce\xdb\x67\x5f\xe9\x7c\x8f\xc3\xef\x49\x19\x9f\x4c\x27\x6f\xfe\xfe\x9f\xb3\x5f\x11\xe7\xe9\x77\xee\x5f\xf8\xd1\xa5\x3b\xb8\xc4\x61\xda\xf4\x7f\x14\x2a\xcb\xaf\x20\x72\xa7\x41\x7a\x97\x0d\xb7\x34\xfe\xcd\xdf\x9e\x7d\x57\xf3\xeb\xec\xf8\x43\xf0\xff\x1b\xfc\x2b\xb2\x5a\xfe\x0a\xff\x0e\x72\x7e\xc9\xff\x3f\x06\xab\xf5\xe2\xd7\xcd\xe2\x77\x61\xf5\x9d\x4c\xfe\xa4\x5a\xd3\xc9\x9b\xdf\xb1\xec\x1f\x2a\xe7\x7f\x5b\xa3\xbf\xce\x61\x18\x46\xbf\x4a\x89\xd7\x1e\xcb\xff\xf3\x85\x10\x97\x57\x87\x10\xff\xf3\xa7\x96\xbe\x4e\x3f\xed\x4f\x1a\x42\xfc\xa9\x0e\x7d\xfd\x0b\x0f\x90\xd2\xda\x2b\xcf\x09\x7d\xe9\x46\xef\x9f\x48\xbf\xbd\xfa\x70\xff\xa8\xd0\xdf\x67\x2f\xcf\x9a\x3d\x99\xf5\x92\xb4\xdf\x3f\x8a\xf4\x2f\x61\xd9\x4b\x31\xfd\xf3\xa3\x4e\x7f\xc2\xc0\xb4\xb6\x6c\x3c\xf6\xac\x1f\x0a\x44\xef\xea\xe2\x87\xe7\x51\xd5\x58\x7c\x7d\x8a\x6f\x6d\xd9\xd5\xf3\x2f\xc2\xdd\x23\xf0\x47\x5f\xf1\x80\xc1\x87\x0f\x13\xf4\x1b\xf4\xb9\x02\x9f\x7c\x98\xfc\xd7\x3f\xbf\x37\xa6\xbc\x7d\xa7\xf6\xd5\xf2\xff\xe9\x87\xa8\x9e\x59\xa0\x8f\xdf\xc1\x0d\xc7\xef\xdf\x86\x93\xff\x98\x7c\x31\xe9\xd7\x49\x78\xff\x68\xcd\x6d\x2b\x0f\x98\xbc\xfd\xfb\x03\xb5\xc3\x7f\x3c\xfd\xa6\xe5\x3f\xff\xf0\xc8\xf5\x9b\x1d\xfd\xc9\x63\x8b\x7b\xfe\xbc\xc5\x7d\x87\x09\x9f\xbe\xa4\xfc\xd5\x2f\x6e\xdf\xe9\xa3\x7f\x5c\x08\xb9\x73\x7e\xe0\x85\x39\x3f\x1a\x32\xfe\xe7\xb3\x90\xf1\xf5\x74\xb8\x73\xc6\xe0\x0e\x1d\xac\x3c\x8f\xc3\xf1\x07\xb9\xf1\x8f\x3f\xc4\xf5\x63\xe4\x78\xd5\x7a\x95\x57\xfb\x0f\x3f\xcf\xf2\x16\x7e\xf7\xd9\x2f\xb5\xbc\x27\x48\x0a\xa8\x3b\xe5\x37\x9c\x06\x92\x4c\x2a\xaf\x3b\xa3\xf2\x39\xb8\xd9\x1f\x0b\x0e\xf9\x63\xc1\xa1\x3f\x00\xee\x6b\xe4\xbe\x73\xd0\xe9\x1e\x06\x56\xeb\xb9\xf8\xd5\xfa\xde\xb5\xc9\xaf\xda\x45\xe9\x55\xe1\xe0\xbd\x9d\xa1\xc8\xb3\x8a\xef\xcd\x61\x7d\x3f\xee\xcb\x57\xe1\x9e\x95\xa1\xff\xff\x67\xef\xdd\xdf\xda\xc8\x91\x05\xd0\x9f\x37\x7f\x85\xc2\xce\xc6\x76\x30\xc6\x36\x6f\x88\x93\x63\x1b\x33\xe1\x0c\x79\x5c\x60\x5e\x17\x38\x3e\x8d\x5b\xb6\x7b\x62\xba\x3d\xdd\xed\x00\x9b\xb0\x7f\xfb\xfd\xf4\x6c\xbd\xbb\xdb\x90\x99\xb9\x7b\x96\xef\x9b\x09\xa8\xa5\xaa\x52\xa9\x54\x2a\x49\x55\xa5\x20\x7c\xd4\x14\xdd\x29\x84\x48\x4e\xa3\xb1\x34\xb2\x96\x65\x06\x38\x39\x51\x8c\x15\xb3\x68\x52\xad\x9c\xc1\x38\xf0\x66\x60\x1e\xc5\x29\x88\xd1\x86\x22\x49\xa1\x0f\x84\x09\x0c\x3e\xc1\xfb\xb9\xe7\x37\x4c\xe9\x09\x0d\x40\x85\x96\x3f\xe0\x86\xce\x9e\x2b\x8d\x3f\x07\xf0\x16\x3f\x6f\x91\xdc\x87\xa3\x33\x7c\xe0\xde\x8d\xa1\x67\xcb\xa2\xe0\xe2\xc1\x9e\xce\x02\xc2\xcf\x66\xd3\xa0\x61\xd9\x27\x03\xb3\xd9\xa7\x62\x53\xe3\xae\xd5\x7c\x17\x2d\xb0\x03\x9d\x60\x15\x76\x3a\x60\xaf\x18\x03\xd2\x76\xd3\x02\x00\x11\x5e\x08\x46\x18\xc5\x37\xde\x4c\x07\xf2\xba\x38\x88\x1b\xd4\x18\x3f\x3f\x90\x94\x19\x3e\x16\x66\xae\xa4\x56\x87\xf8\x25\x88\x35\x0c\x74\x0d\x62\xa8\x05\x85\x29\xc1\x69\x13\x83\x28\x7c\xe7\x85\xde\x04\xc6\x0d\x3f\x48\x10\x2c\x9b\x40\x98\x04\xbc\x17\xe0\xcc\x7d\x20\x8d\x00\xa6\x00\x10\x0a\xac\xf2\xec\x9c\x8c\xcd\x66\x31\x43\x00\xed\xd2\x8f\xa2\xd1\xc2\xcd\xbe\x1c\x54\x5b\x85\x50\x2d\xd2\x31\x1b\xeb\xa5\x31\x15\xd3\x17\xc9\x24\x7e\x2c\xa6\x56\xc1\x3e\xc5\x77\x9f\xd3\xc7\xe1\x6a\x17\xc3\x44\x6e\x7c\xde\x06\xbe\x0f\x73\x72\x17\xbb\x3b\xb6\x69\xd0\x37\x80\x47\xdd\x68\x0d\x36\x0d\x6b\x08\x83\x64\x59\x5e\x4c\x56\x2d\x99\xea\xae\x5c\x2c\x38\x61\x2d\xae\x65\x4c\x65\x2d\xfe\xe0\x83\xf4\x7d\xe3\xf1\xba\x9e\xcc\x5a\xfc\xc1\x07\xed\x5a\x43\x5c\x9a\xd3\xd0\x0f\x92\xb9\xde\x10\x95\xba\x1b\xde\x69\x8d\xee\x72\x30\xe9\x58\xdc\x0d\xf8\x5d\xb1\xd6\x30\xbb\xac\x2e\x00\x80\x5c\x17\x5b\x60\xd0\x0b\x75\x27\x18\xb4\xad\xd3\x9a\xa3\x42\x6b\xab\x07\xb3\xf8\x02\xa3\x09\x06\xb5\x3c\xa6\x8e\xfa\x25\x57\x67\x03\x04\x2e\x89\xe4\x97\xc2\xed\x92\x69\x74\x4b\x36\x12\x36\x64\xe6\x24\x40\x05\x36\x4d\x79\xb7\x58\x7f\x9d\x0d\x32\xa7\xe5\xdf\x67\x8b\xbc\xa4\xba\xfd\xb7\xdd\x23\x2f\xc9\x0f\x8b\x69\x6a\x4c\x9a\x83\x36\x6d\xc8\x9a\xdc\x68\x1b\xb2\x80\xf1\x8d\x5d\x89\xf4\x5e\x74\x23\x67\x83\x54\x66\x77\x67\x9e\xc4\xe6\xc3\x34\x8e\xe0\x0f\xd9\x28\x2e\x39\x30\x4b\xee\x14\x97\xb5\x42\xbe\xf5\x56\x11\xcf\x00\x64\x4b\x5f\x7b\xa3\x4f\xc8\xa0\xa6\xfa\xfc\xf1\x3b\x44\x47\x8f\xff\x9d\xb7\x88\x25\xba\x2d\x6e\x0c\x8b\x37\x93\xf7\x82\xc5\xdb\xc9\x1b\xc0\xe2\xed\xf4\x1d\x20\x7b\xd1\xe6\x09\x37\x81\x04\xd4\x32\x23\xbe\xd4\xfe\x6d\xe9\x3d\x41\xf9\x0d\xdc\xf2\xa8\x4a\xef\xe0\x96\x46\xb5\xcc\x16\x6e\xd9\x75\x7e\xa9\x3d\xdc\xb2\x7b\xd3\x3f\x66\x0b\x57\x7a\x07\x67\xda\x8f\x19\x42\xbf\x31\x1c\xf2\xb5\xb0\x59\xcd\x42\x3d\xcd\xb0\x0c\x79\x59\x5d\xb0\x68\x5c\xa7\x05\x16\xfa\x5a\x18\x96\x29\xb4\x9d\xc0\xb9\x2b\x4e\x8f\x9d\x96\xe2\xdb\x0e\xb6\xd5\xb3\xc2\xe2\x35\x4a\xc2\x24\x5b\xbf\x1c\xb0\x6a\xd0\x50\x0e\x64\x7a\x03\x68\x86\x88\x3e\x2e\xb1\x4d\x5b\xcc\x4a\x6c\xd2\x54\x3d\x9d\xc0\xb4\xb7\x18\x8f\x61\x6c\x0c\x46\x2a\xbe\x6b\x8c\xe1\x38\x86\xc9\xb4\xaa\xfb\x86\xb3\x4b\xea\x3f\x72\x0f\xfb\xa7\xed\x45\x47\x53\x2f\x5e\xc2\xf1\x4f\x0c\xfa\x6a\x21\x9b\x5f\x3e\x56\xce\x4b\x38\x43\x93\xb2\xea\x82\x45\x1d\x22\x0f\x0a\xee\x38\xd1\xbe\x37\xcb\x89\x42\x89\xaa\x93\xad\x70\x1d\x8c\x67\xde\xc4\x74\x9b\x44\x91\xbf\x7e\x0d\x5a\xbb\x75\x30\x9e\x80\x8e\xbe\xa5\xc9\xea\xec\xd5\xc0\x0b\xd0\xbc\x6b\x8d\xc7\x75\x70\x3d\xb1\x83\xe3\x95\x84\x69\x4b\xb3\x42\xa0\x3d\xf9\xcc\xb8\x0f\x9f\x67\x87\xe9\x81\x92\x9b\x16\x33\x1b\xbc\xee\x80\x8d\x26\x66\x30\x78\xd5\x01\x1b\x3b\xc6\x3c\xd5\x88\xaa\x39\x58\x03\x1b\x4d\xd7\xc6\x3d\xbb\xff\x47\x50\x37\x33\xa8\x9b\x46\xa8\xd7\x0c\xea\x66\x09\xa8\x7b\x19\xd4\x3d\x23\xd4\x39\x58\xed\x80\x5d\x5d\xc4\x79\x1f\xf6\x4a\x60\x6b\x35\x33\x74\xad\x66\x29\x7c\xbc\x77\x2d\xf5\xf6\xc2\x8a\xd0\x28\xd8\x98\x76\xb3\x9c\x51\x59\x26\x72\x66\xe9\xb1\x2a\x77\x42\x9b\x4c\xee\x2c\xd4\x5b\x9a\x1a\x1b\x39\x3b\xa5\x9d\x29\x65\x9d\xfa\x9a\x13\x2b\xa9\x40\xda\x74\x42\x6a\x97\x80\xb4\xe5\x84\xb4\x59\x02\x92\x79\xca\x30\x48\xbb\x25\x20\x19\x9f\x3e\xcd\xf8\xb4\x5d\x02\x54\xdb\x98\xed\x9a\xc0\x7a\xd1\x01\xff\x2a\xc3\xf4\xb6\x83\xeb\x08\x56\x19\xb6\xb7\x1d\x7c\x47\xb0\xca\x30\xbe\xed\xe0\x3c\x82\x55\x86\xf5\x6d\x07\xef\x31\xbf\xca\x30\x7f\xc3\xf8\x86\xee\xb2\xf3\xd1\x3d\x21\x8c\xa8\x9e\x76\xfa\x6e\x18\x79\x23\xf8\x09\x06\x60\x15\xb4\x72\x52\xec\x07\x48\x4f\xb6\xcd\xa6\xc7\xd8\x40\xee\x8d\x97\x8e\xa6\x38\xdb\x37\xc7\x72\x85\x69\xc7\x2b\xa0\x84\xd7\x50\xda\x66\xa5\x8e\x97\x0c\x10\xd6\x4e\x07\xac\xb5\xec\x0f\x48\x60\xc2\x2c\x2a\xd2\xd5\x29\xcb\x8b\x16\x66\x96\x19\x67\x44\x1e\xcb\xa4\x75\x9d\xf6\xd5\xc1\x5c\x83\xa5\xef\xca\xfe\xaf\x0a\xd9\xb7\x16\x00\x93\xbc\x7e\x7b\x01\xb8\xce\x17\x80\xeb\x7f\x03\x01\xb8\x7e\xbc\x00\xb4\x9a\x66\xbb\xe4\x4f\xb6\x30\x72\xc3\x0e\x60\x1c\x47\x71\xb5\xf2\x63\xf8\x29\x8c\x6e\x43\x70\xf6\xfd\x29\xf0\xd8\x5e\x64\x1f\xfc\xc3\x6f\x54\xea\x60\x5e\x20\xa4\xc5\xba\xbb\xa8\x92\x15\xe2\xd5\x2b\xfc\x6e\xf9\x57\xac\x54\x5e\xbd\x42\x1d\xff\x0a\xae\x27\x07\x05\xf6\x47\x3e\x0e\x8d\x3a\x4b\xbd\x74\x51\x64\x77\xf4\xd4\xd7\x5f\xc5\xce\xaa\xf2\xc3\x37\x9a\xe1\x32\x9e\x29\x05\xcf\xff\x72\xb1\x57\xac\x13\x78\xd5\xe0\x6c\xbe\xaa\xfa\xb4\xcb\x0d\x2a\x07\x65\xc0\xdd\xe5\x82\x3b\x2d\xc1\x99\x3f\xe3\xe2\xef\xa9\x06\xe1\xcd\xbf\xcd\x28\x00\x7e\x28\x6a\x99\x1e\xcb\x1c\xff\x3a\xdb\x58\xc6\xc0\xd5\x66\xcb\x72\x6f\xf3\xe8\x13\x9b\x24\x1a\xa7\xa7\x30\x81\x69\x8e\x3a\x2a\xe5\x93\x54\xe2\x3e\xbd\xc4\x8d\x66\x39\xe7\xd5\xf2\x37\x7a\xe5\x8f\xe1\xca\x5f\x97\x3b\x4e\x6f\x9b\x39\xb5\x6c\xe7\xb1\x7a\x14\xcc\xd2\xc7\x63\xf9\x67\xdc\xf7\x4e\x42\xd9\x2b\x9a\xea\xa9\xac\x52\x6d\x32\x83\x9f\xe1\xac\x08\x24\xb4\x48\x5e\x20\x58\x57\x45\x56\xd7\x04\xa6\x84\xef\x67\xe9\xfd\x6c\xa9\x40\x36\xf0\x0a\xb4\xc0\x1b\xd0\x02\xfb\xa6\x80\x1a\x49\xcb\x1a\x13\x2b\x2a\x6e\x15\x05\x33\x0f\x26\x30\xfd\x30\xc7\x4f\xcd\x56\x46\x19\xfd\x95\x3a\xa8\x5c\xcf\xa2\xd1\x27\x93\x2e\x2b\x98\x05\xd4\xe6\xf4\x52\x98\x80\x45\xe8\xc3\x78\x16\x84\xb0\x0c\x11\x5b\x06\x22\x0c\x3a\xaf\x38\x17\xbc\xb8\x00\x7a\xf9\x1c\x37\x48\x7a\xb3\x20\xfc\x14\x84\x13\x1e\x8a\xf9\x0f\xd0\x26\xf6\xad\x7d\xa2\xa9\x24\x60\x18\x95\xba\x00\xad\x58\xe6\x1c\x98\x12\x85\x71\x0a\x27\xc5\x22\xf7\xcc\x86\x9e\xd4\x65\xf5\xdc\xda\xa1\x4a\xaa\x72\x5a\x82\x9a\x53\x3d\x28\xda\x45\x08\x07\xcc\x0e\xe2\x5b\x57\xe0\x95\x59\xf1\xbc\x11\xaa\x68\x4e\x80\x24\xac\xcf\x85\xfc\xce\xa9\x05\xee\x8b\xbe\xd1\x94\x78\x9f\x61\xa6\x72\x8b\x2f\x63\xd8\x43\xe7\x17\x67\xc2\x18\x53\x8b\x5f\xad\xb9\x8a\x73\x5d\xf5\xd2\x28\x5e\x8a\x52\x83\x2e\xa6\xc4\x7f\xfd\x9a\xc3\x41\x73\x0f\xb2\x66\x94\x66\xfa\x2e\x9b\x48\xba\xfa\x08\xb7\xf2\x6a\xb4\x5c\x15\xcd\x3a\xfa\xe8\xb2\xfc\xa2\x74\x34\x4f\x79\xcf\xf0\x23\xd5\x1f\xde\xf5\x8e\xdf\x1f\xbf\xff\x1e\x29\x77\x4e\xf8\x45\xf3\xae\xb9\xd1\x6c\xd6\x01\xfa\x77\xfb\xe8\xaa\x8e\x4b\x36\x77\x37\x70\xc9\xe6\xee\x36\x2f\xd9\xa5\x25\x7b\x57\x75\xa9\xf5\xd6\x5e\x0b\x7f\xd9\xea\x1d\xd2\xba\x5b\xbd\x23\x5a\xc2\xe0\x6d\xf5\x69\x9d\x7e\x5b\x6d\xdd\xdf\xa4\x5f\xb6\x78\xdd\x1d\x5a\xb2\x43\x4b\xb6\x29\x7d\xdb\xcd\x0d\xa5\xf5\x76\x8b\x7e\x69\xb1\xd6\xdb\x9b\x3d\x52\xb2\x35\x60\x25\x3b\xb4\xce\x4e\x53\x6d\x7d\xb8\x4d\xbe\x0c\x36\x59\xdd\xc1\x0e\x2d\xd9\xe5\x25\x5d\x5a\x72\xa8\xb4\xde\x69\x92\x5e\xee\x34\x59\x2f\x77\x5a\xa4\x97\x3b\xad\x16\x2b\xd9\x20\xb8\x77\x36\xbb\x6a\xeb\x2e\xc1\xbd\xd3\x6b\xb2\xba\x03\x42\xf9\xce\xd1\x06\x2d\xd9\x6b\x12\x78\x7b\x4d\x95\x6b\x7b\x1b\x7d\xf2\x65\xa3\xcf\xea\x6e\xd2\xba\x9b\xbb\xbc\xe4\x90\x96\xa8\x94\xef\x6d\xd1\xba\x5b\xac\xdf\x7b\xdb\x6d\x52\xb2\xcd\x71\xef\xd2\x3a\xbb\x2d\xb5\x75\x8f\xe2\xee\x71\xdc\x74\x74\xf7\xfa\x1c\x5e\x9f\xe2\xee\x6b\xb8\x07\x14\xd3\x80\x61\xea\xd2\x5e\x76\x51\x2f\x49\x09\xed\x5d\x17\xf5\x4e\x6a\xdd\xa5\xbd\xec\x6e\xf2\xba\x9b\x3b\xb4\x64\x97\x97\xf4\x68\x89\x8a\xbb\x4b\x25\xa1\xbb\xc3\xc6\xa7\x4b\x7b\xd9\xdd\xe5\xf0\x68\xef\xba\x3d\x0d\x37\xed\x65\x97\x4b\x6a\x97\x4a\x6a\xb7\xcf\x71\xd3\x7e\x77\xb5\x7e\x77\x69\xbf\xbb\xbc\xdf\x3d\xda\xef\x5e\x93\x51\xd3\xa3\xfd\xee\x69\xfd\xee\x6d\x1c\xd1\x2f\x4c\xd6\x7a\x94\x13\xbd\x4d\x0e\x8f\x8e\x77\x4f\xeb\x77\x6f\x8b\xc8\x5a\x6f\x8b\xcd\xe6\xde\x2e\xa1\xa6\xc7\xfb\xdd\xeb\x13\xde\xf4\xfa\xea\x2c\xe9\xd1\x3e\xf5\xfa\x6c\x7e\xf7\x37\x06\xb8\xa4\xbf\xc9\x64\xb7\xbf\xb9\x4d\x4b\x76\x95\xd6\xfd\xcd\x2e\xfd\xc2\x5b\x6f\x6d\x91\x12\x4e\x4d\x9f\xf2\xbc\xaf\xf1\xbc\x4f\x35\x49\x9f\x6b\x92\x7e\x9f\x62\xea\xf3\xd6\x7d\xda\x5a\xe3\x79\x9f\xf2\xbc\xcf\x79\x7e\x48\xb9\x76\xb8\x99\x95\x1c\xd2\x12\xb5\xf5\x61\x9f\x50\x7e\xd8\xef\xb2\xba\x87\x04\xde\xe1\xe1\x26\x2f\xd9\xa6\x25\xdb\x4a\xeb\xc1\x06\xc1\x34\xd8\x60\xa3\x3b\xd8\xd8\xa4\x25\x0c\xde\x80\xca\xee\x60\x73\xa0\xb6\xee\xd1\xd6\x3d\xde\xba\x47\x5b\xf7\xf6\x78\x49\x8f\x96\xa8\x5c\x1b\xf4\x89\xae\x1e\xf0\x11\x3b\x6a\x91\x92\xa3\x16\x6b\x7d\xb4\x41\x46\xe1\x68\x63\x4b\x69\x7d\xb4\xb1\x43\xbf\xec\xf0\xba\x7b\xb4\x84\xb7\xde\x21\xf4\x1d\xed\xa8\x94\x1f\xed\x12\x39\x3a\xda\x65\x3c\x3a\xda\xdd\xa6\x25\x1c\xde\x1e\xad\xb3\xb7\xa3\xb6\xde\xa3\x98\xb8\x6e\x39\xa2\xe3\x7d\xc4\xc6\xbb\xd5\x6c\xe3\x11\x6b\x35\x37\x14\x49\x6d\x35\x37\xda\xf4\x4b\x9b\xd5\xdd\xd8\xa6\x25\x3b\xbc\x64\x8f\x96\xec\xa9\xad\xb7\x76\xc9\x97\x2d\xda\xcb\x56\x6b\x1b\xd3\xd9\x6a\x1d\x51\xe9\x6b\x6d\x6c\x61\x79\x44\xff\x2a\xad\x77\x5a\x04\xf7\x4e\x8b\xf6\xbb\xb5\x43\xa9\xd9\xd9\xe0\x25\x5b\xb4\x64\x6b\x43\x6d\xbd\x43\xbf\xec\x6c\xb0\xba\x64\xbc\x5b\x3b\xbd\x2d\x5e\xb2\x43\x4b\x0e\xd5\xd6\x84\x47\xe8\x5f\x56\xb7\x4f\x7a\xb9\x73\xc8\xe1\x1d\x1e\xd2\x12\xb5\xf5\x6e\x13\xcb\x51\x6b\xb7\x49\xa5\xa5\xb5\xdb\x25\xad\x77\xbb\x8c\x13\x7b\x6d\xc2\x89\xbd\xb6\xb2\x12\xb5\xf6\xda\x3b\xf4\xcb\x2e\xab\x4b\xfb\xbd\xc7\x47\x61\x8f\xf2\x7c\x6f\xa3\xa7\xb4\xee\xb6\x48\xeb\x6e\x8b\xb5\xee\x91\xb5\xbe\xd5\x6b\x32\xca\x7b\x64\xde\xa0\x7f\x95\xd6\x3d\x3a\xba\x3d\x36\xa3\x5a\x54\x83\xb6\x7a\x6c\x5d\x6c\xf5\x36\x09\x35\xbd\x4d\x95\xf2\xde\x36\xe9\x77\x8f\xf3\xfc\x90\xe8\xc0\x16\x9f\xf1\xad\xc3\xa3\x01\x29\x39\x52\xc6\xbb\xdd\x24\x5c\x6b\x37\xd9\xea\xdf\x6e\xb6\xbb\xa4\xa4\x3d\x60\x25\x44\x7e\xda\xcd\xed\x0d\xb5\xf5\x36\xad\xbb\xcd\x5b\x1f\xd2\xba\x03\x5a\xb2\x41\xe1\x6d\x34\xdb\x0a\xee\x8d\x26\x99\x25\x1b\xcd\x3d\x4a\x67\x77\xb7\x89\x39\x81\xfe\xe5\x25\x3d\x5a\xa2\xf0\xbc\xbb\xdb\xde\x22\x5f\xda\xb4\xee\x51\xaf\x85\x7b\x89\xfe\xa5\x25\x03\x32\x0a\x47\x83\xa6\x82\xfb\x68\xd0\xa6\x5f\xda\x1b\xac\xee\xd1\x11\x29\x61\xb3\xe4\xe8\xe8\x08\xd3\x77\x74\x74\xa4\x8e\x37\x5b\xec\xd1\x2f\x8c\xeb\xcd\x6e\x73\x8b\x95\x6d\x67\x65\x7d\x56\xa6\xce\xb4\x66\x77\x83\x4e\xd4\x2e\x1f\xf7\x66\x97\x2c\x90\xf8\x17\x36\x76\xad\x6d\x22\x5c\x87\xad\x6d\x75\xae\x1f\xb6\x76\x36\xe8\x37\xb6\x02\xa2\x5f\xb7\x58\x59\x8f\x97\x75\xbb\xb4\xac\xab\xce\x9b\xc3\x36\x15\xad\xc3\xf6\x26\x9d\xe1\x83\x66\x93\xf4\x0f\xff\xc2\xcb\x08\xcb\x06\xcd\xe6\x8e\xd2\x97\x41\xb3\xd5\xa4\xdf\x5a\x83\x23\xf2\x28\x3b\x3d\xf8\xe0\x76\xfc\x75\x90\x40\x2f\x1e\x4d\xab\x8b\x91\x76\x90\x72\x13\x84\xf2\x46\x0e\x17\x7a\x68\xd3\xc2\xad\xfd\xec\x91\x91\x96\x52\x2f\xf0\x0f\xa4\xcd\xf0\x62\x94\x80\x57\x59\xc3\x8b\xe6\x15\xdd\xc9\xa2\x0f\xaf\x85\x0f\x37\xde\xdd\xd5\x45\xeb\xca\xb4\x4f\x56\x0f\xde\x68\x06\x3c\x44\xd3\xeb\x0e\xa2\x57\x3d\xbf\xb9\x09\x7c\xf6\xe4\xc7\x78\x16\x45\x71\xb5\x8a\x3a\xb5\x8a\x7a\x51\x03\xeb\xa0\x6d\x78\x70\x5c\x23\x27\xf0\x75\x72\x08\x6c\xc4\x1e\x84\x41\x7b\xed\x87\x9f\xf7\xab\x9d\xc6\xc0\x9a\x26\x60\x98\xad\x08\xd8\x9a\x09\x98\x56\x9f\xf2\x43\x3e\x1d\x15\xb2\xac\x6a\xec\x7a\x90\xc7\x9d\xee\xe9\xd4\x61\x67\x34\x13\x3f\x26\xd3\x08\xa0\x7d\x5f\x23\x5c\xcc\x4c\x83\xbb\xd1\x46\xe3\x49\x38\xd8\x01\xcd\xbb\x9d\x31\x78\xf1\x02\x90\x6f\xcd\x3b\xaf\x59\xb3\x43\x1c\x45\x61\x1a\x47\x0a\x54\x49\x38\x8d\x6d\x9b\x72\x83\x20\xf9\x39\xf0\x21\xa9\x6e\xcc\x37\x28\x5e\xc5\x6a\xdc\x6a\x19\x39\x25\xc0\x14\x40\xd2\x26\x59\x5f\x5b\xd4\xd1\x8c\xb0\x82\x94\x6c\x8d\xc1\xd7\xaf\x12\x15\x9c\xb7\x77\xed\x8d\xf6\x9e\xf3\xab\xa7\x7e\xcd\x70\xb5\xe1\x6e\x93\x73\x16\x15\x78\x9b\x23\xce\xea\xe7\x18\xc0\x46\x73\x63\x5c\xb3\x43\xf0\x46\x4d\x19\x82\xbf\xe3\x6d\x38\xea\x8f\xf7\x94\xfa\x63\x6f\xec\x82\x3f\x86\x2d\xa5\x3e\x6c\xed\x39\xeb\x6f\xa8\xf5\xb7\x9d\xf0\xc7\x2a\x3d\xe3\xed\xa6\xb3\x3e\x54\xeb\xc3\x6d\x47\xfd\x76\xb3\xa9\x20\x68\x8f\xc7\x63\xdf\xd1\x62\x43\x6b\xb1\x81\x5b\xb0\xdc\xd1\x0f\xe2\x71\x0c\x9d\x7d\x07\xcf\x1e\x6a\xd5\x2f\x20\x5c\xcc\xf6\xf1\xf3\xca\x64\x0e\xec\x83\x26\x78\xa8\x1d\x3c\x7b\xb6\xbe\xfe\x77\x90\x44\x8b\x78\x04\xdf\x79\xf3\x79\x10\x4e\x7e\x3c\x3d\xe9\x48\x87\x50\xbf\x25\x8d\x1b\x6f\xfe\xec\xd9\xb3\xf5\x97\x2f\x5f\xae\x83\x87\x5a\xfd\xd9\xfa\x4b\xd0\xda\x05\x2f\xd7\x69\x11\x3f\xb1\xa9\xde\x44\xfe\x62\x06\xeb\x80\x1e\xfb\xd4\xc1\x70\x78\x0b\xaf\xe7\xde\xe8\xd3\x30\x86\xbf\x2f\x82\x18\x0e\x87\x48\xc2\x9f\xad\x2c\x12\x08\x92\x34\x0e\x46\xe9\xca\xc1\xb3\x67\x1f\xae\x7f\x83\xa3\xb4\xe1\xc3\x71\x10\xc2\x8f\x71\x34\x87\x71\x7a\x5f\xe5\x50\x56\x86\x43\x98\xbc\xc3\xb0\x57\xea\xe0\x0b\xf8\xec\xcd\x16\x70\x1f\x2b\x26\xdc\x0b\xb4\x16\x1c\xbf\xff\xa9\x7b\x72\x7c\x38\x3c\x39\x7e\xff\xc3\xb0\x7f\xd2\x3d\x3b\x03\x1d\x40\xf2\x42\xae\x05\xe1\x67\x6f\x16\xf8\x6b\xf8\x4c\x96\x54\xc7\x47\x6b\xa3\x68\xd6\x9f\x79\x24\x8a\xa3\x52\x9d\xa6\xe9\x3c\x79\xb3\x7f\x79\xb9\x7e\x79\xb9\x5e\xa3\xf5\xfc\xe8\xc6\x0b\x42\x9e\xe0\xf5\x0c\xdf\x51\x54\x2e\x2e\x2f\x7d\x6f\xed\x9f\x97\x97\x8d\xb5\xab\x55\x5a\x33\x84\x13\x2f\x85\xfe\xa1\xb9\xc1\xff\x18\x5a\x10\xd8\xbd\xc8\xbf\x17\xa8\xa8\x80\x55\x13\xd2\x55\x50\x61\x24\xa5\x33\x5f\xa8\x7f\x41\xa0\x5e\x7d\x69\xd7\xb7\x1f\x58\x95\x60\x2e\xd4\xa8\x5e\x5e\xfa\x5f\x5a\xf5\x8d\x87\xcb\xcb\x46\xed\x0b\xfa\x87\xfc\xc9\x2a\xcf\xa2\x91\x37\x7b\x1b\x25\xa9\xd0\x06\x97\x4d\xa3\x24\x65\x95\xd0\x48\x08\xdf\xf7\x09\x90\x2d\x0e\x64\x2a\xb7\x17\xba\x21\xf4\x6f\x15\x54\x2e\x2f\x1b\xe8\x53\xd6\x07\xd4\xb1\xaf\xa8\x88\xd3\xbc\x0a\x2a\xb8\x40\xa5\x0b\xb3\x00\xac\x8a\xa4\xac\x82\xca\x1b\x46\xa0\x97\x4e\x05\x02\x2e\x2f\xd7\x2f\xf0\x48\xde\x5e\x5e\x36\x2e\x2f\xd7\xfe\xf1\xaf\xab\x97\xb5\x97\xb4\xee\xef\x0b\x18\xdf\x9f\xa5\x71\x10\x4e\xde\x7a\xc9\xf4\x28\xf6\x26\x37\x30\x4c\xb5\x41\x6b\xae\xed\x61\x00\x17\x97\x97\x57\x97\x97\xd5\xcb\xcb\x1a\x06\xf9\xe6\xf2\xf2\xf9\xdf\xff\xeb\xbb\x7f\xbc\xb8\xac\xbc\x5c\xad\xef\x1f\xfc\xeb\xf2\xb2\x43\xb0\x5c\x19\x30\x48\x44\xbd\x41\x1d\x28\x82\x1e\x75\x96\x75\x6d\x2a\x56\xca\xa0\xfd\x7d\x19\x58\x54\x4a\x3f\x22\x6e\x19\x64\x54\x60\x18\x17\xd3\x6b\x51\x40\xa7\xe2\x78\x08\x3c\x5f\x35\x74\x79\xd5\x40\x39\x01\x99\xa4\x5e\x8c\x71\x56\xdf\xec\xff\x0f\x1e\x6c\xfb\xec\x41\xd4\x57\x29\x29\x30\x44\xa6\x56\xa5\x56\xfd\x4e\x6c\xa4\x75\x46\x98\x2c\x44\xc7\xfc\x18\xcf\x4e\xe1\x04\x22\xf3\x27\x84\xb7\xe0\x14\x4e\x06\x77\xf3\x2a\xa1\x62\x55\xd5\x05\xab\x62\x8f\x57\x11\x4e\xaa\x62\xde\xfe\xfa\x71\x70\x7a\x3e\xf8\xe5\x9c\x28\x99\x77\xdd\xf3\xfe\xdb\xc1\xe9\xf0\xf8\x90\x58\xb0\xa8\xca\x49\x10\x7e\x0a\xc6\x01\x8c\xe5\x83\x6c\xb6\xaa\xf3\x12\x5e\xaf\xaa\x9f\xdc\x87\xe4\x11\xe5\x4f\xef\xbc\x74\x34\x85\xf1\x31\xea\xb2\x15\xb5\x7a\x7e\x1f\x47\xb7\xe7\xc1\x0d\x8c\x16\xe9\xb1\x8f\xef\x40\xaf\xd4\x1a\xb3\x0c\xb4\xb1\x42\x0c\x27\x41\x92\xc2\x58\x20\xa1\x2a\x73\xb1\x8e\x2f\x69\x91\x22\xc6\xce\x77\xc7\xa1\x0f\xef\xf6\x41\x0b\xab\xe2\x6c\x19\xe2\x5d\x14\xae\x31\xbc\x34\xf5\x46\xd3\xf3\xe8\x10\x5f\x18\x65\xfc\xf1\xa3\xd1\x02\xc9\x08\x7e\x23\xc0\x70\x99\xc1\xbe\x83\x0e\x60\xbf\x1a\x3a\x9e\x90\xf7\x4d\x13\xe9\x72\xc2\x44\x06\xbe\x91\x1b\xdf\x9f\xe2\x67\x02\x32\x2a\xe2\xe8\x16\xf7\xc5\xe2\x4c\xc5\x30\x17\xcf\x32\x8d\xb5\x35\x1b\x0d\x7e\x9f\x22\x0d\xd1\x05\x43\xaa\xa4\x5f\xe4\xcd\xb4\xdb\xe2\x19\xf4\x62\xda\x5e\xa8\x65\x42\xef\x44\x07\x3a\x20\x81\x29\x07\xc4\x45\x83\xf0\xa5\x71\x1d\x84\x3e\x2e\xc5\x43\x42\xd8\x52\x17\x98\x79\x7e\xfc\x6e\x30\xec\x0d\x8e\x3e\x9c\x0e\xb0\x48\x1e\x1f\xfd\x5a\xcb\xe5\x7b\x02\xd3\xb7\xf7\x68\x6d\xa7\x12\x9e\x5d\x08\x65\x83\x30\x25\x65\xba\x0c\x88\x72\x7b\x61\x9d\x0f\x57\x8d\x29\x07\x3a\x65\x17\x4c\x25\xc8\xfa\x09\x19\x0a\xc4\x11\xc3\x9b\xcd\x70\x28\xb8\x48\xdd\x88\x16\x2e\x4f\xde\x67\x13\x02\x06\x36\x97\x54\xc3\xe4\x94\x45\x98\xcc\x4f\xda\xf3\x3a\xda\xf7\x04\x51\xa8\x6d\xbf\x68\x31\xde\x08\x7c\x8e\x02\x1f\xc7\x93\x00\x5e\x0a\xbe\x3c\x1c\x18\x93\xd8\xea\xaa\x09\xed\x04\xec\x7a\xf1\xc5\x0b\xf0\xdc\x30\xa0\x84\x6b\x71\x74\x8b\xb5\xf1\x80\x78\x5f\xb2\x71\xbb\x59\x24\x29\xb8\x86\x80\x18\x83\x7e\xc5\x28\xda\xe4\x94\x80\xf5\x5f\x49\x11\xee\xef\xdb\x34\xe9\xea\x6a\x5d\x99\xba\x13\xa4\xba\x08\xd7\xa4\x2f\x94\x9a\x7d\xce\x4a\x79\xcb\x2f\xe8\x3d\xca\xb5\x46\x56\x26\xd7\xd5\x07\x3c\x6b\xa3\x7f\x93\xdb\xce\xe3\x20\x8a\x83\xf4\x3e\x6b\xc1\x4a\xf0\x2d\x6c\xc6\x18\x55\x1b\x7a\xbe\x2f\x74\xfc\x3c\x3a\x09\x92\xb4\x4a\x19\x26\x30\x94\x6e\x15\xe8\x87\x06\x3b\x4e\x71\x08\xa0\x11\xb2\x24\x82\x0c\x8b\xd1\x4f\x41\x9c\x25\x62\xec\x9e\x25\x50\x4f\xaa\x8e\x1f\x9b\xd2\xfb\x00\x9c\x2a\x58\x4a\x4b\x63\xa7\x61\x0d\xb4\x0e\x40\x80\x77\x59\x07\x20\x30\x3f\x3a\xc7\xb8\xc4\x87\xe0\x95\x09\xe2\x45\x70\xc5\x6b\xd8\x33\x9e\x4b\x34\xd0\xe7\x84\x02\xfe\xa6\x9b\xb9\x93\xa6\x8e\x02\xa7\x27\xb2\x09\x4b\xd3\x80\xc1\x31\xde\x3e\xcc\x53\x39\x37\x6c\x72\x89\xbd\x95\xd8\xde\x22\x91\x87\x56\xee\x1b\x23\x12\xcd\x32\x83\xb8\x1b\xf8\x58\x64\x8c\x78\x0b\x70\x59\x7f\xe3\x09\xd8\xce\xba\x6c\xdc\x35\x9c\x7c\x39\x66\x4c\x09\x6b\x83\x3e\xd9\x2f\x9a\x0a\x56\x0b\xe1\x79\x1c\xdd\x96\x34\x45\xe0\x5d\x4a\x4c\xa4\x06\xfa\xb5\x1f\x85\xa9\x64\x48\x99\x52\x38\x95\x1b\x34\x59\x2d\x1b\x87\xef\x40\x6b\x80\x2a\x0c\x48\x6a\x8d\x2c\x7a\xd1\x8f\x4e\x38\xdb\xc8\xd3\x84\xe6\x49\x81\x38\x21\x02\xc8\x32\x54\x19\x43\x11\xc4\x79\xac\x2b\x5f\x5b\x80\x05\xa2\x72\x38\x8b\xa2\xf9\xb0\x25\x0d\xe1\x6f\x79\xc9\xe9\x68\xc6\x10\xf2\x1e\x0b\xa7\xf1\xe2\xb7\x2b\xb3\x8f\x31\x60\x4b\x8b\x91\xba\x2a\xcb\x3f\x22\x0c\x5e\x9d\xa1\xa8\x0b\x64\x05\x09\xb6\x62\x5c\xc4\x31\x5e\x3c\x2f\x58\x17\xe0\x33\x62\x53\x02\x4c\xfd\xdc\xc5\x11\x6d\x0e\xac\x01\xe4\xf8\x8b\x2d\xe4\xdc\x12\xb1\xc4\xc4\xf5\x37\x22\xae\xbf\x81\x57\xc0\x20\x0a\xce\x37\xef\xd1\x0f\x1d\x59\xe3\x9b\xe9\x66\x82\xf5\x92\x22\x7a\xd9\xa5\x23\x44\x71\x57\xb5\x44\x26\xfa\xaa\xa6\x80\xc9\x62\x96\x2a\x7b\x38\xe2\xc2\xf8\x36\x4d\xe7\xb2\xc2\xce\xd6\x78\xac\x3d\x0b\x6c\x28\x49\x76\x45\x1f\xd2\x6d\x55\x63\x34\x0d\x66\xfe\x7b\x54\xa0\xde\xd6\xa4\xf8\xc9\x21\x45\xaf\x10\x83\x88\xcf\x36\x6c\x63\xd5\x14\x15\x46\x9a\x7e\xfd\x4a\x60\x38\x0d\x02\xaa\x73\x49\x9f\x6d\x1a\x6e\x11\x07\xac\xab\x17\x88\xb1\xd1\x98\xf7\x3b\x33\xcf\xb0\xcd\x5a\x09\x17\x37\xd7\x30\xae\x80\x37\xa0\x09\xf6\x0d\xb5\x14\x96\xc6\xd1\x2d\x7e\x09\x96\x40\xa0\x38\x1a\x01\xfe\x6b\x15\xe1\x65\xd2\xe6\xd4\xa6\x98\x9d\x79\x0a\x34\x24\x4e\xe9\xb8\xae\x51\x61\x92\x0b\x0b\x46\x09\xaa\x27\xf1\x1d\x13\xf5\x61\x5c\x5d\xc4\x81\x41\x59\x8a\x8d\x5f\x5b\x02\xc9\x15\xad\xcc\x95\xf2\x28\x86\x5e\x0a\xbb\xe1\x68\x1a\xc5\xf4\x1b\xc2\xc2\x05\xb4\xc1\xf7\x1d\x9a\x04\x1a\xe6\x16\xa2\x46\x23\x5e\x10\x81\x8c\xa9\xd6\xc0\x37\x06\x01\xfd\xef\xfc\x7e\x0e\xcd\x8f\x09\x88\x3f\x74\x5d\x85\xf3\x99\x37\x82\x48\x98\x31\x80\xba\xd8\xdd\x52\x89\x2f\x2c\x01\x66\x22\x27\xb3\x45\x00\xa1\xb2\x2b\x47\xd4\x1b\xa6\x63\x51\xcd\xf7\xde\x0d\xe9\x50\xa5\xab\x85\xed\xa8\x3f\x96\xd9\x51\xac\x0f\x40\x50\xee\x41\x18\xc2\xf8\xed\xf9\xbb\x13\xd0\x01\x95\x8a\x1d\x12\xab\xef\xcd\xe7\x30\xf4\xfb\x48\x35\x54\x97\xe1\xa1\x23\x02\x12\x8f\x6c\xa6\x74\x1c\xb9\x27\xd9\x8f\x69\x45\x30\x43\xc9\x5d\x14\x10\x14\xde\x8a\xcd\xb2\x0c\x8c\x73\x09\xe7\x6d\xcf\xa4\x89\xca\x5b\x17\x9c\xad\xe2\x0f\xe2\x87\x06\xf2\x39\x89\x4a\xcd\x11\x0d\x4d\xe2\xcf\x16\xd7\x09\x3e\xa6\xfd\x39\x48\xa7\x78\x0a\x70\xca\xa4\x79\x50\x07\x78\x6e\xab\x68\x73\x96\x77\x4b\x2c\x12\xfb\x31\x4b\x60\x61\xb9\xb0\xdb\x67\x58\x5d\x76\x7d\x1f\x0a\x07\x6d\xae\x3e\x6b\xd3\x9e\x76\x37\xc9\xed\x29\x0e\xb7\xcd\xd0\xe9\x95\x4c\xe6\x01\x9a\x97\x64\x07\xeb\x9e\x25\xb6\xc5\x34\x61\x1d\xa8\x4a\x2b\x51\x2d\x67\x95\xe5\x34\x97\x5c\x6d\x33\xc2\x9d\x7a\x45\xef\xe9\xb7\x59\x81\x39\x39\xd2\x2a\xbc\x5a\x64\x19\x06\xee\x3d\x9c\xd8\x33\x97\x81\x66\x58\xfa\x24\x3b\x0d\xcb\x8e\xb8\xfc\x19\xce\x39\x55\xfb\x0d\x2a\xcb\x2b\x3b\x60\x6e\x10\x64\x6c\x85\xad\x78\xe2\x19\x98\x61\x13\x00\xf0\x5a\xa9\x57\xf1\x63\x6f\x32\xf1\xae\x67\x86\x88\x38\xe2\xc8\x90\x47\xa4\x08\x6c\x1a\xc3\xb1\x8a\x48\xa2\xc7\x8b\x27\xe4\x1e\x69\x88\x1f\x35\xae\x98\xab\x79\xbe\x8f\x33\x2f\xa2\xfd\x03\x0c\x61\x5c\xad\x8c\x66\xc1\xe8\x53\x45\xdc\xbf\xe0\x04\x8a\xb6\xdd\x9b\xe5\x38\x51\x19\x56\x5a\x8b\x80\xc2\x33\xdb\x30\x29\x94\xc8\x76\xe3\x41\xa3\x41\xeb\x3c\x59\x57\xf4\x0d\xd5\x28\x0a\x53\x2f\x08\x13\xd3\xae\xca\xdd\xe3\x62\x5a\xa8\x18\x6f\xcc\x9c\xa0\xad\x29\xd1\xf9\x33\x46\xd0\xbe\xd2\x4c\x89\xc8\x52\xa3\x4e\x86\x10\xde\xbe\xa7\x9b\x0d\x71\x3b\xc3\x97\xf4\x21\x3d\x49\x1a\x22\x3b\xda\x8b\x27\x0b\x79\x8f\x37\x34\x18\xd3\x0c\xe4\xc5\x30\x20\x2f\x9f\x76\xb2\x86\x17\xc3\xc0\xf8\x38\x15\x0d\xee\x23\xb3\x8a\x92\xda\x20\x05\xef\x25\xeb\xcd\x68\xde\x53\x84\x2e\x0b\x9f\xc0\xa2\x91\xad\x3d\x38\x8e\x62\x58\xe5\x84\x06\x57\x75\x86\xd4\x38\x06\xb4\x31\x49\x3b\x4a\x8c\x2e\xb9\x7a\xc1\x01\xd1\x96\x43\x69\x84\xc8\x54\x26\xf6\x00\x25\xad\x0e\xf8\x02\x24\xfc\x6a\xbc\x2d\xcb\x5a\x1b\x8c\x37\x63\x9a\xa7\xac\x05\x52\x85\xa6\xe6\x52\x30\xe5\x83\x0d\x1d\xdf\x05\x3c\x37\x3f\x29\xa6\x5c\x38\x08\x68\xd9\x9d\x83\x47\xce\xc8\xf0\x0e\x2c\x8a\x41\x14\xce\xee\x01\x9d\x93\xc0\x03\x49\x10\x4e\x66\x30\xab\x62\xbf\x9a\x18\x2f\x66\xb3\x73\x72\xda\x26\xd0\x67\x3c\x74\xc3\x7b\x32\x89\xa1\xe6\x15\x19\x6f\x42\x83\xc9\x34\x45\x70\xe9\x39\x14\x41\x22\xd8\x06\xfc\x37\xb6\x71\xd2\x37\x8f\x1c\x06\x22\x09\xc3\x31\x2e\x3e\xac\x46\x55\xc0\x69\x7c\x1a\x5f\xdc\x4a\x19\x05\x47\x41\x68\x3c\xb9\x17\x7d\xec\x1e\xf2\x58\x63\xe6\x68\x76\x92\xaf\x31\xc1\xc0\xc9\x19\x1c\x3b\x19\xd9\xd4\xa4\xdc\x70\x6e\x49\x61\x14\x64\x64\x86\xb2\x14\x1f\x65\x2c\x9c\xaf\x25\xd8\x28\xd2\x5a\xbe\xb7\x6a\x4f\x0b\xf7\x53\x81\xc1\xc5\x20\x47\x72\xa9\x69\xa7\x8f\xa2\x05\x5c\x21\x9a\x78\x6d\x2d\x04\xbf\x08\xdb\x6d\xc2\xac\x5f\xa4\xb5\x4c\x71\x91\x5c\x19\xb3\xa0\x48\xe7\x2d\x3a\xe8\x80\x76\xb3\x99\x45\x4e\x8a\x1e\x25\x02\x24\xb3\xe3\x5e\x06\xd9\xe2\xb5\xb7\xf7\x17\xf3\xda\xd3\x32\x85\x80\x8e\x09\x7b\xb5\x4d\xeb\x67\xef\xc1\x59\x2a\x6e\xd0\x8a\x24\xcb\xeb\x59\xea\xa5\x30\xf3\x32\xf8\xf2\x70\xf0\x4c\xff\x70\x61\x4c\x57\xd2\x1b\x9c\x5c\xa9\x81\xb6\x09\xb2\xed\x33\x03\x54\x31\xa8\x1a\xd7\x70\x36\xab\xd6\x0e\x40\x09\x2c\x27\x47\x65\x91\xcc\x82\x10\x1e\x41\xe8\x97\x44\xf4\xd3\xf9\x15\x7f\x99\xa4\x10\x59\xc5\x41\x1f\x1d\x7d\x33\xd0\xfd\xd3\xb2\xec\x19\x79\x71\x1c\x78\x13\x78\x8a\x8b\x4b\x32\xa9\x77\x56\x7a\xc8\xbd\xd1\xa7\x64\xee\x8d\x60\x49\x4c\x6f\xcf\xcb\x62\x4a\xbd\xeb\x92\x38\xce\x3e\x94\xc5\x91\x4c\x83\x71\xfa\x61\x91\x96\x45\x74\xbc\x14\xa2\xe3\xb2\xc3\x33\x38\xeb\x17\x45\x44\xbe\xe0\x74\x0a\x08\x6c\xf5\x23\xfe\x1b\xff\x8e\xc0\x74\x3f\x0e\x0e\x09\x6e\xbc\x0f\xc7\xc8\x7c\x83\xb2\x30\x7c\xb9\xa8\x5c\x54\xcc\x54\xb0\x38\x79\x66\x6f\x64\x39\x19\x70\x88\xbe\xb0\xb1\x11\x13\xac\x20\x83\xfe\x23\xcd\x26\x42\x97\x6f\x17\xf1\xfd\xb3\xe3\xe1\xc7\xee\x69\xf7\x5d\xed\xe0\x99\x8d\xc0\xab\x3f\x93\xc0\x0f\x67\x7d\x07\x69\x1f\xff\x4c\xd2\x0e\xfb\x67\x0e\xd2\x86\x05\x49\x73\x61\x38\xfe\xfe\xfd\x87\xd3\x81\x03\xc9\xff\xfc\x11\x48\x46\x65\x99\xcc\xdf\xca\xb2\x41\x1c\x94\x85\x28\x64\xe7\x10\x92\x39\xf9\xf0\x8e\x25\x41\x72\x75\xf0\xfd\x87\xd3\x77\xdd\x13\x07\x39\x87\x65\xc9\x79\x3a\xd4\xef\xca\xf3\xf6\x33\x8c\x13\x78\xfc\x64\x14\xfc\xa3\x2c\x05\x09\x4c\x27\x27\xf0\x33\x9c\x55\x9b\xb5\x03\xfd\x53\x99\xa7\x85\x0b\x11\x2e\x56\xfc\x14\xcc\xdf\xa3\x3d\xda\xd4\x8b\x1d\xf2\x65\x5e\xfb\xbb\xef\x4d\x1d\x2d\xa8\xe4\x19\x35\x4c\xc7\x8f\x92\x00\x6b\x0a\x83\x92\x37\x7d\xba\xa8\xbc\x31\xb2\xd9\x88\xfd\x23\xce\xb9\x53\xad\xbc\xa9\x10\x7c\x66\x80\xaf\xcb\x03\x7c\xed\x04\xf8\xbc\x3c\xc0\xe7\x4e\x80\xcd\x12\x00\x51\x6b\x5a\xa1\x31\x61\x7f\xd7\xc0\x4b\xd0\x6a\xba\x50\xb4\x9e\x06\x05\x4e\xe3\xe7\x40\xd3\x7e\x32\x34\x6d\x17\x9a\x8d\x27\x43\xb3\xe1\x42\xb3\xf9\x64\x68\x36\x5d\x68\xb6\x9e\x0c\xcd\x96\x0b\xcd\xf6\x93\xa1\xd9\x76\xa1\xd9\x79\x32\x34\x3b\x2e\x34\xbb\x4f\x86\x66\xd7\x85\x66\xef\xc9\xd0\xec\xb9\xd0\x7c\x57\x02\x4d\x94\xa4\x58\xa7\x7c\xe7\xd4\x29\x2b\x4b\x40\x5c\x71\x42\x04\x4b\x40\x04\x4e\x88\x97\x95\x25\x40\x5e\x56\x9c\x30\x0f\x0a\x82\x1c\xa3\x75\x38\xf8\x27\xa4\xa3\x64\x87\xf8\xc7\xac\x91\xe6\xe5\x51\xee\xda\x7f\x29\x5d\xe3\xb7\x9e\xc4\x56\xaf\x03\x9e\x6c\x58\xdd\xf6\x91\x4b\x0f\x6c\x65\xb0\xbc\x65\xac\xc3\x32\x8a\xee\xd2\x28\x48\xf6\xbd\x1f\xe7\x6e\xf8\xbd\x47\xc2\x3f\x8c\x6e\x43\x37\x86\xfe\x23\x31\x1c\x45\xf1\xad\x17\xfb\x6e\x24\xaa\x1d\x5c\x16\x49\xcf\x1b\x7d\xca\xc7\xa2\x1a\xff\x65\xb1\xbc\x27\x17\xcc\xd0\x8d\xe5\xe8\x91\x58\x3e\xc6\x70\x04\xfd\x20\x9c\xe4\xa3\xfa\xfe\x91\xa8\x90\x00\x77\xaf\x93\x68\xb6\x48\x73\x30\xbd\x7d\x6c\xa7\xa2\x24\xc0\x47\xb4\x4e\x2c\xc7\x4f\x23\x6b\xe7\xde\xb5\x1b\xcf\x7f\x2f\x8d\x07\xc6\x1e\xda\x02\x1d\x06\xc9\x7c\xe6\xdd\xbb\xb1\xfc\xf0\x58\x2c\xf9\x02\x70\xf2\x48\x0d\x86\x30\xe4\x68\x30\x75\x9f\x58\x1c\x05\x79\x11\xb6\x00\x0a\xf5\x2c\xa5\x2c\x8a\x02\x7a\xf8\x6c\x69\x14\x24\x37\x68\x9e\x1e\x3e\x2f\x0c\xff\x19\x30\xbe\xfb\xf5\x0a\xe0\x97\x7e\x9f\xeb\xf9\xed\x65\x42\x24\x85\x4d\xee\x68\x9e\x99\x08\xfa\xe5\x71\xc2\x57\x80\xa5\xff\xef\x13\xe9\xec\xdc\xd9\xfa\xbf\xcb\x23\x9a\x7a\x48\xf3\x14\x53\x71\xde\xd2\x68\xde\x32\xed\x76\x0a\x67\x5e\x1a\x7c\xce\x41\x74\xbd\x34\xa2\x18\xce\xa1\x97\xf2\x05\x82\x87\x8a\xbb\xf1\xa9\xa7\x68\x25\x64\x1f\x86\xfe\x21\x7e\xaf\x21\x7b\xd1\xce\x8d\xcb\x5f\x1a\xd7\x2c\x08\x61\xe1\xb1\x82\x4b\xa3\xf9\xa9\xdc\x58\x8d\x97\x17\x8a\x9f\x8a\xad\x79\x93\xa5\x31\xa4\xde\x75\x7f\x06\xbd\x9c\xd1\x9f\x3e\x62\xf4\xc9\x3b\xf6\x4e\xf0\xb3\x47\x08\x73\x21\x04\x37\x8f\x9a\xfd\x45\xe5\x36\x7c\xc4\x12\x94\xbd\x67\xe2\xc6\x31\x2f\xb7\x46\xf0\x54\xeb\xda\x8a\x80\xb3\x89\x57\x9e\x57\xe4\x7c\xe2\x7c\xd8\xd8\x73\x06\xf2\x32\xc1\x7e\x04\xb7\x66\xf3\xca\xf1\x7b\x31\x32\xeb\x60\x4e\x76\x90\xd2\x9a\x46\x8a\x88\xb3\x3f\xa8\x18\x97\x31\x29\x43\x7d\x91\xa5\x2c\x76\x13\x64\x96\x5c\x31\xf9\xb8\x7b\x58\x92\xf2\xe0\x79\xaa\x6d\x37\xe4\x45\x69\xc8\x52\x76\x6c\x27\xf0\x62\xbb\xe8\xbc\xb1\xab\x83\x47\xed\xb3\x85\x6f\x07\xcf\x84\x2c\x21\x42\x39\x13\x01\xa1\xe8\x42\xfc\x7d\x85\xc0\x5c\x41\x74\x37\xd1\xff\x58\xc1\x81\xbb\x19\xbd\xfb\xc4\xed\xb0\x43\x24\x2f\xc9\x69\xc8\xef\x1d\x71\xd3\x36\x6e\x9a\x95\xe5\x37\xc6\xcd\x36\x58\xb3\xbc\x06\x1f\xce\xfa\xb8\xc1\x26\x6e\x80\xfe\xca\xc3\x40\xae\x29\x70\xa3\x2d\x82\x85\x96\xe4\x34\x3c\xec\x9f\xe1\x46\xdb\xb8\x11\xfa\x2b\xa7\x01\xb9\x7d\xc3\x6d\x76\x70\x1b\x5a\x80\xf3\x6c\x09\x35\x71\x96\x3a\xf1\xef\x0e\xf8\xf2\x50\xab\x89\x12\x90\x93\x23\x86\x54\xaa\x0e\x03\x21\x1b\x57\x1d\x0c\xd5\x7b\x9e\xcc\x97\x29\x90\x93\xac\x4b\x7f\xab\x7e\x4f\x0c\x0a\xaa\xc7\x7e\x57\xeb\x24\x94\x6e\x5d\x96\x99\xde\xc9\x38\x25\x38\x9a\xe2\xa9\x20\xa7\x77\xf1\x52\x4f\xf5\xf7\x45\x98\x51\x39\x7f\x2c\xf7\xb7\x3a\x18\x25\x75\x30\x9a\xd6\xc1\x88\xb8\x60\x45\xb7\x2a\x45\x73\x6a\x1b\xc8\x29\x23\x0d\xcf\x20\x24\x8b\x38\x8e\x26\x5e\x0a\x87\xd3\x60\xa2\x79\x00\x22\xbc\x86\xf4\xf6\x52\x1b\xb0\x8a\xab\x99\x5c\xf5\x6c\x2d\xe4\x88\x29\x25\x07\xc1\x81\xda\x05\xfc\x14\xaf\x5c\xa6\x7b\x0b\xe3\x58\x10\x44\xc7\x85\x5c\x53\x89\x8d\x18\x11\x27\x38\xcc\x4f\xb4\x7e\xf7\x23\x1f\x76\x59\x56\x17\xd6\xc6\x10\x0c\xd8\xbc\x3b\xdc\x6d\x36\xc1\xab\x0e\x81\xf0\xe2\x05\xf9\x17\xa7\x96\x3b\xec\x1d\x1d\x99\x7c\xce\x67\x38\x42\xd5\x8d\x8a\xdc\xcf\x18\x9d\xde\x83\xe4\xbd\xf7\xbe\x3a\x8b\x6e\xad\x0e\xed\x79\x4c\x1e\x4d\xcd\x71\x39\xa3\x28\x4c\x83\xd0\xf4\x3c\xbe\xee\x0a\x4f\x19\x56\xad\xe2\x5f\xd6\x00\x61\x44\x0d\xbc\x04\xcd\xbb\x4d\xf4\xcb\x2a\x40\x34\x92\x2f\x7d\x52\xd0\xbc\x6b\x35\x9b\xea\x2b\xbd\x74\x90\x56\x05\x8e\x14\xe1\xc6\x83\x69\x28\xfa\xd6\xa1\x38\x3a\x3a\xd2\xd3\x79\x9a\xfb\xcb\xec\x1f\x61\x0a\x5b\x9f\xf4\xd2\x27\xb6\xfd\x69\xff\xd1\x14\x04\xa1\xc1\xcb\xcb\x15\x7e\x66\x70\xec\x19\x4d\xaf\x68\x5a\x21\x5d\x67\x3d\x65\xe0\xa5\x0e\xbd\xe1\xf9\x3e\xbe\x87\x66\x1a\xe6\xb1\x0f\x9c\x03\x13\x1b\xe9\x72\x9a\xc7\x47\xc3\x2d\xb8\x8b\x91\xa6\x4b\x73\x95\x93\x7c\x5d\xb0\x07\xdf\x39\x62\xf3\xcc\xbd\x66\xc2\x34\xb2\x86\xe0\x72\x26\x54\xaa\x15\x73\xa7\xb3\x1a\xb5\xdc\x1a\x2f\x73\x6b\xac\xe6\xd6\x58\xcb\xad\xd1\x70\xd4\x00\x85\x7b\x2d\xc3\x74\xf5\x5e\xfc\x51\x1f\xb4\xca\x1e\xbe\x32\x28\x16\xd3\x4f\x4e\x7c\xa5\x4c\x95\x8b\xe3\xc5\xa8\x6a\x7d\x03\xaa\x5c\xa3\x5c\x8c\x2a\xcb\x63\xa7\x8f\xa2\xca\x25\x59\xc5\xa8\xda\xf8\x06\x54\xb9\xa4\xb9\x18\x55\xdf\x62\x04\xf3\x66\x50\x3e\x55\x4f\x37\x82\xf6\x98\x76\xe0\xb4\x64\xe9\x06\xe1\x51\xd1\xcc\x84\x1b\xeb\x39\xdc\x58\x5a\x62\x1e\x49\xbc\x6c\x85\xac\xad\x3d\x41\x57\xdf\xe7\x74\xb5\x10\x90\x0f\x4f\x01\x24\x2c\xc7\xf4\xcc\x09\x4e\xcd\xc7\xbe\x14\xf6\x68\x59\xec\x1b\x4f\x81\xfd\xeb\x9f\x8a\xfd\xe1\x4f\xe5\xfc\xbf\x96\xc5\x6e\xda\x90\x94\xc6\xbe\x53\x08\xbb\x64\x76\x0a\xc7\x5e\x39\x14\x14\xdb\x75\x3f\x8a\xfe\xdd\xf2\xf4\xcb\x87\x6b\x7f\x7e\x17\xfe\x5e\xa8\x0b\xcb\x92\xa0\x6e\xc8\x9f\x80\xe0\xb7\xe5\x24\x36\xf5\xae\xcf\x88\x37\xf6\xb7\xeb\x65\x21\xba\x3b\xe5\xe8\x9e\x45\x93\x6a\xe5\x0c\xc6\x81\x37\xc3\x29\xba\x41\x0c\x7f\x5f\xc0\x24\x85\x3e\x10\x9e\xb7\x05\x9f\xf0\x1b\xba\x0d\xdb\x33\xcb\x16\xe0\xa6\x47\x78\xf5\x5c\x7d\x39\x40\x0a\xbc\xcb\x6b\x87\xf2\x4d\x59\xfd\x7a\x19\x56\xe3\x5d\x4a\x10\x4e\x00\x4e\x22\x9b\x46\x74\xbb\xfd\x84\x1c\x56\x92\x46\x14\x80\xf2\x57\x64\xb1\x0f\xc7\xde\x62\x96\x7e\x7b\xad\xc1\xb9\x00\x49\x80\xf9\x8f\xe1\xa7\x30\xba\x0d\xc1\xe0\xac\x9f\xbd\xbb\xf0\x8f\xa4\x51\xa9\x83\x91\x1a\x9a\x5d\xa2\x4f\x8f\x3b\xa0\xa0\x96\x63\xde\x01\x85\x10\x0a\x40\x5b\x9c\x39\x8f\x00\x12\xd0\x31\xb5\xb9\x18\x4d\x1d\x89\x92\x28\x3a\x7c\xed\xb5\x9e\x9b\xe3\x0a\x33\x59\x8d\x28\xb0\x55\x2e\x9a\x67\x08\xe4\x1f\x25\xa9\x7d\x53\x42\x23\xca\x0c\x92\xc1\x38\x61\xe1\x17\x96\x4d\x42\x1d\x8c\xd4\xab\x48\x0b\xb0\x89\xed\x0d\x6d\xbd\x4d\x59\x31\x2f\x2a\x5b\x1f\xce\xfa\x4e\xb9\x42\x03\x6d\x8b\xec\x03\x5f\xbf\x02\x57\x95\xde\xe0\xc4\x25\x20\x05\x30\xd8\xdf\xfd\x07\xa5\x16\x7e\xf5\xc5\x65\xe2\x90\x84\x73\x3b\xe9\xef\xa7\xf3\x10\x35\x87\xac\xca\x47\xb6\x0a\xe0\x8b\xe6\x55\xde\xc4\xc0\xe3\xd0\x74\xeb\x37\xd3\x23\xe3\xc6\x3a\x86\x47\xc7\xd5\x1f\xd3\xb3\xd3\xec\x29\xe7\x22\x27\x66\xc0\x60\xf4\x04\xe9\x0c\xea\x57\x32\x1c\x6c\xb1\xd3\x02\xa5\x35\xb9\xc6\x3d\x47\xa0\x55\x7a\x31\xbe\x1c\x15\x0c\x72\x0f\x17\x40\xb1\x13\x0a\xd3\xfb\xea\x8f\x01\x65\x78\x96\x5d\xab\xb3\xf5\x74\xe8\x5a\x85\x44\xab\x88\x6c\xb5\x72\x84\x8b\x54\xca\xe1\x14\xa9\x54\x84\x07\xad\x1c\x26\x90\x4a\x86\xf7\xe5\xf5\x4a\x3b\x45\x2a\xed\x16\xa9\xb4\xf7\x84\x72\x90\x43\x7a\x19\x58\x5b\x39\x83\x5c\x0a\x56\x8e\x2c\x94\x82\x55\x40\x1f\x15\x17\xe4\x42\x52\xd3\x2c\x24\x36\x05\x67\x45\xa1\x69\x51\x6c\x5e\x14\x9b\x18\xc5\x66\x46\xb1\xa9\x51\x6c\x6e\x14\x9b\x1c\x79\xb3\x03\x2c\x9b\x3b\x12\xd8\x96\x64\x25\x93\x58\x4e\x1b\x73\x38\xb9\xbd\x61\x59\x1b\x6a\x29\xd3\x53\x78\x7d\x46\xb5\x37\xdc\x99\x71\x45\x00\xa3\x29\x78\xdd\x01\x95\x66\x05\x5f\x2a\x4f\xc1\xab\x0e\xa8\xec\xe5\x5a\xdb\x20\x8f\x45\xcb\xac\xc8\x12\x04\x1a\x90\x36\x9a\x8a\x7e\x04\xcd\x1a\x58\x03\x9b\xbb\x8f\x39\xf2\xe7\x09\x64\xd9\xd6\xe2\x60\x99\xce\x3e\xde\xac\x2b\xc2\x03\x77\x92\x5d\x77\x5f\x5d\xc9\x7c\x9d\x52\x95\x47\xd4\xaa\xdd\xc7\xc2\x8e\xf7\x91\xbb\x52\xe6\x4a\x96\xb7\x2f\x35\xc5\xc6\xb9\x37\xa6\x86\x58\x3a\x76\x75\xfe\x94\x57\xe5\x98\xa1\x6a\x34\x5f\xc9\x3d\x58\xff\xec\xb8\x18\xaf\x0a\x70\xa9\x04\x83\x8c\xbc\x69\x28\x7e\x67\xc6\xe9\xa1\x17\x53\x47\x49\xb5\x98\xf9\x4d\x3a\xb8\xfe\x08\x37\x0f\xdb\xc1\x4b\xff\xec\x18\x7b\x7a\xe4\x9e\xba\xb8\x76\xeb\x65\x15\xbd\x91\x23\x8e\x89\x6e\x66\x95\xa3\x41\xd1\x39\x75\xd8\x3f\xfb\x3f\xb0\x1b\xc7\x09\x3b\x53\xc0\xde\xb1\x72\x57\xc4\x8f\x6a\x14\xa8\x6b\xdb\x91\x6b\x3e\xe5\xa6\x1f\x72\xa4\x5b\xe0\x86\xbc\xa8\xdd\x5a\xf9\xee\xf7\x02\xd0\xe6\xa9\xbe\x7f\x16\xd5\x7a\xfe\x42\xc5\xb8\x53\xe0\xd8\x17\x88\x9e\xf6\xc6\x04\xb7\xf6\xde\xac\x14\xe9\x8d\xd4\xab\x4a\x73\xe5\xf7\x9c\x65\x52\xfc\x29\xe8\xca\x20\x50\x34\x2f\x4d\xd1\x76\x6b\x65\xfe\x2d\x49\x8a\x4b\x53\x54\x29\x5c\x1f\xfd\xac\xea\x2e\xb3\xf8\xb4\xfe\x3c\x9a\x63\x77\xc5\x92\xc0\x2a\x07\x4f\x83\xbe\x17\xa5\x69\x74\xb3\x14\x05\xf1\xb7\x1c\x8e\x9b\xf2\x22\x7b\xf3\x6d\xe8\x29\x74\x9b\x21\xfe\xb8\x97\xc8\xc3\xfe\x19\xf8\x98\xb2\x05\x72\x6e\x7b\xb8\xc1\xf4\x43\xc5\xee\xc9\x7b\x99\x7f\xe6\xa6\x1d\xa3\x87\x7e\xd5\xba\x92\xad\x82\xca\xc7\x0a\x58\x05\xab\x44\xbd\xad\x82\xca\x77\x31\x7e\x46\x38\x05\xab\xf6\xf5\x0f\x3f\x55\x9c\x77\x85\x56\xb0\x53\xd4\xbf\xac\x88\x92\x29\x0e\xed\x2f\xb9\x24\x3c\x72\x60\x56\xff\xe0\x81\x29\x3c\x97\xf2\xe7\x10\x31\x0d\xd8\x3c\x32\xdb\x0d\x8f\xa6\xb9\xf0\x01\x48\xd9\xc3\x8c\xe2\xd6\x2a\xf8\x16\x07\x20\xa6\x63\x0e\x69\x93\x5d\xf6\x88\x84\xf4\x82\x1c\x77\xe0\xb7\x26\xbe\xab\x88\x7f\xad\x16\xbb\x6b\xb4\xf2\xb3\xfc\xee\x58\xea\xaa\x91\x5a\x31\x43\x7a\xfb\x4f\x23\xaf\x14\x5a\xca\xe6\x27\x3c\x2e\x28\xb7\xdb\x2b\x7a\x68\xf1\xb8\xa3\x09\x12\xdf\xf5\x7f\x60\x27\xf5\x94\xd3\xda\xc0\x5c\xc7\x23\x2c\x02\x66\xd2\x86\x26\xd0\xd6\x42\xcb\x58\x78\xa5\x14\x5d\xa6\xc5\xb8\xc8\x1d\x29\x06\xf6\x23\x53\x7c\x42\x2e\x25\x6d\xb7\x67\x53\x96\xe4\x97\x7c\x1c\x7c\x6b\x2f\x20\x91\xa3\x81\x4d\x58\x78\x2b\xfa\x5b\x3e\x1e\xaa\x07\xa4\xb4\x50\xb2\x16\x75\x2b\x90\x79\x66\x1c\xd8\xd0\x4c\x4c\x68\x44\x0c\xd2\xd0\x3a\xac\x0f\x1b\x02\xe9\x28\xcd\x8a\xe5\xd1\x87\xb6\x85\x16\x4e\x2b\xaf\x05\x67\x94\x1c\x12\xd5\x09\x28\xa7\x88\x27\x90\x59\x7e\x78\x96\xfa\x9d\x47\x89\xb2\xcf\xe6\xa4\xef\x94\x2c\x73\xc6\xf7\x76\xf3\x2f\x96\xf1\xfd\x30\xba\xa1\x0f\x1b\x11\x60\x1f\xa3\x68\x66\xcf\xe6\xce\xd2\xb9\xbf\xeb\xfe\x32\x3c\x1d\x1c\x9d\x0e\xce\xde\x0e\x8f\x4e\xbb\xef\x06\xc3\xb3\x1f\x8e\x3f\x82\x0e\xd8\x22\xdf\x8f\x4e\xba\xdf\x9f\x49\xc1\xd4\xb8\x84\x8d\x03\xfe\xe3\x82\xfc\x7f\xa5\xf7\xe1\x44\x0c\x80\xc6\x7f\x1e\xe8\xd5\x7e\x7c\x7f\x38\x38\x3d\x39\x7e\x3f\x10\x22\x9e\xb3\x32\x43\x83\xde\xc9\xf1\xfb\x1f\x84\xb0\x65\xf2\xb7\xa1\xe2\xf1\xfb\x9f\x06\xa7\x67\x04\xee\x2e\x89\x21\xa6\x25\xe6\xca\xc7\x67\xc7\xbd\x13\x52\xbd\xb5\xcd\xea\xd3\x42\x1c\x76\x8c\xab\xe2\x80\x63\xf2\x1b\x0b\x35\x26\xbc\xb9\x8e\xa3\x4f\x30\xec\x45\x33\x9f\xbb\x06\xa1\xe2\x53\x18\xfa\x30\xce\x8d\x42\x66\xd5\xaa\x8e\xc0\xe3\x22\xc1\xc4\x31\x1c\xc7\x30\x99\x9e\x46\xb7\xc9\xff\xb3\x80\x0b\xa8\xdc\xce\x49\x95\x8e\x62\xef\x06\x26\x67\x9f\x82\xf9\x1c\x3f\xe7\xd6\xb4\xd4\xeb\x86\xc1\x0d\xf6\x58\xc4\x0d\x34\xc7\x27\xba\x0e\xcc\xbd\x50\x93\x38\x54\x17\xde\x5a\x84\xb1\x61\x2a\xae\x56\x10\xa0\x8a\xf2\x82\xa9\xc8\xdb\x0e\xc1\xaf\xae\xe6\x12\xfb\x47\x53\x38\xfa\x84\x7e\xef\xe1\x52\x55\x49\x41\xed\x5d\x38\xf5\x49\xef\x6f\xd2\x1b\x82\x84\x8d\xb4\xa0\xe0\x7e\x47\x23\x75\x4a\x98\xad\xae\xb9\x71\x5a\x07\x30\xf4\x75\x69\x50\x47\x9a\xa8\xe3\x2f\x00\xb7\xd9\x07\x59\xd3\x7d\xf4\x3f\xe9\xb5\x29\xc1\x98\x37\x0e\xb1\xf9\x95\x78\x9b\x34\xdc\x06\xa1\x1f\xdd\x36\xa8\x1f\xb2\xfc\xb9\x2a\x35\x3d\x89\xa2\x79\xe3\x3a\x08\x7d\x72\x2d\xa4\xf1\x9f\x6a\x6b\x03\x87\x44\x08\xd6\x25\x00\x3f\xda\xfa\x29\x98\x33\xc2\x94\x51\xbf\x8d\x83\x14\xf6\x16\xe3\x31\x8c\x85\xe7\xab\xd1\x86\xc5\x3e\x2b\x56\x57\xc1\xab\x8e\x45\x2d\xca\xfc\xe4\x88\xff\x78\xe6\x01\xe7\x93\xe4\x45\xa7\x3c\xe6\x1e\x12\x1a\xb9\x08\x86\xbe\xdc\x51\x8b\xf4\x71\x8e\x6e\xaa\x0c\xc0\x40\xf5\xed\x31\x12\x4a\x6d\x8c\xe2\xe8\x36\x01\x6b\x62\x30\x9d\xf3\x8d\x38\x06\xda\x4c\xd3\x45\xf3\xaa\xa1\xf4\x48\x45\x6c\x6a\x22\xf5\x18\x38\x5f\xd9\xb7\x70\xc1\xf8\x22\x99\x9b\x7f\x17\x01\xa5\x15\xbc\x22\xbd\xb2\xed\x56\x72\xba\x1c\x18\xbb\x0c\x8c\x3b\x08\x37\x35\x88\x4d\xaf\x55\xd5\x53\x98\x8f\x81\x81\x8f\x3a\x15\xa6\xcd\x4a\xf9\x75\xac\xd0\xfa\x44\xeb\x8a\x2a\xf5\xa0\xa0\xd2\x29\xa0\x92\xb3\xf7\xec\xe4\xc9\x82\x78\xb4\x46\xc7\xec\xb5\x59\xda\xd7\xf5\x73\x08\xfe\x32\x9e\x79\xdd\x32\x3e\x94\x07\xb2\xc4\x7d\x96\xb7\x10\x2d\xc0\xc4\x57\xee\x74\xfa\xfa\xe4\x59\x36\x2d\x6b\x80\x69\xe4\x10\x13\x6e\x03\x3f\x9d\x1a\x8e\x43\xa3\x99\xf2\x9c\xf9\x3d\xd9\x33\xc6\x06\x86\x99\x19\x65\xd6\xab\x72\xb0\xc6\xff\xc2\xd0\xff\x5f\x10\x24\x20\x8d\x22\x30\xf3\xe2\x09\x6c\x80\x77\x51\x92\x82\x59\xf0\x09\xce\xee\x81\x07\xae\x3d\x1f\xf4\xcf\x4e\xb5\xb0\x8d\xd2\xda\x88\x66\x1b\xb9\x47\xeb\x03\x92\x74\x70\x6f\x7e\x66\x3c\xc6\x79\x3c\xee\xc1\xaa\x0a\xfc\xde\x0f\x92\xf9\x81\x56\x7f\x16\x84\x86\xb5\x0b\x95\x26\x68\x37\x58\x8d\xa3\x5b\xc3\x23\x69\x77\x96\xdb\x56\xc3\x39\xd8\x3d\x36\xa1\xee\xc1\x9a\xfe\xe5\xda\x4b\x20\x58\x33\x12\x5a\x03\x2f\x5e\xe4\x49\xd4\x88\x66\xce\xf2\x52\x68\xaa\x6d\x38\x7a\x4c\xa2\xf8\x6d\xe0\xfb\x30\x34\xc9\xeb\x9d\xce\x86\x3b\x9b\x10\x02\xfb\xa9\x16\x02\xb3\xd6\x72\x35\x44\x0c\xf4\xd2\x34\xd6\xf1\xf9\x70\xdc\x4d\xd3\x58\xe7\x37\x7b\x01\xed\x28\xf6\x26\xf4\x71\x59\xe5\x51\xb4\x43\xa5\x86\xea\xa6\x82\xd7\x13\xc7\x2b\xe0\x38\x53\x34\xd9\x26\x67\x0f\xe1\x9a\x86\xf8\x76\x1a\xcc\xa0\x36\x96\xf8\x51\xc7\x18\x86\x17\xf7\x57\xfc\x77\x87\x33\x1b\x7f\x4b\xdb\x30\x75\x0d\x90\xa4\x87\x22\xd9\x8f\xa3\x9d\xa8\x63\x70\xb9\xe1\x90\xde\x61\x78\x37\x62\x38\x83\x5e\x02\x8d\x6d\x1f\xec\x6b\x35\x7d\x2f\x14\xeb\x24\xeb\x9a\x8c\x87\x93\x64\x2a\x42\xb3\xec\x22\xb8\x32\xf6\x8e\x70\x48\xa8\x64\xf2\x96\x27\x95\x86\x4c\x09\xb2\xaa\x6d\x43\x55\x6c\x83\xb3\xba\xb6\x25\xb6\x4c\xae\x1d\x9c\xf5\x07\xcf\x6d\xab\xeb\x04\xed\xa6\x3a\x1b\xec\xf0\x70\x83\xe7\x9d\x0e\x9e\x1e\x36\xa8\xa8\x22\x9e\x3e\xa8\xa2\x79\x02\xe5\x1d\xbd\xf2\x89\x90\xeb\xf4\x21\xcd\x08\xe9\x19\x7d\xfe\xbb\xfb\xfe\xa7\xe8\xcb\xfb\xf6\x13\x7c\x75\xee\x4b\x8f\xf3\xcb\x04\x3a\xee\xa2\xb4\xb9\x6d\x8f\x26\x32\x93\x22\x8d\xcf\x23\xd9\x8e\x93\xfb\x2a\xa4\x97\x1a\x09\xae\x36\xcc\xf3\xd7\x1b\xe1\xa3\xa6\xf2\x91\x64\x8c\xd2\x72\xb4\x95\x12\x29\xbd\x33\xcb\x88\x15\x28\x21\x5a\x20\xf7\xf6\xfd\x69\x44\xcc\x8e\xe3\xa9\x07\x8f\xcb\x22\x52\x3f\x6b\xda\xcb\xc3\x6e\xf4\xc2\xc3\xdc\x9e\xef\x57\x2b\xf4\x29\xa7\xb5\xcf\x81\x0f\xa3\xbc\x2b\x68\x37\x28\x36\x21\xd6\x88\xad\xe1\x02\xf6\xa8\x1b\x3b\x7c\xfe\x37\xa1\xf9\xda\xc0\x0b\xd0\xbc\x6b\x8d\xc7\x6e\xc2\xf1\xfb\xc5\xa8\x09\x61\xdc\xeb\xd7\x60\xaf\x56\xa2\xe5\xcc\x9b\x24\x0c\xdf\xeb\xd7\xa0\x95\xe3\xca\x8d\x06\x88\xb4\x79\x41\xce\x3d\x1b\xbd\x0f\x27\x87\x45\xa6\x06\x5e\xa7\xb2\xc3\xb5\xc2\x3e\x68\xce\x71\xb9\x43\x03\xb3\x76\x1d\xcd\xfc\x22\x2e\x06\xf9\x9e\x2a\xb8\x7b\x13\xf0\x0a\xec\x16\xa5\x6f\x3c\x01\xab\x1d\x90\xc3\xb5\x7c\xe4\xee\xaf\x3a\xd7\xf9\xc9\xf6\x12\x5a\xc9\xc8\xc3\x05\xda\xb5\x22\x3b\x23\x8f\x91\x65\x29\xc5\xc7\xea\x4f\x45\xe5\xf5\x2c\x08\x3f\x3d\x35\x85\xf4\x34\xbf\x08\x8d\x68\xca\xa4\xf0\x66\x0e\x3a\xe0\x7a\x52\xc0\x3f\x04\xcd\xcb\x71\x81\x8a\x78\x02\x23\xc0\x05\x16\x87\x31\xa8\xf2\x0e\xb4\xd0\x76\x0a\xfc\xff\x42\x62\xf9\x1d\xc8\x53\xc9\xc2\x14\x6f\xf8\xfe\x44\x61\xc0\x17\x0a\x13\xe2\x01\xb2\xb5\x53\x94\xfd\x58\x26\x5a\x5b\x4f\xa8\xad\x08\x01\xdb\x25\xc6\xbf\x50\xf6\xba\xc7\x0e\xff\x35\x92\xca\x82\x74\x39\xc7\x7b\x85\xce\xfd\xc9\xda\x28\x9a\x45\xf1\xda\x0a\x58\x05\xd7\x93\xc7\x8f\xfb\x13\xd3\x97\x11\x37\x5e\x9e\xb8\xa2\xde\x37\xe6\x6d\x56\xb6\x65\x74\x79\x25\x65\xe6\xe5\x6a\x07\xac\xbc\x42\xc6\x1a\xc0\x3d\xea\x5c\xd2\xae\xdc\x06\x3e\x5c\x1b\x4d\xbd\xf8\x72\xe5\xf5\x0a\x8e\xf9\x02\xab\x60\xe5\xd5\x3a\xaa\xfa\x7a\xa5\xc8\xa6\x4f\x08\xea\x52\xc2\xc5\x5e\x83\xf6\xd6\xd6\xf2\xa4\x91\xa4\x29\x4f\x40\x9c\xe5\x54\xbc\x44\x06\xcd\x17\x39\x2e\x9d\x52\x67\x2a\x2f\xbc\x9b\xf9\x41\x8e\x31\x5f\x28\xf9\xcc\xab\x72\x68\x67\xe9\x93\x60\xcd\x4b\x79\xa3\x60\x9d\x3c\x16\x6b\x21\x5f\x4f\xea\x6d\xf5\x4a\x4b\xc3\x5f\x90\xca\xf0\x3a\xc9\x1d\x93\x02\xc1\x8b\x25\xf1\xba\xbc\xef\xf2\x31\x96\x8a\x74\xd3\x4b\xe8\xf9\xa4\x9e\x2b\x5b\x4f\x71\x5c\x76\x57\xff\x14\x9b\x41\x9d\x8a\x7c\xbc\x85\x76\xe9\xcb\xef\xcc\xf3\x76\xe3\x3a\x8f\x1f\xb7\xeb\x2e\x70\xa0\x23\xa3\x74\x9c\x97\x8a\x88\x55\xaa\x8c\x5e\x0b\xf6\x9b\x1f\xcb\xad\x8f\x88\xa1\xd8\xad\x8f\x7a\x43\x97\x81\xbc\x09\x52\xb4\x6b\xc7\x77\x65\x95\x3a\xf8\x02\x28\x92\x7d\x0b\xf2\x7a\x9e\x8f\x02\xbd\x92\xb3\x5e\xcc\x51\x5c\x67\x70\x06\x47\x34\x4f\x7d\xde\x05\x9d\xf9\x94\x3c\x61\x10\x78\x87\xf3\x0e\xcb\xf3\x01\x38\xee\xd3\x1c\xe8\x2e\x9a\x57\xd6\x81\x7d\x4e\xee\x0f\xbf\x7e\x05\xcf\x0d\xd7\xb1\xf6\x9b\x7f\x1c\x8a\x47\x33\x85\x9d\x21\x10\xa7\xf8\x2e\x0a\x43\xbb\x68\x5d\x59\x6e\x7a\x0e\x8c\xed\x07\xa1\x4f\x5a\xc3\xd0\x2f\xdb\xb6\x8f\x84\xcd\x17\x28\x78\xe7\xa5\xd3\xc6\x8d\x77\x57\x55\xa9\xab\x83\x66\xcd\x05\x83\x53\x41\x20\x04\x61\x55\xa6\x4f\x0b\x09\x60\x37\x78\x8a\xf3\x8b\x85\x32\xcb\x0d\xed\xd7\xaf\x66\x32\x5e\x81\x66\xb9\xc1\x78\xdc\xad\x11\x77\xd0\xe8\x63\x57\x24\x7d\x64\x3b\x1d\x1b\xcb\xdf\xd0\x41\x6f\x5e\x81\x7d\xd5\xe7\x03\xa9\x01\x09\xa0\x3a\x5c\x1a\x58\xda\xfd\x37\x58\x16\x30\x48\xe7\x6d\xaf\x53\xad\x92\x96\xa4\xf3\x7c\x3e\x53\x1d\x6a\x19\xa6\x3a\xe7\x42\x9d\x12\x5f\x53\xb8\x74\x13\xf8\xfe\x0c\x9e\x46\xb7\x49\x3f\x5a\x90\x8b\x33\x53\x07\xd6\x6c\x5d\x96\xae\x7c\x9f\x9a\x7c\xb0\x0a\x5a\x75\xd0\xd4\x44\x15\x31\xad\xae\x92\x5e\x2b\x26\xb8\xcf\x2d\x63\x64\xba\x90\x26\x2c\xc3\xbe\xa0\xea\xe4\x7e\xec\x48\x3f\x25\xbb\xd8\x84\x6e\xd6\x39\xc5\xba\xc3\x58\x31\x8d\x5c\x60\x35\x75\x38\x81\x98\xa9\x95\x96\x9c\x18\x11\x3a\x8a\x66\x67\x64\xe9\x19\x45\xb3\x41\xe8\xd7\x01\x5e\x48\x17\xf2\x92\x8c\x06\x91\x95\x13\x86\xe3\x2b\x5d\xfc\xc4\x11\x2f\x06\xad\x03\x45\x73\x40\x8e\x55\x51\x18\x8c\x79\x15\x3f\xf8\x2c\x9e\xa9\xb0\x75\x3e\x49\xef\x67\xb0\x31\x85\xc1\x64\x8a\x5a\x73\x1c\x2f\x75\xf3\xc3\x8b\xdf\x41\x2f\x59\xc4\xbc\xfa\x2a\x58\x99\xdf\xad\xd8\x60\xa6\xd8\x13\x2f\x8e\x6e\x9f\x00\xd6\x0c\x8e\x11\x75\x8c\x85\x6e\x88\x64\xab\xec\x06\x68\x73\x43\xd1\xc0\xbc\x04\x55\x32\x5c\x60\x8d\xa3\xaf\x69\xc0\xa9\xff\x38\xc5\x61\x72\x2d\x67\x92\xa3\x3a\x97\x0b\xee\xbf\x59\x15\x2e\x39\x9a\x9f\xaa\xe2\xfb\x2b\x2e\x1a\xf8\xa4\x91\xf6\x23\xba\x0d\x61\xcc\xd6\x8a\x83\x67\x99\x94\x38\x04\x44\xf4\x44\x85\x33\xc9\x92\xae\x4c\xe1\x6c\x16\x81\xdb\x28\x9e\xf9\xd4\x52\x16\x13\x96\xf2\xc9\x03\xd9\xab\x17\xd8\xd3\x07\x69\x10\x38\x6b\x44\xe3\x71\x02\xd3\x9f\xf1\x1d\x3b\xff\x38\x95\x3e\xbe\xc5\x32\xc0\x51\x93\x21\x1a\x47\x61\xfa\x33\x93\xcb\x0a\xbe\x0b\x10\x80\xb7\x5d\xc0\xdb\x36\xe0\xd9\xba\x2d\x18\x61\x9c\x6a\x3a\x54\xb7\x2d\xac\x2f\x6f\xdb\x68\x61\x9f\x92\x3f\xa6\xed\x83\x67\x0f\x16\xc7\x7f\xae\x14\x2c\xae\xff\xad\xa7\x74\xfd\x47\xfd\x1b\x0e\xe1\x5d\x0a\x43\x3f\x01\x1d\x62\xb1\x66\x3e\xaa\xec\x4b\x0d\xbb\xa1\xeb\x6e\xb0\x58\x0a\x70\x95\xb3\xd4\x4b\x03\x9c\x53\x93\x46\x13\xe0\xe8\x1b\xaa\xd5\x3e\x8c\xc1\xd7\xaf\x5c\xba\xab\x5f\xc0\x70\x88\x35\xde\x70\xb8\x0f\x2e\xae\xc0\x03\x08\xc2\x24\xf5\xc2\x11\x8c\xc6\xa0\x1b\xc7\xde\x3d\x3e\xae\xce\x1e\x9a\xaa\x83\x6b\xa4\xb1\xfc\x06\x6f\x07\x3a\xe0\xfa\x00\x3c\xd4\x44\xb8\x7a\x03\xee\x9d\x31\x07\x41\x88\x8a\xf0\x81\x63\x63\xea\x25\x1f\x6e\x43\x1e\xe8\x30\xaf\xd5\x80\x7f\x31\xbf\x42\x30\x2f\xe6\x57\x07\xca\x54\xd3\xc0\x66\x3a\x40\xec\x39\xf9\x7a\xa0\x53\x33\x1c\x22\x76\x11\x86\x8e\xa2\x30\x49\xe3\xc5\x28\x8d\xf0\xee\x5a\x54\xbb\x7e\xb6\x08\x20\x42\xb8\xe3\x39\x78\xc3\x38\x4a\x26\x58\xf5\xba\x06\xf6\x41\x75\x38\x94\xeb\x67\x7f\xd5\xb1\xd7\x38\xc2\x9a\x2d\x36\x0f\x35\x64\xd9\x3d\x41\x9c\xc7\xbb\x68\x81\x5f\x01\x33\x85\x75\xec\xd1\x3a\x3d\x64\xc5\x92\xb7\xca\x0c\xb5\x76\x69\xad\xc1\x67\xb4\x7b\xbd\x09\xd2\x14\xc6\xd6\x48\x91\x16\xad\xcc\x97\xc3\x77\x91\x0f\xed\x81\x25\xed\x36\x0b\x47\x39\xed\x7e\x3f\x3c\xeb\x9f\x7e\x38\x39\x19\xbe\xeb\xfe\x32\x3c\x7f\x7b\x3a\x38\x7b\xfb\xe1\xe4\x10\x74\xc0\x56\xd3\x5c\xe7\xec\xe3\x60\x70\x48\x0f\xdd\xd5\xef\xc7\xef\xcf\x07\xa7\x3f\x75\x4f\x84\xe6\xfd\x93\x41\xf7\x74\xf8\xee\xc3\x8f\x67\x83\xe1\xe1\x87\x9f\xdf\x0f\xcf\x8f\xdf\x0d\x40\x07\x6c\x36\x4d\x15\x8e\xcf\xce\xbb\xef\xfb\xe8\x7b\x8b\x7e\xfe\xf9\xc3\xe9\xe1\xf0\x6c\xf0\xb1\x7b\xda\x3d\xff\x70\x7a\x86\x94\x12\xa8\xd6\x2e\xae\xbe\x3c\x5c\x56\x56\x2a\xa4\xce\xc9\xf1\xfb\xc1\xf0\xb0\x7b\xde\xc5\x59\x69\x87\xc7\xef\x0f\x07\xbf\x90\xb7\x3f\xe4\xaf\x3f\x1f\x1f\x9e\xbf\xe5\x9f\xdb\xe4\xf3\xfb\x0f\xef\x87\xbd\xd3\x41\xf7\x87\xe3\xf7\xdf\x0f\xcf\x3e\x76\xfb\x03\x0c\x05\x74\xc0\x59\x1a\x07\xe1\xa4\x31\x8e\xa3\x9b\x3e\x3d\x74\xad\xb6\xb6\x9b\x94\x77\xdd\x93\x93\xa1\xa1\xed\xe9\xe0\x7b\x0c\x1d\x09\xd7\x29\x9c\x0c\xee\xe6\x55\x0b\x86\x3a\xa8\x4c\x2a\xa6\x81\x93\x22\x79\xa4\x2f\x6c\x56\x49\x85\x17\xf2\x5f\x39\x8f\x23\x3a\x9b\x22\x66\x0b\xc1\x41\xf8\xcf\x02\xcd\x94\x38\x21\x1a\x22\xf4\x50\x93\x89\xc7\xba\x51\x2e\x11\x5f\x05\xcc\xbe\x78\xa1\x37\x51\x23\x73\x86\xc9\x62\x9e\xa5\x72\xe2\x0a\xb7\xaa\xb6\xaa\x03\x5a\x93\x90\xcd\x01\xa8\xf5\xb2\x80\x9e\x3a\x18\x5e\xe3\xe8\x83\x3a\x18\x8a\x67\x2c\x75\x30\x14\xec\x12\xd5\xab\x78\x88\x17\x80\x0e\xc5\xd6\x18\x79\xb3\x19\x09\x00\x40\xbd\x44\xbf\x64\x1a\x6e\x58\x24\x4c\x88\x56\x22\x94\xa0\x2a\xe4\x37\xad\x82\x48\x21\xaa\x26\xfe\xad\x55\x16\xe8\x47\x75\x85\x3f\xb5\xaa\x41\x18\xa4\x27\x41\x92\xc2\x10\xc6\x89\xb8\xbd\x25\xdf\x61\xe8\x5d\xcf\xa0\x5e\x3e\xbc\x41\x8a\x86\x8a\xbb\xaa\x7d\x1a\x72\x41\xd5\xf4\x48\x17\x05\x33\xf3\x92\x14\xeb\xcc\xc3\xe8\x36\x3c\x0f\xb0\xbb\x78\x53\xab\xe5\x8d\xd2\xe0\x33\x54\x45\x48\xfa\x5b\x8b\xd6\xa5\xab\xd3\x30\x1b\x93\x07\x45\xa0\x89\x40\x88\x7b\x0b\x89\x19\xce\xb8\x16\x26\x06\xf2\x88\x8b\x63\x79\x1e\x07\x37\x0c\x96\x04\xca\xbb\xa1\x9b\x10\x89\xc4\xc6\x30\x0a\x51\x13\xf6\x99\xaf\xb2\x19\xdc\x1b\xc4\xa7\x77\xd1\x67\x68\x04\x0b\x3f\x43\x33\xd4\x77\xac\x19\xad\x62\x83\x8c\x46\x60\x09\xc8\xf8\x8d\x79\x37\xe4\x1f\xe7\x4b\xc0\xfd\x71\xae\x42\x7d\x50\x35\x92\x36\x80\x7e\x90\x20\x71\x75\x07\xa5\x8e\x66\xd0\x8b\x39\x90\xaa\x16\x15\x4b\x86\x0f\x59\xb3\xd5\x4a\x1a\x07\x37\x3c\xb1\x85\x3e\xae\x5a\x5b\x71\x56\x52\xa3\x17\xaf\xe3\xac\x41\xb5\x82\x19\xe2\x47\xb7\x21\x07\xab\x31\xbf\x56\xb4\xbb\x64\x72\xe6\x84\xe0\xb2\xee\x84\x8f\xec\x8d\xe7\xfb\xdf\xb0\x2b\x09\x4c\x7b\x4c\x05\x66\xbd\x21\x34\xda\xfa\x84\xcc\x3a\x45\x59\x3a\x06\x98\xd2\x60\xb6\xf1\xec\x94\xd5\xc1\xca\xd4\x4b\xf8\x77\x64\xf8\x71\x6c\x13\x98\xee\x5b\x78\x0f\xc4\x03\x42\xbe\xf1\xc5\x4a\x93\xc4\x78\x73\x88\x67\x7a\x78\x10\x3d\x16\x72\x36\x1b\xa8\xd1\x3c\xf9\x27\xd3\x82\x56\x34\x24\xb6\x79\x30\x1c\x9c\x66\xc7\x94\x68\x53\x46\x0f\x9d\xbe\x7e\xcd\x8e\xac\x59\xb1\xe8\x7c\xfd\x50\xcf\x36\x00\xe1\xe2\x06\xc6\x48\x48\x89\x99\x9c\x7d\x19\x45\xe1\x38\x98\x2c\x84\x6f\x64\x90\x6a\x4b\x8f\x12\x3f\x68\x3a\x87\x77\xe9\xbf\xc9\x30\xa9\xf7\x64\x7a\x9c\x44\x42\x8f\x1c\x07\xec\xd4\x98\x0f\x4d\x87\x0f\x8d\x78\x5e\xa8\x5f\x82\xe1\xa0\x18\x98\x2c\x66\xa9\x21\x73\x30\xf9\x20\x65\x16\x88\xbd\x30\x99\x79\x2c\x72\xf3\x24\x08\xe1\x79\x44\x0c\xe6\xaa\xa4\x70\x26\x30\xad\x32\x62\x6a\x75\x32\xfc\x5c\x9e\xea\x0a\xe1\x6a\xf8\xa4\x14\x36\xc0\xbb\xb4\x4a\xa3\xfd\x84\x5b\x8f\x96\x33\x8e\xe0\x9a\xd3\xc8\x07\x49\xa0\x2e\x30\xdc\x1a\xb2\x90\x1f\x24\x44\xd9\x79\x95\xa3\xcf\x19\x0a\xd2\x47\xcb\xfb\xbf\x59\xb5\x46\x90\xfc\x1c\xe3\x23\x55\xdb\x1d\x2b\x61\xfa\x05\xe5\x3d\x0d\xe4\x5c\x43\xa6\xf9\x6a\x87\x13\xf7\x48\x07\x0d\x71\x60\x19\x48\x03\xe9\xb6\xf0\x40\xd6\x2d\x83\x22\x58\x6e\x2c\x68\xdb\x6f\x30\x20\xec\xc8\x5a\xbe\xd1\x13\x3b\xf1\x6f\x38\x36\xd8\x27\x39\x8a\x6f\xbc\x34\x85\xfe\x29\x9b\xdd\x14\xf0\x8d\x37\x17\x36\x58\x08\x83\x43\x05\xa1\xcf\x8d\x18\xce\x67\xde\x08\x56\x5d\x5b\xdf\x3a\x76\x1e\x51\xf4\x55\xad\xf1\x5b\x14\x84\x55\x7a\xe2\xd1\x08\x92\x77\x67\x3f\xe3\x08\xeb\x04\xbc\x01\x95\xcb\xf8\x32\xac\x80\x7d\x50\xb9\xd4\xfc\x0f\xd9\x3a\x25\xf7\xe1\x69\x17\x19\x87\x39\x22\x9b\x10\x39\x16\x16\xd1\xfb\x79\x66\x25\xb1\x06\xdf\xa9\x16\x52\xa2\xd5\x64\x91\xb1\x85\x6d\x27\xd7\x74\x90\x48\x9f\xd1\x49\x11\xdc\x9c\x06\x93\x69\x6a\xb8\xb8\x53\x6e\x46\xb2\xeb\x4d\xe9\x66\x44\xb8\xf5\x6c\x1e\x28\x97\xe3\xec\xfa\x52\x6a\xc0\xef\x34\xf1\xf2\xa3\xdc\xa5\x20\xaa\x38\xb1\xe2\x8a\xc7\xe3\x57\xbb\xfe\x6f\x8b\x24\xa5\xf7\x6b\xc2\x32\xd7\x8f\x66\x8e\xda\x7c\x49\x24\xd8\x85\x93\x47\x43\x4c\x1a\x16\x73\x47\xb4\x38\x89\x24\xc3\xf9\x6e\x68\x14\x99\x2c\xaf\x42\x27\xb0\x6b\x92\x17\x5f\x98\x0e\xa7\xae\x74\x63\x40\xa9\x2b\x1c\x55\x91\x35\x5c\xbb\xd3\xd6\x06\xe7\x75\x07\x04\x36\x7d\x65\xe4\x9f\xe9\x4d\x54\xb3\x27\x24\x1d\xb8\xc2\x18\x08\xcf\xf3\xe1\xdb\xc2\x95\xb1\xf1\xc4\x07\xce\x34\x9c\x5f\xbf\x4a\x63\x25\xc9\x1e\x97\x6c\x63\xe0\x2f\xfa\xf0\xf3\x34\x48\x61\x32\xf7\x46\xf0\x38\xf4\xe1\x1d\x1d\x4d\x7a\xde\x97\x40\x2f\x1e\x4d\xab\xeb\x97\xc9\xea\x77\xeb\x35\x7d\xa4\x8c\x10\x9e\x5b\x23\x6c\xe4\xbe\x70\x0f\x09\xa1\xb8\x6e\x24\x2a\xd7\x95\x4b\x04\xfc\xaa\x63\x1e\xe2\xa5\x8c\x4a\x2d\x43\x99\xc8\x9c\xc5\x75\x42\x16\x58\x23\xbe\xba\xd8\xdd\xc2\x9a\xcb\x14\xd0\x1f\x24\xef\xe1\x2d\x6f\x53\xec\xdc\xe5\x0f\x4c\xa0\x22\x2d\x04\xca\xc9\x45\xa6\xb9\xa5\xf4\x2e\xb2\x82\xcc\xd6\xc2\x93\x20\x5c\xe0\x74\x8d\xf6\x2e\xb3\x6e\x4b\x9b\x1b\x66\x06\x49\x85\xba\xb8\x4a\x9f\x1d\xb1\xc6\xe4\x9c\x0f\x3b\x8d\x85\xf0\x96\xb7\x62\x9b\x7a\x09\x4c\x4e\xd6\x81\x02\x6b\x95\x69\xc8\xad\xc9\x74\x8a\x64\x92\xd0\xdd\xdd\xa8\x37\x5b\xce\x5e\x8e\xfa\xb9\x39\xb7\x6e\xaa\x07\x9c\xf3\x00\x03\x7d\xea\xce\x66\x85\x8c\x85\x80\x9e\x28\x74\x67\xb3\x2e\x3e\xdb\xd4\x1e\xf6\x5c\xd2\x14\x20\x87\x88\xe6\xf3\x46\x69\x22\x85\x10\xfa\x49\x96\xe3\x48\x24\x4e\x39\x88\x94\xa4\x57\x6c\x66\x9c\x55\x0a\xc9\xa5\x64\x63\x02\xc9\x59\x30\x31\x63\xfa\x51\x14\xfb\x89\xf1\xc4\x50\xea\xc9\x88\xd5\xc3\x6d\xd1\x6e\x82\xb4\x24\xb5\xeb\x86\xb3\x2c\x56\x26\x9c\x8b\x5b\xdc\x7f\x0c\xee\x67\xda\x36\x8f\xe0\xbf\x68\x5e\x89\xcb\x1e\x2d\x6c\x99\x0b\x91\x8d\xe0\xf6\xd7\xa3\x8a\x85\xb4\x28\x3c\xfa\x8c\x81\xf8\xa0\x8e\xbe\x43\x7a\x43\x7d\x58\x72\xb8\x48\x2e\xef\x75\x2e\x9e\xc2\x99\x87\x04\xf4\x3c\x62\x9e\x0b\x56\xb6\xd6\xa4\x63\x20\x12\xe3\x45\x7a\xf7\x96\xf9\x15\x98\xdc\xf9\x5e\xea\xa3\x41\xbd\x54\x64\xd1\xa3\x14\xbe\xee\x90\x24\x51\xf4\xcf\x57\x1d\x05\x8b\xd9\x05\x50\xbc\x54\x78\x30\x82\xcd\x01\x43\xab\xad\xa9\xe8\x4c\x60\x33\x5e\xb2\x45\x9f\x7b\x58\x92\x4f\x75\xb0\x66\xbd\x81\xad\xd5\xed\xb7\xb3\x82\xd4\x51\x1c\xeb\x1d\x7b\x6d\x4d\x9a\x58\x5f\xd7\x09\x61\xde\x75\x42\x4b\x6a\x35\xb0\x4a\xca\xe2\x68\x11\xfa\xac\xde\x4b\x50\x35\x5f\x02\xaf\x81\x56\xad\x8c\x4e\xe2\xbb\x1e\xb7\x1c\x62\x8b\x13\x15\x36\xae\x17\x69\x1a\x85\xd8\xb8\x2a\xe1\xd3\x49\xda\xce\x63\xfc\xef\x21\x89\x7c\xd0\x37\x62\x7e\xec\x4d\x94\xb9\xa1\x65\xda\x4b\xe8\x44\xea\xcf\x82\xd1\x27\xec\xa1\xc5\x2e\x23\x0c\xc4\x26\xd3\x60\x9c\xfe\x00\xef\xcd\x56\x46\x14\x9e\xa1\xef\x18\x92\x06\xc4\x99\x4d\x2b\x4b\x16\x33\xe2\x64\xe0\x2d\x81\xd1\xdc\xe4\xd8\x82\x70\x32\x83\x66\x74\xc0\x9c\xa4\xc5\x8a\xc8\x18\xfb\xc4\x10\x1d\x46\x8b\xeb\xa7\x42\xb4\xe1\x42\x74\x1e\x07\xf3\x62\x88\x54\x2f\x44\xcf\xf7\x4b\x6c\xb8\x05\xbd\x5e\x40\xaa\x8d\xb0\x97\xbe\x33\x94\xae\x5a\x24\x77\x32\xdb\xc5\xcb\x4d\xf4\x19\xca\x17\x2f\xe2\xd5\xa0\xfb\x2e\xa7\x10\x82\xc5\x5c\x06\x9f\xdd\xe2\x39\xa6\xd4\x71\x98\xc2\xf8\xb3\x37\x3b\x0f\x6e\xf0\x05\x4d\x02\x53\x56\xe4\x34\x9d\x33\x08\xd8\x7a\xae\x1b\xbd\x4b\x8a\x0f\x8e\xed\xb0\x25\xcf\xec\xb4\x33\xc9\x7e\x99\xf7\x74\x03\x61\xc7\x51\x68\x2c\xf0\x09\x14\xe7\xb6\x73\x64\x4a\x8c\x60\x66\x72\x17\x52\xf5\x99\xb2\xcb\xd7\xf5\xa2\xd1\x99\x48\xc6\xb9\x59\x95\x2a\x35\x07\xc2\xdd\x8b\xc9\x74\xb4\x68\xdb\x62\xdd\xc8\xb4\xa8\xbb\x1f\xf6\x3e\x9c\xd0\xcc\xf6\xfa\xea\x62\xdf\x03\x28\xf7\x72\xcb\x7b\x3f\xd8\xc9\x2a\xc7\xb2\x27\x1b\x26\xf3\xc5\x13\x3d\x52\xd3\xae\x03\xec\x28\x2f\x5a\x57\xb5\x0b\xc7\xe7\xe6\xd5\x53\x9d\xb1\x39\x91\xa8\x19\xe5\x97\xd8\x09\x4b\x2b\x68\x89\x6d\x4e\xc9\xd1\x23\xed\xcc\x23\x55\x44\xb2\x7e\xfe\x70\x7a\x78\x60\x68\x4b\x58\xf2\x73\x14\xfb\xdd\x94\x21\x59\x6a\xaa\x09\xcb\xfb\x5f\x97\x0b\x48\x78\xec\x5c\x38\x09\x42\xc8\xb9\x20\xdf\x63\x15\x66\x84\x6e\x72\x16\xe0\x06\x89\x71\xa4\x7e\x53\x55\x9c\x0d\xd9\x4b\x61\xb5\x56\x43\xb3\x08\x15\x57\x55\x3e\x08\x2d\x58\xcc\x98\xee\x83\xf5\xda\xe2\xbd\x49\x5d\xdc\x1a\x43\x3f\x20\xfe\xc8\x47\x71\x74\x73\xc2\x9a\x7f\xa4\xc9\xde\x19\xad\xaf\x8d\x2e\x9e\xe6\x31\x10\xed\x41\xf3\x5e\xcd\xee\x2f\x26\xf4\x49\x55\x80\x33\x95\x36\xd0\x01\x17\x74\x9b\xe0\x4d\xe0\x2f\x75\x90\xfd\xf1\xab\x96\xcf\x34\x23\x4a\xc9\x5f\xef\x1a\x47\x27\x6b\xf2\x87\x94\x5f\xc5\xf3\x2d\x23\xdf\xab\x59\xba\x74\xd1\xbc\x02\x6b\x42\x3f\x7e\xa9\xd5\x41\x6e\x9b\x96\xdc\xe6\x57\xf1\x02\x9e\x5a\x66\xb1\x70\xe5\x56\x7c\x97\x87\x6c\x9f\xfc\x5e\xa2\x3d\x5a\x10\x2d\x92\x33\xd3\x5a\x6e\x58\x3f\xde\x00\xb3\xce\x1f\xe0\x7b\xdd\xba\xb5\xe1\x45\xeb\x4a\xf7\x7a\x78\x1a\x63\x22\x5b\x19\x8d\xfa\xa3\x63\xd2\x20\xaa\xec\x5b\x57\x57\x42\x3a\xcf\x6b\x6c\x5b\x08\x8b\xae\x5a\x84\x4d\x7a\xbe\x92\x42\x09\x3b\xdd\x10\x0d\xc7\x66\xf9\xbb\x33\x65\x33\x58\x8c\x81\x68\x21\x32\x2b\x0f\x42\xd5\x79\x44\x17\x23\x1b\xc1\x8e\x70\x35\xc3\x99\x80\x2c\x0a\xda\x89\x9a\x43\x1e\x34\x60\xaf\x75\x03\xa3\x34\x53\x9d\x59\xb8\x1d\xb8\x0d\x41\xb1\x85\x45\xe4\x21\xdf\x0c\x54\x04\xf5\x5a\x4c\xe7\xee\xb8\x43\x2d\x66\xf0\x11\xe0\x16\x73\x8f\x10\x6c\x31\xf6\xc8\xb3\x57\x5e\x7c\xd1\x2e\x6b\xe0\x11\xb0\x79\xe6\x1d\xc3\xf5\xdc\xa8\xc8\x84\x98\x1b\xf4\x63\xaa\xc3\x7c\xea\x5c\x63\x51\x04\x4c\x2b\x07\x8c\xae\x24\x6c\x47\x1e\xa0\x8c\xb1\x92\x89\x99\x75\x47\x6d\x97\xc9\xbc\x18\x7e\x5c\xf5\x30\x48\xe6\x96\xf6\x75\xb2\x4d\x32\xdc\xd0\x16\x9f\x7f\xae\xf1\x47\x36\x82\x65\x06\x6a\x37\x02\xf8\xd8\x5e\x4f\x26\x1d\x47\xb7\xc9\xd5\x13\xea\x5a\x44\x92\x1e\xa2\x8c\x91\x3b\xd1\x3c\xfa\x4a\x86\x3b\x63\x17\xd9\x05\xe7\xb9\xb8\x14\xc0\x37\x8a\xc2\xcf\x30\x4e\x7f\x62\xb1\xc7\xd1\xec\x3c\xea\x4f\xbd\xd8\x1b\xa5\x30\x66\x77\xf6\xaa\x83\x30\x71\xf6\xd2\x4d\x7c\xa6\x70\x58\x3b\x7e\x53\x63\xf7\x05\xe1\x55\xb0\xcf\x43\x9e\x2b\x48\x86\x5e\x73\x08\x59\x7a\xdb\xc9\x09\x56\xbd\x28\x1c\xf7\xf4\xbc\x4d\x99\x9b\x22\xb2\x5a\x4a\xec\x34\xb3\xd0\xed\xb9\x67\xda\xf4\xe8\x89\xd3\x0b\x3a\xec\xa9\x13\x9b\xba\xd8\xb2\x01\xa4\x66\x79\xae\x8c\x98\xe4\x42\x06\x8a\xef\x88\x19\x58\x86\xe1\x40\x93\x9c\x0f\xec\x26\x27\x93\x8b\x35\xa1\xad\xd2\x63\x38\x4e\x7f\x0e\x7c\x48\x62\xc6\xb4\xad\x4c\xe6\x84\x62\xaf\x83\xa4\x06\xbb\xb7\x20\xe4\x5d\xea\x40\x4b\xbc\x42\xb0\xc4\x18\xf2\x33\xd1\x4c\x2a\x42\x87\xe8\x2b\x2a\x66\x38\xf8\xee\xc6\x06\x0b\xb0\x07\x2d\x72\x04\x50\xc0\xcb\x47\x47\xf2\xa1\x52\xf1\xf3\x5a\xab\x39\xd8\x59\xc5\x22\x0b\xb0\x41\x87\x2a\x39\x39\x0c\x13\x1e\xa8\x69\x36\x2c\x75\x64\xc7\xd0\x0b\x06\xf4\xaa\xf4\x7c\xd6\xa4\xc2\xf4\x18\x61\x62\xf1\xcc\xd2\x9d\x7f\x04\x9a\x48\x17\x9c\x14\x19\x2f\x70\x74\x21\x34\x91\x44\xa0\xdb\xc7\x01\xb8\x64\x8f\x3a\xe3\x04\x09\x42\x81\x14\xcd\x19\x9c\x7b\xb1\x97\x46\xb1\x45\xbc\xc9\x95\xa2\xcd\xd5\xcd\x30\x10\xd8\xe9\xb6\xf4\x60\x14\x1e\x10\xd7\xa0\xe8\x7c\x00\xce\x79\xe3\x82\xe5\x9e\x53\xab\xa0\xa5\xcf\xab\x82\xbc\x95\xa6\x5c\x11\xce\xd2\x19\xb1\x9a\xc3\x57\x6b\x3e\xc4\x62\x62\x05\xac\xa2\x65\x66\xab\x4d\x21\xd8\xe1\xd8\x7c\x0b\x59\x8c\x87\x20\x74\xab\xa2\x92\x5f\xd3\x25\x43\xd5\xef\xf4\x40\x9f\x5f\xeb\x73\x1e\xaf\xc9\x50\xf5\x95\x60\xd5\xa4\xfa\x57\x0d\x06\x25\xb2\x34\xf5\xb3\x18\xf5\x19\x31\x42\xca\x3e\x23\xa9\x70\x80\x9c\x74\x6a\x5b\x60\xe9\xbf\x8d\x62\x5f\x38\xbb\xe2\x7b\x62\xdb\xb1\xaf\xf3\xda\xe1\x42\x84\xd6\x48\x58\x72\x16\x6a\x3e\x68\xa7\x6f\xce\x3b\x15\x09\x94\xe8\x0b\x5a\x98\x07\xec\xb8\xe0\x8f\xe2\x82\xb4\xb1\x20\xdf\xbc\x38\x3b\xf4\xf8\xc9\x9b\x2d\x60\x72\x4a\x72\xad\xfb\xd5\x1a\x78\x03\x74\x76\x81\x7d\x50\x35\x94\xae\x9a\xd8\x51\xd3\x79\x5b\x80\x37\x06\xad\x22\x33\x68\xea\x49\xf1\x78\x54\x3e\x95\x60\xfd\x46\x80\x26\xc2\x87\x31\xad\xfe\x5a\x7d\x52\x34\x7f\x74\xc8\x89\xba\xe6\xbd\x5e\xec\xe6\x8d\xee\x96\x50\x83\x72\x52\x65\x3d\xcc\x92\x33\x5e\xa8\xe4\x1f\x3c\x7b\xa8\xca\xe9\x1a\x1a\xe2\x9f\x62\xfe\x19\x43\xb0\xbb\x0e\xcd\x9c\xf7\x44\x63\x9a\x25\xff\x49\xfb\x2f\xf6\xf4\xa9\x1c\x0c\x9e\xf3\xee\xa6\x35\x72\x5c\x1b\xf8\x02\xaf\x6f\x5a\x02\x41\x15\x11\xc4\x02\xb1\x5c\xe8\x87\x26\x76\x86\x83\x66\xe7\x3d\x28\xae\x51\xf4\x22\xd8\x7d\xbd\x5c\x30\xbe\x55\xee\x6d\x1d\xac\x18\x5c\x63\xcb\x44\x4f\xf2\x63\x17\xad\x17\x0e\x17\x74\x34\x3b\x55\x83\x5b\x37\x75\x9f\xeb\xfc\xfb\xfa\x15\x3c\x37\xf0\xc2\x81\xca\x50\xdb\x85\x57\x6c\x95\xa3\x9e\x75\xea\xf6\xdd\xd8\xfe\x88\xc0\xd8\x9c\xe1\x1d\x84\xfe\xb7\x1f\x5c\x83\x16\xd5\x8f\xae\xf0\xdb\x66\xc6\x73\x33\x6c\xd9\x97\x94\x8d\x3c\x29\xc8\xcb\xfd\x6a\x17\xb7\x5c\x49\xc8\xe5\x84\xe6\x3b\xc0\xba\x6d\x9a\xcf\xaa\xd3\x3d\xbb\xea\xc9\x65\x88\x15\xa2\xcd\xf2\xd7\x7a\xcb\x82\x86\xcd\x04\xd8\x03\x22\x49\x57\xf9\x75\xe5\xe3\xfb\x4c\x8e\xbf\x6b\xa6\x62\x8d\x11\x3a\x33\xec\xf3\x59\x84\xf4\xb4\xb3\xd2\xba\x98\xd8\x05\xc7\xfd\x6a\xae\xe8\xa8\x63\x53\x27\x4a\xf8\xb9\xb9\x77\x52\x1c\x7f\xeb\x8a\xbc\x20\x8a\x7e\xf9\xfa\x55\x88\xde\x15\x62\xc5\x5f\xbc\xc8\x82\xfe\x5f\xcb\x71\xb3\x9a\xf1\xa6\x74\xb6\x50\xec\x81\x45\x56\x8d\x77\x02\x9a\x10\x82\xb5\x0e\x20\x20\x9d\x97\x54\xd2\xa5\x9f\x13\x30\x15\xfb\xf2\x60\x79\x0a\x38\xfd\x26\xcc\x7c\xdf\x66\x0f\x0f\x15\xc5\x54\x0a\x01\x71\x91\x40\x0c\x0e\x8d\x08\xce\x28\x1b\x19\x7a\x4d\xcb\x8d\x9f\x9e\x28\xc2\x66\x03\x23\x29\x50\xd3\x2c\x6a\x36\x9f\x5a\x3d\xcf\xc4\xc5\xa2\x65\x31\x70\x37\xfe\x62\x06\x2e\x3b\x88\xce\x31\x6d\x59\xb5\x6a\x96\x80\x8a\x27\x7c\xe5\x89\xb8\xc9\xb5\x55\x0c\xbd\x3a\x28\x90\x84\x2a\xd5\x3d\x89\x05\xb3\xd8\x62\x15\x2b\x48\xc5\xbc\xb3\x62\x3e\xcd\x4c\x64\x38\x4d\xa0\x23\x10\xa8\xda\xda\x52\xca\x29\x63\xc6\x29\x52\x8f\x38\xeb\x9c\x46\xb7\x3c\x28\x44\xf5\x8f\x9c\x79\x49\x7a\x0a\x47\x51\xec\x43\x9f\xde\x17\xd8\x5c\x29\xc5\xaa\x8c\xbf\x56\xb8\x59\xba\xce\xb0\x5a\x21\x1d\xe1\x41\x6e\xf7\xe1\xe8\x8c\x77\xcd\xfc\xac\xb7\x0e\x23\x86\x49\xf0\x4f\x58\x1a\x86\xc2\x6e\x83\xff\xb5\x4c\x5c\x14\x12\xb0\x66\x90\x09\x71\xf4\x8a\x16\xa9\xcb\xc1\x5a\x26\x8e\xfa\x58\x37\xa5\x1d\x11\xe3\x5f\x4e\x7c\xa6\x51\x99\x1b\x32\xcc\x1a\x2e\x5d\xe9\xfb\xbb\x64\x80\xfa\x53\x2f\x9c\x40\xbe\x7c\x19\x20\xf0\x8b\x6d\x55\x66\xf4\x93\x7a\x15\xaa\xf5\xba\xd7\x20\x7e\x16\xf4\xba\x9d\x61\x1c\x3c\x9a\x30\x37\x08\x61\x1e\x40\xb0\x0a\x2a\xf3\x3b\xc3\xcb\x07\xb2\x60\x49\xfe\xe1\x8f\x84\xae\x27\x85\xf8\x2c\x4d\x12\x65\x0c\x1c\xb3\x89\x8f\x85\x64\xaa\xe7\x0f\x84\x98\xac\xbd\xd8\x08\x39\xa7\x74\x1e\x09\x39\xc3\x34\xcd\x63\xe2\x4b\x03\x86\x82\xe3\x66\x48\x74\x6d\x42\xea\x22\x2c\xf7\x26\x3f\xd3\xbe\x2a\x6c\xeb\x34\x7c\xe9\xd6\xa9\x35\xad\x77\x92\x6b\x80\x41\x27\xc8\x9a\x24\x5f\x35\x58\xb5\xb9\x2e\x52\xe4\x55\x6d\xc7\x43\x0f\x8e\x95\xc1\x0e\xc9\xe0\xb6\x6b\xf5\x88\x00\x9a\x47\x55\xe9\x39\x51\x2e\x2a\x16\xe4\x84\x7e\x95\x51\x8b\xd6\x29\x65\xc0\x0e\x5c\x17\x25\x78\x74\xcf\x71\x3e\x71\xb9\x7f\xc4\xdb\xe5\x65\x9e\x56\xe6\xd4\x6b\xc2\xce\x21\xa3\x4e\xf0\xbf\x8c\x2c\xb3\xb7\x15\x5a\x16\x17\x5b\xb6\x88\x2a\x7e\x2c\x7a\x58\xf4\xad\xf0\xa2\x05\x89\x86\xcc\x21\x67\xdd\x32\x1a\xf2\x4e\xcd\x0f\xc6\x63\x92\x2e\x93\xbc\x68\x60\x60\xac\xcd\xd4\x10\x1c\xa2\x10\x14\x29\x00\xd9\xd5\xe1\x9f\xa7\x10\xba\xfa\x4b\x22\x18\x1b\x3e\x9c\xa5\xde\xaf\xe6\x3b\x53\xf7\xfb\x19\x37\x8b\x59\x1a\xcc\x67\x01\x3e\xc6\x6e\x1d\x18\x01\x73\x67\x4e\x4c\x0d\xb6\x73\x1a\x87\x1f\xde\x0d\x0f\x07\x27\xe7\xdd\xa1\xc9\x29\x56\x82\x9a\x23\x69\x86\x59\x5b\x0c\xf1\xc7\xee\xf7\x4b\x20\x36\xae\x0f\x56\xaf\x52\xbb\xc8\xac\x76\x40\xc6\xf8\x97\x02\xe2\x0c\x16\xfc\x6c\x09\x64\x95\x1e\xe3\x31\x8e\xfb\x79\xb4\x18\x4d\xd9\x89\xb4\x6d\xf0\xb9\x72\xc3\xb5\x7f\x05\x98\xa2\x14\xfd\x0e\x93\x8b\xe6\x15\xf1\x0a\x2f\x85\xd1\xe0\xf9\xad\xce\x2e\x26\x6a\x1a\xf6\x35\x3b\xf6\x92\xc4\x32\xf9\x5b\x4e\xaa\xf3\xc7\x8d\xc0\x2d\x3b\x4e\xd4\x16\x67\xcc\x53\xb7\xcb\xc2\x0e\x32\xab\x62\xde\x22\x73\xfe\x5b\x36\xc7\x9b\x8f\xda\x1c\xe3\x59\xed\x21\x15\xfb\xe5\xd9\xdf\x56\x1a\xeb\x5e\x9a\x7a\xa3\x29\xfd\x67\x65\x1f\x6c\xd6\xf5\xe2\xc6\x6f\x89\xf6\x05\x81\xf6\x26\xb0\xf1\x5b\x12\x85\x2b\xfb\xa0\xbd\x45\xbe\x8e\x83\x14\xfd\xb7\xb2\x0f\xe4\x02\x02\x42\x28\x53\xdb\x6f\xd3\x4f\x8b\xd9\x2c\x19\xc5\x10\x86\xc2\xaf\x2b\xfb\xc0\xf5\xb9\x31\x4a\x10\xf0\xf6\x8e\xab\x0e\xc6\xaf\x43\x51\xc9\xd8\x25\x35\xe8\xf4\xf7\x23\xad\xc2\x9e\x5a\x81\xff\xb6\xb2\x0f\x76\xac\x1f\x09\xfe\x9d\x67\x0f\xc2\x5b\x14\x74\x80\x90\x35\x09\xef\xd2\x6a\x0c\x7f\x47\x23\xf4\x37\xb6\xab\x33\x64\x77\x97\x5b\x9c\xc2\x24\x9a\x7d\x86\xb8\x61\xed\xc0\x01\x5a\xac\x88\x30\x60\x6f\x48\xb4\x27\xb8\xf1\xe6\x17\x31\xfc\xfd\xea\xe0\xd9\xdf\x82\x71\xf5\x79\x35\xf0\x89\x2f\x09\x58\x5f\x27\x2f\x65\x60\xef\xc9\x70\x71\x73\x0d\x63\x10\xc5\x80\xe4\x07\x7a\xf6\xb7\xbf\xa5\xd3\x38\xba\xc5\x99\xa1\x07\x71\x1c\xc5\xd5\x95\xbe\x17\x86\x51\x0a\xc6\x41\xe8\x03\x22\x8b\xa0\xb2\x02\x56\x41\x0c\x7f\x07\xab\x60\xa5\xd2\x58\xa9\x1d\xf0\xae\x05\x3e\xa6\x56\x26\xb2\xf1\x09\xde\x4b\xd1\xbb\xf2\xe7\x1f\xe0\x7d\x52\x15\xf9\x43\x8f\x75\x50\xab\xea\x8d\x37\xaf\x99\x40\xc6\xa4\xe3\xa0\x63\x66\xc8\xc1\x33\x42\x6a\x83\xce\x1a\xad\x9e\x06\x10\x73\xad\xbd\x79\xa0\xce\xc9\xad\x02\x73\x12\x4f\x3f\x0d\xe1\x97\x95\xd0\xbb\x81\x2b\xfb\xe4\xd5\xce\x06\x9d\x87\xf5\x95\x1b\x2f\x08\x57\xf6\x57\xb2\x09\x58\x5f\x99\xc7\xc1\x67\x2f\x85\x2b\xfb\xc8\x3a\x78\x50\x49\xd8\x7e\x2a\x12\xd0\xf4\xe5\xf8\xe9\xd4\xcd\x43\xbe\x53\x14\xb9\x26\x38\xe4\xe4\x0d\xcc\xbd\x38\x81\x60\xec\x05\x33\xe8\xef\x83\xf5\x69\x74\x03\xd7\xef\x17\xbe\x17\xac\x7b\xf1\x68\x1a\x7c\x86\xeb\xf3\x38\xf2\x17\xa3\x34\x59\x6f\x37\x5b\x5b\xeb\x93\x28\x4d\xef\xd7\x93\x78\xb4\x3e\x09\xd2\xe9\xe2\xba\x31\x8a\x6e\x68\x03\xf2\xe9\xb7\x64\x3d\x8c\x7c\x38\x24\x44\x24\xeb\xb8\x6f\xeb\xb3\xe0\x7a\xdd\xf3\xfd\x28\x4c\xec\xaa\x04\xfc\x18\xc2\xbb\x39\x1c\xa5\xd0\x07\x69\xf4\x09\x86\xa0\xda\xda\x6f\xd6\x2e\xc3\x5f\xa3\x05\xb8\xf1\xee\x71\x62\x1d\xe0\x85\xc0\x9b\xcf\xe3\x68\x1e\x07\x5e\x0a\xc1\x2c\xf2\x7c\x18\x83\x34\x02\x53\x2f\xf4\x67\x10\xaf\x33\x60\x1c\xa0\xdf\xd0\x0a\x7a\x19\x7e\x05\x0d\xca\x5f\x8e\x0d\x7c\x41\xc5\xe8\x67\x4e\x3d\x3b\xf6\xc1\x38\xb8\x83\xfe\x01\x2b\x4f\xa3\xf9\x3e\x68\x1e\xa0\xc9\xa3\x70\x7c\xf7\xc9\x86\x3b\x53\xb3\xd9\xa8\x4b\x7a\x33\x6f\xf0\xf7\x9e\x8a\x94\x4c\x95\x72\x4a\x24\x05\x9a\x43\xc8\x46\xf3\x2f\x74\x6c\xcc\xd5\xd8\x3c\x86\x73\x2f\xc6\x29\x3e\x8f\xa2\xf8\x9c\xda\x95\x55\xa4\x4e\xea\x40\x48\x97\xc9\x4c\x18\xfc\x48\xa7\x5e\x2c\xd8\x18\x54\xb5\x91\x84\x9d\xeb\x97\xf1\x9b\xcb\x70\x7d\x52\x07\x95\xcb\xb8\x22\x1d\xf7\x09\xd5\x0f\x9e\x3d\x70\x53\xc4\x4c\x10\xe8\x58\x28\x15\x1f\x4f\x8a\xe6\xf7\x6f\xb1\x78\xc7\x55\xf8\xb9\x8e\x8f\x9f\xeb\x59\xe6\x32\xea\xb5\x22\x76\x04\x0f\xeb\xb5\x90\x1b\xf4\x58\xb2\xc9\x69\x1e\xb6\xd1\x2c\x98\x5f\x47\x5e\xec\x1f\x7a\xa9\xd7\x48\x60\x8a\xfe\xad\x56\x10\x21\x15\x1d\xbe\x31\x5f\x19\xe9\xb1\xb2\xcf\x86\x9f\x6d\xa0\x11\x4f\xd6\xe7\x33\x2f\x08\x4b\x22\x30\xd9\x82\x19\x6b\x05\x06\x61\xbf\x63\xfe\x97\x28\x0f\x5e\x92\x42\x95\x8b\x8c\x29\xf0\x73\x23\x49\xa3\x39\x12\x37\x6f\xe2\x89\xf7\x48\x24\xd9\xd2\x9d\xf0\xf6\x14\xda\x50\x7a\xe9\x68\xfa\x11\x01\x94\xcc\x72\x54\x4f\xda\x09\x90\x94\x72\x4e\x49\xd4\x46\x8a\xc9\x9f\x60\xa3\xa3\x2a\x53\x4a\x79\x2a\xe7\x8a\xa3\xf3\xf7\x2e\xf5\x62\xe8\x35\xf0\x64\x50\x72\x7d\xe2\x1a\x24\x95\x1b\x66\x41\xa5\x0e\x14\x18\x5c\x5e\xe3\x9b\xc6\xc8\x0b\x47\x70\x86\x36\x18\x92\xad\x5d\x40\xa6\x50\x15\x93\x5c\x69\x47\x10\x84\x29\x46\x11\x9c\x48\x22\xa8\x1c\xaa\x48\x7c\x57\xf9\xf0\x60\x97\x46\xba\x75\x2d\x42\x94\x26\xb8\x13\x83\xe0\x2e\x43\x96\xa0\x05\x04\x31\x44\xb2\x21\xfc\x29\x08\xeb\x4d\xf4\x19\xcb\x4b\x37\x86\xde\x8f\xa1\x0f\x63\x12\xc0\xbe\x88\x93\x88\x09\x2f\x19\x72\xd6\x11\x2e\x02\xe4\xf4\x72\x9e\xf9\x54\x56\xf0\xca\xc6\x1f\x3b\x93\xaa\xb1\xc7\xe3\x2a\xed\x26\x3f\xa9\x54\xaa\xf0\x73\x50\x47\x1d\xfa\xa8\x1d\xe5\x32\x0c\xd3\x5f\xc0\x1a\x68\x35\xe5\x13\x50\xa5\x0d\x79\x54\x2f\x6b\xf2\x6b\x7e\x93\x7f\xb2\xa8\x92\x4a\xab\xd9\x6c\xaa\x75\xc6\xd1\x68\xc1\xe3\xa1\x6c\x57\x37\xd2\xd4\x34\xf3\x4b\x71\x23\x33\x33\xcc\x59\x89\xb3\xcc\x59\x8b\x32\xcd\x59\x87\x30\xc9\x59\x85\x33\x45\xc8\x26\x53\x07\x9b\x92\x7a\x74\x49\x13\xda\x8d\x38\x3e\x0b\x32\x89\xdd\xac\x71\x0e\x05\x59\x8b\x12\x72\xec\xeb\x51\x71\x59\x56\x46\x94\x69\x33\xf7\x3a\xa1\x8a\x0a\xfe\x26\x2f\x0f\x1a\xe5\xa0\xa3\xf7\xc6\x76\x2c\xd0\x67\x0a\xc1\x72\x2e\xb0\xf1\x9f\x57\xf1\xfe\xf3\x2a\xde\x9f\xf6\x2a\x9e\xe4\x1c\xfd\x5b\x92\xfb\x9c\x5d\x5f\x72\x26\x28\xf0\x1a\x58\x5f\xcc\xe4\x69\x7e\x08\x4c\xa8\xc2\x5f\x9d\xad\x03\xf2\x48\xbb\xe1\x55\xfc\xe5\xde\xfa\x12\x1e\x07\xf5\xa5\xe7\x40\x85\x3a\x12\x4a\xbc\xb8\x0a\x7f\x6b\xf6\x8e\xf6\x7e\x95\x79\x38\x84\xde\x49\xee\x9f\x78\x29\x28\xe3\xf2\x29\x3a\xcc\x0d\x6f\xb3\x87\x3e\xc1\x37\x75\x60\xb5\x91\x4f\x16\xa9\xa5\xe9\x57\xaf\x55\x9f\xa2\x03\x46\x52\x1b\x37\x5c\x5a\xcb\xe6\xff\x13\x72\x57\x53\x20\x06\x69\x04\x59\xfc\x82\x54\x87\xc7\x2c\x14\x79\x65\xd6\x05\xc8\x60\x91\x79\xd7\x49\x34\x5b\xa4\xb0\x52\xb8\x35\x31\x04\x2a\xcd\xe2\x2d\xa8\x79\x51\x59\xdb\xdb\xdb\xdb\x83\x37\x45\x1a\xa2\x35\x14\x1f\xb8\xe1\xde\x57\x7e\x2e\x84\x0c\xa6\xdd\x34\x8d\x83\xeb\x45\x0a\xab\x15\x2f\x0e\xbc\xb5\x69\xe0\xfb\x10\xed\xef\x2a\x68\x84\xcd\x2c\x92\x66\xa6\xe1\xe1\x6c\x65\xbc\x64\x10\xc5\xfc\x72\x86\x7e\xc4\x94\x92\xec\x93\x03\xf2\xae\x88\xf5\xe6\xaa\x3d\xef\x92\xd7\xac\xa1\x53\x64\x27\x30\xba\x81\x69\x7c\x9f\xe5\xe6\x91\x19\x3b\x81\x69\x2f\x5a\x84\x7e\x10\x4e\xfa\xd8\x40\x3e\xa5\x66\x8d\x28\xdd\x0c\x08\xb3\x4b\x3b\x1d\xd0\x44\x1a\x94\x97\x33\x53\xb4\xdc\x5d\x4d\x96\xf0\x81\xc0\x7d\xde\xe9\x00\x05\x15\xcf\x57\x25\x5c\x9d\x2b\x58\xcd\xb3\x8c\x59\xd0\x32\x3c\x93\x8c\x70\x33\x5a\x81\x6b\xa8\x4b\xb6\xb7\xa3\xa9\x17\x27\xc1\x3f\xe1\x88\xf8\xc1\x54\x6c\xe3\x46\xc5\xa4\x2f\x7a\xd2\x29\x61\x46\x68\x25\xb5\x46\x1a\xc9\x6b\xa8\x04\xc6\x62\x42\x0a\x82\x62\x31\x22\x9f\x34\xb4\xe8\x3f\x46\xe4\x7f\x8c\xc8\xa5\x8d\xc8\x5c\x0b\x32\x88\x47\x8b\x99\x17\x9f\x04\x49\x5a\xd0\x84\x14\x5a\x58\x6d\x48\xa1\x4e\xf5\xc6\xbb\xd3\x23\x2c\x96\x33\x1b\x3d\x2c\x78\xe4\x31\x55\x2c\x84\x02\x70\xad\xb2\x94\xba\x42\x7f\x2b\x75\x66\xf0\x95\x2d\x69\x4b\x0a\xbd\x94\xac\x31\x4e\xd4\xd2\x06\x19\xee\xa8\xe6\x97\x25\x98\x65\x89\x0c\x2c\x84\xb7\xef\x4c\x6c\x06\x99\xbb\x4e\x57\xe3\x9d\xd4\x48\xd6\xc3\xa6\xa7\x7f\x78\x34\xb7\xd8\x8e\xba\xde\x52\x5f\x34\xeb\x23\x73\x0c\xff\x45\x90\xa5\xed\xc2\x7d\xa4\x41\x50\x13\x98\xf6\xef\x47\xb3\x60\x44\xd2\x92\x04\xb5\xfc\x6c\x3d\xa2\x30\x60\xd8\xa6\x55\xc7\x26\x03\xdf\xd0\x42\xb7\x09\xc5\xec\x71\x12\x51\x4a\x16\xcc\x82\x40\xde\xa5\xa0\x1f\xc1\x6b\x09\xb0\x69\xd0\x24\x21\x90\xa8\xc0\xf2\xc0\x41\x59\x47\x5d\x19\x2b\x32\xf8\x8b\x90\x70\xcc\xd7\x1d\x45\x5d\x01\x4a\xca\xa4\xcd\x90\xff\x99\x63\x3a\x8e\xe2\x01\xbe\x68\x2e\x3e\xa8\xf6\x0d\x0e\x30\xad\x67\x48\x29\x5e\x7b\xa3\x4f\x63\xed\xb9\x1b\x06\x2c\xd0\xd3\x15\x02\x35\x11\xc3\x50\x98\xa4\x7a\xd5\x6c\x9c\xf1\x72\x81\xa6\xfb\x10\xe7\xd3\x60\xa3\x3b\x6c\xd9\xc7\x37\x23\xb0\x4a\xb0\xe0\x17\x23\x87\xad\x5a\x1d\xb5\xcb\x7f\x8e\xef\x89\x37\x9d\xc6\x91\x42\x34\xc9\x6f\x27\x91\x4c\x41\xfa\x9d\x60\xae\x62\xc2\x0d\xe5\x34\x01\x16\x9c\x89\x09\x67\x9d\xac\xd8\x7a\x94\x76\x3e\x4e\xd0\x21\x6d\x8b\xe0\x9e\x2f\x94\x60\x84\xf2\x58\x25\xe5\xa0\x20\x07\xd2\xae\x82\x49\x19\x73\xb7\x35\xae\xf7\xc0\xa0\x92\xd5\x84\x24\x19\x48\x51\x6d\xe7\x82\x35\x81\xce\x4b\xe1\x29\xec\x33\xe8\x63\xcf\xad\x72\xfb\x49\xd2\x69\xb1\x07\x0f\x45\xc6\x25\x9a\x5b\xb7\x91\x45\x45\x50\xc4\xbf\xb6\x86\xf3\x01\x15\x93\xc7\xf9\x2c\x18\xc9\xbb\x58\x9a\x5a\xc4\x87\x33\x98\xc2\xbe\xe9\xf5\xa3\x20\x85\x37\x89\xf2\xde\x2d\x57\x17\x43\xa4\x7a\xda\x07\xe8\xdf\x57\xc0\x8b\x27\xf8\x60\x85\xab\x19\x30\x34\xac\x0a\x18\xde\xc5\x30\x00\x6b\xa0\x8d\x84\x8a\xb7\xba\x18\x8a\x89\xe1\xe4\xcd\xab\x85\x3e\x60\x7c\xff\x96\xac\x4d\x92\x64\xae\x89\x3d\xb4\x2e\x56\x45\x8c\x92\x42\xb6\x0b\x58\x95\x38\x5a\xc0\x92\x61\x74\x76\x24\x42\x2d\xdc\x20\x43\xf2\xe2\x05\xe1\xa5\x25\x0a\xc0\xba\x74\xd3\xa7\x80\xc1\xeb\x8c\x5d\x6b\x6b\xcb\xb1\x03\xac\xca\x24\x3c\x85\x65\x67\xb2\x3b\x45\x24\xcb\x8f\x1e\xcb\x00\x43\x46\x91\xc8\xa1\x9a\x8b\xd0\x12\x2d\xce\x58\x27\xf7\x97\x19\x50\x4e\xbd\x44\x52\xb1\x2f\xc2\xf4\x3c\xa2\x31\xbf\x2e\x90\x35\xe6\xef\xce\x61\xea\xcb\xa7\xa6\xe9\x56\x3b\x22\x06\x5b\x83\x99\x14\xff\x91\x07\x5f\xd2\x8c\x02\xf4\xfc\x97\x6b\x6c\x23\xc3\xfa\xdb\x91\x87\xd3\x02\xae\x88\x2e\x45\xd4\xe9\xce\xdb\x23\x53\x1c\xf5\x88\x66\x37\x75\x19\xbc\x23\x29\x9d\xb1\x66\x6d\x3f\xcb\xe5\xbf\xe2\x85\x2d\x4c\x6a\xd3\x67\x9d\xc3\xb5\x42\x4a\x7c\x1a\x8c\xd9\x41\x6b\x62\xd2\xe5\x23\x92\xf8\x95\x3e\x57\x65\xe4\xc3\xab\xd2\xa7\x87\x64\xee\xbc\x22\xa7\x91\xe4\x8f\xd7\x1d\x27\x37\x55\x07\xc5\x0a\x69\xc5\xd4\x3d\x88\x16\x29\x88\xc6\x20\xf6\xc2\x09\xd4\x4f\xf6\x64\xbc\xab\xfc\x09\x33\x53\xac\xb6\x82\x87\x7a\xd0\x62\x3e\x01\xc8\x18\x15\x84\x60\x16\x24\x29\xb8\x86\xf7\x51\xe8\x03\x6c\x51\x81\xa6\x1d\x31\x7f\xeb\x4c\x43\x28\x29\x28\xc2\xcf\x4c\xa3\x36\xdd\xda\x34\x61\x2f\xbd\xa3\x69\xcf\xbb\x45\x77\xd0\x13\xf1\xa3\xfa\xcc\xbb\x1e\x9f\x08\xef\xe6\x5e\xe8\x23\xe9\xe8\xa1\x3d\x30\x6f\x3a\xa2\x09\xd3\x98\x00\xac\x59\x04\x9a\xf5\x54\x82\xe3\xcc\xff\x9b\xcd\x60\xb1\x8d\xae\x40\x68\x6e\x3e\xa9\x51\x11\x55\xa9\x62\x32\x65\x07\x04\x05\xac\x48\xa9\x9e\xd5\xc4\x33\x73\xb6\x60\xf6\x4c\xd3\x2a\x35\xca\x37\x2e\x9e\x62\xfc\x8b\x68\x46\x65\xe9\x2b\xb4\xf3\xd1\x0d\xef\x55\x40\xeb\xfe\xc3\xb8\x66\x28\xa7\xef\x02\x25\x25\xb2\x7c\x29\xa7\x8f\x32\x14\xcb\xe9\xbb\xd8\x67\xcb\xf1\xfb\x5f\x2d\xf1\xc1\x61\x74\x43\x75\x36\x01\xf6\x31\x8a\xf2\xf2\x7b\x99\x9a\x54\xd1\xe8\x6a\x9b\x38\x7a\xba\x8c\xfe\x51\x97\x20\xc7\xa7\x39\x21\xe1\x42\xcb\xfb\x16\x84\x3f\x26\xa8\xd1\x97\x07\xf1\x00\xd4\x44\x8e\x98\xbe\x65\x84\x19\xe8\xbc\x22\x83\xea\xc5\x7d\x66\x5f\x21\x62\x1a\xc2\x36\x52\xd3\x42\x50\xb9\xc5\x25\xc7\xec\xef\xe1\x6d\xe1\x40\x51\x15\x02\x46\x39\x8f\xe6\x66\x00\x02\x2b\x2e\x60\x76\x85\x97\xdd\x8d\x1a\xf9\xf1\xa1\xf7\xdf\x83\xfe\xf9\xf0\xf8\x70\xd8\x3d\x3f\x3f\x3d\xee\xfd\x78\x3e\xc0\xc6\xa6\xd6\x73\x3a\x69\xa4\x72\xca\xee\x1c\x46\xc7\x70\x06\xbd\x44\x09\x1f\xd3\xaf\xc1\x85\xbb\xf2\x27\xe9\x44\xfe\xb2\x1b\x2d\x66\x3e\x40\x2b\x2f\xa3\xd0\xe3\xfd\xc3\xc5\xf7\x30\x05\x54\x4a\x0c\x57\x79\xe8\x87\x6c\x7d\x9e\x92\xf5\xaa\x68\x8f\x66\xd0\x0b\xf9\xeb\xac\xda\x65\xb4\x28\x18\x8b\x64\xaa\xd4\x28\x36\x3e\x99\x64\x16\x99\x0b\x82\xf7\x8b\xe2\x8f\x90\xcd\x5f\x25\x3c\x16\x87\xce\x18\x89\x18\x46\xf8\x77\x2d\xa1\x2c\x34\xdd\xed\x17\x65\x62\x1d\x04\x7e\x23\x65\x19\xc8\x5b\x4d\xc3\xf3\x37\x4b\x48\xb1\x34\x12\x79\xb2\xcc\xe8\x1f\xcd\xbc\x24\x79\x4f\x9e\xb7\x16\x3d\xa2\xd9\xf7\x20\x0c\x61\xfc\xf6\xfc\xdd\x89\xf0\x5d\x5e\xa4\x4c\x54\xb1\x08\xc3\xa2\x0c\x41\xc0\x7d\x2f\xf5\xd6\xa2\xeb\xdf\xd6\x02\xbf\x62\x69\x29\x0e\x06\x39\x8b\x62\x4b\x9e\x65\x2d\x30\xd3\x66\x5e\x02\x8d\x18\x2d\x4b\xe1\xe3\xc2\x1c\xbf\x51\x30\xc7\x88\x64\x7e\x48\xaa\x5e\x1c\xd7\x01\xe4\x49\x2b\xe9\x38\x79\x71\xcc\x13\xa3\xa2\x8f\x24\x2d\xaa\x18\x1f\x40\x9a\x63\x0b\x9c\xfc\x7a\xf0\xcc\xc6\xac\xef\x61\x08\xe3\x60\xa4\xf3\x07\xff\x82\x7f\xbf\xaa\x1d\x98\xdb\x5e\x2f\x42\x7f\xc6\x2e\xf9\xff\xbf\x00\x00\x00\xff\xff\xd0\x34\x07\xda\xad\xcc\x0b\x00")
+
+func staticJsBundleJsBytes() ([]byte, error) {
+ return bindataRead(
+ _staticJsBundleJs,
+ "static/js/bundle.js",
+ )
+}
+
+func staticJsBundleJs() (*asset, error) {
+ bytes, err := staticJsBundleJsBytes()
+ if err != nil {
+ return nil, err
+ }
+
+ info := bindataFileInfo{name: "static/js/bundle.js", size: 773293, mode: os.FileMode(436), modTime: time.Unix(1503385152, 0)}
+ a := &asset{bytes: bytes, info: info}
+ return a, nil
+}
+
+var _staticJsGottyBundleJs = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xcc\xfd\x79\x77\xe3\x38\xb2\x28\x88\x9f\xdf\x32\x33\xe7\xbc\x3f\x66\xdf\x57\x9a\xdd\x4f\x45\x96\x60\x99\xd4\xe2\x45\x32\xd3\x4f\x69\xd9\x95\x7e\xed\xb4\xf3\xda\xce\xae\x5b\xa3\x54\x67\xd3\x52\xc8\x62\x27\x45\xaa\x41\xc8\x4e\xb7\xa5\x3b\x5f\x7d\x0e\x56\x02\x24\x25\xbb\xea\x76\xdf\x99\xca\x92\x4c\x21\xb0\x04\x02\x81\x40\x44\x20\x40\xec\x4c\x97\xc9\x98\x44\x69\xe2\x80\xfb\x22\x9f\x2d\xe2\x44\xee\x4b\x34\x75\xf0\x30\x1a\xb9\x18\xc8\x12\x27\x16\x7d\x6e\xc0\xf7\x45\x8a\x49\xd6\x7b\x0c\xb1\x95\x06\x34\x29\x78\x89\xba\x11\x8a\xbb\x3b\x3e\x12\xc0\xee\xcb\x7a\xdd\x13\x85\x80\x16\x1a\x87\x71\xec\xa4\xb2\x2c\x4a\x51\xfe\x4c\x5c\x94\x36\xe2\x60\xc7\xcb\xd3\xd6\xb4\x6e\x1c\xbc\xac\x7b\xa4\x31\x0f\x00\x91\xc6\x38\xc0\x88\x34\xa2\x40\x47\x55\xd6\xbf\x46\xa4\x31\xd1\x20\x08\xa3\xc8\x7d\x21\x8d\x94\x3e\xba\xab\xd5\xf5\xfd\x5f\x60\x4c\x1a\x13\x98\x46\x09\x7c\xc2\xe9\x02\x30\x79\x66\xd9\x5e\xc6\x69\x32\x8d\x1e\x96\x38\xbc\x8f\x81\xa1\x9f\x2c\xe7\x20\x7e\x79\xe8\x01\x48\x37\x5a\xbb\xb4\xfe\xc4\x68\x99\xa3\x07\xb5\x1a\x34\xbe\x7e\x85\xec\x63\x3a\x59\xc6\x70\xa2\x72\xe4\xa8\xd1\x46\xc3\x65\x4c\xd6\xdd\x0a\xa0\xa2\x10\x69\x4c\x1c\x8c\xec\xd0\x46\xd8\x45\x98\x36\x97\xea\xdd\x21\xaa\x88\xe8\xc9\x02\xa7\x24\x25\xcf\x0b\x68\xcc\xc2\xec\xfa\x29\x91\x7d\xe2\x54\xa6\x05\x68\x1d\x8b\xc0\xb6\x11\x71\x48\x23\x0b\x9a\x87\xee\xda\x19\xea\x55\x22\xec\xbe\xd8\xcb\x0c\xac\x8c\xe0\x68\x4c\xec\x9e\x1a\xf7\x48\x76\x90\x04\x64\x16\x65\xbd\x68\xea\xec\x38\xf4\xc9\x8a\x92\x8c\x84\xc9\x18\xd2\xa9\x15\xb9\x92\x25\x12\x78\xb2\x22\x27\xc4\x0f\xcb\x39\x24\x24\x1b\x7a\x23\x94\xff\xf0\xf5\x1f\xcd\x91\xdb\x23\x8d\x7b\x9c\x3e\x65\x80\x83\x5b\x3a\xa8\xb4\xb6\x38\x88\xc4\x03\x5a\x36\xce\x1e\x21\x21\x67\xf3\x88\x10\xc0\xbc\x37\xb4\x65\x17\xd9\xc9\x72\x7e\x0f\xd8\x0e\x02\xda\xed\x74\x6a\x41\xad\xe6\x40\xf0\x32\x4e\xe3\xac\x6b\x34\x4e\xab\xef\x1a\x18\xcc\xc2\x64\x12\x03\xee\xea\x98\xac\x5d\x04\x01\xac\x56\x2f\x6b\x24\x68\xfa\x0d\x9e\x33\x27\x92\xe3\x95\xb9\x8d\x69\x8a\xcf\xc2\xf1\xcc\x51\x54\xc3\xee\x4b\xb2\x8c\xe3\x20\x80\x21\x1e\xd1\xe6\x87\x78\x14\x44\x8d\x74\x41\xa1\xd9\x10\x8f\x50\x34\xc4\xa3\x9d\x20\xc8\x6b\xd1\x33\x0e\xf1\xc8\x75\x11\xa1\xcf\x34\x61\xed\xa2\xc3\x20\x08\xa0\x31\x4e\xe3\x14\x67\x8d\x18\x92\x07\x32\x3b\x91\xbf\x73\xc0\x38\x4d\xc6\x21\x71\xa2\xc6\x57\x91\x90\xc5\xd1\x18\x9c\x43\xd7\xed\xfa\xfb\xff\x9a\x1a\xfc\x7d\x5a\x85\xf7\xa6\x2a\x78\x09\x0f\xed\x36\xdd\x8d\x08\x51\x20\x2a\x94\xd8\x6d\xd2\x36\x2a\x3a\x4a\xc9\xf2\x76\x44\x37\x55\xed\x22\xca\x1e\xc5\x7a\x78\xa2\x18\x17\x2a\x3d\xe8\xcf\x45\x88\x21\x21\x01\x34\xee\xd3\xc9\xf3\x6a\x05\x22\x61\xb5\x72\xfa\x27\xfd\xc6\x03\x90\xb3\x18\x18\x77\xbc\x7f\xbe\x0b\x1f\xae\xc2\x39\x38\x36\xcd\x6a\xbb\x43\x6f\xd4\xa5\x03\x9f\x37\x26\x9a\xca\x68\x35\x0f\x90\xce\x81\xe0\x67\xca\x7b\x0c\x4e\x19\x30\x00\xf6\xc7\x80\xfb\x02\x2e\x13\x82\xa1\xaa\x2e\x2f\x38\x42\x74\x4e\x33\x7e\xad\xd5\x78\x37\x12\xc7\x9e\x84\x24\xb4\x73\x88\x40\xe4\xf9\x3e\xcc\x20\xf0\xc4\x8f\x49\x94\x2d\xe4\x8f\xef\x2a\x55\x3e\x8c\x97\x38\x4b\xf1\x2d\x09\x09\x98\x49\x1f\xa2\xc9\x04\x92\x60\xc7\x97\x9d\x4b\x1e\x01\x93\xb3\x34\xe6\xbf\xff\xba\x84\x25\x30\x39\x42\x7f\x65\x63\x9c\xc6\xf1\x5d\xaa\x1a\xe2\x09\xef\x53\x42\xd2\x79\xa0\x3a\xb1\x2b\x2b\x5b\x66\x24\x9d\xff\x01\x9e\xd9\xac\xfe\xc0\x91\x0f\x28\x29\x75\x0c\xde\xc7\x51\xf2\xed\x22\x21\x80\x1f\xc3\x58\x83\x86\x8b\x45\x1c\x8d\x43\x3a\x88\x7f\x80\xe7\x45\x38\x51\x48\x6a\x90\x53\x56\x85\x82\xa4\x38\x7a\x88\x92\x8f\xe9\x04\x54\x52\x94\x64\x80\x89\x91\xf4\x84\xc3\x45\x88\xd3\x65\x32\xe1\xc9\xa2\x33\x49\x8a\xe7\x06\x06\xe3\x59\x88\x33\x20\x5a\xca\x43\x45\x52\x0c\x8f\x10\x2b\xa2\x72\x78\x16\x0c\x69\x0e\x31\xe2\x13\x18\x5f\xa6\xe3\x90\xa4\x58\x0c\x8f\xef\x7d\x4c\x97\x99\x60\xcc\x47\xd2\xf4\xcc\xdf\x2d\xe3\x37\x47\x4b\x4b\x98\xd3\x47\x46\x52\xc1\x38\x19\x24\x93\xf3\x74\xbc\x14\x3f\x97\x64\xaa\xe5\xce\x1e\xb0\xf6\x6b\x89\xbf\x3f\x12\xed\x37\x70\xa6\x97\xc8\x47\xf1\x04\x43\x22\xd8\x11\xa6\x18\xb2\xd9\x2d\x09\x31\x31\x52\xce\x92\x89\xa8\x3a\x7c\x84\xc9\x3f\x6b\xcf\xbf\x68\xcf\xa7\x39\x5f\x43\x38\xa1\x2b\xaa\x22\xf4\x13\x8e\x88\x91\x30\x81\x69\x9f\x10\x1c\xf8\x2d\xff\xb0\x9d\xb3\x27\x4b\xd3\x33\xa8\x99\x1c\xce\xb3\x60\x38\x52\x19\xe9\x44\xfe\x44\x53\xe5\x30\x2c\x30\x4c\xa3\xef\x8a\x6f\x17\x69\x46\xf4\xdf\x51\xb2\x58\xe6\xfc\x08\x4f\xd6\xbc\x71\xa1\x25\x89\x35\x47\x36\x96\x89\x4c\xcf\x8d\x4f\xec\x87\x53\xaa\x03\x69\x05\x30\x24\x13\xc0\x20\x10\x97\xbf\x56\xab\x9c\x63\x32\x88\x81\xad\x28\x1f\xc3\x24\x7c\x90\x39\x8b\xa9\x7a\x09\x3a\x43\xa2\x69\x24\xb3\xaa\x9f\xab\x15\xc5\xeb\x6b\xe3\x52\x26\xe4\xf4\x85\xf7\xcb\xe9\x14\xb0\xa2\x12\x4b\xbb\xa0\x9a\xc2\x03\x86\x2c\x53\x73\xe1\x7b\x3a\x9d\xde\x42\x42\xee\xd2\xd3\x90\x8c\x67\x9f\x17\xda\x2c\x89\x08\xdc\x92\x74\xb1\x80\x7c\xea\x65\x4b\x8c\xd3\x87\x90\xc0\xd7\x59\xf4\x30\x53\x04\x8d\xa3\x04\x32\x46\xa4\x69\xe3\x34\xc2\xe3\x65\x1c\xe2\xcb\x28\x23\x8e\x26\x25\xee\xc3\xf1\x37\xb7\x37\x4d\xb1\xc3\xb5\x27\x25\x2e\x7a\x78\x77\xb7\xe7\xe6\xf5\x34\x16\xcb\x6c\xc6\x4b\xde\xc7\x61\xf2\xed\x32\x4a\xc0\x71\xdd\x5e\x25\x99\x84\x94\x2c\x26\x37\x32\x20\x9c\x02\x4e\x5e\xb1\x18\x21\x12\xde\xab\x89\x43\x96\x0b\xda\xc5\xcc\x11\xb0\x65\x06\xf8\x96\xa1\x1b\x25\x0f\xc1\x8e\xbf\x56\x6a\x51\xca\xb5\x26\xaa\x59\xf6\x31\x0e\x9f\x1b\x51\xc6\xfe\x3a\xe0\xae\x56\x0e\x04\x43\x18\xd1\x25\xaa\xa4\x35\x80\xfb\x02\x8d\x70\x32\x61\x13\x96\xd2\x04\x12\x8a\x14\xad\x69\xb5\xda\xf1\xdd\xb5\x9b\xb7\x91\xe5\x6d\x40\x03\xc3\x3c\x7d\x84\x8d\xc5\x54\x21\xa1\x21\xaa\xdf\xd8\x71\x5f\xa4\x2c\xcf\x08\x5e\x8e\x49\x8a\x03\x58\xe3\x5c\x6b\x0c\x34\x0d\x12\x81\x96\x4e\x07\x10\xe7\x35\x87\xbc\x66\xa1\xec\x4a\xcd\xad\x11\x65\x1f\xc3\x71\xad\x46\x1a\x61\x4c\xfe\x00\xcf\xb5\xda\x0e\x69\x8c\x09\x8e\xe5\xf3\x1c\x48\xf8\x07\x60\x6b\xac\x56\xe4\xf6\xe7\x28\x99\xa4\x4f\x99\x5e\xb0\xb2\x9c\x50\x8a\xed\x6f\xf0\xbc\xa0\xac\x4a\x75\xbe\x06\x45\xef\x04\x77\x71\xad\xe6\xec\x30\x5d\xed\x34\x9d\xc0\x6a\xa5\x1e\xdf\xb5\x0f\x34\x92\xc4\x52\xc3\xe5\x26\x0a\x1c\x1f\xfb\xfb\x2b\x72\x7c\x7c\xb8\xc2\x54\x9d\xa5\x13\x6b\x27\x88\x1b\x5f\xc7\xe1\x78\x06\xc3\x54\x99\x37\x5a\x92\x62\xd4\x0c\x25\x28\x44\x33\x34\x46\xcb\xc0\xdf\xf3\xd0\x24\xd8\xf5\xd1\x22\xf0\x7a\x8b\xe3\xa8\xf1\x68\xe8\x34\xbd\x45\xbd\xce\x4c\xa6\x2c\x50\xa0\xe1\x62\x84\x92\x80\xab\xc5\x01\x57\x47\x03\xaa\x80\x22\xaa\x77\x39\xe3\x20\x6e\x4c\x22\xae\x55\x8b\xb1\x67\xad\xb9\xae\xfb\x32\x09\x16\xbd\x7b\x0c\xe1\xb7\xf5\xf8\x78\x59\xab\x39\xcb\x60\x8c\x26\xc1\xc2\x5d\x97\x91\x0d\x26\x79\xdf\x67\x9a\x65\x24\xf4\x43\x45\x2e\xff\xa0\xf0\xfb\x50\xff\xbd\xde\xfb\x71\xe7\xdf\x59\x3f\x5a\xdf\x09\xe0\xb9\xe5\xcc\x08\x59\x64\xdd\xbd\xbd\x64\x31\xff\x0b\x65\xa6\xf9\xde\x22\x1c\x7f\x0b\x1f\x60\x8f\x65\x70\x69\xd6\xff\x40\x35\xb1\x24\x03\xeb\xe3\xc5\x1d\xfb\xfd\x08\x38\xa3\x58\x34\x1b\x87\x0d\x9f\xa6\x04\x01\xcb\xbd\x77\x79\x71\x7a\x76\x75\x7b\x16\x04\x34\xf1\x34\x5d\x3c\xe3\xe8\x61\x46\x2c\x67\xec\x5a\x4d\xcf\x6f\xef\x36\x3d\x7f\x1f\x59\xb7\xe9\x12\x8f\xe1\x32\x8c\xb0\xf5\x09\x47\x8f\x21\x01\xeb\x34\x9d\x2f\xc2\xe4\x39\xc7\xe7\xe9\xe9\xa9\x91\xb1\x7c\x71\x18\x61\x8a\x98\x5b\x59\x67\x93\xd6\xd9\x42\xd6\xe9\x0c\x47\x19\x49\x17\x33\xc0\xd6\x7f\x84\xe9\x14\x83\x56\xd9\x43\x44\x66\xcb\x7b\xd6\xbb\xf1\xec\x2f\x7f\xd9\x63\x55\xd1\xcf\x27\xc0\xf3\x28\x63\x7d\x89\x32\x6b\x06\x18\xee\x9f\xad\x07\x1c\x26\x04\x26\xc8\x9a\x62\x00\x2b\x9d\x5a\x74\xb9\x7f\x00\x64\x91\xd4\xa2\x38\x2e\x00\x67\x54\x54\xdc\x93\x30\x4a\xa2\xe4\xc1\x0a\xad\x71\xba\x78\xa6\xf5\xa5\x53\x8b\xd9\x50\x59\x3a\x25\x4f\x21\x06\x2b\x4c\x26\x56\x98\x65\xe9\x38\x0a\x09\x4c\xac\x49\x3a\x66\xc6\x09\xd3\x6a\xac\x69\x14\x43\x66\x39\x64\x06\x96\x7d\x2b\x4a\xd8\x2e\x6b\x67\x02\x61\x4c\x2b\x8c\x12\x8b\x82\x25\xd4\x7a\x8a\xc8\x2c\x5d\x12\x0b\x03\xb7\xe8\xa2\x34\x41\x56\x94\x8c\xe3\xe5\x84\x62\x22\xc1\x71\x34\x8f\x44\x23\xb4\x38\xa3\x58\x46\xeb\x23\xa9\x45\xb5\x02\x86\x30\xb2\xe6\xe9\x24\x9a\xd2\xbf\xc0\xfa\xb7\x58\xde\xc7\x51\x36\x43\x16\x65\x56\x1c\xdd\x2f\x09\x20\x2b\xa3\x89\x6c\xf8\x11\xed\xcd\x5e\x8a\xad\x0c\x62\x86\xdc\x38\x5d\x44\x90\xf1\x4e\xe7\x38\xb2\x6c\xb4\xa1\x05\x25\x2e\x11\xe4\xca\x68\xca\xd3\x2c\x9d\x9b\xfd\x89\x18\x56\xd3\x25\x4e\xa2\x6c\x06\xac\xd8\x24\xb5\xb2\x94\xb5\x4b\x2d\x36\x9a\x42\x4b\x4c\xd3\x38\x4e\x9f\x68\x1f\xc7\x69\x32\x89\x98\xd2\xdf\x95\xc3\x78\x37\x03\x2b\xbc\x4f\x1f\x81\xf5\x8b\xf3\x47\x92\x92\x68\xcc\x07\x80\x0d\xc9\x22\x1f\x6a\x01\xca\x66\x61\x1c\x5b\xf7\x20\xe8\x07\x13\x2b\x4a\x68\x6d\x34\x55\x76\x0d\x53\x3c\xe8\xcc\x25\x51\x18\x5b\x8b\x14\xb3\x86\x8b\x5d\x6e\x28\x44\x3e\x9c\x59\xb7\xd7\xe7\x77\x3f\xf7\x6f\xce\xac\x8b\x5b\xeb\xd3\xcd\xf5\x1f\x2f\x06\x67\x03\xcb\xee\xdf\x5a\x17\xb7\x36\xb2\x7e\xbe\xb8\xfb\x70\xfd\xf9\xce\xfa\xb9\x7f\x73\xd3\xbf\xba\xfb\xc5\xba\x3e\xb7\xfa\x57\xbf\x58\x7f\xb8\xb8\x1a\x20\xeb\xec\x9f\x3f\xdd\x9c\xdd\xde\x5a\xd7\x37\xb4\xb6\x8b\x8f\x9f\x2e\x2f\xce\x06\xc8\xba\xb8\x3a\xbd\xfc\x3c\xb8\xb8\xfa\xc9\x7a\xff\xf9\xce\xba\xba\xbe\xb3\x2e\x2f\x3e\x5e\xdc\x9d\x0d\xac\xbb\x6b\xd6\xa6\xa8\xed\xe2\xec\x96\xd6\xf7\xf1\xec\xe6\xf4\x43\xff\xea\xae\xff\xfe\xe2\xf2\xe2\xee\x17\x44\xeb\x3a\xbf\xb8\xbb\xa2\x35\x9f\x5f\xdf\x58\x7d\xeb\x53\xff\xe6\xee\xe2\xf4\xf3\x65\xff\xc6\xfa\xf4\xf9\xe6\xd3\xf5\xed\x99\xd5\xbf\x1a\x58\x57\xd7\x57\x17\x57\xe7\x37\x17\x57\x3f\x9d\x7d\x3c\xbb\xba\x6b\x58\x17\x57\xd6\xd5\xb5\x75\xf6\xc7\xb3\xab\x3b\xeb\xf6\x43\xff\xf2\x92\xb6\x46\xab\xeb\x7f\xbe\xfb\x70\x7d\x43\x11\xb5\x4e\xaf\x3f\xfd\x72\x73\xf1\xd3\x87\x3b\xeb\xc3\xf5\xe5\xe0\xec\xe6\xd6\x7a\x7f\x66\x5d\x5e\xf4\xdf\x5f\x9e\xf1\xd6\xae\x7e\xb1\x4e\x2f\xfb\x17\x1f\x91\x35\xe8\x7f\xec\xff\x74\xc6\x4a\x5d\xdf\x7d\x38\x63\x9d\xa4\x39\x39\x9a\xd6\xcf\x1f\xce\x68\x2a\x6d\xb5\x7f\x65\xf5\x4f\xef\x2e\xae\xaf\x68\x7f\x4e\xaf\xaf\xee\x6e\xfa\xa7\x77\xc8\xba\xbb\xbe\xb9\x53\xa5\x7f\xbe\xb8\x3d\x43\x56\xff\xe6\xe2\x96\x52\xe6\xfc\xe6\xfa\x23\xeb\x29\xa5\xee\xf5\x39\xcd\x75\x71\x45\x8b\x5e\x9d\xf1\x8a\x28\xe5\xcd\x01\xba\xbe\x61\xbf\x3f\xdf\x9e\xa9\x3a\xad\xc1\x59\xff\xf2\xe2\xea\xa7\x5b\xeb\xe2\xaa\x38\xa0\x74\x94\xf7\xfe\x5d\xb5\x9b\x89\x20\x3b\x77\x11\xd9\xe8\xe5\x31\x8c\x97\xd0\xdd\xf1\xd6\x2e\x73\xa0\x8d\x03\xec\xf8\x1d\x17\x2d\xe9\x5f\x17\x4d\x02\xec\x34\x9b\x2e\x5a\xd0\xbf\x2d\x17\x4d\xe9\xdf\x8e\x8b\x1e\xe8\x5f\x17\xcd\x69\xae\x7d\x17\x3d\xd3\xbf\x87\x2e\xba\xa7\x7f\x8f\x5c\xf4\x95\xfe\x3d\x70\xd1\x29\xcd\xe6\xb9\xe8\x89\xfe\x6d\xbb\xe8\x36\xc0\xce\x91\x8b\x1e\x29\xd8\x73\x51\x3f\xb0\x97\x09\xc7\x6f\x62\xef\x48\x57\xca\x13\x5b\x98\x4f\xf8\x9f\x86\x14\x44\xcc\xe4\xed\x25\x4e\x54\xf0\xca\xb8\x28\xd2\xfc\x4f\x80\xc3\x0c\x98\x9e\x5e\xf2\x6f\xed\x76\xfc\x66\x4d\xd7\xde\x57\x1d\xdf\xaf\xe9\xba\xfd\x1a\x45\x0d\x12\x26\x0f\xe9\x29\xb7\xdf\x87\xf6\xef\x9a\xd0\x6a\xb7\xf6\x6d\x64\xff\x6e\x3c\xf6\x3c\xcf\xa3\x4f\x6d\x38\x0a\x3d\x9e\xd6\x0e\x45\x5a\xab\xbd\xdf\x09\xdb\xf4\xe9\xa0\xd3\xf1\x0e\xee\xe9\x93\xb7\x7f\x74\x78\x14\xd2\xa7\x49\x6b\x72\x30\x9e\xd2\xa7\x4e\xa7\x73\xd0\x69\xd1\x27\x98\x36\x8f\x9a\x47\xf4\xe9\x30\x84\x66\x8b\x95\x9d\x8e\xe1\xa8\xcd\xf2\x1d\x34\x8f\xa6\xbc\x44\x38\x39\x98\x86\x87\xbc\x0d\x68\x42\x93\x95\xa5\xff\x8d\xed\x11\x8a\xa4\xab\x41\xeb\xad\x5a\x79\x41\x7a\x1e\x53\xae\xc1\xda\xbf\xb3\xeb\xc4\x01\xb7\x4e\x1c\x4c\xbf\x22\x57\x53\x51\x48\xbe\x4c\x3b\x10\x40\x83\xa4\xb7\x04\x47\xc9\x03\xf3\xca\x08\x7d\xe2\xb8\x79\x62\x7b\x76\x1d\xba\xc0\xfd\xa1\x28\x0d\x0c\x82\x09\x47\x88\x8b\xb2\x60\xe8\xa1\xa3\x0e\xf2\x5b\x1d\xe4\x1f\x74\x50\xd3\xef\xa0\x66\xa7\xc3\x95\x18\x1c\x78\x3d\x7c\xdc\xf4\xf7\x7b\xb8\x5e\x77\xc1\xc9\x86\x78\xaf\xb5\xff\xef\xf7\x57\xde\x08\xd1\xe7\xfc\xf1\xdf\xef\x8f\x5c\xbd\x48\x5b\x96\x08\x0e\xeb\xbe\xf7\x23\x46\x19\xca\x5c\xe9\xb3\x4c\xd7\x0e\x65\x05\xe1\xa9\x09\x22\xd3\x39\x43\x41\x8f\x15\xb4\x12\x4a\x15\x20\x42\x2d\x13\xac\x8a\xa1\x34\xf0\x7a\xe9\x71\xb3\xb3\xdf\x4b\x69\x9b\x01\xb3\xbb\x2e\x12\xe2\xe0\x61\x3a\x6a\x30\x51\xcb\xc9\xe3\x22\x3a\x01\x08\x27\xf1\x10\xde\xbd\xf3\xf7\x6b\xcd\x4e\x07\xc1\xbb\x77\x87\xec\xa1\xd9\xe9\xd4\x60\xa4\xf0\x24\x1c\x4f\xe9\x91\x63\x2e\xc3\x14\x67\xdd\x28\x77\x16\xc1\x1c\xba\xb6\xc8\x60\xa3\xdc\x05\xd2\xa5\x56\x0f\xe0\xf9\x55\x48\x33\x30\x3d\xc6\x46\xd2\x7d\xd3\x1d\x1e\x7a\xa8\xd9\x1e\x21\xcd\x8b\x41\x0b\x48\x4f\xcb\x73\x0c\x5d\xfb\x3e\x4e\xc7\xdf\x6c\xf4\x18\x65\xcb\x30\x7e\x0f\x31\xab\x72\x91\x2e\xae\x13\xf9\x23\xb7\x8d\xba\x3e\xb4\xe8\x4f\x80\xe4\x0f\xf0\x9c\x51\xe0\x04\xee\x97\x0f\xac\x52\xe6\x1f\xe5\x36\x3f\x03\x44\x19\x35\xa0\x6f\xc9\x24\x4a\xe8\xef\x65\x06\xe7\x71\xfa\x74\x9a\x26\x04\x0b\xbc\xc3\x7b\x6a\xd8\xfc\x1c\x4d\xc8\xac\x7b\x48\x67\x9a\xf4\x87\xbd\xd0\x1f\xd3\x74\xbc\xcc\xb8\x17\xa3\xe8\x15\x8e\xa6\x8e\x32\x63\x5c\xe5\xc7\x96\x76\x0d\xcd\xa2\x74\xe3\x28\xf0\x7a\xd1\x31\x48\xf5\x37\xaa\xd7\x5d\xc2\xbd\xb6\x18\xc1\x30\x1a\xa1\x08\x81\xbb\x36\x6c\xa1\x68\xea\x68\x0e\x57\xd7\xf4\x6b\x33\x1f\x2c\x70\xc1\x48\x10\x35\x5e\x59\x53\x84\x2a\x3b\xe0\xbe\xd9\xf9\x5d\xab\x61\x61\x43\x2a\x2e\xc0\x6b\xdd\xb7\x8b\x0c\x8c\x86\x30\xd2\x5d\xb6\x30\xca\x89\x55\x02\xad\x4d\xf1\xc7\xc9\x58\x76\xed\x73\x3b\x13\xbe\x93\x10\x43\xc8\x73\x39\xee\xda\x28\xfa\x00\xe4\x9a\x35\x52\xf0\xf4\x33\x77\x3b\xd5\x3c\x2c\x0d\x61\x97\xcc\x70\xfa\xc4\x7c\xed\x67\x18\xa7\xd8\xf9\xe1\x2a\xb5\x38\x8e\x4c\xb3\xb3\xbe\xc1\xb3\x65\xff\x50\x87\xfa\x0f\xf6\x0f\xaa\xd3\x8f\x69\x34\xb1\xbc\x9d\x20\xd0\xfd\xa1\x43\x18\x9d\x14\x7e\x77\xe9\x6f\xda\x39\x03\xc1\xec\x1f\x88\x60\xf6\x14\x91\x31\xb3\x54\xc6\x61\x06\x76\x3e\x09\xec\x6e\x34\x75\xc8\xb1\xf2\x0d\x48\xeb\xd3\xbe\x05\x42\xa8\x8e\x47\x95\xab\x3c\xbb\xc5\x56\x53\x2b\x86\x2c\xb3\xc8\x2c\xe4\x3a\x2d\xdf\x2a\xa0\x9a\x18\xad\xc1\xb2\x15\x0f\xd4\x03\xdb\xb1\xeb\xaa\xee\xba\xed\x52\xdd\x3e\x49\x09\x55\xec\xd2\x27\x98\x34\xd8\xec\xcf\xd2\x18\x1a\x4f\x21\x4e\x1c\xec\xa2\x1d\x7f\x4d\x31\x32\x09\x46\x49\xca\x08\xa1\x39\x2d\xf8\x1c\x78\x47\xa4\xd1\x59\x02\xed\x12\x94\x05\xb9\xaf\x76\x37\x3d\xf6\x7a\x5a\x26\x82\xa3\x39\xf3\xb5\x39\xa9\xe1\xdf\xfd\x18\x92\x59\x63\x1e\x7e\x77\xf2\xb4\xdd\x14\x79\xae\xee\xf6\x2d\xe4\xe1\xd5\xd3\x3c\x99\x70\x8f\x08\xcf\x9d\xe3\x21\xcd\x49\xeb\xae\xb5\xe6\xe7\xe1\xf7\x4b\x86\x66\x20\x9c\x7d\x8f\x11\x3c\x51\xad\xb6\x91\x3d\x27\x63\xee\x12\xe9\x63\x08\x1d\x77\xbd\x16\xa3\x27\xb8\x46\x16\xd0\xa6\x0c\x41\x72\x64\x35\xe1\x68\x77\xa5\xcf\xe5\x34\x4f\xa4\x22\x9d\xb8\xdc\xce\xed\x69\x25\x98\xfc\x14\x25\x84\x8f\xb2\x31\x8e\xc3\x2c\xbb\x8c\x32\xd2\x20\xe9\xc3\x43\x0c\x0e\x17\xc9\xbb\xbc\xc4\x6e\x46\x8b\xec\x52\xfd\x06\xd3\x2e\xd9\xc8\xce\x9f\x03\x3a\x60\xe8\xd7\xd7\x76\x1f\x62\x1b\xd9\xf4\x9b\xd5\xa0\xe3\xa9\x0b\xd8\xbc\x6b\xca\x9d\xb4\x36\x27\x13\xb5\xca\x42\x5c\xe8\xb9\x2e\x38\x36\xd1\x46\xa3\xac\xee\x2f\x77\x4b\x73\x75\x53\xd5\x90\x33\xea\x1b\xbb\x7e\xcf\x46\x0b\x81\xdc\xef\x88\x21\xc4\x66\xed\xd2\x5b\xef\xb8\xc8\xdc\x2b\xdc\xe8\xd6\xcf\x80\xa8\x42\x7a\xaf\x7f\x15\x4e\xbb\x69\x62\xbb\x6b\xb4\xef\x79\x45\xf2\x6e\xc1\xb1\x44\xe4\x72\x8b\xdc\xd3\xb6\xb1\xc5\x8d\x9b\x15\xb5\x9a\xc3\x1a\x56\x3d\xdb\x94\x71\x73\x15\x6c\x09\x66\x83\x79\x1f\x09\x27\xbe\x31\x74\xa9\x03\x6a\x1d\x41\x36\x5b\x48\xec\x7c\xf5\x22\xee\x0b\xe4\xde\xff\x5a\x8d\xff\x70\x1e\x1a\xa7\x5e\xe3\xec\xf6\xb4\x6e\x0f\x2f\x6c\x17\x41\x45\x97\xc3\xc9\xc4\x11\xd5\xd1\x0c\xd9\x2c\x7d\xe2\xe4\xa3\x43\x5a\xcd\xad\x6c\xdb\xe5\xd9\x01\x57\xa9\x0f\x40\xab\x9e\x47\x44\xd6\x84\x5e\x28\x01\xa3\x24\x8c\xbb\xb0\x76\xd7\x05\x1e\xbd\x8f\x97\x15\x56\x42\x61\xa9\xa4\x99\x1c\x45\x8f\xf7\x46\x91\x12\x39\x68\xe6\x22\x35\xa4\xa4\x83\xc6\x33\x82\xc6\x33\xeb\xdc\x36\x02\x5d\x6f\x20\x90\xe4\x89\x9c\x46\x5b\x78\xac\x4c\x1a\xa6\x59\x49\xea\x70\x3c\xb7\x12\x27\x4a\x22\xf2\x53\x9c\xde\x9b\xfc\xca\x54\x65\x36\xb3\x90\xdc\x8c\x67\x74\xa1\xfa\xa1\xd8\xa4\xd0\x18\xc7\x48\xa1\xa4\x13\x09\xa9\x31\xfb\x91\x3d\x4e\x17\xcf\x1a\xd9\x30\x25\x9b\xb6\xa7\xb4\x5a\x2d\x1a\x34\x8b\xdc\x0c\xc1\x88\x30\x22\x9a\x0e\x76\x57\xd8\xaf\xb8\x2a\x22\x63\xd1\x58\x84\x19\x01\x59\x03\x0b\x48\xe8\x09\x34\xf2\xe1\x63\x79\x58\xc8\x43\x11\xc3\x1c\x42\x34\x17\xf2\x79\x84\x61\x9a\x7e\x3f\x29\xe6\x66\xb8\x4f\xd2\xa7\xc4\xe4\x85\x66\x10\x90\xc6\xfd\x92\x90\x34\xa9\xd5\x16\x0d\xe6\xfb\x39\x8d\xa3\xf1\x37\xb5\xcb\x83\x34\x66\xaa\xec\x61\xb7\x4c\xba\x84\x96\x98\x43\xb2\x34\x1b\xfb\x6d\xf5\x1b\xdd\xbb\x8c\x92\xe5\xf7\x5a\xad\xd8\x64\xb8\xfc\x3e\xa6\xb5\x9a\xed\xf9\x81\xd9\x3b\xca\xac\x77\xf0\x9d\xd0\x25\xfa\x33\x5d\xf6\xd8\x1e\x9f\x98\xd2\xaf\x23\x22\x27\x1c\x65\xac\xd2\x84\x53\xa8\x7c\x83\xe7\x32\x99\xfb\x8d\x70\x4c\xa2\x47\x10\xdb\xe7\x5c\xd9\xa4\x33\xed\x1b\x3c\x0f\xd2\x27\x9a\x67\x8d\x76\x3c\x3a\xc8\x66\x55\xdc\xb9\xff\xe6\xba\x3e\xd1\xec\x1b\x2b\x5b\x2e\xcc\x9a\xa8\xee\xbf\x5a\x09\x05\xdd\x01\xad\x54\xce\x7f\x95\xdd\xa9\xc6\xdb\x28\x54\x81\xb8\x81\xa1\xd0\x9f\xa8\x66\x1a\xd8\x76\x55\x25\xe3\x74\xbe\x48\x33\xee\xaa\xa4\x82\xd6\x66\xb1\x0d\x2a\xed\x03\xc4\x0b\xc0\x8d\x62\x2e\x36\x42\x4e\x45\x4e\x77\x4b\xfd\xcb\xc5\x24\xa4\x73\xe9\x95\x06\x78\xb6\xdf\xd4\x02\x24\x93\x57\xab\x87\x64\xb2\xad\x6e\x60\x51\x0e\x42\x74\x57\x57\xc6\x11\x3c\xcd\xd3\x65\xb8\xc6\xaf\xa8\xd7\x1c\x31\x16\xda\x20\x76\x4e\x79\x30\x81\x43\x1a\x19\xdf\xed\x6e\x40\x32\xa9\x90\xd1\x19\x60\x72\x93\x3e\x55\x88\x3c\x3b\x65\xc6\x69\xee\x54\xe3\xf1\x49\xfd\xc6\x18\x43\x48\x24\x43\x3b\xf6\x24\x7a\xb4\x65\xd4\x0a\xe6\x06\x7b\x18\x25\x80\xe9\x0a\x02\xc9\xe4\x74\x16\xc5\x13\x47\x69\x5e\x62\x3f\x9e\x1b\xb3\xe0\x22\x30\x11\x4a\x17\x50\x34\xce\xf2\xad\x55\x14\xf1\x3f\x19\xb5\xd1\x85\x02\x28\x63\x60\x56\x2b\xed\x27\xda\xd1\x7e\x94\xec\x38\xfb\x4e\xac\x5a\x16\x86\xbf\x2e\x23\x0c\x99\x15\x5a\x3c\xaf\x25\x57\x4d\x9b\x7b\x04\xe4\xa6\x23\xe5\x92\x40\xab\xb3\x91\x3e\x25\x80\x07\xc2\xaf\x28\x6d\xc6\x3f\x46\xf0\x24\x76\xff\x05\x64\x73\x19\x9e\xef\x3e\x9d\x3c\x07\x46\x89\xd7\xc2\x76\x0c\x8d\xbf\x50\xb4\x6a\x60\x36\x59\x08\x4c\x5b\x92\xcb\xf7\x2b\xd9\xb8\x9b\xe8\x0d\x79\x76\x99\xe3\x69\x57\x18\xa4\xec\x87\x8b\x7e\xad\x19\x60\x36\x93\x01\xe9\x13\xb1\x3f\xe3\x50\x0b\x25\x4a\x26\xf0\xdd\x56\xd6\xa2\xb4\xe9\xa4\x7c\xad\x66\xcf\xca\xbc\xd5\x5d\x90\x99\x8a\xfd\xd5\xb9\xb9\xaa\xb6\x42\x1b\xb9\x79\xf9\x26\x94\xf2\xec\xd5\x58\x71\xff\xc0\x2e\x95\x54\x9b\x7a\xb3\x11\xc1\xbc\x6e\xb7\x10\xad\xa1\xe6\xea\x56\x1c\xcb\xd9\x37\xe0\x28\xf3\xbd\x4a\xba\x72\x8d\x15\xf2\x63\x2b\x4e\x86\xa0\xa9\xc4\x86\x2a\x21\xaf\x22\xa2\x57\x53\x90\x50\x2a\xcc\x44\x85\xa6\x34\x42\x42\xc2\xf1\xec\x2e\x1d\xa4\x73\xa7\x6f\xe6\x16\x85\x67\x4c\x4c\xbf\xad\x0b\x85\xbc\xd5\xbd\xe0\x99\x5e\xef\x48\xa1\x32\x19\x16\x22\x16\xb7\x32\x1e\x12\x62\x17\x72\x6e\xc3\x62\x77\x63\x21\x73\x92\x86\x4b\x92\x8e\x53\x8c\xe9\xe2\x81\xec\x74\x3a\x7d\x4b\xfe\x70\x11\x91\x30\x8e\xfe\x06\x6f\x2a\x92\x2d\x20\x8e\xc7\x33\xa0\x3a\xa4\x3d\x0d\xe3\x0c\x4a\x05\x48\x78\x7f\x41\x45\x85\x8c\x9f\x52\x80\x52\xe0\x4a\xc9\x06\x75\x5f\xa2\x4d\x46\x60\xb4\x66\x3a\xee\x2b\x15\x16\xac\xb8\xbc\xbe\xa2\xd9\xa4\x55\x57\x64\x87\xd2\x10\xcb\xf6\x54\xcc\xa6\x52\x0e\xe8\xba\xb3\x95\xd5\x0a\x79\x8b\x83\xac\x81\x99\xf8\xab\x28\xc6\xf5\x0f\x16\x4d\x33\x6e\x9c\x16\xd3\x0b\x66\x50\x55\x9b\x7a\x3c\xd9\xab\x5d\x2d\x94\x75\xf3\x40\xc4\xdb\xe8\x6f\xc0\x1c\x69\x1b\xe5\x3d\xf3\x72\x6d\x9a\x63\xe5\x96\x2a\xea\x74\x7b\x59\xee\xad\xed\x65\xf5\x3a\x0f\xe4\x52\xba\x92\xe3\x16\xb4\x8f\x72\xb5\x60\xac\x09\xb4\x91\x8f\x10\x66\x4b\xcc\xe3\x91\x9e\x1a\xa7\x79\x8a\x94\x24\xd5\x33\x58\x2b\xca\x14\x3f\x16\x8c\x19\xfd\x0d\xc6\xb3\x30\x79\x80\x49\x81\xc9\x84\x46\xa9\xf7\x29\x73\x14\x87\xe9\x75\xcd\x45\xe3\x85\xb5\x84\xa1\x37\x69\xfc\x51\xfc\x74\xb8\x9d\x5e\xb1\xda\x6c\x5a\xbd\x4a\x2d\x15\x43\x08\x69\x03\xf7\x8d\x1b\xf1\x53\x0f\x4b\x2c\xc5\x10\xd2\xac\xa7\x8d\xdb\x42\xb2\x86\x13\x73\xf3\x96\xd7\x83\x4d\x38\x94\x02\xea\xaa\x35\x69\xaa\x00\x2b\x7c\x55\xc8\xa8\x2c\xeb\x80\x50\xa8\x41\x28\xd4\x5b\xea\x4e\xe0\x29\x5f\x13\x0b\x0d\x28\xe9\xc1\x8d\x2a\x40\xb8\xb4\xb9\xa2\x27\xf1\x7a\xf2\xb1\xa4\xd5\x73\x9d\xc0\x60\x01\xb9\x2d\x50\xc6\x47\x3a\x91\x54\x0d\x25\xf5\xa1\x24\xc5\xfe\x75\xf5\x57\xfb\xe7\x65\xb0\xaa\x74\x0d\x39\x2e\xe2\x5b\x3a\xcc\x19\xcd\x74\xfd\x24\xb0\x7f\x49\x97\xd6\x24\x9a\xb0\x7d\x8c\x45\xc8\x36\x42\xc0\xfa\x33\x23\xcb\x9f\x2d\x79\xe6\xc1\x8a\x12\xeb\xcf\x52\x95\x2f\x98\x10\x8e\xfb\xe7\xc6\x97\xc4\xee\x25\xf5\xc0\xbe\xab\x2a\x9b\xa4\x4f\x96\xdc\xe9\xb1\x48\x6a\xfd\x99\xe0\x25\xfc\xd9\xba\x5f\x12\x8b\x0d\xaf\x8c\x2f\xe2\x91\x63\x8d\xbf\x64\x56\xab\xe1\x59\x36\xa2\x15\x46\xc4\x7a\x8a\xe2\x58\x96\x67\xc5\xd9\x1a\xf4\xe7\xe2\x66\x0b\x55\x0b\x82\x1d\x6f\x4d\xc4\x9e\x85\x1c\xd8\x92\x0f\xa6\xe0\x0d\x91\x6e\x32\x16\xc4\x9f\xb3\x1e\xad\x0d\x1a\x51\x76\x9a\xc6\x71\xb8\xc8\x60\xd2\xa3\x86\x41\x1a\x43\x98\xe4\xa7\x48\xc8\xc9\x0e\xe9\xda\x37\x54\x3c\xd8\x41\x00\x2c\xcc\xd0\x5d\xad\x22\xb5\x65\x27\xc6\x80\x2a\xd2\xcc\xa3\x22\x65\x00\x5f\xa1\x28\xf5\x6c\x66\x25\xc6\x69\x38\xe9\x4f\x26\xa5\xcd\x32\xc9\x03\x4e\xf3\xc8\x75\xec\xc6\x9e\x5d\x87\xba\x4d\xbf\x0b\xb6\x65\x95\x30\x2a\x79\xae\xab\xe4\x2f\xe3\x7a\x3a\x9b\xa9\x7c\xb7\x1b\x5c\x05\x79\x8a\x26\xb0\x4b\x73\xbf\x3c\xb1\xfd\x5f\xbb\xde\xfc\xb1\x24\xd5\x18\xa8\x6e\x2f\xbe\xf7\xd6\xa2\x18\x8f\x34\x37\x0b\xbe\xa1\x18\xdb\x65\x7b\x67\x4d\xa2\xc7\x97\x19\x44\x0f\x33\x52\x55\x8c\x43\x78\x39\xbb\xe0\x18\x96\xc4\xdd\x14\x55\x21\xb6\x18\x10\x0b\xde\x24\x01\x15\x0a\x08\x07\x8f\x74\xbc\x6f\xc2\xa7\xf7\xcf\x04\x4e\xd3\x14\x4f\x32\x07\x50\x6c\x0a\xb7\x58\xc7\x81\xfe\x4a\xe3\x8c\xe7\xc9\x5c\x57\x6c\x63\x45\x6c\x4f\x1b\x41\x23\x7d\x04\x8c\xa3\x09\xdc\x3d\x2f\x60\xb5\x12\xcc\xc0\xb7\xb1\x72\x17\x63\x77\x16\x10\x7d\x1b\x88\x41\x96\x0b\x9a\xde\x6a\xae\x0b\xf1\x1d\x72\x1f\x7b\xd6\x73\xc8\xbf\x1e\xdf\x5a\x2d\x72\x70\x3d\x68\x35\x11\xd1\x02\x49\xb0\xda\x95\x8d\x55\xe4\x3f\xfb\xd9\xf4\xda\x07\x4c\x50\xa8\x3d\x7c\xe6\x46\xf0\xdc\x1e\x39\xf6\x9b\x07\x27\x20\xf7\xc8\xbb\x0e\x79\x47\x33\xd7\x6a\x0e\x09\xe8\x03\x25\x06\x83\xf9\x47\xcd\x15\x79\xf7\x6e\x3f\x4f\x68\x1e\xae\xf6\x5b\x35\xe2\xba\x6b\x88\x33\x60\xcd\x74\x3a\x1b\x5a\x79\xe7\x37\x79\x9d\x7e\x33\xaf\x92\xb8\x1a\x91\x22\x0d\xf7\xfc\xd8\x83\xfb\x02\xb5\xa0\x85\x48\xe3\xfb\x2e\xeb\x6c\xe3\x99\xfe\xed\xf1\x80\x03\xcd\x75\xdf\x6c\xdb\x94\x21\xd8\x01\x26\x37\xaa\x07\xb6\x6f\xf7\x28\x56\x56\x34\x75\x7c\x95\xd8\xca\x13\x9b\x2a\xb1\xc3\x13\x69\xcb\x2d\x96\xc8\xb1\xef\x51\x98\x67\xcb\x08\x5b\xfa\xeb\x5f\x86\x76\x9d\x34\xbe\xd7\x6d\x44\xff\x3e\xd7\xed\xd1\x17\x6c\x73\x31\x1c\xf3\xcd\x84\x48\x8b\xc8\xcd\x4f\x7a\x9c\x38\x55\x9d\x60\x51\xbf\x70\x02\x41\xb3\xeb\x8b\xa7\x76\xb7\x29\x9e\xf6\xbb\x0c\x17\xe6\x38\x6a\xb9\x46\x1b\x5a\xaf\x99\x04\xe9\xd9\x75\x8e\xf8\x49\xbb\xeb\xb9\xec\x37\x43\xae\x27\x90\xa5\x70\xd2\x58\x84\x0f\xb0\x5a\x51\x78\xed\xc9\x76\xdd\x6e\xac\x1d\xff\x38\x71\x8a\xa8\xd1\x82\x75\xfa\xab\x5e\x7f\xad\x6d\xd9\x06\x6b\xf3\x23\xaf\x5a\x9e\x33\x29\x57\xbc\xa1\xb2\x63\xbb\xee\xd0\x4e\x38\xad\x1a\xb8\x27\xbb\xed\x1a\x74\xc1\xdd\x6d\x35\xdd\x52\x13\x79\x2e\x7b\x6e\x77\x59\x83\x6e\xd7\xc1\x4e\x44\xcd\x4e\x2a\x0b\x9c\x88\x62\x2f\x1f\x9e\x37\xd2\xee\xa3\x5d\xe7\x51\x56\x8d\x29\x4e\xe7\x54\xda\x9e\xa6\x13\x10\xbb\x37\x1c\x82\x22\xd7\x35\x83\xeb\xd5\x34\x46\x11\x4a\x51\xa6\x62\x17\xde\x28\x2f\xf8\x59\xa1\x9d\x00\x84\xb7\xfe\xa4\x2e\x9f\xba\x12\xf0\x34\x8b\xc6\xb3\x13\xf1\x77\xd7\x67\xe9\x28\x36\x82\xe7\x2f\xce\xf8\x4c\xa2\x53\xed\xc4\xeb\xb6\xd9\x5f\xbf\x6b\x6e\x49\x2b\x59\x44\x82\x96\x9e\x3e\xb8\xfe\xc8\x86\x86\x6b\x9e\x14\x0c\x8d\x09\x90\x30\x8a\x8f\xbd\x93\xfd\x76\x77\xbf\xa3\xe7\x7e\x9a\x01\x88\x4c\xec\x71\x00\x31\x09\x7f\x79\x27\x72\x4a\x5e\xc7\x01\x34\xb2\x59\x34\x25\x7f\x80\x67\xca\x84\x28\x0a\x40\x46\xf0\x9f\x1c\x76\x3d\x94\x06\x20\xa3\xfb\x4f\xfc\xfd\xae\x87\xb2\x00\xaf\xa2\x55\x8a\x62\xed\xc4\xd3\x49\x56\x0b\xd2\x6e\xac\x9f\x71\x5a\xad\x9c\x2c\xf0\xe8\xea\xdd\x6a\xd6\x9d\xec\xf8\xb8\xe9\xd6\x09\x8b\x7f\x0b\x03\x43\x11\x88\xb9\x7f\x93\xca\xdd\x5e\xea\x84\xd5\xfb\x40\x58\x48\x17\x6d\x7f\x4b\x49\x2a\x07\xbb\x28\x56\x6a\x86\x81\x96\x83\x8d\xd1\x0d\x14\x69\x91\x28\xc5\x03\xb2\x1c\x4c\x19\xd1\x40\xbf\x56\x4b\x9d\x58\x79\x19\x05\x52\xf3\xf4\x11\x6c\x44\x68\x41\x79\xf6\x6b\xb5\xaa\xc8\xa7\xef\x62\x58\xd8\x89\xf2\xa3\xc2\x4e\x44\x0b\x1b\xed\x64\x5b\xda\xa9\x80\xd1\xba\x75\xd4\x23\xaa\xdc\xe8\x1d\x59\x53\x55\x2b\x44\x62\xfc\x0d\x67\x79\x91\x84\xb5\xda\x8e\xa3\x77\x45\x97\xde\xf4\x57\x2e\x06\xdd\x9c\xda\x44\x6b\x8e\x6c\x6c\x8d\xaf\x5d\x3b\x95\x23\x16\xe7\x41\x29\x69\xf2\x33\x2d\x48\x35\x01\x55\x29\xa8\x4a\x49\xba\x1c\xcf\xc4\xce\xca\xaf\xaf\xf9\x8e\x96\xe6\xa1\x38\x5b\xaa\xe7\xb4\xfe\x8d\xb5\x7f\x4c\x1f\xa1\x54\xb9\xa9\x15\x4d\x20\x23\x38\x7d\x2e\x29\x81\xf9\x69\x3a\xbf\x78\x9a\x4e\x24\x7c\x05\xd6\x7a\xf0\xb2\x16\xc6\xb2\x38\xe8\xa6\xd5\xb4\xd6\x8e\x78\x55\xa4\x8b\x29\x26\x14\x71\xe9\x47\xe3\xf6\xfb\x55\x3a\x81\x8d\x00\xb1\x6d\x5e\x61\xdc\x17\xc3\x61\x98\xbd\x53\x50\x96\x0d\xe3\x57\x45\x2e\x09\xdb\x92\x6d\xd7\xdc\xc8\xdd\x7d\x54\xac\xb1\xbc\x9b\x53\x0e\x5b\x33\x3d\x94\x6e\x7e\x14\x0d\x7a\xf8\x38\x20\x2c\xda\xb5\xe0\xc5\xe4\x4f\xcf\x37\xe9\x93\x83\x8b\x31\x37\x2a\x66\xa2\xac\xa8\xe7\xa7\x6d\x57\x2b\xa7\x98\x14\xf8\xa6\xd1\xc7\x7e\x3c\x8b\x78\x2e\xb7\xd8\x0a\x93\xd9\xa5\x97\x0f\x10\x3d\x74\x8c\xc7\x97\x05\x81\x1e\x73\xa6\xe2\xb9\xe8\xba\x31\xab\x88\x32\xf3\xf5\x28\xb3\xdd\x5d\xa4\xe2\x04\x59\xf8\x98\xa0\x3e\x0f\x25\xdb\xd5\xb3\x52\x1d\x61\x56\x3c\x29\x27\x7b\xc9\xc3\xd1\xf2\xcc\xae\x88\x5b\x10\x45\x35\xe3\x16\x39\x64\x57\x3f\x31\xbc\xcb\x3d\x03\xda\x79\x62\xd7\xec\x90\x38\x9a\xae\xa5\x54\x1d\x13\xe4\xf6\x31\x02\xd7\xed\x6a\x39\xb3\x05\x0b\x4a\x26\x48\xd8\xd7\x55\xf9\x73\x02\xa8\x53\xce\xb5\x9a\x93\x53\x85\x76\x40\xd2\x52\xd2\xec\x57\x10\xc2\x45\x15\xf8\x14\x28\xa3\x1a\x46\xbe\xcc\xcf\xed\x42\x66\xa0\x3a\x66\x9e\xed\x19\x04\x09\x75\x63\x55\x7a\x28\x72\xfc\x2a\x59\x6d\x40\x11\x2f\x4d\x1d\x38\xf6\xd8\x5f\x2f\xd0\xb9\x44\xaa\xcd\x65\x3a\x50\x43\x9e\xa9\xdd\xa2\x6b\x2c\xfb\xbb\x0a\x52\x16\x0f\x5c\x8a\x63\x9e\x2c\x7f\x5d\x9e\xdd\xe7\xa5\xf3\xc2\x27\x95\x34\xee\xe6\xa9\xc7\x9e\x1a\x2a\x7e\x2e\xde\x45\x44\x6c\x7a\x6e\x24\xc6\x36\x4f\x4c\x15\xa1\x3e\x85\x0f\x60\x06\x4b\x68\xf4\xa7\x54\x74\xe0\x47\x47\xaf\xa4\xb2\x96\xbb\xf4\x2e\x5d\x94\x03\x01\xf3\x4a\x76\x5f\x19\xaf\xbb\x54\x1c\xbf\xdf\x52\x87\xc6\xb4\x1b\x6b\x2b\xac\x05\x5a\xd8\xa0\x76\x9c\x58\xed\x44\x73\xbf\x9a\xd8\x90\x34\xa3\xcf\x6b\x35\xbe\xa1\x5c\x3a\x59\x2c\x64\x8a\x5e\x9d\x08\x9a\x0d\x3a\x72\xb8\x72\x8d\x7d\x70\xda\x72\x37\x1e\x51\xf6\x5c\xb1\x6b\x5d\x38\xd6\xbc\xb9\x09\x4f\x50\xa5\x74\x0e\xda\xeb\x69\xf1\x8b\x19\x90\xbb\x68\x0e\xe9\x92\x98\x51\x8a\x51\x92\x00\xfe\x99\x16\x75\xe8\x42\x5d\x8c\x0b\x90\xc0\xca\xa3\x0e\x41\x09\x25\x31\xfd\x3d\xd4\xf2\x3c\xb7\x07\x0a\xc5\x9e\x8c\xa5\x14\xaa\xb5\xe3\xf6\x88\x8c\xad\xdf\x44\x52\xfe\xfa\x0e\xf9\x4e\x0d\x35\x3d\xcb\x14\xa8\xa2\xb0\xbf\x99\xc2\xbe\x39\x1f\xd8\x9a\x11\xe8\x2b\x55\xfe\x32\x00\x91\xdc\xd3\x8e\x75\xf3\x53\xf3\xfc\x8f\x43\xc4\x9c\x16\x89\x19\x10\xb6\x0c\x3a\x78\x93\x08\x7b\x76\x2b\x16\xc8\x6d\xaf\x23\x70\xd7\x55\xbc\x9a\x8f\x3c\x77\x1d\x6c\x19\xe1\xc8\x1c\x61\xe4\x71\xff\x86\x55\xcd\x32\x7e\xc5\xcc\x89\x93\xb2\x28\x60\x00\x07\xea\xf6\x17\xfc\x45\xf8\x09\xf3\x52\x7c\x7f\xf4\x54\xbe\x22\x83\xda\x2d\x1f\x8a\x8a\x1a\x35\x27\x75\x17\xa9\xbd\xb9\x90\xc3\x62\xd9\x07\x67\x9f\x6e\xce\x4e\xfb\x77\x67\x03\x76\xbc\x91\x79\x5e\xef\xc1\xe2\x5a\xd9\xc4\xca\xd2\x34\x69\x58\x9f\x62\x08\x33\xb0\x96\x19\x58\x85\xfa\xf4\xf7\x74\xd0\x0a\x93\x8c\x40\x38\x69\xc8\x0d\xa2\x6d\xb9\x8b\x0e\xcd\x2d\x79\xcb\x84\xaa\x7e\x51\x08\x94\x62\x9c\x3f\x3c\x2f\x00\x13\xf8\x4e\xa8\xa2\x57\x55\x1b\x55\xc1\x0b\x5a\x5e\x29\xa0\xe5\x34\x4c\x58\xc8\x3f\x43\xd0\x0a\xad\x99\xac\xd4\xa2\x85\x2c\xa1\x2d\x5b\xf7\x30\x4d\x31\x58\xca\x67\x9e\x2e\x80\x1d\x05\x1e\x87\x71\x0c\x13\xdb\xed\x15\x34\xc5\x0d\xe8\x39\xf0\x6b\x16\x16\xad\x8e\x3f\x86\x71\x34\xe1\xef\x38\x09\xf9\x61\x87\xbf\x63\x4f\x1f\x55\xe5\xac\x3f\xec\x28\xc5\xbf\xa6\xc3\x65\x64\x7f\x55\xbf\x31\x3c\x44\x19\x01\x4c\xe9\xf6\x91\x4a\x20\x63\x58\xd5\xb1\xa4\x42\x7f\xb5\x69\xad\xa1\x55\x51\x97\xa8\xa2\xa7\x47\x1c\x6f\xd8\x71\x89\xd6\x45\x2b\x6c\x3b\x6e\x82\x81\x55\xf3\x62\x01\xca\xd1\xa9\xac\xc0\x01\x77\xfb\xc1\x0c\x03\x87\x59\x98\xa9\x6d\x8d\x4d\x01\xd4\xa5\x2d\x26\xbd\x50\xe9\xe0\xd1\xaf\xaf\x4e\x25\xdc\xc1\x77\x52\x11\x7b\x5f\x59\x63\x75\x55\x66\xfe\xe2\xb1\x28\x9e\xbd\x1f\x97\xe3\xf6\x37\xe0\xd4\x8f\xe3\x62\x1d\x22\x82\xb3\x52\x99\xa9\x14\x35\xb5\xda\x8e\x2f\x57\xce\xca\x0c\x0e\x48\x47\xc6\x8e\xaf\xf6\xb3\x2b\xa3\xe4\x1d\xa9\x99\x94\x43\x18\x45\xbc\x29\x0f\x58\xac\xce\xe3\xe6\x0d\x59\xb9\xd2\x56\x65\x99\x99\xca\x1f\x6d\xd5\xd7\x14\x99\x06\x3c\x86\xf1\x32\x24\x40\xfb\x91\x8d\xc3\x05\xdc\xc2\x5f\x97\xc0\xde\x32\x91\xcf\x03\x8a\x51\x10\x04\x52\xdd\x3a\xc9\x17\x2d\xf5\xda\x17\xaf\x5b\xc8\xe5\x4b\x3d\xa2\xf0\x7a\x18\x17\x11\x4d\xe3\x3c\x71\x4a\x2a\xa8\xf6\x43\x6e\xb1\x0b\xd7\x07\xda\xf1\x5c\xb7\xbb\xb3\x13\xf2\xdd\x6a\xf6\x3e\x15\xf9\x6e\x38\xd1\x5b\x3d\x2b\xe2\x2f\x00\x91\x96\x16\xd7\xe7\x55\x2c\x2f\x18\x36\xcf\x37\x78\xb6\x11\xcb\xae\x00\xc6\x51\x07\x96\x32\x93\xf1\xda\x34\x5f\x15\x6e\x05\xf6\xda\x48\xdb\xb2\x95\x1e\xbc\xf0\x8a\xba\x3b\x3e\xfa\x06\xcf\x5d\x61\x6e\xe6\xa4\x10\x29\x6b\xa4\xfb\x53\x8f\x8f\xbd\x15\x88\x97\xa4\x1c\x1f\xfb\x2b\xe5\x48\x3d\x3e\x6e\xae\x94\x97\xf5\xf8\xb8\x95\xfb\xa2\xc5\x2b\x3c\xb8\xfb\xd9\x3a\xec\xb2\x43\x9c\xb2\x3e\xaa\xc1\xd2\x41\x64\x43\xf8\xfe\x56\xbc\x55\x44\x4b\x1b\x9c\x5d\x6a\x1e\x60\xeb\x68\x4b\x71\xee\x48\xff\x3f\xed\x72\x25\x1f\xee\xf2\x37\xfa\xed\x78\x7a\x7d\x7e\xab\xab\xe5\x3b\xbd\xd9\x94\xaf\x79\xd0\x35\x5b\xda\x94\xb1\x75\xd0\xc5\x27\x4e\x09\x2b\xbf\x67\xd7\x1d\x5c\xf7\xdd\xba\x3d\x10\xc3\x1e\x98\xf0\xd6\xc0\xa6\xfc\xcb\x20\xdc\x13\xa0\xbf\xd3\xe6\x24\xcf\x7b\x6f\x77\x8d\x82\x9d\x81\x2d\x5d\x0a\xa5\xb7\x8f\x9d\x14\x11\xb9\x1e\xd8\xdd\x12\x72\x03\xdb\xe8\xc1\xd1\x6b\x3d\x38\xdd\xd0\x83\xd3\x37\xf6\x60\x5a\xec\xc1\xe9\xaf\xe9\xc1\x69\x45\x0f\x4e\xcd\x1e\x1c\xbe\xd6\x83\xfe\x86\x1e\xf4\xf3\x1e\x98\x18\xf6\x7f\x0d\x86\xfd\x0a\x0c\xfb\x06\x86\x6d\xef\x35\x0c\xdf\x6f\xc0\xf0\xfd\x26\x0c\xdf\xff\x1a\x0c\xdf\x57\x60\xf8\xde\xc4\xb0\xd3\xcd\xa7\xd9\x2a\x9f\xe7\x4c\x00\x16\x4a\x36\xff\xc5\x76\x8d\xb2\xfb\xa2\x76\xac\x0d\xfa\xb0\x95\x77\xee\x5f\x0c\x06\x68\xfd\x8b\x39\x7a\xfb\xdd\x32\xc6\x3a\x69\x3e\xd8\x6f\xee\xe7\x87\x8a\x7e\x7e\x30\x5b\xeb\xbc\xd2\xda\xf9\xdb\x5b\x3b\xaf\x68\xed\xdc\x6c\xad\xa5\x51\xf5\x44\x5f\x78\x82\x5d\xc3\x21\x53\xae\xa8\x53\xa0\x52\x7b\x63\x4d\x5a\x3d\xe5\x6a\xf6\xcd\x6a\x7c\xbf\x59\x35\x56\x5a\xff\x3f\xe9\x63\x75\xfd\xa9\x50\xba\xf5\x4a\xe9\x7f\x32\x4a\xff\x53\xa1\x74\xfb\x95\xd2\x37\x46\xe9\x9b\x42\xe9\xce\x2b\xa5\x6f\x8d\xd2\xb7\x85\xd2\x95\x3c\xea\x77\x36\x31\xa9\xdf\x29\x12\xee\xa0\xb2\x82\x83\x8d\x15\x1c\x14\x2b\x38\xac\xac\xe0\x70\x63\x05\x87\xc5\x0a\x8e\x2a\x2b\x38\xda\x58\xc1\x51\xa1\x82\xa6\x57\x55\x41\xd3\xdb\x54\x41\xd3\x2b\x56\xe0\x57\x56\xe0\x6f\xac\xc0\x2f\x56\x50\xc9\x7d\xcd\x8d\xa2\xa2\xd9\x2a\x56\x50\xc9\x80\xcd\xf6\xc6\x0a\xda\xaa\x02\x11\xf6\xd5\xdd\xd1\x64\x9b\x29\xf2\xb8\x9a\xb3\xca\xf5\x9a\x93\xf2\xb2\xb6\x5a\xed\xe8\x19\xb5\x9a\x36\x97\xa9\xd5\x54\x19\xf6\xa8\xde\x34\xa7\x0a\xd5\x6a\xfb\x1d\xfd\xfd\x67\xc6\xab\x04\x99\x59\xd1\x55\xb0\x77\xc1\x7e\x47\x1c\x44\xa3\x3f\x8f\x83\x23\xaf\x28\x9a\x2a\x22\x0b\x72\xc5\xac\xde\x6a\xba\x5d\xff\xa8\xa9\xb7\x57\x92\x6d\x7f\xb6\xf5\x06\xdb\x87\x46\x83\x9d\x83\xf2\x9a\x94\xd7\xbf\xdb\x3e\x74\xdf\x84\xee\x56\x2c\x77\xf7\xdb\x6e\xb7\x55\x85\x64\x55\x31\xcf\x68\xb0\xe3\x9b\xe8\x76\xde\xd4\x60\xc7\xaf\x37\x0f\xdc\x6e\x67\xff\x8d\x6d\xfa\x34\x77\xd3\x3f\x7a\x63\x76\x96\xbb\xe9\xbd\x35\xf7\x21\xcd\xed\x9b\x3c\xe1\x6c\xc9\x7f\xe4\xaa\xd8\x1f\x52\xf2\xe4\x3c\x5c\xb2\x17\xc3\x96\x7c\x05\xe2\x85\xb1\x90\x47\xde\x66\x20\xac\x36\xf9\xf6\xd8\xaa\x77\x71\x3c\x9c\x8a\x9c\x15\x7b\xa6\x5a\x39\xf9\x36\x06\xd1\x0a\x8f\x27\x32\x5b\x2a\x5b\xcb\xec\xe4\x62\xc5\x1e\xe3\x3f\xc0\x68\x56\xfb\xdd\x08\x18\x46\xcc\x6a\x21\x41\xfe\x43\x45\x6b\x89\x77\x6d\xf3\xa8\x18\x96\x45\x8c\x89\x0a\xdd\xe2\xe3\xca\xe0\xab\x95\x78\x8f\xb5\xac\x52\x35\x4c\x64\x16\x31\x52\x3b\xce\x0e\x59\xad\x9c\xed\xf2\xc4\xad\xd5\x72\x73\xd4\x65\xa1\x37\x55\x0c\x40\x8a\xc6\xa6\x38\x1a\x4a\x2a\xcd\xd0\xb7\x98\xa0\x2e\x35\x38\x8b\x63\x9f\x4c\x2a\x2c\x4b\xa2\xde\xb7\xc0\xb6\xbe\x57\xab\x4d\x7b\x17\xb9\x79\xcb\x32\x52\x43\x5d\xbe\xd5\x79\x8d\xa4\x9b\x9f\xa5\xd4\x8b\x2e\xd7\x7b\x30\xfd\x30\x72\x10\xf3\xf7\x19\xe9\x67\xd4\x39\x36\xea\x2c\x1a\x79\x8e\xa1\x71\x9f\xe2\x09\x60\xf6\xba\xaa\xc0\x7e\x9a\x45\x04\x6c\x54\x8d\x28\x6c\x2b\x49\x31\x95\x87\xd8\xd4\xeb\x93\xcc\x38\xe1\x82\xe3\x2e\x4e\x1f\xaa\x30\x67\x6f\x54\x92\x4e\x05\x7e\x54\xb1\x21\x5c\xec\xd5\xa9\xb4\x22\x15\x61\xcc\xde\xfb\xaa\x8d\x4c\x1c\x8d\x81\xbf\x76\x48\xbd\x5b\x5e\xb8\x49\x2b\x6a\x11\x61\x66\x55\x60\x04\x45\xf4\x01\x63\x33\xae\xe0\xb7\x77\x80\x55\xf5\x77\xe8\x02\xab\xe7\x57\x75\x02\x43\x16\xfd\x0d\x2a\x5e\x1f\x14\x65\x57\xe1\x15\x73\x82\x8a\x47\xe2\xba\x2f\x84\x6f\xf0\xaa\xf7\x22\x39\xfa\x6b\x81\x5c\xb5\x38\x57\x41\x11\x11\x2f\x23\xe0\x21\x7a\x28\xa1\xe2\x46\xb9\xcd\xf8\x9b\xda\x89\xfc\xc9\x5f\x2b\xc4\xf6\xb4\x7d\x16\x6b\x49\xe7\x00\x7b\x24\xf4\xd1\x49\xf3\x52\xee\x31\xb0\x28\x91\x4c\xbc\xab\x5d\xbe\x86\xda\xb6\x6c\xe4\x8f\x50\x54\x8e\x4f\xe8\x45\xbb\xbb\x3d\x56\x46\x0f\xd0\x78\x00\xe2\x44\xea\xad\x6e\x60\xbc\xec\x58\xc0\xd8\xc6\x6a\x96\x1f\x96\xe1\x6f\x99\x2f\xbd\xa6\x38\x47\x0d\xa5\x79\x77\x50\x12\x78\x28\x3d\x26\x2e\x7f\x79\x9b\x3e\x0f\x7b\x69\xbd\x7e\x4c\x8c\x16\x05\x1a\xa4\x9e\x7b\x18\x8d\xc0\x86\x77\x5e\xee\xc5\xce\xb3\x97\xe2\x38\x9e\xeb\x49\xdd\x3f\x31\x03\x22\x12\x19\x1d\xc2\x77\xec\xbd\x42\x18\x89\x1e\x93\x51\xfd\x92\xe7\xe2\xc9\x67\x89\xab\xa8\x48\x3f\x56\xc4\xd6\x09\x46\xe9\x74\x77\xd7\x7a\x47\x7a\x6e\xf5\x0b\x99\x2a\xba\x69\x66\x28\xf5\xcb\x37\xa2\x4c\xd2\x85\xe3\x76\xf5\x58\x0d\xbd\x8b\xf5\xfa\x06\x94\xdf\xc9\x37\x65\xe1\xc0\x04\x8b\x9d\x5d\xd7\xa5\xd3\x27\x4a\x96\xd0\xc3\x9b\x02\xa8\xb0\x78\x43\x13\xbb\x51\x40\xac\xeb\xcf\xef\x02\xa2\x46\x2b\x20\xbb\xbe\x8b\x12\xf5\xbb\x1e\xc8\xb3\x95\xdf\xdf\xe5\x0b\xff\xf7\x00\xd4\x61\x92\x57\xde\xe0\xaf\xde\xdc\xbf\xf9\xf4\xd3\xb6\xa3\x2a\xa5\x37\xe8\xbf\x72\xd7\x81\xb6\x44\x72\x59\xa1\x1f\xf7\x63\xab\x2f\xbb\xdf\x03\xf8\xa5\x1e\x64\xed\xae\xd7\x55\xc7\x26\xd8\xd6\xb1\xb1\x44\xc2\xb1\x8e\x2b\xdb\x33\x96\xd4\x30\x36\xb4\xa9\x1a\xf2\x4e\x4f\x3e\x4b\x26\x85\x8c\x67\xc9\x24\x28\x6e\x6e\xce\xc3\xef\x85\x36\x55\xf0\x9a\x56\xb9\x57\xbd\x51\xce\x29\x56\xd2\xef\xc4\x0c\x37\xba\x41\xb9\x5b\x04\x09\x73\x96\x24\xe1\x3d\x55\xf2\xd8\x0b\xc7\xf9\x62\x88\xe1\x91\x96\xa3\xba\x96\x60\x52\x9a\x27\x78\x59\x23\x08\x3c\xb7\x27\x08\x41\xc9\xd8\x83\x7a\x50\x94\xb0\xc6\x4b\xac\x5c\x57\x6f\x23\xd8\xf1\x4c\x1c\x65\x53\x95\x18\xca\xb8\x75\xce\x70\x6e\x6f\x27\xaf\x6a\x77\x17\x46\xb5\x1a\xbc\xf3\x7a\x6a\xe7\x01\xde\xe5\x32\xf6\x44\x3d\xed\xfa\x5d\x38\xf6\x4e\xbc\x6e\x41\x0b\x49\xe0\x3b\xf9\x2d\x0d\xd7\xeb\xac\x61\x8d\x02\xbf\x11\x01\xf6\x92\xd3\x9b\xe8\x61\x56\x54\xbe\xb5\x88\x87\x5c\x98\xeb\xf2\x84\xc9\x73\x9c\x07\x83\x44\x62\x22\xa8\xd7\xa6\x3a\xae\x58\x4c\x0a\x23\x55\x77\x31\x7b\xf7\xa0\x08\xad\xd2\x23\x24\xca\xaa\x42\x98\xc1\x25\x4c\x7f\x33\x72\xaf\x20\x46\x71\x87\x7a\xbd\x07\x74\x65\x7b\x33\x56\x6c\x97\xaf\xa0\xc0\x98\xc1\x74\xab\x55\xfe\x3b\xdf\x46\x05\xb6\xdc\x49\xe9\x52\x8d\x38\x2f\x62\x44\xd4\x89\x10\x48\x5f\x13\xcd\xea\x0e\x14\xe3\x9a\x94\xc0\xeb\xe5\x91\x39\xbe\xa4\x3a\x3b\xbc\x0a\x5a\xf8\xe7\x2b\xb7\x10\x6c\x13\x82\x9b\xa3\xed\xaa\xc6\x2d\x4a\xa0\x6c\x22\xe6\x0c\xe7\x78\xa8\x28\x7c\x14\x36\x95\xe3\x3d\x14\x92\x42\x1b\xc8\x6e\xb5\xee\x32\x1c\xb1\x97\xae\xb2\x37\x77\xd4\x6a\x4e\xd4\x88\xb2\x9f\x71\xc8\xb6\xf3\x88\xdb\x4b\x35\x76\x4c\xeb\x75\x37\x1a\xa6\xa3\x00\xcb\xf9\x13\x15\x06\x7b\x56\x79\x2f\xd7\xc9\x26\x9e\xea\x56\xa9\x53\x85\xa0\xaa\xac\xaa\x4a\xf6\xd2\x7c\x3e\xc3\xc5\x7b\x59\xeb\xb6\xed\x36\xd8\x6b\x2e\xae\xa7\xa5\x20\x94\x52\xe4\xb3\x24\xb0\x8c\x5c\xd3\xdf\xa3\xaa\x42\x37\xdf\xbc\xe5\xaa\x0d\xb7\xb8\xa1\xa7\xb8\x55\xc8\x11\xb8\x8b\x48\x5c\x35\xca\xac\x24\xa1\x40\xbb\x34\xca\xac\x4b\xfa\xfc\xa9\x0b\xbe\x7f\x57\x5a\xb6\xd5\xf2\x2f\x23\x52\x39\xd0\x71\x73\x5d\x40\x8d\xa5\xe8\xca\xf7\xdd\xdd\xa2\xaa\xfe\x08\xec\x85\xbb\x85\x56\xc5\xa4\x29\x46\xc6\x9e\xe8\x7a\x14\xd3\x68\xe4\x6b\x58\xa4\x26\x92\x93\x52\x9f\x22\xca\xde\xcc\x67\xfa\x86\xfc\xf9\x9c\xdb\xf1\xfe\x4e\xc1\xb0\x62\x22\x3c\x97\xfb\x6e\xb8\x55\x0a\x2c\xc2\x95\x2f\xa5\x69\x1b\x30\xa6\xa4\xe7\xf3\x44\x0b\xf7\xab\x74\x88\xc8\x60\xe8\x8a\xf7\x00\xf6\xa2\xfc\xb6\x33\xa3\x0d\xf5\xea\xc0\xca\x08\x29\xb4\xa9\xbe\x80\xbc\xae\xad\x6d\x7e\xc3\xa7\x41\x1e\xaa\x23\x54\xd0\x87\x2d\xb1\x9c\x99\xca\xba\xc2\x3c\x24\xe3\x19\xb7\xdd\x63\x24\x2f\xaa\xa0\x4a\x49\x7e\xdd\x45\x21\xc0\x87\x5b\x6e\x6a\xa2\xb3\x37\x9a\x2e\xd2\x27\xa7\xe5\xfd\xe8\xc0\x6e\xe4\xa2\xa6\x5b\x57\x89\x9d\xa3\x1f\x1d\xb2\x9b\x9a\x89\xbe\xff\xa3\x83\x77\x33\x9a\x48\x91\xd1\xdf\x59\x1e\x98\xaf\x30\x47\x51\x23\x4a\x66\x80\x23\x92\x05\x09\x8a\x1a\x69\x12\xa4\xf4\xcf\x74\x1a\x64\x48\x5e\x46\xb7\xe1\xf8\x80\xfe\x26\xe6\xd5\x4a\x3f\xf6\x88\xd9\xb1\x8b\x01\x77\x78\xb3\xd7\x28\x66\x24\x5d\x7c\xc2\xe9\x22\x7c\x08\xc5\x91\xe4\x1d\x7f\x8d\x40\x5e\x72\x18\x44\xeb\xd2\xcb\x97\x8d\x2b\xf9\x7e\xd3\x0b\xe5\xa3\x0d\xa7\x68\xc5\xb0\xc9\xc3\x21\xfa\x8f\xd5\xea\x65\xbd\xd6\x3a\xa2\x0e\x87\x17\xcf\x50\xe8\x85\x98\xaf\xd1\xfc\xbd\x5a\xc9\xd7\xc0\xe4\x69\xea\xd4\x27\x32\x6a\x9e\x4e\x37\xd0\x37\x2f\xe9\x16\xae\x0a\xca\x21\x28\x0a\xb0\x61\x6f\x8b\x5b\x2a\xa9\x98\x5a\xad\xd8\x1d\x95\xb1\x38\x98\xaf\x1f\x4d\x65\xa1\x16\x2a\xfa\x36\x42\x7e\x01\x29\x6e\x7a\xf5\xe3\x58\x9e\xea\xaf\x88\xee\xce\x91\xa8\xd5\x26\x10\x03\x11\x31\xa2\x79\x7a\xa1\xa3\x45\x4e\x2f\x5c\xd4\xc3\x47\xec\x6d\x5e\x19\x3d\x2e\x28\x9d\x4e\xd9\xe5\x96\x88\x68\x1e\x19\x94\x1f\x45\xc5\x39\x05\x88\x7a\x09\x02\x2d\x60\xa2\x47\x97\xa0\x92\x5a\xcd\xfd\x8b\xec\xf5\xec\x7e\x0f\x1f\x2b\x0c\x24\xc9\xd9\x31\x99\x21\xde\xf5\x47\x41\x7e\xa5\x22\x1e\xf5\xb6\x0c\x61\x54\x1a\x42\xfe\xbe\xf7\x48\xd6\x29\x55\x0c\xbd\x37\x45\xa6\x89\x2b\x87\x45\xa7\x8a\xc9\x8a\x6b\x04\x6b\x16\x42\x6d\x88\x82\xbf\xfb\xa4\x33\x6e\x4f\x85\xc6\xd5\xe7\xcb\xc0\xfe\xe2\xd9\x08\x1a\xb7\xd7\x1f\x02\xfb\xff\xc3\x9e\xee\xfe\x39\xb0\xff\xbf\xf4\xe9\x8c\x3e\xfd\xff\xd8\xd3\xf5\x5d\x60\xff\xff\xd9\xd3\xd5\x3f\x05\xf6\x7f\x42\x9f\xfa\xa7\x7f\x08\xec\xff\x94\x3e\xbd\x3f\xbb\x0c\xec\xff\x8c\x3d\xdd\x06\xf6\x97\x7b\xfa\xf4\xe1\x2e\xb0\xbf\xb0\x97\x05\x5e\x9e\x07\xf6\x97\x84\x3e\xfd\x91\xa6\x3d\xd2\xa7\x73\x9a\x36\xa5\x4f\xa7\x37\x81\xfd\x05\x73\x0c\x02\xfb\x3f\x67\x0f\x17\x81\xfd\x5f\xd0\x87\xc1\xe5\x59\x60\xff\x97\xec\xe9\xd4\x0f\xec\xff\x8a\x3f\x35\x03\xfb\xbf\xe6\x4f\xad\xc0\xfe\x6f\xf8\x53\x3b\xb0\xff\x5b\xfa\x74\xd5\xff\x43\x60\xff\x77\xac\x92\x5f\xae\x02\xfb\xbf\xe7\xbd\x78\x1f\xd8\xff\x03\x6b\xab\x7f\x15\xd8\xff\x23\x4b\xfb\x18\xd8\xff\x13\xcb\xf6\xf9\x7d\x60\xff\xcf\x2c\xe9\xf6\x34\xb0\xff\x17\x86\xdc\x6d\x60\xff\xaf\xf4\xe1\xa7\xdb\xc0\xfe\xdf\xe8\xc3\xcd\x6d\x60\xff\xef\xf4\xe1\xf3\x6d\x60\xff\x1f\xac\xdc\xa7\x80\x6a\x82\xd0\x18\xd0\xbe\xff\x5f\xf6\xda\x21\x8d\x53\x8f\xc5\x42\x9c\x7a\xc1\xcb\x9a\x2a\x57\x5b\x87\x4e\xdc\x5f\x14\x47\xf7\xe1\x62\x91\x6d\xbb\xc1\x48\x64\x31\xef\x30\x7a\x7f\x3b\xd8\x6d\xed\x9e\xc6\xe1\x32\x03\xe3\x32\x23\xbf\x71\xe0\x35\x3c\x7e\x9b\x91\x28\x69\xde\x67\xb4\xb7\x57\xba\x7e\xc8\xdb\xdf\x6d\x7a\xde\x11\xbb\x80\xe6\x74\x86\xd3\x79\xb4\x9c\x5b\xd7\xb7\x56\x7f\x49\x66\x29\xce\x1a\x56\x3f\x8e\xc5\xed\x3b\x16\x55\x40\xf0\x23\x4c\x1a\xbc\x2e\x51\xe3\x0d\xa8\xcb\x76\xd8\x65\x5c\xc9\x84\x85\x6c\x47\x89\xc5\x6f\x3f\x62\x29\xf7\x51\x12\xe2\x67\x6b\x9a\xe2\x79\x86\xf8\x4b\x38\x52\x2c\x2f\xfb\x11\x15\xb1\xbb\x7c\x44\x54\x05\xb2\x42\x0c\xe2\xfe\x1d\x02\x13\x6b\x81\xd3\xc7\x68\x02\x13\x8b\xcc\x42\xb2\xf1\x3a\x1d\x5a\x48\x56\x06\xa4\x6b\xa0\x69\x59\xd6\x8f\x05\x5c\xd9\x2d\x38\x02\xc9\x71\x3a\x01\x6b\xbe\xcc\x88\x85\x81\x84\xe2\xd2\xa2\xc2\x8d\x3c\xa2\x26\x7e\xf9\x0e\xe2\x97\xf2\xd0\xc9\xce\x6e\x58\xd2\x90\x60\x17\xf6\xe8\x18\x4e\xa2\x6c\x1c\x87\xd1\x1c\x70\x63\x1b\x36\x51\xa2\xd3\x49\x62\xb3\xc0\xe9\x64\x39\x86\x1c\x21\x51\x45\xf1\xa2\xa0\xdf\x86\x90\xa8\x4c\x74\xd8\xbc\xdd\x49\x5c\x96\x94\x92\x19\x60\x6b\x1e\x12\xc0\x51\x18\x67\xf9\x58\xb0\x61\x24\x33\x89\x90\xde\x19\xa3\x9f\x57\x10\xb1\x2a\xd8\x4b\xef\xc3\x39\xbb\x91\xea\xa7\x34\x7d\x88\xc1\xba\x48\xc6\x0d\x2b\x49\x73\x18\x1b\x93\x88\x5f\xf5\xc4\x3a\x99\xf0\x3a\x53\x9c\x59\xf3\xf0\xd9\xba\x67\x07\x02\xd8\x35\x4b\x90\x4c\x52\x9c\x01\x65\xa4\x05\x4e\xe7\x29\x01\x8b\xd3\x8a\x64\xd6\x04\x70\xf4\x08\x13\x6b\x8a\xd3\xb9\xa8\x8a\x18\xd7\x5a\xc9\x7b\xa6\xb2\x05\x8c\x29\xd7\x59\x0b\x1c\x51\x8e\xc4\x94\xdf\x12\xed\xae\x25\x93\xd9\xef\x3e\x5c\xdc\x56\xdf\x8f\xf4\xfe\x17\x76\xd5\x4e\xf9\x2e\xa1\xfe\xd5\x80\xdf\xff\x73\xf1\xfe\xf3\xdd\xf5\xcd\xad\xa8\x49\xdc\xa7\xc4\xc0\xfd\xab\x5f\xb4\x8b\x93\xe4\xad\x49\xda\x9d\x48\xda\x05\x4a\x48\xde\xa0\x24\xea\xc9\xef\x51\x42\x0c\x81\x72\xe1\x8a\x0b\x95\x58\xab\xda\x85\x4a\xa2\xae\xea\x6b\x95\x6e\xce\xac\xc1\xc5\x2d\xbb\x00\xe9\x6c\xb0\xe1\x46\xa5\xbc\xdf\xa2\xaa\xeb\x9f\xaf\xce\x6e\xf8\xe5\x4a\x79\xd7\x2b\xee\x55\x1a\x5c\xdc\x9c\x9d\xde\xd1\xfe\xe5\x4f\xa7\x17\x83\xb3\xab\xbb\xfe\x25\x12\x75\xdd\x7e\x3a\x3b\xbd\xe8\x5f\x22\xeb\xec\x9f\xcf\x3e\x7e\xba\xec\xdf\xfc\x82\x44\xcd\xb7\x67\xff\xf4\xf9\xec\xea\xee\xa2\x7f\xa9\x6e\x66\x72\xde\x44\xa9\x4f\x37\xd7\xa7\x9f\x6f\xd8\x1d\x51\x94\x3c\xb7\x9f\xdf\xdf\xde\x5d\xdc\x7d\xbe\x3b\xb3\x7e\xba\xbe\x1e\xb0\x51\xb8\x3d\xbb\xf9\xe3\xc5\xe9\xd9\x6d\xcf\xba\xbc\xbe\x65\x44\xfc\x7c\x7b\x26\x51\x1a\xf4\xef\xfa\x0c\x89\x4f\x37\xd7\xe7\x17\x77\xb7\x3d\xfa\xfc\xfe\xf3\xed\x05\xa3\xe8\xc5\xd5\xdd\xd9\xcd\xcd\xe7\x4f\x77\x17\xd7\x57\xae\xf5\xe1\xfa\xe7\xb3\x3f\x9e\xdd\x58\xa7\xfd\xcf\xb7\x67\x03\x46\xfa\xeb\x2b\xda\x79\xc5\x53\x67\xd7\x37\xec\x1a\xad\xea\x9b\xa4\xf2\xcb\xa3\x6e\xef\x6e\x2e\x4e\xef\xf4\x6c\xd7\x37\xec\x46\x29\x51\x53\xde\x77\xeb\xea\xec\xa7\xcb\x8b\x9f\xce\xae\x4e\xcf\x8c\xdb\xa6\x5c\x75\xdb\x14\xbb\xa2\xea\x17\xeb\xe7\xfe\x2f\xf2\xbe\x29\x71\x93\x94\x1c\xc0\x73\x93\xd9\x11\x1b\x72\xeb\xe2\xdc\xea\x0f\xfe\x78\x41\x3b\x22\x8a\x7c\xba\xbe\xbd\xbd\x10\x6c\xc5\x48\x79\xfa\x41\x0c\x06\xbf\x6e\x2a\x9a\x3a\xea\x82\x8f\xa8\x7c\xff\x06\x7f\x65\x94\x65\xc7\xd1\xbd\x6d\xf1\xb7\xd3\x5a\x61\x8c\x21\x9c\x3c\x5b\xf0\x3d\xca\x48\xd6\xf8\x41\x5a\x0c\x2f\xeb\x5e\xd4\xc0\xcb\x84\x44\x73\x18\xc0\x02\x92\x09\x24\xe3\x08\xb2\xaf\xfc\xb2\x98\x28\x89\x88\x3c\xd7\x91\x7d\xa5\x9a\x61\xd4\xc0\x64\x02\x8b\xaa\x63\xc9\xf8\xf9\xa5\x80\xcb\x7a\x1c\x8a\xcb\x3e\xe4\x4d\x92\x19\x09\xc7\xdf\x98\x22\x4e\x1c\xaa\xc7\xb8\x3d\x12\xe4\x87\x01\x5b\x27\x78\xd8\x1c\x35\x30\x2c\xe2\x70\x0c\xce\xde\x9f\xbe\x64\x3f\x86\xe4\x4b\x56\xdf\x43\xb6\xed\x76\xf1\xd0\x2f\x00\x1f\x78\x57\xe9\x52\xf3\x1f\x58\x9e\xb5\xd4\x3b\xb9\x96\x59\xd2\x60\xa9\xb6\xc9\x90\xc9\x34\x0d\x36\x65\x1a\xac\x71\xcb\x39\xd3\xcb\x5d\xd1\x59\xa1\x9a\x46\x28\xe3\x7b\x4f\xe2\xfd\x5b\xdc\xae\xae\xa0\xdd\x30\x1b\xf5\x92\xd5\xca\xd9\x9e\x25\x18\x8e\x5c\x94\xe4\xef\xc6\xa1\xf4\x86\x24\x5b\x62\xb8\xa9\x1a\x8f\xd2\x5b\xaf\x76\x72\x7f\x26\xe1\x77\xb2\x54\x35\xa4\xd9\x52\xd5\x19\x86\x84\xaa\xe4\x44\x8e\x49\xc3\x76\x51\x16\xf0\x1b\xc1\x56\xab\x0c\xe2\x29\x4a\x02\xaf\x97\x1c\xa7\x92\x84\x89\xb8\xea\x72\xc7\x49\x87\xc9\x88\x2a\x25\x6e\xe1\xb0\xda\x0f\x1f\xa9\xa0\x4f\x1e\x2c\xfb\x87\x3a\xa9\xff\x60\xb3\xbb\x56\x00\xe8\x02\x77\xff\xfc\x03\x7b\xe5\x52\xb0\xe3\x8b\x38\xf2\x2c\xc8\x86\xb4\xa2\xd1\x9a\xd6\x09\xe5\xb3\x4c\xe7\x61\x14\xc3\xc4\x12\xb8\x5b\x13\x89\xfc\xb3\xc5\xdf\x6c\xc9\x6c\x7e\x79\xd4\xe6\x22\x89\x8a\xde\x70\xe9\xb8\x2c\x30\xb3\xbc\x46\x0a\x91\x91\x8b\x88\x64\xf6\x4a\xcf\x6a\xb1\x28\x4a\x0b\xee\x6d\xc9\xc1\x92\xb5\x70\x7e\x8a\xb3\x56\x23\x8e\x4d\x8b\x77\x2d\xbb\x9e\x0d\xbd\x91\x8b\xb2\xa1\x3f\x72\xa2\xc6\xb4\x11\xc6\x21\x9e\x3b\xa9\x78\xa5\x12\xb5\xd4\xd7\x94\x11\x6d\x59\xb9\xf6\x4e\xe9\x32\x59\x24\x8d\x53\x6c\x45\x09\x3b\xd5\xa5\x5e\xdb\xd6\xb5\xd2\x84\x12\xc2\x76\x7b\xdb\x58\xca\x71\xf5\x80\x8c\x14\x79\xee\x1a\x89\x58\x17\x6d\xef\x27\x9c\xb0\x3d\xad\xd5\xca\xd9\x08\xab\x24\xb8\x03\xe2\x94\xbf\x20\xcd\x71\xe0\x9d\x88\x8b\xce\x68\xb2\xdb\x75\xf2\x37\xda\xb1\x1d\x78\xdb\xb2\xd9\x9e\x9c\x76\x6a\x35\x20\x74\xba\x43\x48\x1c\xd8\x93\xe9\x75\x76\x42\x5e\x5d\x4b\x0f\x6e\x5d\xaf\xd5\x5d\xbb\x95\x7d\x38\x4b\x26\x1b\x7a\x70\x66\xc4\xd8\xfc\x1b\xe1\xaf\x57\x54\xd7\x3b\xe3\xb2\x6b\xa6\xc4\xf5\x69\x4c\x04\x8b\xcb\xd5\x30\x7c\x0d\x5e\x66\xf0\xdd\xdf\xef\xee\xfd\xce\x19\x86\xbb\x53\x6f\xf7\x68\xe4\x56\x3d\xed\x45\x68\x06\xdf\x9b\x6d\x3d\xe3\x4b\x73\xed\x6e\xfe\xb1\x17\x21\xfc\x70\xdf\xa5\xdc\x75\x03\x0f\x67\xdf\x17\x8e\xfd\xa7\xbd\xec\x47\xfc\x70\xbf\x97\xfd\xb8\xe7\xec\x65\x3f\x3a\x7b\x93\x17\x1f\xb5\xd6\xee\x5e\xf6\x23\x7a\xe5\xf7\x1e\xfd\xfa\xbd\x9d\x4b\xea\x2f\x7b\x7b\x0f\xc8\xfe\xf2\xc5\x76\x91\x1d\xd9\x2e\x6d\x2b\xac\x6a\x2c\xfc\x2d\xad\x39\x27\x5d\x91\x54\x77\x4e\xba\x7b\x8d\xbd\x49\xdd\x3d\xa1\x00\xf7\x2d\x78\x7c\xaf\xc4\xe3\xe4\xef\x8b\xc8\xc9\xab\x98\x7c\xf7\x7d\x3a\x00\x6c\x4d\xa3\x0f\xf9\xe8\xf8\xa8\xbd\x76\xbf\xec\xbd\x9a\x90\xfd\xf8\xfb\xbd\x08\x51\x7d\xbf\xbb\x37\x0c\x77\xff\x36\xa2\x5f\xde\xee\xd1\x97\x6c\x54\xdf\xd3\xf9\xe8\xe1\xfe\x2e\xfd\x67\xdf\x37\x7d\x3f\xc6\xbb\xeb\xa4\x3f\x30\x70\x9a\x9d\x83\x1f\xf9\x0d\x53\x11\x9d\x1b\xcd\x4e\xc7\x75\x8d\xfb\x0a\x11\x15\x63\x7f\x5b\x84\x13\x07\x50\xdb\x5d\xcb\x55\x9e\x39\x81\x1d\x9d\x77\x69\xbb\xdf\xf3\x3b\xd9\x4e\x6c\xda\x4b\xbb\x4e\x1c\xba\xa6\xbb\xec\xc5\x88\xf4\xb9\xa9\x3d\xb7\x46\x2e\x7b\x1f\x96\x86\xfc\x77\xdf\xff\x00\xdf\xef\xd2\xd3\xdb\xdb\xd2\x91\x58\xf1\xc2\xd1\xec\xe7\x88\xb0\x0b\x18\xd5\x69\x3a\x76\x9b\x65\x34\x65\x77\x2d\xf2\xdb\x04\x1d\xdf\x45\xbb\x7e\x10\x0c\x5b\x68\x1f\x1d\x21\xbf\x39\xca\xf7\x91\xe4\x74\x2f\x95\x16\x9d\xda\x1b\xfe\x49\x10\x7e\x2f\x32\x33\xc9\x03\xfc\xbc\x82\xbd\x16\x3f\xd8\xc5\x1b\xf4\x10\x71\xd9\x7b\xb1\xc4\x6f\xc2\x5e\xd5\xa4\xfd\xae\xd3\x14\xb5\xc7\x26\xfb\x1b\x52\x2d\xe4\x2e\xbd\xf9\xe9\x7d\xdf\x19\x62\x94\xa2\x6c\xd4\x98\x87\x0b\xa7\x6a\xcb\x2d\xbf\x37\x11\xd8\x3d\x89\xcd\x20\x20\x27\xd0\xf5\xd9\x9f\xe3\xe3\x76\x17\xde\xbd\x6b\xff\xe8\x90\xdd\xa6\xbb\xe6\x9b\x55\x39\x51\xcb\x14\x95\x9d\xa9\x18\x49\xce\xab\xb9\x53\xf2\xc4\x21\xf9\x7b\x0d\xfc\x5c\x7c\x19\xd8\x93\x4d\x78\xfb\xf9\x4b\x0c\x4e\xf2\x1e\xd4\x59\x1f\xba\xcd\x4a\x20\x03\x39\x2d\xfd\xed\x07\x0e\xd4\x73\x62\x36\x5d\x17\x31\xae\xc5\xe9\x32\x99\x38\x66\xc1\xbd\x66\xe7\x80\x4a\x59\x16\x33\x5d\xe0\x98\x93\x2a\x46\x73\xc0\x55\x37\x46\x36\xe8\xfc\x62\x3d\x12\x1b\x8e\x22\x79\x46\xf3\xde\xfc\xf4\x7e\xcb\xa4\x6a\x9b\xe8\x06\xa0\x84\x01\x46\xc5\xfd\x10\x75\xb5\xc4\xef\xec\x3a\xa9\x93\x3a\xae\xe3\x7a\x54\x8f\xd6\xae\xdb\x33\xc7\x25\xd5\x46\x81\xce\x28\xc7\xae\xab\xde\x92\xa1\x3f\xa2\x1d\xae\xdb\xc8\x32\x92\x9b\xd5\xc9\x2d\x91\xec\xda\x7c\xd6\x49\xd5\x47\x1b\x79\xb6\xfc\xb0\xab\x48\xcd\xc4\x66\x9b\xcd\x90\xb2\xfe\xac\x6e\x52\x0f\xbc\x5e\x96\xdf\x16\x99\xd5\xeb\x2e\x50\x0d\x98\x38\xf4\x8f\x08\xe8\x02\xfa\x33\x8f\xd3\x28\xca\xac\x0f\xfa\xf6\x64\x89\xbc\x9c\x2e\xaa\xc4\x18\x87\xe3\x6f\x7c\x98\x34\x0a\xfd\xce\xae\x2b\x79\xe5\x68\x5d\xf7\x46\x2e\xbb\x27\xde\xa0\x9d\x7b\x7c\x7c\xb8\x32\xc8\xe6\x1e\x1f\x7b\x05\xf1\xb7\x2f\x44\xd4\xf6\xee\xf3\x4b\x55\x41\xf7\xa2\xc3\x10\xf3\xee\xe3\xd7\xbb\xcf\x63\xab\xa2\xbf\x41\x71\x92\xaa\x8d\x9b\x8d\x7c\x2c\x19\xd3\x60\x62\x29\x8e\x1b\x04\x32\xda\xe6\x09\xbc\xca\xe0\xda\x54\xae\x14\x13\xc2\x80\x6b\x9d\xc0\xb0\x35\xea\xfa\xf2\x22\x7f\xba\x96\x3a\x76\x1d\x86\xde\x88\xf3\x1b\x0c\x7d\xf5\xd4\x14\x4f\x84\xf2\x9c\xd6\x56\x06\xa4\x1f\x2f\x66\xe1\x06\x55\x7c\xf3\x08\xd3\x25\x23\x20\xd5\xf2\x07\xeb\xbd\x99\x47\xdf\x4b\x2f\x19\xc8\xed\xc6\xaa\x26\x50\x56\x91\x4c\x5c\x61\x1a\xb5\x7b\xf5\x7a\xc2\x31\x0c\x83\x6c\x98\x8c\x76\xa9\x41\xd3\xa3\x5f\x41\x95\x20\xa2\x00\xb7\x1e\xfe\x88\xd5\xa6\x4d\x25\xce\xa9\x8e\xb3\x6c\xb5\xb8\xee\x99\x83\x4f\x09\x6e\xbb\x7c\x4f\x6d\xe3\x3a\x1c\xe6\x07\xcd\xa5\x9d\x82\xc8\x5a\x19\xb6\x9b\x0b\xf2\x18\xd5\x8a\xc2\xe2\x15\xb1\xb4\x1a\x01\x34\x42\x87\x1d\xfb\x34\x5d\xc6\x93\xe4\x07\x62\xb1\x6e\x50\x53\x08\x5c\x54\x58\xdc\x15\xeb\x55\xf2\x38\xb7\x70\x25\x31\xe8\x9f\xab\x70\x0e\xd9\x49\x45\xda\x10\x46\x5d\x71\xb3\xf2\x65\xfa\x04\xf8\x34\xcc\xc0\x71\xdd\xdf\x50\x41\xae\xaf\x65\x75\xaa\xb0\xd9\xbf\xb6\x96\x42\x17\x33\x92\x8e\xbf\xb1\xcd\xf1\x4f\x61\x0c\x84\x40\x50\x9e\xa9\x43\xfb\x77\x9e\x27\x2f\xc0\x3e\x3d\x55\x57\x61\x9f\x1d\xf5\xf9\x55\xd8\xa7\xed\xbe\x76\x15\x76\x3f\xbf\x0a\xfb\xbd\xba\x0a\xbb\x4f\x9f\x06\xad\xc1\xc1\xe9\xb9\x79\x15\xf6\xd9\xb9\xbc\x0a\xdb\xf3\xde\xf7\x7d\x96\x76\x7e\x7a\x76\xd4\x3e\x17\x57\x61\x9f\xf3\x12\xe7\x4d\xcf\x3b\x7d\x2f\xf2\x75\xde\x0f\x58\x59\xfa\xdf\x29\x4f\x93\x58\xd1\xbf\x9d\x73\xf9\x74\x78\x20\x9f\xfa\x2a\x6d\xa0\xd2\xce\x45\x5a\xe7\x5c\x96\xed\x9c\x77\x54\x9a\x2c\xdb\x39\xef\xab\xb4\x81\x4a\x93\x65\x0f\x0f\x64\xd9\xc3\x83\x8e\x4a\x93\x65\x0f\x0f\xfa\x2a\x6d\xa0\xd2\x64\xd9\xbe\x6a\xb7\xaf\xda\xed\xab\x76\xfb\xaa\xdd\xbe\x6a\xb7\xaf\xda\x1d\xa8\x76\x07\xaa\xdd\x81\x6a\x77\xa0\xda\x1d\xa8\x76\x07\xaa\xdd\x73\xd5\xee\xb9\x6a\xf7\x5c\xb5\x7b\xae\xda\x3d\x57\xed\x9e\x8b\x76\x29\xa5\x78\x59\xfa\xd4\x51\x69\xbc\x2c\x7d\xea\xab\xb4\x81\x4a\x93\x65\x25\x9d\xe9\x53\x47\xa5\xc9\xb2\x92\xce\xf4\x69\xa0\xd2\x64\x59\x49\x67\xfa\xd4\x51\x69\xb2\xac\xa4\x33\x7d\x1a\xa8\x34\x59\xb6\xaf\xda\xed\xab\x76\xfb\xaa\xdd\xbe\x6a\xb7\xaf\xda\xed\xab\x76\x07\xaa\xdd\x81\x6a\x77\xa0\xda\x1d\xa8\x76\x07\xaa\xdd\x81\x6a\xf7\x5c\xb5\x7b\xae\xda\x3d\x57\xed\x9e\xab\x76\xcf\x55\xbb\x92\xce\xb4\xb7\xbc\x2c\x7d\xea\xa8\x34\x5e\x96\x3e\xf5\x55\xda\x40\xa5\xc9\xb2\x92\xce\xf4\xa9\xa3\xd2\x64\x59\x49\x67\xfa\x34\x50\x69\xb2\xac\xa4\x33\x7d\xea\xa8\x34\x59\x56\xd2\x99\x3e\x0d\x54\x9a\x2c\xdb\x57\xed\xf6\x55\xbb\x7d\xd5\x6e\x5f\xb5\xdb\x57\xed\xf6\x55\xbb\x03\xd5\xee\x40\xb5\x3b\x50\xed\x0e\x54\xbb\x03\xd5\xee\x40\xb5\x7b\xae\xda\x3d\x57\xed\x9e\xab\x76\xcf\x55\xbb\xe7\xaa\x5d\x49\xe7\xbe\xe2\xe7\xbe\xe2\xe7\xbe\xe2\xe7\xbe\xe2\xe7\xbe\xe2\xe7\xbe\xe2\xe7\xbe\xe2\xe7\xbe\xe2\xe7\xbe\xe2\xe7\xbe\xe2\xe7\xbe\xe2\xe7\xbe\xe2\xe7\xbe\xe2\xe7\xbe\xe2\xe7\xbe\xe2\xe7\xbe\xe2\xe7\xbe\xe2\xe7\xbe\xe2\xe7\xbe\xe2\xe7\xbe\xe2\xe7\xbe\xe2\xe7\xbe\xe2\xe7\xbe\xe2\xe7\xbe\xe2\xe7\xbe\xe2\xe7\xbe\xe2\xe7\xbe\xe2\xe7\xbe\xe2\xe7\xbe\xe2\xe7\xbe\xe2\xe7\xbe\xe2\xe7\xbe\xe2\xe7\xbe\xe2\xe7\xbe\xe2\xe7\xbe\xe2\xe7\xbe\xe2\xe7\x81\xe2\xe7\x81\xe2\xe7\x81\xe2\xe7\x81\xe2\xe7\x81\xe2\xe7\x81\xe2\xe7\x81\xe2\xe7\x81\xe2\xe7\x81\xe2\xe7\x81\xe2\xe7\x81\xe2\xe7\x81\xe2\xe7\x81\xe2\xe7\x81\xe2\xe7\x81\xe2\xe7\x81\xe2\xe7\x81\xe2\xe7\x81\xe2\xe7\x81\xe2\xe7\x81\xe2\xe7\x81\xe2\xe7\x81\xe2\xe7\x81\xe2\xe7\x81\xe2\xe7\x81\xe2\xe7\x81\xe2\xe7\x81\xe2\xe7\x81\xe2\xe7\x81\xe2\xe7\x81\xe2\xe7\x81\xe2\xe7\x81\xe2\xe7\x81\xe2\xe7\x81\xe2\xe7\x81\xe2\xe7\x81\xe2\xe7\x73\xc5\xcf\xe7\x8a\x9f\xcf\x15\x3f\x9f\x2b\x7e\x3e\x57\xfc\x7c\xae\xf8\xf9\x5c\xf1\xf3\xb9\xe2\xe7\x73\xc5\xcf\xe7\x8a\x9f\xcf\x15\x3f\x9f\x2b\x7e\x3e\x57\xfc\x7c\xae\xf8\xf9\x5c\xf1\xf3\xb9\xe2\xe7\x73\xc5\xcf\xe7\x8a\x9f\xcf\x15\x3f\x9f\x2b\x7e\x3e\x57\xfc\x7c\xae\xf8\xf9\x5c\xf1\xf3\xb9\xe2\xe7\x73\xc5\xcf\xe7\x8a\x9f\xcf\x15\x3f\x9f\x2b\x7e\x3e\x57\xfc\x7c\xae\xf8\xf9\x5c\xf1\xf3\xb9\xe2\xe7\x73\xc5\xcf\xe7\x8a\x9f\xcf\x15\x3f\x9f\x2b\x7e\xf6\x0e\xe9\x3f\xfa\xe4\x37\xe9\x3f\xf6\x74\x4a\xff\xd1\xa7\xe6\x3e\xfd\x47\x9f\x5a\x1e\xfd\xc7\x9e\xfa\xf4\x1f\x7d\x6a\xb3\xff\xd8\xd3\x19\xfd\x47\x9f\x3a\x87\xf4\x1f\x7d\x62\x45\x59\x7d\xfb\xa7\xf4\x1f\x7d\x3a\xd8\xa7\xff\x98\xe4\x62\x0d\xb3\xa7\x3e\xfd\x47\x9f\x8e\xda\xf4\x1f\x7b\x3a\xa3\xff\xd8\xcc\x63\x60\xfa\xf4\xbe\x49\xff\xb1\xa7\x53\xfa\x8f\x3e\xb1\x8a\x59\x7d\x03\x8f\xfe\x63\x4f\x7d\xfa\x8f\x3e\x31\xa4\x58\x7d\x4c\xbf\x3a\xb3\x47\x9a\x07\x65\x5c\xa9\x2a\x96\xb4\x48\x54\xa1\x7d\x06\x2f\x61\x1c\x8d\xe1\x3e\x5e\x42\x97\xb9\x06\x9a\x6d\x0f\x59\xcd\xf6\x21\xb2\x9a\x9d\x8e\x6b\xa3\x30\x21\xd1\x5f\x97\xc0\x4e\x66\x8a\x1c\x1d\x9a\xa3\xd5\x41\x56\xd3\x2f\xe6\xf0\x65\x16\x0a\x6d\x1d\xd1\x2c\x47\x85\x2c\x4d\x91\xa5\x45\x9b\x68\xb6\x90\xd5\xf4\xda\x85\x2c\x2d\x91\xc5\xeb\x20\xcb\x3f\x6a\x22\xcb\x3f\xd8\x2f\x64\x69\xf3\x2c\x3e\x6d\xc3\x6f\xf9\xc8\xf2\x9b\x1e\xcd\xf2\xd7\x65\x38\x0f\x71\x94\x08\x5c\xfd\xe6\x01\xeb\x08\x45\xa4\x69\xc0\xfd\xd7\x32\x08\x3c\x7d\x9f\xe2\x49\x91\xf5\x8f\x0e\x8d\x0c\x02\x4b\xdf\x6b\xd2\x3e\x50\x54\x0f\x4c\x14\x04\x8e\xfb\x0c\x45\xfa\xe5\xb3\x5e\xfc\x6d\x89\x0d\x5a\xb3\xc6\x39\xad\x29\xc8\xdf\x02\x93\xb4\x6b\xb6\x05\x4e\xcd\xd6\xa1\x84\x49\x74\x8e\x5a\x02\x9d\xa6\xa7\xca\x29\x6a\xf9\x12\x95\x16\x1d\x96\x7b\x88\x1e\x14\x2a\xb4\x04\xfb\x62\x84\xbc\x8f\xb2\xbf\x2a\x96\x60\x58\x34\x19\x09\xf6\x15\xcc\xdf\x06\x34\x06\xd9\x6f\x21\xcb\x3f\x6c\x29\xa0\x31\xbc\x87\x14\xd8\x39\x54\x40\x63\x60\x9b\x34\x87\x77\x40\x81\x31\x35\x08\x19\xc8\x43\x16\xfd\x9f\x27\x26\xe3\x19\x4c\xc2\x78\x9e\x26\x13\x83\xf5\x54\xff\x73\xce\xe6\xe5\x38\x35\x69\xaa\x5f\x9d\xdc\x34\x92\x19\x7d\x69\x72\xcb\x48\x56\x55\xb7\xf5\x64\x41\xd5\x78\x09\x8f\x51\x1a\x03\x91\x5d\x39\x44\x56\x9b\x8e\x4a\x93\x11\x08\xa7\x4f\x89\x80\xec\x77\x90\xd5\x6e\xd2\x8f\x04\xe8\x54\xdd\x6f\xd3\x8f\x84\xe8\x24\xed\x1c\xd1\x8f\x84\xe8\xf4\xec\xf8\xf4\x23\x21\x3a\x31\x29\x49\x5a\x0c\xed\x25\x8e\x9f\x9f\xd2\x54\x12\xac\x49\x27\xd8\x61\x9b\xa2\x6f\x80\x8d\x01\xf6\x29\xe7\x74\x0c\xb8\x8e\x90\x7f\x74\x80\x2c\xbf\x6d\xc0\x8d\x61\x3e\xf0\xd8\x70\xea\x70\x63\xa4\xfd\x0e\xb2\x0e\x29\x78\x1c\x4e\x80\xe4\x83\x76\xd4\x61\xec\x81\x2c\x7f\xdf\xd3\xa1\x72\xfa\x76\x9a\x92\x6d\x3b\x46\x69\x39\x7b\x29\x75\x9b\xcd\x23\x39\x92\x0a\x2e\x67\x0b\xeb\x3c\x45\x9e\x0f\xa9\x82\x0b\xe4\x18\x77\xb6\xda\x72\x68\xc7\xb3\x10\x13\x0c\xcb\xac\x24\x5e\x3c\x03\x5a\x12\x2e\x26\xb8\x24\x5a\x4c\x70\x49\xb0\x98\xe0\xa2\x58\xe1\xd0\x74\x9c\xc6\xa1\x12\xd1\x3e\x25\x37\x2d\xda\x32\xa0\xfa\x90\x32\xe4\x5a\xfb\x3a\xd8\x18\x51\x8a\x5c\xab\xa5\x83\x8d\x01\x65\xc8\x1d\xe9\x60\x7d\x3c\x19\x72\x0c\x9a\xe2\x30\x2e\xb6\x7a\xe8\x49\x88\x81\x90\xdf\x46\xd6\xe1\xbe\x04\x19\xc8\x78\xfb\x7a\x29\x1d\x91\x23\x9f\xb6\x26\x21\x06\x0e\x74\x62\x1d\x70\x48\x32\x8d\xd3\x27\xc0\x39\x5f\xf9\x1e\xa5\x50\x9b\x31\x86\xcc\x93\x45\xf1\x37\x9d\xe7\xd9\x22\xd8\xf4\x34\xa8\xbf\x1d\x6c\x48\xbd\x56\x53\x31\x95\x00\xeb\x68\x37\x59\xfb\x07\x7a\xd3\xe6\x92\xb6\x2f\x97\xb4\xf1\x73\x98\x28\x21\xa3\x2d\x08\x34\xdd\xdf\x04\xc8\x85\x98\xb6\x4c\x50\x40\x2e\xc6\xb4\x35\x82\x02\x72\x41\xa6\x2d\x10\x93\x10\x7f\x2b\x0a\xd0\x1c\x62\x60\x56\x28\xf5\x90\xc6\x13\x48\xb0\x14\x32\x42\xbe\xd0\x2f\xbf\x98\xc3\xe0\x81\x43\x36\xdf\x8b\x59\x0c\x5e\x38\xa0\x73\xb2\x5d\xcc\x62\x30\x67\x9b\x2d\x1e\xc5\x2c\x06\x81\x3d\x1f\x59\x87\x32\x07\x0e\x9f\xa5\x44\xa6\x30\xf1\xa5\xa0\x00\x5a\x3f\x3d\xb1\xf8\x08\xd0\x96\x82\xdf\x66\xe1\xb7\x48\xf6\xff\x48\xae\x75\x6c\x39\xa3\xe0\x79\xf8\x00\x09\x09\x35\xa4\x0c\xea\xa6\x71\xf4\x08\x5a\xdb\x87\x7c\x2d\x14\x3c\x6d\xe6\x90\x24\x64\x93\x92\xcf\xa5\x66\x29\x93\x94\x3a\x87\x4a\xa1\xf1\xda\xa5\x4c\x52\xf6\xec\x4b\xd9\x73\xe4\x95\xf2\x48\x3a\xfa\x72\xd8\xf7\xe5\x98\xa6\x38\x4c\x1e\x74\xad\xc1\x6f\x6b\xd4\xe2\xd0\x92\x0c\x32\xc1\x25\x19\x64\x82\x4b\x32\xc8\x04\x17\x65\x50\x0e\x1d\xcf\x22\xc9\x8b\x9d\x16\xb2\x98\x0e\x9b\xf7\x9f\x81\xa5\xd4\x66\x22\xa5\x29\xa7\x53\x0e\x97\x04\x3c\xa0\x2b\xb0\x9a\x55\x39\x5c\xd2\xae\xd3\x96\xf5\x9b\xe5\x25\x72\x5e\x1b\x59\xf9\x9a\x42\xe1\x18\x26\x26\x1b\x48\xbc\x33\xa6\xda\x48\x92\x30\x55\x89\x2d\xa4\x72\x74\x33\x08\x35\x16\xf1\xdb\x4c\xd3\xa2\x94\x6b\xb7\x0a\x39\x7c\x5d\x3d\x64\xb4\x3f\x2a\x66\x51\x0c\x22\xc5\x86\x7f\xe8\x15\xb2\xa8\x2e\x76\xa4\xce\xab\x68\x24\xb3\xa8\x5e\x76\xa4\x50\x50\x64\xc8\xe8\x32\x91\xcb\x93\x83\x26\x65\x1d\x9d\x0e\x2c\x43\x3e\x1b\xdb\x07\xc8\x3a\x38\xa2\x9f\x22\x5c\x2d\xff\xbe\x21\xfa\x8c\x3c\x4a\x05\xf0\x0d\x29\x68\xe4\x51\x6a\x80\x6f\x08\x44\x23\x8f\x54\x05\x9a\x25\x21\x27\xb2\xc0\x26\x74\xc9\x12\xff\x75\x99\x46\x19\x68\x42\x77\x9f\x7e\xc9\x0c\x86\x9a\x48\xd7\x13\x8f\xa9\x5a\x14\x0a\xf7\x51\x98\x28\xbe\x68\x52\xfd\x88\xae\x9c\x1c\x06\x8b\x45\x94\x18\x6b\x15\x5b\xcd\x0e\x34\xa0\xbf\x15\x6a\xcc\x32\xfa\x69\xe9\x50\x63\x92\xed\xb3\x79\xa8\x41\x4d\x31\x2a\xd6\x65\x0a\xcc\xbe\x3d\x1b\x8b\x05\x9b\x48\x62\x60\x72\xb0\xff\x0a\x3c\x5f\xba\xd8\x44\x13\x83\x96\xc3\xf3\x15\x8c\x4d\x34\x31\x60\x39\x5c\x5b\xc8\xbc\x7c\x92\x45\x73\x4d\xc8\x73\xe1\xd1\x51\xac\x49\x81\xb0\x09\x98\x4e\x1e\x74\xc5\xa1\xc5\x68\xd9\x56\x88\x2b\xb0\xff\x0a\x5c\x92\xfc\x50\x2c\x84\xa2\x63\x0a\x2e\x89\xce\xd6\xc8\x7d\xd5\x31\x05\x97\x64\xdf\x47\xd6\xc1\xa1\xec\xd7\x34\xc2\x70\x8f\x23\x69\x1a\x31\x8a\xb5\x98\x78\xd1\x81\x3a\x2f\x50\x2e\x6b\x1f\xea\x50\x9d\x17\x28\xe2\x6d\xa3\xac\xce\x0b\x34\x47\xcb\x28\xab\xf3\x42\x93\x22\x4d\xd5\xb7\x69\x4c\x55\x31\xc3\x63\xc0\x66\x28\x73\x2c\x50\x66\x99\xa6\x18\x32\xa2\x09\x2e\x21\x0d\x05\xde\x0f\x61\x94\x64\xf7\x29\x4e\xa5\x81\xe2\x31\x45\x4b\x6a\x5b\x0f\xb3\x34\x23\x7a\xed\x4c\x11\xcb\x3d\x16\x74\xbd\x37\x4c\x17\xa1\x41\xd3\x74\x7f\x13\xc0\x50\xdd\xa8\x6e\x20\x01\xa6\x15\xd3\xca\x01\xa6\xf9\x72\x90\x03\x34\xb5\xa7\xc9\xe6\x16\xb5\xf2\x5a\x4d\x1d\x6a\xac\x81\x54\x22\xb3\xe9\x57\xad\xee\x50\x69\xcc\xc9\x52\xa9\xea\xb0\x9e\x1c\xe9\x60\x73\x7e\xb2\xe9\x4f\xc1\x39\xfb\x1f\xb1\xb9\xc7\xbf\x04\xc4\xd3\x35\x3c\x99\x28\x39\x1a\x59\xf4\x7f\x99\x28\xb2\xf2\xd1\x16\x23\xce\x01\x9e\x31\xda\x4a\x28\x33\xa0\x9f\x73\x3f\xff\x48\x80\xe8\x6b\xcb\x47\x16\xff\x48\x80\xe8\x25\x5d\xf4\xf8\x47\x02\x44\xff\xa8\x86\xcc\x3f\x12\xd0\x11\x80\x43\x8d\x53\x19\x60\x5f\xc8\x67\x1f\x59\xfc\x23\x01\x07\x02\xd0\xe2\x06\x7a\x5b\xb5\x71\x28\x00\xfb\xc8\xe2\x1f\x09\x38\x12\x80\x43\x6d\x26\x69\x8b\x0d\xb5\xc0\x91\x25\x7b\xdd\x14\x14\xe1\x46\xb9\x30\xcc\x19\x40\x90\x83\x69\x0a\xec\x23\x01\xb2\x9e\x7d\x64\xf1\x8f\x04\x08\x72\x70\xcb\x5f\x58\xff\x0c\x20\xcd\x41\x9f\x2f\xa6\xfb\xaa\x0d\x41\x0e\xee\x45\x10\x9e\x04\x06\x10\xe4\xd8\xdf\x47\x16\xff\x48\xc0\x41\x6e\x59\xf2\x8f\x04\x08\x72\x1c\xf8\xc8\xe2\x1f\x09\x10\xe4\x38\x68\x23\x8b\x7f\x04\x40\x60\x7b\x88\xac\x43\xae\x66\xb3\x44\x41\x8e\x03\xba\x4e\xb2\x8f\x04\x08\x72\xf0\xc5\x53\x2c\xa0\x0c\xd0\xcc\xd7\x5e\xfe\x91\x00\xd9\x00\x35\x19\xd9\x47\x02\xe4\x6a\x4d\x17\x4b\xf6\x91\x00\x41\x0e\xaa\x88\xf3\x8f\x04\x08\x72\x1c\x35\x91\xc5\x3f\x12\x20\xc8\x71\xd4\x46\x16\xff\x48\x80\x20\xc7\xd1\x01\xb2\xf8\x47\x02\x04\x39\x8e\x8e\x90\xc5\x3f\x02\xa0\x74\x22\xbe\x62\xfa\x72\x86\xb5\x3d\x09\x68\x0a\x75\xd6\xf7\x64\xf3\x6d\xbf\x7a\x41\x62\x30\xa9\xdb\x50\x7b\x40\x7e\x49\x58\x4b\x57\xcf\xc5\x97\x84\x29\xd5\xbd\xc9\x6c\x04\x69\x28\x30\x58\x47\xc2\x3a\xc2\x1f\xe3\xfb\xaa\xbd\x7d\x09\x3b\x10\xc2\xce\xf7\x55\x7b\x07\x52\x87\x62\x9a\xa9\x27\xed\x56\x06\x3b\x94\xb0\x26\xd3\x5a\xa5\xea\xca\x60\x47\x12\xd6\x91\x9e\xbe\xa6\x6c\x4f\xa2\xc2\xbc\x2f\xf4\x23\xd3\x25\xbd\xa8\xdd\x20\xbf\x24\x4c\xd2\x8b\xad\xc0\xe2\x4b\xc2\x24\xbd\x98\x0a\x2d\xbe\x24\x4c\xd2\xab\xc5\x14\xd6\x8e\xf4\x83\x31\x98\x92\xa5\x6c\xc5\xe5\x5f\x12\x26\x91\x6c\x7b\xc2\xce\xf1\xdb\xaa\xbd\x7d\x5d\x21\x17\x5f\x12\x26\xe9\xd5\x66\xf6\x51\x47\xfa\xcd\x18\xec\x50\xd3\x05\xe5\x97\x84\x49\x7a\x31\x0b\x40\x7c\x09\x98\x6c\x8e\x2d\x08\xc2\x80\x66\xe9\x9e\x66\xf2\xc8\x2f\x09\x53\x3a\x34\xd5\xf0\xc4\x97\x84\x49\x7a\x31\xcf\x9b\xf8\x92\x30\x65\x22\x52\xd5\x5d\x7c\x49\x98\x52\x52\x68\x53\xe2\x4b\xc2\x24\xbd\xa8\xcc\x91\x5f\x12\x26\x3b\xb0\xcf\xd6\x4b\xfe\x25\x61\x92\x5e\x54\xf2\xc8\x2f\x09\x93\xf4\x62\x3e\x01\xf1\x25\x61\x92\x5e\x07\xfb\x6c\x03\x41\xee\x22\x50\x98\xac\x52\x6a\xbf\xb2\xad\x03\x49\x2f\x2a\x85\xe4\x97\x84\x49\x7a\x1d\x52\x14\xc4\x97\x84\x29\xd3\xa9\x2d\x7d\xa9\x4a\x22\x1d\x48\x7a\x1d\x52\x14\xc4\x97\x84\x49\x7a\x71\xf7\x00\xff\x92\x30\x49\x2f\xaa\x25\xcb\x2f\x09\x93\xf4\xa2\x72\x49\x7e\x49\x98\xec\xdc\xd1\x3e\xf3\xc9\x4b\xc7\x3c\x83\x49\x7a\x1d\x31\xff\x1c\xff\x92\xb0\x23\xa9\x56\xf8\x42\x05\x6a\x7a\xb2\xbd\x43\x09\xe2\xb6\x84\x9a\xdf\x87\x72\xc9\xf7\x98\x26\xde\x96\x36\x35\x83\x29\xa7\x04\xf3\xae\xf2\x2f\x09\x93\x1a\x8e\x77\xc4\xcc\x21\x69\x13\x31\x98\x54\x6f\xa8\x78\x92\x5f\x12\xd6\x96\x30\xda\x94\xf8\x92\xb0\x8e\x84\xd1\xa6\xc4\x97\x84\xed\x4b\x18\xdf\x92\x92\xfb\x52\x0c\x76\x20\xd5\x4c\xe6\x2a\xe6\x5f\x12\x26\x3b\xce\x36\x5c\xc4\x97\x84\x49\x7a\x31\x27\xaf\xf8\x12\x30\x09\xa2\xb6\x36\xfb\xc8\x74\x49\x2f\xe6\x91\x16\x5f\x12\x26\xe9\xc5\x1c\x87\xe2\x4b\xc2\x94\x46\xa8\x36\x37\x94\x8c\x3a\x92\xf4\x6a\x1d\x30\x67\xa6\xf4\x68\x32\x98\xa4\x17\xdf\xd4\x53\x0a\x38\x83\x49\x7a\x31\x17\xb9\xf8\x92\x30\x49\xaf\x7c\x57\x48\xc9\xa8\x23\x49\x2f\x6a\xee\xca\x2f\x09\x93\xf4\x62\xba\xbe\xf8\x92\x30\x49\x14\xe6\xb2\x17\x5f\x0c\xa6\xbb\xd7\x94\xb7\x5c\x77\x5a\x94\xd2\x0b\xee\x4d\x95\x5e\xf0\x6e\xaa\xf4\x82\x73\x53\xa5\x3f\x43\x1c\xa7\x4f\x9a\x0c\xe1\x26\x12\xef\x0e\x6c\xd4\x97\xa1\x4a\x5f\x86\x2a\x7d\x19\x36\xe9\xcb\xb0\x4d\x5f\x86\x4d\xfa\x32\x6c\xd2\x97\x61\x93\xbe\x0c\x9b\xf4\x65\xd8\xa4\x2f\xc3\x26\x7d\x19\x36\xe9\xcb\xb0\x49\x5f\x86\x4d\xfa\x32\x54\xe9\xcb\xb0\x49\x5f\x86\x4d\xfa\x32\x6c\xd2\x97\x61\x93\xbe\x0c\x9b\xf4\x65\xd8\xa4\x2f\xc3\x26\x7d\x19\x36\xe9\xcb\xb0\x49\x5f\x86\x4d\xfa\x32\x54\xe9\xcb\xb0\x49\x5f\x86\x4d\xfa\x32\x6c\xd2\x97\x61\x93\xbe\x0c\x9b\xf4\x65\xd8\xa4\x2f\xc3\x26\x7d\x19\x36\xe9\xcb\xb0\x49\x5f\x86\x4d\xfa\x32\x6c\xd0\x97\x61\x8b\xbe\x0c\x5b\xf4\x65\xd8\xa2\x2f\xc3\x16\x7d\x19\xb6\xe8\xcb\xb0\x45\x5f\x86\x2d\xfa\x32\x6c\xd1\x97\x61\x8b\xbe\x0c\x5b\xf4\x65\xd8\xa0\x2f\xc3\x16\x7d\x19\xb6\xe8\xcb\xb0\x45\x5f\x86\x2d\xfa\x32\x6c\xd1\x97\x61\x8b\xbe\x0c\x5b\xf4\x65\xd8\xa2\x2f\xc3\x16\x7d\x19\xb6\xe8\xcb\xb0\x41\x5f\x86\x2d\xfa\x32\x6c\xd1\x97\x61\x8b\xbe\x0c\x5b\xf4\x65\xd8\xa2\x2f\xc3\x16\x7d\x19\xb6\xe8\xcb\xb0\x45\x5f\x86\x2d\xfa\x32\x6c\xd1\x97\x61\x83\xbe\x0c\x5b\xf4\x65\xd8\xa2\x2f\xc3\x16\x7d\x19\xb6\xe8\xcb\xb0\x45\x5f\x86\x2d\xfa\x32\x6c\xd1\x97\x61\x8b\xbe\x0c\x5b\xf4\x65\xd8\xa2\x2f\xc3\x06\x7d\x19\xb6\xe8\xcb\xb0\x45\x5f\x86\x2d\xfa\x32\x6c\xd1\x97\x61\x8b\xbe\x0c\x5b\xf4\x65\xd8\xa2\x2f\xc3\x16\x7d\x19\xb6\xe8\xcb\xb0\x45\x5f\x86\x0d\xfa\x32\x6c\xd1\x97\x61\x8b\xbe\x0c\x5b\xf4\x65\xd8\xa2\x2f\xc3\x16\x7d\x19\xb6\xe8\xcb\xb0\x45\x5f\x86\x2d\xfa\x32\x6c\xd1\x97\x61\xa3\xbe\x3c\x4b\x13\x78\x9e\xc0\x93\x8e\x29\x8f\x47\xf0\x34\x68\x39\x8a\xcc\x00\x97\x03\xc9\xd8\x38\x49\x70\x29\x96\x8c\x6f\x16\x4a\x70\x45\x38\x99\xcf\xc0\xa4\xb0\x2d\xc5\x97\xe1\x43\x2f\x07\x9a\x01\x1f\x5e\x01\x5a\x8a\xf9\xf0\xf7\x0f\x72\xa8\x11\xf6\xb1\xcf\xb6\x59\x72\xa0\xee\xf5\xa6\x02\x98\x05\xeb\x45\xc9\xc4\xd8\x45\x63\x25\xa5\xce\xa2\x80\x06\x4e\xac\x55\x6f\x5f\x87\xeb\x58\x29\x35\x45\x41\x75\xac\x0e\x65\x14\x93\x82\x16\xd1\x62\xcb\x42\xf4\x98\xe2\xe7\x92\xf2\xcf\x06\x88\x81\xfc\x2d\x30\x33\xc6\x44\x8d\x1c\x83\x99\x01\x26\x6a\xd8\x18\xcc\x8c\x2e\x51\x63\xa6\xc5\x28\x70\x5e\x69\xa9\x85\x99\x81\xcc\x88\x97\x7d\xb9\x30\x33\x98\x89\x8a\x27\x95\x04\x06\x33\x43\x38\x0f\xa5\x72\xc4\x60\x26\x2a\x54\x0d\xa6\x44\x89\xc3\x47\x48\x26\x80\x65\xa5\x12\x19\x3e\x23\x24\xf4\x3e\x5e\x66\x33\x03\x27\x4f\x4e\x36\x23\x8b\xff\x86\x3c\x66\x24\x6a\x5b\x0a\x17\x23\x8f\xd9\x8f\x16\x0b\x16\x2b\xe6\x29\xc7\xa2\xb2\xfd\x9a\x38\x7c\x4a\xf4\xcd\x79\xd6\x42\x47\x84\x2c\xc4\x30\x4f\x93\xf1\x2c\x9a\x4e\xd5\xf6\x7e\xbe\x49\xc6\xf4\x56\x3d\x87\xff\x7a\x16\x73\x30\x5a\x72\xf5\xd3\xb3\x98\xec\xc1\x14\x91\x62\x2d\x66\x57\x0e\xa4\xbe\x1b\x47\x0f\x33\x2d\x28\x8f\x9b\xca\x6c\x93\x92\xa9\x8c\x0a\xac\x47\x50\xf0\xf0\x5f\x66\xd1\x2a\xb8\x1e\x41\xc1\x63\x7f\x99\x7a\xa8\xe0\x7a\x04\x05\x0b\xfc\x15\xfd\x94\x70\x3d\x82\x42\x4a\x1f\x09\xd7\x23\xcd\x98\x76\xc9\x76\x5a\x9b\xaa\xfe\x3c\x5a\x89\x8f\x75\x6e\x70\x2b\xb0\xff\x0a\xdc\x58\x85\xf3\x88\x02\x05\x57\x9a\x8b\x19\x5e\xa5\xe0\x6d\x5d\xbb\xcf\x43\x09\x18\xbc\xb8\x73\xc8\x99\xd2\x97\x5a\xb9\x99\xc7\x0c\xb3\xde\xaf\xae\xc8\x64\x6f\xaf\xba\x26\x93\xbf\x3d\x63\xc0\xab\x77\x14\xe9\x2a\xcc\x14\x43\x33\x8f\xee\x4a\xd1\x96\x33\x3f\x6f\x52\x6d\x40\xb2\x60\x52\xf9\x95\x83\xb5\x30\x16\xb9\x2a\x71\x09\x2f\xe1\xdb\x8a\x17\x17\x1e\x16\xad\xc1\xa4\x9f\x02\x1b\x62\xfe\x80\xe9\x9c\x1d\x1d\x6e\x2c\x3e\xfb\x4d\xa9\x1b\x2b\xb8\x19\x61\xc6\xc3\x07\x75\xb8\x4e\x25\x16\xb6\xea\x29\xec\x8c\x30\x1e\xd6\xfe\xbe\x0a\xe3\xd1\x32\xf8\xaf\xe6\x30\x70\x64\x51\x6e\x7e\xdb\xcc\x61\x60\x49\xc7\xea\xe8\xd0\xcc\xa0\xa3\x49\x2d\xfe\x7d\x35\x96\x66\x30\x51\xab\x29\x22\x30\x78\x58\x3b\xcf\xa1\x47\x78\xf8\x3c\xc8\x7a\x5f\x89\x68\x2d\x87\xaf\xd9\x12\x4d\xe6\xf6\xca\x67\x92\x19\xe7\xe1\xef\xb7\xe5\x68\xe6\x93\xc9\x0c\xf5\x60\x11\x3c\x6c\x44\xb5\xf9\x64\x46\x7b\x30\x75\xa0\xd9\x32\x26\x42\x21\xda\xc8\x6f\x49\x1b\x5e\xc7\xc5\x0c\x38\xf2\x7d\x15\x7b\xd9\x69\x15\xf2\xc0\xd6\x3c\x04\x20\xd6\x05\xa4\xb4\x25\x9a\xda\x08\xca\x3c\x46\xb4\x5e\xd3\x14\x33\x2a\x93\x11\xad\xe7\x7b\x26\x79\x64\x26\x3d\x5a\x8f\x99\x58\x3a\x81\x64\x26\x23\x5c\xaf\x40\x23\x73\xd6\x2a\x75\xa3\xd9\x36\x33\x94\x15\x92\x62\x8e\xb2\x5a\xe2\x15\x1a\x29\x2b\x27\x87\x9e\x99\xa3\xac\xa2\x08\xe2\xcd\xf5\x38\xc8\x8e\x14\xae\x82\xe9\x12\x48\x74\xa9\x23\x94\x18\xd7\x46\x46\x7c\x25\xf7\x1f\x4b\x52\x0b\x90\xbf\x05\xa6\x77\x48\x51\x5f\xc0\xf4\xae\xa8\xc5\x58\xc0\xf4\x4e\xa8\x78\xce\x79\x88\x53\x39\xff\x19\x6f\xb4\xa9\x2a\xb9\xaf\x20\x3a\x22\x9d\xa6\xb4\xa2\x39\xcc\x08\xcf\x39\x94\x2a\x31\x87\xe9\x88\xb0\x49\xc2\xe4\x25\x87\x19\xa1\x39\x52\x21\x9e\xc3\x24\x5a\xce\x4b\xa7\x64\x0a\x47\x58\x78\xae\xd2\xc9\x09\xde\x4d\x06\x33\xe2\x29\xa9\x8d\x7e\xd8\x91\xe2\x58\xcf\xa0\x2f\xa8\xbe\xa7\xa6\x9e\x9e\x45\x5f\x53\x8f\x3a\x8a\xd0\x5a\x0e\x7d\x55\xcd\x85\x80\x9e\x43\x5f\x57\x3b\x1d\x45\x74\x96\x63\xb1\xc4\x8b\x58\xf6\xb3\x7d\x20\x45\x80\x5f\xcc\xa1\x24\x96\x2f\xbc\x61\x3a\xaa\x3c\x8b\x72\xf2\x30\xd6\xf4\x4d\x5c\x79\x16\xe5\x1b\x3b\x10\xe1\x67\x3a\xb2\x3c\x8b\x94\x58\x2d\xee\x1b\xd6\x71\x35\x05\x30\x5b\x00\x98\x4f\x85\xf9\xf3\x44\x96\x82\x50\x63\xf3\xd9\x6b\x9b\xb8\x64\x0b\x1c\x25\x0f\xc5\x8d\x15\x1e\x31\xa7\x32\x15\x82\x13\x0f\x9a\xca\xb3\x90\xe7\xe1\xf1\x89\x79\x74\xea\x11\xf3\x04\x48\x45\x7f\x1e\x4d\x12\x53\x31\xe4\xc2\x4c\x2a\x11\xf3\x28\x21\x63\x0c\xe1\x5c\x37\x8e\x85\x0a\xcb\xc0\x19\x79\xc6\x69\x56\x3a\x65\xd4\x64\x7e\x4d\x05\x2e\x1d\x34\x2a\xc0\x4b\x67\x8d\xb8\xd2\xa1\xe0\xe5\xe3\x46\xcc\x0f\xa5\xe0\xe5\x13\x47\xcc\xff\x30\x4f\xc7\xe3\x30\x8b\x92\x62\xeb\xbc\x74\x12\x3e\x86\x7f\x49\x4b\x31\x6e\x4d\xa5\x36\x68\x19\xfc\x57\x73\x98\xd1\x67\x07\xd2\x45\xa8\xe5\x30\xc3\xd0\x94\xea\xa8\xe5\x30\xbb\xe1\x0b\xff\x7b\x12\x3e\x3e\xeb\x93\x98\x2b\xc4\x34\xb5\x14\xd7\xcf\x20\x69\x3c\x89\xc3\xb1\xea\x53\x4b\xba\x33\x98\x44\x65\x21\xe0\x13\x1c\xde\x4b\xb1\xc1\x0e\xfd\x34\xc5\xb9\x22\x05\x55\x56\x80\x8c\x46\xdf\x6f\xea\x60\x65\x04\x48\x2d\xba\x73\xa8\x83\x75\x1b\x20\x97\xf3\x0a\x5c\x0a\x2f\x66\xb6\x56\x39\xf0\x7c\x5f\xec\xff\x55\x04\x9d\x9b\x20\x43\xa5\xa2\x8d\xe6\x20\x83\xe8\xad\x96\x0e\x32\x94\x3d\x4f\x87\xe4\xde\x06\xd6\xf5\xa3\x02\xcc\xdf\x06\xd4\x71\xd9\x6f\x17\x80\xc6\x31\xaf\x4e\x01\x68\x9c\xf4\x3a\x90\xc0\x5c\x48\xf3\x48\x44\x2e\xfa\xda\x0a\x66\x90\xa5\xe5\xcb\x99\x69\x4a\x66\x46\x18\xe6\xe7\x63\xb3\xde\x10\xca\x4d\xb5\xd9\xc2\x9d\x9f\xa6\x3c\xa6\xc8\x70\x19\x47\x97\xac\x45\x18\x43\xa5\x95\xc3\x35\x4d\x4f\x66\xd1\x0c\x01\xee\xf5\x62\x47\xcf\x9a\x3a\xd8\xd7\x79\x84\x21\xcf\x04\x9b\x82\x37\xab\x0d\x09\x05\x6f\xe9\x26\x39\xd7\x94\x0d\xb8\xdc\x14\x93\x61\xa9\x87\x12\x5a\x10\x9a\xfe\x41\xc7\xb0\x04\x8d\x2c\xca\xff\x7d\x60\x58\x93\x46\x1e\x35\x17\xda\x9b\xeb\x51\x13\xc2\xb4\x2a\x8d\x3c\x6d\x6d\x21\xd7\x2c\x4b\x9a\xa7\x20\xc3\x99\x37\x97\x6f\x65\xb5\x0f\x8a\x59\x4c\x7e\xf0\xe4\xd6\x81\x91\xc7\x64\x0b\x36\x36\xa5\xa6\x4c\xee\x68\xeb\x1c\xa0\xf2\x14\x99\x84\x19\x6b\x8b\x70\x11\x3e\x87\x4f\xb3\x68\x61\x58\xb8\x6c\xd9\x61\x70\x08\xc7\xb3\xc5\x72\x3a\xd5\xc1\x7c\x4b\xa2\xa3\x83\xfd\x57\xe0\xa6\xc0\x55\xfb\x20\x0a\x6e\x8a\xdb\x8e\xb4\xf5\x14\xdc\x0c\xfe\x3d\x92\xc6\xde\x02\xf0\xb2\x28\x33\xd8\x86\x4e\xd1\x3c\xe5\xbe\x0d\x09\x31\x4f\x40\xf9\xd2\xc9\x54\x36\x4a\x8f\xe4\x46\x49\xd9\x1e\xed\xc8\x3d\xa7\x92\x29\xca\xb0\x63\x90\x78\x29\x97\x62\x36\x6e\xfb\x2c\xa4\xda\x17\x10\x13\x89\x03\xc5\xae\xf1\x72\x6e\x1e\xbf\x52\xca\x06\x05\x99\xb1\xc8\x4a\x4b\xa4\x20\x33\x0e\xb9\xa9\x78\x32\x7d\x9a\x18\x27\xf1\xb8\x8d\xd8\x96\x8b\x8c\xa1\xb0\x51\x14\x99\x6b\xbf\x9d\x83\xd4\xe4\x17\xd1\xec\x02\x4f\x43\x45\xa3\xe4\x68\xe7\x88\x1a\xba\x59\x53\x44\xb2\x0b\x4c\x75\xa5\x8c\x69\xb1\xca\x9d\x62\x4a\x72\x21\xe4\x0b\xb3\x24\x4f\x2d\x18\x0c\x22\xb5\x60\x2a\x88\xd4\x82\x91\xc0\x52\xd3\xec\x59\x3f\x1a\x2c\x4e\xf1\x48\x87\xab\x02\x97\x42\xc7\xb9\x97\x43\xc1\x4b\xb1\xe3\xdc\xcc\x52\xf0\x52\xf0\x38\x3f\xc1\xa3\xe0\xa5\xe8\x71\xbe\x8b\x8e\xd3\xe7\x50\x33\x70\xf7\x95\xd8\x6f\x1a\x50\x3f\x57\x26\xf9\xe9\xd6\x8e\x01\x16\xc8\xed\x1f\x08\xe7\x3f\x1f\x1e\x05\x96\x31\x1b\x87\xc2\x14\x30\x5b\x96\x71\x2c\x47\x7c\x6d\xe4\x63\x94\x85\x93\x49\x0c\x3a\xe1\x8c\xe3\xa7\xa6\xe3\x45\x79\x05\xd9\x12\x58\xe1\x73\x69\x7b\xb2\xbf\x15\xee\x16\x2a\x0f\x99\x11\x55\xe1\x68\xa1\xf2\xf4\x30\xaf\xd4\x90\x6d\xfb\xc8\xea\x1c\x30\x50\x32\xd1\x87\xb8\x49\x19\x94\xb9\x3f\x98\x25\x68\x2a\xff\xed\x7d\xb9\xf4\x1c\x68\x30\x3f\x5f\x97\xc4\xb2\x77\xa4\x41\x05\xb6\x07\xea\x7c\x1f\xdb\x0b\x2f\x1c\xdd\xda\x3f\x50\x4b\x9e\x0e\x6d\x6f\x68\x36\x9b\x41\xac\x9f\xdf\x15\xda\xe0\xa1\x06\xf5\xb7\x83\x4d\x37\xe4\x91\x74\x89\x48\xb0\xe9\x80\x3c\x90\x7e\x6b\x09\x2e\xed\x15\x70\x27\x66\x16\x41\x92\x84\x9a\x90\xa0\x86\x21\xf3\xf0\x73\x48\x69\x21\x63\xeb\x18\x87\x95\x16\x30\xe6\x01\xe3\xb0\xd2\xc2\xc5\x47\x8e\xc1\x8a\x0b\x16\xef\xe5\x06\x8f\x18\xd3\x88\x0b\xce\x30\xcd\x5f\xa6\x41\xa5\xc8\x62\x72\x87\xad\x0b\x7a\xc5\xea\x2c\xf8\xa1\x08\x02\xe0\x93\xc2\xf4\x7e\x31\x67\xa6\xaf\x24\x6c\xd1\x46\xa4\x4d\x1e\x29\xd1\xac\xa0\x0a\x2d\xba\x16\xf8\xea\x28\x96\x82\x2b\xc4\x58\x98\x8d\x72\xd6\x2b\x78\x4b\xd3\xc4\x0f\x8f\x4a\xd5\x4b\xdc\x28\x81\x3d\x03\x35\xdd\xdf\xd6\x94\x53\x92\x29\x68\xa5\xf3\x7d\x47\x87\x86\xff\xb0\x74\xb6\xef\xb0\x63\x38\x0f\x4b\xe7\xfa\x98\xa9\x9e\x3b\x0d\x8a\x67\xfa\x38\x59\x73\x9f\x58\xc9\xd5\x57\x40\x2f\x29\xf8\xca\xd4\xf6\x14\x85\x94\x37\x69\x14\xa8\xb4\x39\xc3\x55\x69\x0a\x2a\x6d\xca\x70\x45\x9a\x82\xca\x9b\x31\x4c\x8b\xaa\xb6\xee\x3b\x32\xb6\x47\x03\xfb\xaf\xc0\x0b\x61\x94\xfc\x98\x9f\x06\x2f\x84\x53\xf2\x58\x2b\x0d\x5e\x08\xab\x64\xf1\x6f\x05\x4f\xe8\x81\x0a\x2e\x62\xcb\x50\xd1\x07\x7a\x74\x24\xe2\x3f\xc4\xf8\x16\xbc\x9f\xfc\xdd\x2f\xf9\x9c\x28\xf8\x3d\x99\x1d\xdc\x56\x4b\x79\xd1\xe3\xc9\x76\x91\x3c\xc5\x7b\x44\xed\xff\x88\x7d\x67\xb9\xd1\x49\xc2\xa4\x64\x1f\x1e\x88\x12\x25\xeb\x90\xe9\x89\x24\x4c\x4a\xb6\xe1\xbe\x00\x14\x2d\x43\xb6\x7c\x93\x59\x94\x91\x58\xbd\x9d\x61\x5f\x1e\x7e\x64\x6f\x84\x11\x40\xd3\x4d\xa0\xec\x05\x01\x35\xbd\x1c\x6a\xed\x14\x50\xd3\xc7\xa1\x1c\xc1\x02\x6a\xba\x06\x14\xb7\x93\x74\x1e\x92\x54\x6b\xf5\xe8\x48\x08\x4a\x0e\xf1\x37\x83\x8c\x2d\xf1\xa6\x10\xa1\x1c\xa4\xa3\x42\x07\x88\x49\x50\x0e\x32\x36\xc3\xdb\x42\x82\x16\x4c\xaa\x7d\x15\x39\xe2\x19\x50\x8d\x97\xf3\xd7\x7d\x14\xed\x28\xcf\x78\xd9\x47\xd1\x82\xf2\x8c\x57\x7d\x14\x6d\x27\xcf\x78\xd3\x87\x7e\x32\x37\x5f\xfe\x79\xbd\x45\x8b\x8a\x0a\x11\x66\xc3\x32\x21\x51\x69\x4c\x31\x07\x3d\x13\x07\x95\x76\x14\x8b\x18\x6b\x1b\x60\xc3\xda\x57\x41\x82\x95\xd6\x13\xc5\x9a\x45\x7a\x3e\xcd\x20\x94\x38\xb7\x73\x67\xd3\x91\x04\x99\xdb\x86\xbe\x8c\xac\x62\x30\x93\xbf\x58\xf4\x57\x5b\xc2\x4c\xee\xda\x97\x5d\x61\x30\x93\xb7\xf6\xa5\x94\x28\x9f\xfe\x54\x83\xc6\x40\xd9\x3c\xfd\x56\x7e\xf5\x10\x5b\xc1\xab\xf7\x24\x3c\x05\x29\x6d\x46\xe4\xa0\xd2\x2e\x44\x0e\x2a\x6d\x3f\xe4\xa0\xd2\xbe\x43\x0e\x32\x9c\x11\xba\x43\x6a\x8d\xa2\xc6\x94\xdf\xbc\x30\x6d\x8c\x31\x84\x04\xce\x92\xe5\xbc\xea\x9d\xb4\x09\x3c\x59\xe2\x5d\xd0\xfc\x65\xc9\x53\xf9\xc2\xd8\x3f\x86\xc6\x55\x85\xda\x2d\x24\xda\x3b\x65\xff\xbd\xc3\xde\xd3\xff\xa3\xfb\xc5\x71\x86\x7f\xfa\xe2\x8e\xea\xee\x17\x77\xef\x21\xd2\x5f\x07\x8e\x51\xca\x5e\xe6\x9b\x5f\x35\x31\x4c\x47\xfc\x2e\x10\xfb\x73\xf2\x2d\x49\x9f\x12\xeb\x31\xc4\x51\x78\x1f\x43\xd7\xb2\xeb\x69\x8f\xbf\x6e\x9b\x88\x3b\x6d\x30\x7f\x6d\xae\x81\x58\x43\xd6\x9f\xb9\x59\xb0\x11\x36\xc4\x23\x47\x5c\x77\x63\xb1\xcb\xc2\xcd\x46\x21\x1b\x87\x0b\xb0\x64\x76\xda\xb6\xba\x22\x3a\x5b\x97\xa9\x91\x57\x1c\xbc\x40\x32\x4e\x27\xf0\xf9\xe6\xa2\xab\x9e\x90\x7a\x3a\x4d\xe7\x8b\x34\x81\x84\x74\xcb\x49\x88\xb7\xfa\xe1\xee\xe3\x65\xb7\xfc\x16\xea\x17\xfb\xd8\xee\xda\xb5\x98\xf4\x6c\x64\xbf\xa3\x8f\x0f\xec\xb1\x46\x1f\xc3\xf9\xa2\x67\xa3\x1f\xec\x1f\xba\x76\xed\xaf\xcb\x94\x01\x7e\xa0\x80\xdf\xb5\x8e\x7a\xf6\xba\x57\x1e\x9e\xe1\xf1\xbb\xda\x17\xfb\xcb\x0f\xa3\xbd\x07\x54\x75\xeb\xe4\x10\x46\x6b\x7e\xb1\xf7\xb4\xf1\x00\xa4\x3f\x1e\xc3\x82\x5c\x86\xc9\xc3\x32\x7c\x00\xf3\xa2\xca\xea\x2c\x8d\xf1\x0c\xa7\x73\xb8\x5d\x2e\x16\x29\x26\x30\x71\xdc\x13\x9e\xd2\x88\xfc\xc3\xa4\xa2\x80\x03\x6e\x57\xbb\xb0\x45\xbb\x82\x06\x9c\x61\x12\x3e\x46\x0f\x21\x49\x71\x23\x16\xf9\xf3\xae\xec\xee\x3d\x20\xfb\xab\xed\x8e\xdc\x35\xbb\xe4\xe5\x6d\xf8\xe8\x77\xdc\x88\x4e\xf3\x6b\x81\x44\xc6\x5a\x4d\x43\x97\x57\xca\xde\x70\xfd\x4f\x4b\xc0\xcf\x81\x79\x35\xa6\xfe\x8e\xea\x13\xdb\x15\x6f\xc0\x57\xb7\x31\xb8\xf9\x4d\x46\x74\xea\xb1\x8b\x13\xf8\x75\x44\x35\xdb\x45\x51\xe0\xf5\xa2\xe3\xfc\xde\x57\x79\x85\x53\x1a\xb0\x0b\x5f\x45\xce\xc0\x76\x7b\x64\x38\x81\x22\xd3\x38\xe9\xd0\x1b\xb9\xa3\xa0\x12\xe2\x8f\xd4\x2b\xb8\x89\xa2\xcb\xe7\x9b\xcb\xaa\xe9\x9e\x43\x37\x8f\x9c\xb8\xa4\x48\xe4\xa3\x03\x06\x7a\xb5\xbf\x99\xc4\xa2\xde\xe2\x6f\x51\xad\x10\x56\x71\x38\x5f\x94\xde\x6b\x2e\x19\xfb\x98\x9c\x90\x2e\xbc\xc3\x27\x58\xa2\xf4\xb7\x45\x58\x7d\xf3\x4d\x2e\xd4\xd4\x0d\x3f\x0e\x41\xb6\x67\xe7\xac\xf3\x33\x13\xf5\x8b\x70\x0c\xa5\xf7\x91\x1f\x07\x9e\x78\x43\xb8\x6d\x8b\xeb\x0a\xd8\x35\x3a\x46\x29\x7e\xf7\x7c\xe3\x49\x25\xb0\xbb\x3e\xf3\x9f\x81\x6d\xa9\xff\x6c\xb7\x07\xef\x74\xa0\x64\x04\x57\x4f\xac\x07\xfa\x2f\xf5\xd2\x7f\xbd\x98\xba\x8b\x43\x4a\x6b\x76\xff\x52\xe5\x6b\xe6\xc9\x6a\xd5\x81\x16\xbb\xea\x80\xf5\xf7\x96\x84\xe3\x6f\x8e\xaf\x5e\x35\x5f\xb8\x8c\x8b\x04\xd5\xf3\x92\xdf\xb1\x66\x67\x8c\x9e\x76\xa0\x6e\x73\x3a\x89\xba\xc0\xde\x77\xde\x8b\x82\xe8\xc4\xa6\xd2\x33\xea\xda\x36\x32\x6e\xd1\xb2\xe3\xe8\x5e\x22\xd9\xb5\x08\xaf\xdd\x82\xef\x8b\x88\x6a\x28\x54\xe0\xee\xf9\xd0\xaa\xdb\x99\x5d\x8f\x5c\x55\x34\x4e\x1f\x9c\xd4\x45\x24\xe0\xaf\x1e\xc7\x74\xfa\x54\x30\x73\x99\xf1\x48\xad\xe6\x8c\x63\x08\xb1\xec\x07\x91\xb5\xb8\x08\xc4\x0d\x68\xf4\x17\xca\xef\x25\x5e\x4b\xb9\x59\xd9\xc3\x88\xae\x8a\x4e\xce\x33\x8c\x86\xe5\xdb\x03\xe8\x6c\x3f\x81\x7a\xb3\xdb\xdc\x7e\x83\x1c\xa9\xba\x3d\x6e\x9d\x5f\x33\xfc\xb2\x46\x69\x80\x7b\xe9\x31\x29\xdc\x2c\xbc\x8b\x47\x6c\x3d\xdc\x74\xad\x9c\xba\x75\x85\x63\x9a\xcd\x43\x4c\xce\xe3\x34\xc5\x83\xe8\x31\x9a\x14\xef\x70\x16\x57\xdc\xec\x11\x14\xf1\x77\xfb\x8f\x21\x8a\x1d\x9c\xd7\xb2\x8b\x8f\x7d\xd8\x6d\x9f\x44\x5d\x06\x9e\xd2\x9a\xc4\xf5\x03\xd3\x06\x0e\x93\x49\x3a\xbf\x48\x36\xdc\x51\xa6\x95\xe0\xf7\x06\xb0\xec\x8e\xfb\xa3\x43\x76\xa1\xee\xbb\x6e\x9d\xcd\xdd\x8f\x90\x65\xe1\x03\x7c\x0c\x93\xf0\x01\x70\xf9\xaa\x6a\xb9\x02\x64\x5f\xd9\xab\xfc\xab\xef\x8b\x29\x2f\x0f\x6b\x7e\x2b\x4e\xa1\x0a\x75\x35\x8e\x0d\x09\x95\xdc\x45\xf0\x32\xe1\xd7\x00\x30\x30\xbf\x70\x7a\xce\xf1\xcb\x82\x97\x75\x19\x5d\xed\xf6\xad\x70\x32\xf9\x28\xb3\x56\x5e\x45\x4d\xb5\x97\xfc\xf2\xc0\x21\x19\xf5\x70\x83\x21\x3d\x4b\xe3\x09\xe0\xec\xc4\x68\x6e\x48\x46\x01\x96\xbf\xb4\x77\xf7\xff\x9e\x2b\x5a\xc3\x3f\x7d\xc9\xbe\xfc\x9e\x6a\x59\xbf\x37\xb4\x2c\xed\xc2\x15\x8b\xb6\x61\xb4\x30\x8c\xcc\x5b\x04\x46\x8d\x71\x9a\x10\x48\xc8\xda\xed\x6e\x6e\x7c\x7b\xb7\xa7\x51\x32\xe9\x27\x93\xcb\x34\xac\xea\x7e\xe1\xa2\x70\xba\x7c\x9e\x50\x39\x24\x2e\x5b\xe8\x66\xf9\x33\x92\x97\x68\x9f\x24\x8e\xdb\x25\x4e\x8a\x32\x7e\x07\x53\x54\x1a\xc4\x71\x9a\x8c\x43\x5a\x24\x0d\x86\x23\x94\xd1\xaf\xa4\x74\xb1\x7f\xac\x61\xc4\x2f\xf4\x16\x44\xbc\x81\x29\x60\x48\xc6\x54\x07\x41\x91\x8b\x70\xe3\x3e\x4a\x26\xfc\xae\xee\x1d\xaf\xf0\xdb\x77\xdd\x75\xfe\xdb\xed\x25\x5c\x06\x6c\x24\x47\xbc\x89\x0e\x74\xf9\xe2\xbd\xa1\xe2\xe0\x9f\x3f\x5e\x7e\x20\x64\x71\x03\x7f\x5d\x42\x46\x7a\x51\x23\x4d\x68\x49\x48\x8c\x55\xb4\xe9\x79\x01\x25\x10\x09\xc9\x32\x3b\xe1\x9d\xd0\xd8\xcc\xf9\x8f\xb7\xd7\x57\x5c\x4d\x71\xa2\x06\x86\x6c\x91\x26\x19\xdc\xc1\x77\xe2\xba\x88\x38\xae\xdb\xc5\xb5\x1a\x76\x64\x05\x46\x47\x50\xd4\x48\x17\x90\x38\xf6\x4f\x67\x77\x36\x02\xfa\x3b\x83\x64\x52\xd9\xbb\x12\xdd\x5e\xb5\x06\xbe\xfc\xde\xf9\x32\xa9\xbb\x86\xb2\xa9\xad\xdf\xfc\xd6\xf5\xf5\x76\x4a\x96\x5b\x7d\x1d\xb1\x6d\xf5\x3d\x00\xa9\x1e\x10\x79\xdd\x8f\x65\x4c\x01\x57\xb0\x9d\x9a\x12\x30\x52\xf6\x83\xa1\xd6\x30\x8d\xb1\x56\x73\xa2\xa0\xa0\xf0\x0a\x4c\x1c\x70\x5d\xb4\x13\xb9\x85\xbb\x44\xf8\xaa\x28\x2d\x10\xd1\x8a\xb8\x4b\x44\x19\x48\xf8\x04\xba\x58\xbf\x9b\xaa\x74\x2d\x0f\x55\x35\x82\x21\xbb\xf5\xb1\x9a\xc5\x23\x44\x5c\xb7\x1b\x6d\x25\xf5\x02\xa7\x63\xc8\xb2\x0b\xff\x30\xe9\x13\x7e\x9f\xf2\x26\x21\x16\x40\xe3\xaf\x54\x25\xbe\x85\x18\xc6\x24\xc5\xfd\x38\x76\xec\x21\xed\xf2\xc8\x76\x11\xbf\x1b\x88\x18\x37\xec\x53\xb4\xaa\x1a\x70\xc8\x10\x8f\xb6\xb3\x40\x55\xb1\xca\x1b\x7b\xa8\xfe\xaf\xea\xb5\x29\x36\xb6\xb8\xde\xe5\x85\x2d\xc3\x81\x36\x53\x88\x2b\x96\x61\xec\x8a\xf5\xb9\x78\xbd\x4b\x98\xfc\x40\x2c\x96\x99\x0e\x47\x83\x84\x0f\x57\xe1\x1c\xea\xf6\xef\xe8\xaf\x68\x52\x67\x2a\x0e\x71\x11\x56\x0b\x36\xb3\x4c\x89\x9c\xe0\x18\xa5\x01\xed\x5c\x2f\x35\x4c\x85\x80\x99\x0a\x0c\x14\xa4\xb9\xb9\x30\x72\x91\x99\xef\xf7\x22\xdf\xdb\xd6\xb9\x06\x49\x3f\x2f\x16\x52\xa2\xaf\x9d\x02\x31\xb4\x86\xdc\xba\xfd\xd5\xae\x63\x71\xef\x56\xa6\x14\x59\x27\x75\x7b\xf6\x57\x3b\x08\xa2\x13\x68\x10\xf8\x4e\x4e\xf9\xa2\x10\x64\x5d\x60\xf7\x17\xa9\xca\x22\x2a\x92\xd9\x72\xf0\x09\x4b\x0e\x2b\xaf\xdb\x54\x24\xb0\xba\x33\x92\xe2\xf0\x01\x02\x40\xfa\xcf\xeb\x7b\x76\x4b\x3c\xfe\xca\x11\x48\x93\x5b\x9e\x7e\x3a\x0b\x93\x07\xf8\xaa\xcb\x28\x96\x21\xca\xfa\x63\x12\x3d\xc2\xd7\x60\xc7\xe7\x29\x21\xfd\x1d\x12\x70\x44\x0e\x82\xa9\x92\xbd\xe3\xf7\x94\xba\x6b\xef\xd9\x3d\xdc\x80\x64\x22\x48\xba\x67\xbb\xab\x95\x83\xeb\x01\x7d\x42\x82\x25\x61\x1a\x7d\x0f\x70\xfe\xeb\x06\xc6\x29\x9e\xf0\xcb\x82\x39\x6d\xd8\x7d\xbc\x12\x5f\x7e\x63\x30\x03\x8c\x67\x51\x3c\x39\x0f\x29\xff\xcb\xdb\x85\xf3\xf4\xcb\x28\x23\x2c\xad\x92\x4e\x1a\x77\x0f\xce\xce\xfb\x9f\x2f\xef\xbe\xfe\xb1\x7f\xf9\xf9\x2c\x30\x3d\x34\x8e\x2d\xa0\xd4\x62\xac\xa8\x85\xe3\x5a\x45\x74\xaa\x88\x4b\x8a\x4f\x60\x1a\x2e\x63\xf2\xc7\x30\x5e\x42\x40\x04\x8e\x4b\x8c\x21\x91\x69\x34\xc5\xc0\x83\x67\x4a\x65\x9f\x83\xe1\xa8\xba\x1b\x1c\x81\x2d\xbd\x79\x73\xcf\xdf\x56\x7d\x38\x99\xc8\x81\x28\xab\x88\x0a\x5d\x7e\x75\x13\xb7\x88\xde\x50\x29\x86\x79\xfa\x08\x95\xf5\x6a\xb6\x5e\x5e\xbb\xba\x57\xd1\xed\x91\x77\x81\x27\xd4\xc7\x1c\x2e\x2e\x0e\x24\xc8\x7f\x2b\x06\xc6\xa2\x94\xaf\x8f\xa5\x81\x0a\x2a\x86\xea\x64\xef\x4f\x0e\x37\x55\x56\xc9\x72\x7e\x0f\xd8\xfd\xfd\x1e\xbf\x05\x4d\xd8\x2d\x25\x1e\x70\x4f\x4a\x49\x5d\x9b\xdf\xa9\x9d\x5b\x3b\xa5\x2c\x27\x9a\xf0\x64\x8f\xbc\xd1\x68\xfa\xec\x94\x5b\x10\x8a\xa4\xd1\x44\xa9\x3b\xaf\xcd\x8c\x09\xc8\x29\x5e\xb8\x9a\x78\xc7\x94\x08\xe5\x7b\x84\xaf\x52\x62\xc9\xb2\x13\xdb\xed\x6d\x90\x20\x42\x14\x15\x18\xc0\xa9\x14\x53\x1b\x86\x52\x63\xcd\x6a\x5c\x5f\x43\xb5\x2f\x2e\x31\xdf\x86\xae\x67\xa2\xab\x4d\x82\xdf\x88\x2b\x6d\x52\xc8\xdb\x4d\xf7\x0f\xba\x2f\x5e\x10\xec\xee\xe2\x5a\x0d\x6a\x35\xba\xa4\x88\x4b\xff\x50\x14\x5c\x33\x56\x69\x7c\x83\x67\xa1\x51\xeb\x62\xd3\xdd\x64\x9c\x69\xe2\xb6\x0e\xba\x0e\x2a\xfa\xcb\xc4\x77\xad\xa6\xdb\xfc\x76\xde\x87\xcc\xa2\x38\xb3\x15\x37\xaf\xc7\x35\xe9\xf2\x00\xe4\x82\xc0\x9c\x2a\x3b\xaa\xfd\x48\xba\xd5\xb4\x62\x52\x2f\x51\x37\x39\x32\x87\xb2\x2b\x6e\x40\x8f\x86\xd9\x08\x85\x41\x26\x57\xcc\xd4\x45\x71\x10\x2a\xc5\x50\x13\xee\xb5\x5a\x61\x1e\x24\xee\x4e\x50\x35\x35\x74\xfa\x0c\xc3\x91\x31\x09\x44\xef\xb7\x65\x09\x12\x14\xd7\x6a\x0e\xae\xd7\x45\x7f\x9f\x93\xf1\xa9\x44\xc3\x09\xa9\x66\xb7\xf6\x82\x80\x0f\x95\xe6\xb4\x01\x43\xd5\x7f\x95\x29\x26\x30\x8d\x12\xc8\x73\x54\xaa\xc9\x1a\x21\x15\xba\x30\xea\xa5\x27\x82\x38\x74\xf1\x1e\xf0\x59\xcf\x56\xa3\x6e\x75\x01\x66\xfd\x6c\x16\x8d\xac\x28\xc2\xb5\x5a\x6a\x30\x3b\xfe\xd5\x7d\xd8\xa4\xbe\x7a\x3d\x92\xdf\x5d\x49\xa4\x7e\x5a\x2c\xed\x50\xd3\x79\xe8\x8d\x10\xfb\xeb\x8b\xbf\xcd\xd1\x1b\xd1\x60\x63\x84\x21\xa9\x5a\x9f\xcb\x4d\x21\xa9\x56\xa4\x89\x1a\xdc\x92\x32\x84\xa8\x15\x51\xa5\x7c\x50\x9a\x92\x92\xfa\x41\x53\x5f\xd7\x40\x34\x12\x17\x6d\x3a\x6a\x13\xd5\x6a\x6f\xbb\xbc\xfd\x42\xdc\xd8\xbe\x08\x71\x38\xef\x5a\x5c\x6d\xca\xb8\x06\x0e\x62\x91\x2c\xea\x52\x72\xa5\x46\xc4\x2d\x2a\xd1\xec\x36\x7e\xac\xe6\x9d\x21\x63\xca\x8d\x4b\x0b\x6a\xa1\xfa\xc9\xbc\x89\x55\xb3\x0b\x8f\x4c\x09\xca\xec\x8f\xd7\x68\x94\xa4\x24\x9a\x3e\xf7\xe3\x58\x17\xef\x12\x65\xa8\xc6\x92\x2b\x62\xac\xa0\x18\xc8\x8d\x3a\x49\xb1\x21\x91\x7f\x93\x2e\x52\x9c\x7e\x6c\x4d\x7c\x2b\x51\x20\xdf\x99\xc0\x01\x61\xaa\xbf\xdc\x8f\xa8\x1e\x23\x6d\x8f\xa2\x32\xc3\x30\x1a\x31\xbb\x9e\x55\x2b\x2a\xd2\xd4\x21\xbd\x78\x9e\x4c\x0b\x61\xc4\x35\xd4\x57\x89\xc2\x35\x62\x36\x2d\xaa\xa5\x12\xd2\xec\x18\x60\x1c\x87\x19\x07\xa5\x01\x46\xbb\xfe\x4e\x90\x2b\x6d\x69\x05\xf3\x0c\x96\x54\x63\x0b\x09\x58\x6c\xee\x30\x22\x71\xf3\x2e\x75\xd9\x1d\xa2\x16\xed\x59\x6f\x27\x5d\xad\x8a\x95\xf5\x5c\xee\x4f\x57\x4e\x50\xc7\x47\xfb\x9d\x4e\xab\x53\xb8\x54\x97\xe7\x62\xb7\xf4\xa6\xa8\xed\x22\xc2\x6d\xc0\xba\xdd\xa5\x8d\xf4\xf8\xd2\xb3\x61\x62\xf3\x99\x9f\xdf\x8b\x9c\x08\x53\x27\x5f\x36\x51\xd2\xc0\xc0\xee\x98\x8d\x1d\xb7\x4a\x0a\x0c\xd3\x51\x90\x20\xa1\x18\xa7\x72\xdd\xa4\xc4\x42\x99\x8b\x92\xd7\xf5\x05\xaa\x20\x95\xe9\x2f\x84\xd9\x03\x10\x06\x63\x49\x1a\x26\xd2\x12\xcb\x47\x06\x45\x01\x56\xd4\x23\x6e\x8f\x92\x33\xa2\x6b\x9b\x54\x9a\x23\xe4\x1b\xd8\x61\xd7\x45\x13\x88\x81\x40\x69\xf9\xa5\xdd\x22\x1b\xec\x12\x43\xb5\xae\xe6\x1b\x26\x5f\xa0\x6a\x5d\xdf\x22\x5e\x58\x2e\x2b\x8e\x32\x22\x66\x92\xe6\x99\x34\x51\x63\x73\x92\x79\x6a\xac\xc8\x35\xf7\xbb\x71\xa9\xfe\x1f\x64\xfd\xf6\x0f\x75\xa8\xff\x60\x4b\x3e\xfc\xa1\x9e\x5f\xa0\x8e\xd5\xbd\xba\x1b\x7b\x3d\x89\xa6\x53\xb5\x76\x94\xfc\xaf\x6a\xce\xbf\x84\x93\x09\x4c\xba\x2f\x6b\xc4\xc7\x95\x3d\x8e\xd3\xf9\x3c\x4d\xba\x6c\xb5\x60\x53\x18\xf4\x89\x4b\xc7\x89\xe4\x86\xcf\x30\x1a\xb9\x27\xb8\xc1\xcb\x0c\xe9\xcf\x51\xb0\xe3\x75\x71\x83\xd5\xac\x12\x0c\x81\xa0\x8b\x81\x61\x34\x8a\x12\x4b\x64\x5f\xad\xd4\x6f\x5e\x21\xb5\xd1\x05\xcb\x4d\x86\x44\xd4\xa5\xd1\xe1\x95\x11\x37\xd4\xa3\x8d\x44\xf0\x50\x6a\x30\x66\x56\x56\x6b\xcd\x01\x75\x51\x12\x38\xaf\x53\x9d\x39\xac\x91\xe7\xf6\x92\xe3\x54\xf6\x39\x91\xbb\xbb\x61\x90\x0e\x93\x11\x8a\x35\x11\x12\x32\x69\x15\x33\x3b\x52\x99\x8e\x31\x9d\x05\x3b\x55\x0c\x1f\x8e\x78\x4d\xb3\xed\xc2\x82\xd7\xba\x33\x73\x5f\x8a\x8e\xc6\xf0\x3e\x06\x8b\xa4\x16\x06\xaa\x36\x97\x25\x5e\xe8\xf6\xc6\x69\x42\xa2\x64\x09\xeb\x59\x59\xd0\x54\xe3\x14\xcc\x10\xd5\x4e\x67\xba\x61\xa1\xef\x19\x4a\x53\x82\xd4\x6a\xc4\x71\xd7\xee\x9a\xb9\xcc\xf8\x45\xd3\x99\x4e\xa5\x2d\x53\x3d\x1b\x26\xa3\x51\x6f\x87\xd7\xa2\x69\xb9\xe4\x0d\xd6\x4e\x66\x38\x7d\xff\xae\x4b\x69\x85\x21\x49\x8d\x10\xc7\x30\x77\x5c\x44\x0c\x8d\x7e\xa7\xca\x90\xaf\xd5\x1c\xf2\x36\xbf\x4c\x51\xa7\x78\x1b\x05\x0a\xca\x0b\x53\x5c\x82\xe1\xa8\x67\xec\x4c\x95\x64\xe1\x8b\x26\xc3\xf5\x11\x21\x79\xc1\x88\x16\xc4\x2e\x0b\x5c\xc8\x85\xbf\xf2\x8a\xa6\x5b\xb4\x23\x83\xfa\xe9\xe8\x6d\x44\x7a\xad\x60\x15\xdd\x40\x2e\x7d\xd2\xed\xf9\x8f\x31\x62\xcb\x8c\x90\x39\x99\x8b\xa0\x31\x4d\xf1\x59\x38\x9e\x39\xe5\xf1\xfb\x55\x26\x5a\x34\x9d\x56\xef\xba\x48\xb5\x5c\x29\xe8\x64\xb5\xda\xd9\xfb\x93\xb3\x4c\xb8\xa5\x31\x59\xdd\xa7\x69\x0c\x61\x22\x9c\x44\x2b\x6e\xa2\x16\x7d\x45\xe0\xae\x56\x8c\xf0\xaf\x6a\x64\xba\xa5\x57\x1d\x6e\xb0\x69\x76\x95\x97\xbf\x57\x66\x17\xed\xb5\x83\x0d\x67\x12\x22\x2e\xd3\x1a\x5e\xf7\x8e\x15\x0a\x4a\x23\xa9\x34\x85\xba\xc5\x7c\xaf\x2b\xa5\x3a\x09\xb6\x6e\xf6\x56\xd8\xc6\x84\xd9\x92\xaf\xb6\x91\xc1\x3f\x90\xb8\x62\x9b\x82\x5b\x00\x1a\xa9\x23\x4e\xdd\x2d\xb4\x3f\x29\x92\x9e\x98\x9e\x98\x8c\x7b\x62\x4c\x21\xc8\x76\xa0\x4a\x05\x37\x88\xb8\x57\x25\xaa\x8b\xf4\x35\x60\xcb\xac\x42\x40\x97\xe3\x57\x29\xfd\xf0\x8f\x5b\x22\x54\xdc\x0e\x23\xf4\x6b\x88\xc0\xf7\x45\x8a\x49\x3f\xfb\x8f\x59\x9a\x94\xe5\xf5\xcb\xba\x42\x5e\x1b\xa2\x2b\x9a\x3a\x1b\x24\x39\xe5\x38\x5d\xe0\x6b\x9a\x39\x79\x2d\x22\xad\xc7\xa3\x08\xa8\x0c\x7d\x89\x26\xdd\x14\xfd\x25\x4b\x93\xae\xa9\xfd\x13\x94\xba\x06\xfa\x7c\xa9\xa7\x06\xd4\x8b\xb6\xd7\x64\x90\x93\x8c\x7a\x59\x41\xea\x57\x0a\x7d\x86\xbb\x99\x53\x45\xb9\xbd\xea\x48\x8e\xe6\x14\xa7\x73\x9c\xce\x4d\xa2\x96\x67\xea\x46\xe2\xe5\x34\xa3\x98\xbc\x16\xbe\x17\x4d\xa4\x41\x6a\x2e\x99\xc3\x74\xd4\xcb\x56\x2b\x47\x02\x73\xb3\xd6\x21\x88\x05\x22\xa5\x94\xb1\x0b\x08\x3b\xac\x4e\x4a\x70\x61\x8d\x2a\xfb\xe8\x8d\x52\xa4\xec\x51\x2a\x6f\x9e\x98\x4e\xc5\xd7\xfd\x14\xc5\x0d\xbb\x57\xa8\xba\xa3\xcd\xde\xd5\xca\x0b\x02\xd2\x88\xc3\x8c\x5c\x48\x53\x30\x87\xd2\xc9\x2a\xa5\x9c\xf4\xc1\x96\x9d\xb7\xae\x8a\x04\x2e\xcf\x80\x17\xcd\x28\x2b\x78\x7e\x50\xca\xc6\xaf\x91\xc0\x13\x97\x65\x59\x10\x19\x4c\xd5\xcb\x82\x20\x88\x4a\xec\x97\x05\xdc\x7a\x13\xb6\x29\x93\x8a\xd4\x24\xaf\xd5\x1c\xb3\x7c\xa0\xac\xbc\x74\xb5\xa2\x23\x4a\x9f\x4e\x0a\x15\x76\xd3\xaa\x45\x08\xbb\x62\x57\x15\x43\x96\x2e\xf1\x18\x82\x17\xf9\x94\x7d\xe5\x86\x99\x02\x51\xcb\xa9\x6c\xd1\xe6\xe0\xbc\x20\x73\x01\xd2\x11\xeb\x12\x94\x84\x73\xe8\x02\x9a\x84\x24\xec\x62\xb3\xbe\x62\x58\x84\x6e\x1f\x57\xd6\x5b\xb0\x69\x49\x21\x96\x5a\x66\x64\x22\x50\x49\x40\x65\xc2\x6e\xc0\xb4\x88\xd2\x20\x24\xe1\xff\x0b\xd0\x6a\x50\x8a\x55\xe1\xf6\x19\xc7\x95\xcb\xb3\x99\x93\x41\x64\x54\x21\x23\xbe\x5d\xc7\x0d\x3a\x26\x75\x1b\xd1\x47\x59\xbd\xdc\x92\xa1\x8b\x0a\xd7\x4f\xf3\xc4\xc6\x29\x0b\x2b\xa9\x98\xb8\x1c\xfe\x55\xee\xf6\xa6\xc6\x46\xb5\x08\x46\x91\xcb\x29\x95\x04\x94\xdb\x26\x94\x81\xe8\x4c\x87\x44\x6e\x22\x29\x50\x49\x23\x35\x31\x28\xc8\x15\x5e\xa4\x3c\x48\x66\xc3\x54\x7a\x07\x06\xba\x9a\x44\x65\xc1\x22\x26\xea\xa5\xd0\x91\x1c\x34\xc4\x23\x21\x9e\x36\xe2\xf5\xb6\x5d\xe2\xaf\xfa\x36\xf1\xc6\xba\x7e\xe5\xe6\xf0\x57\x7d\x77\x98\x79\x4d\x8a\xdb\xc3\x5f\x8b\xfb\xc3\x1b\x9b\x66\x91\xab\x9b\x07\x9c\xc3\x1d\x17\x15\x76\x7d\x44\x38\xfc\xc6\x6a\xc5\x36\xd9\x96\x50\x8d\xaf\x8a\x6b\xdf\x52\x51\xd1\xd1\xf4\x1b\x6a\xca\x2a\x50\xca\x23\xe5\x5e\xd6\xbd\x48\xdb\xdf\x50\x55\xd3\x15\x30\x42\xf8\x4d\x55\x6f\x47\x32\x7b\x0b\x92\xb9\x2a\xba\xb5\x2e\x9e\xed\xd7\x54\xb7\x1d\xb7\x0d\xf5\x5d\xa6\xe3\x30\x2e\x45\x3b\xa6\xe5\x28\x15\x25\x1f\x44\xb8\x5a\x4c\x0b\x8a\x5a\x90\x48\x0b\x27\x93\xb3\x47\x48\x88\x92\x08\xb6\x28\x65\xcb\x2d\xa9\x5b\x89\xce\x06\xd9\xc0\xd0\xa9\x52\x0f\xbe\x96\x82\xe9\x25\x46\x7d\x0c\x61\x51\x28\xa8\x50\xae\x34\x9e\x94\xa2\x0e\xf2\x54\xb7\x9b\x3f\xb3\x93\x15\x72\x3d\x37\xb3\xcb\x54\x9a\x5d\xad\xf8\x92\x9f\xa8\xe9\x3f\x0a\x5e\x64\x35\x74\x79\x14\x59\xba\x38\x57\xb2\xd3\xc0\xeb\xa5\x9b\xa4\x53\x5a\x21\x9d\xd2\x91\x13\xf1\xed\xa4\x4d\xa4\xf9\x57\x48\xa7\x62\x55\xff\x76\xc2\xa9\xd8\xf2\xdf\x47\x36\x15\x6b\xad\x16\x4d\x9a\xad\xa2\x8b\x15\x66\x14\xf2\xcd\x9e\x52\xac\x3e\x76\x09\x7e\x7e\xc1\x7a\xc0\x1f\x76\xf3\xb8\xfb\xb5\x6e\x3b\x72\x96\x66\xda\x37\x76\xdf\x86\xe0\x16\xdf\xfa\x1a\x45\x81\x74\x9d\xef\xfa\xbd\xe8\x1d\xb5\x14\x76\x77\xa5\x79\x00\xc3\x68\x24\x6d\x83\x52\x67\xd2\xea\xce\x64\xbc\x33\xc3\x74\xa4\xf7\x27\xd3\xfa\xc3\x60\x19\x37\x0e\x40\xdf\x4a\xf9\xcd\x1d\xdd\x24\x91\x4b\x72\x93\x8f\x02\x2a\x86\x3d\xb8\x6c\xfb\x5e\x6b\x1d\xbf\xad\xc1\x8d\x94\xd5\x3c\x29\xa5\xe6\x71\xb1\x79\x18\xe2\x91\xeb\xf6\x0a\x8e\xe2\x57\x30\xf8\x55\xf2\x5d\x30\x1f\xfa\xad\x4d\x6c\xe6\x20\xaa\x0d\x41\x49\xff\xa9\x6c\x9e\xf6\xf2\x95\x4e\x7e\x84\x79\xaa\x9f\x5c\x7b\xc3\x3a\xf1\xb2\x2e\x57\xf0\xf7\x11\x5f\xa5\xba\xfe\xed\xe4\x57\xa9\xe9\xb2\x00\x93\x47\xf5\x7a\x66\x24\x82\xb1\x3e\x91\x21\x36\xd6\x0c\x1d\x48\xcd\x4b\xb5\x84\x70\x0b\x64\xdd\x2b\x92\x16\x55\x1f\xaa\x52\x91\x04\x81\xd7\x83\x4d\xcb\x0d\x54\x2c\x37\x30\x72\x88\x19\xd1\xef\xbd\x26\x74\x4b\xa4\x78\xb3\xd4\x15\xce\xaf\x7f\x98\xb4\xdd\x84\xd9\xdf\x57\xdc\x8a\x63\xc4\xff\x8f\x88\xd9\x52\x0f\xb7\x6b\xbe\x25\xea\x17\x13\x4a\xe1\x66\xdc\xab\x9b\x52\x36\x4e\x99\xe9\xaf\x78\x35\xca\x99\x93\xfc\x23\xd8\x30\x2d\xb1\xe1\xf6\x05\x60\x13\x29\x8a\x83\x2d\x07\xda\xdc\x6e\x02\xb6\xdd\xb4\x71\x2a\x46\xda\x54\xa4\x3c\xb0\x46\x45\x78\x91\x72\x6c\x4f\xbb\xf7\xf7\x27\x0b\x36\x83\xf0\x5e\x59\x30\x36\x48\xc8\x8a\xe9\xa9\xef\x94\x6a\x0c\xf1\xdb\xeb\xff\x15\x2b\x52\x75\xdb\x43\x3c\x1a\x6d\x58\x8d\xee\x20\x23\x9b\x4f\xf6\xa5\x0f\x01\xac\x56\x3c\x22\x50\xcb\xd9\xb8\x4c\x1f\x0a\x85\x4b\x21\x41\x14\x76\xb3\x4c\x36\xbd\xc9\xc0\x2c\x2c\x32\xcb\x5d\x81\xcd\x75\xa7\x89\xc8\x7a\x9a\xce\x17\xb4\xab\x46\xfd\x9b\xcb\x11\xc8\xc8\x27\x0c\xe1\xfc\x3e\x2e\x1e\xb1\x7c\xa5\x50\x9a\x91\xb7\x94\xba\x4c\x1f\xb4\x1c\x81\xd8\xdb\x97\x1a\x4a\xf8\x08\x2a\xb4\x79\x12\x92\x30\xb0\x6d\xfd\x90\xc3\xd7\xc2\x6f\x76\x76\xf5\x6b\x20\x82\x8b\x45\x5d\x5f\x03\x40\x43\x3b\x4e\x1f\x6c\x64\x4f\xe0\x7e\x49\xff\x46\xc9\x34\xb5\x91\xfd\x14\xe2\xc4\x46\x36\x3b\x1e\x63\x8f\xd4\x8e\x26\x04\xef\x5e\x62\x20\x16\x09\x6c\xbb\x97\x3d\x45\x42\x56\x8e\xc3\x0c\x44\x0d\x5d\xf6\xcc\x8a\xf3\x47\x5e\x45\x97\xda\x79\xc6\xb1\x15\x16\x81\xb0\xa6\x98\x10\xb5\xe5\x2c\xd0\x92\xc2\x8f\xf9\x01\x0a\x80\xc0\x71\x1a\x8d\x06\xb8\xc1\xbb\x9c\x10\x6a\xff\x2a\x24\x61\x5d\x0f\xfe\xfd\x5a\x27\x75\x68\xfc\x25\x8d\x12\xc7\xb6\x6c\xb7\xce\x8e\xdc\x22\x2c\x0e\x03\x1b\x55\x53\x1e\x71\xd7\x2e\x1a\xda\x0f\x38\x5d\x2e\x6c\xc4\xff\x9e\xa6\x71\x1c\x2e\x32\x98\x14\x88\xc0\xf1\x26\xbf\x0a\x6f\x08\x6c\x9b\xe1\xcd\x74\xc9\x37\x20\x0f\x02\x61\x73\x5c\x2d\xcb\x6e\x60\x58\x40\x48\x9c\x7a\xbd\x34\xc4\xac\x17\xbd\x4a\xf4\x1a\xac\x47\x67\xc9\x84\xaf\x2c\xf2\xd7\x86\x4c\x81\xe3\x70\x64\xb7\xb4\xbf\xbb\x5b\xd9\x7e\x81\x91\x6f\x97\x11\xd9\x18\x7a\x9e\x1b\x1a\x24\x2f\xf2\x55\xb9\x7f\x68\xd1\x2b\xed\x78\x4b\x06\x64\xb9\xa0\x72\x56\xed\xb3\x19\x59\xa8\xc2\x4a\x9b\x0e\x2a\x30\x90\x30\x44\x1a\x93\x28\x0b\xef\x63\xd8\x98\x53\x83\x23\xb6\x93\xb7\x31\xa7\x80\xe5\xb9\x58\x1c\xd2\x96\x9c\x14\x8e\x08\xeb\x2c\x7d\xe4\x2a\xb9\xe8\xfb\x82\x1f\x2b\xca\xe5\x85\x0c\x5c\xe0\xf2\xcf\xa9\xaa\x56\xe5\x65\x61\x27\x74\xd8\xf1\x72\x4c\x52\x5c\x85\x43\xd5\xb8\x34\xb2\xe5\xfd\x38\x0e\xb3\x0c\x44\xc0\x20\x71\x11\xa9\x1c\x41\x2d\x27\x45\x7a\x0b\x85\x2b\xe2\x8a\x95\x76\x2d\x7b\x2a\x7c\xf5\x79\x34\x26\x05\x58\x6c\xd3\x82\xb9\xeb\xf9\x6a\x54\x2d\xd7\x85\x50\x47\x44\x9e\x26\x10\x75\xd2\x69\x26\x0e\x77\x29\xfa\xf2\x4e\xe1\x6a\xa6\x34\x18\xe1\xdf\x0e\x69\xe3\xd8\xc3\x80\xa3\x30\x61\x75\xb1\x38\xe6\xc6\x74\x19\xc7\x94\xa3\x37\x20\x2d\xf9\x71\x53\xc8\x8a\x46\x8e\xad\x15\x98\x21\x73\xe5\x3a\x18\xfd\xaa\x6b\x30\x14\xb9\x8a\xa8\x88\x92\x35\x4f\x98\xba\x44\x0d\x2a\x6e\xdc\x9f\x50\x0d\xa2\x4b\x2d\xac\x37\x34\xb0\x5c\x6c\x5d\x93\x8b\x25\x16\x6f\x5b\x95\x4b\xc5\xde\xb8\x2e\x97\x98\x25\x77\x95\xd0\x1a\x4f\xe9\x14\x91\xe2\x8a\x92\x91\xc9\x26\x21\xcf\xe4\xc8\xb2\x77\xc7\x08\xb9\x55\xb7\x87\x76\x9d\xd4\xed\x91\x9d\x97\x39\x17\xd5\x7f\x0d\x70\x55\xf3\xba\x4e\x57\x50\x88\xf8\x2b\x28\x8a\xd5\x88\x15\x4f\xb4\x8a\x86\x80\xb8\x2e\x72\xb3\x4c\x1a\xe3\xef\x23\x69\xf6\x70\xbe\x37\x4e\x1c\x9b\x8d\xdf\x40\xb6\x8c\x09\x4b\x92\xea\x92\x38\xe4\xdc\xa3\xa4\x8c\x12\x12\x27\x8e\x4d\xc1\x16\x0e\xa3\x0c\x26\x56\x98\x58\xf0\x7d\x0c\x0b\x22\x5e\xb2\x44\xc5\x0b\x7f\x0d\x06\x0b\x81\x63\x4f\xa5\x13\xce\x27\x79\x65\x22\x8b\x58\xc4\xe9\x72\xe8\x76\x4b\x50\xd7\x45\xd0\x18\x0b\x84\x68\xeb\x5f\x1d\x68\x9c\xf7\x2f\x2e\xcf\x06\x68\xc7\xe7\x1e\xda\x0a\xe5\xb0\xca\xf5\xa3\xad\x42\x72\x10\x99\xce\x4a\xbf\x85\xf2\xf4\x3d\x20\xab\x95\x3c\xff\x39\x0d\xa3\x78\x89\xb9\x48\xe4\x8b\xa1\x92\x90\x42\x65\x0e\x31\x19\x84\x04\xd8\x9b\x48\x84\xbe\xb6\xc4\x21\x6d\x56\x4b\x12\xdb\xca\x9c\xbe\x5a\xfa\x3c\xfc\x7e\x2e\x5b\xf0\x64\x03\x49\x34\x56\xba\x1f\xc5\xf7\x9f\x96\xb0\x84\xaf\xe2\xdc\x66\x45\x3f\x35\x76\xe9\x5f\x5e\x7e\xbd\x3b\xbb\xbd\xbb\x2d\x1d\x3e\x3d\x0e\xe3\x78\x97\xd6\x96\xbd\x63\x07\x50\xb7\xd7\x93\xb1\xb3\xe0\x25\x31\x54\x40\x49\xf7\x0b\xbd\xa5\xbe\xa2\xa6\x60\x9a\x26\x64\xb5\x62\xf5\xab\x3e\xa0\x88\x45\xf6\x1a\x02\xcd\x71\x51\x16\x78\xbd\x2c\x0f\xc8\xcd\x64\xbc\x46\x12\xa4\xc3\x8c\xbf\x55\x4c\x86\x1b\xaa\xaa\x5c\x11\x61\xa0\xf8\xf0\x06\x1e\xce\xbe\x2f\xf8\x16\x34\xe6\x61\x73\x89\x9a\xce\xae\xab\xc2\x66\xe5\xfb\x01\x72\xe0\x4e\x80\x15\x58\xd8\xf0\x8a\x58\x4e\xe2\xa2\xa8\x5e\x5f\xeb\x6f\x6c\x79\x0b\x61\x3e\x85\x84\x00\xde\x10\xcd\x12\x78\xe2\x10\xfe\x2b\xcb\xbb\xee\x66\x14\x9a\xa6\x46\xf6\x4a\xed\x22\x2f\x3d\xc4\x23\xa4\x85\x37\x89\xa1\x88\xd3\x07\x11\x6c\x7c\x95\xb2\x05\x2c\xb3\xe6\x54\x92\xc0\xff\xcd\xde\xbb\x6d\xc7\xad\x23\x89\x82\x0f\xf3\x30\x6f\xf3\x38\x2f\xf5\x30\x14\xba\x2b\x4d\x96\x90\x69\x92\x79\x63\x32\x4d\xab\x65\x59\xda\xdb\xed\x9b\x4a\x92\xed\xea\x4a\x69\xfb\x50\x99\x48\x89\x6d\x26\x99\x4d\x22\x75\xd9\x96\xaa\xd7\x9a\xbf\x38\x6b\xcd\x17\x9c\x7f\x98\x35\xff\x72\x7e\x60\x7e\x61\x56\x04\x00\xde\x33\x25\x79\xef\x7d\xd6\x3c\x1c\x57\xed\x14\x08\x06\x02\x81\x40\x20\x22\x00\x02\x81\x99\x26\x50\x83\x93\x37\x4d\x02\xce\x92\xc0\x97\x91\x0e\x6a\xde\x45\xbd\xd1\x71\xf4\x29\x9a\xfa\xab\x8b\x4b\xbe\xaf\x74\xc7\xd7\xa6\x3d\xfd\xa6\xe7\xb1\x3c\xbc\x8b\x2a\xa3\x85\xc1\xf9\x43\x5a\x8b\x18\xe2\x78\x47\xa1\xb8\x88\x98\xe1\x6a\x38\x80\x67\xc4\x90\x8a\x6d\xcb\x1c\xab\x93\x9d\xa5\x41\xda\x6a\xb1\x2d\x2f\xaf\x53\x9e\x55\x2c\x81\x74\xd8\xcd\x92\x4d\x39\x9b\xe1\xa6\x31\x19\xf2\x20\xdb\xb2\x42\x66\x2b\x5c\x93\x1a\x37\x9c\x00\x96\xe5\x05\x49\x72\x97\x54\xf9\xd5\xe1\xfe\x87\xd7\x6f\x3e\xfc\x84\x41\x28\x88\x3f\xe7\x2c\x51\x13\x05\xe8\x13\xa6\x76\xa9\x49\xea\x32\x15\xac\x91\xed\x60\x9b\x08\xbf\x05\xa6\x67\x6e\x33\xe1\xf0\x3e\x77\x43\xaa\x78\xd9\x36\xa1\x1a\xda\x2c\x97\x6c\x27\x46\x83\x06\xab\x28\xe3\x06\x80\x5c\x3b\xd3\x2d\x6b\x9d\x82\xde\x34\x4d\x2f\x7f\x6b\x64\x32\x54\x4a\xae\x5a\xd9\xb5\x06\x6a\xb7\x5d\xd6\xc2\x79\x53\xd4\x3c\x47\x2f\x34\x0f\x26\xbf\x7a\x41\x8b\xcb\x21\xb3\x4d\xa4\x50\x50\xc5\x2d\xa5\xf5\x73\x00\xc8\x29\x00\x2c\xd2\x93\xf8\x98\x4d\xe3\x68\x96\x7e\x2d\x53\xa6\xce\xf4\xa5\xab\xc5\xc2\x4f\x82\x5f\x99\x6e\xa8\x2f\xb3\x71\x84\xfc\x2d\xa8\xff\x82\x35\xaa\x73\x40\xae\x32\xb9\xd5\xbd\x91\x75\x56\x95\xd6\xea\xe8\x56\x6d\x9d\xa6\x91\xdf\xa2\xa3\x1a\x57\x45\x4a\x4e\x86\xc2\x51\x5a\xdb\xd0\xd5\xe9\x81\x1b\x30\xcd\xa9\x70\xb5\x6a\x2f\xf9\x4d\x61\xc1\xb5\x2e\xbc\x6a\xf8\x14\xc4\x37\x88\xb4\x0c\x0d\xc8\xae\x2e\x63\x6a\xed\xc8\xbf\x6e\x76\x66\x52\x9a\x49\xf3\x5e\x7e\x86\x16\x23\x89\x75\x0e\x77\x8f\x8f\xf7\x5f\xef\x54\x45\x5a\x05\xcc\x71\x59\xd6\x53\x2f\xfb\xa6\x3a\xef\x9f\xeb\xb9\xe3\x30\xbe\x16\xc3\x87\xc7\xf1\xb7\xc6\xee\x66\xb5\xbe\xae\xc8\x9b\xaa\x0c\xb4\x97\x18\x07\x46\x59\xaa\xb2\x83\x92\x85\x71\x23\x6c\x23\x88\x06\xc6\xa4\xf9\xde\xd8\x2c\xa3\xa8\x4b\x4a\xbc\xcc\xb6\x44\xad\x42\xae\x29\x55\x87\xa1\x4e\x8a\x43\x5d\x1c\x0b\xc9\x98\x51\xe6\xe4\xb8\x38\x32\x94\x65\xc7\xbc\x64\x15\x7d\x60\x37\x5c\x0c\xf6\x27\x08\xd7\x11\x6b\x10\xaf\xcc\x15\x2b\xd0\xff\x0e\xcf\xeb\x49\x58\x6d\x1e\x27\xd9\x6c\xa9\xb1\x01\xbc\x74\x1a\x4d\x52\x5c\xf8\x9c\x94\xe0\x09\x9c\xd2\x48\x97\x0b\xfc\x49\x76\x24\xad\xda\x19\x8f\x68\x56\x91\x0d\x4d\x91\x01\x90\x91\x77\x77\x5b\x55\x2f\x49\xee\x72\x2c\xf6\x5d\x7d\x0c\xeb\x46\x66\x87\x0a\x4e\xa1\x94\xcf\x8a\x3e\x7a\xe9\x55\xe1\xd6\x09\xc6\x7b\xff\x26\x58\xac\x16\x9a\x44\xa0\x4d\xe3\x55\xc4\xb5\x84\xf9\x60\xc3\xa9\xe6\x9f\xc7\x09\x0f\xa2\x0b\x21\xf1\xc9\x2a\xea\x28\x2b\xd3\x48\xa0\x58\x37\xaf\x34\x6f\x62\x9e\x51\xde\x60\xc2\x76\x9a\x0c\x1e\x08\xb9\x8b\x42\x8e\x3a\xa6\xd5\x2a\x4d\x46\x58\x61\x8a\x75\x77\xa7\xf3\xc2\xe8\x6c\x52\xe7\x98\xa7\x17\x0b\xe5\xb3\x2e\x8c\x0d\xc8\xae\x4b\x28\xf5\xaa\x4e\xcb\x74\x58\xf1\xbb\x50\x33\x23\x33\x47\x45\x13\x66\x5d\xc3\x79\xeb\xe3\x54\x94\x08\xfe\xb4\x96\xad\xf7\x99\xba\x2d\x36\x2a\xf3\x45\x1b\x27\x10\xb5\x25\x08\xf1\x42\x2c\x42\x70\xaa\x4a\xd5\xf4\xb7\x9c\x3a\x37\x58\xec\x5c\x9f\xf3\x6c\x86\xbd\x19\xac\x22\xe5\x32\xe6\xdb\x83\x9c\x6c\xd4\xfb\x92\xa9\x28\x86\xaa\xf6\xcd\xcc\x6d\x12\x8a\x27\x33\xbc\x2c\x9d\xc9\x2a\xd2\x9f\x6a\xb0\x8a\x84\x27\xab\xe8\x91\x36\xeb\x51\xba\xa6\x21\xfc\x9d\x74\x61\xc8\xd1\x2a\x8a\xa0\x5a\x69\x9e\x6a\xba\x46\xba\x80\x7a\x6a\x90\x9a\xf7\x21\xd9\x52\xf7\xc0\x6b\x61\x9a\x0a\x73\x5b\xe9\x6d\xd1\x1f\x32\x07\x45\xeb\xd9\xb0\xaa\xa5\xb3\xe7\x16\xeb\x1a\x1d\x1e\x1f\x04\x37\x6c\xa6\xdb\xc6\x36\x49\xc9\x23\xa6\x4e\xca\xc3\x6a\xd2\xc5\x15\x8d\x69\x34\x7c\xf6\xab\x80\xe4\x1f\xfd\x0a\x7d\x2e\xcc\xb7\x5b\xf5\x0b\x27\xec\xac\xe2\x43\x8f\x9b\x3b\xa2\xe6\x5f\x9c\x48\x41\xd1\x82\x48\xd9\x3b\xf7\x11\xdd\xa8\x5d\xb3\x84\x69\x51\xac\x94\x74\x95\x3b\x52\x2f\x34\x2e\x5b\xc9\x85\xa0\x6c\x89\x1d\x1d\x0d\x9e\x8f\x5f\xb5\xa6\xfa\xc8\xa5\x0c\xe9\xdb\x60\x5a\xce\x52\xc4\x8b\xc6\xd9\x90\x0c\xf3\xda\xb8\xcc\x94\x77\xa5\xc4\xe3\x91\x25\x8b\x66\x30\x69\x7a\xa8\x80\xe8\x17\x4f\xf6\xcf\x83\xe0\xc2\x7b\xf2\x88\x9c\xfb\x35\x83\x17\xe7\x8f\xf5\x55\x0f\xe1\x5a\x79\x6c\x4d\x5b\x8a\x85\x8b\x1f\x04\x65\xdc\x80\xfa\x3a\x2c\x79\xc4\x2c\x36\x93\x8c\xa4\x61\xda\x06\x93\xb4\xdc\xd1\x2b\x82\x89\xdc\x07\x99\xde\xa4\x62\xd6\x0d\x79\xac\x39\x91\xdf\x5b\x8d\xa2\x20\x6c\x95\x24\x41\xae\x1b\xc8\x60\xc0\x5f\xc1\x88\xa3\xe2\x2b\x2d\x1d\xce\x82\x99\x10\x65\x61\x20\x7c\xed\xca\x0f\x57\x4c\xf3\xa3\x59\xe1\x15\x46\xd1\xd4\x16\x71\xc2\x30\xb4\x70\xe6\x98\x34\xcc\x3c\xf3\xb9\xe6\x9a\x71\x51\x3e\x91\xc5\xa6\xbc\x28\xa2\xf5\xae\x6e\x16\xe4\x75\x3d\x5f\x9a\xc3\xca\x76\xd7\xf8\xaa\x18\x52\x1f\x47\x25\xf6\xe5\x27\x62\x8b\xfc\x82\xc2\x33\x2d\x5e\xf1\xdf\x8b\x09\x92\xbb\x40\x6d\xc3\xf2\x9e\x24\xb5\xd5\x2a\x47\x5b\x2e\xbe\x53\xd6\x5f\xb5\xaa\x61\x8a\x2a\x5f\x15\x8d\x4a\x7d\xa1\xb0\x46\x59\xa9\x61\xf5\x4f\x36\x6b\x19\xf7\xa4\xe5\x01\x89\xa0\x20\xda\x60\x58\xaa\x33\x62\x35\xfd\x6e\x04\xca\x67\x36\xd9\xb9\xc4\x2c\xec\xb4\x54\xde\x2f\xec\xbb\xbb\xe2\xc9\xc2\x07\xd5\x86\xa8\xf0\x41\x16\xf9\x49\xe2\xdf\xee\xff\xb5\x81\x3b\x5b\x0c\x26\x1f\x6a\x5d\x8b\xb5\x5a\x5b\x1c\xe3\xf5\x48\x82\xb6\x3c\x5e\x9e\x8a\x6c\x59\xe3\x35\x1b\x43\xb6\xb7\x13\x03\x4a\x4e\x92\xb3\x2d\x8c\x7b\x99\x97\x50\xab\x66\x0f\xd3\x99\xa6\x2c\xe1\xfb\x7f\xad\x19\xa5\xec\xeb\x70\x20\x77\x91\x13\x71\x8c\xb9\x10\x9d\x5b\x4d\x67\x98\x0c\xd0\x9e\x07\x7c\x2f\xc4\xd6\x5e\x77\xae\xbb\xba\x19\xc8\xb8\x2f\x1c\xdb\x94\x13\x28\x6b\x07\x50\x6c\xf3\xc2\x77\x07\xb7\xf8\x80\xab\x0a\x5b\x9e\xc7\x5b\xad\xad\x86\x10\xad\xd2\xac\xab\xae\xc0\x1e\x30\xb2\x53\x83\x3b\x64\x42\xb6\x93\x6d\x72\x46\x5c\x42\xc6\x99\xe3\xa0\x13\xc5\x12\xb2\x1d\xcb\x89\xec\xa5\x3c\x73\xe9\x87\x21\x4b\xde\xc5\x53\x94\xde\xaf\xba\x25\xb6\x4f\x6c\x03\x87\xb6\x89\xb6\xe5\x79\xf8\xc0\x8d\xfa\xb7\x8e\x35\x7c\x6f\x90\x0e\x73\xcb\xf3\xb2\x60\xd5\x7c\x27\xfb\x2c\xd5\x48\x24\x36\xe0\x31\x24\x66\x5d\xf3\x08\xd2\xea\x68\x1a\x96\x9d\x9a\xc2\xab\x27\x6a\x47\x67\x52\x0f\xb1\x3e\x61\xdb\xf6\x59\x07\x97\xa5\xf5\xe7\xfa\xe4\x97\xe7\x67\xdb\xee\xe9\x6c\xdb\x80\x9f\x53\x63\xe7\x9f\x9f\xe7\xbd\xbf\xc3\x27\xd6\x99\x4b\x76\x76\x76\xc8\xc3\xc4\x4a\x1d\xdc\xfc\xfd\x03\x74\x41\xe6\x8e\x3f\x42\xaf\x01\x6b\x4b\x98\xaa\xda\x42\x4a\x94\x52\xfc\xec\x61\x45\x5f\x5f\xe5\xab\x37\xc1\x4f\xd3\x9a\x29\x6a\x40\x29\xdc\x23\x85\xf2\xd3\xc9\x81\xf3\x1a\x2f\xa3\x48\x6a\x85\xcf\x6f\x39\x4b\xdf\xb1\x39\xcf\xb7\x1a\xcd\xd8\x61\x1c\x44\x59\x46\x18\x5f\xb3\xe4\x55\xbc\x8a\x66\x9e\x59\xc1\x56\x0a\xaa\x06\x39\x6b\xbe\x77\x10\x42\x1b\x36\xaa\xc9\x65\x75\x3c\xab\x9f\xec\xc5\x33\xb6\xcb\xf5\x04\x17\x4d\x4c\x69\x0b\x32\xe2\x8c\xe0\x85\x67\xd9\xc3\x1d\xbe\x2d\xc1\x11\xd4\xb5\x46\xf6\x0b\x2f\x68\xb5\x82\x17\x9e\x6d\x77\x77\xf4\x4a\x03\x82\xb6\x35\xb2\x69\xa5\x99\x56\xad\x55\x96\xed\x18\xae\x6d\xf7\x32\x54\xdd\x51\x03\x2a\xdb\xee\x55\x51\xd9\x35\x54\xb6\xd9\x03\x5c\x3d\x33\xc3\xd5\x1b\x36\xe1\xea\x99\x55\x5c\xdd\x1a\xae\x41\xbf\xdf\x1d\x00\x32\x27\x43\xd6\xb7\x1a\x91\x39\x55\x64\xbd\x06\xc2\x46\x43\xab\x6f\x1b\xae\xdd\xcf\x59\xd6\x6f\x62\x99\xdd\xaf\xb1\xac\x5f\xa7\x6d\x68\x99\x8e\x33\xe8\x19\x2e\xdf\xf6\xc8\xff\xfb\xff\xfc\xdf\x24\x8b\xbb\x6d\xd9\x19\xbd\xd6\xc8\xca\x8d\x7c\x86\xae\xdd\xae\x0a\x5a\x85\x88\x17\x2f\x06\xc6\xb6\x1e\xb4\xa1\x5f\x68\x5d\x14\x8a\x91\x0e\xb3\x32\xea\x18\x50\x4e\xe3\xdd\x5d\xbf\x6f\x8f\x06\x2f\xbc\xb8\xd5\x8a\x5f\x78\xfd\x61\xb7\xd7\xbd\xbb\x8b\x5f\x5a\x96\xd5\xb3\x2c\x6b\x47\x11\xee\xc6\x2f\x90\xd3\x90\x21\x54\x5f\x67\x9e\xc4\x8b\x3d\x29\x93\x7a\x6c\xb8\x7a\xdc\x16\xbd\x41\xd7\xc0\x60\x4d\xdb\x7a\xfc\xf2\xe5\x4b\xcb\x6c\x59\xa6\xdd\x35\x68\x7f\xd0\xb5\xcd\x6d\x1d\x1e\x5a\xb1\x61\xc8\xa3\xf6\x9a\xaa\xb6\xca\x63\x93\x26\xed\x76\xe9\x66\x18\x79\x7d\xcc\xc9\x81\xd3\x34\xc5\x16\x0e\x48\x61\x2c\x1a\xb2\x80\x54\x5e\xf2\x2e\xa3\x6a\xe9\x1f\x1f\x93\xd8\x1e\xd5\xb3\xc8\x4d\x23\x40\xae\x74\xb3\xae\x97\x0c\x97\x20\x83\xae\x35\xc2\xaf\xb4\xdb\x56\x56\x47\xb6\xf3\xbb\x84\x7f\xdb\x32\xc6\x12\x7d\xa1\xb3\x76\x74\x81\x7f\xb0\xad\x0b\x2e\x06\xc6\x8b\x17\x96\x69\x64\x3c\xa5\x40\xb0\x2b\x89\x90\xdf\x75\x25\x45\x18\xd0\x00\xa8\x16\x7a\xc3\x28\xeb\x8d\x71\x16\x35\x0e\x46\x81\x89\x43\xb4\xb9\x63\xad\x91\x7d\x17\xbc\x7c\xf9\x72\x60\xd0\xd4\xb3\x0c\x37\x78\x81\x15\xf4\xd7\x16\xb0\xed\x1e\x16\xb0\x6c\x28\x61\x1b\xee\x5a\xc0\x9e\x29\x00\x1d\x00\xec\x1a\xe3\xf4\xa5\x39\x36\x52\x18\x1c\x6b\x48\xb1\x1d\x41\xca\x5f\xd2\xd6\xa0\x5b\xbe\x44\xe8\x7a\x2a\xee\x0f\xbb\x9e\x76\xa2\x55\xf8\x25\x98\xf1\x4b\xcf\x14\xcf\xd3\x38\xe2\x49\x5c\xce\x4b\xd8\x85\x9f\xcc\xf6\xfe\xfd\xdb\xee\xe2\x3c\xb8\x58\xc5\xab\xd4\xdb\xb2\x24\x78\x21\x53\x94\xb1\x15\x9e\xc5\x79\x10\xc1\xc4\x77\x32\x19\x0e\x1c\xea\x0c\x47\x67\x74\x62\x59\xfd\x3e\xb5\xac\xbe\x83\xe9\x81\x49\x2d\x6b\x60\x41\xba\x67\xf7\xa9\xd5\x1b\x20\x4c\x6f\x68\x51\xf8\x11\xe9\x2e\xa4\x7b\x22\x3d\x80\xf4\x50\xa4\x47\x90\x46\x78\x18\x68\x56\xbf\x2b\xd2\x7d\x9b\x5a\xfd\x3e\xc2\x0c\x2c\x8b\x5a\x83\xae\x89\xe9\x9e\x43\xe1\x07\xd2\xc3\xbe\x49\xad\xe1\x00\x71\x0e\x07\x43\x48\x8b\xfc\x21\xe4\x0f\xbb\x90\x76\xcc\x21\x85\x1f\x91\x1e\x41\x1a\xf1\x3b\x3d\x93\x5a\xce\x60\x00\xe9\x51\xdf\xa1\xd6\x08\xcb\xda\xa6\x3d\xa4\xb6\xd9\xed\x43\xba\x6b\xf6\xa9\xdd\x35\x07\x98\x1e\xf4\x28\xfc\x88\xf4\x88\xda\xdd\xa1\xc8\x77\x2c\x0a\x3f\x22\x0d\xf0\x0e\xe2\xe9\x99\x36\xb5\x7b\x66\x17\xd3\xdd\x2e\x85\x1f\x4c\x8f\x20\x7f\x64\x8b\xf4\x90\xda\x7d\x13\xda\x65\xf7\xcd\x11\xa4\x47\x98\xee\x9a\xd4\xee\x77\x11\x67\x7f\x60\x51\xbb\x3f\x40\xf8\x81\x6d\x52\xf8\x11\xe9\x3e\xa4\x91\x86\x41\xd7\xa2\xf6\xa0\x2b\x60\xba\x90\xdf\x1d\x62\x7a\x68\x53\x7b\x80\x7c\xb0\x07\xce\x88\xda\x83\x11\x96\x1d\xf6\x1c\x0a\x3f\x98\xee\x77\xa9\x3d\x44\x3e\xdb\xc3\xfe\x88\xda\xc3\x81\x80\x19\xf4\x21\x8d\x7c\x18\x3a\x03\x6a\x0f\x1d\x84\x71\xac\x21\x85\x1f\x4c\x0f\x07\x14\x7e\x44\x7a\x04\x69\xa4\xdf\x01\x9e\x38\x0e\xd6\xeb\x8c\xba\x14\x7e\x20\x3d\x02\x9e\x8c\x4c\xa4\x73\xd4\x1b\x50\xf8\x39\xa3\x93\xae\x69\x3a\x14\x7e\x30\x6d\x5b\x14\x7e\x20\x6d\x75\x7b\xb4\x6b\x75\x11\xc6\xea\xd9\xb4\x6b\xf5\x7a\x22\x3d\x80\xf4\x08\xd3\xfd\x21\xed\x0a\x39\xec\xda\x03\x93\xc2\x8f\x48\x77\x21\xdd\xc5\xf4\x10\xf2\x87\x22\x7f\x38\x80\xf4\x10\xd3\x23\x87\x76\xed\x11\xe2\xe9\x8e\xba\xb4\xdb\x1d\x41\x7b\xbb\x3d\xb3\x4f\xe1\x07\xd2\xd0\x17\xf0\x23\xd2\x0e\xed\xf6\x7b\x22\x0d\xf4\xf4\x7b\xd0\x96\xee\xa0\xdb\xa5\xf0\x23\xd2\x03\xda\x1d\xc8\xfc\x7e\x9f\x76\x07\xd8\x77\xdd\xe1\xc0\xa2\xf0\x23\xd2\x3d\x48\x63\xbd\xc3\x21\xe4\x0f\x05\x8c\x03\xf9\x0e\xe6\x3b\x00\xe3\x20\xff\xbb\xc0\xc3\xae\xe0\x61\xd7\x19\xf5\x21\x2d\xf3\x87\x90\xc6\xb6\x8c\xfa\x5d\xda\x1d\xa1\x3c\x77\x47\x03\x87\x76\x47\x02\xe7\x68\xd8\x83\x34\xc2\x8f\x00\xff\x68\x84\x34\x8c\x46\x5d\xda\x33\x6d\xe0\x5b\xcf\xec\x3a\x14\x7e\x20\x6d\xf5\x2c\xda\x13\x7c\xee\x01\x9f\xe1\x07\xd3\x7d\x93\xf6\xac\xbe\x25\xd2\x5d\x48\x77\x31\xed\xf4\x68\xcf\x72\x00\x7f\xaf\xd7\x73\x68\x6f\x80\x63\xad\x37\xea\x8f\x28\xfc\x9c\xd1\x49\x7f\x64\x0e\x68\x7f\x84\xfd\xdb\x1f\x75\x1d\xda\x1f\x21\x0f\xfb\xa3\xa1\x49\xfb\x23\xd4\x0f\x03\xd3\xb4\xe9\xc0\xc4\xf1\x32\x30\x07\x0e\x1d\x98\xc8\x9f\x81\x39\xb4\xe8\xc0\xc4\xfe\x1a\x98\xce\x80\xc2\x8f\x48\x8f\xe8\xc0\xc4\xbe\x1b\x58\xe6\x88\xc2\x0f\xa6\xfb\x7d\x3a\xb0\x50\x9e\x07\x5d\xab\x4b\xe1\x07\xd2\xbd\xae\x4d\x07\xbd\x6e\x4f\xa4\x47\x74\xd0\x43\x1a\x06\xbd\xbe\x49\xe1\x47\xa4\x87\x90\x46\x3c\x83\xe1\x88\x0e\x06\x0e\xe6\x8f\x2c\x9b\x0e\x46\x56\x1f\xd3\x83\x1e\x85\x1f\x91\x1e\xd0\xc1\x68\x28\x60\x86\x00\x83\x3c\x1f\x8c\x86\x0e\xa4\xa1\xbd\x43\xd3\x1a\xd1\xa1\x69\x03\x3d\xc3\x81\x35\xa0\x43\x31\x66\x87\x83\xa1\x43\x87\x03\x1c\x2f\x8e\x6d\x76\xa9\x63\x23\xdf\x1c\xbb\xdb\xa3\x8e\x8d\x7d\xe1\xd8\x8e\x43\x1d\x1b\xfb\xcb\x01\x59\x75\xba\xc8\x1f\xa7\x67\x9a\xd4\xe9\xa1\x7e\xb0\xec\x6e\xd7\xa4\xf0\xdb\xc7\xa7\x5e\xcf\xa2\xf0\x0b\x74\xf4\xba\xa6\xd5\xa3\xf8\x2b\x9f\x46\xf8\x34\x12\x4f\xbd\x3e\x3c\x61\xef\x0e\x7a\x36\xb0\x16\x7e\xe1\xa9\x6f\xda\x3d\x3a\xe8\x9b\xa8\x89\x07\x7d\xb3\x3f\x80\x27\xc1\x97\xbe\x0d\x8c\x81\x5f\x7c\xea\xdb\x23\x0c\xac\x8a\x7d\xe8\x98\xa3\x21\x85\x5f\x7c\xe7\x58\xa6\x45\xe1\xd7\x96\x4f\x0e\x3c\x59\x02\xd2\xea\xdb\xf0\xd4\xef\xc9\xa7\x11\x3e\x09\xcb\x32\xb2\x7a\x5d\x8a\x7f\xfa\xf2\x19\x6d\xcd\xc8\x42\x4e\x63\x42\xbc\x97\x96\x68\x64\x5b\x60\x7f\x46\x36\xf6\xb4\x65\x8d\xba\x03\x9b\xe2\x1f\xc0\x3e\x02\x33\xd1\xa7\xe2\x8f\x7c\xee\x0e\xe0\x79\x80\x54\x8f\xac\xe1\x70\x60\xc2\xf3\x68\x34\x3a\x3b\x13\x46\xcf\xcf\xec\xe3\x04\xcc\x0f\x95\xc6\x6d\xd0\x03\xdb\x83\xa9\x21\xb5\xa4\xb1\x01\x5b\x83\x84\x0d\x7b\xd4\x1a\x4a\x63\x04\x76\x06\xcd\x8c\x0d\x56\x06\x53\x60\x63\x10\xcb\x08\x52\xc2\xd8\x38\xd4\xc6\x61\x61\x5b\x7d\x6a\x5b\xa8\x48\x6d\x9b\xda\xb6\x34\x3f\x60\x7d\x30\x65\x53\xbb\x2b\x4d\x0f\x58\x1e\x61\x60\xc0\xbe\x60\x0a\x2c\x8a\x30\x2e\x68\x4f\xd0\x6c\xd8\xd4\xee\xa3\xa2\xed\xf7\xa8\x8d\x6c\xb6\xfb\xf0\x56\x28\x7a\xd0\xf9\x5d\xa1\xf2\x41\xfb\xa3\xa2\x06\x3d\x2d\xd4\x74\x8f\xda\xa8\x60\xec\xd1\x88\x4a\xf5\x08\x1a\x11\x05\xb4\x6b\x81\x1e\x46\xd5\x62\x8d\x68\xd7\xc6\x94\xdd\xa3\x5d\x1b\x55\xb3\xed\xd0\x2e\xb2\xb5\x0b\x3a\x51\xa8\x44\xd0\x9a\x28\x4a\xdd\x3e\xe8\xcf\x91\x50\x93\xa0\x31\x41\x10\x07\x36\xed\xa1\x8a\xec\x0d\x7a\xb4\x87\xdc\xed\x0d\x06\xb4\x87\xaa\xac\x37\x00\x8d\x82\x8a\x69\x68\xd2\x1e\xf2\xb9\x37\xb4\x69\x0f\x07\x5a\x6f\xd8\xa3\xc2\xa5\x00\x8f\xa2\x87\x86\xa8\x3f\xea\xd2\xfe\x48\xa8\x11\xd4\x10\x38\x08\x1d\x3a\x44\x3e\x0f\x2d\x8b\x0e\x51\x04\x87\x56\x97\x0e\x71\x48\x0f\xad\x21\x1d\xa2\x41\x1b\xda\x26\x1d\xa2\x79\x1d\xda\x0e\x1d\x62\x3b\x86\xdd\x2e\x1d\x62\x3b\x86\xdd\x3e\x1d\x76\x85\x08\x75\xe9\xc8\x06\xcc\xa3\xae\x45\x47\xd8\x1f\xa3\x5e\x9f\x8e\x50\x4a\x46\x83\x2e\x1d\x09\x07\xc8\x04\x67\xc8\xc4\xde\xb4\x4c\x70\x38\x2c\x53\x88\xa8\x09\x02\x8d\xe2\xe8\x80\x10\x38\x42\x0a\x1c\xdb\xb2\xa8\x63\xe3\x70\x75\x6c\x6b\x00\x69\xa1\x14\x6c\x93\x3a\xb6\x2d\x14\x81\x0d\x0a\x02\x95\x88\x63\xdb\x50\xb6\x2b\xf2\x7b\x00\x83\x12\xe1\x80\x48\x38\x42\x26\x1c\xbb\xd7\x87\xb4\xa8\xab\x0f\xf8\xfb\x02\xbe\x0f\x78\x50\x32\x9c\xae\x89\xca\x05\x69\x80\x6e\x85\x1f\x4c\xdb\x16\x75\x44\xcf\x3a\xe0\x00\x39\x62\x48\x39\x3d\xc0\xd3\x13\x78\x7a\xfd\x2e\xa4\x85\x62\xea\x0f\x21\x8d\x34\xf7\x06\x90\x1e\x88\xf4\x10\x14\x16\xf6\x9e\xd3\x73\xa0\xac\x63\x8b\xf4\x00\xd2\xd8\x96\xde\x08\xf2\x85\xb2\xeb\x77\x2d\xea\xf4\xd1\xa1\x71\xfa\xdd\x11\x75\x84\xa1\x75\xfa\xbd\x1e\x75\xfa\x7d\x6c\x4b\x7f\x60\x52\xa7\x8f\x7c\x76\xfa\x23\x9b\x3a\x03\x13\xcb\x0e\xba\x90\xc6\x1e\x73\x06\x7d\x87\xc2\x0f\xa6\x01\x7e\x80\xce\x81\x03\xca\xdd\x91\xca\x77\x68\xf6\x28\xfc\x88\xf4\x00\xd2\x48\x33\x88\x8a\x33\x44\x49\x77\x86\x56\x1f\xd2\x7d\x91\x1e\x41\x5a\x94\x05\xfe\x0c\x45\xbf\x0c\x6d\x80\xb1\x05\x4c\xd7\xa4\xf0\x23\xd2\x5d\x48\x0f\x44\x1a\xca\x76\x45\xd9\x1e\x94\xed\x89\xb2\x3d\x80\x41\x87\xcc\x01\xa7\x16\x7e\x44\x1a\xe8\xe9\x0b\x78\xe0\xbf\x70\xc8\x9c\xe1\x10\xf2\x87\x02\xa7\x03\xf0\x8e\x80\x07\x7e\x0e\x05\x3f\x1d\x30\x12\x8e\xe0\x89\x03\x6d\x14\x4e\xb0\xe3\x58\x90\x6f\x89\x7c\x0b\xf2\x45\xbb\x1c\x30\x3c\x4e\x57\xa6\x1d\x48\x63\xbd\x0e\xf4\xaf\x23\xfa\xd7\x81\xfe\x75\x44\xff\x3a\x83\x11\x85\x1f\x4c\x8f\xfa\xd4\x11\x4e\x89\x03\xc6\xcf\x11\xc6\x6f\x04\xca\x62\xd4\x43\x47\x6d\x04\x32\x33\xea\xf7\x70\xac\x80\x73\x3f\xea\xa3\x43\x39\x1a\x98\x26\x0c\x1c\x1c\x57\x03\xcb\xa1\xa3\x81\x2d\x47\x91\x4d\x47\xa2\x1f\x47\xe0\xd4\x8e\x06\x3d\x91\xdf\x07\xf8\xbe\x4c\xf7\x20\x2d\xca\x82\x12\x1f\xc8\x11\x38\x80\xfc\x81\xc8\x1f\x42\x3e\xea\x8b\xd1\x60\x08\x78\x86\x32\x1f\xea\x72\x04\xfc\xc8\xa1\xa3\x21\xf2\x6a\x04\xfd\x3e\x12\x3a\x62\x04\x7d\x37\x1a\xa2\xe6\x1d\x0d\xbb\x43\x48\x23\xcd\xc3\x9e\x4d\x47\x43\x1c\x5f\x23\x70\xa6\x47\x43\xd1\x46\xe8\x2f\xf8\x11\x69\xc8\x47\xd9\x1b\x0d\x47\x00\x8f\x4e\xff\x68\x38\xea\x41\x1a\x71\x3a\x76\x8f\x8e\x1c\x94\x99\x91\x63\x0f\x21\x8d\x78\x1c\x50\x2b\x8e\xa8\xd7\x01\x63\xe5\x88\x7a\x9d\xee\x08\xd2\x42\xb7\x80\x01\xc7\x5f\x7c\xb2\x4c\x9b\x5a\xa6\x30\xaf\x30\x8b\xee\xd1\x41\x57\x50\x88\x13\x63\x34\xd2\x5d\x81\x03\x35\x91\xd9\x73\xfa\x62\x86\x84\xa9\x01\xc5\xe5\x11\x33\xb3\x80\x41\x7a\x5c\xbb\x73\x55\x5d\xa2\x69\x62\xdc\xf4\xe2\xdc\xb0\x70\xd4\x7b\xae\xb3\x17\xe5\x97\x13\xf3\x6c\x62\x9e\xdd\xdd\xb1\x97\x95\xfc\xf8\x6c\x62\x9d\x95\xbf\x60\x8c\xe3\x97\x5e\x32\xc6\x80\x7f\x5e\xe1\x8a\x4a\x3d\xd9\x8e\x8d\xe7\xb6\x41\x6b\x38\xb8\xc0\xe1\xf1\x6d\x2b\xdb\x6d\xb7\x55\x27\x01\x2f\x8c\x28\x6c\x14\x8e\x3d\xde\xb6\xee\x55\xd5\xf7\xaa\xcd\xa5\xa9\xf1\xc6\xa6\x67\x1e\x42\x53\xd3\xb3\x97\x95\xa6\xe7\xf9\x3f\xde\xf4\x1c\xc7\xc6\xa6\x97\xc0\x1e\x6e\xfa\xf4\xd2\x4f\xc4\xb4\xbf\xe1\x33\xcc\x9a\xb5\x83\x9d\x72\xc9\x23\x04\xc8\xde\xea\xcc\x70\xcb\x00\xaf\x83\x34\xa9\xc1\x54\xeb\xaf\x03\x35\x51\x64\x7a\x9e\xc7\x76\x4a\xeb\x1e\x2e\x7b\xd1\xb5\x81\xd3\x9e\x65\x0f\x5b\x2d\xf6\xc2\x1a\x98\x3b\xb5\x95\x10\x97\xbd\xb0\xec\xe1\x8e\xe5\x16\x85\x5c\x67\xc6\x8e\xe9\x5a\xdb\x3a\x7b\xe9\xf5\xba\x7d\xbb\xd5\xd2\xd9\x0b\xaf\xd7\xeb\x0d\xef\xee\x46\xa6\x69\x79\x1e\xc3\x84\x8d\x09\xa8\xc1\x1a\x99\x3d\xa8\xc3\xeb\xd9\xd6\xc8\x6a\xb5\x2c\xbb\xdb\xb7\xb6\xe4\xdb\x5e\xcf\xec\xda\xf8\xb6\xdf\xb7\xcd\x2e\xe6\xc1\x60\x14\x25\x06\x3d\xbb\xdf\x17\x79\x7d\xb3\x67\x8a\xbc\xbe\xd9\x1b\xa9\xbc\xa1\x2d\xf3\xac\xae\x82\xb3\x1d\x05\xd7\x1d\x0e\x64\x5e\x5f\x52\x30\xe8\xf7\x2d\x53\x50\xd5\xb5\x54\x61\x0b\xd4\xa1\x28\x8d\x49\x07\x73\xed\x81\x6d\xf5\xe4\x57\xe5\x0d\x3d\xb7\x56\x04\xca\xe3\x03\xb8\xd6\xbc\x74\xf4\x84\x7e\x4f\x79\x83\xd8\x65\x6b\x95\x72\xc0\x99\xe3\x38\x5f\xac\x34\x64\xd0\x52\x96\xaf\x01\xef\x72\x19\xa3\x47\xe7\x5e\xb9\x6a\x3d\x35\x8c\x17\xea\x92\xe8\xb6\x35\x4e\xb6\x3d\x4e\xe3\x6d\x2f\x55\xcb\x79\x96\x6b\xdf\x17\x23\xd8\x03\x49\x18\xdc\x72\xdd\x85\x16\x34\xc2\xc1\x1a\x7b\x26\x8d\x4a\x84\xb5\x5a\x5b\xba\x1e\x6d\x57\x09\x28\x2d\x78\xc6\x86\x61\xbc\xe4\x06\x46\xa8\x1a\x67\x01\x11\xb7\xbc\x44\xb4\x39\xf5\x62\x44\x9a\x16\x90\x46\x2f\xbc\x64\xfc\x00\xda\xd4\x30\x68\x0a\x28\xd5\x19\xfb\x97\x49\xab\x95\xb6\xdb\x54\x5d\x44\x1d\x44\x17\xe2\xc6\xd6\xec\xa6\xc2\xec\x16\xa5\x52\xa3\x4b\xdb\x5b\xca\xb7\x7a\x17\xa0\xc4\x9b\xb6\x08\x7c\x56\x0c\x7d\x89\xf7\x48\xcf\x62\xfe\x5c\x04\x55\x0e\xe3\x8b\xe7\x57\x2c\x49\x83\x38\x22\x94\x70\x76\xc3\x9f\x2f\x43\x3f\x80\x07\xab\x63\x0d\xf0\xec\xd2\x03\xc5\x67\x3e\x67\xd5\xb2\xb6\x69\x0d\xdb\xa6\xd3\x56\x18\xf8\x8c\x2d\xc5\x0d\xd6\x32\x9c\x02\x29\x46\xdb\xe8\x88\x3d\x73\x27\xb7\x4b\xb9\x19\x2a\xee\xfc\x1a\xc7\x8b\x2f\x7e\x02\x76\x41\x6d\x1c\x21\x7f\xff\xf8\xf1\xbd\xb6\xe5\x69\x96\x69\xfe\x99\xd0\x58\xc5\x00\x8d\x97\xb7\x19\xc8\x7f\xff\xbf\xfe\x4f\x78\x33\x63\xe9\x37\x1e\x2f\x3f\x00\x40\x20\xbe\x7d\x9e\x04\x3c\x04\x80\xff\xfa\xdf\xb4\x3f\xeb\x1c\x1e\x0c\xed\xbf\xff\xd7\xff\x06\xd0\x9c\xa5\xfc\x35\x5b\xa6\xde\x84\x5c\x72\x96\x2c\x3a\xc7\xd3\x24\x0e\xc3\xc3\x38\x11\x3b\x06\x52\x42\xf3\x17\x8c\x45\x95\xcc\x13\x96\x2c\x82\xc8\x0f\x2b\xd9\x9f\x4f\xea\x19\x7b\x7e\x14\xb1\x99\xc8\x3e\x43\xce\x5e\x04\x29\x67\xc9\x9b\x28\xe0\xba\x00\x23\x74\xdd\xd1\x6e\xe3\x7b\x89\x51\x1c\xc3\x60\xd2\x6a\xb4\x9a\x58\x05\x9c\x96\x8c\xbe\xbb\xd3\x9b\xef\x90\x97\xd1\x27\xaa\xcf\x18\xcd\x76\xa7\x8a\x45\x6e\x81\x2d\x47\xe4\xd3\x1b\x4a\x1a\xee\x03\x45\x31\xae\x93\xda\x50\xbe\x85\x06\xf9\xc9\x77\xdc\xbf\xf7\xa3\x60\xce\x52\xae\xd4\xcc\x7a\x08\xdd\x18\x27\x5e\xda\xf1\x97\xcb\x56\x0b\xff\x74\xce\xfd\xe9\xb7\x8b\x24\x5e\x45\xb3\xfb\x64\x67\x4d\xec\x19\x11\xf4\x95\x2c\xe3\xe5\x6a\x49\xee\x0d\x6a\x1a\x6e\x33\x8d\xdc\x3f\x4f\x77\x0a\x69\xfc\xe4\x2e\x36\xb9\xe6\x5b\x25\x60\x7c\xb6\x5a\x25\x04\xaa\x8c\xc8\x14\x71\xa4\x13\xf9\xf4\x66\x26\xc2\x19\x73\xc3\xd5\x4b\x1d\x4e\xa2\x38\x59\xf8\x21\xa9\x76\xb9\x71\x5f\x3e\xb4\x52\x6f\x88\x2c\x88\x2d\xb9\x37\x68\x8c\x64\x86\x01\x8b\xf8\x71\x69\x3f\x67\xf1\x9a\xd4\x0b\xc6\xf1\x4b\x5d\x10\x5d\x08\xd0\x23\x36\xc5\x10\xdc\x85\xd2\x6b\x9d\x91\xb5\xc5\x3b\xd7\x50\xa4\x84\xe4\x67\x16\x5c\x5c\x36\x1e\xbf\x5e\x8f\xe5\x12\xcb\x00\x9a\x69\xbc\x94\x37\xe9\xc2\x18\x8f\xf7\xc2\x60\x79\x1e\xfb\xa5\x8b\x3d\xc5\x4e\x07\xd6\x61\x37\x6c\xba\x17\x2f\x16\x7e\x34\xd3\x09\x94\x23\xc5\x40\x4b\x80\x6c\xe9\xa7\x9c\x1d\x24\xf1\x62\x3d\x9a\x8c\xb4\x12\x36\x2c\x48\x6a\x9b\xb1\xf1\x28\x96\xd2\x53\x0d\x01\xb3\x70\xb3\x88\xf7\x52\x59\x18\x8f\xed\x30\x97\x8f\xf3\xc7\x56\x0b\x7a\x71\x0b\x3d\x1a\x9d\x79\xdf\xef\xd5\xb8\xf9\x7e\x1e\xcf\x6e\x5d\xd6\x81\x3f\x34\x98\xc6\x91\xcb\x75\xd6\x81\x44\x73\xa4\x5d\xa9\x5b\x9e\x07\x0b\xff\x82\xa5\xcf\x01\xb0\x3d\x1a\x10\xf0\x32\x52\x0f\x8a\xa2\x42\x54\x5b\x97\x67\xf1\x14\x37\x4b\x88\x5c\x43\x86\xdd\x96\xea\xc9\xc0\xb8\xcf\x73\x75\x8d\xee\x67\x3f\x49\xf5\xf5\x0a\x97\x7e\x47\x1c\x6e\x7a\xaf\x2e\x6a\x02\x6d\x50\x04\xd3\x53\x9a\x14\xae\x67\x8a\xa3\x69\x18\x4c\xbf\x15\x77\x42\x48\xaa\xe6\xf1\x74\x95\x66\x57\x34\x85\x31\x5e\xd6\x4b\x23\x60\x70\x45\x8a\xb3\x23\x2f\x28\x6c\x6a\xe3\x99\x90\x19\x8f\xab\x02\xe5\x3b\x3e\x7e\x23\x86\x69\x18\x47\xac\xe1\xf4\x3f\xb4\x56\x00\xeb\x39\xbe\x22\x36\xa3\x01\x19\x0c\xe6\xb8\xbe\x11\x46\xd2\x52\xc7\xe1\xb1\xc2\x80\xa8\xe0\x62\xff\xb1\xf2\xc3\x46\x6f\xb1\x80\x53\x21\x95\xbb\x62\x24\xd6\x4d\x68\x37\x6c\xb4\x9d\x48\x53\x19\xfc\x9a\x6f\xa8\x45\xec\xf2\x98\x63\x5e\xc3\x36\x39\x23\x80\xfb\x28\xbe\xde\x8b\xc3\xe6\xdd\xd4\x49\x7c\xad\xd8\x3f\x8d\xc3\xd5\x22\x52\x5b\xa9\xe3\x2b\x96\xcc\xc3\xf8\xda\xdb\xda\x4a\x72\x24\xc5\x6d\xf0\xf1\x55\xfd\x1e\xc6\xdf\x88\x73\x73\x37\x0b\x70\x5d\xd5\x51\xac\xa1\x8c\xdf\x68\x44\xbe\xa6\xdb\x91\xda\x2a\x3e\xf4\xac\xeb\x88\x3d\x96\x25\x1b\xab\x78\x40\x1a\xa0\x2a\x51\x97\x94\x04\x59\x59\x56\x9b\x8a\x19\xa8\xaa\x7b\xa8\xbe\x87\xc5\x44\x14\xc9\xb7\x54\xc7\xd7\x05\x31\x11\x95\x16\x32\x54\x65\x42\x72\x4a\x7e\xe5\x9c\x80\x61\x3b\x48\xfc\xc5\x9a\x5e\xe7\xd2\x4d\xcb\xa2\x7d\xcf\x82\xab\xaf\x1e\xc3\x3f\x22\x63\x95\x84\x99\x24\xe0\x19\x8d\xd4\x4b\xf2\xd0\x04\xc1\x1c\x70\x17\xb7\x14\xc3\x9c\xd5\x0f\x22\x96\x14\x33\xe5\x3d\xf4\x7b\x97\xe0\xea\x85\x6a\x43\xbe\xa4\xac\xb4\x7b\x39\xdb\xea\x5c\xec\x0e\x15\x05\x0a\x03\x18\xe1\x55\xd4\x32\x1e\x54\xb0\x9c\xb6\x83\x28\xe0\xed\xf8\x1b\x71\x65\xa7\xe5\xe7\x6e\x52\x16\xcd\x94\x1f\xfa\x26\x9a\xc7\x5f\x75\x63\x8c\xc5\x54\xab\xdb\x41\x34\x8f\x8b\x65\x2b\x2d\xe8\xa4\xfc\x36\xc4\x08\x2e\xcb\xd0\xbf\xf5\xc8\x3c\x64\x37\xa4\xb1\x45\x9d\x65\x9c\x70\xab\x13\x47\x32\x5f\x9d\x70\x91\xcd\x29\xee\x40\x2e\x9e\x0b\x7a\x17\xfb\x33\xdd\x18\x4b\xdf\xb0\xd4\x82\x52\x00\x97\xca\x7d\xfe\xda\x3c\x89\x17\x1a\xb2\xde\x25\x54\xb0\xc5\xb8\xdf\xc8\xd0\xa2\xb0\x35\x03\x02\x2d\xf5\x4d\xe3\xb5\x9e\x63\xd7\xda\xfb\x52\xde\x8f\xf0\xa3\x7e\xce\xa7\xb9\x3c\x6e\x9a\x56\xe6\x4d\xca\x1a\xf6\x0f\xfa\x59\x68\x01\x97\x71\xca\x25\x56\xfd\x3b\x86\xc9\xc9\xa4\x82\x50\x3f\xb9\xb8\x72\x27\xdf\x25\x72\x98\xbb\xb8\x6b\x6b\xb3\xef\x55\x54\xbf\x55\x12\xd2\xc9\x7a\xb8\x33\x63\x3d\x03\x1f\x62\x73\x4d\x24\x4b\xe7\x86\x3a\x73\xbc\x65\x7f\x3a\x65\x4b\xfe\xce\x8f\x2e\x56\xe0\x98\xe8\x35\xe5\x57\x6c\x72\x59\x96\x09\x9d\x7c\xf7\xcb\xc5\x5d\x46\xe7\x71\xc2\x84\x77\xbf\x17\x87\x71\xe2\x96\x47\x3e\x54\x79\x50\x86\xd0\x0d\x9a\xcf\x08\xd6\x95\x79\x55\x86\xd0\x0d\x3a\x5d\x25\x69\x9c\xac\x83\xdf\xcb\xdf\xea\x06\x9d\xc7\xc2\xcf\x6e\x24\x46\xbc\x92\x50\x07\xfe\x22\x08\x6f\xd7\xc0\x89\x97\x48\x6f\xca\x3e\x1d\xbd\x73\x25\x0f\x3f\x1d\xbd\xc3\xeb\xf9\xef\xcf\xaa\x77\x16\x37\xf5\xdc\x1e\x38\x4e\x7b\xe0\x62\xb1\x86\x21\x90\xb9\x55\xf5\xa2\xf8\xaa\x61\x77\xab\x52\x20\x99\xc5\xc8\x34\xca\xd2\x87\x79\xd0\x87\x78\x96\x05\x65\x6b\x7c\x59\xbc\x21\xb3\x0a\x96\x9d\x8e\xdd\x13\x84\x6d\x6a\xd4\x43\xf2\x58\x10\xa5\x86\xdd\xda\x4d\x63\xa0\x7e\x4f\x91\x2c\xaf\x4d\x05\x84\x16\xa4\x78\x7c\x26\x65\x5c\x5b\x2d\x3b\xea\xfa\xf1\xe6\x01\x5e\x1f\xbd\x4c\x0c\x5a\x7e\xdf\xd8\xac\xf4\x32\xbe\x2e\xb6\x29\x5b\x0a\x60\x78\xb7\x67\x36\x13\xc1\x78\x50\xca\x60\xed\x64\xa9\x09\x3b\x73\x93\xfb\x3c\x14\xb0\x3c\x34\x9c\x47\xdf\x78\x54\xcf\x19\x4a\x37\xab\x03\x7a\x40\xa4\xe6\xcb\x8b\xd7\xaf\x82\x34\x38\x0f\x19\x11\x7b\xf6\xe4\x56\xf7\xca\xec\x52\xcf\x6c\xad\x41\x03\x8f\xe9\x04\x7d\x41\x42\x07\x3d\x13\xa6\x12\x4c\x27\xc2\x19\x24\xb4\xe7\x98\x78\x51\x64\x22\x3d\xdc\x44\xba\x89\xb4\x32\x1e\xd4\xf4\xe4\xab\x41\x7d\xaf\x66\x88\x55\x14\x9e\x90\x01\x8c\x4e\x66\xc1\x15\x31\xc6\xbe\xb4\x6f\xd3\x34\x3d\x61\x37\xdc\x23\xcb\x38\x0d\x44\x10\x25\xff\x3c\x8d\xc3\x15\x67\x63\x69\xfb\x5c\x2d\x8a\x23\x36\x06\x03\xd8\x9e\x05\x89\x98\x59\xba\x9a\xf0\x45\xc6\x3c\x5e\xba\x9a\x65\xfe\x79\x1c\xb2\x39\x77\xb5\xde\x9f\xc7\x48\xac\xab\x8d\xcc\x3f\x8f\x05\xbd\xae\xe6\x98\x7f\x1e\x2f\x82\xa8\xad\x9e\x6d\x78\xf6\x6f\xda\xc5\xf7\xe7\xf1\x4d\x3b\xbd\xf4\x67\xf1\xb5\xab\x99\x9a\xa9\xd9\xcb\x9b\xfc\x60\xe2\x26\x7d\xb5\x4d\xc6\xe7\x71\x32\x63\x89\xfb\x94\x32\x5a\x1a\x87\xc1\x6c\x4c\x70\x16\x16\x7a\x65\x8f\xa6\xca\x33\xf1\x82\x18\xe3\xb0\x13\x47\x21\xe8\xfa\x82\x11\x2f\x19\xb4\xb0\xca\xd7\x8c\x89\xc0\x3f\x64\xa2\xab\x59\x8a\x47\x62\xe1\x2e\x04\x4f\x77\x97\xf3\x24\x38\x5f\x71\xa6\x93\x34\x99\x92\xcc\x1a\x19\xf5\xd7\xcc\x5f\x84\x2c\x4d\x09\xdd\x32\x0d\xea\x77\xfc\xe5\x92\x45\x33\xa1\x2e\x42\x23\x77\xe5\x4a\x2f\x7c\x71\x3c\x42\xfa\x87\xc2\xd5\x7c\xcb\x6e\x71\x4e\x0f\x89\xf7\xfe\x12\xfd\x45\x95\xd7\x74\xec\x40\x30\x54\x79\x8b\xdf\x24\xa4\x64\x52\xd1\xe5\xbb\xf4\xa3\x59\x28\x02\x82\x4f\x08\x4e\x53\xe3\x15\xcf\xae\x7f\x38\x80\x8c\x8f\xe5\xb3\x59\x67\x74\x42\xbe\xb1\xdb\x59\x7c\x1d\x65\x70\x6f\xd9\xed\xeb\xf8\x3a\x6a\x00\x5b\x26\xd8\xfc\x1c\xee\x10\x32\x1a\x00\x57\xcb\x22\xd4\xa7\x65\x15\x84\xb3\x1b\xfe\x26\x5a\x16\x88\x3b\x51\x39\x25\xd0\xb3\xac\xc9\xef\xfd\xa5\x27\x26\x37\x15\xee\x15\x1d\x1a\x28\x19\x44\x17\x69\x15\xf2\x95\xcc\x2f\xc2\xfa\x21\xff\x29\x79\x1f\xcf\x70\x39\x2b\x52\x97\x64\xe0\x61\xf6\x37\x51\xca\x12\x7e\xe8\xa7\x9c\x79\x5b\x72\x0b\xfe\x65\xbc\x60\x6f\xd9\x6d\x2a\x56\x64\xb3\x30\x5d\x4b\xff\xa2\x29\x7b\xca\x93\xf0\x30\x5c\xa5\xef\x83\x68\x95\xfe\x9d\x25\xf1\xdf\xe3\x78\x91\xe1\x82\xb7\x7b\x7b\xf1\xf2\xb6\x04\xff\x59\x56\x28\xb3\xfc\xa5\x08\x46\x18\x20\x0b\x97\xfe\xac\xe9\x8d\xb0\xef\xd9\x1b\x70\x20\xd2\xa5\x3f\x65\xc7\x2c\x9a\xa5\xaf\xd4\x53\x5e\xcd\xa5\x9f\xf8\x53\xce\x92\xfd\x68\x1a\x03\x47\x3c\xb2\xe2\xf3\xb6\x93\xf9\xd7\xdc\xc7\x92\xfb\xe9\xd4\x5f\xe6\x6d\x5f\xfa\x69\xfa\x9e\x71\xff\x73\x96\xe3\x87\x1c\x01\xbf\x5c\xfa\xdc\x23\x0c\xc1\x49\xf6\xea\x0d\x42\xe7\xf4\x86\x3c\x23\x45\xbc\xaa\x53\xe6\x87\x5c\x89\x13\x9b\xa9\x23\x25\x0b\x36\x0b\x7c\xe0\xee\x6e\xc2\x0e\xe0\x6f\xce\xf6\x84\x5d\x05\xf1\x2a\xdd\x2d\xd0\x91\xcf\x70\x8a\x12\xb2\x3b\x15\xf3\xa7\xef\x7b\xbb\x1f\xf6\xf6\x85\xaf\x52\x0c\x8f\x26\xb2\x89\x41\xe5\xe5\x5e\x35\x00\x99\x4f\x0c\x7a\xb8\x7b\x7c\x5c\x7b\x0d\x99\xc4\xa0\xc7\x27\x47\x6f\x0e\x6b\x2f\x31\x97\x18\x25\x9a\x0a\x73\xe0\xa8\x76\x16\x46\x4e\x49\x45\xa7\x78\x5e\x73\xa7\xed\x94\xd4\x42\xe7\x8a\x17\x76\xf1\xeb\xcc\x70\xd9\x9a\xfa\xf0\x30\x5b\x18\x36\x6a\x1a\x71\xec\xad\x51\xbf\x18\xdf\x99\x34\xcc\xd5\x37\x32\xbb\x82\x17\x17\x7c\xf3\xeb\xe9\xb9\x67\x8e\xf9\x8b\xb2\x7a\x52\x5f\xe7\xb8\x3a\x4a\x20\xa3\x13\x64\x00\x13\x7e\x36\x66\x3b\xac\x7e\xa7\x4d\x32\x31\xcf\x68\x32\xb1\xce\xe4\xf9\xcc\x2a\x49\xd2\x87\x5b\x57\xe8\xbe\x59\x83\xb2\xfb\x35\x2c\x5b\x45\x6b\x99\x26\xb5\x73\x63\xe3\xd7\x60\x2b\x6a\xb9\x72\x94\x2b\x9c\x4d\xb6\x5a\x72\xb2\x2d\x0f\xb9\x11\xa3\x7c\xe3\x6c\xd6\xe3\x71\xf4\xf9\x04\x86\x03\x4f\xe2\x6f\x85\x69\x6e\x06\x60\xac\x27\x20\xd3\xd9\x0d\x8b\xc0\x4d\xc7\x09\x58\xe7\xfa\x32\x98\x5e\x1a\x1d\x1e\xbf\x8b\xaf\x55\x8c\x67\xbc\x3d\x93\xa1\xd6\x7a\xcb\x6e\x5b\xad\x2d\x86\xba\xe3\x2d\xbb\xbd\xbb\x23\x53\x82\x77\x3a\x90\x2b\xf8\x2b\x6f\x0b\x12\xc3\xbb\xd5\x22\xe7\x49\x7c\x9d\xb2\xa4\xfd\x8d\xdd\x2a\xf9\x2e\xea\x92\x56\x0b\x43\xbf\xa9\xaf\x95\x4a\x38\x9a\x29\xfb\xc6\x6e\x11\x68\xcc\x84\xda\xc6\xea\xf5\xc4\x4b\xca\xc4\x1a\x34\x29\x7e\xfe\x34\x8d\x6d\xcb\x76\x54\xfc\x7f\xf5\xe2\xa5\xd7\xb5\x5b\x2d\x3d\x29\x56\x3e\x4e\xa4\x80\x37\x33\x5e\x6f\xa2\x2a\xc1\x90\x95\xa0\x9e\x58\xa4\x02\xa8\xca\xc8\x50\xf1\xf2\x30\x89\x97\xfe\x85\x58\x6c\x36\xd6\x89\x9c\x2c\x2b\x3e\x6c\xed\x2e\x97\x1f\xe2\x68\x8f\x27\xe1\x31\xb4\x50\x22\x2c\x77\x5e\xe5\x83\x50\xe9\x51\x7c\x6f\xaa\x65\xc9\x8f\x39\xad\x96\x5e\xe8\xc4\x22\x17\xeb\x4d\x58\x2f\x52\x99\x5b\x51\x77\x5d\x2a\x5a\x7d\x93\x54\x7e\x5a\x96\xcb\x5b\x0e\x08\x82\xec\x62\x35\x6d\x2b\xe3\xab\x67\xb5\xfe\xa1\x5b\x2f\x5e\x30\xbc\x1e\x0b\x10\xb5\x2d\xc3\xa0\xf6\xb0\x84\x29\xb3\x1f\x0f\x31\x19\xb7\x1d\xac\x27\x18\x5d\xa4\x75\xd1\xaf\x63\xe3\x7b\xe0\xc5\xf2\x43\x43\x32\x89\xcf\xd4\xcd\x81\x0a\x26\x3f\xf3\x1c\xb5\x5a\x7a\xe4\x45\x32\x92\xab\xf2\x75\xe8\x84\xd1\xe4\xcc\x80\x69\x88\xe7\xf9\xad\x96\xfa\x72\xb6\xe5\xc5\x08\xcf\x75\x95\x03\x30\xf7\x3f\xc4\xad\xbb\x2a\xaf\x7e\x0b\xab\x8a\x81\xb9\x44\x13\xe0\xcf\x6b\x36\x4f\x27\x19\x46\x11\xa3\x53\x1d\x1e\x43\xb7\x55\xc4\x13\xa1\x91\xd7\x68\xb5\x3b\xc2\x3a\x53\x7f\xcd\x6b\x69\x9b\x69\xb8\xe6\x3d\x18\x67\x7a\xb9\xe6\x25\x1a\x67\x3a\xf5\xb2\x21\x40\x57\xde\x56\xd9\x85\x81\x41\x21\x58\x46\x73\x06\x8a\x57\x3b\xea\x0d\x0c\x16\xa9\xfc\xdc\x2c\x45\x97\xde\xd6\xf3\x5f\x4e\x27\xa7\xd7\xdb\xa7\x67\xea\x7a\xee\x04\xf9\xe0\x2f\x0d\x15\x61\xbf\xec\x87\xca\xe5\x55\x20\xa6\xed\x87\x9c\xb8\xcb\x56\x6b\xda\x6a\xad\x5a\x2d\x1d\xc3\xc2\xae\xbc\x2d\xcb\x18\x9f\x27\xcc\xff\x26\x56\x54\x13\x98\xc3\x65\xa0\x76\x45\x57\x29\x23\x57\x19\x21\xeb\x90\xc1\x2c\x32\xc3\x65\x3d\x1d\x17\x4e\xf0\xe7\xe3\xb9\xc7\xf5\xe9\x0e\x91\x9b\xa8\x88\xbb\xda\x21\x88\x74\xb6\x43\x80\x35\x24\xfb\x04\x2c\x04\xe6\xc2\x03\xd3\xe1\xa7\xdf\x8e\xa5\xea\x29\xaa\x21\xba\xf0\xbe\x4b\xc9\x71\x33\x19\xa2\xf8\xd6\x2d\x40\x01\xc3\xdc\x29\xf5\x43\xee\xae\x28\x54\xe2\xce\xee\xe9\xad\x57\x9a\x10\xe0\xda\x99\x48\xeb\x0b\x34\x5f\xb7\xad\x96\x7e\xe1\x4d\xbd\x95\x87\x8e\x75\x90\x7f\xd4\xae\x8f\x51\x7d\xee\xdd\x76\x7c\xcc\x33\x5a\x2d\x7d\xee\xcd\x3b\x53\x3f\x0c\x65\xd0\xad\x22\xa7\xe8\xc2\x30\x0c\xba\x7a\x8c\xa1\x9b\xe3\xb8\xd6\xe7\x5e\x68\xd0\xf9\x96\xe7\x85\xf0\xb0\xe5\x79\xfe\xdd\xdd\xf4\xee\x6e\x75\x77\x37\x13\x75\x79\xde\x65\xab\xa5\xaf\x3c\x64\x75\x23\x6d\x49\x47\x90\xae\x68\x2b\xdc\x82\x50\x51\x26\xa2\x4e\xdb\xf3\x94\x28\x66\x1b\x87\x10\x8d\xcc\x93\xfb\x76\x2e\x76\x2c\xd7\xa4\x96\xf1\x68\x8b\x86\xcd\x88\x0c\x23\x98\x23\xd9\xfe\xdd\x5d\xed\x7a\x9e\xb9\x88\xfb\xa0\xc4\xc3\xf3\x82\x1d\x68\x97\x8b\x42\x02\x4f\x2b\x7c\x42\x51\xf1\xbc\xa0\xd5\xd2\xa1\x77\x0c\x4a\xfe\x34\x21\x9e\x37\x57\xa4\x99\xd4\x86\xc6\xae\x90\x55\x17\x32\x00\xc3\xf9\x78\xeb\x02\x19\x37\xdd\xd9\x5a\xdd\xdd\x5d\x40\xe2\x02\xc7\xcf\xd6\x74\xe7\xdc\x23\xe3\x1e\x71\xb7\xa6\xf8\x62\x05\x2f\xa6\xad\xd6\xd6\x0a\x5f\x0c\x88\xbb\x12\xcf\x17\xf8\x3c\x24\xae\x28\x38\x6d\xb5\x74\xc8\x70\x88\xe1\xc2\xdf\x3e\xc1\x3f\x5d\xf1\xc7\x26\x74\xee\x75\x81\x2c\xc1\xc5\x1d\xf2\xa7\x89\x45\xb6\xcf\xb7\x33\x3a\x6d\x6a\x19\x6e\x81\xea\x79\xb6\xfd\xd3\x28\x82\x15\xb2\xef\xd5\xd6\xcc\xb9\xa7\xe4\x63\x5d\xbf\x50\xa0\xee\x6b\xed\x35\xbc\x2a\xfb\x3b\xc6\x4b\x6f\xd0\x6b\xb5\xbe\xbe\xf0\x46\x7d\xc4\xd8\xe4\xb8\x7c\x6d\x0f\x7a\x4a\x76\x9d\xf6\x79\xc0\x9b\xa5\xd6\xca\x9b\x2b\xb8\xfe\x15\x06\x43\xd5\xbb\x1a\xaf\xa9\xc3\xb8\xd7\x01\xbf\x9c\x2f\x36\x54\x70\x77\x37\x93\x66\xa7\x32\x17\x15\xb2\x4d\xfe\x44\xb6\xe7\xd2\x89\x5f\xe3\x94\xcd\xe5\xf5\xda\x6a\xb9\x50\x44\xdf\x7a\x13\x5d\xf9\x61\x30\xd3\x7c\xb9\x86\x46\xb6\x2b\xc1\x42\xe6\x46\x63\xb9\x0f\xb1\x36\x63\xf3\x20\xc2\x15\x3a\x8c\x4f\xa9\x14\x12\x86\xa8\x54\x1e\x68\xc9\x4f\x50\x8b\x0d\xf5\x18\x0a\xf2\x85\xb8\x9d\xad\xa1\xc4\xfa\x9b\xcd\x7e\x00\x83\x3f\x9b\xc9\xdc\x6a\xc4\x18\x79\x9b\x01\x98\xdf\xa0\xac\x26\xbf\x56\x6c\x75\x90\x85\x4f\x13\xb1\xb7\x83\x62\xec\x6d\x78\x3f\x49\xcf\xa0\x80\x0c\x63\x2d\x82\x71\xbc\xcd\x9e\x75\x66\x18\xdf\x13\x0f\xa0\x84\xa9\xb9\x4f\x76\x12\xa9\x48\x3d\xee\xea\x09\xea\x77\x09\xec\x32\x2a\x7b\x87\xdf\xd3\x40\x46\x1c\x68\x22\x4c\xdd\xfc\x40\x83\x4e\x1a\x27\x85\xed\x4d\xd8\x38\xb9\x18\x5d\x36\xf9\x8a\x3e\x80\xdf\x8b\x17\x4b\x3f\x91\xf3\x07\xf9\x82\xf2\xc2\x83\x71\xaf\x82\xff\x34\xd5\xee\x4d\x92\xb3\xe6\xfe\x6e\xe4\x7d\x7d\x81\xbf\xa6\x13\xb3\x59\x8e\x58\xb4\x3a\xf4\x93\x94\x25\xe3\xa4\x93\x30\xbc\xd1\x56\x18\xca\x00\xe3\x66\x06\x5e\x22\x6e\x34\x7b\xcb\x6e\x8f\xd9\x7f\xac\x58\x34\x65\x0d\x91\x17\x4b\xdf\x32\x65\x1c\x5c\x8c\x6c\x93\x74\x82\x34\x8b\x3a\x64\x34\x93\x03\x3c\x94\x75\x73\x43\x44\xeb\x2c\xd4\xba\x2b\xe5\xf1\x91\x75\xde\x97\x6b\x14\x2b\x17\x05\xc9\xd4\xeb\x4b\x7a\x4a\x76\x02\x83\x72\xc3\x2d\x63\x4c\xf2\xa8\x9c\x2a\x20\x63\x34\xd3\xe2\xb9\x96\x4a\x66\x60\xec\x9c\xea\x50\xfe\x91\xb2\x35\x42\xc5\xd5\xbd\x8f\xed\xf6\xb4\x79\x87\x72\xe1\xfe\xcb\x1c\x56\xe7\x94\x4d\xf8\xc3\x42\x95\xbb\x30\xeb\xee\x58\x5c\x37\x8c\xb3\xd8\x50\x1a\x46\x60\xad\x5c\xda\xdd\x10\xd7\x81\x4f\x12\x31\xfe\x9b\x06\x37\x4c\x7c\x60\x64\x67\xb1\xee\x0b\xb8\x37\x2e\x75\x4b\xc7\xbb\xb4\xdc\x2d\x17\x71\xeb\x53\x47\xe5\x72\x16\x56\xbd\x61\x32\xe1\xa9\x4d\x10\x42\x42\x8d\xea\x72\x1f\xcc\x3b\x4a\x1d\xf2\x16\xcb\x55\x86\x61\x7e\x03\x8c\x44\xdb\x6a\x95\xf5\x7e\x7e\x13\x4c\x51\xdf\x1b\x25\x52\xf0\x36\xa8\x47\xd6\xbf\x46\x1e\x70\x69\xac\x1a\x11\x08\x57\xc5\x94\x8c\x88\xe2\x7a\x06\x23\xce\x67\xd0\xef\xc2\xe6\xbb\xa5\x7c\xeb\x8c\x0a\x47\xb0\x9c\x6d\x9f\x51\xe9\x6f\x95\xf3\xbb\x67\xe8\x33\x97\xf2\x7a\x67\xc2\x83\x2e\x65\xf6\xcf\xee\x1f\xe0\x33\x76\xc6\xda\x4f\x84\x85\x8d\xe1\x0d\xf3\x5f\x5c\xe6\x43\x8f\x75\x4a\x27\x1c\xfc\x54\x97\xdd\x57\x2f\x92\x92\x22\x96\xd5\x10\xd0\x38\xff\xee\xa8\x07\x85\x95\x8b\x40\xcd\xe6\x20\xa9\x66\x68\x41\xbe\x3c\xb5\x35\x2d\xcc\x66\xaa\x0b\xe9\x3b\xdc\x4d\x28\xe0\xbe\xcf\x29\x48\x1e\x43\x41\x01\xe9\x9a\x35\xf8\x9d\xc4\xe5\x55\xd4\xc1\x06\xd4\xc2\xe8\xe6\x2d\x83\xf2\xe3\x6c\x77\x7d\x71\xca\xe4\x6d\x99\x94\xe9\x69\x15\x79\xfa\x38\xce\x09\x16\x35\x51\x17\xfd\xbe\xac\x6f\xaa\xc2\x2f\x18\x90\xe6\x35\xbe\x92\x6b\x09\x2e\x6a\x5e\x38\x2c\x14\xce\xa8\x2b\x92\xcc\xc5\x95\x6d\x98\x57\xa8\x14\xaf\xc3\xa9\x96\x4b\x68\x90\x65\x16\x3a\xb3\xf6\x05\x62\x87\x01\x3a\x1a\x18\xae\x35\x18\xa8\x79\x54\x3c\x63\x77\x77\xd6\x60\x58\x79\x76\x0a\xcf\x3b\x9b\xd6\x37\xdc\xf5\xab\x17\xf7\xf7\x15\xed\x87\xde\xc0\x54\xac\x9a\xac\x36\xaf\x9a\xcc\x1e\x58\x35\x59\x6e\x5a\x35\x99\x6f\x5a\x35\x19\x97\xd5\x53\xaa\x4f\x4c\x4a\x26\x9f\x3e\xbc\xfd\xf0\xf1\xcb\x87\x33\x42\x97\xe2\x7f\x78\x64\x9c\x92\xc9\xfe\xf1\xde\x19\xa1\xe4\x4f\x84\xce\xe0\x7f\x78\xa6\xd9\xa6\x64\x72\x60\x9d\x11\x1a\xe9\xe4\x4f\x1f\x0f\xe1\xf5\xe4\x90\x18\x74\x06\x09\xbb\xfb\x0f\x22\xe1\xba\x00\x67\x2b\xb8\xbf\x22\xdc\x5f\x33\xb8\x5e\x06\xd7\x03\xb8\xae\x82\x3b\x42\xb8\xa3\x0c\xae\x9f\xc1\xf5\x01\xae\xa7\xe0\x8e\x11\xee\x38\x83\x1b\x64\x70\x03\x80\xeb\x23\xd9\x13\x0b\x8b\x23\x80\x93\x01\x40\xc3\x0e\x06\x12\x60\x98\x01\x8c\x32\x00\x07\x00\x86\x12\xc0\x51\x00\x5d\x2b\x03\x18\x01\x80\x23\x01\x46\x19\x80\xad\x00\x6c\x60\xea\xc1\x48\x00\xd8\x66\x06\x90\x31\xc7\xb6\x90\x89\xa6\x84\xb0\x32\x88\x8c\x2d\xb6\x60\xb3\x25\x21\xba\x0a\xa2\x97\x57\x82\x0c\xb6\x6c\x09\xd1\xcb\x20\xb2\x5a\x46\x36\x25\xff\x05\xb3\x03\xdd\xd7\xc9\xbf\x10\x83\xfa\x3a\xf9\x85\x18\xc0\xb4\x25\x46\xef\xa0\xc4\xda\x02\x80\x50\x27\x62\x75\xf0\xc3\x6a\xf1\x95\x18\xe2\x79\x37\xe4\xc5\xc7\xf7\x8c\xfb\xe2\xf9\x8c\x4e\xfa\x26\x25\xf6\xbf\xfc\x58\x51\x8b\x92\xee\x3f\xfd\x58\x51\x9b\x92\xde\x3f\xff\x58\xd1\x2e\x25\xfd\x3f\xff\x58\xd1\x1e\x25\x83\x5f\x7e\xac\x68\x9f\x92\x61\xeb\xc7\x8a\x0e\x28\x71\xfe\xf2\x63\x45\x87\x94\x8c\xf4\x1f\x2a\xda\x73\x28\x31\x8d\xac\x68\xe9\x53\xf8\x3a\x04\x55\x20\x0c\x83\x31\xa2\xa4\xfd\x75\x3d\x9e\x35\xf9\x58\x74\x48\x89\xb7\xfd\x43\x45\x87\xdd\x1f\xad\x75\x60\xfd\x78\xa5\x16\x25\xdb\x7f\xf9\x91\xa2\xa0\x68\x5e\xbd\x3d\x3e\x3c\x23\x34\xd1\xc9\x7f\x12\x4a\x4e\xcf\x89\x01\xe9\xd3\x73\x42\xc9\x7f\x62\x61\x18\xca\xa0\x70\x4e\x76\x5f\x9d\x11\x1a\xe8\xe4\x94\xe3\x88\xff\x3b\x31\xe8\x9c\x2e\xf1\xbd\x63\x51\xf2\x1f\x7f\x05\x12\x7c\x9d\xfc\x35\x2b\x06\x9c\xbc\xfe\x22\xb3\xbf\x64\xd9\x83\x11\x25\x6c\x5f\x66\xef\xe7\xd0\x36\x25\xc9\x91\xcc\x3e\xca\xb3\x7b\x94\xf0\x13\x99\x7d\x92\x67\x8f\x28\xb9\xfd\x37\x99\xfd\x6f\x79\x76\x9f\x92\xd5\x27\x99\xfd\x29\xcb\x86\x8e\x09\xde\xc8\xec\x37\x79\xf6\x88\x92\xf8\xa3\xcc\xfe\x98\x23\x31\x29\x59\x1e\xca\xec\xc3\x2c\xdb\x46\xc5\xfb\x5d\xe6\x4f\xf2\x7c\x50\xa7\x67\xf7\x32\xff\xac\x90\x6f\x52\x72\x7a\x7a\x27\x5f\x9c\x9e\xe6\x6f\x40\x41\xef\xed\x1e\x1e\x67\x26\x0f\xf9\xd2\xa7\xc4\xdf\x95\xd0\xbb\x39\x35\x5d\x4a\xd2\x63\x99\x7d\x9c\x73\xd1\xa1\x64\xf6\x5a\x66\xbf\xce\x9b\x64\x52\x32\x3f\x90\xd9\x07\x79\xb6\x45\xc9\xc5\x4f\x32\xfb\xa7\x3c\xdb\xa6\xe4\xf2\x67\x99\xfd\x73\x9e\xdd\xa3\xe4\xdf\xff\x35\xd3\xdc\xff\x4a\x0c\xba\xcc\xde\xf5\x29\xf9\xf6\x36\x7b\xf7\x56\x8d\xc2\xbd\x90\xf9\xc9\x57\xa1\xdc\x11\x6e\x40\x49\xf8\x2e\x83\x7b\x57\xc4\x61\x39\x03\x4a\xc6\x2e\xbc\x9c\x67\xcc\xb2\x29\x79\x76\x4a\x8a\x79\x68\xc3\xf7\x3f\x9c\xec\x1f\x81\x91\x39\x4d\x08\x5d\xd1\x95\x78\x03\x56\xf6\xf8\xe7\x37\x07\x27\x25\x0e\x8e\x4c\x4a\x7e\xfd\xbb\x6c\xce\xdf\x73\x0e\x3a\x94\xdc\xfc\x4d\x66\xff\x2d\xe7\xe0\x90\x92\xe9\x5e\x49\x4d\xed\x15\x06\x0c\xe8\xa5\x3d\x39\x50\x06\x94\x5c\x7d\x2e\x41\x7e\xae\x40\x7e\x96\xe3\x78\x40\xc9\xf9\xab\xac\xd5\xaf\x54\xab\x03\x7d\x46\x97\x00\x30\x74\x28\x89\x3e\x94\x75\x63\x05\xd5\x07\x81\x6a\x38\xa4\x64\xf1\x5e\x52\xfd\x9e\xe4\xbc\x73\x28\xa1\x2f\x20\x3f\xd5\xe7\x05\x9e\x42\xe3\x3b\x2f\x1b\xf2\x2d\x4a\x9e\xef\x64\x24\x7d\x15\x66\x78\x27\xef\x29\xf4\x48\xf6\x4e\x8e\xde\x95\x1c\x30\x74\x43\x76\xdf\x9d\x94\x32\x01\xd7\xe4\xdd\xee\x61\x19\xb4\x6b\x53\xa2\x49\x42\xff\x25\x57\x1a\xe0\x42\x1c\x55\x61\x47\xd0\xa7\x47\xef\xf7\x3f\x7c\x2a\x65\xf7\x00\xf8\xf0\xe8\xe4\x78\xef\xa8\x4c\x45\x0f\xfc\xae\xe3\xbd\xa3\x77\x6f\xcb\xf9\x30\x14\x5f\x1d\xed\xef\x96\xb3\x11\xfa\xcd\x87\xe3\xfd\x23\xa0\x1b\x39\xfa\x96\xdd\x8a\x6d\x59\x82\xcb\x82\xb6\x2e\xc8\xcf\xcf\x1f\xdf\xef\x17\xa0\x7e\x8e\x17\xac\x04\x03\x94\x1e\xfe\xf4\xe9\xb0\x00\x73\xe8\x5f\xb0\x4f\xcb\x22\x54\x0f\x30\xbd\xde\x7f\x57\x00\x7a\xcd\xc2\x12\x9e\x3e\x4a\xf1\xeb\x02\xc4\x7e\x34\x2b\x41\xf4\xb0\xa6\xd7\xc2\x07\x2e\xd6\x85\xdf\x8a\x8b\x90\xd0\x29\x25\x8a\x76\x93\x24\xbe\xae\x90\x04\xda\xa5\x82\x0c\xc1\x6a\xd8\x80\x89\x47\x6f\x7e\xfa\x19\x98\xc5\x75\xf2\xa7\xc9\x1e\xa8\xf6\x8f\x7b\x45\x18\x10\x8e\x77\xfb\x07\x19\xc8\x6b\x04\x79\x5d\x00\xb1\x7a\x40\xff\x87\x4f\xef\xdf\x7d\xdc\x2b\x77\xc7\x08\x98\xf3\xf6\x10\xfc\xcc\x59\x06\x3e\x1a\x62\xa6\x55\xce\x74\x30\xd3\x2e\x67\x8e\x30\xb3\x5b\xca\xb4\x4c\x13\x73\x7b\x95\x5c\x0b\x73\xfb\x95\x5c\x1b\x73\x07\x95\xdc\x2e\xe6\x0e\x2b\xb9\x3d\xcc\x75\x2a\xb9\x7d\xcc\x1d\x55\x72\x45\x1b\xb6\xcf\x7e\xc8\x62\x9b\xa2\x5d\xed\x1f\x2c\x2d\x98\xfa\x97\x32\x45\x96\x68\xff\xf3\x4a\xae\xe0\x55\xa7\x9c\x0b\x4a\x6a\xf2\x6a\x17\x3b\xeb\x52\x2f\xcf\xa3\x6a\x13\xa9\x01\xce\x57\xbe\xbc\xce\x61\xb3\xb9\x54\x6d\x32\x05\x36\x69\x72\xb4\xff\xee\xe3\x6e\x01\x3c\x9b\x52\xd5\xe6\x54\x0e\x4e\x21\xc4\x90\x97\xc0\xd9\xbc\xaa\x36\xb1\x02\xf7\x60\xf2\xe5\xcd\x87\x63\x04\x96\x93\x2b\xa3\x32\xbb\xb2\xd1\x30\xbc\x3a\x7a\x73\xd2\xce\xc0\x86\x39\xd8\x28\x03\x1b\x4a\xb0\xed\x0c\xcc\xc9\xc0\xe4\x4c\xeb\x81\xa5\xab\xa2\x66\x59\x7b\x1c\x2d\x5b\x0f\xa8\x6e\x0f\x2d\x7e\xae\x5e\x33\xc5\xc7\x5d\x83\x40\xf5\x3f\xc8\x23\x28\x41\xed\xd5\x40\xc7\x56\x99\x8e\xf2\x6e\xd4\x5f\x0a\x44\xe0\xb6\x04\xb1\x2b\x21\x5b\x8d\x29\xee\xec\xa9\x20\xaa\x2f\x81\x91\x3f\x4d\x7e\x26\x2e\xf9\xd3\xc7\x9f\x89\xab\x97\x81\xb3\x4f\x6e\x29\x56\x0b\xb4\xea\xd5\xc5\xdc\xf2\x1a\xc4\x63\x98\x0f\x5a\xf4\x37\xb7\xf8\xed\x6f\x6c\xf2\x01\x36\xf9\xe0\xa1\x26\x8b\x3b\xa7\x7e\x6b\x8b\xa5\xf9\x79\xb8\xd1\xe5\xdd\xc5\xc5\x46\x93\x3f\x4d\xfa\xff\x78\x88\x5a\x51\xcf\xef\x40\x30\x98\xc2\x87\x07\xc7\x86\x7d\xbe\x95\x0d\xa4\xd5\x7d\x24\x5b\xaa\x0f\x77\xc8\x9f\xfe\x13\x7a\x62\xd2\x7d\xd4\x68\xc9\x6c\xeb\x6f\x64\xe5\xe0\x51\xac\xc4\x0f\x1f\xbf\x9d\x99\xca\xd4\x3f\x4c\x73\x4d\x52\x4b\xea\x66\x33\xc1\xef\x82\xe8\x11\x7d\xef\x96\x37\xfd\x15\x86\x4f\x6d\x73\xd3\xe3\xc6\xd1\x2e\x8e\xa3\xdd\xc7\x74\x5e\xee\xcb\xfc\xf1\x9c\x78\x4c\xd7\xfd\xee\xbc\x78\x85\xbc\x78\xf5\x20\x2f\xc4\x94\xcb\x6b\xfc\x8e\xbd\xa6\x65\xd7\xc1\x92\xed\x89\x23\x99\xe9\x03\xed\x7a\xb0\x76\xb9\xac\x53\xbd\x9e\x3b\xff\xfe\xf1\xf4\x35\x7a\x75\xb4\xab\x4e\xf8\xd2\x4f\x53\x59\xe3\x39\x4b\x70\xe4\x2b\xa6\x1b\x8d\x9f\xee\x8b\x66\x34\xdb\x37\xd7\xb0\xe5\x45\xee\x9e\xb3\xd4\xb1\x62\x62\x11\xb1\xb1\xcd\xce\x0e\x1a\x27\x38\xad\x11\xb9\xdd\x62\xee\x44\xe5\xf6\x8a\xb9\x30\xd1\x17\xd9\xfd\x62\xf6\x99\xca\x1d\x14\x73\x7f\x51\xb9\xc3\x62\xee\x57\x95\xeb\x64\x64\xfd\xa7\x24\x6b\x94\xe5\x8c\xc8\xfd\x43\x7d\x24\x57\xca\x9e\x24\x22\xc0\x69\x51\xae\xca\xe8\x4d\x8e\xca\xc6\x2f\x06\x0f\x91\xa9\x96\x00\x9f\x4c\xa7\x2c\xf8\x3f\x8c\x50\xb1\x46\xd0\xb8\x2d\x66\x0d\x95\x17\x8c\xbf\x96\xa7\xfd\x74\x03\x9e\xb2\x50\x2f\x72\x37\xbc\xd8\xe8\x10\x86\xfe\x32\x65\xb3\xfc\x3a\x8b\x0c\x53\x76\xe6\xa7\x51\xe6\xd7\xd4\x8a\xbb\x80\xb2\x9a\x76\xe7\x9c\x25\x02\x45\x21\xca\x4e\xd2\x99\xca\x6a\x4f\xe2\xfd\x68\x26\x8e\x03\x24\x06\xed\x9b\xeb\xf4\x02\x0e\xa5\xec\xa8\x69\x13\x85\xff\xc3\x08\x5c\x87\x76\x4d\x2c\x9d\x87\x54\x9d\x1c\x51\xff\xcb\xc3\x2a\x17\xd7\x6b\x9a\xe5\xb4\x68\x58\xd4\x15\x9a\x4b\x16\xe9\x59\x30\x1a\xb5\x63\xba\x73\x99\xb0\x39\x25\x84\x12\xb1\xb3\xde\x8b\x62\x2a\x0e\x27\xdf\xb2\x94\xca\x50\x2e\x90\x14\x76\xe8\xdc\x4f\x52\x7c\x5c\x04\x51\xb0\x08\x7e\xf5\xcf\x43\xf1\x5a\x84\x3e\x21\xdb\xb2\xb2\x20\x8a\x98\x88\xdb\xb6\x4d\xa8\x8c\x80\x52\x7e\x29\x02\x15\x3d\x64\xce\xc8\xff\xf6\x28\x36\x7c\x6e\x66\x43\x41\x48\xab\xce\x5b\x7e\x58\xad\xe8\x67\xb7\x5a\x0d\xf2\x24\xc0\x76\xd6\x0f\x7d\xdc\x15\xf4\x83\xdf\x46\x5d\xf2\xbf\x3f\xd8\x42\xb1\x10\xf7\xff\xcf\x8e\x8e\x57\x7c\x7d\x47\xe3\xcb\xc7\x75\xf4\x6f\xd6\xd9\xbf\x41\x15\x8e\x6b\xbc\xbc\xbb\x4b\x2a\xfa\xb1\xa8\x19\x77\xaa\xb6\xbb\xd0\x09\x62\x5b\xeb\x5a\x47\xfc\x31\xba\xa6\x18\xdd\xa5\x4a\x45\x49\x0b\xe9\xc6\xfd\x03\x1a\xf2\x41\x57\x5e\x2c\x17\x3f\x28\x5a\x1b\xe4\xb7\x3a\x43\x91\xa7\x2c\xff\x30\xb3\x57\x5e\x86\x6a\x88\x3d\xd0\x60\xb3\x6a\xa7\x58\x0b\x53\x27\xb5\x07\x8c\xb4\xbf\x12\xcf\x53\x3d\xbb\x43\xfe\x0f\xb2\x86\x4e\x21\xb1\x60\x7b\xac\xad\x0d\xe2\x05\xd5\x1c\xf8\x53\x1e\x27\xba\xf1\x08\xaf\x50\x4a\x6b\x83\x53\x08\x35\x11\x93\x78\x5e\x62\xac\x9b\x22\x14\x42\x5f\x98\x85\xe8\x01\xc1\x06\xf2\xf2\x58\x19\x63\xd2\x06\xe4\x77\x77\x72\x1d\xb0\xc0\x84\xa0\xed\x59\x6e\xb0\xad\xee\x11\xdb\x5c\x73\x90\xc5\xda\x7c\x8a\x27\x2f\x37\xe6\x35\xc5\xe7\x0a\x67\x53\x3f\x99\xed\xc5\xab\xfc\x7e\x36\xb9\x11\x25\x3f\xdf\xd3\x8c\xad\xb3\x88\x67\xc1\x3c\x60\x49\x9a\x1d\x3e\xcc\x37\xd7\x08\xfc\x13\x7e\xe6\xb1\x09\x3f\xbb\xbb\xdb\xb2\x28\xf9\x8b\xdc\xc7\x3d\xe1\x67\xd2\x50\x94\xaa\xdf\xde\xae\xc5\x02\xd9\x58\xab\x37\x21\x28\x5e\xa0\x6c\x79\x12\x12\x8a\x47\x03\xa8\x38\x12\x70\xb6\xa6\x74\x61\x5f\xef\xba\xf1\x58\x22\xea\x05\x2f\x3f\xef\xb4\x2d\xb7\x02\xf2\xb2\x0a\x62\xb9\xe6\x3a\xe2\x0b\xa1\xbe\x7c\x3e\xbd\x5c\x77\x7f\xa9\xe4\xfb\x56\xde\x05\x79\x48\x67\x19\x85\xd2\x1c\x6f\xdc\xbf\xbc\xa1\x6f\x02\x75\x67\x56\x80\x9b\x4c\x5b\x2d\x36\x09\xce\xc6\x49\xab\xa5\xf3\xbb\x3b\xf2\x17\x22\xc6\xdb\x24\x38\x33\x44\x2f\x4d\x82\x33\x71\x96\x2c\xc1\xd3\x3b\xc5\x3e\xa2\xc9\x23\x1b\x2a\x37\x83\xae\x5d\x19\x12\xdc\xd0\x19\x85\x1a\x1e\x8d\xb2\x49\xac\x9b\xb1\x9a\x88\xf5\xa3\x8c\x90\x55\x1f\x06\x89\xbf\xf4\x31\xf8\x84\xb7\x85\xae\x4a\x9e\xa1\xf6\x90\x5e\xb1\x24\x65\x5f\x0a\x70\x5b\xb8\xa4\x5b\x7b\x21\xa3\x14\x24\xc1\x45\x10\x61\xcc\x00\x09\x98\xe7\xc8\x63\xec\x2b\x1e\xef\xf9\x49\x12\xf8\x17\xec\x08\x69\x56\x90\xf5\x37\xd9\xfd\xfe\x69\x9c\x7c\x16\xf1\x4b\x14\x70\x29\xb3\x08\xf7\x2a\x0c\xa2\x6f\x65\x28\xcc\xa2\xea\x2c\x32\x4b\x78\x91\xbe\x3c\xa7\xd4\xe2\xcf\xc1\x8c\xc5\x95\xc6\x62\x9e\x0c\x23\x90\xf8\xd3\x6f\x8c\xb3\x99\x8c\x48\x20\xe0\xca\xb9\x8f\xde\xe9\x2b\xf6\xb3\xd7\x2f\x9c\xc6\xc8\x90\x1e\x91\x51\x03\x96\x71\x9a\xdd\x2c\x79\x99\x1d\xe4\x17\x65\x8b\x47\xe6\xf1\x26\xfb\x06\xc9\x28\x84\xc6\xc1\x42\x1a\x42\x6a\x3e\x57\x61\x49\x96\x71\x2a\xee\x2d\x15\xa7\x35\x6a\x98\xf3\x6d\xea\x0d\x51\xf5\x32\x12\xbd\x02\xed\x72\xbb\x6e\x23\xb6\xca\x86\xd8\x3c\x8c\xa3\x6c\x36\xcb\x5b\xcd\xef\xee\xf2\x86\xb3\xa2\xf5\x6a\xc4\x5c\xdd\xfe\x5f\xa4\x56\xdc\x73\x9f\x9d\x99\x43\x2e\x8e\x4b\x9b\xcf\x33\x84\xc1\x8c\x45\x5c\xea\x12\xa5\x55\xde\xb2\xdb\xd4\x60\x93\x07\x61\x26\xfc\xec\xcc\x53\x61\xe8\x55\x3b\x5e\xd4\x39\x33\x56\x6d\xfe\x16\x2c\x45\xe4\xf4\xd2\x29\x51\x6c\xc9\x49\xfc\x8d\xc9\x29\x34\x09\x22\xce\x2e\xf0\x3a\xe0\x04\x23\x0a\x1b\x99\x9e\xf4\x92\x0e\x5e\x15\x9e\x5d\x21\x48\x72\xda\x72\x70\x69\xb8\x25\x6c\x87\xc7\x9f\x96\xcb\xe2\x89\xf5\xe0\x51\x1c\x68\xb5\x1e\x04\xe9\x5c\xfa\xe9\xc7\xeb\xe8\x30\x89\x97\x2c\xe1\xb7\x7a\x60\xa8\xfd\xba\x0f\xf3\x2e\xc0\x8d\xf5\x6c\x92\x9e\xb5\x5a\xa8\x96\x21\x29\xe3\x3b\x21\x5b\xe4\x29\x85\x7c\x07\xba\x2a\x0e\xc2\x2b\xdb\x66\x8c\xa1\x94\xb7\x65\xde\xe7\x91\xfc\xd7\xb7\x4e\x32\x71\x5d\xcb\xd4\xeb\x86\x56\x35\xd0\xa5\xa2\xe2\x7d\x63\xb7\x65\x82\xb2\xbe\xda\x58\xc9\x24\x38\xbb\xcf\x88\x26\xe9\xed\xe2\x3c\x0e\xc9\x96\xea\xc1\x7a\x75\xd9\x61\x0d\x29\x1c\x5a\x9c\x68\x85\xbe\x17\x82\xf3\x17\xc4\x20\x08\x69\xa2\x58\xdd\xeb\xae\x89\xfa\x4a\x74\xab\xe1\x11\x3d\x6e\x78\x60\x3f\xfb\x8f\xe8\xe7\xe8\x6c\xcc\x26\xfe\xd9\xdd\x9d\x0e\x7f\x3c\xf2\x17\x62\xdc\x67\xeb\xa2\x85\x11\x41\x49\x5b\xda\xe6\xce\xf4\xd2\x10\x07\x72\x83\xb9\x2e\xc2\xed\xe6\x8e\x42\x13\x67\x78\xe2\x17\x4f\xa7\xf9\x30\x23\xd2\xb8\x9f\x5c\x30\x0e\xdd\xa3\x82\x80\xf9\xb3\x2b\x3f\x9a\x32\xdd\xc2\x75\x59\x40\xec\x6d\x44\xfc\x3e\x48\xd3\x20\xba\x28\x63\x52\x7e\xd4\x46\x9d\x24\xd4\x7e\x5d\xd5\x57\xc6\x3f\x5b\x33\xfe\xb3\x93\x48\x4c\x48\x43\xe6\xbb\x89\xb1\x5f\x1b\xf6\x12\x4c\x44\x98\x40\x98\xb5\x7d\x28\x4e\x96\xad\x1b\x01\xf2\x6d\x75\x00\x48\xa4\x85\x29\xc8\xfa\xb2\x13\x09\x7c\x36\xde\x38\x64\x0a\x07\x10\x15\xf6\xfb\x0d\x42\x2f\x38\x52\x95\xf9\xe6\x3e\x60\xec\xdb\xda\x10\xa7\xcf\xf2\x58\x32\x77\x77\xcf\xc8\xb3\xec\x69\x2d\xaa\x37\x59\x7d\xeb\xcc\xe1\xf4\x52\xdd\xbd\x3d\xf1\xdb\xbf\x7e\x3d\x7b\x1e\xac\x27\xec\x8d\x18\xbc\x8f\x40\x65\xb6\x47\x67\xcf\x37\x58\x3e\x94\x97\x52\xfc\x46\x1c\xff\x59\x83\x32\x23\x28\xe2\x8d\x4b\x05\x43\x91\xd5\xae\x6a\xf4\xb8\x58\x79\x3e\x3c\x28\xcb\x06\x68\x99\x05\xd9\x2c\x54\x62\x2d\x74\x46\x11\x33\x12\x58\x2c\x75\x3f\x2e\xe2\x93\x17\xa6\x57\x70\x49\xa1\xaf\xe1\x51\xd0\x65\x1c\x92\x91\x35\x82\xa4\xe5\xac\x53\xa3\xe0\xef\x1b\xe5\x32\x53\x8c\x1c\xd8\xba\x4e\xb2\xca\xcd\xaa\x30\x7f\xab\x99\x5f\x9b\x34\x79\x51\x7d\x97\x1c\x2c\xa8\x48\x1d\xff\x43\xa9\x32\xdb\xa3\xaf\x67\xdb\xcf\x2f\xd6\x89\x56\xa1\x89\x0d\x52\x6f\xe6\x62\xa1\x62\x59\x34\xfa\x29\x6d\xab\xd5\x22\x37\xa4\xec\xdc\x49\x3f\x2c\xf3\x1d\x2d\x6a\x19\x3b\xaa\x42\xbd\x81\x5e\xf3\x06\x84\xd7\x6f\xcf\x05\xc1\x86\xbb\x09\xf8\x74\xb6\xfd\xfc\xc2\xd8\xd0\xaa\xfa\x50\x16\x72\x0d\xfe\xb2\x6a\x14\x48\xc6\x33\xf2\x4c\x44\xdb\x79\x86\xd1\x76\xea\x6c\x17\x88\x34\xd5\xd3\x75\xa3\x50\x38\x0e\x08\x4e\xf4\x11\xbb\xd8\xbf\x59\xea\x64\x72\x7a\x7a\x7a\x4a\xb6\x31\x34\x36\x25\x17\xaa\xdc\x5a\x4f\x0f\x4f\x97\x86\x7e\xca\xdf\x44\x33\x76\xe3\x29\x60\xba\x95\x60\x80\x7a\xbd\x50\xa8\xd9\xad\x90\x0b\x23\x05\xb5\x17\x06\x9c\x25\x18\x2a\x02\x34\xfc\x76\x43\xf7\xe0\xe9\x49\x55\x53\xa1\xfa\xb6\xa5\x82\xbc\xc9\x66\x16\xdf\xa9\x02\x00\x24\xd8\x77\x77\x47\x4e\x4f\x0b\x56\x18\x74\x0a\xf2\xb3\xfa\x22\x9b\xca\x4f\x2f\x3d\x8f\x1b\x6b\xd5\x88\x08\x2e\xb4\xad\xca\xd1\x2a\xcb\x8b\x47\x4c\xf3\x62\xdb\x05\xbb\x28\x4e\xbd\xeb\x4d\xd6\x61\x23\xab\xd6\x4b\x94\x8c\xe9\x56\x9f\x2e\x3c\x23\xcf\xdc\x67\xe4\x19\x25\xcf\x88\x4b\x9e\x11\x0a\x4d\x76\xe1\x87\xfa\x2e\xf9\x5f\x09\x3d\x77\x71\x1f\x39\x73\xc9\x9f\x08\x9d\xbb\xe4\x74\x4e\x68\xe4\x92\xd3\x88\xd0\xc4\xc5\xed\xbc\xdc\xc5\xdd\xe4\x57\x2e\x39\xbd\x22\xf4\xc6\xad\xd5\xb1\x7e\x78\x9f\x7d\xb7\xef\x61\xb8\x8c\x37\x7c\x61\xce\x06\x12\xa3\xd6\x00\x06\xcd\xea\x69\x35\xf4\x9e\x5c\x03\x2a\xdd\x2d\xd5\xd5\x6a\x41\xa5\xea\x1f\x28\xa9\xd8\xe4\x26\x8b\x50\x07\x59\x54\xf1\xe9\xa5\x70\x81\xb8\xc7\x26\x32\xe3\x6c\x9d\x35\x6a\x38\x2b\xc9\x5b\x2d\x9d\x7b\x3c\x8f\x3e\x62\x18\x94\xaf\xef\xf2\xa6\x95\x14\x11\xb9\xeb\x22\x8c\xcf\xfd\xb0\x81\x6e\xd0\xa6\x49\xe4\x87\x62\xfe\xec\x6a\xc7\x4b\x3f\xd2\x96\x02\x4f\xaa\x2d\x56\x29\xd7\xce\x99\x26\x8a\x13\xf0\xfa\xeb\x43\x5e\x35\xb0\x3e\xee\xc5\x47\xc7\xbb\x3b\x56\x1c\x8d\x13\xf3\x4c\x6a\x91\xad\x0c\xc5\x26\xf3\x81\x9e\x82\x36\x8f\x13\x31\x99\x1f\x57\xa7\xe8\x45\xe4\x56\x75\xe4\x51\xa8\xae\x91\x61\x12\xa6\xbe\x8a\x04\xca\x3f\x0b\xd2\x7f\xb9\xc9\x46\xac\x9b\xb2\x67\xfe\x6f\xb5\x23\x9e\x9f\xa6\x32\x34\x50\x26\x4a\xf2\x38\xf7\xf3\xd3\x74\xfb\xf9\xc5\x62\xcc\xd7\xf1\x37\x29\x12\x82\x2e\x82\x60\x77\x62\xa8\xe8\x4f\xb8\xb6\x90\x17\x37\x1e\xd9\x02\xca\x5a\xad\xb6\x95\x19\xce\x4e\x00\x85\x3f\xce\xf5\x46\xad\x9d\x75\x4a\x1c\x31\x2d\x9e\x43\x87\x6c\x13\xaa\xcd\xe3\x55\x34\x2b\xca\xfc\x7d\x81\x2f\x05\xe7\xd9\xfb\xde\x9c\x5f\x9a\x49\x79\xdf\xf1\x80\x80\xab\x96\x85\xf7\x4e\x8e\xde\xb9\x72\x6d\x78\xef\xe3\x87\x93\xa3\x8f\xd9\xe3\xee\xbb\x13\x11\x49\x86\xbe\xdf\x3f\xd9\x95\x61\x64\xd6\x54\xa1\x26\xa4\xde\xf7\xfd\xe3\xbd\xdd\xc3\x7d\xd7\x1e\xd2\xfd\xe3\x3d\xf8\x73\x60\xb9\x96\x65\xd3\x03\xdb\xb5\xac\x2e\x3d\xe8\xba\x96\xd5\xa3\x07\x3d\xd7\xb2\xfa\xf4\xa0\xef\x5a\xd6\x80\x1e\x0c\x5c\xcb\x1a\xd2\x83\xa1\x6b\x59\x0e\x3d\x70\x5c\xcb\x1a\xd1\x83\x91\x6b\xd9\x26\x3d\xb0\x4c\xd7\xb2\x2d\x7a\x60\x59\xae\x65\xdb\xf4\xc0\xb2\x5d\xcb\xee\xd2\x8f\x1f\xf6\xdd\xde\x88\x9e\x7c\xf9\xe8\xf6\x4d\x7a\xf2\xf3\xd1\xfe\xbe\xdb\xb7\xe8\xc1\xc7\x4f\x47\x6e\xdf\xa6\x07\x6f\x3e\xef\xbb\xfd\x2e\x3d\x7e\xf3\x37\xb7\xdf\xa3\xc7\xfb\x9f\xf7\x3f\xb8\xfd\x3e\xdd\x7f\xf3\xd3\xcf\x27\x6e\x7f\x40\x3f\xbc\xf9\xb0\xef\xf6\x87\xf4\xef\xfb\x47\x1f\xdd\x9e\x43\x5f\xed\xee\xbd\x3d\x3e\xdc\xdd\xdb\x77\x1d\xfa\xea\xed\xf1\x21\xfc\x39\x76\x1d\x7a\xb2\xfb\xca\x1d\xd1\xbf\xba\x8e\x45\xbf\xb8\xce\x90\xee\xbb\x83\x11\x3d\x72\x1d\x9b\x9e\xb8\x4e\x8f\xfe\x9b\xeb\x8c\xe8\x27\xd7\xe9\xd3\x37\xee\xb0\x4b\x3f\xba\xc3\x11\x3d\x74\x1d\x93\xee\xed\x1e\x1e\x7f\x7d\xf7\x71\xef\xad\x6b\x8b\x87\x62\x1a\xfe\xee\xba\x83\x3e\x3d\x76\x9d\x2e\x7d\xed\x0e\x1c\x7a\xe0\x0e\x4d\xfa\x93\x3b\xb4\xe8\xcf\xee\xd0\xa6\xff\xea\x0e\x7b\xf4\xad\x3b\xec\xd3\x77\xee\x70\x40\xf1\xbc\x87\x6b\x75\x21\x01\x7f\x8e\xf6\x4f\x3e\x1d\x7d\x90\x29\xf8\xf3\x77\x77\x64\xd2\xbf\xb9\x8e\x43\xf7\xdc\xc1\x90\x7e\x76\x9d\x01\x7d\xe5\x0e\x06\xf4\x83\x3b\x74\xe8\x7b\x77\x38\xa4\xa2\x75\x5d\x9b\x1e\x1f\xc2\xef\xe1\xd1\x9b\x0f\x27\x5f\x8f\xf7\x8e\xf6\xf7\x3f\xb8\x3d\x78\x3e\x39\xde\x83\xc4\xf1\xde\xd1\xc7\x77\xef\x04\xed\x56\xaf\x4f\xf1\x9c\x01\xa6\xf0\x68\x81\x6b\x8d\xe8\xab\x23\xfc\x23\xce\x14\xb8\xbd\x3e\xa4\xe0\xcf\xcf\x1f\xdf\xef\xbb\xdd\x01\x3d\xdc\xfd\x69\xff\xeb\xa7\x43\xb7\xdb\xa5\x87\x3f\x89\xbf\xaf\xf7\xdf\xed\x9f\xec\xbb\xbd\x01\xa4\xe0\xcf\xfe\x87\xd7\x6e\xb7\x2f\x40\x5f\x7f\xfc\xf2\xc1\xed\xf6\xa8\xd8\xee\x2f\x53\xf8\x17\x0a\x3b\x14\x73\x7b\x26\xc5\x6d\xf9\x6e\x77\x44\xdf\xed\x1f\x9c\xb8\xdd\x21\x95\xfb\xeb\x5d\xab\xd7\xa3\x6f\x0f\x4d\x77\x34\xa0\x6f\x0f\x2d\x77\x34\xa4\x6f\x0f\x6d\x77\xe4\xd0\xb7\x87\x5d\x77\x34\xa2\x6f\x0f\x7b\xae\x65\x9a\xf4\xed\x61\xdf\xb5\x4c\x8b\xbe\x3d\x1c\xb8\x96\x69\xd3\xb7\x87\x43\xd7\x32\xbb\xf4\xed\xa1\xe3\x5a\x26\xe0\x18\xb9\x96\xd9\xa7\x6f\x0f\xbf\x1e\xbe\xfb\x74\xec\x5a\x26\x60\xfa\xba\xfb\xfa\xb5\x4a\xbe\x7f\xf3\x01\xf3\x01\xe7\xd7\xe3\x4f\xaf\x4e\x8e\x76\xf7\x4e\xb2\xe7\x93\xdd\x23\xd7\x32\x07\x08\xf8\xe9\xdd\xc9\x9b\xc3\x77\xff\xa6\x9e\x5f\xbf\xf9\xfc\xe6\xf5\xbe\x6b\x59\x16\x3e\xed\xef\xbd\x79\xbf\xfb\xce\xb5\x2c\x13\x2b\xdb\x3f\x7a\xf3\xf1\x35\x3e\x7d\xd8\xfd\xfc\xe6\xa7\xdd\x93\xfd\xaf\x20\x91\xae\x05\x5d\xa8\x72\x0e\x3e\x1e\x7d\xd9\x3d\x7a\xed\x5a\x83\x21\x15\x1b\xca\x5d\x0b\x44\xe7\xd3\xbb\x77\xaa\x23\x2d\xa7\x4b\xbf\xbc\xf9\xf0\xfa\xe3\x97\xaf\x1f\x3f\xef\x1f\x7d\x7e\xb3\xff\xc5\xb5\x1c\x9b\xbe\x42\xd6\x7d\xd8\x3f\x3e\x86\x7e\xb1\xad\x41\x31\x07\xd9\x6b\x5b\xc3\x35\x83\x5b\x4e\xca\xb3\xa0\xaf\x1b\x8f\x49\xab\xc0\xaf\x9b\x0f\x4b\x6f\xf8\xfa\x8a\xe7\xa5\x8b\x3b\x6e\xdd\xc6\x2b\xa4\x9e\xb0\x27\xf7\x9e\x96\x77\x9d\x3e\x84\xf0\x11\xdb\x1b\x15\xca\x93\xf8\x24\xde\x48\xe0\xc3\x5b\x9c\x73\x54\xaf\x62\xce\xe3\xc5\x6f\xc5\x26\x3e\xec\xcb\xad\x13\xd3\x6f\xcd\xe8\x9e\xb2\xe3\xb1\x76\x21\x0b\x2d\x5f\xf8\x07\x42\x93\xb0\x39\x4b\x58\x34\x65\xef\xfd\xc8\x2f\xcd\x1f\xc1\x36\xd7\xdf\x17\x22\xbe\x55\xef\x95\xa3\xe4\xb9\xb8\xd4\x6a\x99\xc4\xf3\x20\x64\xe9\x73\x74\x4c\x84\x25\x6f\xa8\x4a\x15\xcf\x5f\xa4\xe3\x8f\xe7\xff\xce\xa6\xf8\xf1\x38\xd5\xb9\x51\xff\xbc\xa7\xbc\x11\x5c\xef\x63\x79\x49\x9d\x51\x3e\x61\x78\xb5\x6b\xed\x3b\x6b\x53\x1b\x38\xbb\x88\x93\x80\x29\xd3\xbb\x01\x22\x63\xb0\x47\x54\x8a\x3c\x54\x64\x77\xb9\x64\x7e\x82\x7e\x14\xc9\xd3\x0f\x16\xdb\x8b\x97\xb7\xe2\x53\x13\xc9\x92\x0f\x16\x3a\x06\x27\x23\xf5\x88\xf8\xfb\x30\x38\xca\x17\x86\xbc\xce\x92\x0f\x16\xca\xc3\x64\xab\xd4\x83\x45\xde\x07\xe9\x94\x85\xa1\x1f\xb1\x78\x95\x7a\xa4\xf4\xb8\xb1\xf0\xed\xeb\x6c\x29\x37\xf5\x26\xdf\x83\x99\xfb\x68\x66\x53\xce\x6e\xb8\x5b\xe0\xb8\xa6\xcf\xe3\x88\xa7\x54\x9b\xc6\x61\x9c\xa4\x54\x13\xd7\xad\x19\xe4\x9e\x3e\x02\x71\xd6\x07\x12\x2f\x3c\x6b\x2d\x4d\x74\xcb\xa3\x30\x28\x6e\x49\x04\x19\xf3\x1e\x55\x58\x49\x9b\x2c\x9c\x09\xdf\xa3\x0a\x67\x7d\x2b\x4b\xe7\x7d\xfd\xb8\xe2\x28\x4c\xaa\xac\x90\xac\x47\x15\x2c\xf5\xb3\x2c\x0f\x79\x1d\x72\x7f\xd6\xd8\xeb\x75\x1d\xe0\x7d\x07\xdf\xb5\x7d\x91\xb4\x17\xf1\x8c\x11\x77\xf2\x58\x3e\x61\x24\xb7\x09\xfe\xca\x50\xf6\x79\x10\x51\x9a\x07\xf6\xa4\x85\x80\xa1\x67\x94\x88\xad\x51\x9a\x1f\x69\xbb\x21\xff\x29\xd1\x66\x8c\x33\x19\x20\xc5\x9f\x7e\xfb\xe5\xcb\x25\x5b\x25\x41\xca\x83\x69\xe7\x34\x3a\x8d\x9e\x01\xfa\x67\xae\xb6\xbb\xe2\xb1\x80\xd4\xce\xfd\x14\x3d\x7f\x2d\xf2\xaf\x82\x0b\x9f\xc7\x49\x27\x94\x17\xe0\xb8\xa7\x91\x86\xff\x9e\xb1\xa8\xbd\x4a\x9f\x69\xde\x4b\xed\x19\x90\xf6\x8c\x6a\xb8\xf6\x01\xcf\x19\x35\xcf\x00\x3d\xbc\x74\xb5\xd7\x41\xea\x9f\x87\x4c\xf3\xa3\x5b\x49\x56\xc2\x42\x5c\xe8\x58\xac\xa2\x0b\x98\xb7\x9f\x46\xcf\x54\xe3\x80\x9c\x34\x5d\x2d\x98\xb6\xc7\x93\x70\x7b\x37\xe4\xda\x82\xf9\x51\x2a\x4a\x02\xa4\x6a\x7b\x0e\x09\x39\x5a\x03\x64\x4e\x4c\x06\x8a\x59\x0d\xb0\xc0\x3c\xe8\xa8\x2c\xd0\x4f\x3b\x48\xdb\x30\xd5\xc8\x73\x9e\xd0\x79\x5b\x16\x25\xe7\x71\x1c\x12\x4a\xde\xcc\xb5\x94\x71\xaa\xad\xa2\x59\xcc\x52\x8d\x5f\x32\x4d\x44\xdd\xd5\x3e\x1e\x43\xed\xed\xec\x38\x4d\xfb\xe5\xeb\xfd\x77\x5a\xc2\x16\xfe\x92\x6a\x69\xac\xf1\x4b\x9f\x6b\x25\x9a\x34\x98\xb7\xb1\x99\x16\xa4\xe5\xfc\x8e\xa2\x5e\xd2\xfc\x63\x94\x1e\x33\xae\x5d\x5f\x32\x7e\xc9\x12\x24\xd3\x0f\xb9\xfa\xba\x91\x6a\x7e\xaa\xf9\x1a\xe0\xc6\xac\x38\x11\x19\x33\x90\xa5\x68\xca\x15\x6c\x46\x48\xca\xa2\x59\xda\xbe\xbe\xf4\xf9\x13\x68\xc9\xae\x1c\x98\x64\x29\x19\xb5\x92\x96\x22\xaf\x9e\x51\xb2\x27\x62\x5f\xa5\xda\x25\x4e\x5e\x73\x62\x83\x54\x13\xf1\xe6\x67\x28\xe1\x9a\x5c\xab\xe9\x88\x7f\xda\x31\x8b\x66\x30\x3a\xf6\x8f\xf7\xb4\x65\xc2\xe6\xc1\x4d\x07\x80\xb0\x96\x8e\x02\xda\x9d\xcd\x34\xcb\x76\x34\x1e\x23\xea\x55\x84\x93\x54\x36\xd3\xb2\xa0\xfd\xd0\xfa\x20\xd2\x6e\x70\x8f\x04\x20\x28\x90\xd7\xe9\x68\x5f\xfc\x80\x63\x5c\x49\x28\xae\x6e\xd8\xd0\x30\xd6\xaa\xe6\x47\x33\x2d\x65\x4c\x03\xde\xe0\x7b\x59\x54\x53\xa3\x2b\xff\x97\xfa\xb7\x69\x47\xd3\xf4\x93\xcb\x20\xd5\xae\xe3\xe8\x19\xd7\xae\xe3\xe4\x9b\x76\xcd\xc2\x10\x86\xe8\x32\xf4\xf9\x3c\x4e\x16\x29\x74\x5b\xc2\x10\x5b\x1d\x8b\xc2\xbf\x64\x89\x00\xc6\xef\x8b\xa0\xa6\xe4\x77\x2b\xa4\x34\x8d\x17\x82\x89\x2a\x70\x5e\xda\x31\xb0\x33\x57\xb3\xe0\x3c\x64\xed\x73\x16\x86\xed\x14\x74\xe7\xc3\x1d\x2a\xf5\x2d\xb8\x67\x6d\x75\x5b\xa8\x2b\x9c\x29\x40\x17\x3f\x07\x64\x84\x92\x15\xee\x04\xfb\x74\xf4\x4e\x8b\xe7\x48\xbc\xda\x46\xa7\x01\x80\x86\xb5\x75\x34\x6d\x7f\xb1\xe4\xb7\x6a\x4d\x14\x68\x8d\x62\x4d\x92\x85\x80\x28\x74\xf2\x86\xd0\x76\x54\xb8\xfb\x13\x89\x7e\x34\xb9\xf9\x48\x78\xf6\x66\xae\xf1\x64\xc5\x68\x99\xa0\x54\xc4\x97\x63\x5a\x7e\xa3\x97\x76\x1d\x84\xa1\x26\x2e\x87\xd0\x7c\xed\x0b\x3b\x2f\x5d\x3e\xda\xd1\x2e\x39\x5f\xa6\xee\xf3\xe7\xd7\xd7\xd7\x9d\xeb\x6e\x27\x4e\x2e\x9e\x9f\x1c\x3d\x2f\x12\x99\x3e\x07\x39\x7d\x2d\xee\xb5\x81\x16\x96\x5e\x6a\x09\xfb\x8f\x55\x90\xb0\x14\xba\x6f\x11\xa4\x29\xf6\x57\x12\x2f\x84\x64\xc2\x14\x49\xfb\x72\xc9\xc4\x4a\x99\x26\xee\x66\x82\x31\x90\x32\x8e\xe2\x8b\xad\x40\xd6\x0b\x52\x7d\xce\xd9\x62\x89\xef\xfc\xf4\x5b\x86\x04\xd9\x5a\xa8\x21\x98\x6b\x11\x9b\xb2\x34\xf5\x93\xdb\x0e\x34\x29\x13\xd3\x54\x5b\xf8\xb7\xe2\x56\xaa\x4b\xb9\x6e\x54\x2c\x08\xe4\xb2\x94\x03\x82\x80\x6b\xb3\x60\x86\xa0\x62\x43\x15\xf0\x08\x49\xf7\x45\x9d\x42\xfa\x70\x98\x4a\x8d\xc8\x6e\x38\x8b\x52\x6c\xf7\x75\xc0\x2f\x91\x3c\x52\xe2\x07\x29\x56\x76\xe9\x5f\xb1\xe2\x33\x8f\x35\x79\x3f\x50\x99\x89\x9d\x67\x67\x94\xe4\x9d\xd6\x46\xff\xe9\x61\xb9\x28\xb8\x62\x24\xb9\x38\xd7\xad\x01\xd5\xc4\x7f\x06\x18\x63\x44\x42\xc9\x49\x59\x20\x30\x5b\x8c\x7d\x76\xc3\x45\x33\xa2\x58\x8b\x51\xab\x8a\x97\xbe\xba\x7c\x28\x45\xc9\x2d\x10\x86\x0e\xdd\xd3\x08\x23\x34\xfb\xd8\x48\xf6\x8e\x8f\x35\xf1\xc5\x5c\x8e\xa7\x02\x5d\x88\x7a\xcd\x60\x12\xef\xa0\x1f\x0e\xe2\x44\x63\x37\xfe\x62\x19\x0a\x6b\xbf\x4a\x42\x5d\x89\xf0\x45\x1c\x77\x2e\xc2\xe7\x7e\xc4\x66\x27\x6f\x0d\x78\x1b\x06\x11\xf3\x93\xf6\x45\xe2\xcf\x02\x16\x71\x9d\xc7\x4b\xed\x1c\x27\x8f\x54\x3b\x0f\x41\xf2\x12\x36\x33\x2a\x6d\x4c\x83\x5f\xff\xc8\x26\x6a\x80\xbf\xa3\x69\x32\xa6\x75\x0a\x42\x01\x6e\x48\x95\xd5\xea\x82\xae\x3f\x92\x14\x55\x47\x23\x6b\x2d\xf3\xcf\xf0\x1f\x24\xa7\x2c\xe2\x2c\x51\x04\x0a\x5f\x40\x18\xd0\xdf\xee\x7b\x48\x3d\x26\xc9\x13\x5e\x44\x7a\x19\xaf\x42\xb0\x42\xd1\x4c\x7b\x75\xac\xe9\xcf\x4e\x4f\x6f\x4c\xe7\x19\xd5\xfc\x6f\xbe\xf6\xcb\xcf\x46\x47\xd3\x3e\x82\xbc\x5e\x07\x29\xab\x14\x05\x13\x5b\x2c\x0e\x45\x87\xf3\x67\xc8\xdd\xcc\x3a\xb6\x17\xfe\xb2\x1d\x5f\xb1\x24\x09\x66\x2c\x7d\x12\x87\x85\xbf\x8b\x6c\x25\xf4\x19\x1a\x3e\xd0\x66\x4b\x36\x0d\xe6\x01\x9b\xa1\xd7\x11\x69\xb1\x98\x57\x6b\x6f\x38\xba\x42\x5a\x8a\x1f\x46\x34\x3f\x49\xfc\x5b\x2a\x8d\x21\xf3\xa7\x97\xda\x52\x7e\xd5\x01\x30\x68\x48\x6e\xc0\x41\x41\x4e\xe3\x19\x43\x7b\x0c\xaf\xe4\x56\x93\x02\x7e\xe1\x80\xd5\x2a\xd0\x02\x9e\xb2\x70\xde\xd1\xde\x44\x02\xa2\x5c\x7b\x63\xbd\x09\x9b\xb2\xe0\xaa\xec\x41\x54\xeb\x85\x07\xa9\xbe\x8a\x80\x8d\xc2\xf3\x9d\x98\xc4\xfd\x4e\xb6\xf1\x93\xde\xca\xb6\x46\x36\xa1\x84\x66\x4f\x26\xa1\xa4\x9d\x3d\x59\x84\x92\x4e\xf6\xd4\x25\x54\x83\xd2\xf8\xd8\x77\x1c\x72\x7f\x0f\xea\x11\x4f\xbe\xb4\xe3\xa8\xcd\x6e\x82\x47\xf8\x6c\xe5\x99\xd1\x96\x99\x89\xdc\x17\xe9\x40\xa2\x66\x41\x3b\x83\x98\xb1\x75\xe2\x10\x0c\xf4\x8f\xb0\xa3\x53\x71\xbf\xb9\x06\x55\x0a\x5d\x28\x36\xbf\xb6\xcf\xc3\x20\xfa\xf6\x24\xb9\x29\x08\x7d\x9d\x02\x44\x27\x6a\x44\xfc\xda\xf9\xad\x72\x81\x6a\xb5\xb6\xa7\xb7\xd3\xf0\x69\x0a\x6a\x62\xb1\x2e\xed\x9b\xe6\x59\x26\xb8\x68\x14\x54\x5d\x58\x79\x02\xc6\x2f\x88\xb4\x45\x10\x86\x41\xca\xa6\x71\x34\x4b\xb1\x67\x77\x35\x7e\x1d\x6b\x4c\xdc\x59\xa4\x64\x08\x48\x9d\x07\x49\xca\x41\xb5\xe0\x55\x3d\xe8\xd7\xc6\xd7\x5a\x18\x47\x17\xc5\x96\xc8\xb1\x78\xce\xb4\x38\xa2\x9a\x40\x5c\x82\x0d\x78\x11\x66\x3e\x2f\x36\xf8\xc7\xec\xa0\xaf\xdb\xfd\x3e\xd5\x4c\xf1\xff\x4e\xbf\x6a\x0c\x85\x91\x93\x3a\x51\x5e\xe1\x28\xc9\x15\x95\xc3\xfb\xf6\xd2\x0f\x19\xe7\xec\xf7\x50\x13\xe4\xa3\xc4\x21\x17\x46\x94\x9b\xa6\xbc\x5c\x59\x15\xb2\x1b\x35\xca\xd4\x8f\x80\x1b\x55\xad\x22\x46\x37\x18\xe8\x5c\xc3\x68\x30\x7d\x6b\xd4\x3e\xc0\x59\xd0\x0d\x38\xad\x9c\xa1\x98\xb1\xc7\xaa\x22\x5f\x8b\x56\x0b\x96\x04\x53\x9c\xd0\xdd\x68\x41\x24\xa7\x1a\x82\x77\x45\x82\x3f\x43\x1b\xd7\x90\x1c\x2e\xe2\x94\xe3\xac\x7a\x9a\xa6\xb2\xac\xd8\x25\xab\x69\x42\x75\x46\xd3\x70\x35\x63\xa9\xf6\x4f\x47\x3f\xbd\xa2\xda\x3f\x1d\x1d\xfd\xf4\xd3\xab\x57\x54\x03\x6f\xa6\xd3\xe9\x18\x98\xf2\x65\xd2\xc7\x99\xd1\xad\xc4\x13\xf9\x0b\x9c\xad\xc2\x14\x34\x81\x99\x41\x1a\x6b\x4b\x3f\xe1\xaa\x63\x53\x1e\x4f\xbf\x69\x7f\xb3\x2c\x40\xd1\xe1\x37\x5c\x9b\x07\xa1\x20\xf9\xdf\xe2\x15\xd2\xbb\x4a\x99\x26\x56\x18\x80\x3b\x82\xf4\x5b\x81\xb2\xd8\x3d\x42\x01\xe6\x42\x0a\x83\xf6\x5c\xdc\x81\x7a\xc1\x66\x59\x53\x52\xc0\x37\x5f\x85\x62\xb6\xf2\x2d\x58\x2e\xc1\x83\xf1\xb5\x74\xe1\x87\x21\xf0\xf3\x9c\xa1\xd4\x05\xd1\x2c\x98\xb2\x34\xd7\x32\x99\x82\x6d\xec\x6f\x29\x92\xcb\x5b\xd0\x7d\x29\xae\x9e\x3c\x2c\x89\xf9\x5a\x5a\x41\xf3\xed\xae\x78\xbc\xf0\x79\x30\xf5\xc3\x10\xb8\xb8\xbc\xd5\x16\x31\xf0\x20\x55\xc7\xd5\xd4\x84\x72\xaa\x4e\xbe\x62\xe5\xab\x94\xb5\x25\x2f\xda\x42\x43\xb6\xa1\xf0\x93\xa8\xa8\x6b\x3f\x1e\x23\xff\x8b\x8c\x96\xea\x17\x29\x3b\x67\x97\xfe\x55\x10\xa3\xd3\x81\x2b\xf5\xed\x8c\xca\x36\x6e\x39\x7d\x3a\x0d\x75\x1b\x80\xca\x9f\xf9\x62\x1a\x9c\x73\x41\x6c\x69\x05\xfc\x41\x74\x21\xf8\xcf\x93\xb0\xbd\x0c\x57\x69\x7b\x11\x44\xab\xb4\xfd\x2b\x4b\xe2\xf6\xaf\x71\xbc\x78\x8a\xdb\x63\xd6\xdd\x9e\x3d\xc0\x7b\x18\xae\xd2\xe7\x78\xd8\xed\xf9\xdf\x59\x12\x6b\x53\xb5\x74\x00\x15\x74\x4e\xa3\x37\x73\x6d\xee\x87\xa9\x02\xc7\x00\xcc\x9b\x0b\x49\x48\x7c\x8d\x6e\x50\xaa\xfd\xf2\xb5\x58\x1b\x16\x99\x81\xe3\xc9\x2f\x4b\x6d\x9c\x3e\x92\xad\x4d\xce\x1c\x2e\x87\xed\x01\xdf\x02\x96\xc2\x04\x4b\xb4\x11\xdd\xb0\x5f\xf6\x80\xd9\x97\xb1\x98\x79\x61\x73\x3a\xa7\x78\x10\x78\x1b\xdb\xb3\xbd\xa7\xe8\x2c\x01\x0a\x0c\x39\x46\x51\x30\xa3\xf6\xaa\x8d\x67\x79\x7f\x03\xb9\x9f\x35\xc4\x50\x23\xf7\xf3\x03\xe4\x7e\x56\xe4\x7e\xae\x93\x9b\x63\xcc\xc9\x65\x7e\xca\xdb\x7e\x1a\xf8\x51\xdb\x5f\x9c\x07\x17\xab\x78\x95\xb6\xfd\xb4\xcd\xaf\xe3\xb6\xb8\x59\xf7\xb7\x2f\x89\xed\xfb\x29\xd7\x76\xa1\x0e\x6d\x57\xd5\x91\xbb\x69\xa9\x98\x8d\x82\x31\x17\x15\x6a\x78\x2e\x58\x50\x17\xf9\xe7\x21\x6b\xe3\x22\x53\x3b\xbb\x44\xe9\x47\xe8\x39\x49\x56\x0c\x38\x22\x30\x8a\x65\x2b\x25\x9b\x05\x5a\xa8\x60\x0d\x40\x06\x17\x51\x2c\x96\x86\x16\xa8\x9c\xbf\xb0\x67\x61\xa8\x25\x0c\x94\xa1\xd0\xc3\xc0\xa3\xf3\x5b\xce\xb4\x2b\x96\x88\xb9\xb7\x50\xf1\xe2\xae\x85\x0a\x66\x2d\x61\x17\x7e\x32\x0b\x59\x2a\xc1\xc4\x5a\x03\x57\x52\x2e\x9b\x7a\x1e\x87\x8f\x58\x27\xaa\x19\x74\x9e\x04\x29\xf7\x39\x53\x2d\x0d\xe6\xda\x75\x66\x1a\x40\x9d\x01\x5e\xed\x1a\xcf\x4f\x6b\xf3\x38\xe2\x95\x89\x36\xce\x55\xe2\x70\xf6\xfc\x5c\x2c\xf3\x66\x33\xed\x8e\xa6\x1d\x28\x8e\x28\xb5\x28\xa2\xea\x17\xb1\x75\x34\xed\xc3\x2a\x0c\x71\x71\x24\x5b\x11\xaf\x36\x0b\xc4\x4a\xa0\x7f\x9a\x83\x6a\x96\x3b\xb1\xde\x34\x41\xb2\x74\x61\x74\xa7\x6d\xf5\x35\x50\x96\x9a\x35\x28\xbb\x05\x06\x36\x1a\x2c\x75\xbd\xe1\x0d\x2d\x8e\xd5\x4c\xae\xd4\x90\xa7\x3b\xd8\x9b\xe8\x2f\x8a\x93\xf0\x77\x1b\x39\x2f\x65\x31\x00\x46\x17\x88\xc9\xcc\x21\x2e\xde\x3d\x66\xae\xdb\x68\x75\x8e\xc1\xe7\xf5\x35\x79\x3b\xba\x72\x02\xb3\x15\xbc\xcc\x1f\x40\x6d\x72\x9d\x04\xa0\x44\x1a\x0d\x72\x8d\x2c\x04\xfe\x51\xaf\x20\x0c\xe5\x0a\x35\xd6\xcb\x63\x51\xb5\x26\xae\xfe\x0e\x6f\x15\x09\xe9\x6d\xca\xd9\xa2\x99\x92\x19\x9b\x5a\xf6\x93\xe7\x64\xb9\xd6\x38\x2a\x74\x0f\x50\xf1\x2c\x2d\xae\x03\x0a\x47\xab\x34\x3d\xc2\x2e\x84\x91\xb8\x02\xaf\x0b\xfc\xac\xd7\xfb\x7b\xda\x61\x12\x5c\xc1\x34\xe6\x3d\x4c\x9b\x2d\x1b\x28\x64\xd1\x55\x90\xc4\x11\xcc\x5d\x9e\x48\xde\xf7\x93\xfd\xa3\xf7\x2e\xc1\x15\xf4\xb6\xdd\x1f\x88\x19\xc4\x7d\x79\x0a\xa5\x3c\x97\x42\x35\xda\x95\x9f\x04\xc0\x95\x94\x96\x17\x03\x80\x5f\x30\x88\xdb\x73\x7f\x11\x84\x8f\xb0\xb1\x05\xe1\x7e\x46\x5e\xb3\x7f\xf7\x3f\xaf\xb4\x63\x3f\x4a\xb5\xf7\x71\x14\xc3\x24\x79\x1f\x14\x62\x1c\xa9\xe7\x83\x84\x31\x48\x52\x8d\xbc\x67\x51\x88\x20\x27\x52\xba\x08\xd5\x16\x71\x14\xe3\x1a\xc9\xb3\xc2\x1a\x91\x5c\x85\x92\xba\x0a\x09\xcb\xbe\x0b\x64\x92\x09\xc3\x38\x27\xff\xc9\xeb\x63\x56\x9f\x92\x20\xe2\x15\x96\x61\x8d\x80\x0b\x06\xc2\x32\xb8\x61\x61\x5a\xa8\x63\x11\x0b\xcf\xe4\x69\x93\x3f\x3f\xe2\x81\x1f\x06\x7e\xca\x66\xd5\x85\xb0\x32\xda\x6c\xb2\x23\xab\x54\xd7\xc5\xff\xe8\xca\xab\xdd\x33\xa9\xa6\x7e\xaa\xf3\xcd\x1c\xfd\x0f\x2c\xbe\x5e\xc6\x0b\xd6\xfe\xc6\x6e\xd3\xb6\xd8\xd9\xf2\x1b\xd7\xd9\x00\xdd\x73\x96\x7d\x17\x90\xe6\xb3\xd4\xdb\x59\x34\x11\xf1\x25\x08\xdc\x9d\x4a\x31\x74\x91\xa0\xcc\xe7\x13\xed\x1b\xbb\x9d\xe2\x31\x3e\x9c\x89\x4a\xab\x0e\x9a\x2c\x2b\x22\x1c\xa5\xcf\x27\xb8\x9a\x95\x36\x21\x15\x35\x62\x7b\xbf\xb1\x5b\x75\x9d\xd0\x13\xbf\x44\x67\x6b\x72\xbb\xda\xc2\x5f\x82\xed\xc7\xa5\x40\xf9\xb1\x08\xf4\x48\x7e\x10\x0a\xa8\x7d\x5b\x78\x9b\x4d\x44\x35\x70\xec\x61\x86\xbd\x00\x3b\xa0\xf6\x83\x42\xc9\x54\x9b\xc7\xa0\x29\xd9\x4c\x3b\xbf\xd5\xc4\x47\x46\x68\x90\xc4\x24\xda\x26\x27\xc1\x33\x36\x0d\xc0\x72\xc7\x89\x76\xc9\x6e\x7c\xf5\x28\xa6\x80\x29\xc5\x19\xbc\xf8\x16\x98\x6d\x1e\x93\x68\x24\x79\x0d\xb3\x69\xb5\x22\x0e\x13\x55\x64\x7f\x9c\x69\x4b\x2a\x97\x04\xe4\xc7\xb2\x12\xd2\x03\xac\x6b\x0e\x4e\x03\xbb\x59\x86\x7e\x84\x1f\x1c\xd4\x1c\x79\x0e\x1e\x06\xa7\xf8\xb9\xaf\xb2\x8a\xfe\xee\xcb\x51\x34\x13\x6b\x7b\xc7\xb8\xac\xa7\x15\xbb\xe6\x34\xfa\x7e\x1a\x69\x1a\xfa\xd0\xed\xdd\x90\xb7\xdf\x12\x57\x23\x95\x1d\x55\x84\xe6\x30\x62\xd2\xf2\x0e\xa0\xf0\xea\xf2\xc2\xab\x9f\x21\xf3\xf4\xd9\xcf\xfb\xef\xde\x7d\x3c\x3d\x8d\x4e\x9f\x91\xd3\x08\x57\xfc\x16\xfe\x4d\x5b\xb4\xba\xad\x3a\xea\x61\xe9\xcf\xf6\x80\x58\x2c\x53\x3b\xef\xfd\x1b\x4d\xec\xf5\x86\x86\xfb\xda\xeb\xbd\x63\xaa\x7d\x3c\xde\xa3\xda\xe1\x7b\x64\xde\xee\xe1\x71\x2e\x29\xe7\x0c\x06\x2c\x38\x0f\x17\xc1\x15\xd3\x56\x4b\x14\xd9\xdc\x4d\x15\xdd\x0e\x63\x13\xaf\x69\x11\x83\xd3\x4f\x58\x7b\x0e\xa9\xdf\x38\x3e\xa7\x71\x74\xc5\x12\xae\x21\x6a\x21\x77\xa2\xa7\x83\x44\x3b\x00\x91\x61\xff\xb1\x0a\xae\xfc\x90\x81\x33\x98\x4f\x0c\x43\x56\xfe\x54\x2b\xbe\x30\xab\xaf\xbb\xa9\xa4\x96\xfb\x72\xd5\x5e\x7e\xbc\xfe\xa1\xb9\x6b\xf5\x23\x7c\xf6\xc9\x5d\x8c\x73\x5f\x0b\x99\x3f\xc3\xb3\x3f\x58\x89\x5c\xe5\x14\x14\xc4\xab\x94\xb5\xc5\x9e\x87\x69\x18\x4c\xbf\x3d\x76\xfa\xd6\xe4\xb8\x3c\xc3\x0c\xf0\x40\x85\x5f\x2a\x96\x32\xce\x57\x9c\xc7\x91\x86\xd8\xd3\x7c\x41\x2d\xff\xee\x08\x83\xe4\x4a\xac\x75\xce\xd8\x92\x45\x30\x58\xd4\x70\x90\x04\x22\x51\x6d\x81\x89\x64\x93\x07\xc0\xf5\x21\xe6\xcc\x15\xcb\x3d\xa8\x08\x25\x9b\x71\x77\x47\x4b\xd2\x01\x79\x6c\xa6\x2d\x82\x29\x48\x4a\x22\x9c\x28\xfc\xc0\xd7\x80\xfd\x09\x2d\x2f\x6c\xb7\x31\xa9\x45\x6d\xda\xa5\x3d\xda\xa7\x83\x33\x4a\xde\x63\xd3\x11\xb1\x64\x00\x4a\x75\x54\x9f\x2a\xa8\xa5\xfa\x3c\x8b\x6a\xd7\x38\xe1\x52\x93\x8e\x45\x30\x83\x26\x95\xb8\x29\xbe\xc2\x45\xed\xbf\x59\x56\xe1\x93\xbe\x2e\x74\x26\x74\x75\xb6\x5f\x04\xbf\xcc\x44\xda\xdf\x2c\xab\x8a\xb7\xa1\x93\xf4\x34\x40\xcd\x0c\x53\x1d\x9f\xc3\x58\x93\x0b\x40\x0b\xc1\x07\xe5\xbc\x8b\x86\x5d\x05\xfe\x3a\x02\x0d\x6c\x97\xa9\x79\x9e\xe8\x0a\x7d\x99\x04\x0b\x3f\xb9\x35\xe4\xfb\xce\x69\x64\xc1\x4b\x59\x54\xf7\x57\x37\x41\x18\x94\x01\x6c\x00\x10\x44\xea\x62\x95\xba\xfc\xfe\x49\x82\x74\xba\x4e\xd4\x4f\x7f\x2f\x79\x82\xe1\x74\x1d\x27\xb3\x36\x1e\xdd\x6e\xe3\xe9\x94\x36\x94\x7b\x8a\x48\x91\xc9\x2f\xa7\xa7\xe9\xe9\xe9\xe4\xf4\xf4\x4c\x37\xbe\xdf\xbf\x78\x79\x4a\x9e\x9d\x9e\xfe\xb2\xf5\x2f\xff\xf4\xcf\x7f\x6e\xfd\x85\x8e\xdd\xff\x72\x56\xf0\xa3\x9e\x1d\xb1\x8b\x55\xe8\x27\x60\x49\x12\x96\x7d\xd1\xbe\xf4\x43\x2e\x8e\xc7\x48\xfb\x04\x1c\x10\xfd\x90\x72\x3f\xe1\x86\x50\xba\xd9\xf2\x9a\x6c\x39\xcc\x6d\x61\x76\x21\xd7\x4e\xfd\xc2\x97\xa7\x69\xe8\xa7\xa8\xf7\x12\x86\x0b\xd9\xd2\x0c\x4e\x0b\xd3\xfc\xce\x69\xf4\x85\x69\x3e\xce\x5d\xc8\x3f\x08\xaa\x68\xd2\x21\x85\x0f\x27\xe0\x7c\x2f\x7d\x7e\x99\x6a\x73\xfc\xe6\x1f\xc1\x5c\x06\x09\x52\x33\xd2\x38\x65\x38\x2e\x6b\x7c\x7c\xe4\xe4\xf9\x29\x8c\xfc\x47\xa7\xc4\x4a\xf2\x04\x56\x4a\xa1\x64\xd1\xec\x8f\xe1\x64\xa3\x28\x89\xa1\xf2\x7b\xf0\xe0\xec\x2f\x0f\xb7\x5b\x1c\xae\xf2\xc3\xb0\xfc\x0d\x34\xfb\x50\x22\xa8\xf9\xbd\x04\xe7\x34\xfa\x94\x8a\x0f\x22\xec\x66\xa9\xbe\x72\xe6\xab\xbf\xe9\x2a\x41\x67\x3d\x90\x1f\xb2\x50\x66\x70\xce\x10\x07\x91\x30\x64\x4b\xff\xe2\xf7\x74\xca\x01\x9d\xb6\x5a\x3e\x9f\xc5\xd7\xd1\x13\x1d\xf3\x7a\xd1\x47\x39\xe7\xa5\x62\x6b\x1d\xf4\x32\x54\xee\xa4\x93\xa5\x9f\xa6\x6d\x3f\xe4\x6d\xe1\xd2\x3e\x75\xd3\x68\x71\x19\xad\xe8\x4e\xe4\xeb\x35\x50\x01\xee\x3d\xb4\x3a\x9d\x91\x1a\x08\xd2\xb9\xc9\x95\xb1\xdc\x4a\x77\x2b\x96\x4e\x92\x55\x14\x41\x37\x89\xcd\x44\x41\xa4\xf9\x99\x3b\xc4\xfd\xf3\x7c\xc3\xe2\x6d\xbc\xd2\x66\xb8\x57\x0d\xbf\xfb\x0a\xdb\xf5\x2c\xd5\x4e\x89\x88\xf3\x8b\xd5\xf9\xe7\xa7\x44\x53\xd1\xd3\x34\x7f\x3a\x65\x21\x4b\x7c\x1e\x27\xc0\x4b\xdc\xcf\x14\xc5\x3c\xab\x12\x2b\xe3\xfe\xb9\x16\xf0\x67\xa9\x76\xce\x38\x17\x1f\x17\x54\x5f\xa4\xac\xe8\xca\x89\x85\x16\x24\x07\x66\x0e\xc2\xd5\x5f\xa5\x18\x6d\x44\xbb\x0a\x16\x60\xbb\xd9\xc2\x9f\x0a\x59\xcd\xa4\x24\x63\x07\x76\xf3\x39\x53\xdb\x08\x41\xe7\x15\xd9\xa3\x15\xfc\xc2\x5a\x99\x14\xac\x54\x81\x0c\x01\x8d\xbd\x52\x70\x0a\xf2\x4d\xb6\xd9\xde\x3c\x69\xf6\x51\x3a\xa4\x99\xc6\x53\x86\x99\x38\xe0\x82\xfc\x1f\x2a\x0f\x38\x5b\xf8\x9f\x02\x51\xfe\x78\xf4\x54\x89\xa8\x17\xfa\xe3\x44\x02\x67\x1c\x7f\xa8\x48\xbc\x87\x1a\xfe\xa7\x48\x64\x22\x91\xf3\xe3\x09\x22\x51\x2f\xf4\x07\x8b\xc4\xd5\x6f\x9f\x79\x22\x9e\xcf\xda\x05\xe3\x29\x4a\x82\xb0\xe7\x48\x2b\xd4\x25\xb7\x33\xb5\x99\x3a\x02\xf2\xf8\x75\x03\xb2\xe2\xf3\xb6\x43\xe8\x44\x25\x48\xe2\x5f\x8b\x93\x0b\x62\x8e\xcd\xf2\x8b\xbc\x45\x11\x9c\x1f\xcd\x7c\xee\xe7\xbb\xa8\xb2\x0d\xb0\x48\x91\xdc\x26\x11\xcc\xc4\xa7\xfe\x14\x37\x2c\x3c\x43\xf4\xcf\x90\x55\xcf\x12\xff\x5a\x6c\x51\x13\x56\xb6\x1d\x47\xe8\x5e\xf0\x24\xfe\xf6\x08\x27\x2c\x3f\x7d\xd2\xf4\x8d\x59\xa0\xcc\x06\x08\x6e\x7f\xc4\x0f\x37\xd1\xad\x96\x55\x52\xa9\x3c\x5e\xf1\xe5\xea\x11\x2e\x70\xa1\xe6\x06\xbf\x66\x5d\xcd\x99\x47\x23\xaa\x29\xd4\x7d\xee\x27\x6d\xb9\x23\xe7\x07\x9b\x7d\x72\x89\xdf\x09\x71\x97\x43\xc1\x63\x5a\xa8\x35\x1b\xd9\xc6\xeb\x4b\xc6\xc2\xf6\xc2\xbf\xc5\x15\x91\xb6\x9f\x24\xf1\x75\xfb\x71\xeb\x37\x8d\x6d\xc6\xe1\x2e\xbe\x44\xc8\xcd\xfe\x2c\x91\x93\xda\x74\x9a\x30\x16\x69\xe7\xab\xf9\x9c\x25\x62\x17\xcb\xeb\xfd\xbd\xbd\xb7\xef\x35\x7d\x37\xbf\xbf\x41\x13\x17\x38\x68\x18\xee\x2b\x9b\x5f\x32\x2a\x27\xba\x48\xaf\x62\x28\xee\xd3\x97\x53\x46\xb6\x58\x85\xb8\xb7\x1b\x5a\x20\x16\x7b\x50\x23\x70\xa5\x34\x38\x5b\x2c\xe3\xc4\x4f\x82\xf0\x56\x9b\x89\x73\x2e\xa8\x0d\x2e\xe3\x30\x77\x71\xd1\xdd\xfb\xc6\x6e\x73\xbd\x59\x98\x34\x4d\xe3\x05\x4b\xb5\xd5\x52\xa8\x50\xd1\x48\x70\x0d\x93\x54\xd3\x43\x96\xa6\x06\x28\xa3\x44\xae\xfa\x2c\x7c\xe1\x5d\xa6\x9a\x5a\xe4\x66\xb3\x80\xe3\x17\xc3\xab\xe0\x79\xe4\x47\x31\x82\x0b\x2c\x82\x35\xcf\xf9\x62\x75\xd3\xd0\x39\xf1\x15\x6b\x2f\x56\x21\x0f\x96\x61\xf0\x18\x0b\x92\x77\x8c\x55\xfc\xe0\x90\xa3\xc8\xbe\x6c\xe0\xe7\x06\x6d\xc6\x42\xee\x83\x3e\x15\xcc\x95\x5c\x9d\xfa\xa8\x66\xa5\xbe\x94\x1c\x47\x88\x0e\xb8\x53\xf8\x21\x3d\xbe\xd6\xe6\x7e\x2a\xd4\x01\x3a\xc9\x45\xe7\x18\x05\xea\x0f\x51\x3c\x35\x7d\xa3\xf4\x74\xa6\xf7\xd4\xc8\xfa\xa1\xfa\x83\x34\x6e\xdb\xa6\x6d\x03\x09\x79\x3a\xa3\x06\xff\xb6\xc3\x78\xfa\x8d\xcd\xa0\xae\xe2\xc7\x9c\x6c\x44\x67\x34\xea\xaf\x3f\xee\x1d\x8b\x85\x99\x37\xc7\x1f\x11\x97\xdc\x14\x50\xd8\x93\x80\x2b\xf5\x3c\xf1\xa3\x34\x94\xa7\x09\xf4\x30\xf8\xc6\xb4\x8b\xc4\x5f\x5e\x06\xd3\x14\xde\xa7\x80\xe4\xd3\xc9\x41\xdb\x51\xe2\x9b\x6a\xe9\x6a\xb9\x8c\x13\x75\x82\x25\x4e\xd5\xd6\x39\xa6\x09\xf2\xc4\x37\xb8\x48\x1d\xa1\x2a\x31\x6f\xea\x47\xe5\x0d\x5c\x9a\x8f\x46\x9a\x07\x0b\xb9\xc8\x94\xb5\x45\x2c\x60\xe6\xe7\x4d\xd4\xde\x31\xb5\xbf\x98\x07\xd3\x6f\x62\x31\x41\xd0\xb7\x8a\x70\xdb\x01\x38\x0f\xe2\x43\x31\x18\xc6\x6f\xe0\x76\xb0\x68\xc6\x70\xf9\x1e\xa1\x43\x76\xe1\x4f\x6f\xb5\xc2\xed\x2d\x52\x72\x70\x91\x5c\x04\x4f\x7d\xfa\xce\x96\xe2\x87\x66\x18\xce\xdb\x9a\xb8\x31\xac\x69\x87\x0b\xaf\x6f\x6f\x91\x3b\xbd\x92\xf6\x34\x7d\xda\x56\x47\x52\x3d\x28\x83\x67\x27\x52\x7e\x1b\xb2\xf4\x92\x89\x63\x1e\xea\xf3\x4a\xf5\x9b\x77\x16\xf3\xbe\x58\x7b\x1b\xd4\xc6\x93\x49\xc0\x61\x1e\x06\x11\x6b\xe7\xdf\xfd\x56\x29\x58\x9c\xbd\xe3\x63\xa1\x89\x70\x63\x1e\xbf\x0d\x95\xda\xcb\x82\x62\x93\xb3\xe6\x63\xc9\x59\x30\x15\x4f\x1e\x94\x16\x07\x69\xf4\xa6\x83\xda\x19\x6c\xe3\x39\xef\xce\x34\x8e\x52\x9e\xac\xa6\x3c\x4e\x9a\x0e\x67\x43\x99\xd5\xf9\xf1\xea\xbc\x16\xc6\x30\x3e\x4f\x59\x72\xc5\x92\xf4\xab\xf7\x5d\x04\x34\x41\xb8\x8e\x3f\x9b\xbd\x92\x7b\xe4\x4a\x87\xc8\xc5\xf9\xef\x88\x5d\x6b\x0a\x34\x0f\xb5\x25\x03\x15\x0a\x04\x39\xc1\x6c\x92\x9c\x79\xf5\xfc\x49\x72\x26\xcf\x76\x1b\x85\x7a\x0b\x01\x66\x56\xe7\xe9\x34\x09\xce\xab\xc1\xaf\x65\x37\x97\x68\xbf\xbb\xd3\x2b\x39\x13\x76\xe6\x4d\xce\x64\x7c\x98\x52\x76\x67\xb9\x4a\x2f\xd7\x55\xba\x8a\xd6\x55\x5b\x88\x4f\x53\x42\x27\xee\x49\x11\x61\x64\xc8\x9b\xe8\x0a\x1d\xb1\x74\x85\x1d\x8a\xc1\x7c\xc6\x2a\x80\xab\x0a\x3a\xc3\x45\xdc\xd6\x17\xa6\x2c\xf4\x21\xe6\x5a\x56\xeb\x4c\x94\x49\x3a\x29\x8c\x5e\xa6\x07\x2a\xfe\x4e\x95\xd2\xe5\xea\x3c\x0c\xd2\xcb\x12\x95\x34\x29\x5c\x71\x14\x40\x77\xb1\x17\x71\x21\x1e\x5c\xe1\x4e\x81\x80\x9a\x94\x6d\x5b\x06\x8d\x27\xec\x0c\xb8\x21\xe2\x6c\x37\xb4\x2f\x6e\xb5\xf4\xd8\x9b\x9c\x81\x8c\x4d\x7d\xae\xc7\x86\x41\x13\xc8\xdb\x89\x05\x2b\x13\xc3\x8d\xbd\x49\x72\x66\xd0\xb8\x56\x85\x69\xac\x09\x5b\x70\x3d\x25\x54\xc6\x58\x3e\x8a\xaf\xf7\x50\xb1\x88\xc7\xe3\xe0\x57\x96\x3d\x9c\xb0\x1b\xbe\x9b\x7d\xb2\xc6\x20\x07\xc7\x68\xd5\xeb\x21\x8d\x60\x92\xb0\x9b\x24\xfe\xad\x37\x39\x93\x61\x81\x70\x23\x1a\x06\x3a\xff\xea\xb1\xbb\x3b\x47\x86\x24\xe6\x25\xa4\x52\x98\xcb\x35\xa9\xab\x33\x94\x06\x31\x8a\xf1\xaa\x0f\xe5\xb9\x16\x59\x52\xd0\xaf\x43\x63\x8b\x50\x47\xf1\xf5\x87\x78\xc6\xbe\x62\xdc\xe7\xe2\x8b\xe6\xdc\x8f\xf3\x79\xca\x78\x31\xff\x3a\x4e\x66\xaf\x12\xe6\x7f\x7b\xef\xf3\xe9\xe5\x3b\x36\xe7\x6b\x5f\x1e\xe1\x35\x1b\xeb\xde\xbe\xc7\xf5\xcd\x2c\xfe\xb4\x60\x60\x41\x94\x2e\x18\x06\xec\x6f\x08\x64\x29\x1a\x88\xd1\xfc\x6b\x1c\xa5\x65\xae\x4b\x31\x33\xd6\xd5\x20\x6e\xfd\x58\x17\x2c\xb3\x8a\x66\x1d\x16\xbc\x58\x64\x6d\xc4\xcd\x02\x75\x8d\x08\x52\xc6\xf7\x72\x98\xba\x08\x95\x05\xa6\xa9\xcb\x25\xc8\x4b\x4f\x5d\xfe\x07\x28\x4b\x10\x7a\x53\xa9\x24\xbe\xa6\xac\x6d\x35\x33\x07\xed\xf2\x51\x7c\xbd\xae\x59\xea\x7d\xaa\x5b\x86\x0c\xf4\xb5\x16\x47\xba\x36\xc0\x7c\xce\x61\xa9\x59\x4c\xca\x9a\xe9\x91\xe7\x7d\x4b\x14\xd5\x06\x59\x8e\xe5\x11\x78\x1a\xc2\xd8\xe7\x88\x24\x18\xde\x36\x27\xc3\xcf\x65\x2f\xd7\xa1\x5e\xc6\xcb\x0d\x0c\x13\x6f\x37\xb1\x4b\x42\x3c\x9e\x59\x8d\x42\xda\x66\x6b\xe9\x5b\xa5\x97\x0f\xf0\x0f\x55\xe7\xe6\xe2\x65\xfa\x44\xf6\x93\xd8\x24\x7c\xbd\x32\x21\x59\xd0\xf6\x5a\x1b\x19\x35\x29\x7f\x00\x51\x5a\xbd\x50\x2f\x0b\xb3\x69\x8e\x93\x17\x5c\x45\xce\x4c\xb6\xb7\x8d\x35\x95\x6c\x27\x50\x0d\x98\x8b\xc6\x9a\x12\x06\x13\xb3\x2a\xef\x36\xf6\x0d\xa3\xeb\x3b\x3a\x43\x57\x25\xfc\x01\x8c\x6b\xf9\x80\xf6\xdd\xe7\xac\x3c\xe8\x6b\x6e\x55\x65\xfc\x03\x11\xbf\xa7\x81\x68\x24\x0e\xf7\xc7\xec\x29\xd4\x6b\x48\x52\x95\xca\x3b\xb7\x4e\xde\xbf\xcb\x6e\x2b\xa8\x00\x08\xd6\x65\x26\x11\xcc\x77\x24\xce\x2b\xcd\xc3\xf8\x9a\x18\x4d\xb4\x99\x1b\x74\xe6\x9a\x97\x0a\xa1\x27\xef\x0b\x61\x63\x19\xf7\xb2\x6c\xa5\x3b\x41\x2a\x37\x13\xea\xc6\x0e\x21\x6e\xd0\x99\xa3\x3d\xb8\x0c\x38\xc3\x6d\x87\x75\x03\xa5\x82\x15\x35\x62\x8b\xf0\x7a\x88\xf1\x86\x77\xde\x96\xd5\xe4\x2e\x74\xd2\xdb\x68\xba\x87\xbb\x94\xcb\x91\xff\x2b\x60\xc2\x97\xdf\x8b\x23\xee\x07\x11\x4b\x74\x26\x63\xcd\x56\xb8\xec\x2f\x97\x2c\x9a\xed\x5d\x06\x21\x5e\x1f\x57\x93\x82\xa4\x91\x06\x45\x22\x7f\x90\xc2\x66\x49\x89\x17\x8b\x80\xbf\x0b\x22\xf6\x51\x71\xff\x01\x69\x49\x19\x5f\x2b\x09\xea\xca\x92\x46\x73\xbb\x66\x98\x94\xae\x90\xa9\xf9\x10\xdf\xd9\x4b\xaf\xf1\xcd\x8e\x0e\x13\x9d\x38\x64\x2a\x56\xe3\x51\x7c\xad\xc5\x2b\xdc\x19\x71\x8e\x61\x0c\x44\xfc\x4c\xca\x9a\xcb\xb7\x2d\xc3\x65\x2f\xcc\x56\xeb\xf1\x78\x60\xcc\x4a\x6a\x8a\xc2\x55\xa3\x44\x38\x16\x75\x24\xe0\x3a\xd6\x8b\x03\x21\xbc\x89\x90\x8d\x68\xcc\x46\x37\xb4\x36\x84\x92\x4a\xe3\x27\xec\x8c\xc2\x04\x04\x8f\x54\xa2\xa8\x8d\x83\xbb\x3b\x1d\xb2\xe2\xeb\x88\x25\xea\xe2\x33\x29\xb3\xe0\x09\x43\xaf\xeb\x84\x18\x34\x29\x49\x68\x60\x08\x91\x4f\x3d\x13\xa7\x7d\x89\x0a\xa9\x59\x92\x96\x9d\x8c\x61\x4d\x7a\xa0\x5d\xd7\x1b\xad\x96\x1e\x78\x55\xd1\xa7\xe9\xd3\x90\x18\x6e\x93\x6e\x4d\x1a\x39\x86\xfa\x18\x64\x70\x1c\x8c\xc5\xd4\x2e\xf2\x78\x3b\xa5\xbe\x57\x9d\x08\x74\xa2\x78\xc6\xd0\xeb\xd4\x03\x11\xea\x35\xe8\x44\xec\x86\x1f\x07\xe7\x30\xd1\xbf\xbb\xf3\x5f\x46\xa5\x90\xc9\xc5\xc1\x1b\xd0\xab\x38\x98\xe9\x4d\x4a\xdc\x18\xa7\xdb\x9e\x4f\x03\xaf\x84\x4e\xdc\x22\xa1\x29\x99\xb8\xf6\x93\x48\x27\xbb\xf9\x5e\x75\x3c\xb5\x2d\x56\x72\xd5\xe1\x7a\x2d\x8e\x34\x26\x82\x1a\x88\xf1\x47\xd6\x0c\xc6\xdb\x68\x9a\x5d\x1c\xb7\xe7\x27\xac\xe2\xff\x26\xb7\xdf\x59\x76\x9b\x9c\x5e\xeb\x8c\x06\x7e\xdf\x4f\x31\xbc\x3d\x33\xc4\xc2\x41\xbd\xc6\x65\x18\x70\xc1\x88\xa6\xa9\x34\x18\xac\x38\x62\x28\x69\x5b\x96\x41\x53\x8f\xa1\x22\x93\xf1\xf0\xc6\xa5\xa7\xe6\x7e\x39\x96\xb7\xed\xa1\xe3\x42\x93\x52\x81\xa0\x73\x3d\x55\x91\x60\xd3\xda\xeb\x56\x0b\xa3\x09\xb3\x08\x09\x94\xfe\xcd\x2b\xdc\x9a\xa9\x27\x94\x15\xfb\xc4\xa0\x25\x4a\xee\xee\x4a\x25\x85\x95\x14\xa3\x63\x8d\x17\xb6\xf0\x6f\xcf\xd9\x5e\x18\x2c\xf7\x56\x09\x94\xab\x18\x67\x11\xea\x79\x83\xdc\x35\x88\xb5\x08\x1e\xfe\xa2\xae\x57\x8c\x4d\x73\x96\x1a\xb4\x8a\xaa\xfb\xf8\x49\x4c\x93\x22\x7b\x40\x27\x15\x2f\xa0\xe3\x1b\x86\xf4\xf8\xf7\x20\xe5\xb1\x8c\x14\x5c\x6c\x90\xea\x17\xac\x6d\x29\xb6\x14\x40\x1f\x2d\x8b\xb5\x81\x63\x36\x54\xb2\x6d\x19\xc5\x08\xf5\x0d\x1d\x4c\xeb\xfa\xb0\x28\x93\xa0\xb6\x92\x92\xec\x05\xc6\x43\x45\xf8\x8b\xba\x11\x7b\x2a\xcb\x4b\x3a\xb6\xa9\xaf\x9b\x35\x81\x18\x5e\xd5\xe8\xff\xd9\x6a\x62\x8d\x67\x89\xc7\x4b\xaa\xe0\x47\xdc\x53\x69\xa7\x84\x1a\xe0\xe2\x46\xd2\x8a\x13\x56\x11\xc0\x6d\x4f\x44\xa1\x8e\xbc\x7a\x8f\x6d\xb6\x0c\xdc\x68\x47\x30\x22\xfd\x17\xa6\x68\x53\xe8\xd5\xfd\xd3\xb6\x6f\x64\xb7\x5e\x54\x1c\xb6\x55\x34\x63\x09\xd0\x7f\x77\xd7\xe8\xcf\xf1\x24\xf8\xc6\xf8\x65\x12\xaf\x2e\x2e\x9b\x41\xf2\xd8\x2b\xcd\xef\xaf\xa7\xc0\x35\x75\xc3\x7b\xe5\xa5\x9f\x4e\x83\x40\xbc\x17\x37\xf4\x34\x01\xf1\x20\x64\xaf\x7d\xee\x1b\xc1\x5c\xef\x6e\x79\x1c\x9b\x7f\x72\xbb\x64\x30\x5a\x0a\xf8\x8b\xd8\x38\x96\x52\x69\x5c\xb3\x47\xb4\xaf\xd9\x34\x4e\xf0\xcb\x44\x9e\x9f\xb7\x00\x5d\x57\x19\x34\xfc\xd2\xe3\x9b\x7d\x94\xb0\xd9\xad\x2e\x29\xf4\x4b\xca\xcb\x0a\xbd\x66\xa8\xb9\x77\xd9\x38\xd5\xf2\xda\x3e\x4d\xbc\x50\x58\xe5\x92\x4c\x7a\xc9\xb6\x17\x8a\x2b\x0f\x98\x17\x6e\xb3\xb1\xef\x99\xf7\x6b\xba\x17\xf7\x1f\xb2\x34\x9f\x0b\xf0\xec\xf6\x9d\x32\x4e\xd3\xf3\xfc\x9d\x64\x9b\xb9\xa6\xe7\x45\x3b\x6c\x3b\x71\x37\xaa\x1a\x6a\xd2\xc8\xd8\x66\xdb\x9b\x81\x22\x63\x9d\x17\xb2\xed\xa5\x28\x92\x50\x9b\x60\xf7\xd4\xe3\x9d\x65\xc2\xae\x82\x78\x95\x66\xaa\x66\xae\x4f\xe5\x62\xd7\x43\xed\x9a\x66\xed\x9a\x16\xdb\xb5\x5d\x5e\x4b\x13\x2c\x9f\xae\xf5\x8d\xca\x43\xb6\x84\xc9\x30\xc6\xb3\xc7\xce\xb6\xea\x4e\x59\xb3\x74\xcc\x28\x6f\x90\x88\xd9\x5a\xf2\x52\xbc\x71\x0a\xba\x4a\xf0\x6c\xe5\xf1\xb2\x6a\x9e\xeb\xab\x47\xf2\x6b\x95\xf1\x6b\x55\x92\x03\xb6\x5d\x7a\xae\x53\xb7\x7a\x24\xf3\xd8\x1f\xc3\xb0\xd5\x93\x18\xb6\x41\x71\xce\x0c\xe3\x5e\xd8\xa0\xcc\x57\x44\x89\x45\x3d\xfc\x68\xc2\x1f\xd3\xc5\x0f\x28\x80\x59\xd3\xf0\x4f\x1b\x8d\x19\x98\x18\x3c\xc3\xfa\x80\x3d\x2b\x7a\x26\x1b\xbc\x1e\xbc\x3d\x42\x8a\xc1\x84\x9d\xc9\x09\x5c\xcd\x6c\x3d\x5a\xb5\x54\x7d\x1c\x29\x8a\x6b\x7c\x99\xd2\x5d\x09\x65\xf7\xde\xf3\x58\xc3\xc4\x26\x53\x1d\x49\xad\xbf\x6b\xe6\x34\x91\x5d\x33\x63\x21\xe3\x6c\xef\xd2\x4f\x52\xfd\xbd\xcf\x2f\x3b\x8b\x20\xd2\x13\xca\x0d\xa3\x78\xc3\xa7\xbc\x1b\x6a\x8d\x13\x5d\xc0\xf1\x48\x0f\xa2\x6e\xc3\x83\x4d\xde\x27\xde\x8d\xc2\xbc\x8c\x3e\xd6\xe0\x60\x06\x46\x36\x60\xcd\xcc\x7f\x4b\x69\x44\x7d\x8f\x8d\x61\x4e\x21\xae\x0c\x4a\x37\xfb\x0a\x94\x3f\xde\x9b\xa4\x26\x4d\x8c\x07\x14\x7c\xb2\xcd\x0c\x1a\x3d\x50\x27\x6b\x7b\x69\x3b\xa2\xc9\x8b\xb4\xd5\x8a\x5a\xad\x34\x53\xf9\xe1\xa3\x46\x19\xd1\x88\x31\xe6\x6b\xa7\x4c\x61\x6d\x80\x95\x9a\x48\x08\x8d\x3c\x13\x68\xb0\xee\x95\x55\x2f\xaa\x4c\x30\x40\xad\x16\xdf\xaa\xf5\x63\xab\xc5\xd7\x4d\xb6\x70\x41\xe4\x92\x26\xc2\xec\x76\xeb\x65\x0b\x0e\xca\xd6\xa6\x21\x90\x59\xbe\x0a\x0c\x1a\xbe\xaa\x35\x34\xea\x76\xac\x0a\xd2\xa4\x49\x36\xf4\x4d\xbd\x8a\xec\x3e\xd0\x69\x89\xa7\x0d\x35\x17\x5e\x37\xae\xc6\xe6\x13\xaf\x55\xd3\x24\xe3\xc1\xd5\x9f\x07\x57\x2c\x9b\x0c\xc1\xaa\x91\x94\xfb\xf5\x3e\xbc\x40\x35\xcd\x6e\x0b\xf7\xd7\x7d\xfc\x7b\x17\x44\xec\x98\xfb\xf8\x21\xe2\x6b\x49\x0b\xe0\xa5\xad\xac\xca\x49\x9c\xe4\x97\xb3\x3a\x97\x7e\xba\x61\xce\x60\x30\xaf\x56\xa4\x74\x4b\xe4\x3a\xb2\x80\x6b\x75\x92\x84\x72\x22\x64\x8c\x4e\xf2\x76\x79\x81\x83\xb2\xcd\xc4\x48\x6a\x8a\xe3\x44\xa9\xe3\x75\x94\xfc\xed\x28\xbe\xde\x8d\xa6\x2c\xe5\x71\xd2\xc4\xa0\x56\x8b\xfc\xad\x7d\xf4\xf1\x0b\xd9\xf2\x00\x73\x3c\x63\x1f\xfc\x05\x93\xad\xce\x86\xd9\x83\x0d\x56\xaa\xf3\x4b\xc0\x2f\xd5\x02\xf2\xd7\xda\x46\x84\xa2\x61\x6b\x5b\xe3\xc2\xfd\xf3\x55\x4a\xe5\x8e\x88\xad\x20\x87\xce\x94\xab\x67\x8e\x83\x2d\x4f\x29\xd6\xed\x4d\x23\x89\x19\x74\xeb\x01\x9e\xde\xdd\x6d\x95\xd7\x76\xb2\x0a\x2b\xac\x56\xb2\x98\x6e\x2b\x8a\x8b\x8d\x0e\x22\x90\x40\xd9\xd0\xc7\x70\x49\x14\x68\x62\x51\x51\xbf\x6d\xe5\x16\x57\x5c\x68\x5a\x7c\xb9\xd3\xb6\xdc\x0d\xb4\x14\x41\x11\xf9\x03\x84\x17\xc1\xcd\x7c\x31\x22\xf0\x4c\x0a\x3c\x4f\x5f\xb0\xce\x14\xc6\xe5\x07\x3c\xe0\x23\x3f\xeb\xa5\xdb\xdb\x6a\xb5\xb4\xf8\x7a\x92\xe2\x2e\x98\xa8\x70\x7b\x5c\xb0\x9d\x8c\x83\x8d\xbd\x15\xa9\xf1\xde\xb6\xd6\x71\x10\x90\xef\x46\x33\xa1\x43\xd6\x0b\x5b\x2e\xdd\xfc\xe5\x46\xf1\x18\xab\x8b\xc2\x7e\x50\x46\x78\xfb\x01\xf1\x5b\x23\x44\xaa\x27\x6a\xed\xc9\xbb\x63\xad\x14\xad\x29\xb3\xf1\x33\x6c\x53\xd7\x25\xaa\xeb\x82\x72\xd7\x25\x67\x74\xa3\xbb\x22\x16\xbd\xf9\x0b\x2f\x95\x7c\x20\xc7\x87\xbb\x1f\x88\xe7\x79\x41\xa6\x40\x76\x1e\x6a\x60\x40\xb9\xe1\x4e\x02\xca\xcf\x80\x87\xe9\x7d\x41\xc8\xd7\x7d\x38\x3a\xf2\xa3\x0b\x56\x1d\x31\x34\x10\x6d\x88\xbd\xb5\x35\x66\x22\x22\x97\xf7\xd5\xa5\xc3\xb1\xba\xcc\xfa\x51\x25\x13\x63\x2c\x8a\xa5\xad\x96\x1e\x00\x3d\x68\x77\xf4\x78\x62\x9e\xd1\x78\x62\x9d\x19\x14\x73\xf7\xa3\x99\x9e\x42\x5e\x0a\x79\x46\xf3\xea\x97\x38\x06\x98\xad\xbd\x57\xef\x4b\xcb\x9c\x58\xec\x6f\x6c\xf7\x2e\xd7\x4d\xc1\x77\xf0\x5d\x3a\x3c\x56\xf7\xa6\xaa\x1b\x65\x4f\xd3\xe7\x46\x69\x4b\x5a\xd5\x3a\xea\x6b\x14\x6d\x07\x8f\x1b\x66\x7e\x9d\x81\xb5\x24\x55\xae\x36\x2a\x78\xf0\xd8\x2b\xc5\x55\x86\x60\x22\xe2\x6a\x5b\x0d\xbc\x5e\x8f\x0f\x3c\x89\x02\x36\xa6\x3a\x24\xc3\x95\x66\x9f\x67\x2e\x1b\xb7\x44\x51\xbf\xe9\x0d\xee\x87\xa2\x61\xd3\x2b\xb1\x19\x8a\x5e\x96\xf8\x86\xe6\x5b\x4f\x0c\x3a\x2d\x7e\x37\x00\x96\x5f\x52\x93\xa6\x06\x5d\x15\xaf\x11\x8d\xb6\xc3\x6d\xf2\xcf\xc4\xa0\x33\x6f\xda\x49\x99\x9f\x4c\x2f\xf5\x95\x30\x61\x7a\xdb\xf2\xbc\xd9\xdd\xdd\xec\x65\x2c\x3b\x68\x59\xc7\x18\xd3\xf2\xf4\xee\xd2\x30\xe8\xbc\x74\x4f\xe9\x2f\x64\x3b\xdc\xf6\x0d\x7a\xe1\x2d\x65\x97\xcf\x11\xff\x85\xc0\xb9\xf0\xe2\xed\x32\x8a\x8b\x89\x79\x66\x8c\xa1\xf2\xc5\xdd\xdd\xe2\x45\xaa\x36\x44\x66\x23\x49\x4f\xe8\x8c\x2e\x28\xcc\x04\x3a\xfe\x6c\x86\x99\x3a\x07\x91\x15\xff\xea\xbb\xf4\xc4\x06\x3c\xb1\xef\xb0\xbc\x39\x4f\xee\xc2\x8b\xc3\xf0\x30\x4e\xca\x9f\x91\x9a\xf6\x8f\x8a\xcb\x7b\xb2\xed\x62\x87\x49\x7c\x15\xcc\x58\x92\xef\xb0\x52\xfb\xb5\x71\x13\x5a\x61\xcb\x99\x65\x52\x4b\x7d\xf2\x4c\x56\x21\x14\xc9\x37\x45\x64\x27\x6a\x55\x89\x8c\xa0\x4e\x36\xd4\x8a\x35\x4f\xb3\x8f\x2f\x30\xf2\xf7\xfc\xe9\x65\x69\x8f\x85\x72\xfa\xca\xef\xbf\xdf\x8b\xb7\xa1\x9f\x72\x31\xae\x91\xdd\xc5\x82\xf9\x2b\xb1\xc3\xad\x91\xc6\x7d\xdc\x9a\x3e\xfb\xea\x6d\x99\x79\x29\xdc\x37\x88\x5b\xcd\x64\xa6\xd8\xe6\xff\xe5\x92\xb1\xf0\x7d\x76\xaa\xe0\xab\x67\xe5\x45\x4e\xe2\xd5\xf4\x32\x27\x2b\x48\x45\xab\xd9\x6c\x3f\x9a\x65\xb8\x65\x4b\x55\xa4\x14\x21\x21\x87\x37\x9e\x35\x90\xef\x79\x12\x7e\x16\x37\x13\xa9\x2d\x0e\xb3\xe0\xaa\x48\xb7\xda\xf5\x58\xcc\xe3\x62\x57\x67\x9a\xd7\x5e\xda\x3a\x2c\xb2\x5e\xef\xbf\xfa\xf4\xd3\x57\x6f\x4b\x99\xf4\x5a\x8f\xd4\x77\x44\xa5\x19\x54\x26\x10\xa9\xd4\x62\x85\xda\x59\x34\x2b\x67\x04\xe9\x7b\xb5\x23\xbb\x94\xbb\x27\xbf\x60\xce\x8a\xfb\x64\x6a\x64\x14\xb4\xf3\x3c\x88\x66\x07\xd9\x87\xf1\xb5\x76\x95\x15\xbf\x9e\x27\xc2\x93\x00\xfd\xc4\xb3\x6d\xbd\x49\xb6\x36\x90\xa0\x52\xad\x1b\x61\x65\x80\x91\xd4\x72\xbd\xb8\x1c\x82\xdb\x82\x33\x0f\xea\x3e\xf1\x92\x26\x6f\xe2\x91\xed\x4a\x6f\xa3\x69\xf1\x33\x63\xb6\x2f\x98\xe9\xc6\xf7\x24\xe7\x71\x4c\xe5\x03\x50\xea\x05\x1d\x3f\x9a\x5e\x8a\xa9\x9c\x7a\x21\x34\x72\xf6\x4a\x3c\xd2\x44\xf5\x49\x2a\x92\xb2\xf8\x3c\x9e\xae\x52\x59\x3a\xd3\xe6\x2a\x5f\x3c\xdd\x67\xa4\xf0\x32\x29\x69\x85\x94\x22\xae\x32\x25\x05\x6c\x39\x21\x71\x89\x90\x52\x3b\x8a\x94\x14\x5b\x71\x9f\x9b\x50\xb5\x3a\x54\x90\x47\xb0\x0e\x6a\x76\xac\x1b\xb8\x4d\x36\xd3\x2c\xf9\x8a\xdc\xef\x23\xad\x5b\xc1\xdd\x5d\x50\xcc\xa1\x5b\x55\x98\x5c\x1c\xe3\x52\xfb\xc6\x71\xab\xb5\xa5\x93\x24\xbe\xc6\x3b\x51\x49\x10\x69\xb1\x31\x36\x62\x2f\x2e\x4e\xea\x82\xb9\x1e\xe7\x18\xd2\x22\x7b\xc7\x69\x0d\x41\x6a\x8c\x8d\xd4\x4b\x2b\x08\x52\x14\xfb\xb8\xa3\x20\x5f\xa4\x59\xd2\x60\x7a\xbe\x70\x91\x43\xbc\x2c\x40\xf0\x02\x44\xa1\x76\xaf\xd4\x18\xa3\xdc\x41\x2f\x4a\x7d\xbd\xc3\x74\xc3\x55\x68\x8a\x7e\x41\x65\x30\xc5\x74\x52\x12\x80\x42\x6d\x67\xc2\x4e\x47\xf2\xde\x57\xb0\x1d\xfb\xb5\x8b\xe3\x71\x2f\x8e\x06\x23\x08\x8f\x91\x65\xa3\x8b\x18\xe3\xa8\x4c\xae\xa2\xe8\xbe\xd6\xcd\x39\x0f\xb6\xbc\x9c\x09\xe5\xfd\x1d\xea\x36\xf3\x2c\x38\x04\x92\xa9\x05\xa9\x38\xda\x1b\xc7\x5c\x9c\xc8\xf5\x35\xa4\x35\x9e\xe1\x9d\xcb\x85\xd6\x64\x2e\xb8\xf1\x00\x62\x41\xf1\xc3\x98\xf3\x96\x15\x50\x57\xb4\x4d\x71\x51\x16\xbf\xe3\x35\xdc\x2f\x8c\x06\x45\xaa\xf3\x60\x9e\xf8\x0b\xf6\xd5\x63\x8d\xeb\x4d\xfb\x22\xf4\xbb\x4e\x04\x98\xda\x57\x28\x0b\xc9\x8f\x83\xd3\x34\x05\x17\xcd\x23\xe7\x71\x32\x63\x89\xab\x99\xe3\x4b\xb4\xb6\xae\x66\x99\xe6\x9f\xc7\x6a\x33\x8c\xab\xf9\xe7\x69\x1c\xae\x38\x1b\x63\xf8\x59\xf1\x9a\x50\xb2\x88\x7f\x7d\x13\x45\x2c\x11\x96\xfa\x6f\x20\xe2\x62\x87\xbf\xfa\xd6\x9f\xd5\x97\x4c\x3d\xf2\x4f\x04\xdd\xa4\xc2\x42\x57\x11\xa6\x42\xe1\x54\x2c\xe7\x7c\x11\x07\x06\xfc\xd9\x6c\xff\x8a\x45\xfc\x5d\x90\x72\x86\x2b\xa7\x09\xc3\x90\x86\xd2\x66\x46\x47\xf8\xf8\xb5\x78\xad\x61\x71\x9f\x62\x6e\x7a\x9b\x2a\x51\xbc\x1b\xf3\xce\x79\x3c\xbb\xad\x72\x67\xe1\x27\x17\x41\xe4\x6a\xe6\xf2\x66\xbc\xf4\x67\xb3\x20\xba\x10\x0f\x25\x66\x15\x38\x33\x56\xd3\x5e\x57\xbb\x0c\x66\x33\x16\x8d\xc5\x0a\x9d\xab\x5d\xf9\x89\xde\x6e\xa3\xd3\xd7\x16\xd1\x86\x64\xd0\x7c\xac\xd2\x18\xb7\xaf\xd9\xf9\xb7\x80\xb7\xf1\x54\x95\x18\x21\x2e\x5e\x34\x32\x6e\x2f\xe2\x5f\x1b\xb2\x49\xd1\x43\x50\x5c\xcf\x5a\x5b\x6c\x8e\xa4\xfc\x24\x5e\x7a\x0f\x02\x89\xbb\x3a\x3d\x32\xf5\xc3\xa9\x5e\xa4\x19\x9c\x4a\x60\x74\x5b\x34\xdd\xd0\xfe\xa2\x75\x0d\x92\x6d\xd8\xac\x0a\x1f\x22\x25\xc6\xb8\xbc\x87\x88\xdc\xb4\x61\x78\x7c\xd7\xd4\xc5\x14\xae\x76\x1e\xc6\xd3\x6f\x63\x4d\x53\x1c\xdd\x54\xe7\x58\x5c\x11\xd3\x7e\x14\xec\x3d\xa1\xbc\x73\xc9\xfc\x59\xe3\x96\x50\xe0\xe7\x5e\x9a\xbe\x0b\xa2\x6f\x5f\xeb\xd4\x63\x34\xdb\x06\xc8\xca\xb6\xcd\x84\x85\x18\x2c\x47\x1d\x9d\xab\x14\x11\x6b\x98\xeb\x58\xd3\x44\x5d\xad\xb4\x91\x39\xb2\x8c\x45\x0d\xb8\x6e\xda\xe2\x15\x29\x03\x56\xe8\x94\xc2\xce\x66\x01\x07\xb7\x99\x50\xc2\x93\x15\xdb\x5c\x26\x5d\xb2\x30\x9c\x5e\xb2\xe9\x37\x42\x09\x1e\x39\xdc\x0c\xef\xaf\x78\x3c\x8d\x17\xcb\x90\x61\x10\x88\x78\x3e\x7f\x0c\x3c\xc6\xc7\x7a\x34\xb8\xbf\xe4\x7e\x28\x4e\x33\xe1\x0d\x86\x1b\x4b\x24\xb1\x68\x29\xbb\xe1\xe7\xf1\xcd\x66\x58\xee\x9f\xa3\xd7\x49\x28\x69\x5b\x35\xd0\xb2\x4e\x98\xfa\x09\xe3\x22\xf0\xa8\x2b\x0e\xc3\x0a\x9b\x3e\xae\x88\x74\x21\x76\xac\x9b\x07\x73\x1d\x67\x31\x59\x5d\xcd\xea\x2f\x6f\xc4\xb3\x3c\xff\xda\x0e\x83\x0b\x9f\xaf\x12\x96\xca\x31\x5e\x52\x33\x4a\xb5\xb4\x6f\x5d\x79\x80\x79\xac\x65\x79\x37\x99\xc2\xb9\xbe\x0c\x38\x6b\x63\x65\xae\xb6\x4c\x58\x59\x3d\xad\x38\x8c\x20\x81\x5e\xdb\x0a\x16\xcb\x38\xe1\x7e\xc4\x61\xac\xa0\x32\xa8\x49\xa3\xe4\x42\x85\x27\x75\xad\x2c\x23\x2b\x29\xad\x2c\xcc\x5b\x49\x2b\x3f\x84\x01\x0f\x6d\x57\x10\xe0\xdc\xed\x49\x58\x38\xcc\xe8\xd0\x85\xcc\x50\x89\x49\xde\x93\x91\x2c\xe2\x2b\xf6\x5b\x71\xb0\x68\xf6\x5b\x51\x4c\xfd\x68\x5a\xe0\xcb\xd3\xb1\xe0\x0d\x01\xaa\xf8\x5e\xbc\xbc\x7d\x52\x69\x71\xae\x59\x15\xc7\x59\xee\x93\xca\xcf\x92\x78\x49\x68\xe3\x65\xcd\xcb\x04\xcf\xf0\x67\xc7\x10\xe8\x96\x75\x6f\x64\x82\x58\xc3\xf4\x8d\xdd\xce\xe2\xeb\x28\xa3\xe5\x55\x3c\xbb\x7d\xcb\x6e\x5f\xc7\xd7\x51\x03\x45\x89\x58\x77\x48\x1b\x94\xe6\x2c\xb8\x22\x55\xa8\x4e\x30\xf3\xc4\x92\x8c\x9b\xc4\xd7\x6d\xf0\xd5\x52\x52\x85\xa9\x68\x82\xca\x80\xcf\x7d\xa6\x79\x70\xc3\x66\x75\x57\xa0\xd1\xc4\x83\x7e\x6a\x30\xf1\x98\x4d\x2a\xcc\xad\x8e\xcd\x8c\x32\xd9\x1a\x1e\x2f\x85\x87\xfa\xca\xbf\x68\x36\x16\xf8\xb6\x7d\xee\x5f\x90\xa6\x22\x0f\x34\xb0\xd6\xa0\x47\xd9\xe1\x9a\x3e\x92\xad\x12\xf1\x45\x8a\xf4\xd6\xe9\xc9\x37\x34\xe7\xe4\x1e\xc4\xe1\xac\xb1\x71\xf3\x38\x9c\x91\x0a\x5c\xa1\x5b\x79\xbc\x44\x90\xf6\x3c\x4e\xc0\x0b\xc9\x2f\x28\x21\x95\x32\x9b\xb9\x50\x93\x8a\x5a\xb7\x28\x44\x46\xb1\xa1\x92\xec\x52\x45\xb5\xe6\x15\x40\x0b\x94\x8b\xdc\xcd\xc4\x6f\x20\xa7\x80\xd4\x28\xae\x8b\xed\x26\xcc\xdf\x3c\x3a\x0a\x70\x05\x72\x44\xae\x9f\x30\x9f\xd4\xc1\x2a\xbc\xc3\xe0\x30\x41\x18\xf0\x5b\x25\x34\x0f\xc9\x74\x01\x99\x21\xbf\x71\x92\x4b\xce\x97\xe5\x3b\x2f\x6d\xd3\x34\x9f\xa7\x57\x17\x44\x6e\x72\xbe\x52\xf2\x03\xf3\xa4\x4d\xd3\xa2\x0f\xc7\x7a\x40\x09\x94\x54\x6d\xbc\xba\x28\x36\xee\xd7\x38\x5e\xb4\x45\xbc\xa4\x38\x21\x05\x90\xb2\xc3\x70\xb3\x08\xa3\x94\xd0\xc0\x58\x0b\x21\x2f\xbf\x20\x94\x58\x1d\xab\x54\x59\x85\x45\x0d\x53\x2d\x1e\x2f\x61\x46\x16\xb2\x39\x87\xbf\x6b\x99\x88\xba\xf9\xc4\x4f\x2e\x58\x93\x9f\x09\x2a\x04\x7b\xc9\xa8\x43\x17\x5a\x5c\xbc\x99\xa5\xcd\xf1\x75\x03\xfa\xc7\x38\x4c\x65\xf8\x07\x5b\x99\x39\x37\xcb\x9b\xcc\x47\x59\xde\xa8\x56\x2f\x6f\xc6\x32\x04\x91\x78\x88\x97\xfe\x14\x39\x60\x36\x51\x27\x3d\xdc\x7d\xe9\xe1\x66\x4b\xb7\x6b\xc5\xac\x58\xba\x89\xfc\x06\x63\xcc\x6e\xf8\x9b\x68\xb9\x52\xdc\x11\x91\xba\x0e\xf3\x42\x27\x0a\xa0\xc9\x1a\xe1\x24\x35\x3b\x3d\x56\x9f\xf9\xa7\x8c\x1f\xc4\x11\x3f\x40\x7f\xb1\xe9\x74\x69\xd9\x1b\x9d\xe7\xb0\xac\xc9\x5b\x15\x96\x06\x30\x1e\xab\x18\xfa\x1e\xbf\xbb\x53\x27\x13\xf1\x40\x5b\xf1\x2b\xc1\x06\xca\x2e\x9a\x29\xab\x1c\xa9\x5e\x43\xdd\xa6\xf6\x7e\x12\xf3\x9c\x4f\x49\x58\x3e\x96\xbb\xa3\x3f\x34\xef\xba\x4c\xd8\x9c\x50\xd6\x34\x41\xcb\xd7\xd7\xe4\xbe\xed\x7c\xb2\xbb\x71\xb6\x85\xa5\x0d\xb9\x1d\x7f\x0d\x46\xb9\xf3\xaf\x82\xb1\xb4\x87\xaa\x86\xf1\x11\x0c\xc0\x01\x52\x5b\xf0\x29\xce\x02\xcb\x7b\x59\xd7\xa2\xc4\x55\xac\xda\xc1\x43\xb5\xe2\x81\x6f\xf5\x8a\xbf\x26\x33\x37\x77\xbe\xba\x0e\x01\xf7\x91\x3f\x4e\x02\x70\x7a\xf4\xff\x91\xf7\x6e\xcd\x8d\x2b\xeb\x62\xd8\x53\xca\x6f\x49\xa5\xf2\xe2\xca\x79\xa1\x70\xf6\xd1\x02\x16\x41\x0e\x40\x49\x73\x21\x07\xa3\x4d\x51\x97\xa1\x34\x92\x46\xa4\x44\x8d\xa8\xd1\x9e\x05\x92\x4d\x0a\x43\x10\xa0\x1a\xa0\x44\x69\xa4\x6d\x57\xca\x76\xe5\x24\xb6\xe3\xa4\x5c\xb6\x2b\x39\x89\x9d\xe4\x38\xc7\x4e\xb9\x52\xb6\xeb\x54\x6e\x3e\x4e\xaa\xf6\xca\x7b\xfe\xc3\xfe\x25\xa9\xbe\x01\x0d\xa0\x1b\xe4\xcc\x5a\x7b\xfb\x54\x65\x6a\x69\x91\x04\xba\xbf\xfe\xfa\xeb\xdb\xd7\xdf\x35\x7f\xb2\x4b\xa0\x02\xe1\x7c\xc7\xf0\x72\xba\x3e\x02\xe1\x56\xd2\xde\x7d\x39\x3c\x53\x46\xf2\x79\x18\x4b\xe1\x8b\x31\x4e\x41\xce\xc1\x3d\x01\xbb\x39\xb1\x47\x02\xf1\x9f\x0c\x36\x29\xbe\x24\xec\x64\x4c\x8a\x45\xa0\x71\xe9\x25\x21\x0b\xfc\x51\x17\x40\x8f\x6a\xe4\xb6\xd0\x88\x35\x6b\xd9\xd8\x12\xf1\xbb\xdc\x79\x41\x24\x94\xe9\x78\x1c\xcc\x49\x6c\x04\xc2\x86\xeb\x00\x2f\x8c\x63\x72\xb0\x1b\x2f\x35\xdb\xfa\x42\xcf\x29\x50\x26\x5f\x74\x72\x56\x81\x32\xfe\x8c\x2c\x91\x45\x1a\x42\xb9\xa0\x37\xc2\x2b\x37\xfe\x46\x02\x7b\x55\x23\x2d\x2e\x86\x99\x1f\x19\x24\x0d\x94\xf4\x2a\x0f\x2a\xe3\xa4\x64\x10\xa3\x0d\x71\x31\x6a\x58\x3f\x91\xbf\x32\xa5\x40\x20\x40\x33\xc2\xee\x5f\x03\x91\x73\xf5\xb7\xe8\xa2\xf3\xa6\x5e\x2b\x56\xac\x0b\xa2\x4e\x44\xa8\xa8\x39\x7a\xf8\xa0\x7f\x0d\x06\x33\x17\xb4\xc0\x00\xda\x77\x39\xbb\x6c\x1c\x05\x21\xa1\x60\xa4\xaa\x25\x90\xba\x35\xf0\x06\x8c\x80\x9a\xe9\x72\x3c\x7e\x2d\x36\x7f\x49\x94\xa4\x07\x19\x65\x0f\x53\x7e\x96\x3a\xb0\xc2\xa7\x1c\x5a\x21\x5a\xd6\x92\xe6\x31\xa7\x38\xe4\x07\x56\xc2\xa8\x91\xaf\x1c\xda\x87\x31\x2a\xd1\xab\xc8\x66\x1d\xda\x77\x1d\x12\x2a\xb2\xe5\xdf\x05\x9f\x54\xa8\x3b\x39\xa7\x23\x25\x5d\x53\x48\x19\x6c\x09\x79\xcd\xeb\xd0\x39\x12\xb2\xb5\x8d\x0a\xd4\xa4\xa5\x2c\x2e\xae\x12\x07\x99\x58\xc5\x17\x80\xb0\x8e\xce\x8f\x14\x1a\x4e\x23\x47\x95\x43\x19\xba\x65\xf6\xdc\x21\x2b\x07\x8a\xca\x74\xfe\xed\x2c\x9a\x24\xe6\x10\x4e\x20\xdb\xf4\x42\x35\xa7\x69\x39\xec\x09\xb0\x83\x19\x04\x09\x54\x04\x0b\x02\x5b\x93\x30\x23\x19\x6a\x5b\x92\xe2\x96\x72\xa4\x30\xb8\x3c\x2f\x82\x41\x0f\x4a\x71\xfe\x6f\x4e\xe1\x43\xcb\xfe\x0c\x97\xa8\xe8\x02\x62\xcf\x42\x9f\x93\x85\xb2\xcb\x48\xfa\x31\x8f\x40\x7b\x6a\x7b\x8b\x3a\x18\x4c\x6d\x2f\xd1\x43\x5c\x29\xd3\x4b\x54\xac\x74\xe7\xc3\xb1\x8d\x0f\xc6\x4c\x2b\x5c\x60\x11\x55\xf9\xa0\x94\x21\x98\x02\x3b\x54\x4d\xc3\xd0\x8a\xca\x47\xa8\x68\xfc\x93\x04\x8d\xb2\xf2\xa2\x08\x28\x5f\x70\xcb\x0e\x80\xeb\x78\xe0\x67\xea\x4f\x8f\x82\x53\x44\x4d\xa4\x67\xbc\x62\x44\x13\x3e\x55\x30\xa1\x36\xfa\x20\x68\x37\x86\x74\x4e\xce\x3b\x10\xdf\x6f\x72\xa4\x21\x84\x36\x4c\x45\x28\x64\x00\x78\x32\x41\xde\x7e\x2a\x24\x27\xf0\x33\xd3\x30\xb0\xf6\x06\x35\x8b\x7e\x24\x5d\xbd\x72\xa9\x1f\x75\x50\xd3\x61\x99\x91\xca\x12\x11\xc0\xc7\x1a\xfa\x53\x7f\x9a\x18\xd3\xcc\x6d\x23\x0d\x35\xd5\x7f\x71\x79\x56\x4e\x20\x2d\x91\x68\x01\x6e\x47\x18\xe3\x07\xdf\x9f\xec\xda\x38\x2a\x62\x2c\xd0\x88\xb8\x1f\xdb\x05\xf9\x70\x33\xd8\x50\xb8\xf2\x5d\x34\xbd\x0b\x66\x8f\xfe\xc4\x5b\xfc\x48\xb4\x65\xa9\xcb\x5e\xc4\x49\x01\x19\x87\x91\xb1\x01\xe3\x26\x10\xe7\x13\xcf\x58\xc8\x52\x62\xcb\xed\xc7\xc5\xe2\x3d\x9e\x40\x24\x2c\x5b\x74\x3b\xbb\xf7\xfa\xf4\xfc\x0d\xb6\x9d\x09\xf0\x70\x1a\xd5\x4f\x34\x3c\x0e\x7f\xb4\xd1\xa0\x85\xb1\x52\xfc\x4b\x6c\x6e\x83\xef\xb2\x4f\x3a\xd7\x13\x40\xa5\x6b\x2d\xff\xee\xd4\x27\xe7\xb4\x0a\x12\xac\x0b\xb6\x98\xa5\x66\x74\xaa\xa6\xe9\x20\xcb\xc4\xe4\x1c\xda\x62\xb4\xb3\x6c\xb7\x88\x0f\x25\xfd\xc9\xd8\x05\x52\x36\x5b\x66\x1a\x18\x31\xe5\xf8\xfd\x6d\xc4\x5f\x90\x78\x74\x4e\x79\x58\x0e\x26\x36\x0c\x77\x5d\xdf\x87\xdb\x0e\xea\xa3\x9a\xac\x92\x98\x3e\x65\x26\xb3\xe6\xec\x07\x52\x30\xbf\x97\xd6\xaa\xa5\x8a\x9f\xfa\xd3\x43\x6c\x3e\xc0\xac\x11\xe3\x57\x84\xf4\xf4\x2d\xab\x5f\x0a\x85\x62\x68\x62\x82\x40\xd5\xf2\xb2\x26\x30\xdf\xc0\x05\x40\x30\x58\xac\x97\x08\x58\xda\x07\x27\xa8\x69\xb0\xc8\xcf\x5e\x3a\x03\x03\x4d\xc7\x66\x4a\xa9\xe2\xa9\x5d\x85\x0a\x99\xf0\xdd\x85\x7e\x72\xac\x4b\xba\x1c\xe9\x9f\x15\x16\x61\x4e\x21\x74\x4e\x5b\x89\xe5\x42\x36\xc0\x77\x60\x18\xe6\x54\x0b\x99\x51\x43\xb2\xd6\xa9\x3f\x2d\x91\xd6\x72\x67\x2b\xbf\xf8\x32\x4b\x3e\x69\x52\x9a\xe1\xf2\x93\x4b\x45\x26\x09\x67\x7d\x97\xcd\x9a\xef\xb3\x4d\x15\xa5\xa3\x9c\x33\x8d\x16\xf4\x35\xb1\x88\x17\xb0\xd2\x10\x17\xca\x63\xa3\x49\x89\xe5\x59\x68\x52\x5e\x07\xf4\xcb\xa7\x45\xbc\x33\x2d\x96\x19\x11\x7c\xed\x8a\xd4\x43\x68\x43\x4c\x99\x05\xe3\x41\xe5\x77\x51\xd1\xee\x2a\xbc\x2c\x7e\x79\xaa\x25\xf7\xa6\xe4\xf5\x26\x94\x5d\x6f\x00\x77\xbd\x39\xa5\x8b\x4d\x65\x92\x49\xf4\x70\x2b\xbe\x99\xa9\x21\xf7\x3c\x71\x17\x02\x91\xcb\xbc\x74\xeb\xcf\xbb\xc9\x4a\xbb\x95\xd3\x61\xde\x6a\x92\x37\x7a\x16\xf6\x3f\x3d\xf3\xf0\x44\xa5\xf1\x6f\x12\x73\x57\x6e\xd9\xc6\xd1\x27\xed\xb0\xb1\x92\x1e\x44\x6a\x00\x4a\x25\xb8\xd9\x17\xb1\x35\xa4\x05\xb4\xd4\xb6\x10\x5b\x15\xaf\x24\xb7\x40\x2a\xbd\xe5\x34\xbe\xbc\xc3\x6d\xa2\x68\x7a\xab\x89\x61\x52\x4b\x49\x01\xd2\x9c\xa9\x62\x06\x6f\x62\xbe\x9a\xc5\x5a\xd0\x33\xee\xca\xfe\x53\xf1\xcf\x87\x4e\x4d\x47\x87\xd4\x9d\x20\x8b\xed\xef\x04\x93\x2c\x6c\xad\xb6\x3c\x29\xd2\x70\x6a\xe9\xc1\xcf\xf2\x97\x0b\x68\x80\x1d\xdd\x16\xcd\xa0\x2c\x90\xc5\x0d\x0b\x27\x4f\x8e\xe1\x67\x72\xa7\x58\xb4\x42\x48\xf7\x17\xcd\xb3\xd7\xd9\xd5\x81\x16\x2b\xdf\x35\x4e\x6e\x94\x19\xd5\x5c\x45\xf2\x37\xad\x83\xcc\xfa\x8d\x30\xe4\x15\xdf\x8b\xc7\x7d\x89\x09\xc8\x01\x14\xcf\xc1\xf4\xfc\x5f\x16\x03\xd6\x87\x9f\x86\x03\x83\xf2\x97\x6f\xf6\xa7\x67\xc8\xd7\xb7\x2a\x80\xb5\x60\xe6\xf3\x67\x61\xda\x61\x84\xb9\x36\x40\xde\x33\x75\xc5\x0a\x99\xef\x29\x8d\xf9\xbe\xed\x0c\xb0\x25\x36\xf0\xfa\xe8\x20\xc2\x09\xa2\xe0\x08\x84\xd8\x14\x5b\xc1\xd1\xdd\x2c\xcb\x49\x4c\x61\x52\x71\x87\x55\x00\x03\x96\xf2\x66\xe8\xbb\x03\x96\x56\x38\x01\x85\x7a\xae\xa4\x7d\x9b\x75\x28\x8b\xa9\x00\xb5\xa7\xa7\xd8\x13\x18\x51\x47\xf7\x65\x13\x8a\xb1\xec\x69\x82\xeb\x5e\x66\xa9\x32\x1f\x3d\x91\x48\x58\x77\xe3\x90\x1b\xa2\x53\x3b\x2b\xae\x4e\xdf\xf9\xae\x2d\xa3\x76\xfd\xda\xad\x5d\x33\x0f\xd7\xbe\x05\x8a\xd7\x38\x1c\xd7\x8a\xe5\x69\xe8\x93\x33\xc5\xef\xa3\x07\xfe\xea\x6a\x6c\x9e\x6f\x59\x7d\x0d\xaa\xb6\xee\x6b\x38\xc8\x57\x42\x08\x4d\xbd\x15\x82\xd5\xd5\x20\x53\x3e\x40\xe5\x03\x61\x79\x7b\xc5\xf2\x57\x57\xed\xc8\x7b\x91\x46\x5f\x18\x82\xb0\x7f\xcd\x82\x1f\xa8\x7d\xe2\x89\x30\xd3\xbe\x30\xab\x7d\xd7\x1f\xa9\x4a\xc3\x9f\xb9\x03\xef\xbb\xb0\x80\x4b\x63\xf3\x7c\x6c\xba\x50\x2d\x28\xc5\xbe\x56\xc3\x59\x34\x9f\xec\x15\x6b\xb6\x99\x9e\xbe\x89\x15\x3d\xd3\x6d\x4d\x9f\x65\x23\x44\x88\x17\x82\x8d\xfa\x92\x28\xad\x55\x6d\xcb\x4e\xb8\x1f\x45\x3b\xa8\x2a\xe9\x8e\xf6\x2d\x3d\x59\xd4\x07\xe2\xd7\x90\xc2\xa5\xf6\xef\x08\x17\x44\xf7\xec\x39\x84\x26\x83\x97\x2b\xa1\x49\xdc\x02\x32\xd7\x84\xa4\x0d\x19\xaf\xbf\x57\x05\xef\x53\x71\x55\x72\x21\x64\x37\xbb\x44\x49\x4d\x13\x9b\xb6\x09\x70\xc8\x14\x11\xa1\x91\x03\x27\x8b\x49\xba\xb0\x26\xa7\x60\x1f\x5d\x01\xa2\x88\xae\x59\xcd\xaa\xe0\xbe\x70\x09\xa2\xf5\x7a\x95\x67\x82\xc0\x4f\x9b\x6c\x5c\xa1\x48\x4e\x6a\xc9\x6f\x33\xab\xab\x71\x42\x12\x61\x81\x4d\xf9\xab\x4b\x70\x55\x95\xed\x6f\xd8\xce\x0e\xe4\xdc\x01\x59\x60\x27\x9e\x38\xf8\xca\x96\xa3\xe3\x41\xc4\xae\xbb\x6e\x46\xc4\x85\xa3\xc0\xad\xc8\x77\xe9\xd8\x89\xeb\x4b\x7c\x08\x4b\x85\x35\x0b\x8f\x5c\x59\x4d\x8d\xc5\xfe\x4e\x2e\x67\x23\x6b\xfd\xca\x2f\x4d\x90\x14\x44\x2d\xba\x99\x3e\xd1\xa0\x7d\xd2\xce\x12\x71\x9a\x0e\x17\xc9\x50\x4a\x66\xe4\x03\xc8\x73\x63\xe9\x88\x33\xf1\xd9\x03\x79\xea\x49\x18\xb8\xc5\xc4\x93\x54\xd4\x6a\xa1\x88\x76\x30\x43\xbb\x04\x9f\x4c\xa9\x11\x66\xb6\x35\x69\x37\xf8\x40\x2e\xb1\xee\x25\xed\x1b\x19\x47\x12\x06\xba\xa1\xe9\x4e\x19\xcc\x43\xe0\x0d\xd4\x50\x0f\x05\x7e\xb1\x62\xb1\xc8\x02\xf5\xbc\xef\xba\x87\xf6\xfc\x93\x28\x4f\x40\x56\x4e\x98\x16\x77\x65\x44\x04\x4b\x49\xad\x4a\x72\xc0\x58\x7e\x9e\x23\xd0\x8a\xe4\xd8\xa7\xfe\x54\xa0\x60\x95\xc8\x7e\x92\xb2\x0e\xb0\xb4\x5c\x83\x4a\x84\x81\x5c\xfc\x2b\xed\xbf\x0e\x79\x79\x37\x25\xb2\xaa\xd5\xc2\x37\x10\x1d\x06\x16\x4c\xbb\x9b\xe0\x42\xa7\xfe\x74\xc5\x0a\xa3\x78\xc2\xe9\x77\x2c\x50\x7d\x5a\x3a\xbf\x14\xc5\xa8\x30\xf9\x2f\x33\xd1\xf2\x26\x4d\x4d\x0d\x4b\x5f\x29\x9b\xd7\x70\x64\xf8\x38\xde\xfb\x57\xd2\x3a\x77\xe5\x70\x82\x32\x81\xf2\x1d\xf3\xe2\x58\xb1\x2b\x81\xfe\x4c\x8e\x74\xae\xb5\x5b\x42\x0c\x29\x5a\xb3\xe2\x71\x2a\xa5\x23\x09\x70\x71\x18\x99\xd3\x8e\x2c\x1e\x60\x46\x63\x43\x35\x00\xf1\xd0\xf3\xaa\x9b\xd5\x55\xa6\x22\xcd\x14\xa0\xda\x1b\xc6\x70\x33\xa1\x30\x15\x71\x32\x95\x16\xf3\x28\xca\xa8\xb4\x98\x99\xe6\x42\x5d\x5e\xc2\x8b\x28\xd1\xab\xe5\xaa\x64\xe4\x30\xb8\xd9\x44\x11\x1a\x24\x8b\x26\x56\x7c\x4f\x3c\x5a\xc0\x20\x41\x37\x2e\x0c\xc5\x36\x70\x43\x1b\xd5\x81\x96\x78\x3a\x94\xc2\x1a\xc4\x93\x15\x5a\x86\x96\x8a\xf1\x95\xd8\x3e\xe0\x1b\x07\x97\x72\x34\x1d\xae\x48\x80\xc9\xa7\x34\xd4\xb3\xee\x37\x79\xc6\x2c\xa9\x1e\x08\x38\x3b\x92\x68\x59\xc5\x81\x25\x43\xfb\xd0\x1f\x00\xed\x4b\xdf\x0e\x40\x01\xd7\xc2\xb6\xd4\xe5\xed\xe3\xc3\x4f\xdb\x3b\xef\x4e\xeb\x9f\xde\x37\x3f\xec\xbc\xab\x86\x16\x2d\x7e\xf1\x7d\x9a\x50\x5c\xbc\x0e\x72\x99\xa8\xc9\x81\xbd\x6b\x1e\xed\x64\x60\x09\x55\x74\x8b\x20\xbd\xaf\xef\x2d\x07\xe9\xfb\x04\x5d\xa3\x6c\x5c\x6a\x1c\x83\xeb\x7b\x39\xdb\x48\x9d\xb8\x96\x9d\x90\x34\x46\x89\x78\x2a\xe2\x97\xf9\x93\x50\x87\xba\x23\xd8\x20\xbe\x38\x83\x2a\x28\x3b\x03\xe0\x85\xce\xd0\x01\x50\xbf\xaf\x02\xaa\xa2\xbe\xd0\xe7\xd1\xf7\x0f\x4f\x4f\xf1\xd8\xe2\xf4\x83\x78\x58\x79\x3f\xbb\x2a\x16\xa2\x59\x46\x2d\xc4\x91\xb2\x70\x96\x4e\x8c\x57\x1c\x2d\xab\x58\x0c\x35\x68\x39\x6a\xfa\xfd\x65\xc8\x52\x0a\xc6\xd1\x58\x2e\x61\xd9\x19\x5c\x59\x90\x1b\xad\x84\x27\x5c\x35\x7e\x02\xbc\xc1\xb2\xad\x53\xb5\x54\xba\x2d\x01\x42\x1c\x4d\xae\x32\x38\x60\xa7\xc0\x2a\x89\x19\x41\x42\x96\xfe\x84\x8e\xfb\x45\x4b\xd8\xf7\xf2\x7d\x09\x96\xef\xa5\x74\xf1\xbf\xb7\x68\xfc\xbf\x40\xb6\x8b\xf8\xb5\x00\xef\x22\x01\xdb\x45\x3c\xf1\x2e\x12\xbc\xf1\x70\x29\x4f\xd3\x83\xaf\xdf\x45\x02\xed\x29\xbb\x8d\xc8\x77\x91\xc8\x57\x5f\xcc\x7a\x7c\x9b\xbd\x06\x71\x69\x5c\x76\x2d\x61\xf7\x47\xc9\x52\x42\xef\x24\x2b\x89\x91\xe0\x2b\x15\x90\x02\xa1\xf1\x8a\x44\xdb\xc2\x6e\x03\x25\x99\xe0\x36\x12\x99\x57\x34\x2d\x7d\x2a\x27\x75\x95\x50\xa6\xab\x0c\xb9\x18\x2b\x39\x0d\xd0\x00\xae\x4e\xcd\x11\x0b\x24\xb9\x92\x9b\xf9\x05\xaa\x8b\xef\xbf\x22\x79\x0b\x2f\x0a\x91\x5d\x19\xb1\xdd\xdf\xc2\xbe\x14\xcd\xc8\x45\x6b\x81\xb6\x2a\x6e\x7e\x29\xe5\xd9\xa2\x2b\x71\x96\xce\x69\x1d\x20\x8b\x11\x57\x93\x0a\x84\xb9\xb2\x69\x3a\x0b\x3a\x5a\x5d\xfa\xc2\x59\x34\x25\xd2\xa5\xe5\xe9\xee\x4b\xf4\x7a\x91\x54\x63\x31\xcd\xd3\xad\x4b\xb4\x34\x4f\x79\xdb\x09\xef\x01\x2c\x5c\xd4\xb1\x8f\x00\x5b\x32\x24\xf0\x5f\x79\x08\xfd\x09\xda\x6f\x1a\x58\x28\x54\xbe\xbb\x76\xfa\xd7\x5a\x39\xf4\xdf\xf9\x77\x00\x36\xec\x00\xb1\xb7\x68\xcf\x0e\xa1\x7b\x00\xee\x1f\x1f\x41\x79\x02\x42\xfb\x00\xdc\x6b\xab\xab\xca\xad\x62\xa1\xeb\x02\xe1\x56\x79\xa7\x31\xe6\x4d\x93\x83\x32\x71\xa0\xce\x6e\x80\x22\x38\x9c\x19\x52\x4d\x6c\x6b\x11\xc6\xdc\x32\xf5\xd3\xfe\x82\x06\xb1\x1a\x26\xe1\xdd\xda\xee\x0c\x60\xd7\xea\xec\x63\x2c\x6c\xcc\xfa\x03\x19\xf2\x1d\x37\xc7\xf1\x2d\x95\x5f\x31\x08\xfd\xe9\x7b\xe8\x4f\xed\x91\x4d\x10\xce\xb3\x96\x8e\x4c\xeb\xa8\x36\x68\x91\xd5\x34\xf3\x46\xbe\xb0\xc0\x26\xbb\x2b\x54\x15\xea\x1f\xb9\xb8\x21\xc2\x65\xfa\xb7\x80\x72\x9a\x22\x33\x7f\x49\xfc\x38\x90\x0a\xee\x87\x9d\x93\x02\x9a\x87\x37\x93\x2a\x9a\x3e\x87\x20\xf0\x67\xb0\x0f\xf8\x74\xbd\xc9\xc8\x80\x2c\x35\x78\xf4\xe0\x78\x8a\xb0\x09\xe2\xd0\x81\x02\xd0\x34\x8a\x20\x09\x02\xc2\xfd\xa4\x3d\x5f\x2a\x09\x30\x7b\xdc\x39\xc5\x91\x08\x4f\x69\x9a\x6d\xc1\x24\x85\xfe\xd0\x71\x41\x73\x90\x74\xae\x70\x26\x36\xbc\x6f\xd3\x10\x25\x51\xf0\x40\x00\x3c\x52\xc0\x76\x43\x00\x3d\x3b\x04\xf2\x22\x51\x7c\x93\x2c\x40\xbe\x40\x3a\x9e\x61\x9c\x00\x92\x0f\x7a\x97\x0e\x5f\xc8\x07\x2d\xe4\x83\x91\x45\x29\xa2\x97\x09\x29\x94\x5b\xfd\x2b\x62\x5f\x88\xaa\x2f\x1d\x62\x21\xaa\x4c\x99\x1e\x8e\x71\xe1\x2b\xc4\x36\xb8\xc2\x10\x84\xa9\x4c\xcc\x3c\xf4\x9e\xdd\x1f\x13\x2d\x2c\x4b\xf9\x1c\xda\xbd\x76\xe8\x4f\xb9\x27\x94\x37\x3a\xa5\x2f\x22\x57\xdb\x5b\xba\xb0\x4e\xfd\x29\xdf\x2e\x7b\x4c\x78\x91\x65\x73\x73\xb6\xaf\xed\x29\x20\x61\xde\x69\xce\x77\xee\x79\x79\xeb\xdd\x71\xe3\x80\x2f\x8e\x5d\xec\xb2\x50\xb6\x5c\xc7\x1b\x37\xee\xfb\x2e\xf8\x64\x5d\x9a\x86\xa1\x9b\x86\x41\x7b\x31\xb9\x3f\xf6\x1a\x71\xa1\x4f\x11\x2d\xb9\x67\x19\x92\xa6\x7c\xfa\xf8\x06\x87\x49\x7f\xc6\x44\xd0\x4a\xdc\xff\x63\xef\x78\x16\xe2\x3d\x32\xfb\xe6\x00\xdc\x07\x21\xf4\xc7\x20\xfb\x12\x6f\x3e\x75\x08\xfd\x3b\x54\x28\x31\xa0\x60\x08\xec\xf0\xd0\x9f\x05\xa0\x05\xa6\x3e\x0c\x83\x4f\x51\xf8\xc9\x1e\x70\xdd\xfa\x6c\xe0\xf8\x8b\x6c\xfa\x6d\x54\x88\x19\xd7\xc7\xb5\xf8\xe0\x03\xc0\x75\x4b\xa4\x58\xa6\x54\xd2\x2b\x77\x0a\x81\xeb\xdb\x68\xfb\xb2\x67\x61\x02\xe8\x91\x8f\xae\x53\x7d\x7c\x08\xbc\x73\x82\x90\x9f\x4c\xc1\x38\xf4\xa7\x7c\x81\x2d\xe0\xba\x71\x4f\x02\xfb\x16\x0c\xe8\x46\xc8\x45\xca\x64\x0f\xc8\x5a\xa7\xef\xe9\x8c\xcd\xc4\xd5\xbc\x65\xf9\xf5\x3b\xa7\xfc\x68\x8e\xe9\x7e\x4b\x5f\xb2\xed\x97\x2f\xe2\xf8\x51\x32\x73\x3a\x0d\x9b\xc7\xfc\x7b\x80\xc3\x90\xe2\x31\xd8\x86\xf6\x88\xcc\xf4\x38\x6e\xa8\x3f\xbd\x3f\xf6\x08\x8b\xc3\x0d\x1c\x8e\xfe\x85\x03\xea\x36\x5c\xa7\x3f\x26\x2e\x8c\xa9\xd7\xf8\xe1\xd6\x2c\x0c\x7d\x8f\x7b\x85\x9a\x21\xab\x8f\x04\x47\xc3\x9b\x00\xa3\x14\xce\x56\x1b\xe9\x0c\xea\xc3\x10\x40\xf2\xde\x60\x37\x29\x1c\x3b\x09\x6d\x9c\x9f\xd4\x97\x86\x5e\x59\x8f\xae\x29\xec\xf2\xc6\xd6\x74\x7c\x81\x09\xdf\x93\x2d\x5f\x05\x8f\x8f\x0a\x5d\xf9\x8a\x9e\x56\xb8\xfa\x1e\xa3\x4f\x0b\xd8\x83\x7b\x55\x7b\xe2\xb7\xaf\x27\x5d\xbc\x8c\xad\x2f\x78\x1d\x57\x15\xfc\xa1\xe8\x5b\x3b\xf5\xc3\xaa\x82\xfe\xaf\xe8\x67\x47\xdb\x3b\x2d\x2c\xd7\x51\xa2\xaf\x4a\x02\x50\x42\x42\xc2\xb7\xce\x0b\x61\x25\x35\x42\xbb\x47\xfc\x2e\x5f\x8a\xdf\xc7\xfd\x16\x79\xe2\x73\xa7\x20\x28\x43\x30\x75\xed\x3e\x50\x9f\x7d\x7c\xf6\x6c\xa4\x2b\x0a\x9f\xc1\x96\x9a\xe8\x43\x30\x0c\x98\x72\x91\xfc\x28\x0f\x80\xdd\x0f\x9d\x5b\xec\x46\xa6\x73\x2f\xe8\x6c\xcb\x1c\xf4\x6a\xaa\xe1\x44\xa5\xb2\x3d\x18\x1c\xb3\xd0\xb1\x38\x3a\xb7\xfe\x45\xb1\xdd\xb0\x34\x82\xa5\x89\x3f\x00\x4a\x35\xc1\x95\x59\x24\x14\x3e\xd8\x54\x80\x57\x9a\x05\x8a\x65\x79\xf6\xad\x33\xb2\x43\x1f\x96\x5d\xdb\x1b\xcd\xec\x11\x48\x72\xc2\x9b\x24\xda\x56\x55\x81\xd8\x4e\xdd\x76\x43\xa5\xaa\x90\xe0\xcb\x88\x13\xbe\x9f\x02\x7f\x58\x00\x9b\xa9\x5a\x55\x52\x4b\x7f\xf6\x2b\x15\x7d\x79\xc4\x71\x26\x6c\x37\x7c\x74\xc1\x10\x03\x79\x8c\xc0\x69\xbf\x78\x56\x0e\x41\x10\xaa\x40\x7b\x7c\x54\x81\xc5\xa2\x7b\xc1\x68\x8d\x22\x26\x62\x0f\x1e\xfa\x03\xec\xec\x8b\x7b\x87\x36\x63\x1c\x55\xa6\xe4\x04\x25\xc4\x9d\xc7\x4f\x92\x3d\x4e\x42\xd9\x62\x85\x9a\xc1\x21\x08\xed\xe8\x67\x04\x97\x42\xcb\x83\x41\xaa\x46\x35\x02\xe0\x0d\x82\xd2\xdd\xb5\x1d\x26\x2b\x3d\xfb\x95\x0a\x82\xbe\x3d\x05\x8f\x2f\x4b\x3d\x27\x7c\xec\x41\xff\x2e\x00\xb0\x34\x06\xf7\x99\x1e\x93\x82\x99\x3e\xb7\x11\xe8\xf3\x6b\x3b\x24\x8d\xcd\x06\x88\x33\x2e\xe1\x3d\x39\xc0\xde\x62\xd5\xac\xac\x1e\xb0\xa0\xe6\xbf\x72\x9d\x5e\x89\xf1\x9d\x55\xf5\x63\xbb\xa8\x3d\xd3\x6a\xe1\x26\x94\xef\xe1\x01\xec\x2b\x88\xb9\xa5\x95\xb0\xf7\xaf\x1d\xda\x67\xd0\x55\x43\x1c\x91\xbd\xba\xa8\x32\xd0\x9e\x74\x85\x6e\xeb\x25\x8f\xdb\xd7\x31\xd6\xa9\xb9\xb8\xba\xca\xef\xfc\x9b\x2a\x94\x1f\x08\xca\x08\xda\x5e\x08\x06\x8a\x65\x59\xfc\xdb\xf2\x14\xad\xdf\x00\xdd\xbc\x75\x79\xf5\xc7\xc7\x64\x0a\x58\x29\x82\x05\x27\x28\x84\x70\x06\x0a\xbd\x59\x58\xb8\x03\x85\x81\x8f\xcd\xca\xae\xed\x5b\x50\x88\x5b\x2a\x84\x3e\x8b\x60\x58\xe0\x41\x04\x65\x05\x93\x28\xe7\x58\x7b\xd2\x95\x98\x8d\x20\x61\xe4\xd2\x53\x2d\x1b\x6c\x00\x27\x71\xe2\xeb\x39\x13\x7b\x94\x99\xe6\x09\xf6\x32\x13\x54\x20\x03\x03\xb3\xbc\xcb\x82\xc0\xfc\x76\x1a\x02\xf3\xba\x5c\x1a\x4a\x94\x10\x33\x82\x44\x56\x30\x59\x41\x8b\xd7\x6f\x54\x02\xaf\x8b\xe4\xda\x8d\xbd\x45\x27\xf6\x14\xa7\x9f\x80\xce\x00\x04\x49\x58\x74\xef\x7b\x7c\x04\x05\xc7\x0b\x42\xdb\xeb\xa3\xbd\xeb\xb8\xf7\x19\xf4\x43\x34\xfd\x6e\xc3\x58\xdc\x7f\x68\x4f\xa9\xc4\x4f\x45\xcb\x32\xf3\x2a\x00\xe1\x31\x6b\x45\x05\x9a\x56\x4d\x4e\xb1\x78\x13\x2f\x24\x51\x9b\xf8\x83\x78\xc2\xb0\x08\xb2\xb6\x57\xf0\x31\x16\x24\x4f\x36\xea\x0f\x09\x0f\xda\xc3\xb1\x28\xb3\x33\x84\x63\x54\xd5\x95\x95\x4c\x8d\x52\x1f\xb1\xbd\xa9\xe5\xc6\xf7\x19\x27\xb2\x5e\x5d\x55\xbc\xd9\xa4\x07\x20\xb7\x8f\x5f\x1a\x57\xc2\xc7\xe6\xd5\x26\x14\xf0\xd5\xa0\x2a\x7a\x9a\xad\xbf\x79\x09\x74\x70\x55\x8d\xd8\xf0\x18\x5f\xd9\x1a\x68\xc4\xac\x3d\x99\x2f\xb8\x60\x69\x6a\xbb\x20\x0c\x81\x6c\x84\x69\x82\x0a\xd9\x20\xa7\x1e\x62\x2a\xe0\x4a\x0e\xbd\xc6\x93\x8f\xf7\xa4\x11\x2b\x7a\x1a\x84\x7e\x7f\xdc\xe0\x5e\x95\xfb\xbe\xd7\xb7\xd1\xd4\x00\x5a\x94\x9a\xa8\xe0\x78\x05\xc0\x92\x3f\xc4\x7e\xd7\x24\x10\x79\x70\x64\x1f\xa9\xbe\xf6\xf8\xe8\xbf\x36\x1e\x1f\xfd\x37\x95\x8d\x0d\x2d\x61\x53\x47\x9d\xdd\x0b\x58\x2e\x83\x40\xd1\xae\xe2\x74\xe5\x45\x05\xcf\x8c\xcb\xf0\x2a\x0e\xfa\x0c\x2e\xfd\x2b\x96\x1a\x22\xc2\xd4\xf3\xe1\x04\x73\x7a\x8d\x76\x9b\x94\xa8\x91\xa4\x1b\x82\xfe\x5d\xfa\x57\x56\xa0\x3d\x3d\xc1\xd4\xa5\x3b\x9d\xbd\x8c\xc4\x3b\xe0\x2a\xe2\x15\x91\xbe\xd8\x2f\x51\x4b\x94\x8e\x9b\x5f\x28\xe2\x11\xe6\x16\x89\x8d\x06\xac\xe0\xc3\xcc\x6a\xf1\xa7\xf7\x25\xdf\xa3\x71\xd1\xd2\xb3\x29\xc1\x89\xaf\xac\xa0\xed\x62\x16\x80\x12\x65\x68\x4b\xe4\x46\x5c\xc2\x81\x12\x53\x35\xc5\x2c\x37\x86\x80\x19\xee\x38\x10\x5b\xc9\x46\x2c\xb7\x10\x88\x94\x35\x27\x70\x10\x63\x34\x75\x67\x41\x69\xe2\x78\xb3\xa0\xf4\x00\xa0\x5f\x7a\xf0\xfd\x89\x74\x1b\x44\x35\xde\xbb\xb3\xe0\x10\x95\xef\x02\xe8\x77\x7d\x7f\x62\x45\xb0\xfa\x42\x24\x12\xb5\x1b\xb8\xfd\xa8\x06\x0d\xff\x95\x5b\x85\xc5\x5a\xd1\x33\xfb\x7b\x1c\xa5\x85\xac\x53\x60\x07\x61\xc9\x0e\x1c\xdb\x2b\xd9\x93\x9e\x33\x9a\xf9\xb3\xa0\x64\x07\xa5\xf0\xce\x2f\x91\xf4\x7f\xa9\x25\x5b\xbe\xeb\x97\x21\x18\xd9\x70\xd0\xf8\x3c\xae\xb3\x2a\x18\x3d\x72\xc3\x2a\x61\x06\xaa\xd4\xf7\xbd\x10\xfa\x6e\x1a\xcd\xdb\x90\x5e\xc4\x5e\x6e\x39\x58\x80\x0d\x7d\x97\xd2\x96\x56\xef\xf9\xee\x20\xb3\xc3\xdc\x7b\xfd\x2d\xdf\x1d\xb4\xed\x21\x68\x87\x34\xa2\x03\x5f\x01\xa1\xdc\xc3\x3c\x6a\xba\x6a\xfe\x62\x21\x20\x10\xe8\x7a\xb0\x85\xeb\x23\x64\x96\x58\x2f\xe2\x8a\x1c\x52\xc2\xa3\x00\x75\x03\xbd\xc8\xf4\xa1\xef\x3a\x53\x3c\x7c\x25\x9c\x5d\x53\x4a\xb5\x06\x2b\x77\x8e\x8a\x25\x9b\x1c\x80\xbe\x59\x91\xd6\xdc\x46\x6f\x69\x05\x2e\xdc\xad\x08\xc5\x38\x84\x18\x46\x31\x8a\x82\x2b\xd8\xf7\x59\x28\x0b\x32\x99\x48\x49\x16\xc4\x6c\x29\xd0\x4c\x12\x23\x3d\x59\x52\xc1\xa7\x48\x43\xd7\xfe\x04\x20\xd6\x3c\x28\x31\x61\xb2\x64\x31\xa0\x82\x07\xe0\x9e\x1a\x45\xa1\x59\x8a\x5e\x39\xde\xc0\xf1\x46\x41\xfa\x2c\xe2\x99\x17\x5a\x84\x6c\x07\xf8\xe0\x40\x7b\x78\xf6\x8c\xd2\x42\x78\xff\x45\x54\xd1\x1e\x0c\xb6\xe8\x77\x84\x73\x1f\xb3\xf9\x20\xb6\xcc\xa6\x51\xea\x71\xfc\x7d\x74\x7e\x70\x78\x15\xa6\xd1\x2e\x4b\xf7\x4c\x51\x7c\xfb\x85\x35\x77\x58\x44\x7f\xb2\xfd\x2a\x88\x70\x13\x7b\x5e\x22\xb7\xc1\x52\x00\x6e\x66\xa8\xa0\x60\xc6\x4c\xec\x39\xd1\xbd\xb4\x69\x19\xbc\xbc\x27\x60\xe0\xd8\x84\xea\x36\x04\xa5\x21\xfa\x26\x25\x3c\x2e\x8c\x28\x5f\x87\x60\x17\x7d\x52\x10\xa1\x4d\x19\x48\x7a\x89\x92\xd7\x0f\x6d\xcc\x38\xee\xe0\x72\xa4\x36\x0e\xc5\x4e\x6e\xa2\x7d\xd7\xe9\x8f\xc5\x3b\xa1\x50\x66\x13\xd7\x27\xc1\x13\x7b\x58\x5e\x23\x9a\xa2\x87\x29\x99\x0e\x9e\xa8\x53\x7b\xb4\xdc\x84\x43\x05\x93\x13\x4e\x99\xda\x41\x80\x6e\xce\x25\xca\x67\x89\x98\xdc\xd5\x55\x15\x58\x2b\x54\xda\x1b\xdf\xf1\x67\x01\x80\xf5\x11\xf0\x42\x76\x4d\x3c\xb4\xfb\x85\xe3\x76\xe1\xc3\x33\x6d\x75\x55\x99\xfa\xd3\xd9\x54\x59\xb1\xfc\x32\xa9\x78\x7a\x3f\x05\x1a\x76\x70\x09\x82\xba\x1b\x1e\xe1\xe6\x62\x14\xf0\xe9\xf1\xfb\xc4\x01\x9d\x35\x69\x24\xf0\x0c\x58\x84\xc4\xcf\x88\x03\xba\xfc\x0b\x71\xb8\xcd\x19\x42\x52\xad\x83\x6b\x40\xd0\x07\xce\x2d\x28\x01\xaf\xef\x0f\x32\xbb\xda\xb3\x5f\xa9\xb3\x70\x58\x7a\xf9\x08\xed\xbb\xa4\x9c\x20\xc1\x37\x7d\x97\x64\x17\x87\x3e\x2c\x08\x00\x17\xbe\x2b\xe2\xe8\x4e\x0a\x06\xa9\xa4\x2f\x32\x3b\xb4\x20\x46\x8b\x4c\x43\xc4\x45\x8d\x99\x40\x5a\x7c\xb3\x4b\x48\xac\x93\x35\x7d\x2c\xe4\x96\x55\x63\x22\xf0\xb8\x4e\xcf\x86\x25\x6a\xa2\x28\xd8\xa8\xd3\x3a\x41\xb2\x53\xd3\xd6\x70\xbc\xf0\xd2\xc4\xbe\xc7\xab\xbf\x64\x43\xe8\xdf\x95\x44\x1b\x88\x58\x92\x0e\x32\x90\xfc\x5b\x50\x9a\x44\x7a\x3e\x29\x3a\x59\xcd\x21\x45\x0b\x61\xf1\xb3\x0f\x69\x0a\xaa\x60\x3c\x63\x2e\x4d\x3c\xaa\xd7\xce\x30\x2c\x11\x05\xfc\x02\x36\x0f\x17\x6d\xe2\x92\xf1\x0e\x17\x52\xf9\xa8\xa4\x6b\x78\x3e\xe1\xcc\x7d\xe4\x2d\xa1\x05\x8e\x65\xdd\x0f\x24\x43\x11\x71\x8e\x71\x08\xd0\x64\xb5\x12\xe2\x8c\x96\xab\x8b\xed\x11\x70\xe5\x3b\x1f\x0e\x4a\xd8\x5e\xab\x84\x57\x74\xc9\x05\xc3\x45\xac\x5b\x36\xff\x9d\x25\xe4\xd4\x44\xe5\x44\x4d\x2e\xc3\x2e\x0a\x32\xeb\x2d\xd3\x28\x2d\x28\x6a\x75\x82\x53\xf0\x7d\x55\xb3\x24\x6b\xdf\x32\xed\xb2\x92\x4f\x4f\x49\xa9\x33\x04\xf6\xa0\x1d\xfa\xd0\x1e\x01\x35\xad\x10\xa0\x45\xb0\x68\xec\xbe\xee\xba\xaa\xa6\x87\xab\xab\x61\x9e\x62\x20\x99\xea\x15\xd5\x97\xc5\x09\x24\xc0\x25\x95\x03\x10\x6e\x41\xbb\x3f\x06\x21\x18\x48\x02\x47\x32\xe5\x51\xb9\x97\x2c\x08\xe4\x20\x39\x51\x84\xd0\x5d\x2a\x56\x41\x82\x8c\x6e\x53\x16\x0f\x54\x5a\x10\x67\xe4\xe1\x82\x86\x8a\x49\x24\x44\x29\x49\x28\x1e\x31\x79\xdf\xda\xa9\x9c\x7a\xd9\x0e\x8a\xb5\x5c\x39\xe4\x5a\x18\x2a\x35\xa3\x48\x95\x48\x2f\x34\x91\x89\x41\xfa\xda\x14\xeb\xaf\x02\x55\xa8\x8b\x15\x2b\x6f\x35\xb1\x75\xc2\xcf\x0b\x5d\x2a\x09\x8d\x2f\x1e\xb2\x01\x5e\x32\x9e\x6d\xba\x61\xf9\xa8\x2c\x0c\xb9\x9b\xd1\x61\xff\xff\x64\x54\x44\xd7\x41\xd9\xa8\x2c\x19\x0d\x39\x8d\x8e\x04\x20\x9c\x79\x0d\x7f\x32\xb1\xbd\x41\xc3\xb5\x83\x20\xa5\x6d\xe4\xe2\x6d\xd2\x0d\x75\x04\x42\x55\x01\xde\xad\x03\x7d\x6f\x02\xbc\x50\xd1\x6a\x0a\xbd\x89\x45\x92\x56\xb8\xba\x4a\x52\xed\xc2\xc7\x47\x15\x5a\x5f\x9e\x78\x37\x02\x9a\x80\x9e\xb4\x89\xb5\x8d\x40\xfd\x62\xc3\x11\xb9\x9a\x55\x49\x88\x70\xc7\xaf\x52\xed\x77\x79\x3a\x0b\xae\xd1\x4d\x35\x6e\xb2\x0a\x75\xdf\xdb\x99\x3b\x61\x4a\x84\x83\x0a\xfb\x53\x55\xd3\x9d\xf2\xcc\xc3\x57\x5a\xd7\x8d\x54\xea\xe8\x29\xdf\x85\xbe\xeb\x07\x00\xb1\x8b\x60\xee\x84\x8a\xb6\xba\x4a\xb9\x73\xfc\x5c\xd5\xa2\xa3\x26\x0b\x87\xc7\x1f\x91\x4f\x95\x8d\x95\x13\xbc\xe7\xe7\xe7\x82\xa0\xb3\x96\xc8\xf4\x48\x06\x39\x89\x54\xc6\xfd\x38\x62\xa7\xd2\xd8\x67\xe6\x5e\x32\x1d\x62\xcf\x1f\xdc\xcb\x7a\x93\x21\xe9\xf2\xad\xa2\xc9\x20\x03\x8b\x8e\xb6\x20\xe8\xd8\x30\x95\x17\xda\x52\x58\x3a\x0f\x85\xe5\x9f\x8b\x2c\x48\xd8\x37\x16\x48\x96\x9c\x5a\x44\x65\x3e\x05\x30\xbc\x57\x7f\xf8\xc5\x17\xf8\xf4\x8b\x2f\xe0\xe9\x07\x9a\x87\x5b\xb6\x1f\x09\xc2\xa3\x1a\x16\xbb\xb0\x65\xe6\x7d\x2c\x33\x12\xda\x53\x25\x04\x47\x91\xfd\x02\xe9\x9e\xaa\x44\x69\x49\xb0\xcb\x92\x92\xad\x9f\xf4\xf2\x88\x43\x9a\xe5\x80\x22\xae\x20\x0b\x61\x51\x57\x37\x0c\x2c\x6f\x63\x91\x06\x70\x15\xcd\x9b\xa8\xaf\x0b\x40\x2e\x0c\xdb\x9f\x06\x1a\x4b\xd2\xc4\xe3\x96\x10\xb8\x65\x66\xa1\x60\x44\x28\x40\xf1\x70\x52\x81\x61\x92\xb3\xe4\x46\x3b\x92\xfb\x69\x9c\xc9\x75\x46\x6a\x2b\xc5\x34\x2d\x77\x91\x84\x22\xe4\xdb\x15\x08\x74\xb0\xfa\x86\x69\xb4\x56\x22\x8d\x16\xd3\xb7\xe7\x88\x14\x3e\xaa\x1f\x4c\xb3\xf6\x31\x28\x46\xca\xf7\xd5\x55\xa5\x01\x8f\xdb\x08\xcc\xa5\x79\xb5\x29\xb6\xf8\xa9\x54\xc5\xcf\x4d\xea\x5c\x2c\x7c\x29\xe5\xc7\xd2\x14\x5b\x82\x08\xbc\xd8\x9c\xcb\xf9\x6e\x01\x2d\xc9\x88\x2f\x27\x06\xb7\x80\x7e\xeb\x3b\x74\xff\x5b\x5e\x08\x6e\x81\x44\x20\x46\x7e\x6a\x49\x22\x7c\xc2\x25\x4b\x2a\xa4\x63\xba\x63\x85\x65\x70\x33\xb3\xdd\x40\x85\x5a\xcd\x49\x1b\x09\x20\x24\x62\xdd\x6d\x50\x18\x38\x01\xe6\x90\xab\x05\x04\xa5\xe0\x0f\x0b\x08\x4e\xe1\x0e\xaf\xef\xc2\xc0\x19\x0e\x51\xa9\x21\xf4\x27\x05\xc2\x30\x95\x0b\x05\xb4\x02\x0a\x64\x96\x17\x9c\x00\x6b\xf2\x16\x2c\xbc\xa5\xb8\x2b\x8e\x4a\xce\x72\x1c\x13\x5f\x23\x6f\xa6\x44\xaa\x84\xec\xda\x8e\xb7\x40\xcf\x1f\x80\xd2\x60\x06\xb1\x0e\x5b\xc9\x2e\xde\x84\xc2\x42\xdb\x54\x8c\xf2\x8b\x40\xa9\x2a\x86\x74\x03\x8c\x16\x6b\x1b\x9d\x26\x79\x4d\x67\x73\x67\x2a\xcc\xca\x8f\x4a\x69\xb1\x31\x24\x3d\xd0\x6f\xc3\xf2\xe1\xf1\x59\x7b\xe7\x53\x6b\xe7\xfd\x71\xeb\xf4\xd3\x76\xb3\x5d\xdf\x7a\xb7\xb3\xbd\xa9\x48\xf3\x71\x22\xba\x69\x4a\x55\x5e\x60\xea\x3b\x5e\x08\xa0\x26\xef\x8c\x7d\x0b\xc8\xf5\x6c\x51\x12\x0a\x02\x91\x59\x45\x90\x7c\x50\x79\x3b\x7a\xd2\x70\x7b\x11\xf4\xe4\x0c\x90\x1f\xc4\x32\xa8\x69\xbb\xfb\x24\xbc\xbc\xcb\x69\x37\x0e\x13\xbc\xc4\xc9\x93\x3c\x2e\xe3\x10\xc3\x72\x8c\x89\x2e\xf6\xd4\x09\x53\x6e\x02\x29\xd3\xe6\x72\x88\x4b\xc8\x10\x85\x20\x08\x7d\x98\x19\xaa\x68\x63\x77\xca\xc3\x72\xdf\xb5\x27\x53\x12\x24\x57\x37\xd2\xb6\xe8\x2c\x72\xab\x89\xb6\x1e\xbe\x34\xd1\x72\x0a\x2a\x90\x9c\x11\x26\x0b\xfb\x15\x27\xa3\x6c\x24\x66\x82\x1a\xea\x50\xd3\x23\x40\x6f\xe0\xe3\x23\xfb\x6e\x59\x70\x75\x35\xf6\x7e\xd0\xd2\xde\x79\xa9\x29\xc5\xca\x59\x2b\x86\x6c\x5e\x61\x75\x14\x69\xff\x98\x95\x16\x9c\xeb\xf9\xd0\xcd\x45\xc2\x13\x62\xf2\x29\x11\x9e\x50\x73\x6f\x10\xf9\xfc\xa1\x75\x4d\xea\x7d\xca\x5b\x0f\x42\xd0\x22\x21\x08\x69\x20\x6f\x42\x25\xd2\x70\x50\xdd\xc1\x8a\xc5\x92\x11\xe1\x80\xd6\x7c\xd4\x5b\xec\xd7\xdf\x07\x8e\x9b\xe5\xea\x05\x9c\xe4\xf7\x20\xbb\xed\x4b\x22\x4a\x6b\x7c\xb0\x5b\xde\x64\x17\x48\x66\x9f\x96\x8c\x04\xd1\xbe\xf7\xfa\xc9\xc9\xf4\x49\x65\x0e\xf3\x99\x5e\x28\x38\x9b\xb3\x9c\x2c\xe9\xc8\xb8\x79\x74\xe1\x23\xdd\x2e\x62\x86\xbf\x07\xb2\x5e\x0a\x17\x4c\x94\xea\xe9\x2b\x3b\x49\x51\xca\xed\x25\xdf\x7a\xea\xfe\x0d\x12\x1e\xb1\x31\x3a\x2c\xf4\x1f\xa9\x49\xa2\x1d\xe0\x3b\x47\xb6\x3c\xc1\x20\x59\x81\x46\x3f\x88\xa2\xc1\x3a\x7e\xc2\x84\x39\x60\xa3\x2d\x9b\xf7\x89\x76\xd3\x6e\x6f\xe0\xb5\x65\x64\x53\xb1\xd7\xc3\x10\x4c\xa6\x61\x21\xf4\x0b\xb4\x76\xa1\x67\x0f\x0a\x34\xd1\x81\x52\x8c\x38\x2d\x90\x8c\x58\x3e\xa2\x2b\x83\xcf\xce\x9f\x22\x46\x26\xff\x18\x36\xf9\x99\x4d\x3c\x12\xd4\x07\x91\xe5\x8d\x41\x62\xf0\xa4\x3c\x47\x28\x55\x04\xe6\xe7\xe2\x5d\x33\xe4\x42\x36\x72\xa2\x91\xc8\x43\x85\xba\x5c\x97\xcc\x1a\x7c\x63\x19\x91\xab\x6d\xf4\xfe\x12\x5e\xbd\x06\x5a\x0d\x96\x4a\x5a\xaa\x22\x16\x5c\x64\xb7\x64\xae\x1b\x42\x8c\x16\x0c\x10\x8b\x51\xfe\x53\x46\x88\xa5\xa8\xc8\x1d\x22\x16\x7b\xa0\x26\x9e\x7d\x16\xe0\x33\xb7\xc4\xcc\x09\x1d\xd4\xd7\x06\x89\xa2\x14\x62\xaf\xf2\x90\xa6\x8f\x89\xa3\x4e\xa4\xe3\x33\x39\x25\x6e\x89\x47\x0e\x43\x94\xf8\x96\x05\xd1\x51\xa9\x11\xb7\x79\x36\x67\x08\x14\xac\xa9\x71\x34\xfa\x2e\xd1\x89\x29\x76\x60\x56\x35\x3d\x2c\x95\x9e\x88\xf5\x5c\x72\x34\xae\x9d\x21\xf6\x3e\x55\xc3\xb8\x97\x89\xe6\xa7\xb3\xe0\xba\x6c\x4f\xa7\xec\xa6\x99\x7a\xaf\xfb\x9a\x8e\x31\xa3\xc1\x11\xed\xb9\x8a\x7f\x96\x42\xdd\xa0\xa6\x10\x08\xd9\x37\x06\xf1\x1d\x7d\x6d\xe5\xf4\x91\x59\xdc\xc5\x61\x16\x85\x2e\x54\x51\x2c\x26\x4f\x0c\x2c\x98\xba\x4e\x1f\x08\xb1\x65\x33\x39\xd0\x83\xd4\xb4\x9c\x79\x31\x29\x3c\x44\x2e\x2b\x20\xfd\x2a\x5a\xc1\x13\xdb\x67\x48\x40\x2a\x12\x59\x3a\xd4\x9e\xd8\x2a\xeb\x9c\x92\xb3\xa6\x05\x46\x68\x36\x62\x47\x01\x2c\x1c\x8a\x4f\xdd\x88\x1b\x52\xa1\x94\xb9\x25\x01\x82\xfc\x89\x80\x4b\xe7\x2f\xff\x89\x00\x4d\xaa\x94\xf9\x20\xe5\x76\xbc\xac\x40\x4b\x02\x8d\xa6\x2d\xc8\xce\xce\xfc\x16\xde\xdb\x23\x70\x36\x95\x5c\x7d\x53\xb7\xb1\x84\x3b\x7d\x6d\x51\xd7\x12\xeb\x91\x17\xf8\x98\x8b\x31\xda\xf6\xef\x64\x32\x89\x9f\x86\x53\x51\xca\xa9\xe6\xe2\xf4\xce\xf1\x7e\x67\x54\x5a\xa2\xe9\xdf\x1d\x39\xa4\x8d\xdf\x39\x53\x40\x7d\xde\xb3\xa9\x13\x25\x7b\x9c\x91\x95\xf8\x25\x12\x82\x5d\x0a\x2e\xf0\xe2\x4b\xfa\x55\x79\xe8\xc3\x1d\xbb\x7f\xad\x8a\xdc\x38\x12\x5b\xfb\x1b\x23\x0e\x42\x41\x44\x51\x64\x81\x1b\x51\xe8\x78\xcc\xc7\xa3\x85\xa9\x02\x2d\xa9\x68\x8d\x45\x67\x19\xa6\x29\xdb\x95\x64\x8a\x2b\xd9\xc5\x09\x64\xf3\x25\xe0\xf6\xeb\xae\x2b\xf0\x22\x93\xf8\x97\xc5\x18\x0b\x28\xb6\x94\x1c\x84\x99\xe7\x8b\xc0\xa5\x89\xbd\xa4\x6a\x29\x01\x32\x63\x68\x9f\x11\x75\x24\xcc\xf4\x19\xa9\x6f\xc3\x14\x18\x7f\x18\xb6\xc8\x03\xd9\x22\x60\x25\x32\x64\xcd\xf3\x75\x8c\x54\xd9\x9c\x05\xbe\xb5\x92\x4e\xe8\xc0\xbd\x5c\x9a\xa6\x29\x63\xef\xe5\x29\x27\xaa\xb8\xf8\xf0\x89\xe8\xcc\x0c\x7d\xe4\xd7\xd5\xa1\x0f\xef\x6c\x38\xa0\x73\x29\x27\x61\x9e\x4c\xc8\x42\xee\xe6\x24\x6c\x8f\x90\x83\xac\x85\xc5\xa2\xc6\x78\x97\x98\x7d\x0c\xaf\xde\x44\xf2\xcf\x5b\xdf\x19\x14\x92\x98\x13\x76\x31\x5b\x49\x4b\x70\x5f\xf9\xf7\xe8\x9a\x1c\xa4\x40\x88\xa0\x2f\x75\x35\x97\x89\x51\xd0\xb6\xf6\xf3\x10\x52\xc6\x86\x87\x6f\x10\x8d\x4b\x25\x21\x2d\x5f\x7f\x1b\x2d\x85\xe5\xe4\x47\x0b\x08\x33\xdd\x03\x71\xff\x96\x40\xfd\x8b\x08\xf7\x58\x10\x5e\x5b\xb6\x6b\x71\x1b\x8c\xef\x2b\x9a\xba\xa1\x03\xca\x9e\x65\x5e\x1b\xe4\x65\x8e\xc4\x86\x76\xac\x1e\x66\x45\x8d\xdf\x3e\x76\x38\x86\xf3\xf1\x50\x05\x5a\xad\x64\xae\x44\x51\x4e\xb2\xd8\xeb\x52\x9a\xa7\x8f\x81\x6c\x78\xe6\x14\xb9\xd9\x79\x9a\x09\x2c\x90\x23\x53\x4a\x1d\x28\x92\xd1\x05\x8f\x8f\x86\x1e\x5f\x13\x49\xe6\x2d\xc7\x0a\xad\xb0\x64\x96\x54\xc4\x0d\xfd\x11\x2c\xc2\x9a\xf3\x5a\xb8\xc2\x6a\x4e\xd1\x82\x2c\x51\x07\x6b\x4a\x75\x58\xc2\x97\x4c\x18\x04\xa9\xba\x38\x04\x70\x0a\x81\x20\xc7\xf3\x6d\x18\xbf\x55\x97\x92\x71\x48\xda\x18\x80\xbe\x0f\x6d\x91\xb1\x13\x8e\x02\x01\xb2\xa7\x3c\xab\xc1\x35\x9b\xeb\x3c\x98\x39\xf7\x32\xce\x88\x12\xa5\x6c\xca\x85\x30\x0f\x4e\x9e\x6e\x57\xe0\x43\x98\x07\x2a\xf2\x4c\x94\x80\xe3\x0c\x0f\x33\x60\x22\xdb\xc5\xfc\xba\x71\x00\x2a\x51\x65\x62\xc1\xa8\xf1\x79\xf6\x48\x7a\x6e\xfc\x1b\x7f\xcd\x84\x97\xe0\x55\xd8\x19\xc0\x02\xed\x77\xca\xf7\x21\x02\x92\xb1\x9a\xcd\x00\xcb\xda\xde\x6a\xe9\xea\x02\x2b\x57\x09\x18\x89\xf9\x6c\xd4\xf7\x28\xf0\x88\x88\x91\x8f\xed\x1f\x52\xa5\x49\xc2\x40\xdf\xc3\x99\xfd\xe7\xe1\x04\x78\xb3\xac\x88\x77\xc5\x7c\xe2\x55\x84\xbe\x87\x75\x48\x89\xc0\x1d\x02\x9d\x60\x22\x1b\xb1\xaa\xd5\xa0\x20\xdb\x3f\xd6\xf8\x0c\xfc\x3b\x4f\x41\xfc\xb5\xb4\xc4\x6c\x9a\xff\x1e\x87\x0b\x8c\x93\x3b\x25\x42\xb8\xf0\xb1\x49\x43\x21\x08\x3c\x4d\xa2\xc0\x30\xbb\xe8\x57\x03\x47\x11\xe4\x7a\xa8\xaf\x18\x5a\x0e\x02\xa4\x0b\x1c\xe1\xb8\x40\x52\x8b\xe1\x26\x6f\x11\xa2\x46\x7a\xee\x0c\x2e\xc4\xd0\xd4\x34\x71\x94\xeb\x74\x86\x51\xac\xce\xd3\x6a\x4e\x22\x14\xd9\x77\xf4\xf0\x2a\x79\xfe\x00\x5c\x92\x55\xa4\x0c\x6d\x37\x00\xca\x55\xe1\x4b\xa1\xd0\xf3\xe7\x68\x61\x38\xde\xa8\x5a\x20\xc6\x93\xa5\x9e\x3f\xaf\x15\x0a\x69\x3f\xeb\x6a\x21\x84\xb6\x17\x90\x20\xfa\x7c\x66\xd7\x02\xab\x47\x05\xa2\x95\xe9\x3c\x7e\x86\x91\xaa\x16\x02\xdf\x75\x06\xb5\xa7\xf2\x5d\x1f\xe3\x81\x1a\xa6\x1e\xe0\xd5\x82\xe3\xb9\x8e\x07\x4a\x3d\xd7\xef\x8f\x6b\x85\x02\x42\xbe\x64\xbb\xce\xc8\xab\x16\xfa\x00\x6d\xf0\xb5\x02\x93\xb5\xf6\x6d\xb7\xaf\xf2\xaa\xc5\xa4\x61\x8a\x56\xf8\xbe\x50\xd1\x6a\x85\x02\x06\xc8\xa4\x7f\xc2\xf2\x2c\x57\xe1\x53\x15\xfa\x7e\x88\xf0\x11\x83\xac\x16\xbe\x13\x28\x1f\xc4\xd6\x2e\x35\x01\x90\x58\x04\xb9\x00\x4a\x6c\xe7\xc2\x83\x21\x43\x47\xb2\xf2\xa1\x61\xa8\x16\x0c\xe9\x6b\xe8\xdf\x25\x5f\x13\x57\xe6\x84\xb6\xb9\x5a\x30\xca\x2f\x02\xae\x4c\x46\x79\x5b\xc5\x03\x20\x2b\x41\xb5\xb7\xd5\x02\x3d\xc0\x65\xe5\xe8\xb0\xe7\xab\x89\x6b\x4f\xbf\x1c\x83\xfb\x21\xb4\x27\x20\x28\x60\x64\xd1\x38\x60\x0b\x80\x2f\x05\x7f\x6a\xf7\x71\xba\x61\xb3\x6c\xd4\x0a\x4f\x85\x42\xe8\xf3\x4f\x0d\xfc\xf4\xa9\x1c\xf7\x11\xd5\xb5\x3d\x67\x42\xa2\x11\x78\xf6\x04\x54\x09\xd0\x1a\xff\x3c\x26\x04\x8f\x9b\x80\x52\x5a\xa2\x9a\x13\x02\xf2\xb8\x84\xf3\xdd\xa0\x49\x3b\x74\x3c\x27\x04\x89\x52\xa1\x33\x71\xbc\x51\x89\xed\x17\xd5\x02\xb0\x03\x50\x72\xb0\x5f\x47\x12\x0b\x07\x02\x5a\x24\xba\x16\xd6\x9e\x94\xf4\x26\x7e\x0d\xec\x41\x22\x40\xbe\xa3\x65\x83\x3f\xe5\x6f\x0a\x5c\x9e\x68\xde\x58\x3a\x8e\x50\x14\x39\x28\x90\xd7\x4a\xb6\x6c\xdf\xb5\x83\xe0\xc8\x9e\x00\x4b\xe1\xb6\x12\x41\xc1\xc5\x59\xa5\x49\x3a\xe9\x25\x56\x71\xe2\x6d\x7a\x11\x68\x1a\x49\x4f\x2d\x87\x43\x57\x77\x2e\x20\xe8\xdf\x69\x5a\x2d\xda\x85\xc8\xf6\x43\xd7\x7c\x0e\x72\xb5\xa5\xb6\x95\xd2\x1d\xe8\x8d\x9d\xb0\x84\xb7\x4c\x4a\x05\x3a\x77\xf5\xcc\xce\x5a\x30\x0d\x63\x12\xe0\x4d\xcb\x86\xb5\xd2\xc4\x7f\xf8\x96\x7a\x8a\x9e\xb9\xdd\xf9\x02\xae\x23\x11\x36\x40\xfb\x69\x82\x9a\xb4\xaa\x59\xc8\x84\x64\x12\xa1\x71\x53\x26\x71\xb2\x6f\xa1\x11\x00\x5f\x3b\xab\xb3\x75\xb9\xc9\x4d\xf6\x9c\x01\xb4\x47\xd4\x4b\x90\x9c\x32\x00\x2a\xd2\xca\x4b\xa6\x46\x2f\xbd\x7a\x35\x9d\x4b\x66\x8f\x69\x4c\xe7\xd1\x34\xc1\x3f\x32\x2b\x5b\x92\x27\x3a\x83\xce\x12\xac\xcf\x25\xcf\xaa\xc4\x7c\x15\xcf\x41\x29\xd8\x37\x53\xd1\x95\x41\xcf\x25\x5f\xc5\xa2\x53\x19\x4d\x32\x8c\x4b\x9c\x71\x93\x5f\xff\x39\xc5\xe2\x9e\x0b\x0b\x09\xe4\xad\xb9\x80\x97\xe4\xce\xd2\x17\x05\xa1\x5c\x17\x84\x2d\x70\x0b\x60\x00\x3a\xce\x00\xf8\xea\x8a\x29\xa0\x39\x0d\xec\x29\xb8\xd0\xa4\xf3\x3b\x4b\x8d\x2d\x18\xab\x2e\xb3\xb4\x88\x28\x24\x15\xdc\x21\xce\x2d\x4f\xcd\x13\x45\x1f\x95\xa1\x40\x83\xed\x66\x55\xaa\xa1\x5c\x5c\xaf\x65\xcd\x8e\xa2\x22\x97\xe0\x2a\xa3\x55\x15\x80\xa8\x89\xac\xab\xa0\x7f\x17\xe0\xf0\x21\x97\xe1\x55\x2e\xc6\x64\x1d\x26\x4d\x0b\x62\x1d\xf6\xe5\x95\xee\x58\xa0\xe6\xbc\x0e\x6b\x0e\x4b\xb8\xe6\xf3\xca\x57\x7c\x49\x71\xd0\x2d\x05\x1b\xe3\xfb\x3c\x6f\xac\xe9\xce\xeb\xb0\x64\xae\xae\xae\xe0\x44\x2a\x5c\x2c\x26\xcc\x3f\x32\x19\xa0\xa2\xad\xae\xd2\xea\xca\x47\x4f\x61\x41\xea\x0b\xb0\xfc\xd9\x77\x3c\x55\xc9\xb3\x4b\xa6\x8a\x5b\x51\x86\x89\x34\x92\x40\xe3\x71\xcb\x05\x49\xf2\x73\xe7\xda\x86\xa5\x07\xa1\x28\xa6\x3e\x7d\x2b\x69\x8d\x53\x85\xe6\x49\x00\x65\x50\x93\xb7\xc7\x2c\x46\xba\x63\x19\x35\xe7\x35\xc8\x0c\x9d\x74\xdf\x9f\xa3\x53\x5b\xd1\x6a\x7e\x76\xef\x4c\xd7\x41\x64\xc7\x74\x55\xd0\x71\xc5\xe5\xd7\x83\x45\x27\x29\xfa\x45\x23\xdb\xf2\xef\x54\x5f\x7b\x12\x44\x85\x4f\x77\x4a\xa2\xaf\xac\x39\x43\x35\x78\x63\x90\x6e\x78\x32\xfd\x7b\xa0\xd5\x08\xac\x98\xc6\x8b\x54\xef\x9e\x48\xc9\xc4\xa7\x94\x61\x86\x20\x4c\xf0\x85\xdf\xe0\xa0\xce\xaa\xf6\xc4\x32\xcb\xc8\x7a\x83\xf3\xba\xe4\xf7\xd7\x8c\x37\xca\x3a\x3d\x02\x33\xe6\x76\x52\x75\x03\x3a\x7f\xb2\x89\x29\x75\x98\x30\x93\x88\x9a\x06\xac\x38\x5e\xe6\x49\xdd\x3d\x71\xc1\xc5\x2f\xa1\xee\x90\x1b\xb1\xaf\x07\x35\xf0\x1a\x6e\xaa\xbe\x05\xf4\xc0\x82\xc5\x50\xab\xaa\xbe\x05\xf5\xc0\x02\xc5\x30\x62\x52\x78\x85\x9f\xaf\x0b\x83\xd9\x52\xe2\x35\x97\xd1\xde\x71\xe0\x32\xbd\x8a\xd3\x55\x42\x96\xbf\x95\x6a\x30\xfd\xbc\xb5\x80\x10\xae\x05\xaf\xc3\x5a\x50\x2c\x6a\x0e\xb7\x39\x06\x57\xf1\xc4\xf5\x8b\x32\x2b\xd4\x29\x74\xbc\x50\xb2\x42\x0d\x6c\x5c\x79\xd7\x2f\x07\x21\x31\x92\xc3\x49\xb7\x5f\xc3\x5a\xda\x9f\xf3\x0e\xda\x53\x1b\x73\x97\xd1\x8c\xca\x55\x8d\x64\x4c\x27\xfd\xc9\xc4\x09\xdf\x39\x1e\x60\x76\x90\xec\xc0\xf4\xc0\x1d\x7a\xac\x52\x39\x46\xa0\x7b\x16\x2c\x85\xba\x6d\xad\x98\xb5\xc5\x62\xf6\xa2\xf7\x46\x66\x48\xa6\xda\xd6\x8a\xa1\x7b\xe2\xd7\xa5\xc5\xa0\x35\xdd\x5e\x5d\x5d\x91\x91\x61\x53\x0d\x28\xe5\x66\xbd\x20\xc4\x8c\x8a\xee\x95\x4c\xad\x98\x7c\x08\xd1\x0a\xf1\x2c\xa8\x55\x05\xc5\x49\x96\x58\xd4\x6b\x17\x87\xe3\x4d\xba\xe1\x4d\x5d\x27\x3c\x77\x06\x00\x5d\x1f\x88\x0f\x99\x1a\x44\x19\x44\xd9\xe9\x79\x5d\x2c\x6a\x89\xae\xa4\xf4\x86\x77\x7d\x7c\xa8\xbb\x97\xd7\x57\xf4\xbb\x9e\x57\xdc\x0e\xfa\x8e\x13\xd7\x88\x7e\xa6\x54\xa2\x64\xb9\x1d\xfa\x03\xb0\x29\x58\x86\x14\x59\x0c\x21\x08\x21\xb5\x1d\x64\x65\xd0\x0c\xc1\x41\x73\xd2\xc5\x72\x11\xa3\xfd\x88\x42\xd7\x2e\x42\x7f\xc5\x48\x4e\x9e\x89\x7d\xdf\xc3\xd1\x78\x1a\x51\x76\x42\x34\x01\x8b\x96\xf7\xb4\x58\x33\xc0\x6f\x09\x51\xa0\x85\x78\x1d\xfc\x3c\xa6\x34\x69\x3d\x6e\x8a\xab\x31\xb0\xef\x16\xb3\xbd\x17\x58\x9f\x50\xab\xd1\xaf\x08\x15\xad\x55\x05\x55\x80\xb8\xbc\xd4\x62\x72\x14\xe3\x7d\x9a\xd4\x74\x52\xb6\x83\x18\xb5\x66\x1a\xda\xcc\x3c\xa9\xca\xb4\x3c\x5c\x13\xe9\xf4\x6a\x79\xad\x50\xd4\x37\x45\x0f\xab\x32\x2a\x4a\x50\xa0\x9b\xd4\xd7\x29\x02\xa1\x7f\x67\x2d\x3a\x3e\x6b\x8b\x10\x5f\x08\x3b\x5d\x2b\x39\xa6\x67\x53\x75\x89\x23\x3a\xbf\x21\xdd\xd0\xb4\x2a\x5b\xe9\x3f\x01\x48\xf5\xa7\x41\x28\x9a\x08\x06\xc5\x83\xb7\xc3\x33\x7f\x16\xc8\x92\x91\x47\xcc\xfe\x2e\x00\x83\x6f\xd1\x01\xd7\x92\x07\x5c\x56\x04\x33\x9b\x78\x72\x8f\xe8\xa1\x0f\x27\xe9\x96\x93\xdb\xb0\x3d\x0b\xfd\x86\x0d\xa1\x63\x8f\x40\x0b\xaf\x83\xcd\x64\x8b\x84\x2e\xac\x0b\x39\x5c\x0b\xbe\xe2\xbe\xcb\xef\x6a\x72\xa5\xa3\xee\x2c\x9a\xfd\xb5\xd0\xb2\xe8\x78\x91\x93\x01\xb5\x10\xc8\xc7\x0b\x6d\xca\x39\x76\x74\x00\xda\x01\x38\xf5\x71\x84\x10\xc9\x68\xf0\x06\xb8\x42\x6a\xa7\xb3\x14\xa6\x4f\x23\xa7\x3c\xc4\x96\xd9\xd7\x4e\x08\x70\xfc\xd3\xc8\x51\xa4\x68\x6a\x42\x6b\x4e\xe9\xf8\x51\x74\x5b\x19\x33\xff\x38\xb3\x7f\x3e\x0f\x95\x4e\x74\xf7\xb5\x0c\x8c\x0e\x2d\xb0\x19\x59\xd2\xa2\x53\xa4\x1a\xa6\x6c\xcd\x33\x27\x68\x2c\x45\xb4\x52\x7b\x57\xaa\xe0\xf6\xce\x6e\xfd\xec\xdd\xe9\xa7\xc6\xf1\xbb\xe3\x16\x33\xdb\x95\x5d\xe2\xf3\xa7\xc9\x15\x42\x2a\xc3\xff\x78\xfe\x80\xd8\xe1\xab\x81\xf6\x7a\x89\xc5\x56\x84\x69\x69\x04\x2e\x4b\x72\x93\x35\xae\x6d\x18\xa8\x50\xd3\x63\xab\x11\x81\x6b\x8e\x4a\xee\x78\x9e\x74\x32\x2d\x3d\x69\xa0\x78\xae\x78\xbc\x35\x5d\xa6\xed\xbc\x79\x94\x77\xfa\x48\xf1\xe4\x9a\x69\xc5\x0c\x77\x7a\xfa\xe6\xa1\x94\x83\x51\xbd\xe7\xdf\x2e\x8f\x12\xb7\x76\xd5\x98\xed\x65\xf9\xdd\xf0\x5e\x11\x71\xb2\xb9\x57\x49\x3d\xb7\x87\xb5\x9f\xb3\x87\x5b\x20\xe5\xae\xb5\x4c\x0f\x5b\xd4\xa8\x54\x28\x05\x49\xb0\x1a\x68\x79\x92\xd3\xa7\x06\x5f\x5b\x61\x0d\x2e\x26\x00\xfc\xbd\x11\x60\xe8\xb8\xae\x2c\x57\xa9\x70\x97\x95\x60\x6c\xe8\x46\x4c\x0b\x68\x19\x35\x98\x31\x08\xa2\x22\x12\xd4\xfd\xf8\x82\x6c\xe4\x58\x0e\x2d\x41\x26\x67\xc1\x36\x0f\x84\x84\x92\x32\xb9\x91\xf5\xab\x80\x24\x20\x75\x95\x87\x56\x98\xb0\x2e\x26\xd9\xca\x13\xb7\x7f\xd4\x39\x48\x3a\x22\xf0\x4f\x74\xf0\x20\x0b\x46\x56\x50\x16\x91\x57\xb6\x6f\x60\x00\x4b\x22\x2c\x76\x96\xad\xc5\xd3\x86\x98\xfe\x22\xbc\xb2\x48\x60\x27\x09\x1d\xb2\x6b\xb3\x3c\xb4\x07\xe3\x00\xa4\x13\x4b\xce\x3d\xc2\x0c\x0f\x42\x6f\x58\x9a\xee\x58\xb0\x14\x96\x54\x60\x71\x47\x1d\x2c\x85\x9a\x56\x34\x6b\x0e\xbd\xa5\x45\x92\x26\x35\xd4\x1d\x3d\x2c\x82\x78\x52\xfa\x16\x28\x99\x35\xff\x8d\x65\xd4\x7c\xe6\xbe\x94\xb3\x05\x15\xfd\x85\x6b\x50\x6a\x48\x86\x4e\xa2\x7c\x02\x70\x2b\x0b\x8f\x0b\xea\xba\x23\xef\xba\x6f\x39\x25\x58\x34\xf5\xc0\x72\x52\x04\xf0\x71\xf7\xc1\x8a\xe5\x67\x28\x00\x75\xa0\x07\x71\xff\x3d\xcb\xa8\x79\xaf\x41\xcd\x5b\xbc\xae\x82\xa2\xf7\x4d\x1b\x50\xf8\x0d\x1b\x10\x15\x25\xe0\x10\xf4\xcb\x51\x4b\xc0\xba\x3d\x3e\xa6\xdd\x81\x13\x12\x8a\xb4\xcc\x41\x22\x24\xf8\x79\x3a\xc4\x31\x22\x8b\xe6\x3f\xcf\xb3\x00\xe2\x49\xc6\x24\x51\x12\x6e\xcc\x09\xe2\x54\xc3\x5f\x64\x1e\x69\x42\x86\x58\xc2\x5c\xa6\x28\x93\x20\x5b\x96\xd0\xa1\x98\xdd\x81\xd4\x02\xf7\x6b\xc8\x14\x5f\x5c\x7f\xc2\xf1\x83\x2f\x12\xa2\x3b\x0b\x53\x38\xc6\x4b\x31\x3a\x1d\x97\x3c\x0a\x18\x7e\x49\x7f\x9a\x6f\x3f\x20\xc5\x57\x2b\x23\x0e\xd2\x14\x5d\x9b\xbe\x12\xd1\xcc\x3e\x2d\xca\xb7\x13\x5d\x25\x7d\xe8\x8c\x1c\x8f\x93\xe8\x81\xb0\x05\x5c\x3b\x74\x6e\xd3\x08\x93\x7b\x44\x7e\xa7\x72\x3c\x6c\xa5\x80\xe5\x01\xba\xd2\xd4\xa9\x01\x3e\x20\x40\x11\xea\x50\x97\xed\x90\xe8\x92\x1a\x97\x0d\x73\xa2\x06\x64\x3d\x6d\xbf\xa6\x4b\x62\x3a\xa4\x7d\x9e\x79\xb4\x73\x23\x1e\xfc\x7e\x90\xe6\xf7\x01\x41\x64\x8a\x6f\x96\xf4\xe4\xc5\x78\x13\xb7\xb9\x5c\x04\x0f\x5c\x69\xd9\x31\x68\xf1\xac\xfb\xe2\x3e\x81\x5c\x87\x8f\x7c\xce\x26\xea\x56\x2b\x79\x5d\x58\xa2\x4f\xd0\xbf\x93\x7a\xee\xf1\xb6\x03\x9f\x78\xb8\x91\xfc\x20\x76\x43\x22\x79\xfe\xf9\x1b\x4a\x4d\x58\xc2\x12\xe7\x3a\xa5\x09\xbc\x41\xa6\xbc\x0e\x52\xae\x78\x18\x19\x9a\xc4\x74\x01\xe6\x9c\xae\x71\x01\xf6\x41\x54\x32\xaf\x07\x71\xa9\xe5\x7b\x11\xd7\x49\xf5\x24\x2b\xaa\x07\x19\x39\xbd\x99\xc3\x5b\xe3\x61\x4c\x9d\x51\xd9\xd0\x18\xa8\x61\xb5\x44\xf8\x10\xe9\xdd\x22\x2a\x99\xcc\xf0\x8a\xf8\x74\x33\x61\x81\x2d\xdb\xab\xd3\xfb\x63\x35\x72\xcc\x58\xa6\x0a\xdb\x2a\xa5\x22\x71\xc4\x65\xc6\xbb\xd1\x02\x49\x2a\xd1\x74\xe6\x1c\xcb\x7e\x3e\x1d\x92\xc2\x3d\x2a\x2c\x53\x55\x42\x0d\xed\xb5\xa9\x2d\x73\x61\xa0\xd2\xd7\x28\xfd\x38\xa3\x02\x95\x73\x9e\x47\x4a\xbc\xd8\x05\x69\xb1\x3a\x13\x94\x4a\x39\x4c\x9f\xbe\x02\x34\xe6\xb7\xb4\xd8\x27\x0d\xfa\x77\x35\xd5\xb1\xc2\x12\xd0\x70\x2a\x79\x15\x5a\xb0\x84\xb9\xf7\xa1\xeb\xa3\x1b\xfb\x33\xe1\x8e\xaf\x95\x4c\x52\x1e\x4a\x84\x0a\x45\xf8\x47\xe2\x17\x9a\xee\x88\xc5\x88\x45\x27\x53\x83\x34\x95\x12\x56\x47\x1b\x65\xec\xe3\x8f\x98\x14\x87\x38\xf8\x53\x7d\x7d\xf4\x2e\x2c\x01\x74\xef\x17\x32\x9c\x0e\xcd\x3b\x2d\x9d\x02\x62\x81\xa9\x68\x0e\x2c\x37\x2d\xa9\x78\x50\x74\xe2\xa6\x42\x06\xa5\x59\x63\xf9\x16\x97\x34\x0b\xcb\x89\x83\x0c\xf9\x62\x40\x67\xb1\x5d\x16\x44\x49\xc5\x65\x24\xee\x37\x29\xdb\xcc\xfc\x20\xb8\x19\x40\x99\x0c\x1e\x9a\xc6\xd4\x80\x5f\x8b\x93\x00\xd4\xb7\xe1\x24\xe8\x9c\x54\x53\xe1\x78\xa3\x2d\xc0\x8b\xa6\x12\xb1\x8e\xf2\x82\x42\x67\x50\xcb\x46\x9c\xa5\x69\xc1\xe9\xf1\xe3\x0c\x55\xf1\x39\x03\x96\x09\x41\x9d\x63\x56\xfb\xa4\x57\x0c\x43\xd3\xc9\x29\xd8\x03\xae\xdb\xbe\x99\x01\xb7\x7f\x4d\x9b\xfa\xc4\x6c\x27\xb8\x64\x80\xa3\x4c\x32\x40\x6d\x33\x53\x68\xea\xda\x91\xab\x12\x06\x0b\x92\x70\xf3\x8f\x4d\x19\x36\xbc\x55\xa4\xbe\x61\x18\x9a\x56\x5d\x50\x83\xdd\xb1\xc4\x79\xfa\xd8\x4d\x96\x33\x64\xb7\x83\x5d\x62\x9d\x18\xad\x6c\x9f\xc6\x37\x67\xf7\x27\x61\xa6\x5b\x62\x75\x87\x85\x52\xbe\x87\x2d\x57\xad\xe4\x28\xb9\x3e\x16\xe2\x26\x6a\x06\x88\x7b\xc9\x59\xd7\xc7\xd1\x49\x99\xb3\xaa\xe3\xe3\x34\xf2\xff\x13\x8b\xe6\xa4\xcd\x34\x23\x0b\x8a\x9c\x66\x62\x33\x8b\xbc\x88\xe0\xf5\x8c\x16\x30\x07\x64\x56\x65\x98\x07\x3a\x3e\x29\x73\x40\xc6\x36\x31\x79\xa0\x5a\xe9\xb3\x77\xf1\xa6\x79\xbe\x14\xe0\x3a\x73\x91\xc8\x10\x53\x76\x23\x4f\x9d\xf9\x4c\x45\x99\x76\xc1\xaf\xd2\x8d\x4a\x96\x31\x5d\x64\x2f\x27\x7e\x7d\x69\xc4\x86\x5a\x2b\xb9\xe1\x6f\x52\xf1\x97\x24\xf6\x60\x69\xcb\x38\xd6\x8e\xee\x5b\x46\xcd\x7f\xed\x30\xe3\x20\xbf\x58\xd4\x9c\x4b\xff\x8a\x37\x6f\xf4\x99\x80\x8e\x0f\xb0\x95\xc7\x02\xa4\x23\x6b\x49\xf8\x8b\xec\xce\x7f\xef\xf5\x09\x87\xc9\x44\xe1\xf9\xf1\x30\xf2\xe4\x6c\xa9\x70\x20\x79\xb1\x79\x93\xce\x0a\x39\x93\x8c\x0f\xeb\x00\xf4\x15\xc0\xdc\xb1\x45\xa1\x1d\x56\x57\x55\xe2\x17\xce\xdb\x8f\x0b\x4b\x6a\x3a\xbf\x39\x4a\x8a\x88\x10\xa1\xfe\xa4\x71\xe0\xae\x65\x63\x36\xa4\x8b\xa6\x39\xa7\x9c\xc6\x70\xbf\x13\x5a\xd3\xdf\x47\xef\xe3\x78\xb5\xd9\x63\x94\x7a\xb3\x58\x8a\xa1\x70\xeb\x54\x6e\x93\x95\x03\xc1\x54\xe4\x71\x3c\xb8\xd0\x03\x42\x1c\x29\x23\x4f\xea\x27\xf2\xd6\xb3\x34\x8b\xbf\x2f\x6a\xe5\xc4\x74\x4d\x91\xe4\x1b\x82\xfb\xe8\x82\x90\x82\x23\x10\x92\x1b\x61\x54\x0c\x68\x8b\x4c\xb5\x17\xdc\x74\x9c\xa1\x0a\xdf\x84\x91\x72\x21\x8a\xf5\x4d\x98\xa2\xd8\xe1\x4a\xd1\x95\x92\xa9\x90\x48\x74\xc2\xc5\x1a\xad\x11\x92\xc4\x9a\x1a\x28\x64\xe7\x00\x75\xbc\x61\x7c\x94\xb4\x80\xa5\x88\x42\x90\x67\xd1\xfa\xe1\x17\x5f\x60\x09\x3c\x15\x8a\x85\x1f\x8a\x3f\xfc\x22\xeb\x5b\x41\x1d\xbd\xb1\x34\x61\x7a\x68\xc3\x91\xe3\x3d\x4d\xe7\x3f\x2c\x82\xdd\xf7\x5d\x65\x19\xb1\x93\x60\xaa\x27\xd8\x41\x1c\x89\x55\xd1\x15\x55\xc9\x1d\x0a\x7a\x0f\x52\xf4\x42\x7e\x39\x74\x8d\x57\x34\x45\xe2\x56\x3c\xe2\xb2\x9a\xa0\xb3\x74\x75\xd5\x29\x3b\x41\xc3\x77\x5d\x7b\x1a\x80\xb4\x75\x30\x3e\x04\x58\xf1\x86\x0d\x41\x88\xef\x7f\xf2\x98\xb1\xb1\xc3\x98\x64\x3e\xf3\x31\x47\x6b\xd4\x55\x59\x30\x11\x92\x0c\x33\x71\xf6\xd6\x70\xec\x7b\x71\xc2\xfc\x32\x4e\x94\x9f\x08\x8a\x9d\x99\x36\xb5\xe0\xce\x61\x59\x01\xed\x00\x14\x64\x90\x76\xea\x87\xd5\x30\x0a\x90\x99\xe7\x09\xa8\xe8\x61\xe6\xe6\xa0\x70\x8e\xd4\xf8\x3d\x76\x95\x26\x6b\x92\x44\x70\x26\x56\x9d\xf4\xc5\x3b\x30\x0c\xc9\x63\x05\xbb\x51\x2b\x35\x12\x03\x30\x0f\xc3\x28\xed\x7f\x8c\x66\x66\x4e\x27\xfd\x8f\x7b\x76\x00\x5c\xc7\x63\xa1\x45\xbf\x01\x69\x8a\x9d\x00\x6f\xd4\x1d\x8a\x34\xf5\x1b\xfe\x09\xd4\xe3\x46\x8e\x25\x2b\x59\x9e\x82\xe8\xf1\x42\xa9\x66\xfe\xce\x2b\x92\x6e\x46\x35\x72\xa5\x9b\x51\x29\xc9\x35\x4d\xb8\xe9\xab\xd1\x19\x02\x84\xb0\x72\xe5\xb4\xd7\xfe\x5d\xd7\xf7\x27\xe7\x36\xf4\x1c\x6f\x94\x09\xa6\x49\xfa\xf1\x10\x97\x20\x3e\x87\xf8\x15\x48\x1c\x91\xe9\x32\xcb\xfb\x67\xa6\x6b\x72\xde\x99\xe8\x55\xe9\x8e\xbc\x53\x24\xa5\x53\xee\x98\x34\x12\x41\xcf\xb5\xfb\xe3\x5a\x36\x42\xc1\x1f\x0e\x87\x95\x4a\xa5\x52\x8b\xc2\x7d\x54\x0b\xae\x0d\x47\xa0\x46\xa3\x11\x40\x7b\xe0\xcc\x82\x6a\xe1\xe5\x74\x5e\xe3\x5c\xc9\x5f\x6c\xd4\xa6\xf6\x60\x80\x63\x20\x18\xe5\x0a\x98\x14\x8c\xf2\x06\xfe\x7f\xf4\x9d\x78\x7d\x92\xaf\x90\x7a\x76\xa2\xb7\x35\x81\x83\x68\xe4\xfc\x0b\xe6\x04\x8b\x92\x3d\xf8\x3c\x0b\xc2\x6a\x01\x1d\x6a\xd1\x6b\x1c\xec\x84\x24\x40\x66\x6f\xb0\xeb\xaf\xa4\x16\x7a\x97\xad\x22\xa3\x5b\xd6\x65\x92\xfa\x80\x66\xd8\x65\xb2\xa4\x51\x2d\xea\x80\x13\x3b\x55\x69\x4f\x54\xbd\x9b\x01\xcf\x47\x98\x70\xca\x87\x20\x08\xec\x11\x38\xb4\x3d\x7b\x04\x60\x19\x82\xa9\x6b\xf7\x41\x8b\x25\x3e\x0d\x54\x9f\x87\x40\x4b\xeb\x97\x51\x8a\x6f\xd3\x30\xbe\x5f\xb0\x3d\xc5\x71\xcd\xb5\x2b\xd9\xcc\x22\x73\x65\x18\xe7\xd7\x10\x08\xb4\xf8\xac\x19\xf4\x56\x98\x81\x13\x53\x84\xda\xd1\xe0\x00\x34\x1c\x9d\x32\xce\x67\x99\x25\x54\x5d\x04\x99\x9e\xa2\x39\x25\x32\xa3\x91\x6d\x25\x67\xd9\x1f\xdf\x02\x88\xf8\x9f\xa4\x7e\x32\x5a\xf3\x3e\x79\xcd\xad\xf7\xa8\xa3\x49\xd6\x98\x2b\xb7\xfc\x9a\xe7\x6b\xa5\x57\x70\x6a\x25\x9a\x1b\xd3\x39\xbf\x5c\xe7\xf3\x12\x59\xb1\x5f\xb9\x3c\x73\x96\xa1\x60\x9d\xc9\xbd\xf3\x0b\xe6\x4b\x63\x12\xb0\xc0\x0d\xb2\x55\x27\xf3\xd1\x4f\xd5\x56\x04\xe4\x58\xce\x97\x19\xa0\xd3\x60\x0a\x01\x2a\x19\xd9\x7d\xe8\xa0\x1c\x84\xfe\xf4\x3d\xf4\xa7\xf6\xc8\x26\x87\xc6\x93\x8e\xee\x8d\x52\xaa\xc7\x27\x66\xbe\x38\x56\x3a\x6e\xc2\xd3\x37\x5f\x46\x2c\x85\xb5\xfc\xca\xcc\x42\xe0\x37\x1c\x20\x6d\x21\xbe\x5c\x96\x5f\x6c\x88\xa8\x2f\x5e\xda\x99\xf5\x9c\x58\x1e\x54\xdb\x83\x7d\x84\x1b\xae\x03\xf8\x18\x53\x78\xc1\xe8\x8e\xf8\x65\x12\x8a\x0c\xe7\xd0\x9f\x5a\x2a\x64\xba\x38\x87\x89\x5b\x9e\x55\xb8\x20\xef\x82\x6a\x2e\x18\x86\xa8\x1e\x51\x70\x38\x29\x93\xf1\x85\x71\xf2\x29\xf8\x5a\x6c\xd5\x9d\x40\x30\x16\x54\x67\x6f\xba\xa9\x22\x9a\x4e\xd3\xdb\x84\xec\x36\x96\x2a\x20\xe1\x76\x16\x0c\xa0\xa2\x7f\x23\x20\x7e\x8f\x95\xbe\x4a\x6c\xae\xa9\x91\x12\x34\x8c\xb9\xc9\x25\x66\x1c\x91\xfb\x3f\xe9\xe1\xe3\xa3\x89\x05\xe9\x32\x87\xcd\x64\x6e\xcd\x48\xb1\xec\x93\x37\xbb\xd0\x9f\x44\x79\xe5\x53\xee\xcd\x52\xe5\xaa\x3f\xbd\x27\xd6\x5b\xa7\x7e\x54\x37\x2b\x1c\x13\xe4\x99\x89\x33\xdd\x7b\x7e\xe8\xf4\x01\xba\x45\xa5\x23\x29\x70\x47\x0a\x17\x9a\x8a\xc9\xf0\x1b\xfe\xf4\x9e\x9d\xea\xa8\xdb\x98\x0a\xfc\x45\x4b\x7a\x68\x4c\x21\x50\xb4\x5a\xc8\x31\x85\xa8\x1f\xa5\xd0\xe7\xb0\x0a\xfc\x19\xec\x03\x74\x15\x48\x6d\x02\xe9\xa3\x45\xb8\xe1\xe3\x68\x46\xd9\x6d\x1c\x3f\xce\x0d\xee\xb1\x44\xcc\x8e\x44\x70\x52\xd9\x05\x5a\x77\x2c\x58\xb6\xbd\xfe\x35\xb9\x69\xea\x41\xf4\xf3\x18\x0b\x09\x74\xcf\x82\x24\x76\x03\x7e\x6d\xb3\x5f\xe4\x6d\x0d\x96\x09\xca\x75\xd7\xc5\xad\x42\xe0\xa9\xa1\xa6\xfb\x64\xc0\x59\x33\xdc\x98\xa7\xe7\x8b\x0e\xcb\x60\x1e\x02\x6f\xb0\xba\xaa\x62\x0b\x5e\x7c\x8d\x57\x1d\x3d\x88\x5f\xa9\x9e\x6e\x6b\x9a\x1e\x4a\xd9\x8f\x1c\xc3\x98\x18\x87\x44\xa0\x03\xa9\x88\x2a\x60\xe5\x6b\xce\x50\x25\x57\x1e\x7c\xb4\x71\x22\x06\x8d\x73\xf9\x63\x11\x26\xca\x41\x68\xc3\x90\x92\x0c\xb2\xdf\x08\x53\x9c\x5f\xec\x43\xa9\x75\x7c\xae\xac\x58\x10\x7b\x95\x1c\xd9\x13\x80\x25\xed\xca\x1f\xe2\x48\x82\x16\xf7\x7c\x75\x55\x69\xbf\xaf\x1f\xe1\x67\x5c\x77\xe3\xd7\x2a\x4c\xbc\xc1\xb1\x23\x20\xb8\x75\xfc\x59\xd0\x76\x7a\xae\xe3\x8d\x6a\x1a\x2e\x92\x7c\xa8\x87\xc5\xac\x8b\x6f\xec\xe2\x02\xa9\xf3\x73\x5e\x19\x50\x06\xde\x00\xb7\x59\xc2\x5f\xe9\x14\xe0\xfb\xa7\xa2\xae\xb3\x52\xbf\x93\xbe\x7a\x60\x1e\x26\xfa\xc9\x3d\xd0\x83\x65\xfa\xe8\xf1\x01\x38\x68\x8a\x69\x32\x5c\x2d\xff\x2e\xd2\x54\xe8\xb8\x1f\xfc\x93\xa2\xa9\xb1\x58\x21\x9c\x23\xb5\xe3\x8d\x54\x4f\x0f\xf5\xa4\x13\xbb\xa7\x95\x82\xdc\xad\x50\xb0\x32\xe4\x5e\x6f\x89\x39\xac\x6a\xd4\x65\x93\x31\xe9\xc2\xad\x55\xee\x15\x46\x4f\x89\x74\x3a\xc2\xf4\x3e\x2a\x56\xc9\x14\x95\xb9\x22\x09\x3f\x2f\x6d\xcf\xeb\x9c\x46\x19\xe5\x85\xf9\xa7\x52\x49\xe7\xbf\xd5\xaf\x99\x1a\xac\xfa\xc9\x16\x49\xc9\x28\x81\x26\xce\x73\x4e\x82\xa8\x4b\xd0\x9d\x02\xef\x0c\xba\xa2\xcc\x53\xfd\x6b\xe8\xa3\x59\x99\xf8\x59\xee\x41\xff\x2e\x00\x70\x33\xf9\x13\xc3\x39\xb5\x7b\xea\x97\x19\x74\xab\xe0\x49\xab\xd2\x5a\xe8\xb9\x0a\x74\xe5\x53\xcf\xb5\xbd\xb1\xa2\x2d\x88\x8b\x83\x8a\x93\xe1\x07\x83\x33\xe8\xca\x84\x92\x82\x49\xe2\x0c\x55\x9a\xd9\x0f\x3c\x3e\x26\xed\x53\xc0\x7c\x6a\x7b\x83\xf8\x10\xc8\x3d\x20\x18\x03\xa5\x4a\x9b\xd2\x34\x6d\x75\x75\x45\x05\x54\x1c\xff\xa6\x62\xac\xbf\x7c\x7c\x04\xe5\x00\xd8\xb0\x7f\xad\x3e\xbb\xfc\x18\x7c\xbc\xfc\x78\xa5\x6a\x5f\x9e\x5e\xbf\x51\xbe\xfb\xf8\xf1\x57\x3f\x5c\x3d\xd3\xde\x58\x86\x46\x02\xfc\xb0\x82\xca\xaf\x2e\xed\xd2\x43\xbd\xd4\xbd\xa2\x9f\x46\xe9\x55\xb1\x5c\xba\xfa\xbe\xfa\xec\x99\xa2\xbd\x36\x34\x26\xfe\x24\xa1\x09\x54\xa5\xaa\xe8\xa6\x76\x69\x5c\x11\x71\xa8\x32\xb1\x1d\x37\xf4\x95\x6a\x52\x94\x07\xd0\xd1\x1d\x4e\x11\x8c\x22\xa0\x57\x11\x32\xc6\x68\x8d\x48\x27\x2d\x09\x36\x9a\x11\x49\xa1\x6b\x8f\xdf\x07\x41\x00\x06\x5b\xf7\xac\xe2\x5b\xdb\x1b\xb8\x00\x7e\x62\x1a\x5f\x7a\x5b\x05\x43\x60\x87\x87\x71\xda\xba\x80\x4d\xed\x64\x36\xbb\x95\xfc\x6c\x76\xe4\x1c\xca\x69\xd5\x5a\x31\x74\x50\x66\x81\xf2\x5a\xfe\x9d\x15\x49\x2e\x54\x50\xee\x63\xae\xff\x22\xcb\x7a\x0b\x74\x06\xda\xb3\x05\x62\x0e\xba\xd2\x8b\x26\xd7\x20\x35\xa5\x8d\xda\x64\x4d\x7e\x58\x04\x8c\xe8\x78\x8b\xa6\xbe\xc2\x5f\x32\x2d\x0b\x94\xd1\x10\xac\xae\xa6\x9b\x78\x23\x56\x12\x2f\xd2\x31\xae\xae\xae\x20\xd6\x3f\x41\xa1\x92\x69\x2d\x32\x8f\xcb\xb6\xbf\xa8\x12\x51\x6f\x6c\x2e\xd2\xf8\x60\xcd\x51\xf5\x67\x54\x20\x69\xba\x90\x7c\x2a\x28\xdb\x6e\x78\x00\xee\x1f\x1f\x57\x42\x96\xd1\x2b\x3b\x25\xd1\xec\x61\x5a\xa2\x74\xb6\x78\x75\xc5\x88\x8c\xb3\x84\x55\xcd\x34\x13\x9a\xdc\x3a\x22\x76\xee\xd4\xdf\xf1\x06\x7c\x10\xe3\x4c\x43\x26\xe2\xb1\xd2\x12\x05\xb4\xa7\x6b\xdc\x2c\x4a\x44\x7d\x03\xde\xc8\x1e\x81\xc1\xe3\xa3\x68\xf6\x6c\xca\x22\xd6\xb1\x6a\x71\xb7\x65\x31\xf6\xd0\xc5\x37\x5e\x3e\x1b\xdc\x75\x57\x5a\x05\x5f\x7a\xa3\xf9\x4f\xeb\x68\x55\x2e\xd6\x1d\x37\x3c\x5f\x47\x39\x31\x71\xae\xe3\xb8\xc8\x2a\xa0\x7a\x4b\xc4\x8e\x45\x81\xf4\xe2\xf6\x22\x56\xe1\x98\x9e\x27\xe9\x00\x39\x5f\x79\x28\xc4\xac\xc7\x12\x4c\xbe\xc6\x62\xfc\xc5\xf8\xac\x00\x12\x78\xea\x00\xdc\xe3\xb9\xda\x0f\xa1\x8b\x27\x2b\x28\x4f\x40\x68\x1f\x80\x7b\x66\xce\x5a\xc8\xd3\x66\xd3\xad\x9c\x57\xea\x67\x5e\x5a\x99\xb0\xc8\xa9\x43\x35\x63\x60\x86\x79\x5a\xe1\xa2\xc2\xf5\xc9\xe6\x8d\xb6\xc2\x06\xea\x15\x4e\xd4\xbb\xba\x5a\x41\xc5\x48\x56\x61\xd4\x0b\xf2\x8d\xae\xf0\x74\x42\xdf\x28\xb3\x23\xbe\x50\xab\x5a\x32\x3b\x2d\xe2\x29\x95\x86\x3f\x73\x07\x05\xcf\x0f\x0b\xb8\x4c\x61\x62\x7b\x33\xdb\x75\xef\x0b\x83\x19\x28\x84\x7e\xe1\x0e\xf4\x0a\x10\x20\x0e\x14\x53\x3f\x88\x37\x82\xd9\x94\xc3\xd8\x88\xb1\x12\x4e\x82\xb4\x2d\x5c\x6a\x1e\x66\x35\xab\x4b\x5f\xec\xb8\x69\xbf\x12\xa1\x13\x61\xc8\x1e\xa1\xdd\x69\xe1\x0a\x5f\xb8\x98\xcd\x25\x16\xb3\x42\xee\xcd\x09\x8b\x1e\x1c\xa5\xb2\x0e\xa1\x7f\x87\x18\xc6\x4f\xa9\x69\x99\x64\x1d\xed\xe9\xd4\xa5\x36\x7c\x44\xb7\xc5\x88\x97\xca\x46\xaf\x6a\xab\xab\x0a\x0e\x9b\x1e\x0d\x43\xd2\x25\x2e\xc3\xd8\x62\x2c\xb6\x81\x1b\xda\x2a\xd0\xa8\xb5\x7b\x30\xb1\x61\xb8\xeb\xfa\x3e\xdc\x76\x6e\x9d\x01\x20\x76\xcf\x76\x2f\xe0\x9d\x06\xf3\x8f\x69\x3d\xb0\x94\x3f\x38\x56\x8a\x2a\x7c\x6d\x6c\x2a\x5b\x4a\x55\xa9\x2b\x54\xd0\xe7\xf8\xe5\x00\x78\x03\x16\xd5\xa9\x0c\xc1\x14\xd8\xa1\xea\x6b\xa2\x9d\xe6\xe9\x49\x30\xaf\xbe\x62\xda\xe4\x1d\x20\x72\x53\x48\xba\xaf\x25\x38\x30\x69\x51\x3e\x38\xb9\x2c\x0f\xa9\xc8\x72\x81\x06\x61\x07\xb2\x88\xb1\x2b\x34\x65\x3d\x01\x23\x35\xe7\x94\xa1\x45\xe4\x9a\x9f\x04\x71\x31\xbf\x3e\x0d\x84\xef\xe1\xfd\xe3\x93\xc8\xa1\x1a\x8b\x9e\x98\x62\x4b\x7d\xf6\xd1\x7b\x36\x9a\xe8\xca\x47\x88\x86\xdb\x12\x5e\x80\xc2\xb4\x11\x58\x0f\xda\xfd\x31\x08\xc1\x80\xee\x66\x6a\x68\x29\x7f\x70\x59\x31\x8c\x5f\x2b\xc5\xb0\x88\xbf\x9a\xbf\x56\xe2\x4b\x16\x37\x7d\x72\xae\x7e\x0d\x7f\x7a\x2f\x18\x90\x59\x00\xe8\xec\x22\xc9\x7e\x51\xb1\xc7\x47\x55\xa0\x53\x48\x6f\xdd\xb2\xdd\x87\xdf\xc2\xe5\x82\x4d\xdf\xa3\x29\x38\xb3\xd7\x28\xce\xf9\x21\xb3\xba\xa2\x9c\x02\x34\x5f\xe6\x72\x9c\xed\xe3\xa3\x41\xfd\xe8\x32\x6b\x59\xde\x82\xdc\x54\x51\xb8\xc4\x1f\x1f\x8d\x1a\x76\x4e\x00\xaf\x2d\xe3\xf1\x31\x7c\x8d\x2f\x55\x64\xb3\x91\x65\x38\x7d\x7c\x94\xe6\x32\x4d\x98\x66\x46\x99\x69\x19\x32\x29\x75\xbd\x6a\xae\x2c\xb2\xda\xe0\xd4\xa2\x3a\xa4\xab\x88\x93\x3f\xa8\xb9\x81\x9a\xf3\x17\x89\x7c\xca\x71\xc6\x72\xf2\xc8\x45\x9c\x89\xdb\xe6\x57\x1a\xf1\x3c\x3e\x2a\x86\x9c\x73\xa7\x12\xf7\xcd\x85\x06\x86\xcc\x3c\x50\x68\x76\x97\x61\x59\x26\xf7\xc7\x89\x9e\xf1\x26\x59\xf8\x49\xe3\xbe\xef\x82\x4f\xe8\x32\xcc\x38\xf6\x5c\xe3\xc6\xdf\x45\xdb\xe6\x55\xca\x34\x5f\x08\x5e\x6e\x45\x9a\x4e\x6d\x22\x13\x16\x45\x8e\x1d\x99\x5c\x28\x52\xa1\x57\x4e\xe6\x93\x25\x5b\x11\xa4\x4c\xc9\x49\xe1\x24\x3c\x28\x32\xb3\x51\xec\x54\x20\x0a\x7d\x4d\x61\xaa\xda\x13\xe7\x5e\x91\xad\xca\x72\x2e\x3d\xe9\x4e\x19\x86\x03\x30\x55\x15\xd7\xe9\xd1\x3d\xff\xec\x74\xf7\xa5\xa2\xf1\x18\x37\x8f\xb3\x9d\x67\x77\xde\x28\x10\x1f\x93\x23\x37\x8f\x89\xa2\xe9\x29\x09\x61\x29\xc5\x7e\x12\x72\x42\xcc\x98\xf1\x10\x4e\x80\x24\xfa\x98\x5d\x68\x27\x22\x9f\x20\x90\x4c\x06\x8f\xf3\xe6\xe1\x02\x6a\xb2\x15\x3d\x1f\x32\x4e\x8d\x4f\x5e\xbc\x87\xfe\xd0\x11\x4d\x37\x0e\x63\x10\xd2\x52\xe9\x51\x4f\x00\x9d\xce\x82\xeb\xec\xd1\x42\x70\xe4\x6a\xa4\x30\x8d\xc4\xca\x20\x3a\xa6\x1b\xf6\x34\x9c\x41\x30\xf8\x94\x3c\xbd\xa3\xc7\x3a\x0b\x0a\x46\x62\x2d\xd3\xa3\x31\x7a\xa0\xe3\xb8\x3e\xdc\x3b\xf6\x8b\x72\x77\x6c\x3c\x53\xbd\x74\x7c\x3d\xf3\xc4\x02\x3a\xc8\xe9\x70\x32\xe2\x62\xb6\x76\x7a\x0a\xe5\x0d\x08\x63\x28\x12\x03\xc1\xee\x45\xae\x3f\x52\x95\x33\xef\x1a\x0b\xbd\x06\x85\xb8\x34\xc9\x9f\x2c\x87\x2b\x97\x3f\xa7\x40\xfb\xbd\x00\xc0\x5b\x00\x07\x85\xce\x69\x61\xcc\x6a\x20\xf0\xfb\xed\xe3\xa3\x32\x91\xf5\x3b\xc3\xfb\x8c\xf0\x38\xd5\x5c\x2a\xdb\xb7\x34\x38\x38\x22\x4d\x0d\xd6\x34\x98\x18\x4a\x40\x52\xfe\xd2\xb1\xd3\x79\x4d\x4e\xf3\xf8\x13\xb3\x08\x4f\xb6\xb1\x60\x11\xa5\x8b\xa7\x30\x92\x57\xc4\x01\x8b\xd0\xb6\x21\x34\xe9\xe7\xc7\x99\x70\x02\x24\xf3\x35\x9f\xee\x1a\x87\xfe\x25\x39\x53\x1c\xcf\xee\x87\xce\x2d\x28\x34\x8f\x0b\x7e\xef\x33\xe8\x87\x65\xa5\x96\x06\xc4\x25\x4c\x5b\x80\x96\xeb\xfd\x3b\x42\xac\xa8\x7c\x84\x38\xce\xba\x7c\x51\xe0\x78\xc7\x8b\x88\x6a\x3e\xcf\x6e\x38\x11\xc1\x55\x87\xdb\xb4\xf3\x27\x1c\x6e\xcd\xf5\xf2\xdb\xc3\xd4\x92\xb6\x48\x68\x29\x68\x33\x71\x8a\x60\xfb\x99\x80\x9e\x20\xbc\x8a\x4d\x90\x98\x2e\x4a\x0b\x46\x0f\x91\xd8\x0c\xa7\x8d\xd5\xe5\x64\x5f\x68\xb7\x1a\x9f\x68\x18\x3f\x7a\xaa\xc5\xf9\xe4\xf2\x8a\xc5\xd0\x48\x81\x44\x28\xc0\x34\x24\x69\x11\xaa\x20\x88\x5d\x30\x2d\x05\x8e\x7a\x6a\x65\x63\x43\x2f\xb0\xff\x69\x4a\xa2\x6c\xec\x49\x4a\xca\x1a\x7a\x01\xfd\xc7\x4a\xf5\x7c\x37\x96\x45\x0c\x6d\x34\x0b\xd8\x2f\x27\xb4\x5d\xa7\x1f\xfd\xec\x91\x64\xae\xf4\xd7\xcc\x1b\x00\xe8\x3a\x1e\x17\x5e\x38\x84\xce\x18\xa0\x59\x3b\x1b\x5d\xc7\x40\x3c\xec\x96\xc6\xff\xa6\x9c\x12\x7b\x92\x8a\x52\xcc\x87\x23\x66\x1c\x9f\x0b\xb6\xed\xd0\xe6\x22\xf3\xf6\xb9\xa4\xae\xdc\x63\x41\xc2\xd7\xa7\xcc\xd0\xf3\x11\xeb\xb0\x28\x77\x0b\x93\xc0\x58\xae\x60\x3d\xd8\xc2\xc6\xaa\x0b\x2a\x24\xc6\x8e\xf8\x5c\x13\x33\x0d\x6f\x36\x51\x15\xc1\x84\xe4\xea\x72\x73\xc7\x52\xe8\x28\x2a\x8b\x2a\xb4\xf6\xb6\xf0\xf8\xe6\x16\x0c\x44\x49\x33\x04\x0b\x20\x97\x68\x38\xce\x99\x9c\x63\xe0\x6b\x61\x65\x1e\x17\xd6\xaf\xe0\x10\x97\x29\x0d\x5c\x86\x57\x78\x92\x5f\x86\x57\x31\x27\x91\x18\xd5\xcc\x38\x97\xfb\xbe\xd7\xb7\xb1\xd1\x5e\x2e\x7e\xe2\x64\xd0\x7f\x19\x57\xf3\x5f\xea\xb5\xb7\x98\xc6\xfc\x42\xcb\xfa\x96\xf3\x2f\x1d\xba\x11\x4b\xc6\x93\x74\x01\x5d\x99\x71\xa9\x05\x8b\x36\x0a\xdb\x25\x0b\x1b\x93\x19\xea\xcc\x20\xd2\x6b\x7d\x66\xb0\x05\x05\x57\xa2\x91\x62\xdf\xf1\x40\x45\x72\x54\x3c\x4e\x51\x31\xe2\xcb\xb6\x92\x1c\xa5\x28\x0c\x19\x3f\x48\x11\x00\x32\x46\xdc\xcf\x58\x05\x18\x8f\x10\x45\x38\x1a\x9f\xd5\x55\xb4\xb2\x28\xbe\x6c\x7f\xcc\x5f\xb5\x78\xfb\x69\xf8\x5e\x68\x3b\x5e\xea\x06\xc9\x98\x10\x3e\x20\x9a\x30\x91\x4e\x3a\x11\x08\x58\xce\x24\x2d\x98\xda\x9e\x42\x62\xf3\xe1\x4b\xbd\xee\x58\x97\x57\xb5\xd4\x58\xad\x08\x96\x09\xb3\xaf\x62\x56\xb2\x71\x69\x2d\xbd\xc8\xa4\xd5\x85\xe6\xb6\xf1\x43\x0a\x28\xde\xe0\xd9\xdc\xc0\x5f\x55\x88\x4d\x6c\xcf\xa9\x63\x0d\x7a\xc8\xe4\x89\x74\x1a\xa8\x21\x5b\xb9\x51\xf8\x31\x3a\x25\x68\x5d\xea\xc9\x43\x9e\xb2\xca\x74\xa2\xa8\x0e\x4d\x82\x13\x67\xcb\x43\x25\xc8\x6b\xba\x0e\x69\x5e\x0e\x4b\x51\x12\x59\x7f\xb8\xd9\xa5\xfa\x45\x4b\x29\x44\x0f\x14\x3d\xe4\x77\x88\x28\xf6\x60\x72\xf6\x91\x4a\x38\x2b\x0f\x7d\xa6\x60\xf3\xbf\xc4\x3e\x62\x68\xba\x8f\x3b\x12\x82\x79\xb8\x4d\x32\xf4\x3a\xbe\x67\xf9\x9a\x9e\x98\x9c\x51\x3f\x68\x32\x4a\xdc\x09\xb6\xb7\x18\x7a\xc8\x6f\x2c\x26\x33\xce\x48\xcc\x5d\x0e\x06\x7a\xa4\x68\x3a\xff\xf3\x13\x35\xe0\x61\xa5\x11\x78\xf4\x9d\x91\x48\xc7\xc2\xdf\xa4\x31\x23\x82\x10\x67\x64\xe1\x52\xee\x39\x34\xc9\x50\x01\xc7\xde\xc8\x5d\x34\x13\x3b\xec\x5f\x83\x40\xba\x6a\x14\x72\xc1\x52\x2c\x0b\x15\xf7\x87\x05\xf0\xf8\xb8\x66\x59\xc4\x1c\xec\xf4\x7e\x9a\xf4\x13\xe6\x96\x17\x67\x82\x77\xef\x02\x3a\xb0\x2b\x2a\x47\xd4\xc7\x47\x10\x7d\x4b\xae\x7d\x4a\xb9\xe8\xf7\xe3\xa3\x80\x9e\xa8\x3a\xa3\x10\x05\x90\x58\x6a\x64\x55\xd1\x37\x89\x55\x94\x5e\x30\x4c\x95\x25\x5c\x21\xda\x8a\xb5\xb2\x12\x72\x6b\x84\x41\x44\x13\x78\xc5\x02\xf1\x4c\xa6\x2f\xc8\x32\x88\x6b\xe1\xd5\xf1\xf8\xb8\x92\xda\x32\x51\x01\x10\xff\x8c\x0a\x24\xe6\x27\x29\x94\x78\x94\x7f\x72\xc4\x79\xba\x03\x91\xb0\x27\xcb\x5c\x03\x19\x27\x1d\x7e\xe5\x99\x15\x17\x94\x18\x43\xa5\xcf\x2c\xe6\x65\x9c\x3e\xa2\x98\x57\x71\x92\x9b\xf0\x05\x0f\x23\x4f\xf0\xe8\x84\x61\xd6\x50\x19\x98\xa1\x04\x07\x66\x86\x9b\xee\x3e\x6b\x2f\x43\xb0\xcc\x66\xca\xb8\xe5\xc4\xa6\xca\x66\x70\xe2\x9c\xe5\x1f\xb6\xf6\xb6\x30\xb6\x82\x38\x61\xe0\xf5\xcb\x4d\x50\x7c\x59\x05\x4f\xe8\xb6\xa7\xa7\xcf\x4c\xd4\x45\x29\xda\x9a\x9e\x6d\x24\xcd\xcd\x09\x78\x80\x4d\x58\xcd\x70\x34\x97\xe0\x2a\x79\x0c\xa4\x4e\xef\x44\x6c\x77\x0e\xbc\x60\x9c\x36\xc5\xa4\xac\xa6\xaa\xa6\x8f\xcb\x98\xa7\x9a\x38\x73\x35\xd0\x53\x77\xbb\xf2\xda\xda\xda\x9a\xf6\x14\x8a\x3b\xcc\xf3\xa6\x82\x0e\xfb\x82\x0e\x87\x57\xa2\x19\xde\x67\x3b\x63\x70\x88\xb6\xca\xac\x6f\x54\x76\x87\xd4\x22\xc3\x7c\x19\xac\x66\xb4\x4f\x86\x1a\xb1\x24\x63\xdb\x29\xda\x9e\x52\x5b\xeb\x8a\x89\x8a\x88\x36\xdd\x15\x83\xda\x92\x83\x88\xeb\x08\x13\xfb\x6d\x81\xf1\x16\x8c\x96\xab\xab\x59\x76\xc1\x72\xd2\x8f\x50\x29\x8e\x29\x40\x97\xbb\xe8\x17\x7b\x47\x0e\x7d\xfa\x0a\xff\x40\x6f\x52\xa7\xa8\xe5\xa4\x9e\xe4\x11\xb8\x99\xe5\x7a\xa3\x55\xb1\xf0\x18\x12\x00\x8e\x4c\x8c\x85\xab\x2c\x3e\x5d\x36\x01\x7f\xac\xd2\x13\xb5\x9a\x4a\x7f\x95\x48\x01\x28\x69\xac\x8d\x4d\x8f\x33\xe9\xbd\x16\xb6\x48\x73\x3f\xa1\xc2\xd5\x44\x32\x28\xbe\x14\x86\x95\xdb\x70\x52\x46\xfb\x55\x6d\x63\x7d\x71\xaa\x79\x1c\x0f\x7d\x19\x0c\x04\x19\xa9\x24\x69\xc5\x2e\xaf\x74\x68\x19\xba\x6f\x19\x7a\x40\x92\x70\xe1\x18\xd3\x2c\x2e\x0d\xd9\x52\x6c\x0b\xdd\x9b\x06\xe0\xbd\xef\x78\x61\x3d\x54\x3d\x4d\x77\x2d\xfb\xb5\xf5\x7c\x63\x63\x6d\x63\xd3\xac\x56\x6a\xf6\x6b\xb3\xf2\x72\xd3\x2f\x5a\x2e\xc1\x17\xb5\x4b\x86\xc9\xd6\x5e\x5b\xe6\x26\x62\xfc\x5c\xd4\x82\xa9\x55\x55\x1f\xf3\x46\x98\xd1\xfa\x12\x84\xb0\x0a\x18\x75\xa1\xee\x6b\x7a\x44\x96\x6a\xf0\xa4\x61\xa4\xb0\x43\x43\xb6\xb4\xa7\xbb\x9a\x4e\xb8\x95\xea\x8a\xc1\xd5\x5b\x31\x9f\x10\xdf\xef\x15\x5d\xd4\x2f\x4d\xf7\x8a\x96\xcb\x92\x3d\xfa\xab\xab\xcb\x36\x1d\x8a\xc5\x7a\x3a\xfe\x31\xa4\x9f\x67\xa7\xbb\x2f\xd1\x5a\x1a\x00\xa8\xe8\xc4\xf5\xa5\xdc\x39\x2d\x37\x98\x76\xf7\xd0\x9e\x62\xb9\x4b\xe7\x54\xae\x35\xb1\x80\x1e\x5b\x71\xe0\x37\xb1\x20\x3a\x9b\xca\x1f\x17\xe0\xac\x62\x49\x0d\xa1\x45\x2c\xd5\x4b\xd9\x30\x00\xed\xd0\x0e\xc1\x27\x2a\x2f\xe9\x9c\x96\xdf\x47\x0f\xd5\xb8\xd0\x99\x37\xf6\xfc\x3b\x8f\x65\xab\x75\x81\x3d\x70\xbc\xd1\xa1\x3f\x70\x86\x0e\x80\x9f\x2c\x85\x69\x43\xa1\xed\xb8\xc2\x37\xb6\xeb\xfa\x77\xc4\x0a\x14\x0f\x3f\xb1\x34\xe1\x2c\x20\xfd\xa0\x7f\xea\x4c\xc0\x3b\x67\xe2\x84\x9f\xac\x0a\x58\xa7\xc2\x85\x70\xc8\xc8\x48\x90\x74\x78\xca\xf2\x07\xfc\xcb\x2d\x07\xcf\x7e\xe8\xbb\x11\x50\xf2\x26\x32\x71\x38\x87\x4e\x18\x0b\xf2\xc8\xcb\x6d\xd0\x37\x2b\x51\x85\x48\xf9\xbe\xe3\xf5\x7d\xd4\x47\x4b\x99\x85\xc3\xd2\x4b\xda\x8b\x89\x3d\x27\x8b\x06\xc7\x65\xf3\xfa\xc0\x32\x8d\x0a\xc5\xf4\xce\x86\xde\x99\xe7\x4c\xa6\xe4\x9e\xc9\x19\x48\xf6\xb9\x31\x0f\x62\x4a\xf3\x53\x21\x20\x25\xf7\x0c\x32\x68\x7b\x26\xfd\xac\xd0\xcf\x35\x2b\x0b\xa9\x3c\x02\xe1\xa1\x3d\x55\x95\x2d\x76\x8f\xdb\x7b\x67\x29\x7b\x4c\x33\xbd\xd7\xe2\x7e\x90\xce\xb4\xef\x83\x10\x4c\xce\xc2\xe1\xcb\x98\xee\xfc\x9b\x77\x7e\x7f\x0c\x06\xdc\xbb\xbe\xf9\xde\x0e\x43\x00\x3d\x3e\x0f\xd9\x6c\x3a\xc0\xa2\x43\x5a\x13\xcf\x9f\x48\x6c\x62\xdf\x82\x41\x7a\x4a\x11\xcd\x77\x3c\xa7\xf0\xc6\xd4\x39\xe5\x18\x52\xe1\x24\x45\xbb\x4f\x4e\xb1\xc6\xbb\x66\xe3\xc0\x32\xf3\x41\xb5\xea\x7b\xd6\x9a\x9e\x9a\xd8\x79\xdc\x36\x7d\xc3\x78\xed\xde\x6c\x68\x85\xe4\x4a\x43\xd7\x8c\x1f\x58\x74\x58\x11\x14\x56\xce\x86\xa3\xc0\xba\xbc\x7a\x4a\x37\x25\x17\x04\xb2\xb5\x8e\x1f\xe3\x0a\xbb\x11\x2b\xce\x89\x8f\xb7\x66\x43\x15\x3c\x3e\x46\x51\x6e\xf0\xc3\x3a\x1c\x61\xd1\x06\xe5\xf3\x73\x5b\x4c\x80\xce\xca\x21\x51\x1f\x44\x04\x58\x08\x77\x6b\x36\xcc\x76\x06\x91\x2b\x7b\xfc\x6f\x82\x6a\x8a\x80\x0b\xa1\x47\x3d\xcc\xb6\x81\x48\x1d\xa9\xe9\x49\x32\x20\x63\x05\x9b\x98\xa9\xd1\xfb\x4b\xe3\xca\x02\xb9\xb4\x71\x6c\x38\x92\x87\x2b\xc7\x30\x00\x4e\x6a\x14\x65\x32\x8d\xcc\xf3\xa1\x6e\x1a\x91\xc2\xd9\xb0\x2c\x67\x75\x55\x75\xac\x50\xd3\x1d\x76\x96\x84\x79\x2d\xdb\x83\x5b\xdb\xeb\x0b\x74\xe5\x53\x3f\x28\x12\x61\xb7\xac\xea\x14\x80\x71\x0b\x4c\x6c\xc7\x73\xbc\x51\x62\x00\x92\x22\xc7\xde\x6c\x18\x31\x2a\x14\x72\x2e\x31\x10\x5c\xb4\x1b\x7d\x05\x3c\xdd\xcc\x85\xd8\xf7\xbd\x60\x36\x01\x5f\x09\xb4\x58\x5c\x00\xd6\x09\x1a\x3e\xda\x60\x85\xbe\xb5\x9c\x0c\xb2\x37\x1b\xb2\xab\xff\x6c\x48\x27\x0b\x4d\x40\x35\xf5\x03\xda\x02\xb7\x2d\x65\x07\xe3\x36\xd6\xbc\xa1\x3d\x2d\x5a\x68\x5c\x25\xfe\x42\x6d\xdf\x0a\x64\xce\x24\x14\x0c\x03\x17\x9d\xea\xc9\xa4\x17\xf4\xc0\x4f\x68\x03\xb3\x55\x46\x20\x4c\xe9\x32\x34\x96\xe1\x25\xda\xfa\xa3\x5a\x7b\xef\xa2\x13\x20\x7e\xd6\x4a\x9e\x30\xf8\x19\xdd\xc8\xd8\x69\x83\x9f\xd1\xad\x9f\x9d\x3c\xf8\x59\x45\x4f\x9c\x42\xf8\xd9\x5a\x2e\x41\x68\x0c\xc0\x0c\x4d\x12\x9d\x4a\x05\x0a\x8c\x69\x46\xfb\x94\x24\x5a\x86\x02\x02\xca\x31\x9a\x70\x00\x18\x61\x18\x51\x08\x31\xe8\xb3\x16\xf7\x8c\x1d\xbd\x06\xf7\x8c\x1d\xc3\x26\xf7\x8c\x1d\xc9\x15\xee\xd9\x1a\x3b\xa6\x33\x27\x9b\x58\xfd\xc3\x1a\x5b\x74\x9e\x9b\x79\xc5\x8c\xa8\x58\x65\x39\x68\x3f\x95\x89\x58\xee\x70\xff\x1a\x3e\x34\x43\xae\x34\x7f\x2b\x54\x0c\x64\x3d\xbf\x84\xc0\xa9\x6d\x2f\xba\xc6\xd4\x12\xae\x12\xf0\xd1\x5a\xd7\x74\x35\x72\x93\xa0\x5b\x45\x34\xd5\x62\x7b\x75\x37\x6c\x06\x87\x20\xb4\x57\x57\x99\x2b\x90\x46\xea\xbf\xd4\xf4\xc8\xe1\x82\x3c\x31\x9f\x33\xd1\x38\xe1\x10\xcb\x43\xe8\x4f\xd0\xfe\xd7\xc0\x09\xea\xe3\xac\x11\x29\x9f\xa8\xe2\x5a\x45\x5f\xab\xe8\x95\x8d\x0d\x0d\x5d\x6a\x96\xad\xdc\xf2\xef\xf8\x9a\x51\x5c\x33\x6a\x2c\x8f\xbd\xf9\x88\x05\x7d\xd5\xb3\x5e\x3d\x2f\xaa\x25\xf3\x7b\x9c\xc0\x26\xb4\x2f\xde\x18\x9b\x46\xd5\xd4\x74\xef\xd1\x82\x3a\x36\x52\x3e\x54\x8a\xa2\x86\x3d\xad\xe8\x17\x03\x81\x3d\x3b\x17\xa0\x8c\x73\xf2\xa8\x12\xdf\xe0\x38\x85\x11\xf5\x9a\xd0\x2b\x5a\x71\xad\x52\x5b\xb2\xb9\x0c\xec\xd9\x54\xa9\x92\x6a\x7f\xa8\x08\x0b\x60\x07\x89\x6a\x66\xda\x89\xa6\x46\xab\xbe\x87\xc6\x92\xe0\x15\xac\xae\xaa\x9e\xb5\x56\xd1\xcd\xf8\xd1\xa6\x57\xb4\x8c\xea\x7a\xf2\x81\x59\xad\x24\x1f\x54\xaa\x5e\xd1\x5a\x43\xf7\xc7\xb5\xca\xb2\x64\x4c\x10\x8d\xf8\xf2\x54\xf1\xf7\xc8\xd5\x28\xe5\x76\xc9\x8c\xab\x00\x84\x3e\x54\x15\x7a\x07\x2b\xe0\x2e\x16\xf0\x78\x60\xc3\x2d\x3c\xe2\x3a\xd0\x9e\x98\x58\x33\x9a\xc7\x19\x1b\xf3\xcc\x72\x8b\x8c\x72\x32\x42\x80\xf4\x05\x31\xe6\x46\x29\xb7\xc8\x9c\x80\x6b\x2b\x99\xa2\xf1\x29\xad\x6a\xb5\x44\x0c\x5f\xbe\x14\x6a\x91\x09\x47\xf9\xe7\x88\xb9\x00\xd9\xc7\xbd\xd9\x30\x92\x21\xa7\xc1\x94\xfb\xb6\xeb\x92\x88\x15\xe9\xf7\x5a\xe6\x09\xe1\x79\x2d\x46\xad\x54\xd3\x96\x05\x05\x2f\x10\x5f\x6b\x01\x6a\x03\x85\x39\x13\x58\x18\x38\xc4\xb7\x08\xc7\x1c\x2e\x84\xd7\xa0\x10\xa0\xc2\x2b\x4a\x96\xcc\x84\x5a\x22\x51\x19\xb9\x5c\x5a\x96\xf8\xf2\xb9\xc9\xd1\x9a\x9a\x14\x55\x41\x06\x7a\x6c\x72\x24\x12\x9e\xa5\x4c\x92\x24\xb8\xc9\x6a\x67\xee\xe0\xf1\xc8\x67\x20\x05\x20\x8c\x6e\xcd\x3c\xa8\x38\xe4\x62\x7a\x66\xa3\x2b\xb3\xfa\x1d\xcd\xc9\x5f\xb8\xb5\xdd\x19\x28\x0c\x7d\x58\x50\xd8\x14\x2e\x01\x0a\x50\xa9\x16\xbe\x2b\x02\x8d\x2c\x1e\x27\xf0\x4b\x15\xa3\x52\x51\xaa\xdf\x74\xb7\xe5\xd7\x21\xa6\x7f\x09\x7b\x3b\x0d\xe4\xe0\x8c\x1c\x70\x46\x06\xdc\xb7\xc1\x31\x9f\x72\x2e\xd7\x19\x5a\x8b\x8a\x65\x75\x39\xc7\xc4\x16\x6f\x0c\xee\x03\x95\x1c\xd6\x0d\x53\x2b\x0f\x1d\x34\x63\x55\x60\xbd\x59\x11\x23\xfa\xf8\x08\xf0\x5c\x44\x9b\x57\x3d\x54\xb5\xd7\x66\xe5\xa5\x56\x9e\xd8\x53\x54\x47\xf9\xf8\x71\xae\x14\xd1\x91\xf4\x30\xb5\x07\x6a\xb2\x64\x39\xf4\xe9\x6e\x63\x3e\xd7\xf4\x8a\xa6\x51\xe5\x26\x73\x9a\x4a\x08\x14\xc0\x5d\xa1\x05\x46\x3b\xf3\xa9\xfa\xc3\xe5\x2f\xbe\x80\xa7\xab\x1f\xb2\xfd\x4c\x48\x9f\x92\x9b\x14\xfd\x5e\x08\xd1\xaf\x15\x98\xed\xc6\xea\x2a\xbc\x84\xe5\xbd\x77\x57\xe5\xbd\x77\x58\x17\x13\xff\xc4\xda\x1a\x18\xef\x94\xd8\x02\x10\xcd\xe9\xf8\x0e\xa8\x3b\x56\xf6\xc2\x45\xf2\xf5\x31\x6f\xfb\x74\x97\xf8\x4b\xa1\xcf\xfc\x85\x9d\x60\x6a\xa3\xe9\xaf\x34\x1a\xa6\xa2\x3b\xec\xca\x63\xe8\xa6\xa6\x03\x9a\xcc\x36\xba\x14\xaa\xa6\xa6\x55\x4b\x26\xa9\xae\x3a\xd1\x6b\xbc\xf9\xaa\xd8\x2f\x41\xe5\x40\xf8\x51\x32\x34\x49\x2b\xbe\xb8\x15\xbf\x48\x73\xd9\x64\x69\xdd\x68\x37\xc5\xfe\x51\xec\x8e\x88\xf3\xf4\x01\x7c\x43\xae\x85\x6f\x2c\xe5\x97\xca\xea\x6a\xf8\xda\x52\x7e\xad\x64\x7b\xdc\x6e\x2a\x62\x81\x21\xd5\x9f\xa7\xa5\x85\xc5\x10\x21\x2b\x12\x5c\xa0\xbe\x2b\x35\xb4\x51\x6e\x8a\xab\x6e\x8a\x6b\x55\x55\x48\xaf\x7f\x8f\x8f\x90\xaa\xf0\x15\x34\xf4\xec\xab\x56\x45\x9d\x30\x68\x27\x5e\x29\x5f\x09\x9e\x41\xdf\x44\x73\x8b\x25\x84\xbf\x2a\x5a\x61\x15\x5e\x1a\x57\x56\x88\xa1\x17\x28\xf4\x4d\x65\x75\x55\xa9\x2a\x2b\x56\xb8\x19\xd5\x93\x10\x02\xd5\x14\x12\x8e\xbd\xe0\xa6\x5d\x39\x04\x41\xa8\x86\xda\xa6\x68\x2a\x20\x8a\x56\xc5\xc8\xeb\xfc\xb4\x93\xad\xbc\xd0\x71\x69\x64\x14\xb2\x56\xc2\x44\x58\xdf\xd4\xfc\x48\x2d\x15\x6c\x61\x43\x23\x58\xa8\x1f\xe7\x66\xef\xe3\xc7\xc7\x8f\x73\xe3\x85\xf6\x4c\xc3\xab\x0b\xcf\x21\x67\xa8\x3a\xd1\x10\xa9\x0e\xa2\x9a\xa2\xe8\xce\xa5\x79\x85\x77\x88\x6d\x3b\x04\x9a\x8e\x96\x04\xd4\xbe\xa0\xb7\x45\x2b\x24\x7c\x76\x14\x49\xe6\xd2\xb8\x62\x71\x33\x42\xa1\x90\x76\x75\x55\xf5\x2d\x25\xf4\xfd\x82\xeb\x13\x6b\x77\xae\x0e\x02\xbe\x62\xe1\x07\x8e\x37\x00\xf3\xe3\xa1\xaa\xfc\x01\x8e\x33\xec\x5b\x0a\x98\xf4\xc0\x60\x00\x06\x05\x10\xf4\xed\x29\x88\xaa\xf2\x25\x35\x9d\xe1\x59\x42\x58\x13\x1c\x12\xd2\x6c\xda\x3e\x71\xe5\x29\x80\xf9\xd4\x81\x60\x80\x60\x25\x2a\x6a\xba\xbf\xa9\x26\x0c\xea\x73\x86\xa0\x5a\xb0\x7b\x3e\x0c\xa9\xf1\xbe\xaf\x23\xac\xa2\x95\xa3\x92\x5f\x58\xa5\x12\x8f\x71\x18\x75\x78\xc5\xd0\x9e\xb2\xc4\x2b\x42\x09\xf9\x36\x55\x1e\x6e\x31\xa4\x90\xe9\x60\xc4\xbb\x11\x94\x2d\x5d\x6e\xa2\xc1\x22\xa2\x99\x15\x57\x83\xba\xa9\x6d\x56\xaa\xa6\x46\xd0\xca\x70\x27\x74\x36\x67\x94\x65\x44\x26\x87\x4a\x5f\x82\xab\xcb\xf0\xaa\xe6\x6c\x3a\x2b\xf8\x77\xd9\x19\x79\x3e\x04\x9b\x78\xfe\x13\xd7\xd3\x37\xca\x5f\x53\x98\x52\x3c\xa3\x2c\xd8\x4c\x70\x23\x4a\x13\xd5\x76\xbc\x51\xe1\x65\xa9\xe7\x84\x85\x3e\x29\x54\x40\x4c\x4f\xb5\x60\xcc\x95\x62\xc8\x9f\x78\x46\xf2\xc8\xd3\xaa\x0e\x76\x72\x26\xb1\x7f\xf4\x4b\xa8\x87\x57\x34\x54\x68\x46\x3d\xb0\xba\x2a\x68\x18\x0c\x10\x4b\x5f\x54\x68\x7b\x19\xc7\x89\x50\x5b\x16\x1c\xbb\x2e\x2c\x02\x27\x62\xe3\xea\x47\xed\x66\x2a\x15\x87\x1e\x6a\x5f\xd6\x2d\x96\x67\x83\x97\xca\xc4\x69\x50\xd4\x50\xab\x56\x0c\x61\xa1\x6c\x82\x13\x35\x5c\xbe\x27\xdc\xcb\x02\xc2\xad\x70\x48\xbb\x23\xe6\x42\xb7\x77\x1a\x02\xec\x29\x1b\x1a\x47\x59\xd1\x4d\x43\xa3\x61\xc0\xcd\xaa\x4c\x02\x90\xf6\x58\xb7\x42\x3e\x38\xf7\x1a\xa9\x27\x53\x6e\x31\x91\x34\x4f\x09\xa2\xfc\x0c\x37\xcd\xb5\x4a\xf5\xa5\xa1\x25\xdd\x85\xb8\x44\xcd\xe9\x37\x41\x9c\xee\xad\x05\x46\xa8\x57\x58\xa6\x8e\x4d\x9a\xf9\xab\x65\x61\xa3\x9a\xa9\xc8\x27\xba\x52\xc3\x44\xe9\xe7\xd9\xd2\x71\xfa\x9c\x54\xd9\x17\xd9\xb2\x71\x7e\x97\x54\x59\xb3\x52\xe5\x96\x1b\x56\xb2\xa5\xaf\xa7\xc9\x34\x1f\xa9\xfa\x15\x41\x37\x92\xe9\x34\x92\xe5\xd7\x8c\x6c\xf9\x8c\x73\x63\xb2\xca\x7a\xba\x8a\x54\x47\x99\x18\xf3\x75\x39\x81\xa5\xd4\x78\x9e\x26\x5d\x34\xc1\x7a\x76\x7f\x8c\x13\xf0\xb6\x81\x37\x08\xb6\xd8\xaf\x64\x93\x26\x58\xcb\x8a\x37\x28\x27\x94\xd5\x89\x55\xe5\x22\xb1\xf4\x9c\xba\xf7\xfa\x58\xce\x86\x6d\x42\xd4\xe4\x00\x1a\x46\x65\xb9\x46\xb7\x5b\xf5\xbd\x9f\xab\x4d\x33\x33\x8c\x34\xb8\xd9\xf1\x2c\x9c\xce\xc2\x14\x59\x0c\x33\xbd\x70\x33\xb1\xd0\xd2\x35\xd6\xd2\x13\x3e\x1a\x89\x09\x08\x6d\x3c\x08\x3b\xf8\xac\xcf\x54\x7c\x55\x0d\x37\x25\x55\x99\x7b\x59\xdd\x0d\x31\x84\xf3\x6b\x3b\xfc\xc4\x2c\x15\x97\x2c\x6e\xc9\x65\x90\x51\x21\x7d\x89\x32\x96\x42\x78\x15\x45\x93\x75\x54\xd8\x7c\x66\xab\x12\x03\xff\x1a\x90\x32\x6c\xc5\xdd\x27\xbe\x19\xfc\x3a\x7b\x51\xa5\xa4\x5f\x17\x6c\x3c\x89\x94\x51\xe9\xbd\xc7\x58\x7f\x59\x4d\x4b\xac\xa9\x1a\x27\x2a\x81\x86\x53\x95\x14\xca\x6e\xbd\xe9\xe6\x44\xdb\xb6\x1a\xf9\x8d\x2f\xae\xc9\xb7\x49\xd5\x20\x6a\x72\x1b\xaf\x18\xc6\x7a\xb6\xdb\x5b\x89\x18\x13\x71\xbf\xa3\xac\x0b\xdf\x70\xa2\x6e\xef\x34\x0a\xef\xa1\x73\x6b\x87\x80\x3f\x58\xe9\xc9\x4a\xb8\x29\x5e\xb6\xc0\x14\x3f\x0d\xd3\x62\xdf\x77\xda\x8d\xe8\x7b\xa3\xdd\x8c\xbe\x1f\x73\xcf\x3b\xa7\x1b\x15\x8b\xab\x7c\xa9\x7c\x34\x94\x2b\x9e\x65\xe3\x5e\xfd\x7b\xd2\x37\x7f\x45\xb9\x92\xfa\xcb\x46\xb9\x05\x63\x75\x1d\x6e\xa7\x97\x57\x27\x4e\x5a\x1a\x5f\x83\x48\xb5\x30\xaf\xda\xd0\x87\x77\x36\x1c\x9c\xda\xbd\x76\xe8\x4f\x53\x0d\x7a\x0b\x6a\x4e\x76\x01\x18\xa4\xea\xdc\xb2\x2e\x47\x20\xf8\xb7\xc3\xdc\xb7\x30\xaf\xbd\x74\x4e\x4c\x23\xd1\xee\xbf\x2f\xa8\x8a\x55\x40\xa6\xc2\x17\xfb\x0f\x64\xc5\x8c\x44\xb1\xff\x50\x3a\x6e\xff\x91\xf4\xcd\x5f\xe5\x41\x03\xed\x0b\x6a\xda\x62\x4a\x3b\xb6\x2f\xd1\xb6\xa4\x57\x8c\x64\x97\x89\x3c\x47\xd9\x54\x12\x5d\xfd\x8f\x13\x34\xfc\xab\x09\x12\xfe\x41\x0a\x89\xa4\x78\x89\x59\x6e\x72\x6a\x6d\x55\xab\x29\x7f\xa0\xac\x58\x30\x8a\xce\x13\x5d\xbc\x77\xda\x0d\x45\x87\x44\x94\x11\x09\x9b\x25\x52\x8d\x27\x5a\x24\xe4\x11\xfd\x6b\x52\x5a\xfd\xe6\x6f\xb0\x57\x3b\xed\x46\x79\x5b\x3e\xe8\xae\xe3\x81\xec\x24\xfb\xcd\xdf\xe4\xab\xef\x7c\xcd\x9c\x49\xef\x78\x71\x72\xe4\xe4\xaa\xf9\xcd\x7f\xca\x37\xf1\x36\xb7\x09\xb6\x78\x92\x2f\x52\x29\xc6\x55\x2d\x09\xff\xef\xf0\xf0\x0f\x73\xf6\x02\xc2\x93\xbd\x13\x13\xe2\xef\xf2\x50\x8e\x64\xd4\xfe\x2f\xf8\x52\xc7\xb2\x52\x7f\x8f\x2f\xf5\x3e\x99\x02\x3a\x63\xb0\xc3\xe6\x44\xac\x63\x10\xdf\xf0\x13\xd8\xfe\x03\xbe\x85\x8e\x0c\x8f\x7f\xc8\x97\x3a\x97\x95\xfa\x47\x7c\xa9\x0f\xb2\x52\xff\x35\x5f\xaa\x2b\xa7\x72\x52\xc7\xa4\xfc\xc1\xe5\xa6\x59\xab\xf4\x93\xeb\xee\x37\xff\x0d\x07\xec\x52\xb9\x4c\x2d\x35\x01\x8d\x84\xb2\xaf\x7c\x2b\xc3\x0c\x59\x1b\xed\x66\x92\x88\x7f\x92\xc0\xe2\xe3\x47\xf9\x22\xfb\x6f\x13\x25\xaf\x72\xb7\x86\x84\x4e\x4a\x3c\x94\x2a\xd0\xd0\xfa\x47\xf5\x56\xac\x30\xde\x4d\xa8\xa5\x12\xf1\xeb\x51\x9f\xfd\x4a\xfd\x38\x28\x6a\x35\xb5\xfc\xbd\xf6\x8b\x67\x5a\x0d\x6e\xaa\x51\x11\x0b\x5e\x56\xae\xd2\xa2\xde\x63\xbc\xcd\x5c\x9a\x57\x3a\xd0\xb4\x6a\x4a\x98\x40\x75\x2a\xc7\xed\x86\x28\xfc\x02\x83\xab\x69\x4f\x4f\x39\x53\x34\x41\xbe\xff\x2e\x41\x94\x5f\x2d\x1e\xc4\x6f\x99\xe8\xff\x98\x9f\x76\x9f\x7e\xde\x16\x30\xde\x85\x0c\xde\x18\x84\x48\xa2\x99\xdc\xec\xbf\x85\xb3\x0a\xa8\x04\xad\x5a\xd8\x69\x37\x0a\xc6\xbc\x62\x14\x94\x62\x28\x3b\xc3\x9e\x78\x3c\xff\x70\x31\x9e\xca\x4b\x1c\x4c\x2e\x81\x66\xfa\x8e\x3d\x74\x5c\x57\x55\x76\xa4\xe7\x66\xa2\xcd\x3f\xfa\x56\xda\xb0\x35\x20\x50\x6c\x51\xef\x07\xe5\x99\x42\x4f\xc1\x44\xcd\x84\x7e\x23\x85\x1a\x33\x69\x08\xa9\x35\xc3\x2f\xa9\x5e\x8d\x53\x33\xaa\xb1\x2a\x30\xa1\x5d\xdf\x13\x15\x25\xba\xb9\x44\xb9\x67\x4a\x95\x35\x92\xee\x13\x6d\x74\x8f\xea\xe8\xdf\xd2\xcf\xa6\x14\x32\x53\x22\x7e\x2b\x47\x4e\xa4\x75\x68\x9e\xfc\x51\xe1\x59\xc1\xa6\xb3\x5c\x22\xb3\xfb\xe9\x4d\x2c\x68\x60\x89\xd9\xa2\x26\xf6\x03\x2d\xf1\xeb\xfb\xc4\xaf\x62\xe2\x57\x29\xf1\xab\x9c\xf8\xf5\x2c\x31\x03\xf5\x50\x3a\x07\xb3\xcc\x98\x33\x24\x92\x65\xa8\x45\x7e\x14\x42\x46\x91\xce\x38\x04\x50\x4d\xe4\x47\x14\x9a\x45\x41\xad\x16\x59\x98\x3a\x9b\x8a\x1a\x6b\xa0\xf6\x0c\xcb\xa9\x2a\x1a\x7a\xf0\xf8\xa8\x94\xb8\x17\x26\x7a\xf1\x3d\x7d\x51\xe6\x5e\x54\xd0\x8b\xa2\xb2\x82\x16\x82\xf2\x0c\x7d\x32\x19\xc1\xde\x9a\xe5\x2c\x16\x87\xba\xfe\x28\xd6\x96\x47\xe8\x16\x02\x10\x12\xad\xf9\x77\xc5\xb0\xf8\x1d\xd6\x94\x4b\x45\xf1\xfc\x08\x3e\x17\x9c\x7f\xe8\xf9\x8b\x2c\xa7\x9f\xbd\x22\x73\x70\x5e\xe6\x97\x8f\xae\xb7\x5c\x95\x57\x92\xa6\x15\x2b\xef\x22\x23\x92\xca\x1e\x80\xfb\xa9\x3d\xa0\x01\x02\x18\x94\x37\xdf\x0a\xc5\x8c\xa1\x94\x77\x85\x28\x96\xfb\x19\xc8\x54\x39\xab\xa7\xd9\x4f\xfc\x94\x03\xe8\xc6\x27\xdb\x44\x0c\x3b\x6b\x9f\x8d\xaf\x3d\x15\x85\x83\xe2\x8b\xcb\xac\x29\x3c\x01\x1e\x45\xb7\xb5\x56\xa6\xd8\x93\xac\x58\x25\x51\xec\xd7\xb2\x62\xd1\x15\xf1\xb8\xdd\x40\x5c\x8a\xd4\x91\x85\x08\xbe\xbd\x81\x7f\x77\xea\x84\x2e\xe0\x18\x10\x0e\x40\x85\x4e\x0a\x02\x2c\x7e\xbe\x7e\x25\x71\x51\x8a\x39\x28\x1a\xcd\xbe\x86\xdd\xfa\x23\x09\x3f\xd3\x78\x3d\xab\x68\xcc\x47\x34\xdf\xa0\x96\xf3\x30\xd4\x03\xeb\xf2\x8a\x3a\x3d\xc1\x5a\xb1\xe8\x31\x87\xa7\x18\xfa\x65\xe5\x7b\xef\x4a\xd3\x5d\x0b\x7f\x2b\x9a\x57\x35\xfb\x8d\xe5\xc7\xba\x4c\x65\x53\x59\xb1\xdc\x4d\xd5\x8d\x9d\x23\xe7\xa6\x79\xea\x37\xda\x6d\xd5\xd5\xb0\x86\xf1\xd2\xbe\xb2\x5c\xad\xca\x17\x81\xa3\xde\xa9\xff\xc1\x34\xf1\x4b\x54\x2a\x20\xba\x6a\xbb\xa8\xd4\x94\xa2\xab\x69\x4f\x41\x32\x55\xb9\x94\x15\xbf\x5a\xaf\x29\xc5\x80\x5a\x60\xd4\x14\xad\xa8\xfc\x15\x85\xa7\xf7\xab\x24\x5d\xa3\x7c\xfd\x5f\x7a\xfe\xe0\xbe\x1a\x11\xf7\x89\xaf\x63\xa6\x46\x59\x3e\x10\x98\x29\x60\x9b\x75\x96\x00\x21\x31\xc8\x54\x35\xad\x06\x05\x8a\x81\xd8\xf3\x14\x3b\x39\xe2\x88\xbd\x4c\xc9\x6b\x90\xc8\xec\x94\x33\x0e\xe3\x0e\x72\x68\x9a\x57\x09\x3d\x1c\xc0\x9c\x6e\xe2\xfd\xef\xa5\x1b\x5b\x49\x5f\x4d\x15\x26\xb0\xd8\x58\x40\x4c\x7a\x2f\x68\xc4\x69\x5f\x2d\xb5\xac\x3d\x73\x28\x52\x8c\x75\xb9\x34\x59\xfa\x06\x53\x91\x29\x4d\x70\x6d\x35\x27\xdb\x6d\x82\x2f\xaa\x7c\x1b\x9c\x28\x27\xad\x90\x07\xfa\x5a\xa4\x70\x32\x5f\x92\xa9\x3b\xc9\xc8\xf0\x61\xbd\x61\x00\xd0\x1d\xa7\xb0\x61\x20\x8e\x26\x20\x06\x91\x82\xbd\x65\xa3\xb2\x14\xa9\x7f\x75\xd9\x9f\x06\x86\x59\x59\x5b\xdf\x78\xfe\xe2\xea\x7b\x7c\x17\x7b\x96\x9c\x03\x34\x09\x89\x1d\xfa\x3d\x42\xfa\xec\xc0\x8b\xd3\xc9\x90\xdb\x1b\xb1\x9e\x83\xc9\xe9\xf8\xe2\xc5\x0b\x01\x7a\xb1\x4d\x6f\x66\x5a\x26\x92\x76\x90\x65\x4b\xac\x6f\xa1\xee\xd4\x54\x61\xc7\x7e\x55\xbb\x2a\xd6\x54\xf4\xf1\xbd\xa6\xd6\xd4\xcb\x8f\xc1\xc7\xf6\xd5\xf7\x9a\xb6\xf9\x8b\x67\x78\x2f\x82\x16\xea\x8d\xee\x58\xe1\xe5\xda\x95\xa6\xc7\xbb\x01\x4e\x4d\x5d\x85\x3a\xde\x15\x9c\xa7\xf4\xd8\x8a\x99\xcc\x19\x9c\xdf\x86\x85\x89\x3f\x98\xb9\x20\x35\x28\xb1\x98\xf8\x52\xf9\xa5\x92\x77\x68\x38\x58\xb3\xdc\x9e\xda\x7d\x74\x62\x38\x36\x1c\x61\xb3\x29\x2d\x86\x50\xae\xe7\x54\x27\xb3\xe9\x6c\x2a\xab\xbb\xb5\xb0\x2e\x16\x6f\x49\x6a\x37\x16\xd6\xc6\xe1\xed\x65\xd5\xb7\x17\x56\xc7\x12\x69\x49\xed\x9d\xaf\x47\x3d\xab\xd3\x90\x08\x85\xdb\xcd\xf2\xee\xd7\x52\xf5\x6b\x80\xef\xe5\xb3\x09\x89\x8a\x5c\x1b\x25\x93\x07\xf2\x76\x19\x20\x2c\xd8\x71\x12\x8c\x4e\x7f\x99\x19\xa0\x4d\xe1\x16\x11\x55\xad\x91\x50\xd4\xc4\x12\x3f\xd4\xcd\x74\xa7\xd3\x69\x55\x6a\x71\xa0\x4a\xa3\x06\x5f\x87\x35\x58\x2c\x6a\xcb\x29\x11\xda\xcd\xf2\xbe\x15\x2f\x93\xcd\xfd\xcc\xbd\x28\x25\x43\x42\x9b\x90\xb1\x62\xc1\x4d\xd3\xb2\x60\x4a\x4d\x09\xa0\x1d\x80\x7a\xcf\x47\x6c\x7b\xb5\x92\x7d\x4f\x95\x57\xd5\xb5\xd8\xf6\x39\xf3\x4e\x00\x71\x0b\xb8\xfe\x5d\x02\xe5\x03\x1e\xe5\x83\x9f\x8c\xf2\xa9\x8f\x97\x00\xc1\x39\x8d\x18\x2e\xf1\xce\xf1\x80\x18\xb9\x53\x9f\xac\x3e\x1e\xbd\x77\x0b\xb7\x1a\x04\x2f\x90\xad\xb9\xc3\x9c\xea\x24\x64\x73\x6e\xf5\xf7\x0b\xab\xa3\x8b\xac\xb4\x7a\x3b\xa7\xfa\x2d\xb5\x74\x90\x6f\x75\xa7\x29\xb9\x0e\xe7\x43\xf9\xda\x32\xd3\xb4\x65\xf0\x72\xb6\xbf\x4b\xe5\xcd\xa9\x50\x7e\xda\x6e\x96\x3f\xe4\xa0\x9a\x18\x1c\x09\xb2\xdd\xdf\xfb\x32\xec\xd9\xfd\xb1\x64\x1d\x5e\x2a\x3f\x44\x5a\x23\xb4\x79\xc5\x68\xda\x5f\xb1\x8f\x2d\x50\x70\x14\x25\x94\xe8\x89\x09\xdc\x17\x8c\xe6\xa5\x71\x85\x97\x53\xf4\x2b\xed\xd4\xb4\x48\x50\x8f\xc7\xb4\x9f\x7f\x1e\xa7\x41\xbc\x31\x6a\x95\x8d\xe7\x35\x23\x01\xa6\x2c\x48\x4a\x9a\x50\x88\xd3\x4c\x9c\x84\x04\x2d\xff\x4e\xbe\xcb\x0f\x63\xc2\xbf\x8d\x9f\x8e\x96\xe9\xfe\x26\x8e\x38\x12\xbd\x12\xec\x6a\x75\xd7\xa5\xe3\x1d\x64\xf6\x10\x92\x2f\x87\xbc\xad\xd3\xc1\x52\x57\x12\xb8\x5d\x4b\x2e\xa5\x46\x2d\x7c\x9d\x58\x60\xb5\x90\xcd\x37\xce\xb2\x8e\x31\x75\xe1\x15\x67\xf6\x48\x36\xce\xeb\xb4\xba\x61\x49\xd0\xd4\xea\x4d\x06\xb9\xec\xf0\xbb\xb3\x23\x5b\xbc\xee\xcf\xd6\x2d\x33\xd9\x2d\xf7\xe7\xeb\x56\x62\x1c\x26\x32\xdd\x4c\xc8\x47\x54\xe1\xf6\xbb\xb0\x58\x79\x7c\xdc\x88\xa6\x4a\x58\x34\xaf\x36\xbd\x99\xeb\x56\xe9\x34\x0c\x8b\x15\xdd\xd0\x9e\x22\x48\x30\x07\xd2\xc6\xe3\x63\x45\x00\x09\x47\x3f\x52\x8a\x09\x80\x45\xa5\xa0\x73\x8f\xd6\xb2\x8f\xd6\xf1\x23\x4d\x79\xe2\x84\x92\x79\xf2\x0a\x12\x8c\x88\x43\x28\x26\xaa\x6f\x19\x35\x3f\x45\x54\xbf\x58\x64\x71\xa0\x68\x93\xbe\x6e\x60\x20\xc1\xeb\x35\x43\x33\x2c\x2b\xd8\x74\x98\xd8\xaa\x6a\x92\x9f\x24\x26\xa8\x81\x8e\x60\xf4\x93\xc5\x16\x44\xbc\x02\xfa\xcd\xe2\x82\x1a\xd5\x75\xf2\x80\x8f\xf4\x57\xdd\xa0\x30\x48\xb4\x50\xa3\xfa\x82\x56\x62\x71\x40\x8d\xea\xcb\xe8\x09\x8b\x04\x6a\x54\x5f\x91\x67\xe9\xd8\x7f\xd5\x0a\xc6\x41\x75\xa2\x38\xa5\x11\x3a\xa6\x56\xad\xa4\x10\x32\xab\x95\x2c\x46\x66\xb5\x92\x44\xc9\xac\x56\xd2\x38\x99\xd5\x4a\x16\x29\xb3\x5a\x41\x58\xe1\xa8\x80\xe9\xd8\xa6\x24\x67\x58\x01\x93\x71\xc3\xd0\x08\x39\x5f\x6a\x4e\x36\xee\x67\x50\x5a\x33\xa2\xc2\x6b\xa8\x15\x54\x9a\xa6\x86\xf4\x2c\xa8\xfa\x9a\x26\xaa\xe7\xb0\x78\x59\x3a\xff\xd2\xf2\x74\xbf\x68\x6d\x44\x19\xcb\x88\xf7\xbb\x6a\x5b\x38\x07\x91\x46\x2e\x69\xce\x50\xf5\x8b\x56\x45\xb7\xdf\x30\xd9\x05\x8b\x76\x4a\x67\x4c\xdf\xf7\x42\xc7\x9b\x81\x9a\xa0\x5d\xfb\x29\x42\xf6\x15\x46\x56\x86\x1a\x0d\xd4\xc5\x11\x62\x1d\x11\x20\x13\xcf\x34\x28\xad\xc7\x04\x58\xc7\x04\xf8\x42\x5c\x46\x51\xdf\x6b\x11\x31\x3c\x51\x65\x9e\x0a\x5c\xc0\x30\x9e\x0a\x44\x40\x17\x72\xb0\x2c\xcb\xfe\x06\x4a\x64\xda\xb6\x9f\x28\x29\x64\x68\x25\x28\x10\xbc\xb1\x5e\x19\xab\xab\xc1\x6b\xeb\xd5\x8b\x4d\xe1\x3c\x78\x65\x14\x5f\x56\x83\x37\x96\x69\x90\x72\xa6\xf1\x02\xcf\x2d\x01\xc5\x4c\xc3\x28\xbe\xd4\x9e\x1c\x3e\x5a\x60\x96\x9d\x48\x8b\xcb\xd2\x17\xb2\x51\x56\x14\xa5\x69\xac\x4f\x49\x49\x35\x61\x04\x26\xb2\xf3\xc1\x4b\x7b\x64\x6f\x70\xe7\xac\x96\xcf\x2f\x18\x9e\x12\xaf\x96\xe7\x7c\x3d\xde\x47\x34\xcb\x26\x21\x1e\x41\x2b\x9a\xcc\x59\x34\x87\x8f\x32\x6b\x0b\x38\x16\x9c\x89\xa9\xa6\x14\x61\x51\x69\x29\x49\x59\xc4\x1b\x4f\xd2\xe7\x4b\x65\xd3\x4b\x1d\x5e\x7f\x59\xf0\xc7\xc4\x34\xf9\x21\xd8\x5c\xc8\xf5\x99\x9e\xa2\xe1\x8d\x70\xf9\x3a\x15\x52\xe7\xf9\x57\xb5\x53\xa9\x99\x35\xa3\x86\xc6\xbc\xba\x91\xc7\x8c\x65\xab\x6e\x18\x5e\x8a\x2f\x9d\x4a\x87\x66\x65\x2a\x50\x4e\x88\x35\x32\x81\x3f\x0c\x5b\xe9\xb9\x5e\xfe\xc5\x54\x36\xe8\xbf\x90\xb6\xfa\x9d\x32\xfd\x4e\xb2\x3e\x6e\x24\xd0\x0a\x37\x4a\xae\x04\xb2\x66\x60\x7d\xa1\x69\x59\xcc\x2c\xf5\x9b\xe4\xa5\x32\x41\x0c\x31\xb1\xc7\xc9\x48\x2b\xbf\xdb\x26\x4c\x0d\x4b\x12\xbe\xb1\x89\x58\x84\xbc\x44\x4f\xd6\x7f\xf7\xcd\xa0\xde\x6c\x7c\x3b\xc1\x76\xea\x87\xcb\x74\xe4\xf9\xef\xb4\x05\x33\x63\x1d\xc4\xa4\xb4\x04\x52\x01\x47\xa1\xac\x62\xd3\x94\x27\x7e\x92\xdf\xc8\x26\x39\x94\xce\x64\xb4\xc7\xa1\xdd\x81\xd3\x92\x19\x57\xba\x69\x68\x25\x93\xc4\x80\x72\xb0\x98\x99\x7f\x6f\xf2\xef\x6b\x99\xae\xa4\x9c\x5e\xa0\xee\x48\xfb\x1b\xc9\xfb\x0c\x3d\x75\xa7\x82\xb2\xe3\xec\x17\x50\xfc\x3c\x58\x5e\x05\x4e\x5a\x08\x64\x2d\x84\x92\x86\xc5\xcf\x2f\x95\x37\xa1\x74\xaf\x2b\xc8\x5e\x95\x67\x5f\xa5\x81\x27\xc0\x66\x52\x9a\xdc\x4a\xda\xff\xee\x4e\x56\x65\x2e\xa9\xf1\xfd\x5c\xda\x88\xb8\x4a\xf9\x21\x7d\xce\xae\x24\xef\x38\xaf\x4d\x2d\xbb\x77\x3a\x43\x15\x6d\x9f\x34\x17\x3a\x5f\xba\x42\xad\x41\x6a\x8b\xb5\xbf\x51\x5e\x0f\x0a\xd7\xbc\xa2\xc7\x2b\x36\x5c\xca\xf2\x5c\x72\x00\xd8\x95\x21\xc1\x5b\x7c\xf7\x20\xa5\xc3\x83\x8c\xd8\x5f\xa4\xf3\xe0\xbb\x47\xf9\xab\x27\xf9\xab\x5f\xa7\x5e\x25\x62\x58\x0e\x99\xfa\x94\x8f\x4a\x28\x0e\x94\x17\xf4\xa1\x83\x93\x00\xb2\x00\x59\x7b\xef\xb8\xe8\x80\x23\x77\x62\x4f\xb7\xec\x00\x7c\xe2\xc3\x52\xc7\x31\x0c\x78\xf8\xa9\x90\xd4\xd9\x5c\xf1\x29\x88\xab\xab\x2b\xc9\x18\xe6\xac\x65\x3e\x65\x1e\x2e\xfe\x89\xd8\xf9\x24\x9f\x43\x40\xb3\x3f\x91\x22\x16\xd8\xa4\x01\x12\xec\x20\x70\x46\x9e\xfa\xe5\x29\xdd\x05\x1d\x50\xc9\x50\xfc\x88\xc6\x4a\xe7\x43\x2b\x70\x30\x97\x0a\x93\x90\x76\x1a\xd5\x6a\x31\x82\x7c\x58\x04\x05\xb1\x7b\x51\x04\x85\xa2\x72\xa5\xe8\xca\x88\x0b\xd3\x84\xda\x01\x51\xce\xd2\x18\x86\x0e\xac\x37\x1c\x4e\x44\xfb\x9d\x4b\x7d\x71\x94\x2a\x52\x7d\x85\xda\xe2\xf3\xc3\xf0\x15\xe3\x0a\xc2\xe3\x5b\x00\xa1\x33\x10\x65\x39\x22\x20\xc0\x02\x18\xb9\x29\x5e\x52\xd5\xd4\xf4\x24\x4d\x0f\xa9\x96\xc8\x5b\x20\xef\x62\x12\xf5\xc4\x18\xeb\x40\x80\x6f\xf6\xc4\x98\xd8\xd3\xe0\x93\x95\x2d\x58\xa6\xf7\xb8\x38\xec\x27\x2a\x49\x97\x4c\x54\x51\xd4\x04\x47\x13\x62\x9f\x26\x0d\xd9\x82\x41\x94\xaf\xed\xe0\xf8\xce\x7b\x0f\xfd\x29\x80\xe1\xbd\x0a\x68\x88\x00\xfc\xf2\x12\x5c\x55\x89\x69\xdb\x82\x96\xec\xc1\x40\xb2\x15\x90\x0e\x5a\x56\xb2\x0f\x51\x8a\x6f\xfc\x56\xbc\xc2\xa2\xc2\x4c\x75\xc8\x50\x8a\x6d\x8e\x25\xd8\x88\x67\x2a\xae\xbe\x62\x2d\x20\x76\x12\xb3\xfc\xb2\xa2\x29\x19\x2c\x3d\xaf\x7f\x16\xca\x24\x13\x15\x25\x33\x60\x53\xf3\xc4\x90\x33\x4f\x84\x9b\x1c\xf4\xcb\xf0\xca\x82\xc9\x08\x81\xec\x79\x72\x5e\xe3\x50\xea\x74\x93\x23\x23\xad\x86\xba\x78\x65\x29\xb3\x00\x40\xc4\x25\xea\xa4\xd2\x93\x90\x44\x1c\x0d\x63\x6f\x2f\x59\x89\x4b\xe3\x4a\xb2\x8c\x95\x11\xb4\xa7\xd7\x4e\x5f\xd1\xbf\x28\x3f\x28\x55\xe5\xb7\xff\xf0\x6f\x29\xba\x5d\x55\x7e\xfb\x0f\xfe\x2b\x45\xef\x55\x95\xdf\xfe\xbd\x3f\x56\xf4\x3e\xfa\xfc\xdb\x8a\x3e\x40\x9f\x7f\x47\xd1\x01\xfa\xfc\xcf\x14\x7d\x58\x55\x7e\xf3\x2f\x15\x7d\x54\x55\x7e\xf3\xaf\x14\xfd\x1a\x3d\xfd\x53\x45\x77\xd0\xe7\x7f\xae\xe8\x9f\xab\xca\x6f\xff\xfe\x3f\x52\xf4\x31\xfa\xfc\x7b\x8a\xee\xa2\xcf\xbf\xad\xe8\x13\xf4\xf9\xf7\x15\xdd\x43\x9f\x7f\xa1\xe8\x7e\x55\xf9\xed\xdf\xfd\x3f\x15\x7d\x8a\x3e\xff\x8d\xa2\xdf\xa0\xe7\x7f\x5d\xd1\x21\xfa\xfd\x17\x8a\x1e\xa0\xcf\x7f\xab\xe8\x21\x7a\xfe\x27\x8a\x3e\x43\x9f\x7f\xaa\xe8\xb7\xe8\xf3\xcf\x15\xfd\x0e\x7d\xfe\x0b\x45\x9f\xa3\xcf\xff\x44\xd1\xef\xab\xca\x6f\xff\xf8\x4f\x15\xfd\x01\x7d\xfe\x53\x45\x57\xbe\x28\x55\xe5\xff\xfd\xeb\x8a\xae\x3c\xa2\x0e\xfe\xf1\x3f\x51\x74\xe5\x49\xa9\x2a\xbf\xf9\x1f\x15\x5d\xf9\x35\xfa\xf2\xbf\x29\x4f\x82\x53\x39\x41\xc1\x72\x5d\x46\xc0\x1e\x74\x42\x27\xb8\x46\x04\xfc\x43\x02\x75\x31\xb0\x2d\x19\xb0\x59\xa0\x10\x57\xf3\x45\x03\xba\x2e\x1d\xd0\xc1\x2c\xec\xf3\xd8\xe8\xca\x2f\xd1\x97\xff\x4b\xd1\x95\x4b\xa5\xaa\xfc\x3f\xff\x5a\xd1\x95\x8f\x1f\xd1\xa3\x7f\xab\xe8\xca\x95\x52\x55\x1e\x29\x8d\x7e\xf3\xcf\x28\x8d\x86\x8c\x42\x7f\xc1\x28\xf4\xe7\x4b\x74\xaa\xb1\x60\xa9\x5f\x6e\x48\x71\x1e\x3a\x9e\x47\x69\x88\x70\xfc\xf1\x6f\x30\x1c\x7f\xfc\x07\x14\xc7\x1f\xff\xa6\xa2\x2b\xbf\x42\x5f\xfe\x44\xd1\xf1\x4c\xfd\xf1\x9f\x53\xb4\x7f\xfc\x53\x8a\xf6\x8f\xff\x2b\xc5\xfb\xc7\x7f\x4a\xf1\xfe\xf1\x2f\x96\xc0\xbb\x25\xc5\x0a\x02\x4f\x40\xca\x1f\xff\x09\x25\x25\x9a\xfb\x14\xcd\x3f\xa3\x68\xfe\xe6\xcf\x18\x52\xff\x9c\x21\xf5\x7f\x30\xa4\xfe\x19\x23\xe6\x3f\x5b\x02\xa9\x93\x7c\xa4\x0a\x7d\xdb\xb3\x07\x8e\xed\x21\xec\x12\x48\xfd\xf8\x3f\x64\x90\xfa\xf1\x7f\x66\xb4\xfb\x5f\x18\xed\xfe\x7c\x31\x9a\x3f\xfe\x9b\x25\xd0\x3c\x90\x6e\x2b\x00\x4e\x62\xec\x30\x59\x64\x23\xfb\x27\xf2\x71\x64\xf3\xef\xc7\x7f\xbc\x04\x2e\x17\x32\x5c\xb0\xb2\x82\x20\x93\x5c\x13\x7f\x26\x1f\x48\x4c\x98\x1f\x18\x61\xbe\x30\x0a\x63\xf4\xfe\x75\x86\x54\xff\x62\x09\xf4\x76\x16\x2d\x8f\xe7\xd2\xe5\xe1\xf9\xf0\x0e\x8c\x1c\xdb\x7b\x36\xb0\xd9\x3a\xf9\x25\xa3\x26\x26\xeb\xdf\x8a\x3a\xf0\x8f\xe4\x0b\xe6\x4f\x59\x4f\xfe\x27\xd6\x93\xff\xfd\x9b\x16\x4c\x57\x86\x67\x30\x8d\xd0\x93\x10\xfa\xbf\x8f\xf0\xfc\x2f\xd9\x8a\xf9\xbf\xd9\xee\xf3\x2f\x19\x56\xff\x8a\x61\xf5\x67\x8b\x91\xb9\x7c\x71\xb5\x80\xae\xe5\xb7\x52\x74\xef\xc0\x80\xa7\xe6\x1f\xe7\x4c\xd2\xdf\xd9\xf6\x43\x6c\xf1\xa5\x18\x3a\x41\xc0\xc8\x89\x67\x62\x72\xad\xff\xf3\xfc\xb5\xfe\x89\xce\xd1\xe4\x92\xcf\x59\x66\x78\xc9\x63\x4d\x05\xd6\x8b\x20\x4e\x45\x25\x39\x15\x9e\xd9\xb3\x81\xe3\x3f\xeb\x01\xd7\x55\x74\x85\xfc\xf0\x47\xa3\x5a\xcf\x0e\xc0\xf3\x75\x45\x57\x4e\x2b\x03\xef\xec\xae\xde\xa8\x47\xff\xb6\xaf\x6f\xce\x37\x0e\xf0\xd7\xc3\xdd\xdb\x9d\xcf\x17\x5b\x6f\x47\xbb\x95\xde\xda\xbe\x63\x7f\x38\x24\x45\x2e\x1a\x2f\xa2\xe2\x6f\xfb\x5b\xe4\x4b\x63\xbd\x7e\xf6\xca\xeb\x9a\x87\x75\xfe\xdf\xba\xed\xce\xda\xa3\x1d\xfc\x1d\x04\xcd\xb5\x9d\xc6\xda\xb3\xcc\xbf\x97\xe3\xed\xc1\xe4\xd5\xfd\xc5\xc4\x7d\x78\x7b\x52\xaf\xd7\x77\xaf\xa7\xfd\xbd\xd1\xec\x74\x6d\xdf\x6b\xee\xcd\xa7\x17\x6e\xf7\xb6\x3f\xd9\x9f\xf6\xef\xb7\xf6\x9b\xdb\xcd\xbb\xc3\xed\xf1\xdd\xd1\x43\x7d\x83\xb4\xb0\xb3\xcb\xea\x1e\x9c\xed\x6f\x77\x46\x3b\xa4\x33\xdb\xbb\x87\xcd\xc3\xf3\xba\xb1\xbf\xd5\xa9\xd7\xeb\x27\xf5\xfa\xd6\x68\xbf\x31\x3e\x1e\x57\xba\xfb\x07\xf6\xf9\x99\xdf\xbe\xde\x98\xec\xb7\x9a\xed\xf6\xc4\x75\x0f\xcf\xee\x9c\xae\x73\xe6\xf4\xcf\x2e\x2e\xd6\xef\xe6\xf3\xeb\xeb\xcf\x9f\xb7\xdf\xee\xed\xed\x1d\x1f\x36\xb7\x5b\xe3\x5d\x54\xbb\xde\xa8\x1f\xd4\x27\xc7\x7e\xb1\xbb\x6f\x07\xeb\x1b\xdd\xf9\xc8\xfb\xec\x1d\x8c\x8e\xcf\xdd\xe3\xe3\x83\xfe\x68\x6b\x7d\xda\x5a\xdf\x1e\xef\xdf\xdd\x9e\x4d\x2e\x2a\xcf\x27\xe1\x41\x17\xf6\x82\xf5\xe9\xfe\xc9\xe8\xe8\xfc\xe4\xac\x5e\xaf\x37\xeb\x27\x3b\xa3\xeb\xeb\x56\xab\xdd\x6e\xec\xed\xee\xee\x1d\x34\x9b\x17\x17\x17\x17\xfe\xe8\xfa\x7a\x3e\xbf\xbf\x6f\xec\x79\xde\xdb\xe6\xc1\xc1\x8d\x33\x1a\x8d\xfc\xfb\xfb\x46\x63\xfb\x74\xfb\xdd\x74\xba\x7f\x74\x7c\x3c\x9b\xf8\xfe\xfa\xfa\xf3\xe7\x8e\x63\x18\x3b\xcd\x77\xef\x7a\xa7\xed\xf6\xf8\x6e\x6e\x76\xba\x9f\x21\x34\xf6\x3e\x7c\x98\x3f\x3c\x7c\xf6\x3c\xef\xed\xfb\xe3\x63\x00\xfa\xfd\x97\xeb\xfb\x27\xe3\xa3\xf3\xfa\x49\x7d\x84\x08\x74\x32\xba\xe8\x76\xb7\xb6\x1a\x0d\xd4\xee\xee\x41\xf3\xc0\xb6\x2f\xfa\xa8\x8d\xe6\xf6\xc9\x78\xf7\xac\x8e\x08\x36\xc2\xb4\xdc\x7a\x3b\x6e\xb5\xf6\x83\xd6\xe9\xbb\xa0\xf5\x70\x64\xb4\x5b\xef\x5f\x3a\xf3\xd6\xce\xc3\x87\xd6\xa1\xd1\x39\xed\xec\x98\x1d\xf4\x6f\xd0\x31\x3f\x0c\x26\x1f\x3e\x0c\x3c\xf4\x67\x76\x27\xcd\x4e\x6f\xf6\xd6\xec\xce\x9a\x9d\x5e\xa5\xd9\x19\xbc\x5a\xef\x5c\xef\x35\xbb\xd1\x5f\xf1\xed\xda\xf0\xd5\x1a\xfa\x33\x46\x47\x7b\x27\x9d\x7a\xa3\xbe\x55\x3f\xa8\x7f\x3e\xee\xf6\x3e\x1f\xd8\x4d\x67\xef\xe6\x9d\x73\x6c\x37\xb7\xaf\x9b\x76\x50\x1f\x6d\x8d\x11\xce\xf5\x46\x7d\x7f\xec\x34\xa7\xe3\x9b\xa3\xfd\xe9\xa4\x7b\x03\x27\x93\x5e\x38\x71\x60\x38\x59\x7b\x17\x38\x0f\xef\x82\xd1\xfd\xce\xf5\xcd\x1d\x1a\xea\x2d\x3c\xbc\xe8\xdf\xc1\xd6\x74\x72\xd3\x15\xff\x4d\xba\x5d\x77\xd2\xf9\xaa\xbf\x93\xbd\xcf\xcd\x83\xd1\x56\xbd\x3e\xda\xaa\xcf\xd7\x76\xfa\xf3\xb5\x9d\x71\xab\xd3\x1c\xcf\xd7\x9a\xc1\xd6\x1d\x19\xd7\x7b\x34\xf3\xeb\x5b\xf5\x33\xe7\x61\xb7\xff\xb9\xf5\xb6\xff\x70\xfa\xb6\xff\xf0\xf0\xb6\xff\x30\x7f\x3b\xd8\x39\xdd\x77\x77\x1e\x8e\x5e\xed\xdc\xbd\x6f\xd4\xcd\xee\x16\x42\x73\x54\x6f\x12\x64\xb7\xea\x87\xad\x87\xdd\x7e\xeb\x61\x1f\xd1\xf9\xcc\x59\x3b\xed\x7f\xee\x7c\xe8\x3f\xac\x7d\xe8\x1b\x6b\x1f\x10\x8d\x3b\x5f\xf3\xef\xe2\x2d\x19\x4b\x44\x8b\xc6\xde\xa0\x3b\xed\xde\x8c\xea\xa3\x87\xf1\xde\x0e\xa1\x39\x69\xf5\xc2\x3f\xb9\xde\xde\xae\xb3\x39\x79\x52\xaf\x37\x9d\xeb\x8d\x46\xc3\x36\xf6\xe1\xc3\xc3\xe9\xf8\x78\x32\x3b\x1f\xdd\xb4\xda\x3d\xe3\xe5\xde\x7e\x67\x3f\xf0\x66\xf6\xe4\x62\xb2\x46\xe6\x55\xef\x70\xbd\xbb\xbe\x31\x7f\x78\x70\xbc\x83\x49\xff\x7c\x34\x19\x34\xec\xfe\xcb\x8d\xfd\xed\xfd\x1b\xd7\xdf\xf7\x4e\x26\xde\xfb\x63\xd0\x3a\xe8\x6d\x3d\xaf\x4c\x8d\xe9\xf4\xe1\xe1\xda\xf3\xbc\xfa\x8b\xbd\xbd\xf3\xbd\x7e\xff\xe5\xc6\xd4\x98\xfa\x6f\x6f\x06\x2e\x86\x77\x3e\x68\xd8\x1b\x37\xce\xc6\xee\x7e\xf8\xf0\xe0\x4f\xce\x26\xf7\xc0\x9c\x75\xda\xbd\xfe\xcb\xf5\x8d\x8d\x8d\x78\x3e\xdf\x74\x9e\xf7\x1f\x82\x9d\x8d\xf5\xee\xfc\xe1\xc1\xf7\xec\x49\x65\xb6\xd1\xe8\x54\xfa\xfd\x97\x2f\x36\xba\xfb\x0f\xb3\x87\x13\xef\x9a\x9b\xf7\xa4\xee\xc8\x6d\x9c\x98\x17\x5b\x75\xbc\xed\xb4\xae\x2b\x5b\x9f\xf7\xbc\x8b\xe6\x68\x78\xb1\xbe\x77\x71\x7d\x72\x3d\x75\xf6\x4e\xdf\x7a\xed\xf7\xdb\xd3\xe3\xd1\x61\x7f\x34\x9d\x6e\x3d\x3f\xfa\x3c\xee\x1e\xdc\x5c\x1c\x9d\x9c\x5d\x8f\xbd\xe9\x87\x76\x83\xee\x1b\xa3\x7a\xbd\xb1\xb3\xb3\xbb\xdf\x6c\x5e\x9c\x9d\x9d\x8d\xa3\xf5\xbb\xb7\x87\xd6\xaf\x0d\xfa\xfd\x91\x7f\x73\x73\xd0\x6e\x3b\x0e\x3c\x38\x78\xf7\xfe\xf0\x30\x08\x82\xe0\xe5\xdd\xfd\xfd\xf3\x87\xed\x87\xcf\x10\x06\x87\x87\x27\x27\x77\x77\xf3\xf0\x68\xff\xe0\xdd\xf6\x87\x4e\x67\x72\x7c\x14\x02\x1b\xf4\x9f\xaf\x6f\xb4\xf7\x66\x6e\x38\xe8\xda\x07\xcf\xcf\xcf\xce\xc6\xfe\x74\xda\xae\x1b\xdd\x2d\xba\x57\x34\xb6\xc6\xe3\x9d\x9d\xbd\x3d\xd6\xee\xf4\xfa\xfe\xde\x99\x78\x7e\xb3\x79\x90\x9e\x4b\x2f\x1b\xa7\xef\x77\x5a\x6b\xad\xd4\xdf\xfb\x97\xad\x79\x6b\xc7\xe9\xb4\x76\x9c\x0f\xad\x43\xc7\x3c\x3d\x7c\x30\x3b\x9d\xdd\xce\x87\xc1\xc4\xec\xba\x6b\x1f\x7a\xe1\x7a\x67\x50\x79\xfb\x61\x68\xae\xad\x0d\xcd\x75\x73\xb8\xbb\xde\x75\xcf\xbb\xd9\xbf\x06\xdd\x57\x71\x63\x3b\xcd\x66\xf3\xe2\x84\xe0\xd4\x6d\x39\x9f\xb7\xdf\xbe\xf5\x9a\x47\xc7\x27\xa3\xc9\x56\x44\x33\x3a\xc3\x5b\x6b\x3b\x67\xf3\x8d\x9d\xfe\x7d\x77\x67\xdc\x7e\xd1\x1c\x9f\x0e\x9a\xc1\xc3\xb0\x69\x9c\x3e\x3b\x34\x8c\xd6\xd1\xee\xd9\x69\xeb\xe8\x6c\xde\x19\x18\xad\x8e\x69\xcc\xbb\xee\xd9\x43\x77\x60\x3c\x74\x5c\xc3\xec\xb8\xe6\x87\xae\x5b\xe9\x75\xdd\xf3\x17\x83\x57\xe7\xbd\xee\xab\xb5\x67\x83\xe4\xdf\xab\x81\x49\xf7\xe6\x51\xfd\xa4\x31\x6a\x3e\x4c\xda\x4d\x67\xd2\x6e\x7e\x9e\x1c\xaf\x1b\x4e\x7b\xab\xd9\xde\x83\xf5\x66\xbd\x8b\x57\x5a\x63\x74\xd0\x7c\xe1\x1c\x37\xd7\x3f\xb7\xbb\xcd\xf1\x79\xb7\x39\x01\xdd\xae\xe7\x74\x6f\xa6\x93\xee\x8b\xe9\x8d\xdd\x3c\x20\x7b\x0f\x5e\x12\x3b\xf4\x3c\x1b\xd9\xcd\x1b\x6f\xd2\xbc\xf1\x9c\x26\xf4\x9c\xe6\xba\xef\x74\xbb\x53\xa7\x7b\x73\x33\xb3\xf7\x83\xfb\x9b\x17\x70\xf6\x35\x7f\xe3\x2d\xff\xbe\xe1\xd7\x4f\xf0\x39\x30\xb8\xdf\xc7\x7f\x9d\xf6\xfe\x4e\xe7\x7e\xbf\xde\x6f\x6e\x77\xc6\xbb\xf5\xc3\x11\x26\xdf\xdd\xf6\x4e\xff\xc4\x6c\x8e\xe7\x2f\x9a\xc1\xe9\xf0\x90\xd2\xeb\xf0\x95\x71\x7a\xf8\xaa\xf3\xa1\xb5\xbb\x7b\x17\x9f\x29\xec\xe0\xbe\xdb\xaf\x1f\xb6\x5f\xec\xf4\x1f\x06\x3b\xe3\xb3\x4e\x33\x34\x3b\x4d\xd3\xec\x34\xc3\x4e\xe7\xe4\xd5\xd7\x6c\x23\xe6\x69\xeb\xc8\x78\x68\x6f\x19\xfb\x0d\x34\x96\x88\x7c\x9f\x4f\x4e\x2e\xba\xd7\x5b\x8d\x83\xfe\x74\xab\xd1\xfb\x6c\x5e\x34\xb6\xdf\x4e\xf6\xeb\xe7\xd7\xc7\x27\xf6\xf5\x7c\xcb\xd9\x99\xce\xeb\x0f\xdb\xdb\xe3\xa3\xa6\xd7\x3e\x39\x69\xf7\x5f\xcd\xf6\x9b\x1b\x77\x77\x0f\x0f\xeb\xbb\x4d\x7f\xf7\xac\x75\x38\x5a\x37\xdc\xa3\xf5\xf5\xd1\x76\xff\x60\xf2\x61\xc7\x73\x8f\xeb\xd7\x68\x7d\xee\xd4\x77\x77\x50\x17\xe6\xf7\xdb\x6f\x77\xf6\xde\xbe\x3b\x6e\xf7\x27\xa3\xd6\xe1\xfa\xbc\xd1\xad\x9c\xdd\x6f\x8f\xbd\x69\xf7\x7d\xbb\xdd\x1e\x87\xee\xf5\xe8\xe1\xa0\x7d\x3e\xd9\x99\xbc\xff\xec\x1d\xbc\x6f\xb7\xfb\x93\xb1\xbb\x75\xfd\xce\x99\x56\xc6\x3b\x93\xe3\x7d\x78\x82\x17\xea\x5b\x34\xef\x1a\xcf\xdf\x9e\x8c\xb7\xce\xb6\x4e\xd0\x02\xd9\x6b\x1e\x9e\x8d\xfc\xe9\x75\xb7\xd5\x7e\x70\xbc\xc9\x78\xf7\xdd\xc1\x21\x38\xeb\x9f\x8d\xfd\x8d\xe9\xc6\xfc\xf4\xe1\xf3\xb8\xf9\xf6\xe2\xf4\xe0\xf0\xc4\x1e\x8c\xe6\xf5\xe9\xb4\x35\x3f\x7d\x70\xbc\xb7\x6f\x9b\xa7\x87\x27\xe0\xbc\x3f\x7a\xb5\xb5\x85\x18\xa1\xe6\x21\x9a\x42\xdb\xf5\x13\x67\x64\x74\x77\xce\xea\x3b\x8d\x7e\x7d\xfd\x6d\x7d\xfc\xb0\x71\x68\xb4\xe7\x27\x6e\x7b\x7e\xb4\xfb\x30\x6f\xb9\xe6\xfc\xe8\xc8\xdc\x38\x33\x1e\x4e\x4f\xcc\xb3\x4e\xab\x73\x3f\x3f\xea\x98\x9d\x56\xa7\x32\xef\x1e\x75\x7a\x17\xee\x69\xeb\xe8\xe8\x74\xd8\x3a\xeb\xb4\x8e\x76\x3b\xad\x4e\xc7\xd8\x40\xcf\x3b\xe1\xc3\x43\xcb\xad\x74\x5a\x9d\xb5\x56\xb7\x63\xf6\xba\x6e\x65\xde\x2d\x76\x36\xba\xe6\xda\xc3\xd1\xd1\x39\x7a\x36\xc0\xe5\x4c\x73\xa3\xfb\xea\xc3\xab\x6e\xf8\xa1\x3b\x8a\xda\x38\x6d\xb5\x48\x1b\x0f\xdd\x8e\xf9\xe2\xc2\x3c\xfb\xd0\xea\x9c\x75\x3a\xee\x79\xa7\xd5\x39\xff\xd0\x75\xcf\x87\x83\x4e\xe7\x55\xf7\x55\x7b\x8e\xca\x1d\x1d\x55\x5a\x9d\x4e\xa7\xd7\xed\x54\x86\x9d\xb0\xd3\xed\xbe\x5a\xff\xd0\xea\x7c\xe8\x0c\xdc\xca\x70\xd0\x39\x6f\x75\x8b\xe7\xaf\xc0\xee\xfa\xb0\xfb\x6a\xbd\x75\x8d\xdb\x35\x5f\x75\x4c\x54\xee\x62\xd0\x75\x2f\x7a\x03\x73\xed\xfe\x7a\x3a\x99\xb8\x37\xfe\x8d\x73\x33\x71\x9c\x9b\x9b\x9b\xc9\x4d\x38\xa9\xdc\xc0\x1b\xb3\xe7\xcf\x9c\x1b\xff\x06\x1e\x04\x13\x70\x03\x6f\x1e\x0e\x82\x9b\x22\x84\x93\x07\x88\xca\xc1\x1b\xe7\x26\x70\xee\x6f\x6e\x9c\x7b\x18\xdc\x3c\xbc\xb8\x71\x1e\x60\x78\xe3\xdc\xcc\x6e\xd6\x0e\x02\xd8\xe8\xc1\x9b\x5b\x18\xce\x5e\xbe\xbb\xbb\x7f\x80\x33\xaf\x71\x03\x6f\x9e\xc3\x60\x46\xca\xcd\x6e\xd6\xe0\xdc\x7b\x0b\x67\x9f\xb7\x5e\x4e\x1d\xef\xdd\xf4\xe6\xf6\x66\x76\x33\x79\x3e\x9b\xbc\x80\x33\xef\xed\x61\x38\x31\xfa\xfe\x73\x78\x73\xeb\xc0\x77\x77\x70\xfb\x20\x98\x3d\x83\x33\xa7\x68\x0c\xda\xbb\xad\xce\x87\x0f\x03\x77\x77\xed\x73\xa7\xd2\xe9\xbe\xaa\x98\xc3\xc1\xc6\x46\xef\xd5\xfa\xf9\x7d\xef\x74\xf6\x0c\x0e\x6f\x0f\xfa\x60\xf6\xdc\xb8\x1d\x6d\x3c\x54\x5e\xf6\x67\xbd\x6e\xf8\xf6\xdd\xd1\x6c\xef\x45\x31\x2c\xbe\xec\x3d\x1c\x3c\xbc\xba\x3e\x6e\x3e\x77\xbb\x1b\x37\x95\x9e\x7d\x73\x03\xbb\xb3\x9b\x9b\xe2\xec\xbe\xe7\xdc\x6e\xc3\xe3\xb0\x71\xd6\xe9\xbc\xfa\xd0\xed\xb8\x6b\x0f\x83\xc1\x79\x6b\x30\x5b\x7b\x00\xc7\xe7\xaf\xc0\x91\x7f\x03\x6f\x66\x0e\x7c\x77\x8b\x70\xf9\xfc\xb6\x3f\x9f\xbc\xec\xcf\x1e\xea\xfd\x0f\x83\xa0\xf2\xd9\xbd\xfd\xe0\xf5\x0e\xc2\xc6\x9a\xf9\xf9\xfe\x7d\x7f\xff\xa1\x72\xdb\x9b\x7b\x6f\x5f\x1c\xcf\xde\x57\x06\xf6\xf1\xed\x76\xdd\x7b\xfb\xf9\x0e\xcd\xe7\x1d\x3c\x9f\x77\x5e\x4e\xeb\x7e\x7b\x07\xd6\xfd\xfa\x7a\xfd\xa4\xbe\xd7\x04\xfd\xb3\xb3\x79\xfd\x66\xde\xde\x32\x76\x76\xdf\xdd\x34\x0f\x5a\x67\x87\x27\x17\xd7\x7d\x63\xe3\x60\xde\xba\x3f\x3b\xdb\x99\xde\x34\xbb\xa7\x67\x07\xc1\xc5\xa8\xd3\xdc\xd8\xbf\xdf\xbf\x3f\xdd\x19\x4f\xfd\x83\xee\x69\xfb\x6c\x04\xae\xa7\x9d\xad\x03\xfb\xf9\xde\x99\xe9\xee\xc3\xc0\xee\x9d\x5d\xcc\x8c\xd1\x74\xab\x7b\x60\xb7\x2b\x67\x86\x3b\xbd\xb9\xe9\xf7\xce\xce\xfd\xbb\xd6\xc5\xbc\x7e\xbf\xf1\xbc\x35\x7e\x18\x8f\xf7\xa7\xbd\x93\xf3\xf6\x64\x1c\xa2\x36\x36\x9e\x37\xc6\xdb\xe3\xfd\x83\xa9\x7d\x72\xd6\x36\xfc\xb0\x13\xcc\xf7\xef\xed\xc6\x67\x63\xbc\xdb\xbc\xb1\x4f\xda\x67\xc6\x64\x1a\xe2\x36\xce\xc7\xbb\xe3\xf0\xe0\xb0\x77\x71\x76\x5e\x59\x9f\x9b\xd7\x73\xd4\xc6\x78\xc7\x0d\xf7\x0f\xfa\x17\x67\x67\x15\x23\x9c\x4f\xfd\xcf\x73\x67\x6b\xfc\x30\xf6\xf6\xbd\xfd\xc3\x36\x6a\xc3\x3d\xda\xb7\x37\xba\xce\x19\x6a\x63\x72\x71\xdc\x6e\x8f\x6f\x42\xb7\xbb\xdf\x7e\xd8\xbf\x3f\xc5\x6d\x5c\x1c\x1f\xb7\xc7\xe3\x69\x38\xdd\x3f\x38\x3d\xd8\x3b\x33\xc7\xd3\x83\xe0\xa2\xd3\x3e\x9f\xdc\xcd\xcd\xe9\xbc\xdd\xdb\x3e\x47\xfd\xd8\x3f\xe8\xdb\xed\xf6\xe4\x2e\x9c\xbb\xd3\xde\xe9\xbb\x8e\xb9\xb3\xeb\xbf\x23\xfd\x98\x84\x61\xa7\x0b\xed\x9b\xb5\xbd\xb3\x9d\x29\xdc\xb7\xcf\x2e\xda\xc6\xcd\x3c\x6c\x75\x61\xef\xf3\xdb\xc9\xde\x78\x3a\x85\xf6\x49\xfb\xdc\x98\x4c\xe7\xad\x6e\xef\xb3\xb3\xb6\x37\x71\x8f\xe0\x91\xdd\x3b\xb7\x27\xeb\xf3\x8d\xeb\x69\xaf\x77\xba\x76\x3e\xf1\x8e\x0e\xe0\xa0\x77\x76\xe6\xa3\x7e\x4c\x3f\xf7\x7a\x6b\x9d\x89\x77\x7b\xdb\x3c\x20\xb4\x72\x8f\xf6\x1d\xdb\x59\xdb\x33\x27\x07\xa1\xdf\x3d\x3d\x6f\x3b\x37\x73\xb7\xbb\x6f\xf7\xb6\xdf\x4e\x2a\xee\xcd\xe1\x71\xf7\xb4\x7d\x31\x9e\x4c\xe7\xdd\xfd\xf6\xe7\x06\x6a\x23\x0c\x66\xb6\x7d\x6e\x4f\xee\xe6\x1b\xd3\x69\xdb\x79\xf1\x61\x52\xf1\x8e\x82\xa3\x61\xef\xec\xfc\xe6\x0e\xb5\x71\xda\x7e\xf1\xe1\xfc\xdc\x3b\x7e\x3f\x1b\x76\xce\xeb\xf5\xed\xfa\xa8\x7e\x58\x3f\x69\xd6\xf7\xbb\xf6\xf6\xc9\x78\xff\xac\x8e\xf7\xbc\x9d\xbd\xe6\x59\xb0\xb1\x6f\xb7\xb6\xee\x1f\xb6\xc7\x37\x8d\xb3\x77\x87\xc7\x6d\x30\xed\x8f\xe7\x8d\x83\xb6\xdb\x79\xd8\xd9\x69\xee\xf7\x3e\x20\x22\x4e\xe7\x83\x8b\x8d\x46\xe3\xdc\xdd\x1d\x07\x37\xef\xfa\x9d\x73\xfb\x7e\x3c\x45\x74\x78\x77\x52\xaf\xfb\x74\xcf\xdb\x1a\x57\xf6\xe7\x27\x3b\x07\xdb\x9d\xf1\x7e\x7d\xe7\x04\x3d\xdb\x6b\xa2\x09\x57\xbf\xe8\x4e\x5b\xce\xb6\xb1\xe5\x8c\x77\xf7\x0e\x4f\x9a\x37\x67\x17\x68\x7e\x4c\x5b\xad\xcf\x68\x3c\xf7\xde\x1e\x1e\x9f\x38\x7e\xf7\xe2\xe5\xc6\xd6\x41\x63\xb2\x73\xb6\xe3\xdf\x1c\x5c\x9c\x9d\xb4\xc7\x63\x77\x7a\x82\x18\x04\xbf\x8f\x0e\xd9\xde\x51\xe3\xec\xff\x63\xef\x4f\x9b\x1c\x45\x92\x45\x61\xf8\xfb\xfd\x15\xd9\xba\x66\x6d\x99\x87\xec\x04\x01\xda\xaa\x4e\x9e\x79\x83\x4d\x2c\x42\x88\x55\x82\x3e\x6d\x63\x08\x10\x20\x56\xb1\x08\x44\x4f\xbd\xbf\xfd\x31\x24\xe5\x9e\xd5\x5d\x3d\x77\xe6\xd8\x7d\xcc\x9e\x0f\x55\x82\x08\x0f\x77\x0f\x0f\x0f\x0f\xf7\x08\x32\x7c\x4d\x9c\x7c\x84\x07\x06\xd0\x81\xde\xc7\x69\x3d\x05\xd1\x34\x7d\x97\x91\x4f\x42\x30\xa7\x35\x3a\x4b\x0f\x26\x2d\xaf\xfd\xba\x72\x5d\x4b\xb5\xc7\x1b\xa6\x63\xf2\x43\xb1\xd5\x4c\x19\x84\x55\xe0\x9a\x27\xf5\xb4\x99\x0f\x99\x3c\x29\x1c\xd5\x5c\x87\x25\x00\x52\x07\x80\x4c\x95\x0d\xcd\x65\xcb\xb9\x1c\x03\x1e\xb0\x80\x06\x66\xd6\x2a\xfb\x6e\x1f\xa7\xf4\x7c\x21\x4a\x9e\xef\x2c\x81\xdf\x8e\x82\x13\x4d\x85\xc5\x3c\xe5\x44\x49\xf6\x7d\xa3\xe7\x99\x24\xe7\x74\x47\x45\xbd\xaf\x23\xcb\xb5\xe9\x04\x7d\xfc\x24\xcc\x29\x9a\xe6\xb8\xdc\xd2\x54\x59\xf6\x83\x80\xe1\x85\xb1\x4a\xd2\x34\xcd\xe5\xf9\x46\x96\x65\x3f\x0c\x62\x86\xeb\x97\x8c\xc3\xb9\x73\x0b\x42\xb1\x58\x89\x8c\x6c\xa2\x5f\xef\x48\xc0\x46\xe7\xf5\x4e\xdd\x47\x6c\x66\x29\x73\xc1\x31\xfd\x98\xe7\xd5\x9e\x27\x9a\xce\xf9\xc3\x86\x13\xe5\x30\xca\x5b\xc3\x1c\x11\xe3\xb9\x1e\x33\x45\xc9\xf1\x5a\xaf\xdb\x43\x37\x20\x04\x5b\xc5\xe6\xeb\x68\x29\x14\x8e\x61\xda\x63\x3c\xc8\x5d\x2b\x2c\xa8\xcd\x66\xc8\x1c\xc4\xca\xb3\x6d\x1b\xc9\x7a\x7d\x2f\xba\x6d\x04\xc0\xb2\x61\x88\x86\x6c\x40\x5b\x31\xcb\xd0\x31\x49\x35\x43\x2c\x52\x07\x11\x70\x80\x4f\x92\x11\x33\x97\x7a\x19\xeb\x66\x96\xb5\xa3\x51\x4b\x91\x64\xca\x24\xec\x4a\x12\x6c\xd3\xbc\xf8\xd1\xbd\x6f\xd7\xfb\xe0\x92\x28\x5e\x7d\xeb\x36\x0f\xce\x7e\x39\xfb\xe4\x6f\xe3\x6f\x7d\xf5\xb7\x3e\x78\x04\x00\x99\x37\xfd\xf2\x59\x32\x4c\xe4\xe0\x82\x92\xd1\xbd\x1f\xc9\x81\x43\xef\xbb\x12\xcc\xda\xcc\xfa\x58\xdb\xdf\x92\xd7\x58\x5b\xd4\x4d\xf5\x52\x16\xec\xb7\x4f\x65\x8e\x6d\x3e\x95\xed\x9f\xcb\xcc\x0f\x71\xfa\x0f\x95\x31\x55\x51\x6c\x37\xeb\x75\x52\x57\xbd\xdf\x6d\x8f\xd1\xe1\x30\xce\x8b\x42\x26\xc0\xb1\xc9\x58\xb0\x9a\xb2\xf3\xe1\x65\xc4\xc8\x53\x73\x96\x17\x0d\x70\x00\x88\x3d\x95\xb0\x92\x24\xc9\xa6\x1b\x70\x66\x3e\x16\x54\xba\x57\x8d\x4c\x5f\x0a\x92\xea\xc7\x01\x43\x08\x82\x1a\x77\x5a\x94\x0b\xb9\xad\xea\xeb\xe8\x60\x39\x43\x5e\x15\xc2\x75\x1c\xc7\xbd\x8d\xd6\xf4\x75\x94\x9d\x69\x12\xa7\x75\x3c\x8c\xf9\x43\xcf\x87\xe4\x87\x71\xb5\x54\xce\x7c\xa0\x34\xc3\x09\xf6\x66\xbd\xce\xca\xaa\x8d\x09\x41\x3d\xa0\x43\x74\x2e\x88\x4b\xd3\x52\xf5\xe4\x50\xb5\x6e\x10\x16\xd4\x3c\x42\x62\xbe\x5c\xf4\xfd\x1a\x9f\x82\x78\x69\xd9\x76\xd7\xf7\xb5\xac\x84\xed\x66\x6d\x66\xa7\x61\x3f\xfe\xaa\x9d\x0c\x87\x89\xb0\x58\xba\x96\x4d\x36\x94\xbf\x4d\x01\xf0\xe9\xb0\x71\x4c\xdb\xc8\x17\x2b\x12\xf1\xae\xfa\x48\xd2\x04\x00\x0a\x79\x19\x67\x51\x96\x7d\x3f\xd0\x7b\x7d\x18\x93\x67\x3d\xe7\x74\x45\x10\x3d\xd3\x71\x2f\x7b\x07\xf4\x9e\x62\xd3\x8c\xbb\xc0\x05\x3c\x68\x47\x41\x8b\xd0\x97\x78\x40\x96\x6a\xe7\x69\x8e\xd0\x7a\x54\xa4\x2c\x2b\x9f\xe1\x62\x86\x20\xaf\x73\x84\xcb\x4c\x45\x55\xc3\xc8\xed\xe1\x84\x33\x5c\x96\xf3\xfd\xfc\xf2\x93\x38\x66\x78\x41\xb0\xd7\x57\x38\x59\x55\xc3\x24\x8e\xcf\xf8\xae\xb1\x91\x25\xab\x17\x7c\x67\x38\x5d\xef\xe5\x6f\x29\xf2\x19\x8e\xe1\x85\x9e\xbf\x0b\x9c\xa2\xaa\x7e\x14\x9c\xc7\xc4\xbe\xb4\xe5\x9e\xf0\x9d\xdb\xea\xfd\x1c\xa4\x88\x86\x04\x80\x5c\x65\xbc\xb0\x12\xb8\xa4\x41\x70\x87\xa3\xf4\xf9\x9e\x53\x7d\x12\x50\x00\x00\xc7\x0d\x0e\xe3\x53\xba\x3e\x91\x14\x93\x72\xea\x5a\xc5\x55\xd9\x09\x88\x70\x11\x30\x6a\xb8\x8f\xd9\x72\x6d\x70\x73\x47\x37\x87\x96\xdc\xe6\x8a\xa2\xe9\xc9\x31\x4b\xe7\x82\xa8\xeb\x90\x6b\x22\x59\xdb\x8c\x4f\xba\x11\x65\x59\x64\x2e\x54\xe7\x70\x1a\xba\x65\x43\xf4\xce\x3d\x09\x40\x43\x93\x74\xe7\xeb\x80\x60\x88\x3d\xd7\xf3\x12\x00\x39\x07\x02\xd9\x34\x4b\xd0\x6e\x80\x4c\x8f\x08\xee\x44\xfa\x8d\xd0\xe2\x4a\x87\x24\x11\x05\x08\x92\x3e\x81\x93\x12\x32\xbe\x48\x07\xd2\xc1\xb7\xf9\x50\xf2\x09\x73\x33\xa7\x38\x02\x07\xe2\xde\x44\x91\xb0\x39\x66\x62\x09\x98\x8d\xdb\x0e\x39\x4e\xf6\x09\x72\xce\xb5\x32\xad\x47\x1c\x49\xd1\xe8\x08\xc7\xfd\xe1\xaa\x16\x69\x5e\x8a\xd6\x31\xe5\x5f\x02\x34\x1c\x00\xc0\xfa\x00\x44\x3e\xe2\x73\xa1\x60\x4b\x26\x2e\xed\x1b\x48\xa6\x79\x5a\x89\x02\x41\xa3\x47\xd7\x7d\x95\x05\x20\x7c\x30\x05\x3e\x29\x33\x21\x17\x72\x56\x36\xde\x37\x90\x48\x3d\x83\x01\x39\x7e\xbd\xe7\x47\x82\x2b\x01\x70\x89\xa5\x48\x10\xac\x2c\xd4\xd5\x00\x90\x4d\xa9\xb9\xd6\x48\xf3\x7c\x1b\x65\xe7\xf0\x25\x71\x26\x38\xa5\xf8\xa7\xe5\x5e\x1c\xcf\x34\xd0\x49\x5a\x34\xc1\xdd\x74\x51\x6f\xbd\xa6\xdc\xda\x7e\x62\x85\xcb\x1c\x77\x11\x61\x5b\xd2\xad\x6a\xc2\x1c\xb6\xd1\xb5\x86\xf7\x23\xcf\x72\xd3\x21\x6b\xe2\x5d\xb6\xc7\x30\xf8\x30\xa3\x98\xea\x88\xe9\xe1\x10\xde\x27\xed\x24\x26\xf5\x6a\x55\x0d\xa7\x70\x69\xee\x66\x62\xe4\x83\x12\xcc\x15\xc2\xc5\x7c\x71\xbe\xc2\x4b\x1d\x3a\x90\x2b\x93\x38\xcd\x8c\x02\x60\xe6\x81\xcf\xca\x35\xb6\x46\x61\x6f\x37\x0c\x25\xb8\xc6\x1c\x7f\x6a\xcd\xe1\xd1\x64\xaf\x43\xf9\x2a\xd9\xce\x69\x5e\xf7\xa3\x5d\x6a\x73\xd8\x8c\xda\xae\x0e\xad\xeb\x5a\x79\xb0\x15\x95\x84\x74\x46\x85\x10\x47\xba\x18\x9d\xda\x69\xc8\x65\xb5\x3f\x72\xf9\xe3\x50\x32\xd9\x99\x3d\x9a\x39\x10\x36\xf7\x8e\x07\x67\x62\xa1\x1b\xc6\xa5\xf6\x0b\xf8\xc0\x76\x95\xb2\xdb\xaf\xe9\x75\xcb\xc3\x76\x38\xf7\xba\x7d\x16\xd4\x33\xb6\x24\x2d\x57\x26\x84\x6d\xc8\x22\x46\xa5\xc3\x58\x32\x1d\xc5\xd4\x1c\xd5\x60\xa8\x8d\x2c\xc7\x4c\x37\x10\x0d\xd9\x87\xee\x08\xb7\x9a\x2f\x65\x1a\x33\x87\xda\x89\xba\x3c\xc8\xf8\x12\xca\x00\x20\xd4\xb6\x36\x36\xcd\x64\xc2\xbb\xa3\x6d\x92\x68\x49\xcd\xdb\xd1\x66\x32\x42\x66\x2c\x8b\x44\x73\x53\x38\x02\x65\x95\x37\x3b\x49\x05\xab\x93\xba\x02\x0e\x4a\x47\xa9\x47\x35\x04\xca\x36\x00\xf0\xb1\x4c\x99\xc2\x68\x34\x1d\x2f\x27\xb3\x39\x4f\xee\x5b\x1c\xca\xc7\x36\xa5\xbb\xe8\x64\xa3\x1e\x95\xd3\x66\xc1\x47\x1c\x39\x32\xad\xe1\x7e\x71\x1c\xc5\xb9\x14\x58\x5a\x87\x94\x10\x95\xa4\xcc\xd0\x0d\xf3\xaa\x48\xc5\xb1\x4e\xf9\xdc\x7a\x38\xdc\x04\x53\x87\xd5\x5c\x04\x56\x93\xad\x2f\x01\xb7\x75\x4e\xeb\x46\xec\x63\xb1\xc2\xc2\x76\x4b\x75\x67\x6d\x3b\x21\x34\x0b\x01\x87\xaa\xd5\xa1\x4a\x45\x63\x21\x79\x6b\x69\x8e\x46\xc6\x51\x37\xa1\x1c\x5d\xf1\x70\x10\x91\xf1\xc8\x66\x14\x09\xd7\x16\x73\x73\x65\x39\x9c\x8e\x1d\x4d\x71\x18\x64\x81\x8a\xef\x59\x26\x4e\x4f\x6b\x18\xd5\x46\xfc\x24\x9a\x97\x6a\xb0\x59\x6b\xd3\x25\x32\x32\x20\x8c\x84\xe7\xab\x03\x3f\x94\xdd\x75\x58\xce\x57\x2d\xdd\xb1\x87\x0d\xa7\x12\x2b\x2e\x4c\xd7\x94\x5e\x4d\x38\x8f\x3f\xc2\xbb\x91\x54\x75\x44\x9b\x6b\x9d\x65\xc9\x10\x69\xd2\x01\xbb\xd9\x1d\xe6\xb8\x0d\x08\x39\x0e\x27\xe8\x9c\x0f\x96\x78\xc6\x1f\xa1\x60\xe3\x80\x1c\xf0\xbd\xf7\xbd\x9e\xce\xd1\xc2\x06\x1b\x7c\xa9\x3b\x80\x48\x8d\x6a\x32\x21\x3b\x0b\x10\xd0\xa2\x64\x1d\xc3\x83\x64\x3c\x80\x64\x62\xd8\x04\xb0\x55\xf0\xda\xaa\x55\x09\x97\x9b\x26\xbe\xe6\x01\x57\x2b\x65\x29\x63\x74\x3a\xf5\x67\x04\xeb\x18\xab\xa0\x55\x15\xc5\x8c\x84\xb5\xc5\x6f\x24\xc6\x5c\x8d\x0d\x1c\xd0\x45\x98\xf3\x19\xbd\xdf\xf8\x00\x6d\x78\xc5\x62\x55\xba\x4d\x78\x2a\x99\x32\x08\x18\xfb\xf4\xa6\xf4\x47\x36\x6e\x95\x60\xc1\x55\x85\x48\x4c\xa0\x5d\x30\xd1\x85\xc5\xd1\x5c\xab\x6e\x55\x52\x0d\xb3\x1b\x26\x9d\xd9\xa9\x43\x66\x8a\x2e\x87\x01\x2a\x9d\x2a\xd4\x9b\x8c\x89\xa1\xec\xaa\x88\x0a\x4a\x39\xf4\x17\x2b\x51\xf2\x79\x75\xc6\x2b\xe4\x24\x60\x36\x60\x1c\xe9\xe5\x82\x59\x0a\xd4\xc8\x01\x23\x47\x53\x8e\xbe\x7a\x58\x39\x18\x13\xcf\x66\xed\x1a\x93\xb5\x10\x16\x59\x65\x4a\xd1\xc9\x78\x9d\x1e\x6d\x43\x06\x5a\xa3\x1c\x14\x61\x7f\x6a\xe4\x19\x51\x14\x41\xed\x2b\x28\x10\xb4\x72\x25\x7b\xb2\x13\x15\x40\xf2\x29\x29\xd8\x6a\xb4\x7a\x2a\x36\xf2\x08\x21\xa3\x65\xbe\x71\xab\xf5\x7e\x3d\x59\xa3\x30\xa6\xef\xbd\x0d\xa6\xcf\x46\x3e\xe7\xda\xf1\x4e\x01\x19\x48\x0e\x3a\x1d\x36\xf9\x08\x0b\x48\xd7\x21\x9b\xd8\xc7\x27\x3b\x67\xbb\xeb\xe2\x44\x16\x81\x6f\x13\x51\x30\x71\xa0\x9d\x43\xf9\x0c\x14\xee\x1a\x6a\xb3\xeb\x3c\x7f\xb1\x72\x16\x26\x5f\x02\xc0\xcb\xa0\xd0\x36\xfb\x34\x80\xeb\xcd\xfc\x84\x1d\x87\x6c\x84\xe5\xc6\x18\xc6\xaa\x51\x51\xaf\xa7\xc3\xdd\x38\x2f\x76\x5b\x11\x95\xb1\xf5\xd2\x38\xcd\xa6\x44\xa3\x57\x5b\xb2\x09\x98\x00\xac\xeb\x95\x77\x1c\x4b\x1e\x8c\x5b\x36\x23\xeb\x8e\x2f\x14\x46\x89\xbb\xde\xae\x0b\x86\x1a\xa0\xc0\x90\xa2\x83\xd1\x16\x33\x62\xca\xa6\xc9\x66\xb4\x85\xb6\xab\x5d\x24\x64\x25\x56\x71\xa0\xf6\xb0\x23\x6f\x49\x61\x80\xf9\x36\x16\x8f\x25\x6c\xa5\xee\xb8\xa8\x58\x1c\x91\x15\x50\xa7\xe3\xd5\xca\x5d\x4c\xfc\x69\xe6\xa0\x42\xe5\x2d\x19\x41\xe8\x04\xc5\x0b\xa4\x23\xea\xf3\x19\xb3\x20\x56\x9b\xc4\xde\x1c\x57\x84\xcc\x2d\x7c\x3e\x4b\x91\xed\x76\x4d\x94\x5d\x61\x5a\xa6\xd9\xd0\x93\x7d\x8c\xee\xa1\xa3\xe6\xea\x13\x23\x8f\xd0\xe1\x22\xd4\x11\xd9\xde\xaf\xa2\x53\x03\x00\x7b\xd8\xea\x24\x02\x9b\xa5\x29\xb9\x5b\xdc\x1b\x13\x52\x3e\xa1\x11\x87\x0c\x11\x1c\x64\xb0\xe6\x53\x53\xcb\x00\x62\xe8\x8e\x03\x18\x4c\x39\x8f\x58\x46\xf9\x18\x6e\x4b\x00\x48\x8b\x5e\xd0\x26\x17\x41\xa7\x23\x37\x96\xbb\xe1\x72\x39\x8e\xb9\x5d\x45\xc0\x63\x4e\x5c\xef\xd7\xfc\x52\x3a\xac\x34\xd1\x73\x41\x72\xb2\xf7\x63\xba\x44\x64\x22\x8a\xf9\x3c\x54\xd7\x6b\x36\x95\x51\x32\x33\xb7\xf3\x35\x48\x2a\x08\xf1\x17\x32\xc1\x08\x24\x91\xe6\xa8\xac\xeb\xb2\x05\x0f\xab\xa0\xb2\x28\x82\xd7\x73\x66\x6d\x4e\xd1\x0e\xc3\x33\x27\x2b\x88\x31\x9a\x6d\x26\x07\x62\x74\x42\xb2\x15\x38\xc2\xbb\xac\x65\xd1\x51\x63\x24\x3e\xc7\xee\xd0\x96\x91\x8a\x69\xec\x59\x0e\x71\x18\x0a\x2d\x66\x1d\xc9\xc3\x8c\xf0\xed\x31\x36\x03\x6d\xcd\xd6\xab\xe5\x02\x9e\x0c\x4d\x92\xc1\xe9\x53\xc3\xe7\x07\x96\x01\x9b\xf1\x86\x41\xca\xbd\xb1\xad\xc1\x32\x3d\x1e\xdd\x85\x53\xd4\x3b\xb3\x91\x44\x38\xa4\xec\x71\x08\xf0\xf1\x14\x98\x00\x10\xe3\x64\x49\x88\x1b\xc7\xd7\xa8\x29\xab\x2a\x07\x1e\x3f\x36\x53\x72\x0f\x62\x92\x5e\x01\x12\xa8\xf1\x06\x06\xab\x66\x25\xf1\x42\x3c\x6b\xfb\x35\x6d\x95\xa4\xde\x11\xf5\xd6\x39\x86\x6d\xfc\x53\x83\x51\xc7\x5d\x37\x4e\x4e\xf3\x08\xcb\x4e\xab\xa9\xa9\x09\x25\x29\x1d\x3b\xe0\x83\x85\x1c\x22\xd9\xd0\x19\x2f\xbb\x12\x95\xd0\x95\x8f\x06\x38\x20\x39\x1e\xf8\x60\xbe\x42\xec\x65\x3a\x6a\x11\x82\xf2\x8d\x1d\x3b\xa9\x51\xad\x3a\xed\x28\x47\xe1\x6a\x13\x9c\xe4\x80\x60\xe0\xf8\xa8\x2a\xa0\xaa\x7c\x30\xd6\x56\xdb\xb5\x05\x66\xbe\xad\x17\xd6\x1a\xe8\x34\x00\x10\xd5\xe2\x13\x19\x83\x8b\xe9\x84\x6d\x75\xfd\x60\x25\x04\x42\x24\x7a\x2d\xc6\xd9\x9e\xd9\xb3\xd5\xd0\xa7\xea\x34\x3d\xd6\x9b\xa9\xc8\x25\xe5\x5e\x3d\x8c\xd6\x51\xa7\x76\x73\x75\x8c\x4a\x34\x17\x4b\xf5\x6e\xbd\xf6\xba\x76\x9d\x1f\xc7\x0c\xe1\x53\x3e\x6f\xc4\xd5\x6e\xc3\x98\xd5\x12\x80\xf4\xa0\x23\xad\x9c\x51\x88\xb9\x08\x37\xd9\xc8\x61\x46\xb2\x81\x93\xa9\x39\xac\x88\x05\x88\x2c\x52\x02\x04\x08\xb6\x11\x0c\x44\x08\x06\x8d\x4a\x92\x6e\xbc\x06\x00\x88\x0e\xb3\x57\x27\x59\xb3\x9d\xce\x0d\xaa\x3b\x7a\x54\x68\x1d\xbb\x74\x5b\xa1\x15\x83\x6f\x17\xa3\xcc\x5d\x0e\x4d\x21\x9e\x4e\x35\x40\x03\x82\xb4\x8e\xf5\xee\x30\x33\x49\x8d\xa8\xc4\xc6\x00\xb2\x4e\x83\x66\x5e\x2d\xe3\xaa\x53\x6d\xf6\x08\x28\x93\xc4\xb4\x76\x61\xec\x0f\xa1\x02\x20\xc9\x02\x62\xd0\x39\x07\xda\x57\x1c\x20\x35\x19\xe9\x1f\x5d\xad\x2d\x35\x76\x21\xd3\xcc\x18\xca\xa4\x2d\x0a\xad\x00\x37\x75\xc2\x95\xec\x6c\xfc\x49\x2e\x99\xd0\x62\xdf\xca\xea\x11\xdd\xed\x13\xa6\xde\x63\xb8\x3f\x6f\x3a\x6c\x88\xc0\xdb\xb9\x30\xee\xb0\xd6\xd7\xa6\xd3\x89\x97\x25\x6b\x7d\x41\xdb\x94\x8b\xe0\x0d\xeb\x55\x66\xeb\xee\x1d\xdf\x40\xd5\xf6\xa8\x36\x29\x62\x64\xd6\x86\x57\x0e\x91\x42\x8e\x80\x2a\xc3\x49\x6d\x64\x40\x2f\x37\x13\xe0\x03\x59\x24\x96\xb6\xd1\x00\x10\x03\x42\x69\x35\x78\xb8\x4a\x76\x87\xc5\x41\x55\x96\xd4\x36\xd8\x6c\x91\xc9\xd6\x2b\x72\x02\xdb\xce\xf0\x7d\x5e\xaf\x69\x6b\x4f\x90\x14\x2a\x39\xee\x86\xc9\x49\x81\xf6\x49\x6a\xe7\x30\x2b\xb1\x99\x02\x00\x28\xbd\xd1\xf0\x38\xd5\x93\x11\x12\x27\x4d\x91\x8b\x62\xb0\x92\x39\x61\x3f\xae\x11\x7a\xba\x2b\xd0\xe3\x9c\x48\x7d\x71\xe9\x72\x71\x61\x95\xa1\xbf\xb7\x83\x78\x5f\xbb\x63\xc0\x18\x3e\x54\x75\x9b\x46\x4f\x37\x0b\x4c\xe3\x17\xb9\xbd\xb7\xd7\x02\xc0\x8d\xf3\xc9\x6b\xc8\xec\x0e\xbc\x2f\x00\x0b\x99\x6e\x8a\x4a\xc5\xdc\xb6\x92\x97\xa6\x93\xaf\x8e\x26\x3d\x9f\x92\xf1\xb1\x90\x15\xde\x27\xbc\x3c\x68\xd2\xe5\x9a\xdf\x57\xf3\x43\x92\x8f\x0d\x7a\xa5\x1e\x09\x6f\x42\x13\xa1\x8e\x1d\x7c\x7e\x2b\x83\x86\xc2\x17\xde\x74\x01\x44\x4a\x0c\xd8\xed\x12\x00\x10\xfb\x02\x54\x31\xe5\x48\x82\xcc\x13\xef\xcc\x4e\x64\xca\xdb\x58\xd1\x2e\x56\x75\x3c\x4f\xdb\xa6\xdc\x18\x33\xa6\x8c\xd0\x08\x5f\x85\x25\x09\x58\x72\xca\x44\xcd\x76\x4e\xcf\x7c\xfe\xbc\x2f\x90\x9e\xa2\x72\x8f\x90\x2e\x23\x5a\x8b\x85\x9f\x75\x53\x11\x62\xda\x2e\x6c\x4c\xc2\xe7\x5a\xa8\x63\x43\x92\x00\x02\x88\x09\x61\x99\x33\xc3\x52\x9a\xf1\xb9\xe1\x9c\xe8\x70\x66\x17\xc3\x91\x19\xb3\x7e\x51\x57\xa3\xdd\x8a\x4f\x23\x97\x1f\x1f\xe9\xc6\x5a\x9d\x00\x2b\x13\x1c\x4d\xe9\x45\x2c\x3a\x04\x00\x2e\x2a\x00\x15\x91\x0f\x10\xdf\x28\x25\x8d\x03\xde\xaa\xc4\x14\x50\xe3\x79\x2a\x99\x8d\x19\x4b\x9c\x75\xac\x3a\x7d\xe9\xee\x0b\x8f\x98\xec\x42\x31\x5a\x73\x08\x99\x10\xc4\x18\x70\x40\x70\xb0\x29\x98\x65\x25\xcd\xc4\x9a\x3a\xa7\x49\x02\x72\xb6\x9e\x42\x91\x88\xad\xe4\x0b\xf6\xb0\x5c\xe5\xb1\x23\xc0\x93\xf1\xa2\x4d\xd1\x22\x4f\x0e\xa7\x4d\x69\xf2\x6b\x25\x84\x19\xf9\x7c\x7e\x28\x47\x33\x91\x04\x52\xb8\x2d\x64\x42\x06\x14\x49\x95\x87\x3c\xcb\x56\x75\xe5\x42\xc8\x88\xf4\x66\xfe\x38\xa4\xdd\xd0\xdc\xf8\x46\x22\x03\x0e\x87\xf0\xa6\x8c\x68\x82\x0e\x89\x38\x5b\xca\x63\x21\x44\x60\x41\x93\x11\x79\xbf\xde\xed\xdb\x2e\x84\x80\x57\x6f\x84\x4c\xdc\xd3\xc6\x4e\x96\xac\xae\x40\x4e\x33\x7c\x78\x58\xf8\x22\x0a\xe8\xf6\xb8\xb5\xa4\x83\xd3\x5a\x63\x7e\x1c\x15\x71\xb1\xc7\x4f\xe8\x7e\x06\x5c\x5f\xa0\xda\xf1\x3c\xe5\x4b\x63\x11\x6c\x1d\x1c\xad\x0f\xa3\x29\x0e\x65\xb5\xea\x2e\x89\x3c\x23\x43\xd2\x60\x8b\x0e\x5a\x77\x3a\x80\x29\xaa\xa2\xa6\x40\xf3\x01\x16\x20\xb1\x48\x02\xd0\x39\xcc\x11\x52\xa1\x9d\xaa\x2e\x23\xcf\x5c\xc7\x5a\xbe\xc5\xf0\x64\x87\x2a\xbb\xe4\x70\xe0\x3d\xd1\x8b\xe2\x80\x05\xbb\x7a\x62\x64\x80\x06\xa4\x0f\x40\x2e\x28\x51\xb5\x80\x84\x48\xa6\xd6\x62\x63\x92\xfa\xf9\x4c\x9f\x14\xca\x7c\x8a\xb4\x41\x3e\x1b\xea\xfb\x83\x4c\x34\x58\x8b\x8f\x1c\xaf\x3a\x44\x7b\x99\x3e\xd5\xd8\x7c\x46\x8c\x97\x90\x32\x1e\x21\xfa\x61\x2a\x19\xa1\x3f\x69\xa4\x64\xbc\xae\x53\xc4\xb3\xf1\x58\xa0\x56\x99\xbd\xe5\xcb\xb1\xbd\x38\xf8\xdb\x60\xd5\xe5\x47\x5c\x50\xf0\x50\xa2\xc2\xb8\x99\x4e\xad\xdc\x9c\x1c\x86\x9c\x24\x3a\x5b\xa0\x02\x09\x18\x55\xe2\x90\x69\xb6\x75\x8a\x68\x8e\x0b\x73\x75\x02\x5b\x69\x19\x19\x6b\x65\xc9\xcc\x78\x44\xd1\x59\x41\x4a\x89\xd3\x69\xb6\x06\x53\xea\x38\x5e\xf4\x51\x8b\x22\x92\xb2\x0e\xf0\x79\x11\x56\x3b\x43\x44\x63\xc7\xda\xb1\x98\x8c\x69\xf0\xd1\xc2\x27\x3c\x6a\xb2\x81\x93\x10\x76\xb7\xdf\xb9\xa7\xda\x40\x47\xfe\x02\x74\x85\x83\x38\xcd\xf5\xeb\x85\x60\xbc\x72\xfb\xe7\xf9\x69\xbd\x67\xd6\xf8\x49\x75\xf6\xf6\xda\x46\x93\xb9\x93\xed\xd8\x76\xdd\x7a\x8d\x00\x16\x7e\xbc\x26\xf2\x85\x7e\x6c\x9a\x08\xd2\xa5\x60\xe4\x2d\xe7\x27\x5d\x2a\x87\x30\xcd\x40\xb9\x55\x40\xb5\x3b\x92\xba\x6c\xde\x98\x2e\x00\x84\x8f\xe6\x23\x74\x11\xaa\x3e\x30\x61\xcb\x88\xa5\x24\x8c\x69\x9f\x4d\xc7\x73\x4c\x72\x1a\x73\xdf\x71\x93\xa3\xb4\x1f\x56\xe3\xb6\x6c\x71\x15\x8b\x09\x73\x36\xa6\x75\x99\x60\xc6\x80\x23\x40\xb2\x32\x59\x7c\x95\xcd\x4d\x32\xe3\x01\xa0\xd6\x1e\x24\x59\xbc\x15\x4e\xe0\x76\x32\x86\x4f\xec\x64\xd1\xed\x66\xe2\x68\xd3\x29\x42\xca\xac\x92\xa3\x27\x96\x61\x2c\xb3\x8d\x71\x3d\xf3\xc6\x16\x32\x35\x5d\x91\x7d\xc8\x45\xf9\x36\x22\xd7\x7b\x62\x71\x6a\x3a\x8f\xc7\xed\xb1\x05\xd3\x8a\x41\x00\x3d\x06\x34\x75\x38\x66\xe2\x84\x90\x09\x50\x03\xbf\xee\x98\x03\xb7\xa8\x92\x3d\x8b\x09\x2e\xde\xec\x84\x6c\x9b\x4a\x01\xc0\xba\xe9\xe8\xb0\xce\x94\x55\x32\x0b\x9a\x4c\x62\x33\x0a\x80\x98\xdc\x36\x14\x00\xa3\x31\xc3\x82\x7a\xb3\x8b\xd9\x0c\xdb\x79\x68\x55\xcd\x67\x1b\x9d\xf2\xc0\xcc\x4c\x4c\x92\x90\x91\x6c\x55\xc0\x43\x99\x9c\x72\xc7\x9a\xec\x65\x9b\x6f\x75\x20\x93\x02\x8a\x8a\x09\x8d\x49\x93\xa9\x01\xb6\xac\xac\xcd\x56\xdc\x6a\x99\x69\xb3\x6e\xe9\x60\x31\x2a\x79\x13\x0d\x18\x0b\xb0\x24\xea\x9d\x36\x15\xcf\xc7\xf8\xf3\x4e\xc3\x57\xea\xb4\x7f\xce\xe8\xc5\x9c\xdd\xa2\xb5\x4d\x36\x0d\x7d\x1c\xd2\xeb\x80\x29\x42\x3d\xda\x02\x1b\x58\xe8\x04\xde\x19\x56\xaa\x59\x9b\xed\xba\xc3\x88\x66\x9d\xef\x75\x5b\xb4\x04\x65\x3f\x71\x2d\x84\x87\x61\x5f\xf7\x34\x37\x37\xe8\x06\x00\x4b\x62\xca\x65\x2b\x80\xbd\xac\xfa\x00\x02\xc4\x2a\x33\xa7\xfc\x7e\x74\x42\x9b\xbd\x37\x1d\xee\xcb\x8d\x03\x0f\x35\x49\x5e\x6b\x94\x69\x11\x09\x88\x96\x54\x78\x30\x9a\x1a\xa0\x4b\x7e\xd6\xf3\x41\x13\x02\xa8\x66\x46\x51\xee\x4a\x18\x5d\x0e\x67\xa2\x34\x1b\xaa\xb3\xc2\x9d\xd2\xac\x66\xb1\x69\x47\x8e\x44\x33\xd9\xc9\x34\x20\x4f\x30\x43\x38\xfd\x38\x80\x91\x83\xfb\x21\xde\x4d\x15\xb0\x2c\xe1\x64\xcc\x2c\x37\x46\x36\xa3\x0c\x7c\xcc\xcf\x87\x04\x41\xd5\xd1\x21\x6e\x60\xc3\x1e\xcd\x27\xf2\xb6\x9e\x1b\x2a\x07\xa1\xb6\x65\x67\x8b\x0d\x5f\xb8\xc6\x1e\xed\x62\x72\x66\x8d\x64\x1a\xd0\x4c\x07\x8f\xe4\xce\x37\xac\x8b\xf2\xc2\xd9\xc6\x69\x4f\xe4\x78\xbd\xd3\x6a\x08\x99\x19\x1e\xec\x4c\xc6\x63\x1e\x37\x34\x30\xd7\x99\x04\x8c\x86\x90\x01\x96\x42\x08\xcb\xab\x6c\xd5\x98\xbe\x09\x22\x30\x19\x8e\x24\x16\x57\x91\x72\x24\x50\xec\x71\x3f\x9b\x89\xe2\x61\xaa\xad\x18\x07\x2b\x32\xc1\x4a\xe7\x52\xa6\x0d\xb7\x09\x17\x18\xbe\x33\xd9\x00\xf1\xf2\x3d\x8f\x08\xd6\x43\x63\x2b\x37\x98\x6f\xe7\x9d\x94\xf3\x2e\x24\xb8\xe8\xce\xc1\x43\x55\x1a\xa3\x3b\xfe\x38\x83\x92\xec\x58\x87\xc3\x46\x5f\xae\xc0\x1e\x19\xcd\x96\x98\x64\xb4\x5d\x84\xfb\xc6\x04\x5b\x25\xf4\x94\xe1\x00\xca\x8c\x12\xe5\x80\x4d\xe8\xa3\x33\x19\x1f\x17\x9b\x1d\x83\x17\xd4\x48\xe7\x79\xd0\xe0\xe3\x60\x3d\x5e\x58\xe4\x76\x54\x2e\x17\x6e\x0b\x45\x5d\x6f\xbf\x08\x28\xd8\x9d\x66\x23\x68\x36\x1e\x59\xe4\x62\x35\x21\x30\xd8\x88\x35\x96\x3c\x52\xb4\x50\xc9\x81\x96\xe0\x42\x48\xfa\x80\x06\xdb\x62\xb7\x5d\x6b\xab\xb2\xec\x59\xdd\xe4\x9e\x37\xac\x8c\x22\xeb\x4c\x33\xc5\x87\x0d\x35\xb4\x3d\xb3\x8a\x84\x5d\xd9\x2c\x47\xb0\xba\x59\x49\x08\x4f\xa5\x81\x04\xe3\xb1\xad\x67\x45\x75\x84\x4b\x7c\x88\xee\x4e\x5b\x0f\x4e\xa5\xa5\x9b\x3a\x19\xc9\xa6\x84\x11\x87\x35\x42\xca\x73\x62\x1d\xaf\x4c\x78\x24\x34\x59\x82\x2e\xe0\xa8\xa8\x57\xe2\x58\x9e\x64\x1d\x5e\x1d\x29\xf9\x04\x6d\x2d\x8c\xed\xa4\x10\xf2\x97\x2c\xc0\x29\x8b\xf6\xc1\xe3\xe0\x7b\x1f\x5f\x85\x89\xed\x7b\x25\x1c\x3a\x59\xfa\xcb\x6c\x3c\xb8\x1f\x9c\x0b\xe0\x3c\x7d\xf5\x01\x56\x68\x10\x92\xd2\x20\xc2\xdc\xcf\xfa\xbe\x2c\x55\x3d\xa0\x75\xbf\x9f\x08\xe7\x8f\x44\x7c\xb2\x77\x70\x01\x15\x26\xac\x83\x9f\x4b\xe6\x2e\xa1\xf5\x1e\xe4\x62\xbe\x22\xe1\x36\x38\x7f\x08\x00\x98\x4e\x8f\x5c\x12\x08\x13\x89\x95\xa2\xbe\xc0\x37\x91\x40\xd5\x64\x00\xbc\xd0\x04\x80\x23\x69\x00\xa8\xf1\xb9\x42\xf2\x01\x60\xf5\x06\x00\xea\xd0\x63\x96\x72\x1f\x00\xc2\x6d\xd2\x45\xae\xac\xce\x23\x6f\x85\x2a\xe2\xd2\x60\x35\x05\x70\x43\xc1\xd9\x02\x4d\xa3\xb3\xee\xc5\x8d\xca\xc4\x1d\x00\xa0\xe6\x1a\x00\x16\xa1\x48\x78\x82\x0e\xbb\x3e\x00\x8c\x10\xf0\x0a\xcd\xe8\xde\xb2\xa8\x36\x9b\xb8\xdc\x88\xee\x08\xc6\x90\x6e\x3a\xc6\x67\x35\xd5\xd1\x49\xab\x30\xe1\x96\x2b\xa5\x8d\x35\x35\xb8\x54\xe3\x19\x53\x5d\x63\xb6\x53\xd1\x43\xa7\x5a\x47\x4e\x45\x33\x63\x0e\x31\x14\x86\x5e\x83\x2c\x0c\xe4\x0c\xec\x65\x26\x09\x89\xcc\x5f\xdb\x1c\x0d\x28\x86\x4c\xe4\x4d\x14\x57\x19\x82\x6b\x12\x92\xba\x6b\x0e\xdf\xb6\x96\x1d\xaf\x59\x3e\x4c\x35\xb3\x8a\x14\x9e\x89\x9c\xaa\x8b\x67\x9d\x3b\x9b\x4c\xa0\xa9\x83\xcf\x20\x7d\x5f\x87\xf9\x96\xa4\x86\x27\x68\x06\xd9\xde\x64\x74\x3c\x26\x7c\x7c\xc4\x7c\x09\x35\x95\xfa\xe5\x9f\x5e\x83\xaa\xc8\x88\x25\x96\xee\x3c\xa1\xb4\xd5\xcd\xba\x2e\xec\xe2\xa8\x1c\xf5\x42\x4b\x63\xc7\x31\xe0\x91\x8d\xc5\x94\xe2\x29\x02\xe3\x3a\xb8\x65\x8f\xd3\xee\xb8\x46\xb7\x13\x89\xcb\x1b\x2b\x98\x2c\xb1\x49\xc8\x9a\xe1\xaa\xab\x4e\xc7\x13\x1e\x1e\x00\x82\x68\xa9\x0f\xaf\x37\xec\x70\x87\xcd\xe5\x92\x89\x42\x44\xde\x76\x90\x03\x8c\x21\xba\xf7\x94\x48\x6b\x1a\xdd\x45\x4f\xbb\xd2\xe0\xa6\x33\x69\xbf\x5d\x14\x4d\x9a\xf1\xdc\xa2\x99\xd2\x19\x90\x38\xc0\xf8\x8b\x86\xd2\xc8\xd6\x01\x3c\x41\xf3\x5c\xc8\x01\x3f\x0b\x39\x12\x70\x3e\xe7\x73\x04\x3f\xcf\xdd\x95\x42\x2a\x07\xac\x5c\x91\x04\xe0\x41\x18\x4e\x65\x1f\x44\xf0\x8a\x63\x22\x95\x20\xe4\x63\x80\xc9\x4a\x24\x6f\x2a\x9a\x24\x84\xbc\x65\x67\xdb\x62\x14\x88\x61\x14\x38\x3e\x2e\x1b\xb8\x6b\x46\x3e\x50\x18\x42\x8d\x92\x58\x4f\xd2\x7c\xb2\x48\x16\x9b\x69\x11\x4f\x0f\xb3\x91\xb4\x12\x78\x84\x92\xc9\x68\xe5\x69\xb4\x23\x17\x80\x1a\x4e\x66\xd0\x04\x9a\x2c\xca\x15\x76\xac\xf8\x66\x06\x86\xd6\x71\xdb\x30\x3b\x59\x84\x8b\x21\x0c\x4e\xd4\x18\x17\x16\xc4\x71\xc4\xb3\x9c\xcd\x35\x5c\xce\x8d\xe6\xdc\xd6\x3b\xba\x53\xb4\x40\x38\x4c\x12\xf7\x47\x7e\x27\x65\xa3\xdd\x8e\x3c\x34\x43\x3a\xe0\x94\x58\x96\x43\xcc\xc6\x26\x39\x62\x57\x3b\xcd\x20\x50\x74\x15\x70\x35\x5b\xcd\x46\x55\x9a\x12\xc5\x64\xd4\xb1\x4b\x18\xcc\x81\x9a\x99\xfb\x53\x6b\x18\x1a\x29\x91\xab\x9d\xb4\x5e\xce\xca\xf9\xae\xf6\x20\x77\x07\x2f\xf0\x02\xeb\xa6\xa2\x3a\xd7\xa5\x23\x66\xaf\x4d\x8a\x3b\xe0\x18\x41\x6f\x36\xb4\xac\xac\x48\x59\x18\x1d\x98\xd8\x63\x44\xd7\xad\xa5\x46\x34\xb0\xb5\xa0\x13\x1b\xc6\x38\x19\x9b\xa0\x4a\xb0\x7d\xb1\xaf\x8e\xcd\x10\x3b\xd6\x8b\x61\xbd\xda\xcc\x01\xd0\xfd\x20\x9a\xc7\x8b\xd5\x86\x9f\x59\x47\xab\x5b\x4c\xb0\x69\xd6\x4d\xd9\x52\x0a\x18\x06\xad\x31\x9b\x45\xe8\x29\x4f\x1f\xc1\x3a\xf0\xa0\x14\x5d\xb1\xd4\x04\xb1\x26\x70\x9b\x38\xce\x6e\x41\xa8\xc2\x4c\x1c\xa6\x1b\x04\x1c\x52\x93\x51\x85\x90\x98\xec\xb8\x50\xea\x7c\x2c\x42\x87\x84\x67\xb2\xeb\xa1\x2f\x46\xc5\x10\xa6\x08\x02\x1a\xb3\xd1\x7c\xa1\xb5\x89\xb2\xdb\xb6\xbb\x19\x74\x70\xe0\xe9\xba\xec\xc4\x59\xdc\x31\xb3\x19\x3e\x9e\x56\x4d\x6b\x91\xe0\x30\x6a\xb6\x72\x28\x92\x0a\xbd\x5e\x11\x11\xb5\x71\x3d\xcc\xe3\xf0\xe9\x0c\x0a\x3c\x18\x1a\xd6\xb0\x57\xc1\x0e\x06\x04\x08\xae\xd5\xee\xb4\xd0\x8e\xbe\x30\x29\x12\xa8\x22\x68\x9c\xb4\xc0\x90\x55\x6c\x46\x9b\x64\x87\xa5\x2c\x90\xa4\x5b\x1e\x88\x7c\x3c\x9c\x53\x33\x8f\x25\xa8\xc9\x64\x53\xa7\xfc\x70\x9c\xc1\xd0\xf8\x00\xc1\xce\x82\x37\x17\x2b\x74\x17\x74\xbb\xf9\x3c\x52\xcc\xb0\x21\x14\x01\xdd\xa5\x0b\x18\x0b\x95\x6e\x02\xd7\x1a\x3c\x4d\x77\x75\xdd\xa1\x5a\x1b\xdb\x53\x28\xd8\x28\x5b\x7e\x2c\xeb\x02\x61\x2f\x6a\x3e\xf1\x8d\x05\xaf\x08\xb5\x1a\xc4\x1c\x91\xdb\x55\x48\x33\x20\x07\x24\xc7\xb0\x2c\x1c\x03\x18\x5e\xb2\x7b\x0c\x3b\x78\x88\xb7\x3a\xca\xfc\x86\xb6\x61\x3e\x65\x69\x2e\x03\x84\xe9\xce\xd0\x11\xdc\x49\xab\x1d\xc4\xef\x89\x56\xe4\x49\x18\x3e\xb5\x1b\x68\x6e\xda\x96\x3f\x07\x56\xe9\x21\x48\xed\x0d\x6b\xe2\x74\x5a\x8b\x72\x31\xa7\x63\xd7\x30\x04\x72\xbd\x95\x7d\x00\xc6\x52\xea\xf9\xf2\x6a\x32\x9b\x4d\xba\xa3\xbd\x62\x51\x7f\x5e\x72\xb9\x1c\xba\xeb\x3a\x53\x1a\x00\x67\x28\xbc\xa5\xba\x09\x92\xed\x76\x50\xca\x70\x36\xbc\x73\xba\x0e\x5d\x1d\xd0\xa0\x53\xb7\x4a\x54\x2e\xc8\xb6\x5c\x6a\x38\x46\x70\x93\xbd\x49\xae\xe1\x30\x70\x61\x87\x10\xd6\x96\x66\x05\xb2\xc3\x18\xb3\x83\xb8\x97\x11\x3f\xa1\x9b\x04\x0f\xa2\x43\x29\x19\xf4\x9e\xca\xfc\x03\x36\xd9\x4a\xfb\xa3\x4d\xc7\x84\xb0\x08\xbb\xc4\x34\x7c\x61\x6d\xad\x91\x21\xbb\xf7\xa4\xc5\xdc\x06\x5b\x3d\xcc\x33\x5e\x5b\xb3\x40\x68\x6c\x5c\x30\xf3\x84\x25\x79\x9d\x40\x62\x99\xcc\x74\xa4\x74\x04\xc4\x27\x45\x5e\x51\x0f\x07\x69\xcf\x7a\x31\x42\x1f\xac\x9c\xcb\x19\x6e\x4b\xe9\xde\xb2\x69\x24\x11\x3d\x4d\x7c\x09\x77\xd3\x75\x50\xa8\x9d\xc1\x10\x14\xdd\x89\x79\xa4\x2f\x96\x22\x82\x13\x9c\xcf\x94\xea\xd0\xf7\xdb\xa5\xde\x09\x86\x1a\x92\x4a\x49\x13\xb4\x4e\x67\x4c\xa8\x1c\xd0\xe3\x88\x5d\x6e\xf6\xa2\x3b\x9c\xe6\x2a\x6b\x78\x56\x5a\xd7\x69\x68\xd9\x59\xce\x71\x32\x01\xb8\x20\xd5\x0f\xfe\x71\x3b\xac\x74\x4c\x22\x04\x26\x5c\x93\xae\x78\x72\x01\xb1\x26\x58\x68\xcb\x65\xe4\x11\x60\xca\x52\x9f\x09\x27\x4a\x0a\xed\x60\x8e\x6e\x00\x00\x5d\xd9\x49\xf8\x92\x8d\x2c\x6e\xe9\x08\x60\x51\xbb\xae\xc2\x86\x98\xb1\x66\x14\x6f\xe1\xac\x4f\x53\x37\x68\xa5\x91\xcd\xe4\xc7\x28\xb0\x13\x6a\xc4\x32\x8d\x2c\xd7\x6a\xe5\x37\x8b\x55\x5e\x4a\x9d\x8d\x8f\xe6\x14\x7c\xa2\x70\x91\x6a\xd0\xbd\x41\x16\xa4\xc8\xaa\x91\xde\x24\x4d\x89\x45\xa4\x08\x28\x0a\x99\x93\x56\x1e\xda\xb1\x38\xc7\xb6\xa1\x8d\x57\x85\x51\xf2\x50\x1b\xf1\x40\x50\x75\xb5\x12\x91\x6c\x5d\xaa\x72\xe1\x6b\x73\xb7\x46\xc5\x4d\x1c\xd3\x89\xd7\x31\x30\xab\x04\x1d\x44\xe2\xdb\x71\x70\xa2\xfd\x22\x3d\xed\x8d\xc5\xa2\x0b\x9c\x20\x1b\x86\x4c\x49\x85\xf3\x2c\x91\xba\x0a\xa2\x4a\x78\xda\x4d\x56\x5c\x97\xec\x14\x6c\xe6\xad\x86\xae\x61\xa8\x12\x1d\xee\x15\x24\x55\x4a\xa6\xf0\x87\x9c\x9a\x27\x51\x26\xcf\x1c\xad\xde\xb5\x42\x41\x6c\xd9\x24\xd3\x33\xde\x5a\x27\xf1\x8a\xda\x28\x96\xef\x8a\xd4\xb2\x6c\xa7\x6c\xbd\xd9\x56\x2d\xd6\x1d\x8f\x81\x22\x0b\x9a\xcb\x24\x0b\x19\x90\x99\x86\xba\x8d\x39\xf3\x76\xca\x3a\x3e\x82\x61\x32\x6c\xf9\x13\xca\xd1\xbe\x1f\xad\x8a\x54\x3f\x6e\x88\x99\x88\xc4\xf3\xc8\x0e\x8d\x16\x6a\x15\x18\x50\x72\xbd\x52\x64\x90\xe7\xb6\x89\xf0\xbb\x4e\x22\x08\x64\x9f\x31\xa0\xc4\xa5\xd3\x76\x34\xa3\x11\x73\x92\x33\x38\x45\x51\x6e\xd2\xe0\x93\x85\x7f\xf2\x65\x76\xbb\x2d\x27\xdc\x1e\xe7\xf3\xb9\xc8\x35\xfb\xb9\xc2\x38\x0c\xd2\x32\xbc\x43\xb9\x34\x92\xeb\x5b\xcc\x94\x87\x81\xb9\x2e\x29\x46\x6d\x77\xbb\xc9\xd1\x67\xc5\x93\x84\x45\x91\x38\x0f\x6d\xb0\xea\x54\x07\x34\x1d\x81\x98\x46\x9c\x80\x9a\xcd\xb0\x4e\x66\x23\xc1\xd6\xf3\x5c\x63\x81\x2e\x13\x0b\x39\x05\x66\x82\xf3\xf8\x70\xe7\x91\xb1\x0b\xe6\x1e\xeb\xa1\x8c\x4d\x1e\x66\x3b\x77\x23\x8b\xab\xe9\xa1\x1a\x95\xc4\x58\x8a\xe7\xdb\x15\x9e\x47\x44\xd3\x11\xfe\x9c\xcd\x04\xd1\x75\xb8\xf9\x14\xa5\x1b\x44\x11\xc6\xfa\x41\x6b\x59\xc0\xd3\xac\x4a\x90\x8b\xc4\x60\x49\xfb\xb8\x69\x74\xa7\x99\xe7\x1b\x91\xe7\x54\xd4\x4c\x8d\xa0\x38\x20\x43\x07\x48\x72\x1b\x91\x13\x53\x9c\x8f\xc2\xf1\xb1\x09\xc7\xa3\x85\x81\x57\x05\x27\x0c\x91\x39\x7f\x62\x17\xc7\x5c\xd3\x14\x84\xb2\xac\x98\xaf\x68\x5a\x6c\x15\x88\x33\x78\x5e\x53\x63\x06\x30\xae\xb5\xc0\x27\xfb\x8c\xf1\xcb\xa6\xa0\x2d\x6c\x83\x8c\xa9\x23\xe6\x01\x76\x32\x9d\x18\xc9\x14\xae\x90\x72\x9a\x8a\xb1\x3b\x5b\xed\x89\x80\x25\x97\xc3\xf9\xc4\x8d\x13\x7c\x86\xf8\x58\xc1\x75\x64\x05\x8f\x4e\x2c\xb7\x0e\xc1\xc8\x6d\xe7\xf2\x88\x95\x9c\xde\x4e\xd5\xe6\xdc\x3a\xd4\x8d\xa6\x2e\xb5\x8d\x08\x32\xdf\xc8\xd4\x3a\xaa\xc1\xa6\x89\x3b\x46\xcf\x55\x85\x3c\xc5\x43\xa7\x85\x8c\x4c\x22\x3a\xd8\x0a\x67\xd8\xf1\xe4\x51\xf4\x70\xbc\x6d\x87\x61\xbd\x28\xb9\x52\x52\x17\xea\x9a\xac\x9b\x86\x0e\x10\x7b\x16\xc0\x75\x4b\x95\x10\xea\xaf\xd3\x96\xda\x43\x93\x99\x2b\x0b\xfb\x20\xf6\xf1\xad\x15\xc3\xc7\x28\xb4\xa9\xa4\x8a\x8e\x9b\x25\x13\x26\x89\xae\x88\x3c\x6e\x98\x52\x44\xe4\x6a\xec\xaa\xb5\x3f\x1b\x6a\x94\x19\x72\x94\xbb\x69\x2a\xfa\xa8\x79\xd4\x32\x6e\xad\x06\x3b\xc1\x18\xbe\xa2\x52\xb7\x5e\x90\x21\x2c\xe2\x90\x27\x23\x56\x35\x72\x48\x97\x1b\xce\x61\x46\x60\x5a\x7f\x94\x88\xf4\x4c\x99\x14\x8a\xb8\xd6\x42\x18\x54\x9d\xb4\x4a\xe9\xe5\x42\xd8\x18\x68\x75\x2a\x00\x14\x33\x87\x2e\x12\x22\x8c\x58\x72\x48\x84\x11\x6b\x7a\x54\x36\xd4\x06\x4c\x9a\x38\x41\xb6\x0c\x1d\xd1\x12\xb5\xdd\x77\xeb\x55\x97\x50\x07\xad\xc1\x59\x2a\xdd\xee\xbb\xd1\xa4\x6c\x5c\xd6\x11\xf2\xd1\x18\xda\x57\x1e\x1c\x21\x46\x5d\x54\x8a\xce\xa5\xea\x8a\xdf\x50\x98\x39\x43\xcc\xdd\xc6\xd9\x5a\xd5\x84\xc3\x67\x15\x2c\xe2\xa3\x05\x3f\xb2\x7c\x66\x12\x8b\x60\x5b\x2e\x67\xc4\x2e\xdc\xd0\xa3\xba\x0a\x36\x74\xc7\x10\x02\xa4\xe5\x20\x28\x8c\x3a\x05\x80\xf6\xe8\x1c\xa7\x64\x3c\x3b\x9d\x64\x0e\xda\x45\xea\x3e\x85\xab\x79\x69\xed\xd6\x0e\x98\xed\xb1\xcd\xfe\x18\xc1\x88\x59\x79\x13\xf4\x48\x4d\x99\x93\xd5\xc0\x26\x6a\xd8\xb5\x52\x02\x80\x4f\x31\x2e\xa1\x52\x28\x63\xd0\x29\xb5\x80\xbb\x03\x93\x62\x4d\x1a\xc2\xad\x43\xab\x6a\xa6\x1d\x23\xba\x6d\x5d\x82\x58\x86\x31\x93\x92\x20\x5e\x10\xa2\x08\xb1\x81\x1b\x61\x6c\xa5\x05\x19\x47\x0f\xb5\x3a\xd6\x6a\x2a\x2e\x1d\xe0\x83\x7a\xd9\x92\x60\xbc\x59\x8e\xd8\x15\xb4\xb2\xa7\x81\xb7\x2e\x59\xe0\xab\xf2\x09\x20\x56\xc7\x14\x53\x6e\xce\x06\x2c\x59\x47\x1e\xeb\xb9\xbb\x44\x94\xf2\xed\xb4\xf1\xe3\x13\x82\x0e\xf7\x9b\x48\x2b\xf7\x66\x32\x23\x11\x73\xbf\xe4\x55\x9f\x39\xb2\x35\x58\x4d\x0e\x5b\x11\x60\x5a\xee\x34\x20\x1b\x66\x19\x25\x35\xcd\x5e\xd0\x58\x54\xa6\x8e\x35\x1c\xfb\x58\x4c\xa6\x8d\x3f\x9e\x39\xad\xa3\xe6\xbc\x33\x75\x2d\x7e\xe5\x03\xd2\xf3\x6a\x60\x06\xfe\x0e\x59\xb9\x63\x7e\x7f\x12\x41\xb1\x19\xc1\xf3\xd8\x9a\x96\x3e\x8a\xe9\x23\x8d\xdc\x41\xb4\x5a\x21\x32\x43\x92\x4c\xb8\x36\x1d\x66\x88\x0d\x23\x0d\x8f\x03\x22\xa7\xd4\x0d\x10\x4f\x10\x7d\x18\xae\xc0\xc6\x04\x9c\xc9\x12\xf5\x4c\x3a\xeb\xbc\x77\x74\x62\x71\x37\x39\x81\x68\x32\x1d\x75\x6a\xbd\x99\x86\x13\x73\x3c\xb5\xa4\x8c\x04\xe3\xd6\x5d\x4f\x97\x28\x5c\xe3\x9a\xe2\xa2\x6e\x33\x19\x31\xf5\x6a\x75\x48\x6b\x8c\x4a\xea\xc9\x12\x9f\x29\x65\xb7\x5e\x84\xa7\xf9\xd1\x9f\x2b\x3b\x11\x9f\xb0\xfb\xa5\xdb\x25\xfe\x58\x1f\x47\xca\x02\x94\x08\xda\xcc\xc1\xa6\x09\x3d\xa2\xf1\x7d\x3f\xb3\x45\x9d\x9a\x64\xdc\x78\xb2\x4b\x68\x76\xbb\x3f\xea\xfe\x2e\x29\x08\xad\xc3\x66\xa3\x5d\x33\x8a\xca\x85\x20\xa0\xe3\x3c\xf1\x3b\x09\x69\xc8\x92\x71\xac\xd1\x64\xbc\x69\x3d\x2d\xb7\xdc\xae\xb5\xc9\x5d\x0d\xb1\x60\xa3\xf8\x63\x14\xf7\x54\x0d\xe9\x02\xd8\x25\xc6\xcc\x86\xda\x0b\x98\xa6\xfb\x46\x23\x2b\xb4\x9e\x55\x08\x60\x48\x9a\x6e\x31\x7d\x6a\x65\x84\x4f\x03\xa3\x71\x33\x3d\x0d\x3c\x26\x5d\xcf\x17\x5d\x05\x86\x27\x5c\xdb\xc3\x5d\x4b\x72\x27\xbd\xe1\x20\x2f\x29\xed\x55\x3a\x4a\x99\xe9\xe1\x74\x64\x98\x12\xa1\x60\x72\x8a\x8c\xac\x34\xc4\xf6\xf9\x61\x28\x9a\x30\x44\x93\x93\x7d\xaa\xfa\xf0\x0e\x1a\xf9\xc4\x78\x76\xda\x34\x30\xe1\xa4\x26\xb1\xa3\x38\x4f\x2c\x4c\x7b\xb1\x1e\x03\x12\x98\x4c\x92\xec\xf3\x70\x62\x1e\xf2\x84\x54\xd6\xe2\x01\x4d\xec\x85\xcf\x49\x07\xc6\xd1\xe5\x89\x48\x17\xf9\xc8\x6a\x0f\x49\x6a\x21\x7c\x8b\x40\x1c\xbf\x5e\x12\x5c\x31\x3a\xe4\x65\x17\x4f\x47\x28\xbc\x6b\xf2\x09\x66\x2d\x49\x6c\xd5\x24\x81\x40\xca\x40\x5f\x93\x73\x50\x8f\xc4\x7a\x19\x17\x21\x2d\xd3\xa7\x71\x67\x33\x76\xbd\x08\x58\x7f\x2c\x93\xf1\xd2\xdb\x57\xde\xcc\x94\x39\xd2\x59\x0c\x43\x2c\x9a\xc2\xb8\xce\xbb\xf0\xd6\xb2\x58\x5a\x9b\x37\x73\xd2\x14\xa6\xa7\x6e\xdf\x60\x01\x7e\x64\x99\x04\x6c\x4e\xc9\x70\xe6\xb6\xbb\x25\x8d\xd0\x95\x73\x88\x5a\xcd\x58\x69\xae\x8b\x1c\x18\x90\x2b\xab\xa5\x4d\x57\x4e\x2b\x83\x10\x20\x9a\x17\x93\x9e\x70\x54\x28\x4d\xcd\x36\x6b\xcd\xe4\xb7\xa3\x20\x9b\x8c\x94\x03\x12\x81\x7c\xdb\x50\x45\x1e\x14\x92\x42\xbb\x08\x97\x8f\x80\x44\xd4\xa7\x20\x9c\xb3\x65\x55\xe5\x04\x4e\x64\x41\xa8\x27\x07\x2b\xf7\xbd\x18\x17\xdb\xe1\x21\xab\x8b\xd4\x24\xb7\x8e\xee\xe3\x4d\xbe\x70\x1c\xdd\x2e\x0d\xcb\x20\x17\x80\xd7\xad\x40\xb0\x75\x2d\x1f\x05\x47\x6d\x4d\xe6\x9b\x14\x38\x34\x27\x95\x73\x04\xd9\xb5\xb5\x61\x2a\x87\xb1\x08\x30\x77\x33\xe2\x6b\x72\x5e\x8d\xda\x80\x06\x87\x75\x74\xc0\x39\x12\x17\xa1\xb9\xb9\x35\x10\x78\xbb\xe0\xc7\xc1\x0c\x75\x93\xd8\xe6\xb9\xf9\x4c\x0b\xa2\x53\xb7\xa5\x67\xbe\x8c\x14\x26\x31\x8e\x73\xd5\xd7\x1d\x84\xd4\xa6\x24\x92\xca\xdd\x4a\x3f\x92\x54\x84\x66\x93\xf0\x54\xea\x3a\xe2\x27\x25\xe3\xa8\x24\x99\xf2\x56\x99\x7b\x87\x31\x51\xad\xf4\x08\x63\xd5\xb6\x98\x93\x81\x60\xe5\x49\x0d\xeb\xa8\xdf\x08\xa5\xb8\xca\x50\x0b\xa6\x21\x6c\x36\x01\xf4\x82\x59\xe0\x53\x5a\x64\x99\xc3\xdc\x85\xe1\x16\x89\xf0\x99\x6f\x36\x0a\x64\xac\xf5\xf9\x31\x01\x72\x4b\x0d\xd1\xb9\x65\xf9\x59\x3b\xac\xf2\xb0\x56\xed\x31\x2b\x91\x3c\xc7\x4f\xeb\xa4\xcd\x46\x01\xbd\x90\xda\xa3\xca\xac\xe8\xb0\xe6\x5a\x47\x19\x85\xee\x66\xd9\x19\x87\x43\x93\xca\x1b\xc2\xf2\x83\x62\x5a\x8c\x12\x58\xd8\xb2\x7e\xdb\x95\x50\xb6\xa4\x87\x1a\x5c\x12\xc7\xc0\xf7\x43\xe0\x9c\xa4\x02\x22\x60\x18\x62\x4e\x7a\x57\xee\x28\x84\x56\xc4\x89\xc2\x70\xd1\x5e\xf3\xf7\x28\xb1\xd4\x12\x3f\x0d\x74\x7d\xe3\xb8\xe8\x12\x57\x73\x42\xcf\x71\x72\x4c\x19\x2c\x20\x12\x9b\x2e\x46\xd0\x74\x01\x15\x55\x38\x8f\x35\x40\xe9\x02\xce\x4d\x23\x7e\xba\xf1\x28\xca\x2b\x61\x01\x34\xd8\xa4\x5b\xe9\x6a\x61\xea\xe9\xa8\xca\x79\x89\x3f\xd0\xb8\x16\x48\x2a\x20\x53\x48\xe9\x40\xef\x5b\xc1\xf9\x04\x24\x3e\x87\xe6\xc1\x3a\x3a\x79\x04\x6e\x1d\xe4\x10\x94\x8c\x55\x45\x8c\x64\x71\x10\xc8\x26\xaa\x7f\xaa\x0c\xdf\xe3\x33\xd9\x20\xa2\x1d\xc4\x2a\xf3\xa2\x35\x02\x83\x60\xe6\x07\x76\x8f\xe2\x61\xa2\xae\xb0\xbc\x64\x74\x70\x8a\x4d\x52\xa5\xcb\xb5\x4a\xb9\x35\x7a\x9a\x8e\xd7\x4b\xb9\x8e\xea\x53\x95\x70\x6e\x63\x1c\xb0\x4a\xe5\xb3\x51\x57\x54\x1c\xc2\xeb\xe2\x3e\x04\x7c\xb7\x2d\x08\x18\x80\xa9\xa9\xa4\xe4\x7a\x99\x2e\xa4\x25\xc6\xd7\xcc\x89\x0e\xb9\xfd\x14\x58\x5e\x3a\x33\x1c\xa4\x59\x20\x7c\xa4\x54\xa2\x3f\x8f\x77\x7b\x8a\x25\x1a\x4a\x5d\x08\x5d\x93\x4f\x5c\xc5\x5a\x40\xb6\x19\x1e\xad\x06\x80\xdc\x8a\xd7\x29\x58\x55\x88\xd6\xd6\xaa\x49\x08\x99\x43\x82\x21\x21\xe8\x2d\xe7\x8b\xc4\x09\xa9\x6c\x1d\x48\x64\x68\x84\x51\x18\xeb\x51\x98\x22\x30\xb3\x65\x52\xba\xc3\xda\x56\x5e\xcc\x45\x7f\x5c\xe4\x5e\xb2\x99\xe5\xb6\x9c\x60\x93\x16\xa5\xe2\xc5\x42\xd4\xc7\x9c\xc5\x71\x5a\x23\xe9\x64\x61\xd3\xc0\xa0\x95\xac\x52\x70\xc7\xc9\x28\x99\x07\xdc\x84\x9a\x13\x45\xd9\x4e\xc5\x15\x96\x41\xe9\x11\x36\x66\x2e\xbb\xc3\x08\xe0\x0c\xb9\xbd\x5f\x4b\x08\xe2\x42\x52\xce\xee\x76\x66\xd1\x8c\xc2\x02\x99\xad\xc5\x70\xd4\xb8\xf8\x8a\x9c\xca\x0b\x8a\xdd\xb0\xf3\x84\x63\x8b\xe1\x7c\xea\xfa\xa5\x24\xf9\xd9\x49\xe2\x89\xd9\x04\x5b\xec\x15\x58\x50\x17\x26\x63\x56\xf5\x29\x69\x4d\xd2\x92\x74\xbd\x12\xa7\x1d\x1a\xc2\x0d\x3e\x75\x56\xbe\xa6\x89\x2b\x8a\xc2\xc7\x9e\xbc\x19\x26\xf3\xc9\x78\xaa\x26\x87\x03\x74\x00\x0c\xad\x48\x0d\x27\xab\x40\xb5\x0c\x97\x00\xa1\xcc\xc9\xbe\xcf\x4d\x0f\x13\xc8\x81\xc1\x5e\x25\x69\xdf\x22\xfc\x04\xd6\x7c\x0b\x2b\xab\xec\x28\x9c\x70\xa5\x3c\x74\x0b\x42\xdc\x4b\x8d\xa7\xa8\xe1\x26\x58\x4a\x4c\xa3\x84\x08\x99\xf0\xdb\x80\x46\x09\x2d\x81\x85\x32\x5f\xca\x48\xee\x14\xa2\x61\xeb\x11\xb5\x87\x91\x5d\xda\xf9\xc8\x0a\xc9\xe2\xe8\x10\x94\x10\x6e\x4f\x86\x6d\xe6\x01\x64\x21\x90\x75\xc1\x15\x41\xb2\x43\x0b\xbe\x73\xec\x99\x13\x23\x7a\x82\xe9\xc8\xc1\xca\xc0\x61\xd9\x18\xe8\x08\xa8\xb3\x9c\x76\x53\x80\x72\x7e\x2d\xe2\x11\xb3\x20\x67\xa3\xad\xb9\x58\x85\x21\x6f\x72\xfb\x8a\xe6\xa6\x18\xe1\xfb\x6b\xc1\xce\x7b\x0d\x6a\x31\x1a\xad\xda\x30\x8d\x57\xbc\xd4\xce\xba\x69\x34\x01\x5b\x42\xd7\x08\x55\x89\x8a\x78\x5a\x1d\xa1\xb9\xee\x52\x1c\x19\x47\x65\x1e\x30\xe5\x71\x01\x59\xb6\x23\x2c\xd2\xa1\xbf\xc0\x0c\x84\xe2\xc8\x42\xaa\xe5\xcd\x51\xcd\x02\x7d\x49\xa3\x45\xda\xe1\x43\xf9\xe0\xb8\xab\x65\x65\x94\xca\x9c\x26\xb6\x92\x9f\x6e\xdd\x68\xaf\x19\x82\x6e\xad\xfd\xf5\x41\x49\xf1\x1d\x0b\x08\x29\x33\x08\x67\x49\xa3\x5d\xc5\xae\xd2\x6c\x31\x59\x82\x1d\x0b\x96\xac\x3a\x75\x57\x1d\x8d\x94\xad\xe8\x96\xdc\xe2\x70\x2c\xe7\xc5\x26\x73\xe8\xb9\x62\x6e\x98\x76\x3c\xd9\xe9\xdd\xe8\x34\x41\x67\xde\xc4\x6c\x70\x40\xed\xeb\x64\x8b\x02\x3e\x5b\x1f\xd0\x96\xac\x8a\xc6\x0d\x10\x4d\x56\xba\x09\x6e\x26\x8b\xdc\xe2\x66\x6c\x58\xb1\x7b\x8d\x24\x6d\x44\xb0\xc0\x52\x98\x67\x9b\xe9\x34\xd6\x33\x28\x27\x93\x38\x20\x80\x6a\x8a\x09\xd8\xd3\x93\x31\x6d\xe3\x64\xb6\x3c\x79\x05\x65\xd6\xba\xc5\x2a\x9b\x26\x3c\xa0\x2b\x3b\x9d\x16\xf0\x69\x19\x39\x22\x08\x0f\xc7\x23\x94\x37\x0c\xb3\x4e\x72\xf9\xb0\x8d\xc7\x61\x69\x1f\x32\xc3\xa8\xec\x7d\xc9\xef\x08\x24\x0f\x37\x0d\x49\x87\x6e\x70\x62\xf3\x31\xbc\x62\xf3\xda\x4d\x77\xe5\xd4\xa7\x12\x7c\x8b\x4c\xda\x0d\xd4\x6e\x88\x94\x5e\xe3\xd8\xfe\x88\x4a\xfb\x6c\x82\xc1\x28\xd2\x42\x5e\xe7\xe0\x13\xe6\x34\x16\x97\x30\x27\x6d\x2c\xc8\x6a\x89\x23\x47\x8f\x3d\x8f\xcc\x8e\xdb\x14\x61\x36\xdd\x7e\x73\xa8\xf0\xba\xa0\x4b\x23\x9e\x97\x2b\x79\xba\x64\xd8\x15\xa2\xac\x60\xd7\xeb\xf0\xf2\x08\xcf\xe6\x53\xab\x16\xa6\xcd\x01\xad\x85\xb6\x8a\x94\x12\xc2\x71\x67\x59\x4e\x3c\xac\x1a\x0f\x97\xf4\x66\xd3\x18\x9c\xa1\x9f\xbc\x61\x06\xed\xa0\x34\xdd\x94\xda\xd0\x8a\x8b\x26\x64\x67\xae\xb0\x5f\xe4\x90\x66\x19\x41\xa6\x2c\x4f\x30\xbf\x1d\xad\x8a\xd5\x3e\x3e\xed\x40\x47\x85\xcd\x0e\x9d\x1e\x7d\x0a\x07\x06\x04\x6a\x75\xe4\x1e\x46\x76\x8d\x31\xb5\x0a\x73\x08\x47\x8c\x09\x6c\x2b\x4e\x16\x93\xa6\x5c\x63\x1c\xaf\x12\xfb\xe3\x16\x8d\x4b\xc4\xdf\x62\xa6\xcf\x85\xa7\x04\x09\x42\x78\xc9\x25\x04\x9c\x8f\xc4\x3c\x44\x66\x52\x01\x35\x1e\x71\xa8\x21\x32\x0e\x59\xb3\x6a\xe1\xa2\x26\xf3\xf9\xda\xaa\x31\x47\xa2\x60\xd5\xf1\x6a\x64\x1a\x66\x7a\xc8\x04\xce\x66\x88\x16\xac\x76\x42\x64\x7a\xa3\xb9\x8d\x60\x2c\x8c\x09\x01\x63\xe8\xb8\xaa\xb0\x1d\x9b\x1e\x13\x46\x91\xc5\x7a\x7a\x44\x30\x1b\xd0\x0a\xb7\xd7\x4e\xe4\x88\x03\x15\x3f\x77\x7d\xb8\x9c\x48\xfb\x45\xb2\x65\x4d\x62\x63\xa0\x33\xcd\xa8\xc6\x35\x63\x10\x43\xcc\x10\x37\x56\xc5\x34\x05\xd7\x88\x4b\x80\xb9\xc7\xad\x33\x6f\x6d\xc0\x98\xf2\x76\xb6\xa0\x47\x32\x60\xb8\xc9\x32\x9a\x39\xbe\x0b\x4e\x92\xb7\x40\x49\x26\x56\xa7\x9b\x55\xb1\xa5\xf4\xcc\xd2\x48\x3c\xe6\xbc\xd6\xe0\xf8\x06\x59\xcd\xb8\x86\x52\x1d\xc2\x68\x3b\x43\xd2\x66\xb2\xef\x1f\xb7\x61\x7d\x5c\x4b\x7b\x73\x96\x96\x2b\xa2\x4d\x16\x24\x52\x6d\x1d\x68\x3e\x6c\x40\xce\xaf\x4f\xac\xa8\x49\xdb\xd6\xd9\x37\x26\x01\x81\x85\x4f\x68\xe4\x72\x0a\xad\x35\x33\xb7\x11\x19\xc8\xba\x46\xd5\x88\xc7\x42\x27\x27\xc9\x47\x84\x54\x9d\xe6\x86\x9a\x20\x05\x4e\x84\xfe\xb8\x31\x13\xfe\x60\x36\xcb\xa5\xb6\xe3\xec\x4d\x59\xa2\xd8\x84\xa2\x39\xc5\x10\x4d\x46\x97\x39\x3a\x4d\xa9\x46\x9a\x13\x4d\x36\x9f\xed\x76\xc3\xd9\x0a\xaa\x36\xda\x08\x25\xac\xd0\xa8\x48\x65\xa1\x8e\xa9\x69\x23\x22\x9d\xd2\x8e\x77\xbc\x01\x4b\xdd\x6c\x36\xdc\xbb\x52\x97\x63\x9b\x1c\xb5\x67\xa1\x21\xc4\x5a\x6c\x9f\x64\x46\x99\xce\x56\xe6\x4a\xcb\xa7\xcd\x82\x17\x4f\x25\x5e\x71\xd5\xb2\x36\xd9\x11\xb4\x3b\x1c\xdb\xd9\xc4\x64\x39\x59\x46\x36\xce\x4e\xaf\x94\x24\xd2\xfd\xf4\x30\x81\xa6\x6e\xad\x65\xc3\xc2\x9e\x4b\xfb\x21\x88\x09\x44\x4b\x81\x94\xcc\xcc\xb1\x84\x8d\x36\xfc\x48\x04\x65\x14\x4d\xe3\x6a\xba\x15\xa5\x44\xec\xa4\x86\xa5\xcd\xb3\xdc\x4e\xae\x94\xee\x4d\x65\x9c\x91\x63\x02\x50\xc2\xa8\xa1\x66\xde\xd4\x45\x29\x63\x3c\x92\x7c\xcc\x15\x85\xb9\x5e\xd7\xba\xee\x90\x47\x26\x72\x56\x00\x5e\x35\xa4\x92\x9a\x12\x05\xf8\x0c\x60\xc0\x5d\x2a\xa7\xa1\x9d\xce\x01\x41\x82\x89\x34\x3b\xb2\x7d\x9d\x5b\xb4\x53\xbc\x74\x7d\xa2\xde\x26\xa3\xc2\x1c\x71\xa4\x8d\x27\xf0\x54\x8d\x86\x5e\x2a\x6a\x32\x82\x00\xd4\x9f\x4f\x89\xad\x20\x39\x24\x91\xe4\x9d\x0f\x54\x7f\x8f\xe3\xe2\x04\x82\x33\x9b\xdf\x6d\xf2\x64\xa7\x60\xd5\xa8\x3d\x21\x13\xb0\x2e\x75\x26\xd0\x39\x25\x3e\x79\x89\x23\x39\xae\x37\x93\x72\x83\xe5\x7d\x7b\x9d\x8e\x18\xbb\x09\xfc\xc3\x62\x17\x44\x89\xb4\xf7\xd0\x71\x6a\x25\xca\xa9\xdd\xc8\x95\xb7\x4a\x76\x3a\xd6\x1a\x19\x93\x27\x5b\x1f\x5d\x99\x95\xb8\x1e\x16\xc5\x18\xc2\x3c\x6f\x33\xca\x25\xfb\x40\xfb\xa7\x35\xaf\x06\x6c\xc4\xcf\xf2\x16\x9d\x4d\x94\x8d\xeb\xa6\x65\x18\xae\xb7\x64\x53\x2f\x8e\x23\x3d\xe4\x67\xf6\x06\xde\x9a\x2a\x11\xd3\x93\xd4\x18\x49\xa6\x87\xba\xe0\x40\x81\x09\x3a\xe9\xe2\x19\x5e\x8e\x38\x60\xa9\x5c\x26\x1c\x67\x0c\x97\xb0\x15\x5a\x2c\x27\x39\x55\x4e\x96\x38\x1c\x8f\xd6\x06\x27\x79\xa5\xd2\xb0\x53\x6d\x5b\xa2\x07\xbf\x39\x6e\xc2\x71\x2d\x14\xb3\x15\x01\xd5\xd3\x7a\x9f\x25\xaa\x27\xc4\x59\x6a\xcd\x11\x25\x51\xe2\x31\x70\x56\xac\xa3\x01\x99\x9c\xce\x09\xb8\x9e\xd3\xdb\x91\xb2\xd2\xb2\x00\x1f\xef\xb1\x6d\x40\xb6\x0e\x16\xf8\xd8\x8c\xf0\xd3\x59\xba\x2d\x9b\x55\x6e\x10\xc2\x08\xa3\x0b\x4b\x41\xab\x83\x64\x60\xa3\xa9\x67\xb4\xf8\x06\x6d\x3a\x45\x69\x51\x61\x88\x60\x87\x21\x7a\xa2\x37\xd9\x88\x38\x3a\xc5\x69\x36\xe3\x70\xaf\xa9\xb9\x51\x64\xba\xe5\x7e\xac\x72\x52\x6b\x8c\xb2\x64\x23\x35\x79\xa0\x8e\xeb\x7d\xe6\x07\x22\xd5\x20\x34\x38\x6e\xe8\x63\xa6\xfa\xda\x0e\x08\xc5\xce\xd6\x45\x30\x63\x90\xbd\x3c\x71\x31\x17\x73\x82\x08\x49\xf7\x99\x0c\xcd\xb6\x53\x6c\x19\x0a\x88\xa1\xa5\xac\x97\xba\xd2\xc1\x4d\x17\x2e\xc7\x99\x13\x01\x33\x79\x64\x39\xcd\x73\x2f\x6c\xb7\x9e\x23\x9a\x61\xcb\xe4\xac\xbd\xa4\x38\x28\xd1\x91\x14\xcb\xdd\x78\x6a\xcf\x52\x68\xd9\xf2\xd3\x49\xbd\x3f\x4e\x10\x0c\x71\xa5\xa9\x79\x64\x17\xc3\xa4\x98\x76\xeb\xd2\x24\x62\xab\xb0\x4e\x89\xa6\x0a\xb6\x1e\xcb\xcb\x05\x30\x32\xf8\x98\xb4\x25\xd7\x92\x06\x52\x2d\x3c\xbe\x2b\x27\xe8\x36\x9b\x82\x6d\xa6\xb2\x93\xe1\xa1\xc8\xd4\x6a\xa1\x4e\xeb\xd1\x78\xb2\xea\x4e\xc2\x74\x3c\x9f\x65\x2d\x86\x9e\xf6\xeb\x61\xac\x8f\xe1\x52\x2b\x4c\x26\x48\xe4\xc3\xda\x52\xe7\xae\x9a\x58\x87\xdc\xb0\xe2\x83\x81\x71\x9d\xd3\x46\xd6\xd8\x3b\x6a\x6b\x26\xf7\xb6\xeb\x44\x43\xa1\x6a\x3f\x16\x99\xc9\x58\xaa\xdc\xad\xba\x18\x0f\xfd\x53\x47\x6d\xb4\xd8\x42\x02\x81\x9e\xc9\xb3\x82\x9e\x17\x85\x30\xad\xe9\x85\xe7\x0c\x0d\x07\xda\x3a\x3c\x77\xdc\x29\xcd\x49\x1c\x36\x79\x58\x9c\xd0\x52\x1f\x65\xf9\x51\x39\x98\x15\xe9\xd4\xba\x40\xa8\x02\x6f\xca\x3b\x58\xee\x1c\x66\x83\x90\xca\x12\x51\x9c\xa9\xbb\x4a\xa9\xd1\x81\xb7\x26\x59\x64\x08\x24\x6b\xba\x53\x03\x9d\xc0\x8a\xe2\x88\x33\x1f\x00\xaf\x71\x60\x74\x5b\x2e\x58\x68\x9e\x92\x3b\x68\x93\xc3\xab\x84\x29\x99\x8a\x26\xea\x64\x71\x28\xcb\x69\xa6\x71\x9b\x59\xdc\xe9\x0c\x29\xf3\xb3\x02\x84\x7b\xc5\x98\xa1\x46\xb5\xd7\x5a\xf6\x74\xa8\x0f\xb9\xd0\x2d\xf6\x29\xc4\xd4\x50\x5b\x0a\x27\x7d\xd1\x2d\xba\x53\x1b\xd4\x9b\x34\x52\x97\x8b\xf1\x78\x9d\x9a\x0a\x01\x09\x29\x49\x2d\x4f\x2e\xbb\x82\x5d\xab\xcb\x49\x7d\xb2\x5e\xeb\x35\x98\x77\x6d\xb3\x3f\xc6\xa6\x35\x73\x16\xeb\x04\x77\xb6\xad\xa8\xe7\x14\x7a\x8c\x0e\x72\xd7\x45\x46\x43\xeb\x1c\x39\x99\x6f\xe1\x70\x23\x1f\xbd\x0e\xdb\xa9\x66\xbc\x56\x10\xd3\x5a\xd4\xba\x7e\x8c\x4c\xb6\xc1\x47\x18\xc4\xcf\x85\x19\x2d\xb8\x5a\xe1\x6a\x08\xb5\x45\xb5\xf5\x8c\x94\xc6\x94\x37\x57\x4f\x01\xeb\x55\xeb\x8d\x71\x90\x76\xc7\x0d\x38\x4c\x12\xe4\x68\xce\xda\x23\xb1\x86\xd0\xa9\x72\xe4\xb1\x93\xbf\xc2\x1d\x1b\x13\x9c\x9c\xd7\xf5\x49\x43\x2b\xb0\x01\x64\xe2\x20\xa0\x2c\x4c\x29\x16\x14\x94\x39\xe5\x4d\x87\xb4\x29\x94\x72\x69\x19\x43\xc3\x9f\x64\xc2\x52\xd8\x9f\xe6\x9e\x5f\x6e\x96\x35\x23\xd1\x18\x82\x9a\x4d\x01\xcf\xa7\x8c\x87\xe6\x07\x7c\x77\xe0\x76\x56\x22\x1f\xf7\x5b\x76\x6b\x8d\xc1\xbc\xa3\x96\xc9\xe5\x1f\xda\x6a\x10\x0b\x8d\x74\x6d\xa2\x9d\x5a\x07\x65\x01\x00\x80\xdf\x28\xcc\x9a\x55\x22\x73\xa3\xc4\x52\xb2\x3c\x59\x6b\x06\xb1\x64\x70\x12\x29\x1a\x5d\x68\x00\x5d\x68\x62\x63\x50\x74\x2b\xed\xf5\x46\xda\x83\xd3\x42\x03\x88\xb4\x07\x8d\x64\xab\x11\xe9\x03\x00\x48\x03\x51\x8c\x00\xb1\xe6\x0c\x62\x69\x79\xb5\x45\x95\xdc\x4a\x23\x20\xee\x41\x2b\x9e\x90\x56\x54\x91\x46\x34\xe4\x56\xa4\xb2\x4e\xa2\xb2\xd3\x92\x44\x9a\x25\x95\x35\xe2\x72\x6b\x4f\x89\xf3\xf9\x2c\x50\x75\x43\x52\x84\x11\x69\x72\xdc\xf7\x0f\x4b\x9d\x2c\x75\xec\x0a\x76\xed\xca\x1b\xdc\x0f\x2a\xaf\xad\xe0\x3c\xb6\xc3\x74\x70\x3f\xd0\x6a\xef\xfe\x06\x45\x6f\x40\xed\xdf\xa0\xc8\x70\x72\x83\x8c\xbf\xe0\xe8\x17\x6c\x78\x03\x21\x08\x82\x7c\x1f\x65\x60\xa7\xbe\x17\x67\x3e\x7c\xf4\x8a\x32\xcc\xd2\xf7\x88\x87\x0f\x93\x1f\x69\xfd\x19\x4f\x3d\x1f\xbf\x20\xd3\x5f\x86\xe3\xef\x22\xf0\xc3\x0a\x66\x69\x40\xbd\x6f\xea\x87\xd5\x4d\xe1\x1d\x7f\xb9\xe4\x67\x3b\x43\xdc\xdd\x7b\x0f\x5e\x9b\x67\x45\x55\x3e\xfe\x7e\x6e\xfd\x25\xbb\x8f\xc3\xed\x97\xf0\xdb\xb7\xfb\xd7\x77\xcb\xdd\x17\x77\xbf\x0f\xea\xd2\xbb\x29\xab\x22\x74\xaa\xc1\xd7\xeb\x3d\x69\xae\xb7\x0b\x53\xef\xf9\x2e\xbb\xea\x7e\xf0\xf7\xbf\x7b\xa5\x78\xce\x30\x36\xb8\xff\xfd\x68\xc7\xb5\xf7\xe5\x27\xe4\xdb\xdd\x7d\xf5\x40\xb2\x40\x51\x69\x4d\x7d\xfc\xfd\xdb\x7d\xf5\x70\xbd\x9c\xfd\xef\xd7\xd2\xc7\x97\xfa\x07\xe2\x15\xf0\xaf\xc8\x6f\x8f\x9f\xdf\x35\xf6\xdf\xd5\xf9\xaa\xb1\xff\xde\x9d\x6f\x1a\xfb\xef\xe2\x7c\xd1\xd8\x7f\xa7\x7f\x70\xcf\xd8\x7f\x1f\xff\x5f\x76\xcd\xd8\x2b\x39\x3c\x80\xc7\x97\x1b\xc3\x5e\x97\x13\xd7\x5b\x3e\x5f\x24\x86\xff\xf6\xf8\xbd\xeb\xbc\xc2\xfd\x3f\x79\x9d\xd7\x6b\x8a\xe4\xab\xb1\xfa\x75\xd4\x13\xfb\x97\x5f\x83\xf3\x9a\x9c\xf2\xbe\x37\xff\x8a\x1b\xb5\x5e\x13\x90\x1f\xff\x9d\x97\x62\xbd\xa6\x24\x3c\xfe\xeb\x2e\xb8\x7a\x8d\xd7\xfc\x30\xe0\xff\xca\xbb\xaa\x5e\x53\xa2\x5f\x8f\xfd\xf8\xb7\xc7\x7f\xe7\xcd\x52\xaf\xe9\x5a\xdf\xef\xe1\x5f\xbe\x24\xea\x35\x5e\xf6\x75\x7f\x26\xcf\xfd\xf9\xb7\xdc\xed\xf4\x7a\x8e\x9e\xaf\x71\xfa\x9f\xbc\xa8\xe9\xa3\x39\x87\xff\xe3\x3f\xfe\xd7\xcd\x7f\xdc\x70\x4f\x39\xad\xcb\x9b\x2a\xf0\x6e\xec\xaa\xb2\x9d\xe0\x26\xf1\xaa\x20\x73\xef\x6f\xaa\xc0\xae\xae\x65\xde\x05\xe0\xe9\xb2\xe5\x9b\x2a\xbb\xb1\x6f\xd6\xde\x56\xcd\x9c\xc8\xab\xfa\x85\xc1\xb3\x93\x87\x1e\xe5\xff\xef\x92\x61\xf2\xa6\xbd\x5c\x05\xe5\xba\x59\x5a\xc2\x17\x24\xd7\x9f\x33\x54\x1c\x3a\x5e\x5a\x7a\x37\x22\xa7\xfd\xaf\x9b\xff\x80\xff\xd7\x4f\xcf\x1c\x9e\x33\x8c\x3f\xad\x4b\xd5\x6d\x71\x8b\xdc\xdd\x7d\xbb\x7d\x93\x65\xff\xf5\x5a\x74\xb9\xfb\xf7\xf7\x6f\xcf\x77\xc8\x3e\x5c\xa8\x3c\xbe\xed\xf2\x7d\x78\xf7\x7b\xf1\x78\xb9\x99\xf3\xf1\xf1\xb1\xf8\xc7\x3f\x8a\x7b\xef\xa1\x3c\xb3\xff\x58\xdd\x7b\x0f\x7f\xdf\xc5\x75\x19\x10\xf5\x6e\xe7\x15\xaf\x2f\x33\xf5\x1e\x9a\x22\xac\xbc\x5b\xef\xe1\xef\x17\xc4\x97\x2e\x5f\x00\xfb\x25\xf4\x93\xe2\x8b\x55\xbe\x64\xac\x0a\x13\x2f\xab\xab\xcf\x9b\xf7\x95\xdf\xc3\x71\xae\x3b\x23\xfa\xd6\x03\xe4\x75\x19\x68\xd9\x7b\xf6\xce\xb2\xfa\xa4\xf1\xdf\x3e\x2d\x85\x1e\xab\x2f\x9f\x33\xf2\x58\xdd\x97\x5e\xf5\x8a\xd7\x57\xc2\xb8\x1f\xf6\x03\xd0\xf3\xe0\x7b\x95\xe8\x95\xa5\xed\x7b\x6f\x38\x08\xff\xf6\x8e\xbf\xdb\xea\xc1\xb5\x2b\xfb\xee\xcb\x93\xec\xae\xef\x67\x24\xa5\x97\xba\xe7\x2b\xb9\xdf\xdc\xd0\x7a\xce\x37\x71\xbe\x75\xb8\xea\xbd\x19\xfa\xe8\xa5\xd5\x22\x2c\x2b\x2f\xf5\x8a\xdb\x41\x72\xa1\x3a\x78\xcb\xc4\xdd\x7d\xf1\xf3\xcf\xde\x43\x96\xde\x0e\x7a\xf4\x83\xd7\xd8\xef\x3e\xc5\xe3\xc4\x59\x79\xc6\xe2\x7a\xbd\x04\x1e\xb6\x61\x4f\xf4\xbe\xba\xfb\x1c\xdc\x2b\x8a\xac\xf8\x14\xbc\x67\xf3\x52\xf8\x21\x37\x7e\xb6\xdb\x7d\xca\xcf\x6d\xf5\xa2\x7d\xd5\xdf\x9e\x54\xef\x4b\x75\xf7\xf3\xcf\xd5\x43\xe1\x25\xd9\xd1\xfb\xc1\x5e\x5f\x6f\xd0\x7e\x42\xd1\x4b\xf5\xd5\xd5\xc0\x1f\x94\xff\xa2\xfa\x6f\x27\xc7\x25\x07\xf3\xa5\xee\x6d\xfb\x0f\xbd\x7a\xd5\xf6\x52\x77\x6d\xdb\xcb\xe0\xdb\xdd\x77\x2d\x0b\x13\x56\x2f\xd6\xc2\x39\x27\x53\x29\x6f\xec\xd4\xbd\x29\xb2\xa6\xec\xcd\x47\x6f\x4e\xdc\x30\xf1\xd2\xde\x47\x2e\x6f\xb2\xdd\x4d\x58\x95\x37\x94\x24\xde\x78\x17\x93\xd4\x5b\x93\x1e\xd3\xff\xfe\xdf\x37\x20\xcf\x8b\xec\x6a\x39\x7e\xb9\x51\xb2\xa6\xfc\x72\xa3\x15\x75\xef\xbb\x7b\x57\x44\xc7\xb0\xc7\xd3\xa3\x79\x63\xa7\x72\xbb\xf0\xd2\xea\x09\xe5\x4d\xe0\x85\x7e\x50\xdd\x6c\x4f\x6f\xa1\x8a\xac\xb9\x56\x3d\x11\xfd\xe5\xe6\x92\x00\xe6\x9f\x25\x74\xce\x73\xf8\x81\x8e\xf3\x74\x63\x5f\x4f\xe2\x02\x72\x7b\xce\x89\x7d\xe3\x86\x65\x1e\xdb\xa7\x2f\x37\x61\x1a\x87\x69\x6f\x89\x3f\x72\xd8\x4b\xaf\x7a\x62\xa6\x17\xd6\x05\x43\x13\x56\xc1\x19\xd8\xa9\x8b\x9e\x87\x1e\x77\x5a\x27\x5b\xaf\xe8\x99\xbc\x8a\xfe\xee\xfb\xb6\x79\x17\x56\xfd\xbf\xff\x63\xab\xfc\xd1\x10\xe7\x45\x96\x67\xa5\x37\xf7\xb2\xc4\xab\x8a\xd3\x87\xab\xe4\xbd\x87\xa7\xa1\xbe\x48\x8f\xbe\xbc\x3d\x5d\x27\x7f\x4e\x3e\x71\xc6\xda\xeb\xe9\x7d\x76\x5f\x3e\x65\x7a\xf6\xbd\x8a\xcc\x92\xbc\xae\x3c\x57\xad\x4e\xe7\xe4\xf5\x9f\x63\xba\x4f\x5f\x92\xc3\x9f\x6f\x68\x7e\x0a\x56\x8c\x3e\x36\xb9\x1d\x5c\x06\x7d\x70\x77\x77\x6f\x3f\x8a\x76\x15\x3c\x24\x76\x7b\x8b\xdc\xff\x61\x9b\xb3\xd4\x07\x77\x77\xbf\x0c\x27\x77\xf7\xf1\x9f\xb3\x74\x77\x1f\x3c\xa6\xbf\xdc\x3e\xe3\x8c\x3f\xc1\x99\xdb\xae\x1b\xa6\xfe\x2f\x55\x96\x0f\xee\xee\xa0\x1f\x82\xdd\x66\x55\x95\x25\x83\xbb\xbb\xbb\x7b\xe7\xd1\xfe\x41\x02\xc5\xb5\xbf\x3f\x46\x22\xf6\x76\xd5\x99\x40\xfd\x78\xeb\x3d\x14\x59\x43\x66\x69\x65\x87\xa9\xd7\xaf\x9d\xaf\x5f\x1f\x76\x61\x51\x3e\x49\x9d\x0c\xc2\xd8\xbd\xbb\x77\x1f\xeb\x87\x30\x4d\xbd\x82\xd5\xc4\xc5\x93\x52\xd4\x0f\xe7\xcc\x26\x0f\x57\x7d\x7f\x1c\x5c\xf4\x7d\x70\xff\x0a\xf6\x71\xb0\x1e\xdc\x87\x8f\xf5\x39\x45\x56\x56\xa7\x3d\x2b\x64\x1c\x7a\x69\xa5\x78\x4e\x75\x7b\x77\x49\x22\x7a\xff\x01\xd5\xe0\xbe\xfa\x83\x46\x97\xa1\x7e\x43\xc7\xbd\x2f\x5e\xd4\x23\x80\xab\xbb\xfb\xec\xe5\xdd\x81\xc3\xbb\xfb\xdf\x9d\x2c\x2e\xbf\x64\xf7\xbd\xd1\xfa\x52\x7c\xeb\xcd\xfe\x2e\xac\x3e\xa4\x5a\x29\x1e\x3f\x28\xfb\xad\x77\xce\x42\x7e\xbe\x1d\x3d\xec\xbc\xdb\xe2\xa1\x47\x75\x5f\xf4\x62\x2b\xdf\xd9\xdc\xef\xce\x93\x57\xb6\xf7\x3d\xfa\xde\x08\xbf\x43\xf3\x86\xb3\x57\x4d\x77\x61\xf5\x04\xfe\x87\x16\xbb\x8e\xe3\x4b\xa6\xd6\x9b\xb3\x65\xb8\xd9\x65\xc5\xc5\x52\x3c\xec\xcb\xef\x5b\x8f\xe7\x56\xaf\x1e\xff\x0d\xb6\xa4\xca\x7c\x3f\xf6\x7a\x1e\xd5\x33\x89\xcf\x12\x19\x7f\x2d\xde\x2e\xb1\x4f\x36\xc1\x89\xed\xb2\xec\xd7\xd5\x07\xe7\xa2\xb0\xe5\xed\xe0\x85\xd9\xc1\xdd\xdf\x06\x97\xf5\x77\xf0\x65\x60\xbb\xee\xe0\x4b\xf5\xb7\xcb\xef\x53\xf1\xfd\x27\xa8\x7e\x2d\x7e\x7b\x8b\xe4\xed\x58\xbc\xb0\x5b\xbe\x67\xb7\xf7\x76\xde\xf7\xe6\xc7\xd6\x54\x2d\x08\xcb\x6b\x02\xf7\x9b\xbc\xc8\x8e\xa1\xeb\x95\x57\x67\xbd\x3c\x8f\xd6\x65\x71\x0f\x53\xff\xc6\x7e\xe7\xaa\x5f\xdf\xdc\xec\x53\xa7\xfd\xbb\xa3\xfb\xdc\xec\xe5\xe9\xdf\xed\xbd\x3f\x13\x02\xff\x9f\x1b\xff\x3f\xea\xc6\x5f\x0c\x19\xaf\x4a\xcb\x87\xb3\x11\x7c\xf2\xda\xbf\x0e\xca\xca\xcd\xea\x6a\xf0\xf8\x58\x9c\x73\xc5\xdd\x7e\x74\xf8\x8b\x5f\x87\xbf\xbd\xb8\xfb\xe7\xb7\x3f\xf7\xf6\xcf\xa4\xca\x73\xce\x95\x70\x77\xba\xfd\xb5\xa7\x13\xa6\x83\x7b\xef\xa5\x71\xa5\x86\x9d\xf7\x63\x6d\xbd\xea\xef\xbd\xa1\x1d\x5c\x56\xa6\xf2\xde\x3b\x1b\xdc\xdf\xee\xfe\x85\x21\xc5\xa5\xe2\x62\xd0\x07\xaf\x18\xfc\x93\x60\xe3\x59\xa3\xa9\xbf\x16\x75\x7c\xbf\x5d\xdf\xa5\x77\xb5\xff\xb7\xc5\x21\x7f\x30\x8d\xdf\x06\x24\xef\x00\xbf\x1f\x99\x7c\xbf\xc3\x9f\x61\xa3\x7e\x24\x56\xf9\x3f\xda\xd4\xfe\x7a\xc9\x09\x5c\xdc\xa2\x93\xde\x71\x18\xd4\xe9\xa5\xa9\x3b\x78\x7c\xec\x19\xce\x76\x37\xa9\x7d\x0c\x7d\xbb\xca\x8a\xfb\xf2\x31\xfb\xdb\x20\xcd\x5c\x6f\xf0\xe5\xb9\xf0\xa1\x2e\xbd\x02\xf8\x5e\x5a\xdd\xa7\x9f\x55\xe7\xb1\x5d\xed\xb2\x22\xf9\x5a\x3d\x84\x25\x13\x16\xde\x2e\x6b\x1f\x7f\xfa\xe9\xff\x5f\x3e\x84\xa9\xeb\xb5\xd2\xee\x76\x70\x2d\x1d\xf4\x9a\x14\x96\xa2\xca\xd1\xef\x00\xfa\xa2\xc1\xdd\x3f\xfe\xf1\xb6\x54\x2b\x42\xd7\x4b\xab\xa7\x66\xb6\x73\x4e\xc0\x7a\x5d\x1a\x7f\x1d\x88\xb6\x13\xa6\x55\x56\x06\x83\xfb\xfe\x99\x4b\x2b\x2f\xbe\x3c\xae\x56\xe4\xe5\x61\x3c\x15\x06\xbf\xdd\xa7\x17\x04\x5c\x6e\xbb\x8f\x83\x70\x65\xf7\x5d\x7f\x4c\xaf\x65\x41\x96\x7a\x7d\x69\xff\xfb\x52\x2e\xaa\xeb\xb3\xc3\x5c\xbe\x25\x79\x2d\x1c\xdc\xf7\x4f\xc3\xf1\xe5\x17\x43\x2f\xbf\x24\xfd\x42\x6b\x11\xa6\x75\xfb\x98\xbe\xf4\xe5\x5c\x30\xb8\xfb\xaf\x47\xe4\x4f\xc6\xf7\x39\x7b\x74\x78\x99\x22\xcf\xf9\x68\xbd\x87\xdc\xf6\xbd\xcd\x9b\xb0\xe3\x25\x41\xfd\xb5\xf6\x3e\xbc\x3e\x99\x5f\xab\x9f\x7f\xae\x7e\x7a\x7c\x2c\xbd\x78\xf7\xe0\x66\x4e\x7d\x76\x0c\x9e\x1e\xae\x3e\xf0\xd7\xbb\xe2\x97\xc7\xaa\x9f\x84\xa5\x57\x2d\xbc\x5d\x75\x1f\xbe\xbc\x6b\x59\x7e\x5f\x3d\x0e\x2e\x2f\xab\x73\xc0\x32\x08\xd3\x9b\xea\x6f\x4f\x00\x97\xb2\x2f\xef\xa2\x99\xeb\x1a\xf9\x6b\x71\x1f\xfe\xf6\x92\x0b\x3b\xbb\x2e\x8c\xd9\x7d\x79\x9f\xde\x5d\x13\xee\x5e\xba\xf8\xb4\xa8\xda\xbf\x22\xbf\x5d\xc2\x1b\xc7\x0b\xe3\xdb\xdb\xfe\x1d\xba\x4d\xff\x56\x5c\x3c\x69\x18\xfd\x82\xdc\xdd\xc1\xd7\xb7\xbb\x7b\xfb\xd7\xe1\x6b\xf0\xfe\x15\x2e\xae\xfe\x73\x5f\xfb\x84\x2c\x09\xd3\xdb\xe7\xa0\xc9\x3e\x27\x15\xbc\xbb\xcf\xa0\xe1\x6b\x0c\xef\x60\x86\x67\x98\xf2\x0c\xf3\xed\x9f\x38\x45\x3a\x47\x59\x59\xe1\x96\x8a\x17\xdb\x55\x78\xf4\xb4\xec\x2a\x9c\xc7\xf0\x75\xf5\x63\x76\x79\x53\xec\x86\x38\x55\xde\xb5\xf0\xbd\x2b\x71\xff\x9c\xec\x38\x7b\x55\x74\x6f\x3f\xa6\x7d\x67\xe2\xc7\xf4\xd7\xe1\x6f\xcf\x32\x84\x1e\x31\xf4\x3e\x3e\xff\xff\x7b\xfb\xc5\xbe\x3f\x7d\x89\xbf\xfd\xab\xcf\xc9\x9e\x4d\x0a\xd6\x5b\x94\x57\xde\xcb\xf3\x68\x7b\xcf\xf9\x8c\x7a\x8f\xf4\xd1\xbb\x0f\x1f\xce\x27\x77\x3d\x0d\xbb\x8e\x2b\xb5\xca\x8a\x7e\x61\x4f\xbd\xe6\x26\x7c\x88\xc3\xed\xc3\xb5\xe4\x41\xf4\x92\xac\x38\xbd\xe4\x69\xbc\x82\x5c\x5a\x3f\x25\xb2\x7c\xa9\xbe\x44\x85\xde\xae\xbc\xbd\x7b\x28\xbd\xea\x76\xd0\xaf\x20\xbf\x78\xa9\x93\xf5\x91\xd5\xe0\x7e\x50\xd8\xcd\xe0\x55\xda\xc7\x07\xd7\x73\xb2\xc2\xae\xae\x49\xcf\x7a\xee\xae\xb5\x61\xf6\x92\x63\xf7\x21\xcc\x1e\x7a\xc7\xe1\x75\x22\xd8\x87\x30\x2d\x2b\x3b\x8e\x05\xef\xb4\xcd\xec\xc2\xbd\xbd\xfb\xf6\x9c\xda\xfd\xc5\xfa\x87\xe9\x2e\xfb\x18\xdd\xfc\x7e\xdd\xde\xb8\x24\x4b\xba\xbe\x5c\xa2\xb5\x4b\xd6\xd9\xac\x29\xbf\xbd\x5d\x46\xb2\xba\xca\xeb\xb7\x21\xdc\x25\xc5\xf5\x6b\x26\x5f\x25\xc4\xed\x59\x3e\xbb\x35\xba\xc6\x4c\xcf\x3b\x94\xaf\xb1\x95\x41\xd6\x7c\x70\xa6\x5e\xa5\xe3\xba\x56\x79\xf7\xd5\x7f\x21\x7f\x7b\x83\xb3\x6f\x29\x1d\xbd\x22\xb6\x4f\xe7\x06\x5f\xfe\xa0\xf6\x92\xbd\xf0\x0d\xe1\xcb\x4a\xfd\x81\xf4\x95\xee\x67\x68\x5e\x33\x74\x4e\xc6\xe9\xbd\xcd\x9d\x75\x31\xc1\x5a\x58\xc5\xde\xc7\xec\x59\x67\x84\x6f\x81\x3e\xca\xe2\xa2\x31\x5e\xe1\xa5\xce\xbb\x0c\x5c\x2f\xb9\x98\xbf\xbe\xce\xd2\xe7\xdd\x3d\xec\xb2\x82\xee\x17\xea\x67\xe8\xe2\x1c\x1f\x7d\xa2\x81\xc5\xbd\xf7\x6b\xf1\xdb\xdd\xb7\x77\x54\xb3\x94\x4b\xdf\x0f\xe8\x55\xef\x1e\xb2\xd4\xd0\x04\xef\x54\x56\x45\x16\xbd\x75\x76\xbd\xdb\xea\xee\xdb\x93\x7e\xbe\x4a\x76\xfc\x11\xe8\x3d\x35\xe5\xec\xfe\x7d\xaf\x77\x2f\x94\x9f\xa6\xd4\x7b\xf8\xb3\xf7\x53\x3d\xe9\xea\x63\x71\x5f\x9d\xb5\xf4\x31\xbc\xf7\xce\x75\xdf\xde\xef\xc7\xda\x4e\x15\x1e\xed\xea\xe3\x20\x7f\xe8\xe0\x4b\xc6\xc7\xb7\x7d\x7a\x53\xfe\x81\xb3\x97\xda\xb3\xd4\xeb\xf4\xe3\x7c\x7c\xa7\x79\x9f\xa5\x7b\x7b\xa3\x8f\x7f\x32\xbd\xdf\xa0\x3b\xbb\xc9\x9f\x2b\xf0\xe7\xac\x7c\xbb\xbd\xfb\x5a\x3d\xb0\x67\x1b\x96\xfd\x7b\x0c\xf0\x77\x2c\xef\xf3\xb4\xae\x8b\xf8\x29\xd1\xe6\xb9\x23\x7d\xa4\xf1\x58\x7d\x66\xb6\x9c\xc2\x7b\x37\x74\x4f\x5e\x86\xd7\xdc\x64\xb7\x4f\xd8\xde\xe1\x7a\xe9\x26\x99\xa5\xa9\x77\x6e\xca\xd8\x4e\x95\x15\xa7\xc7\xf0\xcc\xe3\x77\x57\x87\x67\x1e\xb7\x76\x71\x59\x06\x9e\x03\xfe\x73\xe5\x67\x4c\x66\xf9\xeb\x0d\x8a\xbb\xdf\x7f\x64\x80\x7a\xf4\x97\xaa\xf7\x03\xda\x2b\xde\xc7\xd9\x78\x86\x7f\x3e\xe4\x79\x63\xd9\x4b\xe9\x1d\xfd\xd7\x59\x13\xcf\xed\x0a\xcf\x76\x4f\xe7\xcc\xb9\x8f\x8f\xcf\xdd\x79\x20\xa5\xe5\x92\x26\x35\x6e\x39\xff\xc7\x3f\xfe\x0c\x56\x5a\xd1\xcb\xf7\x33\xf9\x2d\xd9\x37\x8c\x66\xe9\x5b\x99\x9c\x8d\xc1\x67\xb6\xc0\xf1\xc2\xe3\x27\xe6\xf2\x8a\x24\xf9\x24\xcc\x7e\x39\x0d\x7b\x8f\x8d\x7c\x2b\xe8\x77\xb8\xde\x0d\xc3\x0b\x47\xef\x15\xe5\x5f\x3e\x29\xee\xab\x57\x5a\xfe\xeb\xa0\xf1\xb6\x55\x75\x1a\xfc\x76\x5f\x3d\x24\xa5\x7f\x36\xbe\xd7\xe4\xd5\x8f\x03\x64\xf0\xaa\xf4\x71\x30\xbc\xbe\xae\x7a\x2b\x34\x40\xaf\x6f\x17\xbb\xf3\x64\x85\x1e\x07\xd8\xb5\xfc\x8a\x45\xba\x2c\xd0\xcf\xb8\x9e\xde\x9f\x91\x65\xaf\x91\xa9\x6f\x17\xae\x67\x64\xea\xdb\xc5\x68\x80\xbf\x94\x2b\x9e\x73\x11\xd6\xe3\x60\x34\xf8\xb3\x19\x7f\x89\x56\x5f\xbc\xa6\xeb\xb4\x77\x3e\xcc\xcb\x6b\x66\x5d\xbb\xf0\xcf\x46\xfd\xfc\x5c\x57\x81\x96\x45\x5e\xda\x3b\xa7\x17\x23\xf9\x44\xf9\x97\xe1\x8f\x4c\xc4\x73\x52\xd5\x9e\x83\xf3\xe2\x72\x7f\x75\xa4\x3e\xd0\xbe\x5a\x99\xdb\xbb\xfb\x37\x19\x4f\xb3\xab\x8e\xdf\xbe\xc3\x58\x3c\x86\x4f\x96\x79\x97\xdd\xde\x7d\xcd\x3e\xdd\x52\xf9\x1d\x14\xfe\x39\xa2\x29\xbf\x84\x97\x3c\xe2\xe0\xa9\x3b\x7d\xc1\xd3\xf3\xb7\xbb\x8b\xd1\x7c\xe3\x5d\x17\x3d\xf1\x33\xd2\x4f\x06\x1c\x7a\x4f\xe8\xc9\x87\xf3\x9e\xb6\xd9\xef\xee\xbe\x7d\xbd\xb2\xf8\xb4\xde\xde\x96\x77\xf7\xe5\x65\x13\xfd\xe2\xe2\x5d\xf6\xd1\xef\x9f\xc1\xce\x1a\xf7\x66\x9f\xf1\x35\x07\xe7\x5a\xc8\xbb\xfb\x76\x77\xef\x3d\x96\x5e\xd5\x87\xb4\xc5\xd1\x8e\x6f\xdf\x88\xeb\x05\xbe\x57\xd8\xbb\x6f\xf7\x98\x87\xdf\x9d\xb3\x72\x3d\x4f\xf5\x0f\xbb\xd4\x7d\x80\x58\xc6\xa1\xe3\xdd\x0e\xef\xbe\x96\x4d\x58\x39\xc1\xad\xf7\x2b\xf2\xdb\xdd\xef\x8e\x5d\x7a\x37\xaf\x34\xf8\xcb\x13\xaf\xe7\xb7\x5b\xbb\xca\xb6\xb7\xc5\xdd\xdd\xd7\x6d\xe1\xd9\xd1\xd7\x17\xe8\x5e\xbf\xbf\xbc\x2f\x7c\xab\xe6\x4f\xa8\xde\x39\x64\xc5\x47\x64\x6f\xa7\xc1\x97\xcb\xd2\xf1\x6a\x8f\xaf\xb8\xfb\xfa\x82\xeb\x15\xe4\x6d\xf6\x29\xae\xe7\xa9\xf3\xe5\x32\xe6\x6f\x31\x3d\x65\xb4\x8f\x33\xff\x76\x40\xa7\xf6\x36\x0e\x53\xff\xe6\x59\xe9\xbf\xdc\x0c\xa0\x12\x1a\xdc\x94\x7d\x81\x5b\x5e\x3f\x61\x7c\x9a\x11\xe5\xb7\xab\xa4\xcf\x66\xf0\xf5\xc0\x9c\x37\x60\x9f\x47\xcc\x7b\x1e\xf4\x17\xd7\xe8\xf6\xb9\xec\x95\x3f\x7e\x3b\x78\xb1\x89\x37\x67\xa4\xee\xe0\x1e\x79\x43\xf4\xbf\x90\x9f\x7f\xbe\x2d\x1e\x5f\xed\x99\xbe\xd6\x87\xcb\x0e\xc5\xf7\xa6\xda\x95\xe0\xd9\x1b\xea\x67\x5e\xbf\x0c\x0e\x3d\xec\x3f\x5e\xa1\xbf\xbb\x2a\x4f\x3f\x07\xef\x9e\xb7\xb8\xcb\xdb\xbb\xfb\xf7\xbd\x7b\x22\x5f\xf4\xf0\x4f\xab\xea\xb3\x6d\x5f\x7b\x5b\x4d\x33\x1f\xc3\x7f\x57\xb4\x89\xf4\xd1\x66\x1f\x74\x7e\x0d\x1f\xe2\xcc\x76\x81\xeb\x66\xe9\xed\x60\x17\x56\x83\x0f\x93\xfb\x7d\x2c\xfa\xde\xf7\xbd\x86\xa5\xef\xc2\xcc\xfb\xb7\xd1\xd0\x43\xd6\xa4\x5e\x41\x3d\xed\x9d\x5c\x64\x7a\x0d\xe4\x6f\x07\x6e\x78\x7c\x8a\x2c\xaf\x2d\x2e\xc7\x2e\x4b\x3b\xf1\x1e\x07\xe7\xf3\x89\x5f\xb2\x4b\x50\x33\x78\x03\x76\x95\xe2\x23\xea\x61\x4f\xf6\xb6\xb7\x1d\x4f\x3b\x99\x6f\x7c\x98\xcb\xe8\xed\xc2\x7e\xec\xae\x2f\xa5\x53\x64\x71\xac\x65\xc4\xf9\x60\xf5\x5c\xfe\x5a\x9d\xae\xd9\xc1\xaf\xc0\x67\x37\x0d\x1a\xb4\x03\xe8\x6d\xf9\xc5\x2c\x55\xef\x58\x7a\x8a\x35\xae\xc6\xea\x76\xd0\xeb\xc4\xe0\xfe\x0d\x43\x6f\x99\xbd\xbd\xbb\xbf\x9e\x2c\x7f\xdc\x21\x7e\xda\x81\xfe\xc3\xe6\xdf\x7a\xe5\x7b\x45\xb4\x57\x42\xef\xfe\x27\xe4\x5a\xd8\x87\xeb\xae\x57\x5c\xb3\x09\xc6\xe1\xf6\xa1\x8f\x6f\xa9\x4b\xe9\x3f\x1b\x80\x3f\x4b\xe6\x55\x08\xfe\x2c\x95\x3f\x8f\xc3\x5f\xe0\xaf\x9f\x0d\xbd\x62\xf4\xfa\x7b\xeb\xdd\xfd\x70\x04\xfe\x92\x9b\xf9\xeb\x1b\x65\xaa\xbc\xb6\x22\xb3\xb4\xf2\xd2\xea\x49\x53\x7b\xad\x7d\xb0\xf3\xdc\x4b\xdd\xf3\xe9\xf5\x9b\x60\xf9\xee\x83\x92\x15\x3f\xff\xfc\x66\xda\x7e\xa8\xbf\xbb\xbf\xd8\x96\x0f\x15\xdf\xb1\x35\xc5\x85\x83\x4b\x10\x75\xe1\xa0\x78\x26\xff\xed\xb2\xe5\xff\xe3\xd1\xff\x53\x47\x2f\xbb\x87\xcb\xcc\xf5\xae\x69\xaf\x7b\x22\xd7\xad\x8d\x0f\xf4\xde\xf4\xf8\x87\x37\x07\x9e\xf7\x3f\xab\x73\x95\xf7\xc3\x3b\x02\x3f\x18\xc4\x3f\x4f\x98\xcb\x49\xc6\x87\xe8\xfc\xc3\x66\xc0\x27\xe1\xf9\x5b\x44\x1f\x26\xcf\xd5\x27\x3f\xab\x6d\x75\x3d\x9e\xff\xf0\x51\xd4\x77\x83\xf0\x0b\xde\xe7\xb3\x96\x37\x53\xae\x2f\xbd\x92\x7b\x5d\xbe\x8d\xeb\xe2\xff\x34\xa8\x3e\xab\xdf\x9f\x86\xd2\x57\x0b\xf2\xe9\xa9\xce\x93\x1c\x3e\x31\x94\x6f\xb7\xf5\xca\xaa\xc8\x4e\xaf\x22\xef\xcd\xd9\xac\x97\xff\xc3\x91\x77\x4f\xe0\xca\x55\x5b\xd9\x85\x67\xbf\x78\xe2\x49\x9e\x95\x61\x0f\x69\x84\x5e\xf3\xe4\x87\x3f\x1d\x7f\x3f\xf9\xe2\x61\x49\x5e\x00\x53\xff\xf1\xa7\xe1\x53\x99\xea\x5d\x3e\x14\x79\xc1\xf1\x5c\xf9\x0a\xef\xea\xa9\xee\xf7\xb2\xb2\x8b\xea\xcb\x79\xc7\xc4\x4b\xdd\xf3\xc3\xb7\x4f\xc3\xfe\x97\xc6\xe7\x26\x1f\xf7\x6e\x5e\xb3\x83\x7c\x97\xe2\xc3\xa5\xf5\x9b\x8e\x3f\x9c\x85\xf6\x10\x7b\xa9\x5f\x05\x9f\xca\xe0\x8d\x85\x1b\x0c\x3e\x87\x79\xf9\x28\xe2\xfc\xd7\x23\x67\x05\xf7\xde\x7f\xc6\xf0\xaa\x51\x9d\xbb\x6f\xf4\xff\x93\xb5\xff\x8f\xd8\xf0\xce\x41\xef\x85\x95\x0b\xaa\x57\x42\xbf\x2e\xfd\xbd\x67\xf4\xb9\x7d\xac\x3e\x15\x8e\x97\xba\x8f\xd5\xe7\x72\xf9\xf6\x61\x87\xf3\x15\x82\x37\x1b\x14\xd7\x01\xd9\xf5\xca\x12\x76\xaf\xb9\xba\xfd\xe9\x3d\x8e\xc8\x3b\xb9\x7d\x9c\xfb\xee\x43\xb6\xf7\x23\x7a\xdd\x8e\xf8\x4c\xbd\xce\xf0\x28\x3a\x7b\x7c\x7c\x3c\xa3\x23\x33\xd7\xbb\x1e\x3c\xfd\x34\xfc\x1a\xee\x6e\x87\xe3\xd7\x55\xff\xf8\xc7\x70\xf2\xee\x7d\xfa\x79\xd3\xef\x77\x62\xf8\xbc\xe7\x83\xa2\xb3\x9f\xde\x20\xbb\x70\x1e\xd8\xa9\x1b\x7b\x20\x3d\x69\x57\x49\x92\xe7\x3f\x42\xea\x47\xa3\x6f\xfc\xee\x1b\xa3\x0f\x14\xbe\xa7\x12\x4f\x82\xf9\xbe\xe2\x5d\xec\xd2\x8b\xee\x7d\x7f\xa6\x5e\x56\xdb\x2b\x7b\x4f\xe3\x7f\x7b\x77\xff\x1c\x84\x5d\x67\xe6\x1f\xcf\xa3\xf3\x9c\xfd\x2e\x88\x97\xba\xdf\xbe\xfe\x81\x5d\x40\xbe\xa3\x9b\x7d\x3f\xbf\x33\xd6\x9f\x97\x3f\xfe\x34\x3c\x5b\x3b\xef\x7a\x10\xff\xd5\x7b\xac\x5e\xf7\xfa\x6f\x1f\x74\xba\xac\xb7\x97\x78\xf9\xb6\xb8\xf6\xa4\xe8\xd9\xbd\xfb\xf2\xe7\x90\x77\x2f\x9f\x0a\xc4\xd7\x91\x2e\x6e\xbd\x3e\xb8\x40\xee\xbe\x79\x71\xe9\xfd\xfe\x47\xa6\xf0\x6a\x95\x3f\xb3\x3f\x2f\x94\xfe\x44\xe8\x7f\x24\xf0\xbb\xaf\x6f\x8c\xf5\x33\x83\x1f\xb6\xc1\xbf\xa7\xa3\x1f\x76\x4b\x2e\x3b\x25\x9f\x9a\xcc\xaf\xdf\x1d\xbf\x9f\xbc\xd7\xf2\x7f\x09\xec\xdf\x75\xb9\xf0\xf2\xd8\x76\xbc\x7e\x15\x1b\xdc\x7d\x2d\xae\xa6\xa6\x77\xf4\xbc\x8f\x5d\x28\xae\x32\x7e\xd3\x8d\xef\x5a\xbe\x3f\x9b\x44\x9f\xb0\xf7\x56\x72\x4f\x1f\xa8\x1d\x6a\xaf\x38\xa9\x5e\xec\xf5\xe1\xea\xed\xe0\x19\xe0\x17\xa7\x2e\xca\xac\x18\xdc\xf5\x28\x8b\x0b\x8e\xf0\x07\x71\x5c\x42\xae\xde\x33\x1a\xdc\xbd\x1c\x61\x43\xc5\xcb\xf3\xe7\xf6\xff\xf2\x7d\x66\xec\xed\xaa\xc7\xe2\xd5\x51\x38\x34\xc8\xdb\xef\x2c\x4a\x97\x16\x55\x96\x3f\x86\x7f\x0a\x75\x39\x90\x7e\xc6\xcc\x9e\x5f\xff\xb4\x55\x1c\xa6\x1e\xfb\xdd\x96\xd7\xbd\xf5\x4f\xdb\x7f\xe7\xc3\xd2\xaf\x6f\x35\xed\xcf\xfb\xfc\x0e\xf4\x7d\x67\xdf\x55\x9f\xcf\xe4\x1f\xb3\xcb\xef\xf7\xc1\xae\xc2\xc8\xae\x0f\xdf\x07\x7c\xd5\xff\x37\xc0\xdf\xbc\x7f\xfc\xe3\x3b\xb1\xc9\xd3\xb7\x35\xdf\x5f\xb6\xcf\x0b\x25\xf2\x7e\xce\x7e\x6a\xb4\x3f\x71\xa0\x3f\x4a\x6e\xf0\x7d\x51\x0d\x06\xaf\xb6\xbc\x9f\x39\x61\xbd\x38\xf7\x8a\x7f\xdf\x0e\x09\x7a\xd9\x21\xc1\xdf\xed\xb0\x7e\x72\x2c\xff\xf7\x67\xc7\xd3\xfb\xcc\x31\xb4\x5d\x97\x0c\xec\xe2\x5d\xa4\x1a\xee\x6e\xbd\xff\x7a\x1c\xdc\x0c\x9e\xe6\x76\x1f\x95\x7c\x7d\x8b\xef\xc1\x09\xec\xa2\xf4\xaa\x6b\xfc\xf6\xa1\xfc\x57\xef\xb7\x9f\x7f\xbe\xbd\xd8\xbf\x4f\x6b\xef\x5e\x1b\xf3\x17\x80\x13\xf4\xbe\x60\x6b\x97\x5e\x6f\x25\x7e\x2a\x3e\xd0\x6a\x9f\x3e\x92\xe9\x57\xae\xdb\x77\x95\xbd\x6a\x9d\x3f\x98\xbf\x0d\xef\x7e\x7d\xdf\xf0\x97\xe1\x6f\x4f\xf1\xf0\x8f\xb7\xf8\x15\xfd\xed\x6f\x7f\xb5\xc9\xf0\x37\xe8\xd1\xfb\xf2\x97\x5a\xa1\x7f\x99\x35\xf4\x4a\xe7\xea\xb2\xbc\x54\x5d\xe6\x88\xd2\xaf\x4d\xef\x31\x9e\xee\xee\xee\x9e\xed\xf9\x2b\x64\x50\xf1\xcb\xf0\xbf\x3e\x0c\x5b\x16\x97\x77\x1f\x81\x9b\xc2\xce\xed\xa2\xb7\x42\x62\xef\xfd\xbd\x47\xf5\x88\xdc\x43\x1f\x86\xf3\xbf\xde\x15\x5c\xb6\xb9\x2e\x9b\x5c\x7f\xfb\xc0\xe4\x2f\xbf\xbc\xef\xd2\x05\xbe\x9f\xe3\x77\xdf\x17\xeb\x87\xbe\x3e\x84\xe5\xba\xb0\xf3\xdc\x73\x1f\x7f\x42\xbe\xf6\x8e\xc6\x4d\xef\xf9\x3e\x3e\x3e\x16\x57\x1d\xea\x65\xf1\x83\xda\xf8\x9e\xa5\x30\x2d\xbd\xa2\x3a\x8b\xe0\xe9\x43\xad\xec\x11\xf9\x9a\xfd\x67\xf1\x15\x82\xb2\xbb\xf3\xa7\x8d\x3f\xca\xe9\xa7\x04\xef\x1e\xf2\x2c\xbf\xbd\xfb\xb5\xd7\x8c\xbf\xa0\x18\xfd\xa8\x9d\xb5\x09\xfd\x23\x0e\xbe\xdb\xee\xd7\xbf\xaa\x88\xd7\x76\x8f\x1f\xca\xeb\x02\x54\x55\x71\x3f\xb8\x19\xdc\x0f\x7f\xfb\xa0\xa4\xaf\x51\x3e\x94\xf9\xf9\xf4\xe2\xbd\x2a\xdd\x23\xf7\x7f\x82\xf5\xbd\x7d\xfa\xc3\x19\xf3\x7d\x1e\xbd\xfb\xe2\xb7\xf7\x0c\xb6\x10\xf4\x97\x26\xd6\xfd\x59\xaf\xfe\xe2\x24\xfe\x03\xb1\x0d\xee\x91\xcf\x78\x7a\xbf\xc0\x6d\xbd\x38\xfe\xdc\x01\x7d\x2f\x9b\x63\x58\xd6\x76\x4c\x78\x71\xfc\x91\xc9\x27\xaf\xeb\xb2\xc6\x6d\xb3\xc2\xf5\x0a\x32\x8b\xb3\xe2\x71\xd0\x04\x61\xe5\x0d\xbe\x13\x77\x3c\xaf\x2e\x3f\x84\x6a\xf0\xed\x7e\x88\x7c\xd0\x84\x3c\xcb\xa5\xf4\xc2\xd6\xbb\x9a\x5d\xe6\xd4\xe5\xed\xfb\x7d\xc7\x5e\xa0\x8c\xe7\x7d\x0c\x9f\x5f\xeb\x64\x7a\xf4\x8a\x8a\xce\x3e\xe9\x6a\xfb\x88\xdc\xfd\x45\x0b\xf5\x11\xc9\xf7\x4d\xd4\xdd\x87\xfe\xb5\x9f\x1a\xd6\x8f\xcb\xda\x2f\xbf\xbc\x73\x5d\xec\xa2\x08\x6d\xdf\x53\xce\x32\xfe\x83\xde\xb6\x8f\xc8\x3b\x9d\xb0\x9d\xa8\xcc\x6d\xe7\xe3\x4e\xe1\x6b\xae\x90\x3f\x67\xa1\xb2\xb7\x7f\x48\xf7\x5d\x41\xea\xb5\x95\x5a\xf5\x46\xeb\xfd\xf6\x78\xb8\xab\xa4\xfa\xe3\x0e\xd4\x2b\xe9\x79\x95\xbf\xf0\x8e\x5e\x7c\xfb\x3e\xda\x3f\x37\xe6\xfe\xa8\xff\x2f\x6d\xdf\x87\x3a\x17\x1b\xdd\x3b\x3b\x9f\x04\x37\x97\x3f\xe8\x3b\x7f\x65\x7b\x5b\x3d\x9e\xcf\x4b\xff\x73\xd8\x0f\xf5\xe3\xf0\xee\xbe\xf8\xc1\x45\xe1\xc3\xe2\xd1\xde\x67\x1f\xe6\xb4\x57\xd8\xa5\xd7\xcf\xea\xdb\xbb\xab\xe1\xfa\x5a\xfd\xf2\xcb\xcf\x3f\x87\xff\xf9\x89\x62\x7c\x7d\xbf\xa2\xbe\x18\x90\xe2\xd9\x52\x86\x10\x74\x8f\xdc\x67\x7f\x60\x55\x8b\xeb\xf2\xf1\x4e\xa7\xce\x01\x98\x9e\x7f\x12\xea\xf5\x02\xf8\x5a\xbd\x48\xe0\x83\xc6\x3f\xed\x6a\xbe\x2a\xfb\x4f\xe4\x93\xa9\xf1\xf8\x61\xd7\xeb\x4c\x94\x7a\xbf\x69\xf5\x63\x64\xa1\x4f\xc8\x7e\x98\x50\x7d\x58\xf8\x19\x27\x9f\x80\xfd\xf2\x91\xc6\x3f\x3d\x41\xcf\xfd\x62\xb2\xa2\xb1\x0b\xf7\xaf\x77\xad\xfd\xa4\x6b\xdf\x63\xe5\xa3\x11\xfb\x6c\x15\x7e\x3f\x75\x2e\x0c\x12\xb6\x13\xfd\x93\x1c\xfe\xb0\x60\x3e\xb4\xfc\x44\x5b\xda\xcf\xb4\xa5\xfd\x8e\xb6\x2c\xbd\xb6\x5a\x84\xe9\x67\x7b\xbd\xff\x37\x68\xcc\x7b\x8b\x7b\x61\x7a\x55\x78\x8e\xd7\xc7\xe6\xff\x24\xe7\x7f\x65\x8a\xfd\x20\x4b\xbd\xed\x03\xdb\x32\x8b\xeb\x4f\xf7\xcd\xff\x4c\x01\x1e\xab\xff\x87\xbd\x6f\xd1\x6e\x1b\x47\x12\xfd\x15\x99\xdb\xad\x90\x21\x24\xf3\x21\x51\x2f\xc3\xde\xc4\x71\x4f\x67\x27\x8f\xbe\x71\xba\x7b\xfa\xca\x1a\x0f\x2d\xc1\x12\x27\x32\xa9\x26\xa1\x38\x9e\x48\xf3\xed\xf7\xa0\x00\x52\x24\x01\x52\x72\xd2\xd9\x99\xbd\x67\x73\x4e\x64\x10\xac\x2a\xe2\x51\x00\x0a\x85\x42\x55\xcb\x56\xd6\xb4\x52\xef\x8a\xe2\x11\x27\xdb\xb2\x51\x8c\x53\x55\xf8\x29\x76\xce\xc8\xd8\x9e\xb4\xec\xa1\x85\xe8\x89\x75\x46\xb1\x35\xa4\x95\xbd\x52\xd5\x0d\xf1\x89\x75\x16\x63\x6b\x18\x57\x0d\x13\x69\xda\x16\xe3\x42\xae\x58\x2c\xb5\x34\xa6\x35\xc3\xfb\x7d\x7e\x25\x24\xc6\xe7\x54\xe4\xe7\x75\xdd\x6c\x6c\x36\xa3\x4b\x53\xf7\xc1\x2b\x24\xac\x10\x2f\xc3\x17\xe2\x1a\xb1\xd4\xaa\x0a\xab\x1e\x6b\xc8\xca\xa0\x5a\x69\xde\x05\xf3\x85\xb4\xc7\xf8\x24\xd5\xd7\x40\x52\x3b\x3f\x98\xf6\x88\x96\x17\x25\xd6\xf8\x23\x6a\x9a\xe5\xca\xc1\xb7\x18\xa7\xeb\xb4\x60\xa7\x63\x57\x16\xec\x15\xb9\xfd\xc2\x72\x29\x5b\xb7\xaa\x00\x0e\x2f\x80\x8a\x89\x1e\x45\xc7\x1d\xe6\x94\x9c\xe5\x35\x96\xf3\x75\x4b\xf5\x8d\xf8\x54\x31\x66\x39\x16\x8d\x83\xbb\x4b\xea\xc7\x60\x65\xa3\x12\x28\x76\x1e\x00\x54\x6f\x5b\x31\x92\x47\xfe\xc3\x2c\x48\x56\xd5\x78\xec\x2d\xe0\x95\x77\x0e\x82\xe7\xa4\xb9\x4a\xc5\x6a\x5f\xc3\x66\x45\xde\xf8\x0a\xbe\x28\xf6\x71\x75\x27\x96\xf1\xb6\x2a\xa1\x90\x81\x56\x08\x85\x7f\xb4\x48\xc8\x67\xaf\x32\xab\xe4\x37\x18\x55\x38\xca\x0f\xb4\x02\x53\x3d\xdb\xe4\x19\xb3\x6a\xef\x7f\xe7\x7f\x7a\x05\x00\xfb\x39\x54\xb1\x40\xc1\xe7\xa5\xc5\x9e\xb3\x58\x0b\xc5\xad\x16\x0a\x5a\xad\x0a\xa1\x54\x48\xae\x31\xb2\xca\xef\x6f\x96\x7e\xf8\x01\xba\xee\xc8\x92\xb7\x4f\x05\xec\x00\xd9\xd2\x9e\xbf\x7e\x57\x7e\x38\x70\xbe\x43\x24\xdb\x8b\x25\xa1\xe4\x7f\x32\xcb\xfc\x2b\x19\x06\xdb\x6a\x8e\x51\x08\x1c\xc5\xce\x36\xed\xaf\x62\x96\xf8\x5f\xc9\x2c\x35\x9b\xce\xaf\x66\x96\xc3\xf6\x97\x07\x6d\x24\xa5\x59\xb7\xaa\x4f\xd2\x3d\xe5\x3a\x59\xe8\xe5\x5b\xd1\xbc\x31\x4a\xbb\xca\xc3\x24\xa4\x42\x87\xa9\xaa\x5b\x6e\x83\xd4\x40\x72\x55\x59\xd2\x47\x13\x13\x03\xaa\x86\xd5\x8c\xc7\xf0\x51\x56\xc2\x3f\x88\x9f\xf8\x2b\x69\xfb\xfc\x4d\xdb\x57\x34\xc9\x1f\xd6\xc4\xac\xbf\xfe\x5d\xdb\x17\x46\xcf\xff\x47\x3a\xa2\x71\x60\x9a\x13\x1c\xd5\xa9\x02\xfe\xa0\xdd\xcc\x2a\x26\x1f\x55\xbb\x99\xe9\xc2\x67\x3b\xc4\xaf\xdc\x77\x7e\x5b\xdd\xc8\x8f\xe9\x16\x36\xbd\xc5\xfd\xef\xa8\xc0\x89\xc9\x8a\xf8\x34\x53\x2b\x9c\xa7\xae\xdb\xea\x3b\x4f\x66\xcc\xea\x93\x27\xd5\x90\x7d\x30\x50\x80\x63\xd5\xc1\xe6\x66\x53\xce\x9d\x91\xdb\xdc\x79\x0c\x67\x1b\x19\x95\x31\x64\x20\xdf\xd0\x7b\x41\x3e\x06\x53\x60\xfa\xe0\x66\x4d\x4b\xb2\x15\xab\xcc\xa9\x95\xda\x87\x15\x98\xee\x36\xf8\x74\xa6\x9d\x6a\xb2\xc8\xc2\xdf\xc9\xad\x1d\x24\x3a\xb7\xd9\xd7\x8c\xf2\x59\x2e\xdc\xb7\x09\xda\xe7\x56\xfb\xe2\xf2\xdc\xd4\xc6\xa7\xd6\xc8\xe9\x79\x23\x6b\xaa\x49\x27\x8d\x8c\x4a\xfc\xe9\x23\x6d\xad\xc3\x60\x1a\xcd\xc8\x01\xc4\xfa\xdd\xd1\xa0\x5b\x49\x6c\xc9\xdd\x46\x28\xa9\xb0\xea\x9b\x5a\x05\x62\xea\xef\x49\x52\xc5\xc9\x05\x70\x47\x1d\xcb\xb2\x5c\x28\x83\x92\x96\x68\x17\x61\x2f\x58\x57\x5b\x25\x48\xe6\xbf\x6a\x4f\x49\xce\xec\x91\x53\xdf\x0c\x7b\x2b\x73\xe6\xb1\x3a\xc8\x87\x41\x5f\x35\xd5\x3c\xa8\xa6\x9a\xaf\xd5\x17\x16\xcb\xf8\xcb\xd7\x4f\x35\xff\xce\x6a\xf0\x1f\x7f\x51\x6a\x03\x59\x8d\xa0\x3e\x2c\xc1\xaa\x44\xc6\x76\x9a\x61\x4f\x94\x3d\x21\xd4\x86\xdf\xba\x9e\x98\x6b\x22\xbf\xed\xd4\x4d\xfd\x9b\xf3\x25\xf1\xe3\xea\xbe\xc6\xd6\x99\xf0\x5e\x54\xa2\x47\xfd\x9b\x44\x3e\x29\x1e\xba\x6c\xbe\x93\x8b\xc3\xa0\xf1\xe7\xf2\x6d\x81\x84\x80\x69\x42\xd9\x4a\x38\xd3\xc7\xda\xc6\x6e\xd9\xb0\x46\xf4\x24\x7d\xb1\x53\xf4\x09\x0a\xfa\x98\x8c\xe9\x64\x62\x64\xe6\x13\xca\x29\x17\x88\x6b\x67\x95\x53\xb2\x21\x2b\x95\x24\x55\x90\xbf\x62\x52\xa5\xcf\x4a\x7b\x0e\xd2\x0a\x3e\xb2\x6a\x55\x3e\x09\xa1\xb0\x24\x26\x84\xea\x16\x8a\xca\x0e\xfd\xa5\x8e\xcf\xc3\xdb\x8f\x84\x77\x1e\x09\xef\x2a\xe0\x8b\xba\xc5\x32\xb2\xff\x91\xcc\xce\xe1\x0e\xbf\xcc\x5d\xe5\x2f\x09\x7f\x8e\xb6\xeb\x48\x6f\xa2\xfb\xa4\xf0\x21\xaf\xfc\xa1\x28\x0e\xe6\x41\x08\xcc\x51\x6c\xdf\x5e\x19\xb2\x68\xe8\x53\x82\xb6\x9d\xfc\xfd\x50\x4f\xfa\x0c\xdc\xbf\xbc\x24\x71\xe0\x2f\x1b\xab\x28\xa6\x8d\x98\xfc\xbe\x26\x09\x25\xb3\x46\xae\xa3\x1b\x1f\xc8\xc3\xca\x9f\xb5\x35\xa9\x31\x73\x40\x7f\x06\x98\xec\x8a\xc2\x0e\xe6\x63\x40\xee\x19\xed\x76\xf2\x10\x4e\x2f\x41\xc2\x7f\x16\x13\x5f\x2f\x34\xc0\x60\xc8\xcb\x4b\x5c\x91\xb0\x2c\x27\x4b\x49\xdd\xf0\xc9\xb6\x5e\x47\xeb\x84\x60\xb0\x8e\x1f\xcb\x26\x18\x1f\xa9\x63\x09\x10\x9b\xb8\x15\x40\x61\x14\xdf\xf9\x4b\x0e\x05\x72\x8c\x9d\xde\x06\xdc\xc1\xdc\xb1\xb7\x70\x1f\x26\x51\x54\x4d\x76\x1b\x09\x37\x24\x48\xe8\xdf\x2c\x49\x0b\x70\x5b\x04\x90\xe5\xa6\x4b\xc0\x6a\x36\x88\xc2\xd7\x7e\xe8\xcf\x49\xdc\x9e\x05\x09\x43\xd3\xe5\xdd\x1c\xeb\xa4\xe7\x01\xd8\x93\x36\x68\xd4\x00\xba\x0d\x4e\xb7\xad\x15\x35\xb7\x96\xd5\x91\x07\x60\x38\xfb\x21\x9a\xae\x93\x32\x6f\x58\x56\xb7\x0c\xbb\xa6\xb7\xbc\x3d\x24\x50\x89\x75\x92\x79\xac\x06\xb5\x65\xaa\x4c\x42\x51\x01\x3b\x12\x28\xdf\x01\xfd\x18\xcc\x66\x04\xac\xca\x0b\x94\x3b\x82\x4b\x3a\xbd\x94\x35\x3a\xbd\x61\x70\xab\x1f\x29\x3b\x36\x33\xf8\x07\xb9\x5a\x69\x90\x86\x40\xb2\x2e\xbf\xe2\xfb\x41\xd0\x7e\x49\xaf\x58\x26\xfa\x24\xf1\x23\x7a\x90\x20\x51\xb6\x03\x96\x5a\x2e\xdb\x6c\xe7\xf7\xbb\x6a\x28\xb1\xc5\x67\xcb\x47\x19\x80\xe5\x6d\xcb\x3b\xf2\xf4\x92\xf1\xa1\x63\x50\x3d\x26\xe4\x73\xb7\x64\x11\xdd\xf3\xf9\x5e\x37\xb6\x5b\xb8\x0e\xd0\x90\x57\x0b\x89\xf7\x76\xe6\x77\xf8\xc8\xda\x2a\x2e\xb2\x7d\xe5\xf2\x97\xd1\xf8\x97\x2e\x80\x76\x71\xcd\xb0\x5d\x85\x51\x9f\x52\x4a\xcb\x96\x13\xe9\x8d\x58\x3b\xaa\xe0\x95\x0b\x0a\x52\x0b\x2a\x19\xd2\xc1\x0b\x8e\xfd\xa8\x05\xc7\x7e\xfc\x82\x03\xad\xcc\x66\xb3\x1b\x7f\xfa\x81\x4d\x69\x9c\xed\x1e\xb5\xce\x48\x92\xe1\xb7\x5c\x67\x14\x5f\xdb\xad\x30\xf2\xcb\xfc\xca\x22\xbf\x2d\xac\x29\xd2\x5b\x79\x4d\x49\x2f\x3f\x7d\xd9\xb2\xc2\xb1\xf4\xc7\x2c\x13\xf6\xe1\xcb\x44\x19\xb4\x66\x99\xb0\x1f\xb3\x4c\xd8\x8f\x59\x26\xac\x03\x96\x09\x65\x0f\x55\x9c\x96\x48\xf6\x00\x00\x2c\x96\x0c\xd5\x62\x51\x81\xa0\xb4\x48\xe6\x07\xc1\x15\x08\xb0\xbc\xec\xdb\xc9\x08\x60\xf9\xec\xb5\x8a\xaa\xda\x08\xf2\x7d\x54\x55\x8c\xdd\x02\x55\xb3\x26\xd5\xe2\xa6\xcb\x96\x62\x13\xa4\x46\x63\xaf\x2a\xd6\xa2\x9d\xd7\xb1\x1a\x2e\x4f\x52\xc7\xc6\xca\x0e\x95\x46\x49\x4c\x6e\x63\x92\x2c\x74\x49\xa2\xab\xd8\x8d\x1e\xbc\x7e\xe6\xd7\x49\xe3\xcb\xd6\x49\xbb\x7c\x39\x66\xe1\xc7\x15\xda\xb7\xe0\x56\xb7\xe1\x9e\x26\x5f\x17\x37\x1b\xeb\x88\x8b\xba\x39\x7d\x63\xce\xbe\x07\x05\xd8\x4a\x5d\x03\x15\xc6\x12\x23\x7f\x7a\x6a\xf7\x91\xbc\xaf\x49\x5f\x0e\x9a\x5d\xdb\x46\x21\xee\xda\xb6\x74\xad\x84\xc3\x8c\x82\x93\x78\x14\x98\xa6\x01\x3a\xf8\x60\x62\x9c\x62\xd7\x6a\x36\xe9\x09\x76\x7b\x67\x09\xa6\x2d\x17\x8c\x89\x3a\x3c\xaf\xd3\x3b\x0b\x31\x6d\x75\x20\x6f\xc0\xf3\x06\x0c\x4e\xa7\x26\xee\x1b\xad\x01\xbc\xb0\x2d\xfe\xc6\xb6\x18\xb8\x78\x65\x5b\xd6\x90\xfb\x24\xd6\xa5\xca\x08\x4d\xa7\xba\x32\xd9\xcb\x9a\xca\x08\x18\x63\x68\xc3\x17\xa2\x0d\xb6\x87\x9d\x34\xe9\x0c\xbb\x69\xb2\x33\xec\xa5\xc9\xfe\xb0\x9f\xc1\x7a\x43\xc7\xe1\x0f\x4d\xdc\x72\x86\x4e\x27\x7b\x70\x87\x4e\x37\x7b\xe8\x0e\x9d\x5e\xf6\x30\x18\x3a\xfd\xec\xc1\xee\x0d\xdd\x01\x3c\xed\x29\xfe\xb0\xc3\xc1\xea\x6a\x31\x74\x39\x61\x07\x76\x40\x81\x69\x4f\xce\xf4\xc0\xc4\x0e\x6a\xb1\xda\xe9\xd2\x17\xee\x7c\x3a\x5d\x80\x19\xb8\xee\x74\xbb\x4d\xd6\x8b\x48\x24\x4c\x7b\x97\x74\x26\x86\xd1\x6c\xea\x09\xfb\xb2\x81\x18\x41\x03\x1a\x86\x83\xc1\x1b\x8a\x53\x60\xec\x4c\x8c\x61\xa7\xb6\x1c\xe1\xd7\x95\x23\xac\x2c\x47\x58\x2e\x87\x6d\x09\xc6\xf9\x3a\xde\x28\x2f\xd9\x71\x1c\xc5\xba\x26\xbc\x92\x35\x2e\xff\xf4\xae\xe1\xa7\x03\x76\xd8\xf8\x7e\xd6\xd6\x90\xe2\x92\x16\x1f\x35\x38\x3a\x39\xb1\xfb\x9b\xe4\xe4\x64\xb0\x09\xf9\x7c\x51\x01\xa8\x2e\x4c\xf9\x54\xfb\x63\x30\x25\x97\xd4\xa7\x6b\x69\xa6\xf8\xa3\x24\x62\x79\x89\x2f\x6b\x80\x35\x53\xbe\x3b\x63\x1b\xa6\x36\x92\x5f\x7c\x82\x17\xef\xb4\xea\xb9\x52\x5a\xfb\xcb\x9f\xb3\x42\xad\x5e\x97\x52\x46\xf8\xb2\xe2\x15\x15\x77\xd1\x2d\x7d\x57\x74\xc4\x21\x5d\xeb\x2b\xef\x65\xab\xaf\x26\x29\x5e\x16\xc4\xf1\xf2\x4b\x49\xe5\xf3\x87\x8a\xcb\x35\xc4\xb2\x0d\x4f\xb5\x44\x21\x95\xa5\x4e\x66\xe0\xab\x6d\x19\xa3\x9e\xe1\xf7\x8a\x47\x0f\x72\x19\xc4\xd5\x46\xa5\x28\x31\x5f\x92\x8f\x64\x59\x89\x93\xe0\x31\xc3\x9a\x48\x8a\x5b\xde\x16\x10\xc1\xa7\x42\x7b\x7c\x62\x9f\xd9\x43\x50\x23\x0b\xae\xa6\xd9\x9e\xb2\x52\x55\xfa\x76\x05\x74\xb4\xe9\x8e\xba\x86\xb4\x9b\x65\x34\xfd\xa0\x95\x54\x93\x6a\x49\xa2\x92\xc6\x3a\x9c\x91\x18\x22\xe8\x14\xe8\x74\x87\x55\x83\xa6\xaa\x2c\x7e\xac\x19\x5b\x61\x73\xf9\xbd\x83\xb1\x5d\x9e\xd9\x24\xd4\xe7\xcb\x20\xfc\xa0\xa1\x58\xd6\x7e\x73\xbe\x7b\x47\xe6\xe5\x73\x09\xe5\x64\x24\x1f\x33\xee\xf8\x4e\x17\xc7\xaa\x86\xcc\x4f\x05\x0e\x84\x73\x8d\x66\x13\x8e\x39\x54\xec\x08\x06\xd0\xe5\xc6\x80\xed\xb5\xe2\x2c\x42\xe6\x1a\xf9\x5e\x05\xdb\x7e\x8b\x71\x53\x53\x41\xd8\xa4\xff\x45\x36\x41\x50\x81\xfd\x26\x71\xbc\xa4\x58\xa1\x51\x7c\xc0\x47\xa5\xa1\xc3\x4b\xb1\xd9\x28\xaa\xa5\x2c\xc8\x66\x63\x65\x77\xac\xc1\x2d\xd3\x8f\xdc\xa5\x01\x4e\x46\xdc\x5b\x7a\xe1\x04\x3c\xbd\x02\x4d\x73\x86\x1b\x20\x90\x06\xa9\x9d\x2e\xf8\x35\x21\x27\xc1\xd8\x9a\x40\x6f\x92\xd3\x60\x1c\x4d\xc6\xf6\x64\xe7\xbd\x84\xc9\xb5\xa3\xe8\x14\xc7\x23\xb8\xf4\xca\x2d\x6a\x6f\x97\x51\x14\xeb\x7a\x6c\x46\xc6\xb1\x63\x20\x86\x46\x39\x1a\xa6\xa6\x0d\x3a\x21\x70\xde\x00\xb4\x29\xa3\x6d\xa4\x14\xad\x51\x04\xe6\xf3\xe9\x07\x76\xee\xf2\xe3\x5c\xb8\x08\x72\x8a\x3b\x6e\xd7\x69\x36\x75\x72\x82\x3b\x9d\x4e\x6f\xb3\x19\x58\x16\x13\x5e\x08\xa4\x1c\x9e\x22\xa7\xd8\xb6\x07\x56\xa7\xd9\x64\x60\x8e\x3d\xb0\x9b\x4d\xdb\x71\xbb\x20\xa4\xc3\xeb\x4e\xc7\x72\x1d\x78\xdd\xed\x3a\x96\x0b\x79\x9e\xdb\xeb\x70\x14\xaf\xe3\x74\xbb\x3c\xaf\x6b\x31\x41\x99\xe5\x75\xad\xce\x20\xcd\xeb\x39\x22\xcf\x76\x53\x38\xa7\x9f\xc2\xb9\x3d\x4f\xe4\x75\x45\x11\xbc\x6e\xd7\xb6\x78\xb1\x5c\x3b\x45\xb6\x07\x9e\x67\x71\x6c\x48\xf6\x21\xd7\xf1\x1c\xbb\x63\xf3\x81\x1d\xe0\xf1\xb8\xe7\xf5\x51\xbf\x37\x98\xa0\xb1\x6d\x77\xbb\xc8\xb6\xbb\x7d\x48\x7b\x16\xb2\x6d\xcf\x66\xe9\x8e\xd3\x45\x76\xc7\x03\x98\x4e\xcf\x46\xec\x87\xa7\x5d\x96\xee\xf0\xb4\xc7\xd2\x3d\x9e\x1e\xb0\x34\xc0\x77\x5d\x0f\xd9\x5d\x97\xa7\xbb\x0e\xb2\xbb\x5d\x80\xf1\x6c\x1b\xd9\x9e\x6b\x41\xba\xd3\x47\xec\x87\xa5\x7b\x5d\x0b\xd9\x3d\x0f\x68\xf6\xbc\x1e\x4b\xf3\xfc\x1e\xcb\xef\xb9\x2c\xdd\xb7\x7a\x88\xfd\xf0\xf4\x80\xa5\x81\x7e\xbf\x63\x21\xbb\xef\x79\x2c\x3d\xe8\xf6\x91\x3d\x00\x5c\xc7\x72\x7a\xc8\xb1\xdc\x2e\x4b\xbb\x56\x17\x39\xae\xe5\x41\xda\xeb\x20\xf6\xc3\xd3\x03\xe4\xb8\x3d\x9e\xdf\xb7\x11\xfb\xe1\x69\x06\xdf\x07\x3a\x1d\xcb\x41\x4e\xc7\x72\x21\xed\xba\x88\xfd\x40\x7a\xc0\xf2\x07\x0e\x4f\xf7\x90\xd3\xb5\x58\xbd\x9c\xae\x35\x60\xe9\x01\xa4\x5d\x0b\x39\x5d\x17\x68\x76\x3d\x1b\x39\x5d\x0f\xe0\x3d\xc7\x42\xec\x87\xa7\xbb\x2c\x0d\x65\xf0\x5c\x1b\x39\x9e\xcb\x61\x5c\x96\xef\xf6\x20\xdd\x73\x90\xe3\x41\x3b\x38\x5e\x7f\x80\x1c\x6f\x00\xb8\xbd\x4e\x1f\xb1\x1f\x48\x77\x5d\xe4\xf4\xa0\x9d\x9d\x5e\x77\x80\x9c\x9e\xc7\x61\xbc\x2e\x4b\x43\x3b\xf4\xfa\x1e\x72\x7a\x7d\x80\xe9\xdb\x3d\xc4\x7e\x20\xdd\xf3\x10\xfb\xe1\xe9\x01\x4b\x43\xf9\xfb\xac\x4d\xfa\x7d\xf8\x6e\x7f\xe0\x22\xf6\xc3\xd2\x03\xd6\x26\x03\x0b\xca\x39\xe8\x78\x88\xfd\x4c\xd0\xd8\xb5\xac\x3e\x62\x3f\x90\x76\x6c\xc4\x7e\x58\xda\x76\x3b\xc8\xb5\x5d\x80\xb1\x3b\x0e\x72\xed\x4e\x87\xa7\x3d\x96\x1e\x40\xba\xdb\x43\x2e\xe7\x43\xd7\xf1\x2c\xc4\x7e\x78\xda\x65\x69\x17\xd2\x3d\x96\xdf\xe3\xf9\x3d\x8f\xa5\x7b\x90\x1e\xf4\x91\xeb\x0c\x80\x8e\x3b\x70\x91\xeb\x0e\x58\x7d\xdd\x8e\xd5\x45\xec\x87\xa5\x59\x5f\xb0\x1f\x9e\xee\x23\xb7\xdb\xe1\x69\x56\x9e\x6e\x87\xd5\xc5\xf5\x5c\x17\xb1\x1f\x9e\xf6\x90\xeb\x89\xfc\x6e\x17\xb9\x1e\xf4\x9d\xdb\xf3\x6c\xc4\x7e\x78\xba\xc3\xd2\xf0\xdd\x5e\x8f\xe5\xf7\x38\x4c\x9f\xe5\xf7\x21\xbf\xcf\x60\xfa\xd0\xfe\x2e\x6b\x43\x97\xb7\xa1\xdb\x1f\x74\x59\x5a\xe4\xf7\x58\x1a\xea\x32\xe8\xba\xc8\x1d\x00\x3f\xbb\x03\xaf\x8f\xdc\x01\xa7\x39\xe8\x75\x58\x1a\xe0\x07\x8c\xfe\x60\x00\x65\x18\x0c\x5c\xd4\xb1\x1c\xd6\x6e\x1d\xcb\xed\x23\xf6\xc3\xd2\x76\xc7\x46\x1d\xde\xce\x1d\xd6\xce\xec\x07\xd2\x5d\x0b\x75\xec\xae\xcd\xd3\x2e\x4b\xbb\x90\xee\x77\x50\xc7\xee\x33\xfa\x9d\x4e\xa7\x8f\x3a\x1e\x8c\xb5\xce\xa0\x3b\x40\xec\x67\x82\xc6\xdd\x81\xe5\xa1\xee\x00\xfa\xb7\x3b\x70\xfb\xa8\x3b\x80\x36\xec\x0e\x7a\x16\xea\x0e\x60\x7e\xf0\x2c\xcb\x41\x9e\x05\xe3\xc5\xb3\xbc\x3e\xf2\x2c\x68\x1f\xcf\xea\xd9\xc8\xb3\xa0\xbf\x3c\xab\xef\x21\xf6\xc3\xd3\x03\xe4\x59\xd0\x77\x9e\x6d\x0d\x10\xfb\x81\x74\xb7\x8b\x3c\x1b\xf8\xd9\x73\x6d\x17\xb1\x1f\x96\xee\xb8\x0e\xf2\x3a\x6e\x87\xa7\x07\xc8\xeb\x40\x19\xbc\x4e\xd7\x42\xec\x87\xa7\x7b\x2c\x0d\x74\xbc\xde\x00\x79\x5e\x1f\xf2\x07\xb6\x83\xbc\x81\xdd\x85\xb4\xd7\x41\xec\x87\xa7\x3d\xe4\x0d\x7a\x1c\xa6\xc7\x60\xa0\xcd\xbd\x41\xaf\xcf\xd2\xac\xbe\x3d\xcb\x1e\xa0\x9e\xe5\xb0\xf2\xf4\x3c\xdb\x43\x3d\x3e\x66\x7b\x5e\xaf\x8f\x7a\x1e\x8c\x97\xbe\x63\xb9\xa8\xef\x40\xbb\xf5\x1d\xb7\x83\xfa\x0e\xf4\x45\xdf\xe9\xf7\x51\xdf\x81\xfe\xea\x33\x5e\xed\xbb\xd0\x3e\xfd\x8e\x65\xa1\x7e\x07\xe6\x07\xdb\x71\x5d\x0b\xb1\xdf\x2e\x3c\x75\x3a\x36\x62\xbf\xac\x1c\x1d\xd7\xb2\x3b\x08\x7e\xc5\xd3\x00\x9e\x06\xfc\xa9\xd3\x65\x4f\xd0\xbb\x5e\xc7\x61\x4d\xcb\x7e\xd9\x53\xd7\x72\x3a\xc8\xeb\x5a\x30\x13\x7b\x5d\xab\xeb\xb1\x27\xde\x2e\x5d\x87\x35\x0c\xfb\x85\xa7\xae\xc3\x9e\xf8\x5c\xe5\xf5\xad\x41\x0f\xb1\x5f\x78\xd7\xb7\x2d\x1b\xb1\x5f\x47\x3c\xf5\xd9\x93\xcd\x21\xed\xae\xc3\x9e\xba\x1d\xf1\x34\x80\x27\xbe\xb2\x0c\xec\x8e\x8b\xe0\x4f\x57\x3c\xc3\x5a\x33\xb0\xa1\xa5\x21\xc1\xdf\x8b\x95\x68\xe0\xd8\x6c\xfd\x19\x38\xd0\xd3\xb6\x3d\x70\x3d\x07\xc1\x1f\x46\x7d\xc0\x96\x89\x2e\xe2\x7f\xc4\xb3\xeb\xb1\x67\x0f\x4a\x3d\xb0\x7b\x3d\xcf\x62\xcf\x83\xc1\x60\x92\x05\x6c\xc9\x84\x94\x5d\xb0\x29\x0b\x63\x1c\x9c\x91\x76\xb8\x5e\x0e\x83\x13\xd7\xd9\x6c\x82\x53\x6c\x3b\xbd\x66\x33\x38\xb1\x3d\xeb\x8c\x40\x44\xa2\x38\x5a\x0e\xa9\x1e\x18\x67\xd6\x30\x66\x7f\x9c\xa1\xbd\xdd\xea\x9f\x19\x92\x85\x52\x00\xeb\x5b\x85\x93\x0a\xc9\x7d\xe3\x1d\x99\x5f\x7c\x5a\xe9\x9a\x7e\x36\xfc\xeb\x66\xfc\xd7\xab\xab\x99\xdf\xfa\xc7\xd5\x55\xbb\x35\x31\x0d\x5d\x5f\x50\xba\x4a\xce\x86\x57\x57\xc7\x57\x57\xc7\x86\xae\xeb\xe3\x02\xc0\xd5\x55\x5b\x1f\xf3\xc7\xc9\x67\x07\x79\x5b\xc3\xd8\xe8\xfa\xd5\xd5\xec\xb3\x8d\xdc\xed\xd5\x55\xdb\xf8\xcc\xfe\xf0\x47\x63\xa3\x2f\xa3\xa9\xbf\x5c\x44\x09\x35\x0c\x7d\xc8\xf3\xbb\x5b\xe3\x4c\xbf\xba\x3a\x1e\xc3\x37\xee\xaf\xae\xda\x57\x57\xad\xef\xff\x39\x79\x6a\x3c\xd5\xaf\xae\xce\xc6\x56\x6b\x00\xd9\xe3\xab\xab\xc9\xd5\x95\x7e\x75\x65\x00\xe0\xd9\xd5\xd5\xd1\x7f\xfc\xe7\x77\xdf\x37\x9f\x3c\x35\xd1\x70\xf4\xcf\xab\x2b\xcc\x51\x27\x4f\x8d\x33\xfd\x3f\xbe\x08\xcd\xd0\xbf\x83\x16\xc8\x95\x63\x62\x1a\x9a\x81\x22\x6c\x55\xfa\xe2\x49\x45\xe2\x90\x5f\x64\xfd\xf0\xda\xa7\xd3\x05\x89\x5f\xce\x70\x24\x44\xe0\x38\xba\x17\x1e\x15\x5e\xce\x12\x3c\x4e\x8d\x08\x96\x3b\xe0\x5d\x6e\x4c\xe6\x41\x42\x49\x9c\xa3\xa4\x07\x10\x92\x05\x7d\x06\x95\xd6\xcb\x70\x46\x3e\x0d\xed\xad\x32\xb6\x02\x0f\xd2\xf7\x3e\x7a\x11\xdd\xa9\x02\xc4\x5c\xa7\x0e\x54\x53\x77\x96\xd7\x10\x0c\x84\x4a\x96\x76\x1f\x82\xdb\x87\x77\xd1\x7d\x31\xf0\x76\xaa\xfe\x49\x89\x14\x5c\x83\x15\x2b\x39\xa6\x93\x51\xd9\x6d\x6d\x76\x0f\xae\x0c\x99\xf7\x52\xbb\x6b\x19\x5e\x02\x1e\x86\x8e\x82\x97\x35\x03\x91\xf6\xfb\x97\xaf\x2f\xae\x9f\x5f\xfc\xf0\xf6\xdd\xc5\xf5\xab\x97\x6f\xfe\xfc\xf2\x87\xdf\x24\xbd\x0a\xa1\x3f\x3e\x30\xfe\x17\xfd\x91\xee\x27\xe4\x4d\x4c\xbe\x03\xc6\xd1\x24\x75\xa6\xa6\xf0\x2b\x9b\x11\xfc\xc5\x5f\x06\x33\xae\xc7\xf0\x97\xcb\x1b\x7f\xfa\xe1\x00\xba\x1f\x65\x24\x52\xde\x6e\x49\xbd\x8e\xcb\xe3\x3d\xb8\xd5\x77\x91\x28\xe1\x06\xec\xe7\xd4\xe7\xb2\xcc\x7b\x47\x18\x47\xcd\xe6\x11\x35\xe8\x22\x8e\xee\x21\xfe\xc7\x05\xd7\x30\x8a\x4a\x36\xee\xd6\x09\x6d\xdc\x90\x46\x1a\x46\x2e\x9d\x12\x3e\x07\xc2\x6b\xa1\x4c\xd4\x34\x51\x4c\xe6\xe4\xd3\x90\x20\x41\x65\x48\x51\x8e\x29\xe3\xf6\xee\x01\xc9\x95\x1e\xc6\x8a\x96\x40\xab\x38\x88\xe2\x80\x3e\x0c\xe3\x76\x9a\x64\x5b\xc2\x51\x3e\x2c\xc7\xb5\x3f\x9b\xe5\x4a\xf2\x3e\x7a\x15\x24\x6c\xd2\x44\x41\x3b\x98\x15\x5b\x52\x09\x5a\x56\x63\x5a\x47\xa9\xaa\x32\xdf\x55\x62\x07\x99\xb7\xb3\xae\x04\x6a\xd9\x23\x7a\x8a\xad\x11\x6d\xb5\x0c\x30\x37\x48\xcb\x7e\xa2\xc0\x19\xd3\x49\xf6\x3e\xef\xd2\xaa\xa1\x20\x9f\x5e\xb8\x80\x1b\x51\x24\xd5\xf8\xaa\x40\x2c\x00\xc8\xab\x7b\x0b\x50\x70\x7f\xa7\xec\x5b\x79\x46\xea\x39\x2d\x5f\xf7\xdd\x05\x61\x45\xfd\xc1\x7c\x22\x9b\x11\xca\x95\x0d\x66\x6c\x2f\x6b\x14\xba\x50\x59\x4b\x64\x1b\xe8\xc8\x1a\x65\x1b\xe7\x62\x57\xaa\x26\xa2\x82\xc3\x42\x3e\x7f\x8d\xc9\x04\x3c\x5d\x71\x3f\xeb\x99\x13\xd8\x5c\x54\x3d\x6b\x14\xd7\x54\x25\x36\xcd\x82\x87\xc2\x62\x75\xe2\x49\x76\xdc\x35\x8b\x5e\x65\x25\xd2\x29\x0a\xc0\xc1\x56\x94\x39\x66\x04\xd6\x0a\x14\x3c\x9e\x99\xa0\xa8\x1c\x2f\x46\x50\x7c\x05\x96\x5e\xa8\x0d\xa2\xa8\x60\x73\xbb\xd9\x48\x26\x63\xdc\x71\x62\x10\x02\xa9\x16\xe8\xcb\xc0\xb7\x74\x88\xad\x51\x78\x92\x96\x73\x14\x9a\xa6\x91\xe8\x61\x1a\xaf\x6f\xbb\x2d\xcd\x9f\x85\x6a\x2a\x9d\x9c\x8f\x27\x28\xc0\x94\xf7\x72\x84\x12\x4c\xda\xd3\x45\xb0\x9c\xbd\x89\x66\x24\x41\x21\x2e\xf8\x3c\xe7\x53\x82\x4e\xdb\x30\x73\x40\x8b\x1d\x85\x9b\x0d\x9b\xc4\xc2\x74\xc0\x09\x3e\x89\xb3\x1e\xf3\x71\x38\xd6\x78\x54\x79\xed\x28\x0d\x6f\x49\x73\xb3\xcb\x99\x35\xcc\x3f\x42\xf8\x3c\x1e\xa4\xd1\xf4\xd3\x83\xca\x05\xb6\x46\x8b\x93\xac\x97\x17\x69\x2f\x4f\x71\x32\x5e\x4c\xd0\x1a\x4f\x0b\xe5\x4c\x43\x3c\xfa\x50\xc6\xf5\x29\xb6\x38\xf8\x4c\x74\x3e\x0f\x1b\xf0\x2c\x9c\x2e\xa2\x38\x0d\x1e\xe0\x23\x9a\x2e\x1a\x82\x1b\x8a\x34\xb3\x0b\x97\x69\xa1\xd8\x90\x71\x31\xc6\xd3\x76\x18\xcd\xc8\xfb\x87\x55\xea\x55\x4d\x38\xfb\x64\x4d\xa8\x4f\xd1\x8c\xdb\x20\xc1\xf7\x57\x78\xca\x08\x6b\xcf\x34\x8c\xf1\x0a\xf0\xde\xf8\x77\x64\xd7\x68\xab\x7c\x2c\x73\x0d\xad\x0a\x9e\xe5\x67\x62\x82\x80\xa2\xed\x7a\x49\xb6\x8e\xba\xc5\xd6\xe8\xf6\x44\x01\x33\xba\x4d\x1b\x6e\x8e\xf3\xaf\xc7\xb7\x13\x74\x87\xe7\x35\x6d\xd8\xb2\x8f\x30\xbe\x4b\x17\xc5\x5c\x0d\x2f\x53\x67\xae\xbf\x06\x74\x01\x55\x9e\xa3\x19\xf2\xd1\x9d\xd0\x2a\x8b\x73\x9c\x85\x89\x0f\x40\x9d\x02\xea\x9a\x7b\x1a\xe5\xb3\xde\xcc\x40\x47\x7a\x99\x0f\x77\x1e\x64\x97\x46\x89\x29\x8d\x2a\x7e\xfc\x02\x3e\x34\x25\x46\xcc\x5c\x76\x97\xce\xd9\x54\x1c\x25\x2d\xfa\xf9\x69\x69\x56\x11\xc1\xc2\xd7\xb2\xd8\x9b\x41\x29\xdc\x40\xd0\x9e\xc5\xfe\x7c\xee\xdf\x2c\xe1\x0c\x28\x3e\xd3\x83\xf6\x22\x26\xb7\xf0\x8a\xfa\xf1\x9c\x50\xac\x5d\xc3\xf5\x3c\x0d\x05\xca\xb0\xc2\xc1\xf4\x43\xce\x7d\x3d\x97\x43\x68\x36\xb5\xeb\x31\x5b\x83\x0c\x63\x78\x38\xf2\x51\xa0\x0c\x91\xae\x9a\xbd\xca\x9f\x41\xa5\xab\x45\x79\xce\xa8\x58\xc5\xc6\x13\x14\x63\x7b\x14\x9f\xf8\x69\x80\xa1\xfc\xb4\x4f\xc7\x71\xcb\x9e\xe0\xec\xdd\x38\x9e\x64\x93\x10\x0f\xc1\x9a\xc6\x34\x40\xdc\xe5\x5f\x3a\xa6\x47\x11\x5b\xff\xc4\xf9\xdb\x73\x72\x1b\xc5\x44\xa7\xe3\x68\xc2\x96\xec\xa0\x10\xe9\xa0\xbc\x04\xd7\x72\xb3\x22\xfe\x78\x70\xab\x83\x8e\x58\x1e\x99\xe0\x80\x33\x9f\x3f\xb6\x26\x06\x72\xc1\x98\x23\x37\xbd\x94\xe4\x3f\xde\xeb\x0c\x3e\x13\x01\xfd\x06\xe3\x9a\x06\xc3\x69\x44\x71\x23\x0a\x97\x0f\x0d\xd1\x31\x0d\xbf\x91\x04\xe1\x7c\x49\x76\x20\x42\x52\x8c\x8a\xe3\x8b\x0d\x3f\xd8\xf1\x72\x9e\x4d\x70\x54\xf0\x0e\x2d\x46\x16\x0a\xd5\xbc\xfc\x9e\x7c\x82\x22\xe9\x89\x51\x14\xfc\xf2\xf3\x22\x6b\x92\xd0\x40\xd6\x16\x5c\x39\xe2\xd2\xf8\x16\x72\x59\xf6\x29\x11\x9b\x36\x5f\x0c\x0b\x05\x06\x5a\xee\x29\x81\x5f\x5b\x82\x25\xdb\x86\x58\xa0\xe1\x5e\xc8\xb4\xa7\x7b\x68\x2f\x0c\xb4\x2e\x60\x05\xe6\xae\x69\x66\x7b\x90\xd7\xb5\x05\x9b\x22\x8a\x66\x06\xb2\xc5\x59\x4a\xa2\xda\x29\x61\xc7\xb2\x10\x6d\xf3\xd5\x3d\x20\xf1\xb7\x0a\xab\x50\xf4\x60\xfb\x79\x3b\x4a\xc6\x70\x74\xfe\xfc\xe2\xd5\xa4\x24\x50\x64\xee\x7e\x6f\xc8\x72\xa9\x1b\x5b\x24\x40\x5f\xfd\x50\x09\x99\x7a\x05\xcc\x41\xff\xf2\x7e\x82\x77\x88\x69\xee\x0f\x3f\xa8\x72\xcf\xdf\x55\x52\x2e\xfa\xe1\xcb\xd1\x7f\x7e\x59\x5d\xee\xd4\x03\x5f\x0e\xfc\xc7\xf7\x95\xe0\xd4\xbf\xc9\x01\x5e\xbe\xad\x04\x4c\x3d\xe9\xe5\xa1\x5f\xd6\x43\xbf\xcc\x17\xf9\xe2\xf2\xbc\x02\x9a\x1f\x9a\x52\x9f\x12\x7d\xc1\xc0\x9e\xfd\x74\xf1\xc2\xd8\x8a\xc3\xb6\xcf\xdb\x51\x38\xd6\xc6\x5a\x19\x17\x82\x43\xfb\x77\x5c\x4f\xd1\x9e\xae\x63\x36\x2f\xfe\xc4\xb2\xb0\x85\x0a\x14\xcf\x2f\x5f\x5e\xff\xf4\xec\xdd\xb3\xd7\x4c\xf2\x1c\x6b\x93\xaf\x20\xf5\xf6\xf2\x9c\x11\x69\xff\xf4\xc5\x14\x5e\x9c\x5f\x02\x85\xeb\x12\x85\x02\xd0\xcb\x3f\xbd\x79\xfb\xee\x82\x17\xf7\xaf\x52\x71\x2b\x40\xdb\x53\xa9\x50\xc2\x6e\x9e\xbd\xbc\x90\x5e\xc2\x39\x2f\x97\x0c\x74\xa3\x58\xc8\x37\x6f\xdf\xbd\x7e\xf6\x0a\xf0\x5e\x48\x78\xfb\x30\x5e\x2b\x8a\xf1\x91\xc4\x09\x79\x59\x8f\x38\xd6\xbe\x57\xf4\x4c\xde\xc1\x22\xa2\xfb\xef\x5d\xa9\x88\xb3\xcc\x0f\xc1\xea\x0d\x9b\x9b\x17\x3c\x6c\x4c\x28\x86\xde\xb3\x37\x93\xc2\x32\xad\xe2\xc8\xb4\x88\x23\x3e\x7f\x7f\xde\x8e\xfc\xb1\x76\xa6\x55\x23\xfe\x04\xe7\xfa\xba\x76\xa6\x19\x5b\xe4\x8f\xb5\xd3\x03\x60\x4f\x05\xec\xd1\x01\xb0\x47\x1c\xd6\xaa\x81\x64\xac\xa7\xdb\xd6\x53\x02\x51\x84\xe1\xc9\x00\x24\xfb\x91\x48\xa6\x0d\x68\xce\x63\xd1\x1c\x40\x73\x1f\x8b\xe6\x02\x5a\xe7\xb1\x68\x1d\x40\xeb\x3e\x16\xad\x0b\x68\xde\x63\xd1\x3c\x40\xeb\x3d\x16\xad\x07\x68\xfd\xc7\xa2\xf5\x01\x6d\xf0\x58\xb4\x01\x43\x6b\x7f\x57\x8d\x15\x25\x14\xb8\xe9\x3b\xce\x4d\x4f\xb4\x27\x35\x9f\x10\xc0\x4f\xb4\x27\x9c\x4d\x1b\x75\x6c\x9a\x52\x6e\x08\x9e\x7e\x72\x08\xf0\x13\x01\x3c\xaa\x02\x4e\x43\xaf\x88\x0a\x32\xe0\x2f\x1c\xc3\x4b\x36\x86\x97\x63\xed\x3f\x4b\xf3\x0d\x93\x36\x32\xe4\x9c\xff\x56\x88\x95\xbd\x6c\x3f\xab\x06\x4e\x7d\x9b\x0a\xc8\xe7\xfb\x20\x5f\x44\xf7\xa1\x80\x3d\xdf\x07\x2b\xbc\x00\x0a\xf0\x17\xfb\xc0\x53\x3f\x1b\x02\xfe\x62\x1f\x7c\xea\xed\x52\xc0\xff\xb0\x0f\xbe\xe0\x68\x52\x20\xfd\x69\x1f\x52\xde\x15\xa4\xc0\xf9\x71\xef\x87\xd2\x30\x37\x1c\xfe\xe5\x81\xed\xf4\xde\xbf\x11\x18\xff\x55\x8d\x51\xf4\x79\x28\xe0\xff\xbc\x17\x3e\x57\xe5\x57\xfb\x38\x07\x3c\x76\x09\xe0\xd7\xd5\xc0\x39\xf7\x5e\x02\xf8\xa7\x7d\xc0\x79\x9e\xbc\xac\x06\x4e\x3d\x23\x09\xc8\xf7\x12\x64\xba\x43\x39\x71\x9a\xcd\xa3\xb8\xd9\xcc\xbb\xfb\x11\x48\x7f\xd9\xd3\x24\xf9\xa2\xfc\xdf\x43\x39\x33\xeb\xa1\xb1\xf6\xb7\xba\x11\x58\x72\xe5\x22\x3e\xe3\x57\x23\x48\x7e\x55\x04\xca\x4d\x35\x4a\x95\x97\x13\x81\x39\xad\x69\x5e\x85\x13\x11\x81\x35\xab\xc6\x2a\xf9\x8c\x10\x08\xe5\x5d\x76\x0e\x41\x72\xe0\x20\x50\x6e\x6b\x9a\xe1\x97\xd2\xd0\x99\x57\xc3\xa6\xae\x02\x04\xe4\xa2\xae\xbe\xfc\x4a\x22\x07\x5c\xd6\x35\x69\x11\xf4\xae\xbe\x87\xa5\xd6\x0b\xeb\xf8\x7f\x67\x08\x2e\xa0\x57\x12\xb4\x30\x4b\x8d\xb9\x59\xaa\x76\xa4\x0d\x73\x96\xcd\x0c\x8b\xa1\xfd\xae\xd0\x6b\x68\x0d\x0d\x63\x1c\xc0\x40\x28\x58\xc2\x8a\x4f\x95\xa3\x96\x14\xd6\x99\x9c\xc9\xa7\x00\x4f\x2a\xc1\x33\xdb\x49\x01\xb9\xae\x82\x2c\xd8\x3c\x8a\x31\xa3\x5a\xf3\x90\x70\x16\x95\xa1\x46\x95\x6b\xdf\x62\x74\x54\xf4\x94\x41\xc4\x7b\x6c\x4d\xb0\xc6\x93\x1a\x62\xd9\x62\x23\x86\xed\x09\xd6\x44\x9a\xbf\xc8\xf6\x53\xd8\x99\x60\x2d\x7b\xca\x5e\x62\x97\x67\xf3\x8c\xb7\x97\xe7\xb8\x33\xc1\xda\xdb\xcb\x73\x01\xc1\x45\x75\xdc\x65\x50\x3c\xcd\x5f\xbc\x38\xbf\xc4\xde\x04\x6b\x2f\xce\x2f\x79\x06\xdf\xdb\xe0\xde\x04\x6b\x3c\xa9\x6d\xf5\xc5\x66\xa3\x2f\xf0\xe7\x34\xec\xf6\xb4\xe2\x08\x3c\x77\xc2\x1c\xe4\x4d\x38\xcb\x17\xd7\x32\xd7\x26\x09\x44\xcc\x4f\x1b\x4b\x75\x92\x0d\x61\x9e\x95\x6e\xba\xa6\x68\x8d\x66\xd9\x7d\xa4\xd1\xce\x05\x6d\x16\x49\x4c\xb6\x1f\x5f\xc7\x71\x34\xf7\x29\xb9\x5e\x04\xf3\x85\x2a\x70\x4d\x11\xc2\x94\x6e\xdc\x15\xdf\x63\x4d\x4b\x4f\xe6\xd2\x8f\x9e\xcc\x4a\x19\xa6\x09\xba\xbb\x18\x93\x71\xf1\xc5\x04\x75\xbb\xce\xc0\x3b\xc1\xfa\x14\xf3\x41\x79\x1e\xcd\xc8\x33\x5a\xaa\x85\x61\x34\x9b\xd3\x13\xdc\xf5\x5c\x7b\x00\x94\xd6\x75\xd0\xa6\x6d\xa0\x20\x79\xe3\xbf\xd1\xd7\x86\x6c\x18\x5c\x2c\x7c\x3c\x9a\x46\x21\x0d\xc2\x35\xd9\x4e\xb1\x6d\x39\x9d\xa7\xfa\xb4\x05\x65\x32\x4c\x7d\xdd\xea\x7a\xae\x63\x19\xa6\xd7\xed\xba\x1e\x8a\x4d\x9c\x4e\x1c\xf2\x17\xb7\x60\x0f\x0b\xf0\x27\x78\xca\x8b\xdb\x73\x3b\xae\x91\xde\xf8\xc8\x75\xb6\x30\x5b\x4f\xbb\x7c\x18\x37\x82\xb0\x91\x9c\x25\xe3\x78\x22\x8e\xf7\x25\xf6\x49\xef\xc8\xe4\xf3\xd2\x90\x46\x7a\x8c\xa6\x05\x1b\xf4\x4c\x95\x31\x64\x8d\xce\x88\x87\xc6\xe7\xb0\x44\x3d\x6d\x91\xf4\x9c\xa1\x34\x79\xe9\x1a\x18\xb2\x6b\x86\xf8\xfb\x54\xfc\x35\xc5\xdf\x96\xf8\xdb\xd6\x86\x32\x66\xf9\x4a\x40\x7a\x5f\x20\x7f\xb1\x94\x51\xae\x82\xcb\xdf\x56\x65\x5f\xae\x82\x73\xf2\x70\x66\x35\x9c\x9b\x87\x6b\x1d\xf8\xdd\x76\xcd\x77\xb7\xc5\xa1\x2b\x26\x93\x3c\xf6\x71\x4d\x69\x90\x12\x1b\x15\x79\xaa\xd5\xca\x93\x7b\x23\x9a\xfb\xad\x96\xbb\x0f\xae\x85\xd2\x47\x76\x4a\x0b\x27\xcf\x12\x5a\x24\xf0\x37\x35\x18\x6e\x01\x63\x7b\x30\xed\x7f\xd6\x40\xda\x05\xc8\x9e\xa6\x62\xe3\xdc\xaa\x64\x28\xe7\xc4\x3c\x89\xbe\x92\x44\x71\xb9\xda\x4f\xe5\x3f\x52\x2a\x45\x10\x54\x9e\xb6\xf2\x38\x3f\x4a\xd5\xa4\xfe\xcd\x65\xce\x3b\x44\xf5\xe7\xb0\x84\xfa\x2f\x75\x14\xb3\xb7\xbc\xa7\x15\xe5\xfd\xef\xf5\x33\x50\x57\xcc\x19\xb9\xf5\xd7\x4b\x5a\xd7\x8b\x55\xd7\x09\x2f\x2e\xcf\x1b\xa9\x31\x61\xe3\xfb\xa4\x0d\x17\x69\x0a\xb3\xa7\x18\x90\x7c\x5e\x8e\xd2\xc7\xcb\x33\x9d\xe2\xdd\xd3\x38\x9e\x20\xed\x58\xe3\x06\x48\xf0\xc5\xa2\xa6\xcf\x18\x32\xe8\x92\x96\xb0\xce\x79\x52\xc5\x74\x81\xa8\xd4\xaa\x73\xc5\xfd\xab\xca\xce\x6c\x80\xee\x18\x56\x02\x26\x63\x0a\x7d\xf8\x66\x93\x3d\x3d\xbf\x78\xb5\x13\x5d\x73\x20\xa9\x0f\x8d\xdd\x68\x28\x97\x83\x6b\x9e\xf9\x39\xb3\x7c\xe7\x2c\x53\x44\xcb\xb1\x8f\x00\x2f\xef\x69\xbd\xf6\x1a\x97\x00\x57\x85\xb1\xe3\xb1\xcf\xab\xe0\xcb\xdf\xe5\xe6\x09\x10\x4a\x5d\x49\xc8\x30\xb6\x4a\x52\x3b\x33\x45\x65\xfd\x32\x19\xab\x24\xc9\xa9\x2e\x9f\x8a\x26\xe3\xf2\x5a\xd9\x7b\x60\x9e\xa8\x89\xe3\x61\x7c\x8a\x35\x4b\x6b\x36\xe3\x13\xac\x0d\xb4\x3a\x68\x6c\x5b\x4f\xeb\x88\xc5\x79\x69\xc9\x32\x5a\x9d\xfe\x50\x1b\x69\xea\xd0\x5d\x5f\xda\xab\x85\xf2\x68\x5a\x49\x22\xc9\x84\xf5\x4c\x26\xf1\x8d\xcf\x7e\x2a\x93\xa4\x42\x08\x90\x2c\xa9\xdb\xca\xab\xe5\xe5\xcb\x1c\x4d\x3e\x46\x97\x67\xcb\x94\x52\x71\x61\x50\x73\x9e\x94\x0b\xda\x6d\x29\x97\xeb\x07\x21\x7b\xdf\x15\xe5\xf3\xcb\x97\x8d\x69\x34\x23\xd9\x84\xa2\xe4\x08\xf5\x77\xb3\x98\x9b\xd2\xa7\xb1\xa6\x15\x1b\xf1\xc5\xf9\xe5\xbe\x81\x5c\x3f\x82\x47\xdc\x8a\x86\xdb\x4e\xa2\xdb\x34\x0c\x72\x41\x44\x95\x6e\x34\xc3\x92\x50\x90\x3b\xbe\xfb\x3d\x93\xfa\x24\x9f\x17\x79\x36\x40\xb7\x6c\xbe\x5f\x71\x12\x4f\xb4\xdf\x9f\x0c\x57\xf8\x89\xa5\xfd\xfe\x24\x57\xad\x27\xda\x0a\xb2\x3d\x5b\x5b\xe5\xf3\xb5\x58\x1b\x4a\xc4\xb3\xfb\x89\xa6\xad\xbc\x5f\x9c\xbf\x9a\x08\x57\x8d\xe3\x7c\x0b\x6a\x77\x8c\xa4\x66\xdd\x69\xca\x55\xa4\xaa\x73\x5f\x9c\x5f\x36\x7e\xa2\xa2\x6b\x57\x06\x82\x50\xa8\xd2\x44\x5e\xb8\x13\xfd\x93\x66\x36\xcc\x5b\x53\xfb\x2e\xd6\xcc\x95\xb9\xcb\xbf\xba\x2a\x8c\x0b\xcd\x5c\x15\xda\xd5\xfc\x5d\x51\x67\xb9\x41\x0f\xfb\xb6\x59\xfd\xed\xc3\xeb\xcd\x79\x40\xd4\x5d\xcd\x1f\xe5\xa6\x50\x4e\x8d\x95\x3c\x7f\xc0\x9c\x99\x27\xb8\x6f\xca\x54\x7e\x6d\xb3\xd1\xbe\x83\xc9\x6e\xb3\xd1\x4c\x48\x9c\x29\x3c\x4a\x71\xd8\x03\xa6\xe6\xaa\xcf\x28\xbe\x5f\x44\x2b\x0e\x66\xae\x58\x18\xc6\x47\xf9\x01\x9b\x3d\x3d\xbf\x78\xb5\xd9\x1c\xb6\x1e\x17\x9b\xd0\xc8\x6c\xac\x72\x6f\xe5\x8b\xc2\x80\x23\x9b\x6b\x73\x5a\x32\x3c\x3f\x00\xdc\x7f\xa5\x58\x85\x2a\x26\xb3\x3a\x5c\x01\xa2\x40\x86\x96\xab\x77\x0a\xb0\x6b\xe1\x12\xfe\x5c\xc2\xdf\x99\x09\x54\x53\x51\x87\xdd\x97\x08\x7d\x8b\x55\xb3\x14\xcc\x2a\x2f\x50\xca\x9f\xde\xf1\x41\x76\x67\xf8\x27\x26\x16\xc6\x78\xba\xc7\x94\x25\xd3\x56\x05\xb9\x0b\xf6\xed\xe8\x3e\x24\xf1\x8b\x0a\xbb\xba\x64\xe5\x87\x1a\xfb\x44\xce\xbe\x72\x41\x96\xcb\xa8\x71\x1f\xc5\xcb\x99\x86\x48\xc1\xd4\x92\x72\x1d\x59\x8c\xa9\x88\xc4\xfd\x6b\x30\x03\x7f\x39\xb4\x10\xf9\x7b\x94\x06\xcc\xbc\x8d\x42\xfa\x2b\x8f\x8d\xad\xdd\x44\xcb\x59\x16\x0e\xbc\x80\x9e\x94\xd1\x73\xea\xca\x9d\x91\x19\x35\x10\x1b\x45\xd1\x66\x13\x1c\x61\x9c\x6c\xbf\xc8\x70\x27\x42\x09\x8e\x75\xc7\x33\x64\xa5\xe5\xf3\xb7\xaf\xb8\x6a\x92\x25\xb8\xba\xf0\xe7\x37\x2f\x2e\xde\xbd\x7a\xf9\xe6\x02\xf4\x92\xd9\x13\x7f\xf9\xfc\xd5\xcb\x37\x7f\x06\x45\x24\xa4\x84\x82\xf1\xcd\x2f\x17\xef\x2e\x2f\x70\x7f\x82\x35\x91\xce\x5e\xbc\xbc\x7c\xf9\xfc\xd5\x05\xb6\x3d\xfe\x8e\x3f\x6a\x5b\x3d\xda\x6c\xf4\x68\xa7\x80\x0c\xb9\xf8\xef\x57\xe9\x21\xe5\xb0\xd8\xe9\x9d\x13\xee\xac\xe9\x5d\x74\x9f\xfc\x9f\x35\x59\x93\x9d\x78\x2b\xde\xfc\x10\xfb\x77\x24\xb9\xfc\x10\x40\x10\x61\xab\xf8\xf2\x59\x18\xdc\xc1\x86\x0e\xa0\x0a\x5b\x90\x95\x9f\x06\x26\xe7\x6d\xfe\x53\x14\x2d\xe1\x5a\x55\xd2\x7e\x11\xdd\x49\xaf\x52\xae\x82\x1b\x3d\x18\xe3\x10\x3c\xcc\x04\x15\x51\x5a\xb3\xb0\x27\x5f\xfa\x19\x95\x66\xf5\x77\x56\xff\x77\xbc\x62\xca\x4b\x42\xe5\xb6\xe2\x03\xfc\x73\x42\xfd\x98\x0e\x09\x22\xe1\x6c\x48\xb3\x9b\x27\xca\x16\xca\x9c\x2c\xa8\xdb\xef\x3e\x08\x67\xd1\x7d\x5b\x6c\xff\x8b\x2f\x8b\x88\xaf\xa2\x68\xb5\xbb\x02\x64\x94\x7d\x82\xe7\xc1\xf2\x2c\xa1\x0a\x65\x1d\x50\xc2\xbd\x7b\x65\xf6\xfa\xe9\xe2\xa2\xe2\x00\xd3\x3c\xc1\x5d\xe3\xdb\x54\x82\xdb\x76\xd7\x71\x1f\xf0\x3a\x41\x74\x17\xc0\x5b\xea\x13\x51\x89\x8e\x41\x18\xb3\xaa\x9d\xa2\xf0\x0f\x11\xac\x26\x31\xb6\x26\x6d\xe8\xd3\x0c\x5d\x05\x41\xc2\x59\xee\x22\x85\x9d\x5d\xa4\xa8\x28\x10\xb7\xaa\x55\x53\x8b\xc5\xf7\x4e\x48\x4e\x03\x5f\x09\x65\x54\x8c\x5c\x06\x40\xc2\xd9\x29\xcd\x85\x0f\xac\x80\x49\xc5\xb4\xbd\x83\xbf\x7a\x7c\xa7\x4e\xde\xd8\xf0\x28\xdf\x93\x88\x95\x63\x08\x1a\x6a\x44\x5b\x44\xe9\xcc\xfc\xd8\x51\xc5\x2e\x4c\xfd\x35\xee\xcc\x8d\x65\x1f\xf9\x29\x4c\x61\xda\x97\x3e\x70\xce\xcd\x76\x49\x5c\x11\x7f\x1f\x7c\x4c\x27\x98\xf0\x63\x93\x03\xfd\xad\x83\x22\xec\x6f\x24\x9c\xfd\xad\x11\x24\x0d\x1a\x45\x8d\xa5\x1f\xcf\x49\xbb\xf1\x3a\x4a\x68\x63\x19\x7c\x20\xcb\x87\x86\xdf\xb8\xf1\x67\x8d\xf3\xcb\x77\xa0\x12\xab\xf0\xd0\x3e\x4a\x4e\x30\x1d\x25\xe9\x8d\x02\x1f\x27\x52\x48\x0a\x70\x5f\xb8\xac\x8e\x6b\xe1\x1b\x68\x91\xee\xe1\x16\xb2\xdf\x1e\x8c\x93\x96\x3a\xa2\x9e\xea\x43\x72\x33\xa7\x8e\x6a\x7c\x4a\x9a\xcd\xb2\x53\xe0\xbc\x37\xa6\xb2\xb4\xfc\x69\xd8\xb2\xb3\x91\x32\xad\x72\x3c\xb4\xc6\x25\xf3\xde\x54\xf8\xf8\x21\xf6\xe7\x20\x76\x18\x68\x06\xd7\x38\xd2\x3a\x96\x8b\xc0\x3a\x3e\x26\xe1\x38\x99\x64\xe9\x74\xec\xf1\x46\xbd\x95\xfa\x5c\x81\x02\x8e\xe9\xab\xc1\xf2\x4c\x76\x5b\xbb\x08\xb5\x63\xb2\x24\x7e\x42\xf4\x5b\x63\x9b\xd6\x7e\x8e\xad\xd1\xfc\x24\x18\xcd\xd3\x7e\xbe\xc3\xcb\xf1\x7c\x32\xb6\x26\xe8\x81\xa7\xec\x09\xba\xe1\x29\x07\xee\x6e\xdd\xc0\x9c\x3d\xc7\x18\x2f\x9a\x4d\xfd\x0e\xb7\x6c\x03\xdd\x1d\x61\x3c\x6d\x36\xf5\xe9\x91\xb4\x6d\x11\xad\xd9\x6c\xea\xb3\x66\x53\xcf\x5f\x80\x99\x41\xeb\x19\x68\x5d\x10\xcd\x60\x03\xcb\x46\x35\xa7\xaa\xa6\x66\x18\xc1\x2d\xa3\x77\xb4\x62\x34\x71\x5d\x9d\xfd\xe9\xef\xeb\x20\x26\xba\x61\xa0\xd5\x23\x0a\xc1\x4a\x71\x10\x59\xee\xd3\xee\xce\x58\x95\xaf\x78\x09\xdb\xce\xd6\xc7\x60\x46\x22\xcd\x40\x12\x40\x5a\xa9\x16\x67\x55\x2d\x77\x91\xe8\x1a\xdc\xd1\xdd\xa1\x73\x7c\x97\x7a\xa8\xbb\x67\x49\xbb\xcf\x7a\xe0\xbe\x19\x81\x94\xc7\xe4\x91\xcd\x46\xa2\xcb\x6f\x67\x80\x98\x6a\xa0\xf3\x93\x7e\xb3\xa9\x9f\x9b\xb8\x6f\x18\x88\x21\x66\xd2\x5f\xb3\x59\x81\x99\xf3\x1c\x05\x18\x20\x16\x56\x42\xdf\xf0\xeb\x1f\x00\x29\x24\x45\xce\x48\x97\xf8\x7a\x74\x8d\xcf\xd1\x39\xbe\x44\x76\xf3\xbe\xd9\xcc\x15\x65\x2b\xa0\xb9\xec\x58\x49\x7b\x01\xa3\xb7\x48\xbc\xd9\xd4\x9d\x6e\x0f\x63\x7c\xdd\x6c\xea\xd7\xd8\xee\x1a\xc8\xe9\x7a\x18\xe3\x73\x46\x1c\x5b\x86\x81\xae\x4f\x9c\xae\x57\x5d\xe0\x79\x6b\x1a\x2d\xa3\xb8\xa5\x99\xd7\xac\x7d\xea\x60\x53\xc0\x73\x38\x3f\x65\x9b\xf2\x1b\x63\x66\xe2\x27\x27\x8c\x29\x1a\x80\x82\x05\xe8\x7d\x30\x23\xad\xe9\xc2\x8f\xb5\xd3\x27\xe6\x83\xa9\x9d\x1c\x33\x98\x53\x2d\xf3\x50\xfd\x50\xd4\x71\x9e\x3a\xdd\x6e\x15\x2d\x7e\x6c\x51\x4d\x4d\xe8\xb6\x1e\x84\xee\xab\xa9\x0d\x67\x26\xd6\x9a\xfe\xdd\x6a\x54\xd0\x27\x9d\x88\x17\x4b\x5a\xcc\x3f\x15\xf9\xf3\x5d\x7e\xaa\x72\x99\x99\xf8\xe1\x04\x6b\x0d\xed\x4c\x6b\x86\x37\xc9\x6a\xa4\x0d\x1f\xb6\x53\x7c\xb7\xdd\x7e\xd3\xe1\x96\x8d\xf9\x9a\x89\x2e\x8f\xb1\x36\xb6\x71\xe5\xb2\x5b\xd8\xe9\xd5\x2c\xbb\xd2\x41\xcc\x5d\x40\xd9\xb8\x05\x51\x41\x43\x9f\x05\x3d\x49\x0d\xc5\xb3\x51\x49\xc8\x2e\xdf\x12\x07\x2a\x97\xa9\xe3\xda\x92\xe4\x01\x6e\xad\x24\x3d\x99\x80\xcd\x4a\x28\xaf\x1a\xfb\x51\x6a\x64\x8e\x9a\x0f\x8c\xad\x09\xdc\xca\x23\xcd\x66\x76\x75\x14\x02\xb2\x28\x97\xfc\x00\xd3\xca\x77\xd1\x2e\xe8\x2d\xc4\xc5\x4d\xc4\x73\x10\xea\x41\x85\xf7\x5d\xb8\x68\xaa\x47\x4a\x09\x67\xb3\x49\x4e\x2c\x83\x17\x29\x3c\x60\x41\xf6\x71\x8c\x31\x8e\xce\x98\x40\x3c\xb4\xd0\x12\x47\x4c\xcc\x38\xa3\xec\x51\x21\x5f\x8d\x42\x05\xb7\x70\xe2\x59\xd7\xa5\x4a\x86\x08\xf9\x68\x29\x36\xb7\x0b\x9c\xb4\x22\xee\xbf\xec\x31\x14\x54\xb1\x33\x41\xcc\x5b\x18\x06\x8a\x8e\x30\x4e\xd2\x7b\xaf\xc1\x1f\x56\xec\x04\x59\x68\x2a\x1f\x1d\x29\x98\x21\x4f\x32\x34\xa4\xbb\xc6\x6a\xfa\x0a\x73\xb1\xcc\xf5\x41\xd0\x6c\xea\x01\xb6\xd3\x4b\x68\x55\x97\x22\x67\xc1\xc7\xdd\xb5\xc8\x48\xa8\x5c\x16\x5c\xdd\x12\x48\xe7\x46\x0b\x3f\x7e\x4d\xfc\x64\x1d\xa7\x30\xa6\xb6\xfa\xa4\xa1\x14\x8f\x46\x2b\x4c\x1e\x8b\xb4\x24\xb7\x14\xd3\x3a\xac\xfb\x60\x46\x17\x45\x24\xc8\x92\x05\xb8\x12\xce\x53\x3d\x6e\x51\x43\x60\x66\x9a\xb0\x77\x84\x2d\xb2\x24\xc6\xfe\x1e\x5d\xd8\x6e\x67\x90\x4e\x77\xd7\xe4\x13\x25\xe1\x2c\xd9\x6c\x72\xbb\x68\xd8\x84\x62\xa1\x4a\x02\x7d\xa8\xe8\xb6\xb7\xb7\x9b\xcd\xe7\xeb\x6b\xe8\xc6\xeb\xeb\xe1\x78\xb2\x0d\xc2\x84\xfa\xe1\x94\x44\xb7\x8d\x67\x71\xec\x3f\x34\x9b\xe5\x4b\x34\x19\x38\xa6\xdb\xdc\x57\xb2\x89\x0b\xa6\x87\x46\x10\x36\xa8\x41\xdb\x0b\x3f\x79\x7b\x1f\x66\x7a\xab\xd8\x80\x58\x52\xf1\x04\xd3\x71\x3c\x31\xb6\x92\xd3\x1d\xa8\x62\x4e\xc3\x27\x34\x19\xd3\x28\x4c\x68\xbc\x9e\xd2\x28\xc6\x74\x4b\x00\x0c\xd1\x1d\xfb\x61\xa1\x84\x89\xcf\x44\x25\x39\x0f\xe9\xb1\x31\xd4\x83\x1c\x58\xbc\x4b\xa3\x90\xdc\x37\x02\x63\xcb\x5a\xfc\x2b\x94\x6c\xb6\x65\xa0\x10\xc7\xfa\x00\x26\x17\xdd\x36\xd0\x12\xc7\xba\x63\xb3\xbd\xcd\x25\x5c\x0d\x6c\xdf\xc6\xd1\xdd\xb9\x58\xdc\x75\xdb\xb3\x0c\x34\xcd\xbb\xeb\x59\x20\x6d\xae\x29\x34\x75\x15\xe6\x85\xbf\xbe\x7d\xc7\x15\x78\x2c\xc1\xb3\x32\xdd\x1d\xa8\xed\x24\x55\xdb\xba\xca\xf1\x22\xb7\x7e\x4c\xd2\xe9\x93\xb4\xa7\xfe\x72\xc9\x55\x1b\x3c\x6e\x5c\xda\x3d\x61\xc1\xf0\x2f\x6c\x5f\xdf\x80\xfe\x05\xc7\x2c\x9d\x5f\x34\x71\xc0\x72\x72\x5c\x8e\x13\x96\x11\x84\x41\x76\x99\x38\xd1\x0d\x14\x66\x71\x08\xd8\xdb\xbb\x68\x46\xb8\x0a\x6c\xd9\xce\xe6\x8f\xd7\x2c\x53\xa7\x00\xb0\xf4\x13\x1e\x09\xe0\x45\x74\x1f\xbe\x0f\xee\x08\xb6\x58\xb6\x3f\xa5\xc1\x47\x52\xc0\xc0\x51\x7a\x58\x19\xa6\x0a\xb3\x40\xa7\x88\x14\x98\xa5\x54\x1e\x2c\x0d\x14\xa8\x3a\x1f\x4e\xbc\xa2\xef\xe3\xe0\x2e\x85\x2f\x78\xd2\xc9\x94\x72\xd7\x51\xc8\x80\xc0\xd6\x94\x63\x42\x60\x86\xd7\xd1\x47\xb2\x17\xf1\x75\x0a\x59\xc6\x66\xd5\x3d\x0c\x3b\x33\x3d\xcf\x61\xff\xbc\x3a\x0c\x97\x5b\xba\x6f\x0b\x2d\x24\xa2\x0f\x49\x6a\x7b\x70\x03\x94\xb5\x78\x76\xba\xcd\x5b\xa9\x1d\xdd\xde\xea\x1a\x8d\x83\x3b\x0d\x55\xb5\x5e\xce\x73\x50\x59\x28\x29\x5d\x39\x87\x3a\xcc\xa2\xfb\x50\xab\x6a\x12\xa3\x58\x66\xce\x52\xf2\x49\x43\x5a\xb8\xf0\x8b\xca\x26\xdf\x85\x7f\x74\xc1\xb2\x68\x04\x8a\x93\x20\x31\x90\x84\x72\xbb\xdc\xbc\x5b\x54\x31\x33\xe5\xa6\x31\x6d\xe1\x27\x19\x8a\x86\x3e\xcf\x09\x1d\x2a\x39\x5a\x0c\x34\x7e\x26\x94\x61\x5c\x16\xf4\x86\x2a\x88\x8b\x70\x96\xba\x75\xd1\x8f\xc8\x66\x73\x44\x0d\x11\x21\x90\x6d\xc0\xb9\x67\xd6\xb1\xcd\x1f\xec\x09\x13\x74\xc3\xf5\x1d\x89\x59\x67\x0c\x8f\xc0\xf3\xd9\x6d\x30\x5f\xa7\xcf\x5b\xe3\x90\x3a\x65\xe2\xc7\x7b\xf2\x89\x7e\xab\x4a\x31\xb9\x92\xd7\x87\x57\x4f\xd3\x46\x3b\xd1\x16\xf3\xea\x70\x19\x0b\xd4\x88\x01\x1e\x4f\x46\x41\xe1\x8c\x2c\xf6\xc3\x64\xe9\xa7\xea\xe8\x57\x41\x48\xde\x47\x7c\xd2\xd7\x0b\xbc\x37\x27\x14\x3c\x0d\x1b\xe8\xc8\x42\x10\x7c\x2c\x36\x8c\x4c\xc5\x14\xc1\x07\x4d\x7b\x14\x9d\x70\xc9\xd9\x06\x9f\x04\xe2\xf6\xbd\x44\x28\x62\x2b\xcd\xfe\x02\x24\xe8\xc8\x32\x46\x49\x3b\x48\x7e\x8d\x99\xe8\x36\x3b\x0b\xc6\x3b\xd7\xba\x13\x13\xfb\x43\x51\x19\x1f\xb6\xaf\xf9\x3e\xac\xfa\x34\xbc\x3c\xf8\xeb\x4c\x98\x85\x9d\xc3\x81\x85\xc8\x3c\x5f\xdc\xf9\x2b\x5d\x79\x31\x4d\x5c\x94\xd7\xa7\x08\xee\xc8\x19\xed\xbf\x47\x41\xa8\x87\xed\x20\x79\x7d\xf9\x2b\x68\xf1\x93\x33\xed\x2a\xbe\x0a\xb5\xa1\x76\x15\x6a\x07\xf0\x62\x7e\x9c\x16\x47\x9f\x3c\x91\x70\x3e\xaa\x98\x02\xf9\x1c\xf6\xba\x3c\x15\x24\x29\x40\xaa\x7e\x2e\xcd\x0d\x75\x8d\x58\x27\x3b\x73\xb7\x61\x96\x81\x4a\xd2\x34\x6c\x93\x73\x9c\xa5\x69\x4c\x4a\x41\x21\x0e\x90\x8f\xad\x91\xbf\x8b\x9a\xe5\xa7\x2c\xb6\xc4\x64\xec\x4f\x46\x91\x89\x97\x63\x7b\x82\x18\xad\xe5\xd8\x99\xb0\x0f\x9c\x62\xbf\xd9\x4c\x5a\x2d\x14\x40\x2a\x6c\xb5\x0c\xe1\x30\x21\xdc\x6c\x32\x4a\xdc\x63\x13\xdf\x98\x44\xed\x84\xf8\xf1\x74\xa1\x1f\x5f\x25\xe6\x77\xc7\x3b\xef\x31\xd3\x66\x53\x5f\xec\x36\x7b\x0b\xb6\xe9\x40\x8b\x13\x9c\x64\x83\x6f\xbb\x13\xf1\x33\xaf\x0a\x6c\xeb\x53\x6c\x30\x59\x55\x9f\x77\x23\x35\xfa\x46\x47\x59\x8a\x23\xf8\xdd\x89\x82\xb1\x35\x98\x98\x12\x24\xaf\x82\x70\xfd\xa9\xd9\x24\xa9\x45\x65\x7e\x12\xcb\x3c\x7d\xc0\x2b\xae\x4b\x08\xc9\x7d\xb2\x9b\xb9\x65\x9c\x32\xaf\x48\x75\x2f\x9d\xf3\x55\x1e\x7e\x94\x55\x17\x5c\x37\xb1\x6f\xfe\x04\xcd\x45\xdd\x0c\xba\x95\x16\x3a\xf6\xee\xd9\x72\x59\x35\x76\x02\xb1\x52\x3d\x5b\x2e\x9f\x81\xf0\x96\xd9\xfd\x56\x0d\x0f\x2e\x56\x29\x16\x4e\x4e\x50\x48\x5d\xd9\x21\x4b\x15\x99\x39\xe1\x02\x24\x1f\x64\xe7\x51\x14\xcf\x54\x1e\xbc\xe0\x5c\x82\xbf\xd5\x89\x42\x1a\x10\x59\x39\xf9\x56\xb9\x5d\x57\x28\x2a\x60\x32\x4e\x59\x67\x6c\x4d\x5a\x2d\x04\x53\x3d\xff\x63\x4a\xa7\x1f\x3c\xf4\x53\x45\x2d\x40\x20\x11\xb6\xc6\x77\xd1\x3a\xa4\xf5\x55\x49\x6f\xc0\xbd\x8f\xd2\x3d\xb5\xaa\x6e\x06\x1b\xfc\xd2\x79\x16\x2b\xfb\x53\xa9\xd6\x62\x97\x9c\x55\xe8\x14\xf3\xc0\x3c\xf1\x99\x35\xd4\xe9\x29\x98\x65\xb6\x30\x13\xa8\x76\x23\x3e\xd3\xfb\x50\xd4\xea\x5a\x06\x62\xff\x75\x7a\x8c\xbb\x96\x71\x0c\xef\xfc\x9b\x44\xa7\x86\x09\x69\x08\x67\xa1\xdb\x9d\xa7\xd4\x90\x39\x22\x9b\x64\x0b\xd5\xb6\xc0\x8f\xcc\xcd\x9a\xd2\x28\x64\xf2\x09\x44\xba\x27\x21\x7d\xc1\x55\x97\xd9\x44\x3d\x8b\xfd\x79\xa1\xed\x32\xfb\x57\xd1\xba\xe7\xcb\x60\xfa\xe1\x9c\xbd\xd2\x09\xb8\x40\x58\x04\xb7\xf4\xcf\xe4\x41\x1c\x13\x45\xe1\x25\xcb\x00\x28\x9d\x88\xc8\x40\xbc\x81\x32\xc4\x1d\x28\x78\xdc\xc9\x60\x9d\x3a\xd8\x17\xd1\xfa\x26\x07\xeb\x2a\x60\xd3\x4d\x3e\xb0\xfd\x6a\x07\x2c\x6a\xe0\xcf\x66\xfb\x17\xa0\x23\x4b\x6a\x52\x25\x5e\xed\xb6\xa8\x20\x22\x17\x4d\x6f\x2a\x04\x66\xb6\x3a\x6a\x55\x5b\x23\xa5\xe4\x7d\x10\xd9\xf5\x4a\x53\xef\x79\xe4\xee\x7e\x19\x52\x12\x7f\xf4\x97\x6c\x03\x19\xe3\x84\xd0\x34\x43\x31\xbb\x93\x3c\x22\x9b\x4d\xba\x96\x3c\x19\xab\x17\x7c\xc5\xec\x5c\x5d\xab\xea\x9d\xcf\xd7\xb6\x57\x35\xe5\x9a\x26\x03\xd9\x26\x6b\x96\xda\x06\xdc\xd7\xbe\x6c\xf1\x91\x46\xee\x6e\xe4\x54\xce\xe8\x49\x61\x0d\xca\x4e\xb0\x4b\x2f\x2f\xc2\xd4\xc7\x92\x6a\x66\xd7\x89\x62\xd6\xc8\x0d\xc5\x03\x3f\xfe\x8a\xfb\xfc\xb3\xd0\x9e\x25\x2c\x35\x69\xad\xd5\x47\x54\x7f\xa6\xbe\x22\x35\x88\x75\x8d\x03\x6b\xbf\x95\x4d\x21\x79\x19\xbe\x92\x1e\x13\xee\xc7\x35\xaf\xad\xc9\x04\xe4\xc2\x5a\x10\xd3\x94\x9b\x3e\x37\xb3\x55\xba\xff\xac\xa8\xfe\x68\x57\x4b\x75\xf3\xfe\xfa\xf6\xdd\x8b\x6c\x02\x67\xaf\x7e\x8d\xe2\xd9\x33\xaa\xab\x16\x8e\xdc\xa4\xf9\x87\x97\xe3\xd5\xcb\x37\x17\x85\x72\x30\x49\xfe\x99\xd8\x32\x95\x8b\x22\x2f\x35\x8a\xf2\xe8\x21\xb9\x6f\xbc\xf0\x29\x31\x58\xbf\xb1\x51\xa5\x1b\x23\x9d\x8a\x73\x15\x49\x27\x76\xda\xb1\x2c\xae\xb5\x6b\x5f\xcf\x02\xae\xc4\xfd\x21\x8e\xee\x5e\xa5\x80\xd9\xe5\x76\x62\x9c\xda\x96\x91\xd5\x67\xb7\xbc\xb0\xfd\x44\x05\xf5\xec\xbe\xef\xb2\x4c\x0e\x8f\x49\x7b\xe5\xcf\xc9\x5f\x10\xff\xfb\x5b\x6a\x91\xb3\xa3\x6b\x9a\xa5\xfa\xd7\x96\x4f\xe5\x93\x24\x13\x1e\x76\x92\x82\xba\x34\x4c\xb4\x12\xe5\x31\xd0\x5e\x60\x3b\x05\xfe\xad\x4a\xcc\x60\xb3\x6e\x25\xaf\xc8\xe3\xee\x4c\x3d\x7e\x2e\xc2\xd9\x2e\xe2\xb8\xe2\x9d\x3d\xe1\x3a\x86\x9d\x95\xd8\x63\xe7\xbb\x9a\x29\x08\x0b\xee\x3c\xab\xf9\xfc\x49\xed\xac\x50\x8d\x69\x4d\xb0\x35\xac\x7b\xab\x10\x8f\x87\xf5\x45\x65\x03\x3a\x9d\x63\x38\xb5\xf7\x51\x3a\xa6\x2b\x3e\x54\x29\xda\x15\x9b\x4c\x12\x9b\x77\xed\x56\xc6\x3c\xb5\x6a\xeb\xac\xa8\x55\x2b\x0d\x0d\x5d\x26\x75\x62\xd5\xcc\xd3\xd0\x80\x15\x73\x7c\xa1\x67\x6e\xf2\x06\x8f\x45\x77\xed\xfb\xe6\x76\x4e\xa7\x62\x66\xe7\x65\x00\x17\xef\xa0\x56\xa8\x9e\xe0\x39\xa4\x69\x6e\x99\x14\xca\xca\x8d\x2b\x47\xc1\xd8\x62\x44\x84\x12\xad\xba\x48\x62\xb6\xca\x09\xa6\xe5\x69\x22\x6b\x4a\x59\xa8\x2a\x37\xb3\x6c\xeb\x26\x9c\xb2\x04\xc9\x4a\x92\x64\x38\x0a\x3a\xb2\xbf\xa0\xff\xf1\x58\xd9\xfb\x52\x8c\x2c\xb6\x83\x2b\x9b\xc4\xb1\xdd\xd4\xa4\x72\xbc\xe0\xb1\x1c\x69\x8b\x51\x99\x94\xb6\xc8\x15\x53\xd5\xcf\x2b\x85\x5c\x53\xad\x96\x2a\x11\x99\x46\xe1\x47\x12\xd3\x5f\xc4\x75\xd6\xf3\x68\xf9\x3e\xca\xbc\xba\x80\x07\x3a\x85\x8d\x82\x60\x43\x36\xb7\x05\xd8\x1a\xb1\xc4\x29\x0e\x20\xec\xab\xc5\x23\x6f\x72\x89\x21\x6e\xb5\x46\x3b\xd7\xb9\xe5\x3d\x2d\x1f\xdd\x95\xb3\xac\xa4\x43\x8d\x0f\xd0\x3f\xf2\xce\x4d\x8d\x26\xf7\x57\x8e\x1f\x12\x45\x38\x40\x09\x44\xeb\x6b\x45\x28\xc4\x16\xe8\xcc\x82\x5b\x9d\x7b\x38\x89\x53\xf7\x09\x91\x21\x4c\x34\xa2\x53\xab\xd9\x2c\xbf\x6c\xd9\xc6\xc8\x88\x5a\x2d\x1e\x9c\x2c\x38\x89\x33\xd5\x4f\x09\x32\x30\x19\x64\x60\x9a\xdb\xcc\xb2\x6b\x09\x1f\x47\x0b\xf8\x03\x04\x40\x86\x1b\x2f\x79\x3b\xea\xa1\x69\xa2\x65\xab\x65\x20\xd8\x49\x8e\x17\x22\xdb\x37\x4d\xb4\x30\x4d\x83\x17\x48\xd8\x3a\x06\x09\xab\x22\x6b\xdc\x4b\xb2\xf2\x63\x9f\x46\xb1\x5e\x28\xa5\x31\x32\x04\xf5\x96\x5d\xa6\x1f\xb5\x5a\x2c\x21\xea\x60\xda\xb9\x5a\x1c\x42\x9e\x55\xcd\x18\x19\xa2\x94\xa6\x5d\x2a\x27\x0a\x78\x42\xa8\xfc\x84\x3e\x2a\x32\x93\x56\x88\xf8\x67\x86\x3b\xb3\x90\x56\x64\x86\xa6\x6f\xca\x81\x21\xa3\x65\x52\x3e\xb7\x2a\xc8\x80\x75\x32\x9e\x58\x51\x32\xb7\xfc\x4a\xc1\x7c\x4c\x85\x59\x35\xe3\xbb\x8a\xe5\x3b\xbf\x53\x48\x95\x7c\xca\x32\xa5\xab\xd8\x57\x94\x2a\x37\xfb\xf0\x37\x7e\xbc\x5b\x40\x7f\xf1\x97\x6b\x92\xbc\xe3\x66\x85\x33\xdd\x38\x13\x85\x1f\x8a\xbf\x66\x5a\x3a\x5e\x9b\x52\x19\x15\xbd\xa9\x90\xc3\xb4\x86\x6e\x8c\x27\x9f\xb7\x4f\xae\x34\x2d\x73\x11\x4e\x8c\x53\x6c\x29\xab\xcc\x45\xe0\x03\x77\x5b\x6c\xf6\x23\x87\x34\xb2\xcc\x05\x5b\x44\xb7\xba\xdf\x86\xf5\xfd\xe2\x2e\xa0\x94\xc4\xc6\x88\xe6\xce\x92\x79\x58\x70\xbc\xfe\x36\x4e\x72\x1f\x79\x83\x45\x3a\xe4\x53\xdc\xec\xd8\x73\x14\x51\x6a\xb9\x9d\xa2\x57\xde\x03\x42\x76\xf5\xa6\x55\xbd\xe3\xad\x3a\x77\x24\xf9\x33\x3a\x85\xca\x58\x3e\xa9\xcb\x5f\x58\x93\x4a\x71\x36\xb6\x50\x6a\xc1\x94\x2f\x79\x59\x7f\x2e\x76\xbb\x90\x59\xcf\xf2\x65\x4a\x43\x05\xa1\x2f\x3d\xa0\xac\xa9\xfc\x45\x38\x7b\x74\xd5\x0f\x50\x1c\x83\xb5\xbb\x4a\x86\x68\xd9\xe5\x56\x83\x9a\x9d\x1d\x49\x0d\x20\x64\xac\xda\x56\x1b\x2b\x48\x31\x51\xaf\x92\x41\x54\xac\x03\x7b\x98\x4a\x8c\x72\x8f\x72\x01\x30\x15\x0f\xe5\x0d\xc7\x78\xa7\x2d\xfe\xba\xb2\x71\x69\xd4\x50\xe4\xca\xe5\x65\xfc\xc2\xd5\x56\xfb\x18\xa4\x10\xa8\xa9\xb2\x69\xd5\x1a\xd4\x52\xa9\xd3\x53\xea\x44\x3e\x6e\x6f\xb0\x89\xfa\x94\x82\xa4\x9c\x3b\x92\x6e\x36\x99\x70\x70\xca\x9a\xa1\x68\x82\xa7\x38\x2b\xc9\xf3\xa0\x5a\x79\x24\xb5\x7d\x0b\x13\x45\x73\x49\xe0\xbc\x09\xab\x80\x55\xb0\x27\xd6\x99\xae\x9c\x00\xd1\x91\x65\x0c\x55\xa5\x51\xce\x03\x40\xa9\xb2\xf4\x6c\x37\x75\x64\x1b\x99\x25\x5d\xd1\x9e\x08\x07\xff\xad\x2b\x40\x76\x6a\xcb\x6f\x83\x66\xea\xf3\xf2\x8a\x90\xfa\x90\x49\x6d\x26\x85\xae\x25\xc9\xbc\xc9\x60\x71\xf2\x94\x37\xac\x12\xe6\xb2\xe2\x06\xee\xbb\xe8\x9e\xdf\x2a\x4d\xd5\x95\x4b\x3f\xa1\xef\xc8\x34\x8a\x67\x64\x26\xe4\xe3\x82\x3a\x33\xff\x3e\x95\x8b\x8b\x14\xb2\x19\x27\x0a\x75\x8d\x97\x25\x3d\xa4\x2c\xb8\xba\xc9\x5f\x88\x53\x60\xc6\x24\x09\xfe\x41\x0e\xc4\x2c\xb5\x84\x42\xeb\x5f\x28\x48\x14\x72\x62\x05\x42\xb9\x18\x64\xf2\x6c\x1c\x49\x7e\x7a\xb6\xc8\x52\x2e\xc1\x8a\xc3\xd6\x54\x3b\x23\x9f\x84\x9d\x5a\x85\x21\x2e\x03\xa4\x77\x55\xca\xdd\x35\x22\x29\x2b\x4b\x1d\x59\x41\x49\xdd\x50\xc2\x50\x35\x08\x49\x3d\x36\xb7\x34\x2d\xf6\x52\xe1\x14\xe1\x51\x84\x38\xff\x0b\x98\x6a\x8e\x4a\x2b\x5f\x58\xc3\x46\x3a\xd9\x6c\x68\xa6\x86\xac\xe1\x47\x19\xb7\xae\x0d\x16\xb5\xc5\x7e\x2a\x13\x53\x35\x89\xc2\xfc\x59\xa6\x5e\xf7\x7d\xa3\x3c\x84\x1f\x51\xba\xaa\xa1\x0b\x05\x2d\x87\xc8\x2b\x70\xb3\x24\x28\x56\x91\x92\x7a\x84\xdf\xca\x13\xde\x23\xe4\x1e\x29\xcc\x20\xd5\x98\x65\x45\xc5\xf0\x4b\x18\xe3\xac\x48\x64\xf8\xc8\x11\x55\xb6\x04\x18\xe5\xc6\x65\x51\xaf\xf2\x54\x3d\x22\xd5\x7d\x9b\xba\x6e\x39\xc2\x38\x1b\xb2\x95\x40\xb8\x1c\x2a\x26\x9d\xa8\x14\x9b\xbf\xdc\x79\x77\x3d\xd1\x63\x65\x71\x8d\x96\xa2\x66\xa3\x12\x37\xe7\x34\x61\xe8\xa8\x1c\x92\x3e\x0a\x7f\x5d\x10\x52\x2c\x9a\x88\xac\x07\x9e\x93\xa9\xff\x5b\x5a\x56\x7b\x24\x72\x84\xb6\x16\x10\x61\x82\x6e\xbf\x78\xfb\xfa\xfa\xc5\xc5\xab\xf7\xcf\xae\xb9\xae\x59\xdd\x39\xc3\x03\xf0\x7f\x7a\xf6\xa7\x8b\xdd\x8d\xe0\x32\x05\xc5\x00\xae\x58\x3b\x76\xde\x76\xb2\x7a\x3c\xa5\x48\xb6\x0b\xd8\x4a\x52\x54\xb4\x9e\x2e\xf8\xce\x4a\xda\xba\x32\x5e\x86\xf7\xbf\x61\xd2\xa6\x2c\x01\xc1\x7a\xf8\x21\x82\x92\x50\xdd\x09\xc2\x8e\x5a\x4b\xa6\x36\xda\xff\x41\x04\xe1\x0f\xf7\xb2\xa3\x89\x55\xf5\xde\x09\x49\xe9\xa0\xdc\x2b\x1e\xe5\x5d\x6f\xe4\xa3\x96\x9c\xed\x4c\xf3\x8e\xaf\xe2\xb3\xab\xf0\x78\x8e\xb4\xab\x58\x33\x86\x64\x17\x41\x3f\xca\x42\x53\xc0\x4c\x98\xf9\x78\xd5\x6e\x83\x4f\x64\xa6\x21\x5a\xb8\x38\xa1\x39\x16\x4c\xcb\xc5\x79\xb3\x94\x0b\x17\x33\xd8\x6e\x39\x20\x21\xfd\x4b\xcb\xb6\xc4\x5c\x9e\xbf\xec\x21\xde\xfe\x26\xbd\xfd\x07\xd7\x6a\x6a\xb6\x65\x59\x2c\xf7\x36\x9a\xae\x13\xbd\x4a\x7e\x90\x8a\xcd\x77\xd7\x85\x32\x17\xb2\x44\x89\x0b\x79\x50\xde\x42\x0e\x2b\x62\x21\x43\x94\x8a\xef\x43\x3a\xc6\xa3\xfd\x7f\x80\x1e\x86\xac\xfc\x18\xc2\x0d\xfd\x10\xc5\xef\x53\x61\x33\x40\xb4\x3d\x8d\x56\x0f\x72\x14\xd5\xd4\xad\xf9\x0d\x1b\x4d\x24\x06\x73\xca\x97\x17\x67\xc2\x22\x6e\xba\x0c\x56\x37\x91\x1f\xcf\x5e\xf8\xd4\x6f\x27\x84\xb2\xbf\xba\xc6\x2d\x73\xe3\x92\xc5\xda\x90\x54\xc1\x53\xf2\x89\x1e\xaf\x96\x7e\x10\xca\x58\xaa\x51\xc9\x2a\xe2\x27\x94\xa8\x8a\x0b\xb1\x5c\x68\xb4\x62\xed\xe1\xcf\x7d\xde\x45\xc2\x78\x37\x83\xdb\x39\xc0\x8e\x71\xa0\xc7\xa8\x58\x3f\x61\x2e\x6a\xec\xe2\xfe\x41\x58\x5b\x08\x44\xe5\xb3\xf5\x1a\x9a\x14\x3c\x3d\x09\xf3\x39\x28\x0d\xf7\x8e\xd6\x9e\xfa\xe1\x94\x2c\x75\x62\x6c\x47\x07\x35\x5b\xb3\x19\xeb\xca\xe6\x9c\x17\x9a\xd3\x90\xda\x8f\x21\x96\x9b\x74\xae\x68\x52\x7e\x28\x70\x17\x7d\x84\x6e\x67\xb2\xc0\xcf\xe1\x8c\xc4\xfc\x94\x19\x2e\x10\xe3\x08\xd1\x76\xcc\x78\x12\x4e\x9d\xab\xb8\x80\x8f\x52\x44\x45\xfd\x4b\x3d\x05\x91\x64\xd8\x33\x4c\x9b\xff\x7b\x35\xe9\xdf\xf5\x6a\x52\xcd\x8d\x9f\x34\x12\x61\xf5\x6d\x9f\x20\x17\x5d\x9a\xa2\xa0\x7d\xcd\x9d\x59\xa4\xbb\xd3\x18\x05\xa5\xbb\x35\x07\x18\xf4\xc3\x04\x59\xaf\x23\xbb\x06\x98\x3f\xe4\xfa\x00\x9f\x7b\xf7\x7c\x8e\x03\x3d\xce\x44\xfc\x4e\x6c\xbe\xeb\x6c\xe3\x04\x8c\x68\x2e\x71\x8e\x38\x8b\x84\xf4\xaa\xa7\xaa\x8e\x12\xdc\x9e\xc8\x90\xc2\xd7\x90\x0a\x53\x5a\x4f\x7d\x11\x24\x41\xab\x03\x67\x0b\x8f\x66\xd5\x82\xc0\x6a\xa5\xb5\x06\x83\xc1\x80\xdc\x55\x40\xe6\x83\x54\x6a\xbf\x56\x91\x23\x34\x8b\x56\xa0\x6b\x7e\x1c\xf8\xe9\xdd\x7d\xa4\xd1\x78\x4d\xb2\x8a\x15\x18\x4d\x71\x87\xb5\x48\x77\xcf\x56\x9f\x14\x5a\x9d\x6d\xf3\xa5\xf3\xe5\xf4\x75\x85\xa6\xae\x5c\x8f\x39\xa1\xcf\x99\xa0\x1e\x84\xf3\x73\x10\x2a\xde\xc1\x4c\x38\xe2\xa2\x32\xb0\x6f\xb3\xc9\x1f\x16\x62\x2f\xa2\xe7\x58\x1b\xe7\xa0\xf2\x2c\x88\x77\x08\x99\x8d\x3a\x47\x10\xe0\xa8\x00\x5d\x54\x04\xf0\xb5\x09\x5c\xea\x06\xff\x20\xd3\x85\x1f\xce\xc9\x4c\x03\xff\x4a\x74\xab\xc7\xba\x6d\x48\xe7\x22\xe7\x39\x2d\x52\xf4\xbf\xb3\xf8\xff\xc0\x59\x3c\xbb\x83\x5f\x39\x87\xc7\xed\x6b\x9f\xb5\x2e\x5c\xab\x84\x76\x06\xcf\x72\xe0\x22\x31\xa6\x5c\xc6\xb4\xd8\xf3\x32\xd5\x0a\xc6\x8f\x9f\xd4\xef\xfc\x4f\x5c\x25\xb0\x67\xa6\x85\x92\x64\x67\xa3\x49\x1e\xb2\x10\xe1\x75\x57\x56\x62\x20\x1e\xeb\x3b\x3b\x06\x16\xaa\x52\x61\x00\x93\x86\x7c\x4d\x4d\x71\xe0\x0b\xe2\x48\x65\x4e\xe8\xf9\xc3\x74\x19\x4c\xf9\xc1\x7e\x6c\xa4\xfe\x71\x78\x83\xe4\x02\x57\x64\x0d\xf1\x87\x2c\x3a\xcb\x43\x9a\xa2\xaa\x11\x82\x5b\x9d\x9c\xe6\x41\x0c\x29\x74\xbd\x88\xd6\x7e\x42\x20\x62\x7b\xa1\xde\x93\xa2\x8b\x21\xd1\xa7\xe4\x0f\xa9\xd6\x6d\x14\x5f\xf8\x53\x45\xbd\x72\x0b\x9f\x34\xc8\xf2\xe6\x21\xe9\x3d\x21\x30\x11\x09\x4e\x62\x30\x0f\xa1\x3a\x38\xb8\x84\xc8\xff\xb0\x03\x7f\xc4\x22\x3c\x27\xb4\xf2\x90\xa3\x8e\x13\x88\x31\x91\x2e\x66\x2a\xdd\xe6\xd5\xd3\xc0\xa5\x6b\x19\xab\x75\xe9\x3a\xd2\x5e\x22\x85\x7e\x9e\x64\x9e\x0d\xb3\x18\xe3\xf0\x98\x0d\xae\x33\xdd\x34\x25\x96\x2d\x03\x65\x2b\x4d\x9e\xad\x8d\xfc\x12\xc1\xef\xbe\xda\xa9\x52\x4e\x7c\xad\x6c\x9a\xb9\x2a\xba\xdf\x3b\xb4\x69\xf3\x24\x5b\xad\x96\x2d\xb5\xf4\x6a\x19\x4c\x49\xa5\x05\x11\x84\xa1\x77\x46\x81\x1c\xda\x99\xf1\x4a\x3c\x0e\x5a\x4e\x3e\xb4\x73\x30\x11\x77\xce\x18\x85\x08\x93\x51\x74\x52\x28\x00\x85\xfb\x93\x7b\x0b\x1d\x19\x07\x4c\x1f\x91\x49\xb3\x09\x44\x90\xc7\x74\x1b\xdc\xea\x71\xb3\xb9\xb3\xc7\xe3\x05\x29\x40\xd9\xa3\xe8\x94\x15\xad\xd5\x3a\xa0\x24\xbb\xe0\xc1\x87\x14\xc9\x98\xe4\x6e\xf8\x59\xa3\x28\x33\xce\x39\xac\xde\xc4\x64\x35\x8f\xc7\xd1\x64\x67\x6f\x2a\xb8\x21\x73\xa9\x58\xe4\xae\xe2\x85\xd0\x12\x6c\xab\x08\x3b\x2a\xf3\xa1\x89\x93\x22\x83\x17\xe1\x65\x1e\x4d\x8c\xbc\x23\x65\xf1\x35\x1c\x67\x41\xd8\x0b\x9c\xc5\x50\x64\x5d\x5d\x71\x2e\xcd\x39\x29\x4c\x43\x34\xcb\x85\x2c\x8e\xc2\x56\xfa\x9c\x2f\x18\x29\xdf\x77\x5b\x04\xb7\xa9\xb4\x9a\x48\x3b\x69\x70\x5b\x43\x4f\xb0\x65\xf0\xe9\xfd\xc4\xda\x6c\x32\x57\x82\xa2\x1c\x52\x4c\x6f\x28\x51\x23\x65\xf5\x46\xb4\xa6\x8d\xe8\xb6\x11\x33\xa9\x4e\xe3\x2e\x78\xcc\xf8\xc4\x92\xf1\xce\xfd\x30\x8c\x68\x03\x4a\xd4\x10\x2e\x88\x12\x70\x2e\x1f\x40\x64\xf0\x87\x28\x9c\x35\xc0\x62\xa7\x61\x71\x42\xf1\xa9\x95\xf1\x2d\x67\x56\x6b\xc7\xac\x09\xa1\x8c\x4d\x4c\x71\xee\x38\xe7\x8f\x46\x7a\xde\x49\x4c\x6a\xc6\xad\xc2\xba\x14\xdc\xea\xc1\xa9\x65\xec\x62\x38\xa5\xfd\x16\x14\x06\x4f\x89\xb1\x52\x97\x45\xe9\xcc\x21\xf7\x8b\xa9\x9a\xc3\x38\x7f\x14\xc7\x40\x6e\xd0\x57\x95\xbe\x6c\x2c\x56\x1c\x17\x8a\x35\x45\x9a\x53\x4d\x62\x7c\x5f\xac\x41\x8d\x98\x1d\xc4\xd3\xf5\xd2\x8f\x5f\x05\x09\xdd\x2b\x67\x7f\x13\xd3\x23\x90\x48\xb3\x2b\x8a\xf9\x87\x55\x14\x2d\x77\xbe\x33\x83\xf0\xe7\x84\xe0\xcf\x5b\xd5\x31\xa8\xf0\xd8\x55\xde\x21\xed\xee\xfe\xe1\xdd\x2d\x13\x46\xb5\xe8\x81\x9c\x4b\xc9\x6f\xc8\x7d\x7a\x8e\xc3\x61\x56\xd1\x2a\xbb\x8f\x07\x1f\x1f\xc3\xe6\x6a\xb7\x49\x24\xed\xb7\xcf\xff\xeb\xe2\xfc\xfd\xf5\xcb\x17\xd7\xcf\xde\xbf\x7f\xf7\xf2\xf9\xcf\xef\x2f\xd8\xdc\x88\x68\xd9\x91\x16\xf8\x2c\x2c\x78\xb8\x60\x03\xef\xf1\xb4\x15\x63\x2a\x5a\x2f\x67\x0d\x36\xac\xc4\x57\x1a\x7e\x98\x8e\x2d\xc8\x7e\x20\xb4\x21\xda\x67\xa6\x19\x23\x1e\x65\xb2\xf1\xf8\x4f\x67\x17\x26\x48\xe6\x33\x4d\xcf\xbc\xa6\xf2\x06\x03\xa7\x03\x65\x9f\xb9\x59\xeb\x4a\xbd\x53\xe5\x4c\x69\xc7\x0a\x4c\xc0\x26\xed\xeb\x08\xf8\x4e\xdc\xd2\x18\xed\xa2\x90\xef\x2d\x35\x8a\xdb\x34\x35\xb6\xb5\x2d\xc3\x28\x77\x4c\xa1\x36\xc5\xb9\x99\x3b\xd3\x7b\xe3\xdf\x81\x7a\x95\xe4\x9d\x72\x6b\xe2\x4c\x22\x50\x7d\x12\x6b\x33\x9f\xfa\xad\xe8\xe6\xef\xad\x60\xa6\xa1\xa0\x50\x7a\x08\xca\xad\x72\xa0\xfc\x87\xdb\x7c\x80\x1a\x1d\x4e\x85\x2b\x23\x15\xa6\xa6\x91\x14\x4c\x23\xbf\x55\x68\x7e\xdb\xe6\xb1\xf9\x6d\x08\xce\x1f\xeb\xb6\xcb\x5d\x11\xd9\x8e\x81\xfc\x1d\x07\xcc\x49\xba\x46\x3d\x7f\x78\x99\x73\x2c\xc9\x97\x01\xb6\xaf\x3d\xc2\xd8\x17\xbe\x00\x46\x4b\xac\x2d\x18\x84\x86\xf1\x3c\xa2\xf4\x01\x0c\xcf\xce\x60\x2b\xdb\xfe\x91\xa5\x75\xdf\x18\xb2\xc7\xa8\xfd\x17\xf1\x28\x5c\x9e\xe9\xda\x82\xd2\x55\x32\xd4\x70\x7a\x97\x7e\x19\xf1\xe0\x49\x9c\x2d\xa6\xd1\xf2\x4c\xbb\x4f\x92\xe1\xf1\xb1\x36\xd4\xee\xe1\xaf\x61\x96\x41\x17\x51\x42\xa5\xcc\x95\x4f\x17\xa1\x7f\x47\x4c\xed\x3e\xd1\xd0\x54\xa2\xcf\x7d\x0e\xa0\x35\xec\x20\xc3\xf6\x79\x14\x86\x5c\x67\xfd\x83\xcf\x76\xf4\x0f\xfa\x02\x25\x59\x21\x12\x03\xcd\x84\xc3\xed\x5f\xc9\xcd\xfb\xf7\xbf\xe9\x4b\xb4\x46\x53\xc4\xab\xeb\xaf\xe9\xe2\x9a\x46\x1f\x48\x68\xb4\xa3\x15\x09\x75\x63\x24\xbe\x26\xdb\xa2\xac\xc3\x65\xe4\xcf\x34\x94\x1b\x7d\x33\xdd\x40\xcb\xf6\x74\x19\x25\x44\x37\xb6\x2a\x25\x79\xfe\x0c\x6d\x77\x42\xa1\x47\x70\x69\x31\x7f\x58\x96\xdd\xe4\x1e\x93\x09\xf7\x81\x47\x4d\xdb\xa8\x5c\xfa\x6f\x83\x70\xd6\xb8\x03\x76\x69\x3c\xd1\x4c\x62\x6a\x4f\xda\x3b\xbf\x69\x74\xcb\x25\xb8\xcf\x5a\xfb\xd8\xa7\xd4\x9f\x2e\xc4\x1f\x6d\xd8\x45\xe5\xbc\xf6\xdf\x93\x62\xf6\xca\x9f\x7e\xf0\xe7\xa4\xfd\xf7\x24\x0a\xb5\xa1\x6b\xb1\x57\xb7\x01\x65\xff\xb5\xa1\x97\x7b\x02\xcc\x2c\xa3\x84\x66\x43\xfe\x7a\xb9\x4c\xa6\x31\x21\x61\x2e\xa9\x0d\x7b\x95\xef\xda\xd3\x24\xd1\x86\xae\x53\x0d\xc0\xbe\x59\xc6\x2f\x7d\xda\x65\xaf\x05\xe3\xcf\xa2\xf2\xdb\x4e\xf1\x6d\x96\xd2\x86\xfd\x8a\x37\xf0\xcd\xfe\x76\x14\xb4\x3f\x90\x87\x44\xb1\x63\x12\x83\x9a\xbd\xd5\x13\x63\x8b\x82\x76\x4c\x92\x68\xf9\x91\xe0\x08\x91\x36\xf9\xb4\x8a\x62\x9a\xe0\x00\x05\xed\x60\x86\x9d\x41\x91\x4d\xd8\x1c\x99\x82\x7c\x66\x7c\x3f\xe4\x9e\x3f\xdb\xa2\xcb\xd0\x9d\x1f\x84\x43\x6d\xd7\x59\x68\x15\x07\x1f\x7d\x0a\xf3\xc3\x81\xa4\x58\xd7\x09\x3a\xa2\xdf\xea\x88\x48\x4c\xc7\xe7\xa5\x06\xc4\xf6\x6c\xdc\xfa\xc1\x92\xcc\x86\x8d\xe3\x45\x74\x47\x8e\x1f\xd6\x33\x3f\x38\x66\x03\x32\xf8\x48\x8e\x57\x71\x34\x5b\x4f\x69\x72\xec\x58\x76\xf7\x18\xc6\xd8\x71\x12\x4f\x8f\xe7\x01\x5d\xac\x6f\xda\xd3\xe8\x4e\x20\xf0\x57\x7f\x4f\x8e\xc3\x68\x46\xae\x39\x23\x27\xc7\x50\xd8\xe3\x65\x70\x73\xec\xcf\x66\x51\x98\x54\xf3\x48\xe3\xe7\x90\x7c\x5a\x91\x29\x25\xb3\x06\x8c\xdf\x86\x6e\x0f\x2d\xe3\x2a\xfc\x2d\x5a\x37\xee\xfc\x87\x46\x48\xc8\x8c\xad\xe0\xfe\x6a\x15\x47\xab\x38\xf0\x29\x69\xb0\xf1\x4b\xe2\x06\x8d\x1a\xfc\x10\x10\x16\xef\xc6\x6d\xc0\x52\x6c\x15\xbb\x0a\x37\x8d\xb6\x68\xb0\xec\x6b\x8d\xcf\x2c\x9b\xfd\x4b\x75\xee\xc3\x06\x9c\x61\x8f\xd2\x7c\x1a\xad\x86\x0d\x6b\xa4\x19\x87\x76\xc6\x6e\x24\xa4\x7d\x52\x60\xef\x2f\xe8\xdf\x1d\x13\x0b\x8a\x05\xde\x2d\x10\x9c\x18\xa3\xff\x17\x00\x00\xff\xff\xbd\x12\xdf\xe7\x5e\x12\x05\x00")
+
+func staticJsGottyBundleJsBytes() ([]byte, error) {
+ return bindataRead(
+ _staticJsGottyBundleJs,
+ "static/js/gotty-bundle.js",
+ )
+}
+
+func staticJsGottyBundleJs() (*asset, error) {
+ bytes, err := staticJsGottyBundleJsBytes()
+ if err != nil {
+ return nil, err
+ }
+
+ info := bindataFileInfo{name: "static/js/gotty-bundle.js", size: 332382, mode: os.FileMode(436), modTime: time.Unix(1503734056, 0)}
+ a := &asset{bytes: bytes, info: info}
+ return a, nil
+}
+
+// Asset loads and returns the asset for the given name.
+// It returns an error if the asset could not be found or
+// could not be loaded.
+func Asset(name string) ([]byte, error) {
+ cannonicalName := strings.Replace(name, "\\", "/", -1)
+ if f, ok := _bindata[cannonicalName]; ok {
+ a, err := f()
+ if err != nil {
+ return nil, fmt.Errorf("Asset %s can't read by error: %v", name, err)
+ }
+ return a.bytes, nil
+ }
+ return nil, fmt.Errorf("Asset %s not found", name)
+}
+
+// MustAsset is like Asset but panics when Asset would return an error.
+// It simplifies safe initialization of global variables.
+func MustAsset(name string) []byte {
+ a, err := Asset(name)
+ if err != nil {
+ panic("asset: Asset(" + name + "): " + err.Error())
+ }
+
+ return a
+}
+
+// AssetInfo loads and returns the asset info for the given name.
+// It returns an error if the asset could not be found or
+// could not be loaded.
+func AssetInfo(name string) (os.FileInfo, error) {
+ cannonicalName := strings.Replace(name, "\\", "/", -1)
+ if f, ok := _bindata[cannonicalName]; ok {
+ a, err := f()
+ if err != nil {
+ return nil, fmt.Errorf("AssetInfo %s can't read by error: %v", name, err)
+ }
+ return a.info, nil
+ }
+ return nil, fmt.Errorf("AssetInfo %s not found", name)
+}
+
+// AssetNames returns the names of the assets.
+func AssetNames() []string {
+ names := make([]string, 0, len(_bindata))
+ for name := range _bindata {
+ names = append(names, name)
+ }
+ return names
+}
+
+// _bindata is a table, holding each asset generator, mapped to its name.
+var _bindata = map[string]func() (*asset, error){
+ "static/css/index.css": staticCssIndexCss,
+ "static/css/xterm.css": staticCssXtermCss,
+ "static/css/xterm_customize.css": staticCssXterm_customizeCss,
+ "static/favicon.png": staticFaviconPng,
+ "static/index.html": staticIndexHtml,
+ "static/js/bundle.js": staticJsBundleJs,
+ "static/js/gotty-bundle.js": staticJsGottyBundleJs,
+}
+
+// AssetDir returns the file names below a certain
+// directory embedded in the file by go-bindata.
+// For example if you run go-bindata on data/... and data contains the
+// following hierarchy:
+// data/
+// foo.txt
+// img/
+// a.png
+// b.png
+// then AssetDir("data") would return []string{"foo.txt", "img"}
+// AssetDir("data/img") would return []string{"a.png", "b.png"}
+// AssetDir("foo.txt") and AssetDir("notexist") would return an error
+// AssetDir("") will return []string{"data"}.
+func AssetDir(name string) ([]string, error) {
+ node := _bintree
+ if len(name) != 0 {
+ cannonicalName := strings.Replace(name, "\\", "/", -1)
+ pathList := strings.Split(cannonicalName, "/")
+ for _, p := range pathList {
+ node = node.Children[p]
+ if node == nil {
+ return nil, fmt.Errorf("Asset %s not found", name)
+ }
+ }
+ }
+ if node.Func != nil {
+ return nil, fmt.Errorf("Asset %s not found", name)
+ }
+ rv := make([]string, 0, len(node.Children))
+ for childName := range node.Children {
+ rv = append(rv, childName)
+ }
+ return rv, nil
+}
+
+type bintree struct {
+ Func func() (*asset, error)
+ Children map[string]*bintree
+}
+
+var _bintree = &bintree{nil, map[string]*bintree{
+ "static": &bintree{nil, map[string]*bintree{
+ "css": &bintree{nil, map[string]*bintree{
+ "index.css": &bintree{staticCssIndexCss, map[string]*bintree{}},
+ "xterm.css": &bintree{staticCssXtermCss, map[string]*bintree{}},
+ "xterm_customize.css": &bintree{staticCssXterm_customizeCss, map[string]*bintree{}},
+ }},
+ "favicon.png": &bintree{staticFaviconPng, map[string]*bintree{}},
+ "index.html": &bintree{staticIndexHtml, map[string]*bintree{}},
+ "js": &bintree{nil, map[string]*bintree{
+ "bundle.js": &bintree{staticJsBundleJs, map[string]*bintree{}},
+ "gotty-bundle.js": &bintree{staticJsGottyBundleJs, map[string]*bintree{}},
+ }},
+ }},
+}}
+
+// RestoreAsset restores an asset under the given directory
+func RestoreAsset(dir, name string) error {
+ data, err := Asset(name)
+ if err != nil {
+ return err
+ }
+ info, err := AssetInfo(name)
+ if err != nil {
+ return err
+ }
+ err = os.MkdirAll(_filePath(dir, filepath.Dir(name)), os.FileMode(0755))
+ if err != nil {
+ return err
+ }
+ err = ioutil.WriteFile(_filePath(dir, name), data, info.Mode())
+ if err != nil {
+ return err
+ }
+ err = os.Chtimes(_filePath(dir, name), info.ModTime(), info.ModTime())
+ if err != nil {
+ return err
+ }
+ return nil
+}
+
+// RestoreAssets restores an asset under the given directory recursively
+func RestoreAssets(dir, name string) error {
+ children, err := AssetDir(name)
+ // File
+ if err != nil {
+ return RestoreAsset(dir, name)
+ }
+ // Dir
+ for _, child := range children {
+ err = RestoreAssets(dir, filepath.Join(name, child))
+ if err != nil {
+ return err
+ }
+ }
+ return nil
+}
+
+func _filePath(dir, name string) string {
+ cannonicalName := strings.Replace(name, "\\", "/", -1)
+ return filepath.Join(append([]string{dir}, strings.Split(cannonicalName, "/")...)...)
+}
diff --git a/vendor/github.com/yudai/gotty/server/handler_atomic.go b/vendor/github.com/yudai/gotty/server/handler_atomic.go
new file mode 100644
index 0000000..326d1bd
--- /dev/null
+++ b/vendor/github.com/yudai/gotty/server/handler_atomic.go
@@ -0,0 +1,70 @@
+package server
+
+import (
+ "sync"
+ "time"
+)
+
+type counter struct {
+ duration time.Duration
+ zeroTimer *time.Timer
+ wg sync.WaitGroup
+ connections int
+ mutex sync.Mutex
+}
+
+func newCounter(duration time.Duration) *counter {
+ zeroTimer := time.NewTimer(duration)
+
+ // when duration is 0, drain the expire event here
+ // so that user will never get the event.
+ if duration == 0 {
+ <-zeroTimer.C
+ }
+
+ return &counter{
+ duration: duration,
+ zeroTimer: zeroTimer,
+ }
+}
+
+func (counter *counter) add(n int) int {
+ counter.mutex.Lock()
+ defer counter.mutex.Unlock()
+
+ if counter.duration > 0 {
+ counter.zeroTimer.Stop()
+ }
+ counter.wg.Add(n)
+ counter.connections += n
+
+ return counter.connections
+}
+
+func (counter *counter) done() int {
+ counter.mutex.Lock()
+ defer counter.mutex.Unlock()
+
+ counter.connections--
+ counter.wg.Done()
+ if counter.connections == 0 && counter.duration > 0 {
+ counter.zeroTimer.Reset(counter.duration)
+ }
+
+ return counter.connections
+}
+
+func (counter *counter) count() int {
+ counter.mutex.Lock()
+ defer counter.mutex.Unlock()
+
+ return counter.connections
+}
+
+func (counter *counter) wait() {
+ counter.wg.Wait()
+}
+
+func (counter *counter) timer() *time.Timer {
+ return counter.zeroTimer
+}
diff --git a/vendor/github.com/yudai/gotty/server/handlers.go b/vendor/github.com/yudai/gotty/server/handlers.go
new file mode 100644
index 0000000..f1a2f9b
--- /dev/null
+++ b/vendor/github.com/yudai/gotty/server/handlers.go
@@ -0,0 +1,235 @@
+package server
+
+import (
+ "bytes"
+ "context"
+ "encoding/json"
+ "fmt"
+ "log"
+ "net/http"
+ "net/url"
+ "sync/atomic"
+
+ "github.com/gorilla/websocket"
+ "github.com/pkg/errors"
+
+ "github.com/yudai/gotty/webtty"
+)
+
+func (server *Server) generateHandleWS(ctx context.Context, cancel context.CancelFunc, counter *counter) http.HandlerFunc {
+ once := new(int64)
+
+ go func() {
+ select {
+ case <-counter.timer().C:
+ cancel()
+ case <-ctx.Done():
+ }
+ }()
+
+ return func(w http.ResponseWriter, r *http.Request) {
+ if server.options.Once {
+ success := atomic.CompareAndSwapInt64(once, 0, 1)
+ if !success {
+ http.Error(w, "Server is shutting down", http.StatusServiceUnavailable)
+ return
+ }
+ }
+
+ num := counter.add(1)
+ closeReason := "unknown reason"
+
+ defer func() {
+ num := counter.done()
+ log.Printf(
+ "Connection closed by %s: %s, connections: %d/%d",
+ closeReason, r.RemoteAddr, num, server.options.MaxConnection,
+ )
+
+ if server.options.Once {
+ cancel()
+ }
+ }()
+
+ if int64(server.options.MaxConnection) != 0 {
+ if num > server.options.MaxConnection {
+ closeReason = "exceeding max number of connections"
+ return
+ }
+ }
+
+ log.Printf("New client connected: %s, connections: %d/%d", r.RemoteAddr, num, server.options.MaxConnection)
+
+ if r.Method != "GET" {
+ http.Error(w, "Method not allowed", 405)
+ return
+ }
+
+ conn, err := server.upgrader.Upgrade(w, r, nil)
+ if err != nil {
+ closeReason = err.Error()
+ return
+ }
+ defer conn.Close()
+
+ err = server.processWSConn(ctx, conn)
+
+ switch err {
+ case ctx.Err():
+ closeReason = "cancelation"
+ case webtty.ErrSlaveClosed:
+ closeReason = server.factory.Name()
+ case webtty.ErrMasterClosed:
+ closeReason = "client"
+ default:
+ closeReason = fmt.Sprintf("an error: %s", err)
+ }
+ }
+}
+
+func (server *Server) processWSConn(ctx context.Context, conn *websocket.Conn) error {
+ typ, initLine, err := conn.ReadMessage()
+ if err != nil {
+ return errors.Wrapf(err, "failed to authenticate websocket connection")
+ }
+ if typ != websocket.TextMessage {
+ return errors.New("failed to authenticate websocket connection: invalid message type")
+ }
+
+ var init InitMessage
+ err = json.Unmarshal(initLine, &init)
+ if err != nil {
+ return errors.Wrapf(err, "failed to authenticate websocket connection")
+ }
+ if init.AuthToken != server.options.Credential {
+ return errors.New("failed to authenticate websocket connection")
+ }
+
+ queryPath := "?"
+ if server.options.PermitArguments && init.Arguments != "" {
+ queryPath = init.Arguments
+ }
+
+ query, err := url.Parse(queryPath)
+ if err != nil {
+ return errors.Wrapf(err, "failed to parse arguments")
+ }
+ params := query.Query()
+ var slave Slave
+ slave, err = server.factory.New(params)
+ if err != nil {
+ return errors.Wrapf(err, "failed to create backend")
+ }
+ defer slave.Close()
+
+ titleVars := server.titleVariables(
+ []string{"server", "master", "slave"},
+ map[string]map[string]interface{}{
+ "server": server.options.TitleVariables,
+ "master": map[string]interface{}{
+ "remote_addr": conn.RemoteAddr(),
+ },
+ "slave": slave.WindowTitleVariables(),
+ },
+ )
+
+ titleBuf := new(bytes.Buffer)
+ err = server.titleTemplate.Execute(titleBuf, titleVars)
+ if err != nil {
+ return errors.Wrapf(err, "failed to fill window title template")
+ }
+
+ opts := []webtty.Option{
+ webtty.WithWindowTitle(titleBuf.Bytes()),
+ }
+ if server.options.PermitWrite {
+ opts = append(opts, webtty.WithPermitWrite())
+ }
+ if server.options.EnableReconnect {
+ opts = append(opts, webtty.WithReconnect(server.options.ReconnectTime))
+ }
+ if server.options.Width > 0 {
+ opts = append(opts, webtty.WithFixedColumns(server.options.Width))
+ }
+ if server.options.Height > 0 {
+ opts = append(opts, webtty.WithFixedRows(server.options.Height))
+ }
+ if server.options.Preferences != nil {
+ opts = append(opts, webtty.WithMasterPreferences(server.options.Preferences))
+ }
+
+ tty, err := webtty.New(&wsWrapper{conn}, slave, opts...)
+ if err != nil {
+ return errors.Wrapf(err, "failed to create webtty")
+ }
+
+ err = tty.Run(ctx)
+
+ return err
+}
+
+func (server *Server) handleIndex(w http.ResponseWriter, r *http.Request) {
+ titleVars := server.titleVariables(
+ []string{"server", "master"},
+ map[string]map[string]interface{}{
+ "server": server.options.TitleVariables,
+ "master": map[string]interface{}{
+ "remote_addr": r.RemoteAddr,
+ },
+ },
+ )
+
+ titleBuf := new(bytes.Buffer)
+ err := server.titleTemplate.Execute(titleBuf, titleVars)
+ if err != nil {
+ http.Error(w, "Internal Server Error", 500)
+ return
+ }
+
+ indexVars := map[string]interface{}{
+ "title": titleBuf.String(),
+ }
+
+ indexBuf := new(bytes.Buffer)
+ err = server.indexTemplate.Execute(indexBuf, indexVars)
+ if err != nil {
+ http.Error(w, "Internal Server Error", 500)
+ return
+ }
+
+ w.Write(indexBuf.Bytes())
+}
+
+func (server *Server) handleAuthToken(w http.ResponseWriter, r *http.Request) {
+ w.Header().Set("Content-Type", "application/javascript")
+ // @TODO hashing?
+ w.Write([]byte("var gotty_auth_token = '" + server.options.Credential + "';"))
+}
+
+func (server *Server) handleConfig(w http.ResponseWriter, r *http.Request) {
+ w.Header().Set("Content-Type", "application/javascript")
+ w.Write([]byte("var gotty_term = '" + server.options.Term + "';"))
+}
+
+// titleVariables merges maps in a specified order.
+// varUnits are name-keyed maps, whose names will be iterated using order.
+func (server *Server) titleVariables(order []string, varUnits map[string]map[string]interface{}) map[string]interface{} {
+ titleVars := map[string]interface{}{}
+
+ for _, name := range order {
+ vars, ok := varUnits[name]
+ if !ok {
+ panic("title variable name error")
+ }
+ for key, val := range vars {
+ titleVars[key] = val
+ }
+ }
+
+ // safe net for conflicted keys
+ for _, name := range order {
+ titleVars[name] = varUnits[name]
+ }
+
+ return titleVars
+}
diff --git a/vendor/github.com/yudai/gotty/server/init_message.go b/vendor/github.com/yudai/gotty/server/init_message.go
new file mode 100644
index 0000000..60801bf
--- /dev/null
+++ b/vendor/github.com/yudai/gotty/server/init_message.go
@@ -0,0 +1,6 @@
+package server
+
+type InitMessage struct {
+ Arguments string `json:"Arguments,omitempty"`
+ AuthToken string `json:"AuthToken,omitempty"`
+}
diff --git a/vendor/github.com/yudai/gotty/server/list_address.go b/vendor/github.com/yudai/gotty/server/list_address.go
new file mode 100644
index 0000000..de2e8b2
--- /dev/null
+++ b/vendor/github.com/yudai/gotty/server/list_address.go
@@ -0,0 +1,28 @@
+package server
+
+import (
+ "net"
+)
+
+func listAddresses() (addresses []string) {
+ ifaces, err := net.Interfaces()
+ if err != nil {
+ return []string{}
+ }
+
+ addresses = make([]string, 0, len(ifaces))
+
+ for _, iface := range ifaces {
+ ifAddrs, _ := iface.Addrs()
+ for _, ifAddr := range ifAddrs {
+ switch v := ifAddr.(type) {
+ case *net.IPNet:
+ addresses = append(addresses, v.IP.String())
+ case *net.IPAddr:
+ addresses = append(addresses, v.IP.String())
+ }
+ }
+ }
+
+ return addresses
+}
diff --git a/vendor/github.com/yudai/gotty/server/log_response_writer.go b/vendor/github.com/yudai/gotty/server/log_response_writer.go
new file mode 100644
index 0000000..1b75fd8
--- /dev/null
+++ b/vendor/github.com/yudai/gotty/server/log_response_writer.go
@@ -0,0 +1,23 @@
+package server
+
+import (
+ "bufio"
+ "net"
+ "net/http"
+)
+
+type logResponseWriter struct {
+ http.ResponseWriter
+ status int
+}
+
+func (w *logResponseWriter) WriteHeader(status int) {
+ w.status = status
+ w.ResponseWriter.WriteHeader(status)
+}
+
+func (w *logResponseWriter) Hijack() (net.Conn, *bufio.ReadWriter, error) {
+ hj, _ := w.ResponseWriter.(http.Hijacker)
+ w.status = http.StatusSwitchingProtocols
+ return hj.Hijack()
+}
diff --git a/vendor/github.com/yudai/gotty/server/middleware.go b/vendor/github.com/yudai/gotty/server/middleware.go
new file mode 100644
index 0000000..ee89176
--- /dev/null
+++ b/vendor/github.com/yudai/gotty/server/middleware.go
@@ -0,0 +1,51 @@
+package server
+
+import (
+ "encoding/base64"
+ "log"
+ "net/http"
+ "strings"
+)
+
+func (server *Server) wrapLogger(handler http.Handler) http.Handler {
+ return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ rw := &logResponseWriter{w, 200}
+ handler.ServeHTTP(rw, r)
+ log.Printf("%s %d %s %s", r.RemoteAddr, rw.status, r.Method, r.URL.Path)
+ })
+}
+
+func (server *Server) wrapHeaders(handler http.Handler) http.Handler {
+ return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ // todo add version
+ w.Header().Set("Server", "GoTTY")
+ handler.ServeHTTP(w, r)
+ })
+}
+
+func (server *Server) wrapBasicAuth(handler http.Handler, credential string) http.Handler {
+ return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ token := strings.SplitN(r.Header.Get("Authorization"), " ", 2)
+
+ if len(token) != 2 || strings.ToLower(token[0]) != "basic" {
+ w.Header().Set("WWW-Authenticate", `Basic realm="GoTTY"`)
+ http.Error(w, "Bad Request", http.StatusUnauthorized)
+ return
+ }
+
+ payload, err := base64.StdEncoding.DecodeString(token[1])
+ if err != nil {
+ http.Error(w, "Internal Server Error", http.StatusInternalServerError)
+ return
+ }
+
+ if credential != string(payload) {
+ w.Header().Set("WWW-Authenticate", `Basic realm="GoTTY"`)
+ http.Error(w, "authorization failed", http.StatusUnauthorized)
+ return
+ }
+
+ log.Printf("Basic Authentication Succeeded: %s", r.RemoteAddr)
+ handler.ServeHTTP(w, r)
+ })
+}
diff --git a/vendor/github.com/yudai/gotty/server/options.go b/vendor/github.com/yudai/gotty/server/options.go
new file mode 100644
index 0000000..3d7f69c
--- /dev/null
+++ b/vendor/github.com/yudai/gotty/server/options.go
@@ -0,0 +1,99 @@
+package server
+
+import (
+ "github.com/pkg/errors"
+)
+
+type Options struct {
+ Address string `hcl:"address" flagName:"address" flagSName:"a" flagDescribe:"IP address to listen" default:"0.0.0.0"`
+ Port string `hcl:"port" flagName:"port" flagSName:"p" flagDescribe:"Port number to liten" default:"8080"`
+ PermitWrite bool `hcl:"permit_write" flagName:"permit-write" flagSName:"w" flagDescribe:"Permit clients to write to the TTY (BE CAREFUL)" default:"false"`
+ EnableBasicAuth bool `hcl:"enable_basic_auth" default:"false"`
+ Credential string `hcl:"credential" flagName:"credential" flagSName:"c" flagDescribe:"Credential for Basic Authentication (ex: user:pass, default disabled)" default:""`
+ EnableRandomUrl bool `hcl:"enable_random_url" flagName:"random-url" flagSName:"r" flagDescribe:"Add a random string to the URL" default:"false"`
+ RandomUrlLength int `hcl:"random_url_length" flagName:"random-url-length" flagDescribe:"Random URL length" default:"8"`
+ EnableTLS bool `hcl:"enable_tls" flagName:"tls" flagSName:"t" flagDescribe:"Enable TLS/SSL" default:"false"`
+ TLSCrtFile string `hcl:"tls_crt_file" flagName:"tls-crt" flagDescribe:"TLS/SSL certificate file path" default:"~/.gotty.crt"`
+ TLSKeyFile string `hcl:"tls_key_file" flagName:"tls-key" flagDescribe:"TLS/SSL key file path" default:"~/.gotty.key"`
+ EnableTLSClientAuth bool `hcl:"enable_tls_client_auth" default:"false"`
+ TLSCACrtFile string `hcl:"tls_ca_crt_file" flagName:"tls-ca-crt" flagDescribe:"TLS/SSL CA certificate file for client certifications" default:"~/.gotty.ca.crt"`
+ IndexFile string `hcl:"index_file" flagName:"index" flagDescribe:"Custom index.html file" default:""`
+ TitleFormat string `hcl:"title_format" flagName:"title-format" flagSName:"" flagDescribe:"Title format of browser window" default:"{{ .command }}@{{ .hostname }}"`
+ EnableReconnect bool `hcl:"enable_reconnect" flagName:"reconnect" flagDescribe:"Enable reconnection" default:"false"`
+ ReconnectTime int `hcl:"reconnect_time" flagName:"reconnect-time" flagDescribe:"Time to reconnect" default:"10"`
+ MaxConnection int `hcl:"max_connection" flagName:"max-connection" flagDescribe:"Maximum connection to gotty" default:"0"`
+ Once bool `hcl:"once" flagName:"once" flagDescribe:"Accept only one client and exit on disconnection" default:"false"`
+ Timeout int `hcl:"timeout" flagName:"timeout" flagDescribe:"Timeout seconds for waiting a client(0 to disable)" default:"0"`
+ PermitArguments bool `hcl:"permit_arguments" flagName:"permit-arguments" flagDescribe:"Permit clients to send command line arguments in URL (e.g. http://example.com:8080/?arg=AAA&arg=BBB)" default:"true"`
+ Preferences *HtermPrefernces `hcl:"preferences"`
+ Width int `hcl:"width" flagName:"width" flagDescribe:"Static width of the screen, 0(default) means dynamically resize" default:"0"`
+ Height int `hcl:"height" flagName:"height" flagDescribe:"Static height of the screen, 0(default) means dynamically resize" default:"0"`
+ WSOrigin string `hcl:"ws_origin" flagName:"ws-origin" flagDescribe:"A regular expression that matches origin URLs to be accepted by WebSocket. No cross origin requests are acceptable by default" default:""`
+ Term string `hcl:"term" flagName:"term" flagDescribe:"Terminal name to use on the browser, one of xterm or hterm." default:"xterm"`
+
+ TitleVariables map[string]interface{}
+}
+
+func (options *Options) Validate() error {
+ if options.EnableTLSClientAuth && !options.EnableTLS {
+ return errors.New("TLS client authentication is enabled, but TLS is not enabled")
+ }
+ return nil
+}
+
+type HtermPrefernces struct {
+ AltGrMode *string `hcl:"alt_gr_mode" json:"alt-gr-mode,omitempty"`
+ AltBackspaceIsMetaBackspace bool `hcl:"alt_backspace_is_meta_backspace" json:"alt-backspace-is-meta-backspace,omitempty"`
+ AltIsMeta bool `hcl:"alt_is_meta" json:"alt-is-meta,omitempty"`
+ AltSendsWhat string `hcl:"alt_sends_what" json:"alt-sends-what,omitempty"`
+ AudibleBellSound string `hcl:"audible_bell_sound" json:"audible-bell-sound,omitempty"`
+ DesktopNotificationBell bool `hcl:"desktop_notification_bell" json:"desktop-notification-bell,omitempty"`
+ BackgroundColor string `hcl:"background_color" json:"background-color,omitempty"`
+ BackgroundImage string `hcl:"background_image" json:"background-image,omitempty"`
+ BackgroundSize string `hcl:"background_size" json:"background-size,omitempty"`
+ BackgroundPosition string `hcl:"background_position" json:"background-position,omitempty"`
+ BackspaceSendsBackspace bool `hcl:"backspace_sends_backspace" json:"backspace-sends-backspace,omitempty"`
+ CharacterMapOverrides map[string]map[string]string `hcl:"character_map_overrides" json:"character-map-overrides,omitempty"`
+ CloseOnExit bool `hcl:"close_on_exit" json:"close-on-exit,omitempty"`
+ CursorBlink bool `hcl:"cursor_blink" json:"cursor-blink,omitempty"`
+ CursorBlinkCycle [2]int `hcl:"cursor_blink_cycle" json:"cursor-blink-cycle,omitempty"`
+ CursorColor string `hcl:"cursor_color" json:"cursor-color,omitempty"`
+ ColorPaletteOverrides []*string `hcl:"color_palette_overrides" json:"color-palette-overrides,omitempty"`
+ CopyOnSelect bool `hcl:"copy_on_select" json:"copy-on-select,omitempty"`
+ UseDefaultWindowCopy bool `hcl:"use_default_window_copy" json:"use-default-window-copy,omitempty"`
+ ClearSelectionAfterCopy bool `hcl:"clear_selection_after_copy" json:"clear-selection-after-copy,omitempty"`
+ CtrlPlusMinusZeroZoom bool `hcl:"ctrl_plus_minus_zero_zoom" json:"ctrl-plus-minus-zero-zoom,omitempty"`
+ CtrlCCopy bool `hcl:"ctrl_c_copy" json:"ctrl-c-copy,omitempty"`
+ CtrlVPaste bool `hcl:"ctrl_v_paste" json:"ctrl-v-paste,omitempty"`
+ EastAsianAmbiguousAsTwoColumn bool `hcl:"east_asian_ambiguous_as_two_column" json:"east-asian-ambiguous-as-two-column,omitempty"`
+ Enable8BitControl *bool `hcl:"enable_8_bit_control" json:"enable-8-bit-control,omitempty"`
+ EnableBold *bool `hcl:"enable_bold" json:"enable-bold,omitempty"`
+ EnableBoldAsBright bool `hcl:"enable_bold_as_bright" json:"enable-bold-as-bright,omitempty"`
+ EnableClipboardNotice bool `hcl:"enable_clipboard_notice" json:"enable-clipboard-notice,omitempty"`
+ EnableClipboardWrite bool `hcl:"enable_clipboard_write" json:"enable-clipboard-write,omitempty"`
+ EnableDec12 bool `hcl:"enable_dec12" json:"enable-dec12,omitempty"`
+ Environment map[string]string `hcl:"environment" json:"environment,omitempty"`
+ FontFamily string `hcl:"font_family" json:"font-family,omitempty"`
+ FontSize int `hcl:"font_size" json:"font-size,omitempty"`
+ FontSmoothing string `hcl:"font_smoothing" json:"font-smoothing,omitempty"`
+ ForegroundColor string `hcl:"foreground_color" json:"foreground-color,omitempty"`
+ HomeKeysScroll bool `hcl:"home_keys_scroll" json:"home-keys-scroll,omitempty"`
+ Keybindings map[string]string `hcl:"keybindings" json:"keybindings,omitempty"`
+ MaxStringSequence int `hcl:"max_string_sequence" json:"max-string-sequence,omitempty"`
+ MediaKeysAreFkeys bool `hcl:"media_keys_are_fkeys" json:"media-keys-are-fkeys,omitempty"`
+ MetaSendsEscape bool `hcl:"meta_sends_escape" json:"meta-sends-escape,omitempty"`
+ MousePasteButton *int `hcl:"mouse_paste_button" json:"mouse-paste-button,omitempty"`
+ PageKeysScroll bool `hcl:"page_keys_scroll" json:"page-keys-scroll,omitempty"`
+ PassAltNumber *bool `hcl:"pass_alt_number" json:"pass-alt-number,omitempty"`
+ PassCtrlNumber *bool `hcl:"pass_ctrl_number" json:"pass-ctrl-number,omitempty"`
+ PassMetaNumber *bool `hcl:"pass_meta_number" json:"pass-meta-number,omitempty"`
+ PassMetaV bool `hcl:"pass_meta_v" json:"pass-meta-v,omitempty"`
+ ReceiveEncoding string `hcl:"receive_encoding" json:"receive-encoding,omitempty"`
+ ScrollOnKeystroke bool `hcl:"scroll_on_keystroke" json:"scroll-on-keystroke,omitempty"`
+ ScrollOnOutput bool `hcl:"scroll_on_output" json:"scroll-on-output,omitempty"`
+ ScrollbarVisible bool `hcl:"scrollbar_visible" json:"scrollbar-visible,omitempty"`
+ ScrollWheelMoveMultiplier int `hcl:"scroll_wheel_move_multiplier" json:"scroll-wheel-move-multiplier,omitempty"`
+ SendEncoding string `hcl:"send_encoding" json:"send-encoding,omitempty"`
+ ShiftInsertPaste bool `hcl:"shift_insert_paste" json:"shift-insert-paste,omitempty"`
+ UserCss string `hcl:"user_css" json:"user-css,omitempty"`
+}
diff --git a/vendor/github.com/yudai/gotty/server/run_option.go b/vendor/github.com/yudai/gotty/server/run_option.go
new file mode 100644
index 0000000..2939d63
--- /dev/null
+++ b/vendor/github.com/yudai/gotty/server/run_option.go
@@ -0,0 +1,21 @@
+package server
+
+import (
+ "context"
+)
+
+// RunOptions holds a set of configurations for Server.Run().
+type RunOptions struct {
+ gracefullCtx context.Context
+}
+
+// RunOption is an option of Server.Run().
+type RunOption func(*RunOptions)
+
+// WithGracefullContext accepts a context to shutdown a Server
+// with care for existing client connections.
+func WithGracefullContext(ctx context.Context) RunOption {
+ return func(options *RunOptions) {
+ options.gracefullCtx = ctx
+ }
+}
diff --git a/vendor/github.com/yudai/gotty/server/server.go b/vendor/github.com/yudai/gotty/server/server.go
new file mode 100644
index 0000000..6411e71
--- /dev/null
+++ b/vendor/github.com/yudai/gotty/server/server.go
@@ -0,0 +1,246 @@
+package server
+
+import (
+ "context"
+ "crypto/tls"
+ "crypto/x509"
+ "html/template"
+ "io/ioutil"
+ "log"
+ "net"
+ "net/http"
+ "regexp"
+ noesctmpl "text/template"
+ "time"
+
+ "github.com/NYTimes/gziphandler"
+ "github.com/elazarl/go-bindata-assetfs"
+ "github.com/gorilla/websocket"
+ "github.com/pkg/errors"
+
+ "github.com/yudai/gotty/pkg/homedir"
+ "github.com/yudai/gotty/pkg/randomstring"
+ "github.com/yudai/gotty/webtty"
+)
+
+// Server provides a webtty HTTP endpoint.
+type Server struct {
+ factory Factory
+ options *Options
+
+ upgrader *websocket.Upgrader
+ indexTemplate *template.Template
+ titleTemplate *noesctmpl.Template
+}
+
+// New creates a new instance of Server.
+// Server will use the New() of the factory provided to handle each request.
+func New(factory Factory, options *Options) (*Server, error) {
+ indexData, err := Asset("static/index.html")
+ if err != nil {
+ panic("index not found") // must be in bindata
+ }
+ if options.IndexFile != "" {
+ path := homedir.Expand(options.IndexFile)
+ indexData, err = ioutil.ReadFile(path)
+ if err != nil {
+ return nil, errors.Wrapf(err, "failed to read custom index file at `%s`", path)
+ }
+ }
+ indexTemplate, err := template.New("index").Parse(string(indexData))
+ if err != nil {
+ panic("index template parse failed") // must be valid
+ }
+
+ titleTemplate, err := noesctmpl.New("title").Parse(options.TitleFormat)
+ if err != nil {
+ return nil, errors.Wrapf(err, "failed to parse window title format `%s`", options.TitleFormat)
+ }
+
+ var originChekcer func(r *http.Request) bool
+ if options.WSOrigin != "" {
+ matcher, err := regexp.Compile(options.WSOrigin)
+ if err != nil {
+ return nil, errors.Wrapf(err, "failed to compile regular expression of Websocket Origin: %s", options.WSOrigin)
+ }
+ originChekcer = func(r *http.Request) bool {
+ return matcher.MatchString(r.Header.Get("Origin"))
+ }
+ }
+
+ return &Server{
+ factory: factory,
+ options: options,
+
+ upgrader: &websocket.Upgrader{
+ ReadBufferSize: 1024,
+ WriteBufferSize: 1024,
+ Subprotocols: webtty.Protocols,
+ CheckOrigin: originChekcer,
+ },
+ indexTemplate: indexTemplate,
+ titleTemplate: titleTemplate,
+ }, nil
+}
+
+// Run starts the main process of the Server.
+// The cancelation of ctx will shutdown the server immediately with aborting
+// existing connections. Use WithGracefullContext() to support gracefull shutdown.
+func (server *Server) Run(ctx context.Context, options ...RunOption) error {
+ cctx, cancel := context.WithCancel(ctx)
+ opts := &RunOptions{gracefullCtx: context.Background()}
+ for _, opt := range options {
+ opt(opts)
+ }
+
+ counter := newCounter(time.Duration(server.options.Timeout) * time.Second)
+
+ path := "/"
+ if server.options.EnableRandomUrl {
+ path = "/" + randomstring.Generate(server.options.RandomUrlLength) + "/"
+ }
+
+ handlers := server.setupHandlers(cctx, cancel, path, counter)
+ srv, err := server.setupHTTPServer(handlers)
+ if err != nil {
+ return errors.Wrapf(err, "failed to setup an HTTP server")
+ }
+
+ if server.options.PermitWrite {
+ log.Printf("Permitting clients to write input to the PTY.")
+ }
+ if server.options.Once {
+ log.Printf("Once option is provided, accepting only one client")
+ }
+
+ if server.options.Port == "0" {
+ log.Printf("Port number configured to `0`, choosing a random port")
+ }
+ hostPort := net.JoinHostPort(server.options.Address, server.options.Port)
+ listener, err := net.Listen("tcp", hostPort)
+ if err != nil {
+ return errors.Wrapf(err, "failed to listen at `%s`", hostPort)
+ }
+
+ scheme := "http"
+ if server.options.EnableTLS {
+ scheme = "https"
+ }
+ host, port, _ := net.SplitHostPort(listener.Addr().String())
+ log.Printf("HTTP server is listening at: %s", scheme+"://"+host+":"+port+path)
+ if server.options.Address == "0.0.0.0" {
+ for _, address := range listAddresses() {
+ log.Printf("Alternative URL: %s", scheme+"://"+address+":"+port+path)
+ }
+ }
+
+ srvErr := make(chan error, 1)
+ go func() {
+ if server.options.EnableTLS {
+ crtFile := homedir.Expand(server.options.TLSCrtFile)
+ keyFile := homedir.Expand(server.options.TLSKeyFile)
+ log.Printf("TLS crt file: " + crtFile)
+ log.Printf("TLS key file: " + keyFile)
+
+ err = srv.ServeTLS(listener, crtFile, keyFile)
+ } else {
+ err = srv.Serve(listener)
+ }
+ if err != nil {
+ srvErr <- err
+ }
+ }()
+
+ go func() {
+ select {
+ case <-opts.gracefullCtx.Done():
+ srv.Shutdown(context.Background())
+ case <-cctx.Done():
+ }
+ }()
+
+ select {
+ case err = <-srvErr:
+ if err == http.ErrServerClosed { // by gracefull ctx
+ err = nil
+ } else {
+ cancel()
+ }
+ case <-cctx.Done():
+ srv.Close()
+ err = cctx.Err()
+ }
+
+ conn := counter.count()
+ if conn > 0 {
+ log.Printf("Waiting for %d connections to be closed", conn)
+ }
+ counter.wait()
+
+ return err
+}
+
+func (server *Server) setupHandlers(ctx context.Context, cancel context.CancelFunc, pathPrefix string, counter *counter) http.Handler {
+ staticFileHandler := http.FileServer(
+ &assetfs.AssetFS{Asset: Asset, AssetDir: AssetDir, Prefix: "static"},
+ )
+
+ var siteMux = http.NewServeMux()
+ siteMux.HandleFunc(pathPrefix, server.handleIndex)
+ siteMux.Handle(pathPrefix+"js/", http.StripPrefix(pathPrefix, staticFileHandler))
+ siteMux.Handle(pathPrefix+"favicon.png", http.StripPrefix(pathPrefix, staticFileHandler))
+ siteMux.Handle(pathPrefix+"css/", http.StripPrefix(pathPrefix, staticFileHandler))
+
+ siteMux.HandleFunc(pathPrefix+"auth_token.js", server.handleAuthToken)
+ siteMux.HandleFunc(pathPrefix+"config.js", server.handleConfig)
+
+ siteHandler := http.Handler(siteMux)
+
+ if server.options.EnableBasicAuth {
+ log.Printf("Using Basic Authentication")
+ siteHandler = server.wrapBasicAuth(siteHandler, server.options.Credential)
+ }
+
+ withGz := gziphandler.GzipHandler(server.wrapHeaders(siteHandler))
+ siteHandler = server.wrapLogger(withGz)
+
+ wsMux := http.NewServeMux()
+ wsMux.Handle("/", siteHandler)
+ wsMux.HandleFunc(pathPrefix+"ws", server.generateHandleWS(ctx, cancel, counter))
+ siteHandler = http.Handler(wsMux)
+
+ return siteHandler
+}
+
+func (server *Server) setupHTTPServer(handler http.Handler) (*http.Server, error) {
+ srv := &http.Server{
+ Handler: handler,
+ }
+
+ if server.options.EnableTLSClientAuth {
+ tlsConfig, err := server.tlsConfig()
+ if err != nil {
+ return nil, errors.Wrapf(err, "failed to setup TLS configuration")
+ }
+ srv.TLSConfig = tlsConfig
+ }
+
+ return srv, nil
+}
+
+func (server *Server) tlsConfig() (*tls.Config, error) {
+ caFile := homedir.Expand(server.options.TLSCACrtFile)
+ caCert, err := ioutil.ReadFile(caFile)
+ if err != nil {
+ return nil, errors.New("could not open CA crt file " + caFile)
+ }
+ caCertPool := x509.NewCertPool()
+ if !caCertPool.AppendCertsFromPEM(caCert) {
+ return nil, errors.New("could not parse CA crt file data in " + caFile)
+ }
+ tlsConfig := &tls.Config{
+ ClientCAs: caCertPool,
+ ClientAuth: tls.RequireAndVerifyClientCert,
+ }
+ return tlsConfig, nil
+}
diff --git a/vendor/github.com/yudai/gotty/server/slave.go b/vendor/github.com/yudai/gotty/server/slave.go
new file mode 100644
index 0000000..77d0973
--- /dev/null
+++ b/vendor/github.com/yudai/gotty/server/slave.go
@@ -0,0 +1,17 @@
+package server
+
+import (
+ "github.com/yudai/gotty/webtty"
+)
+
+// Slave is webtty.Slave with some additional methods.
+type Slave interface {
+ webtty.Slave
+
+ Close() error
+}
+
+type Factory interface {
+ Name() string
+ New(params map[string][]string) (Slave, error)
+}
diff --git a/vendor/github.com/yudai/gotty/server/ws_wrapper.go b/vendor/github.com/yudai/gotty/server/ws_wrapper.go
new file mode 100644
index 0000000..819c393
--- /dev/null
+++ b/vendor/github.com/yudai/gotty/server/ws_wrapper.go
@@ -0,0 +1,33 @@
+package server
+
+import (
+ "github.com/gorilla/websocket"
+)
+
+type wsWrapper struct {
+ *websocket.Conn
+}
+
+func (wsw *wsWrapper) Write(p []byte) (n int, err error) {
+ writer, err := wsw.Conn.NextWriter(websocket.TextMessage)
+ if err != nil {
+ return 0, err
+ }
+ defer writer.Close()
+ return writer.Write(p)
+}
+
+func (wsw *wsWrapper) Read(p []byte) (n int, err error) {
+ for {
+ msgType, reader, err := wsw.Conn.NextReader()
+ if err != nil {
+ return 0, err
+ }
+
+ if msgType != websocket.TextMessage {
+ continue
+ }
+
+ return reader.Read(p)
+ }
+}
diff --git a/vendor/github.com/yudai/gotty/utils/default.go b/vendor/github.com/yudai/gotty/utils/default.go
new file mode 100644
index 0000000..e813b3b
--- /dev/null
+++ b/vendor/github.com/yudai/gotty/utils/default.go
@@ -0,0 +1,41 @@
+package utils
+
+import (
+ "fmt"
+ "github.com/fatih/structs"
+ "reflect"
+ "strconv"
+)
+
+func ApplyDefaultValues(struct_ interface{}) (err error) {
+ o := structs.New(struct_)
+
+ for _, field := range o.Fields() {
+ defaultValue := field.Tag("default")
+ if defaultValue == "" {
+ continue
+ }
+ var val interface{}
+ switch field.Kind() {
+ case reflect.String:
+ val = defaultValue
+ case reflect.Bool:
+ if defaultValue == "true" {
+ val = true
+ } else if defaultValue == "false" {
+ val = false
+ } else {
+ return fmt.Errorf("invalid bool expression: %v, use true/false", defaultValue)
+ }
+ case reflect.Int:
+ val, err = strconv.Atoi(defaultValue)
+ if err != nil {
+ return err
+ }
+ default:
+ val = field.Value()
+ }
+ field.Set(val)
+ }
+ return nil
+}
diff --git a/vendor/github.com/yudai/gotty/utils/flags.go b/vendor/github.com/yudai/gotty/utils/flags.go
new file mode 100644
index 0000000..b5c66b9
--- /dev/null
+++ b/vendor/github.com/yudai/gotty/utils/flags.go
@@ -0,0 +1,124 @@
+package utils
+
+import (
+ "io/ioutil"
+ "log"
+ "os"
+ "reflect"
+ "strings"
+
+ "github.com/codegangsta/cli"
+ "github.com/fatih/structs"
+ "github.com/yudai/hcl"
+
+ "github.com/yudai/gotty/pkg/homedir"
+)
+
+func GenerateFlags(options ...interface{}) (flags []cli.Flag, mappings map[string]string, err error) {
+ mappings = make(map[string]string)
+
+ for _, struct_ := range options {
+ o := structs.New(struct_)
+ for _, field := range o.Fields() {
+ flagName := field.Tag("flagName")
+ if flagName == "" {
+ continue
+ }
+ envName := "GOTTY_" + strings.ToUpper(strings.Join(strings.Split(flagName, "-"), "_"))
+ mappings[flagName] = field.Name()
+
+ flagShortName := field.Tag("flagSName")
+ if flagShortName != "" {
+ flagName += ", " + flagShortName
+ }
+
+ flagDescription := field.Tag("flagDescribe")
+
+ switch field.Kind() {
+ case reflect.String:
+ flags = append(flags, cli.StringFlag{
+ Name: flagName,
+ Value: field.Value().(string),
+ Usage: flagDescription,
+ EnvVar: envName,
+ })
+ case reflect.Bool:
+ flags = append(flags, cli.BoolFlag{
+ Name: flagName,
+ Usage: flagDescription,
+ EnvVar: envName,
+ })
+ case reflect.Int:
+ flags = append(flags, cli.IntFlag{
+ Name: flagName,
+ Value: field.Value().(int),
+ Usage: flagDescription,
+ EnvVar: envName,
+ })
+ }
+ }
+ }
+
+ return
+}
+
+func ApplyFlags(
+ flags []cli.Flag,
+ mappingHint map[string]string,
+ c *cli.Context,
+ options ...interface{},
+) {
+ objects := make([]*structs.Struct, len(options))
+ for i, struct_ := range options {
+ objects[i] = structs.New(struct_)
+ }
+
+ for flagName, fieldName := range mappingHint {
+ if !c.IsSet(flagName) {
+ continue
+ }
+ var field *structs.Field
+ var ok bool
+ for _, o := range objects {
+ field, ok = o.FieldOk(fieldName)
+ if ok {
+ break
+ }
+ }
+ if field == nil {
+ continue
+ }
+ var val interface{}
+ switch field.Kind() {
+ case reflect.String:
+ val = c.String(flagName)
+ case reflect.Bool:
+ val = c.Bool(flagName)
+ case reflect.Int:
+ val = c.Int(flagName)
+ }
+ field.Set(val)
+ }
+}
+
+func ApplyConfigFile(filePath string, options ...interface{}) error {
+ filePath = homedir.Expand(filePath)
+ if _, err := os.Stat(filePath); os.IsNotExist(err) {
+ return err
+ }
+
+ fileString := []byte{}
+ log.Printf("Loading config file at: %s", filePath)
+ fileString, err := ioutil.ReadFile(filePath)
+ if err != nil {
+ return err
+ }
+
+ for _, object := range options {
+ if err := hcl.Decode(object, string(fileString)); err != nil {
+ return err
+ }
+ }
+
+ return nil
+}
diff --git a/vendor/github.com/yudai/gotty/version.go b/vendor/github.com/yudai/gotty/version.go
new file mode 100644
index 0000000..ab7b913
--- /dev/null
+++ b/vendor/github.com/yudai/gotty/version.go
@@ -0,0 +1,4 @@
+package main
+
+var Version = "unknown_version"
+var CommitID = "unknown_commit"
diff --git a/vendor/github.com/yudai/gotty/webtty/doc.go b/vendor/github.com/yudai/gotty/webtty/doc.go
new file mode 100644
index 0000000..b7d76b9
--- /dev/null
+++ b/vendor/github.com/yudai/gotty/webtty/doc.go
@@ -0,0 +1,3 @@
+// Package webtty provides a protocl and an implementation to
+// controll terminals thorough networks.
+package webtty
diff --git a/vendor/github.com/yudai/gotty/webtty/errors.go b/vendor/github.com/yudai/gotty/webtty/errors.go
new file mode 100644
index 0000000..0ea6473
--- /dev/null
+++ b/vendor/github.com/yudai/gotty/webtty/errors.go
@@ -0,0 +1,13 @@
+package webtty
+
+import (
+ "errors"
+)
+
+var (
+ // ErrSlaveClosed indicates the function has exited by the slave
+ ErrSlaveClosed = errors.New("slave closed")
+
+ // ErrSlaveClosed is returned when the slave connection is closed.
+ ErrMasterClosed = errors.New("master closed")
+)
diff --git a/vendor/github.com/yudai/gotty/webtty/master.go b/vendor/github.com/yudai/gotty/webtty/master.go
new file mode 100644
index 0000000..7f30f47
--- /dev/null
+++ b/vendor/github.com/yudai/gotty/webtty/master.go
@@ -0,0 +1,8 @@
+package webtty
+
+import (
+ "io"
+)
+
+// Master represents a PTY master, usually it's a websocket connection.
+type Master io.ReadWriter
diff --git a/vendor/github.com/yudai/gotty/webtty/message_types.go b/vendor/github.com/yudai/gotty/webtty/message_types.go
new file mode 100644
index 0000000..c437a42
--- /dev/null
+++ b/vendor/github.com/yudai/gotty/webtty/message_types.go
@@ -0,0 +1,31 @@
+package webtty
+
+// Protocols defines the name of this protocol,
+// which is supposed to be used to the subprotocol of Websockt streams.
+var Protocols = []string{"webtty"}
+
+const (
+ // Unknown message type, maybe sent by a bug
+ UnknownInput = '0'
+ // User input typically from a keyboard
+ Input = '1'
+ // Ping to the server
+ Ping = '2'
+ // Notify that the browser size has been changed
+ ResizeTerminal = '3'
+)
+
+const (
+ // Unknown message type, maybe set by a bug
+ UnknownOutput = '0'
+ // Normal output to the terminal
+ Output = '1'
+ // Pong to the browser
+ Pong = '2'
+ // Set window title of the terminal
+ SetWindowTitle = '3'
+ // Set terminal preference
+ SetPreferences = '4'
+ // Make terminal to reconnect
+ SetReconnect = '5'
+)
diff --git a/vendor/github.com/yudai/gotty/webtty/option.go b/vendor/github.com/yudai/gotty/webtty/option.go
new file mode 100644
index 0000000..1618e89
--- /dev/null
+++ b/vendor/github.com/yudai/gotty/webtty/option.go
@@ -0,0 +1,62 @@
+package webtty
+
+import (
+ "encoding/json"
+
+ "github.com/pkg/errors"
+)
+
+// Option is an option for WebTTY.
+type Option func(*WebTTY) error
+
+// WithPermitWrite sets a WebTTY to accept input from slaves.
+func WithPermitWrite() Option {
+ return func(wt *WebTTY) error {
+ wt.permitWrite = true
+ return nil
+ }
+}
+
+// WithFixedColumns sets a fixed width to TTY master.
+func WithFixedColumns(columns int) Option {
+ return func(wt *WebTTY) error {
+ wt.columns = columns
+ return nil
+ }
+}
+
+// WithFixedRows sets a fixed height to TTY master.
+func WithFixedRows(rows int) Option {
+ return func(wt *WebTTY) error {
+ wt.rows = rows
+ return nil
+ }
+}
+
+// WithWindowTitle sets the default window title of the session
+func WithWindowTitle(windowTitle []byte) Option {
+ return func(wt *WebTTY) error {
+ wt.windowTitle = windowTitle
+ return nil
+ }
+}
+
+// WithReconnect enables reconnection on the master side.
+func WithReconnect(timeInSeconds int) Option {
+ return func(wt *WebTTY) error {
+ wt.reconnect = timeInSeconds
+ return nil
+ }
+}
+
+// WithMasterPreferences sets an optional configuration of master.
+func WithMasterPreferences(preferences interface{}) Option {
+ return func(wt *WebTTY) error {
+ prefs, err := json.Marshal(preferences)
+ if err != nil {
+ return errors.Wrapf(err, "failed to marshal preferences as JSON")
+ }
+ wt.masterPrefs = prefs
+ return nil
+ }
+}
diff --git a/vendor/github.com/yudai/gotty/webtty/slave.go b/vendor/github.com/yudai/gotty/webtty/slave.go
new file mode 100644
index 0000000..b9893ba
--- /dev/null
+++ b/vendor/github.com/yudai/gotty/webtty/slave.go
@@ -0,0 +1,17 @@
+package webtty
+
+import (
+ "io"
+)
+
+// Slave represents a PTY slave, typically it's a local command.
+type Slave interface {
+ io.ReadWriter
+
+ // WindowTitleVariables returns any values that can be used to fill out
+ // the title of a terminal.
+ WindowTitleVariables() map[string]interface{}
+
+ // ResizeTerminal sets a new size of the terminal.
+ ResizeTerminal(columns int, rows int) error
+}
diff --git a/vendor/github.com/yudai/gotty/webtty/webtty.go b/vendor/github.com/yudai/gotty/webtty/webtty.go
new file mode 100644
index 0000000..ed4f8b9
--- /dev/null
+++ b/vendor/github.com/yudai/gotty/webtty/webtty.go
@@ -0,0 +1,219 @@
+package webtty
+
+import (
+ "context"
+ "encoding/base64"
+ "encoding/json"
+ "sync"
+
+ "github.com/pkg/errors"
+)
+
+// WebTTY bridges a PTY slave and its PTY master.
+// To support text-based streams and side channel commands such as
+// terminal resizing, WebTTY uses an original protocol.
+type WebTTY struct {
+ // PTY Master, which probably a connection to browser
+ masterConn Master
+ // PTY Slave
+ slave Slave
+
+ windowTitle []byte
+ permitWrite bool
+ columns int
+ rows int
+ reconnect int // in seconds
+ masterPrefs []byte
+
+ bufferSize int
+ writeMutex sync.Mutex
+}
+
+// New creates a new instance of WebTTY.
+// masterConn is a connection to the PTY master,
+// typically it's a websocket connection to a client.
+// slave is a PTY slave such as a local command with a PTY.
+func New(masterConn Master, slave Slave, options ...Option) (*WebTTY, error) {
+ wt := &WebTTY{
+ masterConn: masterConn,
+ slave: slave,
+
+ permitWrite: false,
+ columns: 0,
+ rows: 0,
+
+ bufferSize: 1024,
+ }
+
+ for _, option := range options {
+ option(wt)
+ }
+
+ return wt, nil
+}
+
+// Run starts the main process of the WebTTY.
+// This method blocks until the context is canceled.
+// Note that the master and slave are left intact even
+// after the context is canceled. Closing them is caller's
+// responsibility.
+// If the connection to one end gets closed, returns ErrSlaveClosed or ErrMasterClosed.
+func (wt *WebTTY) Run(ctx context.Context) error {
+ err := wt.sendInitializeMessage()
+ if err != nil {
+ return errors.Wrapf(err, "failed to send initializing message")
+ }
+
+ errs := make(chan error, 2)
+
+ go func() {
+ errs <- func() error {
+ buffer := make([]byte, wt.bufferSize)
+ for {
+ n, err := wt.slave.Read(buffer)
+ if err != nil {
+ return ErrSlaveClosed
+ }
+
+ err = wt.handleSlaveReadEvent(buffer[:n])
+ if err != nil {
+ return err
+ }
+ }
+ }()
+ }()
+
+ go func() {
+ errs <- func() error {
+ buffer := make([]byte, wt.bufferSize)
+ for {
+ n, err := wt.masterConn.Read(buffer)
+ if err != nil {
+ return ErrMasterClosed
+ }
+
+ err = wt.handleMasterReadEvent(buffer[:n])
+ if err != nil {
+ return err
+ }
+ }
+ }()
+ }()
+
+ select {
+ case <-ctx.Done():
+ err = ctx.Err()
+ case err = <-errs:
+ }
+
+ return err
+}
+
+func (wt *WebTTY) sendInitializeMessage() error {
+ err := wt.masterWrite(append([]byte{SetWindowTitle}, wt.windowTitle...))
+ if err != nil {
+ return errors.Wrapf(err, "failed to send window title")
+ }
+
+ if wt.reconnect > 0 {
+ reconnect, _ := json.Marshal(wt.reconnect)
+ err := wt.masterWrite(append([]byte{SetReconnect}, reconnect...))
+ if err != nil {
+ return errors.Wrapf(err, "failed to set reconnect")
+ }
+ }
+
+ if wt.masterPrefs != nil {
+ err := wt.masterWrite(append([]byte{SetPreferences}, wt.masterPrefs...))
+ if err != nil {
+ return errors.Wrapf(err, "failed to set preferences")
+ }
+ }
+
+ return nil
+}
+
+func (wt *WebTTY) handleSlaveReadEvent(data []byte) error {
+ safeMessage := base64.StdEncoding.EncodeToString(data)
+ err := wt.masterWrite(append([]byte{Output}, []byte(safeMessage)...))
+ if err != nil {
+ return errors.Wrapf(err, "failed to send message to master")
+ }
+
+ return nil
+}
+
+func (wt *WebTTY) masterWrite(data []byte) error {
+ wt.writeMutex.Lock()
+ defer wt.writeMutex.Unlock()
+
+ _, err := wt.masterConn.Write(data)
+ if err != nil {
+ return errors.Wrapf(err, "failed to write to master")
+ }
+
+ return nil
+}
+
+func (wt *WebTTY) handleMasterReadEvent(data []byte) error {
+ if len(data) == 0 {
+ return errors.New("unexpected zero length read from master")
+ }
+
+ switch data[0] {
+ case Input:
+ if !wt.permitWrite {
+ return nil
+ }
+
+ if len(data) <= 1 {
+ return nil
+ }
+
+ _, err := wt.slave.Write(data[1:])
+ if err != nil {
+ return errors.Wrapf(err, "failed to write received data to slave")
+ }
+
+ case Ping:
+ err := wt.masterWrite([]byte{Pong})
+ if err != nil {
+ return errors.Wrapf(err, "failed to return Pong message to master")
+ }
+
+ case ResizeTerminal:
+ if wt.columns != 0 && wt.rows != 0 {
+ break
+ }
+
+ if len(data) <= 1 {
+ return errors.New("received malformed remote command for terminal resize: empty payload")
+ }
+
+ var args argResizeTerminal
+ err := json.Unmarshal(data[1:], &args)
+ if err != nil {
+ return errors.Wrapf(err, "received malformed data for terminal resize")
+ }
+ rows := wt.rows
+ if rows == 0 {
+ rows = int(args.Rows)
+ }
+
+ columns := wt.columns
+ if columns == 0 {
+ columns = int(args.Columns)
+ }
+
+ wt.slave.ResizeTerminal(columns, rows)
+ default:
+ return errors.Errorf("unknown message type `%c`", data[0])
+ }
+
+ return nil
+}
+
+type argResizeTerminal struct {
+ Columns float64
+ Rows float64
+}
diff --git a/vendor/github.com/yudai/gotty/webtty/webtty_test.go b/vendor/github.com/yudai/gotty/webtty/webtty_test.go
new file mode 100644
index 0000000..92a3620
--- /dev/null
+++ b/vendor/github.com/yudai/gotty/webtty/webtty_test.go
@@ -0,0 +1,139 @@
+package webtty
+
+import (
+ "bytes"
+ "context"
+ "encoding/base64"
+ "io"
+ "sync"
+ "testing"
+)
+
+type pipePair struct {
+ *io.PipeReader
+ *io.PipeWriter
+}
+
+func TestWriteFromPTY(t *testing.T) {
+ connInPipeReader, connInPipeWriter := io.Pipe() // in to conn
+ connOutPipeReader, _ := io.Pipe() // out from conn
+
+ conn := pipePair{
+ connOutPipeReader,
+ connInPipeWriter,
+ }
+ dt, err := New(conn)
+ if err != nil {
+ t.Fatalf("Unexpected error from New(): %s", err)
+ }
+
+ ctx, cancel := context.WithCancel(context.Background())
+ var wg sync.WaitGroup
+ wg.Add(1)
+ go func() {
+ wg.Done()
+ err := dt.Run(ctx)
+ if err != nil {
+ t.Fatalf("Unexpected error from Run(): %s", err)
+ }
+ }()
+
+ message := []byte("foobar")
+ n, err := dt.TTY().Write(message)
+ if err != nil {
+ t.Fatalf("Unexpected error from Write(): %s", err)
+ }
+ if n != len(message) {
+ t.Fatalf("Write() accepted `%d` for message `%s`", n, message)
+ }
+
+ buf := make([]byte, 1024)
+ n, err = connInPipeReader.Read(buf)
+ if err != nil {
+ t.Fatalf("Unexpected error from Read(): %s", err)
+ }
+ if buf[0] != Output {
+ t.Fatalf("Unexpected message type `%c`", buf[0])
+ }
+ decoded := make([]byte, 1024)
+ n, err = base64.StdEncoding.Decode(decoded, buf[1:n])
+ if err != nil {
+ t.Fatalf("Unexpected error from Decode(): %s", err)
+ }
+ if !bytes.Equal(decoded[:n], message) {
+ t.Fatalf("Unexpected message received: `%s`", decoded[:n])
+ }
+
+ cancel()
+ wg.Wait()
+}
+
+func TestWriteFromConn(t *testing.T) {
+ connInPipeReader, connInPipeWriter := io.Pipe() // in to conn
+ connOutPipeReader, connOutPipeWriter := io.Pipe() // out from conn
+
+ conn := pipePair{
+ connOutPipeReader,
+ connInPipeWriter,
+ }
+
+ dt, err := New(conn)
+ if err != nil {
+ t.Fatalf("Unexpected error from New(): %s", err)
+ }
+
+ ctx, cancel := context.WithCancel(context.Background())
+ var wg sync.WaitGroup
+ wg.Add(1)
+ go func() {
+ wg.Done()
+ err := dt.Run(ctx)
+ if err != nil {
+ t.Fatalf("Unexpected error from Run(): %s", err)
+ }
+ }()
+
+ var (
+ message []byte
+ n int
+ )
+ readBuf := make([]byte, 1024)
+
+ // input
+ message = []byte("0hello\n") // line buffered canonical mode
+ n, err = connOutPipeWriter.Write(message)
+ if err != nil {
+ t.Fatalf("Unexpected error from Write(): %s", err)
+ }
+ if n != len(message) {
+ t.Fatalf("Write() accepted `%d` for message `%s`", n, message)
+ }
+
+ n, err = dt.TTY().Read(readBuf)
+ if err != nil {
+ t.Fatalf("Unexpected error from Write(): %s", err)
+ }
+ if !bytes.Equal(readBuf[:n], message[1:]) {
+ t.Fatalf("Unexpected message received: `%s`", readBuf[:n])
+ }
+
+ // ping
+ message = []byte("1\n") // line buffered canonical mode
+ n, err = connOutPipeWriter.Write(message)
+ if n != len(message) {
+ t.Fatalf("Write() accepted `%d` for message `%s`", n, message)
+ }
+
+ n, err = connInPipeReader.Read(readBuf)
+ if err != nil {
+ t.Fatalf("Unexpected error from Read(): %s", err)
+ }
+ if !bytes.Equal(readBuf[:n], []byte{'1'}) {
+ t.Fatalf("Unexpected message received: `%s`", readBuf[:n])
+ }
+
+ // TODO: resize
+
+ cancel()
+ wg.Wait()
+}
diff --git a/vendor/github.com/yudai/gotty/wercker.yml b/vendor/github.com/yudai/gotty/wercker.yml
new file mode 100644
index 0000000..019952d
--- /dev/null
+++ b/vendor/github.com/yudai/gotty/wercker.yml
@@ -0,0 +1,32 @@
+box: golang:1.9.0
+
+build:
+ steps:
+ - setup-go-workspace
+ - script:
+ name: tools
+ code: make tools
+ - script:
+ name: test
+ code: make test
+ - script:
+ name: cross compile
+ code: make cross_compile OUTPUT_DIR=$WERCKER_OUTPUT_DIR
+ - script:
+ name: store Makefile
+ code: cp Makefile $WERCKER_OUTPUT_DIR/
+
+deploy:
+ steps:
+ - script:
+ name: tools
+ code: make tools
+ - script:
+ name: targz
+ code: make targz OUTPUT_DIR=.
+ - script:
+ name: shasums
+ code: make shasums OUTPUT_DIR=.
+ - script:
+ name: release
+ code: make release OUTPUT_DIR=. GIT_COMMIT=$WERCKER_GIT_COMMIT
diff --git a/vendor/github.com/yudai/hcl/.gitignore b/vendor/github.com/yudai/hcl/.gitignore
new file mode 100644
index 0000000..e8acb0a
--- /dev/null
+++ b/vendor/github.com/yudai/hcl/.gitignore
@@ -0,0 +1 @@
+y.output
diff --git a/vendor/github.com/yudai/hcl/LICENSE b/vendor/github.com/yudai/hcl/LICENSE
new file mode 100644
index 0000000..c33dcc7
--- /dev/null
+++ b/vendor/github.com/yudai/hcl/LICENSE
@@ -0,0 +1,354 @@
+Mozilla Public License, version 2.0
+
+1. Definitions
+
+1.1. “Contributor”
+
+ means each individual or legal entity that creates, contributes to the
+ creation of, or owns Covered Software.
+
+1.2. “Contributor Version”
+
+ means the combination of the Contributions of others (if any) used by a
+ Contributor and that particular Contributor’s Contribution.
+
+1.3. “Contribution”
+
+ means Covered Software of a particular Contributor.
+
+1.4. “Covered Software”
+
+ means Source Code Form to which the initial Contributor has attached the
+ notice in Exhibit A, the Executable Form of such Source Code Form, and
+ Modifications of such Source Code Form, in each case including portions
+ thereof.
+
+1.5. “Incompatible With Secondary Licenses”
+ means
+
+ a. that the initial Contributor has attached the notice described in
+ Exhibit B to the Covered Software; or
+
+ b. that the Covered Software was made available under the terms of version
+ 1.1 or earlier of the License, but not also under the terms of a
+ Secondary License.
+
+1.6. “Executable Form”
+
+ means any form of the work other than Source Code Form.
+
+1.7. “Larger Work”
+
+ means a work that combines Covered Software with other material, in a separate
+ file or files, that is not Covered Software.
+
+1.8. “License”
+
+ means this document.
+
+1.9. “Licensable”
+
+ means having the right to grant, to the maximum extent possible, whether at the
+ time of the initial grant or subsequently, any and all of the rights conveyed by
+ this License.
+
+1.10. “Modifications”
+
+ means any of the following:
+
+ a. any file in Source Code Form that results from an addition to, deletion
+ from, or modification of the contents of Covered Software; or
+
+ b. any new file in Source Code Form that contains any Covered Software.
+
+1.11. “Patent Claims” of a Contributor
+
+ means any patent claim(s), including without limitation, method, process,
+ and apparatus claims, in any patent Licensable by such Contributor that
+ would be infringed, but for the grant of the License, by the making,
+ using, selling, offering for sale, having made, import, or transfer of
+ either its Contributions or its Contributor Version.
+
+1.12. “Secondary License”
+
+ means either the GNU General Public License, Version 2.0, the GNU Lesser
+ General Public License, Version 2.1, the GNU Affero General Public
+ License, Version 3.0, or any later versions of those licenses.
+
+1.13. “Source Code Form”
+
+ means the form of the work preferred for making modifications.
+
+1.14. “You” (or “Your”)
+
+ means an individual or a legal entity exercising rights under this
+ License. For legal entities, “You” includes any entity that controls, is
+ controlled by, or is under common control with You. For purposes of this
+ definition, “control” means (a) the power, direct or indirect, to cause
+ the direction or management of such entity, whether by contract or
+ otherwise, or (b) ownership of more than fifty percent (50%) of the
+ outstanding shares or beneficial ownership of such entity.
+
+
+2. License Grants and Conditions
+
+2.1. Grants
+
+ Each Contributor hereby grants You a world-wide, royalty-free,
+ non-exclusive license:
+
+ a. under intellectual property rights (other than patent or trademark)
+ Licensable by such Contributor to use, reproduce, make available,
+ modify, display, perform, distribute, and otherwise exploit its
+ Contributions, either on an unmodified basis, with Modifications, or as
+ part of a Larger Work; and
+
+ b. under Patent Claims of such Contributor to make, use, sell, offer for
+ sale, have made, import, and otherwise transfer either its Contributions
+ or its Contributor Version.
+
+2.2. Effective Date
+
+ The licenses granted in Section 2.1 with respect to any Contribution become
+ effective for each Contribution on the date the Contributor first distributes
+ such Contribution.
+
+2.3. Limitations on Grant Scope
+
+ The licenses granted in this Section 2 are the only rights granted under this
+ License. No additional rights or licenses will be implied from the distribution
+ or licensing of Covered Software under this License. Notwithstanding Section
+ 2.1(b) above, no patent license is granted by a Contributor:
+
+ a. for any code that a Contributor has removed from Covered Software; or
+
+ b. for infringements caused by: (i) Your and any other third party’s
+ modifications of Covered Software, or (ii) the combination of its
+ Contributions with other software (except as part of its Contributor
+ Version); or
+
+ c. under Patent Claims infringed by Covered Software in the absence of its
+ Contributions.
+
+ This License does not grant any rights in the trademarks, service marks, or
+ logos of any Contributor (except as may be necessary to comply with the
+ notice requirements in Section 3.4).
+
+2.4. Subsequent Licenses
+
+ No Contributor makes additional grants as a result of Your choice to
+ distribute the Covered Software under a subsequent version of this License
+ (see Section 10.2) or under the terms of a Secondary License (if permitted
+ under the terms of Section 3.3).
+
+2.5. Representation
+
+ Each Contributor represents that the Contributor believes its Contributions
+ are its original creation(s) or it has sufficient rights to grant the
+ rights to its Contributions conveyed by this License.
+
+2.6. Fair Use
+
+ This License is not intended to limit any rights You have under applicable
+ copyright doctrines of fair use, fair dealing, or other equivalents.
+
+2.7. Conditions
+
+ Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in
+ Section 2.1.
+
+
+3. Responsibilities
+
+3.1. Distribution of Source Form
+
+ All distribution of Covered Software in Source Code Form, including any
+ Modifications that You create or to which You contribute, must be under the
+ terms of this License. You must inform recipients that the Source Code Form
+ of the Covered Software is governed by the terms of this License, and how
+ they can obtain a copy of this License. You may not attempt to alter or
+ restrict the recipients’ rights in the Source Code Form.
+
+3.2. Distribution of Executable Form
+
+ If You distribute Covered Software in Executable Form then:
+
+ a. such Covered Software must also be made available in Source Code Form,
+ as described in Section 3.1, and You must inform recipients of the
+ Executable Form how they can obtain a copy of such Source Code Form by
+ reasonable means in a timely manner, at a charge no more than the cost
+ of distribution to the recipient; and
+
+ b. You may distribute such Executable Form under the terms of this License,
+ or sublicense it under different terms, provided that the license for
+ the Executable Form does not attempt to limit or alter the recipients’
+ rights in the Source Code Form under this License.
+
+3.3. Distribution of a Larger Work
+
+ You may create and distribute a Larger Work under terms of Your choice,
+ provided that You also comply with the requirements of this License for the
+ Covered Software. If the Larger Work is a combination of Covered Software
+ with a work governed by one or more Secondary Licenses, and the Covered
+ Software is not Incompatible With Secondary Licenses, this License permits
+ You to additionally distribute such Covered Software under the terms of
+ such Secondary License(s), so that the recipient of the Larger Work may, at
+ their option, further distribute the Covered Software under the terms of
+ either this License or such Secondary License(s).
+
+3.4. Notices
+
+ You may not remove or alter the substance of any license notices (including
+ copyright notices, patent notices, disclaimers of warranty, or limitations
+ of liability) contained within the Source Code Form of the Covered
+ Software, except that You may alter any license notices to the extent
+ required to remedy known factual inaccuracies.
+
+3.5. Application of Additional Terms
+
+ You may choose to offer, and to charge a fee for, warranty, support,
+ indemnity or liability obligations to one or more recipients of Covered
+ Software. However, You may do so only on Your own behalf, and not on behalf
+ of any Contributor. You must make it absolutely clear that any such
+ warranty, support, indemnity, or liability obligation is offered by You
+ alone, and You hereby agree to indemnify every Contributor for any
+ liability incurred by such Contributor as a result of warranty, support,
+ indemnity or liability terms You offer. You may include additional
+ disclaimers of warranty and limitations of liability specific to any
+ jurisdiction.
+
+4. Inability to Comply Due to Statute or Regulation
+
+ If it is impossible for You to comply with any of the terms of this License
+ with respect to some or all of the Covered Software due to statute, judicial
+ order, or regulation then You must: (a) comply with the terms of this License
+ to the maximum extent possible; and (b) describe the limitations and the code
+ they affect. Such description must be placed in a text file included with all
+ distributions of the Covered Software under this License. Except to the
+ extent prohibited by statute or regulation, such description must be
+ sufficiently detailed for a recipient of ordinary skill to be able to
+ understand it.
+
+5. Termination
+
+5.1. The rights granted under this License will terminate automatically if You
+ fail to comply with any of its terms. However, if You become compliant,
+ then the rights granted under this License from a particular Contributor
+ are reinstated (a) provisionally, unless and until such Contributor
+ explicitly and finally terminates Your grants, and (b) on an ongoing basis,
+ if such Contributor fails to notify You of the non-compliance by some
+ reasonable means prior to 60 days after You have come back into compliance.
+ Moreover, Your grants from a particular Contributor are reinstated on an
+ ongoing basis if such Contributor notifies You of the non-compliance by
+ some reasonable means, this is the first time You have received notice of
+ non-compliance with this License from such Contributor, and You become
+ compliant prior to 30 days after Your receipt of the notice.
+
+5.2. If You initiate litigation against any entity by asserting a patent
+ infringement claim (excluding declaratory judgment actions, counter-claims,
+ and cross-claims) alleging that a Contributor Version directly or
+ indirectly infringes any patent, then the rights granted to You by any and
+ all Contributors for the Covered Software under Section 2.1 of this License
+ shall terminate.
+
+5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user
+ license agreements (excluding distributors and resellers) which have been
+ validly granted by You or Your distributors under this License prior to
+ termination shall survive termination.
+
+6. Disclaimer of Warranty
+
+ Covered Software is provided under this License on an “as is” basis, without
+ warranty of any kind, either expressed, implied, or statutory, including,
+ without limitation, warranties that the Covered Software is free of defects,
+ merchantable, fit for a particular purpose or non-infringing. The entire
+ risk as to the quality and performance of the Covered Software is with You.
+ Should any Covered Software prove defective in any respect, You (not any
+ Contributor) assume the cost of any necessary servicing, repair, or
+ correction. This disclaimer of warranty constitutes an essential part of this
+ License. No use of any Covered Software is authorized under this License
+ except under this disclaimer.
+
+7. Limitation of Liability
+
+ Under no circumstances and under no legal theory, whether tort (including
+ negligence), contract, or otherwise, shall any Contributor, or anyone who
+ distributes Covered Software as permitted above, be liable to You for any
+ direct, indirect, special, incidental, or consequential damages of any
+ character including, without limitation, damages for lost profits, loss of
+ goodwill, work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses, even if such party shall have been
+ informed of the possibility of such damages. This limitation of liability
+ shall not apply to liability for death or personal injury resulting from such
+ party’s negligence to the extent applicable law prohibits such limitation.
+ Some jurisdictions do not allow the exclusion or limitation of incidental or
+ consequential damages, so this exclusion and limitation may not apply to You.
+
+8. Litigation
+
+ Any litigation relating to this License may be brought only in the courts of
+ a jurisdiction where the defendant maintains its principal place of business
+ and such litigation shall be governed by laws of that jurisdiction, without
+ reference to its conflict-of-law provisions. Nothing in this Section shall
+ prevent a party’s ability to bring cross-claims or counter-claims.
+
+9. Miscellaneous
+
+ This License represents the complete agreement concerning the subject matter
+ hereof. If any provision of this License is held to be unenforceable, such
+ provision shall be reformed only to the extent necessary to make it
+ enforceable. Any law or regulation which provides that the language of a
+ contract shall be construed against the drafter shall not be used to construe
+ this License against a Contributor.
+
+
+10. Versions of the License
+
+10.1. New Versions
+
+ Mozilla Foundation is the license steward. Except as provided in Section
+ 10.3, no one other than the license steward has the right to modify or
+ publish new versions of this License. Each version will be given a
+ distinguishing version number.
+
+10.2. Effect of New Versions
+
+ You may distribute the Covered Software under the terms of the version of
+ the License under which You originally received the Covered Software, or
+ under the terms of any subsequent version published by the license
+ steward.
+
+10.3. Modified Versions
+
+ If you create software not governed by this License, and you want to
+ create a new license for such software, you may create and use a modified
+ version of this License if you rename the license and remove any
+ references to the name of the license steward (except to note that such
+ modified license differs from this License).
+
+10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses
+ If You choose to distribute Source Code Form that is Incompatible With
+ Secondary Licenses under the terms of this version of the License, the
+ notice described in Exhibit B of this License must be attached.
+
+Exhibit A - Source Code Form License Notice
+
+ This Source Code Form is subject to the
+ terms of the Mozilla Public License, v.
+ 2.0. If a copy of the MPL was not
+ distributed with this file, You can
+ obtain one at
+ http://mozilla.org/MPL/2.0/.
+
+If it is not possible or desirable to put the notice in a particular file, then
+You may include the notice in a location (such as a LICENSE file in a relevant
+directory) where a recipient would be likely to look for such a notice.
+
+You may add additional accurate notices of copyright ownership.
+
+Exhibit B - “Incompatible With Secondary Licenses” Notice
+
+ This Source Code Form is “Incompatible
+ With Secondary Licenses”, as defined by
+ the Mozilla Public License, v. 2.0.
+
diff --git a/vendor/github.com/yudai/hcl/Makefile b/vendor/github.com/yudai/hcl/Makefile
new file mode 100644
index 0000000..ad404a8
--- /dev/null
+++ b/vendor/github.com/yudai/hcl/Makefile
@@ -0,0 +1,17 @@
+TEST?=./...
+
+default: test
+
+fmt: generate
+ go fmt ./...
+
+test: generate
+ go test $(TEST) $(TESTARGS)
+
+generate:
+ go generate ./...
+
+updatedeps:
+ go get -u golang.org/x/tools/cmd/stringer
+
+.PHONY: default generate test updatedeps
diff --git a/vendor/github.com/yudai/hcl/README.md b/vendor/github.com/yudai/hcl/README.md
new file mode 100644
index 0000000..c69d17e
--- /dev/null
+++ b/vendor/github.com/yudai/hcl/README.md
@@ -0,0 +1,84 @@
+# HCL
+
+HCL (HashiCorp Configuration Language) is a configuration language built
+by HashiCorp. The goal of HCL is to build a structured configuration language
+that is both human and machine friendly for use with command-line tools, but
+specifically targeted towards DevOps tools, servers, etc.
+
+HCL is also fully JSON compatible. That is, JSON can be used as completely
+valid input to a system expecting HCL. This helps makes systems
+interoperable with other systems.
+
+HCL is heavily inspired by
+[libucl](https://github.com/vstakhov/libucl),
+nginx configuration, and others similar.
+
+## Why?
+
+A common question when viewing HCL is to ask the question: why not
+JSON, YAML, etc.?
+
+Prior to HCL, the tools we built at [HashiCorp](http://www.hashicorp.com)
+used a variety of configuration languages from full programming languages
+such as Ruby to complete data structure languages such as JSON. What we
+learned is that some people wanted human-friendly configuration languages
+and some people wanted machine-friendly languages.
+
+JSON fits a nice balance in this, but is fairly verbose and most
+importantly doesn't support comments. With YAML, we found that beginners
+had a really hard time determining what the actual structure was, and
+ended up guessing more than not whether to use a hyphen, colon, etc.
+in order to represent some configuration key.
+
+Full programming languages such as Ruby enable complex behavior
+a configuration language shouldn't usually allow, and also forces
+people to learn some set of Ruby.
+
+Because of this, we decided to create our own configuration language
+that is JSON-compatible. Our configuration language (HCL) is designed
+to be written and modified by humans. The API for HCL allows JSON
+as an input so that it is also machine-friendly (machines can generate
+JSON instead of trying to generate HCL).
+
+Our goal with HCL is not to alienate other configuration languages.
+It is instead to provide HCL as a specialized language for our tools,
+and JSON as the interoperability layer.
+
+## Syntax
+
+The complete grammar
+[can be found here](https://github.com/hashicorp/hcl/blob/master/hcl/parse.y),
+if you're more comfortable reading specifics, but a high-level overview
+of the syntax and grammar are listed here.
+
+ * Single line comments start with `#` or `//`
+
+ * Multi-line comments are wrapped in `/*` and `*/`. Nested block comments
+ are not allowed. A multi-line comment (also known as a block comment)
+ terminates at the first `*/` found.
+
+ * Values are assigned with the syntax `key = value` (whitespace doesn't
+ matter). The value can be any primitive: a string, number, boolean,
+ object, or list.
+
+ * Strings are double-quoted and can contain any UTF-8 characters.
+ Example: `"Hello, World"`
+
+ * Numbers are assumed to be base 10. If you prefix a number with 0x,
+ it is treated as a hexadecimal. If it is prefixed with 0, it is
+ treated as an octal. Numbers can be in scientific notation: "1e10".
+
+ * Boolean values: `true`, `false`
+
+ * Arrays can be made by wrapping it in `[]`. Example:
+ `["foo", "bar", 42]`. Arrays can contain primitives
+ and other arrays, but cannot contain objects. Objects must
+ use the block syntax shown below.
+
+Objects and nested objects are created using the structure shown below:
+
+```
+variable "ami" {
+ description = "the AMI to use"
+}
+```
diff --git a/vendor/github.com/yudai/hcl/decoder.go b/vendor/github.com/yudai/hcl/decoder.go
new file mode 100644
index 0000000..72f14c6
--- /dev/null
+++ b/vendor/github.com/yudai/hcl/decoder.go
@@ -0,0 +1,490 @@
+package hcl
+
+import (
+ "errors"
+ "fmt"
+ "reflect"
+ "sort"
+ "strconv"
+ "strings"
+
+ "github.com/yudai/hcl/hcl"
+)
+
+// This is the tag to use with structures to have settings for HCL
+const tagName = "hcl"
+
+// Decode reads the given input and decodes it into the structure
+// given by `out`.
+func Decode(out interface{}, in string) error {
+ obj, err := Parse(in)
+ if err != nil {
+ return err
+ }
+
+ return DecodeObject(out, obj)
+}
+
+// DecodeObject is a lower-level version of Decode. It decodes a
+// raw Object into the given output.
+func DecodeObject(out interface{}, n *hcl.Object) error {
+ val := reflect.ValueOf(out)
+ if val.Kind() != reflect.Ptr {
+ return errors.New("result must be a pointer")
+ }
+
+ var d decoder
+ return d.decode("root", n, val.Elem())
+}
+
+type decoder struct {
+ stack []reflect.Kind
+}
+
+func (d *decoder) decode(name string, o *hcl.Object, result reflect.Value) error {
+ k := result
+
+ // If we have an interface with a valid value, we use that
+ // for the check.
+ if result.Kind() == reflect.Interface {
+ elem := result.Elem()
+ if elem.IsValid() {
+ k = elem
+ }
+ }
+
+ // Push current onto stack unless it is an interface.
+ if k.Kind() != reflect.Interface {
+ d.stack = append(d.stack, k.Kind())
+
+ // Schedule a pop
+ defer func() {
+ d.stack = d.stack[:len(d.stack)-1]
+ }()
+ }
+
+ switch k.Kind() {
+ case reflect.Bool:
+ return d.decodeBool(name, o, result)
+ case reflect.Float64:
+ return d.decodeFloat(name, o, result)
+ case reflect.Int:
+ return d.decodeInt(name, o, result)
+ case reflect.Interface:
+ // When we see an interface, we make our own thing
+ return d.decodeInterface(name, o, result)
+ case reflect.Map:
+ return d.decodeMap(name, o, result)
+ case reflect.Ptr:
+ return d.decodePtr(name, o, result)
+ case reflect.Slice:
+ return d.decodeSlice(name, o, result)
+ case reflect.String:
+ return d.decodeString(name, o, result)
+ case reflect.Struct:
+ return d.decodeStruct(name, o, result)
+ default:
+ return fmt.Errorf(
+ "%s: unknown kind to decode into: %s", name, k.Kind())
+ }
+
+ return nil
+}
+
+func (d *decoder) decodeBool(name string, o *hcl.Object, result reflect.Value) error {
+ switch o.Type {
+ case hcl.ValueTypeBool:
+ result.Set(reflect.ValueOf(o.Value.(bool)))
+ default:
+ return fmt.Errorf("%s: unknown type %v", name, o.Type)
+ }
+
+ return nil
+}
+
+func (d *decoder) decodeFloat(name string, o *hcl.Object, result reflect.Value) error {
+ switch o.Type {
+ case hcl.ValueTypeFloat:
+ result.Set(reflect.ValueOf(o.Value.(float64)))
+ default:
+ return fmt.Errorf("%s: unknown type %v", name, o.Type)
+ }
+
+ return nil
+}
+
+func (d *decoder) decodeInt(name string, o *hcl.Object, result reflect.Value) error {
+ switch o.Type {
+ case hcl.ValueTypeInt:
+ result.Set(reflect.ValueOf(o.Value.(int)))
+ case hcl.ValueTypeString:
+ v, err := strconv.ParseInt(o.Value.(string), 0, 0)
+ if err != nil {
+ return err
+ }
+
+ result.SetInt(int64(v))
+ default:
+ return fmt.Errorf("%s: unknown type %v", name, o.Type)
+ }
+
+ return nil
+}
+
+func (d *decoder) decodeInterface(name string, o *hcl.Object, result reflect.Value) error {
+ var set reflect.Value
+ redecode := true
+
+ switch o.Type {
+ case hcl.ValueTypeObject:
+ // If we're at the root or we're directly within a slice, then we
+ // decode objects into map[string]interface{}, otherwise we decode
+ // them into lists.
+ if len(d.stack) == 0 || d.stack[len(d.stack)-1] == reflect.Slice {
+ var temp map[string]interface{}
+ tempVal := reflect.ValueOf(temp)
+ result := reflect.MakeMap(
+ reflect.MapOf(
+ reflect.TypeOf(""),
+ tempVal.Type().Elem()))
+
+ set = result
+ } else {
+ var temp []map[string]interface{}
+ tempVal := reflect.ValueOf(temp)
+ result := reflect.MakeSlice(
+ reflect.SliceOf(tempVal.Type().Elem()), 0, int(o.Len()))
+ set = result
+ }
+ case hcl.ValueTypeList:
+ var temp []interface{}
+ tempVal := reflect.ValueOf(temp)
+ result := reflect.MakeSlice(
+ reflect.SliceOf(tempVal.Type().Elem()), 0, 0)
+ set = result
+ case hcl.ValueTypeBool:
+ var result bool
+ set = reflect.Indirect(reflect.New(reflect.TypeOf(result)))
+ case hcl.ValueTypeFloat:
+ var result float64
+ set = reflect.Indirect(reflect.New(reflect.TypeOf(result)))
+ case hcl.ValueTypeInt:
+ var result int
+ set = reflect.Indirect(reflect.New(reflect.TypeOf(result)))
+ case hcl.ValueTypeString:
+ set = reflect.Indirect(reflect.New(reflect.TypeOf("")))
+ case hcl.ValueTypeNil:
+ return nil
+ default:
+ return fmt.Errorf(
+ "%s: cannot decode into interface: %T",
+ name, o)
+ }
+
+ // Set the result to what its supposed to be, then reset
+ // result so we don't reflect into this method anymore.
+ result.Set(set)
+
+ if redecode {
+ // Revisit the node so that we can use the newly instantiated
+ // thing and populate it.
+ if err := d.decode(name, o, result); err != nil {
+ return err
+ }
+ }
+
+ return nil
+}
+
+func (d *decoder) decodeMap(name string, o *hcl.Object, result reflect.Value) error {
+ if o.Type != hcl.ValueTypeObject {
+ return fmt.Errorf("%s: not an object type for map (%v)", name, o.Type)
+ }
+
+ // If we have an interface, then we can address the interface,
+ // but not the slice itself, so get the element but set the interface
+ set := result
+ if result.Kind() == reflect.Interface {
+ result = result.Elem()
+ }
+
+ resultType := result.Type()
+ resultElemType := resultType.Elem()
+ resultKeyType := resultType.Key()
+ if resultKeyType.Kind() != reflect.String {
+ return fmt.Errorf(
+ "%s: map must have string keys", name)
+ }
+
+ // Make a map if it is nil
+ resultMap := result
+ if result.IsNil() {
+ resultMap = reflect.MakeMap(
+ reflect.MapOf(resultKeyType, resultElemType))
+ }
+
+ // Go through each element and decode it.
+ for _, o := range o.Elem(false) {
+ if o.Value == nil {
+ continue
+ }
+
+ for _, o := range o.Elem(true) {
+ // Make the field name
+ fieldName := fmt.Sprintf("%s.%s", name, o.Key)
+
+ // Get the key/value as reflection values
+ key := reflect.ValueOf(o.Key)
+ val := reflect.Indirect(reflect.New(resultElemType))
+
+ // If we have a pre-existing value in the map, use that
+ oldVal := resultMap.MapIndex(key)
+ if oldVal.IsValid() {
+ val.Set(oldVal)
+ }
+
+ // Decode!
+ if err := d.decode(fieldName, o, val); err != nil {
+ return err
+ }
+
+ // Set the value on the map
+ resultMap.SetMapIndex(key, val)
+ }
+ }
+
+ // Set the final map if we can
+ set.Set(resultMap)
+ return nil
+}
+
+func (d *decoder) decodePtr(name string, o *hcl.Object, result reflect.Value) error {
+ // Create an element of the concrete (non pointer) type and decode
+ // into that. Then set the value of the pointer to this type.
+ switch o.Type {
+ case hcl.ValueTypeNil:
+ // NIL
+ default:
+ resultType := result.Type()
+ resultElemType := resultType.Elem()
+ val := reflect.New(resultElemType)
+ if err := d.decode(name, o, reflect.Indirect(val)); err != nil {
+ return err
+ }
+
+ result.Set(val)
+ }
+ return nil
+}
+
+func (d *decoder) decodeSlice(name string, o *hcl.Object, result reflect.Value) error {
+ // If we have an interface, then we can address the interface,
+ // but not the slice itself, so get the element but set the interface
+ set := result
+ if result.Kind() == reflect.Interface {
+ result = result.Elem()
+ }
+
+ // Create the slice if it isn't nil
+ resultType := result.Type()
+ resultElemType := resultType.Elem()
+ if result.IsNil() {
+ resultSliceType := reflect.SliceOf(resultElemType)
+ result = reflect.MakeSlice(
+ resultSliceType, 0, 0)
+ }
+
+ // Determine how we're doing this
+ expand := true
+ switch o.Type {
+ case hcl.ValueTypeObject:
+ expand = false
+ default:
+ // Array or anything else: we expand values and take it all
+ }
+
+ i := 0
+ for _, o := range o.Elem(expand) {
+ fieldName := fmt.Sprintf("%s[%d]", name, i)
+
+ // Decode
+ val := reflect.Indirect(reflect.New(resultElemType))
+ if err := d.decode(fieldName, o, val); err != nil {
+ return err
+ }
+
+ // Append it onto the slice
+ result = reflect.Append(result, val)
+
+ i += 1
+ }
+
+ set.Set(result)
+ return nil
+}
+
+func (d *decoder) decodeString(name string, o *hcl.Object, result reflect.Value) error {
+ switch o.Type {
+ case hcl.ValueTypeInt:
+ result.Set(reflect.ValueOf(
+ strconv.FormatInt(int64(o.Value.(int)), 10)).Convert(result.Type()))
+ case hcl.ValueTypeString:
+ result.Set(reflect.ValueOf(o.Value.(string)).Convert(result.Type()))
+ default:
+ return fmt.Errorf("%s: unknown type to string: %v", name, o.Type)
+ }
+
+ return nil
+}
+
+func (d *decoder) decodeStruct(name string, o *hcl.Object, result reflect.Value) error {
+ if o.Type != hcl.ValueTypeObject {
+ return fmt.Errorf("%s: not an object type for struct (%v)", name, o.Type)
+ }
+
+ // This slice will keep track of all the structs we'll be decoding.
+ // There can be more than one struct if there are embedded structs
+ // that are squashed.
+ structs := make([]reflect.Value, 1, 5)
+ structs[0] = result
+
+ // Compile the list of all the fields that we're going to be decoding
+ // from all the structs.
+ fields := make(map[*reflect.StructField]reflect.Value)
+ for len(structs) > 0 {
+ structVal := structs[0]
+ structs = structs[1:]
+
+ structType := structVal.Type()
+ for i := 0; i < structType.NumField(); i++ {
+ fieldType := structType.Field(i)
+
+ if fieldType.Anonymous {
+ fieldKind := fieldType.Type.Kind()
+ if fieldKind != reflect.Struct {
+ return fmt.Errorf(
+ "%s: unsupported type to struct: %s",
+ fieldType.Name, fieldKind)
+ }
+
+ // We have an embedded field. We "squash" the fields down
+ // if specified in the tag.
+ squash := false
+ tagParts := strings.Split(fieldType.Tag.Get(tagName), ",")
+ for _, tag := range tagParts[1:] {
+ if tag == "squash" {
+ squash = true
+ break
+ }
+ }
+
+ if squash {
+ structs = append(
+ structs, result.FieldByName(fieldType.Name))
+ continue
+ }
+ }
+
+ // Normal struct field, store it away
+ fields[&fieldType] = structVal.Field(i)
+ }
+ }
+
+ usedKeys := make(map[string]struct{})
+ decodedFields := make([]string, 0, len(fields))
+ decodedFieldsVal := make([]reflect.Value, 0)
+ unusedKeysVal := make([]reflect.Value, 0)
+ for fieldType, field := range fields {
+ if !field.IsValid() {
+ // This should never happen
+ panic("field is not valid")
+ }
+
+ // If we can't set the field, then it is unexported or something,
+ // and we just continue onwards.
+ if !field.CanSet() {
+ continue
+ }
+
+ fieldName := fieldType.Name
+
+ // This is whether or not we expand the object into its children
+ // later.
+ expand := false
+
+ tagValue := fieldType.Tag.Get(tagName)
+ tagParts := strings.SplitN(tagValue, ",", 2)
+ if len(tagParts) >= 2 {
+ switch tagParts[1] {
+ case "expand":
+ expand = true
+ case "decodedFields":
+ decodedFieldsVal = append(decodedFieldsVal, field)
+ continue
+ case "key":
+ field.SetString(o.Key)
+ continue
+ case "unusedKeys":
+ unusedKeysVal = append(unusedKeysVal, field)
+ continue
+ }
+ }
+
+ if tagParts[0] != "" {
+ fieldName = tagParts[0]
+ }
+
+ // Find the element matching this name
+ obj := o.Get(fieldName, true)
+ if obj == nil {
+ continue
+ }
+
+ // Track the used key
+ usedKeys[fieldName] = struct{}{}
+
+ // Create the field name and decode. We range over the elements
+ // because we actually want the value.
+ fieldName = fmt.Sprintf("%s.%s", name, fieldName)
+ for _, obj := range obj.Elem(expand) {
+ if err := d.decode(fieldName, obj, field); err != nil {
+ return err
+ }
+ }
+
+ decodedFields = append(decodedFields, fieldType.Name)
+ }
+
+ if len(decodedFieldsVal) > 0 {
+ // Sort it so that it is deterministic
+ sort.Strings(decodedFields)
+
+ for _, v := range decodedFieldsVal {
+ v.Set(reflect.ValueOf(decodedFields))
+ }
+ }
+
+ // If we want to know what keys are unused, compile that
+ if len(unusedKeysVal) > 0 {
+ /*
+ unusedKeys := make([]string, 0, int(obj.Len())-len(usedKeys))
+
+ for _, elem := range obj.Elem {
+ k := elem.Key()
+ if _, ok := usedKeys[k]; !ok {
+ unusedKeys = append(unusedKeys, k)
+ }
+ }
+
+ if len(unusedKeys) == 0 {
+ unusedKeys = nil
+ }
+
+ for _, v := range unusedKeysVal {
+ v.Set(reflect.ValueOf(unusedKeys))
+ }
+ */
+ }
+
+ return nil
+}
diff --git a/vendor/github.com/yudai/hcl/decoder_test.go b/vendor/github.com/yudai/hcl/decoder_test.go
new file mode 100644
index 0000000..a71163b
--- /dev/null
+++ b/vendor/github.com/yudai/hcl/decoder_test.go
@@ -0,0 +1,481 @@
+package hcl
+
+import (
+ "io/ioutil"
+ "path/filepath"
+ "reflect"
+ "testing"
+)
+
+func TestDecode_interface(t *testing.T) {
+ cases := []struct {
+ File string
+ Err bool
+ Out interface{}
+ }{
+ {
+ "basic.hcl",
+ false,
+ map[string]interface{}{
+ "foo": "bar",
+ "bar": "${file(\"bing/bong.txt\")}",
+ },
+ },
+ {
+ "basic_squish.hcl",
+ false,
+ map[string]interface{}{
+ "foo": "bar",
+ "bar": "${file(\"bing/bong.txt\")}",
+ "foo-bar": "baz",
+ },
+ },
+ {
+ "empty.hcl",
+ false,
+ map[string]interface{}{
+ "resource": []map[string]interface{}{
+ map[string]interface{}{
+ "foo": []map[string]interface{}{
+ map[string]interface{}{},
+ },
+ },
+ },
+ },
+ },
+ {
+ "escape.hcl",
+ false,
+ map[string]interface{}{
+ "foo": "bar\"baz\\n",
+ },
+ },
+ {
+ "float.hcl",
+ false,
+ map[string]interface{}{
+ "a": 1.02,
+ },
+ },
+ {
+ "multiline_bad.hcl",
+ false,
+ map[string]interface{}{"foo": "bar\nbaz\n"},
+ },
+ {
+ "multiline.json",
+ false,
+ map[string]interface{}{"foo": "bar\nbaz"},
+ },
+ {
+ "scientific.json",
+ false,
+ map[string]interface{}{
+ "a": 1e-10,
+ "b": 1e+10,
+ "c": 1e10,
+ "d": 1.2e-10,
+ "e": 1.2e+10,
+ "f": 1.2e10,
+ },
+ },
+ {
+ "scientific.hcl",
+ false,
+ map[string]interface{}{
+ "a": 1e-10,
+ "b": 1e+10,
+ "c": 1e10,
+ "d": 1.2e-10,
+ "e": 1.2e+10,
+ "f": 1.2e10,
+ },
+ },
+ {
+ "terraform_heroku.hcl",
+ false,
+ map[string]interface{}{
+ "name": "terraform-test-app",
+ "config_vars": []map[string]interface{}{
+ map[string]interface{}{
+ "FOO": "bar",
+ },
+ },
+ },
+ },
+ {
+ "structure_multi.hcl",
+ false,
+ map[string]interface{}{
+ "foo": []map[string]interface{}{
+ map[string]interface{}{
+ "baz": []map[string]interface{}{
+ map[string]interface{}{"key": 7},
+ },
+ },
+ map[string]interface{}{
+ "bar": []map[string]interface{}{
+ map[string]interface{}{"key": 12},
+ },
+ },
+ },
+ },
+ },
+ {
+ "structure_multi.json",
+ false,
+ map[string]interface{}{
+ "foo": []map[string]interface{}{
+ map[string]interface{}{
+ "baz": []map[string]interface{}{
+ map[string]interface{}{"key": 7},
+ },
+ "bar": []map[string]interface{}{
+ map[string]interface{}{"key": 12},
+ },
+ },
+ },
+ },
+ },
+ {
+ "structure_list.hcl",
+ false,
+ map[string]interface{}{
+ "foo": []map[string]interface{}{
+ map[string]interface{}{
+ "key": 7,
+ },
+ map[string]interface{}{
+ "key": 12,
+ },
+ },
+ },
+ },
+ {
+ "structure_list.json",
+ false,
+ map[string]interface{}{
+ "foo": []interface{}{
+ map[string]interface{}{
+ "key": 7,
+ },
+ map[string]interface{}{
+ "key": 12,
+ },
+ },
+ },
+ },
+ {
+ "structure_list_deep.json",
+ false,
+ map[string]interface{}{
+ "bar": []map[string]interface{}{
+ map[string]interface{}{
+ "foo": []map[string]interface{}{
+ map[string]interface{}{
+ "name": "terraform_example",
+ "ingress": []interface{}{
+ map[string]interface{}{
+ "from_port": 22,
+ },
+ map[string]interface{}{
+ "from_port": 80,
+ },
+ },
+ },
+ },
+ },
+ },
+ },
+ },
+
+ {
+ "nested_block_comment.hcl",
+ false,
+ map[string]interface{}{
+ "bar": "value",
+ },
+ },
+
+ {
+ "unterminated_block_comment.hcl",
+ true,
+ nil,
+ },
+ }
+
+ for _, tc := range cases {
+ d, err := ioutil.ReadFile(filepath.Join(fixtureDir, tc.File))
+ if err != nil {
+ t.Fatalf("err: %s", err)
+ }
+
+ var out interface{}
+ err = Decode(&out, string(d))
+ if (err != nil) != tc.Err {
+ t.Fatalf("Input: %s\n\nError: %s", tc.File, err)
+ }
+
+ if !reflect.DeepEqual(out, tc.Out) {
+ t.Fatalf("Input: %s\n\nActual: %#v\n\nExpected: %#v", tc.File, out, tc.Out)
+ }
+ }
+}
+
+func TestDecode_equal(t *testing.T) {
+ cases := []struct {
+ One, Two string
+ }{
+ {
+ "basic.hcl",
+ "basic.json",
+ },
+ {
+ "float.hcl",
+ "float.json",
+ },
+ /*
+ {
+ "structure.hcl",
+ "structure.json",
+ },
+ */
+ {
+ "structure.hcl",
+ "structure_flat.json",
+ },
+ {
+ "terraform_heroku.hcl",
+ "terraform_heroku.json",
+ },
+ }
+
+ for _, tc := range cases {
+ p1 := filepath.Join(fixtureDir, tc.One)
+ p2 := filepath.Join(fixtureDir, tc.Two)
+
+ d1, err := ioutil.ReadFile(p1)
+ if err != nil {
+ t.Fatalf("err: %s", err)
+ }
+
+ d2, err := ioutil.ReadFile(p2)
+ if err != nil {
+ t.Fatalf("err: %s", err)
+ }
+
+ var i1, i2 interface{}
+ err = Decode(&i1, string(d1))
+ if err != nil {
+ t.Fatalf("err: %s", err)
+ }
+
+ err = Decode(&i2, string(d2))
+ if err != nil {
+ t.Fatalf("err: %s", err)
+ }
+
+ if !reflect.DeepEqual(i1, i2) {
+ t.Fatalf(
+ "%s != %s\n\n%#v\n\n%#v",
+ tc.One, tc.Two,
+ i1, i2)
+ }
+ }
+}
+
+func TestDecode_flatMap(t *testing.T) {
+ var val map[string]map[string]string
+
+ err := Decode(&val, testReadFile(t, "structure_flatmap.hcl"))
+ if err != nil {
+ t.Fatalf("err: %s", err)
+ }
+
+ expected := map[string]map[string]string{
+ "foo": map[string]string{
+ "foo": "bar",
+ "key": "7",
+ },
+ }
+
+ if !reflect.DeepEqual(val, expected) {
+ t.Fatalf("Actual: %#v\n\nExpected: %#v", val, expected)
+ }
+}
+
+func TestDecode_structure(t *testing.T) {
+ type V struct {
+ Key int
+ Foo string
+ }
+
+ var actual V
+
+ err := Decode(&actual, testReadFile(t, "flat.hcl"))
+ if err != nil {
+ t.Fatalf("err: %s", err)
+ }
+
+ expected := V{
+ Key: 7,
+ Foo: "bar",
+ }
+
+ if !reflect.DeepEqual(actual, expected) {
+ t.Fatalf("Actual: %#v\n\nExpected: %#v", actual, expected)
+ }
+}
+
+func TestDecode_structurePtr(t *testing.T) {
+ type V struct {
+ Key int
+ Foo string
+ }
+
+ var actual *V
+
+ err := Decode(&actual, testReadFile(t, "flat.hcl"))
+ if err != nil {
+ t.Fatalf("err: %s", err)
+ }
+
+ expected := &V{
+ Key: 7,
+ Foo: "bar",
+ }
+
+ if !reflect.DeepEqual(actual, expected) {
+ t.Fatalf("Actual: %#v\n\nExpected: %#v", actual, expected)
+ }
+}
+
+func TestDecode_structureArray(t *testing.T) {
+ // This test is extracted from a failure in Consul (consul.io),
+ // hence the interesting structure naming.
+
+ type KeyPolicyType string
+
+ type KeyPolicy struct {
+ Prefix string `hcl:",key"`
+ Policy KeyPolicyType
+ }
+
+ type Policy struct {
+ Keys []KeyPolicy `hcl:"key,expand"`
+ }
+
+ expected := Policy{
+ Keys: []KeyPolicy{
+ KeyPolicy{
+ Prefix: "",
+ Policy: "read",
+ },
+ KeyPolicy{
+ Prefix: "foo/",
+ Policy: "write",
+ },
+ KeyPolicy{
+ Prefix: "foo/bar/",
+ Policy: "read",
+ },
+ KeyPolicy{
+ Prefix: "foo/bar/baz",
+ Policy: "deny",
+ },
+ },
+ }
+
+ files := []string{
+ "decode_policy.hcl",
+ "decode_policy.json",
+ }
+
+ for _, f := range files {
+ var actual Policy
+
+ err := Decode(&actual, testReadFile(t, f))
+ if err != nil {
+ t.Fatalf("err: %s", err)
+ }
+
+ if !reflect.DeepEqual(actual, expected) {
+ t.Fatalf("Input: %s\n\nActual: %#v\n\nExpected: %#v", f, actual, expected)
+ }
+ }
+}
+
+func TestDecode_structureMap(t *testing.T) {
+ // This test is extracted from a failure in Terraform (terraform.io),
+ // hence the interesting structure naming.
+
+ type hclVariable struct {
+ Default interface{}
+ Description string
+ Fields []string `hcl:",decodedFields"`
+ }
+
+ type rawConfig struct {
+ Variable map[string]hclVariable
+ }
+
+ expected := rawConfig{
+ Variable: map[string]hclVariable{
+ "foo": hclVariable{
+ Default: "bar",
+ Description: "bar",
+ Fields: []string{"Default", "Description"},
+ },
+
+ "amis": hclVariable{
+ Default: []map[string]interface{}{
+ map[string]interface{}{
+ "east": "foo",
+ },
+ },
+ Fields: []string{"Default"},
+ },
+ },
+ }
+
+ files := []string{
+ "decode_tf_variable.hcl",
+ "decode_tf_variable.json",
+ }
+
+ for _, f := range files {
+ var actual rawConfig
+
+ err := Decode(&actual, testReadFile(t, f))
+ if err != nil {
+ t.Fatalf("Input: %s\n\nerr: %s", f, err)
+ }
+
+ if !reflect.DeepEqual(actual, expected) {
+ t.Fatalf("Input: %s\n\nActual: %#v\n\nExpected: %#v", f, actual, expected)
+ }
+ }
+}
+
+func TestDecode_interfaceNonPointer(t *testing.T) {
+ var value interface{}
+ err := Decode(value, testReadFile(t, "basic_int_string.hcl"))
+ if err == nil {
+ t.Fatal("should error")
+ }
+}
+
+func TestDecode_intString(t *testing.T) {
+ var value struct {
+ Count int
+ }
+
+ err := Decode(&value, testReadFile(t, "basic_int_string.hcl"))
+ if err != nil {
+ t.Fatalf("err: %s", err)
+ }
+
+ if value.Count != 3 {
+ t.Fatalf("bad: %#v", value.Count)
+ }
+}
diff --git a/vendor/github.com/yudai/hcl/hcl.go b/vendor/github.com/yudai/hcl/hcl.go
new file mode 100644
index 0000000..14bd9ba
--- /dev/null
+++ b/vendor/github.com/yudai/hcl/hcl.go
@@ -0,0 +1,11 @@
+// hcl is a package for decoding HCL into usable Go structures.
+//
+// hcl input can come in either pure HCL format or JSON format.
+// It can be parsed into an AST, and then decoded into a structure,
+// or it can be decoded directly from a string into a structure.
+//
+// If you choose to parse HCL into a raw AST, the benefit is that you
+// can write custom visitor implementations to implement custom
+// semantic checks. By default, HCL does not perform any semantic
+// checks.
+package hcl
diff --git a/vendor/github.com/yudai/hcl/hcl/hcl_test.go b/vendor/github.com/yudai/hcl/hcl/hcl_test.go
new file mode 100644
index 0000000..dfefd28
--- /dev/null
+++ b/vendor/github.com/yudai/hcl/hcl/hcl_test.go
@@ -0,0 +1,4 @@
+package hcl
+
+// This is the directory where our test fixtures are.
+const fixtureDir = "./test-fixtures"
diff --git a/vendor/github.com/yudai/hcl/hcl/lex.go b/vendor/github.com/yudai/hcl/hcl/lex.go
new file mode 100644
index 0000000..0ef4f2c
--- /dev/null
+++ b/vendor/github.com/yudai/hcl/hcl/lex.go
@@ -0,0 +1,447 @@
+package hcl
+
+import (
+ "bytes"
+ "fmt"
+ "strconv"
+ "unicode"
+ "unicode/utf8"
+)
+
+//go:generate go tool yacc -p "hcl" parse.y
+
+// The parser expects the lexer to return 0 on EOF.
+const lexEOF = 0
+
+// The parser uses the type Lex as a lexer. It must provide
+// the methods Lex(*SymType) int and Error(string).
+type hclLex struct {
+ Input string
+
+ lastNumber bool
+ pos int
+ width int
+ col, line int
+ lastCol, lastLine int
+ err error
+}
+
+// The parser calls this method to get each new token.
+func (x *hclLex) Lex(yylval *hclSymType) int {
+ for {
+ c := x.next()
+ if c == lexEOF {
+ return lexEOF
+ }
+
+ // Ignore all whitespace except a newline which we handle
+ // specially later.
+ if unicode.IsSpace(c) {
+ x.lastNumber = false
+ continue
+ }
+
+ // Consume all comments
+ switch c {
+ case '#':
+ fallthrough
+ case '/':
+ // Starting comment
+ if !x.consumeComment(c) {
+ return lexEOF
+ }
+ continue
+ }
+
+ // If it is a number, lex the number
+ if c >= '0' && c <= '9' {
+ x.lastNumber = true
+ x.backup()
+ return x.lexNumber(yylval)
+ }
+
+ // This is a hacky way to find 'e' and lex it, but it works.
+ if x.lastNumber {
+ switch c {
+ case 'e':
+ fallthrough
+ case 'E':
+ switch x.next() {
+ case '+':
+ return EPLUS
+ case '-':
+ return EMINUS
+ default:
+ x.backup()
+ return EPLUS
+ }
+ }
+ }
+ x.lastNumber = false
+
+ switch c {
+ case '.':
+ return PERIOD
+ case '-':
+ return MINUS
+ case ',':
+ return COMMA
+ case '=':
+ return EQUAL
+ case '[':
+ return LEFTBRACKET
+ case ']':
+ return RIGHTBRACKET
+ case '{':
+ return LEFTBRACE
+ case '}':
+ return RIGHTBRACE
+ case '"':
+ return x.lexString(yylval)
+ case '<':
+ return x.lexHeredoc(yylval)
+ default:
+ x.backup()
+ return x.lexId(yylval)
+ }
+ }
+}
+
+func (x *hclLex) consumeComment(c rune) bool {
+ single := c == '#'
+ if !single {
+ c = x.next()
+ if c != '/' && c != '*' {
+ x.backup()
+ x.createErr(fmt.Sprintf("comment expected, got '%c'", c))
+ return false
+ }
+
+ single = c == '/'
+ }
+
+ nested := 1
+ for {
+ c = x.next()
+ if c == lexEOF {
+ x.backup()
+ if single {
+ // Single line comments can end with an EOF
+ return true
+ }
+
+ // Multi-line comments must end with a */
+ x.createErr(fmt.Sprintf("end of multi-line comment expected, got EOF"))
+ return false
+ }
+
+ // Single line comments continue until a '\n'
+ if single {
+ if c == '\n' {
+ return true
+ }
+
+ continue
+ }
+
+ // Multi-line comments continue until a '*/'
+ switch c {
+ case '/':
+ c = x.next()
+ if c == '*' {
+ nested++
+ } else {
+ x.backup()
+ }
+ case '*':
+ c = x.next()
+ if c == '/' {
+ return true
+ } else {
+ x.backup()
+ }
+ default:
+ // Continue
+ }
+ }
+}
+
+// lexId lexes an identifier
+func (x *hclLex) lexId(yylval *hclSymType) int {
+ var b bytes.Buffer
+ first := true
+ for {
+ c := x.next()
+ if c == lexEOF {
+ break
+ }
+
+ if !unicode.IsDigit(c) && !unicode.IsLetter(c) &&
+ c != '_' && c != '-' && c != '.' {
+ x.backup()
+
+ if first {
+ x.createErr("Invalid identifier")
+ return lexEOF
+ }
+
+ break
+ }
+
+ first = false
+ if _, err := b.WriteRune(c); err != nil {
+ return lexEOF
+ }
+ }
+
+ yylval.str = b.String()
+
+ switch yylval.str {
+ case "true":
+ yylval.b = true
+ return BOOL
+ case "false":
+ yylval.b = false
+ return BOOL
+ case "null":
+ return NULL
+ }
+
+ return IDENTIFIER
+}
+
+// lexHeredoc extracts a string from the input in heredoc format
+func (x *hclLex) lexHeredoc(yylval *hclSymType) int {
+ if x.next() != '<' {
+ x.createErr("Heredoc must start with <<")
+ return lexEOF
+ }
+
+ // Now determine the marker
+ var buf bytes.Buffer
+ for {
+ c := x.next()
+ if c == lexEOF {
+ return lexEOF
+ }
+
+ // Newline signals the end of the marker
+ if c == '\n' {
+ break
+ }
+
+ if _, err := buf.WriteRune(c); err != nil {
+ return lexEOF
+ }
+ }
+
+ marker := buf.String()
+ if marker == "" {
+ x.createErr("Heredoc must have a marker, e.g. < 0 {
+ for _, c := range cs {
+ if _, err := buf.WriteRune(c); err != nil {
+ return lexEOF
+ }
+ }
+ }
+ }
+
+ if c == lexEOF {
+ return lexEOF
+ }
+
+ // If we hit a newline, then reset to check
+ if c == '\n' {
+ check = true
+ }
+
+ if _, err := buf.WriteRune(c); err != nil {
+ return lexEOF
+ }
+ }
+
+ yylval.str = buf.String()
+ return STRING
+}
+
+// lexNumber lexes out a number
+func (x *hclLex) lexNumber(yylval *hclSymType) int {
+ var b bytes.Buffer
+ gotPeriod := false
+ for {
+ c := x.next()
+ if c == lexEOF {
+ break
+ }
+
+ if c == '.' {
+ if gotPeriod {
+ x.backup()
+ break
+ }
+
+ gotPeriod = true
+ } else if c < '0' || c > '9' {
+ x.backup()
+ break
+ }
+
+ if _, err := b.WriteRune(c); err != nil {
+ x.createErr(fmt.Sprintf("Internal error: %s", err))
+ return lexEOF
+ }
+ }
+
+ if !gotPeriod {
+ v, err := strconv.ParseInt(b.String(), 0, 0)
+ if err != nil {
+ x.createErr(fmt.Sprintf("Expected number: %s", err))
+ return lexEOF
+ }
+
+ yylval.num = int(v)
+ return NUMBER
+ }
+
+ f, err := strconv.ParseFloat(b.String(), 64)
+ if err != nil {
+ x.createErr(fmt.Sprintf("Expected float: %s", err))
+ return lexEOF
+ }
+
+ yylval.f = float64(f)
+ return FLOAT
+}
+
+// lexString extracts a string from the input
+func (x *hclLex) lexString(yylval *hclSymType) int {
+ braces := 0
+
+ var b bytes.Buffer
+ for {
+ c := x.next()
+ if c == lexEOF {
+ break
+ }
+
+ // String end
+ if c == '"' && braces == 0 {
+ break
+ }
+
+ // If we hit a newline, then its an error
+ if c == '\n' {
+ x.createErr(fmt.Sprintf("Newline before string closed"))
+ return lexEOF
+ }
+
+ // If we're escaping a quote, then escape the quote
+ if c == '\\' {
+ n := x.next()
+ switch n {
+ case '"':
+ c = n
+ case 'n':
+ c = '\n'
+ case '\\':
+ c = n
+ default:
+ x.backup()
+ }
+ }
+
+ // If we're starting into variable, mark it
+ if braces == 0 && c == '$' && x.peek() == '{' {
+ braces += 1
+
+ if _, err := b.WriteRune(c); err != nil {
+ return lexEOF
+ }
+ c = x.next()
+ } else if braces > 0 && c == '{' {
+ braces += 1
+ }
+ if braces > 0 && c == '}' {
+ braces -= 1
+ }
+
+ if _, err := b.WriteRune(c); err != nil {
+ return lexEOF
+ }
+ }
+
+ yylval.str = b.String()
+ return STRING
+}
+
+// Return the next rune for the lexer.
+func (x *hclLex) next() rune {
+ if int(x.pos) >= len(x.Input) {
+ x.width = 0
+ return lexEOF
+ }
+
+ r, w := utf8.DecodeRuneInString(x.Input[x.pos:])
+ x.width = w
+ x.pos += x.width
+
+ x.col += 1
+ if x.line == 0 {
+ x.line = 1
+ }
+ if r == '\n' {
+ x.line += 1
+ x.col = 0
+ }
+
+ return r
+}
+
+// peek returns but does not consume the next rune in the input
+func (x *hclLex) peek() rune {
+ r := x.next()
+ x.backup()
+ return r
+}
+
+// backup steps back one rune. Can only be called once per next.
+func (x *hclLex) backup() {
+ x.col -= 1
+ x.pos -= x.width
+}
+
+// createErr records the given error
+func (x *hclLex) createErr(msg string) {
+ x.err = fmt.Errorf("Line %d, column %d: %s", x.line, x.col, msg)
+}
+
+// The parser calls this method on a parse error.
+func (x *hclLex) Error(s string) {
+ x.createErr(s)
+}
diff --git a/vendor/github.com/yudai/hcl/hcl/lex_test.go b/vendor/github.com/yudai/hcl/hcl/lex_test.go
new file mode 100644
index 0000000..876a459
--- /dev/null
+++ b/vendor/github.com/yudai/hcl/hcl/lex_test.go
@@ -0,0 +1,113 @@
+package hcl
+
+import (
+ "io/ioutil"
+ "path/filepath"
+ "reflect"
+ "testing"
+)
+
+func TestLex(t *testing.T) {
+ cases := []struct {
+ Input string
+ Output []int
+ }{
+ {
+ "comment.hcl",
+ []int{IDENTIFIER, EQUAL, STRING, lexEOF},
+ },
+ {
+ "comment_single.hcl",
+ []int{lexEOF},
+ },
+ {
+ "complex_key.hcl",
+ []int{IDENTIFIER, EQUAL, STRING, lexEOF},
+ },
+ {
+ "multiple.hcl",
+ []int{
+ IDENTIFIER, EQUAL, STRING,
+ IDENTIFIER, EQUAL, NUMBER,
+ lexEOF,
+ },
+ },
+ {
+ "list.hcl",
+ []int{
+ IDENTIFIER, EQUAL, LEFTBRACKET,
+ NUMBER, COMMA, NUMBER, COMMA, STRING, COMMA, BOOL,
+ RIGHTBRACKET, lexEOF,
+ },
+ },
+ {
+ "old.hcl",
+ []int{IDENTIFIER, EQUAL, LEFTBRACE, STRING, lexEOF},
+ },
+ {
+ "structure_basic.hcl",
+ []int{
+ IDENTIFIER, LEFTBRACE,
+ IDENTIFIER, EQUAL, NUMBER,
+ STRING, EQUAL, NUMBER,
+ STRING, EQUAL, NUMBER,
+ RIGHTBRACE, lexEOF,
+ },
+ },
+ {
+ "structure.hcl",
+ []int{
+ IDENTIFIER, IDENTIFIER, STRING, LEFTBRACE,
+ IDENTIFIER, EQUAL, NUMBER,
+ IDENTIFIER, EQUAL, STRING,
+ RIGHTBRACE, lexEOF,
+ },
+ },
+ {
+ "array_comment.hcl",
+ []int{
+ IDENTIFIER, EQUAL, LEFTBRACKET,
+ STRING, COMMA,
+ STRING, COMMA,
+ RIGHTBRACKET, lexEOF,
+ },
+ },
+ {
+ "null.hcl",
+ []int{
+ IDENTIFIER, EQUAL, NULL,
+ IDENTIFIER, EQUAL, LEFTBRACKET, NUMBER, COMMA, NULL, COMMA, NUMBER, RIGHTBRACKET,
+ IDENTIFIER, LEFTBRACE, IDENTIFIER, EQUAL, NULL, RIGHTBRACE,
+ lexEOF,
+ },
+ },
+ }
+
+ for _, tc := range cases {
+ d, err := ioutil.ReadFile(filepath.Join(fixtureDir, tc.Input))
+ if err != nil {
+ t.Fatalf("err: %s", err)
+ }
+
+ l := &hclLex{Input: string(d)}
+ var actual []int
+ for {
+ token := l.Lex(new(hclSymType))
+ actual = append(actual, token)
+
+ if token == lexEOF {
+ break
+ }
+
+ if len(actual) > 500 {
+ t.Fatalf("Input:%s\n\nExausted.", tc.Input)
+ }
+ }
+
+ if !reflect.DeepEqual(actual, tc.Output) {
+ t.Fatalf(
+ "Input: %s\n\nBad: %#v\n\nExpected: %#v",
+ tc.Input, actual, tc.Output)
+ }
+ }
+}
diff --git a/vendor/github.com/yudai/hcl/hcl/object.go b/vendor/github.com/yudai/hcl/hcl/object.go
new file mode 100644
index 0000000..e7b493a
--- /dev/null
+++ b/vendor/github.com/yudai/hcl/hcl/object.go
@@ -0,0 +1,128 @@
+package hcl
+
+import (
+ "fmt"
+ "strings"
+)
+
+//go:generate stringer -type=ValueType
+
+// ValueType is an enum represnting the type of a value in
+// a LiteralNode.
+type ValueType byte
+
+const (
+ ValueTypeUnknown ValueType = iota
+ ValueTypeFloat
+ ValueTypeInt
+ ValueTypeString
+ ValueTypeBool
+ ValueTypeNil
+ ValueTypeList
+ ValueTypeObject
+)
+
+// Object represents any element of HCL: an object itself, a list,
+// a literal, etc.
+type Object struct {
+ Key string
+ Type ValueType
+ Value interface{}
+ Next *Object
+}
+
+// GoString is an implementation of the GoStringer interface.
+func (o *Object) GoString() string {
+ return fmt.Sprintf("*%#v", *o)
+}
+
+// Get gets all the objects that match the given key.
+//
+// It returns the resulting objects as a single Object structure with
+// the linked list populated.
+func (o *Object) Get(k string, insensitive bool) *Object {
+ if o.Type != ValueTypeObject {
+ return nil
+ }
+
+ for _, o := range o.Elem(true) {
+ if o.Key != k {
+ if !insensitive || !strings.EqualFold(o.Key, k) {
+ continue
+ }
+ }
+
+ return o
+ }
+
+ return nil
+}
+
+// Elem returns all the elements that are part of this object.
+func (o *Object) Elem(expand bool) []*Object {
+ if !expand {
+ result := make([]*Object, 0, 1)
+ current := o
+ for current != nil {
+ obj := *current
+ obj.Next = nil
+ result = append(result, &obj)
+
+ current = current.Next
+ }
+
+ return result
+ }
+
+ if o.Value == nil {
+ return nil
+ }
+
+ switch o.Type {
+ case ValueTypeList:
+ return o.Value.([]*Object)
+ case ValueTypeObject:
+ result := make([]*Object, 0, 5)
+ for _, obj := range o.Elem(false) {
+ result = append(result, obj.Value.([]*Object)...)
+ }
+ return result
+ default:
+ return []*Object{o}
+ }
+}
+
+// Len returns the number of objects in this object structure.
+func (o *Object) Len() (i int) {
+ current := o
+ for current != nil {
+ i += 1
+ current = current.Next
+ }
+
+ return
+}
+
+// ObjectList is a list of objects.
+type ObjectList []*Object
+
+// Flat returns a flattened list structure of the objects.
+func (l ObjectList) Flat() []*Object {
+ m := make(map[string]*Object)
+ result := make([]*Object, 0, len(l))
+ for _, obj := range l {
+ prev, ok := m[obj.Key]
+ if !ok {
+ m[obj.Key] = obj
+ result = append(result, obj)
+ continue
+ }
+
+ for prev.Next != nil {
+ prev = prev.Next
+ }
+ prev.Next = obj
+ }
+
+ return result
+}
diff --git a/vendor/github.com/yudai/hcl/hcl/parse.go b/vendor/github.com/yudai/hcl/hcl/parse.go
new file mode 100644
index 0000000..21bd2a4
--- /dev/null
+++ b/vendor/github.com/yudai/hcl/hcl/parse.go
@@ -0,0 +1,39 @@
+package hcl
+
+import (
+ "sync"
+
+ "github.com/hashicorp/go-multierror"
+)
+
+// hclErrors are the errors built up from parsing. These should not
+// be accessed directly.
+var hclErrors []error
+var hclLock sync.Mutex
+var hclResult *Object
+
+// Parse parses the given string and returns the result.
+func Parse(v string) (*Object, error) {
+ hclLock.Lock()
+ defer hclLock.Unlock()
+ hclErrors = nil
+ hclResult = nil
+
+ // Parse
+ lex := &hclLex{Input: v}
+ hclParse(lex)
+
+ // If we have an error in the lexer itself, return it
+ if lex.err != nil {
+ return nil, lex.err
+ }
+
+ // Build up the errors
+ var err error
+ if len(hclErrors) > 0 {
+ err = &multierror.Error{Errors: hclErrors}
+ hclResult = nil
+ }
+
+ return hclResult, err
+}
diff --git a/vendor/github.com/yudai/hcl/hcl/parse.y b/vendor/github.com/yudai/hcl/hcl/parse.y
new file mode 100644
index 0000000..1568f30
--- /dev/null
+++ b/vendor/github.com/yudai/hcl/hcl/parse.y
@@ -0,0 +1,281 @@
+// This is the yacc input for creating the parser for HCL.
+
+%{
+package hcl
+
+import (
+ "fmt"
+ "strconv"
+)
+
+%}
+
+%union {
+ b bool
+ f float64
+ num int
+ str string
+ obj *Object
+ objlist []*Object
+}
+
+%type float
+%type int
+%type list listitems objectlist
+%type block number object objectitem
+%type listitem
+%type blockId exp objectkey
+
+%token BOOL
+%token FLOAT
+%token NUMBER
+%token COMMA IDENTIFIER EQUAL NEWLINE STRING MINUS
+%token LEFTBRACE RIGHTBRACE LEFTBRACKET RIGHTBRACKET PERIOD
+%token EPLUS EMINUS
+%token NULL
+
+%%
+
+top:
+ {
+ hclResult = &Object{Type: ValueTypeObject}
+ }
+| objectlist
+ {
+ hclResult = &Object{
+ Type: ValueTypeObject,
+ Value: ObjectList($1).Flat(),
+ }
+ }
+
+objectlist:
+ objectitem
+ {
+ $$ = []*Object{$1}
+ }
+| objectlist objectitem
+ {
+ $$ = append($1, $2)
+ }
+
+object:
+ LEFTBRACE objectlist RIGHTBRACE
+ {
+ $$ = &Object{
+ Type: ValueTypeObject,
+ Value: ObjectList($2).Flat(),
+ }
+ }
+| LEFTBRACE RIGHTBRACE
+ {
+ $$ = &Object{
+ Type: ValueTypeObject,
+ }
+ }
+
+objectkey:
+ IDENTIFIER
+ {
+ $$ = $1
+ }
+| STRING
+ {
+ $$ = $1
+ }
+
+objectitem:
+ objectkey EQUAL number
+ {
+ $$ = $3
+ $$.Key = $1
+ }
+| objectkey EQUAL BOOL
+ {
+ $$ = &Object{
+ Key: $1,
+ Type: ValueTypeBool,
+ Value: $3,
+ }
+ }
+| objectkey EQUAL NULL
+ {
+ $$ = &Object{
+ Key: $1,
+ Type: ValueTypeNil,
+ }
+ }
+| objectkey EQUAL STRING
+ {
+ $$ = &Object{
+ Key: $1,
+ Type: ValueTypeString,
+ Value: $3,
+ }
+ }
+| objectkey EQUAL object
+ {
+ $3.Key = $1
+ $$ = $3
+ }
+| objectkey EQUAL list
+ {
+ $$ = &Object{
+ Key: $1,
+ Type: ValueTypeList,
+ Value: $3,
+ }
+ }
+| block
+ {
+ $$ = $1
+ }
+
+block:
+ blockId object
+ {
+ $2.Key = $1
+ $$ = $2
+ }
+| blockId block
+ {
+ $$ = &Object{
+ Key: $1,
+ Type: ValueTypeObject,
+ Value: []*Object{$2},
+ }
+ }
+
+blockId:
+ IDENTIFIER
+ {
+ $$ = $1
+ }
+| STRING
+ {
+ $$ = $1
+ }
+
+list:
+ LEFTBRACKET listitems RIGHTBRACKET
+ {
+ $$ = $2
+ }
+| LEFTBRACKET listitems COMMA RIGHTBRACKET
+ {
+ $$ = $2
+ }
+| LEFTBRACKET RIGHTBRACKET
+ {
+ $$ = nil
+ }
+
+listitems:
+ listitem
+ {
+ $$ = []*Object{$1}
+ }
+| listitems COMMA listitem
+ {
+ $$ = append($1, $3)
+ }
+
+listitem:
+ number
+ {
+ $$ = $1
+ }
+| STRING
+ {
+ $$ = &Object{
+ Type: ValueTypeString,
+ Value: $1,
+ }
+ }
+| BOOL
+ {
+ $$ = &Object{
+ Type: ValueTypeBool,
+ Value: $1,
+ }
+ }
+| NULL
+ {
+ $$ = &Object{
+ Type: ValueTypeNil,
+ }
+ }
+
+
+number:
+ int
+ {
+ $$ = &Object{
+ Type: ValueTypeInt,
+ Value: $1,
+ }
+ }
+| float
+ {
+ $$ = &Object{
+ Type: ValueTypeFloat,
+ Value: $1,
+ }
+ }
+| int exp
+ {
+ fs := fmt.Sprintf("%d%s", $1, $2)
+ f, err := strconv.ParseFloat(fs, 64)
+ if err != nil {
+ panic(err)
+ }
+
+ $$ = &Object{
+ Type: ValueTypeFloat,
+ Value: f,
+ }
+ }
+| float exp
+ {
+ fs := fmt.Sprintf("%f%s", $1, $2)
+ f, err := strconv.ParseFloat(fs, 64)
+ if err != nil {
+ panic(err)
+ }
+
+ $$ = &Object{
+ Type: ValueTypeFloat,
+ Value: f,
+ }
+ }
+
+int:
+ MINUS int
+ {
+ $$ = $2 * -1
+ }
+| NUMBER
+ {
+ $$ = $1
+ }
+
+float:
+ MINUS float
+ {
+ $$ = $2 * -1
+ }
+| FLOAT
+ {
+ $$ = $1
+ }
+
+exp:
+ EPLUS NUMBER
+ {
+ $$ = "e" + strconv.FormatInt(int64($2), 10)
+ }
+| EMINUS NUMBER
+ {
+ $$ = "e-" + strconv.FormatInt(int64($2), 10)
+ }
+
+%%
diff --git a/vendor/github.com/yudai/hcl/hcl/parse_test.go b/vendor/github.com/yudai/hcl/hcl/parse_test.go
new file mode 100644
index 0000000..81f94be
--- /dev/null
+++ b/vendor/github.com/yudai/hcl/hcl/parse_test.go
@@ -0,0 +1,83 @@
+package hcl
+
+import (
+ "io/ioutil"
+ "path/filepath"
+ "testing"
+)
+
+func TestParse(t *testing.T) {
+ cases := []struct {
+ Name string
+ Err bool
+ }{
+ {
+ "assign_colon.hcl",
+ true,
+ },
+ {
+ "comment.hcl",
+ false,
+ },
+ {
+ "comment_single.hcl",
+ false,
+ },
+ {
+ "empty.hcl",
+ false,
+ },
+ {
+ "list_comma.hcl",
+ false,
+ },
+ {
+ "multiple.hcl",
+ false,
+ },
+ {
+ "structure.hcl",
+ false,
+ },
+ {
+ "structure_basic.hcl",
+ false,
+ },
+ {
+ "structure_empty.hcl",
+ false,
+ },
+ {
+ "complex.hcl",
+ false,
+ },
+ {
+ "assign_deep.hcl",
+ true,
+ },
+ {
+ "types.hcl",
+ false,
+ },
+ {
+ "array_comment.hcl",
+ false,
+ },
+ {
+ "null.hcl",
+ false,
+ },
+ }
+
+ for _, tc := range cases {
+ d, err := ioutil.ReadFile(filepath.Join(fixtureDir, tc.Name))
+ if err != nil {
+ t.Fatalf("err: %s", err)
+ }
+
+ _, err = Parse(string(d))
+ if (err != nil) != tc.Err {
+ t.Fatalf("Input: %s\n\nError: %s", tc.Name, err)
+ }
+ }
+}
diff --git a/vendor/github.com/yudai/hcl/hcl/test-fixtures/array_comment.hcl b/vendor/github.com/yudai/hcl/hcl/test-fixtures/array_comment.hcl
new file mode 100644
index 0000000..78c2675
--- /dev/null
+++ b/vendor/github.com/yudai/hcl/hcl/test-fixtures/array_comment.hcl
@@ -0,0 +1,4 @@
+foo = [
+ "1",
+ "2", # comment
+]
diff --git a/vendor/github.com/yudai/hcl/hcl/test-fixtures/assign_colon.hcl b/vendor/github.com/yudai/hcl/hcl/test-fixtures/assign_colon.hcl
new file mode 100644
index 0000000..eb5a99a
--- /dev/null
+++ b/vendor/github.com/yudai/hcl/hcl/test-fixtures/assign_colon.hcl
@@ -0,0 +1,6 @@
+resource = [{
+ "foo": {
+ "bar": {},
+ "baz": [1, 2, "foo"],
+ }
+}]
diff --git a/vendor/github.com/yudai/hcl/hcl/test-fixtures/assign_deep.hcl b/vendor/github.com/yudai/hcl/hcl/test-fixtures/assign_deep.hcl
new file mode 100644
index 0000000..dd3151c
--- /dev/null
+++ b/vendor/github.com/yudai/hcl/hcl/test-fixtures/assign_deep.hcl
@@ -0,0 +1,5 @@
+resource = [{
+ foo = [{
+ bar = {}
+ }]
+}]
diff --git a/vendor/github.com/yudai/hcl/hcl/test-fixtures/comment.hcl b/vendor/github.com/yudai/hcl/hcl/test-fixtures/comment.hcl
new file mode 100644
index 0000000..1ff7f29
--- /dev/null
+++ b/vendor/github.com/yudai/hcl/hcl/test-fixtures/comment.hcl
@@ -0,0 +1,15 @@
+// Foo
+
+/* Bar */
+
+/*
+/*
+Baz
+*/
+
+# Another
+
+# Multiple
+# Lines
+
+foo = "bar"
diff --git a/vendor/github.com/yudai/hcl/hcl/test-fixtures/comment_single.hcl b/vendor/github.com/yudai/hcl/hcl/test-fixtures/comment_single.hcl
new file mode 100644
index 0000000..fec5601
--- /dev/null
+++ b/vendor/github.com/yudai/hcl/hcl/test-fixtures/comment_single.hcl
@@ -0,0 +1 @@
+# Hello
diff --git a/vendor/github.com/yudai/hcl/hcl/test-fixtures/complex.hcl b/vendor/github.com/yudai/hcl/hcl/test-fixtures/complex.hcl
new file mode 100644
index 0000000..cccb5b0
--- /dev/null
+++ b/vendor/github.com/yudai/hcl/hcl/test-fixtures/complex.hcl
@@ -0,0 +1,42 @@
+// This comes from Terraform, as a test
+variable "foo" {
+ default = "bar"
+ description = "bar"
+}
+
+provider "aws" {
+ access_key = "foo"
+ secret_key = "bar"
+}
+
+provider "do" {
+ api_key = "${var.foo}"
+}
+
+resource "aws_security_group" "firewall" {
+ count = 5
+}
+
+resource aws_instance "web" {
+ ami = "${var.foo}"
+ security_groups = [
+ "foo",
+ "${aws_security_group.firewall.foo}"
+ ]
+
+ network_interface {
+ device_index = 0
+ description = "Main network interface"
+ }
+}
+
+resource "aws_instance" "db" {
+ security_groups = "${aws_security_group.firewall.*.id}"
+ VPC = "foo"
+
+ depends_on = ["aws_instance.web"]
+}
+
+output "web_ip" {
+ value = "${aws_instance.web.private_ip}"
+}
diff --git a/vendor/github.com/yudai/hcl/hcl/test-fixtures/complex_key.hcl b/vendor/github.com/yudai/hcl/hcl/test-fixtures/complex_key.hcl
new file mode 100644
index 0000000..0007aaf
--- /dev/null
+++ b/vendor/github.com/yudai/hcl/hcl/test-fixtures/complex_key.hcl
@@ -0,0 +1 @@
+foo.bar = "baz"
diff --git a/vendor/github.com/yudai/hcl/hcl/test-fixtures/empty.hcl b/vendor/github.com/yudai/hcl/hcl/test-fixtures/empty.hcl
new file mode 100644
index 0000000..e69de29
diff --git a/vendor/github.com/yudai/hcl/hcl/test-fixtures/list.hcl b/vendor/github.com/yudai/hcl/hcl/test-fixtures/list.hcl
new file mode 100644
index 0000000..7e159b3
--- /dev/null
+++ b/vendor/github.com/yudai/hcl/hcl/test-fixtures/list.hcl
@@ -0,0 +1 @@
+foo = [1, 2, "foo", true]
diff --git a/vendor/github.com/yudai/hcl/hcl/test-fixtures/list_comma.hcl b/vendor/github.com/yudai/hcl/hcl/test-fixtures/list_comma.hcl
new file mode 100644
index 0000000..50f4218
--- /dev/null
+++ b/vendor/github.com/yudai/hcl/hcl/test-fixtures/list_comma.hcl
@@ -0,0 +1 @@
+foo = [1, 2, "foo",]
diff --git a/vendor/github.com/yudai/hcl/hcl/test-fixtures/multiple.hcl b/vendor/github.com/yudai/hcl/hcl/test-fixtures/multiple.hcl
new file mode 100644
index 0000000..029c54b
--- /dev/null
+++ b/vendor/github.com/yudai/hcl/hcl/test-fixtures/multiple.hcl
@@ -0,0 +1,2 @@
+foo = "bar"
+key = 7
diff --git a/vendor/github.com/yudai/hcl/hcl/test-fixtures/null.hcl b/vendor/github.com/yudai/hcl/hcl/test-fixtures/null.hcl
new file mode 100644
index 0000000..97797ea
--- /dev/null
+++ b/vendor/github.com/yudai/hcl/hcl/test-fixtures/null.hcl
@@ -0,0 +1,5 @@
+foo = null
+bar = [1, null, 3]
+baz {
+ foo = null
+}
diff --git a/vendor/github.com/yudai/hcl/hcl/test-fixtures/old.hcl b/vendor/github.com/yudai/hcl/hcl/test-fixtures/old.hcl
new file mode 100644
index 0000000..e9f77ca
--- /dev/null
+++ b/vendor/github.com/yudai/hcl/hcl/test-fixtures/old.hcl
@@ -0,0 +1,3 @@
+default = {
+ "eu-west-1": "ami-b1cf19c6",
+}
diff --git a/vendor/github.com/yudai/hcl/hcl/test-fixtures/structure.hcl b/vendor/github.com/yudai/hcl/hcl/test-fixtures/structure.hcl
new file mode 100644
index 0000000..92592fb
--- /dev/null
+++ b/vendor/github.com/yudai/hcl/hcl/test-fixtures/structure.hcl
@@ -0,0 +1,5 @@
+// This is a test structure for the lexer
+foo bar "baz" {
+ key = 7
+ foo = "bar"
+}
diff --git a/vendor/github.com/yudai/hcl/hcl/test-fixtures/structure_basic.hcl b/vendor/github.com/yudai/hcl/hcl/test-fixtures/structure_basic.hcl
new file mode 100644
index 0000000..7229a1f
--- /dev/null
+++ b/vendor/github.com/yudai/hcl/hcl/test-fixtures/structure_basic.hcl
@@ -0,0 +1,5 @@
+foo {
+ value = 7
+ "value" = 8
+ "complex::value" = 9
+}
diff --git a/vendor/github.com/yudai/hcl/hcl/test-fixtures/structure_empty.hcl b/vendor/github.com/yudai/hcl/hcl/test-fixtures/structure_empty.hcl
new file mode 100644
index 0000000..4d156dd
--- /dev/null
+++ b/vendor/github.com/yudai/hcl/hcl/test-fixtures/structure_empty.hcl
@@ -0,0 +1 @@
+resource "foo" "bar" {}
diff --git a/vendor/github.com/yudai/hcl/hcl/test-fixtures/types.hcl b/vendor/github.com/yudai/hcl/hcl/test-fixtures/types.hcl
new file mode 100644
index 0000000..98ea882
--- /dev/null
+++ b/vendor/github.com/yudai/hcl/hcl/test-fixtures/types.hcl
@@ -0,0 +1,8 @@
+foo = "bar"
+bar = 7
+baz = [1,2,3]
+foo = -12
+bar = 3.14159
+foo = true
+bar = false
+baz = null
diff --git a/vendor/github.com/yudai/hcl/hcl/valuetype_string.go b/vendor/github.com/yudai/hcl/hcl/valuetype_string.go
new file mode 100644
index 0000000..83b3904
--- /dev/null
+++ b/vendor/github.com/yudai/hcl/hcl/valuetype_string.go
@@ -0,0 +1,16 @@
+// generated by stringer -type=ValueType; DO NOT EDIT
+
+package hcl
+
+import "fmt"
+
+const _ValueType_name = "ValueTypeUnknownValueTypeFloatValueTypeIntValueTypeStringValueTypeBoolValueTypeNilValueTypeListValueTypeObject"
+
+var _ValueType_index = [...]uint8{0, 16, 30, 42, 57, 70, 82, 95, 110}
+
+func (i ValueType) String() string {
+ if i >= ValueType(len(_ValueType_index)-1) {
+ return fmt.Sprintf("ValueType(%d)", i)
+ }
+ return _ValueType_name[_ValueType_index[i]:_ValueType_index[i+1]]
+}
diff --git a/vendor/github.com/yudai/hcl/hcl/y.go b/vendor/github.com/yudai/hcl/hcl/y.go
new file mode 100644
index 0000000..7f5988b
--- /dev/null
+++ b/vendor/github.com/yudai/hcl/hcl/y.go
@@ -0,0 +1,790 @@
+//line parse.y:4
+package hcl
+
+import __yyfmt__ "fmt"
+
+//line parse.y:4
+import (
+ "fmt"
+ "strconv"
+)
+
+//line parse.y:13
+type hclSymType struct {
+ yys int
+ b bool
+ f float64
+ num int
+ str string
+ obj *Object
+ objlist []*Object
+}
+
+const BOOL = 57346
+const FLOAT = 57347
+const NUMBER = 57348
+const COMMA = 57349
+const IDENTIFIER = 57350
+const EQUAL = 57351
+const NEWLINE = 57352
+const STRING = 57353
+const MINUS = 57354
+const LEFTBRACE = 57355
+const RIGHTBRACE = 57356
+const LEFTBRACKET = 57357
+const RIGHTBRACKET = 57358
+const PERIOD = 57359
+const EPLUS = 57360
+const EMINUS = 57361
+const NULL = 57362
+
+var hclToknames = [...]string{
+ "$end",
+ "error",
+ "$unk",
+ "BOOL",
+ "FLOAT",
+ "NUMBER",
+ "COMMA",
+ "IDENTIFIER",
+ "EQUAL",
+ "NEWLINE",
+ "STRING",
+ "MINUS",
+ "LEFTBRACE",
+ "RIGHTBRACE",
+ "LEFTBRACKET",
+ "RIGHTBRACKET",
+ "PERIOD",
+ "EPLUS",
+ "EMINUS",
+ "NULL",
+}
+var hclStatenames = [...]string{}
+
+const hclEofCode = 1
+const hclErrCode = 2
+const hclMaxDepth = 200
+
+//line parse.y:281
+
+//line yacctab:1
+var hclExca = [...]int{
+ -1, 1,
+ 1, -1,
+ -2, 0,
+ -1, 6,
+ 9, 7,
+ -2, 18,
+ -1, 7,
+ 9, 8,
+ -2, 19,
+}
+
+const hclNprod = 39
+const hclPrivate = 57344
+
+var hclTokenNames []string
+var hclStates []string
+
+const hclLast = 69
+
+var hclAct = [...]int{
+
+ 36, 3, 22, 30, 9, 17, 27, 26, 31, 32,
+ 45, 23, 19, 25, 13, 10, 24, 39, 27, 26,
+ 6, 18, 47, 7, 38, 25, 43, 33, 41, 48,
+ 9, 46, 44, 40, 39, 27, 26, 42, 5, 1,
+ 14, 38, 25, 15, 2, 13, 35, 12, 49, 6,
+ 40, 4, 7, 27, 26, 29, 11, 37, 28, 6,
+ 25, 8, 7, 34, 21, 0, 0, 20, 16,
+}
+var hclPact = [...]int{
+
+ 51, -1000, 51, -1000, 6, -1000, -1000, -1000, 32, -1000,
+ 1, -1000, -1000, 41, -1000, -1000, -1000, -1000, -1000, -1000,
+ -1000, -1000, -10, -10, 30, 48, -1000, -1000, 12, -1000,
+ -1000, 26, 4, -1000, 15, -1000, -1000, -1000, -1000, -1000,
+ -1000, -1000, -1000, -1000, -1000, -1000, -1000, 13, -1000, -1000,
+}
+var hclPgo = [...]int{
+
+ 0, 11, 2, 64, 63, 44, 38, 57, 56, 1,
+ 0, 61, 3, 51, 39,
+}
+var hclR1 = [...]int{
+
+ 0, 14, 14, 5, 5, 8, 8, 13, 13, 9,
+ 9, 9, 9, 9, 9, 9, 6, 6, 11, 11,
+ 3, 3, 3, 4, 4, 10, 10, 10, 10, 7,
+ 7, 7, 7, 2, 2, 1, 1, 12, 12,
+}
+var hclR2 = [...]int{
+
+ 0, 0, 1, 1, 2, 3, 2, 1, 1, 3,
+ 3, 3, 3, 3, 3, 1, 2, 2, 1, 1,
+ 3, 4, 2, 1, 3, 1, 1, 1, 1, 1,
+ 1, 2, 2, 2, 1, 2, 1, 2, 2,
+}
+var hclChk = [...]int{
+
+ -1000, -14, -5, -9, -13, -6, 8, 11, -11, -9,
+ 9, -8, -6, 13, 8, 11, -7, 4, 20, 11,
+ -8, -3, -2, -1, 15, 12, 6, 5, -5, 14,
+ -12, 18, 19, -12, -4, 16, -10, -7, 11, 4,
+ 20, -2, -1, 14, 6, 6, 16, 7, 16, -10,
+}
+var hclDef = [...]int{
+
+ 1, -2, 2, 3, 0, 15, -2, -2, 0, 4,
+ 0, 16, 17, 0, 18, 19, 9, 10, 11, 12,
+ 13, 14, 29, 30, 0, 0, 34, 36, 0, 6,
+ 31, 0, 0, 32, 0, 22, 23, 25, 26, 27,
+ 28, 33, 35, 5, 37, 38, 20, 0, 21, 24,
+}
+var hclTok1 = [...]int{
+
+ 1,
+}
+var hclTok2 = [...]int{
+
+ 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
+ 12, 13, 14, 15, 16, 17, 18, 19, 20,
+}
+var hclTok3 = [...]int{
+ 0,
+}
+
+var hclErrorMessages = [...]struct {
+ state int
+ token int
+ msg string
+}{}
+
+//line yaccpar:1
+
+/* parser for yacc output */
+
+var (
+ hclDebug = 0
+ hclErrorVerbose = false
+)
+
+type hclLexer interface {
+ Lex(lval *hclSymType) int
+ Error(s string)
+}
+
+type hclParser interface {
+ Parse(hclLexer) int
+ Lookahead() int
+}
+
+type hclParserImpl struct {
+ lookahead func() int
+}
+
+func (p *hclParserImpl) Lookahead() int {
+ return p.lookahead()
+}
+
+func hclNewParser() hclParser {
+ p := &hclParserImpl{
+ lookahead: func() int { return -1 },
+ }
+ return p
+}
+
+const hclFlag = -1000
+
+func hclTokname(c int) string {
+ if c >= 1 && c-1 < len(hclToknames) {
+ if hclToknames[c-1] != "" {
+ return hclToknames[c-1]
+ }
+ }
+ return __yyfmt__.Sprintf("tok-%v", c)
+}
+
+func hclStatname(s int) string {
+ if s >= 0 && s < len(hclStatenames) {
+ if hclStatenames[s] != "" {
+ return hclStatenames[s]
+ }
+ }
+ return __yyfmt__.Sprintf("state-%v", s)
+}
+
+func hclErrorMessage(state, lookAhead int) string {
+ const TOKSTART = 4
+
+ if !hclErrorVerbose {
+ return "syntax error"
+ }
+
+ for _, e := range hclErrorMessages {
+ if e.state == state && e.token == lookAhead {
+ return "syntax error: " + e.msg
+ }
+ }
+
+ res := "syntax error: unexpected " + hclTokname(lookAhead)
+
+ // To match Bison, suggest at most four expected tokens.
+ expected := make([]int, 0, 4)
+
+ // Look for shiftable tokens.
+ base := hclPact[state]
+ for tok := TOKSTART; tok-1 < len(hclToknames); tok++ {
+ if n := base + tok; n >= 0 && n < hclLast && hclChk[hclAct[n]] == tok {
+ if len(expected) == cap(expected) {
+ return res
+ }
+ expected = append(expected, tok)
+ }
+ }
+
+ if hclDef[state] == -2 {
+ i := 0
+ for hclExca[i] != -1 || hclExca[i+1] != state {
+ i += 2
+ }
+
+ // Look for tokens that we accept or reduce.
+ for i += 2; hclExca[i] >= 0; i += 2 {
+ tok := hclExca[i]
+ if tok < TOKSTART || hclExca[i+1] == 0 {
+ continue
+ }
+ if len(expected) == cap(expected) {
+ return res
+ }
+ expected = append(expected, tok)
+ }
+
+ // If the default action is to accept or reduce, give up.
+ if hclExca[i+1] != 0 {
+ return res
+ }
+ }
+
+ for i, tok := range expected {
+ if i == 0 {
+ res += ", expecting "
+ } else {
+ res += " or "
+ }
+ res += hclTokname(tok)
+ }
+ return res
+}
+
+func hcllex1(lex hclLexer, lval *hclSymType) (char, token int) {
+ token = 0
+ char = lex.Lex(lval)
+ if char <= 0 {
+ token = hclTok1[0]
+ goto out
+ }
+ if char < len(hclTok1) {
+ token = hclTok1[char]
+ goto out
+ }
+ if char >= hclPrivate {
+ if char < hclPrivate+len(hclTok2) {
+ token = hclTok2[char-hclPrivate]
+ goto out
+ }
+ }
+ for i := 0; i < len(hclTok3); i += 2 {
+ token = hclTok3[i+0]
+ if token == char {
+ token = hclTok3[i+1]
+ goto out
+ }
+ }
+
+out:
+ if token == 0 {
+ token = hclTok2[1] /* unknown char */
+ }
+ if hclDebug >= 3 {
+ __yyfmt__.Printf("lex %s(%d)\n", hclTokname(token), uint(char))
+ }
+ return char, token
+}
+
+func hclParse(hcllex hclLexer) int {
+ return hclNewParser().Parse(hcllex)
+}
+
+func (hclrcvr *hclParserImpl) Parse(hcllex hclLexer) int {
+ var hcln int
+ var hcllval hclSymType
+ var hclVAL hclSymType
+ var hclDollar []hclSymType
+ _ = hclDollar // silence set and not used
+ hclS := make([]hclSymType, hclMaxDepth)
+
+ Nerrs := 0 /* number of errors */
+ Errflag := 0 /* error recovery flag */
+ hclstate := 0
+ hclchar := -1
+ hcltoken := -1 // hclchar translated into internal numbering
+ hclrcvr.lookahead = func() int { return hclchar }
+ defer func() {
+ // Make sure we report no lookahead when not parsing.
+ hclstate = -1
+ hclchar = -1
+ hcltoken = -1
+ }()
+ hclp := -1
+ goto hclstack
+
+ret0:
+ return 0
+
+ret1:
+ return 1
+
+hclstack:
+ /* put a state and value onto the stack */
+ if hclDebug >= 4 {
+ __yyfmt__.Printf("char %v in %v\n", hclTokname(hcltoken), hclStatname(hclstate))
+ }
+
+ hclp++
+ if hclp >= len(hclS) {
+ nyys := make([]hclSymType, len(hclS)*2)
+ copy(nyys, hclS)
+ hclS = nyys
+ }
+ hclS[hclp] = hclVAL
+ hclS[hclp].yys = hclstate
+
+hclnewstate:
+ hcln = hclPact[hclstate]
+ if hcln <= hclFlag {
+ goto hcldefault /* simple state */
+ }
+ if hclchar < 0 {
+ hclchar, hcltoken = hcllex1(hcllex, &hcllval)
+ }
+ hcln += hcltoken
+ if hcln < 0 || hcln >= hclLast {
+ goto hcldefault
+ }
+ hcln = hclAct[hcln]
+ if hclChk[hcln] == hcltoken { /* valid shift */
+ hclchar = -1
+ hcltoken = -1
+ hclVAL = hcllval
+ hclstate = hcln
+ if Errflag > 0 {
+ Errflag--
+ }
+ goto hclstack
+ }
+
+hcldefault:
+ /* default state action */
+ hcln = hclDef[hclstate]
+ if hcln == -2 {
+ if hclchar < 0 {
+ hclchar, hcltoken = hcllex1(hcllex, &hcllval)
+ }
+
+ /* look through exception table */
+ xi := 0
+ for {
+ if hclExca[xi+0] == -1 && hclExca[xi+1] == hclstate {
+ break
+ }
+ xi += 2
+ }
+ for xi += 2; ; xi += 2 {
+ hcln = hclExca[xi+0]
+ if hcln < 0 || hcln == hcltoken {
+ break
+ }
+ }
+ hcln = hclExca[xi+1]
+ if hcln < 0 {
+ goto ret0
+ }
+ }
+ if hcln == 0 {
+ /* error ... attempt to resume parsing */
+ switch Errflag {
+ case 0: /* brand new error */
+ hcllex.Error(hclErrorMessage(hclstate, hcltoken))
+ Nerrs++
+ if hclDebug >= 1 {
+ __yyfmt__.Printf("%s", hclStatname(hclstate))
+ __yyfmt__.Printf(" saw %s\n", hclTokname(hcltoken))
+ }
+ fallthrough
+
+ case 1, 2: /* incompletely recovered error ... try again */
+ Errflag = 3
+
+ /* find a state where "error" is a legal shift action */
+ for hclp >= 0 {
+ hcln = hclPact[hclS[hclp].yys] + hclErrCode
+ if hcln >= 0 && hcln < hclLast {
+ hclstate = hclAct[hcln] /* simulate a shift of "error" */
+ if hclChk[hclstate] == hclErrCode {
+ goto hclstack
+ }
+ }
+
+ /* the current p has no shift on "error", pop stack */
+ if hclDebug >= 2 {
+ __yyfmt__.Printf("error recovery pops state %d\n", hclS[hclp].yys)
+ }
+ hclp--
+ }
+ /* there is no state on the stack with an error shift ... abort */
+ goto ret1
+
+ case 3: /* no shift yet; clobber input char */
+ if hclDebug >= 2 {
+ __yyfmt__.Printf("error recovery discards %s\n", hclTokname(hcltoken))
+ }
+ if hcltoken == hclEofCode {
+ goto ret1
+ }
+ hclchar = -1
+ hcltoken = -1
+ goto hclnewstate /* try again in the same state */
+ }
+ }
+
+ /* reduction by production hcln */
+ if hclDebug >= 2 {
+ __yyfmt__.Printf("reduce %v in:\n\t%v\n", hcln, hclStatname(hclstate))
+ }
+
+ hclnt := hcln
+ hclpt := hclp
+ _ = hclpt // guard against "declared and not used"
+
+ hclp -= hclR2[hcln]
+ // hclp is now the index of $0. Perform the default action. Iff the
+ // reduced production is ε, $1 is possibly out of range.
+ if hclp+1 >= len(hclS) {
+ nyys := make([]hclSymType, len(hclS)*2)
+ copy(nyys, hclS)
+ hclS = nyys
+ }
+ hclVAL = hclS[hclp+1]
+
+ /* consult goto table to find next state */
+ hcln = hclR1[hcln]
+ hclg := hclPgo[hcln]
+ hclj := hclg + hclS[hclp].yys + 1
+
+ if hclj >= hclLast {
+ hclstate = hclAct[hclg]
+ } else {
+ hclstate = hclAct[hclj]
+ if hclChk[hclstate] != -hcln {
+ hclstate = hclAct[hclg]
+ }
+ }
+ // dummy call; replaced with literal code
+ switch hclnt {
+
+ case 1:
+ hclDollar = hclS[hclpt-0 : hclpt+1]
+ //line parse.y:40
+ {
+ hclResult = &Object{Type: ValueTypeObject}
+ }
+ case 2:
+ hclDollar = hclS[hclpt-1 : hclpt+1]
+ //line parse.y:44
+ {
+ hclResult = &Object{
+ Type: ValueTypeObject,
+ Value: ObjectList(hclDollar[1].objlist).Flat(),
+ }
+ }
+ case 3:
+ hclDollar = hclS[hclpt-1 : hclpt+1]
+ //line parse.y:53
+ {
+ hclVAL.objlist = []*Object{hclDollar[1].obj}
+ }
+ case 4:
+ hclDollar = hclS[hclpt-2 : hclpt+1]
+ //line parse.y:57
+ {
+ hclVAL.objlist = append(hclDollar[1].objlist, hclDollar[2].obj)
+ }
+ case 5:
+ hclDollar = hclS[hclpt-3 : hclpt+1]
+ //line parse.y:63
+ {
+ hclVAL.obj = &Object{
+ Type: ValueTypeObject,
+ Value: ObjectList(hclDollar[2].objlist).Flat(),
+ }
+ }
+ case 6:
+ hclDollar = hclS[hclpt-2 : hclpt+1]
+ //line parse.y:70
+ {
+ hclVAL.obj = &Object{
+ Type: ValueTypeObject,
+ }
+ }
+ case 7:
+ hclDollar = hclS[hclpt-1 : hclpt+1]
+ //line parse.y:78
+ {
+ hclVAL.str = hclDollar[1].str
+ }
+ case 8:
+ hclDollar = hclS[hclpt-1 : hclpt+1]
+ //line parse.y:82
+ {
+ hclVAL.str = hclDollar[1].str
+ }
+ case 9:
+ hclDollar = hclS[hclpt-3 : hclpt+1]
+ //line parse.y:88
+ {
+ hclVAL.obj = hclDollar[3].obj
+ hclVAL.obj.Key = hclDollar[1].str
+ }
+ case 10:
+ hclDollar = hclS[hclpt-3 : hclpt+1]
+ //line parse.y:93
+ {
+ hclVAL.obj = &Object{
+ Key: hclDollar[1].str,
+ Type: ValueTypeBool,
+ Value: hclDollar[3].b,
+ }
+ }
+ case 11:
+ hclDollar = hclS[hclpt-3 : hclpt+1]
+ //line parse.y:101
+ {
+ hclVAL.obj = &Object{
+ Key: hclDollar[1].str,
+ Type: ValueTypeNil,
+ }
+ }
+ case 12:
+ hclDollar = hclS[hclpt-3 : hclpt+1]
+ //line parse.y:108
+ {
+ hclVAL.obj = &Object{
+ Key: hclDollar[1].str,
+ Type: ValueTypeString,
+ Value: hclDollar[3].str,
+ }
+ }
+ case 13:
+ hclDollar = hclS[hclpt-3 : hclpt+1]
+ //line parse.y:116
+ {
+ hclDollar[3].obj.Key = hclDollar[1].str
+ hclVAL.obj = hclDollar[3].obj
+ }
+ case 14:
+ hclDollar = hclS[hclpt-3 : hclpt+1]
+ //line parse.y:121
+ {
+ hclVAL.obj = &Object{
+ Key: hclDollar[1].str,
+ Type: ValueTypeList,
+ Value: hclDollar[3].objlist,
+ }
+ }
+ case 15:
+ hclDollar = hclS[hclpt-1 : hclpt+1]
+ //line parse.y:129
+ {
+ hclVAL.obj = hclDollar[1].obj
+ }
+ case 16:
+ hclDollar = hclS[hclpt-2 : hclpt+1]
+ //line parse.y:135
+ {
+ hclDollar[2].obj.Key = hclDollar[1].str
+ hclVAL.obj = hclDollar[2].obj
+ }
+ case 17:
+ hclDollar = hclS[hclpt-2 : hclpt+1]
+ //line parse.y:140
+ {
+ hclVAL.obj = &Object{
+ Key: hclDollar[1].str,
+ Type: ValueTypeObject,
+ Value: []*Object{hclDollar[2].obj},
+ }
+ }
+ case 18:
+ hclDollar = hclS[hclpt-1 : hclpt+1]
+ //line parse.y:150
+ {
+ hclVAL.str = hclDollar[1].str
+ }
+ case 19:
+ hclDollar = hclS[hclpt-1 : hclpt+1]
+ //line parse.y:154
+ {
+ hclVAL.str = hclDollar[1].str
+ }
+ case 20:
+ hclDollar = hclS[hclpt-3 : hclpt+1]
+ //line parse.y:160
+ {
+ hclVAL.objlist = hclDollar[2].objlist
+ }
+ case 21:
+ hclDollar = hclS[hclpt-4 : hclpt+1]
+ //line parse.y:164
+ {
+ hclVAL.objlist = hclDollar[2].objlist
+ }
+ case 22:
+ hclDollar = hclS[hclpt-2 : hclpt+1]
+ //line parse.y:168
+ {
+ hclVAL.objlist = nil
+ }
+ case 23:
+ hclDollar = hclS[hclpt-1 : hclpt+1]
+ //line parse.y:174
+ {
+ hclVAL.objlist = []*Object{hclDollar[1].obj}
+ }
+ case 24:
+ hclDollar = hclS[hclpt-3 : hclpt+1]
+ //line parse.y:178
+ {
+ hclVAL.objlist = append(hclDollar[1].objlist, hclDollar[3].obj)
+ }
+ case 25:
+ hclDollar = hclS[hclpt-1 : hclpt+1]
+ //line parse.y:184
+ {
+ hclVAL.obj = hclDollar[1].obj
+ }
+ case 26:
+ hclDollar = hclS[hclpt-1 : hclpt+1]
+ //line parse.y:188
+ {
+ hclVAL.obj = &Object{
+ Type: ValueTypeString,
+ Value: hclDollar[1].str,
+ }
+ }
+ case 27:
+ hclDollar = hclS[hclpt-1 : hclpt+1]
+ //line parse.y:195
+ {
+ hclVAL.obj = &Object{
+ Type: ValueTypeBool,
+ Value: hclDollar[1].b,
+ }
+ }
+ case 28:
+ hclDollar = hclS[hclpt-1 : hclpt+1]
+ //line parse.y:202
+ {
+ hclVAL.obj = &Object{
+ Type: ValueTypeNil,
+ }
+ }
+ case 29:
+ hclDollar = hclS[hclpt-1 : hclpt+1]
+ //line parse.y:211
+ {
+ hclVAL.obj = &Object{
+ Type: ValueTypeInt,
+ Value: hclDollar[1].num,
+ }
+ }
+ case 30:
+ hclDollar = hclS[hclpt-1 : hclpt+1]
+ //line parse.y:218
+ {
+ hclVAL.obj = &Object{
+ Type: ValueTypeFloat,
+ Value: hclDollar[1].f,
+ }
+ }
+ case 31:
+ hclDollar = hclS[hclpt-2 : hclpt+1]
+ //line parse.y:225
+ {
+ fs := fmt.Sprintf("%d%s", hclDollar[1].num, hclDollar[2].str)
+ f, err := strconv.ParseFloat(fs, 64)
+ if err != nil {
+ panic(err)
+ }
+
+ hclVAL.obj = &Object{
+ Type: ValueTypeFloat,
+ Value: f,
+ }
+ }
+ case 32:
+ hclDollar = hclS[hclpt-2 : hclpt+1]
+ //line parse.y:238
+ {
+ fs := fmt.Sprintf("%f%s", hclDollar[1].f, hclDollar[2].str)
+ f, err := strconv.ParseFloat(fs, 64)
+ if err != nil {
+ panic(err)
+ }
+
+ hclVAL.obj = &Object{
+ Type: ValueTypeFloat,
+ Value: f,
+ }
+ }
+ case 33:
+ hclDollar = hclS[hclpt-2 : hclpt+1]
+ //line parse.y:253
+ {
+ hclVAL.num = hclDollar[2].num * -1
+ }
+ case 34:
+ hclDollar = hclS[hclpt-1 : hclpt+1]
+ //line parse.y:257
+ {
+ hclVAL.num = hclDollar[1].num
+ }
+ case 35:
+ hclDollar = hclS[hclpt-2 : hclpt+1]
+ //line parse.y:263
+ {
+ hclVAL.f = hclDollar[2].f * -1
+ }
+ case 36:
+ hclDollar = hclS[hclpt-1 : hclpt+1]
+ //line parse.y:267
+ {
+ hclVAL.f = hclDollar[1].f
+ }
+ case 37:
+ hclDollar = hclS[hclpt-2 : hclpt+1]
+ //line parse.y:273
+ {
+ hclVAL.str = "e" + strconv.FormatInt(int64(hclDollar[2].num), 10)
+ }
+ case 38:
+ hclDollar = hclS[hclpt-2 : hclpt+1]
+ //line parse.y:277
+ {
+ hclVAL.str = "e-" + strconv.FormatInt(int64(hclDollar[2].num), 10)
+ }
+ }
+ goto hclstack /* stack new state and value */
+}
diff --git a/vendor/github.com/yudai/hcl/hcl_test.go b/vendor/github.com/yudai/hcl/hcl_test.go
new file mode 100644
index 0000000..31dff7c
--- /dev/null
+++ b/vendor/github.com/yudai/hcl/hcl_test.go
@@ -0,0 +1,19 @@
+package hcl
+
+import (
+ "io/ioutil"
+ "path/filepath"
+ "testing"
+)
+
+// This is the directory where our test fixtures are.
+const fixtureDir = "./test-fixtures"
+
+func testReadFile(t *testing.T, n string) string {
+ d, err := ioutil.ReadFile(filepath.Join(fixtureDir, n))
+ if err != nil {
+ t.Fatalf("err: %s", err)
+ }
+
+ return string(d)
+}
diff --git a/vendor/github.com/yudai/hcl/json/json_test.go b/vendor/github.com/yudai/hcl/json/json_test.go
new file mode 100644
index 0000000..418582b
--- /dev/null
+++ b/vendor/github.com/yudai/hcl/json/json_test.go
@@ -0,0 +1,4 @@
+package json
+
+// This is the directory where our test fixtures are.
+const fixtureDir = "./test-fixtures"
diff --git a/vendor/github.com/yudai/hcl/json/lex.go b/vendor/github.com/yudai/hcl/json/lex.go
new file mode 100644
index 0000000..0b07e36
--- /dev/null
+++ b/vendor/github.com/yudai/hcl/json/lex.go
@@ -0,0 +1,256 @@
+package json
+
+import (
+ "bytes"
+ "fmt"
+ "strconv"
+ "unicode"
+ "unicode/utf8"
+)
+
+//go:generate go tool yacc -p "json" parse.y
+
+// This marks the end of the lexer
+const lexEOF = 0
+
+// The parser uses the type Lex as a lexer. It must provide
+// the methods Lex(*SymType) int and Error(string).
+type jsonLex struct {
+ Input string
+
+ pos int
+ width int
+ col, line int
+ err error
+}
+
+// The parser calls this method to get each new token.
+func (x *jsonLex) Lex(yylval *jsonSymType) int {
+ for {
+ c := x.next()
+ if c == lexEOF {
+ return lexEOF
+ }
+
+ // Ignore all whitespace except a newline which we handle
+ // specially later.
+ if unicode.IsSpace(c) {
+ continue
+ }
+
+ // If it is a number, lex the number
+ if c >= '0' && c <= '9' {
+ x.backup()
+ return x.lexNumber(yylval)
+ }
+
+ switch c {
+ case 'e':
+ fallthrough
+ case 'E':
+ switch x.next() {
+ case '+':
+ return EPLUS
+ case '-':
+ return EMINUS
+ default:
+ x.backup()
+ return EPLUS
+ }
+ case '.':
+ return PERIOD
+ case '-':
+ return MINUS
+ case ':':
+ return COLON
+ case ',':
+ return COMMA
+ case '[':
+ return LEFTBRACKET
+ case ']':
+ return RIGHTBRACKET
+ case '{':
+ return LEFTBRACE
+ case '}':
+ return RIGHTBRACE
+ case '"':
+ return x.lexString(yylval)
+ default:
+ x.backup()
+ return x.lexId(yylval)
+ }
+ }
+}
+
+// lexId lexes an identifier
+func (x *jsonLex) lexId(yylval *jsonSymType) int {
+ var b bytes.Buffer
+ first := true
+ for {
+ c := x.next()
+ if c == lexEOF {
+ break
+ }
+
+ if !unicode.IsDigit(c) && !unicode.IsLetter(c) && c != '_' && c != '-' {
+ x.backup()
+
+ if first {
+ x.createErr("Invalid identifier")
+ return lexEOF
+ }
+
+ break
+ }
+
+ first = false
+ if _, err := b.WriteRune(c); err != nil {
+ return lexEOF
+ }
+ }
+
+ switch v := b.String(); v {
+ case "true":
+ return TRUE
+ case "false":
+ return FALSE
+ case "null":
+ return NULL
+ default:
+ x.createErr(fmt.Sprintf("Invalid identifier: %s", v))
+ return lexEOF
+ }
+}
+
+// lexNumber lexes out a number
+func (x *jsonLex) lexNumber(yylval *jsonSymType) int {
+ var b bytes.Buffer
+ gotPeriod := false
+ for {
+ c := x.next()
+ if c == lexEOF {
+ break
+ }
+
+ if c == '.' {
+ if gotPeriod {
+ x.backup()
+ break
+ }
+
+ gotPeriod = true
+ } else if c < '0' || c > '9' {
+ x.backup()
+ break
+ }
+
+ if _, err := b.WriteRune(c); err != nil {
+ x.createErr(fmt.Sprintf("Internal error: %s", err))
+ return lexEOF
+ }
+ }
+
+ if !gotPeriod {
+ v, err := strconv.ParseInt(b.String(), 0, 0)
+ if err != nil {
+ x.createErr(fmt.Sprintf("Expected number: %s", err))
+ return lexEOF
+ }
+
+ yylval.num = int(v)
+ return NUMBER
+ }
+
+ f, err := strconv.ParseFloat(b.String(), 64)
+ if err != nil {
+ x.createErr(fmt.Sprintf("Expected float: %s", err))
+ return lexEOF
+ }
+
+ yylval.f = float64(f)
+ return FLOAT
+}
+
+// lexString extracts a string from the input
+func (x *jsonLex) lexString(yylval *jsonSymType) int {
+ var b bytes.Buffer
+ for {
+ c := x.next()
+ if c == lexEOF {
+ break
+ }
+
+ // String end
+ if c == '"' {
+ break
+ }
+
+ // If we're escaping a quote, then escape the quote
+ if c == '\\' {
+ n := x.next()
+ switch n {
+ case '"':
+ c = n
+ case 'n':
+ c = '\n'
+ case '\\':
+ c = n
+ default:
+ x.backup()
+ }
+ }
+
+ if _, err := b.WriteRune(c); err != nil {
+ return lexEOF
+ }
+ }
+
+ yylval.str = b.String()
+ return STRING
+}
+
+// Return the next rune for the lexer.
+func (x *jsonLex) next() rune {
+ if int(x.pos) >= len(x.Input) {
+ x.width = 0
+ return lexEOF
+ }
+
+ r, w := utf8.DecodeRuneInString(x.Input[x.pos:])
+ x.width = w
+ x.pos += x.width
+
+ x.col += 1
+ if x.line == 0 {
+ x.line = 1
+ }
+ if r == '\n' {
+ x.line += 1
+ x.col = 0
+ }
+
+ return r
+}
+
+// peek returns but does not consume the next rune in the input
+func (x *jsonLex) peek() rune {
+ r := x.next()
+ x.backup()
+ return r
+}
+
+// backup steps back one rune. Can only be called once per next.
+func (x *jsonLex) backup() {
+ x.col -= 1
+ x.pos -= x.width
+}
+
+// createErr records the given error
+func (x *jsonLex) createErr(msg string) {
+ x.err = fmt.Errorf("Line %d, column %d: %s", x.line, x.col, msg)
+}
+
+// The parser calls this method on a parse error.
+func (x *jsonLex) Error(s string) {
+ x.createErr(s)
+}
diff --git a/vendor/github.com/yudai/hcl/json/lex_test.go b/vendor/github.com/yudai/hcl/json/lex_test.go
new file mode 100644
index 0000000..f573fba
--- /dev/null
+++ b/vendor/github.com/yudai/hcl/json/lex_test.go
@@ -0,0 +1,78 @@
+package json
+
+import (
+ "io/ioutil"
+ "path/filepath"
+ "reflect"
+ "testing"
+)
+
+func TestLexJson(t *testing.T) {
+ cases := []struct {
+ Input string
+ Output []int
+ }{
+ {
+ "basic.json",
+ []int{
+ LEFTBRACE,
+ STRING, COLON, STRING,
+ RIGHTBRACE,
+ lexEOF,
+ },
+ },
+ {
+ "array.json",
+ []int{
+ LEFTBRACE,
+ STRING, COLON, LEFTBRACKET,
+ NUMBER, COMMA, NUMBER, COMMA, STRING,
+ RIGHTBRACKET, COMMA,
+ STRING, COLON, STRING,
+ RIGHTBRACE,
+ lexEOF,
+ },
+ },
+ {
+ "object.json",
+ []int{
+ LEFTBRACE,
+ STRING, COLON, LEFTBRACE,
+ STRING, COLON, LEFTBRACKET,
+ NUMBER, COMMA, NUMBER,
+ RIGHTBRACKET,
+ RIGHTBRACE,
+ RIGHTBRACE,
+ lexEOF,
+ },
+ },
+ }
+
+ for _, tc := range cases {
+ d, err := ioutil.ReadFile(filepath.Join(fixtureDir, tc.Input))
+ if err != nil {
+ t.Fatalf("err: %s", err)
+ }
+
+ l := &jsonLex{Input: string(d)}
+ var actual []int
+ for {
+ token := l.Lex(new(jsonSymType))
+ actual = append(actual, token)
+
+ if token == lexEOF {
+ break
+ }
+
+ if len(actual) > 500 {
+ t.Fatalf("Input:%s\n\nExausted.", tc.Input)
+ }
+ }
+
+ if !reflect.DeepEqual(actual, tc.Output) {
+ t.Fatalf(
+ "Input: %s\n\nBad: %#v\n\nExpected: %#v",
+ tc.Input, actual, tc.Output)
+ }
+ }
+}
diff --git a/vendor/github.com/yudai/hcl/json/parse.go b/vendor/github.com/yudai/hcl/json/parse.go
new file mode 100644
index 0000000..599ea15
--- /dev/null
+++ b/vendor/github.com/yudai/hcl/json/parse.go
@@ -0,0 +1,40 @@
+package json
+
+import (
+ "sync"
+
+ "github.com/yudai/hcl/hcl"
+ "github.com/hashicorp/go-multierror"
+)
+
+// jsonErrors are the errors built up from parsing. These should not
+// be accessed directly.
+var jsonErrors []error
+var jsonLock sync.Mutex
+var jsonResult *hcl.Object
+
+// Parse parses the given string and returns the result.
+func Parse(v string) (*hcl.Object, error) {
+ jsonLock.Lock()
+ defer jsonLock.Unlock()
+ jsonErrors = nil
+ jsonResult = nil
+
+ // Parse
+ lex := &jsonLex{Input: v}
+ jsonParse(lex)
+
+ // If we have an error in the lexer itself, return it
+ if lex.err != nil {
+ return nil, lex.err
+ }
+
+ // Build up the errors
+ var err error
+ if len(jsonErrors) > 0 {
+ err = &multierror.Error{Errors: jsonErrors}
+ jsonResult = nil
+ }
+
+ return jsonResult, err
+}
diff --git a/vendor/github.com/yudai/hcl/json/parse.y b/vendor/github.com/yudai/hcl/json/parse.y
new file mode 100644
index 0000000..237e4ae
--- /dev/null
+++ b/vendor/github.com/yudai/hcl/json/parse.y
@@ -0,0 +1,210 @@
+// This is the yacc input for creating the parser for HCL JSON.
+
+%{
+package json
+
+import (
+ "fmt"
+ "strconv"
+
+ "github.com/hashicorp/hcl/hcl"
+)
+
+%}
+
+%union {
+ f float64
+ num int
+ str string
+ obj *hcl.Object
+ objlist []*hcl.Object
+}
+
+%type float
+%type int
+%type number object pair value
+%type array elements members
+%type exp
+
+%token FLOAT
+%token NUMBER
+%token COLON COMMA IDENTIFIER EQUAL NEWLINE STRING
+%token LEFTBRACE RIGHTBRACE LEFTBRACKET RIGHTBRACKET
+%token TRUE FALSE NULL MINUS PERIOD EPLUS EMINUS
+
+%%
+
+top:
+ object
+ {
+ jsonResult = $1
+ }
+
+object:
+ LEFTBRACE members RIGHTBRACE
+ {
+ $$ = &hcl.Object{
+ Type: hcl.ValueTypeObject,
+ Value: hcl.ObjectList($2).Flat(),
+ }
+ }
+| LEFTBRACE RIGHTBRACE
+ {
+ $$ = &hcl.Object{Type: hcl.ValueTypeObject}
+ }
+
+members:
+ pair
+ {
+ $$ = []*hcl.Object{$1}
+ }
+| members COMMA pair
+ {
+ $$ = append($1, $3)
+ }
+
+pair:
+ STRING COLON value
+ {
+ $3.Key = $1
+ $$ = $3
+ }
+
+value:
+ STRING
+ {
+ $$ = &hcl.Object{
+ Type: hcl.ValueTypeString,
+ Value: $1,
+ }
+ }
+| number
+ {
+ $$ = $1
+ }
+| object
+ {
+ $$ = $1
+ }
+| array
+ {
+ $$ = &hcl.Object{
+ Type: hcl.ValueTypeList,
+ Value: $1,
+ }
+ }
+| TRUE
+ {
+ $$ = &hcl.Object{
+ Type: hcl.ValueTypeBool,
+ Value: true,
+ }
+ }
+| FALSE
+ {
+ $$ = &hcl.Object{
+ Type: hcl.ValueTypeBool,
+ Value: false,
+ }
+ }
+| NULL
+ {
+ $$ = &hcl.Object{
+ Type: hcl.ValueTypeNil,
+ Value: nil,
+ }
+ }
+
+array:
+ LEFTBRACKET RIGHTBRACKET
+ {
+ $$ = nil
+ }
+| LEFTBRACKET elements RIGHTBRACKET
+ {
+ $$ = $2
+ }
+
+elements:
+ value
+ {
+ $$ = []*hcl.Object{$1}
+ }
+| elements COMMA value
+ {
+ $$ = append($1, $3)
+ }
+
+number:
+ int
+ {
+ $$ = &hcl.Object{
+ Type: hcl.ValueTypeInt,
+ Value: $1,
+ }
+ }
+| float
+ {
+ $$ = &hcl.Object{
+ Type: hcl.ValueTypeFloat,
+ Value: $1,
+ }
+ }
+| int exp
+ {
+ fs := fmt.Sprintf("%d%s", $1, $2)
+ f, err := strconv.ParseFloat(fs, 64)
+ if err != nil {
+ panic(err)
+ }
+
+ $$ = &hcl.Object{
+ Type: hcl.ValueTypeFloat,
+ Value: f,
+ }
+ }
+| float exp
+ {
+ fs := fmt.Sprintf("%f%s", $1, $2)
+ f, err := strconv.ParseFloat(fs, 64)
+ if err != nil {
+ panic(err)
+ }
+
+ $$ = &hcl.Object{
+ Type: hcl.ValueTypeFloat,
+ Value: f,
+ }
+ }
+
+int:
+ MINUS int
+ {
+ $$ = $2 * -1
+ }
+| NUMBER
+ {
+ $$ = $1
+ }
+
+float:
+ MINUS float
+ {
+ $$ = $2 * -1
+ }
+| FLOAT
+ {
+ $$ = $1
+ }
+
+exp:
+ EPLUS NUMBER
+ {
+ $$ = "e" + strconv.FormatInt(int64($2), 10)
+ }
+| EMINUS NUMBER
+ {
+ $$ = "e-" + strconv.FormatInt(int64($2), 10)
+ }
+
+%%
diff --git a/vendor/github.com/yudai/hcl/json/parse_test.go b/vendor/github.com/yudai/hcl/json/parse_test.go
new file mode 100644
index 0000000..806acb9
--- /dev/null
+++ b/vendor/github.com/yudai/hcl/json/parse_test.go
@@ -0,0 +1,43 @@
+package json
+
+import (
+ "io/ioutil"
+ "path/filepath"
+ "testing"
+)
+
+func TestParse(t *testing.T) {
+ cases := []struct {
+ Name string
+ Err bool
+ }{
+ {
+ "basic.json",
+ false,
+ },
+ {
+ "object.json",
+ false,
+ },
+ {
+ "array.json",
+ false,
+ },
+ {
+ "types.json",
+ false,
+ },
+ }
+
+ for _, tc := range cases {
+ d, err := ioutil.ReadFile(filepath.Join(fixtureDir, tc.Name))
+ if err != nil {
+ t.Fatalf("err: %s", err)
+ }
+
+ _, err = Parse(string(d))
+ if (err != nil) != tc.Err {
+ t.Fatalf("Input: %s\n\nError: %s", tc.Name, err)
+ }
+ }
+}
diff --git a/vendor/github.com/yudai/hcl/json/test-fixtures/array.json b/vendor/github.com/yudai/hcl/json/test-fixtures/array.json
new file mode 100644
index 0000000..e320f17
--- /dev/null
+++ b/vendor/github.com/yudai/hcl/json/test-fixtures/array.json
@@ -0,0 +1,4 @@
+{
+ "foo": [1, 2, "bar"],
+ "bar": "baz"
+}
diff --git a/vendor/github.com/yudai/hcl/json/test-fixtures/basic.json b/vendor/github.com/yudai/hcl/json/test-fixtures/basic.json
new file mode 100644
index 0000000..b54bde9
--- /dev/null
+++ b/vendor/github.com/yudai/hcl/json/test-fixtures/basic.json
@@ -0,0 +1,3 @@
+{
+ "foo": "bar"
+}
diff --git a/vendor/github.com/yudai/hcl/json/test-fixtures/object.json b/vendor/github.com/yudai/hcl/json/test-fixtures/object.json
new file mode 100644
index 0000000..72168a3
--- /dev/null
+++ b/vendor/github.com/yudai/hcl/json/test-fixtures/object.json
@@ -0,0 +1,5 @@
+{
+ "foo": {
+ "bar": [1,2]
+ }
+}
diff --git a/vendor/github.com/yudai/hcl/json/test-fixtures/types.json b/vendor/github.com/yudai/hcl/json/test-fixtures/types.json
new file mode 100644
index 0000000..9a142a6
--- /dev/null
+++ b/vendor/github.com/yudai/hcl/json/test-fixtures/types.json
@@ -0,0 +1,10 @@
+{
+ "foo": "bar",
+ "bar": 7,
+ "baz": [1,2,3],
+ "foo": -12,
+ "bar": 3.14159,
+ "foo": true,
+ "bar": false,
+ "foo": null
+}
diff --git a/vendor/github.com/yudai/hcl/json/y.go b/vendor/github.com/yudai/hcl/json/y.go
new file mode 100644
index 0000000..edc4438
--- /dev/null
+++ b/vendor/github.com/yudai/hcl/json/y.go
@@ -0,0 +1,699 @@
+//line parse.y:3
+package json
+
+import __yyfmt__ "fmt"
+
+//line parse.y:5
+import (
+ "fmt"
+ "strconv"
+
+ "github.com/yudai/hcl/hcl"
+)
+
+//line parse.y:15
+type jsonSymType struct {
+ yys int
+ f float64
+ num int
+ str string
+ obj *hcl.Object
+ objlist []*hcl.Object
+}
+
+const FLOAT = 57346
+const NUMBER = 57347
+const COLON = 57348
+const COMMA = 57349
+const IDENTIFIER = 57350
+const EQUAL = 57351
+const NEWLINE = 57352
+const STRING = 57353
+const LEFTBRACE = 57354
+const RIGHTBRACE = 57355
+const LEFTBRACKET = 57356
+const RIGHTBRACKET = 57357
+const TRUE = 57358
+const FALSE = 57359
+const NULL = 57360
+const MINUS = 57361
+const PERIOD = 57362
+const EPLUS = 57363
+const EMINUS = 57364
+
+var jsonToknames = [...]string{
+ "$end",
+ "error",
+ "$unk",
+ "FLOAT",
+ "NUMBER",
+ "COLON",
+ "COMMA",
+ "IDENTIFIER",
+ "EQUAL",
+ "NEWLINE",
+ "STRING",
+ "LEFTBRACE",
+ "RIGHTBRACE",
+ "LEFTBRACKET",
+ "RIGHTBRACKET",
+ "TRUE",
+ "FALSE",
+ "NULL",
+ "MINUS",
+ "PERIOD",
+ "EPLUS",
+ "EMINUS",
+}
+var jsonStatenames = [...]string{}
+
+const jsonEofCode = 1
+const jsonErrCode = 2
+const jsonMaxDepth = 200
+
+//line parse.y:210
+
+//line yacctab:1
+var jsonExca = [...]int{
+ -1, 1,
+ 1, -1,
+ -2, 0,
+}
+
+const jsonNprod = 28
+const jsonPrivate = 57344
+
+var jsonTokenNames []string
+var jsonStates []string
+
+const jsonLast = 53
+
+var jsonAct = [...]int{
+
+ 12, 25, 24, 3, 20, 27, 28, 7, 13, 3,
+ 21, 22, 30, 17, 18, 19, 23, 25, 24, 26,
+ 25, 24, 36, 32, 13, 3, 10, 22, 33, 17,
+ 18, 19, 23, 35, 34, 23, 38, 9, 7, 39,
+ 5, 29, 6, 8, 37, 15, 2, 1, 4, 31,
+ 16, 14, 11,
+}
+var jsonPact = [...]int{
+
+ -9, -1000, -1000, 27, 30, -1000, -1000, 20, -1000, -4,
+ 13, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
+ -16, -16, -3, 16, -1000, -1000, -1000, 28, 17, -1000,
+ -1000, 29, -1000, -1000, -1000, -1000, -1000, -1000, 13, -1000,
+}
+var jsonPgo = [...]int{
+
+ 0, 10, 4, 51, 45, 42, 0, 50, 49, 48,
+ 19, 47,
+}
+var jsonR1 = [...]int{
+
+ 0, 11, 4, 4, 9, 9, 5, 6, 6, 6,
+ 6, 6, 6, 6, 7, 7, 8, 8, 3, 3,
+ 3, 3, 2, 2, 1, 1, 10, 10,
+}
+var jsonR2 = [...]int{
+
+ 0, 1, 3, 2, 1, 3, 3, 1, 1, 1,
+ 1, 1, 1, 1, 2, 3, 1, 3, 1, 1,
+ 2, 2, 2, 1, 2, 1, 2, 2,
+}
+var jsonChk = [...]int{
+
+ -1000, -11, -4, 12, -9, 13, -5, 11, 13, 7,
+ 6, -5, -6, 11, -3, -4, -7, 16, 17, 18,
+ -2, -1, 14, 19, 5, 4, -10, 21, 22, -10,
+ 15, -8, -6, -2, -1, 5, 5, 15, 7, -6,
+}
+var jsonDef = [...]int{
+
+ 0, -2, 1, 0, 0, 3, 4, 0, 2, 0,
+ 0, 5, 6, 7, 8, 9, 10, 11, 12, 13,
+ 18, 19, 0, 0, 23, 25, 20, 0, 0, 21,
+ 14, 0, 16, 22, 24, 26, 27, 15, 0, 17,
+}
+var jsonTok1 = [...]int{
+
+ 1,
+}
+var jsonTok2 = [...]int{
+
+ 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
+ 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
+ 22,
+}
+var jsonTok3 = [...]int{
+ 0,
+}
+
+var jsonErrorMessages = [...]struct {
+ state int
+ token int
+ msg string
+}{}
+
+//line yaccpar:1
+
+/* parser for yacc output */
+
+var (
+ jsonDebug = 0
+ jsonErrorVerbose = false
+)
+
+type jsonLexer interface {
+ Lex(lval *jsonSymType) int
+ Error(s string)
+}
+
+type jsonParser interface {
+ Parse(jsonLexer) int
+ Lookahead() int
+}
+
+type jsonParserImpl struct {
+ lookahead func() int
+}
+
+func (p *jsonParserImpl) Lookahead() int {
+ return p.lookahead()
+}
+
+func jsonNewParser() jsonParser {
+ p := &jsonParserImpl{
+ lookahead: func() int { return -1 },
+ }
+ return p
+}
+
+const jsonFlag = -1000
+
+func jsonTokname(c int) string {
+ if c >= 1 && c-1 < len(jsonToknames) {
+ if jsonToknames[c-1] != "" {
+ return jsonToknames[c-1]
+ }
+ }
+ return __yyfmt__.Sprintf("tok-%v", c)
+}
+
+func jsonStatname(s int) string {
+ if s >= 0 && s < len(jsonStatenames) {
+ if jsonStatenames[s] != "" {
+ return jsonStatenames[s]
+ }
+ }
+ return __yyfmt__.Sprintf("state-%v", s)
+}
+
+func jsonErrorMessage(state, lookAhead int) string {
+ const TOKSTART = 4
+
+ if !jsonErrorVerbose {
+ return "syntax error"
+ }
+
+ for _, e := range jsonErrorMessages {
+ if e.state == state && e.token == lookAhead {
+ return "syntax error: " + e.msg
+ }
+ }
+
+ res := "syntax error: unexpected " + jsonTokname(lookAhead)
+
+ // To match Bison, suggest at most four expected tokens.
+ expected := make([]int, 0, 4)
+
+ // Look for shiftable tokens.
+ base := jsonPact[state]
+ for tok := TOKSTART; tok-1 < len(jsonToknames); tok++ {
+ if n := base + tok; n >= 0 && n < jsonLast && jsonChk[jsonAct[n]] == tok {
+ if len(expected) == cap(expected) {
+ return res
+ }
+ expected = append(expected, tok)
+ }
+ }
+
+ if jsonDef[state] == -2 {
+ i := 0
+ for jsonExca[i] != -1 || jsonExca[i+1] != state {
+ i += 2
+ }
+
+ // Look for tokens that we accept or reduce.
+ for i += 2; jsonExca[i] >= 0; i += 2 {
+ tok := jsonExca[i]
+ if tok < TOKSTART || jsonExca[i+1] == 0 {
+ continue
+ }
+ if len(expected) == cap(expected) {
+ return res
+ }
+ expected = append(expected, tok)
+ }
+
+ // If the default action is to accept or reduce, give up.
+ if jsonExca[i+1] != 0 {
+ return res
+ }
+ }
+
+ for i, tok := range expected {
+ if i == 0 {
+ res += ", expecting "
+ } else {
+ res += " or "
+ }
+ res += jsonTokname(tok)
+ }
+ return res
+}
+
+func jsonlex1(lex jsonLexer, lval *jsonSymType) (char, token int) {
+ token = 0
+ char = lex.Lex(lval)
+ if char <= 0 {
+ token = jsonTok1[0]
+ goto out
+ }
+ if char < len(jsonTok1) {
+ token = jsonTok1[char]
+ goto out
+ }
+ if char >= jsonPrivate {
+ if char < jsonPrivate+len(jsonTok2) {
+ token = jsonTok2[char-jsonPrivate]
+ goto out
+ }
+ }
+ for i := 0; i < len(jsonTok3); i += 2 {
+ token = jsonTok3[i+0]
+ if token == char {
+ token = jsonTok3[i+1]
+ goto out
+ }
+ }
+
+out:
+ if token == 0 {
+ token = jsonTok2[1] /* unknown char */
+ }
+ if jsonDebug >= 3 {
+ __yyfmt__.Printf("lex %s(%d)\n", jsonTokname(token), uint(char))
+ }
+ return char, token
+}
+
+func jsonParse(jsonlex jsonLexer) int {
+ return jsonNewParser().Parse(jsonlex)
+}
+
+func (jsonrcvr *jsonParserImpl) Parse(jsonlex jsonLexer) int {
+ var jsonn int
+ var jsonlval jsonSymType
+ var jsonVAL jsonSymType
+ var jsonDollar []jsonSymType
+ _ = jsonDollar // silence set and not used
+ jsonS := make([]jsonSymType, jsonMaxDepth)
+
+ Nerrs := 0 /* number of errors */
+ Errflag := 0 /* error recovery flag */
+ jsonstate := 0
+ jsonchar := -1
+ jsontoken := -1 // jsonchar translated into internal numbering
+ jsonrcvr.lookahead = func() int { return jsonchar }
+ defer func() {
+ // Make sure we report no lookahead when not parsing.
+ jsonstate = -1
+ jsonchar = -1
+ jsontoken = -1
+ }()
+ jsonp := -1
+ goto jsonstack
+
+ret0:
+ return 0
+
+ret1:
+ return 1
+
+jsonstack:
+ /* put a state and value onto the stack */
+ if jsonDebug >= 4 {
+ __yyfmt__.Printf("char %v in %v\n", jsonTokname(jsontoken), jsonStatname(jsonstate))
+ }
+
+ jsonp++
+ if jsonp >= len(jsonS) {
+ nyys := make([]jsonSymType, len(jsonS)*2)
+ copy(nyys, jsonS)
+ jsonS = nyys
+ }
+ jsonS[jsonp] = jsonVAL
+ jsonS[jsonp].yys = jsonstate
+
+jsonnewstate:
+ jsonn = jsonPact[jsonstate]
+ if jsonn <= jsonFlag {
+ goto jsondefault /* simple state */
+ }
+ if jsonchar < 0 {
+ jsonchar, jsontoken = jsonlex1(jsonlex, &jsonlval)
+ }
+ jsonn += jsontoken
+ if jsonn < 0 || jsonn >= jsonLast {
+ goto jsondefault
+ }
+ jsonn = jsonAct[jsonn]
+ if jsonChk[jsonn] == jsontoken { /* valid shift */
+ jsonchar = -1
+ jsontoken = -1
+ jsonVAL = jsonlval
+ jsonstate = jsonn
+ if Errflag > 0 {
+ Errflag--
+ }
+ goto jsonstack
+ }
+
+jsondefault:
+ /* default state action */
+ jsonn = jsonDef[jsonstate]
+ if jsonn == -2 {
+ if jsonchar < 0 {
+ jsonchar, jsontoken = jsonlex1(jsonlex, &jsonlval)
+ }
+
+ /* look through exception table */
+ xi := 0
+ for {
+ if jsonExca[xi+0] == -1 && jsonExca[xi+1] == jsonstate {
+ break
+ }
+ xi += 2
+ }
+ for xi += 2; ; xi += 2 {
+ jsonn = jsonExca[xi+0]
+ if jsonn < 0 || jsonn == jsontoken {
+ break
+ }
+ }
+ jsonn = jsonExca[xi+1]
+ if jsonn < 0 {
+ goto ret0
+ }
+ }
+ if jsonn == 0 {
+ /* error ... attempt to resume parsing */
+ switch Errflag {
+ case 0: /* brand new error */
+ jsonlex.Error(jsonErrorMessage(jsonstate, jsontoken))
+ Nerrs++
+ if jsonDebug >= 1 {
+ __yyfmt__.Printf("%s", jsonStatname(jsonstate))
+ __yyfmt__.Printf(" saw %s\n", jsonTokname(jsontoken))
+ }
+ fallthrough
+
+ case 1, 2: /* incompletely recovered error ... try again */
+ Errflag = 3
+
+ /* find a state where "error" is a legal shift action */
+ for jsonp >= 0 {
+ jsonn = jsonPact[jsonS[jsonp].yys] + jsonErrCode
+ if jsonn >= 0 && jsonn < jsonLast {
+ jsonstate = jsonAct[jsonn] /* simulate a shift of "error" */
+ if jsonChk[jsonstate] == jsonErrCode {
+ goto jsonstack
+ }
+ }
+
+ /* the current p has no shift on "error", pop stack */
+ if jsonDebug >= 2 {
+ __yyfmt__.Printf("error recovery pops state %d\n", jsonS[jsonp].yys)
+ }
+ jsonp--
+ }
+ /* there is no state on the stack with an error shift ... abort */
+ goto ret1
+
+ case 3: /* no shift yet; clobber input char */
+ if jsonDebug >= 2 {
+ __yyfmt__.Printf("error recovery discards %s\n", jsonTokname(jsontoken))
+ }
+ if jsontoken == jsonEofCode {
+ goto ret1
+ }
+ jsonchar = -1
+ jsontoken = -1
+ goto jsonnewstate /* try again in the same state */
+ }
+ }
+
+ /* reduction by production jsonn */
+ if jsonDebug >= 2 {
+ __yyfmt__.Printf("reduce %v in:\n\t%v\n", jsonn, jsonStatname(jsonstate))
+ }
+
+ jsonnt := jsonn
+ jsonpt := jsonp
+ _ = jsonpt // guard against "declared and not used"
+
+ jsonp -= jsonR2[jsonn]
+ // jsonp is now the index of $0. Perform the default action. Iff the
+ // reduced production is ε, $1 is possibly out of range.
+ if jsonp+1 >= len(jsonS) {
+ nyys := make([]jsonSymType, len(jsonS)*2)
+ copy(nyys, jsonS)
+ jsonS = nyys
+ }
+ jsonVAL = jsonS[jsonp+1]
+
+ /* consult goto table to find next state */
+ jsonn = jsonR1[jsonn]
+ jsong := jsonPgo[jsonn]
+ jsonj := jsong + jsonS[jsonp].yys + 1
+
+ if jsonj >= jsonLast {
+ jsonstate = jsonAct[jsong]
+ } else {
+ jsonstate = jsonAct[jsonj]
+ if jsonChk[jsonstate] != -jsonn {
+ jsonstate = jsonAct[jsong]
+ }
+ }
+ // dummy call; replaced with literal code
+ switch jsonnt {
+
+ case 1:
+ jsonDollar = jsonS[jsonpt-1 : jsonpt+1]
+ //line parse.y:39
+ {
+ jsonResult = jsonDollar[1].obj
+ }
+ case 2:
+ jsonDollar = jsonS[jsonpt-3 : jsonpt+1]
+ //line parse.y:45
+ {
+ jsonVAL.obj = &hcl.Object{
+ Type: hcl.ValueTypeObject,
+ Value: hcl.ObjectList(jsonDollar[2].objlist).Flat(),
+ }
+ }
+ case 3:
+ jsonDollar = jsonS[jsonpt-2 : jsonpt+1]
+ //line parse.y:52
+ {
+ jsonVAL.obj = &hcl.Object{Type: hcl.ValueTypeObject}
+ }
+ case 4:
+ jsonDollar = jsonS[jsonpt-1 : jsonpt+1]
+ //line parse.y:58
+ {
+ jsonVAL.objlist = []*hcl.Object{jsonDollar[1].obj}
+ }
+ case 5:
+ jsonDollar = jsonS[jsonpt-3 : jsonpt+1]
+ //line parse.y:62
+ {
+ jsonVAL.objlist = append(jsonDollar[1].objlist, jsonDollar[3].obj)
+ }
+ case 6:
+ jsonDollar = jsonS[jsonpt-3 : jsonpt+1]
+ //line parse.y:68
+ {
+ jsonDollar[3].obj.Key = jsonDollar[1].str
+ jsonVAL.obj = jsonDollar[3].obj
+ }
+ case 7:
+ jsonDollar = jsonS[jsonpt-1 : jsonpt+1]
+ //line parse.y:75
+ {
+ jsonVAL.obj = &hcl.Object{
+ Type: hcl.ValueTypeString,
+ Value: jsonDollar[1].str,
+ }
+ }
+ case 8:
+ jsonDollar = jsonS[jsonpt-1 : jsonpt+1]
+ //line parse.y:82
+ {
+ jsonVAL.obj = jsonDollar[1].obj
+ }
+ case 9:
+ jsonDollar = jsonS[jsonpt-1 : jsonpt+1]
+ //line parse.y:86
+ {
+ jsonVAL.obj = jsonDollar[1].obj
+ }
+ case 10:
+ jsonDollar = jsonS[jsonpt-1 : jsonpt+1]
+ //line parse.y:90
+ {
+ jsonVAL.obj = &hcl.Object{
+ Type: hcl.ValueTypeList,
+ Value: jsonDollar[1].objlist,
+ }
+ }
+ case 11:
+ jsonDollar = jsonS[jsonpt-1 : jsonpt+1]
+ //line parse.y:97
+ {
+ jsonVAL.obj = &hcl.Object{
+ Type: hcl.ValueTypeBool,
+ Value: true,
+ }
+ }
+ case 12:
+ jsonDollar = jsonS[jsonpt-1 : jsonpt+1]
+ //line parse.y:104
+ {
+ jsonVAL.obj = &hcl.Object{
+ Type: hcl.ValueTypeBool,
+ Value: false,
+ }
+ }
+ case 13:
+ jsonDollar = jsonS[jsonpt-1 : jsonpt+1]
+ //line parse.y:111
+ {
+ jsonVAL.obj = &hcl.Object{
+ Type: hcl.ValueTypeNil,
+ Value: nil,
+ }
+ }
+ case 14:
+ jsonDollar = jsonS[jsonpt-2 : jsonpt+1]
+ //line parse.y:120
+ {
+ jsonVAL.objlist = nil
+ }
+ case 15:
+ jsonDollar = jsonS[jsonpt-3 : jsonpt+1]
+ //line parse.y:124
+ {
+ jsonVAL.objlist = jsonDollar[2].objlist
+ }
+ case 16:
+ jsonDollar = jsonS[jsonpt-1 : jsonpt+1]
+ //line parse.y:130
+ {
+ jsonVAL.objlist = []*hcl.Object{jsonDollar[1].obj}
+ }
+ case 17:
+ jsonDollar = jsonS[jsonpt-3 : jsonpt+1]
+ //line parse.y:134
+ {
+ jsonVAL.objlist = append(jsonDollar[1].objlist, jsonDollar[3].obj)
+ }
+ case 18:
+ jsonDollar = jsonS[jsonpt-1 : jsonpt+1]
+ //line parse.y:140
+ {
+ jsonVAL.obj = &hcl.Object{
+ Type: hcl.ValueTypeInt,
+ Value: jsonDollar[1].num,
+ }
+ }
+ case 19:
+ jsonDollar = jsonS[jsonpt-1 : jsonpt+1]
+ //line parse.y:147
+ {
+ jsonVAL.obj = &hcl.Object{
+ Type: hcl.ValueTypeFloat,
+ Value: jsonDollar[1].f,
+ }
+ }
+ case 20:
+ jsonDollar = jsonS[jsonpt-2 : jsonpt+1]
+ //line parse.y:154
+ {
+ fs := fmt.Sprintf("%d%s", jsonDollar[1].num, jsonDollar[2].str)
+ f, err := strconv.ParseFloat(fs, 64)
+ if err != nil {
+ panic(err)
+ }
+
+ jsonVAL.obj = &hcl.Object{
+ Type: hcl.ValueTypeFloat,
+ Value: f,
+ }
+ }
+ case 21:
+ jsonDollar = jsonS[jsonpt-2 : jsonpt+1]
+ //line parse.y:167
+ {
+ fs := fmt.Sprintf("%f%s", jsonDollar[1].f, jsonDollar[2].str)
+ f, err := strconv.ParseFloat(fs, 64)
+ if err != nil {
+ panic(err)
+ }
+
+ jsonVAL.obj = &hcl.Object{
+ Type: hcl.ValueTypeFloat,
+ Value: f,
+ }
+ }
+ case 22:
+ jsonDollar = jsonS[jsonpt-2 : jsonpt+1]
+ //line parse.y:182
+ {
+ jsonVAL.num = jsonDollar[2].num * -1
+ }
+ case 23:
+ jsonDollar = jsonS[jsonpt-1 : jsonpt+1]
+ //line parse.y:186
+ {
+ jsonVAL.num = jsonDollar[1].num
+ }
+ case 24:
+ jsonDollar = jsonS[jsonpt-2 : jsonpt+1]
+ //line parse.y:192
+ {
+ jsonVAL.f = jsonDollar[2].f * -1
+ }
+ case 25:
+ jsonDollar = jsonS[jsonpt-1 : jsonpt+1]
+ //line parse.y:196
+ {
+ jsonVAL.f = jsonDollar[1].f
+ }
+ case 26:
+ jsonDollar = jsonS[jsonpt-2 : jsonpt+1]
+ //line parse.y:202
+ {
+ jsonVAL.str = "e" + strconv.FormatInt(int64(jsonDollar[2].num), 10)
+ }
+ case 27:
+ jsonDollar = jsonS[jsonpt-2 : jsonpt+1]
+ //line parse.y:206
+ {
+ jsonVAL.str = "e-" + strconv.FormatInt(int64(jsonDollar[2].num), 10)
+ }
+ }
+ goto jsonstack /* stack new state and value */
+}
diff --git a/vendor/github.com/yudai/hcl/lex.go b/vendor/github.com/yudai/hcl/lex.go
new file mode 100644
index 0000000..2e38ecb
--- /dev/null
+++ b/vendor/github.com/yudai/hcl/lex.go
@@ -0,0 +1,31 @@
+package hcl
+
+import (
+ "unicode"
+)
+
+type lexModeValue byte
+
+const (
+ lexModeUnknown lexModeValue = iota
+ lexModeHcl
+ lexModeJson
+)
+
+// lexMode returns whether we're going to be parsing in JSON
+// mode or HCL mode.
+func lexMode(v string) lexModeValue {
+ for _, r := range v {
+ if unicode.IsSpace(r) {
+ continue
+ }
+
+ if r == '{' {
+ return lexModeJson
+ } else {
+ return lexModeHcl
+ }
+ }
+
+ return lexModeHcl
+}
diff --git a/vendor/github.com/yudai/hcl/lex_test.go b/vendor/github.com/yudai/hcl/lex_test.go
new file mode 100644
index 0000000..f7ee378
--- /dev/null
+++ b/vendor/github.com/yudai/hcl/lex_test.go
@@ -0,0 +1,37 @@
+package hcl
+
+import (
+ "testing"
+)
+
+func TestLexMode(t *testing.T) {
+ cases := []struct {
+ Input string
+ Mode lexModeValue
+ }{
+ {
+ "",
+ lexModeHcl,
+ },
+ {
+ "foo",
+ lexModeHcl,
+ },
+ {
+ "{}",
+ lexModeJson,
+ },
+ {
+ " {}",
+ lexModeJson,
+ },
+ }
+
+ for i, tc := range cases {
+ actual := lexMode(tc.Input)
+
+ if actual != tc.Mode {
+ t.Fatalf("%d: %#v", i, actual)
+ }
+ }
+}
diff --git a/vendor/github.com/yudai/hcl/parse.go b/vendor/github.com/yudai/hcl/parse.go
new file mode 100644
index 0000000..4b76d74
--- /dev/null
+++ b/vendor/github.com/yudai/hcl/parse.go
@@ -0,0 +1,22 @@
+package hcl
+
+import (
+ "fmt"
+
+ "github.com/yudai/hcl/hcl"
+ "github.com/yudai/hcl/json"
+)
+
+// Parse parses the given input and returns the root object.
+//
+// The input format can be either HCL or JSON.
+func Parse(input string) (*hcl.Object, error) {
+ switch lexMode(input) {
+ case lexModeHcl:
+ return hcl.Parse(input)
+ case lexModeJson:
+ return json.Parse(input)
+ }
+
+ return nil, fmt.Errorf("unknown config format")
+}
diff --git a/vendor/github.com/yudai/hcl/test-fixtures/basic.hcl b/vendor/github.com/yudai/hcl/test-fixtures/basic.hcl
new file mode 100644
index 0000000..9499944
--- /dev/null
+++ b/vendor/github.com/yudai/hcl/test-fixtures/basic.hcl
@@ -0,0 +1,2 @@
+foo = "bar"
+bar = "${file("bing/bong.txt")}"
diff --git a/vendor/github.com/yudai/hcl/test-fixtures/basic.json b/vendor/github.com/yudai/hcl/test-fixtures/basic.json
new file mode 100644
index 0000000..7bdddc8
--- /dev/null
+++ b/vendor/github.com/yudai/hcl/test-fixtures/basic.json
@@ -0,0 +1,4 @@
+{
+ "foo": "bar",
+ "bar": "${file(\"bing/bong.txt\")}"
+}
diff --git a/vendor/github.com/yudai/hcl/test-fixtures/basic_int_string.hcl b/vendor/github.com/yudai/hcl/test-fixtures/basic_int_string.hcl
new file mode 100644
index 0000000..4e415da
--- /dev/null
+++ b/vendor/github.com/yudai/hcl/test-fixtures/basic_int_string.hcl
@@ -0,0 +1 @@
+count = "3"
diff --git a/vendor/github.com/yudai/hcl/test-fixtures/basic_squish.hcl b/vendor/github.com/yudai/hcl/test-fixtures/basic_squish.hcl
new file mode 100644
index 0000000..363697b
--- /dev/null
+++ b/vendor/github.com/yudai/hcl/test-fixtures/basic_squish.hcl
@@ -0,0 +1,3 @@
+foo="bar"
+bar="${file("bing/bong.txt")}"
+foo-bar="baz"
diff --git a/vendor/github.com/yudai/hcl/test-fixtures/decode_policy.hcl b/vendor/github.com/yudai/hcl/test-fixtures/decode_policy.hcl
new file mode 100644
index 0000000..5b185cc
--- /dev/null
+++ b/vendor/github.com/yudai/hcl/test-fixtures/decode_policy.hcl
@@ -0,0 +1,15 @@
+key "" {
+ policy = "read"
+}
+
+key "foo/" {
+ policy = "write"
+}
+
+key "foo/bar/" {
+ policy = "read"
+}
+
+key "foo/bar/baz" {
+ policy = "deny"
+}
diff --git a/vendor/github.com/yudai/hcl/test-fixtures/decode_policy.json b/vendor/github.com/yudai/hcl/test-fixtures/decode_policy.json
new file mode 100644
index 0000000..151864e
--- /dev/null
+++ b/vendor/github.com/yudai/hcl/test-fixtures/decode_policy.json
@@ -0,0 +1,19 @@
+{
+ "key": {
+ "": {
+ "policy": "read"
+ },
+
+ "foo/": {
+ "policy": "write"
+ },
+
+ "foo/bar/": {
+ "policy": "read"
+ },
+
+ "foo/bar/baz": {
+ "policy": "deny"
+ }
+ }
+}
diff --git a/vendor/github.com/yudai/hcl/test-fixtures/decode_tf_variable.hcl b/vendor/github.com/yudai/hcl/test-fixtures/decode_tf_variable.hcl
new file mode 100644
index 0000000..52dcaa1
--- /dev/null
+++ b/vendor/github.com/yudai/hcl/test-fixtures/decode_tf_variable.hcl
@@ -0,0 +1,10 @@
+variable "foo" {
+ default = "bar"
+ description = "bar"
+}
+
+variable "amis" {
+ default = {
+ east = "foo"
+ }
+}
diff --git a/vendor/github.com/yudai/hcl/test-fixtures/decode_tf_variable.json b/vendor/github.com/yudai/hcl/test-fixtures/decode_tf_variable.json
new file mode 100644
index 0000000..49f921e
--- /dev/null
+++ b/vendor/github.com/yudai/hcl/test-fixtures/decode_tf_variable.json
@@ -0,0 +1,14 @@
+{
+ "variable": {
+ "foo": {
+ "default": "bar",
+ "description": "bar"
+ },
+
+ "amis": {
+ "default": {
+ "east": "foo"
+ }
+ }
+ }
+}
diff --git a/vendor/github.com/yudai/hcl/test-fixtures/empty.hcl b/vendor/github.com/yudai/hcl/test-fixtures/empty.hcl
new file mode 100644
index 0000000..5be1b23
--- /dev/null
+++ b/vendor/github.com/yudai/hcl/test-fixtures/empty.hcl
@@ -0,0 +1 @@
+resource "foo" {}
diff --git a/vendor/github.com/yudai/hcl/test-fixtures/escape.hcl b/vendor/github.com/yudai/hcl/test-fixtures/escape.hcl
new file mode 100644
index 0000000..ead1b8b
--- /dev/null
+++ b/vendor/github.com/yudai/hcl/test-fixtures/escape.hcl
@@ -0,0 +1 @@
+foo = "bar\"baz\\n"
diff --git a/vendor/github.com/yudai/hcl/test-fixtures/flat.hcl b/vendor/github.com/yudai/hcl/test-fixtures/flat.hcl
new file mode 100644
index 0000000..9bca551
--- /dev/null
+++ b/vendor/github.com/yudai/hcl/test-fixtures/flat.hcl
@@ -0,0 +1,2 @@
+foo = "bar"
+Key = 7
diff --git a/vendor/github.com/yudai/hcl/test-fixtures/float.hcl b/vendor/github.com/yudai/hcl/test-fixtures/float.hcl
new file mode 100644
index 0000000..eed44e5
--- /dev/null
+++ b/vendor/github.com/yudai/hcl/test-fixtures/float.hcl
@@ -0,0 +1 @@
+a = 1.02
diff --git a/vendor/github.com/yudai/hcl/test-fixtures/float.json b/vendor/github.com/yudai/hcl/test-fixtures/float.json
new file mode 100644
index 0000000..a9d1ab4
--- /dev/null
+++ b/vendor/github.com/yudai/hcl/test-fixtures/float.json
@@ -0,0 +1,3 @@
+{
+ "a": 1.02
+}
diff --git a/vendor/github.com/yudai/hcl/test-fixtures/multiline.json b/vendor/github.com/yudai/hcl/test-fixtures/multiline.json
new file mode 100644
index 0000000..93f7cc5
--- /dev/null
+++ b/vendor/github.com/yudai/hcl/test-fixtures/multiline.json
@@ -0,0 +1,3 @@
+{
+ "foo": "bar\nbaz"
+}
diff --git a/vendor/github.com/yudai/hcl/test-fixtures/multiline_bad.hcl b/vendor/github.com/yudai/hcl/test-fixtures/multiline_bad.hcl
new file mode 100644
index 0000000..f883bd7
--- /dev/null
+++ b/vendor/github.com/yudai/hcl/test-fixtures/multiline_bad.hcl
@@ -0,0 +1,4 @@
+foo = < 0 && len(parser.tokens) == cap(parser.tokens) {
+ if parser.tokens_head != len(parser.tokens) {
+ copy(parser.tokens, parser.tokens[parser.tokens_head:])
+ }
+ parser.tokens = parser.tokens[:len(parser.tokens)-parser.tokens_head]
+ parser.tokens_head = 0
+ }
+ parser.tokens = append(parser.tokens, *token)
+ if pos < 0 {
+ return
+ }
+ copy(parser.tokens[parser.tokens_head+pos+1:], parser.tokens[parser.tokens_head+pos:])
+ parser.tokens[parser.tokens_head+pos] = *token
+}
+
+// Create a new parser object.
+func yaml_parser_initialize(parser *yaml_parser_t) bool {
+ *parser = yaml_parser_t{
+ raw_buffer: make([]byte, 0, input_raw_buffer_size),
+ buffer: make([]byte, 0, input_buffer_size),
+ }
+ return true
+}
+
+// Destroy a parser object.
+func yaml_parser_delete(parser *yaml_parser_t) {
+ *parser = yaml_parser_t{}
+}
+
+// String read handler.
+func yaml_string_read_handler(parser *yaml_parser_t, buffer []byte) (n int, err error) {
+ if parser.input_pos == len(parser.input) {
+ return 0, io.EOF
+ }
+ n = copy(buffer, parser.input[parser.input_pos:])
+ parser.input_pos += n
+ return n, nil
+}
+
+// File read handler.
+func yaml_file_read_handler(parser *yaml_parser_t, buffer []byte) (n int, err error) {
+ return parser.input_file.Read(buffer)
+}
+
+// Set a string input.
+func yaml_parser_set_input_string(parser *yaml_parser_t, input []byte) {
+ if parser.read_handler != nil {
+ panic("must set the input source only once")
+ }
+ parser.read_handler = yaml_string_read_handler
+ parser.input = input
+ parser.input_pos = 0
+}
+
+// Set a file input.
+func yaml_parser_set_input_file(parser *yaml_parser_t, file *os.File) {
+ if parser.read_handler != nil {
+ panic("must set the input source only once")
+ }
+ parser.read_handler = yaml_file_read_handler
+ parser.input_file = file
+}
+
+// Set the source encoding.
+func yaml_parser_set_encoding(parser *yaml_parser_t, encoding yaml_encoding_t) {
+ if parser.encoding != yaml_ANY_ENCODING {
+ panic("must set the encoding only once")
+ }
+ parser.encoding = encoding
+}
+
+// Create a new emitter object.
+func yaml_emitter_initialize(emitter *yaml_emitter_t) bool {
+ *emitter = yaml_emitter_t{
+ buffer: make([]byte, output_buffer_size),
+ raw_buffer: make([]byte, 0, output_raw_buffer_size),
+ states: make([]yaml_emitter_state_t, 0, initial_stack_size),
+ events: make([]yaml_event_t, 0, initial_queue_size),
+ }
+ return true
+}
+
+// Destroy an emitter object.
+func yaml_emitter_delete(emitter *yaml_emitter_t) {
+ *emitter = yaml_emitter_t{}
+}
+
+// String write handler.
+func yaml_string_write_handler(emitter *yaml_emitter_t, buffer []byte) error {
+ *emitter.output_buffer = append(*emitter.output_buffer, buffer...)
+ return nil
+}
+
+// File write handler.
+func yaml_file_write_handler(emitter *yaml_emitter_t, buffer []byte) error {
+ _, err := emitter.output_file.Write(buffer)
+ return err
+}
+
+// Set a string output.
+func yaml_emitter_set_output_string(emitter *yaml_emitter_t, output_buffer *[]byte) {
+ if emitter.write_handler != nil {
+ panic("must set the output target only once")
+ }
+ emitter.write_handler = yaml_string_write_handler
+ emitter.output_buffer = output_buffer
+}
+
+// Set a file output.
+func yaml_emitter_set_output_file(emitter *yaml_emitter_t, file io.Writer) {
+ if emitter.write_handler != nil {
+ panic("must set the output target only once")
+ }
+ emitter.write_handler = yaml_file_write_handler
+ emitter.output_file = file
+}
+
+// Set the output encoding.
+func yaml_emitter_set_encoding(emitter *yaml_emitter_t, encoding yaml_encoding_t) {
+ if emitter.encoding != yaml_ANY_ENCODING {
+ panic("must set the output encoding only once")
+ }
+ emitter.encoding = encoding
+}
+
+// Set the canonical output style.
+func yaml_emitter_set_canonical(emitter *yaml_emitter_t, canonical bool) {
+ emitter.canonical = canonical
+}
+
+//// Set the indentation increment.
+func yaml_emitter_set_indent(emitter *yaml_emitter_t, indent int) {
+ if indent < 2 || indent > 9 {
+ indent = 2
+ }
+ emitter.best_indent = indent
+}
+
+// Set the preferred line width.
+func yaml_emitter_set_width(emitter *yaml_emitter_t, width int) {
+ if width < 0 {
+ width = -1
+ }
+ emitter.best_width = width
+}
+
+// Set if unescaped non-ASCII characters are allowed.
+func yaml_emitter_set_unicode(emitter *yaml_emitter_t, unicode bool) {
+ emitter.unicode = unicode
+}
+
+// Set the preferred line break character.
+func yaml_emitter_set_break(emitter *yaml_emitter_t, line_break yaml_break_t) {
+ emitter.line_break = line_break
+}
+
+///*
+// * Destroy a token object.
+// */
+//
+//YAML_DECLARE(void)
+//yaml_token_delete(yaml_token_t *token)
+//{
+// assert(token); // Non-NULL token object expected.
+//
+// switch (token.type)
+// {
+// case YAML_TAG_DIRECTIVE_TOKEN:
+// yaml_free(token.data.tag_directive.handle);
+// yaml_free(token.data.tag_directive.prefix);
+// break;
+//
+// case YAML_ALIAS_TOKEN:
+// yaml_free(token.data.alias.value);
+// break;
+//
+// case YAML_ANCHOR_TOKEN:
+// yaml_free(token.data.anchor.value);
+// break;
+//
+// case YAML_TAG_TOKEN:
+// yaml_free(token.data.tag.handle);
+// yaml_free(token.data.tag.suffix);
+// break;
+//
+// case YAML_SCALAR_TOKEN:
+// yaml_free(token.data.scalar.value);
+// break;
+//
+// default:
+// break;
+// }
+//
+// memset(token, 0, sizeof(yaml_token_t));
+//}
+//
+///*
+// * Check if a string is a valid UTF-8 sequence.
+// *
+// * Check 'reader.c' for more details on UTF-8 encoding.
+// */
+//
+//static int
+//yaml_check_utf8(yaml_char_t *start, size_t length)
+//{
+// yaml_char_t *end = start+length;
+// yaml_char_t *pointer = start;
+//
+// while (pointer < end) {
+// unsigned char octet;
+// unsigned int width;
+// unsigned int value;
+// size_t k;
+//
+// octet = pointer[0];
+// width = (octet & 0x80) == 0x00 ? 1 :
+// (octet & 0xE0) == 0xC0 ? 2 :
+// (octet & 0xF0) == 0xE0 ? 3 :
+// (octet & 0xF8) == 0xF0 ? 4 : 0;
+// value = (octet & 0x80) == 0x00 ? octet & 0x7F :
+// (octet & 0xE0) == 0xC0 ? octet & 0x1F :
+// (octet & 0xF0) == 0xE0 ? octet & 0x0F :
+// (octet & 0xF8) == 0xF0 ? octet & 0x07 : 0;
+// if (!width) return 0;
+// if (pointer+width > end) return 0;
+// for (k = 1; k < width; k ++) {
+// octet = pointer[k];
+// if ((octet & 0xC0) != 0x80) return 0;
+// value = (value << 6) + (octet & 0x3F);
+// }
+// if (!((width == 1) ||
+// (width == 2 && value >= 0x80) ||
+// (width == 3 && value >= 0x800) ||
+// (width == 4 && value >= 0x10000))) return 0;
+//
+// pointer += width;
+// }
+//
+// return 1;
+//}
+//
+
+// Create STREAM-START.
+func yaml_stream_start_event_initialize(event *yaml_event_t, encoding yaml_encoding_t) bool {
+ *event = yaml_event_t{
+ typ: yaml_STREAM_START_EVENT,
+ encoding: encoding,
+ }
+ return true
+}
+
+// Create STREAM-END.
+func yaml_stream_end_event_initialize(event *yaml_event_t) bool {
+ *event = yaml_event_t{
+ typ: yaml_STREAM_END_EVENT,
+ }
+ return true
+}
+
+// Create DOCUMENT-START.
+func yaml_document_start_event_initialize(event *yaml_event_t, version_directive *yaml_version_directive_t,
+ tag_directives []yaml_tag_directive_t, implicit bool) bool {
+ *event = yaml_event_t{
+ typ: yaml_DOCUMENT_START_EVENT,
+ version_directive: version_directive,
+ tag_directives: tag_directives,
+ implicit: implicit,
+ }
+ return true
+}
+
+// Create DOCUMENT-END.
+func yaml_document_end_event_initialize(event *yaml_event_t, implicit bool) bool {
+ *event = yaml_event_t{
+ typ: yaml_DOCUMENT_END_EVENT,
+ implicit: implicit,
+ }
+ return true
+}
+
+///*
+// * Create ALIAS.
+// */
+//
+//YAML_DECLARE(int)
+//yaml_alias_event_initialize(event *yaml_event_t, anchor *yaml_char_t)
+//{
+// mark yaml_mark_t = { 0, 0, 0 }
+// anchor_copy *yaml_char_t = NULL
+//
+// assert(event) // Non-NULL event object is expected.
+// assert(anchor) // Non-NULL anchor is expected.
+//
+// if (!yaml_check_utf8(anchor, strlen((char *)anchor))) return 0
+//
+// anchor_copy = yaml_strdup(anchor)
+// if (!anchor_copy)
+// return 0
+//
+// ALIAS_EVENT_INIT(*event, anchor_copy, mark, mark)
+//
+// return 1
+//}
+
+// Create SCALAR.
+func yaml_scalar_event_initialize(event *yaml_event_t, anchor, tag, value []byte, plain_implicit, quoted_implicit bool, style yaml_scalar_style_t) bool {
+ *event = yaml_event_t{
+ typ: yaml_SCALAR_EVENT,
+ anchor: anchor,
+ tag: tag,
+ value: value,
+ implicit: plain_implicit,
+ quoted_implicit: quoted_implicit,
+ style: yaml_style_t(style),
+ }
+ return true
+}
+
+// Create SEQUENCE-START.
+func yaml_sequence_start_event_initialize(event *yaml_event_t, anchor, tag []byte, implicit bool, style yaml_sequence_style_t) bool {
+ *event = yaml_event_t{
+ typ: yaml_SEQUENCE_START_EVENT,
+ anchor: anchor,
+ tag: tag,
+ implicit: implicit,
+ style: yaml_style_t(style),
+ }
+ return true
+}
+
+// Create SEQUENCE-END.
+func yaml_sequence_end_event_initialize(event *yaml_event_t) bool {
+ *event = yaml_event_t{
+ typ: yaml_SEQUENCE_END_EVENT,
+ }
+ return true
+}
+
+// Create MAPPING-START.
+func yaml_mapping_start_event_initialize(event *yaml_event_t, anchor, tag []byte, implicit bool, style yaml_mapping_style_t) bool {
+ *event = yaml_event_t{
+ typ: yaml_MAPPING_START_EVENT,
+ anchor: anchor,
+ tag: tag,
+ implicit: implicit,
+ style: yaml_style_t(style),
+ }
+ return true
+}
+
+// Create MAPPING-END.
+func yaml_mapping_end_event_initialize(event *yaml_event_t) bool {
+ *event = yaml_event_t{
+ typ: yaml_MAPPING_END_EVENT,
+ }
+ return true
+}
+
+// Destroy an event object.
+func yaml_event_delete(event *yaml_event_t) {
+ *event = yaml_event_t{}
+}
+
+///*
+// * Create a document object.
+// */
+//
+//YAML_DECLARE(int)
+//yaml_document_initialize(document *yaml_document_t,
+// version_directive *yaml_version_directive_t,
+// tag_directives_start *yaml_tag_directive_t,
+// tag_directives_end *yaml_tag_directive_t,
+// start_implicit int, end_implicit int)
+//{
+// struct {
+// error yaml_error_type_t
+// } context
+// struct {
+// start *yaml_node_t
+// end *yaml_node_t
+// top *yaml_node_t
+// } nodes = { NULL, NULL, NULL }
+// version_directive_copy *yaml_version_directive_t = NULL
+// struct {
+// start *yaml_tag_directive_t
+// end *yaml_tag_directive_t
+// top *yaml_tag_directive_t
+// } tag_directives_copy = { NULL, NULL, NULL }
+// value yaml_tag_directive_t = { NULL, NULL }
+// mark yaml_mark_t = { 0, 0, 0 }
+//
+// assert(document) // Non-NULL document object is expected.
+// assert((tag_directives_start && tag_directives_end) ||
+// (tag_directives_start == tag_directives_end))
+// // Valid tag directives are expected.
+//
+// if (!STACK_INIT(&context, nodes, INITIAL_STACK_SIZE)) goto error
+//
+// if (version_directive) {
+// version_directive_copy = yaml_malloc(sizeof(yaml_version_directive_t))
+// if (!version_directive_copy) goto error
+// version_directive_copy.major = version_directive.major
+// version_directive_copy.minor = version_directive.minor
+// }
+//
+// if (tag_directives_start != tag_directives_end) {
+// tag_directive *yaml_tag_directive_t
+// if (!STACK_INIT(&context, tag_directives_copy, INITIAL_STACK_SIZE))
+// goto error
+// for (tag_directive = tag_directives_start
+// tag_directive != tag_directives_end; tag_directive ++) {
+// assert(tag_directive.handle)
+// assert(tag_directive.prefix)
+// if (!yaml_check_utf8(tag_directive.handle,
+// strlen((char *)tag_directive.handle)))
+// goto error
+// if (!yaml_check_utf8(tag_directive.prefix,
+// strlen((char *)tag_directive.prefix)))
+// goto error
+// value.handle = yaml_strdup(tag_directive.handle)
+// value.prefix = yaml_strdup(tag_directive.prefix)
+// if (!value.handle || !value.prefix) goto error
+// if (!PUSH(&context, tag_directives_copy, value))
+// goto error
+// value.handle = NULL
+// value.prefix = NULL
+// }
+// }
+//
+// DOCUMENT_INIT(*document, nodes.start, nodes.end, version_directive_copy,
+// tag_directives_copy.start, tag_directives_copy.top,
+// start_implicit, end_implicit, mark, mark)
+//
+// return 1
+//
+//error:
+// STACK_DEL(&context, nodes)
+// yaml_free(version_directive_copy)
+// while (!STACK_EMPTY(&context, tag_directives_copy)) {
+// value yaml_tag_directive_t = POP(&context, tag_directives_copy)
+// yaml_free(value.handle)
+// yaml_free(value.prefix)
+// }
+// STACK_DEL(&context, tag_directives_copy)
+// yaml_free(value.handle)
+// yaml_free(value.prefix)
+//
+// return 0
+//}
+//
+///*
+// * Destroy a document object.
+// */
+//
+//YAML_DECLARE(void)
+//yaml_document_delete(document *yaml_document_t)
+//{
+// struct {
+// error yaml_error_type_t
+// } context
+// tag_directive *yaml_tag_directive_t
+//
+// context.error = YAML_NO_ERROR // Eliminate a compliler warning.
+//
+// assert(document) // Non-NULL document object is expected.
+//
+// while (!STACK_EMPTY(&context, document.nodes)) {
+// node yaml_node_t = POP(&context, document.nodes)
+// yaml_free(node.tag)
+// switch (node.type) {
+// case YAML_SCALAR_NODE:
+// yaml_free(node.data.scalar.value)
+// break
+// case YAML_SEQUENCE_NODE:
+// STACK_DEL(&context, node.data.sequence.items)
+// break
+// case YAML_MAPPING_NODE:
+// STACK_DEL(&context, node.data.mapping.pairs)
+// break
+// default:
+// assert(0) // Should not happen.
+// }
+// }
+// STACK_DEL(&context, document.nodes)
+//
+// yaml_free(document.version_directive)
+// for (tag_directive = document.tag_directives.start
+// tag_directive != document.tag_directives.end
+// tag_directive++) {
+// yaml_free(tag_directive.handle)
+// yaml_free(tag_directive.prefix)
+// }
+// yaml_free(document.tag_directives.start)
+//
+// memset(document, 0, sizeof(yaml_document_t))
+//}
+//
+///**
+// * Get a document node.
+// */
+//
+//YAML_DECLARE(yaml_node_t *)
+//yaml_document_get_node(document *yaml_document_t, index int)
+//{
+// assert(document) // Non-NULL document object is expected.
+//
+// if (index > 0 && document.nodes.start + index <= document.nodes.top) {
+// return document.nodes.start + index - 1
+// }
+// return NULL
+//}
+//
+///**
+// * Get the root object.
+// */
+//
+//YAML_DECLARE(yaml_node_t *)
+//yaml_document_get_root_node(document *yaml_document_t)
+//{
+// assert(document) // Non-NULL document object is expected.
+//
+// if (document.nodes.top != document.nodes.start) {
+// return document.nodes.start
+// }
+// return NULL
+//}
+//
+///*
+// * Add a scalar node to a document.
+// */
+//
+//YAML_DECLARE(int)
+//yaml_document_add_scalar(document *yaml_document_t,
+// tag *yaml_char_t, value *yaml_char_t, length int,
+// style yaml_scalar_style_t)
+//{
+// struct {
+// error yaml_error_type_t
+// } context
+// mark yaml_mark_t = { 0, 0, 0 }
+// tag_copy *yaml_char_t = NULL
+// value_copy *yaml_char_t = NULL
+// node yaml_node_t
+//
+// assert(document) // Non-NULL document object is expected.
+// assert(value) // Non-NULL value is expected.
+//
+// if (!tag) {
+// tag = (yaml_char_t *)YAML_DEFAULT_SCALAR_TAG
+// }
+//
+// if (!yaml_check_utf8(tag, strlen((char *)tag))) goto error
+// tag_copy = yaml_strdup(tag)
+// if (!tag_copy) goto error
+//
+// if (length < 0) {
+// length = strlen((char *)value)
+// }
+//
+// if (!yaml_check_utf8(value, length)) goto error
+// value_copy = yaml_malloc(length+1)
+// if (!value_copy) goto error
+// memcpy(value_copy, value, length)
+// value_copy[length] = '\0'
+//
+// SCALAR_NODE_INIT(node, tag_copy, value_copy, length, style, mark, mark)
+// if (!PUSH(&context, document.nodes, node)) goto error
+//
+// return document.nodes.top - document.nodes.start
+//
+//error:
+// yaml_free(tag_copy)
+// yaml_free(value_copy)
+//
+// return 0
+//}
+//
+///*
+// * Add a sequence node to a document.
+// */
+//
+//YAML_DECLARE(int)
+//yaml_document_add_sequence(document *yaml_document_t,
+// tag *yaml_char_t, style yaml_sequence_style_t)
+//{
+// struct {
+// error yaml_error_type_t
+// } context
+// mark yaml_mark_t = { 0, 0, 0 }
+// tag_copy *yaml_char_t = NULL
+// struct {
+// start *yaml_node_item_t
+// end *yaml_node_item_t
+// top *yaml_node_item_t
+// } items = { NULL, NULL, NULL }
+// node yaml_node_t
+//
+// assert(document) // Non-NULL document object is expected.
+//
+// if (!tag) {
+// tag = (yaml_char_t *)YAML_DEFAULT_SEQUENCE_TAG
+// }
+//
+// if (!yaml_check_utf8(tag, strlen((char *)tag))) goto error
+// tag_copy = yaml_strdup(tag)
+// if (!tag_copy) goto error
+//
+// if (!STACK_INIT(&context, items, INITIAL_STACK_SIZE)) goto error
+//
+// SEQUENCE_NODE_INIT(node, tag_copy, items.start, items.end,
+// style, mark, mark)
+// if (!PUSH(&context, document.nodes, node)) goto error
+//
+// return document.nodes.top - document.nodes.start
+//
+//error:
+// STACK_DEL(&context, items)
+// yaml_free(tag_copy)
+//
+// return 0
+//}
+//
+///*
+// * Add a mapping node to a document.
+// */
+//
+//YAML_DECLARE(int)
+//yaml_document_add_mapping(document *yaml_document_t,
+// tag *yaml_char_t, style yaml_mapping_style_t)
+//{
+// struct {
+// error yaml_error_type_t
+// } context
+// mark yaml_mark_t = { 0, 0, 0 }
+// tag_copy *yaml_char_t = NULL
+// struct {
+// start *yaml_node_pair_t
+// end *yaml_node_pair_t
+// top *yaml_node_pair_t
+// } pairs = { NULL, NULL, NULL }
+// node yaml_node_t
+//
+// assert(document) // Non-NULL document object is expected.
+//
+// if (!tag) {
+// tag = (yaml_char_t *)YAML_DEFAULT_MAPPING_TAG
+// }
+//
+// if (!yaml_check_utf8(tag, strlen((char *)tag))) goto error
+// tag_copy = yaml_strdup(tag)
+// if (!tag_copy) goto error
+//
+// if (!STACK_INIT(&context, pairs, INITIAL_STACK_SIZE)) goto error
+//
+// MAPPING_NODE_INIT(node, tag_copy, pairs.start, pairs.end,
+// style, mark, mark)
+// if (!PUSH(&context, document.nodes, node)) goto error
+//
+// return document.nodes.top - document.nodes.start
+//
+//error:
+// STACK_DEL(&context, pairs)
+// yaml_free(tag_copy)
+//
+// return 0
+//}
+//
+///*
+// * Append an item to a sequence node.
+// */
+//
+//YAML_DECLARE(int)
+//yaml_document_append_sequence_item(document *yaml_document_t,
+// sequence int, item int)
+//{
+// struct {
+// error yaml_error_type_t
+// } context
+//
+// assert(document) // Non-NULL document is required.
+// assert(sequence > 0
+// && document.nodes.start + sequence <= document.nodes.top)
+// // Valid sequence id is required.
+// assert(document.nodes.start[sequence-1].type == YAML_SEQUENCE_NODE)
+// // A sequence node is required.
+// assert(item > 0 && document.nodes.start + item <= document.nodes.top)
+// // Valid item id is required.
+//
+// if (!PUSH(&context,
+// document.nodes.start[sequence-1].data.sequence.items, item))
+// return 0
+//
+// return 1
+//}
+//
+///*
+// * Append a pair of a key and a value to a mapping node.
+// */
+//
+//YAML_DECLARE(int)
+//yaml_document_append_mapping_pair(document *yaml_document_t,
+// mapping int, key int, value int)
+//{
+// struct {
+// error yaml_error_type_t
+// } context
+//
+// pair yaml_node_pair_t
+//
+// assert(document) // Non-NULL document is required.
+// assert(mapping > 0
+// && document.nodes.start + mapping <= document.nodes.top)
+// // Valid mapping id is required.
+// assert(document.nodes.start[mapping-1].type == YAML_MAPPING_NODE)
+// // A mapping node is required.
+// assert(key > 0 && document.nodes.start + key <= document.nodes.top)
+// // Valid key id is required.
+// assert(value > 0 && document.nodes.start + value <= document.nodes.top)
+// // Valid value id is required.
+//
+// pair.key = key
+// pair.value = value
+//
+// if (!PUSH(&context,
+// document.nodes.start[mapping-1].data.mapping.pairs, pair))
+// return 0
+//
+// return 1
+//}
+//
+//
diff --git a/vendor/gopkg.in/yaml.v2/decode.go b/vendor/gopkg.in/yaml.v2/decode.go
new file mode 100644
index 0000000..e85eb2e
--- /dev/null
+++ b/vendor/gopkg.in/yaml.v2/decode.go
@@ -0,0 +1,685 @@
+package yaml
+
+import (
+ "encoding"
+ "encoding/base64"
+ "fmt"
+ "math"
+ "reflect"
+ "strconv"
+ "time"
+)
+
+const (
+ documentNode = 1 << iota
+ mappingNode
+ sequenceNode
+ scalarNode
+ aliasNode
+)
+
+type node struct {
+ kind int
+ line, column int
+ tag string
+ value string
+ implicit bool
+ children []*node
+ anchors map[string]*node
+}
+
+// ----------------------------------------------------------------------------
+// Parser, produces a node tree out of a libyaml event stream.
+
+type parser struct {
+ parser yaml_parser_t
+ event yaml_event_t
+ doc *node
+}
+
+func newParser(b []byte) *parser {
+ p := parser{}
+ if !yaml_parser_initialize(&p.parser) {
+ panic("failed to initialize YAML emitter")
+ }
+
+ if len(b) == 0 {
+ b = []byte{'\n'}
+ }
+
+ yaml_parser_set_input_string(&p.parser, b)
+
+ p.skip()
+ if p.event.typ != yaml_STREAM_START_EVENT {
+ panic("expected stream start event, got " + strconv.Itoa(int(p.event.typ)))
+ }
+ p.skip()
+ return &p
+}
+
+func (p *parser) destroy() {
+ if p.event.typ != yaml_NO_EVENT {
+ yaml_event_delete(&p.event)
+ }
+ yaml_parser_delete(&p.parser)
+}
+
+func (p *parser) skip() {
+ if p.event.typ != yaml_NO_EVENT {
+ if p.event.typ == yaml_STREAM_END_EVENT {
+ failf("attempted to go past the end of stream; corrupted value?")
+ }
+ yaml_event_delete(&p.event)
+ }
+ if !yaml_parser_parse(&p.parser, &p.event) {
+ p.fail()
+ }
+}
+
+func (p *parser) fail() {
+ var where string
+ var line int
+ if p.parser.problem_mark.line != 0 {
+ line = p.parser.problem_mark.line
+ } else if p.parser.context_mark.line != 0 {
+ line = p.parser.context_mark.line
+ }
+ if line != 0 {
+ where = "line " + strconv.Itoa(line) + ": "
+ }
+ var msg string
+ if len(p.parser.problem) > 0 {
+ msg = p.parser.problem
+ } else {
+ msg = "unknown problem parsing YAML content"
+ }
+ failf("%s%s", where, msg)
+}
+
+func (p *parser) anchor(n *node, anchor []byte) {
+ if anchor != nil {
+ p.doc.anchors[string(anchor)] = n
+ }
+}
+
+func (p *parser) parse() *node {
+ switch p.event.typ {
+ case yaml_SCALAR_EVENT:
+ return p.scalar()
+ case yaml_ALIAS_EVENT:
+ return p.alias()
+ case yaml_MAPPING_START_EVENT:
+ return p.mapping()
+ case yaml_SEQUENCE_START_EVENT:
+ return p.sequence()
+ case yaml_DOCUMENT_START_EVENT:
+ return p.document()
+ case yaml_STREAM_END_EVENT:
+ // Happens when attempting to decode an empty buffer.
+ return nil
+ default:
+ panic("attempted to parse unknown event: " + strconv.Itoa(int(p.event.typ)))
+ }
+}
+
+func (p *parser) node(kind int) *node {
+ return &node{
+ kind: kind,
+ line: p.event.start_mark.line,
+ column: p.event.start_mark.column,
+ }
+}
+
+func (p *parser) document() *node {
+ n := p.node(documentNode)
+ n.anchors = make(map[string]*node)
+ p.doc = n
+ p.skip()
+ n.children = append(n.children, p.parse())
+ if p.event.typ != yaml_DOCUMENT_END_EVENT {
+ panic("expected end of document event but got " + strconv.Itoa(int(p.event.typ)))
+ }
+ p.skip()
+ return n
+}
+
+func (p *parser) alias() *node {
+ n := p.node(aliasNode)
+ n.value = string(p.event.anchor)
+ p.skip()
+ return n
+}
+
+func (p *parser) scalar() *node {
+ n := p.node(scalarNode)
+ n.value = string(p.event.value)
+ n.tag = string(p.event.tag)
+ n.implicit = p.event.implicit
+ p.anchor(n, p.event.anchor)
+ p.skip()
+ return n
+}
+
+func (p *parser) sequence() *node {
+ n := p.node(sequenceNode)
+ p.anchor(n, p.event.anchor)
+ p.skip()
+ for p.event.typ != yaml_SEQUENCE_END_EVENT {
+ n.children = append(n.children, p.parse())
+ }
+ p.skip()
+ return n
+}
+
+func (p *parser) mapping() *node {
+ n := p.node(mappingNode)
+ p.anchor(n, p.event.anchor)
+ p.skip()
+ for p.event.typ != yaml_MAPPING_END_EVENT {
+ n.children = append(n.children, p.parse(), p.parse())
+ }
+ p.skip()
+ return n
+}
+
+// ----------------------------------------------------------------------------
+// Decoder, unmarshals a node into a provided value.
+
+type decoder struct {
+ doc *node
+ aliases map[string]bool
+ mapType reflect.Type
+ terrors []string
+ strict bool
+}
+
+var (
+ mapItemType = reflect.TypeOf(MapItem{})
+ durationType = reflect.TypeOf(time.Duration(0))
+ defaultMapType = reflect.TypeOf(map[interface{}]interface{}{})
+ ifaceType = defaultMapType.Elem()
+)
+
+func newDecoder(strict bool) *decoder {
+ d := &decoder{mapType: defaultMapType, strict: strict}
+ d.aliases = make(map[string]bool)
+ return d
+}
+
+func (d *decoder) terror(n *node, tag string, out reflect.Value) {
+ if n.tag != "" {
+ tag = n.tag
+ }
+ value := n.value
+ if tag != yaml_SEQ_TAG && tag != yaml_MAP_TAG {
+ if len(value) > 10 {
+ value = " `" + value[:7] + "...`"
+ } else {
+ value = " `" + value + "`"
+ }
+ }
+ d.terrors = append(d.terrors, fmt.Sprintf("line %d: cannot unmarshal %s%s into %s", n.line+1, shortTag(tag), value, out.Type()))
+}
+
+func (d *decoder) callUnmarshaler(n *node, u Unmarshaler) (good bool) {
+ terrlen := len(d.terrors)
+ err := u.UnmarshalYAML(func(v interface{}) (err error) {
+ defer handleErr(&err)
+ d.unmarshal(n, reflect.ValueOf(v))
+ if len(d.terrors) > terrlen {
+ issues := d.terrors[terrlen:]
+ d.terrors = d.terrors[:terrlen]
+ return &TypeError{issues}
+ }
+ return nil
+ })
+ if e, ok := err.(*TypeError); ok {
+ d.terrors = append(d.terrors, e.Errors...)
+ return false
+ }
+ if err != nil {
+ fail(err)
+ }
+ return true
+}
+
+// d.prepare initializes and dereferences pointers and calls UnmarshalYAML
+// if a value is found to implement it.
+// It returns the initialized and dereferenced out value, whether
+// unmarshalling was already done by UnmarshalYAML, and if so whether
+// its types unmarshalled appropriately.
+//
+// If n holds a null value, prepare returns before doing anything.
+func (d *decoder) prepare(n *node, out reflect.Value) (newout reflect.Value, unmarshaled, good bool) {
+ if n.tag == yaml_NULL_TAG || n.kind == scalarNode && n.tag == "" && (n.value == "null" || n.value == "~" || n.value == "" && n.implicit) {
+ return out, false, false
+ }
+ again := true
+ for again {
+ again = false
+ if out.Kind() == reflect.Ptr {
+ if out.IsNil() {
+ out.Set(reflect.New(out.Type().Elem()))
+ }
+ out = out.Elem()
+ again = true
+ }
+ if out.CanAddr() {
+ if u, ok := out.Addr().Interface().(Unmarshaler); ok {
+ good = d.callUnmarshaler(n, u)
+ return out, true, good
+ }
+ }
+ }
+ return out, false, false
+}
+
+func (d *decoder) unmarshal(n *node, out reflect.Value) (good bool) {
+ switch n.kind {
+ case documentNode:
+ return d.document(n, out)
+ case aliasNode:
+ return d.alias(n, out)
+ }
+ out, unmarshaled, good := d.prepare(n, out)
+ if unmarshaled {
+ return good
+ }
+ switch n.kind {
+ case scalarNode:
+ good = d.scalar(n, out)
+ case mappingNode:
+ good = d.mapping(n, out)
+ case sequenceNode:
+ good = d.sequence(n, out)
+ default:
+ panic("internal error: unknown node kind: " + strconv.Itoa(n.kind))
+ }
+ return good
+}
+
+func (d *decoder) document(n *node, out reflect.Value) (good bool) {
+ if len(n.children) == 1 {
+ d.doc = n
+ d.unmarshal(n.children[0], out)
+ return true
+ }
+ return false
+}
+
+func (d *decoder) alias(n *node, out reflect.Value) (good bool) {
+ an, ok := d.doc.anchors[n.value]
+ if !ok {
+ failf("unknown anchor '%s' referenced", n.value)
+ }
+ if d.aliases[n.value] {
+ failf("anchor '%s' value contains itself", n.value)
+ }
+ d.aliases[n.value] = true
+ good = d.unmarshal(an, out)
+ delete(d.aliases, n.value)
+ return good
+}
+
+var zeroValue reflect.Value
+
+func resetMap(out reflect.Value) {
+ for _, k := range out.MapKeys() {
+ out.SetMapIndex(k, zeroValue)
+ }
+}
+
+func (d *decoder) scalar(n *node, out reflect.Value) (good bool) {
+ var tag string
+ var resolved interface{}
+ if n.tag == "" && !n.implicit {
+ tag = yaml_STR_TAG
+ resolved = n.value
+ } else {
+ tag, resolved = resolve(n.tag, n.value)
+ if tag == yaml_BINARY_TAG {
+ data, err := base64.StdEncoding.DecodeString(resolved.(string))
+ if err != nil {
+ failf("!!binary value contains invalid base64 data")
+ }
+ resolved = string(data)
+ }
+ }
+ if resolved == nil {
+ if out.Kind() == reflect.Map && !out.CanAddr() {
+ resetMap(out)
+ } else {
+ out.Set(reflect.Zero(out.Type()))
+ }
+ return true
+ }
+ if s, ok := resolved.(string); ok && out.CanAddr() {
+ if u, ok := out.Addr().Interface().(encoding.TextUnmarshaler); ok {
+ err := u.UnmarshalText([]byte(s))
+ if err != nil {
+ fail(err)
+ }
+ return true
+ }
+ }
+ switch out.Kind() {
+ case reflect.String:
+ if tag == yaml_BINARY_TAG {
+ out.SetString(resolved.(string))
+ good = true
+ } else if resolved != nil {
+ out.SetString(n.value)
+ good = true
+ }
+ case reflect.Interface:
+ if resolved == nil {
+ out.Set(reflect.Zero(out.Type()))
+ } else {
+ out.Set(reflect.ValueOf(resolved))
+ }
+ good = true
+ case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
+ switch resolved := resolved.(type) {
+ case int:
+ if !out.OverflowInt(int64(resolved)) {
+ out.SetInt(int64(resolved))
+ good = true
+ }
+ case int64:
+ if !out.OverflowInt(resolved) {
+ out.SetInt(resolved)
+ good = true
+ }
+ case uint64:
+ if resolved <= math.MaxInt64 && !out.OverflowInt(int64(resolved)) {
+ out.SetInt(int64(resolved))
+ good = true
+ }
+ case float64:
+ if resolved <= math.MaxInt64 && !out.OverflowInt(int64(resolved)) {
+ out.SetInt(int64(resolved))
+ good = true
+ }
+ case string:
+ if out.Type() == durationType {
+ d, err := time.ParseDuration(resolved)
+ if err == nil {
+ out.SetInt(int64(d))
+ good = true
+ }
+ }
+ }
+ case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
+ switch resolved := resolved.(type) {
+ case int:
+ if resolved >= 0 && !out.OverflowUint(uint64(resolved)) {
+ out.SetUint(uint64(resolved))
+ good = true
+ }
+ case int64:
+ if resolved >= 0 && !out.OverflowUint(uint64(resolved)) {
+ out.SetUint(uint64(resolved))
+ good = true
+ }
+ case uint64:
+ if !out.OverflowUint(uint64(resolved)) {
+ out.SetUint(uint64(resolved))
+ good = true
+ }
+ case float64:
+ if resolved <= math.MaxUint64 && !out.OverflowUint(uint64(resolved)) {
+ out.SetUint(uint64(resolved))
+ good = true
+ }
+ }
+ case reflect.Bool:
+ switch resolved := resolved.(type) {
+ case bool:
+ out.SetBool(resolved)
+ good = true
+ }
+ case reflect.Float32, reflect.Float64:
+ switch resolved := resolved.(type) {
+ case int:
+ out.SetFloat(float64(resolved))
+ good = true
+ case int64:
+ out.SetFloat(float64(resolved))
+ good = true
+ case uint64:
+ out.SetFloat(float64(resolved))
+ good = true
+ case float64:
+ out.SetFloat(resolved)
+ good = true
+ }
+ case reflect.Ptr:
+ if out.Type().Elem() == reflect.TypeOf(resolved) {
+ // TODO DOes this make sense? When is out a Ptr except when decoding a nil value?
+ elem := reflect.New(out.Type().Elem())
+ elem.Elem().Set(reflect.ValueOf(resolved))
+ out.Set(elem)
+ good = true
+ }
+ }
+ if !good {
+ d.terror(n, tag, out)
+ }
+ return good
+}
+
+func settableValueOf(i interface{}) reflect.Value {
+ v := reflect.ValueOf(i)
+ sv := reflect.New(v.Type()).Elem()
+ sv.Set(v)
+ return sv
+}
+
+func (d *decoder) sequence(n *node, out reflect.Value) (good bool) {
+ l := len(n.children)
+
+ var iface reflect.Value
+ switch out.Kind() {
+ case reflect.Slice:
+ out.Set(reflect.MakeSlice(out.Type(), l, l))
+ case reflect.Interface:
+ // No type hints. Will have to use a generic sequence.
+ iface = out
+ out = settableValueOf(make([]interface{}, l))
+ default:
+ d.terror(n, yaml_SEQ_TAG, out)
+ return false
+ }
+ et := out.Type().Elem()
+
+ j := 0
+ for i := 0; i < l; i++ {
+ e := reflect.New(et).Elem()
+ if ok := d.unmarshal(n.children[i], e); ok {
+ out.Index(j).Set(e)
+ j++
+ }
+ }
+ out.Set(out.Slice(0, j))
+ if iface.IsValid() {
+ iface.Set(out)
+ }
+ return true
+}
+
+func (d *decoder) mapping(n *node, out reflect.Value) (good bool) {
+ switch out.Kind() {
+ case reflect.Struct:
+ return d.mappingStruct(n, out)
+ case reflect.Slice:
+ return d.mappingSlice(n, out)
+ case reflect.Map:
+ // okay
+ case reflect.Interface:
+ if d.mapType.Kind() == reflect.Map {
+ iface := out
+ out = reflect.MakeMap(d.mapType)
+ iface.Set(out)
+ } else {
+ slicev := reflect.New(d.mapType).Elem()
+ if !d.mappingSlice(n, slicev) {
+ return false
+ }
+ out.Set(slicev)
+ return true
+ }
+ default:
+ d.terror(n, yaml_MAP_TAG, out)
+ return false
+ }
+ outt := out.Type()
+ kt := outt.Key()
+ et := outt.Elem()
+
+ mapType := d.mapType
+ if outt.Key() == ifaceType && outt.Elem() == ifaceType {
+ d.mapType = outt
+ }
+
+ if out.IsNil() {
+ out.Set(reflect.MakeMap(outt))
+ }
+ l := len(n.children)
+ for i := 0; i < l; i += 2 {
+ if isMerge(n.children[i]) {
+ d.merge(n.children[i+1], out)
+ continue
+ }
+ k := reflect.New(kt).Elem()
+ if d.unmarshal(n.children[i], k) {
+ kkind := k.Kind()
+ if kkind == reflect.Interface {
+ kkind = k.Elem().Kind()
+ }
+ if kkind == reflect.Map || kkind == reflect.Slice {
+ failf("invalid map key: %#v", k.Interface())
+ }
+ e := reflect.New(et).Elem()
+ if d.unmarshal(n.children[i+1], e) {
+ out.SetMapIndex(k, e)
+ }
+ }
+ }
+ d.mapType = mapType
+ return true
+}
+
+func (d *decoder) mappingSlice(n *node, out reflect.Value) (good bool) {
+ outt := out.Type()
+ if outt.Elem() != mapItemType {
+ d.terror(n, yaml_MAP_TAG, out)
+ return false
+ }
+
+ mapType := d.mapType
+ d.mapType = outt
+
+ var slice []MapItem
+ var l = len(n.children)
+ for i := 0; i < l; i += 2 {
+ if isMerge(n.children[i]) {
+ d.merge(n.children[i+1], out)
+ continue
+ }
+ item := MapItem{}
+ k := reflect.ValueOf(&item.Key).Elem()
+ if d.unmarshal(n.children[i], k) {
+ v := reflect.ValueOf(&item.Value).Elem()
+ if d.unmarshal(n.children[i+1], v) {
+ slice = append(slice, item)
+ }
+ }
+ }
+ out.Set(reflect.ValueOf(slice))
+ d.mapType = mapType
+ return true
+}
+
+func (d *decoder) mappingStruct(n *node, out reflect.Value) (good bool) {
+ sinfo, err := getStructInfo(out.Type())
+ if err != nil {
+ panic(err)
+ }
+ name := settableValueOf("")
+ l := len(n.children)
+
+ var inlineMap reflect.Value
+ var elemType reflect.Type
+ if sinfo.InlineMap != -1 {
+ inlineMap = out.Field(sinfo.InlineMap)
+ inlineMap.Set(reflect.New(inlineMap.Type()).Elem())
+ elemType = inlineMap.Type().Elem()
+ }
+
+ for i := 0; i < l; i += 2 {
+ ni := n.children[i]
+ if isMerge(ni) {
+ d.merge(n.children[i+1], out)
+ continue
+ }
+ if !d.unmarshal(ni, name) {
+ continue
+ }
+ if info, ok := sinfo.FieldsMap[name.String()]; ok {
+ var field reflect.Value
+ if info.Inline == nil {
+ field = out.Field(info.Num)
+ } else {
+ field = out.FieldByIndex(info.Inline)
+ }
+ d.unmarshal(n.children[i+1], field)
+ } else if sinfo.InlineMap != -1 {
+ if inlineMap.IsNil() {
+ inlineMap.Set(reflect.MakeMap(inlineMap.Type()))
+ }
+ value := reflect.New(elemType).Elem()
+ d.unmarshal(n.children[i+1], value)
+ inlineMap.SetMapIndex(name, value)
+ } else if d.strict {
+ d.terrors = append(d.terrors, fmt.Sprintf("line %d: field %s not found in struct %s", ni.line+1, name.String(), out.Type()))
+ }
+ }
+ return true
+}
+
+func failWantMap() {
+ failf("map merge requires map or sequence of maps as the value")
+}
+
+func (d *decoder) merge(n *node, out reflect.Value) {
+ switch n.kind {
+ case mappingNode:
+ d.unmarshal(n, out)
+ case aliasNode:
+ an, ok := d.doc.anchors[n.value]
+ if ok && an.kind != mappingNode {
+ failWantMap()
+ }
+ d.unmarshal(n, out)
+ case sequenceNode:
+ // Step backwards as earlier nodes take precedence.
+ for i := len(n.children) - 1; i >= 0; i-- {
+ ni := n.children[i]
+ if ni.kind == aliasNode {
+ an, ok := d.doc.anchors[ni.value]
+ if ok && an.kind != mappingNode {
+ failWantMap()
+ }
+ } else if ni.kind != mappingNode {
+ failWantMap()
+ }
+ d.unmarshal(ni, out)
+ }
+ default:
+ failWantMap()
+ }
+}
+
+func isMerge(n *node) bool {
+ return n.kind == scalarNode && n.value == "<<" && (n.implicit == true || n.tag == yaml_MERGE_TAG)
+}
diff --git a/vendor/gopkg.in/yaml.v2/decode_test.go b/vendor/gopkg.in/yaml.v2/decode_test.go
new file mode 100644
index 0000000..e5366c2
--- /dev/null
+++ b/vendor/gopkg.in/yaml.v2/decode_test.go
@@ -0,0 +1,1032 @@
+package yaml_test
+
+import (
+ "errors"
+ . "gopkg.in/check.v1"
+ "gopkg.in/yaml.v2"
+ "math"
+ "net"
+ "reflect"
+ "strings"
+ "time"
+)
+
+var unmarshalIntTest = 123
+
+var unmarshalTests = []struct {
+ data string
+ value interface{}
+}{
+ {
+ "",
+ &struct{}{},
+ }, {
+ "{}", &struct{}{},
+ }, {
+ "v: hi",
+ map[string]string{"v": "hi"},
+ }, {
+ "v: hi", map[string]interface{}{"v": "hi"},
+ }, {
+ "v: true",
+ map[string]string{"v": "true"},
+ }, {
+ "v: true",
+ map[string]interface{}{"v": true},
+ }, {
+ "v: 10",
+ map[string]interface{}{"v": 10},
+ }, {
+ "v: 0b10",
+ map[string]interface{}{"v": 2},
+ }, {
+ "v: 0xA",
+ map[string]interface{}{"v": 10},
+ }, {
+ "v: 4294967296",
+ map[string]int64{"v": 4294967296},
+ }, {
+ "v: 0.1",
+ map[string]interface{}{"v": 0.1},
+ }, {
+ "v: .1",
+ map[string]interface{}{"v": 0.1},
+ }, {
+ "v: .Inf",
+ map[string]interface{}{"v": math.Inf(+1)},
+ }, {
+ "v: -.Inf",
+ map[string]interface{}{"v": math.Inf(-1)},
+ }, {
+ "v: -10",
+ map[string]interface{}{"v": -10},
+ }, {
+ "v: -.1",
+ map[string]interface{}{"v": -0.1},
+ },
+
+ // Simple values.
+ {
+ "123",
+ &unmarshalIntTest,
+ },
+
+ // Floats from spec
+ {
+ "canonical: 6.8523e+5",
+ map[string]interface{}{"canonical": 6.8523e+5},
+ }, {
+ "expo: 685.230_15e+03",
+ map[string]interface{}{"expo": 685.23015e+03},
+ }, {
+ "fixed: 685_230.15",
+ map[string]interface{}{"fixed": 685230.15},
+ }, {
+ "neginf: -.inf",
+ map[string]interface{}{"neginf": math.Inf(-1)},
+ }, {
+ "fixed: 685_230.15",
+ map[string]float64{"fixed": 685230.15},
+ },
+ //{"sexa: 190:20:30.15", map[string]interface{}{"sexa": 0}}, // Unsupported
+ //{"notanum: .NaN", map[string]interface{}{"notanum": math.NaN()}}, // Equality of NaN fails.
+
+ // Bools from spec
+ {
+ "canonical: y",
+ map[string]interface{}{"canonical": true},
+ }, {
+ "answer: NO",
+ map[string]interface{}{"answer": false},
+ }, {
+ "logical: True",
+ map[string]interface{}{"logical": true},
+ }, {
+ "option: on",
+ map[string]interface{}{"option": true},
+ }, {
+ "option: on",
+ map[string]bool{"option": true},
+ },
+ // Ints from spec
+ {
+ "canonical: 685230",
+ map[string]interface{}{"canonical": 685230},
+ }, {
+ "decimal: +685_230",
+ map[string]interface{}{"decimal": 685230},
+ }, {
+ "octal: 02472256",
+ map[string]interface{}{"octal": 685230},
+ }, {
+ "hexa: 0x_0A_74_AE",
+ map[string]interface{}{"hexa": 685230},
+ }, {
+ "bin: 0b1010_0111_0100_1010_1110",
+ map[string]interface{}{"bin": 685230},
+ }, {
+ "bin: -0b101010",
+ map[string]interface{}{"bin": -42},
+ }, {
+ "decimal: +685_230",
+ map[string]int{"decimal": 685230},
+ },
+
+ //{"sexa: 190:20:30", map[string]interface{}{"sexa": 0}}, // Unsupported
+
+ // Nulls from spec
+ {
+ "empty:",
+ map[string]interface{}{"empty": nil},
+ }, {
+ "canonical: ~",
+ map[string]interface{}{"canonical": nil},
+ }, {
+ "english: null",
+ map[string]interface{}{"english": nil},
+ }, {
+ "~: null key",
+ map[interface{}]string{nil: "null key"},
+ }, {
+ "empty:",
+ map[string]*bool{"empty": nil},
+ },
+
+ // Flow sequence
+ {
+ "seq: [A,B]",
+ map[string]interface{}{"seq": []interface{}{"A", "B"}},
+ }, {
+ "seq: [A,B,C,]",
+ map[string][]string{"seq": []string{"A", "B", "C"}},
+ }, {
+ "seq: [A,1,C]",
+ map[string][]string{"seq": []string{"A", "1", "C"}},
+ }, {
+ "seq: [A,1,C]",
+ map[string][]int{"seq": []int{1}},
+ }, {
+ "seq: [A,1,C]",
+ map[string]interface{}{"seq": []interface{}{"A", 1, "C"}},
+ },
+ // Block sequence
+ {
+ "seq:\n - A\n - B",
+ map[string]interface{}{"seq": []interface{}{"A", "B"}},
+ }, {
+ "seq:\n - A\n - B\n - C",
+ map[string][]string{"seq": []string{"A", "B", "C"}},
+ }, {
+ "seq:\n - A\n - 1\n - C",
+ map[string][]string{"seq": []string{"A", "1", "C"}},
+ }, {
+ "seq:\n - A\n - 1\n - C",
+ map[string][]int{"seq": []int{1}},
+ }, {
+ "seq:\n - A\n - 1\n - C",
+ map[string]interface{}{"seq": []interface{}{"A", 1, "C"}},
+ },
+
+ // Literal block scalar
+ {
+ "scalar: | # Comment\n\n literal\n\n \ttext\n\n",
+ map[string]string{"scalar": "\nliteral\n\n\ttext\n"},
+ },
+
+ // Folded block scalar
+ {
+ "scalar: > # Comment\n\n folded\n line\n \n next\n line\n * one\n * two\n\n last\n line\n\n",
+ map[string]string{"scalar": "\nfolded line\nnext line\n * one\n * two\n\nlast line\n"},
+ },
+
+ // Map inside interface with no type hints.
+ {
+ "a: {b: c}",
+ map[interface{}]interface{}{"a": map[interface{}]interface{}{"b": "c"}},
+ },
+
+ // Structs and type conversions.
+ {
+ "hello: world",
+ &struct{ Hello string }{"world"},
+ }, {
+ "a: {b: c}",
+ &struct{ A struct{ B string } }{struct{ B string }{"c"}},
+ }, {
+ "a: {b: c}",
+ &struct{ A *struct{ B string } }{&struct{ B string }{"c"}},
+ }, {
+ "a: {b: c}",
+ &struct{ A map[string]string }{map[string]string{"b": "c"}},
+ }, {
+ "a: {b: c}",
+ &struct{ A *map[string]string }{&map[string]string{"b": "c"}},
+ }, {
+ "a:",
+ &struct{ A map[string]string }{},
+ }, {
+ "a: 1",
+ &struct{ A int }{1},
+ }, {
+ "a: 1",
+ &struct{ A float64 }{1},
+ }, {
+ "a: 1.0",
+ &struct{ A int }{1},
+ }, {
+ "a: 1.0",
+ &struct{ A uint }{1},
+ }, {
+ "a: [1, 2]",
+ &struct{ A []int }{[]int{1, 2}},
+ }, {
+ "a: 1",
+ &struct{ B int }{0},
+ }, {
+ "a: 1",
+ &struct {
+ B int "a"
+ }{1},
+ }, {
+ "a: y",
+ &struct{ A bool }{true},
+ },
+
+ // Some cross type conversions
+ {
+ "v: 42",
+ map[string]uint{"v": 42},
+ }, {
+ "v: -42",
+ map[string]uint{},
+ }, {
+ "v: 4294967296",
+ map[string]uint64{"v": 4294967296},
+ }, {
+ "v: -4294967296",
+ map[string]uint64{},
+ },
+
+ // int
+ {
+ "int_max: 2147483647",
+ map[string]int{"int_max": math.MaxInt32},
+ },
+ {
+ "int_min: -2147483648",
+ map[string]int{"int_min": math.MinInt32},
+ },
+ {
+ "int_overflow: 9223372036854775808", // math.MaxInt64 + 1
+ map[string]int{},
+ },
+
+ // int64
+ {
+ "int64_max: 9223372036854775807",
+ map[string]int64{"int64_max": math.MaxInt64},
+ },
+ {
+ "int64_max_base2: 0b111111111111111111111111111111111111111111111111111111111111111",
+ map[string]int64{"int64_max_base2": math.MaxInt64},
+ },
+ {
+ "int64_min: -9223372036854775808",
+ map[string]int64{"int64_min": math.MinInt64},
+ },
+ {
+ "int64_neg_base2: -0b111111111111111111111111111111111111111111111111111111111111111",
+ map[string]int64{"int64_neg_base2": -math.MaxInt64},
+ },
+ {
+ "int64_overflow: 9223372036854775808", // math.MaxInt64 + 1
+ map[string]int64{},
+ },
+
+ // uint
+ {
+ "uint_min: 0",
+ map[string]uint{"uint_min": 0},
+ },
+ {
+ "uint_max: 4294967295",
+ map[string]uint{"uint_max": math.MaxUint32},
+ },
+ {
+ "uint_underflow: -1",
+ map[string]uint{},
+ },
+
+ // uint64
+ {
+ "uint64_min: 0",
+ map[string]uint{"uint64_min": 0},
+ },
+ {
+ "uint64_max: 18446744073709551615",
+ map[string]uint64{"uint64_max": math.MaxUint64},
+ },
+ {
+ "uint64_max_base2: 0b1111111111111111111111111111111111111111111111111111111111111111",
+ map[string]uint64{"uint64_max_base2": math.MaxUint64},
+ },
+ {
+ "uint64_maxint64: 9223372036854775807",
+ map[string]uint64{"uint64_maxint64": math.MaxInt64},
+ },
+ {
+ "uint64_underflow: -1",
+ map[string]uint64{},
+ },
+
+ // float32
+ {
+ "float32_max: 3.40282346638528859811704183484516925440e+38",
+ map[string]float32{"float32_max": math.MaxFloat32},
+ },
+ {
+ "float32_nonzero: 1.401298464324817070923729583289916131280e-45",
+ map[string]float32{"float32_nonzero": math.SmallestNonzeroFloat32},
+ },
+ {
+ "float32_maxuint64: 18446744073709551615",
+ map[string]float32{"float32_maxuint64": float32(math.MaxUint64)},
+ },
+ {
+ "float32_maxuint64+1: 18446744073709551616",
+ map[string]float32{"float32_maxuint64+1": float32(math.MaxUint64 + 1)},
+ },
+
+ // float64
+ {
+ "float64_max: 1.797693134862315708145274237317043567981e+308",
+ map[string]float64{"float64_max": math.MaxFloat64},
+ },
+ {
+ "float64_nonzero: 4.940656458412465441765687928682213723651e-324",
+ map[string]float64{"float64_nonzero": math.SmallestNonzeroFloat64},
+ },
+ {
+ "float64_maxuint64: 18446744073709551615",
+ map[string]float64{"float64_maxuint64": float64(math.MaxUint64)},
+ },
+ {
+ "float64_maxuint64+1: 18446744073709551616",
+ map[string]float64{"float64_maxuint64+1": float64(math.MaxUint64 + 1)},
+ },
+
+ // Overflow cases.
+ {
+ "v: 4294967297",
+ map[string]int32{},
+ }, {
+ "v: 128",
+ map[string]int8{},
+ },
+
+ // Quoted values.
+ {
+ "'1': '\"2\"'",
+ map[interface{}]interface{}{"1": "\"2\""},
+ }, {
+ "v:\n- A\n- 'B\n\n C'\n",
+ map[string][]string{"v": []string{"A", "B\nC"}},
+ },
+
+ // Explicit tags.
+ {
+ "v: !!float '1.1'",
+ map[string]interface{}{"v": 1.1},
+ }, {
+ "v: !!null ''",
+ map[string]interface{}{"v": nil},
+ }, {
+ "%TAG !y! tag:yaml.org,2002:\n---\nv: !y!int '1'",
+ map[string]interface{}{"v": 1},
+ },
+
+ // Non-specific tag (Issue #75)
+ {
+ "v: ! test",
+ map[string]interface{}{"v": "test"},
+ },
+
+ // Anchors and aliases.
+ {
+ "a: &x 1\nb: &y 2\nc: *x\nd: *y\n",
+ &struct{ A, B, C, D int }{1, 2, 1, 2},
+ }, {
+ "a: &a {c: 1}\nb: *a",
+ &struct {
+ A, B struct {
+ C int
+ }
+ }{struct{ C int }{1}, struct{ C int }{1}},
+ }, {
+ "a: &a [1, 2]\nb: *a",
+ &struct{ B []int }{[]int{1, 2}},
+ }, {
+ "b: *a\na: &a {c: 1}",
+ &struct {
+ A, B struct {
+ C int
+ }
+ }{struct{ C int }{1}, struct{ C int }{1}},
+ },
+
+ // Bug #1133337
+ {
+ "foo: ''",
+ map[string]*string{"foo": new(string)},
+ }, {
+ "foo: null",
+ map[string]*string{"foo": nil},
+ }, {
+ "foo: null",
+ map[string]string{"foo": ""},
+ }, {
+ "foo: null",
+ map[string]interface{}{"foo": nil},
+ },
+
+ // Support for ~
+ {
+ "foo: ~",
+ map[string]*string{"foo": nil},
+ }, {
+ "foo: ~",
+ map[string]string{"foo": ""},
+ }, {
+ "foo: ~",
+ map[string]interface{}{"foo": nil},
+ },
+
+ // Ignored field
+ {
+ "a: 1\nb: 2\n",
+ &struct {
+ A int
+ B int "-"
+ }{1, 0},
+ },
+
+ // Bug #1191981
+ {
+ "" +
+ "%YAML 1.1\n" +
+ "--- !!str\n" +
+ `"Generic line break (no glyph)\n\` + "\n" +
+ ` Generic line break (glyphed)\n\` + "\n" +
+ ` Line separator\u2028\` + "\n" +
+ ` Paragraph separator\u2029"` + "\n",
+ "" +
+ "Generic line break (no glyph)\n" +
+ "Generic line break (glyphed)\n" +
+ "Line separator\u2028Paragraph separator\u2029",
+ },
+
+ // Struct inlining
+ {
+ "a: 1\nb: 2\nc: 3\n",
+ &struct {
+ A int
+ C inlineB `yaml:",inline"`
+ }{1, inlineB{2, inlineC{3}}},
+ },
+
+ // Map inlining
+ {
+ "a: 1\nb: 2\nc: 3\n",
+ &struct {
+ A int
+ C map[string]int `yaml:",inline"`
+ }{1, map[string]int{"b": 2, "c": 3}},
+ },
+
+ // bug 1243827
+ {
+ "a: -b_c",
+ map[string]interface{}{"a": "-b_c"},
+ },
+ {
+ "a: +b_c",
+ map[string]interface{}{"a": "+b_c"},
+ },
+ {
+ "a: 50cent_of_dollar",
+ map[string]interface{}{"a": "50cent_of_dollar"},
+ },
+
+ // Duration
+ {
+ "a: 3s",
+ map[string]time.Duration{"a": 3 * time.Second},
+ },
+
+ // Issue #24.
+ {
+ "a: ",
+ map[string]string{"a": ""},
+ },
+
+ // Base 60 floats are obsolete and unsupported.
+ {
+ "a: 1:1\n",
+ map[string]string{"a": "1:1"},
+ },
+
+ // Binary data.
+ {
+ "a: !!binary gIGC\n",
+ map[string]string{"a": "\x80\x81\x82"},
+ }, {
+ "a: !!binary |\n " + strings.Repeat("kJCQ", 17) + "kJ\n CQ\n",
+ map[string]string{"a": strings.Repeat("\x90", 54)},
+ }, {
+ "a: !!binary |\n " + strings.Repeat("A", 70) + "\n ==\n",
+ map[string]string{"a": strings.Repeat("\x00", 52)},
+ },
+
+ // Ordered maps.
+ {
+ "{b: 2, a: 1, d: 4, c: 3, sub: {e: 5}}",
+ &yaml.MapSlice{{"b", 2}, {"a", 1}, {"d", 4}, {"c", 3}, {"sub", yaml.MapSlice{{"e", 5}}}},
+ },
+
+ // Issue #39.
+ {
+ "a:\n b:\n c: d\n",
+ map[string]struct{ B interface{} }{"a": {map[interface{}]interface{}{"c": "d"}}},
+ },
+
+ // Custom map type.
+ {
+ "a: {b: c}",
+ M{"a": M{"b": "c"}},
+ },
+
+ // Support encoding.TextUnmarshaler.
+ {
+ "a: 1.2.3.4\n",
+ map[string]net.IP{"a": net.IPv4(1, 2, 3, 4)},
+ },
+ {
+ "a: 2015-02-24T18:19:39Z\n",
+ map[string]time.Time{"a": time.Unix(1424801979, 0).In(time.UTC)},
+ },
+
+ // Encode empty lists as zero-length slices.
+ {
+ "a: []",
+ &struct{ A []int }{[]int{}},
+ },
+
+ // UTF-16-LE
+ {
+ "\xff\xfe\xf1\x00o\x00\xf1\x00o\x00:\x00 \x00v\x00e\x00r\x00y\x00 \x00y\x00e\x00s\x00\n\x00",
+ M{"ñoño": "very yes"},
+ },
+ // UTF-16-LE with surrogate.
+ {
+ "\xff\xfe\xf1\x00o\x00\xf1\x00o\x00:\x00 \x00v\x00e\x00r\x00y\x00 \x00y\x00e\x00s\x00 \x00=\xd8\xd4\xdf\n\x00",
+ M{"ñoño": "very yes 🟔"},
+ },
+
+ // UTF-16-BE
+ {
+ "\xfe\xff\x00\xf1\x00o\x00\xf1\x00o\x00:\x00 \x00v\x00e\x00r\x00y\x00 \x00y\x00e\x00s\x00\n",
+ M{"ñoño": "very yes"},
+ },
+ // UTF-16-BE with surrogate.
+ {
+ "\xfe\xff\x00\xf1\x00o\x00\xf1\x00o\x00:\x00 \x00v\x00e\x00r\x00y\x00 \x00y\x00e\x00s\x00 \xd8=\xdf\xd4\x00\n",
+ M{"ñoño": "very yes 🟔"},
+ },
+
+ // YAML Float regex shouldn't match this
+ {
+ "a: 123456e1\n",
+ M{"a": "123456e1"},
+ }, {
+ "a: 123456E1\n",
+ M{"a": "123456E1"},
+ },
+}
+
+type M map[interface{}]interface{}
+
+type inlineB struct {
+ B int
+ inlineC `yaml:",inline"`
+}
+
+type inlineC struct {
+ C int
+}
+
+func (s *S) TestUnmarshal(c *C) {
+ for i, item := range unmarshalTests {
+ c.Logf("test %d: %q", i, item.data)
+ t := reflect.ValueOf(item.value).Type()
+ var value interface{}
+ switch t.Kind() {
+ case reflect.Map:
+ value = reflect.MakeMap(t).Interface()
+ case reflect.String:
+ value = reflect.New(t).Interface()
+ case reflect.Ptr:
+ value = reflect.New(t.Elem()).Interface()
+ default:
+ c.Fatalf("missing case for %s", t)
+ }
+ err := yaml.Unmarshal([]byte(item.data), value)
+ if _, ok := err.(*yaml.TypeError); !ok {
+ c.Assert(err, IsNil)
+ }
+ if t.Kind() == reflect.String {
+ c.Assert(*value.(*string), Equals, item.value)
+ } else {
+ c.Assert(value, DeepEquals, item.value)
+ }
+ }
+}
+
+func (s *S) TestUnmarshalNaN(c *C) {
+ value := map[string]interface{}{}
+ err := yaml.Unmarshal([]byte("notanum: .NaN"), &value)
+ c.Assert(err, IsNil)
+ c.Assert(math.IsNaN(value["notanum"].(float64)), Equals, true)
+}
+
+var unmarshalErrorTests = []struct {
+ data, error string
+}{
+ {"v: !!float 'error'", "yaml: cannot decode !!str `error` as a !!float"},
+ {"v: [A,", "yaml: line 1: did not find expected node content"},
+ {"v:\n- [A,", "yaml: line 2: did not find expected node content"},
+ {"a: *b\n", "yaml: unknown anchor 'b' referenced"},
+ {"a: &a\n b: *a\n", "yaml: anchor 'a' value contains itself"},
+ {"value: -", "yaml: block sequence entries are not allowed in this context"},
+ {"a: !!binary ==", "yaml: !!binary value contains invalid base64 data"},
+ {"{[.]}", `yaml: invalid map key: \[\]interface \{\}\{"\."\}`},
+ {"{{.}}", `yaml: invalid map key: map\[interface\ \{\}\]interface \{\}\{".":interface \{\}\(nil\)\}`},
+ {"%TAG !%79! tag:yaml.org,2002:\n---\nv: !%79!int '1'", "yaml: did not find expected whitespace"},
+}
+
+func (s *S) TestUnmarshalErrors(c *C) {
+ for _, item := range unmarshalErrorTests {
+ var value interface{}
+ err := yaml.Unmarshal([]byte(item.data), &value)
+ c.Assert(err, ErrorMatches, item.error, Commentf("Partial unmarshal: %#v", value))
+ }
+}
+
+var unmarshalerTests = []struct {
+ data, tag string
+ value interface{}
+}{
+ {"_: {hi: there}", "!!map", map[interface{}]interface{}{"hi": "there"}},
+ {"_: [1,A]", "!!seq", []interface{}{1, "A"}},
+ {"_: 10", "!!int", 10},
+ {"_: null", "!!null", nil},
+ {`_: BAR!`, "!!str", "BAR!"},
+ {`_: "BAR!"`, "!!str", "BAR!"},
+ {"_: !!foo 'BAR!'", "!!foo", "BAR!"},
+ {`_: ""`, "!!str", ""},
+}
+
+var unmarshalerResult = map[int]error{}
+
+type unmarshalerType struct {
+ value interface{}
+}
+
+func (o *unmarshalerType) UnmarshalYAML(unmarshal func(v interface{}) error) error {
+ if err := unmarshal(&o.value); err != nil {
+ return err
+ }
+ if i, ok := o.value.(int); ok {
+ if result, ok := unmarshalerResult[i]; ok {
+ return result
+ }
+ }
+ return nil
+}
+
+type unmarshalerPointer struct {
+ Field *unmarshalerType "_"
+}
+
+type unmarshalerValue struct {
+ Field unmarshalerType "_"
+}
+
+func (s *S) TestUnmarshalerPointerField(c *C) {
+ for _, item := range unmarshalerTests {
+ obj := &unmarshalerPointer{}
+ err := yaml.Unmarshal([]byte(item.data), obj)
+ c.Assert(err, IsNil)
+ if item.value == nil {
+ c.Assert(obj.Field, IsNil)
+ } else {
+ c.Assert(obj.Field, NotNil, Commentf("Pointer not initialized (%#v)", item.value))
+ c.Assert(obj.Field.value, DeepEquals, item.value)
+ }
+ }
+}
+
+func (s *S) TestUnmarshalerValueField(c *C) {
+ for _, item := range unmarshalerTests {
+ obj := &unmarshalerValue{}
+ err := yaml.Unmarshal([]byte(item.data), obj)
+ c.Assert(err, IsNil)
+ c.Assert(obj.Field, NotNil, Commentf("Pointer not initialized (%#v)", item.value))
+ c.Assert(obj.Field.value, DeepEquals, item.value)
+ }
+}
+
+func (s *S) TestUnmarshalerWholeDocument(c *C) {
+ obj := &unmarshalerType{}
+ err := yaml.Unmarshal([]byte(unmarshalerTests[0].data), obj)
+ c.Assert(err, IsNil)
+ value, ok := obj.value.(map[interface{}]interface{})
+ c.Assert(ok, Equals, true, Commentf("value: %#v", obj.value))
+ c.Assert(value["_"], DeepEquals, unmarshalerTests[0].value)
+}
+
+func (s *S) TestUnmarshalerTypeError(c *C) {
+ unmarshalerResult[2] = &yaml.TypeError{[]string{"foo"}}
+ unmarshalerResult[4] = &yaml.TypeError{[]string{"bar"}}
+ defer func() {
+ delete(unmarshalerResult, 2)
+ delete(unmarshalerResult, 4)
+ }()
+
+ type T struct {
+ Before int
+ After int
+ M map[string]*unmarshalerType
+ }
+ var v T
+ data := `{before: A, m: {abc: 1, def: 2, ghi: 3, jkl: 4}, after: B}`
+ err := yaml.Unmarshal([]byte(data), &v)
+ c.Assert(err, ErrorMatches, ""+
+ "yaml: unmarshal errors:\n"+
+ " line 1: cannot unmarshal !!str `A` into int\n"+
+ " foo\n"+
+ " bar\n"+
+ " line 1: cannot unmarshal !!str `B` into int")
+ c.Assert(v.M["abc"], NotNil)
+ c.Assert(v.M["def"], IsNil)
+ c.Assert(v.M["ghi"], NotNil)
+ c.Assert(v.M["jkl"], IsNil)
+
+ c.Assert(v.M["abc"].value, Equals, 1)
+ c.Assert(v.M["ghi"].value, Equals, 3)
+}
+
+type proxyTypeError struct{}
+
+func (v *proxyTypeError) UnmarshalYAML(unmarshal func(interface{}) error) error {
+ var s string
+ var a int32
+ var b int64
+ if err := unmarshal(&s); err != nil {
+ panic(err)
+ }
+ if s == "a" {
+ if err := unmarshal(&b); err == nil {
+ panic("should have failed")
+ }
+ return unmarshal(&a)
+ }
+ if err := unmarshal(&a); err == nil {
+ panic("should have failed")
+ }
+ return unmarshal(&b)
+}
+
+func (s *S) TestUnmarshalerTypeErrorProxying(c *C) {
+ type T struct {
+ Before int
+ After int
+ M map[string]*proxyTypeError
+ }
+ var v T
+ data := `{before: A, m: {abc: a, def: b}, after: B}`
+ err := yaml.Unmarshal([]byte(data), &v)
+ c.Assert(err, ErrorMatches, ""+
+ "yaml: unmarshal errors:\n"+
+ " line 1: cannot unmarshal !!str `A` into int\n"+
+ " line 1: cannot unmarshal !!str `a` into int32\n"+
+ " line 1: cannot unmarshal !!str `b` into int64\n"+
+ " line 1: cannot unmarshal !!str `B` into int")
+}
+
+type failingUnmarshaler struct{}
+
+var failingErr = errors.New("failingErr")
+
+func (ft *failingUnmarshaler) UnmarshalYAML(unmarshal func(interface{}) error) error {
+ return failingErr
+}
+
+func (s *S) TestUnmarshalerError(c *C) {
+ err := yaml.Unmarshal([]byte("a: b"), &failingUnmarshaler{})
+ c.Assert(err, Equals, failingErr)
+}
+
+type sliceUnmarshaler []int
+
+func (su *sliceUnmarshaler) UnmarshalYAML(unmarshal func(interface{}) error) error {
+ var slice []int
+ err := unmarshal(&slice)
+ if err == nil {
+ *su = slice
+ return nil
+ }
+
+ var intVal int
+ err = unmarshal(&intVal)
+ if err == nil {
+ *su = []int{intVal}
+ return nil
+ }
+
+ return err
+}
+
+func (s *S) TestUnmarshalerRetry(c *C) {
+ var su sliceUnmarshaler
+ err := yaml.Unmarshal([]byte("[1, 2, 3]"), &su)
+ c.Assert(err, IsNil)
+ c.Assert(su, DeepEquals, sliceUnmarshaler([]int{1, 2, 3}))
+
+ err = yaml.Unmarshal([]byte("1"), &su)
+ c.Assert(err, IsNil)
+ c.Assert(su, DeepEquals, sliceUnmarshaler([]int{1}))
+}
+
+// From http://yaml.org/type/merge.html
+var mergeTests = `
+anchors:
+ list:
+ - &CENTER { "x": 1, "y": 2 }
+ - &LEFT { "x": 0, "y": 2 }
+ - &BIG { "r": 10 }
+ - &SMALL { "r": 1 }
+
+# All the following maps are equal:
+
+plain:
+ # Explicit keys
+ "x": 1
+ "y": 2
+ "r": 10
+ label: center/big
+
+mergeOne:
+ # Merge one map
+ << : *CENTER
+ "r": 10
+ label: center/big
+
+mergeMultiple:
+ # Merge multiple maps
+ << : [ *CENTER, *BIG ]
+ label: center/big
+
+override:
+ # Override
+ << : [ *BIG, *LEFT, *SMALL ]
+ "x": 1
+ label: center/big
+
+shortTag:
+ # Explicit short merge tag
+ !!merge "<<" : [ *CENTER, *BIG ]
+ label: center/big
+
+longTag:
+ # Explicit merge long tag
+ ! "<<" : [ *CENTER, *BIG ]
+ label: center/big
+
+inlineMap:
+ # Inlined map
+ << : {"x": 1, "y": 2, "r": 10}
+ label: center/big
+
+inlineSequenceMap:
+ # Inlined map in sequence
+ << : [ *CENTER, {"r": 10} ]
+ label: center/big
+`
+
+func (s *S) TestMerge(c *C) {
+ var want = map[interface{}]interface{}{
+ "x": 1,
+ "y": 2,
+ "r": 10,
+ "label": "center/big",
+ }
+
+ var m map[interface{}]interface{}
+ err := yaml.Unmarshal([]byte(mergeTests), &m)
+ c.Assert(err, IsNil)
+ for name, test := range m {
+ if name == "anchors" {
+ continue
+ }
+ c.Assert(test, DeepEquals, want, Commentf("test %q failed", name))
+ }
+}
+
+func (s *S) TestMergeStruct(c *C) {
+ type Data struct {
+ X, Y, R int
+ Label string
+ }
+ want := Data{1, 2, 10, "center/big"}
+
+ var m map[string]Data
+ err := yaml.Unmarshal([]byte(mergeTests), &m)
+ c.Assert(err, IsNil)
+ for name, test := range m {
+ if name == "anchors" {
+ continue
+ }
+ c.Assert(test, Equals, want, Commentf("test %q failed", name))
+ }
+}
+
+var unmarshalNullTests = []func() interface{}{
+ func() interface{} { var v interface{}; v = "v"; return &v },
+ func() interface{} { var s = "s"; return &s },
+ func() interface{} { var s = "s"; sptr := &s; return &sptr },
+ func() interface{} { var i = 1; return &i },
+ func() interface{} { var i = 1; iptr := &i; return &iptr },
+ func() interface{} { m := map[string]int{"s": 1}; return &m },
+ func() interface{} { m := map[string]int{"s": 1}; return m },
+}
+
+func (s *S) TestUnmarshalNull(c *C) {
+ for _, test := range unmarshalNullTests {
+ item := test()
+ zero := reflect.Zero(reflect.TypeOf(item).Elem()).Interface()
+ err := yaml.Unmarshal([]byte("null"), item)
+ c.Assert(err, IsNil)
+ if reflect.TypeOf(item).Kind() == reflect.Map {
+ c.Assert(reflect.ValueOf(item).Interface(), DeepEquals, reflect.MakeMap(reflect.TypeOf(item)).Interface())
+ } else {
+ c.Assert(reflect.ValueOf(item).Elem().Interface(), DeepEquals, zero)
+ }
+ }
+}
+
+func (s *S) TestUnmarshalSliceOnPreset(c *C) {
+ // Issue #48.
+ v := struct{ A []int }{[]int{1}}
+ yaml.Unmarshal([]byte("a: [2]"), &v)
+ c.Assert(v.A, DeepEquals, []int{2})
+}
+
+func (s *S) TestUnmarshalStrict(c *C) {
+ v := struct{ A, B int }{}
+
+ err := yaml.UnmarshalStrict([]byte("a: 1\nb: 2"), &v)
+ c.Check(err, IsNil)
+ err = yaml.Unmarshal([]byte("a: 1\nb: 2\nc: 3"), &v)
+ c.Check(err, IsNil)
+ err = yaml.UnmarshalStrict([]byte("a: 1\nb: 2\nc: 3"), &v)
+ c.Check(err, ErrorMatches, "yaml: unmarshal errors:\n line 3: field c not found in struct struct { A int; B int }")
+}
+
+//var data []byte
+//func init() {
+// var err error
+// data, err = ioutil.ReadFile("/tmp/file.yaml")
+// if err != nil {
+// panic(err)
+// }
+//}
+//
+//func (s *S) BenchmarkUnmarshal(c *C) {
+// var err error
+// for i := 0; i < c.N; i++ {
+// var v map[string]interface{}
+// err = yaml.Unmarshal(data, &v)
+// }
+// if err != nil {
+// panic(err)
+// }
+//}
+//
+//func (s *S) BenchmarkMarshal(c *C) {
+// var v map[string]interface{}
+// yaml.Unmarshal(data, &v)
+// c.ResetTimer()
+// for i := 0; i < c.N; i++ {
+// yaml.Marshal(&v)
+// }
+//}
diff --git a/vendor/gopkg.in/yaml.v2/emitterc.go b/vendor/gopkg.in/yaml.v2/emitterc.go
new file mode 100644
index 0000000..dcaf502
--- /dev/null
+++ b/vendor/gopkg.in/yaml.v2/emitterc.go
@@ -0,0 +1,1684 @@
+package yaml
+
+import (
+ "bytes"
+)
+
+// Flush the buffer if needed.
+func flush(emitter *yaml_emitter_t) bool {
+ if emitter.buffer_pos+5 >= len(emitter.buffer) {
+ return yaml_emitter_flush(emitter)
+ }
+ return true
+}
+
+// Put a character to the output buffer.
+func put(emitter *yaml_emitter_t, value byte) bool {
+ if emitter.buffer_pos+5 >= len(emitter.buffer) && !yaml_emitter_flush(emitter) {
+ return false
+ }
+ emitter.buffer[emitter.buffer_pos] = value
+ emitter.buffer_pos++
+ emitter.column++
+ return true
+}
+
+// Put a line break to the output buffer.
+func put_break(emitter *yaml_emitter_t) bool {
+ if emitter.buffer_pos+5 >= len(emitter.buffer) && !yaml_emitter_flush(emitter) {
+ return false
+ }
+ switch emitter.line_break {
+ case yaml_CR_BREAK:
+ emitter.buffer[emitter.buffer_pos] = '\r'
+ emitter.buffer_pos += 1
+ case yaml_LN_BREAK:
+ emitter.buffer[emitter.buffer_pos] = '\n'
+ emitter.buffer_pos += 1
+ case yaml_CRLN_BREAK:
+ emitter.buffer[emitter.buffer_pos+0] = '\r'
+ emitter.buffer[emitter.buffer_pos+1] = '\n'
+ emitter.buffer_pos += 2
+ default:
+ panic("unknown line break setting")
+ }
+ emitter.column = 0
+ emitter.line++
+ return true
+}
+
+// Copy a character from a string into buffer.
+func write(emitter *yaml_emitter_t, s []byte, i *int) bool {
+ if emitter.buffer_pos+5 >= len(emitter.buffer) && !yaml_emitter_flush(emitter) {
+ return false
+ }
+ p := emitter.buffer_pos
+ w := width(s[*i])
+ switch w {
+ case 4:
+ emitter.buffer[p+3] = s[*i+3]
+ fallthrough
+ case 3:
+ emitter.buffer[p+2] = s[*i+2]
+ fallthrough
+ case 2:
+ emitter.buffer[p+1] = s[*i+1]
+ fallthrough
+ case 1:
+ emitter.buffer[p+0] = s[*i+0]
+ default:
+ panic("unknown character width")
+ }
+ emitter.column++
+ emitter.buffer_pos += w
+ *i += w
+ return true
+}
+
+// Write a whole string into buffer.
+func write_all(emitter *yaml_emitter_t, s []byte) bool {
+ for i := 0; i < len(s); {
+ if !write(emitter, s, &i) {
+ return false
+ }
+ }
+ return true
+}
+
+// Copy a line break character from a string into buffer.
+func write_break(emitter *yaml_emitter_t, s []byte, i *int) bool {
+ if s[*i] == '\n' {
+ if !put_break(emitter) {
+ return false
+ }
+ *i++
+ } else {
+ if !write(emitter, s, i) {
+ return false
+ }
+ emitter.column = 0
+ emitter.line++
+ }
+ return true
+}
+
+// Set an emitter error and return false.
+func yaml_emitter_set_emitter_error(emitter *yaml_emitter_t, problem string) bool {
+ emitter.error = yaml_EMITTER_ERROR
+ emitter.problem = problem
+ return false
+}
+
+// Emit an event.
+func yaml_emitter_emit(emitter *yaml_emitter_t, event *yaml_event_t) bool {
+ emitter.events = append(emitter.events, *event)
+ for !yaml_emitter_need_more_events(emitter) {
+ event := &emitter.events[emitter.events_head]
+ if !yaml_emitter_analyze_event(emitter, event) {
+ return false
+ }
+ if !yaml_emitter_state_machine(emitter, event) {
+ return false
+ }
+ yaml_event_delete(event)
+ emitter.events_head++
+ }
+ return true
+}
+
+// Check if we need to accumulate more events before emitting.
+//
+// We accumulate extra
+// - 1 event for DOCUMENT-START
+// - 2 events for SEQUENCE-START
+// - 3 events for MAPPING-START
+//
+func yaml_emitter_need_more_events(emitter *yaml_emitter_t) bool {
+ if emitter.events_head == len(emitter.events) {
+ return true
+ }
+ var accumulate int
+ switch emitter.events[emitter.events_head].typ {
+ case yaml_DOCUMENT_START_EVENT:
+ accumulate = 1
+ break
+ case yaml_SEQUENCE_START_EVENT:
+ accumulate = 2
+ break
+ case yaml_MAPPING_START_EVENT:
+ accumulate = 3
+ break
+ default:
+ return false
+ }
+ if len(emitter.events)-emitter.events_head > accumulate {
+ return false
+ }
+ var level int
+ for i := emitter.events_head; i < len(emitter.events); i++ {
+ switch emitter.events[i].typ {
+ case yaml_STREAM_START_EVENT, yaml_DOCUMENT_START_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT:
+ level++
+ case yaml_STREAM_END_EVENT, yaml_DOCUMENT_END_EVENT, yaml_SEQUENCE_END_EVENT, yaml_MAPPING_END_EVENT:
+ level--
+ }
+ if level == 0 {
+ return false
+ }
+ }
+ return true
+}
+
+// Append a directive to the directives stack.
+func yaml_emitter_append_tag_directive(emitter *yaml_emitter_t, value *yaml_tag_directive_t, allow_duplicates bool) bool {
+ for i := 0; i < len(emitter.tag_directives); i++ {
+ if bytes.Equal(value.handle, emitter.tag_directives[i].handle) {
+ if allow_duplicates {
+ return true
+ }
+ return yaml_emitter_set_emitter_error(emitter, "duplicate %TAG directive")
+ }
+ }
+
+ // [Go] Do we actually need to copy this given garbage collection
+ // and the lack of deallocating destructors?
+ tag_copy := yaml_tag_directive_t{
+ handle: make([]byte, len(value.handle)),
+ prefix: make([]byte, len(value.prefix)),
+ }
+ copy(tag_copy.handle, value.handle)
+ copy(tag_copy.prefix, value.prefix)
+ emitter.tag_directives = append(emitter.tag_directives, tag_copy)
+ return true
+}
+
+// Increase the indentation level.
+func yaml_emitter_increase_indent(emitter *yaml_emitter_t, flow, indentless bool) bool {
+ emitter.indents = append(emitter.indents, emitter.indent)
+ if emitter.indent < 0 {
+ if flow {
+ emitter.indent = emitter.best_indent
+ } else {
+ emitter.indent = 0
+ }
+ } else if !indentless {
+ emitter.indent += emitter.best_indent
+ }
+ return true
+}
+
+// State dispatcher.
+func yaml_emitter_state_machine(emitter *yaml_emitter_t, event *yaml_event_t) bool {
+ switch emitter.state {
+ default:
+ case yaml_EMIT_STREAM_START_STATE:
+ return yaml_emitter_emit_stream_start(emitter, event)
+
+ case yaml_EMIT_FIRST_DOCUMENT_START_STATE:
+ return yaml_emitter_emit_document_start(emitter, event, true)
+
+ case yaml_EMIT_DOCUMENT_START_STATE:
+ return yaml_emitter_emit_document_start(emitter, event, false)
+
+ case yaml_EMIT_DOCUMENT_CONTENT_STATE:
+ return yaml_emitter_emit_document_content(emitter, event)
+
+ case yaml_EMIT_DOCUMENT_END_STATE:
+ return yaml_emitter_emit_document_end(emitter, event)
+
+ case yaml_EMIT_FLOW_SEQUENCE_FIRST_ITEM_STATE:
+ return yaml_emitter_emit_flow_sequence_item(emitter, event, true)
+
+ case yaml_EMIT_FLOW_SEQUENCE_ITEM_STATE:
+ return yaml_emitter_emit_flow_sequence_item(emitter, event, false)
+
+ case yaml_EMIT_FLOW_MAPPING_FIRST_KEY_STATE:
+ return yaml_emitter_emit_flow_mapping_key(emitter, event, true)
+
+ case yaml_EMIT_FLOW_MAPPING_KEY_STATE:
+ return yaml_emitter_emit_flow_mapping_key(emitter, event, false)
+
+ case yaml_EMIT_FLOW_MAPPING_SIMPLE_VALUE_STATE:
+ return yaml_emitter_emit_flow_mapping_value(emitter, event, true)
+
+ case yaml_EMIT_FLOW_MAPPING_VALUE_STATE:
+ return yaml_emitter_emit_flow_mapping_value(emitter, event, false)
+
+ case yaml_EMIT_BLOCK_SEQUENCE_FIRST_ITEM_STATE:
+ return yaml_emitter_emit_block_sequence_item(emitter, event, true)
+
+ case yaml_EMIT_BLOCK_SEQUENCE_ITEM_STATE:
+ return yaml_emitter_emit_block_sequence_item(emitter, event, false)
+
+ case yaml_EMIT_BLOCK_MAPPING_FIRST_KEY_STATE:
+ return yaml_emitter_emit_block_mapping_key(emitter, event, true)
+
+ case yaml_EMIT_BLOCK_MAPPING_KEY_STATE:
+ return yaml_emitter_emit_block_mapping_key(emitter, event, false)
+
+ case yaml_EMIT_BLOCK_MAPPING_SIMPLE_VALUE_STATE:
+ return yaml_emitter_emit_block_mapping_value(emitter, event, true)
+
+ case yaml_EMIT_BLOCK_MAPPING_VALUE_STATE:
+ return yaml_emitter_emit_block_mapping_value(emitter, event, false)
+
+ case yaml_EMIT_END_STATE:
+ return yaml_emitter_set_emitter_error(emitter, "expected nothing after STREAM-END")
+ }
+ panic("invalid emitter state")
+}
+
+// Expect STREAM-START.
+func yaml_emitter_emit_stream_start(emitter *yaml_emitter_t, event *yaml_event_t) bool {
+ if event.typ != yaml_STREAM_START_EVENT {
+ return yaml_emitter_set_emitter_error(emitter, "expected STREAM-START")
+ }
+ if emitter.encoding == yaml_ANY_ENCODING {
+ emitter.encoding = event.encoding
+ if emitter.encoding == yaml_ANY_ENCODING {
+ emitter.encoding = yaml_UTF8_ENCODING
+ }
+ }
+ if emitter.best_indent < 2 || emitter.best_indent > 9 {
+ emitter.best_indent = 2
+ }
+ if emitter.best_width >= 0 && emitter.best_width <= emitter.best_indent*2 {
+ emitter.best_width = 80
+ }
+ if emitter.best_width < 0 {
+ emitter.best_width = 1<<31 - 1
+ }
+ if emitter.line_break == yaml_ANY_BREAK {
+ emitter.line_break = yaml_LN_BREAK
+ }
+
+ emitter.indent = -1
+ emitter.line = 0
+ emitter.column = 0
+ emitter.whitespace = true
+ emitter.indention = true
+
+ if emitter.encoding != yaml_UTF8_ENCODING {
+ if !yaml_emitter_write_bom(emitter) {
+ return false
+ }
+ }
+ emitter.state = yaml_EMIT_FIRST_DOCUMENT_START_STATE
+ return true
+}
+
+// Expect DOCUMENT-START or STREAM-END.
+func yaml_emitter_emit_document_start(emitter *yaml_emitter_t, event *yaml_event_t, first bool) bool {
+
+ if event.typ == yaml_DOCUMENT_START_EVENT {
+
+ if event.version_directive != nil {
+ if !yaml_emitter_analyze_version_directive(emitter, event.version_directive) {
+ return false
+ }
+ }
+
+ for i := 0; i < len(event.tag_directives); i++ {
+ tag_directive := &event.tag_directives[i]
+ if !yaml_emitter_analyze_tag_directive(emitter, tag_directive) {
+ return false
+ }
+ if !yaml_emitter_append_tag_directive(emitter, tag_directive, false) {
+ return false
+ }
+ }
+
+ for i := 0; i < len(default_tag_directives); i++ {
+ tag_directive := &default_tag_directives[i]
+ if !yaml_emitter_append_tag_directive(emitter, tag_directive, true) {
+ return false
+ }
+ }
+
+ implicit := event.implicit
+ if !first || emitter.canonical {
+ implicit = false
+ }
+
+ if emitter.open_ended && (event.version_directive != nil || len(event.tag_directives) > 0) {
+ if !yaml_emitter_write_indicator(emitter, []byte("..."), true, false, false) {
+ return false
+ }
+ if !yaml_emitter_write_indent(emitter) {
+ return false
+ }
+ }
+
+ if event.version_directive != nil {
+ implicit = false
+ if !yaml_emitter_write_indicator(emitter, []byte("%YAML"), true, false, false) {
+ return false
+ }
+ if !yaml_emitter_write_indicator(emitter, []byte("1.1"), true, false, false) {
+ return false
+ }
+ if !yaml_emitter_write_indent(emitter) {
+ return false
+ }
+ }
+
+ if len(event.tag_directives) > 0 {
+ implicit = false
+ for i := 0; i < len(event.tag_directives); i++ {
+ tag_directive := &event.tag_directives[i]
+ if !yaml_emitter_write_indicator(emitter, []byte("%TAG"), true, false, false) {
+ return false
+ }
+ if !yaml_emitter_write_tag_handle(emitter, tag_directive.handle) {
+ return false
+ }
+ if !yaml_emitter_write_tag_content(emitter, tag_directive.prefix, true) {
+ return false
+ }
+ if !yaml_emitter_write_indent(emitter) {
+ return false
+ }
+ }
+ }
+
+ if yaml_emitter_check_empty_document(emitter) {
+ implicit = false
+ }
+ if !implicit {
+ if !yaml_emitter_write_indent(emitter) {
+ return false
+ }
+ if !yaml_emitter_write_indicator(emitter, []byte("---"), true, false, false) {
+ return false
+ }
+ if emitter.canonical {
+ if !yaml_emitter_write_indent(emitter) {
+ return false
+ }
+ }
+ }
+
+ emitter.state = yaml_EMIT_DOCUMENT_CONTENT_STATE
+ return true
+ }
+
+ if event.typ == yaml_STREAM_END_EVENT {
+ if emitter.open_ended {
+ if !yaml_emitter_write_indicator(emitter, []byte("..."), true, false, false) {
+ return false
+ }
+ if !yaml_emitter_write_indent(emitter) {
+ return false
+ }
+ }
+ if !yaml_emitter_flush(emitter) {
+ return false
+ }
+ emitter.state = yaml_EMIT_END_STATE
+ return true
+ }
+
+ return yaml_emitter_set_emitter_error(emitter, "expected DOCUMENT-START or STREAM-END")
+}
+
+// Expect the root node.
+func yaml_emitter_emit_document_content(emitter *yaml_emitter_t, event *yaml_event_t) bool {
+ emitter.states = append(emitter.states, yaml_EMIT_DOCUMENT_END_STATE)
+ return yaml_emitter_emit_node(emitter, event, true, false, false, false)
+}
+
+// Expect DOCUMENT-END.
+func yaml_emitter_emit_document_end(emitter *yaml_emitter_t, event *yaml_event_t) bool {
+ if event.typ != yaml_DOCUMENT_END_EVENT {
+ return yaml_emitter_set_emitter_error(emitter, "expected DOCUMENT-END")
+ }
+ if !yaml_emitter_write_indent(emitter) {
+ return false
+ }
+ if !event.implicit {
+ // [Go] Allocate the slice elsewhere.
+ if !yaml_emitter_write_indicator(emitter, []byte("..."), true, false, false) {
+ return false
+ }
+ if !yaml_emitter_write_indent(emitter) {
+ return false
+ }
+ }
+ if !yaml_emitter_flush(emitter) {
+ return false
+ }
+ emitter.state = yaml_EMIT_DOCUMENT_START_STATE
+ emitter.tag_directives = emitter.tag_directives[:0]
+ return true
+}
+
+// Expect a flow item node.
+func yaml_emitter_emit_flow_sequence_item(emitter *yaml_emitter_t, event *yaml_event_t, first bool) bool {
+ if first {
+ if !yaml_emitter_write_indicator(emitter, []byte{'['}, true, true, false) {
+ return false
+ }
+ if !yaml_emitter_increase_indent(emitter, true, false) {
+ return false
+ }
+ emitter.flow_level++
+ }
+
+ if event.typ == yaml_SEQUENCE_END_EVENT {
+ emitter.flow_level--
+ emitter.indent = emitter.indents[len(emitter.indents)-1]
+ emitter.indents = emitter.indents[:len(emitter.indents)-1]
+ if emitter.canonical && !first {
+ if !yaml_emitter_write_indicator(emitter, []byte{','}, false, false, false) {
+ return false
+ }
+ if !yaml_emitter_write_indent(emitter) {
+ return false
+ }
+ }
+ if !yaml_emitter_write_indicator(emitter, []byte{']'}, false, false, false) {
+ return false
+ }
+ emitter.state = emitter.states[len(emitter.states)-1]
+ emitter.states = emitter.states[:len(emitter.states)-1]
+
+ return true
+ }
+
+ if !first {
+ if !yaml_emitter_write_indicator(emitter, []byte{','}, false, false, false) {
+ return false
+ }
+ }
+
+ if emitter.canonical || emitter.column > emitter.best_width {
+ if !yaml_emitter_write_indent(emitter) {
+ return false
+ }
+ }
+ emitter.states = append(emitter.states, yaml_EMIT_FLOW_SEQUENCE_ITEM_STATE)
+ return yaml_emitter_emit_node(emitter, event, false, true, false, false)
+}
+
+// Expect a flow key node.
+func yaml_emitter_emit_flow_mapping_key(emitter *yaml_emitter_t, event *yaml_event_t, first bool) bool {
+ if first {
+ if !yaml_emitter_write_indicator(emitter, []byte{'{'}, true, true, false) {
+ return false
+ }
+ if !yaml_emitter_increase_indent(emitter, true, false) {
+ return false
+ }
+ emitter.flow_level++
+ }
+
+ if event.typ == yaml_MAPPING_END_EVENT {
+ emitter.flow_level--
+ emitter.indent = emitter.indents[len(emitter.indents)-1]
+ emitter.indents = emitter.indents[:len(emitter.indents)-1]
+ if emitter.canonical && !first {
+ if !yaml_emitter_write_indicator(emitter, []byte{','}, false, false, false) {
+ return false
+ }
+ if !yaml_emitter_write_indent(emitter) {
+ return false
+ }
+ }
+ if !yaml_emitter_write_indicator(emitter, []byte{'}'}, false, false, false) {
+ return false
+ }
+ emitter.state = emitter.states[len(emitter.states)-1]
+ emitter.states = emitter.states[:len(emitter.states)-1]
+ return true
+ }
+
+ if !first {
+ if !yaml_emitter_write_indicator(emitter, []byte{','}, false, false, false) {
+ return false
+ }
+ }
+ if emitter.canonical || emitter.column > emitter.best_width {
+ if !yaml_emitter_write_indent(emitter) {
+ return false
+ }
+ }
+
+ if !emitter.canonical && yaml_emitter_check_simple_key(emitter) {
+ emitter.states = append(emitter.states, yaml_EMIT_FLOW_MAPPING_SIMPLE_VALUE_STATE)
+ return yaml_emitter_emit_node(emitter, event, false, false, true, true)
+ }
+ if !yaml_emitter_write_indicator(emitter, []byte{'?'}, true, false, false) {
+ return false
+ }
+ emitter.states = append(emitter.states, yaml_EMIT_FLOW_MAPPING_VALUE_STATE)
+ return yaml_emitter_emit_node(emitter, event, false, false, true, false)
+}
+
+// Expect a flow value node.
+func yaml_emitter_emit_flow_mapping_value(emitter *yaml_emitter_t, event *yaml_event_t, simple bool) bool {
+ if simple {
+ if !yaml_emitter_write_indicator(emitter, []byte{':'}, false, false, false) {
+ return false
+ }
+ } else {
+ if emitter.canonical || emitter.column > emitter.best_width {
+ if !yaml_emitter_write_indent(emitter) {
+ return false
+ }
+ }
+ if !yaml_emitter_write_indicator(emitter, []byte{':'}, true, false, false) {
+ return false
+ }
+ }
+ emitter.states = append(emitter.states, yaml_EMIT_FLOW_MAPPING_KEY_STATE)
+ return yaml_emitter_emit_node(emitter, event, false, false, true, false)
+}
+
+// Expect a block item node.
+func yaml_emitter_emit_block_sequence_item(emitter *yaml_emitter_t, event *yaml_event_t, first bool) bool {
+ if first {
+ if !yaml_emitter_increase_indent(emitter, false, emitter.mapping_context && !emitter.indention) {
+ return false
+ }
+ }
+ if event.typ == yaml_SEQUENCE_END_EVENT {
+ emitter.indent = emitter.indents[len(emitter.indents)-1]
+ emitter.indents = emitter.indents[:len(emitter.indents)-1]
+ emitter.state = emitter.states[len(emitter.states)-1]
+ emitter.states = emitter.states[:len(emitter.states)-1]
+ return true
+ }
+ if !yaml_emitter_write_indent(emitter) {
+ return false
+ }
+ if !yaml_emitter_write_indicator(emitter, []byte{'-'}, true, false, true) {
+ return false
+ }
+ emitter.states = append(emitter.states, yaml_EMIT_BLOCK_SEQUENCE_ITEM_STATE)
+ return yaml_emitter_emit_node(emitter, event, false, true, false, false)
+}
+
+// Expect a block key node.
+func yaml_emitter_emit_block_mapping_key(emitter *yaml_emitter_t, event *yaml_event_t, first bool) bool {
+ if first {
+ if !yaml_emitter_increase_indent(emitter, false, false) {
+ return false
+ }
+ }
+ if event.typ == yaml_MAPPING_END_EVENT {
+ emitter.indent = emitter.indents[len(emitter.indents)-1]
+ emitter.indents = emitter.indents[:len(emitter.indents)-1]
+ emitter.state = emitter.states[len(emitter.states)-1]
+ emitter.states = emitter.states[:len(emitter.states)-1]
+ return true
+ }
+ if !yaml_emitter_write_indent(emitter) {
+ return false
+ }
+ if yaml_emitter_check_simple_key(emitter) {
+ emitter.states = append(emitter.states, yaml_EMIT_BLOCK_MAPPING_SIMPLE_VALUE_STATE)
+ return yaml_emitter_emit_node(emitter, event, false, false, true, true)
+ }
+ if !yaml_emitter_write_indicator(emitter, []byte{'?'}, true, false, true) {
+ return false
+ }
+ emitter.states = append(emitter.states, yaml_EMIT_BLOCK_MAPPING_VALUE_STATE)
+ return yaml_emitter_emit_node(emitter, event, false, false, true, false)
+}
+
+// Expect a block value node.
+func yaml_emitter_emit_block_mapping_value(emitter *yaml_emitter_t, event *yaml_event_t, simple bool) bool {
+ if simple {
+ if !yaml_emitter_write_indicator(emitter, []byte{':'}, false, false, false) {
+ return false
+ }
+ } else {
+ if !yaml_emitter_write_indent(emitter) {
+ return false
+ }
+ if !yaml_emitter_write_indicator(emitter, []byte{':'}, true, false, true) {
+ return false
+ }
+ }
+ emitter.states = append(emitter.states, yaml_EMIT_BLOCK_MAPPING_KEY_STATE)
+ return yaml_emitter_emit_node(emitter, event, false, false, true, false)
+}
+
+// Expect a node.
+func yaml_emitter_emit_node(emitter *yaml_emitter_t, event *yaml_event_t,
+ root bool, sequence bool, mapping bool, simple_key bool) bool {
+
+ emitter.root_context = root
+ emitter.sequence_context = sequence
+ emitter.mapping_context = mapping
+ emitter.simple_key_context = simple_key
+
+ switch event.typ {
+ case yaml_ALIAS_EVENT:
+ return yaml_emitter_emit_alias(emitter, event)
+ case yaml_SCALAR_EVENT:
+ return yaml_emitter_emit_scalar(emitter, event)
+ case yaml_SEQUENCE_START_EVENT:
+ return yaml_emitter_emit_sequence_start(emitter, event)
+ case yaml_MAPPING_START_EVENT:
+ return yaml_emitter_emit_mapping_start(emitter, event)
+ default:
+ return yaml_emitter_set_emitter_error(emitter,
+ "expected SCALAR, SEQUENCE-START, MAPPING-START, or ALIAS")
+ }
+}
+
+// Expect ALIAS.
+func yaml_emitter_emit_alias(emitter *yaml_emitter_t, event *yaml_event_t) bool {
+ if !yaml_emitter_process_anchor(emitter) {
+ return false
+ }
+ emitter.state = emitter.states[len(emitter.states)-1]
+ emitter.states = emitter.states[:len(emitter.states)-1]
+ return true
+}
+
+// Expect SCALAR.
+func yaml_emitter_emit_scalar(emitter *yaml_emitter_t, event *yaml_event_t) bool {
+ if !yaml_emitter_select_scalar_style(emitter, event) {
+ return false
+ }
+ if !yaml_emitter_process_anchor(emitter) {
+ return false
+ }
+ if !yaml_emitter_process_tag(emitter) {
+ return false
+ }
+ if !yaml_emitter_increase_indent(emitter, true, false) {
+ return false
+ }
+ if !yaml_emitter_process_scalar(emitter) {
+ return false
+ }
+ emitter.indent = emitter.indents[len(emitter.indents)-1]
+ emitter.indents = emitter.indents[:len(emitter.indents)-1]
+ emitter.state = emitter.states[len(emitter.states)-1]
+ emitter.states = emitter.states[:len(emitter.states)-1]
+ return true
+}
+
+// Expect SEQUENCE-START.
+func yaml_emitter_emit_sequence_start(emitter *yaml_emitter_t, event *yaml_event_t) bool {
+ if !yaml_emitter_process_anchor(emitter) {
+ return false
+ }
+ if !yaml_emitter_process_tag(emitter) {
+ return false
+ }
+ if emitter.flow_level > 0 || emitter.canonical || event.sequence_style() == yaml_FLOW_SEQUENCE_STYLE ||
+ yaml_emitter_check_empty_sequence(emitter) {
+ emitter.state = yaml_EMIT_FLOW_SEQUENCE_FIRST_ITEM_STATE
+ } else {
+ emitter.state = yaml_EMIT_BLOCK_SEQUENCE_FIRST_ITEM_STATE
+ }
+ return true
+}
+
+// Expect MAPPING-START.
+func yaml_emitter_emit_mapping_start(emitter *yaml_emitter_t, event *yaml_event_t) bool {
+ if !yaml_emitter_process_anchor(emitter) {
+ return false
+ }
+ if !yaml_emitter_process_tag(emitter) {
+ return false
+ }
+ if emitter.flow_level > 0 || emitter.canonical || event.mapping_style() == yaml_FLOW_MAPPING_STYLE ||
+ yaml_emitter_check_empty_mapping(emitter) {
+ emitter.state = yaml_EMIT_FLOW_MAPPING_FIRST_KEY_STATE
+ } else {
+ emitter.state = yaml_EMIT_BLOCK_MAPPING_FIRST_KEY_STATE
+ }
+ return true
+}
+
+// Check if the document content is an empty scalar.
+func yaml_emitter_check_empty_document(emitter *yaml_emitter_t) bool {
+ return false // [Go] Huh?
+}
+
+// Check if the next events represent an empty sequence.
+func yaml_emitter_check_empty_sequence(emitter *yaml_emitter_t) bool {
+ if len(emitter.events)-emitter.events_head < 2 {
+ return false
+ }
+ return emitter.events[emitter.events_head].typ == yaml_SEQUENCE_START_EVENT &&
+ emitter.events[emitter.events_head+1].typ == yaml_SEQUENCE_END_EVENT
+}
+
+// Check if the next events represent an empty mapping.
+func yaml_emitter_check_empty_mapping(emitter *yaml_emitter_t) bool {
+ if len(emitter.events)-emitter.events_head < 2 {
+ return false
+ }
+ return emitter.events[emitter.events_head].typ == yaml_MAPPING_START_EVENT &&
+ emitter.events[emitter.events_head+1].typ == yaml_MAPPING_END_EVENT
+}
+
+// Check if the next node can be expressed as a simple key.
+func yaml_emitter_check_simple_key(emitter *yaml_emitter_t) bool {
+ length := 0
+ switch emitter.events[emitter.events_head].typ {
+ case yaml_ALIAS_EVENT:
+ length += len(emitter.anchor_data.anchor)
+ case yaml_SCALAR_EVENT:
+ if emitter.scalar_data.multiline {
+ return false
+ }
+ length += len(emitter.anchor_data.anchor) +
+ len(emitter.tag_data.handle) +
+ len(emitter.tag_data.suffix) +
+ len(emitter.scalar_data.value)
+ case yaml_SEQUENCE_START_EVENT:
+ if !yaml_emitter_check_empty_sequence(emitter) {
+ return false
+ }
+ length += len(emitter.anchor_data.anchor) +
+ len(emitter.tag_data.handle) +
+ len(emitter.tag_data.suffix)
+ case yaml_MAPPING_START_EVENT:
+ if !yaml_emitter_check_empty_mapping(emitter) {
+ return false
+ }
+ length += len(emitter.anchor_data.anchor) +
+ len(emitter.tag_data.handle) +
+ len(emitter.tag_data.suffix)
+ default:
+ return false
+ }
+ return length <= 128
+}
+
+// Determine an acceptable scalar style.
+func yaml_emitter_select_scalar_style(emitter *yaml_emitter_t, event *yaml_event_t) bool {
+
+ no_tag := len(emitter.tag_data.handle) == 0 && len(emitter.tag_data.suffix) == 0
+ if no_tag && !event.implicit && !event.quoted_implicit {
+ return yaml_emitter_set_emitter_error(emitter, "neither tag nor implicit flags are specified")
+ }
+
+ style := event.scalar_style()
+ if style == yaml_ANY_SCALAR_STYLE {
+ style = yaml_PLAIN_SCALAR_STYLE
+ }
+ if emitter.canonical {
+ style = yaml_DOUBLE_QUOTED_SCALAR_STYLE
+ }
+ if emitter.simple_key_context && emitter.scalar_data.multiline {
+ style = yaml_DOUBLE_QUOTED_SCALAR_STYLE
+ }
+
+ if style == yaml_PLAIN_SCALAR_STYLE {
+ if emitter.flow_level > 0 && !emitter.scalar_data.flow_plain_allowed ||
+ emitter.flow_level == 0 && !emitter.scalar_data.block_plain_allowed {
+ style = yaml_SINGLE_QUOTED_SCALAR_STYLE
+ }
+ if len(emitter.scalar_data.value) == 0 && (emitter.flow_level > 0 || emitter.simple_key_context) {
+ style = yaml_SINGLE_QUOTED_SCALAR_STYLE
+ }
+ if no_tag && !event.implicit {
+ style = yaml_SINGLE_QUOTED_SCALAR_STYLE
+ }
+ }
+ if style == yaml_SINGLE_QUOTED_SCALAR_STYLE {
+ if !emitter.scalar_data.single_quoted_allowed {
+ style = yaml_DOUBLE_QUOTED_SCALAR_STYLE
+ }
+ }
+ if style == yaml_LITERAL_SCALAR_STYLE || style == yaml_FOLDED_SCALAR_STYLE {
+ if !emitter.scalar_data.block_allowed || emitter.flow_level > 0 || emitter.simple_key_context {
+ style = yaml_DOUBLE_QUOTED_SCALAR_STYLE
+ }
+ }
+
+ if no_tag && !event.quoted_implicit && style != yaml_PLAIN_SCALAR_STYLE {
+ emitter.tag_data.handle = []byte{'!'}
+ }
+ emitter.scalar_data.style = style
+ return true
+}
+
+// Write an achor.
+func yaml_emitter_process_anchor(emitter *yaml_emitter_t) bool {
+ if emitter.anchor_data.anchor == nil {
+ return true
+ }
+ c := []byte{'&'}
+ if emitter.anchor_data.alias {
+ c[0] = '*'
+ }
+ if !yaml_emitter_write_indicator(emitter, c, true, false, false) {
+ return false
+ }
+ return yaml_emitter_write_anchor(emitter, emitter.anchor_data.anchor)
+}
+
+// Write a tag.
+func yaml_emitter_process_tag(emitter *yaml_emitter_t) bool {
+ if len(emitter.tag_data.handle) == 0 && len(emitter.tag_data.suffix) == 0 {
+ return true
+ }
+ if len(emitter.tag_data.handle) > 0 {
+ if !yaml_emitter_write_tag_handle(emitter, emitter.tag_data.handle) {
+ return false
+ }
+ if len(emitter.tag_data.suffix) > 0 {
+ if !yaml_emitter_write_tag_content(emitter, emitter.tag_data.suffix, false) {
+ return false
+ }
+ }
+ } else {
+ // [Go] Allocate these slices elsewhere.
+ if !yaml_emitter_write_indicator(emitter, []byte("!<"), true, false, false) {
+ return false
+ }
+ if !yaml_emitter_write_tag_content(emitter, emitter.tag_data.suffix, false) {
+ return false
+ }
+ if !yaml_emitter_write_indicator(emitter, []byte{'>'}, false, false, false) {
+ return false
+ }
+ }
+ return true
+}
+
+// Write a scalar.
+func yaml_emitter_process_scalar(emitter *yaml_emitter_t) bool {
+ switch emitter.scalar_data.style {
+ case yaml_PLAIN_SCALAR_STYLE:
+ return yaml_emitter_write_plain_scalar(emitter, emitter.scalar_data.value, !emitter.simple_key_context)
+
+ case yaml_SINGLE_QUOTED_SCALAR_STYLE:
+ return yaml_emitter_write_single_quoted_scalar(emitter, emitter.scalar_data.value, !emitter.simple_key_context)
+
+ case yaml_DOUBLE_QUOTED_SCALAR_STYLE:
+ return yaml_emitter_write_double_quoted_scalar(emitter, emitter.scalar_data.value, !emitter.simple_key_context)
+
+ case yaml_LITERAL_SCALAR_STYLE:
+ return yaml_emitter_write_literal_scalar(emitter, emitter.scalar_data.value)
+
+ case yaml_FOLDED_SCALAR_STYLE:
+ return yaml_emitter_write_folded_scalar(emitter, emitter.scalar_data.value)
+ }
+ panic("unknown scalar style")
+}
+
+// Check if a %YAML directive is valid.
+func yaml_emitter_analyze_version_directive(emitter *yaml_emitter_t, version_directive *yaml_version_directive_t) bool {
+ if version_directive.major != 1 || version_directive.minor != 1 {
+ return yaml_emitter_set_emitter_error(emitter, "incompatible %YAML directive")
+ }
+ return true
+}
+
+// Check if a %TAG directive is valid.
+func yaml_emitter_analyze_tag_directive(emitter *yaml_emitter_t, tag_directive *yaml_tag_directive_t) bool {
+ handle := tag_directive.handle
+ prefix := tag_directive.prefix
+ if len(handle) == 0 {
+ return yaml_emitter_set_emitter_error(emitter, "tag handle must not be empty")
+ }
+ if handle[0] != '!' {
+ return yaml_emitter_set_emitter_error(emitter, "tag handle must start with '!'")
+ }
+ if handle[len(handle)-1] != '!' {
+ return yaml_emitter_set_emitter_error(emitter, "tag handle must end with '!'")
+ }
+ for i := 1; i < len(handle)-1; i += width(handle[i]) {
+ if !is_alpha(handle, i) {
+ return yaml_emitter_set_emitter_error(emitter, "tag handle must contain alphanumerical characters only")
+ }
+ }
+ if len(prefix) == 0 {
+ return yaml_emitter_set_emitter_error(emitter, "tag prefix must not be empty")
+ }
+ return true
+}
+
+// Check if an anchor is valid.
+func yaml_emitter_analyze_anchor(emitter *yaml_emitter_t, anchor []byte, alias bool) bool {
+ if len(anchor) == 0 {
+ problem := "anchor value must not be empty"
+ if alias {
+ problem = "alias value must not be empty"
+ }
+ return yaml_emitter_set_emitter_error(emitter, problem)
+ }
+ for i := 0; i < len(anchor); i += width(anchor[i]) {
+ if !is_alpha(anchor, i) {
+ problem := "anchor value must contain alphanumerical characters only"
+ if alias {
+ problem = "alias value must contain alphanumerical characters only"
+ }
+ return yaml_emitter_set_emitter_error(emitter, problem)
+ }
+ }
+ emitter.anchor_data.anchor = anchor
+ emitter.anchor_data.alias = alias
+ return true
+}
+
+// Check if a tag is valid.
+func yaml_emitter_analyze_tag(emitter *yaml_emitter_t, tag []byte) bool {
+ if len(tag) == 0 {
+ return yaml_emitter_set_emitter_error(emitter, "tag value must not be empty")
+ }
+ for i := 0; i < len(emitter.tag_directives); i++ {
+ tag_directive := &emitter.tag_directives[i]
+ if bytes.HasPrefix(tag, tag_directive.prefix) {
+ emitter.tag_data.handle = tag_directive.handle
+ emitter.tag_data.suffix = tag[len(tag_directive.prefix):]
+ return true
+ }
+ }
+ emitter.tag_data.suffix = tag
+ return true
+}
+
+// Check if a scalar is valid.
+func yaml_emitter_analyze_scalar(emitter *yaml_emitter_t, value []byte) bool {
+ var (
+ block_indicators = false
+ flow_indicators = false
+ line_breaks = false
+ special_characters = false
+
+ leading_space = false
+ leading_break = false
+ trailing_space = false
+ trailing_break = false
+ break_space = false
+ space_break = false
+
+ preceded_by_whitespace = false
+ followed_by_whitespace = false
+ previous_space = false
+ previous_break = false
+ )
+
+ emitter.scalar_data.value = value
+
+ if len(value) == 0 {
+ emitter.scalar_data.multiline = false
+ emitter.scalar_data.flow_plain_allowed = false
+ emitter.scalar_data.block_plain_allowed = true
+ emitter.scalar_data.single_quoted_allowed = true
+ emitter.scalar_data.block_allowed = false
+ return true
+ }
+
+ if len(value) >= 3 && ((value[0] == '-' && value[1] == '-' && value[2] == '-') || (value[0] == '.' && value[1] == '.' && value[2] == '.')) {
+ block_indicators = true
+ flow_indicators = true
+ }
+
+ preceded_by_whitespace = true
+ for i, w := 0, 0; i < len(value); i += w {
+ w = width(value[i])
+ followed_by_whitespace = i+w >= len(value) || is_blank(value, i+w)
+
+ if i == 0 {
+ switch value[i] {
+ case '#', ',', '[', ']', '{', '}', '&', '*', '!', '|', '>', '\'', '"', '%', '@', '`':
+ flow_indicators = true
+ block_indicators = true
+ case '?', ':':
+ flow_indicators = true
+ if followed_by_whitespace {
+ block_indicators = true
+ }
+ case '-':
+ if followed_by_whitespace {
+ flow_indicators = true
+ block_indicators = true
+ }
+ }
+ } else {
+ switch value[i] {
+ case ',', '?', '[', ']', '{', '}':
+ flow_indicators = true
+ case ':':
+ flow_indicators = true
+ if followed_by_whitespace {
+ block_indicators = true
+ }
+ case '#':
+ if preceded_by_whitespace {
+ flow_indicators = true
+ block_indicators = true
+ }
+ }
+ }
+
+ if !is_printable(value, i) || !is_ascii(value, i) && !emitter.unicode {
+ special_characters = true
+ }
+ if is_space(value, i) {
+ if i == 0 {
+ leading_space = true
+ }
+ if i+width(value[i]) == len(value) {
+ trailing_space = true
+ }
+ if previous_break {
+ break_space = true
+ }
+ previous_space = true
+ previous_break = false
+ } else if is_break(value, i) {
+ line_breaks = true
+ if i == 0 {
+ leading_break = true
+ }
+ if i+width(value[i]) == len(value) {
+ trailing_break = true
+ }
+ if previous_space {
+ space_break = true
+ }
+ previous_space = false
+ previous_break = true
+ } else {
+ previous_space = false
+ previous_break = false
+ }
+
+ // [Go]: Why 'z'? Couldn't be the end of the string as that's the loop condition.
+ preceded_by_whitespace = is_blankz(value, i)
+ }
+
+ emitter.scalar_data.multiline = line_breaks
+ emitter.scalar_data.flow_plain_allowed = true
+ emitter.scalar_data.block_plain_allowed = true
+ emitter.scalar_data.single_quoted_allowed = true
+ emitter.scalar_data.block_allowed = true
+
+ if leading_space || leading_break || trailing_space || trailing_break {
+ emitter.scalar_data.flow_plain_allowed = false
+ emitter.scalar_data.block_plain_allowed = false
+ }
+ if trailing_space {
+ emitter.scalar_data.block_allowed = false
+ }
+ if break_space {
+ emitter.scalar_data.flow_plain_allowed = false
+ emitter.scalar_data.block_plain_allowed = false
+ emitter.scalar_data.single_quoted_allowed = false
+ }
+ if space_break || special_characters {
+ emitter.scalar_data.flow_plain_allowed = false
+ emitter.scalar_data.block_plain_allowed = false
+ emitter.scalar_data.single_quoted_allowed = false
+ emitter.scalar_data.block_allowed = false
+ }
+ if line_breaks {
+ emitter.scalar_data.flow_plain_allowed = false
+ emitter.scalar_data.block_plain_allowed = false
+ }
+ if flow_indicators {
+ emitter.scalar_data.flow_plain_allowed = false
+ }
+ if block_indicators {
+ emitter.scalar_data.block_plain_allowed = false
+ }
+ return true
+}
+
+// Check if the event data is valid.
+func yaml_emitter_analyze_event(emitter *yaml_emitter_t, event *yaml_event_t) bool {
+
+ emitter.anchor_data.anchor = nil
+ emitter.tag_data.handle = nil
+ emitter.tag_data.suffix = nil
+ emitter.scalar_data.value = nil
+
+ switch event.typ {
+ case yaml_ALIAS_EVENT:
+ if !yaml_emitter_analyze_anchor(emitter, event.anchor, true) {
+ return false
+ }
+
+ case yaml_SCALAR_EVENT:
+ if len(event.anchor) > 0 {
+ if !yaml_emitter_analyze_anchor(emitter, event.anchor, false) {
+ return false
+ }
+ }
+ if len(event.tag) > 0 && (emitter.canonical || (!event.implicit && !event.quoted_implicit)) {
+ if !yaml_emitter_analyze_tag(emitter, event.tag) {
+ return false
+ }
+ }
+ if !yaml_emitter_analyze_scalar(emitter, event.value) {
+ return false
+ }
+
+ case yaml_SEQUENCE_START_EVENT:
+ if len(event.anchor) > 0 {
+ if !yaml_emitter_analyze_anchor(emitter, event.anchor, false) {
+ return false
+ }
+ }
+ if len(event.tag) > 0 && (emitter.canonical || !event.implicit) {
+ if !yaml_emitter_analyze_tag(emitter, event.tag) {
+ return false
+ }
+ }
+
+ case yaml_MAPPING_START_EVENT:
+ if len(event.anchor) > 0 {
+ if !yaml_emitter_analyze_anchor(emitter, event.anchor, false) {
+ return false
+ }
+ }
+ if len(event.tag) > 0 && (emitter.canonical || !event.implicit) {
+ if !yaml_emitter_analyze_tag(emitter, event.tag) {
+ return false
+ }
+ }
+ }
+ return true
+}
+
+// Write the BOM character.
+func yaml_emitter_write_bom(emitter *yaml_emitter_t) bool {
+ if !flush(emitter) {
+ return false
+ }
+ pos := emitter.buffer_pos
+ emitter.buffer[pos+0] = '\xEF'
+ emitter.buffer[pos+1] = '\xBB'
+ emitter.buffer[pos+2] = '\xBF'
+ emitter.buffer_pos += 3
+ return true
+}
+
+func yaml_emitter_write_indent(emitter *yaml_emitter_t) bool {
+ indent := emitter.indent
+ if indent < 0 {
+ indent = 0
+ }
+ if !emitter.indention || emitter.column > indent || (emitter.column == indent && !emitter.whitespace) {
+ if !put_break(emitter) {
+ return false
+ }
+ }
+ for emitter.column < indent {
+ if !put(emitter, ' ') {
+ return false
+ }
+ }
+ emitter.whitespace = true
+ emitter.indention = true
+ return true
+}
+
+func yaml_emitter_write_indicator(emitter *yaml_emitter_t, indicator []byte, need_whitespace, is_whitespace, is_indention bool) bool {
+ if need_whitespace && !emitter.whitespace {
+ if !put(emitter, ' ') {
+ return false
+ }
+ }
+ if !write_all(emitter, indicator) {
+ return false
+ }
+ emitter.whitespace = is_whitespace
+ emitter.indention = (emitter.indention && is_indention)
+ emitter.open_ended = false
+ return true
+}
+
+func yaml_emitter_write_anchor(emitter *yaml_emitter_t, value []byte) bool {
+ if !write_all(emitter, value) {
+ return false
+ }
+ emitter.whitespace = false
+ emitter.indention = false
+ return true
+}
+
+func yaml_emitter_write_tag_handle(emitter *yaml_emitter_t, value []byte) bool {
+ if !emitter.whitespace {
+ if !put(emitter, ' ') {
+ return false
+ }
+ }
+ if !write_all(emitter, value) {
+ return false
+ }
+ emitter.whitespace = false
+ emitter.indention = false
+ return true
+}
+
+func yaml_emitter_write_tag_content(emitter *yaml_emitter_t, value []byte, need_whitespace bool) bool {
+ if need_whitespace && !emitter.whitespace {
+ if !put(emitter, ' ') {
+ return false
+ }
+ }
+ for i := 0; i < len(value); {
+ var must_write bool
+ switch value[i] {
+ case ';', '/', '?', ':', '@', '&', '=', '+', '$', ',', '_', '.', '~', '*', '\'', '(', ')', '[', ']':
+ must_write = true
+ default:
+ must_write = is_alpha(value, i)
+ }
+ if must_write {
+ if !write(emitter, value, &i) {
+ return false
+ }
+ } else {
+ w := width(value[i])
+ for k := 0; k < w; k++ {
+ octet := value[i]
+ i++
+ if !put(emitter, '%') {
+ return false
+ }
+
+ c := octet >> 4
+ if c < 10 {
+ c += '0'
+ } else {
+ c += 'A' - 10
+ }
+ if !put(emitter, c) {
+ return false
+ }
+
+ c = octet & 0x0f
+ if c < 10 {
+ c += '0'
+ } else {
+ c += 'A' - 10
+ }
+ if !put(emitter, c) {
+ return false
+ }
+ }
+ }
+ }
+ emitter.whitespace = false
+ emitter.indention = false
+ return true
+}
+
+func yaml_emitter_write_plain_scalar(emitter *yaml_emitter_t, value []byte, allow_breaks bool) bool {
+ if !emitter.whitespace {
+ if !put(emitter, ' ') {
+ return false
+ }
+ }
+
+ spaces := false
+ breaks := false
+ for i := 0; i < len(value); {
+ if is_space(value, i) {
+ if allow_breaks && !spaces && emitter.column > emitter.best_width && !is_space(value, i+1) {
+ if !yaml_emitter_write_indent(emitter) {
+ return false
+ }
+ i += width(value[i])
+ } else {
+ if !write(emitter, value, &i) {
+ return false
+ }
+ }
+ spaces = true
+ } else if is_break(value, i) {
+ if !breaks && value[i] == '\n' {
+ if !put_break(emitter) {
+ return false
+ }
+ }
+ if !write_break(emitter, value, &i) {
+ return false
+ }
+ emitter.indention = true
+ breaks = true
+ } else {
+ if breaks {
+ if !yaml_emitter_write_indent(emitter) {
+ return false
+ }
+ }
+ if !write(emitter, value, &i) {
+ return false
+ }
+ emitter.indention = false
+ spaces = false
+ breaks = false
+ }
+ }
+
+ emitter.whitespace = false
+ emitter.indention = false
+ if emitter.root_context {
+ emitter.open_ended = true
+ }
+
+ return true
+}
+
+func yaml_emitter_write_single_quoted_scalar(emitter *yaml_emitter_t, value []byte, allow_breaks bool) bool {
+
+ if !yaml_emitter_write_indicator(emitter, []byte{'\''}, true, false, false) {
+ return false
+ }
+
+ spaces := false
+ breaks := false
+ for i := 0; i < len(value); {
+ if is_space(value, i) {
+ if allow_breaks && !spaces && emitter.column > emitter.best_width && i > 0 && i < len(value)-1 && !is_space(value, i+1) {
+ if !yaml_emitter_write_indent(emitter) {
+ return false
+ }
+ i += width(value[i])
+ } else {
+ if !write(emitter, value, &i) {
+ return false
+ }
+ }
+ spaces = true
+ } else if is_break(value, i) {
+ if !breaks && value[i] == '\n' {
+ if !put_break(emitter) {
+ return false
+ }
+ }
+ if !write_break(emitter, value, &i) {
+ return false
+ }
+ emitter.indention = true
+ breaks = true
+ } else {
+ if breaks {
+ if !yaml_emitter_write_indent(emitter) {
+ return false
+ }
+ }
+ if value[i] == '\'' {
+ if !put(emitter, '\'') {
+ return false
+ }
+ }
+ if !write(emitter, value, &i) {
+ return false
+ }
+ emitter.indention = false
+ spaces = false
+ breaks = false
+ }
+ }
+ if !yaml_emitter_write_indicator(emitter, []byte{'\''}, false, false, false) {
+ return false
+ }
+ emitter.whitespace = false
+ emitter.indention = false
+ return true
+}
+
+func yaml_emitter_write_double_quoted_scalar(emitter *yaml_emitter_t, value []byte, allow_breaks bool) bool {
+ spaces := false
+ if !yaml_emitter_write_indicator(emitter, []byte{'"'}, true, false, false) {
+ return false
+ }
+
+ for i := 0; i < len(value); {
+ if !is_printable(value, i) || (!emitter.unicode && !is_ascii(value, i)) ||
+ is_bom(value, i) || is_break(value, i) ||
+ value[i] == '"' || value[i] == '\\' {
+
+ octet := value[i]
+
+ var w int
+ var v rune
+ switch {
+ case octet&0x80 == 0x00:
+ w, v = 1, rune(octet&0x7F)
+ case octet&0xE0 == 0xC0:
+ w, v = 2, rune(octet&0x1F)
+ case octet&0xF0 == 0xE0:
+ w, v = 3, rune(octet&0x0F)
+ case octet&0xF8 == 0xF0:
+ w, v = 4, rune(octet&0x07)
+ }
+ for k := 1; k < w; k++ {
+ octet = value[i+k]
+ v = (v << 6) + (rune(octet) & 0x3F)
+ }
+ i += w
+
+ if !put(emitter, '\\') {
+ return false
+ }
+
+ var ok bool
+ switch v {
+ case 0x00:
+ ok = put(emitter, '0')
+ case 0x07:
+ ok = put(emitter, 'a')
+ case 0x08:
+ ok = put(emitter, 'b')
+ case 0x09:
+ ok = put(emitter, 't')
+ case 0x0A:
+ ok = put(emitter, 'n')
+ case 0x0b:
+ ok = put(emitter, 'v')
+ case 0x0c:
+ ok = put(emitter, 'f')
+ case 0x0d:
+ ok = put(emitter, 'r')
+ case 0x1b:
+ ok = put(emitter, 'e')
+ case 0x22:
+ ok = put(emitter, '"')
+ case 0x5c:
+ ok = put(emitter, '\\')
+ case 0x85:
+ ok = put(emitter, 'N')
+ case 0xA0:
+ ok = put(emitter, '_')
+ case 0x2028:
+ ok = put(emitter, 'L')
+ case 0x2029:
+ ok = put(emitter, 'P')
+ default:
+ if v <= 0xFF {
+ ok = put(emitter, 'x')
+ w = 2
+ } else if v <= 0xFFFF {
+ ok = put(emitter, 'u')
+ w = 4
+ } else {
+ ok = put(emitter, 'U')
+ w = 8
+ }
+ for k := (w - 1) * 4; ok && k >= 0; k -= 4 {
+ digit := byte((v >> uint(k)) & 0x0F)
+ if digit < 10 {
+ ok = put(emitter, digit+'0')
+ } else {
+ ok = put(emitter, digit+'A'-10)
+ }
+ }
+ }
+ if !ok {
+ return false
+ }
+ spaces = false
+ } else if is_space(value, i) {
+ if allow_breaks && !spaces && emitter.column > emitter.best_width && i > 0 && i < len(value)-1 {
+ if !yaml_emitter_write_indent(emitter) {
+ return false
+ }
+ if is_space(value, i+1) {
+ if !put(emitter, '\\') {
+ return false
+ }
+ }
+ i += width(value[i])
+ } else if !write(emitter, value, &i) {
+ return false
+ }
+ spaces = true
+ } else {
+ if !write(emitter, value, &i) {
+ return false
+ }
+ spaces = false
+ }
+ }
+ if !yaml_emitter_write_indicator(emitter, []byte{'"'}, false, false, false) {
+ return false
+ }
+ emitter.whitespace = false
+ emitter.indention = false
+ return true
+}
+
+func yaml_emitter_write_block_scalar_hints(emitter *yaml_emitter_t, value []byte) bool {
+ if is_space(value, 0) || is_break(value, 0) {
+ indent_hint := []byte{'0' + byte(emitter.best_indent)}
+ if !yaml_emitter_write_indicator(emitter, indent_hint, false, false, false) {
+ return false
+ }
+ }
+
+ emitter.open_ended = false
+
+ var chomp_hint [1]byte
+ if len(value) == 0 {
+ chomp_hint[0] = '-'
+ } else {
+ i := len(value) - 1
+ for value[i]&0xC0 == 0x80 {
+ i--
+ }
+ if !is_break(value, i) {
+ chomp_hint[0] = '-'
+ } else if i == 0 {
+ chomp_hint[0] = '+'
+ emitter.open_ended = true
+ } else {
+ i--
+ for value[i]&0xC0 == 0x80 {
+ i--
+ }
+ if is_break(value, i) {
+ chomp_hint[0] = '+'
+ emitter.open_ended = true
+ }
+ }
+ }
+ if chomp_hint[0] != 0 {
+ if !yaml_emitter_write_indicator(emitter, chomp_hint[:], false, false, false) {
+ return false
+ }
+ }
+ return true
+}
+
+func yaml_emitter_write_literal_scalar(emitter *yaml_emitter_t, value []byte) bool {
+ if !yaml_emitter_write_indicator(emitter, []byte{'|'}, true, false, false) {
+ return false
+ }
+ if !yaml_emitter_write_block_scalar_hints(emitter, value) {
+ return false
+ }
+ if !put_break(emitter) {
+ return false
+ }
+ emitter.indention = true
+ emitter.whitespace = true
+ breaks := true
+ for i := 0; i < len(value); {
+ if is_break(value, i) {
+ if !write_break(emitter, value, &i) {
+ return false
+ }
+ emitter.indention = true
+ breaks = true
+ } else {
+ if breaks {
+ if !yaml_emitter_write_indent(emitter) {
+ return false
+ }
+ }
+ if !write(emitter, value, &i) {
+ return false
+ }
+ emitter.indention = false
+ breaks = false
+ }
+ }
+
+ return true
+}
+
+func yaml_emitter_write_folded_scalar(emitter *yaml_emitter_t, value []byte) bool {
+ if !yaml_emitter_write_indicator(emitter, []byte{'>'}, true, false, false) {
+ return false
+ }
+ if !yaml_emitter_write_block_scalar_hints(emitter, value) {
+ return false
+ }
+
+ if !put_break(emitter) {
+ return false
+ }
+ emitter.indention = true
+ emitter.whitespace = true
+
+ breaks := true
+ leading_spaces := true
+ for i := 0; i < len(value); {
+ if is_break(value, i) {
+ if !breaks && !leading_spaces && value[i] == '\n' {
+ k := 0
+ for is_break(value, k) {
+ k += width(value[k])
+ }
+ if !is_blankz(value, k) {
+ if !put_break(emitter) {
+ return false
+ }
+ }
+ }
+ if !write_break(emitter, value, &i) {
+ return false
+ }
+ emitter.indention = true
+ breaks = true
+ } else {
+ if breaks {
+ if !yaml_emitter_write_indent(emitter) {
+ return false
+ }
+ leading_spaces = is_blank(value, i)
+ }
+ if !breaks && is_space(value, i) && !is_space(value, i+1) && emitter.column > emitter.best_width {
+ if !yaml_emitter_write_indent(emitter) {
+ return false
+ }
+ i += width(value[i])
+ } else {
+ if !write(emitter, value, &i) {
+ return false
+ }
+ }
+ emitter.indention = false
+ breaks = false
+ }
+ }
+ return true
+}
diff --git a/vendor/gopkg.in/yaml.v2/encode.go b/vendor/gopkg.in/yaml.v2/encode.go
new file mode 100644
index 0000000..84f8499
--- /dev/null
+++ b/vendor/gopkg.in/yaml.v2/encode.go
@@ -0,0 +1,306 @@
+package yaml
+
+import (
+ "encoding"
+ "fmt"
+ "reflect"
+ "regexp"
+ "sort"
+ "strconv"
+ "strings"
+ "time"
+)
+
+type encoder struct {
+ emitter yaml_emitter_t
+ event yaml_event_t
+ out []byte
+ flow bool
+}
+
+func newEncoder() (e *encoder) {
+ e = &encoder{}
+ e.must(yaml_emitter_initialize(&e.emitter))
+ yaml_emitter_set_output_string(&e.emitter, &e.out)
+ yaml_emitter_set_unicode(&e.emitter, true)
+ e.must(yaml_stream_start_event_initialize(&e.event, yaml_UTF8_ENCODING))
+ e.emit()
+ e.must(yaml_document_start_event_initialize(&e.event, nil, nil, true))
+ e.emit()
+ return e
+}
+
+func (e *encoder) finish() {
+ e.must(yaml_document_end_event_initialize(&e.event, true))
+ e.emit()
+ e.emitter.open_ended = false
+ e.must(yaml_stream_end_event_initialize(&e.event))
+ e.emit()
+}
+
+func (e *encoder) destroy() {
+ yaml_emitter_delete(&e.emitter)
+}
+
+func (e *encoder) emit() {
+ // This will internally delete the e.event value.
+ if !yaml_emitter_emit(&e.emitter, &e.event) && e.event.typ != yaml_DOCUMENT_END_EVENT && e.event.typ != yaml_STREAM_END_EVENT {
+ e.must(false)
+ }
+}
+
+func (e *encoder) must(ok bool) {
+ if !ok {
+ msg := e.emitter.problem
+ if msg == "" {
+ msg = "unknown problem generating YAML content"
+ }
+ failf("%s", msg)
+ }
+}
+
+func (e *encoder) marshal(tag string, in reflect.Value) {
+ if !in.IsValid() {
+ e.nilv()
+ return
+ }
+ iface := in.Interface()
+ if m, ok := iface.(Marshaler); ok {
+ v, err := m.MarshalYAML()
+ if err != nil {
+ fail(err)
+ }
+ if v == nil {
+ e.nilv()
+ return
+ }
+ in = reflect.ValueOf(v)
+ } else if m, ok := iface.(encoding.TextMarshaler); ok {
+ text, err := m.MarshalText()
+ if err != nil {
+ fail(err)
+ }
+ in = reflect.ValueOf(string(text))
+ }
+ switch in.Kind() {
+ case reflect.Interface:
+ if in.IsNil() {
+ e.nilv()
+ } else {
+ e.marshal(tag, in.Elem())
+ }
+ case reflect.Map:
+ e.mapv(tag, in)
+ case reflect.Ptr:
+ if in.IsNil() {
+ e.nilv()
+ } else {
+ e.marshal(tag, in.Elem())
+ }
+ case reflect.Struct:
+ e.structv(tag, in)
+ case reflect.Slice:
+ if in.Type().Elem() == mapItemType {
+ e.itemsv(tag, in)
+ } else {
+ e.slicev(tag, in)
+ }
+ case reflect.String:
+ e.stringv(tag, in)
+ case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
+ if in.Type() == durationType {
+ e.stringv(tag, reflect.ValueOf(iface.(time.Duration).String()))
+ } else {
+ e.intv(tag, in)
+ }
+ case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
+ e.uintv(tag, in)
+ case reflect.Float32, reflect.Float64:
+ e.floatv(tag, in)
+ case reflect.Bool:
+ e.boolv(tag, in)
+ default:
+ panic("cannot marshal type: " + in.Type().String())
+ }
+}
+
+func (e *encoder) mapv(tag string, in reflect.Value) {
+ e.mappingv(tag, func() {
+ keys := keyList(in.MapKeys())
+ sort.Sort(keys)
+ for _, k := range keys {
+ e.marshal("", k)
+ e.marshal("", in.MapIndex(k))
+ }
+ })
+}
+
+func (e *encoder) itemsv(tag string, in reflect.Value) {
+ e.mappingv(tag, func() {
+ slice := in.Convert(reflect.TypeOf([]MapItem{})).Interface().([]MapItem)
+ for _, item := range slice {
+ e.marshal("", reflect.ValueOf(item.Key))
+ e.marshal("", reflect.ValueOf(item.Value))
+ }
+ })
+}
+
+func (e *encoder) structv(tag string, in reflect.Value) {
+ sinfo, err := getStructInfo(in.Type())
+ if err != nil {
+ panic(err)
+ }
+ e.mappingv(tag, func() {
+ for _, info := range sinfo.FieldsList {
+ var value reflect.Value
+ if info.Inline == nil {
+ value = in.Field(info.Num)
+ } else {
+ value = in.FieldByIndex(info.Inline)
+ }
+ if info.OmitEmpty && isZero(value) {
+ continue
+ }
+ e.marshal("", reflect.ValueOf(info.Key))
+ e.flow = info.Flow
+ e.marshal("", value)
+ }
+ if sinfo.InlineMap >= 0 {
+ m := in.Field(sinfo.InlineMap)
+ if m.Len() > 0 {
+ e.flow = false
+ keys := keyList(m.MapKeys())
+ sort.Sort(keys)
+ for _, k := range keys {
+ if _, found := sinfo.FieldsMap[k.String()]; found {
+ panic(fmt.Sprintf("Can't have key %q in inlined map; conflicts with struct field", k.String()))
+ }
+ e.marshal("", k)
+ e.flow = false
+ e.marshal("", m.MapIndex(k))
+ }
+ }
+ }
+ })
+}
+
+func (e *encoder) mappingv(tag string, f func()) {
+ implicit := tag == ""
+ style := yaml_BLOCK_MAPPING_STYLE
+ if e.flow {
+ e.flow = false
+ style = yaml_FLOW_MAPPING_STYLE
+ }
+ e.must(yaml_mapping_start_event_initialize(&e.event, nil, []byte(tag), implicit, style))
+ e.emit()
+ f()
+ e.must(yaml_mapping_end_event_initialize(&e.event))
+ e.emit()
+}
+
+func (e *encoder) slicev(tag string, in reflect.Value) {
+ implicit := tag == ""
+ style := yaml_BLOCK_SEQUENCE_STYLE
+ if e.flow {
+ e.flow = false
+ style = yaml_FLOW_SEQUENCE_STYLE
+ }
+ e.must(yaml_sequence_start_event_initialize(&e.event, nil, []byte(tag), implicit, style))
+ e.emit()
+ n := in.Len()
+ for i := 0; i < n; i++ {
+ e.marshal("", in.Index(i))
+ }
+ e.must(yaml_sequence_end_event_initialize(&e.event))
+ e.emit()
+}
+
+// isBase60 returns whether s is in base 60 notation as defined in YAML 1.1.
+//
+// The base 60 float notation in YAML 1.1 is a terrible idea and is unsupported
+// in YAML 1.2 and by this package, but these should be marshalled quoted for
+// the time being for compatibility with other parsers.
+func isBase60Float(s string) (result bool) {
+ // Fast path.
+ if s == "" {
+ return false
+ }
+ c := s[0]
+ if !(c == '+' || c == '-' || c >= '0' && c <= '9') || strings.IndexByte(s, ':') < 0 {
+ return false
+ }
+ // Do the full match.
+ return base60float.MatchString(s)
+}
+
+// From http://yaml.org/type/float.html, except the regular expression there
+// is bogus. In practice parsers do not enforce the "\.[0-9_]*" suffix.
+var base60float = regexp.MustCompile(`^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+(?:\.[0-9_]*)?$`)
+
+func (e *encoder) stringv(tag string, in reflect.Value) {
+ var style yaml_scalar_style_t
+ s := in.String()
+ rtag, rs := resolve("", s)
+ if rtag == yaml_BINARY_TAG {
+ if tag == "" || tag == yaml_STR_TAG {
+ tag = rtag
+ s = rs.(string)
+ } else if tag == yaml_BINARY_TAG {
+ failf("explicitly tagged !!binary data must be base64-encoded")
+ } else {
+ failf("cannot marshal invalid UTF-8 data as %s", shortTag(tag))
+ }
+ }
+ if tag == "" && (rtag != yaml_STR_TAG || isBase60Float(s)) {
+ style = yaml_DOUBLE_QUOTED_SCALAR_STYLE
+ } else if strings.Contains(s, "\n") {
+ style = yaml_LITERAL_SCALAR_STYLE
+ } else {
+ style = yaml_PLAIN_SCALAR_STYLE
+ }
+ e.emitScalar(s, "", tag, style)
+}
+
+func (e *encoder) boolv(tag string, in reflect.Value) {
+ var s string
+ if in.Bool() {
+ s = "true"
+ } else {
+ s = "false"
+ }
+ e.emitScalar(s, "", tag, yaml_PLAIN_SCALAR_STYLE)
+}
+
+func (e *encoder) intv(tag string, in reflect.Value) {
+ s := strconv.FormatInt(in.Int(), 10)
+ e.emitScalar(s, "", tag, yaml_PLAIN_SCALAR_STYLE)
+}
+
+func (e *encoder) uintv(tag string, in reflect.Value) {
+ s := strconv.FormatUint(in.Uint(), 10)
+ e.emitScalar(s, "", tag, yaml_PLAIN_SCALAR_STYLE)
+}
+
+func (e *encoder) floatv(tag string, in reflect.Value) {
+ // FIXME: Handle 64 bits here.
+ s := strconv.FormatFloat(float64(in.Float()), 'g', -1, 32)
+ switch s {
+ case "+Inf":
+ s = ".inf"
+ case "-Inf":
+ s = "-.inf"
+ case "NaN":
+ s = ".nan"
+ }
+ e.emitScalar(s, "", tag, yaml_PLAIN_SCALAR_STYLE)
+}
+
+func (e *encoder) nilv() {
+ e.emitScalar("null", "", "", yaml_PLAIN_SCALAR_STYLE)
+}
+
+func (e *encoder) emitScalar(value, anchor, tag string, style yaml_scalar_style_t) {
+ implicit := tag == ""
+ e.must(yaml_scalar_event_initialize(&e.event, []byte(anchor), []byte(tag), []byte(value), implicit, implicit, style))
+ e.emit()
+}
diff --git a/vendor/gopkg.in/yaml.v2/encode_test.go b/vendor/gopkg.in/yaml.v2/encode_test.go
new file mode 100644
index 0000000..84099bd
--- /dev/null
+++ b/vendor/gopkg.in/yaml.v2/encode_test.go
@@ -0,0 +1,501 @@
+package yaml_test
+
+import (
+ "fmt"
+ "math"
+ "strconv"
+ "strings"
+ "time"
+
+ . "gopkg.in/check.v1"
+ "gopkg.in/yaml.v2"
+ "net"
+ "os"
+)
+
+var marshalIntTest = 123
+
+var marshalTests = []struct {
+ value interface{}
+ data string
+}{
+ {
+ nil,
+ "null\n",
+ }, {
+ &struct{}{},
+ "{}\n",
+ }, {
+ map[string]string{"v": "hi"},
+ "v: hi\n",
+ }, {
+ map[string]interface{}{"v": "hi"},
+ "v: hi\n",
+ }, {
+ map[string]string{"v": "true"},
+ "v: \"true\"\n",
+ }, {
+ map[string]string{"v": "false"},
+ "v: \"false\"\n",
+ }, {
+ map[string]interface{}{"v": true},
+ "v: true\n",
+ }, {
+ map[string]interface{}{"v": false},
+ "v: false\n",
+ }, {
+ map[string]interface{}{"v": 10},
+ "v: 10\n",
+ }, {
+ map[string]interface{}{"v": -10},
+ "v: -10\n",
+ }, {
+ map[string]uint{"v": 42},
+ "v: 42\n",
+ }, {
+ map[string]interface{}{"v": int64(4294967296)},
+ "v: 4294967296\n",
+ }, {
+ map[string]int64{"v": int64(4294967296)},
+ "v: 4294967296\n",
+ }, {
+ map[string]uint64{"v": 4294967296},
+ "v: 4294967296\n",
+ }, {
+ map[string]interface{}{"v": "10"},
+ "v: \"10\"\n",
+ }, {
+ map[string]interface{}{"v": 0.1},
+ "v: 0.1\n",
+ }, {
+ map[string]interface{}{"v": float64(0.1)},
+ "v: 0.1\n",
+ }, {
+ map[string]interface{}{"v": -0.1},
+ "v: -0.1\n",
+ }, {
+ map[string]interface{}{"v": math.Inf(+1)},
+ "v: .inf\n",
+ }, {
+ map[string]interface{}{"v": math.Inf(-1)},
+ "v: -.inf\n",
+ }, {
+ map[string]interface{}{"v": math.NaN()},
+ "v: .nan\n",
+ }, {
+ map[string]interface{}{"v": nil},
+ "v: null\n",
+ }, {
+ map[string]interface{}{"v": ""},
+ "v: \"\"\n",
+ }, {
+ map[string][]string{"v": []string{"A", "B"}},
+ "v:\n- A\n- B\n",
+ }, {
+ map[string][]string{"v": []string{"A", "B\nC"}},
+ "v:\n- A\n- |-\n B\n C\n",
+ }, {
+ map[string][]interface{}{"v": []interface{}{"A", 1, map[string][]int{"B": []int{2, 3}}}},
+ "v:\n- A\n- 1\n- B:\n - 2\n - 3\n",
+ }, {
+ map[string]interface{}{"a": map[interface{}]interface{}{"b": "c"}},
+ "a:\n b: c\n",
+ }, {
+ map[string]interface{}{"a": "-"},
+ "a: '-'\n",
+ },
+
+ // Simple values.
+ {
+ &marshalIntTest,
+ "123\n",
+ },
+
+ // Structures
+ {
+ &struct{ Hello string }{"world"},
+ "hello: world\n",
+ }, {
+ &struct {
+ A struct {
+ B string
+ }
+ }{struct{ B string }{"c"}},
+ "a:\n b: c\n",
+ }, {
+ &struct {
+ A *struct {
+ B string
+ }
+ }{&struct{ B string }{"c"}},
+ "a:\n b: c\n",
+ }, {
+ &struct {
+ A *struct {
+ B string
+ }
+ }{},
+ "a: null\n",
+ }, {
+ &struct{ A int }{1},
+ "a: 1\n",
+ }, {
+ &struct{ A []int }{[]int{1, 2}},
+ "a:\n- 1\n- 2\n",
+ }, {
+ &struct {
+ B int "a"
+ }{1},
+ "a: 1\n",
+ }, {
+ &struct{ A bool }{true},
+ "a: true\n",
+ },
+
+ // Conditional flag
+ {
+ &struct {
+ A int "a,omitempty"
+ B int "b,omitempty"
+ }{1, 0},
+ "a: 1\n",
+ }, {
+ &struct {
+ A int "a,omitempty"
+ B int "b,omitempty"
+ }{0, 0},
+ "{}\n",
+ }, {
+ &struct {
+ A *struct{ X, y int } "a,omitempty,flow"
+ }{&struct{ X, y int }{1, 2}},
+ "a: {x: 1}\n",
+ }, {
+ &struct {
+ A *struct{ X, y int } "a,omitempty,flow"
+ }{nil},
+ "{}\n",
+ }, {
+ &struct {
+ A *struct{ X, y int } "a,omitempty,flow"
+ }{&struct{ X, y int }{}},
+ "a: {x: 0}\n",
+ }, {
+ &struct {
+ A struct{ X, y int } "a,omitempty,flow"
+ }{struct{ X, y int }{1, 2}},
+ "a: {x: 1}\n",
+ }, {
+ &struct {
+ A struct{ X, y int } "a,omitempty,flow"
+ }{struct{ X, y int }{0, 1}},
+ "{}\n",
+ }, {
+ &struct {
+ A float64 "a,omitempty"
+ B float64 "b,omitempty"
+ }{1, 0},
+ "a: 1\n",
+ },
+
+ // Flow flag
+ {
+ &struct {
+ A []int "a,flow"
+ }{[]int{1, 2}},
+ "a: [1, 2]\n",
+ }, {
+ &struct {
+ A map[string]string "a,flow"
+ }{map[string]string{"b": "c", "d": "e"}},
+ "a: {b: c, d: e}\n",
+ }, {
+ &struct {
+ A struct {
+ B, D string
+ } "a,flow"
+ }{struct{ B, D string }{"c", "e"}},
+ "a: {b: c, d: e}\n",
+ },
+
+ // Unexported field
+ {
+ &struct {
+ u int
+ A int
+ }{0, 1},
+ "a: 1\n",
+ },
+
+ // Ignored field
+ {
+ &struct {
+ A int
+ B int "-"
+ }{1, 2},
+ "a: 1\n",
+ },
+
+ // Struct inlining
+ {
+ &struct {
+ A int
+ C inlineB `yaml:",inline"`
+ }{1, inlineB{2, inlineC{3}}},
+ "a: 1\nb: 2\nc: 3\n",
+ },
+
+ // Map inlining
+ {
+ &struct {
+ A int
+ C map[string]int `yaml:",inline"`
+ }{1, map[string]int{"b": 2, "c": 3}},
+ "a: 1\nb: 2\nc: 3\n",
+ },
+
+ // Duration
+ {
+ map[string]time.Duration{"a": 3 * time.Second},
+ "a: 3s\n",
+ },
+
+ // Issue #24: bug in map merging logic.
+ {
+ map[string]string{"a": ""},
+ "a: \n",
+ },
+
+ // Issue #34: marshal unsupported base 60 floats quoted for compatibility
+ // with old YAML 1.1 parsers.
+ {
+ map[string]string{"a": "1:1"},
+ "a: \"1:1\"\n",
+ },
+
+ // Binary data.
+ {
+ map[string]string{"a": "\x00"},
+ "a: \"\\0\"\n",
+ }, {
+ map[string]string{"a": "\x80\x81\x82"},
+ "a: !!binary gIGC\n",
+ }, {
+ map[string]string{"a": strings.Repeat("\x90", 54)},
+ "a: !!binary |\n " + strings.Repeat("kJCQ", 17) + "kJ\n CQ\n",
+ },
+
+ // Ordered maps.
+ {
+ &yaml.MapSlice{{"b", 2}, {"a", 1}, {"d", 4}, {"c", 3}, {"sub", yaml.MapSlice{{"e", 5}}}},
+ "b: 2\na: 1\nd: 4\nc: 3\nsub:\n e: 5\n",
+ },
+
+ // Encode unicode as utf-8 rather than in escaped form.
+ {
+ map[string]string{"a": "你好"},
+ "a: 你好\n",
+ },
+
+ // Support encoding.TextMarshaler.
+ {
+ map[string]net.IP{"a": net.IPv4(1, 2, 3, 4)},
+ "a: 1.2.3.4\n",
+ },
+ {
+ map[string]time.Time{"a": time.Unix(1424801979, 0)},
+ "a: 2015-02-24T18:19:39Z\n",
+ },
+
+ // Ensure strings containing ": " are quoted (reported as PR #43, but not reproducible).
+ {
+ map[string]string{"a": "b: c"},
+ "a: 'b: c'\n",
+ },
+
+ // Containing hash mark ('#') in string should be quoted
+ {
+ map[string]string{"a": "Hello #comment"},
+ "a: 'Hello #comment'\n",
+ },
+ {
+ map[string]string{"a": "你好 #comment"},
+ "a: '你好 #comment'\n",
+ },
+}
+
+func (s *S) TestMarshal(c *C) {
+ defer os.Setenv("TZ", os.Getenv("TZ"))
+ os.Setenv("TZ", "UTC")
+ for _, item := range marshalTests {
+ data, err := yaml.Marshal(item.value)
+ c.Assert(err, IsNil)
+ c.Assert(string(data), Equals, item.data)
+ }
+}
+
+var marshalErrorTests = []struct {
+ value interface{}
+ error string
+ panic string
+}{{
+ value: &struct {
+ B int
+ inlineB ",inline"
+ }{1, inlineB{2, inlineC{3}}},
+ panic: `Duplicated key 'b' in struct struct \{ B int; .*`,
+}, {
+ value: &struct {
+ A int
+ B map[string]int ",inline"
+ }{1, map[string]int{"a": 2}},
+ panic: `Can't have key "a" in inlined map; conflicts with struct field`,
+}}
+
+func (s *S) TestMarshalErrors(c *C) {
+ for _, item := range marshalErrorTests {
+ if item.panic != "" {
+ c.Assert(func() { yaml.Marshal(item.value) }, PanicMatches, item.panic)
+ } else {
+ _, err := yaml.Marshal(item.value)
+ c.Assert(err, ErrorMatches, item.error)
+ }
+ }
+}
+
+func (s *S) TestMarshalTypeCache(c *C) {
+ var data []byte
+ var err error
+ func() {
+ type T struct{ A int }
+ data, err = yaml.Marshal(&T{})
+ c.Assert(err, IsNil)
+ }()
+ func() {
+ type T struct{ B int }
+ data, err = yaml.Marshal(&T{})
+ c.Assert(err, IsNil)
+ }()
+ c.Assert(string(data), Equals, "b: 0\n")
+}
+
+var marshalerTests = []struct {
+ data string
+ value interface{}
+}{
+ {"_:\n hi: there\n", map[interface{}]interface{}{"hi": "there"}},
+ {"_:\n- 1\n- A\n", []interface{}{1, "A"}},
+ {"_: 10\n", 10},
+ {"_: null\n", nil},
+ {"_: BAR!\n", "BAR!"},
+}
+
+type marshalerType struct {
+ value interface{}
+}
+
+func (o marshalerType) MarshalText() ([]byte, error) {
+ panic("MarshalText called on type with MarshalYAML")
+}
+
+func (o marshalerType) MarshalYAML() (interface{}, error) {
+ return o.value, nil
+}
+
+type marshalerValue struct {
+ Field marshalerType "_"
+}
+
+func (s *S) TestMarshaler(c *C) {
+ for _, item := range marshalerTests {
+ obj := &marshalerValue{}
+ obj.Field.value = item.value
+ data, err := yaml.Marshal(obj)
+ c.Assert(err, IsNil)
+ c.Assert(string(data), Equals, string(item.data))
+ }
+}
+
+func (s *S) TestMarshalerWholeDocument(c *C) {
+ obj := &marshalerType{}
+ obj.value = map[string]string{"hello": "world!"}
+ data, err := yaml.Marshal(obj)
+ c.Assert(err, IsNil)
+ c.Assert(string(data), Equals, "hello: world!\n")
+}
+
+type failingMarshaler struct{}
+
+func (ft *failingMarshaler) MarshalYAML() (interface{}, error) {
+ return nil, failingErr
+}
+
+func (s *S) TestMarshalerError(c *C) {
+ _, err := yaml.Marshal(&failingMarshaler{})
+ c.Assert(err, Equals, failingErr)
+}
+
+func (s *S) TestSortedOutput(c *C) {
+ order := []interface{}{
+ false,
+ true,
+ 1,
+ uint(1),
+ 1.0,
+ 1.1,
+ 1.2,
+ 2,
+ uint(2),
+ 2.0,
+ 2.1,
+ "",
+ ".1",
+ ".2",
+ ".a",
+ "1",
+ "2",
+ "a!10",
+ "a/2",
+ "a/10",
+ "a~10",
+ "ab/1",
+ "b/1",
+ "b/01",
+ "b/2",
+ "b/02",
+ "b/3",
+ "b/03",
+ "b1",
+ "b01",
+ "b3",
+ "c2.10",
+ "c10.2",
+ "d1",
+ "d12",
+ "d12a",
+ }
+ m := make(map[interface{}]int)
+ for _, k := range order {
+ m[k] = 1
+ }
+ data, err := yaml.Marshal(m)
+ c.Assert(err, IsNil)
+ out := "\n" + string(data)
+ last := 0
+ for i, k := range order {
+ repr := fmt.Sprint(k)
+ if s, ok := k.(string); ok {
+ if _, err = strconv.ParseFloat(repr, 32); s == "" || err == nil {
+ repr = `"` + repr + `"`
+ }
+ }
+ index := strings.Index(out, "\n"+repr+":")
+ if index == -1 {
+ c.Fatalf("%#v is not in the output: %#v", k, out)
+ }
+ if index < last {
+ c.Fatalf("%#v was generated before %#v: %q", k, order[i-1], out)
+ }
+ last = index
+ }
+}
diff --git a/vendor/gopkg.in/yaml.v2/example_embedded_test.go b/vendor/gopkg.in/yaml.v2/example_embedded_test.go
new file mode 100644
index 0000000..171c093
--- /dev/null
+++ b/vendor/gopkg.in/yaml.v2/example_embedded_test.go
@@ -0,0 +1,41 @@
+package yaml_test
+
+import (
+ "fmt"
+ "log"
+
+ "gopkg.in/yaml.v2"
+)
+
+// An example showing how to unmarshal embedded
+// structs from YAML.
+
+type StructA struct {
+ A string `yaml:"a"`
+}
+
+type StructB struct {
+ // Embedded structs are not treated as embedded in YAML by default. To do that,
+ // add the ",inline" annotation below
+ StructA `yaml:",inline"`
+ B string `yaml:"b"`
+}
+
+var data = `
+a: a string from struct A
+b: a string from struct B
+`
+
+func ExampleUnmarshal_embedded() {
+ var b StructB
+
+ err := yaml.Unmarshal([]byte(data), &b)
+ if err != nil {
+ log.Fatalf("cannot unmarshal data: %v", err)
+ }
+ fmt.Println(b.A)
+ fmt.Println(b.B)
+ // Output:
+ // a string from struct A
+ // a string from struct B
+}
diff --git a/vendor/gopkg.in/yaml.v2/parserc.go b/vendor/gopkg.in/yaml.v2/parserc.go
new file mode 100644
index 0000000..81d05df
--- /dev/null
+++ b/vendor/gopkg.in/yaml.v2/parserc.go
@@ -0,0 +1,1095 @@
+package yaml
+
+import (
+ "bytes"
+)
+
+// The parser implements the following grammar:
+//
+// stream ::= STREAM-START implicit_document? explicit_document* STREAM-END
+// implicit_document ::= block_node DOCUMENT-END*
+// explicit_document ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END*
+// block_node_or_indentless_sequence ::=
+// ALIAS
+// | properties (block_content | indentless_block_sequence)?
+// | block_content
+// | indentless_block_sequence
+// block_node ::= ALIAS
+// | properties block_content?
+// | block_content
+// flow_node ::= ALIAS
+// | properties flow_content?
+// | flow_content
+// properties ::= TAG ANCHOR? | ANCHOR TAG?
+// block_content ::= block_collection | flow_collection | SCALAR
+// flow_content ::= flow_collection | SCALAR
+// block_collection ::= block_sequence | block_mapping
+// flow_collection ::= flow_sequence | flow_mapping
+// block_sequence ::= BLOCK-SEQUENCE-START (BLOCK-ENTRY block_node?)* BLOCK-END
+// indentless_sequence ::= (BLOCK-ENTRY block_node?)+
+// block_mapping ::= BLOCK-MAPPING_START
+// ((KEY block_node_or_indentless_sequence?)?
+// (VALUE block_node_or_indentless_sequence?)?)*
+// BLOCK-END
+// flow_sequence ::= FLOW-SEQUENCE-START
+// (flow_sequence_entry FLOW-ENTRY)*
+// flow_sequence_entry?
+// FLOW-SEQUENCE-END
+// flow_sequence_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)?
+// flow_mapping ::= FLOW-MAPPING-START
+// (flow_mapping_entry FLOW-ENTRY)*
+// flow_mapping_entry?
+// FLOW-MAPPING-END
+// flow_mapping_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)?
+
+// Peek the next token in the token queue.
+func peek_token(parser *yaml_parser_t) *yaml_token_t {
+ if parser.token_available || yaml_parser_fetch_more_tokens(parser) {
+ return &parser.tokens[parser.tokens_head]
+ }
+ return nil
+}
+
+// Remove the next token from the queue (must be called after peek_token).
+func skip_token(parser *yaml_parser_t) {
+ parser.token_available = false
+ parser.tokens_parsed++
+ parser.stream_end_produced = parser.tokens[parser.tokens_head].typ == yaml_STREAM_END_TOKEN
+ parser.tokens_head++
+}
+
+// Get the next event.
+func yaml_parser_parse(parser *yaml_parser_t, event *yaml_event_t) bool {
+ // Erase the event object.
+ *event = yaml_event_t{}
+
+ // No events after the end of the stream or error.
+ if parser.stream_end_produced || parser.error != yaml_NO_ERROR || parser.state == yaml_PARSE_END_STATE {
+ return true
+ }
+
+ // Generate the next event.
+ return yaml_parser_state_machine(parser, event)
+}
+
+// Set parser error.
+func yaml_parser_set_parser_error(parser *yaml_parser_t, problem string, problem_mark yaml_mark_t) bool {
+ parser.error = yaml_PARSER_ERROR
+ parser.problem = problem
+ parser.problem_mark = problem_mark
+ return false
+}
+
+func yaml_parser_set_parser_error_context(parser *yaml_parser_t, context string, context_mark yaml_mark_t, problem string, problem_mark yaml_mark_t) bool {
+ parser.error = yaml_PARSER_ERROR
+ parser.context = context
+ parser.context_mark = context_mark
+ parser.problem = problem
+ parser.problem_mark = problem_mark
+ return false
+}
+
+// State dispatcher.
+func yaml_parser_state_machine(parser *yaml_parser_t, event *yaml_event_t) bool {
+ //trace("yaml_parser_state_machine", "state:", parser.state.String())
+
+ switch parser.state {
+ case yaml_PARSE_STREAM_START_STATE:
+ return yaml_parser_parse_stream_start(parser, event)
+
+ case yaml_PARSE_IMPLICIT_DOCUMENT_START_STATE:
+ return yaml_parser_parse_document_start(parser, event, true)
+
+ case yaml_PARSE_DOCUMENT_START_STATE:
+ return yaml_parser_parse_document_start(parser, event, false)
+
+ case yaml_PARSE_DOCUMENT_CONTENT_STATE:
+ return yaml_parser_parse_document_content(parser, event)
+
+ case yaml_PARSE_DOCUMENT_END_STATE:
+ return yaml_parser_parse_document_end(parser, event)
+
+ case yaml_PARSE_BLOCK_NODE_STATE:
+ return yaml_parser_parse_node(parser, event, true, false)
+
+ case yaml_PARSE_BLOCK_NODE_OR_INDENTLESS_SEQUENCE_STATE:
+ return yaml_parser_parse_node(parser, event, true, true)
+
+ case yaml_PARSE_FLOW_NODE_STATE:
+ return yaml_parser_parse_node(parser, event, false, false)
+
+ case yaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE:
+ return yaml_parser_parse_block_sequence_entry(parser, event, true)
+
+ case yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE:
+ return yaml_parser_parse_block_sequence_entry(parser, event, false)
+
+ case yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE:
+ return yaml_parser_parse_indentless_sequence_entry(parser, event)
+
+ case yaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE:
+ return yaml_parser_parse_block_mapping_key(parser, event, true)
+
+ case yaml_PARSE_BLOCK_MAPPING_KEY_STATE:
+ return yaml_parser_parse_block_mapping_key(parser, event, false)
+
+ case yaml_PARSE_BLOCK_MAPPING_VALUE_STATE:
+ return yaml_parser_parse_block_mapping_value(parser, event)
+
+ case yaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE:
+ return yaml_parser_parse_flow_sequence_entry(parser, event, true)
+
+ case yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE:
+ return yaml_parser_parse_flow_sequence_entry(parser, event, false)
+
+ case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE:
+ return yaml_parser_parse_flow_sequence_entry_mapping_key(parser, event)
+
+ case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE:
+ return yaml_parser_parse_flow_sequence_entry_mapping_value(parser, event)
+
+ case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE:
+ return yaml_parser_parse_flow_sequence_entry_mapping_end(parser, event)
+
+ case yaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE:
+ return yaml_parser_parse_flow_mapping_key(parser, event, true)
+
+ case yaml_PARSE_FLOW_MAPPING_KEY_STATE:
+ return yaml_parser_parse_flow_mapping_key(parser, event, false)
+
+ case yaml_PARSE_FLOW_MAPPING_VALUE_STATE:
+ return yaml_parser_parse_flow_mapping_value(parser, event, false)
+
+ case yaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE:
+ return yaml_parser_parse_flow_mapping_value(parser, event, true)
+
+ default:
+ panic("invalid parser state")
+ }
+}
+
+// Parse the production:
+// stream ::= STREAM-START implicit_document? explicit_document* STREAM-END
+// ************
+func yaml_parser_parse_stream_start(parser *yaml_parser_t, event *yaml_event_t) bool {
+ token := peek_token(parser)
+ if token == nil {
+ return false
+ }
+ if token.typ != yaml_STREAM_START_TOKEN {
+ return yaml_parser_set_parser_error(parser, "did not find expected ", token.start_mark)
+ }
+ parser.state = yaml_PARSE_IMPLICIT_DOCUMENT_START_STATE
+ *event = yaml_event_t{
+ typ: yaml_STREAM_START_EVENT,
+ start_mark: token.start_mark,
+ end_mark: token.end_mark,
+ encoding: token.encoding,
+ }
+ skip_token(parser)
+ return true
+}
+
+// Parse the productions:
+// implicit_document ::= block_node DOCUMENT-END*
+// *
+// explicit_document ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END*
+// *************************
+func yaml_parser_parse_document_start(parser *yaml_parser_t, event *yaml_event_t, implicit bool) bool {
+
+ token := peek_token(parser)
+ if token == nil {
+ return false
+ }
+
+ // Parse extra document end indicators.
+ if !implicit {
+ for token.typ == yaml_DOCUMENT_END_TOKEN {
+ skip_token(parser)
+ token = peek_token(parser)
+ if token == nil {
+ return false
+ }
+ }
+ }
+
+ if implicit && token.typ != yaml_VERSION_DIRECTIVE_TOKEN &&
+ token.typ != yaml_TAG_DIRECTIVE_TOKEN &&
+ token.typ != yaml_DOCUMENT_START_TOKEN &&
+ token.typ != yaml_STREAM_END_TOKEN {
+ // Parse an implicit document.
+ if !yaml_parser_process_directives(parser, nil, nil) {
+ return false
+ }
+ parser.states = append(parser.states, yaml_PARSE_DOCUMENT_END_STATE)
+ parser.state = yaml_PARSE_BLOCK_NODE_STATE
+
+ *event = yaml_event_t{
+ typ: yaml_DOCUMENT_START_EVENT,
+ start_mark: token.start_mark,
+ end_mark: token.end_mark,
+ }
+
+ } else if token.typ != yaml_STREAM_END_TOKEN {
+ // Parse an explicit document.
+ var version_directive *yaml_version_directive_t
+ var tag_directives []yaml_tag_directive_t
+ start_mark := token.start_mark
+ if !yaml_parser_process_directives(parser, &version_directive, &tag_directives) {
+ return false
+ }
+ token = peek_token(parser)
+ if token == nil {
+ return false
+ }
+ if token.typ != yaml_DOCUMENT_START_TOKEN {
+ yaml_parser_set_parser_error(parser,
+ "did not find expected ", token.start_mark)
+ return false
+ }
+ parser.states = append(parser.states, yaml_PARSE_DOCUMENT_END_STATE)
+ parser.state = yaml_PARSE_DOCUMENT_CONTENT_STATE
+ end_mark := token.end_mark
+
+ *event = yaml_event_t{
+ typ: yaml_DOCUMENT_START_EVENT,
+ start_mark: start_mark,
+ end_mark: end_mark,
+ version_directive: version_directive,
+ tag_directives: tag_directives,
+ implicit: false,
+ }
+ skip_token(parser)
+
+ } else {
+ // Parse the stream end.
+ parser.state = yaml_PARSE_END_STATE
+ *event = yaml_event_t{
+ typ: yaml_STREAM_END_EVENT,
+ start_mark: token.start_mark,
+ end_mark: token.end_mark,
+ }
+ skip_token(parser)
+ }
+
+ return true
+}
+
+// Parse the productions:
+// explicit_document ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END*
+// ***********
+//
+func yaml_parser_parse_document_content(parser *yaml_parser_t, event *yaml_event_t) bool {
+ token := peek_token(parser)
+ if token == nil {
+ return false
+ }
+ if token.typ == yaml_VERSION_DIRECTIVE_TOKEN ||
+ token.typ == yaml_TAG_DIRECTIVE_TOKEN ||
+ token.typ == yaml_DOCUMENT_START_TOKEN ||
+ token.typ == yaml_DOCUMENT_END_TOKEN ||
+ token.typ == yaml_STREAM_END_TOKEN {
+ parser.state = parser.states[len(parser.states)-1]
+ parser.states = parser.states[:len(parser.states)-1]
+ return yaml_parser_process_empty_scalar(parser, event,
+ token.start_mark)
+ }
+ return yaml_parser_parse_node(parser, event, true, false)
+}
+
+// Parse the productions:
+// implicit_document ::= block_node DOCUMENT-END*
+// *************
+// explicit_document ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END*
+//
+func yaml_parser_parse_document_end(parser *yaml_parser_t, event *yaml_event_t) bool {
+ token := peek_token(parser)
+ if token == nil {
+ return false
+ }
+
+ start_mark := token.start_mark
+ end_mark := token.start_mark
+
+ implicit := true
+ if token.typ == yaml_DOCUMENT_END_TOKEN {
+ end_mark = token.end_mark
+ skip_token(parser)
+ implicit = false
+ }
+
+ parser.tag_directives = parser.tag_directives[:0]
+
+ parser.state = yaml_PARSE_DOCUMENT_START_STATE
+ *event = yaml_event_t{
+ typ: yaml_DOCUMENT_END_EVENT,
+ start_mark: start_mark,
+ end_mark: end_mark,
+ implicit: implicit,
+ }
+ return true
+}
+
+// Parse the productions:
+// block_node_or_indentless_sequence ::=
+// ALIAS
+// *****
+// | properties (block_content | indentless_block_sequence)?
+// ********** *
+// | block_content | indentless_block_sequence
+// *
+// block_node ::= ALIAS
+// *****
+// | properties block_content?
+// ********** *
+// | block_content
+// *
+// flow_node ::= ALIAS
+// *****
+// | properties flow_content?
+// ********** *
+// | flow_content
+// *
+// properties ::= TAG ANCHOR? | ANCHOR TAG?
+// *************************
+// block_content ::= block_collection | flow_collection | SCALAR
+// ******
+// flow_content ::= flow_collection | SCALAR
+// ******
+func yaml_parser_parse_node(parser *yaml_parser_t, event *yaml_event_t, block, indentless_sequence bool) bool {
+ //defer trace("yaml_parser_parse_node", "block:", block, "indentless_sequence:", indentless_sequence)()
+
+ token := peek_token(parser)
+ if token == nil {
+ return false
+ }
+
+ if token.typ == yaml_ALIAS_TOKEN {
+ parser.state = parser.states[len(parser.states)-1]
+ parser.states = parser.states[:len(parser.states)-1]
+ *event = yaml_event_t{
+ typ: yaml_ALIAS_EVENT,
+ start_mark: token.start_mark,
+ end_mark: token.end_mark,
+ anchor: token.value,
+ }
+ skip_token(parser)
+ return true
+ }
+
+ start_mark := token.start_mark
+ end_mark := token.start_mark
+
+ var tag_token bool
+ var tag_handle, tag_suffix, anchor []byte
+ var tag_mark yaml_mark_t
+ if token.typ == yaml_ANCHOR_TOKEN {
+ anchor = token.value
+ start_mark = token.start_mark
+ end_mark = token.end_mark
+ skip_token(parser)
+ token = peek_token(parser)
+ if token == nil {
+ return false
+ }
+ if token.typ == yaml_TAG_TOKEN {
+ tag_token = true
+ tag_handle = token.value
+ tag_suffix = token.suffix
+ tag_mark = token.start_mark
+ end_mark = token.end_mark
+ skip_token(parser)
+ token = peek_token(parser)
+ if token == nil {
+ return false
+ }
+ }
+ } else if token.typ == yaml_TAG_TOKEN {
+ tag_token = true
+ tag_handle = token.value
+ tag_suffix = token.suffix
+ start_mark = token.start_mark
+ tag_mark = token.start_mark
+ end_mark = token.end_mark
+ skip_token(parser)
+ token = peek_token(parser)
+ if token == nil {
+ return false
+ }
+ if token.typ == yaml_ANCHOR_TOKEN {
+ anchor = token.value
+ end_mark = token.end_mark
+ skip_token(parser)
+ token = peek_token(parser)
+ if token == nil {
+ return false
+ }
+ }
+ }
+
+ var tag []byte
+ if tag_token {
+ if len(tag_handle) == 0 {
+ tag = tag_suffix
+ tag_suffix = nil
+ } else {
+ for i := range parser.tag_directives {
+ if bytes.Equal(parser.tag_directives[i].handle, tag_handle) {
+ tag = append([]byte(nil), parser.tag_directives[i].prefix...)
+ tag = append(tag, tag_suffix...)
+ break
+ }
+ }
+ if len(tag) == 0 {
+ yaml_parser_set_parser_error_context(parser,
+ "while parsing a node", start_mark,
+ "found undefined tag handle", tag_mark)
+ return false
+ }
+ }
+ }
+
+ implicit := len(tag) == 0
+ if indentless_sequence && token.typ == yaml_BLOCK_ENTRY_TOKEN {
+ end_mark = token.end_mark
+ parser.state = yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE
+ *event = yaml_event_t{
+ typ: yaml_SEQUENCE_START_EVENT,
+ start_mark: start_mark,
+ end_mark: end_mark,
+ anchor: anchor,
+ tag: tag,
+ implicit: implicit,
+ style: yaml_style_t(yaml_BLOCK_SEQUENCE_STYLE),
+ }
+ return true
+ }
+ if token.typ == yaml_SCALAR_TOKEN {
+ var plain_implicit, quoted_implicit bool
+ end_mark = token.end_mark
+ if (len(tag) == 0 && token.style == yaml_PLAIN_SCALAR_STYLE) || (len(tag) == 1 && tag[0] == '!') {
+ plain_implicit = true
+ } else if len(tag) == 0 {
+ quoted_implicit = true
+ }
+ parser.state = parser.states[len(parser.states)-1]
+ parser.states = parser.states[:len(parser.states)-1]
+
+ *event = yaml_event_t{
+ typ: yaml_SCALAR_EVENT,
+ start_mark: start_mark,
+ end_mark: end_mark,
+ anchor: anchor,
+ tag: tag,
+ value: token.value,
+ implicit: plain_implicit,
+ quoted_implicit: quoted_implicit,
+ style: yaml_style_t(token.style),
+ }
+ skip_token(parser)
+ return true
+ }
+ if token.typ == yaml_FLOW_SEQUENCE_START_TOKEN {
+ // [Go] Some of the events below can be merged as they differ only on style.
+ end_mark = token.end_mark
+ parser.state = yaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE
+ *event = yaml_event_t{
+ typ: yaml_SEQUENCE_START_EVENT,
+ start_mark: start_mark,
+ end_mark: end_mark,
+ anchor: anchor,
+ tag: tag,
+ implicit: implicit,
+ style: yaml_style_t(yaml_FLOW_SEQUENCE_STYLE),
+ }
+ return true
+ }
+ if token.typ == yaml_FLOW_MAPPING_START_TOKEN {
+ end_mark = token.end_mark
+ parser.state = yaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE
+ *event = yaml_event_t{
+ typ: yaml_MAPPING_START_EVENT,
+ start_mark: start_mark,
+ end_mark: end_mark,
+ anchor: anchor,
+ tag: tag,
+ implicit: implicit,
+ style: yaml_style_t(yaml_FLOW_MAPPING_STYLE),
+ }
+ return true
+ }
+ if block && token.typ == yaml_BLOCK_SEQUENCE_START_TOKEN {
+ end_mark = token.end_mark
+ parser.state = yaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE
+ *event = yaml_event_t{
+ typ: yaml_SEQUENCE_START_EVENT,
+ start_mark: start_mark,
+ end_mark: end_mark,
+ anchor: anchor,
+ tag: tag,
+ implicit: implicit,
+ style: yaml_style_t(yaml_BLOCK_SEQUENCE_STYLE),
+ }
+ return true
+ }
+ if block && token.typ == yaml_BLOCK_MAPPING_START_TOKEN {
+ end_mark = token.end_mark
+ parser.state = yaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE
+ *event = yaml_event_t{
+ typ: yaml_MAPPING_START_EVENT,
+ start_mark: start_mark,
+ end_mark: end_mark,
+ anchor: anchor,
+ tag: tag,
+ implicit: implicit,
+ style: yaml_style_t(yaml_BLOCK_MAPPING_STYLE),
+ }
+ return true
+ }
+ if len(anchor) > 0 || len(tag) > 0 {
+ parser.state = parser.states[len(parser.states)-1]
+ parser.states = parser.states[:len(parser.states)-1]
+
+ *event = yaml_event_t{
+ typ: yaml_SCALAR_EVENT,
+ start_mark: start_mark,
+ end_mark: end_mark,
+ anchor: anchor,
+ tag: tag,
+ implicit: implicit,
+ quoted_implicit: false,
+ style: yaml_style_t(yaml_PLAIN_SCALAR_STYLE),
+ }
+ return true
+ }
+
+ context := "while parsing a flow node"
+ if block {
+ context = "while parsing a block node"
+ }
+ yaml_parser_set_parser_error_context(parser, context, start_mark,
+ "did not find expected node content", token.start_mark)
+ return false
+}
+
+// Parse the productions:
+// block_sequence ::= BLOCK-SEQUENCE-START (BLOCK-ENTRY block_node?)* BLOCK-END
+// ******************** *********** * *********
+//
+func yaml_parser_parse_block_sequence_entry(parser *yaml_parser_t, event *yaml_event_t, first bool) bool {
+ if first {
+ token := peek_token(parser)
+ parser.marks = append(parser.marks, token.start_mark)
+ skip_token(parser)
+ }
+
+ token := peek_token(parser)
+ if token == nil {
+ return false
+ }
+
+ if token.typ == yaml_BLOCK_ENTRY_TOKEN {
+ mark := token.end_mark
+ skip_token(parser)
+ token = peek_token(parser)
+ if token == nil {
+ return false
+ }
+ if token.typ != yaml_BLOCK_ENTRY_TOKEN && token.typ != yaml_BLOCK_END_TOKEN {
+ parser.states = append(parser.states, yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE)
+ return yaml_parser_parse_node(parser, event, true, false)
+ } else {
+ parser.state = yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE
+ return yaml_parser_process_empty_scalar(parser, event, mark)
+ }
+ }
+ if token.typ == yaml_BLOCK_END_TOKEN {
+ parser.state = parser.states[len(parser.states)-1]
+ parser.states = parser.states[:len(parser.states)-1]
+ parser.marks = parser.marks[:len(parser.marks)-1]
+
+ *event = yaml_event_t{
+ typ: yaml_SEQUENCE_END_EVENT,
+ start_mark: token.start_mark,
+ end_mark: token.end_mark,
+ }
+
+ skip_token(parser)
+ return true
+ }
+
+ context_mark := parser.marks[len(parser.marks)-1]
+ parser.marks = parser.marks[:len(parser.marks)-1]
+ return yaml_parser_set_parser_error_context(parser,
+ "while parsing a block collection", context_mark,
+ "did not find expected '-' indicator", token.start_mark)
+}
+
+// Parse the productions:
+// indentless_sequence ::= (BLOCK-ENTRY block_node?)+
+// *********** *
+func yaml_parser_parse_indentless_sequence_entry(parser *yaml_parser_t, event *yaml_event_t) bool {
+ token := peek_token(parser)
+ if token == nil {
+ return false
+ }
+
+ if token.typ == yaml_BLOCK_ENTRY_TOKEN {
+ mark := token.end_mark
+ skip_token(parser)
+ token = peek_token(parser)
+ if token == nil {
+ return false
+ }
+ if token.typ != yaml_BLOCK_ENTRY_TOKEN &&
+ token.typ != yaml_KEY_TOKEN &&
+ token.typ != yaml_VALUE_TOKEN &&
+ token.typ != yaml_BLOCK_END_TOKEN {
+ parser.states = append(parser.states, yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE)
+ return yaml_parser_parse_node(parser, event, true, false)
+ }
+ parser.state = yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE
+ return yaml_parser_process_empty_scalar(parser, event, mark)
+ }
+ parser.state = parser.states[len(parser.states)-1]
+ parser.states = parser.states[:len(parser.states)-1]
+
+ *event = yaml_event_t{
+ typ: yaml_SEQUENCE_END_EVENT,
+ start_mark: token.start_mark,
+ end_mark: token.start_mark, // [Go] Shouldn't this be token.end_mark?
+ }
+ return true
+}
+
+// Parse the productions:
+// block_mapping ::= BLOCK-MAPPING_START
+// *******************
+// ((KEY block_node_or_indentless_sequence?)?
+// *** *
+// (VALUE block_node_or_indentless_sequence?)?)*
+//
+// BLOCK-END
+// *********
+//
+func yaml_parser_parse_block_mapping_key(parser *yaml_parser_t, event *yaml_event_t, first bool) bool {
+ if first {
+ token := peek_token(parser)
+ parser.marks = append(parser.marks, token.start_mark)
+ skip_token(parser)
+ }
+
+ token := peek_token(parser)
+ if token == nil {
+ return false
+ }
+
+ if token.typ == yaml_KEY_TOKEN {
+ mark := token.end_mark
+ skip_token(parser)
+ token = peek_token(parser)
+ if token == nil {
+ return false
+ }
+ if token.typ != yaml_KEY_TOKEN &&
+ token.typ != yaml_VALUE_TOKEN &&
+ token.typ != yaml_BLOCK_END_TOKEN {
+ parser.states = append(parser.states, yaml_PARSE_BLOCK_MAPPING_VALUE_STATE)
+ return yaml_parser_parse_node(parser, event, true, true)
+ } else {
+ parser.state = yaml_PARSE_BLOCK_MAPPING_VALUE_STATE
+ return yaml_parser_process_empty_scalar(parser, event, mark)
+ }
+ } else if token.typ == yaml_BLOCK_END_TOKEN {
+ parser.state = parser.states[len(parser.states)-1]
+ parser.states = parser.states[:len(parser.states)-1]
+ parser.marks = parser.marks[:len(parser.marks)-1]
+ *event = yaml_event_t{
+ typ: yaml_MAPPING_END_EVENT,
+ start_mark: token.start_mark,
+ end_mark: token.end_mark,
+ }
+ skip_token(parser)
+ return true
+ }
+
+ context_mark := parser.marks[len(parser.marks)-1]
+ parser.marks = parser.marks[:len(parser.marks)-1]
+ return yaml_parser_set_parser_error_context(parser,
+ "while parsing a block mapping", context_mark,
+ "did not find expected key", token.start_mark)
+}
+
+// Parse the productions:
+// block_mapping ::= BLOCK-MAPPING_START
+//
+// ((KEY block_node_or_indentless_sequence?)?
+//
+// (VALUE block_node_or_indentless_sequence?)?)*
+// ***** *
+// BLOCK-END
+//
+//
+func yaml_parser_parse_block_mapping_value(parser *yaml_parser_t, event *yaml_event_t) bool {
+ token := peek_token(parser)
+ if token == nil {
+ return false
+ }
+ if token.typ == yaml_VALUE_TOKEN {
+ mark := token.end_mark
+ skip_token(parser)
+ token = peek_token(parser)
+ if token == nil {
+ return false
+ }
+ if token.typ != yaml_KEY_TOKEN &&
+ token.typ != yaml_VALUE_TOKEN &&
+ token.typ != yaml_BLOCK_END_TOKEN {
+ parser.states = append(parser.states, yaml_PARSE_BLOCK_MAPPING_KEY_STATE)
+ return yaml_parser_parse_node(parser, event, true, true)
+ }
+ parser.state = yaml_PARSE_BLOCK_MAPPING_KEY_STATE
+ return yaml_parser_process_empty_scalar(parser, event, mark)
+ }
+ parser.state = yaml_PARSE_BLOCK_MAPPING_KEY_STATE
+ return yaml_parser_process_empty_scalar(parser, event, token.start_mark)
+}
+
+// Parse the productions:
+// flow_sequence ::= FLOW-SEQUENCE-START
+// *******************
+// (flow_sequence_entry FLOW-ENTRY)*
+// * **********
+// flow_sequence_entry?
+// *
+// FLOW-SEQUENCE-END
+// *****************
+// flow_sequence_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)?
+// *
+//
+func yaml_parser_parse_flow_sequence_entry(parser *yaml_parser_t, event *yaml_event_t, first bool) bool {
+ if first {
+ token := peek_token(parser)
+ parser.marks = append(parser.marks, token.start_mark)
+ skip_token(parser)
+ }
+ token := peek_token(parser)
+ if token == nil {
+ return false
+ }
+ if token.typ != yaml_FLOW_SEQUENCE_END_TOKEN {
+ if !first {
+ if token.typ == yaml_FLOW_ENTRY_TOKEN {
+ skip_token(parser)
+ token = peek_token(parser)
+ if token == nil {
+ return false
+ }
+ } else {
+ context_mark := parser.marks[len(parser.marks)-1]
+ parser.marks = parser.marks[:len(parser.marks)-1]
+ return yaml_parser_set_parser_error_context(parser,
+ "while parsing a flow sequence", context_mark,
+ "did not find expected ',' or ']'", token.start_mark)
+ }
+ }
+
+ if token.typ == yaml_KEY_TOKEN {
+ parser.state = yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE
+ *event = yaml_event_t{
+ typ: yaml_MAPPING_START_EVENT,
+ start_mark: token.start_mark,
+ end_mark: token.end_mark,
+ implicit: true,
+ style: yaml_style_t(yaml_FLOW_MAPPING_STYLE),
+ }
+ skip_token(parser)
+ return true
+ } else if token.typ != yaml_FLOW_SEQUENCE_END_TOKEN {
+ parser.states = append(parser.states, yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE)
+ return yaml_parser_parse_node(parser, event, false, false)
+ }
+ }
+
+ parser.state = parser.states[len(parser.states)-1]
+ parser.states = parser.states[:len(parser.states)-1]
+ parser.marks = parser.marks[:len(parser.marks)-1]
+
+ *event = yaml_event_t{
+ typ: yaml_SEQUENCE_END_EVENT,
+ start_mark: token.start_mark,
+ end_mark: token.end_mark,
+ }
+
+ skip_token(parser)
+ return true
+}
+
+//
+// Parse the productions:
+// flow_sequence_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)?
+// *** *
+//
+func yaml_parser_parse_flow_sequence_entry_mapping_key(parser *yaml_parser_t, event *yaml_event_t) bool {
+ token := peek_token(parser)
+ if token == nil {
+ return false
+ }
+ if token.typ != yaml_VALUE_TOKEN &&
+ token.typ != yaml_FLOW_ENTRY_TOKEN &&
+ token.typ != yaml_FLOW_SEQUENCE_END_TOKEN {
+ parser.states = append(parser.states, yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE)
+ return yaml_parser_parse_node(parser, event, false, false)
+ }
+ mark := token.end_mark
+ skip_token(parser)
+ parser.state = yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE
+ return yaml_parser_process_empty_scalar(parser, event, mark)
+}
+
+// Parse the productions:
+// flow_sequence_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)?
+// ***** *
+//
+func yaml_parser_parse_flow_sequence_entry_mapping_value(parser *yaml_parser_t, event *yaml_event_t) bool {
+ token := peek_token(parser)
+ if token == nil {
+ return false
+ }
+ if token.typ == yaml_VALUE_TOKEN {
+ skip_token(parser)
+ token := peek_token(parser)
+ if token == nil {
+ return false
+ }
+ if token.typ != yaml_FLOW_ENTRY_TOKEN && token.typ != yaml_FLOW_SEQUENCE_END_TOKEN {
+ parser.states = append(parser.states, yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE)
+ return yaml_parser_parse_node(parser, event, false, false)
+ }
+ }
+ parser.state = yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE
+ return yaml_parser_process_empty_scalar(parser, event, token.start_mark)
+}
+
+// Parse the productions:
+// flow_sequence_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)?
+// *
+//
+func yaml_parser_parse_flow_sequence_entry_mapping_end(parser *yaml_parser_t, event *yaml_event_t) bool {
+ token := peek_token(parser)
+ if token == nil {
+ return false
+ }
+ parser.state = yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE
+ *event = yaml_event_t{
+ typ: yaml_MAPPING_END_EVENT,
+ start_mark: token.start_mark,
+ end_mark: token.start_mark, // [Go] Shouldn't this be end_mark?
+ }
+ return true
+}
+
+// Parse the productions:
+// flow_mapping ::= FLOW-MAPPING-START
+// ******************
+// (flow_mapping_entry FLOW-ENTRY)*
+// * **********
+// flow_mapping_entry?
+// ******************
+// FLOW-MAPPING-END
+// ****************
+// flow_mapping_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)?
+// * *** *
+//
+func yaml_parser_parse_flow_mapping_key(parser *yaml_parser_t, event *yaml_event_t, first bool) bool {
+ if first {
+ token := peek_token(parser)
+ parser.marks = append(parser.marks, token.start_mark)
+ skip_token(parser)
+ }
+
+ token := peek_token(parser)
+ if token == nil {
+ return false
+ }
+
+ if token.typ != yaml_FLOW_MAPPING_END_TOKEN {
+ if !first {
+ if token.typ == yaml_FLOW_ENTRY_TOKEN {
+ skip_token(parser)
+ token = peek_token(parser)
+ if token == nil {
+ return false
+ }
+ } else {
+ context_mark := parser.marks[len(parser.marks)-1]
+ parser.marks = parser.marks[:len(parser.marks)-1]
+ return yaml_parser_set_parser_error_context(parser,
+ "while parsing a flow mapping", context_mark,
+ "did not find expected ',' or '}'", token.start_mark)
+ }
+ }
+
+ if token.typ == yaml_KEY_TOKEN {
+ skip_token(parser)
+ token = peek_token(parser)
+ if token == nil {
+ return false
+ }
+ if token.typ != yaml_VALUE_TOKEN &&
+ token.typ != yaml_FLOW_ENTRY_TOKEN &&
+ token.typ != yaml_FLOW_MAPPING_END_TOKEN {
+ parser.states = append(parser.states, yaml_PARSE_FLOW_MAPPING_VALUE_STATE)
+ return yaml_parser_parse_node(parser, event, false, false)
+ } else {
+ parser.state = yaml_PARSE_FLOW_MAPPING_VALUE_STATE
+ return yaml_parser_process_empty_scalar(parser, event, token.start_mark)
+ }
+ } else if token.typ != yaml_FLOW_MAPPING_END_TOKEN {
+ parser.states = append(parser.states, yaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE)
+ return yaml_parser_parse_node(parser, event, false, false)
+ }
+ }
+
+ parser.state = parser.states[len(parser.states)-1]
+ parser.states = parser.states[:len(parser.states)-1]
+ parser.marks = parser.marks[:len(parser.marks)-1]
+ *event = yaml_event_t{
+ typ: yaml_MAPPING_END_EVENT,
+ start_mark: token.start_mark,
+ end_mark: token.end_mark,
+ }
+ skip_token(parser)
+ return true
+}
+
+// Parse the productions:
+// flow_mapping_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)?
+// * ***** *
+//
+func yaml_parser_parse_flow_mapping_value(parser *yaml_parser_t, event *yaml_event_t, empty bool) bool {
+ token := peek_token(parser)
+ if token == nil {
+ return false
+ }
+ if empty {
+ parser.state = yaml_PARSE_FLOW_MAPPING_KEY_STATE
+ return yaml_parser_process_empty_scalar(parser, event, token.start_mark)
+ }
+ if token.typ == yaml_VALUE_TOKEN {
+ skip_token(parser)
+ token = peek_token(parser)
+ if token == nil {
+ return false
+ }
+ if token.typ != yaml_FLOW_ENTRY_TOKEN && token.typ != yaml_FLOW_MAPPING_END_TOKEN {
+ parser.states = append(parser.states, yaml_PARSE_FLOW_MAPPING_KEY_STATE)
+ return yaml_parser_parse_node(parser, event, false, false)
+ }
+ }
+ parser.state = yaml_PARSE_FLOW_MAPPING_KEY_STATE
+ return yaml_parser_process_empty_scalar(parser, event, token.start_mark)
+}
+
+// Generate an empty scalar event.
+func yaml_parser_process_empty_scalar(parser *yaml_parser_t, event *yaml_event_t, mark yaml_mark_t) bool {
+ *event = yaml_event_t{
+ typ: yaml_SCALAR_EVENT,
+ start_mark: mark,
+ end_mark: mark,
+ value: nil, // Empty
+ implicit: true,
+ style: yaml_style_t(yaml_PLAIN_SCALAR_STYLE),
+ }
+ return true
+}
+
+var default_tag_directives = []yaml_tag_directive_t{
+ {[]byte("!"), []byte("!")},
+ {[]byte("!!"), []byte("tag:yaml.org,2002:")},
+}
+
+// Parse directives.
+func yaml_parser_process_directives(parser *yaml_parser_t,
+ version_directive_ref **yaml_version_directive_t,
+ tag_directives_ref *[]yaml_tag_directive_t) bool {
+
+ var version_directive *yaml_version_directive_t
+ var tag_directives []yaml_tag_directive_t
+
+ token := peek_token(parser)
+ if token == nil {
+ return false
+ }
+
+ for token.typ == yaml_VERSION_DIRECTIVE_TOKEN || token.typ == yaml_TAG_DIRECTIVE_TOKEN {
+ if token.typ == yaml_VERSION_DIRECTIVE_TOKEN {
+ if version_directive != nil {
+ yaml_parser_set_parser_error(parser,
+ "found duplicate %YAML directive", token.start_mark)
+ return false
+ }
+ if token.major != 1 || token.minor != 1 {
+ yaml_parser_set_parser_error(parser,
+ "found incompatible YAML document", token.start_mark)
+ return false
+ }
+ version_directive = &yaml_version_directive_t{
+ major: token.major,
+ minor: token.minor,
+ }
+ } else if token.typ == yaml_TAG_DIRECTIVE_TOKEN {
+ value := yaml_tag_directive_t{
+ handle: token.value,
+ prefix: token.prefix,
+ }
+ if !yaml_parser_append_tag_directive(parser, value, false, token.start_mark) {
+ return false
+ }
+ tag_directives = append(tag_directives, value)
+ }
+
+ skip_token(parser)
+ token = peek_token(parser)
+ if token == nil {
+ return false
+ }
+ }
+
+ for i := range default_tag_directives {
+ if !yaml_parser_append_tag_directive(parser, default_tag_directives[i], true, token.start_mark) {
+ return false
+ }
+ }
+
+ if version_directive_ref != nil {
+ *version_directive_ref = version_directive
+ }
+ if tag_directives_ref != nil {
+ *tag_directives_ref = tag_directives
+ }
+ return true
+}
+
+// Append a tag directive to the directives stack.
+func yaml_parser_append_tag_directive(parser *yaml_parser_t, value yaml_tag_directive_t, allow_duplicates bool, mark yaml_mark_t) bool {
+ for i := range parser.tag_directives {
+ if bytes.Equal(value.handle, parser.tag_directives[i].handle) {
+ if allow_duplicates {
+ return true
+ }
+ return yaml_parser_set_parser_error(parser, "found duplicate %TAG directive", mark)
+ }
+ }
+
+ // [Go] I suspect the copy is unnecessary. This was likely done
+ // because there was no way to track ownership of the data.
+ value_copy := yaml_tag_directive_t{
+ handle: make([]byte, len(value.handle)),
+ prefix: make([]byte, len(value.prefix)),
+ }
+ copy(value_copy.handle, value.handle)
+ copy(value_copy.prefix, value.prefix)
+ parser.tag_directives = append(parser.tag_directives, value_copy)
+ return true
+}
diff --git a/vendor/gopkg.in/yaml.v2/readerc.go b/vendor/gopkg.in/yaml.v2/readerc.go
new file mode 100644
index 0000000..f450791
--- /dev/null
+++ b/vendor/gopkg.in/yaml.v2/readerc.go
@@ -0,0 +1,394 @@
+package yaml
+
+import (
+ "io"
+)
+
+// Set the reader error and return 0.
+func yaml_parser_set_reader_error(parser *yaml_parser_t, problem string, offset int, value int) bool {
+ parser.error = yaml_READER_ERROR
+ parser.problem = problem
+ parser.problem_offset = offset
+ parser.problem_value = value
+ return false
+}
+
+// Byte order marks.
+const (
+ bom_UTF8 = "\xef\xbb\xbf"
+ bom_UTF16LE = "\xff\xfe"
+ bom_UTF16BE = "\xfe\xff"
+)
+
+// Determine the input stream encoding by checking the BOM symbol. If no BOM is
+// found, the UTF-8 encoding is assumed. Return 1 on success, 0 on failure.
+func yaml_parser_determine_encoding(parser *yaml_parser_t) bool {
+ // Ensure that we had enough bytes in the raw buffer.
+ for !parser.eof && len(parser.raw_buffer)-parser.raw_buffer_pos < 3 {
+ if !yaml_parser_update_raw_buffer(parser) {
+ return false
+ }
+ }
+
+ // Determine the encoding.
+ buf := parser.raw_buffer
+ pos := parser.raw_buffer_pos
+ avail := len(buf) - pos
+ if avail >= 2 && buf[pos] == bom_UTF16LE[0] && buf[pos+1] == bom_UTF16LE[1] {
+ parser.encoding = yaml_UTF16LE_ENCODING
+ parser.raw_buffer_pos += 2
+ parser.offset += 2
+ } else if avail >= 2 && buf[pos] == bom_UTF16BE[0] && buf[pos+1] == bom_UTF16BE[1] {
+ parser.encoding = yaml_UTF16BE_ENCODING
+ parser.raw_buffer_pos += 2
+ parser.offset += 2
+ } else if avail >= 3 && buf[pos] == bom_UTF8[0] && buf[pos+1] == bom_UTF8[1] && buf[pos+2] == bom_UTF8[2] {
+ parser.encoding = yaml_UTF8_ENCODING
+ parser.raw_buffer_pos += 3
+ parser.offset += 3
+ } else {
+ parser.encoding = yaml_UTF8_ENCODING
+ }
+ return true
+}
+
+// Update the raw buffer.
+func yaml_parser_update_raw_buffer(parser *yaml_parser_t) bool {
+ size_read := 0
+
+ // Return if the raw buffer is full.
+ if parser.raw_buffer_pos == 0 && len(parser.raw_buffer) == cap(parser.raw_buffer) {
+ return true
+ }
+
+ // Return on EOF.
+ if parser.eof {
+ return true
+ }
+
+ // Move the remaining bytes in the raw buffer to the beginning.
+ if parser.raw_buffer_pos > 0 && parser.raw_buffer_pos < len(parser.raw_buffer) {
+ copy(parser.raw_buffer, parser.raw_buffer[parser.raw_buffer_pos:])
+ }
+ parser.raw_buffer = parser.raw_buffer[:len(parser.raw_buffer)-parser.raw_buffer_pos]
+ parser.raw_buffer_pos = 0
+
+ // Call the read handler to fill the buffer.
+ size_read, err := parser.read_handler(parser, parser.raw_buffer[len(parser.raw_buffer):cap(parser.raw_buffer)])
+ parser.raw_buffer = parser.raw_buffer[:len(parser.raw_buffer)+size_read]
+ if err == io.EOF {
+ parser.eof = true
+ } else if err != nil {
+ return yaml_parser_set_reader_error(parser, "input error: "+err.Error(), parser.offset, -1)
+ }
+ return true
+}
+
+// Ensure that the buffer contains at least `length` characters.
+// Return true on success, false on failure.
+//
+// The length is supposed to be significantly less that the buffer size.
+func yaml_parser_update_buffer(parser *yaml_parser_t, length int) bool {
+ if parser.read_handler == nil {
+ panic("read handler must be set")
+ }
+
+ // If the EOF flag is set and the raw buffer is empty, do nothing.
+ if parser.eof && parser.raw_buffer_pos == len(parser.raw_buffer) {
+ return true
+ }
+
+ // Return if the buffer contains enough characters.
+ if parser.unread >= length {
+ return true
+ }
+
+ // Determine the input encoding if it is not known yet.
+ if parser.encoding == yaml_ANY_ENCODING {
+ if !yaml_parser_determine_encoding(parser) {
+ return false
+ }
+ }
+
+ // Move the unread characters to the beginning of the buffer.
+ buffer_len := len(parser.buffer)
+ if parser.buffer_pos > 0 && parser.buffer_pos < buffer_len {
+ copy(parser.buffer, parser.buffer[parser.buffer_pos:])
+ buffer_len -= parser.buffer_pos
+ parser.buffer_pos = 0
+ } else if parser.buffer_pos == buffer_len {
+ buffer_len = 0
+ parser.buffer_pos = 0
+ }
+
+ // Open the whole buffer for writing, and cut it before returning.
+ parser.buffer = parser.buffer[:cap(parser.buffer)]
+
+ // Fill the buffer until it has enough characters.
+ first := true
+ for parser.unread < length {
+
+ // Fill the raw buffer if necessary.
+ if !first || parser.raw_buffer_pos == len(parser.raw_buffer) {
+ if !yaml_parser_update_raw_buffer(parser) {
+ parser.buffer = parser.buffer[:buffer_len]
+ return false
+ }
+ }
+ first = false
+
+ // Decode the raw buffer.
+ inner:
+ for parser.raw_buffer_pos != len(parser.raw_buffer) {
+ var value rune
+ var width int
+
+ raw_unread := len(parser.raw_buffer) - parser.raw_buffer_pos
+
+ // Decode the next character.
+ switch parser.encoding {
+ case yaml_UTF8_ENCODING:
+ // Decode a UTF-8 character. Check RFC 3629
+ // (http://www.ietf.org/rfc/rfc3629.txt) for more details.
+ //
+ // The following table (taken from the RFC) is used for
+ // decoding.
+ //
+ // Char. number range | UTF-8 octet sequence
+ // (hexadecimal) | (binary)
+ // --------------------+------------------------------------
+ // 0000 0000-0000 007F | 0xxxxxxx
+ // 0000 0080-0000 07FF | 110xxxxx 10xxxxxx
+ // 0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
+ // 0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
+ //
+ // Additionally, the characters in the range 0xD800-0xDFFF
+ // are prohibited as they are reserved for use with UTF-16
+ // surrogate pairs.
+
+ // Determine the length of the UTF-8 sequence.
+ octet := parser.raw_buffer[parser.raw_buffer_pos]
+ switch {
+ case octet&0x80 == 0x00:
+ width = 1
+ case octet&0xE0 == 0xC0:
+ width = 2
+ case octet&0xF0 == 0xE0:
+ width = 3
+ case octet&0xF8 == 0xF0:
+ width = 4
+ default:
+ // The leading octet is invalid.
+ return yaml_parser_set_reader_error(parser,
+ "invalid leading UTF-8 octet",
+ parser.offset, int(octet))
+ }
+
+ // Check if the raw buffer contains an incomplete character.
+ if width > raw_unread {
+ if parser.eof {
+ return yaml_parser_set_reader_error(parser,
+ "incomplete UTF-8 octet sequence",
+ parser.offset, -1)
+ }
+ break inner
+ }
+
+ // Decode the leading octet.
+ switch {
+ case octet&0x80 == 0x00:
+ value = rune(octet & 0x7F)
+ case octet&0xE0 == 0xC0:
+ value = rune(octet & 0x1F)
+ case octet&0xF0 == 0xE0:
+ value = rune(octet & 0x0F)
+ case octet&0xF8 == 0xF0:
+ value = rune(octet & 0x07)
+ default:
+ value = 0
+ }
+
+ // Check and decode the trailing octets.
+ for k := 1; k < width; k++ {
+ octet = parser.raw_buffer[parser.raw_buffer_pos+k]
+
+ // Check if the octet is valid.
+ if (octet & 0xC0) != 0x80 {
+ return yaml_parser_set_reader_error(parser,
+ "invalid trailing UTF-8 octet",
+ parser.offset+k, int(octet))
+ }
+
+ // Decode the octet.
+ value = (value << 6) + rune(octet&0x3F)
+ }
+
+ // Check the length of the sequence against the value.
+ switch {
+ case width == 1:
+ case width == 2 && value >= 0x80:
+ case width == 3 && value >= 0x800:
+ case width == 4 && value >= 0x10000:
+ default:
+ return yaml_parser_set_reader_error(parser,
+ "invalid length of a UTF-8 sequence",
+ parser.offset, -1)
+ }
+
+ // Check the range of the value.
+ if value >= 0xD800 && value <= 0xDFFF || value > 0x10FFFF {
+ return yaml_parser_set_reader_error(parser,
+ "invalid Unicode character",
+ parser.offset, int(value))
+ }
+
+ case yaml_UTF16LE_ENCODING, yaml_UTF16BE_ENCODING:
+ var low, high int
+ if parser.encoding == yaml_UTF16LE_ENCODING {
+ low, high = 0, 1
+ } else {
+ low, high = 1, 0
+ }
+
+ // The UTF-16 encoding is not as simple as one might
+ // naively think. Check RFC 2781
+ // (http://www.ietf.org/rfc/rfc2781.txt).
+ //
+ // Normally, two subsequent bytes describe a Unicode
+ // character. However a special technique (called a
+ // surrogate pair) is used for specifying character
+ // values larger than 0xFFFF.
+ //
+ // A surrogate pair consists of two pseudo-characters:
+ // high surrogate area (0xD800-0xDBFF)
+ // low surrogate area (0xDC00-0xDFFF)
+ //
+ // The following formulas are used for decoding
+ // and encoding characters using surrogate pairs:
+ //
+ // U = U' + 0x10000 (0x01 00 00 <= U <= 0x10 FF FF)
+ // U' = yyyyyyyyyyxxxxxxxxxx (0 <= U' <= 0x0F FF FF)
+ // W1 = 110110yyyyyyyyyy
+ // W2 = 110111xxxxxxxxxx
+ //
+ // where U is the character value, W1 is the high surrogate
+ // area, W2 is the low surrogate area.
+
+ // Check for incomplete UTF-16 character.
+ if raw_unread < 2 {
+ if parser.eof {
+ return yaml_parser_set_reader_error(parser,
+ "incomplete UTF-16 character",
+ parser.offset, -1)
+ }
+ break inner
+ }
+
+ // Get the character.
+ value = rune(parser.raw_buffer[parser.raw_buffer_pos+low]) +
+ (rune(parser.raw_buffer[parser.raw_buffer_pos+high]) << 8)
+
+ // Check for unexpected low surrogate area.
+ if value&0xFC00 == 0xDC00 {
+ return yaml_parser_set_reader_error(parser,
+ "unexpected low surrogate area",
+ parser.offset, int(value))
+ }
+
+ // Check for a high surrogate area.
+ if value&0xFC00 == 0xD800 {
+ width = 4
+
+ // Check for incomplete surrogate pair.
+ if raw_unread < 4 {
+ if parser.eof {
+ return yaml_parser_set_reader_error(parser,
+ "incomplete UTF-16 surrogate pair",
+ parser.offset, -1)
+ }
+ break inner
+ }
+
+ // Get the next character.
+ value2 := rune(parser.raw_buffer[parser.raw_buffer_pos+low+2]) +
+ (rune(parser.raw_buffer[parser.raw_buffer_pos+high+2]) << 8)
+
+ // Check for a low surrogate area.
+ if value2&0xFC00 != 0xDC00 {
+ return yaml_parser_set_reader_error(parser,
+ "expected low surrogate area",
+ parser.offset+2, int(value2))
+ }
+
+ // Generate the value of the surrogate pair.
+ value = 0x10000 + ((value & 0x3FF) << 10) + (value2 & 0x3FF)
+ } else {
+ width = 2
+ }
+
+ default:
+ panic("impossible")
+ }
+
+ // Check if the character is in the allowed range:
+ // #x9 | #xA | #xD | [#x20-#x7E] (8 bit)
+ // | #x85 | [#xA0-#xD7FF] | [#xE000-#xFFFD] (16 bit)
+ // | [#x10000-#x10FFFF] (32 bit)
+ switch {
+ case value == 0x09:
+ case value == 0x0A:
+ case value == 0x0D:
+ case value >= 0x20 && value <= 0x7E:
+ case value == 0x85:
+ case value >= 0xA0 && value <= 0xD7FF:
+ case value >= 0xE000 && value <= 0xFFFD:
+ case value >= 0x10000 && value <= 0x10FFFF:
+ default:
+ return yaml_parser_set_reader_error(parser,
+ "control characters are not allowed",
+ parser.offset, int(value))
+ }
+
+ // Move the raw pointers.
+ parser.raw_buffer_pos += width
+ parser.offset += width
+
+ // Finally put the character into the buffer.
+ if value <= 0x7F {
+ // 0000 0000-0000 007F . 0xxxxxxx
+ parser.buffer[buffer_len+0] = byte(value)
+ buffer_len += 1
+ } else if value <= 0x7FF {
+ // 0000 0080-0000 07FF . 110xxxxx 10xxxxxx
+ parser.buffer[buffer_len+0] = byte(0xC0 + (value >> 6))
+ parser.buffer[buffer_len+1] = byte(0x80 + (value & 0x3F))
+ buffer_len += 2
+ } else if value <= 0xFFFF {
+ // 0000 0800-0000 FFFF . 1110xxxx 10xxxxxx 10xxxxxx
+ parser.buffer[buffer_len+0] = byte(0xE0 + (value >> 12))
+ parser.buffer[buffer_len+1] = byte(0x80 + ((value >> 6) & 0x3F))
+ parser.buffer[buffer_len+2] = byte(0x80 + (value & 0x3F))
+ buffer_len += 3
+ } else {
+ // 0001 0000-0010 FFFF . 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
+ parser.buffer[buffer_len+0] = byte(0xF0 + (value >> 18))
+ parser.buffer[buffer_len+1] = byte(0x80 + ((value >> 12) & 0x3F))
+ parser.buffer[buffer_len+2] = byte(0x80 + ((value >> 6) & 0x3F))
+ parser.buffer[buffer_len+3] = byte(0x80 + (value & 0x3F))
+ buffer_len += 4
+ }
+
+ parser.unread++
+ }
+
+ // On EOF, put NUL into the buffer and return.
+ if parser.eof {
+ parser.buffer[buffer_len] = 0
+ buffer_len++
+ parser.unread++
+ break
+ }
+ }
+ parser.buffer = parser.buffer[:buffer_len]
+ return true
+}
diff --git a/vendor/gopkg.in/yaml.v2/resolve.go b/vendor/gopkg.in/yaml.v2/resolve.go
new file mode 100644
index 0000000..232313c
--- /dev/null
+++ b/vendor/gopkg.in/yaml.v2/resolve.go
@@ -0,0 +1,208 @@
+package yaml
+
+import (
+ "encoding/base64"
+ "math"
+ "regexp"
+ "strconv"
+ "strings"
+ "unicode/utf8"
+)
+
+type resolveMapItem struct {
+ value interface{}
+ tag string
+}
+
+var resolveTable = make([]byte, 256)
+var resolveMap = make(map[string]resolveMapItem)
+
+func init() {
+ t := resolveTable
+ t[int('+')] = 'S' // Sign
+ t[int('-')] = 'S'
+ for _, c := range "0123456789" {
+ t[int(c)] = 'D' // Digit
+ }
+ for _, c := range "yYnNtTfFoO~" {
+ t[int(c)] = 'M' // In map
+ }
+ t[int('.')] = '.' // Float (potentially in map)
+
+ var resolveMapList = []struct {
+ v interface{}
+ tag string
+ l []string
+ }{
+ {true, yaml_BOOL_TAG, []string{"y", "Y", "yes", "Yes", "YES"}},
+ {true, yaml_BOOL_TAG, []string{"true", "True", "TRUE"}},
+ {true, yaml_BOOL_TAG, []string{"on", "On", "ON"}},
+ {false, yaml_BOOL_TAG, []string{"n", "N", "no", "No", "NO"}},
+ {false, yaml_BOOL_TAG, []string{"false", "False", "FALSE"}},
+ {false, yaml_BOOL_TAG, []string{"off", "Off", "OFF"}},
+ {nil, yaml_NULL_TAG, []string{"", "~", "null", "Null", "NULL"}},
+ {math.NaN(), yaml_FLOAT_TAG, []string{".nan", ".NaN", ".NAN"}},
+ {math.Inf(+1), yaml_FLOAT_TAG, []string{".inf", ".Inf", ".INF"}},
+ {math.Inf(+1), yaml_FLOAT_TAG, []string{"+.inf", "+.Inf", "+.INF"}},
+ {math.Inf(-1), yaml_FLOAT_TAG, []string{"-.inf", "-.Inf", "-.INF"}},
+ {"<<", yaml_MERGE_TAG, []string{"<<"}},
+ }
+
+ m := resolveMap
+ for _, item := range resolveMapList {
+ for _, s := range item.l {
+ m[s] = resolveMapItem{item.v, item.tag}
+ }
+ }
+}
+
+const longTagPrefix = "tag:yaml.org,2002:"
+
+func shortTag(tag string) string {
+ // TODO This can easily be made faster and produce less garbage.
+ if strings.HasPrefix(tag, longTagPrefix) {
+ return "!!" + tag[len(longTagPrefix):]
+ }
+ return tag
+}
+
+func longTag(tag string) string {
+ if strings.HasPrefix(tag, "!!") {
+ return longTagPrefix + tag[2:]
+ }
+ return tag
+}
+
+func resolvableTag(tag string) bool {
+ switch tag {
+ case "", yaml_STR_TAG, yaml_BOOL_TAG, yaml_INT_TAG, yaml_FLOAT_TAG, yaml_NULL_TAG:
+ return true
+ }
+ return false
+}
+
+var yamlStyleFloat = regexp.MustCompile(`^[-+]?[0-9]*\.?[0-9]+([eE][-+][0-9]+)?$`)
+
+func resolve(tag string, in string) (rtag string, out interface{}) {
+ if !resolvableTag(tag) {
+ return tag, in
+ }
+
+ defer func() {
+ switch tag {
+ case "", rtag, yaml_STR_TAG, yaml_BINARY_TAG:
+ return
+ }
+ failf("cannot decode %s `%s` as a %s", shortTag(rtag), in, shortTag(tag))
+ }()
+
+ // Any data is accepted as a !!str or !!binary.
+ // Otherwise, the prefix is enough of a hint about what it might be.
+ hint := byte('N')
+ if in != "" {
+ hint = resolveTable[in[0]]
+ }
+ if hint != 0 && tag != yaml_STR_TAG && tag != yaml_BINARY_TAG {
+ // Handle things we can lookup in a map.
+ if item, ok := resolveMap[in]; ok {
+ return item.tag, item.value
+ }
+
+ // Base 60 floats are a bad idea, were dropped in YAML 1.2, and
+ // are purposefully unsupported here. They're still quoted on
+ // the way out for compatibility with other parser, though.
+
+ switch hint {
+ case 'M':
+ // We've already checked the map above.
+
+ case '.':
+ // Not in the map, so maybe a normal float.
+ floatv, err := strconv.ParseFloat(in, 64)
+ if err == nil {
+ return yaml_FLOAT_TAG, floatv
+ }
+
+ case 'D', 'S':
+ // Int, float, or timestamp.
+ plain := strings.Replace(in, "_", "", -1)
+ intv, err := strconv.ParseInt(plain, 0, 64)
+ if err == nil {
+ if intv == int64(int(intv)) {
+ return yaml_INT_TAG, int(intv)
+ } else {
+ return yaml_INT_TAG, intv
+ }
+ }
+ uintv, err := strconv.ParseUint(plain, 0, 64)
+ if err == nil {
+ return yaml_INT_TAG, uintv
+ }
+ if yamlStyleFloat.MatchString(plain) {
+ floatv, err := strconv.ParseFloat(plain, 64)
+ if err == nil {
+ return yaml_FLOAT_TAG, floatv
+ }
+ }
+ if strings.HasPrefix(plain, "0b") {
+ intv, err := strconv.ParseInt(plain[2:], 2, 64)
+ if err == nil {
+ if intv == int64(int(intv)) {
+ return yaml_INT_TAG, int(intv)
+ } else {
+ return yaml_INT_TAG, intv
+ }
+ }
+ uintv, err := strconv.ParseUint(plain[2:], 2, 64)
+ if err == nil {
+ return yaml_INT_TAG, uintv
+ }
+ } else if strings.HasPrefix(plain, "-0b") {
+ intv, err := strconv.ParseInt(plain[3:], 2, 64)
+ if err == nil {
+ if intv == int64(int(intv)) {
+ return yaml_INT_TAG, -int(intv)
+ } else {
+ return yaml_INT_TAG, -intv
+ }
+ }
+ }
+ // XXX Handle timestamps here.
+
+ default:
+ panic("resolveTable item not yet handled: " + string(rune(hint)) + " (with " + in + ")")
+ }
+ }
+ if tag == yaml_BINARY_TAG {
+ return yaml_BINARY_TAG, in
+ }
+ if utf8.ValidString(in) {
+ return yaml_STR_TAG, in
+ }
+ return yaml_BINARY_TAG, encodeBase64(in)
+}
+
+// encodeBase64 encodes s as base64 that is broken up into multiple lines
+// as appropriate for the resulting length.
+func encodeBase64(s string) string {
+ const lineLen = 70
+ encLen := base64.StdEncoding.EncodedLen(len(s))
+ lines := encLen/lineLen + 1
+ buf := make([]byte, encLen*2+lines)
+ in := buf[0:encLen]
+ out := buf[encLen:]
+ base64.StdEncoding.Encode(in, []byte(s))
+ k := 0
+ for i := 0; i < len(in); i += lineLen {
+ j := i + lineLen
+ if j > len(in) {
+ j = len(in)
+ }
+ k += copy(out[k:], in[i:j])
+ if lines > 1 {
+ out[k] = '\n'
+ k++
+ }
+ }
+ return string(out[:k])
+}
diff --git a/vendor/gopkg.in/yaml.v2/scannerc.go b/vendor/gopkg.in/yaml.v2/scannerc.go
new file mode 100644
index 0000000..0744844
--- /dev/null
+++ b/vendor/gopkg.in/yaml.v2/scannerc.go
@@ -0,0 +1,2711 @@
+package yaml
+
+import (
+ "bytes"
+ "fmt"
+)
+
+// Introduction
+// ************
+//
+// The following notes assume that you are familiar with the YAML specification
+// (http://yaml.org/spec/1.2/spec.html). We mostly follow it, although in
+// some cases we are less restrictive that it requires.
+//
+// The process of transforming a YAML stream into a sequence of events is
+// divided on two steps: Scanning and Parsing.
+//
+// The Scanner transforms the input stream into a sequence of tokens, while the
+// parser transform the sequence of tokens produced by the Scanner into a
+// sequence of parsing events.
+//
+// The Scanner is rather clever and complicated. The Parser, on the contrary,
+// is a straightforward implementation of a recursive-descendant parser (or,
+// LL(1) parser, as it is usually called).
+//
+// Actually there are two issues of Scanning that might be called "clever", the
+// rest is quite straightforward. The issues are "block collection start" and
+// "simple keys". Both issues are explained below in details.
+//
+// Here the Scanning step is explained and implemented. We start with the list
+// of all the tokens produced by the Scanner together with short descriptions.
+//
+// Now, tokens:
+//
+// STREAM-START(encoding) # The stream start.
+// STREAM-END # The stream end.
+// VERSION-DIRECTIVE(major,minor) # The '%YAML' directive.
+// TAG-DIRECTIVE(handle,prefix) # The '%TAG' directive.
+// DOCUMENT-START # '---'
+// DOCUMENT-END # '...'
+// BLOCK-SEQUENCE-START # Indentation increase denoting a block
+// BLOCK-MAPPING-START # sequence or a block mapping.
+// BLOCK-END # Indentation decrease.
+// FLOW-SEQUENCE-START # '['
+// FLOW-SEQUENCE-END # ']'
+// BLOCK-SEQUENCE-START # '{'
+// BLOCK-SEQUENCE-END # '}'
+// BLOCK-ENTRY # '-'
+// FLOW-ENTRY # ','
+// KEY # '?' or nothing (simple keys).
+// VALUE # ':'
+// ALIAS(anchor) # '*anchor'
+// ANCHOR(anchor) # '&anchor'
+// TAG(handle,suffix) # '!handle!suffix'
+// SCALAR(value,style) # A scalar.
+//
+// The following two tokens are "virtual" tokens denoting the beginning and the
+// end of the stream:
+//
+// STREAM-START(encoding)
+// STREAM-END
+//
+// We pass the information about the input stream encoding with the
+// STREAM-START token.
+//
+// The next two tokens are responsible for tags:
+//
+// VERSION-DIRECTIVE(major,minor)
+// TAG-DIRECTIVE(handle,prefix)
+//
+// Example:
+//
+// %YAML 1.1
+// %TAG ! !foo
+// %TAG !yaml! tag:yaml.org,2002:
+// ---
+//
+// The correspoding sequence of tokens:
+//
+// STREAM-START(utf-8)
+// VERSION-DIRECTIVE(1,1)
+// TAG-DIRECTIVE("!","!foo")
+// TAG-DIRECTIVE("!yaml","tag:yaml.org,2002:")
+// DOCUMENT-START
+// STREAM-END
+//
+// Note that the VERSION-DIRECTIVE and TAG-DIRECTIVE tokens occupy a whole
+// line.
+//
+// The document start and end indicators are represented by:
+//
+// DOCUMENT-START
+// DOCUMENT-END
+//
+// Note that if a YAML stream contains an implicit document (without '---'
+// and '...' indicators), no DOCUMENT-START and DOCUMENT-END tokens will be
+// produced.
+//
+// In the following examples, we present whole documents together with the
+// produced tokens.
+//
+// 1. An implicit document:
+//
+// 'a scalar'
+//
+// Tokens:
+//
+// STREAM-START(utf-8)
+// SCALAR("a scalar",single-quoted)
+// STREAM-END
+//
+// 2. An explicit document:
+//
+// ---
+// 'a scalar'
+// ...
+//
+// Tokens:
+//
+// STREAM-START(utf-8)
+// DOCUMENT-START
+// SCALAR("a scalar",single-quoted)
+// DOCUMENT-END
+// STREAM-END
+//
+// 3. Several documents in a stream:
+//
+// 'a scalar'
+// ---
+// 'another scalar'
+// ---
+// 'yet another scalar'
+//
+// Tokens:
+//
+// STREAM-START(utf-8)
+// SCALAR("a scalar",single-quoted)
+// DOCUMENT-START
+// SCALAR("another scalar",single-quoted)
+// DOCUMENT-START
+// SCALAR("yet another scalar",single-quoted)
+// STREAM-END
+//
+// We have already introduced the SCALAR token above. The following tokens are
+// used to describe aliases, anchors, tag, and scalars:
+//
+// ALIAS(anchor)
+// ANCHOR(anchor)
+// TAG(handle,suffix)
+// SCALAR(value,style)
+//
+// The following series of examples illustrate the usage of these tokens:
+//
+// 1. A recursive sequence:
+//
+// &A [ *A ]
+//
+// Tokens:
+//
+// STREAM-START(utf-8)
+// ANCHOR("A")
+// FLOW-SEQUENCE-START
+// ALIAS("A")
+// FLOW-SEQUENCE-END
+// STREAM-END
+//
+// 2. A tagged scalar:
+//
+// !!float "3.14" # A good approximation.
+//
+// Tokens:
+//
+// STREAM-START(utf-8)
+// TAG("!!","float")
+// SCALAR("3.14",double-quoted)
+// STREAM-END
+//
+// 3. Various scalar styles:
+//
+// --- # Implicit empty plain scalars do not produce tokens.
+// --- a plain scalar
+// --- 'a single-quoted scalar'
+// --- "a double-quoted scalar"
+// --- |-
+// a literal scalar
+// --- >-
+// a folded
+// scalar
+//
+// Tokens:
+//
+// STREAM-START(utf-8)
+// DOCUMENT-START
+// DOCUMENT-START
+// SCALAR("a plain scalar",plain)
+// DOCUMENT-START
+// SCALAR("a single-quoted scalar",single-quoted)
+// DOCUMENT-START
+// SCALAR("a double-quoted scalar",double-quoted)
+// DOCUMENT-START
+// SCALAR("a literal scalar",literal)
+// DOCUMENT-START
+// SCALAR("a folded scalar",folded)
+// STREAM-END
+//
+// Now it's time to review collection-related tokens. We will start with
+// flow collections:
+//
+// FLOW-SEQUENCE-START
+// FLOW-SEQUENCE-END
+// FLOW-MAPPING-START
+// FLOW-MAPPING-END
+// FLOW-ENTRY
+// KEY
+// VALUE
+//
+// The tokens FLOW-SEQUENCE-START, FLOW-SEQUENCE-END, FLOW-MAPPING-START, and
+// FLOW-MAPPING-END represent the indicators '[', ']', '{', and '}'
+// correspondingly. FLOW-ENTRY represent the ',' indicator. Finally the
+// indicators '?' and ':', which are used for denoting mapping keys and values,
+// are represented by the KEY and VALUE tokens.
+//
+// The following examples show flow collections:
+//
+// 1. A flow sequence:
+//
+// [item 1, item 2, item 3]
+//
+// Tokens:
+//
+// STREAM-START(utf-8)
+// FLOW-SEQUENCE-START
+// SCALAR("item 1",plain)
+// FLOW-ENTRY
+// SCALAR("item 2",plain)
+// FLOW-ENTRY
+// SCALAR("item 3",plain)
+// FLOW-SEQUENCE-END
+// STREAM-END
+//
+// 2. A flow mapping:
+//
+// {
+// a simple key: a value, # Note that the KEY token is produced.
+// ? a complex key: another value,
+// }
+//
+// Tokens:
+//
+// STREAM-START(utf-8)
+// FLOW-MAPPING-START
+// KEY
+// SCALAR("a simple key",plain)
+// VALUE
+// SCALAR("a value",plain)
+// FLOW-ENTRY
+// KEY
+// SCALAR("a complex key",plain)
+// VALUE
+// SCALAR("another value",plain)
+// FLOW-ENTRY
+// FLOW-MAPPING-END
+// STREAM-END
+//
+// A simple key is a key which is not denoted by the '?' indicator. Note that
+// the Scanner still produce the KEY token whenever it encounters a simple key.
+//
+// For scanning block collections, the following tokens are used (note that we
+// repeat KEY and VALUE here):
+//
+// BLOCK-SEQUENCE-START
+// BLOCK-MAPPING-START
+// BLOCK-END
+// BLOCK-ENTRY
+// KEY
+// VALUE
+//
+// The tokens BLOCK-SEQUENCE-START and BLOCK-MAPPING-START denote indentation
+// increase that precedes a block collection (cf. the INDENT token in Python).
+// The token BLOCK-END denote indentation decrease that ends a block collection
+// (cf. the DEDENT token in Python). However YAML has some syntax pecularities
+// that makes detections of these tokens more complex.
+//
+// The tokens BLOCK-ENTRY, KEY, and VALUE are used to represent the indicators
+// '-', '?', and ':' correspondingly.
+//
+// The following examples show how the tokens BLOCK-SEQUENCE-START,
+// BLOCK-MAPPING-START, and BLOCK-END are emitted by the Scanner:
+//
+// 1. Block sequences:
+//
+// - item 1
+// - item 2
+// -
+// - item 3.1
+// - item 3.2
+// -
+// key 1: value 1
+// key 2: value 2
+//
+// Tokens:
+//
+// STREAM-START(utf-8)
+// BLOCK-SEQUENCE-START
+// BLOCK-ENTRY
+// SCALAR("item 1",plain)
+// BLOCK-ENTRY
+// SCALAR("item 2",plain)
+// BLOCK-ENTRY
+// BLOCK-SEQUENCE-START
+// BLOCK-ENTRY
+// SCALAR("item 3.1",plain)
+// BLOCK-ENTRY
+// SCALAR("item 3.2",plain)
+// BLOCK-END
+// BLOCK-ENTRY
+// BLOCK-MAPPING-START
+// KEY
+// SCALAR("key 1",plain)
+// VALUE
+// SCALAR("value 1",plain)
+// KEY
+// SCALAR("key 2",plain)
+// VALUE
+// SCALAR("value 2",plain)
+// BLOCK-END
+// BLOCK-END
+// STREAM-END
+//
+// 2. Block mappings:
+//
+// a simple key: a value # The KEY token is produced here.
+// ? a complex key
+// : another value
+// a mapping:
+// key 1: value 1
+// key 2: value 2
+// a sequence:
+// - item 1
+// - item 2
+//
+// Tokens:
+//
+// STREAM-START(utf-8)
+// BLOCK-MAPPING-START
+// KEY
+// SCALAR("a simple key",plain)
+// VALUE
+// SCALAR("a value",plain)
+// KEY
+// SCALAR("a complex key",plain)
+// VALUE
+// SCALAR("another value",plain)
+// KEY
+// SCALAR("a mapping",plain)
+// BLOCK-MAPPING-START
+// KEY
+// SCALAR("key 1",plain)
+// VALUE
+// SCALAR("value 1",plain)
+// KEY
+// SCALAR("key 2",plain)
+// VALUE
+// SCALAR("value 2",plain)
+// BLOCK-END
+// KEY
+// SCALAR("a sequence",plain)
+// VALUE
+// BLOCK-SEQUENCE-START
+// BLOCK-ENTRY
+// SCALAR("item 1",plain)
+// BLOCK-ENTRY
+// SCALAR("item 2",plain)
+// BLOCK-END
+// BLOCK-END
+// STREAM-END
+//
+// YAML does not always require to start a new block collection from a new
+// line. If the current line contains only '-', '?', and ':' indicators, a new
+// block collection may start at the current line. The following examples
+// illustrate this case:
+//
+// 1. Collections in a sequence:
+//
+// - - item 1
+// - item 2
+// - key 1: value 1
+// key 2: value 2
+// - ? complex key
+// : complex value
+//
+// Tokens:
+//
+// STREAM-START(utf-8)
+// BLOCK-SEQUENCE-START
+// BLOCK-ENTRY
+// BLOCK-SEQUENCE-START
+// BLOCK-ENTRY
+// SCALAR("item 1",plain)
+// BLOCK-ENTRY
+// SCALAR("item 2",plain)
+// BLOCK-END
+// BLOCK-ENTRY
+// BLOCK-MAPPING-START
+// KEY
+// SCALAR("key 1",plain)
+// VALUE
+// SCALAR("value 1",plain)
+// KEY
+// SCALAR("key 2",plain)
+// VALUE
+// SCALAR("value 2",plain)
+// BLOCK-END
+// BLOCK-ENTRY
+// BLOCK-MAPPING-START
+// KEY
+// SCALAR("complex key")
+// VALUE
+// SCALAR("complex value")
+// BLOCK-END
+// BLOCK-END
+// STREAM-END
+//
+// 2. Collections in a mapping:
+//
+// ? a sequence
+// : - item 1
+// - item 2
+// ? a mapping
+// : key 1: value 1
+// key 2: value 2
+//
+// Tokens:
+//
+// STREAM-START(utf-8)
+// BLOCK-MAPPING-START
+// KEY
+// SCALAR("a sequence",plain)
+// VALUE
+// BLOCK-SEQUENCE-START
+// BLOCK-ENTRY
+// SCALAR("item 1",plain)
+// BLOCK-ENTRY
+// SCALAR("item 2",plain)
+// BLOCK-END
+// KEY
+// SCALAR("a mapping",plain)
+// VALUE
+// BLOCK-MAPPING-START
+// KEY
+// SCALAR("key 1",plain)
+// VALUE
+// SCALAR("value 1",plain)
+// KEY
+// SCALAR("key 2",plain)
+// VALUE
+// SCALAR("value 2",plain)
+// BLOCK-END
+// BLOCK-END
+// STREAM-END
+//
+// YAML also permits non-indented sequences if they are included into a block
+// mapping. In this case, the token BLOCK-SEQUENCE-START is not produced:
+//
+// key:
+// - item 1 # BLOCK-SEQUENCE-START is NOT produced here.
+// - item 2
+//
+// Tokens:
+//
+// STREAM-START(utf-8)
+// BLOCK-MAPPING-START
+// KEY
+// SCALAR("key",plain)
+// VALUE
+// BLOCK-ENTRY
+// SCALAR("item 1",plain)
+// BLOCK-ENTRY
+// SCALAR("item 2",plain)
+// BLOCK-END
+//
+
+// Ensure that the buffer contains the required number of characters.
+// Return true on success, false on failure (reader error or memory error).
+func cache(parser *yaml_parser_t, length int) bool {
+ // [Go] This was inlined: !cache(A, B) -> unread < B && !update(A, B)
+ return parser.unread >= length || yaml_parser_update_buffer(parser, length)
+}
+
+// Advance the buffer pointer.
+func skip(parser *yaml_parser_t) {
+ parser.mark.index++
+ parser.mark.column++
+ parser.unread--
+ parser.buffer_pos += width(parser.buffer[parser.buffer_pos])
+}
+
+func skip_line(parser *yaml_parser_t) {
+ if is_crlf(parser.buffer, parser.buffer_pos) {
+ parser.mark.index += 2
+ parser.mark.column = 0
+ parser.mark.line++
+ parser.unread -= 2
+ parser.buffer_pos += 2
+ } else if is_break(parser.buffer, parser.buffer_pos) {
+ parser.mark.index++
+ parser.mark.column = 0
+ parser.mark.line++
+ parser.unread--
+ parser.buffer_pos += width(parser.buffer[parser.buffer_pos])
+ }
+}
+
+// Copy a character to a string buffer and advance pointers.
+func read(parser *yaml_parser_t, s []byte) []byte {
+ w := width(parser.buffer[parser.buffer_pos])
+ if w == 0 {
+ panic("invalid character sequence")
+ }
+ if len(s) == 0 {
+ s = make([]byte, 0, 32)
+ }
+ if w == 1 && len(s)+w <= cap(s) {
+ s = s[:len(s)+1]
+ s[len(s)-1] = parser.buffer[parser.buffer_pos]
+ parser.buffer_pos++
+ } else {
+ s = append(s, parser.buffer[parser.buffer_pos:parser.buffer_pos+w]...)
+ parser.buffer_pos += w
+ }
+ parser.mark.index++
+ parser.mark.column++
+ parser.unread--
+ return s
+}
+
+// Copy a line break character to a string buffer and advance pointers.
+func read_line(parser *yaml_parser_t, s []byte) []byte {
+ buf := parser.buffer
+ pos := parser.buffer_pos
+ switch {
+ case buf[pos] == '\r' && buf[pos+1] == '\n':
+ // CR LF . LF
+ s = append(s, '\n')
+ parser.buffer_pos += 2
+ parser.mark.index++
+ parser.unread--
+ case buf[pos] == '\r' || buf[pos] == '\n':
+ // CR|LF . LF
+ s = append(s, '\n')
+ parser.buffer_pos += 1
+ case buf[pos] == '\xC2' && buf[pos+1] == '\x85':
+ // NEL . LF
+ s = append(s, '\n')
+ parser.buffer_pos += 2
+ case buf[pos] == '\xE2' && buf[pos+1] == '\x80' && (buf[pos+2] == '\xA8' || buf[pos+2] == '\xA9'):
+ // LS|PS . LS|PS
+ s = append(s, buf[parser.buffer_pos:pos+3]...)
+ parser.buffer_pos += 3
+ default:
+ return s
+ }
+ parser.mark.index++
+ parser.mark.column = 0
+ parser.mark.line++
+ parser.unread--
+ return s
+}
+
+// Get the next token.
+func yaml_parser_scan(parser *yaml_parser_t, token *yaml_token_t) bool {
+ // Erase the token object.
+ *token = yaml_token_t{} // [Go] Is this necessary?
+
+ // No tokens after STREAM-END or error.
+ if parser.stream_end_produced || parser.error != yaml_NO_ERROR {
+ return true
+ }
+
+ // Ensure that the tokens queue contains enough tokens.
+ if !parser.token_available {
+ if !yaml_parser_fetch_more_tokens(parser) {
+ return false
+ }
+ }
+
+ // Fetch the next token from the queue.
+ *token = parser.tokens[parser.tokens_head]
+ parser.tokens_head++
+ parser.tokens_parsed++
+ parser.token_available = false
+
+ if token.typ == yaml_STREAM_END_TOKEN {
+ parser.stream_end_produced = true
+ }
+ return true
+}
+
+// Set the scanner error and return false.
+func yaml_parser_set_scanner_error(parser *yaml_parser_t, context string, context_mark yaml_mark_t, problem string) bool {
+ parser.error = yaml_SCANNER_ERROR
+ parser.context = context
+ parser.context_mark = context_mark
+ parser.problem = problem
+ parser.problem_mark = parser.mark
+ return false
+}
+
+func yaml_parser_set_scanner_tag_error(parser *yaml_parser_t, directive bool, context_mark yaml_mark_t, problem string) bool {
+ context := "while parsing a tag"
+ if directive {
+ context = "while parsing a %TAG directive"
+ }
+ return yaml_parser_set_scanner_error(parser, context, context_mark, problem)
+}
+
+func trace(args ...interface{}) func() {
+ pargs := append([]interface{}{"+++"}, args...)
+ fmt.Println(pargs...)
+ pargs = append([]interface{}{"---"}, args...)
+ return func() { fmt.Println(pargs...) }
+}
+
+// Ensure that the tokens queue contains at least one token which can be
+// returned to the Parser.
+func yaml_parser_fetch_more_tokens(parser *yaml_parser_t) bool {
+ // While we need more tokens to fetch, do it.
+ for {
+ // Check if we really need to fetch more tokens.
+ need_more_tokens := false
+
+ if parser.tokens_head == len(parser.tokens) {
+ // Queue is empty.
+ need_more_tokens = true
+ } else {
+ // Check if any potential simple key may occupy the head position.
+ if !yaml_parser_stale_simple_keys(parser) {
+ return false
+ }
+
+ for i := range parser.simple_keys {
+ simple_key := &parser.simple_keys[i]
+ if simple_key.possible && simple_key.token_number == parser.tokens_parsed {
+ need_more_tokens = true
+ break
+ }
+ }
+ }
+
+ // We are finished.
+ if !need_more_tokens {
+ break
+ }
+ // Fetch the next token.
+ if !yaml_parser_fetch_next_token(parser) {
+ return false
+ }
+ }
+
+ parser.token_available = true
+ return true
+}
+
+// The dispatcher for token fetchers.
+func yaml_parser_fetch_next_token(parser *yaml_parser_t) bool {
+ // Ensure that the buffer is initialized.
+ if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
+ return false
+ }
+
+ // Check if we just started scanning. Fetch STREAM-START then.
+ if !parser.stream_start_produced {
+ return yaml_parser_fetch_stream_start(parser)
+ }
+
+ // Eat whitespaces and comments until we reach the next token.
+ if !yaml_parser_scan_to_next_token(parser) {
+ return false
+ }
+
+ // Remove obsolete potential simple keys.
+ if !yaml_parser_stale_simple_keys(parser) {
+ return false
+ }
+
+ // Check the indentation level against the current column.
+ if !yaml_parser_unroll_indent(parser, parser.mark.column) {
+ return false
+ }
+
+ // Ensure that the buffer contains at least 4 characters. 4 is the length
+ // of the longest indicators ('--- ' and '... ').
+ if parser.unread < 4 && !yaml_parser_update_buffer(parser, 4) {
+ return false
+ }
+
+ // Is it the end of the stream?
+ if is_z(parser.buffer, parser.buffer_pos) {
+ return yaml_parser_fetch_stream_end(parser)
+ }
+
+ // Is it a directive?
+ if parser.mark.column == 0 && parser.buffer[parser.buffer_pos] == '%' {
+ return yaml_parser_fetch_directive(parser)
+ }
+
+ buf := parser.buffer
+ pos := parser.buffer_pos
+
+ // Is it the document start indicator?
+ if parser.mark.column == 0 && buf[pos] == '-' && buf[pos+1] == '-' && buf[pos+2] == '-' && is_blankz(buf, pos+3) {
+ return yaml_parser_fetch_document_indicator(parser, yaml_DOCUMENT_START_TOKEN)
+ }
+
+ // Is it the document end indicator?
+ if parser.mark.column == 0 && buf[pos] == '.' && buf[pos+1] == '.' && buf[pos+2] == '.' && is_blankz(buf, pos+3) {
+ return yaml_parser_fetch_document_indicator(parser, yaml_DOCUMENT_END_TOKEN)
+ }
+
+ // Is it the flow sequence start indicator?
+ if buf[pos] == '[' {
+ return yaml_parser_fetch_flow_collection_start(parser, yaml_FLOW_SEQUENCE_START_TOKEN)
+ }
+
+ // Is it the flow mapping start indicator?
+ if parser.buffer[parser.buffer_pos] == '{' {
+ return yaml_parser_fetch_flow_collection_start(parser, yaml_FLOW_MAPPING_START_TOKEN)
+ }
+
+ // Is it the flow sequence end indicator?
+ if parser.buffer[parser.buffer_pos] == ']' {
+ return yaml_parser_fetch_flow_collection_end(parser,
+ yaml_FLOW_SEQUENCE_END_TOKEN)
+ }
+
+ // Is it the flow mapping end indicator?
+ if parser.buffer[parser.buffer_pos] == '}' {
+ return yaml_parser_fetch_flow_collection_end(parser,
+ yaml_FLOW_MAPPING_END_TOKEN)
+ }
+
+ // Is it the flow entry indicator?
+ if parser.buffer[parser.buffer_pos] == ',' {
+ return yaml_parser_fetch_flow_entry(parser)
+ }
+
+ // Is it the block entry indicator?
+ if parser.buffer[parser.buffer_pos] == '-' && is_blankz(parser.buffer, parser.buffer_pos+1) {
+ return yaml_parser_fetch_block_entry(parser)
+ }
+
+ // Is it the key indicator?
+ if parser.buffer[parser.buffer_pos] == '?' && (parser.flow_level > 0 || is_blankz(parser.buffer, parser.buffer_pos+1)) {
+ return yaml_parser_fetch_key(parser)
+ }
+
+ // Is it the value indicator?
+ if parser.buffer[parser.buffer_pos] == ':' && (parser.flow_level > 0 || is_blankz(parser.buffer, parser.buffer_pos+1)) {
+ return yaml_parser_fetch_value(parser)
+ }
+
+ // Is it an alias?
+ if parser.buffer[parser.buffer_pos] == '*' {
+ return yaml_parser_fetch_anchor(parser, yaml_ALIAS_TOKEN)
+ }
+
+ // Is it an anchor?
+ if parser.buffer[parser.buffer_pos] == '&' {
+ return yaml_parser_fetch_anchor(parser, yaml_ANCHOR_TOKEN)
+ }
+
+ // Is it a tag?
+ if parser.buffer[parser.buffer_pos] == '!' {
+ return yaml_parser_fetch_tag(parser)
+ }
+
+ // Is it a literal scalar?
+ if parser.buffer[parser.buffer_pos] == '|' && parser.flow_level == 0 {
+ return yaml_parser_fetch_block_scalar(parser, true)
+ }
+
+ // Is it a folded scalar?
+ if parser.buffer[parser.buffer_pos] == '>' && parser.flow_level == 0 {
+ return yaml_parser_fetch_block_scalar(parser, false)
+ }
+
+ // Is it a single-quoted scalar?
+ if parser.buffer[parser.buffer_pos] == '\'' {
+ return yaml_parser_fetch_flow_scalar(parser, true)
+ }
+
+ // Is it a double-quoted scalar?
+ if parser.buffer[parser.buffer_pos] == '"' {
+ return yaml_parser_fetch_flow_scalar(parser, false)
+ }
+
+ // Is it a plain scalar?
+ //
+ // A plain scalar may start with any non-blank characters except
+ //
+ // '-', '?', ':', ',', '[', ']', '{', '}',
+ // '#', '&', '*', '!', '|', '>', '\'', '\"',
+ // '%', '@', '`'.
+ //
+ // In the block context (and, for the '-' indicator, in the flow context
+ // too), it may also start with the characters
+ //
+ // '-', '?', ':'
+ //
+ // if it is followed by a non-space character.
+ //
+ // The last rule is more restrictive than the specification requires.
+ // [Go] Make this logic more reasonable.
+ //switch parser.buffer[parser.buffer_pos] {
+ //case '-', '?', ':', ',', '?', '-', ',', ':', ']', '[', '}', '{', '&', '#', '!', '*', '>', '|', '"', '\'', '@', '%', '-', '`':
+ //}
+ if !(is_blankz(parser.buffer, parser.buffer_pos) || parser.buffer[parser.buffer_pos] == '-' ||
+ parser.buffer[parser.buffer_pos] == '?' || parser.buffer[parser.buffer_pos] == ':' ||
+ parser.buffer[parser.buffer_pos] == ',' || parser.buffer[parser.buffer_pos] == '[' ||
+ parser.buffer[parser.buffer_pos] == ']' || parser.buffer[parser.buffer_pos] == '{' ||
+ parser.buffer[parser.buffer_pos] == '}' || parser.buffer[parser.buffer_pos] == '#' ||
+ parser.buffer[parser.buffer_pos] == '&' || parser.buffer[parser.buffer_pos] == '*' ||
+ parser.buffer[parser.buffer_pos] == '!' || parser.buffer[parser.buffer_pos] == '|' ||
+ parser.buffer[parser.buffer_pos] == '>' || parser.buffer[parser.buffer_pos] == '\'' ||
+ parser.buffer[parser.buffer_pos] == '"' || parser.buffer[parser.buffer_pos] == '%' ||
+ parser.buffer[parser.buffer_pos] == '@' || parser.buffer[parser.buffer_pos] == '`') ||
+ (parser.buffer[parser.buffer_pos] == '-' && !is_blank(parser.buffer, parser.buffer_pos+1)) ||
+ (parser.flow_level == 0 &&
+ (parser.buffer[parser.buffer_pos] == '?' || parser.buffer[parser.buffer_pos] == ':') &&
+ !is_blankz(parser.buffer, parser.buffer_pos+1)) {
+ return yaml_parser_fetch_plain_scalar(parser)
+ }
+
+ // If we don't determine the token type so far, it is an error.
+ return yaml_parser_set_scanner_error(parser,
+ "while scanning for the next token", parser.mark,
+ "found character that cannot start any token")
+}
+
+// Check the list of potential simple keys and remove the positions that
+// cannot contain simple keys anymore.
+func yaml_parser_stale_simple_keys(parser *yaml_parser_t) bool {
+ // Check for a potential simple key for each flow level.
+ for i := range parser.simple_keys {
+ simple_key := &parser.simple_keys[i]
+
+ // The specification requires that a simple key
+ //
+ // - is limited to a single line,
+ // - is shorter than 1024 characters.
+ if simple_key.possible && (simple_key.mark.line < parser.mark.line || simple_key.mark.index+1024 < parser.mark.index) {
+
+ // Check if the potential simple key to be removed is required.
+ if simple_key.required {
+ return yaml_parser_set_scanner_error(parser,
+ "while scanning a simple key", simple_key.mark,
+ "could not find expected ':'")
+ }
+ simple_key.possible = false
+ }
+ }
+ return true
+}
+
+// Check if a simple key may start at the current position and add it if
+// needed.
+func yaml_parser_save_simple_key(parser *yaml_parser_t) bool {
+ // A simple key is required at the current position if the scanner is in
+ // the block context and the current column coincides with the indentation
+ // level.
+
+ required := parser.flow_level == 0 && parser.indent == parser.mark.column
+
+ // A simple key is required only when it is the first token in the current
+ // line. Therefore it is always allowed. But we add a check anyway.
+ if required && !parser.simple_key_allowed {
+ panic("should not happen")
+ }
+
+ //
+ // If the current position may start a simple key, save it.
+ //
+ if parser.simple_key_allowed {
+ simple_key := yaml_simple_key_t{
+ possible: true,
+ required: required,
+ token_number: parser.tokens_parsed + (len(parser.tokens) - parser.tokens_head),
+ }
+ simple_key.mark = parser.mark
+
+ if !yaml_parser_remove_simple_key(parser) {
+ return false
+ }
+ parser.simple_keys[len(parser.simple_keys)-1] = simple_key
+ }
+ return true
+}
+
+// Remove a potential simple key at the current flow level.
+func yaml_parser_remove_simple_key(parser *yaml_parser_t) bool {
+ i := len(parser.simple_keys) - 1
+ if parser.simple_keys[i].possible {
+ // If the key is required, it is an error.
+ if parser.simple_keys[i].required {
+ return yaml_parser_set_scanner_error(parser,
+ "while scanning a simple key", parser.simple_keys[i].mark,
+ "could not find expected ':'")
+ }
+ }
+ // Remove the key from the stack.
+ parser.simple_keys[i].possible = false
+ return true
+}
+
+// Increase the flow level and resize the simple key list if needed.
+func yaml_parser_increase_flow_level(parser *yaml_parser_t) bool {
+ // Reset the simple key on the next level.
+ parser.simple_keys = append(parser.simple_keys, yaml_simple_key_t{})
+
+ // Increase the flow level.
+ parser.flow_level++
+ return true
+}
+
+// Decrease the flow level.
+func yaml_parser_decrease_flow_level(parser *yaml_parser_t) bool {
+ if parser.flow_level > 0 {
+ parser.flow_level--
+ parser.simple_keys = parser.simple_keys[:len(parser.simple_keys)-1]
+ }
+ return true
+}
+
+// Push the current indentation level to the stack and set the new level
+// the current column is greater than the indentation level. In this case,
+// append or insert the specified token into the token queue.
+func yaml_parser_roll_indent(parser *yaml_parser_t, column, number int, typ yaml_token_type_t, mark yaml_mark_t) bool {
+ // In the flow context, do nothing.
+ if parser.flow_level > 0 {
+ return true
+ }
+
+ if parser.indent < column {
+ // Push the current indentation level to the stack and set the new
+ // indentation level.
+ parser.indents = append(parser.indents, parser.indent)
+ parser.indent = column
+
+ // Create a token and insert it into the queue.
+ token := yaml_token_t{
+ typ: typ,
+ start_mark: mark,
+ end_mark: mark,
+ }
+ if number > -1 {
+ number -= parser.tokens_parsed
+ }
+ yaml_insert_token(parser, number, &token)
+ }
+ return true
+}
+
+// Pop indentation levels from the indents stack until the current level
+// becomes less or equal to the column. For each indentation level, append
+// the BLOCK-END token.
+func yaml_parser_unroll_indent(parser *yaml_parser_t, column int) bool {
+ // In the flow context, do nothing.
+ if parser.flow_level > 0 {
+ return true
+ }
+
+ // Loop through the indentation levels in the stack.
+ for parser.indent > column {
+ // Create a token and append it to the queue.
+ token := yaml_token_t{
+ typ: yaml_BLOCK_END_TOKEN,
+ start_mark: parser.mark,
+ end_mark: parser.mark,
+ }
+ yaml_insert_token(parser, -1, &token)
+
+ // Pop the indentation level.
+ parser.indent = parser.indents[len(parser.indents)-1]
+ parser.indents = parser.indents[:len(parser.indents)-1]
+ }
+ return true
+}
+
+// Initialize the scanner and produce the STREAM-START token.
+func yaml_parser_fetch_stream_start(parser *yaml_parser_t) bool {
+
+ // Set the initial indentation.
+ parser.indent = -1
+
+ // Initialize the simple key stack.
+ parser.simple_keys = append(parser.simple_keys, yaml_simple_key_t{})
+
+ // A simple key is allowed at the beginning of the stream.
+ parser.simple_key_allowed = true
+
+ // We have started.
+ parser.stream_start_produced = true
+
+ // Create the STREAM-START token and append it to the queue.
+ token := yaml_token_t{
+ typ: yaml_STREAM_START_TOKEN,
+ start_mark: parser.mark,
+ end_mark: parser.mark,
+ encoding: parser.encoding,
+ }
+ yaml_insert_token(parser, -1, &token)
+ return true
+}
+
+// Produce the STREAM-END token and shut down the scanner.
+func yaml_parser_fetch_stream_end(parser *yaml_parser_t) bool {
+
+ // Force new line.
+ if parser.mark.column != 0 {
+ parser.mark.column = 0
+ parser.mark.line++
+ }
+
+ // Reset the indentation level.
+ if !yaml_parser_unroll_indent(parser, -1) {
+ return false
+ }
+
+ // Reset simple keys.
+ if !yaml_parser_remove_simple_key(parser) {
+ return false
+ }
+
+ parser.simple_key_allowed = false
+
+ // Create the STREAM-END token and append it to the queue.
+ token := yaml_token_t{
+ typ: yaml_STREAM_END_TOKEN,
+ start_mark: parser.mark,
+ end_mark: parser.mark,
+ }
+ yaml_insert_token(parser, -1, &token)
+ return true
+}
+
+// Produce a VERSION-DIRECTIVE or TAG-DIRECTIVE token.
+func yaml_parser_fetch_directive(parser *yaml_parser_t) bool {
+ // Reset the indentation level.
+ if !yaml_parser_unroll_indent(parser, -1) {
+ return false
+ }
+
+ // Reset simple keys.
+ if !yaml_parser_remove_simple_key(parser) {
+ return false
+ }
+
+ parser.simple_key_allowed = false
+
+ // Create the YAML-DIRECTIVE or TAG-DIRECTIVE token.
+ token := yaml_token_t{}
+ if !yaml_parser_scan_directive(parser, &token) {
+ return false
+ }
+ // Append the token to the queue.
+ yaml_insert_token(parser, -1, &token)
+ return true
+}
+
+// Produce the DOCUMENT-START or DOCUMENT-END token.
+func yaml_parser_fetch_document_indicator(parser *yaml_parser_t, typ yaml_token_type_t) bool {
+ // Reset the indentation level.
+ if !yaml_parser_unroll_indent(parser, -1) {
+ return false
+ }
+
+ // Reset simple keys.
+ if !yaml_parser_remove_simple_key(parser) {
+ return false
+ }
+
+ parser.simple_key_allowed = false
+
+ // Consume the token.
+ start_mark := parser.mark
+
+ skip(parser)
+ skip(parser)
+ skip(parser)
+
+ end_mark := parser.mark
+
+ // Create the DOCUMENT-START or DOCUMENT-END token.
+ token := yaml_token_t{
+ typ: typ,
+ start_mark: start_mark,
+ end_mark: end_mark,
+ }
+ // Append the token to the queue.
+ yaml_insert_token(parser, -1, &token)
+ return true
+}
+
+// Produce the FLOW-SEQUENCE-START or FLOW-MAPPING-START token.
+func yaml_parser_fetch_flow_collection_start(parser *yaml_parser_t, typ yaml_token_type_t) bool {
+ // The indicators '[' and '{' may start a simple key.
+ if !yaml_parser_save_simple_key(parser) {
+ return false
+ }
+
+ // Increase the flow level.
+ if !yaml_parser_increase_flow_level(parser) {
+ return false
+ }
+
+ // A simple key may follow the indicators '[' and '{'.
+ parser.simple_key_allowed = true
+
+ // Consume the token.
+ start_mark := parser.mark
+ skip(parser)
+ end_mark := parser.mark
+
+ // Create the FLOW-SEQUENCE-START of FLOW-MAPPING-START token.
+ token := yaml_token_t{
+ typ: typ,
+ start_mark: start_mark,
+ end_mark: end_mark,
+ }
+ // Append the token to the queue.
+ yaml_insert_token(parser, -1, &token)
+ return true
+}
+
+// Produce the FLOW-SEQUENCE-END or FLOW-MAPPING-END token.
+func yaml_parser_fetch_flow_collection_end(parser *yaml_parser_t, typ yaml_token_type_t) bool {
+ // Reset any potential simple key on the current flow level.
+ if !yaml_parser_remove_simple_key(parser) {
+ return false
+ }
+
+ // Decrease the flow level.
+ if !yaml_parser_decrease_flow_level(parser) {
+ return false
+ }
+
+ // No simple keys after the indicators ']' and '}'.
+ parser.simple_key_allowed = false
+
+ // Consume the token.
+
+ start_mark := parser.mark
+ skip(parser)
+ end_mark := parser.mark
+
+ // Create the FLOW-SEQUENCE-END of FLOW-MAPPING-END token.
+ token := yaml_token_t{
+ typ: typ,
+ start_mark: start_mark,
+ end_mark: end_mark,
+ }
+ // Append the token to the queue.
+ yaml_insert_token(parser, -1, &token)
+ return true
+}
+
+// Produce the FLOW-ENTRY token.
+func yaml_parser_fetch_flow_entry(parser *yaml_parser_t) bool {
+ // Reset any potential simple keys on the current flow level.
+ if !yaml_parser_remove_simple_key(parser) {
+ return false
+ }
+
+ // Simple keys are allowed after ','.
+ parser.simple_key_allowed = true
+
+ // Consume the token.
+ start_mark := parser.mark
+ skip(parser)
+ end_mark := parser.mark
+
+ // Create the FLOW-ENTRY token and append it to the queue.
+ token := yaml_token_t{
+ typ: yaml_FLOW_ENTRY_TOKEN,
+ start_mark: start_mark,
+ end_mark: end_mark,
+ }
+ yaml_insert_token(parser, -1, &token)
+ return true
+}
+
+// Produce the BLOCK-ENTRY token.
+func yaml_parser_fetch_block_entry(parser *yaml_parser_t) bool {
+ // Check if the scanner is in the block context.
+ if parser.flow_level == 0 {
+ // Check if we are allowed to start a new entry.
+ if !parser.simple_key_allowed {
+ return yaml_parser_set_scanner_error(parser, "", parser.mark,
+ "block sequence entries are not allowed in this context")
+ }
+ // Add the BLOCK-SEQUENCE-START token if needed.
+ if !yaml_parser_roll_indent(parser, parser.mark.column, -1, yaml_BLOCK_SEQUENCE_START_TOKEN, parser.mark) {
+ return false
+ }
+ } else {
+ // It is an error for the '-' indicator to occur in the flow context,
+ // but we let the Parser detect and report about it because the Parser
+ // is able to point to the context.
+ }
+
+ // Reset any potential simple keys on the current flow level.
+ if !yaml_parser_remove_simple_key(parser) {
+ return false
+ }
+
+ // Simple keys are allowed after '-'.
+ parser.simple_key_allowed = true
+
+ // Consume the token.
+ start_mark := parser.mark
+ skip(parser)
+ end_mark := parser.mark
+
+ // Create the BLOCK-ENTRY token and append it to the queue.
+ token := yaml_token_t{
+ typ: yaml_BLOCK_ENTRY_TOKEN,
+ start_mark: start_mark,
+ end_mark: end_mark,
+ }
+ yaml_insert_token(parser, -1, &token)
+ return true
+}
+
+// Produce the KEY token.
+func yaml_parser_fetch_key(parser *yaml_parser_t) bool {
+
+ // In the block context, additional checks are required.
+ if parser.flow_level == 0 {
+ // Check if we are allowed to start a new key (not nessesary simple).
+ if !parser.simple_key_allowed {
+ return yaml_parser_set_scanner_error(parser, "", parser.mark,
+ "mapping keys are not allowed in this context")
+ }
+ // Add the BLOCK-MAPPING-START token if needed.
+ if !yaml_parser_roll_indent(parser, parser.mark.column, -1, yaml_BLOCK_MAPPING_START_TOKEN, parser.mark) {
+ return false
+ }
+ }
+
+ // Reset any potential simple keys on the current flow level.
+ if !yaml_parser_remove_simple_key(parser) {
+ return false
+ }
+
+ // Simple keys are allowed after '?' in the block context.
+ parser.simple_key_allowed = parser.flow_level == 0
+
+ // Consume the token.
+ start_mark := parser.mark
+ skip(parser)
+ end_mark := parser.mark
+
+ // Create the KEY token and append it to the queue.
+ token := yaml_token_t{
+ typ: yaml_KEY_TOKEN,
+ start_mark: start_mark,
+ end_mark: end_mark,
+ }
+ yaml_insert_token(parser, -1, &token)
+ return true
+}
+
+// Produce the VALUE token.
+func yaml_parser_fetch_value(parser *yaml_parser_t) bool {
+
+ simple_key := &parser.simple_keys[len(parser.simple_keys)-1]
+
+ // Have we found a simple key?
+ if simple_key.possible {
+ // Create the KEY token and insert it into the queue.
+ token := yaml_token_t{
+ typ: yaml_KEY_TOKEN,
+ start_mark: simple_key.mark,
+ end_mark: simple_key.mark,
+ }
+ yaml_insert_token(parser, simple_key.token_number-parser.tokens_parsed, &token)
+
+ // In the block context, we may need to add the BLOCK-MAPPING-START token.
+ if !yaml_parser_roll_indent(parser, simple_key.mark.column,
+ simple_key.token_number,
+ yaml_BLOCK_MAPPING_START_TOKEN, simple_key.mark) {
+ return false
+ }
+
+ // Remove the simple key.
+ simple_key.possible = false
+
+ // A simple key cannot follow another simple key.
+ parser.simple_key_allowed = false
+
+ } else {
+ // The ':' indicator follows a complex key.
+
+ // In the block context, extra checks are required.
+ if parser.flow_level == 0 {
+
+ // Check if we are allowed to start a complex value.
+ if !parser.simple_key_allowed {
+ return yaml_parser_set_scanner_error(parser, "", parser.mark,
+ "mapping values are not allowed in this context")
+ }
+
+ // Add the BLOCK-MAPPING-START token if needed.
+ if !yaml_parser_roll_indent(parser, parser.mark.column, -1, yaml_BLOCK_MAPPING_START_TOKEN, parser.mark) {
+ return false
+ }
+ }
+
+ // Simple keys after ':' are allowed in the block context.
+ parser.simple_key_allowed = parser.flow_level == 0
+ }
+
+ // Consume the token.
+ start_mark := parser.mark
+ skip(parser)
+ end_mark := parser.mark
+
+ // Create the VALUE token and append it to the queue.
+ token := yaml_token_t{
+ typ: yaml_VALUE_TOKEN,
+ start_mark: start_mark,
+ end_mark: end_mark,
+ }
+ yaml_insert_token(parser, -1, &token)
+ return true
+}
+
+// Produce the ALIAS or ANCHOR token.
+func yaml_parser_fetch_anchor(parser *yaml_parser_t, typ yaml_token_type_t) bool {
+ // An anchor or an alias could be a simple key.
+ if !yaml_parser_save_simple_key(parser) {
+ return false
+ }
+
+ // A simple key cannot follow an anchor or an alias.
+ parser.simple_key_allowed = false
+
+ // Create the ALIAS or ANCHOR token and append it to the queue.
+ var token yaml_token_t
+ if !yaml_parser_scan_anchor(parser, &token, typ) {
+ return false
+ }
+ yaml_insert_token(parser, -1, &token)
+ return true
+}
+
+// Produce the TAG token.
+func yaml_parser_fetch_tag(parser *yaml_parser_t) bool {
+ // A tag could be a simple key.
+ if !yaml_parser_save_simple_key(parser) {
+ return false
+ }
+
+ // A simple key cannot follow a tag.
+ parser.simple_key_allowed = false
+
+ // Create the TAG token and append it to the queue.
+ var token yaml_token_t
+ if !yaml_parser_scan_tag(parser, &token) {
+ return false
+ }
+ yaml_insert_token(parser, -1, &token)
+ return true
+}
+
+// Produce the SCALAR(...,literal) or SCALAR(...,folded) tokens.
+func yaml_parser_fetch_block_scalar(parser *yaml_parser_t, literal bool) bool {
+ // Remove any potential simple keys.
+ if !yaml_parser_remove_simple_key(parser) {
+ return false
+ }
+
+ // A simple key may follow a block scalar.
+ parser.simple_key_allowed = true
+
+ // Create the SCALAR token and append it to the queue.
+ var token yaml_token_t
+ if !yaml_parser_scan_block_scalar(parser, &token, literal) {
+ return false
+ }
+ yaml_insert_token(parser, -1, &token)
+ return true
+}
+
+// Produce the SCALAR(...,single-quoted) or SCALAR(...,double-quoted) tokens.
+func yaml_parser_fetch_flow_scalar(parser *yaml_parser_t, single bool) bool {
+ // A plain scalar could be a simple key.
+ if !yaml_parser_save_simple_key(parser) {
+ return false
+ }
+
+ // A simple key cannot follow a flow scalar.
+ parser.simple_key_allowed = false
+
+ // Create the SCALAR token and append it to the queue.
+ var token yaml_token_t
+ if !yaml_parser_scan_flow_scalar(parser, &token, single) {
+ return false
+ }
+ yaml_insert_token(parser, -1, &token)
+ return true
+}
+
+// Produce the SCALAR(...,plain) token.
+func yaml_parser_fetch_plain_scalar(parser *yaml_parser_t) bool {
+ // A plain scalar could be a simple key.
+ if !yaml_parser_save_simple_key(parser) {
+ return false
+ }
+
+ // A simple key cannot follow a flow scalar.
+ parser.simple_key_allowed = false
+
+ // Create the SCALAR token and append it to the queue.
+ var token yaml_token_t
+ if !yaml_parser_scan_plain_scalar(parser, &token) {
+ return false
+ }
+ yaml_insert_token(parser, -1, &token)
+ return true
+}
+
+// Eat whitespaces and comments until the next token is found.
+func yaml_parser_scan_to_next_token(parser *yaml_parser_t) bool {
+
+ // Until the next token is not found.
+ for {
+ // Allow the BOM mark to start a line.
+ if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
+ return false
+ }
+ if parser.mark.column == 0 && is_bom(parser.buffer, parser.buffer_pos) {
+ skip(parser)
+ }
+
+ // Eat whitespaces.
+ // Tabs are allowed:
+ // - in the flow context
+ // - in the block context, but not at the beginning of the line or
+ // after '-', '?', or ':' (complex value).
+ if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
+ return false
+ }
+
+ for parser.buffer[parser.buffer_pos] == ' ' || ((parser.flow_level > 0 || !parser.simple_key_allowed) && parser.buffer[parser.buffer_pos] == '\t') {
+ skip(parser)
+ if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
+ return false
+ }
+ }
+
+ // Eat a comment until a line break.
+ if parser.buffer[parser.buffer_pos] == '#' {
+ for !is_breakz(parser.buffer, parser.buffer_pos) {
+ skip(parser)
+ if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
+ return false
+ }
+ }
+ }
+
+ // If it is a line break, eat it.
+ if is_break(parser.buffer, parser.buffer_pos) {
+ if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) {
+ return false
+ }
+ skip_line(parser)
+
+ // In the block context, a new line may start a simple key.
+ if parser.flow_level == 0 {
+ parser.simple_key_allowed = true
+ }
+ } else {
+ break // We have found a token.
+ }
+ }
+
+ return true
+}
+
+// Scan a YAML-DIRECTIVE or TAG-DIRECTIVE token.
+//
+// Scope:
+// %YAML 1.1 # a comment \n
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// %TAG !yaml! tag:yaml.org,2002: \n
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+func yaml_parser_scan_directive(parser *yaml_parser_t, token *yaml_token_t) bool {
+ // Eat '%'.
+ start_mark := parser.mark
+ skip(parser)
+
+ // Scan the directive name.
+ var name []byte
+ if !yaml_parser_scan_directive_name(parser, start_mark, &name) {
+ return false
+ }
+
+ // Is it a YAML directive?
+ if bytes.Equal(name, []byte("YAML")) {
+ // Scan the VERSION directive value.
+ var major, minor int8
+ if !yaml_parser_scan_version_directive_value(parser, start_mark, &major, &minor) {
+ return false
+ }
+ end_mark := parser.mark
+
+ // Create a VERSION-DIRECTIVE token.
+ *token = yaml_token_t{
+ typ: yaml_VERSION_DIRECTIVE_TOKEN,
+ start_mark: start_mark,
+ end_mark: end_mark,
+ major: major,
+ minor: minor,
+ }
+
+ // Is it a TAG directive?
+ } else if bytes.Equal(name, []byte("TAG")) {
+ // Scan the TAG directive value.
+ var handle, prefix []byte
+ if !yaml_parser_scan_tag_directive_value(parser, start_mark, &handle, &prefix) {
+ return false
+ }
+ end_mark := parser.mark
+
+ // Create a TAG-DIRECTIVE token.
+ *token = yaml_token_t{
+ typ: yaml_TAG_DIRECTIVE_TOKEN,
+ start_mark: start_mark,
+ end_mark: end_mark,
+ value: handle,
+ prefix: prefix,
+ }
+
+ // Unknown directive.
+ } else {
+ yaml_parser_set_scanner_error(parser, "while scanning a directive",
+ start_mark, "found unknown directive name")
+ return false
+ }
+
+ // Eat the rest of the line including any comments.
+ if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
+ return false
+ }
+
+ for is_blank(parser.buffer, parser.buffer_pos) {
+ skip(parser)
+ if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
+ return false
+ }
+ }
+
+ if parser.buffer[parser.buffer_pos] == '#' {
+ for !is_breakz(parser.buffer, parser.buffer_pos) {
+ skip(parser)
+ if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
+ return false
+ }
+ }
+ }
+
+ // Check if we are at the end of the line.
+ if !is_breakz(parser.buffer, parser.buffer_pos) {
+ yaml_parser_set_scanner_error(parser, "while scanning a directive",
+ start_mark, "did not find expected comment or line break")
+ return false
+ }
+
+ // Eat a line break.
+ if is_break(parser.buffer, parser.buffer_pos) {
+ if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) {
+ return false
+ }
+ skip_line(parser)
+ }
+
+ return true
+}
+
+// Scan the directive name.
+//
+// Scope:
+// %YAML 1.1 # a comment \n
+// ^^^^
+// %TAG !yaml! tag:yaml.org,2002: \n
+// ^^^
+//
+func yaml_parser_scan_directive_name(parser *yaml_parser_t, start_mark yaml_mark_t, name *[]byte) bool {
+ // Consume the directive name.
+ if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
+ return false
+ }
+
+ var s []byte
+ for is_alpha(parser.buffer, parser.buffer_pos) {
+ s = read(parser, s)
+ if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
+ return false
+ }
+ }
+
+ // Check if the name is empty.
+ if len(s) == 0 {
+ yaml_parser_set_scanner_error(parser, "while scanning a directive",
+ start_mark, "could not find expected directive name")
+ return false
+ }
+
+ // Check for an blank character after the name.
+ if !is_blankz(parser.buffer, parser.buffer_pos) {
+ yaml_parser_set_scanner_error(parser, "while scanning a directive",
+ start_mark, "found unexpected non-alphabetical character")
+ return false
+ }
+ *name = s
+ return true
+}
+
+// Scan the value of VERSION-DIRECTIVE.
+//
+// Scope:
+// %YAML 1.1 # a comment \n
+// ^^^^^^
+func yaml_parser_scan_version_directive_value(parser *yaml_parser_t, start_mark yaml_mark_t, major, minor *int8) bool {
+ // Eat whitespaces.
+ if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
+ return false
+ }
+ for is_blank(parser.buffer, parser.buffer_pos) {
+ skip(parser)
+ if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
+ return false
+ }
+ }
+
+ // Consume the major version number.
+ if !yaml_parser_scan_version_directive_number(parser, start_mark, major) {
+ return false
+ }
+
+ // Eat '.'.
+ if parser.buffer[parser.buffer_pos] != '.' {
+ return yaml_parser_set_scanner_error(parser, "while scanning a %YAML directive",
+ start_mark, "did not find expected digit or '.' character")
+ }
+
+ skip(parser)
+
+ // Consume the minor version number.
+ if !yaml_parser_scan_version_directive_number(parser, start_mark, minor) {
+ return false
+ }
+ return true
+}
+
+const max_number_length = 2
+
+// Scan the version number of VERSION-DIRECTIVE.
+//
+// Scope:
+// %YAML 1.1 # a comment \n
+// ^
+// %YAML 1.1 # a comment \n
+// ^
+func yaml_parser_scan_version_directive_number(parser *yaml_parser_t, start_mark yaml_mark_t, number *int8) bool {
+
+ // Repeat while the next character is digit.
+ if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
+ return false
+ }
+ var value, length int8
+ for is_digit(parser.buffer, parser.buffer_pos) {
+ // Check if the number is too long.
+ length++
+ if length > max_number_length {
+ return yaml_parser_set_scanner_error(parser, "while scanning a %YAML directive",
+ start_mark, "found extremely long version number")
+ }
+ value = value*10 + int8(as_digit(parser.buffer, parser.buffer_pos))
+ skip(parser)
+ if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
+ return false
+ }
+ }
+
+ // Check if the number was present.
+ if length == 0 {
+ return yaml_parser_set_scanner_error(parser, "while scanning a %YAML directive",
+ start_mark, "did not find expected version number")
+ }
+ *number = value
+ return true
+}
+
+// Scan the value of a TAG-DIRECTIVE token.
+//
+// Scope:
+// %TAG !yaml! tag:yaml.org,2002: \n
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+func yaml_parser_scan_tag_directive_value(parser *yaml_parser_t, start_mark yaml_mark_t, handle, prefix *[]byte) bool {
+ var handle_value, prefix_value []byte
+
+ // Eat whitespaces.
+ if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
+ return false
+ }
+
+ for is_blank(parser.buffer, parser.buffer_pos) {
+ skip(parser)
+ if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
+ return false
+ }
+ }
+
+ // Scan a handle.
+ if !yaml_parser_scan_tag_handle(parser, true, start_mark, &handle_value) {
+ return false
+ }
+
+ // Expect a whitespace.
+ if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
+ return false
+ }
+ if !is_blank(parser.buffer, parser.buffer_pos) {
+ yaml_parser_set_scanner_error(parser, "while scanning a %TAG directive",
+ start_mark, "did not find expected whitespace")
+ return false
+ }
+
+ // Eat whitespaces.
+ for is_blank(parser.buffer, parser.buffer_pos) {
+ skip(parser)
+ if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
+ return false
+ }
+ }
+
+ // Scan a prefix.
+ if !yaml_parser_scan_tag_uri(parser, true, nil, start_mark, &prefix_value) {
+ return false
+ }
+
+ // Expect a whitespace or line break.
+ if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
+ return false
+ }
+ if !is_blankz(parser.buffer, parser.buffer_pos) {
+ yaml_parser_set_scanner_error(parser, "while scanning a %TAG directive",
+ start_mark, "did not find expected whitespace or line break")
+ return false
+ }
+
+ *handle = handle_value
+ *prefix = prefix_value
+ return true
+}
+
+func yaml_parser_scan_anchor(parser *yaml_parser_t, token *yaml_token_t, typ yaml_token_type_t) bool {
+ var s []byte
+
+ // Eat the indicator character.
+ start_mark := parser.mark
+ skip(parser)
+
+ // Consume the value.
+ if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
+ return false
+ }
+
+ for is_alpha(parser.buffer, parser.buffer_pos) {
+ s = read(parser, s)
+ if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
+ return false
+ }
+ }
+
+ end_mark := parser.mark
+
+ /*
+ * Check if length of the anchor is greater than 0 and it is followed by
+ * a whitespace character or one of the indicators:
+ *
+ * '?', ':', ',', ']', '}', '%', '@', '`'.
+ */
+
+ if len(s) == 0 ||
+ !(is_blankz(parser.buffer, parser.buffer_pos) || parser.buffer[parser.buffer_pos] == '?' ||
+ parser.buffer[parser.buffer_pos] == ':' || parser.buffer[parser.buffer_pos] == ',' ||
+ parser.buffer[parser.buffer_pos] == ']' || parser.buffer[parser.buffer_pos] == '}' ||
+ parser.buffer[parser.buffer_pos] == '%' || parser.buffer[parser.buffer_pos] == '@' ||
+ parser.buffer[parser.buffer_pos] == '`') {
+ context := "while scanning an alias"
+ if typ == yaml_ANCHOR_TOKEN {
+ context = "while scanning an anchor"
+ }
+ yaml_parser_set_scanner_error(parser, context, start_mark,
+ "did not find expected alphabetic or numeric character")
+ return false
+ }
+
+ // Create a token.
+ *token = yaml_token_t{
+ typ: typ,
+ start_mark: start_mark,
+ end_mark: end_mark,
+ value: s,
+ }
+
+ return true
+}
+
+/*
+ * Scan a TAG token.
+ */
+
+func yaml_parser_scan_tag(parser *yaml_parser_t, token *yaml_token_t) bool {
+ var handle, suffix []byte
+
+ start_mark := parser.mark
+
+ // Check if the tag is in the canonical form.
+ if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) {
+ return false
+ }
+
+ if parser.buffer[parser.buffer_pos+1] == '<' {
+ // Keep the handle as ''
+
+ // Eat '!<'
+ skip(parser)
+ skip(parser)
+
+ // Consume the tag value.
+ if !yaml_parser_scan_tag_uri(parser, false, nil, start_mark, &suffix) {
+ return false
+ }
+
+ // Check for '>' and eat it.
+ if parser.buffer[parser.buffer_pos] != '>' {
+ yaml_parser_set_scanner_error(parser, "while scanning a tag",
+ start_mark, "did not find the expected '>'")
+ return false
+ }
+
+ skip(parser)
+ } else {
+ // The tag has either the '!suffix' or the '!handle!suffix' form.
+
+ // First, try to scan a handle.
+ if !yaml_parser_scan_tag_handle(parser, false, start_mark, &handle) {
+ return false
+ }
+
+ // Check if it is, indeed, handle.
+ if handle[0] == '!' && len(handle) > 1 && handle[len(handle)-1] == '!' {
+ // Scan the suffix now.
+ if !yaml_parser_scan_tag_uri(parser, false, nil, start_mark, &suffix) {
+ return false
+ }
+ } else {
+ // It wasn't a handle after all. Scan the rest of the tag.
+ if !yaml_parser_scan_tag_uri(parser, false, handle, start_mark, &suffix) {
+ return false
+ }
+
+ // Set the handle to '!'.
+ handle = []byte{'!'}
+
+ // A special case: the '!' tag. Set the handle to '' and the
+ // suffix to '!'.
+ if len(suffix) == 0 {
+ handle, suffix = suffix, handle
+ }
+ }
+ }
+
+ // Check the character which ends the tag.
+ if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
+ return false
+ }
+ if !is_blankz(parser.buffer, parser.buffer_pos) {
+ yaml_parser_set_scanner_error(parser, "while scanning a tag",
+ start_mark, "did not find expected whitespace or line break")
+ return false
+ }
+
+ end_mark := parser.mark
+
+ // Create a token.
+ *token = yaml_token_t{
+ typ: yaml_TAG_TOKEN,
+ start_mark: start_mark,
+ end_mark: end_mark,
+ value: handle,
+ suffix: suffix,
+ }
+ return true
+}
+
+// Scan a tag handle.
+func yaml_parser_scan_tag_handle(parser *yaml_parser_t, directive bool, start_mark yaml_mark_t, handle *[]byte) bool {
+ // Check the initial '!' character.
+ if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
+ return false
+ }
+ if parser.buffer[parser.buffer_pos] != '!' {
+ yaml_parser_set_scanner_tag_error(parser, directive,
+ start_mark, "did not find expected '!'")
+ return false
+ }
+
+ var s []byte
+
+ // Copy the '!' character.
+ s = read(parser, s)
+
+ // Copy all subsequent alphabetical and numerical characters.
+ if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
+ return false
+ }
+ for is_alpha(parser.buffer, parser.buffer_pos) {
+ s = read(parser, s)
+ if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
+ return false
+ }
+ }
+
+ // Check if the trailing character is '!' and copy it.
+ if parser.buffer[parser.buffer_pos] == '!' {
+ s = read(parser, s)
+ } else {
+ // It's either the '!' tag or not really a tag handle. If it's a %TAG
+ // directive, it's an error. If it's a tag token, it must be a part of URI.
+ if directive && string(s) != "!" {
+ yaml_parser_set_scanner_tag_error(parser, directive,
+ start_mark, "did not find expected '!'")
+ return false
+ }
+ }
+
+ *handle = s
+ return true
+}
+
+// Scan a tag.
+func yaml_parser_scan_tag_uri(parser *yaml_parser_t, directive bool, head []byte, start_mark yaml_mark_t, uri *[]byte) bool {
+ //size_t length = head ? strlen((char *)head) : 0
+ var s []byte
+ hasTag := len(head) > 0
+
+ // Copy the head if needed.
+ //
+ // Note that we don't copy the leading '!' character.
+ if len(head) > 1 {
+ s = append(s, head[1:]...)
+ }
+
+ // Scan the tag.
+ if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
+ return false
+ }
+
+ // The set of characters that may appear in URI is as follows:
+ //
+ // '0'-'9', 'A'-'Z', 'a'-'z', '_', '-', ';', '/', '?', ':', '@', '&',
+ // '=', '+', '$', ',', '.', '!', '~', '*', '\'', '(', ')', '[', ']',
+ // '%'.
+ // [Go] Convert this into more reasonable logic.
+ for is_alpha(parser.buffer, parser.buffer_pos) || parser.buffer[parser.buffer_pos] == ';' ||
+ parser.buffer[parser.buffer_pos] == '/' || parser.buffer[parser.buffer_pos] == '?' ||
+ parser.buffer[parser.buffer_pos] == ':' || parser.buffer[parser.buffer_pos] == '@' ||
+ parser.buffer[parser.buffer_pos] == '&' || parser.buffer[parser.buffer_pos] == '=' ||
+ parser.buffer[parser.buffer_pos] == '+' || parser.buffer[parser.buffer_pos] == '$' ||
+ parser.buffer[parser.buffer_pos] == ',' || parser.buffer[parser.buffer_pos] == '.' ||
+ parser.buffer[parser.buffer_pos] == '!' || parser.buffer[parser.buffer_pos] == '~' ||
+ parser.buffer[parser.buffer_pos] == '*' || parser.buffer[parser.buffer_pos] == '\'' ||
+ parser.buffer[parser.buffer_pos] == '(' || parser.buffer[parser.buffer_pos] == ')' ||
+ parser.buffer[parser.buffer_pos] == '[' || parser.buffer[parser.buffer_pos] == ']' ||
+ parser.buffer[parser.buffer_pos] == '%' {
+ // Check if it is a URI-escape sequence.
+ if parser.buffer[parser.buffer_pos] == '%' {
+ if !yaml_parser_scan_uri_escapes(parser, directive, start_mark, &s) {
+ return false
+ }
+ } else {
+ s = read(parser, s)
+ }
+ if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
+ return false
+ }
+ hasTag = true
+ }
+
+ if !hasTag {
+ yaml_parser_set_scanner_tag_error(parser, directive,
+ start_mark, "did not find expected tag URI")
+ return false
+ }
+ *uri = s
+ return true
+}
+
+// Decode an URI-escape sequence corresponding to a single UTF-8 character.
+func yaml_parser_scan_uri_escapes(parser *yaml_parser_t, directive bool, start_mark yaml_mark_t, s *[]byte) bool {
+
+ // Decode the required number of characters.
+ w := 1024
+ for w > 0 {
+ // Check for a URI-escaped octet.
+ if parser.unread < 3 && !yaml_parser_update_buffer(parser, 3) {
+ return false
+ }
+
+ if !(parser.buffer[parser.buffer_pos] == '%' &&
+ is_hex(parser.buffer, parser.buffer_pos+1) &&
+ is_hex(parser.buffer, parser.buffer_pos+2)) {
+ return yaml_parser_set_scanner_tag_error(parser, directive,
+ start_mark, "did not find URI escaped octet")
+ }
+
+ // Get the octet.
+ octet := byte((as_hex(parser.buffer, parser.buffer_pos+1) << 4) + as_hex(parser.buffer, parser.buffer_pos+2))
+
+ // If it is the leading octet, determine the length of the UTF-8 sequence.
+ if w == 1024 {
+ w = width(octet)
+ if w == 0 {
+ return yaml_parser_set_scanner_tag_error(parser, directive,
+ start_mark, "found an incorrect leading UTF-8 octet")
+ }
+ } else {
+ // Check if the trailing octet is correct.
+ if octet&0xC0 != 0x80 {
+ return yaml_parser_set_scanner_tag_error(parser, directive,
+ start_mark, "found an incorrect trailing UTF-8 octet")
+ }
+ }
+
+ // Copy the octet and move the pointers.
+ *s = append(*s, octet)
+ skip(parser)
+ skip(parser)
+ skip(parser)
+ w--
+ }
+ return true
+}
+
+// Scan a block scalar.
+func yaml_parser_scan_block_scalar(parser *yaml_parser_t, token *yaml_token_t, literal bool) bool {
+ // Eat the indicator '|' or '>'.
+ start_mark := parser.mark
+ skip(parser)
+
+ // Scan the additional block scalar indicators.
+ if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
+ return false
+ }
+
+ // Check for a chomping indicator.
+ var chomping, increment int
+ if parser.buffer[parser.buffer_pos] == '+' || parser.buffer[parser.buffer_pos] == '-' {
+ // Set the chomping method and eat the indicator.
+ if parser.buffer[parser.buffer_pos] == '+' {
+ chomping = +1
+ } else {
+ chomping = -1
+ }
+ skip(parser)
+
+ // Check for an indentation indicator.
+ if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
+ return false
+ }
+ if is_digit(parser.buffer, parser.buffer_pos) {
+ // Check that the indentation is greater than 0.
+ if parser.buffer[parser.buffer_pos] == '0' {
+ yaml_parser_set_scanner_error(parser, "while scanning a block scalar",
+ start_mark, "found an indentation indicator equal to 0")
+ return false
+ }
+
+ // Get the indentation level and eat the indicator.
+ increment = as_digit(parser.buffer, parser.buffer_pos)
+ skip(parser)
+ }
+
+ } else if is_digit(parser.buffer, parser.buffer_pos) {
+ // Do the same as above, but in the opposite order.
+
+ if parser.buffer[parser.buffer_pos] == '0' {
+ yaml_parser_set_scanner_error(parser, "while scanning a block scalar",
+ start_mark, "found an indentation indicator equal to 0")
+ return false
+ }
+ increment = as_digit(parser.buffer, parser.buffer_pos)
+ skip(parser)
+
+ if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
+ return false
+ }
+ if parser.buffer[parser.buffer_pos] == '+' || parser.buffer[parser.buffer_pos] == '-' {
+ if parser.buffer[parser.buffer_pos] == '+' {
+ chomping = +1
+ } else {
+ chomping = -1
+ }
+ skip(parser)
+ }
+ }
+
+ // Eat whitespaces and comments to the end of the line.
+ if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
+ return false
+ }
+ for is_blank(parser.buffer, parser.buffer_pos) {
+ skip(parser)
+ if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
+ return false
+ }
+ }
+ if parser.buffer[parser.buffer_pos] == '#' {
+ for !is_breakz(parser.buffer, parser.buffer_pos) {
+ skip(parser)
+ if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
+ return false
+ }
+ }
+ }
+
+ // Check if we are at the end of the line.
+ if !is_breakz(parser.buffer, parser.buffer_pos) {
+ yaml_parser_set_scanner_error(parser, "while scanning a block scalar",
+ start_mark, "did not find expected comment or line break")
+ return false
+ }
+
+ // Eat a line break.
+ if is_break(parser.buffer, parser.buffer_pos) {
+ if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) {
+ return false
+ }
+ skip_line(parser)
+ }
+
+ end_mark := parser.mark
+
+ // Set the indentation level if it was specified.
+ var indent int
+ if increment > 0 {
+ if parser.indent >= 0 {
+ indent = parser.indent + increment
+ } else {
+ indent = increment
+ }
+ }
+
+ // Scan the leading line breaks and determine the indentation level if needed.
+ var s, leading_break, trailing_breaks []byte
+ if !yaml_parser_scan_block_scalar_breaks(parser, &indent, &trailing_breaks, start_mark, &end_mark) {
+ return false
+ }
+
+ // Scan the block scalar content.
+ if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
+ return false
+ }
+ var leading_blank, trailing_blank bool
+ for parser.mark.column == indent && !is_z(parser.buffer, parser.buffer_pos) {
+ // We are at the beginning of a non-empty line.
+
+ // Is it a trailing whitespace?
+ trailing_blank = is_blank(parser.buffer, parser.buffer_pos)
+
+ // Check if we need to fold the leading line break.
+ if !literal && !leading_blank && !trailing_blank && len(leading_break) > 0 && leading_break[0] == '\n' {
+ // Do we need to join the lines by space?
+ if len(trailing_breaks) == 0 {
+ s = append(s, ' ')
+ }
+ } else {
+ s = append(s, leading_break...)
+ }
+ leading_break = leading_break[:0]
+
+ // Append the remaining line breaks.
+ s = append(s, trailing_breaks...)
+ trailing_breaks = trailing_breaks[:0]
+
+ // Is it a leading whitespace?
+ leading_blank = is_blank(parser.buffer, parser.buffer_pos)
+
+ // Consume the current line.
+ for !is_breakz(parser.buffer, parser.buffer_pos) {
+ s = read(parser, s)
+ if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
+ return false
+ }
+ }
+
+ // Consume the line break.
+ if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) {
+ return false
+ }
+
+ leading_break = read_line(parser, leading_break)
+
+ // Eat the following indentation spaces and line breaks.
+ if !yaml_parser_scan_block_scalar_breaks(parser, &indent, &trailing_breaks, start_mark, &end_mark) {
+ return false
+ }
+ }
+
+ // Chomp the tail.
+ if chomping != -1 {
+ s = append(s, leading_break...)
+ }
+ if chomping == 1 {
+ s = append(s, trailing_breaks...)
+ }
+
+ // Create a token.
+ *token = yaml_token_t{
+ typ: yaml_SCALAR_TOKEN,
+ start_mark: start_mark,
+ end_mark: end_mark,
+ value: s,
+ style: yaml_LITERAL_SCALAR_STYLE,
+ }
+ if !literal {
+ token.style = yaml_FOLDED_SCALAR_STYLE
+ }
+ return true
+}
+
+// Scan indentation spaces and line breaks for a block scalar. Determine the
+// indentation level if needed.
+func yaml_parser_scan_block_scalar_breaks(parser *yaml_parser_t, indent *int, breaks *[]byte, start_mark yaml_mark_t, end_mark *yaml_mark_t) bool {
+ *end_mark = parser.mark
+
+ // Eat the indentation spaces and line breaks.
+ max_indent := 0
+ for {
+ // Eat the indentation spaces.
+ if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
+ return false
+ }
+ for (*indent == 0 || parser.mark.column < *indent) && is_space(parser.buffer, parser.buffer_pos) {
+ skip(parser)
+ if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
+ return false
+ }
+ }
+ if parser.mark.column > max_indent {
+ max_indent = parser.mark.column
+ }
+
+ // Check for a tab character messing the indentation.
+ if (*indent == 0 || parser.mark.column < *indent) && is_tab(parser.buffer, parser.buffer_pos) {
+ return yaml_parser_set_scanner_error(parser, "while scanning a block scalar",
+ start_mark, "found a tab character where an indentation space is expected")
+ }
+
+ // Have we found a non-empty line?
+ if !is_break(parser.buffer, parser.buffer_pos) {
+ break
+ }
+
+ // Consume the line break.
+ if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) {
+ return false
+ }
+ // [Go] Should really be returning breaks instead.
+ *breaks = read_line(parser, *breaks)
+ *end_mark = parser.mark
+ }
+
+ // Determine the indentation level if needed.
+ if *indent == 0 {
+ *indent = max_indent
+ if *indent < parser.indent+1 {
+ *indent = parser.indent + 1
+ }
+ if *indent < 1 {
+ *indent = 1
+ }
+ }
+ return true
+}
+
+// Scan a quoted scalar.
+func yaml_parser_scan_flow_scalar(parser *yaml_parser_t, token *yaml_token_t, single bool) bool {
+ // Eat the left quote.
+ start_mark := parser.mark
+ skip(parser)
+
+ // Consume the content of the quoted scalar.
+ var s, leading_break, trailing_breaks, whitespaces []byte
+ for {
+ // Check that there are no document indicators at the beginning of the line.
+ if parser.unread < 4 && !yaml_parser_update_buffer(parser, 4) {
+ return false
+ }
+
+ if parser.mark.column == 0 &&
+ ((parser.buffer[parser.buffer_pos+0] == '-' &&
+ parser.buffer[parser.buffer_pos+1] == '-' &&
+ parser.buffer[parser.buffer_pos+2] == '-') ||
+ (parser.buffer[parser.buffer_pos+0] == '.' &&
+ parser.buffer[parser.buffer_pos+1] == '.' &&
+ parser.buffer[parser.buffer_pos+2] == '.')) &&
+ is_blankz(parser.buffer, parser.buffer_pos+3) {
+ yaml_parser_set_scanner_error(parser, "while scanning a quoted scalar",
+ start_mark, "found unexpected document indicator")
+ return false
+ }
+
+ // Check for EOF.
+ if is_z(parser.buffer, parser.buffer_pos) {
+ yaml_parser_set_scanner_error(parser, "while scanning a quoted scalar",
+ start_mark, "found unexpected end of stream")
+ return false
+ }
+
+ // Consume non-blank characters.
+ leading_blanks := false
+ for !is_blankz(parser.buffer, parser.buffer_pos) {
+ if single && parser.buffer[parser.buffer_pos] == '\'' && parser.buffer[parser.buffer_pos+1] == '\'' {
+ // Is is an escaped single quote.
+ s = append(s, '\'')
+ skip(parser)
+ skip(parser)
+
+ } else if single && parser.buffer[parser.buffer_pos] == '\'' {
+ // It is a right single quote.
+ break
+ } else if !single && parser.buffer[parser.buffer_pos] == '"' {
+ // It is a right double quote.
+ break
+
+ } else if !single && parser.buffer[parser.buffer_pos] == '\\' && is_break(parser.buffer, parser.buffer_pos+1) {
+ // It is an escaped line break.
+ if parser.unread < 3 && !yaml_parser_update_buffer(parser, 3) {
+ return false
+ }
+ skip(parser)
+ skip_line(parser)
+ leading_blanks = true
+ break
+
+ } else if !single && parser.buffer[parser.buffer_pos] == '\\' {
+ // It is an escape sequence.
+ code_length := 0
+
+ // Check the escape character.
+ switch parser.buffer[parser.buffer_pos+1] {
+ case '0':
+ s = append(s, 0)
+ case 'a':
+ s = append(s, '\x07')
+ case 'b':
+ s = append(s, '\x08')
+ case 't', '\t':
+ s = append(s, '\x09')
+ case 'n':
+ s = append(s, '\x0A')
+ case 'v':
+ s = append(s, '\x0B')
+ case 'f':
+ s = append(s, '\x0C')
+ case 'r':
+ s = append(s, '\x0D')
+ case 'e':
+ s = append(s, '\x1B')
+ case ' ':
+ s = append(s, '\x20')
+ case '"':
+ s = append(s, '"')
+ case '\'':
+ s = append(s, '\'')
+ case '\\':
+ s = append(s, '\\')
+ case 'N': // NEL (#x85)
+ s = append(s, '\xC2')
+ s = append(s, '\x85')
+ case '_': // #xA0
+ s = append(s, '\xC2')
+ s = append(s, '\xA0')
+ case 'L': // LS (#x2028)
+ s = append(s, '\xE2')
+ s = append(s, '\x80')
+ s = append(s, '\xA8')
+ case 'P': // PS (#x2029)
+ s = append(s, '\xE2')
+ s = append(s, '\x80')
+ s = append(s, '\xA9')
+ case 'x':
+ code_length = 2
+ case 'u':
+ code_length = 4
+ case 'U':
+ code_length = 8
+ default:
+ yaml_parser_set_scanner_error(parser, "while parsing a quoted scalar",
+ start_mark, "found unknown escape character")
+ return false
+ }
+
+ skip(parser)
+ skip(parser)
+
+ // Consume an arbitrary escape code.
+ if code_length > 0 {
+ var value int
+
+ // Scan the character value.
+ if parser.unread < code_length && !yaml_parser_update_buffer(parser, code_length) {
+ return false
+ }
+ for k := 0; k < code_length; k++ {
+ if !is_hex(parser.buffer, parser.buffer_pos+k) {
+ yaml_parser_set_scanner_error(parser, "while parsing a quoted scalar",
+ start_mark, "did not find expected hexdecimal number")
+ return false
+ }
+ value = (value << 4) + as_hex(parser.buffer, parser.buffer_pos+k)
+ }
+
+ // Check the value and write the character.
+ if (value >= 0xD800 && value <= 0xDFFF) || value > 0x10FFFF {
+ yaml_parser_set_scanner_error(parser, "while parsing a quoted scalar",
+ start_mark, "found invalid Unicode character escape code")
+ return false
+ }
+ if value <= 0x7F {
+ s = append(s, byte(value))
+ } else if value <= 0x7FF {
+ s = append(s, byte(0xC0+(value>>6)))
+ s = append(s, byte(0x80+(value&0x3F)))
+ } else if value <= 0xFFFF {
+ s = append(s, byte(0xE0+(value>>12)))
+ s = append(s, byte(0x80+((value>>6)&0x3F)))
+ s = append(s, byte(0x80+(value&0x3F)))
+ } else {
+ s = append(s, byte(0xF0+(value>>18)))
+ s = append(s, byte(0x80+((value>>12)&0x3F)))
+ s = append(s, byte(0x80+((value>>6)&0x3F)))
+ s = append(s, byte(0x80+(value&0x3F)))
+ }
+
+ // Advance the pointer.
+ for k := 0; k < code_length; k++ {
+ skip(parser)
+ }
+ }
+ } else {
+ // It is a non-escaped non-blank character.
+ s = read(parser, s)
+ }
+ if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) {
+ return false
+ }
+ }
+
+ // Check if we are at the end of the scalar.
+ if single {
+ if parser.buffer[parser.buffer_pos] == '\'' {
+ break
+ }
+ } else {
+ if parser.buffer[parser.buffer_pos] == '"' {
+ break
+ }
+ }
+
+ // Consume blank characters.
+ if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
+ return false
+ }
+
+ for is_blank(parser.buffer, parser.buffer_pos) || is_break(parser.buffer, parser.buffer_pos) {
+ if is_blank(parser.buffer, parser.buffer_pos) {
+ // Consume a space or a tab character.
+ if !leading_blanks {
+ whitespaces = read(parser, whitespaces)
+ } else {
+ skip(parser)
+ }
+ } else {
+ if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) {
+ return false
+ }
+
+ // Check if it is a first line break.
+ if !leading_blanks {
+ whitespaces = whitespaces[:0]
+ leading_break = read_line(parser, leading_break)
+ leading_blanks = true
+ } else {
+ trailing_breaks = read_line(parser, trailing_breaks)
+ }
+ }
+ if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
+ return false
+ }
+ }
+
+ // Join the whitespaces or fold line breaks.
+ if leading_blanks {
+ // Do we need to fold line breaks?
+ if len(leading_break) > 0 && leading_break[0] == '\n' {
+ if len(trailing_breaks) == 0 {
+ s = append(s, ' ')
+ } else {
+ s = append(s, trailing_breaks...)
+ }
+ } else {
+ s = append(s, leading_break...)
+ s = append(s, trailing_breaks...)
+ }
+ trailing_breaks = trailing_breaks[:0]
+ leading_break = leading_break[:0]
+ } else {
+ s = append(s, whitespaces...)
+ whitespaces = whitespaces[:0]
+ }
+ }
+
+ // Eat the right quote.
+ skip(parser)
+ end_mark := parser.mark
+
+ // Create a token.
+ *token = yaml_token_t{
+ typ: yaml_SCALAR_TOKEN,
+ start_mark: start_mark,
+ end_mark: end_mark,
+ value: s,
+ style: yaml_SINGLE_QUOTED_SCALAR_STYLE,
+ }
+ if !single {
+ token.style = yaml_DOUBLE_QUOTED_SCALAR_STYLE
+ }
+ return true
+}
+
+// Scan a plain scalar.
+func yaml_parser_scan_plain_scalar(parser *yaml_parser_t, token *yaml_token_t) bool {
+
+ var s, leading_break, trailing_breaks, whitespaces []byte
+ var leading_blanks bool
+ var indent = parser.indent + 1
+
+ start_mark := parser.mark
+ end_mark := parser.mark
+
+ // Consume the content of the plain scalar.
+ for {
+ // Check for a document indicator.
+ if parser.unread < 4 && !yaml_parser_update_buffer(parser, 4) {
+ return false
+ }
+ if parser.mark.column == 0 &&
+ ((parser.buffer[parser.buffer_pos+0] == '-' &&
+ parser.buffer[parser.buffer_pos+1] == '-' &&
+ parser.buffer[parser.buffer_pos+2] == '-') ||
+ (parser.buffer[parser.buffer_pos+0] == '.' &&
+ parser.buffer[parser.buffer_pos+1] == '.' &&
+ parser.buffer[parser.buffer_pos+2] == '.')) &&
+ is_blankz(parser.buffer, parser.buffer_pos+3) {
+ break
+ }
+
+ // Check for a comment.
+ if parser.buffer[parser.buffer_pos] == '#' {
+ break
+ }
+
+ // Consume non-blank characters.
+ for !is_blankz(parser.buffer, parser.buffer_pos) {
+
+ // Check for 'x:x' in the flow context. TODO: Fix the test "spec-08-13".
+ if parser.flow_level > 0 &&
+ parser.buffer[parser.buffer_pos] == ':' &&
+ !is_blankz(parser.buffer, parser.buffer_pos+1) {
+ yaml_parser_set_scanner_error(parser, "while scanning a plain scalar",
+ start_mark, "found unexpected ':'")
+ return false
+ }
+
+ // Check for indicators that may end a plain scalar.
+ if (parser.buffer[parser.buffer_pos] == ':' && is_blankz(parser.buffer, parser.buffer_pos+1)) ||
+ (parser.flow_level > 0 &&
+ (parser.buffer[parser.buffer_pos] == ',' || parser.buffer[parser.buffer_pos] == ':' ||
+ parser.buffer[parser.buffer_pos] == '?' || parser.buffer[parser.buffer_pos] == '[' ||
+ parser.buffer[parser.buffer_pos] == ']' || parser.buffer[parser.buffer_pos] == '{' ||
+ parser.buffer[parser.buffer_pos] == '}')) {
+ break
+ }
+
+ // Check if we need to join whitespaces and breaks.
+ if leading_blanks || len(whitespaces) > 0 {
+ if leading_blanks {
+ // Do we need to fold line breaks?
+ if leading_break[0] == '\n' {
+ if len(trailing_breaks) == 0 {
+ s = append(s, ' ')
+ } else {
+ s = append(s, trailing_breaks...)
+ }
+ } else {
+ s = append(s, leading_break...)
+ s = append(s, trailing_breaks...)
+ }
+ trailing_breaks = trailing_breaks[:0]
+ leading_break = leading_break[:0]
+ leading_blanks = false
+ } else {
+ s = append(s, whitespaces...)
+ whitespaces = whitespaces[:0]
+ }
+ }
+
+ // Copy the character.
+ s = read(parser, s)
+
+ end_mark = parser.mark
+ if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) {
+ return false
+ }
+ }
+
+ // Is it the end?
+ if !(is_blank(parser.buffer, parser.buffer_pos) || is_break(parser.buffer, parser.buffer_pos)) {
+ break
+ }
+
+ // Consume blank characters.
+ if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
+ return false
+ }
+
+ for is_blank(parser.buffer, parser.buffer_pos) || is_break(parser.buffer, parser.buffer_pos) {
+ if is_blank(parser.buffer, parser.buffer_pos) {
+
+ // Check for tab character that abuse indentation.
+ if leading_blanks && parser.mark.column < indent && is_tab(parser.buffer, parser.buffer_pos) {
+ yaml_parser_set_scanner_error(parser, "while scanning a plain scalar",
+ start_mark, "found a tab character that violate indentation")
+ return false
+ }
+
+ // Consume a space or a tab character.
+ if !leading_blanks {
+ whitespaces = read(parser, whitespaces)
+ } else {
+ skip(parser)
+ }
+ } else {
+ if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) {
+ return false
+ }
+
+ // Check if it is a first line break.
+ if !leading_blanks {
+ whitespaces = whitespaces[:0]
+ leading_break = read_line(parser, leading_break)
+ leading_blanks = true
+ } else {
+ trailing_breaks = read_line(parser, trailing_breaks)
+ }
+ }
+ if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
+ return false
+ }
+ }
+
+ // Check indentation level.
+ if parser.flow_level == 0 && parser.mark.column < indent {
+ break
+ }
+ }
+
+ // Create a token.
+ *token = yaml_token_t{
+ typ: yaml_SCALAR_TOKEN,
+ start_mark: start_mark,
+ end_mark: end_mark,
+ value: s,
+ style: yaml_PLAIN_SCALAR_STYLE,
+ }
+
+ // Note that we change the 'simple_key_allowed' flag.
+ if leading_blanks {
+ parser.simple_key_allowed = true
+ }
+ return true
+}
diff --git a/vendor/gopkg.in/yaml.v2/sorter.go b/vendor/gopkg.in/yaml.v2/sorter.go
new file mode 100644
index 0000000..5958822
--- /dev/null
+++ b/vendor/gopkg.in/yaml.v2/sorter.go
@@ -0,0 +1,104 @@
+package yaml
+
+import (
+ "reflect"
+ "unicode"
+)
+
+type keyList []reflect.Value
+
+func (l keyList) Len() int { return len(l) }
+func (l keyList) Swap(i, j int) { l[i], l[j] = l[j], l[i] }
+func (l keyList) Less(i, j int) bool {
+ a := l[i]
+ b := l[j]
+ ak := a.Kind()
+ bk := b.Kind()
+ for (ak == reflect.Interface || ak == reflect.Ptr) && !a.IsNil() {
+ a = a.Elem()
+ ak = a.Kind()
+ }
+ for (bk == reflect.Interface || bk == reflect.Ptr) && !b.IsNil() {
+ b = b.Elem()
+ bk = b.Kind()
+ }
+ af, aok := keyFloat(a)
+ bf, bok := keyFloat(b)
+ if aok && bok {
+ if af != bf {
+ return af < bf
+ }
+ if ak != bk {
+ return ak < bk
+ }
+ return numLess(a, b)
+ }
+ if ak != reflect.String || bk != reflect.String {
+ return ak < bk
+ }
+ ar, br := []rune(a.String()), []rune(b.String())
+ for i := 0; i < len(ar) && i < len(br); i++ {
+ if ar[i] == br[i] {
+ continue
+ }
+ al := unicode.IsLetter(ar[i])
+ bl := unicode.IsLetter(br[i])
+ if al && bl {
+ return ar[i] < br[i]
+ }
+ if al || bl {
+ return bl
+ }
+ var ai, bi int
+ var an, bn int64
+ for ai = i; ai < len(ar) && unicode.IsDigit(ar[ai]); ai++ {
+ an = an*10 + int64(ar[ai]-'0')
+ }
+ for bi = i; bi < len(br) && unicode.IsDigit(br[bi]); bi++ {
+ bn = bn*10 + int64(br[bi]-'0')
+ }
+ if an != bn {
+ return an < bn
+ }
+ if ai != bi {
+ return ai < bi
+ }
+ return ar[i] < br[i]
+ }
+ return len(ar) < len(br)
+}
+
+// keyFloat returns a float value for v if it is a number/bool
+// and whether it is a number/bool or not.
+func keyFloat(v reflect.Value) (f float64, ok bool) {
+ switch v.Kind() {
+ case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
+ return float64(v.Int()), true
+ case reflect.Float32, reflect.Float64:
+ return v.Float(), true
+ case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
+ return float64(v.Uint()), true
+ case reflect.Bool:
+ if v.Bool() {
+ return 1, true
+ }
+ return 0, true
+ }
+ return 0, false
+}
+
+// numLess returns whether a < b.
+// a and b must necessarily have the same kind.
+func numLess(a, b reflect.Value) bool {
+ switch a.Kind() {
+ case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
+ return a.Int() < b.Int()
+ case reflect.Float32, reflect.Float64:
+ return a.Float() < b.Float()
+ case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
+ return a.Uint() < b.Uint()
+ case reflect.Bool:
+ return !a.Bool() && b.Bool()
+ }
+ panic("not a number")
+}
diff --git a/vendor/gopkg.in/yaml.v2/suite_test.go b/vendor/gopkg.in/yaml.v2/suite_test.go
new file mode 100644
index 0000000..c5cf1ed
--- /dev/null
+++ b/vendor/gopkg.in/yaml.v2/suite_test.go
@@ -0,0 +1,12 @@
+package yaml_test
+
+import (
+ . "gopkg.in/check.v1"
+ "testing"
+)
+
+func Test(t *testing.T) { TestingT(t) }
+
+type S struct{}
+
+var _ = Suite(&S{})
diff --git a/vendor/gopkg.in/yaml.v2/writerc.go b/vendor/gopkg.in/yaml.v2/writerc.go
new file mode 100644
index 0000000..190362f
--- /dev/null
+++ b/vendor/gopkg.in/yaml.v2/writerc.go
@@ -0,0 +1,89 @@
+package yaml
+
+// Set the writer error and return false.
+func yaml_emitter_set_writer_error(emitter *yaml_emitter_t, problem string) bool {
+ emitter.error = yaml_WRITER_ERROR
+ emitter.problem = problem
+ return false
+}
+
+// Flush the output buffer.
+func yaml_emitter_flush(emitter *yaml_emitter_t) bool {
+ if emitter.write_handler == nil {
+ panic("write handler not set")
+ }
+
+ // Check if the buffer is empty.
+ if emitter.buffer_pos == 0 {
+ return true
+ }
+
+ // If the output encoding is UTF-8, we don't need to recode the buffer.
+ if emitter.encoding == yaml_UTF8_ENCODING {
+ if err := emitter.write_handler(emitter, emitter.buffer[:emitter.buffer_pos]); err != nil {
+ return yaml_emitter_set_writer_error(emitter, "write error: "+err.Error())
+ }
+ emitter.buffer_pos = 0
+ return true
+ }
+
+ // Recode the buffer into the raw buffer.
+ var low, high int
+ if emitter.encoding == yaml_UTF16LE_ENCODING {
+ low, high = 0, 1
+ } else {
+ high, low = 1, 0
+ }
+
+ pos := 0
+ for pos < emitter.buffer_pos {
+ // See the "reader.c" code for more details on UTF-8 encoding. Note
+ // that we assume that the buffer contains a valid UTF-8 sequence.
+
+ // Read the next UTF-8 character.
+ octet := emitter.buffer[pos]
+
+ var w int
+ var value rune
+ switch {
+ case octet&0x80 == 0x00:
+ w, value = 1, rune(octet&0x7F)
+ case octet&0xE0 == 0xC0:
+ w, value = 2, rune(octet&0x1F)
+ case octet&0xF0 == 0xE0:
+ w, value = 3, rune(octet&0x0F)
+ case octet&0xF8 == 0xF0:
+ w, value = 4, rune(octet&0x07)
+ }
+ for k := 1; k < w; k++ {
+ octet = emitter.buffer[pos+k]
+ value = (value << 6) + (rune(octet) & 0x3F)
+ }
+ pos += w
+
+ // Write the character.
+ if value < 0x10000 {
+ var b [2]byte
+ b[high] = byte(value >> 8)
+ b[low] = byte(value & 0xFF)
+ emitter.raw_buffer = append(emitter.raw_buffer, b[0], b[1])
+ } else {
+ // Write the character using a surrogate pair (check "reader.c").
+ var b [4]byte
+ value -= 0x10000
+ b[high] = byte(0xD8 + (value >> 18))
+ b[low] = byte((value >> 10) & 0xFF)
+ b[high+2] = byte(0xDC + ((value >> 8) & 0xFF))
+ b[low+2] = byte(value & 0xFF)
+ emitter.raw_buffer = append(emitter.raw_buffer, b[0], b[1], b[2], b[3])
+ }
+ }
+
+ // Write the raw buffer.
+ if err := emitter.write_handler(emitter, emitter.raw_buffer); err != nil {
+ return yaml_emitter_set_writer_error(emitter, "write error: "+err.Error())
+ }
+ emitter.buffer_pos = 0
+ emitter.raw_buffer = emitter.raw_buffer[:0]
+ return true
+}
diff --git a/vendor/gopkg.in/yaml.v2/yaml.go b/vendor/gopkg.in/yaml.v2/yaml.go
new file mode 100644
index 0000000..5e3c2da
--- /dev/null
+++ b/vendor/gopkg.in/yaml.v2/yaml.go
@@ -0,0 +1,357 @@
+// Package yaml implements YAML support for the Go language.
+//
+// Source code and other details for the project are available at GitHub:
+//
+// https://github.com/go-yaml/yaml
+//
+package yaml
+
+import (
+ "errors"
+ "fmt"
+ "reflect"
+ "strings"
+ "sync"
+)
+
+// MapSlice encodes and decodes as a YAML map.
+// The order of keys is preserved when encoding and decoding.
+type MapSlice []MapItem
+
+// MapItem is an item in a MapSlice.
+type MapItem struct {
+ Key, Value interface{}
+}
+
+// The Unmarshaler interface may be implemented by types to customize their
+// behavior when being unmarshaled from a YAML document. The UnmarshalYAML
+// method receives a function that may be called to unmarshal the original
+// YAML value into a field or variable. It is safe to call the unmarshal
+// function parameter more than once if necessary.
+type Unmarshaler interface {
+ UnmarshalYAML(unmarshal func(interface{}) error) error
+}
+
+// The Marshaler interface may be implemented by types to customize their
+// behavior when being marshaled into a YAML document. The returned value
+// is marshaled in place of the original value implementing Marshaler.
+//
+// If an error is returned by MarshalYAML, the marshaling procedure stops
+// and returns with the provided error.
+type Marshaler interface {
+ MarshalYAML() (interface{}, error)
+}
+
+// Unmarshal decodes the first document found within the in byte slice
+// and assigns decoded values into the out value.
+//
+// Maps and pointers (to a struct, string, int, etc) are accepted as out
+// values. If an internal pointer within a struct is not initialized,
+// the yaml package will initialize it if necessary for unmarshalling
+// the provided data. The out parameter must not be nil.
+//
+// The type of the decoded values should be compatible with the respective
+// values in out. If one or more values cannot be decoded due to a type
+// mismatches, decoding continues partially until the end of the YAML
+// content, and a *yaml.TypeError is returned with details for all
+// missed values.
+//
+// Struct fields are only unmarshalled if they are exported (have an
+// upper case first letter), and are unmarshalled using the field name
+// lowercased as the default key. Custom keys may be defined via the
+// "yaml" name in the field tag: the content preceding the first comma
+// is used as the key, and the following comma-separated options are
+// used to tweak the marshalling process (see Marshal).
+// Conflicting names result in a runtime error.
+//
+// For example:
+//
+// type T struct {
+// F int `yaml:"a,omitempty"`
+// B int
+// }
+// var t T
+// yaml.Unmarshal([]byte("a: 1\nb: 2"), &t)
+//
+// See the documentation of Marshal for the format of tags and a list of
+// supported tag options.
+//
+func Unmarshal(in []byte, out interface{}) (err error) {
+ return unmarshal(in, out, false)
+}
+
+// UnmarshalStrict is like Unmarshal except that any fields that are found
+// in the data that do not have corresponding struct members will result in
+// an error.
+func UnmarshalStrict(in []byte, out interface{}) (err error) {
+ return unmarshal(in, out, true)
+}
+
+func unmarshal(in []byte, out interface{}, strict bool) (err error) {
+ defer handleErr(&err)
+ d := newDecoder(strict)
+ p := newParser(in)
+ defer p.destroy()
+ node := p.parse()
+ if node != nil {
+ v := reflect.ValueOf(out)
+ if v.Kind() == reflect.Ptr && !v.IsNil() {
+ v = v.Elem()
+ }
+ d.unmarshal(node, v)
+ }
+ if len(d.terrors) > 0 {
+ return &TypeError{d.terrors}
+ }
+ return nil
+}
+
+// Marshal serializes the value provided into a YAML document. The structure
+// of the generated document will reflect the structure of the value itself.
+// Maps and pointers (to struct, string, int, etc) are accepted as the in value.
+//
+// Struct fields are only unmarshalled if they are exported (have an upper case
+// first letter), and are unmarshalled using the field name lowercased as the
+// default key. Custom keys may be defined via the "yaml" name in the field
+// tag: the content preceding the first comma is used as the key, and the
+// following comma-separated options are used to tweak the marshalling process.
+// Conflicting names result in a runtime error.
+//
+// The field tag format accepted is:
+//
+// `(...) yaml:"[][,[,]]" (...)`
+//
+// The following flags are currently supported:
+//
+// omitempty Only include the field if it's not set to the zero
+// value for the type or to empty slices or maps.
+// Does not apply to zero valued structs.
+//
+// flow Marshal using a flow style (useful for structs,
+// sequences and maps).
+//
+// inline Inline the field, which must be a struct or a map,
+// causing all of its fields or keys to be processed as if
+// they were part of the outer struct. For maps, keys must
+// not conflict with the yaml keys of other struct fields.
+//
+// In addition, if the key is "-", the field is ignored.
+//
+// For example:
+//
+// type T struct {
+// F int `yaml:"a,omitempty"`
+// B int
+// }
+// yaml.Marshal(&T{B: 2}) // Returns "b: 2\n"
+// yaml.Marshal(&T{F: 1}} // Returns "a: 1\nb: 0\n"
+//
+func Marshal(in interface{}) (out []byte, err error) {
+ defer handleErr(&err)
+ e := newEncoder()
+ defer e.destroy()
+ e.marshal("", reflect.ValueOf(in))
+ e.finish()
+ out = e.out
+ return
+}
+
+func handleErr(err *error) {
+ if v := recover(); v != nil {
+ if e, ok := v.(yamlError); ok {
+ *err = e.err
+ } else {
+ panic(v)
+ }
+ }
+}
+
+type yamlError struct {
+ err error
+}
+
+func fail(err error) {
+ panic(yamlError{err})
+}
+
+func failf(format string, args ...interface{}) {
+ panic(yamlError{fmt.Errorf("yaml: "+format, args...)})
+}
+
+// A TypeError is returned by Unmarshal when one or more fields in
+// the YAML document cannot be properly decoded into the requested
+// types. When this error is returned, the value is still
+// unmarshaled partially.
+type TypeError struct {
+ Errors []string
+}
+
+func (e *TypeError) Error() string {
+ return fmt.Sprintf("yaml: unmarshal errors:\n %s", strings.Join(e.Errors, "\n "))
+}
+
+// --------------------------------------------------------------------------
+// Maintain a mapping of keys to structure field indexes
+
+// The code in this section was copied from mgo/bson.
+
+// structInfo holds details for the serialization of fields of
+// a given struct.
+type structInfo struct {
+ FieldsMap map[string]fieldInfo
+ FieldsList []fieldInfo
+
+ // InlineMap is the number of the field in the struct that
+ // contains an ,inline map, or -1 if there's none.
+ InlineMap int
+}
+
+type fieldInfo struct {
+ Key string
+ Num int
+ OmitEmpty bool
+ Flow bool
+
+ // Inline holds the field index if the field is part of an inlined struct.
+ Inline []int
+}
+
+var structMap = make(map[reflect.Type]*structInfo)
+var fieldMapMutex sync.RWMutex
+
+func getStructInfo(st reflect.Type) (*structInfo, error) {
+ fieldMapMutex.RLock()
+ sinfo, found := structMap[st]
+ fieldMapMutex.RUnlock()
+ if found {
+ return sinfo, nil
+ }
+
+ n := st.NumField()
+ fieldsMap := make(map[string]fieldInfo)
+ fieldsList := make([]fieldInfo, 0, n)
+ inlineMap := -1
+ for i := 0; i != n; i++ {
+ field := st.Field(i)
+ if field.PkgPath != "" && !field.Anonymous {
+ continue // Private field
+ }
+
+ info := fieldInfo{Num: i}
+
+ tag := field.Tag.Get("yaml")
+ if tag == "" && strings.Index(string(field.Tag), ":") < 0 {
+ tag = string(field.Tag)
+ }
+ if tag == "-" {
+ continue
+ }
+
+ inline := false
+ fields := strings.Split(tag, ",")
+ if len(fields) > 1 {
+ for _, flag := range fields[1:] {
+ switch flag {
+ case "omitempty":
+ info.OmitEmpty = true
+ case "flow":
+ info.Flow = true
+ case "inline":
+ inline = true
+ default:
+ return nil, errors.New(fmt.Sprintf("Unsupported flag %q in tag %q of type %s", flag, tag, st))
+ }
+ }
+ tag = fields[0]
+ }
+
+ if inline {
+ switch field.Type.Kind() {
+ case reflect.Map:
+ if inlineMap >= 0 {
+ return nil, errors.New("Multiple ,inline maps in struct " + st.String())
+ }
+ if field.Type.Key() != reflect.TypeOf("") {
+ return nil, errors.New("Option ,inline needs a map with string keys in struct " + st.String())
+ }
+ inlineMap = info.Num
+ case reflect.Struct:
+ sinfo, err := getStructInfo(field.Type)
+ if err != nil {
+ return nil, err
+ }
+ for _, finfo := range sinfo.FieldsList {
+ if _, found := fieldsMap[finfo.Key]; found {
+ msg := "Duplicated key '" + finfo.Key + "' in struct " + st.String()
+ return nil, errors.New(msg)
+ }
+ if finfo.Inline == nil {
+ finfo.Inline = []int{i, finfo.Num}
+ } else {
+ finfo.Inline = append([]int{i}, finfo.Inline...)
+ }
+ fieldsMap[finfo.Key] = finfo
+ fieldsList = append(fieldsList, finfo)
+ }
+ default:
+ //return nil, errors.New("Option ,inline needs a struct value or map field")
+ return nil, errors.New("Option ,inline needs a struct value field")
+ }
+ continue
+ }
+
+ if tag != "" {
+ info.Key = tag
+ } else {
+ info.Key = strings.ToLower(field.Name)
+ }
+
+ if _, found = fieldsMap[info.Key]; found {
+ msg := "Duplicated key '" + info.Key + "' in struct " + st.String()
+ return nil, errors.New(msg)
+ }
+
+ fieldsList = append(fieldsList, info)
+ fieldsMap[info.Key] = info
+ }
+
+ sinfo = &structInfo{fieldsMap, fieldsList, inlineMap}
+
+ fieldMapMutex.Lock()
+ structMap[st] = sinfo
+ fieldMapMutex.Unlock()
+ return sinfo, nil
+}
+
+func isZero(v reflect.Value) bool {
+ switch v.Kind() {
+ case reflect.String:
+ return len(v.String()) == 0
+ case reflect.Interface, reflect.Ptr:
+ return v.IsNil()
+ case reflect.Slice:
+ return v.Len() == 0
+ case reflect.Map:
+ return v.Len() == 0
+ case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
+ return v.Int() == 0
+ case reflect.Float32, reflect.Float64:
+ return v.Float() == 0
+ case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
+ return v.Uint() == 0
+ case reflect.Bool:
+ return !v.Bool()
+ case reflect.Struct:
+ vt := v.Type()
+ for i := v.NumField() - 1; i >= 0; i-- {
+ if vt.Field(i).PkgPath != "" {
+ continue // Private field
+ }
+ if !isZero(v.Field(i)) {
+ return false
+ }
+ }
+ return true
+ }
+ return false
+}
diff --git a/vendor/gopkg.in/yaml.v2/yamlh.go b/vendor/gopkg.in/yaml.v2/yamlh.go
new file mode 100644
index 0000000..3caeca0
--- /dev/null
+++ b/vendor/gopkg.in/yaml.v2/yamlh.go
@@ -0,0 +1,716 @@
+package yaml
+
+import (
+ "io"
+)
+
+// The version directive data.
+type yaml_version_directive_t struct {
+ major int8 // The major version number.
+ minor int8 // The minor version number.
+}
+
+// The tag directive data.
+type yaml_tag_directive_t struct {
+ handle []byte // The tag handle.
+ prefix []byte // The tag prefix.
+}
+
+type yaml_encoding_t int
+
+// The stream encoding.
+const (
+ // Let the parser choose the encoding.
+ yaml_ANY_ENCODING yaml_encoding_t = iota
+
+ yaml_UTF8_ENCODING // The default UTF-8 encoding.
+ yaml_UTF16LE_ENCODING // The UTF-16-LE encoding with BOM.
+ yaml_UTF16BE_ENCODING // The UTF-16-BE encoding with BOM.
+)
+
+type yaml_break_t int
+
+// Line break types.
+const (
+ // Let the parser choose the break type.
+ yaml_ANY_BREAK yaml_break_t = iota
+
+ yaml_CR_BREAK // Use CR for line breaks (Mac style).
+ yaml_LN_BREAK // Use LN for line breaks (Unix style).
+ yaml_CRLN_BREAK // Use CR LN for line breaks (DOS style).
+)
+
+type yaml_error_type_t int
+
+// Many bad things could happen with the parser and emitter.
+const (
+ // No error is produced.
+ yaml_NO_ERROR yaml_error_type_t = iota
+
+ yaml_MEMORY_ERROR // Cannot allocate or reallocate a block of memory.
+ yaml_READER_ERROR // Cannot read or decode the input stream.
+ yaml_SCANNER_ERROR // Cannot scan the input stream.
+ yaml_PARSER_ERROR // Cannot parse the input stream.
+ yaml_COMPOSER_ERROR // Cannot compose a YAML document.
+ yaml_WRITER_ERROR // Cannot write to the output stream.
+ yaml_EMITTER_ERROR // Cannot emit a YAML stream.
+)
+
+// The pointer position.
+type yaml_mark_t struct {
+ index int // The position index.
+ line int // The position line.
+ column int // The position column.
+}
+
+// Node Styles
+
+type yaml_style_t int8
+
+type yaml_scalar_style_t yaml_style_t
+
+// Scalar styles.
+const (
+ // Let the emitter choose the style.
+ yaml_ANY_SCALAR_STYLE yaml_scalar_style_t = iota
+
+ yaml_PLAIN_SCALAR_STYLE // The plain scalar style.
+ yaml_SINGLE_QUOTED_SCALAR_STYLE // The single-quoted scalar style.
+ yaml_DOUBLE_QUOTED_SCALAR_STYLE // The double-quoted scalar style.
+ yaml_LITERAL_SCALAR_STYLE // The literal scalar style.
+ yaml_FOLDED_SCALAR_STYLE // The folded scalar style.
+)
+
+type yaml_sequence_style_t yaml_style_t
+
+// Sequence styles.
+const (
+ // Let the emitter choose the style.
+ yaml_ANY_SEQUENCE_STYLE yaml_sequence_style_t = iota
+
+ yaml_BLOCK_SEQUENCE_STYLE // The block sequence style.
+ yaml_FLOW_SEQUENCE_STYLE // The flow sequence style.
+)
+
+type yaml_mapping_style_t yaml_style_t
+
+// Mapping styles.
+const (
+ // Let the emitter choose the style.
+ yaml_ANY_MAPPING_STYLE yaml_mapping_style_t = iota
+
+ yaml_BLOCK_MAPPING_STYLE // The block mapping style.
+ yaml_FLOW_MAPPING_STYLE // The flow mapping style.
+)
+
+// Tokens
+
+type yaml_token_type_t int
+
+// Token types.
+const (
+ // An empty token.
+ yaml_NO_TOKEN yaml_token_type_t = iota
+
+ yaml_STREAM_START_TOKEN // A STREAM-START token.
+ yaml_STREAM_END_TOKEN // A STREAM-END token.
+
+ yaml_VERSION_DIRECTIVE_TOKEN // A VERSION-DIRECTIVE token.
+ yaml_TAG_DIRECTIVE_TOKEN // A TAG-DIRECTIVE token.
+ yaml_DOCUMENT_START_TOKEN // A DOCUMENT-START token.
+ yaml_DOCUMENT_END_TOKEN // A DOCUMENT-END token.
+
+ yaml_BLOCK_SEQUENCE_START_TOKEN // A BLOCK-SEQUENCE-START token.
+ yaml_BLOCK_MAPPING_START_TOKEN // A BLOCK-SEQUENCE-END token.
+ yaml_BLOCK_END_TOKEN // A BLOCK-END token.
+
+ yaml_FLOW_SEQUENCE_START_TOKEN // A FLOW-SEQUENCE-START token.
+ yaml_FLOW_SEQUENCE_END_TOKEN // A FLOW-SEQUENCE-END token.
+ yaml_FLOW_MAPPING_START_TOKEN // A FLOW-MAPPING-START token.
+ yaml_FLOW_MAPPING_END_TOKEN // A FLOW-MAPPING-END token.
+
+ yaml_BLOCK_ENTRY_TOKEN // A BLOCK-ENTRY token.
+ yaml_FLOW_ENTRY_TOKEN // A FLOW-ENTRY token.
+ yaml_KEY_TOKEN // A KEY token.
+ yaml_VALUE_TOKEN // A VALUE token.
+
+ yaml_ALIAS_TOKEN // An ALIAS token.
+ yaml_ANCHOR_TOKEN // An ANCHOR token.
+ yaml_TAG_TOKEN // A TAG token.
+ yaml_SCALAR_TOKEN // A SCALAR token.
+)
+
+func (tt yaml_token_type_t) String() string {
+ switch tt {
+ case yaml_NO_TOKEN:
+ return "yaml_NO_TOKEN"
+ case yaml_STREAM_START_TOKEN:
+ return "yaml_STREAM_START_TOKEN"
+ case yaml_STREAM_END_TOKEN:
+ return "yaml_STREAM_END_TOKEN"
+ case yaml_VERSION_DIRECTIVE_TOKEN:
+ return "yaml_VERSION_DIRECTIVE_TOKEN"
+ case yaml_TAG_DIRECTIVE_TOKEN:
+ return "yaml_TAG_DIRECTIVE_TOKEN"
+ case yaml_DOCUMENT_START_TOKEN:
+ return "yaml_DOCUMENT_START_TOKEN"
+ case yaml_DOCUMENT_END_TOKEN:
+ return "yaml_DOCUMENT_END_TOKEN"
+ case yaml_BLOCK_SEQUENCE_START_TOKEN:
+ return "yaml_BLOCK_SEQUENCE_START_TOKEN"
+ case yaml_BLOCK_MAPPING_START_TOKEN:
+ return "yaml_BLOCK_MAPPING_START_TOKEN"
+ case yaml_BLOCK_END_TOKEN:
+ return "yaml_BLOCK_END_TOKEN"
+ case yaml_FLOW_SEQUENCE_START_TOKEN:
+ return "yaml_FLOW_SEQUENCE_START_TOKEN"
+ case yaml_FLOW_SEQUENCE_END_TOKEN:
+ return "yaml_FLOW_SEQUENCE_END_TOKEN"
+ case yaml_FLOW_MAPPING_START_TOKEN:
+ return "yaml_FLOW_MAPPING_START_TOKEN"
+ case yaml_FLOW_MAPPING_END_TOKEN:
+ return "yaml_FLOW_MAPPING_END_TOKEN"
+ case yaml_BLOCK_ENTRY_TOKEN:
+ return "yaml_BLOCK_ENTRY_TOKEN"
+ case yaml_FLOW_ENTRY_TOKEN:
+ return "yaml_FLOW_ENTRY_TOKEN"
+ case yaml_KEY_TOKEN:
+ return "yaml_KEY_TOKEN"
+ case yaml_VALUE_TOKEN:
+ return "yaml_VALUE_TOKEN"
+ case yaml_ALIAS_TOKEN:
+ return "yaml_ALIAS_TOKEN"
+ case yaml_ANCHOR_TOKEN:
+ return "yaml_ANCHOR_TOKEN"
+ case yaml_TAG_TOKEN:
+ return "yaml_TAG_TOKEN"
+ case yaml_SCALAR_TOKEN:
+ return "yaml_SCALAR_TOKEN"
+ }
+ return ""
+}
+
+// The token structure.
+type yaml_token_t struct {
+ // The token type.
+ typ yaml_token_type_t
+
+ // The start/end of the token.
+ start_mark, end_mark yaml_mark_t
+
+ // The stream encoding (for yaml_STREAM_START_TOKEN).
+ encoding yaml_encoding_t
+
+ // The alias/anchor/scalar value or tag/tag directive handle
+ // (for yaml_ALIAS_TOKEN, yaml_ANCHOR_TOKEN, yaml_SCALAR_TOKEN, yaml_TAG_TOKEN, yaml_TAG_DIRECTIVE_TOKEN).
+ value []byte
+
+ // The tag suffix (for yaml_TAG_TOKEN).
+ suffix []byte
+
+ // The tag directive prefix (for yaml_TAG_DIRECTIVE_TOKEN).
+ prefix []byte
+
+ // The scalar style (for yaml_SCALAR_TOKEN).
+ style yaml_scalar_style_t
+
+ // The version directive major/minor (for yaml_VERSION_DIRECTIVE_TOKEN).
+ major, minor int8
+}
+
+// Events
+
+type yaml_event_type_t int8
+
+// Event types.
+const (
+ // An empty event.
+ yaml_NO_EVENT yaml_event_type_t = iota
+
+ yaml_STREAM_START_EVENT // A STREAM-START event.
+ yaml_STREAM_END_EVENT // A STREAM-END event.
+ yaml_DOCUMENT_START_EVENT // A DOCUMENT-START event.
+ yaml_DOCUMENT_END_EVENT // A DOCUMENT-END event.
+ yaml_ALIAS_EVENT // An ALIAS event.
+ yaml_SCALAR_EVENT // A SCALAR event.
+ yaml_SEQUENCE_START_EVENT // A SEQUENCE-START event.
+ yaml_SEQUENCE_END_EVENT // A SEQUENCE-END event.
+ yaml_MAPPING_START_EVENT // A MAPPING-START event.
+ yaml_MAPPING_END_EVENT // A MAPPING-END event.
+)
+
+// The event structure.
+type yaml_event_t struct {
+
+ // The event type.
+ typ yaml_event_type_t
+
+ // The start and end of the event.
+ start_mark, end_mark yaml_mark_t
+
+ // The document encoding (for yaml_STREAM_START_EVENT).
+ encoding yaml_encoding_t
+
+ // The version directive (for yaml_DOCUMENT_START_EVENT).
+ version_directive *yaml_version_directive_t
+
+ // The list of tag directives (for yaml_DOCUMENT_START_EVENT).
+ tag_directives []yaml_tag_directive_t
+
+ // The anchor (for yaml_SCALAR_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT, yaml_ALIAS_EVENT).
+ anchor []byte
+
+ // The tag (for yaml_SCALAR_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT).
+ tag []byte
+
+ // The scalar value (for yaml_SCALAR_EVENT).
+ value []byte
+
+ // Is the document start/end indicator implicit, or the tag optional?
+ // (for yaml_DOCUMENT_START_EVENT, yaml_DOCUMENT_END_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT, yaml_SCALAR_EVENT).
+ implicit bool
+
+ // Is the tag optional for any non-plain style? (for yaml_SCALAR_EVENT).
+ quoted_implicit bool
+
+ // The style (for yaml_SCALAR_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT).
+ style yaml_style_t
+}
+
+func (e *yaml_event_t) scalar_style() yaml_scalar_style_t { return yaml_scalar_style_t(e.style) }
+func (e *yaml_event_t) sequence_style() yaml_sequence_style_t { return yaml_sequence_style_t(e.style) }
+func (e *yaml_event_t) mapping_style() yaml_mapping_style_t { return yaml_mapping_style_t(e.style) }
+
+// Nodes
+
+const (
+ yaml_NULL_TAG = "tag:yaml.org,2002:null" // The tag !!null with the only possible value: null.
+ yaml_BOOL_TAG = "tag:yaml.org,2002:bool" // The tag !!bool with the values: true and false.
+ yaml_STR_TAG = "tag:yaml.org,2002:str" // The tag !!str for string values.
+ yaml_INT_TAG = "tag:yaml.org,2002:int" // The tag !!int for integer values.
+ yaml_FLOAT_TAG = "tag:yaml.org,2002:float" // The tag !!float for float values.
+ yaml_TIMESTAMP_TAG = "tag:yaml.org,2002:timestamp" // The tag !!timestamp for date and time values.
+
+ yaml_SEQ_TAG = "tag:yaml.org,2002:seq" // The tag !!seq is used to denote sequences.
+ yaml_MAP_TAG = "tag:yaml.org,2002:map" // The tag !!map is used to denote mapping.
+
+ // Not in original libyaml.
+ yaml_BINARY_TAG = "tag:yaml.org,2002:binary"
+ yaml_MERGE_TAG = "tag:yaml.org,2002:merge"
+
+ yaml_DEFAULT_SCALAR_TAG = yaml_STR_TAG // The default scalar tag is !!str.
+ yaml_DEFAULT_SEQUENCE_TAG = yaml_SEQ_TAG // The default sequence tag is !!seq.
+ yaml_DEFAULT_MAPPING_TAG = yaml_MAP_TAG // The default mapping tag is !!map.
+)
+
+type yaml_node_type_t int
+
+// Node types.
+const (
+ // An empty node.
+ yaml_NO_NODE yaml_node_type_t = iota
+
+ yaml_SCALAR_NODE // A scalar node.
+ yaml_SEQUENCE_NODE // A sequence node.
+ yaml_MAPPING_NODE // A mapping node.
+)
+
+// An element of a sequence node.
+type yaml_node_item_t int
+
+// An element of a mapping node.
+type yaml_node_pair_t struct {
+ key int // The key of the element.
+ value int // The value of the element.
+}
+
+// The node structure.
+type yaml_node_t struct {
+ typ yaml_node_type_t // The node type.
+ tag []byte // The node tag.
+
+ // The node data.
+
+ // The scalar parameters (for yaml_SCALAR_NODE).
+ scalar struct {
+ value []byte // The scalar value.
+ length int // The length of the scalar value.
+ style yaml_scalar_style_t // The scalar style.
+ }
+
+ // The sequence parameters (for YAML_SEQUENCE_NODE).
+ sequence struct {
+ items_data []yaml_node_item_t // The stack of sequence items.
+ style yaml_sequence_style_t // The sequence style.
+ }
+
+ // The mapping parameters (for yaml_MAPPING_NODE).
+ mapping struct {
+ pairs_data []yaml_node_pair_t // The stack of mapping pairs (key, value).
+ pairs_start *yaml_node_pair_t // The beginning of the stack.
+ pairs_end *yaml_node_pair_t // The end of the stack.
+ pairs_top *yaml_node_pair_t // The top of the stack.
+ style yaml_mapping_style_t // The mapping style.
+ }
+
+ start_mark yaml_mark_t // The beginning of the node.
+ end_mark yaml_mark_t // The end of the node.
+
+}
+
+// The document structure.
+type yaml_document_t struct {
+
+ // The document nodes.
+ nodes []yaml_node_t
+
+ // The version directive.
+ version_directive *yaml_version_directive_t
+
+ // The list of tag directives.
+ tag_directives_data []yaml_tag_directive_t
+ tag_directives_start int // The beginning of the tag directives list.
+ tag_directives_end int // The end of the tag directives list.
+
+ start_implicit int // Is the document start indicator implicit?
+ end_implicit int // Is the document end indicator implicit?
+
+ // The start/end of the document.
+ start_mark, end_mark yaml_mark_t
+}
+
+// The prototype of a read handler.
+//
+// The read handler is called when the parser needs to read more bytes from the
+// source. The handler should write not more than size bytes to the buffer.
+// The number of written bytes should be set to the size_read variable.
+//
+// [in,out] data A pointer to an application data specified by
+// yaml_parser_set_input().
+// [out] buffer The buffer to write the data from the source.
+// [in] size The size of the buffer.
+// [out] size_read The actual number of bytes read from the source.
+//
+// On success, the handler should return 1. If the handler failed,
+// the returned value should be 0. On EOF, the handler should set the
+// size_read to 0 and return 1.
+type yaml_read_handler_t func(parser *yaml_parser_t, buffer []byte) (n int, err error)
+
+// This structure holds information about a potential simple key.
+type yaml_simple_key_t struct {
+ possible bool // Is a simple key possible?
+ required bool // Is a simple key required?
+ token_number int // The number of the token.
+ mark yaml_mark_t // The position mark.
+}
+
+// The states of the parser.
+type yaml_parser_state_t int
+
+const (
+ yaml_PARSE_STREAM_START_STATE yaml_parser_state_t = iota
+
+ yaml_PARSE_IMPLICIT_DOCUMENT_START_STATE // Expect the beginning of an implicit document.
+ yaml_PARSE_DOCUMENT_START_STATE // Expect DOCUMENT-START.
+ yaml_PARSE_DOCUMENT_CONTENT_STATE // Expect the content of a document.
+ yaml_PARSE_DOCUMENT_END_STATE // Expect DOCUMENT-END.
+ yaml_PARSE_BLOCK_NODE_STATE // Expect a block node.
+ yaml_PARSE_BLOCK_NODE_OR_INDENTLESS_SEQUENCE_STATE // Expect a block node or indentless sequence.
+ yaml_PARSE_FLOW_NODE_STATE // Expect a flow node.
+ yaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE // Expect the first entry of a block sequence.
+ yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE // Expect an entry of a block sequence.
+ yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE // Expect an entry of an indentless sequence.
+ yaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE // Expect the first key of a block mapping.
+ yaml_PARSE_BLOCK_MAPPING_KEY_STATE // Expect a block mapping key.
+ yaml_PARSE_BLOCK_MAPPING_VALUE_STATE // Expect a block mapping value.
+ yaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE // Expect the first entry of a flow sequence.
+ yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE // Expect an entry of a flow sequence.
+ yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE // Expect a key of an ordered mapping.
+ yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE // Expect a value of an ordered mapping.
+ yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE // Expect the and of an ordered mapping entry.
+ yaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE // Expect the first key of a flow mapping.
+ yaml_PARSE_FLOW_MAPPING_KEY_STATE // Expect a key of a flow mapping.
+ yaml_PARSE_FLOW_MAPPING_VALUE_STATE // Expect a value of a flow mapping.
+ yaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE // Expect an empty value of a flow mapping.
+ yaml_PARSE_END_STATE // Expect nothing.
+)
+
+func (ps yaml_parser_state_t) String() string {
+ switch ps {
+ case yaml_PARSE_STREAM_START_STATE:
+ return "yaml_PARSE_STREAM_START_STATE"
+ case yaml_PARSE_IMPLICIT_DOCUMENT_START_STATE:
+ return "yaml_PARSE_IMPLICIT_DOCUMENT_START_STATE"
+ case yaml_PARSE_DOCUMENT_START_STATE:
+ return "yaml_PARSE_DOCUMENT_START_STATE"
+ case yaml_PARSE_DOCUMENT_CONTENT_STATE:
+ return "yaml_PARSE_DOCUMENT_CONTENT_STATE"
+ case yaml_PARSE_DOCUMENT_END_STATE:
+ return "yaml_PARSE_DOCUMENT_END_STATE"
+ case yaml_PARSE_BLOCK_NODE_STATE:
+ return "yaml_PARSE_BLOCK_NODE_STATE"
+ case yaml_PARSE_BLOCK_NODE_OR_INDENTLESS_SEQUENCE_STATE:
+ return "yaml_PARSE_BLOCK_NODE_OR_INDENTLESS_SEQUENCE_STATE"
+ case yaml_PARSE_FLOW_NODE_STATE:
+ return "yaml_PARSE_FLOW_NODE_STATE"
+ case yaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE:
+ return "yaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE"
+ case yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE:
+ return "yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE"
+ case yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE:
+ return "yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE"
+ case yaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE:
+ return "yaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE"
+ case yaml_PARSE_BLOCK_MAPPING_KEY_STATE:
+ return "yaml_PARSE_BLOCK_MAPPING_KEY_STATE"
+ case yaml_PARSE_BLOCK_MAPPING_VALUE_STATE:
+ return "yaml_PARSE_BLOCK_MAPPING_VALUE_STATE"
+ case yaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE:
+ return "yaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE"
+ case yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE:
+ return "yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE"
+ case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE:
+ return "yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE"
+ case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE:
+ return "yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE"
+ case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE:
+ return "yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE"
+ case yaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE:
+ return "yaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE"
+ case yaml_PARSE_FLOW_MAPPING_KEY_STATE:
+ return "yaml_PARSE_FLOW_MAPPING_KEY_STATE"
+ case yaml_PARSE_FLOW_MAPPING_VALUE_STATE:
+ return "yaml_PARSE_FLOW_MAPPING_VALUE_STATE"
+ case yaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE:
+ return "yaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE"
+ case yaml_PARSE_END_STATE:
+ return "yaml_PARSE_END_STATE"
+ }
+ return ""
+}
+
+// This structure holds aliases data.
+type yaml_alias_data_t struct {
+ anchor []byte // The anchor.
+ index int // The node id.
+ mark yaml_mark_t // The anchor mark.
+}
+
+// The parser structure.
+//
+// All members are internal. Manage the structure using the
+// yaml_parser_ family of functions.
+type yaml_parser_t struct {
+
+ // Error handling
+
+ error yaml_error_type_t // Error type.
+
+ problem string // Error description.
+
+ // The byte about which the problem occurred.
+ problem_offset int
+ problem_value int
+ problem_mark yaml_mark_t
+
+ // The error context.
+ context string
+ context_mark yaml_mark_t
+
+ // Reader stuff
+
+ read_handler yaml_read_handler_t // Read handler.
+
+ input_file io.Reader // File input data.
+ input []byte // String input data.
+ input_pos int
+
+ eof bool // EOF flag
+
+ buffer []byte // The working buffer.
+ buffer_pos int // The current position of the buffer.
+
+ unread int // The number of unread characters in the buffer.
+
+ raw_buffer []byte // The raw buffer.
+ raw_buffer_pos int // The current position of the buffer.
+
+ encoding yaml_encoding_t // The input encoding.
+
+ offset int // The offset of the current position (in bytes).
+ mark yaml_mark_t // The mark of the current position.
+
+ // Scanner stuff
+
+ stream_start_produced bool // Have we started to scan the input stream?
+ stream_end_produced bool // Have we reached the end of the input stream?
+
+ flow_level int // The number of unclosed '[' and '{' indicators.
+
+ tokens []yaml_token_t // The tokens queue.
+ tokens_head int // The head of the tokens queue.
+ tokens_parsed int // The number of tokens fetched from the queue.
+ token_available bool // Does the tokens queue contain a token ready for dequeueing.
+
+ indent int // The current indentation level.
+ indents []int // The indentation levels stack.
+
+ simple_key_allowed bool // May a simple key occur at the current position?
+ simple_keys []yaml_simple_key_t // The stack of simple keys.
+
+ // Parser stuff
+
+ state yaml_parser_state_t // The current parser state.
+ states []yaml_parser_state_t // The parser states stack.
+ marks []yaml_mark_t // The stack of marks.
+ tag_directives []yaml_tag_directive_t // The list of TAG directives.
+
+ // Dumper stuff
+
+ aliases []yaml_alias_data_t // The alias data.
+
+ document *yaml_document_t // The currently parsed document.
+}
+
+// Emitter Definitions
+
+// The prototype of a write handler.
+//
+// The write handler is called when the emitter needs to flush the accumulated
+// characters to the output. The handler should write @a size bytes of the
+// @a buffer to the output.
+//
+// @param[in,out] data A pointer to an application data specified by
+// yaml_emitter_set_output().
+// @param[in] buffer The buffer with bytes to be written.
+// @param[in] size The size of the buffer.
+//
+// @returns On success, the handler should return @c 1. If the handler failed,
+// the returned value should be @c 0.
+//
+type yaml_write_handler_t func(emitter *yaml_emitter_t, buffer []byte) error
+
+type yaml_emitter_state_t int
+
+// The emitter states.
+const (
+ // Expect STREAM-START.
+ yaml_EMIT_STREAM_START_STATE yaml_emitter_state_t = iota
+
+ yaml_EMIT_FIRST_DOCUMENT_START_STATE // Expect the first DOCUMENT-START or STREAM-END.
+ yaml_EMIT_DOCUMENT_START_STATE // Expect DOCUMENT-START or STREAM-END.
+ yaml_EMIT_DOCUMENT_CONTENT_STATE // Expect the content of a document.
+ yaml_EMIT_DOCUMENT_END_STATE // Expect DOCUMENT-END.
+ yaml_EMIT_FLOW_SEQUENCE_FIRST_ITEM_STATE // Expect the first item of a flow sequence.
+ yaml_EMIT_FLOW_SEQUENCE_ITEM_STATE // Expect an item of a flow sequence.
+ yaml_EMIT_FLOW_MAPPING_FIRST_KEY_STATE // Expect the first key of a flow mapping.
+ yaml_EMIT_FLOW_MAPPING_KEY_STATE // Expect a key of a flow mapping.
+ yaml_EMIT_FLOW_MAPPING_SIMPLE_VALUE_STATE // Expect a value for a simple key of a flow mapping.
+ yaml_EMIT_FLOW_MAPPING_VALUE_STATE // Expect a value of a flow mapping.
+ yaml_EMIT_BLOCK_SEQUENCE_FIRST_ITEM_STATE // Expect the first item of a block sequence.
+ yaml_EMIT_BLOCK_SEQUENCE_ITEM_STATE // Expect an item of a block sequence.
+ yaml_EMIT_BLOCK_MAPPING_FIRST_KEY_STATE // Expect the first key of a block mapping.
+ yaml_EMIT_BLOCK_MAPPING_KEY_STATE // Expect the key of a block mapping.
+ yaml_EMIT_BLOCK_MAPPING_SIMPLE_VALUE_STATE // Expect a value for a simple key of a block mapping.
+ yaml_EMIT_BLOCK_MAPPING_VALUE_STATE // Expect a value of a block mapping.
+ yaml_EMIT_END_STATE // Expect nothing.
+)
+
+// The emitter structure.
+//
+// All members are internal. Manage the structure using the @c yaml_emitter_
+// family of functions.
+type yaml_emitter_t struct {
+
+ // Error handling
+
+ error yaml_error_type_t // Error type.
+ problem string // Error description.
+
+ // Writer stuff
+
+ write_handler yaml_write_handler_t // Write handler.
+
+ output_buffer *[]byte // String output data.
+ output_file io.Writer // File output data.
+
+ buffer []byte // The working buffer.
+ buffer_pos int // The current position of the buffer.
+
+ raw_buffer []byte // The raw buffer.
+ raw_buffer_pos int // The current position of the buffer.
+
+ encoding yaml_encoding_t // The stream encoding.
+
+ // Emitter stuff
+
+ canonical bool // If the output is in the canonical style?
+ best_indent int // The number of indentation spaces.
+ best_width int // The preferred width of the output lines.
+ unicode bool // Allow unescaped non-ASCII characters?
+ line_break yaml_break_t // The preferred line break.
+
+ state yaml_emitter_state_t // The current emitter state.
+ states []yaml_emitter_state_t // The stack of states.
+
+ events []yaml_event_t // The event queue.
+ events_head int // The head of the event queue.
+
+ indents []int // The stack of indentation levels.
+
+ tag_directives []yaml_tag_directive_t // The list of tag directives.
+
+ indent int // The current indentation level.
+
+ flow_level int // The current flow level.
+
+ root_context bool // Is it the document root context?
+ sequence_context bool // Is it a sequence context?
+ mapping_context bool // Is it a mapping context?
+ simple_key_context bool // Is it a simple mapping key context?
+
+ line int // The current line.
+ column int // The current column.
+ whitespace bool // If the last character was a whitespace?
+ indention bool // If the last character was an indentation character (' ', '-', '?', ':')?
+ open_ended bool // If an explicit document end is required?
+
+ // Anchor analysis.
+ anchor_data struct {
+ anchor []byte // The anchor value.
+ alias bool // Is it an alias?
+ }
+
+ // Tag analysis.
+ tag_data struct {
+ handle []byte // The tag handle.
+ suffix []byte // The tag suffix.
+ }
+
+ // Scalar analysis.
+ scalar_data struct {
+ value []byte // The scalar value.
+ multiline bool // Does the scalar contain line breaks?
+ flow_plain_allowed bool // Can the scalar be expessed in the flow plain style?
+ block_plain_allowed bool // Can the scalar be expressed in the block plain style?
+ single_quoted_allowed bool // Can the scalar be expressed in the single quoted style?
+ block_allowed bool // Can the scalar be expressed in the literal or folded styles?
+ style yaml_scalar_style_t // The output style.
+ }
+
+ // Dumper stuff
+
+ opened bool // If the stream was already opened?
+ closed bool // If the stream was already closed?
+
+ // The information associated with the document nodes.
+ anchors *struct {
+ references int // The number of references.
+ anchor int // The anchor id.
+ serialized bool // If the node has been emitted?
+ }
+
+ last_anchor_id int // The last assigned anchor id.
+
+ document *yaml_document_t // The currently emitted document.
+}
diff --git a/vendor/gopkg.in/yaml.v2/yamlprivateh.go b/vendor/gopkg.in/yaml.v2/yamlprivateh.go
new file mode 100644
index 0000000..8110ce3
--- /dev/null
+++ b/vendor/gopkg.in/yaml.v2/yamlprivateh.go
@@ -0,0 +1,173 @@
+package yaml
+
+const (
+ // The size of the input raw buffer.
+ input_raw_buffer_size = 512
+
+ // The size of the input buffer.
+ // It should be possible to decode the whole raw buffer.
+ input_buffer_size = input_raw_buffer_size * 3
+
+ // The size of the output buffer.
+ output_buffer_size = 128
+
+ // The size of the output raw buffer.
+ // It should be possible to encode the whole output buffer.
+ output_raw_buffer_size = (output_buffer_size*2 + 2)
+
+ // The size of other stacks and queues.
+ initial_stack_size = 16
+ initial_queue_size = 16
+ initial_string_size = 16
+)
+
+// Check if the character at the specified position is an alphabetical
+// character, a digit, '_', or '-'.
+func is_alpha(b []byte, i int) bool {
+ return b[i] >= '0' && b[i] <= '9' || b[i] >= 'A' && b[i] <= 'Z' || b[i] >= 'a' && b[i] <= 'z' || b[i] == '_' || b[i] == '-'
+}
+
+// Check if the character at the specified position is a digit.
+func is_digit(b []byte, i int) bool {
+ return b[i] >= '0' && b[i] <= '9'
+}
+
+// Get the value of a digit.
+func as_digit(b []byte, i int) int {
+ return int(b[i]) - '0'
+}
+
+// Check if the character at the specified position is a hex-digit.
+func is_hex(b []byte, i int) bool {
+ return b[i] >= '0' && b[i] <= '9' || b[i] >= 'A' && b[i] <= 'F' || b[i] >= 'a' && b[i] <= 'f'
+}
+
+// Get the value of a hex-digit.
+func as_hex(b []byte, i int) int {
+ bi := b[i]
+ if bi >= 'A' && bi <= 'F' {
+ return int(bi) - 'A' + 10
+ }
+ if bi >= 'a' && bi <= 'f' {
+ return int(bi) - 'a' + 10
+ }
+ return int(bi) - '0'
+}
+
+// Check if the character is ASCII.
+func is_ascii(b []byte, i int) bool {
+ return b[i] <= 0x7F
+}
+
+// Check if the character at the start of the buffer can be printed unescaped.
+func is_printable(b []byte, i int) bool {
+ return ((b[i] == 0x0A) || // . == #x0A
+ (b[i] >= 0x20 && b[i] <= 0x7E) || // #x20 <= . <= #x7E
+ (b[i] == 0xC2 && b[i+1] >= 0xA0) || // #0xA0 <= . <= #xD7FF
+ (b[i] > 0xC2 && b[i] < 0xED) ||
+ (b[i] == 0xED && b[i+1] < 0xA0) ||
+ (b[i] == 0xEE) ||
+ (b[i] == 0xEF && // #xE000 <= . <= #xFFFD
+ !(b[i+1] == 0xBB && b[i+2] == 0xBF) && // && . != #xFEFF
+ !(b[i+1] == 0xBF && (b[i+2] == 0xBE || b[i+2] == 0xBF))))
+}
+
+// Check if the character at the specified position is NUL.
+func is_z(b []byte, i int) bool {
+ return b[i] == 0x00
+}
+
+// Check if the beginning of the buffer is a BOM.
+func is_bom(b []byte, i int) bool {
+ return b[0] == 0xEF && b[1] == 0xBB && b[2] == 0xBF
+}
+
+// Check if the character at the specified position is space.
+func is_space(b []byte, i int) bool {
+ return b[i] == ' '
+}
+
+// Check if the character at the specified position is tab.
+func is_tab(b []byte, i int) bool {
+ return b[i] == '\t'
+}
+
+// Check if the character at the specified position is blank (space or tab).
+func is_blank(b []byte, i int) bool {
+ //return is_space(b, i) || is_tab(b, i)
+ return b[i] == ' ' || b[i] == '\t'
+}
+
+// Check if the character at the specified position is a line break.
+func is_break(b []byte, i int) bool {
+ return (b[i] == '\r' || // CR (#xD)
+ b[i] == '\n' || // LF (#xA)
+ b[i] == 0xC2 && b[i+1] == 0x85 || // NEL (#x85)
+ b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA8 || // LS (#x2028)
+ b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA9) // PS (#x2029)
+}
+
+func is_crlf(b []byte, i int) bool {
+ return b[i] == '\r' && b[i+1] == '\n'
+}
+
+// Check if the character is a line break or NUL.
+func is_breakz(b []byte, i int) bool {
+ //return is_break(b, i) || is_z(b, i)
+ return ( // is_break:
+ b[i] == '\r' || // CR (#xD)
+ b[i] == '\n' || // LF (#xA)
+ b[i] == 0xC2 && b[i+1] == 0x85 || // NEL (#x85)
+ b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA8 || // LS (#x2028)
+ b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA9 || // PS (#x2029)
+ // is_z:
+ b[i] == 0)
+}
+
+// Check if the character is a line break, space, or NUL.
+func is_spacez(b []byte, i int) bool {
+ //return is_space(b, i) || is_breakz(b, i)
+ return ( // is_space:
+ b[i] == ' ' ||
+ // is_breakz:
+ b[i] == '\r' || // CR (#xD)
+ b[i] == '\n' || // LF (#xA)
+ b[i] == 0xC2 && b[i+1] == 0x85 || // NEL (#x85)
+ b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA8 || // LS (#x2028)
+ b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA9 || // PS (#x2029)
+ b[i] == 0)
+}
+
+// Check if the character is a line break, space, tab, or NUL.
+func is_blankz(b []byte, i int) bool {
+ //return is_blank(b, i) || is_breakz(b, i)
+ return ( // is_blank:
+ b[i] == ' ' || b[i] == '\t' ||
+ // is_breakz:
+ b[i] == '\r' || // CR (#xD)
+ b[i] == '\n' || // LF (#xA)
+ b[i] == 0xC2 && b[i+1] == 0x85 || // NEL (#x85)
+ b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA8 || // LS (#x2028)
+ b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA9 || // PS (#x2029)
+ b[i] == 0)
+}
+
+// Determine the width of the character.
+func width(b byte) int {
+ // Don't replace these by a switch without first
+ // confirming that it is being inlined.
+ if b&0x80 == 0x00 {
+ return 1
+ }
+ if b&0xE0 == 0xC0 {
+ return 2
+ }
+ if b&0xF0 == 0xE0 {
+ return 3
+ }
+ if b&0xF8 == 0xF0 {
+ return 4
+ }
+ return 0
+
+}