From 96b4b895559d5b1e6c41865fc7066cac02ca8212 Mon Sep 17 00:00:00 2001 From: Bob Callaway <bobcallaway@users.noreply.github.com> Date: Thu, 28 Jan 2021 10:38:10 -0500 Subject: [PATCH] initial support for RPMs (#130) --- cmd/cli/app/pflags.go | 120 +++++- cmd/cli/app/pflags_test.go | 87 ++++- cmd/cli/app/upload.go | 21 +- cmd/cli/app/verify.go | 19 +- cmd/server/app/serve.go | 3 + go.mod | 6 +- go.sum | 54 +-- openapi.yaml | 17 + pkg/generated/models/proposed_entry.go | 6 + pkg/generated/models/rpm.go | 200 ++++++++++ pkg/generated/models/rpm_schema.go | 30 ++ pkg/generated/models/rpm_v001_schema.go | 369 ++++++++++++++++++ pkg/generated/restapi/embedded_spec.go | 272 ++++++++++++++ pkg/pki/pgp/pgp.go | 9 + pkg/types/rekord/rekord.go | 52 +-- pkg/types/rekord/rekord_test.go | 6 +- pkg/types/rpm/rpm.go | 66 ++++ pkg/types/rpm/rpm_schema.json | 12 + pkg/types/rpm/rpm_test.go | 120 ++++++ pkg/types/rpm/v0.0.1/entry.go | 394 ++++++++++++++++++++ pkg/types/rpm/v0.0.1/entry_test.go | 387 +++++++++++++++++++ pkg/types/rpm/v0.0.1/rpm_v0_0_1_schema.json | 86 +++++ pkg/util/types.go | 69 ++++ tests/e2e_test.go | 30 +- tests/pgp.go | 17 +- tests/rpm.go | 77 ++++ tests/rpm.json | 1 + tests/test.rpm | Bin 0 -> 166888 bytes tests/test_rpm_public_key.key | 30 ++ tests/util.go | 14 +- 30 files changed, 2435 insertions(+), 139 deletions(-) create mode 100644 pkg/generated/models/rpm.go create mode 100644 pkg/generated/models/rpm_schema.go create mode 100644 pkg/generated/models/rpm_v001_schema.go create mode 100644 pkg/types/rpm/rpm.go create mode 100644 pkg/types/rpm/rpm_schema.json create mode 100644 pkg/types/rpm/rpm_test.go create mode 100644 pkg/types/rpm/v0.0.1/entry.go create mode 100644 pkg/types/rpm/v0.0.1/entry_test.go create mode 100644 pkg/types/rpm/v0.0.1/rpm_v0_0_1_schema.json create mode 100644 pkg/util/types.go create mode 100644 tests/rpm.go create mode 100644 tests/rpm.json create mode 100644 tests/test.rpm create mode 100644 tests/test_rpm_public_key.key diff --git a/cmd/cli/app/pflags.go b/cmd/cli/app/pflags.go index 4d7ced9..d39cb14 100644 --- a/cmd/cli/app/pflags.go +++ b/cmd/cli/app/pflags.go @@ -32,6 +32,7 @@ import ( "github.com/go-openapi/swag" "github.com/projectrekor/rekor/pkg/generated/models" rekord_v001 "github.com/projectrekor/rekor/pkg/types/rekord/v0.0.1" + rpm_v001 "github.com/projectrekor/rekor/pkg/types/rpm/v0.0.1" "github.com/spf13/cobra" "github.com/spf13/viper" ) @@ -66,13 +67,14 @@ func validateSearchPFlags() error { func addArtifactPFlags(cmd *cobra.Command) error { cmd.Flags().Var(&fileOrURLFlag{}, "signature", "path or URL to detached signature file") + cmd.Flags().Var(&typeFlag{value: "rekord"}, "type", "type of entry") cmd.Flags().Var(&pkiFormatFlag{value: "pgp"}, "pki-format", "format of the signature and/or public key") cmd.Flags().Var(&fileOrURLFlag{}, "public-key", "path or URL to public key file") cmd.Flags().Var(&fileOrURLFlag{}, "artifact", "path or URL to artifact file") - cmd.Flags().Var(&fileOrURLFlag{}, "rekord", "path or URL to Rekor rekord file") + cmd.Flags().Var(&fileOrURLFlag{}, "entry", "path or URL to pre-formatted entry file") cmd.Flags().Var(&shaFlag{}, "sha", "the sha of the artifact") return nil @@ -104,7 +106,8 @@ func validateArtifactPFlags(uuidValid, indexValid bool) error { } } // we will need artifact, public-key, signature, and potentially SHA - rekord := viper.GetString("rekord") + typeStr := viper.GetString("type") + entry := viper.GetString("entry") artifact := fileOrURLFlag{} artifactStr := viper.GetString("artifact") @@ -118,18 +121,18 @@ func validateArtifactPFlags(uuidValid, indexValid bool) error { publicKey := viper.GetString("public-key") sha := viper.GetString("sha") - if rekord == "" && artifact.String() == "" { + if entry == "" && artifact.String() == "" { if (uuidGiven && uuidValid) || (indexGiven && indexValid) { return nil } - return errors.New("either 'rekord' or 'artifact' must be specified") + return errors.New("either 'entry' or 'artifact' must be specified") } - if rekord == "" { + if entry == "" { if artifact.IsURL && sha == "" { return errors.New("a valid SHA hash must be specified when specifying a URL for --artifact") } - if signature == "" { + if signature == "" && typeStr == "rekord" { return errors.New("--signature is required when --artifact is used") } if publicKey == "" { @@ -140,12 +143,91 @@ func validateArtifactPFlags(uuidValid, indexValid bool) error { return nil } +func CreateRpmFromPFlags() (models.ProposedEntry, error) { + //TODO: how to select version of item to create + returnVal := models.Rpm{} + re := new(rpm_v001.V001Entry) + + rpm := viper.GetString("entry") + if rpm != "" { + var rpmBytes []byte + rpmURL, err := url.Parse(rpm) + if err == nil && rpmURL.IsAbs() { + /* #nosec G107 */ + rpmResp, err := http.Get(rpm) + if err != nil { + return nil, fmt.Errorf("error fetching 'rpm': %w", err) + } + defer rpmResp.Body.Close() + rpmBytes, err = ioutil.ReadAll(rpmResp.Body) + if err != nil { + return nil, fmt.Errorf("error fetching 'rpm': %w", err) + } + } else { + rpmBytes, err = ioutil.ReadFile(filepath.Clean(rpm)) + if err != nil { + return nil, fmt.Errorf("error processing 'rpm' file: %w", err) + } + } + if err := json.Unmarshal(rpmBytes, &returnVal); err != nil { + return nil, fmt.Errorf("error parsing rpm file: %w", err) + } + } else { + // we will need artifact, public-key, signature, and potentially SHA + re.RPMModel = models.RpmV001Schema{} + re.RPMModel.Package = &models.RpmV001SchemaPackage{} + + artifact := viper.GetString("artifact") + dataURL, err := url.Parse(artifact) + if err == nil && dataURL.IsAbs() { + re.RPMModel.Package.URL = strfmt.URI(artifact) + re.RPMModel.Package.Hash = &models.RpmV001SchemaPackageHash{} + re.RPMModel.Package.Hash.Algorithm = swag.String(models.RpmV001SchemaPackageHashAlgorithmSha256) + re.RPMModel.Package.Hash.Value = swag.String(viper.GetString("sha")) + } else { + artifactBytes, err := ioutil.ReadFile(filepath.Clean(artifact)) + if err != nil { + return nil, fmt.Errorf("error reading artifact file: %w", err) + } + re.RPMModel.Package.Content = strfmt.Base64(artifactBytes) + } + + re.RPMModel.PublicKey = &models.RpmV001SchemaPublicKey{} + publicKey := viper.GetString("public-key") + keyURL, err := url.Parse(publicKey) + if err == nil && keyURL.IsAbs() { + re.RPMModel.PublicKey.URL = strfmt.URI(publicKey) + } else { + keyBytes, err := ioutil.ReadFile(filepath.Clean(publicKey)) + if err != nil { + return nil, fmt.Errorf("error reading public key file: %w", err) + } + re.RPMModel.PublicKey.Content = strfmt.Base64(keyBytes) + } + + if err := re.Validate(); err != nil { + return nil, err + } + + if re.HasExternalEntities() { + if err := re.FetchExternalEntities(context.Background()); err != nil { + return nil, fmt.Errorf("error retrieving external entities: %v", err) + } + } + + returnVal.APIVersion = swag.String(re.APIVersion()) + returnVal.Spec = re.RPMModel + } + + return &returnVal, nil +} + func CreateRekordFromPFlags() (models.ProposedEntry, error) { //TODO: how to select version of item to create returnVal := models.Rekord{} re := new(rekord_v001.V001Entry) - rekord := viper.GetString("rekord") + rekord := viper.GetString("entry") if rekord != "" { var rekordBytes []byte rekordURL, err := url.Parse(rekord) @@ -268,6 +350,30 @@ func (f *fileOrURLFlag) Type() string { return "fileOrURLFlag" } +type typeFlag struct { + value string +} + +func (t *typeFlag) Type() string { + return "typeFormat" +} + +func (t *typeFlag) String() string { + return t.value +} + +func (t *typeFlag) Set(s string) error { + set := map[string]struct{}{ + "rekord": {}, + "rpm": {}, + } + if _, ok := set[s]; ok { + t.value = s + return nil + } + return fmt.Errorf("value specified is invalid: [%s] supported values are: [rekord, rpm]", s) +} + type pkiFormatFlag struct { value string } diff --git a/cmd/cli/app/pflags_test.go b/cmd/cli/app/pflags_test.go index d18be1e..28b8f8c 100644 --- a/cmd/cli/app/pflags_test.go +++ b/cmd/cli/app/pflags_test.go @@ -23,6 +23,7 @@ import ( "net/http/httptest" "testing" + "github.com/projectrekor/rekor/pkg/generated/models" "github.com/spf13/viper" "github.com/spf13/cobra" @@ -31,7 +32,8 @@ import ( func TestArtifactPFlags(t *testing.T) { type test struct { caseDesc string - rekord string + typeStr string + entry string artifact string signature string publicKey string @@ -58,6 +60,12 @@ func TestArtifactPFlags(t *testing.T) { file, err = ioutil.ReadFile("../../../tests/test_public_key.key") case "/rekord": file, err = ioutil.ReadFile("../../../tests/rekor.json") + case "/rpmEntry": + file, err = ioutil.ReadFile("../../../tests/rpm.json") + case "/rpm": + file, err = ioutil.ReadFile("../../../tests/test.rpm") + case "/rpmPublicKey": + file, err = ioutil.ReadFile("../../../tests/test_rpm_public_key.key") case "/not_found": err = errors.New("file not found") } @@ -73,36 +81,72 @@ func TestArtifactPFlags(t *testing.T) { tests := []test{ { caseDesc: "valid rekord file", - rekord: "../../../tests/rekor.json", + entry: "../../../tests/rekor.json", expectParseSuccess: true, expectValidateSuccess: true, }, { caseDesc: "valid rekord URL", - rekord: testServer.URL + "/rekord", + entry: testServer.URL + "/rekord", expectParseSuccess: true, expectValidateSuccess: true, }, + { + caseDesc: "valid rekord file, wrong type", + typeStr: "rpm", + entry: "../../../tests/rekor.json", + expectParseSuccess: true, + expectValidateSuccess: false, + }, + { + caseDesc: "valid rpm file", + entry: "../../../tests/rpm.json", + typeStr: "rpm", + expectParseSuccess: true, + expectValidateSuccess: true, + }, + { + caseDesc: "valid rpm URL", + entry: testServer.URL + "/rpmEntry", + typeStr: "rpm", + expectParseSuccess: true, + expectValidateSuccess: true, + }, + { + caseDesc: "valid rpm file, wrong type", + typeStr: "rekord", + entry: "../../../tests/rpm.json", + expectParseSuccess: true, + expectValidateSuccess: false, + }, { caseDesc: "non-existant rekord file", - rekord: "../../../tests/not_there.json", + entry: "../../../tests/not_there.json", expectParseSuccess: false, expectValidateSuccess: false, }, { caseDesc: "non-existant rekord url", - rekord: testServer.URL + "/not_found", + entry: testServer.URL + "/not_found", expectParseSuccess: true, expectValidateSuccess: false, }, { - caseDesc: "valid local artifact with required flags", + caseDesc: "valid rekord - local artifact with required flags", artifact: "../../../tests/test_file.txt", signature: "../../../tests/test_file.sig", publicKey: "../../../tests/test_public_key.key", expectParseSuccess: true, expectValidateSuccess: true, }, + { + caseDesc: "valid rpm - local artifact with required flags", + typeStr: "rpm", + artifact: "../../../tests/test.rpm", + publicKey: "../../../tests/test_rpm_public_key.key", + expectParseSuccess: true, + expectValidateSuccess: true, + }, { caseDesc: "valid local artifact with incorrect length hex SHA value", artifact: "../../../tests/test_file.txt", @@ -113,7 +157,7 @@ func TestArtifactPFlags(t *testing.T) { expectValidateSuccess: false, }, { - caseDesc: "valid remote artifact with incorrect length hex SHA value", + caseDesc: "valid rekord - remote artifact with incorrect length hex SHA value", artifact: testServer.URL + "/artifact", sha: "12345abcde", signature: "../../../tests/test_file.sig", @@ -192,7 +236,7 @@ func TestArtifactPFlags(t *testing.T) { expectValidateSuccess: false, }, { - caseDesc: "valid remote artifact with required flags", + caseDesc: "valid rekord - remote artifact with required flags", artifact: testServer.URL + "/artifact", sha: "45c7b11fcbf07dec1694adecd8c5b85770a12a6c8dfdcf2580a2db0c47c31779", signature: "../../../tests/test_file.sig", @@ -200,6 +244,15 @@ func TestArtifactPFlags(t *testing.T) { expectParseSuccess: true, expectValidateSuccess: true, }, + { + caseDesc: "valid rpm - remote artifact with required flags", + typeStr: "rpm", + artifact: testServer.URL + "/rpm", + sha: "c8b0bc59708d74f53aab0089ac587d5c348d6ead143dab9f6d9c4b48c973bfd8", + publicKey: "../../../tests/test_rpm_public_key.key", + expectParseSuccess: true, + expectValidateSuccess: true, + }, { caseDesc: "remote artifact with invalid URL", artifact: "hteeteep%**/test_file.txt", @@ -309,8 +362,11 @@ func TestArtifactPFlags(t *testing.T) { args := []string{} - if tc.rekord != "" { - args = append(args, "--rekord", tc.rekord) + if tc.entry != "" { + args = append(args, "--entry", tc.entry) + } + if tc.typeStr != "" { + args = append(args, "--type", tc.typeStr) } if tc.artifact != "" { args = append(args, "--artifact", tc.artifact) @@ -345,8 +401,15 @@ func TestArtifactPFlags(t *testing.T) { continue } if !tc.uuidRequired && !tc.logIndexRequired { - if _, err := CreateRekordFromPFlags(); err != nil { - t.Errorf("unexpected result in '%v' building Rekord: %v", tc.caseDesc, err) + var createFn func() (models.ProposedEntry, error) + switch tc.typeStr { + case "", "rekord": + createFn = CreateRekordFromPFlags + case "rpm": + createFn = CreateRpmFromPFlags + } + if _, err := createFn(); err != nil { + t.Errorf("unexpected result in '%v' building entry: %v", tc.caseDesc, err) } } } diff --git a/cmd/cli/app/upload.go b/cmd/cli/app/upload.go index 0ec5da0..0198d68 100644 --- a/cmd/cli/app/upload.go +++ b/cmd/cli/app/upload.go @@ -16,11 +16,13 @@ limitations under the License. package app import ( + "errors" "fmt" "os" "github.com/projectrekor/rekor/cmd/cli/app/format" "github.com/projectrekor/rekor/pkg/generated/client/entries" + "github.com/projectrekor/rekor/pkg/generated/models" "github.com/projectrekor/rekor/pkg/log" "github.com/spf13/cobra" "github.com/spf13/viper" @@ -60,12 +62,23 @@ var uploadCmd = &cobra.Command{ } params := entries.NewCreateLogEntryParams() - rekordEntry, err := CreateRekordFromPFlags() - if err != nil { - return nil, err + var entry models.ProposedEntry + switch viper.GetString("type") { + case "rekord": + entry, err = CreateRekordFromPFlags() + if err != nil { + return nil, err + } + case "rpm": + entry, err = CreateRpmFromPFlags() + if err != nil { + return nil, err + } + default: + return nil, errors.New("unknown type specified") } - params.SetProposedEntry(rekordEntry) + params.SetProposedEntry(entry) resp, err := rekorClient.Entries.CreateLogEntry(params) if err != nil { diff --git a/cmd/cli/app/verify.go b/cmd/cli/app/verify.go index 0495f57..0eb741a 100644 --- a/cmd/cli/app/verify.go +++ b/cmd/cli/app/verify.go @@ -105,12 +105,23 @@ var verifyCmd = &cobra.Command{ } searchLogQuery.LogIndexes = []*int64{&logIndexInt} } else { - rekordEntry, err := CreateRekordFromPFlags() - if err != nil { - return nil, err + var entry models.ProposedEntry + switch viper.GetString("type") { + case "rekord": + entry, err = CreateRekordFromPFlags() + if err != nil { + return nil, err + } + case "rpm": + entry, err = CreateRpmFromPFlags() + if err != nil { + return nil, err + } + default: + return nil, errors.New("invalid type specified") } - entries := []models.ProposedEntry{rekordEntry} + entries := []models.ProposedEntry{entry} searchLogQuery.SetEntries(entries) } searchParams.SetEntry(&searchLogQuery) diff --git a/cmd/server/app/serve.go b/cmd/server/app/serve.go index 2c85ee1..b9b8289 100644 --- a/cmd/server/app/serve.go +++ b/cmd/server/app/serve.go @@ -25,6 +25,8 @@ import ( "github.com/projectrekor/rekor/pkg/log" "github.com/projectrekor/rekor/pkg/types/rekord" rekord_v001 "github.com/projectrekor/rekor/pkg/types/rekord/v0.0.1" + "github.com/projectrekor/rekor/pkg/types/rpm" + rpm_v001 "github.com/projectrekor/rekor/pkg/types/rpm/v0.0.1" "github.com/projectrekor/rekor/pkg/generated/restapi" "github.com/spf13/cobra" @@ -59,6 +61,7 @@ var serveCmd = &cobra.Command{ // these trigger loading of package and therefore init() methods to run pluggableTypeMap := map[string]string{ rekord.KIND: rekord_v001.APIVERSION, + rpm.KIND: rpm_v001.APIVERSION, } for k, v := range pluggableTypeMap { diff --git a/go.mod b/go.mod index dff9352..fc59e19 100644 --- a/go.mod +++ b/go.mod @@ -5,6 +5,8 @@ go 1.14 require ( github.com/asaskevich/govalidator v0.0.0-20200907205600-7a23bdc65eef github.com/blang/semver v3.5.1+incompatible + github.com/cavaliercoder/badio v0.0.0-20160213150051-ce5280129e9e // indirect + github.com/cavaliercoder/go-rpm v0.0.0-20200122174316-8cb9fd9c31a8 github.com/coreos/bbolt v1.3.3 // indirect github.com/coreos/etcd v3.3.18+incompatible // indirect github.com/fsnotify/fsnotify v1.4.9 // indirect @@ -17,13 +19,11 @@ require ( github.com/go-openapi/strfmt v0.20.0 github.com/go-openapi/swag v0.19.13 github.com/go-openapi/validate v0.20.1 - github.com/go-swagger/go-swagger v0.25.0 // indirect github.com/golang/protobuf v1.4.3 github.com/google/certificate-transparency-go v1.1.0 // indirect + github.com/google/rpmpack v0.0.0-20210107155803-d6befbf05148 github.com/google/trillian v1.3.10 - github.com/gorilla/handlers v1.5.1 // indirect github.com/jedisct1/go-minisign v0.0.0-20210106175330-e54e81d562c7 - github.com/kr/pretty v0.2.1 // indirect github.com/magiconair/properties v1.8.4 // indirect github.com/mediocregopher/radix/v4 v4.0.0-beta.1 github.com/mitchellh/go-homedir v1.1.0 diff --git a/go.sum b/go.sum index f62ae2e..bb78cea 100644 --- a/go.sum +++ b/go.sum @@ -92,6 +92,12 @@ github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kB github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84= github.com/blang/semver v3.5.1+incompatible h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdnnjpJbkM4JQ= github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= +github.com/cavaliercoder/badio v0.0.0-20160213150051-ce5280129e9e h1:YYUjy5BRwO5zPtfk+aa2gw255FIIoi93zMmuy19o0bc= +github.com/cavaliercoder/badio v0.0.0-20160213150051-ce5280129e9e/go.mod h1:V284PjgVwSk4ETmz84rpu9ehpGg7swlIH8npP9k2bGw= +github.com/cavaliercoder/go-cpio v0.0.0-20180626203310-925f9528c45e h1:hHg27A0RSSp2Om9lubZpiMgVbvn39bsUmW9U5h0twqc= +github.com/cavaliercoder/go-cpio v0.0.0-20180626203310-925f9528c45e/go.mod h1:oDpT4efm8tSYHXV5tHSdRvBet/b/QzxZ+XyyPehvm3A= +github.com/cavaliercoder/go-rpm v0.0.0-20200122174316-8cb9fd9c31a8 h1:jP7ki8Tzx9ThnFPLDhBYAhEpI2+jOURnHQNURgsMvnY= +github.com/cavaliercoder/go-rpm v0.0.0-20200122174316-8cb9fd9c31a8/go.mod h1:AZIh1CCnMrcVm6afFf96PBvE2MRpWFco91z8ObJtgDY= github.com/census-instrumentation/opencensus-proto v0.2.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= @@ -112,7 +118,6 @@ github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc github.com/coreos/etcd v3.3.18+incompatible h1:Zz1aXgDrFFi1nadh58tA9ktt06cmPTwNNP3dXwIq1lE= github.com/coreos/etcd v3.3.18+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= -github.com/coreos/go-oidc v2.2.1+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-semver v0.3.0 h1:wkHLiw0WNATZnSG7epLsujiMCgPAc9xhjJ4tgnAxmfM= github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= @@ -151,8 +156,6 @@ github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7 github.com/fatih/color v1.6.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.7.0 h1:DkWD4oS2D8LGGgTQ6IvwJJXSL5Vp2ffcQg58nFV38Ys= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/felixge/httpsnoop v1.0.1 h1:lvB5Jl89CsZtGIWuTcDM1E/vkVs49/Ml7JJe07l8SPQ= -github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= 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/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= @@ -193,8 +196,6 @@ github.com/go-openapi/errors v0.19.7/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpX github.com/go-openapi/errors v0.19.8/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpXe8DOa1Mi1M= github.com/go-openapi/errors v0.19.9 h1:9SnKdGhiPZHF3ttwFMiCBEb8jQ4IDdrK+5+a0oTygA4= github.com/go-openapi/errors v0.19.9/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpXe8DOa1Mi1M= -github.com/go-openapi/inflect v0.19.0 h1:9jCH9scKIbHeV9m12SmPilScz6krDxKRasNNSNPXu/4= -github.com/go-openapi/inflect v0.19.0/go.mod h1:lHpZVlpIQqLyKwJ4N+YSc9hchQy/i12fJykb83CRBH4= github.com/go-openapi/jsonpointer v0.17.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M= github.com/go-openapi/jsonpointer v0.18.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M= github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg= @@ -205,7 +206,6 @@ github.com/go-openapi/jsonreference v0.17.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3Hfo github.com/go-openapi/jsonreference v0.18.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I= github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc= github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8= -github.com/go-openapi/jsonreference v0.19.4/go.mod h1:RdybgQwPxbL4UEjuAruzK1x3nE69AqPYEJeo/TWfEeg= github.com/go-openapi/jsonreference v0.19.5 h1:1WJP/wi4OjB4iV8KVbH73rQaoialJrqv8gitZLxGLtM= github.com/go-openapi/jsonreference v0.19.5/go.mod h1:RdybgQwPxbL4UEjuAruzK1x3nE69AqPYEJeo/TWfEeg= github.com/go-openapi/loads v0.17.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= @@ -224,7 +224,6 @@ github.com/go-openapi/runtime v0.19.0/go.mod h1:OwNfisksmmaZse4+gpV3Ne9AyMOlP1lt github.com/go-openapi/runtime v0.19.4/go.mod h1:X277bwSUBxVlCYR3r7xgZZGKVvBd/29gLDlFGtJ8NL4= github.com/go-openapi/runtime v0.19.15/go.mod h1:dhGWCTKRXlAfGnQG0ONViOZpjfg0m2gUt9nTQPQZuoo= github.com/go-openapi/runtime v0.19.16/go.mod h1:5P9104EJgYcizotuXhEuUrzVc+j1RiSjahULvYmlv98= -github.com/go-openapi/runtime v0.19.20/go.mod h1:Lm9YGCeecBnUUkFTxPC4s1+lwrkJ0pthx8YvyjCfkgk= github.com/go-openapi/runtime v0.19.24 h1:TqagMVlRAOTwllE/7hNKx6rQ10O6T8ZzeJdMjSTKaD4= github.com/go-openapi/runtime v0.19.24/go.mod h1:Lm9YGCeecBnUUkFTxPC4s1+lwrkJ0pthx8YvyjCfkgk= github.com/go-openapi/runtime v0.19.26 h1:K/6PoVNj5WJXUnMk+VEbELeXjtBkCS1UxTDa04tdXE0= @@ -269,8 +268,6 @@ github.com/go-openapi/validate v0.19.10/go.mod h1:RKEZTUWDkxKQxN2jDT7ZnZi2bhZlbN github.com/go-openapi/validate v0.19.12/go.mod h1:Rzou8hA/CBw8donlS6WNEUQupNvUZ0waH08tGe6kAQ4= github.com/go-openapi/validate v0.19.15 h1:oUHZO8jD7p5oRLANlXF0U8ic9ePBUkDQyRZdN0EhL6M= github.com/go-openapi/validate v0.19.15/go.mod h1:tbn/fdOwYHgrhPBzidZfJC2MIVvs9GA7monOmWBbeCI= -github.com/go-openapi/validate v0.20.0 h1:pzutNCCBZGZlE+u8HD3JZyWdc/TVbtVwlWUp8/vgUKk= -github.com/go-openapi/validate v0.20.0/go.mod h1:b60iJT+xNNLfaQJUqLI7946tYiFEOuE9E4k54HpKcJ0= github.com/go-openapi/validate v0.20.1 h1:QGQ5CvK74E28t3DkegGweKR+auemUi5IdpMc4x3UW6s= github.com/go-openapi/validate v0.20.1/go.mod h1:b60iJT+xNNLfaQJUqLI7946tYiFEOuE9E4k54HpKcJ0= github.com/go-redis/redis v6.15.8+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA= @@ -279,9 +276,6 @@ github.com/go-sql-driver/mysql v1.5.0 h1:ozyZYNQW3x3HtqT1jira07DN2PArx2v7/mN66gG github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/go-swagger/go-swagger v0.25.0 h1:FxhyrWWV8V/A9P6GtI5szWordAdbb6Y0nqdY/y9So2w= -github.com/go-swagger/go-swagger v0.25.0/go.mod h1:9639ioXrPX9E6BbnbaDklGXjNz7upAXoNBwL4Ok11Vk= -github.com/go-swagger/scan-repo-boundary v0.0.0-20180623220736-973b3573c013/go.mod h1:b65mBPzqzZWxOZGxSWrqs4GInLIn+u99Q9q7p+GKni0= github.com/go-toolsmith/astcast v1.0.0/go.mod h1:mt2OdQTeAQcY4DQgPSArJjHCcOwlX+Wl/kwN+LbLGQ4= github.com/go-toolsmith/astcopy v1.0.0/go.mod h1:vrgyG+5Bxrnz4MZWPF+pI4R8h3qKRjjyvV/DSez4WVQ= github.com/go-toolsmith/astequal v0.0.0-20180903214952-dcb477bfacd6/go.mod h1:H+xSiq0+LtiDC11+h1G32h7Of5O3CYFJ99GVbS5lDKY= @@ -410,6 +404,8 @@ github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hf github.com/google/pprof v0.0.0-20200507031123-427632fa3b1c/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/rpmpack v0.0.0-20210107155803-d6befbf05148 h1:vqARqWnIYTYLO4h9fRi9wfAfBPf3x6nWirg0jDNOafk= +github.com/google/rpmpack v0.0.0-20210107155803-d6befbf05148/go.mod h1:+y9lKiqDhR4zkLl+V9h4q0rdyrYVsWWm6LLCQP33DIk= github.com/google/trillian v1.2.2-0.20190612132142-05461f4df60a/go.mod h1:YPmUVn5NGwgnDUgqlVyFGMTgaWlnSvH7W5p+NdOG8UA= github.com/google/trillian v1.3.10 h1:Qcn4HEWdQka7ioLtJO4Umo1UwpvVZdejktNtjhnPGGk= github.com/google/trillian v1.3.10/go.mod h1:VmfwqXyIzUSuO0hNdtTrT57/MtixlNcdU7egfnkmhA4= @@ -423,10 +419,6 @@ github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5m github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gordonklaus/ineffassign v0.0.0-20200309095847-7953dde2c7bf/go.mod h1:cuNKsD1zp2v6XfE/orVX2QE1LC+i254ceGcVeDT3pTU= -github.com/gorilla/handlers v1.4.2 h1:0QniY0USkHQ1RGCLfKxeNHK9bkDHGRYGNDFBCS+YARg= -github.com/gorilla/handlers v1.4.2/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ= -github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4= -github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q= github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= @@ -477,8 +469,6 @@ github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NH github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/jedisct1/go-minisign v0.0.0-20210106175330-e54e81d562c7 h1:qrPDNqqT76vs8oWL6Z1/D6hKvbXULvlD7FdNVTIUI8A= github.com/jedisct1/go-minisign v0.0.0-20210106175330-e54e81d562c7/go.mod h1:oPTyITpvr7hPx/9w76gWrgbZwbb+7gZ9/On8hFc+LNE= -github.com/jessevdk/go-flags v1.4.0 h1:4IU2WS7AumrZ/40jfhf4QVDMsQwqA7VEHozFRrGARJA= -github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jhump/protoreflect v1.6.1 h1:4/2yi5LyDPP7nN+Hiird1SAJ6YoxUm13/oxHGRnbPd8= github.com/jhump/protoreflect v1.6.1/go.mod h1:RZQ/lnuN+zqeRVpQigTwO6o0AJUkxbnSnpuG7toUTG4= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= @@ -517,10 +507,6 @@ github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.2.0 h1:s5hAObm+yFO5uHYt5dYjxi2rXrsnmRpJx4OYvIWUaQs= -github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI= -github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= @@ -632,7 +618,6 @@ github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/9 github.com/pelletier/go-toml v1.4.0/go.mod h1:PN7xzY2wHTK0K9p34ErDQMlFxa51Fk0OUruD3k1mMwo= github.com/pelletier/go-toml v1.7.0 h1:7utD74fnzVc/cpcyy8sjrlFr5vYpypUixARcHIMIGuI= github.com/pelletier/go-toml v1.7.0/go.mod h1:vwGMzjaWMwyfHwgIBhI2YUM4fB6nL6lVAvS1LBMMhTE= -github.com/pelletier/go-toml v1.8.0/go.mod h1:D6yutnOGMveHEPV7VQOuvI/gXY61bv+9bAOTRnLElKs= github.com/pelletier/go-toml v1.8.1 h1:1Nf83orprkJyknT6h7zbuEGUEjcyVlCxSUGTENmNCRM= github.com/pelletier/go-toml v1.8.1/go.mod h1:T2/BmBdy8dvIRq1a/8aqjN41wvWlN4lrapLU/GW4pbc= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -645,7 +630,6 @@ github.com/pmezard/go-difflib v0.0.0-20151028094244-d8ed2627bdf0/go.mod h1:iKH77 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/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= -github.com/pquerna/cachecontrol v0.0.0-20180517163645-1555304b9b35/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= github.com/prometheus/client_golang v0.9.4/go.mod h1:oCXIBxdI62A4cR6aTRJCgetEjecSIYzOEaeAn4iYEpM= @@ -712,9 +696,6 @@ github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasO github.com/spf13/afero v1.1.0/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= github.com/spf13/afero v1.1.2 h1:m8/z1t7/fwjysjQRYbP0RD+bUIF/8tJwPdEZsI83ACI= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= -github.com/spf13/afero v1.3.2/go.mod h1:5KUK8ByomD5Ti5Artl0RtHeI5pTF7MIDuXL3yY520V4= -github.com/spf13/afero v1.5.0 h1:8Wb647pxgVlypPIdcDlffCLCHCElBZ1sCF6i85qNvRw= -github.com/spf13/afero v1.5.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= github.com/spf13/afero v1.5.1 h1:VHu76Lk0LSP1x254maIu2bplkWpfBWI+B+6fdoZprcg= github.com/spf13/afero v1.5.1/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= github.com/spf13/cast v1.2.0/go.mod h1:r2rcYCSwa1IExKTDiTfzaxqT2FNHs8hODu4LnUfgKEg= @@ -740,7 +721,6 @@ github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An github.com/spf13/viper v1.0.2/go.mod h1:A8kyI5cUJhb8N+3pkfONlcEcZbueH6nhAm0Fq7SrnBM= github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= -github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= github.com/spf13/viper v1.7.1 h1:pM5oEahlgWv/WnHXpgbKz7iLIxRf65tye2Ci+XFK5sk= github.com/spf13/viper v1.7.1/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= @@ -765,10 +745,10 @@ github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1 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/tomasen/realip v0.0.0-20180522021738-f0c99a92ddce/go.mod h1:o8v6yHRoik09Xen7gje4m9ERNah1d1PPsVq1VEx9vE4= -github.com/toqueteos/webbrowser v1.2.0 h1:tVP/gpK69Fx+qMJKsLE7TD8LuGWPnEV71wBN9rrstGQ= -github.com/toqueteos/webbrowser v1.2.0/go.mod h1:XWoZq4cyp9WeUeak7w7LXRUQf1F1ATJMir8RTqb4ayM= github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= +github.com/ulikunitz/xz v0.5.7 h1:YvTNdFzX6+W5m9msiYg/zpkSURPPtOlzbqYjrFn7Yt4= +github.com/ulikunitz/xz v0.5.7/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= github.com/ultraware/funlen v0.0.1/go.mod h1:Dp4UiAus7Wdb9KUZsYWZEWiRzGuM2kXM1lPbfaF6xhA= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.22.1 h1:+mkCCcOFKPnCmVYVcURKps1Xe+3zP90gSYGNfRkjoIY= @@ -801,7 +781,6 @@ go.mongodb.org/mongo-driver v1.0.3/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qL go.mongodb.org/mongo-driver v1.1.1/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= go.mongodb.org/mongo-driver v1.3.0/go.mod h1:MSWZXKOynuguX+JSvwP8i+58jYCXxbia8HS3gZBapIE= go.mongodb.org/mongo-driver v1.3.4/go.mod h1:MSWZXKOynuguX+JSvwP8i+58jYCXxbia8HS3gZBapIE= -go.mongodb.org/mongo-driver v1.3.5/go.mod h1:Ual6Gkco7ZGQw8wE1t4tLnvBsf6yVSM60qW6TgOeJ5c= go.mongodb.org/mongo-driver v1.4.3 h1:moga+uhicpVshTyaqY9L23E6QqwcHRUv1sqyOsoyOO8= go.mongodb.org/mongo-driver v1.4.3/go.mod h1:WcMNYLx/IlOxLe6JRJiv2uXuCz6zBLndR4SoGjYphSc= go.mongodb.org/mongo-driver v1.4.4 h1:bsPHfODES+/yx2PCWzUYMH8xj6PVniPI8DQrsJuSXSs= @@ -848,7 +827,6 @@ golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20200311171314-f7b00557c8c4/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200709230013-948cd5f35899/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad h1:DN0cp81fZ3njFcrLCytUHRSUkqBjfTo4Tx9RJTWs0EY= golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -881,8 +859,6 @@ golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.0 h1:8pl+sMODzuvGJkmj2W4kZihvVb5mKm8pB/X44PIQHv8= -golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.1 h1:Kvvh58BN8Y9/lBi7hTekvtMpm07eUZ0ck5pRHpsMWrY= golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/net v0.0.0-20170915142106-8351a756f30f/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -930,8 +906,6 @@ golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwY golang.org/x/net v0.0.0-20201110031124-69a78807bb2b h1:uwuIcX0g4Yl1NC5XAz37xsr2lTtcqevgzYNVt49waME= golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201207224615-747e23833adb h1:xj2oMIbduz83x7tzglytWT7spn6rP+9hvKjTpro6/pM= -golang.org/x/net v0.0.0-20201207224615-747e23833adb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201224014010-6772e930b67b h1:iFwSg7t5GZmB/Q5TjiEAsdoLDrdJRC1RiF2WhuV29Qw= golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -998,13 +972,10 @@ golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f h1:+Nyd8tzPX9R7BWHguqsrbFdRx3WQ/1ib8I44HXV5yTA= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201207223542-d4d67f95c62d h1:MiWWjyhUzZ+jvhZvloX6ZrUsdEghn8a64Upd8EMHglE= -golang.org/x/sys v0.0.0-20201207223542-d4d67f95c62d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210113181707-4bcb84eeeb78 h1:nVuTkr9L6Bq62qpUqKo/RnZCFfzDBL0bYo6w9OJUqZY= golang.org/x/sys v0.0.0-20210113181707-4bcb84eeeb78/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= @@ -1088,12 +1059,9 @@ golang.org/x/tools v0.0.0-20200527183253-8e7acdbce89d/go.mod h1:EkVYQZoAsY45+roY golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200626171337-aa94e735be7f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200630154851-b2d8b0336632/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200717024301-6ddee64345a6/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20201208062317-e652b2f42cc7 h1:2OSu5vYyX4LVqZAtqZXnFEcN26SDKIJYlEVIRl1tj8U= -golang.org/x/tools v0.0.0-20201208062317-e652b2f42cc7/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210115202250-e0d201561e39 h1:BTs2GMGSMWpgtCpv1CE7vkJTv7XcHdcLLnAMu7UbgTY= golang.org/x/tools v0.0.0-20210115202250-e0d201561e39/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -1194,11 +1162,9 @@ gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMy gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2/go.mod h1:Xk6kEKp8OKb+X14hQBKWaSkCsqBpgog8nAV2xsGOxlo= gopkg.in/ini.v1 v1.51.0 h1:AQvPpx3LzTDM0AjnIRlVFwFFGC+npRopjZxLJj6gdno= gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/ini.v1 v1.57.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.62.0 h1:duBzk771uxoUuOlyRLkHsygud9+5lrlGjdFBb4mSKDU= gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= -gopkg.in/square/go-jose.v2 v2.5.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/openapi.yaml b/openapi.yaml index 8090575..23b021c 100644 --- a/openapi.yaml +++ b/openapi.yaml @@ -259,6 +259,23 @@ definitions: - spec additionalProperties: false + rpm: + type: object + description: RPM object + allOf: + - $ref: '#/definitions/ProposedEntry' + - properties: + apiVersion: + type: string + pattern: ^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$ + spec: + type: object + $ref: 'pkg/types/rpm/rpm_schema.json' + required: + - apiVersion + - spec + additionalProperties: false + LogEntry: type: object additionalProperties: diff --git a/pkg/generated/models/proposed_entry.go b/pkg/generated/models/proposed_entry.go index 81d4d8e..fcaae0b 100644 --- a/pkg/generated/models/proposed_entry.go +++ b/pkg/generated/models/proposed_entry.go @@ -120,6 +120,12 @@ func unmarshalProposedEntry(data []byte, consumer runtime.Consumer) (ProposedEnt return nil, err } return &result, nil + case "rpm": + var result Rpm + if err := consumer.Consume(buf2, &result); err != nil { + return nil, err + } + return &result, nil } return nil, errors.New(422, "invalid kind value: %q", getType.Kind) } diff --git a/pkg/generated/models/rpm.go b/pkg/generated/models/rpm.go new file mode 100644 index 0000000..67415ee --- /dev/null +++ b/pkg/generated/models/rpm.go @@ -0,0 +1,200 @@ +// Code generated by go-swagger; DO NOT EDIT. + +// /* +// Copyright The Rekor Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// */ +// + +package models + +// This file was generated by the swagger tool. +// Editing this file might prove futile when you re-run the swagger generate command + +import ( + "bytes" + "encoding/json" + + "github.com/go-openapi/errors" + "github.com/go-openapi/strfmt" + "github.com/go-openapi/swag" + "github.com/go-openapi/validate" +) + +// Rpm RPM object +// +// swagger:model rpm +type Rpm struct { + + // api version + // Required: true + // Pattern: ^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$ + APIVersion *string `json:"apiVersion"` + + // spec + // Required: true + Spec RpmSchema `json:"spec"` +} + +// Kind gets the kind of this subtype +func (m *Rpm) Kind() string { + return "rpm" +} + +// SetKind sets the kind of this subtype +func (m *Rpm) SetKind(val string) { +} + +// UnmarshalJSON unmarshals this object with a polymorphic type from a JSON structure +func (m *Rpm) UnmarshalJSON(raw []byte) error { + var data struct { + + // api version + // Required: true + // Pattern: ^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$ + APIVersion *string `json:"apiVersion"` + + // spec + // Required: true + Spec RpmSchema `json:"spec"` + } + buf := bytes.NewBuffer(raw) + dec := json.NewDecoder(buf) + dec.UseNumber() + + if err := dec.Decode(&data); err != nil { + return err + } + + var base struct { + /* Just the base type fields. Used for unmashalling polymorphic types.*/ + + Kind string `json:"kind"` + } + buf = bytes.NewBuffer(raw) + dec = json.NewDecoder(buf) + dec.UseNumber() + + if err := dec.Decode(&base); err != nil { + return err + } + + var result Rpm + + if base.Kind != result.Kind() { + /* Not the type we're looking for. */ + return errors.New(422, "invalid kind value: %q", base.Kind) + } + + result.APIVersion = data.APIVersion + result.Spec = data.Spec + + *m = result + + return nil +} + +// MarshalJSON marshals this object with a polymorphic type to a JSON structure +func (m Rpm) MarshalJSON() ([]byte, error) { + var b1, b2, b3 []byte + var err error + b1, err = json.Marshal(struct { + + // api version + // Required: true + // Pattern: ^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$ + APIVersion *string `json:"apiVersion"` + + // spec + // Required: true + Spec RpmSchema `json:"spec"` + }{ + + APIVersion: m.APIVersion, + + Spec: m.Spec, + }) + if err != nil { + return nil, err + } + b2, err = json.Marshal(struct { + Kind string `json:"kind"` + }{ + + Kind: m.Kind(), + }) + if err != nil { + return nil, err + } + + return swag.ConcatJSON(b1, b2, b3), nil +} + +// Validate validates this rpm +func (m *Rpm) Validate(formats strfmt.Registry) error { + var res []error + + if err := m.validateAPIVersion(formats); err != nil { + res = append(res, err) + } + + if err := m.validateSpec(formats); err != nil { + res = append(res, err) + } + + if len(res) > 0 { + return errors.CompositeValidationError(res...) + } + return nil +} + +func (m *Rpm) validateAPIVersion(formats strfmt.Registry) error { + + if err := validate.Required("apiVersion", "body", m.APIVersion); err != nil { + return err + } + + if err := validate.Pattern("apiVersion", "body", string(*m.APIVersion), `^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$`); err != nil { + return err + } + + return nil +} + +func (m *Rpm) validateSpec(formats strfmt.Registry) error { + + if err := validate.Required("spec", "body", m.Spec); err != nil { + return err + } + + return nil +} + +// MarshalBinary interface implementation +func (m *Rpm) MarshalBinary() ([]byte, error) { + if m == nil { + return nil, nil + } + return swag.WriteJSON(m) +} + +// UnmarshalBinary interface implementation +func (m *Rpm) UnmarshalBinary(b []byte) error { + var res Rpm + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *m = res + return nil +} diff --git a/pkg/generated/models/rpm_schema.go b/pkg/generated/models/rpm_schema.go new file mode 100644 index 0000000..8bf7304 --- /dev/null +++ b/pkg/generated/models/rpm_schema.go @@ -0,0 +1,30 @@ +// Code generated by go-swagger; DO NOT EDIT. + +// /* +// Copyright The Rekor Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// */ +// + +package models + +// This file was generated by the swagger tool. +// Editing this file might prove futile when you re-run the swagger generate command + +// RpmSchema RPM Schema +// +// Schema for RPM objects +// +// swagger:model rpmSchema +type RpmSchema interface{} diff --git a/pkg/generated/models/rpm_v001_schema.go b/pkg/generated/models/rpm_v001_schema.go new file mode 100644 index 0000000..5d6861c --- /dev/null +++ b/pkg/generated/models/rpm_v001_schema.go @@ -0,0 +1,369 @@ +// Code generated by go-swagger; DO NOT EDIT. + +// /* +// Copyright The Rekor Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// */ +// + +package models + +// This file was generated by the swagger tool. +// Editing this file might prove futile when you re-run the swagger generate command + +import ( + "encoding/json" + + "github.com/go-openapi/errors" + "github.com/go-openapi/strfmt" + "github.com/go-openapi/swag" + "github.com/go-openapi/validate" +) + +// RpmV001Schema RPM v0.0.1 Schema +// +// Schema for RPM entries +// +// swagger:model rpmV001Schema +type RpmV001Schema struct { + + // Arbitrary content to be included in the verifiable entry in the transparency log + ExtraData interface{} `json:"extraData,omitempty"` + + // package + // Required: true + Package *RpmV001SchemaPackage `json:"package"` + + // public key + // Required: true + PublicKey *RpmV001SchemaPublicKey `json:"publicKey"` +} + +// Validate validates this rpm v001 schema +func (m *RpmV001Schema) Validate(formats strfmt.Registry) error { + var res []error + + if err := m.validatePackage(formats); err != nil { + res = append(res, err) + } + + if err := m.validatePublicKey(formats); err != nil { + res = append(res, err) + } + + if len(res) > 0 { + return errors.CompositeValidationError(res...) + } + return nil +} + +func (m *RpmV001Schema) validatePackage(formats strfmt.Registry) error { + + if err := validate.Required("package", "body", m.Package); err != nil { + return err + } + + if m.Package != nil { + if err := m.Package.Validate(formats); err != nil { + if ve, ok := err.(*errors.Validation); ok { + return ve.ValidateName("package") + } + return err + } + } + + return nil +} + +func (m *RpmV001Schema) validatePublicKey(formats strfmt.Registry) error { + + if err := validate.Required("publicKey", "body", m.PublicKey); err != nil { + return err + } + + if m.PublicKey != nil { + if err := m.PublicKey.Validate(formats); err != nil { + if ve, ok := err.(*errors.Validation); ok { + return ve.ValidateName("publicKey") + } + return err + } + } + + return nil +} + +// MarshalBinary interface implementation +func (m *RpmV001Schema) MarshalBinary() ([]byte, error) { + if m == nil { + return nil, nil + } + return swag.WriteJSON(m) +} + +// UnmarshalBinary interface implementation +func (m *RpmV001Schema) UnmarshalBinary(b []byte) error { + var res RpmV001Schema + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *m = res + return nil +} + +// RpmV001SchemaPackage Information about the package associated with the entry +// +// swagger:model RpmV001SchemaPackage +type RpmV001SchemaPackage struct { + + // Specifies the package inline within the document + // Format: byte + Content strfmt.Base64 `json:"content,omitempty"` + + // hash + Hash *RpmV001SchemaPackageHash `json:"hash,omitempty"` + + // Values of the RPM headers + Headers map[string]string `json:"headers,omitempty"` + + // Specifies the location of the package; if this is specified, a hash value must also be provided + // Format: uri + URL strfmt.URI `json:"url,omitempty"` +} + +// Validate validates this rpm v001 schema package +func (m *RpmV001SchemaPackage) Validate(formats strfmt.Registry) error { + var res []error + + if err := m.validateHash(formats); err != nil { + res = append(res, err) + } + + if err := m.validateURL(formats); err != nil { + res = append(res, err) + } + + if len(res) > 0 { + return errors.CompositeValidationError(res...) + } + return nil +} + +func (m *RpmV001SchemaPackage) validateHash(formats strfmt.Registry) error { + + if swag.IsZero(m.Hash) { // not required + return nil + } + + if m.Hash != nil { + if err := m.Hash.Validate(formats); err != nil { + if ve, ok := err.(*errors.Validation); ok { + return ve.ValidateName("package" + "." + "hash") + } + return err + } + } + + return nil +} + +func (m *RpmV001SchemaPackage) validateURL(formats strfmt.Registry) error { + + if swag.IsZero(m.URL) { // not required + return nil + } + + if err := validate.FormatOf("package"+"."+"url", "body", "uri", m.URL.String(), formats); err != nil { + return err + } + + return nil +} + +// MarshalBinary interface implementation +func (m *RpmV001SchemaPackage) MarshalBinary() ([]byte, error) { + if m == nil { + return nil, nil + } + return swag.WriteJSON(m) +} + +// UnmarshalBinary interface implementation +func (m *RpmV001SchemaPackage) UnmarshalBinary(b []byte) error { + var res RpmV001SchemaPackage + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *m = res + return nil +} + +// RpmV001SchemaPackageHash Specifies the hash algorithm and value for the package +// +// swagger:model RpmV001SchemaPackageHash +type RpmV001SchemaPackageHash struct { + + // The hashing function used to compute the hash value + // Required: true + // Enum: [sha256] + Algorithm *string `json:"algorithm"` + + // The hash value for the package + // Required: true + Value *string `json:"value"` +} + +// Validate validates this rpm v001 schema package hash +func (m *RpmV001SchemaPackageHash) Validate(formats strfmt.Registry) error { + var res []error + + if err := m.validateAlgorithm(formats); err != nil { + res = append(res, err) + } + + if err := m.validateValue(formats); err != nil { + res = append(res, err) + } + + if len(res) > 0 { + return errors.CompositeValidationError(res...) + } + return nil +} + +var rpmV001SchemaPackageHashTypeAlgorithmPropEnum []interface{} + +func init() { + var res []string + if err := json.Unmarshal([]byte(`["sha256"]`), &res); err != nil { + panic(err) + } + for _, v := range res { + rpmV001SchemaPackageHashTypeAlgorithmPropEnum = append(rpmV001SchemaPackageHashTypeAlgorithmPropEnum, v) + } +} + +const ( + + // RpmV001SchemaPackageHashAlgorithmSha256 captures enum value "sha256" + RpmV001SchemaPackageHashAlgorithmSha256 string = "sha256" +) + +// prop value enum +func (m *RpmV001SchemaPackageHash) validateAlgorithmEnum(path, location string, value string) error { + if err := validate.EnumCase(path, location, value, rpmV001SchemaPackageHashTypeAlgorithmPropEnum, true); err != nil { + return err + } + return nil +} + +func (m *RpmV001SchemaPackageHash) validateAlgorithm(formats strfmt.Registry) error { + + if err := validate.Required("package"+"."+"hash"+"."+"algorithm", "body", m.Algorithm); err != nil { + return err + } + + // value enum + if err := m.validateAlgorithmEnum("package"+"."+"hash"+"."+"algorithm", "body", *m.Algorithm); err != nil { + return err + } + + return nil +} + +func (m *RpmV001SchemaPackageHash) validateValue(formats strfmt.Registry) error { + + if err := validate.Required("package"+"."+"hash"+"."+"value", "body", m.Value); err != nil { + return err + } + + return nil +} + +// MarshalBinary interface implementation +func (m *RpmV001SchemaPackageHash) MarshalBinary() ([]byte, error) { + if m == nil { + return nil, nil + } + return swag.WriteJSON(m) +} + +// UnmarshalBinary interface implementation +func (m *RpmV001SchemaPackageHash) UnmarshalBinary(b []byte) error { + var res RpmV001SchemaPackageHash + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *m = res + return nil +} + +// RpmV001SchemaPublicKey The PGP public key that can verify the RPM signature +// +// swagger:model RpmV001SchemaPublicKey +type RpmV001SchemaPublicKey struct { + + // Specifies the content of the public key inline within the document + // Format: byte + Content strfmt.Base64 `json:"content,omitempty"` + + // Specifies the location of the public key + // Format: uri + URL strfmt.URI `json:"url,omitempty"` +} + +// Validate validates this rpm v001 schema public key +func (m *RpmV001SchemaPublicKey) Validate(formats strfmt.Registry) error { + var res []error + + if err := m.validateURL(formats); err != nil { + res = append(res, err) + } + + if len(res) > 0 { + return errors.CompositeValidationError(res...) + } + return nil +} + +func (m *RpmV001SchemaPublicKey) validateURL(formats strfmt.Registry) error { + + if swag.IsZero(m.URL) { // not required + return nil + } + + if err := validate.FormatOf("publicKey"+"."+"url", "body", "uri", m.URL.String(), formats); err != nil { + return err + } + + return nil +} + +// MarshalBinary interface implementation +func (m *RpmV001SchemaPublicKey) MarshalBinary() ([]byte, error) { + if m == nil { + return nil, nil + } + return swag.WriteJSON(m) +} + +// UnmarshalBinary interface implementation +func (m *RpmV001SchemaPublicKey) UnmarshalBinary(b []byte) error { + var res RpmV001SchemaPublicKey + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *m = res + return nil +} diff --git a/pkg/generated/restapi/embedded_spec.go b/pkg/generated/restapi/embedded_spec.go index c04827e..cfc1808 100644 --- a/pkg/generated/restapi/embedded_spec.go +++ b/pkg/generated/restapi/embedded_spec.go @@ -593,6 +593,32 @@ func init() { "additionalProperties": false } ] + }, + "rpm": { + "description": "RPM object", + "type": "object", + "allOf": [ + { + "$ref": "#/definitions/ProposedEntry" + }, + { + "required": [ + "apiVersion", + "spec" + ], + "properties": { + "apiVersion": { + "type": "string", + "pattern": "^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$" + }, + "spec": { + "type": "object", + "$ref": "pkg/types/rpm/rpm_schema.json" + } + }, + "additionalProperties": false + } + ] } }, "responses": { @@ -1335,6 +1361,112 @@ func init() { } } }, + "RpmV001SchemaPackage": { + "description": "Information about the package associated with the entry", + "type": "object", + "oneOf": [ + { + "required": [ + "hash", + "url" + ] + }, + { + "required": [ + "content" + ] + } + ], + "properties": { + "content": { + "description": "Specifies the package inline within the document", + "type": "string", + "format": "byte" + }, + "hash": { + "description": "Specifies the hash algorithm and value for the package", + "type": "object", + "required": [ + "algorithm", + "value" + ], + "properties": { + "algorithm": { + "description": "The hashing function used to compute the hash value", + "type": "string", + "enum": [ + "sha256" + ] + }, + "value": { + "description": "The hash value for the package", + "type": "string" + } + } + }, + "headers": { + "description": "Values of the RPM headers", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "url": { + "description": "Specifies the location of the package; if this is specified, a hash value must also be provided", + "type": "string", + "format": "uri" + } + } + }, + "RpmV001SchemaPackageHash": { + "description": "Specifies the hash algorithm and value for the package", + "type": "object", + "required": [ + "algorithm", + "value" + ], + "properties": { + "algorithm": { + "description": "The hashing function used to compute the hash value", + "type": "string", + "enum": [ + "sha256" + ] + }, + "value": { + "description": "The hash value for the package", + "type": "string" + } + } + }, + "RpmV001SchemaPublicKey": { + "description": "The PGP public key that can verify the RPM signature", + "type": "object", + "oneOf": [ + { + "required": [ + "url" + ] + }, + { + "required": [ + "content" + ] + } + ], + "properties": { + "content": { + "description": "Specifies the content of the public key inline within the document", + "type": "string", + "format": "byte" + }, + "url": { + "description": "Specifies the location of the public key", + "type": "string", + "format": "uri" + } + } + }, "SearchIndex": { "type": "object", "properties": { @@ -1593,6 +1725,146 @@ func init() { }, "$schema": "http://json-schema.org/draft-07/schema", "$id": "http://rekor.dev/types/rekord/rekord_v0_0_1_schema.json" + }, + "rpm": { + "description": "RPM object", + "type": "object", + "allOf": [ + { + "$ref": "#/definitions/ProposedEntry" + }, + { + "required": [ + "apiVersion", + "spec" + ], + "properties": { + "apiVersion": { + "type": "string", + "pattern": "^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$" + }, + "spec": { + "$ref": "#/definitions/rpmSchema" + } + }, + "additionalProperties": false + } + ] + }, + "rpmSchema": { + "description": "Schema for RPM objects", + "type": "object", + "title": "RPM Schema", + "oneOf": [ + { + "$ref": "#/definitions/rpmV001Schema" + } + ], + "$schema": "http://json-schema.org/draft-07/schema", + "$id": "http://rekor.dev/types/rpm/rpm_schema.json" + }, + "rpmV001Schema": { + "description": "Schema for RPM entries", + "type": "object", + "title": "RPM v0.0.1 Schema", + "required": [ + "publicKey", + "package" + ], + "properties": { + "extraData": { + "description": "Arbitrary content to be included in the verifiable entry in the transparency log", + "type": "object", + "additionalProperties": true + }, + "package": { + "description": "Information about the package associated with the entry", + "type": "object", + "oneOf": [ + { + "required": [ + "hash", + "url" + ] + }, + { + "required": [ + "content" + ] + } + ], + "properties": { + "content": { + "description": "Specifies the package inline within the document", + "type": "string", + "format": "byte" + }, + "hash": { + "description": "Specifies the hash algorithm and value for the package", + "type": "object", + "required": [ + "algorithm", + "value" + ], + "properties": { + "algorithm": { + "description": "The hashing function used to compute the hash value", + "type": "string", + "enum": [ + "sha256" + ] + }, + "value": { + "description": "The hash value for the package", + "type": "string" + } + } + }, + "headers": { + "description": "Values of the RPM headers", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "url": { + "description": "Specifies the location of the package; if this is specified, a hash value must also be provided", + "type": "string", + "format": "uri" + } + } + }, + "publicKey": { + "description": "The PGP public key that can verify the RPM signature", + "type": "object", + "oneOf": [ + { + "required": [ + "url" + ] + }, + { + "required": [ + "content" + ] + } + ], + "properties": { + "content": { + "description": "Specifies the content of the public key inline within the document", + "type": "string", + "format": "byte" + }, + "url": { + "description": "Specifies the location of the public key", + "type": "string", + "format": "uri" + } + } + } + }, + "$schema": "http://json-schema.org/draft-07/schema", + "$id": "http://rekor.dev/types/rpm/rpm_v0_0_1_schema.json" } }, "responses": { diff --git a/pkg/pki/pgp/pgp.go b/pkg/pki/pgp/pgp.go index 5c2db19..b28c168 100644 --- a/pkg/pki/pgp/pgp.go +++ b/pkg/pki/pgp/pgp.go @@ -20,6 +20,7 @@ import ( "bufio" "bytes" "context" + "errors" "fmt" "io" "net/http" @@ -270,3 +271,11 @@ func (k PublicKey) CanonicalValue() ([]byte, error) { return canonicalBuffer.Bytes(), nil } + +func (k PublicKey) KeyRing() (openpgp.KeyRing, error) { + if k.key == nil { + return nil, errors.New("PGP public key has not been initialized") + } + + return k.key, nil +} diff --git a/pkg/types/rekord/rekord.go b/pkg/types/rekord/rekord.go index 2229846..5336d74 100644 --- a/pkg/types/rekord/rekord.go +++ b/pkg/types/rekord/rekord.go @@ -18,12 +18,9 @@ package rekord import ( "errors" "fmt" - "sync" - "github.com/blang/semver" - - "github.com/projectrekor/rekor/pkg/log" "github.com/projectrekor/rekor/pkg/types" + "github.com/projectrekor/rekor/pkg/util" "github.com/go-openapi/swag" "github.com/projectrekor/rekor/pkg/generated/models" @@ -47,52 +44,7 @@ func New() types.TypeImpl { return &BaseRekordType{} } -type VersionFactory func() types.EntryImpl - -type versionFactoryMap struct { - versionFactories map[string]VersionFactory - - sync.RWMutex -} - -func (vfm *versionFactoryMap) Get(version string) (VersionFactory, bool) { - vfm.RLock() - defer vfm.RUnlock() - - semverToMatch, err := semver.Parse(version) - if err != nil { - log.Logger.Error(err) - return nil, false - } - - //will return first function that matches - for k, v := range vfm.versionFactories { - semverRange, err := semver.ParseRange(k) - if err != nil { - log.Logger.Error(err) - return nil, false - } - - if semverRange(semverToMatch) { - return v, true - } - } - return nil, false -} - -func (vfm *versionFactoryMap) Set(constraint string, vf VersionFactory) { - vfm.Lock() - defer vfm.Unlock() - - if _, err := semver.ParseRange(constraint); err != nil { - log.Logger.Error(err) - return - } - - vfm.versionFactories[constraint] = vf -} - -var SemVerToFacFnMap = &versionFactoryMap{versionFactories: make(map[string]VersionFactory)} +var SemVerToFacFnMap = &util.VersionFactoryMap{VersionFactories: make(map[string]util.VersionFactory)} func (rt BaseRekordType) UnmarshalEntry(pe models.ProposedEntry) (types.EntryImpl, error) { rekord, ok := pe.(*models.Rekord) diff --git a/pkg/types/rekord/rekord_test.go b/pkg/types/rekord/rekord_test.go index 42ff5f5..fa9b4e9 100644 --- a/pkg/types/rekord/rekord_test.go +++ b/pkg/types/rekord/rekord_test.go @@ -72,7 +72,7 @@ func (u UnmarshalFailsTester) Unmarshal(pe models.ProposedEntry) error { func TestRekordType(t *testing.T) { // empty to start - if len(SemVerToFacFnMap.versionFactories) != 0 { + if len(SemVerToFacFnMap.VersionFactories) != 0 { t.Error("semver range was not blank at start of test") } @@ -80,13 +80,13 @@ func TestRekordType(t *testing.T) { // ensure semver range parser is working invalidSemVerRange := "not a valid semver range" SemVerToFacFnMap.Set(invalidSemVerRange, u.NewEntry) - if len(SemVerToFacFnMap.versionFactories) > 0 { + if len(SemVerToFacFnMap.VersionFactories) > 0 { t.Error("invalid semver range was incorrectly added to SemVerToFacFnMap") } // valid semver range can be parsed SemVerToFacFnMap.Set(">= 1.2.3", u.NewEntry) - if len(SemVerToFacFnMap.versionFactories) != 1 { + if len(SemVerToFacFnMap.VersionFactories) != 1 { t.Error("valid semver range was not added to SemVerToFacFnMap") } diff --git a/pkg/types/rpm/rpm.go b/pkg/types/rpm/rpm.go new file mode 100644 index 0000000..3ababa5 --- /dev/null +++ b/pkg/types/rpm/rpm.go @@ -0,0 +1,66 @@ +/* +Copyright © 2021 Bob Callaway <bcallawa@redhat.com> + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ +package rpm + +import ( + "errors" + "fmt" + + "github.com/projectrekor/rekor/pkg/types" + "github.com/projectrekor/rekor/pkg/util" + + "github.com/go-openapi/swag" + "github.com/projectrekor/rekor/pkg/generated/models" +) + +const ( + KIND = "rpm" +) + +type BaseRPMType struct{} + +func (rt BaseRPMType) Kind() string { + return KIND +} + +func init() { + types.TypeMap.Set(KIND, New) +} + +func New() types.TypeImpl { + return &BaseRPMType{} +} + +var SemVerToFacFnMap = &util.VersionFactoryMap{VersionFactories: make(map[string]util.VersionFactory)} + +func (rt BaseRPMType) UnmarshalEntry(pe models.ProposedEntry) (types.EntryImpl, error) { + rpm, ok := pe.(*models.Rpm) + if !ok { + return nil, errors.New("cannot unmarshal non-RPM types") + } + + if genFn, found := SemVerToFacFnMap.Get(swag.StringValue(rpm.APIVersion)); found { + entry := genFn() + if entry == nil { + return nil, fmt.Errorf("failure generating RPM object for version '%v'", rpm.APIVersion) + } + if err := entry.Unmarshal(rpm); err != nil { + return nil, err + } + return entry, nil + } + return nil, fmt.Errorf("RPMType implementation for version '%v' not found", swag.StringValue(rpm.APIVersion)) +} diff --git a/pkg/types/rpm/rpm_schema.json b/pkg/types/rpm/rpm_schema.json new file mode 100644 index 0000000..b5f017e --- /dev/null +++ b/pkg/types/rpm/rpm_schema.json @@ -0,0 +1,12 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "http://rekor.dev/types/rpm/rpm_schema.json", + "title": "RPM Schema", + "description": "Schema for RPM objects", + "type": "object", + "oneOf": [ + { + "$ref": "v0.0.1/rpm_v0_0_1_schema.json" + } + ] +} diff --git a/pkg/types/rpm/rpm_test.go b/pkg/types/rpm/rpm_test.go new file mode 100644 index 0000000..f7dd4d5 --- /dev/null +++ b/pkg/types/rpm/rpm_test.go @@ -0,0 +1,120 @@ +/* +Copyright © 2021 Bob Callaway <bcallawa@redhat.com> + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package rpm + +import ( + "context" + "errors" + "testing" + + "github.com/go-openapi/swag" + "github.com/projectrekor/rekor/pkg/generated/models" + "github.com/projectrekor/rekor/pkg/types" +) + +type UnmarshalTester struct { + models.Rpm +} + +func (u UnmarshalTester) NewEntry() types.EntryImpl { + return &UnmarshalTester{} +} + +func (u UnmarshalTester) APIVersion() string { + return "2.0.1" +} + +func (u UnmarshalTester) IndexKeys() []string { + return []string{} +} + +func (u UnmarshalTester) Canonicalize(ctx context.Context) ([]byte, error) { + return nil, nil +} + +func (u UnmarshalTester) HasExternalEntities() bool { + return false +} + +func (u *UnmarshalTester) FetchExternalEntities(ctx context.Context) error { + return nil +} + +func (u UnmarshalTester) Unmarshal(pe models.ProposedEntry) error { + return nil +} + +type UnmarshalFailsTester struct { + UnmarshalTester +} + +func (u UnmarshalFailsTester) NewEntry() types.EntryImpl { + return &UnmarshalFailsTester{} +} + +func (u UnmarshalFailsTester) Unmarshal(pe models.ProposedEntry) error { + return errors.New("error") +} + +func TestRPMType(t *testing.T) { + // empty to start + if len(SemVerToFacFnMap.VersionFactories) != 0 { + t.Error("semver range was not blank at start of test") + } + + u := UnmarshalTester{} + // ensure semver range parser is working + invalidSemVerRange := "not a valid semver range" + SemVerToFacFnMap.Set(invalidSemVerRange, u.NewEntry) + if len(SemVerToFacFnMap.VersionFactories) > 0 { + t.Error("invalid semver range was incorrectly added to SemVerToFacFnMap") + } + + // valid semver range can be parsed + SemVerToFacFnMap.Set(">= 1.2.3", u.NewEntry) + if len(SemVerToFacFnMap.VersionFactories) != 1 { + t.Error("valid semver range was not added to SemVerToFacFnMap") + } + + u.Rpm.APIVersion = swag.String("2.0.1") + brt := BaseRPMType{} + + // version requested matches implementation in map + if _, err := brt.UnmarshalEntry(&u.Rpm); err != nil { + t.Errorf("unexpected error in Unmarshal: %v", err) + } + + // version requested fails to match implementation in map + u.Rpm.APIVersion = swag.String("1.2.2") + if _, err := brt.UnmarshalEntry(&u.Rpm); err == nil { + t.Error("unexpected success in Unmarshal for non-matching version") + } + + // error in Unmarshal call is raised appropriately + u.Rpm.APIVersion = swag.String("2.2.0") + u2 := UnmarshalFailsTester{} + SemVerToFacFnMap.Set(">= 1.2.3", u2.NewEntry) + if _, err := brt.UnmarshalEntry(&u.Rpm); err == nil { + t.Error("unexpected success in Unmarshal when error is thrown") + } + + // version requested fails to match implementation in map + u.Rpm.APIVersion = swag.String("not_a_version") + if _, err := brt.UnmarshalEntry(&u.Rpm); err == nil { + t.Error("unexpected success in Unmarshal for invalid version") + } +} diff --git a/pkg/types/rpm/v0.0.1/entry.go b/pkg/types/rpm/v0.0.1/entry.go new file mode 100644 index 0000000..b0dc377 --- /dev/null +++ b/pkg/types/rpm/v0.0.1/entry.go @@ -0,0 +1,394 @@ +/* +Copyright © 2021 Bob Callaway <bcallawa@redhat.com> + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ +package rpm + +import ( + "context" + "crypto/sha256" + "encoding/base64" + "encoding/hex" + "encoding/json" + "errors" + "fmt" + "io" + "io/ioutil" + "reflect" + "strconv" + "strings" + + "github.com/projectrekor/rekor/pkg/log" + "github.com/projectrekor/rekor/pkg/pki/pgp" + "github.com/projectrekor/rekor/pkg/types" + "github.com/projectrekor/rekor/pkg/types/rpm" + "github.com/projectrekor/rekor/pkg/util" + + "github.com/asaskevich/govalidator" + + "github.com/go-openapi/strfmt" + + "github.com/projectrekor/rekor/pkg/pki" + + rpmutils "github.com/cavaliercoder/go-rpm" + "github.com/go-openapi/swag" + "github.com/mitchellh/mapstructure" + "github.com/projectrekor/rekor/pkg/generated/models" + "golang.org/x/sync/errgroup" +) + +const ( + APIVERSION = "0.0.1" +) + +func init() { + rpm.SemVerToFacFnMap.Set(APIVERSION, NewEntry) +} + +type V001Entry struct { + RPMModel models.RpmV001Schema + fetchedExternalEntities bool + keyObj pki.PublicKey + rpmObj *rpmutils.PackageFile +} + +func (v V001Entry) APIVersion() string { + return APIVERSION +} + +func NewEntry() types.EntryImpl { + return &V001Entry{} +} + +func Base64StringtoByteArray() mapstructure.DecodeHookFunc { + return func(f reflect.Type, t reflect.Type, data interface{}) (interface{}, error) { + if f.Kind() != reflect.String || t.Kind() != reflect.Slice { + return data, nil + } + + bytes, err := base64.StdEncoding.DecodeString(data.(string)) + if err != nil { + return []byte{}, fmt.Errorf("failed parsing base64 data: %v", err) + } + return bytes, nil + } +} + +func (v V001Entry) IndexKeys() []string { + var result []string + + if v.HasExternalEntities() { + if err := v.FetchExternalEntities(context.Background()); err != nil { + log.Logger.Error(err) + return result + } + } + + key, err := v.keyObj.CanonicalValue() + if err != nil { + log.Logger.Error(err) + } else { + hasher := sha256.New() + if _, err := hasher.Write(key); err != nil { + log.Logger.Error(err) + } else { + result = append(result, strings.ToLower(hex.EncodeToString(hasher.Sum(nil)))) + } + } + + if v.RPMModel.Package.Hash != nil { + result = append(result, strings.ToLower(swag.StringValue(v.RPMModel.Package.Hash.Value))) + } + + return result +} + +func (v *V001Entry) Unmarshal(pe models.ProposedEntry) error { + rpm, ok := pe.(*models.Rpm) + if !ok { + return errors.New("cannot unmarshal non RPM v0.0.1 type") + } + + cfg := mapstructure.DecoderConfig{ + DecodeHook: Base64StringtoByteArray(), + Result: &v.RPMModel, + } + + dec, err := mapstructure.NewDecoder(&cfg) + if err != nil { + return fmt.Errorf("error initializing decoder: %w", err) + } + + if err := dec.Decode(rpm.Spec); err != nil { + return err + } + // field validation + if err := v.RPMModel.Validate(strfmt.Default); err != nil { + return err + } + // cross field validation + return v.Validate() + +} + +func (v V001Entry) HasExternalEntities() bool { + if v.fetchedExternalEntities { + return false + } + + if v.RPMModel.Package != nil && v.RPMModel.Package.URL.String() != "" { + return true + } + if v.RPMModel.PublicKey != nil && v.RPMModel.PublicKey.URL.String() != "" { + return true + } + return false +} + +func (v *V001Entry) FetchExternalEntities(ctx context.Context) error { + if v.fetchedExternalEntities { + return nil + } + + if err := v.Validate(); err != nil { + return err + } + + g, ctx := errgroup.WithContext(ctx) + + hashR, hashW := io.Pipe() + sigR, sigW := io.Pipe() + rpmR, rpmW := io.Pipe() + defer hashR.Close() + defer sigR.Close() + defer rpmR.Close() + + closePipesOnError := func(err error) error { + pipeReaders := []*io.PipeReader{hashR, sigR, rpmR} + pipeWriters := []*io.PipeWriter{hashW, sigW, rpmW} + for idx := range pipeReaders { + if e := pipeReaders[idx].CloseWithError(err); e != nil { + log.Logger.Error(fmt.Errorf("error closing pipe: %w", e)) + } + if e := pipeWriters[idx].CloseWithError(err); e != nil { + log.Logger.Error(fmt.Errorf("error closing pipe: %w", e)) + } + } + return err + } + + oldSHA := "" + if v.RPMModel.Package.Hash != nil && v.RPMModel.Package.Hash.Value != nil { + oldSHA = swag.StringValue(v.RPMModel.Package.Hash.Value) + } + artifactFactory := pki.NewArtifactFactory("pgp") + + g.Go(func() error { + defer hashW.Close() + defer sigW.Close() + defer rpmW.Close() + + dataReadCloser, err := util.FileOrURLReadCloser(ctx, v.RPMModel.Package.URL.String(), v.RPMModel.Package.Content, true) + if err != nil { + return closePipesOnError(err) + } + defer dataReadCloser.Close() + + /* #nosec G110 */ + if _, err := io.Copy(io.MultiWriter(hashW, sigW, rpmW), dataReadCloser); err != nil { + return closePipesOnError(err) + } + return nil + }) + + hashResult := make(chan string) + + g.Go(func() error { + defer close(hashResult) + hasher := sha256.New() + + if _, err := io.Copy(hasher, hashR); err != nil { + return closePipesOnError(err) + } + + computedSHA := hex.EncodeToString(hasher.Sum(nil)) + if oldSHA != "" && computedSHA != oldSHA { + return closePipesOnError(fmt.Errorf("SHA mismatch: %s != %s", computedSHA, oldSHA)) + } + + select { + case <-ctx.Done(): + return ctx.Err() + case hashResult <- computedSHA: + return nil + } + }) + + g.Go(func() error { + keyReadCloser, err := util.FileOrURLReadCloser(ctx, v.RPMModel.PublicKey.URL.String(), + v.RPMModel.PublicKey.Content, false) + if err != nil { + return closePipesOnError(err) + } + defer keyReadCloser.Close() + + v.keyObj, err = artifactFactory.NewPublicKey(keyReadCloser) + if err != nil { + return closePipesOnError(err) + } + + keyring, err := v.keyObj.(*pgp.PublicKey).KeyRing() + if err != nil { + return closePipesOnError(err) + } + + if _, err := rpmutils.GPGCheck(sigR, keyring); err != nil { + return closePipesOnError(err) + } + + select { + case <-ctx.Done(): + return ctx.Err() + default: + return nil + } + }) + + g.Go(func() error { + + var err error + v.rpmObj, err = rpmutils.ReadPackageFile(rpmR) + if err != nil { + return closePipesOnError(err) + } + //ReadPackageFile does not drain the entire reader so we need to discard the rest + if _, err = io.Copy(ioutil.Discard, rpmR); err != nil { + return closePipesOnError(err) + } + + select { + case <-ctx.Done(): + return ctx.Err() + default: + return nil + } + }) + + computedSHA := <-hashResult + + if err := g.Wait(); err != nil { + return err + } + + // if we get here, all goroutines succeeded without error + if oldSHA == "" { + v.RPMModel.Package.Hash = &models.RpmV001SchemaPackageHash{} + v.RPMModel.Package.Hash.Algorithm = swag.String(models.RpmV001SchemaPackageHashAlgorithmSha256) + v.RPMModel.Package.Hash.Value = swag.String(computedSHA) + } + + v.fetchedExternalEntities = true + return nil +} + +func (v *V001Entry) Canonicalize(ctx context.Context) ([]byte, error) { + if err := v.FetchExternalEntities(ctx); err != nil { + return nil, err + } + if v.keyObj == nil { + return nil, errors.New("key object not initialized before canonicalization") + } + + canonicalEntry := models.RpmV001Schema{} + canonicalEntry.ExtraData = v.RPMModel.ExtraData + + var err error + // need to canonicalize key content + canonicalEntry.PublicKey = &models.RpmV001SchemaPublicKey{} + canonicalEntry.PublicKey.Content, err = v.keyObj.CanonicalValue() + if err != nil { + return nil, err + } + + canonicalEntry.Package = &models.RpmV001SchemaPackage{} + canonicalEntry.Package.Hash = &models.RpmV001SchemaPackageHash{} + canonicalEntry.Package.Hash.Algorithm = v.RPMModel.Package.Hash.Algorithm + canonicalEntry.Package.Hash.Value = v.RPMModel.Package.Hash.Value + // data content is not set deliberately + + // set NEVRA headers + canonicalEntry.Package.Headers = make(map[string]string) + canonicalEntry.Package.Headers["Name"] = v.rpmObj.Name() + canonicalEntry.Package.Headers["Epoch"] = strconv.Itoa(v.rpmObj.Epoch()) + canonicalEntry.Package.Headers["Version"] = v.rpmObj.Version() + canonicalEntry.Package.Headers["Release"] = v.rpmObj.Release() + canonicalEntry.Package.Headers["Architecture"] = v.rpmObj.Architecture() + if md5sum := v.rpmObj.GetBytes(0, 1004); md5sum != nil { + canonicalEntry.Package.Headers["RPMSIGTAG_MD5"] = hex.EncodeToString(md5sum) + } + if sha1sum := v.rpmObj.GetBytes(0, 1012); sha1sum != nil { + canonicalEntry.Package.Headers["RPMSIGTAG_SHA1"] = hex.EncodeToString(sha1sum) + } + if sha256sum := v.rpmObj.GetBytes(0, 1016); sha256sum != nil { + canonicalEntry.Package.Headers["RPMSIGTAG_SHA256"] = hex.EncodeToString(sha256sum) + } + + // ExtraData is copied through unfiltered + canonicalEntry.ExtraData = v.RPMModel.ExtraData + + // wrap in valid object with kind and apiVersion set + rpm := models.Rpm{} + rpm.APIVersion = swag.String(APIVERSION) + rpm.Spec = &canonicalEntry + + bytes, err := json.Marshal(&rpm) + if err != nil { + return nil, err + } + + return bytes, nil +} + +//Validate performs cross-field validation for fields in object +func (v V001Entry) Validate() error { + key := v.RPMModel.PublicKey + if key == nil { + return errors.New("missing public key") + } + if len(key.Content) == 0 && key.URL.String() == "" { + return errors.New("one of 'content' or 'url' must be specified for publicKey") + } + + pkg := v.RPMModel.Package + if pkg == nil { + return errors.New("missing package") + } + + if len(pkg.Content) == 0 && pkg.URL.String() == "" { + return errors.New("one of 'content' or 'url' must be specified for package") + } + + hash := pkg.Hash + if pkg.URL.String() != "" && hash == nil { + return errors.New("hash must be specified if 'url' is present for package") + } + + if hash != nil { + if !govalidator.IsHash(swag.StringValue(hash.Value), swag.StringValue(hash.Algorithm)) { + return errors.New("invalid value for hash") + } + } + + return nil +} diff --git a/pkg/types/rpm/v0.0.1/entry_test.go b/pkg/types/rpm/v0.0.1/entry_test.go new file mode 100644 index 0000000..0fb39a9 --- /dev/null +++ b/pkg/types/rpm/v0.0.1/entry_test.go @@ -0,0 +1,387 @@ +/* +Copyright © 2021 Bob Callaway <bcallawa@redhat.com> + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package rpm + +import ( + "context" + "crypto/sha256" + "encoding/hex" + "errors" + "io/ioutil" + "net/http" + "net/http/httptest" + "reflect" + "testing" + + "github.com/go-openapi/strfmt" + "github.com/go-openapi/swag" + "github.com/projectrekor/rekor/pkg/generated/models" + "go.uber.org/goleak" +) + +func TestMain(m *testing.M) { + goleak.VerifyTestMain(m) +} + +func TestNewEntryReturnType(t *testing.T) { + entry := NewEntry() + if reflect.TypeOf(entry) != reflect.ValueOf(&V001Entry{}).Type() { + t.Errorf("invalid type returned from NewEntry: %T", entry) + } +} + +func TestCrossFieldValidation(t *testing.T) { + type TestCase struct { + caseDesc string + entry V001Entry + hasExtEntities bool + expectUnmarshalSuccess bool + expectCanonicalizeSuccess bool + } + + keyBytes, _ := ioutil.ReadFile("../../../../tests/test_rpm_public_key.key") + dataBytes, _ := ioutil.ReadFile("../../../../tests/test.rpm") + + h := sha256.New() + _, _ = h.Write(dataBytes) + dataSHA := hex.EncodeToString(h.Sum(nil)) + + testServer := httptest.NewServer(http.HandlerFunc( + func(w http.ResponseWriter, r *http.Request) { + file := &keyBytes + var err error + + switch r.URL.Path { + case "/key": + file = &keyBytes + case "/data": + file = &dataBytes + default: + err = errors.New("unknown URL") + } + if err != nil { + w.WriteHeader(http.StatusNotFound) + return + } + w.WriteHeader(http.StatusOK) + _, _ = w.Write(*file) + })) + defer testServer.Close() + + testCases := []TestCase{ + { + caseDesc: "empty obj", + entry: V001Entry{}, + expectUnmarshalSuccess: false, + }, + { + caseDesc: "public key without url or content", + entry: V001Entry{ + RPMModel: models.RpmV001Schema{ + PublicKey: &models.RpmV001SchemaPublicKey{}, + }, + }, + expectUnmarshalSuccess: false, + }, + { + caseDesc: "public key without package", + entry: V001Entry{ + RPMModel: models.RpmV001Schema{ + PublicKey: &models.RpmV001SchemaPublicKey{ + URL: strfmt.URI(testServer.URL + "/key"), + }, + }, + }, + hasExtEntities: true, + expectUnmarshalSuccess: false, + }, + { + caseDesc: "public key with empty package", + entry: V001Entry{ + RPMModel: models.RpmV001Schema{ + PublicKey: &models.RpmV001SchemaPublicKey{ + URL: strfmt.URI(testServer.URL + "/key"), + }, + Package: &models.RpmV001SchemaPackage{}, + }, + }, + hasExtEntities: true, + expectUnmarshalSuccess: false, + }, + { + caseDesc: "public key with data & url but no hash", + entry: V001Entry{ + RPMModel: models.RpmV001Schema{ + PublicKey: &models.RpmV001SchemaPublicKey{ + URL: strfmt.URI(testServer.URL + "/key"), + }, + Package: &models.RpmV001SchemaPackage{ + URL: strfmt.URI(testServer.URL + "/data"), + }, + }, + }, + hasExtEntities: true, + expectUnmarshalSuccess: false, + }, + { + caseDesc: "public key with data & url and empty hash", + entry: V001Entry{ + RPMModel: models.RpmV001Schema{ + PublicKey: &models.RpmV001SchemaPublicKey{ + URL: strfmt.URI(testServer.URL + "/key"), + }, + Package: &models.RpmV001SchemaPackage{ + Hash: &models.RpmV001SchemaPackageHash{}, + URL: strfmt.URI(testServer.URL + "/data"), + }, + }, + }, + hasExtEntities: true, + expectUnmarshalSuccess: false, + }, + { + caseDesc: "public key with data & url and hash missing value", + entry: V001Entry{ + RPMModel: models.RpmV001Schema{ + PublicKey: &models.RpmV001SchemaPublicKey{ + URL: strfmt.URI(testServer.URL + "/key"), + }, + Package: &models.RpmV001SchemaPackage{ + Hash: &models.RpmV001SchemaPackageHash{ + Algorithm: swag.String(models.RpmV001SchemaPackageHashAlgorithmSha256), + }, + URL: strfmt.URI(testServer.URL + "/data"), + }, + }, + }, + hasExtEntities: true, + expectUnmarshalSuccess: false, + }, + { + caseDesc: "public key with data & url with 404 error on key", + entry: V001Entry{ + RPMModel: models.RpmV001Schema{ + PublicKey: &models.RpmV001SchemaPublicKey{ + URL: strfmt.URI(testServer.URL + "/404"), + }, + Package: &models.RpmV001SchemaPackage{ + Hash: &models.RpmV001SchemaPackageHash{ + Algorithm: swag.String(models.RpmV001SchemaPackageHashAlgorithmSha256), + Value: swag.String(dataSHA), + }, + URL: strfmt.URI(testServer.URL + "/data"), + }, + }, + }, + hasExtEntities: true, + expectUnmarshalSuccess: true, + expectCanonicalizeSuccess: false, + }, + { + caseDesc: "public key with data & url with 404 error on data", + entry: V001Entry{ + RPMModel: models.RpmV001Schema{ + PublicKey: &models.RpmV001SchemaPublicKey{ + URL: strfmt.URI(testServer.URL + "/key"), + }, + Package: &models.RpmV001SchemaPackage{ + Hash: &models.RpmV001SchemaPackageHash{ + Algorithm: swag.String(models.RpmV001SchemaPackageHashAlgorithmSha256), + Value: swag.String(dataSHA), + }, + URL: strfmt.URI(testServer.URL + "/404"), + }, + }, + }, + hasExtEntities: true, + expectUnmarshalSuccess: true, + expectCanonicalizeSuccess: false, + }, + { + caseDesc: "public key with invalid key content & with data with content", + entry: V001Entry{ + RPMModel: models.RpmV001Schema{ + PublicKey: &models.RpmV001SchemaPublicKey{ + Content: strfmt.Base64(dataBytes), + }, + Package: &models.RpmV001SchemaPackage{ + Content: strfmt.Base64(dataBytes), + }, + }, + }, + hasExtEntities: false, + expectUnmarshalSuccess: true, + expectCanonicalizeSuccess: false, + }, + { + caseDesc: "public key with data & url and incorrect hash value", + entry: V001Entry{ + RPMModel: models.RpmV001Schema{ + PublicKey: &models.RpmV001SchemaPublicKey{ + URL: strfmt.URI(testServer.URL + "/key"), + }, + Package: &models.RpmV001SchemaPackage{ + Hash: &models.RpmV001SchemaPackageHash{ + Algorithm: swag.String(models.RpmV001SchemaPackageHashAlgorithmSha256), + Value: swag.String("3030303030303030303030303030303030303030303030303030303030303030"), + }, + URL: strfmt.URI(testServer.URL + "/data"), + }, + }, + }, + hasExtEntities: true, + expectUnmarshalSuccess: true, + expectCanonicalizeSuccess: false, + }, + { + caseDesc: "public key with data & url and complete hash value", + entry: V001Entry{ + RPMModel: models.RpmV001Schema{ + PublicKey: &models.RpmV001SchemaPublicKey{ + URL: strfmt.URI(testServer.URL + "/key"), + }, + Package: &models.RpmV001SchemaPackage{ + Hash: &models.RpmV001SchemaPackageHash{ + Algorithm: swag.String(models.RpmV001SchemaPackageHashAlgorithmSha256), + Value: swag.String(dataSHA), + }, + URL: strfmt.URI(testServer.URL + "/data"), + }, + }, + }, + hasExtEntities: true, + expectUnmarshalSuccess: true, + expectCanonicalizeSuccess: true, + }, + { + caseDesc: "public key with url key & with data with url and complete hash value", + entry: V001Entry{ + RPMModel: models.RpmV001Schema{ + PublicKey: &models.RpmV001SchemaPublicKey{ + URL: strfmt.URI(testServer.URL + "/key"), + }, + Package: &models.RpmV001SchemaPackage{ + Hash: &models.RpmV001SchemaPackageHash{ + Algorithm: swag.String(models.RpmV001SchemaPackageHashAlgorithmSha256), + Value: swag.String(dataSHA), + }, + URL: strfmt.URI(testServer.URL + "/data"), + }, + }, + }, + hasExtEntities: true, + expectUnmarshalSuccess: true, + expectCanonicalizeSuccess: true, + }, + { + caseDesc: "public key with key content & with data with url and complete hash value", + entry: V001Entry{ + RPMModel: models.RpmV001Schema{ + PublicKey: &models.RpmV001SchemaPublicKey{ + Content: strfmt.Base64(keyBytes), + }, + Package: &models.RpmV001SchemaPackage{ + Hash: &models.RpmV001SchemaPackageHash{ + Algorithm: swag.String(models.RpmV001SchemaPackageHashAlgorithmSha256), + Value: swag.String(dataSHA), + }, + URL: strfmt.URI(testServer.URL + "/data"), + }, + }, + }, + hasExtEntities: true, + expectUnmarshalSuccess: true, + expectCanonicalizeSuccess: true, + }, + { + caseDesc: "public key with key content & with data with url and complete hash value", + entry: V001Entry{ + RPMModel: models.RpmV001Schema{ + PublicKey: &models.RpmV001SchemaPublicKey{ + Content: strfmt.Base64(keyBytes), + }, + Package: &models.RpmV001SchemaPackage{ + Hash: &models.RpmV001SchemaPackageHash{ + Algorithm: swag.String(models.RpmV001SchemaPackageHashAlgorithmSha256), + Value: swag.String(dataSHA), + }, + URL: strfmt.URI(testServer.URL + "/data"), + }, + }, + }, + hasExtEntities: true, + expectUnmarshalSuccess: true, + expectCanonicalizeSuccess: true, + }, + { + caseDesc: "public key with key content & with data with content", + entry: V001Entry{ + RPMModel: models.RpmV001Schema{ + PublicKey: &models.RpmV001SchemaPublicKey{ + Content: strfmt.Base64(keyBytes), + }, + Package: &models.RpmV001SchemaPackage{ + Content: strfmt.Base64(dataBytes), + }, + }, + }, + hasExtEntities: false, + expectUnmarshalSuccess: true, + expectCanonicalizeSuccess: true, + }, + { + caseDesc: "valid obj with extradata", + entry: V001Entry{ + RPMModel: models.RpmV001Schema{ + PublicKey: &models.RpmV001SchemaPublicKey{ + Content: strfmt.Base64(keyBytes), + }, + Package: &models.RpmV001SchemaPackage{ + Content: strfmt.Base64(dataBytes), + }, + ExtraData: []byte("{\"something\": \"here\""), + }, + }, + hasExtEntities: false, + expectUnmarshalSuccess: true, + expectCanonicalizeSuccess: true, + }, + } + + for _, tc := range testCases { + if err := tc.entry.Validate(); (err == nil) != tc.expectUnmarshalSuccess { + t.Errorf("unexpected result in '%v': %v", tc.caseDesc, err) + } + + v := &V001Entry{} + r := models.Rpm{ + APIVersion: swag.String(tc.entry.APIVersion()), + Spec: tc.entry.RPMModel, + } + if err := v.Unmarshal(&r); (err == nil) != tc.expectUnmarshalSuccess { + t.Errorf("unexpected result in '%v': %v", tc.caseDesc, err) + } + + if tc.entry.HasExternalEntities() != tc.hasExtEntities { + t.Errorf("unexpected result from HasExternalEntities for '%v'", tc.caseDesc) + } + + if _, err := tc.entry.Canonicalize(context.TODO()); (err == nil) != tc.expectCanonicalizeSuccess { + t.Errorf("unexpected result from Canonicalize for '%v': %v", tc.caseDesc, err) + } + } +} diff --git a/pkg/types/rpm/v0.0.1/rpm_v0_0_1_schema.json b/pkg/types/rpm/v0.0.1/rpm_v0_0_1_schema.json new file mode 100644 index 0000000..cacd8f6 --- /dev/null +++ b/pkg/types/rpm/v0.0.1/rpm_v0_0_1_schema.json @@ -0,0 +1,86 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "http://rekor.dev/types/rpm/rpm_v0_0_1_schema.json", + "title": "RPM v0.0.1 Schema", + "description": "Schema for RPM entries", + "type": "object", + "properties": { + "publicKey" : { + "description": "The PGP public key that can verify the RPM signature", + "type": "object", + "properties": { + "url": { + "description": "Specifies the location of the public key", + "type": "string", + "format": "uri" + }, + "content": { + "description": "Specifies the content of the public key inline within the document", + "type": "string", + "format": "byte" + } + }, + "oneOf": [ + { + "required": [ "url" ] + }, + { + "required": [ "content" ] + } + ] + }, + "package": { + "description": "Information about the package associated with the entry", + "type": "object", + "properties": { + "headers": { + "description": "Values of the RPM headers", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "hash": { + "description": "Specifies the hash algorithm and value for the package", + "type": "object", + "properties": { + "algorithm": { + "description": "The hashing function used to compute the hash value", + "type": "string", + "enum": [ "sha256" ] + }, + "value": { + "description": "The hash value for the package", + "type": "string" + } + }, + "required": [ "algorithm", "value" ] + }, + "url": { + "description": "Specifies the location of the package; if this is specified, a hash value must also be provided", + "type": "string", + "format": "uri" + }, + "content": { + "description": "Specifies the package inline within the document", + "type": "string", + "format": "byte" + } + }, + "oneOf": [ + { + "required": [ "hash", "url" ] + }, + { + "required": [ "content" ] + } + ] + }, + "extraData": { + "description": "Arbitrary content to be included in the verifiable entry in the transparency log", + "type": "object", + "additionalProperties": true + } + }, + "required": [ "publicKey", "package" ] +} diff --git a/pkg/util/types.go b/pkg/util/types.go new file mode 100644 index 0000000..dc1a1f4 --- /dev/null +++ b/pkg/util/types.go @@ -0,0 +1,69 @@ +/* +Copyright © 2021 Bob Callaway <bcallawa@redhat.com> + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ +package util + +import ( + "sync" + + "github.com/blang/semver" + "github.com/projectrekor/rekor/pkg/log" + "github.com/projectrekor/rekor/pkg/types" +) + +type VersionFactory func() types.EntryImpl + +type VersionFactoryMap struct { + VersionFactories map[string]VersionFactory + + sync.RWMutex +} + +func (vfm *VersionFactoryMap) Get(version string) (VersionFactory, bool) { + vfm.RLock() + defer vfm.RUnlock() + + semverToMatch, err := semver.Parse(version) + if err != nil { + log.Logger.Error(err) + return nil, false + } + + //will return first function that matches + for k, v := range vfm.VersionFactories { + semverRange, err := semver.ParseRange(k) + if err != nil { + log.Logger.Error(err) + return nil, false + } + + if semverRange(semverToMatch) { + return v, true + } + } + return nil, false +} + +func (vfm *VersionFactoryMap) Set(constraint string, vf VersionFactory) { + vfm.Lock() + defer vfm.Unlock() + + if _, err := semver.ParseRange(constraint); err != nil { + log.Logger.Error(err) + return + } + + vfm.VersionFactories[constraint] = vf +} diff --git a/tests/e2e_test.go b/tests/e2e_test.go index 192d4b5..aba5d13 100644 --- a/tests/e2e_test.go +++ b/tests/e2e_test.go @@ -38,7 +38,7 @@ func TestDuplicates(t *testing.T) { outputContains(t, out, "Created entry at") } -func TestUploadVerify(t *testing.T) { +func TestUploadVerifyRekord(t *testing.T) { // Create a random artifact and sign it. artifactPath := filepath.Join(t.TempDir(), "artifact") @@ -67,6 +67,34 @@ func TestUploadVerify(t *testing.T) { outputContains(t, out, "Inclusion Proof:") } +func TestUploadVerifyRpm(t *testing.T) { + + // Create a random rpm and sign it. + rpmPath := filepath.Join("rpm") + + createSignedRpm(t, rpmPath) + + // Write the public key to a file + pubPath := filepath.Join(t.TempDir(), "pubKey.asc") + if err := ioutil.WriteFile(pubPath, []byte(publicKey), 0644); err != nil { + t.Fatal(err) + } + + // Verify should fail initially + runCliErr(t, "verify", "--type=rpm", "--artifact", rpmPath, "--public-key", pubPath) + + // It should upload successfully. + out := runCli(t, "upload", "--type=rpm", "--artifact", rpmPath, "--public-key", pubPath) + outputContains(t, out, "Created entry at") + + // We have to wait some time for the log to get signed and included. + time.Sleep(3 * time.Second) + + // Now we should be able to verify it. + out = runCli(t, "verify", "--type=rpm", "--artifact", rpmPath, "--public-key", pubPath) + outputContains(t, out, "Inclusion Proof:") +} + func TestLogInfo(t *testing.T) { // TODO: figure out some way to check the length, add something, and make sure the length increments! out := runCli(t, "loginfo") diff --git a/tests/pgp.go b/tests/pgp.go index 19a9b69..cdf0f2d 100644 --- a/tests/pgp.go +++ b/tests/pgp.go @@ -4,7 +4,6 @@ package e2e import ( "bytes" - "io" "io/ioutil" "strings" "testing" @@ -150,13 +149,12 @@ func init() { } } -func Sign(t *testing.T, m io.Reader) []byte { - t.Helper() - var b bytes.Buffer - if err := openpgp.ArmoredDetachSign(&b, keys[0], m, nil); err != nil { - t.Fatal(err) +func Sign(b []byte) ([]byte, error) { + var buf bytes.Buffer + if err := openpgp.DetachSign(&buf, keys[0], bytes.NewReader(b), nil); err != nil { + return nil, err } - return b.Bytes() + return buf.Bytes(), nil } // createdSignedArtifact gets the test dir setup correctly with some random artifacts and keys. @@ -165,7 +163,10 @@ func createdSignedArtifact(t *testing.T, artifactPath, sigPath string) { artifact := createArtifact(t, artifactPath) // Sign it with our key and write that to a file - signature := Sign(t, strings.NewReader(artifact)) + signature, err := Sign([]byte(artifact)) + if err != nil { + t.Fatal(err) + } if err := ioutil.WriteFile(sigPath, []byte(signature), 0644); err != nil { t.Fatal(err) } diff --git a/tests/rpm.go b/tests/rpm.go new file mode 100644 index 0000000..b14fe5c --- /dev/null +++ b/tests/rpm.go @@ -0,0 +1,77 @@ +// +build e2e + +/* +Copyright © 2021 Bob Callaway <bcallawa@redhat.com> + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ +package e2e + +import ( + "bytes" + "io/ioutil" + "math/rand" + "os" + "testing" + + "github.com/google/rpmpack" +) + +func randomRpmSuffix() string { + const letterBytes = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" + + b := make([]byte, 16) + for i := range b { + b[i] = letterBytes[rand.Intn(len(letterBytes))] + } + return string(b) +} + +func createSignedRpm(t *testing.T, artifactPath string) { + t.Helper() + + rpmMetadata := rpmpack.RPMMetaData{ + Name: "test-rpm-" + randomRpmSuffix(), + Epoch: 0, + Version: "1", + Release: "2", + Arch: "x86_64", + } + rpm, err := rpmpack.NewRPM(rpmMetadata) + if err != nil { + t.Error(err) + } + + rpm.SetPGPSigner(Sign) + + data, err := randomData(100) + if err != nil { + t.Fatal(err) + } + + rpm.AddFile(rpmpack.RPMFile{ + Name: randomRpmSuffix(), + Body: data, + Type: rpmpack.GenericFile, + Owner: "testOwner", + Group: "testGroup", + }) + + rpmBuf := bytes.Buffer{} + if err := rpm.Write(&rpmBuf); err != nil { + t.Fatal(err) + } + if err := ioutil.WriteFile(artifactPath, rpmBuf.Bytes(), os.ModePerm); err != nil { + t.Fatal(err) + } +} diff --git a/tests/rpm.json b/tests/rpm.json new file mode 100644 index 0000000..836a307 --- /dev/null +++ b/tests/rpm.json @@ -0,0 +1 @@ +{"kind":"rpm","apiVersion":"0.0.1","spec":{"package":{"content":"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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAB////3AAAAAQAAAAAI6t6AEAAAAAAAAAQAAB2GgAAAA/AAAABwAB2FgAAAAQAAAAZAAAAAgAAAAAAAAAAQAAA+gAAAAGAAAAAgAAAAEAAAPpAAAABgAAABsAAAABAAAD6gAAAAYAAAAiAAAAAQAAA+sAAAAEAAAAKAAAAAEAAAPsAAAACQAAACwAAAABAAAD7QAAAAkAAABXAAAAAQAAA+4AAAAEAAAAnAAAAAEAAAPvAAAABgAAAKAAAAABAAAD8QAAAAQAAAC4AAAAAQAAA/IAAAAGAAAAvAAAAAEAAAPzAAAABgAAAMMAAAABAAAD9gAAAAYAAADKAAAAAQAAA/cAAAAGAAAA3QAAAAEAAAP4AAAACQAAAP8AAAABAAAD/AAAAAYAAAEXAAAAAQAAA/0AAAAGAAABRQAAAAEAAAP+AAAABgAAAUsAAAABAAAEBAAAAAQAAAFUAAAABAAABAYAAAADAAABZAAAAAQAAAQJAAAAAwAAAWwAAAAEAAAECgAAAAQAAAF0AAAABAAABAsAAAAIAAABhAAAAAQAAAQMAAAACAAAAcgAAAAEAAAEDQAAAAQAAAIgAAAABAAABA8AAAAIAAACMAAAAAQAAAQQAAAACAAAAkQAAAAEAAAEFAAAAAYAAAJYAAAAAQAABBUAAAAEAAACfAAAAAQAAAQXAAAACAAAAowAAAADAAAEGAAAAAQAAALwAAAAGgAABBkAAAAIAAADWAAAABoAAAQaAAAACAAABdwAAAAaAAAEKAAAAAYAAAYxAAAAAQAABDgAAAAEAAAGOAAAAicAAAQ5AAAACAAADtQAAAInAAAEOgAAAAgAAIAkAAACJwAABEIAAAAIAAHUIgAAAAIAAARHAAAABAAB1EQAAAAEAAAESAAAAAQAAdRUAAAABAAABEkAAAAIAAHUZAAAAAQAAARYAAAABAAB1GgAAAADAAAEWQAAAAgAAdR0AAAAAwAABFoAAAAEAAHUlAAAAAIAAARbAAAACAAB1JwAAAACAAAEXAAAAAQAAdSsAAAABAAABF0AAAAIAAHUvAAAAAQAAAReAAAACAAB1REAAAAEAAAEYgAAAAYAAdVuAAAAAQAABGQAAAAGAAHWvgAAAAEAAARlAAAABgAB1sMAAAABAAAEZgAAAAYAAdbGAAAAAQAABGwAAAAGAAHWyAAAAAEAAAR0AAAABAAB1uAAAAAEAAAEdQAAAAQAAdbwAAAABAAABHYAAAAIAAHXAAAAAAMAAAR3AAAABAAB15gAAAAEAAAEeAAAAAQAAdeoAAAABAAABHkAAAAEAAHXuAAAABQAABOTAAAABAAB2AgAAAABAAATxgAAAAYAAdgMAAAAAQAAE+QAAAAIAAHYEgAAAAEAABPlAAAABAAB2FQAAAABQwBOZXR3b3JrTWFuYWdlci1ibHVldG9vdGgAMS4yNi4wADguZWw4AAAAAAFCbHVldG9vdGggZGV2aWNlIHBsdWdpbiBmb3IgTmV0d29ya01hbmFnZXIAVGhpcyBwYWNrYWdlIGNvbnRhaW5zIE5ldHdvcmtNYW5hZ2VyIHN1cHBvcnQgZm9yIEJsdWV0b290aCBkZXZpY2VzLgAAX6GF9Xg4Ni0wMi5tYm94LmNlbnRvcy5vcmcAAAABlxhDZW50T1MAQ2VudE9TAEdQTHYyKyBhbmQgTEdQTHYyKwBDZW50T1MgQnVpbGRzeXMgPGJ1Z3NAY2VudG9zLm9yZz4AU3lzdGVtIEVudmlyb25tZW50L0Jhc2UAaHR0cDovL3d3dy5nbm9tZS5vcmcvcHJvamVjdHMvTmV0d29ya01hbmFnZXIvAGxpbnV4AHg4Nl82NAAAAAAAAAAAAAAAAAAAUgABlxhB7UHtof+B7QAAAAAAAAAAX6GF8l+hhfJfoYXyX6GF2AAAADVmZDk0YThkMzk3ZjljYThjNGRmMDlkODgyMTZkOTRmMTkyZmVmYWQyOGZhOTBmMDU4ZTBmYjEyNmQzZWExNWMAAAAuLi8uLi8uLi8uLi91c3IvbGliNjQvTmV0d29ya01hbmFnZXIvMS4yNi4wLTguZWw4L2xpYm5tLWRldmljZS1wbHVnaW4tYmx1ZXRvb3RoLnNvAAAAAAAAEAAAABAAAAAQAAAAAAByb290AHJvb3QAcm9vdAByb290AHJvb3QAcm9vdAByb290AHJvb3QATmV0d29ya01hbmFnZXItMS4yNi4wLTguZWw4LnNyYy5ycG0A/////////////////////05ldHdvcmtNYW5hZ2VyLWJsdWV0b290aABOZXR3b3JrTWFuYWdlci1ibHVldG9vdGgoeDg2LTY0KQBsaWJubS1kZXZpY2UtcGx1Z2luLWJsdWV0b290aC5zbygpKDY0Yml0KQAAAAAIAAAACAAAAAwAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAABAAAKAQAACgEAAAoBAAAKAABAAE5ldHdvcmtNYW5hZ2VyKHg4Ni02NCkATmV0d29ya01hbmFnZXItd3dhbgBibHVlegBsaWJibHVldG9vdGguc28uMygpKDY0Yml0KQBsaWJjLnNvLjYoKSg2NGJpdCkAbGliYy5zby42KEdMSUJDXzIuMTQpKDY0Yml0KQBsaWJjLnNvLjYoR0xJQkNfMi4yLjUpKDY0Yml0KQBsaWJjLnNvLjYoR0xJQkNfMi40KSg2NGJpdCkAbGliZGwuc28uMigpKDY0Yml0KQBsaWJnY2Nfcy5zby4xKCkoNjRiaXQpAGxpYmdjY19zLnNvLjEoR0NDXzMuMCkoNjRiaXQpAGxpYmdjY19zLnNvLjEoR0NDXzMuMy4xKSg2NGJpdCkAbGliZ2lvLTIuMC5zby4wKCkoNjRiaXQpAGxpYmdsaWItMi4wLnNvLjAoKSg2NGJpdCkAbGliZ21vZHVsZS0yLjAuc28uMCgpKDY0Yml0KQBsaWJnb2JqZWN0LTIuMC5zby4wKCkoNjRiaXQpAGxpYm1tLWdsaWIuc28uMCgpKDY0Yml0KQBsaWJubS13d2FuLnNvKCkoNjRiaXQpAGxpYnB0aHJlYWQuc28uMCgpKDY0Yml0KQBsaWJwdGhyZWFkLnNvLjAoR0xJQkNfMi4yLjUpKDY0Yml0KQBsaWJzeXN0ZW1kLnNvLjAoKSg2NGJpdCkAcnBtbGliKENvbXByZXNzZWRGaWxlTmFtZXMpAHJwbWxpYihGaWxlRGlnZXN0cykAcnBtbGliKFBheWxvYWRGaWxl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IEhhbGxlciA8dGhhbGxlckByZWRoYXQuY29tPiAtIDE6MS4yNi4wLTEAQmVuaWFtaW5vIEdhbHZhbmkgPGJnYWx2YW5pQHJlZGhhdC5jb20+IC0gMToxLjI2LjAtMC4yLjEAQmVuaWFtaW5vIEdhbHZhbmkgPGJnYWx2YW5pQHJlZGhhdC5jb20+IC0gMToxLjI2LjAtMC4yAFRob21hcyBIYWxsZXIgPHRoYWxsZXJAcmVkaGF0LmNvbT4gLSAxOjEuMjYuMC0wLjEAQmVuaWFtaW5vIEdhbHZhbmkgPGJnYWx2YW5pQHJlZGhhdC5jb20+IC0gMToxLjI1LjItMQBUaG9tYXMgSGFsbGVyIDx0aGFsbGVyQHJlZGhhdC5jb20+IC0gMToxLjI1LjEtMQBUaG9tYXMgSGFsbGVyIDx0aGFsbGVyQHJlZGhhdC5jb20+IC0gMToxLjIyLjgtNABCZW5pYW1pbm8gR2FsdmFuaSA8YmdhbHZhbmlAcmVkaGF0LmNvbT4gLSAxOjEuMjIuOC0zAFRob21hcyBIYWxsZXIgPHRoYWxsZXJAcmVkaGF0LmNvbT4gLSAxOjEuMjIuOC0yAEFudG9uaW8gQ2FyZGFjZSA8YWNhcmRhY2VAcmVkaGF0LmNvbT4gLSAxOjEuMjIuOC0xAEFudG9uaW8gQ2FyZGFjZSA8YWNhcmRhY2VAcmVkaGF0LmNvbT4gLSAxOjEuMjIuNi0xAEJlbmlhbWlubyBHYWx2YW5pIDxiZ2FsdmFuaUByZWRoYXQuY29tPiAtIDE6MS4yMi40LTEAVGhvbWFzIEhhbGxlciA8dGhhbGxlckByZWRoYXQuY29tPiAtIDE6MS4yMi4yLTEAVGhvbWFzIEhhbGxlciA8dGhhbGxlckByZWRoYXQuY29tPiAtIDE6MS4yMi4wLTIAVGhvbWFzIEhhbGxlciA8dGhhbGxlckByZWRoYXQuY29tPiAtIDE6MS4yMi4wLTEAVGhvbWFzIEhhbGxlciA8dGhhbGxlckByZWRoYXQuY29tPiAtIDE6MS4yMi4wLTAuMgBCZW5pYW1pbm8gR2FsdmFuaSA8YmdhbHZhbmlAcmVkaGF0LmNvbT4gLSAxOjEuMjIuMC0wLjEATHVib21pciBSaW50ZWwgPGxyaW50ZWxAcmVkaGF0LmNvbT4gLSAxOjEuMjAuMC00AFRob21hcyBIYWxsZXIgPHRoYWxsZXJAcmVkaGF0LmNvbT4gLSAxOjEuMjAuMC0zAEx1Ym9taXIgUmludGVsIDxscmludGVsQHJlZGhhdC5jb20+IC0gMToxLjIwLjAtMgBUaG9tYXMgSGFsbGVyIDx0aGFsbGVyQHJlZGhhdC5jb20+IC0gMToxLjIwLjAtMQBUaG9tYXMgSGFsbGVyIDx0aGFsbGVyQHJlZGhhdC5jb20+IC0gMToxLjIwLjAtMC40AEx1Ym9taXIgUmludGVsIDxscmludGVsQHJlZGhhdC5jb20+IC0gMToxLjIwLjAtMC4zAEx1Ym9taXIgUmludGVsIDxscmludGVsQHJlZGhhdC5jb20+IC0gMToxLjIwLjAtMC4yAEx1Ym9taXIgUmludGVsIDxscmludGVsQHJlZGhhdC5jb20+IC0gMToxLjIwLjAtMC4xAEJlbmlhbWlubyBHYWx2YW5pIDxiZ2FsdmFuaUByZWRoYXQuY29tPiAtIDE6MS4xNC4wLTE0AEZyYW5jZXNjbyBHaXVkaWNpIDxmZ2l1ZGljaUByZWRoYXQuY29tPiAtIDE6MS4xNC4wLTEzAFRob21hcyBIYWxsZXIgPHRoYWxsZXJAcmVkaGF0LmNvbT4gLSAxOjEuMTQuMC0xMgBCZW5pYW1pbm8gR2FsdmFuaSA8YmdhbHZhbmlAcmVkaGF0LmNvbT4gLSAxOjEuMTQuMC0xMQBCZW5pYW1pbm8gR2FsdmFuaSA8YmdhbHZhbmlAcmVkaGF0LmNvbT4gLSAxOjEuMTQuMC0xMABUaG9tYXMgSGFsbGVyIDx0aGFsbGVyQHJlZGhhdC5jb20+IC0gMToxLjE0LjAtOQBMdWJvbWlyIFJpbnRlbCA8bGt1bmRyYWtAdjMuc2s+IC0gMToxLjE0LjAtOABUaG9tYXMgSGFsbGVyIDx0aGFsbGVyQHJlZGhhdC5jb20+IC0gMToxLjE0LjAtNwBUaG9tYXMgSGFsbGVyIDx0aGFsbGVyQHJlZGhhdC5jb20+IC0gMToxLjE0LjAtNgBMdWJvbWlyIFJpbnRlbCA8bGt1bmRyYWtAdjMuc2s+IC0gMToxLjE0LjAtNQBCZW5pYW1pbm8gR2FsdmFuaSA8YmdhbHZhbmlAcmVkaGF0LmNvbT4gLSAxOjEuMTQuMC00AFRob21hcyBIYWxsZXIgPHRoYWxsZXJAcmVkaGF0LmNvbT4gLSAxOjEuMTQuMC0zAFRob21hcyBIYWxsZXIgPHRoYWxsZXJAcmVkaGF0LmNvbT4gLSAxOjEuMTQuMC0yAFRob21hcyBIYWxsZXIgPHRoYWxsZXJAcmVkaGF0LmNvbT4gLSAxOjEuMTQuMC0xAFRob21hcyBIYWxsZXIgPHRoYWxsZXJAcmVkaGF0LmNvbT4gLSAxOjEuMTQuMC0wLjQAVGhvbWFzIEhhbGxlciA8dGhhbGxlckByZWRoYXQuY29tPiAtIDE6MS4xNC4wLTAuMwBMdWJvbWlyIFJpbnRlbCA8bGt1bmRyYWtAdjMuc2s+IC0gMToxLjE0LjAtMC4yAFRob21hcyBIYWxsZXIgPHRoYWxsZXJAcmVkaGF0LmNvbT4gLSAxOjEuMTQuMC0wLjEATHVib21pciBSaW50ZWwgPGxrdW5kcmFrQHYzLnNrPiAtIDE6MS4xMi4wLTAuNABUaG9tYXMgSGFsbGVyIDx0aGFsbGVyQHJlZGhhdC5jb20+IC0gMToxLjEyLjAtMC4zAFRob21hcyBIYWxsZXIgPHRoYWxsZXJAcmVkaGF0LmNvbT4gLSAxOjEuMTIuMC0wLjIAVGhvbWFzIEhhbGxlciA8dGhhbGxlckByZWRoYXQuY29tPiAtIDE6MS4xMi4wLTAuMQBUaG9tYXMgSGFsbGVyIDx0aGFsbGVyQHJlZGhhdC5jb20+IC0gMToxLjEwLjItMQBCasO2cm4gRXNzZXIgPGJlc3NlcjgyQGZlZG9yYXByb2plY3Qub3JnPiAtIDE6MS44LjQtNwBUaG9tYXMgSGFsbGVyIDx0aGFsbGVyQHJlZGhhdC5jb20+IC0gMToxLjguNC02AEx1Ym9taXIgUmludGVsIDxsa3VuZHJha0B2My5zaz4gLSAxOjEuOC40LTUAVGhvbWFzIEhhbGxlciA8dGhhbGxlckByZWRoYXQuY29tPiAtIDE6MS44LjQtNABUaG9tYXMgSGFsbGVyIDx0aGFsbGVyQHJlZGhhdC5jb20+IC0gMToxLjguNC0zAFRob21hcyBIYWxsZXIgPHRoYWxsZXJAcmVkaGF0LmNvbT4gLSAxOjEuOC40LTIAVGhvbWFzIEhhbGxlciA8dGhhbGxlckByZWRoYXQuY29tPiAtIDE6MS44LjQtMQBGZWRvcmEgUmVsZWFzZSBFbmdpbmVlcmluZyA8cmVsZW5nQGZlZG9yYXByb2plY3Qub3JnPiAtIDE6MS44LjItMy4yAEZlZG9yYSBSZWxlYXNlIEVuZ2luZWVyaW5nIDxyZWxlbmdAZmVkb3JhcHJvamVjdC5vcmc+IC0gMToxLjguMi0zLjEATHVib21pciBSaW50ZWwgPGxrdW5kcmFrQHYzLnNrPiAtIDE6MS44LjItMwBTdGVwaGVuIEdhbGxhZ2hlciA8c2dhbGxhZ2hAcmVkaGF0LmNvbT4gLSAxOjEuOC4yLTIAQmVuaWFtaW5vIEdhbHZhbmkgPGJnYWx2YW5pQHJlZGhhdC5jb20+IC0gMToxLjguMi0xAEx1Ym9taXIgUmludGVsIDxsa3VuZHJha0B2My5zaz4gLSAxOjEuOC4wLTYATHVib21pciBSaW50ZWwgPGxrdW5kcmFrQHYzLnNrPiAtIDE6MS44LjAtNQBUaG9tYXMgSGFsbGVyIDx0aGFsbGVyQHJlZGhhdC5jb20+IC0gMToxLjguMC00AFRob21hcyBIYWxsZXIgPHRoYWxsZXJAcmVkaGF0LmNvbT4gLSAxOjEuOC4wLTMAVGhvbWFzIEhhbGxlciA8dGhhbGxlckByZWRoYXQuY29tPiAtIDE6MS44LjAtMgBUaG9tYXMgSGFsbGVyIDx0aGFsbGVyQHJlZGhhdC5jb20+IC0gMToxLjguMC0xAEx1Ym9taXIgUmludGVsIDxsa3VuZHJha0B2My5zaz4gLSAxOjEuOC4wLTAuMi5yYzMATHVib21pciBSaW50ZWwgPGxrdW5kcmFrQHYzLnNrPiAtIDE6MS44LjAtMC4yLnJjMgBMdWJvbWlyIFJpbnRlbCA8bGt1bmRyYWtAdjMuc2s+IC0gMToxLjguMC0wLjEATHVib21pciBSaW50ZWwgPGxrdW5kcmFrQHYzLnNrPiAtIDE6MS42LjItMQBGZWRvcmEgUmVsZWFzZSBFbmdpbmVlcmluZyA8cmVsZW5nQGZlZG9yYXByb2plY3Qub3JnPiAtIDE6MS42LjAtMS4xAEx1Ym9taXIgUmludGVsIDxsa3VuZHJha0B2My5zaz4gLSAxOjEuNi4wLTEAVGhvbWFzIEhhbGxlciA8dGhhbGxlckByZWRoYXQuY29tPiAtIDE6MS42LTAuMi5yYzEATHVib21pciBSaW50ZWwgPGxrdW5kcmFrQHYzLnNrPiAtIDE6MS42LTAuMS5yYzEAVGhvbWFzIEhhbGxlciA8dGhhbGxlckByZWRoYXQuY29tPiAtIDE6MS41LjMtNQBJZ29yIEduYXRlbmtvIDxpZ25hdGVua29AcmVkaGF0LmNvbT4gLSAxOjEuNS4zLTQuMQBMdWJvbWlyIFJpbnRlbCA8bGt1bmRyYWtAdjMuc2s+IC0gMToxLjUuMy00AFRob21hcyBIYWxsZXIgPHRoYWxsZXJAcmVkaGF0LmNvbT4gLSAxOjEuNS4yLTQAVGhvbWFzIEhhbGxlciA8dGhhbGxlckByZWRoYXQuY29tPiAtIDE6MS41LjItMwBUaG9tYXMgSGFsbGVyIDx0aGFsbGVyQHJlZGhhdC5jb20+IC0gMToxLjUuMi0yAEx1Ym9taXIgUmludGVsIDxsa3VuZHJha0B2My5zaz4gLSAxOjEuNS4yLTEATHVib21pciBSaW50ZWwgPGxrdW5kcmFrQHYzLnNrPiAtIDE6MS40LjItMQBUaG9tYXMgSGFsbGVyIDx0aGFsbGVyQHJlZGhhdC5jb20+IC0gMToxLjQuMC00AFRob2FtcyBIYWxsZXIgPHRoYWxsZXJAcmVkaGF0LmNvbT4gLSAxOjEuNC4wLTMAVGhvbWFzIEhhbGxlciA8dGhhbGxlckByZWRoYXQuY29tPiAtIDE6MS40LjAtMgBMdWJvbWlyIFJpbnRlbCA8bGt1bmRyYWtAdjMuc2s+IC0gMToxLjQuMC0xAFRob21hcyBIYWxsZXIgPHRoYWxsZXJAcmVkaGF0LmNvbT4gLSAxOjEuNC4wLTAuNS5naXQyMDE2MDYyMS4wNzIzNThkYQBNYXR0aGlhcyBDbGFzZW4gPG1jbGFzZW5AcmVkaGF0LmNvbT4gLSAxOjEuNC4wLTAuNC5naXQyMDE2MDYyMS4wNzIzNThkYQBMdWJvbWlyIFJpbnRlbCA8bGt1bmRyYWtAdjMuc2s+IC0gMToxLjQuMC0wLjMuZ2l0MjAxNjA2MjEuMDcyMzU4ZGEAVGhvbWFzIEhhbGxlciA8dGhhbGxlckByZWRoYXQuY29tPiAtIDE6MS4yLjItMgBMdWJvbWlyIFJpbnRlbCA8bGt1bmRyYWtAdjMuc2s+IC0gMToxLjIuMi0xAEx1Ym9taXIgUmludGVsIDxsa3VuZHJha0B2My5zaz4gLSAxOjEuMi4wLTEATHVib21pciBSaW50ZWwgPGxrdW5kcmFrQHYzLnNrPiAtIDE6MS4yLjAtMC43LnJjMgBMdWJvbWlyIFJpbnRlbCA8bGt1bmRyYWtAdjMuc2s+IC0gMToxLjIuMC0wLjcucmMxAEx1Ym9taXIgUmludGVsIDxsa3VuZHJha0B2My5zaz4gLSAxOjEuMi4wLTAuOC5iZXRhMwBMdWJvbWlyIFJpbnRlbCA8bGt1bmRyYWtAdjMuc2s+IC0gMToxLjIuMC0wLjcuYmV0YTMATHVib21pciBSaW50ZWwgPGxrdW5kcmFrQHYzLnNrPiAtIDE6MS4yLjAtMC43LmJldGEyAERhbiBXaWxsaWFtcyA8ZGNid0ByZWRoYXQuY29tPiAtIDE6MS4yLjAtMC42LmJldGEyLjEATHVib21pciBSaW50ZWwgPGxrdW5kcmFrQHYzLnNrPiAtIDE6MS4yLjAtMC42LmJldGEyAFRob21hcyBIYWxsZXIgPHRoYWxsZXJAcmVkaGF0LmNvbT4gLSAxOjEuMi4wLTAuNi5iZXRhMQBGZWRvcmEgUmVsZWFzZSBFbmdpbmVlcmluZyA8cmVsZW5nQGZlZG9yYXByb2plY3Qub3JnPiAtIDE6MS4yLjAtMC41LmJldGExLjEATHVib21pciBSaW50ZWwgPGxrdW5kcmFrQHYzLnNrPiAtIDE6MS4yLjAtMC41LmJldGExAERhdmlkIEtpbmcgPGFtaWdhZGF2ZUBhbWlnYWRhdmUuY29tPiAtIDE6MS4yLjAtMC40LjIwMTUxMDA3Z2l0ZTczZTU1YwBMdWJvbWlyIFJpbnRlbCA8bGt1bmRyYWtAdjMuc2s+IC0gMToxLjIuMC0wLjMuMjAxNTExMTJnaXRlYzRkNjUzAEx1Ym9taXIgUmludGVsIDxsa3VuZHJha0B2My5zaz4gLSAxOjEuMi4wLTAuMy4yMDE1MTAyM2dpdGUwMWMxNzUATHVib21pciBSaW50ZWwgPGxrdW5kcmFrQHYzLnNrPiAtIDE6MS4yLjAtMC4yLjIwMTUxMDA3Z2l0ZTczZTU1YwBMdWJvbWlyIFJpbnRlbCA8bGt1bmRyYWtAdjMuc2s+IC0gMToxLjIuMC0wLjIuMjAxNTA5MDNnaXRkZTVkOTgxAEx1Ym9taXIgUmludGVsIDxsa3VuZHJha0B2My5zaz4gLSAxOjEuMi4wLTAuMS4yMDE1MDkwM2dpdGRlNWQ5ODEATHVib21pciBSaW50ZWwgPGxrdW5kcmFrQHYzLnNrPiAtIDE6MS4wLjYtMgBMdWJvbWlyIFJpbnRlbCA8bGt1bmRyYWtAdjMuc2s+IC0gMToxLjAuNi0xAFRob21hcyBIYWxsZXIgPHRoYWxsZXJAcmVkaGF0LmNvbT4gLSAxOjEuMC42LTAuMi4yMDE1MDgxM2dpdDdlMmNhYTIATHVib21pciBSaW50ZWwgPGxrdW5kcmFrQHYzLnNrPiAtIDE6MS4wLjYtMC4xLjIwMTUwODEzZ2l0N2UyY2FhMgBMdWJvbWlyIFJpbnRlbCA8bGt1bmRyYWtAdjMuc2s+IC0gMToxLjAuNC0yAEx1Ym9taXIgUmludGVsIDxsa3VuZHJha0B2My5zaz4gLSAxOjEuMC40LTEARGFuIEhvcsOhayA8ZGFuW2F0XWRhbm55LmN6PiAtIDE6MS4wLjQtMC41LmdpdDIwMTUwNzEzLjM4YmYyY2IwAEx1Ym9taXIgUmludGVsIDxsa3VuZHJha0B2My5zaz4gLSAxOjEuMC40LTAuNC5naXQyMDE1MDcxMy4zOGJmMmNiMABMdWJvbWlyIFJpbnRlbCA8bGt1bmRyYWtAdjMuc2s+IC0gMToxLjAuNC0wLjMuZ2l0MjAxNTA3MDcuZTNiZDRlMQBKacWZw60gS2xpbWXFoSA8amtsaW1lc0ByZWRoYXQuY29tPiAtIDE6MS4wLjQtMC4yLmdpdDIwMTUwNzA3LmNmMTVmMmEATHVib21pciBSaW50ZWwgPGxrdW5kcmFrQHYzLnNrPiAtIDE6MS4wLjQtMC4xLmdpdDIwMTYwNjI0LmYyNDViNDlhAEx1Ym9taXIgUmludGVsIDxsa3VuZHJha0B2My5zaz4gLSAxOjEuMC40LTAuMS5naXQyMDE1MDYxOC44Y2ZmYWYzYmY1AEZlZG9yYSBSZWxlYXNlIEVuZ2luZWVyaW5nIDxyZWwtZW5nQGxpc3RzLmZlZG9yYXByb2plY3Qub3JnPiAtIDE6MS4wLjItMS4xAEx1Ym9taXIgUmludGVsIDxsa3VuZHJha0B2My5zaz4gLSAxOjEuMC4yLTEASmnFmcOtIEtsaW1lxaEgPGprbGltZXNAcmVkaGF0LmNvbT4gLSAxOjEuMC4xLTIuZ2l0MjAxNTA0MjkARGFuIFdpbGxpYW1zIDxkY2J3QHJlZGhhdC5jb20+IC0gMToxLjAuMS0xLmdpdDIwMTUwMzA1AERhbiBXaWxsaWFtcyA8ZGNid0ByZWRoYXQuY29tPiAtIDE6MS4wLjAtNwBEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAxOjEuMC4wLTYARGFuIFdpbGxpYW1zIDxkY2J3QHJlZGhhdC5jb20+IC0gMToxLjAuMC01AEFkYW0gV2lsbGlhbXNvbiA8YXdpbGxpYW1AcmVkaGF0LmNvbT4gLSAxOjEuMC4wLTQAVGhvbWFzIEhhbGxlciA8dGhhbGxlckByZWRoYXQuY29tPiAtIDE6MS4wLjAtMwBEYW4gV2luc2hpcCA8ZGFud0ByZWRoYXQuY29tPiAtIDE6MS4wLjAtMgBEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAxOjEuMC4wLTEASmnFmcOtIEtsaW1lxaEgPGprbGltZXNAcmVkaGF0LmNvbT4gLSAxOjAuOS4xMC4wLTE0LmdpdDIwMTQwNzA0AEppxZnDrSBLbGltZcWhIDxqa2xpbWVzQHJlZGhhdC5jb20+IC0gMTowLjkuMTAuMC0xMy5naXQyMDE0MDcwNABEYW4gV2luc2hpcCA8ZGFud0ByZWRoYXQuY29tPiAtIDE6MC45LjEwLjAtMTIuZ2l0MjAxNDA3MDQATHVib21pciBSaW50ZWwgPGxrdW5kcmFrQHYzLnNrPiAxOjAuOS4xMC4wLTExLmdpdDIwMTQwNzA0AEx1Ym9taXIgUmludGVsIDxsa3VuZHJha0B2My5zaz4gMTowLjkuMTAuMC0xMC5naXQyMDE0MDcwNABBZGFtIFdpbGxpYW1zb24gPGF3aWxsaWFtQHJlZGhhdC5jb20+IC0gMTowLjkuMTAuMC05LmdpdDIwMTQwNzA0AEx1Ym9taXIgUmludGVsIDxsa3VuZHJha0B2My5zaz4gMTowLjkuMTAuMC04LmdpdDIwMTQwNzA0AFN0ZWYgV2FsdGVyIDxzdGVmd0ByZWRoYXQuY29tPiAtIDE6MC45LjEwLjAtNy5naXQyMDE0MDcwNABKacWZw60gS2xpbWXFoSA8amtsaW1lc0ByZWRoYXQuY29tPiAtIDE6MC45LjEwLjAtNi5naXQyMDE0MDcwNABQZXRlciBSb2JpbnNvbiA8cGJyb2JpbnNvbkBmZWRvcmFwcm9qZWN0Lm9yZz4gMTowLjkuMTAuMC01LmdpdDIwMTQwNzA0AERhbiBIb3LDoWsgPGRhblthdF1kYW5ueS5jej4gLSAxOjAuOS4xMC4wLTQuZ2l0MjAxNDA3MDQARmVkb3JhIFJlbGVhc2UgRW5naW5lZXJpbmcgPHJlbC1lbmdAbGlzdHMuZmVkb3JhcHJvamVjdC5vcmc+IC0gMTowLjkuMTAuMC0zLmdpdDIwMTQwNzA0LjEAS2FsZXYgTGVtYmVyIDxrYWxldmxlbWJlckBnbWFpbC5jb20+IC0gMTowLjkuMTAuMC0zLmdpdDIwMTQwNzA0AERhbiBXaWxsaWFtcyA8ZGNid0ByZWRoYXQuY29tPiAtIDE6MC45LjEwLjAtMi5naXQyMDE0MDcwNABLYWxldiBMZW1iZXIgPGthbGV2bGVtYmVyQGdtYWlsLmNvbT4gLSAxOjAuOS4xMC4wLTEuZ2l0MjAxNDA3MDQuMQBUaG9tYXMgSGFsbGVyIDx0aGFsbGVyQHJlZGhhdC5jb20+IC0gMC45LjEwLjAtMS5naXQyMDE0MDcwNABUaG9tYXMgSGFsbGVyIDx0aGFsbGVyQHJlZGhhdC5jb20+IC0gMC45LjkuOTgtMS5naXQyMDE0MDYyMABEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAwLjkuOS45NS0xLmdpdDIwMTQwNjA5AEZlZG9yYSBSZWxlYXNlIEVuZ2luZWVyaW5nIDxyZWwtZW5nQGxpc3RzLmZlZG9yYXByb2plY3Qub3JnPiAtIDE6MC45LjkuMS02LmdpdDIwMTQwMzE5AERhbiBXaWxsaWFtcyA8ZGNid0ByZWRoYXQuY29tPiAtIDAuOS45LjEtNS5naXQyMDE0MDMxOQBEYW4gV2luc2hpcCA8ZGFud0ByZWRoYXQuY29tPiAtIDAuOS45LjEtNC5naXQyMDE0MDMxOQBKacWZw60gS2xpbWXFoSA8amtsaW1lc0ByZWRoYXQuY29tPiAtIDAuOS45LjEtMy5naXQyMDE0MDMxNwBKacWZw60gS2xpbWXFoSA8amtsaW1lc0ByZWRoYXQuY29tPiAtIDAuOS45LjEtMi5naXQyMDE0MDMxNABKacWZw60gS2xpbWXFoSA8amtsaW1lc0ByZWRoYXQuY29tPiAtIDAuOS45LjEtMS5naXQyMDE0MDMxMABUaG9tYXMgSGFsbGVyIDx0aGFsbGVyQHJlZGhhdC5jb20+IC0gMC45LjkuMS0wLmdpdDIwMTQwMjI4AFRob21hcyBIYWxsZXIgPHRoYWxsZXJAcmVkaGF0LmNvbT4gLSAwLjkuOS4wLTI4LmdpdDIwMTQwMTMxAFRob21hcyBIYWxsZXIgPHRoYWxsZXJAcmVkaGF0LmNvbT4gLSAwLjkuOS4wLTI3LmdpdDIwMTQwMTMxAEppxZnDrSBLbGltZcWhIDxqa2xpbWVzQHJlZGhhdC5jb20+IC0gMC45LjkuMC0yNi5naXQyMDE0MDEzMQBKacWZw60gS2xpbWXFoSA8amtsaW1lc0ByZWRoYXQuY29tPiAtIDAuOS45LjAtMjUuZ2l0MjAxNDAxMTcASmnFmcOtIEtsaW1lxaEgPGprbGltZXNAcmVkaGF0LmNvbT4gLSAwLjkuOS4wLTI0LmdpdDIwMTQwMTE0AERhbiBXaW5zaGlwIDxkYW53QHJlZGhhdC5jb20+IC0gMC45LjkuMC0yMy5naXQyMDEzMTAwMwBEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAwLjkuOS4wLTIyLmdpdDIwMTMxMDAzAERhbiBXaWxsaWFtcyA8ZGNid0ByZWRoYXQuY29tPiAtIDAuOS45LjAtMjEuZ2l0MjAxMzEwMDMARGFuIFdpbnNoaXAgPGRhbndAcmVkaGF0LmNvbT4gLSAwLjkuOS4wLTIwLmdpdDIwMTMxMDAzAEppxZnDrSBLbGltZcWhIDxqa2xpbWVzQHJlZGhhdC5jb20+IC0gMC45LjkuMC0xOS5naXQyMDEzMTAwMwBEYW4gV2luc2hpcCA8ZGFud0ByZWRoYXQuY29tPiAtIDAuOS45LjAtMTguZ2l0MjAxMzEwMDMARGFuIFdpbGxpYW1zIDxkY2J3QHJlZGhhdC5jb20+IC0gMC45LjkuMC0xNy5naXQyMDEzMTAwMwBEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAwLjkuOS4wLTE2LmdpdDIwMTMxMDAzAEppxZnDrSBLbGltZcWhIDxqa2xpbWVzQHJlZGhhdC5jb20+IC0gMC45LjkuMC0xNS5naXQyMDEzMTAwMwBEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAwLjkuOS4wLTE0LmdpdDIwMTMxMDAzAERhbiBXaW5zaGlwIDxkYW53QHJlZGhhdC5jb20+IC0gMC45LjkuMC0xMy5naXQyMDEzMTAwMQBCaWxsIE5vdHRpbmdoYW0gPG5vdHRpbmdAcmVkaGF0LmNvbT4gLSAwLjkuOS4wLTEyLmdpdDIwMTMwOTEzAERhbiBXaWxsaWFtcyA8ZGNid0ByZWRoYXQuY29tPiAtIDAuOS45LjAtMTEuZ2l0MjAxMzA5MTMARGFuIFdpbGxpYW1zIDxkY2J3QHJlZGhhdC5jb20+IC0gMC45LjkuMC0xMC5naXQyMDEzMDkwNgBEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAwLjkuOS4wLTkuZ2l0MjAxMzA4MDcARGFuIFdpbnNoaXAgPGRhbndAcmVkaGF0LmNvbT4gLSAwLjkuOS4wLTguZ2l0MjAxMzA3MjQARGFuIFdpbGxpYW1zIDxkY2J3QHJlZGhhdC5jb20+IC0gMC45LjkuMC03LmdpdDIwMTMwNzI0AERhbiBXaW5zaGlwIDxkYW53QHJlZGhhdC5jb20+IC0gMC45LjkuMC02AERhbiBXaW5zaGlwIDxkYW53QHJlZGhhdC5jb20+IC0gMC45LjkuMC01AEppxZnDrSBLbGltZcWhIDxqa2xpbWVzQHJlZGhhdC5jb20+IC0gMC45LjkuMC00LmdpdDIwMTMwNjAzAERhbiBXaWxsaWFtcyA8ZGNid0ByZWRoYXQuY29tPiAtIDAuOS45LjAtMy5naXQyMDEzMDYwMwBEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAwLjkuOS4wLTIuZ2l0MjAxMzA1MTUARGFuIFdpbGxpYW1zIDxkY2J3QHJlZGhhdC5jb20+IC0gMC45LjkuMC0xLmdpdDIwMTMwNTE0AERhbiBXaWxsaWFtcyA8ZGNid0ByZWRoYXQuY29tPiAtIDAuOS44LjEtMi5naXQyMDEzMDUwNwBEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAwLjkuOC4xLTEuZ2l0MjAxMzAzMjcASmnFmcOtIEtsaW1lxaEgPGprbGltZXNAcmVkaGF0LmNvbT4gLSAwLjkuOC4wLTEARGFuIFdpbGxpYW1zIDxkY2J3QHJlZGhhdC5jb20+IC0gMC45LjcuOTk3LTIARGFuIFdpbGxpYW1zIDxkY2J3QHJlZGhhdC5jb20+IC0gMC45LjcuOTk3LTEARGFuIFdpbnNoaXAgPGRhbndAcmVkaGF0LmNvbT4gLSAwLjkuNy4wLTEyLmdpdDIwMTIxMDA0AEppxZnDrSBLbGltZcWhIDxqa2xpbWVzQHJlZGhhdC5jb20+IC0gMC45LjcuMC0xMS5naXQyMDEyMTAwNABEYW4gV2luc2hpcCA8ZGFud0ByZWRoYXQuY29tPiAtIDAuOS43LjAtMTAuZ2l0MjAxMjEwMDQARGFuIFdpbnNoaXAgPGRhbndAcmVkaGF0LmNvbT4gLSAwLjkuNy4wLTkuZ2l0MjAxMjEwMDQASmnFmcOtIEtsaW1lxaEgPGprbGltZXNAcmVkaGF0LmNvbT4gLSAwLjkuNy4wLTguZ2l0MjAxMjEwMDQARGFuaWVsIERyYWtlIDxkc2RAbGFwdG9wLm9yZz4gLSAwLjkuNy4wLTcuZ2l0MjAxMjEwMDQARGFuIFdpbnNoaXAgPGRhbndAcmVkaGF0LmNvbT4gLSAwLjkuNy4wLTYuZ2l0MjAxMjEwMDQARGFuIFdpbnNoaXAgPGRhbndAcmVkaGF0LmNvbT4gLSAwLjkuNy4wLTUuZ2l0MjAxMjEwMDQARGFuIFdpbnNoaXAgPGRhbndAcmVkaGF0LmNvbT4gLSAwLjkuNy4wLTQuZ2l0MjAxMjEwMDQARGFuIFdpbGxpYW1zIDxkY2J3QHJlZGhhdC5jb20+IC0gMC45LjcuMC0zLmdpdDIwMTIxMDA0AERhbiBXaW5zaGlwIDxkYW53QHJlZGhhdC5jb20+IC0gMC45LjcuMC0yLmdpdDIwMTIxMDA0AERhbiBXaW5zaGlwIDxkYW53QHJlZGhhdC5jb20+IC0gMC45LjcuMC0xLmdpdDIwMTIwODIwAEZlZG9yYSBSZWxlYXNlIEVuZ2luZWVyaW5nIDxyZWwtZW5nQGxpc3RzLmZlZG9yYXByb2plY3Qub3JnPiAtIDE6MC45LjUuOTYtMgBEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAwLjkuNS45Ni0xAEppxZnDrSBLbGltZcWhIDxqa2xpbWVzQHJlZGhhdC5jb20+IC0gMC45LjUuOTUtMS5naXQyMDEyMDcxMwBKacWZw60gS2xpbWXFoSA8amtsaW1lc0ByZWRoYXQuY29tPiAtIDAuOS40LTUuZ2l0MjAxMjA1MjEARGFuIFdpbnNoaXAgPGRhbndAcmVkaGF0LmNvbT4gLSAwLjkuNC00LmdpdDIwMTIwNTAyAEppxZnDrSBLbGltZcWhIDxqa2xpbWVzQHJlZGhhdC5jb20+IC0gMC45LjQtMy5naXQyMDEyMDUwMgBDb2xpbiBXYWx0ZXJzIDx3YWx0ZXJzQHZlcmJ1bS5vcmc+IC0gMTowLjkuNC0yLmdpdDIwMTIwMzI4XzIASmnFmcOtIEtsaW1lxaEgPGprbGltZXNAcmVkaGF0LmNvbT4gLSAwLjkuNC0xLmdpdDIwMTIwMzI4XzIARGFuIFdpbGxpYW1zIDxkY2J3QHJlZGhhdC5jb20+IC0gMC45LjMuOTk3LTIARGFuIFdpbGxpYW1zIDxkY2J3QHJlZGhhdC5jb20+IC0gMC45LjMuOTk3LTEARGFuIFdpbGxpYW1zIDxkY2J3QHJlZGhhdC5jb20+IC0gMC45LjMuOTk3LTAuNwBEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAwLjkuMy45OTUtMC42AERhbiBXaWxsaWFtcyA8ZGNid0ByZWRoYXQuY29tPiAtIDAuOS4zLjk5NS0wLjUARGFuIFdpbGxpYW1zIDxkY2J3QHJlZGhhdC5jb20+IC0gMC45LjMuOTk1LTAuNABEYW4gSG9yw6FrIDxkYW5bYXRdZGFubnkuY3o+IC0gMC45LjMtMC4zAERhbiBXaWxsaWFtcyA8ZGNid0ByZWRoYXQuY29tPiAtIDAuOS4zLTAuMgBEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAwLjkuMy0wLjEATWF0dGhpYXMgQ2xhc2VuIDxtY2xhc2VuQHJlZGhhdC5jb20+IC0gMC45LjItNABGZWRvcmEgUmVsZWFzZSBFbmdpbmVlcmluZyA8cmVsLWVuZ0BsaXN0cy5mZWRvcmFwcm9qZWN0Lm9yZz4gLSAxOjAuOS4yLTMARGFuaWVsIERyYWtlIDxkc2RAbGFwdG9wLm9yZz4gLSAwLjkuMi0yAERhbiBXaWxsaWFtcyA8ZGNid0ByZWRoYXQuY29tPiAtIDAuOS4yLTEAQWRhbSBXaWxsaWFtc29uIDxhd2lsbGlhbUByZWRoYXQuY29tPiAtIDE6MC45LjEuOTAtNS5naXQyMDExMDkyNwBEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAwLjkuMS45MC0zLmdpdDIwMTEwOTI3AEppxZnDrSBLbGltZcWhIDxqa2xpbWVzQHJlZGhhdC5jb20+IC0gMC45LjEuOTAtMi5naXQyMDExMDkyNwBEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAwLjkuMS45MC0xAFRvbSBDYWxsYXdheSA8c3BvdEBmZWRvcmFwcm9qZWN0Lm9yZz4gLSAwLjkuMC0yAERhbiBXaWxsaWFtcyA8ZGNid0ByZWRoYXQuY29tPiAtIDAuOS4wLTEAUmF5IFN0cm9kZSA8cnN0cm9kZUByZWRoYXQuY29tPiAwLjguOTk5Ny03LmdpdDIwMTEwNzIxAERhbiBXaWxsaWFtcyA8ZGNid0ByZWRoYXQuY29tPiAtIDAuOC45OTk3LTYuZ2l0MjAxMTA3MjEARGFuIFdpbGxpYW1zIDxkY2J3QHJlZGhhdC5jb20+IC0gMC44Ljk5OTctNS5naXQyMDExMDcwMgBEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAwLjguOTk5Ny00LmdpdDIwMTEwNjIwAERhbiBXaWxsaWFtcyA8ZGNid0ByZWRoYXQuY29tPiAtIDAuOC45OTk3LTMuZ2l0MjAxMTA2MTMARGFuIFdpbGxpYW1zIDxkY2J3QHJlZGhhdC5jb20+IC0gMC44Ljk5OTctMi5naXQyMDExMDUzMQBEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAwLjguOTk5Ny0xLmdpdDIwMTEwNTMxAERhbiBXaWxsaWFtcyA8ZGNid0ByZWRoYXQuY29tPiAtIDAuOC45OTktMy5naXQyMDExMDUyNgBEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAwLjguOTk5LTIuZ2l0MjAxMTA1MDkARGFuIFdpbGxpYW1zIDxkY2J3QHJlZGhhdC5jb20+IC0gMC44Ljk5OS0xAERhbiBXaWxsaWFtcyA8ZGNid0ByZWRoYXQuY29tPiAtIDAuOC45OTgtNC5naXQyMDExMDQyNwBEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAwLjguOTk4LTMuZ2l0MjAxMTA0MTkARGFuIFdpbGxpYW1zIDxkY2J3QHJlZGhhdC5jb20+IC0gMC44Ljk5OC0yLmdpdDIwMTEwNDA2AERhbiBXaWxsaWFtcyA8ZGNid0ByZWRoYXQuY29tPiAtIDAuOC45OTgtMQBEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAwLjguOTk3LTguZ2l0MjAxMTAzMzEARGFuIFdpbGxpYW1zIDxkY2J3QHJlZGhhdC5jb20+IC0gMC44Ljk5Ny03LmdpdDIwMTEwMzMwAENocmlzdG9waGVyIEFpbGxvbiA8Y2FpbGxvbkByZWRoYXQuY29tPiAtIDAuOC45OTctNi5naXQyMDExMDMyOABEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAwLjguOTk3LTUuZ2l0MjAxMTAzMjgARGFuIFdpbGxpYW1zIDxkY2J3QHJlZGhhdC5jb20+IC0gMC44Ljk5Ny00LmdpdDIwMTEwMzI1AERhbiBXaWxsaWFtcyA8ZGNid0ByZWRoYXQuY29tPiAtIDAuOC45OTctMy5naXQyMDExMDMyNABEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAwLjguOTk3LTIuZ2l0MjAxMTAzMjQARGFuIFdpbGxpYW1zIDxkY2J3QHJlZGhhdC5jb20+IC0gMC44Ljk5Ny0xAERhbiBXaWxsaWFtcyA8ZGNid0ByZWRoYXQuY29tPiAtIDAuOC45OTYtMQBEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAwLjguOTk1LTQuZ2l0MjAxMTAzMDgARGFuIFdpbGxpYW1zIDxkY2J3QHJlZGhhdC5jb20+IC0gMC44Ljk5NS0zLmdpdDIwMTEwMzA4AE1hdHRoaWFzIENsYXNlbiA8bWNsYXNlbkByZWRoYXQuY29tPiAtIDAuOC45OTUtMi5naXQyMDExMDMwOABEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAwLjguOTk1LTEuZ2l0MjAxMTAzMDgATWF0dGhpYXMgQ2xhc2VuIDxtY2xhc2VuQHJlZGhhdC5jb20+IC0gMC44LjItOC5naXQyMDEwMTExNwBGZWRvcmEgUmVsZWFzZSBFbmdpbmVlcmluZyA8cmVsLWVuZ0BsaXN0cy5mZWRvcmFwcm9qZWN0Lm9yZz4gLSAxOjAuOC4yLTcuZ2l0MjAxMDExMTcATWF0dGhpYXMgQ2xhc2VuIDxtY2xhc2VuQHJlZGhhdC5jb20+IC0gMC44LjItNi5naXQyMDEwMTExNwBEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAwLjguMi01LmdpdDIwMTAxMTE3AE1hdHRoaWFzIENsYXNlbiA8bWNsYXNlbkByZWRoYXQuY29tPiAtIDAuOC4yLTQuZ2l0MjAxMDExMTcARGFuIEhvcsOhayA8ZGFuW2F0XWRhbm55LmN6PiAtIDAuOC4yLTMuZ2l0MjAxMDExMTcATWF0dGhpYXMgQ2xhc2VuIDxtY2xhc2VuQHJlZGhhdC5jb20+IC0gMC44LjItMi5naXQyMDEwMTExNwBEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAwLjguMi0xLmdpdDIwMTAxMTE3AE1hdHRoaWFzIENsYXNlbiA8bWNsYXNlbkByZWRoYXQuY29tPiAtIDAuOC4xLTEwLjEARGFuIFdpbGxpYW1zIDxkY2J3QHJlZGhhdC5jb20+IC0gMC44LjEtMTAARGFuIFdpbGxpYW1zIDxkY2J3QHJlZGhhdC5jb20+IC0gMC44LjEtOQBEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAwLjguMS04AERhbiBXaWxsaWFtcyA8ZGNid0ByZWRoYXQuY29tPiAtIDAuOC4xLTcARGFuIFdpbGxpYW1zIDxkY2J3QHJlZGhhdC5jb20+IC0gMC44LjEtNgBEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAwLjguMS01AERhbiBXaWxsaWFtcyA8ZGNid0ByZWRoYXQuY29tPiAtIDAuOC4xLTQARGFuIFdpbGxpYW1zIDxkY2J3QHJlZGhhdC5jb20+IC0gMC44LjEtMwBEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAwLjguMS0yAERhbiBXaWxsaWFtcyA8ZGNid0ByZWRoYXQuY29tPiAtIDAuOC4xLTEATWF0dGhpYXMgQ2xhc2VuIDxtY2xhc2VuQHJlZGhhdGNvbT4gLSAwLjguMS0wLjUARGFuIFdpbGxpYW1zIDxkY2J3QHJlZGhhdC5jb20+IC0gMC44LjEtMC40AERhbiBXaWxsaWFtcyA8ZGNid0ByZWRoYXQuY29tPiAtIDAuOC4xLTAuMwBEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAwLjguMS0wLjIuZ2l0MjAxMDA1MTkARGFuIFdpbGxpYW1zIDxkY2J3QHJlZGhhdC5jb20+IC0gMC44LjEtMC4xLmdpdDIwMTAwNTEwAERhbiBXaWxsaWFtcyA8ZGNid0ByZWRoYXQuY29tPiAtIDAuOC0xMy5naXQyMDEwMDUwOQBEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAwLjgtMTIuZ2l0MjAxMDA1MDQARGFuIFdpbGxpYW1zIDxkY2J3QHJlZGhhdC5jb20+IC0gMC44LTExLmdpdDIwMTAwNTAzAERhbiBXaWxsaWFtcyA8ZGNid0ByZWRoYXQuY29tPiAtIDAuOC0xMC5naXQyMDEwMDUwMgBEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAwLjgtOS5naXQyMDEwMDQyOQBEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAwLjgtOC5naXQyMDEwMDQyNgBEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAwLjgtNy5naXQyMDEwMDQyMgBEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAwLjgtNi5naXQyMDEwMDQwOABEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAwLjgtNS5naXQyMDEwMDQwOABEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAwLjgtNC5naXQyMDEwMDMyNQBEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAwLjgtMy5naXQyMDEwMDMyMwBEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAwLjgtMi5naXQyMDEwMDMxNwBEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAwLjgtMS5naXQyMDEwMDIxOQBEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAwLjgtMC40LmdpdDIwMTAwMjExAEtldmluIEtvZmxlciA8S2V2aW5AdGlnY2MudGljYWxjLm9yZz4gLSAwLjgtMC4zLmdpdDIwMTAwMTI5AERhbiBXaWxsaWFtcyA8ZGNid0ByZWRoYXQuY29tPiAtIDAuOC0wLjIuZ2l0MjAxMDAxMjkARGFuIFdpbGxpYW1zIDxkY2J3QHJlZGhhdC5jb20+IC0gMC44LTAuMS5naXQyMDEwMDEyMgBEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAwLjcuOTk5LTIuZ2l0MjAxMDAxMjAARGFuIFdpbGxpYW1zIDxkY2J3QHJlZGhhdC5jb20+IC0gMC43Ljk5OS0xLmdpdDIwMTAwMTIwAERhbiBXaWxsaWFtcyA8ZGNid0ByZWRoYXQuY29tPiAtIDAuNy45OTgtMS5naXQyMDEwMDEwNgBEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAwLjcuOTk3LTIuZ2l0MjAwOTEyMTQARGFuIFdpbGxpYW1zIDxkY2J3QHJlZGhhdC5jb20+IC0gMC43Ljk5Ny0xAERhbiBXaWxsaWFtcyA8ZGNid0ByZWRoYXQuY29tPiAtIDAuNy45OTYtNy5naXQyMDA5MTExMwBEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAwLjcuOTk2LTYuZ2l0MjAwOTEwMjEARGFuIFdpbGxpYW1zIDxkY2J3QHJlZGhhdC5jb20+IC0gMC43Ljk5Ni01LmdpdDIwMDkxMDIxAERhbiBXaWxsaWFtcyA8ZGNid0ByZWRoYXQuY29tPiAtIDAuNy45OTYtNC5naXQyMDA5MTAwMgBEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAwLjcuOTk2LTMuZ2l0MjAwOTA5MjgATWF0dGhpYXMgQ2xhc2VuIDxtY2xhc2VuQHJlZGhhdC5jb20+IC0gMC43Ljk5Ni0zLmdpdDIwMDkwOTIxAERhbiBXaWxsaWFtcyA8ZGNid0ByZWRoYXQuY29tPiAtIDAuNy45OTYtMi5naXQyMDA5MDkyMQBEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAwLjcuOTk2LTEuZ2l0MjAwOTA4MjYARGFuIFdpbGxpYW1zIDxkY2J3QHJlZGhhdC5jb20+IC0gMC43Ljk5NS0zLmdpdDIwMDkwODEzAEJhc3RpZW4gTm9jZXJhIDxibm9jZXJhQHJlZGhhdC5jb20+IDAuNy45OTUtMi5naXQyMDA5MDgwNABEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAwLjcuOTk1LTEuZ2l0MjAwOTA4MDQATWF0dGhpYXMgQ2xhc2VuIDxtY2xhc2VuQHJlZGhhdC5jb20+IC0gMC43Ljk5NS0xLmdpdDIwMDkwNzI4AERhbiBXaWxsaWFtcyA8ZGNid0ByZWRoYXQuY29tPiAtIDAuNy45OTUtMC5naXQyMDA5MDcyOABGZWRvcmEgUmVsZWFzZSBFbmdpbmVlcmluZyA8cmVsLWVuZ0BsaXN0cy5mZWRvcmFwcm9qZWN0Lm9yZz4gLSAxOjAuNy4xLTkuZ2l0MjAwOTA3MDgARGFuIFdpbGxpYW1zIDxkY2J3QHJlZGhhdC5jb20+IC0gMC43LjEtOC5naXQyMDA5MDcwOABEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAwLjcuMS03LmdpdDIwMDkwNzA4AERhbiBXaWxsaWFtcyA8ZGNid0ByZWRoYXQuY29tPiAtIDAuNy4xLTYuZ2l0MjAwOTA2MTcARGFuIFdpbGxpYW1zIDxkY2J3QHJlZGhhdC5jb20+IC0gMC43LjEtNS5naXQyMDA5MDYxNwBLYXJzdGVuIEhvcHAgPGthcnN0ZW5AcmVkaGF0LmNvbT4gMC43LjEtNC5naXQyMDA5MDQxNC4xAEFkYW0gSmFja3NvbiA8YWpheEByZWRoYXQuY29tPiAxOjAuNy4xLTQuZ2l0MjAwOTA0MTQARGFuIFdpbGxpYW1zIDxkY2J3QHJlZGhhdC5jb20+IC0gMTowLjcuMS0zLmdpdDIwMDkwNDE0AERhbiBXaWxsaWFtcyA8ZGNid0ByZWRoYXQuY29tPiAtIDE6MC43LjEtMi5naXQyMDA5MDQxNABEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAxOjAuNy4xLTEARGFuIFdpbGxpYW1zIDxkY2J3QHJlZGhhdC5jb20+IC0gMTowLjcuMC4xMDAtMi5naXQyMDA5MDQwOABEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAxOjAuNy4wLjEwMC0xAERhbiBXaWxsaWFtcyA8ZGNid0ByZWRoYXQuY29tPiAtIDE6MC43LjAuOTktNQBEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAxOjAuNy4wLjk5LTQARGFuIFdpbGxpYW1zIDxkY2J3QHJlZGhhdC5jb20+IC0gMTowLjcuMC45OS0zLjUARGFuIFdpbGxpYW1zIDxkY2J3QHJlZGhhdC5jb20+IC0gMTowLjcuMC45OS0zAERhbiBXaWxsaWFtcyA8ZGNid0ByZWRoYXQuY29tPiAtIDE6MC43LjAuOTktMgBEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAxOjAuNy4wLjk5LTEARGFuIFdpbGxpYW1zIDxkY2J3QHJlZGhhdC5jb20+IC0gMTowLjcuMC45OC0xLmdpdDIwMDkwMjI1AEZlZG9yYSBSZWxlYXNlIEVuZ2luZWVyaW5nIDxyZWwtZW5nQGxpc3RzLmZlZG9yYXByb2plY3Qub3JnPiAtIDE6MC43LjAuOTctNi5naXQyMDA5MDIyMABEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAxOjAuNy4wLjk3LTUuZ2l0MjAwOTAyMjAARGFuIFdpbGxpYW1zIDxkY2J3QHJlZGhhdC5jb20+IC0gMTowLjcuMC45Ny00LmdpdDIwMDkwMjE5AERhbiBXaWxsaWFtcyA8ZGNid0ByZWRoYXQuY29tPiAtIDE6MC43LjAuOTctMgBEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAxOjAuNy4wLjk3LTEARGFuIFdpbGxpYW1zIDxkY2J3QHJlZGhhdC5jb20+IC0gMTowLjcuMC0yLmdpdDIwMDkwMjA3AERhbiBXaWxsaWFtcyA8ZGNid0ByZWRoYXQuY29tPiAtIDE6MC43LjAtMS5naXQyMDA5MDEwMgBEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAxOjAuNy4wLTAuMTIuc3ZuNDMyNgBEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAxOjAuNy4wLTAuMTIuc3ZuNDI5NgBEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAxOjAuNy4wLTAuMTIuc3ZuNDI5NQBEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAxOjAuNy4wLTAuMTIuc3ZuNDI5MwBEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAxOjAuNy4wLTAuMTEuc3ZuNDIyOQBEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAxOjAuNy4wLTAuMTEuc3ZuNDIwMQBEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAxOjAuNy4wLTAuMTEuc3ZuNDE3NQBEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAxOjAuNy4wLTAuMTEuc3ZuNDE3NABEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAxOjAuNy4wLTAuMTEuc3ZuNDAyMi40AERhbiBXaWxsaWFtcyA8ZGNid0ByZWRoYXQuY29tPiAtIDE6MC43LjAtMC4xMS5zdm40MDIyLjMARGFuIFdpbGxpYW1zIDxkY2J3QHJlZGhhdC5jb20+IC0gMTowLjcuMC0wLjExLnN2bjQwMjIuMgBEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAxOjAuNy4wLTAuMTEuc3ZuNDAyMi4xAERhbiBXaWxsaWFtcyA8ZGNid0ByZWRoYXQuY29tPiAtIDE6MC43LjAtMC4xMS5zdm40MDIyAERhbiBXaWxsaWFtcyA8ZGNid0ByZWRoYXQuY29tPiAtIDE6MC43LjAtMC4xMS5zdm4zOTMwAERhbiBXaWxsaWFtcyA8ZGNid0ByZWRoYXQuY29tPiAtIDE6MC43LjAtMC4xMS5zdm4zOTI3AERhbiBXaWxsaWFtcyA8ZGNid0ByZWRoYXQuY29tPiAtIDE6MC43LjAtMC4xMS5zdm4zODQ2AERhbiBXaWxsaWFtcyA8ZGNid0ByZWRoYXQuY29tPiAtIDE6MC43LjAtMC4xMS5zdm4zODMwAE1hdHRoaWFzIENsYXNlbiA8bWNsYXNlbkByZWRoYXQuY29tPiAtIDE6MC43LjAtMC4xMC5zdm4zODAxAERhbiBXaWxsaWFtcyA8ZGNid0ByZWRoYXQuY29tPiAtIDE6MC43LjAtMC4xMC5zdm4zODAxAERhbiBXaWxsaWFtcyA8ZGNid0ByZWRoYXQuY29tPiAtIDE6MC43LjAtMC4xMC5zdm4zNzQ3AERhbiBXaWxsaWFtcyA8ZGNid0ByZWRoYXQuY29tPiAtIDE6MC43LjAtMC45LjQuc3ZuMzY3NQBEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAxOjAuNy4wLTAuOS4zLnN2bjM2NzUARGFuIFdpbGxpYW1zIDxkY2J3QHJlZGhhdC5jb20+IC0gMTowLjcuMC0wLjkuMy5zdm4zNjY5AERhbiBXaWxsaWFtcyA8ZGNid0ByZWRoYXQuY29tPiAtIDE6MC43LjAtMC45LjMuc3ZuMzY2NwBEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAxOjAuNy4wLTAuOS4zLnN2bjM2NjUARGFuIFdpbGxpYW1zIDxkY2J3QHJlZGhhdC5jb20+IC0gMTowLjcuMC0wLjkuMy5zdm4zNjIzAERhbiBXaWxsaWFtcyA8ZGNid0ByZWRoYXQuY29tPiAtIDE6MC43LjAtMC45LjIuc3ZuMzYyMwBEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAxOjAuNy4wLTAuOS4yLnN2bjM2MjIARGFuIFdpbGxpYW1zIDxkY2J3QHJlZGhhdC5jb20+IC0gMTowLjcuMC0wLjkuMi5zdm4zNjIwAERhbiBXaWxsaWFtcyA8ZGNid0ByZWRoYXQuY29tPiAtIDE6MC43LjAtMC45LjIuc3ZuMzYxOQBEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAxOjAuNy4wLTAuOS4yLnN2bjM2MTQARGFuIFdpbGxpYW1zIDxkY2J3QHJlZGhhdC5jb20+IC0gMTowLjcuMC0wLjkuMi5zdm4zNTkwAERhbiBXaWxsaWFtcyA8ZGNid0ByZWRoYXQuY29tPiAtIDE6MC43LjAtMC45LjIuc3ZuMzU3OABEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAxOjAuNy4wLTAuOS4yLnN2bjM1NzEARGFuIFdpbGxpYW1zIDxkY2J3QHJlZGhhdC5jb20+IC0gMTowLjcuMC0wLjkuMi5zdm4zNTcwAERhbiBXaWxsaWFtcyA8ZGNid0ByZWRoYXQuY29tPiAtIDE6MC43LjAtMC45LjIuc3ZuMzU2NgBEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAxOjAuNy4wLTAuOS4xLnN2bjM1NjYARGFuIFdpbGxpYW1zIDxkY2J3QHJlZGhhdC5jb20+IC0gMTowLjcuMC0wLjkuMS5zdm4zNTQ5AERhbiBXaWxsaWFtcyA8ZGNid0ByZWRoYXQuY29tPiAtIDE6MC43LjAtMC45LjEuc3ZuMzU0OABEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAxOjAuNy4wLTAuOS4xLnN2bjM1NDcARGFuIFdpbGxpYW1zIDxkY2J3QHJlZGhhdC5jb20+IC0gMTowLjcuMC0wLjkuMS5zdm4zNTI3AERhbiBXaWxsaWFtcyA8ZGNid0ByZWRoYXQuY29tPiAtIDE6MC43LjAtMC45LjEuc3ZuMzUyMQBEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAxOjAuNy4wLTAuOS4xLnN2bjM0NzYARGFuIFdpbGxpYW1zIDxkY2J3QHJlZGhhdC5jb20+IC0gMTowLjcuMC0wLjkuMS5zdm4zNDczAERhbiBXaWxsaWFtcyA8ZGNid0ByZWRoYXQuY29tPiAtIDE6MC43LjAtMC45LjEuc3ZuMzQ3MgBEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAxOjAuNy4wLTAuOS4xLnN2bjM0NDAARGFuIFdpbGxpYW1zIDxkY2J3QHJlZGhhdC5jb20+IC0gMTowLjcuMC0wLjkuMS5zdm4zNDE3AERhbiBXaWxsaWFtcyA8ZGNid0ByZWRoYXQuY29tPiAtIDE6MC43LjAtMC44LnN2bjM0MTcARGFuIFdpbGxpYW1zIDxkY2J3QHJlZGhhdC5jb20+IC0gMTowLjcuMC0wLjguc3ZuMzM3MABEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAxOjAuNy4wLTAuOC5zdm4zMzY5AERhbiBXaWxsaWFtcyA8ZGNid0ByZWRoYXQuY29tPiAtIDE6MC43LjAtMC44LnN2bjMzMTkARGFuIFdpbGxpYW1zIDxkY2J3QHJlZGhhdC5jb20+IC0gMTowLjcuMC0wLjguc3ZuMzMxMgBEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAxOjAuNy4wLTAuOC5zdm4zMzAyAERhbiBXaWxsaWFtcyA8ZGNid0ByZWRoYXQuY29tPiAtIDE6MC43LjAtMC44LnN2bjMyNjEARGFuIFdpbGxpYW1zIDxkY2J3QHJlZGhhdC5jb20+IC0gMTowLjcuMC0wLjguc3ZuMzIzNQBEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAxOjAuNy4wLTAuOC5zdm4zMjA0AERhbiBXaWxsaWFtcyA8ZGNid0ByZWRoYXQuY29tPiAtIDE6MC43LjAtMC44LnN2bjMxODEARGFuIFdpbGxpYW1zIDxkY2J3QHJlZGhhdC5jb20+IC0gMTowLjcuMC0wLjguc3ZuMzE4MABEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAxOjAuNy4wLTAuOC5zdm4zMTM4AERhbiBXaWxsaWFtcyA8ZGNid0ByZWRoYXQuY29tPiAtIDE6MC43LjAtMC44LnN2bjMxMzQARGFuIFdpbGxpYW1zIDxkY2J3QHJlZGhhdC5jb20+IC0gMTowLjcuMC0wLjguc3ZuMzEzMwBKZXJlbXkgS2F0eiA8a2F0empAcmVkaGF0LmNvbT4gLSAxOjAuNy4wLTAuOC5zdm4zMTA5AERhbiBXaWxsaWFtcyA8ZGNid0ByZWRoYXQuY29tPiAtIDE6MC43LjAtMC42LjYuc3ZuMzEwOQBEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAxOjAuNy4wLTAuNi41LnN2bjMxMDkARGFuIFdpbGxpYW1zIDxkY2J3QHJlZGhhdC5jb20+IC0gMTowLjcuMC0wLjYuNS5zdm4zMDk2AERhbiBXaWxsaWFtcyA8ZGNid0ByZWRoYXQuY29tPiAtIDE6MC43LjAtMC42LjQuc3ZuMzA5NgBEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAxOjAuNy4wLTAuNi4zLnN2bjMwOTYARGFuIFdpbGxpYW1zIDxkY2J3QHJlZGhhdC5jb20+IC0gMTowLjcuMC0wLjYuMy5zdm4zMDk0AERhbiBXaWxsaWFtcyA8ZGNid0ByZWRoYXQuY29tPiAtIDE6MC43LjAtMC42LjIuc3ZuMzA4MABEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAxOjAuNy4wLTAuNi4xLnN2bjMwMzAARGFuIFdpbGxpYW1zIDxkY2J3QHJlZGhhdC5jb20+IC0gMTowLjcuMC0wLjUuc3ZuMzAzMABEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAxOjAuNy4wLTAuNC5zdm4zMDMwAERhbiBXaWxsaWFtcyA8ZGNid0ByZWRoYXQuY29tPiAtIDE6MC43LjAtMC40LnN2bjMwMjAARGFuIFdpbGxpYW1zIDxkY2J3QHJlZGhhdC5jb20+IC0gMTowLjcuMC0wLjMuc3ZuMzAyMABEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAxOjAuNy4wLTAuMy5zdm4zMDE2AERhbiBXaWxsaWFtcyA8ZGNid0ByZWRoYXQuY29tPiAtIDE6MC43LjAtMC4zLnN2bjMwMTQARGFuIFdpbGxpYW1zIDxkY2J3QHJlZGhhdC5jb20+IC0gMTowLjcuMC0wLjMuc3ZuMzAwOABEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAxOjAuNy4wLTAuMy5zdm4yOTk1AERhbiBXaWxsaWFtcyA8ZGNid0ByZWRoYXQuY29tPiAtIDE6MC43LjAtMC4zLnN2bjI5OTQARGFuIFdpbGxpYW1zIDxkY2J3QHJlZGhhdC5jb20+IC0gMTowLjcuMC0wLjMuc3ZuMjk4MwBEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAxOjAuNy4wLTAuMy5zdm4yOTcwAERhbiBXaWxsaWFtcyA8ZGNid0ByZWRoYXQuY29tPiAtIDE6MC43LjAtMC4zLnN2bjI5NjIARGFuIFdpbGxpYW1zIDxkY2J3QHJlZGhhdC5jb20+IC0gMTowLjcuMC0wLjMuc3ZuMjk2MQBEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAxOjAuNy4wLTAuMy5zdm4yOTE0AERhbiBXaWxsaWFtcyA8ZGNid0ByZWRoYXQuY29tPiAtIDE6MC43LjAtMC4zLnN2bjI5MDcARGFuIFdpbGxpYW1zIDxkY2J3QHJlZGhhdC5jb20+IC0gMTowLjcuMC0wLjMuc3ZuMjg4NgBEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAxOjAuNy4wLTAuMy5zdm4yODgwAERhbiBXaWxsaWFtcyA8ZGNid0ByZWRoYXQuY29tPiAtIDE6MC43LjAtMC4zLnN2bjI4NTIARGFuIFdpbGxpYW1zIDxkY2J3QHJlZGhhdC5jb20+IC0gMTowLjcuMC0wLjMuc3ZuMjg0OQBEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAxOjAuNy4wLTAuMy5zdm4yODQ0AERhbiBXaWxsaWFtcyA8ZGNid0ByZWRoYXQuY29tPiAtIDE6MC43LjAtMC4yLnN2bjI4MzMARGFuIFdpbGxpYW1zIDxkY2J3QHJlZGhhdC5jb20+IC0gMTowLjcuMC0wLjEuc3ZuMjczNgBDaHJpc3RvcGhlciBBaWxsb24gPGNhaWxsb25AcmVkaGF0LmNvbT4gMTowLjYuNS05AENocmlzdG9waGVyIEFpbGxvbiA8Y2FpbGxvbkByZWRoYXQuY29tPiAxOjAuNi41LTgARGFuIFdpbGxpYW1zIDxkY2J3QHJlZGhhdC5jb20+IDE6MC42LjUtNwBEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gMTowLjYuNS02AERhbiBXaWxsaWFtcyA8ZGNid0ByZWRoYXQuY29tPiAxOjAuNi41LTUARGFuIFdpbGxpYW1zIDxkY2J3QHJlZGhhdC5jb20+IDE6MC42LjUtNABEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gMTowLjYuNS0zAENocmlzdG9waGVyIEFpbGxvbiA8Y2FpbGxvbkByZWRoYXQuY29tPiAxOjAuNi41LTIAQ2hyaXN0b3BoZXIgQWlsbG9uIDxjYWlsbG9uQHJlZGhhdC5jb20+IDE6MC42LjUtMQBEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAxOjAuNi41LTAuNy5zdm4yNTQ3AE1hdHRoZXcgQmFybmVzICA8bWJhcm5lc0ByZWRoYXQuY29tPiAxOjAuNi41LTAuNi5zdm4yNDc0AE1hdHRoaWFzIENsYXNlbiA8bWNsYXNlbkByZWRoYXQuY29tPiAxOjAuNi41LTAuNS5zdm4yNDc0AERhbiBXaWxsaWFtcyA8ZGNid0ByZWRoYXQuY29tPiAtIDE6MC42LjUtMC40LnN2bjI0NzQAQ2hyaXN0b3BoZXIgQWlsbG9uIDxjYWlsbG9uQHJlZGhhdC5jb20+IC0gMTowLjYuNS0wLjMuY3ZzMjAwNjEwMjUAQ2hyaXN0b3BoZXIgQWlsbG9uIDxjYWlsbG9uQHJlZGhhdC5jb20+IC0gMTowLjYuNS0wLjIuY3ZzMjAwNjEwMjUATWF0dGhpYXMgQ2xhc2VuIDxtY2xhc2VuQHJlZGhhdC5jb20+AERhbiBXaWxsaWFtcyA8ZGNid0ByZWRoYXQuY29tPiAtIDE6MC42LjUtMC5jdnMyMDA2MTAyNQBDaHJpc3RvcGhlciBBaWxsb24gPGNhaWxsb25AcmVkaGF0LmNvbT4gLSAxOjAuNi40LTYAQ2hyaXN0b3BoZXIgQWlsbG9uIDxjYWlsbG9uQHJlZGhhdC5jb20+IC0gMTowLjYuNC01AEJpbGwgTm90dGluZ2hhbSA8bm90dGluZ0ByZWRoYXQuY29tPiAtIDE6MC42LjQtNABEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAxOjAuNi40LTMARGFuIFdpbGxpYW1zIDxkY2J3QHJlZGhhdC5jb20+IC0gMTowLjYuNC0yAENocmlzdG9waGVyIEFpbGxvbiA8Y2FpbGxvbkByZWRoYXQuY29tPiAtIDAuNy4wLTAuY3ZzMjAwNjA1MjkuNwBSYXkgU3Ryb2RlIDxyc3Ryb2RlQHJlZGhhdC5jb20+IC0gMC43LjAtMC5jdnMyMDA2MDUyOS42AFJheSBTdHJvZGUgPHJzdHJvZGVAcmVkaGF0LmNvbT4gLSAwLjcuMC0wLmN2czIwMDYwNTI5LjUAUmF5IFN0cm9kZSA8cnN0cm9kZUByZWRoYXQuY29tPiAtIDAuNy4wLTAuY3ZzMjAwNjA1MjkuNABKb2huIChKNSkgUGFsbWllcmkgPGpvaG5wQHJlZGhhdC5jb20+IC0gMC43LjAtMC5jdnMyMDA2MDUyOS4zAEpvaG4gKEo1KSBQYWxtaWVyaSA8am9obnBAcmVkaGF0LmNvbT4gLSAwLjcuMC0wLmN2czIwMDYwNTI5LjIASmVzc2UgS2VhdGluZyA8amtlYXRpbmdAcmVkaGF0LmNvbT4gLSAwLjcuMC0wLmN2czIwMDYwNTI5LjEuMQBEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAwLjcuMC0wLmN2czIwMDYwNTI5AERhbiBXaWxsaWFtcyA8ZGNid0ByZWRoYXQuY29tPiAtIDAuNy4wLTAuY3ZzMjAwNjA1MjEAQmlsbCBOb3R0aW5naGFtIDxub3R0aW5nQHJlZGhhdC5jb20+IC0gMC42LjItMy5mYzYASmVyZW15IEthdHogPGthdHpqQHJlZGhhdC5jb20+IC0gMC42LjItMi5mYzYARGFuIFdpbGxpYW1zIDxkY2J3QHJlZGhhdC5jb20+IC0gMC42LjItMQBQZXRlciBKb25lcyA8cGpvbmVzQHJlZGhhdC5jb20+IC0gMC42LjAtMwBEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gMC42LjAtMgBEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gMC42LjAtMQBKZXJlbXkgS2F0eiA8a2F0empAcmVkaGF0LmNvbT4gLSAwLjUuMS0xOC5jdnMyMDA2MDMwMgBDaHJpc3RvcGhlciBBaWxsb24gPGNhaWxsb25AcmVkaGF0LmNvbT4ARGFuIFdpbGxpYW1zIDxkY2J3QHJlZGhhdC5jb20+IDAuNS4xLTE4LmN2czIwMDYwMzAxAENocmlzdG9waGVyIEFpbGxvbiA8Y2FpbGxvbkByZWRoYXQuY29tPiAwLjUuMS0xNy5jdnMyMDA2MDIyOABDaHJpc3RvcGhlciBBaWxsb24gPGNhaWxsb25AcmVkaGF0LmNvbT4gMC41LjEtMTYuY3ZzMjAwNjAyMjcAQ2hyaXN0b3BoZXIgQWlsbG9uIDxjYWlsbG9uQHJlZGhhdC5jb20+IDAuNS4xLTE1LmN2czIwMDYwMjI3AERhbiBXaWxsaWFtcyA8ZGNid0ByZWRoYXQuY29NPiAwLjUuMS0xNC5jdnMyMDA2MDIyMQBEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gMC41LjEtMTMuY3ZzMjAwNjAyMjEARGFuIFdpbGxpYW1zIDxkY2J3QHJlZGhhdC5jb20+IDAuNS4xLTEyLmN2czIwMDYwMjEzAENocmlzdG9waGVyIEFpbGxvbiA8Y2FpbGxvbkByZWRoYXQuY29tPiAwLjUuMS0xMS5jdnMyMDA2MDIwNQBKZXNzZSBLZWF0aW5nIDxqa2VhdGluZ0ByZWRoYXQuY29tPiAwLjUuMS0xMC5jdnMyMDA2MDIwNS4xAERhbiBXaWxsaWFtcyA8ZGNid0ByZWRoYXQuY29tPiAwLjUuMS0xMC5jdnMyMDA2MDIwNQBEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gMC41LjEtOS5jdnMyMDA2MDIwMgBEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gMC41LjEtOC5jdnMyMDA2MDEzMQBEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gMC41LjEtNy5jdnMyMDA2MDEzMQBEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gMC41LjEtNi5jdnMyMDA2MDEyNwBKZXNzZSBLZWF0aW5nIDxqa2VhdGluZ0ByZWRoYXQuY29tPgBKb2huIChKNSkgUGFsbWllcmkgPGpvaG5wQHJlZGhhdC5jb20+IC0gMC41LjEtNQBQZXRlciBKb25lcyA8cGpvbmVzQHJlZGhhdC5jb20+IC0gMC41LjEtNABDaHJpc3RvcGhlciBBaWxsb24gPGNhaWxsb25AcmVkaGF0LmNvbT4gLSAwLjUuMS0zAENocmlzdG9waGVyIEFpbGxvbiA8Y2FpbGxvbkByZWRoYXQuY29tPiAtIDAuNS4xLTIAQ2hyaXN0b3BoZXIgQWlsbG9uIDxjYWlsbG9uQHJlZGhhdC5jb20+IC0gMC41LjAtMgBEYW4gV2lsbGlhbXMgPGRjYndAcmVkYWh0LmNvbT4gLSAwLjQuMS01LmN2czIwMDUxMDEwAERhbiBXaWxsaWFtcyA8ZGNid0ByZWRoYXQuY29tPiAtIDAuNC4xLTQuY3ZzMjAwNTEwMDkARGFuIFdpbGxpYW1zIDxkY2J3QHJlZGhhdC5jb20+IC0gMC40LjEtMy5jdnMyMDA1MDkyMgBKZXJlbXkgS2F0eiA8a2F0empAcmVkaGF0LmNvbT4gLSAwLjQuMS0yLmN2czIwMDUwOTEyAERhbiBXaWxsaWFtcyA8ZGNid0ByZWRoYXQuY29tPiAtIDAuNC4xLTIuY3ZzMjAwNTA4MTkARGFuIFdpbGxpYW1zIDxkY2J3QHJlZGhhdC5jb20+IC0gMC40LjEARGFuIFdpbGxpYW1zIDxkY2J3QHJlZGhhdC5jb20+IC0gMC40LTM2LmN2czIwMDUwODExAERhbiBXaWxsaWFtcyA8ZGNid0ByZWRoYXQuY29tPiAtIDAuNC0zNS5jdnMyMDA1MDgxMQBSYXkgU3Ryb2RlICA8cnN0cm9kZUByZWRoYXQuY29tPiAtIDAuNC0zNC5jdnMyMDA1MDcyOQBEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAwLjQtMzQuY3ZzMjAwNTA2MjkARGF2aWQgWmV1dGhlbiA8ZGF2aWR6QHJlZGhhdC5jb20+IC0gMC40LTMzLmN2czIwMDUwNjI5AERhbiBXaWxsaWFtcyA8ZGNid0ByZWRoYXQuY29tPiAtIDAuNC0zMi5jdnMyMDA1MDYxNwBEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAwLjQtMzEuY3ZzMjAwNTA2MTYARGFuIFdpbGxpYW1zIDxkY2J3QHJlZGhhdC5jb20+IC0gMC40LTMwLmN2czIwMDUwNjE1AERhbiBXaWxsaWFtcyA8ZGNid0ByZWRoYXQuY29tPiAtIDAuNC0xNS5jdnMzMDA1MDQwNABEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAwLjQtMTQuY3ZzMzAwNTA0MDQARGFuIFdpbGxpYW1zIDxkY2J3QHJlZGhhdC5jb20+IC0gMC40LTEzLmN2czMwMDUwNDA0AERhbiBXaWxsaWFtcyA8ZGNid0ByZWRoYXQuY29tPiAtIDAuNC0xMi5jdnMyMDA1MDQwNABEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gLSAwLjQtMTEuY3ZzMjAwNTA0MDQARGFuIFdpbGxpYW1zIDxkY2J3QHJlZGhhdC5jb20+IC0gMC40LTEwLmN2czIwMDUwNDA0AERhbiBXaWxsaWFtcyA8ZGNid0ByZWRoYXQuY29tPiAtIDAuNC05LmN2czIwMDUwNDA0AEplcmVteSBLYXR6IDxrYXR6akByZWRoYXQuY29tPiAtIDAuNC04LmN2czIwMDUwNDA0AEplcmVteSBLYXR6IDxrYXR6akByZWRoYXQuY29tPiAtIDAuNC03LmN2czIwMDUwNDA0AERhbiBXaWxsaWFtcyA8ZGNid0ByZWRoYXQuY29tPiAwLjQtNi5jdnMyMDA1MDQwNABEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gMC40LTUuY3ZzMjAwNTA0MDIAQ2hyaXN0b3BoZXIgQWlsbG9uIDxjYWlsbG9uQHJlZGhhdC5jb20+IDAuNC00LmN2czIwMDUwMzE1AFJheSBTdHJvZGUgPHJzdHJvZGVAcmVkaGF0LmNvbT4gMC40LTMuY3ZzMjAwNTAzMTUAUmF5IFN0cm9kZSA8cnN0cm9kZUByZWRoYXQuY29tPiAwLjQtMi5jdnMyMDA1MDMxNQBSYXkgU3Ryb2RlIDxyc3Ryb2RlQHJlZGhhdC5jb20+IDAuNC0xLmN2czIwMDUwMzE1AFJheSBTdHJvZGUgPHJzdHJvZGVAcmVkaGF0LmNvbT4gMC40LTEuY3ZzMjAwNTAzMDcARGFuIFdpbGxpYW1zIDxkY2J3QHJlZGhhdC5jb20+IDAuMy40LTEuY3ZzMjAwNTAzMDQARGFuIFdpbGxpYW1zIDxkY2J3QHJlZGhhdC5jb20+IDAuMy4zLTIuY3ZzMjAwNTAyMjIARGFuIFdpbGxpYW1zIDxkY2J3QHJlZGhhdC5jb20+IDAuMy4zLTIuY3ZzMjAwNTAyMTQueC4xAERhbiBXaWxsaWFtcyA8ZGNid0ByZWRoYXQuY29tPiAwLjMuMy0yLmN2czIwMDUwMjE0AERhbiBXaWxsaWFtcyA8ZGNid0ByZWRoYXQuY29tPiAwLjMuMy0xLmN2czIwMDUwMjAyAERhbiBXaWxsaWFtcyA8ZGNid0ByZWRoYXQuY29tPiAwLjMuMy0xLmN2czIwMDUwMTI1AERhbiBXaWxsaWFtcyA8ZGNid0ByZWRoYXQuY29tPiAwLjMuMy0xLmN2czIwMDUwMTI0AFRoYW4gTmdvIDx0aGFuQHJlZGhhdC5jb20+IDAuMy4zLTEuY3ZzMjAwNTAxMTIuNAA8ZGNid0ByZWRoYXQuY29tPiAtIDAuMy4zLTEuY3ZzMjAwNTAxMTgAPGRjYndAcmVkaGF0LmNvbT4gLSAwLjMuMy0xLmN2czIwMDUwMTEyADxkY2J3QHJlZGhhdC5jb20+IC0gMC4zLjItNC4zLmN2czIwMDQxMjA4ADxkY2J3QHJlZGhhdC5jb20+IC0gMC4zLjItMy5jdnMyMDA0MTExNwA8ZGNid0ByZWRoYXQuY29tPiAtIDAuMy4yLTIuY3ZzMjAwNDExMTUAPGRjYndAcmVkaGF0LmNvbT4gLSAwLjMuMi0yLmN2czIwMDQxMDI5ADxkY2J3QHJlZGhhdC5jb20+IC0gMC4zLjEtMgA8anJiQHJlZGhhdC5jb20+IC0gMC4zLjEtMQBEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gMC4zLTEARGFuIFdpbGxpYW1zIDxkY2J3QHJlZGhhdC5jb20+IDAuMi00AERhbiBXaWxsaWFtcyA8ZGNid0ByZWRoYXQuY29tPiAwLjItMwBEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4gMC4yLTIARGFuIFdpbGxpYW1zIDxkY2J3QHJlZGhhdC5jb20+IDAuMi0xAEZsb3JpYW4gTGEgUm9jaGUgPEZsb3JpYW4uTGFSb2NoZUByZWRoYXQuZGU+AERhbiBXaWxsaWFtcyA8ZGNid0ByZWRoYXQuY29tPiAwLjEtMwAtIGluaXRyZDogYWNjZXB0IG1hYyBhZGRyZXNzIGFzIGludGVyZmFjZSBzcGVjaWZpZXIgKHJoICMxODc5Nzk1KQotIGluaXRyZDogZml4IHBhcnNpbmcgSVB2NiBwcmVmaXggbGVuZ3RoIChyaCAjMTg3OTc5NSkALSBkaGNwOiBhZGQgZGhjcC12ZW5kb3ItY2xhc3MtaWRlbnRpZmllciBvcHRpb24gKHJoICMxODcxMDQyKQotIGluaXRyZDogcGFyc2UgJ3JkLm5ldC5kaGNwLnZlbmRvci1jbGFzcycga2VybmVsIGNtZGxpbmUgYXJnIChyaCAjMTg3MjI5OSkALSBjb3JlOiBmaXggaGFuZGxpbmcgb2YgbG9jYWwgcm91dGVzIGFzIGRlZmF1bHQgcm91dGUgYW5kIG9uIEQtQnVzIChyaCAjMTg2ODk4MikALSBjb3JlOiBmaXggd2FpdC1kZXZpY2UtdGltZW91dCByYWNlIGFuZCBzdXBwb3J0IGdlbmVyYWwgZGV2aWNlIG1hdGNoZXMgKHJoICMxODUzMzQ4KQAtIGJvbmQ6IGZpeCBSZWFwcGx5IGRvZXMgbm90IHVwZGF0ZSBib25kIG9wdGlvbnMgKHJoICMxODQ3ODE0KQotIGRoY3A6IHN1cHBvcnQgREhDUHY2IGZxZG5fZnFkbiBvcHRpb24gZm9yIGhvc3RuYW1lIChyaCAjMTg1ODM0NCkALSBjb3JlOiBmaXggbWFuYWdpbmcgZGV2aWNlcyBhZnRlciByZXN1bWluZyBmcm9tIHNsZWVwIChyaCAjMTg1NTU2MykKLSBkaGNwOiBmaXggQlBGIGZpbHRlciBmb3IgaW50ZXJuYWwgY2xpZW50IG9uIGJpZyBlbmRpYW4gYXJjaCAocmggIzE4NjE0ODgpCi0gY29yZTogc3VwcG9ydCB3YXJuaW5nIGxvZyBzZXR0aW5nIElQdjYgTVRVIHdpdGggSVB2NiBkaXNhYmxlZCAocmggIzE4NDA5ODkpCi0gd2lmaTogZml4IGNyYXNoIHBhcnNpbmcgaW5jb21wbGV0ZSBCU1MgaW5mbyAocmggIzE4NjYzOTUpAC0gY29yZTogZml4IGdlbmVyYXRpb24gb2YgbG9jYWwgcm91dGVzIGZvciBWUkYgZGV2aWNlcyAocmggIzE4NTcxMzMpCi0gdGVhbTogZml4IGNyYXNoIG9uIGZhaWx1cmUgdG8gY29ubmVjdCB0byB0ZWFtZCAocmggIzE4NTY3MjMpCi0gY29yZTogZml4IGRldGVjdGluZyBmYWlsdXJlIG9mIG1hc3RlciBhY3RpdmUtY29ubmVjdGlvbiAocmggIzE4NDUwMTgpCi0gY29yZTogZml4IHdhcm5pbmcgYWJvdXQgc2V0dGluZyBhY3RpdmVfc2xhdmUgb2YgYm9uZCB3aGVuIGFjdGl2YXRpbmcgbWFzdGVyIChyaCAjMTg1ODMyNikKLSBpbXBvcnQgdHJhbnNsYXRpb25zIChyaCAjMTgyMDU1MikALSB1cGRhdGUgdG8gMS4yNi4wCi0gZGV2aWNlOiByZXNldCBTUi1JT1YgcGFyYW1ldGVycyBvbiBhY3RpdmF0aW9uIGZhaWx1cmUgKHJoICMxODE5NTg3KQotIGluaXRyZDogZW5hYmxlIGlwdjYubWV0aG9kPWF1dG8gd2l0aCBpcD1kaGNwNiAocmggIzE4NTQzMjMpCi0gY29yZTogYWRkICJubS1zaGFyZWQiIHpvbmUgZm9yIGZpcmV3YWxsZCBmb3Igc2hhcmVkIG1vZGUgKHJoICMxODM0OTA3KQotIHBwcDogZml4IHRha2luZyBjb250cm9sIG9mIGxpbmsgKHJoICMxODQ5Mzg2KQAtIGRldmljZTogcmVzdGFydCBESENQIG9ubHkgZm9yIGRldmljZXMgdGhhdCBhcmUgYWN0aXZlIG9yIGFjdGl2YXRpbmcgKHJoICMxODUyNjEyKQotIGluaXRyZDogZml4IGdlbmVyYXRpbmcgZGVmYXVsdCBCT09USUY9IGNvbm5lY3Rpb24gKHJoICMxODUzMjc3KQotIG92czogZml4IHJhY2UgY29uZGl0aW9uIHdoZW4gc2V0dGluZyBNQUMgYWRkcmVzcyBmb3Igb3ZzIGludGVyZmFjZXMgKHJoICMxODUyMTA2KQAtIHVwZGF0ZSB0byAxLjI2LXJjMiAoMS4yNS45MSkKLSBpbml0cmQ6IHNldCBpcHY2Lm1ldGhvZD1hdXRvIHdoZW4gdXNpbmcgSVB2NCBzdGF0aWMgY29uZmlndXJhdGlvbiAocmggIzE4NDg5NDMpCi0gY2xvdWQtc2V0dXA6IGFkZCBzdXBwb3J0IGZvciBHb29nbGUgQ2xvdWQgbG9hZC1iYWxhbmNpbmcgcm91dGVzIChyaCAjMTgyMTc4NykALSB1cGRhdGUgdG8gMS4yNi1yYzEgKDEuMjUuOTApCi0gY29yZTogc3VwcG9ydCBtb3JlIHRjIHFkaXNjcyAodGJmIGFuZCBzZnEpIChyaCAjMTU0NjgwMikKLSBjb3JlOiBzdXBwb3J0IG1hdGNoIGRldmljZXMgZm9yIGNvbm5lY3Rpb24gcHJvZmlsZSBieSBQQ0kgYWRkcmVzcyAoSURfUEFUSCkgKHJoICMxNjczMzIxKQotIG92czogZml4IHBlZXIgcHJvcGVydHkgZm9yIE9WUyBwYXRjaCBpbnRlcmZhY2UgKHJoICMxODQ1MjE2KQotIGRvYzogYWRkIG1hbnVhbCBwYWdlcyBubS1zZXR0aW5ncy1kYnVzIGFuZCBubS1zZXR0aW5ncy1ubWNsaSAocmggIzE2MTQ3MjYpCi0gd2lmaTogZG9uJ3QgYmxvY2sgYXV0b2Nvbm5lY3QgZm9yIHByb2ZpbGVzIHRoYXQgbmV2ZXIgc3VjY2VlZGVkIHRvIGNvbm5lY3QgKHJoICMxNzgxMjUzKQotIGRidXMsbm1jbGk6IGhpZ2hsaWdodCBleHRlcm5hbGx5IG1hbmFnZWQgZGV2aWNlcyAocmggIzE4MTYyMDIpAC0gdXBkYXRlIHRvIDEuMjUuMiAoZGV2ZWxvcG1lbnQpCi0gc3VwcG9ydCBldGh0b29sIGNvYWxlc2NlIGFuZCByaW5nIG9wdGlvbnMgKHJoICMxNjE0NzAwKQotIGNvcmU6IGltcHJvdmUgc3luY2hyb25pemF0aW9uIG9mIHFkaXNjcyB3aXRoIGtlcm5lbCAocmggIzE4MTU4NzUpCi0gdGVhbTogc3VwcG9ydCBydW5uaW5nIHdpdGhvdXQgRC1CdXMgKHJoICMxNzg0MzYzKQotIGNvcmU6IGZpeCBwb3RlbnRpYWwgY3Jhc2ggd2hlbiBhdXRvYWN0aXZhdGluZyBjaGlsZCBjb25uZWN0aW9ucyAocmggIzE3NzgwNzMpCi0gZXRoZXJuZXQ6IHJlc2V0IG9yaWdpbmFsIGF1dG9uZWdvdGlhdGlvbi9zcGVlZC9kdXBsZXggc2V0dGluZ3Mgb24gZGVhY3RpdmF0aW9uIChyaCAjMTgwNzE3MSkKLSBjb3JlOiBmaXggc2V0dGluZyBJUHY2IHRva2VuIGluIGtlcm5lbCAocmggIzE4MTk2ODApAC0gdXBkYXRlIHRvIDEuMjUuMSAoZGV2ZWxvcG1lbnQpCi0gaW1wcm92ZSBkb2N1bWVudGF0aW9uIChyaCAjMTY1MTU5NCwgcmggIzE4MTkyNTkpCi0gdnJmOiBhZGQgc3VwcG9ydCAocmggIzE3NzM5MDgpCi0gYm9uZDogaW1wcm92ZSBzZXR0aW5nIGRlZmF1bHQgb3B0aW9ucyBmb3IgbWlpbW9uIGFuZCB1cGRlbGF5IChyaCAjMTgwNTE4NCwgcmggIzE4MDY1NDkpCi0gYmx1ZXRvb3RoOiBmaXggY3Jhc2ggaGFuZGxpbmcgRFVOIG1vZGVtIChyaCAjMTgyNjYzNSkKLSBjb3JlOiBmaXggcG90ZW50aWFsIGluZmluaXRlIGxvb3Agd2l0aCBwcmVmaXggZGVsZWdhdGlvbiAocmggIzE0ODgwMzApCi0gaW5pdHJkOiBmaXhlcyBmb3IgcnVubmluZyBOZXR3b3JrTWFuYWdlciBpbiBpbml0cmQgKHJoICMxNjI3ODIwLCAjMTcxMDkzNSwgIzE3NDQ5MzUsICMxNzcxNzkyKQotIGNvcmU6IHByZXZlbnQgbXVsdGlwbGUgYXR0ZW1wdHMgdG8gY3JlYXRlIGRlZmF1bHQgd2lyZWQgY29ubmVjdGlvbiAocmggIzE2ODc5MzcpCi0gYnJpZGdlOiBzdXBwb3J0IG1vcmUgb3B0aW9ucyAocmggIzE3NTU3NjgpCi0gbGlibm0sZGJ1czogZXhwb3NlIEh3QWRkcmVzcyBmb3IgYWxsIGRldmljZSB0eXBlcyAocmggIzE3ODY5MzcpCi0gY29yZTogZml4IHJvdXRlIHByaW9yaXR5IGZvciBJUHY2IChyaCAjMTgxNDU1NykKLSBjb3JlOiBmaXggY3Jhc2ggZHVyaW5nIHJlYXBwbHkgKHJoICMxODE2MDY3KQotIGNvcmU6IGNsZWFyIElQIGFkZHJlc3MgZnJvbSBicmlkZ2Ugc2xhdmUgKHJoICMxODE2NTE3KQotIG92czogc3VwcG9ydCBjaGFuZ2luZyBNVFUgb2YgT1ZTIGludGVyZmFjZXMgKHJoICMxODIwMDUyKQotIG5tLW9ubGluZTogc3VwcG9ydCBzZXR0aW5nIHRpbWVvdXQgZm9yIE5ldHdvcmtNYW5hZ2VyLXdhaXQtb25saW5lIChyaCAjMTgyODQ1OCkALSBjb3JlOiBmaXggbGVha2luZyBkZXZpY2Ugc3RhdGUgZmlsZXMgaW4gL3J1biAocmggIzE4MTAxNTMpCi0gZGhjcDogZml4IGNyYXNoIGluIG5ldHRvb2xzIGNsaWVudCB3aGVuIGxlYWtpbmcgR1NvdXJjZSAocmggIzE4MTAxODgpAC0gZGhjcDoga2VlcCB0cnlpbmcgYWZ0ZXIgYSBzZW5kIGZhaWx1cmUgKHJoICMxODA2NTE2KQotIG92czogZmFpbCBwb3J0IGVuc2xhdmVtZW50IHdoZW4gdGhlIGJyaWRnZSBpcyBub3QgZm91bmQgKHJoICMxNzk3Njk2KQAtIGJvbmQ6IGZpeCBzZXR0aW5nIGFycF92YWxpZGF0ZSBvcHRpb24gZm9yIG90aGVyIGJvbmRpbmcgbW9kZXMgKHJoICMxNzg5NDM3KQAtIFVwZGF0ZSB0byAxLjIyLjgKLSBBZGRlZCBjb25maWd1cmF0aW9uIG9wdGlvbiB0byBjdXN0b21pemUgSVB2NiBSQSB0aW1lb3V0IChyaCAjMTgwMTE1OCkKLSBSZW1vdmVkIGxlbmd0aCBsaW1pdGF0aW9uIGZvciBPVlMgQnJpZGdlLCBQYXRjaGVzIGFuZCBJbnRlcmZhY2VzIChvbmx5IFBhdGNoIHR5cGVzKSBuYW1lcyAocmggIzE3ODg0MzIpCi0gUmV3b3JrZWQgYXN5bmNocm9ub3VzIGRlYWN0aXZhdGlvbiBvZiBPVlMgaW50ZXJmYWNlcyAocmggIzE3ODc5ODksIHJoICMxNzgyNzAxKQotIEZpeGVkIGZhaWx1cmUgd2hlbiBjcmVhdGluZyB0ZWFtIGludGVyZmFjZXMgKHJoICMxNzk4OTQ3KQotIGlmY2ZnLXJoOiBmaXggY2xlYXJpbmcgb3ZzIHNsYXZlIHR5cGUgZnJvbSBpZmNmZy1yaCBmaWxlIChyaCAjMTgwNDE2NykKLSBGaXhlZCBidWcgY2F1c2luZyB2aXJ0dWFsIGRldmljZXMgdG8gbm90IGJlIGF2YWlsYWJsZSBhZnRlciBBZGRDb25uZWN0aW9uKCkvVXBkYXRlKCkgKHJoICMxODA0MzUwKQAtIFVwZGF0ZSB0byAxLjIyLjYKLSBubS1kZXZpY2U6IGFkZCBuZXcgcGVuZGluZyBhY3Rpb24gdG8ga2VlcCB0aGUgZGV2aWNlIGJ1c3kgd2hlbiBpbiBiZXR3ZWVuIHN0YXRlcyAocmggIzE3NTk5NTYpCi0gY2xvdWQtc2V0dXA6IGF2b2lkIHVuc3VwcG9ydGVkIHNldHRpbmdzIGluIHN5c3RlbWQgc2VydmljZSB1bml0IChyaCAjMTc5MTc1OCkKLSBkbyBub3QgY3JlYXRlIHZpcnR1YWwgZGV2aWNlIGlmIG1hc3RlciBpcyBub3QgcHJlc2VudCAocmggIzE3OTU5MTkpCi0gYWxsb3cgSVB2NiBSQSB0aW1lb3V0IHRvIGJlIHNldCB0byBhIHZhbHVlIGhpZ2hlciB0aGFuIDEyMCBzZWNvbmRzIChyaCAjMTc5NTk1NykKLSBmaXggYmVoYXZpb3VyIHdoZW4gJ2lwdjQuZGhjcC10aW1lb3V0JyBvcHRpb24gaXMgc2V0IHRvICdpbmZpbml0eScgKHJoICMxNzkxMzc4KQAtIFVwZGF0ZSB0byAxLjIyLjQKLSBkaGNwOiBmaXggYmVoYXZpb3Igb2YgaW50ZXJuYWwgREhDUCBjbGllbnQgd2hlbiB0aGUgc2VydmVyIHNlbmRzIGEgTkFLIChyaCAjMTc4NzIxOSkALSBVcGRhdGUgdG8gMS4yMi4yCi0gY29yZSxsaWJubTogZXhwb3NlIGNhcGFiaWxpdHkgZm9yIE9WUyBzdXBwb3J0IChyaCAjMTc4NTE0NykKLSBkaGNwOiB2YXJpb3VzIGJ1Z2ZpeGVzIGZvciBuZXR0b29scyBuLWRoY3A0IHBsdWdpbgAtIGRoY3A6IGZpeCBwYXJzaW5nIG9mIEROUyBzZWFyY2ggZG9tYWluIHdpdGggbmV0dG9vbHMgcGx1Z2luIChyaCAjMTc4Mzk4MSkALSBVcGRhdGUgdG8gMS4yMi4wCi0gc3VwcG9ydCBtYWluLmF1dGgtcG9sa2l0PXJvb3Qtb25seSBzZXR0aW5nIHRvIGFsbG93IHJvb3Qgb25seSAocmggIzE3NjIwMTEpAC0gVXBkYXRlIHRvIDEuMjItcmMxICgxLjIxLjkwKQotIGxhcmdlIGludGVybmFsIHJld29yayBvZiBsaWJubSdzIE5NQ2xpZW50Ci0gZGhjcDogc3dpdGNoIGltcGxlbWVudGF0aW9uIG9mICJpbnRlcm5hbCIgREhDUCB0byBuZXR0b29scycgbi1kaGNwNAotIGFkZCBzdXBwb3J0IGZvciBjYXJyaWVyIHN0YXRlIG9mIGRldmljZXMgb24gRC1CdXMvbGlibm0gKHJoICMxNzIyMDI0KQotIGNsb3VkLXNldHVwOiBhZGQgaW5pdGlhbCBhbmQgZXhwZXJpbWVudGFsIHRvb2wgZm9yIGNvbmZpZ3VyaW5nIGluIGNsb3VkIChyaCAjMTY0MjQ2MSkKLSBkaGNwOiBzdXBwb3J0IGNvbmZpZ3VyaW5nIEZRRE4gaG9zdG5hbWUgZmxhZ3MgKHJoICMxNjQ5MzY4KQAtIFVwZGF0ZSB0byAxLjIxLjMsIGEgZGV2ZWxvcG1lbnQgc25hcHNob3Qgb2YgTmV0d29ya01hbmFnZXIgMS4yMgotIHN1cHBvcnQgY29uZmlndXJpbmcgZGVmYXVsdCByb3V0ZSBhcyBhIHJlZ3VsYXIsIHN0YXRpYyByb3V0ZSAocmggIzE3MTQ0MzgpAC0gaW5pdHJkOiByZS1lbmFibGUgdGhlIGdlbmVyYXRvciAocmggIzE2MjYzNDgpAC0gd2lmaTogZGV0ZWN0IEZUIHN1cHBvcnQgcGVyIGRldmljZSB0byBmaXggaXNzdWVzIHdpdGggZHJpdmVyIHN1cHBvcnQgKHJoICMxNzQzNzMwKQotIGRvYzogZml4IGRlZmF1bHQgdmFsdWVzIGluIHByZS1nZW5lcmF0ZWQgZG9jdW1lbnRhdGlvbiAocmggIzE3Mzc5NDUpAC0gSW1wb3J0IHRyYW5zbGF0aW9ucyAocmggIzE2ODk5OTkpAC0gVXBkYXRlIHRvIDEuMjAuMCByZWxlYXNlCi0gZml4IGxpY2Vuc2UgY29tbWVudHMgZm9yIFJQTSBwYWNrYWdlIChyaCAjMTcyMzM5NSkKLSBkaGNwOiBkaXNhYmxlIGV4cGVyaW1lbnRhbCBuZXR0b29scyBESENQIHBsdWdpbgAtIFVwZGF0ZSB0byAxLjIwLXJjMSBzbmFwc2hvdAotIHNldHRpbmdzOiBzdXBwb3J0IHJlYWQtb25seSBkaXJlY3RvcnkgZm9yIGtleWZpbGUgcHJvZmlsZXMgKHJoICMxNjc0NTQ1KQotIHNldHRpbmdzOiBhZGQgQWRkQ29ubmVjdGlvbjIgRC1CdXMgQVBJIHRvIHN1cHByZXNzIGF1dG9jb25uZWN0IChyaCAjMTY3NzA2OCkKLSBzZXR0aW5nczogYWRkIG5vLXJlYXBwbHkgZmxhdCB0byBVcGRhdGUyIEQtQnVzIEFQSSAocmggIzE2NzcwNzApCi0gb3BlbnZzd2l0Y2g6IGRvbid0IHJlbGVhc2Ugc2xhdmVzIG9uIHF1aXQgKHJoICMxNzMzNzA5KQotIGRoY3A6IGV4cG9zZSBwcml2YXRlIG9wdGlvbnMgZm9yIGludGVybmFsIERIQ1AgcGx1Z2luIChyaCAjMTY2MzI1MykKLSBkZXZpY2U6IGZpeCByb3V0ZSB0YWJsZSBzZXR0aW5nIHdoZW4gcmUtYWN0aXZhdGluZyBkZXZpY2UgKHJoICMxNzE5MzE4KQotIG1hbjogY2xhcmlmeSBleGFtcGxlIGluIG5tLW9wZW52c3dpdGNoIG1hbnVhbCBwYWdlIChyaCAjMTYzODAzOCkKLSBtYW46IHZhcmlvdXMgaW1wcm92ZW1lbnRzIG9mIG1hbnVhbCBwYWdlcyAocmggIzE2MTI1NTQpAC0gaW5pdHJkOiBkaXNhYmxlIHRoZSBnZW5lcmF0b3IgYWdhaW4ALSBVcGRhdGUgdG8gYSBuZXdlciAxLjIwIHNuYXBzaG90Ci0gb3ZzOiBzdXBwb3J0IGRwZGsgaW50ZXJmYWNlcyAocmggIzE2MTI1MDMpCi0gbGlibm0tY29yZTogY2hhbmdlIHVuc3VwcG9ydGVkIG1vZGVzIGZvciBhcnBfaXBfdGFyZ2V0cyBib25kIG9wdGlvbiAocmggIzE3MTgxNzMpCi0gaXB2NjogYWRkICdkaXNhYmxlZCcgbWV0aG9kIChyaCAjMTY0Mzg0MSkKLSBkZXZpY2U6IGZpeCBtYXRjaGluZyBwYXJlbnQgZGV2aWNlIGJ5IGNvbm5lY3Rpb24gVVVJRCAocmggIzE3MTY0MzgpCi0gY2xpOiBmaXggZGVmYXVsdCB2YWx1ZSBmb3IgdGVhbS5ydW5uZXItbWluLXBvcnRzIChyaCAjMTcxNjk4NykKLSBpbml0cmQ6IHJlLWVuYWJsZSB0aGUgZ2VuZXJhdG9yIChyaCAjMTYyNjM0OCkALSBVcGRhdGUgdG8gYSAxLjIwIHNuYXBzaG90Ci0gY29yZTogZml4IGEgcG9zc2libGUgY3Jhc2ggb24gZGV2aWNlIHJlbW92YWwgKHJoICMxNjU5NzkwKQotIGNvcmU6IGZpeCBhdXRvbWF0aWMgYWN0aXZhdGlvbiBvZiBzb2Z0d2FyZSBkZXZpZWNzIChyaCAjMTY2Nzg3NCkKLSB0ZWFtOiB1c2Ugc3RyaWN0IEpTT04gcGFyc2luZyBmb3IgY29uZmlndXJhdGlvbiAocmggIzE2OTE2MTkpCi0gdGVhbTogZG9uJ3Qga2lsbCB0ZWFtZCBmb3IgZXh0ZXJuYWwgZGV2aWNlcyAocmggIzE2OTMxNDIpCi0gbG9nZ2luZzogZG9uJ3QgbWlzdXNlIFNZU0xPR19GQUNJTElUWSBmaWVsZCBpbiBqb3VybmFsIChyaCAjMTcwOTc0MSkALSBjbGllbnRzOiBmaXggc3RyaW5nIGxpc3Qgc2V0dGVyIChyaCAjMTY3MTIwMCkALSBkZXZpY2U6IGltcHJvdmUgYXNzdW1pbmcgYnJpZGdlcyBvbiBzdGFydHVwIChyaCAjMTU5MzkzOSkALSBkaGNwOiBmaXggY2xpZW50LWlkIGFuZCBEVUlEIGZvciBpbmZpbmliYW5kICgyKSAocmggIzE2NTgwNTcpAC0gZGV2aWNlOiBlbnN1cmUgSVAgY29uZmlndXJhdGlvbiBpcyByZXN0b3JlZCB3aGVuIGxpbmsgZ29lcyB1cCAocmggIzE2MzY3MTUpCi0gZGhjcDogZml4IGNsaWVudC1pZCBhbmQgRFVJRCBmb3IgaW5maW5pYmFuZCAocmggIzE2NTgwNTcpCi0gZGhjcDogY2hhbmdlIGludGVybmFsIERIQ1AgcGx1Z2luJ3MgaXB2NC5kaGNwLWNsaWVudC1pZCBzZXR0aW5nIHRvICJtYWMiIChyaCAjMTY2MTE2NSkALSBpZmNmZy1yaDogZml4IHJlYWRpbmcgU1ItSU9WIHNldHRpbmdzCi0gZGhjcDogc3VwcG9ydCBjbGllbnQtaWQgYW5kIERVSUQgZm9yIGluZmluaWJhbmQgKHJoICMxNjU4MDU3KQAtIGRoY3A6IGZpeCBkZWZhdWx0IGNsaWVudC1pZCBmb3IgTmV0d29ya01hbmFnZXItY29uZmlnLXNlcnZlciAocmggIzE2NTgwNTcpCi0gY29ubmVjdGl2aXR5OiBmaXggY3Jhc2ggYW5kIHBvcnRhbCBkZXRlY3Rpb24gKHJoICMxNjU4MjE3KQotIGNvcmU6IGNvbWJpbmUgc2VjcmV0LWtleSB3aXRoIG1hY2hpbmUtaWQgZm9yIGhvc3QgaWRlbnRpdHkgKHJoICMxNjQyMDIzKQotIFNSLUlPViByZWxhdGVkIGZpeGVzIChyaCAjMTY1MTU3OCwgcmggIzE2NTE1NzYsIHJoICMxNjUxOTc5KQotIGNvcmU6IGZpeCB1cGRhdGluZyBhZ2VudC1vd25lZCBzZWNyZXRzIChyaCAjMTY1ODc3MSkKLSBjb3JlOiBubyBsb25nZXIgc2V0IHJwX2ZpbHRlciBzeXNjdGwgKHJoICMxNjUxMDk3KQotIGRldmljZTogZG9uJ3QgdGFrZSBkZXZpY2UgZG93biB3aGVuIGNoYW5naW5nIE1BQyBhZGRyZXNzIChyaCAjMTY1OTA2MykKLSBkb2M6IHVzZSBwcmVnZW5lcmF0ZWQgbWFudWFsIHBhZ2VzIGFuZCBndGstZG9jIGZyb20gc291cmNlIHRhcmJhbGwALSBVcGRhdGUgdHJhbnNsYXRpb25zIChyaCAjMTYwODMyMykALSBkZXZpY2U6IGltcHJvdmUgYXV0byBzZWxlY3Rpb24gb2YgZGV2aWNlIHdoZW4gYWN0aXZhdGluZyBwcm9maWxlIChyaCAjMTYzOTI1NCkALSBkaGNwOiBmaXggb3V0LW9mLWJvdW5kcyBoZWFwIHdyaXRlIGZvciBESENQdjYgd2l0aCBpbnRlcm5hbCBwbHVnaW4gKENWRS0yMDE4LTE1Njg4KQotIGRoY3A6IHJldmVydCBsZXR0aW5nIGludGVybmFsIERIQ1AgZ2VuZXJhdGUgZGVmYXVsdCBjbGllbnQtaWQgYmFzZWQgb24gTUFDIGFkZHJlc3MgKHJoICMxNjQwNDY0KQotIGRoY3A6IHN1cHBvcnQgImR1aWQiIHNldHRpbmcgZm9yIGlwdjQuZGhjcC1jbGllbnQtaWQKLSBkaGNwOiBzdXBwb3J0ICIke01BQ30iIGlkZW50aWZpZXIgZm9yIGNvbm5lY3Rpb24uc3RhYmxlLWlkCi0gZGhjcDogc3VwcG9ydCBkaGNwLXBsdWdpbiBkZXZpY2Ugc3BlYyBmb3IgbWF0Y2hpbmcgZGV2aWNlcyBpbiBOZXR3b3JrTWFuYWdlci5jb25mCi0gZGhjcDogaW5zdGFsbCBjb25maWd1cmF0aW9uIHNuaXBwZXQgaW4gY29uZmlnLXNlcnZlciBwYWNrYWdlIGZvciBpcHY0LmRoY3AtY2xpZW50LWlkPW1hYyAocmggIzE2NDA0OTQpCi0gZG5zOiByZW1vdmUgbGltaXRhdGlvbiBmb3Igc2l4IEROUyBzZWFyY2ggZW50cmllcyAocmggIzE2NDk3MDQpCi0gbGlibm06IGZpeCBjcmFzaCBjYW5jZWxsaW5nIGFjdGl2YXRpb24gZnJvbSB3aXRoaW4gY2FsbGJhY2sgKHJoICMxNjQzMDg1KQAtIFVwZGF0ZSB0cmFuc2xhdGlvbnMgKHJoICMxNjA4MzIzKQAtIERvbid0IGRlcGVuZCBvbiBvcGVudnN3aXRjaCAocmggIzE2MjkxNzgpCi0gZGV2aWNlOiBkb24ndCByZW1vdmUgcm91dGVzIHdoZW4gdGhlIGludGVyZmFjZSBpcyBkb3duIChyaCAjMTYzNjcxNSkALSBkaGNwOiBsZXQgaW50ZXJuYWwgREhDUCBnZW5lcmF0ZSBkZWZhdWx0IGNsaWVudC1pZCBiYXNlZCBvbiBNQUMgYWRkcmVzcyAoMikALSBkaGNwOiBsZXQgaW50ZXJuYWwgREhDUCBnZW5lcmF0ZSBkZWZhdWx0IGNsaWVudC1pZCBiYXNlZCBvbiBNQUMgYWRkcmVzcwAtIFVwZGF0ZSB0byAxLjE0LjAgcmVsZWFzZQAtIGRoY3A6IHN3aXRjaCBkZWZhdWx0IERIQ1AgcGx1Z2luIGZyb20gZGhjbGllbnQgdG8gaW50ZXJuYWwgKHJoICMxNTcxNjU1KQAtIFVwZGF0ZSB0byAxLjEzLjMsIGEgZGV2ZWxvcG1lbnQgc25hcHNob3Qgb2YgTmV0d29ya01hbmFnZXIgMS4xNAAtIFVwZGF0ZSB0byAxLjEzLjIsIGEgZGV2ZWxvcG1lbnQgc25hcHNob3Qgb2YgTmV0d29ya01hbmFnZXIgMS4xNAAtIFVwZGF0ZSB0byAxLjEzLjAsIGEgZGV2ZWxvcG1lbnQgc25hcHNob3Qgb2YgTmV0d29ya01hbmFnZXIgMS4xNAAtIFVwZGF0ZSB0byAxLjExLjQsIGEgZGV2ZWxvcG1lbnQgc25hcHNob3Qgb2YgTmV0d29ya01hbmFnZXIgMS4xMgotIFN3aXRjaCB0byBQeXRob24gMy1vbmx5IGJ1aWxkIHJvb3QALSBjb3JlOiB1c2UgZ251dGxzIGNyeXB0byBsaWJyYXJ5IGluc3RlYWQgb2YgbnNzIChyaCAjMTU4MTY5MykALSBjb3JlOiBmaXggZXJyb3IgZGVzdHJveWluZyBjaGVja3BvaW50cyAocmgjMTU3NDU2NSkALSBVcGRhdGUgdG8gMS4xMS4zIHJlbGVhc2UALSBVcGRhdGUgdG8gMS4xMC4yIHJlbGVhc2UALSBBcHBseSBwYXRjaCBmcm9tIHByZXZpb3VzIGNvbW1pdAAtIHN5c3RlbWQ6IGxldCBOTS13LW8uc2VydmljZSByZXF1aXJlIE5ldHdvcmtNYW5hZ2VyIHNlcnZpY2UgKHJoICMxNDUyODY2KQotIHBsYXRmb3JtOiByZWFsbHkgdHJlYXQgZHNhIGRldmljZXMgYXMgcmVndWxhciB3aXJlZCBldGhlcm5ldCAocmggIzEzNzEyODkpCi0gbGlibm06IGZpeCBhY2Nlc3NpbmcgZW5hYmxlZCBhbmQgbWV0ZXJlZCBwcm9wZXJ0aWVzAC0gcGxhdGZvcm06IHRyZWF0IGRzYSBkZXZpY2VzIGFzIHJlZ3VsYXIgd2lyZWQgZXRoZXJuZXQgKHJoICMxMzcxMjg5KQAtIGRldmljZTogZml4IGZyb3plbiBub3RpZnkgc2lnbmFscyBvbiB1bnJlYWxpemUgZXJyb3IgcGF0aAotIGRldmljZTogZml4IGRlbGF5IHN0YXJ0dXAgY29tcGxldGUgZm9yIHVucmVhbGl6ZWQgZGV2aWNlcwotIGtleWZpbGU6IGZpeCBoYW5kbGluZyByb3V0ZXMgd2l0aCBtZXRyaWMgemVybwAtIGNsaTogZml4IGNyYXNoIGluIGludGVyYWN0aXZlIG1vZGUgZm9yICJkZXNjcmliZSAuIgotIGxpYm5tL3t2cG4scmVtb3RlfS1jb25uZWN0aW9uOiBkaXNjb25uZWN0IHNpZ25hbCBoYW5kbGVycyB3aGVuIGRpc3Bvc2VkCi0gbGlibm0vbWFuYWdlcjogZGlzY29ubmVjdCBmcm9tIHNpZ25hbHMgb24gdGhlIHByb3h5IHdoZW4gd2UncmUgZGlzcG9zZWQALSBlbmFibGUgTmV0d29ya01hbmFnZXItd2FpdC1vbmxpbmUuc2VydmljZSBvbiBwYWNrYWdlIHVwZ3JhZGUgKHJoIzE0NTU3MDQpAC0gVXBkYXRlIHRvIDEuOC40IHJlbGVhc2UKLSBkb24ndCBpbnN0YWxsIE5ldHdvcmtNYW5hZ2VyLXdhaXQtb25saW5lIGluIG5ldHdvcmstb25saW5lLnRhcmdldC53YW50cyAocmgjMTQ1NTcwNCkALSBSZWJ1aWx0IGZvciBodHRwczovL2ZlZG9yYXByb2plY3Qub3JnL3dpa2kvRmVkb3JhXzI3X0JpbnV0aWxzX01hc3NfUmVidWlsZAAtIFJlYnVpbHQgZm9yIGh0dHBzOi8vZmVkb3JhcHJvamVjdC5vcmcvd2lraS9GZWRvcmFfMjdfTWFzc19SZWJ1aWxkAC0gcHJvdmlkZSBOZXR3b3JrTWFuYWdlci1kZXZlbAAtIE5ldHdvcmtNYW5hZ2VyLXdpZmkgYW5kIE5ldHdvcmtNYW5hZ2VyLWdsaWItZGV2ZWwgc2hvdWxkIHJlcXVpcmUKICBOZXR3b3JrTWFuYWdlciwgbm90IHByb3ZpZGUgaXQuAC0gVXBkYXRlIHRvIDEuOC4yIHJlbGVhc2UKLSBkaGNwL2RoY2xpZW50OiBpbXByb3ZlICJpbnRlcmZhY2UiIHN0YXRlbWVudCBwYXJzaW5nCi0gZG5zOiBmaXggcHVibGljIHN1ZmZpeCBjaGVjayBvbiBzZWFyY2ggZG9tYWlucyAocmggIzE0MDQzNTApAC0gZGV2aWNlOiBkb24ndCBjaGFuZ2UgTVRVIHVubGVzcyBleHBsaWNpdGx5IGNvbmZpZ3VyZWQgKHJoICMxNDYwNzYwKQotIGNvcmU6IGRvbid0IHJlbW92ZSBleHRlcm5hbCBJUHY0IGFkZHJlc3NlcyAocmggIzE0NTk4MTMpCi0gY2xpOiBmaXggb3V0cHV0IG9mIGlmYWNlIGluIG92ZXJ2aWV3IG91dHB1dCAocmgjMTQ2MDIxOSkKLSBwcHA6IHVuZXhwb3J0IE5NUFBQTWFuYWdlciBpbnN0YW5jZSBvbiBkaXNwb3NlIChyaCMxNDU5NTc5KQotIGNsaTogcmVtb3ZlIHNwdXJpb3VzIGRldmljZSBuYW1lcyBmcm9tIHdpZmkgc3ViY29tbWFuZHMgb3V0cHV0IChyaCMxNDYwNTI3KQAtIGJvbmQ6IGZpeCBjcmFzaCBjb21wYXJpbmcgbW9kZSB3aGlsZSBnZW5lcmF0aW5nIGJvbmQgY29ubmVjdGlvbiAocmggIzE0NTk1ODApCi0gY29ubmVjdGl2aXR5OiBmaXggcm91dGUgcGVuYWx0eSBpZiBXV0FOIGFuZCBCVCBkZXZpY2UgdXNpbmcgaXAtaWZpbmRleCAocmggIzE0NTk5MzIpCi0gZGV2aWNlOiBwZXJzaXN0IG5tLW93bmVkIGluIHJ1biBzdGF0ZSAocmggIzEzNzYxOTkpCi0gZGV2aWNlOiBmaXggYXNzdW1pbmcgbWFzdGVyIGRldmljZSBvbiByZXN0YXJ0IChyaCAjMTQ1MjA2MikKLSBkZXZpY2U6IGFwcGx5IHJvdXRlIG1ldHJpYyBwZW5hbGl0eSBvbmx5IHdoZW4gdGhlIGRlZmF1bHQgcm91dGUgZXhpc3RzIChyaCAjMTQ1OTYwNCkKLSBjb25uZWN0aXZpdHk6IGZpeCBwZXJpb2RpYyBjb25uZWN0aXZpdHkgY2hlY2sgKHJoICMxNDU4Mzk5KQotIGJvbmQ6IGltcHJvdmUgb3B0aW9uIG1hdGNoaW5nIG9uIGRhZW1vbiByZXN0YXJ0IChyaCAjMTQ1NzkwOSkKLSBkZXZpY2U6IGZpeCB0b3VjaGluZyBkZXZpY2UgYWZ0ZXIgZXh0ZXJuYWwgYWN0aXZhdGlvbiAocmggIzE0NTcyNDIpAC0gaWZjZmctcmg6IGZpeCB3cml0aW5nIGxlZ2FjeSBORVRNQVNLIHZhbHVlIChyaCAjMTQ0NTQxNCkKLSB0dWk6IGZpeCBjcmFzaCBkdXJpbmcgY29ubmVjdCAocmggIzE0NTY4MjYpCi0gbGlibm06IGZpeCBsaWJubSByZWplY3RpbmcgVkxBTiBJRCA0MDk1IChyaCAjMTQ1NjkxMSkKLSBibHVldG9vdGg6IGZpeCBjcmFzaCBvbiBjb25uZWN0aW5nIHRvIGEgTkFQIChyaCAjMTQ1NDM4NSkKLSBkZXZpY2U6IHJlbGVhc2UgcmVtb3ZlZCBkZXZpY2VzIGZyb20gbWFzdGVyIG9uIGNsZWFudXAgKHJoICMxNDQ4OTA3KQotIG5tY2xpOiBmaXggY3Jhc2ggd2hlbiBzZXR0aW5nIDgwMi0xeC5wYXNzd29yZC1yYXcgKHJoICMxNDU2MzYyKQAtIGRldmljZTogdXBkYXRlIGV4dGVybmFsIGNvbmZpZ3VyYXRpb24gYmVmb3JlIGNvbW1pdCAoZml4IGJ1ZykgKHJoICMxNDQ5ODczKQAtIGRoY3A6IGRvbid0IGFkZCByb3V0ZSB0byBESENQNCBzZXJ2ZXIgKHJoICMxNDQ4OTg3KQotIGRldmljZTogdXBkYXRlIGV4dGVybmFsIGNvbmZpZ3VyYXRpb24gYmVmb3JlIGNvbW1pdCAocmggIzE0NDk4NzMpCi0gbGlibm06IGZpeCBOVUwgdGVybWluYXRpb24gb2YgZGV2aWNlJ3MgZGVzY3JpcHRpb24gKHJoICMxNDQzMTE0KQotIGxpYm5tLCBjb3JlOiBlbnN1cmUgdmFsaWQgVVRGLTggaW4gZGV2aWNlIHByb3BlcnRpZXMgKHJoICMxNDQzMTE0KQotIGNvcmU6IGZpeCBkZXZpY2UncyBVREkgcHJvcGVydHkgb24gRC1CdXMgKHJoICMxNDQzMTE0KQotIGlmY2ZnLXJoOiBvbWl0IGVtcHR5IG5leHQgaG9wIGZvciByb3V0ZXMgaW4gbGVnYWN5IGZvcm1hdCAocmggIzE0NTI2NDgpCi0gY29yZTogZml4IHBlcnNpc3RpbmcgbWFuYWdlZCBzdGF0ZSBvZiBkZXZpY2UgKHJoICMxNDQwMTcxKQotIHByb3h5OiBmaXggdXNlLWFmdGVyLWZyZWUgKHJoICMxNDUwNDU5KQotIGRldmljZTogZG9uJ3Qgd3JvbmdseSBkZWxheSBzdGFydHVwIGNvbXBsZXRlIHdhaXRpbmcgZm9yIGNhcnJpZXIgKHJoICMxNDUwNDQ0KQAtIFVwZGF0ZSB0byAxLjguMCByZWxlYXNlAC0gVXBkYXRlIHRvIHRoaXJkIFJlbGVhc2UgQ2FuZGlkYXRlIG9mIE5ldHdvcmtNYW5hZ2VyIDEuOAAtIFVwZGF0ZSB0byBzZWNvbmQgUmVsZWFzZSBDYW5kaWRhdGUgb2YgTmV0d29ya01hbmFnZXIgMS44AC0gVXBkYXRlIHRvIGEgc25hcHNob3Qgb2YgMS44Lnggc2VyaWVzAC0gVXBkYXRlIHRvIGEgMS42LjIgcmVsZWFzZQAtIFJlYnVpbHQgZm9yIGh0dHBzOi8vZmVkb3JhcHJvamVjdC5vcmcvd2lraS9GZWRvcmFfMjZfTWFzc19SZWJ1aWxkAC0gVXBkYXRlIHRvIGEgMS42LjAgcmVsZWFzZQAtIFVwZGF0ZSB3aXRoIGZpeGVzIGZyb20gdXBzdHJlYW0gbm0tMS02IGJyYW5jaAotIGJ1aWxkOiBsZXQgbGlibm0gYW5kIGdsaWIgcGFja2FnZSBjb25mbGljdCAocmggIzE0MDY0NTQpAC0gVXBkYXRlIHRvIGEgMS42LXJjMQAtIGZpeCBidWlsZCBmYWlsdXJlIGR1ZSB0byBjbGFzaCBvZiBiaXR3aXNlIGRlZmluZXMALSBSZWJ1aWxkIGZvciByZWFkbGluZSA3LngALSBVcGRhdGUgdG8gYSBuZXdlciBkZXZlbG9wbWVudCBzbmFwc2hvdAAtIFJlYnVpbGQgcGFja2FnZSBmb3IgdmFsYSBnZW5lcmF0aW9uIGVycm9yIChyaCMxMzk4NzM4KQAtIGZpeCBlbmFibGluZyBpZmNmZy1yaCBwbHVnaW4gYnkgZGVmYXVsdCBmb3IgKz0vLT0gb3BlcmF0aW9ucyAocmgjMTM5NzkzOCkKLSBmaXggbWlzc2luZyBzeW1ib2wgX25tX2RldmljZV9mYWN0b3J5X25vX2RlZmF1bHRfc2V0dGluZ3MALSBmaXggZW5hYmxpbmcgaWZjZmctcmggcGx1Z2luIGJ5IGRlZmF1bHQgKHJoIzEzOTc5MzgpCi0gbW92ZSB0cmFuc2xhdGlvbiBmaWxlcyBmcm9tIGNvcmUgdG8gbGlibm0vZ2xpYiBzdWJwYWNrYWdlcwAtIFVwZGF0ZSB0byBhIGRldmVsb3BtZW50IHNuYXBzaG90AC0gVXBkYXRlIHRvIDEuNC4yAC0gd2lmaTogZml4IGFub3RoZXIgYWN0aXZhdGlvbiBmYWlsdXJlIHdoZW4gY2hhbmdpbmcgTUFDIGFkZHJlc3MgKHJoIzEzNzE0NzgsIGJnbyM3NzA0NTYsIGJnbyM3NzA1MDQpAC0gZGhjcDogZml4IHJhY2UgdG8gbWlzcyBESENQIGxlYXNlIGV2ZW50IChyaCMxMzcyODU0KQAtIHdpZmk6IGZpeCBhY3RpdmF0aW9uIGZhaWx1cmUgZHVlIHRvIGVycm9yIGNoYW5naW5nIE1BQyBhZGRyZXNzIChyaCMxMzcxNDc4LCBiZ28jNzcwNDU2KQAtIFVwZGF0ZSB0byBOZXR3b3JrTWFuYWdlciAxLjQuMCByZWxlYXNlAC0gZml4IHN0YWxlIFdpLUZpIGFmdGVyIHJlc3VtZSBmcm9tIHN1c3BlbmQgKHJoIzEzNjIxNjUpAC0gUmVidWlsZCBhZ2FpbnN0IG5ld2VyIEdMaWIgdG8gb3ZlcmNvbWUgbG9nZ2luZyBwcm9ibGVtcyBvbiBpNjg2AC0gVXBkYXRlIHRvIGEgbGF0ZXIgR2l0IHNuYXBzaG90AC0gZG5zOiBjbGVhciBjYWNoZSBvZiBkbnNtYXNxIHdoZW4gdXBkYXRpbmcgRE5TIGNvbmZpZ3VyYXRpb24gKHJoIzEzMzg3MzEpCi0gZG5zOiBmaXggcmVzdGFydGluZyBkbnNtYXNxIGluc3RhbmNlCi0gc3BlYzogZGVwZW5kIGJsdWV0b290aCBzdWJwYWNrYWdlIG9uIGV4YWN0IHd3YW4gdmVyc2lvbgotIGFsbDogZml4IHNvbWUgbWVtbGVha3MALSBVcGRhdGUgdG8gTmV0d29ya01hbmFnZXIgMS4yLjIgcmVsZWFzZQAtIFVwZGF0ZSB0byBOZXR3b3JrTWFuYWdlciAxLjIuMCByZWxlYXNlAC0gVXBkYXRlIHRvIE5ldHdvcmtNYW5hZ2VyIDEuMi1yYzIALSBVcGRhdGUgdG8gTmV0d29ya01hbmFnZXIgMS4yLXJjMQAtIEZpeCBsaW5rIGRldGVjdGlvbiBvbiA0LjUgd2hlbiBidWlsZCB3aXRoIDQuNiBrZXJuZWwALSBVcGRhdGUgdG8gTmV0d29ya01hbmFnZXIgMS4yLWJldGEzAC0gRml4IG9idGFpbmluZyB0aGUgaG9zdG5hbWUgZnJvbSBETlMgKHJoICMxMzA4OTc0KQAtIEZpeCBhY3RpdmF0aW5nIGNvbm5lY3Rpb25zIGluIHNvbWUgY2FzZXMgKHJoICMxMzE2NDg4KQAtIFVwZGF0ZSB0byBOZXR3b3JrTWFuYWdlciAxLjItYmV0YTIKLSBSZXN5bmMgd2l0aCBjb250cmliL3JwbQAtIHNwZWNmaWxlOiByZW1vdmUgbm8gbG9uZ2VyIG5lZWRlZCAxMC1pYmZ0LXBsdWdpbi5jb25mIGFuZCBzeW5jIHdpdGggY29udHJpYi9ycG0KLSBjb3JlOiBiYWNrcG9ydCBmaXggZm9yIG1pc3NpbmcgYnJhY2VzIGJ1ZyBpbiBwbGF0Zm9ybQAtIFJlYnVpbHQgZm9yIGh0dHBzOi8vZmVkb3JhcHJvamVjdC5vcmcvd2lraS9GZWRvcmFfMjRfTWFzc19SZWJ1aWxkAC0gVXBkYXRlIHRvIE5ldHdvcmtNYW5hZ2VyIDEuMi1iZXRhMQAtIEFkZCB1cHN0cmVhbSBmaXggZm9yIEFQIGxpc3QgaGFzaCBmdW5jdGlvbiAoIzEyODg4NjcpAC0gVXBkYXRlIHRvIGEgbGF0ZXIgc25hcHNob3QKLSBFbmFibGVzIFJGQzcyMTcgYWRkcmVzc2luZyBmb3IgbmV3IElQdjYgY29ubmVjdGlvbnMALSBEcm9wIHRoZSBOZXR3b3JrTWFuYWdlci1kZXZlbCBzdWJwYWNrYWdlIChmb2xkZWQgaW50byBsaWJubS1nbGliLWRldmVsKQotIFVwZGF0ZSB0byBhIGxhdGVyIHNuYXBzaG90AC0gSW1wb3J0IGEgbmV3ZXIgMS4yIGdpdCBzbmFwc2hvdAAtIEZpeCB0ZXN0IHJ1bgAtIEltcG9ydCBhIDEuMiBnaXQgc25hcHNob3QALSBGaXggY29tbWFuZCBsaW5lIHBhcnNpbmcALSBVcGRhdGUgdG8gMS4wLjYgcmVsZWFzZQAtIGZpeCBjcmFzaCB3aGVuIGRlYWN0aXZhdGluZyBhc3N1bWVkIGRldmljZSAocmggIzEyNTM5NDkpCi0gYmFja3BvcnQgd2lmaSBzY2FuIG9wdGlvbnMgZm9yIHNzaWQKLSB1c2UgcGxhaW4gSFRUUCBVUkkgZm9yIGNvbm5lY3Rpdml0eSBjaGVjawAtIFVwZGF0ZSB0byBhIEdpdCBzbmFwc2hvdAAtIEZpeCBhbiBhc3NlcnRpb24gZmFpbHVyZSBpbiBubWNsaSAocmggIzEyNDQwNDgpCi0gRml4IGRlZmF1bHQgcm91dGUgaGFuZGxpbmcgb24gYXNzdW1lZCBjb25uZWN0aW9ucyAocmggIzEyNDU2NDgpAC0gVXBkYXRlIHRvIDEuMC40IHJlbGVhc2UALSBXRVhUIGRlcGVuZHMgb24gZW5hYmxlZCB3aWZpAC0gQSBiaXQgbW9yZSByZWNlbnQgR2l0IHNuYXBzaG90AC0gQSBiaXQgbW9yZSByZWNlbnQgR2l0IHNuYXBzaG90Ci0gVGhpcyBvbmUgZml4ZXMgYSByZWdyZXNzaW9uIHdpdGggZGVmYXVsdCByb3V0ZSBtYW5hZ2VtZW50AC0gVXBkYXRlIHRvIGEgbmV3IDEuMC4zIGRldmVsb3BtZW50IHNuYXBzaG90IChnaXQyMDE1MDcwNykKLSBjb3JlOiBmaXggaGFuZGxpbmcgb2YgaWdub3JlLWF1dG8tKiBwcm9wZXJ0aWVzIChyaCAjMTIzOTE4NCkALSBBIGJpdCBtb3JlIHJlY2VudCBHaXQgc25hcHNob3QALSBVcGRhdGUgdG8gYSByZWNlbnQgR2l0IHNuYXBzaG90AC0gUmVidWlsdCBmb3IgaHR0cHM6Ly9mZWRvcmFwcm9qZWN0Lm9yZy93aWtpL0ZlZG9yYV8yM19NYXNzX1JlYnVpbGQALSBVcGRhdGUgdG8gMS4wLjIgcmVsZWFzZQAtIFVwZGF0ZSB0byAxLjAuMiBkZXZlbG9wbWVudCBzbmFwc2hvdCAoZ2l0MjAxNTA0MjkpAC0gVXBkYXRlIHRvIDEuMC4yIGRldmVsb3BtZW50IHNuYXBzaG90AC0gZG5zOiByZXZlcnQgcmVzb2x2LmNvbmYgc3ltbGluayBzdHVmZiAoc2hvdWxkIG9ubHkgYmUgaW4gRjIzKywgbm90IEYyMikALSBjb25uZWN0aXZpdHk6IGZpeCBjaGVja2luZyB3aGVuIG5vIHZhbGlkIEROUyBzZXJ2ZXJzIGFyZSBwcmVzZW50IChyaCAjMTE5OTA5OCkALSBjb3JlOiBmbHVzaCBJUHY2TEwgYWRkcmVzcyB3aGVuIGRlY29uZmlndXJpbmcgbWFuYWdlZCBkZXZpY2VzIChyaCAjMTE5MzEyNykgKHJoICMxMTg0OTk3KQAtIGNvcmU6IHJlc3VtZSBicmlkZ2VkIGNvbm5lY3Rpb25zIHByb3Blcmx5IChyaCAjMTE2MjYzNiwgYmFja3BvcnQgZnJvbSBtYXN0ZXIpAC0gZG5zOiBtYW5hZ2UgcmVzb2x2LmNvbmYgYXMgc3ltbGluayB0byBwcml2YXRlIGZpbGUgaW4gL3J1biBkaXJlY3RvcnkgKHJoICMxMTE2OTk5KQAtIGJ1aWxkOiBmaXggTmV0d29ya01hbmFnZXItYmx1ZXRvb3RoIGRlcCBvbiBOZXR3b3JrTWFuYWdlci13d2FuCi0gYnVpbGQ6IHJlLWVuYWJsZSBoYXJkd2FyZSBwbHVnaW5zIG9uIHMzOTAALSBVcGRhdGUgdG8gMS4wAC0gdnBuOiBwcm9wYWdhdGUgZGFlbW9uIGV4ZWMgZXJyb3IgY29ycmVjdGx5IChiZ28gIzczOTQzNikKLSBjb3JlOiBkbyBub3QgYXNzZXJ0IHdoZW4gYSBkZXZpY2UgaXMgZW5zbGF2ZWQgZXh0ZXJuYWxseSAocmggIzExNjczNDUpAC0gY2xpOiBmaXggY3Jhc2ggaW4gYG5tY2xpIGRldmljZSB3aWZpYCB3aXRoIG11bHRpcGxlIHdpZmkgZGV2aWNlcyAocmggIzExNTk0MDgpAC0gcGxhdGZvcm06IGZpeCBhIHJvdXRpbmctcmVsYXRlZCBidWcgdGhhdCBjb3VsZCBjYXVzZSBOTSBhbmQgb3RoZXIgYXBwcyB0byBzcGluIChyaCAjMTE1MTY2NSkALSBGaXggSVB2NiBuZXh0IGhvcCBkZWZhdWx0IHNldHRpbmcALSBBdm9pZCB1bm93bmVkIC9ldGMvTmV0d29ya01hbmFnZXIgaW4gY29uZmlnLWNvbm5lY3Rpdml0eS1mZWRvcmEALSBjb25uZWN0aXZpdHktZmVkb3JhOiBkb24ndCByZXF1aXJlIE5ldHdvcmtNYW5hZ2VyICgjMTE1NjE5OCkALSBibHVldG9vdGg6IFJlc3RvcmUgRFVOIHN1cHBvcnQgKHJoICMxMDU1NjI4KQAtIEFsbG93IG5vbi1sb2NhbCB1c2VycyBuZXR3b3JrIGNvbnRyb2wgYWZ0ZXIgUG9saWN5S2l0IGF1dGhlbnRpY2F0aW9uIChyaCAjMTE0NTY0NikALSBjb25uZWN0aXZpdHk6IHVzZSBIVFRQUyBmb3IgY29ubmVjdGl2aXR5IGNoZWNraW5nIChyaCAjMTEzNTc3KQAtIGFkc2wgcGx1Z2luIG5lZWRzIHJwLXBwcG9lIHRvIHdvcmsALSBhbHdheXMgaW5jbHVkZSBNb2RlbU1hbmFnZXItZ2xpYi1kZXZlbCAoIzExMjk2MzIpAC0gUmVidWlsdCBmb3IgaHR0cHM6Ly9mZWRvcmFwcm9qZWN0Lm9yZy93aWtpL0ZlZG9yYV8yMV8yMl9NYXNzX1JlYnVpbGQALSBSZWJ1aWx0IGZvciBwcHAgMi40LjcALSBjb25uZWN0aXZpdHk6IGVuc3VyZSBpbnRlcnZhbCBpcyBzZXQgdG8gZW5hYmxlIGNvbm5lY3Rpdml0eSBjaGVja2luZyAocmggIzExMjM3NzIpAC0gUmVidWlsdCBmb3IgZ29iamVjdC1pbnRyb3NwZWN0aW9uIDEuNDEuNAAtIFVwZGF0ZSB0byB1cHN0cmVhbSAwLjkuMTAuMCByZWxlYXNlIHNuYXBzaG90AC0gVXBkYXRlIHRvIHVwc3RyZWFtIDAuOS45Ljk4ICgwLjkuMTAtcmMxKSByZWxlYXNlIHNuYXBzaG90AC0gVXBkYXRlIHRvIHVwc3RyZWFtIDAuOS45Ljk1ICgwLjkuMTAtYmV0YTEpIHJlbGVhc2Ugc25hcHNob3QALSBSZWJ1aWx0IGZvciBodHRwczovL2ZlZG9yYXByb2plY3Qub3JnL3dpa2kvRmVkb3JhXzIxX01hc3NfUmVidWlsZAAtIFJlYnVpbGQgYWdhaW5zdCBwcHBkIDIuNC42AC0gVXBkYXRlIHRvIGEgZ2l0IHNuYXBzaG90IChnaXQyMDE0MDMxOSBnaXQ6Mzk4MDgwNikKLSBSZW5hbWUgTmV0d29ya01hbmFnZXItYXRtIHBhY2thZ2UgdG8gTmV0d29ya01hbmFnZXItYWRzbAotIFJlbmFtZSBOZXR3b3JrTWFuYWdlci1idCBwYWNrYWdlIHRvIE5ldHdvcmtNYW5hZ2VyLWJsdWV0b290aAAtIFVwZGF0ZSB0byBhIGdpdCBzbmFwc2hvdCAoZ2l0MjAxNDAzMTcgZ2l0OmExZTg5YjQpCi0gcGxhdGZvcm06IGZpeCBOTSBjcmFzaCBpZiBsaW5rIGhhcyBubyBuYW1lIChlLmcuIGZvciBmYWlsZWQgVlBOIGNvbm5lY3Rpb24pCi0gbGlibm0tdXRpbC9jbGk6IGZpeCBicmlkZ2UgcHJpb3JpdHkgZGVmYXVsdCB2YWx1ZSAocmggIzEwNzM2NjQpAC0gVXBkYXRlIHRvIGEgZ2l0IHNuYXBzaG90IChnaXQyMDE0MDMxNCBnaXQ6NDVhMzI2ZCkKLSBGaXggT2Jzb2xldGVzIGFuZCBSZXF1aXJlcyB0byBwZXJmb3JtIHVwZGF0ZXMgY29ycmVjdGx5AC0gVXBkYXRlIHRvIGEgZ2l0IHNuYXBzaG90IChnaXQyMDE0MDMxMCBnaXQ6MzUwYjZkNikALSBuZXcgdXBzdHJlYW0gc25hcHNob3Qgd2l0aCBkZXZlbG9wbWVudCB2ZXJzaW9uIDAuOS45LjEALSBhZGQgbm10dWkgcGFja2FnZQotIGJ1Z2ZpeCBjYWNoaW5nIG9mIGxpYm5sIG9iamVjdHMgKGNhdXNlZCBlcnJvciB3aXRoIG5ldyBsaWJubDMgdmVyc2lvbiB3aGVuIGFjdGl2YXRpbmcgYnJpZGdlcykgKHJoICMxMDYzMjkwKQotIGZpeCBOTU1hbmFnZXI6c3RhcnR1cCB0cmFja2luZyAocGVuZGluZyBhY3Rpb24pIChyaCAjMTAzMDU4MykALSBjb3JlOiBmaXggY3Jhc2ggZ2V0dGluZyBzZWNyZXRzIGluIGxpYm5tLWdsaWIALSBVcGRhdGUgdG8gYSBnaXQgc25hcHNob3QgKGdpdDIwMTQwMTMxKQAtIFVwZGF0ZSB0byBhIGdpdCBzbmFwc2hvdCAoZ2l0MjAxNDAxMTcpAC0gVXBkYXRlIHRvIGEgZ2l0IHNuYXBzaG90IChnaXQyMDE0MDExNCkALSBibHVlei1tYW5hZ2VyOiBmaXggYSBjcmFzaCAocmggIzEwNDg3MTEpAC0gY29yZTogZml4IElQdjYgcm91dGVyIHNvbGljaXRhdGlvbiBsb29wIChyaCAjMTA0NDc1NykALSBjb3JlOiB3YWl0IGZvciBsaW5rIGJlZm9yZSBkZWNsYXJpbmcgc3RhcnR1cCBjb21wbGV0ZSAocmggIzEwMzQ5MjEpCi0gY29yZTogaWdub3JlIFJBLXByb3ZpZGVkIElQdjYgZGVmYXVsdCByb3V0ZXMgKHJoICMxMDI5MjEzKQotIGNvcmU6IHNldCBJUHY0IGJyb2FkY2FzdCBhZGRyZXNzIGNvcnJlY3RseSAocmggIzEwMzI4MTkpAC0gY29yZTogRml4IFB0UC9wZWVyIGFkZHJlc3Mgc3VwcG9ydCwgZm9yIE9wZW5WUE4gKHJoICMxMDE4MzE3KQAtIGRpc3BhdGNoZXI6IGZpeCBjcmFzaCBvbiBleGl0IHdoaWxlIGxvZ2dpbmcgZnJvbSBzaWduYWwgaGFuZGxlciAocmggIzEwMTc4ODQpCi0gY29yZTogd29ya2Fyb3VuZCBjcmFzaCB3aGVuIGNvbm5lY3RpbmcgdG8gd2lmaSAocmggIzEwMjUzNzEpCi0gZXRoZXJuZXQ6IGRvbid0IGNyYXNoIGlmIGRldmljZSBkb2Vzbid0IGhhdmUgYSBNQUMgYWRkcmVzcyAocmggIzEwMjkwNTMpCi0gbGlibm0tZ2xpYjogZml4IGNyYXNoIGJ5IHRha2luZyBhZGRpdGlvbmFsIHJlZiBpbiByZXN1bHRfY2IoKSAocmggIzEwMzA0MDMpCi0gaWZjZmctcmg6IGZpeCBpZ25vcmluZyB1cGRhdGVzIHRoYXQgZG9uJ3QgY2hhbmdlIGFueXRoaW5nAC0gbm1jbGk6IGFkZCAiY29uIGxvYWQiIHRvIG1hbnVhbGx5IGxvYWQgYW4gaWZjZmcgZmlsZQotIHZwbjogZml4IGxvZ2dpbmcgdG8gaGVscCBkZWJ1ZyByaCAjMTAxODMxNwotIGJyaWRnZTogZml4IGNyYXNoIHdpdGggYnJpZGdlIHBvcnRzIHdpdGggZW1wdHkgc2V0dGluZ3MgKHJoICMxMDMxMTcwKQAtIGNvcmU6IGZpeCBkZXRlY3Rpb24gb2Ygbm9uLW1hYzgwMjExIGRldmljZXMgdGhhdCBkbyBub3Qgc2V0IERFVlRZUEUgKHJoICMxMDE1NTk4KQAtIGNvcmU6IGFkZCBzb21lIGRlYnVnZ2luZyB0byBoZWxwIGRpYWdub3NlIG5ldGxpbmsgZXJyb3JzIChyaCAjMTAyOTIxMykALSBpZmNmZy1yaDogZml4IGNyYXNoIGluIGlmY2ZnLXJoIHBsdWdpbiB3aGVuIHJlbG9hZGluZyBjb25uZWN0aW9ucyAocmggIzEwMjM1NzEpCi0gaWZjZmctcmg6IGZpeCBjcmFzaCB3aGVuIGhhdmluZyBjb25uZWN0aW9ucyB3aXRoIE5FVkVSX0RFRkFVTFQgKHJoICMxMDIxMTEyKQotIGNvcmU6IGZpeCBzZWdmYXVsdCBpbiBubS1wb2xpY3kgd2hlbiBzZXR0aW5nIGRlZmF1bHQgcm91dGUgZm9yIHZwbiAocmggIzEwMTkwMjEpCi0gaWZjZmctcmg6IGZpeCBjcmFzaCB3aGVuIHJlYWRpbmcgY29ubmVjdGlvbiAoYXNzZXJ0KSAocmggIzEwMjUwMDcpCi0gY29yZTogYWxsb3cgSVB2NCB0byBwcm9jZWVkIGlmIElQdjYgaXMgZ2xvYmFsbHkgZGlzYWJsZWQgYnV0IHNldCB0byAiYXV0byIgKHJoICMxMDEyMTUxKQAtIGNvcmU6IGZpeCBESENQdjYgYWRkcmVzcyBwcmVmaXggbGVuZ3RoIChyaCAjMTAxMzU4MykKLSBjbGk6IGVuaGFuY2UgYm9uZGluZyBxdWVzdGlvbmFpcmUgKHJoICMxMDA3MzU1KQotIGNvcmU6IGZpeCBjcmFzaCB3aXRoIEJsdWV6NSBpZiBQQU4gY29ubmVjdGlvbiBpcyBub3QgZGVmaW5lZCAocmggIzEwMTQ3NzApCi0gbGlibm0tZ2xpYjogZml4IHZhcmlvdXMgbWVtb3J5IGxlYWtzIHRoYXQgY291bGQgY2F1c2UgVUlzIHRvIG1pcy1yZXBvcnQgc3RhdGUKLSBjb3JlOiBmaXggaXNzdWVzIHdpdGggbWlzLWNvbmZpZ3VyZWQgSVB2NiByb3V0ZXIgYWR2ZXJ0aXNlbWVudHMgKHJoICMxMDA4MTA0KQotIGNsaTogZml4IHBvdGVudGlhbCBjcmFzaCBlZGl0aW5nIGNvbm5lY3Rpb25zIChyaCAjMTAxMTk0MikALSBjb3JlOiBmaXggYnJpZGdlIGRldmljZSBjcmVhdGlvbiAoIzEwMTI1MzIpCi0gY29yZSxzZXR0aW5nczogZG8gbm90IGNhbGwgZnVuY3Rpb25zIHdpdGggY29ubmVjdGlvbj09TlVMTCAocmggIzEwMDgxNTEpCi0gY2xpOiBhY2NlcHQgZ2F0ZXdheSBpbiB0aGUgSVAgcXVlc3Rpb25uYWlyZSBvZiAnbm1jbGkgLWEgY29uIGFkZCcgKHJoICMxMDA3MzY4KQotIGNsaTogYWx3YXlzIHByaW50IHN1Y2Nlc3MgbWVzc2FnZSAobm90IG9ubHkgaW4gLS1wcmV0dHkgbW9kZSkgKHJoICMxMDA2NDQ0KQotIGNsaTogZml4IGJvbmQgcXVlc3Rpb25uYWlyZSB0byBiZSBhYmxlIHRvIHNldCBtaWltb24gKHJoICMxMDA3MzU1KQotIGlmY2ZnLXJoOiBpZiBJUHY0IGlzIGRpc2FibGVkIHB1dCBETlMgZG9tYWlucyAoRE9NQUlOKSBpbnRvIElQdjYgKHJoICMxMDA0ODY2KQotIHBsYXRmb3JtOiBmaXggYSBjcmFzaCB3aGVuIG5tX3BsYXRmb3JtX3N5c2N0bF9nZXQoKSByZXR1cm5zIE5VTEwgKHJoICMxMDEwNTIyKQotIHBsYXRmb3JtOiBmaXggSW5maW5pQmFuZCBwYXJ0aXRpb24gaGFuZGxpbmcgKHJoICMxMDA4NTY4KQotIGluZmluaWJhbmQ6IG9ubHkgY2hlY2sgdGhlIGxhc3QgOCBieXRlcyB3aGVuIGRvaW5nIGh3YWRkciBtYXRjaGVzIChyaCAjMTAwODU2NikKLSBibHVlejogbWVyZ2UgYWRkaW5nIHN1cHBvcnQgZm9yIEJsdWVaIDUgKGJnbyAjNzAxMDc4KQotIGFwaTogY2xhcmlmeSBsaWZldGltZSBhbmQgYmVoYXZpb3Igb2YgQWN0aXZlQ29ubmVjdGlvbidzIFNwZWNpZmljT2JqZWN0IHByb3BlcnR5IChyaCAjMTAxMjMwOSkKLSB2cG46IGZpeCBjb25uZWN0aW5nIHRvIFZQTiAoYmdvICM3MDgyNTUpIChyaCAjMTAxNDcxNikKLSByZGlzYzogZG8gbm90IGNyYXNoIG9uIE5EUCBpbml0IGZhaWx1cmVzIChyaCAjMTAxMjE1MSkKLSBjbGk6IGJlIG1vcmUgdmVyYm9zZSB3aGVuIGFkZGluZyBJUCBhZGRyZXNzZXMgaW4gcXVlc3Rpb25uYWlyZSAocmggIzEwMDY0NTApCi0gdGVhbTogY2hhaW4gdXAgcGFyZW50IGRpc3Bvc2UoKSBpbiBOTURldmljZVRlYW0gZGlzcG9zZSgpIChyaCAjMTAxMzU5MykKLSB0cmFuc2xhdGlvbiB1cGRhdGVzAC0gZHJvcCB3aW1heCBzdWJwYWNrYWdlAC0gY29yZTogYWN0dWFsbHkgZW5hYmxlIE1vZGVtTWFuYWdlciAxLjAgc3VwcG9ydAotIGxpYm5tLWdsaWI6IGZpeCBubV9yZW1vdGVfY29ubmVjdGlvbl9kZWxldGUoKSBub3QgY2FsbGluZyBjYWxsYmFjayAocmggIzk5NzU2OCkKLSBjbGk6IGVuc3VyZSB0ZXJtaW5hbCBpcyByZXNldCBhZnRlciBxdWl0dGluZwotIGNsaTogc2V0IHdlcC1rZXktdHlwZSBwcm9wZXJseSB3aGVuIGVkaXRpbmcgKHJoICMxMDAzOTQ1KQotIG1hbjogZml4IHR5cG8gaW4gbm1jbGkgZXhhbXBsZXMgbWFucGFnZSAocmggIzEwMDQxMTcpCi0gY29yZTogZml4IHNldHRpbmcgVkxBTiBpbmdyZXNzL2VncmVzcyBtYXBwaW5ncwotIGNvcmU6IGFsbG93IGNyZWF0aW5nIFZMQU5zIGZyb20gaW50ZXJmYWNlcyBvdGhlciB0aGFuIEV0aGVybmV0IChyaCAjMTAwMzE4MCkKLSBjbGk6IGZpeCBpbnB1dC9vdXRwdXQgZm9ybWF0IGNvbnZlcnNpb24gKHJoICM5OTg5MjkpAC0gY29yZTogZml4IGJ1ZyB3aGljaCBkaXNhbGxvd2VkIGRlbGV0aW5nIGNvbm5lY3Rpb25zIChyaCAjOTk3NTY4KQotIGNvcmU6IGFkZCBzdXBwb3J0IGZvciBUZWFtIGRldmljZXMKLSBjb3JlOiBlbmFibGUgTmV0d29ya01hbmFnZXItd2FpdC1vbmxpbmUgYnkgZGVmYXVsdCAocmggIzgxNjY1NSkKLSBjb3JlOiBmaXggY3Jhc2ggd2hlbiAnZ3JlJyBhbmQgJ21hY3ZsYW4nIGxpbmtzIGNoYW5nZSAocmggIzk5NzM5NikKLSBjb3JlOiBmYWlsIGFjdGl2YXRpb24gd2hlbiBpbnZhbGlkIHN0YXRpYyByb3V0ZXMgYXJlIGNvbmZpZ3VyZWQgKHJoICM5OTk1NDQpCi0gY29yZTogZW5oYW5jZSBjb25uZWN0aXZpdHkgY2hlY2tpbmcgdG8gaW5jbHVkZSBwb3J0YWwgZGV0ZWN0aW9uCi0gY29yZTogYWxsb3cgaHlwaGVucyBmb3IgTUFDIGFkZHJlc3NlcyAocmggIzEwMDI1NTMpCi0gY29yZTogcmVtb3ZlIE5ldHdvcmtNYW5hZ2VyLWNyZWF0ZWQgc29mdHdhcmUgZGV2aWNlcyB3aGVuIHRoZXkgYXJlIGRlYWN0aXZhdGVkIChyaCAjOTUzMzAwKQotIGNvcmU6IGZpeCBoYW5kbGluZyBvZiBzb21lIERIQ1AgY2xpZW50IGlkZW50aWZpZXJzIChyaCAjOTk5NTAzKQotIGNvcmU6IGNvcnJlY3RseSBoYW5kbGUgT3BlbiB2U3dpdGNoIGludGVyZmFjZXMgYXMgZ2VuZXJpYyBpbnRlcmZhY2VzIChyaCAjMTAwNDM1NikKLSBjb3JlOiBiZXR0ZXIgaGFuZGxlIExheWVyLTItb25seSBjb25uZWN0aW9ucyAocmggIzk3OTI4OCkKLSBjbGk6IGVuaGFuY2VkIGJhc2ggY29tcGxldGlvbgotIGNsaTogbWFrZSB0aGUgJ2Rlc2NyaWJlJyBjb21tYW5kIG1vcmUgdmlzaWJsZSAocmggIzk5ODAwMikKLSBjbGk6IGZpeCBidWcgcmVqZWN0aW5nIGNoYW5nZXMgdG8gV2ktRmkgY2hhbm5lbHMgKHJoICM5OTk5OTkpCi0gY2xpOiB1cGRhdGUgYmFzaCBjb21wbGV0aW9uIHRvIHN1Z2dlc3QgY29ubmVjdGlvbiBuYW1lcyAocmggIzk5Nzk5NykKLSBjbGk6IGZpeCB0YWIgY29tcGxldGlvbiBmb3IgYWxpYXNlcyBpbiBlZGl0IG1vZGUKLSBjbGk6IGFzayB3aGV0aGVyIHRvIHN3aXRjaCBJUCBtZXRob2QgdG8gJ2F1dG8nIHdoZW4gYWxsIGFkZHJlc3NlcyBhcmUgZGVsZXRlZCAocmggIzk5ODEzNykKLSBjbGk6IHJlcXVlc3QgbWlzc2luZyBpbmZvcm1hdGlvbiB3aGVuIC0tYXNrIGlzIHBhc3NlZCAocmggIzk1MzI5MSkKLSBjbGk6IGFkZCAncmVtb3ZlJyBjb21tYW5kIHRvIGVkaXQgbW9kZQotIGNsaTogZml4IGNyZWF0aW9uIG9mIHNlY3VyZSBXaS1GaSBjb25uZWN0aW9ucyAocmggIzk5Nzk2OSkgKHJoICM5OTc1NTUpCi0gY2xpOiBkZWZhdWx0IGF1dG9jb25uZWN0IHRvIG5vIGFuZCBhc2sgd2hldGhlciB0byBhY3RpdmF0ZSBvbiBzYXZlIChyaCAjOTUzMjk2KQotIG1hbjogY2xhcmlmeSBtYW5wYWdlIHRleHQgKHJoICM5NjAwNzEpIChyaCAjOTUzMjk5KQotIG1hbjogZml4IGVycm9ycyBpbiB0aGUgbm1jbGkgaGVscCBvdXRwdXQgYW5kIG1hbnBhZ2UgKHJoICM5OTc1NjYpCi0gaWZjZmctcmg6IG9ubHkgd3JpdGUgSVBWNl9ERUZBVUxUR1cgd2hlbiB0aGVyZSdzIGFjdHVhbGx5IGEgZGVmYXVsdCBnYXRld2F5IChyaCAjOTk3NzU5KQotIGlmY2ZnLXJoOiBmaXggaGFuZGxpbmcgb2YgbGVnYWN5LWZvcm1hdCByb3V0ZXMgZmlsZSB3aXRoIG1pc3NpbmcgZ2F0ZXdheQAtIGNvcmU6IGZpeCBhc3NlcnQgb24gbXVsdGktaG9wIHJvdXRlcyAocmggIzk4OTAyMikKLSBjb3JlOiBmaXggZGlzcGF0Y2hlciBzeXN0ZW1kIHVuaXQgZW5hYmxpbmcgKHJoICM5NDg0MzMpCi0gaWZjZmctcmg6IGlnbm9yZSBlbWFjcyB0ZW1wb3JhcnkgbG9ja2ZpbGVzIChyaCAjOTg3NjI5KQotIGNvcmU6IGZpeCB2YXJpb3VzIHJvdXRpbmcgaXNzdWVzIGFuZCBpbnRlcmFjdGlvbiB3aXRoIGtlcm5lbCBldmVudHMKLSBjbGk6IGNvbmZpcm0gc2F2aW5nIGNvbm5lY3Rpb25zIHdoZW4gYXV0b2Nvbm5lY3QgaXMgZW5hYmxlZCAocmggIzk1MzI5NikKLSBjbGk6IGF1dG9tYXRpY2FsbHkgY2hhbmdlIG1ldGhvZCB3aGVuIHN0YXRpYyBJUCBhZGRyZXNzZXMgYXJlIGFkZGVkCi0gY29yZTogcHJlc2VydmUgZXh0ZXJuYWxseSBhZGRlZCBJUHY0IHJvdXRlcyBhbmQgYWRkcmVzc2VzAC0gQ3JlYXRlIE5ldHdvcmtNYW5hZ2VyLWNvbmZpZy1zZXJ2ZXIgcGFja2FnZQAtIFVwZGF0ZSB0byBnaXQgc25hcHNob3QALSBCZWxhdGVkbHkgdXBkYXRlIHVkZXYgZGlyZWN0b3J5IGZvciBVc3JNb3ZlCi0gRml4IGluY29ycmVjdCBkYXRlcyBpbiBvbGQgY2hhbmdlbG9nIGVudHJpZXMgdG8gYXZvaWQgcnBtIHdhcm5pbmdzAC0gYnVpbGQgc3VwcG9ydCBmb3IgY29ubmVjdGl2aXR5IGNoZWNraW5nIChyaCAjODEwNDU3KQAtIGRpc2FibGUgYnVpbGRpbmcgV2lNYXggZm9yIFJIRUwALSBVcGRhdGUgdG8gbmV3IDAuOS4xMCBzbmFwc2hvdAAtIFVwZGF0ZSBmb3Igc3lzdGVtZCBuZXR3b3JrLW9ubGluZS50YXJnZXQgKHJoICM3ODczMTQpCi0gQWRkIHN5c3RlbSBzZXJ2aWNlIGZvciB0aGUgc2NyaXB0IGRpc3BhdGNoZXIgKHJoICM5NDg0MzMpAC0gRW5hYmxlIGhhcmRlbmVkIGJ1aWxkCi0gVXBkYXRlIHRvIDAuOS4xMCBzbmFwc2hvdAotIGNsaTogbmV3IGNhcGFiaWxpdGllcyBhbmQgc29tZXdoYXQgcmUtYXJyYW5nZWQgc3ludGF4Ci0gY29yZTogZ2VuZXJpYyBpbnRlcmZhY2Ugc3VwcG9ydAotIGNvcmU6IHNwbGl0IGNvbmZpZyBzdXBwb3J0OyBuZXcgInNlcnZlciBtb2RlIiBvcHRpb25zCi0gY29yZTogYWxsb3cgbG9ja2luZyBjb25uZWN0aW9ucyB0byBpbnRlcmZhY2UgbmFtZXMALSBjb3JlOiBmaXggaXNzdWUgd2l0aCBVSSBub3Qgc2hvd2luZyBkaXNjb25uZWN0ZWQgb24gcmZraWxsCi0gY29yZTogbWVtb3J5IGxlYWsgZml4ZXMKLSBjb3JlOiBzaWxlbmNlIHdhcm5pbmcgYWJvdXQgZmFpbHVyZSByZWFkaW5nIHBlcm1hbmVudCBNQUMgYWRkcmVzcyAocmggIzkwNzkxMikKLSBjb3JlOiB3YWl0IHVwIHRvIDEyMHMgZm9yIHNsb3ctY29ubmVjdGluZyBtb2RlbXMKLSBjb3JlOiBkb24ndCBjcmFzaCBvbiBQUFBvRSBjb25uZWN0aW9ucyB3aXRob3V0IGEgd2lyZWQgc2V0dGluZwotIGNvcmU6IGVuc3VyZSB0aGUgQXZhaWxhYmxlQ29ubmVjdGlvbnMgcHJvcGVydHkgaXMgYWx3YXlzIGNvcnJlY3QKLSBrZXlmaWxlOiBlbnN1cmUgYWxsLWRlZmF1bHQgVkxBTiBjb25uZWN0aW9ucyBhcmUgcmVhZCBjb3JyZWN0bHkKLSBjb3JlOiBzdXBwcmVzcyBrZXJuZWwncyBhdXRvbWF0aWMgY3JlYXRpb24gb2YgYm9uZDAgKHJoICM5NTM0NjYpCi0gbGlibm0tZ2xpYjogbWFrZSBOTVNlY3JldEFnZW50IHVzYWJsZSB3aXRoIEdPYmplY3QgSW50cm9zcGVjdGlvbgotIGxpYm5tLXV0aWw6IGZpeCBHT2JqZWN0IEludHJvc3BlY3Rpb24gYW5ub3RhdGlvbnMgb2Ygbm1fY29ubmVjdGlvbl9uZWVkX3NlY3JldHMoKQotIGNvcmU6IGRvY3VtZW50YXRpb24gdXBkYXRlcwAtIFVwZGF0ZSB0byAwLjkuOC4yIHNuYXBzaG90Ci0gY29yZTogZml4IFZMQU4gcGFyZW50IGhhbmRsaW5nIHdoZW4gaWRlbnRpZmllZCBieSBVVUlECi0gY29yZTogcXVpZXQgd2FybmluZyBhYm91dCBpbnZhbGlkIGludGVyZmFjZSBpbmRleCAocmggIzkyMDE0NSkKLSBjb3JlOiByZXF1ZXN0ICdzdGF0aWMtcm91dGVzJyBmcm9tIERIQ1Agc2VydmVycyAocmggIzkyMjU1OCkKLSBjb3JlOiBmaXggY3Jhc2ggd2hlbiBkYnVzLWRhZW1vbiBpcyByZXN0YXJ0ZWQgKHJoICM5MTgyNzMpCi0gY29yZTogY29weSBsZWFzZWZpbGVzIGZyb20gL3Zhci9saWIvZGhjbGllbnQgdG8gZml4IG5ldGJvb3QgKHJoICM5MTYyMzMpCi0gY29yZTogbWVtb3J5IGxlYWsgYW5kIHBvdGVudGlhbCBjcmFzaCBmaXhlcwotIGlmY2ZnLXJoOiBlbnN1cmUgbWlzc2luZyBTVFAgcHJvcGVydHkgaXMgaW50ZXJwcmV0ZWQgYXMgb2ZmIChyaCAjOTIyNzAyKQAtIFVwZGF0ZSB0byB0aGUgMC45LjguMCByZWxlYXNlCi0gY2xpOiBmaXggYSBwb3NzaWJsZSBjcmFzaAAtIGNvcmU6IHVzZSBzeXN0ZW1kIGZvciBzdXNwZW5kL3Jlc3VtZSwgbm90IHVwb3dlcgAtIFVwZGF0ZSB0byAwLjkuOC1iZXRhMgotIGNvcmU6IGlnbm9yZSBicmlkZ2VzIG1hbmFnZWQgYnkgb3RoZXIgdG9vbHMgKHJoICM5MDUwMzUpCi0gY29yZTogZml4IGxpYm5sIGFzc2VydCAocmggIzg5NDY1MykKLSB3aWZpOiBhbHdheXMgdXNlIFByb2FjdGl2ZSBLZXkgQ2FjaGluZyB3aXRoIFdQQSBFbnRlcnByaXNlIChyaCAjODM0NDQ0KQotIGNvcmU6IGRvbid0IGNyYXNoIHdoZW4gSW50ZXJuZXQgY29ubmVjdGlvbiBzaGFyaW5nIGZhaWxzIHRvIHN0YXJ0IChyaCAjODgzMTQyKQAtIFNldCBjb3JyZWN0IHN5c3RlbWQgS2lsbE1vZGUgdG8gZml4IGFuYWNvbmRhIHNodXRkb3duIGhhbmdzIChyaCAjODc2MjE4KQAtIGlmY2ZnLXJoOiB3cml0ZSBtaXNzaW5nIElQdjYgc2V0dGluZyBhcyBJUHY2IHdpdGggImF1dG8iIG1ldGhvZCAocmggIzgzMDQzNCkALSBCdWlsZCB2YXBpIGZpbGVzIGFuZCBhZGQgdGhlbSB0byB0aGUgZGV2ZWwgcGFja2FnZQAtIEFwcGx5IHBhdGNoIGZyb20gbWFzdGVyIHRvIHJlYWQgaG9zdG5hbWUgZnJvbSAvZXRjL2hvc3RuYW1lIChyaCAjODMxNzM1KQAtIEFwcGx5IHBhdGNoIGZyb20gbWFzdGVyIHRvIHVwZGF0ZSBob3N0bmFtZSAocmggIzg3NTA4NSkKLSBzcGVjOiBjcmVhdGUgL2V0Yy9OZXR3b3JrTWFuYWdlci9kbnNtYXNxLmQgKHJoICM4NzM2MjEpAC0gRG9uJ3QgYnJpbmcgdXAgdW5pbml0aWFsaXplZCBkZXZpY2VzIChmZCAjNTY5MjkpAC0gQWN0dWFsbHkgYXBwbHkgdGhlIHBhdGNoIGZyb20gdGhlIHByZXZpb3VzIGNvbW1pdC4uLgAtIEFwcGx5IHBhdGNoIGZyb20gbWFzdGVyIHRvIGZpeCBhIGNyYXNoIChyaCAjODY1MDA5KQAtIEFwcGx5IHBhdGNoIGZyb20gbWFzdGVyIHNvIGNvbm5lY3Rpb25zIGZpbmlzaCBjb25uZWN0aW5nIHByb3Blcmx5IChiZ28gIzY4NTU4MSkALSBGb3J3YXJkLXBvcnQgc29tZSBmb3Jnb3R0ZW4gZml4ZXMgZnJvbSBGMTcKLSBGaXggbmV0d29ya2VkLWZpbGVzeXN0ZW0gc3lzdGVtZCBkZXBlbmRlbmNpZXMgKHJoICM3ODczMTQpCi0gRG9uJ3QgcmVzdGFydCBOTSBvbiB1cGdyYWRlLCBkb24ndCBzdG9wIE5NIG9uIHVuaW5zdGFsbCAocmggIzgxMTIwMCkALSBVcGRhdGUgdG8gZ2l0IHNuYXBzaG90AC0gVXBkYXRlIHRvIDAuOS43LjAgc25hcHNob3QALSBSZWJ1aWx0IGZvciBodHRwczovL2ZlZG9yYXByb2plY3Qub3JnL3dpa2kvRmVkb3JhXzE4X01hc3NfUmVidWlsZAAtIFVwZGF0ZSB0byAwLjkuNi1yYzIKLSBjb3JlOiBmaXggcmFjZSBiZXR3ZWVuIHBhcmFsbGVsIERIQ1AgY2xpZW50IGludm9jYXRpb25zCi0gY29yZTogc3VwcHJlc3MgYSB1c2VsZXNzIHdhcm5pbmcgKHJoICM4NDA1ODApCi0gaWZjZmctcmg6IGZpeCBzZWdmYXVsdCB3aXRoIG1hbGZvcm1lZCB2YWx1ZXMgKHJoICM4NDEzOTEpCi0gaWZjZmctcmg6IGlnbm9yZSBJUCBjb25maWcgb24gYm9uZCBzbGF2ZSBjb25maWd1cmF0aW9ucyAocmggIzgzODkwNykALSBVcGRhdGUgdG8gMC45LjUuOTUgKDAuOS42LXJjMSkgc25hcHNob3QKLSBjb3JlOiBhZGQgYXV0b2Nvbm5lY3QsIGRyaXZlci12ZXJzaW9uaSBhbmQgZmlybXdhcmUtdmVyc2lvbiBwcm9wZXJ0aWVzIHRvIE5NRGV2aWNlCi0gY29yZTogdmFyaW91cyBJUHY2IGltcHJvdmVtZW50cwotIGNvcmU6IHJlZHVjZSBudW1iZXIgb2YgY2hhbmdlcyBtYWRlIHRvIEROUyBpbmZvcm1hdGlvbiBkdXJpbmcgY29ubmVjdGlvbiBzZXR1cAotIGNvcmU6IGFkZCBWYWxhIGxhbmd1YWdlIGJpbmRpbmdzCi0gdnBuOiBzdXBwb3J0IElQdjYgb3ZlciBWUE5zCi0gd2lmaTogYWRkIG9uLWRlbWFuZCBXaUZpIHNjYW4gc3VwcG9ydAAtIFVwZGF0ZSB0byBnaXQgc25hcHNob3QALSBOTSBubyBsb25nZXIgdXNlcyAvdmFyL3J1bi9OZXR3b3JrTWFuYWdlciwgc28gZG9uJ3QgY2xhaW0gdG8gb3duIGl0LgogIChyaCAjNjU2NjM4KQAtIFVwZGF0ZSB0byBnaXQgc25hcHNob3QALSBBZGQgX2lzYSBmb3IgaW50ZXJuYWwgcmVxdWlyZXM7IG90aGVyd2lzZSBkZXBzb2x2aW5nIG1heSBwdWxsIGluIGFuCiAgYXJiaXRyYXJ5IGFyY2hpdGVjdHVyZS4ALSBVcGRhdGUgdG8gMC45LjQALSBsaWJubS1nbGliOiB1cGRhdGVkIGZvciBuZXcgc3ltYm9scyB0aGUgYXBwbGV0IHdhbnRzAC0gYXBwbGV0OiBtb3ZlIHRvIG5ldHdvcmstbWFuYWdlci1hcHBsZXQgUlBNCi0gZWRpdG9yOiBtb3ZlIHRvIG5tLWNvbm5lY3Rpb24tZWRpdG9yIFJQTQotIGxpYm5tLWd0azogbW92ZSB0byBsaWJubS1ndGsgUlBNAC0gVXBkYXRlIHRvIDAuOS4zLjk5NyAoMC45LjQtcmMxKQotIGNvcmU6IGZpeCBwb3NzaWJsZSBXaUZpIGhhbmcgd2hlbiBjb25uZWN0aW5nIHRvIEFkLUhvYyBuZXR3b3JrcwotIGNvcmU6IGVuaGFuY2VkIElQdjYgY29tcGF0aWJpbGl0eQotIGNvcmU6IHByb3h5IEROU1NFQyBkYXRhIHdoZW4gdXNpbmcgdGhlICdkbnNtYXNxJyBjYWNoaW5nIG5hbWVzZXJ2ZXIgcGx1Z2luCi0gY29yZTogYWxsb3cgVlBOcyB0byBzcGVjaWZ5IG11bHRpcGxlIGRvbWFpbiBuYW1lcyBnaXZlbiBieSB0aGUgc2VydmVyCi0gY29yZTogZml4IGFuIGlzc3VlIGNyZWF0aW5nIG5ldyBJbmZpbmlCYW5kIGNvbm5lY3Rpb25zCi0gY29yZS9hcHBsZXQvZWRpdG9yOiBkaXNhYmxlIFdpRmkgQWQtSG9jIFdQQSBjb25uZWN0aW9ucyB1bnRpbCBrZXJuZWwgYnVncyBhcmUgZml4ZWQALSBjb3JlOiBmaXggaXNzdWUgd2l0aCBjYXJyaWVyIGNoYW5nZXMgbm90IGJlaW5nIHJlY29nbml6ZWQgKHJoICM4MDA2OTApCi0gZWRpdG9yOiB3YXJuIHVzZXIgaWYgQ0EgY2VydGlmaWNhdGUgaXMgbGVmdCBibGFuawAtIGNvcmU6IGZpeCBhIGNyYXNoIHdpdGggaXB3MjIwMCBkZXZpY2VzIGFuZCBhZGhvYyBuZXR3b3JrcwotIGNvcmU6IGZpeCBJUHY2IGFkZHJlc3Npbmcgb24gbmV3ZXIga2VybmVscwotIGNvcmU6IGZpeCBpc3N1ZSB3aXRoIFZQTiBwbHVnaW4gcGFzc3dvcmRzIChyaCAjODAyNTQwKQotIGNsaTogZW5oYW5jZW1lbnRzIGZvciBCb25kaW5nLCBWTEFOLCBhbmQgT0xQQyBtZXNoIGRldmljZXMKLSBpZmNmZy1yaDogZml4IHF1b3RpbmcgV1BBIHBhc3NwaHJhc2VzIHRoYXQgaW5jbHVkZSBxdW90ZXMgKHJoICM3OTgxMDIpCi0gbGlibm0tZ2xpYjogZml4IHNvbWUgaXNzdWVzIHdpdGggZHVwbGljYXRlIGRldmljZXMgc2hvd24gaW4gbWVudXMALSBVcGRhdGUgdG8gMC45LjMuOTk1ICgwLjkuNC1iZXRhMSkKLSBjb3JlOiBhZGQgc3VwcG9ydCBmb3IgYm9uZGluZyBhbmQgVkxBTiBpbnRlcmZhY2VzCi0gY29yZTogYWRkIHN1cHBvcnQgZm9yIEludGVybmV0IGNvbm5lY3Rpdml0eSBkZXRlY3Rpb24KLSBjb3JlOiBhZGQgc3VwcG9ydCBmb3IgSVB2NiBQcml2YWN5IEV4dGVuc2lvbnMKLSBjb3JlOiBmaXggaW50ZXJhY3Rpb24gd2l0aCBmaXJld2FsbGQgcmVzdGFydHMALSBkaXNhYmxlIFdpTUFYIHBsdWdpbiBvbiBzMzkwKHgpAC0gUHV0IFdpTUFYIHBsdWdpbiBmaWxlcyBpbiB0aGUgcmlnaHQgc3VicGFja2FnZQAtIFVwZGF0ZSB0byAwLjkuNCBzbmFwc2hvdAotIHdpbWF4OiBlbmFibGUgb3B0aW9uYWwgc3VwcG9ydCBmb3IgSW50ZWwgV2lNQVggZGV2aWNlcwotIGNvcmU6IHVzZSBubDgwMjExIGZvciBXaUZpIGRldmljZSBjb250cm9sCi0gY29yZTogYWRkIGJhc2ljIHN1cHBvcnQgZm9yIEluZmluaWJhbmQgSVAgaW50ZXJmYWNlcwotIGNvcmU6IGFkZCBiYXNpYyBzdXBwb3J0IGZvciBib25kZWQgaW50ZXJmYWNlcwotIGNvcmU6IGluLXByb2Nlc3MgSVAgY29uZmlndXJhdGlvbiBubyBsb25nZXIgYmxvY2tzIGNvbm5lY3RlZCBzdGF0ZQAtIFJlYnVpbGQALSBSZWJ1aWx0IGZvciBodHRwczovL2ZlZG9yYXByb2plY3Qub3JnL3dpa2kvRmVkb3JhXzE3X01hc3NfUmVidWlsZAAtIFJlYnVpbGQgZm9yIGxpYmdub21lLWJsdWV0b290aC5zby45AC0gY29yZTogZml4IHBvc3NpYmxlIGNyYXNoIHdoZW4gdGFsa2luZyB0byBNb2RlbU1hbmFnZXIKLSBjb3JlOiBpbXByb3ZlIGhhbmRsaW5nIG9mIHJma2lsbCBvbiBzb21lIG1hY2hpbmVzIChlZWVwYyAxMDA1SEEgYW5kIG90aGVycykKLSBpZmNmZy1yaDogZG9uJ3QgdXNlIHNwYWNlcyBpbiBpZmNmZyBmaWxlIG5hbWVzIChyaCAjNzQyMjczKQotIGNvcmU6IGFjY2VwdCBJUHY2IFJvdXRlciBBZHZlcnRpc2VtZW50cyB3aGVuIGZvcndhcmRpbmcgaXMgb24KLSBjb3JlOiBidW1wIGRuc21hc3EgY2FjaGUgc2l6ZSB0byA0MDAgZW50cmllcwotIGNvcmU6IGVuc3VyZSBJUHY2IHN0YXRpYyByb3V0ZXMgYXJlIGZsdXNoZWQgd2hlbiBkZXZpY2UgaXMgZGVhY3RpdmF0ZWQKLSBpZmNmZy1yaDogZml4IGNoYW5naW5nIFdQQSBjb25uZWN0aW9ucyB0byBXRVAKLSBjb3JlOiBmaXggc2V0dGluZyBob3N0bmFtZSBmcm9tIERIQ1AgKHJoICM3MTkxMDApCi0gbGlibm0tZ2xpYjogZml4IHZhcmlvdXMgR09iamVjdCBpbnRyb3NwZWN0aW9uIGlzc3VlcyAocmggIzc0NzMwMikKLSBjb3JlOiBkb24ndCBjaGFuZ2Ugcm91dGluZyBvciBETlMgaWYgbm8gZGV2aWNlcyBhcmUgbWFuYWdlZAotIGNvcmU6IGVuc3VyZSBJUHY2IFJBLXByb3ZpZGVkIHJvdXRlcyBhcmUgaG9ub3JlZAAtIFJlYnVpbHQgZm9yIGdsaWJjIChyaCAjNzQ3Mzc3KQotIGNvcmU6IGZpeCBzZXR0aW5nIGhvc3RuYW1lIGZyb20gREhDUCBvcHRpb25zIChyaCAjNzE5MTAwKQotIHNraXAgYSByZWxlYXNlIHRvIGtlZXAgdXAgd2l0aCBGMTYALSBjb3JlOiBmaXggbG9jYXRpb24gb2Ygd2lmaS51aSAocmggIzc0MTQ0OCkALSBjb3JlOiBpZmNmZy1yaDogcmVtb3ZlIG5ld2xpbmVzIHdoZW4gd3JpdGluZyB0byBpZmNmZyBmaWxlcyAoQ1ZFLTIwMTEtMzM2NCkgKHJoICM3MzczMzgpCi0gY29yZTogY2hhbmdlIGlzY3NpYWRtIHBhdGggdG8gL3NiaW4vaXNjc2lhZG0gaW4gaWZjZmctcmggcGx1Z2luIChyaCAjNzQwNzUzKQotIGNvcmU6IGZpeCByZWZjb3VudGluZyB3aGVuIGRlbGV0aW5nIGEgZGVmYXVsdCB3aXJlZCBjb25uZWN0aW9uIChscDo3OTc4NjgpAC0gVXBkYXRlIHRvIDAuOS4xLjkwICgwLjkuMi1iZXRhMSkKLSBjb3JlOiBmaXggSVB2NiBsaW5rLWxvY2FsIEROUyBzZXJ2ZXJzIGluIHRoZSBkbnNtYXNxIEROUyBwbHVnaW4KLSBjbGk6IGFkZCBhYmlsaXR5IHRvIGRlbGV0ZSBjb25uZWN0aW9ucwotIGtleWZpbGU6IGZpeCBhbiBpc3N1ZSB3aXRoIGR1cGxpY2F0ZWQga2V5ZmlsZSBjb25uZWN0aW9ucwotIGNvcmU6IGVuc3VyZSB0aGUgJ25vdmonIG9wdGlvbiBpcyBwYXNzZWQgdGhyb3VnaCB0byBwcHBkCi0gY29yZTogc3RvcmUgdGltZXN0YW1wcyBmb3IgVlBOIGNvbm5lY3Rpb25zIHRvbyAocmggIzcyNTM1MykALSBmaXggc3lzdGVtZCBzY3JpcHRsZXRzIGFuZCB0cmlnZ2VyAC0gVXBkYXRlIHRvIDAuOSByZWxlYXNlCi0gY29yZTogZml4IGlzc3VlIHdoZXJlIHNjYW4gcmVzdWx0cyBjb3VsZCBiZSBpZ25vcmVkCi0gY29yZTogZW5zdXJlIGFnZW50IHNlY3JldHMgYXJlIHByZXNlcnZlZCB3aGVuIHVwZGF0aW5nIGNvbm5lY3Rpb25zCi0gY29yZTogZG9uJ3QgYXV0b2Nvbm5lY3QgZGlzYWJsZWQgbW9kZW1zCi0gY29yZTogZml4IHJhY2Ugd2hlbiBjaGVja2luZyBtb2RlbSBlbmFibGVkL2Rpc2FibGVkIHN0YXR1cyBhZnRlciBkaXNhYmxpbmcKLSBjb3JlOiBlbnN1cmUgbmV3bHkgaW5zdGFsbGVkIFZQTiBwbHVnaW5zIGNhbiBhY3R1YWxseSB0YWxrIHRvIE5NCi0gY29yZTogYWRkIHN1cHBvcnQgZm9yIDgwMi4xWCBjZXJ0aWZpY2F0ZSBzdWJqZWN0IG1hdGNoaW5nCi0gbGlibm0tZ2xpYjogdmFyaW91cyBpbnRyb3NwZWN0aW9uIGZpeGVzCi0gYXBwbGV0L2VkaXRvcjogdXBkYXRlZCB0cmFuc2xhdGlvbnMALSBBZGQgc29tZSBwYXRjaGVzIGZvciBzb21lIGJsb2NrZXIgKHJoICM3Mjc1MDEpAC0gY29yZTogdXBkYXRlZCBSdXNzaWFuIHRyYW5zbGF0aW9uIChyaCAjNjUyOTA0KQotIGNvcmU6IGZpeCBwb3NzaWJsZSBjcmFzaCBpZiBzZWNyZXRzIGFyZSBtaXNzaW5nCi0gY29yZTogYXBwZW5kIGludGVyZmFjZSBuYW1lIGZvciBJUHY2IGxpbmstbG9jYWwgRE5TIHNlcnZlciBhZGRyZXNzZXMgKHJoICM3MjAwMDEpCi0gY29yZTogZml4IHNldHRpbmcgaG9zdG5hbWUgZnJvbSBESENQIG9wdGlvbnMgKHJoICM3MTkxMDApCi0gbGlibm0tdXRpbDogR09iamVjdCBpbnRyb3NwZWN0aW9uIGFubm90YXRpb24gZml4ZXMKLSBsaWJubS11dGlsOiBlbnN1cmUgSVAgYWRkcmVzcy9yb3V0ZSBwcmVmaXhlcyBhcmUgdmFsaWQKLSBpZmNmZy1yaDogcmVhZCBhbm9ueW1vdXMgaWRlbnRpdHkgZm9yIDgwMi4xeCBQRUFQIGNvbm5lY3Rpb25zIChyaCAjNzA4NDM2KQotIGFwcGxldDogc2hvdyBub3RpZmljYXRpb25zIG9uIENETUEgaG9tZS9yb2FtaW5nIGNoYW5nZXMKLSBhcHBsZXQ6IGZpeCB2YXJpb3VzIGlzc3VlcyBzYXZpbmcgVlBOIHNlY3JldHMKLSBlZGl0b3I6IGFsbG93IGV4cG9ydGluZyBWUE4gc2VjcmV0cwotIGVkaXRvcjogZGVmYXVsdCB0byBJUHY2ICJhdXRvbWF0aWMiIGFkZHJlc3NpbmcgbW9kZQAtIGNvcmU6IGVuc3VyZSB1c2VycyBhcmUgYXV0aG9yaXplZCBmb3Igc2hhcmVkIHdpZmkgY29ubmVjdGlvbnMgKENWRS0yMDExLTIxNzYpIChyaCAjNzE1NDkyKQotIGNvcmU6IHJldHJ5IGZhaWxlZCBjb25uZWN0aW9ucyBhZnRlciA1IG1pbnV0ZSB0aW1lb3V0Ci0gY29yZTogaW1tZWRpYXRlbHkgcmVxdWVzdCBuZXcgODAyLjF4ICdhbHdheXMgYXNrJyBwYXNzd29yZHMgaWYgdGhleSBmYWlsCi0gY29yZTogYWRkIE1BQyBibGFja2xpc3RpbmcgY2FwYWJpbGl0eSBmb3IgV2lGaSBhbmQgV2lyZWQgY29ubmVjdGlvbnMKLSBjb3JlOiByZXRyeSBmYWlsZWQgY29ubmVjdGlvbnMgd2hlbiBuZXcgdXNlcnMgbG9nIGluIChyaCAjNzA2MjA0KQotIGFwcGxldDogdXBkYXRlZCB0cmFuc2xhdGlvbnMKLSBjb3JlOiBkcm9wIGNvbXBhdCBpbnRlcmZhY2Ugbm93IHRoYXQgS0RFIGJpdHMgYXJlIHVwZGF0ZWQgdG8gTk0gMC45IEFQSQAtIGNvcmU6IGRvbid0IGNhY2hlICIobm9uZSkiIGhvc3RuYW1lIGF0IHN0YXJ0dXAgKHJoICM3MDYwOTQpCi0gY29yZTogZml4IGhhbmRsaW5nIG9mIFZQTiBjb25uZWN0aW9ucyB3aXRoIG9ubHkgc3lzdGVtLW93bmVkIHNlY3JldHMKLSBjb3JlOiBmaXggb3B0aW9uYWwgd2FpdGluZyBmb3IgbmV0d29ya2luZyBhdCBzdGFydHVwIGJlaGF2aW9yIChyaCAjNzEwNTAyKQotIGlmY2ZnLXJoOiBmaXggcG9zc2libGUgY3Jhc2hlcyBpbiBlcnJvciBjYXNlcwotIGlmY2ZnLXJoOiBmaXggdmFyaW91cyBJUHY0IGFuZCBJUHY2IGhhbmRsaW5nIGlzc3VlcwotIGFwcGxldDogYWRkIG5vdGlmaWNhdGlvbnMgb2YgR1NNIG1vYmlsZSBicm9hZGJhbmQgcmVnaXN0cmF0aW9uIHN0YXR1cwotIGVkaXRvcjogbW92ZSBzZWNyZXRzIHdoZW4gbWFraW5nIGNvbm5lY3Rpb25zIGF2YWlsYWJsZSB0byBhbGwgdXNlcnMgb3IgcHJpdmF0ZQotIGFwcGxldDogZG9uJ3Qgc2hvdyBpcnJlbGV2YW50IG9wdGlvbnMgd2hlbiBhc2tpbmcgZm9yIHBhc3N3b3JkcwAtIGtleWZpbGU6IGJldHRlciBoYW5kbGluZyBvZiBtaXNzaW5nIGNlcnRpZmljYXRlcy9wcml2YXRlIGtleXMKLSBjb3JlOiBmaXggaXNzdWVzIGhhbmRsaW5nICJhbHdheXMtYXNrIiB3aXJlZCBhbmQgV2lGaSA4MDIuMXggY29ubmVjdGlvbnMgKHJoICM3MDM3ODUpCi0gY29yZTogZml4IGF1dG9tYXRpYyBoYW5kbGluZyBvZiBoaWRkZW4gV2lGaSBuZXR3b3JrcyAocmggIzcwNzQwNikKLSBlZGl0b3I6IGZpeCBwb3NzaWJsZSBjcmFzaCBhZnRlciByZWFkaW5nIG5ldHdvcmsgY29ubmVjdGlvbnMgKHJoICM3MDY5MDYpCi0gZWRpdG9yOiBtYWtlIEVudGVyL1JldHVybiBrZXkgY2xvc2UgV2lGaSBwYXNzd29yZCBkaWFsb2dzIChyaCAjNzA4NjY2KQAtIEJ1bXAgZm9yIENWRS0yMDExLTE5NDMgKG5vIGNoYW5nZXMsIG9ubHkgYSByZWJ1aWxkKQAtIGVkaXRvcjogZml4IHJlc2l6aW5nIG9mIFVJIGVsZW1lbnRzIChyaCAjNzA3MjY5KQotIGNvcmU6IHJldHJ5IHdpcmVkIGNvbm5lY3Rpb25zIHdoZW4gY2FibGUgaXMgcmVwbHVnZ2VkCi0gY29yZTogZml4IGEgZmV3IHdhcm5pbmdzIGFuZCByZW1vdmUgc29tZSBsZWZ0LW92ZXIgZGVidWdnaW5nIGNvZGUALSBjb21wYXQ6IGZpeCBhY3RpdmF0aW9uL2RlYWN0aXZhdGlvbiBvZiBWUE4gY29ubmVjdGlvbnMgKHJoICM2OTk3ODYpCi0gY29yZTogZml4IGF1dG9kZXRlY3Rpb24gb2YgcHJldmlvdXNseS11c2VkIGhpZGRlbiB3aWZpIG5ldHdvcmtzCi0gY29yZTogc2lsZW5jZSBlcnJvciBpZiBDb25zb2xlS2l0IGRhdGFiYXNlIGRvZXMgbm90IHlldCBleGlzdCAocmggIzY5NTYxNykKLSBjb3JlOiBmaXggQWQtSG9jIGZyZXF1ZW5jeSBoYW5kbGluZyAocmggIzY5OTIwMykKLSBjb3JlOiBmaXhlcyBmb3IgbWlncmF0ZWQgT3BlbkNvbm5lY3QgVlBOIHBsdWdpbiBjb25uZWN0aW9ucwotIGNvcmU6IHZhcmlvdXMgZml4ZXMgZm9yIFZQTiBjb25uZWN0aW9uIHNlY3JldHMgaGFuZGxpbmcKLSBjb3JlOiBzZW5kIG9ubHkgc2hvcnQgaG9zdG5hbWUgdG8gREhDUCBzZXJ2ZXJzIChyaCAjNjk0NzU4KQotIGNvcmU6IGJldHRlciBoYW5kbGluZyBvZiBQS0NTIzggcHJpdmF0ZSBrZXlzCi0gY29yZTogZml4IGRpc3BhdGNoZXIgc2NyaXB0IGludGVyZmFjZSBuYW1lIGhhbmRsaW5nCi0gZWRpdG9yOiBmaXggcG90ZW50aWFsIGNyYXNoIHdoZW4gY29ubmVjdGlvbiBpcyBpbnZhbGlkIChyaCAjNzA0ODQ4KQotIGVkaXRvcjogYWxsb3cgXyBhcyBhIHZhbGlkIGNoYXJhY3RlciBmb3IgR1NNIEFQTnMALSBjb3JlOiBmaXggcG9zc2libGUgY3Jhc2ggd2hlbiBjb25uZWN0aW9ucyBhcmUgZGVsZXRlZAotIGNvcmU6IGZpeCBleHBvcnRlZCBzeW1ib2xzIGluIGxpYm5tLXV0aWwgYW5kIGxpYm5tLWdsaWIKLSBjb3JlL2FwcGxldDogdXBkYXRlZCB0cmFuc2xhdGlvbnMALSBjb3JlOiBlbnN1cmUgREVSIGZvcm1hdCBjZXJ0aWZpY2F0ZXMgYXJlIGNvcnJlY3RseSByZWNvZ25pemVkIChyaCAjNjk5NTkxKQotIGNvcmU6IGZpeCBXSU5TIHNlcnZlciBoYW5kbGluZyBpbiBjbGllbnQgaGVscGVyIGxpYnJhcmllcwotIGNvcmU6IGVuaGFuY2UgZGlzcGF0Y2hlciBzY3JpcHQgZW52aXJvbm1lbnQgdG8gaW5jbHVkZSBJUHY2IGFuZCBWUE4gZGV0YWlscwotIGFwcGxldDogbWlncmF0ZSBvcGVuc3dhbiBjb25uZWN0aW9ucyB0byAwLjkKLSBlZGl0b3I6IGltcHJvdmUgdXNhYmlsaXR5IG9mIGVkaXRpbmcgSVAgYWRkcmVzc2VzIChyaCAjNjk4MTk5KQAtIGNvcmU6IGVuYWJsZSBvcHRpbWl6ZWQgYmFja2dyb3VuZCByb2FtaW5nIGZvciBXUEEgRW50ZXJwcmlzZSBjb25maWdzCi0gY29yZTogYmV0dGVyIGhhbmRsaW5nIG9mIFdpRmkgYW5kIFdpTUFYIHJma2lsbCAocmggIzU5OTAwMikKLSBhcHBsZXQ6IGZpeCBjcmFzaCBkZXRlY3RpbmcgQmx1ZXRvb3RoIERVTiBkZXZpY2VzIGEgc2Vjb25kIHRpbWUKLSBpZmNmZy1yaDogZml4IG1hbmFnZWQvdW5tYW5hZ2VkIGNoYW5nZXMgd2hlbiByZW1vdmluZyBjb25uZWN0aW9ucyAocmggIzY5ODIwMikALSBjb3JlOiBzeXN0ZW1kIGFuZCBzdGFydHVwIGVuaGFuY2VtZW50cyBmb3IgTkZTIG1vdW50cwotIGNvcmU6IG1vcmUgZWZmaWNpZW50IHN0YXJ0dXAgcHJvY2VzcwotIGNvcmU6IGZpeCBoYW5kbGluZyBvZiBtdWx0aXBsZSBsb2dpbnMgd2hlbiBvbmUgaXMgaW5hY3RpdmUKLSBjb3JlOiBmaXggaGFuZGxpbmcgb2YgUzM5MC9IZXJjdWxlcyBDVEMgbmV0d29yayBpbnRlcmZhY2VzIChyaCAjNjQxOTg2KQotIGNvcmU6IHN1cHBvcnQgRWFzeXRldGhlciBpbnRlcmZhY2VzIGZvciBBbmRyb2lkIHBob25lcwotIGNvcmU6IGZpeCBoYW5kbGluZyBvZiBXV0FOIGVuYWJsZS9kaXNhYmxlIHN0YXRlcwotIGlmY2ZnLXJoOiBoYXJtb25pemUgaGFuZGxpbmcgaWYgSVBBRERSL1BSRUZJWC9ORVRNQVNLIHdpdGggaW5pdHNjcmlwdHMgKHJoICM2NTg5MDcpCi0gYXBwbGV0OiBmaXggY29ubmVjdGlvbiB0byBXUEEgRW50ZXJwcmlzZSBuZXR3b3JrcyAocmggIzY5NDc2NSkALSBjb3JlOiBmaXggaGFuZGxpbmcgb2YgaW5maW5pdGUgSVB2NiBSRE5TUyB0aW1lb3V0cyAocmggIzY4OTI5MSkALSBVcGRhdGUgdG8gMC44Ljk5OCAoMC45LjAtcmMxKQotIGNvcmU6IGZpeCBuZWFyLWluZmluaXRlIHJlcXVlc3RzIGZvciBwYXNzd29yZHMgKHJoICM2OTI3ODMpCi0gY29yZTogZml4IGhhbmRsaW5nIG9mIHdpcmVkIDgwMi4xeCBjb25uZWN0aW9ucwotIGNvcmU6IGlnbm9yZSBOb2tpYSBQQy1TdWl0ZSBldGhlcm5ldCBkZXZpY2VzIHdlIGNhbid0IHVzZSB5ZXQKLSBhcHBsZXQ6IG1pZ3JhdGUgMC44IE9wZW5WUE4gcGFzc3dvcmRzIHRvIDAuOSBmb3JtYXRzAC0gY29yZTogcmVzdXJyZWN0IGRlZmF1bHQgVlBOIHVzZXJuYW1lCi0gY29yZTogZG9uJ3Qgc3RvbXAgb24gY3J5cHRvIGxpYnJhcnkgdXNlcnMgYnkgZGUtaW5pdGluZyB0aGUgY3J5cHRvIGxpYnJhcnkALSBjb3JlOiBmaXggY3JlYXRpb24gb2YgZGVmYXVsdCB3aXJlZCBjb25uZWN0aW9ucwotIGNvcmU6IGZpeCByZXF1ZXN0aW5nIG5ldyBzZWNyZXRzIHdoZW4gb2xkIG9uZXMgZmFpbCAoZXggY2hhbmdpbmcgV0VQIGtleXMpCi0gZWRpdG9yOiBlbnN1cmUgYWxsIHBhZ2VzIGFyZSBzZW5zaXRpdmUgYWZ0ZXIgcmV0cmlldmluZyBzZWNyZXRzCi0gZWRpdG9yOiBmaXggY3Jhc2ggd2hlbiBzY3JvbGxpbmcgdGhyb3VnaCBjb25uZWN0aW9uIGxpc3RzIChyaCAjNjkzNDQ2KQotIGFwcGxldDogZml4IGNyYXNoIGFmdGVyIHVzaW5nIHRoZSB3aWZpIG9yIHdpcmVkIHNlY3JldHMgZGlhbG9ncyAocmggIzY5MzQ0NikALSBGaXggdHJpZ2dlciB0byBlbmFibGUgdGhlIHN5c3RlbWQgc2VydmljZSBmb3IgdXBncmFkZXMgKHJoICM2Nzg1NTMpAC0gY29yZTogZml4IGNvbm5lY3Rpb24gZGVhY3RpdmF0aW9uIG9uIHRoZSBjb21wYXQgaW50ZXJmYWNlCi0gY29yZTogZ2l2ZSBkZWZhdWx0IHdpcmVkIGNvbm5lY3Rpb25zIGEgbW9yZSBmcmllbmRseSBuYW1lCi0gY29yZTogZml4IGJhc2UgdHlwZSBvZiBuZXdseSBjcmVhdGVkIHdpcmVkIGNvbm5lY3Rpb25zCi0gYXBwbGV0OiBtYW55IHVwZGF0ZWQgdHJhbnNsYXRpb25zAC0gY29yZTogZml4IHBvc3NpYmxlIGxpYm5tLWdsaWIgY3Jhc2ggd2hlbiBhY3RpdmF0aW5nIGNvbm5lY3Rpb25zCi0gYXBwbGV0OiBmaXggdmFyaW91cyBuYW1pbmcgYW5kIGRpYWxvZyB0aXRsZSBpc3N1ZXMALSBubS12ZXJzaW9uLmggc2hvdWxkIGJlIGluIE5ldHdvcmtNYW5hZ2VyLWRldmVsLCBub3QgLWdsaWItZGV2ZWwgKHJoICM2ODU0NDIpAC0gY29yZTogYWRkIGNvbXBhdGliaWxpdHkgbGF5ZXIgZm9yIEtERSBQbGFzbWEgbmV0d29yayBpbmZyYXN0cnVjdHVyZQAtIFVwZGF0ZSB0byAwLjguOTk3ICgwLjktYmV0YTMpCi0gaWZjZmctcmg6IGZpeCByZWFkaW5nIGFuZCB3cml0aW5nIG9mIER5bmFtaWMgV0VQIGNvbm5lY3Rpb25zIHVzaW5nIExFQVAgYXMgdGhlIGVhcCBtZXRob2QKLSB3aWZpOiBmaXggc2lnbmFsIHN0cmVuZ3RoIGZvciBzY2FubmVkIGFjY2VzcyBwb2ludHMgd2l0aCBzb21lIGRyaXZlcnMKLSBhcHBsZXQ6IHRyYW5zbGF0aW9uIHVwZGF0ZXMALSBVcGRhdGUgdG8gMC44Ljk5NiAoMC45LWJldGEyKQAtIGFwcGxldDogZml4IGJ1cyBuYW1lIG1vcmUALSBhcHBsZXQ6IGZpeCBidXMgbmFtZQAtIEZpeCBzeXN0ZW1kIHJlcXVpcmVzAC0gVXBkYXRlIHRvIE5ldHdvcmtNYW5hZ2VyIDAuOS1iZXRhMQotIGNvcmU6IGNvbnNvbGlkYXRlIHVzZXIgYW5kIHN5c3RlbSBzZXR0aW5ncyBzZXJ2aWNlcyBpbnRvIE5NIGl0c2VsZgotIGNvcmU6IGFkZCBXaU1BWCBzdXBwb3J0Ci0gYXBwbGV0OiBzdXBwb3J0IEZhc3QgVXNlciBTd2l0Y2hpbmcALSBSZWJ1aWxkIGFnYWluc3QgbmV3ZXIgZ3RrAC0gUmVidWlsdCBmb3IgaHR0cHM6Ly9mZWRvcmFwcm9qZWN0Lm9yZy93aWtpL0ZlZG9yYV8xNV9NYXNzX1JlYnVpbGQALSBSZWJ1aWxkIGFnYWluc3QgbmV3IGd0awAtIEhhbmRsZSBtb2RlbSBJUCBpbnRlcmZhY2UgY2hhbmdlcyBhZnRlciBkZXZpY2UgaXMgcmVjb2duaXplZAAtIFJlYnVpbGQgYWdhaW5zdCBuZXcgZ3RrMwAtIHVzZSAtLWZvcmNlIGluIGF1dG9yZWNvbmYgdG8gZml4IEZUQkZTAC0gUmVidWlsZCBhZ2FpbnN0IG5ld2VyIGd0awAtIFVwZGF0ZSB0byAwLjguMgAtIFJlYnVpbGQgYWdhaW5zdCBsaWJub3RpZnkgMC43Ci0gbWlzYyBndGsgYnVpbGQgZml4ZXMALSBjb3JlOiBwcmVzZXJ2ZSBXaUZpIEVuYWJsZWQgc3RhdGUgYWNyb3NzIHJlYm9vdCBhbmQgc3VzcGVuZC9yZXN1bWUALSBjb3JlOiBmaXggc3VzcGVuZC9yZXN1bWUgcmVncmVzc2lvbiAocmggIzYzODY0MCkKLSBjb3JlOiBmaXggaXNzdWUgY2F1c2luZyBzb21lIG5tY2xpIHJlcXVlc3RzIHRvIGJlIGlnbm9yZWQALSBjb3JlOiBwcmVzZXJ2ZSBjdXN0b20gbG9jYWwtbWFwcGVkIGhvc3RuYW1lcyBpbiAvZXRjL2hvc3RzIChyaCAjNjI3MjY5KQAtIGNvcmU6IHJlbW92ZSBzdGFsZSAvZXRjL2hvc3RzIG1hcHBpbmdzIChyaCAjNjMwMTQ2KQAtIGNvcmU6IGFkZCBkaXNwYXRjaGVyIGV2ZW50cyBvbiBESENQdjQgYW5kIERIQ1B2NiBsZWFzZSBjaGFuZ2VzCi0gY29yZTogZW5mb3JjZSBhY2Nlc3MgcGVybWlzc2lvbnMgd2hlbiBlbmFibGluZy9kaXNhYmxpbmcgV2lGaSBhbmQgV1dBTiAocmggIzYyNjMzNykKLSBjb3JlOiBsaXN0ZW4gZm9yIFVQb3dlciBzdXNwZW5kL3Jlc3VtZSBzaWduYWxzCi0gYXBwbGV0OiBmaXggZGlzYWJsZWQgRW5hYmxlIE5ldHdvcmtpbmcgYW5kIEVuYWJsZSBXaXJlbGVzcyBtZW51IGl0ZW1zIChyaCAjNjI3MzY1KQotIGFwcGxldDogdXBkYXRlZCB0cmFuc2xhdGlvbnMKLSBhcHBsZXQ6IG9ic2N1cmUgTW9iaWxlIEJyb2FkYmFuZCBQSU4gaW4gc2Vjb25kYXJ5IHVubG9jayBkaWFsb2cALSBjb3JlOiBmaXggc29tZSBzeXN0ZW1kIGludGVyYWN0aW9uIGlzc3VlcwAtIGNvcmU6IHJlYnVpbGQgdG8gZml4IHBvbGtpdCAwLjk3IGJ1aWxkIGlzc3VlCi0gYXBwbGV0OiB1cGRhdGVkIHRyYW5zbGF0aW9ucwAtIGNvcmU6IHJlYnVpbGQgdG8gZml4IGRidXMtZ2xpYiBzZWN1cml0eSBpc3N1ZSAoQ1ZFLTIwMTAtMTE3MikgKHJoICM1ODUzOTQpAC0gY29yZTogcXVpZXQgYW5ub3lpbmcgd2FybmluZ3MgKHJoICM2MTI5OTEpCi0gY29yZTogZml4IHJldHJpZXZhbCBvZiB2YXJpb3VzIElQIG9wdGlvbnMgaW4gbGlibm0tZ2xpYiAocmggIzYxMTE0MSkKLSBjb3JlOiBzaGlwIE5ldHdvcmtNYW5hZ2VyLmNvbmYgaW5zdGVhZCBvZiBkZXByZWNhdGVkIG5tLXN5c3RlbS1zZXR0aW5ncy5jb25mIChyaCAjNjA2MTYwKQotIGNvcmU6IGFkZCBzaG9ydCBob3N0bmFtZSB0byAvZXRjL2hvc3RzIHRvbyAocmggIzYyMTkxMCkKLSBjb3JlOiByZWNoZWNrIGF1dG9hY3RpdmF0aW9uIHdoZW4gbmV3IHN5c3RlbSBjb25uZWN0aW9ucyBhcHBlYXIKLSBjb3JlOiBlbmFibGUgREhDUHY2LW9ubHkgY29uZmlndXJhdGlvbnMgKHJoICM2MTI0NDUpCi0gY29yZTogZG9uJ3QgZmFpbCBjb25uZWN0aW9uIGltbWVkaWF0ZWx5IGlmIERIQ1AgbGVhc2UgZXhwaXJlcyAocmggIzYxNjA4NCkgKHJoICM1OTA4NzQpCi0gY29yZTogZml4IGVkaXRpbmcgb2YgUFBQb0Ugc3lzdGVtIGNvbm5lY3Rpb25zCi0gY29yZTogd29yayBhcm91bmQgdHdpdGNoeSBmcmVxdWVuY3kgcmVwb3J0aW5nIG9mIHZhcmlvdXMgd2lmaSBkcml2ZXJzCi0gY29yZTogZG9uJ3QgdGVhciBkb3duIHVzZXIgY29ubmVjdGlvbnMgb24gY29uc29sZSBjaGFuZ2VzIChyaCAjNjE0NTU2KQotIGNsaTogd2FpdCBhIGJpdCBmb3IgTk0ncyBwZXJtaXNzaW9ucyBjaGVjayB0byBjb21wbGV0ZSAocmggIzYxNDg2NikKLSBpZmNmZy1yaDogaWdub3JlIEJSSURHRSBhbmQgVkxBTiBjb25maWdzIGFuZCB0cmVhdCBhcyB1bm1hbmFnZWQgKHJoICM2MTk4NjMpCi0gbWFuOiBhZGQgbWFucGFnZSBmb3Igbm0tb25saW5lCi0gYXBwbGV0OiBmaXggY3Jhc2ggc2F2aW5nIGlnbm9yZS1taXNzaW5nLUNBLWNlcnQgcHJlZmVyZW5jZSAocmggIzYxOTc3NSkKLSBhcHBsZXQ6IGhpZGUgUElOL1BVSyBieSBkZWZhdWx0IGluIHRoZSBtb2JpbGUgUElOL1BVSyBkaWFsb2cgKHJoICM2MTUwODUpCi0gYXBwbGV0OiBlbnN1cmUgRW50ZXIgY2xvc2VzIHRoZSBQSU4vUFVLIGRpYWxvZyAocmggIzYxMTgzMSkKLSBhcHBsZXQ6IGZpeCBhbm90aGVyIGNyYXNoIGluIGlnbm9yZS1DQS1jZXJ0aWZpY2F0ZSBoYW5kbGluZyAocmggIzU1NzQ5NSkKLSBlZGl0b3I6IGZpeCBoYW5kbGluZyBvZiBXaXJlZC9zMzkwIGNvbm5lY3Rpb25zIChyaCAjNjE4NjIwKQotIGVkaXRvcjogZml4IGNyYXNoIHdoZW4gY2FuY2VsaW5nIGVkaXRpbmcgaW4gSVAgYWRkcmVzcyBwYWdlcyAocmggIzYxMDg5MSkKLSBlZGl0b3I6IGZpeCBoYW5kbGluZyBvZiBzMzkwLXNwZWNpZmljIG9wdGlvbnMKLSBlZGl0b3I6IHJlYWxseSBmaXggY3Jhc2ggd2hlbiBjaGFuZ2luZyBzeXN0ZW0gY29ubmVjdGlvbnMgKHJoICM2MDM1NjYpAC0gY29yZTogcmVhZCBubS1zeXN0ZW0tc2V0dGluZ3MuY29uZiBiZWZvcmUgTmV0d29ya01hbmFnZXIuY29uZiAocmggIzYwNjE2MCkKLSBjb3JlOiBmaXggZWRpdGluZyBzeXN0ZW0gRFNMIGNvbm5lY3Rpb25zIHdoZW4gdXNpbmcga2V5ZmlsZSBwbHVnaW4KLSBjb3JlOiB3b3JrIGFyb3VuZCBpbmNvbnNpc3RlbnQgcHJvcHJpZXRhcnkgZHJpdmVyIGFzc29jaWF0ZWQgQVAgcmVwb3J0aW5nCi0gY29yZTogZW5zdXJlIGVtcHR5IFZQTiBzZWNyZXRzIGFyZSBub3QgdXNlZCAocmggIzU4Nzc4NCkKLSBjb3JlOiBkb24ndCByZXF1ZXN0IFdpRmkgc2NhbnMgd2hlbiBjb25uZWN0aW9uIGlzIGxvY2tlZCB0byBhIHNwZWNpZmljIEJTU0lECi0gY2xpOiBzaG93IElQdjYgc2V0dGluZ3MgYW5kIGNvbmZpZ3VyYXRpb24KLSBhcHBsZXQ6IHVwZGF0ZWQgdHJhbnNsYXRpb25zCi0gZWRpdG9yOiBmaXggYSBQb2xpY3lLaXQtcmVsYXRlZCBjcmFzaCBlZGl0aW5nIGNvbm5lY3Rpb25zIChyaCAjNjAzNTY2KQotIGFwcGxldDogZml4IHNhdmluZyB0aGUgaWdub3JlLW1pc3NpbmctQ0EtY2VydCBwcmVmZXJlbmNlIChyaCAjNjEwMDg0KQotIGVkaXRvcjogZml4IGxpc3RpbmcgY29ubmVjdGlvbnMgb24gUFBDNjQgKHJoICM2MDg2NjMpCi0gZWRpdG9yOiBlbnN1cmUgZWRpdG9yIHdpbmRvd3MgYXJlIGRlc3Ryb3llZCB3aGVuIGNsb3NlZCAocmggIzU3MjQ2NikALSBSZWJ1aWxkIGFnYWluc3QgbmV3IGdub21lLWJsdWV0b290aAAtIFVwZGF0ZSB0byAwLjguMSByZWxlYXNlIGNhbmRpZGF0ZQotIGNvcmU6IGZpeCBXV0FOIGhhcmR3YXJlIGVuYWJsZSBzdGF0ZSB0cmFja2luZyAocmggIzU5MTYyMikKLSBjb3JlOiBmaXggUmVkIEhhdCBpbml0c2NyaXB0IHJldHVybiB2YWx1ZSBvbiBkb3VibGUtc3RhcnQgKHJoICM1ODQzMjEpCi0gY29yZTogYWRkIG11bHRpY2FzdCByb3V0ZSBlbnRyeSBmb3IgSVB2NCBsaW5rLWxvY2FsIGNvbm5lY3Rpb25zCi0gY29yZTogZml4IGNvbm5lY3Rpb24gc2hhcmluZyBpbiBjYXNlcyB3aGVyZSBhIGRuc21hc3EgY29uZmlnIGZpbGUgZXhpc3RzCi0gY29yZTogZml4IGhhbmRsaW5nIG9mIEFkLUhvYyB3aWZpIGNvbm5lY3Rpb25zIHRvIGluZGljYXRlIGNvcnJlY3QgbmV0d29yawotIGNvcmU6IGVuc3VyZSBWUE4gaW50ZXJmYWNlIG5hbWUgaXMgcGFzc2VkIHRvIGRpc3BhdGNoZXIgd2hlbiBWUE4gZ29lcyBkb3duCi0gaWZjZmctcmg6IGZpeCBoYW5kbGluZyBvZiBBU0NJSSBXRVAga2V5cwotIGlmY2ZnLXJoOiBmaXggZG91YmxlLXF1b3Rpbmcgb2Ygc29tZSBTU0lEcyAocmggIzYwNjUxOCkKLSBhcHBsZXQ6IGVuc3VyZSBkZWxldGVkIGNvbm5lY3Rpb25zIGFyZSBhY3R1YWxseSBmb3Jnb3R0ZW4gKHJoICM2MTg5NzMpCi0gYXBwbGV0OiBkb24ndCBjcmFzaCBpZiB0aGUgQVAncyBCU1NJRCBpc24ndCBhdmFpbGFiZSAocmggIzYwMzIzNikKLSBlZGl0b3I6IGRvbid0IGNyYXNoIG9uIFBvbGljeUtpdCBldmVudHMgYWZ0ZXIgd2luZG93cyBhcmUgY2xvc2VkIChyaCAjNTcyNDY2KQAtIGNvcmU6IGZpeCBubS1vbmxpbmUgY3Jhc2ggKHJoICM1OTM2NzcpCi0gY29yZTogZml4IGZhaWxlZCBzdXNwZW5kIGRpc2FibGVzIG5ldHdvcmsgKHJoICM1ODkxMDgpCi0gY29yZTogcHJpbnQgb3V0IG1pc3NpbmcgZmlybXdhcmUgZXJyb3JzIChyaCAjNTk0NTc4KQotIGFwcGxldDogZml4IGRldmljZSBkZXNjcmlwdGlvbnMgZm9yIHNvbWUgbW9iaWxlIGJyb2FkYmFuZCBkZXZpY2VzCi0ga2V5ZmlsZTogYmx1ZXRvb3RoIGZpeGVzCi0gYXBwbGV0OiB1cGRhdGVkIHRyYW5zbGF0aW9ucyAocmggIzU4OTIzMCkALSBjb3JlOiB1c2UgR0lPIGluIGxvY2FsIG1vZGUgb25seSAocmggIzU4ODc0NSkKLSBjb3JlOiB1cGRhdGVkIHRyYW5zbGF0aW9ucyAocmggIzU4OTIzMCkKLSBjb3JlOiBiZSBtb3JlIGxlbmllbnQgaW4gSVB2NiBSRE5TUyBzZXJ2ZXIgZXhwaXJ5IChyaCAjNTkwMjAyKQotIGNvcmU6IGZpeCBoZWFkZXJzIHRvIGJlIEMrKyBjb21wYXRpYmxlIChyaCAjNTkyNzgzKQotIGFwcGxldDogdXBkYXRlZCB0cmFuc2xhdGlvbnMgKHJoICM1ODkyMzApCi0gYXBwbGV0OiBsb2NrIGNvbm5lY3Rpb25zIHdpdGggd2VsbC1rbm93biBTU0lEcyB0byB0aGVpciBzcGVjaWZpYyBBUAAtIGNvcmU6IGZpeCBoYW5kbGluZyBvZiBJUHY2IFJBIGZsYWdzIHdoZW4gcm91dGVyIGdvZXMgYXdheSAocmggIzU4ODU2MCkKLSBibHVldG9vdGg6IGZpeCBjcmFzaCBjb25maWd1cmluZyBEVU4gY29ubmVjdGlvbnMgZnJvbSB0aGUgd2l6YXJkIChyaCAjNTkwNjY2KQAtIGNvcmU6IHJlc3RvcmUgaW5pdGlhbCBhY2NlcHRfcmEgdmFsdWUgZm9yIElQdjYgaWdub3JlZCBjb25uZWN0aW9ucyAocmggIzU4ODYxOSkKLSBibHVldG9vdGg6IGZpeCBiYWQgdGltZW91dCBvbiBQQU4gY29ubmVjdGlvbnMgKHJoICM1ODY5NjEpCi0gYXBwbGV0OiB1cGRhdGVkIHRyYW5zbGF0aW9ucwAtIGNvcmU6IHRyZWF0IG1pc3NpbmcgSVB2NiBjb25maWd1cmF0aW9uIGFzIGlnbm9yZWQgKHJoICM1ODg4MTQpCi0gY29yZTogZG9uJ3QgZmx1c2ggSVB2NiBsaW5rLWxvY2FsIHJvdXRlcyAocmggIzU4NzgzNikKLSBjbGk6IHVwZGF0ZSBvdXRwdXQgZm9ybWF0dGluZwAtIGNvcmU6IGFsbG93IElQIGNvbmZpZ3VyYXRpb24gYXMgbG9uZyBhcyBvbmUgbWV0aG9kIGNvbXBsZXRlcyAocmggIzU2Nzk3OCkKLSBjb3JlOiBkb24ndCBwcmVtYXR1cmVseSByZW1vdmUgSVB2NiBSRE5TUyBuYW1lc2VydmVycyAocmggIzU4ODE5MikKLSBjb3JlOiBlbnN1cmUgcm91dGVyIGFkdmVydGlzZW1lbnRzIGFyZSBvbmx5IHVzZWQgd2hlbiBuZWVkZWQgKHJoICM1ODg2MTMpCi0gZWRpdG9yOiBhZGQgSVB2NiBnYXRld2F5IGVkaXRpbmcgY2FwYWJpbGl0eQAtIGNvcmU6IElQdjYgYXV0b2NvbmYsIERIQ1AsIGxpbmstbG9jYWwsIGFuZCBtYW51YWwgbW9kZSBmaXhlcwotIGVkaXRvcjogZml4IHNhdmluZyBJUHY2IGFkZHJlc3MgaW4gdXNlciBjb25uZWN0aW9ucwAtIGNvcmU6IGZpeCBjcmFzaCB3aGVuIElQdjYgaXMgZW5hYmxlZCBhbmQgaW50ZXJmYWNlIGlzIGRlYWN0aXZhdGVkAC0gY29yZTogZml4IGlzc3VlcyB3aXRoIElQdjYgcm91dGVyIGFkdmVydGlzZW1lbnQgbWlzaGFuZGxpbmcgKHJoICM1MzA2NzApCi0gY29yZTogbWFueSBmaXhlcyBmb3IgSVB2NiBSQSBhbmQgREhDUCBoYW5kbGluZyAocmggIzUzODQ5OSkKLSBjb3JlOiBpZ25vcmUgV1dBTiBldGhlcm5ldCBkZXZpY2VzIHVudGlsIHVzYWJsZSAocmggIzU4NTIxNCkKLSBpZmNmZy1yaDogZml4IGhhbmRsaW5nIG9mIFdFUCBwYXNzcGhyYXNlcyAocmggIzU4MTcxOCkKLSBhcHBsZXQ6IGZpeCBjcmFzaGVzIChyaCAjNTgyOTM4KSAocmggIzU4MjQyOCkKLSBhcHBsZXQ6IGZpeCBjcmFzaCB3aXRoIG11bHRpcGxlIGNvbmN1cnJlbnQgYXV0aG9yaXphdGlvbiByZXF1ZXN0cyAocmggIzU4NTQwNSkKLSBlZGl0b3I6IGFsbG93IGRpc2FibGluZyBJUHY0IG9uIGEgcGVyLWNvbm5lY3Rpb24gYmFzaXMKLSBlZGl0b3I6IGFkZCBzdXBwb3J0IGZvciBJUHY2IERIQ1Atb25seSBjb25maWd1cmF0aW9ucwAtIGNvcmU6IGZpeCBjcmFzaCBkdXJpbmcgaW5zdGFsbCAocmggIzU4MTc5NCkKLSB3aWZpOiBmaXggY3Jhc2ggd2hlbiBzdXBwbGljYW50IHNlZ2ZhdWx0cyBhZnRlciByZXN1bWUgKHJoICM1Mzg3MTcpCi0gaWZjZmctcmg6IGZpeCBNVFUgaGFuZGxpbmcgZm9yIHdpcmVkIGNvbm5lY3Rpb25zIChyaCAjNTY5MzE5KQotIGFwcGxldDogZml4IGRpc3BsYXkgb2YgZGlzYWJsZWQgbW9iaWxlIGJyb2FkYmFuZCBkZXZpY2VzAC0gY29yZTogZml4IGF1dG9tYXRpYyBXaUZpIGNvbm5lY3Rpb25zIG9uIHJlc3VtZSAocmggIzU3ODE0MSkALSBjb3JlOiBtb3JlIGZsZXhpYmxlIGxvZ2dpbmcKLSBjb3JlOiBmaXggY3Jhc2ggd2l0aCBPTFBDIG1lc2ggZGV2aWNlcyBhZnRlciBzdXNwZW5kCi0gYXBwbGV0OiB1cGRhdGVkIHRyYW5zbGF0aW9ucwotIGFwcGxldDogc2hvdyBtb2JpbGUgYnJvYWRiYW5kIHNpZ25hbCBzdHJlbmd0aCBhbmQgdGVjaG5vbG9neSBpbiB0aGUgaWNvbgotIGFwcGxldDogZml4IGNvbnRpbnVvdXMgcGFzc3dvcmQgcmVxdWVzdHMgZm9yIDgwMi4xeCBjb25uZWN0aW9ucyAocmggIzU3NjkyNSkKLSBhcHBsZXQ6IG1hbnkgdXBkYXRlZCB0cmFuc2xhdGlvbnMALSBjb3JlOiBmaXggbW9kZW0gZW5hYmxlL2Rpc2FibGUKLSBjb3JlOiBmaXggbW9kZW0gZGVmYXVsdCByb3V0ZSBoYW5kbGluZwAtIGNvcmU6IGRvbid0IGV4aXQgZWFybHkgb24gbm9uLWZhdGFsIHN0YXRlIGZpbGUgZXJyb3JzCi0gY29yZTogZml4IEJsdWV0b290aCBjb25uZWN0aW9uIGlzc3VlcyAocmggIzU3MjM0MCkKLSBhcHBsZXQ6IGZpeCBzb21lIHRyYW5zbGF0aW9ucyAocmggIzU3NjA1NikKLSBhcHBsZXQ6IGJldHRlciBmZWVkYmFjayB3aGVuIHdyb25nIFBJTi9QVUsgaXMgZW50ZXJlZAotIGFwcGxldDogbWFueSB1cGRhdGVkIHRyYW5zbGF0aW9ucwotIGFwcGxldDogUElOMiB1bmxvY2sgbm90IHJlcXVpcmVkIGZvciBub3JtYWwgbW9kZW0gZnVuY3Rpb25hbGl0eQotIGFwcGxldDogZml4IHdpcmVsZXNzIHNlY3JldHMgZGlhbG9nIGRpc3BsYXkALSBtYW46IG1hbnkgbWFucGFnZSB1cGRhdGVzCi0gY29yZTogZGV0ZXJtaW5lIGNsYXNzZnVsIHByZWZpeCBpZiBub24gaXMgZ2l2ZW4gdmlhIERIQ1AKLSBjb3JlOiBlbnN1cmUgL2V0Yy9ob3N0cyBpcyBhbHdheXMgdXAtdG8tZGF0ZSBhbmQgY29ycmVjdCAocmggIzU2OTkxNCkKLSBjb3JlOiBzdXBwb3J0IEdTTSBuZXR3b3JrIGFuZCByb2FtaW5nIHByZWZlcmVuY2VzCi0gYXBwbGV0OiBzdGFydHVwIHNwZWVkIGVuaGFuY2VtZW50cwotIGFwcGxldDogYmV0dGVyIHN1cHBvcnQgZm9yIE9UUC90b2tlbi1iYXNlZCBXaUZpIGNvbm5lY3Rpb25zIChyaCAjNTI2MzgzKQotIGFwcGxldDogc2hvdyBHU00gYW5kIENETUEgcmVnaXN0cmF0aW9uIHN0YXR1cyBhbmQgc2lnbmFsIHN0cmVuZ3RoIHdoZW4gYXZhaWxhYmxlCi0gYXBwbGV0OiBmaXggem9tYmllIEdTTSBhbmQgQ0RNQSBkZXZpY2VzIGluIHRoZSBtZW51Ci0gYXBwbGV0OiByZW1vdmUgNC1jaGFyYWN0ZXIgR1NNIFBJTi9QVUsgY29kZSBsaW1pdAotIGFwcGxldDogZml4IGluc2Vuc2l0aXZlIFdpRmkgQ3JlYXRlLi4uIGJ1dHRvbiAocmggIzU0MTE2MykKLSBhcHBsZXQ6IGFsbG93IHVubG9ja2luZyBvZiBtb2JpbGUgZGV2aWNlcyBpbW1lZGlhdGVseSB3aGVuIHBsdWdnZWQgaW4ALSBjb3JlOiB1cGRhdGUgdG8gZmluYWwgMC44IHJlbGVhc2UKLSBjb3JlOiBmaXggQmx1ZXRvb3RoIERVTiBjb25uZWN0aW9ucyB3aGVuIHNlY3JldHMgYXJlIG5lZWRlZAotIGlmY2ZnLXJoOiBhZGQgaGVscGVyIGZvciBpbml0c2NyaXB0cyB0byBkZXRlcm1pbmUgaWZjZmcgY29ubmVjdGlvbiBVVUlEcwotIGFwcGxldDogZml4IEJsdWV0b290aCBjb25uZWN0aW9uIHNlY3JldHMgcmVxdWVzdHMKLSBhcHBsZXQ6IGZpeCByYXJlIGNvbmZsaWN0IHdpdGggb3RoZXIgZ25vbWUtYmx1ZXRvb3RoIHBsdWdpbnMALSBjb3JlOiBmaXggbW9iaWxlIGJyb2FkYmFuZCBQSU4gaGFuZGxpbmcgKHJoICM1NDMwODgpIChyaCAjNTYwNzQyKQotIGNvcmU6IGJldHRlciBoYW5kbGluZyBvZiAvZXRjL2hvc3RzIGlmIGhvc3RuYW1lIHdhcyBhbHJlYWR5IGFkZGVkIGJ5IHRoZSB1c2VyCi0gYXBwbGV0OiBjcmFzaCBsZXNzIG9uIEQtQnVzIHByb3BlcnR5IGVycm9ycyAocmggIzU1NzAwNykKLSBhcHBsZXQ6IGZpeCBjcmFzaCBlbnRlcmluZyB3aXJlZCA4MDIuMXggY29ubmVjdGlvbiBkZXRhaWxzIChyaCAjNTU2NzYzKQAtIGNvcmU6IHZhbGlkYXRlIHRoZSBhdXRvc3RhcnQgLmRlc2t0b3AgZmlsZQotIGJ1aWxkOiBmaXggbm1jbGkgZm9yIHRoZSBzdHJpY3RlciBsZCAoZml4ZXMgRlRCRlMpCi0gYnVpbGQ6IGZpeCBubS1jb25uZWN0aW9uLWVkaXRvciBmb3IgdGhlIHN0cmljdGVyIGxkIChmaXhlcyBGVEJGUykKLSBhcHBsZXQ6IGRvbid0IGF1dG9zdGFydCBpbiBLREUgb24gRjEzKyAoIzU0MTM1MykALSBjb3JlOiBhZGQgQmx1ZXRvb3RoIERpYWwtVXAgTmV0d29ya2luZyAoRFVOKSBzdXBwb3J0IChyaCAjMTM2NjYzKQotIGNvcmU6IHN0YXJ0IERIQ1B2NiBvbiByZWNlaXB0IG9mIFJBICdvdGhlcmNvbmYnLydtYW5hZ2VkJyBiaXRzCi0gbm1jbGk6IGFsbG93IGVuYWJsZS9kaXNhYmxlIG9mIFdpRmkgYW5kIFdXQU4ALSBpZmNmZy1yaDogcmVhZCBhbmQgd3JpdGUgREhDUHY2IGVuYWJsZWQgY29ubmVjdGlvbnMgKHJoICM0Mjk3MTApCi0gbm1jbGk6IHVwZGF0ZQAtIGNvcmU6IGNsZWFuIE5TUyB1cCBsYXRlciB0byBwcmVzZXJ2ZSBlcnJvcnMgZnJvbSBjcnlwdG9faW5pdCgpAC0gY29yZTogc3VwcG9ydCBmb3IgbWFuYWdlZC1tb2RlIERIQ1B2NiAocmggIzQyOTcxMCkKLSBpZmNmZy1yaDogZ3JhY2VmdWxseSBoYW5kbGUgbWlzc2luZyBQUkVGSVgvTkVUTUFTSwotIGNsaTogaW5pdGlhbCBwcmV2aWV3IG9mIGNvbW1hbmQtbGluZSBjbGllbnQKLSBhcHBsZXQ6IGFkZCAtLWhlbHAgdG8gZXhwbGFpbiB3aGF0IHRoZSBhcHBsZXQgaXMgKHJoICM0OTQ2NDEpAC0gYnVpbGQ6IGZpeCBmb3IgbmV3IHBwcGQgKHJoICM1NDg1MjApCi0gY29yZTogYWRkIFdXQU4gZW5hYmxlL2Rpc2FibGUgZnVuY3Rpb25hbGl0eQotIGlmY2ZnLXJoOiBJUHY2IGFkZHJlc3NpbmcgYW5kIHJvdXRlcyBzdXBwb3J0IChyaCAjNTIzMjg4KQotIGlmY2ZnLXJoOiBlbnN1cmUgY29ubmVjdGlvbiBpcyB1cGRhdGVkIHdoZW4gcm91dGUva2V5IGZpbGVzIGNoYW5nZQotIGFwcGxldDogZml4IGNyYXNoIHdoZW4gYWN0aXZlIEFQIGlzbid0IGZvdW5kIChyaCAjNTQ2OTAxKQotIGVkaXRvcjogZml4IGNyYXNoIHdoZW4gZWRpdGluZyBjb25uZWN0aW9ucyAocmggIzU0OTU3OSkALSBjb3JlOiBmaXggcmVjb2duaXRpb24gb2Ygc3RhbmRhbG9uZSA4MDIuMXggcHJpdmF0ZSBrZXlzCi0gYXBwbGV0OiBjbGVhbiBub3RpZmljYXRpb24gdGV4dCB0byBlbnN1cmUgaXQgcGFzc2VzIGxpYm5vdGlmeSB2YWxpZGF0aW9uAC0gY29yZTogcmVtb3ZlIGhhbGRhZW1vbiBmcm9tIGluaXRzY3JpcHQgZGVwZW5kZW5jaWVzIChyaCAjNTQyMDc4KQotIGNvcmU6IGhhbmRsZSBQRU0gY2VydGlmaWNhdGVzIHdpdGhvdXQgYW4gZW5kaW5nIG5ld2xpbmUgKHJoICM1MDczMTUpCi0gY29yZTogZml4IHJma2lsbCByZXBvcnRpbmcgZm9yIGlwdzJ4MDAgZGV2aWNlcwotIGNvcmU6IGluY3JlYXNlIFBQUG9FIHRpbWVvdXQgdG8gMzAgc2Vjb25kcwotIGNvcmU6IGZpeCByZS1hY3RpdmF0aW5nIHN5c3RlbSBjb25uZWN0aW9ucyB3aXRoIHNlY3JldHMKLSBjb3JlOiBmaXggY3Jhc2ggd2hlbiBkZWxldGluZyBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgd2lyZWQgY29ubmVjdGlvbnMKLSBjb3JlOiBlbnN1cmUgdGhhdCBhIFZQTidzIEROUyBzZXJ2ZXJzIGFyZSB1c2VkIHdoZW4gc2hhcmluZyB0aGUgVlBOIGNvbm5lY3Rpb24KLSBpZmNmZy1yaDogc3VwcG9ydCByb3V0ZXMgZmlsZXMgKHJoICM1MDczMDcpCi0gaWZjZmctcmg6IHdhcm4gd2hlbiBkZXZpY2Ugd2lsbCBiZSBtYW5hZ2VkIGR1ZSB0byBtaXNzaW5nIEhXQUREUiAocmggIzU0NTAwMykKLSBpZmNmZy1yaDogaW50ZXJwcmV0IERFRlJPVVRFIGFzIG5ldmVyLWRlZmF1bHQgKHJoICM1MjgyODEpCi0gaWZjZmctcmg6IGhhbmRsZSBNT0RFPUF1dG8gY29ycmVjdGx5Ci0gcnBtOiBmaXggcnBtbGludCBlcnJvcnMKLSBhcHBsZXQ6IGRvbid0IGNyYXNoIG9uIHZhcmlvdXMgRC1CdXMgYW5kIG90aGVyIGVycm9ycyAocmggIzU0NTAxMSkgKHJoICM1NDI2MTcpCi0gZWRpdG9yOiBmaXggdmFyaW91cyBQb2xpY3lLaXQtcmVsYXRlZCBjcmFzaGVzIChyaCAjNDYyOTQ0KQotIGFwcGxldCtlZGl0b3I6IG5vdGlmeSB1c2VyIHRoYXQgcHJpdmF0ZSBrZXlzIG11c3QgYmUgcHJvdGVjdGVkAC0gbm06IGJldHRlciBwaWRmaWxlIGhhbmRpbmcgKHJoICM1MTczNjIpCi0gbm06IHNhdmUgV2lGaSBhbmQgTmV0d29ya2luZyBlbmFibGVkL2Rpc2FibGVkIHN0YXRlcyBhY3Jvc3MgcmVib290Ci0gbm06IGZpeCBjcmFzaCB3aXRoIG1pc3NpbmcgVlBOIHNlY3JldHMgKHJoICM1MzIwODQpCi0gYXBwbGV0OiBmaXggc3lzdGVtIGNvbm5lY3Rpb24gdXNhZ2UgZnJvbSB0aGUgIkNvbm5lY3QgdG8gaGlkZGVuLi4uIiBkaWFsb2cKLSBhcHBsZXQ6IHNob3cgQmx1ZXRvb3RoIGNvbm5lY3Rpb25zIHdoZW4gbm8gb3RoZXIgZGV2aWNlcyBhcmUgYXZhaWxhYmxlIChyaCAjNTMyMDQ5KQotIGFwcGxldDogZG9uJ3QgZGllIHdoZW4gYXV0b2NvbmZpZ3VyZWQgY29ubmVjdGlvbnMgY2FuJ3QgYmUgbWFkZSAocmggIzUzMjY4MCkKLSBhcHBsZXQ6IGFsbG93IHN5c3RlbSBhZG1pbmlzdHJhdG9ycyB0byBkaXNhYmxlIHRoZSAiQ3JlYXRlIG5ldyB3aXJlbGVzcyBuZXR3b3JrLi4uIiBtZW51IGl0ZW0KLSBhcHBsZXQ6IGZpeCBtaXNzaW5nIHVzZXJuYW1lIGNvbm5lY3RpbmcgdG8gVlBOcyB0aGUgc2Vjb25kIHRpbWUKLSBhcHBsZXQ6IHJlYWxseSBmaXggYW5pbWF0aW9uIHN0dXR0ZXJpbmcKLSBlZGl0b3I6IGZpeCBJUCBjb25maWcgd2lkZ2V0IHRvb2x0aXBzCi0gZWRpdG9yOiBhbGxvdyB1bmxpc3RlZCBjb3VudHJpZXMgaW4gdGhlIG1vYmlsZSBicm9hZGJhbmQgd2l6YXJkIChyaCAjNTMwOTgxKQotIGlmY2ZnLXJoOiBpZ25vcmUgLnJwbW5ldyBmaWxlcyAocmggIzUwOTYyMSkALSBubTogZml4IFBQUG9FIGNvbm5lY3Rpb24gYXV0aGVudGljYXRpb24gKHJoICM1MzI4NjIpAC0gaW5zdGFsbDogYmV0dGVyIGZpeCBmb3IgKHJoICM1MjY1MTkpCi0gaW5zdGFsbDogZG9uJ3QgYnVpbGQgQmx1ZXRvb3RoIGJpdHMgb24gczM5MCAocmggIzUyOTg1NCkKLSBubTogd2lyZWQgODAyLjF4IGNvbm5lY3Rpb24gYWN0aXZhdGlvbiBmaXhlcwotIG5tOiBmaXggY3Jhc2ggYWZ0ZXIgbW9kaWZ5aW5nIGRlZmF1bHQgd2lyZWQgY29ubmVjdGlvbnMgbGlrZSAiQXV0byBldGgwIgotIG5tOiBlbnN1cmUgVlBOIHNlY3JldHMgYXJlIHJlcXVlc3RlZCBhZ2FpbiBhZnRlciBjb25uZWN0aW9uIGZhaWx1cmUKLSBubTogcmVzZXQgJ2FjY2VwdF9yYScgdG8gcHJldmlvdXMgdmFsdWUgYWZ0ZXIgZGVhY3RpdmF0aW5nIElQdjYgY29ubmVjdGlvbnMKLSBubTogZW5zdXJlIHJhbmRvbSBuZXRsaW5rIGV2ZW50cyBkb24ndCBpbnRlcmZlcmUgd2l0aCBJUHY2IGNvbm5lY3Rpb24gYWN0aXZhdGlvbgotIGlmY2ZnLXJoOiBmaXggd3JpdGluZyBvdXQgTEVBUCBjb25uZWN0aW9ucwotIGlmY2ZnLXJoOiByZWNvZ25pemUgJ3N0YXRpYycgYXMgYSB2YWxpZCBCT09UUFJPVE8gKHJoICM1MjgwNjgpCi0gYXBwbGV0OiBmaXggImNvdWxkIG5vdCBmaW5kIHJlcXVpcmVkIHJlc291cmNlcyIgZXJyb3IgKHJoICM1Mjk3NjYpAC0gaW5zdGFsbDogZml4IC1nbm9tZSBwYWNrYWdlIHByZSBzY3JpcHQgZmFpbHVyZXMgKHJoICM1MjY1MTkpCi0gbm06IGZpeCBmYWlsdXJlcyB2YWxpZGF0aW5nIHByaXZhdGUga2V5cyB3aGVuIHVzaW5nIHRoZSBOU1MgY3J5cHRvIGJhY2tlbmQKLSBhcHBsZXQ6IGZpeCBjcmFzaGVzIHdoZW4gY2xpY2tpbmcgb24gbWVudSBidXQgbm90IGFzc29jaWF0ZWQgKHJoICM1MjY1MzUpCi0gZWRpdG9yOiBmaXggY3Jhc2ggZWRpdGluZyB3aXJlZCA4MDIuMXggc2V0dGluZ3MKLSBlZGl0b3I6IGZpeCBzZWNyZXRzIHJldHJpZXZhbCB3aGVuIGVkaXRpbmcgY29ubmVjdGlvbnMALSBubTogZml4IGNvbm5lY3Rpb24gdGFrZW92ZXIgd2hlbiBjYXJyaWVyIGlzIG5vdCBvbgotIG5tOiBoYW5kbGUgY2VydGlmaWNhdGUgcGF0aHMgKENBIGNoYWluIFBFTSBmaWxlcyBhcmUgbm93IGZ1bGx5IHVzYWJsZSkKLSBubTogZGVmZXIgYWN0aW9uIGZvciA0IHNlY29uZHMgd2hlbiB3aXJlZCBjYXJyaWVyIGRyb3BzCi0gaWZjZmctcmg6IGZpeCB3cml0aW5nIFdQQSBwYXNzcGhyYXNlcyB3aXRoIG9kZCBjaGFyYWN0ZXJzCi0gZWRpdG9yOiBmaXggZWRpdGluZyBvZiBJUHY0IHNldHRpbmdzIHdpdGggbmV3IGNvbm5lY3Rpb25zIChyaCAjNTI1ODE5KQotIGVkaXRvcjogZml4IHJhbmRvbSBjcmFzaGVzIHdoZW4gZWRpdGluZyBkdWUgdG8gYmFkIHdpZGdldCByZWZjb3VudGluZwotIGFwcGxldDogZGVidXQgcmV3b3JrZWQgbWVudSBsYXlvdXQgKG5vdCBmaW5hbCB5ZXQuLi4pAC0gSW5zdGFsbCBHQ29uZiBzY2hlbWFzAC0gbm06IGFsbG93IGRpc2Nvbm5lY3Rpb24gb2YgYWxsIGRldmljZSB0eXBlcwotIG5tOiBlbnN1cmUgdGhhdCB3aXJlZCBjb25uZWN0aW9ucyBhcmUgdG9ybiBkb3duIHdoZW4gdGhlaXIgaGFyZHdhcmUgZ29lcyBhd2F5Ci0gbm06IGZpeCBjcmFzaCB3aGVuIGNhbmNlbGluZyBhIFZQTidzIHJlcXVlc3QgZm9yIHNlY3JldHMKLSBlZGl0b3I6IGZpeCBpc3N1ZXMgY2hhbmdpbmcgY29ubmVjdGlvbnMgYmV0d2VlbiBzeXN0ZW0gYW5kIHVzZXIgc2NvcGVzCi0gZWRpdG9yOiBlbnN1cmUgY2hhbmdlcyBhcmUgdGhyb3duIGF3YXkgd2hlbiBlZGl0aW5nIGlzIGNhbmNlbGVkCi0gYXBwbGV0OiBlbnN1cmUgY29ubmVjdGlvbiBjaGFuZ2VzIGFyZSBub3RpY2VkIGJ5IE5ldHdvcmtNYW5hZ2VyCi0gYXBwbGV0OiBmaXggY3Jhc2ggd2hlbiBjcmVhdGluZyBuZXcgY29ubmVjdGlvbnMKLSBhcHBsZXQ6IGFjdHVhbGx5IHVzZSB3aXJlZCA4MDIuMXggc2VjcmV0cyBhZnRlciB0aGV5IGFyZSByZXF1ZXN0ZWQALSBubTogSVB2NiB6ZXJvY29uZiBzdXBwb3J0IGFuZCBmaXhlcwotIG5tOiBwb3J0IHRvIHBvbGtpdCAocmggIzQ5OTk2NSkKLSBubTogZml4ZXMgZm9yIGVoZWEgZGV2aWNlcyAocmggIzUxMTMwNCkgKHJoICM1MTY1OTEpCi0gbm06IHdvcmsgYXJvdW5kIFBQUCBidWcgY2F1c2luZyBib2d1cyBuYW1lc2VydmVycyBmb3IgbW9iaWxlIGJyb2FkYmFuZCBjb25uZWN0aW9ucwotIGVkaXRvcjogZml4IHNlZ2ZhdWx0IHdpdGggIlVubGlzdGVkIiBwbGFucyBpbiB0aGUgbW9iaWxlIGJyb2FkYmFuZCBhc3Npc3RhbnQALSBubTogYWRkIGlTQ1NJIHN1cHBvcnQKLSBubTogYWRkIGNvbm5lY3Rpb24gYXNzdW1lL3Rha2VvdmVyIHN1cHBvcnQgZm9yIGV0aGVybmV0IChyaCAjNTE3MzMzKQotIG5tOiBJUHY2IGZpeGVzCi0gbm06IHJlLWFkZCBPTFBDIFhPLTEgbWVzaCBkZXZpY2Ugc3VwcG9ydCAocmVtb3ZlZCB3aXRoIDAuNy4wKQotIGFwcGxldDogYmV0dGVyIFdpRmkgZGlhbG9nIGZvY3VzIGhhbmRsaW5nAC0gQWRkIHBhdGNoIHRvIGZpeCBzZXJ2aWNlIGRldGVjdGlvbiBvbiBwaG9uZXMALSBubTogSVB2NiBzdXBwb3J0IGZvciBtYW51YWwgJiByb3V0ZXItYWR2ZXJ0aXNlbWVudCBtb2RlcwAtIE1vdmUgc29tZSBiaWcgZG9jcyB0byAtZGV2ZWwgdG8gc2F2ZSBzcGFjZQAtIFVwZGF0ZSB0byB1cHN0cmVhbSAnbWFzdGVyJyBicmFuY2gKLSBVc2UgbW9kZW0tbWFuYWdlciBmb3IgYmV0dGVyIDNHIG1vZGVtIHN1cHBvcnQKLSBJbnRlZ3JhdGVkIHN5c3RlbSBzZXR0aW5ncyB3aXRoIE5ldHdvcmtNYW5hZ2VyIGl0c2VsZgotIFVzZSB1ZGV2IGluc3RlYWQgb2YgSEFMAC0gUmVidWlsdCBmb3IgaHR0cHM6Ly9mZWRvcmFwcm9qZWN0Lm9yZy93aWtpL0ZlZG9yYV8xMl9NYXNzX1JlYnVpbGQALSBhcHBsZXQ6IGZpeCBjZXJ0aWZpY2F0ZSB2YWxpZGF0aW9uIGluIGhpZGRlbiB3aWZpIG5ldHdvcmtzIGRpYWxvZyAocmggIzUwODIwNykALSBubTogZml4ZXMgZm9yIFpURS9PbmRhIG1vZGVtIGRldGVjdGlvbgotIG5tOiBwcmV2ZW50IHJlLW9wZW5pbmcgc2VyaWFsIHBvcnQgd2hlbiB0aGUgU0lNIGhhcyBhIFBJTgotIGFwcGxldDogdXBkYXRlZCB0cmFuc2xhdGlvbnMKLSBlZGl0b3I6IHNob3cgbGlzdCBjb2x1bW4gaGVhZGVycwAtIG5tOiBmaXggc2VyaWFsIHBvcnQgc2V0dGluZ3MALSBubTogZml4IEFUJlQgUXVpY2tzaWx2ZXIgbW9kZW0gY29ubmVjdGlvbnMgKHJoICM1MDIwMDIpCi0gbm06IGZpeCBzdXBwb3J0IGZvciBzMzkwIGJ1cyB0eXBlcyAocmggIzQ5NjgyMCkKLSBubTogZml4IGRldGVjdGlvbiBvZiBzb21lIENNT3RlY2ggbW9kZW1zCi0gbm06IGhhbmRsZSB1bnNvbGljaXRlZCB3aWZpIHNjYW5zIGJldHRlcgotIG5tOiByZXNvbHYuY29uZiBmaXhlcyB3aGVuIHVzaW5nIERIQ1AgYW5kIG92ZXJyaWRpbmcgc2VhcmNoIGRvbWFpbnMKLSBubTogaGFuZGxlIFdFUCBhbmQgV1BBIHBhc3NwaHJhc2VzIChyaCAjNDQxMDcwKQotIG5tOiBmaXggcmVtb3ZhbCBvZiBvbGQgQVBzIHdoZW4gbm9uZSBhcmUgc2Nhbm5lZAotIG5tOiBmaXggSHVhd2VpIEVDMTIxIGFuZCBFQzE2OEMgZGV0ZWN0aW9uIGFuZCBoYW5kbGluZyAocmggIzQ5NjQyNikKLSBhcHBsZXQ6IHNhdmUgV0VQIGFuZCBXUEEgcGFzc3BocmFzZXMgaW5zdGVhZCBvZiBoYXNoZWQga2V5cyAocmggIzQ0MTA3MCkKLSBhcHBsZXQ6IGZpeCBicm9rZW4gbm90aWZpY2F0aW9uIGJ1YmJsZSBhY3Rpb25zCi0gYXBwbGV0OiBkZWZhdWx0IHRvIFdFUCBlbmNyeXB0aW9uIGZvciBBZC1Ib2MgbmV0d29yayBjcmVhdGlvbgotIGFwcGxldDogZml4IGNyYXNoIHdoZW4gY29ubmVjdGlvbiBlZGl0b3IgZGlhbG9ncyBhcmUgY2FuY2VsZWQKLSBhcHBsZXQ6IGFkZCBhIG1vYmlsZSBicm9hZGJhbmQgcHJvdmlkZXIgd2l6YXJkAC0gZHJvcCBFeGNsdWRlQXJjaCBzMzkwIHMzOTB4LCB3ZSBuZWVkIGF0IGxlYXN0IHRoZSBoZWFkZXIgZmlsZXMALSBubS1zYXZlLXRoZS1sZWFzZXMucGF0Y2g6IFVzZSBwZXItY29ubmVjdGlvbiBsZWFzZSBmaWxlcywgYW5kIGRvbid0IGRlbGV0ZQogIHRoZW0gb24gaW50ZXJmYWNlIGRlYWN0aXZhdGUuAC0gaWZjZmctcmg6IGZpeCBwcm9ibGVtcyBub3RpY2luZyBjaGFuZ2VzIHZpYSBpbm90aWZ5IChyaCAjNDk1ODg0KQAtIGlmY2ZnLXJoOiBlbmFibGUgd3JpdGUgc3VwcG9ydCBmb3Igd2lyZWQgYW5kIHdpZmkgY29ubmVjdGlvbnMALSBubTogdXBkYXRlIHRvIDAuNy4xCi0gbm06IGZpeCBzdGFydHVwIHJhY2Ugd2l0aCBIQUwgY2F1c2luZyB1bm1hbmFnZWQgZGV2aWNlcyB0byBzb21ldGltZXMgYmUgbWFuYWdlZCAocmggIzQ5NDUyNykALSBubTogZml4IHJlY29nbml0aW9uIG9mIE9wdGlvbiBHVCBGdXNpb24gYW5kIE9wdGlvbiBHVCBIU0RQQSAobm96b21pKSBkZXZpY2VzIChyaCAjNDk0MDY5KQotIG5tOiBmaXggaGFuZGxpbmcgb2Ygc3BhY2VzIGluIERIQ1AgJ2RvbWFpbi1zZWFyY2gnIG9wdGlvbgotIG5tOiBmaXggZGV0ZWN0aW9uIG9mIG5ld2VyIE9wdGlvbiAnaHNvJyBkZXZpY2VzCi0gbm06IGlnbm9yZSBsb3cgTVRVcyByZXR1cm5lZCBieSBicm9rZW4gREhDUCBzZXJ2ZXJzAC0gVXBkYXRlIHRvIDAuNy4xLXJjNAotIG5tOiB1c2UgUG9saWN5S2l0IGZvciBzeXN0ZW0gY29ubmVjdGlvbiBzZWNyZXRzIHJldHJpZXZhbAotIG5tOiBjb3JyZWN0bHkgaW50ZXJwcmV0IGVycm9ycyByZXR1cm5lZCBmcm9tIGNobW9kKDIpIHdoZW4gc2F2aW5nIGtleWZpbGUgc3lzdGVtIGNvbm5lY3Rpb25zCi0gZWRpdG9yOiB1c2UgUG9saWN5S2l0IHRvIGdldCBzeXN0ZW0gY29ubmVjdGlvbiBzZWNyZXRzAC0gbm06IGZpeCBjcmFzaGVzIHdpdGggb3V0LW9mLXRyZWUgbW9kdWxlcyB0aGF0IHByb3ZpZGUgbm8gZHJpdmVyIGxpbmsgKHJoICM0OTIyNDYpCi0gbm06IGZpeCBVU0IgbW9kZW0gcHJvYmluZyBvbiByZWNlbnQgdWRldiB2ZXJzaW9ucwAtIG5tOiBmaXggY29tbXVuaWNhdGlvbiB3aXRoIE9wdGlvbiBHVCBNYXggMy42IG1vYmlsZSBicm9hZGJhbmQgY2FyZHMKLSBubTogZml4IGNvbW11bmljYXRpb24gd2l0aCBIdWF3ZWkgbW9iaWxlIGJyb2FkYmFuZCBjYXJkcyAocmggIzQ4NzY2MykKLSBubTogZG9uJ3QgbG9vayB1cCBob3N0bmFtZSB3aGVuIEhPU1ROQU1FPWxvY2FsaG9zdCB1bmxlc3MgYXNrZWQgKHJoICM0OTAxODQpCi0gbm06IGZpeCBjcmFzaCBkdXJpbmcgSVA0IGNvbmZpZ3VyYXRpb24gKHJoICM0OTE2MjApCi0gbm06IGlnbm9yZSBPTkJPT1Q9bm8gZm9yIG1pbmltYWwgaWZjZmcgZmlsZXMgKGY5ICYgZjEwIG9ubHkpIChyaCAjNDg5Mzk4KQotIGFwcGxldDogdXBkYXRlZCB0cmFuc2xhdGlvbnMALSBubTogd29yayBhcm91bmQgdW5oYW5kbGVkIGRldmljZSByZW1vdmFscyBkdWUgdG8gbWlzc2luZyBIQUwgZXZlbnRzIChyaCAjNDg0NTMwKQotIG5tOiBpbXByb3ZlIGhhbmRsaW5nIG9mIG11bHRpcGxlIG1vZGVtIHBvcnRzCi0gbm06IHN1cHBvcnQgZm9yIFNvbnkgRXJpY3Nzb24gRjM1MDdnIC8gTUQzMDAgYW5kIERlbGwgNTUzMAotIGFwcGxldDogdXBkYXRlZCB0cmFuc2xhdGlvbnMALSBNaXNzaW5nIE9OQk9PVCBzaG91bGQgYWN0dWFsbHkgbWVhbiBPTkJPT1Q9eWVzIChyaCAjNDg5NDIyKQAtIEZpeCBjb25mbGljdCB3aXRoIE5ldHdvcmtNYW5hZ2VyLW9wZW5jb25uZWN0IChyaCAjNDg5MjcxKQotIEZpeCBwb3NzaWJsZSBjcmFzaCB3aGVuIHJlc3luY2hyb25pemluZyBkZXZpY2VzIGlmIEhBTCByZXN0YXJ0cwAtIG5tOiBtYWtlIGRlZmF1bHQgd2lyZWQgIkF1dG8gZXRoWCIgY29ubmVjdGlvbiBtb2RpZmlhYmxlIGlmIGFuIGVuYWJsZWQgc3lzdGVtIHNldHRpbmdzCiAgICBwbHVnaW4gc3VwcG9ydHMgbW9kaWZ5aW5nIGNvbm5lY3Rpb25zIChyaCAjNDg1NTU1KQotIG5tOiBtYW5wYWdlIGZpeGVzIChyaCAjNDQ3MjMzKQotIG5tOiBDVkUtMjAwOS0wMzY1IC0gR2V0U2VjcmV0cyBkaXNjbG9zdXJlCi0gYXBwbGV0OiBDVkUtMjAwOS0wNTc4IC0gbG9jYWwgdXNlcnMgY2FuIG1vZGlmeSB0aGUgY29ubmVjdGlvbiBzZXR0aW5ncwotIGFwcGxldDogZml4IGluYWJpbGl0eSB0byBjaG9vc2UgV1BBIEFkLUhvYyBuZXR3b3JrcyBmcm9tIHRoZSBtZW51Ci0gaWZjZmctcmg6IGFkZCByZWFkLW9ubHkgc3VwcG9ydCBmb3IgV1BBLVBTSyBjb25uZWN0aW9ucwAtIEZpeCBnZXR0aW5nIHNlY3JldHMgZm9yIHN5c3RlbSBjb25uZWN0aW9ucyAocmggIzQ4NjY5NikKLSBNb3JlIGNvbXBhdGlibGUgbW9kZW0gYXV0b2RldGVjdGlvbgotIEJldHRlciBoYW5kbGUgbWluaW1hbCBpZmNmZyBmaWxlcwAtIFJlYnVpbHQgZm9yIGh0dHBzOi8vZmVkb3JhcHJvamVjdC5vcmcvd2lraS9GZWRvcmFfMTFfTWFzc19SZWJ1aWxkAC0gVXNlIElGRl9MT1dFUl9VUCBmb3IgY2FycmllciBkZXRlY3QgaW5zdGVhZCBvZiBJRkZfUlVOTklORwotIEFkZCBzbWFsbCBkZWxheSBiZWZvcmUgcHJvYmluZyBjZGMtYWNtIGRyaXZlbiBtb2JpbGUgYnJvYWRiYW5kIGRldmljZXMALSBGaXggUEVBUCB2ZXJzaW9uIHNlbGVjdGlvbiBpbiB0aGUgYXBwbGV0IChyaCAjNDY4ODQ0KQotIE1hdGNoIGhvc3RuYW1lIGJlaGF2aW9yIHRvICduZXR3b3JrJyBzZXJ2aWNlIHdoZW4gaG9zdG5hbWUgaXMgbG9jYWxob3N0IChyaCAjNDQxNDUzKQAtIEZpeCAnbm9yZXBsYWNlJyBmb3Igbm0tc3lzdGVtLXNldHRpbmdzLmNvbmYALSBVcGRhdGUgdG8gMC43LjFyYzEKLSBubTogc3VwcG9ydCBmb3IgSHVhd2VpIEUxNjBHIG1vYmlsZSBicm9hZGJhbmQgZGV2aWNlcyAocmggIzQ2NjE3NykKLSBubTogZml4IG1pc2xlYWRpbmcgcm91dGluZyBlcnJvciBtZXNzYWdlIChyaCAjNDc3OTE2KQotIG5tOiBmaXggaXNzdWVzIHdpdGggMzItY2hhcmFjdGVyIFNTSURzIChyaCAjNDg1MzEyKQotIG5tOiBhbGxvdyByb290IHRvIGFjdGl2YXRlIHVzZXIgY29ubmVjdGlvbnMKLSBubTogYXV0b21hdGljIG1vZGVtIGRldGVjdGlvbiB3aXRoIHVkZXYtZXh0cmFzCi0gbm06IG1hc3NpdmUgbWFucGFnZSByZXdyaXRlCi0gYXBwbGV0OiBmaXggY3Jhc2ggd2hlbiBzaG93aW5nIHRoZSBDQSBjZXJ0aWZpY2F0ZSBpZ25vcmUgZGlhbG9nIGEgc2Vjb25kIHRpbWUKLSBhcHBsZXQ6IGNsZWFyIGtleXJpbmcgaXRlbXMgd2hlbiBkZWxldGluZyBhIGNvbm5lY3Rpb24KLSBhcHBsZXQ6IGZpeCBtYXggc2lnbmFsIHN0cmVuZ3RoIGNhbGN1bGF0aW9uIGluIG1lbnUgKHJoICM0NzUxMjMpCi0gYXBwbGV0OiBmaXggVlBOIGV4cG9ydCAocmggIzQ4MDQ5NikALSBhcHBsZXQ6IGZpeCBibGFuayBWUE4gY29ubmVjdGlvbiBtZXNzYWdlIGJ1YmJsZXMKLSBhcHBsZXQ6IGJldHRlciBoYW5kbGluZyBvZiBWUE4gcm91dGluZyBvbiB1cGRhdGUKLSBhcHBsZXQ6IHNpbGVuY2UgcG9pbnRsZXNzIHdhcm5pbmcgKHJoICM0ODQxMzYpCi0gYXBwbGV0OiBkZXNlbnNpdGl6ZSBkZXZpY2VzIGluIHRoZSBtZW51IHVudGlsIHRoZXkgYXJlIHJlYWR5IChyaCAjNDgzODc5KQotIG5tOiBFeHBvc2UgV0lOUyBzZXJ2ZXJzIGluIHRoZSBJUDRDb25maWcgb3ZlciBELUJ1cwotIG5tOiBCZXR0ZXIgaGFuZGxpbmcgb2YgR1NNIE1vYmlsZSBCcm9hZGJhbmQgbW9kZW0gaW5pdGlhbGl6YXRpb24KLSBubTogSGFuZGxlIERIQ1AgQ2xhc3NsZXNzIFN0YXRpYyBSb3V0ZXMgKFJGQyAzNDQyKQotIG5tOiBGaXggTW9iaWxlIEJyb2FkYmFuZCBhbmQgUFBQb0UgdG8gYWx3YXlzIHVzZSAnbm9hdXRoJwotIG5tOiBCZXR0ZXIgY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIGR1YWwtU1NJRCBBUCBjb25maWd1cmF0aW9ucyAocmggIzQ0NTM2OSkKLSBubTogTWFyayBubS1zeXN0ZW0tc2V0dGluZ3MuY29uZiBhcyBjb25maWcgKHJoICM0NjU2MzMpCi0gbm0tdG9vbDogU2hvdyBWUE4gY29ubmVjdGlvbiBpbmZvcm1hdGlvbgotIGlmY2ZnLXJoOiBTaWxlbmNlIG1lc3NhZ2UgYWJvdXQgaWdub3JpbmcgbG9vcGJhY2sgY29uZmlnIChyaCAjNDg0MDYwKQotIGlmY2ZnLXJoOiBGaXggaXNzdWUgd2l0aCB3cm9uZyBnYXRld2F5IGZvciBzeXN0ZW0gY29ubmVjdGlvbnMgKHJoICM0NzYwODkpAC0gVXBkYXRlIHRvIDAuNy4xIHByZS1yZWxlYXNlCi0gQWxsb3cgY29ubmVjdGlvbnMgdG8gYmUgaWdub3JlZCB3aGVuIGRldGVybWluaW5nIHRoZSBkZWZhdWx0IHJvdXRlIChyaCAjNDc2MDg5KQotIE93biAvdXNyL3NoYXJlL2dub21lLXZwbi1wcm9wZXJ0aWVzIChyaCAjNDc3MTU1KQotIEZpeCBsb2cgZmxvb2RpbmcgZHVlIHRvIG5ldGxpbmsgZXJyb3JzIChyaCAjNDU5MjA1KQotIFBhc3MgY29ubmVjdGlvbiBVVUlEIHRvIGRpc3BhdGNoZXIgc2NyaXB0cyB2aWEgdGhlIGVudmlyb25tZW50Ci0gRml4IHBvc3NpYmxlIGNyYXNoIGFmdGVyIGRlYWN0aXZhdGluZyBhIFZQTiBjb25uZWN0aW9uCi0gRml4IGlzc3VlcyB3aXRoIGVkaXRpbmcgd2lyZWQgODAyLjF4IGNvbm5lY3Rpb25zCi0gRml4IGlzc3VlcyB3aGVuIHVzaW5nIFBLQ1MjMTIgY2VydGlmaWNhdGVzIHdpdGggODAyLjF4IGNvbm5lY3Rpb25zAC0gQVBJIGFuZCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMKLSBGaXggUElOIGhhbmRsaW5nIG9uICdoc28nIG1vYmlsZSBicm9hZGJhbmQgZGV2aWNlcwAtIEZpeCBQSU4vUFVLIGlzc3VlcyB3aXRoIGhpZ2gtc3BlZWQgT3B0aW9uIEhTRFBBIG1vYmlsZSBicm9hZGJhbmQgY2FyZHMKLSBGaXggZGVzZW5zaXRpemVkIE9LIGJ1dHRvbiB3aGVuIGFza2luZyBmb3Igd2lyZWxlc3Mga2V5cwAtIEZpeCBpc3N1ZXMgcmVhZGluZyBpZmNmZyBmaWxlcwotIFByZXZpb3VzbHkgZml4ZWQ6Ci0gRG9lc24ndCBzZW5kIERIQ1AgaG9zdG5hbWUgKHJoICM0NjkzMzYpCi0gJ0F1dG8gZXRoMCcgZm9yZ2V0cyBzZXR0aW5ncyAocmggIzQ2ODYxMikKLSBESENQIHJlbmV3YWwgc29tZXRpbWVzIGJyZWFrcyBWUE4gKHJoICM0NzE4NTIpCi0gQ29ubmVjdGlvbiBlZGl0b3IgbWVudSBpdGVtIGluIHRoZSB3cm9uZyBwbGFjZSAocmggIzQ3MTQ5NSkKLSBDYW5ub3QgbWFrZSBzeXN0ZW0td2lkZSBjb25uZWN0aW9ucyAocmggIzQ3MTMwOCkALSBVcGRhdGUgdG8gTmV0d29ya01hbmFnZXIgMC43LjAgUkMyCi0gSGFuZGxlIGdhdGV3YXlzIG9uIGEgZGlmZmVyZW50IHN1Ym5ldCBmcm9tIHRoZSBpbnRlcmZhY2UKLSBDbGVhciBWUE4gc2VjcmV0cyBvbiBjb25uZWN0aW9uIGZhaWx1cmUgdG8gZW5zdXJlIHRoZXkgYXJlIHJlcXVlc3RlZCBhZ2FpbiAocmggIzQyOTI4NykKLSBBZGQgc3VwcG9ydCBmb3IgUEtDUyMxMiBwcml2YXRlIGtleXMgKHJoICM0NjI3MDUpCi0gRml4IG1hbmdsaW5nIG9mIFZQTidzIGRlZmF1bHQgcm91dGUgb24gREhDUCByZW5ldwotIEZpeCB0eXBlIGRldGVjdGlvbiBvZiBxZW11L2t2bSBuZXR3b3JrIGRldmljZXMgKHJoICM0NjYzNDApCi0gQ2xlYXIgdXAgbmV0bWFzay9wcmVmaXggY29uZnVzaW9uIGluIHRoZSBjb25uZWN0aW9uIGVkaXRvcgotIE1ha2UgdGhlIHNlY3JldHMgZGlhbG9nIGdvIGF3YXkgd2hlbiBpdCdzIG5vdCBuZWVkZWQKLSBGaXggaW5hYmlsaXR5IHRvIGFkZCBzeXN0ZW0gY29ubmVjdGlvbnMgKHJoICM0NzEzMDgpAC0gTW9yZSByZWxpYWJsZSBtb2JpbGUgYnJvYWRiYW5kIGNhcmQgaW5pdGlhbGl6YXRpb24KLSBIYW5kbGUgbW9iaWxlIGJyb2FkYmFuZCBQSU5zIGNvcnJlY3RseSB3aGVuIFBQUCBwYXNzd29yZHMgYXJlIGFsc28gdXNlZAotIEFkZGl0aW9uYWwgUG9saWN5S2l0IGludGVncmF0aW9uIGZvciBlZGl0aW5nIHN5c3RlbSBjb25uZWN0aW9ucwotIENsb3NlIHRoZSBhcHBsZXQgbWVudSBpZiBhIGtleXJpbmcgcGFzc3dvcmQgaXMgbmVlZGVkIChyaCAjMzUzNDUxKQAtIEZpeCBpc3N1ZXMgd2l0aCBob3N0bmFtZSBkdXJpbmcgYW5hY29uZGEgaW5zdGFsbGF0aW9uIChyaCAjNDYxOTMzKQotIEZpeCBBZC1Ib2MgV1BBIGNvbm5lY3Rpb25zIChyaCAjNDYxMTk3KQotIERvbid0IHJlcXVpcmUgZ25vbWUtcGFuZWwgb3IgZ25vbWUtcGFuZWwtZGV2ZWwgKHJoICM0Mjc4MzQpCi0gRml4IGRldGVybWluYXRpb24gb2YgV1BBIGVuY3J5cHRpb24gY2FwYWJpbGl0aWVzIG9uIHNvbWUgY2FyZHMKLSBGaXggY29uZmxpY3RzIHdpdGggUFBUUCBhbmQgdnBuYyBwbHVnaW5zCi0gQWxsb3cgLmNlciBmaWxlIGV4dGVuc2lvbnMgd2hlbiBjaG9vc2luZyBjZXJ0aWZpY2F0ZXMALSBGaXggY29uZmxpY3RzIGZvciBvbGRlciBQUFRQIFZQTiBwbHVnaW5zAC0gRW5zdXJlIHRoYXQgbW9iaWxlIGJyb2FkYmFuZCBjYXJkcyBhcmUgcG93ZXJlZCB1cCBiZWZvcmUgdHJ5aW5nIHRvIHVzZSB0aGVtCi0gSG9zdG5hbWUgY2hhbmdpbmcgc3VwcG9ydCAocmggIzQ0MTQ1MykKLSBGaXggbW9iaWxlIGJyb2FkYmFuZCBzZWNyZXQgcmVxdWVzdHMgdG8gaGFwcGVuIGxlc3Mgb2Z0ZW4KLSBCZXR0ZXIgaGFuZGxpbmcgb2YgZGVmYXVsdCBkZXZpY2VzIGFuZCBkZWZhdWx0IHJvdXRlcwotIEJldHRlciBpbmZvcm1hdGlvbiBpbiB0b29sdGlwcyBhbmQgbm90aWZpY2F0aW9ucwotIFZhcmlvdXMgVUkgY2xlYW51cHM7IGhpZGUgd2lkZ2V0cyB0aGF0IGFyZW4ndCB1c2VkIChyaCAjNDY1Mzk3LCByaCAjNDY1Mzk1KQotIEFjY2VwdCBkaWZmZXJlbnQgc2VwYXJhdG9ycyBmb3IgRE5TIHNlcnZlcnMgYW5kIHNlYXJjaGVzCi0gTWFrZSBhcHBsZXQncyBpY29uIGFjY3VyYXRlbHkgcmVmbGVjdCBzaWduYWwgc3RyZW5ndGggb2YgdGhlIGN1cnJlbnQgQVAALSBGaXggY29ubmVjdGlvbiBjb21wYXJpc29uIHRoYXQgY291bGQgY2F1c2UgY2hhbmdlcyB0byBnZXQgb3ZlcndyaXR0ZW4gKHJoICM0NjQ0MTcpAC0gRml4IGhhbmRsaW5nIG9mIFZQTiBzZXR0aW5ncyBvbiB1cGdyYWRlIChyaCAjNDYwNzMwLCBiZ28gIzU1MzQ2NSkALSBGaXggaGFuZyB3aGVuIHJlYWRpbmcgc3lzdGVtIGNvbm5lY3Rpb25zIGZyb20gaWZjZmcgZmlsZXMALSBGaXggV1BBIEFkLUhvYyBjb25uZWN0aW9ucwAtIEZpeCBwYXJzaW5nIG9mIERPTUFJTiBpbiBpZmNmZyBmaWxlcyAocmggIzQ1OTM3MCkKLSBGaXggcmVjb25uZWN0aW9uIHRvIG1vYmlsZSBicm9hZGJhbmQgbmV0d29ya3MgYWZ0ZXIgYW4gYXV0aCBmYWlsdXJlCi0gRml4IHJlY29nbml0aW9uIG9mIHRpbWVvdXRzIG9mIFBQUCBkdXJpbmcgbW9iaWxlIGJyb2FkYmFuZCBjb25uZWN0aW9uCi0gTW9yZSBjb21wYXRpYmxlIGNvbm5lY3Rpb24gc2hhcmluZyAocmggIzQ1ODYyNSkKLSBGaXggREhDUCBpbiBtaW5pbWFsIGVudmlyb25tZW50cyB3aXRob3V0IGdsaWJjIGxvY2FsZSBpbmZvcm1hdGlvbiBpbnN0YWxsZWQKLSBBZGQgc3VwcG9ydCBmb3IgT3B0aW9uIG1vYmlsZSBicm9hZGJhbmQgZGV2aWNlcyAobGlrZSBpQ09OIDIyNSBhbmQgaUNPTiA3LjIpCi0gQWRkIElQNCBjb25maWcgaW5mb3JtYXRpb24gdG8gZGlzcGF0Y2hlciBzY3JpcHQgZW52aXJvbm1lbnQKLSBNZXJnZSBXRVAgQVNDSUkgYW5kIEhleCBrZXkgdHlwZXMgZm9yIGNsZWFuZXIgVUkKLSBQcmUtZmlsbCBQUFBvRSBwYXNzd29yZCB3aGVuIGF1dGhlbnRpY2F0aW9uIGZhaWxzCi0gRml4ZWQgc29tZSBjaGFuZ2VzIG5vdCBnZXR0aW5nIHNhdmVkIGluIHRoZSBjb25uZWN0aW9uIGVkaXRvcgotIEFjY2VwdCBib3RoIHByZWZpeCBhbmQgbmV0bWFzayBpbiB0aGUgY29uZWN0aW9uIGVkaXRvcidzIElQdjQgcGFnZQAtIEZpeCBpc3N1ZSB3aXRoIG1vYmlsZSBicm9hZGJhbmQgY29ubmVjdGlvbnMgdGhhdCBkb24ndCByZXF1aXJlIGF1dGhlbnRpY2F0aW9uAC0gRXhwb3NlIERIQ1AtcmV0dXJuZWQgb3B0aW9ucyBvdmVyIEQtQnVzIGFuZCB0byBkaXNwYXRjaGVyIHNjcmlwdHMKLSBBZGQgc3VwcG9ydCBmb3IgY3VzdG9taXplZCBzdGF0aWMgcm91dGVzCi0gSGFuZGxlIG11bHRpcGxlIGNvbmN1cnJlbnQgM0cgb3IgUFBQb0UgY29ubmVjdGlvbnMKLSBGaXggR1NNL0NETUEgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIGlzc3VlcwotIEJldHRlciBoYW5kbGluZyBvZiB1bm1hbmFnZWQgZGV2aWNlcyBmcm9tIGlmY2ZnIGZpbGVzCi0gRml4IHRpbWVvdXQgaGFuZGxpbmcgb2YgZXJyb3JzIGR1cmluZyAzRyBjb25uZWN0aW9ucwotIEZpeCBzb21lIHJvdXRpbmcgaXNzdWVzIChyaCAjNDU2Njg1KQotIEZpeCBhcHBsZXQgY3Jhc2hlcyBhZnRlciByZW1vdmluZyBhIGRldmljZSAocmggIzQ1NzM4MCkALSBDb252ZXJ0IHN0b3JlZCBJUHY0IHN0YXRpYyBJUCBhZGRyZXNzZXMgdG8gbmV3IHByZWZpeC1iYXNlZCBzY2hlbWUgYXV0b21hdGljYWxseQotIEZpeCBwcHBkIGNvbm5lY3Rpb25zIHRvIHNvbWUgM0cgcHJvdmlkZXJzIChyaCAjNDU1MzQ4KQotIE1ha2UgUFBQb0UgIlNob3cgUGFzc3dvcmQiIG9wdGlvbiB3b3JrCi0gSGlkZSBJUHY0IGNvbmZpZyBvcHRpb25zIHRoYXQgZG9uJ3QgbWFrZSBzZW5zZSBpbiBjZXJ0YWluIGNvbmZpZ3VyYXRpb25zAC0gRXhwb3NlIHNlcnZlci1yZXR1cm5lZCBESENQIG9wdGlvbnMgdmlhIEQtQnVzCi0gVXNlIGF2YWhpLWF1dG9pcGQgcmF0aGVyIHRoYW4gb2xkIGJ1aWx0LWluIElQdjRMTCBpbXBsZW1lbnRhdGlvbgotIFNlbmQgaG9zdG5hbWUgdG8gREhDUCBzZXJ2ZXIgaWYgcHJvdmlkZWQgKERIQ1BfSE9TVE5BTUUgaWZjZmcgb3B0aW9uKQotIFN1cHBvcnQgc2VuZGluZyBESENQIENsaWVudCBJZGVudGlmaWVyIHRvIERIQ1Agc2VydmVyCi0gQWxsb3cgZm9yY2luZyA4MDIuMXggUEVBUCBMYWJlbCB0byAnMCcKLSBNYWtlIGNvbm5lY3Rpb24gc2hhcmluZyBtb3JlIHJvYnVzdAotIFNob3cgc3RhdHVzIGZvciBzaGFyZWQgYW5kIEFkLUhvYyBjb25uZWN0aW9ucyBpZiBubyBvdGhlciBjb25uZWN0aW9uIGlzIGFjdGl2ZQAtIERyb3AgZXhwbGljaXQgaGFsIGRlcCBpbiAtZ25vbWUALSBNb3ZlIFZQTiBjb25maWd1cmF0aW9uIGludG8gY29ubmVjdGlvbiBlZGl0b3IKLSBGaXggbW9iaWxlIGJyb2FkYmFuZCB1c2VybmFtZS9wYXNzd29yZCBpc3N1ZXMKLSBGaXggaXNzdWVzIHdpdGggYnJva2VuIHJma2lsbCBzZXR1cHMgKHJoICM0NDg4ODkpCi0gSG9ub3IgQVBOIHNldHRpbmcgZm9yIEdTTSBtb2JpbGUgYnJvYWRiYW5kIGNvbmZpZ3VyYXRpb25zCi0gRml4IGFkZGluZyBDRE1BIGNvbm5lY3Rpb25zIGluIHRoZSBjb25uZWN0aW9uIGVkaXRvcgAtIFVwZGF0ZSB0byBsYXRlc3QgU1ZOCi0gRW5hYmxlIGNvbm5lY3Rpb24gc2hhcmluZwotIFJlc3BlY3QgVlBOLXByb3ZpZGVkIHJvdXRlcwAtIE1vdmUgTk0gbGF0ZXIgaW4gdGhlIHNodXRkb3duIHByb2Nlc3MgKHJoICM0NDkwNzApCi0gTW92ZSBsaWJubS11dGlsIGludG8gYSBzdWJwYWNrYWdlIHRvIGFsbG93IE5NIHRvIGJlIHJlbW92ZWQgbW9yZSBlYXNpbHkgKHJoICMzNTExMDEpAC0gUmVhZCBnbG9iYWwgZ2F0ZXdheSBmcm9tIC9ldGMvc3lzY29uZmlnL25ldHdvcmsgaWYgbWlzc2luZyAocmggIzQ0NjUyNykKLSBubS1zeXN0ZW0tc2V0dGluZ3Mgbm93IHRlcm1pbmF0ZXMgd2hlbiBkYnVzIGdvZXMgYXdheSAocmggIzQ0NDk3NikALSBGaXggaW5pdGlhbCBjYXJyaWVyIHN0YXRlIGRldGVjdGlvbiBvbiBkZXZpY2VzIHRoYXQgYXJlIGFscmVhZHkgdXAgKHJoICMxMzQ4ODYpAC0gUmVzdG9yZSBiZWhhdmlvciBvZiBtYXJraW5nIHdpZmkgZGV2aWNlcyBhcyAiZG93biIgd2hlbiBkaXNhYmxpbmcgd2lyZWxlc3MKLSBGaXggYSBjcmFzaCBvbiByZXN1bWUgd2hlbiBhIFZQTiB3YXMgYWN0aXZlIHdoZW4gZ29pbmcgdG8gc2xlZXAALSBGaXggaXNzdWVzIHdpdGggdGhlIEZlZG9yYSBwbHVnaW4gbm90IG5vdGljaW5nIGNoYW5nZXMgbWFkZSBieQogICAgc3lzdGVtLWNvbmZpZy1uZXR3b3JrIChyaCAjNDQ0NTAyKQotIEFsbG93IGF1dG9jb25uZWN0aW9uIG9mIEdTTSBhbmQgQ0RNQSBjb25uZWN0aW9ucwotIE11bHRpcGxlIElQIGFkZHJlc3Mgc3VwcG9ydCBmb3IgdXNlciBjb25uZWN0aW9ucwotIEZpeGVzIGZvciBNb2JpbGUgQnJvYWRiYW5kIGNhcmRzIHRoYXQgcmV0dXJuIGxpbmUgc3BlZWQgb24gY29ubmVjdAotIEltcGxlbWVudCBQSU4gZW50cnkgZm9yIEdTTSBtb2JpbGUgYnJvYWRiYW5kIGNvbm5lY3Rpb25zCi0gRml4IGNyYXNoIHdoZW4gZWRpdGluZyB1bmVuY3J5cHRlZCBXaUZpIGNvbm5lY3Rpb25zIGluIHRoZSBjb25uZWN0aW9uIGVkaXRvcgAtIENsZWFuIHVwIHRoZSBkaXNwYXRjaGVyIG5vdyB0aGF0IGl0J3Mgc2VydmljZSBpcyBnb25lIChyaCAjNDQ0Nzk4KQAtIEZpeCBhc2tpbmcgYXBwbGV0cyBmb3IgdGhlIEdTTSBQSU4vUFVLAC0gR3Vlc3MgV0VQIGtleSB0eXBlIGluIGFwcGxldCB3aGVuIGFza2luZyBmb3IgbmV3IGtleXMKLSBDb3JyZWN0IE9LIGJ1dHRvbiBzZW5zaXRpdml0eSBpbiBhcHBsZXQgd2hlbiBhc2tpbmcgZm9yIG5ldyBXRVAga2V5cwAtIEZpeCBpc3N1ZXMgd2l0aCBNb2JpbGUgQnJvYWRiYW5kIGNvbm5lY3Rpb25zIGNhdXNlZCBieSBkZXZpY2UgaW5pdCByYWNlIHBhdGNoAC0gRml4IGRldmljZSBpbml0aWFsaXphdGlvbiByYWNlIHRoYXQgY2F1c2VkIGV0aGVybmV0IGRldmljZXMgdG8gZ2V0IHN0dWNrIG9uCiAgICBzdGFydHVwCi0gRml4IFBQUG9FIGNvbm5lY3Rpb25zIG5vdCBzaG93aW5nIHVwIGluIHRoZSBhcHBsZXQKLSBGaXggZGlzYWJsZWQgT0sgYnV0dG9uIGluIGNvbm5lY3Rpb24gZWRpdG9yIHNvbWUgd2lyZWxlc3MgYW5kIElQNCBzZXR0aW5ncwotIERvbid0IGV4aXQgaWYgSEFMIGlzbid0IHVwIHlldDsgd2FpdCBmb3IgaXQKLSBGaXggYSBzdXNwZW5kL3Jlc3VtZSBjcmFzaAAtIERvbid0IGFzayBmb3Igd2lyZWxlc3Mga2V5cyB3aGVuIHRoZSBkcml2ZXIgc2VuZHMgZGlzY29ubmVjdCBldmVudHMgZHVyaW5nCglhc3NvY2lhdGlvbjsgd2FpdCB1bnRpbCB0aGUgZW50aXJlIGFzc29jYXRpb24gdGltZXMgb3V0Ci0gUmVwbGFjZSBkaXNwYXRjaGVyIGRhZW1vbiB3aXRoIEQtQnVzIGFjdGl2YXRlZCBjYWxsb3V0Ci0gRml4IHBhcnNpbmcgb2YgRE5TMiBhbmQgRE5TMyBpZmNmZyBmaWxlIGl0ZW1zCi0gRXhlY3V0ZSBkaXNwYXRjaGVyIHNjcmlwdHMgaW4gYWxwaGFiZXRpY2FsIG9yZGVyCi0gQmUgYWN0aXZlIGF0IHJ1bmxldmVsIDIKLSBIb29rIHVwIE1BQyBhZGRyZXNzIHdpZGdldHMgZm9yIHdpcmVkICYgd2lyZWxlc3M7IGFuZCBCU1NJRCB3aWRnZXQgZm9yIHdpcmVsZXNzCi0gUHJlLXBvcHVsYXRlIGFub255bW91cyBpZGVudGl0eSBhbmQgcGhhc2UyIHdpZGdldHMgY29ycmVjdGx5Ci0gQ2xlYXIgb3V0IHVudXNlZCBjb25uZWN0aW9uIGtleXMgZnJvbSBHQ29uZgAtIERvbid0IHNlbGVjdCBkZXZpY2VzIHdpdGhvdXQgYSBkZWZhdWx0IGdhdGV3YXkgYXMgdGhlIGRlZmF1bHQgcm91dGUgKHJoICM0MzczMzgpCi0gRmlsbCBpbiBicm9hZGNhc3QgYWRkcmVzcyBpZiBub3Qgc3BlY2lmaWVkIChyaCAjNDQzNDc0KQotIFJlc3BlY3QgbWFudWFsIFZQTiBJUHY0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucwotIFNob3cgQ29ubmVjdGlvbiBJbmZvcm1hdGlvbiBmb3IgdGhlIGRldmljZSB3aXRoIHRoZSBkZWZhdWx0IHJvdXRlIG9ubHkALSBBZGQgZGJ1cy1nbGliLWRldmVsIEJ1aWxkUmVxdWlyZXMgZm9yIE5ldHdvcmtNYW5hZ2VyLWdsaWItZGV2ZWwgKHJoICM0NDI5NzgpCi0gQWRkIFBQUCBzZXR0aW5ncyBwYWdlIHRvIGNvbm5lY3Rpb24gZWRpdG9yCi0gRml4IGEgZmV3IGNyYXNoZXMgd2l0aCBQUFBvRQotIEZpeCBhY3RpdmUgY29ubmVjdGlvbiBzdGF0ZSBjaGFuZ2VzIHRoYXQgY29uZnVzZWQgY2xpZW50cwAtIEZpeCBidWlsZCBpbiBwcHBkLXBsdWdpbgAtIFBQUG9FIGF1dGhlbnRpY2F0aW9uIGZpeGVzCi0gTW9yZSByb2J1c3QgaGFuZGluZyBvZiBtb2JpbGUgYnJvYWRiYW5kIGRldmljZSBjb21tdW5pY2F0aW9ucwAtIEhvbm9yIG9wdGlvbnMgZnJvbSAvZXRjL3N5c2NvbmZpZy9uZXR3b3JrIGZvciBibG9ja2luZyB1bnRpbCBuZXR3b3JrIGlzIHVwAC0gVHVybiBvbiBBZGQvRWRpdCBpbiB0aGUgY29ubmVjdGlvbiBlZGl0b3IKLSBEb24ndCBmbHVzaCBvciBjaGFuZ2UgSVB2NiBhZGRyZXNzZXMgb3Igcm91dGVzCi0gRW5oYW5jZSBubS1vbmxpbmUgdG9vbAotIFNvbWUgc2VyaWFsIGNvbW11bmljYXRpb24gZml4ZXMgZm9yIG1vYmlsZSBicm9hZGJhbmQALSBGaXggaXNzdWVzIHdpdGggVlBOIHBhc3N3b3JkcyBub3QgZ2V0dGluZyBmb3VuZAAtIEZpeCBidWlsZHMgZHVlIHRvIGdsaWIyIGJyZWFrYWdlIG9mIEdTdGF0aWNNdXRleCB3aXRoIGdjYyA0LjMALSBGaXggV0VQIGtleSBpbmRleCBoYW5kbGluZyBpbiBVSQotIEZpeCBoYW5kbGluZyBvZiBOTV9DT05UUk9MTEVEIGluIGlmY2ZnIGZpbGVzCi0gU2hvdyBkZXZpY2UgbWFuYWdlZCBzdGF0ZSBpbiBhcHBsZXQgbWVudQotIFNob3cgd2lyZWxlc3MgZW5hYmxlZCBzdGF0ZSBpbiBhcHBsZXQgbWVudQotIEJldHRlciBoYW5kbGluZyBvZiBkZWZhdWx0IERIQ1AgY29ubmVjdGlvbnMgZm9yIHdpcmVkIGRldmljZXMKLSBGaXggbG9hZGluZyBvZiBjb25uZWN0aW9uIGVkaXRvciBvbiBLREUgKHJoICM0MzUzNDQpAC0gSG9ub3IgTUFDIGFkZHJlc3MgbG9ja2luZyBmb3Igd2lyZWQgJiB3aXJlbGVzcyBkZXZpY2VzAC0gU2hvdyBWUE4gZmFpbHVyZXMKLSBTdXBwb3J0IFN0YXRpYyBXRVAga2V5IGluZGV4ZXMKLSBGaXggcGFyc2luZyBvZiBXRVAga2V5cyBmcm9tIGlmY2ZnIGZpbGVzCi0gUHJlLWZpbGwgd2lyZWxlc3Mgc2VjdXJpdHkgVUkgYml0cyBpbiBjb25uZWN0aW9uIGVkaXRvciBhbmQgYXBwbGV0AC0gR3JhYiBzeXN0ZW0gc2V0dGluZ3MgZnJvbSAvZXRjL3N5c2NvbmZpZy9uZXR3b3JrLXNjcmlwdHMsIG5vdCBmcm9tIHByb2ZpbGVzAC0gRml4IGNyYXNoZXMgd2hlbiByZXR1cm5pbmcgVlBOIHNlY3JldHMgZnJvbSB0aGUgYXBwbGV0IHRvIE5NAC0gRml4IGNyYXNoZXMgb24gc3VzcGVuZC9yZXN1bWUgYW5kIGV4aXQgKHJoICM0Mzc0MjYpCi0gRW5zdXJlIHRoZXJlJ3MgYWx3YXlzIGFuIG9wdGlvbiB0byBjaG9zZSB0aGUgd2lyZWQgZGV2aWNlCi0gTmV2ZXIgc2V0IGRlZmF1bHQgcm91dGUgdmlhIGFuIElQdjQgbGluay1sb2NhbCBhZGRyZXNzZWQgZGV2aWNlIChyaCAjNDM3MzM4KQAtIEZpeCBESENQIHJlYmluZCBiZWhhdmlvcgotIFByZWxpbWluYXJ5IFBQUG9FIHN1cHBvcnQALSBGaXggZ25vbWUtaWNvbi10aGVtZSBSZXF1aXJlcywgc2hvdWxkIGJlIG9uIGdub21lIHN1YnBhY2thZ2UALSBIb25vciBESENQIHJlYmluZHMKLSBNdWx0aXBsZSBhY3RpdmUgZGV2aWNlIHN1cHBvcnQKLSBCZXR0ZXIgZXJyb3IgaGFuZGxpbmcgb2YgbW9iaWxlIGJyb2FkYmFuZCBjb25uZWN0aW9uIGZhaWx1cmVzCi0gQWxsb3cgdXNlIG9mIGludGVyZmFjZS1zcGVjaWZpYyBkaGNsaWVudCBjb25maWcgZmlsZXMKLSBSZWNvZ25pemUgc3lzdGVtIHNldHRpbmdzIHdoaWNoIGhhdmUgbm8gVFlQRSBpdGVtAC0gRml4IGNyYXNoIG9mIG5tLXN5c3RlbS1zZXR0aW5ncyBvbiBtYWxmb3JtZWQgaWZjZmcgZmlsZXMgKHJoICM0MzQ5MTkpCi0gUmVxdWlyZSBnbm9tZS1pY29uLXRoZW1lIHRvIHBpY2sgdXAgbG9jay5wbmcgKHJoICM0MzUzNDQpCi0gRml4IGFwcGxldCBzZWdmYXVsdCBhZnRlciBjb25uZWN0aW9uIHJlbW92YWwgdmlhIGNvbm5lY3Rpb24gZWRpdG9yIG9yIEdDb25mAC0gRG9uJ3QgY3JlYXRlIG11bHRpcGxlIGNvbm5lY3Rpb25zIGZvciBoaWRkZW4gYWNjZXNzIHBvaW50cwotIEZpeCBzY2FubmluZyBiZWhhdmlvcgAtIFJld29yayBjb25uZWN0aW9uIGVkaXRvciBjb25uZWN0aW9uIGxpc3QALSBCZXR0ZXIgaGFuZGxpbmcgb2YgY2hhbmdlcyBpbiB0aGUgcHJvZmlsZSBkaXJlY3RvcnkgYnkgdGhlIHN5c3RlbSBzZXR0aW5ncwoJc2VyaXZjZQAtIEVuYWJsZSBzeXN0ZW0gc2V0dGluZ3Mgc2VydmljZQotIEFsbG93IGV4cGxpY2l0IGRpc2Nvbm5lY3Rpb24gb2YgbW9iaWxlIGJyb2FkYmFuZCBkZXZpY2VzCi0gRml4IGFwcGxldCBtZW1vcnkgbGVha3MgKHJoICM0MzAxNzgpCi0gQXBwbGV0IENvbm5lY3Rpb24gSW5mb3JtYXRpb24gZGlhbG9nIHR3ZWFrcyAoZ25vbWUub3JnICM1MDU4OTkpCi0gRmlsdGVyIGlucHV0IGNoYXJhY3RlcnMgdG8gcGFzc3BocmFzZS9rZXkgZW50cnkgKGdub21lLm9yZyAjMzMyOTUxKQotIEZpeCBhcHBsZXQgZm9jdXMgc3RlYWxpbmcgcHJldmVudGlvbiBiZWhhdmlvcgAtIEFkZCBDRE1BIG1vYmlsZSBicm9hZGJhbmQgc3VwcG9ydCAoaWYgc3VwcG9ydGVkIGJ5IEhBTCkKLSBSZXdvcmsgYXBwbGV0IGNvbm5lY3Rpb24gYW5kIGljb24gaGFuZGxpbmcKLSBFbmFibGUgY29ubmVjdGlvbiBlZGl0b3IgKG9ubHkgZm9yIGRlbGV0aW5nIGNvbm5lY3Rpb25zKQAtIEZpeCBjcmFzaCB3aGVuIGFjdGl2YXRpbmcgYSBtb2JpbGUgYnJvYWRiYW5kIGNvbm5lY3Rpb24KLSBCZXR0ZXIgaGFuZGxpbmcgb2Ygbm9uLVNTSUQtYnJvYWRjYXN0aW5nIEFQcyBvbiBrZXJuZWxzIHRoYXQgc3VwcG9ydCBpdAogICAgKGdub21lLm9yZyAjNDY0MjE1KSAocmggIzM3Mzg0MSkKLSBIb25vciBESENQLXNlcnZlciBwcm92aWRlZCBNVFUgaWYgcHJlc2VudCAoZ25vbWUub3JnICMzMzI5NTMpCi0gVXNlIHByZXZpb3VzIEROUyBzZXR0aW5ncyBpZiB0aGUgVlBOIGNvbmNlbnRyYXRvciBkb2Vzbid0IHByb3ZpZGUgYW55CiAgICAoZ25vbWUub3JnICMzNDY4MzMpAC0gRml4IFdQQSBwYXNzcGhyYXNlIGhhc2hpbmcgb24gYmlnIGVuZGlhbiAoUFBDLCBTcGFyYywgZXRjKSAocmggIzQyNjIzMykALSBGaXhlcyB0byB3b3JrIGJldHRlciB3aXRoIG5ldyBsaWJubCAocmggIzQwMTc2MSkALSBGaXggV1BBL1dQQTIgRW50ZXJwcmlzZSBQaGFzZTIgY29ubmVjdGlvbnMgKHJoICMzODg0NzEpAC0gRml4IGFwcGxldCBjb25uZWN0aW9uIGNvbXBhcmlzb24gd2hpY2ggZmFpbGVkIHRvIHNlbmQgY29ubmVjdGlvbiB1cGRhdGVkCiAgICBzaWduYWxzIHRvIE5NIGluIHNvbWUgY2FzZXMKLSBNYWtlIFZQTiBjb25uZWN0aW9uIGFwcGxldCBtb3JlIHJvYnVzdCBhZ2FpbnN0IHBsdWdpbiBmYWlsdXJlcwAtIDY0LWJpdCAtV2FsbCBjb21waWxlIGZpeGVzAC0gRml4IGFwcGxldCBjcmFzaCB3aGVuIGNob29zaW5nIHRvIGlnbm9yZSB0aGUgQ0EgY2VydGlmaWNhdGUgKHJoICMzNTkwMDEpCi0gRml4IGFwcGxldCBjcmFzaCB3aGVuIGVkaXRpbmcgVlBOIHByb3BlcnRpZXMgYW5kIFZQTiBjb25uZWN0aW9uIGZhaWx1cmVzIChyaCAjNDA5MzUxKQotIEFkZCBmaWxlIGZpbHRlciBuYW1lIGluIGNlcnRpZmljYXRlIGZpbGUgcGlja2VyIGRpYWxvZyAocmggIzQxMDIwMSkKLSBObyBsb25nZXIgc3RhcnQgbmFtZWQgd2hlbiBzdGFydGluZyBOTSAocmggIzM4MTU3MSkALSBGaXggdXBncmFkaW5nIGZyb20gYW4gZWFybGllciByYXdoaWRlIHNuYXAALSBGaXggZGV2aWNlIGRlc2NyaXB0aW9ucyBzaG93biBpbiBhcHBsZXQgbWVudQAtIEZpeCBjcmFzaCB3aGVuIGRlYWN0aXZhdGluZyBWUE4gY29ubmVjdGlvbnMALSBGaXggY3Jhc2ggYW5kIHBvdGVudGlhbCBpbmZpbml0ZSBuYWcgZGlhbG9nIGxvb3Agd2hlbiBpZ25vcmluZyBDQSBjZXJ0aWZpY2F0ZXMALSBGaXggY3Jhc2ggd2hlbiBpZ25vcmluZyBDQSBjZXJ0aWZpY2F0ZSBmb3IgRUFQLVRMUywgRUFQLVRUTFMsIGFuZCBFQVAtUEVBUAAtIEZpeCBjb25uZWN0aW9ucyB3aGVuIHBpY2tpbmcgYSBXUEEgRW50ZXJwcmlzZSBBUCBmcm9tIHRoZSBtZW51Ci0gRml4IGlzc3VlIHdoZXJlIGFwcGxldCB3b3VsZCBwcm92aWRlIG11bHRpcGxlIHNhbWUgY29ubmVjdGlvbnMgdG8gTk0ALSBBZGQgc3VwcG9ydCBmb3IgRUFQLVBFQVAgKHJoICMzNjIyNTEpCi0gRml4IEVBUC1UTFMgcHJpdmF0ZSBrZXkgaGFuZGxpbmcALSBDbGFyaWZ5IG5hbWluZyBvZiBXUEEgJiBXUEEyIFBlcnNvbmFsIGVuY3J5cHRpb24gb3B0aW9ucyAocmggIzM3NDg2MSwgcmggIzM3MzgzMSkKLSBEb24ndCByZXF1aXJlIGEgQ0EgY2VydGlmaWNhdGUgZm9yIGFwcGxpY2FibGUgRUFQIG1ldGhvZHMgKHJoICMzNTkwMDEpCi0gRml4IGNlcnRpZmljYXRlIGFuZCBwcml2YXRlIGtleSBoYW5kbGluZyBmb3IgRUFQLVRUTFMgYW5kIEVBUC1UTFMgKHJoICMzMjMzNzEpCi0gRml4IGFwcGxldCBjcmFzaCB3aXRoIFVTQiBkZXZpY2VzIChyaCAjMzM3MTkxKQotIFN1cHBvcnQgdXBncmFkZXMgZnJvbSBOTSAwLjYueCBHQ29uZiBzZXR0aW5ncwAtIEZpeCBhcHBsZXQgY3Jhc2ggd2l0aCBVU0IgZGV2aWNlcyB0aGF0IGRvbid0IGFkdmVydGlzZSBhIHByb2R1Y3Qgb3IgdmVuZG9yCiAgICAocmggIzMzNzE5MSkALSBGaXggY3Jhc2ggd2hlbiBnZXR0aW5nIFdQQSBzZWNyZXRzIChyaCAjMzU1MDQxKQAtIEJyaW5nIHVwIGV0aGVybmV0IGRldmljZXMgYnkgZGVmYXVsdCBpZiBubyBjb25uZWN0aW9ucyBhcmUgZGVmaW5lZCAocmggIzMzOTIwMSkKLSBGaXggY3Jhc2ggd2hlbiBzd2l0Y2hpbmcgbmV0d29ya3Mgb3IgYnJpbmdpbmcgdXAgc2VjcmV0cyBkaWFsb2cgKHJoICMzNTMwOTEpCi0gRml4IGNyYXNoIHdoZW4gZWRpdGluZyBWUE4gY29ubmVjdGlvbiBwcm9wZXJ0aWVzIGEgc2Vjb25kIHRpbWUKLSBGaXggY3Jhc2ggd2hlbiBjYW5jZWxsaW5nIHRoZSBzZWNyZXRzIGRpYWxvZyBpZiBhbm90aGVyIGNvbm5lY3Rpb24gd2FzCiAgICBhY3RpdmF0ZWQgaW4gdGhlIG1lYW4gdGltZQotIEZpeCBkaXNlbWJvZGllZCBub3RpZmljYXRpb24gYnViYmxlcyAocmggIzMzMzM5MSkALSBIYW5kbGUgUEVNIGNlcnRpZmljYXRlcwotIEhpZGUgV1BBLVBTSyBUeXBlIGNvbWJvIHNpbmNlIGl0J3MgYXMgeWV0IHVudXNlZAotIEZpeCBhcHBsZXQgY3Jhc2ggd2hlbiBBUCBzZWN1cml0eSBvcHRpb25zIGNoYW5nZWQgYW5kIG9sZCBzZWNyZXRzIGFyZSBzdGlsbAogICAgaW4gdGhlIGtleXJpbmcKLSBGaXggYXBwbGV0IGNyYXNoIGNvbm5lY3RpbmcgdG8gdW5lbmNyeXB0ZWQgQVBzIHZpYSB0aGUgb3RoZXIgbmV0d29yayBkaWFsb2cALSBGaXggV1BBIEVudGVycHJpc2UgY29ubmVjdGlvbnMgdGhhdCB1c2UgY2VydGlmaWNhdGVzCi0gQmV0dGVyIGRpc3BsYXkgb2YgU1NJRHMgaW4gdGhlIG1lbnUALSBGaXggZ2V0dGluZyBjdXJyZW50IGFjY2VzcyBwb2ludAotIEZpeCBXUEEgRW50ZXJwcmlzZSBjb25uZWN0aW9ucwotIFdpcmVsZXNzIGRpYWxvZyBub3cgZGVmYXVsdHMgdG8gc2Vuc2libGUgY2hvaWNlcyBiYXNlZCBvbiB0aGUgY29ubmVjdGlvbgotIFRlbGwgbnNjZCB0byByZXN0YXJ0IGlmIG5lZWRlZCwgZG9uJ3Qgc2lsZW50bHkga2lsbCBpdAAtIFN1cHByZXNzIGV4Y2Vzc2l2ZSBHQ29uZiB1cGRhdGVzIHdoaWNoIHNvbWV0aW1lcyBjYXVzZWQgc2VjcmV0cyB0byBiZSBjbGVhcmVkCiAgICBhdCB0aGUgd3JvbmcgdGltZXMsIGNhdXNpbmcgY29ubmVjdGlvbnMgdG8gZmFpbAotIFZhcmlvdXMgRUFQIGFuZCBMRUFQIHJlbGF0ZWQgZml4ZXMALSBNYWtlIFdQQS1FQVAgYW5kIER5bmFtaWMgV0VQIG9wdGlvbnMgY29ubmVjdCBzdWNjZXNzZnVsbHkKLSBTdGF0aWMgSVBzIGFyZSBub3cgaGFuZGxlZCBjb3JyZWN0bHkgaW4gTk0gaXRzZWxmAC0gQWRkIER5bmFtaWMgV0VQIGFzIGEgc3VwcG9ydGVkIGF1dGhlbnRpY2F0aW9uL3NlY3VyaXR5IG9wdGlvbgAtIFJlLWVuYWJsZSAiQ29ubmVjdCB0byBvdGhlciBuZXR3b3JrIgotIFN3aXRjaCB0byBuZXcgR1VJIGJpdHMgZm9yIHdpcmVsZXNzIHNlY3VyaXR5IGNvbmZpZyBhbmQgcGFzc3dvcmQgZW50cnkALSBBZGQgcmZraWxsIGZ1bmN0aW9uYWxpdHkKLSBGaXggYXBwbGV0IGNyYXNoIHdoZW4gY2hvb3Npbmcgd2lyZWQgbmV0d29ya3MgZnJvbSB0aGUgbWVudQAtIEZpeCBzZWdmYXVsdCB3aXRoIGRlZmVycmVkIGNvbm5lY3Rpb25zCi0gRml4IGRlZmF1bHQgdXNlcm5hbWUgd2l0aCB2cG5jIFZQTiBwbHVnaW4KLSBIaWRkZW4gU1NJRCBmaXhlcwAtIEZpeCBtZXJnaW5nIG9mIG5vbi1TU0lELWJyb2FkY2FzdGluZyBBUHMgaW50byBhIGRldmljZSdzIHNjYW4gbGlzdAotIFNwZWVkIHVwIG9wZW5pbmcgb2YgdGhlIGFwcGxldCBtZW51AC0gTmV3IHNuYXBzaG90CgktIEFkZCB0aW1lc3RhbXBzIHRvIG5ldHdvcmtzIHRvIGNvbm5lY3QgdG8gbGFzdCB1c2VkIHdpcmVsZXNzIG5ldHdvcmsKCS0gVHVybiBhdXRvY29ubmVjdCBvbiBpbiB0aGUgYXBwbGV0CgktIEhpZGRlbiBTU0lEIHN1cHBvcnQKCS0gSW52YWxpZGF0ZSBmYWlsZWQgb3IgY2FuY2VsbGVkIGNvbm5lY3Rpb25zIGFnYWluCgktIEZpeCBpc3N1ZXMgd2l0aCByZWFjdGl2YXRpb24gb2YgdGhlIHNhbWUgZGV2aWNlCgktIEhhbmRsZSBjb25uZWN0aW9uIHVwZGF0ZXMgaW4gdGhlIGFwcGxldCAoZXguIGZpbmQgbmV3IFZQTiBjb25uZWN0aW9ucykKCS0gRml4IHZlcnRpY2FsIHNpemluZyBvZiBtZW51IGl0ZW1zCgktIEZpeCBBUCBsaXN0IG9uIHdpcmVsZXNzIGRldmljZXMgb3RoZXIgdGhhbiB0aGUgZmlyc3QgZGV2aWNlIGluIHRoZSBhcHBsZXQKCS0gRml4IG1hdGNoaW5nIG9mIGN1cnJlbnQgQVAgd2l0aCB0aGUgcmlnaHQgbWVudSBpdGVtAC0gTmV3IHNuYXBzaG90CgktIEFkZCBXUEEgcGFzc3BocmFzZSBzdXBwb3J0IHRvIHBhc3N3b3JkIGRpYWxvZwoJLSBBcHBsZXQgbm93IHJlZmxlY3RzIGFjdHVhbCBWUE4gYmVoYXZpb3Igb2Ygb25lIGFjdGl2ZSBjb25uZWN0aW9uCgktIEFwcGxldCBub3cgbm90aWNlcyBWUE4gYWN0aXZlIGNvbm5lY3Rpb25zIG9uIHN0YXJ0dXAKCS0gRml4IGNvbm5lY3Rpb25zIHdpdGggc29tZSBXUEEgYW5kIFdFUCBrZXlzAC0gTmV3IHNuYXBzaG90CgktIFZQTiBzdXBwb3J0IChvbmx5IHZwbmMgcGx1Z2luIHBvcnRlZCBhdCB0aGlzIHRpbWUpAC0gTmV3IHNuYXBzaG90CgktIE1ha2Ugd2lyZWQgZGV2aWNlIGNhcnJpZXIgc3RhdGUgd29yayBpbiB0aGUgYXBwbGV0CgktIEZpeCBoYW5kbGluZyBvZiBlcnJvcnMgd2l0aCB1bmVuY3J5cHRlZCBBUHMKCS0gRml4ICJmcm96ZW4iIGFwcGxldCBpY29uIGJ5IHJlcG9ydGluZyBOTSBzdGF0ZSBiZXR0ZXIKCS0gRml4IG91dHB1dCBvZiBBUCBmcmVxdWVuY3kgaW4gbm0tdG9vbAAtIE5ldyBzbmFwc2hvdAoJLSBGaXggYXBwbGV0IGljb24gc2l6aW5nIG9uIHN0YXJ0IChtY2xhc2VuKQoJLSBGaXggbm0tdG9vbCBpbnN0YWxsYXRpb24gKG1jbGFzZW4pCgktIEZpeCAnc3RhdGUnIG1ldGhvZCBjYWxsIHJldHVybiAoIzMwMzI3MSkKCS0gRml4IDQwLWJpdCBXRVAga2V5cyAoYWdhaW4pCgktIEZpeCBsb29wIHdoZW4gc2VjcmV0cyB3ZXJlIHdyb25nL2ludmFsaWQKCS0gRml4IGFwcGxldCBjcmFzaCB3aGVuIGNsaWNraW5nIENhbmNlbCBpbiB0aGUgcGFzc3dvcmQgZGlhbG9nCgktIEVuc3VyZSBOTSBkb2Vzbid0IGdldCBzdHVjayB3YWl0aW5nIGZvciB0aGUgc3VwcGxpY2FudCB0byByZS1hcHBlYXIKCQlpZiBpdCBjcmFzaGVzIG9yIGdvZXMgYXdheQoJLSBNYWtlIFZQTiBwcm9wZXJ0aWVzIGFwcGxldCB3b3JrIGFnYWluCgktIEluY3JlYXNlIHRpbWVvdXQgZm9yIG5ldHdvcmsgcGFzc3dvcmQgZW50cnkALSBOZXcgc25hcHNob3QgKGZpeCB1bmVuY3J5cHRlZCAmIDQwIGJpdCBXRVApAC0gTmV3IHNuYXBzaG90AC0gTmV3IHNuYXBzaG90AC0gTmV3IFNWTiBzbmFwc2hvdCBvZiAwLjcgdGhhdCBzdWNrcyBsZXNzAC0gVXBkYXRlIHRvIFNWTiBzbmFwc2hvdCBvZiAwLjcALSBVcGRhdGUgdGhlIGxpY2Vuc2UgdGFnAC0gT3duIC9ldGMvTmV0d29ya01hbmFnZXIvZGlzcGF0Y2hlci5kIGFuZCAvZXRjL05ldHdvcmtNYW5hZ2VyL1ZQTiAoIzIzNDAwNCkALSBGaXggV2lyZWxlc3MgRW5hYmxlZCBjaGVja2JveCB3aGVuIG5vIGtpbGxzd2l0Y2hlcyBhcmUgcHJlc2VudAAtIFVwZGF0ZSB0byBzdGFibGUgYnJhbmNoIHNuYXBzaG90OgogICAgLSBNb3JlIGZpeGVzIGZvciBldGhlcm5ldCBsaW5rIGRldGVjdGlvbiAoZ25vbWUgIzM1NDU2NSwgcmggIzE5NDEyNCkKICAgIC0gU3VwcG9ydCBmb3IgSEFMLWRldGVjdGVkIHJma2lsbCBzd2l0Y2hlcwAtIEZpeCBhcHBsZXQgY3Jhc2ggb24gNjQtYml0IHBsYXRmb3JtcyB3aGVuIGNob29zaW5nCiAgICAiQ29ubmVjdCB0byBvdGhlciB3aXJlbGVzcyBuZXR3b3JrLi4uIiAoZ25vbWUub3JnICM0MzUwMzYpCi0gQWRkIGRlYnVnIG91dHB1dCBmb3IgZXRoZXJuZXQgZGV2aWNlIGxpbmsgY2hhbmdlcwAtIEZpeCBldGhlcm5ldCBsaW5rIGRldGVjdGlvbiAoZ25vbWUgIzM1NDU2NSwgcmggIzE5NDEyNCkKLSBGaXggcGVycGV0dWFsIGNyZWRlbnRpYWxzIHJlcXVlc3Qgd2l0aCBwcml2YXRlIGtleSBwYXNzd29yZHMgaW4gdGhlIGFwcGxldAotIFNsZWVwIGEgYml0IGJlZm9yZSBhY3RpdmF0aW5nIHdpcmVsZXNzIGNhcmRzIHRvIHdvcmsgYXJvdW5kIGRyaXZlciBidWdzAC0gRG9uJ3Qgc3Bhd24gd3BhX3N1cHBsaWNhbnQgd2l0aCAtbwAtIEZpeCByZXF1aXJlcyBtYWNybyAoMjM3ODA2KQAtIFVwZGF0ZSB0byAwLjYuNSBmaW5hbAotIERvbid0IGxvc2Ugc2Nhbm5lZCBzZWN1cml0eSBpbmZvcm1hdGlvbgAtIFVwZGF0ZSBmcm9tIHRydW5rCgkqIFVwZGF0ZWQgdHJhbnNsYXRpb25zCgkqIENsZWFuZWQtdXAgVlBOIHByb3BlcnRpZXMgZGlhbG9ncwoJKiBGaXggNjQtYml0IGtlcm5lbCBsZWFrYWdlIGlzc3VlcyBpbiBXRVhUCgkqIERvbid0IGNhcHR1cmUgYW5kIHJlZGlyZWN0IHdwYV9zdXBwbGljYW50IGxvZyBvdXRwdXQALSBDbG9zZSBwcml2YXRlIEQtQnVzIGNvbm5lY3Rpb25zLiAoIzIzMjY5MSkALSBGaXggYSBkaXJlY3Rvcnkgb3duZXJzaGlwIGlzc3VlLiAgKCMyMzM3NjMpAC0gVXBkYXRlIHRvIHByZS0wLjYuNSBzbmFwc2hvdAAtIEd1YXJkIGFnYWluc3QgRC1CdXMgTGltaXRFeGNlZWRlZCBtZXNzYWdlcwAtIE1vdmUgLnNvIGZpbGUgdG8gLWRldmVsIHBhY2thZ2UALSBPd24gdGhlIC9ldGMvTmV0d29ya01hbmFnZXIvZGlzcGF0Y2hlci5kIGRpcmVjdG9yeQotIFJlcXVpcmUgcGtnY29uZmlnIGZvciB0aGUgLWRldmVsIHBhY2thZ2VzCi0gRml4IGNvbXBpbGF0aW9uIHdpdGggZGJ1cyAxLjAALSBVcGRhdGUgdG8gYSBzdGFibGUgYnJhbmNoIHNuYXBzaG90CiAgICAtIEdub21lIGFwcGxldCB0aW1lb3V0L3JlZHJhdyBzdXBwcmVzc2lvbiB3aGVuIGlkbGUKICAgIC0gQmFja3BvcnQgb2YgTEVBUCBwYXRjaCBmcm9tIEhFQUQgKGZyb20gVGhpYWdvIEJhdWVybWFubikKICAgIC0gQmFja3BvcnQgb2YgYXN5bmNocm9ub3VzIHNjYW5uaW5nIHBhdGNoIGZyb20gSEVBRAogICAgLSBNYWtlIHJlbmFtaW5nIG9mIFZQTiBjb25uZWN0aW9ucyB3b3JrIChmcm9tIFRhbWJldCBJbmdvKQogICAgLSBEaWFsIGRvd24gd3BhX3N1cHBsaWNhbnQgZGVidWcgc3BldwogICAgLSBDbGVhbnVwIG9mIGtleS9wYXNzcGhyYXNlIHJlcXVlc3Qgc2NlbmFyaW9zIChmcm9tIFZhbGVudGluZSBTaW5pdHN5bikKICAgIC0gU2h1dCBkb3duIFZQTiBjb25uZWN0aW9ucyBvbiBsb2dvdXQgKGZyb20gUm9iZXJ0IExvdmUpCiAgICAtIEZpeCBXUEEgcGFzc3BocmFzZSBoYXNoaW5nIG9uIFBQQwAtIE93biAvdXNyL3NoYXJlL05ldHdvcmtNYW5hZ2VyIGFuZCAvdXNyL2luY2x1ZGUvTmV0d29ya01hbmFnZXIALSBEb24ndCB3YWtlIHVwIHRvIHJlZHJhdyBpZiBOTSBpcyBpbmFjdGl2ZSAoIzIwNDg1MCkALSBhZGQgZXBvY2hzIGluIHJlcXVpcmVtZW50cwAtIEZpeCBGQy01IGJ1aWxkcmVxcwAtIFJldmVydCBGQzYgdG8gbGF0ZXN0IHN0YWJsZSBOTQotIFVwZGF0ZSB0byBzdGFibGUgc25hcHNob3QKLSBSZW1vdmUgYmluZC9jYWNoaW5nLW5hbWVzZXJ2ZXIgaGFyZCByZXF1aXJlbWVudAAtIEJ1aWxkUmVxdWlyZSB3aXJlbGVzcy10b29scy1kZXZlbCBhbmQgcGVybC1YTUwtUGFyc2VyCi0gVXBkYXRlIHRoZSBCdWlsZFJvb3QgdGFnAC0gYWRkIHBhdGNoIHRvIG1ha2UgbmV0d29ya21hbmFnZXIgbGVzcyB2ZXJib3NlIChidWcgMjAyODMyKQAtIGFjdHVhbGx5IG1ha2UgdGhlIHBhdGNoIGluIDAuNy4wLTAuY3ZzMjAwNjA1MjkuNCBhcHBseQAtIERvbid0IGV2ZXIgZWxlY3QgaW5hY3RpdmUgd2lyZWQgZGV2aWNlcyAoYnVnIDE5NDEyNCkuAC0gQWRkIHBhdGNoIHRvIGZpeCBkZXByZWNhdGVkIGRidXMgZnVuY3Rpb25zAC0gQWRkIEJSIGZvciBkYnVzLWdsaWItZGV2ZWwALSByZWJ1aWxkAC0gVXBkYXRlIHRvIGxhdGVzdCBDVlMKCW8gR25vbWUub3JnICMzMzM0MjA6IGRpYWxvZyBkbyBub3QgaGF2ZSB3aW5kb3cgaWNvbnMKCW8gR25vbWUub3JnICMzMzY5MTM6IEhJRyB0d2Vha3MgZm9yIHZwbiBwcm9wZXJ0aWVzIHBhZ2VzCglvIEdub21lLm9yZyAjMzM2ODQ2OiBISUcgdHdlYWtzIGZvciBubS12cG4tcHJvcGVydGllcwoJbyBHbm9tZS5vcmcgIzMzNjg0Nzogc29tZSBidWdzIGluIG5tLXZwbi1wcm9wZXJ0aWVzIGFyZ3MgcGFyc2luZwoJbyBHbm9tZS5vcmcgIzM0MTMwNjogbm0tdnBuLXByb3BlcnRpZXMgY3Jhc2hlcyBvbiBzdGFydHVwCglvIEdub21lLm9yZyAjMzQxMjYzOiBWZXJzaW9uIDAuNi4yLTB1YnVudHU1IGNyYXNoZXMgb24gbm1fZGV2aWNlXzgwMl8xMV93aXJlbGVzc19nZXRfdHlwZQoJbyBHbm9tZS5vcmcgIzM0MTI5NzogZGlzcGxheXMgcmVwZWF0ZWQga2V5cmluZyBkaWFsb2dzIG9uIHJlc3VtZSBmcm9tIHN1c3BlbmQKCW8gR25vbWUub3JnICMzNDI0MDA6IEJ1aWxkaW5nIGxpYm5tLXV0aWwgLS13aXRob3V0LWdjcnlwdCByZXN1bHRzIGluIGxpbmtlciBlcnJvcgoJbyBHbm9tZS5vcmcgIzM0MjM5ODogRWxlbWluYXRlIEdub21lIGRlcGVuZGVuY3kgZm9yIE5ldHdvcmtNYW5hZ2VyCglvIEdub21lLm9yZyAjMzM2NTMyOiBkZWNsYXJhdGlvbiBvZiAnbGluaycgc2hhZG93cyBhIGdsb2JhbCBkZWNsYXJhdGlvbgotIFNwZWNmaWxlIGZpeGVzICgjcmgxODc0ODkjKQAtIFVwZGF0ZSB0byBsYXRlc3QgQ1ZTCi0gRHJvcCBzcGVjaWFsLWNhc2UtbWFkd2lmaS5wYXRjaCwgc2luY2UgV0VYVCBjb2RlIGlzIGluIG1hZHdpZmktbmcgdHJ1bmsgbm93AC0gdXNlIHRoZSBzYW1lIDAuNi4yIHRhcmJhbGwgYXMgRkM1LCBzbyB3ZSBoYXZlIHRoZSBzYW1lIFZQTiBpbnRlcmZhY2UKICAoZGlkIGhlIGZpcmUgdGVuIGFyZ3MsIG9yIG9ubHkgbmluZT8pAC0gdXNlIHRoZSBoYWwgZGV2aWNlIHR5cGUgaW5zdGVhZCBvZiBwb2tpbmcgdmlhIGlvY3RsIHNvIHRoYXQgd2lyZWxlc3MKICBkZXZpY2VzIGFyZSBwcm9wZXJseSBkZXRlY3RlZCBldmVuIGlmIHRoZSBraWxsIHN3aXRjaCBoYXMgYmVlbiB1c2VkAC0gVXBkYXRlIHRvIDAuNi4yOgoJKiBGaXggdmFyaW91cyBXUEEtcmVsYXRlZCBidWdzCgkqIENsZWFuIHVwIGxlYWtzCgkqIEluY3JlYXNlZCBESENQIHRpbWVvdXQgdG8gYWNjb3VudCBmb3Igc2xvdyBESENQIHNlcnZlcnMsIG9yIFNUUC1lbmFibGVkCgkJc3dpdGNoZXMKCSogQWxsb3cgYXBwbGV0IHRvIHJlY29ubmVjdCBvbiBkYnVzIHJlc3RhcnRzCgkqIEFkZCAiRHluYW1pYyBXRVAiIHN1cHBvcnQKCSogQWxsb3cgaGlkaW5nIG9mIHBhc3N3b3JkL2tleSBlbnRyeSB0ZXh0CgkqIE1vcmUgcmVzcG9uc2l2ZSBjb25uZWN0aW9uIHN3aXRjaGluZwAtIEZpeCBkZXZpY2UgYnJpbmd1cCBvbiByZXN1bWUALSBEb24ndCBsZXQgd3BhX3N1cHBsaWNhbnQgcGVyZm9ybSBzY2FubmluZyB3aXRoIG5vbi1XUEEgZHJpdmVycwAtIFVwZGF0ZSB0byAwLjYuMCByZWxlYXNlCi0gTW92ZSBhdXRvc3RhcnQgZmlsZSB0byAvdXNyL3NoYXJlL2dub21lL2F1dG9zdGFydAAtIHVwZGF0ZWQgY3ZzIHNuYXBzaG90LiAgc2VlbXMgdG8gbWFrZSBhaXJvIG11Y2ggbGVzcyBuZXVyb3RpYwAtIE1vdmUgdGhlIHVudmVyc2lvbmVkIGxpYm5tX2dsaWIuc28gdG8gdGhlIC1kZXZlbCBwYWNrYWdlAC0gRml4IFZQTi1yZWxhdGVkIGNyYXNoCi0gRml4IGlzc3VlIHdoZXJlIE5NIHdvdWxkIHJlZnVzZSB0byBhY3RpdmF0ZSBhIFZQTiBjb25uZWN0aW9uIG9uY2UgaXQgaGFkIHRpbWVkIG91dAotIExvZyB3cGFfc3VwcGxpY2FudCBvdXRwdXQgZm9yIGJldHRlciBkZWJ1Z2dpbmcALSBUd2VhayB0aHJlZS1zY2FuLXBydW5lLnBhdGNoAC0gRG9uJ3QgcHJ1bmUgbmV0d29ya3MgdW50aWwgdGhleSd2ZSBnb25lIE1JQSBmb3IgdGhyZWUgc2NhbnMsIG5vdCBvbmUuAC0gVXBkYXRlIHNuYXBzaG90LCB3aGljaCBmaXhlcyB1cCB0aGUgbGlibm90aWZ5IHN0dWZmLgAtIE1vdmUgbGlibm90aWZ5IHJlcXVpcmVzIHRvIE5ldHdvcmtNYW5hZ2VyLWdub21lLCBub3QgY29yZSBOTSBwYWNrYWdlAC0gQWRkIEJ1aWxkUmVxdWlyZXM6IGxpYm5sLWRldmVsICgjcmgxNzk0MzgjKQotIEZpeCBsaWJubV9nbGliIHRvIG5vdCBjbG9iYmVyIGFuIGFwcGxpY2F0aW9uJ3MgZXhpc3RpbmcgZGJ1cyBjb25uZWN0aW9uCgkoI3JoMTc3NTQ2IywgZ25vbWUub3JnICMzMjY1NzIpCi0gbGlibm90aWZ5IHN1cHBvcnQKLSBBUCBjb21wYXRpYmlsaXR5IGZpeGVzAC0gTWlub3IgYnVnIGZpeGVzCi0gVXBkYXRlIHRvIFZQTiBkYnVzIEFQSSBmb3IgcGFzc2luZyB1c2VyLWRlZmluZWQgcm91dGVzIHRvIHZwbiBzZXJ2aWNlAC0gUmVidWlsZAAtIHJlYnVpbHQgZm9yIG5ldyBnY2M0LjEgc25hcHNob3QgYW5kIGdsaWJjIGNoYW5nZXMALSBXb3JrYXJvdW5kcyBmb3IgbWFkd2lmaS9BdGhlcm9zIGNhcmRzCi0gRG8gYmV0dGVyIHdpdGggbm9uLVNTSUQtYnJvYWRjYXN0aW5nIGFjY2VzcyBwb2ludHMKLSBGaXggaGFuZ3Mgd2hlbiBhY2Nlc3MgcG9pbnRzIGNoYW5nZSBzZXR0aW5ncwAtIE93biAvdmFyL3J1bi9OZXR3b3JrTWFuYWdlciwgZml4IFNFTGludXggaXNzdWVzAC0gU3dpdGNoIHRvIGF1dG9zdGFydGluZyB0aGUgYXBwbGV0IGluc3RlYWQgb2YgaGF2aW5nIGl0IGJlIHNlc3Npb24tbWFuYWdlZAotIFdvcmsgYmV0dGVyIHdpdGggbm9uLWJyb2FkY2FzdGluZyBhY2Nlc3MgcG9pbnRzCi0gQWRkIG1vcmUgbWFudWZhY3R1cmVyIGRlZmF1bHQgU1NJRHMgdG8gdGhlIGJsYWNrbGlzdAAtIExvbmdlciBhc3NvY2lhdGlvbiB0aW1lb3V0Ci0gRml4IHNvbWUgU0VMaW51eCBpc3N1ZXMKLSBHZW5lcmFsIGJ1ZyBhbmQgY29zbWV0aWMgZml4ZXMALSBTbmFwc2hvdCBmcm9tIENWUwotIFdQQSBTdXBwb3J0ISAgV29vaG9vIQAtIHJlYnVpbHQALSByZWJ1aWxkIGZvciBuZXcgZGJ1cwAtIERvbid0IGtpbGwgdGhlIG5ldHdvcmsgY29ubmVjdGlvbiB3aGVuIHlvdSB1cGdyYWRlIHRoZSBwYWNrYWdlLgAtIFNwbGl0IG91dCB0aGUgLWdsaWIgc3VicGFja2FnZSB0byBoYXZlIGEgLWdsaWItZGV2ZWwgcGFja2FnZSBhcyB3ZWxsCi0gQWRkIGVwb2NoIHRvIHZlcnNpb24gcmVxdWlyZW1lbnRzIGZvciBiaW5kIGFuZCB3aXJlbGVzcy10b29scwotIFVwZGF0ZSBVUkwgb2YgcHJvamVjdAAtIE5ldHdvcmtNYW5hZ2VyIDAuNS4xAC0gTmV0d29ya01hbmFnZXIgMC41LjAALSBGaXggYXV0b21hdGljIHdpcmVsZXNzIGNvbm5lY3Rpb25zCi0gUmVtb3ZlIHVzYWdlIG9mIE5NTG9hZE1vZHVsZXMgY2FsbG91dCwgbm8gbG9uZ2VyIG5lZWRlZAotIFRyeSB0byBmaXggZGVhZGxvY2sgd2hlbiBtZW51IGlzIGRvd24gYW5kIGtleXJpbmcgZGlhbG9nIHBvcHMgdXAALSBVcGRhdGUgdG8gbGF0ZXN0IENWUwoJbyBJbnRlZ3JhdGUgY29ubmVjdGlvbiBwcm9ncmVzcyB3aXRoIGFwcGxldCBpY29uIChDaHJpcyBBaWxsb24pCglvIE1vcmUgaW5mb3JtYXRpb24gaW4gIkNvbm5lY3Rpb24gSW5mb3JtYXRpb24iIGRpYWxvZyAoUm9iZXJ0IExvdmUpCglvIFNob3J0ZW4gdGltZSB0YWtlbiB0byBzbGVlcAoJbyBNYWtlIGFwcGxldCBpY29uIHdpcmVsZXNzIHN0cmVuZ3RoIGxldmVscyBhIGJpdCBtb3JlIHJlYWxpc3RpYwoJbyBUYWxrIHRvIG5hbWVkIHVzaW5nIERCVVMgcmF0aGVyIHRoYW4gc3Bhd25pbmcgb3VyIG93bgoJCS0gWW91IG5lZWQgdG8gYWRkICItRCIgdG8gdGhlIE9QVElPTlMgbGluZSBpbiAvZXRjL3N5c2NvbmZpZy9uYW1lZAoJCS0gWW91IG5lZWQgdG8gc2V0IG5hbWVkIHRvIHN0YXJ0IGFzIGEgc2VydmljZSBvbiBzdGFydHVwAC0gVXBkYXRlIHRvIGN1cnJlbnQgQ1ZTIHRvIGZpeCBpc3N1ZXMgd2l0aCByb3V0aW5nIHRhYmxlIGFuZCAvc2Jpbi9pcAAtIHVwZGF0ZSB0byBjdXJyZW50IENWUyBhbmQgcmVidWlsZCAod29ya2Fyb3VuZCBmb3IgIzE2ODEyMCkALSBGaXggb2NjYXNpb25hbCBoYW5nIGluIE5NIGNhdXNlZCBieSB0aGUgYXBwbGV0AC0gVXBkYXRlIHRvIE5ldHdvcmtNYW5hZ2VyIDAuNC4xAC0gUmVidWlsZCBhZ2FpbnN0IG5ldyBjYWlyby9ndGsALSBVcGRhdGUgdG8gbGF0ZXN0IENWUwoJbyBVc2UgREhDUCBzZXJ2ZXIgYWRkcmVzcyBhcyBnYXRld2F5IGFkZHJlc3MgaWYgdGhlIERIQ1Agc2VydmVyIGRvZXNuJ3QgZ2l2ZQoJCXVzIGEgZ2F0ZXdheSBhZGRyZXNzICNyaDE2NTY5OCMKCW8gRml4ZXMgdG8gdGhlIGFwcGxldCAoUm9iZXJ0IExvdmUpCglvIEJldHRlciBjYWNoaW5nIG9mIGluZm9ybWF0aW9uIGluIHRoZSBhcHBsZXQgKEJpbGwgTW9zcykKCW8gR2VuZXJhdGUgYXV0b21hdGljIHN1Z2dlc3RlZCBBZC1Ib2MgbmV0d29yayBuYW1lIGZyb20gbWFjaGluZSdzIGhvc3RuYW1lCgkJKFJvYmVydCBMb3ZlKQoJbyBVcGRhdGUgYWxsIG5ldHdvcmsgaW5mb3JtYXRpb24gb24gc3VjY2Vzc2Z1bGwgY29ubmVjdCwgbm90IGp1c3QKCQlhdXRoZW50aWNhdGlvbiBtZXRob2QALSBVcGRhdGUgdG8gbGF0ZXN0IENWUyB0byBnZXQgZml4IGZvciBidWcgMTY1NjgzLgAtIE1vdmUgcGtnY29uZmlnIGZpbGUgdG8gZGV2ZWwgcGFja2FnZSAoIzE2MjMxNiwgdGhhbmtzIHRvIE1pY2hhZWwgU2Nod2VuZHQpAC0gVXBkYXRlIHRvIGxhdGVzdCBDVlMgdG8gZ2V0IGxhdGVzdCBWUE4gaW50ZXJmYWNlIHNldHRpbmdzIHRvIHNhdGlzZnkKICBCdWlsZFJlcSBmb3IgTmV0d29ya01hbmFnZXItdnBuYyBpbiBGZWRvcmEgRXh0cmFzIERldmVsb3BtZW50Ci0gTGF0ZXN0IENWUyBhbHNvIGNvbnRhaW5zIHZhcmlvdXMgYnVnLSBhbmQgVUktZml4ZXMALSBVcGRhdGUgdG8gbGF0ZXN0IENWUwoJbyBWUE4gY29ubmVjdGlvbiBpbXBvcnQvZXhwb3J0IGNhcGFiaWxpdHkKCW8gRml4IHVwIHNvbWUgbWVudSBpdGVtIG5hbWVzCi0gTW92ZSBubS12cG4tcHJvcGVydGllcy5nbGFkZSB0byB0aGUgZ25vbWUgc3VicGFja2FnZQAtIFVwZGF0ZSB0byBsYXRlc3QgQ1ZTCglvIENsZWFuIHVwIHdvcmRpbmcgaW4gV2lyZWxlc3MgTmV0d29yayBEaXNjb3ZlcnkgbWVudQoJbyBSb2JlcnQgTG92ZSdzIGFwcGxldCBiZWF1dGlmeSBwYXRjaAAtIFVwZGF0ZSB0byBsYXRlc3QgQ1ZTAC0gRml4IGRpc3BhdGNoZXIgYW5kIGFwcGxldCBDRkxBR1Mgc28gdGhleSBnZXRzIGNvbXBpbGVkIHdpdGggRk9SVElGWV9TT1VSQ0UALSBGaXggc2VnZmF1bHQgaW4gTmV0d29ya01hbmFnZXJEaXNwYXRjaGVyLCBhZGQgYW4gaW5pdHNjcmlwdCBmb3IgaXQALSBGaXggY29uZGl0aW9uIHRoYXQgbWF5IGhhdmUgcmVzdWx0ZWQgaW4gREhDUCBjbGllbnQgcmV0dXJuaW5nIHN1Y2Nlc3MKCXdoZW4gaXQgcmVhbGx5IHRpbWVkIG91dAAtIEVuYWJsZSBPSyBidXR0b24gY29ycmVjdGx5IGluIFBhc3NwaHJhc2UgYW5kIE90aGVyIE5ldHdvcmtzIGRpYWxvZ3Mgd2hlbgoJdXNpbmcgQVNDSUkgb3IgSGV4IFdFUCBrZXlzAC0gI3JoMTU0MzkxIyBOZXR3b3JrTWFuYWdlciBkaWVzIG9uIHN0YXJ0dXAgKGRvbid0IGZvcmNlLWtpbGwgbmlmZCkALSBGaXggbGVhayBvZiBhIHNvY2tldCBpbiBESENQIGNvZGUALSBGaXggc29tZSBtZW1vcnkgbGVha3MgKFRvbSBQYXJrZXIpCi0gSm9pbiB0byB0aHJlYWRzIHJhdGhlciB0aGFuIHNwaW5uaW5nIGZvciB0aGVpciBjb21wbGV0aW9uIChUb20gUGFya2VyKQotIEZpeCBtaXN1c2Ugb2YgYSBnX2Fzc2VydCgpIChDb2xpbiBXYWx0ZXJzKQotIEZpeCByZXR1cm4gY2hlY2tpbmcgb2YgYW4gaW9jdGwoKSAoQmlsbCBNb3NzKQotIEJldHRlciBkZXRlY3Rpb24gYW5kIG1hdGNoaW5nIG9mIGhpZGRlbiBhY2Nlc3MgcG9pbnRzIChCaWxsIE1vc3MpCi0gRG9uJ3QgdXNlIHZhcmFyZ3MsIGFuZCB0aGVyZWZvcmUgZG9uJ3QgY3Jhc2ggb24gUFBDIChQZXRlciBKb25lcykALSBmaXggYnVpbGQgd2l0aCBuZXdlciBkYnVzAC0gc2lsZW5jZSAlcG9zdAAtICNyaDE1MzIzNCMgTmV0d29ya01hbmFnZXIgcXVpdHMvY29yZXMganVzdCBhcyBhIGNvbm5lY3Rpb24gaXMgbWFkZQAtIFVwZGF0ZSBmcm9tIGxhdGVzdCBDVlMgSEVBRAAtIFVwZGF0ZSB0aGUgR1RLKyB0aGVtZSBpY29uIGNhY2hlIG9uICh1bilpbnN0YWxsAC0gUHVsbCBmcm9tIGxhdGVzdCBDVlMgSEVBRAAtIFVwbG9hZCBuZXcgc291cmNlIHRhcmJhbGwgKHdvb3BzKQAtIFB1bGwgZnJvbSBsYXRlc3QgQ1ZTIEhFQUQgKGhvcGVmdWxseSB3b3JrcyBhZ2FpbikALSBQdWxsIGZyb20gbGF0ZXN0IENWUyBIRUFECi0gQ29tbWl0IGJyb2tlbiBOZXR3b3JrTWFuYWdlciB0byBzYXRpc2Z5IHRvIGRidXMgZGVwZW5kZW5jeQAtIFB1bGwgZnJvbSBsYXRlc3QgQ1ZTIEhFQUQKLSBSZWJ1aWxkIGZvciBnY2MgNC4wAC0gVXBkYXRlIGZyb20gQ1ZTAC0gRml4IGZyZWUgb2YgaW52YWxpZCBwb2ludGVyIGZvciBtdWx0aXBsZSBzZWFyY2ggZG9tYWlucwAtIE5ldmVyIGF1dG9tYXRpY2FsbHkgY2hvb3NlIGEgZGV2aWNlIHRoYXQgZG9lc24ndCBzdXBwb3J0IGNhcnJpZXIgZGV0ZWN0aW9uCi0gQWRkIHJpZ2h0LWNsaWNrIG1lbnUgdG8gYXBwbGV0LCBjYW4gbm93ICJQYXVzZS9SZXN1bWUiIHNjYW5uaW5nIHRocm91Z2ggaXQKLSBGaXggREhDUCBSZW5ldy9SZWJpbmQgdGltZW91dHMKLSBGaXggZnJlcXVlbmN5IGN5Y2xpbmcgcHJvYmxlbSBvbiBzb21lIGNhcmRzLCBldmVuIHdoZW4gc2Nhbm5pbmcgd2FzIG9mZgotIFBsYXkgYmV0dGVyIHdpdGggSVB2NgotIERvbid0IHNlbmQga2VybmVsIHZlcnNpb24gaW4gREhDUCBwYWNrZXRzLCBhbmQgZW5zdXJlIERIQ1AgcGFja2V0cyBhcmUgYXQKCWxlYXN0IDMwMCBieXRlcyBpbiBsZW5ndGggdG8gd29yayBhcm91bmQgYnJva2VuIHJvdXRlcgotIE5ldyBESENQIG9wdGlvbnMgRC1CVVMgQVBJIGJ5IERhbiBSZWVkCi0gSGFuZGxlIG11bHRpcGxlIGRvbWFpbiBzZWFyY2ggb3B0aW9ucyBpbiBESENQIHJlc3BvbnNlcwAtIERpc3BsYXkgd2lyZWxlc3MgbmV0d29yayBuYW1lIGluIGFwcGxldCB0b29sdGlwCi0gSG9wZWZ1bGx5IGZpeCBkb3VibGUtZGVmYXVsdC1yb3V0ZSBwcm9ibGVtCi0gV3JpdGUgb3V0IHZhbGlkIHJlc29sdi5jb25mIHdoZW4gd2UgZXhpdAotIE1ha2UgbXVsdGktZG9tYWluIHNlYXJjaCBvcHRpb25zIHdvcmsKLSBSZXdvcmsgc2lnbmFsIHN0cmVuZ3RoIGNvZGUgdG8gYmUgV0VYVCBjb25mb3JtYW50LCBpZiBzdHJlbmd0aCBpcwoJc3RpbGwgd2llcmQgdGhlbiBpdHMgOTUlIHN1cmVseSBhIGRyaXZlciBwcm9ibGVtCi0gRml4IGFubm95aW5nIGluc3RhbmNlcyBvZiBzdWRkZW5seSBkcm9wcGluZyBhbmQgcmVhY3RpdmF0aW5nIGEKCXdpcmVsZXNzIGRldmljZSAoQ2lzY28gY2FyZHMgd2VyZSB3b3JzdCBvZmZlbmRlcnMgaGVyZSkKLSBGaXggc29tZSBpbnN0YW5jZXMgb2YgTmV0d29ya01hbmFnZXIgbm90IHJlbWVtYmVyaW5nIHlvdXIgV0VQIGtleQotIEZpeCBzb21lIHJhY2VzIGJldHdlZW4gTmV0d29ya01hbmFnZXIgYW5kIE5ldHdvcmtNYW5hZ2VySW5mbyB3aGVyZQoJTmV0d29ya01hbmFnZXIgd291bGRuJ3QgcmVjb2duaXplIGNoYW5nZXMgaW4gdGhlIGFsbG93ZWQgbGlzdAotIERvbid0IHNob3ZlIEFkLUhvYyBBY2Nlc3MgUG9pbnQgTUFDIGFkZHJlc3NlcyBpbnRvIEdDb25mAC0gUGxheSBuaWNlIHdpdGggZGJ1cyAwLjIzCi0gVXBkYXRlIG91ciBsaXN0IG9mIEFsbG93ZWQgV2lyZWxlc3MgTmV0d29ya3MgbW9yZSBxdWlja2x5AC0gVXBkYXRlIHRvIGxhdGVzdCBDVlMKLSBNYWtlIHN1cmUgd2Ugc3RhcnQgYXMgbGF0ZSBhcyBwb3NzaWJsZSBzbyB0aGF0IHdlIGVuc3VyZSBkYnVzICYgSEFMCglhcmUgYWxyZWFkeSBhcm91bmQKLSBGaXggcmFjZSBpbiBpbml0aWFsIGRldmljZSBhY3RpdmF0aW9uAC0gcmVidWlsdCBhZ2FpbnN0IG5ldyB3aXJlbGVzcyB0b29sAC0gRml4IGlzc3VlIHdoZXJlIE5NIHdvdWxkbid0IHJlY29nbml6ZSB0aGF0IGFjY2VzcyBwb2ludHMgd2VyZQoJZW5jcnlwdGVkLCBhbmQgdGhlbiB3b3VsZCB0cnkgdG8gY29ubmVjdCB3aXRob3V0IGVuY3J5cHRpb24KLSBSZWZpbmUgcGFja2FnaW5nIHRvIHB1dCBjbGllbnQgbGlicmFyeSBpbiBzZXBhcmF0ZSBwYWNrYWdlCi0gUmVtb3ZlIGJpbmQrY2FjaGluZy1uYW1lc2VydmVyIGRlcCBmb3IgRkMtMywgdXNlICduc2NkIC1pIGhvc3RzJwoJaW5zdGVhZC4gIEROUyBxdWVyaWVzIG1heSB0aW1lb3V0IG5vdyByaWdodCBhZnRlciBkZXZpY2UKCWFjdGl2YXRpb24gZHVlIHRvIHRoaXMgY2hhbmdlLgAtIFVwZGF0ZSB0byBsYXRlc3QgQ1ZTCi0gRml4ZXMgdG8gREhDUCBjb2RlCi0gTGluay1Mb2NhbCAoWmVyb0NvbmYvUmVuZGV6dm91cykgc3VwcG9ydAotIFVzZSBiaW5kIGluICJjYWNoaW5nLW5hbWVzZXJ2ZXIiIG1vZGUgdG8gd29yayBhcm91bmQgc3R1cGlkaXR5CglpbiBnbGliYydzIHJlc29sdmVyIGxpYnJhcnkgbm90IHJlY29nbml6aW5nIHJlc29sdi5jb25mIGNoYW5nZXMKLSAjcmgxNDQ4MTgjIENsZWFuIHVwIHRoZSBzcGVjZmlsZSAoUGF0Y2ggZnJvbSBNYXR0aGlhcyBTYW91KQotIEFkLUhvYyBtb2RlIHN1cHBvcnQgd2l0aCBMaW5rLUxvY2FsIGFkZHJlc3Npbmcgb25seSAoZm9yIG5vdykKLSBGaXhlcyBmb3IgZGV2aWNlIGFjdGl2YXRpb24gcmFjZSBjb25kaXRpb25zCi0gV2lyZWxlc3Mgc2Nhbm5pbmcgaW4gc2VwYXJhdGUgdGhyZWFkAC0gVXBkYXRlIHRvIENWUwotIFVwZGF0ZXMgdG8gbGluayBkZXRlY3Rpb24sIERIQ1AgY29kZQotIFJlbW92ZSBOTUxhdW5jaEhlbHBlciBzbyB3ZSBzdGFydCB1cCBmYXN0ZXIgYW5kIGRvbid0CglibG9jayBmb3IgYSBjb25uZWN0aW9uLiAgVGhpcyBtZWFucyBzZXJ2aWNlcyB0aGF0IGRlcGVuZAoJb24gdGhlIG5ldHdvcmsgbWF5IGZhaWwgaWYgdGhleSBzdGFydCByaWdodCBhZnRlciBOTQotIE1ha2Ugc3VyZSBESENQIHJlbmV3L3JlYmluZGluZyB3b3JrcwAtIFVwZGF0ZSB0byBDVlMKLSBGaXhlcyB0byBsaW5rIGRldGVjdGlvbgotIEJldHRlciBkZXRlY3Rpb24gb2Ygbm9uLUVTU0lELWJyb2FkY2FzdGluZyBhY2Nlc3MgcG9pbnRzCi0gRG9uJ3QgZGlhbG9nLXNwYW0gdGhlIHVzZXIgaWYgYSBjb25uZWN0aW9uIGZhaWxzAC0gVXBkYXRlIHRvIENWUwotIE11Y2ggYmV0dGVyIGxpbmsgZGV0ZWN0aW9uLCB3b3JrcyB3aXRoIE9wZW4gU3lzdGVtIGF1dGhlbnRpY2F0aW9uCi0gQmxhY2tsaXN0IHdpcmVsZXNzIGNhcmRzIHJhdGhlciB0aGFuIHdoaXRlbGlzdGluZyB0aGVtAC0gI3JoMTM0ODkzIyBOZXR3b3JrTWFuYWdlckluZm8gYW5kIHRoZSBwYW5lbC1pY29uIGxpZmUtY3ljbGUKLSAjcmgxMzQ4OTUjIFN0YXR1cyBpY29uIHNob3VsZCBoaWRlIHdoZW4gaW4gV2lyZWQtb25seSBtb2RlCi0gI3JoMTM0ODk2IyBJY29uIGNvZGUgbmVlZHMgcmV3cml0ZQotICNyaDEzNDg5NyMgIk90aGVyIE5ldHdvcmtzLi4uIiBkaWFsb2cgbmVlZHMgaW1wbGVtZW50aW5nCi0gI3JoMTM1MDU1IyBNZW51IGhpZ2hsaWdodHMgaW5jb3JyZWN0bHkgaW4gTk0KLSAjcmgxMzU2NDgjIHNlZ2ZhdWx0IHdpdGggY2lwc2VjMAotICNyaDEzNTcyMiMgTmV0d29ya01hbmFnZXIgd2lsbCBub3QgYWxsb3cgemF1cnVzIHRvIHN5bmMgdmlhIHVzYjAKLSAjcmgxMzU5OTkjIE5ldHdvcmtNYW5hZ2VyLTAuMy4xIHdpbGwgbm90IGNvbm5lY3QgdG8gMTI4IHdlcAotICNyaDEzNjg2NiMgYXBwbGV0IG5lZWRzIHRvb2x0aXBzCi0gI3JoMTM3MDQ3IyBsb3RzIG9mIGFwcGxldHMsIHlheSEKLSAjcmgxMzczNDEjIE5ldHdvcmsgTWFuYWdlciBkaWVzIGFmdGVyIGRpc2Nvbm5lY3RpbmcgZnJvbSB3aXJlZCBuZXR3b3JrIHNlY29uZCB0aW1lCi0gQmV0dGVyIGNoZWNraW5nIGZvciB3aXJlbGVzcyBkZXZpY2VzCi0gRml4IHNvbWUgbWVtbGVha3MKLSBGaXggaXNzdWVzIHdpdGggZGhjbGllbnQgZGVjbGluaW5nIGFuIG9mZmVyZWQgYWRkcmVzcwotIEZpeCBhbiBhY3RpdmF0aW9uIHRocmVhZCBkZWFkbG9jawotIE1vcmUgYWNjdXJhdGVseSBkZXRlY3QgIk90aGVyIHdpcmVsZXNzIG5ldHdvcmtzIiB0aGF0IGFyZSBlbmNyeXB0ZWQKLSBEb24ndCBicmluZyBkZXZpY2VzIGRvd24gYXMgbXVjaCwgd29uJ3QgaG90cGx1Zy1zcGFtIGFzIG11Y2ggYW55bW9yZQoJYWJvdXQgZmlybXdhcmUKLSBBZGQgYSAibmV0d29yayBub3QgZm91bmQiIGRpYWxvZyB3aGVuIHRoZSB1c2VyIGNob29zZXMgYSBuZXR3b3JrIHRoYXQgY291bGQKCW5vdCBiZSBjb25uZWN0ZWQgdG8ALSBGaXggZXNjYXBpbmcgb2YgRVNTSURzIGluIGdjb25mAC0gbWlub3IgcG9pbnQgcmVsZWFzZSB0byBpbXByb3ZlIGVycm9yIGhhbmRsaW5nIGFuZCB0cmFuc2xhdGlvbnMALSBVcGRhdGUgZnJvbSBDVlMsIHZlcnNpb24gMC4zAC0gVXBkYXRlIGZyb20gQ1ZTCi0gSW1wcm92ZW1lbnRzOgoJbyBCZXR0ZXIgbGluayBjaGVja2luZyBvbiB3aXJlbGVzcyBjYXJkcwoJbyBQYW5lbCBhcHBsZXQgbm93IGEgTm90aWZpY2F0aW9uIEFyZWEgaWNvbgoJbyBTdGF0aWMgSVAgY29uZmlndXJhdGlvbiBzdXBwb3J0AC0gVXBkYXRlIGZyb20gQ1ZTAC0gUmVxdWlyZSBnbm9tZS1wYW5lbCwgbm90IGdub21lLXBhbmVsLWRldmVsCi0gVHVybiBvZmYgYnkgZGVmYXVsdAAtIFVwZGF0ZSB0byAwLjIALSBzcGVjLWNoYW5nZXMgdG8gcmVxIGdsaWIyIGluc3RlYWQgb2YgZ2xpYgAtIEZpcnN0IHB1YmxpYyByZWxlYXNlAE5ldHdvcmtNYW5hZ2VyAE5ldHdvcmtNYW5hZ2VyLWJ0AAAAAAABAAAAAQAAAAEAAAABAAAAAQAAAAIAAAADAAAABAAAAAAAAAAIAAAACAAAgAAxOjEuMjYuMC04LmVsOAAxOjEuMjYuMC04LmVsOAAAAAAAAAIAAAAAMTowLjkuOS45NS0xAAAAAAAAAAAAAAABAAAAAgAAAAMuYnVpbGQtaWQAODcAMDI5MjViZTRmMDczN2VjODczOWYyMmZkZDQ3Y2VmZjVjMjgyMDAAbGlibm0tZGV2aWNlLXBsdWdpbi1ibHVldG9vdGguc28AL3Vzci9saWIvAC91c3IvbGliLy5idWlsZC1pZC8AL3Vzci9saWIvLmJ1aWxkLWlkLzg3LwAvdXNyL2xpYjY0L05ldHdvcmtNYW5hZ2VyLzEuMjYuMC04LmVsOC8ALU8yIC1nIC1waXBlIC1XYWxsIC1XZXJyb3I9Zm9ybWF0LXNlY3VyaXR5IC1XcCwtRF9GT1JUSUZZX1NPVVJDRT0yIC1XcCwtRF9HTElC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"},"publicKey":{"content":"LS0tLS1CRUdJTiBQR1AgUFVCTElDIEtFWSBCTE9DSy0tLS0tClZlcnNpb246IEdudVBHIHYyLjAuMjIgKEdOVS9MaW51eCkKCm1RSU5CRnpNV3hrQkVBREhyc2twQmdOOU9waG1oUmtjN1AvWXJzQUdTdnZsN2tmdStlOUtBYVU2ZjVNZUFWeW4KcklvTTQzc3l5R2tnRnlXZ2paTTgvcnVyN0VNUFkyeXQrMnEvMVpmTFZDUm45ODU2SnFUSXEwWFJwRFVlNG5LUQo4QmxBN3dEVlpvU0R4VVprU3VUSXlFeGJEZjBjcHc4OVRjZjYyTXhtaThqaDc0dlJsUHkxUGdqV0w1NDk0YjNYCjVmeERpZEg0YnFQWnl4VEJxUHJVRnVvK0VmVVZFcWlHRjk0UHBxNlpVdnJCR09WbzFWMStJZm05Q0dFSzU5N2MKYWV2Y0djMVJGbGd4SWdOODRVcHVEalBSOS96U25kd0o3WHNYWXZaNkhYY0tHYWdSS3NmWURXR1BrQTVjT0wvZQpmK3lPYk9uQzQzeVBVdnBnZ1E0S2FOSjYrU01UWk9LaWtNOHljaXlCd0xxd3JqbzhGbEpna3Y4VmZhZy8yVVI3CkpJTmJ5cUhIb0xVaFEybTZIWFN3SzRZanR3aWRGOUVVa2FCWldycnNrWVIzSVJaTFhsV3FlT2kvK2V6WU9XMG0KdnVmcmtjdnNoK1RLbFZWbnV3bUVQako4bXdVU3BzTGRmUEpvMURIc2Q4RlMwM1NDS1BhWEZkRDdlUGZFamlZawpuSHBRYUtFMDFhV1ZTTFVpeWduN0Y3clllbUdxVjlWdDd0Qnc1cHowdnFTQzcyYTVFM3pGeklJdUh4NmFBTnJ5CkdhdDNhcVUzcXRCWE9yQS9kUGtYOWNXRStVUjV3by9BMlVkS0paTGxHaE0yV1JKM2x0bUdUNDhWOUNlUzZOOVkKbTRDS2R6dmc3RVdqbFRsRnJkLzhXSjJLb3FPRTlsZURQZVhSUG5jdWJKZko2TExJSHlHMDloOWtLUUFSQVFBQgp0RHBEWlc1MFQxTWdLRU5sYm5SUFV5QlBabVpwWTJsaGJDQlRhV2R1YVc1bklFdGxlU2tnUEhObFkzVnlhWFI1ClFHTmxiblJ2Y3k1dmNtYytpUUkzQkJNQkFnQWhCUUpjekZzWkFoc0RCZ3NKQ0FjREFnWVZDQUlKQ2dzREZnSUIKQWg0QkFoZUFBQW9KRUFXMVZiT0VnOFpkak9zUC8yeWdTeEg5anFmZk9VOVNLeUpEbHJhTDJnSXV0cVozQjhwbApHeS9RbmI5UUQxRUpWYjRaeE9FaGNZMlc5VkpmSXBuZjN5QnVBdG83enZLZS9HMW54SDRCdDZXVEpRQ2tVamNzCk4zcVBXc3gxVnNsc0FFejdiWEdpSHltNkF5NHhGMjhiUTlYWUlva0lRWGQwVDJyRDMvbE5HeE50T1JaMmJLakQKdk96WXp2aDJpZFVJWTFEZ0dXSjExZ3RIRklBOUN2SGNXK1NNUEVoa2NLWkpBTzUxYXlGQnFUU1NwaW9yVndUcQphMGNCK2NnbUNRT0k0L01ZK2tJdnpvZXhmRzd4aGtVcWUwd3htcGg5UlFReGxUYk5RRENkYXhTZ3diRjJUK2d3CmJ5YUR2a1M0eHRSNlNvajdCS2pLQW1jbmY1Zm40QzVPcjBLTFVxTXpCdERNYmZRUWlobjYyaVpKTjZaWi80ZGcKcTRIVHF5VnB5dXpNWHNGcEo5TC9GcUgyREo0ZXhHR3BCdjAwYmEvWmF1eTdHc3FPYzVQbk5Cc1lhSENwbHkwWAo0MDdEUng1MXQ5WXdZSS90dFZhbHVlaHE5K2dSSnBPVFRLcDZBalpuL2E1WXQzaDZqRGdwTmZNL0V5TEZJWTl6ClY2Q1hxUVEvOEpSdmFpay9Kc0dDZitlZUxaT3c0a29JalpHRUFnMDRpdXlOVGpoeDBlL1FIRVZjWUFxTkxoWEcKckNUVGJDbjNOU1VPOXF4RVhDK0svMW0xa2FYb0NHQTBVV2xWR1oxSlNpZmJiTXgweXhxL2JycEVaUFVZbSszMgpvOFhmYm9jQldsakZVSis2YWxqVHZaM0xRTEtUU1BXN1RGTytHWHljQU9tQ0dobFhoMnRsYzZpVGM0MVBBQ3F5Cnl5K21IbVN2Cj1ra0g3Ci0tLS0tRU5EIFBHUCBQVUJMSUMgS0VZIEJMT0NLLS0tLS0K"}}} diff --git a/tests/test.rpm b/tests/test.rpm new file mode 100644 index 0000000000000000000000000000000000000000..051b6ccb54574a8bdfdf106e14b50a92981127d0 GIT binary patch literal 166888 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�-)dHXIfwdh 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 b00HB&0@$<$4}{x!w&~v-0ssI2018=Ji-h-& literal 0 HcmV?d00001 diff --git a/tests/test_rpm_public_key.key b/tests/test_rpm_public_key.key new file mode 100644 index 0000000..30235a8 --- /dev/null +++ b/tests/test_rpm_public_key.key @@ -0,0 +1,30 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v2.0.22 (GNU/Linux) + +mQINBFzMWxkBEADHrskpBgN9OphmhRkc7P/YrsAGSvvl7kfu+e9KAaU6f5MeAVyn +rIoM43syyGkgFyWgjZM8/rur7EMPY2yt+2q/1ZfLVCRn9856JqTIq0XRpDUe4nKQ +8BlA7wDVZoSDxUZkSuTIyExbDf0cpw89Tcf62Mxmi8jh74vRlPy1PgjWL5494b3X +5fxDidH4bqPZyxTBqPrUFuo+EfUVEqiGF94Ppq6ZUvrBGOVo1V1+Ifm9CGEK597c +aevcGc1RFlgxIgN84UpuDjPR9/zSndwJ7XsXYvZ6HXcKGagRKsfYDWGPkA5cOL/e +f+yObOnC43yPUvpggQ4KaNJ6+SMTZOKikM8yciyBwLqwrjo8FlJgkv8Vfag/2UR7 +JINbyqHHoLUhQ2m6HXSwK4YjtwidF9EUkaBZWrrskYR3IRZLXlWqeOi/+ezYOW0m +vufrkcvsh+TKlVVnuwmEPjJ8mwUSpsLdfPJo1DHsd8FS03SCKPaXFdD7ePfEjiYk +nHpQaKE01aWVSLUiygn7F7rYemGqV9Vt7tBw5pz0vqSC72a5E3zFzIIuHx6aANry +Gat3aqU3qtBXOrA/dPkX9cWE+UR5wo/A2UdKJZLlGhM2WRJ3ltmGT48V9CeS6N9Y +m4CKdzvg7EWjlTlFrd/8WJ2KoqOE9leDPeXRPncubJfJ6LLIHyG09h9kKQARAQAB +tDpDZW50T1MgKENlbnRPUyBPZmZpY2lhbCBTaWduaW5nIEtleSkgPHNlY3VyaXR5 +QGNlbnRvcy5vcmc+iQI3BBMBAgAhBQJczFsZAhsDBgsJCAcDAgYVCAIJCgsDFgIB +Ah4BAheAAAoJEAW1VbOEg8ZdjOsP/2ygSxH9jqffOU9SKyJDlraL2gIutqZ3B8pl +Gy/Qnb9QD1EJVb4ZxOEhcY2W9VJfIpnf3yBuAto7zvKe/G1nxH4Bt6WTJQCkUjcs +N3qPWsx1VslsAEz7bXGiHym6Ay4xF28bQ9XYIokIQXd0T2rD3/lNGxNtORZ2bKjD +vOzYzvh2idUIY1DgGWJ11gtHFIA9CvHcW+SMPEhkcKZJAO51ayFBqTSSpiorVwTq +a0cB+cgmCQOI4/MY+kIvzoexfG7xhkUqe0wxmph9RQQxlTbNQDCdaxSgwbF2T+gw +byaDvkS4xtR6Soj7BKjKAmcnf5fn4C5Or0KLUqMzBtDMbfQQihn62iZJN6ZZ/4dg +q4HTqyVpyuzMXsFpJ9L/FqH2DJ4exGGpBv00ba/Zauy7GsqOc5PnNBsYaHCply0X +407DRx51t9YwYI/ttValuehq9+gRJpOTTKp6AjZn/a5Yt3h6jDgpNfM/EyLFIY9z +V6CXqQQ/8JRvaik/JsGCf+eeLZOw4koIjZGEAg04iuyNTjhx0e/QHEVcYAqNLhXG +rCTTbCn3NSUO9qxEXC+K/1m1kaXoCGA0UWlVGZ1JSifbbMx0yxq/brpEZPUYm+32 +o8XfbocBWljFUJ+6aljTvZ3LQLKTSPW7TFO+GXycAOmCGhlXh2tlc6iTc41PACqy +yy+mHmSv +=kkH7 +-----END PGP PUBLIC KEY BLOCK----- diff --git a/tests/util.go b/tests/util.go index d9f9830..84668de 100644 --- a/tests/util.go +++ b/tests/util.go @@ -62,12 +62,20 @@ func readFile(t *testing.T, p string) string { return strings.TrimSpace(string(b)) } +func randomData(n int) ([]byte, error) { + rand.Seed(time.Now().UnixNano()) + data := make([]byte, n) + if _, err := rand.Read(data[:]); err != nil { + return nil, err + } + return data, nil +} + func createArtifact(t *testing.T, artifactPath string) string { t.Helper() // First let's generate some random data so we don't have to worry about dupes. - rand.Seed(time.Now().UnixNano()) - data := [100]byte{} - if _, err := rand.Read(data[:]); err != nil { + data, err := randomData(100) + if err != nil { t.Fatal(err) } -- GitLab