master df8eb69f89f8 cached
130 files
844.8 KB
227.8k tokens
1597 symbols
1 requests
Download .txt
Showing preview only (899K chars total). Download the full file or copy to clipboard to get everything.
Repository: saymedia/journald-cloudwatch-logs
Branch: master
Commit: df8eb69f89f8
Files: 130
Total size: 844.8 KB

Directory structure:
gitextract_n0ym8b82/

├── README.md
├── config.go
├── journal.go
├── main.go
├── reader.go
├── record.go
├── state.go
├── terminate.go
├── unmarshal.go
├── vendor/
│   ├── github.com/
│   │   ├── aws/
│   │   │   └── aws-sdk-go/
│   │   │       ├── LICENSE.txt
│   │   │       ├── NOTICE.txt
│   │   │       ├── aws/
│   │   │       │   ├── awserr/
│   │   │       │   │   ├── error.go
│   │   │       │   │   └── types.go
│   │   │       │   ├── awsutil/
│   │   │       │   │   ├── copy.go
│   │   │       │   │   ├── equal.go
│   │   │       │   │   ├── path_value.go
│   │   │       │   │   ├── prettify.go
│   │   │       │   │   └── string_value.go
│   │   │       │   ├── client/
│   │   │       │   │   ├── client.go
│   │   │       │   │   ├── default_retryer.go
│   │   │       │   │   └── metadata/
│   │   │       │   │       └── client_info.go
│   │   │       │   ├── config.go
│   │   │       │   ├── convert_types.go
│   │   │       │   ├── corehandlers/
│   │   │       │   │   ├── handlers.go
│   │   │       │   │   └── param_validator.go
│   │   │       │   ├── credentials/
│   │   │       │   │   ├── chain_provider.go
│   │   │       │   │   ├── credentials.go
│   │   │       │   │   ├── ec2rolecreds/
│   │   │       │   │   │   └── ec2_role_provider.go
│   │   │       │   │   ├── endpointcreds/
│   │   │       │   │   │   └── provider.go
│   │   │       │   │   ├── env_provider.go
│   │   │       │   │   ├── example.ini
│   │   │       │   │   ├── shared_credentials_provider.go
│   │   │       │   │   ├── static_provider.go
│   │   │       │   │   └── stscreds/
│   │   │       │   │       └── assume_role_provider.go
│   │   │       │   ├── defaults/
│   │   │       │   │   └── defaults.go
│   │   │       │   ├── ec2metadata/
│   │   │       │   │   ├── api.go
│   │   │       │   │   └── service.go
│   │   │       │   ├── errors.go
│   │   │       │   ├── logger.go
│   │   │       │   ├── request/
│   │   │       │   │   ├── handlers.go
│   │   │       │   │   ├── http_request.go
│   │   │       │   │   ├── http_request_1_4.go
│   │   │       │   │   ├── offset_reader.go
│   │   │       │   │   ├── request.go
│   │   │       │   │   ├── request_pagination.go
│   │   │       │   │   ├── retryer.go
│   │   │       │   │   └── validation.go
│   │   │       │   ├── session/
│   │   │       │   │   ├── doc.go
│   │   │       │   │   ├── env_config.go
│   │   │       │   │   ├── session.go
│   │   │       │   │   └── shared_config.go
│   │   │       │   ├── signer/
│   │   │       │   │   └── v4/
│   │   │       │   │       ├── header_rules.go
│   │   │       │   │       └── v4.go
│   │   │       │   ├── types.go
│   │   │       │   └── version.go
│   │   │       ├── private/
│   │   │       │   ├── endpoints/
│   │   │       │   │   ├── endpoints.go
│   │   │       │   │   ├── endpoints.json
│   │   │       │   │   └── endpoints_map.go
│   │   │       │   └── protocol/
│   │   │       │       ├── idempotency.go
│   │   │       │       ├── json/
│   │   │       │       │   └── jsonutil/
│   │   │       │       │       ├── build.go
│   │   │       │       │       └── unmarshal.go
│   │   │       │       ├── jsonrpc/
│   │   │       │       │   └── jsonrpc.go
│   │   │       │       ├── query/
│   │   │       │       │   ├── build.go
│   │   │       │       │   ├── queryutil/
│   │   │       │       │   │   └── queryutil.go
│   │   │       │       │   ├── unmarshal.go
│   │   │       │       │   └── unmarshal_error.go
│   │   │       │       ├── rest/
│   │   │       │       │   ├── build.go
│   │   │       │       │   ├── payload.go
│   │   │       │       │   └── unmarshal.go
│   │   │       │       ├── unmarshal.go
│   │   │       │       └── xml/
│   │   │       │           └── xmlutil/
│   │   │       │               ├── build.go
│   │   │       │               ├── unmarshal.go
│   │   │       │               └── xml_to_struct.go
│   │   │       └── service/
│   │   │           ├── cloudwatchlogs/
│   │   │           │   ├── api.go
│   │   │           │   └── service.go
│   │   │           └── sts/
│   │   │               ├── api.go
│   │   │               ├── customizations.go
│   │   │               └── service.go
│   │   ├── coreos/
│   │   │   ├── go-systemd/
│   │   │   │   ├── LICENSE
│   │   │   │   └── sdjournal/
│   │   │   │       ├── functions.go
│   │   │   │       ├── journal.go
│   │   │   │       └── read.go
│   │   │   └── pkg/
│   │   │       ├── LICENSE
│   │   │       ├── NOTICE
│   │   │       └── dlopen/
│   │   │           ├── dlopen.go
│   │   │           └── dlopen_example.go
│   │   ├── go-ini/
│   │   │   └── ini/
│   │   │       ├── LICENSE
│   │   │       ├── Makefile
│   │   │       ├── README.md
│   │   │       ├── README_ZH.md
│   │   │       ├── error.go
│   │   │       ├── ini.go
│   │   │       ├── key.go
│   │   │       ├── parser.go
│   │   │       ├── section.go
│   │   │       └── struct.go
│   │   ├── hashicorp/
│   │   │   └── hcl/
│   │   │       ├── LICENSE
│   │   │       ├── Makefile
│   │   │       ├── README.md
│   │   │       ├── appveyor.yml
│   │   │       ├── decoder.go
│   │   │       ├── hcl/
│   │   │       │   ├── ast/
│   │   │       │   │   ├── ast.go
│   │   │       │   │   └── walk.go
│   │   │       │   ├── parser/
│   │   │       │   │   ├── error.go
│   │   │       │   │   └── parser.go
│   │   │       │   ├── scanner/
│   │   │       │   │   └── scanner.go
│   │   │       │   ├── strconv/
│   │   │       │   │   └── quote.go
│   │   │       │   └── token/
│   │   │       │       ├── position.go
│   │   │       │       └── token.go
│   │   │       ├── hcl.go
│   │   │       ├── json/
│   │   │       │   ├── parser/
│   │   │       │   │   ├── flatten.go
│   │   │       │   │   └── parser.go
│   │   │       │   ├── scanner/
│   │   │       │   │   └── scanner.go
│   │   │       │   └── token/
│   │   │       │       ├── position.go
│   │   │       │       └── token.go
│   │   │       ├── lex.go
│   │   │       └── parse.go
│   │   └── jmespath/
│   │       └── go-jmespath/
│   │           ├── LICENSE
│   │           ├── Makefile
│   │           ├── README.md
│   │           ├── api.go
│   │           ├── astnodetype_string.go
│   │           ├── functions.go
│   │           ├── interpreter.go
│   │           ├── lexer.go
│   │           ├── parser.go
│   │           ├── toktype_string.go
│   │           └── util.go
│   └── vendor.json
└── writer.go

================================================
FILE CONTENTS
================================================

================================================
FILE: README.md
================================================
# journald-cloudwatch-logs

This small utility monitors the systemd journal, managed by `journald`, and writes journal entries into
[AWS Cloudwatch Logs](https://aws.amazon.com/cloudwatch/details/#log-monitoring).

This program is an alternative to the AWS-provided logs agent. The official logs agent copies data from
on-disk text log files into Cloudwatch, while this utility reads directly from the systemd journal.

The journal event data is written to Cloudwatch Logs in JSON format, making it amenable to filtering
using the JSON filter syntax. Log records are translated to Cloudwatch JSON events using a
structure like the following:

```js
{
    "instanceId": "i-xxxxxxxx",
    "pid": 12354,
    "uid": 0,
    "gid": 0,
    "cmdName": "cron",
    "exe": "/usr/sbin/cron",
    "cmdLine": "/usr/sbin/CRON -f",
    "systemdUnit": "cron.service",
    "bootId": "fa58079c7a6d12345678b6ebf1234567",
    "hostname": "ip-10-1-0-15",
    "transport": "syslog",
    "priority": "INFO",
    "message": "pam_unix(cron:session): session opened for user root by (uid=0)",
    "syslog": {
        "facility": 10,
        "ident": "CRON",
        "pid": 12354
    },
    "kernel": {}
}
```

The JSON-formatted log events could also be exported into an AWS ElasticSearch instance using the built-in
sync mechanism, to obtain more elaborate filtering and query capabilities.

## Installation

If you have a binary distribution, you just need to drop the executable file somewhere.

This tool assumes that it is running on an EC2 instance.

This tool uses `libsystemd` to access the journal. systemd-based distributions generally ship
with this already installed, but if yours doesn't you must manually install the library somehow before
this tool will work.

## Configuration

This tool uses a small configuration file to set some values that are required for its operation.
Most of the configuration values are optional and have default settings, but a couple are required.

The configuration file uses a syntax like this:

```js
log_group = "my-awesome-app"

// (you'll need to create this directory before starting the program)
state_file = "/var/lib/journald-cloudwatch-logs/state"
```

The following configuration settings are supported:

* `aws_region`: (Optional) The AWS region whose CloudWatch Logs API will be written to. If not provided,
  this defaults to the region where the host EC2 instance is running.
  
* `ec2_instance_id`: (Optional) The id of the EC2 instance on which the tool is running. There is very
  little reason to set this, since it will be automatically set to the id of the host EC2 instance.

* `journal_dir`: (Optional) Override the directory where the systemd journal can be found. This is
  useful in conjunction with remote log aggregation, to work with journals synced from other systems.
  The default is to use the local system's journal.
  
* `log_group`: (Required) The name of the cloudwatch log group to write logs into. This log group must
  be created before running the program.

* `log_priority`: (Optional) The highest priority of the log messages to read (on a 0-7 scale). This defaults
    to DEBUG (all messages). This has a behaviour similar to `journalctl -p <priority>`. At the moment, only
    a single value can be specified, not a range. Possible values are: `0,1,2,3,4,5,6,7` or one of the corresponding
    `"emerg", "alert", "crit", "err", "warning", "notice", "info", "debug"`.
    When a single log level is specified, all messages with this log level or a lower (hence more important)
    log level are read and pushed to CloudWatch. For more information about priority levels, look at
    https://www.freedesktop.org/software/systemd/man/journalctl.html

* `log_stream`: (Optional) The name of the cloudwatch log stream to write logs into. This defaults to
  the EC2 instance id. Each running instance of this application (along with any other applications
  writing logs into the same log group) must have a unique `log_stream` value. If the given log stream
  doesn't exist then it will be created before writing the first set of journal events.
  
* `state_file`: (Required) Path to a location where the program can write, and later read, some
  state it needs to preserve between runs. (The format of this file is an implementation detail.)
  
* `buffer_size`: (Optional) The size of the local event buffer where journal events will be kept
  in order to write batches of events to the CloudWatch Logs API. The default is 100. A batch of
  new events will be written to CloudWatch Logs every second even if the buffer does not fill, but
  this setting provides a maximum batch size to use when clearing a large backlog of events, e.g.
  from system boot when the program starts for the first time.

Additionally values in the configuration file can contain variable expansions of the form
${instance.<key>} which will be exapnded from the AWS Instance Identity Document or ${env.<name>}
which will be expanded from the operating system environment variables, if a key does not exist
it expands to the empty string.

At the time of writing, in early 2017, the supported InstanceIdentityDocument variables are:

* `${instance.AvailabilityZone}`: The name of the availability zone the instance is running, eg `ap-southeast-2b`
* `${instance.PrivateIP}`: The AWS internal private IP address of the instance, eg `172.1.2.3`
* `${instance.Version}`: The version of the InstanceIdentityDocument definition?, eg `2010-08-31`
* `${instance.Region}`: The name of the region the instance is running in, eg `ap-southeast-2`
* `${instance.InstanceID}`: The instance identifier, eg `i-0123456789abcdef0`
* `${instance.InstanceType}`: The type of the instance, eg `x1.32xlarge`
* `${instance.AccountID}`: The amazon web services account the instance is running under, eg `098765432123`
* `${instance.ImageID}`: The AMI (image) id the instance was launched from, eg `ami-a1b2c3d4`
* `${instance.KernelID}`: The kernel ID used to launch the instance (PV instances only)
* `${instance.RamdiskID}`: The ramdisk ID used to launch the instance (PV instances only)
* `${instance.Architecture}`: The CPU architecture of the instance, eg `x86_64`
  
### AWS API access

This program requires access to call some of the Cloudwatch API functions. The recommended way to
achieve this is to create an
[IAM Instance Profile](http://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2_instance-profiles.html)
that grants your EC2 instance a role that has Cloudwatch API access. The program will automatically
discover and make use of instance profile credentials.

The following IAM policy grants the required access across all log groups in all regions:

```js
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogStream",
                "logs:PutLogEvents",
                "logs:DescribeLogStreams"
            ],
            "Resource": [
                "arn:aws:logs:*:*:log-group:*",
                "arn:aws:logs:*:*:log-group:*:log-stream:*"
            ]
        }
    ]
}
```

In more complex environments you may want to restrict further which regions, groups and streams
the instance can write to. You can do this by adjusting the two ARN strings in the `"Resource"` section:

* The first `*` in each string can be replaced with an AWS region name like `us-east-1`
  to grant access only within the given region.
* The `*` after `log-group` in each string can be replaced with a Cloudwatch Logs log group name
  to grant access only to the named group.
* The `*` after `log-stream` in the second string can be replaced with a Cloudwatch Logs log stream
  name to grant access only to the named stream.

Other combinations are possible too. For more information, see
[the reference on ARNs and namespaces](http://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html#arn-syntax-cloudwatch-logs).



### Coexisting with the official Cloudwatch Logs agent

This application can run on the same host as the official Cloudwatch Logs agent but care must be taken
to ensure that they each use a different log stream name. Only one process may write into each log
stream.

## Running on System Boot

This program is best used as a persistent service that starts on boot and keeps running until the
system is shut down. If you're using `journald` then you're presumably using systemd; you can create
a systemd unit for this service. For example:

```
[Unit]
Description=journald-cloudwatch-logs
Wants=basic.target
After=basic.target network.target

[Service]
User=nobody
Group=nobody
ExecStart=/usr/local/bin/journald-cloudwatch-logs /usr/local/etc/journald-cloudwatch-logs.conf
KillMode=process
Restart=on-failure
RestartSec=42s
```

This program is designed under the assumption that it will run constantly from some point during
system boot until the system shuts down.

If the service is stopped while the system is running and then later started again, it will
"lose" any journal entries that were written while it wasn't running. However, on the initial
run after each boot it will clear the backlog of logs created during the boot process, so it
is not necessary to run the program particularly early in the boot process unless you wish
to *promptly* capture startup messages.

## Licence

Copyright (c) 2015 Say Media Inc

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.


================================================
FILE: config.go
================================================
package main

import (
	"fmt"
	"io/ioutil"
	"os"
	"reflect"
	"strings"

	"github.com/aws/aws-sdk-go/aws"
	awsCredentials "github.com/aws/aws-sdk-go/aws/credentials"
	"github.com/aws/aws-sdk-go/aws/credentials/ec2rolecreds"
	"github.com/aws/aws-sdk-go/aws/ec2metadata"
	awsSession "github.com/aws/aws-sdk-go/aws/session"

	"github.com/hashicorp/hcl"
)

type Config struct {
	AWSCredentials *awsCredentials.Credentials
	AWSRegion      string
	EC2InstanceId  string
	LogGroupName   string
	LogStreamName  string
	LogPriority    Priority
	StateFilename  string
	JournalDir     string
	BufferSize     int
}

type fileConfig struct {
	AWSRegion     string `hcl:"aws_region"`
	EC2InstanceId string `hcl:"ec2_instance_id"`
	LogGroupName  string `hcl:"log_group"`
	LogStreamName string `hcl:"log_stream"`
	LogPriority   string `hcl:"log_priority"`
	StateFilename string `hcl:"state_file"`
	JournalDir    string `hcl:"journal_dir"`
	BufferSize    int    `hcl:"buffer_size"`
}

func getLogLevel(priority string) (Priority, error) {

	logLevels := map[Priority][]string{
		EMERGENCY: {"0", "emerg"},
		ALERT:     {"1", "alert"},
		CRITICAL:  {"2", "crit"},
		ERROR:     {"3", "err"},
		WARNING:   {"4", "warning"},
		NOTICE:    {"5", "notice"},
		INFO:      {"6", "info"},
		DEBUG:     {"7", "debug"},
	}

	for i, s := range logLevels {
		if s[0] == priority || s[1] == priority {
			return i, nil
		}
	}

	return DEBUG, fmt.Errorf("'%s' is unsupported log priority", priority)
}

func LoadConfig(filename string) (*Config, error) {
	configBytes, err := ioutil.ReadFile(filename)
	if err != nil {
		return nil, err
	}

	var fConfig fileConfig
	err = hcl.Decode(&fConfig, string(configBytes))
	if err != nil {
		return nil, err
	}

	if fConfig.LogGroupName == "" {
		return nil, fmt.Errorf("log_group is required")
	}
	if fConfig.StateFilename == "" {
		return nil, fmt.Errorf("state_file is required")
	}

	metaClient := ec2metadata.New(awsSession.New(&aws.Config{}))

	expandFileConfig(&fConfig, metaClient)

	config := &Config{}

	if fConfig.AWSRegion != "" {
		config.AWSRegion = fConfig.AWSRegion
	} else {
		region, err := metaClient.Region()
		if err != nil {
			return nil, fmt.Errorf("unable to detect AWS region: %s", err)
		}
		config.AWSRegion = region
	}

	if fConfig.EC2InstanceId != "" {
		config.EC2InstanceId = fConfig.EC2InstanceId
	} else {
		instanceId, err := metaClient.GetMetadata("instance-id")
		if err != nil {
			return nil, fmt.Errorf("unable to detect EC2 instance id: %s", err)
		}
		config.EC2InstanceId = instanceId
	}

	if fConfig.LogPriority == "" {
		// Log everything
		config.LogPriority = DEBUG
	} else {
		config.LogPriority, err = getLogLevel(fConfig.LogPriority)
		if err != nil {
			return nil, fmt.Errorf("The provided log filtering '%s' is unsupported by systemd!", fConfig.LogPriority)
		}
	}

	config.LogGroupName = fConfig.LogGroupName

	if fConfig.LogStreamName != "" {
		config.LogStreamName = fConfig.LogStreamName
	} else {
		// By default we use the instance id as the stream name.
		config.LogStreamName = config.EC2InstanceId
	}

	config.StateFilename = fConfig.StateFilename
	config.JournalDir = fConfig.JournalDir

	if fConfig.BufferSize != 0 {
		config.BufferSize = fConfig.BufferSize
	} else {
		config.BufferSize = 100
	}

	config.AWSCredentials = awsCredentials.NewChainCredentials([]awsCredentials.Provider{
		&awsCredentials.EnvProvider{},
		&ec2rolecreds.EC2RoleProvider{
			Client: metaClient,
		},
	})

	return config, nil
}

func (c *Config) NewAWSSession() *awsSession.Session {
	config := &aws.Config{
		Credentials: c.AWSCredentials,
		Region:      aws.String(c.AWSRegion),
		MaxRetries:  aws.Int(3),
	}
	return awsSession.New(config)
}


/*
 * Expand variables of the form $Foo or ${Foo} in the user provided config
 * from the EC2Metadata Instance Identity Document
 * [ https://docs.aws.amazon.com/sdk-for-go/api/aws/ec2metadata/#EC2InstanceIdentityDocument ]
 * or the environment
 */
func expandFileConfig(config *fileConfig, metaClient *ec2metadata.EC2Metadata) {
	vars := make(map[string]string)

	// If we can fetch the InstanceIdentityDocument then iterate over the
	// struct extracting the string fields and their values into the vars map
	data, err := metaClient.GetInstanceIdentityDocument()
	if err == nil {
		metadata := reflect.ValueOf( data )

		for i := 0; i < metadata.NumField(); i++ {
			field := metadata.Field(i)
			ftype := metadata.Type().Field(i)
			if (field.Type() != reflect.TypeOf("")) {
				continue
			}
			vars[ftype.Name] = fmt.Sprintf("%v", field.Interface())
		}
	}

	// Iterate over all the string fields in the fileConfig struct performing
	// Variable expansion on them, with EC2 Instance Identity fields overriding
	// the OS environment
	rconfig := reflect.ValueOf(config)
	for i := 0; i < rconfig.Elem().NumField(); i++ {
		field := rconfig.Elem().Field(i)
		if field.Type() != reflect.TypeOf("") {
			continue
		}
		val := field.Interface().(string)
		if val != "" {
			field.SetString(
				expandBraceVars(
					val,
					func(varname string) string {
						if strings.HasPrefix(varname, "instance.") {
							if val, exists := vars[strings.TrimPrefix(varname, "instance.")]; exists {
								return val
							}
							// Unknown key => empty string
							return "" 
						} else if (strings.HasPrefix(varname, "env.")) {
							return os.Getenv(strings.TrimPrefix(varname, "env."))
						} else {
							// Unknown prefix => empty string
							return ""
						}
					},
				),
			)
		}
	}
}


// Modified version of os.Expand() that only expands ${name} and not $name
func expandBraceVars(s string, mapping func(string) string) string {
	buf := make([]byte, 0, 2*len(s))
	// ${} is all ASCII, so bytes are fine for this operation.
	i := 0
	for j := 0; j < len(s); j++ {
		if s[j] == '$' && j+3 < len(s) && s[j+1] == '{' {
			buf = append(buf, s[i:j]...)
			idx := strings.Index(s[j+2:], "}")
			if (idx >= 0) {
				// We have a full ${name} string
				buf = append(buf, mapping(s[j+2:j+2+idx])...)
				j += 2+idx
			} else {
				// We ran out of string (unclosed ${)
				return string(buf)
			}
			i = j + 1
		}
	}
	return string(buf) + s[i:]
}





================================================
FILE: journal.go
================================================
package main

import (
	"github.com/coreos/go-systemd/sdjournal"
	"strconv"
)

func AddLogFilters(journal *sdjournal.Journal, config *Config) {

	// Add Priority Filters
	if config.LogPriority < DEBUG {
		for p, _ := range PriorityJSON {
			if p <= config.LogPriority {
				journal.AddMatch("PRIORITY=" + strconv.Itoa(int(p)))
			}
		}
		journal.AddDisjunction()
	}
}


================================================
FILE: main.go
================================================
package main

import (
	"flag"
	"fmt"
	"log"
	"os"

	"github.com/coreos/go-systemd/sdjournal"
)

var help = flag.Bool("help", false, "set to true to show this help")

func main() {
	flag.Parse()

	if *help {
		usage()
		os.Exit(0)
	}

	configFilename := flag.Arg(0)
	if configFilename == "" {
		usage()
		os.Exit(1)
	}

	err := run(configFilename)
	if err != nil {
		os.Stderr.WriteString(err.Error())
		os.Stderr.Write([]byte{'\n'})
		os.Exit(2)
	}
}

func usage() {
	os.Stderr.WriteString("Usage: journald-cloudwatch-logs <config-file>\n\n")
	flag.PrintDefaults()
	os.Stderr.WriteString("\n")
}

func run(configFilename string) error {
	config, err := LoadConfig(configFilename)
	if err != nil {
		return fmt.Errorf("error reading config: %s", err)
	}

	var journal *sdjournal.Journal
	if config.JournalDir == "" {
		journal, err = sdjournal.NewJournal()
	} else {
		log.Printf("using journal dir: %s", config.JournalDir)
		journal, err = sdjournal.NewJournalFromDir(config.JournalDir)
	}

	if err != nil {
		return fmt.Errorf("error opening journal: %s", err)
	}
	defer journal.Close()

	AddLogFilters(journal, config)

	state, err := OpenState(config.StateFilename)
	if err != nil {
		return fmt.Errorf("Failed to open %s: %s", config.StateFilename, err)
	}

	lastBootId, nextSeq := state.LastState()

	awsSession := config.NewAWSSession()

	writer, err := NewWriter(
		awsSession,
		config.LogGroupName,
		config.LogStreamName,
		nextSeq,
	)
	if err != nil {
		return fmt.Errorf("error initializing writer: %s", err)
	}

	seeked, err := journal.Next()
	if seeked == 0 || err != nil {
		return fmt.Errorf("unable to seek to first item in journal")
	}

	bootId, err := journal.GetData("_BOOT_ID")
	bootId = bootId[9:] // Trim off "_BOOT_ID=" prefix

	// If the boot id has changed since our last run then we'll start from
	// the beginning of the stream, but if we're starting up with the same
	// boot id then we'll seek to the end of the stream to avoid repeating
	// anything. However, we will miss any items that were added while we
	// weren't running.
	skip := uint64(0)
	if bootId == lastBootId {
		// If we're still in the same "boot" as we were last time then
		// we were stopped and started again, so we'll seek to the last
		// item in the log as an approximation of resuming streaming,
		// though we will miss any logs that were added while we were
		// running.
		journal.SeekTail()
		// Skip the last item so our log will resume only when we get
		// the *next item.
		skip = 1
	}

	err = state.SetState(bootId, nextSeq)
	if err != nil {
		return fmt.Errorf("Failed to write state: %s", err)
	}

	bufSize := config.BufferSize

	records := make(chan Record)
	batches := make(chan []Record)

	go ReadRecords(config.EC2InstanceId, journal, records, skip)
	go BatchRecords(records, batches, bufSize)

	for batch := range batches {

		nextSeq, err = writer.WriteBatch(batch)
		if err != nil {
			return fmt.Errorf("Failed to write to cloudwatch: %s", err)
		}

		err = state.SetState(bootId, nextSeq)
		if err != nil {
			return fmt.Errorf("Failed to write state: %s", err)
		}

	}

	// We fall out here when interrupted by a signal.
	// Last chance to write the state.
	err = state.SetState(bootId, nextSeq)
	if err != nil {
		return fmt.Errorf("Failed to write state on exit: %s", err)
	}

	return nil
}


================================================
FILE: reader.go
================================================
package main

import (
	"fmt"
	"time"

	"github.com/coreos/go-systemd/sdjournal"
)

func ReadRecords(instanceId string, journal *sdjournal.Journal, c chan<- Record, skip uint64) {
	record := &Record{}

	termC := MakeTerminateChannel()
	checkTerminate := func() bool {
		select {
		case <-termC:
			close(c)
			return true
		default:
			return false
		}
	}

	for {
		if checkTerminate() {
			return
		}
		err := UnmarshalRecord(journal, record)
		if err != nil {
			c <- synthRecord(
				fmt.Errorf("error unmarshalling record: %s", err),
			)
			continue
		}

		if skip > 0 {
			skip--
		} else {
			record.InstanceId = instanceId
			c <- *record
		}

		for {
			if checkTerminate() {
				return
			}
			seeked, err := journal.Next()
			if err != nil {
				c <- synthRecord(
					fmt.Errorf("error reading from journal: %s", err),
				)
				// It's likely that we didn't actually advance here, so
				// we should wait a bit so we don't spin the CPU at 100%
				// when we run into errors.
				time.Sleep(2 * time.Second)
				continue
			}
			if seeked == 0 {
				// If there's nothing new in the stream then we'll
				// wait for something new to show up.
				// FIXME: We can actually end up waiting up to 2 seconds
				// to gracefully terminate because of this. It'd be nicer
				// to stop waiting if we get a termination signal, but
				// this will do for now.
				journal.Wait(2 * time.Second)
				continue
			}
			break
		}
	}
}

// BatchRecords consumes a channel of individual records and produces
// a channel of slices of record pointers in sizes up to the given
// batch size.
// If records don't show up fast enough, smaller batches will be returned
// each second as long as at least one item is in the buffer.
func BatchRecords(records <-chan Record, batches chan<- []Record, batchSize int) {
	// We have two buffers here so that we can fill one while the
	// caller is working on the other. The caller is therefore
	// guaranteed that the returned slice will remain valid until
	// the next read of the batches channel.
	var bufs [2][]Record
	bufs[0] = make([]Record, batchSize)
	bufs[1] = make([]Record, batchSize)
	var record Record
	var more bool
	currentBuf := 0
	next := 0
	timer := time.NewTimer(time.Second)
	timer.Stop()

	for {
		select {
		case record, more = <-records:
			if !more {
				close(batches)
				return
			}
			bufs[currentBuf][next] = record
			next++
			if next < batchSize {
				// If we've just added our first record then we'll
				// start the batch timer.
				if next == 1 {
					timer.Reset(time.Second)
				}
				// Not enough records yet, so wait again.
				continue
			}
			break
		case <-timer.C:
			break
		}

		timer.Stop()
		if next == 0 {
			continue
		}

		// If we manage to fall out here then either the buffer is fuull
		// or the batch timer expired. Either way it's time for us to
		// emit a batch.
		batches <- bufs[currentBuf][0:next]

		// Switch buffers before we start building the next batch.
		currentBuf = (currentBuf + 1) % 2
		next = 0
	}
}

// synthRecord produces synthetic records to report errors, so that
// we can stream our own errors directly into cloudwatch rather than
// emitting them through journald and risking feedback loops.
func synthRecord(err error) Record {
	return Record{
		Command:  "journald-cloudwatch-logs",
		Priority: ERROR,
		Message:  err.Error(),
	}
}


================================================
FILE: record.go
================================================
package main

type Priority int

var (
	EMERGENCY Priority = 0
	ALERT     Priority = 1
	CRITICAL  Priority = 2
	ERROR     Priority = 3
	WARNING   Priority = 4
	NOTICE    Priority = 5
	INFO      Priority = 6
	DEBUG     Priority = 7
)

var PriorityJSON = map[Priority][]byte{
	EMERGENCY: []byte("\"EMERG\""),
	ALERT:     []byte("\"ALERT\""),
	CRITICAL:  []byte("\"CRITICAL\""),
	ERROR:     []byte("\"ERROR\""),
	WARNING:   []byte("\"WARNING\""),
	NOTICE:    []byte("\"NOTICE\""),
	INFO:      []byte("\"INFO\""),
	DEBUG:     []byte("\"DEBUG\""),
}

type Record struct {
	InstanceId     string       `json:"instanceId,omitempty"`
	TimeUsec       int64        `json:"-"`
	PID            int          `json:"pid" journald:"_PID"`
	UID            int          `json:"uid" journald:"_UID"`
	GID            int          `json:"gid" journald:"_GID"`
	Command        string       `json:"cmdName,omitempty" journald:"_COMM"`
	Executable     string       `json:"exe,omitempty" journald:"_EXE"`
	CommandLine    string       `json:"cmdLine,omitempty" journald:"_CMDLINE"`
	SystemdUnit    string       `json:"systemdUnit,omitempty" journald:"_SYSTEMD_UNIT"`
	BootId         string       `json:"bootId,omitempty" journald:"_BOOT_ID"`
	MachineId      string       `json:"machineId,omitempty" journald:"_MACHINE_ID"`
	Hostname       string       `json:"hostname,omitempty" journald:"_HOSTNAME"`
	Transport      string       `json:"transport,omitempty" journald:"_TRANSPORT"`
	Priority       Priority     `json:"priority" journald:"PRIORITY"`
	Message        string       `json:"message" journald:"MESSAGE"`
	MessageId      string       `json:"messageId,omitempty" journald:"MESSAGE_ID"`
	Errno          int          `json:"machineId,omitempty" journald:"ERRNO"`
	Syslog         RecordSyslog `json:"syslog,omitempty"`
	Kernel         RecordKernel `json:"kernel,omitempty"`
	Container_Name string       `json:"containerName,omitempty" journald:"CONTAINER_NAME"`
	Container_Tag  string       `json:"containerTag,omitempty" journald:"CONTAINER_TAG"`
	Container_ID   string       `json:"containerID,omitempty" journald:"CONTAINER_ID"`
}

type RecordSyslog struct {
	Facility   int    `json:"facility,omitempty" journald:"SYSLOG_FACILITY"`
	Identifier string `json:"ident,omitempty" journald:"SYSLOG_IDENTIFIER"`
	PID        int    `json:"pid,omitempty" journald:"SYSLOG_PID"`
}

type RecordKernel struct {
	Device    string `json:"device,omitempty" journald:"_KERNEL_DEVICE"`
	Subsystem string `json:"subsystem,omitempty" journald:"_KERNEL_SUBSYSTEM"`
	SysName   string `json:"sysName,omitempty" journald:"_UDEV_SYSNAME"`
	DevNode   string `json:"devNode,omitempty" journald:"_UDEV_DEVNODE"`
}

func (p Priority) MarshalJSON() ([]byte, error) {
	return PriorityJSON[p], nil
}


================================================
FILE: state.go
================================================
package main

import (
	"fmt"
	"os"
)

const stateFormat = "%s\n%s\n"
const mapSize = 64

type State struct {
	file *os.File
}

func OpenState(fn string) (State, error) {
	s := State{}
	f, err := os.OpenFile(fn, os.O_RDWR|os.O_CREATE, 0700)
	if err != nil {
		return s, err
	}
	s.file = f
	return s, nil
}

func (s State) Close() error {
	return s.file.Close()
}

func (s State) Sync() error {
	return s.file.Sync()
}

func (s State) LastState() (string, string) {
	var bootId string
	var seqToken string
	_, err := s.file.Seek(0, 0)
	if err != nil {
		return "", ""
	}
	n, err := fmt.Fscanf(s.file, stateFormat, &bootId, &seqToken)
	if err != nil || n < 2 {
		return "", ""
	}
	return bootId, seqToken
}

func (s State) SetState(bootId, seqToken string) error {
	_, err := s.file.Seek(0, 0)
	if err != nil {
		return err
	}
	_, err = fmt.Fprintf(s.file, stateFormat, bootId, seqToken)
	if err != nil {
		return err
	}
	return nil
}


================================================
FILE: terminate.go
================================================
package main

import (
	"os"
	"os/signal"
	"syscall"
)

// MakeTerminateChannel returns a channel that will become readable if
// the process is interrupted or terminated via a signal.
//
// This is used to gracefully exit the reader loop, which in turn causes
// the rest of the program to gracefully terminate, flushing any remaining
// buffers and writing its persistent state to disk.
func MakeTerminateChannel() <-chan os.Signal {
	ch := make(chan os.Signal, 1)
	signal.Notify(ch, syscall.SIGINT, syscall.SIGTERM)
	return ch
}


================================================
FILE: unmarshal.go
================================================
package main

import (
	"fmt"
	"reflect"
	"strconv"
	"time"

	"github.com/coreos/go-systemd/sdjournal"
)

func UnmarshalRecord(journal *sdjournal.Journal, to *Record) error {
	err := unmarshalRecord(journal, reflect.ValueOf(to).Elem())
	if err == nil {
		// FIXME: Should use the realtime from the log record,
		// but for some reason journal.GetRealtimeUsec always fails.
		to.TimeUsec = time.Now().Unix() * 1000
	}
	return err
}

func unmarshalRecord(journal *sdjournal.Journal, toVal reflect.Value) error {
	toType := toVal.Type()

	numField := toVal.NumField()

	// This intentionally supports only the few types we actually
	// use on the Record struct. It's not intended to be generic.

	for i := 0; i < numField; i++ {
		fieldVal := toVal.Field(i)
		fieldDef := toType.Field(i)
		fieldType := fieldDef.Type
		fieldTag := fieldDef.Tag
		fieldTypeKind := fieldType.Kind()

		if fieldTypeKind == reflect.Struct {
			// Recursively unmarshal from the same journal
			unmarshalRecord(journal, fieldVal)
		}

		jdKey := fieldTag.Get("journald")
		if jdKey == "" {
			continue
		}

		value, err := journal.GetData(jdKey)
		if err != nil || value == "" {
			fieldVal.Set(reflect.Zero(fieldType))
			continue
		}

		// The value is returned with the key and an equals sign on
		// the front, so we'll trim those off.
		value = value[len(jdKey)+1:]

		switch fieldTypeKind {
		case reflect.Int:
			intVal, err := strconv.Atoi(value)
			if err != nil {
				// Should never happen, but not much we can do here.
				fieldVal.Set(reflect.Zero(fieldType))
				continue
			}
			fieldVal.SetInt(int64(intVal))
			break
		case reflect.String:
			fieldVal.SetString(value)
			break
		default:
			// Should never happen
			panic(fmt.Errorf("Can't unmarshal to %s", fieldType))
		}
	}

	return nil
}


================================================
FILE: vendor/github.com/aws/aws-sdk-go/LICENSE.txt
================================================

                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "[]"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright [yyyy] [name of copyright owner]

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.


================================================
FILE: vendor/github.com/aws/aws-sdk-go/NOTICE.txt
================================================
AWS SDK for Go
Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved. 
Copyright 2014-2015 Stripe, Inc.


================================================
FILE: vendor/github.com/aws/aws-sdk-go/aws/awserr/error.go
================================================
// Package awserr represents API error interface accessors for the SDK.
package awserr

// An Error wraps lower level errors with code, message and an original error.
// The underlying concrete error type may also satisfy other interfaces which
// can be to used to obtain more specific information about the error.
//
// Calling Error() or String() will always include the full information about
// an error based on its underlying type.
//
// Example:
//
//     output, err := s3manage.Upload(svc, input, opts)
//     if err != nil {
//         if awsErr, ok := err.(awserr.Error); ok {
//             // Get error details
//             log.Println("Error:", awsErr.Code(), awsErr.Message())
//
//             // Prints out full error message, including original error if there was one.
//             log.Println("Error:", awsErr.Error())
//
//             // Get original error
//             if origErr := awsErr.OrigErr(); origErr != nil {
//                 // operate on original error.
//             }
//         } else {
//             fmt.Println(err.Error())
//         }
//     }
//
type Error interface {
	// Satisfy the generic error interface.
	error

	// Returns the short phrase depicting the classification of the error.
	Code() string

	// Returns the error details message.
	Message() string

	// Returns the original error if one was set.  Nil is returned if not set.
	OrigErr() error
}

// BatchError is a batch of errors which also wraps lower level errors with
// code, message, and original errors. Calling Error() will include all errors
// that occurred in the batch.
//
// Deprecated: Replaced with BatchedErrors. Only defined for backwards
// compatibility.
type BatchError interface {
	// Satisfy the generic error interface.
	error

	// Returns the short phrase depicting the classification of the error.
	Code() string

	// Returns the error details message.
	Message() string

	// Returns the original error if one was set.  Nil is returned if not set.
	OrigErrs() []error
}

// BatchedErrors is a batch of errors which also wraps lower level errors with
// code, message, and original errors. Calling Error() will include all errors
// that occurred in the batch.
//
// Replaces BatchError
type BatchedErrors interface {
	// Satisfy the base Error interface.
	Error

	// Returns the original error if one was set.  Nil is returned if not set.
	OrigErrs() []error
}

// New returns an Error object described by the code, message, and origErr.
//
// If origErr satisfies the Error interface it will not be wrapped within a new
// Error object and will instead be returned.
func New(code, message string, origErr error) Error {
	var errs []error
	if origErr != nil {
		errs = append(errs, origErr)
	}
	return newBaseError(code, message, errs)
}

// NewBatchError returns an BatchedErrors with a collection of errors as an
// array of errors.
func NewBatchError(code, message string, errs []error) BatchedErrors {
	return newBaseError(code, message, errs)
}

// A RequestFailure is an interface to extract request failure information from
// an Error such as the request ID of the failed request returned by a service.
// RequestFailures may not always have a requestID value if the request failed
// prior to reaching the service such as a connection error.
//
// Example:
//
//     output, err := s3manage.Upload(svc, input, opts)
//     if err != nil {
//         if reqerr, ok := err.(RequestFailure); ok {
//             log.Println("Request failed", reqerr.Code(), reqerr.Message(), reqerr.RequestID())
//         } else {
//             log.Println("Error:", err.Error())
//         }
//     }
//
// Combined with awserr.Error:
//
//    output, err := s3manage.Upload(svc, input, opts)
//    if err != nil {
//        if awsErr, ok := err.(awserr.Error); ok {
//            // Generic AWS Error with Code, Message, and original error (if any)
//            fmt.Println(awsErr.Code(), awsErr.Message(), awsErr.OrigErr())
//
//            if reqErr, ok := err.(awserr.RequestFailure); ok {
//                // A service error occurred
//                fmt.Println(reqErr.StatusCode(), reqErr.RequestID())
//            }
//        } else {
//            fmt.Println(err.Error())
//        }
//    }
//
type RequestFailure interface {
	Error

	// The status code of the HTTP response.
	StatusCode() int

	// The request ID returned by the service for a request failure. This will
	// be empty if no request ID is available such as the request failed due
	// to a connection error.
	RequestID() string
}

// NewRequestFailure returns a new request error wrapper for the given Error
// provided.
func NewRequestFailure(err Error, statusCode int, reqID string) RequestFailure {
	return newRequestError(err, statusCode, reqID)
}


================================================
FILE: vendor/github.com/aws/aws-sdk-go/aws/awserr/types.go
================================================
package awserr

import "fmt"

// SprintError returns a string of the formatted error code.
//
// Both extra and origErr are optional.  If they are included their lines
// will be added, but if they are not included their lines will be ignored.
func SprintError(code, message, extra string, origErr error) string {
	msg := fmt.Sprintf("%s: %s", code, message)
	if extra != "" {
		msg = fmt.Sprintf("%s\n\t%s", msg, extra)
	}
	if origErr != nil {
		msg = fmt.Sprintf("%s\ncaused by: %s", msg, origErr.Error())
	}
	return msg
}

// A baseError wraps the code and message which defines an error. It also
// can be used to wrap an original error object.
//
// Should be used as the root for errors satisfying the awserr.Error. Also
// for any error which does not fit into a specific error wrapper type.
type baseError struct {
	// Classification of error
	code string

	// Detailed information about error
	message string

	// Optional original error this error is based off of. Allows building
	// chained errors.
	errs []error
}

// newBaseError returns an error object for the code, message, and errors.
//
// code is a short no whitespace phrase depicting the classification of
// the error that is being created.
//
// message is the free flow string containing detailed information about the
// error.
//
// origErrs is the error objects which will be nested under the new errors to
// be returned.
func newBaseError(code, message string, origErrs []error) *baseError {
	b := &baseError{
		code:    code,
		message: message,
		errs:    origErrs,
	}

	return b
}

// Error returns the string representation of the error.
//
// See ErrorWithExtra for formatting.
//
// Satisfies the error interface.
func (b baseError) Error() string {
	size := len(b.errs)
	if size > 0 {
		return SprintError(b.code, b.message, "", errorList(b.errs))
	}

	return SprintError(b.code, b.message, "", nil)
}

// String returns the string representation of the error.
// Alias for Error to satisfy the stringer interface.
func (b baseError) String() string {
	return b.Error()
}

// Code returns the short phrase depicting the classification of the error.
func (b baseError) Code() string {
	return b.code
}

// Message returns the error details message.
func (b baseError) Message() string {
	return b.message
}

// OrigErr returns the original error if one was set. Nil is returned if no
// error was set. This only returns the first element in the list. If the full
// list is needed, use BatchedErrors.
func (b baseError) OrigErr() error {
	switch len(b.errs) {
	case 0:
		return nil
	case 1:
		return b.errs[0]
	default:
		if err, ok := b.errs[0].(Error); ok {
			return NewBatchError(err.Code(), err.Message(), b.errs[1:])
		}
		return NewBatchError("BatchedErrors",
			"multiple errors occurred", b.errs)
	}
}

// OrigErrs returns the original errors if one was set. An empty slice is
// returned if no error was set.
func (b baseError) OrigErrs() []error {
	return b.errs
}

// So that the Error interface type can be included as an anonymous field
// in the requestError struct and not conflict with the error.Error() method.
type awsError Error

// A requestError wraps a request or service error.
//
// Composed of baseError for code, message, and original error.
type requestError struct {
	awsError
	statusCode int
	requestID  string
}

// newRequestError returns a wrapped error with additional information for
// request status code, and service requestID.
//
// Should be used to wrap all request which involve service requests. Even if
// the request failed without a service response, but had an HTTP status code
// that may be meaningful.
//
// Also wraps original errors via the baseError.
func newRequestError(err Error, statusCode int, requestID string) *requestError {
	return &requestError{
		awsError:   err,
		statusCode: statusCode,
		requestID:  requestID,
	}
}

// Error returns the string representation of the error.
// Satisfies the error interface.
func (r requestError) Error() string {
	extra := fmt.Sprintf("status code: %d, request id: %s",
		r.statusCode, r.requestID)
	return SprintError(r.Code(), r.Message(), extra, r.OrigErr())
}

// String returns the string representation of the error.
// Alias for Error to satisfy the stringer interface.
func (r requestError) String() string {
	return r.Error()
}

// StatusCode returns the wrapped status code for the error
func (r requestError) StatusCode() int {
	return r.statusCode
}

// RequestID returns the wrapped requestID
func (r requestError) RequestID() string {
	return r.requestID
}

// OrigErrs returns the original errors if one was set. An empty slice is
// returned if no error was set.
func (r requestError) OrigErrs() []error {
	if b, ok := r.awsError.(BatchedErrors); ok {
		return b.OrigErrs()
	}
	return []error{r.OrigErr()}
}

// An error list that satisfies the golang interface
type errorList []error

// Error returns the string representation of the error.
//
// Satisfies the error interface.
func (e errorList) Error() string {
	msg := ""
	// How do we want to handle the array size being zero
	if size := len(e); size > 0 {
		for i := 0; i < size; i++ {
			msg += fmt.Sprintf("%s", e[i].Error())
			// We check the next index to see if it is within the slice.
			// If it is, then we append a newline. We do this, because unit tests
			// could be broken with the additional '\n'
			if i+1 < size {
				msg += "\n"
			}
		}
	}
	return msg
}


================================================
FILE: vendor/github.com/aws/aws-sdk-go/aws/awsutil/copy.go
================================================
package awsutil

import (
	"io"
	"reflect"
	"time"
)

// Copy deeply copies a src structure to dst. Useful for copying request and
// response structures.
//
// Can copy between structs of different type, but will only copy fields which
// are assignable, and exist in both structs. Fields which are not assignable,
// or do not exist in both structs are ignored.
func Copy(dst, src interface{}) {
	dstval := reflect.ValueOf(dst)
	if !dstval.IsValid() {
		panic("Copy dst cannot be nil")
	}

	rcopy(dstval, reflect.ValueOf(src), true)
}

// CopyOf returns a copy of src while also allocating the memory for dst.
// src must be a pointer type or this operation will fail.
func CopyOf(src interface{}) (dst interface{}) {
	dsti := reflect.New(reflect.TypeOf(src).Elem())
	dst = dsti.Interface()
	rcopy(dsti, reflect.ValueOf(src), true)
	return
}

// rcopy performs a recursive copy of values from the source to destination.
//
// root is used to skip certain aspects of the copy which are not valid
// for the root node of a object.
func rcopy(dst, src reflect.Value, root bool) {
	if !src.IsValid() {
		return
	}

	switch src.Kind() {
	case reflect.Ptr:
		if _, ok := src.Interface().(io.Reader); ok {
			if dst.Kind() == reflect.Ptr && dst.Elem().CanSet() {
				dst.Elem().Set(src)
			} else if dst.CanSet() {
				dst.Set(src)
			}
		} else {
			e := src.Type().Elem()
			if dst.CanSet() && !src.IsNil() {
				if _, ok := src.Interface().(*time.Time); !ok {
					dst.Set(reflect.New(e))
				} else {
					tempValue := reflect.New(e)
					tempValue.Elem().Set(src.Elem())
					// Sets time.Time's unexported values
					dst.Set(tempValue)
				}
			}
			if src.Elem().IsValid() {
				// Keep the current root state since the depth hasn't changed
				rcopy(dst.Elem(), src.Elem(), root)
			}
		}
	case reflect.Struct:
		t := dst.Type()
		for i := 0; i < t.NumField(); i++ {
			name := t.Field(i).Name
			srcVal := src.FieldByName(name)
			dstVal := dst.FieldByName(name)
			if srcVal.IsValid() && dstVal.CanSet() {
				rcopy(dstVal, srcVal, false)
			}
		}
	case reflect.Slice:
		if src.IsNil() {
			break
		}

		s := reflect.MakeSlice(src.Type(), src.Len(), src.Cap())
		dst.Set(s)
		for i := 0; i < src.Len(); i++ {
			rcopy(dst.Index(i), src.Index(i), false)
		}
	case reflect.Map:
		if src.IsNil() {
			break
		}

		s := reflect.MakeMap(src.Type())
		dst.Set(s)
		for _, k := range src.MapKeys() {
			v := src.MapIndex(k)
			v2 := reflect.New(v.Type()).Elem()
			rcopy(v2, v, false)
			dst.SetMapIndex(k, v2)
		}
	default:
		// Assign the value if possible. If its not assignable, the value would
		// need to be converted and the impact of that may be unexpected, or is
		// not compatible with the dst type.
		if src.Type().AssignableTo(dst.Type()) {
			dst.Set(src)
		}
	}
}


================================================
FILE: vendor/github.com/aws/aws-sdk-go/aws/awsutil/equal.go
================================================
package awsutil

import (
	"reflect"
)

// DeepEqual returns if the two values are deeply equal like reflect.DeepEqual.
// In addition to this, this method will also dereference the input values if
// possible so the DeepEqual performed will not fail if one parameter is a
// pointer and the other is not.
//
// DeepEqual will not perform indirection of nested values of the input parameters.
func DeepEqual(a, b interface{}) bool {
	ra := reflect.Indirect(reflect.ValueOf(a))
	rb := reflect.Indirect(reflect.ValueOf(b))

	if raValid, rbValid := ra.IsValid(), rb.IsValid(); !raValid && !rbValid {
		// If the elements are both nil, and of the same type the are equal
		// If they are of different types they are not equal
		return reflect.TypeOf(a) == reflect.TypeOf(b)
	} else if raValid != rbValid {
		// Both values must be valid to be equal
		return false
	}

	return reflect.DeepEqual(ra.Interface(), rb.Interface())
}


================================================
FILE: vendor/github.com/aws/aws-sdk-go/aws/awsutil/path_value.go
================================================
package awsutil

import (
	"reflect"
	"regexp"
	"strconv"
	"strings"

	"github.com/jmespath/go-jmespath"
)

var indexRe = regexp.MustCompile(`(.+)\[(-?\d+)?\]$`)

// rValuesAtPath returns a slice of values found in value v. The values
// in v are explored recursively so all nested values are collected.
func rValuesAtPath(v interface{}, path string, createPath, caseSensitive, nilTerm bool) []reflect.Value {
	pathparts := strings.Split(path, "||")
	if len(pathparts) > 1 {
		for _, pathpart := range pathparts {
			vals := rValuesAtPath(v, pathpart, createPath, caseSensitive, nilTerm)
			if len(vals) > 0 {
				return vals
			}
		}
		return nil
	}

	values := []reflect.Value{reflect.Indirect(reflect.ValueOf(v))}
	components := strings.Split(path, ".")
	for len(values) > 0 && len(components) > 0 {
		var index *int64
		var indexStar bool
		c := strings.TrimSpace(components[0])
		if c == "" { // no actual component, illegal syntax
			return nil
		} else if caseSensitive && c != "*" && strings.ToLower(c[0:1]) == c[0:1] {
			// TODO normalize case for user
			return nil // don't support unexported fields
		}

		// parse this component
		if m := indexRe.FindStringSubmatch(c); m != nil {
			c = m[1]
			if m[2] == "" {
				index = nil
				indexStar = true
			} else {
				i, _ := strconv.ParseInt(m[2], 10, 32)
				index = &i
				indexStar = false
			}
		}

		nextvals := []reflect.Value{}
		for _, value := range values {
			// pull component name out of struct member
			if value.Kind() != reflect.Struct {
				continue
			}

			if c == "*" { // pull all members
				for i := 0; i < value.NumField(); i++ {
					if f := reflect.Indirect(value.Field(i)); f.IsValid() {
						nextvals = append(nextvals, f)
					}
				}
				continue
			}

			value = value.FieldByNameFunc(func(name string) bool {
				if c == name {
					return true
				} else if !caseSensitive && strings.ToLower(name) == strings.ToLower(c) {
					return true
				}
				return false
			})

			if nilTerm && value.Kind() == reflect.Ptr && len(components[1:]) == 0 {
				if !value.IsNil() {
					value.Set(reflect.Zero(value.Type()))
				}
				return []reflect.Value{value}
			}

			if createPath && value.Kind() == reflect.Ptr && value.IsNil() {
				// TODO if the value is the terminus it should not be created
				// if the value to be set to its position is nil.
				value.Set(reflect.New(value.Type().Elem()))
				value = value.Elem()
			} else {
				value = reflect.Indirect(value)
			}

			if value.Kind() == reflect.Slice || value.Kind() == reflect.Map {
				if !createPath && value.IsNil() {
					value = reflect.ValueOf(nil)
				}
			}

			if value.IsValid() {
				nextvals = append(nextvals, value)
			}
		}
		values = nextvals

		if indexStar || index != nil {
			nextvals = []reflect.Value{}
			for _, valItem := range values {
				value := reflect.Indirect(valItem)
				if value.Kind() != reflect.Slice {
					continue
				}

				if indexStar { // grab all indices
					for i := 0; i < value.Len(); i++ {
						idx := reflect.Indirect(value.Index(i))
						if idx.IsValid() {
							nextvals = append(nextvals, idx)
						}
					}
					continue
				}

				// pull out index
				i := int(*index)
				if i >= value.Len() { // check out of bounds
					if createPath {
						// TODO resize slice
					} else {
						continue
					}
				} else if i < 0 { // support negative indexing
					i = value.Len() + i
				}
				value = reflect.Indirect(value.Index(i))

				if value.Kind() == reflect.Slice || value.Kind() == reflect.Map {
					if !createPath && value.IsNil() {
						value = reflect.ValueOf(nil)
					}
				}

				if value.IsValid() {
					nextvals = append(nextvals, value)
				}
			}
			values = nextvals
		}

		components = components[1:]
	}
	return values
}

// ValuesAtPath returns a list of values at the case insensitive lexical
// path inside of a structure.
func ValuesAtPath(i interface{}, path string) ([]interface{}, error) {
	result, err := jmespath.Search(path, i)
	if err != nil {
		return nil, err
	}

	v := reflect.ValueOf(result)
	if !v.IsValid() || (v.Kind() == reflect.Ptr && v.IsNil()) {
		return nil, nil
	}
	if s, ok := result.([]interface{}); ok {
		return s, err
	}
	if v.Kind() == reflect.Map && v.Len() == 0 {
		return nil, nil
	}
	if v.Kind() == reflect.Slice {
		out := make([]interface{}, v.Len())
		for i := 0; i < v.Len(); i++ {
			out[i] = v.Index(i).Interface()
		}
		return out, nil
	}

	return []interface{}{result}, nil
}

// SetValueAtPath sets a value at the case insensitive lexical path inside
// of a structure.
func SetValueAtPath(i interface{}, path string, v interface{}) {
	if rvals := rValuesAtPath(i, path, true, false, v == nil); rvals != nil {
		for _, rval := range rvals {
			if rval.Kind() == reflect.Ptr && rval.IsNil() {
				continue
			}
			setValue(rval, v)
		}
	}
}

func setValue(dstVal reflect.Value, src interface{}) {
	if dstVal.Kind() == reflect.Ptr {
		dstVal = reflect.Indirect(dstVal)
	}
	srcVal := reflect.ValueOf(src)

	if !srcVal.IsValid() { // src is literal nil
		if dstVal.CanAddr() {
			// Convert to pointer so that pointer's value can be nil'ed
			//                     dstVal = dstVal.Addr()
		}
		dstVal.Set(reflect.Zero(dstVal.Type()))

	} else if srcVal.Kind() == reflect.Ptr {
		if srcVal.IsNil() {
			srcVal = reflect.Zero(dstVal.Type())
		} else {
			srcVal = reflect.ValueOf(src).Elem()
		}
		dstVal.Set(srcVal)
	} else {
		dstVal.Set(srcVal)
	}

}


================================================
FILE: vendor/github.com/aws/aws-sdk-go/aws/awsutil/prettify.go
================================================
package awsutil

import (
	"bytes"
	"fmt"
	"io"
	"reflect"
	"strings"
)

// Prettify returns the string representation of a value.
func Prettify(i interface{}) string {
	var buf bytes.Buffer
	prettify(reflect.ValueOf(i), 0, &buf)
	return buf.String()
}

// prettify will recursively walk value v to build a textual
// representation of the value.
func prettify(v reflect.Value, indent int, buf *bytes.Buffer) {
	for v.Kind() == reflect.Ptr {
		v = v.Elem()
	}

	switch v.Kind() {
	case reflect.Struct:
		strtype := v.Type().String()
		if strtype == "time.Time" {
			fmt.Fprintf(buf, "%s", v.Interface())
			break
		} else if strings.HasPrefix(strtype, "io.") {
			buf.WriteString("<buffer>")
			break
		}

		buf.WriteString("{\n")

		names := []string{}
		for i := 0; i < v.Type().NumField(); i++ {
			name := v.Type().Field(i).Name
			f := v.Field(i)
			if name[0:1] == strings.ToLower(name[0:1]) {
				continue // ignore unexported fields
			}
			if (f.Kind() == reflect.Ptr || f.Kind() == reflect.Slice || f.Kind() == reflect.Map) && f.IsNil() {
				continue // ignore unset fields
			}
			names = append(names, name)
		}

		for i, n := range names {
			val := v.FieldByName(n)
			buf.WriteString(strings.Repeat(" ", indent+2))
			buf.WriteString(n + ": ")
			prettify(val, indent+2, buf)

			if i < len(names)-1 {
				buf.WriteString(",\n")
			}
		}

		buf.WriteString("\n" + strings.Repeat(" ", indent) + "}")
	case reflect.Slice:
		nl, id, id2 := "", "", ""
		if v.Len() > 3 {
			nl, id, id2 = "\n", strings.Repeat(" ", indent), strings.Repeat(" ", indent+2)
		}
		buf.WriteString("[" + nl)
		for i := 0; i < v.Len(); i++ {
			buf.WriteString(id2)
			prettify(v.Index(i), indent+2, buf)

			if i < v.Len()-1 {
				buf.WriteString("," + nl)
			}
		}

		buf.WriteString(nl + id + "]")
	case reflect.Map:
		buf.WriteString("{\n")

		for i, k := range v.MapKeys() {
			buf.WriteString(strings.Repeat(" ", indent+2))
			buf.WriteString(k.String() + ": ")
			prettify(v.MapIndex(k), indent+2, buf)

			if i < v.Len()-1 {
				buf.WriteString(",\n")
			}
		}

		buf.WriteString("\n" + strings.Repeat(" ", indent) + "}")
	default:
		if !v.IsValid() {
			fmt.Fprint(buf, "<invalid value>")
			return
		}
		format := "%v"
		switch v.Interface().(type) {
		case string:
			format = "%q"
		case io.ReadSeeker, io.Reader:
			format = "buffer(%p)"
		}
		fmt.Fprintf(buf, format, v.Interface())
	}
}


================================================
FILE: vendor/github.com/aws/aws-sdk-go/aws/awsutil/string_value.go
================================================
package awsutil

import (
	"bytes"
	"fmt"
	"reflect"
	"strings"
)

// StringValue returns the string representation of a value.
func StringValue(i interface{}) string {
	var buf bytes.Buffer
	stringValue(reflect.ValueOf(i), 0, &buf)
	return buf.String()
}

func stringValue(v reflect.Value, indent int, buf *bytes.Buffer) {
	for v.Kind() == reflect.Ptr {
		v = v.Elem()
	}

	switch v.Kind() {
	case reflect.Struct:
		buf.WriteString("{\n")

		names := []string{}
		for i := 0; i < v.Type().NumField(); i++ {
			name := v.Type().Field(i).Name
			f := v.Field(i)
			if name[0:1] == strings.ToLower(name[0:1]) {
				continue // ignore unexported fields
			}
			if (f.Kind() == reflect.Ptr || f.Kind() == reflect.Slice) && f.IsNil() {
				continue // ignore unset fields
			}
			names = append(names, name)
		}

		for i, n := range names {
			val := v.FieldByName(n)
			buf.WriteString(strings.Repeat(" ", indent+2))
			buf.WriteString(n + ": ")
			stringValue(val, indent+2, buf)

			if i < len(names)-1 {
				buf.WriteString(",\n")
			}
		}

		buf.WriteString("\n" + strings.Repeat(" ", indent) + "}")
	case reflect.Slice:
		nl, id, id2 := "", "", ""
		if v.Len() > 3 {
			nl, id, id2 = "\n", strings.Repeat(" ", indent), strings.Repeat(" ", indent+2)
		}
		buf.WriteString("[" + nl)
		for i := 0; i < v.Len(); i++ {
			buf.WriteString(id2)
			stringValue(v.Index(i), indent+2, buf)

			if i < v.Len()-1 {
				buf.WriteString("," + nl)
			}
		}

		buf.WriteString(nl + id + "]")
	case reflect.Map:
		buf.WriteString("{\n")

		for i, k := range v.MapKeys() {
			buf.WriteString(strings.Repeat(" ", indent+2))
			buf.WriteString(k.String() + ": ")
			stringValue(v.MapIndex(k), indent+2, buf)

			if i < v.Len()-1 {
				buf.WriteString(",\n")
			}
		}

		buf.WriteString("\n" + strings.Repeat(" ", indent) + "}")
	default:
		format := "%v"
		switch v.Interface().(type) {
		case string:
			format = "%q"
		}
		fmt.Fprintf(buf, format, v.Interface())
	}
}


================================================
FILE: vendor/github.com/aws/aws-sdk-go/aws/client/client.go
================================================
package client

import (
	"fmt"
	"io/ioutil"
	"net/http/httputil"

	"github.com/aws/aws-sdk-go/aws"
	"github.com/aws/aws-sdk-go/aws/client/metadata"
	"github.com/aws/aws-sdk-go/aws/request"
)

// A Config provides configuration to a service client instance.
type Config struct {
	Config                  *aws.Config
	Handlers                request.Handlers
	Endpoint, SigningRegion string
}

// ConfigProvider provides a generic way for a service client to receive
// the ClientConfig without circular dependencies.
type ConfigProvider interface {
	ClientConfig(serviceName string, cfgs ...*aws.Config) Config
}

// A Client implements the base client request and response handling
// used by all service clients.
type Client struct {
	request.Retryer
	metadata.ClientInfo

	Config   aws.Config
	Handlers request.Handlers
}

// New will return a pointer to a new initialized service client.
func New(cfg aws.Config, info metadata.ClientInfo, handlers request.Handlers, options ...func(*Client)) *Client {
	svc := &Client{
		Config:     cfg,
		ClientInfo: info,
		Handlers:   handlers,
	}

	switch retryer, ok := cfg.Retryer.(request.Retryer); {
	case ok:
		svc.Retryer = retryer
	case cfg.Retryer != nil && cfg.Logger != nil:
		s := fmt.Sprintf("WARNING: %T does not implement request.Retryer; using DefaultRetryer instead", cfg.Retryer)
		cfg.Logger.Log(s)
		fallthrough
	default:
		maxRetries := aws.IntValue(cfg.MaxRetries)
		if cfg.MaxRetries == nil || maxRetries == aws.UseServiceDefaultRetries {
			maxRetries = 3
		}
		svc.Retryer = DefaultRetryer{NumMaxRetries: maxRetries}
	}

	svc.AddDebugHandlers()

	for _, option := range options {
		option(svc)
	}

	return svc
}

// NewRequest returns a new Request pointer for the service API
// operation and parameters.
func (c *Client) NewRequest(operation *request.Operation, params interface{}, data interface{}) *request.Request {
	return request.New(c.Config, c.ClientInfo, c.Handlers, c.Retryer, operation, params, data)
}

// AddDebugHandlers injects debug logging handlers into the service to log request
// debug information.
func (c *Client) AddDebugHandlers() {
	if !c.Config.LogLevel.AtLeast(aws.LogDebug) {
		return
	}

	c.Handlers.Send.PushFront(logRequest)
	c.Handlers.Send.PushBack(logResponse)
}

const logReqMsg = `DEBUG: Request %s/%s Details:
---[ REQUEST POST-SIGN ]-----------------------------
%s
-----------------------------------------------------`

const logReqErrMsg = `DEBUG ERROR: Request %s/%s:
---[ REQUEST DUMP ERROR ]-----------------------------
%s
-----------------------------------------------------`

func logRequest(r *request.Request) {
	logBody := r.Config.LogLevel.Matches(aws.LogDebugWithHTTPBody)
	dumpedBody, err := httputil.DumpRequestOut(r.HTTPRequest, logBody)
	if err != nil {
		r.Config.Logger.Log(fmt.Sprintf(logReqErrMsg, r.ClientInfo.ServiceName, r.Operation.Name, err))
		return
	}

	if logBody {
		// Reset the request body because dumpRequest will re-wrap the r.HTTPRequest's
		// Body as a NoOpCloser and will not be reset after read by the HTTP
		// client reader.
		r.Body.Seek(r.BodyStart, 0)
		r.HTTPRequest.Body = ioutil.NopCloser(r.Body)
	}

	r.Config.Logger.Log(fmt.Sprintf(logReqMsg, r.ClientInfo.ServiceName, r.Operation.Name, string(dumpedBody)))
}

const logRespMsg = `DEBUG: Response %s/%s Details:
---[ RESPONSE ]--------------------------------------
%s
-----------------------------------------------------`

const logRespErrMsg = `DEBUG ERROR: Response %s/%s:
---[ RESPONSE DUMP ERROR ]-----------------------------
%s
-----------------------------------------------------`

func logResponse(r *request.Request) {
	var msg = "no response data"
	if r.HTTPResponse != nil {
		logBody := r.Config.LogLevel.Matches(aws.LogDebugWithHTTPBody)
		dumpedBody, err := httputil.DumpResponse(r.HTTPResponse, logBody)
		if err != nil {
			r.Config.Logger.Log(fmt.Sprintf(logRespErrMsg, r.ClientInfo.ServiceName, r.Operation.Name, err))
			return
		}

		msg = string(dumpedBody)
	} else if r.Error != nil {
		msg = r.Error.Error()
	}
	r.Config.Logger.Log(fmt.Sprintf(logRespMsg, r.ClientInfo.ServiceName, r.Operation.Name, msg))
}


================================================
FILE: vendor/github.com/aws/aws-sdk-go/aws/client/default_retryer.go
================================================
package client

import (
	"math/rand"
	"sync"
	"time"

	"github.com/aws/aws-sdk-go/aws/request"
)

// DefaultRetryer implements basic retry logic using exponential backoff for
// most services. If you want to implement custom retry logic, implement the
// request.Retryer interface or create a structure type that composes this
// struct and override the specific methods. For example, to override only
// the MaxRetries method:
//
//		type retryer struct {
//      service.DefaultRetryer
//    }
//
//    // This implementation always has 100 max retries
//    func (d retryer) MaxRetries() uint { return 100 }
type DefaultRetryer struct {
	NumMaxRetries int
}

// MaxRetries returns the number of maximum returns the service will use to make
// an individual API request.
func (d DefaultRetryer) MaxRetries() int {
	return d.NumMaxRetries
}

var seededRand = rand.New(&lockedSource{src: rand.NewSource(time.Now().UnixNano())})

// RetryRules returns the delay duration before retrying this request again
func (d DefaultRetryer) RetryRules(r *request.Request) time.Duration {
	// Set the upper limit of delay in retrying at ~five minutes
	minTime := 30
	throttle := d.shouldThrottle(r)
	if throttle {
		minTime = 500
	}

	retryCount := r.RetryCount
	if retryCount > 13 {
		retryCount = 13
	} else if throttle && retryCount > 8 {
		retryCount = 8
	}

	delay := (1 << uint(retryCount)) * (seededRand.Intn(minTime) + minTime)
	return time.Duration(delay) * time.Millisecond
}

// ShouldRetry returns true if the request should be retried.
func (d DefaultRetryer) ShouldRetry(r *request.Request) bool {
	if r.HTTPResponse.StatusCode >= 500 {
		return true
	}
	return r.IsErrorRetryable() || d.shouldThrottle(r)
}

// ShouldThrottle returns true if the request should be throttled.
func (d DefaultRetryer) shouldThrottle(r *request.Request) bool {
	if r.HTTPResponse.StatusCode == 502 ||
		r.HTTPResponse.StatusCode == 503 ||
		r.HTTPResponse.StatusCode == 504 {
		return true
	}
	return r.IsErrorThrottle()
}

// lockedSource is a thread-safe implementation of rand.Source
type lockedSource struct {
	lk  sync.Mutex
	src rand.Source
}

func (r *lockedSource) Int63() (n int64) {
	r.lk.Lock()
	n = r.src.Int63()
	r.lk.Unlock()
	return
}

func (r *lockedSource) Seed(seed int64) {
	r.lk.Lock()
	r.src.Seed(seed)
	r.lk.Unlock()
}


================================================
FILE: vendor/github.com/aws/aws-sdk-go/aws/client/metadata/client_info.go
================================================
package metadata

// ClientInfo wraps immutable data from the client.Client structure.
type ClientInfo struct {
	ServiceName   string
	APIVersion    string
	Endpoint      string
	SigningName   string
	SigningRegion string
	JSONVersion   string
	TargetPrefix  string
}


================================================
FILE: vendor/github.com/aws/aws-sdk-go/aws/config.go
================================================
package aws

import (
	"net/http"
	"time"

	"github.com/aws/aws-sdk-go/aws/credentials"
)

// UseServiceDefaultRetries instructs the config to use the service's own
// default number of retries. This will be the default action if
// Config.MaxRetries is nil also.
const UseServiceDefaultRetries = -1

// RequestRetryer is an alias for a type that implements the request.Retryer
// interface.
type RequestRetryer interface{}

// A Config provides service configuration for service clients. By default,
// all clients will use the defaults.DefaultConfig tructure.
//
//     // Create Session with MaxRetry configuration to be shared by multiple
//     // service clients.
//     sess, err := session.NewSession(&aws.Config{
//         MaxRetries: aws.Int(3),
//     })
//
//     // Create S3 service client with a specific Region.
//     svc := s3.New(sess, &aws.Config{
//         Region: aws.String("us-west-2"),
//     })
type Config struct {
	// Enables verbose error printing of all credential chain errors.
	// Should be used when wanting to see all errors while attempting to
	// retrieve credentials.
	CredentialsChainVerboseErrors *bool

	// The credentials object to use when signing requests. Defaults to a
	// chain of credential providers to search for credentials in environment
	// variables, shared credential file, and EC2 Instance Roles.
	Credentials *credentials.Credentials

	// An optional endpoint URL (hostname only or fully qualified URI)
	// that overrides the default generated endpoint for a client. Set this
	// to `""` to use the default generated endpoint.
	//
	// @note You must still provide a `Region` value when specifying an
	//   endpoint for a client.
	Endpoint *string

	// The region to send requests to. This parameter is required and must
	// be configured globally or on a per-client basis unless otherwise
	// noted. A full list of regions is found in the "Regions and Endpoints"
	// document.
	//
	// @see http://docs.aws.amazon.com/general/latest/gr/rande.html
	//   AWS Regions and Endpoints
	Region *string

	// Set this to `true` to disable SSL when sending requests. Defaults
	// to `false`.
	DisableSSL *bool

	// The HTTP client to use when sending requests. Defaults to
	// `http.DefaultClient`.
	HTTPClient *http.Client

	// An integer value representing the logging level. The default log level
	// is zero (LogOff), which represents no logging. To enable logging set
	// to a LogLevel Value.
	LogLevel *LogLevelType

	// The logger writer interface to write logging messages to. Defaults to
	// standard out.
	Logger Logger

	// The maximum number of times that a request will be retried for failures.
	// Defaults to -1, which defers the max retry setting to the service
	// specific configuration.
	MaxRetries *int

	// Retryer guides how HTTP requests should be retried in case of
	// recoverable failures.
	//
	// When nil or the value does not implement the request.Retryer interface,
	// the request.DefaultRetryer will be used.
	//
	// When both Retryer and MaxRetries are non-nil, the former is used and
	// the latter ignored.
	//
	// To set the Retryer field in a type-safe manner and with chaining, use
	// the request.WithRetryer helper function:
	//
	//   cfg := request.WithRetryer(aws.NewConfig(), myRetryer)
	//
	Retryer RequestRetryer

	// Disables semantic parameter validation, which validates input for
	// missing required fields and/or other semantic request input errors.
	DisableParamValidation *bool

	// Disables the computation of request and response checksums, e.g.,
	// CRC32 checksums in Amazon DynamoDB.
	DisableComputeChecksums *bool

	// Set this to `true` to force the request to use path-style addressing,
	// i.e., `http://s3.amazonaws.com/BUCKET/KEY`. By default, the S3 client
	// will use virtual hosted bucket addressing when possible
	// (`http://BUCKET.s3.amazonaws.com/KEY`).
	//
	// @note This configuration option is specific to the Amazon S3 service.
	// @see http://docs.aws.amazon.com/AmazonS3/latest/dev/VirtualHosting.html
	//   Amazon S3: Virtual Hosting of Buckets
	S3ForcePathStyle *bool

	// Set this to `true` to disable the SDK adding the `Expect: 100-Continue`
	// header to PUT requests over 2MB of content. 100-Continue instructs the
	// HTTP client not to send the body until the service responds with a
	// `continue` status. This is useful to prevent sending the request body
	// until after the request is authenticated, and validated.
	//
	// http://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPUT.html
	//
	// 100-Continue is only enabled for Go 1.6 and above. See `http.Transport`'s
	// `ExpectContinueTimeout` for information on adjusting the continue wait
	// timeout. https://golang.org/pkg/net/http/#Transport
	//
	// You should use this flag to disble 100-Continue if you experience issues
	// with proxies or third party S3 compatible services.
	S3Disable100Continue *bool

	// Set this to `true` to enable S3 Accelerate feature. For all operations
	// compatible with S3 Accelerate will use the accelerate endpoint for
	// requests. Requests not compatible will fall back to normal S3 requests.
	//
	// The bucket must be enable for accelerate to be used with S3 client with
	// accelerate enabled. If the bucket is not enabled for accelerate an error
	// will be returned. The bucket name must be DNS compatible to also work
	// with accelerate.
	//
	// Not compatible with UseDualStack requests will fail if both flags are
	// specified.
	S3UseAccelerate *bool

	// Set this to `true` to disable the EC2Metadata client from overriding the
	// default http.Client's Timeout. This is helpful if you do not want the
	// EC2Metadata client to create a new http.Client. This options is only
	// meaningful if you're not already using a custom HTTP client with the
	// SDK. Enabled by default.
	//
	// Must be set and provided to the session.NewSession() in order to disable
	// the EC2Metadata overriding the timeout for default credentials chain.
	//
	// Example:
	//    sess, err := session.NewSession(aws.NewConfig().WithEC2MetadataDiableTimeoutOverride(true))
	//
	//    svc := s3.New(sess)
	//
	EC2MetadataDisableTimeoutOverride *bool

	// Instructs the endpiont to be generated for a service client to
	// be the dual stack endpoint. The dual stack endpoint will support
	// both IPv4 and IPv6 addressing.
	//
	// Setting this for a service which does not support dual stack will fail
	// to make requets. It is not recommended to set this value on the session
	// as it will apply to all service clients created with the session. Even
	// services which don't support dual stack endpoints.
	//
	// If the Endpoint config value is also provided the UseDualStack flag
	// will be ignored.
	//
	// Only supported with.
	//
	//     sess, err := session.NewSession()
	//
	//     svc := s3.New(sess, &aws.Config{
	//         UseDualStack: aws.Bool(true),
	//     })
	UseDualStack *bool

	// SleepDelay is an override for the func the SDK will call when sleeping
	// during the lifecycle of a request. Specifically this will be used for
	// request delays. This value should only be used for testing. To adjust
	// the delay of a request see the aws/client.DefaultRetryer and
	// aws/request.Retryer.
	SleepDelay func(time.Duration)
}

// NewConfig returns a new Config pointer that can be chained with builder
// methods to set multiple configuration values inline without using pointers.
//
//     // Create Session with MaxRetry configuration to be shared by multiple
//     // service clients.
//     sess, err := session.NewSession(aws.NewConfig().
//         WithMaxRetries(3),
//     )
//
//     // Create S3 service client with a specific Region.
//     svc := s3.New(sess, aws.NewConfig().
//         WithRegion("us-west-2"),
//     )
func NewConfig() *Config {
	return &Config{}
}

// WithCredentialsChainVerboseErrors sets a config verbose errors boolean and returning
// a Config pointer.
func (c *Config) WithCredentialsChainVerboseErrors(verboseErrs bool) *Config {
	c.CredentialsChainVerboseErrors = &verboseErrs
	return c
}

// WithCredentials sets a config Credentials value returning a Config pointer
// for chaining.
func (c *Config) WithCredentials(creds *credentials.Credentials) *Config {
	c.Credentials = creds
	return c
}

// WithEndpoint sets a config Endpoint value returning a Config pointer for
// chaining.
func (c *Config) WithEndpoint(endpoint string) *Config {
	c.Endpoint = &endpoint
	return c
}

// WithRegion sets a config Region value returning a Config pointer for
// chaining.
func (c *Config) WithRegion(region string) *Config {
	c.Region = &region
	return c
}

// WithDisableSSL sets a config DisableSSL value returning a Config pointer
// for chaining.
func (c *Config) WithDisableSSL(disable bool) *Config {
	c.DisableSSL = &disable
	return c
}

// WithHTTPClient sets a config HTTPClient value returning a Config pointer
// for chaining.
func (c *Config) WithHTTPClient(client *http.Client) *Config {
	c.HTTPClient = client
	return c
}

// WithMaxRetries sets a config MaxRetries value returning a Config pointer
// for chaining.
func (c *Config) WithMaxRetries(max int) *Config {
	c.MaxRetries = &max
	return c
}

// WithDisableParamValidation sets a config DisableParamValidation value
// returning a Config pointer for chaining.
func (c *Config) WithDisableParamValidation(disable bool) *Config {
	c.DisableParamValidation = &disable
	return c
}

// WithDisableComputeChecksums sets a config DisableComputeChecksums value
// returning a Config pointer for chaining.
func (c *Config) WithDisableComputeChecksums(disable bool) *Config {
	c.DisableComputeChecksums = &disable
	return c
}

// WithLogLevel sets a config LogLevel value returning a Config pointer for
// chaining.
func (c *Config) WithLogLevel(level LogLevelType) *Config {
	c.LogLevel = &level
	return c
}

// WithLogger sets a config Logger value returning a Config pointer for
// chaining.
func (c *Config) WithLogger(logger Logger) *Config {
	c.Logger = logger
	return c
}

// WithS3ForcePathStyle sets a config S3ForcePathStyle value returning a Config
// pointer for chaining.
func (c *Config) WithS3ForcePathStyle(force bool) *Config {
	c.S3ForcePathStyle = &force
	return c
}

// WithS3Disable100Continue sets a config S3Disable100Continue value returning
// a Config pointer for chaining.
func (c *Config) WithS3Disable100Continue(disable bool) *Config {
	c.S3Disable100Continue = &disable
	return c
}

// WithS3UseAccelerate sets a config S3UseAccelerate value returning a Config
// pointer for chaining.
func (c *Config) WithS3UseAccelerate(enable bool) *Config {
	c.S3UseAccelerate = &enable
	return c
}

// WithUseDualStack sets a config UseDualStack value returning a Config
// pointer for chaining.
func (c *Config) WithUseDualStack(enable bool) *Config {
	c.UseDualStack = &enable
	return c
}

// WithEC2MetadataDisableTimeoutOverride sets a config EC2MetadataDisableTimeoutOverride value
// returning a Config pointer for chaining.
func (c *Config) WithEC2MetadataDisableTimeoutOverride(enable bool) *Config {
	c.EC2MetadataDisableTimeoutOverride = &enable
	return c
}

// WithSleepDelay overrides the function used to sleep while waiting for the
// next retry. Defaults to time.Sleep.
func (c *Config) WithSleepDelay(fn func(time.Duration)) *Config {
	c.SleepDelay = fn
	return c
}

// MergeIn merges the passed in configs into the existing config object.
func (c *Config) MergeIn(cfgs ...*Config) {
	for _, other := range cfgs {
		mergeInConfig(c, other)
	}
}

func mergeInConfig(dst *Config, other *Config) {
	if other == nil {
		return
	}

	if other.CredentialsChainVerboseErrors != nil {
		dst.CredentialsChainVerboseErrors = other.CredentialsChainVerboseErrors
	}

	if other.Credentials != nil {
		dst.Credentials = other.Credentials
	}

	if other.Endpoint != nil {
		dst.Endpoint = other.Endpoint
	}

	if other.Region != nil {
		dst.Region = other.Region
	}

	if other.DisableSSL != nil {
		dst.DisableSSL = other.DisableSSL
	}

	if other.HTTPClient != nil {
		dst.HTTPClient = other.HTTPClient
	}

	if other.LogLevel != nil {
		dst.LogLevel = other.LogLevel
	}

	if other.Logger != nil {
		dst.Logger = other.Logger
	}

	if other.MaxRetries != nil {
		dst.MaxRetries = other.MaxRetries
	}

	if other.Retryer != nil {
		dst.Retryer = other.Retryer
	}

	if other.DisableParamValidation != nil {
		dst.DisableParamValidation = other.DisableParamValidation
	}

	if other.DisableComputeChecksums != nil {
		dst.DisableComputeChecksums = other.DisableComputeChecksums
	}

	if other.S3ForcePathStyle != nil {
		dst.S3ForcePathStyle = other.S3ForcePathStyle
	}

	if other.S3Disable100Continue != nil {
		dst.S3Disable100Continue = other.S3Disable100Continue
	}

	if other.S3UseAccelerate != nil {
		dst.S3UseAccelerate = other.S3UseAccelerate
	}

	if other.UseDualStack != nil {
		dst.UseDualStack = other.UseDualStack
	}

	if other.EC2MetadataDisableTimeoutOverride != nil {
		dst.EC2MetadataDisableTimeoutOverride = other.EC2MetadataDisableTimeoutOverride
	}

	if other.SleepDelay != nil {
		dst.SleepDelay = other.SleepDelay
	}
}

// Copy will return a shallow copy of the Config object. If any additional
// configurations are provided they will be merged into the new config returned.
func (c *Config) Copy(cfgs ...*Config) *Config {
	dst := &Config{}
	dst.MergeIn(c)

	for _, cfg := range cfgs {
		dst.MergeIn(cfg)
	}

	return dst
}


================================================
FILE: vendor/github.com/aws/aws-sdk-go/aws/convert_types.go
================================================
package aws

import "time"

// String returns a pointer to the string value passed in.
func String(v string) *string {
	return &v
}

// StringValue returns the value of the string pointer passed in or
// "" if the pointer is nil.
func StringValue(v *string) string {
	if v != nil {
		return *v
	}
	return ""
}

// StringSlice converts a slice of string values into a slice of
// string pointers
func StringSlice(src []string) []*string {
	dst := make([]*string, len(src))
	for i := 0; i < len(src); i++ {
		dst[i] = &(src[i])
	}
	return dst
}

// StringValueSlice converts a slice of string pointers into a slice of
// string values
func StringValueSlice(src []*string) []string {
	dst := make([]string, len(src))
	for i := 0; i < len(src); i++ {
		if src[i] != nil {
			dst[i] = *(src[i])
		}
	}
	return dst
}

// StringMap converts a string map of string values into a string
// map of string pointers
func StringMap(src map[string]string) map[string]*string {
	dst := make(map[string]*string)
	for k, val := range src {
		v := val
		dst[k] = &v
	}
	return dst
}

// StringValueMap converts a string map of string pointers into a string
// map of string values
func StringValueMap(src map[string]*string) map[string]string {
	dst := make(map[string]string)
	for k, val := range src {
		if val != nil {
			dst[k] = *val
		}
	}
	return dst
}

// Bool returns a pointer to the bool value passed in.
func Bool(v bool) *bool {
	return &v
}

// BoolValue returns the value of the bool pointer passed in or
// false if the pointer is nil.
func BoolValue(v *bool) bool {
	if v != nil {
		return *v
	}
	return false
}

// BoolSlice converts a slice of bool values into a slice of
// bool pointers
func BoolSlice(src []bool) []*bool {
	dst := make([]*bool, len(src))
	for i := 0; i < len(src); i++ {
		dst[i] = &(src[i])
	}
	return dst
}

// BoolValueSlice converts a slice of bool pointers into a slice of
// bool values
func BoolValueSlice(src []*bool) []bool {
	dst := make([]bool, len(src))
	for i := 0; i < len(src); i++ {
		if src[i] != nil {
			dst[i] = *(src[i])
		}
	}
	return dst
}

// BoolMap converts a string map of bool values into a string
// map of bool pointers
func BoolMap(src map[string]bool) map[string]*bool {
	dst := make(map[string]*bool)
	for k, val := range src {
		v := val
		dst[k] = &v
	}
	return dst
}

// BoolValueMap converts a string map of bool pointers into a string
// map of bool values
func BoolValueMap(src map[string]*bool) map[string]bool {
	dst := make(map[string]bool)
	for k, val := range src {
		if val != nil {
			dst[k] = *val
		}
	}
	return dst
}

// Int returns a pointer to the int value passed in.
func Int(v int) *int {
	return &v
}

// IntValue returns the value of the int pointer passed in or
// 0 if the pointer is nil.
func IntValue(v *int) int {
	if v != nil {
		return *v
	}
	return 0
}

// IntSlice converts a slice of int values into a slice of
// int pointers
func IntSlice(src []int) []*int {
	dst := make([]*int, len(src))
	for i := 0; i < len(src); i++ {
		dst[i] = &(src[i])
	}
	return dst
}

// IntValueSlice converts a slice of int pointers into a slice of
// int values
func IntValueSlice(src []*int) []int {
	dst := make([]int, len(src))
	for i := 0; i < len(src); i++ {
		if src[i] != nil {
			dst[i] = *(src[i])
		}
	}
	return dst
}

// IntMap converts a string map of int values into a string
// map of int pointers
func IntMap(src map[string]int) map[string]*int {
	dst := make(map[string]*int)
	for k, val := range src {
		v := val
		dst[k] = &v
	}
	return dst
}

// IntValueMap converts a string map of int pointers into a string
// map of int values
func IntValueMap(src map[string]*int) map[string]int {
	dst := make(map[string]int)
	for k, val := range src {
		if val != nil {
			dst[k] = *val
		}
	}
	return dst
}

// Int64 returns a pointer to the int64 value passed in.
func Int64(v int64) *int64 {
	return &v
}

// Int64Value returns the value of the int64 pointer passed in or
// 0 if the pointer is nil.
func Int64Value(v *int64) int64 {
	if v != nil {
		return *v
	}
	return 0
}

// Int64Slice converts a slice of int64 values into a slice of
// int64 pointers
func Int64Slice(src []int64) []*int64 {
	dst := make([]*int64, len(src))
	for i := 0; i < len(src); i++ {
		dst[i] = &(src[i])
	}
	return dst
}

// Int64ValueSlice converts a slice of int64 pointers into a slice of
// int64 values
func Int64ValueSlice(src []*int64) []int64 {
	dst := make([]int64, len(src))
	for i := 0; i < len(src); i++ {
		if src[i] != nil {
			dst[i] = *(src[i])
		}
	}
	return dst
}

// Int64Map converts a string map of int64 values into a string
// map of int64 pointers
func Int64Map(src map[string]int64) map[string]*int64 {
	dst := make(map[string]*int64)
	for k, val := range src {
		v := val
		dst[k] = &v
	}
	return dst
}

// Int64ValueMap converts a string map of int64 pointers into a string
// map of int64 values
func Int64ValueMap(src map[string]*int64) map[string]int64 {
	dst := make(map[string]int64)
	for k, val := range src {
		if val != nil {
			dst[k] = *val
		}
	}
	return dst
}

// Float64 returns a pointer to the float64 value passed in.
func Float64(v float64) *float64 {
	return &v
}

// Float64Value returns the value of the float64 pointer passed in or
// 0 if the pointer is nil.
func Float64Value(v *float64) float64 {
	if v != nil {
		return *v
	}
	return 0
}

// Float64Slice converts a slice of float64 values into a slice of
// float64 pointers
func Float64Slice(src []float64) []*float64 {
	dst := make([]*float64, len(src))
	for i := 0; i < len(src); i++ {
		dst[i] = &(src[i])
	}
	return dst
}

// Float64ValueSlice converts a slice of float64 pointers into a slice of
// float64 values
func Float64ValueSlice(src []*float64) []float64 {
	dst := make([]float64, len(src))
	for i := 0; i < len(src); i++ {
		if src[i] != nil {
			dst[i] = *(src[i])
		}
	}
	return dst
}

// Float64Map converts a string map of float64 values into a string
// map of float64 pointers
func Float64Map(src map[string]float64) map[string]*float64 {
	dst := make(map[string]*float64)
	for k, val := range src {
		v := val
		dst[k] = &v
	}
	return dst
}

// Float64ValueMap converts a string map of float64 pointers into a string
// map of float64 values
func Float64ValueMap(src map[string]*float64) map[string]float64 {
	dst := make(map[string]float64)
	for k, val := range src {
		if val != nil {
			dst[k] = *val
		}
	}
	return dst
}

// Time returns a pointer to the time.Time value passed in.
func Time(v time.Time) *time.Time {
	return &v
}

// TimeValue returns the value of the time.Time pointer passed in or
// time.Time{} if the pointer is nil.
func TimeValue(v *time.Time) time.Time {
	if v != nil {
		return *v
	}
	return time.Time{}
}

// TimeUnixMilli returns a Unix timestamp in milliseconds from "January 1, 1970 UTC".
// The result is undefined if the Unix time cannot be represented by an int64.
// Which includes calling TimeUnixMilli on a zero Time is undefined.
//
// This utility is useful for service API's such as CloudWatch Logs which require
// their unix time values to be in milliseconds.
//
// See Go stdlib https://golang.org/pkg/time/#Time.UnixNano for more information.
func TimeUnixMilli(t time.Time) int64 {
	return t.UnixNano() / int64(time.Millisecond/time.Nanosecond)
}

// TimeSlice converts a slice of time.Time values into a slice of
// time.Time pointers
func TimeSlice(src []time.Time) []*time.Time {
	dst := make([]*time.Time, len(src))
	for i := 0; i < len(src); i++ {
		dst[i] = &(src[i])
	}
	return dst
}

// TimeValueSlice converts a slice of time.Time pointers into a slice of
// time.Time values
func TimeValueSlice(src []*time.Time) []time.Time {
	dst := make([]time.Time, len(src))
	for i := 0; i < len(src); i++ {
		if src[i] != nil {
			dst[i] = *(src[i])
		}
	}
	return dst
}

// TimeMap converts a string map of time.Time values into a string
// map of time.Time pointers
func TimeMap(src map[string]time.Time) map[string]*time.Time {
	dst := make(map[string]*time.Time)
	for k, val := range src {
		v := val
		dst[k] = &v
	}
	return dst
}

// TimeValueMap converts a string map of time.Time pointers into a string
// map of time.Time values
func TimeValueMap(src map[string]*time.Time) map[string]time.Time {
	dst := make(map[string]time.Time)
	for k, val := range src {
		if val != nil {
			dst[k] = *val
		}
	}
	return dst
}


================================================
FILE: vendor/github.com/aws/aws-sdk-go/aws/corehandlers/handlers.go
================================================
package corehandlers

import (
	"bytes"
	"fmt"
	"io"
	"io/ioutil"
	"net/http"
	"net/url"
	"regexp"
	"runtime"
	"strconv"

	"github.com/aws/aws-sdk-go/aws"
	"github.com/aws/aws-sdk-go/aws/awserr"
	"github.com/aws/aws-sdk-go/aws/request"
)

// Interface for matching types which also have a Len method.
type lener interface {
	Len() int
}

// BuildContentLengthHandler builds the content length of a request based on the body,
// or will use the HTTPRequest.Header's "Content-Length" if defined. If unable
// to determine request body length and no "Content-Length" was specified it will panic.
//
// The Content-Length will only be aded to the request if the length of the body
// is greater than 0. If the body is empty or the current `Content-Length`
// header is <= 0, the header will also be stripped.
var BuildContentLengthHandler = request.NamedHandler{Name: "core.BuildContentLengthHandler", Fn: func(r *request.Request) {
	var length int64

	if slength := r.HTTPRequest.Header.Get("Content-Length"); slength != "" {
		length, _ = strconv.ParseInt(slength, 10, 64)
	} else {
		switch body := r.Body.(type) {
		case nil:
			length = 0
		case lener:
			length = int64(body.Len())
		case io.Seeker:
			r.BodyStart, _ = body.Seek(0, 1)
			end, _ := body.Seek(0, 2)
			body.Seek(r.BodyStart, 0) // make sure to seek back to original location
			length = end - r.BodyStart
		default:
			panic("Cannot get length of body, must provide `ContentLength`")
		}
	}

	if length > 0 {
		r.HTTPRequest.ContentLength = length
		r.HTTPRequest.Header.Set("Content-Length", fmt.Sprintf("%d", length))
	} else {
		r.HTTPRequest.ContentLength = 0
		r.HTTPRequest.Header.Del("Content-Length")
	}
}}

// SDKVersionUserAgentHandler is a request handler for adding the SDK Version to the user agent.
var SDKVersionUserAgentHandler = request.NamedHandler{
	Name: "core.SDKVersionUserAgentHandler",
	Fn: request.MakeAddToUserAgentHandler(aws.SDKName, aws.SDKVersion,
		runtime.Version(), runtime.GOOS, runtime.GOARCH),
}

var reStatusCode = regexp.MustCompile(`^(\d{3})`)

// SendHandler is a request handler to send service request using HTTP client.
var SendHandler = request.NamedHandler{Name: "core.SendHandler", Fn: func(r *request.Request) {
	var err error
	r.HTTPResponse, err = r.Config.HTTPClient.Do(r.HTTPRequest)
	if err != nil {
		// Prevent leaking if an HTTPResponse was returned. Clean up
		// the body.
		if r.HTTPResponse != nil {
			r.HTTPResponse.Body.Close()
		}
		// Capture the case where url.Error is returned for error processing
		// response. e.g. 301 without location header comes back as string
		// error and r.HTTPResponse is nil. Other url redirect errors will
		// comeback in a similar method.
		if e, ok := err.(*url.Error); ok && e.Err != nil {
			if s := reStatusCode.FindStringSubmatch(e.Err.Error()); s != nil {
				code, _ := strconv.ParseInt(s[1], 10, 64)
				r.HTTPResponse = &http.Response{
					StatusCode: int(code),
					Status:     http.StatusText(int(code)),
					Body:       ioutil.NopCloser(bytes.NewReader([]byte{})),
				}
				return
			}
		}
		if r.HTTPResponse == nil {
			// Add a dummy request response object to ensure the HTTPResponse
			// value is consistent.
			r.HTTPResponse = &http.Response{
				StatusCode: int(0),
				Status:     http.StatusText(int(0)),
				Body:       ioutil.NopCloser(bytes.NewReader([]byte{})),
			}
		}
		// Catch all other request errors.
		r.Error = awserr.New("RequestError", "send request failed", err)
		r.Retryable = aws.Bool(true) // network errors are retryable
	}
}}

// ValidateResponseHandler is a request handler to validate service response.
var ValidateResponseHandler = request.NamedHandler{Name: "core.ValidateResponseHandler", Fn: func(r *request.Request) {
	if r.HTTPResponse.StatusCode == 0 || r.HTTPResponse.StatusCode >= 300 {
		// this may be replaced by an UnmarshalError handler
		r.Error = awserr.New("UnknownError", "unknown error", nil)
	}
}}

// AfterRetryHandler performs final checks to determine if the request should
// be retried and how long to delay.
var AfterRetryHandler = request.NamedHandler{Name: "core.AfterRetryHandler", Fn: func(r *request.Request) {
	// If one of the other handlers already set the retry state
	// we don't want to override it based on the service's state
	if r.Retryable == nil {
		r.Retryable = aws.Bool(r.ShouldRetry(r))
	}

	if r.WillRetry() {
		r.RetryDelay = r.RetryRules(r)
		r.Config.SleepDelay(r.RetryDelay)

		// when the expired token exception occurs the credentials
		// need to be expired locally so that the next request to
		// get credentials will trigger a credentials refresh.
		if r.IsErrorExpired() {
			r.Config.Credentials.Expire()
		}

		r.RetryCount++
		r.Error = nil
	}
}}

// ValidateEndpointHandler is a request handler to validate a request had the
// appropriate Region and Endpoint set. Will set r.Error if the endpoint or
// region is not valid.
var ValidateEndpointHandler = request.NamedHandler{Name: "core.ValidateEndpointHandler", Fn: func(r *request.Request) {
	if r.ClientInfo.SigningRegion == "" && aws.StringValue(r.Config.Region) == "" {
		r.Error = aws.ErrMissingRegion
	} else if r.ClientInfo.Endpoint == "" {
		r.Error = aws.ErrMissingEndpoint
	}
}}


================================================
FILE: vendor/github.com/aws/aws-sdk-go/aws/corehandlers/param_validator.go
================================================
package corehandlers

import "github.com/aws/aws-sdk-go/aws/request"

// ValidateParametersHandler is a request handler to validate the input parameters.
// Validating parameters only has meaning if done prior to the request being sent.
var ValidateParametersHandler = request.NamedHandler{Name: "core.ValidateParametersHandler", Fn: func(r *request.Request) {
	if !r.ParamsFilled() {
		return
	}

	if v, ok := r.Params.(request.Validator); ok {
		if err := v.Validate(); err != nil {
			r.Error = err
		}
	}
}}


================================================
FILE: vendor/github.com/aws/aws-sdk-go/aws/credentials/chain_provider.go
================================================
package credentials

import (
	"github.com/aws/aws-sdk-go/aws/awserr"
)

var (
	// ErrNoValidProvidersFoundInChain Is returned when there are no valid
	// providers in the ChainProvider.
	//
	// This has been deprecated. For verbose error messaging set
	// aws.Config.CredentialsChainVerboseErrors to true
	//
	// @readonly
	ErrNoValidProvidersFoundInChain = awserr.New("NoCredentialProviders",
		`no valid providers in chain. Deprecated. 
	For verbose messaging see aws.Config.CredentialsChainVerboseErrors`,
		nil)
)

// A ChainProvider will search for a provider which returns credentials
// and cache that provider until Retrieve is called again.
//
// The ChainProvider provides a way of chaining multiple providers together
// which will pick the first available using priority order of the Providers
// in the list.
//
// If none of the Providers retrieve valid credentials Value, ChainProvider's
// Retrieve() will return the error ErrNoValidProvidersFoundInChain.
//
// If a Provider is found which returns valid credentials Value ChainProvider
// will cache that Provider for all calls to IsExpired(), until Retrieve is
// called again.
//
// Example of ChainProvider to be used with an EnvProvider and EC2RoleProvider.
// In this example EnvProvider will first check if any credentials are available
// vai the environment variables. If there are none ChainProvider will check
// the next Provider in the list, EC2RoleProvider in this case. If EC2RoleProvider
// does not return any credentials ChainProvider will return the error
// ErrNoValidProvidersFoundInChain
//
//     creds := NewChainCredentials(
//         []Provider{
//             &EnvProvider{},
//             &EC2RoleProvider{
//                 Client: ec2metadata.New(sess),
//             },
//         })
//
//     // Usage of ChainCredentials with aws.Config
//     svc := ec2.New(&aws.Config{Credentials: creds})
//
type ChainProvider struct {
	Providers     []Provider
	curr          Provider
	VerboseErrors bool
}

// NewChainCredentials returns a pointer to a new Credentials object
// wrapping a chain of providers.
func NewChainCredentials(providers []Provider) *Credentials {
	return NewCredentials(&ChainProvider{
		Providers: append([]Provider{}, providers...),
	})
}

// Retrieve returns the credentials value or error if no provider returned
// without error.
//
// If a provider is found it will be cached and any calls to IsExpired()
// will return the expired state of the cached provider.
func (c *ChainProvider) Retrieve() (Value, error) {
	var errs []error
	for _, p := range c.Providers {
		creds, err := p.Retrieve()
		if err == nil {
			c.curr = p
			return creds, nil
		}
		errs = append(errs, err)
	}
	c.curr = nil

	var err error
	err = ErrNoValidProvidersFoundInChain
	if c.VerboseErrors {
		err = awserr.NewBatchError("NoCredentialProviders", "no valid providers in chain", errs)
	}
	return Value{}, err
}

// IsExpired will returned the expired state of the currently cached provider
// if there is one.  If there is no current provider, true will be returned.
func (c *ChainProvider) IsExpired() bool {
	if c.curr != nil {
		return c.curr.IsExpired()
	}

	return true
}


================================================
FILE: vendor/github.com/aws/aws-sdk-go/aws/credentials/credentials.go
================================================
// Package credentials provides credential retrieval and management
//
// The Credentials is the primary method of getting access to and managing
// credentials Values. Using dependency injection retrieval of the credential
// values is handled by a object which satisfies the Provider interface.
//
// By default the Credentials.Get() will cache the successful result of a
// Provider's Retrieve() until Provider.IsExpired() returns true. At which
// point Credentials will call Provider's Retrieve() to get new credential Value.
//
// The Provider is responsible for determining when credentials Value have expired.
// It is also important to note that Credentials will always call Retrieve the
// first time Credentials.Get() is called.
//
// Example of using the environment variable credentials.
//
//     creds := NewEnvCredentials()
//
//     // Retrieve the credentials value
//     credValue, err := creds.Get()
//     if err != nil {
//         // handle error
//     }
//
// Example of forcing credentials to expire and be refreshed on the next Get().
// This may be helpful to proactively expire credentials and refresh them sooner
// than they would naturally expire on their own.
//
//     creds := NewCredentials(&EC2RoleProvider{})
//     creds.Expire()
//     credsValue, err := creds.Get()
//     // New credentials will be retrieved instead of from cache.
//
//
// Custom Provider
//
// Each Provider built into this package also provides a helper method to generate
// a Credentials pointer setup with the provider. To use a custom Provider just
// create a type which satisfies the Provider interface and pass it to the
// NewCredentials method.
//
//     type MyProvider struct{}
//     func (m *MyProvider) Retrieve() (Value, error) {...}
//     func (m *MyProvider) IsExpired() bool {...}
//
//     creds := NewCredentials(&MyProvider{})
//     credValue, err := creds.Get()
//
package credentials

import (
	"sync"
	"time"
)

// AnonymousCredentials is an empty Credential object that can be used as
// dummy placeholder credentials for requests that do not need signed.
//
// This Credentials can be used to configure a service to not sign requests
// when making service API calls. For example, when accessing public
// s3 buckets.
//
//     svc := s3.New(&aws.Config{Credentials: AnonymousCredentials})
//     // Access public S3 buckets.
//
// @readonly
var AnonymousCredentials = NewStaticCredentials("", "", "")

// A Value is the AWS credentials value for individual credential fields.
type Value struct {
	// AWS Access key ID
	AccessKeyID string

	// AWS Secret Access Key
	SecretAccessKey string

	// AWS Session Token
	SessionToken string

	// Provider used to get credentials
	ProviderName string
}

// A Provider is the interface for any component which will provide credentials
// Value. A provider is required to manage its own Expired state, and what to
// be expired means.
//
// The Provider should not need to implement its own mutexes, because
// that will be managed by Credentials.
type Provider interface {
	// Refresh returns nil if it successfully retrieved the value.
	// Error is returned if the value were not obtainable, or empty.
	Retrieve() (Value, error)

	// IsExpired returns if the credentials are no longer valid, and need
	// to be retrieved.
	IsExpired() bool
}

// A Expiry provides shared expiration logic to be used by credentials
// providers to implement expiry functionality.
//
// The best method to use this struct is as an anonymous field within the
// provider's struct.
//
// Example:
//     type EC2RoleProvider struct {
//         Expiry
//         ...
//     }
type Expiry struct {
	// The date/time when to expire on
	expiration time.Time

	// If set will be used by IsExpired to determine the current time.
	// Defaults to time.Now if CurrentTime is not set.  Available for testing
	// to be able to mock out the current time.
	CurrentTime func() time.Time
}

// SetExpiration sets the expiration IsExpired will check when called.
//
// If window is greater than 0 the expiration time will be reduced by the
// window value.
//
// Using a window is helpful to trigger credentials to expire sooner than
// the expiration time given to ensure no requests are made with expired
// tokens.
func (e *Expiry) SetExpiration(expiration time.Time, window time.Duration) {
	e.expiration = expiration
	if window > 0 {
		e.expiration = e.expiration.Add(-window)
	}
}

// IsExpired returns if the credentials are expired.
func (e *Expiry) IsExpired() bool {
	if e.CurrentTime == nil {
		e.CurrentTime = time.Now
	}
	return e.expiration.Before(e.CurrentTime())
}

// A Credentials provides synchronous safe retrieval of AWS credentials Value.
// Credentials will cache the credentials value until they expire. Once the value
// expires the next Get will attempt to retrieve valid credentials.
//
// Credentials is safe to use across multiple goroutines and will manage the
// synchronous state so the Providers do not need to implement their own
// synchronization.
//
// The first Credentials.Get() will always call Provider.Retrieve() to get the
// first instance of the credentials Value. All calls to Get() after that
// will return the cached credentials Value until IsExpired() returns true.
type Credentials struct {
	creds        Value
	forceRefresh bool
	m            sync.Mutex

	provider Provider
}

// NewCredentials returns a pointer to a new Credentials with the provider set.
func NewCredentials(provider Provider) *Credentials {
	return &Credentials{
		provider:     provider,
		forceRefresh: true,
	}
}

// Get returns the credentials value, or error if the credentials Value failed
// to be retrieved.
//
// Will return the cached credentials Value if it has not expired. If the
// credentials Value has expired the Provider's Retrieve() will be called
// to refresh the credentials.
//
// If Credentials.Expire() was called the credentials Value will be force
// expired, and the next call to Get() will cause them to be refreshed.
func (c *Credentials) Get() (Value, error) {
	c.m.Lock()
	defer c.m.Unlock()

	if c.isExpired() {
		creds, err := c.provider.Retrieve()
		if err != nil {
			return Value{}, err
		}
		c.creds = creds
		c.forceRefresh = false
	}

	return c.creds, nil
}

// Expire expires the credentials and forces them to be retrieved on the
// next call to Get().
//
// This will override the Provider's expired state, and force Credentials
// to call the Provider's Retrieve().
func (c *Credentials) Expire() {
	c.m.Lock()
	defer c.m.Unlock()

	c.forceRefresh = true
}

// IsExpired returns if the credentials are no longer valid, and need
// to be retrieved.
//
// If the Credentials were forced to be expired with Expire() this will
// reflect that override.
func (c *Credentials) IsExpired() bool {
	c.m.Lock()
	defer c.m.Unlock()

	return c.isExpired()
}

// isExpired helper method wrapping the definition of expired credentials.
func (c *Credentials) isExpired() bool {
	return c.forceRefresh || c.provider.IsExpired()
}


================================================
FILE: vendor/github.com/aws/aws-sdk-go/aws/credentials/ec2rolecreds/ec2_role_provider.go
================================================
package ec2rolecreds

import (
	"bufio"
	"encoding/json"
	"fmt"
	"path"
	"strings"
	"time"

	"github.com/aws/aws-sdk-go/aws/awserr"
	"github.com/aws/aws-sdk-go/aws/client"
	"github.com/aws/aws-sdk-go/aws/credentials"
	"github.com/aws/aws-sdk-go/aws/ec2metadata"
)

// ProviderName provides a name of EC2Role provider
const ProviderName = "EC2RoleProvider"

// A EC2RoleProvider retrieves credentials from the EC2 service, and keeps track if
// those credentials are expired.
//
// Example how to configure the EC2RoleProvider with custom http Client, Endpoint
// or ExpiryWindow
//
//     p := &ec2rolecreds.EC2RoleProvider{
//         // Pass in a custom timeout to be used when requesting
//         // IAM EC2 Role credentials.
//         Client: ec2metadata.New(sess, aws.Config{
//             HTTPClient: &http.Client{Timeout: 10 * time.Second},
//         }),
//
//         // Do not use early expiry of credentials. If a non zero value is
//         // specified the credentials will be expired early
//         ExpiryWindow: 0,
//     }
type EC2RoleProvider struct {
	credentials.Expiry

	// Required EC2Metadata client to use when connecting to EC2 metadata service.
	Client *ec2metadata.EC2Metadata

	// ExpiryWindow will allow the credentials to trigger refreshing prior to
	// the credentials actually expiring. This is beneficial so race conditions
	// with expiring credentials do not cause request to fail unexpectedly
	// due to ExpiredTokenException exceptions.
	//
	// So a ExpiryWindow of 10s would cause calls to IsExpired() to return true
	// 10 seconds before the credentials are actually expired.
	//
	// If ExpiryWindow is 0 or less it will be ignored.
	ExpiryWindow time.Duration
}

// NewCredentials returns a pointer to a new Credentials object wrapping
// the EC2RoleProvider. Takes a ConfigProvider to create a EC2Metadata client.
// The ConfigProvider is satisfied by the session.Session type.
func NewCredentials(c client.ConfigProvider, options ...func(*EC2RoleProvider)) *credentials.Credentials {
	p := &EC2RoleProvider{
		Client: ec2metadata.New(c),
	}

	for _, option := range options {
		option(p)
	}

	return credentials.NewCredentials(p)
}

// NewCredentialsWithClient returns a pointer to a new Credentials object wrapping
// the EC2RoleProvider. Takes a EC2Metadata client to use when connecting to EC2
// metadata service.
func NewCredentialsWithClient(client *ec2metadata.EC2Metadata, options ...func(*EC2RoleProvider)) *credentials.Credentials {
	p := &EC2RoleProvider{
		Client: client,
	}

	for _, option := range options {
		option(p)
	}

	return credentials.NewCredentials(p)
}

// Retrieve retrieves credentials from the EC2 service.
// Error will be returned if the request fails, or unable to extract
// the desired credentials.
func (m *EC2RoleProvider) Retrieve() (credentials.Value, error) {
	credsList, err := requestCredList(m.Client)
	if err != nil {
		return credentials.Value{ProviderName: ProviderName}, err
	}

	if len(credsList) == 0 {
		return credentials.Value{ProviderName: ProviderName}, awserr.New("EmptyEC2RoleList", "empty EC2 Role list", nil)
	}
	credsName := credsList[0]

	roleCreds, err := requestCred(m.Client, credsName)
	if err != nil {
		return credentials.Value{ProviderName: ProviderName}, err
	}

	m.SetExpiration(roleCreds.Expiration, m.ExpiryWindow)

	return credentials.Value{
		AccessKeyID:     roleCreds.AccessKeyID,
		SecretAccessKey: roleCreds.SecretAccessKey,
		SessionToken:    roleCreds.Token,
		ProviderName:    ProviderName,
	}, nil
}

// A ec2RoleCredRespBody provides the shape for unmarshalling credential
// request responses.
type ec2RoleCredRespBody struct {
	// Success State
	Expiration      time.Time
	AccessKeyID     string
	SecretAccessKey string
	Token           string

	// Error state
	Code    string
	Message string
}

const iamSecurityCredsPath = "/iam/security-credentials"

// requestCredList requests a list of credentials from the EC2 service.
// If there are no credentials, or there is an error making or receiving the request
func requestCredList(client *ec2metadata.EC2Metadata) ([]string, error) {
	resp, err := client.GetMetadata(iamSecurityCredsPath)
	if err != nil {
		return nil, awserr.New("EC2RoleRequestError", "no EC2 instance role found", err)
	}

	credsList := []string{}
	s := bufio.NewScanner(strings.NewReader(resp))
	for s.Scan() {
		credsList = append(credsList, s.Text())
	}

	if err := s.Err(); err != nil {
		return nil, awserr.New("SerializationError", "failed to read EC2 instance role from metadata service", err)
	}

	return credsList, nil
}

// requestCred requests the credentials for a specific credentials from the EC2 service.
//
// If the credentials cannot be found, or there is an error reading the response
// and error will be returned.
func requestCred(client *ec2metadata.EC2Metadata, credsName string) (ec2RoleCredRespBody, error) {
	resp, err := client.GetMetadata(path.Join(iamSecurityCredsPath, credsName))
	if err != nil {
		return ec2RoleCredRespBody{},
			awserr.New("EC2RoleRequestError",
				fmt.Sprintf("failed to get %s EC2 instance role credentials", credsName),
				err)
	}

	respCreds := ec2RoleCredRespBody{}
	if err := json.NewDecoder(strings.NewReader(resp)).Decode(&respCreds); err != nil {
		return ec2RoleCredRespBody{},
			awserr.New("SerializationError",
				fmt.Sprintf("failed to decode %s EC2 instance role credentials", credsName),
				err)
	}

	if respCreds.Code != "Success" {
		// If an error code was returned something failed requesting the role.
		return ec2RoleCredRespBody{}, awserr.New(respCreds.Code, respCreds.Message, nil)
	}

	return respCreds, nil
}


================================================
FILE: vendor/github.com/aws/aws-sdk-go/aws/credentials/endpointcreds/provider.go
================================================
// Package endpointcreds provides support for retrieving credentials from an
// arbitrary HTTP endpoint.
//
// The credentials endpoint Provider can receive both static and refreshable
// credentials that will expire. Credentials are static when an "Expiration"
// value is not provided in the endpoint's response.
//
// Static credentials will never expire once they have been retrieved. The format
// of the static credentials response:
//    {
//        "AccessKeyId" : "MUA...",
//        "SecretAccessKey" : "/7PC5om....",
//    }
//
// Refreshable credentials will expire within the "ExpiryWindow" of the Expiration
// value in the response. The format of the refreshable credentials response:
//    {
//        "AccessKeyId" : "MUA...",
//        "SecretAccessKey" : "/7PC5om....",
//        "Token" : "AQoDY....=",
//        "Expiration" : "2016-02-25T06:03:31Z"
//    }
//
// Errors should be returned in the following format and only returned with 400
// or 500 HTTP status codes.
//    {
//        "code": "ErrorCode",
//        "message": "Helpful error message."
//    }
package endpointcreds

import (
	"encoding/json"
	"time"

	"github.com/aws/aws-sdk-go/aws"
	"github.com/aws/aws-sdk-go/aws/awserr"
	"github.com/aws/aws-sdk-go/aws/client"
	"github.com/aws/aws-sdk-go/aws/client/metadata"
	"github.com/aws/aws-sdk-go/aws/credentials"
	"github.com/aws/aws-sdk-go/aws/request"
)

// ProviderName is the name of the credentials provider.
const ProviderName = `CredentialsEndpointProvider`

// Provider satisfies the credentials.Provider interface, and is a client to
// retrieve credentials from an arbitrary endpoint.
type Provider struct {
	staticCreds bool
	credentials.Expiry

	// Requires a AWS Client to make HTTP requests to the endpoint with.
	// the Endpoint the request will be made to is provided by the aws.Config's
	// Endpoint value.
	Client *client.Client

	// ExpiryWindow will allow the credentials to trigger refreshing prior to
	// the credentials actually expiring. This is beneficial so race conditions
	// with expiring credentials do not cause request to fail unexpectedly
	// due to ExpiredTokenException exceptions.
	//
	// So a ExpiryWindow of 10s would cause calls to IsExpired() to return true
	// 10 seconds before the credentials are actually expired.
	//
	// If ExpiryWindow is 0 or less it will be ignored.
	ExpiryWindow time.Duration
}

// NewProviderClient returns a credentials Provider for retrieving AWS credentials
// from arbitrary endpoint.
func NewProviderClient(cfg aws.Config, handlers request.Handlers, endpoint string, options ...func(*Provider)) credentials.Provider {
	p := &Provider{
		Client: client.New(
			cfg,
			metadata.ClientInfo{
				ServiceName: "CredentialsEndpoint",
				Endpoint:    endpoint,
			},
			handlers,
		),
	}

	p.Client.Handlers.Unmarshal.PushBack(unmarshalHandler)
	p.Client.Handlers.UnmarshalError.PushBack(unmarshalError)
	p.Client.Handlers.Validate.Clear()
	p.Client.Handlers.Validate.PushBack(validateEndpointHandler)

	for _, option := range options {
		option(p)
	}

	return p
}

// NewCredentialsClient returns a Credentials wrapper for retrieving credentials
// from an arbitrary endpoint concurrently. The client will request the
func NewCredentialsClient(cfg aws.Config, handlers request.Handlers, endpoint string, options ...func(*Provider)) *credentials.Credentials {
	return credentials.NewCredentials(NewProviderClient(cfg, handlers, endpoint, options...))
}

// IsExpired returns true if the credentials retrieved are expired, or not yet
// retrieved.
func (p *Provider) IsExpired() bool {
	if p.staticCreds {
		return false
	}
	return p.Expiry.IsExpired()
}

// Retrieve will attempt to request the credentials from the endpoint the Provider
// was configured for. And error will be returned if the retrieval fails.
func (p *Provider) Retrieve() (credentials.Value, error) {
	resp, err := p.getCredentials()
	if err != nil {
		return credentials.Value{ProviderName: ProviderName},
			awserr.New("CredentialsEndpointError", "failed to load credentials", err)
	}

	if resp.Expiration != nil {
		p.SetExpiration(*resp.Expiration, p.ExpiryWindow)
	} else {
		p.staticCreds = true
	}

	return credentials.Value{
		AccessKeyID:     resp.AccessKeyID,
		SecretAccessKey: resp.SecretAccessKey,
		SessionToken:    resp.Token,
		ProviderName:    ProviderName,
	}, nil
}

type getCredentialsOutput struct {
	Expiration      *time.Time
	AccessKeyID     string
	SecretAccessKey string
	Token           string
}

type errorOutput struct {
	Code    string `json:"code"`
	Message string `json:"message"`
}

func (p *Provider) getCredentials() (*getCredentialsOutput, error) {
	op := &request.Operation{
		Name:       "GetCredentials",
		HTTPMethod: "GET",
	}

	out := &getCredentialsOutput{}
	req := p.Client.NewRequest(op, nil, out)
	req.HTTPRequest.Header.Set("Accept", "application/json")

	return out, req.Send()
}

func validateEndpointHandler(r *request.Request) {
	if len(r.ClientInfo.Endpoint) == 0 {
		r.Error = aws.ErrMissingEndpoint
	}
}

func unmarshalHandler(r *request.Request) {
	defer r.HTTPResponse.Body.Close()

	out := r.Data.(*getCredentialsOutput)
	if err := json.NewDecoder(r.HTTPResponse.Body).Decode(&out); err != nil {
		r.Error = awserr.New("SerializationError",
			"failed to decode endpoint credentials",
			err,
		)
	}
}

func unmarshalError(r *request.Request) {
	defer r.HTTPResponse.Body.Close()

	var errOut errorOutput
	if err := json.NewDecoder(r.HTTPResponse.Body).Decode(&errOut); err != nil {
		r.Error = awserr.New("SerializationError",
			"failed to decode endpoint credentials",
			err,
		)
	}

	// Response body format is not consistent between metadata endpoints.
	// Grab the error message as a string and include that as the source error
	r.Error = awserr.New(errOut.Code, errOut.Message, nil)
}


================================================
FILE: vendor/github.com/aws/aws-sdk-go/aws/credentials/env_provider.go
================================================
package credentials

import (
	"os"

	"github.com/aws/aws-sdk-go/aws/awserr"
)

// EnvProviderName provides a name of Env provider
const EnvProviderName = "EnvProvider"

var (
	// ErrAccessKeyIDNotFound is returned when the AWS Access Key ID can't be
	// found in the process's environment.
	//
	// @readonly
	ErrAccessKeyIDNotFound = awserr.New("EnvAccessKeyNotFound", "AWS_ACCESS_KEY_ID or AWS_ACCESS_KEY not found in environment", nil)

	// ErrSecretAccessKeyNotFound is returned when the AWS Secret Access Key
	// can't be found in the process's environment.
	//
	// @readonly
	ErrSecretAccessKeyNotFound = awserr.New("EnvSecretNotFound", "AWS_SECRET_ACCESS_KEY or AWS_SECRET_KEY not found in environment", nil)
)

// A EnvProvider retrieves credentials from the environment variables of the
// running process. Environment credentials never expire.
//
// Environment variables used:
//
// * Access Key ID:     AWS_ACCESS_KEY_ID or AWS_ACCESS_KEY
// * Secret Access Key: AWS_SECRET_ACCESS_KEY or AWS_SECRET_KEY
type EnvProvider struct {
	retrieved bool
}

// NewEnvCredentials returns a pointer to a new Credentials object
// wrapping the environment variable provider.
func NewEnvCredentials() *Credentials {
	return NewCredentials(&EnvProvider{})
}

// Retrieve retrieves the keys from the environment.
func (e *EnvProvider) Retrieve() (Value, error) {
	e.retrieved = false

	id := os.Getenv("AWS_ACCESS_KEY_ID")
	if id == "" {
		id = os.Getenv("AWS_ACCESS_KEY")
	}

	secret := os.Getenv("AWS_SECRET_ACCESS_KEY")
	if secret == "" {
		secret = os.Getenv("AWS_SECRET_KEY")
	}

	if id == "" {
		return Value{ProviderName: EnvProviderName}, ErrAccessKeyIDNotFound
	}

	if secret == "" {
		return Value{ProviderName: EnvProviderName}, ErrSecretAccessKeyNotFound
	}

	e.retrieved = true
	return Value{
		AccessKeyID:     id,
		SecretAccessKey: secret,
		SessionToken:    os.Getenv("AWS_SESSION_TOKEN"),
		ProviderName:    EnvProviderName,
	}, nil
}

// IsExpired returns if the credentials have been retrieved.
func (e *EnvProvider) IsExpired() bool {
	return !e.retrieved
}


================================================
FILE: vendor/github.com/aws/aws-sdk-go/aws/credentials/example.ini
================================================
[default]
aws_access_key_id = accessKey
aws_secret_access_key = secret
aws_session_token = token

[no_token]
aws_access_key_id = accessKey
aws_secret_access_key = secret

[with_colon]
aws_access_key_id: accessKey
aws_secret_access_key: secret


================================================
FILE: vendor/github.com/aws/aws-sdk-go/aws/credentials/shared_credentials_provider.go
================================================
package credentials

import (
	"fmt"
	"os"
	"path/filepath"

	"github.com/go-ini/ini"

	"github.com/aws/aws-sdk-go/aws/awserr"
)

// SharedCredsProviderName provides a name of SharedCreds provider
const SharedCredsProviderName = "SharedCredentialsProvider"

var (
	// ErrSharedCredentialsHomeNotFound is emitted when the user directory cannot be found.
	//
	// @readonly
	ErrSharedCredentialsHomeNotFound = awserr.New("UserHomeNotFound", "user home directory not found.", nil)
)

// A SharedCredentialsProvider retrieves credentials from the current user's home
// directory, and keeps track if those credentials are expired.
//
// Profile ini file example: $HOME/.aws/credentials
type SharedCredentialsProvider struct {
	// Path to the shared credentials file.
	//
	// If empty will look for "AWS_SHARED_CREDENTIALS_FILE" env variable. If the
	// env value is empty will default to current user's home directory.
	// Linux/OSX: "$HOME/.aws/credentials"
	// Windows:   "%USERPROFILE%\.aws\credentials"
	Filename string

	// AWS Profile to extract credentials from the shared credentials file. If empty
	// will default to environment variable "AWS_PROFILE" or "default" if
	// environment variable is also not set.
	Profile string

	// retrieved states if the credentials have been successfully retrieved.
	retrieved bool
}

// NewSharedCredentials returns a pointer to a new Credentials object
// wrapping the Profile file provider.
func NewSharedCredentials(filename, profile string) *Credentials {
	return NewCredentials(&SharedCredentialsProvider{
		Filename: filename,
		Profile:  profile,
	})
}

// Retrieve reads and extracts the shared credentials from the current
// users home directory.
func (p *SharedCredentialsProvider) Retrieve() (Value, error) {
	p.retrieved = false

	filename, err := p.filename()
	if err != nil {
		return Value{ProviderName: SharedCredsProviderName}, err
	}

	creds, err := loadProfile(filename, p.profile())
	if err != nil {
		return Value{ProviderName: SharedCredsProviderName}, err
	}

	p.retrieved = true
	return creds, nil
}

// IsExpired returns if the shared credentials have expired.
func (p *SharedCredentialsProvider) IsExpired() bool {
	return !p.retrieved
}

// loadProfiles loads from the file pointed to by shared credentials filename for profile.
// The credentials retrieved from the profile will be returned or error. Error will be
// returned if it fails to read from the file, or the data is invalid.
func loadProfile(filename, profile string) (Value, error) {
	config, err := ini.Load(filename)
	if err != nil {
		return Value{ProviderName: SharedCredsProviderName}, awserr.New("SharedCredsLoad", "failed to load shared credentials file", err)
	}
	iniProfile, err := config.GetSection(profile)
	if err != nil {
		return Value{ProviderName: SharedCredsProviderName}, awserr.New("SharedCredsLoad", "failed to get profile", err)
	}

	id, err := iniProfile.GetKey("aws_access_key_id")
	if err != nil {
		return Value{ProviderName: SharedCredsProviderName}, awserr.New("SharedCredsAccessKey",
			fmt.Sprintf("shared credentials %s in %s did not contain aws_access_key_id", profile, filename),
			err)
	}

	secret, err := iniProfile.GetKey("aws_secret_access_key")
	if err != nil {
		return Value{ProviderName: SharedCredsProviderName}, awserr.New("SharedCredsSecret",
			fmt.Sprintf("shared credentials %s in %s did not contain aws_secret_access_key", profile, filename),
			nil)
	}

	// Default to empty string if not found
	token := iniProfile.Key("aws_session_token")

	return Value{
		AccessKeyID:     id.String(),
		SecretAccessKey: secret.String(),
		SessionToken:    token.String(),
		ProviderName:    SharedCredsProviderName,
	}, nil
}

// filename returns the filename to use to read AWS shared credentials.
//
// Will return an error if the user's home directory path cannot be found.
func (p *SharedCredentialsProvider) filename() (string, error) {
	if p.Filename == "" {
		if p.Filename = os.Getenv("AWS_SHARED_CREDENTIALS_FILE"); p.Filename != "" {
			return p.Filename, nil
		}

		homeDir := os.Getenv("HOME") // *nix
		if homeDir == "" {           // Windows
			homeDir = os.Getenv("USERPROFILE")
		}
		if homeDir == "" {
			return "", ErrSharedCredentialsHomeNotFound
		}

		p.Filename = filepath.Join(homeDir, ".aws", "credentials")
	}

	return p.Filename, nil
}

// profile returns the AWS shared credentials profile.  If empty will read
// environment variable "AWS_PROFILE". If that is not set profile will
// return "default".
func (p *SharedCredentialsProvider) profile() string {
	if p.Profile == "" {
		p.Profile = os.Getenv("AWS_PROFILE")
	}
	if p.Profile == "" {
		p.Profile = "default"
	}

	return p.Profile
}


================================================
FILE: vendor/github.com/aws/aws-sdk-go/aws/credentials/static_provider.go
================================================
package credentials

import (
	"github.com/aws/aws-sdk-go/aws/awserr"
)

// StaticProviderName provides a name of Static provider
const StaticProviderName = "StaticProvider"

var (
	// ErrStaticCredentialsEmpty is emitted when static credentials are empty.
	//
	// @readonly
	ErrStaticCredentialsEmpty = awserr.New("EmptyStaticCreds", "static credentials are empty", nil)
)

// A StaticProvider is a set of credentials which are set programmatically,
// and will never expire.
type StaticProvider struct {
	Value
}

// NewStaticCredentials returns a pointer to a new Credentials object
// wrapping a static credentials value provider.
func NewStaticCredentials(id, secret, token string) *Credentials {
	return NewCredentials(&StaticProvider{Value: Value{
		AccessKeyID:     id,
		SecretAccessKey: secret,
		SessionToken:    token,
	}})
}

// NewStaticCredentialsFromCreds returns a pointer to a new Credentials object
// wrapping the static credentials value provide. Same as NewStaticCredentials
// but takes the creds Value instead of individual fields
func NewStaticCredentialsFromCreds(creds Value) *Credentials {
	return NewCredentials(&StaticProvider{Value: creds})
}

// Retrieve returns the credentials or error if the credentials are invalid.
func (s *StaticProvider) Retrieve() (Value, error) {
	if s.AccessKeyID == "" || s.SecretAccessKey == "" {
		return Value{ProviderName: StaticProviderName}, ErrStaticCredentialsEmpty
	}

	if len(s.Value.ProviderName) == 0 {
		s.Value.ProviderName = StaticProviderName
	}
	return s.Value, nil
}

// IsExpired returns if the credentials are expired.
//
// For StaticProvider, the credentials never expired.
func (s *StaticProvider) IsExpired() bool {
	return false
}


================================================
FILE: vendor/github.com/aws/aws-sdk-go/aws/credentials/stscreds/assume_role_provider.go
================================================
// Package stscreds are credential Providers to retrieve STS AWS credentials.
//
// STS provides multiple ways to retrieve credentials which can be used when making
// future AWS service API operation calls.
package stscreds

import (
	"fmt"
	"time"

	"github.com/aws/aws-sdk-go/aws"
	"github.com/aws/aws-sdk-go/aws/client"
	"github.com/aws/aws-sdk-go/aws/credentials"
	"github.com/aws/aws-sdk-go/service/sts"
)

// ProviderName provides a name of AssumeRole provider
const ProviderName = "AssumeRoleProvider"

// AssumeRoler represents the minimal subset of the STS client API used by this provider.
type AssumeRoler interface {
	AssumeRole(input *sts.AssumeRoleInput) (*sts.AssumeRoleOutput, error)
}

// DefaultDuration is the default amount of time in minutes that the credentials
// will be valid for.
var DefaultDuration = time.Duration(15) * time.Minute

// AssumeRoleProvider retrieves temporary credentials from the STS service, and
// keeps track of their expiration time. This provider must be used explicitly,
// as it is not included in the credentials chain.
type AssumeRoleProvider struct {
	credentials.Expiry

	// STS client to make assume role request with.
	Client AssumeRoler

	// Role to be assumed.
	RoleARN string

	// Session name, if you wish to reuse the credentials elsewhere.
	RoleSessionName string

	// Expiry duration of the STS credentials. Defaults to 15 minutes if not set.
	Duration time.Duration

	// Optional ExternalID to pass along, defaults to nil if not set.
	ExternalID *string

	// The policy plain text must be 2048 bytes or shorter. However, an internal
	// conversion compresses it into a packed binary format with a separate limit.
	// The PackedPolicySize response element indicates by percentage how close to
	// the upper size limit the policy is, with 100% equaling the maximum allowed
	// size.
	Policy *string

	// The identification number of the MFA device that is associated with the user
	// who is making the AssumeRole call. Specify this value if the trust policy
	// of the role being assumed includes a condition that requires MFA authentication.
	// The value is either the serial number for a hardware device (such as GAHT12345678)
	// or an Amazon Resource Name (ARN) for a virtual device (such as arn:aws:iam::123456789012:mfa/user).
	SerialNumber *string

	// The value provided by the MFA device, if the trust policy of the role being
	// assumed requires MFA (that is, if the policy includes a condition that tests
	// for MFA). If the role being assumed requires MFA and if the TokenCode value
	// is missing or expired, the AssumeRole call returns an "access denied" error.
	TokenCode *string

	// ExpiryWindow will allow the credentials to trigger refreshing prior to
	// the credentials actually expiring. This is beneficial so race conditions
	// with expiring credentials do not cause request to fail unexpectedly
	// due to ExpiredTokenException exceptions.
	//
	// So a ExpiryWindow of 10s would cause calls to IsExpired() to return true
	// 10 seconds before the credentials are actually expired.
	//
	// If ExpiryWindow is 0 or less it will be ignored.
	ExpiryWindow time.Duration
}

// NewCredentials returns a pointer to a new Credentials object wrapping the
// AssumeRoleProvider. The credentials will expire every 15 minutes and the
// role will be named after a nanosecond timestamp of this operation.
//
// Takes a Config provider to create the STS client. The ConfigProvider is
// satisfied by the session.Session type.
func NewCredentials(c client.ConfigProvider, roleARN string, options ...func(*AssumeRoleProvider)) *credentials.Credentials {
	p := &AssumeRoleProvider{
		Client:   sts.New(c),
		RoleARN:  roleARN,
		Duration: DefaultDuration,
	}

	for _, option := range options {
		option(p)
	}

	return credentials.NewCredentials(p)
}

// NewCredentialsWithClient returns a pointer to a new Credentials object wrapping the
// AssumeRoleProvider. The credentials will expire every 15 minutes and the
// role will be named after a nanosecond timestamp of this operation.
//
// Takes an AssumeRoler which can be satisfiede by the STS client.
func NewCredentialsWithClient(svc AssumeRoler, roleARN string, options ...func(*AssumeRoleProvider)) *credentials.Credentials {
	p := &AssumeRoleProvider{
		Client:   svc,
		RoleARN:  roleARN,
		Duration: DefaultDuration,
	}

	for _, option := range options {
		option(p)
	}

	return credentials.NewCredentials(p)
}

// Retrieve generates a new set of temporary credentials using STS.
func (p *AssumeRoleProvider) Retrieve() (credentials.Value, error) {

	// Apply defaults where parameters are not set.
	if p.RoleSessionName == "" {
		// Try to work out a role name that will hopefully end up unique.
		p.RoleSessionName = fmt.Sprintf("%d", time.Now().UTC().UnixNano())
	}
	if p.Duration == 0 {
		// Expire as often as AWS permits.
		p.Duration = DefaultDuration
	}
	input := &sts.AssumeRoleInput{
		DurationSeconds: aws.Int64(int64(p.Duration / time.Second)),
		RoleArn:         aws.String(p.RoleARN),
		RoleSessionName: aws.String(p.RoleSessionName),
		ExternalId:      p.ExternalID,
	}
	if p.Policy != nil {
		input.Policy = p.Policy
	}
	if p.SerialNumber != nil && p.TokenCode != nil {
		input.SerialNumber = p.SerialNumber
		input.TokenCode = p.TokenCode
	}
	roleOutput, err := p.Client.AssumeRole(input)

	if err != nil {
		return credentials.Value{ProviderName: ProviderName}, err
	}

	// We will proactively generate new credentials before they expire.
	p.SetExpiration(*roleOutput.Credentials.Expiration, p.ExpiryWindow)

	return credentials.Value{
		AccessKeyID:     *roleOutput.Credentials.AccessKeyId,
		SecretAccessKey: *roleOutput.Credentials.SecretAccessKey,
		SessionToken:    *roleOutput.Credentials.SessionToken,
		ProviderName:    ProviderName,
	}, nil
}


================================================
FILE: vendor/github.com/aws/aws-sdk-go/aws/defaults/defaults.go
================================================
// Package defaults is a collection of helpers to retrieve the SDK's default
// configuration and handlers.
//
// Generally this package shouldn't be used directly, but session.Session
// instead. This package is useful when you need to reset the defaults
// of a session or service client to the SDK defaults before setting
// additional parameters.
package defaults

import (
	"fmt"
	"net/http"
	"os"
	"time"

	"github.com/aws/aws-sdk-go/aws"
	"github.com/aws/aws-sdk-go/aws/corehandlers"
	"github.com/aws/aws-sdk-go/aws/credentials"
	"github.com/aws/aws-sdk-go/aws/credentials/ec2rolecreds"
	"github.com/aws/aws-sdk-go/aws/credentials/endpointcreds"
	"github.com/aws/aws-sdk-go/aws/ec2metadata"
	"github.com/aws/aws-sdk-go/aws/request"
	"github.com/aws/aws-sdk-go/private/endpoints"
)

// A Defaults provides a collection of default values for SDK clients.
type Defaults struct {
	Config   *aws.Config
	Handlers request.Handlers
}

// Get returns the SDK's default values with Config and handlers pre-configured.
func Get() Defaults {
	cfg := Config()
	handlers := Handlers()
	cfg.Credentials = CredChain(cfg, handlers)

	return Defaults{
		Config:   cfg,
		Handlers: handlers,
	}
}

// Config returns the default configuration without credentials.
// To retrieve a config with credentials also included use
// `defaults.Get().Config` instead.
//
// Generally you shouldn't need to use this method directly, but
// is available if you need to reset the configuration of an
// existing service client or session.
func Config() *aws.Config {
	return aws.NewConfig().
		WithCredentials(credentials.AnonymousCredentials).
		WithRegion(os.Getenv("AWS_REGION")).
		WithHTTPClient(http.DefaultClient).
		WithMaxRetries(aws.UseServiceDefaultRetries).
		WithLogger(aws.NewDefaultLogger()).
		WithLogLevel(aws.LogOff).
		WithSleepDelay(time.Sleep)
}

// Handlers returns the default request handlers.
//
// Generally you shouldn't need to use this method directly, but
// is available if you need to reset the request handlers of an
// existing service client or session.
func Handlers() request.Handlers {
	var handlers request.Handlers

	handlers.Validate.PushBackNamed(corehandlers.ValidateEndpointHandler)
	handlers.Validate.AfterEachFn = request.HandlerListStopOnError
	handlers.Build.PushBackNamed(corehandlers.SDKVersionUserAgentHandler)
	handlers.Build.AfterEachFn = request.HandlerListStopOnError
	handlers.Sign.PushBackNamed(corehandlers.BuildContentLengthHandler)
	handlers.Send.PushBackNamed(corehandlers.SendHandler)
	handlers.AfterRetry.PushBackNamed(corehandlers.AfterRetryHandler)
	handlers.ValidateResponse.PushBackNamed(corehandlers.ValidateResponseHandler)

	return handlers
}

// CredChain returns the default credential chain.
//
// Generally you shouldn't need to use this method directly, but
// is available if you need to reset the credentials of an
// existing service client or session's Config.
func CredChain(cfg *aws.Config, handlers request.Handlers) *credentials.Credentials {
	return credentials.NewCredentials(&credentials.ChainProvider{
		VerboseErrors: aws.BoolValue(cfg.CredentialsChainVerboseErrors),
		Providers: []credentials.Provider{
			&credentials.EnvProvider{},
			&credentials.SharedCredentialsProvider{Filename: "", Profile: ""},
			RemoteCredProvider(*cfg, handlers),
		},
	})
}

// RemoteCredProvider returns a credenitials provider for the default remote
// endpoints such as EC2 or ECS Roles.
func RemoteCredProvider(cfg aws.Config, handlers request.Handlers) credentials.Provider {
	ecsCredURI := os.Getenv("AWS_CONTAINER_CREDENTIALS_RELATIVE_URI")

	if len(ecsCredURI) > 0 {
		return ecsCredProvider(cfg, handlers, ecsCredURI)
	}

	return ec2RoleProvider(cfg, handlers)
}

func ecsCredProvider(cfg aws.Config, handlers request.Handlers, uri string) credentials.Provider {
	const host = `169.254.170.2`

	return endpointcreds.NewProviderClient(cfg, handlers,
		fmt.Sprintf("http://%s%s", host, uri),
		func(p *endpointcreds.Provider) {
			p.ExpiryWindow = 5 * time.Minute
		},
	)
}

func ec2RoleProvider(cfg aws.Config, handlers request.Handlers) credentials.Provider {
	endpoint, signingRegion := endpoints.EndpointForRegion(ec2metadata.ServiceName,
		aws.StringValue(cfg.Region), true, false)

	return &ec2rolecreds.EC2RoleProvider{
		Client:       ec2metadata.NewClient(cfg, handlers, endpoint, signingRegion),
		ExpiryWindow: 5 * time.Minute,
	}
}


================================================
FILE: vendor/github.com/aws/aws-sdk-go/aws/ec2metadata/api.go
================================================
package ec2metadata

import (
	"encoding/json"
	"fmt"
	"path"
	"strings"
	"time"

	"github.com/aws/aws-sdk-go/aws/awserr"
	"github.com/aws/aws-sdk-go/aws/request"
)

// GetMetadata uses the path provided to request information from the EC2
// instance metdata service. The content will be returned as a string, or
// error if the request failed.
func (c *EC2Metadata) GetMetadata(p string) (string, error) {
	op := &request.Operation{
		Name:       "GetMetadata",
		HTTPMethod: "GET",
		HTTPPath:   path.Join("/", "meta-data", p),
	}

	output := &metadataOutput{}
	req := c.NewRequest(op, nil, output)

	return output.Content, req.Send()
}

// GetDynamicData uses the path provided to request information from the EC2
// instance metadata service for dynamic data. The content will be returned
// as a string, or error if the request failed.
func (c *EC2Metadata) GetDynamicData(p string) (string, error) {
	op := &request.Operation{
		Name:       "GetDynamicData",
		HTTPMethod: "GET",
		HTTPPath:   path.Join("/", "dynamic", p),
	}

	output := &metadataOutput{}
	req := c.NewRequest(op, nil, output)

	return output.Content, req.Send()
}

// GetInstanceIdentityDocument retrieves an identity document describing an
// instance. Error is returned if the request fails or is unable to parse
// the response.
func (c *EC2Metadata) GetInstanceIdentityDocument() (EC2InstanceIdentityDocument, error) {
	resp, err := c.GetDynamicData("instance-identity/document")
	if err != nil {
		return EC2InstanceIdentityDocument{},
			awserr.New("EC2MetadataRequestError",
				"failed to get EC2 instance identity document", err)
	}

	doc := EC2InstanceIdentityDocument{}
	if err := json.NewDecoder(strings.NewReader(resp)).Decode(&doc); err != nil {
		return EC2InstanceIdentityDocument{},
			awserr.New("SerializationError",
				"failed to decode EC2 instance identity document", err)
	}

	return doc, nil
}

// IAMInfo retrieves IAM info from the metadata API
func (c *EC2Metadata) IAMInfo() (EC2IAMInfo, error) {
	resp, err := c.GetMetadata("iam/info")
	if err != nil {
		return EC2IAMInfo{},
			awserr.New("EC2MetadataRequestError",
				"failed to get EC2 IAM info", err)
	}

	info := EC2IAMInfo{}
	if err := json.NewDecoder(strings.NewReader(resp)).Decode(&info); err != nil {
		return EC2IAMInfo{},
			awserr.New("SerializationError",
				"failed to decode EC2 IAM info", err)
	}

	if info.Code != "Success" {
		errMsg := fmt.Sprintf("failed to get EC2 IAM Info (%s)", info.Code)
		return EC2IAMInfo{},
			awserr.New("EC2MetadataError", errMsg, nil)
	}

	return info, nil
}

// Region returns the region the instance is running in.
func (c *EC2Metadata) Region() (string, error) {
	resp, err := c.GetMetadata("placement/availability-zone")
	if err != nil {
		return "", err
	}

	// returns region without the suffix. Eg: us-west-2a becomes us-west-2
	return resp[:len(resp)-1], nil
}

// Available returns if the application has access to the EC2 Metadata service.
// Can be used to determine if application is running within an EC2 Instance and
// the metadata service is available.
func (c *EC2Metadata) Available() bool {
	if _, err := c.GetMetadata("instance-id"); err != nil {
		return false
	}

	return true
}

// An EC2IAMInfo provides the shape for unmarshalling
// an IAM info from the metadata API
type EC2IAMInfo struct {
	Code               string
	LastUpdated        time.Time
	InstanceProfileArn string
	InstanceProfileID  string
}

// An EC2InstanceIdentityDocument provides the shape for unmarshalling
// an instance identity document
type EC2InstanceIdentityDocument struct {
	DevpayProductCodes []string  `json:"devpayProductCodes"`
	AvailabilityZone   string    `json:"availabilityZone"`
	PrivateIP          string    `json:"privateIp"`
	Version            string    `json:"version"`
	Region             string    `json:"region"`
	InstanceID         string    `json:"instanceId"`
	BillingProducts    []string  `json:"billingProducts"`
	InstanceType       string    `json:"instanceType"`
	AccountID          string    `json:"accountId"`
	PendingTime        time.Time `json:"pendingTime"`
	ImageID            string    `json:"imageId"`
	KernelID           string    `json:"kernelId"`
	RamdiskID          string    `json:"ramdiskId"`
	Architecture       string    `json:"architecture"`
}


================================================
FILE: vendor/github.com/aws/aws-sdk-go/aws/ec2metadata/service.go
================================================
// Package ec2metadata provides the client for making API calls to the
// EC2 Metadata service.
package ec2metadata

import (
	"bytes"
	"errors"
	"io"
	"net/http"
	"time"

	"github.com/aws/aws-sdk-go/aws"
	"github.com/aws/aws-sdk-go/aws/awserr"
	"github.com/aws/aws-sdk-go/aws/client"
	"github.com/aws/aws-sdk-go/aws/client/metadata"
	"github.com/aws/aws-sdk-go/aws/request"
)

// ServiceName is the name of the service.
const ServiceName = "ec2metadata"

// A EC2Metadata is an EC2 Metadata service Client.
type EC2Metadata struct {
	*client.Client
}

// New creates a new instance of the EC2Metadata client with a session.
// This client is safe to use across multiple goroutines.
//
//
// Example:
//     // Create a EC2Metadata client from just a session.
//     svc := ec2metadata.New(mySession)
//
//     // Create a EC2Metadata client with additional configuration
//     svc := ec2metadata.New(mySession, aws.NewConfig().WithLogLevel(aws.LogDebugHTTPBody))
func New(p client.ConfigProvider, cfgs ...*aws.Config) *EC2Metadata {
	c := p.ClientConfig(ServiceName, cfgs...)
	return NewClient(*c.Config, c.Handlers, c.Endpoint, c.SigningRegion)
}

// NewClient returns a new EC2Metadata client. Should be used to create
// a client when not using a session. Generally using just New with a session
// is preferred.
//
// If an unmodified HTTP client is provided from the stdlib default, or no client
// the EC2RoleProvider's EC2Metadata HTTP client's timeout will be shortened.
// To disable this set Config.EC2MetadataDisableTimeoutOverride to false. Enabled by default.
func NewClient(cfg aws.Config, handlers request.Handlers, endpoint, signingRegion string, opts ...func(*client.Client)) *EC2Metadata {
	if !aws.BoolValue(cfg.EC2MetadataDisableTimeoutOverride) && httpClientZero(cfg.HTTPClient) {
		// If the http client is unmodified and this feature is not disabled
		// set custom timeouts for EC2Metadata requests.
		cfg.HTTPClient = &http.Client{
			// use a shorter timeout than default because the metadata
			// service is local if it is running, and to fail faster
			// if not running on an ec2 instance.
			Timeout: 5 * time.Second,
		}
	}

	svc := &EC2Metadata{
		Client: client.New(
			cfg,
			metadata.ClientInfo{
				ServiceName: ServiceName,
				Endpoint:    endpoint,
				APIVersion:  "latest",
			},
			handlers,
		),
	}

	svc.Handlers.Unmarshal.PushBack(unmarshalHandler)
	svc.Handlers.UnmarshalError.PushBack(unmarshalError)
	svc.Handlers.Validate.Clear()
	svc.Handlers.Validate.PushBack(validateEndpointHandler)

	// Add additional options to the service config
	for _, option := range opts {
		option(svc.Client)
	}

	return svc
}

func httpClientZero(c *http.Client) bool {
	return c == nil || (c.Transport == nil && c.CheckRedirect == nil && c.Jar == nil && c.Timeout == 0)
}

type metadataOutput struct {
	Content string
}

func unmarshalHandler(r *request.Request) {
	defer r.HTTPResponse.Body.Close()
	b := &bytes.Buffer{}
	if _, err := io.Copy(b, r.HTTPResponse.Body); err != nil {
		r.Error = awserr.New("SerializationError", "unable to unmarshal EC2 metadata respose", err)
		return
	}

	if data, ok := r.Data.(*metadataOutput); ok {
		data.Content = b.String()
	}
}

func unmarshalError(r *request.Request) {
	defer r.HTTPResponse.Body.Close()
	b := &bytes.Buffer{}
	if _, err := io.Copy(b, r.HTTPResponse.Body); err != nil {
		r.Error = awserr.New("SerializationError", "unable to unmarshal EC2 metadata error respose", err)
		return
	}

	// Response body format is not consistent between metadata endpoints.
	// Grab the error message as a string and include that as the source error
	r.Error = awserr.New("EC2MetadataError", "failed to make EC2Metadata request", errors.New(b.String()))
}

func validateEndpointHandler(r *request.Request) {
	if r.ClientInfo.Endpoint == "" {
		r.Error = aws.ErrMissingEndpoint
	}
}


================================================
FILE: vendor/github.com/aws/aws-sdk-go/aws/errors.go
================================================
package aws

import "github.com/aws/aws-sdk-go/aws/awserr"

var (
	// ErrMissingRegion is an error that is returned if region configuration is
	// not found.
	//
	// @readonly
	ErrMissingRegion = awserr.New("MissingRegion", "could not find region configuration", nil)

	// ErrMissingEndpoint is an error that is returned if an endpoint cannot be
	// resolved for a service.
	//
	// @readonly
	ErrMissingEndpoint = awserr.New("MissingEndpoint", "'Endpoint' configuration is required for this service", nil)
)


================================================
FILE: vendor/github.com/aws/aws-sdk-go/aws/logger.go
================================================
package aws

import (
	"log"
	"os"
)

// A LogLevelType defines the level logging should be performed at. Used to instruct
// the SDK which statements should be logged.
type LogLevelType uint

// LogLevel returns the pointer to a LogLevel. Should be used to workaround
// not being able to take the address of a non-composite literal.
func LogLevel(l LogLevelType) *LogLevelType {
	return &l
}

// Value returns the LogLevel value or the default value LogOff if the LogLevel
// is nil. Safe to use on nil value LogLevelTypes.
func (l *LogLevelType) Value() LogLevelType {
	if l != nil {
		return *l
	}
	return LogOff
}

// Matches returns true if the v LogLevel is enabled by this LogLevel. Should be
// used with logging sub levels. Is safe to use on nil value LogLevelTypes. If
// LogLevel is nill, will default to LogOff comparison.
func (l *LogLevelType) Matches(v LogLevelType) bool {
	c := l.Value()
	return c&v == v
}

// AtLeast returns true if this LogLevel is at least high enough to satisfies v.
// Is safe to use on nil value LogLevelTypes. If LogLevel is nill, will default
// to LogOff comparison.
func (l *LogLevelType) AtLeast(v LogLevelType) bool {
	c := l.Value()
	return c >= v
}

const (
	// LogOff states that no logging should be performed by the SDK. This is the
	// default state of the SDK, and should be use to disable all logging.
	LogOff LogLevelType = iota * 0x1000

	// LogDebug state that debug output should be logged by the SDK. This should
	// be used to inspect request made and responses received.
	LogDebug
)

// Debug Logging Sub Levels
const (
	// LogDebugWithSigning states that the SDK should log request signing and
	// presigning events. This should be used to log the signing details of
	// requests for debugging. Will also enable LogDebug.
	LogDebugWithSigning LogLevelType = LogDebug | (1 << iota)

	// LogDebugWithHTTPBody states the SDK should log HTTP request and response
	// HTTP bodys in addition to the headers and path. This should be used to
	// see the body content of requests and responses made while using the SDK
	// Will also enable LogDebug.
	LogDebugWithHTTPBody

	// LogDebugWithRequestRetries states the SDK should log when service requests will
	// be retried. This should be used to log when you want to log when service
	// requests are being retried. Will also enable LogDebug.
	LogDebugWithRequestRetries

	// LogDebugWithRequestErrors states the SDK should log when service requests fail
	// to build, send, validate, or unmarshal.
	LogDebugWithRequestErrors
)

// A Logger is a minimalistic interface for the SDK to log messages to. Should
// be used to provide custom logging writers for the SDK to use.
type Logger interface {
	Log(...interface{})
}

// A LoggerFunc is a convenience type to convert a function taking a variadic
// list of arguments and wrap it so the Logger interface can be used.
//
// Example:
//     s3.New(sess, &aws.Config{Logger: aws.LoggerFunc(func(args ...interface{}) {
//         fmt.Fprintln(os.Stdout, args...)
//     })})
type LoggerFunc func(...interface{})

// Log calls the wrapped function with the arguments provided
func (f LoggerFunc) Log(args ...interface{}) {
	f(args...)
}

// NewDefaultLogger returns a Logger which will write log messages to stdout, and
// use same formatting runes as the stdlib log.Logger
func NewDefaultLogger() Logger {
	return &defaultLogger{
		logger: log.New(os.Stdout, "", log.LstdFlags),
	}
}

// A defaultLogger provides a minimalistic logger satisfying the Logger interface.
type defaultLogger struct {
	logger *log.Logger
}

// Log logs the parameters to the stdlib logger. See log.Println.
func (l defaultLogger) Log(args ...interface{}) {
	l.logger.Println(args...)
}


================================================
FILE: vendor/github.com/aws/aws-sdk-go/aws/request/handlers.go
================================================
package request

import (
	"fmt"
	"strings"
)

// A Handlers provides a collection of request handlers for various
// stages of handling requests.
type Handlers struct {
	Validate         HandlerList
	Build            HandlerList
	Sign             HandlerList
	Send             HandlerList
	ValidateResponse HandlerList
	Unmarshal        HandlerList
	UnmarshalMeta    HandlerList
	UnmarshalError   HandlerList
	Retry            HandlerList
	AfterRetry       HandlerList
}

// Copy returns of this handler's lists.
func (h *Handlers) Copy() Handlers {
	return Handlers{
		Validate:         h.Validate.copy(),
		Build:            h.Build.copy(),
		Sign:             h.Sign.copy(),
		Send:             h.Send.copy(),
		ValidateResponse: h.ValidateResponse.copy(),
		Unmarshal:        h.Unmarshal.copy(),
		UnmarshalError:   h.UnmarshalError.copy(),
		UnmarshalMeta:    h.UnmarshalMeta.copy(),
		Retry:            h.Retry.copy(),
		AfterRetry:       h.AfterRetry.copy(),
	}
}

// Clear removes callback functions for all handlers
func (h *Handlers) Clear() {
	h.Validate.Clear()
	h.Build.Clear()
	h.Send.Clear()
	h.Sign.Clear()
	h.Unmarshal.Clear()
	h.UnmarshalMeta.Clear()
	h.UnmarshalError.Clear()
	h.ValidateResponse.Clear()
	h.Retry.Clear()
	h.AfterRetry.Clear()
}

// A HandlerListRunItem represents an entry in the HandlerList which
// is being run.
type HandlerListRunItem struct {
	Index   int
	Handler NamedHandler
	Request *Request
}

// A HandlerList manages zero or more handlers in a list.
type HandlerList struct {
	list []NamedHandler

	// Called after each request handler in the list is called. If set
	// and the func returns true the HandlerList will continue to iterate
	// over the request handlers. If false is returned the HandlerList
	// will stop iterating.
	//
	// Should be used if extra logic to be performed between each handler
	// in the list. This can be used to terminate a list's iteration
	// based on a condition such as error like, HandlerListStopOnError.
	// Or for logging like HandlerListLogItem.
	AfterEachFn func(item HandlerListRunItem) bool
}

// A NamedHandler is a struct that contains a name and function callback.
type NamedHandler struct {
	Name string
	Fn   func(*Request)
}

// copy creates a copy of the handler list.
func (l *HandlerList) copy() HandlerList {
	n := HandlerList{
		AfterEachFn: l.AfterEachFn,
	}
	n.list = append([]NamedHandler{}, l.list...)
	return n
}

// Clear clears the handler list.
func (l *HandlerList) Clear() {
	l.list = []NamedHandler{}
}

// Len returns the number of handlers in the list.
func (l *HandlerList) Len() int {
	return len(l.list)
}

// PushBack pushes handler f to the back of the handler list.
func (l *HandlerList) PushBack(f func(*Request)) {
	l.list = append(l.list, NamedHandler{"__anonymous", f})
}

// PushFront pushes handler f to the front of the handler list.
func (l *HandlerList) PushFront(f func(*Request)) {
	l.list = append([]NamedHandler{{"__anonymous", f}}, l.list...)
}

// PushBackNamed pushes named handler f to the back of the handler list.
func (l *HandlerList) PushBackNamed(n NamedHandler) {
	l.list = append(l.list, n)
}

// PushFrontNamed pushes named handler f to the front of the handler list.
func (l *HandlerList) PushFrontNamed(n NamedHandler) {
	l.list = append([]NamedHandler{n}, l.list...)
}

// Remove removes a NamedHandler n
func (l *HandlerList) Remove(n NamedHandler) {
	newlist := []NamedHandler{}
	for _, m := range l.list {
		if m.Name != n.Name {
			newlist = append(newlist, m)
		}
	}
	l.list = newlist
}

// Run executes all handlers in the list with a given request object.
func (l *HandlerList) Run(r *Request) {
	for i, h := range l.list {
		h.Fn(r)
		item := HandlerListRunItem{
			Index: i, Handler: h, Request: r,
		}
		if l.AfterEachFn != nil && !l.AfterEachFn(item) {
			return
		}
	}
}

// HandlerListLogItem logs the request handler and the state of the
// request's Error value. Always returns true to continue iterating
// request handlers in a HandlerList.
func HandlerListLogItem(item HandlerListRunItem) bool {
	if item.Request.Config.Logger == nil {
		return true
	}
	item.Request.Config.Logger.Log("DEBUG: RequestHandler",
		item.Index, item.Handler.Name, item.Request.Error)

	return true
}

// HandlerListStopOnError returns false to stop the HandlerList iterating
// over request handlers if Request.Error is not nil. True otherwise
// to continue iterating.
func HandlerListStopOnError(item HandlerListRunItem) bool {
	return item.Request.Error == nil
}

// MakeAddToUserAgentHandler will add the name/version pair to the User-Agent request
// header. If the extra parameters are provided they will be added as metadata to the
// name/version pair resulting in the following format.
// "name/version (extra0; extra1; ...)"
// The user agent part will be concatenated with this current request's user agent string.
func MakeAddToUserAgentHandler(name, version string, extra ...string) func(*Request) {
	ua := fmt.Sprintf("%s/%s", name, version)
	if len(extra) > 0 {
		ua += fmt.Sprintf(" (%s)", strings.Join(extra, "; "))
	}
	return func(r *Request) {
		AddToUserAgent(r, ua)
	}
}

// MakeAddToUserAgentFreeFormHandler adds the input to the User-Agent request header.
// The input string will be concatenated with the current request's user agent string.
func MakeAddToUserAgentFreeFormHandler(s string) func(*Request) {
	return func(r *Request) {
		AddToUserAgent(r, s)
	}
}


================================================
FILE: vendor/github.com/aws/aws-sdk-go/aws/request/http_request.go
================================================
// +build go1.5

package request

import (
	"io"
	"net/http"
	"net/url"
)

func copyHTTPRequest(r *http.Request, body io.ReadCloser) *http.Request {
	req := &http.Request{
		URL:           &url.URL{},
		Header:        http.Header{},
		Close:         r.Close,
		Body:          body,
		Host:          r.Host,
		Method:        r.Method,
		Proto:         r.Proto,
		ContentLength: r.ContentLength,
		// Cancel will be deprecated in 1.7 and will be replaced with Context
		Cancel: r.Cancel,
	}

	*req.URL = *r.URL
	for k, v := range r.Header {
		for _, vv := range v {
			req.Header.Add(k, vv)
		}
	}

	return req
}


================================================
FILE: vendor/github.com/aws/aws-sdk-go/aws/request/http_request_1_4.go
================================================
// +build !go1.5

package request

import (
	"io"
	"net/http"
	"net/url"
)

func copyHTTPRequest(r *http.Request, body io.ReadCloser) *http.Request {
	req := &http.Request{
		URL:           &url.URL{},
		Header:        http.Header{},
		Close:         r.Close,
		Body:          body,
		Host:          r.Host,
		Method:        r.Method,
		Proto:         r.Proto,
		ContentLength: r.ContentLength,
	}

	*req.URL = *r.URL
	for k, v := range r.Header {
		for _, vv := range v {
			req.Header.Add(k, vv)
		}
	}

	return req
}


================================================
FILE: vendor/github.com/aws/aws-sdk-go/aws/request/offset_reader.go
================================================
package request

import (
	"io"
	"sync"
)

// offsetReader is a thread-safe io.ReadCloser to prevent racing
// with retrying requests
type offsetReader struct {
	buf    io.ReadSeeker
	lock   sync.RWMutex
	closed bool
}

func newOffsetReader(buf io.ReadSeeker, offset int64) *offsetReader {
	reader := &offsetReader{}
	buf.Seek(offset, 0)

	reader.buf = buf
	return reader
}

// Close is a thread-safe close. Uses the write lock.
func (o *offsetReader) Close() error {
	o.lock.Lock()
	defer o.lock.Unlock()
	o.closed = true
	return nil
}

// Read is a thread-safe read using a read lock.
func (o *offsetReader) Read(p []byte) (int, error) {
	o.lock.RLock()
	defer o.lock.RUnlock()

	if o.closed {
		return 0, io.EOF
	}

	return o.buf.Read(p)
}

// CloseAndCopy will return a new offsetReader with a copy of the old buffer
// and close the old buffer.
func (o *offsetReader) CloseAndCopy(offset int64) *offsetReader {
	o.Close()
	return newOffsetReader(o.buf, offset)
}


================================================
FILE: vendor/github.com/aws/aws-sdk-go/aws/request/request.go
================================================
package request

import (
	"bytes"
	"fmt"
	"io"
	"io/ioutil"
	"net/http"
	"net/url"
	"reflect"
	"strings"
	"time"

	"github.com/aws/aws-sdk-go/aws"
	"github.com/aws/aws-sdk-go/aws/awserr"
	"github.com/aws/aws-sdk-go/aws/client/metadata"
)

// A Request is the service request to be made.
type Request struct {
	Config     aws.Config
	ClientInfo metadata.ClientInfo
	Handlers   Handlers

	Retryer
	Time             time.Time
	ExpireTime       time.Duration
	Operation        *Operation
	HTTPRequest      *http.Request
	HTTPResponse     *http.Response
	Body             io.ReadSeeker
	BodyStart        int64 // offset from beginning of Body that the request body starts
	Params           interface{}
	Error            error
	Data             interface{}
	RequestID        string
	RetryCount       int
	Retryable        *bool
	RetryDelay       time.Duration
	NotHoist         bool
	SignedHeaderVals http.Header
	LastSignedAt     time.Time

	built bool
}

// An Operation is the service API operation to be made.
type Operation struct {
	Name       string
	HTTPMethod string
	HTTPPath   string
	*Paginator
}

// Paginator keeps track of pagination configuration for an API operation.
type Paginator struct {
	InputTokens     []string
	OutputTokens    []string
	LimitToken      string
	TruncationToken string
}

// New returns a new Request pointer for the service API
// operation and parameters.
//
// Params is any value of input parameters to be the request payload.
// Data is pointer value to an object which the request's response
// payload will be deserialized to.
func New(cfg aws.Config, clientInfo metadata.ClientInfo, handlers Handlers,
	retryer Retryer, operation *Operation, params interface{}, data interface{}) *Request {

	method := operation.HTTPMethod
	if method == "" {
		method = "POST"
	}

	httpReq, _ := http.NewRequest(method, "", nil)

	var err error
	httpReq.URL, err = url.Parse(clientInfo.Endpoint + operation.HTTPPath)
	if err != nil {
		httpReq.URL = &url.URL{}
		err = awserr.New("InvalidEndpointURL", "invalid endpoint uri", err)
	}

	r := &Request{
		Config:     cfg,
		ClientInfo: clientInfo,
		Handlers:   handlers.Copy(),

		Retryer:     retryer,
		Time:        time.Now(),
		ExpireTime:  0,
		Operation:   operation,
		HTTPRequest: httpReq,
		Body:        nil,
		Params:      params,
		Error:       err,
		Data:        data,
	}
	r.SetBufferBody([]byte{})

	return r
}

// WillRetry returns if the request's can be retried.
func (r *Request) WillRetry() bool {
	return r.Error != nil && aws.BoolValue(r.Retryable) && r.RetryCount < r.MaxRetries()
}

// ParamsFilled returns if the request's parameters have been populated
// and the parameters are valid. False is returned if no parameters are
// provided or invalid.
func (r *Request) ParamsFilled() bool {
	return r.Params != nil && reflect.ValueOf(r.Params).Elem().IsValid()
}

// DataFilled returns true if the request's data for response deserialization
// target has been set and is a valid. False is returned if data is not
// set, or is invalid.
func (r *Request) DataFilled() bool {
	return r.Data != nil && reflect.ValueOf(r.Data).Elem().IsValid()
}

// SetBufferBody will set the request's body bytes that will be sent to
// the service API.
func (r *Request) SetBufferBody(buf []byte) {
	r.SetReaderBody(bytes.NewReader(buf))
}

// SetStringBody sets the body of the request to be backed by a string.
func (r *Request) SetStringBody(s string) {
	r.SetReaderBody(strings.NewReader(s))
}

// SetReaderBody will set the request's body reader.
func (r *Request) SetReaderBody(reader io.ReadSeeker) {
	r.HTTPRequest.Body = newOffsetReader(reader, 0)
	r.Body = reader
}

// Presign returns the request's signed URL. Error will be returned
// if the signing fails.
func (r *Request) Presign(expireTime time.Duration) (string, error) {
	r.ExpireTime = expireTime
	r.NotHoist = false
	r.Sign()
	if r.Error != nil {
		return "", r.Error
	}
	return r.HTTPRequest.URL.String(), nil
}

// PresignRequest behaves just like presign, but hoists all headers and signs them.
// Also returns the signed hash back to the user
func (r *Request) PresignRequest(expireTime time.Duration) (string, http.Header, error) {
	r.ExpireTime = expireTime
	r.NotHoist = true
	r.Sign()
	if r.Error != nil {
		return "", nil, r.Error
	}
	return r.HTTPRequest.URL.String(), r.SignedHeaderVals, nil
}

func debugLogReqError(r *Request, stage string, retrying bool, err error) {
	if !r.Config.LogLevel.Matches(aws.LogDebugWithRequestErrors) {
		return
	}

	retryStr := "not retrying"
	if retrying {
		retryStr = "will retry"
	}

	r.Config.Logger.Log(fmt.Sprintf("DEBUG: %s %s/%s failed, %s, error %v",
		stage, r.ClientInfo.ServiceName, r.Operation.Name, retryStr, err))
}

// Build will build the request's object so it can be signed and sent
// to the service. Build will also validate all the request's parameters.
// Anny additional build Handlers set on this request will be run
// in the order they were set.
//
// The request will only be built once. Multiple calls to build will have
// no effect.
//
// If any Validate or Build errors occur the build will stop and the error
// which occurred will be returned.
func (r *Request) Build() error {
	if !r.built {
		r.Handlers.Validate.Run(r)
		if r.Error != nil {
			debugLogReqError(r, "Validate Request", false, r.Error)
			return r.Error
		}
		r.Handlers.Build.Run(r)
		if r.Error != nil {
			debugLogReqError(r, "Build Request", false, r.Error)
			return r.Error
		}
		r.built = true
	}

	return r.Error
}

// Sign will sign the request returning error if errors are encountered.
//
// Send will build the request prior to signing. All Sign Handlers will
// be executed in the order they were set.
func (r *Request) Sign() error {
	r.Build()
	if r.Error != nil {
		debugLogReqError(r, "Build Request", false, r.Error)
		return r.Error
	}

	r.Handlers.Sign.Run(r)
	return r.Error
}

// Send will send the request returning error if errors are encountered.
//
// Send will sign the request prior to sending. All Send Handlers will
// be executed in the order they were set.
//
// Canceling a request is non-deterministic. If a request has been canceled,
// then the transport will choose, randomly, one of the state channels during
// reads or getting the connection.
//
// readLoop() and getConn(req *Request, cm connectMethod)
// https://github.com/golang/go/blob/master/src/net/http/transport.go
func (r *Request) Send() error {
	for {
		if aws.BoolValue(r.Retryable) {
			if r.Config.LogLevel.Matches(aws.LogDebugWithRequestRetries) {
				r.Config.Logger.Log(fmt.Sprintf("DEBUG: Retrying Request %s/%s, attempt %d",
					r.ClientInfo.ServiceName, r.Operation.Name, r.RetryCount))
			}

			var body io.ReadCloser
			if reader, ok := r.HTTPRequest.Body.(*offsetReader); ok {
				body = reader.CloseAndCopy(r.BodyStart)
			} else {
				if r.Config.Logger != nil {
					r.Config.Logger.Log("Request body type has been overwritten. May cause race conditions")
				}
				r.Body.Seek(r.BodyStart, 0)
				body = ioutil.NopCloser(r.Body)
			}

			r.HTTPRequest = copyHTTPRequest(r.HTTPRequest, body)
			if r.HTTPResponse != nil && r.HTTPResponse.Body != nil {
				// Closing response body. Since we are setting a new request to send off, this
				// response will get squashed and leaked.
				r.HTTPResponse.Body.Close()
			}
		}

		r.Sign()
		if r.Error != nil {
			return r.Error
		}

		r.Retryable = nil

		r.Handlers.Send.Run(r)
		if r.Error != nil {
			if strings.Contains(r.Error.Error(), "net/http: request canceled") {
				return r.Error
			}

			err := r.Error
			r.Handlers.Retry.Run(r)
			r.Handlers.AfterRetry.Run(r)
			if r.Error != nil {
				debugLogReqError(r, "Send Request", false, r.Error)
				return r.Error
			}
			debugLogReqError(r, "Send Request", true, err)
			continue
		}

		r.Handlers.UnmarshalMeta.Run(r)
		r.Handlers.ValidateResponse.Run(r)
		if r.Error != nil {
			err := r.Error
			r.Handlers.UnmarshalError.Run(r)
			r.Handlers.Retry.Run(r)
			r.Handlers.AfterRetry.Run(r)
			if r.Error != nil {
				debugLogReqError(r, "Validate Response", false, r.Error)
				return r.Error
			}
			debugLogReqError(r, "Validate Response", true, err)
			continue
		}

		r.Handlers.Unmarshal.Run(r)
		if r.Error != nil {
			err := r.Error
			r.Handlers.Retry.Run(r)
			r.Handlers.AfterRetry.Run(r)
			if r.Error != nil {
				debugLogReqError(r, "Unmarshal Response", false, r.Error)
				return r.Error
			}
			debugLogReqError(r, "Unmarshal Response", true, err)
			continue
		}

		break
	}

	return nil
}

// AddToUserAgent adds the string to the end of the request's current user agent.
func AddToUserAgent(r *Request, s string) {
	curUA := r.HTTPRequest.Header.Get("User-Agent")
	if len(curUA) > 0 {
		s = curUA + " " + s
	}
	r.HTTPRequest.Header.Set("User-Agent", s)
}


================================================
FILE: vendor/github.com/aws/aws-sdk-go/aws/request/request_pagination.go
================================================
package request

import (
	"reflect"

	"github.com/aws/aws-sdk-go/aws"
	"github.com/aws/aws-sdk-go/aws/awsutil"
)

//type Paginater interface {
//	HasNextPage() bool
//	NextPage() *Request
//	EachPage(fn func(data interface{}, isLastPage bool) (shouldContinue bool)) error
//}

// HasNextPage returns true if this request has more pages of data available.
func (r *Request) HasNextPage() bool {
	return len(r.nextPageTokens()) > 0
}

// nextPageTokens returns the tokens to use when asking for the next page of
// data.
func (r *Request) nextPageTokens() []interface{} {
	if r.Operation.Paginator == nil {
		return nil
	}

	if r.Operation.TruncationToken != "" {
		tr, _ := awsutil.ValuesAtPath(r.Data, r.Operation.TruncationToken)
		if len(tr) == 0 {
			return nil
		}

		switch v := tr[0].(type) {
		case *bool:
			if !aws.BoolValue(v) {
				return nil
			}
		case bool:
			if v == false {
				return nil
			}
		}
	}

	tokens := []interface{}{}
	tokenAdded := false
	for _, outToken := range r.Operation.OutputTokens {
		v, _ := awsutil.ValuesAtPath(r.Data, outToken)
		if len(v) > 0 {
			tokens = append(tokens, v[0])
			tokenAdded = true
		} else {
			tokens = append(tokens, nil)
		}
	}
	if !tokenAdded {
		return nil
	}

	return tokens
}

// NextPage returns a new Request that can be executed to return the next
// page of result data. Call .Send() on this request to execute it.
func (r *Request) NextPage() *Request {
	tokens := r.nextPageTokens()
	if len(tokens) == 0 {
		return nil
	}

	data := reflect.New(reflect.TypeOf(r.Data).Elem()).Interface()
	nr := New(r.Config, r.ClientInfo, r.Handlers, r.Retryer, r.Operation, awsutil.CopyOf(r.Params), data)
	for i, intok := range nr.Operation.InputTokens {
		awsutil.SetValueAtPath(nr.Params, intok, tokens[i])
	}
	return nr
}

// EachPage iterates over each page of a paginated request object. The fn
// parameter should be a function with the following sample signature:
//
//   func(page *T, lastPage bool) bool {
//       return true // return false to stop iterating
//   }
//
// Where "T" is the structure type matching the output structure of the given
// operation. For example, a request object generated by
// DynamoDB.ListTablesRequest() would expect to see dynamodb.ListTablesOutput
// as the structure "T". The lastPage value represents whether the page is
// the last page of data or not. The return value of this function should
// return true to keep iterating or false to stop.
func (r *Request) EachPage(fn func(data interface{}, isLastPage bool) (shouldContinue bool)) error {
	for page := r; page != nil; page = page.NextPage() {
		if err := page.Send(); err != nil {
			return err
		}
		if getNextPage := fn(page.Data, !page.HasNextPage()); !getNextPage {
			return page.Error
		}
	}

	return nil
}


================================================
FILE: vendor/github.com/aws/aws-sdk-go/aws/request/retryer.go
================================================
package request

import (
	"time"

	"github.com/aws/aws-sdk-go/aws"
	"github.com/aws/aws-sdk-go/aws/awserr"
)

// Retryer is an interface to control retry logic for a given service.
// The default implementation used by most services is the service.DefaultRetryer
// structure, which contains basic retry logic using exponential backoff.
type Retryer interface {
	RetryRules(*Request) time.Duration
	ShouldRetry(*Request) bool
	MaxRetries() int
}

// WithRetryer sets a config Retryer value to the given Config returning it
// for chaining.
func WithRetryer(cfg *aws.Config, retryer Retryer) *aws.Config {
	cfg.Retryer = retryer
	return cfg
}

// retryableCodes is a collection of service response codes which are retry-able
// without any further action.
var retryableCodes = map[string]struct{}{
	"RequestError":   {},
	"RequestTimeout": {},
}

var throttleCodes = map[string]struct{}{
	"ProvisionedThroughputExceededException": {},
	"Throttling":                             {},
	"ThrottlingException":                    {},
	"RequestLimitExceeded":                   {},
	"RequestThrottled":                       {},
	"LimitExceededException":                 {}, // Deleting 10+ DynamoDb tables at once
	"TooManyRequestsException":               {}, // Lambda functions
}

// credsExpiredCodes is a collection of error codes which signify the credentials
// need to be refreshed. Expired tokens require refreshing of credentials, and
// resigning before the request can be retried.
var credsExpiredCodes = map[string]struct{}{
	"ExpiredToken":          {},
	"ExpiredTokenException": {},
	"RequestExpired":        {}, // EC2 Only
}

func isCodeThrottle(code string) bool {
	_, ok := throttleCodes[code]
	return ok
}

func isCodeRetryable(code string) bool {
	if _, ok := retryableCodes[code]; ok {
		return true
	}

	return isCodeExpiredCreds(code)
}

func isCodeExpiredCreds(code string) bool {
	_, ok := credsExpiredCodes[code]
	return ok
}

// IsErrorRetryable returns whether the error is retryable, based on its Code.
// Returns false if the request has no Error set.
func (r *Request) IsErrorRetryable() bool {
	if r.Error != nil {
		if err, ok := r.Error.(awserr.Error); ok {
			return isCodeRetryable(err.Code())
		}
	}
	return false
}

// IsErrorThrottle returns whether the error is to be throttled based on its code.
// Returns false if the request has no Error set
func (r *Request) IsErrorThrottle() bool {
	if r.Error != nil {
		if err, ok := r.Error.(awserr.Error); ok {
			return isCodeThrottle(err.Code())
		}
	}
	return false
}

// IsErrorExpired returns whether the error code is a credential expiry error.
// Returns false if the request has no Error set.
func (r *Request) IsErrorExpired() bool {
	if r.Error != nil {
		if err, ok := r.Error.(awserr.Error); ok {
			return isCodeExpiredCreds(err.Code())
		}
	}
	return false
}


================================================
FILE: vendor/github.com/aws/aws-sdk-go/aws/request/validation.go
================================================
package request

import (
	"bytes"
	"fmt"

	"github.com/aws/aws-sdk-go/aws/awserr"
)

const (
	// InvalidParameterErrCode is the error code for invalid parameters errors
	InvalidParameterErrCode = "InvalidParameter"
	// ParamRequiredErrCode is the error code for required parameter errors
	ParamRequiredErrCode = "ParamRequiredError"
	// ParamMinValueErrCode is the error code for fields with too low of a
	// number value.
	ParamMinValueErrCode = "ParamMinValueError"
	// ParamMinLenErrCode is the error code for fields without enough elements.
	ParamMinLenErrCode = "ParamMinLenError"
)

// Validator provides a way for types to perform validation logic on their
// input values that external code can use to determine if a type's values
// are valid.
type Validator interface {
	Validate() error
}

// An ErrInvalidParams provides wrapping of invalid parameter errors found when
// validating API operation input parameters.
type ErrInvalidParams struct {
	// Context is the base context of the invalid parameter group.
	Context string
	errs    []ErrInvalidParam
}

// Add adds a new invalid parameter error to the collection of invalid
// parameters. The context of the invalid parameter will be updated to reflect
// this collection.
func (e *ErrInvalidParams) Add(err ErrInvalidParam) {
	err.SetContext(e.Context)
	e.errs = append(e.errs, err)
}

// AddNested adds the invalid parameter errors from another ErrInvalidParams
// value into this collection. The nested errors will have their nested context
// updated and base context to reflect the merging.
//
// Use for nested validations errors.
func (e *ErrInvalidParams) AddNested(nestedCtx string, nested ErrInvalidParams) {
	for _, err := range nested.errs {
		err.SetContext(e.Context)
		err.AddNestedContext(nestedCtx)
		e.errs = append(e.errs, err)
	}
}

// Len returns the number of invalid parameter errors
func (e ErrInvalidParams) Len() int {
	return len(e.errs)
}

// Code returns the code of the error
func (e ErrInvalidParams) Code() string {
	return InvalidParameterErrCode
}

// Message returns the message of the error
func (e ErrInvalidParams) Message() string {
	return fmt.Sprintf("%d validation error(s) found.", len(e.errs))
}

// Error returns the string formatted form of the invalid parameters.
func (e ErrInvalidParams) Error() string {
	w := &bytes.Buffer{}
	fmt.Fprintf(w, "%s: %s\n", e.Code(), e.Message())

	for _, err := range e.errs {
		fmt.Fprintf(w, "- %s\n", err.Message())
	}

	return w.String()
}

// OrigErr returns the invalid parameters as a awserr.BatchedErrors value
func (e ErrInvalidParams) OrigErr() error {
	return awserr.NewBatchError(
		InvalidParameterErrCode, e.Message(), e.OrigErrs())
}

// OrigErrs returns a slice of the invalid parameters
func (e ErrInvalidParams) OrigErrs() []error {
	errs := make([]error, len(e.errs))
	for i := 0; i < len(errs); i++ {
		errs[i] = e.errs[i]
	}

	return errs
}

// An ErrInvalidParam represents an invalid parameter error type.
type ErrInvalidParam interface {
	awserr.Error

	// Field name the error occurred on.
	Field() string

	// SetContext updates the context of the error.
	SetContext(string)

	// AddNestedContext updates the error's context to include a nested level.
	AddNestedContext(string)
}

type errInvalidParam struct {
	context       string
	nestedContext string
	field         string
	code          string
	msg           string
}

// Code returns the error code for the type of invalid parameter.
func (e *errInvalidParam) Code() string {
	return e.code
}

// Message returns the reason the parameter was invalid, and its context.
func (e *errInvalidParam) Message() string {
	return fmt.Sprintf("%s, %s.", e.msg, e.Field())
}

// Error returns the string version of the invalid parameter error.
func (e *errInvalidParam) Error() string {
	return fmt.Sprintf("%s: %s", e.code, e.Message())
}

// OrigErr returns nil, Implemented for awserr.Error interface.
func (e *errInvalidParam) OrigErr() error {
	return nil
}

// Field Returns the field and context the error occurred.
func (e *errInvalidParam) Field() string {
	field := e.context
	if len(field) > 0 {
		field += "."
	}
	if len(e.nestedContext) > 0 {
		field += fmt.Sprintf("%s.", e.nestedContext)
	}
	field += e.field

	return field
}

// SetContext updates the base context of the error.
func (e *errInvalidParam) SetContext(ctx string) {
	e.context = ctx
}

// AddNestedContext prepends a context to the field's path.
func (e *errInvalidParam) AddNestedContext(ctx string) {
	if len(e.nestedContext) == 0 {
		e.nestedContext = ctx
	} else {
		e.nestedContext = fmt.Sprintf("%s.%s", ctx, e.nestedContext)
	}

}

// An ErrParamRequired represents an required parameter error.
type ErrParamRequired struct {
	errInvalidParam
}

// NewErrParamRequired creates a new required parameter error.
func NewErrParamRequired(field string) *ErrParamRequired {
	return &ErrParamRequired{
		errInvalidParam{
			code:  ParamRequiredErrCode,
			field: field,
			msg:   fmt.Sprintf("missing required field"),
		},
	}
}

// An ErrParamMinValue represents a minimum value parameter error.
type ErrParamMinValue struct {
	errInvalidParam
	min float64
}

// NewErrParamMinValue creates a new minimum value parameter error.
func NewErrParamMinValue(field string, min float64) *ErrParamMinValue {
	return &ErrParamMinValue{
		errInvalidParam: errInvalidParam{
			code:  ParamMinValueErrCode,
			field: field,
			msg:   fmt.Sprintf("minimum field value of %v", min),
		},
		min: min,
	}
}

// MinValue returns the field's require minimum value.
//
// float64 is returned for both int and float min values.
func (e *ErrParamMinValue) MinValue() float64 {
	return e.min
}

// An ErrParamMinLen represents a minimum length parameter error.
type ErrParamMinLen struct {
	errInvalidParam
	min int
}

// NewErrParamMinLen creates a new minimum length parameter error.
func NewErrParamMinLen(field string, min int) *ErrParamMinLen {
	return &ErrParamMinLen{
		errInvalidParam: errInvalidParam{
			code:  ParamMinValueErrCode,
			field: field,
			msg:   fmt.Sprintf("minimum field size of %v", min),
		},
		min: min,
	}
}

// MinLen returns the field's required minimum length.
func (e *ErrParamMinLen) MinLen() int {
	return e.min
}


================================================
FILE: vendor/github.com/aws/aws-sdk-go/aws/session/doc.go
================================================
/*
Package session provides configuration for the SDK's service clients.

Sessions can be shared across all service clients that share the same base
configuration.  The Session is built from the SDK's default configuration and
request handlers.

Sessions should be cached when possible, because creating a new Session will
load all configuration values from the environment, and config files each time
the Session is created. Sharing the Session value across all of your service
clients will ensure the configuration is loaded the fewest number of times possible.

Concurrency

Sessions are safe to use concurrently as long as the Session is not being
modified. The SDK will not modify the Session once the Session has been created.
Creating service clients concurrently from a shared Session is safe.

Sessions from Shared Config

Sessions can be created using the method above that will only load the
additional config if the AWS_SDK_LOAD_CONFIG environment variable is set.
Alternatively you can explicitly create a Session with shared config enabled.
To do this you can use NewSessionWithOptions to configure how the Session will
be created. Using the NewSessionWithOptions with SharedConfigState set to
SharedConfigEnabled will create the session as if the AWS_SDK_LOAD_CONFIG
environment variable was set.

Creating Sessions

When creating Sessions optional aws.Config values can be passed in that will
override the default, or loaded config values the Session is being created
with. This allows you to provide additional, or case based, configuration
as needed.

By default NewSession will only load credentials from the shared credentials
file (~/.aws/credentials). If the AWS_SDK_LOAD_CONFIG environment variable is
set to a truthy value the Session will be created from the configuration
values from the shared config (~/.aws/config) and shared credentials
(~/.aws/credentials) files. See the section Sessions from Shared Config for
more information.

Create a Session with the default config and request handlers. With credentials
region, and profile loaded from the environment and shared config automatically.
Requires the AWS_PROFILE to be set, or "default" is used.

	// Create Session
	sess, err := session.NewSession()

	// Create a Session with a custom region
	sess, err := session.NewSession(&aws.Config{Region: aws.String("us-east-1")})

	// Create a S3 client instance from a session
	sess, err := session.NewSession()
	if err != nil {
		// Handle Session creation error
	}
	svc := s3.New(sess)

Create Session With Option Overrides

In addition to NewSession, Sessions can be created using NewSessionWithOptions.
This func allows you to control and override how the Session will be created
through code instead of being driven by environment variables only.

Use NewSessionWithOptions when you want to provide the config profile, or
override the shared config state (AWS_SDK_LOAD_CONFIG).

	// Equivalent to session.New
	sess, err := session.NewSessionWithOptions(session.Options{})

	// Specify profile to load for the session's config
	sess, err := session.NewSessionWithOptions(session.Options{
		 Profile: "profile_name",
	})

	// Specify profile for config and region for requests
	sess, err := session.NewSessionWithOptions(session.Options{
		 Config: aws.Config{Region: aws.String("us-east-1")},
		 Profile: "profile_name",
	})

	// Force enable Shared Config support
	sess, err := session.NewSessionWithOptions(session.Options{
		SharedConfigState: SharedConfigEnable,
	})

Adding Handlers

You can add handlers to a session for processing HTTP requests. All service
clients that use the session inherit the handlers. For example, the following
handler logs every request and its payload made by a service client:

	// Create a session, and add additional handlers for all service
	// clients created with the Session to inherit. Adds logging handler.
	sess, err := session.NewSession()
	sess.Handlers.Send.PushFront(func(r *request.Request) {
		// Log every request made and its payload
		logger.Println("Request: %s/%s, Payload: %s",
			r.ClientInfo.ServiceName, r.Operation, r.Params)
	})

Deprecated "New" function

The New session function has been deprecated because it does not provide good
way to return errors that occur when loading the configuration files and values.
Because of this, NewSession was created so errors can be retrieved when
creating a session fails.

Shared Config Fields

By default the SDK will only load the shared credentials file's (~/.aws/credentials)
credentials values, and all other config is provided by the environment variables,
SDK defaults, and user provided aws.Config values.

If the AWS_SDK_LOAD_CONFIG environment variable is set, or SharedConfigEnable
option is used to create the Session the full shared config values will be
loaded. This includes credentials, region, and support for assume role. In
addition the Session will load its configuration from both the shared config
file (~/.aws/config) and shared credentials file (~/.aws/credentials). Both
files have the same format.

If both config files are present the configuration from both files will be
read. The Session will be created from  configuration values from the shared
credentials file (~/.aws/credentials) over those in the shared credentials
file (~/.aws/config).

Credentials are the values the SDK should use for authenticating requests with
AWS Services. They arfrom a configuration file will need to include both
aws_access_key_id and aws_secret_access_key must be provided together in the
same file to be considered valid. The values will be ignored if not a complete
group. aws_session_token is an optional field that can be provided if both of
the other two fields are also provided.

	aws_access_key_id = AKID
	aws_secret_access_key = SECRET
	aws_session_token = TOKEN

Assume Role values allow you to configure the SDK to assume an IAM role using
a set of credentials provided in a config file via the source_profile field.
Both "role_arn" and "source_profile" are required. The SDK does not support
assuming a role with MFA token Via the Session's constructor. You can use the
stscreds.AssumeRoleProvider credentials provider to specify custom
configuration and support for MFA.

	role_arn = arn:aws:iam::<account_number>:role/<role_name>
	source_profile = profile_with_creds
	external_id = 1234
	mfa_serial = not supported!
	role_session_name = session_name

Region is the region the SDK should use for looking up AWS service endpoints
and signing requests.

	region = us-east-1

Environment Variables

When a Session is created several environment variables can be set to adjust
how the SDK functions, and what configuration data it loads when creating
Sessions. All environment values are optional, but some values like credentials
require multiple of the values to set or the partial values will be ignored.
All environment variable values are strings unless otherwise noted.

Environment configuration values. If set both Access Key ID and Secret Access
Key must be provided. Session Token and optionally also be provided, but is
not required.

	# Access Key ID
	AWS_ACCESS_KEY_ID=AKID
	AWS_ACCESS_KEY=AKID # only read if AWS_ACCESS_KEY_ID is not set.

	# Secret Access Key
	AWS_SECRET_ACCESS_KEY=SECRET
	AWS_SECRET_KEY=SECRET=SECRET # only read if AWS_SECRET_ACCESS_KEY is not set.

	# Session Token
	AWS_SESSION_TOKEN=TOKEN

Region value will instruct the SDK where to make service API requests to. If is
not provided in the environment the region must be provided before a service
client request is made.

	AWS_REGION=us-east-1

	# AWS_DEFAULT_REGION is only read if AWS_SDK_LOAD_CONFIG is also set,
	# and AWS_REGION is not also set.
	AWS_DEFAULT_REGION=us-east-1

Profile name the SDK should load use when loading shared config from the
configuration files. If not provided "default" will be used as the profile name.

	AWS_PROFILE=my_profile

	# AWS_DEFAULT_PROFILE is only read if AWS_SDK_LOAD_CONFIG is also set,
	# and AWS_PROFILE is not also set.
	AWS_DEFAULT_PROFILE=my_profile

SDK load config instructs the SDK to load the shared config in addition to
shared credentials. This also expands the configuration loaded so the shared
credentials will have parity with the shared config file. This also enables
Region and Profile support for the AWS_DEFAULT_REGION and AWS_DEFAULT_PROFILE
env values as well.

	AWS_SDK_LOAD_CONFIG=1

Shared credentials file path can be set to instruct the SDK to use an alternative
file for the shared credentials. If not set the file will be loaded from
$HOME/.aws/credentials on Linux/Unix based systems, and
%USERPROFILE%\.aws\credentials on Windows.

	AWS_SHARED_CREDENTIALS_FILE=$HOME/my_shared_credentials

Shared config file path can be set to instruct the SDK to use an alternative
file for the shared config. If not set the file will be loaded from
$HOME/.aws/config on Linux/Unix based systems, and
%USERPROFILE%\.aws\config on Windows.

	AWS_CONFIG_FILE=$HOME/my_shared_config


*/
package session


================================================
FILE: vendor/github.com/aws/aws-sdk-go/aws/session/env_config.go
================================================
package session

import (
	"os"
	"path/filepath"
	"strconv"

	"github.com/aws/aws-sdk-go/aws/credentials"
)

// envConfig is a collection of environment values the SDK will read
// setup config from. All environment values are optional. But some values
// such as credentials require multiple values to be complete or the values
// will be ignored.
type envConfig struct {
	// Environment configuration values. If set both Access Key ID and Secret Access
	// Key must be provided. Session Token and optionally also be provided, but is
	// not required.
	//
	//	# Access Key ID
	//	AWS_ACCESS_KEY_ID=AKID
	//	AWS_ACCESS_KEY=AKID # only read if AWS_ACCESS_KEY_ID is not set.
	//
	//	# Secret Access Key
	//	AWS_SECRET_ACCESS_KEY=SECRET
	//	AWS_SECRET_KEY=SECRET=SECRET # only read if AWS_SECRET_ACCESS_KEY is not set.
	//
	//	# Session Token
	//	AWS_SESSION_TOKEN=TOKEN
	Creds credentials.Value

	// Region value will instruct the SDK where to make service API requests to. If is
	// not provided in the environment the region must be provided before a service
	// client request is made.
	//
	//	AWS_REGION=us-east-1
	//
	//	# AWS_DEFAULT_REGION is only read if AWS_SDK_LOAD_CONFIG is also set,
	//	# and AWS_REGION is not also set.
	//	AWS_DEFAULT_REGION=us-east-1
	Region string

	// Profile name the SDK should load use when loading shared configuration from the
	// shared configuration files. If not provided "default" will be used as the
	// profile name.
	//
	//	AWS_PROFILE=my_profile
	//
	//	# AWS_DEFAULT_PROFILE is only read if AWS_SDK_LOAD_CONFIG is also set,
	//	# and AWS_PROFILE is not also set.
	//	AWS_DEFAULT_PROFILE=my_profile
	Profile string

	// SDK load config instructs the SDK to load the shared config in addition to
	// shared credentials. This also expands the configuration loaded from the shared
	// credentials to have parity with the shared config file. This also enables
	// Region and Profile support for the AWS_DEFAULT_REGION and AWS_DEFAULT_PROFILE
	// env values as well.
	//
	//	AWS_SDK_LOAD_CONFIG=1
	EnableSharedConfig bool

	// Shared credentials file path can be set to instruct the SDK to use an alternate
	// file for the shared credentials. If not set the file will be loaded from
	// $HOME/.aws/credentials on Linux/Unix based systems, and
	// %USERPROFILE%\.aws\credentials on Windows.
	//
	//	AWS_SHARED_CREDENTIALS_FILE=$HOME/my_shared_credentials
	SharedCredentialsFile string

	// Shared config file path can be set to instruct the SDK to use an alternate
	// file for the shared config. If not set the file will be loaded from
	// $HOME/.aws/config on Linux/Unix based systems, and
	// %USERPROFILE%\.aws\config on Windows.
	//
	//	AWS_CONFIG_FILE=$HOME/my_shared_config
	SharedConfigFile string
}

var (
	credAccessEnvKey = []string{
		"AWS_ACCESS_KEY_ID",
		"AWS_ACCESS_KEY",
	}
	credSecretEnvKey = []string{
		"AWS_SECRET_ACCESS_KEY",
		"AWS_SECRET_KEY",
	}
	credSessionEnvKey = []string{
		"AWS_SESSION_TOKEN",
	}

	regionEnvKeys = []string{
		"AWS_REGION",
		"AWS_DEFAULT_REGION", // Only read if AWS_SDK_LOAD_CONFIG is also set
	}
	profileEnvKeys = []string{
		"AWS_PROFILE",
		"AWS_DEFAULT_PROFILE", // On
Download .txt
gitextract_n0ym8b82/

├── README.md
├── config.go
├── journal.go
├── main.go
├── reader.go
├── record.go
├── state.go
├── terminate.go
├── unmarshal.go
├── vendor/
│   ├── github.com/
│   │   ├── aws/
│   │   │   └── aws-sdk-go/
│   │   │       ├── LICENSE.txt
│   │   │       ├── NOTICE.txt
│   │   │       ├── aws/
│   │   │       │   ├── awserr/
│   │   │       │   │   ├── error.go
│   │   │       │   │   └── types.go
│   │   │       │   ├── awsutil/
│   │   │       │   │   ├── copy.go
│   │   │       │   │   ├── equal.go
│   │   │       │   │   ├── path_value.go
│   │   │       │   │   ├── prettify.go
│   │   │       │   │   └── string_value.go
│   │   │       │   ├── client/
│   │   │       │   │   ├── client.go
│   │   │       │   │   ├── default_retryer.go
│   │   │       │   │   └── metadata/
│   │   │       │   │       └── client_info.go
│   │   │       │   ├── config.go
│   │   │       │   ├── convert_types.go
│   │   │       │   ├── corehandlers/
│   │   │       │   │   ├── handlers.go
│   │   │       │   │   └── param_validator.go
│   │   │       │   ├── credentials/
│   │   │       │   │   ├── chain_provider.go
│   │   │       │   │   ├── credentials.go
│   │   │       │   │   ├── ec2rolecreds/
│   │   │       │   │   │   └── ec2_role_provider.go
│   │   │       │   │   ├── endpointcreds/
│   │   │       │   │   │   └── provider.go
│   │   │       │   │   ├── env_provider.go
│   │   │       │   │   ├── example.ini
│   │   │       │   │   ├── shared_credentials_provider.go
│   │   │       │   │   ├── static_provider.go
│   │   │       │   │   └── stscreds/
│   │   │       │   │       └── assume_role_provider.go
│   │   │       │   ├── defaults/
│   │   │       │   │   └── defaults.go
│   │   │       │   ├── ec2metadata/
│   │   │       │   │   ├── api.go
│   │   │       │   │   └── service.go
│   │   │       │   ├── errors.go
│   │   │       │   ├── logger.go
│   │   │       │   ├── request/
│   │   │       │   │   ├── handlers.go
│   │   │       │   │   ├── http_request.go
│   │   │       │   │   ├── http_request_1_4.go
│   │   │       │   │   ├── offset_reader.go
│   │   │       │   │   ├── request.go
│   │   │       │   │   ├── request_pagination.go
│   │   │       │   │   ├── retryer.go
│   │   │       │   │   └── validation.go
│   │   │       │   ├── session/
│   │   │       │   │   ├── doc.go
│   │   │       │   │   ├── env_config.go
│   │   │       │   │   ├── session.go
│   │   │       │   │   └── shared_config.go
│   │   │       │   ├── signer/
│   │   │       │   │   └── v4/
│   │   │       │   │       ├── header_rules.go
│   │   │       │   │       └── v4.go
│   │   │       │   ├── types.go
│   │   │       │   └── version.go
│   │   │       ├── private/
│   │   │       │   ├── endpoints/
│   │   │       │   │   ├── endpoints.go
│   │   │       │   │   ├── endpoints.json
│   │   │       │   │   └── endpoints_map.go
│   │   │       │   └── protocol/
│   │   │       │       ├── idempotency.go
│   │   │       │       ├── json/
│   │   │       │       │   └── jsonutil/
│   │   │       │       │       ├── build.go
│   │   │       │       │       └── unmarshal.go
│   │   │       │       ├── jsonrpc/
│   │   │       │       │   └── jsonrpc.go
│   │   │       │       ├── query/
│   │   │       │       │   ├── build.go
│   │   │       │       │   ├── queryutil/
│   │   │       │       │   │   └── queryutil.go
│   │   │       │       │   ├── unmarshal.go
│   │   │       │       │   └── unmarshal_error.go
│   │   │       │       ├── rest/
│   │   │       │       │   ├── build.go
│   │   │       │       │   ├── payload.go
│   │   │       │       │   └── unmarshal.go
│   │   │       │       ├── unmarshal.go
│   │   │       │       └── xml/
│   │   │       │           └── xmlutil/
│   │   │       │               ├── build.go
│   │   │       │               ├── unmarshal.go
│   │   │       │               └── xml_to_struct.go
│   │   │       └── service/
│   │   │           ├── cloudwatchlogs/
│   │   │           │   ├── api.go
│   │   │           │   └── service.go
│   │   │           └── sts/
│   │   │               ├── api.go
│   │   │               ├── customizations.go
│   │   │               └── service.go
│   │   ├── coreos/
│   │   │   ├── go-systemd/
│   │   │   │   ├── LICENSE
│   │   │   │   └── sdjournal/
│   │   │   │       ├── functions.go
│   │   │   │       ├── journal.go
│   │   │   │       └── read.go
│   │   │   └── pkg/
│   │   │       ├── LICENSE
│   │   │       ├── NOTICE
│   │   │       └── dlopen/
│   │   │           ├── dlopen.go
│   │   │           └── dlopen_example.go
│   │   ├── go-ini/
│   │   │   └── ini/
│   │   │       ├── LICENSE
│   │   │       ├── Makefile
│   │   │       ├── README.md
│   │   │       ├── README_ZH.md
│   │   │       ├── error.go
│   │   │       ├── ini.go
│   │   │       ├── key.go
│   │   │       ├── parser.go
│   │   │       ├── section.go
│   │   │       └── struct.go
│   │   ├── hashicorp/
│   │   │   └── hcl/
│   │   │       ├── LICENSE
│   │   │       ├── Makefile
│   │   │       ├── README.md
│   │   │       ├── appveyor.yml
│   │   │       ├── decoder.go
│   │   │       ├── hcl/
│   │   │       │   ├── ast/
│   │   │       │   │   ├── ast.go
│   │   │       │   │   └── walk.go
│   │   │       │   ├── parser/
│   │   │       │   │   ├── error.go
│   │   │       │   │   └── parser.go
│   │   │       │   ├── scanner/
│   │   │       │   │   └── scanner.go
│   │   │       │   ├── strconv/
│   │   │       │   │   └── quote.go
│   │   │       │   └── token/
│   │   │       │       ├── position.go
│   │   │       │       └── token.go
│   │   │       ├── hcl.go
│   │   │       ├── json/
│   │   │       │   ├── parser/
│   │   │       │   │   ├── flatten.go
│   │   │       │   │   └── parser.go
│   │   │       │   ├── scanner/
│   │   │       │   │   └── scanner.go
│   │   │       │   └── token/
│   │   │       │       ├── position.go
│   │   │       │       └── token.go
│   │   │       ├── lex.go
│   │   │       └── parse.go
│   │   └── jmespath/
│   │       └── go-jmespath/
│   │           ├── LICENSE
│   │           ├── Makefile
│   │           ├── README.md
│   │           ├── api.go
│   │           ├── astnodetype_string.go
│   │           ├── functions.go
│   │           ├── interpreter.go
│   │           ├── lexer.go
│   │           ├── parser.go
│   │           ├── toktype_string.go
│   │           └── util.go
│   └── vendor.json
└── writer.go
Download .txt
SYMBOL INDEX (1597 symbols across 106 files)

FILE: config.go
  type Config (line 19) | type Config struct
    method NewAWSSession (line 147) | func (c *Config) NewAWSSession() *awsSession.Session {
  type fileConfig (line 31) | type fileConfig struct
  function getLogLevel (line 42) | func getLogLevel(priority string) (Priority, error) {
  function LoadConfig (line 64) | func LoadConfig(filename string) (*Config, error) {
  function expandFileConfig (line 163) | func expandFileConfig(config *fileConfig, metaClient *ec2metadata.EC2Met...
  function expandBraceVars (line 218) | func expandBraceVars(s string, mapping func(string) string) string {

FILE: journal.go
  function AddLogFilters (line 8) | func AddLogFilters(journal *sdjournal.Journal, config *Config) {

FILE: main.go
  function main (line 14) | func main() {
  function usage (line 36) | func usage() {
  function run (line 42) | func run(configFilename string) error {

FILE: reader.go
  function ReadRecords (line 10) | func ReadRecords(instanceId string, journal *sdjournal.Journal, c chan<-...
  function BatchRecords (line 78) | func BatchRecords(records <-chan Record, batches chan<- []Record, batchS...
  function synthRecord (line 135) | func synthRecord(err error) Record {

FILE: record.go
  type Priority (line 3) | type Priority
    method MarshalJSON (line 65) | func (p Priority) MarshalJSON() ([]byte, error) {
  type Record (line 27) | type Record struct
  type RecordSyslog (line 52) | type RecordSyslog struct
  type RecordKernel (line 58) | type RecordKernel struct

FILE: state.go
  constant stateFormat (line 8) | stateFormat = "%s\n%s\n"
  constant mapSize (line 9) | mapSize = 64
  type State (line 11) | type State struct
    method Close (line 25) | func (s State) Close() error {
    method Sync (line 29) | func (s State) Sync() error {
    method LastState (line 33) | func (s State) LastState() (string, string) {
    method SetState (line 47) | func (s State) SetState(bootId, seqToken string) error {
  function OpenState (line 15) | func OpenState(fn string) (State, error) {

FILE: terminate.go
  function MakeTerminateChannel (line 15) | func MakeTerminateChannel() <-chan os.Signal {

FILE: unmarshal.go
  function UnmarshalRecord (line 12) | func UnmarshalRecord(journal *sdjournal.Journal, to *Record) error {
  function unmarshalRecord (line 22) | func unmarshalRecord(journal *sdjournal.Journal, toVal reflect.Value) er...

FILE: vendor/github.com/aws/aws-sdk-go/aws/awserr/error.go
  type Error (line 31) | type Error interface
  type BatchError (line 51) | type BatchError interface
  type BatchedErrors (line 70) | type BatchedErrors interface
  function New (line 82) | func New(code, message string, origErr error) Error {
  function NewBatchError (line 92) | func NewBatchError(code, message string, errs []error) BatchedErrors {
  type RequestFailure (line 129) | type RequestFailure interface
  function NewRequestFailure (line 143) | func NewRequestFailure(err Error, statusCode int, reqID string) RequestF...

FILE: vendor/github.com/aws/aws-sdk-go/aws/awserr/types.go
  function SprintError (line 9) | func SprintError(code, message, extra string, origErr error) string {
  type baseError (line 25) | type baseError struct
    method Error (line 62) | func (b baseError) Error() string {
    method String (line 73) | func (b baseError) String() string {
    method Code (line 78) | func (b baseError) Code() string {
    method Message (line 83) | func (b baseError) Message() string {
    method OrigErr (line 90) | func (b baseError) OrigErr() error {
    method OrigErrs (line 107) | func (b baseError) OrigErrs() []error {
  function newBaseError (line 47) | func newBaseError(code, message string, origErrs []error) *baseError {
  type awsError (line 113) | type awsError
  type requestError (line 118) | type requestError struct
    method Error (line 142) | func (r requestError) Error() string {
    method String (line 150) | func (r requestError) String() string {
    method StatusCode (line 155) | func (r requestError) StatusCode() int {
    method RequestID (line 160) | func (r requestError) RequestID() string {
    method OrigErrs (line 166) | func (r requestError) OrigErrs() []error {
  function newRequestError (line 132) | func newRequestError(err Error, statusCode int, requestID string) *reque...
  type errorList (line 174) | type errorList
    method Error (line 179) | func (e errorList) Error() string {

FILE: vendor/github.com/aws/aws-sdk-go/aws/awsutil/copy.go
  function Copy (line 15) | func Copy(dst, src interface{}) {
  function CopyOf (line 26) | func CopyOf(src interface{}) (dst interface{}) {
  function rcopy (line 37) | func rcopy(dst, src reflect.Value, root bool) {

FILE: vendor/github.com/aws/aws-sdk-go/aws/awsutil/equal.go
  function DeepEqual (line 13) | func DeepEqual(a, b interface{}) bool {

FILE: vendor/github.com/aws/aws-sdk-go/aws/awsutil/path_value.go
  function rValuesAtPath (line 16) | func rValuesAtPath(v interface{}, path string, createPath, caseSensitive...
  function ValuesAtPath (line 158) | func ValuesAtPath(i interface{}, path string) ([]interface{}, error) {
  function SetValueAtPath (line 187) | func SetValueAtPath(i interface{}, path string, v interface{}) {
  function setValue (line 198) | func setValue(dstVal reflect.Value, src interface{}) {

FILE: vendor/github.com/aws/aws-sdk-go/aws/awsutil/prettify.go
  function Prettify (line 12) | func Prettify(i interface{}) string {
  function prettify (line 20) | func prettify(v reflect.Value, indent int, buf *bytes.Buffer) {

FILE: vendor/github.com/aws/aws-sdk-go/aws/awsutil/string_value.go
  function StringValue (line 11) | func StringValue(i interface{}) string {
  function stringValue (line 17) | func stringValue(v reflect.Value, indent int, buf *bytes.Buffer) {

FILE: vendor/github.com/aws/aws-sdk-go/aws/client/client.go
  type Config (line 14) | type Config struct
  type ConfigProvider (line 22) | type ConfigProvider interface
  type Client (line 28) | type Client struct
    method NewRequest (line 70) | func (c *Client) NewRequest(operation *request.Operation, params inter...
    method AddDebugHandlers (line 76) | func (c *Client) AddDebugHandlers() {
  function New (line 37) | func New(cfg aws.Config, info metadata.ClientInfo, handlers request.Hand...
  constant logReqMsg (line 85) | logReqMsg = `DEBUG: Request %s/%s Details:
  constant logReqErrMsg (line 90) | logReqErrMsg = `DEBUG ERROR: Request %s/%s:
  function logRequest (line 95) | func logRequest(r *request.Request) {
  constant logRespMsg (line 114) | logRespMsg = `DEBUG: Response %s/%s Details:
  constant logRespErrMsg (line 119) | logRespErrMsg = `DEBUG ERROR: Response %s/%s:
  function logResponse (line 124) | func logResponse(r *request.Request) {

FILE: vendor/github.com/aws/aws-sdk-go/aws/client/default_retryer.go
  type DefaultRetryer (line 23) | type DefaultRetryer struct
    method MaxRetries (line 29) | func (d DefaultRetryer) MaxRetries() int {
    method RetryRules (line 36) | func (d DefaultRetryer) RetryRules(r *request.Request) time.Duration {
    method ShouldRetry (line 56) | func (d DefaultRetryer) ShouldRetry(r *request.Request) bool {
    method shouldThrottle (line 64) | func (d DefaultRetryer) shouldThrottle(r *request.Request) bool {
  type lockedSource (line 74) | type lockedSource struct
    method Int63 (line 79) | func (r *lockedSource) Int63() (n int64) {
    method Seed (line 86) | func (r *lockedSource) Seed(seed int64) {

FILE: vendor/github.com/aws/aws-sdk-go/aws/client/metadata/client_info.go
  type ClientInfo (line 4) | type ClientInfo struct

FILE: vendor/github.com/aws/aws-sdk-go/aws/config.go
  constant UseServiceDefaultRetries (line 13) | UseServiceDefaultRetries = -1
  type RequestRetryer (line 17) | type RequestRetryer interface
  type Config (line 32) | type Config struct
    method WithCredentialsChainVerboseErrors (line 209) | func (c *Config) WithCredentialsChainVerboseErrors(verboseErrs bool) *...
    method WithCredentials (line 216) | func (c *Config) WithCredentials(creds *credentials.Credentials) *Conf...
    method WithEndpoint (line 223) | func (c *Config) WithEndpoint(endpoint string) *Config {
    method WithRegion (line 230) | func (c *Config) WithRegion(region string) *Config {
    method WithDisableSSL (line 237) | func (c *Config) WithDisableSSL(disable bool) *Config {
    method WithHTTPClient (line 244) | func (c *Config) WithHTTPClient(client *http.Client) *Config {
    method WithMaxRetries (line 251) | func (c *Config) WithMaxRetries(max int) *Config {
    method WithDisableParamValidation (line 258) | func (c *Config) WithDisableParamValidation(disable bool) *Config {
    method WithDisableComputeChecksums (line 265) | func (c *Config) WithDisableComputeChecksums(disable bool) *Config {
    method WithLogLevel (line 272) | func (c *Config) WithLogLevel(level LogLevelType) *Config {
    method WithLogger (line 279) | func (c *Config) WithLogger(logger Logger) *Config {
    method WithS3ForcePathStyle (line 286) | func (c *Config) WithS3ForcePathStyle(force bool) *Config {
    method WithS3Disable100Continue (line 293) | func (c *Config) WithS3Disable100Continue(disable bool) *Config {
    method WithS3UseAccelerate (line 300) | func (c *Config) WithS3UseAccelerate(enable bool) *Config {
    method WithUseDualStack (line 307) | func (c *Config) WithUseDualStack(enable bool) *Config {
    method WithEC2MetadataDisableTimeoutOverride (line 314) | func (c *Config) WithEC2MetadataDisableTimeoutOverride(enable bool) *C...
    method WithSleepDelay (line 321) | func (c *Config) WithSleepDelay(fn func(time.Duration)) *Config {
    method MergeIn (line 327) | func (c *Config) MergeIn(cfgs ...*Config) {
    method Copy (line 413) | func (c *Config) Copy(cfgs ...*Config) *Config {
  function NewConfig (line 203) | func NewConfig() *Config {
  function mergeInConfig (line 333) | func mergeInConfig(dst *Config, other *Config) {

FILE: vendor/github.com/aws/aws-sdk-go/aws/convert_types.go
  function String (line 6) | func String(v string) *string {
  function StringValue (line 12) | func StringValue(v *string) string {
  function StringSlice (line 21) | func StringSlice(src []string) []*string {
  function StringValueSlice (line 31) | func StringValueSlice(src []*string) []string {
  function StringMap (line 43) | func StringMap(src map[string]string) map[string]*string {
  function StringValueMap (line 54) | func StringValueMap(src map[string]*string) map[string]string {
  function Bool (line 65) | func Bool(v bool) *bool {
  function BoolValue (line 71) | func BoolValue(v *bool) bool {
  function BoolSlice (line 80) | func BoolSlice(src []bool) []*bool {
  function BoolValueSlice (line 90) | func BoolValueSlice(src []*bool) []bool {
  function BoolMap (line 102) | func BoolMap(src map[string]bool) map[string]*bool {
  function BoolValueMap (line 113) | func BoolValueMap(src map[string]*bool) map[string]bool {
  function Int (line 124) | func Int(v int) *int {
  function IntValue (line 130) | func IntValue(v *int) int {
  function IntSlice (line 139) | func IntSlice(src []int) []*int {
  function IntValueSlice (line 149) | func IntValueSlice(src []*int) []int {
  function IntMap (line 161) | func IntMap(src map[string]int) map[string]*int {
  function IntValueMap (line 172) | func IntValueMap(src map[string]*int) map[string]int {
  function Int64 (line 183) | func Int64(v int64) *int64 {
  function Int64Value (line 189) | func Int64Value(v *int64) int64 {
  function Int64Slice (line 198) | func Int64Slice(src []int64) []*int64 {
  function Int64ValueSlice (line 208) | func Int64ValueSlice(src []*int64) []int64 {
  function Int64Map (line 220) | func Int64Map(src map[string]int64) map[string]*int64 {
  function Int64ValueMap (line 231) | func Int64ValueMap(src map[string]*int64) map[string]int64 {
  function Float64 (line 242) | func Float64(v float64) *float64 {
  function Float64Value (line 248) | func Float64Value(v *float64) float64 {
  function Float64Slice (line 257) | func Float64Slice(src []float64) []*float64 {
  function Float64ValueSlice (line 267) | func Float64ValueSlice(src []*float64) []float64 {
  function Float64Map (line 279) | func Float64Map(src map[string]float64) map[string]*float64 {
  function Float64ValueMap (line 290) | func Float64ValueMap(src map[string]*float64) map[string]float64 {
  function Time (line 301) | func Time(v time.Time) *time.Time {
  function TimeValue (line 307) | func TimeValue(v *time.Time) time.Time {
  function TimeUnixMilli (line 322) | func TimeUnixMilli(t time.Time) int64 {
  function TimeSlice (line 328) | func TimeSlice(src []time.Time) []*time.Time {
  function TimeValueSlice (line 338) | func TimeValueSlice(src []*time.Time) []time.Time {
  function TimeMap (line 350) | func TimeMap(src map[string]time.Time) map[string]*time.Time {
  function TimeValueMap (line 361) | func TimeValueMap(src map[string]*time.Time) map[string]time.Time {

FILE: vendor/github.com/aws/aws-sdk-go/aws/corehandlers/handlers.go
  type lener (line 20) | type lener interface

FILE: vendor/github.com/aws/aws-sdk-go/aws/credentials/chain_provider.go
  type ChainProvider (line 53) | type ChainProvider struct
    method Retrieve (line 72) | func (c *ChainProvider) Retrieve() (Value, error) {
    method IsExpired (line 94) | func (c *ChainProvider) IsExpired() bool {
  function NewChainCredentials (line 61) | func NewChainCredentials(providers []Provider) *Credentials {

FILE: vendor/github.com/aws/aws-sdk-go/aws/credentials/credentials.go
  type Value (line 70) | type Value struct
  type Provider (line 90) | type Provider interface
  type Expiry (line 111) | type Expiry struct
    method SetExpiration (line 129) | func (e *Expiry) SetExpiration(expiration time.Time, window time.Durat...
    method IsExpired (line 137) | func (e *Expiry) IsExpired() bool {
  type Credentials (line 155) | type Credentials struct
    method Get (line 180) | func (c *Credentials) Get() (Value, error) {
    method Expire (line 201) | func (c *Credentials) Expire() {
    method IsExpired (line 213) | func (c *Credentials) IsExpired() bool {
    method isExpired (line 221) | func (c *Credentials) isExpired() bool {
  function NewCredentials (line 164) | func NewCredentials(provider Provider) *Credentials {

FILE: vendor/github.com/aws/aws-sdk-go/aws/credentials/ec2rolecreds/ec2_role_provider.go
  constant ProviderName (line 18) | ProviderName = "EC2RoleProvider"
  type EC2RoleProvider (line 37) | type EC2RoleProvider struct
    method Retrieve (line 88) | func (m *EC2RoleProvider) Retrieve() (credentials.Value, error) {
  function NewCredentials (line 58) | func NewCredentials(c client.ConfigProvider, options ...func(*EC2RolePro...
  function NewCredentialsWithClient (line 73) | func NewCredentialsWithClient(client *ec2metadata.EC2Metadata, options ....
  type ec2RoleCredRespBody (line 116) | type ec2RoleCredRespBody struct
  constant iamSecurityCredsPath (line 128) | iamSecurityCredsPath = "/iam/security-credentials"
  function requestCredList (line 132) | func requestCredList(client *ec2metadata.EC2Metadata) ([]string, error) {
  function requestCred (line 155) | func requestCred(client *ec2metadata.EC2Metadata, credsName string) (ec2...

FILE: vendor/github.com/aws/aws-sdk-go/aws/credentials/endpointcreds/provider.go
  constant ProviderName (line 45) | ProviderName = `CredentialsEndpointProvider`
  type Provider (line 49) | type Provider struct
    method IsExpired (line 104) | func (p *Provider) IsExpired() bool {
    method Retrieve (line 113) | func (p *Provider) Retrieve() (credentials.Value, error) {
    method getCredentials (line 146) | func (p *Provider) getCredentials() (*getCredentialsOutput, error) {
  function NewProviderClient (line 72) | func NewProviderClient(cfg aws.Config, handlers request.Handlers, endpoi...
  function NewCredentialsClient (line 98) | func NewCredentialsClient(cfg aws.Config, handlers request.Handlers, end...
  type getCredentialsOutput (line 134) | type getCredentialsOutput struct
  type errorOutput (line 141) | type errorOutput struct
  function validateEndpointHandler (line 159) | func validateEndpointHandler(r *request.Request) {
  function unmarshalHandler (line 165) | func unmarshalHandler(r *request.Request) {
  function unmarshalError (line 177) | func unmarshalError(r *request.Request) {

FILE: vendor/github.com/aws/aws-sdk-go/aws/credentials/env_provider.go
  constant EnvProviderName (line 10) | EnvProviderName = "EnvProvider"
  type EnvProvider (line 33) | type EnvProvider struct
    method Retrieve (line 44) | func (e *EnvProvider) Retrieve() (Value, error) {
    method IsExpired (line 75) | func (e *EnvProvider) IsExpired() bool {
  function NewEnvCredentials (line 39) | func NewEnvCredentials() *Credentials {

FILE: vendor/github.com/aws/aws-sdk-go/aws/credentials/shared_credentials_provider.go
  constant SharedCredsProviderName (line 14) | SharedCredsProviderName = "SharedCredentialsProvider"
  type SharedCredentialsProvider (line 27) | type SharedCredentialsProvider struct
    method Retrieve (line 56) | func (p *SharedCredentialsProvider) Retrieve() (Value, error) {
    method IsExpired (line 74) | func (p *SharedCredentialsProvider) IsExpired() bool {
    method filename (line 119) | func (p *SharedCredentialsProvider) filename() (string, error) {
    method profile (line 142) | func (p *SharedCredentialsProvider) profile() string {
  function NewSharedCredentials (line 47) | func NewSharedCredentials(filename, profile string) *Credentials {
  function loadProfile (line 81) | func loadProfile(filename, profile string) (Value, error) {

FILE: vendor/github.com/aws/aws-sdk-go/aws/credentials/static_provider.go
  constant StaticProviderName (line 8) | StaticProviderName = "StaticProvider"
  type StaticProvider (line 19) | type StaticProvider struct
    method Retrieve (line 41) | func (s *StaticProvider) Retrieve() (Value, error) {
    method IsExpired (line 55) | func (s *StaticProvider) IsExpired() bool {
  function NewStaticCredentials (line 25) | func NewStaticCredentials(id, secret, token string) *Credentials {
  function NewStaticCredentialsFromCreds (line 36) | func NewStaticCredentialsFromCreds(creds Value) *Credentials {

FILE: vendor/github.com/aws/aws-sdk-go/aws/credentials/stscreds/assume_role_provider.go
  constant ProviderName (line 18) | ProviderName = "AssumeRoleProvider"
  type AssumeRoler (line 21) | type AssumeRoler interface
  type AssumeRoleProvider (line 32) | type AssumeRoleProvider struct
    method Retrieve (line 122) | func (p *AssumeRoleProvider) Retrieve() (credentials.Value, error) {
  function NewCredentials (line 88) | func NewCredentials(c client.ConfigProvider, roleARN string, options ......
  function NewCredentialsWithClient (line 107) | func NewCredentialsWithClient(svc AssumeRoler, roleARN string, options ....

FILE: vendor/github.com/aws/aws-sdk-go/aws/defaults/defaults.go
  type Defaults (line 27) | type Defaults struct
  function Get (line 33) | func Get() Defaults {
  function Config (line 51) | func Config() *aws.Config {
  function Handlers (line 67) | func Handlers() request.Handlers {
  function CredChain (line 87) | func CredChain(cfg *aws.Config, handlers request.Handlers) *credentials....
  function RemoteCredProvider (line 100) | func RemoteCredProvider(cfg aws.Config, handlers request.Handlers) crede...
  function ecsCredProvider (line 110) | func ecsCredProvider(cfg aws.Config, handlers request.Handlers, uri stri...
  function ec2RoleProvider (line 121) | func ec2RoleProvider(cfg aws.Config, handlers request.Handlers) credenti...

FILE: vendor/github.com/aws/aws-sdk-go/aws/ec2metadata/api.go
  method GetMetadata (line 17) | func (c *EC2Metadata) GetMetadata(p string) (string, error) {
  method GetDynamicData (line 33) | func (c *EC2Metadata) GetDynamicData(p string) (string, error) {
  method GetInstanceIdentityDocument (line 49) | func (c *EC2Metadata) GetInstanceIdentityDocument() (EC2InstanceIdentity...
  method IAMInfo (line 68) | func (c *EC2Metadata) IAMInfo() (EC2IAMInfo, error) {
  method Region (line 93) | func (c *EC2Metadata) Region() (string, error) {
  method Available (line 106) | func (c *EC2Metadata) Available() bool {
  type EC2IAMInfo (line 116) | type EC2IAMInfo struct
  type EC2InstanceIdentityDocument (line 125) | type EC2InstanceIdentityDocument struct

FILE: vendor/github.com/aws/aws-sdk-go/aws/ec2metadata/service.go
  constant ServiceName (line 20) | ServiceName = "ec2metadata"
  type EC2Metadata (line 23) | type EC2Metadata struct
  function New (line 37) | func New(p client.ConfigProvider, cfgs ...*aws.Config) *EC2Metadata {
  function NewClient (line 49) | func NewClient(cfg aws.Config, handlers request.Handlers, endpoint, sign...
  function httpClientZero (line 86) | func httpClientZero(c *http.Client) bool {
  type metadataOutput (line 90) | type metadataOutput struct
  function unmarshalHandler (line 94) | func unmarshalHandler(r *request.Request) {
  function unmarshalError (line 107) | func unmarshalError(r *request.Request) {
  function validateEndpointHandler (line 120) | func validateEndpointHandler(r *request.Request) {

FILE: vendor/github.com/aws/aws-sdk-go/aws/logger.go
  type LogLevelType (line 10) | type LogLevelType
    method Value (line 20) | func (l *LogLevelType) Value() LogLevelType {
    method Matches (line 30) | func (l *LogLevelType) Matches(v LogLevelType) bool {
    method AtLeast (line 38) | func (l *LogLevelType) AtLeast(v LogLevelType) bool {
  function LogLevel (line 14) | func LogLevel(l LogLevelType) *LogLevelType {
  constant LogOff (line 46) | LogOff LogLevelType = iota * 0x1000
  constant LogDebug (line 50) | LogDebug
  constant LogDebugWithSigning (line 58) | LogDebugWithSigning LogLevelType = LogDebug | (1 << iota)
  constant LogDebugWithHTTPBody (line 64) | LogDebugWithHTTPBody
  constant LogDebugWithRequestRetries (line 69) | LogDebugWithRequestRetries
  constant LogDebugWithRequestErrors (line 73) | LogDebugWithRequestErrors
  type Logger (line 78) | type Logger interface
  type LoggerFunc (line 89) | type LoggerFunc
    method Log (line 92) | func (f LoggerFunc) Log(args ...interface{}) {
  function NewDefaultLogger (line 98) | func NewDefaultLogger() Logger {
  type defaultLogger (line 105) | type defaultLogger struct
    method Log (line 110) | func (l defaultLogger) Log(args ...interface{}) {

FILE: vendor/github.com/aws/aws-sdk-go/aws/request/handlers.go
  type Handlers (line 10) | type Handlers struct
    method Copy (line 24) | func (h *Handlers) Copy() Handlers {
    method Clear (line 40) | func (h *Handlers) Clear() {
  type HandlerListRunItem (line 55) | type HandlerListRunItem struct
  type HandlerList (line 62) | type HandlerList struct
    method copy (line 84) | func (l *HandlerList) copy() HandlerList {
    method Clear (line 93) | func (l *HandlerList) Clear() {
    method Len (line 98) | func (l *HandlerList) Len() int {
    method PushBack (line 103) | func (l *HandlerList) PushBack(f func(*Request)) {
    method PushFront (line 108) | func (l *HandlerList) PushFront(f func(*Request)) {
    method PushBackNamed (line 113) | func (l *HandlerList) PushBackNamed(n NamedHandler) {
    method PushFrontNamed (line 118) | func (l *HandlerList) PushFrontNamed(n NamedHandler) {
    method Remove (line 123) | func (l *HandlerList) Remove(n NamedHandler) {
    method Run (line 134) | func (l *HandlerList) Run(r *Request) {
  type NamedHandler (line 78) | type NamedHandler struct
  function HandlerListLogItem (line 149) | func HandlerListLogItem(item HandlerListRunItem) bool {
  function HandlerListStopOnError (line 162) | func HandlerListStopOnError(item HandlerListRunItem) bool {
  function MakeAddToUserAgentHandler (line 171) | func MakeAddToUserAgentHandler(name, version string, extra ...string) fu...
  function MakeAddToUserAgentFreeFormHandler (line 183) | func MakeAddToUserAgentFreeFormHandler(s string) func(*Request) {

FILE: vendor/github.com/aws/aws-sdk-go/aws/request/http_request.go
  function copyHTTPRequest (line 11) | func copyHTTPRequest(r *http.Request, body io.ReadCloser) *http.Request {

FILE: vendor/github.com/aws/aws-sdk-go/aws/request/http_request_1_4.go
  function copyHTTPRequest (line 11) | func copyHTTPRequest(r *http.Request, body io.ReadCloser) *http.Request {

FILE: vendor/github.com/aws/aws-sdk-go/aws/request/offset_reader.go
  type offsetReader (line 10) | type offsetReader struct
    method Close (line 25) | func (o *offsetReader) Close() error {
    method Read (line 33) | func (o *offsetReader) Read(p []byte) (int, error) {
    method CloseAndCopy (line 46) | func (o *offsetReader) CloseAndCopy(offset int64) *offsetReader {
  function newOffsetReader (line 16) | func newOffsetReader(buf io.ReadSeeker, offset int64) *offsetReader {

FILE: vendor/github.com/aws/aws-sdk-go/aws/request/request.go
  type Request (line 20) | type Request struct
    method WillRetry (line 107) | func (r *Request) WillRetry() bool {
    method ParamsFilled (line 114) | func (r *Request) ParamsFilled() bool {
    method DataFilled (line 121) | func (r *Request) DataFilled() bool {
    method SetBufferBody (line 127) | func (r *Request) SetBufferBody(buf []byte) {
    method SetStringBody (line 132) | func (r *Request) SetStringBody(s string) {
    method SetReaderBody (line 137) | func (r *Request) SetReaderBody(reader io.ReadSeeker) {
    method Presign (line 144) | func (r *Request) Presign(expireTime time.Duration) (string, error) {
    method PresignRequest (line 156) | func (r *Request) PresignRequest(expireTime time.Duration) (string, ht...
    method Build (line 190) | func (r *Request) Build() error {
    method Sign (line 212) | func (r *Request) Sign() error {
    method Send (line 234) | func (r *Request) Send() error {
  type Operation (line 48) | type Operation struct
  type Paginator (line 56) | type Paginator struct
  function New (line 69) | func New(cfg aws.Config, clientInfo metadata.ClientInfo, handlers Handlers,
  function debugLogReqError (line 166) | func debugLogReqError(r *Request, stage string, retrying bool, err error) {
  function AddToUserAgent (line 320) | func AddToUserAgent(r *Request, s string) {

FILE: vendor/github.com/aws/aws-sdk-go/aws/request/request_pagination.go
  method HasNextPage (line 17) | func (r *Request) HasNextPage() bool {
  method nextPageTokens (line 23) | func (r *Request) nextPageTokens() []interface{} {
  method NextPage (line 66) | func (r *Request) NextPage() *Request {
  method EachPage (line 93) | func (r *Request) EachPage(fn func(data interface{}, isLastPage bool) (s...

FILE: vendor/github.com/aws/aws-sdk-go/aws/request/retryer.go
  type Retryer (line 13) | type Retryer interface
  function WithRetryer (line 21) | func WithRetryer(cfg *aws.Config, retryer Retryer) *aws.Config {
  function isCodeThrottle (line 52) | func isCodeThrottle(code string) bool {
  function isCodeRetryable (line 57) | func isCodeRetryable(code string) bool {
  function isCodeExpiredCreds (line 65) | func isCodeExpiredCreds(code string) bool {
  method IsErrorRetryable (line 72) | func (r *Request) IsErrorRetryable() bool {
  method IsErrorThrottle (line 83) | func (r *Request) IsErrorThrottle() bool {
  method IsErrorExpired (line 94) | func (r *Request) IsErrorExpired() bool {

FILE: vendor/github.com/aws/aws-sdk-go/aws/request/validation.go
  constant InvalidParameterErrCode (line 12) | InvalidParameterErrCode = "InvalidParameter"
  constant ParamRequiredErrCode (line 14) | ParamRequiredErrCode = "ParamRequiredError"
  constant ParamMinValueErrCode (line 17) | ParamMinValueErrCode = "ParamMinValueError"
  constant ParamMinLenErrCode (line 19) | ParamMinLenErrCode = "ParamMinLenError"
  type Validator (line 25) | type Validator interface
  type ErrInvalidParams (line 31) | type ErrInvalidParams struct
    method Add (line 40) | func (e *ErrInvalidParams) Add(err ErrInvalidParam) {
    method AddNested (line 50) | func (e *ErrInvalidParams) AddNested(nestedCtx string, nested ErrInval...
    method Len (line 59) | func (e ErrInvalidParams) Len() int {
    method Code (line 64) | func (e ErrInvalidParams) Code() string {
    method Message (line 69) | func (e ErrInvalidParams) Message() string {
    method Error (line 74) | func (e ErrInvalidParams) Error() string {
    method OrigErr (line 86) | func (e ErrInvalidParams) OrigErr() error {
    method OrigErrs (line 92) | func (e ErrInvalidParams) OrigErrs() []error {
  type ErrInvalidParam (line 102) | type ErrInvalidParam interface
  type errInvalidParam (line 115) | type errInvalidParam struct
    method Code (line 124) | func (e *errInvalidParam) Code() string {
    method Message (line 129) | func (e *errInvalidParam) Message() string {
    method Error (line 134) | func (e *errInvalidParam) Error() string {
    method OrigErr (line 139) | func (e *errInvalidParam) OrigErr() error {
    method Field (line 144) | func (e *errInvalidParam) Field() string {
    method SetContext (line 158) | func (e *errInvalidParam) SetContext(ctx string) {
    method AddNestedContext (line 163) | func (e *errInvalidParam) AddNestedContext(ctx string) {
  type ErrParamRequired (line 173) | type ErrParamRequired struct
  function NewErrParamRequired (line 178) | func NewErrParamRequired(field string) *ErrParamRequired {
  type ErrParamMinValue (line 189) | type ErrParamMinValue struct
    method MinValue (line 209) | func (e *ErrParamMinValue) MinValue() float64 {
  function NewErrParamMinValue (line 195) | func NewErrParamMinValue(field string, min float64) *ErrParamMinValue {
  type ErrParamMinLen (line 214) | type ErrParamMinLen struct
    method MinLen (line 232) | func (e *ErrParamMinLen) MinLen() int {
  function NewErrParamMinLen (line 220) | func NewErrParamMinLen(field string, min int) *ErrParamMinLen {

FILE: vendor/github.com/aws/aws-sdk-go/aws/session/env_config.go
  type envConfig (line 15) | type envConfig struct
  function loadEnvConfig (line 109) | func loadEnvConfig() envConfig {
  function loadSharedEnvConfig (line 120) | func loadSharedEnvConfig() envConfig {
  function envConfigLoad (line 124) | func envConfigLoad(enableSharedConfig bool) envConfig {
  function setFromEnvVal (line 156) | func setFromEnvVal(dst *string, keys []string) {
  function sharedCredentialsFilename (line 165) | func sharedCredentialsFilename() string {
  function sharedConfigFilename (line 173) | func sharedConfigFilename() string {
  function userHomeDir (line 181) | func userHomeDir() string {

FILE: vendor/github.com/aws/aws-sdk-go/aws/session/session.go
  type Session (line 24) | type Session struct
    method Copy (line 358) | func (s *Session) Copy(cfgs ...*aws.Config) *Session {
    method ClientConfig (line 372) | func (s *Session) ClientConfig(serviceName string, cfgs ...*aws.Config...
  function New (line 50) | func New(cfgs ...*aws.Config) *Session {
  function NewSession (line 94) | func NewSession(cfgs ...*aws.Config) (*Session, error) {
  type SharedConfigState (line 103) | type SharedConfigState
  constant SharedConfigStateFromEnv (line 109) | SharedConfigStateFromEnv SharedConfigState = iota
  constant SharedConfigDisable (line 113) | SharedConfigDisable
  constant SharedConfigEnable (line 117) | SharedConfigEnable
  type Options (line 123) | type Options struct
  function NewSessionWithOptions (line 181) | func NewSessionWithOptions(opts Options) (*Session, error) {
  function Must (line 205) | func Must(sess *Session, err error) *Session {
  function oldNewSession (line 213) | func oldNewSession(cfgs ...*aws.Config) *Session {
  function newSession (line 235) | func newSession(envCfg envConfig, cfgs ...*aws.Config) (*Session, error) {
  function mergeConfigSrcs (line 271) | func mergeConfigSrcs(cfg, userCfg *aws.Config, envCfg envConfig, sharedC...
  type credProviderError (line 331) | type credProviderError struct
    method Retrieve (line 337) | func (c credProviderError) Retrieve() (credentials.Value, error) {
    method IsExpired (line 340) | func (c credProviderError) IsExpired() bool {
  function initHandlers (line 344) | func initHandlers(s *Session) {

FILE: vendor/github.com/aws/aws-sdk-go/aws/session/shared_config.go
  constant accessKeyIDKey (line 14) | accessKeyIDKey  = `aws_access_key_id`
  constant secretAccessKey (line 15) | secretAccessKey = `aws_secret_access_key`
  constant sessionTokenKey (line 16) | sessionTokenKey = `aws_session_token`
  constant roleArnKey (line 19) | roleArnKey         = `role_arn`
  constant sourceProfileKey (line 20) | sourceProfileKey   = `source_profile`
  constant externalIDKey (line 21) | externalIDKey      = `external_id`
  constant mfaSerialKey (line 22) | mfaSerialKey       = `mfa_serial`
  constant roleSessionNameKey (line 23) | roleSessionNameKey = `role_session_name`
  constant regionKey (line 26) | regionKey = `region`
  constant DefaultSharedConfigProfile (line 31) | DefaultSharedConfigProfile = `default`
  type assumeRoleConfig (line 34) | type assumeRoleConfig struct
  type sharedConfig (line 43) | type sharedConfig struct
    method setAssumeRoleSource (line 126) | func (cfg *sharedConfig) setAssumeRoleSource(origProfile string, files...
    method setFromIniFiles (line 149) | func (cfg *sharedConfig) setFromIniFiles(profile string, files []share...
    method setFromIniFile (line 172) | func (cfg *sharedConfig) setFromIniFile(profile string, file sharedCon...
  type sharedConfigFile (line 65) | type sharedConfigFile struct
  function loadSharedConfig (line 80) | func loadSharedConfig(profile string, filenames []string) (sharedConfig,...
  function loadSharedConfigIniFiles (line 104) | func loadSharedConfigIniFiles(filenames []string) ([]sharedConfigFile, e...
  type SharedConfigLoadError (line 216) | type SharedConfigLoadError struct
    method Code (line 222) | func (e SharedConfigLoadError) Code() string {
    method Message (line 227) | func (e SharedConfigLoadError) Message() string {
    method OrigErr (line 232) | func (e SharedConfigLoadError) OrigErr() error {
    method Error (line 237) | func (e SharedConfigLoadError) Error() string {
  type SharedConfigProfileNotExistsError (line 243) | type SharedConfigProfileNotExistsError struct
    method Code (line 249) | func (e SharedConfigProfileNotExistsError) Code() string {
    method Message (line 254) | func (e SharedConfigProfileNotExistsError) Message() string {
    method OrigErr (line 259) | func (e SharedConfigProfileNotExistsError) OrigErr() error {
    method Error (line 264) | func (e SharedConfigProfileNotExistsError) Error() string {
  type SharedConfigAssumeRoleError (line 271) | type SharedConfigAssumeRoleError struct
    method Code (line 276) | func (e SharedConfigAssumeRoleError) Code() string {
    method Message (line 281) | func (e SharedConfigAssumeRoleError) Message() string {
    method OrigErr (line 287) | func (e SharedConfigAssumeRoleError) OrigErr() error {
    method Error (line 292) | func (e SharedConfigAssumeRoleError) Error() string {

FILE: vendor/github.com/aws/aws-sdk-go/aws/signer/v4/header_rules.go
  type rules (line 10) | type rules
    method IsValid (line 20) | func (r rules) IsValid(value string) bool {
  type rule (line 14) | type rule interface
  type mapRule (line 30) | type mapRule
    method IsValid (line 33) | func (m mapRule) IsValid(value string) bool {
  type whitelist (line 39) | type whitelist struct
    method IsValid (line 44) | func (w whitelist) IsValid(value string) bool {
  type blacklist (line 49) | type blacklist struct
    method IsValid (line 54) | func (b blacklist) IsValid(value string) bool {
  type patterns (line 58) | type patterns
    method IsValid (line 62) | func (p patterns) IsValid(value string) bool {
  type inclusiveRules (line 72) | type inclusiveRules
    method IsValid (line 75) | func (r inclusiveRules) IsValid(value string) bool {

FILE: vendor/github.com/aws/aws-sdk-go/aws/signer/v4/v4.go
  constant authHeaderPrefix (line 28) | authHeaderPrefix = "AWS4-HMAC-SHA256"
  constant timeFormat (line 29) | timeFormat       = "20060102T150405Z"
  constant shortTimeFormat (line 30) | shortTimeFormat  = "20060102"
  constant emptyStringSHA256 (line 33) | emptyStringSHA256 = `e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca49...
  type Signer (line 100) | type Signer struct
    method Sign (line 187) | func (v4 Signer) Sign(r *http.Request, body io.ReadSeeker, service, re...
    method Presign (line 221) | func (v4 Signer) Presign(r *http.Request, body io.ReadSeeker, service,...
    method signWithBody (line 225) | func (v4 Signer) signWithBody(r *http.Request, body io.ReadSeeker, ser...
    method logSigningInfo (line 369) | func (v4 *Signer) logSigningInfo(ctx *signingCtx) {
  function NewSigner (line 131) | func NewSigner(credentials *credentials.Credentials, options ...func(*Si...
  type signingCtx (line 143) | type signingCtx struct
    method handlePresignRemoval (line 268) | func (ctx *signingCtx) handlePresignRemoval() {
    method assignAmzQueryValues (line 282) | func (ctx *signingCtx) assignAmzQueryValues() {
    method build (line 378) | func (ctx *signingCtx) build(disableHeaderHoisting bool) {
    method buildTime (line 411) | func (ctx *signingCtx) buildTime() {
    method buildCredentialString (line 424) | func (ctx *signingCtx) buildCredentialString() {
    method buildCanonicalHeaders (line 450) | func (ctx *signingCtx) buildCanonicalHeaders(r rule, header http.Heade...
    method buildCanonicalString (line 493) | func (ctx *signingCtx) buildCanonicalString() {
    method buildStringToSign (line 519) | func (ctx *signingCtx) buildStringToSign() {
    method buildSignature (line 528) | func (ctx *signingCtx) buildSignature() {
    method buildBodyDigest (line 538) | func (ctx *signingCtx) buildBodyDigest() {
    method isRequestSigned (line 556) | func (ctx *signingCtx) isRequestSigned() bool {
    method removePresign (line 568) | func (ctx *signingCtx) removePresign() {
  function SignSDKRequest (line 316) | func SignSDKRequest(req *request.Request) {
  function signSDKRequestWithCurrTime (line 319) | func signSDKRequestWithCurrTime(req *request.Request, curTimeFn func() t...
  constant logSignInfoMsg (line 359) | logSignInfoMsg = `DEBUG: Request Signiture:
  constant logSignedURLMsg (line 365) | logSignedURLMsg = `
  function buildQuery (line 437) | func buildQuery(r rule, header http.Header) (url.Values, http.Header) {
  function makeHmac (line 578) | func makeHmac(key []byte, data []byte) []byte {
  function makeSha256 (line 584) | func makeSha256(data []byte) []byte {
  function makeSha256Reader (line 590) | func makeSha256Reader(reader io.ReadSeeker) []byte {
  constant doubleSpaces (line 599) | doubleSpaces = "  "
  function stripExcessSpaces (line 603) | func stripExcessSpaces(headerVals []string) []string {

FILE: vendor/github.com/aws/aws-sdk-go/aws/types.go
  function ReadSeekCloser (line 9) | func ReadSeekCloser(r io.Reader) ReaderSeekerCloser {
  type ReaderSeekerCloser (line 15) | type ReaderSeekerCloser struct
    method Read (line 25) | func (r ReaderSeekerCloser) Read(p []byte) (int, error) {
    method Seek (line 39) | func (r ReaderSeekerCloser) Seek(offset int64, whence int) (int64, err...
    method Close (line 50) | func (r ReaderSeekerCloser) Close() error {
  type WriteAtBuffer (line 61) | type WriteAtBuffer struct
    method WriteAt (line 81) | func (b *WriteAtBuffer) WriteAt(p []byte, pos int64) (n int, err error) {
    method Bytes (line 102) | func (b *WriteAtBuffer) Bytes() []byte {
  function NewWriteAtBuffer (line 74) | func NewWriteAtBuffer(buf []byte) *WriteAtBuffer {

FILE: vendor/github.com/aws/aws-sdk-go/aws/version.go
  constant SDKName (line 5) | SDKName = "aws-sdk-go"
  constant SDKVersion (line 8) | SDKVersion = "1.4.10"

FILE: vendor/github.com/aws/aws-sdk-go/private/endpoints/endpoints.go
  function NormalizeEndpoint (line 17) | func NormalizeEndpoint(endpoint, serviceName, region string, disableSSL,...
  function EndpointForRegion (line 27) | func EndpointForRegion(svcName, region string, disableSSL, useDualStack ...
  function AddScheme (line 60) | func AddScheme(endpoint string, disableSSL bool) string {

FILE: vendor/github.com/aws/aws-sdk-go/private/endpoints/endpoints_map.go
  type endpointStruct (line 5) | type endpointStruct struct
  type endpointEntry (line 10) | type endpointEntry struct

FILE: vendor/github.com/aws/aws-sdk-go/private/protocol/idempotency.go
  constant idempotencyTokenFillTag (line 13) | idempotencyTokenFillTag = `idempotencyToken`
  function CanSetIdempotencyToken (line 20) | func CanSetIdempotencyToken(v reflect.Value, f reflect.StructField) bool {
  function GetIdempotencyToken (line 34) | func GetIdempotencyToken() string {
  function SetIdempotencyToken (line 43) | func SetIdempotencyToken(v reflect.Value) {
  function UUIDVersion4 (line 67) | func UUIDVersion4(u []byte) string {

FILE: vendor/github.com/aws/aws-sdk-go/private/protocol/json/jsonutil/build.go
  function BuildJSON (line 20) | func BuildJSON(v interface{}) ([]byte, error) {
  function buildAny (line 27) | func buildAny(value reflect.Value, buf *bytes.Buffer, tag reflect.Struct...
  function buildStruct (line 68) | func buildStruct(value reflect.Value, buf *bytes.Buffer, tag reflect.Str...
  function buildList (line 138) | func buildList(value reflect.Value, buf *bytes.Buffer, tag reflect.Struc...
  type sortedValues (line 154) | type sortedValues
    method Len (line 156) | func (sv sortedValues) Len() int           { return len(sv) }
    method Swap (line 157) | func (sv sortedValues) Swap(i, j int)      { sv[i], sv[j] = sv[j], sv[...
    method Less (line 158) | func (sv sortedValues) Less(i, j int) bool { return sv[i].String() < s...
  function buildMap (line 160) | func buildMap(value reflect.Value, buf *bytes.Buffer, tag reflect.Struct...
  function buildScalar (line 182) | func buildScalar(value reflect.Value, buf *bytes.Buffer, tag reflect.Str...
  function writeString (line 222) | func writeString(s string, buf *bytes.Buffer) {
  function elemOf (line 249) | func elemOf(value reflect.Value) reflect.Value {

FILE: vendor/github.com/aws/aws-sdk-go/private/protocol/json/jsonutil/unmarshal.go
  function UnmarshalJSON (line 14) | func UnmarshalJSON(v interface{}, stream io.Reader) error {
  function unmarshalAny (line 33) | func unmarshalAny(value reflect.Value, data interface{}, tag reflect.Str...
  function unmarshalStruct (line 72) | func unmarshalStruct(value reflect.Value, data interface{}, tag reflect....
  function unmarshalList (line 120) | func unmarshalList(value reflect.Value, data interface{}, tag reflect.St...
  function unmarshalMap (line 144) | func unmarshalMap(value reflect.Value, data interface{}, tag reflect.Str...
  function unmarshalScalar (line 168) | func unmarshalScalar(value reflect.Value, data interface{}, tag reflect....

FILE: vendor/github.com/aws/aws-sdk-go/private/protocol/jsonrpc/jsonrpc.go
  function Build (line 34) | func Build(req *request.Request) {
  function Unmarshal (line 62) | func Unmarshal(req *request.Request) {
  function UnmarshalMeta (line 74) | func UnmarshalMeta(req *request.Request) {
  function UnmarshalError (line 79) | func UnmarshalError(req *request.Request) {
  type jsonErrorResponse (line 108) | type jsonErrorResponse struct

FILE: vendor/github.com/aws/aws-sdk-go/private/protocol/query/build.go
  function Build (line 18) | func Build(r *request.Request) {

FILE: vendor/github.com/aws/aws-sdk-go/private/protocol/query/queryutil/queryutil.go
  function Parse (line 18) | func Parse(body url.Values, i interface{}, isEC2 bool) error {
  function elemOf (line 23) | func elemOf(value reflect.Value) reflect.Value {
  type queryParser (line 30) | type queryParser struct
    method parseValue (line 34) | func (q *queryParser) parseValue(v url.Values, value reflect.Value, pr...
    method parseStruct (line 66) | func (q *queryParser) parseStruct(v url.Values, value reflect.Value, p...
    method parseList (line 114) | func (q *queryParser) parseList(v url.Values, value reflect.Value, pre...
    method parseMap (line 140) | func (q *queryParser) parseMap(v url.Values, value reflect.Value, pref...
    method parseScalar (line 205) | func (q *queryParser) parseScalar(v url.Values, r reflect.Value, name ...

FILE: vendor/github.com/aws/aws-sdk-go/private/protocol/query/unmarshal.go
  function Unmarshal (line 20) | func Unmarshal(r *request.Request) {
  function UnmarshalMeta (line 33) | func UnmarshalMeta(r *request.Request) {

FILE: vendor/github.com/aws/aws-sdk-go/private/protocol/query/unmarshal_error.go
  type xmlErrorResponse (line 11) | type xmlErrorResponse struct
  type xmlServiceUnavailableResponse (line 18) | type xmlServiceUnavailableResponse struct
  function UnmarshalError (line 26) | func UnmarshalError(r *request.Request) {

FILE: vendor/github.com/aws/aws-sdk-go/private/protocol/rest/build.go
  constant RFC822 (line 22) | RFC822 = "Mon, 2 Jan 2006 15:04:05 GMT"
  function init (line 29) | func init() {
  function Build (line 46) | func Build(r *request.Request) {
  function buildLocationElements (line 54) | func buildLocationElements(r *request.Request, v reflect.Value) {
  function buildBody (line 98) | func buildBody(r *request.Request, v reflect.Value) {
  function buildHeader (line 123) | func buildHeader(header *http.Header, v reflect.Value, name string) error {
  function buildHeaderMap (line 136) | func buildHeaderMap(header *http.Header, v reflect.Value, prefix string)...
  function buildURI (line 151) | func buildURI(u *url.URL, v reflect.Value, name string) error {
  function buildQueryString (line 167) | func buildQueryString(query url.Values, v reflect.Value, name string) er...
  function updatePath (line 196) | func updatePath(url *url.URL, urlPath string) {
  function EscapePath (line 218) | func EscapePath(path string, encodeSep bool) string {
  function convertType (line 231) | func convertType(v reflect.Value) (string, error) {

FILE: vendor/github.com/aws/aws-sdk-go/private/protocol/rest/payload.go
  function PayloadMember (line 6) | func PayloadMember(i interface{}) interface{} {
  function PayloadType (line 32) | func PayloadType(i interface{}) string {

FILE: vendor/github.com/aws/aws-sdk-go/private/protocol/rest/unmarshal.go
  function Unmarshal (line 26) | func Unmarshal(r *request.Request) {
  function UnmarshalMeta (line 34) | func UnmarshalMeta(r *request.Request) {
  function unmarshalBody (line 46) | func unmarshalBody(r *request.Request, v reflect.Value) {
  function unmarshalLocationElements (line 91) | func unmarshalLocationElements(r *request.Request, v reflect.Value) {
  function unmarshalStatusCode (line 128) | func unmarshalStatusCode(v reflect.Value, statusCode int) {
  function unmarshalHeaderMap (line 140) | func unmarshalHeaderMap(r reflect.Value, headers http.Header, prefix str...
  function unmarshalHeader (line 155) | func unmarshalHeader(v reflect.Value, header string) error {

FILE: vendor/github.com/aws/aws-sdk-go/private/protocol/unmarshal.go
  function UnmarshalDiscardBody (line 14) | func UnmarshalDiscardBody(r *request.Request) {

FILE: vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil/build.go
  function BuildXML (line 18) | func BuildXML(params interface{}, e *xml.Encoder) error {
  function elemOf (line 33) | func elemOf(value reflect.Value) reflect.Value {
  type xmlBuilder (line 41) | type xmlBuilder struct
    method buildValue (line 51) | func (b *xmlBuilder) buildValue(value reflect.Value, current *XMLNode,...
    method buildStruct (line 88) | func (b *xmlBuilder) buildStruct(value reflect.Value, current *XMLNode...
    method buildList (line 162) | func (b *xmlBuilder) buildList(value reflect.Value, current *XMLNode, ...
    method buildMap (line 204) | func (b *xmlBuilder) buildMap(value reflect.Value, current *XMLNode, t...
    method buildScalar (line 258) | func (b *xmlBuilder) buildScalar(value reflect.Value, current *XMLNode...

FILE: vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil/unmarshal.go
  function UnmarshalXML (line 17) | func UnmarshalXML(v interface{}, d *xml.Decoder, wrapper string) error {
  function parse (line 42) | func parse(r reflect.Value, node *XMLNode, tag reflect.StructTag) error {
  function parseStruct (line 77) | func parseStruct(r reflect.Value, node *XMLNode, tag reflect.StructTag) ...
  function parseList (line 135) | func parseList(r reflect.Value, node *XMLNode, tag reflect.StructTag) er...
  function parseMap (line 174) | func parseMap(r reflect.Value, node *XMLNode, tag reflect.StructTag) err...
  function parseMapEntry (line 191) | func parseMapEntry(r reflect.Value, node *XMLNode, tag reflect.StructTag...
  function parseScalar (line 220) | func parseScalar(r reflect.Value, node *XMLNode, tag reflect.StructTag) ...

FILE: vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil/xml_to_struct.go
  type XMLNode (line 10) | type XMLNode struct
    method AddChild (line 27) | func (n *XMLNode) AddChild(child *XMLNode) {
  function NewXMLElement (line 18) | func NewXMLElement(name xml.Name) *XMLNode {
  function XMLToStruct (line 35) | func XMLToStruct(d *xml.Decoder, s *xml.StartElement) (*XMLNode, error) {
  function StructToXML (line 78) | func StructToXML(e *xml.Encoder, node *XMLNode, sorted bool) error {

FILE: vendor/github.com/aws/aws-sdk-go/service/cloudwatchlogs/api.go
  constant opCancelExportTask (line 15) | opCancelExportTask = "CancelExportTask"
  method CancelExportTaskRequest (line 39) | func (c *CloudWatchLogs) CancelExportTaskRequest(input *CancelExportTask...
  method CancelExportTask (line 59) | func (c *CloudWatchLogs) CancelExportTask(input *CancelExportTaskInput) ...
  constant opCreateExportTask (line 65) | opCreateExportTask = "CreateExportTask"
  method CreateExportTaskRequest (line 89) | func (c *CloudWatchLogs) CreateExportTaskRequest(input *CreateExportTask...
  method CreateExportTask (line 119) | func (c *CloudWatchLogs) CreateExportTask(input *CreateExportTaskInput) ...
  constant opCreateLogGroup (line 125) | opCreateLogGroup = "CreateLogGroup"
  method CreateLogGroupRequest (line 149) | func (c *CloudWatchLogs) CreateLogGroupRequest(input *CreateLogGroupInpu...
  method CreateLogGroup (line 178) | func (c *CloudWatchLogs) CreateLogGroup(input *CreateLogGroupInput) (*Cr...
  constant opCreateLogStream (line 184) | opCreateLogStream = "CreateLogStream"
  method CreateLogStreamRequest (line 208) | func (c *CloudWatchLogs) CreateLogStreamRequest(input *CreateLogStreamIn...
  method CreateLogStream (line 236) | func (c *CloudWatchLogs) CreateLogStream(input *CreateLogStreamInput) (*...
  constant opDeleteDestination (line 242) | opDeleteDestination = "DeleteDestination"
  method DeleteDestinationRequest (line 266) | func (c *CloudWatchLogs) DeleteDestinationRequest(input *DeleteDestinati...
  method DeleteDestination (line 288) | func (c *CloudWatchLogs) DeleteDestination(input *DeleteDestinationInput...
  constant opDeleteLogGroup (line 294) | opDeleteLogGroup = "DeleteLogGroup"
  method DeleteLogGroupRequest (line 318) | func (c *CloudWatchLogs) DeleteLogGroupRequest(input *DeleteLogGroupInpu...
  method DeleteLogGroup (line 339) | func (c *CloudWatchLogs) DeleteLogGroup(input *DeleteLogGroupInput) (*De...
  constant opDeleteLogStream (line 345) | opDeleteLogStream = "DeleteLogStream"
  method DeleteLogStreamRequest (line 369) | func (c *CloudWatchLogs) DeleteLogStreamRequest(input *DeleteLogStreamIn...
  method DeleteLogStream (line 390) | func (c *CloudWatchLogs) DeleteLogStream(input *DeleteLogStreamInput) (*...
  constant opDeleteMetricFilter (line 396) | opDeleteMetricFilter = "DeleteMetricFilter"
  method DeleteMetricFilterRequest (line 420) | func (c *CloudWatchLogs) DeleteMetricFilterRequest(input *DeleteMetricFi...
  method DeleteMetricFilter (line 440) | func (c *CloudWatchLogs) DeleteMetricFilter(input *DeleteMetricFilterInp...
  constant opDeleteRetentionPolicy (line 446) | opDeleteRetentionPolicy = "DeleteRetentionPolicy"
  method DeleteRetentionPolicyRequest (line 470) | func (c *CloudWatchLogs) DeleteRetentionPolicyRequest(input *DeleteReten...
  method DeleteRetentionPolicy (line 491) | func (c *CloudWatchLogs) DeleteRetentionPolicy(input *DeleteRetentionPol...
  constant opDeleteSubscriptionFilter (line 497) | opDeleteSubscriptionFilter = "DeleteSubscriptionFilter"
  method DeleteSubscriptionFilterRequest (line 521) | func (c *CloudWatchLogs) DeleteSubscriptionFilterRequest(input *DeleteSu...
  method DeleteSubscriptionFilter (line 541) | func (c *CloudWatchLogs) DeleteSubscriptionFilter(input *DeleteSubscript...
  constant opDescribeDestinations (line 547) | opDescribeDestinations = "DescribeDestinations"
  method DescribeDestinationsRequest (line 571) | func (c *CloudWatchLogs) DescribeDestinationsRequest(input *DescribeDest...
  method DescribeDestinations (line 602) | func (c *CloudWatchLogs) DescribeDestinations(input *DescribeDestination...
  method DescribeDestinationsPages (line 625) | func (c *CloudWatchLogs) DescribeDestinationsPages(input *DescribeDestin...
  constant opDescribeExportTasks (line 633) | opDescribeExportTasks = "DescribeExportTasks"
  method DescribeExportTasksRequest (line 657) | func (c *CloudWatchLogs) DescribeExportTasksRequest(input *DescribeExpor...
  method DescribeExportTasks (line 682) | func (c *CloudWatchLogs) DescribeExportTasks(input *DescribeExportTasksI...
  constant opDescribeLogGroups (line 688) | opDescribeLogGroups = "DescribeLogGroups"
  method DescribeLogGroupsRequest (line 712) | func (c *CloudWatchLogs) DescribeLogGroupsRequest(input *DescribeLogGrou...
  method DescribeLogGroups (line 743) | func (c *CloudWatchLogs) DescribeLogGroups(input *DescribeLogGroupsInput...
  method DescribeLogGroupsPages (line 766) | func (c *CloudWatchLogs) DescribeLogGroupsPages(input *DescribeLogGroups...
  constant opDescribeLogStreams (line 774) | opDescribeLogStreams = "DescribeLogStreams"
  method DescribeLogStreamsRequest (line 798) | func (c *CloudWatchLogs) DescribeLogStreamsRequest(input *DescribeLogStr...
  method DescribeLogStreams (line 830) | func (c *CloudWatchLogs) DescribeLogStreams(input *DescribeLogStreamsInp...
  method DescribeLogStreamsPages (line 853) | func (c *CloudWatchLogs) DescribeLogStreamsPages(input *DescribeLogStrea...
  constant opDescribeMetricFilters (line 861) | opDescribeMetricFilters = "DescribeMetricFilters"
  method DescribeMetricFiltersRequest (line 885) | func (c *CloudWatchLogs) DescribeMetricFiltersRequest(input *DescribeMet...
  method DescribeMetricFilters (line 915) | func (c *CloudWatchLogs) DescribeMetricFilters(input *DescribeMetricFilt...
  method DescribeMetricFiltersPages (line 938) | func (c *CloudWatchLogs) DescribeMetricFiltersPages(input *DescribeMetri...
  constant opDescribeSubscriptionFilters (line 946) | opDescribeSubscriptionFilters = "DescribeSubscriptionFilters"
  method DescribeSubscriptionFiltersRequest (line 970) | func (c *CloudWatchLogs) DescribeSubscriptionFiltersRequest(input *Descr...
  method DescribeSubscriptionFilters (line 1001) | func (c *CloudWatchLogs) DescribeSubscriptionFilters(input *DescribeSubs...
  method DescribeSubscriptionFiltersPages (line 1024) | func (c *CloudWatchLogs) DescribeSubscriptionFiltersPages(input *Describ...
  constant opFilterLogEvents (line 1032) | opFilterLogEvents = "FilterLogEvents"
  method FilterLogEventsRequest (line 1056) | func (c *CloudWatchLogs) FilterLogEventsRequest(input *FilterLogEventsIn...
  method FilterLogEvents (line 1093) | func (c *CloudWatchLogs) FilterLogEvents(input *FilterLogEventsInput) (*...
  method FilterLogEventsPages (line 1116) | func (c *CloudWatchLogs) FilterLogEventsPages(input *FilterLogEventsInpu...
  constant opGetLogEvents (line 1124) | opGetLogEvents = "GetLogEvents"
  method GetLogEventsRequest (line 1148) | func (c *CloudWatchLogs) GetLogEventsRequest(input *GetLogEventsInput) (...
  method GetLogEvents (line 1181) | func (c *CloudWatchLogs) GetLogEvents(input *GetLogEventsInput) (*GetLog...
  method GetLogEventsPages (line 1204) | func (c *CloudWatchLogs) GetLogEventsPages(input *GetLogEventsInput, fn ...
  constant opPutDestination (line 1212) | opPutDestination = "PutDestination"
  method PutDestinationRequest (line 1236) | func (c *CloudWatchLogs) PutDestinationRequest(input *PutDestinationInpu...
  method PutDestination (line 1264) | func (c *CloudWatchLogs) PutDestination(input *PutDestinationInput) (*Pu...
  constant opPutDestinationPolicy (line 1270) | opPutDestinationPolicy = "PutDestinationPolicy"
  method PutDestinationPolicyRequest (line 1294) | func (c *CloudWatchLogs) PutDestinationPolicyRequest(input *PutDestinati...
  method PutDestinationPolicy (line 1317) | func (c *CloudWatchLogs) PutDestinationPolicy(input *PutDestinationPolic...
  constant opPutLogEvents (line 1323) | opPutLogEvents = "PutLogEvents"
  method PutLogEventsRequest (line 1347) | func (c *CloudWatchLogs) PutLogEventsRequest(input *PutLogEventsInput) (...
  method PutLogEvents (line 1388) | func (c *CloudWatchLogs) PutLogEvents(input *PutLogEventsInput) (*PutLog...
  constant opPutMetricFilter (line 1394) | opPutMetricFilter = "PutMetricFilter"
  method PutMetricFilterRequest (line 1418) | func (c *CloudWatchLogs) PutMetricFilterRequest(input *PutMetricFilterIn...
  method PutMetricFilter (line 1443) | func (c *CloudWatchLogs) PutMetricFilter(input *PutMetricFilterInput) (*...
  constant opPutRetentionPolicy (line 1449) | opPutRetentionPolicy = "PutRetentionPolicy"
  method PutRetentionPolicyRequest (line 1473) | func (c *CloudWatchLogs) PutRetentionPolicyRequest(input *PutRetentionPo...
  method PutRetentionPolicy (line 1495) | func (c *CloudWatchLogs) PutRetentionPolicy(input *PutRetentionPolicyInp...
  constant opPutSubscriptionFilter (line 1501) | opPutSubscriptionFilter = "PutSubscriptionFilter"
  method PutSubscriptionFilterRequest (line 1525) | func (c *CloudWatchLogs) PutSubscriptionFilterRequest(input *PutSubscrip...
  method PutSubscriptionFilter (line 1563) | func (c *CloudWatchLogs) PutSubscriptionFilter(input *PutSubscriptionFil...
  constant opTestMetricFilter (line 1569) | opTestMetricFilter = "TestMetricFilter"
  method TestMetricFilterRequest (line 1593) | func (c *CloudWatchLogs) TestMetricFilterRequest(input *TestMetricFilter...
  method TestMetricFilter (line 1613) | func (c *CloudWatchLogs) TestMetricFilter(input *TestMetricFilterInput) ...
  type CancelExportTaskInput (line 1619) | type CancelExportTaskInput struct
    method String (line 1627) | func (s CancelExportTaskInput) String() string {
    method GoString (line 1632) | func (s CancelExportTaskInput) GoString() string {
    method Validate (line 1637) | func (s *CancelExportTaskInput) Validate() error {
  type CancelExportTaskOutput (line 1652) | type CancelExportTaskOutput struct
    method String (line 1657) | func (s CancelExportTaskOutput) String() string {
    method GoString (line 1662) | func (s CancelExportTaskOutput) GoString() string {
  type CreateExportTaskInput (line 1666) | type CreateExportTaskInput struct
    method String (line 1700) | func (s CreateExportTaskInput) String() string {
    method GoString (line 1705) | func (s CreateExportTaskInput) GoString() string {
    method Validate (line 1710) | func (s *CreateExportTaskInput) Validate() error {
  type CreateExportTaskOutput (line 1743) | type CreateExportTaskOutput struct
    method String (line 1751) | func (s CreateExportTaskOutput) String() string {
    method GoString (line 1756) | func (s CreateExportTaskOutput) GoString() string {
  type CreateLogGroupInput (line 1760) | type CreateLogGroupInput struct
    method String (line 1768) | func (s CreateLogGroupInput) String() string {
    method GoString (line 1773) | func (s CreateLogGroupInput) GoString() string {
    method Validate (line 1778) | func (s *CreateLogGroupInput) Validate() error {
  type CreateLogGroupOutput (line 1793) | type CreateLogGroupOutput struct
    method String (line 1798) | func (s CreateLogGroupOutput) String() string {
    method GoString (line 1803) | func (s CreateLogGroupOutput) GoString() string {
  type CreateLogStreamInput (line 1807) | type CreateLogStreamInput struct
    method String (line 1818) | func (s CreateLogStreamInput) String() string {
    method GoString (line 1823) | func (s CreateLogStreamInput) GoString() string {
    method Validate (line 1828) | func (s *CreateLogStreamInput) Validate() error {
  type CreateLogStreamOutput (line 1849) | type CreateLogStreamOutput struct
    method String (line 1854) | func (s CreateLogStreamOutput) String() string {
    method GoString (line 1859) | func (s CreateLogStreamOutput) GoString() string {
  type DeleteDestinationInput (line 1863) | type DeleteDestinationInput struct
    method String (line 1871) | func (s DeleteDestinationInput) String() string {
    method GoString (line 1876) | func (s DeleteDestinationInput) GoString() string {
    method Validate (line 1881) | func (s *DeleteDestinationInput) Validate() error {
  type DeleteDestinationOutput (line 1896) | type DeleteDestinationOutput struct
    method String (line 1901) | func (s DeleteDestinationOutput) String() string {
    method GoString (line 1906) | func (s DeleteDestinationOutput) GoString() string {
  type DeleteLogGroupInput (line 1910) | type DeleteLogGroupInput struct
    method String (line 1918) | func (s DeleteLogGroupInput) String() string {
    method GoString (line 1923) | func (s DeleteLogGroupInput) GoString() string {
    method Validate (line 1928) | func (s *DeleteLogGroupInput) Validate() error {
  type DeleteLogGroupOutput (line 1943) | type DeleteLogGroupOutput struct
    method String (line 1948) | func (s DeleteLogGroupOutput) String() string {
    method GoString (line 1953) | func (s DeleteLogGroupOutput) GoString() string {
  type DeleteLogStreamInput (line 1957) | type DeleteLogStreamInput struct
    method String (line 1968) | func (s DeleteLogStreamInput) String() string {
    method GoString (line 1973) | func (s DeleteLogStreamInput) GoString() string {
    method Validate (line 1978) | func (s *DeleteLogStreamInput) Validate() error {
  type DeleteLogStreamOutput (line 1999) | type DeleteLogStreamOutput struct
    method String (line 2004) | func (s DeleteLogStreamOutput) String() string {
    method GoString (line 2009) | func (s DeleteLogStreamOutput) GoString() string {
  type DeleteMetricFilterInput (line 2013) | type DeleteMetricFilterInput struct
    method String (line 2024) | func (s DeleteMetricFilterInput) String() string {
    method GoString (line 2029) | func (s DeleteMetricFilterInput) GoString() string {
    method Validate (line 2034) | func (s *DeleteMetricFilterInput) Validate() error {
  type DeleteMetricFilterOutput (line 2055) | type DeleteMetricFilterOutput struct
    method String (line 2060) | func (s DeleteMetricFilterOutput) String() string {
    method GoString (line 2065) | func (s DeleteMetricFilterOutput) GoString() string {
  type DeleteRetentionPolicyInput (line 2069) | type DeleteRetentionPolicyInput struct
    method String (line 2078) | func (s DeleteRetentionPolicyInput) String() string {
    method GoString (line 2083) | func (s DeleteRetentionPolicyInput) GoString() string {
    method Validate (line 2088) | func (s *DeleteRetentionPolicyInput) Validate() error {
  type DeleteRetentionPolicyOutput (line 2103) | type DeleteRetentionPolicyOutput struct
    method String (line 2108) | func (s DeleteRetentionPolicyOutput) String() string {
    method GoString (line 2113) | func (s DeleteRetentionPolicyOutput) GoString() string {
  type DeleteSubscriptionFilterInput (line 2117) | type DeleteSubscriptionFilterInput struct
    method String (line 2129) | func (s DeleteSubscriptionFilterInput) String() string {
    method GoString (line 2134) | func (s DeleteSubscriptionFilterInput) GoString() string {
    method Validate (line 2139) | func (s *DeleteSubscriptionFilterInput) Validate() error {
  type DeleteSubscriptionFilterOutput (line 2160) | type DeleteSubscriptionFilterOutput struct
    method String (line 2165) | func (s DeleteSubscriptionFilterOutput) String() string {
    method GoString (line 2170) | func (s DeleteSubscriptionFilterOutput) GoString() string {
  type DescribeDestinationsInput (line 2174) | type DescribeDestinationsInput struct
    method String (line 2191) | func (s DescribeDestinationsInput) String() string {
    method GoString (line 2196) | func (s DescribeDestinationsInput) GoString() string {
    method Validate (line 2201) | func (s *DescribeDestinationsInput) Validate() error {
  type DescribeDestinationsOutput (line 2219) | type DescribeDestinationsOutput struct
    method String (line 2231) | func (s DescribeDestinationsOutput) String() string {
    method GoString (line 2236) | func (s DescribeDestinationsOutput) GoString() string {
  type DescribeExportTasksInput (line 2240) | type DescribeExportTasksInput struct
    method String (line 2262) | func (s DescribeExportTasksInput) String() string {
    method GoString (line 2267) | func (s DescribeExportTasksInput) GoString() string {
    method Validate (line 2272) | func (s *DescribeExportTasksInput) Validate() error {
  type DescribeExportTasksOutput (line 2290) | type DescribeExportTasksOutput struct
    method String (line 2303) | func (s DescribeExportTasksOutput) String() string {
    method GoString (line 2308) | func (s DescribeExportTasksOutput) GoString() string {
  type DescribeLogGroupsInput (line 2312) | type DescribeLogGroupsInput struct
    method String (line 2330) | func (s DescribeLogGroupsInput) String() string {
    method GoString (line 2335) | func (s DescribeLogGroupsInput) GoString() string {
    method Validate (line 2340) | func (s *DescribeLogGroupsInput) Validate() error {
  type DescribeLogGroupsOutput (line 2358) | type DescribeLogGroupsOutput struct
    method String (line 2371) | func (s DescribeLogGroupsOutput) String() string {
    method GoString (line 2376) | func (s DescribeLogGroupsOutput) GoString() string {
  type DescribeLogStreamsInput (line 2380) | type DescribeLogStreamsInput struct
    method String (line 2411) | func (s DescribeLogStreamsInput) String() string {
    method GoString (line 2416) | func (s DescribeLogStreamsInput) GoString() string {
    method Validate (line 2421) | func (s *DescribeLogStreamsInput) Validate() error {
  type DescribeLogStreamsOutput (line 2445) | type DescribeLogStreamsOutput struct
    method String (line 2458) | func (s DescribeLogStreamsOutput) String() string {
    method GoString (line 2463) | func (s DescribeLogStreamsOutput) GoString() string {
  type DescribeMetricFiltersInput (line 2467) | type DescribeMetricFiltersInput struct
    method String (line 2488) | func (s DescribeMetricFiltersInput) String() string {
    method GoString (line 2493) | func (s DescribeMetricFiltersInput) GoString() string {
    method Validate (line 2498) | func (s *DescribeMetricFiltersInput) Validate() error {
  type DescribeMetricFiltersOutput (line 2522) | type DescribeMetricFiltersOutput struct
    method String (line 2534) | func (s DescribeMetricFiltersOutput) String() string {
    method GoString (line 2539) | func (s DescribeMetricFiltersOutput) GoString() string {
  type DescribeSubscriptionFiltersInput (line 2543) | type DescribeSubscriptionFiltersInput struct
    method String (line 2563) | func (s DescribeSubscriptionFiltersInput) String() string {
    method GoString (line 2568) | func (s DescribeSubscriptionFiltersInput) GoString() string {
    method Validate (line 2573) | func (s *DescribeSubscriptionFiltersInput) Validate() error {
  type DescribeSubscriptionFiltersOutput (line 2597) | type DescribeSubscriptionFiltersOutput struct
    method String (line 2609) | func (s DescribeSubscriptionFiltersOutput) String() string {
    method GoString (line 2614) | func (s DescribeSubscriptionFiltersOutput) GoString() string {
  type Destination (line 2619) | type Destination struct
    method String (line 2645) | func (s Destination) String() string {
    method GoString (line 2650) | func (s Destination) GoString() string {
  type ExportTask (line 2655) | type ExportTask struct
    method String (line 2689) | func (s ExportTask) String() string {
    method GoString (line 2694) | func (s ExportTask) GoString() string {
  type ExportTaskExecutionInfo (line 2699) | type ExportTaskExecutionInfo struct
    method String (line 2710) | func (s ExportTaskExecutionInfo) String() string {
    method GoString (line 2715) | func (s ExportTaskExecutionInfo) GoString() string {
  type ExportTaskStatus (line 2720) | type ExportTaskStatus struct
    method String (line 2731) | func (s ExportTaskStatus) String() string {
    method GoString (line 2736) | func (s ExportTaskStatus) GoString() string {
  type FilterLogEventsInput (line 2740) | type FilterLogEventsInput struct
    method String (line 2781) | func (s FilterLogEventsInput) String() string {
    method GoString (line 2786) | func (s FilterLogEventsInput) GoString() string {
    method Validate (line 2791) | func (s *FilterLogEventsInput) Validate() error {
  type FilterLogEventsOutput (line 2815) | type FilterLogEventsOutput struct
    method String (line 2834) | func (s FilterLogEventsOutput) String() string {
    method GoString (line 2839) | func (s FilterLogEventsOutput) GoString() string {
  type FilteredLogEvent (line 2844) | type FilteredLogEvent struct
    method String (line 2866) | func (s FilteredLogEvent) String() string {
    method GoString (line 2871) | func (s FilteredLogEvent) GoString() string {
  type GetLogEventsInput (line 2875) | type GetLogEventsInput struct
    method String (line 2908) | func (s GetLogEventsInput) String() string {
    method GoString (line 2913) | func (s GetLogEventsInput) GoString() string {
    method Validate (line 2918) | func (s *GetLogEventsInput) Validate() error {
  type GetLogEventsOutput (line 2945) | type GetLogEventsOutput struct
    method String (line 2962) | func (s GetLogEventsOutput) String() string {
    method GoString (line 2967) | func (s GetLogEventsOutput) GoString() string {
  type InputLogEvent (line 2975) | type InputLogEvent struct
    method String (line 2986) | func (s InputLogEvent) String() string {
    method GoString (line 2991) | func (s InputLogEvent) GoString() string {
    method Validate (line 2996) | func (s *InputLogEvent) Validate() error {
  type LogGroup (line 3014) | type LogGroup struct
    method String (line 3037) | func (s LogGroup) String() string {
    method GoString (line 3042) | func (s LogGroup) GoString() string {
  type LogStream (line 3047) | type LogStream struct
    method String (line 3079) | func (s LogStream) String() string {
    method GoString (line 3084) | func (s LogStream) GoString() string {
  type MetricFilter (line 3091) | type MetricFilter struct
    method String (line 3111) | func (s MetricFilter) String() string {
    method GoString (line 3116) | func (s MetricFilter) GoString() string {
  type MetricFilterMatchRecord (line 3120) | type MetricFilterMatchRecord struct
    method String (line 3131) | func (s MetricFilterMatchRecord) String() string {
    method GoString (line 3136) | func (s MetricFilterMatchRecord) GoString() string {
  type MetricTransformation (line 3140) | type MetricTransformation struct
    method String (line 3159) | func (s MetricTransformation) String() string {
    method GoString (line 3164) | func (s MetricTransformation) GoString() string {
    method Validate (line 3169) | func (s *MetricTransformation) Validate() error {
  type OutputLogEvent (line 3187) | type OutputLogEvent struct
    method String (line 3202) | func (s OutputLogEvent) String() string {
    method GoString (line 3207) | func (s OutputLogEvent) GoString() string {
  type PutDestinationInput (line 3211) | type PutDestinationInput struct
    method String (line 3226) | func (s PutDestinationInput) String() string {
    method GoString (line 3231) | func (s PutDestinationInput) GoString() string {
    method Validate (line 3236) | func (s *PutDestinationInput) Validate() error {
  type PutDestinationOutput (line 3263) | type PutDestinationOutput struct
    method String (line 3271) | func (s PutDestinationOutput) String() string {
    method GoString (line 3276) | func (s PutDestinationOutput) GoString() string {
  type PutDestinationPolicyInput (line 3280) | type PutDestinationPolicyInput struct
    method String (line 3292) | func (s PutDestinationPolicyInput) String() string {
    method GoString (line 3297) | func (s PutDestinationPolicyInput) GoString() string {
    method Validate (line 3302) | func (s *PutDestinationPolicyInput) Validate() error {
  type PutDestinationPolicyOutput (line 3323) | type PutDestinationPolicyOutput struct
    method String (line 3328) | func (s PutDestinationPolicyOutput) String() string {
    method GoString (line 3333) | func (s PutDestinationPolicyOutput) GoString() string {
  type PutLogEventsInput (line 3337) | type PutLogEventsInput struct
    method String (line 3355) | func (s PutLogEventsInput) String() string {
    method GoString (line 3360) | func (s PutLogEventsInput) GoString() string {
    method Validate (line 3365) | func (s *PutLogEventsInput) Validate() error {
  type PutLogEventsOutput (line 3405) | type PutLogEventsOutput struct
    method String (line 3417) | func (s PutLogEventsOutput) String() string {
    method GoString (line 3422) | func (s PutLogEventsOutput) GoString() string {
  type PutMetricFilterInput (line 3426) | type PutMetricFilterInput struct
    method String (line 3444) | func (s PutMetricFilterInput) String() string {
    method GoString (line 3449) | func (s PutMetricFilterInput) GoString() string {
    method Validate (line 3454) | func (s *PutMetricFilterInput) Validate() error {
  type PutMetricFilterOutput (line 3494) | type PutMetricFilterOutput struct
    method String (line 3499) | func (s PutMetricFilterOutput) String() string {
    method GoString (line 3504) | func (s PutMetricFilterOutput) GoString() string {
  type PutRetentionPolicyInput (line 3508) | type PutRetentionPolicyInput struct
    method String (line 3521) | func (s PutRetentionPolicyInput) String() string {
    method GoString (line 3526) | func (s PutRetentionPolicyInput) GoString() string {
    method Validate (line 3531) | func (s *PutRetentionPolicyInput) Validate() error {
  type PutRetentionPolicyOutput (line 3549) | type PutRetentionPolicyOutput struct
    method String (line 3554) | func (s PutRetentionPolicyOutput) String() string {
    method GoString (line 3559) | func (s PutRetentionPolicyOutput) GoString() string {
  type PutSubscriptionFilterInput (line 3563) | type PutSubscriptionFilterInput struct
    method String (line 3600) | func (s PutSubscriptionFilterInput) String() string {
    method GoString (line 3605) | func (s PutSubscriptionFilterInput) GoString() string {
    method Validate (line 3610) | func (s *PutSubscriptionFilterInput) Validate() error {
  type PutSubscriptionFilterOutput (line 3643) | type PutSubscriptionFilterOutput struct
    method String (line 3648) | func (s PutSubscriptionFilterOutput) String() string {
    method GoString (line 3653) | func (s PutSubscriptionFilterOutput) GoString() string {
  type RejectedLogEventsInfo (line 3657) | type RejectedLogEventsInfo struct
    method String (line 3668) | func (s RejectedLogEventsInfo) String() string {
    method GoString (line 3673) | func (s RejectedLogEventsInfo) GoString() string {
  type SearchedLogStream (line 3679) | type SearchedLogStream struct
    method String (line 3691) | func (s SearchedLogStream) String() string {
    method GoString (line 3696) | func (s SearchedLogStream) GoString() string {
  type SubscriptionFilter (line 3700) | type SubscriptionFilter struct
    method String (line 3724) | func (s SubscriptionFilter) String() string {
    method GoString (line 3729) | func (s SubscriptionFilter) GoString() string {
  type TestMetricFilterInput (line 3733) | type TestMetricFilterInput struct
    method String (line 3747) | func (s TestMetricFilterInput) String() string {
    method GoString (line 3752) | func (s TestMetricFilterInput) GoString() string {
    method Validate (line 3757) | func (s *TestMetricFilterInput) Validate() error {
  type TestMetricFilterOutput (line 3775) | type TestMetricFilterOutput struct
    method String (line 3782) | func (s TestMetricFilterOutput) String() string {
    method GoString (line 3787) | func (s TestMetricFilterOutput) GoString() string {
  constant ExportTaskStatusCodeCancelled (line 3793) | ExportTaskStatusCodeCancelled = "CANCELLED"
  constant ExportTaskStatusCodeCompleted (line 3795) | ExportTaskStatusCodeCompleted = "COMPLETED"
  constant ExportTaskStatusCodeFailed (line 3797) | ExportTaskStatusCodeFailed = "FAILED"
  constant ExportTaskStatusCodePending (line 3799) | ExportTaskStatusCodePending = "PENDING"
  constant ExportTaskStatusCodePendingCancel (line 3801) | ExportTaskStatusCodePendingCancel = "PENDING_CANCEL"
  constant ExportTaskStatusCodeRunning (line 3803) | ExportTaskStatusCodeRunning = "RUNNING"
  constant OrderByLogStreamName (line 3808) | OrderByLogStreamName = "LogStreamName"
  constant OrderByLastEventTime (line 3810) | OrderByLastEventTime = "LastEventTime"

FILE: vendor/github.com/aws/aws-sdk-go/service/cloudwatchlogs/service.go
  type CloudWatchLogs (line 45) | type CloudWatchLogs struct
    method newRequest (line 107) | func (c *CloudWatchLogs) newRequest(op *request.Operation, params, dat...
  constant ServiceName (line 56) | ServiceName = "logs"
  function New (line 68) | func New(p client.ConfigProvider, cfgs ...*aws.Config) *CloudWatchLogs {
  function newClient (line 74) | func newClient(cfg aws.Config, handlers request.Handlers, endpoint, sign...

FILE: vendor/github.com/aws/aws-sdk-go/service/sts/api.go
  constant opAssumeRole (line 13) | opAssumeRole = "AssumeRole"
  method AssumeRoleRequest (line 37) | func (c *STS) AssumeRoleRequest(input *AssumeRoleInput) (req *request.Re...
  method AssumeRole (line 143) | func (c *STS) AssumeRole(input *AssumeRoleInput) (*AssumeRoleOutput, err...
  constant opAssumeRoleWithSAML (line 149) | opAssumeRoleWithSAML = "AssumeRoleWithSAML"
  method AssumeRoleWithSAMLRequest (line 173) | func (c *STS) AssumeRoleWithSAMLRequest(input *AssumeRoleWithSAMLInput) ...
  method AssumeRoleWithSAML (line 257) | func (c *STS) AssumeRoleWithSAML(input *AssumeRoleWithSAMLInput) (*Assum...
  constant opAssumeRoleWithWebIdentity (line 263) | opAssumeRoleWithWebIdentity = "AssumeRoleWithWebIdentity"
  method AssumeRoleWithWebIdentityRequest (line 287) | func (c *STS) AssumeRoleWithWebIdentityRequest(input *AssumeRoleWithWebI...
  method AssumeRoleWithWebIdentity (line 389) | func (c *STS) AssumeRoleWithWebIdentity(input *AssumeRoleWithWebIdentity...
  constant opDecodeAuthorizationMessage (line 395) | opDecodeAuthorizationMessage = "DecodeAuthorizationMessage"
  method DecodeAuthorizationMessageRequest (line 419) | func (c *STS) DecodeAuthorizationMessageRequest(input *DecodeAuthorizati...
  method DecodeAuthorizationMessage (line 468) | func (c *STS) DecodeAuthorizationMessage(input *DecodeAuthorizationMessa...
  constant opGetCallerIdentity (line 474) | opGetCallerIdentity = "GetCallerIdentity"
  method GetCallerIdentityRequest (line 498) | func (c *STS) GetCallerIdentityRequest(input *GetCallerIdentityInput) (r...
  method GetCallerIdentity (line 517) | func (c *STS) GetCallerIdentity(input *GetCallerIdentityInput) (*GetCall...
  constant opGetFederationToken (line 523) | opGetFederationToken = "GetFederationToken"
  method GetFederationTokenRequest (line 547) | func (c *STS) GetFederationTokenRequest(input *GetFederationTokenInput) ...
  method GetFederationToken (line 642) | func (c *STS) GetFederationToken(input *GetFederationTokenInput) (*GetFe...
  constant opGetSessionToken (line 648) | opGetSessionToken = "GetSessionToken"
  method GetSessionTokenRequest (line 672) | func (c *STS) GetSessionTokenRequest(input *GetSessionTokenInput) (req *...
  method GetSessionToken (line 735) | func (c *STS) GetSessionToken(input *GetSessionTokenInput) (*GetSessionT...
  type AssumeRoleInput (line 741) | type AssumeRoleInput struct
    method String (line 841) | func (s AssumeRoleInput) String() string {
    method GoString (line 846) | func (s AssumeRoleInput) GoString() string {
    method Validate (line 851) | func (s *AssumeRoleInput) Validate() error {
  type AssumeRoleOutput (line 889) | type AssumeRoleOutput struct
    method String (line 915) | func (s AssumeRoleOutput) String() string {
    method GoString (line 920) | func (s AssumeRoleOutput) GoString() string {
  type AssumeRoleWithSAMLInput (line 924) | type AssumeRoleWithSAMLInput struct
    method String (line 984) | func (s AssumeRoleWithSAMLInput) String() string {
    method GoString (line 989) | func (s AssumeRoleWithSAMLInput) GoString() string {
    method Validate (line 994) | func (s *AssumeRoleWithSAMLInput) Validate() error {
  type AssumeRoleWithSAMLOutput (line 1029) | type AssumeRoleWithSAMLOutput struct
    method String (line 1083) | func (s AssumeRoleWithSAMLOutput) String() string {
    method GoString (line 1088) | func (s AssumeRoleWithSAMLOutput) GoString() string {
  type AssumeRoleWithWebIdentityInput (line 1092) | type AssumeRoleWithWebIdentityInput struct
    method String (line 1165) | func (s AssumeRoleWithWebIdentityInput) String() string {
    method GoString (line 1170) | func (s AssumeRoleWithWebIdentityInput) GoString() string {
    method Validate (line 1175) | func (s *AssumeRoleWithWebIdentityInput) Validate() error {
  type AssumeRoleWithWebIdentityOutput (line 1213) | type AssumeRoleWithWebIdentityOutput struct
    method String (line 1258) | func (s AssumeRoleWithWebIdentityOutput) String() string {
    method GoString (line 1263) | func (s AssumeRoleWithWebIdentityOutput) GoString() string {
  type AssumedRoleUser (line 1269) | type AssumedRoleUser struct
    method String (line 1285) | func (s AssumedRoleUser) String() string {
    method GoString (line 1290) | func (s AssumedRoleUser) GoString() string {
  type Credentials (line 1295) | type Credentials struct
    method String (line 1312) | func (s Credentials) String() string {
    method GoString (line 1317) | func (s Credentials) GoString() string {
  type DecodeAuthorizationMessageInput (line 1321) | type DecodeAuthorizationMessageInput struct
    method String (line 1329) | func (s DecodeAuthorizationMessageInput) String() string {
    method GoString (line 1334) | func (s DecodeAuthorizationMessageInput) GoString() string {
    method Validate (line 1339) | func (s *DecodeAuthorizationMessageInput) Validate() error {
  type DecodeAuthorizationMessageOutput (line 1357) | type DecodeAuthorizationMessageOutput struct
    method String (line 1365) | func (s DecodeAuthorizationMessageOutput) String() string {
    method GoString (line 1370) | func (s DecodeAuthorizationMessageOutput) GoString() string {
  type FederatedUser (line 1375) | type FederatedUser struct
    method String (line 1390) | func (s FederatedUser) String() string {
    method GoString (line 1395) | func (s FederatedUser) GoString() string {
  type GetCallerIdentityInput (line 1399) | type GetCallerIdentityInput struct
    method String (line 1404) | func (s GetCallerIdentityInput) String() string {
    method GoString (line 1409) | func (s GetCallerIdentityInput) GoString() string {
  type GetCallerIdentityOutput (line 1415) | type GetCallerIdentityOutput struct
    method String (line 1433) | func (s GetCallerIdentityOutput) String() string {
    method GoString (line 1438) | func (s GetCallerIdentityOutput) GoString() string {
  type GetFederationTokenInput (line 1442) | type GetFederationTokenInput struct
    method String (line 1498) | func (s GetFederationTokenInput) String() string {
    method GoString (line 1503) | func (s GetFederationTokenInput) GoString() string {
    method Validate (line 1508) | func (s *GetFederationTokenInput) Validate() error {
  type GetFederationTokenOutput (line 1531) | type GetFederationTokenOutput struct
    method String (line 1556) | func (s GetFederationTokenOutput) String() string {
    method GoString (line 1561) | func (s GetFederationTokenOutput) GoString() string {
  type GetSessionTokenInput (line 1565) | type GetSessionTokenInput struct
    method String (line 1602) | func (s GetSessionTokenInput) String() string {
    method GoString (line 1607) | func (s GetSessionTokenInput) GoString() string {
    method Validate (line 1612) | func (s *GetSessionTokenInput) Validate() error {
  type GetSessionTokenOutput (line 1632) | type GetSessionTokenOutput struct
    method String (line 1646) | func (s GetSessionTokenOutput) String() string {
    method GoString (line 1651) | func (s GetSessionTokenOutput) GoString() string {

FILE: vendor/github.com/aws/aws-sdk-go/service/sts/customizations.go
  function init (line 5) | func init() {

FILE: vendor/github.com/aws/aws-sdk-go/service/sts/service.go
  type STS (line 61) | type STS struct
    method newRequest (line 121) | func (c *STS) newRequest(op *request.Operation, params, data interface...
  constant ServiceName (line 72) | ServiceName = "sts"
  function New (line 84) | func New(p client.ConfigProvider, cfgs ...*aws.Config) *STS {
  function newClient (line 90) | func newClient(cfg aws.Config, handlers request.Handlers, endpoint, sign...

FILE: vendor/github.com/coreos/go-systemd/sdjournal/functions.go
  function getFunction (line 41) | func getFunction(name string) (unsafe.Pointer, error) {

FILE: vendor/github.com/coreos/go-systemd/sdjournal/journal.go
  constant SD_JOURNAL_FIELD_MESSAGE (line 273) | SD_JOURNAL_FIELD_MESSAGE           = "MESSAGE"
  constant SD_JOURNAL_FIELD_MESSAGE_ID (line 274) | SD_JOURNAL_FIELD_MESSAGE_ID        = "MESSAGE_ID"
  constant SD_JOURNAL_FIELD_PRIORITY (line 275) | SD_JOURNAL_FIELD_PRIORITY          = "PRIORITY"
  constant SD_JOURNAL_FIELD_CODE_FILE (line 276) | SD_JOURNAL_FIELD_CODE_FILE         = "CODE_FILE"
  constant SD_JOURNAL_FIELD_CODE_LINE (line 277) | SD_JOURNAL_FIELD_CODE_LINE         = "CODE_LINE"
  constant SD_JOURNAL_FIELD_CODE_FUNC (line 278) | SD_JOURNAL_FIELD_CODE_FUNC         = "CODE_FUNC"
  constant SD_JOURNAL_FIELD_ERRNO (line 279) | SD_JOURNAL_FIELD_ERRNO             = "ERRNO"
  constant SD_JOURNAL_FIELD_SYSLOG_FACILITY (line 280) | SD_JOURNAL_FIELD_SYSLOG_FACILITY   = "SYSLOG_FACILITY"
  constant SD_JOURNAL_FIELD_SYSLOG_IDENTIFIER (line 281) | SD_JOURNAL_FIELD_SYSLOG_IDENTIFIER = "SYSLOG_IDENTIFIER"
  constant SD_JOURNAL_FIELD_SYSLOG_PID (line 282) | SD_JOURNAL_FIELD_SYSLOG_PID        = "SYSLOG_PID"
  constant SD_JOURNAL_FIELD_PID (line 285) | SD_JOURNAL_FIELD_PID                       = "_PID"
  constant SD_JOURNAL_FIELD_UID (line 286) | SD_JOURNAL_FIELD_UID                       = "_UID"
  constant SD_JOURNAL_FIELD_GID (line 287) | SD_JOURNAL_FIELD_GID                       = "_GID"
  constant SD_JOURNAL_FIELD_COMM (line 288) | SD_JOURNAL_FIELD_COMM                      = "_COMM"
  constant SD_JOURNAL_FIELD_EXE (line 289) | SD_JOURNAL_FIELD_EXE                       = "_EXE"
  constant SD_JOURNAL_FIELD_CMDLINE (line 290) | SD_JOURNAL_FIELD_CMDLINE                   = "_CMDLINE"
  constant SD_JOURNAL_FIELD_CAP_EFFECTIVE (line 291) | SD_JOURNAL_FIELD_CAP_EFFECTIVE             = "_CAP_EFFECTIVE"
  constant SD_JOURNAL_FIELD_AUDIT_SESSION (line 292) | SD_JOURNAL_FIELD_AUDIT_SESSION             = "_AUDIT_SESSION"
  constant SD_JOURNAL_FIELD_AUDIT_LOGINUID (line 293) | SD_JOURNAL_FIELD_AUDIT_LOGINUID            = "_AUDIT_LOGINUID"
  constant SD_JOURNAL_FIELD_SYSTEMD_CGROUP (line 294) | SD_JOURNAL_FIELD_SYSTEMD_CGROUP            = "_SYSTEMD_CGROUP"
  constant SD_JOURNAL_FIELD_SYSTEMD_SESSION (line 295) | SD_JOURNAL_FIELD_SYSTEMD_SESSION           = "_SYSTEMD_SESSION"
  constant SD_JOURNAL_FIELD_SYSTEMD_UNIT (line 296) | SD_JOURNAL_FIELD_SYSTEMD_UNIT              = "_SYSTEMD_UNIT"
  constant SD_JOURNAL_FIELD_SYSTEMD_USER_UNIT (line 297) | SD_JOURNAL_FIELD_SYSTEMD_USER_UNIT         = "_SYSTEMD_USER_UNIT"
  constant SD_JOURNAL_FIELD_SYSTEMD_OWNER_UID (line 298) | SD_JOURNAL_FIELD_SYSTEMD_OWNER_UID         = "_SYSTEMD_OWNER_UID"
  constant SD_JOURNAL_FIELD_SYSTEMD_SLICE (line 299) | SD_JOURNAL_FIELD_SYSTEMD_SLICE             = "_SYSTEMD_SLICE"
  constant SD_JOURNAL_FIELD_SELINUX_CONTEXT (line 300) | SD_JOURNAL_FIELD_SELINUX_CONTEXT           = "_SELINUX_CONTEXT"
  constant SD_JOURNAL_FIELD_SOURCE_REALTIME_TIMESTAMP (line 301) | SD_JOURNAL_FIELD_SOURCE_REALTIME_TIMESTAMP = "_SOURCE_REALTIME_TIMESTAMP"
  constant SD_JOURNAL_FIELD_BOOT_ID (line 302) | SD_JOURNAL_FIELD_BOOT_ID                   = "_BOOT_ID"
  constant SD_JOURNAL_FIELD_MACHINE_ID (line 303) | SD_JOURNAL_FIELD_MACHINE_ID                = "_MACHINE_ID"
  constant SD_JOURNAL_FIELD_HOSTNAME (line 304) | SD_JOURNAL_FIELD_HOSTNAME                  = "_HOSTNAME"
  constant SD_JOURNAL_FIELD_TRANSPORT (line 305) | SD_JOURNAL_FIELD_TRANSPORT                 = "_TRANSPORT"
  constant SD_JOURNAL_FIELD_CURSOR (line 308) | SD_JOURNAL_FIELD_CURSOR              = "__CURSOR"
  constant SD_JOURNAL_FIELD_REALTIME_TIMESTAMP (line 309) | SD_JOURNAL_FIELD_REALTIME_TIMESTAMP  = "__REALTIME_TIMESTAMP"
  constant SD_JOURNAL_FIELD_MONOTONIC_TIMESTAMP (line 310) | SD_JOURNAL_FIELD_MONOTONIC_TIMESTAMP = "__MONOTONIC_TIMESTAMP"
  constant SD_JOURNAL_NOP (line 315) | SD_JOURNAL_NOP        = int(C.SD_JOURNAL_NOP)
  constant SD_JOURNAL_APPEND (line 316) | SD_JOURNAL_APPEND     = int(C.SD_JOURNAL_APPEND)
  constant SD_JOURNAL_INVALIDATE (line 317) | SD_JOURNAL_INVALIDATE = int(C.SD_JOURNAL_INVALIDATE)
  constant IndefiniteWait (line 325) | IndefiniteWait time.Duration = 1<<63 - 1
  type Journal (line 329) | type Journal struct
    method Close (line 394) | func (j *Journal) Close() error {
    method AddMatch (line 408) | func (j *Journal) AddMatch(match string) error {
    method AddDisjunction (line 429) | func (j *Journal) AddDisjunction() error {
    method AddConjunction (line 447) | func (j *Journal) AddConjunction() error {
    method FlushMatches (line 465) | func (j *Journal) FlushMatches() {
    method Next (line 477) | func (j *Journal) Next() (int, error) {
    method NextSkip (line 496) | func (j *Journal) NextSkip(skip uint64) (uint64, error) {
    method Previous (line 514) | func (j *Journal) Previous() (uint64, error) {
    method PreviousSkip (line 533) | func (j *Journal) PreviousSkip(skip uint64) (uint64, error) {
    method getData (line 550) | func (j *Journal) getData(field string) (unsafe.Pointer, C.int, error) {
    method GetData (line 575) | func (j *Journal) GetData(field string) (string, error) {
    method GetDataValue (line 586) | func (j *Journal) GetDataValue(field string) (string, error) {
    method GetDataBytes (line 597) | func (j *Journal) GetDataBytes(field string) ([]byte, error) {
    method GetDataValueBytes (line 608) | func (j *Journal) GetDataValueBytes(field string) ([]byte, error) {
    method GetEntry (line 620) | func (j *Journal) GetEntry() (*JournalEntry, error) {
    method SetDataThreshold (line 711) | func (j *Journal) SetDataThreshold(threshold uint64) error {
    method GetRealtimeUsec (line 730) | func (j *Journal) GetRealtimeUsec() (uint64, error) {
    method GetMonotonicUsec (line 750) | func (j *Journal) GetMonotonicUsec() (uint64, error) {
    method GetCursor (line 771) | func (j *Journal) GetCursor() (string, error) {
    method TestCursor (line 797) | func (j *Journal) TestCursor(cursor string) error {
    method SeekHead (line 819) | func (j *Journal) SeekHead() error {
    method SeekTail (line 838) | func (j *Journal) SeekTail() error {
    method SeekRealtimeUsec (line 857) | func (j *Journal) SeekRealtimeUsec(usec uint64) error {
    method SeekCursor (line 875) | func (j *Journal) SeekCursor(cursor string) error {
    method Wait (line 899) | func (j *Journal) Wait(timeout time.Duration) int {
    method GetUsage (line 923) | func (j *Journal) GetUsage() (uint64, error) {
  type JournalEntry (line 335) | type JournalEntry struct
  type Match (line 343) | type Match struct
    method String (line 349) | func (m *Match) String() string {
  function NewJournal (line 354) | func NewJournal() (j *Journal, err error) {
  function NewJournalFromDir (line 374) | func NewJournalFromDir(path string) (j *Journal, err error) {

FILE: vendor/github.com/coreos/go-systemd/sdjournal/read.go
  type JournalReaderConfig (line 32) | type JournalReaderConfig struct
  type JournalReader (line 51) | type JournalReader struct
    method Read (line 120) | func (r *JournalReader) Read(b []byte) (int, error) {
    method Close (line 171) | func (r *JournalReader) Close() error {
    method Rewind (line 176) | func (r *JournalReader) Rewind() error {
    method Follow (line 183) | func (r *JournalReader) Follow(until <-chan time.Time, writer io.Write...
    method buildMessage (line 244) | func (r *JournalReader) buildMessage() (string, error) {
  function NewJournalReader (line 58) | func NewJournalReader(config JournalReaderConfig) (*JournalReader, error) {

FILE: vendor/github.com/coreos/pkg/dlopen/dlopen.go
  type LibHandle (line 32) | type LibHandle struct
    method GetSymbolPointer (line 58) | func (l *LibHandle) GetSymbolPointer(symbol string) (unsafe.Pointer, e...
    method Close (line 73) | func (l *LibHandle) Close() error {
  function GetHandle (line 41) | func GetHandle(libs []string) (*LibHandle, error) {

FILE: vendor/github.com/coreos/pkg/dlopen/dlopen_example.go
  function strlen (line 37) | func strlen(libs []string, s string) (int, error) {

FILE: vendor/github.com/go-ini/ini/error.go
  type ErrDelimiterNotFound (line 21) | type ErrDelimiterNotFound struct
    method Error (line 30) | func (err ErrDelimiterNotFound) Error() string {
  function IsErrDelimiterNotFound (line 25) | func IsErrDelimiterNotFound(err error) bool {

FILE: vendor/github.com/go-ini/ini/ini.go
  constant DEFAULT_SECTION (line 35) | DEFAULT_SECTION = "DEFAULT"
  constant _DEPTH_VALUES (line 38) | _DEPTH_VALUES = 99
  constant _VERSION (line 39) | _VERSION      = "1.21.1"
  function Version (line 43) | func Version() string {
  function init (line 64) | func init() {
  function inSlice (line 70) | func inSlice(str string, s []string) bool {
  type dataSource (line 80) | type dataSource interface
  type sourceFile (line 85) | type sourceFile struct
    method ReadCloser (line 89) | func (s sourceFile) ReadCloser() (_ io.ReadCloser, err error) {
  type bytesReadCloser (line 93) | type bytesReadCloser struct
    method Read (line 97) | func (rc *bytesReadCloser) Read(p []byte) (n int, err error) {
    method Close (line 101) | func (rc *bytesReadCloser) Close() error {
  type sourceData (line 106) | type sourceData struct
    method ReadCloser (line 110) | func (s *sourceData) ReadCloser() (io.ReadCloser, error) {
  type File (line 115) | type File struct
    method NewSection (line 215) | func (f *File) NewSection(name string) (*Section, error) {
    method NewSections (line 237) | func (f *File) NewSections(names ...string) (err error) {
    method GetSection (line 247) | func (f *File) GetSection(name string) (*Section, error) {
    method Section (line 267) | func (f *File) Section(name string) *Section {
    method Sections (line 279) | func (f *File) Sections() []*Section {
    method SectionStrings (line 288) | func (f *File) SectionStrings() []string {
    method DeleteSection (line 295) | func (f *File) DeleteSection(name string) {
    method reload (line 314) | func (f *File) reload(s dataSource) error {
    method Reload (line 325) | func (f *File) Reload() (err error) {
    method Append (line 340) | func (f *File) Append(source interface{}, others ...interface{}) error {
    method WriteToIndent (line 359) | func (f *File) WriteToIndent(w io.Writer, indent string) (n int64, err...
    method WriteTo (line 471) | func (f *File) WriteTo(w io.Writer) (int64, error) {
    method SaveToIndent (line 476) | func (f *File) SaveToIndent(filename, indent string) error {
    method SaveTo (line 499) | func (f *File) SaveTo(filename string) error {
  function newFile (line 136) | func newFile(dataSources []dataSource, opts LoadOptions) *File {
  function parseDataSource (line 146) | func parseDataSource(source interface{}) (dataSource, error) {
  type LoadOptions (line 157) | type LoadOptions struct
  function LoadSources (line 169) | func LoadSources(opts LoadOptions, source interface{}, others ...interfa...
  function Load (line 191) | func Load(source interface{}, others ...interface{}) (*File, error) {
  function LooseLoad (line 197) | func LooseLoad(source interface{}, others ...interface{}) (*File, error) {
  function InsensitiveLoad (line 203) | func InsensitiveLoad(source interface{}, others ...interface{}) (*File, ...
  function Empty (line 208) | func Empty() *File {

FILE: vendor/github.com/go-ini/ini/key.go
  type Key (line 25) | type Key struct
    method Name (line 39) | func (k *Key) Name() string {
    method Value (line 44) | func (k *Key) Value() string {
    method String (line 49) | func (k *Key) String() string {
    method Validate (line 83) | func (k *Key) Validate(fn func(string) string) string {
    method Bool (line 103) | func (k *Key) Bool() (bool, error) {
    method Float64 (line 108) | func (k *Key) Float64() (float64, error) {
    method Int (line 113) | func (k *Key) Int() (int, error) {
    method Int64 (line 118) | func (k *Key) Int64() (int64, error) {
    method Uint (line 123) | func (k *Key) Uint() (uint, error) {
    method Uint64 (line 129) | func (k *Key) Uint64() (uint64, error) {
    method Duration (line 134) | func (k *Key) Duration() (time.Duration, error) {
    method TimeFormat (line 139) | func (k *Key) TimeFormat(format string) (time.Time, error) {
    method Time (line 144) | func (k *Key) Time() (time.Time, error) {
    method MustString (line 149) | func (k *Key) MustString(defaultVal string) string {
    method MustBool (line 160) | func (k *Key) MustBool(defaultVal ...bool) bool {
    method MustFloat64 (line 171) | func (k *Key) MustFloat64(defaultVal ...float64) float64 {
    method MustInt (line 182) | func (k *Key) MustInt(defaultVal ...int) int {
    method MustInt64 (line 193) | func (k *Key) MustInt64(defaultVal ...int64) int64 {
    method MustUint (line 204) | func (k *Key) MustUint(defaultVal ...uint) uint {
    method MustUint64 (line 215) | func (k *Key) MustUint64(defaultVal ...uint64) uint64 {
    method MustDuration (line 226) | func (k *Key) MustDuration(defaultVal ...time.Duration) time.Duration {
    method MustTimeFormat (line 237) | func (k *Key) MustTimeFormat(format string, defaultVal ...time.Time) t...
    method MustTime (line 248) | func (k *Key) MustTime(defaultVal ...time.Time) time.Time {
    method In (line 254) | func (k *Key) In(defaultVal string, candidates []string) string {
    method InFloat64 (line 266) | func (k *Key) InFloat64(defaultVal float64, candidates []float64) floa...
    method InInt (line 278) | func (k *Key) InInt(defaultVal int, candidates []int) int {
    method InInt64 (line 290) | func (k *Key) InInt64(defaultVal int64, candidates []int64) int64 {
    method InUint (line 302) | func (k *Key) InUint(defaultVal uint, candidates []uint) uint {
    method InUint64 (line 314) | func (k *Key) InUint64(defaultVal uint64, candidates []uint64) uint64 {
    method InTimeFormat (line 326) | func (k *Key) InTimeFormat(format string, defaultVal time.Time, candid...
    method InTime (line 338) | func (k *Key) InTime(defaultVal time.Time, candidates []time.Time) tim...
    method RangeFloat64 (line 344) | func (k *Key) RangeFloat64(defaultVal, min, max float64) float64 {
    method RangeInt (line 354) | func (k *Key) RangeInt(defaultVal, min, max int) int {
    method RangeInt64 (line 364) | func (k *Key) RangeInt64(defaultVal, min, max int64) int64 {
    method RangeTimeFormat (line 374) | func (k *Key) RangeTimeFormat(format string, defaultVal, min, max time...
    method RangeTime (line 384) | func (k *Key) RangeTime(defaultVal, min, max time.Time) time.Time {
    method Strings (line 389) | func (k *Key) Strings(delim string) []string {
    method Float64s (line 403) | func (k *Key) Float64s(delim string) []float64 {
    method Ints (line 409) | func (k *Key) Ints(delim string) []int {
    method Int64s (line 415) | func (k *Key) Int64s(delim string) []int64 {
    method Uints (line 421) | func (k *Key) Uints(delim string) []uint {
    method Uint64s (line 427) | func (k *Key) Uint64s(delim string) []uint64 {
    method TimesFormat (line 434) | func (k *Key) TimesFormat(format, delim string) []time.Time {
    method Times (line 441) | func (k *Key) Times(delim string) []time.Time {
    method ValidFloat64s (line 447) | func (k *Key) ValidFloat64s(delim string) []float64 {
    method ValidInts (line 454) | func (k *Key) ValidInts(delim string) []int {
    method ValidInt64s (line 461) | func (k *Key) ValidInt64s(delim string) []int64 {
    method ValidUints (line 468) | func (k *Key) ValidUints(delim string) []uint {
    method ValidUint64s (line 475) | func (k *Key) ValidUint64s(delim string) []uint64 {
    method ValidTimesFormat (line 481) | func (k *Key) ValidTimesFormat(format, delim string) []time.Time {
    method ValidTimes (line 487) | func (k *Key) ValidTimes(delim string) []time.Time {
    method StrictFloat64s (line 492) | func (k *Key) StrictFloat64s(delim string) ([]float64, error) {
    method StrictInts (line 497) | func (k *Key) StrictInts(delim string) ([]int, error) {
    method StrictInt64s (line 502) | func (k *Key) StrictInt64s(delim string) ([]int64, error) {
    method StrictUints (line 507) | func (k *Key) StrictUints(delim string) ([]uint, error) {
    method StrictUint64s (line 512) | func (k *Key) StrictUint64s(delim string) ([]uint64, error) {
    method StrictTimesFormat (line 518) | func (k *Key) StrictTimesFormat(format, delim string) ([]time.Time, er...
    method StrictTimes (line 524) | func (k *Key) StrictTimes(delim string) ([]time.Time, error) {
    method getFloat64s (line 529) | func (k *Key) getFloat64s(delim string, addInvalid, returnOnInvalid bo...
    method getInts (line 545) | func (k *Key) getInts(delim string, addInvalid, returnOnInvalid bool) ...
    method getInt64s (line 561) | func (k *Key) getInt64s(delim string, addInvalid, returnOnInvalid bool...
    method getUints (line 577) | func (k *Key) getUints(delim string, addInvalid, returnOnInvalid bool)...
    method getUint64s (line 593) | func (k *Key) getUint64s(delim string, addInvalid, returnOnInvalid boo...
    method getTimesFormat (line 609) | func (k *Key) getTimesFormat(format, delim string, addInvalid, returnO...
    method SetValue (line 625) | func (k *Key) SetValue(v string) {
  type ValueMapper (line 36) | type ValueMapper
  function parseBool (line 92) | func parseBool(str string) (value bool, err error) {

FILE: vendor/github.com/go-ini/ini/parser.go
  type tokenType (line 27) | type tokenType
  constant _TOKEN_INVALID (line 30) | _TOKEN_INVALID tokenType = iota
  constant _TOKEN_COMMENT (line 31) | _TOKEN_COMMENT
  constant _TOKEN_SECTION (line 32) | _TOKEN_SECTION
  constant _TOKEN_KEY (line 33) | _TOKEN_KEY
  type parser (line 36) | type parser struct
    method BOM (line 53) | func (p *parser) BOM() error {
    method readUntil (line 65) | func (p *parser) readUntil(delim byte) ([]byte, error) {
    method readMultilines (line 127) | func (p *parser) readMultilines(line, val, valQuote string) (string, e...
    method readContinuationLines (line 153) | func (p *parser) readContinuationLines(val string) (string, error) {
    method readValue (line 181) | func (p *parser) readValue(in []byte, ignoreContinuation bool) (string...
  function newParser (line 43) | func newParser(r io.Reader) *parser {
  function cleanComment (line 77) | func cleanComment(in []byte) ([]byte, bool) {
  function readKeyName (line 85) | func readKeyName(in []byte) (string, int, error) {
  function hasSurroundedQuote (line 176) | func hasSurroundedQuote(in string, quote byte) bool {
  method parse (line 228) | func (f *File) parse(reader io.Reader) (err error) {

FILE: vendor/github.com/go-ini/ini/section.go
  type Section (line 24) | type Section struct
    method Name (line 38) | func (s *Section) Name() string {
    method NewKey (line 43) | func (s *Section) NewKey(name, val string) (*Key, error) {
    method GetKey (line 71) | func (s *Section) GetKey(name string) (*Key, error) {
    method HasKey (line 105) | func (s *Section) HasKey(name string) bool {
    method Haskey (line 111) | func (s *Section) Haskey(name string) bool {
    method HasValue (line 116) | func (s *Section) HasValue(value string) bool {
    method Key (line 131) | func (s *Section) Key(name string) *Key {
    method Keys (line 143) | func (s *Section) Keys() []*Key {
    method ParentKeys (line 152) | func (s *Section) ParentKeys() []*Key {
    method KeyStrings (line 172) | func (s *Section) KeyStrings() []string {
    method KeysHash (line 179) | func (s *Section) KeysHash() map[string]string {
    method DeleteKey (line 193) | func (s *Section) DeleteKey(name string) {
  function newSection (line 33) | func newSection(f *File, name string) *Section {

FILE: vendor/github.com/go-ini/ini/struct.go
  type NameMapper (line 28) | type NameMapper
  method parseFieldName (line 61) | func (s *Section) parseFieldName(raw, actual string) string {
  function parseDelim (line 71) | func parseDelim(actual string) string {
  function setSliceWithProperType (line 81) | func setSliceWithProperType(key *Key, field reflect.Value, delim string)...
  function setWithProperType (line 136) | func setWithProperType(t reflect.Type, key *Key, field reflect.Value, de...
  method mapTo (line 197) | func (s *Section) mapTo(val reflect.Value) error {
  method MapTo (line 243) | func (s *Section) MapTo(v interface{}) error {
  method MapTo (line 257) | func (f *File) MapTo(v interface{}) error {
  function MapToWithMapper (line 262) | func MapToWithMapper(v interface{}, mapper NameMapper, source interface{...
  function MapTo (line 272) | func MapTo(v, source interface{}, others ...interface{}) error {
  function reflectSliceWithProperType (line 277) | func reflectSliceWithProperType(key *Key, field reflect.Value, delim str...
  function reflectWithProperType (line 307) | func reflectWithProperType(t reflect.Type, key *Key, field reflect.Value...
  function isEmptyValue (line 331) | func isEmptyValue(v reflect.Value) bool {
  method reflectFrom (line 351) | func (s *Section) reflectFrom(val reflect.Value) error {
  method ReflectFrom (line 404) | func (s *Section) ReflectFrom(v interface{}) error {
  method ReflectFrom (line 418) | func (f *File) ReflectFrom(v interface{}) error {
  function ReflectFromWithMapper (line 423) | func ReflectFromWithMapper(cfg *File, v interface{}, mapper NameMapper) ...
  function ReflectFrom (line 429) | func ReflectFrom(cfg *File, v interface{}) error {

FILE: vendor/github.com/hashicorp/hcl/decoder.go
  constant tagName (line 17) | tagName = "hcl"
  function Unmarshal (line 26) | func Unmarshal(bs []byte, v interface{}) error {
  function Decode (line 37) | func Decode(out interface{}, in string) error {
  function DecodeObject (line 48) | func DecodeObject(out interface{}, n ast.Node) error {
  type decoder (line 63) | type decoder struct
    method decode (line 67) | func (d *decoder) decode(name string, node ast.Node, result reflect.Va...
    method decodeBool (line 117) | func (d *decoder) decodeBool(name string, node ast.Node, result reflec...
    method decodeFloat (line 137) | func (d *decoder) decodeFloat(name string, node ast.Node, result refle...
    method decodeInt (line 157) | func (d *decoder) decodeInt(name string, node ast.Node, result reflect...
    method decodeInterface (line 186) | func (d *decoder) decodeInterface(name string, node ast.Node, result r...
    method decodeMap (line 292) | func (d *decoder) decodeMap(name string, node ast.Node, result reflect...
    method decodePtr (line 391) | func (d *decoder) decodePtr(name string, node ast.Node, result reflect...
    method decodeSlice (line 405) | func (d *decoder) decodeSlice(name string, node ast.Node, result refle...
    method decodeString (line 458) | func (d *decoder) decodeString(name string, node ast.Node, result refl...
    method decodeStruct (line 477) | func (d *decoder) decodeStruct(name string, node ast.Node, result refl...
  function findNodeType (line 653) | func findNodeType() reflect.Type {

FILE: vendor/github.com/hashicorp/hcl/hcl/ast/ast.go
  type Node (line 13) | type Node interface
  type File (line 29) | type File struct
    method node (line 18) | func (File) node()         {}
    method Pos (line 34) | func (f *File) Pos() token.Pos {
  type ObjectList (line 40) | type ObjectList struct
    method node (line 19) | func (ObjectList) node()   {}
    method Add (line 44) | func (o *ObjectList) Add(item *ObjectItem) {
    method Filter (line 55) | func (o *ObjectList) Filter(keys ...string) *ObjectList {
    method Children (line 86) | func (o *ObjectList) Children() *ObjectList {
    method Elem (line 99) | func (o *ObjectList) Elem() *ObjectList {
    method Pos (line 110) | func (o *ObjectList) Pos() token.Pos {
    method GoString (line 218) | func (o *ObjectList) GoString() string { return fmt.Sprintf("*%#v", *o) }
  type ObjectItem (line 117) | type ObjectItem struct
    method node (line 21) | func (ObjectItem) node()   {}
    method Pos (line 135) | func (o *ObjectItem) Pos() token.Pos {
  type ObjectKey (line 146) | type ObjectKey struct
    method node (line 20) | func (ObjectKey) node()    {}
    method Pos (line 150) | func (o *ObjectKey) Pos() token.Pos {
    method GoString (line 217) | func (o *ObjectKey) GoString() string  { return fmt.Sprintf("*%#v", *o) }
  type LiteralType (line 156) | type LiteralType struct
    method node (line 25) | func (LiteralType) node()  {}
    method Pos (line 163) | func (l *LiteralType) Pos() token.Pos {
  type ListType (line 168) | type ListType struct
    method node (line 26) | func (ListType) node()     {}
    method Pos (line 174) | func (l *ListType) Pos() token.Pos {
    method Add (line 178) | func (l *ListType) Add(node Node) {
  type ObjectType (line 183) | type ObjectType struct
    method node (line 24) | func (ObjectType) node()   {}
    method Pos (line 189) | func (o *ObjectType) Pos() token.Pos {
  type Comment (line 194) | type Comment struct
    method node (line 22) | func (Comment) node()      {}
    method Pos (line 199) | func (c *Comment) Pos() token.Pos {
  type CommentGroup (line 205) | type CommentGroup struct
    method node (line 23) | func (CommentGroup) node() {}
    method Pos (line 209) | func (c *CommentGroup) Pos() token.Pos {

FILE: vendor/github.com/hashicorp/hcl/hcl/ast/walk.go
  type WalkFunc (line 8) | type WalkFunc
  function Walk (line 14) | func Walk(node Node, fn WalkFunc) Node {

FILE: vendor/github.com/hashicorp/hcl/hcl/parser/error.go
  type PosError (line 10) | type PosError struct
    method Error (line 15) | func (e *PosError) Error() string {

FILE: vendor/github.com/hashicorp/hcl/hcl/parser/parser.go
  type Parser (line 15) | type Parser struct
    method Parse (line 46) | func (p *Parser) Parse() (*ast.File, error) {
    method objectList (line 65) | func (p *Parser) objectList() (*ast.ObjectList, error) {
    method consumeComment (line 93) | func (p *Parser) consumeComment() (comment *ast.Comment, endline int) {
    method consumeCommentGroup (line 111) | func (p *Parser) consumeCommentGroup(n int) (comments *ast.CommentGrou...
    method objectItem (line 129) | func (p *Parser) objectItem() (*ast.ObjectItem, error) {
    method objectKey (line 198) | func (p *Parser) objectKey() ([]*ast.ObjectKey, error) {
    method object (line 259) | func (p *Parser) object() (ast.Node, error) {
    method objectType (line 283) | func (p *Parser) objectType() (*ast.ObjectType, error) {
    method listType (line 310) | func (p *Parser) listType() (*ast.ListType, error) {
    method literalType (line 390) | func (p *Parser) literalType() (*ast.LiteralType, error) {
    method scan (line 401) | func (p *Parser) scan() token.Token {
    method unscan (line 453) | func (p *Parser) unscan() {
    method printTrace (line 460) | func (p *Parser) printTrace(a ...interface{}) {
  function newParser (line 31) | func newParser(src []byte) *Parser {
  function Parse (line 38) | func Parse(src []byte) (*ast.File, error) {
  function trace (line 479) | func trace(p *Parser, msg string) *Parser {
  function un (line 486) | func un(p *Parser) {

FILE: vendor/github.com/hashicorp/hcl/hcl/scanner/scanner.go
  constant eof (line 17) | eof = rune(0)
  type Scanner (line 20) | type Scanner struct
    method next (line 67) | func (s *Scanner) next() rune {
    method unread (line 104) | func (s *Scanner) unread() {
    method peek (line 112) | func (s *Scanner) peek() rune {
    method Scan (line 123) | func (s *Scanner) Scan() token.Token {
    method scanComment (line 224) | func (s *Scanner) scanComment(ch rune) {
    method scanNumber (line 265) | func (s *Scanner) scanNumber(ch rune) token.Type {
    method scanMantissa (line 350) | func (s *Scanner) scanMantissa(ch rune) rune {
    method scanFraction (line 364) | func (s *Scanner) scanFraction(ch rune) rune {
    method scanExponent (line 374) | func (s *Scanner) scanExponent(ch rune) rune {
    method scanHeredoc (line 386) | func (s *Scanner) scanHeredoc() {
    method scanString (line 470) | func (s *Scanner) scanString() {
    method scanEscape (line 506) | func (s *Scanner) scanEscape() rune {
    method scanDigits (line 532) | func (s *Scanner) scanDigits(ch rune, base, n int) rune {
    method scanIdentifier (line 558) | func (s *Scanner) scanIdentifier() string {
    method recentPosition (line 574) | func (s *Scanner) recentPosition() (pos token.Pos) {
    method err (line 597) | func (s *Scanner) err(msg string) {
  function New (line 50) | func New(src []byte) *Scanner {
  function isLetter (line 610) | func isLetter(ch rune) bool {
  function isDigit (line 615) | func isDigit(ch rune) bool {
  function isDecimal (line 620) | func isDecimal(ch rune) bool {
  function isHexadecimal (line 625) | func isHexadecimal(ch rune) bool {
  function isWhitespace (line 630) | func isWhitespace(ch rune) bool {
  function digitVal (line 635) | func digitVal(ch rune) int {

FILE: vendor/github.com/hashicorp/hcl/hcl/strconv/quote.go
  function Unquote (line 16) | func Unquote(s string) (t string, err error) {
  function contains (line 117) | func contains(s string, c byte) bool {
  function unhex (line 126) | func unhex(b byte) (v rune, ok bool) {
  function unquoteChar (line 139) | func unquoteChar(s string, quote byte) (value rune, multibyte bool, tail...

FILE: vendor/github.com/hashicorp/hcl/hcl/token/position.go
  type Pos (line 8) | type Pos struct
    method IsValid (line 16) | func (p *Pos) IsValid() bool { return p.Line > 0 }
    method String (line 24) | func (p Pos) String() string {
    method Before (line 39) | func (p Pos) Before(u Pos) bool {
    method After (line 44) | func (p Pos) After(u Pos) bool {

FILE: vendor/github.com/hashicorp/hcl/hcl/token/token.go
  type Token (line 14) | type Token struct
    method String (line 109) | func (t Token) String() string {
    method Value (line 118) | func (t Token) Value() interface{} {
  type Type (line 22) | type Type
    method String (line 83) | func (t Type) String() string {
    method IsIdentifier (line 96) | func (t Type) IsIdentifier() bool { return identifier_beg < t && t < i...
    method IsLiteral (line 100) | func (t Type) IsLiteral() bool { return literal_beg < t && t < literal...
    method IsOperator (line 104) | func (t Type) IsOperator() bool { return operator_beg < t && t < opera...
  constant ILLEGAL (line 26) | ILLEGAL Type = iota
  constant EOF (line 27) | EOF
  constant COMMENT (line 28) | COMMENT
  constant identifier_beg (line 30) | identifier_beg
  constant IDENT (line 31) | IDENT
  constant literal_beg (line 32) | literal_beg
  constant NUMBER (line 33) | NUMBER
  constant FLOAT (line 34) | FLOAT
  constant BOOL (line 35) | BOOL
  constant STRING (line 36) | STRING
  constant HEREDOC (line 37) | HEREDOC
  constant literal_end (line 38) | literal_end
  constant identifier_end (line 39) | identifier_end
  constant operator_beg (line 41) | operator_beg
  constant LBRACK (line 42) | LBRACK
  constant LBRACE (line 43) | LBRACE
  constant COMMA (line 44) | COMMA
  constant PERIOD (line 45) | PERIOD
  constant RBRACK (line 47) | RBRACK
  constant RBRACE (line 48) | RBRACE
  constant ASSIGN (line 50) | ASSIGN
  constant ADD (line 51) | ADD
  constant SUB (line 52) | SUB
  constant operator_end (line 53) | operator_end
  function unindentHeredoc (line 174) | func unindentHeredoc(heredoc string) string {

FILE: vendor/github.com/hashicorp/hcl/json/parser/flatten.go
  function flattenObjects (line 6) | func flattenObjects(node ast.Node) {
  function flattenListType (line 46) | func flattenListType(
  function flattenObjectType (line 74) | func flattenObjectType(

FILE: vendor/github.com/hashicorp/hcl/json/parser/parser.go
  type Parser (line 12) | type Parser struct
    method Parse (line 39) | func (p *Parser) Parse() (*ast.File, error) {
    method objectList (line 65) | func (p *Parser) objectList() (*ast.ObjectList, error) {
    method objectItem (line 92) | func (p *Parser) objectItem() (*ast.ObjectItem, error) {
    method objectKey (line 116) | func (p *Parser) objectKey() ([]*ast.ObjectKey, error) {
    method objectValue (line 149) | func (p *Parser) objectValue() (ast.Node, error) {
    method object (line 169) | func (p *Parser) object() (*ast.ObjectType, error) {
    method objectType (line 184) | func (p *Parser) objectType() (*ast.ObjectType, error) {
    method listType (line 203) | func (p *Parser) listType() (*ast.ListType, error) {
    method literalType (line 245) | func (p *Parser) literalType() (*ast.LiteralType, error) {
    method scan (line 255) | func (p *Parser) scan() token.Token {
    method unscan (line 267) | func (p *Parser) unscan() {
    method printTrace (line 274) | func (p *Parser) printTrace(a ...interface{}) {
  function newParser (line 24) | func newParser(src []byte) *Parser {
  function Parse (line 31) | func Parse(src []byte) (*ast.File, error) {
  function trace (line 293) | func trace(p *Parser, msg string) *Parser {
  function un (line 300) | func un(p *Parser) {

FILE: vendor/github.com/hashicorp/hcl/json/scanner/scanner.go
  constant eof (line 14) | eof = rune(0)
  type Scanner (line 17) | type Scanner struct
    method next (line 64) | func (s *Scanner) next() rune {
    method unread (line 101) | func (s *Scanner) unread() {
    method peek (line 109) | func (s *Scanner) peek() rune {
    method Scan (line 120) | func (s *Scanner) Scan() token.Token {
    method scanNumber (line 217) | func (s *Scanner) scanNumber(ch rune) token.Type {
    method scanMantissa (line 251) | func (s *Scanner) scanMantissa(ch rune) rune {
    method scanFraction (line 265) | func (s *Scanner) scanFraction(ch rune) rune {
    method scanExponent (line 275) | func (s *Scanner) scanExponent(ch rune) rune {
    method scanString (line 287) | func (s *Scanner) scanString() {
    method scanEscape (line 323) | func (s *Scanner) scanEscape() rune {
    method scanDigits (line 349) | func (s *Scanner) scanDigits(ch rune, base, n int) rune {
    method scanIdentifier (line 364) | func (s *Scanner) scanIdentifier() string {
    method recentPosition (line 380) | func (s *Scanner) recentPosition() (pos token.Pos) {
    method err (line 403) | func (s *Scanner) err(msg string) {
  function New (line 47) | func New(src []byte) *Scanner {
  function isLetter (line 416) | func isLetter(ch rune) bool {
  function isDigit (line 421) | func isDigit(ch rune) bool {
  function isDecimal (line 426) | func isDecimal(ch rune) bool {
  function isHexadecimal (line 431) | func isHexadecimal(ch rune) bool {
  function isWhitespace (line 436) | func isWhitespace(ch rune) bool {
  function digitVal (line 441) | func digitVal(ch rune) int {

FILE: vendor/github.com/hashicorp/hcl/json/token/position.go
  type Pos (line 8) | type Pos struct
    method IsValid (line 16) | func (p *Pos) IsValid() bool { return p.Line > 0 }
    method String (line 24) | func (p Pos) String() string {
    method Before (line 39) | func (p Pos) Before(u Pos) bool {
    method After (line 44) | func (p Pos) After(u Pos) bool {

FILE: vendor/github.com/hashicorp/hcl/json/token/token.go
  type Token (line 11) | type Token struct
    method String (line 96) | func (t Token) String() string {
    method HCLToken (line 103) | func (t Token) HCLToken() hcltoken.Token {
  type Type (line 18) | type Type
    method String (line 70) | func (t Type) String() string {
    method IsIdentifier (line 83) | func (t Type) IsIdentifier() bool { return identifier_beg < t && t < i...
    method IsLiteral (line 87) | func (t Type) IsLiteral() bool { return literal_beg < t && t < literal...
    method IsOperator (line 91) | func (t Type) IsOperator() bool { return operator_beg < t && t < opera...
  constant ILLEGAL (line 22) | ILLEGAL Type = iota
  constant EOF (line 23) | EOF
  constant identifier_beg (line 25) | identifier_beg
  constant literal_beg (line 26) | literal_beg
  constant NUMBER (line 27) | NUMBER
  constant FLOAT (line 28) | FLOAT
  constant BOOL (line 29) | BOOL
  constant STRING (line 30) | STRING
  constant NULL (line 31) | NULL
  constant literal_end (line 32) | literal_end
  constant identifier_end (line 33) | identifier_end
  constant operator_beg (line 35) | operator_beg
  constant LBRACK (line 36) | LBRACK
  constant LBRACE (line 37) | LBRACE
  constant COMMA (line 38) | COMMA
  constant PERIOD (line 39) | PERIOD
  constant COLON (line 40) | COLON
  constant RBRACK (line 42) | RBRACK
  constant RBRACE (line 43) | RBRACE
  constant operator_end (line 45) | operator_end

FILE: vendor/github.com/hashicorp/hcl/lex.go
  type lexModeValue (line 8) | type lexModeValue
  constant lexModeUnknown (line 11) | lexModeUnknown lexModeValue = iota
  constant lexModeHcl (line 12) | lexModeHcl
  constant lexModeJson (line 13) | lexModeJson
  function lexMode (line 18) | func lexMode(v []byte) lexModeValue {

FILE: vendor/github.com/hashicorp/hcl/parse.go
  function ParseBytes (line 14) | func ParseBytes(in []byte) (*ast.File, error) {
  function ParseString (line 19) | func ParseString(input string) (*ast.File, error) {
  function parse (line 23) | func parse(in []byte) (*ast.File, error) {
  function Parse (line 37) | func Parse(input string) (*ast.File, error) {

FILE: vendor/github.com/jmespath/go-jmespath/api.go
  type JMESPath (line 7) | type JMESPath struct
    method Search (line 36) | func (jp *JMESPath) Search(data interface{}) (interface{}, error) {
  function Compile (line 14) | func Compile(expression string) (*JMESPath, error) {
  function MustCompile (line 27) | func MustCompile(expression string) *JMESPath {
  function Search (line 41) | func Search(expression string, data interface{}) (interface{}, error) {

FILE: vendor/github.com/jmespath/go-jmespath/astnodetype_string.go
  constant _astNodeType_name (line 7) | _astNodeType_name = "ASTEmptyASTComparatorASTCurrentNodeASTExpRefASTFunc...
  method String (line 11) | func (i astNodeType) String() string {

FILE: vendor/github.com/jmespath/go-jmespath/functions.go
  type jpFunction (line 15) | type jpFunction
  type jpType (line 17) | type jpType
  constant jpUnknown (line 20) | jpUnknown     jpType = "unknown"
  constant jpNumber (line 21) | jpNumber      jpType = "number"
  constant jpString (line 22) | jpString      jpType = "string"
  constant jpArray (line 23) | jpArray       jpType = "array"
  constant jpObject (line 24) | jpObject      jpType = "object"
  constant jpArrayNumber (line 25) | jpArrayNumber jpType = "array[number]"
  constant jpArrayString (line 26) | jpArrayString jpType = "array[string]"
  constant jpExpref (line 27) | jpExpref      jpType = "expref"
  constant jpAny (line 28) | jpAny         jpType = "any"
  type functionEntry (line 31) | type functionEntry struct
    method resolveArgs (line 326) | func (e *functionEntry) resolveArgs(arguments []interface{}) ([]interf...
  type argSpec (line 38) | type argSpec struct
    method typeCheck (line 349) | func (a *argSpec) typeCheck(arg interface{}) error {
  type byExprString (line 43) | type byExprString struct
    method Len (line 50) | func (a *byExprString) Len() int {
    method Swap (line 53) | func (a *byExprString) Swap(i, j int) {
    method Less (line 56) | func (a *byExprString) Less(i, j int) bool {
  type byExprFloat (line 82) | type byExprFloat struct
    method Len (line 89) | func (a *byExprFloat) Len() int {
    method Swap (line 92) | func (a *byExprFloat) Swap(i, j int) {
    method Less (line 95) | func (a *byExprFloat) Less(i, j int) bool {
  type functionCaller (line 121) | type functionCaller struct
    method CallFunction (line 387) | func (f *functionCaller) CallFunction(name string, arguments []interfa...
  function newFunctionCaller (line 125) | func newFunctionCaller() *functionCaller {
  function jpfAbs (line 404) | func jpfAbs(arguments []interface{}) (interface{}, error) {
  function jpfLength (line 409) | func jpfLength(arguments []interface{}) (interface{}, error) {
  function jpfStartsWith (line 422) | func jpfStartsWith(arguments []interface{}) (interface{}, error) {
  function jpfAvg (line 428) | func jpfAvg(arguments []interface{}) (interface{}, error) {
  function jpfCeil (line 439) | func jpfCeil(arguments []interface{}) (interface{}, error) {
  function jpfContains (line 443) | func jpfContains(arguments []interface{}) (interface{}, error) {
  function jpfEndsWith (line 461) | func jpfEndsWith(arguments []interface{}) (interface{}, error) {
  function jpfFloor (line 466) | func jpfFloor(arguments []interface{}) (interface{}, error) {
  function jpfMap (line 470) | func jpfMap(arguments []interface{}) (interface{}, error) {
  function jpfMax (line 485) | func jpfMax(arguments []interface{}) (interface{}, error) {
  function jpfMerge (line 517) | func jpfMerge(arguments []interface{}) (interface{}, error) {
  function jpfMaxBy (line 527) | func jpfMaxBy(arguments []interface{}) (interface{}, error) {
  function jpfSum (line 582) | func jpfSum(arguments []interface{}) (interface{}, error) {
  function jpfMin (line 591) | func jpfMin(arguments []interface{}) (interface{}, error) {
  function jpfMinBy (line 623) | func jpfMinBy(arguments []interface{}) (interface{}, error) {
  function jpfType (line 677) | func jpfType(arguments []interface{}) (interface{}, error) {
  function jpfKeys (line 699) | func jpfKeys(arguments []interface{}) (interface{}, error) {
  function jpfValues (line 707) | func jpfValues(arguments []interface{}) (interface{}, error) {
  function jpfSort (line 715) | func jpfSort(arguments []interface{}) (interface{}, error) {
  function jpfSortBy (line 735) | func jpfSortBy(arguments []interface{}) (interface{}, error) {
  function jpfJoin (line 767) | func jpfJoin(arguments []interface{}) (interface{}, error) {
  function jpfReverse (line 777) | func jpfReverse(arguments []interface{}) (interface{}, error) {
  function jpfToArray (line 793) | func jpfToArray(arguments []interface{}) (interface{}, error) {
  function jpfToString (line 799) | func jpfToString(arguments []interface{}) (interface{}, error) {
  function jpfToNumber (line 809) | func jpfToNumber(arguments []interface{}) (interface{}, error) {
  function jpfNotNull (line 835) | func jpfNotNull(arguments []interface{}) (interface{}, error) {

FILE: vendor/github.com/jmespath/go-jmespath/interpreter.go
  type treeInterpreter (line 14) | type treeInterpreter struct
    method Execute (line 31) | func (intr *treeInterpreter) Execute(node ASTNode, value interface{}) ...
    method fieldFromStruct (line 317) | func (intr *treeInterpreter) fieldFromStruct(key string, value interfa...
    method flattenWithReflection (line 342) | func (intr *treeInterpreter) flattenWithReflection(value interface{}) ...
    method sliceWithReflection (line 363) | func (intr *treeInterpreter) sliceWithReflection(node ASTNode, value i...
    method filterProjectionWithReflection (line 381) | func (intr *treeInterpreter) filterProjectionWithReflection(node ASTNo...
    method projectWithReflection (line 404) | func (intr *treeInterpreter) projectWithReflection(node ASTNode, value...
  function newInterpreter (line 18) | func newInterpreter() *treeInterpreter {
  type expRef (line 24) | type expRef struct

FILE: vendor/github.com/jmespath/go-jmespath/lexer.go
  type token (line 12) | type token struct
    method String (line 111) | func (t token) String() string {
  type tokType (line 19) | type tokType
  constant eof (line 21) | eof = -1
  type Lexer (line 24) | type Lexer struct
    method next (line 122) | func (lexer *Lexer) next() rune {
    method back (line 133) | func (lexer *Lexer) back() {
    method peek (line 137) | func (lexer *Lexer) peek() rune {
    method tokenize (line 144) | func (lexer *Lexer) tokenize(expression string) ([]token, error) {
    method consumeUntil (line 223) | func (lexer *Lexer) consumeUntil(end rune) (string, error) {
    method consumeLiteral (line 244) | func (lexer *Lexer) consumeLiteral() (token, error) {
    method consumeRawStringLiteral (line 259) | func (lexer *Lexer) consumeRawStringLiteral() (token, error) {
    method syntaxError (line 296) | func (lexer *Lexer) syntaxError(msg string) SyntaxError {
    method matchOrElse (line 307) | func (lexer *Lexer) matchOrElse(first rune, second rune, matchedType t...
    method consumeLBracket (line 330) | func (lexer *Lexer) consumeLBracket() token {
    method consumeQuotedIdentifier (line 364) | func (lexer *Lexer) consumeQuotedIdentifier() (token, error) {
    method consumeUnquotedIdentifier (line 383) | func (lexer *Lexer) consumeUnquotedIdentifier() token {
    method consumeNumber (line 403) | func (lexer *Lexer) consumeNumber() token {
  type SyntaxError (line 32) | type SyntaxError struct
    method Error (line 38) | func (e SyntaxError) Error() string {
    method HighlightLocation (line 47) | func (e SyntaxError) HighlightLocation() string {
  constant tUnknown (line 53) | tUnknown tokType = iota
  constant tStar (line 54) | tStar
  constant tDot (line 55) | tDot
  constant tFilter (line 56) | tFilter
  constant tFlatten (line 57) | tFlatten
  constant tLparen (line 58) | tLparen
  constant tRparen (line 59) | tRparen
  constant tLbracket (line 60) | tLbracket
  constant tRbracket (line 61) | tRbracket
  constant tLbrace (line 62) | tLbrace
  constant tRbrace (line 63) | tRbrace
  constant tOr (line 64) | tOr
  constant tPipe (line 65) | tPipe
  constant tNumber (line 66) | tNumber
  constant tUnquotedIdentifier (line 67) | tUnquotedIdentifier
  constant tQuotedIdentifier (line 68) | tQuotedIdentifier
  constant tComma (line 69) | tComma
  constant tColon (line 70) | tColon
  constant tLT (line 71) | tLT
  constant tLTE (line 72) | tLTE
  constant tGT (line 73) | tGT
  constant tGTE (line 74) | tGTE
  constant tEQ (line 75) | tEQ
  constant tNE (line 76) | tNE
  constant tJSONLiteral (line 77) | tJSONLiteral
  constant tStringLiteral (line 78) | tStringLiteral
  constant tCurrent (line 79) | tCurrent
  constant tExpref (line 80) | tExpref
  constant tAnd (line 81) | tAnd
  constant tNot (line 82) | tNot
  constant tEOF (line 83) | tEOF
  constant identifierStartBits (line 102) | identifierStartBits uint64 = 576460745995190270
  function NewLexer (line 117) | func NewLexer() *Lexer {

FILE: vendor/github.com/jmespath/go-jmespath/parser.go
  type astNodeType (line 10) | type astNodeType
  constant ASTEmpty (line 14) | ASTEmpty astNodeType = iota
  constant ASTComparator (line 15) | ASTComparator
  constant ASTCurrentNode (line 16) | ASTCurrentNode
  constant ASTExpRef (line 17) | ASTExpRef
  constant ASTFunctionExpression (line 18) | ASTFunctionExpression
  constant ASTField (line 19) | ASTField
  constant ASTFilterProjection (line 20) | ASTFilterProjection
  constant ASTFlatten (line 21) | ASTFlatten
  constant ASTIdentity (line 22) | ASTIdentity
  constant ASTIndex (line 23) | ASTIndex
  constant ASTIndexExpression (line 24) | ASTIndexExpression
  constant ASTKeyValPair (line 25) | ASTKeyValPair
  constant ASTLiteral (line 26) | ASTLiteral
  constant ASTMultiSelectHash (line 27) | ASTMultiSelectHash
  constant ASTMultiSelectList (line 28) | ASTMultiSelectList
  constant ASTOrExpression (line 29) | ASTOrExpression
  constant ASTAndExpression (line 30) | ASTAndExpression
  constant ASTNotExpression (line 31) | ASTNotExpression
  constant ASTPipe (line 32) | ASTPipe
  constant ASTProjection (line 33) | ASTProjection
  constant ASTSubexpression (line 34) | ASTSubexpression
  constant ASTSlice (line 35) | ASTSlice
  constant ASTValueProjection (line 36) | ASTValueProjection
  type ASTNode (line 40) | type ASTNode struct
    method String (line 46) | func (node ASTNode) String() string {
    method PrettyPrint (line 55) | func (node ASTNode) PrettyPrint(indent int) string {
  type Parser (line 112) | type Parser struct
    method Parse (line 125) | func (p *Parser) Parse(expression string) (ASTNode, error) {
    method parseExpression (line 145) | func (p *Parser) parseExpression(bindingPower int) (ASTNode, error) {
    method parseIndexExpression (line 165) | func (p *Parser) parseIndexExpression() (ASTNode, error) {
    method parseSliceExpression (line 182) | func (p *Parser) parseSliceExpression() (ASTNode, error) {
    method match (line 212) | func (p *Parser) match(tokenType tokType) error {
    method led (line 220) | func (p *Parser) led(tokenType tokType, node ASTNode) (ASTNode, error) {
    method nud (line 317) | func (p *Parser) nud(token token) (ASTNode, error) {
    method parseMultiSelectList (line 416) | func (p *Parser) parseMultiSelectList() (ASTNode, error) {
    method parseMultiSelectHash (line 442) | func (p *Parser) parseMultiSelectHash() (ASTNode, error) {
    method projectIfSlice (line 485) | func (p *Parser) projectIfSlice(left ASTNode, right ASTNode) (ASTNode,...
    method parseFilter (line 499) | func (p *Parser) parseFilter(node ASTNode) (ASTNode, error) {
    method parseDotRHS (line 524) | func (p *Parser) parseDotRHS(bindingPower int) (ASTNode, error) {
    method parseProjectionRHS (line 542) | func (p *Parser) parseProjectionRHS(bindingPower int) (ASTNode, error) {
    method lookahead (line 561) | func (p *Parser) lookahead(number int) tokType {
    method current (line 565) | func (p *Parser) current() tokType {
    method lookaheadToken (line 569) | func (p *Parser) lookaheadToken(number int) token {
    method advance (line 573) | func (p *Parser) advance() {
    method syntaxError (line 586) | func (p *Parser) syntaxError(msg string) SyntaxError {
    method syntaxErrorToken (line 597) | func (p *Parser) syntaxErrorToken(msg string, t token) SyntaxError {
  function NewParser (line 119) | func NewParser() *Parser {
  function tokensOneOf (line 577) | func tokensOneOf(elements []tokType, token tokType) bool {

FILE: vendor/github.com/jmespath/go-jmespath/toktype_string.go
  constant _tokType_name (line 7) | _tokType_name = "tUnknowntStartDottFiltertFlattentLparentRparentLbracket...
  method String (line 11) | func (i tokType) String() string {

FILE: vendor/github.com/jmespath/go-jmespath/util.go
  function isFalse (line 13) | func isFalse(value interface{}) bool {
  function objsEqual (line 50) | func objsEqual(left interface{}, right interface{}) bool {
  type sliceParam (line 57) | type sliceParam struct
  function slice (line 63) | func slice(slice []interface{}, parts []sliceParam) ([]interface{}, erro...
  function computeSliceParams (line 82) | func computeSliceParams(length int, parts []sliceParam) ([]int, error) {
  function capSlice (line 120) | func capSlice(length int, actual int, step int) int {
  function toArrayNum (line 143) | func toArrayNum(data interface{}) ([]float64, bool) {
  function toArrayStr (line 164) | func toArrayStr(data interface{}) ([]string, bool) {
  function isSliceType (line 180) | func isSliceType(v interface{}) bool {

FILE: writer.go
  type Writer (line 13) | type Writer struct
    method WriteBatch (line 31) | func (w *Writer) WriteBatch(records []Record) (string, error) {
  function NewWriter (line 20) | func NewWriter(sess *awsSession.Session, logGroupName, logStreamName, fi...
Condensed preview — 130 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (944K chars).
[
  {
    "path": "README.md",
    "chars": 10413,
    "preview": "# journald-cloudwatch-logs\n\nThis small utility monitors the systemd journal, managed by `journald`, and writes journal e"
  },
  {
    "path": "config.go",
    "chars": 6152,
    "preview": "package main\n\nimport (\n\t\"fmt\"\n\t\"io/ioutil\"\n\t\"os\"\n\t\"reflect\"\n\t\"strings\"\n\n\t\"github.com/aws/aws-sdk-go/aws\"\n\tawsCredentials"
  },
  {
    "path": "journal.go",
    "chars": 368,
    "preview": "package main\n\nimport (\n\t\"github.com/coreos/go-systemd/sdjournal\"\n\t\"strconv\"\n)\n\nfunc AddLogFilters(journal *sdjournal.Jou"
  },
  {
    "path": "main.go",
    "chars": 3320,
    "preview": "package main\n\nimport (\n\t\"flag\"\n\t\"fmt\"\n\t\"log\"\n\t\"os\"\n\n\t\"github.com/coreos/go-systemd/sdjournal\"\n)\n\nvar help = flag.Bool(\"h"
  },
  {
    "path": "reader.go",
    "chars": 3356,
    "preview": "package main\n\nimport (\n\t\"fmt\"\n\t\"time\"\n\n\t\"github.com/coreos/go-systemd/sdjournal\"\n)\n\nfunc ReadRecords(instanceId string, "
  },
  {
    "path": "record.go",
    "chars": 2752,
    "preview": "package main\n\ntype Priority int\n\nvar (\n\tEMERGENCY Priority = 0\n\tALERT     Priority = 1\n\tCRITICAL  Priority = 2\n\tERROR   "
  },
  {
    "path": "state.go",
    "chars": 933,
    "preview": "package main\n\nimport (\n\t\"fmt\"\n\t\"os\"\n)\n\nconst stateFormat = \"%s\\n%s\\n\"\nconst mapSize = 64\n\ntype State struct {\n\tfile *os."
  },
  {
    "path": "terminate.go",
    "chars": 532,
    "preview": "package main\n\nimport (\n\t\"os\"\n\t\"os/signal\"\n\t\"syscall\"\n)\n\n// MakeTerminateChannel returns a channel that will become reada"
  },
  {
    "path": "unmarshal.go",
    "chars": 1786,
    "preview": "package main\n\nimport (\n\t\"fmt\"\n\t\"reflect\"\n\t\"strconv\"\n\t\"time\"\n\n\t\"github.com/coreos/go-systemd/sdjournal\"\n)\n\nfunc Unmarshal"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/LICENSE.txt",
    "chars": 11358,
    "preview": "\n                                 Apache License\n                           Version 2.0, January 2004\n                  "
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/NOTICE.txt",
    "chars": 121,
    "preview": "AWS SDK for Go\nCopyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved. \nCopyright 2014-2015 Stripe, Inc."
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/awserr/error.go",
    "chars": 4764,
    "preview": "// Package awserr represents API error interface accessors for the SDK.\npackage awserr\n\n// An Error wraps lower level er"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/awserr/types.go",
    "chars": 5434,
    "preview": "package awserr\n\nimport \"fmt\"\n\n// SprintError returns a string of the formatted error code.\n//\n// Both extra and origErr "
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/awsutil/copy.go",
    "chars": 2779,
    "preview": "package awsutil\n\nimport (\n\t\"io\"\n\t\"reflect\"\n\t\"time\"\n)\n\n// Copy deeply copies a src structure to dst. Useful for copying r"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/awsutil/equal.go",
    "chars": 924,
    "preview": "package awsutil\n\nimport (\n\t\"reflect\"\n)\n\n// DeepEqual returns if the two values are deeply equal like reflect.DeepEqual.\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/awsutil/path_value.go",
    "chars": 5424,
    "preview": "package awsutil\n\nimport (\n\t\"reflect\"\n\t\"regexp\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/jmespath/go-jmespath\"\n)\n\nvar indexRe "
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/awsutil/prettify.go",
    "chars": 2390,
    "preview": "package awsutil\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"io\"\n\t\"reflect\"\n\t\"strings\"\n)\n\n// Prettify returns the string representation o"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/awsutil/string_value.go",
    "chars": 1951,
    "preview": "package awsutil\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"reflect\"\n\t\"strings\"\n)\n\n// StringValue returns the string representation of a"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/client/client.go",
    "chars": 4143,
    "preview": "package client\n\nimport (\n\t\"fmt\"\n\t\"io/ioutil\"\n\t\"net/http/httputil\"\n\n\t\"github.com/aws/aws-sdk-go/aws\"\n\t\"github.com/aws/aws"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/client/default_retryer.go",
    "chars": 2324,
    "preview": "package client\n\nimport (\n\t\"math/rand\"\n\t\"sync\"\n\t\"time\"\n\n\t\"github.com/aws/aws-sdk-go/aws/request\"\n)\n\n// DefaultRetryer imp"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/client/metadata/client_info.go",
    "chars": 268,
    "preview": "package metadata\n\n// ClientInfo wraps immutable data from the client.Client structure.\ntype ClientInfo struct {\n\tService"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/config.go",
    "chars": 13393,
    "preview": "package aws\n\nimport (\n\t\"net/http\"\n\t\"time\"\n\n\t\"github.com/aws/aws-sdk-go/aws/credentials\"\n)\n\n// UseServiceDefaultRetries i"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/convert_types.go",
    "chars": 8358,
    "preview": "package aws\n\nimport \"time\"\n\n// String returns a pointer to the string value passed in.\nfunc String(v string) *string {\n\t"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/corehandlers/handlers.go",
    "chars": 5221,
    "preview": "package corehandlers\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"io\"\n\t\"io/ioutil\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"regexp\"\n\t\"runtime\"\n\t\"strconv\""
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/corehandlers/param_validator.go",
    "chars": 512,
    "preview": "package corehandlers\n\nimport \"github.com/aws/aws-sdk-go/aws/request\"\n\n// ValidateParametersHandler is a request handler "
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/credentials/chain_provider.go",
    "chars": 3179,
    "preview": "package credentials\n\nimport (\n\t\"github.com/aws/aws-sdk-go/aws/awserr\"\n)\n\nvar (\n\t// ErrNoValidProvidersFoundInChain Is re"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/credentials/credentials.go",
    "chars": 7028,
    "preview": "// Package credentials provides credential retrieval and management\n//\n// The Credentials is the primary method of getti"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/credentials/ec2rolecreds/ec2_role_provider.go",
    "chars": 5642,
    "preview": "package ec2rolecreds\n\nimport (\n\t\"bufio\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"path\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/aws/aws-sdk-go/"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/credentials/endpointcreds/provider.go",
    "chars": 5824,
    "preview": "// Package endpointcreds provides support for retrieving credentials from an\n// arbitrary HTTP endpoint.\n//\n// The crede"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/credentials/env_provider.go",
    "chars": 2075,
    "preview": "package credentials\n\nimport (\n\t\"os\"\n\n\t\"github.com/aws/aws-sdk-go/aws/awserr\"\n)\n\n// EnvProviderName provides a name of En"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/credentials/example.ini",
    "chars": 243,
    "preview": "[default]\naws_access_key_id = accessKey\naws_secret_access_key = secret\naws_session_token = token\n\n[no_token]\naws_access_"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/credentials/shared_credentials_provider.go",
    "chars": 4688,
    "preview": "package credentials\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"path/filepath\"\n\n\t\"github.com/go-ini/ini\"\n\n\t\"github.com/aws/aws-sdk-go/aws/a"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/credentials/static_provider.go",
    "chars": 1716,
    "preview": "package credentials\n\nimport (\n\t\"github.com/aws/aws-sdk-go/aws/awserr\"\n)\n\n// StaticProviderName provides a name of Static"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/credentials/stscreds/assume_role_provider.go",
    "chars": 5805,
    "preview": "// Package stscreds are credential Providers to retrieve STS AWS credentials.\n//\n// STS provides multiple ways to retrie"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/defaults/defaults.go",
    "chars": 4397,
    "preview": "// Package defaults is a collection of helpers to retrieve the SDK's default\n// configuration and handlers.\n//\n// Genera"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/ec2metadata/api.go",
    "chars": 4296,
    "preview": "package ec2metadata\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"path\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/aws/aws-sdk-go/aws/awserr"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/ec2metadata/service.go",
    "chars": 3856,
    "preview": "// Package ec2metadata provides the client for making API calls to the\n// EC2 Metadata service.\npackage ec2metadata\n\nimp"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/errors.go",
    "chars": 508,
    "preview": "package aws\n\nimport \"github.com/aws/aws-sdk-go/aws/awserr\"\n\nvar (\n\t// ErrMissingRegion is an error that is returned if r"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/logger.go",
    "chars": 3717,
    "preview": "package aws\n\nimport (\n\t\"log\"\n\t\"os\"\n)\n\n// A LogLevelType defines the level logging should be performed at. Used to instru"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/request/handlers.go",
    "chars": 5432,
    "preview": "package request\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n)\n\n// A Handlers provides a collection of request handlers for various\n// st"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/request/http_request.go",
    "chars": 611,
    "preview": "// +build go1.5\n\npackage request\n\nimport (\n\t\"io\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc copyHTTPRequest(r *http.Request, body io"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/request/http_request_1_4.go",
    "chars": 520,
    "preview": "// +build !go1.5\n\npackage request\n\nimport (\n\t\"io\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc copyHTTPRequest(r *http.Request, body i"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/request/offset_reader.go",
    "chars": 968,
    "preview": "package request\n\nimport (\n\t\"io\"\n\t\"sync\"\n)\n\n// offsetReader is a thread-safe io.ReadCloser to prevent racing\n// with retr"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/request/request.go",
    "chars": 8798,
    "preview": "package request\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"io\"\n\t\"io/ioutil\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"reflect\"\n\t\"strings\"\n\t\"time\"\n\n\t\"git"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/request/request_pagination.go",
    "chars": 2777,
    "preview": "package request\n\nimport (\n\t\"reflect\"\n\n\t\"github.com/aws/aws-sdk-go/aws\"\n\t\"github.com/aws/aws-sdk-go/aws/awsutil\"\n)\n\n//typ"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/request/retryer.go",
    "chars": 2854,
    "preview": "package request\n\nimport (\n\t\"time\"\n\n\t\"github.com/aws/aws-sdk-go/aws\"\n\t\"github.com/aws/aws-sdk-go/aws/awserr\"\n)\n\n// Retrye"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/request/validation.go",
    "chars": 6227,
    "preview": "package request\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\n\t\"github.com/aws/aws-sdk-go/aws/awserr\"\n)\n\nconst (\n\t// InvalidParameterErrCod"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/session/doc.go",
    "chars": 9011,
    "preview": "/*\nPackage session provides configuration for the SDK's service clients.\n\nSessions can be shared across all service clie"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/session/env_config.go",
    "chars": 5647,
    "preview": "package session\n\nimport (\n\t\"os\"\n\t\"path/filepath\"\n\t\"strconv\"\n\n\t\"github.com/aws/aws-sdk-go/aws/credentials\"\n)\n\n// envConfi"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/session/session.go",
    "chars": 13790,
    "preview": "package session\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/aws/aws-sdk-go/aws\"\n\t\"github.com/aws/aws-sdk-go/aws/awserr\"\n\t\"github.com/"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/session/shared_config.go",
    "chars": 8629,
    "preview": "package session\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\n\t\"github.com/aws/aws-sdk-go/aws/awserr\"\n\t\"github.com/aws/aws-sdk-go/aws/credenti"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/signer/v4/header_rules.go",
    "chars": 1816,
    "preview": "package v4\n\nimport (\n\t\"net/http\"\n\t\"strings\"\n)\n\n// validator houses a set of rule needed for validation of a\n// string va"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/signer/v4/v4.go",
    "chars": 20883,
    "preview": "// Package v4 implements signing for AWS V4 signer\n//\n// Provides request signing for request that need to be signed wit"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/types.go",
    "chars": 3057,
    "preview": "package aws\n\nimport (\n\t\"io\"\n\t\"sync\"\n)\n\n// ReadSeekCloser wraps a io.Reader returning a ReaderSeekerCloser\nfunc ReadSeekC"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/version.go",
    "chars": 231,
    "preview": "// Package aws provides core functionality for making requests to AWS services.\npackage aws\n\n// SDKName is the name of t"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/private/endpoints/endpoints.go",
    "chars": 2283,
    "preview": "// Package endpoints validates regional endpoints for services.\npackage endpoints\n\n//go:generate go run ../model/cli/gen"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/private/endpoints/endpoints.json",
    "chars": 1937,
    "preview": "{\n  \"version\": 2,\n  \"endpoints\": {\n    \"*/*\": {\n      \"endpoint\": \"{service}.{region}.amazonaws.com\"\n    },\n    \"cn-nort"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/private/endpoints/endpoints_map.go",
    "chars": 2021,
    "preview": "package endpoints\n\n// THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT.\n\ntype endpointStruct struct {\n\tVersion   int\n\tE"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/private/protocol/idempotency.go",
    "chars": 2114,
    "preview": "package protocol\n\nimport (\n\t\"crypto/rand\"\n\t\"fmt\"\n\t\"reflect\"\n)\n\n// RandReader is the random reader the protocol package w"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/private/protocol/json/jsonutil/build.go",
    "chars": 5644,
    "preview": "// Package jsonutil provides JSON serialization of AWS requests and responses.\npackage jsonutil\n\nimport (\n\t\"bytes\"\n\t\"enc"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/private/protocol/json/jsonutil/unmarshal.go",
    "chars": 4480,
    "preview": "package jsonutil\n\nimport (\n\t\"encoding/base64\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"io/ioutil\"\n\t\"reflect\"\n\t\"time\"\n)\n\n// Unmars"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/private/protocol/jsonrpc/jsonrpc.go",
    "chars": 3697,
    "preview": "// Package jsonrpc provides JSON RPC utilities for serialization of AWS\n// requests and responses.\npackage jsonrpc\n\n//go"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/private/protocol/query/build.go",
    "chars": 1204,
    "preview": "// Package query provides serialization of AWS query requests, and responses.\npackage query\n\n//go:generate go run ../../"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/private/protocol/query/queryutil/queryutil.go",
    "chars": 5343,
    "preview": "package queryutil\n\nimport (\n\t\"encoding/base64\"\n\t\"fmt\"\n\t\"net/url\"\n\t\"reflect\"\n\t\"sort\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n\n\t\"git"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/private/protocol/query/unmarshal.go",
    "chars": 1280,
    "preview": "package query\n\n//go:generate go run ../../../models/protocol_tests/generate.go ../../../models/protocol_tests/output/que"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/private/protocol/query/unmarshal_error.go",
    "chars": 1808,
    "preview": "package query\n\nimport (\n\t\"encoding/xml\"\n\t\"io/ioutil\"\n\n\t\"github.com/aws/aws-sdk-go/aws/awserr\"\n\t\"github.com/aws/aws-sdk-g"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/private/protocol/rest/build.go",
    "chars": 6186,
    "preview": "// Package rest provides RESTful serialization of AWS requests and responses.\npackage rest\n\nimport (\n\t\"bytes\"\n\t\"encoding"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/private/protocol/rest/payload.go",
    "chars": 1108,
    "preview": "package rest\n\nimport \"reflect\"\n\n// PayloadMember returns the payload field member of i if there is one, or nil.\nfunc Pay"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/private/protocol/rest/unmarshal.go",
    "chars": 5390,
    "preview": "package rest\n\nimport (\n\t\"encoding/base64\"\n\t\"fmt\"\n\t\"io\"\n\t\"io/ioutil\"\n\t\"net/http\"\n\t\"reflect\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\""
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/private/protocol/unmarshal.go",
    "chars": 596,
    "preview": "package protocol\n\nimport (\n\t\"io\"\n\t\"io/ioutil\"\n\n\t\"github.com/aws/aws-sdk-go/aws/request\"\n)\n\n// UnmarshalDiscardBodyHandle"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil/build.go",
    "chars": 7827,
    "preview": "// Package xmlutil provides XML serialization of AWS requests and responses.\npackage xmlutil\n\nimport (\n\t\"encoding/base64"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil/unmarshal.go",
    "chars": 6262,
    "preview": "package xmlutil\n\nimport (\n\t\"encoding/base64\"\n\t\"encoding/xml\"\n\t\"fmt\"\n\t\"io\"\n\t\"reflect\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n)\n\n//"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil/xml_to_struct.go",
    "chars": 2507,
    "preview": "package xmlutil\n\nimport (\n\t\"encoding/xml\"\n\t\"io\"\n\t\"sort\"\n)\n\n// A XMLNode contains the values to be encoded or decoded.\nty"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/service/cloudwatchlogs/api.go",
    "chars": 133911,
    "preview": "// THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT.\n\n// Package cloudwatchlogs provides a client for Amazon CloudWatch"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/service/cloudwatchlogs/service.go",
    "chars": 4695,
    "preview": "// THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT.\n\npackage cloudwatchlogs\n\nimport (\n\t\"github.com/aws/aws-sdk-go/aws\""
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/service/sts/api.go",
    "chars": 77137,
    "preview": "// THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT.\n\n// Package sts provides a client for AWS Security Token Service.\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/service/sts/customizations.go",
    "chars": 272,
    "preview": "package sts\n\nimport \"github.com/aws/aws-sdk-go/aws/request\"\n\nfunc init() {\n\tinitRequest = func(r *request.Request) {\n\t\ts"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/service/sts/service.go",
    "chars": 5653,
    "preview": "// THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT.\n\npackage sts\n\nimport (\n\t\"github.com/aws/aws-sdk-go/aws\"\n\t\"github.c"
  },
  {
    "path": "vendor/github.com/coreos/go-systemd/LICENSE",
    "chars": 10273,
    "preview": "Apache License\nVersion 2.0, January 2004\nhttp://www.apache.org/licenses/\n\nTERMS AND CONDITIONS FOR USE, REPRODUCTION, AN"
  },
  {
    "path": "vendor/github.com/coreos/go-systemd/sdjournal/functions.go",
    "chars": 1544,
    "preview": "// Copyright 2015 RedHat, Inc.\n// Copyright 2015 CoreOS, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the "
  },
  {
    "path": "vendor/github.com/coreos/go-systemd/sdjournal/journal.go",
    "chars": 25563,
    "preview": "// Copyright 2015 RedHat, Inc.\n// Copyright 2015 CoreOS, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the "
  },
  {
    "path": "vendor/github.com/coreos/go-systemd/sdjournal/read.go",
    "chars": 7150,
    "preview": "// Copyright 2015 RedHat, Inc.\n// Copyright 2015 CoreOS, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the "
  },
  {
    "path": "vendor/github.com/coreos/pkg/LICENSE",
    "chars": 11325,
    "preview": "Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licens"
  },
  {
    "path": "vendor/github.com/coreos/pkg/NOTICE",
    "chars": 126,
    "preview": "CoreOS Project\nCopyright 2014 CoreOS, Inc\n\nThis product includes software developed at CoreOS, Inc.\n(http://www.coreos.c"
  },
  {
    "path": "vendor/github.com/coreos/pkg/dlopen/dlopen.go",
    "chars": 2277,
    "preview": "// Copyright 2016 CoreOS, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use "
  },
  {
    "path": "vendor/github.com/coreos/pkg/dlopen/dlopen_example.go",
    "chars": 1313,
    "preview": "// Copyright 2015 CoreOS, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use "
  },
  {
    "path": "vendor/github.com/go-ini/ini/LICENSE",
    "chars": 10273,
    "preview": "Apache License\nVersion 2.0, January 2004\nhttp://www.apache.org/licenses/\n\nTERMS AND CONDITIONS FOR USE, REPRODUCTION, AN"
  },
  {
    "path": "vendor/github.com/go-ini/ini/Makefile",
    "chars": 155,
    "preview": ".PHONY: build test bench vet\n\nbuild: vet bench\n\ntest:\n\tgo test -v -cover -race\n\nbench:\n\tgo test -v -cover -race -test.be"
  },
  {
    "path": "vendor/github.com/go-ini/ini/README.md",
    "chars": 17001,
    "preview": "INI [![Build Status](https://travis-ci.org/go-ini/ini.svg?branch=master)](https://travis-ci.org/go-ini/ini)\n===\n\n![](htt"
  },
  {
    "path": "vendor/github.com/go-ini/ini/README_ZH.md",
    "chars": 12675,
    "preview": "本包提供了 Go 语言中读写 INI 文件的功能。\n\n## 功能特性\n\n- 支持覆盖加载多个数据源(`[]byte` 或文件)\n- 支持递归读取键值\n- 支持读取父子分区\n- 支持读取自增键名\n- 支持读取多行的键值\n- 支持大量辅助方法\n"
  },
  {
    "path": "vendor/github.com/go-ini/ini/error.go",
    "chars": 883,
    "preview": "// Copyright 2016 Unknwon\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"): you may\n// not use this "
  },
  {
    "path": "vendor/github.com/go-ini/ini/ini.go",
    "chars": 12777,
    "preview": "// Copyright 2014 Unknwon\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"): you may\n// not use this "
  },
  {
    "path": "vendor/github.com/go-ini/ini/key.go",
    "chars": 18698,
    "preview": "// Copyright 2014 Unknwon\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"): you may\n// not use this "
  },
  {
    "path": "vendor/github.com/go-ini/ini/parser.go",
    "chars": 7377,
    "preview": "// Copyright 2015 Unknwon\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"): you may\n// not use this "
  },
  {
    "path": "vendor/github.com/go-ini/ini/section.go",
    "chars": 4621,
    "preview": "// Copyright 2014 Unknwon\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"): you may\n// not use this "
  },
  {
    "path": "vendor/github.com/go-ini/ini/struct.go",
    "chars": 11729,
    "preview": "// Copyright 2014 Unknwon\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"): you may\n// not use this "
  },
  {
    "path": "vendor/github.com/hashicorp/hcl/LICENSE",
    "chars": 15885,
    "preview": "Mozilla Public License, version 2.0\n\n1. Definitions\n\n1.1. “Contributor”\n\n     means each individual or legal entity that"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl/Makefile",
    "chars": 246,
    "preview": "TEST?=./...\r\n\r\ndefault: test\r\n\r\nfmt: generate\r\n\tgo fmt ./...\r\n\r\ntest: generate\r\n\tgo test $(TEST) $(TESTARGS)\r\n\r\ngenerate"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl/README.md",
    "chars": 4278,
    "preview": "# HCL\n\n[![GoDoc](https://godoc.org/github.com/hashicorp/hcl?status.png)](https://godoc.org/github.com/hashicorp/hcl) [!["
  },
  {
    "path": "vendor/github.com/hashicorp/hcl/appveyor.yml",
    "chars": 296,
    "preview": "version: \"build-{branch}-{build}\"\nimage: Visual Studio 2015\nclone_folder: c:\\gopath\\src\\github.com\\hashicorp\\hcl\nenviron"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl/decoder.go",
    "chars": 16707,
    "preview": "package hcl\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"reflect\"\n\t\"sort\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/hashicorp/hcl/hcl/ast\"\n\t\"g"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl/hcl/ast/ast.go",
    "chars": 5484,
    "preview": "// Package ast declares the types used to represent syntax trees for HCL\n// (HashiCorp Configuration Language)\npackage a"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl/hcl/ast/walk.go",
    "chars": 1275,
    "preview": "package ast\n\nimport \"fmt\"\n\n// WalkFunc describes a function to be called for each node during a Walk. The\n// returned no"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl/hcl/parser/error.go",
    "chars": 266,
    "preview": "package parser\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/hashicorp/hcl/hcl/token\"\n)\n\n// PosError is a parse error that contains a p"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl/hcl/parser/parser.go",
    "chars": 11906,
    "preview": "// Package parser implements a parser for HCL (HashiCorp Configuration\n// Language)\npackage parser\n\nimport (\n\t\"errors\"\n\t"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl/hcl/scanner/scanner.go",
    "chars": 14560,
    "preview": "// Package scanner implements a scanner for HCL (HashiCorp Configuration\n// Language) source text.\npackage scanner\n\nimpo"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl/hcl/strconv/quote.go",
    "chars": 4828,
    "preview": "package strconv\n\nimport (\n\t\"errors\"\n\t\"unicode/utf8\"\n)\n\n// ErrSyntax indicates that a value does not have the right synta"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl/hcl/token/position.go",
    "chars": 1226,
    "preview": "package token\n\nimport \"fmt\"\n\n// Pos describes an arbitrary source position\n// including the file, line, and column locat"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl/hcl/token/token.go",
    "chars": 5044,
    "preview": "// Package token defines constants representing the lexical tokens for HCL\n// (HashiCorp Configuration Language)\npackage"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl/hcl.go",
    "chars": 480,
    "preview": "// Package hcl decodes HCL into usable Go structures.\n//\n// hcl input can come in either pure HCL format or JSON format."
  },
  {
    "path": "vendor/github.com/hashicorp/hcl/json/parser/flatten.go",
    "chars": 2985,
    "preview": "package parser\n\nimport \"github.com/hashicorp/hcl/hcl/ast\"\n\n// flattenObjects takes an AST node, walks it, and flattens\nf"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl/json/parser/parser.go",
    "chars": 6609,
    "preview": "package parser\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\n\t\"github.com/hashicorp/hcl/hcl/ast\"\n\t\"github.com/hashicorp/hcl/json/scanner\"\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl/json/scanner/scanner.go",
    "chars": 10609,
    "preview": "package scanner\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"os\"\n\t\"unicode\"\n\t\"unicode/utf8\"\n\n\t\"github.com/hashicorp/hcl/json/token\"\n)\n\n//"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl/json/token/position.go",
    "chars": 1226,
    "preview": "package token\n\nimport \"fmt\"\n\n// Pos describes an arbitrary source position\n// including the file, line, and column locat"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl/json/token/token.go",
    "chars": 2649,
    "preview": "package token\n\nimport (\n\t\"fmt\"\n\t\"strconv\"\n\n\thcltoken \"github.com/hashicorp/hcl/hcl/token\"\n)\n\n// Token defines a single H"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl/lex.go",
    "chars": 494,
    "preview": "package hcl\n\nimport (\n\t\"unicode\"\n\t\"unicode/utf8\"\n)\n\ntype lexModeValue byte\n\nconst (\n\tlexModeUnknown lexModeValue = iota\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl/parse.go",
    "chars": 892,
    "preview": "package hcl\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/hashicorp/hcl/hcl/ast\"\n\thclParser \"github.com/hashicorp/hcl/hcl/parser\"\n\tjson"
  },
  {
    "path": "vendor/github.com/jmespath/go-jmespath/LICENSE",
    "chars": 559,
    "preview": "Copyright 2015 James Saryerwinnie\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this "
  },
  {
    "path": "vendor/github.com/jmespath/go-jmespath/Makefile",
    "chars": 998,
    "preview": "\nCMD = jpgo\n\nhelp:\n\t@echo \"Please use \\`make <target>' where <target> is one of\"\n\t@echo \"  test                    to ru"
  },
  {
    "path": "vendor/github.com/jmespath/go-jmespath/README.md",
    "chars": 209,
    "preview": "# go-jmespath - A JMESPath implementation in Go\n\n[![Build Status](https://img.shields.io/travis/jmespath/go-jmespath.svg"
  },
  {
    "path": "vendor/github.com/jmespath/go-jmespath/api.go",
    "chars": 1473,
    "preview": "package jmespath\n\nimport \"strconv\"\n\n// JmesPath is the epresentation of a compiled JMES path query. A JmesPath is\n// saf"
  },
  {
    "path": "vendor/github.com/jmespath/go-jmespath/astnodetype_string.go",
    "chars": 793,
    "preview": "// generated by stringer -type astNodeType; DO NOT EDIT\n\npackage jmespath\n\nimport \"fmt\"\n\nconst _astNodeType_name = \"ASTE"
  },
  {
    "path": "vendor/github.com/jmespath/go-jmespath/functions.go",
    "chars": 18532,
    "preview": "package jmespath\n\nimport (\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"math\"\n\t\"reflect\"\n\t\"sort\"\n\t\"strconv\"\n\t\"strings\"\n\t\"unicode/"
  },
  {
    "path": "vendor/github.com/jmespath/go-jmespath/interpreter.go",
    "chars": 10508,
    "preview": "package jmespath\n\nimport (\n\t\"errors\"\n\t\"reflect\"\n\t\"unicode\"\n\t\"unicode/utf8\"\n)\n\n/* This is a tree based interpreter.  It w"
  },
  {
    "path": "vendor/github.com/jmespath/go-jmespath/lexer.go",
    "chars": 10251,
    "preview": "package jmespath\n\nimport (\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"strconv\"\n\t\"strings\"\n\t\"unicode/utf8\"\n)\n\ntype token struct {"
  },
  {
    "path": "vendor/github.com/jmespath/go-jmespath/parser.go",
    "chars": 15312,
    "preview": "package jmespath\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"strconv\"\n\t\"strings\"\n)\n\ntype astNodeType int\n\n//go:generate stringer"
  },
  {
    "path": "vendor/github.com/jmespath/go-jmespath/toktype_string.go",
    "chars": 692,
    "preview": "// generated by stringer -type=tokType; DO NOT EDIT\n\npackage jmespath\n\nimport \"fmt\"\n\nconst _tokType_name = \"tUnknowntSta"
  },
  {
    "path": "vendor/github.com/jmespath/go-jmespath/util.go",
    "chars": 4334,
    "preview": "package jmespath\n\nimport (\n\t\"errors\"\n\t\"reflect\"\n)\n\n// IsFalse determines if an object is false based on the JMESPath spe"
  },
  {
    "path": "vendor/vendor.json",
    "chars": 7924,
    "preview": "{\n\t\"comment\": \"\",\n\t\"ignore\": \"test\",\n\t\"package\": [\n\t\t{\n\t\t\t\"checksumSHA1\": \"Ex4zN+CcY/wtoDoK/penrVAxAok=\",\n\t\t\t\"path\": \"gi"
  },
  {
    "path": "writer.go",
    "chars": 3205,
    "preview": "package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\n\t\"github.com/aws/aws-sdk-go/aws\"\n\t\"github.com/aws/aws-sdk-go/aws/awserr\""
  }
]

About this extraction

This page contains the full source code of the saymedia/journald-cloudwatch-logs GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 130 files (844.8 KB), approximately 227.8k tokens, and a symbol index with 1597 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!