Migrated from godep to gomod
diff --git a/Gopkg.lock b/Gopkg.lock
deleted file mode 100644
index 4664ced..0000000
--- a/Gopkg.lock
+++ /dev/null
@@ -1,1211 +0,0 @@
-# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'.
-
-
-[[projects]]
-  branch = "default"
-  digest = "1:db5c4e7a9516334fb1e9d5951fb9943d0f13e4f415a77c22b97e60f4d10a62a7"
-  name = "bitbucket.org/ww/goautoneg"
-  packages = ["."]
-  pruneopts = ""
-  revision = "75cd24fc2f2c2a2088577d12123ddee5f54e0675"
-
-[[projects]]
-  branch = "master"
-  digest = "1:6978a38432a017763a148afbc7ce6491734b54292af7d3e969d84d2e9dd242e2"
-  name = "github.com/Azure/go-ansiterm"
-  packages = [
-    ".",
-    "winterm"
-  ]
-  pruneopts = ""
-  revision = "d6e3b3328b783f23731bc4d058875b0371ff8109"
-
-[[projects]]
-  digest = "1:b0fe84bcee1d0c3579d855029ccd3a76deea187412da2976985e4946289dbb2c"
-  name = "github.com/NYTimes/gziphandler"
-  packages = ["."]
-  pruneopts = ""
-  revision = "2600fb119af974220d3916a5916d6e31176aac1b"
-  version = "v1.0.1"
-
-[[projects]]
-  digest = "1:8e47871087b94913898333f37af26732faaab30cdb41571136cf7aec9921dae7"
-  name = "github.com/PuerkitoBio/purell"
-  packages = ["."]
-  pruneopts = ""
-  revision = "0bcb03f4b4d0a9428594752bd2a3b9aa0a9d4bd4"
-  version = "v1.1.0"
-
-[[projects]]
-  branch = "master"
-  digest = "1:331a419049c2be691e5ba1d24342fc77c7e767a80c666a18fd8a9f7b82419c1c"
-  name = "github.com/PuerkitoBio/urlesc"
-  packages = ["."]
-  pruneopts = ""
-  revision = "de5bf2ad457846296e2031421a34e2568e304e35"
-
-[[projects]]
-  digest = "1:9d57e200ef5ccc4217fe0a34287308bac652435e7c6513f6263e0493d2245c56"
-  name = "github.com/Sirupsen/logrus"
-  packages = ["."]
-  pruneopts = ""
-  revision = "bcd833dfe83d3cebad139e4a29ed79cb2318bf95"
-  version = "v1.2.0"
-
-[[projects]]
-  branch = "master"
-  digest = "1:c0bec5f9b98d0bc872ff5e834fac186b807b656683bd29cb82fb207a1513fabb"
-  name = "github.com/beorn7/perks"
-  packages = ["quantile"]
-  pruneopts = ""
-  revision = "3a771d992973f24aa725d07868b467d1ddfceafb"
-
-[[projects]]
-  digest = "1:600d64f7857a14d7715ce2795868c76b85e634fc13aba93b23431039fed2d9ea"
-  name = "github.com/coreos/etcd"
-  packages = [
-    "auth/authpb",
-    "clientv3",
-    "etcdserver/api/v3rpc/rpctypes",
-    "etcdserver/etcdserverpb",
-    "mvcc/mvccpb",
-    "pkg/tlsutil",
-    "pkg/transport",
-    "pkg/types"
-  ]
-  pruneopts = ""
-  revision = "27fc7e2296f506182f58ce846e48f36b34fe6842"
-  version = "v3.3.10"
-
-[[projects]]
-  digest = "1:94e3b73c12e63e092f82d45771c16055c1b1b13943ed0e62460a84ae79dcf136"
-  name = "github.com/coreos/go-systemd"
-  packages = ["daemon"]
-  pruneopts = ""
-  revision = "9002847aa1425fb6ac49077c0a630b3b67e0fbfd"
-  version = "v18"
-
-[[projects]]
-  branch = "master"
-  digest = "1:d4cdaee0b210c90e76f895778ef8b54ab68eac94537216775e2692b565e6c6bf"
-  name = "github.com/d2g/dhcp4"
-  packages = ["."]
-  pruneopts = ""
-  revision = "a1d1b6c41b1ce8a71a5121a9cee31809c4707d9c"
-
-[[projects]]
-  digest = "1:6ecd75b89037757b74ab549f7f9f673a429a0c44a70ab8f3b07d5d9bdbd98e00"
-  name = "github.com/d2g/dhcp4client"
-  packages = ["."]
-  pruneopts = ""
-  revision = "b7a004ff1a09ab6723625e179a44e476306977a6"
-  version = "v1.0.0"
-
-[[projects]]
-  digest = "1:0deddd908b6b4b768cfc272c16ee61e7088a60f7fe2f06c547bd3d8e1f8b8e77"
-  name = "github.com/davecgh/go-spew"
-  packages = ["spew"]
-  pruneopts = ""
-  revision = "8991bc29aa16c548c550c7ff78260e27b9ab7c73"
-  version = "v1.1.1"
-
-[[projects]]
-  branch = "master"
-  digest = "1:a0937269866f68424e50a4d44e7dbaa0237891864c489ec2d44815786e810aa6"
-  name = "github.com/docker/distribution"
-  packages = [
-    "digestset",
-    "reference"
-  ]
-  pruneopts = ""
-  revision = "93e082742a009850ac46962150b2f652a822c5ff"
-
-[[projects]]
-  digest = "1:a60acfb78bd12ce7b2101f0cc0bca8cd83db6aa60bf1e6ddfd33e83013083ddf"
-  name = "github.com/docker/docker"
-  packages = [
-    "pkg/term",
-    "pkg/term/windows"
-  ]
-  pruneopts = ""
-  revision = "092cba3727bb9b4a2f0e922cd6c0f93ea270e363"
-  version = "v1.13.1"
-
-[[projects]]
-  digest = "1:044b2f1eea2f5cfb0d3678baf60892734f59d5c2ea3932cb6ed894a97ccba15c"
-  name = "github.com/elazarl/go-bindata-assetfs"
-  packages = ["."]
-  pruneopts = ""
-  revision = "30f82fa23fd844bd5bb1e5f216db87fd77b5eb43"
-  version = "v1.0.0"
-
-[[projects]]
-  digest = "1:8a34d7a37b8f07239487752e14a5faafcbbc718fc385ad429a2c4ac6f27a207f"
-  name = "github.com/emicklei/go-restful"
-  packages = [
-    ".",
-    "log"
-  ]
-  pruneopts = ""
-  revision = "3eb9738c1697594ea6e71a7156a9bb32ed216cf0"
-  version = "v2.8.0"
-
-[[projects]]
-  digest = "1:cad2dd7061b8dcb4e0014d89e8070f185fb70ac9ba26acf27ff42b9c3eb0ff9b"
-  name = "github.com/emicklei/go-restful-swagger12"
-  packages = ["."]
-  pruneopts = ""
-  revision = "dcef7f55730566d41eae5db10e7d6981829720f6"
-  version = "1.0.1"
-
-[[projects]]
-  digest = "1:4216202f4088a73e2982df875e2f0d1401137bbc248e57391e70547af167a18a"
-  name = "github.com/evanphx/json-patch"
-  packages = ["."]
-  pruneopts = ""
-  revision = "72bf35d0ff611848c1dc9df0f976c81192392fa5"
-  version = "v4.1.0"
-
-[[projects]]
-  digest = "1:c8052dcf3ec378a9a6bc4f00ecc10d6d5eb3cc1f8faaf6b2f70f047e8881d446"
-  name = "github.com/go-openapi/jsonpointer"
-  packages = ["."]
-  pruneopts = ""
-  revision = "ef5f0afec364d3b9396b7b77b43dbe26bf1f8004"
-  version = "v0.17.2"
-
-[[projects]]
-  digest = "1:1824e5330b35b2a2418d06aa55629cc59ad454b72e338aa125ba8ff98f16298b"
-  name = "github.com/go-openapi/jsonreference"
-  packages = ["."]
-  pruneopts = ""
-  revision = "8483a886a90412cd6858df4ea3483dce9c8e35a3"
-  version = "v0.17.2"
-
-[[projects]]
-  digest = "1:d4680b89600466e543754c838cbc987ed58b962417a88600881cd0ed88d6b4cc"
-  name = "github.com/go-openapi/spec"
-  packages = ["."]
-  pruneopts = ""
-  revision = "5bae59e25b21498baea7f9d46e9c147ec106a42e"
-  version = "v0.17.2"
-
-[[projects]]
-  digest = "1:062de20b7d299ae95c902a5c472c4bc87a2f3ae707751fe155ecf640d99074b4"
-  name = "github.com/go-openapi/swag"
-  packages = ["."]
-  pruneopts = ""
-  revision = "5899d5c5e619fda5fa86e14795a835f473ca284c"
-  version = "v0.17.2"
-
-[[projects]]
-  digest = "1:6e73003ecd35f4487a5e88270d3ca0a81bc80dc88053ac7e4dcfec5fba30d918"
-  name = "github.com/gogo/protobuf"
-  packages = [
-    "gogoproto",
-    "proto",
-    "protoc-gen-gogo/descriptor",
-    "sortkeys"
-  ]
-  pruneopts = ""
-  revision = "636bf0302bc95575d69441b25a2603156ffdddf1"
-  version = "v1.1.1"
-
-[[projects]]
-  branch = "master"
-  digest = "1:aa2251148505e561bfa8cd6b69a319b37761da57b0b25529c4af08389559e3b9"
-  name = "github.com/golang/groupcache"
-  packages = ["lru"]
-  pruneopts = ""
-  revision = "c65c006176ff7ff98bb916961c7abbc6b0afc0aa"
-
-[[projects]]
-  digest = "1:3dd078fda7500c341bc26cfbc6c6a34614f295a2457149fc1045cab767cbcf18"
-  name = "github.com/golang/protobuf"
-  packages = [
-    "proto",
-    "ptypes",
-    "ptypes/any",
-    "ptypes/duration",
-    "ptypes/timestamp"
-  ]
-  pruneopts = ""
-  revision = "aa810b61a9c79d51363740d207bb46cf8e620ed5"
-  version = "v1.2.0"
-
-[[projects]]
-  branch = "master"
-  digest = "1:1e5b1e14524ed08301977b7b8e10c719ed853cbf3f24ecb66fae783a46f207a6"
-  name = "github.com/google/btree"
-  packages = ["."]
-  pruneopts = ""
-  revision = "4030bb1f1f0c35b30ca7009e9ebd06849dd45306"
-
-[[projects]]
-  branch = "master"
-  digest = "1:754f77e9c839b24778a4b64422236d38515301d2baeb63113aa3edc42e6af692"
-  name = "github.com/google/gofuzz"
-  packages = ["."]
-  pruneopts = ""
-  revision = "24818f796faf91cd76ec7bddd72458fbced7a6c1"
-
-[[projects]]
-  digest = "1:5247b135b5492aa232a731acdcb52b08f32b874cb398f21ab460396eadbe866b"
-  name = "github.com/google/uuid"
-  packages = ["."]
-  pruneopts = ""
-  revision = "d460ce9f8df2e77fb1ba55ca87fafed96c607494"
-  version = "v1.0.0"
-
-[[projects]]
-  digest = "1:16b2837c8b3cf045fa2cdc82af0cf78b19582701394484ae76b2c3bc3c99ad73"
-  name = "github.com/googleapis/gnostic"
-  packages = [
-    "OpenAPIv2",
-    "compiler",
-    "extensions"
-  ]
-  pruneopts = ""
-  revision = "7c663266750e7d82587642f65e60bc4083f1f84e"
-  version = "v0.2.0"
-
-[[projects]]
-  branch = "master"
-  digest = "1:5e345eb75d8bfb2b91cfbfe02a82a79c0b2ea55cf06c5a4d180a9321f36973b4"
-  name = "github.com/gregjones/httpcache"
-  packages = [
-    ".",
-    "diskcache"
-  ]
-  pruneopts = ""
-  revision = "c63ab54fda8f77302f8d414e19933f2b6026a089"
-
-[[projects]]
-  digest = "1:e24dc5ef44694848785de507f439a24e9e6d96d7b43b8cf3d6cfa857aa1e2186"
-  name = "github.com/grpc-ecosystem/go-grpc-prometheus"
-  packages = ["."]
-  pruneopts = ""
-  revision = "c225b8c3b01faf2899099b768856a9e916e5087b"
-  version = "v1.2.0"
-
-[[projects]]
-  digest = "1:3313a63031ae281e5f6fd7b0bbca733dfa04d2429df86519e3b4d4c016ccb836"
-  name = "github.com/hashicorp/golang-lru"
-  packages = [
-    ".",
-    "simplelru"
-  ]
-  pruneopts = ""
-  revision = "20f1fb78b0740ba8c3cb143a61e86ba5c8669768"
-  version = "v0.5.0"
-
-[[projects]]
-  digest = "1:7ab38c15bd21e056e3115c8b526d201eaf74e0308da9370997c6b3c187115d36"
-  name = "github.com/imdario/mergo"
-  packages = ["."]
-  pruneopts = ""
-  revision = "9f23e2d6bd2a77f959b2bf6acdbefd708a83a4a4"
-  version = "v0.3.6"
-
-[[projects]]
-  digest = "1:870d441fe217b8e689d7949fef6e43efbc787e50f200cb1e70dbca9204a1d6be"
-  name = "github.com/inconshreveable/mousetrap"
-  packages = ["."]
-  pruneopts = ""
-  revision = "76626ae9c91c4f2a10f34cad8ce83ea42c93bb75"
-  version = "v1.0"
-
-[[projects]]
-  digest = "1:b79fc583e4dc7055ed86742e22164ac41bf8c0940722dbcb600f1a3ace1a8cb5"
-  name = "github.com/json-iterator/go"
-  packages = ["."]
-  pruneopts = ""
-  revision = "1624edc4454b8682399def8740d46db5e4362ba4"
-  version = "v1.1.5"
-
-[[projects]]
-  branch = "master"
-  digest = "1:2c5ad58492804c40bdaf5d92039b0cde8b5becd2b7feeb37d7d1cc36a8aa8dbe"
-  name = "github.com/kardianos/osext"
-  packages = ["."]
-  pruneopts = ""
-  revision = "ae77be60afb1dcacde03767a8c37337fad28ac14"
-
-[[projects]]
-  digest = "1:6a874e3ddfb9db2b42bd8c85b6875407c702fa868eed20634ff489bc896ccfd3"
-  name = "github.com/konsorten/go-windows-terminal-sequences"
-  packages = ["."]
-  pruneopts = ""
-  revision = "5c8c8bd35d3832f5d134ae1e1e375b69a4d25242"
-  version = "v1.0.1"
-
-[[projects]]
-  branch = "master"
-  digest = "1:212bebc561f4f654a653225868b2a97353cd5e160dc0b0bbc7232b06608474ec"
-  name = "github.com/mailru/easyjson"
-  packages = [
-    "buffer",
-    "jlexer",
-    "jwriter"
-  ]
-  pruneopts = ""
-  revision = "60711f1a8329503b04e1c88535f419d0bb440bff"
-
-[[projects]]
-  digest = "1:63722a4b1e1717be7b98fc686e0b30d5e7f734b9e93d7dee86293b6deab7ea28"
-  name = "github.com/matttproud/golang_protobuf_extensions"
-  packages = ["pbutil"]
-  pruneopts = ""
-  revision = "c12348ce28de40eed0136aa2b644d0ee0650e56c"
-  version = "v1.0.1"
-
-[[projects]]
-  digest = "1:0c0ff2a89c1bb0d01887e1dac043ad7efbf3ec77482ef058ac423d13497e16fd"
-  name = "github.com/modern-go/concurrent"
-  packages = ["."]
-  pruneopts = ""
-  revision = "bacd9c7ef1dd9b15be4a9909b8ac7a4e313eec94"
-  version = "1.0.3"
-
-[[projects]]
-  digest = "1:e32bdbdb7c377a07a9a46378290059822efdce5c8d96fe71940d87cb4f918855"
-  name = "github.com/modern-go/reflect2"
-  packages = ["."]
-  pruneopts = ""
-  revision = "4b7aa43c6742a2c18fdef89dd197aaae7dac7ccd"
-  version = "1.0.1"
-
-[[projects]]
-  digest = "1:5d9b668b0b4581a978f07e7d2e3314af18eb27b3fb5d19b70185b7c575723d11"
-  name = "github.com/opencontainers/go-digest"
-  packages = ["."]
-  pruneopts = ""
-  revision = "279bed98673dd5bef374d3b6e4b09e2af76183bf"
-  version = "v1.0.0-rc1"
-
-[[projects]]
-  digest = "1:a5484d4fa43127138ae6e7b2299a6a52ae006c7f803d98d717f60abf3e97192e"
-  name = "github.com/pborman/uuid"
-  packages = ["."]
-  pruneopts = ""
-  revision = "adf5a7427709b9deb95d29d3fa8a2bf9cfd388f1"
-  version = "v1.2"
-
-[[projects]]
-  branch = "master"
-  digest = "1:c24598ffeadd2762552269271b3b1510df2d83ee6696c1e543a0ff653af494bc"
-  name = "github.com/petar/GoLLRB"
-  packages = ["llrb"]
-  pruneopts = ""
-  revision = "53be0d36a84c2a886ca057d34b6aa4468df9ccb4"
-
-[[projects]]
-  digest = "1:b46305723171710475f2dd37547edd57b67b9de9f2a6267cafdd98331fd6897f"
-  name = "github.com/peterbourgon/diskv"
-  packages = ["."]
-  pruneopts = ""
-  revision = "5f041e8faa004a95c88a202771f4cc3e991971e6"
-  version = "v2.0.1"
-
-[[projects]]
-  digest = "1:8b2082f564fe20dbb43a621ee0d57ae2777656ab14111d100d3d92d1b5b958b9"
-  name = "github.com/prometheus/client_golang"
-  packages = [
-    "prometheus",
-    "prometheus/internal"
-  ]
-  pruneopts = ""
-  revision = "abad2d1bd44235a26707c172eab6bca5bf2dbad3"
-  version = "v0.9.1"
-
-[[projects]]
-  branch = "master"
-  digest = "1:185cf55b1f44a1bf243558901c3f06efa5c64ba62cfdcbb1bf7bbe8c3fb68561"
-  name = "github.com/prometheus/client_model"
-  packages = ["go"]
-  pruneopts = ""
-  revision = "5c3871d89910bfb32f5fcab2aa4b9ec68e65a99f"
-
-[[projects]]
-  branch = "master"
-  digest = "1:17b528401ba33dbf39182f9e146f73708712cc7ca117b97530c6c4e4599bb9c8"
-  name = "github.com/prometheus/common"
-  packages = [
-    "expfmt",
-    "internal/bitbucket.org/ww/goautoneg",
-    "model"
-  ]
-  pruneopts = ""
-  revision = "1f2c4f3cd6db5fd6f68f36af6b6d5d936fd93c4e"
-
-[[projects]]
-  branch = "master"
-  digest = "1:1f62ed2c173c42c1edad2e94e127318ea11b0d28c62590c82a8d2d3cde189afe"
-  name = "github.com/prometheus/procfs"
-  packages = [
-    ".",
-    "internal/util",
-    "nfs",
-    "xfs"
-  ]
-  pruneopts = ""
-  revision = "185b4288413d2a0dd0806f78c90dde719829e5ae"
-
-[[projects]]
-  digest = "1:a1403cc8a94b8d7956ee5e9694badef0e7b051af289caad1cf668331e3ffa4f6"
-  name = "github.com/spf13/cobra"
-  packages = ["."]
-  pruneopts = ""
-  revision = "ef82de70bb3f60c65fb8eebacbb2d122ef517385"
-  version = "v0.0.3"
-
-[[projects]]
-  digest = "1:cbaf13cdbfef0e4734ed8a7504f57fe893d471d62a35b982bf6fb3f036449a66"
-  name = "github.com/spf13/pflag"
-  packages = ["."]
-  pruneopts = ""
-  revision = "298182f68c66c05229eb03ac171abe6e309ee79a"
-  version = "v1.0.3"
-
-[[projects]]
-  digest = "1:cf0db94943c2e86c1ef2c2e611b68818577e61c8cd2934724d6cc02b0082b3b8"
-  name = "github.com/xanzy/go-cloudstack"
-  packages = ["cloudstack"]
-  pruneopts = ""
-  revision = "e82309d13586874632a437047b1d9073295c723f"
-  version = "v2.4.1"
-
-[[projects]]
-  branch = "master"
-  digest = "1:f7be435e0ca22e2cd62b2d2542081a231685837170a87a3662abb7cdf9f3f1cd"
-  name = "golang.org/x/crypto"
-  packages = [
-    "ed25519",
-    "ed25519/internal/edwards25519",
-    "pbkdf2",
-    "ssh/terminal"
-  ]
-  pruneopts = ""
-  revision = "3d3f9f413869b949e48070b5bc593aa22cc2b8f2"
-
-[[projects]]
-  branch = "master"
-  digest = "1:4ac199b027ed34460ec4e0a92c882156f561e78cd046fef095e50f867462435a"
-  name = "golang.org/x/net"
-  packages = [
-    "context",
-    "context/ctxhttp",
-    "http/httpguts",
-    "http2",
-    "http2/hpack",
-    "idna",
-    "internal/timeseries",
-    "trace",
-    "websocket"
-  ]
-  pruneopts = ""
-  revision = "adae6a3d119ae4890b46832a2e88a95adc62b8e7"
-
-[[projects]]
-  branch = "master"
-  digest = "1:51d339a1d79f5c617fba14414aefb7dfd184b8ba0ddbb9f95251430b67c8aab8"
-  name = "golang.org/x/oauth2"
-  packages = [
-    ".",
-    "internal"
-  ]
-  pruneopts = ""
-  revision = "f42d05182288abf10faef86d16c0d07b8d40ea2d"
-
-[[projects]]
-  branch = "master"
-  digest = "1:bae7ec6144727bacb0f06565215267a39134f63a4955114d03961ca9061a1e97"
-  name = "golang.org/x/sys"
-  packages = [
-    "unix",
-    "windows"
-  ]
-  pruneopts = ""
-  revision = "93218def8b18e66adbdab3eca8ec334700329f1f"
-
-[[projects]]
-  digest = "1:5acd3512b047305d49e8763eef7ba423901e85d5dd2fd1e71778a0ea8de10bd4"
-  name = "golang.org/x/text"
-  packages = [
-    "collate",
-    "collate/build",
-    "internal/colltab",
-    "internal/gen",
-    "internal/tag",
-    "internal/triegen",
-    "internal/ucd",
-    "language",
-    "secure/bidirule",
-    "transform",
-    "unicode/bidi",
-    "unicode/cldr",
-    "unicode/norm",
-    "unicode/rangetable",
-    "width"
-  ]
-  pruneopts = ""
-  revision = "f21a4dfb5e38f5895301dc265a8def02365cc3d0"
-  version = "v0.3.0"
-
-[[projects]]
-  branch = "master"
-  digest = "1:14cb1d4240bcbbf1386ae763957e04e2765ec4e4ce7bb2769d05fa6faccd774e"
-  name = "golang.org/x/time"
-  packages = ["rate"]
-  pruneopts = ""
-  revision = "85acf8d2951cb2a3bde7632f9ff273ef0379bcbd"
-
-[[projects]]
-  digest = "1:77d3cff3a451d50be4b52db9c7766c0d8570ba47593f0c9dc72173adb208e788"
-  name = "google.golang.org/appengine"
-  packages = [
-    "internal",
-    "internal/base",
-    "internal/datastore",
-    "internal/log",
-    "internal/remote_api",
-    "internal/urlfetch",
-    "urlfetch"
-  ]
-  pruneopts = ""
-  revision = "4a4468ece617fc8205e99368fa2200e9d1fad421"
-  version = "v1.3.0"
-
-[[projects]]
-  branch = "master"
-  digest = "1:212d4045ef941b209a154001718705dc723bd77e0200fcea36d15ec87ed49dec"
-  name = "google.golang.org/genproto"
-  packages = ["googleapis/rpc/status"]
-  pruneopts = ""
-  revision = "b5d43981345bdb2c233eb4bf3277847b48c6fdc6"
-
-[[projects]]
-  digest = "1:1293087271e314cfa2b3decededba2ecba0ff327e7b7809e00f73f616449191c"
-  name = "google.golang.org/grpc"
-  packages = [
-    ".",
-    "balancer",
-    "balancer/base",
-    "balancer/roundrobin",
-    "codes",
-    "connectivity",
-    "credentials",
-    "encoding",
-    "encoding/proto",
-    "grpclog",
-    "health/grpc_health_v1",
-    "internal",
-    "internal/backoff",
-    "internal/channelz",
-    "internal/envconfig",
-    "internal/grpcrand",
-    "internal/transport",
-    "keepalive",
-    "metadata",
-    "naming",
-    "peer",
-    "resolver",
-    "resolver/dns",
-    "resolver/passthrough",
-    "stats",
-    "status",
-    "tap"
-  ]
-  pruneopts = ""
-  revision = "2e463a05d100327ca47ac218281906921038fd95"
-  version = "v1.16.0"
-
-[[projects]]
-  digest = "1:bb864e9881b2c241fc6348ba5ed57e6ccf8a675903f1f5c3d81c1b3d7cc4b8f8"
-  name = "gopkg.in/gcfg.v1"
-  packages = [
-    ".",
-    "scanner",
-    "token",
-    "types"
-  ]
-  pruneopts = ""
-  revision = "61b2c08bc8f6068f7c5ca684372f9a6cb1c45ebe"
-  version = "v1.2.3"
-
-[[projects]]
-  digest = "1:75fb3fcfc73a8c723efde7777b40e8e8ff9babf30d8c56160d01beffea8a95a6"
-  name = "gopkg.in/inf.v0"
-  packages = ["."]
-  pruneopts = ""
-  revision = "d2d2541c53f18d2a059457998ce2876cc8e67cbf"
-  version = "v0.9.1"
-
-[[projects]]
-  digest = "1:11c58e19ff7ce22740423bb933f1ddca3bf575def40d5ac3437ec12871b1648b"
-  name = "gopkg.in/natefinch/lumberjack.v2"
-  packages = ["."]
-  pruneopts = ""
-  revision = "a96e63847dc3c67d17befa69c303767e2f84e54f"
-  version = "v2.1"
-
-[[projects]]
-  digest = "1:ddc5fa8f9159bea7d1ce58143e6d8fd8054018f7bc3709940aa7f7bc92855ed9"
-  name = "gopkg.in/square/go-jose.v2"
-  packages = [
-    ".",
-    "cipher",
-    "json",
-    "jwt"
-  ]
-  pruneopts = ""
-  revision = "ef984e69dd356202fd4e4910d4d9c24468bdf0b8"
-  version = "v2.1.9"
-
-[[projects]]
-  digest = "1:ceec7e96590fb8168f36df4795fefe17051d4b0c2acc7ec4e260d8138c4dafac"
-  name = "gopkg.in/warnings.v0"
-  packages = ["."]
-  pruneopts = ""
-  revision = "ec4a0fea49c7b46c2aeb0b51aac55779c607e52b"
-  version = "v0.1.2"
-
-[[projects]]
-  digest = "1:f0620375dd1f6251d9973b5f2596228cc8042e887cd7f827e4220bc1ce8c30e2"
-  name = "gopkg.in/yaml.v2"
-  packages = ["."]
-  pruneopts = ""
-  revision = "5420a8b6744d3b0345ab293f6fcba19c978f1183"
-  version = "v2.2.1"
-
-[[projects]]
-  digest = "1:63ada4e68469e695bda7bb2a14f3009c1fc6e78b0f36d53436b38d919a576109"
-  name = "k8s.io/api"
-  packages = [
-    "admission/v1beta1",
-    "admissionregistration/v1alpha1",
-    "admissionregistration/v1beta1",
-    "apps/v1",
-    "apps/v1beta1",
-    "apps/v1beta2",
-    "auditregistration/v1alpha1",
-    "authentication/v1",
-    "authentication/v1beta1",
-    "authorization/v1",
-    "authorization/v1beta1",
-    "autoscaling/v1",
-    "autoscaling/v2beta1",
-    "autoscaling/v2beta2",
-    "batch/v1",
-    "batch/v1beta1",
-    "batch/v2alpha1",
-    "certificates/v1beta1",
-    "coordination/v1beta1",
-    "core/v1",
-    "events/v1beta1",
-    "extensions/v1beta1",
-    "networking/v1",
-    "policy/v1beta1",
-    "rbac/v1",
-    "rbac/v1alpha1",
-    "rbac/v1beta1",
-    "scheduling/v1alpha1",
-    "scheduling/v1beta1",
-    "settings/v1alpha1",
-    "storage/v1",
-    "storage/v1alpha1",
-    "storage/v1beta1"
-  ]
-  pruneopts = ""
-  revision = "d01564359763a39d310efc27866b63d4f5c92f1d"
-  version = "kubernetes-1.13.0-beta.1"
-
-[[projects]]
-  digest = "1:fdde42c63adc2e1605319b3fe32843c1c33fd70434c9acfaf20e5a465216ceab"
-  name = "k8s.io/apiextensions-apiserver"
-  packages = ["pkg/features"]
-  pruneopts = ""
-  revision = "e1ae69ff7b8b6c135578c1892f3781c55d75c69e"
-  version = "kubernetes-1.13.0-beta.1"
-
-[[projects]]
-  digest = "1:3166a472475f9904e42f93565fca74f7f20d9a5f3bc1b0ac321aedc5a211e796"
-  name = "k8s.io/apimachinery"
-  packages = [
-    "pkg/api/equality",
-    "pkg/api/errors",
-    "pkg/api/meta",
-    "pkg/api/resource",
-    "pkg/api/validation",
-    "pkg/api/validation/path",
-    "pkg/apis/config",
-    "pkg/apis/config/v1alpha1",
-    "pkg/apis/meta/internalversion",
-    "pkg/apis/meta/v1",
-    "pkg/apis/meta/v1/unstructured",
-    "pkg/apis/meta/v1/validation",
-    "pkg/apis/meta/v1beta1",
-    "pkg/conversion",
-    "pkg/conversion/queryparams",
-    "pkg/fields",
-    "pkg/labels",
-    "pkg/runtime",
-    "pkg/runtime/schema",
-    "pkg/runtime/serializer",
-    "pkg/runtime/serializer/json",
-    "pkg/runtime/serializer/protobuf",
-    "pkg/runtime/serializer/recognizer",
-    "pkg/runtime/serializer/streaming",
-    "pkg/runtime/serializer/versioning",
-    "pkg/selection",
-    "pkg/types",
-    "pkg/util/cache",
-    "pkg/util/clock",
-    "pkg/util/diff",
-    "pkg/util/errors",
-    "pkg/util/framer",
-    "pkg/util/intstr",
-    "pkg/util/json",
-    "pkg/util/mergepatch",
-    "pkg/util/naming",
-    "pkg/util/net",
-    "pkg/util/rand",
-    "pkg/util/runtime",
-    "pkg/util/sets",
-    "pkg/util/strategicpatch",
-    "pkg/util/uuid",
-    "pkg/util/validation",
-    "pkg/util/validation/field",
-    "pkg/util/wait",
-    "pkg/util/waitgroup",
-    "pkg/util/yaml",
-    "pkg/version",
-    "pkg/watch",
-    "third_party/forked/golang/json",
-    "third_party/forked/golang/reflect"
-  ]
-  pruneopts = ""
-  revision = "0028e7a3cc82b29fea214c5793c77c24a23bb3ef"
-  version = "kubernetes-1.13.0-beta.1"
-
-[[projects]]
-  digest = "1:5bd2cc260f3492be16e5fb20613551e3b969527a6999ecd34e910f71567989be"
-  name = "k8s.io/apiserver"
-  packages = [
-    "pkg/admission",
-    "pkg/admission/configuration",
-    "pkg/admission/initializer",
-    "pkg/admission/metrics",
-    "pkg/admission/plugin/initialization",
-    "pkg/admission/plugin/namespace/lifecycle",
-    "pkg/admission/plugin/webhook/config",
-    "pkg/admission/plugin/webhook/config/apis/webhookadmission",
-    "pkg/admission/plugin/webhook/config/apis/webhookadmission/v1alpha1",
-    "pkg/admission/plugin/webhook/errors",
-    "pkg/admission/plugin/webhook/generic",
-    "pkg/admission/plugin/webhook/mutating",
-    "pkg/admission/plugin/webhook/namespace",
-    "pkg/admission/plugin/webhook/request",
-    "pkg/admission/plugin/webhook/rules",
-    "pkg/admission/plugin/webhook/util",
-    "pkg/admission/plugin/webhook/validating",
-    "pkg/apis/apiserver",
-    "pkg/apis/apiserver/install",
-    "pkg/apis/apiserver/v1alpha1",
-    "pkg/apis/audit",
-    "pkg/apis/audit/install",
-    "pkg/apis/audit/v1",
-    "pkg/apis/audit/v1alpha1",
-    "pkg/apis/audit/v1beta1",
-    "pkg/apis/audit/validation",
-    "pkg/apis/config",
-    "pkg/apis/config/v1alpha1",
-    "pkg/audit",
-    "pkg/audit/event",
-    "pkg/audit/policy",
-    "pkg/audit/util",
-    "pkg/authentication/authenticator",
-    "pkg/authentication/authenticatorfactory",
-    "pkg/authentication/group",
-    "pkg/authentication/request/anonymous",
-    "pkg/authentication/request/bearertoken",
-    "pkg/authentication/request/headerrequest",
-    "pkg/authentication/request/union",
-    "pkg/authentication/request/websocket",
-    "pkg/authentication/request/x509",
-    "pkg/authentication/serviceaccount",
-    "pkg/authentication/token/cache",
-    "pkg/authentication/token/tokenfile",
-    "pkg/authentication/user",
-    "pkg/authorization/authorizer",
-    "pkg/authorization/authorizerfactory",
-    "pkg/authorization/path",
-    "pkg/authorization/union",
-    "pkg/endpoints",
-    "pkg/endpoints/discovery",
-    "pkg/endpoints/filters",
-    "pkg/endpoints/handlers",
-    "pkg/endpoints/handlers/negotiation",
-    "pkg/endpoints/handlers/responsewriters",
-    "pkg/endpoints/metrics",
-    "pkg/endpoints/openapi",
-    "pkg/endpoints/request",
-    "pkg/features",
-    "pkg/registry/generic",
-    "pkg/registry/generic/registry",
-    "pkg/registry/rest",
-    "pkg/server",
-    "pkg/server/filters",
-    "pkg/server/healthz",
-    "pkg/server/httplog",
-    "pkg/server/mux",
-    "pkg/server/options",
-    "pkg/server/resourceconfig",
-    "pkg/server/routes",
-    "pkg/server/routes/data/swagger",
-    "pkg/server/storage",
-    "pkg/storage",
-    "pkg/storage/cacher",
-    "pkg/storage/errors",
-    "pkg/storage/etcd",
-    "pkg/storage/etcd/metrics",
-    "pkg/storage/etcd3",
-    "pkg/storage/names",
-    "pkg/storage/storagebackend",
-    "pkg/storage/storagebackend/factory",
-    "pkg/storage/value",
-    "pkg/util/dryrun",
-    "pkg/util/feature",
-    "pkg/util/flag",
-    "pkg/util/flushwriter",
-    "pkg/util/logs",
-    "pkg/util/openapi",
-    "pkg/util/trace",
-    "pkg/util/webhook",
-    "pkg/util/wsstream",
-    "plugin/pkg/audit/buffered",
-    "plugin/pkg/audit/dynamic",
-    "plugin/pkg/audit/dynamic/enforced",
-    "plugin/pkg/audit/log",
-    "plugin/pkg/audit/truncate",
-    "plugin/pkg/audit/webhook",
-    "plugin/pkg/authenticator/token/webhook",
-    "plugin/pkg/authorizer/webhook"
-  ]
-  pruneopts = ""
-  revision = "6b360527ed84a1a6bb3883faef76c71cc17499ba"
-  version = "kubernetes-1.13.0-beta.1"
-
-[[projects]]
-  digest = "1:c521267e4944f34c38ac078f20b3d485a5ca709d5e53d80586182cc0ef675f65"
-  name = "k8s.io/client-go"
-  packages = [
-    "discovery",
-    "informers",
-    "informers/admissionregistration",
-    "informers/admissionregistration/v1alpha1",
-    "informers/admissionregistration/v1beta1",
-    "informers/apps",
-    "informers/apps/v1",
-    "informers/apps/v1beta1",
-    "informers/apps/v1beta2",
-    "informers/auditregistration",
-    "informers/auditregistration/v1alpha1",
-    "informers/autoscaling",
-    "informers/autoscaling/v1",
-    "informers/autoscaling/v2beta1",
-    "informers/autoscaling/v2beta2",
-    "informers/batch",
-    "informers/batch/v1",
-    "informers/batch/v1beta1",
-    "informers/batch/v2alpha1",
-    "informers/certificates",
-    "informers/certificates/v1beta1",
-    "informers/coordination",
-    "informers/coordination/v1beta1",
-    "informers/core",
-    "informers/core/v1",
-    "informers/events",
-    "informers/events/v1beta1",
-    "informers/extensions",
-    "informers/extensions/v1beta1",
-    "informers/internalinterfaces",
-    "informers/networking",
-    "informers/networking/v1",
-    "informers/policy",
-    "informers/policy/v1beta1",
-    "informers/rbac",
-    "informers/rbac/v1",
-    "informers/rbac/v1alpha1",
-    "informers/rbac/v1beta1",
-    "informers/scheduling",
-    "informers/scheduling/v1alpha1",
-    "informers/scheduling/v1beta1",
-    "informers/settings",
-    "informers/settings/v1alpha1",
-    "informers/storage",
-    "informers/storage/v1",
-    "informers/storage/v1alpha1",
-    "informers/storage/v1beta1",
-    "kubernetes",
-    "kubernetes/scheme",
-    "kubernetes/typed/admissionregistration/v1alpha1",
-    "kubernetes/typed/admissionregistration/v1beta1",
-    "kubernetes/typed/apps/v1",
-    "kubernetes/typed/apps/v1beta1",
-    "kubernetes/typed/apps/v1beta2",
-    "kubernetes/typed/auditregistration/v1alpha1",
-    "kubernetes/typed/authentication/v1",
-    "kubernetes/typed/authentication/v1beta1",
-    "kubernetes/typed/authorization/v1",
-    "kubernetes/typed/authorization/v1beta1",
-    "kubernetes/typed/autoscaling/v1",
-    "kubernetes/typed/autoscaling/v2beta1",
-    "kubernetes/typed/autoscaling/v2beta2",
-    "kubernetes/typed/batch/v1",
-    "kubernetes/typed/batch/v1beta1",
-    "kubernetes/typed/batch/v2alpha1",
-    "kubernetes/typed/certificates/v1beta1",
-    "kubernetes/typed/coordination/v1beta1",
-    "kubernetes/typed/core/v1",
-    "kubernetes/typed/events/v1beta1",
-    "kubernetes/typed/extensions/v1beta1",
-    "kubernetes/typed/networking/v1",
-    "kubernetes/typed/policy/v1beta1",
-    "kubernetes/typed/rbac/v1",
-    "kubernetes/typed/rbac/v1alpha1",
-    "kubernetes/typed/rbac/v1beta1",
-    "kubernetes/typed/scheduling/v1alpha1",
-    "kubernetes/typed/scheduling/v1beta1",
-    "kubernetes/typed/settings/v1alpha1",
-    "kubernetes/typed/storage/v1",
-    "kubernetes/typed/storage/v1alpha1",
-    "kubernetes/typed/storage/v1beta1",
-    "listers/admissionregistration/v1alpha1",
-    "listers/admissionregistration/v1beta1",
-    "listers/apps/v1",
-    "listers/apps/v1beta1",
-    "listers/apps/v1beta2",
-    "listers/auditregistration/v1alpha1",
-    "listers/autoscaling/v1",
-    "listers/autoscaling/v2beta1",
-    "listers/autoscaling/v2beta2",
-    "listers/batch/v1",
-    "listers/batch/v1beta1",
-    "listers/batch/v2alpha1",
-    "listers/certificates/v1beta1",
-    "listers/coordination/v1beta1",
-    "listers/core/v1",
-    "listers/events/v1beta1",
-    "listers/extensions/v1beta1",
-    "listers/networking/v1",
-    "listers/policy/v1beta1",
-    "listers/rbac/v1",
-    "listers/rbac/v1alpha1",
-    "listers/rbac/v1beta1",
-    "listers/scheduling/v1alpha1",
-    "listers/scheduling/v1beta1",
-    "listers/settings/v1alpha1",
-    "listers/storage/v1",
-    "listers/storage/v1alpha1",
-    "listers/storage/v1beta1",
-    "pkg/apis/clientauthentication",
-    "pkg/apis/clientauthentication/v1alpha1",
-    "pkg/apis/clientauthentication/v1beta1",
-    "pkg/version",
-    "plugin/pkg/client/auth/exec",
-    "rest",
-    "rest/watch",
-    "tools/auth",
-    "tools/cache",
-    "tools/clientcmd",
-    "tools/clientcmd/api",
-    "tools/clientcmd/api/latest",
-    "tools/clientcmd/api/v1",
-    "tools/leaderelection",
-    "tools/leaderelection/resourcelock",
-    "tools/metrics",
-    "tools/pager",
-    "tools/record",
-    "tools/reference",
-    "tools/watch",
-    "transport",
-    "util/buffer",
-    "util/cert",
-    "util/connrotation",
-    "util/flowcontrol",
-    "util/homedir",
-    "util/integer",
-    "util/retry",
-    "util/workqueue"
-  ]
-  pruneopts = ""
-  revision = "46a8dc78ec29761d6cb89a9eb50ddde947c84030"
-  version = "kubernetes-1.13.0-beta.1"
-
-[[projects]]
-  digest = "1:555dfd94e304203da412b43191afef15d112929d3552c8846cded9a6499ccfbb"
-  name = "k8s.io/cloud-provider"
-  packages = ["."]
-  pruneopts = ""
-  revision = "f18d4098028517beb5ec394effafce77df21d1ed"
-  version = "kubernetes-1.13.0-beta.1"
-
-[[projects]]
-  branch = "master"
-  digest = "1:3e7ea03195cf969371cd2e4cfe03563a23c37e901ec6cd0b2049ced0666563a3"
-  name = "k8s.io/csi-api"
-  packages = [
-    "pkg/apis/csi/v1alpha1",
-    "pkg/client/clientset/versioned",
-    "pkg/client/clientset/versioned/scheme",
-    "pkg/client/clientset/versioned/typed/csi/v1alpha1"
-  ]
-  pruneopts = ""
-  revision = "0fa5681c71625890e8180232e5f687755f3635b1"
-
-[[projects]]
-  digest = "1:4f5eb833037cc0ba0bf8fe9cae6be9df62c19dd1c869415275c708daa8ccfda5"
-  name = "k8s.io/klog"
-  packages = ["."]
-  pruneopts = ""
-  revision = "a5bc97fbc634d635061f3146511332c7e313a55a"
-  version = "v0.1.0"
-
-[[projects]]
-  branch = "master"
-  digest = "1:4af070c4f1d384421206873aa7ee4c0d9ecef4a67a05f7fa17f71d1b7118ce4b"
-  name = "k8s.io/kube-controller-manager"
-  packages = ["config/v1alpha1"]
-  pruneopts = ""
-  revision = "1c4e861025154f4bcd6ada09b3c2ed51a8d13cb4"
-
-[[projects]]
-  branch = "master"
-  digest = "1:e5d4ca90c0f3862515c98454bb37d4d340f4ceeca60ac3e0a5cb5857360aed7c"
-  name = "k8s.io/kube-openapi"
-  packages = [
-    "pkg/builder",
-    "pkg/common",
-    "pkg/handler",
-    "pkg/util",
-    "pkg/util/proto"
-  ]
-  pruneopts = ""
-  revision = "0317810137be915b9cf888946c6e115c1bfac693"
-
-[[projects]]
-  digest = "1:e6830d37d9194645f8cd284f774c44f4653b68e715e043aa3c64eecfa1a26b63"
-  name = "k8s.io/kubernetes"
-  packages = [
-    "cmd/cloud-controller-manager/app",
-    "cmd/cloud-controller-manager/app/apis/config",
-    "cmd/cloud-controller-manager/app/apis/config/scheme",
-    "cmd/cloud-controller-manager/app/apis/config/v1alpha1",
-    "cmd/cloud-controller-manager/app/config",
-    "cmd/cloud-controller-manager/app/options",
-    "cmd/controller-manager/app",
-    "cmd/controller-manager/app/options",
-    "pkg/api/legacyscheme",
-    "pkg/api/service",
-    "pkg/api/v1/node",
-    "pkg/api/v1/pod",
-    "pkg/apis/apps",
-    "pkg/apis/autoscaling",
-    "pkg/apis/core",
-    "pkg/apis/core/helper",
-    "pkg/apis/core/install",
-    "pkg/apis/core/pods",
-    "pkg/apis/core/v1",
-    "pkg/apis/core/v1/helper",
-    "pkg/apis/core/validation",
-    "pkg/apis/scheduling",
-    "pkg/capabilities",
-    "pkg/client/leaderelectionconfig",
-    "pkg/client/metrics/prometheus",
-    "pkg/controller",
-    "pkg/controller/apis/config",
-    "pkg/controller/apis/config/v1alpha1",
-    "pkg/controller/cloud",
-    "pkg/controller/route",
-    "pkg/controller/service",
-    "pkg/controller/util/node",
-    "pkg/features",
-    "pkg/fieldpath",
-    "pkg/kubelet/apis",
-    "pkg/kubelet/types",
-    "pkg/kubelet/util/format",
-    "pkg/master/ports",
-    "pkg/scheduler/api",
-    "pkg/security/apparmor",
-    "pkg/serviceaccount",
-    "pkg/util/configz",
-    "pkg/util/file",
-    "pkg/util/flag",
-    "pkg/util/hash",
-    "pkg/util/io",
-    "pkg/util/metrics",
-    "pkg/util/mount",
-    "pkg/util/net/sets",
-    "pkg/util/node",
-    "pkg/util/nsenter",
-    "pkg/util/parsers",
-    "pkg/util/resizefs",
-    "pkg/util/strings",
-    "pkg/util/taints",
-    "pkg/version",
-    "pkg/version/prometheus",
-    "pkg/version/verflag",
-    "pkg/volume",
-    "pkg/volume/util",
-    "pkg/volume/util/fs",
-    "pkg/volume/util/recyclerclient",
-    "pkg/volume/util/types",
-    "pkg/volume/util/volumepathhandler"
-  ]
-  pruneopts = ""
-  revision = "23dc5401f4e9b985860aeae9657bba1b28c74ff8"
-  version = "v1.13.0-beta.1"
-
-[[projects]]
-  branch = "master"
-  digest = "1:bea542e853f98bfcc80ecbe8fe0f32bc52c97664102aacdd7dca676354ef2faa"
-  name = "k8s.io/utils"
-  packages = [
-    "exec",
-    "pointer"
-  ]
-  pruneopts = ""
-  revision = "0d26856f57b32ec3398579285e5c8a2bfe8c5243"
-
-[[projects]]
-  digest = "1:321081b4a44256715f2b68411d8eda9a17f17ebfe6f0cc61d2cc52d11c08acfa"
-  name = "sigs.k8s.io/yaml"
-  packages = ["."]
-  pruneopts = ""
-  revision = "fd68e9863619f6ec2fdd8625fe1f02e7c877e480"
-  version = "v1.1.0"
-
-[solve-meta]
-  analyzer-name = "dep"
-  analyzer-version = 1
-  input-imports = [
-    "github.com/d2g/dhcp4",
-    "github.com/d2g/dhcp4client",
-    "github.com/kardianos/osext",
-    "github.com/spf13/pflag",
-    "github.com/xanzy/go-cloudstack/cloudstack",
-    "gopkg.in/gcfg.v1",
-    "k8s.io/api/core/v1",
-    "k8s.io/apimachinery/pkg/apis/meta/v1",
-    "k8s.io/apimachinery/pkg/types",
-    "k8s.io/apiserver/pkg/util/flag",
-    "k8s.io/apiserver/pkg/util/logs",
-    "k8s.io/cloud-provider",
-    "k8s.io/klog",
-    "k8s.io/kubernetes/cmd/cloud-controller-manager/app",
-    "k8s.io/kubernetes/pkg/client/metrics/prometheus",
-    "k8s.io/kubernetes/pkg/version/prometheus"
-  ]
-  solver-name = "gps-cdcl"
-  solver-version = 1
diff --git a/Gopkg.toml b/Gopkg.toml
deleted file mode 100644
index 741d195..0000000
--- a/Gopkg.toml
+++ /dev/null
@@ -1,39 +0,0 @@
-[[constraint]]
-  name = "github.com/spf13/pflag"
-  version = "1.0.3"
-
-[[constraint]]
-  name = "k8s.io/cloud-provider"
-  version = "kubernetes-1.13.0-beta.1"
-
-[[constraint]]
-  name = "k8s.io/apiserver"
-  version = "kubernetes-1.13.0-beta.1"
-
-[[constraint]]
-  name = "k8s.io/kubernetes"
-  version = "1.13.0-beta.1"
-
-[[constraint]]
-  name = "github.com/xanzy/go-cloudstack"
-  version = "v2.4.1"
-
-[[override]]
-  name = "k8s.io/api"
-  version = "kubernetes-1.13.0-beta.1"
-
-[[override]]
-  name = "k8s.io/apiextensions-apiserver"
-  version = "kubernetes-1.13.0-beta.1"
-
-[[override]]
-  name = "k8s.io/apimachinery"
-  version = "kubernetes-1.13.0-beta.1"
-
-[[override]]
-  name = "k8s.io/client-go"
-  version = "kubernetes-1.13.0-beta.1"
-
-[[override]]
-  name = "github.com/docker/distribution"
-  branch = "master"
diff --git a/Makefile b/Makefile
index d6e74b0..bf2a2bc 100644
--- a/Makefile
+++ b/Makefile
@@ -5,6 +5,7 @@
 GIT_VERSION=${VERSION}-master+${GIT_COMMIT}
 LDFLAGS="-X github.com/swisstxt/cloudstack-cloud-controller-manager/vendor/k8s.io/kubernetes/pkg/version.gitVersion=${GIT_VERSION} -X github.com/swisstxt/cloudstack-cloud-controller-manager/vendor/k8s.io/kubernetes/pkg/version.gitCommit=${GIT_COMMIT} -X github.com/swisstxt/cloudstack-cloud-controller-manager/vendor/k8s.io/kubernetes/pkg/version.buildDate=${BUILD_DATE}"
 export CGO_ENABLED=0
+export GO111MODULE=on
 
 CMD_SRC=\
 	cmd/cloudstack-ccm/main.go
diff --git a/go.mod b/go.mod
new file mode 100644
index 0000000..859dace
--- /dev/null
+++ b/go.mod
@@ -0,0 +1,98 @@
+module github.com/swisstxt/cloudstack-cloud-controller-manager
+
+require (
+	bitbucket.org/ww/goautoneg v0.0.0-20120707110453-75cd24fc2f2c // indirect
+	github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78 // indirect
+	github.com/BurntSushi/toml v0.3.1 // indirect
+	github.com/NYTimes/gziphandler v1.0.1 // indirect
+	github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973 // indirect
+	github.com/coreos/bbolt v1.3.2 // indirect
+	github.com/coreos/etcd v3.3.10+incompatible // indirect
+	github.com/coreos/go-semver v0.2.0 // indirect
+	github.com/coreos/go-systemd v0.0.0-20181031085051-9002847aa142 // indirect
+	github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f // indirect
+	github.com/d2g/dhcp4 v0.0.0-20170904100407-a1d1b6c41b1c
+	github.com/d2g/dhcp4client v1.0.0
+	github.com/dgrijalva/jwt-go v3.2.0+incompatible // indirect
+	github.com/docker/distribution v0.0.0-20181024170156-93e082742a00 // indirect
+	github.com/docker/docker v0.0.0-20190201084306-d440fea4607b // indirect
+	github.com/elazarl/go-bindata-assetfs v1.0.0 // indirect
+	github.com/emicklei/go-restful v2.8.0+incompatible // indirect
+	github.com/emicklei/go-restful-swagger12 v0.0.0-20170208215640-dcef7f557305 // indirect
+	github.com/evanphx/json-patch v4.1.0+incompatible // indirect
+	github.com/ghodss/yaml v1.0.0 // indirect
+	github.com/go-openapi/jsonpointer v0.17.2 // indirect
+	github.com/go-openapi/jsonreference v0.17.2 // indirect
+	github.com/go-openapi/spec v0.17.2 // indirect
+	github.com/go-openapi/swag v0.17.2 // indirect
+	github.com/gogo/protobuf v1.1.1 // indirect
+	github.com/golang/groupcache v0.0.0-20181024230925-c65c006176ff // indirect
+	github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c // indirect
+	github.com/google/go-cmp v0.2.0 // indirect
+	github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf // indirect
+	github.com/google/uuid v1.0.0 // indirect
+	github.com/googleapis/gnostic v0.2.0 // indirect
+	github.com/gorilla/websocket v1.4.0 // indirect
+	github.com/gregjones/httpcache v0.0.0-20181110185634-c63ab54fda8f // indirect
+	github.com/grpc-ecosystem/go-grpc-middleware v1.0.0 // indirect
+	github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 // indirect
+	github.com/grpc-ecosystem/grpc-gateway v1.7.0 // indirect
+	github.com/hashicorp/golang-lru v0.5.0 // indirect
+	github.com/imdario/mergo v0.3.6 // indirect
+	github.com/inconshreveable/mousetrap v1.0.0 // indirect
+	github.com/jonboulle/clockwork v0.1.0 // indirect
+	github.com/json-iterator/go v1.1.5 // indirect
+	github.com/kardianos/osext v0.0.0-20170510131534-ae77be60afb1
+	github.com/matttproud/golang_protobuf_extensions v1.0.1 // indirect
+	github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
+	github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742 // indirect
+	github.com/onsi/ginkgo v1.7.0 // indirect
+	github.com/onsi/gomega v1.4.3 // indirect
+	github.com/opencontainers/go-digest v1.0.0-rc1 // indirect
+	github.com/pborman/uuid v0.0.0-20180906182336-adf5a7427709 // indirect
+	github.com/peterbourgon/diskv v2.0.1+incompatible // indirect
+	github.com/pkg/errors v0.8.1 // indirect
+	github.com/prometheus/client_golang v0.9.1 // indirect
+	github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910 // indirect
+	github.com/prometheus/common v0.0.0-20181116084131-1f2c4f3cd6db // indirect
+	github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d // indirect
+	github.com/sirupsen/logrus v1.3.0 // indirect
+	github.com/soheilhy/cmux v0.1.4 // indirect
+	github.com/spf13/afero v1.2.1 // indirect
+	github.com/spf13/cobra v0.0.3 // indirect
+	github.com/spf13/pflag v1.0.3
+	github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5 // indirect
+	github.com/ugorji/go/codec v0.0.0-20190128213124-ee1426cffec0 // indirect
+	github.com/xanzy/go-cloudstack v2.4.1+incompatible
+	github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2 // indirect
+	go.etcd.io/bbolt v1.3.2 // indirect
+	go.uber.org/atomic v1.3.2 // indirect
+	go.uber.org/multierr v1.1.0 // indirect
+	go.uber.org/zap v1.9.1 // indirect
+	golang.org/x/crypto v0.0.0-20181112202954-3d3f9f413869 // indirect
+	golang.org/x/net v0.0.0-20181114220301-adae6a3d119a // indirect
+	golang.org/x/oauth2 v0.0.0-20181106182150-f42d05182288 // indirect
+	golang.org/x/sys v0.0.0-20181116161606-93218def8b18 // indirect
+	golang.org/x/time v0.0.0-20181108054448-85acf8d2951c // indirect
+	google.golang.org/appengine v1.3.0 // indirect
+	google.golang.org/genproto v0.0.0-20181109154231-b5d43981345b // indirect
+	gopkg.in/gcfg.v1 v1.2.3
+	gopkg.in/inf.v0 v0.9.1 // indirect
+	gopkg.in/natefinch/lumberjack.v2 v2.0.0-20170531160350-a96e63847dc3 // indirect
+	gopkg.in/square/go-jose.v2 v2.1.9 // indirect
+	gopkg.in/warnings.v0 v0.1.2 // indirect
+	gotest.tools v2.2.0+incompatible // indirect
+	k8s.io/api v0.0.0-20181117111428-d01564359763
+	k8s.io/apiextensions-apiserver v0.0.0-20181117114143-e1ae69ff7b8b // indirect
+	k8s.io/apimachinery v0.0.0-20181117043124-0028e7a3cc82
+	k8s.io/apiserver v0.0.0-20181117112442-6b360527ed84
+	k8s.io/client-go v0.0.0-20181117111822-46a8dc78ec29 // indirect
+	k8s.io/cloud-provider v0.0.0-20181117115904-f18d40980285
+	k8s.io/csi-api v0.0.0-20181116233059-0fa5681c7162 // indirect
+	k8s.io/klog v0.1.0
+	k8s.io/kube-controller-manager v0.0.0-20181110193944-1c4e86102515 // indirect
+	k8s.io/kube-openapi v0.0.0-20181114233023-0317810137be // indirect
+	k8s.io/kubernetes v1.13.0-beta.1
+	k8s.io/utils v0.0.0-20181115163542-0d26856f57b3 // indirect
+	sigs.k8s.io/yaml v1.1.0 // indirect
+)
diff --git a/go.sum b/go.sum
new file mode 100644
index 0000000..8dd7f57
--- /dev/null
+++ b/go.sum
@@ -0,0 +1,252 @@
+bitbucket.org/ww/goautoneg v0.0.0-20120707110453-75cd24fc2f2c h1:t+Ra932MCC0eeyD/vigXqMbZTzgZjd4JOfBJWC6VSMI=
+bitbucket.org/ww/goautoneg v0.0.0-20120707110453-75cd24fc2f2c/go.mod h1:1vhO7Mn/FZMgOgDVGLy5X1mE6rq1HbkBdkF/yj8zkcg=
+cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
+github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78 h1:w+iIsaOQNcT7OZ575w+acHgRric5iCyQh+xv+KJ4HB8=
+github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8=
+github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=
+github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
+github.com/NYTimes/gziphandler v1.0.1 h1:iLrQrdwjDd52kHDA5op2UBJFjmOb9g+7scBan4RN8F0=
+github.com/NYTimes/gziphandler v1.0.1/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ=
+github.com/PuerkitoBio/purell v1.1.0 h1:rmGxhojJlM0tuKtfdvliR84CFHljx9ag64t2xmVkjK4=
+github.com/PuerkitoBio/purell v1.1.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
+github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M=
+github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
+github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973 h1:xJ4a3vCFaGF/jqvzLMYoU8P317H5OQ+Via4RmuPwCS0=
+github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
+github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
+github.com/coreos/bbolt v1.3.2 h1:wZwiHHUieZCquLkDL0B8UhzreNWsPHooDAG3q34zk0s=
+github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk=
+github.com/coreos/etcd v3.3.10+incompatible h1:jFneRYjIvLMLhDLCzuTuU4rSJUjRplcJQ7pD7MnhC04=
+github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
+github.com/coreos/go-semver v0.2.0 h1:3Jm3tLmsgAYcjC+4Up7hJrFBPr+n7rAqYeSw/SZazuY=
+github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
+github.com/coreos/go-systemd v0.0.0-20181031085051-9002847aa142 h1:3jFq2xL4ZajGK4aZY8jz+DAF0FHjI51BXjjSwCzS1Dk=
+github.com/coreos/go-systemd v0.0.0-20181031085051-9002847aa142/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
+github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f h1:lBNOc5arjvs8E5mO2tbpBpLoyyu8B6e44T7hJy6potg=
+github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
+github.com/d2g/dhcp4 v0.0.0-20170904100407-a1d1b6c41b1c h1:Xo2rK1pzOm0jO6abTPIQwbAmqBIOj132otexc1mmzFc=
+github.com/d2g/dhcp4 v0.0.0-20170904100407-a1d1b6c41b1c/go.mod h1:Ct2BUK8SB0YC1SMSibvLzxjeJLnrYEVLULFNiHY9YfQ=
+github.com/d2g/dhcp4client v1.0.0 h1:suYBsYZIkSlUMEz4TAYCczKf62IA2UWC+O8+KtdOhCo=
+github.com/d2g/dhcp4client v1.0.0/go.mod h1:j0hNfjhrt2SxUOw55nL0ATM/z4Yt3t2Kd1mW34z5W5s=
+github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
+github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM=
+github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
+github.com/docker/distribution v0.0.0-20181024170156-93e082742a00 h1:oMYsgzD1U/fva345wviC6v/CIg0xSMnxcij92F92OEo=
+github.com/docker/distribution v0.0.0-20181024170156-93e082742a00/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
+github.com/docker/docker v0.0.0-20190201084306-d440fea4607b h1:QRSvz8k4aKLZwzWoFVGLk+mYKLnL/tHDuWdDCyLaImY=
+github.com/docker/docker v0.0.0-20190201084306-d440fea4607b/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
+github.com/elazarl/go-bindata-assetfs v1.0.0 h1:G/bYguwHIzWq9ZoyUQqrjTmJbbYn3j3CKKpKinvZLFk=
+github.com/elazarl/go-bindata-assetfs v1.0.0/go.mod h1:v+YaWX3bdea5J/mo8dSETolEo7R71Vk1u8bnjau5yw4=
+github.com/emicklei/go-restful v2.8.0+incompatible h1:wN8GCRDPGHguIynsnBartv5GUgGUg1LAU7+xnSn1j7Q=
+github.com/emicklei/go-restful v2.8.0+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
+github.com/emicklei/go-restful-swagger12 v0.0.0-20170208215640-dcef7f557305 h1:2vAWk0wMCWb/pYiyat2rRZp5I5ZM+efPlagySNZ3JeM=
+github.com/emicklei/go-restful-swagger12 v0.0.0-20170208215640-dcef7f557305/go.mod h1:qr0VowGBT4CS4Q8vFF8BSeKz34PuqKGxs/L0IAQA9DQ=
+github.com/evanphx/json-patch v4.1.0+incompatible h1:K1MDoo4AZ4wU0GIU/fPmtZg7VpzLjCxu+UwBD1FvwOc=
+github.com/evanphx/json-patch v4.1.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
+github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
+github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
+github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk=
+github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
+github.com/go-openapi/jsonpointer v0.17.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M=
+github.com/go-openapi/jsonpointer v0.17.2 h1:3ekBy41gar/iJi2KSh/au/PrC2vpLr85upF/UZmm3W0=
+github.com/go-openapi/jsonpointer v0.17.2/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M=
+github.com/go-openapi/jsonreference v0.17.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I=
+github.com/go-openapi/jsonreference v0.17.2 h1:lF3z7AH8dd0IKXc1zEBi1dj0B4XgVb5cVjn39dCK3Ls=
+github.com/go-openapi/jsonreference v0.17.2/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I=
+github.com/go-openapi/spec v0.17.2 h1:eb2NbuCnoe8cWAxhtK6CfMWUYmiFEZJ9Hx3Z2WRwJ5M=
+github.com/go-openapi/spec v0.17.2/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI=
+github.com/go-openapi/swag v0.17.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg=
+github.com/go-openapi/swag v0.17.2 h1:K/ycE/XTUDFltNHSO32cGRUhrVGJD64o8WgAIZNyc3k=
+github.com/go-openapi/swag v0.17.2/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg=
+github.com/gogo/protobuf v1.1.1 h1:72R+M5VuhED/KujmZVcIquuo8mBgX4oVda//DQb3PXo=
+github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
+github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58=
+github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
+github.com/golang/groupcache v0.0.0-20181024230925-c65c006176ff h1:kOkM9whyQYodu09SJ6W3NCsHG7crFaJILQ22Gozp3lg=
+github.com/golang/groupcache v0.0.0-20181024230925-c65c006176ff/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
+github.com/golang/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:tluoj9z5200jBnyusfRPU2LqT6J+DAorxEvtC7LHB+E=
+github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
+github.com/golang/protobuf v1.2.0 h1:P3YflyNX/ehuJFLhxviNdFxQPkGK5cDcApsge1SqnvM=
+github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c h1:964Od4U6p2jUkFxvCydnIczKteheJEzHRToSGK3Bnlw=
+github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
+github.com/google/go-cmp v0.2.0 h1:+dTQ8DZQJz0Mb/HjFlkptS1FeQ4cWSnN941F8aEG4SQ=
+github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
+github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf h1:+RRA9JqSOZFfKrOeqr2z77+8R2RKyh8PG66dcu1V0ck=
+github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI=
+github.com/google/uuid v1.0.0 h1:b4Gk+7WdP/d3HZH8EJsZpvV7EtDOgaZLtnaNGIu1adA=
+github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/googleapis/gnostic v0.2.0 h1:l6N3VoaVzTncYYW+9yOz2LJJammFZGBO13sqgEhpy9g=
+github.com/googleapis/gnostic v0.2.0/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY=
+github.com/gorilla/websocket v1.4.0 h1:WDFjx/TMzVgy9VdMMQi2K2Emtwi2QcUQsztZ/zLaH/Q=
+github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
+github.com/gregjones/httpcache v0.0.0-20181110185634-c63ab54fda8f h1:ShTPMJQes6tubcjzGMODIVG5hlrCeImaBnZzKF2N8SM=
+github.com/gregjones/httpcache v0.0.0-20181110185634-c63ab54fda8f/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA=
+github.com/grpc-ecosystem/go-grpc-middleware v1.0.0 h1:Iju5GlWwrvL6UBg4zJJt3btmonfrMlCDdsejg4CZE7c=
+github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
+github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 h1:Ovs26xHkKqVztRpIrF/92BcuyuQ/YW4NSIpoGtfXNho=
+github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk=
+github.com/grpc-ecosystem/grpc-gateway v1.7.0 h1:tPFY/SM+d656aSgLWO2Eckc3ExwpwwybwdN5Ph20h1A=
+github.com/grpc-ecosystem/grpc-gateway v1.7.0/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw=
+github.com/hashicorp/golang-lru v0.5.0 h1:CL2msUPvZTLb5O648aiLNJw3hnBxN2+1Jq8rCOH9wdo=
+github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
+github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=
+github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
+github.com/imdario/mergo v0.3.6 h1:xTNEAn+kxVO7dTZGu0CegyqKZmoWFI0rF8UxjlB2d28=
+github.com/imdario/mergo v0.3.6/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
+github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM=
+github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
+github.com/jonboulle/clockwork v0.1.0 h1:VKV+ZcuP6l3yW9doeqz6ziZGgcynBVQO+obU0+0hcPo=
+github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
+github.com/json-iterator/go v1.1.5 h1:gL2yXlmiIo4+t+y32d4WGwOjKGYcGOuyrg46vadswDE=
+github.com/json-iterator/go v1.1.5/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
+github.com/kardianos/osext v0.0.0-20170510131534-ae77be60afb1 h1:PJPDf8OUfOK1bb/NeTKd4f1QXZItOX389VN3B6qC8ro=
+github.com/kardianos/osext v0.0.0-20170510131534-ae77be60afb1/go.mod h1:1NbS8ALrpOvjt0rHPNLyCIeMtbizbir8U//inJ+zuB8=
+github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
+github.com/konsorten/go-windows-terminal-sequences v1.0.1 h1:mweAR1A6xJ3oS2pRaGiHgQ4OO8tzTaLawm8vnODuwDk=
+github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
+github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329 h1:2gxZ0XQIU/5z3Z3bUBu+FXuk2pFbkN6tcwi/pjyaDic=
+github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
+github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU=
+github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
+github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
+github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
+github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742 h1:Esafd1046DLDQ0W1YjYsBW+p8U2u7vzgW2SQVmlNazg=
+github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
+github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/ginkgo v1.7.0 h1:WSHQ+IS43OoUrWtD1/bbclrwK8TTH5hzp+umCiuxHgs=
+github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/gomega v1.4.3 h1:RE1xgDvH7imwFD45h+u2SgIfERHlS2yNG4DObb5BSKU=
+github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
+github.com/opencontainers/go-digest v1.0.0-rc1 h1:WzifXhOVOEOuFYOJAW6aQqW0TooG2iki3E3Ii+WN7gQ=
+github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s=
+github.com/pborman/uuid v0.0.0-20180906182336-adf5a7427709 h1:zNBQb37RGLmJybyMcs983HfUfpkw9OTFD9tbBfAViHE=
+github.com/pborman/uuid v0.0.0-20180906182336-adf5a7427709/go.mod h1:VyrYX9gd7irzKovcSS6BIIEwPRkP2Wm2m9ufcdFSJ34=
+github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+vxiaj6gdUUzhl4XmI=
+github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
+github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I=
+github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
+github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
+github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/prometheus/client_golang v0.9.1 h1:K47Rk0v/fkEfwfQet2KWhscE0cJzjgCCDBG2KHZoVno=
+github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
+github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910 h1:idejC8f05m9MGOsuEi1ATq9shN03HrxNkD/luQvxCv8=
+github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
+github.com/prometheus/common v0.0.0-20181116084131-1f2c4f3cd6db h1:ckMAAQJ96ZKwKyiGamJdsinLn3D9+daeRlvvmYo9tkI=
+github.com/prometheus/common v0.0.0-20181116084131-1f2c4f3cd6db/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro=
+github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d h1:GoAlyOgbOEIFdaDqxJVlbOQ1DtGmZWs/Qau0hIlk+WQ=
+github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
+github.com/sirupsen/logrus v1.3.0 h1:hI/7Q+DtNZ2kINb6qt/lS+IyXnHQe9e90POfeewL/ME=
+github.com/sirupsen/logrus v1.3.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
+github.com/soheilhy/cmux v0.1.4 h1:0HKaf1o97UwFjHH9o5XsHUOF+tqmdA7KEzXLpiyaw0E=
+github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM=
+github.com/spf13/afero v1.2.1 h1:qgMbHoJbPbw579P+1zVY+6n4nIFuIchaIjzZ/I/Yq8M=
+github.com/spf13/afero v1.2.1/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk=
+github.com/spf13/cobra v0.0.3 h1:ZlrZ4XsMRm04Fr5pSFxBgfND2EBVa1nLpiy1stUsX/8=
+github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
+github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg=
+github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
+github.com/stretchr/objx v0.1.1 h1:2vfRuCMp5sSVIDSqO8oNnWJq7mPa6KVP3iPIwFBuy8A=
+github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/testify v1.2.2 h1:bSDNvY7ZPG5RlJ8otE/7V6gMiyenm9RtJ7IUVIAoJ1w=
+github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
+github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5 h1:LnC5Kc/wtumK+WB441p7ynQJzVuNRJiqddSIE3IlSEQ=
+github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
+github.com/ugorji/go v1.1.2 h1:JON3E2/GPW2iDNGoSAusl1KDf5TRQ8k8q7Tp097pZGs=
+github.com/ugorji/go v1.1.2/go.mod h1:hnLbHMwcvSihnDhEfx2/BzKp2xb0Y+ErdfYcrs9tkJQ=
+github.com/ugorji/go/codec v0.0.0-20190128213124-ee1426cffec0 h1:Q3Bh5Dwzek5LreV9l86IftyLaexgU1mag9WNntbAW9c=
+github.com/ugorji/go/codec v0.0.0-20190128213124-ee1426cffec0/go.mod h1:iT03XoTwV7xq/+UGwKO3UbC1nNNlopQiY61beSdrtOA=
+github.com/xanzy/go-cloudstack v2.4.1+incompatible h1:Oc4xa2+I94h1g/QJ+nHoq597nJz2KXzxuQx/weOx0AU=
+github.com/xanzy/go-cloudstack v2.4.1+incompatible/go.mod h1:s3eL3z5pNXF5FVybcT+LIVdId8pYn709yv6v5mrkrQE=
+github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2 h1:eY9dn8+vbi4tKz5Qo6v2eYzo7kUS51QINcR5jNpbZS8=
+github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
+go.etcd.io/bbolt v1.3.2 h1:Z/90sZLPOeCy2PwprqkFa25PdkusRzaj9P8zm/KNyvk=
+go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
+go.uber.org/atomic v1.3.2 h1:2Oa65PReHzfn29GpvgsYwloV9AVFHPDk8tYxt2c2tr4=
+go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
+go.uber.org/multierr v1.1.0 h1:HoEmRHQPVSqub6w2z2d2EOVs2fjyFRGyofhKuyDq0QI=
+go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
+go.uber.org/zap v1.9.1 h1:XCJQEf3W6eZaVwhRBof6ImoYGJSITeKWsyeh3HFu/5o=
+go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
+golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
+golang.org/x/crypto v0.0.0-20181112202954-3d3f9f413869 h1:kkXA53yGe04D0adEYJwEVQjeBppL01Exg+fnMjfUraU=
+golang.org/x/crypto v0.0.0-20181112202954-3d3f9f413869/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
+golang.org/x/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
+golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20181005035420-146acd28ed58/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20181106065722-10aee1819953/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20181114220301-adae6a3d119a h1:gOpx8G595UYyvj8UK4+OFyY4rx037g3fmfhe5SasG3U=
+golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
+golang.org/x/oauth2 v0.0.0-20181106182150-f42d05182288 h1:JIqe8uIcRBHXDQVvZtHwp80ai3Lw3IJAeJEs55Dc1W0=
+golang.org/x/oauth2 v0.0.0-20181106182150-f42d05182288/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
+golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f h1:wMNYb4v58l5UBM7MYRLPG6ZhfOqbKu7X5eyFl8ZhKvA=
+golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20181116161606-93218def8b18 h1:Wh+XCfg3kNpjhdq2LXrsiOProjtQZKme5XUx7VcxwAw=
+golang.org/x/sys v0.0.0-20181116161606-93218def8b18/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
+golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+golang.org/x/time v0.0.0-20181108054448-85acf8d2951c h1:fqgJT0MGcGpPgpWU7VRdRjuArfcOvC4AoJmILihzhDg=
+golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
+golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
+google.golang.org/appengine v1.3.0 h1:FBSsiFRMz3LBeXIomRnVzrQwSDj4ibvcRexLG0LZGQk=
+google.golang.org/appengine v1.3.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
+google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
+google.golang.org/genproto v0.0.0-20181109154231-b5d43981345b h1:WkFtVmaZoTRVoRYr0LTC9SYNhlw0X0HrVPz2OVssVm4=
+google.golang.org/genproto v0.0.0-20181109154231-b5d43981345b/go.mod h1:7Ep/1NZk928CDR8SjdVbjWNpdIf6nzjE3BTgJDr2Atg=
+google.golang.org/grpc v1.16.0 h1:dz5IJGuC2BB7qXR5AyHNwAUBhZscK2xVez7mznh72sY=
+google.golang.org/grpc v1.16.0/go.mod h1:0JHn/cJsOMiMfNA9+DeHDlAU7KAAB5GDlYFpa9MZMio=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4=
+gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
+gopkg.in/gcfg.v1 v1.2.3 h1:m8OOJ4ccYHnx2f4gQwpno8nAX5OGOh7RLaaz0pj3Ogs=
+gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o=
+gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=
+gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
+gopkg.in/natefinch/lumberjack.v2 v2.0.0-20170531160350-a96e63847dc3 h1:AFxeG48hTWHhDTQDk/m2gorfVHUEa9vo3tp3D7TzwjI=
+gopkg.in/natefinch/lumberjack.v2 v2.0.0-20170531160350-a96e63847dc3/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k=
+gopkg.in/square/go-jose.v2 v2.1.9 h1:YCFbL5T2gbmC2sMG12s1x2PAlTK5TZNte3hjZEIcCAg=
+gopkg.in/square/go-jose.v2 v2.1.9/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI=
+gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
+gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
+gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME=
+gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI=
+gopkg.in/yaml.v2 v2.2.1 h1:mUhvW9EsL+naU5Q3cakzfE91YhliOondGd6ZrsDBHQE=
+gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo=
+gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw=
+honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+k8s.io/api v0.0.0-20181117111428-d01564359763 h1:Wvt+yREvNn/W3g0qE1KFj9UpMYPFD0aCgKCIH7HYTNc=
+k8s.io/api v0.0.0-20181117111428-d01564359763/go.mod h1:iuAfoD4hCxJ8Onx9kaTIt30j7jUFS00AXQi6QMi99vA=
+k8s.io/apiextensions-apiserver v0.0.0-20181117114143-e1ae69ff7b8b h1:NcA0KluBgJu99iuDDFFhyLmlK5aYoWGAbfqwoyX1MIU=
+k8s.io/apiextensions-apiserver v0.0.0-20181117114143-e1ae69ff7b8b/go.mod h1:IxkesAMoaCRoLrPJdZNZUQp9NfZnzqaVzLhb2VEQzXE=
+k8s.io/apimachinery v0.0.0-20181117043124-0028e7a3cc82 h1:qJmmE+yHqJIsTTzkcKCg93JVDMkuG+vvNWaLjZ2M2EE=
+k8s.io/apimachinery v0.0.0-20181117043124-0028e7a3cc82/go.mod h1:ccL7Eh7zubPUSh9A3USN90/OzHNSVN6zxzde07TDCL0=
+k8s.io/apiserver v0.0.0-20181117112442-6b360527ed84 h1:5fMC98afMBZluOnnK9rky0ZnEDqnVbja1tjzHXiOkl4=
+k8s.io/apiserver v0.0.0-20181117112442-6b360527ed84/go.mod h1:6bqaTSOSJavUIXUtfaR9Os9JtTCm8ZqH2SUl2S60C4w=
+k8s.io/client-go v0.0.0-20181117111822-46a8dc78ec29 h1:865EcZukGrcEN7HfxJ2m9zqvMRNWqzG+4IGnnpylflE=
+k8s.io/client-go v0.0.0-20181117111822-46a8dc78ec29/go.mod h1:7vJpHMYJwNQCWgzmNV+VYUl1zCObLyodBc8nIyt8L5s=
+k8s.io/cloud-provider v0.0.0-20181117115904-f18d40980285 h1:aHaQFowPeNg33a9Nb6Kn2zEFlCn7uiJlVdnefSkl3ro=
+k8s.io/cloud-provider v0.0.0-20181117115904-f18d40980285/go.mod h1:LlIffnLBu+GG7d4ppPzC8UnA1Ex8S+ntmSRVsnr7Xy4=
+k8s.io/csi-api v0.0.0-20181116233059-0fa5681c7162 h1:FSQ5hX5vUaFN5nn5N57tPjZLl8lPUJax9H3Ii0rlrRg=
+k8s.io/csi-api v0.0.0-20181116233059-0fa5681c7162/go.mod h1:GH854hXKH+vaEO06X/DMiE/o3rVO1aw8dXJJpP7awjA=
+k8s.io/klog v0.1.0 h1:I5HMfc/DtuVaGR1KPwUrTc476K8NCqNBldC7H4dYEzk=
+k8s.io/klog v0.1.0/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk=
+k8s.io/kube-controller-manager v0.0.0-20181110193944-1c4e86102515 h1:J6KIC7xRubpnsmV85xDsso76NTy6vvhbWW6hXBHjRMw=
+k8s.io/kube-controller-manager v0.0.0-20181110193944-1c4e86102515/go.mod h1:PSEJjfqWdqGiNnCXBYIVNE0PBUAug48nS+Sev3ToqLA=
+k8s.io/kube-openapi v0.0.0-20181114233023-0317810137be h1:aWEq4nbj7HRJ0mtKYjNSk/7X28Tl6TI6FeG8gKF+r7Q=
+k8s.io/kube-openapi v0.0.0-20181114233023-0317810137be/go.mod h1:BXM9ceUBTj2QnfH2MK1odQs778ajze1RxcmP6S8RVVc=
+k8s.io/kubernetes v1.13.0-beta.1 h1:84EdQ6DtTzw0uNkrNEX9mUwbJjt6AgOAQ07QFJW0f+w=
+k8s.io/kubernetes v1.13.0-beta.1/go.mod h1:ocZa8+6APFNC2tX1DZASIbocyYT5jHzqFVsY5aoB7Jk=
+k8s.io/utils v0.0.0-20181115163542-0d26856f57b3 h1:S3/Kq185JnolOEemhmDXXd23l2t4bX5hPQPQPADlF1E=
+k8s.io/utils v0.0.0-20181115163542-0d26856f57b3/go.mod h1:8k8uAuAQ0rXslZKaEWd0c3oVhZz7sSzSiPnVZayjIX0=
+sigs.k8s.io/yaml v1.1.0 h1:4A07+ZFc2wgJwo8YNlQpr1rVlgUDlxXHhPJciaPY5gs=
+sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o=
diff --git a/vendor/bitbucket.org/ww/goautoneg/autoneg_test.go b/vendor/bitbucket.org/ww/goautoneg/autoneg_test.go
deleted file mode 100644
index 41d328f..0000000
--- a/vendor/bitbucket.org/ww/goautoneg/autoneg_test.go
+++ /dev/null
@@ -1,33 +0,0 @@
-package goautoneg
-
-import (
-	"testing"
-)
-
-var chrome = "application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5"
-
-func TestParseAccept(t *testing.T) {
-	alternatives := []string{"text/html", "image/png"}
-	content_type := Negotiate(chrome, alternatives)
-	if content_type != "image/png" {
-		t.Errorf("got %s expected image/png", content_type)
-	}
-
-	alternatives = []string{"text/html", "text/plain", "text/n3"}
-	content_type = Negotiate(chrome, alternatives)
-	if content_type != "text/html" {
-		t.Errorf("got %s expected text/html", content_type)
-	}
-
-	alternatives = []string{"text/n3", "text/plain"}
-	content_type = Negotiate(chrome, alternatives)
-	if content_type != "text/plain" {
-		t.Errorf("got %s expected text/plain", content_type)
-	}
-
-	alternatives = []string{"text/n3", "application/rdf+xml"}
-	content_type = Negotiate(chrome, alternatives)
-	if content_type != "text/n3" {
-		t.Errorf("got %s expected text/n3", content_type)
-	}
-}
diff --git a/vendor/github.com/Azure/go-ansiterm/parser_test.go b/vendor/github.com/Azure/go-ansiterm/parser_test.go
deleted file mode 100644
index cd4888f..0000000
--- a/vendor/github.com/Azure/go-ansiterm/parser_test.go
+++ /dev/null
@@ -1,141 +0,0 @@
-package ansiterm
-
-import (
-	"fmt"
-	"testing"
-)
-
-func TestStateTransitions(t *testing.T) {
-	stateTransitionHelper(t, "CsiEntry", "Ground", alphabetics)
-	stateTransitionHelper(t, "CsiEntry", "CsiParam", csiCollectables)
-	stateTransitionHelper(t, "Escape", "CsiEntry", []byte{ANSI_ESCAPE_SECONDARY})
-	stateTransitionHelper(t, "Escape", "OscString", []byte{0x5D})
-	stateTransitionHelper(t, "Escape", "Ground", escapeToGroundBytes)
-	stateTransitionHelper(t, "Escape", "EscapeIntermediate", intermeds)
-	stateTransitionHelper(t, "EscapeIntermediate", "EscapeIntermediate", intermeds)
-	stateTransitionHelper(t, "EscapeIntermediate", "EscapeIntermediate", executors)
-	stateTransitionHelper(t, "EscapeIntermediate", "Ground", escapeIntermediateToGroundBytes)
-	stateTransitionHelper(t, "OscString", "Ground", []byte{ANSI_BEL})
-	stateTransitionHelper(t, "OscString", "Ground", []byte{0x5C})
-	stateTransitionHelper(t, "Ground", "Ground", executors)
-}
-
-func TestAnyToX(t *testing.T) {
-	anyToXHelper(t, []byte{ANSI_ESCAPE_PRIMARY}, "Escape")
-	anyToXHelper(t, []byte{DCS_ENTRY}, "DcsEntry")
-	anyToXHelper(t, []byte{OSC_STRING}, "OscString")
-	anyToXHelper(t, []byte{CSI_ENTRY}, "CsiEntry")
-	anyToXHelper(t, toGroundBytes, "Ground")
-}
-
-func TestCollectCsiParams(t *testing.T) {
-	parser, _ := createTestParser("CsiEntry")
-	parser.Parse(csiCollectables)
-
-	buffer := parser.context.paramBuffer
-	bufferCount := len(buffer)
-
-	if bufferCount != len(csiCollectables) {
-		t.Errorf("Buffer:    %v", buffer)
-		t.Errorf("CsiParams: %v", csiCollectables)
-		t.Errorf("Buffer count failure: %d != %d", bufferCount, len(csiParams))
-		return
-	}
-
-	for i, v := range csiCollectables {
-		if v != buffer[i] {
-			t.Errorf("Buffer:    %v", buffer)
-			t.Errorf("CsiParams: %v", csiParams)
-			t.Errorf("Mismatch at buffer[%d] = %d", i, buffer[i])
-		}
-	}
-}
-
-func TestParseParams(t *testing.T) {
-	parseParamsHelper(t, []byte{}, []string{})
-	parseParamsHelper(t, []byte{';'}, []string{})
-	parseParamsHelper(t, []byte{';', ';'}, []string{})
-	parseParamsHelper(t, []byte{'7'}, []string{"7"})
-	parseParamsHelper(t, []byte{'7', ';'}, []string{"7"})
-	parseParamsHelper(t, []byte{'7', ';', ';'}, []string{"7"})
-	parseParamsHelper(t, []byte{'7', ';', ';', '8'}, []string{"7", "8"})
-	parseParamsHelper(t, []byte{'7', ';', '8', ';'}, []string{"7", "8"})
-	parseParamsHelper(t, []byte{'7', ';', ';', '8', ';', ';'}, []string{"7", "8"})
-	parseParamsHelper(t, []byte{'7', '8'}, []string{"78"})
-	parseParamsHelper(t, []byte{'7', '8', ';'}, []string{"78"})
-	parseParamsHelper(t, []byte{'7', '8', ';', '9', '0'}, []string{"78", "90"})
-	parseParamsHelper(t, []byte{'7', '8', ';', ';', '9', '0'}, []string{"78", "90"})
-	parseParamsHelper(t, []byte{'7', '8', ';', '9', '0', ';'}, []string{"78", "90"})
-	parseParamsHelper(t, []byte{'7', '8', ';', '9', '0', ';', ';'}, []string{"78", "90"})
-}
-
-func TestCursor(t *testing.T) {
-	cursorSingleParamHelper(t, 'A', "CUU")
-	cursorSingleParamHelper(t, 'B', "CUD")
-	cursorSingleParamHelper(t, 'C', "CUF")
-	cursorSingleParamHelper(t, 'D', "CUB")
-	cursorSingleParamHelper(t, 'E', "CNL")
-	cursorSingleParamHelper(t, 'F', "CPL")
-	cursorSingleParamHelper(t, 'G', "CHA")
-	cursorTwoParamHelper(t, 'H', "CUP")
-	cursorTwoParamHelper(t, 'f', "HVP")
-	funcCallParamHelper(t, []byte{'?', '2', '5', 'h'}, "CsiEntry", "Ground", []string{"DECTCEM([true])"})
-	funcCallParamHelper(t, []byte{'?', '2', '5', 'l'}, "CsiEntry", "Ground", []string{"DECTCEM([false])"})
-}
-
-func TestErase(t *testing.T) {
-	// Erase in Display
-	eraseHelper(t, 'J', "ED")
-
-	// Erase in Line
-	eraseHelper(t, 'K', "EL")
-}
-
-func TestSelectGraphicRendition(t *testing.T) {
-	funcCallParamHelper(t, []byte{'m'}, "CsiEntry", "Ground", []string{"SGR([0])"})
-	funcCallParamHelper(t, []byte{'0', 'm'}, "CsiEntry", "Ground", []string{"SGR([0])"})
-	funcCallParamHelper(t, []byte{'0', ';', '1', 'm'}, "CsiEntry", "Ground", []string{"SGR([0 1])"})
-	funcCallParamHelper(t, []byte{'0', ';', '1', ';', '2', 'm'}, "CsiEntry", "Ground", []string{"SGR([0 1 2])"})
-}
-
-func TestScroll(t *testing.T) {
-	scrollHelper(t, 'S', "SU")
-	scrollHelper(t, 'T', "SD")
-}
-
-func TestPrint(t *testing.T) {
-	parser, evtHandler := createTestParser("Ground")
-	parser.Parse(printables)
-	validateState(t, parser.currState, "Ground")
-
-	for i, v := range printables {
-		expectedCall := fmt.Sprintf("Print([%s])", string(v))
-		actualCall := evtHandler.FunctionCalls[i]
-		if actualCall != expectedCall {
-			t.Errorf("Actual != Expected: %v != %v at %d", actualCall, expectedCall, i)
-		}
-	}
-}
-
-func TestClear(t *testing.T) {
-	p, _ := createTestParser("Ground")
-	fillContext(p.context)
-	p.clear()
-	validateEmptyContext(t, p.context)
-}
-
-func TestClearOnStateChange(t *testing.T) {
-	clearOnStateChangeHelper(t, "Ground", "Escape", []byte{ANSI_ESCAPE_PRIMARY})
-	clearOnStateChangeHelper(t, "Ground", "CsiEntry", []byte{CSI_ENTRY})
-}
-
-func TestC0(t *testing.T) {
-	expectedCall := "Execute([" + string(ANSI_LINE_FEED) + "])"
-	c0Helper(t, []byte{ANSI_LINE_FEED}, "Ground", []string{expectedCall})
-	expectedCall = "Execute([" + string(ANSI_CARRIAGE_RETURN) + "])"
-	c0Helper(t, []byte{ANSI_CARRIAGE_RETURN}, "Ground", []string{expectedCall})
-}
-
-func TestEscDispatch(t *testing.T) {
-	funcCallParamHelper(t, []byte{'M'}, "Escape", "Ground", []string{"RI([])"})
-}
diff --git a/vendor/github.com/Azure/go-ansiterm/parser_test_helpers_test.go b/vendor/github.com/Azure/go-ansiterm/parser_test_helpers_test.go
deleted file mode 100644
index 562f215..0000000
--- a/vendor/github.com/Azure/go-ansiterm/parser_test_helpers_test.go
+++ /dev/null
@@ -1,114 +0,0 @@
-package ansiterm
-
-import (
-	"fmt"
-	"testing"
-)
-
-func getStateNames() []string {
-	parser, _ := createTestParser("Ground")
-
-	stateNames := []string{}
-	for _, state := range parser.stateMap {
-		stateNames = append(stateNames, state.Name())
-	}
-
-	return stateNames
-}
-
-func stateTransitionHelper(t *testing.T, start string, end string, bytes []byte) {
-	for _, b := range bytes {
-		bytes := []byte{byte(b)}
-		parser, _ := createTestParser(start)
-		parser.Parse(bytes)
-		validateState(t, parser.currState, end)
-	}
-}
-
-func anyToXHelper(t *testing.T, bytes []byte, expectedState string) {
-	for _, s := range getStateNames() {
-		stateTransitionHelper(t, s, expectedState, bytes)
-	}
-}
-
-func funcCallParamHelper(t *testing.T, bytes []byte, start string, expected string, expectedCalls []string) {
-	parser, evtHandler := createTestParser(start)
-	parser.Parse(bytes)
-	validateState(t, parser.currState, expected)
-	validateFuncCalls(t, evtHandler.FunctionCalls, expectedCalls)
-}
-
-func parseParamsHelper(t *testing.T, bytes []byte, expectedParams []string) {
-	params, err := parseParams(bytes)
-
-	if err != nil {
-		t.Errorf("Parameter parse error: %v", err)
-		return
-	}
-
-	if len(params) != len(expectedParams) {
-		t.Errorf("Parsed   parameters: %v", params)
-		t.Errorf("Expected parameters: %v", expectedParams)
-		t.Errorf("Parameter length failure: %d != %d", len(params), len(expectedParams))
-		return
-	}
-
-	for i, v := range expectedParams {
-		if v != params[i] {
-			t.Errorf("Parsed   parameters: %v", params)
-			t.Errorf("Expected parameters: %v", expectedParams)
-			t.Errorf("Parameter parse failure: %s != %s at position %d", v, params[i], i)
-		}
-	}
-}
-
-func cursorSingleParamHelper(t *testing.T, command byte, funcName string) {
-	funcCallParamHelper(t, []byte{command}, "CsiEntry", "Ground", []string{fmt.Sprintf("%s([1])", funcName)})
-	funcCallParamHelper(t, []byte{'0', command}, "CsiEntry", "Ground", []string{fmt.Sprintf("%s([1])", funcName)})
-	funcCallParamHelper(t, []byte{'2', command}, "CsiEntry", "Ground", []string{fmt.Sprintf("%s([2])", funcName)})
-	funcCallParamHelper(t, []byte{'2', '3', command}, "CsiEntry", "Ground", []string{fmt.Sprintf("%s([23])", funcName)})
-	funcCallParamHelper(t, []byte{'2', ';', '3', command}, "CsiEntry", "Ground", []string{fmt.Sprintf("%s([2])", funcName)})
-	funcCallParamHelper(t, []byte{'2', ';', '3', ';', '4', command}, "CsiEntry", "Ground", []string{fmt.Sprintf("%s([2])", funcName)})
-}
-
-func cursorTwoParamHelper(t *testing.T, command byte, funcName string) {
-	funcCallParamHelper(t, []byte{command}, "CsiEntry", "Ground", []string{fmt.Sprintf("%s([1 1])", funcName)})
-	funcCallParamHelper(t, []byte{'0', command}, "CsiEntry", "Ground", []string{fmt.Sprintf("%s([1 1])", funcName)})
-	funcCallParamHelper(t, []byte{'2', command}, "CsiEntry", "Ground", []string{fmt.Sprintf("%s([2 1])", funcName)})
-	funcCallParamHelper(t, []byte{'2', '3', command}, "CsiEntry", "Ground", []string{fmt.Sprintf("%s([23 1])", funcName)})
-	funcCallParamHelper(t, []byte{'2', ';', '3', command}, "CsiEntry", "Ground", []string{fmt.Sprintf("%s([2 3])", funcName)})
-	funcCallParamHelper(t, []byte{'2', ';', '3', ';', '4', command}, "CsiEntry", "Ground", []string{fmt.Sprintf("%s([2 3])", funcName)})
-}
-
-func eraseHelper(t *testing.T, command byte, funcName string) {
-	funcCallParamHelper(t, []byte{command}, "CsiEntry", "Ground", []string{fmt.Sprintf("%s([0])", funcName)})
-	funcCallParamHelper(t, []byte{'0', command}, "CsiEntry", "Ground", []string{fmt.Sprintf("%s([0])", funcName)})
-	funcCallParamHelper(t, []byte{'1', command}, "CsiEntry", "Ground", []string{fmt.Sprintf("%s([1])", funcName)})
-	funcCallParamHelper(t, []byte{'2', command}, "CsiEntry", "Ground", []string{fmt.Sprintf("%s([2])", funcName)})
-	funcCallParamHelper(t, []byte{'3', command}, "CsiEntry", "Ground", []string{fmt.Sprintf("%s([3])", funcName)})
-	funcCallParamHelper(t, []byte{'4', command}, "CsiEntry", "Ground", []string{fmt.Sprintf("%s([0])", funcName)})
-	funcCallParamHelper(t, []byte{'1', ';', '2', command}, "CsiEntry", "Ground", []string{fmt.Sprintf("%s([1])", funcName)})
-}
-
-func scrollHelper(t *testing.T, command byte, funcName string) {
-	funcCallParamHelper(t, []byte{command}, "CsiEntry", "Ground", []string{fmt.Sprintf("%s([1])", funcName)})
-	funcCallParamHelper(t, []byte{'0', command}, "CsiEntry", "Ground", []string{fmt.Sprintf("%s([1])", funcName)})
-	funcCallParamHelper(t, []byte{'1', command}, "CsiEntry", "Ground", []string{fmt.Sprintf("%s([1])", funcName)})
-	funcCallParamHelper(t, []byte{'5', command}, "CsiEntry", "Ground", []string{fmt.Sprintf("%s([5])", funcName)})
-	funcCallParamHelper(t, []byte{'4', ';', '6', command}, "CsiEntry", "Ground", []string{fmt.Sprintf("%s([4])", funcName)})
-}
-
-func clearOnStateChangeHelper(t *testing.T, start string, end string, bytes []byte) {
-	p, _ := createTestParser(start)
-	fillContext(p.context)
-	p.Parse(bytes)
-	validateState(t, p.currState, end)
-	validateEmptyContext(t, p.context)
-}
-
-func c0Helper(t *testing.T, bytes []byte, expectedState string, expectedCalls []string) {
-	parser, evtHandler := createTestParser("Ground")
-	parser.Parse(bytes)
-	validateState(t, parser.currState, expectedState)
-	validateFuncCalls(t, evtHandler.FunctionCalls, expectedCalls)
-}
diff --git a/vendor/github.com/Azure/go-ansiterm/parser_test_utilities_test.go b/vendor/github.com/Azure/go-ansiterm/parser_test_utilities_test.go
deleted file mode 100644
index 78b885c..0000000
--- a/vendor/github.com/Azure/go-ansiterm/parser_test_utilities_test.go
+++ /dev/null
@@ -1,66 +0,0 @@
-package ansiterm
-
-import (
-	"testing"
-)
-
-func createTestParser(s string) (*AnsiParser, *TestAnsiEventHandler) {
-	evtHandler := CreateTestAnsiEventHandler()
-	parser := CreateParser(s, evtHandler)
-
-	return parser, evtHandler
-}
-
-func validateState(t *testing.T, actualState state, expectedStateName string) {
-	actualName := "Nil"
-
-	if actualState != nil {
-		actualName = actualState.Name()
-	}
-
-	if actualName != expectedStateName {
-		t.Errorf("Invalid state: '%s' != '%s'", actualName, expectedStateName)
-	}
-}
-
-func validateFuncCalls(t *testing.T, actualCalls []string, expectedCalls []string) {
-	actualCount := len(actualCalls)
-	expectedCount := len(expectedCalls)
-
-	if actualCount != expectedCount {
-		t.Errorf("Actual   calls: %v", actualCalls)
-		t.Errorf("Expected calls: %v", expectedCalls)
-		t.Errorf("Call count error: %d != %d", actualCount, expectedCount)
-		return
-	}
-
-	for i, v := range actualCalls {
-		if v != expectedCalls[i] {
-			t.Errorf("Actual   calls: %v", actualCalls)
-			t.Errorf("Expected calls: %v", expectedCalls)
-			t.Errorf("Mismatched calls: %s != %s with lengths %d and %d", v, expectedCalls[i], len(v), len(expectedCalls[i]))
-		}
-	}
-}
-
-func fillContext(context *ansiContext) {
-	context.currentChar = 'A'
-	context.paramBuffer = []byte{'C', 'D', 'E'}
-	context.interBuffer = []byte{'F', 'G', 'H'}
-}
-
-func validateEmptyContext(t *testing.T, context *ansiContext) {
-	var expectedCurrChar byte = 0x0
-	if context.currentChar != expectedCurrChar {
-		t.Errorf("Currentchar mismatch '%#x' != '%#x'", context.currentChar, expectedCurrChar)
-	}
-
-	if len(context.paramBuffer) != 0 {
-		t.Errorf("Non-empty parameter buffer: %v", context.paramBuffer)
-	}
-
-	if len(context.paramBuffer) != 0 {
-		t.Errorf("Non-empty intermediate buffer: %v", context.interBuffer)
-	}
-
-}
diff --git a/vendor/github.com/Azure/go-ansiterm/test_event_handler_test.go b/vendor/github.com/Azure/go-ansiterm/test_event_handler_test.go
deleted file mode 100644
index 60f9f30..0000000
--- a/vendor/github.com/Azure/go-ansiterm/test_event_handler_test.go
+++ /dev/null
@@ -1,173 +0,0 @@
-package ansiterm
-
-import (
-	"fmt"
-	"strconv"
-)
-
-type TestAnsiEventHandler struct {
-	FunctionCalls []string
-}
-
-func CreateTestAnsiEventHandler() *TestAnsiEventHandler {
-	evtHandler := TestAnsiEventHandler{}
-	evtHandler.FunctionCalls = make([]string, 0)
-	return &evtHandler
-}
-
-func (h *TestAnsiEventHandler) recordCall(call string, params []string) {
-	s := fmt.Sprintf("%s(%v)", call, params)
-	h.FunctionCalls = append(h.FunctionCalls, s)
-}
-
-func (h *TestAnsiEventHandler) Print(b byte) error {
-	h.recordCall("Print", []string{string(b)})
-	return nil
-}
-
-func (h *TestAnsiEventHandler) Execute(b byte) error {
-	h.recordCall("Execute", []string{string(b)})
-	return nil
-}
-
-func (h *TestAnsiEventHandler) CUU(param int) error {
-	h.recordCall("CUU", []string{strconv.Itoa(param)})
-	return nil
-}
-
-func (h *TestAnsiEventHandler) CUD(param int) error {
-	h.recordCall("CUD", []string{strconv.Itoa(param)})
-	return nil
-}
-
-func (h *TestAnsiEventHandler) CUF(param int) error {
-	h.recordCall("CUF", []string{strconv.Itoa(param)})
-	return nil
-}
-
-func (h *TestAnsiEventHandler) CUB(param int) error {
-	h.recordCall("CUB", []string{strconv.Itoa(param)})
-	return nil
-}
-
-func (h *TestAnsiEventHandler) CNL(param int) error {
-	h.recordCall("CNL", []string{strconv.Itoa(param)})
-	return nil
-}
-
-func (h *TestAnsiEventHandler) CPL(param int) error {
-	h.recordCall("CPL", []string{strconv.Itoa(param)})
-	return nil
-}
-
-func (h *TestAnsiEventHandler) CHA(param int) error {
-	h.recordCall("CHA", []string{strconv.Itoa(param)})
-	return nil
-}
-
-func (h *TestAnsiEventHandler) VPA(param int) error {
-	h.recordCall("VPA", []string{strconv.Itoa(param)})
-	return nil
-}
-
-func (h *TestAnsiEventHandler) CUP(x int, y int) error {
-	xS, yS := strconv.Itoa(x), strconv.Itoa(y)
-	h.recordCall("CUP", []string{xS, yS})
-	return nil
-}
-
-func (h *TestAnsiEventHandler) HVP(x int, y int) error {
-	xS, yS := strconv.Itoa(x), strconv.Itoa(y)
-	h.recordCall("HVP", []string{xS, yS})
-	return nil
-}
-
-func (h *TestAnsiEventHandler) DECTCEM(visible bool) error {
-	h.recordCall("DECTCEM", []string{strconv.FormatBool(visible)})
-	return nil
-}
-
-func (h *TestAnsiEventHandler) DECOM(visible bool) error {
-	h.recordCall("DECOM", []string{strconv.FormatBool(visible)})
-	return nil
-}
-
-func (h *TestAnsiEventHandler) DECCOLM(use132 bool) error {
-	h.recordCall("DECOLM", []string{strconv.FormatBool(use132)})
-	return nil
-}
-
-func (h *TestAnsiEventHandler) ED(param int) error {
-	h.recordCall("ED", []string{strconv.Itoa(param)})
-	return nil
-}
-
-func (h *TestAnsiEventHandler) EL(param int) error {
-	h.recordCall("EL", []string{strconv.Itoa(param)})
-	return nil
-}
-
-func (h *TestAnsiEventHandler) IL(param int) error {
-	h.recordCall("IL", []string{strconv.Itoa(param)})
-	return nil
-}
-
-func (h *TestAnsiEventHandler) DL(param int) error {
-	h.recordCall("DL", []string{strconv.Itoa(param)})
-	return nil
-}
-
-func (h *TestAnsiEventHandler) ICH(param int) error {
-	h.recordCall("ICH", []string{strconv.Itoa(param)})
-	return nil
-}
-
-func (h *TestAnsiEventHandler) DCH(param int) error {
-	h.recordCall("DCH", []string{strconv.Itoa(param)})
-	return nil
-}
-
-func (h *TestAnsiEventHandler) SGR(params []int) error {
-	strings := []string{}
-	for _, v := range params {
-		strings = append(strings, strconv.Itoa(v))
-	}
-
-	h.recordCall("SGR", strings)
-	return nil
-}
-
-func (h *TestAnsiEventHandler) SU(param int) error {
-	h.recordCall("SU", []string{strconv.Itoa(param)})
-	return nil
-}
-
-func (h *TestAnsiEventHandler) SD(param int) error {
-	h.recordCall("SD", []string{strconv.Itoa(param)})
-	return nil
-}
-
-func (h *TestAnsiEventHandler) DA(params []string) error {
-	h.recordCall("DA", params)
-	return nil
-}
-
-func (h *TestAnsiEventHandler) DECSTBM(top int, bottom int) error {
-	topS, bottomS := strconv.Itoa(top), strconv.Itoa(bottom)
-	h.recordCall("DECSTBM", []string{topS, bottomS})
-	return nil
-}
-
-func (h *TestAnsiEventHandler) RI() error {
-	h.recordCall("RI", nil)
-	return nil
-}
-
-func (h *TestAnsiEventHandler) IND() error {
-	h.recordCall("IND", nil)
-	return nil
-}
-
-func (h *TestAnsiEventHandler) Flush() error {
-	return nil
-}
diff --git a/vendor/github.com/NYTimes/gziphandler/gzip_go18_test.go b/vendor/github.com/NYTimes/gziphandler/gzip_go18_test.go
deleted file mode 100644
index 412b291..0000000
--- a/vendor/github.com/NYTimes/gziphandler/gzip_go18_test.go
+++ /dev/null
@@ -1,70 +0,0 @@
-// +build go1.8
-
-package gziphandler
-
-import (
-	"net/http"
-	"testing"
-
-	"github.com/stretchr/testify/assert"
-)
-
-func TestSetAcceptEncodingForPushOptionsWithoutHeaders(t *testing.T) {
-	var opts *http.PushOptions
-	opts = setAcceptEncodingForPushOptions(opts)
-
-	assert.NotNil(t, opts)
-	assert.NotNil(t, opts.Header)
-
-	for k, v := range opts.Header {
-		assert.Equal(t, "Accept-Encoding", k)
-		assert.Len(t, v, 1)
-		assert.Equal(t, "gzip", v[0])
-	}
-
-	opts = &http.PushOptions{}
-	opts = setAcceptEncodingForPushOptions(opts)
-
-	assert.NotNil(t, opts)
-	assert.NotNil(t, opts.Header)
-
-	for k, v := range opts.Header {
-		assert.Equal(t, "Accept-Encoding", k)
-		assert.Len(t, v, 1)
-		assert.Equal(t, "gzip", v[0])
-	}
-}
-
-func TestSetAcceptEncodingForPushOptionsWithHeaders(t *testing.T) {
-	opts := &http.PushOptions{
-		Header: http.Header{
-			"User-Agent": []string{"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36"},
-		},
-	}
-	opts = setAcceptEncodingForPushOptions(opts)
-
-	assert.NotNil(t, opts)
-	assert.NotNil(t, opts.Header)
-
-	assert.Equal(t, "gzip", opts.Header.Get("Accept-Encoding"))
-	assert.Equal(t, "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36", opts.Header.Get("User-Agent"))
-
-	opts = &http.PushOptions{
-		Header: http.Header{
-			"User-Agent":   []string{"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36"},
-			acceptEncoding: []string{"deflate"},
-		},
-	}
-	opts = setAcceptEncodingForPushOptions(opts)
-
-	assert.NotNil(t, opts)
-	assert.NotNil(t, opts.Header)
-
-	e, found := opts.Header["Accept-Encoding"]
-	if !found {
-		assert.Fail(t, "Missing Accept-Encoding header value")
-	}
-	assert.Len(t, e, 1)
-	assert.Equal(t, "deflate", e[0])
-	assert.Equal(t, "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36", opts.Header.Get("User-Agent"))
-}
diff --git a/vendor/github.com/NYTimes/gziphandler/gzip_test.go b/vendor/github.com/NYTimes/gziphandler/gzip_test.go
deleted file mode 100644
index 64a032a..0000000
--- a/vendor/github.com/NYTimes/gziphandler/gzip_test.go
+++ /dev/null
@@ -1,558 +0,0 @@
-package gziphandler
-
-import (
-	"bytes"
-	"compress/gzip"
-	"fmt"
-	"io"
-	"io/ioutil"
-	"net"
-	"net/http"
-	"net/http/httptest"
-	"net/url"
-	"strconv"
-	"testing"
-
-	"github.com/stretchr/testify/assert"
-)
-
-const (
-	smallTestBody = "aaabbcaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbc"
-	testBody      = "aaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbccc aaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbccc aaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbccc aaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbccc aaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbccc aaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbccc aaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbcccaaabbbccc"
-)
-
-func TestParseEncodings(t *testing.T) {
-	examples := map[string]codings{
-
-		// Examples from RFC 2616
-		"compress, gzip": {"compress": 1.0, "gzip": 1.0},
-		"":               {},
-		"*":              {"*": 1.0},
-		"compress;q=0.5, gzip;q=1.0":         {"compress": 0.5, "gzip": 1.0},
-		"gzip;q=1.0, identity; q=0.5, *;q=0": {"gzip": 1.0, "identity": 0.5, "*": 0.0},
-
-		// More random stuff
-		"AAA;q=1":     {"aaa": 1.0},
-		"BBB ; q = 2": {"bbb": 1.0},
-	}
-
-	for eg, exp := range examples {
-		act, _ := parseEncodings(eg)
-		assert.Equal(t, exp, act)
-	}
-}
-
-func TestGzipHandler(t *testing.T) {
-	// This just exists to provide something for GzipHandler to wrap.
-	handler := newTestHandler(testBody)
-
-	// requests without accept-encoding are passed along as-is
-
-	req1, _ := http.NewRequest("GET", "/whatever", nil)
-	resp1 := httptest.NewRecorder()
-	handler.ServeHTTP(resp1, req1)
-	res1 := resp1.Result()
-
-	assert.Equal(t, 200, res1.StatusCode)
-	assert.Equal(t, "", res1.Header.Get("Content-Encoding"))
-	assert.Equal(t, "Accept-Encoding", res1.Header.Get("Vary"))
-	assert.Equal(t, testBody, resp1.Body.String())
-
-	// but requests with accept-encoding:gzip are compressed if possible
-
-	req2, _ := http.NewRequest("GET", "/whatever", nil)
-	req2.Header.Set("Accept-Encoding", "gzip")
-	resp2 := httptest.NewRecorder()
-	handler.ServeHTTP(resp2, req2)
-	res2 := resp2.Result()
-
-	assert.Equal(t, 200, res2.StatusCode)
-	assert.Equal(t, "gzip", res2.Header.Get("Content-Encoding"))
-	assert.Equal(t, "Accept-Encoding", res2.Header.Get("Vary"))
-	assert.Equal(t, gzipStrLevel(testBody, gzip.DefaultCompression), resp2.Body.Bytes())
-
-	// content-type header is correctly set based on uncompressed body
-
-	req3, _ := http.NewRequest("GET", "/whatever", nil)
-	req3.Header.Set("Accept-Encoding", "gzip")
-	res3 := httptest.NewRecorder()
-	handler.ServeHTTP(res3, req3)
-
-	assert.Equal(t, http.DetectContentType([]byte(testBody)), res3.Header().Get("Content-Type"))
-}
-
-func TestGzipHandlerSmallBodyNoCompression(t *testing.T) {
-	handler := newTestHandler(smallTestBody)
-
-	req, _ := http.NewRequest("GET", "/whatever", nil)
-	req.Header.Set("Accept-Encoding", "gzip")
-	resp := httptest.NewRecorder()
-	handler.ServeHTTP(resp, req)
-	res := resp.Result()
-
-	// with less than 1400 bytes the response should not be gzipped
-
-	assert.Equal(t, 200, res.StatusCode)
-	assert.Equal(t, "", res.Header.Get("Content-Encoding"))
-	assert.Equal(t, "Accept-Encoding", res.Header.Get("Vary"))
-	assert.Equal(t, smallTestBody, resp.Body.String())
-
-}
-
-func TestGzipHandlerAlreadyCompressed(t *testing.T) {
-	handler := newTestHandler(testBody)
-
-	req, _ := http.NewRequest("GET", "/gzipped", nil)
-	req.Header.Set("Accept-Encoding", "gzip")
-	res := httptest.NewRecorder()
-	handler.ServeHTTP(res, req)
-
-	assert.Equal(t, testBody, res.Body.String())
-}
-
-func TestNewGzipLevelHandler(t *testing.T) {
-	handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
-		w.WriteHeader(http.StatusOK)
-		io.WriteString(w, testBody)
-	})
-
-	for lvl := gzip.BestSpeed; lvl <= gzip.BestCompression; lvl++ {
-		wrapper, err := NewGzipLevelHandler(lvl)
-		if !assert.Nil(t, err, "NewGzipLevleHandler returned error for level:", lvl) {
-			continue
-		}
-
-		req, _ := http.NewRequest("GET", "/whatever", nil)
-		req.Header.Set("Accept-Encoding", "gzip")
-		resp := httptest.NewRecorder()
-		wrapper(handler).ServeHTTP(resp, req)
-		res := resp.Result()
-
-		assert.Equal(t, 200, res.StatusCode)
-		assert.Equal(t, "gzip", res.Header.Get("Content-Encoding"))
-		assert.Equal(t, "Accept-Encoding", res.Header.Get("Vary"))
-		assert.Equal(t, gzipStrLevel(testBody, lvl), resp.Body.Bytes())
-	}
-}
-
-func TestNewGzipLevelHandlerReturnsErrorForInvalidLevels(t *testing.T) {
-	var err error
-	_, err = NewGzipLevelHandler(-42)
-	assert.NotNil(t, err)
-
-	_, err = NewGzipLevelHandler(42)
-	assert.NotNil(t, err)
-}
-
-func TestMustNewGzipLevelHandlerWillPanic(t *testing.T) {
-	defer func() {
-		if r := recover(); r == nil {
-			t.Error("panic was not called")
-		}
-	}()
-
-	_ = MustNewGzipLevelHandler(-42)
-}
-
-func TestGzipHandlerNoBody(t *testing.T) {
-	tests := []struct {
-		statusCode      int
-		contentEncoding string
-		bodyLen         int
-	}{
-		// Body must be empty.
-		{http.StatusNoContent, "", 0},
-		{http.StatusNotModified, "", 0},
-		// Body is going to get gzip'd no matter what.
-		{http.StatusOK, "", 0},
-	}
-
-	for num, test := range tests {
-		handler := GzipHandler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
-			w.WriteHeader(test.statusCode)
-		}))
-
-		rec := httptest.NewRecorder()
-		// TODO: in Go1.7 httptest.NewRequest was introduced this should be used
-		// once 1.6 is not longer supported.
-		req := &http.Request{
-			Method:     "GET",
-			URL:        &url.URL{Path: "/"},
-			Proto:      "HTTP/1.1",
-			ProtoMinor: 1,
-			RemoteAddr: "192.0.2.1:1234",
-			Header:     make(http.Header),
-		}
-		req.Header.Set("Accept-Encoding", "gzip")
-		handler.ServeHTTP(rec, req)
-
-		body, err := ioutil.ReadAll(rec.Body)
-		if err != nil {
-			t.Fatalf("Unexpected error reading response body: %v", err)
-		}
-
-		header := rec.Header()
-		assert.Equal(t, test.contentEncoding, header.Get("Content-Encoding"), fmt.Sprintf("for test iteration %d", num))
-		assert.Equal(t, "Accept-Encoding", header.Get("Vary"), fmt.Sprintf("for test iteration %d", num))
-		assert.Equal(t, test.bodyLen, len(body), fmt.Sprintf("for test iteration %d", num))
-	}
-}
-
-func TestGzipHandlerContentLength(t *testing.T) {
-	b := []byte(testBody)
-	handler := GzipHandler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
-		w.Header().Set("Content-Length", strconv.Itoa(len(b)))
-		w.Write(b)
-	}))
-	// httptest.NewRecorder doesn't give you access to the Content-Length
-	// header so instead, we create a server on a random port and make
-	// a request to that instead
-	ln, err := net.Listen("tcp", "127.0.0.1:")
-	if err != nil {
-		t.Fatalf("failed creating listen socket: %v", err)
-	}
-	defer ln.Close()
-	srv := &http.Server{
-		Handler: handler,
-	}
-	go srv.Serve(ln)
-
-	req := &http.Request{
-		Method: "GET",
-		URL:    &url.URL{Path: "/", Scheme: "http", Host: ln.Addr().String()},
-		Header: make(http.Header),
-		Close:  true,
-	}
-	req.Header.Set("Accept-Encoding", "gzip")
-	res, err := http.DefaultClient.Do(req)
-	if err != nil {
-		t.Fatalf("Unexpected error making http request: %v", err)
-	}
-	defer res.Body.Close()
-
-	body, err := ioutil.ReadAll(res.Body)
-	if err != nil {
-		t.Fatalf("Unexpected error reading response body: %v", err)
-	}
-
-	l, err := strconv.Atoi(res.Header.Get("Content-Length"))
-	if err != nil {
-		t.Fatalf("Unexpected error parsing Content-Length: %v", err)
-	}
-	assert.Len(t, body, l)
-	assert.Equal(t, "gzip", res.Header.Get("Content-Encoding"))
-	assert.NotEqual(t, b, body)
-}
-
-func TestGzipHandlerMinSizeMustBePositive(t *testing.T) {
-	_, err := NewGzipLevelAndMinSize(gzip.DefaultCompression, -1)
-	assert.Error(t, err)
-}
-
-func TestGzipHandlerMinSize(t *testing.T) {
-	responseLength := 0
-	b := []byte{'x'}
-
-	wrapper, _ := NewGzipLevelAndMinSize(gzip.DefaultCompression, 128)
-	handler := wrapper(http.HandlerFunc(
-		func(w http.ResponseWriter, r *http.Request) {
-			// Write responses one byte at a time to ensure that the flush
-			// mechanism, if used, is working properly.
-			for i := 0; i < responseLength; i++ {
-				n, err := w.Write(b)
-				assert.Equal(t, 1, n)
-				assert.Nil(t, err)
-			}
-		},
-	))
-
-	r, _ := http.NewRequest("GET", "/whatever", &bytes.Buffer{})
-	r.Header.Add("Accept-Encoding", "gzip")
-
-	// Short response is not compressed
-	responseLength = 127
-	w := httptest.NewRecorder()
-	handler.ServeHTTP(w, r)
-	if w.Result().Header.Get(contentEncoding) == "gzip" {
-		t.Error("Expected uncompressed response, got compressed")
-	}
-
-	// Long response is not compressed
-	responseLength = 128
-	w = httptest.NewRecorder()
-	handler.ServeHTTP(w, r)
-	if w.Result().Header.Get(contentEncoding) != "gzip" {
-		t.Error("Expected compressed response, got uncompressed")
-	}
-}
-
-func TestGzipDoubleClose(t *testing.T) {
-	// reset the pool for the default compression so we can make sure duplicates
-	// aren't added back by double close
-	addLevelPool(gzip.DefaultCompression)
-
-	handler := GzipHandler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
-		// call close here and it'll get called again interally by
-		// NewGzipLevelHandler's handler defer
-		w.Write([]byte("test"))
-		w.(io.Closer).Close()
-	}))
-
-	r := httptest.NewRequest("GET", "/", nil)
-	r.Header.Set("Accept-Encoding", "gzip")
-	w := httptest.NewRecorder()
-	handler.ServeHTTP(w, r)
-
-	// the second close shouldn't have added the same writer
-	// so we pull out 2 writers from the pool and make sure they're different
-	w1 := gzipWriterPools[poolIndex(gzip.DefaultCompression)].Get()
-	w2 := gzipWriterPools[poolIndex(gzip.DefaultCompression)].Get()
-	// assert.NotEqual looks at the value and not the address, so we use regular ==
-	assert.False(t, w1 == w2)
-}
-
-func TestStatusCodes(t *testing.T) {
-	handler := GzipHandler(http.NotFoundHandler())
-	r := httptest.NewRequest("GET", "/", nil)
-	r.Header.Set("Accept-Encoding", "gzip")
-	w := httptest.NewRecorder()
-	handler.ServeHTTP(w, r)
-
-	result := w.Result()
-	if result.StatusCode != 404 {
-		t.Errorf("StatusCode should have been 404 but was %d", result.StatusCode)
-	}
-}
-
-func TestFlushBeforeWrite(t *testing.T) {
-	b := []byte(testBody)
-	handler := GzipHandler(http.HandlerFunc(func(rw http.ResponseWriter, req *http.Request) {
-		rw.WriteHeader(http.StatusNotFound)
-		rw.(http.Flusher).Flush()
-		rw.Write(b)
-	}))
-	r := httptest.NewRequest(http.MethodGet, "/", nil)
-	r.Header.Set("Accept-Encoding", "gzip")
-	w := httptest.NewRecorder()
-	handler.ServeHTTP(w, r)
-
-	res := w.Result()
-	assert.Equal(t, http.StatusNotFound, res.StatusCode)
-	assert.Equal(t, "gzip", res.Header.Get("Content-Encoding"))
-	assert.NotEqual(t, b, w.Body.Bytes())
-}
-
-func TestImplementCloseNotifier(t *testing.T) {
-	request := httptest.NewRequest(http.MethodGet, "/", nil)
-	request.Header.Set(acceptEncoding, "gzip")
-	GzipHandler(http.HandlerFunc(func(rw http.ResponseWriter, req *http.Request){
-		_, ok := rw.(http.CloseNotifier)
-		assert.True(t, ok, "response writer must implement http.CloseNotifier")
-	})).ServeHTTP(&mockRWCloseNotify{}, request)
-}
-
-func TestImplementFlusherAndCloseNotifier(t *testing.T) {
-	request := httptest.NewRequest(http.MethodGet, "/", nil)
-	request.Header.Set(acceptEncoding, "gzip")
-	GzipHandler(http.HandlerFunc(func(rw http.ResponseWriter, req *http.Request){
-		_, okCloseNotifier := rw.(http.CloseNotifier)
-		assert.True(t, okCloseNotifier, "response writer must implement http.CloseNotifier")
-		_, okFlusher := rw.(http.Flusher)
-		assert.True(t, okFlusher, "response writer must implement http.Flusher")
-	})).ServeHTTP(&mockRWCloseNotify{}, request)
-}
-
-func TestNotImplementCloseNotifier(t *testing.T) {
-	request := httptest.NewRequest(http.MethodGet, "/", nil)
-	request.Header.Set(acceptEncoding, "gzip")
-	GzipHandler(http.HandlerFunc(func(rw http.ResponseWriter, req *http.Request){
-		_, ok := rw.(http.CloseNotifier)
-		assert.False(t, ok, "response writer must not implement http.CloseNotifier")
-	})).ServeHTTP(httptest.NewRecorder(), request)
-}
-
-
-type mockRWCloseNotify struct{}
-
-func (m *mockRWCloseNotify) CloseNotify() <-chan bool {
-	panic("implement me")
-}
-
-func (m *mockRWCloseNotify) Header() http.Header {
-	return http.Header{}
-}
-
-func (m *mockRWCloseNotify) Write([]byte) (int, error) {
-	panic("implement me")
-}
-
-func (m *mockRWCloseNotify) WriteHeader(int) {
-	panic("implement me")
-}
-
-
-func TestIgnoreSubsequentWriteHeader(t *testing.T) {
-	handler := GzipHandler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
-		w.WriteHeader(500)
-		w.WriteHeader(404)
-	}))
-	r := httptest.NewRequest("GET", "/", nil)
-	r.Header.Set("Accept-Encoding", "gzip")
-	w := httptest.NewRecorder()
-	handler.ServeHTTP(w, r)
-
-	result := w.Result()
-	if result.StatusCode != 500 {
-		t.Errorf("StatusCode should have been 500 but was %d", result.StatusCode)
-	}
-}
-
-func TestDontWriteWhenNotWrittenTo(t *testing.T) {
-	// When using gzip as middleware without ANY writes in the handler,
-	// ensure the gzip middleware doesn't touch the actual ResponseWriter
-	// either.
-
-	handler0 := GzipHandler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
-	}))
-
-	handler1 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
-		handler0.ServeHTTP(w, r)
-		w.WriteHeader(404) // this only works if gzip didn't do a WriteHeader(200)
-	})
-
-	r := httptest.NewRequest("GET", "/", nil)
-	r.Header.Set("Accept-Encoding", "gzip")
-	w := httptest.NewRecorder()
-	handler1.ServeHTTP(w, r)
-
-	result := w.Result()
-	if result.StatusCode != 404 {
-		t.Errorf("StatusCode should have been 404 but was %d", result.StatusCode)
-	}
-}
-
-var contentTypeTests = []struct {
-	name                 string
-	contentType          string
-	acceptedContentTypes []string
-	expectedGzip         bool
-}{
-	{
-		name:                 "Always gzip when content types are empty",
-		contentType:          "",
-		acceptedContentTypes: []string{},
-		expectedGzip:         true,
-	},
-	{
-		name:                 "Exact content-type match",
-		contentType:          "application/json",
-		acceptedContentTypes: []string{"application/json"},
-		expectedGzip:         true,
-	},
-	{
-		name:                 "Case insensitive content-type matching",
-		contentType:          "Application/Json",
-		acceptedContentTypes: []string{"application/json"},
-		expectedGzip:         true,
-	},
-	{
-		name:                 "Non-matching content-type",
-		contentType:          "text/xml",
-		acceptedContentTypes: []string{"application/json"},
-		expectedGzip:         false,
-	},
-}
-
-func TestContentTypes(t *testing.T) {
-	for _, tt := range contentTypeTests {
-		handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
-			w.WriteHeader(http.StatusOK)
-			w.Header().Set("Content-Type", tt.contentType)
-			io.WriteString(w, testBody)
-		})
-
-		wrapper, err := GzipHandlerWithOpts(ContentTypes(tt.acceptedContentTypes))
-		if !assert.Nil(t, err, "NewGzipHandlerWithOpts returned error", tt.name) {
-			continue
-		}
-
-		req, _ := http.NewRequest("GET", "/whatever", nil)
-		req.Header.Set("Accept-Encoding", "gzip")
-		resp := httptest.NewRecorder()
-		wrapper(handler).ServeHTTP(resp, req)
-		res := resp.Result()
-
-		assert.Equal(t, 200, res.StatusCode)
-		if tt.expectedGzip {
-			assert.Equal(t, "gzip", res.Header.Get("Content-Encoding"), tt.name)
-		} else {
-			assert.NotEqual(t, "gzip", res.Header.Get("Content-Encoding"), tt.name)
-		}
-	}
-}
-
-// --------------------------------------------------------------------
-
-func BenchmarkGzipHandler_S2k(b *testing.B)   { benchmark(b, false, 2048) }
-func BenchmarkGzipHandler_S20k(b *testing.B)  { benchmark(b, false, 20480) }
-func BenchmarkGzipHandler_S100k(b *testing.B) { benchmark(b, false, 102400) }
-func BenchmarkGzipHandler_P2k(b *testing.B)   { benchmark(b, true, 2048) }
-func BenchmarkGzipHandler_P20k(b *testing.B)  { benchmark(b, true, 20480) }
-func BenchmarkGzipHandler_P100k(b *testing.B) { benchmark(b, true, 102400) }
-
-// --------------------------------------------------------------------
-
-func gzipStrLevel(s string, lvl int) []byte {
-	var b bytes.Buffer
-	w, _ := gzip.NewWriterLevel(&b, lvl)
-	io.WriteString(w, s)
-	w.Close()
-	return b.Bytes()
-}
-
-func benchmark(b *testing.B, parallel bool, size int) {
-	bin, err := ioutil.ReadFile("testdata/benchmark.json")
-	if err != nil {
-		b.Fatal(err)
-	}
-
-	req, _ := http.NewRequest("GET", "/whatever", nil)
-	req.Header.Set("Accept-Encoding", "gzip")
-	handler := newTestHandler(string(bin[:size]))
-
-	if parallel {
-		b.ResetTimer()
-		b.RunParallel(func(pb *testing.PB) {
-			for pb.Next() {
-				runBenchmark(b, req, handler)
-			}
-		})
-	} else {
-		b.ResetTimer()
-		for i := 0; i < b.N; i++ {
-			runBenchmark(b, req, handler)
-		}
-	}
-}
-
-func runBenchmark(b *testing.B, req *http.Request, handler http.Handler) {
-	res := httptest.NewRecorder()
-	handler.ServeHTTP(res, req)
-	if code := res.Code; code != 200 {
-		b.Fatalf("Expected 200 but got %d", code)
-	} else if blen := res.Body.Len(); blen < 500 {
-		b.Fatalf("Expected complete response body, but got %d bytes", blen)
-	}
-}
-
-func newTestHandler(body string) http.Handler {
-	return GzipHandler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
-		switch r.URL.Path {
-		case "/gzipped":
-			w.Header().Set("Content-Encoding", "gzip")
-			io.WriteString(w, body)
-		default:
-			io.WriteString(w, body)
-		}
-	}))
-}
diff --git a/vendor/github.com/NYTimes/gziphandler/testdata/benchmark.json b/vendor/github.com/NYTimes/gziphandler/testdata/benchmark.json
deleted file mode 100644
index d9180d6..0000000
--- a/vendor/github.com/NYTimes/gziphandler/testdata/benchmark.json
+++ /dev/null
@@ -1,5456 +0,0 @@
-[
-  {
-    "_id": "55d2fc86da7c3f96f90aa005",
-    "age": 20,
-    "name": "Luann Grant",
-    "gender": "female",
-    "company": "ZOGAK",
-    "email": "luanngrant@zogak.com",
-    "phone": "+1 (915) 479-2908"
-  },
-  {
-    "_id": "55d2fc8653953bc9a0958a92",
-    "age": 34,
-    "name": "Sanders Gonzalez",
-    "gender": "male",
-    "company": "PIVITOL",
-    "email": "sandersgonzalez@pivitol.com",
-    "phone": "+1 (914) 563-2007"
-  },
-  {
-    "_id": "55d2fc86a38634b0954fe3c0",
-    "age": 26,
-    "name": "Compton Terry",
-    "gender": "male",
-    "company": "KOZGENE",
-    "email": "comptonterry@kozgene.com",
-    "phone": "+1 (812) 558-2536"
-  },
-  {
-    "_id": "55d2fc86edf1be88253e4e2e",
-    "age": 29,
-    "name": "Erma Armstrong",
-    "gender": "female",
-    "company": "DYNO",
-    "email": "ermaarmstrong@dyno.com",
-    "phone": "+1 (811) 556-3980"
-  },
-  {
-    "_id": "55d2fc86bee1bf1f233f8170",
-    "age": 20,
-    "name": "Carson Garcia",
-    "gender": "male",
-    "company": "JUNIPOOR",
-    "email": "carsongarcia@junipoor.com",
-    "phone": "+1 (820) 410-3221"
-  },
-  {
-    "_id": "55d2fc864810db4a3738dea8",
-    "age": 38,
-    "name": "Henson Townsend",
-    "gender": "male",
-    "company": "OVIUM",
-    "email": "hensontownsend@ovium.com",
-    "phone": "+1 (982) 412-3108"
-  },
-  {
-    "_id": "55d2fc86d714d77af8ed3fe4",
-    "age": 34,
-    "name": "Yesenia Garner",
-    "gender": "female",
-    "company": "TERRAGO",
-    "email": "yeseniagarner@terrago.com",
-    "phone": "+1 (878) 561-2314"
-  },
-  {
-    "_id": "55d2fc867651311b2e11925a",
-    "age": 31,
-    "name": "Rachelle Stanton",
-    "gender": "female",
-    "company": "UNISURE",
-    "email": "rachellestanton@unisure.com",
-    "phone": "+1 (961) 504-3072"
-  },
-  {
-    "_id": "55d2fc866415f6c03d5228eb",
-    "age": 30,
-    "name": "Franklin Rasmussen",
-    "gender": "male",
-    "company": "CAPSCREEN",
-    "email": "franklinrasmussen@capscreen.com",
-    "phone": "+1 (886) 525-2217"
-  },
-  {
-    "_id": "55d2fc86e2e0fa5f81fe5279",
-    "age": 32,
-    "name": "Fischer Humphrey",
-    "gender": "male",
-    "company": "ATGEN",
-    "email": "fischerhumphrey@atgen.com",
-    "phone": "+1 (855) 424-3693"
-  },
-  {
-    "_id": "55d2fc862c2a416777837c76",
-    "age": 29,
-    "name": "Olsen Moran",
-    "gender": "male",
-    "company": "SULTRAX",
-    "email": "olsenmoran@sultrax.com",
-    "phone": "+1 (860) 583-3380"
-  },
-  {
-    "_id": "55d2fc868c3c9e44d59ec2a2",
-    "age": 29,
-    "name": "Mattie Myers",
-    "gender": "female",
-    "company": "VALPREAL",
-    "email": "mattiemyers@valpreal.com",
-    "phone": "+1 (834) 587-2707"
-  },
-  {
-    "_id": "55d2fc860a6afc8beebe477d",
-    "age": 39,
-    "name": "Cleveland Jordan",
-    "gender": "male",
-    "company": "XLEEN",
-    "email": "clevelandjordan@xleen.com",
-    "phone": "+1 (848) 449-2037"
-  },
-  {
-    "_id": "55d2fc8605766af1b531b5ea",
-    "age": 35,
-    "name": "Gordon Rios",
-    "gender": "male",
-    "company": "BULLZONE",
-    "email": "gordonrios@bullzone.com",
-    "phone": "+1 (882) 436-2216"
-  },
-  {
-    "_id": "55d2fc86e052bfb7cf9b5a38",
-    "age": 33,
-    "name": "Todd Burch",
-    "gender": "male",
-    "company": "MOTOVATE",
-    "email": "toddburch@motovate.com",
-    "phone": "+1 (911) 470-2129"
-  },
-  {
-    "_id": "55d2fc86212924928b4112d6",
-    "age": 31,
-    "name": "Autumn Strong",
-    "gender": "female",
-    "company": "NURPLEX",
-    "email": "autumnstrong@nurplex.com",
-    "phone": "+1 (827) 483-2571"
-  },
-  {
-    "_id": "55d2fc86286c9bc87359e326",
-    "age": 27,
-    "name": "Rochelle Fitzgerald",
-    "gender": "female",
-    "company": "RAMEON",
-    "email": "rochellefitzgerald@rameon.com",
-    "phone": "+1 (820) 402-3411"
-  },
-  {
-    "_id": "55d2fc86511439244d21c569",
-    "age": 24,
-    "name": "Perry Hopkins",
-    "gender": "male",
-    "company": "KRAGGLE",
-    "email": "perryhopkins@kraggle.com",
-    "phone": "+1 (826) 469-3928"
-  },
-  {
-    "_id": "55d2fc868b8652b54c66051c",
-    "age": 37,
-    "name": "Guzman Williamson",
-    "gender": "male",
-    "company": "OCTOCORE",
-    "email": "guzmanwilliamson@octocore.com",
-    "phone": "+1 (826) 529-3380"
-  },
-  {
-    "_id": "55d2fc86f16a5a4c310483df",
-    "age": 28,
-    "name": "Sheri Thompson",
-    "gender": "female",
-    "company": "AUTOGRATE",
-    "email": "sherithompson@autograte.com",
-    "phone": "+1 (942) 463-2727"
-  },
-  {
-    "_id": "55d2fc86675d3040fc35daa8",
-    "age": 24,
-    "name": "Walton Macdonald",
-    "gender": "male",
-    "company": "ZIZZLE",
-    "email": "waltonmacdonald@zizzle.com",
-    "phone": "+1 (990) 510-2656"
-  },
-  {
-    "_id": "55d2fc864e90e236f9e5a174",
-    "age": 39,
-    "name": "Gwendolyn Ross",
-    "gender": "female",
-    "company": "XIIX",
-    "email": "gwendolynross@xiix.com",
-    "phone": "+1 (869) 565-2774"
-  },
-  {
-    "_id": "55d2fc866f306c575a36cb97",
-    "age": 23,
-    "name": "Sexton Herring",
-    "gender": "male",
-    "company": "MEDIOT",
-    "email": "sextonherring@mediot.com",
-    "phone": "+1 (935) 510-2049"
-  },
-  {
-    "_id": "55d2fc867526db78550711a3",
-    "age": 26,
-    "name": "Twila Vang",
-    "gender": "female",
-    "company": "ARCTIQ",
-    "email": "twilavang@arctiq.com",
-    "phone": "+1 (979) 429-2135"
-  },
-  {
-    "_id": "55d2fc86fe5e24c1b4b0dc96",
-    "age": 26,
-    "name": "Marjorie Snider",
-    "gender": "female",
-    "company": "QUARX",
-    "email": "marjoriesnider@quarx.com",
-    "phone": "+1 (913) 469-2916"
-  },
-  {
-    "_id": "55d2fc861e85e0104fa7d33e",
-    "age": 36,
-    "name": "Malone Diaz",
-    "gender": "male",
-    "company": "COMVEYOR",
-    "email": "malonediaz@comveyor.com",
-    "phone": "+1 (882) 541-3306"
-  },
-  {
-    "_id": "55d2fc86bc04a4fa0a338403",
-    "age": 39,
-    "name": "Amelia Sanford",
-    "gender": "female",
-    "company": "IPLAX",
-    "email": "ameliasanford@iplax.com",
-    "phone": "+1 (872) 589-3509"
-  },
-  {
-    "_id": "55d2fc86f7854f672e80c1dd",
-    "age": 27,
-    "name": "Kristie Fernandez",
-    "gender": "female",
-    "company": "RONBERT",
-    "email": "kristiefernandez@ronbert.com",
-    "phone": "+1 (983) 419-3564"
-  },
-  {
-    "_id": "55d2fc867faa140f152b7229",
-    "age": 23,
-    "name": "Bray Wyatt",
-    "gender": "male",
-    "company": "DEMINIMUM",
-    "email": "braywyatt@deminimum.com",
-    "phone": "+1 (943) 485-3961"
-  },
-  {
-    "_id": "55d2fc863a42779d68c0dd53",
-    "age": 36,
-    "name": "Meyer Pickett",
-    "gender": "male",
-    "company": "GENEKOM",
-    "email": "meyerpickett@genekom.com",
-    "phone": "+1 (999) 534-3038"
-  },
-  {
-    "_id": "55d2fc86095f5ceb3c57efeb",
-    "age": 22,
-    "name": "Carlson Ramirez",
-    "gender": "male",
-    "company": "KANGLE",
-    "email": "carlsonramirez@kangle.com",
-    "phone": "+1 (972) 590-3152"
-  },
-  {
-    "_id": "55d2fc868036a76e42f30954",
-    "age": 24,
-    "name": "Roth Murray",
-    "gender": "male",
-    "company": "DEEPENDS",
-    "email": "rothmurray@deepends.com",
-    "phone": "+1 (944) 408-2208"
-  },
-  {
-    "_id": "55d2fc8688ac278604ea592b",
-    "age": 24,
-    "name": "Cecelia Lambert",
-    "gender": "female",
-    "company": "SLOFAST",
-    "email": "cecelialambert@slofast.com",
-    "phone": "+1 (907) 485-2284"
-  },
-  {
-    "_id": "55d2fc86b05fc3906ce838a2",
-    "age": 31,
-    "name": "Leah Ferguson",
-    "gender": "female",
-    "company": "NEBULEAN",
-    "email": "leahferguson@nebulean.com",
-    "phone": "+1 (883) 574-2101"
-  },
-  {
-    "_id": "55d2fc86d21f9d73f11076b9",
-    "age": 28,
-    "name": "Therese Mueller",
-    "gender": "female",
-    "company": "STEELFAB",
-    "email": "theresemueller@steelfab.com",
-    "phone": "+1 (920) 485-2265"
-  },
-  {
-    "_id": "55d2fc866254f87d0389dc98",
-    "age": 32,
-    "name": "Wanda Byrd",
-    "gender": "female",
-    "company": "HOTCAKES",
-    "email": "wandabyrd@hotcakes.com",
-    "phone": "+1 (893) 579-3658"
-  },
-  {
-    "_id": "55d2fc868cf04450063aba0e",
-    "age": 25,
-    "name": "Felecia Mccall",
-    "gender": "female",
-    "company": "GINK",
-    "email": "feleciamccall@gink.com",
-    "phone": "+1 (848) 486-3047"
-  },
-  {
-    "_id": "55d2fc86e0ee0341850d35ab",
-    "age": 37,
-    "name": "Goldie Stafford",
-    "gender": "female",
-    "company": "FIREWAX",
-    "email": "goldiestafford@firewax.com",
-    "phone": "+1 (831) 507-3578"
-  },
-  {
-    "_id": "55d2fc868acfa20489a61720",
-    "age": 20,
-    "name": "Amy Patterson",
-    "gender": "female",
-    "company": "KNEEDLES",
-    "email": "amypatterson@kneedles.com",
-    "phone": "+1 (950) 478-3558"
-  },
-  {
-    "_id": "55d2fc8680c104681b074336",
-    "age": 29,
-    "name": "Robles Alford",
-    "gender": "male",
-    "company": "TALENDULA",
-    "email": "roblesalford@talendula.com",
-    "phone": "+1 (813) 424-3650"
-  },
-  {
-    "_id": "55d2fc86faeb57024907ea70",
-    "age": 28,
-    "name": "Adkins Hampton",
-    "gender": "male",
-    "company": "SYNKGEN",
-    "email": "adkinshampton@synkgen.com",
-    "phone": "+1 (974) 522-2517"
-  },
-  {
-    "_id": "55d2fc866ba878e18ee65c0f",
-    "age": 32,
-    "name": "Bernadine Trevino",
-    "gender": "female",
-    "company": "EVENTEX",
-    "email": "bernadinetrevino@eventex.com",
-    "phone": "+1 (914) 577-2655"
-  },
-  {
-    "_id": "55d2fc86524364ec8cb2d0c7",
-    "age": 38,
-    "name": "Robin Le",
-    "gender": "female",
-    "company": "GALLAXIA",
-    "email": "robinle@gallaxia.com",
-    "phone": "+1 (821) 472-2416"
-  },
-  {
-    "_id": "55d2fc86c53dc98dacabc399",
-    "age": 23,
-    "name": "Leanna Hicks",
-    "gender": "female",
-    "company": "ZEROLOGY",
-    "email": "leannahicks@zerology.com",
-    "phone": "+1 (946) 531-3368"
-  },
-  {
-    "_id": "55d2fc86e293b8cfb2d1a5bd",
-    "age": 31,
-    "name": "Herman Bridges",
-    "gender": "male",
-    "company": "DADABASE",
-    "email": "hermanbridges@dadabase.com",
-    "phone": "+1 (836) 408-3169"
-  },
-  {
-    "_id": "55d2fc865dfc0cc61ec50b41",
-    "age": 30,
-    "name": "Olive Terrell",
-    "gender": "female",
-    "company": "ACCRUEX",
-    "email": "oliveterrell@accruex.com",
-    "phone": "+1 (837) 573-2059"
-  },
-  {
-    "_id": "55d2fc8669dc78cdeb374ff5",
-    "age": 26,
-    "name": "Miranda Banks",
-    "gender": "female",
-    "company": "GEOFARM",
-    "email": "mirandabanks@geofarm.com",
-    "phone": "+1 (984) 574-2877"
-  },
-  {
-    "_id": "55d2fc86f471f565df37a756",
-    "age": 31,
-    "name": "Noelle Wolf",
-    "gender": "female",
-    "company": "ENDIPINE",
-    "email": "noellewolf@endipine.com",
-    "phone": "+1 (880) 548-2427"
-  },
-  {
-    "_id": "55d2fc8603e133136e5ca325",
-    "age": 38,
-    "name": "Amber Klein",
-    "gender": "female",
-    "company": "ISOPLEX",
-    "email": "amberklein@isoplex.com",
-    "phone": "+1 (853) 548-3856"
-  },
-  {
-    "_id": "55d2fc86962b00cfd86e9d8d",
-    "age": 32,
-    "name": "Jodie Mcclain",
-    "gender": "female",
-    "company": "BESTO",
-    "email": "jodiemcclain@besto.com",
-    "phone": "+1 (857) 417-2691"
-  },
-  {
-    "_id": "55d2fc8622eaf8052986a5bb",
-    "age": 35,
-    "name": "Margo Melendez",
-    "gender": "female",
-    "company": "KLUGGER",
-    "email": "margomelendez@klugger.com",
-    "phone": "+1 (823) 445-3570"
-  },
-  {
-    "_id": "55d2fc861e37cd298741e801",
-    "age": 37,
-    "name": "Castaneda Dudley",
-    "gender": "male",
-    "company": "URBANSHEE",
-    "email": "castanedadudley@urbanshee.com",
-    "phone": "+1 (865) 449-2445"
-  },
-  {
-    "_id": "55d2fc86e4c07ff933f7b531",
-    "age": 40,
-    "name": "Sherman Combs",
-    "gender": "male",
-    "company": "GRACKER",
-    "email": "shermancombs@gracker.com",
-    "phone": "+1 (817) 472-2316"
-  },
-  {
-    "_id": "55d2fc86c4613e0a622727e6",
-    "age": 31,
-    "name": "Louise Nichols",
-    "gender": "female",
-    "company": "SPORTAN",
-    "email": "louisenichols@sportan.com",
-    "phone": "+1 (823) 543-2230"
-  },
-  {
-    "_id": "55d2fc86d40dd218587cc632",
-    "age": 29,
-    "name": "Daniels Jacobs",
-    "gender": "male",
-    "company": "CALCULA",
-    "email": "danielsjacobs@calcula.com",
-    "phone": "+1 (979) 448-2244"
-  },
-  {
-    "_id": "55d2fc86b44f3ec927f3b2e1",
-    "age": 22,
-    "name": "Cristina Crosby",
-    "gender": "female",
-    "company": "PHUEL",
-    "email": "cristinacrosby@phuel.com",
-    "phone": "+1 (816) 504-3557"
-  },
-  {
-    "_id": "55d2fc86ba635f5436325487",
-    "age": 23,
-    "name": "Tisha Sawyer",
-    "gender": "female",
-    "company": "IMAGEFLOW",
-    "email": "tishasawyer@imageflow.com",
-    "phone": "+1 (894) 551-2933"
-  },
-  {
-    "_id": "55d2fc8640e8af981a47216a",
-    "age": 32,
-    "name": "Janice Graham",
-    "gender": "female",
-    "company": "PYRAMIS",
-    "email": "janicegraham@pyramis.com",
-    "phone": "+1 (986) 409-2529"
-  },
-  {
-    "_id": "55d2fc86cdbe80c5cb184731",
-    "age": 22,
-    "name": "Holman Joyce",
-    "gender": "male",
-    "company": "VERTON",
-    "email": "holmanjoyce@verton.com",
-    "phone": "+1 (955) 445-2054"
-  },
-  {
-    "_id": "55d2fc860f70e0d0890e8e47",
-    "age": 21,
-    "name": "Webb Sears",
-    "gender": "male",
-    "company": "ENQUILITY",
-    "email": "webbsears@enquility.com",
-    "phone": "+1 (961) 406-3600"
-  },
-  {
-    "_id": "55d2fc86150c8385661fde6f",
-    "age": 29,
-    "name": "Bush Farrell",
-    "gender": "male",
-    "company": "ENDICIL",
-    "email": "bushfarrell@endicil.com",
-    "phone": "+1 (894) 550-2963"
-  },
-  {
-    "_id": "55d2fc862e2f1ca9662b03e3",
-    "age": 36,
-    "name": "Gay Walters",
-    "gender": "male",
-    "company": "ZENSURE",
-    "email": "gaywalters@zensure.com",
-    "phone": "+1 (859) 467-3816"
-  },
-  {
-    "_id": "55d2fc86da1249ca6d3a068f",
-    "age": 33,
-    "name": "Marquez Palmer",
-    "gender": "male",
-    "company": "TURNLING",
-    "email": "marquezpalmer@turnling.com",
-    "phone": "+1 (878) 522-3859"
-  },
-  {
-    "_id": "55d2fc86a61a66a69db5c8a9",
-    "age": 29,
-    "name": "Huber Parrish",
-    "gender": "male",
-    "company": "DELPHIDE",
-    "email": "huberparrish@delphide.com",
-    "phone": "+1 (947) 406-3267"
-  },
-  {
-    "_id": "55d2fc86fff10fda8f106c2a",
-    "age": 22,
-    "name": "Foreman Cohen",
-    "gender": "male",
-    "company": "TROPOLIS",
-    "email": "foremancohen@tropolis.com",
-    "phone": "+1 (802) 409-2459"
-  },
-  {
-    "_id": "55d2fc8632b185024494802d",
-    "age": 31,
-    "name": "Kathryn Peterson",
-    "gender": "female",
-    "company": "PROSURE",
-    "email": "kathrynpeterson@prosure.com",
-    "phone": "+1 (811) 531-3085"
-  },
-  {
-    "_id": "55d2fc86f8e11410bb5b8e88",
-    "age": 34,
-    "name": "Aisha Duke",
-    "gender": "female",
-    "company": "APPLICA",
-    "email": "aishaduke@applica.com",
-    "phone": "+1 (977) 438-2754"
-  },
-  {
-    "_id": "55d2fc86190a0097728af887",
-    "age": 37,
-    "name": "Maynard Henderson",
-    "gender": "male",
-    "company": "ILLUMITY",
-    "email": "maynardhenderson@illumity.com",
-    "phone": "+1 (832) 472-2261"
-  },
-  {
-    "_id": "55d2fc86d298e6e1cf9332df",
-    "age": 33,
-    "name": "Villarreal Santiago",
-    "gender": "male",
-    "company": "QUAILCOM",
-    "email": "villarrealsantiago@quailcom.com",
-    "phone": "+1 (981) 422-2572"
-  },
-  {
-    "_id": "55d2fc86b7eb3b9ed01fc186",
-    "age": 30,
-    "name": "Diaz Allison",
-    "gender": "male",
-    "company": "ISOSTREAM",
-    "email": "diazallison@isostream.com",
-    "phone": "+1 (883) 530-2186"
-  },
-  {
-    "_id": "55d2fc86da92ac006d69c236",
-    "age": 20,
-    "name": "Kirkland Mccullough",
-    "gender": "male",
-    "company": "ADORNICA",
-    "email": "kirklandmccullough@adornica.com",
-    "phone": "+1 (950) 556-3562"
-  },
-  {
-    "_id": "55d2fc86195f59929397f2fc",
-    "age": 32,
-    "name": "Dolores Howard",
-    "gender": "female",
-    "company": "ZINCA",
-    "email": "doloreshoward@zinca.com",
-    "phone": "+1 (904) 450-2101"
-  },
-  {
-    "_id": "55d2fc860c9f707c22eaca7c",
-    "age": 26,
-    "name": "Mills Gamble",
-    "gender": "male",
-    "company": "BLEEKO",
-    "email": "millsgamble@bleeko.com",
-    "phone": "+1 (942) 402-2630"
-  },
-  {
-    "_id": "55d2fc86b539183079fcab65",
-    "age": 35,
-    "name": "Walls Dotson",
-    "gender": "male",
-    "company": "GRUPOLI",
-    "email": "wallsdotson@grupoli.com",
-    "phone": "+1 (979) 477-3065"
-  },
-  {
-    "_id": "55d2fc866377b14a737261c3",
-    "age": 29,
-    "name": "Hannah Coleman",
-    "gender": "female",
-    "company": "COMCUR",
-    "email": "hannahcoleman@comcur.com",
-    "phone": "+1 (944) 595-2415"
-  },
-  {
-    "_id": "55d2fc867b77f0e8d5f08276",
-    "age": 25,
-    "name": "Kinney Oneill",
-    "gender": "male",
-    "company": "ELPRO",
-    "email": "kinneyoneill@elpro.com",
-    "phone": "+1 (851) 570-2363"
-  },
-  {
-    "_id": "55d2fc868745f5f71578624c",
-    "age": 32,
-    "name": "Bennett Henson",
-    "gender": "male",
-    "company": "ZISIS",
-    "email": "bennetthenson@zisis.com",
-    "phone": "+1 (958) 584-2257"
-  },
-  {
-    "_id": "55d2fc8604d1e7576b1a83fb",
-    "age": 32,
-    "name": "Ross Chavez",
-    "gender": "male",
-    "company": "DUOFLEX",
-    "email": "rosschavez@duoflex.com",
-    "phone": "+1 (890) 556-2052"
-  },
-  {
-    "_id": "55d2fc86bd556093136802dd",
-    "age": 26,
-    "name": "Raymond Rutledge",
-    "gender": "male",
-    "company": "BUNGA",
-    "email": "raymondrutledge@bunga.com",
-    "phone": "+1 (994) 504-2118"
-  },
-  {
-    "_id": "55d2fc86a122c7d89560c130",
-    "age": 31,
-    "name": "Rosemary Larsen",
-    "gender": "female",
-    "company": "EXOPLODE",
-    "email": "rosemarylarsen@exoplode.com",
-    "phone": "+1 (864) 558-3569"
-  },
-  {
-    "_id": "55d2fc86dd3fe9ea62fdbea1",
-    "age": 27,
-    "name": "Tara Roth",
-    "gender": "female",
-    "company": "GAPTEC",
-    "email": "tararoth@gaptec.com",
-    "phone": "+1 (893) 531-2962"
-  },
-  {
-    "_id": "55d2fc866f372ca411cd425d",
-    "age": 30,
-    "name": "Ronda Sheppard",
-    "gender": "female",
-    "company": "GREEKER",
-    "email": "rondasheppard@greeker.com",
-    "phone": "+1 (963) 569-2851"
-  },
-  {
-    "_id": "55d2fc860a0dc369ac8bed9f",
-    "age": 37,
-    "name": "Nita Washington",
-    "gender": "female",
-    "company": "AQUASURE",
-    "email": "nitawashington@aquasure.com",
-    "phone": "+1 (858) 579-3734"
-  },
-  {
-    "_id": "55d2fc863d59ecccd8b482b7",
-    "age": 34,
-    "name": "Shannon Sanchez",
-    "gender": "male",
-    "company": "QUORDATE",
-    "email": "shannonsanchez@quordate.com",
-    "phone": "+1 (880) 542-2259"
-  },
-  {
-    "_id": "55d2fc861c73e366d8983f98",
-    "age": 23,
-    "name": "Amalia George",
-    "gender": "female",
-    "company": "QUINEX",
-    "email": "amaliageorge@quinex.com",
-    "phone": "+1 (918) 412-3805"
-  },
-  {
-    "_id": "55d2fc866910c4329a167746",
-    "age": 30,
-    "name": "West Parsons",
-    "gender": "male",
-    "company": "RODEMCO",
-    "email": "westparsons@rodemco.com",
-    "phone": "+1 (869) 480-3404"
-  },
-  {
-    "_id": "55d2fc861d97ff31a8eb7f06",
-    "age": 30,
-    "name": "Day Mercado",
-    "gender": "male",
-    "company": "ENJOLA",
-    "email": "daymercado@enjola.com",
-    "phone": "+1 (861) 546-2601"
-  },
-  {
-    "_id": "55d2fc861e100baa15994161",
-    "age": 20,
-    "name": "Hubbard Randolph",
-    "gender": "male",
-    "company": "INSOURCE",
-    "email": "hubbardrandolph@insource.com",
-    "phone": "+1 (939) 422-2753"
-  },
-  {
-    "_id": "55d2fc86dc33a0101292ea57",
-    "age": 32,
-    "name": "Ward Patrick",
-    "gender": "male",
-    "company": "ZUVY",
-    "email": "wardpatrick@zuvy.com",
-    "phone": "+1 (852) 461-3079"
-  },
-  {
-    "_id": "55d2fc863074ff55ec22d7ac",
-    "age": 26,
-    "name": "Barker Small",
-    "gender": "male",
-    "company": "ZIDANT",
-    "email": "barkersmall@zidant.com",
-    "phone": "+1 (901) 514-3653"
-  },
-  {
-    "_id": "55d2fc86008067de21a65447",
-    "age": 26,
-    "name": "Margret Porter",
-    "gender": "female",
-    "company": "DYMI",
-    "email": "margretporter@dymi.com",
-    "phone": "+1 (820) 404-2199"
-  },
-  {
-    "_id": "55d2fc8694b7f8670d10781e",
-    "age": 40,
-    "name": "Roslyn Richmond",
-    "gender": "female",
-    "company": "SONGBIRD",
-    "email": "roslynrichmond@songbird.com",
-    "phone": "+1 (913) 406-3720"
-  },
-  {
-    "_id": "55d2fc86ffff28aef88e1d69",
-    "age": 29,
-    "name": "Jimenez Yates",
-    "gender": "male",
-    "company": "IDETICA",
-    "email": "jimenezyates@idetica.com",
-    "phone": "+1 (803) 421-2358"
-  },
-  {
-    "_id": "55d2fc8604bfeab3a975b2d8",
-    "age": 21,
-    "name": "Mcneil Jensen",
-    "gender": "male",
-    "company": "EXOBLUE",
-    "email": "mcneiljensen@exoblue.com",
-    "phone": "+1 (856) 581-3756"
-  },
-  {
-    "_id": "55d2fc86bee368958f567c45",
-    "age": 40,
-    "name": "Millicent Trujillo",
-    "gender": "female",
-    "company": "ARTWORLDS",
-    "email": "millicenttrujillo@artworlds.com",
-    "phone": "+1 (926) 456-2237"
-  },
-  {
-    "_id": "55d2fc86de2a5a6babe51d48",
-    "age": 26,
-    "name": "Dorothea Duffy",
-    "gender": "female",
-    "company": "EBIDCO",
-    "email": "dorotheaduffy@ebidco.com",
-    "phone": "+1 (873) 458-2694"
-  },
-  {
-    "_id": "55d2fc86f8793320727d2020",
-    "age": 34,
-    "name": "Gloria Ward",
-    "gender": "female",
-    "company": "EXOVENT",
-    "email": "gloriaward@exovent.com",
-    "phone": "+1 (948) 552-3275"
-  },
-  {
-    "_id": "55d2fc86967e5599adde68e8",
-    "age": 33,
-    "name": "Denise Hogan",
-    "gender": "female",
-    "company": "GLEAMINK",
-    "email": "denisehogan@gleamink.com",
-    "phone": "+1 (902) 544-2943"
-  },
-  {
-    "_id": "55d2fc862833baf2918f7860",
-    "age": 23,
-    "name": "Clemons Berger",
-    "gender": "male",
-    "company": "ARTIQ",
-    "email": "clemonsberger@artiq.com",
-    "phone": "+1 (873) 516-2440"
-  },
-  {
-    "_id": "55d2fc8610af4c20d426854a",
-    "age": 40,
-    "name": "Colette Scott",
-    "gender": "female",
-    "company": "INVENTURE",
-    "email": "colettescott@inventure.com",
-    "phone": "+1 (814) 556-3466"
-  },
-  {
-    "_id": "55d2fc8697af4d0d06a2c4a6",
-    "age": 34,
-    "name": "Chavez Aguilar",
-    "gender": "male",
-    "company": "ISBOL",
-    "email": "chavezaguilar@isbol.com",
-    "phone": "+1 (952) 543-3992"
-  },
-  {
-    "_id": "55d2fc861da12d86036c3e48",
-    "age": 29,
-    "name": "Arnold Collier",
-    "gender": "male",
-    "company": "MELBACOR",
-    "email": "arnoldcollier@melbacor.com",
-    "phone": "+1 (907) 404-2090"
-  },
-  {
-    "_id": "55d2fc86deb921c78b56fec1",
-    "age": 24,
-    "name": "Nixon Ingram",
-    "gender": "male",
-    "company": "ELENTRIX",
-    "email": "nixoningram@elentrix.com",
-    "phone": "+1 (884) 596-3023"
-  },
-  {
-    "_id": "55d2fc86a8b288ba6b8aa48f",
-    "age": 28,
-    "name": "Hurst Hull",
-    "gender": "male",
-    "company": "INCUBUS",
-    "email": "hursthull@incubus.com",
-    "phone": "+1 (970) 445-2279"
-  },
-  {
-    "_id": "55d2fc864dc593d113336b1b",
-    "age": 32,
-    "name": "Giles Jacobson",
-    "gender": "male",
-    "company": "MIXERS",
-    "email": "gilesjacobson@mixers.com",
-    "phone": "+1 (868) 402-3161"
-  },
-  {
-    "_id": "55d2fc86fd0246fcd0c8f864",
-    "age": 25,
-    "name": "Millie Giles",
-    "gender": "female",
-    "company": "ZAJ",
-    "email": "milliegiles@zaj.com",
-    "phone": "+1 (831) 535-3535"
-  },
-  {
-    "_id": "55d2fc86dceeca0deb9f6d67",
-    "age": 21,
-    "name": "Sargent Morse",
-    "gender": "male",
-    "company": "ANARCO",
-    "email": "sargentmorse@anarco.com",
-    "phone": "+1 (994) 536-2563"
-  },
-  {
-    "_id": "55d2fc86abbd1add64df6aa2",
-    "age": 26,
-    "name": "Reed Camacho",
-    "gender": "male",
-    "company": "ICOLOGY",
-    "email": "reedcamacho@icology.com",
-    "phone": "+1 (999) 408-3042"
-  },
-  {
-    "_id": "55d2fc86a2593db6d584f022",
-    "age": 21,
-    "name": "Bryant Colon",
-    "gender": "male",
-    "company": "ZANILLA",
-    "email": "bryantcolon@zanilla.com",
-    "phone": "+1 (964) 570-3418"
-  },
-  {
-    "_id": "55d2fc86f980f74ba093fde6",
-    "age": 38,
-    "name": "Rosella Pierce",
-    "gender": "female",
-    "company": "PRIMORDIA",
-    "email": "rosellapierce@primordia.com",
-    "phone": "+1 (936) 579-3014"
-  },
-  {
-    "_id": "55d2fc86797a0001329071fb",
-    "age": 20,
-    "name": "Patrice Mckee",
-    "gender": "female",
-    "company": "GEEKY",
-    "email": "patricemckee@geeky.com",
-    "phone": "+1 (866) 565-3764"
-  },
-  {
-    "_id": "55d2fc86bcc6181d0b8cae17",
-    "age": 29,
-    "name": "Wilkinson Levy",
-    "gender": "male",
-    "company": "FISHLAND",
-    "email": "wilkinsonlevy@fishland.com",
-    "phone": "+1 (998) 509-3800"
-  },
-  {
-    "_id": "55d2fc86784b1e22004d637d",
-    "age": 28,
-    "name": "Isabella Snyder",
-    "gender": "female",
-    "company": "TETRATREX",
-    "email": "isabellasnyder@tetratrex.com",
-    "phone": "+1 (998) 451-2871"
-  },
-  {
-    "_id": "55d2fc8603abab523ff1f02d",
-    "age": 35,
-    "name": "Claudine Berg",
-    "gender": "female",
-    "company": "ZYTREK",
-    "email": "claudineberg@zytrek.com",
-    "phone": "+1 (836) 563-3376"
-  },
-  {
-    "_id": "55d2fc862796e94846a82a8b",
-    "age": 27,
-    "name": "Hyde Simon",
-    "gender": "male",
-    "company": "FUELWORKS",
-    "email": "hydesimon@fuelworks.com",
-    "phone": "+1 (872) 594-2291"
-  },
-  {
-    "_id": "55d2fc86f2fa84a4f7ca4548",
-    "age": 29,
-    "name": "Wendy Roberts",
-    "gender": "female",
-    "company": "OPTICALL",
-    "email": "wendyroberts@opticall.com",
-    "phone": "+1 (895) 534-3852"
-  },
-  {
-    "_id": "55d2fc8651dbb76674b6d2df",
-    "age": 40,
-    "name": "Tasha Erickson",
-    "gender": "female",
-    "company": "PURIA",
-    "email": "tashaerickson@puria.com",
-    "phone": "+1 (905) 526-2175"
-  },
-  {
-    "_id": "55d2fc86b7f867e76e709d68",
-    "age": 32,
-    "name": "Marisa Dunlap",
-    "gender": "female",
-    "company": "GLUKGLUK",
-    "email": "marisadunlap@glukgluk.com",
-    "phone": "+1 (855) 400-2200"
-  },
-  {
-    "_id": "55d2fc8695b6ccc0707570af",
-    "age": 38,
-    "name": "Kaitlin Baldwin",
-    "gender": "female",
-    "company": "EGYPTO",
-    "email": "kaitlinbaldwin@egypto.com",
-    "phone": "+1 (980) 482-3256"
-  },
-  {
-    "_id": "55d2fc86f36b539d4494395d",
-    "age": 38,
-    "name": "Abigail Kirkland",
-    "gender": "female",
-    "company": "INRT",
-    "email": "abigailkirkland@inrt.com",
-    "phone": "+1 (916) 440-3469"
-  },
-  {
-    "_id": "55d2fc86e401343dbf1de380",
-    "age": 34,
-    "name": "Marci Maynard",
-    "gender": "female",
-    "company": "INSURITY",
-    "email": "marcimaynard@insurity.com",
-    "phone": "+1 (917) 482-3601"
-  },
-  {
-    "_id": "55d2fc86ba3f7fdb738899f4",
-    "age": 31,
-    "name": "Tanya Michael",
-    "gender": "female",
-    "company": "ENVIRE",
-    "email": "tanyamichael@envire.com",
-    "phone": "+1 (826) 436-3177"
-  },
-  {
-    "_id": "55d2fc861cb8a1d3151ae2c1",
-    "age": 34,
-    "name": "Farrell Irwin",
-    "gender": "male",
-    "company": "EXTRAGEN",
-    "email": "farrellirwin@extragen.com",
-    "phone": "+1 (948) 442-3796"
-  },
-  {
-    "_id": "55d2fc86b90f948949af3d8e",
-    "age": 27,
-    "name": "Dickson Shepherd",
-    "gender": "male",
-    "company": "COMTOURS",
-    "email": "dicksonshepherd@comtours.com",
-    "phone": "+1 (871) 458-2972"
-  },
-  {
-    "_id": "55d2fc862065aeaf17581fa6",
-    "age": 40,
-    "name": "Fowler Adams",
-    "gender": "male",
-    "company": "NEPTIDE",
-    "email": "fowleradams@neptide.com",
-    "phone": "+1 (836) 431-3585"
-  },
-  {
-    "_id": "55d2fc866aab8b242a30acfd",
-    "age": 22,
-    "name": "Durham Frost",
-    "gender": "male",
-    "company": "SNOWPOKE",
-    "email": "durhamfrost@snowpoke.com",
-    "phone": "+1 (801) 510-2084"
-  },
-  {
-    "_id": "55d2fc86d3a4aafedc274ffa",
-    "age": 27,
-    "name": "Delia Barnes",
-    "gender": "female",
-    "company": "CONFERIA",
-    "email": "deliabarnes@conferia.com",
-    "phone": "+1 (999) 471-2182"
-  },
-  {
-    "_id": "55d2fc8601ed1a317e289785",
-    "age": 27,
-    "name": "Gill Tillman",
-    "gender": "male",
-    "company": "MATRIXITY",
-    "email": "gilltillman@matrixity.com",
-    "phone": "+1 (880) 419-3960"
-  },
-  {
-    "_id": "55d2fc86098dda4fa3812793",
-    "age": 27,
-    "name": "Loraine Saunders",
-    "gender": "female",
-    "company": "DOGTOWN",
-    "email": "lorainesaunders@dogtown.com",
-    "phone": "+1 (868) 500-3061"
-  },
-  {
-    "_id": "55d2fc865f9615b558837892",
-    "age": 34,
-    "name": "Lou Mcdonald",
-    "gender": "female",
-    "company": "COMCUBINE",
-    "email": "loumcdonald@comcubine.com",
-    "phone": "+1 (857) 568-3427"
-  },
-  {
-    "_id": "55d2fc865a5a752bb88dbcd8",
-    "age": 28,
-    "name": "Beth Lester",
-    "gender": "female",
-    "company": "EARTHWAX",
-    "email": "bethlester@earthwax.com",
-    "phone": "+1 (805) 565-2363"
-  },
-  {
-    "_id": "55d2fc862e7d03a2f76c9e58",
-    "age": 37,
-    "name": "Karin Mason",
-    "gender": "female",
-    "company": "GEEKNET",
-    "email": "karinmason@geeknet.com",
-    "phone": "+1 (923) 438-3684"
-  },
-  {
-    "_id": "55d2fc8617970ba4987ed4b3",
-    "age": 39,
-    "name": "Jeanine Watson",
-    "gender": "female",
-    "company": "LINGOAGE",
-    "email": "jeaninewatson@lingoage.com",
-    "phone": "+1 (919) 444-3722"
-  },
-  {
-    "_id": "55d2fc86445181571721c6c9",
-    "age": 20,
-    "name": "Soto Wilkins",
-    "gender": "male",
-    "company": "JUMPSTACK",
-    "email": "sotowilkins@jumpstack.com",
-    "phone": "+1 (818) 518-3028"
-  },
-  {
-    "_id": "55d2fc86b8b146361e17fa83",
-    "age": 20,
-    "name": "Mabel Fields",
-    "gender": "female",
-    "company": "MAGNINA",
-    "email": "mabelfields@magnina.com",
-    "phone": "+1 (861) 583-2161"
-  },
-  {
-    "_id": "55d2fc8667abfe5721a74176",
-    "age": 26,
-    "name": "Ruthie Bailey",
-    "gender": "female",
-    "company": "ROCKLOGIC",
-    "email": "ruthiebailey@rocklogic.com",
-    "phone": "+1 (872) 402-3619"
-  },
-  {
-    "_id": "55d2fc865cfa092adb20dc0f",
-    "age": 22,
-    "name": "Vaughan Vincent",
-    "gender": "male",
-    "company": "ACIUM",
-    "email": "vaughanvincent@acium.com",
-    "phone": "+1 (919) 548-3948"
-  },
-  {
-    "_id": "55d2fc86fe25d347c15e1749",
-    "age": 38,
-    "name": "Myrtle Burris",
-    "gender": "female",
-    "company": "IRACK",
-    "email": "myrtleburris@irack.com",
-    "phone": "+1 (840) 526-2646"
-  },
-  {
-    "_id": "55d2fc8689cd98b47e44118d",
-    "age": 37,
-    "name": "Peggy Mercer",
-    "gender": "female",
-    "company": "ESCENTA",
-    "email": "peggymercer@escenta.com",
-    "phone": "+1 (817) 574-3310"
-  },
-  {
-    "_id": "55d2fc86ae662f567ae09404",
-    "age": 24,
-    "name": "Mollie Simmons",
-    "gender": "female",
-    "company": "STOCKPOST",
-    "email": "molliesimmons@stockpost.com",
-    "phone": "+1 (854) 461-2851"
-  },
-  {
-    "_id": "55d2fc86f738f2bd6ebebd1c",
-    "age": 37,
-    "name": "Case Cox",
-    "gender": "male",
-    "company": "ACCEL",
-    "email": "casecox@accel.com",
-    "phone": "+1 (853) 473-2780"
-  },
-  {
-    "_id": "55d2fc86c80907be4ff386d5",
-    "age": 26,
-    "name": "Snyder Mcclure",
-    "gender": "male",
-    "company": "PLASMOX",
-    "email": "snydermcclure@plasmox.com",
-    "phone": "+1 (980) 583-3213"
-  },
-  {
-    "_id": "55d2fc86ed956580fa2cff25",
-    "age": 31,
-    "name": "Kelly Malone",
-    "gender": "male",
-    "company": "XANIDE",
-    "email": "kellymalone@xanide.com",
-    "phone": "+1 (871) 436-2431"
-  },
-  {
-    "_id": "55d2fc86fcd2b8d749bd1feb",
-    "age": 20,
-    "name": "Jackie Carr",
-    "gender": "female",
-    "company": "VOIPA",
-    "email": "jackiecarr@voipa.com",
-    "phone": "+1 (807) 431-3436"
-  },
-  {
-    "_id": "55d2fc86d9aac03a007489ef",
-    "age": 34,
-    "name": "Cochran Walter",
-    "gender": "male",
-    "company": "NIKUDA",
-    "email": "cochranwalter@nikuda.com",
-    "phone": "+1 (977) 410-3770"
-  },
-  {
-    "_id": "55d2fc86140fefcd667c533f",
-    "age": 22,
-    "name": "Ellen Ortiz",
-    "gender": "female",
-    "company": "NEWCUBE",
-    "email": "ellenortiz@newcube.com",
-    "phone": "+1 (980) 541-3099"
-  },
-  {
-    "_id": "55d2fc86d374c6a649e5877e",
-    "age": 35,
-    "name": "Concetta Beard",
-    "gender": "female",
-    "company": "PLASMOS",
-    "email": "concettabeard@plasmos.com",
-    "phone": "+1 (839) 539-2423"
-  },
-  {
-    "_id": "55d2fc861ee809861b7c2b38",
-    "age": 33,
-    "name": "Josephine Alexander",
-    "gender": "female",
-    "company": "LOVEPAD",
-    "email": "josephinealexander@lovepad.com",
-    "phone": "+1 (880) 452-2208"
-  },
-  {
-    "_id": "55d2fc8677db4f8446d43041",
-    "age": 39,
-    "name": "Melisa Dean",
-    "gender": "female",
-    "company": "GEOFORM",
-    "email": "melisadean@geoform.com",
-    "phone": "+1 (934) 452-2532"
-  },
-  {
-    "_id": "55d2fc861dc0856e2ec744ab",
-    "age": 26,
-    "name": "Morgan Galloway",
-    "gender": "male",
-    "company": "ELEMANTRA",
-    "email": "morgangalloway@elemantra.com",
-    "phone": "+1 (888) 461-2261"
-  },
-  {
-    "_id": "55d2fc869bc97691cec7d569",
-    "age": 26,
-    "name": "Curtis Griffith",
-    "gender": "male",
-    "company": "TINGLES",
-    "email": "curtisgriffith@tingles.com",
-    "phone": "+1 (881) 517-2174"
-  },
-  {
-    "_id": "55d2fc8624b80b5986e1de83",
-    "age": 40,
-    "name": "Gentry Mccarthy",
-    "gender": "male",
-    "company": "GEEKOLA",
-    "email": "gentrymccarthy@geekola.com",
-    "phone": "+1 (908) 559-3049"
-  },
-  {
-    "_id": "55d2fc869c2a158da79f9a7f",
-    "age": 37,
-    "name": "Lancaster Justice",
-    "gender": "male",
-    "company": "NAXDIS",
-    "email": "lancasterjustice@naxdis.com",
-    "phone": "+1 (980) 456-3515"
-  },
-  {
-    "_id": "55d2fc867c8e30a12fddcb79",
-    "age": 28,
-    "name": "Jenifer Barr",
-    "gender": "female",
-    "company": "ZORROMOP",
-    "email": "jeniferbarr@zorromop.com",
-    "phone": "+1 (901) 440-3979"
-  },
-  {
-    "_id": "55d2fc8696d7c8b59507f10c",
-    "age": 35,
-    "name": "Benjamin Nolan",
-    "gender": "male",
-    "company": "DIGITALUS",
-    "email": "benjaminnolan@digitalus.com",
-    "phone": "+1 (828) 582-3041"
-  },
-  {
-    "_id": "55d2fc86b7e719a5c07b9f9e",
-    "age": 27,
-    "name": "Beach Valentine",
-    "gender": "male",
-    "company": "KAGGLE",
-    "email": "beachvalentine@kaggle.com",
-    "phone": "+1 (961) 563-3631"
-  },
-  {
-    "_id": "55d2fc860bb827b4eab70038",
-    "age": 27,
-    "name": "Brady Moore",
-    "gender": "male",
-    "company": "CORPULSE",
-    "email": "bradymoore@corpulse.com",
-    "phone": "+1 (859) 434-2962"
-  },
-  {
-    "_id": "55d2fc862fc00a2ce6ab7f32",
-    "age": 27,
-    "name": "Page Ray",
-    "gender": "male",
-    "company": "BEZAL",
-    "email": "pageray@bezal.com",
-    "phone": "+1 (845) 492-2182"
-  },
-  {
-    "_id": "55d2fc861b57330b56d5b3f8",
-    "age": 40,
-    "name": "Lupe Gould",
-    "gender": "female",
-    "company": "DOGNOSIS",
-    "email": "lupegould@dognosis.com",
-    "phone": "+1 (955) 579-2141"
-  },
-  {
-    "_id": "55d2fc864a8fabbf89d106cd",
-    "age": 23,
-    "name": "Melva Abbott",
-    "gender": "female",
-    "company": "CODACT",
-    "email": "melvaabbott@codact.com",
-    "phone": "+1 (801) 478-2678"
-  },
-  {
-    "_id": "55d2fc86107ad0ad66c9d3ea",
-    "age": 22,
-    "name": "Mendez Middleton",
-    "gender": "male",
-    "company": "CUJO",
-    "email": "mendezmiddleton@cujo.com",
-    "phone": "+1 (908) 430-2032"
-  },
-  {
-    "_id": "55d2fc86d2f5edd1222e87cc",
-    "age": 31,
-    "name": "Meredith Ayers",
-    "gender": "female",
-    "company": "OPTYK",
-    "email": "meredithayers@optyk.com",
-    "phone": "+1 (875) 472-2514"
-  },
-  {
-    "_id": "55d2fc86551f2a796de0f3ad",
-    "age": 21,
-    "name": "Burns Serrano",
-    "gender": "male",
-    "company": "ZOUNDS",
-    "email": "burnsserrano@zounds.com",
-    "phone": "+1 (939) 558-2221"
-  },
-  {
-    "_id": "55d2fc86540849ad56aeac98",
-    "age": 30,
-    "name": "Barr Sykes",
-    "gender": "male",
-    "company": "CORECOM",
-    "email": "barrsykes@corecom.com",
-    "phone": "+1 (982) 523-3577"
-  },
-  {
-    "_id": "55d2fc86e7d43d06e4d135f2",
-    "age": 28,
-    "name": "Julie Johnson",
-    "gender": "female",
-    "company": "BIOTICA",
-    "email": "juliejohnson@biotica.com",
-    "phone": "+1 (918) 487-3230"
-  },
-  {
-    "_id": "55d2fc86450521acf4a465d9",
-    "age": 23,
-    "name": "Dawn Vinson",
-    "gender": "female",
-    "company": "MENBRAIN",
-    "email": "dawnvinson@menbrain.com",
-    "phone": "+1 (936) 525-3273"
-  },
-  {
-    "_id": "55d2fc86df3e093a104f498b",
-    "age": 30,
-    "name": "Ginger Ryan",
-    "gender": "female",
-    "company": "ENTHAZE",
-    "email": "gingerryan@enthaze.com",
-    "phone": "+1 (865) 530-2726"
-  },
-  {
-    "_id": "55d2fc86b6a6fed233908500",
-    "age": 40,
-    "name": "Mcconnell Prince",
-    "gender": "male",
-    "company": "TRIPSCH",
-    "email": "mcconnellprince@tripsch.com",
-    "phone": "+1 (923) 586-2117"
-  },
-  {
-    "_id": "55d2fc8619de2514561b7ac1",
-    "age": 23,
-    "name": "Peck Blackwell",
-    "gender": "male",
-    "company": "ASSISTIA",
-    "email": "peckblackwell@assistia.com",
-    "phone": "+1 (988) 549-3418"
-  },
-  {
-    "_id": "55d2fc8619b2c263aec32e51",
-    "age": 32,
-    "name": "Simmons Benton",
-    "gender": "male",
-    "company": "TROLLERY",
-    "email": "simmonsbenton@trollery.com",
-    "phone": "+1 (924) 439-2962"
-  },
-  {
-    "_id": "55d2fc8612c77e18fa3c743d",
-    "age": 36,
-    "name": "Mari Silva",
-    "gender": "female",
-    "company": "MAGMINA",
-    "email": "marisilva@magmina.com",
-    "phone": "+1 (863) 509-3186"
-  },
-  {
-    "_id": "55d2fc86226a40ce862e518e",
-    "age": 40,
-    "name": "Erin Jefferson",
-    "gender": "female",
-    "company": "VIAGREAT",
-    "email": "erinjefferson@viagreat.com",
-    "phone": "+1 (921) 408-2295"
-  },
-  {
-    "_id": "55d2fc8601013536fc55a097",
-    "age": 37,
-    "name": "Nellie Ballard",
-    "gender": "female",
-    "company": "GEOFORMA",
-    "email": "nellieballard@geoforma.com",
-    "phone": "+1 (918) 406-2600"
-  },
-  {
-    "_id": "55d2fc864402965704b3453a",
-    "age": 27,
-    "name": "Austin Brewer",
-    "gender": "male",
-    "company": "METROZ",
-    "email": "austinbrewer@metroz.com",
-    "phone": "+1 (968) 584-2959"
-  },
-  {
-    "_id": "55d2fc8690a7d6957a09f6c8",
-    "age": 34,
-    "name": "Pickett Buckley",
-    "gender": "male",
-    "company": "SUREPLEX",
-    "email": "pickettbuckley@sureplex.com",
-    "phone": "+1 (975) 520-3259"
-  },
-  {
-    "_id": "55d2fc8695f3020c96b14f95",
-    "age": 39,
-    "name": "Coleen Herman",
-    "gender": "female",
-    "company": "NORALI",
-    "email": "coleenherman@norali.com",
-    "phone": "+1 (916) 506-2704"
-  },
-  {
-    "_id": "55d2fc869b58b96d1d2cdfcc",
-    "age": 37,
-    "name": "Roy Guerrero",
-    "gender": "male",
-    "company": "PLUTORQUE",
-    "email": "royguerrero@plutorque.com",
-    "phone": "+1 (922) 541-3741"
-  },
-  {
-    "_id": "55d2fc86ba1ed1189e9020ee",
-    "age": 29,
-    "name": "Oneal Curtis",
-    "gender": "male",
-    "company": "DATAGEN",
-    "email": "onealcurtis@datagen.com",
-    "phone": "+1 (847) 421-3483"
-  },
-  {
-    "_id": "55d2fc86b5c5e89eb9fe1e79",
-    "age": 29,
-    "name": "Chaney Christian",
-    "gender": "male",
-    "company": "XPLOR",
-    "email": "chaneychristian@xplor.com",
-    "phone": "+1 (847) 517-3918"
-  },
-  {
-    "_id": "55d2fc86f6b5a3d91952d941",
-    "age": 29,
-    "name": "Cantu Richard",
-    "gender": "male",
-    "company": "ZANYMAX",
-    "email": "canturichard@zanymax.com",
-    "phone": "+1 (972) 487-2616"
-  },
-  {
-    "_id": "55d2fc8609b0f98cbc2e101d",
-    "age": 37,
-    "name": "Newton Barrera",
-    "gender": "male",
-    "company": "PORTALINE",
-    "email": "newtonbarrera@portaline.com",
-    "phone": "+1 (964) 527-3130"
-  },
-  {
-    "_id": "55d2fc86d0e063ca7629c11b",
-    "age": 28,
-    "name": "Jodi Pollard",
-    "gender": "female",
-    "company": "GOKO",
-    "email": "jodipollard@goko.com",
-    "phone": "+1 (957) 468-2658"
-  },
-  {
-    "_id": "55d2fc8688d95c5c579bd328",
-    "age": 35,
-    "name": "Effie Nunez",
-    "gender": "female",
-    "company": "SNACKTION",
-    "email": "effienunez@snacktion.com",
-    "phone": "+1 (805) 576-3749"
-  },
-  {
-    "_id": "55d2fc86f36c0eab69222b17",
-    "age": 38,
-    "name": "Haley Battle",
-    "gender": "male",
-    "company": "TERRAGEN",
-    "email": "haleybattle@terragen.com",
-    "phone": "+1 (955) 581-3931"
-  },
-  {
-    "_id": "55d2fc86ee6900b197860a35",
-    "age": 29,
-    "name": "Cathy Vaughn",
-    "gender": "female",
-    "company": "CANOPOLY",
-    "email": "cathyvaughn@canopoly.com",
-    "phone": "+1 (875) 539-3578"
-  },
-  {
-    "_id": "55d2fc86613f698b355e87bc",
-    "age": 26,
-    "name": "Mendoza Maxwell",
-    "gender": "male",
-    "company": "TERAPRENE",
-    "email": "mendozamaxwell@teraprene.com",
-    "phone": "+1 (820) 471-3500"
-  },
-  {
-    "_id": "55d2fc86f86a80f78c45936a",
-    "age": 28,
-    "name": "Rosetta Hughes",
-    "gender": "female",
-    "company": "DEVILTOE",
-    "email": "rosettahughes@deviltoe.com",
-    "phone": "+1 (911) 418-2439"
-  },
-  {
-    "_id": "55d2fc8683d3c4a377a984a5",
-    "age": 28,
-    "name": "Frazier Larson",
-    "gender": "male",
-    "company": "DAIDO",
-    "email": "frazierlarson@daido.com",
-    "phone": "+1 (995) 459-3756"
-  },
-  {
-    "_id": "55d2fc8669baef03c4d6a4a5",
-    "age": 27,
-    "name": "Brittney Ratliff",
-    "gender": "female",
-    "company": "TALKALOT",
-    "email": "brittneyratliff@talkalot.com",
-    "phone": "+1 (865) 568-2986"
-  },
-  {
-    "_id": "55d2fc86404583ccc6b6a4f4",
-    "age": 21,
-    "name": "Hancock Gilliam",
-    "gender": "male",
-    "company": "EXPOSA",
-    "email": "hancockgilliam@exposa.com",
-    "phone": "+1 (894) 519-3139"
-  },
-  {
-    "_id": "55d2fc8675478e0b84bb5ab3",
-    "age": 20,
-    "name": "Lilia Mccormick",
-    "gender": "female",
-    "company": "DENTREX",
-    "email": "liliamccormick@dentrex.com",
-    "phone": "+1 (997) 552-3944"
-  },
-  {
-    "_id": "55d2fc8658bf3954cdf52ebb",
-    "age": 20,
-    "name": "Chrystal Mcneil",
-    "gender": "female",
-    "company": "LIMOZEN",
-    "email": "chrystalmcneil@limozen.com",
-    "phone": "+1 (943) 519-2952"
-  },
-  {
-    "_id": "55d2fc865ebec9e8c7adc383",
-    "age": 31,
-    "name": "Hebert Alston",
-    "gender": "male",
-    "company": "IZZBY",
-    "email": "hebertalston@izzby.com",
-    "phone": "+1 (953) 482-2029"
-  },
-  {
-    "_id": "55d2fc86bf1085e6fd2e9ea1",
-    "age": 23,
-    "name": "Mcfarland Carrillo",
-    "gender": "male",
-    "company": "EQUITOX",
-    "email": "mcfarlandcarrillo@equitox.com",
-    "phone": "+1 (999) 478-3822"
-  },
-  {
-    "_id": "55d2fc8641d4f2d09f539bd6",
-    "age": 40,
-    "name": "Porter Weaver",
-    "gender": "male",
-    "company": "QUILM",
-    "email": "porterweaver@quilm.com",
-    "phone": "+1 (831) 501-2739"
-  },
-  {
-    "_id": "55d2fc869ee5331a50039e30",
-    "age": 23,
-    "name": "Dale Sims",
-    "gender": "male",
-    "company": "SCENTRIC",
-    "email": "dalesims@scentric.com",
-    "phone": "+1 (845) 597-2120"
-  },
-  {
-    "_id": "55d2fc86cb96d31fe71e4a18",
-    "age": 22,
-    "name": "William Dixon",
-    "gender": "male",
-    "company": "NAMEBOX",
-    "email": "williamdixon@namebox.com",
-    "phone": "+1 (970) 448-2651"
-  },
-  {
-    "_id": "55d2fc86e88daeb1e198671d",
-    "age": 33,
-    "name": "Patrica Reed",
-    "gender": "female",
-    "company": "CORPORANA",
-    "email": "patricareed@corporana.com",
-    "phone": "+1 (817) 457-2413"
-  },
-  {
-    "_id": "55d2fc86c33d9f422bf8bfcc",
-    "age": 20,
-    "name": "Marylou Mcmillan",
-    "gender": "female",
-    "company": "RETRACK",
-    "email": "maryloumcmillan@retrack.com",
-    "phone": "+1 (908) 568-2328"
-  },
-  {
-    "_id": "55d2fc86c4b1b139887e76f1",
-    "age": 20,
-    "name": "Maritza David",
-    "gender": "female",
-    "company": "ORBEAN",
-    "email": "maritzadavid@orbean.com",
-    "phone": "+1 (851) 503-3737"
-  },
-  {
-    "_id": "55d2fc86ac0f360d91c740e6",
-    "age": 23,
-    "name": "Lorie Moses",
-    "gender": "female",
-    "company": "ROCKABYE",
-    "email": "loriemoses@rockabye.com",
-    "phone": "+1 (823) 431-2387"
-  },
-  {
-    "_id": "55d2fc86d7d406569b386b17",
-    "age": 35,
-    "name": "Shields Weiss",
-    "gender": "male",
-    "company": "RODEOCEAN",
-    "email": "shieldsweiss@rodeocean.com",
-    "phone": "+1 (957) 490-3725"
-  },
-  {
-    "_id": "55d2fc86e4f66ce770ae2c93",
-    "age": 25,
-    "name": "Eugenia Berry",
-    "gender": "female",
-    "company": "BISBA",
-    "email": "eugeniaberry@bisba.com",
-    "phone": "+1 (948) 403-3403"
-  },
-  {
-    "_id": "55d2fc8618f2f4f428223522",
-    "age": 33,
-    "name": "Howard Compton",
-    "gender": "male",
-    "company": "NAMEGEN",
-    "email": "howardcompton@namegen.com",
-    "phone": "+1 (827) 439-3667"
-  },
-  {
-    "_id": "55d2fc86f5adc0f6dd535ea6",
-    "age": 28,
-    "name": "Key Davis",
-    "gender": "male",
-    "company": "PORTICO",
-    "email": "keydavis@portico.com",
-    "phone": "+1 (873) 533-2980"
-  },
-  {
-    "_id": "55d2fc86876669f4e9431417",
-    "age": 33,
-    "name": "Phillips Solis",
-    "gender": "male",
-    "company": "DANCITY",
-    "email": "phillipssolis@dancity.com",
-    "phone": "+1 (883) 481-3114"
-  },
-  {
-    "_id": "55d2fc86f2bb610d7ad9ea36",
-    "age": 40,
-    "name": "Cash Pugh",
-    "gender": "male",
-    "company": "STUCCO",
-    "email": "cashpugh@stucco.com",
-    "phone": "+1 (873) 512-2106"
-  },
-  {
-    "_id": "55d2fc863be1649d5bd3be39",
-    "age": 21,
-    "name": "Elinor Warner",
-    "gender": "female",
-    "company": "FOSSIEL",
-    "email": "elinorwarner@fossiel.com",
-    "phone": "+1 (950) 431-3679"
-  },
-  {
-    "_id": "55d2fc86fdad2af5536237e2",
-    "age": 35,
-    "name": "Jacquelyn Doyle",
-    "gender": "female",
-    "company": "CYTREX",
-    "email": "jacquelyndoyle@cytrex.com",
-    "phone": "+1 (924) 569-2919"
-  },
-  {
-    "_id": "55d2fc86f3affa20ab27edff",
-    "age": 33,
-    "name": "Jeannine Mosley",
-    "gender": "female",
-    "company": "ACUSAGE",
-    "email": "jeanninemosley@acusage.com",
-    "phone": "+1 (954) 517-2805"
-  },
-  {
-    "_id": "55d2fc8670dd0dbdd6e4d195",
-    "age": 37,
-    "name": "Logan Brady",
-    "gender": "male",
-    "company": "TELLIFLY",
-    "email": "loganbrady@tellifly.com",
-    "phone": "+1 (861) 576-2313"
-  },
-  {
-    "_id": "55d2fc86b9a15e4721982a39",
-    "age": 26,
-    "name": "Houston Joseph",
-    "gender": "male",
-    "company": "BOILICON",
-    "email": "houstonjoseph@boilicon.com",
-    "phone": "+1 (822) 519-3430"
-  },
-  {
-    "_id": "55d2fc86f225999b0b8742d2",
-    "age": 38,
-    "name": "Rita Lindsey",
-    "gender": "female",
-    "company": "FIBEROX",
-    "email": "ritalindsey@fiberox.com",
-    "phone": "+1 (805) 551-3755"
-  },
-  {
-    "_id": "55d2fc86e9dad38b6873b807",
-    "age": 22,
-    "name": "Strong Poole",
-    "gender": "male",
-    "company": "KINDALOO",
-    "email": "strongpoole@kindaloo.com",
-    "phone": "+1 (918) 426-2076"
-  },
-  {
-    "_id": "55d2fc861608b965b2283827",
-    "age": 38,
-    "name": "Hines Mathews",
-    "gender": "male",
-    "company": "INTRADISK",
-    "email": "hinesmathews@intradisk.com",
-    "phone": "+1 (932) 420-2236"
-  },
-  {
-    "_id": "55d2fc863079075f91241a16",
-    "age": 28,
-    "name": "Trina Wiley",
-    "gender": "female",
-    "company": "HATOLOGY",
-    "email": "trinawiley@hatology.com",
-    "phone": "+1 (855) 466-3287"
-  },
-  {
-    "_id": "55d2fc86f2fae1a79253fb61",
-    "age": 23,
-    "name": "Kirby Tucker",
-    "gender": "male",
-    "company": "AQUAMATE",
-    "email": "kirbytucker@aquamate.com",
-    "phone": "+1 (935) 456-3272"
-  },
-  {
-    "_id": "55d2fc86c42bf49f8202b2fa",
-    "age": 28,
-    "name": "Ballard Stein",
-    "gender": "male",
-    "company": "KOOGLE",
-    "email": "ballardstein@koogle.com",
-    "phone": "+1 (943) 586-2225"
-  },
-  {
-    "_id": "55d2fc865db815da198c0776",
-    "age": 36,
-    "name": "Wagner Mcfarland",
-    "gender": "male",
-    "company": "ACCIDENCY",
-    "email": "wagnermcfarland@accidency.com",
-    "phone": "+1 (920) 533-2157"
-  },
-  {
-    "_id": "55d2fc866aeb268fe48fd6be",
-    "age": 22,
-    "name": "Wiley Wilder",
-    "gender": "male",
-    "company": "KIDSTOCK",
-    "email": "wileywilder@kidstock.com",
-    "phone": "+1 (957) 459-3416"
-  },
-  {
-    "_id": "55d2fc8606f67a423d303437",
-    "age": 37,
-    "name": "Rosario Slater",
-    "gender": "female",
-    "company": "SPRINGBEE",
-    "email": "rosarioslater@springbee.com",
-    "phone": "+1 (950) 506-3454"
-  },
-  {
-    "_id": "55d2fc86510fd16a269a0201",
-    "age": 37,
-    "name": "Walker Mcdowell",
-    "gender": "male",
-    "company": "ONTAGENE",
-    "email": "walkermcdowell@ontagene.com",
-    "phone": "+1 (953) 579-3429"
-  },
-  {
-    "_id": "55d2fc867d419d30f9394f56",
-    "age": 32,
-    "name": "Booth Pratt",
-    "gender": "male",
-    "company": "ZIGGLES",
-    "email": "boothpratt@ziggles.com",
-    "phone": "+1 (835) 453-3707"
-  },
-  {
-    "_id": "55d2fc86e631b8f71bbe7b35",
-    "age": 33,
-    "name": "Georgia Carpenter",
-    "gender": "female",
-    "company": "STRALUM",
-    "email": "georgiacarpenter@stralum.com",
-    "phone": "+1 (923) 536-3557"
-  },
-  {
-    "_id": "55d2fc866df6437afa4cfaf6",
-    "age": 26,
-    "name": "Harding Powers",
-    "gender": "male",
-    "company": "BEADZZA",
-    "email": "hardingpowers@beadzza.com",
-    "phone": "+1 (855) 467-2993"
-  },
-  {
-    "_id": "55d2fc867ade492afcfc24a6",
-    "age": 37,
-    "name": "Kaye Brown",
-    "gender": "female",
-    "company": "AMTAS",
-    "email": "kayebrown@amtas.com",
-    "phone": "+1 (926) 444-3936"
-  },
-  {
-    "_id": "55d2fc862bf33dd3169710ff",
-    "age": 24,
-    "name": "Mccray Padilla",
-    "gender": "male",
-    "company": "FUTURIS",
-    "email": "mccraypadilla@futuris.com",
-    "phone": "+1 (969) 561-3819"
-  },
-  {
-    "_id": "55d2fc8666f74690303abf65",
-    "age": 35,
-    "name": "Moon Moss",
-    "gender": "male",
-    "company": "EURON",
-    "email": "moonmoss@euron.com",
-    "phone": "+1 (885) 514-2872"
-  },
-  {
-    "_id": "55d2fc860a8b5abfdf57bd37",
-    "age": 26,
-    "name": "Lane Gregory",
-    "gender": "male",
-    "company": "SKINSERVE",
-    "email": "lanegregory@skinserve.com",
-    "phone": "+1 (818) 455-3048"
-  },
-  {
-    "_id": "55d2fc86f17541fe3b770b26",
-    "age": 30,
-    "name": "Cummings Good",
-    "gender": "male",
-    "company": "GEEKOLOGY",
-    "email": "cummingsgood@geekology.com",
-    "phone": "+1 (821) 426-3476"
-  },
-  {
-    "_id": "55d2fc865b6232d788278e1f",
-    "age": 26,
-    "name": "Lottie Soto",
-    "gender": "female",
-    "company": "INTERGEEK",
-    "email": "lottiesoto@intergeek.com",
-    "phone": "+1 (905) 516-2928"
-  },
-  {
-    "_id": "55d2fc868388a50b97dda5c2",
-    "age": 38,
-    "name": "Bridges Bell",
-    "gender": "male",
-    "company": "MIRACULA",
-    "email": "bridgesbell@miracula.com",
-    "phone": "+1 (917) 438-3079"
-  },
-  {
-    "_id": "55d2fc86cc2120d10b75c41b",
-    "age": 23,
-    "name": "Marcella Lancaster",
-    "gender": "female",
-    "company": "NAVIR",
-    "email": "marcellalancaster@navir.com",
-    "phone": "+1 (851) 478-2535"
-  },
-  {
-    "_id": "55d2fc86f52bd008c87c6993",
-    "age": 32,
-    "name": "Foley Yang",
-    "gender": "male",
-    "company": "APEXTRI",
-    "email": "foleyyang@apextri.com",
-    "phone": "+1 (978) 504-2003"
-  },
-  {
-    "_id": "55d2fc86088b65117b293eef",
-    "age": 21,
-    "name": "Debora Levine",
-    "gender": "female",
-    "company": "VANTAGE",
-    "email": "deboralevine@vantage.com",
-    "phone": "+1 (820) 472-2507"
-  },
-  {
-    "_id": "55d2fc86765d079d8584c281",
-    "age": 30,
-    "name": "Jill Durham",
-    "gender": "female",
-    "company": "FUTURITY",
-    "email": "jilldurham@futurity.com",
-    "phone": "+1 (996) 499-2910"
-  },
-  {
-    "_id": "55d2fc860ed183243d043f79",
-    "age": 28,
-    "name": "Della Sherman",
-    "gender": "female",
-    "company": "EXTRO",
-    "email": "dellasherman@extro.com",
-    "phone": "+1 (893) 541-2867"
-  },
-  {
-    "_id": "55d2fc8646733a05fa448c6e",
-    "age": 30,
-    "name": "Tamara Albert",
-    "gender": "female",
-    "company": "ECOLIGHT",
-    "email": "tamaraalbert@ecolight.com",
-    "phone": "+1 (870) 514-2615"
-  },
-  {
-    "_id": "55d2fc86b8bf0a0f7ffb702e",
-    "age": 39,
-    "name": "Lynn Green",
-    "gender": "male",
-    "company": "SNIPS",
-    "email": "lynngreen@snips.com",
-    "phone": "+1 (938) 464-2073"
-  },
-  {
-    "_id": "55d2fc863e577905fc3ea8e7",
-    "age": 29,
-    "name": "Barbra Tate",
-    "gender": "female",
-    "company": "ACRUEX",
-    "email": "barbratate@acruex.com",
-    "phone": "+1 (809) 418-2604"
-  },
-  {
-    "_id": "55d2fc86335b53151fc242b5",
-    "age": 33,
-    "name": "Potts Dickerson",
-    "gender": "male",
-    "company": "SHADEASE",
-    "email": "pottsdickerson@shadease.com",
-    "phone": "+1 (967) 539-3330"
-  },
-  {
-    "_id": "55d2fc86716df5cb28925d59",
-    "age": 36,
-    "name": "Nancy Woodard",
-    "gender": "female",
-    "company": "ZOSIS",
-    "email": "nancywoodard@zosis.com",
-    "phone": "+1 (811) 434-3223"
-  },
-  {
-    "_id": "55d2fc86058113d9a4909796",
-    "age": 29,
-    "name": "Park Evans",
-    "gender": "male",
-    "company": "XUMONK",
-    "email": "parkevans@xumonk.com",
-    "phone": "+1 (836) 443-2361"
-  },
-  {
-    "_id": "55d2fc8659b6d92fb2880f83",
-    "age": 25,
-    "name": "Nicole Sullivan",
-    "gender": "female",
-    "company": "QUALITEX",
-    "email": "nicolesullivan@qualitex.com",
-    "phone": "+1 (823) 584-2994"
-  },
-  {
-    "_id": "55d2fc86510772cfe78617a9",
-    "age": 33,
-    "name": "Bowers Barnett",
-    "gender": "male",
-    "company": "HOUSEDOWN",
-    "email": "bowersbarnett@housedown.com",
-    "phone": "+1 (872) 466-3548"
-  },
-  {
-    "_id": "55d2fc868dec3ac619cfc262",
-    "age": 21,
-    "name": "Jeri Nielsen",
-    "gender": "female",
-    "company": "MOBILDATA",
-    "email": "jerinielsen@mobildata.com",
-    "phone": "+1 (886) 581-2045"
-  },
-  {
-    "_id": "55d2fc863e89d05123e90aaf",
-    "age": 26,
-    "name": "Delores Farmer",
-    "gender": "female",
-    "company": "XERONK",
-    "email": "deloresfarmer@xeronk.com",
-    "phone": "+1 (872) 556-2716"
-  },
-  {
-    "_id": "55d2fc8618c10cef39c48f97",
-    "age": 38,
-    "name": "Mathis Walsh",
-    "gender": "male",
-    "company": "VURBO",
-    "email": "mathiswalsh@vurbo.com",
-    "phone": "+1 (837) 459-2909"
-  },
-  {
-    "_id": "55d2fc868b3487cb71c8bac4",
-    "age": 20,
-    "name": "Ingrid Shelton",
-    "gender": "female",
-    "company": "ORBIN",
-    "email": "ingridshelton@orbin.com",
-    "phone": "+1 (914) 592-2364"
-  },
-  {
-    "_id": "55d2fc86bcf5c885edacef50",
-    "age": 36,
-    "name": "Socorro Burns",
-    "gender": "female",
-    "company": "NETAGY",
-    "email": "socorroburns@netagy.com",
-    "phone": "+1 (931) 523-3116"
-  },
-  {
-    "_id": "55d2fc8693f704f5c95c48a7",
-    "age": 39,
-    "name": "Jo Ware",
-    "gender": "female",
-    "company": "FLYBOYZ",
-    "email": "joware@flyboyz.com",
-    "phone": "+1 (844) 467-2192"
-  },
-  {
-    "_id": "55d2fc86e87485075df33029",
-    "age": 38,
-    "name": "Emilia Flores",
-    "gender": "female",
-    "company": "ZAGGLES",
-    "email": "emiliaflores@zaggles.com",
-    "phone": "+1 (992) 408-2629"
-  },
-  {
-    "_id": "55d2fc861ab925ca0b9b15c6",
-    "age": 31,
-    "name": "Burks Haney",
-    "gender": "male",
-    "company": "ZYPLE",
-    "email": "burkshaney@zyple.com",
-    "phone": "+1 (882) 401-2811"
-  },
-  {
-    "_id": "55d2fc86e9c252588455b811",
-    "age": 31,
-    "name": "Holly Snow",
-    "gender": "female",
-    "company": "FURNAFIX",
-    "email": "hollysnow@furnafix.com",
-    "phone": "+1 (802) 592-2798"
-  },
-  {
-    "_id": "55d2fc86e07c753096021423",
-    "age": 25,
-    "name": "Frances Hayden",
-    "gender": "female",
-    "company": "SNORUS",
-    "email": "franceshayden@snorus.com",
-    "phone": "+1 (818) 481-2431"
-  },
-  {
-    "_id": "55d2fc86496884876065c346",
-    "age": 28,
-    "name": "Lila Lewis",
-    "gender": "female",
-    "company": "ZOMBOID",
-    "email": "lilalewis@zomboid.com",
-    "phone": "+1 (893) 593-2423"
-  },
-  {
-    "_id": "55d2fc865c6ea080a4d0a5b5",
-    "age": 34,
-    "name": "Torres Finley",
-    "gender": "male",
-    "company": "MAXIMIND",
-    "email": "torresfinley@maximind.com",
-    "phone": "+1 (888) 504-3674"
-  },
-  {
-    "_id": "55d2fc86391c44c545fe989f",
-    "age": 23,
-    "name": "Horne James",
-    "gender": "male",
-    "company": "PETICULAR",
-    "email": "hornejames@peticular.com",
-    "phone": "+1 (865) 558-2517"
-  },
-  {
-    "_id": "55d2fc86c8c2529939eada03",
-    "age": 28,
-    "name": "Jennings Wallace",
-    "gender": "male",
-    "company": "CAXT",
-    "email": "jenningswallace@caxt.com",
-    "phone": "+1 (833) 599-3895"
-  },
-  {
-    "_id": "55d2fc86ee656fe865fbde29",
-    "age": 33,
-    "name": "Lily Gilmore",
-    "gender": "female",
-    "company": "RADIANTIX",
-    "email": "lilygilmore@radiantix.com",
-    "phone": "+1 (854) 561-3148"
-  },
-  {
-    "_id": "55d2fc868455126d596ab537",
-    "age": 35,
-    "name": "Kristy Delacruz",
-    "gender": "female",
-    "company": "EQUICOM",
-    "email": "kristydelacruz@equicom.com",
-    "phone": "+1 (871) 502-3732"
-  },
-  {
-    "_id": "55d2fc863096983ef370ca49",
-    "age": 31,
-    "name": "England Vance",
-    "gender": "male",
-    "company": "VOLAX",
-    "email": "englandvance@volax.com",
-    "phone": "+1 (840) 593-3417"
-  },
-  {
-    "_id": "55d2fc8671f3c1e30bee852f",
-    "age": 23,
-    "name": "Rodriguez Foreman",
-    "gender": "male",
-    "company": "EXTRAWEAR",
-    "email": "rodriguezforeman@extrawear.com",
-    "phone": "+1 (804) 497-2101"
-  },
-  {
-    "_id": "55d2fc86bea38e2b0cd970cb",
-    "age": 35,
-    "name": "Richard Garrett",
-    "gender": "male",
-    "company": "SUPREMIA",
-    "email": "richardgarrett@supremia.com",
-    "phone": "+1 (925) 461-3414"
-  },
-  {
-    "_id": "55d2fc862c5193ab7b4668b7",
-    "age": 40,
-    "name": "Connie Ortega",
-    "gender": "female",
-    "company": "ZILODYNE",
-    "email": "connieortega@zilodyne.com",
-    "phone": "+1 (838) 582-3241"
-  },
-  {
-    "_id": "55d2fc865a6b25d6bc09180e",
-    "age": 24,
-    "name": "Solomon Bates",
-    "gender": "male",
-    "company": "EXOSPACE",
-    "email": "solomonbates@exospace.com",
-    "phone": "+1 (897) 496-2243"
-  },
-  {
-    "_id": "55d2fc86a16a4e077136e4b5",
-    "age": 32,
-    "name": "Valencia Andrews",
-    "gender": "male",
-    "company": "NORSUP",
-    "email": "valenciaandrews@norsup.com",
-    "phone": "+1 (891) 503-3593"
-  },
-  {
-    "_id": "55d2fc86bc5f1bf697a90465",
-    "age": 24,
-    "name": "Briggs Vasquez",
-    "gender": "male",
-    "company": "ZENTIA",
-    "email": "briggsvasquez@zentia.com",
-    "phone": "+1 (802) 415-3377"
-  },
-  {
-    "_id": "55d2fc86c088d6466d83f8fc",
-    "age": 26,
-    "name": "Hester Rice",
-    "gender": "female",
-    "company": "CYTREK",
-    "email": "hesterrice@cytrek.com",
-    "phone": "+1 (855) 544-3905"
-  },
-  {
-    "_id": "55d2fc8622fc3e78977288af",
-    "age": 25,
-    "name": "Shelly Hendrix",
-    "gender": "female",
-    "company": "POWERNET",
-    "email": "shellyhendrix@powernet.com",
-    "phone": "+1 (912) 431-2318"
-  },
-  {
-    "_id": "55d2fc862cdec6cd321df6e0",
-    "age": 22,
-    "name": "Alison Newman",
-    "gender": "female",
-    "company": "COMTOUR",
-    "email": "alisonnewman@comtour.com",
-    "phone": "+1 (836) 582-3513"
-  },
-  {
-    "_id": "55d2fc86e0070d54d4712ca4",
-    "age": 30,
-    "name": "French Rivera",
-    "gender": "male",
-    "company": "ACUMENTOR",
-    "email": "frenchrivera@acumentor.com",
-    "phone": "+1 (902) 579-2193"
-  },
-  {
-    "_id": "55d2fc860f64b4423a9d6ffc",
-    "age": 38,
-    "name": "Terrell Mendez",
-    "gender": "male",
-    "company": "IMAGINART",
-    "email": "terrellmendez@imaginart.com",
-    "phone": "+1 (967) 494-2713"
-  },
-  {
-    "_id": "55d2fc86548793116b225b3b",
-    "age": 30,
-    "name": "Parsons Robertson",
-    "gender": "male",
-    "company": "OBONES",
-    "email": "parsonsrobertson@obones.com",
-    "phone": "+1 (984) 434-2810"
-  },
-  {
-    "_id": "55d2fc865b8b0d6a59db876c",
-    "age": 33,
-    "name": "Livingston Barry",
-    "gender": "male",
-    "company": "TYPHONICA",
-    "email": "livingstonbarry@typhonica.com",
-    "phone": "+1 (976) 560-3878"
-  },
-  {
-    "_id": "55d2fc865ce23fb8b34cae53",
-    "age": 40,
-    "name": "Valeria Stout",
-    "gender": "female",
-    "company": "AVENETRO",
-    "email": "valeriastout@avenetro.com",
-    "phone": "+1 (885) 557-3624"
-  },
-  {
-    "_id": "55d2fc86c03ea1d6e81563ac",
-    "age": 39,
-    "name": "Grimes Dyer",
-    "gender": "male",
-    "company": "GEOLOGIX",
-    "email": "grimesdyer@geologix.com",
-    "phone": "+1 (896) 533-2919"
-  },
-  {
-    "_id": "55d2fc8655c0acb356a06c8f",
-    "age": 29,
-    "name": "Higgins Short",
-    "gender": "male",
-    "company": "BICOL",
-    "email": "higginsshort@bicol.com",
-    "phone": "+1 (976) 444-3073"
-  },
-  {
-    "_id": "55d2fc865b6db005487c52bb",
-    "age": 34,
-    "name": "Gilmore Campos",
-    "gender": "male",
-    "company": "PASTURIA",
-    "email": "gilmorecampos@pasturia.com",
-    "phone": "+1 (862) 442-2147"
-  },
-  {
-    "_id": "55d2fc863df4791bcb269217",
-    "age": 29,
-    "name": "Sloan Kane",
-    "gender": "male",
-    "company": "XELEGYL",
-    "email": "sloankane@xelegyl.com",
-    "phone": "+1 (946) 526-2275"
-  },
-  {
-    "_id": "55d2fc86b2eb7dedbd5a9e8d",
-    "age": 26,
-    "name": "Mcpherson Thornton",
-    "gender": "male",
-    "company": "KAGE",
-    "email": "mcphersonthornton@kage.com",
-    "phone": "+1 (803) 478-2690"
-  },
-  {
-    "_id": "55d2fc8603f6a8c17148c8dd",
-    "age": 31,
-    "name": "Christi Welch",
-    "gender": "female",
-    "company": "WARETEL",
-    "email": "christiwelch@waretel.com",
-    "phone": "+1 (999) 552-3114"
-  },
-  {
-    "_id": "55d2fc86118d83cb9d06aa2e",
-    "age": 29,
-    "name": "Padilla Travis",
-    "gender": "male",
-    "company": "ENERVATE",
-    "email": "padillatravis@enervate.com",
-    "phone": "+1 (897) 577-3387"
-  },
-  {
-    "_id": "55d2fc86aba06801708bed65",
-    "age": 22,
-    "name": "Stanton Casey",
-    "gender": "male",
-    "company": "BUZZMAKER",
-    "email": "stantoncasey@buzzmaker.com",
-    "phone": "+1 (858) 571-2667"
-  },
-  {
-    "_id": "55d2fc86184810b00043a4b7",
-    "age": 29,
-    "name": "Krista Hernandez",
-    "gender": "female",
-    "company": "BIOHAB",
-    "email": "kristahernandez@biohab.com",
-    "phone": "+1 (832) 510-3654"
-  },
-  {
-    "_id": "55d2fc86e9c951b5bcea3938",
-    "age": 36,
-    "name": "Deleon Oliver",
-    "gender": "male",
-    "company": "NETBOOK",
-    "email": "deleonoliver@netbook.com",
-    "phone": "+1 (934) 504-2964"
-  },
-  {
-    "_id": "55d2fc86923000f3ea91ae38",
-    "age": 36,
-    "name": "Vasquez Fowler",
-    "gender": "male",
-    "company": "ORGANICA",
-    "email": "vasquezfowler@organica.com",
-    "phone": "+1 (949) 546-2722"
-  },
-  {
-    "_id": "55d2fc861e12cd0fa6207a9e",
-    "age": 33,
-    "name": "Rutledge Keith",
-    "gender": "male",
-    "company": "COLAIRE",
-    "email": "rutledgekeith@colaire.com",
-    "phone": "+1 (936) 472-3739"
-  },
-  {
-    "_id": "55d2fc86927eca39ef0c7ae9",
-    "age": 26,
-    "name": "Kirsten Valenzuela",
-    "gender": "female",
-    "company": "SEQUITUR",
-    "email": "kirstenvalenzuela@sequitur.com",
-    "phone": "+1 (958) 564-3259"
-  },
-  {
-    "_id": "55d2fc869e922239ce293d2c",
-    "age": 40,
-    "name": "Garza Gutierrez",
-    "gender": "male",
-    "company": "SPLINX",
-    "email": "garzagutierrez@splinx.com",
-    "phone": "+1 (850) 525-3114"
-  },
-  {
-    "_id": "55d2fc869dd88389d4785283",
-    "age": 27,
-    "name": "Shawna Peck",
-    "gender": "female",
-    "company": "UNQ",
-    "email": "shawnapeck@unq.com",
-    "phone": "+1 (961) 579-3704"
-  },
-  {
-    "_id": "55d2fc86722d8e2a714bf7f2",
-    "age": 23,
-    "name": "Aurelia Mcpherson",
-    "gender": "female",
-    "company": "BOINK",
-    "email": "aureliamcpherson@boink.com",
-    "phone": "+1 (946) 479-2080"
-  },
-  {
-    "_id": "55d2fc862324d173c26dfc68",
-    "age": 39,
-    "name": "Maryellen Daugherty",
-    "gender": "female",
-    "company": "ZILCH",
-    "email": "maryellendaugherty@zilch.com",
-    "phone": "+1 (817) 577-3290"
-  },
-  {
-    "_id": "55d2fc86d311107f869da748",
-    "age": 35,
-    "name": "Zelma Hancock",
-    "gender": "female",
-    "company": "EVENTAGE",
-    "email": "zelmahancock@eventage.com",
-    "phone": "+1 (845) 578-3887"
-  },
-  {
-    "_id": "55d2fc86afb4ede1f20a6d15",
-    "age": 34,
-    "name": "Tessa Adkins",
-    "gender": "female",
-    "company": "CONJURICA",
-    "email": "tessaadkins@conjurica.com",
-    "phone": "+1 (807) 497-2845"
-  },
-  {
-    "_id": "55d2fc8648a2e36d6f97fad1",
-    "age": 22,
-    "name": "Wong Shaffer",
-    "gender": "male",
-    "company": "ACCUFARM",
-    "email": "wongshaffer@accufarm.com",
-    "phone": "+1 (865) 589-3833"
-  },
-  {
-    "_id": "55d2fc86c4c10d58f1fe357f",
-    "age": 32,
-    "name": "Ivy Suarez",
-    "gender": "female",
-    "company": "UNCORP",
-    "email": "ivysuarez@uncorp.com",
-    "phone": "+1 (851) 582-2829"
-  },
-  {
-    "_id": "55d2fc867c11d1885ca4d8f9",
-    "age": 25,
-    "name": "Sosa Barber",
-    "gender": "male",
-    "company": "FUELTON",
-    "email": "sosabarber@fuelton.com",
-    "phone": "+1 (831) 404-2343"
-  },
-  {
-    "_id": "55d2fc866405b373cff4d477",
-    "age": 23,
-    "name": "Rosalind Craft",
-    "gender": "female",
-    "company": "OTHERSIDE",
-    "email": "rosalindcraft@otherside.com",
-    "phone": "+1 (847) 455-2079"
-  },
-  {
-    "_id": "55d2fc863a038b06c712b4b9",
-    "age": 30,
-    "name": "Bean Mathis",
-    "gender": "male",
-    "company": "QUILK",
-    "email": "beanmathis@quilk.com",
-    "phone": "+1 (974) 596-2868"
-  },
-  {
-    "_id": "55d2fc86922e4a50dfef56ac",
-    "age": 21,
-    "name": "Kelley Ruiz",
-    "gender": "female",
-    "company": "APEX",
-    "email": "kelleyruiz@apex.com",
-    "phone": "+1 (889) 522-2938"
-  },
-  {
-    "_id": "55d2fc868c7bf8c05a228366",
-    "age": 22,
-    "name": "Georgette Chaney",
-    "gender": "female",
-    "company": "EXOTECHNO",
-    "email": "georgettechaney@exotechno.com",
-    "phone": "+1 (920) 591-3934"
-  },
-  {
-    "_id": "55d2fc86988c5be0c8ba5412",
-    "age": 38,
-    "name": "Tami Bullock",
-    "gender": "female",
-    "company": "ISOTRONIC",
-    "email": "tamibullock@isotronic.com",
-    "phone": "+1 (828) 567-2857"
-  },
-  {
-    "_id": "55d2fc862264a1d2de2e8a6b",
-    "age": 39,
-    "name": "Castillo Rosario",
-    "gender": "male",
-    "company": "KONNECT",
-    "email": "castillorosario@konnect.com",
-    "phone": "+1 (938) 402-3484"
-  },
-  {
-    "_id": "55d2fc8622ee680ff3c522e1",
-    "age": 31,
-    "name": "George Weber",
-    "gender": "male",
-    "company": "FARMAGE",
-    "email": "georgeweber@farmage.com",
-    "phone": "+1 (895) 502-2654"
-  },
-  {
-    "_id": "55d2fc86a0d45d2916aacb5a",
-    "age": 28,
-    "name": "Wheeler Villarreal",
-    "gender": "male",
-    "company": "IMPERIUM",
-    "email": "wheelervillarreal@imperium.com",
-    "phone": "+1 (889) 507-3796"
-  },
-  {
-    "_id": "55d2fc866c6e8e85c17c61ca",
-    "age": 36,
-    "name": "Arlene Bean",
-    "gender": "female",
-    "company": "UNIA",
-    "email": "arlenebean@unia.com",
-    "phone": "+1 (970) 463-2147"
-  },
-  {
-    "_id": "55d2fc86c3c95fd98562a429",
-    "age": 30,
-    "name": "Oneil Madden",
-    "gender": "male",
-    "company": "COMBOGENE",
-    "email": "oneilmadden@combogene.com",
-    "phone": "+1 (849) 507-3555"
-  },
-  {
-    "_id": "55d2fc86b0f7cc31af45078a",
-    "age": 35,
-    "name": "Vaughn Merritt",
-    "gender": "male",
-    "company": "ACCUPHARM",
-    "email": "vaughnmerritt@accupharm.com",
-    "phone": "+1 (886) 428-2966"
-  },
-  {
-    "_id": "55d2fc86ad825cb66f2a2feb",
-    "age": 21,
-    "name": "Duran Bradford",
-    "gender": "male",
-    "company": "SQUISH",
-    "email": "duranbradford@squish.com",
-    "phone": "+1 (930) 434-2976"
-  },
-  {
-    "_id": "55d2fc86efa80c332066194d",
-    "age": 30,
-    "name": "Tanisha Knox",
-    "gender": "female",
-    "company": "FARMEX",
-    "email": "tanishaknox@farmex.com",
-    "phone": "+1 (924) 540-2066"
-  },
-  {
-    "_id": "55d2fc861dbd55c1fd4bdf23",
-    "age": 38,
-    "name": "Esther Foster",
-    "gender": "female",
-    "company": "SENSATE",
-    "email": "estherfoster@sensate.com",
-    "phone": "+1 (812) 417-2687"
-  },
-  {
-    "_id": "55d2fc86115b9a01067db6ad",
-    "age": 35,
-    "name": "Marion Gray",
-    "gender": "female",
-    "company": "HINWAY",
-    "email": "mariongray@hinway.com",
-    "phone": "+1 (850) 526-2167"
-  },
-  {
-    "_id": "55d2fc864b40086c2e4963e2",
-    "age": 38,
-    "name": "Ava Flowers",
-    "gender": "female",
-    "company": "REVERSUS",
-    "email": "avaflowers@reversus.com",
-    "phone": "+1 (989) 415-2504"
-  },
-  {
-    "_id": "55d2fc8686c59f7395222b11",
-    "age": 35,
-    "name": "Katina Burnett",
-    "gender": "female",
-    "company": "DUFLEX",
-    "email": "katinaburnett@duflex.com",
-    "phone": "+1 (843) 464-3718"
-  },
-  {
-    "_id": "55d2fc86e012c977bc5b57d6",
-    "age": 37,
-    "name": "Ester Cooley",
-    "gender": "female",
-    "company": "RUBADUB",
-    "email": "estercooley@rubadub.com",
-    "phone": "+1 (856) 407-3009"
-  },
-  {
-    "_id": "55d2fc865688875c75a158b5",
-    "age": 36,
-    "name": "Dennis Mccray",
-    "gender": "male",
-    "company": "PETIGEMS",
-    "email": "dennismccray@petigems.com",
-    "phone": "+1 (989) 525-3768"
-  },
-  {
-    "_id": "55d2fc86ca333a1c715a35c7",
-    "age": 25,
-    "name": "Mitzi Carson",
-    "gender": "female",
-    "company": "KENEGY",
-    "email": "mitzicarson@kenegy.com",
-    "phone": "+1 (819) 450-2923"
-  },
-  {
-    "_id": "55d2fc86a8eb68257312e735",
-    "age": 33,
-    "name": "Guthrie Tyson",
-    "gender": "male",
-    "company": "GLUID",
-    "email": "guthrietyson@gluid.com",
-    "phone": "+1 (878) 496-3831"
-  },
-  {
-    "_id": "55d2fc865d4f3b3777fc1573",
-    "age": 38,
-    "name": "Sellers Hodges",
-    "gender": "male",
-    "company": "BALOOBA",
-    "email": "sellershodges@balooba.com",
-    "phone": "+1 (895) 557-2331"
-  },
-  {
-    "_id": "55d2fc860a91cf55298e2a24",
-    "age": 32,
-    "name": "Hawkins Hardin",
-    "gender": "male",
-    "company": "ZILLANET",
-    "email": "hawkinshardin@zillanet.com",
-    "phone": "+1 (852) 511-2796"
-  },
-  {
-    "_id": "55d2fc867b1c618fcb9cb2c3",
-    "age": 26,
-    "name": "Bowman Buck",
-    "gender": "male",
-    "company": "APPLIDEC",
-    "email": "bowmanbuck@applidec.com",
-    "phone": "+1 (995) 500-2863"
-  },
-  {
-    "_id": "55d2fc8666610d156551484b",
-    "age": 23,
-    "name": "Mcgee Delgado",
-    "gender": "male",
-    "company": "MANTRO",
-    "email": "mcgeedelgado@mantro.com",
-    "phone": "+1 (917) 490-2295"
-  },
-  {
-    "_id": "55d2fc8685385c63f5a509b3",
-    "age": 24,
-    "name": "Petty Pena",
-    "gender": "male",
-    "company": "EXOSPEED",
-    "email": "pettypena@exospeed.com",
-    "phone": "+1 (929) 470-2022"
-  },
-  {
-    "_id": "55d2fc864296df53bb778e52",
-    "age": 38,
-    "name": "Ray Mclaughlin",
-    "gender": "male",
-    "company": "PYRAMAX",
-    "email": "raymclaughlin@pyramax.com",
-    "phone": "+1 (935) 453-3720"
-  },
-  {
-    "_id": "55d2fc86b157acc34692412b",
-    "age": 22,
-    "name": "Hopkins Wells",
-    "gender": "male",
-    "company": "NORALEX",
-    "email": "hopkinswells@noralex.com",
-    "phone": "+1 (986) 421-2293"
-  },
-  {
-    "_id": "55d2fc861febd65bb3c91219",
-    "age": 38,
-    "name": "Patsy Strickland",
-    "gender": "female",
-    "company": "POLARIA",
-    "email": "patsystrickland@polaria.com",
-    "phone": "+1 (885) 408-2213"
-  },
-  {
-    "_id": "55d2fc8693fbc24aa2bcc5a8",
-    "age": 31,
-    "name": "Wolf Delaney",
-    "gender": "male",
-    "company": "EXERTA",
-    "email": "wolfdelaney@exerta.com",
-    "phone": "+1 (969) 537-3201"
-  },
-  {
-    "_id": "55d2fc86b923e0543d39fed4",
-    "age": 30,
-    "name": "Fulton Hewitt",
-    "gender": "male",
-    "company": "TWIGGERY",
-    "email": "fultonhewitt@twiggery.com",
-    "phone": "+1 (894) 483-2549"
-  },
-  {
-    "_id": "55d2fc8672aff3d2369b2749",
-    "age": 40,
-    "name": "Nona Meadows",
-    "gender": "female",
-    "company": "ULTRIMAX",
-    "email": "nonameadows@ultrimax.com",
-    "phone": "+1 (997) 459-2012"
-  },
-  {
-    "_id": "55d2fc86a3b6922e61cdcd72",
-    "age": 24,
-    "name": "Irwin Russo",
-    "gender": "male",
-    "company": "QUINTITY",
-    "email": "irwinrusso@quintity.com",
-    "phone": "+1 (985) 597-3841"
-  },
-  {
-    "_id": "55d2fc86c28f4a90a41581b7",
-    "age": 34,
-    "name": "Mara Bowman",
-    "gender": "female",
-    "company": "ATOMICA",
-    "email": "marabowman@atomica.com",
-    "phone": "+1 (927) 578-2958"
-  },
-  {
-    "_id": "55d2fc86ef827e1bbb5b3ceb",
-    "age": 40,
-    "name": "Leigh Schroeder",
-    "gender": "female",
-    "company": "ZIORE",
-    "email": "leighschroeder@ziore.com",
-    "phone": "+1 (963) 484-2519"
-  },
-  {
-    "_id": "55d2fc86921329e8e044472a",
-    "age": 27,
-    "name": "Sweeney Riddle",
-    "gender": "male",
-    "company": "ELITA",
-    "email": "sweeneyriddle@elita.com",
-    "phone": "+1 (974) 536-2132"
-  },
-  {
-    "_id": "55d2fc864b6067f7d828f1ba",
-    "age": 23,
-    "name": "Bell Kline",
-    "gender": "male",
-    "company": "ORBOID",
-    "email": "bellkline@orboid.com",
-    "phone": "+1 (827) 461-3466"
-  },
-  {
-    "_id": "55d2fc86a541995fa67027ae",
-    "age": 20,
-    "name": "Morgan Aguirre",
-    "gender": "female",
-    "company": "AEORA",
-    "email": "morganaguirre@aeora.com",
-    "phone": "+1 (987) 494-2357"
-  },
-  {
-    "_id": "55d2fc86af8d98e486bda0f5",
-    "age": 24,
-    "name": "Morrison Mcbride",
-    "gender": "male",
-    "company": "TECHMANIA",
-    "email": "morrisonmcbride@techmania.com",
-    "phone": "+1 (994) 470-2394"
-  },
-  {
-    "_id": "55d2fc86371a2691da434cdd",
-    "age": 22,
-    "name": "Miles Salinas",
-    "gender": "male",
-    "company": "RODEOLOGY",
-    "email": "milessalinas@rodeology.com",
-    "phone": "+1 (898) 461-3008"
-  },
-  {
-    "_id": "55d2fc865196aa926884d957",
-    "age": 36,
-    "name": "Lang Riggs",
-    "gender": "male",
-    "company": "PHOTOBIN",
-    "email": "langriggs@photobin.com",
-    "phone": "+1 (849) 503-2335"
-  },
-  {
-    "_id": "55d2fc86b4e30cd686840e28",
-    "age": 30,
-    "name": "Kathy Phelps",
-    "gender": "female",
-    "company": "INTRAWEAR",
-    "email": "kathyphelps@intrawear.com",
-    "phone": "+1 (992) 499-2474"
-  },
-  {
-    "_id": "55d2fc86f09accb089f91415",
-    "age": 24,
-    "name": "Moss Jimenez",
-    "gender": "male",
-    "company": "PROFLEX",
-    "email": "mossjimenez@proflex.com",
-    "phone": "+1 (842) 546-3491"
-  },
-  {
-    "_id": "55d2fc86e3ba881a25584928",
-    "age": 20,
-    "name": "Moody Sexton",
-    "gender": "male",
-    "company": "CENTREGY",
-    "email": "moodysexton@centregy.com",
-    "phone": "+1 (856) 581-3293"
-  },
-  {
-    "_id": "55d2fc861c85cf26c6d21a64",
-    "age": 31,
-    "name": "Nannie Price",
-    "gender": "female",
-    "company": "GEOSTELE",
-    "email": "nannieprice@geostele.com",
-    "phone": "+1 (936) 447-3486"
-  },
-  {
-    "_id": "55d2fc86f1e23452254fda91",
-    "age": 32,
-    "name": "Summer Johnston",
-    "gender": "female",
-    "company": "EXTRAGENE",
-    "email": "summerjohnston@extragene.com",
-    "phone": "+1 (808) 508-2748"
-  },
-  {
-    "_id": "55d2fc86940fcc0f17d5f213",
-    "age": 24,
-    "name": "Genevieve Lynch",
-    "gender": "female",
-    "company": "COREPAN",
-    "email": "genevievelynch@corepan.com",
-    "phone": "+1 (921) 532-2893"
-  },
-  {
-    "_id": "55d2fc86cdf6056cd058466c",
-    "age": 23,
-    "name": "Stuart Oconnor",
-    "gender": "male",
-    "company": "PUSHCART",
-    "email": "stuartoconnor@pushcart.com",
-    "phone": "+1 (925) 515-3434"
-  },
-  {
-    "_id": "55d2fc863bca896e3e2ac1a7",
-    "age": 21,
-    "name": "Adela Nieves",
-    "gender": "female",
-    "company": "MEDICROIX",
-    "email": "adelanieves@medicroix.com",
-    "phone": "+1 (910) 568-3916"
-  },
-  {
-    "_id": "55d2fc86826d7c7fcfc2562e",
-    "age": 28,
-    "name": "Eaton Mcintosh",
-    "gender": "male",
-    "company": "MEGALL",
-    "email": "eatonmcintosh@megall.com",
-    "phone": "+1 (806) 440-2196"
-  },
-  {
-    "_id": "55d2fc863d76c0458de8afb2",
-    "age": 35,
-    "name": "Sharron Hood",
-    "gender": "female",
-    "company": "UTARIAN",
-    "email": "sharronhood@utarian.com",
-    "phone": "+1 (824) 477-3364"
-  },
-  {
-    "_id": "55d2fc86c0f317fe0cdd6f66",
-    "age": 24,
-    "name": "Allison Osborn",
-    "gender": "female",
-    "company": "TUBALUM",
-    "email": "allisonosborn@tubalum.com",
-    "phone": "+1 (913) 546-3966"
-  },
-  {
-    "_id": "55d2fc86e1521a5a9896e0fa",
-    "age": 38,
-    "name": "Chelsea Jarvis",
-    "gender": "female",
-    "company": "SOPRANO",
-    "email": "chelseajarvis@soprano.com",
-    "phone": "+1 (834) 417-2904"
-  },
-  {
-    "_id": "55d2fc86a5f4df72a31c9201",
-    "age": 22,
-    "name": "Finley Freeman",
-    "gender": "male",
-    "company": "COMBOT",
-    "email": "finleyfreeman@combot.com",
-    "phone": "+1 (886) 448-2820"
-  },
-  {
-    "_id": "55d2fc86c4c2c783570c50eb",
-    "age": 31,
-    "name": "Lynn Miles",
-    "gender": "female",
-    "company": "ZENTIX",
-    "email": "lynnmiles@zentix.com",
-    "phone": "+1 (891) 450-2505"
-  },
-  {
-    "_id": "55d2fc863e649b4a99367f40",
-    "age": 39,
-    "name": "Montoya Greene",
-    "gender": "male",
-    "company": "MEMORA",
-    "email": "montoyagreene@memora.com",
-    "phone": "+1 (809) 402-3541"
-  },
-  {
-    "_id": "55d2fc86b82e96b2275df9f3",
-    "age": 28,
-    "name": "Castro Huff",
-    "gender": "male",
-    "company": "BLUPLANET",
-    "email": "castrohuff@bluplanet.com",
-    "phone": "+1 (966) 554-2469"
-  },
-  {
-    "_id": "55d2fc86f4a8a7700a99e31c",
-    "age": 23,
-    "name": "Guadalupe Harmon",
-    "gender": "female",
-    "company": "ISOLOGIA",
-    "email": "guadalupeharmon@isologia.com",
-    "phone": "+1 (937) 497-2022"
-  },
-  {
-    "_id": "55d2fc86551e7044f31f2520",
-    "age": 25,
-    "name": "Heidi Navarro",
-    "gender": "female",
-    "company": "POLARIUM",
-    "email": "heidinavarro@polarium.com",
-    "phone": "+1 (830) 493-3328"
-  },
-  {
-    "_id": "55d2fc861ee43e4303351a4b",
-    "age": 25,
-    "name": "Fry Webster",
-    "gender": "male",
-    "company": "RENOVIZE",
-    "email": "frywebster@renovize.com",
-    "phone": "+1 (960) 600-3488"
-  },
-  {
-    "_id": "55d2fc86e0d6778a1c6d7195",
-    "age": 35,
-    "name": "Candice Sharpe",
-    "gender": "female",
-    "company": "UNDERTAP",
-    "email": "candicesharpe@undertap.com",
-    "phone": "+1 (989) 436-2856"
-  },
-  {
-    "_id": "55d2fc86267005541d225276",
-    "age": 25,
-    "name": "Vonda Hansen",
-    "gender": "female",
-    "company": "PROVIDCO",
-    "email": "vondahansen@providco.com",
-    "phone": "+1 (883) 484-2047"
-  },
-  {
-    "_id": "55d2fc8605000bc9329d28e0",
-    "age": 21,
-    "name": "Lara Dominguez",
-    "gender": "male",
-    "company": "VIXO",
-    "email": "laradominguez@vixo.com",
-    "phone": "+1 (998) 440-3632"
-  },
-  {
-    "_id": "55d2fc868b364833d935b192",
-    "age": 36,
-    "name": "Jillian Gibbs",
-    "gender": "female",
-    "company": "CUIZINE",
-    "email": "jilliangibbs@cuizine.com",
-    "phone": "+1 (996) 447-3083"
-  },
-  {
-    "_id": "55d2fc863690a0784d2e8bc1",
-    "age": 35,
-    "name": "Frankie Cervantes",
-    "gender": "female",
-    "company": "ISODRIVE",
-    "email": "frankiecervantes@isodrive.com",
-    "phone": "+1 (895) 533-2371"
-  },
-  {
-    "_id": "55d2fc86efb91d645101592f",
-    "age": 36,
-    "name": "Nieves Walton",
-    "gender": "male",
-    "company": "ZILPHUR",
-    "email": "nieveswalton@zilphur.com",
-    "phone": "+1 (866) 412-2377"
-  },
-  {
-    "_id": "55d2fc86cba2fb0dfd9eb8c3",
-    "age": 38,
-    "name": "Celina Orr",
-    "gender": "female",
-    "company": "COMVEX",
-    "email": "celinaorr@comvex.com",
-    "phone": "+1 (960) 433-2380"
-  },
-  {
-    "_id": "55d2fc8650eaf118ae048bce",
-    "age": 33,
-    "name": "Moreno Conway",
-    "gender": "male",
-    "company": "VIOCULAR",
-    "email": "morenoconway@viocular.com",
-    "phone": "+1 (808) 535-2624"
-  },
-  {
-    "_id": "55d2fc860e41c77df0ea1151",
-    "age": 33,
-    "name": "Wilkerson Dodson",
-    "gender": "male",
-    "company": "COMTRAK",
-    "email": "wilkersondodson@comtrak.com",
-    "phone": "+1 (932) 427-2400"
-  },
-  {
-    "_id": "55d2fc86175167613833c577",
-    "age": 21,
-    "name": "Crane Lloyd",
-    "gender": "male",
-    "company": "ARCHITAX",
-    "email": "cranelloyd@architax.com",
-    "phone": "+1 (984) 467-3498"
-  },
-  {
-    "_id": "55d2fc863aa593013e09d04b",
-    "age": 25,
-    "name": "Marguerite Dorsey",
-    "gender": "female",
-    "company": "UNI",
-    "email": "margueritedorsey@uni.com",
-    "phone": "+1 (989) 558-2105"
-  },
-  {
-    "_id": "55d2fc86248902726f0d1c53",
-    "age": 35,
-    "name": "Dillon William",
-    "gender": "male",
-    "company": "ROOFORIA",
-    "email": "dillonwilliam@rooforia.com",
-    "phone": "+1 (879) 600-3589"
-  },
-  {
-    "_id": "55d2fc86caa1b7374cd83a72",
-    "age": 32,
-    "name": "Small Floyd",
-    "gender": "male",
-    "company": "ANACHO",
-    "email": "smallfloyd@anacho.com",
-    "phone": "+1 (906) 463-2357"
-  },
-  {
-    "_id": "55d2fc86c086267c74616688",
-    "age": 32,
-    "name": "Dominique Horn",
-    "gender": "female",
-    "company": "ENTOGROK",
-    "email": "dominiquehorn@entogrok.com",
-    "phone": "+1 (871) 556-2943"
-  },
-  {
-    "_id": "55d2fc86d3f7731c49d48fa7",
-    "age": 35,
-    "name": "Haley Shannon",
-    "gender": "female",
-    "company": "UNEEQ",
-    "email": "haleyshannon@uneeq.com",
-    "phone": "+1 (984) 471-3688"
-  },
-  {
-    "_id": "55d2fc8678e81807871b2b13",
-    "age": 24,
-    "name": "Flowers Richards",
-    "gender": "male",
-    "company": "QUILITY",
-    "email": "flowersrichards@quility.com",
-    "phone": "+1 (956) 548-3667"
-  },
-  {
-    "_id": "55d2fc86b4b462a2743c10d3",
-    "age": 33,
-    "name": "Hopper Rush",
-    "gender": "male",
-    "company": "VERBUS",
-    "email": "hopperrush@verbus.com",
-    "phone": "+1 (866) 578-2948"
-  },
-  {
-    "_id": "55d2fc86d660e6f5bf9c1ce1",
-    "age": 31,
-    "name": "Randall Kelley",
-    "gender": "male",
-    "company": "INSURON",
-    "email": "randallkelley@insuron.com",
-    "phone": "+1 (922) 520-3464"
-  },
-  {
-    "_id": "55d2fc86e70ad03e58c3e01f",
-    "age": 36,
-    "name": "Owens Drake",
-    "gender": "male",
-    "company": "FROLIX",
-    "email": "owensdrake@frolix.com",
-    "phone": "+1 (982) 516-3575"
-  },
-  {
-    "_id": "55d2fc86ef78c8ad566afe4f",
-    "age": 28,
-    "name": "Irma Garrison",
-    "gender": "female",
-    "company": "EXOZENT",
-    "email": "irmagarrison@exozent.com",
-    "phone": "+1 (882) 536-2614"
-  },
-  {
-    "_id": "55d2fc8675d6b4b33c5e482f",
-    "age": 34,
-    "name": "Baldwin Carver",
-    "gender": "male",
-    "company": "PHEAST",
-    "email": "baldwincarver@pheast.com",
-    "phone": "+1 (824) 521-2892"
-  },
-  {
-    "_id": "55d2fc86d382b214a715305f",
-    "age": 23,
-    "name": "Short Harding",
-    "gender": "male",
-    "company": "LIQUICOM",
-    "email": "shortharding@liquicom.com",
-    "phone": "+1 (836) 578-2063"
-  },
-  {
-    "_id": "55d2fc860420ee3ca95e2166",
-    "age": 35,
-    "name": "Christy Roberson",
-    "gender": "female",
-    "company": "BITREX",
-    "email": "christyroberson@bitrex.com",
-    "phone": "+1 (840) 426-2954"
-  },
-  {
-    "_id": "55d2fc86dd67ce4e4f7b6d0c",
-    "age": 21,
-    "name": "Fern Knight",
-    "gender": "female",
-    "company": "ENTROPIX",
-    "email": "fernknight@entropix.com",
-    "phone": "+1 (944) 546-2456"
-  },
-  {
-    "_id": "55d2fc8651510fb366709f12",
-    "age": 40,
-    "name": "Elva Taylor",
-    "gender": "female",
-    "company": "COMFIRM",
-    "email": "elvataylor@comfirm.com",
-    "phone": "+1 (834) 468-2999"
-  },
-  {
-    "_id": "55d2fc869603515857919a7c",
-    "age": 26,
-    "name": "Carmen Bentley",
-    "gender": "female",
-    "company": "LIMAGE",
-    "email": "carmenbentley@limage.com",
-    "phone": "+1 (882) 425-3588"
-  },
-  {
-    "_id": "55d2fc860991d6904808f8b3",
-    "age": 28,
-    "name": "Blair Dunn",
-    "gender": "male",
-    "company": "ESSENSIA",
-    "email": "blairdunn@essensia.com",
-    "phone": "+1 (896) 477-2617"
-  },
-  {
-    "_id": "55d2fc862c99e4fefd17ab8d",
-    "age": 23,
-    "name": "Minerva Swanson",
-    "gender": "female",
-    "company": "EMTRAC",
-    "email": "minervaswanson@emtrac.com",
-    "phone": "+1 (905) 427-3942"
-  },
-  {
-    "_id": "55d2fc86a2b4277d171e6ed6",
-    "age": 40,
-    "name": "Alicia Lawrence",
-    "gender": "female",
-    "company": "CONCILITY",
-    "email": "alicialawrence@concility.com",
-    "phone": "+1 (903) 452-2010"
-  },
-  {
-    "_id": "55d2fc86f98eb74fe02a49f5",
-    "age": 33,
-    "name": "Bernice Fitzpatrick",
-    "gender": "female",
-    "company": "JASPER",
-    "email": "bernicefitzpatrick@jasper.com",
-    "phone": "+1 (987) 518-2248"
-  },
-  {
-    "_id": "55d2fc86070af0b0109b6a4c",
-    "age": 20,
-    "name": "Wilder Blackburn",
-    "gender": "male",
-    "company": "ZENTILITY",
-    "email": "wilderblackburn@zentility.com",
-    "phone": "+1 (921) 548-2995"
-  },
-  {
-    "_id": "55d2fc86249796ecd0b25829",
-    "age": 25,
-    "name": "Lambert Wilson",
-    "gender": "male",
-    "company": "ANIVET",
-    "email": "lambertwilson@anivet.com",
-    "phone": "+1 (920) 592-2261"
-  },
-  {
-    "_id": "55d2fc863c6bdb691f62bdf4",
-    "age": 24,
-    "name": "Cook Lee",
-    "gender": "male",
-    "company": "ZILLADYNE",
-    "email": "cooklee@zilladyne.com",
-    "phone": "+1 (812) 566-2988"
-  },
-  {
-    "_id": "55d2fc86cdeae66cf4fe6582",
-    "age": 29,
-    "name": "Karyn Horne",
-    "gender": "female",
-    "company": "OBLIQ",
-    "email": "karynhorne@obliq.com",
-    "phone": "+1 (909) 452-3599"
-  },
-  {
-    "_id": "55d2fc86bcbabc9eb159e1e4",
-    "age": 23,
-    "name": "Rowe Stokes",
-    "gender": "male",
-    "company": "ANDERSHUN",
-    "email": "rowestokes@andershun.com",
-    "phone": "+1 (948) 531-2335"
-  },
-  {
-    "_id": "55d2fc86a1b344b621d41baa",
-    "age": 27,
-    "name": "Gonzalez Merrill",
-    "gender": "male",
-    "company": "PLAYCE",
-    "email": "gonzalezmerrill@playce.com",
-    "phone": "+1 (989) 418-3057"
-  },
-  {
-    "_id": "55d2fc86300074c184103b47",
-    "age": 33,
-    "name": "Kathie Preston",
-    "gender": "female",
-    "company": "LUMBREX",
-    "email": "kathiepreston@lumbrex.com",
-    "phone": "+1 (911) 586-3177"
-  },
-  {
-    "_id": "55d2fc8646059e576c41ed1f",
-    "age": 26,
-    "name": "Antoinette Stevens",
-    "gender": "female",
-    "company": "APEXIA",
-    "email": "antoinettestevens@apexia.com",
-    "phone": "+1 (828) 597-3083"
-  },
-  {
-    "_id": "55d2fc86b5ec5743baacc091",
-    "age": 22,
-    "name": "Schmidt Morton",
-    "gender": "male",
-    "company": "NORSUL",
-    "email": "schmidtmorton@norsul.com",
-    "phone": "+1 (821) 530-2454"
-  },
-  {
-    "_id": "55d2fc86a521743243b01d2b",
-    "age": 37,
-    "name": "Joyner Wise",
-    "gender": "male",
-    "company": "MANGELICA",
-    "email": "joynerwise@mangelica.com",
-    "phone": "+1 (884) 448-3942"
-  },
-  {
-    "_id": "55d2fc86d7c827b5ded4027f",
-    "age": 22,
-    "name": "Carpenter Carey",
-    "gender": "male",
-    "company": "CENTICE",
-    "email": "carpentercarey@centice.com",
-    "phone": "+1 (823) 585-2581"
-  },
-  {
-    "_id": "55d2fc866866bf441f74abdf",
-    "age": 34,
-    "name": "Luz Hays",
-    "gender": "female",
-    "company": "KONGENE",
-    "email": "luzhays@kongene.com",
-    "phone": "+1 (999) 558-2282"
-  },
-  {
-    "_id": "55d2fc86af95d619737eccb7",
-    "age": 27,
-    "name": "Lesley Frye",
-    "gender": "female",
-    "company": "SUREMAX",
-    "email": "lesleyfrye@suremax.com",
-    "phone": "+1 (982) 485-2811"
-  },
-  {
-    "_id": "55d2fc86b41a0594552e4839",
-    "age": 31,
-    "name": "Jacqueline Ramsey",
-    "gender": "female",
-    "company": "LYRIA",
-    "email": "jacquelineramsey@lyria.com",
-    "phone": "+1 (961) 581-2500"
-  },
-  {
-    "_id": "55d2fc8682aa54548863d4b1",
-    "age": 31,
-    "name": "Ina Ford",
-    "gender": "female",
-    "company": "ENERSOL",
-    "email": "inaford@enersol.com",
-    "phone": "+1 (895) 514-3441"
-  },
-  {
-    "_id": "55d2fc866bc796d86ebd697b",
-    "age": 22,
-    "name": "Francisca Ashley",
-    "gender": "female",
-    "company": "SIGNIDYNE",
-    "email": "franciscaashley@signidyne.com",
-    "phone": "+1 (911) 566-2135"
-  },
-  {
-    "_id": "55d2fc868ccc122c6a517033",
-    "age": 34,
-    "name": "Morton Owen",
-    "gender": "male",
-    "company": "SHOPABOUT",
-    "email": "mortonowen@shopabout.com",
-    "phone": "+1 (932) 576-3821"
-  },
-  {
-    "_id": "55d2fc86751e661b56e6e3cd",
-    "age": 36,
-    "name": "Weber Manning",
-    "gender": "male",
-    "company": "CENTREE",
-    "email": "webermanning@centree.com",
-    "phone": "+1 (865) 582-3809"
-  },
-  {
-    "_id": "55d2fc8620b9766f76797a13",
-    "age": 37,
-    "name": "Edwards Steele",
-    "gender": "male",
-    "company": "KATAKANA",
-    "email": "edwardssteele@katakana.com",
-    "phone": "+1 (959) 402-3657"
-  },
-  {
-    "_id": "55d2fc860a13152e82b74839",
-    "age": 38,
-    "name": "Gabriela Boone",
-    "gender": "female",
-    "company": "OVOLO",
-    "email": "gabrielaboone@ovolo.com",
-    "phone": "+1 (910) 587-2744"
-  },
-  {
-    "_id": "55d2fc864e9ca8a988600768",
-    "age": 32,
-    "name": "Tricia Guy",
-    "gender": "female",
-    "company": "TALKOLA",
-    "email": "triciaguy@talkola.com",
-    "phone": "+1 (960) 474-3508"
-  },
-  {
-    "_id": "55d2fc86ce61b77671fd1f33",
-    "age": 32,
-    "name": "James Romero",
-    "gender": "female",
-    "company": "CANDECOR",
-    "email": "jamesromero@candecor.com",
-    "phone": "+1 (928) 478-3272"
-  },
-  {
-    "_id": "55d2fc86f3cc105e20a44aa9",
-    "age": 25,
-    "name": "Casey Hammond",
-    "gender": "male",
-    "company": "PYRAMIA",
-    "email": "caseyhammond@pyramia.com",
-    "phone": "+1 (965) 539-2923"
-  },
-  {
-    "_id": "55d2fc86429d859d9e54585f",
-    "age": 33,
-    "name": "Moran Wade",
-    "gender": "male",
-    "company": "BUGSALL",
-    "email": "moranwade@bugsall.com",
-    "phone": "+1 (996) 559-2965"
-  },
-  {
-    "_id": "55d2fc86820b562eff651ebc",
-    "age": 34,
-    "name": "Earline Goff",
-    "gender": "female",
-    "company": "DATAGENE",
-    "email": "earlinegoff@datagene.com",
-    "phone": "+1 (976) 565-3513"
-  },
-  {
-    "_id": "55d2fc865f6176e8301edcf3",
-    "age": 38,
-    "name": "Vickie Cherry",
-    "gender": "female",
-    "company": "SILODYNE",
-    "email": "vickiecherry@silodyne.com",
-    "phone": "+1 (943) 522-2438"
-  },
-  {
-    "_id": "55d2fc8633cb19840995984c",
-    "age": 30,
-    "name": "Yates Avery",
-    "gender": "male",
-    "company": "DIGINETIC",
-    "email": "yatesavery@diginetic.com",
-    "phone": "+1 (813) 587-3611"
-  },
-  {
-    "_id": "55d2fc8677d1a1c749d498eb",
-    "age": 24,
-    "name": "Hodges Langley",
-    "gender": "male",
-    "company": "QUOTEZART",
-    "email": "hodgeslangley@quotezart.com",
-    "phone": "+1 (857) 496-3905"
-  },
-  {
-    "_id": "55d2fc86f49e5ceca6ff241d",
-    "age": 35,
-    "name": "Serrano Bartlett",
-    "gender": "male",
-    "company": "EXOSWITCH",
-    "email": "serranobartlett@exoswitch.com",
-    "phone": "+1 (809) 421-3677"
-  },
-  {
-    "_id": "55d2fc86cd4921dcf0316691",
-    "age": 28,
-    "name": "Faye Wood",
-    "gender": "female",
-    "company": "EXOTERIC",
-    "email": "fayewood@exoteric.com",
-    "phone": "+1 (840) 417-2329"
-  },
-  {
-    "_id": "55d2fc8697911f7ca9adfe37",
-    "age": 38,
-    "name": "Jamie Jennings",
-    "gender": "female",
-    "company": "SURETECH",
-    "email": "jamiejennings@suretech.com",
-    "phone": "+1 (945) 599-3768"
-  },
-  {
-    "_id": "55d2fc8614e0225c06b40348",
-    "age": 34,
-    "name": "Levy Sellers",
-    "gender": "male",
-    "company": "STELAECOR",
-    "email": "levysellers@stelaecor.com",
-    "phone": "+1 (805) 519-2578"
-  },
-  {
-    "_id": "55d2fc8635986d3994af8adc",
-    "age": 36,
-    "name": "Kelsey Montgomery",
-    "gender": "female",
-    "company": "IMANT",
-    "email": "kelseymontgomery@imant.com",
-    "phone": "+1 (894) 555-3420"
-  },
-  {
-    "_id": "55d2fc8624dfa620d7b8a991",
-    "age": 33,
-    "name": "Rush Gates",
-    "gender": "male",
-    "company": "DIGIAL",
-    "email": "rushgates@digial.com",
-    "phone": "+1 (891) 477-2651"
-  },
-  {
-    "_id": "55d2fc862d52fe806312e6dd",
-    "age": 40,
-    "name": "Holloway Gay",
-    "gender": "male",
-    "company": "EARTHMARK",
-    "email": "hollowaygay@earthmark.com",
-    "phone": "+1 (811) 540-3123"
-  },
-  {
-    "_id": "55d2fc86a168313cea778ac0",
-    "age": 20,
-    "name": "Cotton Jackson",
-    "gender": "male",
-    "company": "ZOLARITY",
-    "email": "cottonjackson@zolarity.com",
-    "phone": "+1 (980) 445-3468"
-  },
-  {
-    "_id": "55d2fc86577d2794043213ea",
-    "age": 38,
-    "name": "Lakeisha Blanchard",
-    "gender": "female",
-    "company": "SPEEDBOLT",
-    "email": "lakeishablanchard@speedbolt.com",
-    "phone": "+1 (839) 406-2400"
-  },
-  {
-    "_id": "55d2fc8609e2760d5cc298f1",
-    "age": 39,
-    "name": "Alford Church",
-    "gender": "male",
-    "company": "GADTRON",
-    "email": "alfordchurch@gadtron.com",
-    "phone": "+1 (869) 400-2097"
-  },
-  {
-    "_id": "55d2fc867e4a904c96668e08",
-    "age": 30,
-    "name": "Collins Carlson",
-    "gender": "male",
-    "company": "EVEREST",
-    "email": "collinscarlson@everest.com",
-    "phone": "+1 (944) 580-3905"
-  },
-  {
-    "_id": "55d2fc86ddb3ea916627267a",
-    "age": 33,
-    "name": "Cain Hester",
-    "gender": "male",
-    "company": "IMMUNICS",
-    "email": "cainhester@immunics.com",
-    "phone": "+1 (899) 586-2934"
-  },
-  {
-    "_id": "55d2fc86ffaa0a8952d1a400",
-    "age": 23,
-    "name": "Mia Baird",
-    "gender": "female",
-    "company": "NIPAZ",
-    "email": "miabaird@nipaz.com",
-    "phone": "+1 (940) 569-2850"
-  },
-  {
-    "_id": "55d2fc865f259364ad5b4fff",
-    "age": 25,
-    "name": "Ramona Ewing",
-    "gender": "female",
-    "company": "COMTEST",
-    "email": "ramonaewing@comtest.com",
-    "phone": "+1 (879) 546-2754"
-  },
-  {
-    "_id": "55d2fc862d6af75d6794bef5",
-    "age": 34,
-    "name": "Delacruz Goodwin",
-    "gender": "male",
-    "company": "SLOGANAUT",
-    "email": "delacruzgoodwin@sloganaut.com",
-    "phone": "+1 (928) 477-2688"
-  },
-  {
-    "_id": "55d2fc86e34b19d6fd2ae261",
-    "age": 38,
-    "name": "Mcleod Moody",
-    "gender": "male",
-    "company": "ECRAZE",
-    "email": "mcleodmoody@ecraze.com",
-    "phone": "+1 (989) 598-3350"
-  },
-  {
-    "_id": "55d2fc8608e305ebd55e0bac",
-    "age": 34,
-    "name": "Maddox Calhoun",
-    "gender": "male",
-    "company": "TELEPARK",
-    "email": "maddoxcalhoun@telepark.com",
-    "phone": "+1 (815) 593-3540"
-  },
-  {
-    "_id": "55d2fc869e175ca83d7d6597",
-    "age": 36,
-    "name": "Cora Dale",
-    "gender": "female",
-    "company": "ZILLACTIC",
-    "email": "coradale@zillactic.com",
-    "phone": "+1 (866) 545-3632"
-  },
-  {
-    "_id": "55d2fc861968b039322cb743",
-    "age": 27,
-    "name": "Knapp Miranda",
-    "gender": "male",
-    "company": "TOYLETRY",
-    "email": "knappmiranda@toyletry.com",
-    "phone": "+1 (835) 591-3111"
-  },
-  {
-    "_id": "55d2fc86423f7b5a304d2175",
-    "age": 32,
-    "name": "Ida Petersen",
-    "gender": "female",
-    "company": "BILLMED",
-    "email": "idapetersen@billmed.com",
-    "phone": "+1 (898) 492-2148"
-  },
-  {
-    "_id": "55d2fc862cfd92eb67375bba",
-    "age": 37,
-    "name": "Concepcion Wilcox",
-    "gender": "female",
-    "company": "MAXEMIA",
-    "email": "concepcionwilcox@maxemia.com",
-    "phone": "+1 (812) 516-2631"
-  },
-  {
-    "_id": "55d2fc8695ffe246079f8f0c",
-    "age": 40,
-    "name": "Corine Daniel",
-    "gender": "female",
-    "company": "MEDCOM",
-    "email": "corinedaniel@medcom.com",
-    "phone": "+1 (991) 483-2257"
-  },
-  {
-    "_id": "55d2fc861f1ff641b3aa7ee5",
-    "age": 31,
-    "name": "Latasha Byers",
-    "gender": "female",
-    "company": "RUGSTARS",
-    "email": "latashabyers@rugstars.com",
-    "phone": "+1 (817) 542-3231"
-  },
-  {
-    "_id": "55d2fc86724fbfd025371582",
-    "age": 31,
-    "name": "Gayle Barrett",
-    "gender": "female",
-    "company": "PARAGONIA",
-    "email": "gaylebarrett@paragonia.com",
-    "phone": "+1 (870) 547-2454"
-  },
-  {
-    "_id": "55d2fc869add6e70699650fa",
-    "age": 40,
-    "name": "Angelina Tyler",
-    "gender": "female",
-    "company": "VIRVA",
-    "email": "angelinatyler@virva.com",
-    "phone": "+1 (960) 425-3784"
-  },
-  {
-    "_id": "55d2fc864c12d18424ac35be",
-    "age": 27,
-    "name": "Ratliff Franks",
-    "gender": "male",
-    "company": "CEMENTION",
-    "email": "ratlifffranks@cemention.com",
-    "phone": "+1 (958) 424-2396"
-  },
-  {
-    "_id": "55d2fc86bad0be82f6e2f83b",
-    "age": 40,
-    "name": "Landry Zimmerman",
-    "gender": "male",
-    "company": "JETSILK",
-    "email": "landryzimmerman@jetsilk.com",
-    "phone": "+1 (947) 573-2755"
-  },
-  {
-    "_id": "55d2fc86b56ff40ff0ed70e3",
-    "age": 23,
-    "name": "Greta West",
-    "gender": "female",
-    "company": "UBERLUX",
-    "email": "gretawest@uberlux.com",
-    "phone": "+1 (995) 542-3886"
-  },
-  {
-    "_id": "55d2fc8667dfd03049bf08eb",
-    "age": 30,
-    "name": "Camacho Nelson",
-    "gender": "male",
-    "company": "KYAGORO",
-    "email": "camachonelson@kyagoro.com",
-    "phone": "+1 (881) 500-3970"
-  },
-  {
-    "_id": "55d2fc865458ecf3d2995a63",
-    "age": 36,
-    "name": "June Turner",
-    "gender": "female",
-    "company": "RECOGNIA",
-    "email": "juneturner@recognia.com",
-    "phone": "+1 (976) 466-2777"
-  },
-  {
-    "_id": "55d2fc8682f4304f0889c829",
-    "age": 31,
-    "name": "Mckinney Stark",
-    "gender": "male",
-    "company": "OPTICOM",
-    "email": "mckinneystark@opticom.com",
-    "phone": "+1 (951) 500-3946"
-  },
-  {
-    "_id": "55d2fc86ff8211995849d831",
-    "age": 20,
-    "name": "Hammond Fletcher",
-    "gender": "male",
-    "company": "ERSUM",
-    "email": "hammondfletcher@ersum.com",
-    "phone": "+1 (974) 541-3273"
-  },
-  {
-    "_id": "55d2fc86a9792a08912bdb8e",
-    "age": 23,
-    "name": "White Fischer",
-    "gender": "male",
-    "company": "REALMO",
-    "email": "whitefischer@realmo.com",
-    "phone": "+1 (963) 533-2428"
-  },
-  {
-    "_id": "55d2fc86c5ba8287455030be",
-    "age": 36,
-    "name": "Kimberly Mcguire",
-    "gender": "female",
-    "company": "TETAK",
-    "email": "kimberlymcguire@tetak.com",
-    "phone": "+1 (846) 410-3414"
-  },
-  {
-    "_id": "55d2fc862a665bca942115f3",
-    "age": 35,
-    "name": "Sara Hurst",
-    "gender": "female",
-    "company": "FORTEAN",
-    "email": "sarahurst@fortean.com",
-    "phone": "+1 (857) 530-3627"
-  },
-  {
-    "_id": "55d2fc86b72bee240f10055e",
-    "age": 29,
-    "name": "Chandler English",
-    "gender": "male",
-    "company": "PAPRICUT",
-    "email": "chandlerenglish@papricut.com",
-    "phone": "+1 (978) 582-2348"
-  },
-  {
-    "_id": "55d2fc861c2bccedeac29892",
-    "age": 29,
-    "name": "Waters Riley",
-    "gender": "male",
-    "company": "ECSTASIA",
-    "email": "watersriley@ecstasia.com",
-    "phone": "+1 (842) 579-3426"
-  },
-  {
-    "_id": "55d2fc86526f36994de2038a",
-    "age": 34,
-    "name": "Wood Gomez",
-    "gender": "male",
-    "company": "ASSITIA",
-    "email": "woodgomez@assitia.com",
-    "phone": "+1 (954) 565-2413"
-  },
-  {
-    "_id": "55d2fc86bec8fe1e60977c9c",
-    "age": 31,
-    "name": "Fields Decker",
-    "gender": "male",
-    "company": "EMERGENT",
-    "email": "fieldsdecker@emergent.com",
-    "phone": "+1 (992) 489-3712"
-  },
-  {
-    "_id": "55d2fc868b903951ddd71703",
-    "age": 28,
-    "name": "Barry Woods",
-    "gender": "male",
-    "company": "OZEAN",
-    "email": "barrywoods@ozean.com",
-    "phone": "+1 (885) 433-3285"
-  },
-  {
-    "_id": "55d2fc86ca3984177237f17e",
-    "age": 29,
-    "name": "Whitfield Higgins",
-    "gender": "male",
-    "company": "PEARLESEX",
-    "email": "whitfieldhiggins@pearlesex.com",
-    "phone": "+1 (869) 468-3186"
-  },
-  {
-    "_id": "55d2fc8678dd83bf6cc16648",
-    "age": 27,
-    "name": "Haynes Mills",
-    "gender": "male",
-    "company": "ZOARERE",
-    "email": "haynesmills@zoarere.com",
-    "phone": "+1 (886) 576-3206"
-  },
-  {
-    "_id": "55d2fc86b6ba36d7927b8765",
-    "age": 27,
-    "name": "Kellie Hurley",
-    "gender": "female",
-    "company": "GYNKO",
-    "email": "kelliehurley@gynko.com",
-    "phone": "+1 (844) 548-2894"
-  },
-  {
-    "_id": "55d2fc869adb64b23212bdfc",
-    "age": 30,
-    "name": "Brandi Shields",
-    "gender": "female",
-    "company": "KENGEN",
-    "email": "brandishields@kengen.com",
-    "phone": "+1 (947) 447-3081"
-  },
-  {
-    "_id": "55d2fc8617e038558bbd0e5f",
-    "age": 22,
-    "name": "Malinda Gordon",
-    "gender": "female",
-    "company": "QUILCH",
-    "email": "malindagordon@quilch.com",
-    "phone": "+1 (945) 466-2414"
-  },
-  {
-    "_id": "55d2fc8614756992c50aabfd",
-    "age": 30,
-    "name": "Wooten Mcknight",
-    "gender": "male",
-    "company": "APPLIDECK",
-    "email": "wootenmcknight@applideck.com",
-    "phone": "+1 (994) 416-2156"
-  },
-  {
-    "_id": "55d2fc86b44fbdb8c8ea3a67",
-    "age": 36,
-    "name": "Mona Thomas",
-    "gender": "female",
-    "company": "KROG",
-    "email": "monathomas@krog.com",
-    "phone": "+1 (924) 423-3381"
-  },
-  {
-    "_id": "55d2fc86ded545b6b4f5e536",
-    "age": 22,
-    "name": "Bates Cole",
-    "gender": "male",
-    "company": "DIGIRANG",
-    "email": "batescole@digirang.com",
-    "phone": "+1 (956) 409-2471"
-  },
-  {
-    "_id": "55d2fc864abd3a5951c8e07c",
-    "age": 33,
-    "name": "Shirley Potts",
-    "gender": "female",
-    "company": "OMATOM",
-    "email": "shirleypotts@omatom.com",
-    "phone": "+1 (804) 496-2921"
-  },
-  {
-    "_id": "55d2fc864e3992c902987b9c",
-    "age": 22,
-    "name": "Adrian Branch",
-    "gender": "female",
-    "company": "MULTIFLEX",
-    "email": "adrianbranch@multiflex.com",
-    "phone": "+1 (817) 499-3955"
-  },
-  {
-    "_id": "55d2fc8679037ccc9d0d84d0",
-    "age": 25,
-    "name": "Deanne Rosa",
-    "gender": "female",
-    "company": "QUONATA",
-    "email": "deannerosa@quonata.com",
-    "phone": "+1 (896) 463-2190"
-  },
-  {
-    "_id": "55d2fc869ec47f3f9745bcbc",
-    "age": 28,
-    "name": "Sherrie Bowers",
-    "gender": "female",
-    "company": "GOLISTIC",
-    "email": "sherriebowers@golistic.com",
-    "phone": "+1 (854) 539-3836"
-  },
-  {
-    "_id": "55d2fc86c953130389da55f9",
-    "age": 21,
-    "name": "Sharp Douglas",
-    "gender": "male",
-    "company": "CHILLIUM",
-    "email": "sharpdouglas@chillium.com",
-    "phone": "+1 (999) 513-3550"
-  },
-  {
-    "_id": "55d2fc86d42d710fef2a7781",
-    "age": 22,
-    "name": "Sandy Dillard",
-    "gender": "female",
-    "company": "PHARMACON",
-    "email": "sandydillard@pharmacon.com",
-    "phone": "+1 (844) 433-2832"
-  },
-  {
-    "_id": "55d2fc86aa4130e6998a333b",
-    "age": 20,
-    "name": "Naomi Willis",
-    "gender": "female",
-    "company": "SAVVY",
-    "email": "naomiwillis@savvy.com",
-    "phone": "+1 (826) 499-3221"
-  },
-  {
-    "_id": "55d2fc869c2c97145040281b",
-    "age": 38,
-    "name": "Rivera Stone",
-    "gender": "male",
-    "company": "ORBIXTAR",
-    "email": "riverastone@orbixtar.com",
-    "phone": "+1 (994) 439-3810"
-  },
-  {
-    "_id": "55d2fc86e7165c13cd5905c1",
-    "age": 22,
-    "name": "Oliver Day",
-    "gender": "male",
-    "company": "PORTALIS",
-    "email": "oliverday@portalis.com",
-    "phone": "+1 (844) 464-2363"
-  },
-  {
-    "_id": "55d2fc86b6b619b4d04c7640",
-    "age": 39,
-    "name": "Rachael Owens",
-    "gender": "female",
-    "company": "NURALI",
-    "email": "rachaelowens@nurali.com",
-    "phone": "+1 (856) 418-3617"
-  },
-  {
-    "_id": "55d2fc865f2612144e6f27e6",
-    "age": 30,
-    "name": "Winifred Molina",
-    "gender": "female",
-    "company": "NITRACYR",
-    "email": "winifredmolina@nitracyr.com",
-    "phone": "+1 (881) 417-3559"
-  },
-  {
-    "_id": "55d2fc86c38ab2f341eb9717",
-    "age": 33,
-    "name": "Helen Callahan",
-    "gender": "female",
-    "company": "BOLAX",
-    "email": "helencallahan@bolax.com",
-    "phone": "+1 (929) 407-3095"
-  },
-  {
-    "_id": "55d2fc86e6aa094f47df5373",
-    "age": 32,
-    "name": "Leblanc Christensen",
-    "gender": "male",
-    "company": "LIQUIDOC",
-    "email": "leblancchristensen@liquidoc.com",
-    "phone": "+1 (878) 568-2054"
-  },
-  {
-    "_id": "55d2fc86b297912d153c4e8f",
-    "age": 31,
-    "name": "Hill Robbins",
-    "gender": "male",
-    "company": "QUANTALIA",
-    "email": "hillrobbins@quantalia.com",
-    "phone": "+1 (826) 430-2750"
-  },
-  {
-    "_id": "55d2fc86e776e4075d7df74e",
-    "age": 36,
-    "name": "Tabitha Whitley",
-    "gender": "female",
-    "company": "ZILLIDIUM",
-    "email": "tabithawhitley@zillidium.com",
-    "phone": "+1 (838) 516-3637"
-  },
-  {
-    "_id": "55d2fc86197a382bbf34e81f",
-    "age": 36,
-    "name": "May Pearson",
-    "gender": "male",
-    "company": "RODEOMAD",
-    "email": "maypearson@rodeomad.com",
-    "phone": "+1 (854) 429-3462"
-  },
-  {
-    "_id": "55d2fc863ade7d3517aed2c6",
-    "age": 28,
-    "name": "Alvarez Austin",
-    "gender": "male",
-    "company": "CUBIX",
-    "email": "alvarezaustin@cubix.com",
-    "phone": "+1 (847) 594-3735"
-  },
-  {
-    "_id": "55d2fc86b158d5d260362ac4",
-    "age": 31,
-    "name": "Misty Shepard",
-    "gender": "female",
-    "company": "COMVEYER",
-    "email": "mistyshepard@comveyer.com",
-    "phone": "+1 (901) 567-3881"
-  },
-  {
-    "_id": "55d2fc8646bce5646a0b5258",
-    "age": 22,
-    "name": "Yvette Hensley",
-    "gender": "female",
-    "company": "MYOPIUM",
-    "email": "yvettehensley@myopium.com",
-    "phone": "+1 (890) 456-2157"
-  },
-  {
-    "_id": "55d2fc86c362f848f08340c2",
-    "age": 36,
-    "name": "Hernandez Rowe",
-    "gender": "male",
-    "company": "EARTHPLEX",
-    "email": "hernandezrowe@earthplex.com",
-    "phone": "+1 (807) 502-2308"
-  },
-  {
-    "_id": "55d2fc8640a621a6f035ce8d",
-    "age": 39,
-    "name": "Maura Harper",
-    "gender": "female",
-    "company": "ROBOID",
-    "email": "mauraharper@roboid.com",
-    "phone": "+1 (927) 506-2290"
-  },
-  {
-    "_id": "55d2fc86965968be6314d56f",
-    "age": 20,
-    "name": "Luisa Gardner",
-    "gender": "female",
-    "company": "WAAB",
-    "email": "luisagardner@waab.com",
-    "phone": "+1 (964) 514-2189"
-  },
-  {
-    "_id": "55d2fc86e12b5b70fffd430a",
-    "age": 36,
-    "name": "Christa Bradley",
-    "gender": "female",
-    "company": "FURNIGEER",
-    "email": "christabradley@furnigeer.com",
-    "phone": "+1 (871) 587-3404"
-  },
-  {
-    "_id": "55d2fc86153d11b40a9bf8bc",
-    "age": 26,
-    "name": "Murphy Fleming",
-    "gender": "male",
-    "company": "COLLAIRE",
-    "email": "murphyfleming@collaire.com",
-    "phone": "+1 (909) 598-3130"
-  },
-  {
-    "_id": "55d2fc863ec1e4fc29e5ce50",
-    "age": 28,
-    "name": "Bobbi Harrington",
-    "gender": "female",
-    "company": "MEDIFAX",
-    "email": "bobbiharrington@medifax.com",
-    "phone": "+1 (825) 598-2607"
-  },
-  {
-    "_id": "55d2fc86f4b17262ea0129c6",
-    "age": 40,
-    "name": "Paige Flynn",
-    "gender": "female",
-    "company": "PULZE",
-    "email": "paigeflynn@pulze.com",
-    "phone": "+1 (956) 529-3295"
-  },
-  {
-    "_id": "55d2fc861c8dc17cb598e70d",
-    "age": 21,
-    "name": "Nina Moon",
-    "gender": "female",
-    "company": "ZOLAVO",
-    "email": "ninamoon@zolavo.com",
-    "phone": "+1 (863) 540-3993"
-  },
-  {
-    "_id": "55d2fc869d8ee9d95ab9fee4",
-    "age": 36,
-    "name": "Shauna Mckay",
-    "gender": "female",
-    "company": "LUNCHPOD",
-    "email": "shaunamckay@lunchpod.com",
-    "phone": "+1 (879) 435-3179"
-  },
-  {
-    "_id": "55d2fc86a03f430c5e56194b",
-    "age": 36,
-    "name": "Amie Nicholson",
-    "gender": "female",
-    "company": "LETPRO",
-    "email": "amienicholson@letpro.com",
-    "phone": "+1 (839) 600-3014"
-  },
-  {
-    "_id": "55d2fc86062b4615153832f6",
-    "age": 31,
-    "name": "Pennington Whitney",
-    "gender": "male",
-    "company": "TRI@TRIBALOG",
-    "email": "penningtonwhitney@tri@tribalog.com",
-    "phone": "+1 (950) 487-3727"
-  },
-  {
-    "_id": "55d2fc868849f1c7f4f80541",
-    "age": 23,
-    "name": "Gena Barton",
-    "gender": "female",
-    "company": "VORTEXACO",
-    "email": "genabarton@vortexaco.com",
-    "phone": "+1 (889) 515-2172"
-  },
-  {
-    "_id": "55d2fc860c13e786f86024fd",
-    "age": 27,
-    "name": "Ashley Stephens",
-    "gender": "female",
-    "company": "ZENSUS",
-    "email": "ashleystephens@zensus.com",
-    "phone": "+1 (949) 525-3726"
-  },
-  {
-    "_id": "55d2fc86cca3638bdc9c942c",
-    "age": 38,
-    "name": "Cherie Morgan",
-    "gender": "female",
-    "company": "HELIXO",
-    "email": "cheriemorgan@helixo.com",
-    "phone": "+1 (815) 514-2167"
-  },
-  {
-    "_id": "55d2fc8630d769398c9a0788",
-    "age": 31,
-    "name": "Ann Wiggins",
-    "gender": "female",
-    "company": "NIXELT",
-    "email": "annwiggins@nixelt.com",
-    "phone": "+1 (878) 567-2808"
-  },
-  {
-    "_id": "55d2fc86f3d0744abd99ee4a",
-    "age": 36,
-    "name": "Hinton Keller",
-    "gender": "male",
-    "company": "VENOFLEX",
-    "email": "hintonkeller@venoflex.com",
-    "phone": "+1 (978) 499-2652"
-  },
-  {
-    "_id": "55d2fc86714b2f2f7f59ff69",
-    "age": 32,
-    "name": "Marsh Mullins",
-    "gender": "male",
-    "company": "ZIALACTIC",
-    "email": "marshmullins@zialactic.com",
-    "phone": "+1 (908) 537-2112"
-  },
-  {
-    "_id": "55d2fc8644c73b5870be171c",
-    "age": 28,
-    "name": "Holland Underwood",
-    "gender": "male",
-    "company": "ZILLACON",
-    "email": "hollandunderwood@zillacon.com",
-    "phone": "+1 (968) 454-2162"
-  },
-  {
-    "_id": "55d2fc8648b8691a6a646f9e",
-    "age": 31,
-    "name": "Beverly Oneal",
-    "gender": "female",
-    "company": "BYTREX",
-    "email": "beverlyoneal@bytrex.com",
-    "phone": "+1 (969) 522-2598"
-  },
-  {
-    "_id": "55d2fc86b3e9627aa4f5f88a",
-    "age": 24,
-    "name": "Leanne Frazier",
-    "gender": "female",
-    "company": "HOPELI",
-    "email": "leannefrazier@hopeli.com",
-    "phone": "+1 (923) 532-3379"
-  },
-  {
-    "_id": "55d2fc867bdc2935055e4595",
-    "age": 31,
-    "name": "Rhodes Cash",
-    "gender": "male",
-    "company": "PAPRIKUT",
-    "email": "rhodescash@paprikut.com",
-    "phone": "+1 (830) 507-2776"
-  },
-  {
-    "_id": "55d2fc86543e21b2bc15201d",
-    "age": 30,
-    "name": "Cherry Bush",
-    "gender": "male",
-    "company": "PROGENEX",
-    "email": "cherrybush@progenex.com",
-    "phone": "+1 (935) 577-2984"
-  },
-  {
-    "_id": "55d2fc8660c1a32dfdf4fe67",
-    "age": 32,
-    "name": "Jacobs Clark",
-    "gender": "male",
-    "company": "COMDOM",
-    "email": "jacobsclark@comdom.com",
-    "phone": "+1 (947) 434-2665"
-  },
-  {
-    "_id": "55d2fc861641831257904d9c",
-    "age": 37,
-    "name": "Nell Mcmahon",
-    "gender": "female",
-    "company": "SLAMBDA",
-    "email": "nellmcmahon@slambda.com",
-    "phone": "+1 (831) 462-2693"
-  },
-  {
-    "_id": "55d2fc86835340478ec889e2",
-    "age": 37,
-    "name": "Palmer Livingston",
-    "gender": "male",
-    "company": "DIGIGEN",
-    "email": "palmerlivingston@digigen.com",
-    "phone": "+1 (817) 443-2049"
-  },
-  {
-    "_id": "55d2fc8697f9fd666529fa34",
-    "age": 40,
-    "name": "Ayala Schmidt",
-    "gender": "male",
-    "company": "EWAVES",
-    "email": "ayalaschmidt@ewaves.com",
-    "phone": "+1 (899) 576-2845"
-  },
-  {
-    "_id": "55d2fc8682936b03c7c044de",
-    "age": 26,
-    "name": "Lynch Beck",
-    "gender": "male",
-    "company": "INDEXIA",
-    "email": "lynchbeck@indexia.com",
-    "phone": "+1 (942) 411-3724"
-  },
-  {
-    "_id": "55d2fc86bb74729fe35b2bcc",
-    "age": 20,
-    "name": "Yang Hickman",
-    "gender": "male",
-    "company": "UXMOX",
-    "email": "yanghickman@uxmox.com",
-    "phone": "+1 (944) 554-2948"
-  },
-  {
-    "_id": "55d2fc86bb04a1e5e39143b1",
-    "age": 30,
-    "name": "Andrews Lucas",
-    "gender": "male",
-    "company": "CIPROMOX",
-    "email": "andrewslucas@cipromox.com",
-    "phone": "+1 (942) 401-2756"
-  },
-  {
-    "_id": "55d2fc86b862c1492a4c5bc1",
-    "age": 34,
-    "name": "Rosa Valdez",
-    "gender": "female",
-    "company": "ONTALITY",
-    "email": "rosavaldez@ontality.com",
-    "phone": "+1 (963) 414-3056"
-  },
-  {
-    "_id": "55d2fc868ab9f2f25a46a850",
-    "age": 30,
-    "name": "Maria Caldwell",
-    "gender": "female",
-    "company": "ACRODANCE",
-    "email": "mariacaldwell@acrodance.com",
-    "phone": "+1 (963) 433-2398"
-  },
-  {
-    "_id": "55d2fc868d206b4d99f1f0b2",
-    "age": 36,
-    "name": "Gilda Chase",
-    "gender": "female",
-    "company": "KOFFEE",
-    "email": "gildachase@koffee.com",
-    "phone": "+1 (980) 591-3955"
-  },
-  {
-    "_id": "55d2fc86e0c5a2f031b4a0d9",
-    "age": 24,
-    "name": "Dejesus Pittman",
-    "gender": "male",
-    "company": "SLAX",
-    "email": "dejesuspittman@slax.com",
-    "phone": "+1 (819) 574-2826"
-  },
-  {
-    "_id": "55d2fc868190178a9af16ec5",
-    "age": 23,
-    "name": "Valdez Gibson",
-    "gender": "male",
-    "company": "ELECTONIC",
-    "email": "valdezgibson@electonic.com",
-    "phone": "+1 (809) 520-3985"
-  },
-  {
-    "_id": "55d2fc86d3bc3cf86e16bc5b",
-    "age": 21,
-    "name": "Aguilar Bird",
-    "gender": "male",
-    "company": "ULTRASURE",
-    "email": "aguilarbird@ultrasure.com",
-    "phone": "+1 (813) 455-3814"
-  },
-  {
-    "_id": "55d2fc86701c49cc235f0b49",
-    "age": 24,
-    "name": "Bentley Mooney",
-    "gender": "male",
-    "company": "BEDLAM",
-    "email": "bentleymooney@bedlam.com",
-    "phone": "+1 (870) 530-2188"
-  },
-  {
-    "_id": "55d2fc863fe6d9fc492a1ca5",
-    "age": 28,
-    "name": "Ruby Wooten",
-    "gender": "female",
-    "company": "MARKETOID",
-    "email": "rubywooten@marketoid.com",
-    "phone": "+1 (813) 470-3521"
-  },
-  {
-    "_id": "55d2fc8622f489f721743001",
-    "age": 28,
-    "name": "Garrison Blevins",
-    "gender": "male",
-    "company": "KEENGEN",
-    "email": "garrisonblevins@keengen.com",
-    "phone": "+1 (974) 538-2989"
-  },
-  {
-    "_id": "55d2fc863dc60d226c55ece7",
-    "age": 33,
-    "name": "Harper Tanner",
-    "gender": "male",
-    "company": "QABOOS",
-    "email": "harpertanner@qaboos.com",
-    "phone": "+1 (953) 406-3082"
-  },
-  {
-    "_id": "55d2fc86fecd601439c2702e",
-    "age": 32,
-    "name": "Best Robles",
-    "gender": "male",
-    "company": "OCEANICA",
-    "email": "bestrobles@oceanica.com",
-    "phone": "+1 (815) 539-3097"
-  },
-  {
-    "_id": "55d2fc86ba25530a2149beab",
-    "age": 36,
-    "name": "Marian Bradshaw",
-    "gender": "female",
-    "company": "XYQAG",
-    "email": "marianbradshaw@xyqag.com",
-    "phone": "+1 (928) 410-3218"
-  },
-  {
-    "_id": "55d2fc867352b6b799d365e4",
-    "age": 23,
-    "name": "Whitley Oneil",
-    "gender": "male",
-    "company": "XURBAN",
-    "email": "whitleyoneil@xurban.com",
-    "phone": "+1 (802) 578-3671"
-  },
-  {
-    "_id": "55d2fc865ee137dbdee5cde2",
-    "age": 34,
-    "name": "Ella Fox",
-    "gender": "female",
-    "company": "TUBESYS",
-    "email": "ellafox@tubesys.com",
-    "phone": "+1 (920) 524-3066"
-  },
-  {
-    "_id": "55d2fc860cc159486a822879",
-    "age": 30,
-    "name": "Farmer Castro",
-    "gender": "male",
-    "company": "QNEKT",
-    "email": "farmercastro@qnekt.com",
-    "phone": "+1 (866) 578-2968"
-  },
-  {
-    "_id": "55d2fc863b57eefc3015d373",
-    "age": 28,
-    "name": "Guy Cochran",
-    "gender": "male",
-    "company": "VICON",
-    "email": "guycochran@vicon.com",
-    "phone": "+1 (840) 567-2191"
-  },
-  {
-    "_id": "55d2fc863df7dfda22e99029",
-    "age": 32,
-    "name": "Leach Rocha",
-    "gender": "male",
-    "company": "DANJA",
-    "email": "leachrocha@danja.com",
-    "phone": "+1 (971) 589-3164"
-  },
-  {
-    "_id": "55d2fc86aba3b9d7ce3f877c",
-    "age": 36,
-    "name": "Tanner Hayes",
-    "gender": "male",
-    "company": "TELEQUIET",
-    "email": "tannerhayes@telequiet.com",
-    "phone": "+1 (813) 526-2989"
-  },
-  {
-    "_id": "55d2fc862cd6fb84f734fa0e",
-    "age": 30,
-    "name": "Keith Maldonado",
-    "gender": "male",
-    "company": "MAGNEATO",
-    "email": "keithmaldonado@magneato.com",
-    "phone": "+1 (997) 419-3200"
-  },
-  {
-    "_id": "55d2fc8663d4dc1e43943f62",
-    "age": 29,
-    "name": "Winnie Harrell",
-    "gender": "female",
-    "company": "FRENEX",
-    "email": "winnieharrell@frenex.com",
-    "phone": "+1 (966) 565-2447"
-  },
-  {
-    "_id": "55d2fc86b57f9312b0d28a1d",
-    "age": 28,
-    "name": "Sandoval Garza",
-    "gender": "male",
-    "company": "INTERLOO",
-    "email": "sandovalgarza@interloo.com",
-    "phone": "+1 (972) 597-3431"
-  },
-  {
-    "_id": "55d2fc86a356d194d285d160",
-    "age": 23,
-    "name": "Lina Dejesus",
-    "gender": "female",
-    "company": "ORONOKO",
-    "email": "linadejesus@oronoko.com",
-    "phone": "+1 (910) 560-2515"
-  },
-  {
-    "_id": "55d2fc862f4cd754495f93c7",
-    "age": 30,
-    "name": "Jana Spence",
-    "gender": "female",
-    "company": "ZILLACOM",
-    "email": "janaspence@zillacom.com",
-    "phone": "+1 (994) 436-2023"
-  },
-  {
-    "_id": "55d2fc869b25329fae4936d0",
-    "age": 32,
-    "name": "Mcdowell Fisher",
-    "gender": "male",
-    "company": "GYNK",
-    "email": "mcdowellfisher@gynk.com",
-    "phone": "+1 (941) 587-3569"
-  },
-  {
-    "_id": "55d2fc866b52b90a3758bdd3",
-    "age": 28,
-    "name": "Farley Bernard",
-    "gender": "male",
-    "company": "NETROPIC",
-    "email": "farleybernard@netropic.com",
-    "phone": "+1 (856) 540-2658"
-  },
-  {
-    "_id": "55d2fc864086901eaeb80443",
-    "age": 25,
-    "name": "Lorna Howe",
-    "gender": "female",
-    "company": "ISOSWITCH",
-    "email": "lornahowe@isoswitch.com",
-    "phone": "+1 (851) 432-3160"
-  },
-  {
-    "_id": "55d2fc86b4ac38891f11340b",
-    "age": 25,
-    "name": "English Watts",
-    "gender": "male",
-    "company": "INFOTRIPS",
-    "email": "englishwatts@infotrips.com",
-    "phone": "+1 (942) 481-2578"
-  },
-  {
-    "_id": "55d2fc86e0d047d4eb3c224f",
-    "age": 35,
-    "name": "Burch Howell",
-    "gender": "male",
-    "company": "FANFARE",
-    "email": "burchhowell@fanfare.com",
-    "phone": "+1 (986) 507-2725"
-  },
-  {
-    "_id": "55d2fc86330a8dab2ddbc0c4",
-    "age": 39,
-    "name": "Hudson Bender",
-    "gender": "male",
-    "company": "ENORMO",
-    "email": "hudsonbender@enormo.com",
-    "phone": "+1 (982) 553-3993"
-  },
-  {
-    "_id": "55d2fc8600bb27f4ba215be8",
-    "age": 30,
-    "name": "Mcdonald Whitehead",
-    "gender": "male",
-    "company": "SENMAO",
-    "email": "mcdonaldwhitehead@senmao.com",
-    "phone": "+1 (837) 449-3264"
-  },
-  {
-    "_id": "55d2fc8683787d8b7b400408",
-    "age": 31,
-    "name": "Hope Holden",
-    "gender": "female",
-    "company": "EVENTIX",
-    "email": "hopeholden@eventix.com",
-    "phone": "+1 (888) 436-2921"
-  },
-  {
-    "_id": "55d2fc86cd7d2a5c962d2c05",
-    "age": 36,
-    "name": "Suarez Mejia",
-    "gender": "male",
-    "company": "BUZZWORKS",
-    "email": "suarezmejia@buzzworks.com",
-    "phone": "+1 (919) 526-3966"
-  },
-  {
-    "_id": "55d2fc8612bf58c9b2d953cf",
-    "age": 27,
-    "name": "Michele Little",
-    "gender": "female",
-    "company": "VINCH",
-    "email": "michelelittle@vinch.com",
-    "phone": "+1 (817) 414-2165"
-  },
-  {
-    "_id": "55d2fc864a8103126f905972",
-    "age": 25,
-    "name": "Patrick Cooke",
-    "gender": "male",
-    "company": "BEDDER",
-    "email": "patrickcooke@bedder.com",
-    "phone": "+1 (993) 587-2086"
-  },
-  {
-    "_id": "55d2fc865ddf784cac1f023c",
-    "age": 31,
-    "name": "Holcomb Beasley",
-    "gender": "male",
-    "company": "TECHTRIX",
-    "email": "holcombbeasley@techtrix.com",
-    "phone": "+1 (879) 458-3507"
-  },
-  {
-    "_id": "55d2fc86e27a28e9e9b0d232",
-    "age": 34,
-    "name": "Catalina Donovan",
-    "gender": "female",
-    "company": "FILODYNE",
-    "email": "catalinadonovan@filodyne.com",
-    "phone": "+1 (818) 542-2296"
-  },
-  {
-    "_id": "55d2fc861801cbac57fa3186",
-    "age": 21,
-    "name": "Leslie Bryan",
-    "gender": "female",
-    "company": "LUXURIA",
-    "email": "lesliebryan@luxuria.com",
-    "phone": "+1 (917) 590-3272"
-  },
-  {
-    "_id": "55d2fc86d3aa760444ec40cc",
-    "age": 37,
-    "name": "Hobbs Noel",
-    "gender": "male",
-    "company": "ZILLA",
-    "email": "hobbsnoel@zilla.com",
-    "phone": "+1 (917) 430-3792"
-  },
-  {
-    "_id": "55d2fc86f53d0267e33ddb67",
-    "age": 38,
-    "name": "Nunez Meyers",
-    "gender": "male",
-    "company": "ENTROFLEX",
-    "email": "nunezmeyers@entroflex.com",
-    "phone": "+1 (940) 419-3943"
-  },
-  {
-    "_id": "55d2fc867805cf4262e648a9",
-    "age": 37,
-    "name": "Sonya Sloan",
-    "gender": "female",
-    "company": "SURELOGIC",
-    "email": "sonyasloan@surelogic.com",
-    "phone": "+1 (924) 561-3268"
-  },
-  {
-    "_id": "55d2fc86a3b756eaaef9f9fa",
-    "age": 31,
-    "name": "Angeline Sargent",
-    "gender": "female",
-    "company": "QUIZMO",
-    "email": "angelinesargent@quizmo.com",
-    "phone": "+1 (952) 539-3859"
-  },
-  {
-    "_id": "55d2fc860f0e4be242c866a3",
-    "age": 40,
-    "name": "Norris Webb",
-    "gender": "male",
-    "company": "ZENCO",
-    "email": "norriswebb@zenco.com",
-    "phone": "+1 (834) 527-2399"
-  },
-  {
-    "_id": "55d2fc86b2da030fb755d74c",
-    "age": 38,
-    "name": "Wise Bonner",
-    "gender": "male",
-    "company": "KINETICA",
-    "email": "wisebonner@kinetica.com",
-    "phone": "+1 (938) 416-3537"
-  },
-  {
-    "_id": "55d2fc8699036f35ee214843",
-    "age": 25,
-    "name": "Imogene Blankenship",
-    "gender": "female",
-    "company": "POLARAX",
-    "email": "imogeneblankenship@polarax.com",
-    "phone": "+1 (877) 476-3735"
-  },
-  {
-    "_id": "55d2fc86009b5a1658986a92",
-    "age": 27,
-    "name": "Silva Schneider",
-    "gender": "male",
-    "company": "MINGA",
-    "email": "silvaschneider@minga.com",
-    "phone": "+1 (884) 420-2111"
-  },
-  {
-    "_id": "55d2fc86e3dcb6d4996e9813",
-    "age": 40,
-    "name": "Lawanda Cortez",
-    "gender": "female",
-    "company": "HOMETOWN",
-    "email": "lawandacortez@hometown.com",
-    "phone": "+1 (946) 525-3826"
-  },
-  {
-    "_id": "55d2fc8641977ef422e73176",
-    "age": 40,
-    "name": "Clements Waters",
-    "gender": "male",
-    "company": "FLEETMIX",
-    "email": "clementswaters@fleetmix.com",
-    "phone": "+1 (973) 523-2395"
-  },
-  {
-    "_id": "55d2fc869d0f5363ad055935",
-    "age": 20,
-    "name": "Ofelia Gilbert",
-    "gender": "female",
-    "company": "ECRATER",
-    "email": "ofeliagilbert@ecrater.com",
-    "phone": "+1 (828) 404-2646"
-  },
-  {
-    "_id": "55d2fc86c39b876162269895",
-    "age": 23,
-    "name": "Valenzuela Carney",
-    "gender": "male",
-    "company": "HYDROCOM",
-    "email": "valenzuelacarney@hydrocom.com",
-    "phone": "+1 (842) 566-3650"
-  },
-  {
-    "_id": "55d2fc86546c31933b02dd85",
-    "age": 28,
-    "name": "Wells Santana",
-    "gender": "male",
-    "company": "ZIDOX",
-    "email": "wellssantana@zidox.com",
-    "phone": "+1 (886) 527-2963"
-  },
-  {
-    "_id": "55d2fc86a981c3741ad50f8c",
-    "age": 29,
-    "name": "Karla Carroll",
-    "gender": "female",
-    "company": "MAGNEMO",
-    "email": "karlacarroll@magnemo.com",
-    "phone": "+1 (922) 418-3361"
-  },
-  {
-    "_id": "55d2fc861054327ef76378e3",
-    "age": 29,
-    "name": "Juliet Butler",
-    "gender": "female",
-    "company": "ORBAXTER",
-    "email": "julietbutler@orbaxter.com",
-    "phone": "+1 (838) 554-2269"
-  },
-  {
-    "_id": "55d2fc868120c8a8e4eb9149",
-    "age": 26,
-    "name": "Lisa Copeland",
-    "gender": "female",
-    "company": "SOFTMICRO",
-    "email": "lisacopeland@softmicro.com",
-    "phone": "+1 (915) 577-2302"
-  },
-  {
-    "_id": "55d2fc86b0eb908d67787f43",
-    "age": 37,
-    "name": "Mcmahon Spencer",
-    "gender": "male",
-    "company": "BOILCAT",
-    "email": "mcmahonspencer@boilcat.com",
-    "phone": "+1 (871) 501-2558"
-  },
-  {
-    "_id": "55d2fc860c0b6f5fb520ad2a",
-    "age": 38,
-    "name": "Campbell Baxter",
-    "gender": "male",
-    "company": "DREAMIA",
-    "email": "campbellbaxter@dreamia.com",
-    "phone": "+1 (858) 524-3012"
-  },
-  {
-    "_id": "55d2fc86460508fbed08e924",
-    "age": 23,
-    "name": "Lindsay Sharp",
-    "gender": "male",
-    "company": "SYBIXTEX",
-    "email": "lindsaysharp@sybixtex.com",
-    "phone": "+1 (974) 573-3073"
-  },
-  {
-    "_id": "55d2fc860bf5295ce5679523",
-    "age": 35,
-    "name": "Kathrine Browning",
-    "gender": "female",
-    "company": "LUNCHPAD",
-    "email": "kathrinebrowning@lunchpad.com",
-    "phone": "+1 (922) 458-2466"
-  },
-  {
-    "_id": "55d2fc86d2311e0208cd17a2",
-    "age": 35,
-    "name": "Alice Faulkner",
-    "gender": "female",
-    "company": "PLEXIA",
-    "email": "alicefaulkner@plexia.com",
-    "phone": "+1 (939) 419-3621"
-  },
-  {
-    "_id": "55d2fc86e85116cc8d6c0d70",
-    "age": 32,
-    "name": "Ford Mclean",
-    "gender": "male",
-    "company": "QUADEEBO",
-    "email": "fordmclean@quadeebo.com",
-    "phone": "+1 (974) 521-2540"
-  },
-  {
-    "_id": "55d2fc86f60393147a3a8a07",
-    "age": 29,
-    "name": "Ollie Cannon",
-    "gender": "female",
-    "company": "RAMJOB",
-    "email": "olliecannon@ramjob.com",
-    "phone": "+1 (961) 497-3201"
-  },
-  {
-    "_id": "55d2fc8661d02152a5ba425a",
-    "age": 36,
-    "name": "Calderon Vaughan",
-    "gender": "male",
-    "company": "DIGIQUE",
-    "email": "calderonvaughan@digique.com",
-    "phone": "+1 (912) 553-3902"
-  },
-  {
-    "_id": "55d2fc86a55890c6ce345bf0",
-    "age": 28,
-    "name": "Warren Henry",
-    "gender": "male",
-    "company": "ZERBINA",
-    "email": "warrenhenry@zerbina.com",
-    "phone": "+1 (850) 464-3656"
-  },
-  {
-    "_id": "55d2fc86ccead2741ea21e0e",
-    "age": 21,
-    "name": "Liliana York",
-    "gender": "female",
-    "company": "ANIXANG",
-    "email": "lilianayork@anixang.com",
-    "phone": "+1 (956) 403-2096"
-  },
-  {
-    "_id": "55d2fc86d72dd184f6884371",
-    "age": 33,
-    "name": "Lora Alvarez",
-    "gender": "female",
-    "company": "BLURRYBUS",
-    "email": "loraalvarez@blurrybus.com",
-    "phone": "+1 (917) 457-2866"
-  },
-  {
-    "_id": "55d2fc86fda0c180ccc9598a",
-    "age": 22,
-    "name": "Luna Ellis",
-    "gender": "male",
-    "company": "SLUMBERIA",
-    "email": "lunaellis@slumberia.com",
-    "phone": "+1 (878) 589-3511"
-  },
-  {
-    "_id": "55d2fc860dd81b364fc1c2a9",
-    "age": 30,
-    "name": "Phoebe Chang",
-    "gender": "female",
-    "company": "OPTICON",
-    "email": "phoebechang@opticon.com",
-    "phone": "+1 (962) 559-3475"
-  },
-  {
-    "_id": "55d2fc8657954cc73c166579",
-    "age": 40,
-    "name": "Anna Crane",
-    "gender": "female",
-    "company": "AQUAFIRE",
-    "email": "annacrane@aquafire.com",
-    "phone": "+1 (989) 567-3649"
-  },
-  {
-    "_id": "55d2fc86d996f0f466a006c8",
-    "age": 39,
-    "name": "Matthews French",
-    "gender": "male",
-    "company": "CINESANCT",
-    "email": "matthewsfrench@cinesanct.com",
-    "phone": "+1 (896) 518-2965"
-  },
-  {
-    "_id": "55d2fc8601aad1428aa65531",
-    "age": 34,
-    "name": "Hutchinson Ellison",
-    "gender": "male",
-    "company": "MOREGANIC",
-    "email": "hutchinsonellison@moreganic.com",
-    "phone": "+1 (860) 563-2707"
-  },
-  {
-    "_id": "55d2fc86ec14a6c798e22d72",
-    "age": 21,
-    "name": "Gwen Russell",
-    "gender": "female",
-    "company": "COMVOY",
-    "email": "gwenrussell@comvoy.com",
-    "phone": "+1 (873) 468-2314"
-  },
-  {
-    "_id": "55d2fc865123af00125fd9bd",
-    "age": 22,
-    "name": "Natalie Stuart",
-    "gender": "female",
-    "company": "MOMENTIA",
-    "email": "nataliestuart@momentia.com",
-    "phone": "+1 (908) 573-2177"
-  },
-  {
-    "_id": "55d2fc8688af31f1e9ff0d20",
-    "age": 28,
-    "name": "Brianna Meyer",
-    "gender": "female",
-    "company": "VIASIA",
-    "email": "briannameyer@viasia.com",
-    "phone": "+1 (860) 475-3139"
-  },
-  {
-    "_id": "55d2fc8687f0ff5daa16cbbd",
-    "age": 28,
-    "name": "Trisha Castillo",
-    "gender": "female",
-    "company": "CYCLONICA",
-    "email": "trishacastillo@cyclonica.com",
-    "phone": "+1 (869) 564-2957"
-  },
-  {
-    "_id": "55d2fc863b1c51f11ce4e921",
-    "age": 36,
-    "name": "Powers Weeks",
-    "gender": "male",
-    "company": "BIZMATIC",
-    "email": "powersweeks@bizmatic.com",
-    "phone": "+1 (981) 464-3668"
-  },
-  {
-    "_id": "55d2fc86d8f5d2bef6f84bba",
-    "age": 23,
-    "name": "Young Cabrera",
-    "gender": "female",
-    "company": "CINASTER",
-    "email": "youngcabrera@cinaster.com",
-    "phone": "+1 (897) 528-3924"
-  },
-  {
-    "_id": "55d2fc86861238b57e2932fd",
-    "age": 27,
-    "name": "Maxine Rodgers",
-    "gender": "female",
-    "company": "CHORIZON",
-    "email": "maxinerodgers@chorizon.com",
-    "phone": "+1 (996) 449-2805"
-  },
-  {
-    "_id": "55d2fc86fe5b2f6823cc295f",
-    "age": 26,
-    "name": "Davis Norris",
-    "gender": "male",
-    "company": "CORIANDER",
-    "email": "davisnorris@coriander.com",
-    "phone": "+1 (947) 512-2093"
-  },
-  {
-    "_id": "55d2fc86862e7d0bba1ab524",
-    "age": 25,
-    "name": "Ericka Conner",
-    "gender": "female",
-    "company": "STRALOY",
-    "email": "erickaconner@straloy.com",
-    "phone": "+1 (922) 565-2956"
-  },
-  {
-    "_id": "55d2fc8625bf91e39382ab4c",
-    "age": 21,
-    "name": "Payne Joyner",
-    "gender": "male",
-    "company": "OMNIGOG",
-    "email": "paynejoyner@omnigog.com",
-    "phone": "+1 (998) 521-3917"
-  },
-  {
-    "_id": "55d2fc866835ee51ccea79bb",
-    "age": 24,
-    "name": "Fletcher Payne",
-    "gender": "male",
-    "company": "AMTAP",
-    "email": "fletcherpayne@amtap.com",
-    "phone": "+1 (991) 517-3798"
-  },
-  {
-    "_id": "55d2fc863df3424f70db684c",
-    "age": 38,
-    "name": "Mosley Cobb",
-    "gender": "male",
-    "company": "HONOTRON",
-    "email": "mosleycobb@honotron.com",
-    "phone": "+1 (873) 593-2248"
-  },
-  {
-    "_id": "55d2fc867c4ad9b233d15983",
-    "age": 24,
-    "name": "Webster Sandoval",
-    "gender": "male",
-    "company": "HOMELUX",
-    "email": "webstersandoval@homelux.com",
-    "phone": "+1 (967) 431-2940"
-  },
-  {
-    "_id": "55d2fc8613bf2fe49b1a1f8c",
-    "age": 36,
-    "name": "Colon Mcgee",
-    "gender": "male",
-    "company": "ZAPPIX",
-    "email": "colonmcgee@zappix.com",
-    "phone": "+1 (806) 444-2451"
-  },
-  {
-    "_id": "55d2fc8681a8ccebe8aacd93",
-    "age": 32,
-    "name": "Monique Logan",
-    "gender": "female",
-    "company": "CALLFLEX",
-    "email": "moniquelogan@callflex.com",
-    "phone": "+1 (957) 577-3780"
-  },
-  {
-    "_id": "55d2fc868756d302f29fddb2",
-    "age": 38,
-    "name": "Stewart Ball",
-    "gender": "male",
-    "company": "NETPLODE",
-    "email": "stewartball@netplode.com",
-    "phone": "+1 (966) 435-2206"
-  },
-  {
-    "_id": "55d2fc86457f4d474388d2c8",
-    "age": 23,
-    "name": "Montgomery Carter",
-    "gender": "male",
-    "company": "OLUCORE",
-    "email": "montgomerycarter@olucore.com",
-    "phone": "+1 (894) 556-2662"
-  },
-  {
-    "_id": "55d2fc866da04e0d15b12b36",
-    "age": 28,
-    "name": "Brenda Mccoy",
-    "gender": "female",
-    "company": "AQUAZURE",
-    "email": "brendamccoy@aquazure.com",
-    "phone": "+1 (837) 483-3741"
-  },
-  {
-    "_id": "55d2fc86e2a61a730a8d5c8f",
-    "age": 34,
-    "name": "Eddie Buchanan",
-    "gender": "female",
-    "company": "COGNICODE",
-    "email": "eddiebuchanan@cognicode.com",
-    "phone": "+1 (924) 479-3753"
-  },
-  {
-    "_id": "55d2fc8616e7989042f61488",
-    "age": 23,
-    "name": "Eva Mendoza",
-    "gender": "female",
-    "company": "SOLGAN",
-    "email": "evamendoza@solgan.com",
-    "phone": "+1 (899) 522-3051"
-  },
-  {
-    "_id": "55d2fc86152fd9e4c5471fd7",
-    "age": 21,
-    "name": "Dawson Medina",
-    "gender": "male",
-    "company": "AQUASSEUR",
-    "email": "dawsonmedina@aquasseur.com",
-    "phone": "+1 (877) 580-2295"
-  },
-  {
-    "_id": "55d2fc86a3633b3a799a7811",
-    "age": 34,
-    "name": "Terrie Hobbs",
-    "gender": "female",
-    "company": "VORATAK",
-    "email": "terriehobbs@voratak.com",
-    "phone": "+1 (938) 511-2077"
-  },
-  {
-    "_id": "55d2fc8665a05f05f07bb790",
-    "age": 37,
-    "name": "Iris Bishop",
-    "gender": "female",
-    "company": "INSURESYS",
-    "email": "irisbishop@insuresys.com",
-    "phone": "+1 (819) 415-3840"
-  },
-  {
-    "_id": "55d2fc8799e7556a033b93f6",
-    "age": 29,
-    "name": "Estelle Grant",
-    "gender": "female",
-    "company": "ZOGAK",
-    "email": "estellegrant@zogak.com",
-    "phone": "+1 (854) 437-2898"
-  },
-  {
-    "_id": "55d2fc87745c675e697af04c",
-    "age": 30,
-    "name": "Dianna Gonzalez",
-    "gender": "female",
-    "company": "PIVITOL",
-    "email": "diannagonzalez@pivitol.com",
-    "phone": "+1 (816) 545-3520"
-  }
-]
diff --git a/vendor/github.com/PuerkitoBio/purell/bench_test.go b/vendor/github.com/PuerkitoBio/purell/bench_test.go
deleted file mode 100644
index 7549731..0000000
--- a/vendor/github.com/PuerkitoBio/purell/bench_test.go
+++ /dev/null
@@ -1,57 +0,0 @@
-package purell
-
-import (
-	"testing"
-)
-
-var (
-	safeUrl        = "HttPS://..iaMHost..Test:443/paTh^A%ef//./%41PaTH/..//?"
-	usuallySafeUrl = "HttPS://..iaMHost..Test:443/paTh^A%ef//./%41PaTH/../final/"
-	unsafeUrl      = "HttPS://..www.iaMHost..Test:443/paTh^A%ef//./%41PaTH/../final/index.html?t=val1&a=val4&z=val5&a=val1#fragment"
-	allDWORDUrl    = "HttPS://1113982867:/paTh^A%ef//./%41PaTH/../final/index.html?t=val1&a=val4&z=val5&a=val1#fragment"
-	allOctalUrl    = "HttPS://0102.0146.07.0223:/paTh^A%ef//./%41PaTH/../final/index.html?t=val1&a=val4&z=val5&a=val1#fragment"
-	allHexUrl      = "HttPS://0x42660793:/paTh^A%ef//./%41PaTH/../final/index.html?t=val1&a=val4&z=val5&a=val1#fragment"
-	allCombinedUrl = "HttPS://..0x42660793.:/paTh^A%ef//./%41PaTH/../final/index.html?t=val1&a=val4&z=val5&a=val1#fragment"
-)
-
-func BenchmarkSafe(b *testing.B) {
-	for i := 0; i < b.N; i++ {
-		NormalizeURLString(safeUrl, FlagsSafe)
-	}
-}
-
-func BenchmarkUsuallySafe(b *testing.B) {
-	for i := 0; i < b.N; i++ {
-		NormalizeURLString(usuallySafeUrl, FlagsUsuallySafeGreedy)
-	}
-}
-
-func BenchmarkUnsafe(b *testing.B) {
-	for i := 0; i < b.N; i++ {
-		NormalizeURLString(unsafeUrl, FlagsUnsafeGreedy)
-	}
-}
-
-func BenchmarkAllDWORD(b *testing.B) {
-	for i := 0; i < b.N; i++ {
-		NormalizeURLString(allDWORDUrl, FlagsAllGreedy)
-	}
-}
-
-func BenchmarkAllOctal(b *testing.B) {
-	for i := 0; i < b.N; i++ {
-		NormalizeURLString(allOctalUrl, FlagsAllGreedy)
-	}
-}
-
-func BenchmarkAllHex(b *testing.B) {
-	for i := 0; i < b.N; i++ {
-		NormalizeURLString(allHexUrl, FlagsAllGreedy)
-	}
-}
-
-func BenchmarkAllCombined(b *testing.B) {
-	for i := 0; i < b.N; i++ {
-		NormalizeURLString(allCombinedUrl, FlagsAllGreedy)
-	}
-}
diff --git a/vendor/github.com/PuerkitoBio/purell/benchmarks/v0.1.0 b/vendor/github.com/PuerkitoBio/purell/benchmarks/v0.1.0
deleted file mode 100644
index 3bbe711..0000000
--- a/vendor/github.com/PuerkitoBio/purell/benchmarks/v0.1.0
+++ /dev/null
@@ -1,9 +0,0 @@
-PASS
-BenchmarkSafe	  500000	      6131 ns/op
-BenchmarkUsuallySafe	  200000	      7864 ns/op
-BenchmarkUnsafe	  100000	     28560 ns/op
-BenchmarkAllDWORD	   50000	     38722 ns/op
-BenchmarkAllOctal	   50000	     40941 ns/op
-BenchmarkAllHex	   50000	     44063 ns/op
-BenchmarkAllCombined	   50000	     33613 ns/op
-ok  	github.com/PuerkitoBio/purell	17.404s
diff --git a/vendor/github.com/PuerkitoBio/purell/example_test.go b/vendor/github.com/PuerkitoBio/purell/example_test.go
deleted file mode 100644
index 997b953..0000000
--- a/vendor/github.com/PuerkitoBio/purell/example_test.go
+++ /dev/null
@@ -1,35 +0,0 @@
-package purell
-
-import (
-	"fmt"
-	"net/url"
-)
-
-func ExampleNormalizeURLString() {
-	if normalized, err := NormalizeURLString("hTTp://someWEBsite.com:80/Amazing%3f/url/",
-		FlagLowercaseScheme|FlagLowercaseHost|FlagUppercaseEscapes); err != nil {
-		panic(err)
-	} else {
-		fmt.Print(normalized)
-	}
-	// Output: http://somewebsite.com:80/Amazing%3F/url/
-}
-
-func ExampleMustNormalizeURLString() {
-	normalized := MustNormalizeURLString("hTTpS://someWEBsite.com:443/Amazing%fa/url/",
-		FlagsUnsafeGreedy)
-	fmt.Print(normalized)
-
-	// Output: http://somewebsite.com/Amazing%FA/url
-}
-
-func ExampleNormalizeURL() {
-	if u, err := url.Parse("Http://SomeUrl.com:8080/a/b/.././c///g?c=3&a=1&b=9&c=0#target"); err != nil {
-		panic(err)
-	} else {
-		normalized := NormalizeURL(u, FlagsUsuallySafeGreedy|FlagRemoveDuplicateSlashes|FlagRemoveFragment)
-		fmt.Print(normalized)
-	}
-
-	// Output: http://someurl.com:8080/a/c/g?c=3&a=1&b=9&c=0
-}
diff --git a/vendor/github.com/PuerkitoBio/purell/purell_test.go b/vendor/github.com/PuerkitoBio/purell/purell_test.go
deleted file mode 100644
index a3732e5..0000000
--- a/vendor/github.com/PuerkitoBio/purell/purell_test.go
+++ /dev/null
@@ -1,768 +0,0 @@
-package purell
-
-import (
-	"fmt"
-	"net/url"
-	"testing"
-)
-
-type testCase struct {
-	nm     string
-	src    string
-	flgs   NormalizationFlags
-	res    string
-	parsed bool
-}
-
-var (
-	cases = [...]*testCase{
-		&testCase{
-			"LowerScheme",
-			"HTTP://www.SRC.ca",
-			FlagLowercaseScheme,
-			"http://www.SRC.ca",
-			false,
-		},
-		&testCase{
-			"LowerScheme2",
-			"http://www.SRC.ca",
-			FlagLowercaseScheme,
-			"http://www.SRC.ca",
-			false,
-		},
-		&testCase{
-			"LowerHost",
-			"HTTP://www.SRC.ca/",
-			FlagLowercaseHost,
-			"http://www.src.ca/", // Since Go1.1, scheme is automatically lowercased
-			false,
-		},
-		&testCase{
-			"UpperEscapes",
-			`http://www.whatever.com/Some%aa%20Special%8Ecases/`,
-			FlagUppercaseEscapes,
-			"http://www.whatever.com/Some%AA%20Special%8Ecases/",
-			false,
-		},
-		&testCase{
-			"UnnecessaryEscapes",
-			`http://www.toto.com/%41%42%2E%44/%32%33%52%2D/%5f%7E`,
-			FlagDecodeUnnecessaryEscapes,
-			"http://www.toto.com/AB.D/23R-/_~",
-			false,
-		},
-		&testCase{
-			"RemoveDefaultPort",
-			"HTTP://www.SRC.ca:80/",
-			FlagRemoveDefaultPort,
-			"http://www.SRC.ca/", // Since Go1.1, scheme is automatically lowercased
-			false,
-		},
-		&testCase{
-			"RemoveDefaultPort2",
-			"HTTP://www.SRC.ca:80",
-			FlagRemoveDefaultPort,
-			"http://www.SRC.ca", // Since Go1.1, scheme is automatically lowercased
-			false,
-		},
-		&testCase{
-			"RemoveDefaultPort3",
-			"HTTP://www.SRC.ca:8080",
-			FlagRemoveDefaultPort,
-			"http://www.SRC.ca:8080", // Since Go1.1, scheme is automatically lowercased
-			false,
-		},
-		&testCase{
-			"Safe",
-			"HTTP://www.SRC.ca:80/to%1ato%8b%ee/OKnow%41%42%43%7e",
-			FlagsSafe,
-			"http://www.src.ca/to%1Ato%8B%EE/OKnowABC~",
-			false,
-		},
-		&testCase{
-			"BothLower",
-			"HTTP://www.SRC.ca:80/to%1ato%8b%ee/OKnow%41%42%43%7e",
-			FlagLowercaseHost | FlagLowercaseScheme,
-			"http://www.src.ca:80/to%1Ato%8B%EE/OKnowABC~",
-			false,
-		},
-		&testCase{
-			"RemoveTrailingSlash",
-			"HTTP://www.SRC.ca:80/",
-			FlagRemoveTrailingSlash,
-			"http://www.SRC.ca:80", // Since Go1.1, scheme is automatically lowercased
-			false,
-		},
-		&testCase{
-			"RemoveTrailingSlash2",
-			"HTTP://www.SRC.ca:80/toto/titi/",
-			FlagRemoveTrailingSlash,
-			"http://www.SRC.ca:80/toto/titi", // Since Go1.1, scheme is automatically lowercased
-			false,
-		},
-		&testCase{
-			"RemoveTrailingSlash3",
-			"HTTP://www.SRC.ca:80/toto/titi/fin/?a=1",
-			FlagRemoveTrailingSlash,
-			"http://www.SRC.ca:80/toto/titi/fin?a=1", // Since Go1.1, scheme is automatically lowercased
-			false,
-		},
-		&testCase{
-			"AddTrailingSlash",
-			"HTTP://www.SRC.ca:80",
-			FlagAddTrailingSlash,
-			"http://www.SRC.ca:80/", // Since Go1.1, scheme is automatically lowercased
-			false,
-		},
-		&testCase{
-			"AddTrailingSlash2",
-			"HTTP://www.SRC.ca:80/toto/titi.html",
-			FlagAddTrailingSlash,
-			"http://www.SRC.ca:80/toto/titi.html/", // Since Go1.1, scheme is automatically lowercased
-			false,
-		},
-		&testCase{
-			"AddTrailingSlash3",
-			"HTTP://www.SRC.ca:80/toto/titi/fin?a=1",
-			FlagAddTrailingSlash,
-			"http://www.SRC.ca:80/toto/titi/fin/?a=1", // Since Go1.1, scheme is automatically lowercased
-			false,
-		},
-		&testCase{
-			"RemoveDotSegments",
-			"HTTP://root/a/b/./../../c/",
-			FlagRemoveDotSegments,
-			"http://root/c/", // Since Go1.1, scheme is automatically lowercased
-			false,
-		},
-		&testCase{
-			"RemoveDotSegments2",
-			"HTTP://root/../a/b/./../c/../d",
-			FlagRemoveDotSegments,
-			"http://root/a/d", // Since Go1.1, scheme is automatically lowercased
-			false,
-		},
-		&testCase{
-			"UsuallySafe",
-			"HTTP://www.SRC.ca:80/to%1ato%8b%ee/./c/d/../OKnow%41%42%43%7e/?a=b#test",
-			FlagsUsuallySafeGreedy,
-			"http://www.src.ca/to%1Ato%8B%EE/c/OKnowABC~?a=b#test",
-			false,
-		},
-		&testCase{
-			"RemoveDirectoryIndex",
-			"HTTP://root/a/b/c/default.aspx",
-			FlagRemoveDirectoryIndex,
-			"http://root/a/b/c/", // Since Go1.1, scheme is automatically lowercased
-			false,
-		},
-		&testCase{
-			"RemoveDirectoryIndex2",
-			"HTTP://root/a/b/c/default#a=b",
-			FlagRemoveDirectoryIndex,
-			"http://root/a/b/c/default#a=b", // Since Go1.1, scheme is automatically lowercased
-			false,
-		},
-		&testCase{
-			"RemoveFragment",
-			"HTTP://root/a/b/c/default#toto=tata",
-			FlagRemoveFragment,
-			"http://root/a/b/c/default", // Since Go1.1, scheme is automatically lowercased
-			false,
-		},
-		&testCase{
-			"ForceHTTP",
-			"https://root/a/b/c/default#toto=tata",
-			FlagForceHTTP,
-			"http://root/a/b/c/default#toto=tata",
-			false,
-		},
-		&testCase{
-			"RemoveDuplicateSlashes",
-			"https://root/a//b///c////default#toto=tata",
-			FlagRemoveDuplicateSlashes,
-			"https://root/a/b/c/default#toto=tata",
-			false,
-		},
-		&testCase{
-			"RemoveDuplicateSlashes2",
-			"https://root//a//b///c////default#toto=tata",
-			FlagRemoveDuplicateSlashes,
-			"https://root/a/b/c/default#toto=tata",
-			false,
-		},
-		&testCase{
-			"RemoveWWW",
-			"https://www.root/a/b/c/",
-			FlagRemoveWWW,
-			"https://root/a/b/c/",
-			false,
-		},
-		&testCase{
-			"RemoveWWW2",
-			"https://WwW.Root/a/b/c/",
-			FlagRemoveWWW,
-			"https://Root/a/b/c/",
-			false,
-		},
-		&testCase{
-			"AddWWW",
-			"https://Root/a/b/c/",
-			FlagAddWWW,
-			"https://www.Root/a/b/c/",
-			false,
-		},
-		&testCase{
-			"SortQuery",
-			"http://root/toto/?b=4&a=1&c=3&b=2&a=5",
-			FlagSortQuery,
-			"http://root/toto/?a=1&a=5&b=2&b=4&c=3",
-			false,
-		},
-		&testCase{
-			"RemoveEmptyQuerySeparator",
-			"http://root/toto/?",
-			FlagRemoveEmptyQuerySeparator,
-			"http://root/toto/",
-			false,
-		},
-		&testCase{
-			"Unsafe",
-			"HTTPS://www.RooT.com/toto/t%45%1f///a/./b/../c/?z=3&w=2&a=4&w=1#invalid",
-			FlagsUnsafeGreedy,
-			"http://root.com/toto/tE%1F/a/c?a=4&w=1&w=2&z=3",
-			false,
-		},
-		&testCase{
-			"Safe2",
-			"HTTPS://www.RooT.com/toto/t%45%1f///a/./b/../c/?z=3&w=2&a=4&w=1#invalid",
-			FlagsSafe,
-			"https://www.root.com/toto/tE%1F///a/./b/../c/?z=3&w=2&a=4&w=1#invalid",
-			false,
-		},
-		&testCase{
-			"UsuallySafe2",
-			"HTTPS://www.RooT.com/toto/t%45%1f///a/./b/../c/?z=3&w=2&a=4&w=1#invalid",
-			FlagsUsuallySafeGreedy,
-			"https://www.root.com/toto/tE%1F///a/c?z=3&w=2&a=4&w=1#invalid",
-			false,
-		},
-		&testCase{
-			"AddTrailingSlashBug",
-			"http://src.ca/",
-			FlagsAllNonGreedy,
-			"http://www.src.ca/",
-			false,
-		},
-		&testCase{
-			"SourceModified",
-			"HTTPS://www.RooT.com/toto/t%45%1f///a/./b/../c/?z=3&w=2&a=4&w=1#invalid",
-			FlagsUnsafeGreedy,
-			"http://root.com/toto/tE%1F/a/c?a=4&w=1&w=2&z=3",
-			true,
-		},
-		&testCase{
-			"IPv6-1",
-			"http://[2001:db8:1f70::999:de8:7648:6e8]/test",
-			FlagsSafe | FlagRemoveDotSegments,
-			"http://[2001:db8:1f70::999:de8:7648:6e8]/test",
-			false,
-		},
-		&testCase{
-			"IPv6-2",
-			"http://[::ffff:192.168.1.1]/test",
-			FlagsSafe | FlagRemoveDotSegments,
-			"http://[::ffff:192.168.1.1]/test",
-			false,
-		},
-		&testCase{
-			"IPv6-3",
-			"http://[::ffff:192.168.1.1]:80/test",
-			FlagsSafe | FlagRemoveDotSegments,
-			"http://[::ffff:192.168.1.1]/test",
-			false,
-		},
-		&testCase{
-			"IPv6-4",
-			"htTps://[::fFff:192.168.1.1]:443/test",
-			FlagsSafe | FlagRemoveDotSegments,
-			"https://[::ffff:192.168.1.1]/test",
-			false,
-		},
-		&testCase{
-			"FTP",
-			"ftp://user:pass@ftp.foo.net/foo/bar",
-			FlagsSafe | FlagRemoveDotSegments,
-			"ftp://user:pass@ftp.foo.net/foo/bar",
-			false,
-		},
-		&testCase{
-			"Standard-1",
-			"http://www.foo.com:80/foo",
-			FlagsSafe | FlagRemoveDotSegments,
-			"http://www.foo.com/foo",
-			false,
-		},
-		&testCase{
-			"Standard-2",
-			"http://www.foo.com:8000/foo",
-			FlagsSafe | FlagRemoveDotSegments,
-			"http://www.foo.com:8000/foo",
-			false,
-		},
-		&testCase{
-			"Standard-3",
-			"http://www.foo.com/%7ebar",
-			FlagsSafe | FlagRemoveDotSegments,
-			"http://www.foo.com/~bar",
-			false,
-		},
-		&testCase{
-			"Standard-4",
-			"http://www.foo.com/%7Ebar",
-			FlagsSafe | FlagRemoveDotSegments,
-			"http://www.foo.com/~bar",
-			false,
-		},
-		&testCase{
-			"Standard-5",
-			"http://USER:pass@www.Example.COM/foo/bar",
-			FlagsSafe | FlagRemoveDotSegments,
-			"http://USER:pass@www.example.com/foo/bar",
-			false,
-		},
-		&testCase{
-			"Standard-6",
-			"http://test.example/?a=%26&b=1",
-			FlagsSafe | FlagRemoveDotSegments,
-			"http://test.example/?a=%26&b=1",
-			false,
-		},
-		&testCase{
-			"Standard-7",
-			"http://test.example/%25/?p=%20val%20%25",
-			FlagsSafe | FlagRemoveDotSegments,
-			"http://test.example/%25/?p=%20val%20%25",
-			false,
-		},
-		&testCase{
-			"Standard-8",
-			"http://test.example/path/with a%20space+/",
-			FlagsSafe | FlagRemoveDotSegments,
-			"http://test.example/path/with%20a%20space+/",
-			false,
-		},
-		&testCase{
-			"Standard-9",
-			"http://test.example/?",
-			FlagsSafe | FlagRemoveDotSegments,
-			"http://test.example/",
-			false,
-		},
-		&testCase{
-			"Standard-10",
-			"http://a.COM/path/?b&a",
-			FlagsSafe | FlagRemoveDotSegments,
-			"http://a.com/path/?b&a",
-			false,
-		},
-		&testCase{
-			"StandardCasesAddTrailingSlash",
-			"http://test.example?",
-			FlagsSafe | FlagAddTrailingSlash,
-			"http://test.example/",
-			false,
-		},
-		&testCase{
-			"OctalIP-1",
-			"http://0123.011.0.4/",
-			FlagsSafe | FlagDecodeOctalHost,
-			"http://0123.011.0.4/",
-			false,
-		},
-		&testCase{
-			"OctalIP-2",
-			"http://0102.0146.07.0223/",
-			FlagsSafe | FlagDecodeOctalHost,
-			"http://66.102.7.147/",
-			false,
-		},
-		&testCase{
-			"OctalIP-3",
-			"http://0102.0146.07.0223.:23/",
-			FlagsSafe | FlagDecodeOctalHost,
-			"http://66.102.7.147.:23/",
-			false,
-		},
-		&testCase{
-			"OctalIP-4",
-			"http://USER:pass@0102.0146.07.0223../",
-			FlagsSafe | FlagDecodeOctalHost,
-			"http://USER:pass@66.102.7.147../",
-			false,
-		},
-		&testCase{
-			"DWORDIP-1",
-			"http://123.1113982867/",
-			FlagsSafe | FlagDecodeDWORDHost,
-			"http://123.1113982867/",
-			false,
-		},
-		&testCase{
-			"DWORDIP-2",
-			"http://1113982867/",
-			FlagsSafe | FlagDecodeDWORDHost,
-			"http://66.102.7.147/",
-			false,
-		},
-		&testCase{
-			"DWORDIP-3",
-			"http://1113982867.:23/",
-			FlagsSafe | FlagDecodeDWORDHost,
-			"http://66.102.7.147.:23/",
-			false,
-		},
-		&testCase{
-			"DWORDIP-4",
-			"http://USER:pass@1113982867../",
-			FlagsSafe | FlagDecodeDWORDHost,
-			"http://USER:pass@66.102.7.147../",
-			false,
-		},
-		&testCase{
-			"HexIP-1",
-			"http://0x123.1113982867/",
-			FlagsSafe | FlagDecodeHexHost,
-			"http://0x123.1113982867/",
-			false,
-		},
-		&testCase{
-			"HexIP-2",
-			"http://0x42660793/",
-			FlagsSafe | FlagDecodeHexHost,
-			"http://66.102.7.147/",
-			false,
-		},
-		&testCase{
-			"HexIP-3",
-			"http://0x42660793.:23/",
-			FlagsSafe | FlagDecodeHexHost,
-			"http://66.102.7.147.:23/",
-			false,
-		},
-		&testCase{
-			"HexIP-4",
-			"http://USER:pass@0x42660793../",
-			FlagsSafe | FlagDecodeHexHost,
-			"http://USER:pass@66.102.7.147../",
-			false,
-		},
-		&testCase{
-			"UnnecessaryHostDots-1",
-			"http://.www.foo.com../foo/bar.html",
-			FlagsSafe | FlagRemoveUnnecessaryHostDots,
-			"http://www.foo.com/foo/bar.html",
-			false,
-		},
-		&testCase{
-			"UnnecessaryHostDots-2",
-			"http://www.foo.com./foo/bar.html",
-			FlagsSafe | FlagRemoveUnnecessaryHostDots,
-			"http://www.foo.com/foo/bar.html",
-			false,
-		},
-		&testCase{
-			"UnnecessaryHostDots-3",
-			"http://www.foo.com.:81/foo",
-			FlagsSafe | FlagRemoveUnnecessaryHostDots,
-			"http://www.foo.com:81/foo",
-			false,
-		},
-		&testCase{
-			"UnnecessaryHostDots-4",
-			"http://www.example.com./",
-			FlagsSafe | FlagRemoveUnnecessaryHostDots,
-			"http://www.example.com/",
-			false,
-		},
-		&testCase{
-			"EmptyPort-1",
-			"http://www.thedraymin.co.uk:/main/?p=308",
-			FlagsSafe | FlagRemoveEmptyPortSeparator,
-			"http://www.thedraymin.co.uk/main/?p=308",
-			false,
-		},
-		&testCase{
-			"EmptyPort-2",
-			"http://www.src.ca:",
-			FlagsSafe | FlagRemoveEmptyPortSeparator,
-			"http://www.src.ca",
-			false,
-		},
-		&testCase{
-			"Slashes-1",
-			"http://test.example/foo/bar/.",
-			FlagsSafe | FlagRemoveDotSegments | FlagRemoveDuplicateSlashes,
-			"http://test.example/foo/bar/",
-			false,
-		},
-		&testCase{
-			"Slashes-2",
-			"http://test.example/foo/bar/./",
-			FlagsSafe | FlagRemoveDotSegments | FlagRemoveDuplicateSlashes,
-			"http://test.example/foo/bar/",
-			false,
-		},
-		&testCase{
-			"Slashes-3",
-			"http://test.example/foo/bar/..",
-			FlagsSafe | FlagRemoveDotSegments | FlagRemoveDuplicateSlashes,
-			"http://test.example/foo/",
-			false,
-		},
-		&testCase{
-			"Slashes-4",
-			"http://test.example/foo/bar/../",
-			FlagsSafe | FlagRemoveDotSegments | FlagRemoveDuplicateSlashes,
-			"http://test.example/foo/",
-			false,
-		},
-		&testCase{
-			"Slashes-5",
-			"http://test.example/foo/bar/../baz",
-			FlagsSafe | FlagRemoveDotSegments | FlagRemoveDuplicateSlashes,
-			"http://test.example/foo/baz",
-			false,
-		},
-		&testCase{
-			"Slashes-6",
-			"http://test.example/foo/bar/../..",
-			FlagsSafe | FlagRemoveDotSegments | FlagRemoveDuplicateSlashes,
-			"http://test.example/",
-			false,
-		},
-		&testCase{
-			"Slashes-7",
-			"http://test.example/foo/bar/../../",
-			FlagsSafe | FlagRemoveDotSegments | FlagRemoveDuplicateSlashes,
-			"http://test.example/",
-			false,
-		},
-		&testCase{
-			"Slashes-8",
-			"http://test.example/foo/bar/../../baz",
-			FlagsSafe | FlagRemoveDotSegments | FlagRemoveDuplicateSlashes,
-			"http://test.example/baz",
-			false,
-		},
-		&testCase{
-			"Slashes-9",
-			"http://test.example/foo/bar/../../../baz",
-			FlagsSafe | FlagRemoveDotSegments | FlagRemoveDuplicateSlashes,
-			"http://test.example/baz",
-			false,
-		},
-		&testCase{
-			"Slashes-10",
-			"http://test.example/foo/bar/../../../../baz",
-			FlagsSafe | FlagRemoveDotSegments | FlagRemoveDuplicateSlashes,
-			"http://test.example/baz",
-			false,
-		},
-		&testCase{
-			"Slashes-11",
-			"http://test.example/./foo",
-			FlagsSafe | FlagRemoveDotSegments | FlagRemoveDuplicateSlashes,
-			"http://test.example/foo",
-			false,
-		},
-		&testCase{
-			"Slashes-12",
-			"http://test.example/../foo",
-			FlagsSafe | FlagRemoveDotSegments | FlagRemoveDuplicateSlashes,
-			"http://test.example/foo",
-			false,
-		},
-		&testCase{
-			"Slashes-13",
-			"http://test.example/foo.",
-			FlagsSafe | FlagRemoveDotSegments | FlagRemoveDuplicateSlashes,
-			"http://test.example/foo.",
-			false,
-		},
-		&testCase{
-			"Slashes-14",
-			"http://test.example/.foo",
-			FlagsSafe | FlagRemoveDotSegments | FlagRemoveDuplicateSlashes,
-			"http://test.example/.foo",
-			false,
-		},
-		&testCase{
-			"Slashes-15",
-			"http://test.example/foo..",
-			FlagsSafe | FlagRemoveDotSegments | FlagRemoveDuplicateSlashes,
-			"http://test.example/foo..",
-			false,
-		},
-		&testCase{
-			"Slashes-16",
-			"http://test.example/..foo",
-			FlagsSafe | FlagRemoveDotSegments | FlagRemoveDuplicateSlashes,
-			"http://test.example/..foo",
-			false,
-		},
-		&testCase{
-			"Slashes-17",
-			"http://test.example/./../foo",
-			FlagsSafe | FlagRemoveDotSegments | FlagRemoveDuplicateSlashes,
-			"http://test.example/foo",
-			false,
-		},
-		&testCase{
-			"Slashes-18",
-			"http://test.example/./foo/.",
-			FlagsSafe | FlagRemoveDotSegments | FlagRemoveDuplicateSlashes,
-			"http://test.example/foo/",
-			false,
-		},
-		&testCase{
-			"Slashes-19",
-			"http://test.example/foo/./bar",
-			FlagsSafe | FlagRemoveDotSegments | FlagRemoveDuplicateSlashes,
-			"http://test.example/foo/bar",
-			false,
-		},
-		&testCase{
-			"Slashes-20",
-			"http://test.example/foo/../bar",
-			FlagsSafe | FlagRemoveDotSegments | FlagRemoveDuplicateSlashes,
-			"http://test.example/bar",
-			false,
-		},
-		&testCase{
-			"Slashes-21",
-			"http://test.example/foo//",
-			FlagsSafe | FlagRemoveDotSegments | FlagRemoveDuplicateSlashes,
-			"http://test.example/foo/",
-			false,
-		},
-		&testCase{
-			"Slashes-22",
-			"http://test.example/foo///bar//",
-			FlagsSafe | FlagRemoveDotSegments | FlagRemoveDuplicateSlashes,
-			"http://test.example/foo/bar/",
-			false,
-		},
-		&testCase{
-			"Relative",
-			"foo/bar",
-			FlagsAllGreedy,
-			"foo/bar",
-			false,
-		},
-		&testCase{
-			"Relative-1",
-			"./../foo",
-			FlagsSafe | FlagRemoveDotSegments | FlagRemoveDuplicateSlashes,
-			"foo",
-			false,
-		},
-		&testCase{
-			"Relative-2",
-			"./foo/bar/../baz/../bang/..",
-			FlagsSafe | FlagRemoveDotSegments | FlagRemoveDuplicateSlashes,
-			"foo/",
-			false,
-		},
-		&testCase{
-			"Relative-3",
-			"foo///bar//",
-			FlagsSafe | FlagRemoveDotSegments | FlagRemoveDuplicateSlashes,
-			"foo/bar/",
-			false,
-		},
-		&testCase{
-			"Relative-4",
-			"www.youtube.com",
-			FlagsUsuallySafeGreedy,
-			"www.youtube.com",
-			false,
-		},
-		/*&testCase{
-			"UrlNorm-5",
-			"http://ja.wikipedia.org/wiki/%E3%82%AD%E3%83%A3%E3%82%BF%E3%83%94%E3%83%A9%E3%83%BC%E3%82%B8%E3%83%A3%E3%83%91%E3%83%B3",
-			FlagsSafe | FlagRemoveDotSegments,
-			"http://ja.wikipedia.org/wiki/\xe3\x82\xad\xe3\x83\xa3\xe3\x82\xbf\xe3\x83\x94\xe3\x83\xa9\xe3\x83\xbc\xe3\x82\xb8\xe3\x83\xa3\xe3\x83\x91\xe3\x83\xb3",
-			false,
-		},
-		&testCase{
-			"UrlNorm-1",
-			"http://test.example/?a=%e3%82%82%26",
-			FlagsAllGreedy,
-			"http://test.example/?a=\xe3\x82\x82%26",
-			false,
-		},*/
-	}
-)
-
-func TestRunner(t *testing.T) {
-	for _, tc := range cases {
-		runCase(tc, t)
-	}
-}
-
-func runCase(tc *testCase, t *testing.T) {
-	t.Logf("running %s...", tc.nm)
-	if tc.parsed {
-		u, e := url.Parse(tc.src)
-		if e != nil {
-			t.Errorf("%s - FAIL : %s", tc.nm, e)
-			return
-		} else {
-			NormalizeURL(u, tc.flgs)
-			if s := u.String(); s != tc.res {
-				t.Errorf("%s - FAIL expected '%s', got '%s'", tc.nm, tc.res, s)
-			}
-		}
-	} else {
-		if s, e := NormalizeURLString(tc.src, tc.flgs); e != nil {
-			t.Errorf("%s - FAIL : %s", tc.nm, e)
-		} else if s != tc.res {
-			t.Errorf("%s - FAIL expected '%s', got '%s'", tc.nm, tc.res, s)
-		}
-	}
-}
-
-func TestDecodeUnnecessaryEscapesAll(t *testing.T) {
-	var url = "http://host/"
-
-	for i := 0; i < 256; i++ {
-		url += fmt.Sprintf("%%%02x", i)
-	}
-	if s, e := NormalizeURLString(url, FlagDecodeUnnecessaryEscapes); e != nil {
-		t.Fatalf("Got error %s", e.Error())
-	} else {
-		const want = "http://host/%00%01%02%03%04%05%06%07%08%09%0A%0B%0C%0D%0E%0F%10%11%12%13%14%15%16%17%18%19%1A%1B%1C%1D%1E%1F%20!%22%23$%25&'()*+,-./0123456789:;%3C=%3E%3F@ABCDEFGHIJKLMNOPQRSTUVWXYZ[%5C]%5E_%60abcdefghijklmnopqrstuvwxyz%7B%7C%7D~%7F%80%81%82%83%84%85%86%87%88%89%8A%8B%8C%8D%8E%8F%90%91%92%93%94%95%96%97%98%99%9A%9B%9C%9D%9E%9F%A0%A1%A2%A3%A4%A5%A6%A7%A8%A9%AA%AB%AC%AD%AE%AF%B0%B1%B2%B3%B4%B5%B6%B7%B8%B9%BA%BB%BC%BD%BE%BF%C0%C1%C2%C3%C4%C5%C6%C7%C8%C9%CA%CB%CC%CD%CE%CF%D0%D1%D2%D3%D4%D5%D6%D7%D8%D9%DA%DB%DC%DD%DE%DF%E0%E1%E2%E3%E4%E5%E6%E7%E8%E9%EA%EB%EC%ED%EE%EF%F0%F1%F2%F3%F4%F5%F6%F7%F8%F9%FA%FB%FC%FD%FE%FF"
-		if s != want {
-			t.Errorf("DecodeUnnecessaryEscapesAll:\nwant\n%s\ngot\n%s", want, s)
-		}
-	}
-}
-
-func TestEncodeNecessaryEscapesAll(t *testing.T) {
-	var url = "http://host/"
-
-	for i := 0; i < 256; i++ {
-		if i != 0x25 {
-			url += string(i)
-		}
-	}
-	if s, e := NormalizeURLString(url, FlagEncodeNecessaryEscapes); e != nil {
-		t.Fatalf("Got error %s", e.Error())
-	} else {
-		const want = "http://host/%00%01%02%03%04%05%06%07%08%09%0A%0B%0C%0D%0E%0F%10%11%12%13%14%15%16%17%18%19%1A%1B%1C%1D%1E%1F%20!%22#$&'()*+,-./0123456789:;%3C=%3E?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[%5C]%5E_%60abcdefghijklmnopqrstuvwxyz%7B%7C%7D~%7F%C2%80%C2%81%C2%82%C2%83%C2%84%C2%85%C2%86%C2%87%C2%88%C2%89%C2%8A%C2%8B%C2%8C%C2%8D%C2%8E%C2%8F%C2%90%C2%91%C2%92%C2%93%C2%94%C2%95%C2%96%C2%97%C2%98%C2%99%C2%9A%C2%9B%C2%9C%C2%9D%C2%9E%C2%9F%C2%A0%C2%A1%C2%A2%C2%A3%C2%A4%C2%A5%C2%A6%C2%A7%C2%A8%C2%A9%C2%AA%C2%AB%C2%AC%C2%AD%C2%AE%C2%AF%C2%B0%C2%B1%C2%B2%C2%B3%C2%B4%C2%B5%C2%B6%C2%B7%C2%B8%C2%B9%C2%BA%C2%BB%C2%BC%C2%BD%C2%BE%C2%BF%C3%80%C3%81%C3%82%C3%83%C3%84%C3%85%C3%86%C3%87%C3%88%C3%89%C3%8A%C3%8B%C3%8C%C3%8D%C3%8E%C3%8F%C3%90%C3%91%C3%92%C3%93%C3%94%C3%95%C3%96%C3%97%C3%98%C3%99%C3%9A%C3%9B%C3%9C%C3%9D%C3%9E%C3%9F%C3%A0%C3%A1%C3%A2%C3%A3%C3%A4%C3%A5%C3%A6%C3%A7%C3%A8%C3%A9%C3%AA%C3%AB%C3%AC%C3%AD%C3%AE%C3%AF%C3%B0%C3%B1%C3%B2%C3%B3%C3%B4%C3%B5%C3%B6%C3%B7%C3%B8%C3%B9%C3%BA%C3%BB%C3%BC%C3%BD%C3%BE%C3%BF"
-		if s != want {
-			t.Errorf("EncodeNecessaryEscapesAll:\nwant\n%s\ngot\n%s", want, s)
-		}
-	}
-}
diff --git a/vendor/github.com/PuerkitoBio/purell/urlnorm_test.go b/vendor/github.com/PuerkitoBio/purell/urlnorm_test.go
deleted file mode 100644
index d1b2ca6..0000000
--- a/vendor/github.com/PuerkitoBio/purell/urlnorm_test.go
+++ /dev/null
@@ -1,53 +0,0 @@
-package purell
-
-import (
-	"testing"
-)
-
-// Test cases merged from PR #1
-// Originally from https://github.com/jehiah/urlnorm/blob/master/test_urlnorm.py
-
-func assertMap(t *testing.T, cases map[string]string, f NormalizationFlags) {
-	for bad, good := range cases {
-		s, e := NormalizeURLString(bad, f)
-		if e != nil {
-			t.Errorf("%s normalizing %v to %v", e.Error(), bad, good)
-		} else {
-			if s != good {
-				t.Errorf("source: %v expected: %v got: %v", bad, good, s)
-			}
-		}
-	}
-}
-
-// This tests normalization to a unicode representation
-// precent escapes for unreserved values are unescaped to their unicode value
-// tests normalization to idna domains
-// test ip word handling, ipv6 address handling, and trailing domain periods
-// in general, this matches google chromes unescaping for things in the address bar.
-// spaces are converted to '+' (perhaphs controversial)
-// http://code.google.com/p/google-url/ probably is another good reference for this approach
-func TestUrlnorm(t *testing.T) {
-	testcases := map[string]string{
-		"http://test.example/?a=%e3%82%82%26": "http://test.example/?a=%e3%82%82%26",
-		//"http://test.example/?a=%e3%82%82%26": "http://test.example/?a=\xe3\x82\x82%26", //should return a unicode character
-		"http://s.xn--q-bga.DE/":    "http://s.xn--q-bga.de/",       //should be in idna format
-		"http://XBLA\u306eXbox.com": "http://xn--xblaxbox-jf4g.com", //test utf8 and unicode
-		"http://президент.рф":       "http://xn--d1abbgf6aiiy.xn--p1ai",
-		"http://ПРЕЗИДЕНТ.РФ":       "http://xn--d1abbgf6aiiy.xn--p1ai",
-		"http://ab¥ヲ₩○.com":         "http://xn--ab-ida8983azmfnvs.com", //test width folding
-		"http://\u00e9.com":         "http://xn--9ca.com",
-		"http://e\u0301.com":        "http://xn--9ca.com",
-		"http://ja.wikipedia.org/wiki/%E3%82%AD%E3%83%A3%E3%82%BF%E3%83%94%E3%83%A9%E3%83%BC%E3%82%B8%E3%83%A3%E3%83%91%E3%83%B3": "http://ja.wikipedia.org/wiki/%E3%82%AD%E3%83%A3%E3%82%BF%E3%83%94%E3%83%A9%E3%83%BC%E3%82%B8%E3%83%A3%E3%83%91%E3%83%B3",
-		//"http://ja.wikipedia.org/wiki/%E3%82%AD%E3%83%A3%E3%82%BF%E3%83%94%E3%83%A9%E3%83%BC%E3%82%B8%E3%83%A3%E3%83%91%E3%83%B3": "http://ja.wikipedia.org/wiki/\xe3\x82\xad\xe3\x83\xa3\xe3\x82\xbf\xe3\x83\x94\xe3\x83\xa9\xe3\x83\xbc\xe3\x82\xb8\xe3\x83\xa3\xe3\x83\x91\xe3\x83\xb3",
-
-		"http://test.example/\xe3\x82\xad": "http://test.example/%E3%82%AD",
-		//"http://test.example/\xe3\x82\xad":              "http://test.example/\xe3\x82\xad",
-		"http://test.example/?p=%23val#test-%23-val%25": "http://test.example/?p=%23val#test-%23-val%25", //check that %23 (#) is not escaped where it shouldn't be
-
-		"http://test.domain/I%C3%B1t%C3%ABrn%C3%A2ti%C3%B4n%EF%BF%BDliz%C3%A6ti%C3%B8n": "http://test.domain/I%C3%B1t%C3%ABrn%C3%A2ti%C3%B4n%EF%BF%BDliz%C3%A6ti%C3%B8n",
-		//"http://test.domain/I%C3%B1t%C3%ABrn%C3%A2ti%C3%B4n%EF%BF%BDliz%C3%A6ti%C3%B8n": "http://test.domain/I\xc3\xb1t\xc3\xabrn\xc3\xa2ti\xc3\xb4n\xef\xbf\xbdliz\xc3\xa6ti\xc3\xb8n",
-	}
-
-	assertMap(t, testcases, FlagsSafe|FlagRemoveDotSegments)
-}
diff --git a/vendor/github.com/PuerkitoBio/urlesc/urlesc_test.go b/vendor/github.com/PuerkitoBio/urlesc/urlesc_test.go
deleted file mode 100644
index 45202e1..0000000
--- a/vendor/github.com/PuerkitoBio/urlesc/urlesc_test.go
+++ /dev/null
@@ -1,641 +0,0 @@
-// Copyright 2009 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package urlesc
-
-import (
-	"net/url"
-	"testing"
-)
-
-type URLTest struct {
-	in        string
-	out       *url.URL
-	roundtrip string // expected result of reserializing the URL; empty means same as "in".
-}
-
-var urltests = []URLTest{
-	// no path
-	{
-		"http://www.google.com",
-		&url.URL{
-			Scheme: "http",
-			Host:   "www.google.com",
-		},
-		"",
-	},
-	// path
-	{
-		"http://www.google.com/",
-		&url.URL{
-			Scheme: "http",
-			Host:   "www.google.com",
-			Path:   "/",
-		},
-		"",
-	},
-	// path with hex escaping
-	{
-		"http://www.google.com/file%20one%26two",
-		&url.URL{
-			Scheme: "http",
-			Host:   "www.google.com",
-			Path:   "/file one&two",
-		},
-		"http://www.google.com/file%20one&two",
-	},
-	// user
-	{
-		"ftp://webmaster@www.google.com/",
-		&url.URL{
-			Scheme: "ftp",
-			User:   url.User("webmaster"),
-			Host:   "www.google.com",
-			Path:   "/",
-		},
-		"",
-	},
-	// escape sequence in username
-	{
-		"ftp://john%20doe@www.google.com/",
-		&url.URL{
-			Scheme: "ftp",
-			User:   url.User("john doe"),
-			Host:   "www.google.com",
-			Path:   "/",
-		},
-		"ftp://john%20doe@www.google.com/",
-	},
-	// query
-	{
-		"http://www.google.com/?q=go+language",
-		&url.URL{
-			Scheme:   "http",
-			Host:     "www.google.com",
-			Path:     "/",
-			RawQuery: "q=go+language",
-		},
-		"",
-	},
-	// query with hex escaping: NOT parsed
-	{
-		"http://www.google.com/?q=go%20language",
-		&url.URL{
-			Scheme:   "http",
-			Host:     "www.google.com",
-			Path:     "/",
-			RawQuery: "q=go%20language",
-		},
-		"",
-	},
-	// %20 outside query
-	{
-		"http://www.google.com/a%20b?q=c+d",
-		&url.URL{
-			Scheme:   "http",
-			Host:     "www.google.com",
-			Path:     "/a b",
-			RawQuery: "q=c+d",
-		},
-		"",
-	},
-	// path without leading /, so no parsing
-	{
-		"http:www.google.com/?q=go+language",
-		&url.URL{
-			Scheme:   "http",
-			Opaque:   "www.google.com/",
-			RawQuery: "q=go+language",
-		},
-		"http:www.google.com/?q=go+language",
-	},
-	// path without leading /, so no parsing
-	{
-		"http:%2f%2fwww.google.com/?q=go+language",
-		&url.URL{
-			Scheme:   "http",
-			Opaque:   "%2f%2fwww.google.com/",
-			RawQuery: "q=go+language",
-		},
-		"http:%2f%2fwww.google.com/?q=go+language",
-	},
-	// non-authority with path
-	{
-		"mailto:/webmaster@golang.org",
-		&url.URL{
-			Scheme: "mailto",
-			Path:   "/webmaster@golang.org",
-		},
-		"mailto:///webmaster@golang.org", // unfortunate compromise
-	},
-	// non-authority
-	{
-		"mailto:webmaster@golang.org",
-		&url.URL{
-			Scheme: "mailto",
-			Opaque: "webmaster@golang.org",
-		},
-		"",
-	},
-	// unescaped :// in query should not create a scheme
-	{
-		"/foo?query=http://bad",
-		&url.URL{
-			Path:     "/foo",
-			RawQuery: "query=http://bad",
-		},
-		"",
-	},
-	// leading // without scheme should create an authority
-	{
-		"//foo",
-		&url.URL{
-			Host: "foo",
-		},
-		"",
-	},
-	// leading // without scheme, with userinfo, path, and query
-	{
-		"//user@foo/path?a=b",
-		&url.URL{
-			User:     url.User("user"),
-			Host:     "foo",
-			Path:     "/path",
-			RawQuery: "a=b",
-		},
-		"",
-	},
-	// Three leading slashes isn't an authority, but doesn't return an error.
-	// (We can't return an error, as this code is also used via
-	// ServeHTTP -> ReadRequest -> Parse, which is arguably a
-	// different URL parsing context, but currently shares the
-	// same codepath)
-	{
-		"///threeslashes",
-		&url.URL{
-			Path: "///threeslashes",
-		},
-		"",
-	},
-	{
-		"http://user:password@google.com",
-		&url.URL{
-			Scheme: "http",
-			User:   url.UserPassword("user", "password"),
-			Host:   "google.com",
-		},
-		"http://user:password@google.com",
-	},
-	// unescaped @ in username should not confuse host
-	{
-		"http://j@ne:password@google.com",
-		&url.URL{
-			Scheme: "http",
-			User:   url.UserPassword("j@ne", "password"),
-			Host:   "google.com",
-		},
-		"http://j%40ne:password@google.com",
-	},
-	// unescaped @ in password should not confuse host
-	{
-		"http://jane:p@ssword@google.com",
-		&url.URL{
-			Scheme: "http",
-			User:   url.UserPassword("jane", "p@ssword"),
-			Host:   "google.com",
-		},
-		"http://jane:p%40ssword@google.com",
-	},
-	{
-		"http://j@ne:password@google.com/p@th?q=@go",
-		&url.URL{
-			Scheme:   "http",
-			User:     url.UserPassword("j@ne", "password"),
-			Host:     "google.com",
-			Path:     "/p@th",
-			RawQuery: "q=@go",
-		},
-		"http://j%40ne:password@google.com/p@th?q=@go",
-	},
-	{
-		"http://www.google.com/?q=go+language#foo",
-		&url.URL{
-			Scheme:   "http",
-			Host:     "www.google.com",
-			Path:     "/",
-			RawQuery: "q=go+language",
-			Fragment: "foo",
-		},
-		"",
-	},
-	{
-		"http://www.google.com/?q=go+language#foo%26bar",
-		&url.URL{
-			Scheme:   "http",
-			Host:     "www.google.com",
-			Path:     "/",
-			RawQuery: "q=go+language",
-			Fragment: "foo&bar",
-		},
-		"http://www.google.com/?q=go+language#foo&bar",
-	},
-	{
-		"file:///home/adg/rabbits",
-		&url.URL{
-			Scheme: "file",
-			Host:   "",
-			Path:   "/home/adg/rabbits",
-		},
-		"file:///home/adg/rabbits",
-	},
-	// "Windows" paths are no exception to the rule.
-	// See golang.org/issue/6027, especially comment #9.
-	{
-		"file:///C:/FooBar/Baz.txt",
-		&url.URL{
-			Scheme: "file",
-			Host:   "",
-			Path:   "/C:/FooBar/Baz.txt",
-		},
-		"file:///C:/FooBar/Baz.txt",
-	},
-	// case-insensitive scheme
-	{
-		"MaIlTo:webmaster@golang.org",
-		&url.URL{
-			Scheme: "mailto",
-			Opaque: "webmaster@golang.org",
-		},
-		"mailto:webmaster@golang.org",
-	},
-	// Relative path
-	{
-		"a/b/c",
-		&url.URL{
-			Path: "a/b/c",
-		},
-		"a/b/c",
-	},
-	// escaped '?' in username and password
-	{
-		"http://%3Fam:pa%3Fsword@google.com",
-		&url.URL{
-			Scheme: "http",
-			User:   url.UserPassword("?am", "pa?sword"),
-			Host:   "google.com",
-		},
-		"",
-	},
-	// escaped '?' and '#' in path
-	{
-		"http://example.com/%3F%23",
-		&url.URL{
-			Scheme: "http",
-			Host:   "example.com",
-			Path:   "?#",
-		},
-		"",
-	},
-	// unescaped [ ] ! ' ( ) * in path
-	{
-		"http://example.com/[]!'()*",
-		&url.URL{
-			Scheme: "http",
-			Host:   "example.com",
-			Path:   "[]!'()*",
-		},
-		"http://example.com/[]!'()*",
-	},
-	// escaped : / ? # [ ] @ in username and password
-	{
-		"http://%3A%2F%3F:%23%5B%5D%40@example.com",
-		&url.URL{
-			Scheme: "http",
-			User:   url.UserPassword(":/?", "#[]@"),
-			Host:   "example.com",
-		},
-		"",
-	},
-	// unescaped ! $ & ' ( ) * + , ; = in username and password
-	{
-		"http://!$&'():*+,;=@example.com",
-		&url.URL{
-			Scheme: "http",
-			User:   url.UserPassword("!$&'()", "*+,;="),
-			Host:   "example.com",
-		},
-		"",
-	},
-	// unescaped = : / . ? = in query component
-	{
-		"http://example.com/?q=http://google.com/?q=",
-		&url.URL{
-			Scheme:   "http",
-			Host:     "example.com",
-			Path:     "/",
-			RawQuery: "q=http://google.com/?q=",
-		},
-		"",
-	},
-	// unescaped : / ? [ ] @ ! $ & ' ( ) * + , ; = in fragment
-	{
-		"http://example.com/#:/?%23[]@!$&'()*+,;=",
-		&url.URL{
-			Scheme:   "http",
-			Host:     "example.com",
-			Path:     "/",
-			Fragment: ":/?#[]@!$&'()*+,;=",
-		},
-		"",
-	},
-}
-
-func DoTestString(t *testing.T, parse func(string) (*url.URL, error), name string, tests []URLTest) {
-	for _, tt := range tests {
-		u, err := parse(tt.in)
-		if err != nil {
-			t.Errorf("%s(%q) returned error %s", name, tt.in, err)
-			continue
-		}
-		expected := tt.in
-		if len(tt.roundtrip) > 0 {
-			expected = tt.roundtrip
-		}
-		s := Escape(u)
-		if s != expected {
-			t.Errorf("Escape(%s(%q)) == %q (expected %q)", name, tt.in, s, expected)
-		}
-	}
-}
-
-func TestURLString(t *testing.T) {
-	DoTestString(t, url.Parse, "Parse", urltests)
-
-	// no leading slash on path should prepend
-	// slash on String() call
-	noslash := URLTest{
-		"http://www.google.com/search",
-		&url.URL{
-			Scheme: "http",
-			Host:   "www.google.com",
-			Path:   "search",
-		},
-		"",
-	}
-	s := Escape(noslash.out)
-	if s != noslash.in {
-		t.Errorf("Expected %s; go %s", noslash.in, s)
-	}
-}
-
-type EscapeTest struct {
-	in  string
-	out string
-	err error
-}
-
-var escapeTests = []EscapeTest{
-	{
-		"",
-		"",
-		nil,
-	},
-	{
-		"abc",
-		"abc",
-		nil,
-	},
-	{
-		"one two",
-		"one+two",
-		nil,
-	},
-	{
-		"10%",
-		"10%25",
-		nil,
-	},
-	{
-		" ?&=#+%!<>#\"{}|\\^[]`☺\t:/@$'()*,;",
-		"+?%26%3D%23%2B%25%21%3C%3E%23%22%7B%7D%7C%5C%5E%5B%5D%60%E2%98%BA%09%3A/%40%24%27%28%29%2A%2C%3B",
-		nil,
-	},
-}
-
-func TestEscape(t *testing.T) {
-	for _, tt := range escapeTests {
-		actual := QueryEscape(tt.in)
-		if tt.out != actual {
-			t.Errorf("QueryEscape(%q) = %q, want %q", tt.in, actual, tt.out)
-		}
-
-		// for bonus points, verify that escape:unescape is an identity.
-		roundtrip, err := url.QueryUnescape(actual)
-		if roundtrip != tt.in || err != nil {
-			t.Errorf("QueryUnescape(%q) = %q, %s; want %q, %s", actual, roundtrip, err, tt.in, "[no error]")
-		}
-	}
-}
-
-var resolveReferenceTests = []struct {
-	base, rel, expected string
-}{
-	// Absolute URL references
-	{"http://foo.com?a=b", "https://bar.com/", "https://bar.com/"},
-	{"http://foo.com/", "https://bar.com/?a=b", "https://bar.com/?a=b"},
-	{"http://foo.com/bar", "mailto:foo@example.com", "mailto:foo@example.com"},
-
-	// Path-absolute references
-	{"http://foo.com/bar", "/baz", "http://foo.com/baz"},
-	{"http://foo.com/bar?a=b#f", "/baz", "http://foo.com/baz"},
-	{"http://foo.com/bar?a=b", "/baz?c=d", "http://foo.com/baz?c=d"},
-
-	// Scheme-relative
-	{"https://foo.com/bar?a=b", "//bar.com/quux", "https://bar.com/quux"},
-
-	// Path-relative references:
-
-	// ... current directory
-	{"http://foo.com", ".", "http://foo.com/"},
-	{"http://foo.com/bar", ".", "http://foo.com/"},
-	{"http://foo.com/bar/", ".", "http://foo.com/bar/"},
-
-	// ... going down
-	{"http://foo.com", "bar", "http://foo.com/bar"},
-	{"http://foo.com/", "bar", "http://foo.com/bar"},
-	{"http://foo.com/bar/baz", "quux", "http://foo.com/bar/quux"},
-
-	// ... going up
-	{"http://foo.com/bar/baz", "../quux", "http://foo.com/quux"},
-	{"http://foo.com/bar/baz", "../../../../../quux", "http://foo.com/quux"},
-	{"http://foo.com/bar", "..", "http://foo.com/"},
-	{"http://foo.com/bar/baz", "./..", "http://foo.com/"},
-	// ".." in the middle (issue 3560)
-	{"http://foo.com/bar/baz", "quux/dotdot/../tail", "http://foo.com/bar/quux/tail"},
-	{"http://foo.com/bar/baz", "quux/./dotdot/../tail", "http://foo.com/bar/quux/tail"},
-	{"http://foo.com/bar/baz", "quux/./dotdot/.././tail", "http://foo.com/bar/quux/tail"},
-	{"http://foo.com/bar/baz", "quux/./dotdot/./../tail", "http://foo.com/bar/quux/tail"},
-	{"http://foo.com/bar/baz", "quux/./dotdot/dotdot/././../../tail", "http://foo.com/bar/quux/tail"},
-	{"http://foo.com/bar/baz", "quux/./dotdot/dotdot/./.././../tail", "http://foo.com/bar/quux/tail"},
-	{"http://foo.com/bar/baz", "quux/./dotdot/dotdot/dotdot/./../../.././././tail", "http://foo.com/bar/quux/tail"},
-	{"http://foo.com/bar/baz", "quux/./dotdot/../dotdot/../dot/./tail/..", "http://foo.com/bar/quux/dot/"},
-
-	// Remove any dot-segments prior to forming the target URI.
-	// http://tools.ietf.org/html/rfc3986#section-5.2.4
-	{"http://foo.com/dot/./dotdot/../foo/bar", "../baz", "http://foo.com/dot/baz"},
-
-	// Triple dot isn't special
-	{"http://foo.com/bar", "...", "http://foo.com/..."},
-
-	// Fragment
-	{"http://foo.com/bar", ".#frag", "http://foo.com/#frag"},
-
-	// RFC 3986: Normal Examples
-	// http://tools.ietf.org/html/rfc3986#section-5.4.1
-	{"http://a/b/c/d;p?q", "g:h", "g:h"},
-	{"http://a/b/c/d;p?q", "g", "http://a/b/c/g"},
-	{"http://a/b/c/d;p?q", "./g", "http://a/b/c/g"},
-	{"http://a/b/c/d;p?q", "g/", "http://a/b/c/g/"},
-	{"http://a/b/c/d;p?q", "/g", "http://a/g"},
-	{"http://a/b/c/d;p?q", "//g", "http://g"},
-	{"http://a/b/c/d;p?q", "?y", "http://a/b/c/d;p?y"},
-	{"http://a/b/c/d;p?q", "g?y", "http://a/b/c/g?y"},
-	{"http://a/b/c/d;p?q", "#s", "http://a/b/c/d;p?q#s"},
-	{"http://a/b/c/d;p?q", "g#s", "http://a/b/c/g#s"},
-	{"http://a/b/c/d;p?q", "g?y#s", "http://a/b/c/g?y#s"},
-	{"http://a/b/c/d;p?q", ";x", "http://a/b/c/;x"},
-	{"http://a/b/c/d;p?q", "g;x", "http://a/b/c/g;x"},
-	{"http://a/b/c/d;p?q", "g;x?y#s", "http://a/b/c/g;x?y#s"},
-	{"http://a/b/c/d;p?q", "", "http://a/b/c/d;p?q"},
-	{"http://a/b/c/d;p?q", ".", "http://a/b/c/"},
-	{"http://a/b/c/d;p?q", "./", "http://a/b/c/"},
-	{"http://a/b/c/d;p?q", "..", "http://a/b/"},
-	{"http://a/b/c/d;p?q", "../", "http://a/b/"},
-	{"http://a/b/c/d;p?q", "../g", "http://a/b/g"},
-	{"http://a/b/c/d;p?q", "../..", "http://a/"},
-	{"http://a/b/c/d;p?q", "../../", "http://a/"},
-	{"http://a/b/c/d;p?q", "../../g", "http://a/g"},
-
-	// RFC 3986: Abnormal Examples
-	// http://tools.ietf.org/html/rfc3986#section-5.4.2
-	{"http://a/b/c/d;p?q", "../../../g", "http://a/g"},
-	{"http://a/b/c/d;p?q", "../../../../g", "http://a/g"},
-	{"http://a/b/c/d;p?q", "/./g", "http://a/g"},
-	{"http://a/b/c/d;p?q", "/../g", "http://a/g"},
-	{"http://a/b/c/d;p?q", "g.", "http://a/b/c/g."},
-	{"http://a/b/c/d;p?q", ".g", "http://a/b/c/.g"},
-	{"http://a/b/c/d;p?q", "g..", "http://a/b/c/g.."},
-	{"http://a/b/c/d;p?q", "..g", "http://a/b/c/..g"},
-	{"http://a/b/c/d;p?q", "./../g", "http://a/b/g"},
-	{"http://a/b/c/d;p?q", "./g/.", "http://a/b/c/g/"},
-	{"http://a/b/c/d;p?q", "g/./h", "http://a/b/c/g/h"},
-	{"http://a/b/c/d;p?q", "g/../h", "http://a/b/c/h"},
-	{"http://a/b/c/d;p?q", "g;x=1/./y", "http://a/b/c/g;x=1/y"},
-	{"http://a/b/c/d;p?q", "g;x=1/../y", "http://a/b/c/y"},
-	{"http://a/b/c/d;p?q", "g?y/./x", "http://a/b/c/g?y/./x"},
-	{"http://a/b/c/d;p?q", "g?y/../x", "http://a/b/c/g?y/../x"},
-	{"http://a/b/c/d;p?q", "g#s/./x", "http://a/b/c/g#s/./x"},
-	{"http://a/b/c/d;p?q", "g#s/../x", "http://a/b/c/g#s/../x"},
-
-	// Extras.
-	{"https://a/b/c/d;p?q", "//g?q", "https://g?q"},
-	{"https://a/b/c/d;p?q", "//g#s", "https://g#s"},
-	{"https://a/b/c/d;p?q", "//g/d/e/f?y#s", "https://g/d/e/f?y#s"},
-	{"https://a/b/c/d;p#s", "?y", "https://a/b/c/d;p?y"},
-	{"https://a/b/c/d;p?q#s", "?y", "https://a/b/c/d;p?y"},
-}
-
-func TestResolveReference(t *testing.T) {
-	mustParse := func(url_ string) *url.URL {
-		u, err := url.Parse(url_)
-		if err != nil {
-			t.Fatalf("Expected URL to parse: %q, got error: %v", url_, err)
-		}
-		return u
-	}
-	opaque := &url.URL{Scheme: "scheme", Opaque: "opaque"}
-	for _, test := range resolveReferenceTests {
-		base := mustParse(test.base)
-		rel := mustParse(test.rel)
-		url := base.ResolveReference(rel)
-		if Escape(url) != test.expected {
-			t.Errorf("URL(%q).ResolveReference(%q) == %q, got %q", test.base, test.rel, test.expected, Escape(url))
-		}
-		// Ensure that new instances are returned.
-		if base == url {
-			t.Errorf("Expected URL.ResolveReference to return new URL instance.")
-		}
-		// Test the convenience wrapper too.
-		url, err := base.Parse(test.rel)
-		if err != nil {
-			t.Errorf("URL(%q).Parse(%q) failed: %v", test.base, test.rel, err)
-		} else if Escape(url) != test.expected {
-			t.Errorf("URL(%q).Parse(%q) == %q, got %q", test.base, test.rel, test.expected, Escape(url))
-		} else if base == url {
-			// Ensure that new instances are returned for the wrapper too.
-			t.Errorf("Expected URL.Parse to return new URL instance.")
-		}
-		// Ensure Opaque resets the URL.
-		url = base.ResolveReference(opaque)
-		if *url != *opaque {
-			t.Errorf("ResolveReference failed to resolve opaque URL: want %#v, got %#v", url, opaque)
-		}
-		// Test the convenience wrapper with an opaque URL too.
-		url, err = base.Parse("scheme:opaque")
-		if err != nil {
-			t.Errorf(`URL(%q).Parse("scheme:opaque") failed: %v`, test.base, err)
-		} else if *url != *opaque {
-			t.Errorf("Parse failed to resolve opaque URL: want %#v, got %#v", url, opaque)
-		} else if base == url {
-			// Ensure that new instances are returned, again.
-			t.Errorf("Expected URL.Parse to return new URL instance.")
-		}
-	}
-}
-
-type shouldEscapeTest struct {
-	in     byte
-	mode   encoding
-	escape bool
-}
-
-var shouldEscapeTests = []shouldEscapeTest{
-	// Unreserved characters (§2.3)
-	{'a', encodePath, false},
-	{'a', encodeUserPassword, false},
-	{'a', encodeQueryComponent, false},
-	{'a', encodeFragment, false},
-	{'z', encodePath, false},
-	{'A', encodePath, false},
-	{'Z', encodePath, false},
-	{'0', encodePath, false},
-	{'9', encodePath, false},
-	{'-', encodePath, false},
-	{'-', encodeUserPassword, false},
-	{'-', encodeQueryComponent, false},
-	{'-', encodeFragment, false},
-	{'.', encodePath, false},
-	{'_', encodePath, false},
-	{'~', encodePath, false},
-
-	// User information (§3.2.1)
-	{':', encodeUserPassword, true},
-	{'/', encodeUserPassword, true},
-	{'?', encodeUserPassword, true},
-	{'@', encodeUserPassword, true},
-	{'$', encodeUserPassword, false},
-	{'&', encodeUserPassword, false},
-	{'+', encodeUserPassword, false},
-	{',', encodeUserPassword, false},
-	{';', encodeUserPassword, false},
-	{'=', encodeUserPassword, false},
-}
-
-func TestShouldEscape(t *testing.T) {
-	for _, tt := range shouldEscapeTests {
-		if shouldEscape(tt.in, tt.mode) != tt.escape {
-			t.Errorf("shouldEscape(%q, %v) returned %v; expected %v", tt.in, tt.mode, !tt.escape, tt.escape)
-		}
-	}
-}
diff --git a/vendor/github.com/Sirupsen/logrus/.travis.yml b/vendor/github.com/Sirupsen/logrus/.travis.yml
deleted file mode 100644
index 1f953be..0000000
--- a/vendor/github.com/Sirupsen/logrus/.travis.yml
+++ /dev/null
@@ -1,51 +0,0 @@
-language: go
-env:
-  - GOMAXPROCS=4 GORACE=halt_on_error=1
-matrix:
-  include:
-    - go: 1.10.x
-      install:
-        - go get github.com/stretchr/testify/assert
-        - go get golang.org/x/crypto/ssh/terminal
-        - go get golang.org/x/sys/unix
-        - go get golang.org/x/sys/windows
-      script:
-        - go test -race -v ./...
-    - go: 1.11.x
-      env: GO111MODULE=on
-      install:
-        - go mod download
-      script:
-        - go test -race -v ./...
-    - go: 1.11.x
-      env: GO111MODULE=off
-      install:
-        - go get github.com/stretchr/testify/assert
-        - go get golang.org/x/crypto/ssh/terminal
-        - go get golang.org/x/sys/unix
-        - go get golang.org/x/sys/windows
-      script:
-        - go test -race -v ./...
-    - go: 1.10.x
-      install:
-        - go get github.com/stretchr/testify/assert
-        - go get golang.org/x/crypto/ssh/terminal
-        - go get golang.org/x/sys/unix
-        - go get golang.org/x/sys/windows
-      script:
-        - go test -race -v -tags appengine ./...
-    - go: 1.11.x
-      env: GO111MODULE=on
-      install:
-        - go mod download
-      script:
-        - go test -race -v -tags appengine ./...
-    - go: 1.11.x
-      env: GO111MODULE=off
-      install:
-        - go get github.com/stretchr/testify/assert
-        - go get golang.org/x/crypto/ssh/terminal
-        - go get golang.org/x/sys/unix
-        - go get golang.org/x/sys/windows
-      script:
-        - go test -race -v -tags appengine ./...
diff --git a/vendor/github.com/Sirupsen/logrus/README.md b/vendor/github.com/Sirupsen/logrus/README.md
deleted file mode 100644
index 093bb13..0000000
--- a/vendor/github.com/Sirupsen/logrus/README.md
+++ /dev/null
@@ -1,493 +0,0 @@
-# Logrus <img src="http://i.imgur.com/hTeVwmJ.png" width="40" height="40" alt=":walrus:" class="emoji" title=":walrus:"/>&nbsp;[![Build Status](https://travis-ci.org/sirupsen/logrus.svg?branch=master)](https://travis-ci.org/sirupsen/logrus)&nbsp;[![GoDoc](https://godoc.org/github.com/sirupsen/logrus?status.svg)](https://godoc.org/github.com/sirupsen/logrus)
-
-Logrus is a structured logger for Go (golang), completely API compatible with
-the standard library logger.
-
-**Seeing weird case-sensitive problems?** It's in the past been possible to
-import Logrus as both upper- and lower-case. Due to the Go package environment,
-this caused issues in the community and we needed a standard. Some environments
-experienced problems with the upper-case variant, so the lower-case was decided.
-Everything using `logrus` will need to use the lower-case:
-`github.com/sirupsen/logrus`. Any package that isn't, should be changed.
-
-To fix Glide, see [these
-comments](https://github.com/sirupsen/logrus/issues/553#issuecomment-306591437).
-For an in-depth explanation of the casing issue, see [this
-comment](https://github.com/sirupsen/logrus/issues/570#issuecomment-313933276).
-
-**Are you interested in assisting in maintaining Logrus?** Currently I have a
-lot of obligations, and I am unable to provide Logrus with the maintainership it
-needs. If you'd like to help, please reach out to me at `simon at author's
-username dot com`.
-
-Nicely color-coded in development (when a TTY is attached, otherwise just
-plain text):
-
-![Colored](http://i.imgur.com/PY7qMwd.png)
-
-With `log.SetFormatter(&log.JSONFormatter{})`, for easy parsing by logstash
-or Splunk:
-
-```json
-{"animal":"walrus","level":"info","msg":"A group of walrus emerges from the
-ocean","size":10,"time":"2014-03-10 19:57:38.562264131 -0400 EDT"}
-
-{"level":"warning","msg":"The group's number increased tremendously!",
-"number":122,"omg":true,"time":"2014-03-10 19:57:38.562471297 -0400 EDT"}
-
-{"animal":"walrus","level":"info","msg":"A giant walrus appears!",
-"size":10,"time":"2014-03-10 19:57:38.562500591 -0400 EDT"}
-
-{"animal":"walrus","level":"info","msg":"Tremendously sized cow enters the ocean.",
-"size":9,"time":"2014-03-10 19:57:38.562527896 -0400 EDT"}
-
-{"level":"fatal","msg":"The ice breaks!","number":100,"omg":true,
-"time":"2014-03-10 19:57:38.562543128 -0400 EDT"}
-```
-
-With the default `log.SetFormatter(&log.TextFormatter{})` when a TTY is not
-attached, the output is compatible with the
-[logfmt](http://godoc.org/github.com/kr/logfmt) format:
-
-```text
-time="2015-03-26T01:27:38-04:00" level=debug msg="Started observing beach" animal=walrus number=8
-time="2015-03-26T01:27:38-04:00" level=info msg="A group of walrus emerges from the ocean" animal=walrus size=10
-time="2015-03-26T01:27:38-04:00" level=warning msg="The group's number increased tremendously!" number=122 omg=true
-time="2015-03-26T01:27:38-04:00" level=debug msg="Temperature changes" temperature=-4
-time="2015-03-26T01:27:38-04:00" level=panic msg="It's over 9000!" animal=orca size=9009
-time="2015-03-26T01:27:38-04:00" level=fatal msg="The ice breaks!" err=&{0x2082280c0 map[animal:orca size:9009] 2015-03-26 01:27:38.441574009 -0400 EDT panic It's over 9000!} number=100 omg=true
-```
-To ensure this behaviour even if a TTY is attached, set your formatter as follows:
-
-```go
-	log.SetFormatter(&log.TextFormatter{
-		DisableColors: true,
-		FullTimestamp: true,
-	})
-```
-
-#### Logging Method Name
-
-If you wish to add the calling method as a field, instruct the logger via:
-```go
-log.SetReportCaller(true)
-```
-This adds the caller as 'method' like so:
-
-```json
-{"animal":"penguin","level":"fatal","method":"github.com/sirupsen/arcticcreatures.migrate","msg":"a penguin swims by",
-"time":"2014-03-10 19:57:38.562543129 -0400 EDT"}
-```
-
-```text
-time="2015-03-26T01:27:38-04:00" level=fatal method=github.com/sirupsen/arcticcreatures.migrate msg="a penguin swims by" animal=penguin
-```
-Note that this does add measurable overhead - the cost will depend on the version of Go, but is
-between 20 and 40% in recent tests with 1.6 and 1.7.  You can validate this in your
-environment via benchmarks: 
-```
-go test -bench=.*CallerTracing
-```
-
-
-#### Case-sensitivity
-
-The organization's name was changed to lower-case--and this will not be changed
-back. If you are getting import conflicts due to case sensitivity, please use
-the lower-case import: `github.com/sirupsen/logrus`.
-
-#### Example
-
-The simplest way to use Logrus is simply the package-level exported logger:
-
-```go
-package main
-
-import (
-  log "github.com/sirupsen/logrus"
-)
-
-func main() {
-  log.WithFields(log.Fields{
-    "animal": "walrus",
-  }).Info("A walrus appears")
-}
-```
-
-Note that it's completely api-compatible with the stdlib logger, so you can
-replace your `log` imports everywhere with `log "github.com/sirupsen/logrus"`
-and you'll now have the flexibility of Logrus. You can customize it all you
-want:
-
-```go
-package main
-
-import (
-  "os"
-  log "github.com/sirupsen/logrus"
-)
-
-func init() {
-  // Log as JSON instead of the default ASCII formatter.
-  log.SetFormatter(&log.JSONFormatter{})
-
-  // Output to stdout instead of the default stderr
-  // Can be any io.Writer, see below for File example
-  log.SetOutput(os.Stdout)
-
-  // Only log the warning severity or above.
-  log.SetLevel(log.WarnLevel)
-}
-
-func main() {
-  log.WithFields(log.Fields{
-    "animal": "walrus",
-    "size":   10,
-  }).Info("A group of walrus emerges from the ocean")
-
-  log.WithFields(log.Fields{
-    "omg":    true,
-    "number": 122,
-  }).Warn("The group's number increased tremendously!")
-
-  log.WithFields(log.Fields{
-    "omg":    true,
-    "number": 100,
-  }).Fatal("The ice breaks!")
-
-  // A common pattern is to re-use fields between logging statements by re-using
-  // the logrus.Entry returned from WithFields()
-  contextLogger := log.WithFields(log.Fields{
-    "common": "this is a common field",
-    "other": "I also should be logged always",
-  })
-
-  contextLogger.Info("I'll be logged with common and other field")
-  contextLogger.Info("Me too")
-}
-```
-
-For more advanced usage such as logging to multiple locations from the same
-application, you can also create an instance of the `logrus` Logger:
-
-```go
-package main
-
-import (
-  "os"
-  "github.com/sirupsen/logrus"
-)
-
-// Create a new instance of the logger. You can have any number of instances.
-var log = logrus.New()
-
-func main() {
-  // The API for setting attributes is a little different than the package level
-  // exported logger. See Godoc.
-  log.Out = os.Stdout
-
-  // You could set this to any `io.Writer` such as a file
-  // file, err := os.OpenFile("logrus.log", os.O_CREATE|os.O_WRONLY, 0666)
-  // if err == nil {
-  //  log.Out = file
-  // } else {
-  //  log.Info("Failed to log to file, using default stderr")
-  // }
-
-  log.WithFields(logrus.Fields{
-    "animal": "walrus",
-    "size":   10,
-  }).Info("A group of walrus emerges from the ocean")
-}
-```
-
-#### Fields
-
-Logrus encourages careful, structured logging through logging fields instead of
-long, unparseable error messages. For example, instead of: `log.Fatalf("Failed
-to send event %s to topic %s with key %d")`, you should log the much more
-discoverable:
-
-```go
-log.WithFields(log.Fields{
-  "event": event,
-  "topic": topic,
-  "key": key,
-}).Fatal("Failed to send event")
-```
-
-We've found this API forces you to think about logging in a way that produces
-much more useful logging messages. We've been in countless situations where just
-a single added field to a log statement that was already there would've saved us
-hours. The `WithFields` call is optional.
-
-In general, with Logrus using any of the `printf`-family functions should be
-seen as a hint you should add a field, however, you can still use the
-`printf`-family functions with Logrus.
-
-#### Default Fields
-
-Often it's helpful to have fields _always_ attached to log statements in an
-application or parts of one. For example, you may want to always log the
-`request_id` and `user_ip` in the context of a request. Instead of writing
-`log.WithFields(log.Fields{"request_id": request_id, "user_ip": user_ip})` on
-every line, you can create a `logrus.Entry` to pass around instead:
-
-```go
-requestLogger := log.WithFields(log.Fields{"request_id": request_id, "user_ip": user_ip})
-requestLogger.Info("something happened on that request") # will log request_id and user_ip
-requestLogger.Warn("something not great happened")
-```
-
-#### Hooks
-
-You can add hooks for logging levels. For example to send errors to an exception
-tracking service on `Error`, `Fatal` and `Panic`, info to StatsD or log to
-multiple places simultaneously, e.g. syslog.
-
-Logrus comes with [built-in hooks](hooks/). Add those, or your custom hook, in
-`init`:
-
-```go
-import (
-  log "github.com/sirupsen/logrus"
-  "gopkg.in/gemnasium/logrus-airbrake-hook.v2" // the package is named "airbrake"
-  logrus_syslog "github.com/sirupsen/logrus/hooks/syslog"
-  "log/syslog"
-)
-
-func init() {
-
-  // Use the Airbrake hook to report errors that have Error severity or above to
-  // an exception tracker. You can create custom hooks, see the Hooks section.
-  log.AddHook(airbrake.NewHook(123, "xyz", "production"))
-
-  hook, err := logrus_syslog.NewSyslogHook("udp", "localhost:514", syslog.LOG_INFO, "")
-  if err != nil {
-    log.Error("Unable to connect to local syslog daemon")
-  } else {
-    log.AddHook(hook)
-  }
-}
-```
-Note: Syslog hook also support connecting to local syslog (Ex. "/dev/log" or "/var/run/syslog" or "/var/run/log"). For the detail, please check the [syslog hook README](hooks/syslog/README.md).
-
-A list of currently known of service hook can be found in this wiki [page](https://github.com/sirupsen/logrus/wiki/Hooks)
-
-
-#### Level logging
-
-Logrus has seven logging levels: Trace, Debug, Info, Warning, Error, Fatal and Panic.
-
-```go
-log.Trace("Something very low level.")
-log.Debug("Useful debugging information.")
-log.Info("Something noteworthy happened!")
-log.Warn("You should probably take a look at this.")
-log.Error("Something failed but I'm not quitting.")
-// Calls os.Exit(1) after logging
-log.Fatal("Bye.")
-// Calls panic() after logging
-log.Panic("I'm bailing.")
-```
-
-You can set the logging level on a `Logger`, then it will only log entries with
-that severity or anything above it:
-
-```go
-// Will log anything that is info or above (warn, error, fatal, panic). Default.
-log.SetLevel(log.InfoLevel)
-```
-
-It may be useful to set `log.Level = logrus.DebugLevel` in a debug or verbose
-environment if your application has that.
-
-#### Entries
-
-Besides the fields added with `WithField` or `WithFields` some fields are
-automatically added to all logging events:
-
-1. `time`. The timestamp when the entry was created.
-2. `msg`. The logging message passed to `{Info,Warn,Error,Fatal,Panic}` after
-   the `AddFields` call. E.g. `Failed to send event.`
-3. `level`. The logging level. E.g. `info`.
-
-#### Environments
-
-Logrus has no notion of environment.
-
-If you wish for hooks and formatters to only be used in specific environments,
-you should handle that yourself. For example, if your application has a global
-variable `Environment`, which is a string representation of the environment you
-could do:
-
-```go
-import (
-  log "github.com/sirupsen/logrus"
-)
-
-init() {
-  // do something here to set environment depending on an environment variable
-  // or command-line flag
-  if Environment == "production" {
-    log.SetFormatter(&log.JSONFormatter{})
-  } else {
-    // The TextFormatter is default, you don't actually have to do this.
-    log.SetFormatter(&log.TextFormatter{})
-  }
-}
-```
-
-This configuration is how `logrus` was intended to be used, but JSON in
-production is mostly only useful if you do log aggregation with tools like
-Splunk or Logstash.
-
-#### Formatters
-
-The built-in logging formatters are:
-
-* `logrus.TextFormatter`. Logs the event in colors if stdout is a tty, otherwise
-  without colors.
-  * *Note:* to force colored output when there is no TTY, set the `ForceColors`
-    field to `true`.  To force no colored output even if there is a TTY  set the
-    `DisableColors` field to `true`. For Windows, see
-    [github.com/mattn/go-colorable](https://github.com/mattn/go-colorable).
-  * When colors are enabled, levels are truncated to 4 characters by default. To disable
-    truncation set the `DisableLevelTruncation` field to `true`.
-  * All options are listed in the [generated docs](https://godoc.org/github.com/sirupsen/logrus#TextFormatter).
-* `logrus.JSONFormatter`. Logs fields as JSON.
-  * All options are listed in the [generated docs](https://godoc.org/github.com/sirupsen/logrus#JSONFormatter).
-
-Third party logging formatters:
-
-* [`FluentdFormatter`](https://github.com/joonix/log). Formats entries that can be parsed by Kubernetes and Google Container Engine.
-* [`logstash`](https://github.com/bshuster-repo/logrus-logstash-hook). Logs fields as [Logstash](http://logstash.net) Events.
-* [`prefixed`](https://github.com/x-cray/logrus-prefixed-formatter). Displays log entry source along with alternative layout.
-* [`zalgo`](https://github.com/aybabtme/logzalgo). Invoking the P͉̫o̳̼̊w̖͈̰͎e̬͔̭͂r͚̼̹̲ ̫͓͉̳͈ō̠͕͖̚f̝͍̠ ͕̲̞͖͑Z̖̫̤̫ͪa͉̬͈̗l͖͎g̳̥o̰̥̅!̣͔̲̻͊̄ ̙̘̦̹̦.
-
-You can define your formatter by implementing the `Formatter` interface,
-requiring a `Format` method. `Format` takes an `*Entry`. `entry.Data` is a
-`Fields` type (`map[string]interface{}`) with all your fields as well as the
-default ones (see Entries section above):
-
-```go
-type MyJSONFormatter struct {
-}
-
-log.SetFormatter(new(MyJSONFormatter))
-
-func (f *MyJSONFormatter) Format(entry *Entry) ([]byte, error) {
-  // Note this doesn't include Time, Level and Message which are available on
-  // the Entry. Consult `godoc` on information about those fields or read the
-  // source of the official loggers.
-  serialized, err := json.Marshal(entry.Data)
-    if err != nil {
-      return nil, fmt.Errorf("Failed to marshal fields to JSON, %v", err)
-    }
-  return append(serialized, '\n'), nil
-}
-```
-
-#### Logger as an `io.Writer`
-
-Logrus can be transformed into an `io.Writer`. That writer is the end of an `io.Pipe` and it is your responsibility to close it.
-
-```go
-w := logger.Writer()
-defer w.Close()
-
-srv := http.Server{
-    // create a stdlib log.Logger that writes to
-    // logrus.Logger.
-    ErrorLog: log.New(w, "", 0),
-}
-```
-
-Each line written to that writer will be printed the usual way, using formatters
-and hooks. The level for those entries is `info`.
-
-This means that we can override the standard library logger easily:
-
-```go
-logger := logrus.New()
-logger.Formatter = &logrus.JSONFormatter{}
-
-// Use logrus for standard log output
-// Note that `log` here references stdlib's log
-// Not logrus imported under the name `log`.
-log.SetOutput(logger.Writer())
-```
-
-#### Rotation
-
-Log rotation is not provided with Logrus. Log rotation should be done by an
-external program (like `logrotate(8)`) that can compress and delete old log
-entries. It should not be a feature of the application-level logger.
-
-#### Tools
-
-| Tool | Description |
-| ---- | ----------- |
-|[Logrus Mate](https://github.com/gogap/logrus_mate)|Logrus mate is a tool for Logrus to manage loggers, you can initial logger's level, hook and formatter by config file, the logger will generated with different config at different environment.|
-|[Logrus Viper Helper](https://github.com/heirko/go-contrib/tree/master/logrusHelper)|An Helper around Logrus to wrap with spf13/Viper to load configuration with fangs! And to simplify Logrus configuration use some behavior of [Logrus Mate](https://github.com/gogap/logrus_mate). [sample](https://github.com/heirko/iris-contrib/blob/master/middleware/logrus-logger/example) |
-
-#### Testing
-
-Logrus has a built in facility for asserting the presence of log messages. This is implemented through the `test` hook and provides:
-
-* decorators for existing logger (`test.NewLocal` and `test.NewGlobal`) which basically just add the `test` hook
-* a test logger (`test.NewNullLogger`) that just records log messages (and does not output any):
-
-```go
-import(
-  "github.com/sirupsen/logrus"
-  "github.com/sirupsen/logrus/hooks/test"
-  "github.com/stretchr/testify/assert"
-  "testing"
-)
-
-func TestSomething(t*testing.T){
-  logger, hook := test.NewNullLogger()
-  logger.Error("Helloerror")
-
-  assert.Equal(t, 1, len(hook.Entries))
-  assert.Equal(t, logrus.ErrorLevel, hook.LastEntry().Level)
-  assert.Equal(t, "Helloerror", hook.LastEntry().Message)
-
-  hook.Reset()
-  assert.Nil(t, hook.LastEntry())
-}
-```
-
-#### Fatal handlers
-
-Logrus can register one or more functions that will be called when any `fatal`
-level message is logged. The registered handlers will be executed before
-logrus performs a `os.Exit(1)`. This behavior may be helpful if callers need
-to gracefully shutdown. Unlike a `panic("Something went wrong...")` call which can be intercepted with a deferred `recover` a call to `os.Exit(1)` can not be intercepted.
-
-```
-...
-handler := func() {
-  // gracefully shutdown something...
-}
-logrus.RegisterExitHandler(handler)
-...
-```
-
-#### Thread safety
-
-By default, Logger is protected by a mutex for concurrent writes. The mutex is held when calling hooks and writing logs.
-If you are sure such locking is not needed, you can call logger.SetNoLock() to disable the locking.
-
-Situation when locking is not needed includes:
-
-* You have no hooks registered, or hooks calling is already thread-safe.
-
-* Writing to logger.Out is already thread-safe, for example:
-
-  1) logger.Out is protected by locks.
-
-  2) logger.Out is a os.File handler opened with `O_APPEND` flag, and every write is smaller than 4k. (This allow multi-thread/multi-process writing)
-
-     (Refer to http://www.notthewizard.com/2014/06/17/are-files-appends-really-atomic/)
diff --git a/vendor/github.com/Sirupsen/logrus/alt_exit_test.go b/vendor/github.com/Sirupsen/logrus/alt_exit_test.go
deleted file mode 100644
index 0a2ff56..0000000
--- a/vendor/github.com/Sirupsen/logrus/alt_exit_test.go
+++ /dev/null
@@ -1,99 +0,0 @@
-package logrus
-
-import (
-	"io/ioutil"
-	"log"
-	"os"
-	"os/exec"
-	"path/filepath"
-	"runtime"
-	"strings"
-	"testing"
-	"time"
-)
-
-func TestRegister(t *testing.T) {
-	current := len(handlers)
-	RegisterExitHandler(func() {})
-	if len(handlers) != current+1 {
-		t.Fatalf("expected %d handlers, got %d", current+1, len(handlers))
-	}
-}
-
-func TestHandler(t *testing.T) {
-	testprog := testprogleader
-	testprog = append(testprog, getPackage()...)
-	testprog = append(testprog, testprogtrailer...)
-	tempDir, err := ioutil.TempDir("", "test_handler")
-	if err != nil {
-		log.Fatalf("can't create temp dir. %q", err)
-	}
-	defer os.RemoveAll(tempDir)
-
-	gofile := filepath.Join(tempDir, "gofile.go")
-	if err := ioutil.WriteFile(gofile, testprog, 0666); err != nil {
-		t.Fatalf("can't create go file. %q", err)
-	}
-
-	outfile := filepath.Join(tempDir, "outfile.out")
-	arg := time.Now().UTC().String()
-	err = exec.Command("go", "run", gofile, outfile, arg).Run()
-	if err == nil {
-		t.Fatalf("completed normally, should have failed")
-	}
-
-	data, err := ioutil.ReadFile(outfile)
-	if err != nil {
-		t.Fatalf("can't read output file %s. %q", outfile, err)
-	}
-
-	if string(data) != arg {
-		t.Fatalf("bad data. Expected %q, got %q", data, arg)
-	}
-}
-
-// getPackage returns the name of the current package, which makes running this
-// test in a fork simpler
-func getPackage() []byte {
-	pc, _, _, _ := runtime.Caller(0)
-	fullFuncName := runtime.FuncForPC(pc).Name()
-	idx := strings.LastIndex(fullFuncName, ".")
-	return []byte(fullFuncName[:idx]) // trim off function details
-}
-
-var testprogleader = []byte(`
-// Test program for atexit, gets output file and data as arguments and writes
-// data to output file in atexit handler.
-package main
-
-import (
-	"`)
-var testprogtrailer = []byte(
-	`"
-	"flag"
-	"fmt"
-	"io/ioutil"
-)
-
-var outfile = ""
-var data = ""
-
-func handler() {
-	ioutil.WriteFile(outfile, []byte(data), 0666)
-}
-
-func badHandler() {
-	n := 0
-	fmt.Println(1/n)
-}
-
-func main() {
-	flag.Parse()
-	outfile = flag.Arg(0)
-	data = flag.Arg(1)
-
-	logrus.RegisterExitHandler(handler)
-	logrus.RegisterExitHandler(badHandler)
-	logrus.Fatal("Bye bye")
-}
-`)
diff --git a/vendor/github.com/Sirupsen/logrus/entry.go b/vendor/github.com/Sirupsen/logrus/entry.go
deleted file mode 100644
index cc85d3a..0000000
--- a/vendor/github.com/Sirupsen/logrus/entry.go
+++ /dev/null
@@ -1,408 +0,0 @@
-package logrus
-
-import (
-	"bytes"
-	"fmt"
-	"os"
-	"reflect"
-	"runtime"
-	"strings"
-	"sync"
-	"time"
-)
-
-var (
-	bufferPool *sync.Pool
-
-	// qualified package name, cached at first use
-	logrusPackage string
-
-	// Positions in the call stack when tracing to report the calling method
-	minimumCallerDepth int
-
-	// Used for caller information initialisation
-	callerInitOnce sync.Once
-)
-
-const (
-	maximumCallerDepth int = 25
-	knownLogrusFrames  int = 4
-)
-
-func init() {
-	bufferPool = &sync.Pool{
-		New: func() interface{} {
-			return new(bytes.Buffer)
-		},
-	}
-
-	// start at the bottom of the stack before the package-name cache is primed
-	minimumCallerDepth = 1
-}
-
-// Defines the key when adding errors using WithError.
-var ErrorKey = "error"
-
-// An entry is the final or intermediate Logrus logging entry. It contains all
-// the fields passed with WithField{,s}. It's finally logged when Trace, Debug,
-// Info, Warn, Error, Fatal or Panic is called on it. These objects can be
-// reused and passed around as much as you wish to avoid field duplication.
-type Entry struct {
-	Logger *Logger
-
-	// Contains all the fields set by the user.
-	Data Fields
-
-	// Time at which the log entry was created
-	Time time.Time
-
-	// Level the log entry was logged at: Trace, Debug, Info, Warn, Error, Fatal or Panic
-	// This field will be set on entry firing and the value will be equal to the one in Logger struct field.
-	Level Level
-
-	// Calling method, with package name
-	Caller *runtime.Frame
-
-	// Message passed to Trace, Debug, Info, Warn, Error, Fatal or Panic
-	Message string
-
-	// When formatter is called in entry.log(), a Buffer may be set to entry
-	Buffer *bytes.Buffer
-
-	// err may contain a field formatting error
-	err string
-}
-
-func NewEntry(logger *Logger) *Entry {
-	return &Entry{
-		Logger: logger,
-		// Default is three fields, plus one optional.  Give a little extra room.
-		Data: make(Fields, 6),
-	}
-}
-
-// Returns the string representation from the reader and ultimately the
-// formatter.
-func (entry *Entry) String() (string, error) {
-	serialized, err := entry.Logger.Formatter.Format(entry)
-	if err != nil {
-		return "", err
-	}
-	str := string(serialized)
-	return str, nil
-}
-
-// Add an error as single field (using the key defined in ErrorKey) to the Entry.
-func (entry *Entry) WithError(err error) *Entry {
-	return entry.WithField(ErrorKey, err)
-}
-
-// Add a single field to the Entry.
-func (entry *Entry) WithField(key string, value interface{}) *Entry {
-	return entry.WithFields(Fields{key: value})
-}
-
-// Add a map of fields to the Entry.
-func (entry *Entry) WithFields(fields Fields) *Entry {
-	data := make(Fields, len(entry.Data)+len(fields))
-	for k, v := range entry.Data {
-		data[k] = v
-	}
-	var field_err string
-	for k, v := range fields {
-		if t := reflect.TypeOf(v); t != nil && t.Kind() == reflect.Func {
-			field_err = fmt.Sprintf("can not add field %q", k)
-			if entry.err != "" {
-				field_err = entry.err + ", " + field_err
-			}
-		} else {
-			data[k] = v
-		}
-	}
-	return &Entry{Logger: entry.Logger, Data: data, Time: entry.Time, err: field_err}
-}
-
-// Overrides the time of the Entry.
-func (entry *Entry) WithTime(t time.Time) *Entry {
-	return &Entry{Logger: entry.Logger, Data: entry.Data, Time: t}
-}
-
-// getPackageName reduces a fully qualified function name to the package name
-// There really ought to be to be a better way...
-func getPackageName(f string) string {
-	for {
-		lastPeriod := strings.LastIndex(f, ".")
-		lastSlash := strings.LastIndex(f, "/")
-		if lastPeriod > lastSlash {
-			f = f[:lastPeriod]
-		} else {
-			break
-		}
-	}
-
-	return f
-}
-
-// getCaller retrieves the name of the first non-logrus calling function
-func getCaller() *runtime.Frame {
-	// Restrict the lookback frames to avoid runaway lookups
-	pcs := make([]uintptr, maximumCallerDepth)
-	depth := runtime.Callers(minimumCallerDepth, pcs)
-	frames := runtime.CallersFrames(pcs[:depth])
-
-	// cache this package's fully-qualified name
-	callerInitOnce.Do(func() {
-		logrusPackage = getPackageName(runtime.FuncForPC(pcs[0]).Name())
-
-		// now that we have the cache, we can skip a minimum count of known-logrus functions
-		// XXX this is dubious, the number of frames may vary store an entry in a logger interface
-		minimumCallerDepth = knownLogrusFrames
-	})
-
-	for f, again := frames.Next(); again; f, again = frames.Next() {
-		pkg := getPackageName(f.Function)
-
-		// If the caller isn't part of this package, we're done
-		if pkg != logrusPackage {
-			return &f
-		}
-	}
-
-	// if we got here, we failed to find the caller's context
-	return nil
-}
-
-func (entry Entry) HasCaller() (has bool) {
-	return entry.Logger != nil &&
-		entry.Logger.ReportCaller &&
-		entry.Caller != nil
-}
-
-// This function is not declared with a pointer value because otherwise
-// race conditions will occur when using multiple goroutines
-func (entry Entry) log(level Level, msg string) {
-	var buffer *bytes.Buffer
-
-	// Default to now, but allow users to override if they want.
-	//
-	// We don't have to worry about polluting future calls to Entry#log()
-	// with this assignment because this function is declared with a
-	// non-pointer receiver.
-	if entry.Time.IsZero() {
-		entry.Time = time.Now()
-	}
-
-	entry.Level = level
-	entry.Message = msg
-	if entry.Logger.ReportCaller {
-		entry.Caller = getCaller()
-	}
-
-	entry.fireHooks()
-
-	buffer = bufferPool.Get().(*bytes.Buffer)
-	buffer.Reset()
-	defer bufferPool.Put(buffer)
-	entry.Buffer = buffer
-
-	entry.write()
-
-	entry.Buffer = nil
-
-	// To avoid Entry#log() returning a value that only would make sense for
-	// panic() to use in Entry#Panic(), we avoid the allocation by checking
-	// directly here.
-	if level <= PanicLevel {
-		panic(&entry)
-	}
-}
-
-func (entry *Entry) fireHooks() {
-	entry.Logger.mu.Lock()
-	defer entry.Logger.mu.Unlock()
-	err := entry.Logger.Hooks.Fire(entry.Level, entry)
-	if err != nil {
-		fmt.Fprintf(os.Stderr, "Failed to fire hook: %v\n", err)
-	}
-}
-
-func (entry *Entry) write() {
-	entry.Logger.mu.Lock()
-	defer entry.Logger.mu.Unlock()
-	serialized, err := entry.Logger.Formatter.Format(entry)
-	if err != nil {
-		fmt.Fprintf(os.Stderr, "Failed to obtain reader, %v\n", err)
-	} else {
-		_, err = entry.Logger.Out.Write(serialized)
-		if err != nil {
-			fmt.Fprintf(os.Stderr, "Failed to write to log, %v\n", err)
-		}
-	}
-}
-
-func (entry *Entry) Trace(args ...interface{}) {
-	if entry.Logger.IsLevelEnabled(TraceLevel) {
-		entry.log(TraceLevel, fmt.Sprint(args...))
-	}
-}
-
-func (entry *Entry) Debug(args ...interface{}) {
-	if entry.Logger.IsLevelEnabled(DebugLevel) {
-		entry.log(DebugLevel, fmt.Sprint(args...))
-	}
-}
-
-func (entry *Entry) Print(args ...interface{}) {
-	entry.Info(args...)
-}
-
-func (entry *Entry) Info(args ...interface{}) {
-	if entry.Logger.IsLevelEnabled(InfoLevel) {
-		entry.log(InfoLevel, fmt.Sprint(args...))
-	}
-}
-
-func (entry *Entry) Warn(args ...interface{}) {
-	if entry.Logger.IsLevelEnabled(WarnLevel) {
-		entry.log(WarnLevel, fmt.Sprint(args...))
-	}
-}
-
-func (entry *Entry) Warning(args ...interface{}) {
-	entry.Warn(args...)
-}
-
-func (entry *Entry) Error(args ...interface{}) {
-	if entry.Logger.IsLevelEnabled(ErrorLevel) {
-		entry.log(ErrorLevel, fmt.Sprint(args...))
-	}
-}
-
-func (entry *Entry) Fatal(args ...interface{}) {
-	if entry.Logger.IsLevelEnabled(FatalLevel) {
-		entry.log(FatalLevel, fmt.Sprint(args...))
-	}
-	entry.Logger.Exit(1)
-}
-
-func (entry *Entry) Panic(args ...interface{}) {
-	if entry.Logger.IsLevelEnabled(PanicLevel) {
-		entry.log(PanicLevel, fmt.Sprint(args...))
-	}
-	panic(fmt.Sprint(args...))
-}
-
-// Entry Printf family functions
-
-func (entry *Entry) Tracef(format string, args ...interface{}) {
-	if entry.Logger.IsLevelEnabled(TraceLevel) {
-		entry.Trace(fmt.Sprintf(format, args...))
-	}
-}
-
-func (entry *Entry) Debugf(format string, args ...interface{}) {
-	if entry.Logger.IsLevelEnabled(DebugLevel) {
-		entry.Debug(fmt.Sprintf(format, args...))
-	}
-}
-
-func (entry *Entry) Infof(format string, args ...interface{}) {
-	if entry.Logger.IsLevelEnabled(InfoLevel) {
-		entry.Info(fmt.Sprintf(format, args...))
-	}
-}
-
-func (entry *Entry) Printf(format string, args ...interface{}) {
-	entry.Infof(format, args...)
-}
-
-func (entry *Entry) Warnf(format string, args ...interface{}) {
-	if entry.Logger.IsLevelEnabled(WarnLevel) {
-		entry.Warn(fmt.Sprintf(format, args...))
-	}
-}
-
-func (entry *Entry) Warningf(format string, args ...interface{}) {
-	entry.Warnf(format, args...)
-}
-
-func (entry *Entry) Errorf(format string, args ...interface{}) {
-	if entry.Logger.IsLevelEnabled(ErrorLevel) {
-		entry.Error(fmt.Sprintf(format, args...))
-	}
-}
-
-func (entry *Entry) Fatalf(format string, args ...interface{}) {
-	if entry.Logger.IsLevelEnabled(FatalLevel) {
-		entry.Fatal(fmt.Sprintf(format, args...))
-	}
-	entry.Logger.Exit(1)
-}
-
-func (entry *Entry) Panicf(format string, args ...interface{}) {
-	if entry.Logger.IsLevelEnabled(PanicLevel) {
-		entry.Panic(fmt.Sprintf(format, args...))
-	}
-}
-
-// Entry Println family functions
-
-func (entry *Entry) Traceln(args ...interface{}) {
-	if entry.Logger.IsLevelEnabled(TraceLevel) {
-		entry.Trace(entry.sprintlnn(args...))
-	}
-}
-
-func (entry *Entry) Debugln(args ...interface{}) {
-	if entry.Logger.IsLevelEnabled(DebugLevel) {
-		entry.Debug(entry.sprintlnn(args...))
-	}
-}
-
-func (entry *Entry) Infoln(args ...interface{}) {
-	if entry.Logger.IsLevelEnabled(InfoLevel) {
-		entry.Info(entry.sprintlnn(args...))
-	}
-}
-
-func (entry *Entry) Println(args ...interface{}) {
-	entry.Infoln(args...)
-}
-
-func (entry *Entry) Warnln(args ...interface{}) {
-	if entry.Logger.IsLevelEnabled(WarnLevel) {
-		entry.Warn(entry.sprintlnn(args...))
-	}
-}
-
-func (entry *Entry) Warningln(args ...interface{}) {
-	entry.Warnln(args...)
-}
-
-func (entry *Entry) Errorln(args ...interface{}) {
-	if entry.Logger.IsLevelEnabled(ErrorLevel) {
-		entry.Error(entry.sprintlnn(args...))
-	}
-}
-
-func (entry *Entry) Fatalln(args ...interface{}) {
-	if entry.Logger.IsLevelEnabled(FatalLevel) {
-		entry.Fatal(entry.sprintlnn(args...))
-	}
-	entry.Logger.Exit(1)
-}
-
-func (entry *Entry) Panicln(args ...interface{}) {
-	if entry.Logger.IsLevelEnabled(PanicLevel) {
-		entry.Panic(entry.sprintlnn(args...))
-	}
-}
-
-// Sprintlnn => Sprint no newline. This is to get the behavior of how
-// fmt.Sprintln where spaces are always added between operands, regardless of
-// their type. Instead of vendoring the Sprintln implementation to spare a
-// string allocation, we do the simplest thing.
-func (entry *Entry) sprintlnn(args ...interface{}) string {
-	msg := fmt.Sprintln(args...)
-	return msg[:len(msg)-1]
-}
diff --git a/vendor/github.com/Sirupsen/logrus/entry_test.go b/vendor/github.com/Sirupsen/logrus/entry_test.go
deleted file mode 100644
index a81e2b3..0000000
--- a/vendor/github.com/Sirupsen/logrus/entry_test.go
+++ /dev/null
@@ -1,115 +0,0 @@
-package logrus
-
-import (
-	"bytes"
-	"fmt"
-	"testing"
-
-	"github.com/stretchr/testify/assert"
-)
-
-func TestEntryWithError(t *testing.T) {
-
-	assert := assert.New(t)
-
-	defer func() {
-		ErrorKey = "error"
-	}()
-
-	err := fmt.Errorf("kaboom at layer %d", 4711)
-
-	assert.Equal(err, WithError(err).Data["error"])
-
-	logger := New()
-	logger.Out = &bytes.Buffer{}
-	entry := NewEntry(logger)
-
-	assert.Equal(err, entry.WithError(err).Data["error"])
-
-	ErrorKey = "err"
-
-	assert.Equal(err, entry.WithError(err).Data["err"])
-
-}
-
-func TestEntryPanicln(t *testing.T) {
-	errBoom := fmt.Errorf("boom time")
-
-	defer func() {
-		p := recover()
-		assert.NotNil(t, p)
-
-		switch pVal := p.(type) {
-		case *Entry:
-			assert.Equal(t, "kaboom", pVal.Message)
-			assert.Equal(t, errBoom, pVal.Data["err"])
-		default:
-			t.Fatalf("want type *Entry, got %T: %#v", pVal, pVal)
-		}
-	}()
-
-	logger := New()
-	logger.Out = &bytes.Buffer{}
-	entry := NewEntry(logger)
-	entry.WithField("err", errBoom).Panicln("kaboom")
-}
-
-func TestEntryPanicf(t *testing.T) {
-	errBoom := fmt.Errorf("boom again")
-
-	defer func() {
-		p := recover()
-		assert.NotNil(t, p)
-
-		switch pVal := p.(type) {
-		case *Entry:
-			assert.Equal(t, "kaboom true", pVal.Message)
-			assert.Equal(t, errBoom, pVal.Data["err"])
-		default:
-			t.Fatalf("want type *Entry, got %T: %#v", pVal, pVal)
-		}
-	}()
-
-	logger := New()
-	logger.Out = &bytes.Buffer{}
-	entry := NewEntry(logger)
-	entry.WithField("err", errBoom).Panicf("kaboom %v", true)
-}
-
-const (
-	badMessage   = "this is going to panic"
-	panicMessage = "this is broken"
-)
-
-type panickyHook struct{}
-
-func (p *panickyHook) Levels() []Level {
-	return []Level{InfoLevel}
-}
-
-func (p *panickyHook) Fire(entry *Entry) error {
-	if entry.Message == badMessage {
-		panic(panicMessage)
-	}
-
-	return nil
-}
-
-func TestEntryHooksPanic(t *testing.T) {
-	logger := New()
-	logger.Out = &bytes.Buffer{}
-	logger.Level = InfoLevel
-	logger.Hooks.Add(&panickyHook{})
-
-	defer func() {
-		p := recover()
-		assert.NotNil(t, p)
-		assert.Equal(t, panicMessage, p)
-
-		entry := NewEntry(logger)
-		entry.Info("another message")
-	}()
-
-	entry := NewEntry(logger)
-	entry.Info(badMessage)
-}
diff --git a/vendor/github.com/Sirupsen/logrus/example_basic_test.go b/vendor/github.com/Sirupsen/logrus/example_basic_test.go
deleted file mode 100644
index 9ff5655..0000000
--- a/vendor/github.com/Sirupsen/logrus/example_basic_test.go
+++ /dev/null
@@ -1,77 +0,0 @@
-package logrus_test
-
-import (
-	"os"
-
-	"github.com/sirupsen/logrus"
-)
-
-func Example_basic() {
-	var log = logrus.New()
-	log.Formatter = new(logrus.JSONFormatter)
-	log.Formatter = new(logrus.TextFormatter)                     //default
-	log.Formatter.(*logrus.TextFormatter).DisableColors = true    // remove colors
-	log.Formatter.(*logrus.TextFormatter).DisableTimestamp = true // remove timestamp from test output
-	log.Level = logrus.TraceLevel
-	log.Out = os.Stdout
-
-	// file, err := os.OpenFile("logrus.log", os.O_CREATE|os.O_WRONLY, 0666)
-	// if err == nil {
-	// 	log.Out = file
-	// } else {
-	// 	log.Info("Failed to log to file, using default stderr")
-	// }
-
-	defer func() {
-		err := recover()
-		if err != nil {
-			entry := err.(*logrus.Entry)
-			log.WithFields(logrus.Fields{
-				"omg":         true,
-				"err_animal":  entry.Data["animal"],
-				"err_size":    entry.Data["size"],
-				"err_level":   entry.Level,
-				"err_message": entry.Message,
-				"number":      100,
-			}).Error("The ice breaks!") // or use Fatal() to force the process to exit with a nonzero code
-		}
-	}()
-
-	log.WithFields(logrus.Fields{
-		"animal": "walrus",
-		"number": 0,
-	}).Trace("Went to the beach")
-
-	log.WithFields(logrus.Fields{
-		"animal": "walrus",
-		"number": 8,
-	}).Debug("Started observing beach")
-
-	log.WithFields(logrus.Fields{
-		"animal": "walrus",
-		"size":   10,
-	}).Info("A group of walrus emerges from the ocean")
-
-	log.WithFields(logrus.Fields{
-		"omg":    true,
-		"number": 122,
-	}).Warn("The group's number increased tremendously!")
-
-	log.WithFields(logrus.Fields{
-		"temperature": -4,
-	}).Debug("Temperature changes")
-
-	log.WithFields(logrus.Fields{
-		"animal": "orca",
-		"size":   9009,
-	}).Panic("It's over 9000!")
-
-	// Output:
-	// level=trace msg="Went to the beach" animal=walrus number=0
-	// level=debug msg="Started observing beach" animal=walrus number=8
-	// level=info msg="A group of walrus emerges from the ocean" animal=walrus size=10
-	// level=warning msg="The group's number increased tremendously!" number=122 omg=true
-	// level=debug msg="Temperature changes" temperature=-4
-	// level=panic msg="It's over 9000!" animal=orca size=9009
-	// level=error msg="The ice breaks!" err_animal=orca err_level=panic err_message="It's over 9000!" err_size=9009 number=100 omg=true
-}
diff --git a/vendor/github.com/Sirupsen/logrus/example_global_hook_test.go b/vendor/github.com/Sirupsen/logrus/example_global_hook_test.go
deleted file mode 100644
index c81e448..0000000
--- a/vendor/github.com/Sirupsen/logrus/example_global_hook_test.go
+++ /dev/null
@@ -1,36 +0,0 @@
-package logrus_test
-
-import (
-	"github.com/sirupsen/logrus"
-	"os"
-)
-
-var (
-	mystring string
-)
-
-type GlobalHook struct {
-}
-
-func (h *GlobalHook) Levels() []logrus.Level {
-	return logrus.AllLevels
-}
-
-func (h *GlobalHook) Fire(e *logrus.Entry) error {
-	e.Data["mystring"] = mystring
-	return nil
-}
-
-func Example() {
-	l := logrus.New()
-	l.Out = os.Stdout
-	l.Formatter = &logrus.TextFormatter{DisableTimestamp: true, DisableColors: true}
-	l.AddHook(&GlobalHook{})
-	mystring = "first value"
-	l.Info("first log")
-	mystring = "another value"
-	l.Info("second log")
-	// Output:
-	// level=info msg="first log" mystring="first value"
-	// level=info msg="second log" mystring="another value"
-}
diff --git a/vendor/github.com/Sirupsen/logrus/example_hook_test.go b/vendor/github.com/Sirupsen/logrus/example_hook_test.go
deleted file mode 100644
index 15118d2..0000000
--- a/vendor/github.com/Sirupsen/logrus/example_hook_test.go
+++ /dev/null
@@ -1,43 +0,0 @@
-// +build !windows
-
-package logrus_test
-
-import (
-	"log/syslog"
-	"os"
-
-	"github.com/sirupsen/logrus"
-	slhooks "github.com/sirupsen/logrus/hooks/syslog"
-)
-
-// An example on how to use a hook
-func Example_hook() {
-	var log = logrus.New()
-	log.Formatter = new(logrus.TextFormatter)                     // default
-	log.Formatter.(*logrus.TextFormatter).DisableColors = true    // remove colors
-	log.Formatter.(*logrus.TextFormatter).DisableTimestamp = true // remove timestamp from test output
-	if sl, err := slhooks.NewSyslogHook("udp", "localhost:514", syslog.LOG_INFO, ""); err != nil {
-		log.Hooks.Add(sl)
-	}
-	log.Out = os.Stdout
-
-	log.WithFields(logrus.Fields{
-		"animal": "walrus",
-		"size":   10,
-	}).Info("A group of walrus emerges from the ocean")
-
-	log.WithFields(logrus.Fields{
-		"omg":    true,
-		"number": 122,
-	}).Warn("The group's number increased tremendously!")
-
-	log.WithFields(logrus.Fields{
-		"omg":    true,
-		"number": 100,
-	}).Error("The ice breaks!")
-
-	// Output:
-	// level=info msg="A group of walrus emerges from the ocean" animal=walrus size=10
-	// level=warning msg="The group's number increased tremendously!" number=122 omg=true
-	// level=error msg="The ice breaks!" number=100 omg=true
-}
diff --git a/vendor/github.com/Sirupsen/logrus/formatter_bench_test.go b/vendor/github.com/Sirupsen/logrus/formatter_bench_test.go
deleted file mode 100644
index d948158..0000000
--- a/vendor/github.com/Sirupsen/logrus/formatter_bench_test.go
+++ /dev/null
@@ -1,101 +0,0 @@
-package logrus
-
-import (
-	"fmt"
-	"testing"
-	"time"
-)
-
-// smallFields is a small size data set for benchmarking
-var smallFields = Fields{
-	"foo":   "bar",
-	"baz":   "qux",
-	"one":   "two",
-	"three": "four",
-}
-
-// largeFields is a large size data set for benchmarking
-var largeFields = Fields{
-	"foo":       "bar",
-	"baz":       "qux",
-	"one":       "two",
-	"three":     "four",
-	"five":      "six",
-	"seven":     "eight",
-	"nine":      "ten",
-	"eleven":    "twelve",
-	"thirteen":  "fourteen",
-	"fifteen":   "sixteen",
-	"seventeen": "eighteen",
-	"nineteen":  "twenty",
-	"a":         "b",
-	"c":         "d",
-	"e":         "f",
-	"g":         "h",
-	"i":         "j",
-	"k":         "l",
-	"m":         "n",
-	"o":         "p",
-	"q":         "r",
-	"s":         "t",
-	"u":         "v",
-	"w":         "x",
-	"y":         "z",
-	"this":      "will",
-	"make":      "thirty",
-	"entries":   "yeah",
-}
-
-var errorFields = Fields{
-	"foo": fmt.Errorf("bar"),
-	"baz": fmt.Errorf("qux"),
-}
-
-func BenchmarkErrorTextFormatter(b *testing.B) {
-	doBenchmark(b, &TextFormatter{DisableColors: true}, errorFields)
-}
-
-func BenchmarkSmallTextFormatter(b *testing.B) {
-	doBenchmark(b, &TextFormatter{DisableColors: true}, smallFields)
-}
-
-func BenchmarkLargeTextFormatter(b *testing.B) {
-	doBenchmark(b, &TextFormatter{DisableColors: true}, largeFields)
-}
-
-func BenchmarkSmallColoredTextFormatter(b *testing.B) {
-	doBenchmark(b, &TextFormatter{ForceColors: true}, smallFields)
-}
-
-func BenchmarkLargeColoredTextFormatter(b *testing.B) {
-	doBenchmark(b, &TextFormatter{ForceColors: true}, largeFields)
-}
-
-func BenchmarkSmallJSONFormatter(b *testing.B) {
-	doBenchmark(b, &JSONFormatter{}, smallFields)
-}
-
-func BenchmarkLargeJSONFormatter(b *testing.B) {
-	doBenchmark(b, &JSONFormatter{}, largeFields)
-}
-
-func doBenchmark(b *testing.B, formatter Formatter, fields Fields) {
-	logger := New()
-
-	entry := &Entry{
-		Time:    time.Time{},
-		Level:   InfoLevel,
-		Message: "message",
-		Data:    fields,
-		Logger:  logger,
-	}
-	var d []byte
-	var err error
-	for i := 0; i < b.N; i++ {
-		d, err = formatter.Format(entry)
-		if err != nil {
-			b.Fatal(err)
-		}
-		b.SetBytes(int64(len(d)))
-	}
-}
diff --git a/vendor/github.com/Sirupsen/logrus/hook_test.go b/vendor/github.com/Sirupsen/logrus/hook_test.go
deleted file mode 100644
index b967593..0000000
--- a/vendor/github.com/Sirupsen/logrus/hook_test.go
+++ /dev/null
@@ -1,192 +0,0 @@
-package logrus_test
-
-import (
-	"bytes"
-	"encoding/json"
-	"sync"
-	"testing"
-
-	"github.com/stretchr/testify/assert"
-	"github.com/stretchr/testify/require"
-
-	. "github.com/sirupsen/logrus"
-	. "github.com/sirupsen/logrus/internal/testutils"
-)
-
-type TestHook struct {
-	Fired bool
-}
-
-func (hook *TestHook) Fire(entry *Entry) error {
-	hook.Fired = true
-	return nil
-}
-
-func (hook *TestHook) Levels() []Level {
-	return []Level{
-		TraceLevel,
-		DebugLevel,
-		InfoLevel,
-		WarnLevel,
-		ErrorLevel,
-		FatalLevel,
-		PanicLevel,
-	}
-}
-
-func TestHookFires(t *testing.T) {
-	hook := new(TestHook)
-
-	LogAndAssertJSON(t, func(log *Logger) {
-		log.Hooks.Add(hook)
-		assert.Equal(t, hook.Fired, false)
-
-		log.Print("test")
-	}, func(fields Fields) {
-		assert.Equal(t, hook.Fired, true)
-	})
-}
-
-type ModifyHook struct {
-}
-
-func (hook *ModifyHook) Fire(entry *Entry) error {
-	entry.Data["wow"] = "whale"
-	return nil
-}
-
-func (hook *ModifyHook) Levels() []Level {
-	return []Level{
-		TraceLevel,
-		DebugLevel,
-		InfoLevel,
-		WarnLevel,
-		ErrorLevel,
-		FatalLevel,
-		PanicLevel,
-	}
-}
-
-func TestHookCanModifyEntry(t *testing.T) {
-	hook := new(ModifyHook)
-
-	LogAndAssertJSON(t, func(log *Logger) {
-		log.Hooks.Add(hook)
-		log.WithField("wow", "elephant").Print("test")
-	}, func(fields Fields) {
-		assert.Equal(t, fields["wow"], "whale")
-	})
-}
-
-func TestCanFireMultipleHooks(t *testing.T) {
-	hook1 := new(ModifyHook)
-	hook2 := new(TestHook)
-
-	LogAndAssertJSON(t, func(log *Logger) {
-		log.Hooks.Add(hook1)
-		log.Hooks.Add(hook2)
-
-		log.WithField("wow", "elephant").Print("test")
-	}, func(fields Fields) {
-		assert.Equal(t, fields["wow"], "whale")
-		assert.Equal(t, hook2.Fired, true)
-	})
-}
-
-type SingleLevelModifyHook struct {
-	ModifyHook
-}
-
-func (h *SingleLevelModifyHook) Levels() []Level {
-	return []Level{InfoLevel}
-}
-
-func TestHookEntryIsPristine(t *testing.T) {
-	l := New()
-	b := &bytes.Buffer{}
-	l.Formatter = &JSONFormatter{}
-	l.Out = b
-	l.AddHook(&SingleLevelModifyHook{})
-
-	l.Error("error message")
-	data := map[string]string{}
-	err := json.Unmarshal(b.Bytes(), &data)
-	require.NoError(t, err)
-	_, ok := data["wow"]
-	require.False(t, ok)
-	b.Reset()
-
-	l.Info("error message")
-	data = map[string]string{}
-	err = json.Unmarshal(b.Bytes(), &data)
-	require.NoError(t, err)
-	_, ok = data["wow"]
-	require.True(t, ok)
-	b.Reset()
-
-	l.Error("error message")
-	data = map[string]string{}
-	err = json.Unmarshal(b.Bytes(), &data)
-	require.NoError(t, err)
-	_, ok = data["wow"]
-	require.False(t, ok)
-	b.Reset()
-}
-
-type ErrorHook struct {
-	Fired bool
-}
-
-func (hook *ErrorHook) Fire(entry *Entry) error {
-	hook.Fired = true
-	return nil
-}
-
-func (hook *ErrorHook) Levels() []Level {
-	return []Level{
-		ErrorLevel,
-	}
-}
-
-func TestErrorHookShouldntFireOnInfo(t *testing.T) {
-	hook := new(ErrorHook)
-
-	LogAndAssertJSON(t, func(log *Logger) {
-		log.Hooks.Add(hook)
-		log.Info("test")
-	}, func(fields Fields) {
-		assert.Equal(t, hook.Fired, false)
-	})
-}
-
-func TestErrorHookShouldFireOnError(t *testing.T) {
-	hook := new(ErrorHook)
-
-	LogAndAssertJSON(t, func(log *Logger) {
-		log.Hooks.Add(hook)
-		log.Error("test")
-	}, func(fields Fields) {
-		assert.Equal(t, hook.Fired, true)
-	})
-}
-
-func TestAddHookRace(t *testing.T) {
-	var wg sync.WaitGroup
-	wg.Add(2)
-	hook := new(ErrorHook)
-	LogAndAssertJSON(t, func(log *Logger) {
-		go func() {
-			defer wg.Done()
-			log.AddHook(hook)
-		}()
-		go func() {
-			defer wg.Done()
-			log.Error("test")
-		}()
-		wg.Wait()
-	}, func(fields Fields) {
-		// the line may have been logged
-		// before the hook was added, so we can't
-		// actually assert on the hook
-	})
-}
diff --git a/vendor/github.com/Sirupsen/logrus/hooks/syslog/README.md b/vendor/github.com/Sirupsen/logrus/hooks/syslog/README.md
deleted file mode 100644
index 1bbc0f7..0000000
--- a/vendor/github.com/Sirupsen/logrus/hooks/syslog/README.md
+++ /dev/null
@@ -1,39 +0,0 @@
-# Syslog Hooks for Logrus <img src="http://i.imgur.com/hTeVwmJ.png" width="40" height="40" alt=":walrus:" class="emoji" title=":walrus:"/>
-
-## Usage
-
-```go
-import (
-  "log/syslog"
-  "github.com/sirupsen/logrus"
-  lSyslog "github.com/sirupsen/logrus/hooks/syslog"
-)
-
-func main() {
-  log       := logrus.New()
-  hook, err := lSyslog.NewSyslogHook("udp", "localhost:514", syslog.LOG_INFO, "")
-
-  if err == nil {
-    log.Hooks.Add(hook)
-  }
-}
-```
-
-If you want to connect to local syslog (Ex. "/dev/log" or "/var/run/syslog" or "/var/run/log"). Just assign empty string to the first two parameters of `NewSyslogHook`. It should look like the following.
-
-```go
-import (
-  "log/syslog"
-  "github.com/sirupsen/logrus"
-  lSyslog "github.com/sirupsen/logrus/hooks/syslog"
-)
-
-func main() {
-  log       := logrus.New()
-  hook, err := lSyslog.NewSyslogHook("", "", syslog.LOG_INFO, "")
-
-  if err == nil {
-    log.Hooks.Add(hook)
-  }
-}
-```
diff --git a/vendor/github.com/Sirupsen/logrus/hooks/syslog/syslog.go b/vendor/github.com/Sirupsen/logrus/hooks/syslog/syslog.go
deleted file mode 100644
index 02b8df3..0000000
--- a/vendor/github.com/Sirupsen/logrus/hooks/syslog/syslog.go
+++ /dev/null
@@ -1,55 +0,0 @@
-// +build !windows,!nacl,!plan9
-
-package syslog
-
-import (
-	"fmt"
-	"log/syslog"
-	"os"
-
-	"github.com/sirupsen/logrus"
-)
-
-// SyslogHook to send logs via syslog.
-type SyslogHook struct {
-	Writer        *syslog.Writer
-	SyslogNetwork string
-	SyslogRaddr   string
-}
-
-// Creates a hook to be added to an instance of logger. This is called with
-// `hook, err := NewSyslogHook("udp", "localhost:514", syslog.LOG_DEBUG, "")`
-// `if err == nil { log.Hooks.Add(hook) }`
-func NewSyslogHook(network, raddr string, priority syslog.Priority, tag string) (*SyslogHook, error) {
-	w, err := syslog.Dial(network, raddr, priority, tag)
-	return &SyslogHook{w, network, raddr}, err
-}
-
-func (hook *SyslogHook) Fire(entry *logrus.Entry) error {
-	line, err := entry.String()
-	if err != nil {
-		fmt.Fprintf(os.Stderr, "Unable to read entry, %v", err)
-		return err
-	}
-
-	switch entry.Level {
-	case logrus.PanicLevel:
-		return hook.Writer.Crit(line)
-	case logrus.FatalLevel:
-		return hook.Writer.Crit(line)
-	case logrus.ErrorLevel:
-		return hook.Writer.Err(line)
-	case logrus.WarnLevel:
-		return hook.Writer.Warning(line)
-	case logrus.InfoLevel:
-		return hook.Writer.Info(line)
-	case logrus.DebugLevel, logrus.TraceLevel:
-		return hook.Writer.Debug(line)
-	default:
-		return nil
-	}
-}
-
-func (hook *SyslogHook) Levels() []logrus.Level {
-	return logrus.AllLevels
-}
diff --git a/vendor/github.com/Sirupsen/logrus/hooks/syslog/syslog_test.go b/vendor/github.com/Sirupsen/logrus/hooks/syslog/syslog_test.go
deleted file mode 100644
index bec6efd..0000000
--- a/vendor/github.com/Sirupsen/logrus/hooks/syslog/syslog_test.go
+++ /dev/null
@@ -1,29 +0,0 @@
-// +build !windows,!nacl,!plan9
-
-package syslog
-
-import (
-	"log/syslog"
-	"testing"
-
-	"github.com/sirupsen/logrus"
-)
-
-func TestLocalhostAddAndPrint(t *testing.T) {
-	log := logrus.New()
-	hook, err := NewSyslogHook("udp", "localhost:514", syslog.LOG_INFO, "")
-
-	if err != nil {
-		t.Errorf("Unable to connect to local syslog.")
-	}
-
-	log.Hooks.Add(hook)
-
-	for _, level := range hook.Levels() {
-		if len(log.Hooks[level]) != 1 {
-			t.Errorf("SyslogHook was not added. The length of log.Hooks[%v]: %v", level, len(log.Hooks[level]))
-		}
-	}
-
-	log.Info("Congratulations!")
-}
diff --git a/vendor/github.com/Sirupsen/logrus/hooks/test/test.go b/vendor/github.com/Sirupsen/logrus/hooks/test/test.go
deleted file mode 100644
index 234a17d..0000000
--- a/vendor/github.com/Sirupsen/logrus/hooks/test/test.go
+++ /dev/null
@@ -1,92 +0,0 @@
-// The Test package is used for testing logrus. It is here for backwards
-// compatibility from when logrus' organization was upper-case. Please use
-// lower-case logrus and the `null` package instead of this one.
-package test
-
-import (
-	"io/ioutil"
-	"sync"
-
-	"github.com/sirupsen/logrus"
-)
-
-// Hook is a hook designed for dealing with logs in test scenarios.
-type Hook struct {
-	// Entries is an array of all entries that have been received by this hook.
-	// For safe access, use the AllEntries() method, rather than reading this
-	// value directly.
-	Entries []logrus.Entry
-	mu      sync.RWMutex
-}
-
-// NewGlobal installs a test hook for the global logger.
-func NewGlobal() *Hook {
-
-	hook := new(Hook)
-	logrus.AddHook(hook)
-
-	return hook
-
-}
-
-// NewLocal installs a test hook for a given local logger.
-func NewLocal(logger *logrus.Logger) *Hook {
-
-	hook := new(Hook)
-	logger.Hooks.Add(hook)
-
-	return hook
-
-}
-
-// NewNullLogger creates a discarding logger and installs the test hook.
-func NewNullLogger() (*logrus.Logger, *Hook) {
-
-	logger := logrus.New()
-	logger.Out = ioutil.Discard
-
-	return logger, NewLocal(logger)
-
-}
-
-func (t *Hook) Fire(e *logrus.Entry) error {
-	t.mu.Lock()
-	defer t.mu.Unlock()
-	t.Entries = append(t.Entries, *e)
-	return nil
-}
-
-func (t *Hook) Levels() []logrus.Level {
-	return logrus.AllLevels
-}
-
-// LastEntry returns the last entry that was logged or nil.
-func (t *Hook) LastEntry() *logrus.Entry {
-	t.mu.RLock()
-	defer t.mu.RUnlock()
-	i := len(t.Entries) - 1
-	if i < 0 {
-		return nil
-	}
-	return &t.Entries[i]
-}
-
-// AllEntries returns all entries that were logged.
-func (t *Hook) AllEntries() []*logrus.Entry {
-	t.mu.RLock()
-	defer t.mu.RUnlock()
-	// Make a copy so the returned value won't race with future log requests
-	entries := make([]*logrus.Entry, len(t.Entries))
-	for i := 0; i < len(t.Entries); i++ {
-		// Make a copy, for safety
-		entries[i] = &t.Entries[i]
-	}
-	return entries
-}
-
-// Reset removes all Entries from this test hook.
-func (t *Hook) Reset() {
-	t.mu.Lock()
-	defer t.mu.Unlock()
-	t.Entries = make([]logrus.Entry, 0)
-}
diff --git a/vendor/github.com/Sirupsen/logrus/hooks/test/test_test.go b/vendor/github.com/Sirupsen/logrus/hooks/test/test_test.go
deleted file mode 100644
index 636bad5..0000000
--- a/vendor/github.com/Sirupsen/logrus/hooks/test/test_test.go
+++ /dev/null
@@ -1,85 +0,0 @@
-package test
-
-import (
-	"math/rand"
-	"sync"
-	"testing"
-	"time"
-
-	"github.com/sirupsen/logrus"
-	"github.com/stretchr/testify/assert"
-)
-
-func TestAllHooks(t *testing.T) {
-	assert := assert.New(t)
-
-	logger, hook := NewNullLogger()
-	assert.Nil(hook.LastEntry())
-	assert.Equal(0, len(hook.Entries))
-
-	logger.Error("Hello error")
-	assert.Equal(logrus.ErrorLevel, hook.LastEntry().Level)
-	assert.Equal("Hello error", hook.LastEntry().Message)
-	assert.Equal(1, len(hook.Entries))
-
-	logger.Warn("Hello warning")
-	assert.Equal(logrus.WarnLevel, hook.LastEntry().Level)
-	assert.Equal("Hello warning", hook.LastEntry().Message)
-	assert.Equal(2, len(hook.Entries))
-
-	hook.Reset()
-	assert.Nil(hook.LastEntry())
-	assert.Equal(0, len(hook.Entries))
-
-	hook = NewGlobal()
-
-	logrus.Error("Hello error")
-	assert.Equal(logrus.ErrorLevel, hook.LastEntry().Level)
-	assert.Equal("Hello error", hook.LastEntry().Message)
-	assert.Equal(1, len(hook.Entries))
-}
-
-func TestLoggingWithHooksRace(t *testing.T) {
-
-	rand.Seed(time.Now().Unix())
-	unlocker := rand.Int() % 100
-
-	assert := assert.New(t)
-	logger, hook := NewNullLogger()
-
-	var wgOne, wgAll sync.WaitGroup
-	wgOne.Add(1)
-	wgAll.Add(100)
-
-	for i := 0; i < 100; i++ {
-		go func(i int) {
-			logger.Info("info")
-			wgAll.Done()
-			if i == unlocker {
-				wgOne.Done()
-			}
-		}(i)
-	}
-
-	wgOne.Wait()
-
-	assert.Equal(logrus.InfoLevel, hook.LastEntry().Level)
-	assert.Equal("info", hook.LastEntry().Message)
-
-	wgAll.Wait()
-
-	entries := hook.AllEntries()
-	assert.Equal(100, len(entries))
-}
-
-func TestFatalWithAlternateExit(t *testing.T) {
-	assert := assert.New(t)
-
-	logger, hook := NewNullLogger()
-	logger.ExitFunc = func(code int) {}
-
-	logger.Fatal("something went very wrong")
-	assert.Equal(logrus.FatalLevel, hook.LastEntry().Level)
-	assert.Equal("something went very wrong", hook.LastEntry().Message)
-	assert.Equal(1, len(hook.Entries))
-}
diff --git a/vendor/github.com/Sirupsen/logrus/internal/testutils/testutils.go b/vendor/github.com/Sirupsen/logrus/internal/testutils/testutils.go
deleted file mode 100644
index 20bc3c3..0000000
--- a/vendor/github.com/Sirupsen/logrus/internal/testutils/testutils.go
+++ /dev/null
@@ -1,58 +0,0 @@
-package testutils
-
-import (
-	"bytes"
-	"encoding/json"
-	"strconv"
-	"strings"
-	"testing"
-
-	. "github.com/sirupsen/logrus"
-
-	"github.com/stretchr/testify/require"
-)
-
-func LogAndAssertJSON(t *testing.T, log func(*Logger), assertions func(fields Fields)) {
-	var buffer bytes.Buffer
-	var fields Fields
-
-	logger := New()
-	logger.Out = &buffer
-	logger.Formatter = new(JSONFormatter)
-
-	log(logger)
-
-	err := json.Unmarshal(buffer.Bytes(), &fields)
-	require.Nil(t, err)
-
-	assertions(fields)
-}
-
-func LogAndAssertText(t *testing.T, log func(*Logger), assertions func(fields map[string]string)) {
-	var buffer bytes.Buffer
-
-	logger := New()
-	logger.Out = &buffer
-	logger.Formatter = &TextFormatter{
-		DisableColors: true,
-	}
-
-	log(logger)
-
-	fields := make(map[string]string)
-	for _, kv := range strings.Split(buffer.String(), " ") {
-		if !strings.Contains(kv, "=") {
-			continue
-		}
-		kvArr := strings.Split(kv, "=")
-		key := strings.TrimSpace(kvArr[0])
-		val := kvArr[1]
-		if kvArr[1][0] == '"' {
-			var err error
-			val, err = strconv.Unquote(val)
-			require.NoError(t, err)
-		}
-		fields[key] = val
-	}
-	assertions(fields)
-}
diff --git a/vendor/github.com/Sirupsen/logrus/json_formatter_test.go b/vendor/github.com/Sirupsen/logrus/json_formatter_test.go
deleted file mode 100644
index 695c36e..0000000
--- a/vendor/github.com/Sirupsen/logrus/json_formatter_test.go
+++ /dev/null
@@ -1,346 +0,0 @@
-package logrus
-
-import (
-	"encoding/json"
-	"errors"
-	"fmt"
-	"runtime"
-	"strings"
-	"testing"
-)
-
-func TestErrorNotLost(t *testing.T) {
-	formatter := &JSONFormatter{}
-
-	b, err := formatter.Format(WithField("error", errors.New("wild walrus")))
-	if err != nil {
-		t.Fatal("Unable to format entry: ", err)
-	}
-
-	entry := make(map[string]interface{})
-	err = json.Unmarshal(b, &entry)
-	if err != nil {
-		t.Fatal("Unable to unmarshal formatted entry: ", err)
-	}
-
-	if entry["error"] != "wild walrus" {
-		t.Fatal("Error field not set")
-	}
-}
-
-func TestErrorNotLostOnFieldNotNamedError(t *testing.T) {
-	formatter := &JSONFormatter{}
-
-	b, err := formatter.Format(WithField("omg", errors.New("wild walrus")))
-	if err != nil {
-		t.Fatal("Unable to format entry: ", err)
-	}
-
-	entry := make(map[string]interface{})
-	err = json.Unmarshal(b, &entry)
-	if err != nil {
-		t.Fatal("Unable to unmarshal formatted entry: ", err)
-	}
-
-	if entry["omg"] != "wild walrus" {
-		t.Fatal("Error field not set")
-	}
-}
-
-func TestFieldClashWithTime(t *testing.T) {
-	formatter := &JSONFormatter{}
-
-	b, err := formatter.Format(WithField("time", "right now!"))
-	if err != nil {
-		t.Fatal("Unable to format entry: ", err)
-	}
-
-	entry := make(map[string]interface{})
-	err = json.Unmarshal(b, &entry)
-	if err != nil {
-		t.Fatal("Unable to unmarshal formatted entry: ", err)
-	}
-
-	if entry["fields.time"] != "right now!" {
-		t.Fatal("fields.time not set to original time field")
-	}
-
-	if entry["time"] != "0001-01-01T00:00:00Z" {
-		t.Fatal("time field not set to current time, was: ", entry["time"])
-	}
-}
-
-func TestFieldClashWithMsg(t *testing.T) {
-	formatter := &JSONFormatter{}
-
-	b, err := formatter.Format(WithField("msg", "something"))
-	if err != nil {
-		t.Fatal("Unable to format entry: ", err)
-	}
-
-	entry := make(map[string]interface{})
-	err = json.Unmarshal(b, &entry)
-	if err != nil {
-		t.Fatal("Unable to unmarshal formatted entry: ", err)
-	}
-
-	if entry["fields.msg"] != "something" {
-		t.Fatal("fields.msg not set to original msg field")
-	}
-}
-
-func TestFieldClashWithLevel(t *testing.T) {
-	formatter := &JSONFormatter{}
-
-	b, err := formatter.Format(WithField("level", "something"))
-	if err != nil {
-		t.Fatal("Unable to format entry: ", err)
-	}
-
-	entry := make(map[string]interface{})
-	err = json.Unmarshal(b, &entry)
-	if err != nil {
-		t.Fatal("Unable to unmarshal formatted entry: ", err)
-	}
-
-	if entry["fields.level"] != "something" {
-		t.Fatal("fields.level not set to original level field")
-	}
-}
-
-func TestFieldClashWithRemappedFields(t *testing.T) {
-	formatter := &JSONFormatter{
-		FieldMap: FieldMap{
-			FieldKeyTime:  "@timestamp",
-			FieldKeyLevel: "@level",
-			FieldKeyMsg:   "@message",
-		},
-	}
-
-	b, err := formatter.Format(WithFields(Fields{
-		"@timestamp": "@timestamp",
-		"@level":     "@level",
-		"@message":   "@message",
-		"timestamp":  "timestamp",
-		"level":      "level",
-		"msg":        "msg",
-	}))
-	if err != nil {
-		t.Fatal("Unable to format entry: ", err)
-	}
-
-	entry := make(map[string]interface{})
-	err = json.Unmarshal(b, &entry)
-	if err != nil {
-		t.Fatal("Unable to unmarshal formatted entry: ", err)
-	}
-
-	for _, field := range []string{"timestamp", "level", "msg"} {
-		if entry[field] != field {
-			t.Errorf("Expected field %v to be untouched; got %v", field, entry[field])
-		}
-
-		remappedKey := fmt.Sprintf("fields.%s", field)
-		if remapped, ok := entry[remappedKey]; ok {
-			t.Errorf("Expected %s to be empty; got %v", remappedKey, remapped)
-		}
-	}
-
-	for _, field := range []string{"@timestamp", "@level", "@message"} {
-		if entry[field] == field {
-			t.Errorf("Expected field %v to be mapped to an Entry value", field)
-		}
-
-		remappedKey := fmt.Sprintf("fields.%s", field)
-		if remapped, ok := entry[remappedKey]; ok {
-			if remapped != field {
-				t.Errorf("Expected field %v to be copied to %s; got %v", field, remappedKey, remapped)
-			}
-		} else {
-			t.Errorf("Expected field %v to be copied to %s; was absent", field, remappedKey)
-		}
-	}
-}
-
-func TestFieldsInNestedDictionary(t *testing.T) {
-	formatter := &JSONFormatter{
-		DataKey: "args",
-	}
-
-	logEntry := WithFields(Fields{
-		"level": "level",
-		"test":  "test",
-	})
-	logEntry.Level = InfoLevel
-
-	b, err := formatter.Format(logEntry)
-	if err != nil {
-		t.Fatal("Unable to format entry: ", err)
-	}
-
-	entry := make(map[string]interface{})
-	err = json.Unmarshal(b, &entry)
-	if err != nil {
-		t.Fatal("Unable to unmarshal formatted entry: ", err)
-	}
-
-	args := entry["args"].(map[string]interface{})
-
-	for _, field := range []string{"test", "level"} {
-		if value, present := args[field]; !present || value != field {
-			t.Errorf("Expected field %v to be present under 'args'; untouched", field)
-		}
-	}
-
-	for _, field := range []string{"test", "fields.level"} {
-		if _, present := entry[field]; present {
-			t.Errorf("Expected field %v not to be present at top level", field)
-		}
-	}
-
-	// with nested object, "level" shouldn't clash
-	if entry["level"] != "info" {
-		t.Errorf("Expected 'level' field to contain 'info'")
-	}
-}
-
-func TestJSONEntryEndsWithNewline(t *testing.T) {
-	formatter := &JSONFormatter{}
-
-	b, err := formatter.Format(WithField("level", "something"))
-	if err != nil {
-		t.Fatal("Unable to format entry: ", err)
-	}
-
-	if b[len(b)-1] != '\n' {
-		t.Fatal("Expected JSON log entry to end with a newline")
-	}
-}
-
-func TestJSONMessageKey(t *testing.T) {
-	formatter := &JSONFormatter{
-		FieldMap: FieldMap{
-			FieldKeyMsg: "message",
-		},
-	}
-
-	b, err := formatter.Format(&Entry{Message: "oh hai"})
-	if err != nil {
-		t.Fatal("Unable to format entry: ", err)
-	}
-	s := string(b)
-	if !(strings.Contains(s, "message") && strings.Contains(s, "oh hai")) {
-		t.Fatal("Expected JSON to format message key")
-	}
-}
-
-func TestJSONLevelKey(t *testing.T) {
-	formatter := &JSONFormatter{
-		FieldMap: FieldMap{
-			FieldKeyLevel: "somelevel",
-		},
-	}
-
-	b, err := formatter.Format(WithField("level", "something"))
-	if err != nil {
-		t.Fatal("Unable to format entry: ", err)
-	}
-	s := string(b)
-	if !strings.Contains(s, "somelevel") {
-		t.Fatal("Expected JSON to format level key")
-	}
-}
-
-func TestJSONTimeKey(t *testing.T) {
-	formatter := &JSONFormatter{
-		FieldMap: FieldMap{
-			FieldKeyTime: "timeywimey",
-		},
-	}
-
-	b, err := formatter.Format(WithField("level", "something"))
-	if err != nil {
-		t.Fatal("Unable to format entry: ", err)
-	}
-	s := string(b)
-	if !strings.Contains(s, "timeywimey") {
-		t.Fatal("Expected JSON to format time key")
-	}
-}
-
-func TestFieldDoesNotClashWithCaller(t *testing.T) {
-	SetReportCaller(false)
-	formatter := &JSONFormatter{}
-
-	b, err := formatter.Format(WithField("func", "howdy pardner"))
-	if err != nil {
-		t.Fatal("Unable to format entry: ", err)
-	}
-
-	entry := make(map[string]interface{})
-	err = json.Unmarshal(b, &entry)
-	if err != nil {
-		t.Fatal("Unable to unmarshal formatted entry: ", err)
-	}
-
-	if entry["func"] != "howdy pardner" {
-		t.Fatal("func field replaced when ReportCaller=false")
-	}
-}
-
-func TestFieldClashWithCaller(t *testing.T) {
-	SetReportCaller(true)
-	formatter := &JSONFormatter{}
-	e := WithField("func", "howdy pardner")
-	e.Caller = &runtime.Frame{Function: "somefunc"}
-	b, err := formatter.Format(e)
-	if err != nil {
-		t.Fatal("Unable to format entry: ", err)
-	}
-
-	entry := make(map[string]interface{})
-	err = json.Unmarshal(b, &entry)
-	if err != nil {
-		t.Fatal("Unable to unmarshal formatted entry: ", err)
-	}
-
-	if entry["fields.func"] != "howdy pardner" {
-		t.Fatalf("fields.func not set to original func field when ReportCaller=true (got '%s')",
-			entry["fields.func"])
-	}
-
-	if entry["func"] != "somefunc" {
-		t.Fatalf("func not set as expected when ReportCaller=true (got '%s')",
-			entry["func"])
-	}
-
-	SetReportCaller(false) // return to default value
-}
-
-func TestJSONDisableTimestamp(t *testing.T) {
-	formatter := &JSONFormatter{
-		DisableTimestamp: true,
-	}
-
-	b, err := formatter.Format(WithField("level", "something"))
-	if err != nil {
-		t.Fatal("Unable to format entry: ", err)
-	}
-	s := string(b)
-	if strings.Contains(s, FieldKeyTime) {
-		t.Error("Did not prevent timestamp", s)
-	}
-}
-
-func TestJSONEnableTimestamp(t *testing.T) {
-	formatter := &JSONFormatter{}
-
-	b, err := formatter.Format(WithField("level", "something"))
-	if err != nil {
-		t.Fatal("Unable to format entry: ", err)
-	}
-	s := string(b)
-	if !strings.Contains(s, FieldKeyTime) {
-		t.Error("Timestamp not present", s)
-	}
-}
diff --git a/vendor/github.com/Sirupsen/logrus/logger.go b/vendor/github.com/Sirupsen/logrus/logger.go
deleted file mode 100644
index 5ceca0e..0000000
--- a/vendor/github.com/Sirupsen/logrus/logger.go
+++ /dev/null
@@ -1,415 +0,0 @@
-package logrus
-
-import (
-	"io"
-	"os"
-	"sync"
-	"sync/atomic"
-	"time"
-)
-
-type Logger struct {
-	// The logs are `io.Copy`'d to this in a mutex. It's common to set this to a
-	// file, or leave it default which is `os.Stderr`. You can also set this to
-	// something more adventurous, such as logging to Kafka.
-	Out io.Writer
-	// Hooks for the logger instance. These allow firing events based on logging
-	// levels and log entries. For example, to send errors to an error tracking
-	// service, log to StatsD or dump the core on fatal errors.
-	Hooks LevelHooks
-	// All log entries pass through the formatter before logged to Out. The
-	// included formatters are `TextFormatter` and `JSONFormatter` for which
-	// TextFormatter is the default. In development (when a TTY is attached) it
-	// logs with colors, but to a file it wouldn't. You can easily implement your
-	// own that implements the `Formatter` interface, see the `README` or included
-	// formatters for examples.
-	Formatter Formatter
-
-	// Flag for whether to log caller info (off by default)
-	ReportCaller bool
-
-	// The logging level the logger should log at. This is typically (and defaults
-	// to) `logrus.Info`, which allows Info(), Warn(), Error() and Fatal() to be
-	// logged.
-	Level Level
-	// Used to sync writing to the log. Locking is enabled by Default
-	mu MutexWrap
-	// Reusable empty entry
-	entryPool sync.Pool
-	// Function to exit the application, defaults to `os.Exit()`
-	ExitFunc exitFunc
-}
-
-type exitFunc func(int)
-
-type MutexWrap struct {
-	lock     sync.Mutex
-	disabled bool
-}
-
-func (mw *MutexWrap) Lock() {
-	if !mw.disabled {
-		mw.lock.Lock()
-	}
-}
-
-func (mw *MutexWrap) Unlock() {
-	if !mw.disabled {
-		mw.lock.Unlock()
-	}
-}
-
-func (mw *MutexWrap) Disable() {
-	mw.disabled = true
-}
-
-// Creates a new logger. Configuration should be set by changing `Formatter`,
-// `Out` and `Hooks` directly on the default logger instance. You can also just
-// instantiate your own:
-//
-//    var log = &Logger{
-//      Out: os.Stderr,
-//      Formatter: new(JSONFormatter),
-//      Hooks: make(LevelHooks),
-//      Level: logrus.DebugLevel,
-//    }
-//
-// It's recommended to make this a global instance called `log`.
-func New() *Logger {
-	return &Logger{
-		Out:          os.Stderr,
-		Formatter:    new(TextFormatter),
-		Hooks:        make(LevelHooks),
-		Level:        InfoLevel,
-		ExitFunc:     os.Exit,
-		ReportCaller: false,
-	}
-}
-
-func (logger *Logger) newEntry() *Entry {
-	entry, ok := logger.entryPool.Get().(*Entry)
-	if ok {
-		return entry
-	}
-	return NewEntry(logger)
-}
-
-func (logger *Logger) releaseEntry(entry *Entry) {
-	entry.Data = map[string]interface{}{}
-	logger.entryPool.Put(entry)
-}
-
-// Adds a field to the log entry, note that it doesn't log until you call
-// Debug, Print, Info, Warn, Error, Fatal or Panic. It only creates a log entry.
-// If you want multiple fields, use `WithFields`.
-func (logger *Logger) WithField(key string, value interface{}) *Entry {
-	entry := logger.newEntry()
-	defer logger.releaseEntry(entry)
-	return entry.WithField(key, value)
-}
-
-// Adds a struct of fields to the log entry. All it does is call `WithField` for
-// each `Field`.
-func (logger *Logger) WithFields(fields Fields) *Entry {
-	entry := logger.newEntry()
-	defer logger.releaseEntry(entry)
-	return entry.WithFields(fields)
-}
-
-// Add an error as single field to the log entry.  All it does is call
-// `WithError` for the given `error`.
-func (logger *Logger) WithError(err error) *Entry {
-	entry := logger.newEntry()
-	defer logger.releaseEntry(entry)
-	return entry.WithError(err)
-}
-
-// Overrides the time of the log entry.
-func (logger *Logger) WithTime(t time.Time) *Entry {
-	entry := logger.newEntry()
-	defer logger.releaseEntry(entry)
-	return entry.WithTime(t)
-}
-
-func (logger *Logger) Tracef(format string, args ...interface{}) {
-	if logger.IsLevelEnabled(TraceLevel) {
-		entry := logger.newEntry()
-		entry.Tracef(format, args...)
-		logger.releaseEntry(entry)
-	}
-}
-
-func (logger *Logger) Debugf(format string, args ...interface{}) {
-	if logger.IsLevelEnabled(DebugLevel) {
-		entry := logger.newEntry()
-		entry.Debugf(format, args...)
-		logger.releaseEntry(entry)
-	}
-}
-
-func (logger *Logger) Infof(format string, args ...interface{}) {
-	if logger.IsLevelEnabled(InfoLevel) {
-		entry := logger.newEntry()
-		entry.Infof(format, args...)
-		logger.releaseEntry(entry)
-	}
-}
-
-func (logger *Logger) Printf(format string, args ...interface{}) {
-	entry := logger.newEntry()
-	entry.Printf(format, args...)
-	logger.releaseEntry(entry)
-}
-
-func (logger *Logger) Warnf(format string, args ...interface{}) {
-	if logger.IsLevelEnabled(WarnLevel) {
-		entry := logger.newEntry()
-		entry.Warnf(format, args...)
-		logger.releaseEntry(entry)
-	}
-}
-
-func (logger *Logger) Warningf(format string, args ...interface{}) {
-	if logger.IsLevelEnabled(WarnLevel) {
-		entry := logger.newEntry()
-		entry.Warnf(format, args...)
-		logger.releaseEntry(entry)
-	}
-}
-
-func (logger *Logger) Errorf(format string, args ...interface{}) {
-	if logger.IsLevelEnabled(ErrorLevel) {
-		entry := logger.newEntry()
-		entry.Errorf(format, args...)
-		logger.releaseEntry(entry)
-	}
-}
-
-func (logger *Logger) Fatalf(format string, args ...interface{}) {
-	if logger.IsLevelEnabled(FatalLevel) {
-		entry := logger.newEntry()
-		entry.Fatalf(format, args...)
-		logger.releaseEntry(entry)
-	}
-	logger.Exit(1)
-}
-
-func (logger *Logger) Panicf(format string, args ...interface{}) {
-	if logger.IsLevelEnabled(PanicLevel) {
-		entry := logger.newEntry()
-		entry.Panicf(format, args...)
-		logger.releaseEntry(entry)
-	}
-}
-
-func (logger *Logger) Trace(args ...interface{}) {
-	if logger.IsLevelEnabled(TraceLevel) {
-		entry := logger.newEntry()
-		entry.Trace(args...)
-		logger.releaseEntry(entry)
-	}
-}
-
-func (logger *Logger) Debug(args ...interface{}) {
-	if logger.IsLevelEnabled(DebugLevel) {
-		entry := logger.newEntry()
-		entry.Debug(args...)
-		logger.releaseEntry(entry)
-	}
-}
-
-func (logger *Logger) Info(args ...interface{}) {
-	if logger.IsLevelEnabled(InfoLevel) {
-		entry := logger.newEntry()
-		entry.Info(args...)
-		logger.releaseEntry(entry)
-	}
-}
-
-func (logger *Logger) Print(args ...interface{}) {
-	entry := logger.newEntry()
-	entry.Info(args...)
-	logger.releaseEntry(entry)
-}
-
-func (logger *Logger) Warn(args ...interface{}) {
-	if logger.IsLevelEnabled(WarnLevel) {
-		entry := logger.newEntry()
-		entry.Warn(args...)
-		logger.releaseEntry(entry)
-	}
-}
-
-func (logger *Logger) Warning(args ...interface{}) {
-	if logger.IsLevelEnabled(WarnLevel) {
-		entry := logger.newEntry()
-		entry.Warn(args...)
-		logger.releaseEntry(entry)
-	}
-}
-
-func (logger *Logger) Error(args ...interface{}) {
-	if logger.IsLevelEnabled(ErrorLevel) {
-		entry := logger.newEntry()
-		entry.Error(args...)
-		logger.releaseEntry(entry)
-	}
-}
-
-func (logger *Logger) Fatal(args ...interface{}) {
-	if logger.IsLevelEnabled(FatalLevel) {
-		entry := logger.newEntry()
-		entry.Fatal(args...)
-		logger.releaseEntry(entry)
-	}
-	logger.Exit(1)
-}
-
-func (logger *Logger) Panic(args ...interface{}) {
-	if logger.IsLevelEnabled(PanicLevel) {
-		entry := logger.newEntry()
-		entry.Panic(args...)
-		logger.releaseEntry(entry)
-	}
-}
-
-func (logger *Logger) Traceln(args ...interface{}) {
-	if logger.IsLevelEnabled(TraceLevel) {
-		entry := logger.newEntry()
-		entry.Traceln(args...)
-		logger.releaseEntry(entry)
-	}
-}
-
-func (logger *Logger) Debugln(args ...interface{}) {
-	if logger.IsLevelEnabled(DebugLevel) {
-		entry := logger.newEntry()
-		entry.Debugln(args...)
-		logger.releaseEntry(entry)
-	}
-}
-
-func (logger *Logger) Infoln(args ...interface{}) {
-	if logger.IsLevelEnabled(InfoLevel) {
-		entry := logger.newEntry()
-		entry.Infoln(args...)
-		logger.releaseEntry(entry)
-	}
-}
-
-func (logger *Logger) Println(args ...interface{}) {
-	entry := logger.newEntry()
-	entry.Println(args...)
-	logger.releaseEntry(entry)
-}
-
-func (logger *Logger) Warnln(args ...interface{}) {
-	if logger.IsLevelEnabled(WarnLevel) {
-		entry := logger.newEntry()
-		entry.Warnln(args...)
-		logger.releaseEntry(entry)
-	}
-}
-
-func (logger *Logger) Warningln(args ...interface{}) {
-	if logger.IsLevelEnabled(WarnLevel) {
-		entry := logger.newEntry()
-		entry.Warnln(args...)
-		logger.releaseEntry(entry)
-	}
-}
-
-func (logger *Logger) Errorln(args ...interface{}) {
-	if logger.IsLevelEnabled(ErrorLevel) {
-		entry := logger.newEntry()
-		entry.Errorln(args...)
-		logger.releaseEntry(entry)
-	}
-}
-
-func (logger *Logger) Fatalln(args ...interface{}) {
-	if logger.IsLevelEnabled(FatalLevel) {
-		entry := logger.newEntry()
-		entry.Fatalln(args...)
-		logger.releaseEntry(entry)
-	}
-	logger.Exit(1)
-}
-
-func (logger *Logger) Panicln(args ...interface{}) {
-	if logger.IsLevelEnabled(PanicLevel) {
-		entry := logger.newEntry()
-		entry.Panicln(args...)
-		logger.releaseEntry(entry)
-	}
-}
-
-func (logger *Logger) Exit(code int) {
-	runHandlers()
-	if logger.ExitFunc == nil {
-		logger.ExitFunc = os.Exit
-	}
-	logger.ExitFunc(code)
-}
-
-//When file is opened with appending mode, it's safe to
-//write concurrently to a file (within 4k message on Linux).
-//In these cases user can choose to disable the lock.
-func (logger *Logger) SetNoLock() {
-	logger.mu.Disable()
-}
-
-func (logger *Logger) level() Level {
-	return Level(atomic.LoadUint32((*uint32)(&logger.Level)))
-}
-
-// SetLevel sets the logger level.
-func (logger *Logger) SetLevel(level Level) {
-	atomic.StoreUint32((*uint32)(&logger.Level), uint32(level))
-}
-
-// GetLevel returns the logger level.
-func (logger *Logger) GetLevel() Level {
-	return logger.level()
-}
-
-// AddHook adds a hook to the logger hooks.
-func (logger *Logger) AddHook(hook Hook) {
-	logger.mu.Lock()
-	defer logger.mu.Unlock()
-	logger.Hooks.Add(hook)
-}
-
-// IsLevelEnabled checks if the log level of the logger is greater than the level param
-func (logger *Logger) IsLevelEnabled(level Level) bool {
-	return logger.level() >= level
-}
-
-// SetFormatter sets the logger formatter.
-func (logger *Logger) SetFormatter(formatter Formatter) {
-	logger.mu.Lock()
-	defer logger.mu.Unlock()
-	logger.Formatter = formatter
-}
-
-// SetOutput sets the logger output.
-func (logger *Logger) SetOutput(output io.Writer) {
-	logger.mu.Lock()
-	defer logger.mu.Unlock()
-	logger.Out = output
-}
-
-func (logger *Logger) SetReportCaller(reportCaller bool) {
-	logger.mu.Lock()
-	defer logger.mu.Unlock()
-	logger.ReportCaller = reportCaller
-}
-
-// ReplaceHooks replaces the logger hooks and returns the old ones
-func (logger *Logger) ReplaceHooks(hooks LevelHooks) LevelHooks {
-	logger.mu.Lock()
-	oldHooks := logger.Hooks
-	logger.Hooks = hooks
-	logger.mu.Unlock()
-	return oldHooks
-}
diff --git a/vendor/github.com/Sirupsen/logrus/logger_bench_test.go b/vendor/github.com/Sirupsen/logrus/logger_bench_test.go
deleted file mode 100644
index f0a7684..0000000
--- a/vendor/github.com/Sirupsen/logrus/logger_bench_test.go
+++ /dev/null
@@ -1,85 +0,0 @@
-package logrus
-
-import (
-	"io/ioutil"
-	"os"
-	"testing"
-)
-
-// smallFields is a small size data set for benchmarking
-var loggerFields = Fields{
-	"foo":   "bar",
-	"baz":   "qux",
-	"one":   "two",
-	"three": "four",
-}
-
-func BenchmarkDummyLogger(b *testing.B) {
-	nullf, err := os.OpenFile("/dev/null", os.O_WRONLY, 0666)
-	if err != nil {
-		b.Fatalf("%v", err)
-	}
-	defer nullf.Close()
-	doLoggerBenchmark(b, nullf, &TextFormatter{DisableColors: true}, smallFields)
-}
-
-func BenchmarkDummyLoggerNoLock(b *testing.B) {
-	nullf, err := os.OpenFile("/dev/null", os.O_WRONLY|os.O_APPEND, 0666)
-	if err != nil {
-		b.Fatalf("%v", err)
-	}
-	defer nullf.Close()
-	doLoggerBenchmarkNoLock(b, nullf, &TextFormatter{DisableColors: true}, smallFields)
-}
-
-func doLoggerBenchmark(b *testing.B, out *os.File, formatter Formatter, fields Fields) {
-	logger := Logger{
-		Out:       out,
-		Level:     InfoLevel,
-		Formatter: formatter,
-	}
-	entry := logger.WithFields(fields)
-	b.RunParallel(func(pb *testing.PB) {
-		for pb.Next() {
-			entry.Info("aaa")
-		}
-	})
-}
-
-func doLoggerBenchmarkNoLock(b *testing.B, out *os.File, formatter Formatter, fields Fields) {
-	logger := Logger{
-		Out:       out,
-		Level:     InfoLevel,
-		Formatter: formatter,
-	}
-	logger.SetNoLock()
-	entry := logger.WithFields(fields)
-	b.RunParallel(func(pb *testing.PB) {
-		for pb.Next() {
-			entry.Info("aaa")
-		}
-	})
-}
-
-func BenchmarkLoggerJSONFormatter(b *testing.B) {
-	doLoggerBenchmarkWithFormatter(b, &JSONFormatter{})
-}
-
-func BenchmarkLoggerTextFormatter(b *testing.B) {
-	doLoggerBenchmarkWithFormatter(b, &TextFormatter{})
-}
-
-func doLoggerBenchmarkWithFormatter(b *testing.B, f Formatter) {
-	b.SetParallelism(100)
-	log := New()
-	log.Formatter = f
-	log.Out = ioutil.Discard
-	b.RunParallel(func(pb *testing.PB) {
-		for pb.Next() {
-			log.
-				WithField("foo1", "bar1").
-				WithField("foo2", "bar2").
-				Info("this is a dummy log")
-		}
-	})
-}
diff --git a/vendor/github.com/Sirupsen/logrus/logger_test.go b/vendor/github.com/Sirupsen/logrus/logger_test.go
deleted file mode 100644
index 73ba450..0000000
--- a/vendor/github.com/Sirupsen/logrus/logger_test.go
+++ /dev/null
@@ -1,42 +0,0 @@
-package logrus
-
-import (
-	"bytes"
-	"encoding/json"
-	"fmt"
-	"testing"
-
-	"github.com/stretchr/testify/require"
-)
-
-func TestFieldValueError(t *testing.T) {
-	buf := &bytes.Buffer{}
-	l := &Logger{
-		Out:       buf,
-		Formatter: new(JSONFormatter),
-		Hooks:     make(LevelHooks),
-		Level:     DebugLevel,
-	}
-	l.WithField("func", func() {}).Info("test")
-	fmt.Println(buf.String())
-	var data map[string]interface{}
-	json.Unmarshal(buf.Bytes(), &data)
-	_, ok := data[FieldKeyLogrusError]
-	require.True(t, ok)
-}
-
-func TestNoFieldValueError(t *testing.T) {
-	buf := &bytes.Buffer{}
-	l := &Logger{
-		Out:       buf,
-		Formatter: new(JSONFormatter),
-		Hooks:     make(LevelHooks),
-		Level:     DebugLevel,
-	}
-	l.WithField("str", "str").Info("test")
-	fmt.Println(buf.String())
-	var data map[string]interface{}
-	json.Unmarshal(buf.Bytes(), &data)
-	_, ok := data[FieldKeyLogrusError]
-	require.False(t, ok)
-}
diff --git a/vendor/github.com/Sirupsen/logrus/logrus.go b/vendor/github.com/Sirupsen/logrus/logrus.go
deleted file mode 100644
index 4ef4518..0000000
--- a/vendor/github.com/Sirupsen/logrus/logrus.go
+++ /dev/null
@@ -1,178 +0,0 @@
-package logrus
-
-import (
-	"fmt"
-	"log"
-	"strings"
-)
-
-// Fields type, used to pass to `WithFields`.
-type Fields map[string]interface{}
-
-// Level type
-type Level uint32
-
-// Convert the Level to a string. E.g. PanicLevel becomes "panic".
-func (level Level) String() string {
-	switch level {
-	case TraceLevel:
-		return "trace"
-	case DebugLevel:
-		return "debug"
-	case InfoLevel:
-		return "info"
-	case WarnLevel:
-		return "warning"
-	case ErrorLevel:
-		return "error"
-	case FatalLevel:
-		return "fatal"
-	case PanicLevel:
-		return "panic"
-	}
-
-	return "unknown"
-}
-
-// ParseLevel takes a string level and returns the Logrus log level constant.
-func ParseLevel(lvl string) (Level, error) {
-	switch strings.ToLower(lvl) {
-	case "panic":
-		return PanicLevel, nil
-	case "fatal":
-		return FatalLevel, nil
-	case "error":
-		return ErrorLevel, nil
-	case "warn", "warning":
-		return WarnLevel, nil
-	case "info":
-		return InfoLevel, nil
-	case "debug":
-		return DebugLevel, nil
-	case "trace":
-		return TraceLevel, nil
-	}
-
-	var l Level
-	return l, fmt.Errorf("not a valid logrus Level: %q", lvl)
-}
-
-// UnmarshalText implements encoding.TextUnmarshaler.
-func (level *Level) UnmarshalText(text []byte) error {
-	l, err := ParseLevel(string(text))
-	if err != nil {
-		return err
-	}
-
-	*level = Level(l)
-
-	return nil
-}
-
-// A constant exposing all logging levels
-var AllLevels = []Level{
-	PanicLevel,
-	FatalLevel,
-	ErrorLevel,
-	WarnLevel,
-	InfoLevel,
-	DebugLevel,
-	TraceLevel,
-}
-
-// These are the different logging levels. You can set the logging level to log
-// on your instance of logger, obtained with `logrus.New()`.
-const (
-	// PanicLevel level, highest level of severity. Logs and then calls panic with the
-	// message passed to Debug, Info, ...
-	PanicLevel Level = iota
-	// FatalLevel level. Logs and then calls `logger.Exit(1)`. It will exit even if the
-	// logging level is set to Panic.
-	FatalLevel
-	// ErrorLevel level. Logs. Used for errors that should definitely be noted.
-	// Commonly used for hooks to send errors to an error tracking service.
-	ErrorLevel
-	// WarnLevel level. Non-critical entries that deserve eyes.
-	WarnLevel
-	// InfoLevel level. General operational entries about what's going on inside the
-	// application.
-	InfoLevel
-	// DebugLevel level. Usually only enabled when debugging. Very verbose logging.
-	DebugLevel
-	// TraceLevel level. Designates finer-grained informational events than the Debug.
-	TraceLevel
-)
-
-// Won't compile if StdLogger can't be realized by a log.Logger
-var (
-	_ StdLogger = &log.Logger{}
-	_ StdLogger = &Entry{}
-	_ StdLogger = &Logger{}
-)
-
-// StdLogger is what your logrus-enabled library should take, that way
-// it'll accept a stdlib logger and a logrus logger. There's no standard
-// interface, this is the closest we get, unfortunately.
-type StdLogger interface {
-	Print(...interface{})
-	Printf(string, ...interface{})
-	Println(...interface{})
-
-	Fatal(...interface{})
-	Fatalf(string, ...interface{})
-	Fatalln(...interface{})
-
-	Panic(...interface{})
-	Panicf(string, ...interface{})
-	Panicln(...interface{})
-}
-
-// The FieldLogger interface generalizes the Entry and Logger types
-type FieldLogger interface {
-	WithField(key string, value interface{}) *Entry
-	WithFields(fields Fields) *Entry
-	WithError(err error) *Entry
-
-	Debugf(format string, args ...interface{})
-	Infof(format string, args ...interface{})
-	Printf(format string, args ...interface{})
-	Warnf(format string, args ...interface{})
-	Warningf(format string, args ...interface{})
-	Errorf(format string, args ...interface{})
-	Fatalf(format string, args ...interface{})
-	Panicf(format string, args ...interface{})
-
-	Debug(args ...interface{})
-	Info(args ...interface{})
-	Print(args ...interface{})
-	Warn(args ...interface{})
-	Warning(args ...interface{})
-	Error(args ...interface{})
-	Fatal(args ...interface{})
-	Panic(args ...interface{})
-
-	Debugln(args ...interface{})
-	Infoln(args ...interface{})
-	Println(args ...interface{})
-	Warnln(args ...interface{})
-	Warningln(args ...interface{})
-	Errorln(args ...interface{})
-	Fatalln(args ...interface{})
-	Panicln(args ...interface{})
-
-	// IsDebugEnabled() bool
-	// IsInfoEnabled() bool
-	// IsWarnEnabled() bool
-	// IsErrorEnabled() bool
-	// IsFatalEnabled() bool
-	// IsPanicEnabled() bool
-}
-
-// Ext1FieldLogger (the first extension to FieldLogger) is superfluous, it is
-// here for consistancy. Do not use. Use Logger or Entry instead.
-type Ext1FieldLogger interface {
-	FieldLogger
-	Tracef(format string, args ...interface{})
-	Trace(args ...interface{})
-	Traceln(args ...interface{})
-}
diff --git a/vendor/github.com/Sirupsen/logrus/logrus_test.go b/vendor/github.com/Sirupsen/logrus/logrus_test.go
deleted file mode 100644
index b12d71c..0000000
--- a/vendor/github.com/Sirupsen/logrus/logrus_test.go
+++ /dev/null
@@ -1,716 +0,0 @@
-package logrus_test
-
-import (
-	"bytes"
-	"encoding/json"
-	"io/ioutil"
-	"os"
-	"path/filepath"
-	"sync"
-	"testing"
-	"time"
-
-	"github.com/stretchr/testify/assert"
-	"github.com/stretchr/testify/require"
-
-	. "github.com/sirupsen/logrus"
-	. "github.com/sirupsen/logrus/internal/testutils"
-)
-
-// TestReportCaller verifies that when ReportCaller is set, the 'func' field
-// is added, and when it is unset it is not set or modified
-// Verify that functions within the Logrus package aren't considered when
-// discovering the caller.
-func TestReportCallerWhenConfigured(t *testing.T) {
-	LogAndAssertJSON(t, func(log *Logger) {
-		log.ReportCaller = false
-		log.Print("testNoCaller")
-	}, func(fields Fields) {
-		assert.Equal(t, "testNoCaller", fields["msg"])
-		assert.Equal(t, "info", fields["level"])
-		assert.Equal(t, nil, fields["func"])
-	})
-
-	LogAndAssertJSON(t, func(log *Logger) {
-		log.ReportCaller = true
-		log.Print("testWithCaller")
-	}, func(fields Fields) {
-		assert.Equal(t, "testWithCaller", fields["msg"])
-		assert.Equal(t, "info", fields["level"])
-		assert.Equal(t,
-			"github.com/sirupsen/logrus_test.TestReportCallerWhenConfigured.func3", fields["func"])
-	})
-}
-
-func logSomething(t *testing.T, message string) Fields {
-	var buffer bytes.Buffer
-	var fields Fields
-
-	logger := New()
-	logger.Out = &buffer
-	logger.Formatter = new(JSONFormatter)
-	logger.ReportCaller = true
-
-	entry := logger.WithFields(Fields{
-		"foo": "bar",
-	})
-
-	entry.Info(message)
-
-	err := json.Unmarshal(buffer.Bytes(), &fields)
-	assert.Nil(t, err)
-
-	return fields
-}
-
-// TestReportCallerHelperDirect - verify reference when logging from a regular function
-func TestReportCallerHelperDirect(t *testing.T) {
-	fields := logSomething(t, "direct")
-
-	assert.Equal(t, "direct", fields["msg"])
-	assert.Equal(t, "info", fields["level"])
-	assert.Regexp(t, "github.com/.*/logrus_test.logSomething", fields["func"])
-}
-
-// TestReportCallerHelperDirect - verify reference when logging from a function called via pointer
-func TestReportCallerHelperViaPointer(t *testing.T) {
-	fptr := logSomething
-	fields := fptr(t, "via pointer")
-
-	assert.Equal(t, "via pointer", fields["msg"])
-	assert.Equal(t, "info", fields["level"])
-	assert.Regexp(t, "github.com/.*/logrus_test.logSomething", fields["func"])
-}
-
-func TestPrint(t *testing.T) {
-	LogAndAssertJSON(t, func(log *Logger) {
-		log.Print("test")
-	}, func(fields Fields) {
-		assert.Equal(t, "test", fields["msg"])
-		assert.Equal(t, "info", fields["level"])
-	})
-}
-
-func TestInfo(t *testing.T) {
-	LogAndAssertJSON(t, func(log *Logger) {
-		log.Info("test")
-	}, func(fields Fields) {
-		assert.Equal(t, "test", fields["msg"])
-		assert.Equal(t, "info", fields["level"])
-	})
-}
-
-func TestWarn(t *testing.T) {
-	LogAndAssertJSON(t, func(log *Logger) {
-		log.Warn("test")
-	}, func(fields Fields) {
-		assert.Equal(t, "test", fields["msg"])
-		assert.Equal(t, "warning", fields["level"])
-	})
-}
-
-func TestInfolnShouldAddSpacesBetweenStrings(t *testing.T) {
-	LogAndAssertJSON(t, func(log *Logger) {
-		log.Infoln("test", "test")
-	}, func(fields Fields) {
-		assert.Equal(t, "test test", fields["msg"])
-	})
-}
-
-func TestInfolnShouldAddSpacesBetweenStringAndNonstring(t *testing.T) {
-	LogAndAssertJSON(t, func(log *Logger) {
-		log.Infoln("test", 10)
-	}, func(fields Fields) {
-		assert.Equal(t, "test 10", fields["msg"])
-	})
-}
-
-func TestInfolnShouldAddSpacesBetweenTwoNonStrings(t *testing.T) {
-	LogAndAssertJSON(t, func(log *Logger) {
-		log.Infoln(10, 10)
-	}, func(fields Fields) {
-		assert.Equal(t, "10 10", fields["msg"])
-	})
-}
-
-func TestInfoShouldAddSpacesBetweenTwoNonStrings(t *testing.T) {
-	LogAndAssertJSON(t, func(log *Logger) {
-		log.Infoln(10, 10)
-	}, func(fields Fields) {
-		assert.Equal(t, "10 10", fields["msg"])
-	})
-}
-
-func TestInfoShouldNotAddSpacesBetweenStringAndNonstring(t *testing.T) {
-	LogAndAssertJSON(t, func(log *Logger) {
-		log.Info("test", 10)
-	}, func(fields Fields) {
-		assert.Equal(t, "test10", fields["msg"])
-	})
-}
-
-func TestInfoShouldNotAddSpacesBetweenStrings(t *testing.T) {
-	LogAndAssertJSON(t, func(log *Logger) {
-		log.Info("test", "test")
-	}, func(fields Fields) {
-		assert.Equal(t, "testtest", fields["msg"])
-	})
-}
-
-func TestWithFieldsShouldAllowAssignments(t *testing.T) {
-	var buffer bytes.Buffer
-	var fields Fields
-
-	logger := New()
-	logger.Out = &buffer
-	logger.Formatter = new(JSONFormatter)
-
-	localLog := logger.WithFields(Fields{
-		"key1": "value1",
-	})
-
-	localLog.WithField("key2", "value2").Info("test")
-	err := json.Unmarshal(buffer.Bytes(), &fields)
-	assert.Nil(t, err)
-
-	assert.Equal(t, "value2", fields["key2"])
-	assert.Equal(t, "value1", fields["key1"])
-
-	buffer = bytes.Buffer{}
-	fields = Fields{}
-	localLog.Info("test")
-	err = json.Unmarshal(buffer.Bytes(), &fields)
-	assert.Nil(t, err)
-
-	_, ok := fields["key2"]
-	assert.Equal(t, false, ok)
-	assert.Equal(t, "value1", fields["key1"])
-}
-
-func TestUserSuppliedFieldDoesNotOverwriteDefaults(t *testing.T) {
-	LogAndAssertJSON(t, func(log *Logger) {
-		log.WithField("msg", "hello").Info("test")
-	}, func(fields Fields) {
-		assert.Equal(t, "test", fields["msg"])
-	})
-}
-
-func TestUserSuppliedMsgFieldHasPrefix(t *testing.T) {
-	LogAndAssertJSON(t, func(log *Logger) {
-		log.WithField("msg", "hello").Info("test")
-	}, func(fields Fields) {
-		assert.Equal(t, "test", fields["msg"])
-		assert.Equal(t, "hello", fields["fields.msg"])
-	})
-}
-
-func TestUserSuppliedTimeFieldHasPrefix(t *testing.T) {
-	LogAndAssertJSON(t, func(log *Logger) {
-		log.WithField("time", "hello").Info("test")
-	}, func(fields Fields) {
-		assert.Equal(t, "hello", fields["fields.time"])
-	})
-}
-
-func TestUserSuppliedLevelFieldHasPrefix(t *testing.T) {
-	LogAndAssertJSON(t, func(log *Logger) {
-		log.WithField("level", 1).Info("test")
-	}, func(fields Fields) {
-		assert.Equal(t, "info", fields["level"])
-		assert.Equal(t, 1.0, fields["fields.level"]) // JSON has floats only
-	})
-}
-
-func TestDefaultFieldsAreNotPrefixed(t *testing.T) {
-	LogAndAssertText(t, func(log *Logger) {
-		ll := log.WithField("herp", "derp")
-		ll.Info("hello")
-		ll.Info("bye")
-	}, func(fields map[string]string) {
-		for _, fieldName := range []string{"fields.level", "fields.time", "fields.msg"} {
-			if _, ok := fields[fieldName]; ok {
-				t.Fatalf("should not have prefixed %q: %v", fieldName, fields)
-			}
-		}
-	})
-}
-
-func TestWithTimeShouldOverrideTime(t *testing.T) {
-	now := time.Now().Add(24 * time.Hour)
-
-	LogAndAssertJSON(t, func(log *Logger) {
-		log.WithTime(now).Info("foobar")
-	}, func(fields Fields) {
-		assert.Equal(t, fields["time"], now.Format(time.RFC3339))
-	})
-}
-
-func TestWithTimeShouldNotOverrideFields(t *testing.T) {
-	now := time.Now().Add(24 * time.Hour)
-
-	LogAndAssertJSON(t, func(log *Logger) {
-		log.WithField("herp", "derp").WithTime(now).Info("blah")
-	}, func(fields Fields) {
-		assert.Equal(t, fields["time"], now.Format(time.RFC3339))
-		assert.Equal(t, fields["herp"], "derp")
-	})
-}
-
-func TestWithFieldShouldNotOverrideTime(t *testing.T) {
-	now := time.Now().Add(24 * time.Hour)
-
-	LogAndAssertJSON(t, func(log *Logger) {
-		log.WithTime(now).WithField("herp", "derp").Info("blah")
-	}, func(fields Fields) {
-		assert.Equal(t, fields["time"], now.Format(time.RFC3339))
-		assert.Equal(t, fields["herp"], "derp")
-	})
-}
-
-func TestTimeOverrideMultipleLogs(t *testing.T) {
-	var buffer bytes.Buffer
-	var firstFields, secondFields Fields
-
-	logger := New()
-	logger.Out = &buffer
-	formatter := new(JSONFormatter)
-	formatter.TimestampFormat = time.StampMilli
-	logger.Formatter = formatter
-
-	llog := logger.WithField("herp", "derp")
-	llog.Info("foo")
-
-	err := json.Unmarshal(buffer.Bytes(), &firstFields)
-	assert.NoError(t, err, "should have decoded first message")
-
-	buffer.Reset()
-
-	time.Sleep(10 * time.Millisecond)
-	llog.Info("bar")
-
-	err = json.Unmarshal(buffer.Bytes(), &secondFields)
-	assert.NoError(t, err, "should have decoded second message")
-
-	assert.NotEqual(t, firstFields["time"], secondFields["time"], "timestamps should not be equal")
-}
-
-func TestDoubleLoggingDoesntPrefixPreviousFields(t *testing.T) {
-
-	var buffer bytes.Buffer
-	var fields Fields
-
-	logger := New()
-	logger.Out = &buffer
-	logger.Formatter = new(JSONFormatter)
-
-	llog := logger.WithField("context", "eating raw fish")
-
-	llog.Info("looks delicious")
-
-	err := json.Unmarshal(buffer.Bytes(), &fields)
-	assert.NoError(t, err, "should have decoded first message")
-	assert.Equal(t, len(fields), 4, "should only have msg/time/level/context fields")
-	assert.Equal(t, fields["msg"], "looks delicious")
-	assert.Equal(t, fields["context"], "eating raw fish")
-
-	buffer.Reset()
-
-	llog.Warn("omg it is!")
-
-	err = json.Unmarshal(buffer.Bytes(), &fields)
-	assert.NoError(t, err, "should have decoded second message")
-	assert.Equal(t, len(fields), 4, "should only have msg/time/level/context fields")
-	assert.Equal(t, "omg it is!", fields["msg"])
-	assert.Equal(t, "eating raw fish", fields["context"])
-	assert.Nil(t, fields["fields.msg"], "should not have prefixed previous `msg` entry")
-
-}
-
-func TestNestedLoggingReportsCorrectCaller(t *testing.T) {
-	var buffer bytes.Buffer
-	var fields Fields
-
-	logger := New()
-	logger.Out = &buffer
-	logger.Formatter = new(JSONFormatter)
-	logger.ReportCaller = true
-
-	llog := logger.WithField("context", "eating raw fish")
-
-	llog.Info("looks delicious")
-
-	err := json.Unmarshal(buffer.Bytes(), &fields)
-	require.NoError(t, err, "should have decoded first message")
-	assert.Equal(t, 6, len(fields), "should have msg/time/level/func/context fields")
-	assert.Equal(t, "looks delicious", fields["msg"])
-	assert.Equal(t, "eating raw fish", fields["context"])
-	assert.Equal(t,
-		"github.com/sirupsen/logrus_test.TestNestedLoggingReportsCorrectCaller", fields["func"])
-	cwd, err := os.Getwd()
-	require.NoError(t, err)
-	assert.Equal(t, filepath.ToSlash(cwd+"/logrus_test.go:340"), filepath.ToSlash(fields["file"].(string)))
-
-	buffer.Reset()
-
-	logger.WithFields(Fields{
-		"Clyde": "Stubblefield",
-	}).WithFields(Fields{
-		"Jab'o": "Starks",
-	}).WithFields(Fields{
-		"uri": "https://www.youtube.com/watch?v=V5DTznu-9v0",
-	}).WithFields(Fields{
-		"func": "y drummer",
-	}).WithFields(Fields{
-		"James": "Brown",
-	}).Print("The hardest workin' man in show business")
-
-	err = json.Unmarshal(buffer.Bytes(), &fields)
-	assert.NoError(t, err, "should have decoded second message")
-	assert.Equal(t, 11, len(fields), "should have all builtin fields plus foo,bar,baz,...")
-	assert.Equal(t, "Stubblefield", fields["Clyde"])
-	assert.Equal(t, "Starks", fields["Jab'o"])
-	assert.Equal(t, "https://www.youtube.com/watch?v=V5DTznu-9v0", fields["uri"])
-	assert.Equal(t, "y drummer", fields["fields.func"])
-	assert.Equal(t, "Brown", fields["James"])
-	assert.Equal(t, "The hardest workin' man in show business", fields["msg"])
-	assert.Nil(t, fields["fields.msg"], "should not have prefixed previous `msg` entry")
-	assert.Equal(t,
-		"github.com/sirupsen/logrus_test.TestNestedLoggingReportsCorrectCaller", fields["func"])
-	require.NoError(t, err)
-	assert.Equal(t, filepath.ToSlash(cwd+"/logrus_test.go:365"), filepath.ToSlash(fields["file"].(string)))
-
-	logger.ReportCaller = false // return to default value
-}
-
-func logLoop(iterations int, reportCaller bool) {
-	var buffer bytes.Buffer
-
-	logger := New()
-	logger.Out = &buffer
-	logger.Formatter = new(JSONFormatter)
-	logger.ReportCaller = reportCaller
-
-	for i := 0; i < iterations; i++ {
-		logger.Infof("round %d of %d", i, iterations)
-	}
-}
-
-// Assertions for upper bounds to reporting overhead
-func TestCallerReportingOverhead(t *testing.T) {
-	iterations := 5000
-	before := time.Now()
-	logLoop(iterations, false)
-	during := time.Now()
-	logLoop(iterations, true)
-	after := time.Now()
-
-	elapsedNotReporting := during.Sub(before).Nanoseconds()
-	elapsedReporting := after.Sub(during).Nanoseconds()
-
-	maxDelta := 1 * time.Second
-	assert.WithinDuration(t, during, before, maxDelta,
-		"%d log calls without caller name lookup takes less than %d second(s) (was %d nanoseconds)",
-		iterations, maxDelta.Seconds(), elapsedNotReporting)
-	assert.WithinDuration(t, after, during, maxDelta,
-		"%d log calls without caller name lookup takes less than %d second(s) (was %d nanoseconds)",
-		iterations, maxDelta.Seconds(), elapsedReporting)
-}
-
-// benchmarks for both with and without caller-function reporting
-func BenchmarkWithoutCallerTracing(b *testing.B) {
-	for i := 0; i < b.N; i++ {
-		logLoop(1000, false)
-	}
-}
-
-func BenchmarkWithCallerTracing(b *testing.B) {
-	for i := 0; i < b.N; i++ {
-		logLoop(1000, true)
-	}
-}
-
-func TestConvertLevelToString(t *testing.T) {
-	assert.Equal(t, "trace", TraceLevel.String())
-	assert.Equal(t, "debug", DebugLevel.String())
-	assert.Equal(t, "info", InfoLevel.String())
-	assert.Equal(t, "warning", WarnLevel.String())
-	assert.Equal(t, "error", ErrorLevel.String())
-	assert.Equal(t, "fatal", FatalLevel.String())
-	assert.Equal(t, "panic", PanicLevel.String())
-}
-
-func TestParseLevel(t *testing.T) {
-	l, err := ParseLevel("panic")
-	assert.Nil(t, err)
-	assert.Equal(t, PanicLevel, l)
-
-	l, err = ParseLevel("PANIC")
-	assert.Nil(t, err)
-	assert.Equal(t, PanicLevel, l)
-
-	l, err = ParseLevel("fatal")
-	assert.Nil(t, err)
-	assert.Equal(t, FatalLevel, l)
-
-	l, err = ParseLevel("FATAL")
-	assert.Nil(t, err)
-	assert.Equal(t, FatalLevel, l)
-
-	l, err = ParseLevel("error")
-	assert.Nil(t, err)
-	assert.Equal(t, ErrorLevel, l)
-
-	l, err = ParseLevel("ERROR")
-	assert.Nil(t, err)
-	assert.Equal(t, ErrorLevel, l)
-
-	l, err = ParseLevel("warn")
-	assert.Nil(t, err)
-	assert.Equal(t, WarnLevel, l)
-
-	l, err = ParseLevel("WARN")
-	assert.Nil(t, err)
-	assert.Equal(t, WarnLevel, l)
-
-	l, err = ParseLevel("warning")
-	assert.Nil(t, err)
-	assert.Equal(t, WarnLevel, l)
-
-	l, err = ParseLevel("WARNING")
-	assert.Nil(t, err)
-	assert.Equal(t, WarnLevel, l)
-
-	l, err = ParseLevel("info")
-	assert.Nil(t, err)
-	assert.Equal(t, InfoLevel, l)
-
-	l, err = ParseLevel("INFO")
-	assert.Nil(t, err)
-	assert.Equal(t, InfoLevel, l)
-
-	l, err = ParseLevel("debug")
-	assert.Nil(t, err)
-	assert.Equal(t, DebugLevel, l)
-
-	l, err = ParseLevel("DEBUG")
-	assert.Nil(t, err)
-	assert.Equal(t, DebugLevel, l)
-
-	l, err = ParseLevel("trace")
-	assert.Nil(t, err)
-	assert.Equal(t, TraceLevel, l)
-
-	l, err = ParseLevel("TRACE")
-	assert.Nil(t, err)
-	assert.Equal(t, TraceLevel, l)
-
-	l, err = ParseLevel("invalid")
-	assert.Equal(t, "not a valid logrus Level: \"invalid\"", err.Error())
-}
-
-func TestUnmarshalText(t *testing.T) {
-	var u Level
-	for _, level := range AllLevels {
-		t.Run(level.String(), func(t *testing.T) {
-			assert.NoError(t, u.UnmarshalText([]byte(level.String())))
-			assert.Equal(t, level, u)
-		})
-	}
-	t.Run("invalid", func(t *testing.T) {
-		assert.Error(t, u.UnmarshalText([]byte("invalid")))
-	})
-}
-
-func TestGetSetLevelRace(t *testing.T) {
-	wg := sync.WaitGroup{}
-	for i := 0; i < 100; i++ {
-		wg.Add(1)
-		go func(i int) {
-			defer wg.Done()
-			if i%2 == 0 {
-				SetLevel(InfoLevel)
-			} else {
-				GetLevel()
-			}
-		}(i)
-
-	}
-	wg.Wait()
-}
-
-func TestLoggingRace(t *testing.T) {
-	logger := New()
-
-	var wg sync.WaitGroup
-	wg.Add(100)
-
-	for i := 0; i < 100; i++ {
-		go func() {
-			logger.Info("info")
-			wg.Done()
-		}()
-	}
-	wg.Wait()
-}
-
-func TestLoggingRaceWithHooksOnEntry(t *testing.T) {
-	logger := New()
-	hook := new(ModifyHook)
-	logger.AddHook(hook)
-	entry := logger.WithField("context", "clue")
-
-	var wg sync.WaitGroup
-	wg.Add(100)
-
-	for i := 0; i < 100; i++ {
-		go func() {
-			entry.Info("info")
-			wg.Done()
-		}()
-	}
-	wg.Wait()
-}
-
-func TestReplaceHooks(t *testing.T) {
-	old, cur := &TestHook{}, &TestHook{}
-
-	logger := New()
-	logger.SetOutput(ioutil.Discard)
-	logger.AddHook(old)
-
-	hooks := make(LevelHooks)
-	hooks.Add(cur)
-	replaced := logger.ReplaceHooks(hooks)
-
-	logger.Info("test")
-
-	assert.Equal(t, old.Fired, false)
-	assert.Equal(t, cur.Fired, true)
-
-	logger.ReplaceHooks(replaced)
-	logger.Info("test")
-	assert.Equal(t, old.Fired, true)
-}
-
-// Compile test
-func TestLogrusInterfaces(t *testing.T) {
-	var buffer bytes.Buffer
-	// This verifies FieldLogger and Ext1FieldLogger work as designed.
-	// Please don't use them. Use Logger and Entry directly.
-	fn := func(xl Ext1FieldLogger) {
-		var l FieldLogger = xl
-		b := l.WithField("key", "value")
-		b.Debug("Test")
-	}
-	// test logger
-	logger := New()
-	logger.Out = &buffer
-	fn(logger)
-
-	// test Entry
-	e := logger.WithField("another", "value")
-	fn(e)
-}
-
-// Implements io.Writer using channels for synchronization, so we can wait on
-// the Entry.Writer goroutine to write in a non-racey way. This does assume that
-// there is a single call to Logger.Out for each message.
-type channelWriter chan []byte
-
-func (cw channelWriter) Write(p []byte) (int, error) {
-	cw <- p
-	return len(p), nil
-}
-
-func TestEntryWriter(t *testing.T) {
-	cw := channelWriter(make(chan []byte, 1))
-	log := New()
-	log.Out = cw
-	log.Formatter = new(JSONFormatter)
-	log.WithField("foo", "bar").WriterLevel(WarnLevel).Write([]byte("hello\n"))
-
-	bs := <-cw
-	var fields Fields
-	err := json.Unmarshal(bs, &fields)
-	assert.Nil(t, err)
-	assert.Equal(t, fields["foo"], "bar")
-	assert.Equal(t, fields["level"], "warning")
-}
-
-func TestLogLevelEnabled(t *testing.T) {
-	log := New()
-	log.SetLevel(PanicLevel)
-	assert.Equal(t, true, log.IsLevelEnabled(PanicLevel))
-	assert.Equal(t, false, log.IsLevelEnabled(FatalLevel))
-	assert.Equal(t, false, log.IsLevelEnabled(ErrorLevel))
-	assert.Equal(t, false, log.IsLevelEnabled(WarnLevel))
-	assert.Equal(t, false, log.IsLevelEnabled(InfoLevel))
-	assert.Equal(t, false, log.IsLevelEnabled(DebugLevel))
-	assert.Equal(t, false, log.IsLevelEnabled(TraceLevel))
-
-	log.SetLevel(FatalLevel)
-	assert.Equal(t, true, log.IsLevelEnabled(PanicLevel))
-	assert.Equal(t, true, log.IsLevelEnabled(FatalLevel))
-	assert.Equal(t, false, log.IsLevelEnabled(ErrorLevel))
-	assert.Equal(t, false, log.IsLevelEnabled(WarnLevel))
-	assert.Equal(t, false, log.IsLevelEnabled(InfoLevel))
-	assert.Equal(t, false, log.IsLevelEnabled(DebugLevel))
-	assert.Equal(t, false, log.IsLevelEnabled(TraceLevel))
-
-	log.SetLevel(ErrorLevel)
-	assert.Equal(t, true, log.IsLevelEnabled(PanicLevel))
-	assert.Equal(t, true, log.IsLevelEnabled(FatalLevel))
-	assert.Equal(t, true, log.IsLevelEnabled(ErrorLevel))
-	assert.Equal(t, false, log.IsLevelEnabled(WarnLevel))
-	assert.Equal(t, false, log.IsLevelEnabled(InfoLevel))
-	assert.Equal(t, false, log.IsLevelEnabled(DebugLevel))
-	assert.Equal(t, false, log.IsLevelEnabled(TraceLevel))
-
-	log.SetLevel(WarnLevel)
-	assert.Equal(t, true, log.IsLevelEnabled(PanicLevel))
-	assert.Equal(t, true, log.IsLevelEnabled(FatalLevel))
-	assert.Equal(t, true, log.IsLevelEnabled(ErrorLevel))
-	assert.Equal(t, true, log.IsLevelEnabled(WarnLevel))
-	assert.Equal(t, false, log.IsLevelEnabled(InfoLevel))
-	assert.Equal(t, false, log.IsLevelEnabled(DebugLevel))
-	assert.Equal(t, false, log.IsLevelEnabled(TraceLevel))
-
-	log.SetLevel(InfoLevel)
-	assert.Equal(t, true, log.IsLevelEnabled(PanicLevel))
-	assert.Equal(t, true, log.IsLevelEnabled(FatalLevel))
-	assert.Equal(t, true, log.IsLevelEnabled(ErrorLevel))
-	assert.Equal(t, true, log.IsLevelEnabled(WarnLevel))
-	assert.Equal(t, true, log.IsLevelEnabled(InfoLevel))
-	assert.Equal(t, false, log.IsLevelEnabled(DebugLevel))
-	assert.Equal(t, false, log.IsLevelEnabled(TraceLevel))
-
-	log.SetLevel(DebugLevel)
-	assert.Equal(t, true, log.IsLevelEnabled(PanicLevel))
-	assert.Equal(t, true, log.IsLevelEnabled(FatalLevel))
-	assert.Equal(t, true, log.IsLevelEnabled(ErrorLevel))
-	assert.Equal(t, true, log.IsLevelEnabled(WarnLevel))
-	assert.Equal(t, true, log.IsLevelEnabled(InfoLevel))
-	assert.Equal(t, true, log.IsLevelEnabled(DebugLevel))
-	assert.Equal(t, false, log.IsLevelEnabled(TraceLevel))
-
-	log.SetLevel(TraceLevel)
-	assert.Equal(t, true, log.IsLevelEnabled(PanicLevel))
-	assert.Equal(t, true, log.IsLevelEnabled(FatalLevel))
-	assert.Equal(t, true, log.IsLevelEnabled(ErrorLevel))
-	assert.Equal(t, true, log.IsLevelEnabled(WarnLevel))
-	assert.Equal(t, true, log.IsLevelEnabled(InfoLevel))
-	assert.Equal(t, true, log.IsLevelEnabled(DebugLevel))
-	assert.Equal(t, true, log.IsLevelEnabled(TraceLevel))
-}
-
-func TestReportCallerOnTextFormatter(t *testing.T) {
-	l := New()
-
-	l.Formatter.(*TextFormatter).ForceColors = true
-	l.Formatter.(*TextFormatter).DisableColors = false
-	l.WithFields(Fields{"func": "func", "file": "file"}).Info("test")
-
-	l.Formatter.(*TextFormatter).ForceColors = false
-	l.Formatter.(*TextFormatter).DisableColors = true
-	l.WithFields(Fields{"func": "func", "file": "file"}).Info("test")
-}
diff --git a/vendor/github.com/Sirupsen/logrus/terminal_check_notappengine.go b/vendor/github.com/Sirupsen/logrus/terminal_check_notappengine.go
deleted file mode 100644
index cf309d6..0000000
--- a/vendor/github.com/Sirupsen/logrus/terminal_check_notappengine.go
+++ /dev/null
@@ -1,19 +0,0 @@
-// +build !appengine,!js,!windows
-
-package logrus
-
-import (
-	"io"
-	"os"
-
-	"golang.org/x/crypto/ssh/terminal"
-)
-
-func checkIfTerminal(w io.Writer) bool {
-	switch v := w.(type) {
-	case *os.File:
-		return terminal.IsTerminal(int(v.Fd()))
-	default:
-		return false
-	}
-}
diff --git a/vendor/github.com/Sirupsen/logrus/text_formatter.go b/vendor/github.com/Sirupsen/logrus/text_formatter.go
deleted file mode 100644
index 49ec92f..0000000
--- a/vendor/github.com/Sirupsen/logrus/text_formatter.go
+++ /dev/null
@@ -1,269 +0,0 @@
-package logrus
-
-import (
-	"bytes"
-	"fmt"
-	"os"
-	"sort"
-	"strings"
-	"sync"
-	"time"
-)
-
-const (
-	nocolor = 0
-	red     = 31
-	green   = 32
-	yellow  = 33
-	blue    = 36
-	gray    = 37
-)
-
-var (
-	baseTimestamp time.Time
-	emptyFieldMap FieldMap
-)
-
-func init() {
-	baseTimestamp = time.Now()
-}
-
-// TextFormatter formats logs into text
-type TextFormatter struct {
-	// Set to true to bypass checking for a TTY before outputting colors.
-	ForceColors bool
-
-	// Force disabling colors.
-	DisableColors bool
-
-	// Override coloring based on CLICOLOR and CLICOLOR_FORCE. - https://bixense.com/clicolors/
-	EnvironmentOverrideColors bool
-
-	// Disable timestamp logging. useful when output is redirected to logging
-	// system that already adds timestamps.
-	DisableTimestamp bool
-
-	// Enable logging the full timestamp when a TTY is attached instead of just
-	// the time passed since beginning of execution.
-	FullTimestamp bool
-
-	// TimestampFormat to use for display when a full timestamp is printed
-	TimestampFormat string
-
-	// The fields are sorted by default for a consistent output. For applications
-	// that log extremely frequently and don't use the JSON formatter this may not
-	// be desired.
-	DisableSorting bool
-
-	// The keys sorting function, when uninitialized it uses sort.Strings.
-	SortingFunc func([]string)
-
-	// Disables the truncation of the level text to 4 characters.
-	DisableLevelTruncation bool
-
-	// QuoteEmptyFields will wrap empty fields in quotes if true
-	QuoteEmptyFields bool
-
-	// Whether the logger's out is to a terminal
-	isTerminal bool
-
-	// FieldMap allows users to customize the names of keys for default fields.
-	// As an example:
-	// formatter := &TextFormatter{
-	//     FieldMap: FieldMap{
-	//         FieldKeyTime:  "@timestamp",
-	//         FieldKeyLevel: "@level",
-	//         FieldKeyMsg:   "@message"}}
-	FieldMap FieldMap
-
-	terminalInitOnce sync.Once
-}
-
-func (f *TextFormatter) init(entry *Entry) {
-	if entry.Logger != nil {
-		f.isTerminal = checkIfTerminal(entry.Logger.Out)
-
-		if f.isTerminal {
-			initTerminal(entry.Logger.Out)
-		}
-	}
-}
-
-func (f *TextFormatter) isColored() bool {
-	isColored := f.ForceColors || f.isTerminal
-
-	if f.EnvironmentOverrideColors {
-		if force, ok := os.LookupEnv("CLICOLOR_FORCE"); ok && force != "0" {
-			isColored = true
-		} else if ok && force == "0" {
-			isColored = false
-		} else if os.Getenv("CLICOLOR") == "0" {
-			isColored = false
-		}
-	}
-
-	return isColored && !f.DisableColors
-}
-
-// Format renders a single log entry
-func (f *TextFormatter) Format(entry *Entry) ([]byte, error) {
-	prefixFieldClashes(entry.Data, f.FieldMap, entry.HasCaller())
-
-	keys := make([]string, 0, len(entry.Data))
-	for k := range entry.Data {
-		keys = append(keys, k)
-	}
-
-	fixedKeys := make([]string, 0, 4+len(entry.Data))
-	if !f.DisableTimestamp {
-		fixedKeys = append(fixedKeys, f.FieldMap.resolve(FieldKeyTime))
-	}
-	fixedKeys = append(fixedKeys, f.FieldMap.resolve(FieldKeyLevel))
-	if entry.Message != "" {
-		fixedKeys = append(fixedKeys, f.FieldMap.resolve(FieldKeyMsg))
-	}
-	if entry.err != "" {
-		fixedKeys = append(fixedKeys, f.FieldMap.resolve(FieldKeyLogrusError))
-	}
-	if entry.HasCaller() {
-		fixedKeys = append(fixedKeys,
-			f.FieldMap.resolve(FieldKeyFunc), f.FieldMap.resolve(FieldKeyFile))
-	}
-
-	if !f.DisableSorting {
-		if f.SortingFunc == nil {
-			sort.Strings(keys)
-			fixedKeys = append(fixedKeys, keys...)
-		} else {
-			if !f.isColored() {
-				fixedKeys = append(fixedKeys, keys...)
-				f.SortingFunc(fixedKeys)
-			} else {
-				f.SortingFunc(keys)
-			}
-		}
-	} else {
-		fixedKeys = append(fixedKeys, keys...)
-	}
-
-	var b *bytes.Buffer
-	if entry.Buffer != nil {
-		b = entry.Buffer
-	} else {
-		b = &bytes.Buffer{}
-	}
-
-	f.terminalInitOnce.Do(func() { f.init(entry) })
-
-	timestampFormat := f.TimestampFormat
-	if timestampFormat == "" {
-		timestampFormat = defaultTimestampFormat
-	}
-	if f.isColored() {
-		f.printColored(b, entry, keys, timestampFormat)
-	} else {
-		for _, key := range fixedKeys {
-			var value interface{}
-			switch {
-			case key == f.FieldMap.resolve(FieldKeyTime):
-				value = entry.Time.Format(timestampFormat)
-			case key == f.FieldMap.resolve(FieldKeyLevel):
-				value = entry.Level.String()
-			case key == f.FieldMap.resolve(FieldKeyMsg):
-				value = entry.Message
-			case key == f.FieldMap.resolve(FieldKeyLogrusError):
-				value = entry.err
-			case key == f.FieldMap.resolve(FieldKeyFunc) && entry.HasCaller():
-				value = entry.Caller.Function
-			case key == f.FieldMap.resolve(FieldKeyFile) && entry.HasCaller():
-				value = fmt.Sprintf("%s:%d", entry.Caller.File, entry.Caller.Line)
-			default:
-				value = entry.Data[key]
-			}
-			f.appendKeyValue(b, key, value)
-		}
-	}
-
-	b.WriteByte('\n')
-	return b.Bytes(), nil
-}
-
-func (f *TextFormatter) printColored(b *bytes.Buffer, entry *Entry, keys []string, timestampFormat string) {
-	var levelColor int
-	switch entry.Level {
-	case DebugLevel, TraceLevel:
-		levelColor = gray
-	case WarnLevel:
-		levelColor = yellow
-	case ErrorLevel, FatalLevel, PanicLevel:
-		levelColor = red
-	default:
-		levelColor = blue
-	}
-
-	levelText := strings.ToUpper(entry.Level.String())
-	if !f.DisableLevelTruncation {
-		levelText = levelText[0:4]
-	}
-
-	// Remove a single newline if it already exists in the message to keep
-	// the behavior of logrus text_formatter the same as the stdlib log package
-	entry.Message = strings.TrimSuffix(entry.Message, "\n")
-
-	caller := ""
-
-	if entry.HasCaller() {
-		caller = fmt.Sprintf("%s:%d %s()",
-			entry.Caller.File, entry.Caller.Line, entry.Caller.Function)
-	}
-
-	if f.DisableTimestamp {
-		fmt.Fprintf(b, "\x1b[%dm%s\x1b[0m%s %-44s ", levelColor, levelText, caller, entry.Message)
-	} else if !f.FullTimestamp {
-		fmt.Fprintf(b, "\x1b[%dm%s\x1b[0m[%04d]%s %-44s ", levelColor, levelText, int(entry.Time.Sub(baseTimestamp)/time.Second), caller, entry.Message)
-	} else {
-		fmt.Fprintf(b, "\x1b[%dm%s\x1b[0m[%s]%s %-44s ", levelColor, levelText, entry.Time.Format(timestampFormat), caller, entry.Message)
-	}
-	for _, k := range keys {
-		v := entry.Data[k]
-		fmt.Fprintf(b, " \x1b[%dm%s\x1b[0m=", levelColor, k)
-		f.appendValue(b, v)
-	}
-}
-
-func (f *TextFormatter) needsQuoting(text string) bool {
-	if f.QuoteEmptyFields && len(text) == 0 {
-		return true
-	}
-	for _, ch := range text {
-		if !((ch >= 'a' && ch <= 'z') ||
-			(ch >= 'A' && ch <= 'Z') ||
-			(ch >= '0' && ch <= '9') ||
-			ch == '-' || ch == '.' || ch == '_' || ch == '/' || ch == '@' || ch == '^' || ch == '+') {
-			return true
-		}
-	}
-	return false
-}
-
-func (f *TextFormatter) appendKeyValue(b *bytes.Buffer, key string, value interface{}) {
-	if b.Len() > 0 {
-		b.WriteByte(' ')
-	}
-	b.WriteString(key)
-	b.WriteByte('=')
-	f.appendValue(b, value)
-}
-
-func (f *TextFormatter) appendValue(b *bytes.Buffer, value interface{}) {
-	stringVal, ok := value.(string)
-	if !ok {
-		stringVal = fmt.Sprint(value)
-	}
-
-	if !f.needsQuoting(stringVal) {
-		b.WriteString(stringVal)
-	} else {
-		b.WriteString(fmt.Sprintf("%q", stringVal))
-	}
-}
diff --git a/vendor/github.com/Sirupsen/logrus/text_formatter_test.go b/vendor/github.com/Sirupsen/logrus/text_formatter_test.go
deleted file mode 100644
index b0d3a91..0000000
--- a/vendor/github.com/Sirupsen/logrus/text_formatter_test.go
+++ /dev/null
@@ -1,480 +0,0 @@
-package logrus
-
-import (
-	"bytes"
-	"errors"
-	"fmt"
-	"os"
-	"sort"
-	"strings"
-	"testing"
-	"time"
-
-	"github.com/stretchr/testify/assert"
-	"github.com/stretchr/testify/require"
-)
-
-func TestFormatting(t *testing.T) {
-	tf := &TextFormatter{DisableColors: true}
-
-	testCases := []struct {
-		value    string
-		expected string
-	}{
-		{`foo`, "time=\"0001-01-01T00:00:00Z\" level=panic test=foo\n"},
-	}
-
-	for _, tc := range testCases {
-		b, _ := tf.Format(WithField("test", tc.value))
-
-		if string(b) != tc.expected {
-			t.Errorf("formatting expected for %q (result was %q instead of %q)", tc.value, string(b), tc.expected)
-		}
-	}
-}
-
-func TestQuoting(t *testing.T) {
-	tf := &TextFormatter{DisableColors: true}
-
-	checkQuoting := func(q bool, value interface{}) {
-		b, _ := tf.Format(WithField("test", value))
-		idx := bytes.Index(b, ([]byte)("test="))
-		cont := bytes.Contains(b[idx+5:], []byte("\""))
-		if cont != q {
-			if q {
-				t.Errorf("quoting expected for: %#v", value)
-			} else {
-				t.Errorf("quoting not expected for: %#v", value)
-			}
-		}
-	}
-
-	checkQuoting(false, "")
-	checkQuoting(false, "abcd")
-	checkQuoting(false, "v1.0")
-	checkQuoting(false, "1234567890")
-	checkQuoting(false, "/foobar")
-	checkQuoting(false, "foo_bar")
-	checkQuoting(false, "foo@bar")
-	checkQuoting(false, "foobar^")
-	checkQuoting(false, "+/-_^@f.oobar")
-	checkQuoting(true, "foobar$")
-	checkQuoting(true, "&foobar")
-	checkQuoting(true, "x y")
-	checkQuoting(true, "x,y")
-	checkQuoting(false, errors.New("invalid"))
-	checkQuoting(true, errors.New("invalid argument"))
-
-	// Test for quoting empty fields.
-	tf.QuoteEmptyFields = true
-	checkQuoting(true, "")
-	checkQuoting(false, "abcd")
-	checkQuoting(true, errors.New("invalid argument"))
-}
-
-func TestEscaping(t *testing.T) {
-	tf := &TextFormatter{DisableColors: true}
-
-	testCases := []struct {
-		value    string
-		expected string
-	}{
-		{`ba"r`, `ba\"r`},
-		{`ba'r`, `ba'r`},
-	}
-
-	for _, tc := range testCases {
-		b, _ := tf.Format(WithField("test", tc.value))
-		if !bytes.Contains(b, []byte(tc.expected)) {
-			t.Errorf("escaping expected for %q (result was %q instead of %q)", tc.value, string(b), tc.expected)
-		}
-	}
-}
-
-func TestEscaping_Interface(t *testing.T) {
-	tf := &TextFormatter{DisableColors: true}
-
-	ts := time.Now()
-
-	testCases := []struct {
-		value    interface{}
-		expected string
-	}{
-		{ts, fmt.Sprintf("\"%s\"", ts.String())},
-		{errors.New("error: something went wrong"), "\"error: something went wrong\""},
-	}
-
-	for _, tc := range testCases {
-		b, _ := tf.Format(WithField("test", tc.value))
-		if !bytes.Contains(b, []byte(tc.expected)) {
-			t.Errorf("escaping expected for %q (result was %q instead of %q)", tc.value, string(b), tc.expected)
-		}
-	}
-}
-
-func TestTimestampFormat(t *testing.T) {
-	checkTimeStr := func(format string) {
-		customFormatter := &TextFormatter{DisableColors: true, TimestampFormat: format}
-		customStr, _ := customFormatter.Format(WithField("test", "test"))
-		timeStart := bytes.Index(customStr, ([]byte)("time="))
-		timeEnd := bytes.Index(customStr, ([]byte)("level="))
-		timeStr := customStr[timeStart+5+len("\"") : timeEnd-1-len("\"")]
-		if format == "" {
-			format = time.RFC3339
-		}
-		_, e := time.Parse(format, (string)(timeStr))
-		if e != nil {
-			t.Errorf("time string \"%s\" did not match provided time format \"%s\": %s", timeStr, format, e)
-		}
-	}
-
-	checkTimeStr("2006-01-02T15:04:05.000000000Z07:00")
-	checkTimeStr("Mon Jan _2 15:04:05 2006")
-	checkTimeStr("")
-}
-
-func TestDisableLevelTruncation(t *testing.T) {
-	entry := &Entry{
-		Time:    time.Now(),
-		Message: "testing",
-	}
-	keys := []string{}
-	timestampFormat := "Mon Jan 2 15:04:05 -0700 MST 2006"
-	checkDisableTruncation := func(disabled bool, level Level) {
-		tf := &TextFormatter{DisableLevelTruncation: disabled}
-		var b bytes.Buffer
-		entry.Level = level
-		tf.printColored(&b, entry, keys, timestampFormat)
-		logLine := (&b).String()
-		if disabled {
-			expected := strings.ToUpper(level.String())
-			if !strings.Contains(logLine, expected) {
-				t.Errorf("level string expected to be %s when truncation disabled", expected)
-			}
-		} else {
-			expected := strings.ToUpper(level.String())
-			if len(level.String()) > 4 {
-				if strings.Contains(logLine, expected) {
-					t.Errorf("level string %s expected to be truncated to %s when truncation is enabled", expected, expected[0:4])
-				}
-			} else {
-				if !strings.Contains(logLine, expected) {
-					t.Errorf("level string expected to be %s when truncation is enabled and level string is below truncation threshold", expected)
-				}
-			}
-		}
-	}
-
-	checkDisableTruncation(true, DebugLevel)
-	checkDisableTruncation(true, InfoLevel)
-	checkDisableTruncation(false, ErrorLevel)
-	checkDisableTruncation(false, InfoLevel)
-}
-
-func TestDisableTimestampWithColoredOutput(t *testing.T) {
-	tf := &TextFormatter{DisableTimestamp: true, ForceColors: true}
-
-	b, _ := tf.Format(WithField("test", "test"))
-	if strings.Contains(string(b), "[0000]") {
-		t.Error("timestamp not expected when DisableTimestamp is true")
-	}
-}
-
-func TestNewlineBehavior(t *testing.T) {
-	tf := &TextFormatter{ForceColors: true}
-
-	// Ensure a single new line is removed as per stdlib log
-	e := NewEntry(StandardLogger())
-	e.Message = "test message\n"
-	b, _ := tf.Format(e)
-	if bytes.Contains(b, []byte("test message\n")) {
-		t.Error("first newline at end of Entry.Message resulted in unexpected 2 newlines in output. Expected newline to be removed.")
-	}
-
-	// Ensure a double new line is reduced to a single new line
-	e = NewEntry(StandardLogger())
-	e.Message = "test message\n\n"
-	b, _ = tf.Format(e)
-	if bytes.Contains(b, []byte("test message\n\n")) {
-		t.Error("Double newline at end of Entry.Message resulted in unexpected 2 newlines in output. Expected single newline")
-	}
-	if !bytes.Contains(b, []byte("test message\n")) {
-		t.Error("Double newline at end of Entry.Message did not result in a single newline after formatting")
-	}
-}
-
-func TestTextFormatterFieldMap(t *testing.T) {
-	formatter := &TextFormatter{
-		DisableColors: true,
-		FieldMap: FieldMap{
-			FieldKeyMsg:   "message",
-			FieldKeyLevel: "somelevel",
-			FieldKeyTime:  "timeywimey",
-		},
-	}
-
-	entry := &Entry{
-		Message: "oh hi",
-		Level:   WarnLevel,
-		Time:    time.Date(1981, time.February, 24, 4, 28, 3, 100, time.UTC),
-		Data: Fields{
-			"field1":     "f1",
-			"message":    "messagefield",
-			"somelevel":  "levelfield",
-			"timeywimey": "timeywimeyfield",
-		},
-	}
-
-	b, err := formatter.Format(entry)
-	if err != nil {
-		t.Fatal("Unable to format entry: ", err)
-	}
-
-	assert.Equal(t,
-		`timeywimey="1981-02-24T04:28:03Z" `+
-			`somelevel=warning `+
-			`message="oh hi" `+
-			`field1=f1 `+
-			`fields.message=messagefield `+
-			`fields.somelevel=levelfield `+
-			`fields.timeywimey=timeywimeyfield`+"\n",
-		string(b),
-		"Formatted output doesn't respect FieldMap")
-}
-
-func TestTextFormatterIsColored(t *testing.T) {
-	params := []struct {
-		name               string
-		expectedResult     bool
-		isTerminal         bool
-		disableColor       bool
-		forceColor         bool
-		envColor           bool
-		clicolorIsSet      bool
-		clicolorForceIsSet bool
-		clicolorVal        string
-		clicolorForceVal   string
-	}{
-		// Default values
-		{
-			name:               "testcase1",
-			expectedResult:     false,
-			isTerminal:         false,
-			disableColor:       false,
-			forceColor:         false,
-			envColor:           false,
-			clicolorIsSet:      false,
-			clicolorForceIsSet: false,
-		},
-		// Output on terminal
-		{
-			name:               "testcase2",
-			expectedResult:     true,
-			isTerminal:         true,
-			disableColor:       false,
-			forceColor:         false,
-			envColor:           false,
-			clicolorIsSet:      false,
-			clicolorForceIsSet: false,
-		},
-		// Output on terminal with color disabled
-		{
-			name:               "testcase3",
-			expectedResult:     false,
-			isTerminal:         true,
-			disableColor:       true,
-			forceColor:         false,
-			envColor:           false,
-			clicolorIsSet:      false,
-			clicolorForceIsSet: false,
-		},
-		// Output not on terminal with color disabled
-		{
-			name:               "testcase4",
-			expectedResult:     false,
-			isTerminal:         false,
-			disableColor:       true,
-			forceColor:         false,
-			envColor:           false,
-			clicolorIsSet:      false,
-			clicolorForceIsSet: false,
-		},
-		// Output not on terminal with color forced
-		{
-			name:               "testcase5",
-			expectedResult:     true,
-			isTerminal:         false,
-			disableColor:       false,
-			forceColor:         true,
-			envColor:           false,
-			clicolorIsSet:      false,
-			clicolorForceIsSet: false,
-		},
-		// Output on terminal with clicolor set to "0"
-		{
-			name:               "testcase6",
-			expectedResult:     false,
-			isTerminal:         true,
-			disableColor:       false,
-			forceColor:         false,
-			envColor:           true,
-			clicolorIsSet:      true,
-			clicolorForceIsSet: false,
-			clicolorVal:        "0",
-		},
-		// Output on terminal with clicolor set to "1"
-		{
-			name:               "testcase7",
-			expectedResult:     true,
-			isTerminal:         true,
-			disableColor:       false,
-			forceColor:         false,
-			envColor:           true,
-			clicolorIsSet:      true,
-			clicolorForceIsSet: false,
-			clicolorVal:        "1",
-		},
-		// Output not on terminal with clicolor set to "0"
-		{
-			name:               "testcase8",
-			expectedResult:     false,
-			isTerminal:         false,
-			disableColor:       false,
-			forceColor:         false,
-			envColor:           true,
-			clicolorIsSet:      true,
-			clicolorForceIsSet: false,
-			clicolorVal:        "0",
-		},
-		// Output not on terminal with clicolor set to "1"
-		{
-			name:               "testcase9",
-			expectedResult:     false,
-			isTerminal:         false,
-			disableColor:       false,
-			forceColor:         false,
-			envColor:           true,
-			clicolorIsSet:      true,
-			clicolorForceIsSet: false,
-			clicolorVal:        "1",
-		},
-		// Output not on terminal with clicolor set to "1" and force color
-		{
-			name:               "testcase10",
-			expectedResult:     true,
-			isTerminal:         false,
-			disableColor:       false,
-			forceColor:         true,
-			envColor:           true,
-			clicolorIsSet:      true,
-			clicolorForceIsSet: false,
-			clicolorVal:        "1",
-		},
-		// Output not on terminal with clicolor set to "0" and force color
-		{
-			name:               "testcase11",
-			expectedResult:     false,
-			isTerminal:         false,
-			disableColor:       false,
-			forceColor:         true,
-			envColor:           true,
-			clicolorIsSet:      true,
-			clicolorForceIsSet: false,
-			clicolorVal:        "0",
-		},
-		// Output not on terminal with clicolor_force set to "1"
-		{
-			name:               "testcase12",
-			expectedResult:     true,
-			isTerminal:         false,
-			disableColor:       false,
-			forceColor:         false,
-			envColor:           true,
-			clicolorIsSet:      false,
-			clicolorForceIsSet: true,
-			clicolorForceVal:   "1",
-		},
-		// Output not on terminal with clicolor_force set to "0"
-		{
-			name:               "testcase13",
-			expectedResult:     false,
-			isTerminal:         false,
-			disableColor:       false,
-			forceColor:         false,
-			envColor:           true,
-			clicolorIsSet:      false,
-			clicolorForceIsSet: true,
-			clicolorForceVal:   "0",
-		},
-		// Output on terminal with clicolor_force set to "0"
-		{
-			name:               "testcase14",
-			expectedResult:     false,
-			isTerminal:         true,
-			disableColor:       false,
-			forceColor:         false,
-			envColor:           true,
-			clicolorIsSet:      false,
-			clicolorForceIsSet: true,
-			clicolorForceVal:   "0",
-		},
-	}
-
-	cleanenv := func() {
-		os.Unsetenv("CLICOLOR")
-		os.Unsetenv("CLICOLOR_FORCE")
-	}
-
-	defer cleanenv()
-
-	for _, val := range params {
-		t.Run("textformatter_"+val.name, func(subT *testing.T) {
-			tf := TextFormatter{
-				isTerminal:                val.isTerminal,
-				DisableColors:             val.disableColor,
-				ForceColors:               val.forceColor,
-				EnvironmentOverrideColors: val.envColor,
-			}
-			cleanenv()
-			if val.clicolorIsSet {
-				os.Setenv("CLICOLOR", val.clicolorVal)
-			}
-			if val.clicolorForceIsSet {
-				os.Setenv("CLICOLOR_FORCE", val.clicolorForceVal)
-			}
-			res := tf.isColored()
-			assert.Equal(subT, val.expectedResult, res)
-		})
-	}
-}
-
-func TestCustomSorting(t *testing.T) {
-	formatter := &TextFormatter{
-		DisableColors: true,
-		SortingFunc: func(keys []string) {
-			sort.Slice(keys, func(i, j int) bool {
-				if keys[j] == "prefix" {
-					return false
-				}
-				if keys[i] == "prefix" {
-					return true
-				}
-				return strings.Compare(keys[i], keys[j]) == -1
-			})
-		},
-	}
-
-	entry := &Entry{
-		Message: "Testing custom sort function",
-		Time:    time.Now(),
-		Level:   InfoLevel,
-		Data: Fields{
-			"test":      "testvalue",
-			"prefix":    "the application prefix",
-			"blablabla": "blablabla",
-		},
-	}
-	b, err := formatter.Format(entry)
-	require.NoError(t, err)
-	require.True(t, strings.HasPrefix(string(b), "prefix="), "format output is %q", string(b))
-}
diff --git a/vendor/github.com/beorn7/perks/.gitignore b/vendor/github.com/beorn7/perks/.gitignore
deleted file mode 100644
index 1bd9209..0000000
--- a/vendor/github.com/beorn7/perks/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-*.test
-*.prof
diff --git a/vendor/github.com/beorn7/perks/README.md b/vendor/github.com/beorn7/perks/README.md
deleted file mode 100644
index fc05777..0000000
--- a/vendor/github.com/beorn7/perks/README.md
+++ /dev/null
@@ -1,31 +0,0 @@
-# Perks for Go (golang.org)
-
-Perks contains the Go package quantile that computes approximate quantiles over
-an unbounded data stream within low memory and CPU bounds.
-
-For more information and examples, see:
-http://godoc.org/github.com/bmizerany/perks
-
-A very special thank you and shout out to Graham Cormode (Rutgers University),
-Flip Korn (AT&T Labs–Research), S. Muthukrishnan (Rutgers University), and
-Divesh Srivastava (AT&T Labs–Research) for their research and publication of
-[Effective Computation of Biased Quantiles over Data Streams](http://www.cs.rutgers.edu/~muthu/bquant.pdf)
-
-Thank you, also:
-* Armon Dadgar (@armon)
-* Andrew Gerrand (@nf)
-* Brad Fitzpatrick (@bradfitz)
-* Keith Rarick (@kr)
-
-FAQ:
-
-Q: Why not move the quantile package into the project root?
-A: I want to add more packages to perks later.
-
-Copyright (C) 2013 Blake Mizerany
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/vendor/github.com/beorn7/perks/histogram/bench_test.go b/vendor/github.com/beorn7/perks/histogram/bench_test.go
deleted file mode 100644
index 56c7e55..0000000
--- a/vendor/github.com/beorn7/perks/histogram/bench_test.go
+++ /dev/null
@@ -1,26 +0,0 @@
-package histogram
-
-import (
-	"math/rand"
-	"testing"
-)
-
-func BenchmarkInsert10Bins(b *testing.B) {
-	b.StopTimer()
-	h := New(10)
-	b.StartTimer()
-	for i := 0; i < b.N; i++ {
-		f := rand.ExpFloat64()
-		h.Insert(f)
-	}
-}
-
-func BenchmarkInsert100Bins(b *testing.B) {
-	b.StopTimer()
-	h := New(100)
-	b.StartTimer()
-	for i := 0; i < b.N; i++ {
-		f := rand.ExpFloat64()
-		h.Insert(f)
-	}
-}
diff --git a/vendor/github.com/beorn7/perks/histogram/histogram.go b/vendor/github.com/beorn7/perks/histogram/histogram.go
deleted file mode 100644
index bef05c7..0000000
--- a/vendor/github.com/beorn7/perks/histogram/histogram.go
+++ /dev/null
@@ -1,108 +0,0 @@
-// Package histogram provides a Go implementation of BigML's histogram package
-// for Clojure/Java. It is currently experimental.
-package histogram
-
-import (
-	"container/heap"
-	"math"
-	"sort"
-)
-
-type Bin struct {
-	Count int
-	Sum   float64
-}
-
-func (b *Bin) Update(x *Bin) {
-	b.Count += x.Count
-	b.Sum += x.Sum
-}
-
-func (b *Bin) Mean() float64 {
-	return b.Sum / float64(b.Count)
-}
-
-type Bins []*Bin
-
-func (bs Bins) Len() int           { return len(bs) }
-func (bs Bins) Less(i, j int) bool { return bs[i].Mean() < bs[j].Mean() }
-func (bs Bins) Swap(i, j int)      { bs[i], bs[j] = bs[j], bs[i] }
-
-func (bs *Bins) Push(x interface{}) {
-	*bs = append(*bs, x.(*Bin))
-}
-
-func (bs *Bins) Pop() interface{} {
-	return bs.remove(len(*bs) - 1)
-}
-
-func (bs *Bins) remove(n int) *Bin {
-	if n < 0 || len(*bs) < n {
-		return nil
-	}
-	x := (*bs)[n]
-	*bs = append((*bs)[:n], (*bs)[n+1:]...)
-	return x
-}
-
-type Histogram struct {
-	res *reservoir
-}
-
-func New(maxBins int) *Histogram {
-	return &Histogram{res: newReservoir(maxBins)}
-}
-
-func (h *Histogram) Insert(f float64) {
-	h.res.insert(&Bin{1, f})
-	h.res.compress()
-}
-
-func (h *Histogram) Bins() Bins {
-	return h.res.bins
-}
-
-type reservoir struct {
-	n       int
-	maxBins int
-	bins    Bins
-}
-
-func newReservoir(maxBins int) *reservoir {
-	return &reservoir{maxBins: maxBins}
-}
-
-func (r *reservoir) insert(bin *Bin) {
-	r.n += bin.Count
-	i := sort.Search(len(r.bins), func(i int) bool {
-		return r.bins[i].Mean() >= bin.Mean()
-	})
-	if i < 0 || i == r.bins.Len() {
-		// TODO(blake): Maybe use an .insert(i, bin) instead of
-		// performing the extra work of a heap.Push.
-		heap.Push(&r.bins, bin)
-		return
-	}
-	r.bins[i].Update(bin)
-}
-
-func (r *reservoir) compress() {
-	for r.bins.Len() > r.maxBins {
-		minGapIndex := -1
-		minGap := math.MaxFloat64
-		for i := 0; i < r.bins.Len()-1; i++ {
-			gap := gapWeight(r.bins[i], r.bins[i+1])
-			if minGap > gap {
-				minGap = gap
-				minGapIndex = i
-			}
-		}
-		prev := r.bins[minGapIndex]
-		next := r.bins.remove(minGapIndex + 1)
-		prev.Update(next)
-	}
-}
-
-func gapWeight(prev, next *Bin) float64 {
-	return next.Mean() - prev.Mean()
-}
diff --git a/vendor/github.com/beorn7/perks/histogram/histogram_test.go b/vendor/github.com/beorn7/perks/histogram/histogram_test.go
deleted file mode 100644
index 0575ebe..0000000
--- a/vendor/github.com/beorn7/perks/histogram/histogram_test.go
+++ /dev/null
@@ -1,38 +0,0 @@
-package histogram
-
-import (
-	"math/rand"
-	"testing"
-)
-
-func TestHistogram(t *testing.T) {
-	const numPoints = 1e6
-	const maxBins = 3
-
-	h := New(maxBins)
-	for i := 0; i < numPoints; i++ {
-		f := rand.ExpFloat64()
-		h.Insert(f)
-	}
-
-	bins := h.Bins()
-	if g := len(bins); g > maxBins {
-		t.Fatalf("got %d bins, wanted <= %d", g, maxBins)
-	}
-
-	for _, b := range bins {
-		t.Logf("%+v", b)
-	}
-
-	if g := count(h.Bins()); g != numPoints {
-		t.Fatalf("binned %d points, wanted %d", g, numPoints)
-	}
-}
-
-func count(bins Bins) int {
-	binCounts := 0
-	for _, b := range bins {
-		binCounts += b.Count
-	}
-	return binCounts
-}
diff --git a/vendor/github.com/beorn7/perks/quantile/bench_test.go b/vendor/github.com/beorn7/perks/quantile/bench_test.go
deleted file mode 100644
index 0bd0e4e..0000000
--- a/vendor/github.com/beorn7/perks/quantile/bench_test.go
+++ /dev/null
@@ -1,63 +0,0 @@
-package quantile
-
-import (
-	"testing"
-)
-
-func BenchmarkInsertTargeted(b *testing.B) {
-	b.ReportAllocs()
-
-	s := NewTargeted(Targets)
-	b.ResetTimer()
-	for i := float64(0); i < float64(b.N); i++ {
-		s.Insert(i)
-	}
-}
-
-func BenchmarkInsertTargetedSmallEpsilon(b *testing.B) {
-	s := NewTargeted(TargetsSmallEpsilon)
-	b.ResetTimer()
-	for i := float64(0); i < float64(b.N); i++ {
-		s.Insert(i)
-	}
-}
-
-func BenchmarkInsertBiased(b *testing.B) {
-	s := NewLowBiased(0.01)
-	b.ResetTimer()
-	for i := float64(0); i < float64(b.N); i++ {
-		s.Insert(i)
-	}
-}
-
-func BenchmarkInsertBiasedSmallEpsilon(b *testing.B) {
-	s := NewLowBiased(0.0001)
-	b.ResetTimer()
-	for i := float64(0); i < float64(b.N); i++ {
-		s.Insert(i)
-	}
-}
-
-func BenchmarkQuery(b *testing.B) {
-	s := NewTargeted(Targets)
-	for i := float64(0); i < 1e6; i++ {
-		s.Insert(i)
-	}
-	b.ResetTimer()
-	n := float64(b.N)
-	for i := float64(0); i < n; i++ {
-		s.Query(i / n)
-	}
-}
-
-func BenchmarkQuerySmallEpsilon(b *testing.B) {
-	s := NewTargeted(TargetsSmallEpsilon)
-	for i := float64(0); i < 1e6; i++ {
-		s.Insert(i)
-	}
-	b.ResetTimer()
-	n := float64(b.N)
-	for i := float64(0); i < n; i++ {
-		s.Query(i / n)
-	}
-}
diff --git a/vendor/github.com/beorn7/perks/quantile/example_test.go b/vendor/github.com/beorn7/perks/quantile/example_test.go
deleted file mode 100644
index ab3293a..0000000
--- a/vendor/github.com/beorn7/perks/quantile/example_test.go
+++ /dev/null
@@ -1,121 +0,0 @@
-// +build go1.1
-
-package quantile_test
-
-import (
-	"bufio"
-	"fmt"
-	"log"
-	"os"
-	"strconv"
-	"time"
-
-	"github.com/beorn7/perks/quantile"
-)
-
-func Example_simple() {
-	ch := make(chan float64)
-	go sendFloats(ch)
-
-	// Compute the 50th, 90th, and 99th percentile.
-	q := quantile.NewTargeted(map[float64]float64{
-		0.50: 0.005,
-		0.90: 0.001,
-		0.99: 0.0001,
-	})
-	for v := range ch {
-		q.Insert(v)
-	}
-
-	fmt.Println("perc50:", q.Query(0.50))
-	fmt.Println("perc90:", q.Query(0.90))
-	fmt.Println("perc99:", q.Query(0.99))
-	fmt.Println("count:", q.Count())
-	// Output:
-	// perc50: 5
-	// perc90: 16
-	// perc99: 223
-	// count: 2388
-}
-
-func Example_mergeMultipleStreams() {
-	// Scenario:
-	// We have multiple database shards. On each shard, there is a process
-	// collecting query response times from the database logs and inserting
-	// them into a Stream (created via NewTargeted(0.90)), much like the
-	// Simple example. These processes expose a network interface for us to
-	// ask them to serialize and send us the results of their
-	// Stream.Samples so we may Merge and Query them.
-	//
-	// NOTES:
-	// * These sample sets are small, allowing us to get them
-	// across the network much faster than sending the entire list of data
-	// points.
-	//
-	// * For this to work correctly, we must supply the same quantiles
-	// a priori the process collecting the samples supplied to NewTargeted,
-	// even if we do not plan to query them all here.
-	ch := make(chan quantile.Samples)
-	getDBQuerySamples(ch)
-	q := quantile.NewTargeted(map[float64]float64{0.90: 0.001})
-	for samples := range ch {
-		q.Merge(samples)
-	}
-	fmt.Println("perc90:", q.Query(0.90))
-}
-
-func Example_window() {
-	// Scenario: We want the 90th, 95th, and 99th percentiles for each
-	// minute.
-
-	ch := make(chan float64)
-	go sendStreamValues(ch)
-
-	tick := time.NewTicker(1 * time.Minute)
-	q := quantile.NewTargeted(map[float64]float64{
-		0.90: 0.001,
-		0.95: 0.0005,
-		0.99: 0.0001,
-	})
-	for {
-		select {
-		case t := <-tick.C:
-			flushToDB(t, q.Samples())
-			q.Reset()
-		case v := <-ch: