From 91952da859db30aceb4239007983d9e82ceb8aa5 Mon Sep 17 00:00:00 2001 From: Adrian Serrano Date: Tue, 19 Jan 2021 23:07:36 +0100 Subject: [PATCH 01/15] aucoalesce: ECS user and group mapping Add ECS user and group fields to aucoalesce.Event. Update normalizations to enable population of ECS user.* and group.* fields from event data (entity.*, object.*, uids and raw data). Also refactors the user/group ID lookup as sometimes it's necessary to lookup a user/group ID from a name. --- aucoalesce/coalesce.go | 56 ++++- aucoalesce/id_lookup.go | 216 +++++++++++------- aucoalesce/id_lookup_test.go | 68 +++++- aucoalesce/normalizations.yaml | 57 +++++ aucoalesce/normalize.go | 107 ++++++++- .../testdata/random-internet.json.golden | 10 + .../testdata/rhel-7-linux-3.10.0.json.golden | 109 +++++++++ .../ubuntu-16.04-linux-4.13.0.json.golden | 20 ++ .../ubuntu-16.10-linux-4.8.0.json.golden | 152 ++++++++++++ .../ubuntu-17.04-linux-4.10.0.json.golden | 179 +++++++++++++++ aucoalesce/znormalize_data.go | 2 +- 11 files changed, 883 insertions(+), 93 deletions(-) diff --git a/aucoalesce/coalesce.go b/aucoalesce/coalesce.go index db75f20..6257133 100644 --- a/aucoalesce/coalesce.go +++ b/aucoalesce/coalesce.go @@ -41,6 +41,24 @@ type ECSEvent struct { Outcome string `json:"outcome,omitempty" yaml:"outcome,omitempty"` } +type ECSEntityData struct { + Name string `json:"name,omitempty" yaml:"name,omitempty"` + ID string `json:"id,omitempty" yaml:"id,omitempty"` +} + +type ECSEntity struct { + ECSEntityData + Effective ECSEntityData `json:"effective" yaml:"effective"` + Target ECSEntityData `json:"target" yaml:"target"` + Changes ECSEntityData `json:"changes" yaml:"changes"` +} + +type ECSFields struct { + Event ECSEvent `json:"event" yaml:"event"` + User ECSEntity `json:"user" yaml:"user"` + Group ECSEntity `json:"group" yaml:"group"` +} + type Event struct { Timestamp time.Time `json:"@timestamp" yaml:"timestamp"` Sequence uint32 `json:"sequence" yaml:"sequence"` @@ -61,9 +79,7 @@ type Event struct { Data map[string]string `json:"data,omitempty" yaml:"data,omitempty"` Paths []map[string]string `json:"paths,omitempty" yaml:"paths,omitempty"` - ECS struct { - Event ECSEvent `json:"event" yaml:"event"` - } `json:"ecs" yaml:"ecs"` + ECS ECSFields `json:"ecs" yaml:"ecs"` Warnings []error `json:"-" yaml:"-"` } @@ -575,6 +591,13 @@ func applyNormalization(event *Event) { norm.SourceIP.Values)) } } + + // Populate ECS fields from `mappings` section. + for _, mapping := range norm.ECS.Mappings { + if mapping.To != nil && mapping.From != nil { + mapping.To(event, mapping.From(event)) + } + } } func getValue(key string, event *Event) (string, bool) { @@ -781,3 +804,30 @@ func setHowDefaults(event *Event) { } event.Summary.How = comm } + +func (e *ECSEntityData) set(value string) { + // This could be called using an UID or a name + if _, err := strconv.Atoi(value); err == nil { + e.ID = value + } else { + e.Name = value + } +} + +func (e *ECSEntityData) lookup(cache *EntityCache) { + if (e.ID == "") == (e.Name == "") { + return + } + if e.ID != "" { + e.Name = cache.LookupID(e.ID) + } else { + e.ID = cache.LookupName(e.Name) + } +} + +func (e *ECSEntity) lookup(cache *EntityCache) { + e.ECSEntityData.lookup(cache) + e.Effective.lookup(cache) + e.Target.lookup(cache) + e.Changes.lookup(cache) +} diff --git a/aucoalesce/id_lookup.go b/aucoalesce/id_lookup.go index 760e36c..4ef630a 100644 --- a/aucoalesce/id_lookup.go +++ b/aucoalesce/id_lookup.go @@ -30,6 +30,13 @@ const cacheTimeout = time.Minute var ( userLookup = NewUserCache(cacheTimeout) groupLookup = NewGroupCache(cacheTimeout) + + // noExpiration = time.Unix(math.MaxInt64, 0) + // The above breaks time.Before and time.After due to overflows. + // See https://stackoverflow.com/questions/25065055/what-is-the-maximum-time-time-in-go + // + // Safe alternative: + noExpiration = time.Unix(0, 0).Add(math.MaxInt64 - 1) ) type stringItem struct { @@ -41,92 +48,89 @@ func (i *stringItem) isExpired() bool { return time.Now().After(i.timeout) } -// UserCache is a cache of UID to username. -type UserCache struct { - expiration time.Duration - data map[string]stringItem - mutex sync.Mutex +// EntityCache is a cache of IDs and usernames. +type EntityCache struct { + byID, byName stringCache } -// NewUserCache returns a new UserCache. UserCache is thread-safe. -func NewUserCache(expiration time.Duration) *UserCache { - return &UserCache{ - expiration: expiration, - data: map[string]stringItem{ - "0": {timeout: time.Unix(math.MaxInt64, 0), value: "root"}, +// NewUserCache returns a new EntityCache to resolve users. EntityCache is thread-safe. +func NewUserCache(expiration time.Duration) *EntityCache { + return &EntityCache{ + byID: stringCache{ + expiration: expiration, + data: map[string]stringItem{ + "0": {timeout: noExpiration, value: "root"}, + }, + lookupFn: func(s string) string { + user, err := user.LookupId(s) + if err != nil { + return "" + } + return user.Username + }, + }, + byName: stringCache{ + expiration: expiration, + data: map[string]stringItem{ + "root": {timeout: noExpiration, value: "0"}, + }, + lookupFn: func(s string) string { + user, err := user.Lookup(s) + if err != nil { + return "" + } + return user.Uid + }, }, } } -// LookupUID looks up a UID and returns the username associated with it. If -// no username could be found an empty string is returned. The value will be -// cached for a minute. This requires cgo on Linux. -func (c *UserCache) LookupUID(uid string) string { - if uid == "" || uid == "unset" { - return "" - } - - c.mutex.Lock() - defer c.mutex.Unlock() - - if item, found := c.data[uid]; found && !item.isExpired() { - return item.value - } - - // Cache the value (even on error). - user, err := user.LookupId(uid) - if err != nil { - c.data[uid] = stringItem{timeout: time.Now().Add(c.expiration), value: ""} - return "" - } - - c.data[uid] = stringItem{timeout: time.Now().Add(c.expiration), value: user.Username} - return user.Username +// LookupID looks up an UID/GID and returns the user/group name associated with it. If +// no name could be found an empty string is returned. The value will be +// cached for a minute. +func (c *EntityCache) LookupID(uid string) string { + return c.byID.lookup(uid) } -// GroupCache is a cache of GID to group name. -type GroupCache struct { - expiration time.Duration - data map[string]stringItem - mutex sync.Mutex +// LookupName looks up an user/group name and returns the ID associated with it. If +// no ID could be found an empty string is returned. The value will be +// cached for a minute. This requires cgo on Linux. +func (c *EntityCache) LookupName(name string) string { + return c.byName.lookup(name) } -// NewGroupCache returns a new GroupCache. GroupCache is thread-safe. -func NewGroupCache(expiration time.Duration) *GroupCache { - return &GroupCache{ - expiration: expiration, - data: map[string]stringItem{ - "0": {timeout: time.Unix(math.MaxInt64, 0), value: "root"}, +// NewGroupCache returns a new EntityCache to resolve groups. EntityCache is thread-safe. +func NewGroupCache(expiration time.Duration) *EntityCache { + return &EntityCache{ + byID: stringCache{ + expiration: expiration, + data: map[string]stringItem{ + "0": {timeout: noExpiration, value: "root"}, + }, + lookupFn: func(s string) string { + grp, err := user.LookupGroupId(s) + if err != nil { + return "" + } + return grp.Name + }, + }, + byName: stringCache{ + expiration: expiration, + data: map[string]stringItem{ + "root": {timeout: noExpiration, value: "0"}, + }, + lookupFn: func(s string) string { + grp, err := user.LookupGroup(s) + if err != nil { + return "" + } + return grp.Gid + }, }, } } -// LookupGID looks up a GID and returns the group associated with it. If -// no group could be found an empty string is returned. The value will be -// cached for a minute. This requires cgo on Linux. -func (c *GroupCache) LookupGID(gid string) string { - if gid == "" || gid == "unset" { - return "" - } - - c.mutex.Lock() - defer c.mutex.Unlock() - - if item, found := c.data[gid]; found && !item.isExpired() { - return item.value - } - - // Cache the value (even on error). - group, err := user.LookupGroupId(gid) - if err != nil { - c.data[gid] = stringItem{timeout: time.Now().Add(c.expiration), value: ""} - return "" - } - - c.data[gid] = stringItem{timeout: time.Now().Add(c.expiration), value: group.Name} - return group.Name -} - // ResolveIDs translates all uid and gid values to their associated names. // Prior to Go 1.9 this requires cgo on Linux. UID and GID values are cached // for 60 seconds from the time they are read. @@ -136,12 +140,12 @@ func ResolveIDs(event *Event) { // ResolveIDsFromCaches translates all uid and gid values to their associated // names using the provided caches. Prior to Go 1.9 this requires cgo on Linux. -func ResolveIDsFromCaches(event *Event, users *UserCache, groups *GroupCache) { +func ResolveIDsFromCaches(event *Event, users, groups *EntityCache) { // Actor - if v := users.LookupUID(event.Summary.Actor.Primary); v != "" { + if v := users.LookupID(event.Summary.Actor.Primary); v != "" { event.Summary.Actor.Primary = v } - if v := users.LookupUID(event.Summary.Actor.Secondary); v != "" { + if v := users.LookupID(event.Summary.Actor.Secondary); v != "" { event.Summary.Actor.Secondary = v } @@ -149,11 +153,11 @@ func ResolveIDsFromCaches(event *Event, users *UserCache, groups *GroupCache) { names := map[string]string{} for key, id := range event.User.IDs { if strings.HasSuffix(key, "uid") { - if v := users.LookupUID(id); v != "" { + if v := users.LookupID(id); v != "" { names[key] = v } } else if strings.HasSuffix(key, "gid") { - if v := groups.LookupGID(id); v != "" { + if v := groups.LookupID(id); v != "" { names[key] = v } } @@ -165,10 +169,64 @@ func ResolveIDsFromCaches(event *Event, users *UserCache, groups *GroupCache) { // File owner/group if event.File != nil { if event.File.UID != "" { - event.File.Owner = users.LookupUID(event.File.UID) + event.File.Owner = users.LookupID(event.File.UID) } if event.File.GID != "" { - event.File.Group = groups.LookupGID(event.File.GID) + event.File.Group = groups.LookupID(event.File.GID) } } + + // ECS User and groups + event.ECS.User.lookup(users) + event.ECS.Group.lookup(groups) +} + +// HardcodeUsers is useful for injecting values for testing. +func HardcodeUsers(users ...user.User) { + for _, usr := range users { + userLookup.byID.hardcode(usr.Uid, usr.Username) + userLookup.byName.hardcode(usr.Username, usr.Uid) + } +} + +// HardcodeGroups is useful for injecting values for testing. +func HardcodeGroups(groups ...user.Group) { + for _, grp := range groups { + groupLookup.byID.hardcode(grp.Gid, grp.Name) + groupLookup.byName.hardcode(grp.Name, grp.Gid) + } +} + +type stringCache struct { + mutex sync.Mutex + expiration time.Duration + data map[string]stringItem + lookupFn func(string) string +} + +func (c *stringCache) lookup(key string) string { + if key == "" || key == "unset" { + return "" + } + + c.mutex.Lock() + defer c.mutex.Unlock() + + if item, found := c.data[key]; found && !item.isExpired() { + return item.value + } + + // Cache the result (even on error). + resolved := c.lookupFn(key) + c.data[key] = stringItem{timeout: time.Now().Add(c.expiration), value: resolved} + return resolved +} + +func (c *stringCache) hardcode(key, value string) { + c.mutex.Lock() + defer c.mutex.Unlock() + c.data[key] = stringItem{ + timeout: noExpiration, + value: value, + } } diff --git a/aucoalesce/id_lookup_test.go b/aucoalesce/id_lookup_test.go index 11e59c3..64c79ec 100644 --- a/aucoalesce/id_lookup_test.go +++ b/aucoalesce/id_lookup_test.go @@ -19,36 +19,88 @@ package aucoalesce import ( "os" + "os/user" "strconv" "testing" + + "github.com/stretchr/testify/assert" ) func TestUIDLookup(t *testing.T) { uid := os.Getuid() - user := userLookup.LookupUID(strconv.Itoa(uid)) - user = userLookup.LookupUID(strconv.Itoa(uid)) + user := userLookup.LookupID(strconv.Itoa(uid)) + user = userLookup.LookupID(strconv.Itoa(uid)) gid := os.Getgid() - group := groupLookup.LookupGID(strconv.Itoa(gid)) - group = groupLookup.LookupGID(strconv.Itoa(gid)) + group := groupLookup.LookupID(strconv.Itoa(gid)) + group = groupLookup.LookupID(strconv.Itoa(gid)) t.Log(user, group) } func TestResolveIDs(t *testing.T) { - auid := strconv.Itoa(os.Getuid()) + usr, err := user.Current() + if err != nil { + t.Fatal(err) + } + group, err := user.LookupGroupId(usr.Gid) + if err != nil { + t.Fatal(err) + } event := &Event{ User: User{ IDs: map[string]string{ - "auid": auid, - "gid": strconv.Itoa(os.Getgid()), + "auid": usr.Uid, + "gid": usr.Gid, }, }, Summary: Summary{ Actor: Actor{ - Primary: auid, + Primary: usr.Uid, + }, + }, + ECS: ECSFields{ + User: ECSEntity{ + ECSEntityData: ECSEntityData{ + ID: usr.Uid, + }, + Effective: ECSEntityData{ + Name: usr.Username, + }, }, }, } + ResolveIDs(event) t.Logf("%+v", event) + assert.Equal(t, usr.Username, event.User.Names["auid"]) + assert.Equal(t, group.Name, event.User.Names["gid"]) + assert.Equal(t, usr.Username, event.Summary.Actor.Primary) + assert.Equal(t, usr.Uid, event.ECS.User.ID) + assert.Equal(t, usr.Username, event.ECS.User.Name) + assert.Equal(t, usr.Uid, event.ECS.User.Effective.ID) + assert.Equal(t, usr.Username, event.ECS.User.Effective.Name) +} + +func TestNameLookup(t *testing.T) { + usr, err := user.Current() + if err != nil { + t.Fatal(err) + } + group, err := user.LookupGroupId(usr.Gid) + if err != nil { + t.Fatal(err) + } + assert.Equal(t, usr.Uid, userLookup.LookupName(usr.Username)) + assert.Equal(t, group.Gid, groupLookup.LookupName(group.Name)) +} + +func TestHardcoded(t *testing.T) { + usr := user.User{Uid: "42", Username: "auditbeat_user"} + grp := user.Group{Gid: "43", Name: "auditbeat_group"} + HardcodeUsers(usr) + HardcodeGroups(grp) + assert.Equal(t, usr.Username, userLookup.LookupID(usr.Uid)) + assert.Equal(t, usr.Uid, userLookup.LookupName(usr.Username)) + assert.Equal(t, grp.Name, groupLookup.LookupID(grp.Gid)) + assert.Equal(t, grp.Gid, groupLookup.LookupName(grp.Name)) } diff --git a/aucoalesce/normalizations.yaml b/aucoalesce/normalizations.yaml index e7981f8..f2c0aa6 100644 --- a/aucoalesce/normalizations.yaml +++ b/aucoalesce/normalizations.yaml @@ -40,6 +40,11 @@ macros: - &ecs-auth category: authentication type: info + mappings: + - from: actor.primary + to: user + - from: actor.secondary + to: user.effective - &ecs-host category: host @@ -63,6 +68,24 @@ macros: - connection - info + - &ecs-user-modification-mappings + mappings: + - from: actor.primary + to: user + - from: actor.secondary + to: user.effective + - from: object.primary + to: user.target + + - &ecs-group-modification-mappings + mappings: + - from: actor.primary + to: user + - from: actor.secondary + to: user.effective + - from: object.primary + to: group.target + # Normalizations is a list of declarations specifying how to normalize the data # contained in an event. The normalization can be applied based on the syscall # name (e.g. connect, open) or based on the record type (e.g. USER_LOGIN). @@ -847,9 +870,11 @@ normalizations: what: account ecs: <<: *ecs-iam + <<: *ecs-group-modification-mappings type: - group - creation + # AUDIT_ADD_USER - User account added - record_types: ADD_USER action: added-user-account @@ -858,6 +883,7 @@ normalizations: what: account ecs: <<: *ecs-iam + <<: *ecs-user-modification-mappings type: - user - creation @@ -869,6 +895,7 @@ normalizations: what: account ecs: <<: *ecs-iam + <<: *ecs-group-modification-mappings type: - group - deletion @@ -880,6 +907,7 @@ normalizations: what: account ecs: <<: *ecs-iam + <<: *ecs-user-modification-mappings type: - user - deletion @@ -894,6 +922,13 @@ normalizations: type: - group - change + mappings: + - from: actor.primary + to: user + - from: actor.secondary + to: group.target + - from: uid.uid + to: user.effective # AUDIT_ROLE_ASSIGN - Admin assigned user to role - record_types: ROLE_ASSIGN action: assigned-user-role-to @@ -932,6 +967,13 @@ normalizations: type: - user - change + mappings: + - from: actor.primary + to: user + - from: actor.secondary + to: user.target + - from: uid.uid + to: user.effective # AUDIT_USER_CHAUTHTOK - User acct password or pin changed - <<: *macro-user-session record_types: USER_CHAUTHTOK @@ -941,6 +983,14 @@ normalizations: type: - user - change + mappings: + - from: actor.primary + to: user + - from: uid.uid + to: user.effective + - from: actor.secondary + to: user.target + # AUDIT_GRP_CHAUTHTOK - Group acct password or pin changed - <<: *macro-user-session record_types: GRP_CHAUTHTOK @@ -953,6 +1003,13 @@ normalizations: type: - group - change + mappings: + - from: actor.primary + to: user + - from: uid.uid + to: user.effective + - from: actor.secondary + to: group.target # Authentication related events diff --git a/aucoalesce/normalize.go b/aucoalesce/normalize.go index c8deb8f..6c68376 100644 --- a/aucoalesce/normalize.go +++ b/aucoalesce/normalize.go @@ -19,6 +19,7 @@ package aucoalesce import ( "fmt" + "strings" "github.com/pkg/errors" "gopkg.in/yaml.v2" @@ -76,9 +77,15 @@ type Normalization struct { ECS ECSMapping `yaml:"ecs"` } +type ECSFieldMapping struct { + From readReference `yaml:"from" json:"from"` + To writeReference `yaml:"to" json:"to"` +} + type ECSMapping struct { - Category Strings `yaml:"category"` - Type Strings `yaml:"type"` + Category Strings `yaml:"category"` + Type Strings `yaml:"type"` + Mappings []ECSFieldMapping `yaml:"mappings"` } type SubjectMapping struct { @@ -93,6 +100,102 @@ type ObjectMapping struct { PathIndex int `yaml:"path_index"` } +type readReference func(*Event) string +type writeReference func(*Event, string) + +var ( + fromFieldReferences = map[string]readReference{ + "actor.primary": func(event *Event) string { + return event.Summary.Actor.Primary + }, + "actor.secondary": func(event *Event) string { + return event.Summary.Actor.Secondary + }, + "object.primary": func(event *Event) string { + return event.Summary.Object.Primary + }, + "object.secondary": func(event *Event) string { + return event.Summary.Object.Secondary + }, + } + + fromDictReferences = map[string]func(key string) readReference{ + "data": func(key string) readReference { + return func(event *Event) string { + return event.Data[key] + } + }, + "uid": func(key string) readReference { + return func(event *Event) string { + return event.User.IDs[key] + } + }, + } + + toFieldReferences = map[string]writeReference{ + "user": func(event *Event, s string) { + event.ECS.User.set(s) + }, + "user.effective": func(event *Event, s string) { + event.ECS.User.Effective.set(s) + }, + "user.target": func(event *Event, s string) { + event.ECS.User.Target.set(s) + }, + "user.changes": func(event *Event, s string) { + event.ECS.User.Changes.set(s) + }, + "group": func(event *Event, s string) { + event.ECS.Group.set(s) + }, + "group.effective": func(event *Event, s string) { + event.ECS.Group.Effective.set(s) + }, + "group.target": func(event *Event, s string) { + event.ECS.Group.Target.set(s) + }, + "group.changes": func(event *Event, s string) { + event.ECS.Group.Changes.set(s) + }, + } +) + +func resolveFieldReference(fieldRef string) (ref readReference) { + if ref = fromFieldReferences[fieldRef]; ref != nil { + return + } + if dot := strings.IndexByte(fieldRef, '.'); dot != -1 { + dict := fieldRef[:dot] + key := fieldRef[dot+1:] + if accessor := fromDictReferences[dict]; accessor != nil { + return accessor(key) + } + } + return nil +} + +func (ref *readReference) UnmarshalYAML(unmarshal func(interface{}) error) error { + var fieldRef string + if err := unmarshal(&fieldRef); err != nil { + return err + } + if *ref = resolveFieldReference(fieldRef); *ref == nil { + return fmt.Errorf("field '%s' is not a valid from-reference for ECS mapping", fieldRef) + } + return nil +} + +func (ref *writeReference) UnmarshalYAML(unmarshal func(interface{}) error) error { + var fieldRef string + if err := unmarshal(&fieldRef); err != nil { + return err + } + if *ref = toFieldReferences[fieldRef]; *ref == nil { + return fmt.Errorf("field '%s' is not a valid to-reference for ECS mapping", fieldRef) + } + return nil +} + func LoadNormalizationConfig(b []byte) (syscalls map[string]*Normalization, recordTypes map[string][]*Normalization, err error) { c := &NormalizationConfig{} if err := yaml.Unmarshal(b, c); err != nil { diff --git a/aucoalesce/testdata/random-internet.json.golden b/aucoalesce/testdata/random-internet.json.golden index fe40295..b793c52 100644 --- a/aucoalesce/testdata/random-internet.json.golden +++ b/aucoalesce/testdata/random-internet.json.golden @@ -50,6 +50,16 @@ "type": [ "end" ] + }, + "user": { + "effective": {}, + "target": {}, + "changes": {} + }, + "group": { + "effective": {}, + "target": {}, + "changes": {} } } } diff --git a/aucoalesce/testdata/rhel-7-linux-3.10.0.json.golden b/aucoalesce/testdata/rhel-7-linux-3.10.0.json.golden index 2612dc2..a29eae4 100644 --- a/aucoalesce/testdata/rhel-7-linux-3.10.0.json.golden +++ b/aucoalesce/testdata/rhel-7-linux-3.10.0.json.golden @@ -46,6 +46,16 @@ "type": [ "change" ] + }, + "user": { + "effective": {}, + "target": {}, + "changes": {} + }, + "group": { + "effective": {}, + "target": {}, + "changes": {} } } } @@ -94,6 +104,16 @@ "type": [ "change" ] + }, + "user": { + "effective": {}, + "target": {}, + "changes": {} + }, + "group": { + "effective": {}, + "target": {}, + "changes": {} } } } @@ -158,6 +178,16 @@ "type": [ "info" ] + }, + "user": { + "effective": {}, + "target": {}, + "changes": {} + }, + "group": { + "effective": {}, + "target": {}, + "changes": {} } } } @@ -227,6 +257,16 @@ "type": [ "info" ] + }, + "user": { + "effective": {}, + "target": {}, + "changes": {} + }, + "group": { + "effective": {}, + "target": {}, + "changes": {} } } } @@ -279,6 +319,19 @@ "type": [ "start" ] + }, + "user": { + "id": "4294967295", + "effective": { + "id": "0" + }, + "target": {}, + "changes": {} + }, + "group": { + "effective": {}, + "target": {}, + "changes": {} } } } @@ -341,6 +394,19 @@ "type": [ "start" ] + }, + "user": { + "name": "unset", + "effective": { + "name": "root" + }, + "target": {}, + "changes": {} + }, + "group": { + "effective": {}, + "target": {}, + "changes": {} } } } @@ -396,6 +462,19 @@ "type": [ "end" ] + }, + "user": { + "id": "1000", + "effective": { + "id": "1000" + }, + "target": {}, + "changes": {} + }, + "group": { + "effective": {}, + "target": {}, + "changes": {} } } }, @@ -470,6 +549,16 @@ "type": [ "change" ] + }, + "user": { + "effective": {}, + "target": {}, + "changes": {} + }, + "group": { + "effective": {}, + "target": {}, + "changes": {} } } } @@ -588,6 +677,16 @@ "type": [ "creation" ] + }, + "user": { + "effective": {}, + "target": {}, + "changes": {} + }, + "group": { + "effective": {}, + "target": {}, + "changes": {} } } } @@ -696,6 +795,16 @@ "type": [ "creation" ] + }, + "user": { + "effective": {}, + "target": {}, + "changes": {} + }, + "group": { + "effective": {}, + "target": {}, + "changes": {} } } } diff --git a/aucoalesce/testdata/ubuntu-16.04-linux-4.13.0.json.golden b/aucoalesce/testdata/ubuntu-16.04-linux-4.13.0.json.golden index 0a2d2e1..5648178 100644 --- a/aucoalesce/testdata/ubuntu-16.04-linux-4.13.0.json.golden +++ b/aucoalesce/testdata/ubuntu-16.04-linux-4.13.0.json.golden @@ -65,6 +65,16 @@ "type": [ "info" ] + }, + "user": { + "effective": {}, + "target": {}, + "changes": {} + }, + "group": { + "effective": {}, + "target": {}, + "changes": {} } } }, @@ -187,6 +197,16 @@ "type": [ "deletion" ] + }, + "user": { + "effective": {}, + "target": {}, + "changes": {} + }, + "group": { + "effective": {}, + "target": {}, + "changes": {} } } }, diff --git a/aucoalesce/testdata/ubuntu-16.10-linux-4.8.0.json.golden b/aucoalesce/testdata/ubuntu-16.10-linux-4.8.0.json.golden index 4e3ab55..598c222 100644 --- a/aucoalesce/testdata/ubuntu-16.10-linux-4.8.0.json.golden +++ b/aucoalesce/testdata/ubuntu-16.10-linux-4.8.0.json.golden @@ -65,6 +65,16 @@ "type": [ "info" ] + }, + "user": { + "effective": {}, + "target": {}, + "changes": {} + }, + "group": { + "effective": {}, + "target": {}, + "changes": {} } } } @@ -110,6 +120,16 @@ "type": [ "change" ] + }, + "user": { + "effective": {}, + "target": {}, + "changes": {} + }, + "group": { + "effective": {}, + "target": {}, + "changes": {} } } } @@ -156,6 +176,16 @@ "type": [ "change" ] + }, + "user": { + "effective": {}, + "target": {}, + "changes": {} + }, + "group": { + "effective": {}, + "target": {}, + "changes": {} } } } @@ -260,6 +290,16 @@ "type": [ "start" ] + }, + "user": { + "effective": {}, + "target": {}, + "changes": {} + }, + "group": { + "effective": {}, + "target": {}, + "changes": {} } } } @@ -328,6 +368,16 @@ "change", "info" ] + }, + "user": { + "effective": {}, + "target": {}, + "changes": {} + }, + "group": { + "effective": {}, + "target": {}, + "changes": {} } } } @@ -375,6 +425,16 @@ "type": [ "start" ] + }, + "user": { + "effective": {}, + "target": {}, + "changes": {} + }, + "group": { + "effective": {}, + "target": {}, + "changes": {} } } } @@ -423,6 +483,19 @@ "type": [ "info" ] + }, + "user": { + "id": "0", + "effective": { + "name": "root" + }, + "target": {}, + "changes": {} + }, + "group": { + "effective": {}, + "target": {}, + "changes": {} } } }, @@ -481,6 +554,19 @@ "type": [ "start" ] + }, + "user": { + "name": "unset", + "effective": { + "name": "(invalid user)" + }, + "target": {}, + "changes": {} + }, + "group": { + "effective": {}, + "target": {}, + "changes": {} } } } @@ -537,6 +623,19 @@ "type": [ "start" ] + }, + "user": { + "id": "1001", + "effective": { + "id": "1001" + }, + "target": {}, + "changes": {} + }, + "group": { + "effective": {}, + "target": {}, + "changes": {} } } } @@ -593,6 +692,19 @@ "type": [ "info" ] + }, + "user": { + "id": "1001", + "effective": { + "name": "andrew_kroh" + }, + "target": {}, + "changes": {} + }, + "group": { + "effective": {}, + "target": {}, + "changes": {} } } } @@ -671,6 +783,16 @@ "connection", "start" ] + }, + "user": { + "effective": {}, + "target": {}, + "changes": {} + }, + "group": { + "effective": {}, + "target": {}, + "changes": {} } } } @@ -736,6 +858,16 @@ "type": [ "change" ] + }, + "user": { + "effective": {}, + "target": {}, + "changes": {} + }, + "group": { + "effective": {}, + "target": {}, + "changes": {} } } } @@ -814,6 +946,16 @@ "connection", "start" ] + }, + "user": { + "effective": {}, + "target": {}, + "changes": {} + }, + "group": { + "effective": {}, + "target": {}, + "changes": {} } } } @@ -879,6 +1021,16 @@ "type": [ "start" ] + }, + "user": { + "effective": {}, + "target": {}, + "changes": {} + }, + "group": { + "effective": {}, + "target": {}, + "changes": {} } } } diff --git a/aucoalesce/testdata/ubuntu-17.04-linux-4.10.0.json.golden b/aucoalesce/testdata/ubuntu-17.04-linux-4.10.0.json.golden index 8f85928..139cffe 100644 --- a/aucoalesce/testdata/ubuntu-17.04-linux-4.10.0.json.golden +++ b/aucoalesce/testdata/ubuntu-17.04-linux-4.10.0.json.golden @@ -43,6 +43,19 @@ "type": [ "info" ] + }, + "user": { + "name": "unset", + "effective": { + "name": "root" + }, + "target": {}, + "changes": {} + }, + "group": { + "effective": {}, + "target": {}, + "changes": {} } } }, @@ -94,6 +107,19 @@ "type": [ "info" ] + }, + "user": { + "id": "0", + "effective": { + "name": "root" + }, + "target": {}, + "changes": {} + }, + "group": { + "effective": {}, + "target": {}, + "changes": {} } } }, @@ -203,6 +229,16 @@ "type": [ "start" ] + }, + "user": { + "effective": {}, + "target": {}, + "changes": {} + }, + "group": { + "effective": {}, + "target": {}, + "changes": {} } } } @@ -251,6 +287,19 @@ "type": [ "info" ] + }, + "user": { + "name": "unset", + "effective": { + "name": "root" + }, + "target": {}, + "changes": {} + }, + "group": { + "effective": {}, + "target": {}, + "changes": {} } } }, @@ -302,6 +351,19 @@ "type": [ "info" ] + }, + "user": { + "id": "1001", + "effective": { + "name": "root" + }, + "target": {}, + "changes": {} + }, + "group": { + "effective": {}, + "target": {}, + "changes": {} } } }, @@ -354,6 +416,21 @@ "user", "change" ] + }, + "user": { + "id": "1001", + "effective": { + "id": "1002" + }, + "target": { + "name": "akroh" + }, + "changes": {} + }, + "group": { + "effective": {}, + "target": {}, + "changes": {} } } }, @@ -403,6 +480,16 @@ "type": [ "start" ] + }, + "user": { + "effective": {}, + "target": {}, + "changes": {} + }, + "group": { + "effective": {}, + "target": {}, + "changes": {} } } } @@ -451,6 +538,19 @@ "type": [ "info" ] + }, + "user": { + "id": "0", + "effective": { + "name": "root" + }, + "target": {}, + "changes": {} + }, + "group": { + "effective": {}, + "target": {}, + "changes": {} } } }, @@ -509,6 +609,19 @@ "type": [ "info" ] + }, + "user": { + "name": "unset", + "effective": { + "id": "0" + }, + "target": {}, + "changes": {} + }, + "group": { + "effective": {}, + "target": {}, + "changes": {} } } } @@ -564,6 +677,19 @@ "type": [ "start" ] + }, + "user": { + "name": "unset", + "effective": { + "name": "(invalid user)" + }, + "target": {}, + "changes": {} + }, + "group": { + "effective": {}, + "target": {}, + "changes": {} } } } @@ -612,6 +738,19 @@ "type": [ "info" ] + }, + "user": { + "id": "0", + "effective": { + "name": "root" + }, + "target": {}, + "changes": {} + }, + "group": { + "effective": {}, + "target": {}, + "changes": {} } } }, @@ -681,6 +820,16 @@ "type": [ "info" ] + }, + "user": { + "effective": {}, + "target": {}, + "changes": {} + }, + "group": { + "effective": {}, + "target": {}, + "changes": {} } } } @@ -746,6 +895,16 @@ "type": [ "info" ] + }, + "user": { + "effective": {}, + "target": {}, + "changes": {} + }, + "group": { + "effective": {}, + "target": {}, + "changes": {} } } } @@ -867,6 +1026,16 @@ "type": [ "change" ] + }, + "user": { + "effective": {}, + "target": {}, + "changes": {} + }, + "group": { + "effective": {}, + "target": {}, + "changes": {} } } } @@ -966,6 +1135,16 @@ "type": [ "deletion" ] + }, + "user": { + "effective": {}, + "target": {}, + "changes": {} + }, + "group": { + "effective": {}, + "target": {}, + "changes": {} } } } diff --git a/aucoalesce/znormalize_data.go b/aucoalesce/znormalize_data.go index 1505132..36d4ccc 100644 --- a/aucoalesce/znormalize_data.go +++ b/aucoalesce/znormalize_data.go @@ -31,7 +31,7 @@ func asset(key string) ([]byte, error) { assets = map[string][]byte{} var value []byte - value, _ = base64.StdEncoding.DecodeString("LS0tCiMgTWFjcm9zIGRlY2xhcmVzIHNvbWUgWUFNTCBhbmNob3JzIHRoYXQgY2FuIGJlIHJlZmVyZW5jZWQgZm9yIHNvbWUgY29tbW9uCiMgb2JqZWN0IHR5cGUgbm9ybWFsaXphdGlvbnMgbGlrZSB1c2VyLXNlc3Npb24sIHNvY2tldCwgb3IgcHJvY2Vzcy4KbWFjcm9zOgogIC0gJmRlZmF1bHRzCiAgICBzdWJqZWN0OgogICAgICBwcmltYXJ5OiBhdWlkCiAgICAgIHNlY29uZGFyeTogdWlkCiAgICBob3c6IFtleGUsIGNvbW1dCgogIC0gJm1hY3JvLXVzZXItc2Vzc2lvbgogICAgc3ViamVjdDoKICAgICAgcHJpbWFyeTogYXVpZAogICAgICBzZWNvbmRhcnk6IFthY2N0LCBpZCwgdWlkXQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiB0ZXJtaW5hbAogICAgICBzZWNvbmRhcnk6IFthZGRyLCBob3N0bmFtZV0KICAgICAgd2hhdDogdXNlci1zZXNzaW9uCiAgICBob3c6IFtleGUsIHRlcm1pbmFsXQoKICAtICZtYWNyby1zb2NrZXQKICAgIDw8OiAqZGVmYXVsdHMKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogW2FkZHIsIHBhdGhdCiAgICAgIHNlY29uZGFyeTogcG9ydAogICAgICB3aGF0OiBzb2NrZXQKCiAgLSAmbWFjcm8tcHJvY2VzcwogICAgPDw6ICpkZWZhdWx0cwogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBbY21kLCBleGUsIGNvbW1dCiAgICAgIHNlY29uZGFyeTogcGlkCiAgICAgIHdoYXQ6IHByb2Nlc3MKICAgIGhvdzogdGVybWluYWwKCiAgLSAmZWNzLWlhbQogICAgY2F0ZWdvcnk6IGlhbQogICAgdHlwZTogaW5mbwoKICAtICZlY3MtYXV0aAogICAgY2F0ZWdvcnk6IGF1dGhlbnRpY2F0aW9uCiAgICB0eXBlOiBpbmZvCgogIC0gJmVjcy1ob3N0CiAgICBjYXRlZ29yeTogaG9zdAogICAgdHlwZTogaW5mbwoKICAtICZlY3MtcHJvY2VzcwogICAgY2F0ZWdvcnk6IHByb2Nlc3MKICAgIHR5cGU6IGluZm8KCiAgLSAmZWNzLWZpbGUKICAgIGNhdGVnb3J5OiBmaWxlCiAgICB0eXBlOiBpbmZvCgogIC0gJmVjcy1kcml2ZXIKICAgIGNhdGVnb3J5OiBkcml2ZXIKICAgIHR5cGU6IGluZm8KCiAgLSAmZWNzLW5ldHdvcmsKICAgIGNhdGVnb3J5OiBuZXR3b3JrCiAgICB0eXBlOgogICAgICAtIGNvbm5lY3Rpb24KICAgICAgLSBpbmZvCgojIE5vcm1hbGl6YXRpb25zIGlzIGEgbGlzdCBvZiBkZWNsYXJhdGlvbnMgc3BlY2lmeWluZyBob3cgdG8gbm9ybWFsaXplIHRoZSBkYXRhCiMgY29udGFpbmVkIGluIGFuIGV2ZW50LiBUaGUgbm9ybWFsaXphdGlvbiBjYW4gYmUgYXBwbGllZCBiYXNlZCBvbiB0aGUgc3lzY2FsbAojIG5hbWUgKGUuZy4gY29ubmVjdCwgb3Blbikgb3IgYmFzZWQgb24gdGhlIHJlY29yZCB0eXBlIChlLmcuIFVTRVJfTE9HSU4pLgojIE5vIHR3byBub3JtYWxpemF0aW9ucyBjYW4gYXBwbHkgdG8gdGhlIHNhbWUgc3lzY2FsbCBvciByZWNvcmQgdHlwZS4gVGhpcwojIHdpbGwgcmVzdWx0IGluIGEgZmFpbHVyZSBhdCBsb2FkIHRpbWUuCiMKIyBFYWNoIG5vcm1hbGl6YXRpb24gc2hvdWxkIHNwZWNpZnk6CiMgICBhY3Rpb24gLSB3aGF0IGhhcHBlbmVkCiMgICBhY3RvciAgLSB3aG8gZGlkIHRoaXMgb3Igd2hvIHRyaWdnZXJlZCB0aGUgZXZlbnQKIyAgIG9iamVjdCAtIHdoYXQgd2FzIHRoZSAidGhpbmciIGludm9sdmVkIGluIHRoZSBhY3Rpb24gKGUuZy4gcHJvY2Vzcywgc29ja2V0KQojICAgaG93ICAgIC0gaG93IHdhcyB0aGUgYWN0aW9uIHBlcmZvcm1lZCAoZS5nLiBleGUgb3IgdGVybWluYWwpCm5vcm1hbGl6YXRpb25zOgogIC0gZWNzOiAqZWNzLXByb2Nlc3MKICAgIHN5c2NhbGxzOgogICAgICAtICcqJyAjIHRoaXMgaXMgYSBjYXRjaCBhbGwKICAtIGFjdGlvbjogb3BlbmVkLWZpbGUKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgc3lzY2FsbHM6CiAgICAgICMgY3JlYXQgLSBvcGVuIGFuZCBwb3NzaWJseSBjcmVhdGUgYSBmaWxlCiAgICAgIC0gY3JlYXQKICAgIGVjczoKICAgICAgPDw6ICplY3MtZmlsZQogICAgICB0eXBlOiBjcmVhdGlvbgogIC0gYWN0aW9uOiBvcGVuZWQtZmlsZQogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBmYWxsb2NhdGUgLSBtYW5pcHVsYXRlIGZpbGUgc3BhY2UKICAgICAgLSBmYWxsb2NhdGUKICAgICAgIyB0cnVuY2F0ZSAtIHRydW5jYXRlIGEgZmlsZSB0byBhIHNwZWNpZmllZCBsZW5ndGgKICAgICAgLSB0cnVuY2F0ZQogICAgICAjIGZ0cnVuY2F0ZSAtIHRydW5jYXRlIGEgZmlsZSB0byBhIHNwZWNpZmllZCBsZW5ndGgKICAgICAgLSBmdHJ1bmNhdGUKICAgIGVjczoKICAgICAgPDw6ICplY3MtZmlsZQogICAgICAjIHRlY2huaWNhbGx5IHlvdSBjYW4gdHJ1bmNhdGUgYSBmaWxlIHRvIHRoZSBzYW1lIGxlbmd0aAogICAgICAjIGJ1dCByZWdhcmRsZXNzLCB3ZSBjb25zaWRlciB0aGlzIGEgY2hhbmdlCiAgICAgIHR5cGU6IGNoYW5nZQogIC0gYWN0aW9uOiBvcGVuZWQtZmlsZQogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBvcGVuIC0gb3BlbiBhbmQgcG9zc2libHkgY3JlYXRlIGEgZmlsZQogICAgICAtIG9wZW4KICAgICAgIyBvcGVuYXQgLSBvcGVuIGFuZCBwb3NzaWJseSBjcmVhdGUgYSBmaWxlCiAgICAgIC0gb3BlbmF0CiAgICAgICMgcmVhZGxpbmsgLSByZWFkIHZhbHVlIG9mIGEgc3ltYm9saWMgbGluawogICAgICAtIHJlYWRsaW5rCiAgICAgICMgcmVhZGxpbmthdCAtIHJlYWQgdmFsdWUgb2YgYSBzeW1ib2xpYyBsaW5rCiAgICAgIC0gcmVhZGxpbmthdAogICAgZWNzOiAqZWNzLWZpbGUKICAtIGFjdGlvbjogcmVhZC1maWxlCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIHJlYWQgLSByZWFkIGZyb20gYSBmaWxlIGRlc2NyaXB0b3IKICAgICAgLSByZWFkCiAgICBlY3M6ICplY3MtZmlsZQogIC0gYWN0aW9uOiB3cm90ZS10by1maWxlCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIHdyaXRlIC0gd3JpdGUgdG8gYSBmaWxlIGRlc2NyaXB0b3IKICAgICAgLSB3cml0ZQogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgIHR5cGU6IGNoYW5nZQogIC0gYWN0aW9uOiBjaGFuZ2VkLWZpbGUtYXR0cmlidXRlcy1vZgogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBzZXR4YXR0ciAtIHNldCBhbiBleHRlbmRlZCBhdHRyaWJ1dGUgdmFsdWUKICAgICAgLSBzZXR4YXR0cgogICAgICAjIGZzZXR4YXR0ciAtIHNldCBhbiBleHRlbmRlZCBhdHRyaWJ1dGUgdmFsdWUKICAgICAgLSBmc2V0eGF0dHIKICAgICAgIyBsc2V0eGF0dHIgLSBzZXQgYW4gZXh0ZW5kZWQgYXR0cmlidXRlIHZhbHVlCiAgICAgIC0gbHNldHhhdHRyCiAgICAgICMgcmVtb3ZleGF0dHIgLSByZW1vdmUgYW4gZXh0ZW5kZWQgYXR0cmlidXRlCiAgICAgIC0gcmVtb3ZleGF0dHIKICAgICAgIyBmcmVtb3ZleGF0dHIgLSByZW1vdmUgYW4gZXh0ZW5kZWQgYXR0cmlidXRlCiAgICAgIC0gZnJlbW92ZXhhdHRyCiAgICAgICMgbHJlbW92ZXhhdHRyIC0gcmVtb3ZlIGFuIGV4dGVuZGVkIGF0dHJpYnV0ZQogICAgICAtIGxyZW1vdmV4YXR0cgogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgIHR5cGU6IGNoYW5nZQogIC0gYWN0aW9uOiBjaGFuZ2VkLWZpbGUtcGVybWlzc2lvbnMtb2YKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgc3lzY2FsbHM6CiAgICAgICMgY2htb2QgLSBjaGFuZ2UgcGVybWlzc2lvbnMgb2YgYSBmaWxlCiAgICAgIC0gY2htb2QKICAgICAgIyBmY2htb2QgLSBjaGFuZ2UgcGVybWlzc2lvbnMgb2YgYSBmaWxlCiAgICAgIC0gZmNobW9kCiAgICAgICMgZmNobW9kYXQgLSBjaGFuZ2UgcGVybWlzc2lvbnMgb2YgYSBmaWxlCiAgICAgIC0gZmNobW9kYXQKICAgIGVjczoKICAgICAgPDw6ICplY3MtZmlsZQogICAgICB0eXBlOiBjaGFuZ2UKICAtIGFjdGlvbjogY2hhbmdlZC1maWxlLW93bmVyc2hpcC1vZgogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBjaG93biAtIGNoYW5nZSBvd25lcnNoaXAgb2YgYSBmaWxlCiAgICAgIC0gY2hvd24KICAgICAgIyBmY2hvd24gLSBjaGFuZ2Ugb3duZXJzaGlwIG9mIGEgZmlsZQogICAgICAtIGZjaG93bgogICAgICAjIGZjaG93bmF0IC0gY2hhbmdlIG93bmVyc2hpcCBvZiBhIGZpbGUKICAgICAgLSBmY2hvd25hdAogICAgICAjIGxjaG93biAtIGNoYW5nZSBvd25lcnNoaXAgb2YgYSBmaWxlCiAgICAgIC0gbGNob3duCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgdHlwZTogY2hhbmdlCiAgLSBhY3Rpb246IGxvYWRlZC1rZXJuZWwtbW9kdWxlCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgICAgcHJpbWFyeTogbmFtZQogICAgcmVjb3JkX3R5cGVzOgogICAgICAtIEtFUk5fTU9EVUxFCiAgICBzeXNjYWxsczoKICAgICAgIyBmaW5pdF9tb2R1bGUgLSBsb2FkIGEga2VybmVsIG1vZHVsZQogICAgICAtIGZpbml0X21vZHVsZQogICAgICAjIGluaXRfbW9kdWxlIC0gbG9hZCBhIGtlcm5lbCBtb2R1bGUKICAgICAgLSBpbml0X21vZHVsZQogICAgZWNzOgogICAgICA8PDogKmVjcy1kcml2ZXIKICAgICAgdHlwZTogc3RhcnQKICAtIGFjdGlvbjogdW5sb2FkZWQta2VybmVsLW1vZHVsZQogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBkZWxldGVfbW9kdWxlIC0gdW5sb2FkIGEga2VybmVsIG1vZHVsZQogICAgICAtIGRlbGV0ZV9tb2R1bGUKICAgIGVjczoKICAgICAgPDw6ICplY3MtZHJpdmVyCiAgICAgIHR5cGU6IGVuZAogIC0gYWN0aW9uOiBjcmVhdGVkLWRpcmVjdG9yeQogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICAgIHBhdGhfaW5kZXg6IDEKICAgIHN5c2NhbGxzOgogICAgICAjIG1rZGlyIC0gY3JlYXRlIGEgZGlyZWN0b3J5CiAgICAgIC0gbWtkaXIKICAgICAgIyBta2RpcmF0IC0gY3JlYXRlIGEgZGlyZWN0b3J5CiAgICAgIC0gbWtkaXJhdAogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgIHR5cGU6IGNyZWF0aW9uCiAgLSBhY3Rpb246IG1vdW50ZWQKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZXN5c3RlbQogICAgICBwYXRoX2luZGV4OiAxCiAgICBzeXNjYWxsczoKICAgICAgIyBtb3VudCAtIG1vdW50IGZpbGVzeXN0ZW0KICAgICAgLSBtb3VudAogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgICMgc2luY2UgYSBuZXcgbW91bnQgYXBwZWFycyBvbiB0aGUgc3lzdGVtCiAgICAgICMgd2UgY29uc2lkZXIgdGhpcyBhIGhpZ2gtbGV2ZWwgImNyZWF0aW9uIiBldmVudAogICAgICB0eXBlOiBjcmVhdGlvbgogIC0gYWN0aW9uOiByZW5hbWVkCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgICAgcGF0aF9pbmRleDogMgogICAgc3lzY2FsbHM6CiAgICAgICMgcmVuYW1lIC0gY2hhbmdlIHRoZSBuYW1lIG9yIGxvY2F0aW9uIG9mIGEgZmlsZQogICAgICAtIHJlbmFtZQogICAgICAjIHJlbmFtZWF0IC0gY2hhbmdlIHRoZSBuYW1lIG9yIGxvY2F0aW9uIG9mIGEgZmlsZQogICAgICAtIHJlbmFtZWF0CiAgICAgICMgcmVuYW1lYXQyIC0gY2hhbmdlIHRoZSBuYW1lIG9yIGxvY2F0aW9uIG9mIGEgZmlsZQogICAgICAtIHJlbmFtZWF0MgogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgIHR5cGU6IGNoYW5nZQogIC0gYWN0aW9uOiBjaGVja2VkLW1ldGFkYXRhLW9mCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIGFjY2VzcyAtIGNoZWNrIHVzZXIncyBwZXJtaXNzaW9ucyBmb3IgYSBmaWxlCiAgICAgIC0gYWNjZXNzCiAgICAgICMgZmFjY2Vzc2F0IC0gY2hlY2sgdXNlcidzIHBlcm1pc3Npb25zIGZvciBhIGZpbGUKICAgICAgLSBmYWNjZXNzYXQKICAgICAgIyBmc3RhdGF0IC0gZ2V0IGZpbGUgc3RhdHVzCiAgICAgIC0gZnN0YXRhdAogICAgICAjIG5ld2ZzdGF0YXQgLSBnZXQgZmlsZSBzdGF0dXMKICAgICAgLSBuZXdmc3RhdGF0CiAgICAgICMgc3RhdCAtIGdldCBmaWxlIHN0YXR1cwogICAgICAtIHN0YXQKICAgICAgIyBzdGF0NjQgLSBnZXQgZmlsZSBzdGF0dXMKICAgICAgLSBzdGF0NjQKICAgICAgIyBmc3RhdCAtIGdldCBmaWxlIHN0YXR1cwogICAgICAtIGZzdGF0CiAgICAgICMgbHN0YXQgLSBnZXQgZmlsZSBzdGF0dXMKICAgICAgLSBsc3RhdAogICAgICAjIGdldHhhdHRyIC0gcmV0cmlldmUgYW4gZXh0ZW5kZWQgYXR0cmlidXRlIHZhbHVlCiAgICAgIC0gZ2V0eGF0dHIKICAgICAgIyBsZ2V0eGF0dHIgLSByZXRyaWV2ZSBhbiBleHRlbmRlZCBhdHRyaWJ1dGUgdmFsdWUKICAgICAgLSBsZ2V0eGF0dHIKICAgICAgIyBmZ2V0eGF0dHIgLSByZXRyaWV2ZSBhbiBleHRlbmRlZCBhdHRyaWJ1dGUgdmFsdWUKICAgICAgLSBmZ2V0eGF0dHIKICAgIGVjczogKmVjcy1maWxlCiAgLSBhY3Rpb246IGNoZWNrZWQtZmlsZXN5c3RlbS1tZXRhZGF0YS1vZgogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlc3lzdGVtCiAgICBzeXNjYWxsczoKICAgICAgIyBzdGF0ZnMgLSBnZXQgZmlsZXN5c3RlbSBzdGF0aXN0aWNzCiAgICAgIC0gc3RhdGZzCiAgICAgICMgZnN0YXRmcyAtIGdldCBmaWxlc3lzdGVtIHN0YXRpc3RpY3MKICAgICAgLSBmc3RhdGZzCiAgICBlY3M6ICplY3MtZmlsZQogIC0gYWN0aW9uOiBzeW1saW5rZWQKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgc3lzY2FsbHM6CiAgICAgICMgc3ltbGluayAtIG1ha2UgYSBuZXcgbmFtZSBmb3IgYSBmaWxlCiAgICAgIC0gc3ltbGluawogICAgICAjIHN5bWxpbmthdCAtIG1ha2UgYSBuZXcgbmFtZSBmb3IgYSBmaWxlCiAgICAgIC0gc3ltbGlua2F0CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgIyAiY3JlYXRpb24iIHNpbmNlIHdlJ3JlIGNyZWF0aW5nIGEgbmV3IGZpbGUgc3lzdGVtCiAgICAgICMgZW50cnkgZm9yIHRoZSBzeW1saW5rCiAgICAgIHR5cGU6IGNyZWF0aW9uCiAgLSBhY3Rpb246IHVubW91bnRlZAogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlc3lzdGVtCiAgICBzeXNjYWxsczoKICAgICAgIyB1bW91bnQgLSB1bm1vdW50IGZpbGVzeXN0ZW0KICAgICAgLSB1bW91bnQKICAgICAgIyB1bW91bnQyIC0gdW5tb3VudCBmaWxlc3lzdGVtCiAgICAgIC0gdW1vdW50MgogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgICMgImRlbGV0aW9uIiB0byBtaXJyb3IgdGhlICJjcmVhdGlvbiIgb2YgdGhlIG1vdW50CiAgICAgIHR5cGU6IGRlbGV0aW9uCiAgLSBhY3Rpb246IGRlbGV0ZWQKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgc3lzY2FsbHM6CiAgICAgICMgcm1kaXIgLSBkZWxldGUgYSBkaXJlY3RvcnkKICAgICAgLSBybWRpcgogICAgICAjIHVubGluayAtIGRlbGV0ZSBhIG5hbWUgYW5kIHBvc3NpYmx5IHRoZSBmaWxlIGl0IHJlZmVycyB0bwogICAgICAtIHVubGluawogICAgICAjIHVubGlua2F0IC0gZGVsZXRlIGEgbmFtZSBhbmQgcG9zc2libHkgdGhlIGZpbGUgaXQgcmVmZXJzIHRvCiAgICAgIC0gdW5saW5rYXQKICAgIGVjczoKICAgICAgPDw6ICplY3MtZmlsZQogICAgICB0eXBlOiBkZWxldGlvbgogIC0gYWN0aW9uOiBjaGFuZ2VkLXRpbWVzdGFtcC1vZgogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyB1dGltZSAtIGNoYW5nZSBmaWxlIGxhc3QgYWNjZXNzIGFuZCBtb2RpZmljYXRpb24gdGltZXMKICAgICAgLSB1dGltZQogICAgICAjIHV0aW1lcyAtIGNoYW5nZSBmaWxlIGxhc3QgYWNjZXNzIGFuZCBtb2RpZmljYXRpb24gdGltZXMKICAgICAgLSB1dGltZXMKICAgICAgIyBmdXRpbWVzYXQgLSBjaGFuZ2UgdGltZXN0YW1wcyBvZiBhIGZpbGUgcmVsYXRpdmUgdG8gYSBcIGRpcmVjdG9yeSBmaWxlIGRlc2NyaXB0b3IKICAgICAgLSBmdXRpbWVzYXQKICAgICAgIyBmdXRpbWVucyAtIGNoYW5nZSBmaWxlIHRpbWVzdGFtcHMgd2l0aCBuYW5vc2Vjb25kIHByZWNpc2lvbgogICAgICAtIGZ1dGltZW5zCiAgICAgICMgdXRpbWVuc2F0IC0gY2hhbmdlIGZpbGUgdGltZXN0YW1wcyB3aXRoIG5hbm9zZWNvbmQgcHJlY2lzaW9uCiAgICAgIC0gdXRpbWVuc2F0CiAgICBlY3M6ICplY3MtZmlsZQogIC0gYWN0aW9uOiBleGVjdXRlZAogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBleGVjdmUgLSBleGVjdXRlIHByb2dyYW0KICAgICAgLSBleGVjdmUKICAgICAgIyBleGVjdmVhdCAtIGV4ZWN1dGUgcHJvZ3JhbSByZWxhdGl2ZSB0byBhIGRpcmVjdG9yeSBmaWxlIGRlc2NyaXB0b3IKICAgICAgLSBleGVjdmVhdAogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IHN0YXJ0CiAgLSBhY3Rpb246IGxpc3Rlbi1mb3ItY29ubmVjdGlvbnMKICAgIG9iamVjdDoKICAgICAgd2hhdDogc29ja2V0CiAgICBzeXNjYWxsczoKICAgICAgIyBsaXN0ZW4tIGxpc3RlbiBmb3IgY29ubmVjdGlvbnMgb24gYSBzb2NrZXQKICAgICAgLSBsaXN0ZW4KICAgIGVjczoKICAgICAgPDw6ICplY3MtbmV0d29yawogICAgICB0eXBlOiBzdGFydAogIC0gYWN0aW9uOiBhY2NlcHRlZC1jb25uZWN0aW9uLWZyb20KICAgIG9iamVjdDoKICAgICAgd2hhdDogc29ja2V0CiAgICBzeXNjYWxsczoKICAgICAgIyBhY2NlcHQgLSBhY2NlcHQgYSBjb25uZWN0aW9uIG9uIGEgc29ja2V0CiAgICAgIC0gYWNjZXB0CiAgICAgICMgYWNjZXB0NCAtIGFjY2VwdCBhIGNvbm5lY3Rpb24gb24gYSBzb2NrZXQKICAgICAgLSBhY2NlcHQ0CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLW5ldHdvcmsKICAgICAgdHlwZToKICAgICAgICAtIGNvbm5lY3Rpb24KICAgICAgICAtIHN0YXJ0CiAgLSBhY3Rpb246IGJvdW5kLXNvY2tldAogICAgb2JqZWN0OgogICAgICB3aGF0OiBzb2NrZXQKICAgIHN5c2NhbGxzOgogICAgICAjIGJpbmQgLWJpbmQgYSBuYW1lIHRvIGEgc29ja2V0CiAgICAgIC0gYmluZAogICAgZWNzOgogICAgICA8PDogKmVjcy1uZXR3b3JrCiAgICAgIHR5cGU6IHN0YXJ0CiAgLSBhY3Rpb246IGNvbm5lY3RlZC10bwogICAgb2JqZWN0OgogICAgICB3aGF0OiBzb2NrZXQKICAgIHN5c2NhbGxzOgogICAgICAtIGNvbm5lY3QKICAgIGVjczoKICAgICAgPDw6ICplY3MtbmV0d29yawogICAgICB0eXBlOgogICAgICAgIC0gY29ubmVjdGlvbgogICAgICAgIC0gc3RhcnQKICAtIGFjdGlvbjogcmVjZWl2ZWQtZnJvbQogICAgb2JqZWN0OgogICAgICB3aGF0OiBzb2NrZXQKICAgIHN5c2NhbGxzOgogICAgICAjIHJlY3YgLSByZWNlaXZlIGEgbWVzc2FnZSBmcm9tIGEgc29ja2V0CiAgICAgIC0gcmVjdgogICAgICAjIHJlY3Zmcm9tIC0gcmVjZWl2ZSBhIG1lc3NhZ2UgZnJvbSBhIHNvY2tldAogICAgICAtIHJlY3Zmcm9tCiAgICAgICMgcmVjdm1zZyAtIHJlY2VpdmUgYSBtZXNzYWdlIGZyb20gYSBzb2NrZXQKICAgICAgLSByZWN2bXNnCiAgICAgICMgcmVjdm1tc2cgLSByZWNlaXZlIG11bHRpcGxlIG1lc3NhZ2VzIG9uIGEgc29ja2V0CiAgICAgIC0gcmVjdm1tc2cKICAgIGVjczoKICAgICAgPDw6ICplY3MtbmV0d29yawogIC0gYWN0aW9uOiBzZW50LXRvCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNvY2tldAogICAgc3lzY2FsbHM6CiAgICAgICMgc2VuZCAtIHNlbmQgYSBtZXNzYWdlIG9uIGEgc29ja2V0CiAgICAgIC0gc2VuZAogICAgICAjIHNlbmR0byAtIHNlbmQgYSBtZXNzYWdlIG9uIGEgc29ja2V0CiAgICAgIC0gc2VuZHRvCiAgICAgICMgc2VuZG1zZyAtIHNlbmQgYSBtZXNzYWdlIG9uIGEgc29ja2V0CiAgICAgIC0gc2VuZG1zZwogICAgICAjIHNlbmRtbXNnIC0gc2VuZCBtdWx0aXBsZSBtZXNzYWdlcyBvbiBhIHNvY2tldAogICAgICAtIHNlbmRtbXNnCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLW5ldHdvcmsKICAtIGFjdGlvbjoga2lsbGVkLXBpZAogICAgb2JqZWN0OgogICAgICB3aGF0OiBwcm9jZXNzCiAgICBzeXNjYWxsczoKICAgICAgIyBraWxsIC0gc2VuZCBzaWduYWwgdG8gYSBwcm9jZXNzCiAgICAgIC0ga2lsbAogICAgICAjIHRraWxsIC0gc2VuZCBhIHNpZ25hbCB0byBhIHRocmVhZAogICAgICAtIHRraWxsCiAgICAgICMgdGdraWxsIC0gc2VuZCBhIHNpZ25hbCB0byBhIHRocmVhZAogICAgICAtIHRna2lsbAogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IGVuZAogIC0gYWN0aW9uOiBjaGFuZ2VkLWlkZW50aXR5LW9mCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHByb2Nlc3MKICAgIGhvdzogc3lzY2FsbAogICAgc3lzY2FsbHM6CiAgICAgICMgc2V0dWlkIC0gc2V0IHVzZXIgaWRlbnRpdHkKICAgICAgLSBzZXR1aWQKICAgICAgIyBzZXRldWlkIC0gc2V0IGVmZmVjdGl2ZSB1c2VyIG9yIGdyb3VwIElECiAgICAgIC0gc2V0ZXVpZAogICAgICAjIHNldGZzdWlkIC0gc2V0IHVzZXIgaWRlbnRpdHkgdXNlZCBmb3IgZmlsZXN5c3RlbSBjaGVja3MKICAgICAgLSBzZXRmc3VpZAogICAgICAjIHNldHJldWlkIC0gc2V0IHJlYWwgYW5kL29yIGVmZmVjdGl2ZSB1c2VyIG9yIGdyb3VwIElECiAgICAgIC0gc2V0cmV1aWQKICAgICAgIyBzZXRnaWQgLSBzZXQgZ3JvdXAgaWRlbnRpdHkKICAgICAgLSBzZXRnaWQKICAgICAgIyBzZXRlZ2lkIC0gc2V0IGVmZmVjdGl2ZSB1c2VyIG9yIGdyb3VwIElECiAgICAgIC0gc2V0ZWdpZAogICAgICAjIHNldGZzZ2lkIC0gc2V0IGdyb3VwIGlkZW50aXR5IHVzZWQgZm9yIGZpbGVzeXN0ZW0gY2hlY2tzCiAgICAgIC0gc2V0ZnNnaWQKICAgICAgIyBzZXRyZWdpZCAtIHNldCByZWFsIGFuZC9vciBlZmZlY3RpdmUgdXNlciBvciBncm91cCBJRAogICAgICAtIHNldHJlZ2lkCiAgICAgICMgc2V0cmVzdWlkIC0gc2V0IHJlYWwsIGVmZmVjdGl2ZSBhbmQgc2F2ZWQgdXNlciBvciBncm91cCBJRAogICAgICAtIHNldHJlc3VpZAogICAgICAjIHNldHJlc2dpZCAtIHNldCByZWFsLCBlZmZlY3RpdmUgYW5kIHNhdmVkIHVzZXIgb3IgZ3JvdXAgSUQKICAgICAgLSBzZXRyZXNnaWQKICAgIGVjczoKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBjaGFuZ2UKICAtIGFjdGlvbjogY2hhbmdlZC1zeXN0ZW0tdGltZQogICAgb2JqZWN0OgogICAgICB3aGF0OiBzeXN0ZW0KICAgIHN5c2NhbGxzOgogICAgICAjIHNldHRpbWVvZmRheSAtIGdldCAvIHNldCB0aW1lCiAgICAgIC0gc2V0dGltZW9mZGF5CiAgICAgICMgY2xvY2tfc2V0dGltZSAtIGNsb2NrIGFuZCB0aW1lIGZ1bmN0aW9ucwogICAgICAtIGNsb2NrX3NldHRpbWUKICAgICAgIyBzdGltZSAtIHNldCB0aW1lCiAgICAgIC0gc3RpbWUKICAgICAgIyBhZGp0aW1leCAtIHR1bmUga2VybmVsIGNsb2NrCiAgICAgIC0gYWRqdGltZXgKICAgIGVjczoKICAgICAgPDw6ICplY3MtaG9zdAogICAgICB0eXBlOiBjaGFuZ2UKICAtIGFjdGlvbjogbWFrZS1kZXZpY2UKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgc3lzY2FsbHM6CiAgICAgICMgbWtub2QgLSBjcmVhdGUgYSBzcGVjaWFsIG9yIG9yZGluYXJ5IGZpbGUKICAgICAgLSBta25vZAogICAgICAjIG1rbm9kYXQgLSBjcmVhdGUgYSBzcGVjaWFsIG9yIG9yZGluYXJ5IGZpbGUKICAgICAgLSBta25vZGF0CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgdHlwZTogY3JlYXRpb24KICAtIGFjdGlvbjogY2hhbmdlZC1zeXN0ZW0tbmFtZQogICAgb2JqZWN0OgogICAgICB3aGF0OiBzeXN0ZW0KICAgIHN5c2NhbGxzOgogICAgICAjIHNldGhvc3RuYW1lIC0gZ2V0L3NldCBob3N0bmFtZQogICAgICAtIHNldGhvc3RuYW1lCiAgICAgICMgc2V0ZG9tYWlubmFtZSAtIGdldC9zZXQgTklTIGRvbWFpbiBuYW1lCiAgICAgIC0gc2V0ZG9tYWlubmFtZQogICAgZWNzOgogICAgICA8PDogKmVjcy1ob3N0CiAgICAgIHR5cGU6IGNoYW5nZQogIC0gYWN0aW9uOiBhbGxvY2F0ZWQtbWVtb3J5CiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IG1lbW9yeQogICAgc3lzY2FsbHM6CiAgICAgICMgbW1hcCAtIG1hcCBvciB1bm1hcCBmaWxlcyBvciBkZXZpY2VzIGludG8gbWVtb3J5CiAgICAgIC0gbW1hcAogICAgICAjIG1tYXAyIC0gbWFwIGZpbGVzIG9yIGRldmljZXMgaW50byBtZW1vcnkKICAgICAgLSBtbWFwMgogICAgICAjIGJyayAtIGNoYW5nZSBkYXRhIHNlZ21lbnQgc2l6ZQogICAgICAtIGJyawogICAgZWNzOiAqZWNzLXByb2Nlc3MKICAtIGFjdGlvbjogYWRqdXN0ZWQtc2NoZWR1bGluZy1wb2xpY3ktb2YKICAgIG9iamVjdDoKICAgICAgd2hhdDogcHJvY2VzcwogICAgaG93OiBzeXNjYWxsCiAgICBzeXNjYWxsczoKICAgICAgIyBzY2hlZF9zZXRwYXJhbSAtIHNldCBhbmQgZ2V0IHNjaGVkdWxpbmcgcGFyYW1ldGVycwogICAgICAtIHNjaGVkX3NldHBhcmFtCiAgICAgICMgc2NoZWRfc2V0c2NoZWR1bGVyIC0gc2V0IGFuZCBnZXQgc2NoZWR1bGluZyBwb2xpY3kvcGFyYW1ldGVycwogICAgICAtIHNjaGVkX3NldHNjaGVkdWxlcgogICAgICAjIHNjaGVkX3NldGF0dHIgLSBzZXQgYW5kIGdldCBzY2hlZHVsaW5nIHBvbGljeSBhbmQgYXR0cmlidXRlcwogICAgICAtIHNjaGVkX3NldGF0dHIKICAgIGVjczoKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBjaGFuZ2UKCiAgIyBDdXJyZW50bHkgdW5oYW5kbGVkCiAgIyB0aGlzIGxpc3QgY29tZXMgZnJvbSBwYXJzaW5nIGxpbnV4IG1hbiBwYWdlcyBhdCBodHRwczovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vZG9jcy9tYW4tcGFnZXMvbWFuLXBhZ2VzLmdpdAoKICAjIHNpZ2FjdGlvbiAtIGV4YW1pbmUgYW5kIGNoYW5nZSBhIHNpZ25hbCBhY3Rpb24KICAjIHJ0X3NpZ2FjdGlvbiAtIGV4YW1pbmUgYW5kIGNoYW5nZSBhIHNpZ25hbCBhY3Rpb24KICAjIHByZWFkIC0gcmVhZCBmcm9tIG9yIHdyaXRlIHRvIGEgZmlsZSBkZXNjcmlwdG9yIGF0IGEgZ2l2ZW4gb2Zmc2V0CiAgIyBwd3JpdGUgLSByZWFkIGZyb20gb3Igd3JpdGUgdG8gYSBmaWxlIGRlc2NyaXB0b3IgYXQgYSBnaXZlbiBvZmZzZXQKICAjIHMzOTBfZ3VhcmRlZF9zdG9yYWdlIC0gb3BlcmF0aW9ucyB3aXRoIHovQXJjaGl0ZWN0dXJlIGd1YXJkZWQgc3RvcmFnZSBmYWNpbGl0eQogICMgc2NoZWRfZ2V0YXR0ciAtIHNldCBhbmQgZ2V0IHNjaGVkdWxpbmcgcG9saWN5IGFuZCBhdHRyaWJ1dGVzCiAgIyBnZXRydXNhZ2UgLSBnZXQgcmVzb3VyY2UgdXNhZ2UKICAjIGZsb2NrIC0gYXBwbHkgb3IgcmVtb3ZlIGFuIGFkdmlzb3J5IGxvY2sgb24gYW4gb3BlbiBmaWxlCiAgIyBwaWRmZF9nZXRmZCAtIG9idGFpbiBhIGR1cGxpY2F0ZSBvZiBhbm90aGVyIHByb2Nlc3MncyBmaWxlIGRlc2NyaXB0b3IKICAjIGNsb2NrX25hbm9zbGVlcCAtIGhpZ2gtcmVzb2x1dGlvbiBzbGVlcCB3aXRoIHNwZWNpZmlhYmxlIGNsb2NrCiAgIyBnZXRwYWdlc2l6ZSAtIGdldCBtZW1vcnkgcGFnZSBzaXplCiAgIyBwaWRmZF9vcGVuIC0gb2J0YWluIGEgZmlsZSBkZXNjcmlwdG9yIHRoYXQgcmVmZXJzIHRvIGEgcHJvY2VzcwogICMgc3BsaWNlIC0gc3BsaWNlIGRhdGEgdG8vZnJvbSBhIHBpcGUKICAjIGdldHJlc3VpZCAtIGdldCByZWFsLCBlZmZlY3RpdmUgYW5kIHNhdmVkIHVzZXIvZ3JvdXAgSURzCiAgIyBnZXRyZXNnaWQgLSBnZXQgcmVhbCwgZWZmZWN0aXZlIGFuZCBzYXZlZCB1c2VyL2dyb3VwIElEcwogICMgcmVtYXBfZmlsZV9wYWdlcyAtIGNyZWF0ZSBhIG5vbmxpbmVhciBmaWxlIG1hcHBpbmcKICAjIGlvX2NhbmNlbCAtIGNhbmNlbCBhbiBvdXRzdGFuZGluZyBhc3luY2hyb25vdXMgSS9PIG9wZXJhdGlvbgogICMgcHJjdGwgLSBvcGVyYXRpb25zIG9uIGEgcHJvY2VzcyBvciB0aHJlYWQKICAjIGNsb2NrX2dldHJlcyAtIGNsb2NrIGFuZCB0aW1lIGZ1bmN0aW9ucwogICMgY2xvY2tfZ2V0dGltZSAtIGNsb2NrIGFuZCB0aW1lIGZ1bmN0aW9ucwogICMgZ2V0Z3JvdXBzIC0gZ2V0L3NldCBsaXN0IG9mIHN1cHBsZW1lbnRhcnkgZ3JvdXAgSURzCiAgIyBzZXRncm91cHMgLSBnZXQvc2V0IGxpc3Qgb2Ygc3VwcGxlbWVudGFyeSBncm91cCBJRHMKICAjIHZtc3BsaWNlIC0gc3BsaWNlIHVzZXIgcGFnZXMgdG8vZnJvbSBhIHBpcGUKICAjIGVwb2xsX2NyZWF0ZSAtIG9wZW4gYW4gZXBvbGwgZmlsZSBkZXNjcmlwdG9yCiAgIyBlcG9sbF9jcmVhdGUxIC0gb3BlbiBhbiBlcG9sbCBmaWxlIGRlc2NyaXB0b3IKICAjIHBvc2l4X2ZhZHZpc2UgLSBwcmVkZWNsYXJlIGFuIGFjY2VzcyBwYXR0ZXJuIGZvciBmaWxlIGRhdGEKICAjIHNpZ3dhaXRpbmZvIC0gc3luY2hyb25vdXNseSB3YWl0IGZvciBxdWV1ZWQgc2lnbmFscwogICMgc2lndGltZWR3YWl0IC0gc3luY2hyb25vdXNseSB3YWl0IGZvciBxdWV1ZWQgc2lnbmFscwogICMgcnRfc2lndGltZWR3YWl0IC0gc3luY2hyb25vdXNseSB3YWl0IGZvciBxdWV1ZWQgc2lnbmFscwogICMgc2lncmV0dXJuIC0gcmV0dXJuIGZyb20gc2lnbmFsIGhhbmRsZXIgYW5kIGNsZWFudXAgc3RhY2sgZnJhbWUKICAjIHJ0X3NpZ3JldHVybiAtIHJldHVybiBmcm9tIHNpZ25hbCBoYW5kbGVyIGFuZCBjbGVhbnVwIHN0YWNrIGZyYW1lCiAgIyBnZXRyYW5kb20gLSBvYnRhaW4gYSBzZXJpZXMgb2YgcmFuZG9tIGJ5dGVzCiAgIyBrZXljdGwgLSBtYW5pcHVsYXRlIHRoZSBrZXJuZWwncyBrZXkgbWFuYWdlbWVudCBmYWNpbGl0eQogICMgc2NoZWRfZ2V0c2NoZWR1bGVyIC0gc2V0IGFuZCBnZXQgc2NoZWR1bGluZyBwb2xpY3kvcGFyYW1ldGVycwogICMgbWJpbmQgLSBzZXQgbWVtb3J5IHBvbGljeSBmb3IgYSBtZW1vcnkgcmFuZ2UKICAjIGdldHByaW9yaXR5IC0gZ2V0L3NldCBwcm9ncmFtIHNjaGVkdWxpbmcgcHJpb3JpdHkKICAjIHNldHByaW9yaXR5IC0gZ2V0L3NldCBwcm9ncmFtIHNjaGVkdWxpbmcgcHJpb3JpdHkKICAjIGlub3RpZnlfaW5pdCAtIGluaXRpYWxpemUgYW4gaW5vdGlmeSBpbnN0YW5jZQogICMgaW5vdGlmeV9pbml0MSAtIGluaXRpYWxpemUgYW4gaW5vdGlmeSBpbnN0YW5jZQogICMgc2VtY3RsIC0gU3lzdGVtIFYgc2VtYXBob3JlIGNvbnRyb2wgb3BlcmF0aW9ucwogICMgZ2V0aG9zdG5hbWUgLSBnZXQvc2V0IGhvc3RuYW1lCiAgIyBwdHJhY2UgLSBwcm9jZXNzIHRyYWNlCiAgIyBzeXNjdGwgLSByZWFkL3dyaXRlIHN5c3RlbSBwYXJhbWV0ZXJzCiAgIyBnZXRwZWVybmFtZSAtIGdldCBuYW1lIG9mIGNvbm5lY3RlZCBwZWVyIHNvY2tldAogICMgZm9yayAtIGNyZWF0ZSBhIGNoaWxkIHByb2Nlc3MKICAjIHF1ZXJ5X21vZHVsZSAtIHF1ZXJ5IHRoZSBrZXJuZWwgZm9yIHZhcmlvdXMgYml0cyBwZXJ0YWluaW5nIHRvIG1vZHVsZXMKICAjIGlvY3RsX2xpc3QgLSBsaXN0IG9mIGlvY3RsIGNhbGxzIGluIExpbnV4L2kzODYga2VybmVsCiAgIyBtc2dnZXQgLSBnZXQgYSBTeXN0ZW0gViBtZXNzYWdlIHF1ZXVlIGlkZW50aWZpZXIKICAjIHNwdV9jcmVhdGUgLSBjcmVhdGUgYSBuZXcgc3B1IGNvbnRleHQKICAjIHN1YnBhZ2VfcHJvdCAtIGRlZmluZSBhIHN1YnBhZ2UgcHJvdGVjdGlvbiBmb3IgYW4gYWRkcmVzcyByYW5nZQogICMgcXVvdGFjdGwgLSBtYW5pcHVsYXRlIGRpc2sgcXVvdGFzCiAgIyBuZnNzZXJ2Y3RsIC0gc3lzY2FsbCBpbnRlcmZhY2UgdG8ga2VybmVsIG5mcyBkYWVtb24KICAjIG9wZW5hdDIgLSBvcGVuIGFuZCBwb3NzaWJseSBjcmVhdGUgYSBmaWxlIChleHRlbmRlZCkKICAjIGdldHJsaW1pdCAtIGdldC9zZXQgcmVzb3VyY2UgbGltaXRzCiAgIyBzZXRybGltaXQgLSBnZXQvc2V0IHJlc291cmNlIGxpbWl0cwogICMgcHJsaW1pdCAtIGdldC9zZXQgcmVzb3VyY2UgbGltaXRzCiAgIyB0ZWUgLSBkdXBsaWNhdGluZyBwaXBlIGNvbnRlbnQKICAjIHNobWdldCAtIGFsbG9jYXRlcyBhIFN5c3RlbSBWIHNoYXJlZCBtZW1vcnkgc2VnbWVudAogICMgY3JlYXRlX21vZHVsZSAtIGNyZWF0ZSBhIGxvYWRhYmxlIG1vZHVsZSBlbnRyeQogICMgZ2V0dGltZW9mZGF5IC0gZ2V0IC8gc2V0IHRpbWUKICAjIHRpbWVyX2NyZWF0ZSAtIGNyZWF0ZSBhIFBPU0lYIHBlci1wcm9jZXNzIHRpbWVyCiAgIyBmYW5vdGlmeV9tYXJrIC0gYWRkLCByZW1vdmUsIG9yIG1vZGlmeSBhbiBmYW5vdGlmeSBtYXJrIG9uIGEgZmlsZXN5c3RlbSBvYmplY3QKICAjIHBpcGUgLSBjcmVhdGUgcGlwZQogICMgcGlwZTIgLSBjcmVhdGUgcGlwZQogICMgaW50cm8gLSBpbnRyb2R1Y3Rpb24gdG8gc3lzdGVtIGNhbGxzCiAgIyBsb29rdXBfZGNvb2tpZSAtIHJldHVybiBhIGRpcmVjdG9yeSBlbnRyeSdzIHBhdGgKICAjIHN5c2ZzIC0gZ2V0IGZpbGVzeXN0ZW0gdHlwZSBpbmZvcm1hdGlvbgogICMgczM5MF9ydW50aW1lX2luc3RyIC0gZW5hYmxlL2Rpc2FibGUgczM5MCBDUFUgcnVuLXRpbWUgaW5zdHJ1bWVudGF0aW9uCiAgIyBzZXRucyAtIHJlYXNzb2NpYXRlIHRocmVhZCB3aXRoIGEgbmFtZXNwYWNlCiAgIyBzZXRfbWVtcG9saWN5IC0gc2V0IGRlZmF1bHQgTlVNQSBtZW1vcnkgcG9saWN5IGZvciBhIHRocmVhZCBhbmQgaXRzIGNoaWxkcmVuCiAgIyBuaWNlIC0gY2hhbmdlIHByb2Nlc3MgcHJpb3JpdHkKICAjIGlvX3NldHVwIC0gY3JlYXRlIGFuIGFzeW5jaHJvbm91cyBJL08gY29udGV4dAogICMgbWluY29yZSAtIGRldGVybWluZSB3aGV0aGVyIHBhZ2VzIGFyZSByZXNpZGVudCBpbiBtZW1vcnkKICAjIGlvY3RsX2NvbnNvbGUgLSBpb2N0bHMgZm9yIGNvbnNvbGUgdGVybWluYWwgYW5kIHZpcnR1YWwgY29uc29sZXMKICAjIHBvbGwgLSB3YWl0IGZvciBzb21lIGV2ZW50IG9uIGEgZmlsZSBkZXNjcmlwdG9yCiAgIyBwcG9sbCAtIHdhaXQgZm9yIHNvbWUgZXZlbnQgb24gYSBmaWxlIGRlc2NyaXB0b3IKICAjIGNhcGdldCAtIHNldC9nZXQgY2FwYWJpbGl0aWVzIG9mIHRocmVhZChzKQogICMgY2Fwc2V0IC0gc2V0L2dldCBjYXBhYmlsaXRpZXMgb2YgdGhyZWFkKHMpCiAgIyBpb2N0bF90dHkgLSBpb2N0bHMgZm9yIHRlcm1pbmFscyBhbmQgc2VyaWFsIGxpbmVzCiAgIyBpb3BsIC0gY2hhbmdlIEkvTyBwcml2aWxlZ2UgbGV2ZWwKICAjIGlvX2dldGV2ZW50cyAtIHJlYWQgYXN5bmNocm9ub3VzIEkvTyBldmVudHMgZnJvbSB0aGUgY29tcGxldGlvbiBxdWV1ZQogICMgcHJvY2Vzc192bV9yZWFkdiAtIHRyYW5zZmVyIGRhdGEgYmV0d2VlbiBwcm9jZXNzIGFkZHJlc3Mgc3BhY2VzCiAgIyBwcm9jZXNzX3ZtX3dyaXRldiAtIHRyYW5zZmVyIGRhdGEgYmV0d2VlbiBwcm9jZXNzIGFkZHJlc3Mgc3BhY2VzCiAgIyBwY2ljb25maWdfcmVhZCAtIHBjaSBkZXZpY2UgaW5mb3JtYXRpb24gaGFuZGxpbmcKICAjIHBjaWNvbmZpZ193cml0ZSAtIHBjaSBkZXZpY2UgaW5mb3JtYXRpb24gaGFuZGxpbmcKICAjIHBjaWNvbmZpZ19pb2Jhc2UgLSBwY2kgZGV2aWNlIGluZm9ybWF0aW9uIGhhbmRsaW5nCiAgIyBzYnJrIC0gY2hhbmdlIGRhdGEgc2VnbWVudCBzaXplCiAgIyBzZXRfdGlkX2FkZHJlc3MgLSBzZXQgcG9pbnRlciB0byB0aHJlYWQgSUQKICAjIHBrZXlfYWxsb2MgLSBhbGxvY2F0ZSBvciBmcmVlIGEgcHJvdGVjdGlvbiBrZXkKICAjIHBrZXlfZnJlZSAtIGFsbG9jYXRlIG9yIGZyZWUgYSBwcm90ZWN0aW9uIGtleQogICMgc2VsZWN0IC0gc3luY2hyb25vdXMgSS9PIG11bHRpcGxleGluZwogICMgcHNlbGVjdCAtIHN5bmNocm9ub3VzIEkvTyBtdWx0aXBsZXhpbmcKICAjIGtleGVjX2xvYWQgLSBsb2FkIGEgbmV3IGtlcm5lbCBmb3IgbGF0ZXIgZXhlY3V0aW9uCiAgIyBrZXhlY19maWxlX2xvYWQgLSBsb2FkIGEgbmV3IGtlcm5lbCBmb3IgbGF0ZXIgZXhlY3V0aW9uCiAgIyBwZXJzb25hbGl0eSAtIHNldCB0aGUgcHJvY2VzcyBleGVjdXRpb24gZG9tYWluCiAgIyBpb2N0bF9nZXRmc21hcCAtIHJldHJpZXZlIHRoZSBwaHlzaWNhbCBsYXlvdXQgb2YgdGhlIGZpbGVzeXN0ZW0KICAjIGlub3RpZnlfcm1fd2F0Y2ggLSByZW1vdmUgYW4gZXhpc3Rpbmcgd2F0Y2ggZnJvbSBhbiBpbm90aWZ5IGluc3RhbmNlCiAgIyBwZXJmX2V2ZW50X29wZW4gLSBzZXQgdXAgcGVyZm9ybWFuY2UgbW9uaXRvcmluZwogICMgdGltZXJfZ2V0b3ZlcnJ1biAtIGdldCBvdmVycnVuIGNvdW50IGZvciBhIFBPU0lYIHBlci1wcm9jZXNzIHRpbWVyCiAgIyB3YWl0MyAtIHdhaXQgZm9yIHByb2Nlc3MgdG8gY2hhbmdlIHN0YXRlLCBCU0Qgc3R5bGUKICAjIHdhaXQ0IC0gd2FpdCBmb3IgcHJvY2VzcyB0byBjaGFuZ2Ugc3RhdGUsIEJTRCBzdHlsZQogICMgbGluayAtIG1ha2UgYSBuZXcgbmFtZSBmb3IgYSBmaWxlCiAgIyBsaW5rYXQgLSBtYWtlIGEgbmV3IG5hbWUgZm9yIGEgZmlsZQogICMgc2NoZWRfcnJfZ2V0X2ludGVydmFsIC0gZ2V0IHRoZSBTQ0hFRF9SUiBpbnRlcnZhbCBmb3IgdGhlIG5hbWVkIHByb2Nlc3MKICAjIG11bm1hcCAtIG1hcCBvciB1bm1hcCBmaWxlcyBvciBkZXZpY2VzIGludG8gbWVtb3J5CiAgIyBzb2NrZXRjYWxsIC0gc29ja2V0IHN5c3RlbSBjYWxscwogICMgbXJlbWFwIC0gcmVtYXAgYSB2aXJ0dWFsIG1lbW9yeSBhZGRyZXNzCiAgIyB2Zm9yayAtIGNyZWF0ZSBhIGNoaWxkIHByb2Nlc3MgYW5kIGJsb2NrIHBhcmVudAogICMgc2VjY29tcCAtIG9wZXJhdGUgb24gU2VjdXJlIENvbXB1dGluZyBzdGF0ZSBvZiB0aGUgcHJvY2VzcwogICMgcmVxdWVzdF9rZXkgLSByZXF1ZXN0IGEga2V5IGZyb20gdGhlIGtlcm5lbCdzIGtleSBtYW5hZ2VtZW50IGZhY2lsaXR5CiAgIyBzeXNjYWxsIC0gaW5kaXJlY3Qgc3lzdGVtIGNhbGwKICAjIGtjbXAgLSBjb21wYXJlIHR3byBwcm9jZXNzZXMgdG8gZGV0ZXJtaW5lIGlmIHRoZXkgc2hhcmUgYSBrZXJuZWwgcmVzb3VyY2UKICAjIHJlYWRkaXIgLSByZWFkIGRpcmVjdG9yeSBlbnRyeQogICMgaW9wZXJtIC0gc2V0IHBvcnQgaW5wdXQvb3V0cHV0IHBlcm1pc3Npb25zCiAgIyBzcHVfcnVuIC0gZXhlY3V0ZSBhbiBTUFUgY29udGV4dAogICMgcmVib290IC0gcmVib290IG9yIGVuYWJsZS9kaXNhYmxlIEN0cmwtQWx0LURlbAogICMgcmVhZGFoZWFkIC0gaW5pdGlhdGUgZmlsZSByZWFkYWhlYWQgaW50byBwYWdlIGNhY2hlCiAgIyBzY2hlZF9nZXRwYXJhbSAtIHNldCBhbmQgZ2V0IHNjaGVkdWxpbmcgcGFyYW1ldGVycwogICMgYWNjdCAtIHN3aXRjaCBwcm9jZXNzIGFjY291bnRpbmcgb24gb3Igb2ZmCiAgIyBzaWdzdXNwZW5kIC0gd2FpdCBmb3IgYSBzaWduYWwKICAjIHJ0X3NpZ3N1c3BlbmQgLSB3YWl0IGZvciBhIHNpZ25hbAogICMgZXhpdF9ncm91cCAtIGV4aXQgYWxsIHRocmVhZHMgaW4gYSBwcm9jZXNzCiAgIyBzb2NrZXQgLSBjcmVhdGUgYW4gZW5kcG9pbnQgZm9yIGNvbW11bmljYXRpb24KICAjIGlvY3RsX3VzZXJmYXVsdGZkIC0gY3JlYXRlIGEgZmlsZSBkZXNjcmlwdG9yIGZvciBoYW5kbGluZyBwYWdlIGZhdWx0cyBpbiB1c2VyIHNwYWNlCiAgIyBzY2hlZF9nZXRfcHJpb3JpdHlfbWF4IC0gZ2V0IHN0YXRpYyBwcmlvcml0eSByYW5nZQogICMgc2NoZWRfZ2V0X3ByaW9yaXR5X21pbiAgLSBnZXQgc3RhdGljIHByaW9yaXR5IHJhbmdlCiAgIyBnZXRkZW50cyAtIGdldCBkaXJlY3RvcnkgZW50cmllcwogICMgZ2V0ZGVudHM2NCAtIGdldCBkaXJlY3RvcnkgZW50cmllcwogICMgc2VsZWN0IC0gc3luY2hyb25vdXMgSS9PIG11bHRpcGxleGluZwogICMgcHNlbGVjdCAtIHN5bmNocm9ub3VzIEkvTyBtdWx0aXBsZXhpbmcKICAjIGFsbG9jX2h1Z2VwYWdlcyAtIGFsbG9jYXRlIG9yIGZyZWUgaHVnZSBwYWdlcwogICMgZnJlZV9odWdlcGFnZXMgLSBhbGxvY2F0ZSBvciBmcmVlIGh1Z2UgcGFnZXMKICAjIGZzeW5jIC0gc3luY2hyb25pemUgYSBmaWxlJ3MgaW4tY29yZSBzdGF0ZSB3aXRoIHN0b3JhZ2UgZGV2aWNlCiAgIyBmZGF0YXN5bmMgLSBzeW5jaHJvbml6ZSBhIGZpbGUncyBpbi1jb3JlIHN0YXRlIHdpdGggc3RvcmFnZSBkZXZpY2UKICAjIHN5c2NhbGxzIC0gTGludXggc3lzdGVtIGNhbGxzCiAgIyBtZW1mZF9jcmVhdGUgLSBjcmVhdGUgYW4gYW5vbnltb3VzIGZpbGUKICAjIG1vZGlmeV9sZHQgLSBnZXQgb3Igc2V0IGEgcGVyLXByb2Nlc3MgTERUIGVudHJ5CiAgIyBnZXRfa2VybmVsX3N5bXMgLSByZXRyaWV2ZSBleHBvcnRlZCBrZXJuZWwgYW5kIG1vZHVsZSBzeW1ib2xzCiAgIyBsc2VlayAtIHJlcG9zaXRpb24gcmVhZC93cml0ZSBmaWxlIG9mZnNldAogICMgc2htYXQgLSBTeXN0ZW0gViBzaGFyZWQgbWVtb3J5IG9wZXJhdGlvbnMKICAjIHNobWR0IC0gU3lzdGVtIFYgc2hhcmVkIG1lbW9yeSBvcGVyYXRpb25zCiAgIyB0aW1lcl9kZWxldGUgLSBkZWxldGUgYSBQT1NJWCBwZXItcHJvY2VzcyB0aW1lcgogICMgcGVyZm1vbmN0bCAtIGludGVyZmFjZSB0byBJQS02NCBwZXJmb3JtYW5jZSBtb25pdG9yaW5nIHVuaXQKICAjIG1vdmVfcGFnZXMgLSBtb3ZlIGluZGl2aWR1YWwgcGFnZXMgb2YgYSBwcm9jZXNzIHRvIGFub3RoZXIgbm9kZQogICMgY2hkaXIgLSBjaGFuZ2Ugd29ya2luZyBkaXJlY3RvcnkKICAjIGZjaGRpciAtIGNoYW5nZSB3b3JraW5nIGRpcmVjdG9yeQogICMgdGltZSAtIGdldCB0aW1lIGluIHNlY29uZHMKICAjIF9leGl0IC0gdGVybWluYXRlIHRoZSBjYWxsaW5nIHByb2Nlc3MKICAjIF9FeGl0IC0gdGVybWluYXRlIHRoZSBjYWxsaW5nIHByb2Nlc3MKICAjIHMzOTBfc3RoeWkgLSBlbXVsYXRlIFNUSFlJIGluc3RydWN0aW9uCiAgIyBpb19zdWJtaXQgLSBzdWJtaXQgYXN5bmNocm9ub3VzIEkvTyBibG9ja3MgZm9yIHByb2Nlc3NpbmcKICAjIG1sb2NrIC0gbG9jayBhbmQgdW5sb2NrIG1lbW9yeQogICMgbWxvY2syIC0gbG9jayBhbmQgdW5sb2NrIG1lbW9yeQogICMgbXVubG9jayAtIGxvY2sgYW5kIHVubG9jayBtZW1vcnkKICAjIG1sb2NrYWxsIC0gbG9jayBhbmQgdW5sb2NrIG1lbW9yeQogICMgbXVubG9ja2FsbCAtIGxvY2sgYW5kIHVubG9jayBtZW1vcnkKICAjIHVtYXNrIC0gc2V0IGZpbGUgbW9kZSBjcmVhdGlvbiBtYXNrCiAgIyBhcmNoX3ByY3RsIC0gc2V0IGFyY2hpdGVjdHVyZS1zcGVjaWZpYyB0aHJlYWQgc3RhdGUKICAjIHVzZWxpYiAtIGxvYWQgc2hhcmVkIGxpYnJhcnkKICAjIHNlbmRmaWxlIC0gdHJhbnNmZXIgZGF0YSBiZXR3ZWVuIGZpbGUgZGVzY3JpcHRvcnMKICAjIHNobWN0bCAtIFN5c3RlbSBWIHNoYXJlZCBtZW1vcnkgY29udHJvbAogICMgZXBvbGxfd2FpdCAtIHdhaXQgZm9yIGFuIEkvTyBldmVudCBvbiBhbiBlcG9sbCBmaWxlIGRlc2NyaXB0b3IKICAjIGVwb2xsX3B3YWl0IC0gd2FpdCBmb3IgYW4gSS9PIGV2ZW50IG9uIGFuIGVwb2xsIGZpbGUgZGVzY3JpcHRvcgogICMgc2lnYWx0c3RhY2sgLSBzZXQgYW5kL29yIGdldCBzaWduYWwgc3RhY2sgY29udGV4dAogICMgaW9jdGwgLSBjb250cm9sIGRldmljZQogICMgc2lnbmFsZmQgLSBjcmVhdGUgYSBmaWxlIGRlc2NyaXB0b3IgZm9yIGFjY2VwdGluZyBzaWduYWxzCiAgIyB1bnNoYXJlIC0gZGlzYXNzb2NpYXRlIHBhcnRzIG9mIHRoZSBwcm9jZXNzIGV4ZWN1dGlvbiBjb250ZXh0CiAgIyBjaHJvb3QgLSBjaGFuZ2Ugcm9vdCBkaXJlY3RvcnkKICAjIG1hZHZpc2UgLSBnaXZlIGFkdmljZSBhYm91dCB1c2Ugb2YgbWVtb3J5CiAgIyBnZXR0aWQgLSBnZXQgdGhyZWFkIGlkZW50aWZpY2F0aW9uCiAgIyBnZXRzb2NrbmFtZSAtIGdldCBzb2NrZXQgbmFtZQogICMgaW9fZGVzdHJveSAtIGRlc3Ryb3kgYW4gYXN5bmNocm9ub3VzIEkvTyBjb250ZXh0CiAgIyBzZXR1cCAtIHNldHVwIGRldmljZXMgYW5kIGZpbGVzeXN0ZW1zLCBtb3VudCByb290IGZpbGVzeXN0ZW0KICAjIG50cF9hZGp0aW1lIC0gdHVuZSBrZXJuZWwgY2xvY2sKICAjIHNlbWdldCAtIGdldCBhIFN5c3RlbSBWIHNlbWFwaG9yZSBzZXQgaWRlbnRpZmllcgogICMgZ2V0dWlkIC0gZ2V0IHVzZXIgaWRlbnRpdHkKICAjIGdldGV1aWQgLSBnZXQgdXNlciBpZGVudGl0eQogICMgX3N5c2NhbGwgLSBpbnZva2luZyBhIHN5c3RlbSBjYWxsIHdpdGhvdXQgbGlicmFyeSBzdXBwb3J0IChPQlNPTEVURSkKICAjIHNjaGVkX3NldGFmZmluaXR5IC0gXCBzZXQgYW5kIGdldCBhIHRocmVhZCdzIENQVSBhZmZpbml0eSBtYXNrCiAgIyBzY2hlZF9nZXRhZmZpbml0eSAtIFwgc2V0IGFuZCBnZXQgYSB0aHJlYWQncyBDUFUgYWZmaW5pdHkgbWFzawogICMgY2FjaGVmbHVzaCAtIGZsdXNoIGNvbnRlbnRzIG9mIGluc3RydWN0aW9uIGFuZC9vciBkYXRhIGNhY2hlCiAgIyBwaXZvdF9yb290IC0gY2hhbmdlIHRoZSByb290IG1vdW50CiAgIyBtc2djdGwgLSBTeXN0ZW0gViBtZXNzYWdlIGNvbnRyb2wgb3BlcmF0aW9ucwogICMgaW9jdGxfZmF0IC0gbWFuaXB1bGF0aW5nIHRoZSBGQVQgZmlsZXN5c3RlbQogICMgc2V0cGdpZCAtIHNldC9nZXQgcHJvY2VzcyBncm91cAogICMgZ2V0cGdpZCAtIHNldC9nZXQgcHJvY2VzcyBncm91cAogICMgc2V0cGdycCAtIHNldC9nZXQgcHJvY2VzcyBncm91cAogICMgZ2V0cGdycCAtIHNldC9nZXQgcHJvY2VzcyBncm91cAogICMgc29ja2V0cGFpciAtIGNyZWF0ZSBhIHBhaXIgb2YgY29ubmVjdGVkIHNvY2tldHMKICAjIGJkZmx1c2ggLSBzdGFydCwgZmx1c2gsIG9yIHR1bmUgYnVmZmVyLWRpcnR5LWZsdXNoIGRhZW1vbgogICMgYWxhcm0gLSBzZXQgYW4gYWxhcm0gY2xvY2sgZm9yIGRlbGl2ZXJ5IG9mIGEgc2lnbmFsCiAgIyB0aW1lcl9zZXR0aW1lIC0gYXJtL2Rpc2FybSBhbmQgZmV0Y2ggc3RhdGUgb2YgUE9TSVggcGVyLXByb2Nlc3MgdGltZXIKICAjIHRpbWVyX2dldHRpbWUgLSBhcm0vZGlzYXJtIGFuZCBmZXRjaCBzdGF0ZSBvZiBQT1NJWCBwZXItcHJvY2VzcyB0aW1lcgogICMgYWRkX2tleSAtIGFkZCBhIGtleSB0byB0aGUga2VybmVsJ3Mga2V5IG1hbmFnZW1lbnQgZmFjaWxpdHkKICAjIHJ0X3NpZ3F1ZXVlaW5mbyAtIHF1ZXVlIGEgc2lnbmFsIGFuZCBkYXRhCiAgIyBydF90Z3NpZ3F1ZXVlaW5mbyAtIHF1ZXVlIGEgc2lnbmFsIGFuZCBkYXRhCiAgIyB1c2VyZmF1bHRmZCAtIGNyZWF0ZSBhIGZpbGUgZGVzY3JpcHRvciBmb3IgaGFuZGxpbmcgcGFnZSBmYXVsdHMgaW4gdXNlciBzcGFjZQogICMgc2Vtb3AgLSBTeXN0ZW0gViBzZW1hcGhvcmUgb3BlcmF0aW9ucwogICMgc2VtdGltZWRvcCAtIFN5c3RlbSBWIHNlbWFwaG9yZSBvcGVyYXRpb25zCiAgIyBnZXRnaWQgLSBnZXQgZ3JvdXAgaWRlbnRpdHkKICAjIGdldGVnaWQgLSBnZXQgZ3JvdXAgaWRlbnRpdHkKICAjIGdldHBpZCAtIGdldCBwcm9jZXNzIGlkZW50aWZpY2F0aW9uCiAgIyBnZXRwcGlkIC0gZ2V0IHByb2Nlc3MgaWRlbnRpZmljYXRpb24KICAjIHNpZ3Byb2NtYXNrIC0gZXhhbWluZSBhbmQgY2hhbmdlIGJsb2NrZWQgc2lnbmFscwogICMgcnRfc2lncHJvY21hc2sgLSBleGFtaW5lIGFuZCBjaGFuZ2UgYmxvY2tlZCBzaWduYWxzCiAgIyB1bmFtZSAtIGdldCBuYW1lIGFuZCBpbmZvcm1hdGlvbiBhYm91dCBjdXJyZW50IGtlcm5lbAogICMgc3RhdHggLSBnZXQgZmlsZSBzdGF0dXMgKGV4dGVuZGVkKQogICMgaW9jdGxfZmljbG9uZXJhbmdlIC0gc2hhcmUgc29tZSB0aGUgZGF0YSBvZiBvbmUgZmlsZSB3aXRoIGFub3RoZXIgZmlsZQogICMgaW9jdGxfZmljbG9uZSAtIHNoYXJlIHNvbWUgdGhlIGRhdGEgb2Ygb25lIGZpbGUgd2l0aCBhbm90aGVyIGZpbGUKICAjIG1xX2dldHNldGF0dHIgLSBnZXQvc2V0IG1lc3NhZ2UgcXVldWUgYXR0cmlidXRlcwogICMgaW9wcmlvX2dldCAtIGdldC9zZXQgSS9PIHNjaGVkdWxpbmcgY2xhc3MgYW5kIHByaW9yaXR5CiAgIyBpb3ByaW9fc2V0IC0gZ2V0L3NldCBJL08gc2NoZWR1bGluZyBjbGFzcyBhbmQgcHJpb3JpdHkKICAjIGVwb2xsX2N0bCAtIGNvbnRyb2wgaW50ZXJmYWNlIGZvciBhbiBlcG9sbCBmaWxlIGRlc2NyaXB0b3IKICAjIHN5bmMgLSBjb21taXQgZmlsZXN5c3RlbSBjYWNoZXMgdG8gZGlzawogICMgc3luY2ZzIC0gY29tbWl0IGZpbGVzeXN0ZW0gY2FjaGVzIHRvIGRpc2sKICAjIHNldHNpZCAtIGNyZWF0ZXMgYSBzZXNzaW9uIGFuZCBzZXRzIHRoZSBwcm9jZXNzIGdyb3VwIElECiAgIyBzaHV0ZG93biAtIHNodXQgZG93biBwYXJ0IG9mIGEgZnVsbC1kdXBsZXggY29ubmVjdGlvbgogICMgZ2V0c2lkIC0gZ2V0IHNlc3Npb24gSUQKICAjIGdldF90aHJlYWRfYXJlYSAtIG1hbmlwdWxhdGUgdGhyZWFkLWxvY2FsIHN0b3JhZ2UgaW5mb3JtYXRpb24KICAjIHNldF90aHJlYWRfYXJlYSAtIG1hbmlwdWxhdGUgdGhyZWFkLWxvY2FsIHN0b3JhZ2UgaW5mb3JtYXRpb24KICAjIHRpbWVyZmRfY3JlYXRlIC0gdGltZXJzIHRoYXQgbm90aWZ5IHZpYSBmaWxlIGRlc2NyaXB0b3JzCiAgIyB0aW1lcmZkX3NldHRpbWUgLSB0aW1lcnMgdGhhdCBub3RpZnkgdmlhIGZpbGUgZGVzY3JpcHRvcnMKICAjIHRpbWVyZmRfZ2V0dGltZSAtIHRpbWVycyB0aGF0IG5vdGlmeSB2aWEgZmlsZSBkZXNjcmlwdG9ycwogICMgaW9jdGxfZmlkZWR1cGVyYW5nZSAtIHNoYXJlIHNvbWUgdGhlIGRhdGEgb2Ygb25lIGZpbGUgd2l0aCBhbm90aGVyIGZpbGUKICAjIG5hbWVfdG9faGFuZGxlX2F0IC0gb2J0YWluIGhhbmRsZSBmb3IgYSBwYXRobmFtZSBhbmQgb3BlbiBmaWxlIHZpYSBhIGhhbmRsZQogICMgb3Blbl9ieV9oYW5kbGVfYXQgLSBvYnRhaW4gaGFuZGxlIGZvciBhIHBhdGhuYW1lIGFuZCBvcGVuIGZpbGUgdmlhIGEgaGFuZGxlCiAgIyBmdXRleCAtIGZhc3QgdXNlci1zcGFjZSBsb2NraW5nCiAgIyBpb2N0bF9ucyAtIGlvY3RsKCkgb3BlcmF0aW9ucyBmb3IgTGludXggbmFtZXNwYWNlcwogICMgcGlkZmRfc2VuZF9zaWduYWwgLSBzZW5kIGEgc2lnbmFsIHRvIGEgcHJvY2VzcyBzcGVjaWZpZWQgYnkgYSBmaWxlIGRlc2NyaXB0b3IKICAjIGNsb25lIC0gY3JlYXRlIGEgY2hpbGQgcHJvY2VzcwogICMgX19jbG9uZTIgLSBjcmVhdGUgYSBjaGlsZCBwcm9jZXNzCiAgIyBjbG9uZTMgLSBjcmVhdGUgYSBjaGlsZCBwcm9jZXNzCiAgIyB0aW1lcyAtIGdldCBwcm9jZXNzIHRpbWVzCiAgIyBzeXNpbmZvIC0gcmV0dXJuIHN5c3RlbSBpbmZvcm1hdGlvbgogICMgaXBjIC0gU3lzdGVtIFYgSVBDIHN5c3RlbSBjYWxscwogICMgZXZlbnRmZCAtIGNyZWF0ZSBhIGZpbGUgZGVzY3JpcHRvciBmb3IgZXZlbnQgbm90aWZpY2F0aW9uCiAgIyB3YWl0IC0gd2FpdCBmb3IgcHJvY2VzcyB0byBjaGFuZ2Ugc3RhdGUKICAjIHdhaXRwaWQgLSB3YWl0IGZvciBwcm9jZXNzIHRvIGNoYW5nZSBzdGF0ZQogICMgd2FpdGlkIC0gd2FpdCBmb3IgcHJvY2VzcyB0byBjaGFuZ2Ugc3RhdGUKICAjIGdldGRvbWFpbm5hbWUgLSBnZXQvc2V0IE5JUyBkb21haW4gbmFtZQogICMgaWRsZSAtIG1ha2UgcHJvY2VzcyAwIGlkbGUKICAjIGlub3RpZnlfYWRkX3dhdGNoIC0gYWRkIGEgd2F0Y2ggdG8gYW4gaW5pdGlhbGl6ZWQgaW5vdGlmeSBpbnN0YW5jZQogICMgZ2V0X21lbXBvbGljeSAtIHJldHJpZXZlIE5VTUEgbWVtb3J5IHBvbGljeSBmb3IgYSB0aHJlYWQKICAjIGJwZiAtIHBlcmZvcm0gYSBjb21tYW5kIG9uIGFuIGV4dGVuZGVkIEJQRiBtYXAgb3IgcHJvZ3JhbQogICMgZ2V0c29ja29wdCAtIGdldCBhbmQgc2V0IG9wdGlvbnMgb24gc29ja2V0cwogICMgc2V0c29ja29wdCAtIGdldCBhbmQgc2V0IG9wdGlvbnMgb24gc29ja2V0cwogICMgZ2V0aXRpbWVyIC0gZ2V0IG9yIHNldCB2YWx1ZSBvZiBhbiBpbnRlcnZhbCB0aW1lcgogICMgc2V0aXRpbWVyIC0gZ2V0IG9yIHNldCB2YWx1ZSBvZiBhbiBpbnRlcnZhbCB0aW1lcgogICMgbWVtYmFycmllciAtIGlzc3VlIG1lbW9yeSBiYXJyaWVycyBvbiBhIHNldCBvZiB0aHJlYWRzCiAgIyBtcHJvdGVjdCAtIHNldCBwcm90ZWN0aW9uIG9uIGEgcmVnaW9uIG9mIG1lbW9yeQogICMgcGtleV9tcHJvdGVjdCAtIHNldCBwcm90ZWN0aW9uIG9uIGEgcmVnaW9uIG9mIG1lbW9yeQogICMgZ2V0Y3B1IC0gZGV0ZXJtaW5lIENQVSBhbmQgTlVNQSBub2RlIG9uIHdoaWNoIHRoZSBjYWxsaW5nIHRocmVhZCBpcyBydW5uaW5nCiAgIyBpb2N0bF9mc2xhYmVsIC0gZ2V0IG9yIHNldCBhIGZpbGVzeXN0ZW0gbGFiZWwKICAjIGxpc3R4YXR0ciAtIGxpc3QgZXh0ZW5kZWQgYXR0cmlidXRlIG5hbWVzCiAgIyBsbGlzdHhhdHRyIC0gbGlzdCBleHRlbmRlZCBhdHRyaWJ1dGUgbmFtZXMKICAjIGZsaXN0eGF0dHIgLSBsaXN0IGV4dGVuZGVkIGF0dHJpYnV0ZSBuYW1lcwogICMgX2xsc2VlayAtIHJlcG9zaXRpb24gcmVhZC93cml0ZSBmaWxlIG9mZnNldAogICMgZmNudGwgLSBtYW5pcHVsYXRlIGZpbGUgZGVzY3JpcHRvcgogICMgdXN0YXQgLSBnZXQgZmlsZXN5c3RlbSBzdGF0aXN0aWNzCiAgIyBzaWduYWwgLSBBTlNJIEMgc2lnbmFsIGhhbmRsaW5nCiAgIyBuYW5vc2xlZXAgLSBoaWdoLXJlc29sdXRpb24gc2xlZXAKICAjIGNvbm5lY3QgLSBpbml0aWF0ZSBhIGNvbm5lY3Rpb24gb24gYSBzb2NrZXQKICAjIHZtODZvbGQgLSBlbnRlciB2aXJ0dWFsIDgwODYgbW9kZQogICMgdm04NiAtIGVudGVyIHZpcnR1YWwgODA4NiBtb2RlCiAgIyBmYW5vdGlmeV9pbml0IC0gY3JlYXRlIGFuZCBpbml0aWFsaXplIGZhbm90aWZ5IGdyb3VwCiAgIyBtaWdyYXRlX3BhZ2VzIC0gbW92ZSBhbGwgcGFnZXMgaW4gYSBwcm9jZXNzIHRvIGFub3RoZXIgc2V0IG9mIG5vZGVzCiAgIyByZXN0YXJ0X3N5c2NhbGwgLSByZXN0YXJ0IGEgc3lzdGVtIGNhbGwgYWZ0ZXIgaW50ZXJydXB0aW9uIGJ5IGEgc3RvcCBzaWduYWwKICAjIGNsb3NlIC0gY2xvc2UgYSBmaWxlIGRlc2NyaXB0b3IKICAjIG1zZ3JjdiAtIFN5c3RlbSBWIG1lc3NhZ2UgcXVldWUgb3BlcmF0aW9ucwogICMgbXNnc25kIC0gU3lzdGVtIFYgbWVzc2FnZSBxdWV1ZSBvcGVyYXRpb25zCiAgIyByZWFkdiAtIHJlYWQgb3Igd3JpdGUgZGF0YSBpbnRvIG11bHRpcGxlIGJ1ZmZlcnMKICAjIHdyaXRldiAtIHJlYWQgb3Igd3JpdGUgZGF0YSBpbnRvIG11bHRpcGxlIGJ1ZmZlcnMKICAjIHByZWFkdiAtIHJlYWQgb3Igd3JpdGUgZGF0YSBpbnRvIG11bHRpcGxlIGJ1ZmZlcnMKICAjIHB3cml0ZXYgLSByZWFkIG9yIHdyaXRlIGRhdGEgaW50byBtdWx0aXBsZSBidWZmZXJzCiAgIyBwcmVhZHYyIC0gcmVhZCBvciB3cml0ZSBkYXRhIGludG8gbXVsdGlwbGUgYnVmZmVycwogICMgcHdyaXRldjIgLSByZWFkIG9yIHdyaXRlIGRhdGEgaW50byBtdWx0aXBsZSBidWZmZXJzCiAgIyBzeXNsb2cgLSByZWFkIGFuZC9vciBjbGVhciBrZXJuZWwgbWVzc2FnZSByaW5nIGJ1ZmZlcjsgc2V0IGNvbnNvbGVfbG9nbGV2ZWwKICAjIGtsb2djdGwgLSByZWFkIGFuZC9vciBjbGVhciBrZXJuZWwgbWVzc2FnZSByaW5nIGJ1ZmZlcjsgc2V0IGNvbnNvbGVfbG9nbGV2ZWwKICAjIHNjaGVkX3lpZWxkIC0geWllbGQgdGhlIHByb2Nlc3NvcgogICMgdmhhbmd1cCAtIHZpcnR1YWxseSBoYW5ndXAgdGhlIGN1cnJlbnQgdGVybWluYWwKICAjIGlvY3RsX2lmbGFncyAtIGlvY3RsKCkgb3BlcmF0aW9ucyBmb3IgaW5vZGUgZmxhZ3MKICAjIHNnZXRtYXNrIC0gbWFuaXB1bGF0aW9uIG9mIHNpZ25hbCBtYXNrIChvYnNvbGV0ZSkKICAjIHNzZXRtYXNrIC0gbWFuaXB1bGF0aW9uIG9mIHNpZ25hbCBtYXNrIChvYnNvbGV0ZSkKICAjIHN5bmNfZmlsZV9yYW5nZSAtIHN5bmMgYSBmaWxlIHNlZ21lbnQgd2l0aCBkaXNrCiAgIyBjb3B5X2ZpbGVfcmFuZ2UgLSBDb3B5IGEgcmFuZ2Ugb2YgZGF0YSBmcm9tIG9uZSBmaWxlIHRvIGFub3RoZXIKICAjIHNpZ3BlbmRpbmcgLSBleGFtaW5lIHBlbmRpbmcgc2lnbmFscwogICMgcnRfc2lncGVuZGluZyAtIGV4YW1pbmUgcGVuZGluZyBzaWduYWxzCiAgIyBnZXR1bndpbmQgLSBjb3B5IHRoZSB1bndpbmQgZGF0YSB0byBjYWxsZXIncyBidWZmZXIKICAjIG1zeW5jIC0gc3luY2hyb25pemUgYSBmaWxlIHdpdGggYSBtZW1vcnkgbWFwCiAgIyBnZXRfcm9idXN0X2xpc3QgLSBnZXQvc2V0IGxpc3Qgb2Ygcm9idXN0IGZ1dGV4ZXMKICAjIHNldF9yb2J1c3RfbGlzdCAtIGdldC9zZXQgbGlzdCBvZiByb2J1c3QgZnV0ZXhlcwogICMgZHVwIC0gZHVwbGljYXRlIGEgZmlsZSBkZXNjcmlwdG9yCiAgIyBkdXAyIC0gZHVwbGljYXRlIGEgZmlsZSBkZXNjcmlwdG9yCiAgIyBkdXAzIC0gZHVwbGljYXRlIGEgZmlsZSBkZXNjcmlwdG9yCiAgIyBzMzkwX3BjaV9tbWlvX3dyaXRlIC0gdHJhbnNmZXIgZGF0YSB0by9mcm9tIFBDSSBNTUlPIG1lbW9yeSBwYWdlCiAgIyBzMzkwX3BjaV9tbWlvX3JlYWQgLSB0cmFuc2ZlciBkYXRhIHRvL2Zyb20gUENJIE1NSU8gbWVtb3J5IHBhZ2UKICAjIHBhdXNlIC0gd2FpdCBmb3Igc2lnbmFsCiAgIyBzd2Fwb24gLSBzdGFydC9zdG9wIHN3YXBwaW5nIHRvIGZpbGUvZGV2aWNlCiAgIyBzd2Fwb2ZmIC0gc3RhcnQvc3RvcCBzd2FwcGluZyB0byBmaWxlL2RldmljZQoKICAjIFJlY29yZCB0eXBlIG5vcm1hbGl6YXRpb25zCiAgIyBVc2VmdWwgbGlua3M6CiAgIyBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vdG9ydmFsZHMvbGludXgvdjQuMTYvaW5jbHVkZS91YXBpL2xpbnV4L2F1ZGl0LmgKICAjIGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9saW51eC1hdWRpdC9hdWRpdC11c2Vyc3BhY2UvNGQ5MzMzMDFiMTgzNWNhZmEwOGI5ZTllZjcwNWM4ZmI2Yzk2Y2I2Mi9saWIvbGliYXVkaXQuaAogICMgaHR0cHM6Ly93d3cuZWxhc3RpYy5jby9ndWlkZS9lbi9lY3MvY3VycmVudC9lY3MtYWxsb3dlZC12YWx1ZXMtZXZlbnQtY2F0ZWdvcnkuaHRtbAoKICAjIElBTSByZWxhdGVkIGV2ZW50cwoKICAjIEFVRElUX0FDQ1RfTE9DSyAtIFVzZXIncyBhY2NvdW50IGxvY2tlZCBieSBhZG1pbgogIC0gcmVjb3JkX3R5cGVzOiBBQ0NUX0xPQ0sKICAgIGFjdGlvbjogbG9ja2VkLWFjY291bnQKICAgIGVjczoKICAgICAgPDw6ICplY3MtaWFtCiAgICAgIHR5cGU6CiAgICAgICAgLSB1c2VyCiAgICAgICAgLSBpbmZvCiAgIyBBVURJVF9BQ0NUX1VOTE9DSyAtIFVzZXIncyBhY2NvdW50IHVubG9ja2VkIGJ5IGFkbWluCiAgLSByZWNvcmRfdHlwZXM6IEFDQ1RfVU5MT0NLCiAgICBhY3Rpb246IHVubG9ja2VkLWFjY291bnQKICAgIGVjczoKICAgICAgPDw6ICplY3MtaWFtCiAgICAgIHR5cGU6CiAgICAgICAgLSB1c2VyCiAgICAgICAgLSBpbmZvCiAgIyBBVURJVF9BRERfR1JPVVAgLSBHcm91cCBhY2NvdW50IGFkZGVkCiAgLSByZWNvcmRfdHlwZXM6IEFERF9HUk9VUAogICAgYWN0aW9uOiBhZGRlZC1ncm91cC1hY2NvdW50LXRvCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IFtpZCwgYWNjdF0KICAgICAgd2hhdDogYWNjb3VudAogICAgZWNzOgogICAgICA8PDogKmVjcy1pYW0KICAgICAgdHlwZToKICAgICAgICAtIGdyb3VwCiAgICAgICAgLSBjcmVhdGlvbgogICMgQVVESVRfQUREX1VTRVIgLSBVc2VyIGFjY291bnQgYWRkZWQKICAtIHJlY29yZF90eXBlczogQUREX1VTRVIKICAgIGFjdGlvbjogYWRkZWQtdXNlci1hY2NvdW50CiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IFtpZCwgYWNjdF0KICAgICAgd2hhdDogYWNjb3VudAogICAgZWNzOgogICAgICA8PDogKmVjcy1pYW0KICAgICAgdHlwZToKICAgICAgICAtIHVzZXIKICAgICAgICAtIGNyZWF0aW9uCiAgIyBBVURJVF9ERUxfR1JPVVAgLSBHcm91cCBhY2NvdW50IGRlbGV0ZWQKICAtIHJlY29yZF90eXBlczogREVMX0dST1VQCiAgICBhY3Rpb246IGRlbGV0ZWQtZ3JvdXAtYWNjb3VudC1mcm9tCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IFtpZCwgYWNjdF0KICAgICAgd2hhdDogYWNjb3VudAogICAgZWNzOgogICAgICA8PDogKmVjcy1pYW0KICAgICAgdHlwZToKICAgICAgICAtIGdyb3VwCiAgICAgICAgLSBkZWxldGlvbgogICMgQVVESVRfREVMX1VTRVIgLSBVc2VyIGFjY291bnQgZGVsZXRlZAogIC0gcmVjb3JkX3R5cGVzOiBERUxfVVNFUgogICAgYWN0aW9uOiBkZWxldGVkLXVzZXItYWNjb3VudAogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBbaWQsIGFjY3RdCiAgICAgIHdoYXQ6IGFjY291bnQKICAgIGVjczoKICAgICAgPDw6ICplY3MtaWFtCiAgICAgIHR5cGU6CiAgICAgICAgLSB1c2VyCiAgICAgICAgLSBkZWxldGlvbgogICMgQVVESVRfR1JQX01HTVQgLSBHcm91cCBhY2NvdW50IGF0dHIgd2FzIG1vZGlmaWVkCiAgLSByZWNvcmRfdHlwZXM6IEdSUF9NR01UCiAgICBhY3Rpb246IG1vZGlmaWVkLWdyb3VwLWFjY291bnQKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogW2lkLCBhY2N0XQogICAgICB3aGF0OiBhY2NvdW50CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWlhbQogICAgICB0eXBlOgogICAgICAgIC0gZ3JvdXAKICAgICAgICAtIGNoYW5nZQogICMgQVVESVRfUk9MRV9BU1NJR04gLSBBZG1pbiBhc3NpZ25lZCB1c2VyIHRvIHJvbGUKICAtIHJlY29yZF90eXBlczogUk9MRV9BU1NJR04KICAgIGFjdGlvbjogYXNzaWduZWQtdXNlci1yb2xlLXRvCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IFtpZCwgYWNjdF0KICAgICAgd2hhdDogYWNjb3VudAogICAgZWNzOgogICAgICA8PDogKmVjcy1pYW0KICAgICAgdHlwZToKICAgICAgICAtIHVzZXIKICAgICAgICAtIGNoYW5nZQogICMgQVVESVRfUk9MRV9NT0RJRlkgLSBBZG1pbiBtb2RpZmllZCBhIHJvbGUKICAtIHJlY29yZF90eXBlczogUk9MRV9NT0RJRlkKICAgIGFjdGlvbjogbW9kaWZpZWQtcm9sZQogICAgZWNzOgogICAgICA8PDogKmVjcy1pYW0KICAgICAgdHlwZToKICAgICAgICAtIGNoYW5nZQogICMgQVVESVRfUk9MRV9SRU1PVkUgLSBBZG1pbiByZW1vdmVkIHVzZXIgZnJvbSByb2xlCiAgLSByZWNvcmRfdHlwZXM6IFJPTEVfUkVNT1ZFCiAgICBhY3Rpb246IHJlbW92ZWQtdXNlci1yb2xlLWZyb20KICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogW2lkLCBhY2N0XQogICAgICB3aGF0OiBhY2NvdW50CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWlhbQogICAgICB0eXBlOgogICAgICAgIC0gdXNlcgogICAgICAgIC0gY2hhbmdlCiAgIyBBVURJVF9VU0VSX01HTVQgLSBVc2VyIGFjY3QgYXR0cmlidXRlIGNoYW5nZQogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogVVNFUl9NR01UCiAgICBhY3Rpb246IG1vZGlmaWVkLXVzZXItYWNjb3VudAogICAgZWNzOgogICAgICA8PDogKmVjcy1pYW0KICAgICAgdHlwZToKICAgICAgICAtIHVzZXIKICAgICAgICAtIGNoYW5nZQogICMgQVVESVRfVVNFUl9DSEFVVEhUT0sgLSBVc2VyIGFjY3QgcGFzc3dvcmQgb3IgcGluIGNoYW5nZWQKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IFVTRVJfQ0hBVVRIVE9LCiAgICBhY3Rpb246IGNoYW5nZWQtcGFzc3dvcmQKICAgIGVjczoKICAgICAgPDw6ICplY3MtaWFtCiAgICAgIHR5cGU6CiAgICAgICAgLSB1c2VyCiAgICAgICAgLSBjaGFuZ2UKICAjIEFVRElUX0dSUF9DSEFVVEhUT0sgLSBHcm91cCBhY2N0IHBhc3N3b3JkIG9yIHBpbiBjaGFuZ2VkCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBHUlBfQ0hBVVRIVE9LCiAgICBhY3Rpb246IGNoYW5nZWQtZ3JvdXAtcGFzc3dvcmQKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogYWNjdAogICAgICB3aGF0OiB1c2VyLXNlc3Npb24KICAgIGVjczoKICAgICAgPDw6ICplY3MtaWFtCiAgICAgIHR5cGU6CiAgICAgICAgLSBncm91cAogICAgICAgIC0gY2hhbmdlCgogICMgQXV0aGVudGljYXRpb24gcmVsYXRlZCBldmVudHMKCiAgIyBBVURJVF9DUkVEX0FDUSAtIFVzZXIgY3JlZGVudGlhbCBhY3F1aXJlZAogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogQ1JFRF9BQ1EKICAgIGFjdGlvbjogYWNxdWlyZWQtY3JlZGVudGlhbHMKICAgIGVjczogKmVjcy1hdXRoCiAgIyBBVURJVF9DUkVEX0RJU1AgLSBVc2VyIGNyZWRlbnRpYWwgZGlzcG9zZWQKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IENSRURfRElTUAogICAgYWN0aW9uOiBkaXNwb3NlZC1jcmVkZW50aWFscwogICAgZWNzOiAqZWNzLWF1dGgKICAjIEFVRElUX0NSRURfUkVGUiAtIFVzZXIgY3JlZGVudGlhbCByZWZyZXNoZWQKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IENSRURfUkVGUgogICAgYWN0aW9uOiByZWZyZXNoZWQtY3JlZGVudGlhbHMKICAgIGVjczogKmVjcy1hdXRoCiAgIyBBVURJVF9HUlBfQVVUSCAtIEF1dGhlbnRpY2F0aW9uIGZvciBncm91cCBwYXNzd29yZAogIC0gcmVjb3JkX3R5cGVzOiBHUlBfQVVUSAogICAgYWN0aW9uOiBhdXRoZW50aWNhdGVkLXRvLWdyb3VwCiAgICBlY3M6ICplY3MtYXV0aAogICMgQVVESVRfTE9HSU4gLSBEZWZpbmUgdGhlIGxvZ2luIGlkIGFuZCBpbmZvcm1hdGlvbgogIC0gcmVjb3JkX3R5cGVzOiBMT0dJTgogICAgYWN0aW9uOiBjaGFuZ2VkLWxvZ2luLWlkLXRvCiAgICBzdWJqZWN0OgogICAgICBwcmltYXJ5OiBbb2xkX2F1aWQsIG9sZC1hdWlkXQogICAgICBzZWNvbmRhcnk6IHVpZAogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBhdWlkCiAgICAgIHdoYXQ6IHVzZXItc2Vzc2lvbgogICAgZWNzOgogICAgICA8PDogKmVjcy1hdXRoCiAgICAgIHR5cGU6IHN0YXJ0CiAgIyBBVURJVF9VU0VSX0FDQ1QgLSBVc2VyIHN5c3RlbSBhY2Nlc3MgYXV0aG9yaXphdGlvbgogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogVVNFUl9BQ0NUCiAgICBhY3Rpb246IHdhcy1hdXRob3JpemVkCiAgICBlY3M6ICplY3MtYXV0aAogICMgQVVESVRfVVNFUl9BVVRIIC0gVXNlciBzeXN0ZW0gYWNjZXNzIGF1dGhlbnRpY2F0aW9uCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBVU0VSX0FVVEgKICAgIGFjdGlvbjogYXV0aGVudGljYXRlZAogICAgZWNzOiAqZWNzLWF1dGgKICAjIEFVRElUX1VTRVJfRU5EIC0gVXNlciBzZXNzaW9uIGVuZAogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogVVNFUl9FTkQKICAgIGFjdGlvbjogZW5kZWQtc2Vzc2lvbgogICAgZWNzOiAqZWNzLWF1dGgKICAjIEFVRElUX1VTRVJfRVJSIC0gVXNlciBhY2N0IHN0YXRlIGVycm9yCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBVU0VSX0VSUgogICAgYWN0aW9uOiBlcnJvcgogICAgc291cmNlX2lwOiBbYWRkcl0KICAgIGVjczogKmVjcy1hdXRoCiAgIyBBVURJVF9VU0VSX0xPR0lOIC0gVXNlciBoYXMgbG9nZ2VkIGluCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBVU0VSX0xPR0lOCiAgICBhY3Rpb246IGxvZ2dlZC1pbgogICAgc291cmNlX2lwOiBbYWRkcl0KICAgIGVjczoKICAgICAgPDw6ICplY3MtYXV0aAogICAgICB0eXBlOiBzdGFydAogICMgQVVESVRfVVNFUl9MT0dPVVQgLSBVc2VyIGhhcyBsb2dnZWQgb3V0CiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBVU0VSX0xPR09VVAogICAgYWN0aW9uOiBsb2dnZWQtb3V0CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWF1dGgKICAgICAgdHlwZTogZW5kCiAgIyBBVURJVF9VU0VSX1JPTEVfQ0hBTkdFIC0gVXNlciBjaGFuZ2VkIHRvIGEgbmV3IHJvbGUKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IFVTRVJfUk9MRV9DSEFOR0UKICAgIGFjdGlvbjogY2hhbmdlZC1yb2xlLXRvCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IHNlbGVjdGVkLWNvbnRleHQKICAgICAgd2hhdDogdXNlci1zZXNzaW9uCiAgIyBBVURJVF9VU0VSX1NUQVJUIC0gVXNlciBzZXNzaW9uIHN0YXJ0CiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBVU0VSX1NUQVJUCiAgICBhY3Rpb246IHN0YXJ0ZWQtc2Vzc2lvbgogICAgc291cmNlX2lwOiBbYWRkcl0KICAgIGVjczogKmVjcy1hdXRoCgogICMgSG9zdCB2aXJ0dWFsaXphdGlvbiBldmVudHMKCiAgIyBBVURJVF9WSVJUX0NPTlRST0wgLSBTdGFydCwgUGF1c2UsIFN0b3AgVk0KICAtIHJlY29yZF90eXBlczogVklSVF9DT05UUk9MCiAgICBhY3Rpb246IGlzc3VlZC12bS1jb250cm9sCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IG9wCiAgICAgIHNlY29uZGFyeTogdm0KICAgICAgd2hhdDogdmlydHVhbC1tYWNoaW5lCiAgICBlY3M6ICplY3MtaG9zdAogICMgQVVESVRfVklSVF9DUkVBVEUgLSBDcmVhdGlvbiBvZiBndWVzdCBpbWFnZQogIC0gcmVjb3JkX3R5cGVzOiBWSVJUX0NSRUFURQogICAgYWN0aW9uOiBjcmVhdGVkLXZtLWltYWdlCiAgICBlY3M6ICplY3MtaG9zdAogICMgQVVESVRfVklSVF9ERVNUUk9ZIC0gRGVzdHJ1Y3Rpb24gb2YgZ3Vlc3QgaW1hZ2UKICAtIHJlY29yZF90eXBlczogVklSVF9ERVNUUk9ZCiAgICBhY3Rpb246IGRlbGV0ZWQtdm0taW1hZ2UKICAgIGVjczogKmVjcy1ob3N0CiAgIyBBVURJVF9WSVJUX0lOVEVHUklUWV9DSEVDSyAtIEd1ZXN0IGludGVncml0eSByZXN1bHRzCiAgLSByZWNvcmRfdHlwZXM6IFZJUlRfSU5URUdSSVRZX0NIRUNLCiAgICBhY3Rpb246IGNoZWNrZWQtaW50ZWdyaXR5LW9mCiAgICBlY3M6ICplY3MtaG9zdAogICMgQVVESVRfVklSVF9NQUNISU5FX0lEIC0gQmluZGluZyBvZiBsYWJlbCB0byBWTQogIC0gcmVjb3JkX3R5cGVzOiBWSVJUX01BQ0hJTkVfSUQKICAgIGFjdGlvbjogYXNzaWduZWQtdm0taWQKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogdm0KICAgICAgd2hhdDogdmlydHVhbC1tYWNoaW5lCiAgICBlY3M6ICplY3MtaG9zdAogICMgQVVESVRfVklSVF9NSUdSQVRFX0lOIC0gSW5ib3VuZCBndWVzdCBtaWdyYXRpb24gaW5mbwogIC0gcmVjb3JkX3R5cGVzOiBWSVJUX01JR1JBVEVfSU4KICAgIGFjdGlvbjogbWlncmF0ZWQtdm0tZnJvbQogICAgZWNzOiAqZWNzLWhvc3QKICAjIEFVRElUX1ZJUlRfTUlHUkFURV9PVVQgLSBPdXRib3VuZCBndWVzdCBtaWdyYXRpb24gaW5mbwogIC0gcmVjb3JkX3R5cGVzOiBWSVJUX01JR1JBVEVfT1VUCiAgICBhY3Rpb246IG1pZ3JhdGVkLXZtLXRvCiAgICBlY3M6ICplY3MtaG9zdAogICMgQVVESVRfVklSVF9SRVNPVVJDRSAtIFJlc291cmNlIGFzc2lnbm1lbnQKICAtIHJlY29yZF90eXBlczogVklSVF9SRVNPVVJDRQogICAgYWN0aW9uOiBhc3NpZ25lZC12bS1yZXNvdXJjZQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiByZXNyYwogICAgICBzZWNvbmRhcnk6IHZtCiAgICAgIHdoYXQ6IHZpcnR1YWwtbWFjaGluZQogICAgZWNzOiAqZWNzLWhvc3QKCiAgIyBVc2Vyc3BhY2UgcHJvY2VzcyBldmVudHMKCiAgIyBBVURJVF9DSEdSUF9JRCAtIFVzZXIgc3BhY2UgZ3JvdXAgSUQgY2hhbmdlZAogIC0gcmVjb3JkX3R5cGVzOiBDSEdSUF9JRAogICAgYWN0aW9uOiBjaGFuZ2VkLWdyb3VwCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogY2hhbmdlCiAgIyBBVURJVF9DSFVTRVJfSUQgLSBDaGFuZ2VkIHVzZXIgSUQgc3VwcGxlbWVudGFsIGRhdGEKICAtIHJlY29yZF90eXBlczogQ0hVU0VSX0lECiAgICBhY3Rpb246IGNoYW5nZWQtdXNlci1pZAogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IGNoYW5nZQogICMgQVVESVRfVEVTVCAtIFVzZWQgZm9yIHRlc3Qgc3VjY2VzcyBtZXNzYWdlcwogIC0gcmVjb3JkX3R5cGVzOiBURVNUCiAgICBhY3Rpb246IHNlbnQtdGVzdAogICAgZWNzOiAqZWNzLXByb2Nlc3MKICAjIEFVRElUX1RSVVNURURfQVBQIC0gVHJ1c3RlZCBhcHAgbXNnIC0gZnJlZXN0eWxlIHRleHQKICAtIHJlY29yZF90eXBlczogVFJVU1RFRF9BUFAKICAgIGFjdGlvbjogdW5rbm93bgogICAgZWNzOiAqZWNzLXByb2Nlc3MKICAjIEFVRElUX1VTRVJfQ01EIC0gVXNlciBzaGVsbCBjb21tYW5kIGFuZCBhcmdzCiAgLSByZWNvcmRfdHlwZXM6IFVTRVJfQ01ECiAgICBhY3Rpb246IHJhbi1jb21tYW5kCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGNtZAogICAgICB3aGF0OiBwcm9jZXNzCiAgICBkZXNjcmlwdGlvbjogPgogICAgICBUaGVzZSBtZXNzYWdlcyBhcmUgZnJvbSB1c2VyLXNwYWNlIGFwcHMsIGxpa2Ugc3VkbywgdGhhdCBsb2cgY29tbWFuZHMKICAgICAgYmVpbmcgcnVuIGJ5IGEgdXNlci4gVGhlIHVpZCBjb250YWluZWQgaW4gdGhlc2UgbWVzc2FnZXMgaXMgdXNlcidzIFVJRCBhdAogICAgICB0aGUgdGltZSB0aGUgY29tbWFuZCB3YXMgcnVuLiBJdCBpcyBub3QgdGhlICJ0YXJnZXQiIFVJRCB1c2VkIHRvIHJ1biB0aGUKICAgICAgY29tbWFuZCwgd2hpY2ggaXMgbm9ybWFsbHkgcm9vdC4KICAgIGVjczoKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBzdGFydAoKICAjIEhvc3QtbGV2ZWwgZXZlbnRzCgogICMgQVVESVRfU1lTVEVNX0JPT1QgLSBTeXN0ZW0gYm9vdAogIC0gcmVjb3JkX3R5cGVzOiBTWVNURU1fQk9PVAogICAgYWN0aW9uOiBib290ZWQtc3lzdGVtCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHN5c3RlbQogICAgZWNzOgogICAgICA8PDogKmVjcy1ob3N0CiAgICAgIHR5cGU6IHN0YXJ0CiAgIyBBVURJVF9TWVNURU1fUlVOTEVWRUwgLSBTeXN0ZW0gcnVubGV2ZWwgY2hhbmdlCiAgLSByZWNvcmRfdHlwZXM6IFNZU1RFTV9SVU5MRVZFTAogICAgYWN0aW9uOiBjaGFuZ2VkLXRvLXJ1bmxldmVsCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IG5ldy1sZXZlbAogICAgICB3aGF0OiBzeXN0ZW0KICAgIGVjczoKICAgICAgPDw6ICplY3MtaG9zdAogICAgICB0eXBlOiBjaGFuZ2UKICAjIEFVRElUX1NZU1RFTV9TSFVURE9XTiAtIFN5c3RlbSBzaHV0ZG93bgogIC0gcmVjb3JkX3R5cGVzOiBTWVNURU1fU0hVVERPV04KICAgIGFjdGlvbjogc2h1dGRvd24tc3lzdGVtCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHN5c3RlbQogICAgZWNzOgogICAgICA8PDogKmVjcy1ob3N0CiAgICAgIHR5cGU6IGVuZAoKICAjIFNlcnZpY2UtbGV2ZWwgZXZlbnRzCgogICMgQVVESVRfU0VSVklDRV9TVEFSVCAtIFNlcnZpY2UgKGRhZW1vbikgc3RhcnQKICAtIHJlY29yZF90eXBlczogU0VSVklDRV9TVEFSVAogICAgYWN0aW9uOiBzdGFydGVkLXNlcnZpY2UKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogdW5pdAogICAgICB3aGF0OiBzZXJ2aWNlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogc3RhcnQKICAjIEFVRElUX1NFUlZJQ0VfU1RPUCAtIFNlcnZpY2UgKGRhZW1vbikgc3RvcAogIC0gcmVjb3JkX3R5cGVzOiBTRVJWSUNFX1NUT1AKICAgIGFjdGlvbjogc3RvcHBlZC1zZXJ2aWNlCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IHVuaXQKICAgICAgd2hhdDogc2VydmljZQogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IHN0b3AKCiAgIyBBdWRpdGQgaW50ZXJuYWwgZXZlbnRzCgogICMgQVVESVRfQ09ORklHX0NIQU5HRSAtIEF1ZGl0IHN5c3RlbSBjb25maWd1cmF0aW9uIGNoYW5nZQogIC0gcmVjb3JkX3R5cGVzOiBDT05GSUdfQ0hBTkdFCiAgICBhY3Rpb246IGNoYW5nZWQtYXVkaXQtY29uZmlndXJhdGlvbgogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OgogICAgICAgIFtvcCwga2V5LCBhdWRpdF9lbmFibGVkLCBhdWRpdF9waWQsIGF1ZGl0X2JhY2tsb2dfbGltaXQsIGF1ZGl0X2ZhaWx1cmVdCiAgICAgIHdoYXQ6IGF1ZGl0LWNvbmZpZwogICAgZWNzOgogICAgICBjYXRlZ29yeTogW3Byb2Nlc3MsIGNvbmZpZ3VyYXRpb25dCiAgICAgIHR5cGU6IGNoYW5nZQogICMgQVVESVRfREFFTU9OX0FCT1JUIC0gRGFlbW9uIGVycm9yIHN0b3AgcmVjb3JkCiAgLSByZWNvcmRfdHlwZXM6IERBRU1PTl9BQk9SVAogICAgYWN0aW9uOiBhYm9ydGVkLWF1ZGl0ZC1zdGFydHVwCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNlcnZpY2UKICAgIGVjczoKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBzdG9wCiAgIyBBVURJVF9EQUVNT05fQUNDRVBUIC0gQXVkaXRkIGFjY2VwdGVkIHJlbW90ZSBjb25uZWN0aW9uCiAgLSByZWNvcmRfdHlwZXM6IERBRU1PTl9BQ0NFUFQKICAgIGFjdGlvbjogcmVtb3RlLWF1ZGl0LWNvbm5lY3RlZAogICAgb2JqZWN0OgogICAgICB3aGF0OiBzZXJ2aWNlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLW5ldHdvcmsKICAgICAgdHlwZToKICAgICAgICAtIGNvbm5lY3Rpb24KICAgICAgICAtIHN0YXJ0CiAgIyBBVURJVF9EQUVNT05fQ0xPU0UgLSBBdWRpdGQgY2xvc2VkIHJlbW90ZSBjb25uZWN0aW9uCiAgLSByZWNvcmRfdHlwZXM6IERBRU1PTl9DTE9TRQogICAgYWN0aW9uOiByZW1vdGUtYXVkaXQtZGlzY29ubmVjdGVkCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNlcnZpY2UKICAgIGVjczoKICAgICAgPDw6ICplY3MtbmV0d29yawogICAgICB0eXBlOgogICAgICAgIC0gY29ubmVjdGlvbgogICAgICAgIC0gc3RhcnQKICAjIEFVRElUX0RBRU1PTl9DT05GSUcgLSBEYWVtb24gY29uZmlnIGNoYW5nZQogIC0gcmVjb3JkX3R5cGVzOiBEQUVNT05fQ09ORklHCiAgICBhY3Rpb246IGNoYW5nZWQtYXVkaXRkLWNvbmZpZ3VyYXRpb24KICAgIG9iamVjdDoKICAgICAgd2hhdDogc2VydmljZQogICAgZWNzOgogICAgICBjYXRlZ29yeTogW3Byb2Nlc3MsIGNvbmZpZ3VyYXRpb25dCiAgICAgIHR5cGU6IGNoYW5nZQogICMgQVVESVRfREFFTU9OX0VORCAtIERhZW1vbiBub3JtYWwgc3RvcCByZWNvcmQKICAtIHJlY29yZF90eXBlczogREFFTU9OX0VORAogICAgYWN0aW9uOiBzaHV0ZG93bi1hdWRpdAogICAgb2JqZWN0OgogICAgICB3aGF0OiBzZXJ2aWNlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogc3RvcAogICMgQVVESVRfREFFTU9OX0VSUiAtIEF1ZGl0ZCBpbnRlcm5hbCBlcnJvcgogIC0gcmVjb3JkX3R5cGVzOiBEQUVNT05fRVJSCiAgICBhY3Rpb246IGF1ZGl0LWVycm9yCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNlcnZpY2UKICAgIGVjczogKmVjcy1wcm9jZXNzCiAgIyBBVURJVF9EQUVNT05fUkVDT05GSUcgLSBBdWRpdGQgc2hvdWxkIHJlY29uZmlndXJlCiAgLSByZWNvcmRfdHlwZXM6IERBRU1PTl9SRUNPTkZJRwogICAgYWN0aW9uOiByZWNvbmZpZ3VyZWQtYXVkaXRkCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNlcnZpY2UKICAgIGVjczoKICAgICAgY2F0ZWdvcnk6IFtwcm9jZXNzLCBjb25maWd1cmF0aW9uXQogICAgICB0eXBlOiBpbmZvCiAgIyBBVURJVF9EQUVNT05fUkVTVU1FIC0gQXVkaXRkIHNob3VsZCByZXN1bWUgbG9nZ2luZwogIC0gcmVjb3JkX3R5cGVzOiBEQUVNT05fUkVTVU1FCiAgICBhY3Rpb246IHJlc3VtZWQtYXVkaXQtbG9nZ2luZwogICAgb2JqZWN0OgogICAgICB3aGF0OiBzZXJ2aWNlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogY2hhbmdlCiAgIyBBVURJVF9EQUVNT05fUk9UQVRFIC0gQXVkaXRkIHNob3VsZCByb3RhdGUgbG9ncwogIC0gcmVjb3JkX3R5cGVzOiBEQUVNT05fUk9UQVRFCiAgICBhY3Rpb246IHJvdGF0ZWQtYXVkaXQtbG9ncwogICAgb2JqZWN0OgogICAgICB3aGF0OiBzZXJ2aWNlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogY2hhbmdlCiAgIyBBVURJVF9EQUVNT05fU1RBUlQgLSBEYWVtb24gc3RhcnR1cCByZWNvcmQKICAtIHJlY29yZF90eXBlczogREFFTU9OX1NUQVJUCiAgICBhY3Rpb246IHN0YXJ0ZWQtYXVkaXQKICAgIG9iamVjdDoKICAgICAgd2hhdDogc2VydmljZQogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IHN0YXJ0CiAgIyBBVURJVF9LRVJORUwgLSBBc3luY2hyb25vdXMgYXVkaXQgcmVjb3JkLiBOT1QgQSBSRVFVRVNULgogIC0gcmVjb3JkX3R5cGVzOiBLRVJORUwKICAgIGFjdGlvbjogaW5pdGlhbGl6ZWQtYXVkaXQtc3Vic3lzdGVtCiAgICBlY3M6ICplY3MtcHJvY2VzcwoKICAjIENvbmZpZ3VyYXRpb24gY2hhbmdlIGV2ZW50cwoKICAjIEFVRElUX1VTWVNfQ09ORklHIC0gVXNlciBzcGFjZSBzeXN0ZW0gY29uZmlnIGNoYW5nZQogIC0gcmVjb3JkX3R5cGVzOiBVU1lTX0NPTkZJRwogICAgYWN0aW9uOiBjaGFuZ2VkLWNvbmZpZ3VyYXRpb24KICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogb3AKICAgICAgd2hhdDogc3lzdGVtCiAgICBlY3M6CiAgICAgIGNhdGVnb3J5OiBjb25maWd1cmF0aW9uCiAgICAgIHR5cGU6IGNoYW5nZQogICMgQVVESVRfTkVURklMVEVSX0NGRyAtIE5ldGZpbHRlciBjaGFpbiBtb2RpZmljYXRpb25zCiAgLSByZWNvcmRfdHlwZXM6IE5FVEZJTFRFUl9DRkcKICAgIGFjdGlvbjogbG9hZGVkLWZpcmV3YWxsLXJ1bGUtdG8KICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogdGFibGUKICAgICAgd2hhdDogZmlyZXdhbGwKICAgIGVjczoKICAgICAgY2F0ZWdvcnk6IGNvbmZpZ3VyYXRpb24KICAgICAgdHlwZTogY2hhbmdlCiAgIyBBVURJVF9GRUFUVVJFX0NIQU5HRSAtIGF1ZGl0IGxvZyBsaXN0aW5nIGZlYXR1cmUgY2hhbmdlcwogIC0gcmVjb3JkX3R5cGVzOiBGRUFUVVJFX0NIQU5HRQogICAgYWN0aW9uOiBjaGFuZ2VkLWF1ZGl0LWZlYXR1cmUKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogZmVhdHVyZQogICAgICB3aGF0OiBzeXN0ZW0KICAgIGVjczoKICAgICAgY2F0ZWdvcnk6IGNvbmZpZ3VyYXRpb24KICAgICAgdHlwZTogY2hhbmdlCiAgIyBBVURJVF9SRVBMQUNFIC0gUmVwbGFjZSBhdWRpdGQgaWYgdGhpcyBwYWNrZXQgdW5hbnN3ZXJkCgogICMgVFRZIGV2ZW50cwoKICAtIHJlY29yZF90eXBlczoKICAgICAgIyBBVURJVF9UVFkgLSBJbnB1dCBvbiBhbiBhZG1pbmlzdHJhdGl2ZSBUVFkKICAgICAgLSBUVFkKICAgICAgIyBBVURJVF9VU0VSX1RUWSAtIE5vbi1JQ0FOT04gVFRZIGlucHV0IG1lYW5pbmcKICAgICAgLSBVU0VSX1RUWQogICAgYWN0aW9uOiB0eXBlZAogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBkYXRhCiAgICAgIHdoYXQ6IGtleXN0cm9rZXMKICAgIGhvdzogW2NvbW0sIGV4ZV0KCiAgIyBQb2xpY3kgZXZlbnRzCgogICMgQVVESVRfQVZDIC0gU0UgTGludXggYXZjIGRlbmlhbCBvciBncmFudCAoc2VsaW51eCkKICAtIHJlY29yZF90eXBlczogQVZDCiAgICBhY3Rpb246IHZpb2xhdGVkLXNlbGludXgtcG9saWN5CiAgICBzdWJqZWN0OgogICAgICBwcmltYXJ5OiBzY29udGV4dAogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiB0Y29udGV4dAogICAgICBzZWNvbmRhcnk6IHRjbGFzcwogICAgaGFzX2ZpZWxkczoKICAgICAgLSBzZXJlc3VsdAogICMgQVVESVRfQVZDIC0gU0UgTGludXggYXZjIGRlbmlhbCBvciBncmFudCAoYXBwYXJtb3IpCiAgLSByZWNvcmRfdHlwZXM6IEFWQwogICAgYWN0aW9uOiB2aW9sYXRlZC1hcHBhcm1vci1wb2xpY3kKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogb3BlcmF0aW9uCiAgICAgIHNlY29uZGFyeTogW3JlcXVlc3RlZF9tYXNrLCBkZW5pZWRfbWFzaywgY2FwbmFtZV0KICAgICAgd2hhdDogcG9saWN5CiAgICBoYXNfZmllbGRzOgogICAgICAtIGFwcGFybW9yCiAgIyBBVURJVF9GU19SRUxBQkVMIC0gRmlsZXN5c3RlbSByZWxhYmVsZWQKICAtIHJlY29yZF90eXBlczogRlNfUkVMQUJFTAogICAgYWN0aW9uOiByZWxhYmVsZWQtZmlsZXN5c3RlbQogICAgb2JqZWN0OgogICAgICB3aGF0OiBtYWMtY29uZmlnCiAgIyBBVURJVF9MQUJFTF9MRVZFTF9DSEFOR0UgLSBPYmplY3QncyBsZXZlbCB3YXMgY2hhbmdlZAogIC0gcmVjb3JkX3R5cGVzOiBMQUJFTF9MRVZFTF9DSEFOR0UKICAgIGFjdGlvbjogbW9kaWZpZWQtbGV2ZWwtb2YKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogcHJpbnRlcgogICAgICB3aGF0OiBwcmludGVyCiAgIyBBVURJVF9MQUJFTF9PVkVSUklERSAtIEFkbWluIGlzIG92ZXJyaWRpbmcgYSBsYWJlbAogIC0gcmVjb3JkX3R5cGVzOiBMQUJFTF9PVkVSUklERQogICAgYWN0aW9uOiBvdmVycm9kZS1sYWJlbC1vZgogICAgb2JqZWN0OgogICAgICB3aGF0OiBtYWMtY29uZmlnCiAgIyBBVURJVF9NQUNfQ0hFQ0sgLSBVc2VyIHNwYWNlIE1BQyBkZWNpc2lvbiByZXN1bHRzCiAgLSByZWNvcmRfdHlwZXM6IE1BQ19DSEVDSwogICAgYWN0aW9uOiBtYWMtcGVybWlzc2lvbgogICMgQVVESVRfTUFDX0NPTkZJR19DSEFOR0UgLSBDaGFuZ2VzIHRvIGJvb2xlYW5zCiAgLSByZWNvcmRfdHlwZXM6IE1BQ19DT05GSUdfQ0hBTkdFCiAgICBhY3Rpb246IGNoYW5nZWQtc2VsaW51eC1ib29sZWFuCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGJvb2wKICAgICAgd2hhdDogbWFjLWNvbmZpZwogICAgZWNzOgogICAgICBjYXRlZ29yeTogY29uZmlndXJhdGlvbgogICAgICB0eXBlOiBjaGFuZ2UKICAjIEFVRElUX01BQ19QT0xJQ1lfTE9BRCAtIFBvbGljeSBmaWxlIGxvYWQKICAtIHJlY29yZF90eXBlczogTUFDX1BPTElDWV9MT0FECiAgICBhY3Rpb246IGxvYWRlZC1zZWxpbnV4LXBvbGljeQogICAgb2JqZWN0OgogICAgICB3aGF0OiBtYWMtY29uZmlnCiAgICBlY3M6CiAgICAgIGNhdGVnb3J5OiBjb25maWd1cmF0aW9uCiAgICAgIHR5cGU6IGFjY2VzcwogICMgQVVESVRfTUFDX1NUQVRVUyAtIENoYW5nZWQgZW5mb3JjaW5nLHBlcm1pc3NpdmUsb2ZmCiAgLSByZWNvcmRfdHlwZXM6IE1BQ19TVEFUVVMKICAgIGFjdGlvbjogY2hhbmdlZC1zZWxpbnV4LWVuZm9yY2VtZW50CiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGVuZm9yY2luZwogICAgICB3aGF0OiBtYWMtY29uZmlnCiAgICBlY3M6CiAgICAgIGNhdGVnb3J5OiBjb25maWd1cmF0aW9uCiAgICAgIHR5cGU6IGNoYW5nZQogICMgQVVESVRfVVNFUl9BVkMgLSBVc2VyIHNwYWNlIGF2YyBtZXNzYWdlCiAgLSByZWNvcmRfdHlwZXM6IFVTRVJfQVZDCiAgICBhY3Rpb246IGFjY2Vzcy1wZXJtaXNzaW9uCiAgIyBBVURJVF9VU0VSX01BQ19DT05GSUdfQ0hBTkdFIC0gQ2hhbmdlIG1hZGUgdG8gTUFDIHBvbGljeQogIC0gcmVjb3JkX3R5cGVzOiBVU0VSX01BQ19DT05GSUdfQ0hBTkdFCiAgICBhY3Rpb246IGNoYW5nZWQtbWFjLWNvbmZpZ3VyYXRpb24KICAgIG9iamVjdDoKICAgICAgd2hhdDogbWFjLWNvbmZpZwogICAgZWNzOgogICAgICBjYXRlZ29yeTogY29uZmlndXJhdGlvbgogICAgICB0eXBlOiBjaGFuZ2UKICAjIEFVRElUX1VTRVJfTUFDX1BPTElDWV9MT0FEIC0gVXNlcnNwYyBkYWVtb24gbG9hZGVkIHBvbGljCiAgLSByZWNvcmRfdHlwZXM6IFVTRVJfTUFDX1BPTElDWV9MT0FECiAgICBhY3Rpb246IGxvYWRlZC1tYWMtcG9saWN5CiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IG1hYy1jb25maWcKICAgIGVjczoKICAgICAgY2F0ZWdvcnk6IGNvbmZpZ3VyYXRpb24KICAgICAgdHlwZTogYWNjZXNzCiAgIyBBVURJVF9VU0VSX1NFTElOVVhfRVJSIC0gU0UgTGludXggdXNlciBzcGFjZSBlcnJvcgogIC0gcmVjb3JkX3R5cGVzOiBVU0VSX1NFTElOVVhfRVJSCiAgICBhY3Rpb246IGFjY2Vzcy1lcnJvcgogICMgQVVESVRfU0VDQ09NUCAtIFNlY3VyZSBDb21wdXRpbmcgZXZlbnQKICAtIHJlY29yZF90eXBlczogU0VDQ09NUAogICAgYWN0aW9uOiB2aW9sYXRlZC1zZWNjb21wLXBvbGljeQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBzeXNjYWxsCiAgICAgIHdoYXQ6IHByb2Nlc3MKICAjIEFVRElUX1NFTElOVVhfRVJSIC0gSW50ZXJuYWwgU0UgTGludXggRXJyb3JzCiAgLSBhY3Rpb246IGNhdXNlZC1tYWMtcG9saWN5LWVycm9yCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHN5c3RlbQogICAgcmVjb3JkX3R5cGVzOiBTRUxJTlVYX0VSUgogICMgQVVESVRfQVBQQVJNT1JfQUxMT1dFRAogICMgQVVESVRfQVBQQVJNT1JfREVOSUVECiAgIyBBVURJVF9BUFBBUk1PUl9FUlJPUgogICMgQVVESVRfQVZDX1BBVEggLSBkZW50cnksIHZmc21vdW50IHBhaXIgZnJvbSBhdmMKICAjIEFVRElUX0FQUEFSTU9SX0FVRElUCiAgIyBBVURJVF9BUFBBUk1PUl9ISU5UCiAgIyBBVURJVF9BUFBBUk1PUl9TVEFUVVMKICAjIEFVRElUX0FQUEFSTU9SX0VSUk9SCiAgIyBBVURJVF9ERVZfQUxMT0MgLSBEZXZpY2Ugd2FzIGFsbG9jYXRlZAogICMgQVVESVRfREVWX0RFQUxMT0MgLSBEZXZpY2Ugd2FzIGRlYWxsb2NhdGVkCiAgIyBBVURJVF9NQUNfVU5MQkxfQUxMT1cgLSBOZXRMYWJlbDogYWxsb3cgdW5sYWJlbGVkIHRyYWZmaWMKICAjIEFVRElUX01BQ19DSVBTT1Y0X0FERCAtIE5ldExhYmVsOiBhZGQgQ0lQU092NCBET0kgZW50cnkKICAjIEFVRElUX01BQ19DSVBTT1Y0X0RFTCAtIE5ldExhYmVsOiBkZWwgQ0lQU092NCBET0kgZW50cnkKICAjIEFVRElUX01BQ19NQVBfQUREIC0gTmV0TGFiZWw6IGFkZCBMU00gZG9tYWluIG1hcHBpbmcKICAjIEFVRElUX01BQ19NQVBfREVMIC0gTmV0TGFiZWw6IGRlbCBMU00gZG9tYWluIG1hcHBpbmcKICAjIEFVRElUX01BQ19JUFNFQ19FVkVOVCAtIEF1ZGl0IGFuIElQU2VjIGV2ZW50CiAgIyBBVURJVF9NQUNfVU5MQkxfU1RDQUREIC0gTmV0TGFiZWw6IGFkZCBhIHN0YXRpYyBsYWJlbAogICMgQVVESVRfTUFDX1VOTEJMX1NUQ0RFTCAtIE5ldExhYmVsOiBkZWwgYSBzdGF0aWMgbGFiZWwKICAjIEFVRElUX01BQ19DQUxJUFNPX0FERCAtIE5ldExhYmVsOiBhZGQgQ0FMSVBTTyBET0kgZW50cnkKICAjIEFVRElUX01BQ19DQUxJUFNPX0RFTCAtIE5ldExhYmVsOiBkZWwgQ0FMSVBTTyBET0kgZW50cnkKICAjIEFVRElUX1VTRVJfTEFCRUxFRF9FWFBPUlQgLSBPYmplY3QgZXhwb3J0ZWQgd2l0aCBsYWJlbAogICMgQVVESVRfVVNFUl9VTkxBQkVMRURfRVhQT1JUIC0gT2JqZWN0IGV4cG9ydGVkIHdpdGhvdXQgbGFiZWwKCiAgIyBDcnlwdG8gZXZlbnRzCgogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIGFjdGlvbjogbmVnb3RpYXRlZC1jcnlwdG8ta2V5CiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGZwCiAgICAgIHNlY29uZGFyeTogW2FkZHIsIGhvc3RuYW1lXQogICAgICB3aGF0OiB1c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogQ1JZUFRPX0tFWV9VU0VSCiAgICBzb3VyY2VfaXA6IFthZGRyXQogICAgZWNzOiAqZWNzLXByb2Nlc3MKICAtIGFjdGlvbjogY3J5cHRvLW9mZmljZXItbG9nZ2VkLWluCiAgICByZWNvcmRfdHlwZXM6IENSWVBUT19MT0dJTgogIC0gYWN0aW9uOiBjcnlwdG8tb2ZmaWNlci1sb2dnZWQtb3V0CiAgICByZWNvcmRfdHlwZXM6IENSWVBUT19MT0dPVVQKICAgIGVjczogKmVjcy1wcm9jZXNzCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgYWN0aW9uOiBzdGFydGVkLWNyeXB0by1zZXNzaW9uCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGFkZHIKICAgICAgc2Vjb25kYXJ5OiBbcnBvcnRdCiAgICByZWNvcmRfdHlwZXM6IENSWVBUT19TRVNTSU9OCiAgICBzb3VyY2VfaXA6IFthZGRyXQogICAgZWNzOiAqZWNzLXByb2Nlc3MKICAtIGFjdGlvbjogYWNjZXNzLXJlc3VsdAogICAgcmVjb3JkX3R5cGVzOiBEQUNfQ0hFQ0sKCiAgIyBBbm9tYWxpZXMKCiAgIyBBVURJVF9BTk9NX0FCRU5EIC0gUHJvY2VzcyBlbmRlZCBhYm5vcm1hbGx5CiAgLSByZWNvcmRfdHlwZXM6IEFOT01fQUJFTkQKICAgIGFjdGlvbjogY3Jhc2hlZC1wcm9ncmFtCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IFtjb21tLCBleGVdCiAgICAgIHNlY29uZGFyeTogcGlkCiAgICAgIHdoYXQ6IHByb2Nlc3MKICAgIGhvdzogc2lnCiAgICBlY3M6CiAgICAgICMgY29uc2lkZXIgYWRkaW5nIGFuIGFub21hbHkgY2F0ZWdvcnkgd2hlbiB3ZSBpbnRyb2R1Y2UKICAgICAgIyB0byBFQ1MKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBlbmQKICAjIEFVRElUX0FOT01fRVhFQyAtIEV4ZWN1dGlvbiBvZiBmaWxlCiAgLSByZWNvcmRfdHlwZXM6IEFOT01fRVhFQwogICAgYWN0aW9uOiBhdHRlbXB0ZWQtZXhlY3V0aW9uLW9mLWZvcmJpZGRlbi1wcm9ncmFtCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGNtZAogICAgICB3aGF0OiBwcm9jZXNzCiAgICBob3c6IHRlcm1pbmFsCiAgICBlY3M6CiAgICAgICMgY29uc2lkZXIgYWRkaW5nIGFuIGFub21hbHkgY2F0ZWdvcnkgd2hlbiB3ZSBpbnRyb2R1Y2UKICAgICAgIyB0byBFQ1MKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBzdGFydAogICMgQVVESVRfQU5PTV9MSU5LIC0gU3VzcGljaW91cyB1c2Ugb2YgZmlsZSBsaW5rcwogIC0gcmVjb3JkX3R5cGVzOiBBTk9NX0xJTksKICAgIGFjdGlvbjogdXNlZC1zdXNwaWNpb3VzLWxpbmsKICAjIEFVRElUX0FOT01fTE9HSU5fRkFJTFVSRVMgLSBGYWlsZWQgbG9naW4gbGltaXQgcmVhY2hlZAogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogQU5PTV9MT0dJTl9GQUlMVVJFUwogICAgYWN0aW9uOiBmYWlsZWQtbG9nLWluLXRvby1tYW55LXRpbWVzLXRvCiAgIyBBVURJVF9BTk9NX0xPR0lOX0xPQ0FUSU9OIC0gTG9naW4gZnJvbSBmb3JiaWRkZW4gbG9jYXRpb24KICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IEFOT01fTE9HSU5fTE9DQVRJT04KICAgIGFjdGlvbjogYXR0ZW1wdGVkLWxvZy1pbi1mcm9tLXVudXN1YWwtcGxhY2UtdG8KICAjIEFVRElUX0FOT01fTE9HSU5fU0VTU0lPTlMgLSBNYXggY29uY3VycmVudCBzZXNzaW9ucyByZWFjaGVkCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBBTk9NX0xPR0lOX1NFU1NJT05TCiAgICBhY3Rpb246IG9wZW5lZC10b28tbWFueS1zZXNzaW9ucy10bwogICMgQVVESVRfQU5PTV9MT0dJTl9USU1FIC0gTG9naW4gYXR0ZW1wdGVkIGF0IGJhZCB0aW1lCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBBTk9NX0xPR0lOX1RJTUUKICAgIGFjdGlvbjogYXR0ZW1wdGVkLWxvZy1pbi1kdXJpbmctdW51c3VhbC1ob3VyLXRvCiAgIyBBVURJVF9BTk9NX1BST01JU0NVT1VTIC0gRGV2aWNlIGNoYW5nZWQgcHJvbWlzY3VvdXMgbW9kZQogIC0gcmVjb3JkX3R5cGVzOiBBTk9NX1BST01JU0NVT1VTCiAgICBhY3Rpb246IGNoYW5nZWQtcHJvbWlzY3VvdXMtbW9kZS1vbi1kZXZpY2UgIyBDb3VsZCBiZSBlbnRlcmVkIG9yIGV4aXRlZCBiYXNlZCBvbiBwcm9tIGZpZWxkLgogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBkZXYKICAgICAgd2hhdDogbmV0d29yay1kZXZpY2UKICAjIEFVRElUX0FOT01fUkJBQ19JTlRFR1JJVFlfRkFJTCAtIFJCQUMgZmlsZSBpbnRlZ3JpdHkgZmFpbHVyZQogIC0gcmVjb3JkX3R5cGVzOiBBTk9NX1JCQUNfSU5URUdSSVRZX0ZBSUwKICAgIGFjdGlvbjogdGVzdGVkLWZpbGUtc3lzdGVtLWludGVncml0eS1vZgogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBob3N0bmFtZQogICAgICB3aGF0OiBmaWxlc3lzdGVtCiAgIyBBVURJVF9BTk9NX0xPR0lOX0FDQ1QgLSBMb2dpbiBhdHRlbXB0ZWQgdG8gd2F0Y2hlZCBhY2N0CiAgIyBBVURJVF9BTk9NX01BWF9EQUMgLSBNYXggREFDIGZhaWx1cmVzIHJlYWNoZWQKICAjIEFVRElUX0FOT01fTUFYX01BQyAtIE1heCBNQUMgZmFpbHVyZXMgcmVhY2hlZAogICMgQVVESVRfQU5PTV9BTVRVX0ZBSUwgLSBBTVRVIGZhaWx1cmUKICAjIEFVRElUX0FOT01fUkJBQ19GQUlMIC0gUkJBQyBzZWxmIHRlc3QgZmFpbHVyZQogICMgQVVESVRfQU5PTV9DUllQVE9fRkFJTCAtIENyeXB0byBzeXN0ZW0gdGVzdCBmYWlsdXJlCiAgIyBBVURJVF9BTk9NX01LX0VYRSAtIE1ha2UgYW4gZXhlY3V0YWJsZQogICMgQVVESVRfQU5PTV9BQ0NFU1NfRlMgLSBBY2Nlc3Mgb2YgZmlsZSBvciBkaXIKICAjIEFVRElUX0FOT01fQUREX0FDQ1QgLSBBZGRpbmcgYW4gYWNjdAogICMgQVVESVRfQU5PTV9ERUxfQUNDVCAtIERlbGV0aW5nIGFuIGFjY3QKICAjIEFVRElUX0FOT01fTU9EX0FDQ1QgLSBDaGFuZ2luZyBhbiBhY2N0CiAgIyBBVURJVF9BTk9NX1JPT1RfVFJBTlMgLSBVc2VyIGJlY2FtZSByb290CiAgIyBBVURJVF9BTk9NX0xPR0lOX1NFUlZJQ0UgLSBTZXJ2aWNlIGFjY3QgYXR0ZW1wdGVkIGxvZ2luCgogICMgQW5vbWFseSByZXNwb25zZXMKCiAgIyBBVURJVF9SRVNQX0FOT01BTFkgLSBBbm9tYWx5IG5vdCByZWFjdGVkIHRvCiAgIyBBVURJVF9SRVNQX0FMRVJUIC0gQWxlcnQgZW1haWwgd2FzIHNlbnQKICAjIEFVRElUX1JFU1BfS0lMTF9QUk9DIC0gS2lsbCBwcm9ncmFtCiAgIyBBVURJVF9SRVNQX1RFUk1fQUNDRVNTIC0gVGVybWluYXRlIHNlc3Npb24KICAjIEFVRElUX1JFU1BfQUNDVF9SRU1PVEUgLSBBY2N0IGxvY2tlZCBmcm9tIHJlbW90ZSBhY2Nlc3MKICAjIEFVRElUX1JFU1BfQUNDVF9MT0NLX1RJTUVEIC0gVXNlciBhY2N0IGxvY2tlZCBmb3IgdGltZQogICMgQVVESVRfUkVTUF9BQ0NUX1VOTE9DS19USU1FRCAtIFVzZXIgYWNjdCB1bmxvY2tlZCBmcm9tIHRpbWUKICAjIEFVRElUX1JFU1BfQUNDVF9MT0NLIC0gVXNlciBhY2N0IHdhcyBsb2NrZWQKICAjIEFVRElUX1JFU1BfVEVSTV9MT0NLIC0gVGVybWluYWwgd2FzIGxvY2tlZAogICMgQVVESVRfUkVTUF9TRUJPT0wgLSBTZXQgYW4gU0UgTGludXggYm9vbGVhbgogICMgQVVESVRfUkVTUF9FWEVDIC0gRXhlY3V0ZSBhIHNjcmlwdAogICMgQVVESVRfUkVTUF9TSU5HTEUgLSBHbyB0byBzaW5nbGUgdXNlciBtb2RlCiAgIyBBVURJVF9SRVNQX0hBTFQgLSB0YWtlIHRoZSBzeXN0ZW0gZG93bgogICMgQVVESVRfUkVTUF9PUklHSU5fQkxPQ0sgLSBBZGRyZXNzIGJsb2NrZWQgYnkgaXB0YWJsZXMKICAjIEFVRElUX1JFU1BfT1JJR0lOX0JMT0NLX1RJTUVEIC0gQWRkcmVzcyBibG9ja2VkIGZvciB0aW1lCgogICMgQXVkaXQgcnVsZSBldmVudHMKCiAgIyBBVURJVF9TWVNDQUxMIC0gU3lzY2FsbCBldmVudAogICMgQVVESVRfUEFUSCAtIEZpbGVuYW1lIHBhdGggaW5mb3JtYXRpb24KICAjIEFVRElUX0lQQyAtIElQQyByZWNvcmQKICAjIEFVRElUX1NPQ0tFVENBTEwgLSBzeXNfc29ja2V0Y2FsbCBhcmd1bWVudHMKICAjIEFVRElUX1NPQ0tBRERSIC0gc29ja2FkZHIgY29waWVkIGFzIHN5c2NhbGwgYXJnCiAgIyBBVURJVF9DV0QgLSBDdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5CiAgIyBBVURJVF9FWEVDVkUgLSBleGVjdmUgYXJndW1lbnRzCiAgIyBBVURJVF9JUENfU0VUX1BFUk0gLSBJUEMgbmV3IHBlcm1pc3Npb25zIHJlY29yZCB0eXBlCiAgIyBBVURJVF9NUV9PUEVOIC0gUE9TSVggTVEgb3BlbiByZWNvcmQgdHlwZQogICMgQVVESVRfTVFfU0VORFJFQ1YtIFBPU0lYIE1RIHNlbmQvcmVjZWl2ZSByZWNvcmQgdHlwZQogICMgQVVESVRfTVFfTk9USUZZIC0gUE9TSVggTVEgbm90aWZ5IHJlY29yZCB0eXBlCiAgIyBBVURJVF9NUV9HRVRTRVRBVFRSIC0gUE9TSVggTVEgZ2V0L3NldCBhdHRyaWJ1dGUgcmVjb3JkIHR5cGUKICAjIEFVRElUX0ZEX1BBSVIgLSBhdWRpdCByZWNvcmQgZm9yIHBpcGUvc29ja2V0cGFpcgogICMgQVVESVRfT0JKX1BJRCAtIHB0cmFjZSB0YXJnZXQKICAjIEFVRElUX0JQUk1fRkNBUFMgLSBJbmZvcm1hdGlvbiBhYm91dCBmY2FwcyBpbmNyZWFzaW5nIHBlcm1zCiAgIyBBVURJVF9DQVBTRVQgLSBSZWNvcmQgc2hvd2luZyBhcmd1bWVudCB0byBzeXNfY2Fwc2V0CiAgIyBBVURJVF9NTUFQIC0gUmVjb3JkIHNob3dpbmcgZGVzY3JpcHRvciBhbmQgZmxhZ3MgaW4gbW1hcAogICMgQVVESVRfTkVURklMVEVSX1BLVCAtIFBhY2tldHMgdHJhdmVyc2luZyBuZXRmaWx0ZXIgY2hhaW5zCgogICMgSW50ZWdyaXR5IGNoZWNrcwoKICAjIEFVRElUX0lOVEVHUklUWV9EQVRBIC0gRGF0YSBpbnRlZ3JpdHkgdmVyaWZpY2F0aW9uCiAgIyBBVURJVF9JTlRFR1JJVFlfTUVUQURBVEEgLSBNZXRhZGF0YSBpbnRlZ3JpdHkgdmVyaWZpY2F0aW9uCiAgIyBBVURJVF9JTlRFR1JJVFlfU1RBVFVTIC0gSW50ZWdyaXR5IGVuYWJsZSBzdGF0dXMKICAjIEFVRElUX0lOVEVHUklUWV9IQVNIIC0gSW50ZWdyaXR5IEhBU0ggdHlwZQogICMgQVVESVRfSU5URUdSSVRZX1BDUiAtIFBDUiBpbnZhbGlkYXRpb24gbXNncwogICMgQVVESVRfSU5URUdSSVRZX1JVTEUgLSBQb2xpY3kgcnVsZQoKICAjIFZhcmlvdXMKCiAgIyBBVURJVF9VU0VSIC0gTWVzc2FnZSBmcm9tIHVzZXJzcGFjZSAtLSBkZXByZWNhdGVkCiAgLSByZWNvcmRfdHlwZXM6IFVTRVIKICAgIGFjdGlvbjogc2VudC1tZXNzYWdlCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGFkZHIK") + value, _ = base64.StdEncoding.DecodeString("LS0tCiMgTWFjcm9zIGRlY2xhcmVzIHNvbWUgWUFNTCBhbmNob3JzIHRoYXQgY2FuIGJlIHJlZmVyZW5jZWQgZm9yIHNvbWUgY29tbW9uCiMgb2JqZWN0IHR5cGUgbm9ybWFsaXphdGlvbnMgbGlrZSB1c2VyLXNlc3Npb24sIHNvY2tldCwgb3IgcHJvY2Vzcy4KbWFjcm9zOgogIC0gJmRlZmF1bHRzCiAgICBzdWJqZWN0OgogICAgICBwcmltYXJ5OiBhdWlkCiAgICAgIHNlY29uZGFyeTogdWlkCiAgICBob3c6IFtleGUsIGNvbW1dCgogIC0gJm1hY3JvLXVzZXItc2Vzc2lvbgogICAgc3ViamVjdDoKICAgICAgcHJpbWFyeTogYXVpZAogICAgICBzZWNvbmRhcnk6IFthY2N0LCBpZCwgdWlkXQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiB0ZXJtaW5hbAogICAgICBzZWNvbmRhcnk6IFthZGRyLCBob3N0bmFtZV0KICAgICAgd2hhdDogdXNlci1zZXNzaW9uCiAgICBob3c6IFtleGUsIHRlcm1pbmFsXQoKICAtICZtYWNyby1zb2NrZXQKICAgIDw8OiAqZGVmYXVsdHMKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogW2FkZHIsIHBhdGhdCiAgICAgIHNlY29uZGFyeTogcG9ydAogICAgICB3aGF0OiBzb2NrZXQKCiAgLSAmbWFjcm8tcHJvY2VzcwogICAgPDw6ICpkZWZhdWx0cwogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBbY21kLCBleGUsIGNvbW1dCiAgICAgIHNlY29uZGFyeTogcGlkCiAgICAgIHdoYXQ6IHByb2Nlc3MKICAgIGhvdzogdGVybWluYWwKCiAgLSAmZWNzLWlhbQogICAgY2F0ZWdvcnk6IGlhbQogICAgdHlwZTogaW5mbwoKICAtICZlY3MtYXV0aAogICAgY2F0ZWdvcnk6IGF1dGhlbnRpY2F0aW9uCiAgICB0eXBlOiBpbmZvCiAgICBtYXBwaW5nczoKICAgICAgLSBmcm9tOiBhY3Rvci5wcmltYXJ5CiAgICAgICAgdG86IHVzZXIKICAgICAgLSBmcm9tOiBhY3Rvci5zZWNvbmRhcnkKICAgICAgICB0bzogdXNlci5lZmZlY3RpdmUKCiAgLSAmZWNzLWhvc3QKICAgIGNhdGVnb3J5OiBob3N0CiAgICB0eXBlOiBpbmZvCgogIC0gJmVjcy1wcm9jZXNzCiAgICBjYXRlZ29yeTogcHJvY2VzcwogICAgdHlwZTogaW5mbwoKICAtICZlY3MtZmlsZQogICAgY2F0ZWdvcnk6IGZpbGUKICAgIHR5cGU6IGluZm8KCiAgLSAmZWNzLWRyaXZlcgogICAgY2F0ZWdvcnk6IGRyaXZlcgogICAgdHlwZTogaW5mbwoKICAtICZlY3MtbmV0d29yawogICAgY2F0ZWdvcnk6IG5ldHdvcmsKICAgIHR5cGU6CiAgICAgIC0gY29ubmVjdGlvbgogICAgICAtIGluZm8KCiAgLSAmZWNzLXVzZXItbW9kaWZpY2F0aW9uLW1hcHBpbmdzCiAgICBtYXBwaW5nczoKICAgICAgLSBmcm9tOiBhY3Rvci5wcmltYXJ5CiAgICAgICAgdG86IHVzZXIKICAgICAgLSBmcm9tOiBhY3Rvci5zZWNvbmRhcnkKICAgICAgICB0bzogdXNlci5lZmZlY3RpdmUKICAgICAgLSBmcm9tOiBvYmplY3QucHJpbWFyeQogICAgICAgIHRvOiB1c2VyLnRhcmdldAoKICAtICZlY3MtZ3JvdXAtbW9kaWZpY2F0aW9uLW1hcHBpbmdzCiAgICBtYXBwaW5nczoKICAgICAgLSBmcm9tOiBhY3Rvci5wcmltYXJ5CiAgICAgICAgdG86IHVzZXIKICAgICAgLSBmcm9tOiBhY3Rvci5zZWNvbmRhcnkKICAgICAgICB0bzogdXNlci5lZmZlY3RpdmUKICAgICAgLSBmcm9tOiBvYmplY3QucHJpbWFyeQogICAgICAgIHRvOiBncm91cC50YXJnZXQKCiMgTm9ybWFsaXphdGlvbnMgaXMgYSBsaXN0IG9mIGRlY2xhcmF0aW9ucyBzcGVjaWZ5aW5nIGhvdyB0byBub3JtYWxpemUgdGhlIGRhdGEKIyBjb250YWluZWQgaW4gYW4gZXZlbnQuIFRoZSBub3JtYWxpemF0aW9uIGNhbiBiZSBhcHBsaWVkIGJhc2VkIG9uIHRoZSBzeXNjYWxsCiMgbmFtZSAoZS5nLiBjb25uZWN0LCBvcGVuKSBvciBiYXNlZCBvbiB0aGUgcmVjb3JkIHR5cGUgKGUuZy4gVVNFUl9MT0dJTikuCiMgTm8gdHdvIG5vcm1hbGl6YXRpb25zIGNhbiBhcHBseSB0byB0aGUgc2FtZSBzeXNjYWxsIG9yIHJlY29yZCB0eXBlLiBUaGlzCiMgd2lsbCByZXN1bHQgaW4gYSBmYWlsdXJlIGF0IGxvYWQgdGltZS4KIwojIEVhY2ggbm9ybWFsaXphdGlvbiBzaG91bGQgc3BlY2lmeToKIyAgIGFjdGlvbiAtIHdoYXQgaGFwcGVuZWQKIyAgIGFjdG9yICAtIHdobyBkaWQgdGhpcyBvciB3aG8gdHJpZ2dlcmVkIHRoZSBldmVudAojICAgb2JqZWN0IC0gd2hhdCB3YXMgdGhlICJ0aGluZyIgaW52b2x2ZWQgaW4gdGhlIGFjdGlvbiAoZS5nLiBwcm9jZXNzLCBzb2NrZXQpCiMgICBob3cgICAgLSBob3cgd2FzIHRoZSBhY3Rpb24gcGVyZm9ybWVkIChlLmcuIGV4ZSBvciB0ZXJtaW5hbCkKbm9ybWFsaXphdGlvbnM6CiAgLSBlY3M6ICplY3MtcHJvY2VzcwogICAgc3lzY2FsbHM6CiAgICAgIC0gJyonICMgdGhpcyBpcyBhIGNhdGNoIGFsbAogIC0gYWN0aW9uOiBvcGVuZWQtZmlsZQogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBjcmVhdCAtIG9wZW4gYW5kIHBvc3NpYmx5IGNyZWF0ZSBhIGZpbGUKICAgICAgLSBjcmVhdAogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgIHR5cGU6IGNyZWF0aW9uCiAgLSBhY3Rpb246IG9wZW5lZC1maWxlCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIGZhbGxvY2F0ZSAtIG1hbmlwdWxhdGUgZmlsZSBzcGFjZQogICAgICAtIGZhbGxvY2F0ZQogICAgICAjIHRydW5jYXRlIC0gdHJ1bmNhdGUgYSBmaWxlIHRvIGEgc3BlY2lmaWVkIGxlbmd0aAogICAgICAtIHRydW5jYXRlCiAgICAgICMgZnRydW5jYXRlIC0gdHJ1bmNhdGUgYSBmaWxlIHRvIGEgc3BlY2lmaWVkIGxlbmd0aAogICAgICAtIGZ0cnVuY2F0ZQogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgICMgdGVjaG5pY2FsbHkgeW91IGNhbiB0cnVuY2F0ZSBhIGZpbGUgdG8gdGhlIHNhbWUgbGVuZ3RoCiAgICAgICMgYnV0IHJlZ2FyZGxlc3MsIHdlIGNvbnNpZGVyIHRoaXMgYSBjaGFuZ2UKICAgICAgdHlwZTogY2hhbmdlCiAgLSBhY3Rpb246IG9wZW5lZC1maWxlCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIG9wZW4gLSBvcGVuIGFuZCBwb3NzaWJseSBjcmVhdGUgYSBmaWxlCiAgICAgIC0gb3BlbgogICAgICAjIG9wZW5hdCAtIG9wZW4gYW5kIHBvc3NpYmx5IGNyZWF0ZSBhIGZpbGUKICAgICAgLSBvcGVuYXQKICAgICAgIyByZWFkbGluayAtIHJlYWQgdmFsdWUgb2YgYSBzeW1ib2xpYyBsaW5rCiAgICAgIC0gcmVhZGxpbmsKICAgICAgIyByZWFkbGlua2F0IC0gcmVhZCB2YWx1ZSBvZiBhIHN5bWJvbGljIGxpbmsKICAgICAgLSByZWFkbGlua2F0CiAgICBlY3M6ICplY3MtZmlsZQogIC0gYWN0aW9uOiByZWFkLWZpbGUKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgc3lzY2FsbHM6CiAgICAgICMgcmVhZCAtIHJlYWQgZnJvbSBhIGZpbGUgZGVzY3JpcHRvcgogICAgICAtIHJlYWQKICAgIGVjczogKmVjcy1maWxlCiAgLSBhY3Rpb246IHdyb3RlLXRvLWZpbGUKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgc3lzY2FsbHM6CiAgICAgICMgd3JpdGUgLSB3cml0ZSB0byBhIGZpbGUgZGVzY3JpcHRvcgogICAgICAtIHdyaXRlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgdHlwZTogY2hhbmdlCiAgLSBhY3Rpb246IGNoYW5nZWQtZmlsZS1hdHRyaWJ1dGVzLW9mCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIHNldHhhdHRyIC0gc2V0IGFuIGV4dGVuZGVkIGF0dHJpYnV0ZSB2YWx1ZQogICAgICAtIHNldHhhdHRyCiAgICAgICMgZnNldHhhdHRyIC0gc2V0IGFuIGV4dGVuZGVkIGF0dHJpYnV0ZSB2YWx1ZQogICAgICAtIGZzZXR4YXR0cgogICAgICAjIGxzZXR4YXR0ciAtIHNldCBhbiBleHRlbmRlZCBhdHRyaWJ1dGUgdmFsdWUKICAgICAgLSBsc2V0eGF0dHIKICAgICAgIyByZW1vdmV4YXR0ciAtIHJlbW92ZSBhbiBleHRlbmRlZCBhdHRyaWJ1dGUKICAgICAgLSByZW1vdmV4YXR0cgogICAgICAjIGZyZW1vdmV4YXR0ciAtIHJlbW92ZSBhbiBleHRlbmRlZCBhdHRyaWJ1dGUKICAgICAgLSBmcmVtb3ZleGF0dHIKICAgICAgIyBscmVtb3ZleGF0dHIgLSByZW1vdmUgYW4gZXh0ZW5kZWQgYXR0cmlidXRlCiAgICAgIC0gbHJlbW92ZXhhdHRyCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgdHlwZTogY2hhbmdlCiAgLSBhY3Rpb246IGNoYW5nZWQtZmlsZS1wZXJtaXNzaW9ucy1vZgogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBjaG1vZCAtIGNoYW5nZSBwZXJtaXNzaW9ucyBvZiBhIGZpbGUKICAgICAgLSBjaG1vZAogICAgICAjIGZjaG1vZCAtIGNoYW5nZSBwZXJtaXNzaW9ucyBvZiBhIGZpbGUKICAgICAgLSBmY2htb2QKICAgICAgIyBmY2htb2RhdCAtIGNoYW5nZSBwZXJtaXNzaW9ucyBvZiBhIGZpbGUKICAgICAgLSBmY2htb2RhdAogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgIHR5cGU6IGNoYW5nZQogIC0gYWN0aW9uOiBjaGFuZ2VkLWZpbGUtb3duZXJzaGlwLW9mCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIGNob3duIC0gY2hhbmdlIG93bmVyc2hpcCBvZiBhIGZpbGUKICAgICAgLSBjaG93bgogICAgICAjIGZjaG93biAtIGNoYW5nZSBvd25lcnNoaXAgb2YgYSBmaWxlCiAgICAgIC0gZmNob3duCiAgICAgICMgZmNob3duYXQgLSBjaGFuZ2Ugb3duZXJzaGlwIG9mIGEgZmlsZQogICAgICAtIGZjaG93bmF0CiAgICAgICMgbGNob3duIC0gY2hhbmdlIG93bmVyc2hpcCBvZiBhIGZpbGUKICAgICAgLSBsY2hvd24KICAgIGVjczoKICAgICAgPDw6ICplY3MtZmlsZQogICAgICB0eXBlOiBjaGFuZ2UKICAtIGFjdGlvbjogbG9hZGVkLWtlcm5lbC1tb2R1bGUKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgICBwcmltYXJ5OiBuYW1lCiAgICByZWNvcmRfdHlwZXM6CiAgICAgIC0gS0VSTl9NT0RVTEUKICAgIHN5c2NhbGxzOgogICAgICAjIGZpbml0X21vZHVsZSAtIGxvYWQgYSBrZXJuZWwgbW9kdWxlCiAgICAgIC0gZmluaXRfbW9kdWxlCiAgICAgICMgaW5pdF9tb2R1bGUgLSBsb2FkIGEga2VybmVsIG1vZHVsZQogICAgICAtIGluaXRfbW9kdWxlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWRyaXZlcgogICAgICB0eXBlOiBzdGFydAogIC0gYWN0aW9uOiB1bmxvYWRlZC1rZXJuZWwtbW9kdWxlCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIGRlbGV0ZV9tb2R1bGUgLSB1bmxvYWQgYSBrZXJuZWwgbW9kdWxlCiAgICAgIC0gZGVsZXRlX21vZHVsZQogICAgZWNzOgogICAgICA8PDogKmVjcy1kcml2ZXIKICAgICAgdHlwZTogZW5kCiAgLSBhY3Rpb246IGNyZWF0ZWQtZGlyZWN0b3J5CiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgICAgcGF0aF9pbmRleDogMQogICAgc3lzY2FsbHM6CiAgICAgICMgbWtkaXIgLSBjcmVhdGUgYSBkaXJlY3RvcnkKICAgICAgLSBta2RpcgogICAgICAjIG1rZGlyYXQgLSBjcmVhdGUgYSBkaXJlY3RvcnkKICAgICAgLSBta2RpcmF0CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgdHlwZTogY3JlYXRpb24KICAtIGFjdGlvbjogbW91bnRlZAogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlc3lzdGVtCiAgICAgIHBhdGhfaW5kZXg6IDEKICAgIHN5c2NhbGxzOgogICAgICAjIG1vdW50IC0gbW91bnQgZmlsZXN5c3RlbQogICAgICAtIG1vdW50CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgIyBzaW5jZSBhIG5ldyBtb3VudCBhcHBlYXJzIG9uIHRoZSBzeXN0ZW0KICAgICAgIyB3ZSBjb25zaWRlciB0aGlzIGEgaGlnaC1sZXZlbCAiY3JlYXRpb24iIGV2ZW50CiAgICAgIHR5cGU6IGNyZWF0aW9uCiAgLSBhY3Rpb246IHJlbmFtZWQKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgICBwYXRoX2luZGV4OiAyCiAgICBzeXNjYWxsczoKICAgICAgIyByZW5hbWUgLSBjaGFuZ2UgdGhlIG5hbWUgb3IgbG9jYXRpb24gb2YgYSBmaWxlCiAgICAgIC0gcmVuYW1lCiAgICAgICMgcmVuYW1lYXQgLSBjaGFuZ2UgdGhlIG5hbWUgb3IgbG9jYXRpb24gb2YgYSBmaWxlCiAgICAgIC0gcmVuYW1lYXQKICAgICAgIyByZW5hbWVhdDIgLSBjaGFuZ2UgdGhlIG5hbWUgb3IgbG9jYXRpb24gb2YgYSBmaWxlCiAgICAgIC0gcmVuYW1lYXQyCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgdHlwZTogY2hhbmdlCiAgLSBhY3Rpb246IGNoZWNrZWQtbWV0YWRhdGEtb2YKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgc3lzY2FsbHM6CiAgICAgICMgYWNjZXNzIC0gY2hlY2sgdXNlcidzIHBlcm1pc3Npb25zIGZvciBhIGZpbGUKICAgICAgLSBhY2Nlc3MKICAgICAgIyBmYWNjZXNzYXQgLSBjaGVjayB1c2VyJ3MgcGVybWlzc2lvbnMgZm9yIGEgZmlsZQogICAgICAtIGZhY2Nlc3NhdAogICAgICAjIGZzdGF0YXQgLSBnZXQgZmlsZSBzdGF0dXMKICAgICAgLSBmc3RhdGF0CiAgICAgICMgbmV3ZnN0YXRhdCAtIGdldCBmaWxlIHN0YXR1cwogICAgICAtIG5ld2ZzdGF0YXQKICAgICAgIyBzdGF0IC0gZ2V0IGZpbGUgc3RhdHVzCiAgICAgIC0gc3RhdAogICAgICAjIHN0YXQ2NCAtIGdldCBmaWxlIHN0YXR1cwogICAgICAtIHN0YXQ2NAogICAgICAjIGZzdGF0IC0gZ2V0IGZpbGUgc3RhdHVzCiAgICAgIC0gZnN0YXQKICAgICAgIyBsc3RhdCAtIGdldCBmaWxlIHN0YXR1cwogICAgICAtIGxzdGF0CiAgICAgICMgZ2V0eGF0dHIgLSByZXRyaWV2ZSBhbiBleHRlbmRlZCBhdHRyaWJ1dGUgdmFsdWUKICAgICAgLSBnZXR4YXR0cgogICAgICAjIGxnZXR4YXR0ciAtIHJldHJpZXZlIGFuIGV4dGVuZGVkIGF0dHJpYnV0ZSB2YWx1ZQogICAgICAtIGxnZXR4YXR0cgogICAgICAjIGZnZXR4YXR0ciAtIHJldHJpZXZlIGFuIGV4dGVuZGVkIGF0dHJpYnV0ZSB2YWx1ZQogICAgICAtIGZnZXR4YXR0cgogICAgZWNzOiAqZWNzLWZpbGUKICAtIGFjdGlvbjogY2hlY2tlZC1maWxlc3lzdGVtLW1ldGFkYXRhLW9mCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGVzeXN0ZW0KICAgIHN5c2NhbGxzOgogICAgICAjIHN0YXRmcyAtIGdldCBmaWxlc3lzdGVtIHN0YXRpc3RpY3MKICAgICAgLSBzdGF0ZnMKICAgICAgIyBmc3RhdGZzIC0gZ2V0IGZpbGVzeXN0ZW0gc3RhdGlzdGljcwogICAgICAtIGZzdGF0ZnMKICAgIGVjczogKmVjcy1maWxlCiAgLSBhY3Rpb246IHN5bWxpbmtlZAogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBzeW1saW5rIC0gbWFrZSBhIG5ldyBuYW1lIGZvciBhIGZpbGUKICAgICAgLSBzeW1saW5rCiAgICAgICMgc3ltbGlua2F0IC0gbWFrZSBhIG5ldyBuYW1lIGZvciBhIGZpbGUKICAgICAgLSBzeW1saW5rYXQKICAgIGVjczoKICAgICAgPDw6ICplY3MtZmlsZQogICAgICAjICJjcmVhdGlvbiIgc2luY2Ugd2UncmUgY3JlYXRpbmcgYSBuZXcgZmlsZSBzeXN0ZW0KICAgICAgIyBlbnRyeSBmb3IgdGhlIHN5bWxpbmsKICAgICAgdHlwZTogY3JlYXRpb24KICAtIGFjdGlvbjogdW5tb3VudGVkCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGVzeXN0ZW0KICAgIHN5c2NhbGxzOgogICAgICAjIHVtb3VudCAtIHVubW91bnQgZmlsZXN5c3RlbQogICAgICAtIHVtb3VudAogICAgICAjIHVtb3VudDIgLSB1bm1vdW50IGZpbGVzeXN0ZW0KICAgICAgLSB1bW91bnQyCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgIyAiZGVsZXRpb24iIHRvIG1pcnJvciB0aGUgImNyZWF0aW9uIiBvZiB0aGUgbW91bnQKICAgICAgdHlwZTogZGVsZXRpb24KICAtIGFjdGlvbjogZGVsZXRlZAogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBybWRpciAtIGRlbGV0ZSBhIGRpcmVjdG9yeQogICAgICAtIHJtZGlyCiAgICAgICMgdW5saW5rIC0gZGVsZXRlIGEgbmFtZSBhbmQgcG9zc2libHkgdGhlIGZpbGUgaXQgcmVmZXJzIHRvCiAgICAgIC0gdW5saW5rCiAgICAgICMgdW5saW5rYXQgLSBkZWxldGUgYSBuYW1lIGFuZCBwb3NzaWJseSB0aGUgZmlsZSBpdCByZWZlcnMgdG8KICAgICAgLSB1bmxpbmthdAogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgIHR5cGU6IGRlbGV0aW9uCiAgLSBhY3Rpb246IGNoYW5nZWQtdGltZXN0YW1wLW9mCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIHV0aW1lIC0gY2hhbmdlIGZpbGUgbGFzdCBhY2Nlc3MgYW5kIG1vZGlmaWNhdGlvbiB0aW1lcwogICAgICAtIHV0aW1lCiAgICAgICMgdXRpbWVzIC0gY2hhbmdlIGZpbGUgbGFzdCBhY2Nlc3MgYW5kIG1vZGlmaWNhdGlvbiB0aW1lcwogICAgICAtIHV0aW1lcwogICAgICAjIGZ1dGltZXNhdCAtIGNoYW5nZSB0aW1lc3RhbXBzIG9mIGEgZmlsZSByZWxhdGl2ZSB0byBhIFwgZGlyZWN0b3J5IGZpbGUgZGVzY3JpcHRvcgogICAgICAtIGZ1dGltZXNhdAogICAgICAjIGZ1dGltZW5zIC0gY2hhbmdlIGZpbGUgdGltZXN0YW1wcyB3aXRoIG5hbm9zZWNvbmQgcHJlY2lzaW9uCiAgICAgIC0gZnV0aW1lbnMKICAgICAgIyB1dGltZW5zYXQgLSBjaGFuZ2UgZmlsZSB0aW1lc3RhbXBzIHdpdGggbmFub3NlY29uZCBwcmVjaXNpb24KICAgICAgLSB1dGltZW5zYXQKICAgIGVjczogKmVjcy1maWxlCiAgLSBhY3Rpb246IGV4ZWN1dGVkCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIGV4ZWN2ZSAtIGV4ZWN1dGUgcHJvZ3JhbQogICAgICAtIGV4ZWN2ZQogICAgICAjIGV4ZWN2ZWF0IC0gZXhlY3V0ZSBwcm9ncmFtIHJlbGF0aXZlIHRvIGEgZGlyZWN0b3J5IGZpbGUgZGVzY3JpcHRvcgogICAgICAtIGV4ZWN2ZWF0CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogc3RhcnQKICAtIGFjdGlvbjogbGlzdGVuLWZvci1jb25uZWN0aW9ucwogICAgb2JqZWN0OgogICAgICB3aGF0OiBzb2NrZXQKICAgIHN5c2NhbGxzOgogICAgICAjIGxpc3Rlbi0gbGlzdGVuIGZvciBjb25uZWN0aW9ucyBvbiBhIHNvY2tldAogICAgICAtIGxpc3RlbgogICAgZWNzOgogICAgICA8PDogKmVjcy1uZXR3b3JrCiAgICAgIHR5cGU6IHN0YXJ0CiAgLSBhY3Rpb246IGFjY2VwdGVkLWNvbm5lY3Rpb24tZnJvbQogICAgb2JqZWN0OgogICAgICB3aGF0OiBzb2NrZXQKICAgIHN5c2NhbGxzOgogICAgICAjIGFjY2VwdCAtIGFjY2VwdCBhIGNvbm5lY3Rpb24gb24gYSBzb2NrZXQKICAgICAgLSBhY2NlcHQKICAgICAgIyBhY2NlcHQ0IC0gYWNjZXB0IGEgY29ubmVjdGlvbiBvbiBhIHNvY2tldAogICAgICAtIGFjY2VwdDQKICAgIGVjczoKICAgICAgPDw6ICplY3MtbmV0d29yawogICAgICB0eXBlOgogICAgICAgIC0gY29ubmVjdGlvbgogICAgICAgIC0gc3RhcnQKICAtIGFjdGlvbjogYm91bmQtc29ja2V0CiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNvY2tldAogICAgc3lzY2FsbHM6CiAgICAgICMgYmluZCAtYmluZCBhIG5hbWUgdG8gYSBzb2NrZXQKICAgICAgLSBiaW5kCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLW5ldHdvcmsKICAgICAgdHlwZTogc3RhcnQKICAtIGFjdGlvbjogY29ubmVjdGVkLXRvCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNvY2tldAogICAgc3lzY2FsbHM6CiAgICAgIC0gY29ubmVjdAogICAgZWNzOgogICAgICA8PDogKmVjcy1uZXR3b3JrCiAgICAgIHR5cGU6CiAgICAgICAgLSBjb25uZWN0aW9uCiAgICAgICAgLSBzdGFydAogIC0gYWN0aW9uOiByZWNlaXZlZC1mcm9tCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNvY2tldAogICAgc3lzY2FsbHM6CiAgICAgICMgcmVjdiAtIHJlY2VpdmUgYSBtZXNzYWdlIGZyb20gYSBzb2NrZXQKICAgICAgLSByZWN2CiAgICAgICMgcmVjdmZyb20gLSByZWNlaXZlIGEgbWVzc2FnZSBmcm9tIGEgc29ja2V0CiAgICAgIC0gcmVjdmZyb20KICAgICAgIyByZWN2bXNnIC0gcmVjZWl2ZSBhIG1lc3NhZ2UgZnJvbSBhIHNvY2tldAogICAgICAtIHJlY3Ztc2cKICAgICAgIyByZWN2bW1zZyAtIHJlY2VpdmUgbXVsdGlwbGUgbWVzc2FnZXMgb24gYSBzb2NrZXQKICAgICAgLSByZWN2bW1zZwogICAgZWNzOgogICAgICA8PDogKmVjcy1uZXR3b3JrCiAgLSBhY3Rpb246IHNlbnQtdG8KICAgIG9iamVjdDoKICAgICAgd2hhdDogc29ja2V0CiAgICBzeXNjYWxsczoKICAgICAgIyBzZW5kIC0gc2VuZCBhIG1lc3NhZ2Ugb24gYSBzb2NrZXQKICAgICAgLSBzZW5kCiAgICAgICMgc2VuZHRvIC0gc2VuZCBhIG1lc3NhZ2Ugb24gYSBzb2NrZXQKICAgICAgLSBzZW5kdG8KICAgICAgIyBzZW5kbXNnIC0gc2VuZCBhIG1lc3NhZ2Ugb24gYSBzb2NrZXQKICAgICAgLSBzZW5kbXNnCiAgICAgICMgc2VuZG1tc2cgLSBzZW5kIG11bHRpcGxlIG1lc3NhZ2VzIG9uIGEgc29ja2V0CiAgICAgIC0gc2VuZG1tc2cKICAgIGVjczoKICAgICAgPDw6ICplY3MtbmV0d29yawogIC0gYWN0aW9uOiBraWxsZWQtcGlkCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHByb2Nlc3MKICAgIHN5c2NhbGxzOgogICAgICAjIGtpbGwgLSBzZW5kIHNpZ25hbCB0byBhIHByb2Nlc3MKICAgICAgLSBraWxsCiAgICAgICMgdGtpbGwgLSBzZW5kIGEgc2lnbmFsIHRvIGEgdGhyZWFkCiAgICAgIC0gdGtpbGwKICAgICAgIyB0Z2tpbGwgLSBzZW5kIGEgc2lnbmFsIHRvIGEgdGhyZWFkCiAgICAgIC0gdGdraWxsCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogZW5kCiAgLSBhY3Rpb246IGNoYW5nZWQtaWRlbnRpdHktb2YKICAgIG9iamVjdDoKICAgICAgd2hhdDogcHJvY2VzcwogICAgaG93OiBzeXNjYWxsCiAgICBzeXNjYWxsczoKICAgICAgIyBzZXR1aWQgLSBzZXQgdXNlciBpZGVudGl0eQogICAgICAtIHNldHVpZAogICAgICAjIHNldGV1aWQgLSBzZXQgZWZmZWN0aXZlIHVzZXIgb3IgZ3JvdXAgSUQKICAgICAgLSBzZXRldWlkCiAgICAgICMgc2V0ZnN1aWQgLSBzZXQgdXNlciBpZGVudGl0eSB1c2VkIGZvciBmaWxlc3lzdGVtIGNoZWNrcwogICAgICAtIHNldGZzdWlkCiAgICAgICMgc2V0cmV1aWQgLSBzZXQgcmVhbCBhbmQvb3IgZWZmZWN0aXZlIHVzZXIgb3IgZ3JvdXAgSUQKICAgICAgLSBzZXRyZXVpZAogICAgICAjIHNldGdpZCAtIHNldCBncm91cCBpZGVudGl0eQogICAgICAtIHNldGdpZAogICAgICAjIHNldGVnaWQgLSBzZXQgZWZmZWN0aXZlIHVzZXIgb3IgZ3JvdXAgSUQKICAgICAgLSBzZXRlZ2lkCiAgICAgICMgc2V0ZnNnaWQgLSBzZXQgZ3JvdXAgaWRlbnRpdHkgdXNlZCBmb3IgZmlsZXN5c3RlbSBjaGVja3MKICAgICAgLSBzZXRmc2dpZAogICAgICAjIHNldHJlZ2lkIC0gc2V0IHJlYWwgYW5kL29yIGVmZmVjdGl2ZSB1c2VyIG9yIGdyb3VwIElECiAgICAgIC0gc2V0cmVnaWQKICAgICAgIyBzZXRyZXN1aWQgLSBzZXQgcmVhbCwgZWZmZWN0aXZlIGFuZCBzYXZlZCB1c2VyIG9yIGdyb3VwIElECiAgICAgIC0gc2V0cmVzdWlkCiAgICAgICMgc2V0cmVzZ2lkIC0gc2V0IHJlYWwsIGVmZmVjdGl2ZSBhbmQgc2F2ZWQgdXNlciBvciBncm91cCBJRAogICAgICAtIHNldHJlc2dpZAogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IGNoYW5nZQogIC0gYWN0aW9uOiBjaGFuZ2VkLXN5c3RlbS10aW1lCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHN5c3RlbQogICAgc3lzY2FsbHM6CiAgICAgICMgc2V0dGltZW9mZGF5IC0gZ2V0IC8gc2V0IHRpbWUKICAgICAgLSBzZXR0aW1lb2ZkYXkKICAgICAgIyBjbG9ja19zZXR0aW1lIC0gY2xvY2sgYW5kIHRpbWUgZnVuY3Rpb25zCiAgICAgIC0gY2xvY2tfc2V0dGltZQogICAgICAjIHN0aW1lIC0gc2V0IHRpbWUKICAgICAgLSBzdGltZQogICAgICAjIGFkanRpbWV4IC0gdHVuZSBrZXJuZWwgY2xvY2sKICAgICAgLSBhZGp0aW1leAogICAgZWNzOgogICAgICA8PDogKmVjcy1ob3N0CiAgICAgIHR5cGU6IGNoYW5nZQogIC0gYWN0aW9uOiBtYWtlLWRldmljZQogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBta25vZCAtIGNyZWF0ZSBhIHNwZWNpYWwgb3Igb3JkaW5hcnkgZmlsZQogICAgICAtIG1rbm9kCiAgICAgICMgbWtub2RhdCAtIGNyZWF0ZSBhIHNwZWNpYWwgb3Igb3JkaW5hcnkgZmlsZQogICAgICAtIG1rbm9kYXQKICAgIGVjczoKICAgICAgPDw6ICplY3MtZmlsZQogICAgICB0eXBlOiBjcmVhdGlvbgogIC0gYWN0aW9uOiBjaGFuZ2VkLXN5c3RlbS1uYW1lCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHN5c3RlbQogICAgc3lzY2FsbHM6CiAgICAgICMgc2V0aG9zdG5hbWUgLSBnZXQvc2V0IGhvc3RuYW1lCiAgICAgIC0gc2V0aG9zdG5hbWUKICAgICAgIyBzZXRkb21haW5uYW1lIC0gZ2V0L3NldCBOSVMgZG9tYWluIG5hbWUKICAgICAgLSBzZXRkb21haW5uYW1lCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWhvc3QKICAgICAgdHlwZTogY2hhbmdlCiAgLSBhY3Rpb246IGFsbG9jYXRlZC1tZW1vcnkKICAgIG9iamVjdDoKICAgICAgd2hhdDogbWVtb3J5CiAgICBzeXNjYWxsczoKICAgICAgIyBtbWFwIC0gbWFwIG9yIHVubWFwIGZpbGVzIG9yIGRldmljZXMgaW50byBtZW1vcnkKICAgICAgLSBtbWFwCiAgICAgICMgbW1hcDIgLSBtYXAgZmlsZXMgb3IgZGV2aWNlcyBpbnRvIG1lbW9yeQogICAgICAtIG1tYXAyCiAgICAgICMgYnJrIC0gY2hhbmdlIGRhdGEgc2VnbWVudCBzaXplCiAgICAgIC0gYnJrCiAgICBlY3M6ICplY3MtcHJvY2VzcwogIC0gYWN0aW9uOiBhZGp1c3RlZC1zY2hlZHVsaW5nLXBvbGljeS1vZgogICAgb2JqZWN0OgogICAgICB3aGF0OiBwcm9jZXNzCiAgICBob3c6IHN5c2NhbGwKICAgIHN5c2NhbGxzOgogICAgICAjIHNjaGVkX3NldHBhcmFtIC0gc2V0IGFuZCBnZXQgc2NoZWR1bGluZyBwYXJhbWV0ZXJzCiAgICAgIC0gc2NoZWRfc2V0cGFyYW0KICAgICAgIyBzY2hlZF9zZXRzY2hlZHVsZXIgLSBzZXQgYW5kIGdldCBzY2hlZHVsaW5nIHBvbGljeS9wYXJhbWV0ZXJzCiAgICAgIC0gc2NoZWRfc2V0c2NoZWR1bGVyCiAgICAgICMgc2NoZWRfc2V0YXR0ciAtIHNldCBhbmQgZ2V0IHNjaGVkdWxpbmcgcG9saWN5IGFuZCBhdHRyaWJ1dGVzCiAgICAgIC0gc2NoZWRfc2V0YXR0cgogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IGNoYW5nZQoKICAjIEN1cnJlbnRseSB1bmhhbmRsZWQKICAjIHRoaXMgbGlzdCBjb21lcyBmcm9tIHBhcnNpbmcgbGludXggbWFuIHBhZ2VzIGF0IGh0dHBzOi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9kb2NzL21hbi1wYWdlcy9tYW4tcGFnZXMuZ2l0CgogICMgc2lnYWN0aW9uIC0gZXhhbWluZSBhbmQgY2hhbmdlIGEgc2lnbmFsIGFjdGlvbgogICMgcnRfc2lnYWN0aW9uIC0gZXhhbWluZSBhbmQgY2hhbmdlIGEgc2lnbmFsIGFjdGlvbgogICMgcHJlYWQgLSByZWFkIGZyb20gb3Igd3JpdGUgdG8gYSBmaWxlIGRlc2NyaXB0b3IgYXQgYSBnaXZlbiBvZmZzZXQKICAjIHB3cml0ZSAtIHJlYWQgZnJvbSBvciB3cml0ZSB0byBhIGZpbGUgZGVzY3JpcHRvciBhdCBhIGdpdmVuIG9mZnNldAogICMgczM5MF9ndWFyZGVkX3N0b3JhZ2UgLSBvcGVyYXRpb25zIHdpdGggei9BcmNoaXRlY3R1cmUgZ3VhcmRlZCBzdG9yYWdlIGZhY2lsaXR5CiAgIyBzY2hlZF9nZXRhdHRyIC0gc2V0IGFuZCBnZXQgc2NoZWR1bGluZyBwb2xpY3kgYW5kIGF0dHJpYnV0ZXMKICAjIGdldHJ1c2FnZSAtIGdldCByZXNvdXJjZSB1c2FnZQogICMgZmxvY2sgLSBhcHBseSBvciByZW1vdmUgYW4gYWR2aXNvcnkgbG9jayBvbiBhbiBvcGVuIGZpbGUKICAjIHBpZGZkX2dldGZkIC0gb2J0YWluIGEgZHVwbGljYXRlIG9mIGFub3RoZXIgcHJvY2VzcydzIGZpbGUgZGVzY3JpcHRvcgogICMgY2xvY2tfbmFub3NsZWVwIC0gaGlnaC1yZXNvbHV0aW9uIHNsZWVwIHdpdGggc3BlY2lmaWFibGUgY2xvY2sKICAjIGdldHBhZ2VzaXplIC0gZ2V0IG1lbW9yeSBwYWdlIHNpemUKICAjIHBpZGZkX29wZW4gLSBvYnRhaW4gYSBmaWxlIGRlc2NyaXB0b3IgdGhhdCByZWZlcnMgdG8gYSBwcm9jZXNzCiAgIyBzcGxpY2UgLSBzcGxpY2UgZGF0YSB0by9mcm9tIGEgcGlwZQogICMgZ2V0cmVzdWlkIC0gZ2V0IHJlYWwsIGVmZmVjdGl2ZSBhbmQgc2F2ZWQgdXNlci9ncm91cCBJRHMKICAjIGdldHJlc2dpZCAtIGdldCByZWFsLCBlZmZlY3RpdmUgYW5kIHNhdmVkIHVzZXIvZ3JvdXAgSURzCiAgIyByZW1hcF9maWxlX3BhZ2VzIC0gY3JlYXRlIGEgbm9ubGluZWFyIGZpbGUgbWFwcGluZwogICMgaW9fY2FuY2VsIC0gY2FuY2VsIGFuIG91dHN0YW5kaW5nIGFzeW5jaHJvbm91cyBJL08gb3BlcmF0aW9uCiAgIyBwcmN0bCAtIG9wZXJhdGlvbnMgb24gYSBwcm9jZXNzIG9yIHRocmVhZAogICMgY2xvY2tfZ2V0cmVzIC0gY2xvY2sgYW5kIHRpbWUgZnVuY3Rpb25zCiAgIyBjbG9ja19nZXR0aW1lIC0gY2xvY2sgYW5kIHRpbWUgZnVuY3Rpb25zCiAgIyBnZXRncm91cHMgLSBnZXQvc2V0IGxpc3Qgb2Ygc3VwcGxlbWVudGFyeSBncm91cCBJRHMKICAjIHNldGdyb3VwcyAtIGdldC9zZXQgbGlzdCBvZiBzdXBwbGVtZW50YXJ5IGdyb3VwIElEcwogICMgdm1zcGxpY2UgLSBzcGxpY2UgdXNlciBwYWdlcyB0by9mcm9tIGEgcGlwZQogICMgZXBvbGxfY3JlYXRlIC0gb3BlbiBhbiBlcG9sbCBmaWxlIGRlc2NyaXB0b3IKICAjIGVwb2xsX2NyZWF0ZTEgLSBvcGVuIGFuIGVwb2xsIGZpbGUgZGVzY3JpcHRvcgogICMgcG9zaXhfZmFkdmlzZSAtIHByZWRlY2xhcmUgYW4gYWNjZXNzIHBhdHRlcm4gZm9yIGZpbGUgZGF0YQogICMgc2lnd2FpdGluZm8gLSBzeW5jaHJvbm91c2x5IHdhaXQgZm9yIHF1ZXVlZCBzaWduYWxzCiAgIyBzaWd0aW1lZHdhaXQgLSBzeW5jaHJvbm91c2x5IHdhaXQgZm9yIHF1ZXVlZCBzaWduYWxzCiAgIyBydF9zaWd0aW1lZHdhaXQgLSBzeW5jaHJvbm91c2x5IHdhaXQgZm9yIHF1ZXVlZCBzaWduYWxzCiAgIyBzaWdyZXR1cm4gLSByZXR1cm4gZnJvbSBzaWduYWwgaGFuZGxlciBhbmQgY2xlYW51cCBzdGFjayBmcmFtZQogICMgcnRfc2lncmV0dXJuIC0gcmV0dXJuIGZyb20gc2lnbmFsIGhhbmRsZXIgYW5kIGNsZWFudXAgc3RhY2sgZnJhbWUKICAjIGdldHJhbmRvbSAtIG9idGFpbiBhIHNlcmllcyBvZiByYW5kb20gYnl0ZXMKICAjIGtleWN0bCAtIG1hbmlwdWxhdGUgdGhlIGtlcm5lbCdzIGtleSBtYW5hZ2VtZW50IGZhY2lsaXR5CiAgIyBzY2hlZF9nZXRzY2hlZHVsZXIgLSBzZXQgYW5kIGdldCBzY2hlZHVsaW5nIHBvbGljeS9wYXJhbWV0ZXJzCiAgIyBtYmluZCAtIHNldCBtZW1vcnkgcG9saWN5IGZvciBhIG1lbW9yeSByYW5nZQogICMgZ2V0cHJpb3JpdHkgLSBnZXQvc2V0IHByb2dyYW0gc2NoZWR1bGluZyBwcmlvcml0eQogICMgc2V0cHJpb3JpdHkgLSBnZXQvc2V0IHByb2dyYW0gc2NoZWR1bGluZyBwcmlvcml0eQogICMgaW5vdGlmeV9pbml0IC0gaW5pdGlhbGl6ZSBhbiBpbm90aWZ5IGluc3RhbmNlCiAgIyBpbm90aWZ5X2luaXQxIC0gaW5pdGlhbGl6ZSBhbiBpbm90aWZ5IGluc3RhbmNlCiAgIyBzZW1jdGwgLSBTeXN0ZW0gViBzZW1hcGhvcmUgY29udHJvbCBvcGVyYXRpb25zCiAgIyBnZXRob3N0bmFtZSAtIGdldC9zZXQgaG9zdG5hbWUKICAjIHB0cmFjZSAtIHByb2Nlc3MgdHJhY2UKICAjIHN5c2N0bCAtIHJlYWQvd3JpdGUgc3lzdGVtIHBhcmFtZXRlcnMKICAjIGdldHBlZXJuYW1lIC0gZ2V0IG5hbWUgb2YgY29ubmVjdGVkIHBlZXIgc29ja2V0CiAgIyBmb3JrIC0gY3JlYXRlIGEgY2hpbGQgcHJvY2VzcwogICMgcXVlcnlfbW9kdWxlIC0gcXVlcnkgdGhlIGtlcm5lbCBmb3IgdmFyaW91cyBiaXRzIHBlcnRhaW5pbmcgdG8gbW9kdWxlcwogICMgaW9jdGxfbGlzdCAtIGxpc3Qgb2YgaW9jdGwgY2FsbHMgaW4gTGludXgvaTM4NiBrZXJuZWwKICAjIG1zZ2dldCAtIGdldCBhIFN5c3RlbSBWIG1lc3NhZ2UgcXVldWUgaWRlbnRpZmllcgogICMgc3B1X2NyZWF0ZSAtIGNyZWF0ZSBhIG5ldyBzcHUgY29udGV4dAogICMgc3VicGFnZV9wcm90IC0gZGVmaW5lIGEgc3VicGFnZSBwcm90ZWN0aW9uIGZvciBhbiBhZGRyZXNzIHJhbmdlCiAgIyBxdW90YWN0bCAtIG1hbmlwdWxhdGUgZGlzayBxdW90YXMKICAjIG5mc3NlcnZjdGwgLSBzeXNjYWxsIGludGVyZmFjZSB0byBrZXJuZWwgbmZzIGRhZW1vbgogICMgb3BlbmF0MiAtIG9wZW4gYW5kIHBvc3NpYmx5IGNyZWF0ZSBhIGZpbGUgKGV4dGVuZGVkKQogICMgZ2V0cmxpbWl0IC0gZ2V0L3NldCByZXNvdXJjZSBsaW1pdHMKICAjIHNldHJsaW1pdCAtIGdldC9zZXQgcmVzb3VyY2UgbGltaXRzCiAgIyBwcmxpbWl0IC0gZ2V0L3NldCByZXNvdXJjZSBsaW1pdHMKICAjIHRlZSAtIGR1cGxpY2F0aW5nIHBpcGUgY29udGVudAogICMgc2htZ2V0IC0gYWxsb2NhdGVzIGEgU3lzdGVtIFYgc2hhcmVkIG1lbW9yeSBzZWdtZW50CiAgIyBjcmVhdGVfbW9kdWxlIC0gY3JlYXRlIGEgbG9hZGFibGUgbW9kdWxlIGVudHJ5CiAgIyBnZXR0aW1lb2ZkYXkgLSBnZXQgLyBzZXQgdGltZQogICMgdGltZXJfY3JlYXRlIC0gY3JlYXRlIGEgUE9TSVggcGVyLXByb2Nlc3MgdGltZXIKICAjIGZhbm90aWZ5X21hcmsgLSBhZGQsIHJlbW92ZSwgb3IgbW9kaWZ5IGFuIGZhbm90aWZ5IG1hcmsgb24gYSBmaWxlc3lzdGVtIG9iamVjdAogICMgcGlwZSAtIGNyZWF0ZSBwaXBlCiAgIyBwaXBlMiAtIGNyZWF0ZSBwaXBlCiAgIyBpbnRybyAtIGludHJvZHVjdGlvbiB0byBzeXN0ZW0gY2FsbHMKICAjIGxvb2t1cF9kY29va2llIC0gcmV0dXJuIGEgZGlyZWN0b3J5IGVudHJ5J3MgcGF0aAogICMgc3lzZnMgLSBnZXQgZmlsZXN5c3RlbSB0eXBlIGluZm9ybWF0aW9uCiAgIyBzMzkwX3J1bnRpbWVfaW5zdHIgLSBlbmFibGUvZGlzYWJsZSBzMzkwIENQVSBydW4tdGltZSBpbnN0cnVtZW50YXRpb24KICAjIHNldG5zIC0gcmVhc3NvY2lhdGUgdGhyZWFkIHdpdGggYSBuYW1lc3BhY2UKICAjIHNldF9tZW1wb2xpY3kgLSBzZXQgZGVmYXVsdCBOVU1BIG1lbW9yeSBwb2xpY3kgZm9yIGEgdGhyZWFkIGFuZCBpdHMgY2hpbGRyZW4KICAjIG5pY2UgLSBjaGFuZ2UgcHJvY2VzcyBwcmlvcml0eQogICMgaW9fc2V0dXAgLSBjcmVhdGUgYW4gYXN5bmNocm9ub3VzIEkvTyBjb250ZXh0CiAgIyBtaW5jb3JlIC0gZGV0ZXJtaW5lIHdoZXRoZXIgcGFnZXMgYXJlIHJlc2lkZW50IGluIG1lbW9yeQogICMgaW9jdGxfY29uc29sZSAtIGlvY3RscyBmb3IgY29uc29sZSB0ZXJtaW5hbCBhbmQgdmlydHVhbCBjb25zb2xlcwogICMgcG9sbCAtIHdhaXQgZm9yIHNvbWUgZXZlbnQgb24gYSBmaWxlIGRlc2NyaXB0b3IKICAjIHBwb2xsIC0gd2FpdCBmb3Igc29tZSBldmVudCBvbiBhIGZpbGUgZGVzY3JpcHRvcgogICMgY2FwZ2V0IC0gc2V0L2dldCBjYXBhYmlsaXRpZXMgb2YgdGhyZWFkKHMpCiAgIyBjYXBzZXQgLSBzZXQvZ2V0IGNhcGFiaWxpdGllcyBvZiB0aHJlYWQocykKICAjIGlvY3RsX3R0eSAtIGlvY3RscyBmb3IgdGVybWluYWxzIGFuZCBzZXJpYWwgbGluZXMKICAjIGlvcGwgLSBjaGFuZ2UgSS9PIHByaXZpbGVnZSBsZXZlbAogICMgaW9fZ2V0ZXZlbnRzIC0gcmVhZCBhc3luY2hyb25vdXMgSS9PIGV2ZW50cyBmcm9tIHRoZSBjb21wbGV0aW9uIHF1ZXVlCiAgIyBwcm9jZXNzX3ZtX3JlYWR2IC0gdHJhbnNmZXIgZGF0YSBiZXR3ZWVuIHByb2Nlc3MgYWRkcmVzcyBzcGFjZXMKICAjIHByb2Nlc3Nfdm1fd3JpdGV2IC0gdHJhbnNmZXIgZGF0YSBiZXR3ZWVuIHByb2Nlc3MgYWRkcmVzcyBzcGFjZXMKICAjIHBjaWNvbmZpZ19yZWFkIC0gcGNpIGRldmljZSBpbmZvcm1hdGlvbiBoYW5kbGluZwogICMgcGNpY29uZmlnX3dyaXRlIC0gcGNpIGRldmljZSBpbmZvcm1hdGlvbiBoYW5kbGluZwogICMgcGNpY29uZmlnX2lvYmFzZSAtIHBjaSBkZXZpY2UgaW5mb3JtYXRpb24gaGFuZGxpbmcKICAjIHNicmsgLSBjaGFuZ2UgZGF0YSBzZWdtZW50IHNpemUKICAjIHNldF90aWRfYWRkcmVzcyAtIHNldCBwb2ludGVyIHRvIHRocmVhZCBJRAogICMgcGtleV9hbGxvYyAtIGFsbG9jYXRlIG9yIGZyZWUgYSBwcm90ZWN0aW9uIGtleQogICMgcGtleV9mcmVlIC0gYWxsb2NhdGUgb3IgZnJlZSBhIHByb3RlY3Rpb24ga2V5CiAgIyBzZWxlY3QgLSBzeW5jaHJvbm91cyBJL08gbXVsdGlwbGV4aW5nCiAgIyBwc2VsZWN0IC0gc3luY2hyb25vdXMgSS9PIG11bHRpcGxleGluZwogICMga2V4ZWNfbG9hZCAtIGxvYWQgYSBuZXcga2VybmVsIGZvciBsYXRlciBleGVjdXRpb24KICAjIGtleGVjX2ZpbGVfbG9hZCAtIGxvYWQgYSBuZXcga2VybmVsIGZvciBsYXRlciBleGVjdXRpb24KICAjIHBlcnNvbmFsaXR5IC0gc2V0IHRoZSBwcm9jZXNzIGV4ZWN1dGlvbiBkb21haW4KICAjIGlvY3RsX2dldGZzbWFwIC0gcmV0cmlldmUgdGhlIHBoeXNpY2FsIGxheW91dCBvZiB0aGUgZmlsZXN5c3RlbQogICMgaW5vdGlmeV9ybV93YXRjaCAtIHJlbW92ZSBhbiBleGlzdGluZyB3YXRjaCBmcm9tIGFuIGlub3RpZnkgaW5zdGFuY2UKICAjIHBlcmZfZXZlbnRfb3BlbiAtIHNldCB1cCBwZXJmb3JtYW5jZSBtb25pdG9yaW5nCiAgIyB0aW1lcl9nZXRvdmVycnVuIC0gZ2V0IG92ZXJydW4gY291bnQgZm9yIGEgUE9TSVggcGVyLXByb2Nlc3MgdGltZXIKICAjIHdhaXQzIC0gd2FpdCBmb3IgcHJvY2VzcyB0byBjaGFuZ2Ugc3RhdGUsIEJTRCBzdHlsZQogICMgd2FpdDQgLSB3YWl0IGZvciBwcm9jZXNzIHRvIGNoYW5nZSBzdGF0ZSwgQlNEIHN0eWxlCiAgIyBsaW5rIC0gbWFrZSBhIG5ldyBuYW1lIGZvciBhIGZpbGUKICAjIGxpbmthdCAtIG1ha2UgYSBuZXcgbmFtZSBmb3IgYSBmaWxlCiAgIyBzY2hlZF9ycl9nZXRfaW50ZXJ2YWwgLSBnZXQgdGhlIFNDSEVEX1JSIGludGVydmFsIGZvciB0aGUgbmFtZWQgcHJvY2VzcwogICMgbXVubWFwIC0gbWFwIG9yIHVubWFwIGZpbGVzIG9yIGRldmljZXMgaW50byBtZW1vcnkKICAjIHNvY2tldGNhbGwgLSBzb2NrZXQgc3lzdGVtIGNhbGxzCiAgIyBtcmVtYXAgLSByZW1hcCBhIHZpcnR1YWwgbWVtb3J5IGFkZHJlc3MKICAjIHZmb3JrIC0gY3JlYXRlIGEgY2hpbGQgcHJvY2VzcyBhbmQgYmxvY2sgcGFyZW50CiAgIyBzZWNjb21wIC0gb3BlcmF0ZSBvbiBTZWN1cmUgQ29tcHV0aW5nIHN0YXRlIG9mIHRoZSBwcm9jZXNzCiAgIyByZXF1ZXN0X2tleSAtIHJlcXVlc3QgYSBrZXkgZnJvbSB0aGUga2VybmVsJ3Mga2V5IG1hbmFnZW1lbnQgZmFjaWxpdHkKICAjIHN5c2NhbGwgLSBpbmRpcmVjdCBzeXN0ZW0gY2FsbAogICMga2NtcCAtIGNvbXBhcmUgdHdvIHByb2Nlc3NlcyB0byBkZXRlcm1pbmUgaWYgdGhleSBzaGFyZSBhIGtlcm5lbCByZXNvdXJjZQogICMgcmVhZGRpciAtIHJlYWQgZGlyZWN0b3J5IGVudHJ5CiAgIyBpb3Blcm0gLSBzZXQgcG9ydCBpbnB1dC9vdXRwdXQgcGVybWlzc2lvbnMKICAjIHNwdV9ydW4gLSBleGVjdXRlIGFuIFNQVSBjb250ZXh0CiAgIyByZWJvb3QgLSByZWJvb3Qgb3IgZW5hYmxlL2Rpc2FibGUgQ3RybC1BbHQtRGVsCiAgIyByZWFkYWhlYWQgLSBpbml0aWF0ZSBmaWxlIHJlYWRhaGVhZCBpbnRvIHBhZ2UgY2FjaGUKICAjIHNjaGVkX2dldHBhcmFtIC0gc2V0IGFuZCBnZXQgc2NoZWR1bGluZyBwYXJhbWV0ZXJzCiAgIyBhY2N0IC0gc3dpdGNoIHByb2Nlc3MgYWNjb3VudGluZyBvbiBvciBvZmYKICAjIHNpZ3N1c3BlbmQgLSB3YWl0IGZvciBhIHNpZ25hbAogICMgcnRfc2lnc3VzcGVuZCAtIHdhaXQgZm9yIGEgc2lnbmFsCiAgIyBleGl0X2dyb3VwIC0gZXhpdCBhbGwgdGhyZWFkcyBpbiBhIHByb2Nlc3MKICAjIHNvY2tldCAtIGNyZWF0ZSBhbiBlbmRwb2ludCBmb3IgY29tbXVuaWNhdGlvbgogICMgaW9jdGxfdXNlcmZhdWx0ZmQgLSBjcmVhdGUgYSBmaWxlIGRlc2NyaXB0b3IgZm9yIGhhbmRsaW5nIHBhZ2UgZmF1bHRzIGluIHVzZXIgc3BhY2UKICAjIHNjaGVkX2dldF9wcmlvcml0eV9tYXggLSBnZXQgc3RhdGljIHByaW9yaXR5IHJhbmdlCiAgIyBzY2hlZF9nZXRfcHJpb3JpdHlfbWluICAtIGdldCBzdGF0aWMgcHJpb3JpdHkgcmFuZ2UKICAjIGdldGRlbnRzIC0gZ2V0IGRpcmVjdG9yeSBlbnRyaWVzCiAgIyBnZXRkZW50czY0IC0gZ2V0IGRpcmVjdG9yeSBlbnRyaWVzCiAgIyBzZWxlY3QgLSBzeW5jaHJvbm91cyBJL08gbXVsdGlwbGV4aW5nCiAgIyBwc2VsZWN0IC0gc3luY2hyb25vdXMgSS9PIG11bHRpcGxleGluZwogICMgYWxsb2NfaHVnZXBhZ2VzIC0gYWxsb2NhdGUgb3IgZnJlZSBodWdlIHBhZ2VzCiAgIyBmcmVlX2h1Z2VwYWdlcyAtIGFsbG9jYXRlIG9yIGZyZWUgaHVnZSBwYWdlcwogICMgZnN5bmMgLSBzeW5jaHJvbml6ZSBhIGZpbGUncyBpbi1jb3JlIHN0YXRlIHdpdGggc3RvcmFnZSBkZXZpY2UKICAjIGZkYXRhc3luYyAtIHN5bmNocm9uaXplIGEgZmlsZSdzIGluLWNvcmUgc3RhdGUgd2l0aCBzdG9yYWdlIGRldmljZQogICMgc3lzY2FsbHMgLSBMaW51eCBzeXN0ZW0gY2FsbHMKICAjIG1lbWZkX2NyZWF0ZSAtIGNyZWF0ZSBhbiBhbm9ueW1vdXMgZmlsZQogICMgbW9kaWZ5X2xkdCAtIGdldCBvciBzZXQgYSBwZXItcHJvY2VzcyBMRFQgZW50cnkKICAjIGdldF9rZXJuZWxfc3ltcyAtIHJldHJpZXZlIGV4cG9ydGVkIGtlcm5lbCBhbmQgbW9kdWxlIHN5bWJvbHMKICAjIGxzZWVrIC0gcmVwb3NpdGlvbiByZWFkL3dyaXRlIGZpbGUgb2Zmc2V0CiAgIyBzaG1hdCAtIFN5c3RlbSBWIHNoYXJlZCBtZW1vcnkgb3BlcmF0aW9ucwogICMgc2htZHQgLSBTeXN0ZW0gViBzaGFyZWQgbWVtb3J5IG9wZXJhdGlvbnMKICAjIHRpbWVyX2RlbGV0ZSAtIGRlbGV0ZSBhIFBPU0lYIHBlci1wcm9jZXNzIHRpbWVyCiAgIyBwZXJmbW9uY3RsIC0gaW50ZXJmYWNlIHRvIElBLTY0IHBlcmZvcm1hbmNlIG1vbml0b3JpbmcgdW5pdAogICMgbW92ZV9wYWdlcyAtIG1vdmUgaW5kaXZpZHVhbCBwYWdlcyBvZiBhIHByb2Nlc3MgdG8gYW5vdGhlciBub2RlCiAgIyBjaGRpciAtIGNoYW5nZSB3b3JraW5nIGRpcmVjdG9yeQogICMgZmNoZGlyIC0gY2hhbmdlIHdvcmtpbmcgZGlyZWN0b3J5CiAgIyB0aW1lIC0gZ2V0IHRpbWUgaW4gc2Vjb25kcwogICMgX2V4aXQgLSB0ZXJtaW5hdGUgdGhlIGNhbGxpbmcgcHJvY2VzcwogICMgX0V4aXQgLSB0ZXJtaW5hdGUgdGhlIGNhbGxpbmcgcHJvY2VzcwogICMgczM5MF9zdGh5aSAtIGVtdWxhdGUgU1RIWUkgaW5zdHJ1Y3Rpb24KICAjIGlvX3N1Ym1pdCAtIHN1Ym1pdCBhc3luY2hyb25vdXMgSS9PIGJsb2NrcyBmb3IgcHJvY2Vzc2luZwogICMgbWxvY2sgLSBsb2NrIGFuZCB1bmxvY2sgbWVtb3J5CiAgIyBtbG9jazIgLSBsb2NrIGFuZCB1bmxvY2sgbWVtb3J5CiAgIyBtdW5sb2NrIC0gbG9jayBhbmQgdW5sb2NrIG1lbW9yeQogICMgbWxvY2thbGwgLSBsb2NrIGFuZCB1bmxvY2sgbWVtb3J5CiAgIyBtdW5sb2NrYWxsIC0gbG9jayBhbmQgdW5sb2NrIG1lbW9yeQogICMgdW1hc2sgLSBzZXQgZmlsZSBtb2RlIGNyZWF0aW9uIG1hc2sKICAjIGFyY2hfcHJjdGwgLSBzZXQgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHRocmVhZCBzdGF0ZQogICMgdXNlbGliIC0gbG9hZCBzaGFyZWQgbGlicmFyeQogICMgc2VuZGZpbGUgLSB0cmFuc2ZlciBkYXRhIGJldHdlZW4gZmlsZSBkZXNjcmlwdG9ycwogICMgc2htY3RsIC0gU3lzdGVtIFYgc2hhcmVkIG1lbW9yeSBjb250cm9sCiAgIyBlcG9sbF93YWl0IC0gd2FpdCBmb3IgYW4gSS9PIGV2ZW50IG9uIGFuIGVwb2xsIGZpbGUgZGVzY3JpcHRvcgogICMgZXBvbGxfcHdhaXQgLSB3YWl0IGZvciBhbiBJL08gZXZlbnQgb24gYW4gZXBvbGwgZmlsZSBkZXNjcmlwdG9yCiAgIyBzaWdhbHRzdGFjayAtIHNldCBhbmQvb3IgZ2V0IHNpZ25hbCBzdGFjayBjb250ZXh0CiAgIyBpb2N0bCAtIGNvbnRyb2wgZGV2aWNlCiAgIyBzaWduYWxmZCAtIGNyZWF0ZSBhIGZpbGUgZGVzY3JpcHRvciBmb3IgYWNjZXB0aW5nIHNpZ25hbHMKICAjIHVuc2hhcmUgLSBkaXNhc3NvY2lhdGUgcGFydHMgb2YgdGhlIHByb2Nlc3MgZXhlY3V0aW9uIGNvbnRleHQKICAjIGNocm9vdCAtIGNoYW5nZSByb290IGRpcmVjdG9yeQogICMgbWFkdmlzZSAtIGdpdmUgYWR2aWNlIGFib3V0IHVzZSBvZiBtZW1vcnkKICAjIGdldHRpZCAtIGdldCB0aHJlYWQgaWRlbnRpZmljYXRpb24KICAjIGdldHNvY2tuYW1lIC0gZ2V0IHNvY2tldCBuYW1lCiAgIyBpb19kZXN0cm95IC0gZGVzdHJveSBhbiBhc3luY2hyb25vdXMgSS9PIGNvbnRleHQKICAjIHNldHVwIC0gc2V0dXAgZGV2aWNlcyBhbmQgZmlsZXN5c3RlbXMsIG1vdW50IHJvb3QgZmlsZXN5c3RlbQogICMgbnRwX2FkanRpbWUgLSB0dW5lIGtlcm5lbCBjbG9jawogICMgc2VtZ2V0IC0gZ2V0IGEgU3lzdGVtIFYgc2VtYXBob3JlIHNldCBpZGVudGlmaWVyCiAgIyBnZXR1aWQgLSBnZXQgdXNlciBpZGVudGl0eQogICMgZ2V0ZXVpZCAtIGdldCB1c2VyIGlkZW50aXR5CiAgIyBfc3lzY2FsbCAtIGludm9raW5nIGEgc3lzdGVtIGNhbGwgd2l0aG91dCBsaWJyYXJ5IHN1cHBvcnQgKE9CU09MRVRFKQogICMgc2NoZWRfc2V0YWZmaW5pdHkgLSBcIHNldCBhbmQgZ2V0IGEgdGhyZWFkJ3MgQ1BVIGFmZmluaXR5IG1hc2sKICAjIHNjaGVkX2dldGFmZmluaXR5IC0gXCBzZXQgYW5kIGdldCBhIHRocmVhZCdzIENQVSBhZmZpbml0eSBtYXNrCiAgIyBjYWNoZWZsdXNoIC0gZmx1c2ggY29udGVudHMgb2YgaW5zdHJ1Y3Rpb24gYW5kL29yIGRhdGEgY2FjaGUKICAjIHBpdm90X3Jvb3QgLSBjaGFuZ2UgdGhlIHJvb3QgbW91bnQKICAjIG1zZ2N0bCAtIFN5c3RlbSBWIG1lc3NhZ2UgY29udHJvbCBvcGVyYXRpb25zCiAgIyBpb2N0bF9mYXQgLSBtYW5pcHVsYXRpbmcgdGhlIEZBVCBmaWxlc3lzdGVtCiAgIyBzZXRwZ2lkIC0gc2V0L2dldCBwcm9jZXNzIGdyb3VwCiAgIyBnZXRwZ2lkIC0gc2V0L2dldCBwcm9jZXNzIGdyb3VwCiAgIyBzZXRwZ3JwIC0gc2V0L2dldCBwcm9jZXNzIGdyb3VwCiAgIyBnZXRwZ3JwIC0gc2V0L2dldCBwcm9jZXNzIGdyb3VwCiAgIyBzb2NrZXRwYWlyIC0gY3JlYXRlIGEgcGFpciBvZiBjb25uZWN0ZWQgc29ja2V0cwogICMgYmRmbHVzaCAtIHN0YXJ0LCBmbHVzaCwgb3IgdHVuZSBidWZmZXItZGlydHktZmx1c2ggZGFlbW9uCiAgIyBhbGFybSAtIHNldCBhbiBhbGFybSBjbG9jayBmb3IgZGVsaXZlcnkgb2YgYSBzaWduYWwKICAjIHRpbWVyX3NldHRpbWUgLSBhcm0vZGlzYXJtIGFuZCBmZXRjaCBzdGF0ZSBvZiBQT1NJWCBwZXItcHJvY2VzcyB0aW1lcgogICMgdGltZXJfZ2V0dGltZSAtIGFybS9kaXNhcm0gYW5kIGZldGNoIHN0YXRlIG9mIFBPU0lYIHBlci1wcm9jZXNzIHRpbWVyCiAgIyBhZGRfa2V5IC0gYWRkIGEga2V5IHRvIHRoZSBrZXJuZWwncyBrZXkgbWFuYWdlbWVudCBmYWNpbGl0eQogICMgcnRfc2lncXVldWVpbmZvIC0gcXVldWUgYSBzaWduYWwgYW5kIGRhdGEKICAjIHJ0X3Rnc2lncXVldWVpbmZvIC0gcXVldWUgYSBzaWduYWwgYW5kIGRhdGEKICAjIHVzZXJmYXVsdGZkIC0gY3JlYXRlIGEgZmlsZSBkZXNjcmlwdG9yIGZvciBoYW5kbGluZyBwYWdlIGZhdWx0cyBpbiB1c2VyIHNwYWNlCiAgIyBzZW1vcCAtIFN5c3RlbSBWIHNlbWFwaG9yZSBvcGVyYXRpb25zCiAgIyBzZW10aW1lZG9wIC0gU3lzdGVtIFYgc2VtYXBob3JlIG9wZXJhdGlvbnMKICAjIGdldGdpZCAtIGdldCBncm91cCBpZGVudGl0eQogICMgZ2V0ZWdpZCAtIGdldCBncm91cCBpZGVudGl0eQogICMgZ2V0cGlkIC0gZ2V0IHByb2Nlc3MgaWRlbnRpZmljYXRpb24KICAjIGdldHBwaWQgLSBnZXQgcHJvY2VzcyBpZGVudGlmaWNhdGlvbgogICMgc2lncHJvY21hc2sgLSBleGFtaW5lIGFuZCBjaGFuZ2UgYmxvY2tlZCBzaWduYWxzCiAgIyBydF9zaWdwcm9jbWFzayAtIGV4YW1pbmUgYW5kIGNoYW5nZSBibG9ja2VkIHNpZ25hbHMKICAjIHVuYW1lIC0gZ2V0IG5hbWUgYW5kIGluZm9ybWF0aW9uIGFib3V0IGN1cnJlbnQga2VybmVsCiAgIyBzdGF0eCAtIGdldCBmaWxlIHN0YXR1cyAoZXh0ZW5kZWQpCiAgIyBpb2N0bF9maWNsb25lcmFuZ2UgLSBzaGFyZSBzb21lIHRoZSBkYXRhIG9mIG9uZSBmaWxlIHdpdGggYW5vdGhlciBmaWxlCiAgIyBpb2N0bF9maWNsb25lIC0gc2hhcmUgc29tZSB0aGUgZGF0YSBvZiBvbmUgZmlsZSB3aXRoIGFub3RoZXIgZmlsZQogICMgbXFfZ2V0c2V0YXR0ciAtIGdldC9zZXQgbWVzc2FnZSBxdWV1ZSBhdHRyaWJ1dGVzCiAgIyBpb3ByaW9fZ2V0IC0gZ2V0L3NldCBJL08gc2NoZWR1bGluZyBjbGFzcyBhbmQgcHJpb3JpdHkKICAjIGlvcHJpb19zZXQgLSBnZXQvc2V0IEkvTyBzY2hlZHVsaW5nIGNsYXNzIGFuZCBwcmlvcml0eQogICMgZXBvbGxfY3RsIC0gY29udHJvbCBpbnRlcmZhY2UgZm9yIGFuIGVwb2xsIGZpbGUgZGVzY3JpcHRvcgogICMgc3luYyAtIGNvbW1pdCBmaWxlc3lzdGVtIGNhY2hlcyB0byBkaXNrCiAgIyBzeW5jZnMgLSBjb21taXQgZmlsZXN5c3RlbSBjYWNoZXMgdG8gZGlzawogICMgc2V0c2lkIC0gY3JlYXRlcyBhIHNlc3Npb24gYW5kIHNldHMgdGhlIHByb2Nlc3MgZ3JvdXAgSUQKICAjIHNodXRkb3duIC0gc2h1dCBkb3duIHBhcnQgb2YgYSBmdWxsLWR1cGxleCBjb25uZWN0aW9uCiAgIyBnZXRzaWQgLSBnZXQgc2Vzc2lvbiBJRAogICMgZ2V0X3RocmVhZF9hcmVhIC0gbWFuaXB1bGF0ZSB0aHJlYWQtbG9jYWwgc3RvcmFnZSBpbmZvcm1hdGlvbgogICMgc2V0X3RocmVhZF9hcmVhIC0gbWFuaXB1bGF0ZSB0aHJlYWQtbG9jYWwgc3RvcmFnZSBpbmZvcm1hdGlvbgogICMgdGltZXJmZF9jcmVhdGUgLSB0aW1lcnMgdGhhdCBub3RpZnkgdmlhIGZpbGUgZGVzY3JpcHRvcnMKICAjIHRpbWVyZmRfc2V0dGltZSAtIHRpbWVycyB0aGF0IG5vdGlmeSB2aWEgZmlsZSBkZXNjcmlwdG9ycwogICMgdGltZXJmZF9nZXR0aW1lIC0gdGltZXJzIHRoYXQgbm90aWZ5IHZpYSBmaWxlIGRlc2NyaXB0b3JzCiAgIyBpb2N0bF9maWRlZHVwZXJhbmdlIC0gc2hhcmUgc29tZSB0aGUgZGF0YSBvZiBvbmUgZmlsZSB3aXRoIGFub3RoZXIgZmlsZQogICMgbmFtZV90b19oYW5kbGVfYXQgLSBvYnRhaW4gaGFuZGxlIGZvciBhIHBhdGhuYW1lIGFuZCBvcGVuIGZpbGUgdmlhIGEgaGFuZGxlCiAgIyBvcGVuX2J5X2hhbmRsZV9hdCAtIG9idGFpbiBoYW5kbGUgZm9yIGEgcGF0aG5hbWUgYW5kIG9wZW4gZmlsZSB2aWEgYSBoYW5kbGUKICAjIGZ1dGV4IC0gZmFzdCB1c2VyLXNwYWNlIGxvY2tpbmcKICAjIGlvY3RsX25zIC0gaW9jdGwoKSBvcGVyYXRpb25zIGZvciBMaW51eCBuYW1lc3BhY2VzCiAgIyBwaWRmZF9zZW5kX3NpZ25hbCAtIHNlbmQgYSBzaWduYWwgdG8gYSBwcm9jZXNzIHNwZWNpZmllZCBieSBhIGZpbGUgZGVzY3JpcHRvcgogICMgY2xvbmUgLSBjcmVhdGUgYSBjaGlsZCBwcm9jZXNzCiAgIyBfX2Nsb25lMiAtIGNyZWF0ZSBhIGNoaWxkIHByb2Nlc3MKICAjIGNsb25lMyAtIGNyZWF0ZSBhIGNoaWxkIHByb2Nlc3MKICAjIHRpbWVzIC0gZ2V0IHByb2Nlc3MgdGltZXMKICAjIHN5c2luZm8gLSByZXR1cm4gc3lzdGVtIGluZm9ybWF0aW9uCiAgIyBpcGMgLSBTeXN0ZW0gViBJUEMgc3lzdGVtIGNhbGxzCiAgIyBldmVudGZkIC0gY3JlYXRlIGEgZmlsZSBkZXNjcmlwdG9yIGZvciBldmVudCBub3RpZmljYXRpb24KICAjIHdhaXQgLSB3YWl0IGZvciBwcm9jZXNzIHRvIGNoYW5nZSBzdGF0ZQogICMgd2FpdHBpZCAtIHdhaXQgZm9yIHByb2Nlc3MgdG8gY2hhbmdlIHN0YXRlCiAgIyB3YWl0aWQgLSB3YWl0IGZvciBwcm9jZXNzIHRvIGNoYW5nZSBzdGF0ZQogICMgZ2V0ZG9tYWlubmFtZSAtIGdldC9zZXQgTklTIGRvbWFpbiBuYW1lCiAgIyBpZGxlIC0gbWFrZSBwcm9jZXNzIDAgaWRsZQogICMgaW5vdGlmeV9hZGRfd2F0Y2ggLSBhZGQgYSB3YXRjaCB0byBhbiBpbml0aWFsaXplZCBpbm90aWZ5IGluc3RhbmNlCiAgIyBnZXRfbWVtcG9saWN5IC0gcmV0cmlldmUgTlVNQSBtZW1vcnkgcG9saWN5IGZvciBhIHRocmVhZAogICMgYnBmIC0gcGVyZm9ybSBhIGNvbW1hbmQgb24gYW4gZXh0ZW5kZWQgQlBGIG1hcCBvciBwcm9ncmFtCiAgIyBnZXRzb2Nrb3B0IC0gZ2V0IGFuZCBzZXQgb3B0aW9ucyBvbiBzb2NrZXRzCiAgIyBzZXRzb2Nrb3B0IC0gZ2V0IGFuZCBzZXQgb3B0aW9ucyBvbiBzb2NrZXRzCiAgIyBnZXRpdGltZXIgLSBnZXQgb3Igc2V0IHZhbHVlIG9mIGFuIGludGVydmFsIHRpbWVyCiAgIyBzZXRpdGltZXIgLSBnZXQgb3Igc2V0IHZhbHVlIG9mIGFuIGludGVydmFsIHRpbWVyCiAgIyBtZW1iYXJyaWVyIC0gaXNzdWUgbWVtb3J5IGJhcnJpZXJzIG9uIGEgc2V0IG9mIHRocmVhZHMKICAjIG1wcm90ZWN0IC0gc2V0IHByb3RlY3Rpb24gb24gYSByZWdpb24gb2YgbWVtb3J5CiAgIyBwa2V5X21wcm90ZWN0IC0gc2V0IHByb3RlY3Rpb24gb24gYSByZWdpb24gb2YgbWVtb3J5CiAgIyBnZXRjcHUgLSBkZXRlcm1pbmUgQ1BVIGFuZCBOVU1BIG5vZGUgb24gd2hpY2ggdGhlIGNhbGxpbmcgdGhyZWFkIGlzIHJ1bm5pbmcKICAjIGlvY3RsX2ZzbGFiZWwgLSBnZXQgb3Igc2V0IGEgZmlsZXN5c3RlbSBsYWJlbAogICMgbGlzdHhhdHRyIC0gbGlzdCBleHRlbmRlZCBhdHRyaWJ1dGUgbmFtZXMKICAjIGxsaXN0eGF0dHIgLSBsaXN0IGV4dGVuZGVkIGF0dHJpYnV0ZSBuYW1lcwogICMgZmxpc3R4YXR0ciAtIGxpc3QgZXh0ZW5kZWQgYXR0cmlidXRlIG5hbWVzCiAgIyBfbGxzZWVrIC0gcmVwb3NpdGlvbiByZWFkL3dyaXRlIGZpbGUgb2Zmc2V0CiAgIyBmY250bCAtIG1hbmlwdWxhdGUgZmlsZSBkZXNjcmlwdG9yCiAgIyB1c3RhdCAtIGdldCBmaWxlc3lzdGVtIHN0YXRpc3RpY3MKICAjIHNpZ25hbCAtIEFOU0kgQyBzaWduYWwgaGFuZGxpbmcKICAjIG5hbm9zbGVlcCAtIGhpZ2gtcmVzb2x1dGlvbiBzbGVlcAogICMgY29ubmVjdCAtIGluaXRpYXRlIGEgY29ubmVjdGlvbiBvbiBhIHNvY2tldAogICMgdm04Nm9sZCAtIGVudGVyIHZpcnR1YWwgODA4NiBtb2RlCiAgIyB2bTg2IC0gZW50ZXIgdmlydHVhbCA4MDg2IG1vZGUKICAjIGZhbm90aWZ5X2luaXQgLSBjcmVhdGUgYW5kIGluaXRpYWxpemUgZmFub3RpZnkgZ3JvdXAKICAjIG1pZ3JhdGVfcGFnZXMgLSBtb3ZlIGFsbCBwYWdlcyBpbiBhIHByb2Nlc3MgdG8gYW5vdGhlciBzZXQgb2Ygbm9kZXMKICAjIHJlc3RhcnRfc3lzY2FsbCAtIHJlc3RhcnQgYSBzeXN0ZW0gY2FsbCBhZnRlciBpbnRlcnJ1cHRpb24gYnkgYSBzdG9wIHNpZ25hbAogICMgY2xvc2UgLSBjbG9zZSBhIGZpbGUgZGVzY3JpcHRvcgogICMgbXNncmN2IC0gU3lzdGVtIFYgbWVzc2FnZSBxdWV1ZSBvcGVyYXRpb25zCiAgIyBtc2dzbmQgLSBTeXN0ZW0gViBtZXNzYWdlIHF1ZXVlIG9wZXJhdGlvbnMKICAjIHJlYWR2IC0gcmVhZCBvciB3cml0ZSBkYXRhIGludG8gbXVsdGlwbGUgYnVmZmVycwogICMgd3JpdGV2IC0gcmVhZCBvciB3cml0ZSBkYXRhIGludG8gbXVsdGlwbGUgYnVmZmVycwogICMgcHJlYWR2IC0gcmVhZCBvciB3cml0ZSBkYXRhIGludG8gbXVsdGlwbGUgYnVmZmVycwogICMgcHdyaXRldiAtIHJlYWQgb3Igd3JpdGUgZGF0YSBpbnRvIG11bHRpcGxlIGJ1ZmZlcnMKICAjIHByZWFkdjIgLSByZWFkIG9yIHdyaXRlIGRhdGEgaW50byBtdWx0aXBsZSBidWZmZXJzCiAgIyBwd3JpdGV2MiAtIHJlYWQgb3Igd3JpdGUgZGF0YSBpbnRvIG11bHRpcGxlIGJ1ZmZlcnMKICAjIHN5c2xvZyAtIHJlYWQgYW5kL29yIGNsZWFyIGtlcm5lbCBtZXNzYWdlIHJpbmcgYnVmZmVyOyBzZXQgY29uc29sZV9sb2dsZXZlbAogICMga2xvZ2N0bCAtIHJlYWQgYW5kL29yIGNsZWFyIGtlcm5lbCBtZXNzYWdlIHJpbmcgYnVmZmVyOyBzZXQgY29uc29sZV9sb2dsZXZlbAogICMgc2NoZWRfeWllbGQgLSB5aWVsZCB0aGUgcHJvY2Vzc29yCiAgIyB2aGFuZ3VwIC0gdmlydHVhbGx5IGhhbmd1cCB0aGUgY3VycmVudCB0ZXJtaW5hbAogICMgaW9jdGxfaWZsYWdzIC0gaW9jdGwoKSBvcGVyYXRpb25zIGZvciBpbm9kZSBmbGFncwogICMgc2dldG1hc2sgLSBtYW5pcHVsYXRpb24gb2Ygc2lnbmFsIG1hc2sgKG9ic29sZXRlKQogICMgc3NldG1hc2sgLSBtYW5pcHVsYXRpb24gb2Ygc2lnbmFsIG1hc2sgKG9ic29sZXRlKQogICMgc3luY19maWxlX3JhbmdlIC0gc3luYyBhIGZpbGUgc2VnbWVudCB3aXRoIGRpc2sKICAjIGNvcHlfZmlsZV9yYW5nZSAtIENvcHkgYSByYW5nZSBvZiBkYXRhIGZyb20gb25lIGZpbGUgdG8gYW5vdGhlcgogICMgc2lncGVuZGluZyAtIGV4YW1pbmUgcGVuZGluZyBzaWduYWxzCiAgIyBydF9zaWdwZW5kaW5nIC0gZXhhbWluZSBwZW5kaW5nIHNpZ25hbHMKICAjIGdldHVud2luZCAtIGNvcHkgdGhlIHVud2luZCBkYXRhIHRvIGNhbGxlcidzIGJ1ZmZlcgogICMgbXN5bmMgLSBzeW5jaHJvbml6ZSBhIGZpbGUgd2l0aCBhIG1lbW9yeSBtYXAKICAjIGdldF9yb2J1c3RfbGlzdCAtIGdldC9zZXQgbGlzdCBvZiByb2J1c3QgZnV0ZXhlcwogICMgc2V0X3JvYnVzdF9saXN0IC0gZ2V0L3NldCBsaXN0IG9mIHJvYnVzdCBmdXRleGVzCiAgIyBkdXAgLSBkdXBsaWNhdGUgYSBmaWxlIGRlc2NyaXB0b3IKICAjIGR1cDIgLSBkdXBsaWNhdGUgYSBmaWxlIGRlc2NyaXB0b3IKICAjIGR1cDMgLSBkdXBsaWNhdGUgYSBmaWxlIGRlc2NyaXB0b3IKICAjIHMzOTBfcGNpX21taW9fd3JpdGUgLSB0cmFuc2ZlciBkYXRhIHRvL2Zyb20gUENJIE1NSU8gbWVtb3J5IHBhZ2UKICAjIHMzOTBfcGNpX21taW9fcmVhZCAtIHRyYW5zZmVyIGRhdGEgdG8vZnJvbSBQQ0kgTU1JTyBtZW1vcnkgcGFnZQogICMgcGF1c2UgLSB3YWl0IGZvciBzaWduYWwKICAjIHN3YXBvbiAtIHN0YXJ0L3N0b3Agc3dhcHBpbmcgdG8gZmlsZS9kZXZpY2UKICAjIHN3YXBvZmYgLSBzdGFydC9zdG9wIHN3YXBwaW5nIHRvIGZpbGUvZGV2aWNlCgogICMgUmVjb3JkIHR5cGUgbm9ybWFsaXphdGlvbnMKICAjIFVzZWZ1bCBsaW5rczoKICAjIGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS90b3J2YWxkcy9saW51eC92NC4xNi9pbmNsdWRlL3VhcGkvbGludXgvYXVkaXQuaAogICMgaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2xpbnV4LWF1ZGl0L2F1ZGl0LXVzZXJzcGFjZS80ZDkzMzMwMWIxODM1Y2FmYTA4YjllOWVmNzA1YzhmYjZjOTZjYjYyL2xpYi9saWJhdWRpdC5oCiAgIyBodHRwczovL3d3dy5lbGFzdGljLmNvL2d1aWRlL2VuL2Vjcy9jdXJyZW50L2Vjcy1hbGxvd2VkLXZhbHVlcy1ldmVudC1jYXRlZ29yeS5odG1sCgogICMgSUFNIHJlbGF0ZWQgZXZlbnRzCgogICMgQVVESVRfQUNDVF9MT0NLIC0gVXNlcidzIGFjY291bnQgbG9ja2VkIGJ5IGFkbWluCiAgLSByZWNvcmRfdHlwZXM6IEFDQ1RfTE9DSwogICAgYWN0aW9uOiBsb2NrZWQtYWNjb3VudAogICAgZWNzOgogICAgICA8PDogKmVjcy1pYW0KICAgICAgdHlwZToKICAgICAgICAtIHVzZXIKICAgICAgICAtIGluZm8KICAjIEFVRElUX0FDQ1RfVU5MT0NLIC0gVXNlcidzIGFjY291bnQgdW5sb2NrZWQgYnkgYWRtaW4KICAtIHJlY29yZF90eXBlczogQUNDVF9VTkxPQ0sKICAgIGFjdGlvbjogdW5sb2NrZWQtYWNjb3VudAogICAgZWNzOgogICAgICA8PDogKmVjcy1pYW0KICAgICAgdHlwZToKICAgICAgICAtIHVzZXIKICAgICAgICAtIGluZm8KICAjIEFVRElUX0FERF9HUk9VUCAtIEdyb3VwIGFjY291bnQgYWRkZWQKICAtIHJlY29yZF90eXBlczogQUREX0dST1VQCiAgICBhY3Rpb246IGFkZGVkLWdyb3VwLWFjY291bnQtdG8KICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogW2lkLCBhY2N0XQogICAgICB3aGF0OiBhY2NvdW50CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWlhbQogICAgICA8PDogKmVjcy1ncm91cC1tb2RpZmljYXRpb24tbWFwcGluZ3MKICAgICAgdHlwZToKICAgICAgICAtIGdyb3VwCiAgICAgICAgLSBjcmVhdGlvbgoKICAjIEFVRElUX0FERF9VU0VSIC0gVXNlciBhY2NvdW50IGFkZGVkCiAgLSByZWNvcmRfdHlwZXM6IEFERF9VU0VSCiAgICBhY3Rpb246IGFkZGVkLXVzZXItYWNjb3VudAogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBbaWQsIGFjY3RdCiAgICAgIHdoYXQ6IGFjY291bnQKICAgIGVjczoKICAgICAgPDw6ICplY3MtaWFtCiAgICAgIDw8OiAqZWNzLXVzZXItbW9kaWZpY2F0aW9uLW1hcHBpbmdzCiAgICAgIHR5cGU6CiAgICAgICAgLSB1c2VyCiAgICAgICAgLSBjcmVhdGlvbgogICMgQVVESVRfREVMX0dST1VQIC0gR3JvdXAgYWNjb3VudCBkZWxldGVkCiAgLSByZWNvcmRfdHlwZXM6IERFTF9HUk9VUAogICAgYWN0aW9uOiBkZWxldGVkLWdyb3VwLWFjY291bnQtZnJvbQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBbaWQsIGFjY3RdCiAgICAgIHdoYXQ6IGFjY291bnQKICAgIGVjczoKICAgICAgPDw6ICplY3MtaWFtCiAgICAgIDw8OiAqZWNzLWdyb3VwLW1vZGlmaWNhdGlvbi1tYXBwaW5ncwogICAgICB0eXBlOgogICAgICAgIC0gZ3JvdXAKICAgICAgICAtIGRlbGV0aW9uCiAgIyBBVURJVF9ERUxfVVNFUiAtIFVzZXIgYWNjb3VudCBkZWxldGVkCiAgLSByZWNvcmRfdHlwZXM6IERFTF9VU0VSCiAgICBhY3Rpb246IGRlbGV0ZWQtdXNlci1hY2NvdW50CiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IFtpZCwgYWNjdF0KICAgICAgd2hhdDogYWNjb3VudAogICAgZWNzOgogICAgICA8PDogKmVjcy1pYW0KICAgICAgPDw6ICplY3MtdXNlci1tb2RpZmljYXRpb24tbWFwcGluZ3MKICAgICAgdHlwZToKICAgICAgICAtIHVzZXIKICAgICAgICAtIGRlbGV0aW9uCiAgIyBBVURJVF9HUlBfTUdNVCAtIEdyb3VwIGFjY291bnQgYXR0ciB3YXMgbW9kaWZpZWQKICAtIHJlY29yZF90eXBlczogR1JQX01HTVQKICAgIGFjdGlvbjogbW9kaWZpZWQtZ3JvdXAtYWNjb3VudAogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBbaWQsIGFjY3RdCiAgICAgIHdoYXQ6IGFjY291bnQKICAgIGVjczoKICAgICAgPDw6ICplY3MtaWFtCiAgICAgIHR5cGU6CiAgICAgICAgLSBncm91cAogICAgICAgIC0gY2hhbmdlCiAgICAgIG1hcHBpbmdzOgogICAgICAgIC0gZnJvbTogYWN0b3IucHJpbWFyeQogICAgICAgICAgdG86IHVzZXIKICAgICAgICAtIGZyb206IGFjdG9yLnNlY29uZGFyeQogICAgICAgICAgdG86IGdyb3VwLnRhcmdldAogICAgICAgIC0gZnJvbTogdWlkLnVpZAogICAgICAgICAgdG86IHVzZXIuZWZmZWN0aXZlCiAgIyBBVURJVF9ST0xFX0FTU0lHTiAtIEFkbWluIGFzc2lnbmVkIHVzZXIgdG8gcm9sZQogIC0gcmVjb3JkX3R5cGVzOiBST0xFX0FTU0lHTgogICAgYWN0aW9uOiBhc3NpZ25lZC11c2VyLXJvbGUtdG8KICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogW2lkLCBhY2N0XQogICAgICB3aGF0OiBhY2NvdW50CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWlhbQogICAgICB0eXBlOgogICAgICAgIC0gdXNlcgogICAgICAgIC0gY2hhbmdlCiAgIyBBVURJVF9ST0xFX01PRElGWSAtIEFkbWluIG1vZGlmaWVkIGEgcm9sZQogIC0gcmVjb3JkX3R5cGVzOiBST0xFX01PRElGWQogICAgYWN0aW9uOiBtb2RpZmllZC1yb2xlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWlhbQogICAgICB0eXBlOgogICAgICAgIC0gY2hhbmdlCiAgIyBBVURJVF9ST0xFX1JFTU9WRSAtIEFkbWluIHJlbW92ZWQgdXNlciBmcm9tIHJvbGUKICAtIHJlY29yZF90eXBlczogUk9MRV9SRU1PVkUKICAgIGFjdGlvbjogcmVtb3ZlZC11c2VyLXJvbGUtZnJvbQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBbaWQsIGFjY3RdCiAgICAgIHdoYXQ6IGFjY291bnQKICAgIGVjczoKICAgICAgPDw6ICplY3MtaWFtCiAgICAgIHR5cGU6CiAgICAgICAgLSB1c2VyCiAgICAgICAgLSBjaGFuZ2UKICAjIEFVRElUX1VTRVJfTUdNVCAtIFVzZXIgYWNjdCBhdHRyaWJ1dGUgY2hhbmdlCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBVU0VSX01HTVQKICAgIGFjdGlvbjogbW9kaWZpZWQtdXNlci1hY2NvdW50CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWlhbQogICAgICB0eXBlOgogICAgICAgIC0gdXNlcgogICAgICAgIC0gY2hhbmdlCiAgICAgIG1hcHBpbmdzOgogICAgICAgIC0gZnJvbTogYWN0b3IucHJpbWFyeQogICAgICAgICAgdG86IHVzZXIKICAgICAgICAtIGZyb206IGFjdG9yLnNlY29uZGFyeQogICAgICAgICAgdG86IHVzZXIudGFyZ2V0CiAgICAgICAgLSBmcm9tOiB1aWQudWlkCiAgICAgICAgICB0bzogdXNlci5lZmZlY3RpdmUKICAjIEFVRElUX1VTRVJfQ0hBVVRIVE9LIC0gVXNlciBhY2N0IHBhc3N3b3JkIG9yIHBpbiBjaGFuZ2VkCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBVU0VSX0NIQVVUSFRPSwogICAgYWN0aW9uOiBjaGFuZ2VkLXBhc3N3b3JkCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWlhbQogICAgICB0eXBlOgogICAgICAgIC0gdXNlcgogICAgICAgIC0gY2hhbmdlCiAgICAgIG1hcHBpbmdzOgogICAgICAgIC0gZnJvbTogYWN0b3IucHJpbWFyeQogICAgICAgICAgdG86IHVzZXIKICAgICAgICAtIGZyb206IHVpZC51aWQKICAgICAgICAgIHRvOiB1c2VyLmVmZmVjdGl2ZQogICAgICAgIC0gZnJvbTogYWN0b3Iuc2Vjb25kYXJ5CiAgICAgICAgICB0bzogdXNlci50YXJnZXQKCiAgIyBBVURJVF9HUlBfQ0hBVVRIVE9LIC0gR3JvdXAgYWNjdCBwYXNzd29yZCBvciBwaW4gY2hhbmdlZAogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogR1JQX0NIQVVUSFRPSwogICAgYWN0aW9uOiBjaGFuZ2VkLWdyb3VwLXBhc3N3b3JkCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGFjY3QKICAgICAgd2hhdDogdXNlci1zZXNzaW9uCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWlhbQogICAgICB0eXBlOgogICAgICAgIC0gZ3JvdXAKICAgICAgICAtIGNoYW5nZQogICAgICBtYXBwaW5nczoKICAgICAgICAtIGZyb206IGFjdG9yLnByaW1hcnkKICAgICAgICAgIHRvOiB1c2VyCiAgICAgICAgLSBmcm9tOiB1aWQudWlkCiAgICAgICAgICB0bzogdXNlci5lZmZlY3RpdmUKICAgICAgICAtIGZyb206IGFjdG9yLnNlY29uZGFyeQogICAgICAgICAgdG86IGdyb3VwLnRhcmdldAoKICAjIEF1dGhlbnRpY2F0aW9uIHJlbGF0ZWQgZXZlbnRzCgogICMgQVVESVRfQ1JFRF9BQ1EgLSBVc2VyIGNyZWRlbnRpYWwgYWNxdWlyZWQKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IENSRURfQUNRCiAgICBhY3Rpb246IGFjcXVpcmVkLWNyZWRlbnRpYWxzCiAgICBlY3M6ICplY3MtYXV0aAogICMgQVVESVRfQ1JFRF9ESVNQIC0gVXNlciBjcmVkZW50aWFsIGRpc3Bvc2VkCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBDUkVEX0RJU1AKICAgIGFjdGlvbjogZGlzcG9zZWQtY3JlZGVudGlhbHMKICAgIGVjczogKmVjcy1hdXRoCiAgIyBBVURJVF9DUkVEX1JFRlIgLSBVc2VyIGNyZWRlbnRpYWwgcmVmcmVzaGVkCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBDUkVEX1JFRlIKICAgIGFjdGlvbjogcmVmcmVzaGVkLWNyZWRlbnRpYWxzCiAgICBlY3M6ICplY3MtYXV0aAogICMgQVVESVRfR1JQX0FVVEggLSBBdXRoZW50aWNhdGlvbiBmb3IgZ3JvdXAgcGFzc3dvcmQKICAtIHJlY29yZF90eXBlczogR1JQX0FVVEgKICAgIGFjdGlvbjogYXV0aGVudGljYXRlZC10by1ncm91cAogICAgZWNzOiAqZWNzLWF1dGgKICAjIEFVRElUX0xPR0lOIC0gRGVmaW5lIHRoZSBsb2dpbiBpZCBhbmQgaW5mb3JtYXRpb24KICAtIHJlY29yZF90eXBlczogTE9HSU4KICAgIGFjdGlvbjogY2hhbmdlZC1sb2dpbi1pZC10bwogICAgc3ViamVjdDoKICAgICAgcHJpbWFyeTogW29sZF9hdWlkLCBvbGQtYXVpZF0KICAgICAgc2Vjb25kYXJ5OiB1aWQKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogYXVpZAogICAgICB3aGF0OiB1c2VyLXNlc3Npb24KICAgIGVjczoKICAgICAgPDw6ICplY3MtYXV0aAogICAgICB0eXBlOiBzdGFydAogICMgQVVESVRfVVNFUl9BQ0NUIC0gVXNlciBzeXN0ZW0gYWNjZXNzIGF1dGhvcml6YXRpb24KICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IFVTRVJfQUNDVAogICAgYWN0aW9uOiB3YXMtYXV0aG9yaXplZAogICAgZWNzOiAqZWNzLWF1dGgKICAjIEFVRElUX1VTRVJfQVVUSCAtIFVzZXIgc3lzdGVtIGFjY2VzcyBhdXRoZW50aWNhdGlvbgogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogVVNFUl9BVVRICiAgICBhY3Rpb246IGF1dGhlbnRpY2F0ZWQKICAgIGVjczogKmVjcy1hdXRoCiAgIyBBVURJVF9VU0VSX0VORCAtIFVzZXIgc2Vzc2lvbiBlbmQKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IFVTRVJfRU5ECiAgICBhY3Rpb246IGVuZGVkLXNlc3Npb24KICAgIGVjczogKmVjcy1hdXRoCiAgIyBBVURJVF9VU0VSX0VSUiAtIFVzZXIgYWNjdCBzdGF0ZSBlcnJvcgogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogVVNFUl9FUlIKICAgIGFjdGlvbjogZXJyb3IKICAgIHNvdXJjZV9pcDogW2FkZHJdCiAgICBlY3M6ICplY3MtYXV0aAogICMgQVVESVRfVVNFUl9MT0dJTiAtIFVzZXIgaGFzIGxvZ2dlZCBpbgogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogVVNFUl9MT0dJTgogICAgYWN0aW9uOiBsb2dnZWQtaW4KICAgIHNvdXJjZV9pcDogW2FkZHJdCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWF1dGgKICAgICAgdHlwZTogc3RhcnQKICAjIEFVRElUX1VTRVJfTE9HT1VUIC0gVXNlciBoYXMgbG9nZ2VkIG91dAogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogVVNFUl9MT0dPVVQKICAgIGFjdGlvbjogbG9nZ2VkLW91dAogICAgZWNzOgogICAgICA8PDogKmVjcy1hdXRoCiAgICAgIHR5cGU6IGVuZAogICMgQVVESVRfVVNFUl9ST0xFX0NIQU5HRSAtIFVzZXIgY2hhbmdlZCB0byBhIG5ldyByb2xlCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBVU0VSX1JPTEVfQ0hBTkdFCiAgICBhY3Rpb246IGNoYW5nZWQtcm9sZS10bwogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBzZWxlY3RlZC1jb250ZXh0CiAgICAgIHdoYXQ6IHVzZXItc2Vzc2lvbgogICMgQVVESVRfVVNFUl9TVEFSVCAtIFVzZXIgc2Vzc2lvbiBzdGFydAogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogVVNFUl9TVEFSVAogICAgYWN0aW9uOiBzdGFydGVkLXNlc3Npb24KICAgIHNvdXJjZV9pcDogW2FkZHJdCiAgICBlY3M6ICplY3MtYXV0aAoKICAjIEhvc3QgdmlydHVhbGl6YXRpb24gZXZlbnRzCgogICMgQVVESVRfVklSVF9DT05UUk9MIC0gU3RhcnQsIFBhdXNlLCBTdG9wIFZNCiAgLSByZWNvcmRfdHlwZXM6IFZJUlRfQ09OVFJPTAogICAgYWN0aW9uOiBpc3N1ZWQtdm0tY29udHJvbAogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBvcAogICAgICBzZWNvbmRhcnk6IHZtCiAgICAgIHdoYXQ6IHZpcnR1YWwtbWFjaGluZQogICAgZWNzOiAqZWNzLWhvc3QKICAjIEFVRElUX1ZJUlRfQ1JFQVRFIC0gQ3JlYXRpb24gb2YgZ3Vlc3QgaW1hZ2UKICAtIHJlY29yZF90eXBlczogVklSVF9DUkVBVEUKICAgIGFjdGlvbjogY3JlYXRlZC12bS1pbWFnZQogICAgZWNzOiAqZWNzLWhvc3QKICAjIEFVRElUX1ZJUlRfREVTVFJPWSAtIERlc3RydWN0aW9uIG9mIGd1ZXN0IGltYWdlCiAgLSByZWNvcmRfdHlwZXM6IFZJUlRfREVTVFJPWQogICAgYWN0aW9uOiBkZWxldGVkLXZtLWltYWdlCiAgICBlY3M6ICplY3MtaG9zdAogICMgQVVESVRfVklSVF9JTlRFR1JJVFlfQ0hFQ0sgLSBHdWVzdCBpbnRlZ3JpdHkgcmVzdWx0cwogIC0gcmVjb3JkX3R5cGVzOiBWSVJUX0lOVEVHUklUWV9DSEVDSwogICAgYWN0aW9uOiBjaGVja2VkLWludGVncml0eS1vZgogICAgZWNzOiAqZWNzLWhvc3QKICAjIEFVRElUX1ZJUlRfTUFDSElORV9JRCAtIEJpbmRpbmcgb2YgbGFiZWwgdG8gVk0KICAtIHJlY29yZF90eXBlczogVklSVF9NQUNISU5FX0lECiAgICBhY3Rpb246IGFzc2lnbmVkLXZtLWlkCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IHZtCiAgICAgIHdoYXQ6IHZpcnR1YWwtbWFjaGluZQogICAgZWNzOiAqZWNzLWhvc3QKICAjIEFVRElUX1ZJUlRfTUlHUkFURV9JTiAtIEluYm91bmQgZ3Vlc3QgbWlncmF0aW9uIGluZm8KICAtIHJlY29yZF90eXBlczogVklSVF9NSUdSQVRFX0lOCiAgICBhY3Rpb246IG1pZ3JhdGVkLXZtLWZyb20KICAgIGVjczogKmVjcy1ob3N0CiAgIyBBVURJVF9WSVJUX01JR1JBVEVfT1VUIC0gT3V0Ym91bmQgZ3Vlc3QgbWlncmF0aW9uIGluZm8KICAtIHJlY29yZF90eXBlczogVklSVF9NSUdSQVRFX09VVAogICAgYWN0aW9uOiBtaWdyYXRlZC12bS10bwogICAgZWNzOiAqZWNzLWhvc3QKICAjIEFVRElUX1ZJUlRfUkVTT1VSQ0UgLSBSZXNvdXJjZSBhc3NpZ25tZW50CiAgLSByZWNvcmRfdHlwZXM6IFZJUlRfUkVTT1VSQ0UKICAgIGFjdGlvbjogYXNzaWduZWQtdm0tcmVzb3VyY2UKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogcmVzcmMKICAgICAgc2Vjb25kYXJ5OiB2bQogICAgICB3aGF0OiB2aXJ0dWFsLW1hY2hpbmUKICAgIGVjczogKmVjcy1ob3N0CgogICMgVXNlcnNwYWNlIHByb2Nlc3MgZXZlbnRzCgogICMgQVVESVRfQ0hHUlBfSUQgLSBVc2VyIHNwYWNlIGdyb3VwIElEIGNoYW5nZWQKICAtIHJlY29yZF90eXBlczogQ0hHUlBfSUQKICAgIGFjdGlvbjogY2hhbmdlZC1ncm91cAogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IGNoYW5nZQogICMgQVVESVRfQ0hVU0VSX0lEIC0gQ2hhbmdlZCB1c2VyIElEIHN1cHBsZW1lbnRhbCBkYXRhCiAgLSByZWNvcmRfdHlwZXM6IENIVVNFUl9JRAogICAgYWN0aW9uOiBjaGFuZ2VkLXVzZXItaWQKICAgIGVjczoKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBjaGFuZ2UKICAjIEFVRElUX1RFU1QgLSBVc2VkIGZvciB0ZXN0IHN1Y2Nlc3MgbWVzc2FnZXMKICAtIHJlY29yZF90eXBlczogVEVTVAogICAgYWN0aW9uOiBzZW50LXRlc3QKICAgIGVjczogKmVjcy1wcm9jZXNzCiAgIyBBVURJVF9UUlVTVEVEX0FQUCAtIFRydXN0ZWQgYXBwIG1zZyAtIGZyZWVzdHlsZSB0ZXh0CiAgLSByZWNvcmRfdHlwZXM6IFRSVVNURURfQVBQCiAgICBhY3Rpb246IHVua25vd24KICAgIGVjczogKmVjcy1wcm9jZXNzCiAgIyBBVURJVF9VU0VSX0NNRCAtIFVzZXIgc2hlbGwgY29tbWFuZCBhbmQgYXJncwogIC0gcmVjb3JkX3R5cGVzOiBVU0VSX0NNRAogICAgYWN0aW9uOiByYW4tY29tbWFuZAogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBjbWQKICAgICAgd2hhdDogcHJvY2VzcwogICAgZGVzY3JpcHRpb246ID4KICAgICAgVGhlc2UgbWVzc2FnZXMgYXJlIGZyb20gdXNlci1zcGFjZSBhcHBzLCBsaWtlIHN1ZG8sIHRoYXQgbG9nIGNvbW1hbmRzCiAgICAgIGJlaW5nIHJ1biBieSBhIHVzZXIuIFRoZSB1aWQgY29udGFpbmVkIGluIHRoZXNlIG1lc3NhZ2VzIGlzIHVzZXIncyBVSUQgYXQKICAgICAgdGhlIHRpbWUgdGhlIGNvbW1hbmQgd2FzIHJ1bi4gSXQgaXMgbm90IHRoZSAidGFyZ2V0IiBVSUQgdXNlZCB0byBydW4gdGhlCiAgICAgIGNvbW1hbmQsIHdoaWNoIGlzIG5vcm1hbGx5IHJvb3QuCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogc3RhcnQKCiAgIyBIb3N0LWxldmVsIGV2ZW50cwoKICAjIEFVRElUX1NZU1RFTV9CT09UIC0gU3lzdGVtIGJvb3QKICAtIHJlY29yZF90eXBlczogU1lTVEVNX0JPT1QKICAgIGFjdGlvbjogYm9vdGVkLXN5c3RlbQogICAgb2JqZWN0OgogICAgICB3aGF0OiBzeXN0ZW0KICAgIGVjczoKICAgICAgPDw6ICplY3MtaG9zdAogICAgICB0eXBlOiBzdGFydAogICMgQVVESVRfU1lTVEVNX1JVTkxFVkVMIC0gU3lzdGVtIHJ1bmxldmVsIGNoYW5nZQogIC0gcmVjb3JkX3R5cGVzOiBTWVNURU1fUlVOTEVWRUwKICAgIGFjdGlvbjogY2hhbmdlZC10by1ydW5sZXZlbAogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBuZXctbGV2ZWwKICAgICAgd2hhdDogc3lzdGVtCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWhvc3QKICAgICAgdHlwZTogY2hhbmdlCiAgIyBBVURJVF9TWVNURU1fU0hVVERPV04gLSBTeXN0ZW0gc2h1dGRvd24KICAtIHJlY29yZF90eXBlczogU1lTVEVNX1NIVVRET1dOCiAgICBhY3Rpb246IHNodXRkb3duLXN5c3RlbQogICAgb2JqZWN0OgogICAgICB3aGF0OiBzeXN0ZW0KICAgIGVjczoKICAgICAgPDw6ICplY3MtaG9zdAogICAgICB0eXBlOiBlbmQKCiAgIyBTZXJ2aWNlLWxldmVsIGV2ZW50cwoKICAjIEFVRElUX1NFUlZJQ0VfU1RBUlQgLSBTZXJ2aWNlIChkYWVtb24pIHN0YXJ0CiAgLSByZWNvcmRfdHlwZXM6IFNFUlZJQ0VfU1RBUlQKICAgIGFjdGlvbjogc3RhcnRlZC1zZXJ2aWNlCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IHVuaXQKICAgICAgd2hhdDogc2VydmljZQogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IHN0YXJ0CiAgIyBBVURJVF9TRVJWSUNFX1NUT1AgLSBTZXJ2aWNlIChkYWVtb24pIHN0b3AKICAtIHJlY29yZF90eXBlczogU0VSVklDRV9TVE9QCiAgICBhY3Rpb246IHN0b3BwZWQtc2VydmljZQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiB1bml0CiAgICAgIHdoYXQ6IHNlcnZpY2UKICAgIGVjczoKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBzdG9wCgogICMgQXVkaXRkIGludGVybmFsIGV2ZW50cwoKICAjIEFVRElUX0NPTkZJR19DSEFOR0UgLSBBdWRpdCBzeXN0ZW0gY29uZmlndXJhdGlvbiBjaGFuZ2UKICAtIHJlY29yZF90eXBlczogQ09ORklHX0NIQU5HRQogICAgYWN0aW9uOiBjaGFuZ2VkLWF1ZGl0LWNvbmZpZ3VyYXRpb24KICAgIG9iamVjdDoKICAgICAgcHJpbWFyeToKICAgICAgICBbb3AsIGtleSwgYXVkaXRfZW5hYmxlZCwgYXVkaXRfcGlkLCBhdWRpdF9iYWNrbG9nX2xpbWl0LCBhdWRpdF9mYWlsdXJlXQogICAgICB3aGF0OiBhdWRpdC1jb25maWcKICAgIGVjczoKICAgICAgY2F0ZWdvcnk6IFtwcm9jZXNzLCBjb25maWd1cmF0aW9uXQogICAgICB0eXBlOiBjaGFuZ2UKICAjIEFVRElUX0RBRU1PTl9BQk9SVCAtIERhZW1vbiBlcnJvciBzdG9wIHJlY29yZAogIC0gcmVjb3JkX3R5cGVzOiBEQUVNT05fQUJPUlQKICAgIGFjdGlvbjogYWJvcnRlZC1hdWRpdGQtc3RhcnR1cAogICAgb2JqZWN0OgogICAgICB3aGF0OiBzZXJ2aWNlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogc3RvcAogICMgQVVESVRfREFFTU9OX0FDQ0VQVCAtIEF1ZGl0ZCBhY2NlcHRlZCByZW1vdGUgY29ubmVjdGlvbgogIC0gcmVjb3JkX3R5cGVzOiBEQUVNT05fQUNDRVBUCiAgICBhY3Rpb246IHJlbW90ZS1hdWRpdC1jb25uZWN0ZWQKICAgIG9iamVjdDoKICAgICAgd2hhdDogc2VydmljZQogICAgZWNzOgogICAgICA8PDogKmVjcy1uZXR3b3JrCiAgICAgIHR5cGU6CiAgICAgICAgLSBjb25uZWN0aW9uCiAgICAgICAgLSBzdGFydAogICMgQVVESVRfREFFTU9OX0NMT1NFIC0gQXVkaXRkIGNsb3NlZCByZW1vdGUgY29ubmVjdGlvbgogIC0gcmVjb3JkX3R5cGVzOiBEQUVNT05fQ0xPU0UKICAgIGFjdGlvbjogcmVtb3RlLWF1ZGl0LWRpc2Nvbm5lY3RlZAogICAgb2JqZWN0OgogICAgICB3aGF0OiBzZXJ2aWNlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLW5ldHdvcmsKICAgICAgdHlwZToKICAgICAgICAtIGNvbm5lY3Rpb24KICAgICAgICAtIHN0YXJ0CiAgIyBBVURJVF9EQUVNT05fQ09ORklHIC0gRGFlbW9uIGNvbmZpZyBjaGFuZ2UKICAtIHJlY29yZF90eXBlczogREFFTU9OX0NPTkZJRwogICAgYWN0aW9uOiBjaGFuZ2VkLWF1ZGl0ZC1jb25maWd1cmF0aW9uCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNlcnZpY2UKICAgIGVjczoKICAgICAgY2F0ZWdvcnk6IFtwcm9jZXNzLCBjb25maWd1cmF0aW9uXQogICAgICB0eXBlOiBjaGFuZ2UKICAjIEFVRElUX0RBRU1PTl9FTkQgLSBEYWVtb24gbm9ybWFsIHN0b3AgcmVjb3JkCiAgLSByZWNvcmRfdHlwZXM6IERBRU1PTl9FTkQKICAgIGFjdGlvbjogc2h1dGRvd24tYXVkaXQKICAgIG9iamVjdDoKICAgICAgd2hhdDogc2VydmljZQogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IHN0b3AKICAjIEFVRElUX0RBRU1PTl9FUlIgLSBBdWRpdGQgaW50ZXJuYWwgZXJyb3IKICAtIHJlY29yZF90eXBlczogREFFTU9OX0VSUgogICAgYWN0aW9uOiBhdWRpdC1lcnJvcgogICAgb2JqZWN0OgogICAgICB3aGF0OiBzZXJ2aWNlCiAgICBlY3M6ICplY3MtcHJvY2VzcwogICMgQVVESVRfREFFTU9OX1JFQ09ORklHIC0gQXVkaXRkIHNob3VsZCByZWNvbmZpZ3VyZQogIC0gcmVjb3JkX3R5cGVzOiBEQUVNT05fUkVDT05GSUcKICAgIGFjdGlvbjogcmVjb25maWd1cmVkLWF1ZGl0ZAogICAgb2JqZWN0OgogICAgICB3aGF0OiBzZXJ2aWNlCiAgICBlY3M6CiAgICAgIGNhdGVnb3J5OiBbcHJvY2VzcywgY29uZmlndXJhdGlvbl0KICAgICAgdHlwZTogaW5mbwogICMgQVVESVRfREFFTU9OX1JFU1VNRSAtIEF1ZGl0ZCBzaG91bGQgcmVzdW1lIGxvZ2dpbmcKICAtIHJlY29yZF90eXBlczogREFFTU9OX1JFU1VNRQogICAgYWN0aW9uOiByZXN1bWVkLWF1ZGl0LWxvZ2dpbmcKICAgIG9iamVjdDoKICAgICAgd2hhdDogc2VydmljZQogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IGNoYW5nZQogICMgQVVESVRfREFFTU9OX1JPVEFURSAtIEF1ZGl0ZCBzaG91bGQgcm90YXRlIGxvZ3MKICAtIHJlY29yZF90eXBlczogREFFTU9OX1JPVEFURQogICAgYWN0aW9uOiByb3RhdGVkLWF1ZGl0LWxvZ3MKICAgIG9iamVjdDoKICAgICAgd2hhdDogc2VydmljZQogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IGNoYW5nZQogICMgQVVESVRfREFFTU9OX1NUQVJUIC0gRGFlbW9uIHN0YXJ0dXAgcmVjb3JkCiAgLSByZWNvcmRfdHlwZXM6IERBRU1PTl9TVEFSVAogICAgYWN0aW9uOiBzdGFydGVkLWF1ZGl0CiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNlcnZpY2UKICAgIGVjczoKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBzdGFydAogICMgQVVESVRfS0VSTkVMIC0gQXN5bmNocm9ub3VzIGF1ZGl0IHJlY29yZC4gTk9UIEEgUkVRVUVTVC4KICAtIHJlY29yZF90eXBlczogS0VSTkVMCiAgICBhY3Rpb246IGluaXRpYWxpemVkLWF1ZGl0LXN1YnN5c3RlbQogICAgZWNzOiAqZWNzLXByb2Nlc3MKCiAgIyBDb25maWd1cmF0aW9uIGNoYW5nZSBldmVudHMKCiAgIyBBVURJVF9VU1lTX0NPTkZJRyAtIFVzZXIgc3BhY2Ugc3lzdGVtIGNvbmZpZyBjaGFuZ2UKICAtIHJlY29yZF90eXBlczogVVNZU19DT05GSUcKICAgIGFjdGlvbjogY2hhbmdlZC1jb25maWd1cmF0aW9uCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IG9wCiAgICAgIHdoYXQ6IHN5c3RlbQogICAgZWNzOgogICAgICBjYXRlZ29yeTogY29uZmlndXJhdGlvbgogICAgICB0eXBlOiBjaGFuZ2UKICAjIEFVRElUX05FVEZJTFRFUl9DRkcgLSBOZXRmaWx0ZXIgY2hhaW4gbW9kaWZpY2F0aW9ucwogIC0gcmVjb3JkX3R5cGVzOiBORVRGSUxURVJfQ0ZHCiAgICBhY3Rpb246IGxvYWRlZC1maXJld2FsbC1ydWxlLXRvCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IHRhYmxlCiAgICAgIHdoYXQ6IGZpcmV3YWxsCiAgICBlY3M6CiAgICAgIGNhdGVnb3J5OiBjb25maWd1cmF0aW9uCiAgICAgIHR5cGU6IGNoYW5nZQogICMgQVVESVRfRkVBVFVSRV9DSEFOR0UgLSBhdWRpdCBsb2cgbGlzdGluZyBmZWF0dXJlIGNoYW5nZXMKICAtIHJlY29yZF90eXBlczogRkVBVFVSRV9DSEFOR0UKICAgIGFjdGlvbjogY2hhbmdlZC1hdWRpdC1mZWF0dXJlCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGZlYXR1cmUKICAgICAgd2hhdDogc3lzdGVtCiAgICBlY3M6CiAgICAgIGNhdGVnb3J5OiBjb25maWd1cmF0aW9uCiAgICAgIHR5cGU6IGNoYW5nZQogICMgQVVESVRfUkVQTEFDRSAtIFJlcGxhY2UgYXVkaXRkIGlmIHRoaXMgcGFja2V0IHVuYW5zd2VyZAoKICAjIFRUWSBldmVudHMKCiAgLSByZWNvcmRfdHlwZXM6CiAgICAgICMgQVVESVRfVFRZIC0gSW5wdXQgb24gYW4gYWRtaW5pc3RyYXRpdmUgVFRZCiAgICAgIC0gVFRZCiAgICAgICMgQVVESVRfVVNFUl9UVFkgLSBOb24tSUNBTk9OIFRUWSBpbnB1dCBtZWFuaW5nCiAgICAgIC0gVVNFUl9UVFkKICAgIGFjdGlvbjogdHlwZWQKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogZGF0YQogICAgICB3aGF0OiBrZXlzdHJva2VzCiAgICBob3c6IFtjb21tLCBleGVdCgogICMgUG9saWN5IGV2ZW50cwoKICAjIEFVRElUX0FWQyAtIFNFIExpbnV4IGF2YyBkZW5pYWwgb3IgZ3JhbnQgKHNlbGludXgpCiAgLSByZWNvcmRfdHlwZXM6IEFWQwogICAgYWN0aW9uOiB2aW9sYXRlZC1zZWxpbnV4LXBvbGljeQogICAgc3ViamVjdDoKICAgICAgcHJpbWFyeTogc2NvbnRleHQKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogdGNvbnRleHQKICAgICAgc2Vjb25kYXJ5OiB0Y2xhc3MKICAgIGhhc19maWVsZHM6CiAgICAgIC0gc2VyZXN1bHQKICAjIEFVRElUX0FWQyAtIFNFIExpbnV4IGF2YyBkZW5pYWwgb3IgZ3JhbnQgKGFwcGFybW9yKQogIC0gcmVjb3JkX3R5cGVzOiBBVkMKICAgIGFjdGlvbjogdmlvbGF0ZWQtYXBwYXJtb3ItcG9saWN5CiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IG9wZXJhdGlvbgogICAgICBzZWNvbmRhcnk6IFtyZXF1ZXN0ZWRfbWFzaywgZGVuaWVkX21hc2ssIGNhcG5hbWVdCiAgICAgIHdoYXQ6IHBvbGljeQogICAgaGFzX2ZpZWxkczoKICAgICAgLSBhcHBhcm1vcgogICMgQVVESVRfRlNfUkVMQUJFTCAtIEZpbGVzeXN0ZW0gcmVsYWJlbGVkCiAgLSByZWNvcmRfdHlwZXM6IEZTX1JFTEFCRUwKICAgIGFjdGlvbjogcmVsYWJlbGVkLWZpbGVzeXN0ZW0KICAgIG9iamVjdDoKICAgICAgd2hhdDogbWFjLWNvbmZpZwogICMgQVVESVRfTEFCRUxfTEVWRUxfQ0hBTkdFIC0gT2JqZWN0J3MgbGV2ZWwgd2FzIGNoYW5nZWQKICAtIHJlY29yZF90eXBlczogTEFCRUxfTEVWRUxfQ0hBTkdFCiAgICBhY3Rpb246IG1vZGlmaWVkLWxldmVsLW9mCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IHByaW50ZXIKICAgICAgd2hhdDogcHJpbnRlcgogICMgQVVESVRfTEFCRUxfT1ZFUlJJREUgLSBBZG1pbiBpcyBvdmVycmlkaW5nIGEgbGFiZWwKICAtIHJlY29yZF90eXBlczogTEFCRUxfT1ZFUlJJREUKICAgIGFjdGlvbjogb3ZlcnJvZGUtbGFiZWwtb2YKICAgIG9iamVjdDoKICAgICAgd2hhdDogbWFjLWNvbmZpZwogICMgQVVESVRfTUFDX0NIRUNLIC0gVXNlciBzcGFjZSBNQUMgZGVjaXNpb24gcmVzdWx0cwogIC0gcmVjb3JkX3R5cGVzOiBNQUNfQ0hFQ0sKICAgIGFjdGlvbjogbWFjLXBlcm1pc3Npb24KICAjIEFVRElUX01BQ19DT05GSUdfQ0hBTkdFIC0gQ2hhbmdlcyB0byBib29sZWFucwogIC0gcmVjb3JkX3R5cGVzOiBNQUNfQ09ORklHX0NIQU5HRQogICAgYWN0aW9uOiBjaGFuZ2VkLXNlbGludXgtYm9vbGVhbgogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBib29sCiAgICAgIHdoYXQ6IG1hYy1jb25maWcKICAgIGVjczoKICAgICAgY2F0ZWdvcnk6IGNvbmZpZ3VyYXRpb24KICAgICAgdHlwZTogY2hhbmdlCiAgIyBBVURJVF9NQUNfUE9MSUNZX0xPQUQgLSBQb2xpY3kgZmlsZSBsb2FkCiAgLSByZWNvcmRfdHlwZXM6IE1BQ19QT0xJQ1lfTE9BRAogICAgYWN0aW9uOiBsb2FkZWQtc2VsaW51eC1wb2xpY3kKICAgIG9iamVjdDoKICAgICAgd2hhdDogbWFjLWNvbmZpZwogICAgZWNzOgogICAgICBjYXRlZ29yeTogY29uZmlndXJhdGlvbgogICAgICB0eXBlOiBhY2Nlc3MKICAjIEFVRElUX01BQ19TVEFUVVMgLSBDaGFuZ2VkIGVuZm9yY2luZyxwZXJtaXNzaXZlLG9mZgogIC0gcmVjb3JkX3R5cGVzOiBNQUNfU1RBVFVTCiAgICBhY3Rpb246IGNoYW5nZWQtc2VsaW51eC1lbmZvcmNlbWVudAogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBlbmZvcmNpbmcKICAgICAgd2hhdDogbWFjLWNvbmZpZwogICAgZWNzOgogICAgICBjYXRlZ29yeTogY29uZmlndXJhdGlvbgogICAgICB0eXBlOiBjaGFuZ2UKICAjIEFVRElUX1VTRVJfQVZDIC0gVXNlciBzcGFjZSBhdmMgbWVzc2FnZQogIC0gcmVjb3JkX3R5cGVzOiBVU0VSX0FWQwogICAgYWN0aW9uOiBhY2Nlc3MtcGVybWlzc2lvbgogICMgQVVESVRfVVNFUl9NQUNfQ09ORklHX0NIQU5HRSAtIENoYW5nZSBtYWRlIHRvIE1BQyBwb2xpY3kKICAtIHJlY29yZF90eXBlczogVVNFUl9NQUNfQ09ORklHX0NIQU5HRQogICAgYWN0aW9uOiBjaGFuZ2VkLW1hYy1jb25maWd1cmF0aW9uCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IG1hYy1jb25maWcKICAgIGVjczoKICAgICAgY2F0ZWdvcnk6IGNvbmZpZ3VyYXRpb24KICAgICAgdHlwZTogY2hhbmdlCiAgIyBBVURJVF9VU0VSX01BQ19QT0xJQ1lfTE9BRCAtIFVzZXJzcGMgZGFlbW9uIGxvYWRlZCBwb2xpYwogIC0gcmVjb3JkX3R5cGVzOiBVU0VSX01BQ19QT0xJQ1lfTE9BRAogICAgYWN0aW9uOiBsb2FkZWQtbWFjLXBvbGljeQogICAgb2JqZWN0OgogICAgICB3aGF0OiBtYWMtY29uZmlnCiAgICBlY3M6CiAgICAgIGNhdGVnb3J5OiBjb25maWd1cmF0aW9uCiAgICAgIHR5cGU6IGFjY2VzcwogICMgQVVESVRfVVNFUl9TRUxJTlVYX0VSUiAtIFNFIExpbnV4IHVzZXIgc3BhY2UgZXJyb3IKICAtIHJlY29yZF90eXBlczogVVNFUl9TRUxJTlVYX0VSUgogICAgYWN0aW9uOiBhY2Nlc3MtZXJyb3IKICAjIEFVRElUX1NFQ0NPTVAgLSBTZWN1cmUgQ29tcHV0aW5nIGV2ZW50CiAgLSByZWNvcmRfdHlwZXM6IFNFQ0NPTVAKICAgIGFjdGlvbjogdmlvbGF0ZWQtc2VjY29tcC1wb2xpY3kKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogc3lzY2FsbAogICAgICB3aGF0OiBwcm9jZXNzCiAgIyBBVURJVF9TRUxJTlVYX0VSUiAtIEludGVybmFsIFNFIExpbnV4IEVycm9ycwogIC0gYWN0aW9uOiBjYXVzZWQtbWFjLXBvbGljeS1lcnJvcgogICAgb2JqZWN0OgogICAgICB3aGF0OiBzeXN0ZW0KICAgIHJlY29yZF90eXBlczogU0VMSU5VWF9FUlIKICAjIEFVRElUX0FQUEFSTU9SX0FMTE9XRUQKICAjIEFVRElUX0FQUEFSTU9SX0RFTklFRAogICMgQVVESVRfQVBQQVJNT1JfRVJST1IKICAjIEFVRElUX0FWQ19QQVRIIC0gZGVudHJ5LCB2ZnNtb3VudCBwYWlyIGZyb20gYXZjCiAgIyBBVURJVF9BUFBBUk1PUl9BVURJVAogICMgQVVESVRfQVBQQVJNT1JfSElOVAogICMgQVVESVRfQVBQQVJNT1JfU1RBVFVTCiAgIyBBVURJVF9BUFBBUk1PUl9FUlJPUgogICMgQVVESVRfREVWX0FMTE9DIC0gRGV2aWNlIHdhcyBhbGxvY2F0ZWQKICAjIEFVRElUX0RFVl9ERUFMTE9DIC0gRGV2aWNlIHdhcyBkZWFsbG9jYXRlZAogICMgQVVESVRfTUFDX1VOTEJMX0FMTE9XIC0gTmV0TGFiZWw6IGFsbG93IHVubGFiZWxlZCB0cmFmZmljCiAgIyBBVURJVF9NQUNfQ0lQU09WNF9BREQgLSBOZXRMYWJlbDogYWRkIENJUFNPdjQgRE9JIGVudHJ5CiAgIyBBVURJVF9NQUNfQ0lQU09WNF9ERUwgLSBOZXRMYWJlbDogZGVsIENJUFNPdjQgRE9JIGVudHJ5CiAgIyBBVURJVF9NQUNfTUFQX0FERCAtIE5ldExhYmVsOiBhZGQgTFNNIGRvbWFpbiBtYXBwaW5nCiAgIyBBVURJVF9NQUNfTUFQX0RFTCAtIE5ldExhYmVsOiBkZWwgTFNNIGRvbWFpbiBtYXBwaW5nCiAgIyBBVURJVF9NQUNfSVBTRUNfRVZFTlQgLSBBdWRpdCBhbiBJUFNlYyBldmVudAogICMgQVVESVRfTUFDX1VOTEJMX1NUQ0FERCAtIE5ldExhYmVsOiBhZGQgYSBzdGF0aWMgbGFiZWwKICAjIEFVRElUX01BQ19VTkxCTF9TVENERUwgLSBOZXRMYWJlbDogZGVsIGEgc3RhdGljIGxhYmVsCiAgIyBBVURJVF9NQUNfQ0FMSVBTT19BREQgLSBOZXRMYWJlbDogYWRkIENBTElQU08gRE9JIGVudHJ5CiAgIyBBVURJVF9NQUNfQ0FMSVBTT19ERUwgLSBOZXRMYWJlbDogZGVsIENBTElQU08gRE9JIGVudHJ5CiAgIyBBVURJVF9VU0VSX0xBQkVMRURfRVhQT1JUIC0gT2JqZWN0IGV4cG9ydGVkIHdpdGggbGFiZWwKICAjIEFVRElUX1VTRVJfVU5MQUJFTEVEX0VYUE9SVCAtIE9iamVjdCBleHBvcnRlZCB3aXRob3V0IGxhYmVsCgogICMgQ3J5cHRvIGV2ZW50cwoKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICBhY3Rpb246IG5lZ290aWF0ZWQtY3J5cHRvLWtleQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBmcAogICAgICBzZWNvbmRhcnk6IFthZGRyLCBob3N0bmFtZV0KICAgICAgd2hhdDogdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IENSWVBUT19LRVlfVVNFUgogICAgc291cmNlX2lwOiBbYWRkcl0KICAgIGVjczogKmVjcy1wcm9jZXNzCiAgLSBhY3Rpb246IGNyeXB0by1vZmZpY2VyLWxvZ2dlZC1pbgogICAgcmVjb3JkX3R5cGVzOiBDUllQVE9fTE9HSU4KICAtIGFjdGlvbjogY3J5cHRvLW9mZmljZXItbG9nZ2VkLW91dAogICAgcmVjb3JkX3R5cGVzOiBDUllQVE9fTE9HT1VUCiAgICBlY3M6ICplY3MtcHJvY2VzcwogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIGFjdGlvbjogc3RhcnRlZC1jcnlwdG8tc2Vzc2lvbgogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBhZGRyCiAgICAgIHNlY29uZGFyeTogW3Jwb3J0XQogICAgcmVjb3JkX3R5cGVzOiBDUllQVE9fU0VTU0lPTgogICAgc291cmNlX2lwOiBbYWRkcl0KICAgIGVjczogKmVjcy1wcm9jZXNzCiAgLSBhY3Rpb246IGFjY2Vzcy1yZXN1bHQKICAgIHJlY29yZF90eXBlczogREFDX0NIRUNLCgogICMgQW5vbWFsaWVzCgogICMgQVVESVRfQU5PTV9BQkVORCAtIFByb2Nlc3MgZW5kZWQgYWJub3JtYWxseQogIC0gcmVjb3JkX3R5cGVzOiBBTk9NX0FCRU5ECiAgICBhY3Rpb246IGNyYXNoZWQtcHJvZ3JhbQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBbY29tbSwgZXhlXQogICAgICBzZWNvbmRhcnk6IHBpZAogICAgICB3aGF0OiBwcm9jZXNzCiAgICBob3c6IHNpZwogICAgZWNzOgogICAgICAjIGNvbnNpZGVyIGFkZGluZyBhbiBhbm9tYWx5IGNhdGVnb3J5IHdoZW4gd2UgaW50cm9kdWNlCiAgICAgICMgdG8gRUNTCiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogZW5kCiAgIyBBVURJVF9BTk9NX0VYRUMgLSBFeGVjdXRpb24gb2YgZmlsZQogIC0gcmVjb3JkX3R5cGVzOiBBTk9NX0VYRUMKICAgIGFjdGlvbjogYXR0ZW1wdGVkLWV4ZWN1dGlvbi1vZi1mb3JiaWRkZW4tcHJvZ3JhbQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBjbWQKICAgICAgd2hhdDogcHJvY2VzcwogICAgaG93OiB0ZXJtaW5hbAogICAgZWNzOgogICAgICAjIGNvbnNpZGVyIGFkZGluZyBhbiBhbm9tYWx5IGNhdGVnb3J5IHdoZW4gd2UgaW50cm9kdWNlCiAgICAgICMgdG8gRUNTCiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogc3RhcnQKICAjIEFVRElUX0FOT01fTElOSyAtIFN1c3BpY2lvdXMgdXNlIG9mIGZpbGUgbGlua3MKICAtIHJlY29yZF90eXBlczogQU5PTV9MSU5LCiAgICBhY3Rpb246IHVzZWQtc3VzcGljaW91cy1saW5rCiAgIyBBVURJVF9BTk9NX0xPR0lOX0ZBSUxVUkVTIC0gRmFpbGVkIGxvZ2luIGxpbWl0IHJlYWNoZWQKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IEFOT01fTE9HSU5fRkFJTFVSRVMKICAgIGFjdGlvbjogZmFpbGVkLWxvZy1pbi10b28tbWFueS10aW1lcy10bwogICMgQVVESVRfQU5PTV9MT0dJTl9MT0NBVElPTiAtIExvZ2luIGZyb20gZm9yYmlkZGVuIGxvY2F0aW9uCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBBTk9NX0xPR0lOX0xPQ0FUSU9OCiAgICBhY3Rpb246IGF0dGVtcHRlZC1sb2ctaW4tZnJvbS11bnVzdWFsLXBsYWNlLXRvCiAgIyBBVURJVF9BTk9NX0xPR0lOX1NFU1NJT05TIC0gTWF4IGNvbmN1cnJlbnQgc2Vzc2lvbnMgcmVhY2hlZAogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogQU5PTV9MT0dJTl9TRVNTSU9OUwogICAgYWN0aW9uOiBvcGVuZWQtdG9vLW1hbnktc2Vzc2lvbnMtdG8KICAjIEFVRElUX0FOT01fTE9HSU5fVElNRSAtIExvZ2luIGF0dGVtcHRlZCBhdCBiYWQgdGltZQogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogQU5PTV9MT0dJTl9USU1FCiAgICBhY3Rpb246IGF0dGVtcHRlZC1sb2ctaW4tZHVyaW5nLXVudXN1YWwtaG91ci10bwogICMgQVVESVRfQU5PTV9QUk9NSVNDVU9VUyAtIERldmljZSBjaGFuZ2VkIHByb21pc2N1b3VzIG1vZGUKICAtIHJlY29yZF90eXBlczogQU5PTV9QUk9NSVNDVU9VUwogICAgYWN0aW9uOiBjaGFuZ2VkLXByb21pc2N1b3VzLW1vZGUtb24tZGV2aWNlICMgQ291bGQgYmUgZW50ZXJlZCBvciBleGl0ZWQgYmFzZWQgb24gcHJvbSBmaWVsZC4KICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogZGV2CiAgICAgIHdoYXQ6IG5ldHdvcmstZGV2aWNlCiAgIyBBVURJVF9BTk9NX1JCQUNfSU5URUdSSVRZX0ZBSUwgLSBSQkFDIGZpbGUgaW50ZWdyaXR5IGZhaWx1cmUKICAtIHJlY29yZF90eXBlczogQU5PTV9SQkFDX0lOVEVHUklUWV9GQUlMCiAgICBhY3Rpb246IHRlc3RlZC1maWxlLXN5c3RlbS1pbnRlZ3JpdHktb2YKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogaG9zdG5hbWUKICAgICAgd2hhdDogZmlsZXN5c3RlbQogICMgQVVESVRfQU5PTV9MT0dJTl9BQ0NUIC0gTG9naW4gYXR0ZW1wdGVkIHRvIHdhdGNoZWQgYWNjdAogICMgQVVESVRfQU5PTV9NQVhfREFDIC0gTWF4IERBQyBmYWlsdXJlcyByZWFjaGVkCiAgIyBBVURJVF9BTk9NX01BWF9NQUMgLSBNYXggTUFDIGZhaWx1cmVzIHJlYWNoZWQKICAjIEFVRElUX0FOT01fQU1UVV9GQUlMIC0gQU1UVSBmYWlsdXJlCiAgIyBBVURJVF9BTk9NX1JCQUNfRkFJTCAtIFJCQUMgc2VsZiB0ZXN0IGZhaWx1cmUKICAjIEFVRElUX0FOT01fQ1JZUFRPX0ZBSUwgLSBDcnlwdG8gc3lzdGVtIHRlc3QgZmFpbHVyZQogICMgQVVESVRfQU5PTV9NS19FWEUgLSBNYWtlIGFuIGV4ZWN1dGFibGUKICAjIEFVRElUX0FOT01fQUNDRVNTX0ZTIC0gQWNjZXNzIG9mIGZpbGUgb3IgZGlyCiAgIyBBVURJVF9BTk9NX0FERF9BQ0NUIC0gQWRkaW5nIGFuIGFjY3QKICAjIEFVRElUX0FOT01fREVMX0FDQ1QgLSBEZWxldGluZyBhbiBhY2N0CiAgIyBBVURJVF9BTk9NX01PRF9BQ0NUIC0gQ2hhbmdpbmcgYW4gYWNjdAogICMgQVVESVRfQU5PTV9ST09UX1RSQU5TIC0gVXNlciBiZWNhbWUgcm9vdAogICMgQVVESVRfQU5PTV9MT0dJTl9TRVJWSUNFIC0gU2VydmljZSBhY2N0IGF0dGVtcHRlZCBsb2dpbgoKICAjIEFub21hbHkgcmVzcG9uc2VzCgogICMgQVVESVRfUkVTUF9BTk9NQUxZIC0gQW5vbWFseSBub3QgcmVhY3RlZCB0bwogICMgQVVESVRfUkVTUF9BTEVSVCAtIEFsZXJ0IGVtYWlsIHdhcyBzZW50CiAgIyBBVURJVF9SRVNQX0tJTExfUFJPQyAtIEtpbGwgcHJvZ3JhbQogICMgQVVESVRfUkVTUF9URVJNX0FDQ0VTUyAtIFRlcm1pbmF0ZSBzZXNzaW9uCiAgIyBBVURJVF9SRVNQX0FDQ1RfUkVNT1RFIC0gQWNjdCBsb2NrZWQgZnJvbSByZW1vdGUgYWNjZXNzCiAgIyBBVURJVF9SRVNQX0FDQ1RfTE9DS19USU1FRCAtIFVzZXIgYWNjdCBsb2NrZWQgZm9yIHRpbWUKICAjIEFVRElUX1JFU1BfQUNDVF9VTkxPQ0tfVElNRUQgLSBVc2VyIGFjY3QgdW5sb2NrZWQgZnJvbSB0aW1lCiAgIyBBVURJVF9SRVNQX0FDQ1RfTE9DSyAtIFVzZXIgYWNjdCB3YXMgbG9ja2VkCiAgIyBBVURJVF9SRVNQX1RFUk1fTE9DSyAtIFRlcm1pbmFsIHdhcyBsb2NrZWQKICAjIEFVRElUX1JFU1BfU0VCT09MIC0gU2V0IGFuIFNFIExpbnV4IGJvb2xlYW4KICAjIEFVRElUX1JFU1BfRVhFQyAtIEV4ZWN1dGUgYSBzY3JpcHQKICAjIEFVRElUX1JFU1BfU0lOR0xFIC0gR28gdG8gc2luZ2xlIHVzZXIgbW9kZQogICMgQVVESVRfUkVTUF9IQUxUIC0gdGFrZSB0aGUgc3lzdGVtIGRvd24KICAjIEFVRElUX1JFU1BfT1JJR0lOX0JMT0NLIC0gQWRkcmVzcyBibG9ja2VkIGJ5IGlwdGFibGVzCiAgIyBBVURJVF9SRVNQX09SSUdJTl9CTE9DS19USU1FRCAtIEFkZHJlc3MgYmxvY2tlZCBmb3IgdGltZQoKICAjIEF1ZGl0IHJ1bGUgZXZlbnRzCgogICMgQVVESVRfU1lTQ0FMTCAtIFN5c2NhbGwgZXZlbnQKICAjIEFVRElUX1BBVEggLSBGaWxlbmFtZSBwYXRoIGluZm9ybWF0aW9uCiAgIyBBVURJVF9JUEMgLSBJUEMgcmVjb3JkCiAgIyBBVURJVF9TT0NLRVRDQUxMIC0gc3lzX3NvY2tldGNhbGwgYXJndW1lbnRzCiAgIyBBVURJVF9TT0NLQUREUiAtIHNvY2thZGRyIGNvcGllZCBhcyBzeXNjYWxsIGFyZwogICMgQVVESVRfQ1dEIC0gQ3VycmVudCB3b3JraW5nIGRpcmVjdG9yeQogICMgQVVESVRfRVhFQ1ZFIC0gZXhlY3ZlIGFyZ3VtZW50cwogICMgQVVESVRfSVBDX1NFVF9QRVJNIC0gSVBDIG5ldyBwZXJtaXNzaW9ucyByZWNvcmQgdHlwZQogICMgQVVESVRfTVFfT1BFTiAtIFBPU0lYIE1RIG9wZW4gcmVjb3JkIHR5cGUKICAjIEFVRElUX01RX1NFTkRSRUNWLSBQT1NJWCBNUSBzZW5kL3JlY2VpdmUgcmVjb3JkIHR5cGUKICAjIEFVRElUX01RX05PVElGWSAtIFBPU0lYIE1RIG5vdGlmeSByZWNvcmQgdHlwZQogICMgQVVESVRfTVFfR0VUU0VUQVRUUiAtIFBPU0lYIE1RIGdldC9zZXQgYXR0cmlidXRlIHJlY29yZCB0eXBlCiAgIyBBVURJVF9GRF9QQUlSIC0gYXVkaXQgcmVjb3JkIGZvciBwaXBlL3NvY2tldHBhaXIKICAjIEFVRElUX09CSl9QSUQgLSBwdHJhY2UgdGFyZ2V0CiAgIyBBVURJVF9CUFJNX0ZDQVBTIC0gSW5mb3JtYXRpb24gYWJvdXQgZmNhcHMgaW5jcmVhc2luZyBwZXJtcwogICMgQVVESVRfQ0FQU0VUIC0gUmVjb3JkIHNob3dpbmcgYXJndW1lbnQgdG8gc3lzX2NhcHNldAogICMgQVVESVRfTU1BUCAtIFJlY29yZCBzaG93aW5nIGRlc2NyaXB0b3IgYW5kIGZsYWdzIGluIG1tYXAKICAjIEFVRElUX05FVEZJTFRFUl9QS1QgLSBQYWNrZXRzIHRyYXZlcnNpbmcgbmV0ZmlsdGVyIGNoYWlucwoKICAjIEludGVncml0eSBjaGVja3MKCiAgIyBBVURJVF9JTlRFR1JJVFlfREFUQSAtIERhdGEgaW50ZWdyaXR5IHZlcmlmaWNhdGlvbgogICMgQVVESVRfSU5URUdSSVRZX01FVEFEQVRBIC0gTWV0YWRhdGEgaW50ZWdyaXR5IHZlcmlmaWNhdGlvbgogICMgQVVESVRfSU5URUdSSVRZX1NUQVRVUyAtIEludGVncml0eSBlbmFibGUgc3RhdHVzCiAgIyBBVURJVF9JTlRFR1JJVFlfSEFTSCAtIEludGVncml0eSBIQVNIIHR5cGUKICAjIEFVRElUX0lOVEVHUklUWV9QQ1IgLSBQQ1IgaW52YWxpZGF0aW9uIG1zZ3MKICAjIEFVRElUX0lOVEVHUklUWV9SVUxFIC0gUG9saWN5IHJ1bGUKCiAgIyBWYXJpb3VzCgogICMgQVVESVRfVVNFUiAtIE1lc3NhZ2UgZnJvbSB1c2Vyc3BhY2UgLS0gZGVwcmVjYXRlZAogIC0gcmVjb3JkX3R5cGVzOiBVU0VSCiAgICBhY3Rpb246IHNlbnQtbWVzc2FnZQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBhZGRyCg==") assets["normalizationData"] = value } From 1cb7f34bfecde6064cdbdd4e02621319d4808355 Mon Sep 17 00:00:00 2001 From: Adrian Serrano Date: Wed, 20 Jan 2021 19:04:59 +0100 Subject: [PATCH 02/15] Fix mistake --- aucoalesce/coalesce.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aucoalesce/coalesce.go b/aucoalesce/coalesce.go index 6257133..beeade8 100644 --- a/aucoalesce/coalesce.go +++ b/aucoalesce/coalesce.go @@ -807,7 +807,7 @@ func setHowDefaults(event *Event) { func (e *ECSEntityData) set(value string) { // This could be called using an UID or a name - if _, err := strconv.Atoi(value); err == nil { + if _, err := strconv.ParseUint(value, 10, 64); err == nil { e.ID = value } else { e.Name = value From 6cff2acc64834f7ebe045a0d278be390b214ad3f Mon Sep 17 00:00:00 2001 From: Adrian Serrano Date: Thu, 21 Jan 2021 17:03:18 +0100 Subject: [PATCH 03/15] Multi-user support for AUDIT_LOGIN --- aucoalesce/coalesce.go | 4 ++++ aucoalesce/normalizations.yaml | 5 +++++ aucoalesce/znormalize_data.go | 2 +- auparse/auparse.go | 1 + 4 files changed, 11 insertions(+), 1 deletion(-) diff --git a/aucoalesce/coalesce.go b/aucoalesce/coalesce.go index beeade8..8d89757 100644 --- a/aucoalesce/coalesce.go +++ b/aucoalesce/coalesce.go @@ -806,6 +806,10 @@ func setHowDefaults(event *Event) { } func (e *ECSEntityData) set(value string) { + if value == "" || value == "unset" || value == "4294967295" || value == "-1" { + *e = ECSEntityData{ID: "unset"} + return + } // This could be called using an UID or a name if _, err := strconv.ParseUint(value, 10, 64); err == nil { e.ID = value diff --git a/aucoalesce/normalizations.yaml b/aucoalesce/normalizations.yaml index f2c0aa6..0c90ae6 100644 --- a/aucoalesce/normalizations.yaml +++ b/aucoalesce/normalizations.yaml @@ -1044,6 +1044,11 @@ normalizations: ecs: <<: *ecs-auth type: start + mappings: + - from: actor.primary + to: user + - from: object.primary + to: user.effective # AUDIT_USER_ACCT - User system access authorization - <<: *macro-user-session record_types: USER_ACCT diff --git a/aucoalesce/znormalize_data.go b/aucoalesce/znormalize_data.go index 36d4ccc..46fef4f 100644 --- a/aucoalesce/znormalize_data.go +++ b/aucoalesce/znormalize_data.go @@ -31,7 +31,7 @@ func asset(key string) ([]byte, error) { assets = map[string][]byte{} var value []byte - value, _ = base64.StdEncoding.DecodeString("LS0tCiMgTWFjcm9zIGRlY2xhcmVzIHNvbWUgWUFNTCBhbmNob3JzIHRoYXQgY2FuIGJlIHJlZmVyZW5jZWQgZm9yIHNvbWUgY29tbW9uCiMgb2JqZWN0IHR5cGUgbm9ybWFsaXphdGlvbnMgbGlrZSB1c2VyLXNlc3Npb24sIHNvY2tldCwgb3IgcHJvY2Vzcy4KbWFjcm9zOgogIC0gJmRlZmF1bHRzCiAgICBzdWJqZWN0OgogICAgICBwcmltYXJ5OiBhdWlkCiAgICAgIHNlY29uZGFyeTogdWlkCiAgICBob3c6IFtleGUsIGNvbW1dCgogIC0gJm1hY3JvLXVzZXItc2Vzc2lvbgogICAgc3ViamVjdDoKICAgICAgcHJpbWFyeTogYXVpZAogICAgICBzZWNvbmRhcnk6IFthY2N0LCBpZCwgdWlkXQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiB0ZXJtaW5hbAogICAgICBzZWNvbmRhcnk6IFthZGRyLCBob3N0bmFtZV0KICAgICAgd2hhdDogdXNlci1zZXNzaW9uCiAgICBob3c6IFtleGUsIHRlcm1pbmFsXQoKICAtICZtYWNyby1zb2NrZXQKICAgIDw8OiAqZGVmYXVsdHMKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogW2FkZHIsIHBhdGhdCiAgICAgIHNlY29uZGFyeTogcG9ydAogICAgICB3aGF0OiBzb2NrZXQKCiAgLSAmbWFjcm8tcHJvY2VzcwogICAgPDw6ICpkZWZhdWx0cwogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBbY21kLCBleGUsIGNvbW1dCiAgICAgIHNlY29uZGFyeTogcGlkCiAgICAgIHdoYXQ6IHByb2Nlc3MKICAgIGhvdzogdGVybWluYWwKCiAgLSAmZWNzLWlhbQogICAgY2F0ZWdvcnk6IGlhbQogICAgdHlwZTogaW5mbwoKICAtICZlY3MtYXV0aAogICAgY2F0ZWdvcnk6IGF1dGhlbnRpY2F0aW9uCiAgICB0eXBlOiBpbmZvCiAgICBtYXBwaW5nczoKICAgICAgLSBmcm9tOiBhY3Rvci5wcmltYXJ5CiAgICAgICAgdG86IHVzZXIKICAgICAgLSBmcm9tOiBhY3Rvci5zZWNvbmRhcnkKICAgICAgICB0bzogdXNlci5lZmZlY3RpdmUKCiAgLSAmZWNzLWhvc3QKICAgIGNhdGVnb3J5OiBob3N0CiAgICB0eXBlOiBpbmZvCgogIC0gJmVjcy1wcm9jZXNzCiAgICBjYXRlZ29yeTogcHJvY2VzcwogICAgdHlwZTogaW5mbwoKICAtICZlY3MtZmlsZQogICAgY2F0ZWdvcnk6IGZpbGUKICAgIHR5cGU6IGluZm8KCiAgLSAmZWNzLWRyaXZlcgogICAgY2F0ZWdvcnk6IGRyaXZlcgogICAgdHlwZTogaW5mbwoKICAtICZlY3MtbmV0d29yawogICAgY2F0ZWdvcnk6IG5ldHdvcmsKICAgIHR5cGU6CiAgICAgIC0gY29ubmVjdGlvbgogICAgICAtIGluZm8KCiAgLSAmZWNzLXVzZXItbW9kaWZpY2F0aW9uLW1hcHBpbmdzCiAgICBtYXBwaW5nczoKICAgICAgLSBmcm9tOiBhY3Rvci5wcmltYXJ5CiAgICAgICAgdG86IHVzZXIKICAgICAgLSBmcm9tOiBhY3Rvci5zZWNvbmRhcnkKICAgICAgICB0bzogdXNlci5lZmZlY3RpdmUKICAgICAgLSBmcm9tOiBvYmplY3QucHJpbWFyeQogICAgICAgIHRvOiB1c2VyLnRhcmdldAoKICAtICZlY3MtZ3JvdXAtbW9kaWZpY2F0aW9uLW1hcHBpbmdzCiAgICBtYXBwaW5nczoKICAgICAgLSBmcm9tOiBhY3Rvci5wcmltYXJ5CiAgICAgICAgdG86IHVzZXIKICAgICAgLSBmcm9tOiBhY3Rvci5zZWNvbmRhcnkKICAgICAgICB0bzogdXNlci5lZmZlY3RpdmUKICAgICAgLSBmcm9tOiBvYmplY3QucHJpbWFyeQogICAgICAgIHRvOiBncm91cC50YXJnZXQKCiMgTm9ybWFsaXphdGlvbnMgaXMgYSBsaXN0IG9mIGRlY2xhcmF0aW9ucyBzcGVjaWZ5aW5nIGhvdyB0byBub3JtYWxpemUgdGhlIGRhdGEKIyBjb250YWluZWQgaW4gYW4gZXZlbnQuIFRoZSBub3JtYWxpemF0aW9uIGNhbiBiZSBhcHBsaWVkIGJhc2VkIG9uIHRoZSBzeXNjYWxsCiMgbmFtZSAoZS5nLiBjb25uZWN0LCBvcGVuKSBvciBiYXNlZCBvbiB0aGUgcmVjb3JkIHR5cGUgKGUuZy4gVVNFUl9MT0dJTikuCiMgTm8gdHdvIG5vcm1hbGl6YXRpb25zIGNhbiBhcHBseSB0byB0aGUgc2FtZSBzeXNjYWxsIG9yIHJlY29yZCB0eXBlLiBUaGlzCiMgd2lsbCByZXN1bHQgaW4gYSBmYWlsdXJlIGF0IGxvYWQgdGltZS4KIwojIEVhY2ggbm9ybWFsaXphdGlvbiBzaG91bGQgc3BlY2lmeToKIyAgIGFjdGlvbiAtIHdoYXQgaGFwcGVuZWQKIyAgIGFjdG9yICAtIHdobyBkaWQgdGhpcyBvciB3aG8gdHJpZ2dlcmVkIHRoZSBldmVudAojICAgb2JqZWN0IC0gd2hhdCB3YXMgdGhlICJ0aGluZyIgaW52b2x2ZWQgaW4gdGhlIGFjdGlvbiAoZS5nLiBwcm9jZXNzLCBzb2NrZXQpCiMgICBob3cgICAgLSBob3cgd2FzIHRoZSBhY3Rpb24gcGVyZm9ybWVkIChlLmcuIGV4ZSBvciB0ZXJtaW5hbCkKbm9ybWFsaXphdGlvbnM6CiAgLSBlY3M6ICplY3MtcHJvY2VzcwogICAgc3lzY2FsbHM6CiAgICAgIC0gJyonICMgdGhpcyBpcyBhIGNhdGNoIGFsbAogIC0gYWN0aW9uOiBvcGVuZWQtZmlsZQogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBjcmVhdCAtIG9wZW4gYW5kIHBvc3NpYmx5IGNyZWF0ZSBhIGZpbGUKICAgICAgLSBjcmVhdAogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgIHR5cGU6IGNyZWF0aW9uCiAgLSBhY3Rpb246IG9wZW5lZC1maWxlCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIGZhbGxvY2F0ZSAtIG1hbmlwdWxhdGUgZmlsZSBzcGFjZQogICAgICAtIGZhbGxvY2F0ZQogICAgICAjIHRydW5jYXRlIC0gdHJ1bmNhdGUgYSBmaWxlIHRvIGEgc3BlY2lmaWVkIGxlbmd0aAogICAgICAtIHRydW5jYXRlCiAgICAgICMgZnRydW5jYXRlIC0gdHJ1bmNhdGUgYSBmaWxlIHRvIGEgc3BlY2lmaWVkIGxlbmd0aAogICAgICAtIGZ0cnVuY2F0ZQogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgICMgdGVjaG5pY2FsbHkgeW91IGNhbiB0cnVuY2F0ZSBhIGZpbGUgdG8gdGhlIHNhbWUgbGVuZ3RoCiAgICAgICMgYnV0IHJlZ2FyZGxlc3MsIHdlIGNvbnNpZGVyIHRoaXMgYSBjaGFuZ2UKICAgICAgdHlwZTogY2hhbmdlCiAgLSBhY3Rpb246IG9wZW5lZC1maWxlCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIG9wZW4gLSBvcGVuIGFuZCBwb3NzaWJseSBjcmVhdGUgYSBmaWxlCiAgICAgIC0gb3BlbgogICAgICAjIG9wZW5hdCAtIG9wZW4gYW5kIHBvc3NpYmx5IGNyZWF0ZSBhIGZpbGUKICAgICAgLSBvcGVuYXQKICAgICAgIyByZWFkbGluayAtIHJlYWQgdmFsdWUgb2YgYSBzeW1ib2xpYyBsaW5rCiAgICAgIC0gcmVhZGxpbmsKICAgICAgIyByZWFkbGlua2F0IC0gcmVhZCB2YWx1ZSBvZiBhIHN5bWJvbGljIGxpbmsKICAgICAgLSByZWFkbGlua2F0CiAgICBlY3M6ICplY3MtZmlsZQogIC0gYWN0aW9uOiByZWFkLWZpbGUKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgc3lzY2FsbHM6CiAgICAgICMgcmVhZCAtIHJlYWQgZnJvbSBhIGZpbGUgZGVzY3JpcHRvcgogICAgICAtIHJlYWQKICAgIGVjczogKmVjcy1maWxlCiAgLSBhY3Rpb246IHdyb3RlLXRvLWZpbGUKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgc3lzY2FsbHM6CiAgICAgICMgd3JpdGUgLSB3cml0ZSB0byBhIGZpbGUgZGVzY3JpcHRvcgogICAgICAtIHdyaXRlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgdHlwZTogY2hhbmdlCiAgLSBhY3Rpb246IGNoYW5nZWQtZmlsZS1hdHRyaWJ1dGVzLW9mCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIHNldHhhdHRyIC0gc2V0IGFuIGV4dGVuZGVkIGF0dHJpYnV0ZSB2YWx1ZQogICAgICAtIHNldHhhdHRyCiAgICAgICMgZnNldHhhdHRyIC0gc2V0IGFuIGV4dGVuZGVkIGF0dHJpYnV0ZSB2YWx1ZQogICAgICAtIGZzZXR4YXR0cgogICAgICAjIGxzZXR4YXR0ciAtIHNldCBhbiBleHRlbmRlZCBhdHRyaWJ1dGUgdmFsdWUKICAgICAgLSBsc2V0eGF0dHIKICAgICAgIyByZW1vdmV4YXR0ciAtIHJlbW92ZSBhbiBleHRlbmRlZCBhdHRyaWJ1dGUKICAgICAgLSByZW1vdmV4YXR0cgogICAgICAjIGZyZW1vdmV4YXR0ciAtIHJlbW92ZSBhbiBleHRlbmRlZCBhdHRyaWJ1dGUKICAgICAgLSBmcmVtb3ZleGF0dHIKICAgICAgIyBscmVtb3ZleGF0dHIgLSByZW1vdmUgYW4gZXh0ZW5kZWQgYXR0cmlidXRlCiAgICAgIC0gbHJlbW92ZXhhdHRyCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgdHlwZTogY2hhbmdlCiAgLSBhY3Rpb246IGNoYW5nZWQtZmlsZS1wZXJtaXNzaW9ucy1vZgogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBjaG1vZCAtIGNoYW5nZSBwZXJtaXNzaW9ucyBvZiBhIGZpbGUKICAgICAgLSBjaG1vZAogICAgICAjIGZjaG1vZCAtIGNoYW5nZSBwZXJtaXNzaW9ucyBvZiBhIGZpbGUKICAgICAgLSBmY2htb2QKICAgICAgIyBmY2htb2RhdCAtIGNoYW5nZSBwZXJtaXNzaW9ucyBvZiBhIGZpbGUKICAgICAgLSBmY2htb2RhdAogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgIHR5cGU6IGNoYW5nZQogIC0gYWN0aW9uOiBjaGFuZ2VkLWZpbGUtb3duZXJzaGlwLW9mCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIGNob3duIC0gY2hhbmdlIG93bmVyc2hpcCBvZiBhIGZpbGUKICAgICAgLSBjaG93bgogICAgICAjIGZjaG93biAtIGNoYW5nZSBvd25lcnNoaXAgb2YgYSBmaWxlCiAgICAgIC0gZmNob3duCiAgICAgICMgZmNob3duYXQgLSBjaGFuZ2Ugb3duZXJzaGlwIG9mIGEgZmlsZQogICAgICAtIGZjaG93bmF0CiAgICAgICMgbGNob3duIC0gY2hhbmdlIG93bmVyc2hpcCBvZiBhIGZpbGUKICAgICAgLSBsY2hvd24KICAgIGVjczoKICAgICAgPDw6ICplY3MtZmlsZQogICAgICB0eXBlOiBjaGFuZ2UKICAtIGFjdGlvbjogbG9hZGVkLWtlcm5lbC1tb2R1bGUKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgICBwcmltYXJ5OiBuYW1lCiAgICByZWNvcmRfdHlwZXM6CiAgICAgIC0gS0VSTl9NT0RVTEUKICAgIHN5c2NhbGxzOgogICAgICAjIGZpbml0X21vZHVsZSAtIGxvYWQgYSBrZXJuZWwgbW9kdWxlCiAgICAgIC0gZmluaXRfbW9kdWxlCiAgICAgICMgaW5pdF9tb2R1bGUgLSBsb2FkIGEga2VybmVsIG1vZHVsZQogICAgICAtIGluaXRfbW9kdWxlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWRyaXZlcgogICAgICB0eXBlOiBzdGFydAogIC0gYWN0aW9uOiB1bmxvYWRlZC1rZXJuZWwtbW9kdWxlCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIGRlbGV0ZV9tb2R1bGUgLSB1bmxvYWQgYSBrZXJuZWwgbW9kdWxlCiAgICAgIC0gZGVsZXRlX21vZHVsZQogICAgZWNzOgogICAgICA8PDogKmVjcy1kcml2ZXIKICAgICAgdHlwZTogZW5kCiAgLSBhY3Rpb246IGNyZWF0ZWQtZGlyZWN0b3J5CiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgICAgcGF0aF9pbmRleDogMQogICAgc3lzY2FsbHM6CiAgICAgICMgbWtkaXIgLSBjcmVhdGUgYSBkaXJlY3RvcnkKICAgICAgLSBta2RpcgogICAgICAjIG1rZGlyYXQgLSBjcmVhdGUgYSBkaXJlY3RvcnkKICAgICAgLSBta2RpcmF0CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgdHlwZTogY3JlYXRpb24KICAtIGFjdGlvbjogbW91bnRlZAogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlc3lzdGVtCiAgICAgIHBhdGhfaW5kZXg6IDEKICAgIHN5c2NhbGxzOgogICAgICAjIG1vdW50IC0gbW91bnQgZmlsZXN5c3RlbQogICAgICAtIG1vdW50CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgIyBzaW5jZSBhIG5ldyBtb3VudCBhcHBlYXJzIG9uIHRoZSBzeXN0ZW0KICAgICAgIyB3ZSBjb25zaWRlciB0aGlzIGEgaGlnaC1sZXZlbCAiY3JlYXRpb24iIGV2ZW50CiAgICAgIHR5cGU6IGNyZWF0aW9uCiAgLSBhY3Rpb246IHJlbmFtZWQKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgICBwYXRoX2luZGV4OiAyCiAgICBzeXNjYWxsczoKICAgICAgIyByZW5hbWUgLSBjaGFuZ2UgdGhlIG5hbWUgb3IgbG9jYXRpb24gb2YgYSBmaWxlCiAgICAgIC0gcmVuYW1lCiAgICAgICMgcmVuYW1lYXQgLSBjaGFuZ2UgdGhlIG5hbWUgb3IgbG9jYXRpb24gb2YgYSBmaWxlCiAgICAgIC0gcmVuYW1lYXQKICAgICAgIyByZW5hbWVhdDIgLSBjaGFuZ2UgdGhlIG5hbWUgb3IgbG9jYXRpb24gb2YgYSBmaWxlCiAgICAgIC0gcmVuYW1lYXQyCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgdHlwZTogY2hhbmdlCiAgLSBhY3Rpb246IGNoZWNrZWQtbWV0YWRhdGEtb2YKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgc3lzY2FsbHM6CiAgICAgICMgYWNjZXNzIC0gY2hlY2sgdXNlcidzIHBlcm1pc3Npb25zIGZvciBhIGZpbGUKICAgICAgLSBhY2Nlc3MKICAgICAgIyBmYWNjZXNzYXQgLSBjaGVjayB1c2VyJ3MgcGVybWlzc2lvbnMgZm9yIGEgZmlsZQogICAgICAtIGZhY2Nlc3NhdAogICAgICAjIGZzdGF0YXQgLSBnZXQgZmlsZSBzdGF0dXMKICAgICAgLSBmc3RhdGF0CiAgICAgICMgbmV3ZnN0YXRhdCAtIGdldCBmaWxlIHN0YXR1cwogICAgICAtIG5ld2ZzdGF0YXQKICAgICAgIyBzdGF0IC0gZ2V0IGZpbGUgc3RhdHVzCiAgICAgIC0gc3RhdAogICAgICAjIHN0YXQ2NCAtIGdldCBmaWxlIHN0YXR1cwogICAgICAtIHN0YXQ2NAogICAgICAjIGZzdGF0IC0gZ2V0IGZpbGUgc3RhdHVzCiAgICAgIC0gZnN0YXQKICAgICAgIyBsc3RhdCAtIGdldCBmaWxlIHN0YXR1cwogICAgICAtIGxzdGF0CiAgICAgICMgZ2V0eGF0dHIgLSByZXRyaWV2ZSBhbiBleHRlbmRlZCBhdHRyaWJ1dGUgdmFsdWUKICAgICAgLSBnZXR4YXR0cgogICAgICAjIGxnZXR4YXR0ciAtIHJldHJpZXZlIGFuIGV4dGVuZGVkIGF0dHJpYnV0ZSB2YWx1ZQogICAgICAtIGxnZXR4YXR0cgogICAgICAjIGZnZXR4YXR0ciAtIHJldHJpZXZlIGFuIGV4dGVuZGVkIGF0dHJpYnV0ZSB2YWx1ZQogICAgICAtIGZnZXR4YXR0cgogICAgZWNzOiAqZWNzLWZpbGUKICAtIGFjdGlvbjogY2hlY2tlZC1maWxlc3lzdGVtLW1ldGFkYXRhLW9mCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGVzeXN0ZW0KICAgIHN5c2NhbGxzOgogICAgICAjIHN0YXRmcyAtIGdldCBmaWxlc3lzdGVtIHN0YXRpc3RpY3MKICAgICAgLSBzdGF0ZnMKICAgICAgIyBmc3RhdGZzIC0gZ2V0IGZpbGVzeXN0ZW0gc3RhdGlzdGljcwogICAgICAtIGZzdGF0ZnMKICAgIGVjczogKmVjcy1maWxlCiAgLSBhY3Rpb246IHN5bWxpbmtlZAogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBzeW1saW5rIC0gbWFrZSBhIG5ldyBuYW1lIGZvciBhIGZpbGUKICAgICAgLSBzeW1saW5rCiAgICAgICMgc3ltbGlua2F0IC0gbWFrZSBhIG5ldyBuYW1lIGZvciBhIGZpbGUKICAgICAgLSBzeW1saW5rYXQKICAgIGVjczoKICAgICAgPDw6ICplY3MtZmlsZQogICAgICAjICJjcmVhdGlvbiIgc2luY2Ugd2UncmUgY3JlYXRpbmcgYSBuZXcgZmlsZSBzeXN0ZW0KICAgICAgIyBlbnRyeSBmb3IgdGhlIHN5bWxpbmsKICAgICAgdHlwZTogY3JlYXRpb24KICAtIGFjdGlvbjogdW5tb3VudGVkCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGVzeXN0ZW0KICAgIHN5c2NhbGxzOgogICAgICAjIHVtb3VudCAtIHVubW91bnQgZmlsZXN5c3RlbQogICAgICAtIHVtb3VudAogICAgICAjIHVtb3VudDIgLSB1bm1vdW50IGZpbGVzeXN0ZW0KICAgICAgLSB1bW91bnQyCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgIyAiZGVsZXRpb24iIHRvIG1pcnJvciB0aGUgImNyZWF0aW9uIiBvZiB0aGUgbW91bnQKICAgICAgdHlwZTogZGVsZXRpb24KICAtIGFjdGlvbjogZGVsZXRlZAogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBybWRpciAtIGRlbGV0ZSBhIGRpcmVjdG9yeQogICAgICAtIHJtZGlyCiAgICAgICMgdW5saW5rIC0gZGVsZXRlIGEgbmFtZSBhbmQgcG9zc2libHkgdGhlIGZpbGUgaXQgcmVmZXJzIHRvCiAgICAgIC0gdW5saW5rCiAgICAgICMgdW5saW5rYXQgLSBkZWxldGUgYSBuYW1lIGFuZCBwb3NzaWJseSB0aGUgZmlsZSBpdCByZWZlcnMgdG8KICAgICAgLSB1bmxpbmthdAogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgIHR5cGU6IGRlbGV0aW9uCiAgLSBhY3Rpb246IGNoYW5nZWQtdGltZXN0YW1wLW9mCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIHV0aW1lIC0gY2hhbmdlIGZpbGUgbGFzdCBhY2Nlc3MgYW5kIG1vZGlmaWNhdGlvbiB0aW1lcwogICAgICAtIHV0aW1lCiAgICAgICMgdXRpbWVzIC0gY2hhbmdlIGZpbGUgbGFzdCBhY2Nlc3MgYW5kIG1vZGlmaWNhdGlvbiB0aW1lcwogICAgICAtIHV0aW1lcwogICAgICAjIGZ1dGltZXNhdCAtIGNoYW5nZSB0aW1lc3RhbXBzIG9mIGEgZmlsZSByZWxhdGl2ZSB0byBhIFwgZGlyZWN0b3J5IGZpbGUgZGVzY3JpcHRvcgogICAgICAtIGZ1dGltZXNhdAogICAgICAjIGZ1dGltZW5zIC0gY2hhbmdlIGZpbGUgdGltZXN0YW1wcyB3aXRoIG5hbm9zZWNvbmQgcHJlY2lzaW9uCiAgICAgIC0gZnV0aW1lbnMKICAgICAgIyB1dGltZW5zYXQgLSBjaGFuZ2UgZmlsZSB0aW1lc3RhbXBzIHdpdGggbmFub3NlY29uZCBwcmVjaXNpb24KICAgICAgLSB1dGltZW5zYXQKICAgIGVjczogKmVjcy1maWxlCiAgLSBhY3Rpb246IGV4ZWN1dGVkCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIGV4ZWN2ZSAtIGV4ZWN1dGUgcHJvZ3JhbQogICAgICAtIGV4ZWN2ZQogICAgICAjIGV4ZWN2ZWF0IC0gZXhlY3V0ZSBwcm9ncmFtIHJlbGF0aXZlIHRvIGEgZGlyZWN0b3J5IGZpbGUgZGVzY3JpcHRvcgogICAgICAtIGV4ZWN2ZWF0CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogc3RhcnQKICAtIGFjdGlvbjogbGlzdGVuLWZvci1jb25uZWN0aW9ucwogICAgb2JqZWN0OgogICAgICB3aGF0OiBzb2NrZXQKICAgIHN5c2NhbGxzOgogICAgICAjIGxpc3Rlbi0gbGlzdGVuIGZvciBjb25uZWN0aW9ucyBvbiBhIHNvY2tldAogICAgICAtIGxpc3RlbgogICAgZWNzOgogICAgICA8PDogKmVjcy1uZXR3b3JrCiAgICAgIHR5cGU6IHN0YXJ0CiAgLSBhY3Rpb246IGFjY2VwdGVkLWNvbm5lY3Rpb24tZnJvbQogICAgb2JqZWN0OgogICAgICB3aGF0OiBzb2NrZXQKICAgIHN5c2NhbGxzOgogICAgICAjIGFjY2VwdCAtIGFjY2VwdCBhIGNvbm5lY3Rpb24gb24gYSBzb2NrZXQKICAgICAgLSBhY2NlcHQKICAgICAgIyBhY2NlcHQ0IC0gYWNjZXB0IGEgY29ubmVjdGlvbiBvbiBhIHNvY2tldAogICAgICAtIGFjY2VwdDQKICAgIGVjczoKICAgICAgPDw6ICplY3MtbmV0d29yawogICAgICB0eXBlOgogICAgICAgIC0gY29ubmVjdGlvbgogICAgICAgIC0gc3RhcnQKICAtIGFjdGlvbjogYm91bmQtc29ja2V0CiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNvY2tldAogICAgc3lzY2FsbHM6CiAgICAgICMgYmluZCAtYmluZCBhIG5hbWUgdG8gYSBzb2NrZXQKICAgICAgLSBiaW5kCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLW5ldHdvcmsKICAgICAgdHlwZTogc3RhcnQKICAtIGFjdGlvbjogY29ubmVjdGVkLXRvCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNvY2tldAogICAgc3lzY2FsbHM6CiAgICAgIC0gY29ubmVjdAogICAgZWNzOgogICAgICA8PDogKmVjcy1uZXR3b3JrCiAgICAgIHR5cGU6CiAgICAgICAgLSBjb25uZWN0aW9uCiAgICAgICAgLSBzdGFydAogIC0gYWN0aW9uOiByZWNlaXZlZC1mcm9tCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNvY2tldAogICAgc3lzY2FsbHM6CiAgICAgICMgcmVjdiAtIHJlY2VpdmUgYSBtZXNzYWdlIGZyb20gYSBzb2NrZXQKICAgICAgLSByZWN2CiAgICAgICMgcmVjdmZyb20gLSByZWNlaXZlIGEgbWVzc2FnZSBmcm9tIGEgc29ja2V0CiAgICAgIC0gcmVjdmZyb20KICAgICAgIyByZWN2bXNnIC0gcmVjZWl2ZSBhIG1lc3NhZ2UgZnJvbSBhIHNvY2tldAogICAgICAtIHJlY3Ztc2cKICAgICAgIyByZWN2bW1zZyAtIHJlY2VpdmUgbXVsdGlwbGUgbWVzc2FnZXMgb24gYSBzb2NrZXQKICAgICAgLSByZWN2bW1zZwogICAgZWNzOgogICAgICA8PDogKmVjcy1uZXR3b3JrCiAgLSBhY3Rpb246IHNlbnQtdG8KICAgIG9iamVjdDoKICAgICAgd2hhdDogc29ja2V0CiAgICBzeXNjYWxsczoKICAgICAgIyBzZW5kIC0gc2VuZCBhIG1lc3NhZ2Ugb24gYSBzb2NrZXQKICAgICAgLSBzZW5kCiAgICAgICMgc2VuZHRvIC0gc2VuZCBhIG1lc3NhZ2Ugb24gYSBzb2NrZXQKICAgICAgLSBzZW5kdG8KICAgICAgIyBzZW5kbXNnIC0gc2VuZCBhIG1lc3NhZ2Ugb24gYSBzb2NrZXQKICAgICAgLSBzZW5kbXNnCiAgICAgICMgc2VuZG1tc2cgLSBzZW5kIG11bHRpcGxlIG1lc3NhZ2VzIG9uIGEgc29ja2V0CiAgICAgIC0gc2VuZG1tc2cKICAgIGVjczoKICAgICAgPDw6ICplY3MtbmV0d29yawogIC0gYWN0aW9uOiBraWxsZWQtcGlkCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHByb2Nlc3MKICAgIHN5c2NhbGxzOgogICAgICAjIGtpbGwgLSBzZW5kIHNpZ25hbCB0byBhIHByb2Nlc3MKICAgICAgLSBraWxsCiAgICAgICMgdGtpbGwgLSBzZW5kIGEgc2lnbmFsIHRvIGEgdGhyZWFkCiAgICAgIC0gdGtpbGwKICAgICAgIyB0Z2tpbGwgLSBzZW5kIGEgc2lnbmFsIHRvIGEgdGhyZWFkCiAgICAgIC0gdGdraWxsCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogZW5kCiAgLSBhY3Rpb246IGNoYW5nZWQtaWRlbnRpdHktb2YKICAgIG9iamVjdDoKICAgICAgd2hhdDogcHJvY2VzcwogICAgaG93OiBzeXNjYWxsCiAgICBzeXNjYWxsczoKICAgICAgIyBzZXR1aWQgLSBzZXQgdXNlciBpZGVudGl0eQogICAgICAtIHNldHVpZAogICAgICAjIHNldGV1aWQgLSBzZXQgZWZmZWN0aXZlIHVzZXIgb3IgZ3JvdXAgSUQKICAgICAgLSBzZXRldWlkCiAgICAgICMgc2V0ZnN1aWQgLSBzZXQgdXNlciBpZGVudGl0eSB1c2VkIGZvciBmaWxlc3lzdGVtIGNoZWNrcwogICAgICAtIHNldGZzdWlkCiAgICAgICMgc2V0cmV1aWQgLSBzZXQgcmVhbCBhbmQvb3IgZWZmZWN0aXZlIHVzZXIgb3IgZ3JvdXAgSUQKICAgICAgLSBzZXRyZXVpZAogICAgICAjIHNldGdpZCAtIHNldCBncm91cCBpZGVudGl0eQogICAgICAtIHNldGdpZAogICAgICAjIHNldGVnaWQgLSBzZXQgZWZmZWN0aXZlIHVzZXIgb3IgZ3JvdXAgSUQKICAgICAgLSBzZXRlZ2lkCiAgICAgICMgc2V0ZnNnaWQgLSBzZXQgZ3JvdXAgaWRlbnRpdHkgdXNlZCBmb3IgZmlsZXN5c3RlbSBjaGVja3MKICAgICAgLSBzZXRmc2dpZAogICAgICAjIHNldHJlZ2lkIC0gc2V0IHJlYWwgYW5kL29yIGVmZmVjdGl2ZSB1c2VyIG9yIGdyb3VwIElECiAgICAgIC0gc2V0cmVnaWQKICAgICAgIyBzZXRyZXN1aWQgLSBzZXQgcmVhbCwgZWZmZWN0aXZlIGFuZCBzYXZlZCB1c2VyIG9yIGdyb3VwIElECiAgICAgIC0gc2V0cmVzdWlkCiAgICAgICMgc2V0cmVzZ2lkIC0gc2V0IHJlYWwsIGVmZmVjdGl2ZSBhbmQgc2F2ZWQgdXNlciBvciBncm91cCBJRAogICAgICAtIHNldHJlc2dpZAogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IGNoYW5nZQogIC0gYWN0aW9uOiBjaGFuZ2VkLXN5c3RlbS10aW1lCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHN5c3RlbQogICAgc3lzY2FsbHM6CiAgICAgICMgc2V0dGltZW9mZGF5IC0gZ2V0IC8gc2V0IHRpbWUKICAgICAgLSBzZXR0aW1lb2ZkYXkKICAgICAgIyBjbG9ja19zZXR0aW1lIC0gY2xvY2sgYW5kIHRpbWUgZnVuY3Rpb25zCiAgICAgIC0gY2xvY2tfc2V0dGltZQogICAgICAjIHN0aW1lIC0gc2V0IHRpbWUKICAgICAgLSBzdGltZQogICAgICAjIGFkanRpbWV4IC0gdHVuZSBrZXJuZWwgY2xvY2sKICAgICAgLSBhZGp0aW1leAogICAgZWNzOgogICAgICA8PDogKmVjcy1ob3N0CiAgICAgIHR5cGU6IGNoYW5nZQogIC0gYWN0aW9uOiBtYWtlLWRldmljZQogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBta25vZCAtIGNyZWF0ZSBhIHNwZWNpYWwgb3Igb3JkaW5hcnkgZmlsZQogICAgICAtIG1rbm9kCiAgICAgICMgbWtub2RhdCAtIGNyZWF0ZSBhIHNwZWNpYWwgb3Igb3JkaW5hcnkgZmlsZQogICAgICAtIG1rbm9kYXQKICAgIGVjczoKICAgICAgPDw6ICplY3MtZmlsZQogICAgICB0eXBlOiBjcmVhdGlvbgogIC0gYWN0aW9uOiBjaGFuZ2VkLXN5c3RlbS1uYW1lCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHN5c3RlbQogICAgc3lzY2FsbHM6CiAgICAgICMgc2V0aG9zdG5hbWUgLSBnZXQvc2V0IGhvc3RuYW1lCiAgICAgIC0gc2V0aG9zdG5hbWUKICAgICAgIyBzZXRkb21haW5uYW1lIC0gZ2V0L3NldCBOSVMgZG9tYWluIG5hbWUKICAgICAgLSBzZXRkb21haW5uYW1lCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWhvc3QKICAgICAgdHlwZTogY2hhbmdlCiAgLSBhY3Rpb246IGFsbG9jYXRlZC1tZW1vcnkKICAgIG9iamVjdDoKICAgICAgd2hhdDogbWVtb3J5CiAgICBzeXNjYWxsczoKICAgICAgIyBtbWFwIC0gbWFwIG9yIHVubWFwIGZpbGVzIG9yIGRldmljZXMgaW50byBtZW1vcnkKICAgICAgLSBtbWFwCiAgICAgICMgbW1hcDIgLSBtYXAgZmlsZXMgb3IgZGV2aWNlcyBpbnRvIG1lbW9yeQogICAgICAtIG1tYXAyCiAgICAgICMgYnJrIC0gY2hhbmdlIGRhdGEgc2VnbWVudCBzaXplCiAgICAgIC0gYnJrCiAgICBlY3M6ICplY3MtcHJvY2VzcwogIC0gYWN0aW9uOiBhZGp1c3RlZC1zY2hlZHVsaW5nLXBvbGljeS1vZgogICAgb2JqZWN0OgogICAgICB3aGF0OiBwcm9jZXNzCiAgICBob3c6IHN5c2NhbGwKICAgIHN5c2NhbGxzOgogICAgICAjIHNjaGVkX3NldHBhcmFtIC0gc2V0IGFuZCBnZXQgc2NoZWR1bGluZyBwYXJhbWV0ZXJzCiAgICAgIC0gc2NoZWRfc2V0cGFyYW0KICAgICAgIyBzY2hlZF9zZXRzY2hlZHVsZXIgLSBzZXQgYW5kIGdldCBzY2hlZHVsaW5nIHBvbGljeS9wYXJhbWV0ZXJzCiAgICAgIC0gc2NoZWRfc2V0c2NoZWR1bGVyCiAgICAgICMgc2NoZWRfc2V0YXR0ciAtIHNldCBhbmQgZ2V0IHNjaGVkdWxpbmcgcG9saWN5IGFuZCBhdHRyaWJ1dGVzCiAgICAgIC0gc2NoZWRfc2V0YXR0cgogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IGNoYW5nZQoKICAjIEN1cnJlbnRseSB1bmhhbmRsZWQKICAjIHRoaXMgbGlzdCBjb21lcyBmcm9tIHBhcnNpbmcgbGludXggbWFuIHBhZ2VzIGF0IGh0dHBzOi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9kb2NzL21hbi1wYWdlcy9tYW4tcGFnZXMuZ2l0CgogICMgc2lnYWN0aW9uIC0gZXhhbWluZSBhbmQgY2hhbmdlIGEgc2lnbmFsIGFjdGlvbgogICMgcnRfc2lnYWN0aW9uIC0gZXhhbWluZSBhbmQgY2hhbmdlIGEgc2lnbmFsIGFjdGlvbgogICMgcHJlYWQgLSByZWFkIGZyb20gb3Igd3JpdGUgdG8gYSBmaWxlIGRlc2NyaXB0b3IgYXQgYSBnaXZlbiBvZmZzZXQKICAjIHB3cml0ZSAtIHJlYWQgZnJvbSBvciB3cml0ZSB0byBhIGZpbGUgZGVzY3JpcHRvciBhdCBhIGdpdmVuIG9mZnNldAogICMgczM5MF9ndWFyZGVkX3N0b3JhZ2UgLSBvcGVyYXRpb25zIHdpdGggei9BcmNoaXRlY3R1cmUgZ3VhcmRlZCBzdG9yYWdlIGZhY2lsaXR5CiAgIyBzY2hlZF9nZXRhdHRyIC0gc2V0IGFuZCBnZXQgc2NoZWR1bGluZyBwb2xpY3kgYW5kIGF0dHJpYnV0ZXMKICAjIGdldHJ1c2FnZSAtIGdldCByZXNvdXJjZSB1c2FnZQogICMgZmxvY2sgLSBhcHBseSBvciByZW1vdmUgYW4gYWR2aXNvcnkgbG9jayBvbiBhbiBvcGVuIGZpbGUKICAjIHBpZGZkX2dldGZkIC0gb2J0YWluIGEgZHVwbGljYXRlIG9mIGFub3RoZXIgcHJvY2VzcydzIGZpbGUgZGVzY3JpcHRvcgogICMgY2xvY2tfbmFub3NsZWVwIC0gaGlnaC1yZXNvbHV0aW9uIHNsZWVwIHdpdGggc3BlY2lmaWFibGUgY2xvY2sKICAjIGdldHBhZ2VzaXplIC0gZ2V0IG1lbW9yeSBwYWdlIHNpemUKICAjIHBpZGZkX29wZW4gLSBvYnRhaW4gYSBmaWxlIGRlc2NyaXB0b3IgdGhhdCByZWZlcnMgdG8gYSBwcm9jZXNzCiAgIyBzcGxpY2UgLSBzcGxpY2UgZGF0YSB0by9mcm9tIGEgcGlwZQogICMgZ2V0cmVzdWlkIC0gZ2V0IHJlYWwsIGVmZmVjdGl2ZSBhbmQgc2F2ZWQgdXNlci9ncm91cCBJRHMKICAjIGdldHJlc2dpZCAtIGdldCByZWFsLCBlZmZlY3RpdmUgYW5kIHNhdmVkIHVzZXIvZ3JvdXAgSURzCiAgIyByZW1hcF9maWxlX3BhZ2VzIC0gY3JlYXRlIGEgbm9ubGluZWFyIGZpbGUgbWFwcGluZwogICMgaW9fY2FuY2VsIC0gY2FuY2VsIGFuIG91dHN0YW5kaW5nIGFzeW5jaHJvbm91cyBJL08gb3BlcmF0aW9uCiAgIyBwcmN0bCAtIG9wZXJhdGlvbnMgb24gYSBwcm9jZXNzIG9yIHRocmVhZAogICMgY2xvY2tfZ2V0cmVzIC0gY2xvY2sgYW5kIHRpbWUgZnVuY3Rpb25zCiAgIyBjbG9ja19nZXR0aW1lIC0gY2xvY2sgYW5kIHRpbWUgZnVuY3Rpb25zCiAgIyBnZXRncm91cHMgLSBnZXQvc2V0IGxpc3Qgb2Ygc3VwcGxlbWVudGFyeSBncm91cCBJRHMKICAjIHNldGdyb3VwcyAtIGdldC9zZXQgbGlzdCBvZiBzdXBwbGVtZW50YXJ5IGdyb3VwIElEcwogICMgdm1zcGxpY2UgLSBzcGxpY2UgdXNlciBwYWdlcyB0by9mcm9tIGEgcGlwZQogICMgZXBvbGxfY3JlYXRlIC0gb3BlbiBhbiBlcG9sbCBmaWxlIGRlc2NyaXB0b3IKICAjIGVwb2xsX2NyZWF0ZTEgLSBvcGVuIGFuIGVwb2xsIGZpbGUgZGVzY3JpcHRvcgogICMgcG9zaXhfZmFkdmlzZSAtIHByZWRlY2xhcmUgYW4gYWNjZXNzIHBhdHRlcm4gZm9yIGZpbGUgZGF0YQogICMgc2lnd2FpdGluZm8gLSBzeW5jaHJvbm91c2x5IHdhaXQgZm9yIHF1ZXVlZCBzaWduYWxzCiAgIyBzaWd0aW1lZHdhaXQgLSBzeW5jaHJvbm91c2x5IHdhaXQgZm9yIHF1ZXVlZCBzaWduYWxzCiAgIyBydF9zaWd0aW1lZHdhaXQgLSBzeW5jaHJvbm91c2x5IHdhaXQgZm9yIHF1ZXVlZCBzaWduYWxzCiAgIyBzaWdyZXR1cm4gLSByZXR1cm4gZnJvbSBzaWduYWwgaGFuZGxlciBhbmQgY2xlYW51cCBzdGFjayBmcmFtZQogICMgcnRfc2lncmV0dXJuIC0gcmV0dXJuIGZyb20gc2lnbmFsIGhhbmRsZXIgYW5kIGNsZWFudXAgc3RhY2sgZnJhbWUKICAjIGdldHJhbmRvbSAtIG9idGFpbiBhIHNlcmllcyBvZiByYW5kb20gYnl0ZXMKICAjIGtleWN0bCAtIG1hbmlwdWxhdGUgdGhlIGtlcm5lbCdzIGtleSBtYW5hZ2VtZW50IGZhY2lsaXR5CiAgIyBzY2hlZF9nZXRzY2hlZHVsZXIgLSBzZXQgYW5kIGdldCBzY2hlZHVsaW5nIHBvbGljeS9wYXJhbWV0ZXJzCiAgIyBtYmluZCAtIHNldCBtZW1vcnkgcG9saWN5IGZvciBhIG1lbW9yeSByYW5nZQogICMgZ2V0cHJpb3JpdHkgLSBnZXQvc2V0IHByb2dyYW0gc2NoZWR1bGluZyBwcmlvcml0eQogICMgc2V0cHJpb3JpdHkgLSBnZXQvc2V0IHByb2dyYW0gc2NoZWR1bGluZyBwcmlvcml0eQogICMgaW5vdGlmeV9pbml0IC0gaW5pdGlhbGl6ZSBhbiBpbm90aWZ5IGluc3RhbmNlCiAgIyBpbm90aWZ5X2luaXQxIC0gaW5pdGlhbGl6ZSBhbiBpbm90aWZ5IGluc3RhbmNlCiAgIyBzZW1jdGwgLSBTeXN0ZW0gViBzZW1hcGhvcmUgY29udHJvbCBvcGVyYXRpb25zCiAgIyBnZXRob3N0bmFtZSAtIGdldC9zZXQgaG9zdG5hbWUKICAjIHB0cmFjZSAtIHByb2Nlc3MgdHJhY2UKICAjIHN5c2N0bCAtIHJlYWQvd3JpdGUgc3lzdGVtIHBhcmFtZXRlcnMKICAjIGdldHBlZXJuYW1lIC0gZ2V0IG5hbWUgb2YgY29ubmVjdGVkIHBlZXIgc29ja2V0CiAgIyBmb3JrIC0gY3JlYXRlIGEgY2hpbGQgcHJvY2VzcwogICMgcXVlcnlfbW9kdWxlIC0gcXVlcnkgdGhlIGtlcm5lbCBmb3IgdmFyaW91cyBiaXRzIHBlcnRhaW5pbmcgdG8gbW9kdWxlcwogICMgaW9jdGxfbGlzdCAtIGxpc3Qgb2YgaW9jdGwgY2FsbHMgaW4gTGludXgvaTM4NiBrZXJuZWwKICAjIG1zZ2dldCAtIGdldCBhIFN5c3RlbSBWIG1lc3NhZ2UgcXVldWUgaWRlbnRpZmllcgogICMgc3B1X2NyZWF0ZSAtIGNyZWF0ZSBhIG5ldyBzcHUgY29udGV4dAogICMgc3VicGFnZV9wcm90IC0gZGVmaW5lIGEgc3VicGFnZSBwcm90ZWN0aW9uIGZvciBhbiBhZGRyZXNzIHJhbmdlCiAgIyBxdW90YWN0bCAtIG1hbmlwdWxhdGUgZGlzayBxdW90YXMKICAjIG5mc3NlcnZjdGwgLSBzeXNjYWxsIGludGVyZmFjZSB0byBrZXJuZWwgbmZzIGRhZW1vbgogICMgb3BlbmF0MiAtIG9wZW4gYW5kIHBvc3NpYmx5IGNyZWF0ZSBhIGZpbGUgKGV4dGVuZGVkKQogICMgZ2V0cmxpbWl0IC0gZ2V0L3NldCByZXNvdXJjZSBsaW1pdHMKICAjIHNldHJsaW1pdCAtIGdldC9zZXQgcmVzb3VyY2UgbGltaXRzCiAgIyBwcmxpbWl0IC0gZ2V0L3NldCByZXNvdXJjZSBsaW1pdHMKICAjIHRlZSAtIGR1cGxpY2F0aW5nIHBpcGUgY29udGVudAogICMgc2htZ2V0IC0gYWxsb2NhdGVzIGEgU3lzdGVtIFYgc2hhcmVkIG1lbW9yeSBzZWdtZW50CiAgIyBjcmVhdGVfbW9kdWxlIC0gY3JlYXRlIGEgbG9hZGFibGUgbW9kdWxlIGVudHJ5CiAgIyBnZXR0aW1lb2ZkYXkgLSBnZXQgLyBzZXQgdGltZQogICMgdGltZXJfY3JlYXRlIC0gY3JlYXRlIGEgUE9TSVggcGVyLXByb2Nlc3MgdGltZXIKICAjIGZhbm90aWZ5X21hcmsgLSBhZGQsIHJlbW92ZSwgb3IgbW9kaWZ5IGFuIGZhbm90aWZ5IG1hcmsgb24gYSBmaWxlc3lzdGVtIG9iamVjdAogICMgcGlwZSAtIGNyZWF0ZSBwaXBlCiAgIyBwaXBlMiAtIGNyZWF0ZSBwaXBlCiAgIyBpbnRybyAtIGludHJvZHVjdGlvbiB0byBzeXN0ZW0gY2FsbHMKICAjIGxvb2t1cF9kY29va2llIC0gcmV0dXJuIGEgZGlyZWN0b3J5IGVudHJ5J3MgcGF0aAogICMgc3lzZnMgLSBnZXQgZmlsZXN5c3RlbSB0eXBlIGluZm9ybWF0aW9uCiAgIyBzMzkwX3J1bnRpbWVfaW5zdHIgLSBlbmFibGUvZGlzYWJsZSBzMzkwIENQVSBydW4tdGltZSBpbnN0cnVtZW50YXRpb24KICAjIHNldG5zIC0gcmVhc3NvY2lhdGUgdGhyZWFkIHdpdGggYSBuYW1lc3BhY2UKICAjIHNldF9tZW1wb2xpY3kgLSBzZXQgZGVmYXVsdCBOVU1BIG1lbW9yeSBwb2xpY3kgZm9yIGEgdGhyZWFkIGFuZCBpdHMgY2hpbGRyZW4KICAjIG5pY2UgLSBjaGFuZ2UgcHJvY2VzcyBwcmlvcml0eQogICMgaW9fc2V0dXAgLSBjcmVhdGUgYW4gYXN5bmNocm9ub3VzIEkvTyBjb250ZXh0CiAgIyBtaW5jb3JlIC0gZGV0ZXJtaW5lIHdoZXRoZXIgcGFnZXMgYXJlIHJlc2lkZW50IGluIG1lbW9yeQogICMgaW9jdGxfY29uc29sZSAtIGlvY3RscyBmb3IgY29uc29sZSB0ZXJtaW5hbCBhbmQgdmlydHVhbCBjb25zb2xlcwogICMgcG9sbCAtIHdhaXQgZm9yIHNvbWUgZXZlbnQgb24gYSBmaWxlIGRlc2NyaXB0b3IKICAjIHBwb2xsIC0gd2FpdCBmb3Igc29tZSBldmVudCBvbiBhIGZpbGUgZGVzY3JpcHRvcgogICMgY2FwZ2V0IC0gc2V0L2dldCBjYXBhYmlsaXRpZXMgb2YgdGhyZWFkKHMpCiAgIyBjYXBzZXQgLSBzZXQvZ2V0IGNhcGFiaWxpdGllcyBvZiB0aHJlYWQocykKICAjIGlvY3RsX3R0eSAtIGlvY3RscyBmb3IgdGVybWluYWxzIGFuZCBzZXJpYWwgbGluZXMKICAjIGlvcGwgLSBjaGFuZ2UgSS9PIHByaXZpbGVnZSBsZXZlbAogICMgaW9fZ2V0ZXZlbnRzIC0gcmVhZCBhc3luY2hyb25vdXMgSS9PIGV2ZW50cyBmcm9tIHRoZSBjb21wbGV0aW9uIHF1ZXVlCiAgIyBwcm9jZXNzX3ZtX3JlYWR2IC0gdHJhbnNmZXIgZGF0YSBiZXR3ZWVuIHByb2Nlc3MgYWRkcmVzcyBzcGFjZXMKICAjIHByb2Nlc3Nfdm1fd3JpdGV2IC0gdHJhbnNmZXIgZGF0YSBiZXR3ZWVuIHByb2Nlc3MgYWRkcmVzcyBzcGFjZXMKICAjIHBjaWNvbmZpZ19yZWFkIC0gcGNpIGRldmljZSBpbmZvcm1hdGlvbiBoYW5kbGluZwogICMgcGNpY29uZmlnX3dyaXRlIC0gcGNpIGRldmljZSBpbmZvcm1hdGlvbiBoYW5kbGluZwogICMgcGNpY29uZmlnX2lvYmFzZSAtIHBjaSBkZXZpY2UgaW5mb3JtYXRpb24gaGFuZGxpbmcKICAjIHNicmsgLSBjaGFuZ2UgZGF0YSBzZWdtZW50IHNpemUKICAjIHNldF90aWRfYWRkcmVzcyAtIHNldCBwb2ludGVyIHRvIHRocmVhZCBJRAogICMgcGtleV9hbGxvYyAtIGFsbG9jYXRlIG9yIGZyZWUgYSBwcm90ZWN0aW9uIGtleQogICMgcGtleV9mcmVlIC0gYWxsb2NhdGUgb3IgZnJlZSBhIHByb3RlY3Rpb24ga2V5CiAgIyBzZWxlY3QgLSBzeW5jaHJvbm91cyBJL08gbXVsdGlwbGV4aW5nCiAgIyBwc2VsZWN0IC0gc3luY2hyb25vdXMgSS9PIG11bHRpcGxleGluZwogICMga2V4ZWNfbG9hZCAtIGxvYWQgYSBuZXcga2VybmVsIGZvciBsYXRlciBleGVjdXRpb24KICAjIGtleGVjX2ZpbGVfbG9hZCAtIGxvYWQgYSBuZXcga2VybmVsIGZvciBsYXRlciBleGVjdXRpb24KICAjIHBlcnNvbmFsaXR5IC0gc2V0IHRoZSBwcm9jZXNzIGV4ZWN1dGlvbiBkb21haW4KICAjIGlvY3RsX2dldGZzbWFwIC0gcmV0cmlldmUgdGhlIHBoeXNpY2FsIGxheW91dCBvZiB0aGUgZmlsZXN5c3RlbQogICMgaW5vdGlmeV9ybV93YXRjaCAtIHJlbW92ZSBhbiBleGlzdGluZyB3YXRjaCBmcm9tIGFuIGlub3RpZnkgaW5zdGFuY2UKICAjIHBlcmZfZXZlbnRfb3BlbiAtIHNldCB1cCBwZXJmb3JtYW5jZSBtb25pdG9yaW5nCiAgIyB0aW1lcl9nZXRvdmVycnVuIC0gZ2V0IG92ZXJydW4gY291bnQgZm9yIGEgUE9TSVggcGVyLXByb2Nlc3MgdGltZXIKICAjIHdhaXQzIC0gd2FpdCBmb3IgcHJvY2VzcyB0byBjaGFuZ2Ugc3RhdGUsIEJTRCBzdHlsZQogICMgd2FpdDQgLSB3YWl0IGZvciBwcm9jZXNzIHRvIGNoYW5nZSBzdGF0ZSwgQlNEIHN0eWxlCiAgIyBsaW5rIC0gbWFrZSBhIG5ldyBuYW1lIGZvciBhIGZpbGUKICAjIGxpbmthdCAtIG1ha2UgYSBuZXcgbmFtZSBmb3IgYSBmaWxlCiAgIyBzY2hlZF9ycl9nZXRfaW50ZXJ2YWwgLSBnZXQgdGhlIFNDSEVEX1JSIGludGVydmFsIGZvciB0aGUgbmFtZWQgcHJvY2VzcwogICMgbXVubWFwIC0gbWFwIG9yIHVubWFwIGZpbGVzIG9yIGRldmljZXMgaW50byBtZW1vcnkKICAjIHNvY2tldGNhbGwgLSBzb2NrZXQgc3lzdGVtIGNhbGxzCiAgIyBtcmVtYXAgLSByZW1hcCBhIHZpcnR1YWwgbWVtb3J5IGFkZHJlc3MKICAjIHZmb3JrIC0gY3JlYXRlIGEgY2hpbGQgcHJvY2VzcyBhbmQgYmxvY2sgcGFyZW50CiAgIyBzZWNjb21wIC0gb3BlcmF0ZSBvbiBTZWN1cmUgQ29tcHV0aW5nIHN0YXRlIG9mIHRoZSBwcm9jZXNzCiAgIyByZXF1ZXN0X2tleSAtIHJlcXVlc3QgYSBrZXkgZnJvbSB0aGUga2VybmVsJ3Mga2V5IG1hbmFnZW1lbnQgZmFjaWxpdHkKICAjIHN5c2NhbGwgLSBpbmRpcmVjdCBzeXN0ZW0gY2FsbAogICMga2NtcCAtIGNvbXBhcmUgdHdvIHByb2Nlc3NlcyB0byBkZXRlcm1pbmUgaWYgdGhleSBzaGFyZSBhIGtlcm5lbCByZXNvdXJjZQogICMgcmVhZGRpciAtIHJlYWQgZGlyZWN0b3J5IGVudHJ5CiAgIyBpb3Blcm0gLSBzZXQgcG9ydCBpbnB1dC9vdXRwdXQgcGVybWlzc2lvbnMKICAjIHNwdV9ydW4gLSBleGVjdXRlIGFuIFNQVSBjb250ZXh0CiAgIyByZWJvb3QgLSByZWJvb3Qgb3IgZW5hYmxlL2Rpc2FibGUgQ3RybC1BbHQtRGVsCiAgIyByZWFkYWhlYWQgLSBpbml0aWF0ZSBmaWxlIHJlYWRhaGVhZCBpbnRvIHBhZ2UgY2FjaGUKICAjIHNjaGVkX2dldHBhcmFtIC0gc2V0IGFuZCBnZXQgc2NoZWR1bGluZyBwYXJhbWV0ZXJzCiAgIyBhY2N0IC0gc3dpdGNoIHByb2Nlc3MgYWNjb3VudGluZyBvbiBvciBvZmYKICAjIHNpZ3N1c3BlbmQgLSB3YWl0IGZvciBhIHNpZ25hbAogICMgcnRfc2lnc3VzcGVuZCAtIHdhaXQgZm9yIGEgc2lnbmFsCiAgIyBleGl0X2dyb3VwIC0gZXhpdCBhbGwgdGhyZWFkcyBpbiBhIHByb2Nlc3MKICAjIHNvY2tldCAtIGNyZWF0ZSBhbiBlbmRwb2ludCBmb3IgY29tbXVuaWNhdGlvbgogICMgaW9jdGxfdXNlcmZhdWx0ZmQgLSBjcmVhdGUgYSBmaWxlIGRlc2NyaXB0b3IgZm9yIGhhbmRsaW5nIHBhZ2UgZmF1bHRzIGluIHVzZXIgc3BhY2UKICAjIHNjaGVkX2dldF9wcmlvcml0eV9tYXggLSBnZXQgc3RhdGljIHByaW9yaXR5IHJhbmdlCiAgIyBzY2hlZF9nZXRfcHJpb3JpdHlfbWluICAtIGdldCBzdGF0aWMgcHJpb3JpdHkgcmFuZ2UKICAjIGdldGRlbnRzIC0gZ2V0IGRpcmVjdG9yeSBlbnRyaWVzCiAgIyBnZXRkZW50czY0IC0gZ2V0IGRpcmVjdG9yeSBlbnRyaWVzCiAgIyBzZWxlY3QgLSBzeW5jaHJvbm91cyBJL08gbXVsdGlwbGV4aW5nCiAgIyBwc2VsZWN0IC0gc3luY2hyb25vdXMgSS9PIG11bHRpcGxleGluZwogICMgYWxsb2NfaHVnZXBhZ2VzIC0gYWxsb2NhdGUgb3IgZnJlZSBodWdlIHBhZ2VzCiAgIyBmcmVlX2h1Z2VwYWdlcyAtIGFsbG9jYXRlIG9yIGZyZWUgaHVnZSBwYWdlcwogICMgZnN5bmMgLSBzeW5jaHJvbml6ZSBhIGZpbGUncyBpbi1jb3JlIHN0YXRlIHdpdGggc3RvcmFnZSBkZXZpY2UKICAjIGZkYXRhc3luYyAtIHN5bmNocm9uaXplIGEgZmlsZSdzIGluLWNvcmUgc3RhdGUgd2l0aCBzdG9yYWdlIGRldmljZQogICMgc3lzY2FsbHMgLSBMaW51eCBzeXN0ZW0gY2FsbHMKICAjIG1lbWZkX2NyZWF0ZSAtIGNyZWF0ZSBhbiBhbm9ueW1vdXMgZmlsZQogICMgbW9kaWZ5X2xkdCAtIGdldCBvciBzZXQgYSBwZXItcHJvY2VzcyBMRFQgZW50cnkKICAjIGdldF9rZXJuZWxfc3ltcyAtIHJldHJpZXZlIGV4cG9ydGVkIGtlcm5lbCBhbmQgbW9kdWxlIHN5bWJvbHMKICAjIGxzZWVrIC0gcmVwb3NpdGlvbiByZWFkL3dyaXRlIGZpbGUgb2Zmc2V0CiAgIyBzaG1hdCAtIFN5c3RlbSBWIHNoYXJlZCBtZW1vcnkgb3BlcmF0aW9ucwogICMgc2htZHQgLSBTeXN0ZW0gViBzaGFyZWQgbWVtb3J5IG9wZXJhdGlvbnMKICAjIHRpbWVyX2RlbGV0ZSAtIGRlbGV0ZSBhIFBPU0lYIHBlci1wcm9jZXNzIHRpbWVyCiAgIyBwZXJmbW9uY3RsIC0gaW50ZXJmYWNlIHRvIElBLTY0IHBlcmZvcm1hbmNlIG1vbml0b3JpbmcgdW5pdAogICMgbW92ZV9wYWdlcyAtIG1vdmUgaW5kaXZpZHVhbCBwYWdlcyBvZiBhIHByb2Nlc3MgdG8gYW5vdGhlciBub2RlCiAgIyBjaGRpciAtIGNoYW5nZSB3b3JraW5nIGRpcmVjdG9yeQogICMgZmNoZGlyIC0gY2hhbmdlIHdvcmtpbmcgZGlyZWN0b3J5CiAgIyB0aW1lIC0gZ2V0IHRpbWUgaW4gc2Vjb25kcwogICMgX2V4aXQgLSB0ZXJtaW5hdGUgdGhlIGNhbGxpbmcgcHJvY2VzcwogICMgX0V4aXQgLSB0ZXJtaW5hdGUgdGhlIGNhbGxpbmcgcHJvY2VzcwogICMgczM5MF9zdGh5aSAtIGVtdWxhdGUgU1RIWUkgaW5zdHJ1Y3Rpb24KICAjIGlvX3N1Ym1pdCAtIHN1Ym1pdCBhc3luY2hyb25vdXMgSS9PIGJsb2NrcyBmb3IgcHJvY2Vzc2luZwogICMgbWxvY2sgLSBsb2NrIGFuZCB1bmxvY2sgbWVtb3J5CiAgIyBtbG9jazIgLSBsb2NrIGFuZCB1bmxvY2sgbWVtb3J5CiAgIyBtdW5sb2NrIC0gbG9jayBhbmQgdW5sb2NrIG1lbW9yeQogICMgbWxvY2thbGwgLSBsb2NrIGFuZCB1bmxvY2sgbWVtb3J5CiAgIyBtdW5sb2NrYWxsIC0gbG9jayBhbmQgdW5sb2NrIG1lbW9yeQogICMgdW1hc2sgLSBzZXQgZmlsZSBtb2RlIGNyZWF0aW9uIG1hc2sKICAjIGFyY2hfcHJjdGwgLSBzZXQgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHRocmVhZCBzdGF0ZQogICMgdXNlbGliIC0gbG9hZCBzaGFyZWQgbGlicmFyeQogICMgc2VuZGZpbGUgLSB0cmFuc2ZlciBkYXRhIGJldHdlZW4gZmlsZSBkZXNjcmlwdG9ycwogICMgc2htY3RsIC0gU3lzdGVtIFYgc2hhcmVkIG1lbW9yeSBjb250cm9sCiAgIyBlcG9sbF93YWl0IC0gd2FpdCBmb3IgYW4gSS9PIGV2ZW50IG9uIGFuIGVwb2xsIGZpbGUgZGVzY3JpcHRvcgogICMgZXBvbGxfcHdhaXQgLSB3YWl0IGZvciBhbiBJL08gZXZlbnQgb24gYW4gZXBvbGwgZmlsZSBkZXNjcmlwdG9yCiAgIyBzaWdhbHRzdGFjayAtIHNldCBhbmQvb3IgZ2V0IHNpZ25hbCBzdGFjayBjb250ZXh0CiAgIyBpb2N0bCAtIGNvbnRyb2wgZGV2aWNlCiAgIyBzaWduYWxmZCAtIGNyZWF0ZSBhIGZpbGUgZGVzY3JpcHRvciBmb3IgYWNjZXB0aW5nIHNpZ25hbHMKICAjIHVuc2hhcmUgLSBkaXNhc3NvY2lhdGUgcGFydHMgb2YgdGhlIHByb2Nlc3MgZXhlY3V0aW9uIGNvbnRleHQKICAjIGNocm9vdCAtIGNoYW5nZSByb290IGRpcmVjdG9yeQogICMgbWFkdmlzZSAtIGdpdmUgYWR2aWNlIGFib3V0IHVzZSBvZiBtZW1vcnkKICAjIGdldHRpZCAtIGdldCB0aHJlYWQgaWRlbnRpZmljYXRpb24KICAjIGdldHNvY2tuYW1lIC0gZ2V0IHNvY2tldCBuYW1lCiAgIyBpb19kZXN0cm95IC0gZGVzdHJveSBhbiBhc3luY2hyb25vdXMgSS9PIGNvbnRleHQKICAjIHNldHVwIC0gc2V0dXAgZGV2aWNlcyBhbmQgZmlsZXN5c3RlbXMsIG1vdW50IHJvb3QgZmlsZXN5c3RlbQogICMgbnRwX2FkanRpbWUgLSB0dW5lIGtlcm5lbCBjbG9jawogICMgc2VtZ2V0IC0gZ2V0IGEgU3lzdGVtIFYgc2VtYXBob3JlIHNldCBpZGVudGlmaWVyCiAgIyBnZXR1aWQgLSBnZXQgdXNlciBpZGVudGl0eQogICMgZ2V0ZXVpZCAtIGdldCB1c2VyIGlkZW50aXR5CiAgIyBfc3lzY2FsbCAtIGludm9raW5nIGEgc3lzdGVtIGNhbGwgd2l0aG91dCBsaWJyYXJ5IHN1cHBvcnQgKE9CU09MRVRFKQogICMgc2NoZWRfc2V0YWZmaW5pdHkgLSBcIHNldCBhbmQgZ2V0IGEgdGhyZWFkJ3MgQ1BVIGFmZmluaXR5IG1hc2sKICAjIHNjaGVkX2dldGFmZmluaXR5IC0gXCBzZXQgYW5kIGdldCBhIHRocmVhZCdzIENQVSBhZmZpbml0eSBtYXNrCiAgIyBjYWNoZWZsdXNoIC0gZmx1c2ggY29udGVudHMgb2YgaW5zdHJ1Y3Rpb24gYW5kL29yIGRhdGEgY2FjaGUKICAjIHBpdm90X3Jvb3QgLSBjaGFuZ2UgdGhlIHJvb3QgbW91bnQKICAjIG1zZ2N0bCAtIFN5c3RlbSBWIG1lc3NhZ2UgY29udHJvbCBvcGVyYXRpb25zCiAgIyBpb2N0bF9mYXQgLSBtYW5pcHVsYXRpbmcgdGhlIEZBVCBmaWxlc3lzdGVtCiAgIyBzZXRwZ2lkIC0gc2V0L2dldCBwcm9jZXNzIGdyb3VwCiAgIyBnZXRwZ2lkIC0gc2V0L2dldCBwcm9jZXNzIGdyb3VwCiAgIyBzZXRwZ3JwIC0gc2V0L2dldCBwcm9jZXNzIGdyb3VwCiAgIyBnZXRwZ3JwIC0gc2V0L2dldCBwcm9jZXNzIGdyb3VwCiAgIyBzb2NrZXRwYWlyIC0gY3JlYXRlIGEgcGFpciBvZiBjb25uZWN0ZWQgc29ja2V0cwogICMgYmRmbHVzaCAtIHN0YXJ0LCBmbHVzaCwgb3IgdHVuZSBidWZmZXItZGlydHktZmx1c2ggZGFlbW9uCiAgIyBhbGFybSAtIHNldCBhbiBhbGFybSBjbG9jayBmb3IgZGVsaXZlcnkgb2YgYSBzaWduYWwKICAjIHRpbWVyX3NldHRpbWUgLSBhcm0vZGlzYXJtIGFuZCBmZXRjaCBzdGF0ZSBvZiBQT1NJWCBwZXItcHJvY2VzcyB0aW1lcgogICMgdGltZXJfZ2V0dGltZSAtIGFybS9kaXNhcm0gYW5kIGZldGNoIHN0YXRlIG9mIFBPU0lYIHBlci1wcm9jZXNzIHRpbWVyCiAgIyBhZGRfa2V5IC0gYWRkIGEga2V5IHRvIHRoZSBrZXJuZWwncyBrZXkgbWFuYWdlbWVudCBmYWNpbGl0eQogICMgcnRfc2lncXVldWVpbmZvIC0gcXVldWUgYSBzaWduYWwgYW5kIGRhdGEKICAjIHJ0X3Rnc2lncXVldWVpbmZvIC0gcXVldWUgYSBzaWduYWwgYW5kIGRhdGEKICAjIHVzZXJmYXVsdGZkIC0gY3JlYXRlIGEgZmlsZSBkZXNjcmlwdG9yIGZvciBoYW5kbGluZyBwYWdlIGZhdWx0cyBpbiB1c2VyIHNwYWNlCiAgIyBzZW1vcCAtIFN5c3RlbSBWIHNlbWFwaG9yZSBvcGVyYXRpb25zCiAgIyBzZW10aW1lZG9wIC0gU3lzdGVtIFYgc2VtYXBob3JlIG9wZXJhdGlvbnMKICAjIGdldGdpZCAtIGdldCBncm91cCBpZGVudGl0eQogICMgZ2V0ZWdpZCAtIGdldCBncm91cCBpZGVudGl0eQogICMgZ2V0cGlkIC0gZ2V0IHByb2Nlc3MgaWRlbnRpZmljYXRpb24KICAjIGdldHBwaWQgLSBnZXQgcHJvY2VzcyBpZGVudGlmaWNhdGlvbgogICMgc2lncHJvY21hc2sgLSBleGFtaW5lIGFuZCBjaGFuZ2UgYmxvY2tlZCBzaWduYWxzCiAgIyBydF9zaWdwcm9jbWFzayAtIGV4YW1pbmUgYW5kIGNoYW5nZSBibG9ja2VkIHNpZ25hbHMKICAjIHVuYW1lIC0gZ2V0IG5hbWUgYW5kIGluZm9ybWF0aW9uIGFib3V0IGN1cnJlbnQga2VybmVsCiAgIyBzdGF0eCAtIGdldCBmaWxlIHN0YXR1cyAoZXh0ZW5kZWQpCiAgIyBpb2N0bF9maWNsb25lcmFuZ2UgLSBzaGFyZSBzb21lIHRoZSBkYXRhIG9mIG9uZSBmaWxlIHdpdGggYW5vdGhlciBmaWxlCiAgIyBpb2N0bF9maWNsb25lIC0gc2hhcmUgc29tZSB0aGUgZGF0YSBvZiBvbmUgZmlsZSB3aXRoIGFub3RoZXIgZmlsZQogICMgbXFfZ2V0c2V0YXR0ciAtIGdldC9zZXQgbWVzc2FnZSBxdWV1ZSBhdHRyaWJ1dGVzCiAgIyBpb3ByaW9fZ2V0IC0gZ2V0L3NldCBJL08gc2NoZWR1bGluZyBjbGFzcyBhbmQgcHJpb3JpdHkKICAjIGlvcHJpb19zZXQgLSBnZXQvc2V0IEkvTyBzY2hlZHVsaW5nIGNsYXNzIGFuZCBwcmlvcml0eQogICMgZXBvbGxfY3RsIC0gY29udHJvbCBpbnRlcmZhY2UgZm9yIGFuIGVwb2xsIGZpbGUgZGVzY3JpcHRvcgogICMgc3luYyAtIGNvbW1pdCBmaWxlc3lzdGVtIGNhY2hlcyB0byBkaXNrCiAgIyBzeW5jZnMgLSBjb21taXQgZmlsZXN5c3RlbSBjYWNoZXMgdG8gZGlzawogICMgc2V0c2lkIC0gY3JlYXRlcyBhIHNlc3Npb24gYW5kIHNldHMgdGhlIHByb2Nlc3MgZ3JvdXAgSUQKICAjIHNodXRkb3duIC0gc2h1dCBkb3duIHBhcnQgb2YgYSBmdWxsLWR1cGxleCBjb25uZWN0aW9uCiAgIyBnZXRzaWQgLSBnZXQgc2Vzc2lvbiBJRAogICMgZ2V0X3RocmVhZF9hcmVhIC0gbWFuaXB1bGF0ZSB0aHJlYWQtbG9jYWwgc3RvcmFnZSBpbmZvcm1hdGlvbgogICMgc2V0X3RocmVhZF9hcmVhIC0gbWFuaXB1bGF0ZSB0aHJlYWQtbG9jYWwgc3RvcmFnZSBpbmZvcm1hdGlvbgogICMgdGltZXJmZF9jcmVhdGUgLSB0aW1lcnMgdGhhdCBub3RpZnkgdmlhIGZpbGUgZGVzY3JpcHRvcnMKICAjIHRpbWVyZmRfc2V0dGltZSAtIHRpbWVycyB0aGF0IG5vdGlmeSB2aWEgZmlsZSBkZXNjcmlwdG9ycwogICMgdGltZXJmZF9nZXR0aW1lIC0gdGltZXJzIHRoYXQgbm90aWZ5IHZpYSBmaWxlIGRlc2NyaXB0b3JzCiAgIyBpb2N0bF9maWRlZHVwZXJhbmdlIC0gc2hhcmUgc29tZSB0aGUgZGF0YSBvZiBvbmUgZmlsZSB3aXRoIGFub3RoZXIgZmlsZQogICMgbmFtZV90b19oYW5kbGVfYXQgLSBvYnRhaW4gaGFuZGxlIGZvciBhIHBhdGhuYW1lIGFuZCBvcGVuIGZpbGUgdmlhIGEgaGFuZGxlCiAgIyBvcGVuX2J5X2hhbmRsZV9hdCAtIG9idGFpbiBoYW5kbGUgZm9yIGEgcGF0aG5hbWUgYW5kIG9wZW4gZmlsZSB2aWEgYSBoYW5kbGUKICAjIGZ1dGV4IC0gZmFzdCB1c2VyLXNwYWNlIGxvY2tpbmcKICAjIGlvY3RsX25zIC0gaW9jdGwoKSBvcGVyYXRpb25zIGZvciBMaW51eCBuYW1lc3BhY2VzCiAgIyBwaWRmZF9zZW5kX3NpZ25hbCAtIHNlbmQgYSBzaWduYWwgdG8gYSBwcm9jZXNzIHNwZWNpZmllZCBieSBhIGZpbGUgZGVzY3JpcHRvcgogICMgY2xvbmUgLSBjcmVhdGUgYSBjaGlsZCBwcm9jZXNzCiAgIyBfX2Nsb25lMiAtIGNyZWF0ZSBhIGNoaWxkIHByb2Nlc3MKICAjIGNsb25lMyAtIGNyZWF0ZSBhIGNoaWxkIHByb2Nlc3MKICAjIHRpbWVzIC0gZ2V0IHByb2Nlc3MgdGltZXMKICAjIHN5c2luZm8gLSByZXR1cm4gc3lzdGVtIGluZm9ybWF0aW9uCiAgIyBpcGMgLSBTeXN0ZW0gViBJUEMgc3lzdGVtIGNhbGxzCiAgIyBldmVudGZkIC0gY3JlYXRlIGEgZmlsZSBkZXNjcmlwdG9yIGZvciBldmVudCBub3RpZmljYXRpb24KICAjIHdhaXQgLSB3YWl0IGZvciBwcm9jZXNzIHRvIGNoYW5nZSBzdGF0ZQogICMgd2FpdHBpZCAtIHdhaXQgZm9yIHByb2Nlc3MgdG8gY2hhbmdlIHN0YXRlCiAgIyB3YWl0aWQgLSB3YWl0IGZvciBwcm9jZXNzIHRvIGNoYW5nZSBzdGF0ZQogICMgZ2V0ZG9tYWlubmFtZSAtIGdldC9zZXQgTklTIGRvbWFpbiBuYW1lCiAgIyBpZGxlIC0gbWFrZSBwcm9jZXNzIDAgaWRsZQogICMgaW5vdGlmeV9hZGRfd2F0Y2ggLSBhZGQgYSB3YXRjaCB0byBhbiBpbml0aWFsaXplZCBpbm90aWZ5IGluc3RhbmNlCiAgIyBnZXRfbWVtcG9saWN5IC0gcmV0cmlldmUgTlVNQSBtZW1vcnkgcG9saWN5IGZvciBhIHRocmVhZAogICMgYnBmIC0gcGVyZm9ybSBhIGNvbW1hbmQgb24gYW4gZXh0ZW5kZWQgQlBGIG1hcCBvciBwcm9ncmFtCiAgIyBnZXRzb2Nrb3B0IC0gZ2V0IGFuZCBzZXQgb3B0aW9ucyBvbiBzb2NrZXRzCiAgIyBzZXRzb2Nrb3B0IC0gZ2V0IGFuZCBzZXQgb3B0aW9ucyBvbiBzb2NrZXRzCiAgIyBnZXRpdGltZXIgLSBnZXQgb3Igc2V0IHZhbHVlIG9mIGFuIGludGVydmFsIHRpbWVyCiAgIyBzZXRpdGltZXIgLSBnZXQgb3Igc2V0IHZhbHVlIG9mIGFuIGludGVydmFsIHRpbWVyCiAgIyBtZW1iYXJyaWVyIC0gaXNzdWUgbWVtb3J5IGJhcnJpZXJzIG9uIGEgc2V0IG9mIHRocmVhZHMKICAjIG1wcm90ZWN0IC0gc2V0IHByb3RlY3Rpb24gb24gYSByZWdpb24gb2YgbWVtb3J5CiAgIyBwa2V5X21wcm90ZWN0IC0gc2V0IHByb3RlY3Rpb24gb24gYSByZWdpb24gb2YgbWVtb3J5CiAgIyBnZXRjcHUgLSBkZXRlcm1pbmUgQ1BVIGFuZCBOVU1BIG5vZGUgb24gd2hpY2ggdGhlIGNhbGxpbmcgdGhyZWFkIGlzIHJ1bm5pbmcKICAjIGlvY3RsX2ZzbGFiZWwgLSBnZXQgb3Igc2V0IGEgZmlsZXN5c3RlbSBsYWJlbAogICMgbGlzdHhhdHRyIC0gbGlzdCBleHRlbmRlZCBhdHRyaWJ1dGUgbmFtZXMKICAjIGxsaXN0eGF0dHIgLSBsaXN0IGV4dGVuZGVkIGF0dHJpYnV0ZSBuYW1lcwogICMgZmxpc3R4YXR0ciAtIGxpc3QgZXh0ZW5kZWQgYXR0cmlidXRlIG5hbWVzCiAgIyBfbGxzZWVrIC0gcmVwb3NpdGlvbiByZWFkL3dyaXRlIGZpbGUgb2Zmc2V0CiAgIyBmY250bCAtIG1hbmlwdWxhdGUgZmlsZSBkZXNjcmlwdG9yCiAgIyB1c3RhdCAtIGdldCBmaWxlc3lzdGVtIHN0YXRpc3RpY3MKICAjIHNpZ25hbCAtIEFOU0kgQyBzaWduYWwgaGFuZGxpbmcKICAjIG5hbm9zbGVlcCAtIGhpZ2gtcmVzb2x1dGlvbiBzbGVlcAogICMgY29ubmVjdCAtIGluaXRpYXRlIGEgY29ubmVjdGlvbiBvbiBhIHNvY2tldAogICMgdm04Nm9sZCAtIGVudGVyIHZpcnR1YWwgODA4NiBtb2RlCiAgIyB2bTg2IC0gZW50ZXIgdmlydHVhbCA4MDg2IG1vZGUKICAjIGZhbm90aWZ5X2luaXQgLSBjcmVhdGUgYW5kIGluaXRpYWxpemUgZmFub3RpZnkgZ3JvdXAKICAjIG1pZ3JhdGVfcGFnZXMgLSBtb3ZlIGFsbCBwYWdlcyBpbiBhIHByb2Nlc3MgdG8gYW5vdGhlciBzZXQgb2Ygbm9kZXMKICAjIHJlc3RhcnRfc3lzY2FsbCAtIHJlc3RhcnQgYSBzeXN0ZW0gY2FsbCBhZnRlciBpbnRlcnJ1cHRpb24gYnkgYSBzdG9wIHNpZ25hbAogICMgY2xvc2UgLSBjbG9zZSBhIGZpbGUgZGVzY3JpcHRvcgogICMgbXNncmN2IC0gU3lzdGVtIFYgbWVzc2FnZSBxdWV1ZSBvcGVyYXRpb25zCiAgIyBtc2dzbmQgLSBTeXN0ZW0gViBtZXNzYWdlIHF1ZXVlIG9wZXJhdGlvbnMKICAjIHJlYWR2IC0gcmVhZCBvciB3cml0ZSBkYXRhIGludG8gbXVsdGlwbGUgYnVmZmVycwogICMgd3JpdGV2IC0gcmVhZCBvciB3cml0ZSBkYXRhIGludG8gbXVsdGlwbGUgYnVmZmVycwogICMgcHJlYWR2IC0gcmVhZCBvciB3cml0ZSBkYXRhIGludG8gbXVsdGlwbGUgYnVmZmVycwogICMgcHdyaXRldiAtIHJlYWQgb3Igd3JpdGUgZGF0YSBpbnRvIG11bHRpcGxlIGJ1ZmZlcnMKICAjIHByZWFkdjIgLSByZWFkIG9yIHdyaXRlIGRhdGEgaW50byBtdWx0aXBsZSBidWZmZXJzCiAgIyBwd3JpdGV2MiAtIHJlYWQgb3Igd3JpdGUgZGF0YSBpbnRvIG11bHRpcGxlIGJ1ZmZlcnMKICAjIHN5c2xvZyAtIHJlYWQgYW5kL29yIGNsZWFyIGtlcm5lbCBtZXNzYWdlIHJpbmcgYnVmZmVyOyBzZXQgY29uc29sZV9sb2dsZXZlbAogICMga2xvZ2N0bCAtIHJlYWQgYW5kL29yIGNsZWFyIGtlcm5lbCBtZXNzYWdlIHJpbmcgYnVmZmVyOyBzZXQgY29uc29sZV9sb2dsZXZlbAogICMgc2NoZWRfeWllbGQgLSB5aWVsZCB0aGUgcHJvY2Vzc29yCiAgIyB2aGFuZ3VwIC0gdmlydHVhbGx5IGhhbmd1cCB0aGUgY3VycmVudCB0ZXJtaW5hbAogICMgaW9jdGxfaWZsYWdzIC0gaW9jdGwoKSBvcGVyYXRpb25zIGZvciBpbm9kZSBmbGFncwogICMgc2dldG1hc2sgLSBtYW5pcHVsYXRpb24gb2Ygc2lnbmFsIG1hc2sgKG9ic29sZXRlKQogICMgc3NldG1hc2sgLSBtYW5pcHVsYXRpb24gb2Ygc2lnbmFsIG1hc2sgKG9ic29sZXRlKQogICMgc3luY19maWxlX3JhbmdlIC0gc3luYyBhIGZpbGUgc2VnbWVudCB3aXRoIGRpc2sKICAjIGNvcHlfZmlsZV9yYW5nZSAtIENvcHkgYSByYW5nZSBvZiBkYXRhIGZyb20gb25lIGZpbGUgdG8gYW5vdGhlcgogICMgc2lncGVuZGluZyAtIGV4YW1pbmUgcGVuZGluZyBzaWduYWxzCiAgIyBydF9zaWdwZW5kaW5nIC0gZXhhbWluZSBwZW5kaW5nIHNpZ25hbHMKICAjIGdldHVud2luZCAtIGNvcHkgdGhlIHVud2luZCBkYXRhIHRvIGNhbGxlcidzIGJ1ZmZlcgogICMgbXN5bmMgLSBzeW5jaHJvbml6ZSBhIGZpbGUgd2l0aCBhIG1lbW9yeSBtYXAKICAjIGdldF9yb2J1c3RfbGlzdCAtIGdldC9zZXQgbGlzdCBvZiByb2J1c3QgZnV0ZXhlcwogICMgc2V0X3JvYnVzdF9saXN0IC0gZ2V0L3NldCBsaXN0IG9mIHJvYnVzdCBmdXRleGVzCiAgIyBkdXAgLSBkdXBsaWNhdGUgYSBmaWxlIGRlc2NyaXB0b3IKICAjIGR1cDIgLSBkdXBsaWNhdGUgYSBmaWxlIGRlc2NyaXB0b3IKICAjIGR1cDMgLSBkdXBsaWNhdGUgYSBmaWxlIGRlc2NyaXB0b3IKICAjIHMzOTBfcGNpX21taW9fd3JpdGUgLSB0cmFuc2ZlciBkYXRhIHRvL2Zyb20gUENJIE1NSU8gbWVtb3J5IHBhZ2UKICAjIHMzOTBfcGNpX21taW9fcmVhZCAtIHRyYW5zZmVyIGRhdGEgdG8vZnJvbSBQQ0kgTU1JTyBtZW1vcnkgcGFnZQogICMgcGF1c2UgLSB3YWl0IGZvciBzaWduYWwKICAjIHN3YXBvbiAtIHN0YXJ0L3N0b3Agc3dhcHBpbmcgdG8gZmlsZS9kZXZpY2UKICAjIHN3YXBvZmYgLSBzdGFydC9zdG9wIHN3YXBwaW5nIHRvIGZpbGUvZGV2aWNlCgogICMgUmVjb3JkIHR5cGUgbm9ybWFsaXphdGlvbnMKICAjIFVzZWZ1bCBsaW5rczoKICAjIGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS90b3J2YWxkcy9saW51eC92NC4xNi9pbmNsdWRlL3VhcGkvbGludXgvYXVkaXQuaAogICMgaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2xpbnV4LWF1ZGl0L2F1ZGl0LXVzZXJzcGFjZS80ZDkzMzMwMWIxODM1Y2FmYTA4YjllOWVmNzA1YzhmYjZjOTZjYjYyL2xpYi9saWJhdWRpdC5oCiAgIyBodHRwczovL3d3dy5lbGFzdGljLmNvL2d1aWRlL2VuL2Vjcy9jdXJyZW50L2Vjcy1hbGxvd2VkLXZhbHVlcy1ldmVudC1jYXRlZ29yeS5odG1sCgogICMgSUFNIHJlbGF0ZWQgZXZlbnRzCgogICMgQVVESVRfQUNDVF9MT0NLIC0gVXNlcidzIGFjY291bnQgbG9ja2VkIGJ5IGFkbWluCiAgLSByZWNvcmRfdHlwZXM6IEFDQ1RfTE9DSwogICAgYWN0aW9uOiBsb2NrZWQtYWNjb3VudAogICAgZWNzOgogICAgICA8PDogKmVjcy1pYW0KICAgICAgdHlwZToKICAgICAgICAtIHVzZXIKICAgICAgICAtIGluZm8KICAjIEFVRElUX0FDQ1RfVU5MT0NLIC0gVXNlcidzIGFjY291bnQgdW5sb2NrZWQgYnkgYWRtaW4KICAtIHJlY29yZF90eXBlczogQUNDVF9VTkxPQ0sKICAgIGFjdGlvbjogdW5sb2NrZWQtYWNjb3VudAogICAgZWNzOgogICAgICA8PDogKmVjcy1pYW0KICAgICAgdHlwZToKICAgICAgICAtIHVzZXIKICAgICAgICAtIGluZm8KICAjIEFVRElUX0FERF9HUk9VUCAtIEdyb3VwIGFjY291bnQgYWRkZWQKICAtIHJlY29yZF90eXBlczogQUREX0dST1VQCiAgICBhY3Rpb246IGFkZGVkLWdyb3VwLWFjY291bnQtdG8KICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogW2lkLCBhY2N0XQogICAgICB3aGF0OiBhY2NvdW50CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWlhbQogICAgICA8PDogKmVjcy1ncm91cC1tb2RpZmljYXRpb24tbWFwcGluZ3MKICAgICAgdHlwZToKICAgICAgICAtIGdyb3VwCiAgICAgICAgLSBjcmVhdGlvbgoKICAjIEFVRElUX0FERF9VU0VSIC0gVXNlciBhY2NvdW50IGFkZGVkCiAgLSByZWNvcmRfdHlwZXM6IEFERF9VU0VSCiAgICBhY3Rpb246IGFkZGVkLXVzZXItYWNjb3VudAogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBbaWQsIGFjY3RdCiAgICAgIHdoYXQ6IGFjY291bnQKICAgIGVjczoKICAgICAgPDw6ICplY3MtaWFtCiAgICAgIDw8OiAqZWNzLXVzZXItbW9kaWZpY2F0aW9uLW1hcHBpbmdzCiAgICAgIHR5cGU6CiAgICAgICAgLSB1c2VyCiAgICAgICAgLSBjcmVhdGlvbgogICMgQVVESVRfREVMX0dST1VQIC0gR3JvdXAgYWNjb3VudCBkZWxldGVkCiAgLSByZWNvcmRfdHlwZXM6IERFTF9HUk9VUAogICAgYWN0aW9uOiBkZWxldGVkLWdyb3VwLWFjY291bnQtZnJvbQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBbaWQsIGFjY3RdCiAgICAgIHdoYXQ6IGFjY291bnQKICAgIGVjczoKICAgICAgPDw6ICplY3MtaWFtCiAgICAgIDw8OiAqZWNzLWdyb3VwLW1vZGlmaWNhdGlvbi1tYXBwaW5ncwogICAgICB0eXBlOgogICAgICAgIC0gZ3JvdXAKICAgICAgICAtIGRlbGV0aW9uCiAgIyBBVURJVF9ERUxfVVNFUiAtIFVzZXIgYWNjb3VudCBkZWxldGVkCiAgLSByZWNvcmRfdHlwZXM6IERFTF9VU0VSCiAgICBhY3Rpb246IGRlbGV0ZWQtdXNlci1hY2NvdW50CiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IFtpZCwgYWNjdF0KICAgICAgd2hhdDogYWNjb3VudAogICAgZWNzOgogICAgICA8PDogKmVjcy1pYW0KICAgICAgPDw6ICplY3MtdXNlci1tb2RpZmljYXRpb24tbWFwcGluZ3MKICAgICAgdHlwZToKICAgICAgICAtIHVzZXIKICAgICAgICAtIGRlbGV0aW9uCiAgIyBBVURJVF9HUlBfTUdNVCAtIEdyb3VwIGFjY291bnQgYXR0ciB3YXMgbW9kaWZpZWQKICAtIHJlY29yZF90eXBlczogR1JQX01HTVQKICAgIGFjdGlvbjogbW9kaWZpZWQtZ3JvdXAtYWNjb3VudAogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBbaWQsIGFjY3RdCiAgICAgIHdoYXQ6IGFjY291bnQKICAgIGVjczoKICAgICAgPDw6ICplY3MtaWFtCiAgICAgIHR5cGU6CiAgICAgICAgLSBncm91cAogICAgICAgIC0gY2hhbmdlCiAgICAgIG1hcHBpbmdzOgogICAgICAgIC0gZnJvbTogYWN0b3IucHJpbWFyeQogICAgICAgICAgdG86IHVzZXIKICAgICAgICAtIGZyb206IGFjdG9yLnNlY29uZGFyeQogICAgICAgICAgdG86IGdyb3VwLnRhcmdldAogICAgICAgIC0gZnJvbTogdWlkLnVpZAogICAgICAgICAgdG86IHVzZXIuZWZmZWN0aXZlCiAgIyBBVURJVF9ST0xFX0FTU0lHTiAtIEFkbWluIGFzc2lnbmVkIHVzZXIgdG8gcm9sZQogIC0gcmVjb3JkX3R5cGVzOiBST0xFX0FTU0lHTgogICAgYWN0aW9uOiBhc3NpZ25lZC11c2VyLXJvbGUtdG8KICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogW2lkLCBhY2N0XQogICAgICB3aGF0OiBhY2NvdW50CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWlhbQogICAgICB0eXBlOgogICAgICAgIC0gdXNlcgogICAgICAgIC0gY2hhbmdlCiAgIyBBVURJVF9ST0xFX01PRElGWSAtIEFkbWluIG1vZGlmaWVkIGEgcm9sZQogIC0gcmVjb3JkX3R5cGVzOiBST0xFX01PRElGWQogICAgYWN0aW9uOiBtb2RpZmllZC1yb2xlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWlhbQogICAgICB0eXBlOgogICAgICAgIC0gY2hhbmdlCiAgIyBBVURJVF9ST0xFX1JFTU9WRSAtIEFkbWluIHJlbW92ZWQgdXNlciBmcm9tIHJvbGUKICAtIHJlY29yZF90eXBlczogUk9MRV9SRU1PVkUKICAgIGFjdGlvbjogcmVtb3ZlZC11c2VyLXJvbGUtZnJvbQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBbaWQsIGFjY3RdCiAgICAgIHdoYXQ6IGFjY291bnQKICAgIGVjczoKICAgICAgPDw6ICplY3MtaWFtCiAgICAgIHR5cGU6CiAgICAgICAgLSB1c2VyCiAgICAgICAgLSBjaGFuZ2UKICAjIEFVRElUX1VTRVJfTUdNVCAtIFVzZXIgYWNjdCBhdHRyaWJ1dGUgY2hhbmdlCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBVU0VSX01HTVQKICAgIGFjdGlvbjogbW9kaWZpZWQtdXNlci1hY2NvdW50CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWlhbQogICAgICB0eXBlOgogICAgICAgIC0gdXNlcgogICAgICAgIC0gY2hhbmdlCiAgICAgIG1hcHBpbmdzOgogICAgICAgIC0gZnJvbTogYWN0b3IucHJpbWFyeQogICAgICAgICAgdG86IHVzZXIKICAgICAgICAtIGZyb206IGFjdG9yLnNlY29uZGFyeQogICAgICAgICAgdG86IHVzZXIudGFyZ2V0CiAgICAgICAgLSBmcm9tOiB1aWQudWlkCiAgICAgICAgICB0bzogdXNlci5lZmZlY3RpdmUKICAjIEFVRElUX1VTRVJfQ0hBVVRIVE9LIC0gVXNlciBhY2N0IHBhc3N3b3JkIG9yIHBpbiBjaGFuZ2VkCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBVU0VSX0NIQVVUSFRPSwogICAgYWN0aW9uOiBjaGFuZ2VkLXBhc3N3b3JkCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWlhbQogICAgICB0eXBlOgogICAgICAgIC0gdXNlcgogICAgICAgIC0gY2hhbmdlCiAgICAgIG1hcHBpbmdzOgogICAgICAgIC0gZnJvbTogYWN0b3IucHJpbWFyeQogICAgICAgICAgdG86IHVzZXIKICAgICAgICAtIGZyb206IHVpZC51aWQKICAgICAgICAgIHRvOiB1c2VyLmVmZmVjdGl2ZQogICAgICAgIC0gZnJvbTogYWN0b3Iuc2Vjb25kYXJ5CiAgICAgICAgICB0bzogdXNlci50YXJnZXQKCiAgIyBBVURJVF9HUlBfQ0hBVVRIVE9LIC0gR3JvdXAgYWNjdCBwYXNzd29yZCBvciBwaW4gY2hhbmdlZAogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogR1JQX0NIQVVUSFRPSwogICAgYWN0aW9uOiBjaGFuZ2VkLWdyb3VwLXBhc3N3b3JkCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGFjY3QKICAgICAgd2hhdDogdXNlci1zZXNzaW9uCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWlhbQogICAgICB0eXBlOgogICAgICAgIC0gZ3JvdXAKICAgICAgICAtIGNoYW5nZQogICAgICBtYXBwaW5nczoKICAgICAgICAtIGZyb206IGFjdG9yLnByaW1hcnkKICAgICAgICAgIHRvOiB1c2VyCiAgICAgICAgLSBmcm9tOiB1aWQudWlkCiAgICAgICAgICB0bzogdXNlci5lZmZlY3RpdmUKICAgICAgICAtIGZyb206IGFjdG9yLnNlY29uZGFyeQogICAgICAgICAgdG86IGdyb3VwLnRhcmdldAoKICAjIEF1dGhlbnRpY2F0aW9uIHJlbGF0ZWQgZXZlbnRzCgogICMgQVVESVRfQ1JFRF9BQ1EgLSBVc2VyIGNyZWRlbnRpYWwgYWNxdWlyZWQKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IENSRURfQUNRCiAgICBhY3Rpb246IGFjcXVpcmVkLWNyZWRlbnRpYWxzCiAgICBlY3M6ICplY3MtYXV0aAogICMgQVVESVRfQ1JFRF9ESVNQIC0gVXNlciBjcmVkZW50aWFsIGRpc3Bvc2VkCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBDUkVEX0RJU1AKICAgIGFjdGlvbjogZGlzcG9zZWQtY3JlZGVudGlhbHMKICAgIGVjczogKmVjcy1hdXRoCiAgIyBBVURJVF9DUkVEX1JFRlIgLSBVc2VyIGNyZWRlbnRpYWwgcmVmcmVzaGVkCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBDUkVEX1JFRlIKICAgIGFjdGlvbjogcmVmcmVzaGVkLWNyZWRlbnRpYWxzCiAgICBlY3M6ICplY3MtYXV0aAogICMgQVVESVRfR1JQX0FVVEggLSBBdXRoZW50aWNhdGlvbiBmb3IgZ3JvdXAgcGFzc3dvcmQKICAtIHJlY29yZF90eXBlczogR1JQX0FVVEgKICAgIGFjdGlvbjogYXV0aGVudGljYXRlZC10by1ncm91cAogICAgZWNzOiAqZWNzLWF1dGgKICAjIEFVRElUX0xPR0lOIC0gRGVmaW5lIHRoZSBsb2dpbiBpZCBhbmQgaW5mb3JtYXRpb24KICAtIHJlY29yZF90eXBlczogTE9HSU4KICAgIGFjdGlvbjogY2hhbmdlZC1sb2dpbi1pZC10bwogICAgc3ViamVjdDoKICAgICAgcHJpbWFyeTogW29sZF9hdWlkLCBvbGQtYXVpZF0KICAgICAgc2Vjb25kYXJ5OiB1aWQKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogYXVpZAogICAgICB3aGF0OiB1c2VyLXNlc3Npb24KICAgIGVjczoKICAgICAgPDw6ICplY3MtYXV0aAogICAgICB0eXBlOiBzdGFydAogICMgQVVESVRfVVNFUl9BQ0NUIC0gVXNlciBzeXN0ZW0gYWNjZXNzIGF1dGhvcml6YXRpb24KICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IFVTRVJfQUNDVAogICAgYWN0aW9uOiB3YXMtYXV0aG9yaXplZAogICAgZWNzOiAqZWNzLWF1dGgKICAjIEFVRElUX1VTRVJfQVVUSCAtIFVzZXIgc3lzdGVtIGFjY2VzcyBhdXRoZW50aWNhdGlvbgogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogVVNFUl9BVVRICiAgICBhY3Rpb246IGF1dGhlbnRpY2F0ZWQKICAgIGVjczogKmVjcy1hdXRoCiAgIyBBVURJVF9VU0VSX0VORCAtIFVzZXIgc2Vzc2lvbiBlbmQKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IFVTRVJfRU5ECiAgICBhY3Rpb246IGVuZGVkLXNlc3Npb24KICAgIGVjczogKmVjcy1hdXRoCiAgIyBBVURJVF9VU0VSX0VSUiAtIFVzZXIgYWNjdCBzdGF0ZSBlcnJvcgogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogVVNFUl9FUlIKICAgIGFjdGlvbjogZXJyb3IKICAgIHNvdXJjZV9pcDogW2FkZHJdCiAgICBlY3M6ICplY3MtYXV0aAogICMgQVVESVRfVVNFUl9MT0dJTiAtIFVzZXIgaGFzIGxvZ2dlZCBpbgogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogVVNFUl9MT0dJTgogICAgYWN0aW9uOiBsb2dnZWQtaW4KICAgIHNvdXJjZV9pcDogW2FkZHJdCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWF1dGgKICAgICAgdHlwZTogc3RhcnQKICAjIEFVRElUX1VTRVJfTE9HT1VUIC0gVXNlciBoYXMgbG9nZ2VkIG91dAogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogVVNFUl9MT0dPVVQKICAgIGFjdGlvbjogbG9nZ2VkLW91dAogICAgZWNzOgogICAgICA8PDogKmVjcy1hdXRoCiAgICAgIHR5cGU6IGVuZAogICMgQVVESVRfVVNFUl9ST0xFX0NIQU5HRSAtIFVzZXIgY2hhbmdlZCB0byBhIG5ldyByb2xlCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBVU0VSX1JPTEVfQ0hBTkdFCiAgICBhY3Rpb246IGNoYW5nZWQtcm9sZS10bwogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBzZWxlY3RlZC1jb250ZXh0CiAgICAgIHdoYXQ6IHVzZXItc2Vzc2lvbgogICMgQVVESVRfVVNFUl9TVEFSVCAtIFVzZXIgc2Vzc2lvbiBzdGFydAogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogVVNFUl9TVEFSVAogICAgYWN0aW9uOiBzdGFydGVkLXNlc3Npb24KICAgIHNvdXJjZV9pcDogW2FkZHJdCiAgICBlY3M6ICplY3MtYXV0aAoKICAjIEhvc3QgdmlydHVhbGl6YXRpb24gZXZlbnRzCgogICMgQVVESVRfVklSVF9DT05UUk9MIC0gU3RhcnQsIFBhdXNlLCBTdG9wIFZNCiAgLSByZWNvcmRfdHlwZXM6IFZJUlRfQ09OVFJPTAogICAgYWN0aW9uOiBpc3N1ZWQtdm0tY29udHJvbAogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBvcAogICAgICBzZWNvbmRhcnk6IHZtCiAgICAgIHdoYXQ6IHZpcnR1YWwtbWFjaGluZQogICAgZWNzOiAqZWNzLWhvc3QKICAjIEFVRElUX1ZJUlRfQ1JFQVRFIC0gQ3JlYXRpb24gb2YgZ3Vlc3QgaW1hZ2UKICAtIHJlY29yZF90eXBlczogVklSVF9DUkVBVEUKICAgIGFjdGlvbjogY3JlYXRlZC12bS1pbWFnZQogICAgZWNzOiAqZWNzLWhvc3QKICAjIEFVRElUX1ZJUlRfREVTVFJPWSAtIERlc3RydWN0aW9uIG9mIGd1ZXN0IGltYWdlCiAgLSByZWNvcmRfdHlwZXM6IFZJUlRfREVTVFJPWQogICAgYWN0aW9uOiBkZWxldGVkLXZtLWltYWdlCiAgICBlY3M6ICplY3MtaG9zdAogICMgQVVESVRfVklSVF9JTlRFR1JJVFlfQ0hFQ0sgLSBHdWVzdCBpbnRlZ3JpdHkgcmVzdWx0cwogIC0gcmVjb3JkX3R5cGVzOiBWSVJUX0lOVEVHUklUWV9DSEVDSwogICAgYWN0aW9uOiBjaGVja2VkLWludGVncml0eS1vZgogICAgZWNzOiAqZWNzLWhvc3QKICAjIEFVRElUX1ZJUlRfTUFDSElORV9JRCAtIEJpbmRpbmcgb2YgbGFiZWwgdG8gVk0KICAtIHJlY29yZF90eXBlczogVklSVF9NQUNISU5FX0lECiAgICBhY3Rpb246IGFzc2lnbmVkLXZtLWlkCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IHZtCiAgICAgIHdoYXQ6IHZpcnR1YWwtbWFjaGluZQogICAgZWNzOiAqZWNzLWhvc3QKICAjIEFVRElUX1ZJUlRfTUlHUkFURV9JTiAtIEluYm91bmQgZ3Vlc3QgbWlncmF0aW9uIGluZm8KICAtIHJlY29yZF90eXBlczogVklSVF9NSUdSQVRFX0lOCiAgICBhY3Rpb246IG1pZ3JhdGVkLXZtLWZyb20KICAgIGVjczogKmVjcy1ob3N0CiAgIyBBVURJVF9WSVJUX01JR1JBVEVfT1VUIC0gT3V0Ym91bmQgZ3Vlc3QgbWlncmF0aW9uIGluZm8KICAtIHJlY29yZF90eXBlczogVklSVF9NSUdSQVRFX09VVAogICAgYWN0aW9uOiBtaWdyYXRlZC12bS10bwogICAgZWNzOiAqZWNzLWhvc3QKICAjIEFVRElUX1ZJUlRfUkVTT1VSQ0UgLSBSZXNvdXJjZSBhc3NpZ25tZW50CiAgLSByZWNvcmRfdHlwZXM6IFZJUlRfUkVTT1VSQ0UKICAgIGFjdGlvbjogYXNzaWduZWQtdm0tcmVzb3VyY2UKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogcmVzcmMKICAgICAgc2Vjb25kYXJ5OiB2bQogICAgICB3aGF0OiB2aXJ0dWFsLW1hY2hpbmUKICAgIGVjczogKmVjcy1ob3N0CgogICMgVXNlcnNwYWNlIHByb2Nlc3MgZXZlbnRzCgogICMgQVVESVRfQ0hHUlBfSUQgLSBVc2VyIHNwYWNlIGdyb3VwIElEIGNoYW5nZWQKICAtIHJlY29yZF90eXBlczogQ0hHUlBfSUQKICAgIGFjdGlvbjogY2hhbmdlZC1ncm91cAogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IGNoYW5nZQogICMgQVVESVRfQ0hVU0VSX0lEIC0gQ2hhbmdlZCB1c2VyIElEIHN1cHBsZW1lbnRhbCBkYXRhCiAgLSByZWNvcmRfdHlwZXM6IENIVVNFUl9JRAogICAgYWN0aW9uOiBjaGFuZ2VkLXVzZXItaWQKICAgIGVjczoKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBjaGFuZ2UKICAjIEFVRElUX1RFU1QgLSBVc2VkIGZvciB0ZXN0IHN1Y2Nlc3MgbWVzc2FnZXMKICAtIHJlY29yZF90eXBlczogVEVTVAogICAgYWN0aW9uOiBzZW50LXRlc3QKICAgIGVjczogKmVjcy1wcm9jZXNzCiAgIyBBVURJVF9UUlVTVEVEX0FQUCAtIFRydXN0ZWQgYXBwIG1zZyAtIGZyZWVzdHlsZSB0ZXh0CiAgLSByZWNvcmRfdHlwZXM6IFRSVVNURURfQVBQCiAgICBhY3Rpb246IHVua25vd24KICAgIGVjczogKmVjcy1wcm9jZXNzCiAgIyBBVURJVF9VU0VSX0NNRCAtIFVzZXIgc2hlbGwgY29tbWFuZCBhbmQgYXJncwogIC0gcmVjb3JkX3R5cGVzOiBVU0VSX0NNRAogICAgYWN0aW9uOiByYW4tY29tbWFuZAogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBjbWQKICAgICAgd2hhdDogcHJvY2VzcwogICAgZGVzY3JpcHRpb246ID4KICAgICAgVGhlc2UgbWVzc2FnZXMgYXJlIGZyb20gdXNlci1zcGFjZSBhcHBzLCBsaWtlIHN1ZG8sIHRoYXQgbG9nIGNvbW1hbmRzCiAgICAgIGJlaW5nIHJ1biBieSBhIHVzZXIuIFRoZSB1aWQgY29udGFpbmVkIGluIHRoZXNlIG1lc3NhZ2VzIGlzIHVzZXIncyBVSUQgYXQKICAgICAgdGhlIHRpbWUgdGhlIGNvbW1hbmQgd2FzIHJ1bi4gSXQgaXMgbm90IHRoZSAidGFyZ2V0IiBVSUQgdXNlZCB0byBydW4gdGhlCiAgICAgIGNvbW1hbmQsIHdoaWNoIGlzIG5vcm1hbGx5IHJvb3QuCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogc3RhcnQKCiAgIyBIb3N0LWxldmVsIGV2ZW50cwoKICAjIEFVRElUX1NZU1RFTV9CT09UIC0gU3lzdGVtIGJvb3QKICAtIHJlY29yZF90eXBlczogU1lTVEVNX0JPT1QKICAgIGFjdGlvbjogYm9vdGVkLXN5c3RlbQogICAgb2JqZWN0OgogICAgICB3aGF0OiBzeXN0ZW0KICAgIGVjczoKICAgICAgPDw6ICplY3MtaG9zdAogICAgICB0eXBlOiBzdGFydAogICMgQVVESVRfU1lTVEVNX1JVTkxFVkVMIC0gU3lzdGVtIHJ1bmxldmVsIGNoYW5nZQogIC0gcmVjb3JkX3R5cGVzOiBTWVNURU1fUlVOTEVWRUwKICAgIGFjdGlvbjogY2hhbmdlZC10by1ydW5sZXZlbAogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBuZXctbGV2ZWwKICAgICAgd2hhdDogc3lzdGVtCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWhvc3QKICAgICAgdHlwZTogY2hhbmdlCiAgIyBBVURJVF9TWVNURU1fU0hVVERPV04gLSBTeXN0ZW0gc2h1dGRvd24KICAtIHJlY29yZF90eXBlczogU1lTVEVNX1NIVVRET1dOCiAgICBhY3Rpb246IHNodXRkb3duLXN5c3RlbQogICAgb2JqZWN0OgogICAgICB3aGF0OiBzeXN0ZW0KICAgIGVjczoKICAgICAgPDw6ICplY3MtaG9zdAogICAgICB0eXBlOiBlbmQKCiAgIyBTZXJ2aWNlLWxldmVsIGV2ZW50cwoKICAjIEFVRElUX1NFUlZJQ0VfU1RBUlQgLSBTZXJ2aWNlIChkYWVtb24pIHN0YXJ0CiAgLSByZWNvcmRfdHlwZXM6IFNFUlZJQ0VfU1RBUlQKICAgIGFjdGlvbjogc3RhcnRlZC1zZXJ2aWNlCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IHVuaXQKICAgICAgd2hhdDogc2VydmljZQogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IHN0YXJ0CiAgIyBBVURJVF9TRVJWSUNFX1NUT1AgLSBTZXJ2aWNlIChkYWVtb24pIHN0b3AKICAtIHJlY29yZF90eXBlczogU0VSVklDRV9TVE9QCiAgICBhY3Rpb246IHN0b3BwZWQtc2VydmljZQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiB1bml0CiAgICAgIHdoYXQ6IHNlcnZpY2UKICAgIGVjczoKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBzdG9wCgogICMgQXVkaXRkIGludGVybmFsIGV2ZW50cwoKICAjIEFVRElUX0NPTkZJR19DSEFOR0UgLSBBdWRpdCBzeXN0ZW0gY29uZmlndXJhdGlvbiBjaGFuZ2UKICAtIHJlY29yZF90eXBlczogQ09ORklHX0NIQU5HRQogICAgYWN0aW9uOiBjaGFuZ2VkLWF1ZGl0LWNvbmZpZ3VyYXRpb24KICAgIG9iamVjdDoKICAgICAgcHJpbWFyeToKICAgICAgICBbb3AsIGtleSwgYXVkaXRfZW5hYmxlZCwgYXVkaXRfcGlkLCBhdWRpdF9iYWNrbG9nX2xpbWl0LCBhdWRpdF9mYWlsdXJlXQogICAgICB3aGF0OiBhdWRpdC1jb25maWcKICAgIGVjczoKICAgICAgY2F0ZWdvcnk6IFtwcm9jZXNzLCBjb25maWd1cmF0aW9uXQogICAgICB0eXBlOiBjaGFuZ2UKICAjIEFVRElUX0RBRU1PTl9BQk9SVCAtIERhZW1vbiBlcnJvciBzdG9wIHJlY29yZAogIC0gcmVjb3JkX3R5cGVzOiBEQUVNT05fQUJPUlQKICAgIGFjdGlvbjogYWJvcnRlZC1hdWRpdGQtc3RhcnR1cAogICAgb2JqZWN0OgogICAgICB3aGF0OiBzZXJ2aWNlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogc3RvcAogICMgQVVESVRfREFFTU9OX0FDQ0VQVCAtIEF1ZGl0ZCBhY2NlcHRlZCByZW1vdGUgY29ubmVjdGlvbgogIC0gcmVjb3JkX3R5cGVzOiBEQUVNT05fQUNDRVBUCiAgICBhY3Rpb246IHJlbW90ZS1hdWRpdC1jb25uZWN0ZWQKICAgIG9iamVjdDoKICAgICAgd2hhdDogc2VydmljZQogICAgZWNzOgogICAgICA8PDogKmVjcy1uZXR3b3JrCiAgICAgIHR5cGU6CiAgICAgICAgLSBjb25uZWN0aW9uCiAgICAgICAgLSBzdGFydAogICMgQVVESVRfREFFTU9OX0NMT1NFIC0gQXVkaXRkIGNsb3NlZCByZW1vdGUgY29ubmVjdGlvbgogIC0gcmVjb3JkX3R5cGVzOiBEQUVNT05fQ0xPU0UKICAgIGFjdGlvbjogcmVtb3RlLWF1ZGl0LWRpc2Nvbm5lY3RlZAogICAgb2JqZWN0OgogICAgICB3aGF0OiBzZXJ2aWNlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLW5ldHdvcmsKICAgICAgdHlwZToKICAgICAgICAtIGNvbm5lY3Rpb24KICAgICAgICAtIHN0YXJ0CiAgIyBBVURJVF9EQUVNT05fQ09ORklHIC0gRGFlbW9uIGNvbmZpZyBjaGFuZ2UKICAtIHJlY29yZF90eXBlczogREFFTU9OX0NPTkZJRwogICAgYWN0aW9uOiBjaGFuZ2VkLWF1ZGl0ZC1jb25maWd1cmF0aW9uCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNlcnZpY2UKICAgIGVjczoKICAgICAgY2F0ZWdvcnk6IFtwcm9jZXNzLCBjb25maWd1cmF0aW9uXQogICAgICB0eXBlOiBjaGFuZ2UKICAjIEFVRElUX0RBRU1PTl9FTkQgLSBEYWVtb24gbm9ybWFsIHN0b3AgcmVjb3JkCiAgLSByZWNvcmRfdHlwZXM6IERBRU1PTl9FTkQKICAgIGFjdGlvbjogc2h1dGRvd24tYXVkaXQKICAgIG9iamVjdDoKICAgICAgd2hhdDogc2VydmljZQogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IHN0b3AKICAjIEFVRElUX0RBRU1PTl9FUlIgLSBBdWRpdGQgaW50ZXJuYWwgZXJyb3IKICAtIHJlY29yZF90eXBlczogREFFTU9OX0VSUgogICAgYWN0aW9uOiBhdWRpdC1lcnJvcgogICAgb2JqZWN0OgogICAgICB3aGF0OiBzZXJ2aWNlCiAgICBlY3M6ICplY3MtcHJvY2VzcwogICMgQVVESVRfREFFTU9OX1JFQ09ORklHIC0gQXVkaXRkIHNob3VsZCByZWNvbmZpZ3VyZQogIC0gcmVjb3JkX3R5cGVzOiBEQUVNT05fUkVDT05GSUcKICAgIGFjdGlvbjogcmVjb25maWd1cmVkLWF1ZGl0ZAogICAgb2JqZWN0OgogICAgICB3aGF0OiBzZXJ2aWNlCiAgICBlY3M6CiAgICAgIGNhdGVnb3J5OiBbcHJvY2VzcywgY29uZmlndXJhdGlvbl0KICAgICAgdHlwZTogaW5mbwogICMgQVVESVRfREFFTU9OX1JFU1VNRSAtIEF1ZGl0ZCBzaG91bGQgcmVzdW1lIGxvZ2dpbmcKICAtIHJlY29yZF90eXBlczogREFFTU9OX1JFU1VNRQogICAgYWN0aW9uOiByZXN1bWVkLWF1ZGl0LWxvZ2dpbmcKICAgIG9iamVjdDoKICAgICAgd2hhdDogc2VydmljZQogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IGNoYW5nZQogICMgQVVESVRfREFFTU9OX1JPVEFURSAtIEF1ZGl0ZCBzaG91bGQgcm90YXRlIGxvZ3MKICAtIHJlY29yZF90eXBlczogREFFTU9OX1JPVEFURQogICAgYWN0aW9uOiByb3RhdGVkLWF1ZGl0LWxvZ3MKICAgIG9iamVjdDoKICAgICAgd2hhdDogc2VydmljZQogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IGNoYW5nZQogICMgQVVESVRfREFFTU9OX1NUQVJUIC0gRGFlbW9uIHN0YXJ0dXAgcmVjb3JkCiAgLSByZWNvcmRfdHlwZXM6IERBRU1PTl9TVEFSVAogICAgYWN0aW9uOiBzdGFydGVkLWF1ZGl0CiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNlcnZpY2UKICAgIGVjczoKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBzdGFydAogICMgQVVESVRfS0VSTkVMIC0gQXN5bmNocm9ub3VzIGF1ZGl0IHJlY29yZC4gTk9UIEEgUkVRVUVTVC4KICAtIHJlY29yZF90eXBlczogS0VSTkVMCiAgICBhY3Rpb246IGluaXRpYWxpemVkLWF1ZGl0LXN1YnN5c3RlbQogICAgZWNzOiAqZWNzLXByb2Nlc3MKCiAgIyBDb25maWd1cmF0aW9uIGNoYW5nZSBldmVudHMKCiAgIyBBVURJVF9VU1lTX0NPTkZJRyAtIFVzZXIgc3BhY2Ugc3lzdGVtIGNvbmZpZyBjaGFuZ2UKICAtIHJlY29yZF90eXBlczogVVNZU19DT05GSUcKICAgIGFjdGlvbjogY2hhbmdlZC1jb25maWd1cmF0aW9uCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IG9wCiAgICAgIHdoYXQ6IHN5c3RlbQogICAgZWNzOgogICAgICBjYXRlZ29yeTogY29uZmlndXJhdGlvbgogICAgICB0eXBlOiBjaGFuZ2UKICAjIEFVRElUX05FVEZJTFRFUl9DRkcgLSBOZXRmaWx0ZXIgY2hhaW4gbW9kaWZpY2F0aW9ucwogIC0gcmVjb3JkX3R5cGVzOiBORVRGSUxURVJfQ0ZHCiAgICBhY3Rpb246IGxvYWRlZC1maXJld2FsbC1ydWxlLXRvCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IHRhYmxlCiAgICAgIHdoYXQ6IGZpcmV3YWxsCiAgICBlY3M6CiAgICAgIGNhdGVnb3J5OiBjb25maWd1cmF0aW9uCiAgICAgIHR5cGU6IGNoYW5nZQogICMgQVVESVRfRkVBVFVSRV9DSEFOR0UgLSBhdWRpdCBsb2cgbGlzdGluZyBmZWF0dXJlIGNoYW5nZXMKICAtIHJlY29yZF90eXBlczogRkVBVFVSRV9DSEFOR0UKICAgIGFjdGlvbjogY2hhbmdlZC1hdWRpdC1mZWF0dXJlCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGZlYXR1cmUKICAgICAgd2hhdDogc3lzdGVtCiAgICBlY3M6CiAgICAgIGNhdGVnb3J5OiBjb25maWd1cmF0aW9uCiAgICAgIHR5cGU6IGNoYW5nZQogICMgQVVESVRfUkVQTEFDRSAtIFJlcGxhY2UgYXVkaXRkIGlmIHRoaXMgcGFja2V0IHVuYW5zd2VyZAoKICAjIFRUWSBldmVudHMKCiAgLSByZWNvcmRfdHlwZXM6CiAgICAgICMgQVVESVRfVFRZIC0gSW5wdXQgb24gYW4gYWRtaW5pc3RyYXRpdmUgVFRZCiAgICAgIC0gVFRZCiAgICAgICMgQVVESVRfVVNFUl9UVFkgLSBOb24tSUNBTk9OIFRUWSBpbnB1dCBtZWFuaW5nCiAgICAgIC0gVVNFUl9UVFkKICAgIGFjdGlvbjogdHlwZWQKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogZGF0YQogICAgICB3aGF0OiBrZXlzdHJva2VzCiAgICBob3c6IFtjb21tLCBleGVdCgogICMgUG9saWN5IGV2ZW50cwoKICAjIEFVRElUX0FWQyAtIFNFIExpbnV4IGF2YyBkZW5pYWwgb3IgZ3JhbnQgKHNlbGludXgpCiAgLSByZWNvcmRfdHlwZXM6IEFWQwogICAgYWN0aW9uOiB2aW9sYXRlZC1zZWxpbnV4LXBvbGljeQogICAgc3ViamVjdDoKICAgICAgcHJpbWFyeTogc2NvbnRleHQKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogdGNvbnRleHQKICAgICAgc2Vjb25kYXJ5OiB0Y2xhc3MKICAgIGhhc19maWVsZHM6CiAgICAgIC0gc2VyZXN1bHQKICAjIEFVRElUX0FWQyAtIFNFIExpbnV4IGF2YyBkZW5pYWwgb3IgZ3JhbnQgKGFwcGFybW9yKQogIC0gcmVjb3JkX3R5cGVzOiBBVkMKICAgIGFjdGlvbjogdmlvbGF0ZWQtYXBwYXJtb3ItcG9saWN5CiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IG9wZXJhdGlvbgogICAgICBzZWNvbmRhcnk6IFtyZXF1ZXN0ZWRfbWFzaywgZGVuaWVkX21hc2ssIGNhcG5hbWVdCiAgICAgIHdoYXQ6IHBvbGljeQogICAgaGFzX2ZpZWxkczoKICAgICAgLSBhcHBhcm1vcgogICMgQVVESVRfRlNfUkVMQUJFTCAtIEZpbGVzeXN0ZW0gcmVsYWJlbGVkCiAgLSByZWNvcmRfdHlwZXM6IEZTX1JFTEFCRUwKICAgIGFjdGlvbjogcmVsYWJlbGVkLWZpbGVzeXN0ZW0KICAgIG9iamVjdDoKICAgICAgd2hhdDogbWFjLWNvbmZpZwogICMgQVVESVRfTEFCRUxfTEVWRUxfQ0hBTkdFIC0gT2JqZWN0J3MgbGV2ZWwgd2FzIGNoYW5nZWQKICAtIHJlY29yZF90eXBlczogTEFCRUxfTEVWRUxfQ0hBTkdFCiAgICBhY3Rpb246IG1vZGlmaWVkLWxldmVsLW9mCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IHByaW50ZXIKICAgICAgd2hhdDogcHJpbnRlcgogICMgQVVESVRfTEFCRUxfT1ZFUlJJREUgLSBBZG1pbiBpcyBvdmVycmlkaW5nIGEgbGFiZWwKICAtIHJlY29yZF90eXBlczogTEFCRUxfT1ZFUlJJREUKICAgIGFjdGlvbjogb3ZlcnJvZGUtbGFiZWwtb2YKICAgIG9iamVjdDoKICAgICAgd2hhdDogbWFjLWNvbmZpZwogICMgQVVESVRfTUFDX0NIRUNLIC0gVXNlciBzcGFjZSBNQUMgZGVjaXNpb24gcmVzdWx0cwogIC0gcmVjb3JkX3R5cGVzOiBNQUNfQ0hFQ0sKICAgIGFjdGlvbjogbWFjLXBlcm1pc3Npb24KICAjIEFVRElUX01BQ19DT05GSUdfQ0hBTkdFIC0gQ2hhbmdlcyB0byBib29sZWFucwogIC0gcmVjb3JkX3R5cGVzOiBNQUNfQ09ORklHX0NIQU5HRQogICAgYWN0aW9uOiBjaGFuZ2VkLXNlbGludXgtYm9vbGVhbgogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBib29sCiAgICAgIHdoYXQ6IG1hYy1jb25maWcKICAgIGVjczoKICAgICAgY2F0ZWdvcnk6IGNvbmZpZ3VyYXRpb24KICAgICAgdHlwZTogY2hhbmdlCiAgIyBBVURJVF9NQUNfUE9MSUNZX0xPQUQgLSBQb2xpY3kgZmlsZSBsb2FkCiAgLSByZWNvcmRfdHlwZXM6IE1BQ19QT0xJQ1lfTE9BRAogICAgYWN0aW9uOiBsb2FkZWQtc2VsaW51eC1wb2xpY3kKICAgIG9iamVjdDoKICAgICAgd2hhdDogbWFjLWNvbmZpZwogICAgZWNzOgogICAgICBjYXRlZ29yeTogY29uZmlndXJhdGlvbgogICAgICB0eXBlOiBhY2Nlc3MKICAjIEFVRElUX01BQ19TVEFUVVMgLSBDaGFuZ2VkIGVuZm9yY2luZyxwZXJtaXNzaXZlLG9mZgogIC0gcmVjb3JkX3R5cGVzOiBNQUNfU1RBVFVTCiAgICBhY3Rpb246IGNoYW5nZWQtc2VsaW51eC1lbmZvcmNlbWVudAogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBlbmZvcmNpbmcKICAgICAgd2hhdDogbWFjLWNvbmZpZwogICAgZWNzOgogICAgICBjYXRlZ29yeTogY29uZmlndXJhdGlvbgogICAgICB0eXBlOiBjaGFuZ2UKICAjIEFVRElUX1VTRVJfQVZDIC0gVXNlciBzcGFjZSBhdmMgbWVzc2FnZQogIC0gcmVjb3JkX3R5cGVzOiBVU0VSX0FWQwogICAgYWN0aW9uOiBhY2Nlc3MtcGVybWlzc2lvbgogICMgQVVESVRfVVNFUl9NQUNfQ09ORklHX0NIQU5HRSAtIENoYW5nZSBtYWRlIHRvIE1BQyBwb2xpY3kKICAtIHJlY29yZF90eXBlczogVVNFUl9NQUNfQ09ORklHX0NIQU5HRQogICAgYWN0aW9uOiBjaGFuZ2VkLW1hYy1jb25maWd1cmF0aW9uCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IG1hYy1jb25maWcKICAgIGVjczoKICAgICAgY2F0ZWdvcnk6IGNvbmZpZ3VyYXRpb24KICAgICAgdHlwZTogY2hhbmdlCiAgIyBBVURJVF9VU0VSX01BQ19QT0xJQ1lfTE9BRCAtIFVzZXJzcGMgZGFlbW9uIGxvYWRlZCBwb2xpYwogIC0gcmVjb3JkX3R5cGVzOiBVU0VSX01BQ19QT0xJQ1lfTE9BRAogICAgYWN0aW9uOiBsb2FkZWQtbWFjLXBvbGljeQogICAgb2JqZWN0OgogICAgICB3aGF0OiBtYWMtY29uZmlnCiAgICBlY3M6CiAgICAgIGNhdGVnb3J5OiBjb25maWd1cmF0aW9uCiAgICAgIHR5cGU6IGFjY2VzcwogICMgQVVESVRfVVNFUl9TRUxJTlVYX0VSUiAtIFNFIExpbnV4IHVzZXIgc3BhY2UgZXJyb3IKICAtIHJlY29yZF90eXBlczogVVNFUl9TRUxJTlVYX0VSUgogICAgYWN0aW9uOiBhY2Nlc3MtZXJyb3IKICAjIEFVRElUX1NFQ0NPTVAgLSBTZWN1cmUgQ29tcHV0aW5nIGV2ZW50CiAgLSByZWNvcmRfdHlwZXM6IFNFQ0NPTVAKICAgIGFjdGlvbjogdmlvbGF0ZWQtc2VjY29tcC1wb2xpY3kKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogc3lzY2FsbAogICAgICB3aGF0OiBwcm9jZXNzCiAgIyBBVURJVF9TRUxJTlVYX0VSUiAtIEludGVybmFsIFNFIExpbnV4IEVycm9ycwogIC0gYWN0aW9uOiBjYXVzZWQtbWFjLXBvbGljeS1lcnJvcgogICAgb2JqZWN0OgogICAgICB3aGF0OiBzeXN0ZW0KICAgIHJlY29yZF90eXBlczogU0VMSU5VWF9FUlIKICAjIEFVRElUX0FQUEFSTU9SX0FMTE9XRUQKICAjIEFVRElUX0FQUEFSTU9SX0RFTklFRAogICMgQVVESVRfQVBQQVJNT1JfRVJST1IKICAjIEFVRElUX0FWQ19QQVRIIC0gZGVudHJ5LCB2ZnNtb3VudCBwYWlyIGZyb20gYXZjCiAgIyBBVURJVF9BUFBBUk1PUl9BVURJVAogICMgQVVESVRfQVBQQVJNT1JfSElOVAogICMgQVVESVRfQVBQQVJNT1JfU1RBVFVTCiAgIyBBVURJVF9BUFBBUk1PUl9FUlJPUgogICMgQVVESVRfREVWX0FMTE9DIC0gRGV2aWNlIHdhcyBhbGxvY2F0ZWQKICAjIEFVRElUX0RFVl9ERUFMTE9DIC0gRGV2aWNlIHdhcyBkZWFsbG9jYXRlZAogICMgQVVESVRfTUFDX1VOTEJMX0FMTE9XIC0gTmV0TGFiZWw6IGFsbG93IHVubGFiZWxlZCB0cmFmZmljCiAgIyBBVURJVF9NQUNfQ0lQU09WNF9BREQgLSBOZXRMYWJlbDogYWRkIENJUFNPdjQgRE9JIGVudHJ5CiAgIyBBVURJVF9NQUNfQ0lQU09WNF9ERUwgLSBOZXRMYWJlbDogZGVsIENJUFNPdjQgRE9JIGVudHJ5CiAgIyBBVURJVF9NQUNfTUFQX0FERCAtIE5ldExhYmVsOiBhZGQgTFNNIGRvbWFpbiBtYXBwaW5nCiAgIyBBVURJVF9NQUNfTUFQX0RFTCAtIE5ldExhYmVsOiBkZWwgTFNNIGRvbWFpbiBtYXBwaW5nCiAgIyBBVURJVF9NQUNfSVBTRUNfRVZFTlQgLSBBdWRpdCBhbiBJUFNlYyBldmVudAogICMgQVVESVRfTUFDX1VOTEJMX1NUQ0FERCAtIE5ldExhYmVsOiBhZGQgYSBzdGF0aWMgbGFiZWwKICAjIEFVRElUX01BQ19VTkxCTF9TVENERUwgLSBOZXRMYWJlbDogZGVsIGEgc3RhdGljIGxhYmVsCiAgIyBBVURJVF9NQUNfQ0FMSVBTT19BREQgLSBOZXRMYWJlbDogYWRkIENBTElQU08gRE9JIGVudHJ5CiAgIyBBVURJVF9NQUNfQ0FMSVBTT19ERUwgLSBOZXRMYWJlbDogZGVsIENBTElQU08gRE9JIGVudHJ5CiAgIyBBVURJVF9VU0VSX0xBQkVMRURfRVhQT1JUIC0gT2JqZWN0IGV4cG9ydGVkIHdpdGggbGFiZWwKICAjIEFVRElUX1VTRVJfVU5MQUJFTEVEX0VYUE9SVCAtIE9iamVjdCBleHBvcnRlZCB3aXRob3V0IGxhYmVsCgogICMgQ3J5cHRvIGV2ZW50cwoKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICBhY3Rpb246IG5lZ290aWF0ZWQtY3J5cHRvLWtleQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBmcAogICAgICBzZWNvbmRhcnk6IFthZGRyLCBob3N0bmFtZV0KICAgICAgd2hhdDogdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IENSWVBUT19LRVlfVVNFUgogICAgc291cmNlX2lwOiBbYWRkcl0KICAgIGVjczogKmVjcy1wcm9jZXNzCiAgLSBhY3Rpb246IGNyeXB0by1vZmZpY2VyLWxvZ2dlZC1pbgogICAgcmVjb3JkX3R5cGVzOiBDUllQVE9fTE9HSU4KICAtIGFjdGlvbjogY3J5cHRvLW9mZmljZXItbG9nZ2VkLW91dAogICAgcmVjb3JkX3R5cGVzOiBDUllQVE9fTE9HT1VUCiAgICBlY3M6ICplY3MtcHJvY2VzcwogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIGFjdGlvbjogc3RhcnRlZC1jcnlwdG8tc2Vzc2lvbgogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBhZGRyCiAgICAgIHNlY29uZGFyeTogW3Jwb3J0XQogICAgcmVjb3JkX3R5cGVzOiBDUllQVE9fU0VTU0lPTgogICAgc291cmNlX2lwOiBbYWRkcl0KICAgIGVjczogKmVjcy1wcm9jZXNzCiAgLSBhY3Rpb246IGFjY2Vzcy1yZXN1bHQKICAgIHJlY29yZF90eXBlczogREFDX0NIRUNLCgogICMgQW5vbWFsaWVzCgogICMgQVVESVRfQU5PTV9BQkVORCAtIFByb2Nlc3MgZW5kZWQgYWJub3JtYWxseQogIC0gcmVjb3JkX3R5cGVzOiBBTk9NX0FCRU5ECiAgICBhY3Rpb246IGNyYXNoZWQtcHJvZ3JhbQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBbY29tbSwgZXhlXQogICAgICBzZWNvbmRhcnk6IHBpZAogICAgICB3aGF0OiBwcm9jZXNzCiAgICBob3c6IHNpZwogICAgZWNzOgogICAgICAjIGNvbnNpZGVyIGFkZGluZyBhbiBhbm9tYWx5IGNhdGVnb3J5IHdoZW4gd2UgaW50cm9kdWNlCiAgICAgICMgdG8gRUNTCiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogZW5kCiAgIyBBVURJVF9BTk9NX0VYRUMgLSBFeGVjdXRpb24gb2YgZmlsZQogIC0gcmVjb3JkX3R5cGVzOiBBTk9NX0VYRUMKICAgIGFjdGlvbjogYXR0ZW1wdGVkLWV4ZWN1dGlvbi1vZi1mb3JiaWRkZW4tcHJvZ3JhbQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBjbWQKICAgICAgd2hhdDogcHJvY2VzcwogICAgaG93OiB0ZXJtaW5hbAogICAgZWNzOgogICAgICAjIGNvbnNpZGVyIGFkZGluZyBhbiBhbm9tYWx5IGNhdGVnb3J5IHdoZW4gd2UgaW50cm9kdWNlCiAgICAgICMgdG8gRUNTCiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogc3RhcnQKICAjIEFVRElUX0FOT01fTElOSyAtIFN1c3BpY2lvdXMgdXNlIG9mIGZpbGUgbGlua3MKICAtIHJlY29yZF90eXBlczogQU5PTV9MSU5LCiAgICBhY3Rpb246IHVzZWQtc3VzcGljaW91cy1saW5rCiAgIyBBVURJVF9BTk9NX0xPR0lOX0ZBSUxVUkVTIC0gRmFpbGVkIGxvZ2luIGxpbWl0IHJlYWNoZWQKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IEFOT01fTE9HSU5fRkFJTFVSRVMKICAgIGFjdGlvbjogZmFpbGVkLWxvZy1pbi10b28tbWFueS10aW1lcy10bwogICMgQVVESVRfQU5PTV9MT0dJTl9MT0NBVElPTiAtIExvZ2luIGZyb20gZm9yYmlkZGVuIGxvY2F0aW9uCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBBTk9NX0xPR0lOX0xPQ0FUSU9OCiAgICBhY3Rpb246IGF0dGVtcHRlZC1sb2ctaW4tZnJvbS11bnVzdWFsLXBsYWNlLXRvCiAgIyBBVURJVF9BTk9NX0xPR0lOX1NFU1NJT05TIC0gTWF4IGNvbmN1cnJlbnQgc2Vzc2lvbnMgcmVhY2hlZAogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogQU5PTV9MT0dJTl9TRVNTSU9OUwogICAgYWN0aW9uOiBvcGVuZWQtdG9vLW1hbnktc2Vzc2lvbnMtdG8KICAjIEFVRElUX0FOT01fTE9HSU5fVElNRSAtIExvZ2luIGF0dGVtcHRlZCBhdCBiYWQgdGltZQogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogQU5PTV9MT0dJTl9USU1FCiAgICBhY3Rpb246IGF0dGVtcHRlZC1sb2ctaW4tZHVyaW5nLXVudXN1YWwtaG91ci10bwogICMgQVVESVRfQU5PTV9QUk9NSVNDVU9VUyAtIERldmljZSBjaGFuZ2VkIHByb21pc2N1b3VzIG1vZGUKICAtIHJlY29yZF90eXBlczogQU5PTV9QUk9NSVNDVU9VUwogICAgYWN0aW9uOiBjaGFuZ2VkLXByb21pc2N1b3VzLW1vZGUtb24tZGV2aWNlICMgQ291bGQgYmUgZW50ZXJlZCBvciBleGl0ZWQgYmFzZWQgb24gcHJvbSBmaWVsZC4KICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogZGV2CiAgICAgIHdoYXQ6IG5ldHdvcmstZGV2aWNlCiAgIyBBVURJVF9BTk9NX1JCQUNfSU5URUdSSVRZX0ZBSUwgLSBSQkFDIGZpbGUgaW50ZWdyaXR5IGZhaWx1cmUKICAtIHJlY29yZF90eXBlczogQU5PTV9SQkFDX0lOVEVHUklUWV9GQUlMCiAgICBhY3Rpb246IHRlc3RlZC1maWxlLXN5c3RlbS1pbnRlZ3JpdHktb2YKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogaG9zdG5hbWUKICAgICAgd2hhdDogZmlsZXN5c3RlbQogICMgQVVESVRfQU5PTV9MT0dJTl9BQ0NUIC0gTG9naW4gYXR0ZW1wdGVkIHRvIHdhdGNoZWQgYWNjdAogICMgQVVESVRfQU5PTV9NQVhfREFDIC0gTWF4IERBQyBmYWlsdXJlcyByZWFjaGVkCiAgIyBBVURJVF9BTk9NX01BWF9NQUMgLSBNYXggTUFDIGZhaWx1cmVzIHJlYWNoZWQKICAjIEFVRElUX0FOT01fQU1UVV9GQUlMIC0gQU1UVSBmYWlsdXJlCiAgIyBBVURJVF9BTk9NX1JCQUNfRkFJTCAtIFJCQUMgc2VsZiB0ZXN0IGZhaWx1cmUKICAjIEFVRElUX0FOT01fQ1JZUFRPX0ZBSUwgLSBDcnlwdG8gc3lzdGVtIHRlc3QgZmFpbHVyZQogICMgQVVESVRfQU5PTV9NS19FWEUgLSBNYWtlIGFuIGV4ZWN1dGFibGUKICAjIEFVRElUX0FOT01fQUNDRVNTX0ZTIC0gQWNjZXNzIG9mIGZpbGUgb3IgZGlyCiAgIyBBVURJVF9BTk9NX0FERF9BQ0NUIC0gQWRkaW5nIGFuIGFjY3QKICAjIEFVRElUX0FOT01fREVMX0FDQ1QgLSBEZWxldGluZyBhbiBhY2N0CiAgIyBBVURJVF9BTk9NX01PRF9BQ0NUIC0gQ2hhbmdpbmcgYW4gYWNjdAogICMgQVVESVRfQU5PTV9ST09UX1RSQU5TIC0gVXNlciBiZWNhbWUgcm9vdAogICMgQVVESVRfQU5PTV9MT0dJTl9TRVJWSUNFIC0gU2VydmljZSBhY2N0IGF0dGVtcHRlZCBsb2dpbgoKICAjIEFub21hbHkgcmVzcG9uc2VzCgogICMgQVVESVRfUkVTUF9BTk9NQUxZIC0gQW5vbWFseSBub3QgcmVhY3RlZCB0bwogICMgQVVESVRfUkVTUF9BTEVSVCAtIEFsZXJ0IGVtYWlsIHdhcyBzZW50CiAgIyBBVURJVF9SRVNQX0tJTExfUFJPQyAtIEtpbGwgcHJvZ3JhbQogICMgQVVESVRfUkVTUF9URVJNX0FDQ0VTUyAtIFRlcm1pbmF0ZSBzZXNzaW9uCiAgIyBBVURJVF9SRVNQX0FDQ1RfUkVNT1RFIC0gQWNjdCBsb2NrZWQgZnJvbSByZW1vdGUgYWNjZXNzCiAgIyBBVURJVF9SRVNQX0FDQ1RfTE9DS19USU1FRCAtIFVzZXIgYWNjdCBsb2NrZWQgZm9yIHRpbWUKICAjIEFVRElUX1JFU1BfQUNDVF9VTkxPQ0tfVElNRUQgLSBVc2VyIGFjY3QgdW5sb2NrZWQgZnJvbSB0aW1lCiAgIyBBVURJVF9SRVNQX0FDQ1RfTE9DSyAtIFVzZXIgYWNjdCB3YXMgbG9ja2VkCiAgIyBBVURJVF9SRVNQX1RFUk1fTE9DSyAtIFRlcm1pbmFsIHdhcyBsb2NrZWQKICAjIEFVRElUX1JFU1BfU0VCT09MIC0gU2V0IGFuIFNFIExpbnV4IGJvb2xlYW4KICAjIEFVRElUX1JFU1BfRVhFQyAtIEV4ZWN1dGUgYSBzY3JpcHQKICAjIEFVRElUX1JFU1BfU0lOR0xFIC0gR28gdG8gc2luZ2xlIHVzZXIgbW9kZQogICMgQVVESVRfUkVTUF9IQUxUIC0gdGFrZSB0aGUgc3lzdGVtIGRvd24KICAjIEFVRElUX1JFU1BfT1JJR0lOX0JMT0NLIC0gQWRkcmVzcyBibG9ja2VkIGJ5IGlwdGFibGVzCiAgIyBBVURJVF9SRVNQX09SSUdJTl9CTE9DS19USU1FRCAtIEFkZHJlc3MgYmxvY2tlZCBmb3IgdGltZQoKICAjIEF1ZGl0IHJ1bGUgZXZlbnRzCgogICMgQVVESVRfU1lTQ0FMTCAtIFN5c2NhbGwgZXZlbnQKICAjIEFVRElUX1BBVEggLSBGaWxlbmFtZSBwYXRoIGluZm9ybWF0aW9uCiAgIyBBVURJVF9JUEMgLSBJUEMgcmVjb3JkCiAgIyBBVURJVF9TT0NLRVRDQUxMIC0gc3lzX3NvY2tldGNhbGwgYXJndW1lbnRzCiAgIyBBVURJVF9TT0NLQUREUiAtIHNvY2thZGRyIGNvcGllZCBhcyBzeXNjYWxsIGFyZwogICMgQVVESVRfQ1dEIC0gQ3VycmVudCB3b3JraW5nIGRpcmVjdG9yeQogICMgQVVESVRfRVhFQ1ZFIC0gZXhlY3ZlIGFyZ3VtZW50cwogICMgQVVESVRfSVBDX1NFVF9QRVJNIC0gSVBDIG5ldyBwZXJtaXNzaW9ucyByZWNvcmQgdHlwZQogICMgQVVESVRfTVFfT1BFTiAtIFBPU0lYIE1RIG9wZW4gcmVjb3JkIHR5cGUKICAjIEFVRElUX01RX1NFTkRSRUNWLSBQT1NJWCBNUSBzZW5kL3JlY2VpdmUgcmVjb3JkIHR5cGUKICAjIEFVRElUX01RX05PVElGWSAtIFBPU0lYIE1RIG5vdGlmeSByZWNvcmQgdHlwZQogICMgQVVESVRfTVFfR0VUU0VUQVRUUiAtIFBPU0lYIE1RIGdldC9zZXQgYXR0cmlidXRlIHJlY29yZCB0eXBlCiAgIyBBVURJVF9GRF9QQUlSIC0gYXVkaXQgcmVjb3JkIGZvciBwaXBlL3NvY2tldHBhaXIKICAjIEFVRElUX09CSl9QSUQgLSBwdHJhY2UgdGFyZ2V0CiAgIyBBVURJVF9CUFJNX0ZDQVBTIC0gSW5mb3JtYXRpb24gYWJvdXQgZmNhcHMgaW5jcmVhc2luZyBwZXJtcwogICMgQVVESVRfQ0FQU0VUIC0gUmVjb3JkIHNob3dpbmcgYXJndW1lbnQgdG8gc3lzX2NhcHNldAogICMgQVVESVRfTU1BUCAtIFJlY29yZCBzaG93aW5nIGRlc2NyaXB0b3IgYW5kIGZsYWdzIGluIG1tYXAKICAjIEFVRElUX05FVEZJTFRFUl9QS1QgLSBQYWNrZXRzIHRyYXZlcnNpbmcgbmV0ZmlsdGVyIGNoYWlucwoKICAjIEludGVncml0eSBjaGVja3MKCiAgIyBBVURJVF9JTlRFR1JJVFlfREFUQSAtIERhdGEgaW50ZWdyaXR5IHZlcmlmaWNhdGlvbgogICMgQVVESVRfSU5URUdSSVRZX01FVEFEQVRBIC0gTWV0YWRhdGEgaW50ZWdyaXR5IHZlcmlmaWNhdGlvbgogICMgQVVESVRfSU5URUdSSVRZX1NUQVRVUyAtIEludGVncml0eSBlbmFibGUgc3RhdHVzCiAgIyBBVURJVF9JTlRFR1JJVFlfSEFTSCAtIEludGVncml0eSBIQVNIIHR5cGUKICAjIEFVRElUX0lOVEVHUklUWV9QQ1IgLSBQQ1IgaW52YWxpZGF0aW9uIG1zZ3MKICAjIEFVRElUX0lOVEVHUklUWV9SVUxFIC0gUG9saWN5IHJ1bGUKCiAgIyBWYXJpb3VzCgogICMgQVVESVRfVVNFUiAtIE1lc3NhZ2UgZnJvbSB1c2Vyc3BhY2UgLS0gZGVwcmVjYXRlZAogIC0gcmVjb3JkX3R5cGVzOiBVU0VSCiAgICBhY3Rpb246IHNlbnQtbWVzc2FnZQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBhZGRyCg==") + value, _ = base64.StdEncoding.DecodeString("LS0tCiMgTWFjcm9zIGRlY2xhcmVzIHNvbWUgWUFNTCBhbmNob3JzIHRoYXQgY2FuIGJlIHJlZmVyZW5jZWQgZm9yIHNvbWUgY29tbW9uCiMgb2JqZWN0IHR5cGUgbm9ybWFsaXphdGlvbnMgbGlrZSB1c2VyLXNlc3Npb24sIHNvY2tldCwgb3IgcHJvY2Vzcy4KbWFjcm9zOgogIC0gJmRlZmF1bHRzCiAgICBzdWJqZWN0OgogICAgICBwcmltYXJ5OiBhdWlkCiAgICAgIHNlY29uZGFyeTogdWlkCiAgICBob3c6IFtleGUsIGNvbW1dCgogIC0gJm1hY3JvLXVzZXItc2Vzc2lvbgogICAgc3ViamVjdDoKICAgICAgcHJpbWFyeTogYXVpZAogICAgICBzZWNvbmRhcnk6IFthY2N0LCBpZCwgdWlkXQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiB0ZXJtaW5hbAogICAgICBzZWNvbmRhcnk6IFthZGRyLCBob3N0bmFtZV0KICAgICAgd2hhdDogdXNlci1zZXNzaW9uCiAgICBob3c6IFtleGUsIHRlcm1pbmFsXQoKICAtICZtYWNyby1zb2NrZXQKICAgIDw8OiAqZGVmYXVsdHMKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogW2FkZHIsIHBhdGhdCiAgICAgIHNlY29uZGFyeTogcG9ydAogICAgICB3aGF0OiBzb2NrZXQKCiAgLSAmbWFjcm8tcHJvY2VzcwogICAgPDw6ICpkZWZhdWx0cwogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBbY21kLCBleGUsIGNvbW1dCiAgICAgIHNlY29uZGFyeTogcGlkCiAgICAgIHdoYXQ6IHByb2Nlc3MKICAgIGhvdzogdGVybWluYWwKCiAgLSAmZWNzLWlhbQogICAgY2F0ZWdvcnk6IGlhbQogICAgdHlwZTogaW5mbwoKICAtICZlY3MtYXV0aAogICAgY2F0ZWdvcnk6IGF1dGhlbnRpY2F0aW9uCiAgICB0eXBlOiBpbmZvCiAgICBtYXBwaW5nczoKICAgICAgLSBmcm9tOiBhY3Rvci5wcmltYXJ5CiAgICAgICAgdG86IHVzZXIKICAgICAgLSBmcm9tOiBhY3Rvci5zZWNvbmRhcnkKICAgICAgICB0bzogdXNlci5lZmZlY3RpdmUKCiAgLSAmZWNzLWhvc3QKICAgIGNhdGVnb3J5OiBob3N0CiAgICB0eXBlOiBpbmZvCgogIC0gJmVjcy1wcm9jZXNzCiAgICBjYXRlZ29yeTogcHJvY2VzcwogICAgdHlwZTogaW5mbwoKICAtICZlY3MtZmlsZQogICAgY2F0ZWdvcnk6IGZpbGUKICAgIHR5cGU6IGluZm8KCiAgLSAmZWNzLWRyaXZlcgogICAgY2F0ZWdvcnk6IGRyaXZlcgogICAgdHlwZTogaW5mbwoKICAtICZlY3MtbmV0d29yawogICAgY2F0ZWdvcnk6IG5ldHdvcmsKICAgIHR5cGU6CiAgICAgIC0gY29ubmVjdGlvbgogICAgICAtIGluZm8KCiAgLSAmZWNzLXVzZXItbW9kaWZpY2F0aW9uLW1hcHBpbmdzCiAgICBtYXBwaW5nczoKICAgICAgLSBmcm9tOiBhY3Rvci5wcmltYXJ5CiAgICAgICAgdG86IHVzZXIKICAgICAgLSBmcm9tOiBhY3Rvci5zZWNvbmRhcnkKICAgICAgICB0bzogdXNlci5lZmZlY3RpdmUKICAgICAgLSBmcm9tOiBvYmplY3QucHJpbWFyeQogICAgICAgIHRvOiB1c2VyLnRhcmdldAoKICAtICZlY3MtZ3JvdXAtbW9kaWZpY2F0aW9uLW1hcHBpbmdzCiAgICBtYXBwaW5nczoKICAgICAgLSBmcm9tOiBhY3Rvci5wcmltYXJ5CiAgICAgICAgdG86IHVzZXIKICAgICAgLSBmcm9tOiBhY3Rvci5zZWNvbmRhcnkKICAgICAgICB0bzogdXNlci5lZmZlY3RpdmUKICAgICAgLSBmcm9tOiBvYmplY3QucHJpbWFyeQogICAgICAgIHRvOiBncm91cC50YXJnZXQKCiMgTm9ybWFsaXphdGlvbnMgaXMgYSBsaXN0IG9mIGRlY2xhcmF0aW9ucyBzcGVjaWZ5aW5nIGhvdyB0byBub3JtYWxpemUgdGhlIGRhdGEKIyBjb250YWluZWQgaW4gYW4gZXZlbnQuIFRoZSBub3JtYWxpemF0aW9uIGNhbiBiZSBhcHBsaWVkIGJhc2VkIG9uIHRoZSBzeXNjYWxsCiMgbmFtZSAoZS5nLiBjb25uZWN0LCBvcGVuKSBvciBiYXNlZCBvbiB0aGUgcmVjb3JkIHR5cGUgKGUuZy4gVVNFUl9MT0dJTikuCiMgTm8gdHdvIG5vcm1hbGl6YXRpb25zIGNhbiBhcHBseSB0byB0aGUgc2FtZSBzeXNjYWxsIG9yIHJlY29yZCB0eXBlLiBUaGlzCiMgd2lsbCByZXN1bHQgaW4gYSBmYWlsdXJlIGF0IGxvYWQgdGltZS4KIwojIEVhY2ggbm9ybWFsaXphdGlvbiBzaG91bGQgc3BlY2lmeToKIyAgIGFjdGlvbiAtIHdoYXQgaGFwcGVuZWQKIyAgIGFjdG9yICAtIHdobyBkaWQgdGhpcyBvciB3aG8gdHJpZ2dlcmVkIHRoZSBldmVudAojICAgb2JqZWN0IC0gd2hhdCB3YXMgdGhlICJ0aGluZyIgaW52b2x2ZWQgaW4gdGhlIGFjdGlvbiAoZS5nLiBwcm9jZXNzLCBzb2NrZXQpCiMgICBob3cgICAgLSBob3cgd2FzIHRoZSBhY3Rpb24gcGVyZm9ybWVkIChlLmcuIGV4ZSBvciB0ZXJtaW5hbCkKbm9ybWFsaXphdGlvbnM6CiAgLSBlY3M6ICplY3MtcHJvY2VzcwogICAgc3lzY2FsbHM6CiAgICAgIC0gJyonICMgdGhpcyBpcyBhIGNhdGNoIGFsbAogIC0gYWN0aW9uOiBvcGVuZWQtZmlsZQogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBjcmVhdCAtIG9wZW4gYW5kIHBvc3NpYmx5IGNyZWF0ZSBhIGZpbGUKICAgICAgLSBjcmVhdAogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgIHR5cGU6IGNyZWF0aW9uCiAgLSBhY3Rpb246IG9wZW5lZC1maWxlCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIGZhbGxvY2F0ZSAtIG1hbmlwdWxhdGUgZmlsZSBzcGFjZQogICAgICAtIGZhbGxvY2F0ZQogICAgICAjIHRydW5jYXRlIC0gdHJ1bmNhdGUgYSBmaWxlIHRvIGEgc3BlY2lmaWVkIGxlbmd0aAogICAgICAtIHRydW5jYXRlCiAgICAgICMgZnRydW5jYXRlIC0gdHJ1bmNhdGUgYSBmaWxlIHRvIGEgc3BlY2lmaWVkIGxlbmd0aAogICAgICAtIGZ0cnVuY2F0ZQogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgICMgdGVjaG5pY2FsbHkgeW91IGNhbiB0cnVuY2F0ZSBhIGZpbGUgdG8gdGhlIHNhbWUgbGVuZ3RoCiAgICAgICMgYnV0IHJlZ2FyZGxlc3MsIHdlIGNvbnNpZGVyIHRoaXMgYSBjaGFuZ2UKICAgICAgdHlwZTogY2hhbmdlCiAgLSBhY3Rpb246IG9wZW5lZC1maWxlCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIG9wZW4gLSBvcGVuIGFuZCBwb3NzaWJseSBjcmVhdGUgYSBmaWxlCiAgICAgIC0gb3BlbgogICAgICAjIG9wZW5hdCAtIG9wZW4gYW5kIHBvc3NpYmx5IGNyZWF0ZSBhIGZpbGUKICAgICAgLSBvcGVuYXQKICAgICAgIyByZWFkbGluayAtIHJlYWQgdmFsdWUgb2YgYSBzeW1ib2xpYyBsaW5rCiAgICAgIC0gcmVhZGxpbmsKICAgICAgIyByZWFkbGlua2F0IC0gcmVhZCB2YWx1ZSBvZiBhIHN5bWJvbGljIGxpbmsKICAgICAgLSByZWFkbGlua2F0CiAgICBlY3M6ICplY3MtZmlsZQogIC0gYWN0aW9uOiByZWFkLWZpbGUKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgc3lzY2FsbHM6CiAgICAgICMgcmVhZCAtIHJlYWQgZnJvbSBhIGZpbGUgZGVzY3JpcHRvcgogICAgICAtIHJlYWQKICAgIGVjczogKmVjcy1maWxlCiAgLSBhY3Rpb246IHdyb3RlLXRvLWZpbGUKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgc3lzY2FsbHM6CiAgICAgICMgd3JpdGUgLSB3cml0ZSB0byBhIGZpbGUgZGVzY3JpcHRvcgogICAgICAtIHdyaXRlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgdHlwZTogY2hhbmdlCiAgLSBhY3Rpb246IGNoYW5nZWQtZmlsZS1hdHRyaWJ1dGVzLW9mCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIHNldHhhdHRyIC0gc2V0IGFuIGV4dGVuZGVkIGF0dHJpYnV0ZSB2YWx1ZQogICAgICAtIHNldHhhdHRyCiAgICAgICMgZnNldHhhdHRyIC0gc2V0IGFuIGV4dGVuZGVkIGF0dHJpYnV0ZSB2YWx1ZQogICAgICAtIGZzZXR4YXR0cgogICAgICAjIGxzZXR4YXR0ciAtIHNldCBhbiBleHRlbmRlZCBhdHRyaWJ1dGUgdmFsdWUKICAgICAgLSBsc2V0eGF0dHIKICAgICAgIyByZW1vdmV4YXR0ciAtIHJlbW92ZSBhbiBleHRlbmRlZCBhdHRyaWJ1dGUKICAgICAgLSByZW1vdmV4YXR0cgogICAgICAjIGZyZW1vdmV4YXR0ciAtIHJlbW92ZSBhbiBleHRlbmRlZCBhdHRyaWJ1dGUKICAgICAgLSBmcmVtb3ZleGF0dHIKICAgICAgIyBscmVtb3ZleGF0dHIgLSByZW1vdmUgYW4gZXh0ZW5kZWQgYXR0cmlidXRlCiAgICAgIC0gbHJlbW92ZXhhdHRyCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgdHlwZTogY2hhbmdlCiAgLSBhY3Rpb246IGNoYW5nZWQtZmlsZS1wZXJtaXNzaW9ucy1vZgogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBjaG1vZCAtIGNoYW5nZSBwZXJtaXNzaW9ucyBvZiBhIGZpbGUKICAgICAgLSBjaG1vZAogICAgICAjIGZjaG1vZCAtIGNoYW5nZSBwZXJtaXNzaW9ucyBvZiBhIGZpbGUKICAgICAgLSBmY2htb2QKICAgICAgIyBmY2htb2RhdCAtIGNoYW5nZSBwZXJtaXNzaW9ucyBvZiBhIGZpbGUKICAgICAgLSBmY2htb2RhdAogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgIHR5cGU6IGNoYW5nZQogIC0gYWN0aW9uOiBjaGFuZ2VkLWZpbGUtb3duZXJzaGlwLW9mCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIGNob3duIC0gY2hhbmdlIG93bmVyc2hpcCBvZiBhIGZpbGUKICAgICAgLSBjaG93bgogICAgICAjIGZjaG93biAtIGNoYW5nZSBvd25lcnNoaXAgb2YgYSBmaWxlCiAgICAgIC0gZmNob3duCiAgICAgICMgZmNob3duYXQgLSBjaGFuZ2Ugb3duZXJzaGlwIG9mIGEgZmlsZQogICAgICAtIGZjaG93bmF0CiAgICAgICMgbGNob3duIC0gY2hhbmdlIG93bmVyc2hpcCBvZiBhIGZpbGUKICAgICAgLSBsY2hvd24KICAgIGVjczoKICAgICAgPDw6ICplY3MtZmlsZQogICAgICB0eXBlOiBjaGFuZ2UKICAtIGFjdGlvbjogbG9hZGVkLWtlcm5lbC1tb2R1bGUKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgICBwcmltYXJ5OiBuYW1lCiAgICByZWNvcmRfdHlwZXM6CiAgICAgIC0gS0VSTl9NT0RVTEUKICAgIHN5c2NhbGxzOgogICAgICAjIGZpbml0X21vZHVsZSAtIGxvYWQgYSBrZXJuZWwgbW9kdWxlCiAgICAgIC0gZmluaXRfbW9kdWxlCiAgICAgICMgaW5pdF9tb2R1bGUgLSBsb2FkIGEga2VybmVsIG1vZHVsZQogICAgICAtIGluaXRfbW9kdWxlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWRyaXZlcgogICAgICB0eXBlOiBzdGFydAogIC0gYWN0aW9uOiB1bmxvYWRlZC1rZXJuZWwtbW9kdWxlCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIGRlbGV0ZV9tb2R1bGUgLSB1bmxvYWQgYSBrZXJuZWwgbW9kdWxlCiAgICAgIC0gZGVsZXRlX21vZHVsZQogICAgZWNzOgogICAgICA8PDogKmVjcy1kcml2ZXIKICAgICAgdHlwZTogZW5kCiAgLSBhY3Rpb246IGNyZWF0ZWQtZGlyZWN0b3J5CiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgICAgcGF0aF9pbmRleDogMQogICAgc3lzY2FsbHM6CiAgICAgICMgbWtkaXIgLSBjcmVhdGUgYSBkaXJlY3RvcnkKICAgICAgLSBta2RpcgogICAgICAjIG1rZGlyYXQgLSBjcmVhdGUgYSBkaXJlY3RvcnkKICAgICAgLSBta2RpcmF0CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgdHlwZTogY3JlYXRpb24KICAtIGFjdGlvbjogbW91bnRlZAogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlc3lzdGVtCiAgICAgIHBhdGhfaW5kZXg6IDEKICAgIHN5c2NhbGxzOgogICAgICAjIG1vdW50IC0gbW91bnQgZmlsZXN5c3RlbQogICAgICAtIG1vdW50CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgIyBzaW5jZSBhIG5ldyBtb3VudCBhcHBlYXJzIG9uIHRoZSBzeXN0ZW0KICAgICAgIyB3ZSBjb25zaWRlciB0aGlzIGEgaGlnaC1sZXZlbCAiY3JlYXRpb24iIGV2ZW50CiAgICAgIHR5cGU6IGNyZWF0aW9uCiAgLSBhY3Rpb246IHJlbmFtZWQKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgICBwYXRoX2luZGV4OiAyCiAgICBzeXNjYWxsczoKICAgICAgIyByZW5hbWUgLSBjaGFuZ2UgdGhlIG5hbWUgb3IgbG9jYXRpb24gb2YgYSBmaWxlCiAgICAgIC0gcmVuYW1lCiAgICAgICMgcmVuYW1lYXQgLSBjaGFuZ2UgdGhlIG5hbWUgb3IgbG9jYXRpb24gb2YgYSBmaWxlCiAgICAgIC0gcmVuYW1lYXQKICAgICAgIyByZW5hbWVhdDIgLSBjaGFuZ2UgdGhlIG5hbWUgb3IgbG9jYXRpb24gb2YgYSBmaWxlCiAgICAgIC0gcmVuYW1lYXQyCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgdHlwZTogY2hhbmdlCiAgLSBhY3Rpb246IGNoZWNrZWQtbWV0YWRhdGEtb2YKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgc3lzY2FsbHM6CiAgICAgICMgYWNjZXNzIC0gY2hlY2sgdXNlcidzIHBlcm1pc3Npb25zIGZvciBhIGZpbGUKICAgICAgLSBhY2Nlc3MKICAgICAgIyBmYWNjZXNzYXQgLSBjaGVjayB1c2VyJ3MgcGVybWlzc2lvbnMgZm9yIGEgZmlsZQogICAgICAtIGZhY2Nlc3NhdAogICAgICAjIGZzdGF0YXQgLSBnZXQgZmlsZSBzdGF0dXMKICAgICAgLSBmc3RhdGF0CiAgICAgICMgbmV3ZnN0YXRhdCAtIGdldCBmaWxlIHN0YXR1cwogICAgICAtIG5ld2ZzdGF0YXQKICAgICAgIyBzdGF0IC0gZ2V0IGZpbGUgc3RhdHVzCiAgICAgIC0gc3RhdAogICAgICAjIHN0YXQ2NCAtIGdldCBmaWxlIHN0YXR1cwogICAgICAtIHN0YXQ2NAogICAgICAjIGZzdGF0IC0gZ2V0IGZpbGUgc3RhdHVzCiAgICAgIC0gZnN0YXQKICAgICAgIyBsc3RhdCAtIGdldCBmaWxlIHN0YXR1cwogICAgICAtIGxzdGF0CiAgICAgICMgZ2V0eGF0dHIgLSByZXRyaWV2ZSBhbiBleHRlbmRlZCBhdHRyaWJ1dGUgdmFsdWUKICAgICAgLSBnZXR4YXR0cgogICAgICAjIGxnZXR4YXR0ciAtIHJldHJpZXZlIGFuIGV4dGVuZGVkIGF0dHJpYnV0ZSB2YWx1ZQogICAgICAtIGxnZXR4YXR0cgogICAgICAjIGZnZXR4YXR0ciAtIHJldHJpZXZlIGFuIGV4dGVuZGVkIGF0dHJpYnV0ZSB2YWx1ZQogICAgICAtIGZnZXR4YXR0cgogICAgZWNzOiAqZWNzLWZpbGUKICAtIGFjdGlvbjogY2hlY2tlZC1maWxlc3lzdGVtLW1ldGFkYXRhLW9mCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGVzeXN0ZW0KICAgIHN5c2NhbGxzOgogICAgICAjIHN0YXRmcyAtIGdldCBmaWxlc3lzdGVtIHN0YXRpc3RpY3MKICAgICAgLSBzdGF0ZnMKICAgICAgIyBmc3RhdGZzIC0gZ2V0IGZpbGVzeXN0ZW0gc3RhdGlzdGljcwogICAgICAtIGZzdGF0ZnMKICAgIGVjczogKmVjcy1maWxlCiAgLSBhY3Rpb246IHN5bWxpbmtlZAogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBzeW1saW5rIC0gbWFrZSBhIG5ldyBuYW1lIGZvciBhIGZpbGUKICAgICAgLSBzeW1saW5rCiAgICAgICMgc3ltbGlua2F0IC0gbWFrZSBhIG5ldyBuYW1lIGZvciBhIGZpbGUKICAgICAgLSBzeW1saW5rYXQKICAgIGVjczoKICAgICAgPDw6ICplY3MtZmlsZQogICAgICAjICJjcmVhdGlvbiIgc2luY2Ugd2UncmUgY3JlYXRpbmcgYSBuZXcgZmlsZSBzeXN0ZW0KICAgICAgIyBlbnRyeSBmb3IgdGhlIHN5bWxpbmsKICAgICAgdHlwZTogY3JlYXRpb24KICAtIGFjdGlvbjogdW5tb3VudGVkCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGVzeXN0ZW0KICAgIHN5c2NhbGxzOgogICAgICAjIHVtb3VudCAtIHVubW91bnQgZmlsZXN5c3RlbQogICAgICAtIHVtb3VudAogICAgICAjIHVtb3VudDIgLSB1bm1vdW50IGZpbGVzeXN0ZW0KICAgICAgLSB1bW91bnQyCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgIyAiZGVsZXRpb24iIHRvIG1pcnJvciB0aGUgImNyZWF0aW9uIiBvZiB0aGUgbW91bnQKICAgICAgdHlwZTogZGVsZXRpb24KICAtIGFjdGlvbjogZGVsZXRlZAogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBybWRpciAtIGRlbGV0ZSBhIGRpcmVjdG9yeQogICAgICAtIHJtZGlyCiAgICAgICMgdW5saW5rIC0gZGVsZXRlIGEgbmFtZSBhbmQgcG9zc2libHkgdGhlIGZpbGUgaXQgcmVmZXJzIHRvCiAgICAgIC0gdW5saW5rCiAgICAgICMgdW5saW5rYXQgLSBkZWxldGUgYSBuYW1lIGFuZCBwb3NzaWJseSB0aGUgZmlsZSBpdCByZWZlcnMgdG8KICAgICAgLSB1bmxpbmthdAogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgIHR5cGU6IGRlbGV0aW9uCiAgLSBhY3Rpb246IGNoYW5nZWQtdGltZXN0YW1wLW9mCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIHV0aW1lIC0gY2hhbmdlIGZpbGUgbGFzdCBhY2Nlc3MgYW5kIG1vZGlmaWNhdGlvbiB0aW1lcwogICAgICAtIHV0aW1lCiAgICAgICMgdXRpbWVzIC0gY2hhbmdlIGZpbGUgbGFzdCBhY2Nlc3MgYW5kIG1vZGlmaWNhdGlvbiB0aW1lcwogICAgICAtIHV0aW1lcwogICAgICAjIGZ1dGltZXNhdCAtIGNoYW5nZSB0aW1lc3RhbXBzIG9mIGEgZmlsZSByZWxhdGl2ZSB0byBhIFwgZGlyZWN0b3J5IGZpbGUgZGVzY3JpcHRvcgogICAgICAtIGZ1dGltZXNhdAogICAgICAjIGZ1dGltZW5zIC0gY2hhbmdlIGZpbGUgdGltZXN0YW1wcyB3aXRoIG5hbm9zZWNvbmQgcHJlY2lzaW9uCiAgICAgIC0gZnV0aW1lbnMKICAgICAgIyB1dGltZW5zYXQgLSBjaGFuZ2UgZmlsZSB0aW1lc3RhbXBzIHdpdGggbmFub3NlY29uZCBwcmVjaXNpb24KICAgICAgLSB1dGltZW5zYXQKICAgIGVjczogKmVjcy1maWxlCiAgLSBhY3Rpb246IGV4ZWN1dGVkCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIGV4ZWN2ZSAtIGV4ZWN1dGUgcHJvZ3JhbQogICAgICAtIGV4ZWN2ZQogICAgICAjIGV4ZWN2ZWF0IC0gZXhlY3V0ZSBwcm9ncmFtIHJlbGF0aXZlIHRvIGEgZGlyZWN0b3J5IGZpbGUgZGVzY3JpcHRvcgogICAgICAtIGV4ZWN2ZWF0CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogc3RhcnQKICAtIGFjdGlvbjogbGlzdGVuLWZvci1jb25uZWN0aW9ucwogICAgb2JqZWN0OgogICAgICB3aGF0OiBzb2NrZXQKICAgIHN5c2NhbGxzOgogICAgICAjIGxpc3Rlbi0gbGlzdGVuIGZvciBjb25uZWN0aW9ucyBvbiBhIHNvY2tldAogICAgICAtIGxpc3RlbgogICAgZWNzOgogICAgICA8PDogKmVjcy1uZXR3b3JrCiAgICAgIHR5cGU6IHN0YXJ0CiAgLSBhY3Rpb246IGFjY2VwdGVkLWNvbm5lY3Rpb24tZnJvbQogICAgb2JqZWN0OgogICAgICB3aGF0OiBzb2NrZXQKICAgIHN5c2NhbGxzOgogICAgICAjIGFjY2VwdCAtIGFjY2VwdCBhIGNvbm5lY3Rpb24gb24gYSBzb2NrZXQKICAgICAgLSBhY2NlcHQKICAgICAgIyBhY2NlcHQ0IC0gYWNjZXB0IGEgY29ubmVjdGlvbiBvbiBhIHNvY2tldAogICAgICAtIGFjY2VwdDQKICAgIGVjczoKICAgICAgPDw6ICplY3MtbmV0d29yawogICAgICB0eXBlOgogICAgICAgIC0gY29ubmVjdGlvbgogICAgICAgIC0gc3RhcnQKICAtIGFjdGlvbjogYm91bmQtc29ja2V0CiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNvY2tldAogICAgc3lzY2FsbHM6CiAgICAgICMgYmluZCAtYmluZCBhIG5hbWUgdG8gYSBzb2NrZXQKICAgICAgLSBiaW5kCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLW5ldHdvcmsKICAgICAgdHlwZTogc3RhcnQKICAtIGFjdGlvbjogY29ubmVjdGVkLXRvCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNvY2tldAogICAgc3lzY2FsbHM6CiAgICAgIC0gY29ubmVjdAogICAgZWNzOgogICAgICA8PDogKmVjcy1uZXR3b3JrCiAgICAgIHR5cGU6CiAgICAgICAgLSBjb25uZWN0aW9uCiAgICAgICAgLSBzdGFydAogIC0gYWN0aW9uOiByZWNlaXZlZC1mcm9tCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNvY2tldAogICAgc3lzY2FsbHM6CiAgICAgICMgcmVjdiAtIHJlY2VpdmUgYSBtZXNzYWdlIGZyb20gYSBzb2NrZXQKICAgICAgLSByZWN2CiAgICAgICMgcmVjdmZyb20gLSByZWNlaXZlIGEgbWVzc2FnZSBmcm9tIGEgc29ja2V0CiAgICAgIC0gcmVjdmZyb20KICAgICAgIyByZWN2bXNnIC0gcmVjZWl2ZSBhIG1lc3NhZ2UgZnJvbSBhIHNvY2tldAogICAgICAtIHJlY3Ztc2cKICAgICAgIyByZWN2bW1zZyAtIHJlY2VpdmUgbXVsdGlwbGUgbWVzc2FnZXMgb24gYSBzb2NrZXQKICAgICAgLSByZWN2bW1zZwogICAgZWNzOgogICAgICA8PDogKmVjcy1uZXR3b3JrCiAgLSBhY3Rpb246IHNlbnQtdG8KICAgIG9iamVjdDoKICAgICAgd2hhdDogc29ja2V0CiAgICBzeXNjYWxsczoKICAgICAgIyBzZW5kIC0gc2VuZCBhIG1lc3NhZ2Ugb24gYSBzb2NrZXQKICAgICAgLSBzZW5kCiAgICAgICMgc2VuZHRvIC0gc2VuZCBhIG1lc3NhZ2Ugb24gYSBzb2NrZXQKICAgICAgLSBzZW5kdG8KICAgICAgIyBzZW5kbXNnIC0gc2VuZCBhIG1lc3NhZ2Ugb24gYSBzb2NrZXQKICAgICAgLSBzZW5kbXNnCiAgICAgICMgc2VuZG1tc2cgLSBzZW5kIG11bHRpcGxlIG1lc3NhZ2VzIG9uIGEgc29ja2V0CiAgICAgIC0gc2VuZG1tc2cKICAgIGVjczoKICAgICAgPDw6ICplY3MtbmV0d29yawogIC0gYWN0aW9uOiBraWxsZWQtcGlkCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHByb2Nlc3MKICAgIHN5c2NhbGxzOgogICAgICAjIGtpbGwgLSBzZW5kIHNpZ25hbCB0byBhIHByb2Nlc3MKICAgICAgLSBraWxsCiAgICAgICMgdGtpbGwgLSBzZW5kIGEgc2lnbmFsIHRvIGEgdGhyZWFkCiAgICAgIC0gdGtpbGwKICAgICAgIyB0Z2tpbGwgLSBzZW5kIGEgc2lnbmFsIHRvIGEgdGhyZWFkCiAgICAgIC0gdGdraWxsCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogZW5kCiAgLSBhY3Rpb246IGNoYW5nZWQtaWRlbnRpdHktb2YKICAgIG9iamVjdDoKICAgICAgd2hhdDogcHJvY2VzcwogICAgaG93OiBzeXNjYWxsCiAgICBzeXNjYWxsczoKICAgICAgIyBzZXR1aWQgLSBzZXQgdXNlciBpZGVudGl0eQogICAgICAtIHNldHVpZAogICAgICAjIHNldGV1aWQgLSBzZXQgZWZmZWN0aXZlIHVzZXIgb3IgZ3JvdXAgSUQKICAgICAgLSBzZXRldWlkCiAgICAgICMgc2V0ZnN1aWQgLSBzZXQgdXNlciBpZGVudGl0eSB1c2VkIGZvciBmaWxlc3lzdGVtIGNoZWNrcwogICAgICAtIHNldGZzdWlkCiAgICAgICMgc2V0cmV1aWQgLSBzZXQgcmVhbCBhbmQvb3IgZWZmZWN0aXZlIHVzZXIgb3IgZ3JvdXAgSUQKICAgICAgLSBzZXRyZXVpZAogICAgICAjIHNldGdpZCAtIHNldCBncm91cCBpZGVudGl0eQogICAgICAtIHNldGdpZAogICAgICAjIHNldGVnaWQgLSBzZXQgZWZmZWN0aXZlIHVzZXIgb3IgZ3JvdXAgSUQKICAgICAgLSBzZXRlZ2lkCiAgICAgICMgc2V0ZnNnaWQgLSBzZXQgZ3JvdXAgaWRlbnRpdHkgdXNlZCBmb3IgZmlsZXN5c3RlbSBjaGVja3MKICAgICAgLSBzZXRmc2dpZAogICAgICAjIHNldHJlZ2lkIC0gc2V0IHJlYWwgYW5kL29yIGVmZmVjdGl2ZSB1c2VyIG9yIGdyb3VwIElECiAgICAgIC0gc2V0cmVnaWQKICAgICAgIyBzZXRyZXN1aWQgLSBzZXQgcmVhbCwgZWZmZWN0aXZlIGFuZCBzYXZlZCB1c2VyIG9yIGdyb3VwIElECiAgICAgIC0gc2V0cmVzdWlkCiAgICAgICMgc2V0cmVzZ2lkIC0gc2V0IHJlYWwsIGVmZmVjdGl2ZSBhbmQgc2F2ZWQgdXNlciBvciBncm91cCBJRAogICAgICAtIHNldHJlc2dpZAogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IGNoYW5nZQogIC0gYWN0aW9uOiBjaGFuZ2VkLXN5c3RlbS10aW1lCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHN5c3RlbQogICAgc3lzY2FsbHM6CiAgICAgICMgc2V0dGltZW9mZGF5IC0gZ2V0IC8gc2V0IHRpbWUKICAgICAgLSBzZXR0aW1lb2ZkYXkKICAgICAgIyBjbG9ja19zZXR0aW1lIC0gY2xvY2sgYW5kIHRpbWUgZnVuY3Rpb25zCiAgICAgIC0gY2xvY2tfc2V0dGltZQogICAgICAjIHN0aW1lIC0gc2V0IHRpbWUKICAgICAgLSBzdGltZQogICAgICAjIGFkanRpbWV4IC0gdHVuZSBrZXJuZWwgY2xvY2sKICAgICAgLSBhZGp0aW1leAogICAgZWNzOgogICAgICA8PDogKmVjcy1ob3N0CiAgICAgIHR5cGU6IGNoYW5nZQogIC0gYWN0aW9uOiBtYWtlLWRldmljZQogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBta25vZCAtIGNyZWF0ZSBhIHNwZWNpYWwgb3Igb3JkaW5hcnkgZmlsZQogICAgICAtIG1rbm9kCiAgICAgICMgbWtub2RhdCAtIGNyZWF0ZSBhIHNwZWNpYWwgb3Igb3JkaW5hcnkgZmlsZQogICAgICAtIG1rbm9kYXQKICAgIGVjczoKICAgICAgPDw6ICplY3MtZmlsZQogICAgICB0eXBlOiBjcmVhdGlvbgogIC0gYWN0aW9uOiBjaGFuZ2VkLXN5c3RlbS1uYW1lCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHN5c3RlbQogICAgc3lzY2FsbHM6CiAgICAgICMgc2V0aG9zdG5hbWUgLSBnZXQvc2V0IGhvc3RuYW1lCiAgICAgIC0gc2V0aG9zdG5hbWUKICAgICAgIyBzZXRkb21haW5uYW1lIC0gZ2V0L3NldCBOSVMgZG9tYWluIG5hbWUKICAgICAgLSBzZXRkb21haW5uYW1lCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWhvc3QKICAgICAgdHlwZTogY2hhbmdlCiAgLSBhY3Rpb246IGFsbG9jYXRlZC1tZW1vcnkKICAgIG9iamVjdDoKICAgICAgd2hhdDogbWVtb3J5CiAgICBzeXNjYWxsczoKICAgICAgIyBtbWFwIC0gbWFwIG9yIHVubWFwIGZpbGVzIG9yIGRldmljZXMgaW50byBtZW1vcnkKICAgICAgLSBtbWFwCiAgICAgICMgbW1hcDIgLSBtYXAgZmlsZXMgb3IgZGV2aWNlcyBpbnRvIG1lbW9yeQogICAgICAtIG1tYXAyCiAgICAgICMgYnJrIC0gY2hhbmdlIGRhdGEgc2VnbWVudCBzaXplCiAgICAgIC0gYnJrCiAgICBlY3M6ICplY3MtcHJvY2VzcwogIC0gYWN0aW9uOiBhZGp1c3RlZC1zY2hlZHVsaW5nLXBvbGljeS1vZgogICAgb2JqZWN0OgogICAgICB3aGF0OiBwcm9jZXNzCiAgICBob3c6IHN5c2NhbGwKICAgIHN5c2NhbGxzOgogICAgICAjIHNjaGVkX3NldHBhcmFtIC0gc2V0IGFuZCBnZXQgc2NoZWR1bGluZyBwYXJhbWV0ZXJzCiAgICAgIC0gc2NoZWRfc2V0cGFyYW0KICAgICAgIyBzY2hlZF9zZXRzY2hlZHVsZXIgLSBzZXQgYW5kIGdldCBzY2hlZHVsaW5nIHBvbGljeS9wYXJhbWV0ZXJzCiAgICAgIC0gc2NoZWRfc2V0c2NoZWR1bGVyCiAgICAgICMgc2NoZWRfc2V0YXR0ciAtIHNldCBhbmQgZ2V0IHNjaGVkdWxpbmcgcG9saWN5IGFuZCBhdHRyaWJ1dGVzCiAgICAgIC0gc2NoZWRfc2V0YXR0cgogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IGNoYW5nZQoKICAjIEN1cnJlbnRseSB1bmhhbmRsZWQKICAjIHRoaXMgbGlzdCBjb21lcyBmcm9tIHBhcnNpbmcgbGludXggbWFuIHBhZ2VzIGF0IGh0dHBzOi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9kb2NzL21hbi1wYWdlcy9tYW4tcGFnZXMuZ2l0CgogICMgc2lnYWN0aW9uIC0gZXhhbWluZSBhbmQgY2hhbmdlIGEgc2lnbmFsIGFjdGlvbgogICMgcnRfc2lnYWN0aW9uIC0gZXhhbWluZSBhbmQgY2hhbmdlIGEgc2lnbmFsIGFjdGlvbgogICMgcHJlYWQgLSByZWFkIGZyb20gb3Igd3JpdGUgdG8gYSBmaWxlIGRlc2NyaXB0b3IgYXQgYSBnaXZlbiBvZmZzZXQKICAjIHB3cml0ZSAtIHJlYWQgZnJvbSBvciB3cml0ZSB0byBhIGZpbGUgZGVzY3JpcHRvciBhdCBhIGdpdmVuIG9mZnNldAogICMgczM5MF9ndWFyZGVkX3N0b3JhZ2UgLSBvcGVyYXRpb25zIHdpdGggei9BcmNoaXRlY3R1cmUgZ3VhcmRlZCBzdG9yYWdlIGZhY2lsaXR5CiAgIyBzY2hlZF9nZXRhdHRyIC0gc2V0IGFuZCBnZXQgc2NoZWR1bGluZyBwb2xpY3kgYW5kIGF0dHJpYnV0ZXMKICAjIGdldHJ1c2FnZSAtIGdldCByZXNvdXJjZSB1c2FnZQogICMgZmxvY2sgLSBhcHBseSBvciByZW1vdmUgYW4gYWR2aXNvcnkgbG9jayBvbiBhbiBvcGVuIGZpbGUKICAjIHBpZGZkX2dldGZkIC0gb2J0YWluIGEgZHVwbGljYXRlIG9mIGFub3RoZXIgcHJvY2VzcydzIGZpbGUgZGVzY3JpcHRvcgogICMgY2xvY2tfbmFub3NsZWVwIC0gaGlnaC1yZXNvbHV0aW9uIHNsZWVwIHdpdGggc3BlY2lmaWFibGUgY2xvY2sKICAjIGdldHBhZ2VzaXplIC0gZ2V0IG1lbW9yeSBwYWdlIHNpemUKICAjIHBpZGZkX29wZW4gLSBvYnRhaW4gYSBmaWxlIGRlc2NyaXB0b3IgdGhhdCByZWZlcnMgdG8gYSBwcm9jZXNzCiAgIyBzcGxpY2UgLSBzcGxpY2UgZGF0YSB0by9mcm9tIGEgcGlwZQogICMgZ2V0cmVzdWlkIC0gZ2V0IHJlYWwsIGVmZmVjdGl2ZSBhbmQgc2F2ZWQgdXNlci9ncm91cCBJRHMKICAjIGdldHJlc2dpZCAtIGdldCByZWFsLCBlZmZlY3RpdmUgYW5kIHNhdmVkIHVzZXIvZ3JvdXAgSURzCiAgIyByZW1hcF9maWxlX3BhZ2VzIC0gY3JlYXRlIGEgbm9ubGluZWFyIGZpbGUgbWFwcGluZwogICMgaW9fY2FuY2VsIC0gY2FuY2VsIGFuIG91dHN0YW5kaW5nIGFzeW5jaHJvbm91cyBJL08gb3BlcmF0aW9uCiAgIyBwcmN0bCAtIG9wZXJhdGlvbnMgb24gYSBwcm9jZXNzIG9yIHRocmVhZAogICMgY2xvY2tfZ2V0cmVzIC0gY2xvY2sgYW5kIHRpbWUgZnVuY3Rpb25zCiAgIyBjbG9ja19nZXR0aW1lIC0gY2xvY2sgYW5kIHRpbWUgZnVuY3Rpb25zCiAgIyBnZXRncm91cHMgLSBnZXQvc2V0IGxpc3Qgb2Ygc3VwcGxlbWVudGFyeSBncm91cCBJRHMKICAjIHNldGdyb3VwcyAtIGdldC9zZXQgbGlzdCBvZiBzdXBwbGVtZW50YXJ5IGdyb3VwIElEcwogICMgdm1zcGxpY2UgLSBzcGxpY2UgdXNlciBwYWdlcyB0by9mcm9tIGEgcGlwZQogICMgZXBvbGxfY3JlYXRlIC0gb3BlbiBhbiBlcG9sbCBmaWxlIGRlc2NyaXB0b3IKICAjIGVwb2xsX2NyZWF0ZTEgLSBvcGVuIGFuIGVwb2xsIGZpbGUgZGVzY3JpcHRvcgogICMgcG9zaXhfZmFkdmlzZSAtIHByZWRlY2xhcmUgYW4gYWNjZXNzIHBhdHRlcm4gZm9yIGZpbGUgZGF0YQogICMgc2lnd2FpdGluZm8gLSBzeW5jaHJvbm91c2x5IHdhaXQgZm9yIHF1ZXVlZCBzaWduYWxzCiAgIyBzaWd0aW1lZHdhaXQgLSBzeW5jaHJvbm91c2x5IHdhaXQgZm9yIHF1ZXVlZCBzaWduYWxzCiAgIyBydF9zaWd0aW1lZHdhaXQgLSBzeW5jaHJvbm91c2x5IHdhaXQgZm9yIHF1ZXVlZCBzaWduYWxzCiAgIyBzaWdyZXR1cm4gLSByZXR1cm4gZnJvbSBzaWduYWwgaGFuZGxlciBhbmQgY2xlYW51cCBzdGFjayBmcmFtZQogICMgcnRfc2lncmV0dXJuIC0gcmV0dXJuIGZyb20gc2lnbmFsIGhhbmRsZXIgYW5kIGNsZWFudXAgc3RhY2sgZnJhbWUKICAjIGdldHJhbmRvbSAtIG9idGFpbiBhIHNlcmllcyBvZiByYW5kb20gYnl0ZXMKICAjIGtleWN0bCAtIG1hbmlwdWxhdGUgdGhlIGtlcm5lbCdzIGtleSBtYW5hZ2VtZW50IGZhY2lsaXR5CiAgIyBzY2hlZF9nZXRzY2hlZHVsZXIgLSBzZXQgYW5kIGdldCBzY2hlZHVsaW5nIHBvbGljeS9wYXJhbWV0ZXJzCiAgIyBtYmluZCAtIHNldCBtZW1vcnkgcG9saWN5IGZvciBhIG1lbW9yeSByYW5nZQogICMgZ2V0cHJpb3JpdHkgLSBnZXQvc2V0IHByb2dyYW0gc2NoZWR1bGluZyBwcmlvcml0eQogICMgc2V0cHJpb3JpdHkgLSBnZXQvc2V0IHByb2dyYW0gc2NoZWR1bGluZyBwcmlvcml0eQogICMgaW5vdGlmeV9pbml0IC0gaW5pdGlhbGl6ZSBhbiBpbm90aWZ5IGluc3RhbmNlCiAgIyBpbm90aWZ5X2luaXQxIC0gaW5pdGlhbGl6ZSBhbiBpbm90aWZ5IGluc3RhbmNlCiAgIyBzZW1jdGwgLSBTeXN0ZW0gViBzZW1hcGhvcmUgY29udHJvbCBvcGVyYXRpb25zCiAgIyBnZXRob3N0bmFtZSAtIGdldC9zZXQgaG9zdG5hbWUKICAjIHB0cmFjZSAtIHByb2Nlc3MgdHJhY2UKICAjIHN5c2N0bCAtIHJlYWQvd3JpdGUgc3lzdGVtIHBhcmFtZXRlcnMKICAjIGdldHBlZXJuYW1lIC0gZ2V0IG5hbWUgb2YgY29ubmVjdGVkIHBlZXIgc29ja2V0CiAgIyBmb3JrIC0gY3JlYXRlIGEgY2hpbGQgcHJvY2VzcwogICMgcXVlcnlfbW9kdWxlIC0gcXVlcnkgdGhlIGtlcm5lbCBmb3IgdmFyaW91cyBiaXRzIHBlcnRhaW5pbmcgdG8gbW9kdWxlcwogICMgaW9jdGxfbGlzdCAtIGxpc3Qgb2YgaW9jdGwgY2FsbHMgaW4gTGludXgvaTM4NiBrZXJuZWwKICAjIG1zZ2dldCAtIGdldCBhIFN5c3RlbSBWIG1lc3NhZ2UgcXVldWUgaWRlbnRpZmllcgogICMgc3B1X2NyZWF0ZSAtIGNyZWF0ZSBhIG5ldyBzcHUgY29udGV4dAogICMgc3VicGFnZV9wcm90IC0gZGVmaW5lIGEgc3VicGFnZSBwcm90ZWN0aW9uIGZvciBhbiBhZGRyZXNzIHJhbmdlCiAgIyBxdW90YWN0bCAtIG1hbmlwdWxhdGUgZGlzayBxdW90YXMKICAjIG5mc3NlcnZjdGwgLSBzeXNjYWxsIGludGVyZmFjZSB0byBrZXJuZWwgbmZzIGRhZW1vbgogICMgb3BlbmF0MiAtIG9wZW4gYW5kIHBvc3NpYmx5IGNyZWF0ZSBhIGZpbGUgKGV4dGVuZGVkKQogICMgZ2V0cmxpbWl0IC0gZ2V0L3NldCByZXNvdXJjZSBsaW1pdHMKICAjIHNldHJsaW1pdCAtIGdldC9zZXQgcmVzb3VyY2UgbGltaXRzCiAgIyBwcmxpbWl0IC0gZ2V0L3NldCByZXNvdXJjZSBsaW1pdHMKICAjIHRlZSAtIGR1cGxpY2F0aW5nIHBpcGUgY29udGVudAogICMgc2htZ2V0IC0gYWxsb2NhdGVzIGEgU3lzdGVtIFYgc2hhcmVkIG1lbW9yeSBzZWdtZW50CiAgIyBjcmVhdGVfbW9kdWxlIC0gY3JlYXRlIGEgbG9hZGFibGUgbW9kdWxlIGVudHJ5CiAgIyBnZXR0aW1lb2ZkYXkgLSBnZXQgLyBzZXQgdGltZQogICMgdGltZXJfY3JlYXRlIC0gY3JlYXRlIGEgUE9TSVggcGVyLXByb2Nlc3MgdGltZXIKICAjIGZhbm90aWZ5X21hcmsgLSBhZGQsIHJlbW92ZSwgb3IgbW9kaWZ5IGFuIGZhbm90aWZ5IG1hcmsgb24gYSBmaWxlc3lzdGVtIG9iamVjdAogICMgcGlwZSAtIGNyZWF0ZSBwaXBlCiAgIyBwaXBlMiAtIGNyZWF0ZSBwaXBlCiAgIyBpbnRybyAtIGludHJvZHVjdGlvbiB0byBzeXN0ZW0gY2FsbHMKICAjIGxvb2t1cF9kY29va2llIC0gcmV0dXJuIGEgZGlyZWN0b3J5IGVudHJ5J3MgcGF0aAogICMgc3lzZnMgLSBnZXQgZmlsZXN5c3RlbSB0eXBlIGluZm9ybWF0aW9uCiAgIyBzMzkwX3J1bnRpbWVfaW5zdHIgLSBlbmFibGUvZGlzYWJsZSBzMzkwIENQVSBydW4tdGltZSBpbnN0cnVtZW50YXRpb24KICAjIHNldG5zIC0gcmVhc3NvY2lhdGUgdGhyZWFkIHdpdGggYSBuYW1lc3BhY2UKICAjIHNldF9tZW1wb2xpY3kgLSBzZXQgZGVmYXVsdCBOVU1BIG1lbW9yeSBwb2xpY3kgZm9yIGEgdGhyZWFkIGFuZCBpdHMgY2hpbGRyZW4KICAjIG5pY2UgLSBjaGFuZ2UgcHJvY2VzcyBwcmlvcml0eQogICMgaW9fc2V0dXAgLSBjcmVhdGUgYW4gYXN5bmNocm9ub3VzIEkvTyBjb250ZXh0CiAgIyBtaW5jb3JlIC0gZGV0ZXJtaW5lIHdoZXRoZXIgcGFnZXMgYXJlIHJlc2lkZW50IGluIG1lbW9yeQogICMgaW9jdGxfY29uc29sZSAtIGlvY3RscyBmb3IgY29uc29sZSB0ZXJtaW5hbCBhbmQgdmlydHVhbCBjb25zb2xlcwogICMgcG9sbCAtIHdhaXQgZm9yIHNvbWUgZXZlbnQgb24gYSBmaWxlIGRlc2NyaXB0b3IKICAjIHBwb2xsIC0gd2FpdCBmb3Igc29tZSBldmVudCBvbiBhIGZpbGUgZGVzY3JpcHRvcgogICMgY2FwZ2V0IC0gc2V0L2dldCBjYXBhYmlsaXRpZXMgb2YgdGhyZWFkKHMpCiAgIyBjYXBzZXQgLSBzZXQvZ2V0IGNhcGFiaWxpdGllcyBvZiB0aHJlYWQocykKICAjIGlvY3RsX3R0eSAtIGlvY3RscyBmb3IgdGVybWluYWxzIGFuZCBzZXJpYWwgbGluZXMKICAjIGlvcGwgLSBjaGFuZ2UgSS9PIHByaXZpbGVnZSBsZXZlbAogICMgaW9fZ2V0ZXZlbnRzIC0gcmVhZCBhc3luY2hyb25vdXMgSS9PIGV2ZW50cyBmcm9tIHRoZSBjb21wbGV0aW9uIHF1ZXVlCiAgIyBwcm9jZXNzX3ZtX3JlYWR2IC0gdHJhbnNmZXIgZGF0YSBiZXR3ZWVuIHByb2Nlc3MgYWRkcmVzcyBzcGFjZXMKICAjIHByb2Nlc3Nfdm1fd3JpdGV2IC0gdHJhbnNmZXIgZGF0YSBiZXR3ZWVuIHByb2Nlc3MgYWRkcmVzcyBzcGFjZXMKICAjIHBjaWNvbmZpZ19yZWFkIC0gcGNpIGRldmljZSBpbmZvcm1hdGlvbiBoYW5kbGluZwogICMgcGNpY29uZmlnX3dyaXRlIC0gcGNpIGRldmljZSBpbmZvcm1hdGlvbiBoYW5kbGluZwogICMgcGNpY29uZmlnX2lvYmFzZSAtIHBjaSBkZXZpY2UgaW5mb3JtYXRpb24gaGFuZGxpbmcKICAjIHNicmsgLSBjaGFuZ2UgZGF0YSBzZWdtZW50IHNpemUKICAjIHNldF90aWRfYWRkcmVzcyAtIHNldCBwb2ludGVyIHRvIHRocmVhZCBJRAogICMgcGtleV9hbGxvYyAtIGFsbG9jYXRlIG9yIGZyZWUgYSBwcm90ZWN0aW9uIGtleQogICMgcGtleV9mcmVlIC0gYWxsb2NhdGUgb3IgZnJlZSBhIHByb3RlY3Rpb24ga2V5CiAgIyBzZWxlY3QgLSBzeW5jaHJvbm91cyBJL08gbXVsdGlwbGV4aW5nCiAgIyBwc2VsZWN0IC0gc3luY2hyb25vdXMgSS9PIG11bHRpcGxleGluZwogICMga2V4ZWNfbG9hZCAtIGxvYWQgYSBuZXcga2VybmVsIGZvciBsYXRlciBleGVjdXRpb24KICAjIGtleGVjX2ZpbGVfbG9hZCAtIGxvYWQgYSBuZXcga2VybmVsIGZvciBsYXRlciBleGVjdXRpb24KICAjIHBlcnNvbmFsaXR5IC0gc2V0IHRoZSBwcm9jZXNzIGV4ZWN1dGlvbiBkb21haW4KICAjIGlvY3RsX2dldGZzbWFwIC0gcmV0cmlldmUgdGhlIHBoeXNpY2FsIGxheW91dCBvZiB0aGUgZmlsZXN5c3RlbQogICMgaW5vdGlmeV9ybV93YXRjaCAtIHJlbW92ZSBhbiBleGlzdGluZyB3YXRjaCBmcm9tIGFuIGlub3RpZnkgaW5zdGFuY2UKICAjIHBlcmZfZXZlbnRfb3BlbiAtIHNldCB1cCBwZXJmb3JtYW5jZSBtb25pdG9yaW5nCiAgIyB0aW1lcl9nZXRvdmVycnVuIC0gZ2V0IG92ZXJydW4gY291bnQgZm9yIGEgUE9TSVggcGVyLXByb2Nlc3MgdGltZXIKICAjIHdhaXQzIC0gd2FpdCBmb3IgcHJvY2VzcyB0byBjaGFuZ2Ugc3RhdGUsIEJTRCBzdHlsZQogICMgd2FpdDQgLSB3YWl0IGZvciBwcm9jZXNzIHRvIGNoYW5nZSBzdGF0ZSwgQlNEIHN0eWxlCiAgIyBsaW5rIC0gbWFrZSBhIG5ldyBuYW1lIGZvciBhIGZpbGUKICAjIGxpbmthdCAtIG1ha2UgYSBuZXcgbmFtZSBmb3IgYSBmaWxlCiAgIyBzY2hlZF9ycl9nZXRfaW50ZXJ2YWwgLSBnZXQgdGhlIFNDSEVEX1JSIGludGVydmFsIGZvciB0aGUgbmFtZWQgcHJvY2VzcwogICMgbXVubWFwIC0gbWFwIG9yIHVubWFwIGZpbGVzIG9yIGRldmljZXMgaW50byBtZW1vcnkKICAjIHNvY2tldGNhbGwgLSBzb2NrZXQgc3lzdGVtIGNhbGxzCiAgIyBtcmVtYXAgLSByZW1hcCBhIHZpcnR1YWwgbWVtb3J5IGFkZHJlc3MKICAjIHZmb3JrIC0gY3JlYXRlIGEgY2hpbGQgcHJvY2VzcyBhbmQgYmxvY2sgcGFyZW50CiAgIyBzZWNjb21wIC0gb3BlcmF0ZSBvbiBTZWN1cmUgQ29tcHV0aW5nIHN0YXRlIG9mIHRoZSBwcm9jZXNzCiAgIyByZXF1ZXN0X2tleSAtIHJlcXVlc3QgYSBrZXkgZnJvbSB0aGUga2VybmVsJ3Mga2V5IG1hbmFnZW1lbnQgZmFjaWxpdHkKICAjIHN5c2NhbGwgLSBpbmRpcmVjdCBzeXN0ZW0gY2FsbAogICMga2NtcCAtIGNvbXBhcmUgdHdvIHByb2Nlc3NlcyB0byBkZXRlcm1pbmUgaWYgdGhleSBzaGFyZSBhIGtlcm5lbCByZXNvdXJjZQogICMgcmVhZGRpciAtIHJlYWQgZGlyZWN0b3J5IGVudHJ5CiAgIyBpb3Blcm0gLSBzZXQgcG9ydCBpbnB1dC9vdXRwdXQgcGVybWlzc2lvbnMKICAjIHNwdV9ydW4gLSBleGVjdXRlIGFuIFNQVSBjb250ZXh0CiAgIyByZWJvb3QgLSByZWJvb3Qgb3IgZW5hYmxlL2Rpc2FibGUgQ3RybC1BbHQtRGVsCiAgIyByZWFkYWhlYWQgLSBpbml0aWF0ZSBmaWxlIHJlYWRhaGVhZCBpbnRvIHBhZ2UgY2FjaGUKICAjIHNjaGVkX2dldHBhcmFtIC0gc2V0IGFuZCBnZXQgc2NoZWR1bGluZyBwYXJhbWV0ZXJzCiAgIyBhY2N0IC0gc3dpdGNoIHByb2Nlc3MgYWNjb3VudGluZyBvbiBvciBvZmYKICAjIHNpZ3N1c3BlbmQgLSB3YWl0IGZvciBhIHNpZ25hbAogICMgcnRfc2lnc3VzcGVuZCAtIHdhaXQgZm9yIGEgc2lnbmFsCiAgIyBleGl0X2dyb3VwIC0gZXhpdCBhbGwgdGhyZWFkcyBpbiBhIHByb2Nlc3MKICAjIHNvY2tldCAtIGNyZWF0ZSBhbiBlbmRwb2ludCBmb3IgY29tbXVuaWNhdGlvbgogICMgaW9jdGxfdXNlcmZhdWx0ZmQgLSBjcmVhdGUgYSBmaWxlIGRlc2NyaXB0b3IgZm9yIGhhbmRsaW5nIHBhZ2UgZmF1bHRzIGluIHVzZXIgc3BhY2UKICAjIHNjaGVkX2dldF9wcmlvcml0eV9tYXggLSBnZXQgc3RhdGljIHByaW9yaXR5IHJhbmdlCiAgIyBzY2hlZF9nZXRfcHJpb3JpdHlfbWluICAtIGdldCBzdGF0aWMgcHJpb3JpdHkgcmFuZ2UKICAjIGdldGRlbnRzIC0gZ2V0IGRpcmVjdG9yeSBlbnRyaWVzCiAgIyBnZXRkZW50czY0IC0gZ2V0IGRpcmVjdG9yeSBlbnRyaWVzCiAgIyBzZWxlY3QgLSBzeW5jaHJvbm91cyBJL08gbXVsdGlwbGV4aW5nCiAgIyBwc2VsZWN0IC0gc3luY2hyb25vdXMgSS9PIG11bHRpcGxleGluZwogICMgYWxsb2NfaHVnZXBhZ2VzIC0gYWxsb2NhdGUgb3IgZnJlZSBodWdlIHBhZ2VzCiAgIyBmcmVlX2h1Z2VwYWdlcyAtIGFsbG9jYXRlIG9yIGZyZWUgaHVnZSBwYWdlcwogICMgZnN5bmMgLSBzeW5jaHJvbml6ZSBhIGZpbGUncyBpbi1jb3JlIHN0YXRlIHdpdGggc3RvcmFnZSBkZXZpY2UKICAjIGZkYXRhc3luYyAtIHN5bmNocm9uaXplIGEgZmlsZSdzIGluLWNvcmUgc3RhdGUgd2l0aCBzdG9yYWdlIGRldmljZQogICMgc3lzY2FsbHMgLSBMaW51eCBzeXN0ZW0gY2FsbHMKICAjIG1lbWZkX2NyZWF0ZSAtIGNyZWF0ZSBhbiBhbm9ueW1vdXMgZmlsZQogICMgbW9kaWZ5X2xkdCAtIGdldCBvciBzZXQgYSBwZXItcHJvY2VzcyBMRFQgZW50cnkKICAjIGdldF9rZXJuZWxfc3ltcyAtIHJldHJpZXZlIGV4cG9ydGVkIGtlcm5lbCBhbmQgbW9kdWxlIHN5bWJvbHMKICAjIGxzZWVrIC0gcmVwb3NpdGlvbiByZWFkL3dyaXRlIGZpbGUgb2Zmc2V0CiAgIyBzaG1hdCAtIFN5c3RlbSBWIHNoYXJlZCBtZW1vcnkgb3BlcmF0aW9ucwogICMgc2htZHQgLSBTeXN0ZW0gViBzaGFyZWQgbWVtb3J5IG9wZXJhdGlvbnMKICAjIHRpbWVyX2RlbGV0ZSAtIGRlbGV0ZSBhIFBPU0lYIHBlci1wcm9jZXNzIHRpbWVyCiAgIyBwZXJmbW9uY3RsIC0gaW50ZXJmYWNlIHRvIElBLTY0IHBlcmZvcm1hbmNlIG1vbml0b3JpbmcgdW5pdAogICMgbW92ZV9wYWdlcyAtIG1vdmUgaW5kaXZpZHVhbCBwYWdlcyBvZiBhIHByb2Nlc3MgdG8gYW5vdGhlciBub2RlCiAgIyBjaGRpciAtIGNoYW5nZSB3b3JraW5nIGRpcmVjdG9yeQogICMgZmNoZGlyIC0gY2hhbmdlIHdvcmtpbmcgZGlyZWN0b3J5CiAgIyB0aW1lIC0gZ2V0IHRpbWUgaW4gc2Vjb25kcwogICMgX2V4aXQgLSB0ZXJtaW5hdGUgdGhlIGNhbGxpbmcgcHJvY2VzcwogICMgX0V4aXQgLSB0ZXJtaW5hdGUgdGhlIGNhbGxpbmcgcHJvY2VzcwogICMgczM5MF9zdGh5aSAtIGVtdWxhdGUgU1RIWUkgaW5zdHJ1Y3Rpb24KICAjIGlvX3N1Ym1pdCAtIHN1Ym1pdCBhc3luY2hyb25vdXMgSS9PIGJsb2NrcyBmb3IgcHJvY2Vzc2luZwogICMgbWxvY2sgLSBsb2NrIGFuZCB1bmxvY2sgbWVtb3J5CiAgIyBtbG9jazIgLSBsb2NrIGFuZCB1bmxvY2sgbWVtb3J5CiAgIyBtdW5sb2NrIC0gbG9jayBhbmQgdW5sb2NrIG1lbW9yeQogICMgbWxvY2thbGwgLSBsb2NrIGFuZCB1bmxvY2sgbWVtb3J5CiAgIyBtdW5sb2NrYWxsIC0gbG9jayBhbmQgdW5sb2NrIG1lbW9yeQogICMgdW1hc2sgLSBzZXQgZmlsZSBtb2RlIGNyZWF0aW9uIG1hc2sKICAjIGFyY2hfcHJjdGwgLSBzZXQgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHRocmVhZCBzdGF0ZQogICMgdXNlbGliIC0gbG9hZCBzaGFyZWQgbGlicmFyeQogICMgc2VuZGZpbGUgLSB0cmFuc2ZlciBkYXRhIGJldHdlZW4gZmlsZSBkZXNjcmlwdG9ycwogICMgc2htY3RsIC0gU3lzdGVtIFYgc2hhcmVkIG1lbW9yeSBjb250cm9sCiAgIyBlcG9sbF93YWl0IC0gd2FpdCBmb3IgYW4gSS9PIGV2ZW50IG9uIGFuIGVwb2xsIGZpbGUgZGVzY3JpcHRvcgogICMgZXBvbGxfcHdhaXQgLSB3YWl0IGZvciBhbiBJL08gZXZlbnQgb24gYW4gZXBvbGwgZmlsZSBkZXNjcmlwdG9yCiAgIyBzaWdhbHRzdGFjayAtIHNldCBhbmQvb3IgZ2V0IHNpZ25hbCBzdGFjayBjb250ZXh0CiAgIyBpb2N0bCAtIGNvbnRyb2wgZGV2aWNlCiAgIyBzaWduYWxmZCAtIGNyZWF0ZSBhIGZpbGUgZGVzY3JpcHRvciBmb3IgYWNjZXB0aW5nIHNpZ25hbHMKICAjIHVuc2hhcmUgLSBkaXNhc3NvY2lhdGUgcGFydHMgb2YgdGhlIHByb2Nlc3MgZXhlY3V0aW9uIGNvbnRleHQKICAjIGNocm9vdCAtIGNoYW5nZSByb290IGRpcmVjdG9yeQogICMgbWFkdmlzZSAtIGdpdmUgYWR2aWNlIGFib3V0IHVzZSBvZiBtZW1vcnkKICAjIGdldHRpZCAtIGdldCB0aHJlYWQgaWRlbnRpZmljYXRpb24KICAjIGdldHNvY2tuYW1lIC0gZ2V0IHNvY2tldCBuYW1lCiAgIyBpb19kZXN0cm95IC0gZGVzdHJveSBhbiBhc3luY2hyb25vdXMgSS9PIGNvbnRleHQKICAjIHNldHVwIC0gc2V0dXAgZGV2aWNlcyBhbmQgZmlsZXN5c3RlbXMsIG1vdW50IHJvb3QgZmlsZXN5c3RlbQogICMgbnRwX2FkanRpbWUgLSB0dW5lIGtlcm5lbCBjbG9jawogICMgc2VtZ2V0IC0gZ2V0IGEgU3lzdGVtIFYgc2VtYXBob3JlIHNldCBpZGVudGlmaWVyCiAgIyBnZXR1aWQgLSBnZXQgdXNlciBpZGVudGl0eQogICMgZ2V0ZXVpZCAtIGdldCB1c2VyIGlkZW50aXR5CiAgIyBfc3lzY2FsbCAtIGludm9raW5nIGEgc3lzdGVtIGNhbGwgd2l0aG91dCBsaWJyYXJ5IHN1cHBvcnQgKE9CU09MRVRFKQogICMgc2NoZWRfc2V0YWZmaW5pdHkgLSBcIHNldCBhbmQgZ2V0IGEgdGhyZWFkJ3MgQ1BVIGFmZmluaXR5IG1hc2sKICAjIHNjaGVkX2dldGFmZmluaXR5IC0gXCBzZXQgYW5kIGdldCBhIHRocmVhZCdzIENQVSBhZmZpbml0eSBtYXNrCiAgIyBjYWNoZWZsdXNoIC0gZmx1c2ggY29udGVudHMgb2YgaW5zdHJ1Y3Rpb24gYW5kL29yIGRhdGEgY2FjaGUKICAjIHBpdm90X3Jvb3QgLSBjaGFuZ2UgdGhlIHJvb3QgbW91bnQKICAjIG1zZ2N0bCAtIFN5c3RlbSBWIG1lc3NhZ2UgY29udHJvbCBvcGVyYXRpb25zCiAgIyBpb2N0bF9mYXQgLSBtYW5pcHVsYXRpbmcgdGhlIEZBVCBmaWxlc3lzdGVtCiAgIyBzZXRwZ2lkIC0gc2V0L2dldCBwcm9jZXNzIGdyb3VwCiAgIyBnZXRwZ2lkIC0gc2V0L2dldCBwcm9jZXNzIGdyb3VwCiAgIyBzZXRwZ3JwIC0gc2V0L2dldCBwcm9jZXNzIGdyb3VwCiAgIyBnZXRwZ3JwIC0gc2V0L2dldCBwcm9jZXNzIGdyb3VwCiAgIyBzb2NrZXRwYWlyIC0gY3JlYXRlIGEgcGFpciBvZiBjb25uZWN0ZWQgc29ja2V0cwogICMgYmRmbHVzaCAtIHN0YXJ0LCBmbHVzaCwgb3IgdHVuZSBidWZmZXItZGlydHktZmx1c2ggZGFlbW9uCiAgIyBhbGFybSAtIHNldCBhbiBhbGFybSBjbG9jayBmb3IgZGVsaXZlcnkgb2YgYSBzaWduYWwKICAjIHRpbWVyX3NldHRpbWUgLSBhcm0vZGlzYXJtIGFuZCBmZXRjaCBzdGF0ZSBvZiBQT1NJWCBwZXItcHJvY2VzcyB0aW1lcgogICMgdGltZXJfZ2V0dGltZSAtIGFybS9kaXNhcm0gYW5kIGZldGNoIHN0YXRlIG9mIFBPU0lYIHBlci1wcm9jZXNzIHRpbWVyCiAgIyBhZGRfa2V5IC0gYWRkIGEga2V5IHRvIHRoZSBrZXJuZWwncyBrZXkgbWFuYWdlbWVudCBmYWNpbGl0eQogICMgcnRfc2lncXVldWVpbmZvIC0gcXVldWUgYSBzaWduYWwgYW5kIGRhdGEKICAjIHJ0X3Rnc2lncXVldWVpbmZvIC0gcXVldWUgYSBzaWduYWwgYW5kIGRhdGEKICAjIHVzZXJmYXVsdGZkIC0gY3JlYXRlIGEgZmlsZSBkZXNjcmlwdG9yIGZvciBoYW5kbGluZyBwYWdlIGZhdWx0cyBpbiB1c2VyIHNwYWNlCiAgIyBzZW1vcCAtIFN5c3RlbSBWIHNlbWFwaG9yZSBvcGVyYXRpb25zCiAgIyBzZW10aW1lZG9wIC0gU3lzdGVtIFYgc2VtYXBob3JlIG9wZXJhdGlvbnMKICAjIGdldGdpZCAtIGdldCBncm91cCBpZGVudGl0eQogICMgZ2V0ZWdpZCAtIGdldCBncm91cCBpZGVudGl0eQogICMgZ2V0cGlkIC0gZ2V0IHByb2Nlc3MgaWRlbnRpZmljYXRpb24KICAjIGdldHBwaWQgLSBnZXQgcHJvY2VzcyBpZGVudGlmaWNhdGlvbgogICMgc2lncHJvY21hc2sgLSBleGFtaW5lIGFuZCBjaGFuZ2UgYmxvY2tlZCBzaWduYWxzCiAgIyBydF9zaWdwcm9jbWFzayAtIGV4YW1pbmUgYW5kIGNoYW5nZSBibG9ja2VkIHNpZ25hbHMKICAjIHVuYW1lIC0gZ2V0IG5hbWUgYW5kIGluZm9ybWF0aW9uIGFib3V0IGN1cnJlbnQga2VybmVsCiAgIyBzdGF0eCAtIGdldCBmaWxlIHN0YXR1cyAoZXh0ZW5kZWQpCiAgIyBpb2N0bF9maWNsb25lcmFuZ2UgLSBzaGFyZSBzb21lIHRoZSBkYXRhIG9mIG9uZSBmaWxlIHdpdGggYW5vdGhlciBmaWxlCiAgIyBpb2N0bF9maWNsb25lIC0gc2hhcmUgc29tZSB0aGUgZGF0YSBvZiBvbmUgZmlsZSB3aXRoIGFub3RoZXIgZmlsZQogICMgbXFfZ2V0c2V0YXR0ciAtIGdldC9zZXQgbWVzc2FnZSBxdWV1ZSBhdHRyaWJ1dGVzCiAgIyBpb3ByaW9fZ2V0IC0gZ2V0L3NldCBJL08gc2NoZWR1bGluZyBjbGFzcyBhbmQgcHJpb3JpdHkKICAjIGlvcHJpb19zZXQgLSBnZXQvc2V0IEkvTyBzY2hlZHVsaW5nIGNsYXNzIGFuZCBwcmlvcml0eQogICMgZXBvbGxfY3RsIC0gY29udHJvbCBpbnRlcmZhY2UgZm9yIGFuIGVwb2xsIGZpbGUgZGVzY3JpcHRvcgogICMgc3luYyAtIGNvbW1pdCBmaWxlc3lzdGVtIGNhY2hlcyB0byBkaXNrCiAgIyBzeW5jZnMgLSBjb21taXQgZmlsZXN5c3RlbSBjYWNoZXMgdG8gZGlzawogICMgc2V0c2lkIC0gY3JlYXRlcyBhIHNlc3Npb24gYW5kIHNldHMgdGhlIHByb2Nlc3MgZ3JvdXAgSUQKICAjIHNodXRkb3duIC0gc2h1dCBkb3duIHBhcnQgb2YgYSBmdWxsLWR1cGxleCBjb25uZWN0aW9uCiAgIyBnZXRzaWQgLSBnZXQgc2Vzc2lvbiBJRAogICMgZ2V0X3RocmVhZF9hcmVhIC0gbWFuaXB1bGF0ZSB0aHJlYWQtbG9jYWwgc3RvcmFnZSBpbmZvcm1hdGlvbgogICMgc2V0X3RocmVhZF9hcmVhIC0gbWFuaXB1bGF0ZSB0aHJlYWQtbG9jYWwgc3RvcmFnZSBpbmZvcm1hdGlvbgogICMgdGltZXJmZF9jcmVhdGUgLSB0aW1lcnMgdGhhdCBub3RpZnkgdmlhIGZpbGUgZGVzY3JpcHRvcnMKICAjIHRpbWVyZmRfc2V0dGltZSAtIHRpbWVycyB0aGF0IG5vdGlmeSB2aWEgZmlsZSBkZXNjcmlwdG9ycwogICMgdGltZXJmZF9nZXR0aW1lIC0gdGltZXJzIHRoYXQgbm90aWZ5IHZpYSBmaWxlIGRlc2NyaXB0b3JzCiAgIyBpb2N0bF9maWRlZHVwZXJhbmdlIC0gc2hhcmUgc29tZSB0aGUgZGF0YSBvZiBvbmUgZmlsZSB3aXRoIGFub3RoZXIgZmlsZQogICMgbmFtZV90b19oYW5kbGVfYXQgLSBvYnRhaW4gaGFuZGxlIGZvciBhIHBhdGhuYW1lIGFuZCBvcGVuIGZpbGUgdmlhIGEgaGFuZGxlCiAgIyBvcGVuX2J5X2hhbmRsZV9hdCAtIG9idGFpbiBoYW5kbGUgZm9yIGEgcGF0aG5hbWUgYW5kIG9wZW4gZmlsZSB2aWEgYSBoYW5kbGUKICAjIGZ1dGV4IC0gZmFzdCB1c2VyLXNwYWNlIGxvY2tpbmcKICAjIGlvY3RsX25zIC0gaW9jdGwoKSBvcGVyYXRpb25zIGZvciBMaW51eCBuYW1lc3BhY2VzCiAgIyBwaWRmZF9zZW5kX3NpZ25hbCAtIHNlbmQgYSBzaWduYWwgdG8gYSBwcm9jZXNzIHNwZWNpZmllZCBieSBhIGZpbGUgZGVzY3JpcHRvcgogICMgY2xvbmUgLSBjcmVhdGUgYSBjaGlsZCBwcm9jZXNzCiAgIyBfX2Nsb25lMiAtIGNyZWF0ZSBhIGNoaWxkIHByb2Nlc3MKICAjIGNsb25lMyAtIGNyZWF0ZSBhIGNoaWxkIHByb2Nlc3MKICAjIHRpbWVzIC0gZ2V0IHByb2Nlc3MgdGltZXMKICAjIHN5c2luZm8gLSByZXR1cm4gc3lzdGVtIGluZm9ybWF0aW9uCiAgIyBpcGMgLSBTeXN0ZW0gViBJUEMgc3lzdGVtIGNhbGxzCiAgIyBldmVudGZkIC0gY3JlYXRlIGEgZmlsZSBkZXNjcmlwdG9yIGZvciBldmVudCBub3RpZmljYXRpb24KICAjIHdhaXQgLSB3YWl0IGZvciBwcm9jZXNzIHRvIGNoYW5nZSBzdGF0ZQogICMgd2FpdHBpZCAtIHdhaXQgZm9yIHByb2Nlc3MgdG8gY2hhbmdlIHN0YXRlCiAgIyB3YWl0aWQgLSB3YWl0IGZvciBwcm9jZXNzIHRvIGNoYW5nZSBzdGF0ZQogICMgZ2V0ZG9tYWlubmFtZSAtIGdldC9zZXQgTklTIGRvbWFpbiBuYW1lCiAgIyBpZGxlIC0gbWFrZSBwcm9jZXNzIDAgaWRsZQogICMgaW5vdGlmeV9hZGRfd2F0Y2ggLSBhZGQgYSB3YXRjaCB0byBhbiBpbml0aWFsaXplZCBpbm90aWZ5IGluc3RhbmNlCiAgIyBnZXRfbWVtcG9saWN5IC0gcmV0cmlldmUgTlVNQSBtZW1vcnkgcG9saWN5IGZvciBhIHRocmVhZAogICMgYnBmIC0gcGVyZm9ybSBhIGNvbW1hbmQgb24gYW4gZXh0ZW5kZWQgQlBGIG1hcCBvciBwcm9ncmFtCiAgIyBnZXRzb2Nrb3B0IC0gZ2V0IGFuZCBzZXQgb3B0aW9ucyBvbiBzb2NrZXRzCiAgIyBzZXRzb2Nrb3B0IC0gZ2V0IGFuZCBzZXQgb3B0aW9ucyBvbiBzb2NrZXRzCiAgIyBnZXRpdGltZXIgLSBnZXQgb3Igc2V0IHZhbHVlIG9mIGFuIGludGVydmFsIHRpbWVyCiAgIyBzZXRpdGltZXIgLSBnZXQgb3Igc2V0IHZhbHVlIG9mIGFuIGludGVydmFsIHRpbWVyCiAgIyBtZW1iYXJyaWVyIC0gaXNzdWUgbWVtb3J5IGJhcnJpZXJzIG9uIGEgc2V0IG9mIHRocmVhZHMKICAjIG1wcm90ZWN0IC0gc2V0IHByb3RlY3Rpb24gb24gYSByZWdpb24gb2YgbWVtb3J5CiAgIyBwa2V5X21wcm90ZWN0IC0gc2V0IHByb3RlY3Rpb24gb24gYSByZWdpb24gb2YgbWVtb3J5CiAgIyBnZXRjcHUgLSBkZXRlcm1pbmUgQ1BVIGFuZCBOVU1BIG5vZGUgb24gd2hpY2ggdGhlIGNhbGxpbmcgdGhyZWFkIGlzIHJ1bm5pbmcKICAjIGlvY3RsX2ZzbGFiZWwgLSBnZXQgb3Igc2V0IGEgZmlsZXN5c3RlbSBsYWJlbAogICMgbGlzdHhhdHRyIC0gbGlzdCBleHRlbmRlZCBhdHRyaWJ1dGUgbmFtZXMKICAjIGxsaXN0eGF0dHIgLSBsaXN0IGV4dGVuZGVkIGF0dHJpYnV0ZSBuYW1lcwogICMgZmxpc3R4YXR0ciAtIGxpc3QgZXh0ZW5kZWQgYXR0cmlidXRlIG5hbWVzCiAgIyBfbGxzZWVrIC0gcmVwb3NpdGlvbiByZWFkL3dyaXRlIGZpbGUgb2Zmc2V0CiAgIyBmY250bCAtIG1hbmlwdWxhdGUgZmlsZSBkZXNjcmlwdG9yCiAgIyB1c3RhdCAtIGdldCBmaWxlc3lzdGVtIHN0YXRpc3RpY3MKICAjIHNpZ25hbCAtIEFOU0kgQyBzaWduYWwgaGFuZGxpbmcKICAjIG5hbm9zbGVlcCAtIGhpZ2gtcmVzb2x1dGlvbiBzbGVlcAogICMgY29ubmVjdCAtIGluaXRpYXRlIGEgY29ubmVjdGlvbiBvbiBhIHNvY2tldAogICMgdm04Nm9sZCAtIGVudGVyIHZpcnR1YWwgODA4NiBtb2RlCiAgIyB2bTg2IC0gZW50ZXIgdmlydHVhbCA4MDg2IG1vZGUKICAjIGZhbm90aWZ5X2luaXQgLSBjcmVhdGUgYW5kIGluaXRpYWxpemUgZmFub3RpZnkgZ3JvdXAKICAjIG1pZ3JhdGVfcGFnZXMgLSBtb3ZlIGFsbCBwYWdlcyBpbiBhIHByb2Nlc3MgdG8gYW5vdGhlciBzZXQgb2Ygbm9kZXMKICAjIHJlc3RhcnRfc3lzY2FsbCAtIHJlc3RhcnQgYSBzeXN0ZW0gY2FsbCBhZnRlciBpbnRlcnJ1cHRpb24gYnkgYSBzdG9wIHNpZ25hbAogICMgY2xvc2UgLSBjbG9zZSBhIGZpbGUgZGVzY3JpcHRvcgogICMgbXNncmN2IC0gU3lzdGVtIFYgbWVzc2FnZSBxdWV1ZSBvcGVyYXRpb25zCiAgIyBtc2dzbmQgLSBTeXN0ZW0gViBtZXNzYWdlIHF1ZXVlIG9wZXJhdGlvbnMKICAjIHJlYWR2IC0gcmVhZCBvciB3cml0ZSBkYXRhIGludG8gbXVsdGlwbGUgYnVmZmVycwogICMgd3JpdGV2IC0gcmVhZCBvciB3cml0ZSBkYXRhIGludG8gbXVsdGlwbGUgYnVmZmVycwogICMgcHJlYWR2IC0gcmVhZCBvciB3cml0ZSBkYXRhIGludG8gbXVsdGlwbGUgYnVmZmVycwogICMgcHdyaXRldiAtIHJlYWQgb3Igd3JpdGUgZGF0YSBpbnRvIG11bHRpcGxlIGJ1ZmZlcnMKICAjIHByZWFkdjIgLSByZWFkIG9yIHdyaXRlIGRhdGEgaW50byBtdWx0aXBsZSBidWZmZXJzCiAgIyBwd3JpdGV2MiAtIHJlYWQgb3Igd3JpdGUgZGF0YSBpbnRvIG11bHRpcGxlIGJ1ZmZlcnMKICAjIHN5c2xvZyAtIHJlYWQgYW5kL29yIGNsZWFyIGtlcm5lbCBtZXNzYWdlIHJpbmcgYnVmZmVyOyBzZXQgY29uc29sZV9sb2dsZXZlbAogICMga2xvZ2N0bCAtIHJlYWQgYW5kL29yIGNsZWFyIGtlcm5lbCBtZXNzYWdlIHJpbmcgYnVmZmVyOyBzZXQgY29uc29sZV9sb2dsZXZlbAogICMgc2NoZWRfeWllbGQgLSB5aWVsZCB0aGUgcHJvY2Vzc29yCiAgIyB2aGFuZ3VwIC0gdmlydHVhbGx5IGhhbmd1cCB0aGUgY3VycmVudCB0ZXJtaW5hbAogICMgaW9jdGxfaWZsYWdzIC0gaW9jdGwoKSBvcGVyYXRpb25zIGZvciBpbm9kZSBmbGFncwogICMgc2dldG1hc2sgLSBtYW5pcHVsYXRpb24gb2Ygc2lnbmFsIG1hc2sgKG9ic29sZXRlKQogICMgc3NldG1hc2sgLSBtYW5pcHVsYXRpb24gb2Ygc2lnbmFsIG1hc2sgKG9ic29sZXRlKQogICMgc3luY19maWxlX3JhbmdlIC0gc3luYyBhIGZpbGUgc2VnbWVudCB3aXRoIGRpc2sKICAjIGNvcHlfZmlsZV9yYW5nZSAtIENvcHkgYSByYW5nZSBvZiBkYXRhIGZyb20gb25lIGZpbGUgdG8gYW5vdGhlcgogICMgc2lncGVuZGluZyAtIGV4YW1pbmUgcGVuZGluZyBzaWduYWxzCiAgIyBydF9zaWdwZW5kaW5nIC0gZXhhbWluZSBwZW5kaW5nIHNpZ25hbHMKICAjIGdldHVud2luZCAtIGNvcHkgdGhlIHVud2luZCBkYXRhIHRvIGNhbGxlcidzIGJ1ZmZlcgogICMgbXN5bmMgLSBzeW5jaHJvbml6ZSBhIGZpbGUgd2l0aCBhIG1lbW9yeSBtYXAKICAjIGdldF9yb2J1c3RfbGlzdCAtIGdldC9zZXQgbGlzdCBvZiByb2J1c3QgZnV0ZXhlcwogICMgc2V0X3JvYnVzdF9saXN0IC0gZ2V0L3NldCBsaXN0IG9mIHJvYnVzdCBmdXRleGVzCiAgIyBkdXAgLSBkdXBsaWNhdGUgYSBmaWxlIGRlc2NyaXB0b3IKICAjIGR1cDIgLSBkdXBsaWNhdGUgYSBmaWxlIGRlc2NyaXB0b3IKICAjIGR1cDMgLSBkdXBsaWNhdGUgYSBmaWxlIGRlc2NyaXB0b3IKICAjIHMzOTBfcGNpX21taW9fd3JpdGUgLSB0cmFuc2ZlciBkYXRhIHRvL2Zyb20gUENJIE1NSU8gbWVtb3J5IHBhZ2UKICAjIHMzOTBfcGNpX21taW9fcmVhZCAtIHRyYW5zZmVyIGRhdGEgdG8vZnJvbSBQQ0kgTU1JTyBtZW1vcnkgcGFnZQogICMgcGF1c2UgLSB3YWl0IGZvciBzaWduYWwKICAjIHN3YXBvbiAtIHN0YXJ0L3N0b3Agc3dhcHBpbmcgdG8gZmlsZS9kZXZpY2UKICAjIHN3YXBvZmYgLSBzdGFydC9zdG9wIHN3YXBwaW5nIHRvIGZpbGUvZGV2aWNlCgogICMgUmVjb3JkIHR5cGUgbm9ybWFsaXphdGlvbnMKICAjIFVzZWZ1bCBsaW5rczoKICAjIGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS90b3J2YWxkcy9saW51eC92NC4xNi9pbmNsdWRlL3VhcGkvbGludXgvYXVkaXQuaAogICMgaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2xpbnV4LWF1ZGl0L2F1ZGl0LXVzZXJzcGFjZS80ZDkzMzMwMWIxODM1Y2FmYTA4YjllOWVmNzA1YzhmYjZjOTZjYjYyL2xpYi9saWJhdWRpdC5oCiAgIyBodHRwczovL3d3dy5lbGFzdGljLmNvL2d1aWRlL2VuL2Vjcy9jdXJyZW50L2Vjcy1hbGxvd2VkLXZhbHVlcy1ldmVudC1jYXRlZ29yeS5odG1sCgogICMgSUFNIHJlbGF0ZWQgZXZlbnRzCgogICMgQVVESVRfQUNDVF9MT0NLIC0gVXNlcidzIGFjY291bnQgbG9ja2VkIGJ5IGFkbWluCiAgLSByZWNvcmRfdHlwZXM6IEFDQ1RfTE9DSwogICAgYWN0aW9uOiBsb2NrZWQtYWNjb3VudAogICAgZWNzOgogICAgICA8PDogKmVjcy1pYW0KICAgICAgdHlwZToKICAgICAgICAtIHVzZXIKICAgICAgICAtIGluZm8KICAjIEFVRElUX0FDQ1RfVU5MT0NLIC0gVXNlcidzIGFjY291bnQgdW5sb2NrZWQgYnkgYWRtaW4KICAtIHJlY29yZF90eXBlczogQUNDVF9VTkxPQ0sKICAgIGFjdGlvbjogdW5sb2NrZWQtYWNjb3VudAogICAgZWNzOgogICAgICA8PDogKmVjcy1pYW0KICAgICAgdHlwZToKICAgICAgICAtIHVzZXIKICAgICAgICAtIGluZm8KICAjIEFVRElUX0FERF9HUk9VUCAtIEdyb3VwIGFjY291bnQgYWRkZWQKICAtIHJlY29yZF90eXBlczogQUREX0dST1VQCiAgICBhY3Rpb246IGFkZGVkLWdyb3VwLWFjY291bnQtdG8KICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogW2lkLCBhY2N0XQogICAgICB3aGF0OiBhY2NvdW50CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWlhbQogICAgICA8PDogKmVjcy1ncm91cC1tb2RpZmljYXRpb24tbWFwcGluZ3MKICAgICAgdHlwZToKICAgICAgICAtIGdyb3VwCiAgICAgICAgLSBjcmVhdGlvbgoKICAjIEFVRElUX0FERF9VU0VSIC0gVXNlciBhY2NvdW50IGFkZGVkCiAgLSByZWNvcmRfdHlwZXM6IEFERF9VU0VSCiAgICBhY3Rpb246IGFkZGVkLXVzZXItYWNjb3VudAogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBbaWQsIGFjY3RdCiAgICAgIHdoYXQ6IGFjY291bnQKICAgIGVjczoKICAgICAgPDw6ICplY3MtaWFtCiAgICAgIDw8OiAqZWNzLXVzZXItbW9kaWZpY2F0aW9uLW1hcHBpbmdzCiAgICAgIHR5cGU6CiAgICAgICAgLSB1c2VyCiAgICAgICAgLSBjcmVhdGlvbgogICMgQVVESVRfREVMX0dST1VQIC0gR3JvdXAgYWNjb3VudCBkZWxldGVkCiAgLSByZWNvcmRfdHlwZXM6IERFTF9HUk9VUAogICAgYWN0aW9uOiBkZWxldGVkLWdyb3VwLWFjY291bnQtZnJvbQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBbaWQsIGFjY3RdCiAgICAgIHdoYXQ6IGFjY291bnQKICAgIGVjczoKICAgICAgPDw6ICplY3MtaWFtCiAgICAgIDw8OiAqZWNzLWdyb3VwLW1vZGlmaWNhdGlvbi1tYXBwaW5ncwogICAgICB0eXBlOgogICAgICAgIC0gZ3JvdXAKICAgICAgICAtIGRlbGV0aW9uCiAgIyBBVURJVF9ERUxfVVNFUiAtIFVzZXIgYWNjb3VudCBkZWxldGVkCiAgLSByZWNvcmRfdHlwZXM6IERFTF9VU0VSCiAgICBhY3Rpb246IGRlbGV0ZWQtdXNlci1hY2NvdW50CiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IFtpZCwgYWNjdF0KICAgICAgd2hhdDogYWNjb3VudAogICAgZWNzOgogICAgICA8PDogKmVjcy1pYW0KICAgICAgPDw6ICplY3MtdXNlci1tb2RpZmljYXRpb24tbWFwcGluZ3MKICAgICAgdHlwZToKICAgICAgICAtIHVzZXIKICAgICAgICAtIGRlbGV0aW9uCiAgIyBBVURJVF9HUlBfTUdNVCAtIEdyb3VwIGFjY291bnQgYXR0ciB3YXMgbW9kaWZpZWQKICAtIHJlY29yZF90eXBlczogR1JQX01HTVQKICAgIGFjdGlvbjogbW9kaWZpZWQtZ3JvdXAtYWNjb3VudAogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBbaWQsIGFjY3RdCiAgICAgIHdoYXQ6IGFjY291bnQKICAgIGVjczoKICAgICAgPDw6ICplY3MtaWFtCiAgICAgIHR5cGU6CiAgICAgICAgLSBncm91cAogICAgICAgIC0gY2hhbmdlCiAgICAgIG1hcHBpbmdzOgogICAgICAgIC0gZnJvbTogYWN0b3IucHJpbWFyeQogICAgICAgICAgdG86IHVzZXIKICAgICAgICAtIGZyb206IGFjdG9yLnNlY29uZGFyeQogICAgICAgICAgdG86IGdyb3VwLnRhcmdldAogICAgICAgIC0gZnJvbTogdWlkLnVpZAogICAgICAgICAgdG86IHVzZXIuZWZmZWN0aXZlCiAgIyBBVURJVF9ST0xFX0FTU0lHTiAtIEFkbWluIGFzc2lnbmVkIHVzZXIgdG8gcm9sZQogIC0gcmVjb3JkX3R5cGVzOiBST0xFX0FTU0lHTgogICAgYWN0aW9uOiBhc3NpZ25lZC11c2VyLXJvbGUtdG8KICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogW2lkLCBhY2N0XQogICAgICB3aGF0OiBhY2NvdW50CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWlhbQogICAgICB0eXBlOgogICAgICAgIC0gdXNlcgogICAgICAgIC0gY2hhbmdlCiAgIyBBVURJVF9ST0xFX01PRElGWSAtIEFkbWluIG1vZGlmaWVkIGEgcm9sZQogIC0gcmVjb3JkX3R5cGVzOiBST0xFX01PRElGWQogICAgYWN0aW9uOiBtb2RpZmllZC1yb2xlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWlhbQogICAgICB0eXBlOgogICAgICAgIC0gY2hhbmdlCiAgIyBBVURJVF9ST0xFX1JFTU9WRSAtIEFkbWluIHJlbW92ZWQgdXNlciBmcm9tIHJvbGUKICAtIHJlY29yZF90eXBlczogUk9MRV9SRU1PVkUKICAgIGFjdGlvbjogcmVtb3ZlZC11c2VyLXJvbGUtZnJvbQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBbaWQsIGFjY3RdCiAgICAgIHdoYXQ6IGFjY291bnQKICAgIGVjczoKICAgICAgPDw6ICplY3MtaWFtCiAgICAgIHR5cGU6CiAgICAgICAgLSB1c2VyCiAgICAgICAgLSBjaGFuZ2UKICAjIEFVRElUX1VTRVJfTUdNVCAtIFVzZXIgYWNjdCBhdHRyaWJ1dGUgY2hhbmdlCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBVU0VSX01HTVQKICAgIGFjdGlvbjogbW9kaWZpZWQtdXNlci1hY2NvdW50CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWlhbQogICAgICB0eXBlOgogICAgICAgIC0gdXNlcgogICAgICAgIC0gY2hhbmdlCiAgICAgIG1hcHBpbmdzOgogICAgICAgIC0gZnJvbTogYWN0b3IucHJpbWFyeQogICAgICAgICAgdG86IHVzZXIKICAgICAgICAtIGZyb206IGFjdG9yLnNlY29uZGFyeQogICAgICAgICAgdG86IHVzZXIudGFyZ2V0CiAgICAgICAgLSBmcm9tOiB1aWQudWlkCiAgICAgICAgICB0bzogdXNlci5lZmZlY3RpdmUKICAjIEFVRElUX1VTRVJfQ0hBVVRIVE9LIC0gVXNlciBhY2N0IHBhc3N3b3JkIG9yIHBpbiBjaGFuZ2VkCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBVU0VSX0NIQVVUSFRPSwogICAgYWN0aW9uOiBjaGFuZ2VkLXBhc3N3b3JkCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWlhbQogICAgICB0eXBlOgogICAgICAgIC0gdXNlcgogICAgICAgIC0gY2hhbmdlCiAgICAgIG1hcHBpbmdzOgogICAgICAgIC0gZnJvbTogYWN0b3IucHJpbWFyeQogICAgICAgICAgdG86IHVzZXIKICAgICAgICAtIGZyb206IHVpZC51aWQKICAgICAgICAgIHRvOiB1c2VyLmVmZmVjdGl2ZQogICAgICAgIC0gZnJvbTogYWN0b3Iuc2Vjb25kYXJ5CiAgICAgICAgICB0bzogdXNlci50YXJnZXQKCiAgIyBBVURJVF9HUlBfQ0hBVVRIVE9LIC0gR3JvdXAgYWNjdCBwYXNzd29yZCBvciBwaW4gY2hhbmdlZAogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogR1JQX0NIQVVUSFRPSwogICAgYWN0aW9uOiBjaGFuZ2VkLWdyb3VwLXBhc3N3b3JkCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGFjY3QKICAgICAgd2hhdDogdXNlci1zZXNzaW9uCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWlhbQogICAgICB0eXBlOgogICAgICAgIC0gZ3JvdXAKICAgICAgICAtIGNoYW5nZQogICAgICBtYXBwaW5nczoKICAgICAgICAtIGZyb206IGFjdG9yLnByaW1hcnkKICAgICAgICAgIHRvOiB1c2VyCiAgICAgICAgLSBmcm9tOiB1aWQudWlkCiAgICAgICAgICB0bzogdXNlci5lZmZlY3RpdmUKICAgICAgICAtIGZyb206IGFjdG9yLnNlY29uZGFyeQogICAgICAgICAgdG86IGdyb3VwLnRhcmdldAoKICAjIEF1dGhlbnRpY2F0aW9uIHJlbGF0ZWQgZXZlbnRzCgogICMgQVVESVRfQ1JFRF9BQ1EgLSBVc2VyIGNyZWRlbnRpYWwgYWNxdWlyZWQKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IENSRURfQUNRCiAgICBhY3Rpb246IGFjcXVpcmVkLWNyZWRlbnRpYWxzCiAgICBlY3M6ICplY3MtYXV0aAogICMgQVVESVRfQ1JFRF9ESVNQIC0gVXNlciBjcmVkZW50aWFsIGRpc3Bvc2VkCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBDUkVEX0RJU1AKICAgIGFjdGlvbjogZGlzcG9zZWQtY3JlZGVudGlhbHMKICAgIGVjczogKmVjcy1hdXRoCiAgIyBBVURJVF9DUkVEX1JFRlIgLSBVc2VyIGNyZWRlbnRpYWwgcmVmcmVzaGVkCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBDUkVEX1JFRlIKICAgIGFjdGlvbjogcmVmcmVzaGVkLWNyZWRlbnRpYWxzCiAgICBlY3M6ICplY3MtYXV0aAogICMgQVVESVRfR1JQX0FVVEggLSBBdXRoZW50aWNhdGlvbiBmb3IgZ3JvdXAgcGFzc3dvcmQKICAtIHJlY29yZF90eXBlczogR1JQX0FVVEgKICAgIGFjdGlvbjogYXV0aGVudGljYXRlZC10by1ncm91cAogICAgZWNzOiAqZWNzLWF1dGgKICAjIEFVRElUX0xPR0lOIC0gRGVmaW5lIHRoZSBsb2dpbiBpZCBhbmQgaW5mb3JtYXRpb24KICAtIHJlY29yZF90eXBlczogTE9HSU4KICAgIGFjdGlvbjogY2hhbmdlZC1sb2dpbi1pZC10bwogICAgc3ViamVjdDoKICAgICAgcHJpbWFyeTogW29sZF9hdWlkLCBvbGQtYXVpZF0KICAgICAgc2Vjb25kYXJ5OiB1aWQKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogYXVpZAogICAgICB3aGF0OiB1c2VyLXNlc3Npb24KICAgIGVjczoKICAgICAgPDw6ICplY3MtYXV0aAogICAgICB0eXBlOiBzdGFydAogICAgICBtYXBwaW5nczoKICAgICAgICAtIGZyb206IGFjdG9yLnByaW1hcnkKICAgICAgICAgIHRvOiB1c2VyCiAgICAgICAgLSBmcm9tOiBvYmplY3QucHJpbWFyeQogICAgICAgICAgdG86IHVzZXIuZWZmZWN0aXZlCiAgIyBBVURJVF9VU0VSX0FDQ1QgLSBVc2VyIHN5c3RlbSBhY2Nlc3MgYXV0aG9yaXphdGlvbgogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogVVNFUl9BQ0NUCiAgICBhY3Rpb246IHdhcy1hdXRob3JpemVkCiAgICBlY3M6ICplY3MtYXV0aAogICMgQVVESVRfVVNFUl9BVVRIIC0gVXNlciBzeXN0ZW0gYWNjZXNzIGF1dGhlbnRpY2F0aW9uCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBVU0VSX0FVVEgKICAgIGFjdGlvbjogYXV0aGVudGljYXRlZAogICAgZWNzOiAqZWNzLWF1dGgKICAjIEFVRElUX1VTRVJfRU5EIC0gVXNlciBzZXNzaW9uIGVuZAogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogVVNFUl9FTkQKICAgIGFjdGlvbjogZW5kZWQtc2Vzc2lvbgogICAgZWNzOiAqZWNzLWF1dGgKICAjIEFVRElUX1VTRVJfRVJSIC0gVXNlciBhY2N0IHN0YXRlIGVycm9yCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBVU0VSX0VSUgogICAgYWN0aW9uOiBlcnJvcgogICAgc291cmNlX2lwOiBbYWRkcl0KICAgIGVjczogKmVjcy1hdXRoCiAgIyBBVURJVF9VU0VSX0xPR0lOIC0gVXNlciBoYXMgbG9nZ2VkIGluCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBVU0VSX0xPR0lOCiAgICBhY3Rpb246IGxvZ2dlZC1pbgogICAgc291cmNlX2lwOiBbYWRkcl0KICAgIGVjczoKICAgICAgPDw6ICplY3MtYXV0aAogICAgICB0eXBlOiBzdGFydAogICMgQVVESVRfVVNFUl9MT0dPVVQgLSBVc2VyIGhhcyBsb2dnZWQgb3V0CiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBVU0VSX0xPR09VVAogICAgYWN0aW9uOiBsb2dnZWQtb3V0CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWF1dGgKICAgICAgdHlwZTogZW5kCiAgIyBBVURJVF9VU0VSX1JPTEVfQ0hBTkdFIC0gVXNlciBjaGFuZ2VkIHRvIGEgbmV3IHJvbGUKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IFVTRVJfUk9MRV9DSEFOR0UKICAgIGFjdGlvbjogY2hhbmdlZC1yb2xlLXRvCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IHNlbGVjdGVkLWNvbnRleHQKICAgICAgd2hhdDogdXNlci1zZXNzaW9uCiAgIyBBVURJVF9VU0VSX1NUQVJUIC0gVXNlciBzZXNzaW9uIHN0YXJ0CiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBVU0VSX1NUQVJUCiAgICBhY3Rpb246IHN0YXJ0ZWQtc2Vzc2lvbgogICAgc291cmNlX2lwOiBbYWRkcl0KICAgIGVjczogKmVjcy1hdXRoCgogICMgSG9zdCB2aXJ0dWFsaXphdGlvbiBldmVudHMKCiAgIyBBVURJVF9WSVJUX0NPTlRST0wgLSBTdGFydCwgUGF1c2UsIFN0b3AgVk0KICAtIHJlY29yZF90eXBlczogVklSVF9DT05UUk9MCiAgICBhY3Rpb246IGlzc3VlZC12bS1jb250cm9sCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IG9wCiAgICAgIHNlY29uZGFyeTogdm0KICAgICAgd2hhdDogdmlydHVhbC1tYWNoaW5lCiAgICBlY3M6ICplY3MtaG9zdAogICMgQVVESVRfVklSVF9DUkVBVEUgLSBDcmVhdGlvbiBvZiBndWVzdCBpbWFnZQogIC0gcmVjb3JkX3R5cGVzOiBWSVJUX0NSRUFURQogICAgYWN0aW9uOiBjcmVhdGVkLXZtLWltYWdlCiAgICBlY3M6ICplY3MtaG9zdAogICMgQVVESVRfVklSVF9ERVNUUk9ZIC0gRGVzdHJ1Y3Rpb24gb2YgZ3Vlc3QgaW1hZ2UKICAtIHJlY29yZF90eXBlczogVklSVF9ERVNUUk9ZCiAgICBhY3Rpb246IGRlbGV0ZWQtdm0taW1hZ2UKICAgIGVjczogKmVjcy1ob3N0CiAgIyBBVURJVF9WSVJUX0lOVEVHUklUWV9DSEVDSyAtIEd1ZXN0IGludGVncml0eSByZXN1bHRzCiAgLSByZWNvcmRfdHlwZXM6IFZJUlRfSU5URUdSSVRZX0NIRUNLCiAgICBhY3Rpb246IGNoZWNrZWQtaW50ZWdyaXR5LW9mCiAgICBlY3M6ICplY3MtaG9zdAogICMgQVVESVRfVklSVF9NQUNISU5FX0lEIC0gQmluZGluZyBvZiBsYWJlbCB0byBWTQogIC0gcmVjb3JkX3R5cGVzOiBWSVJUX01BQ0hJTkVfSUQKICAgIGFjdGlvbjogYXNzaWduZWQtdm0taWQKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogdm0KICAgICAgd2hhdDogdmlydHVhbC1tYWNoaW5lCiAgICBlY3M6ICplY3MtaG9zdAogICMgQVVESVRfVklSVF9NSUdSQVRFX0lOIC0gSW5ib3VuZCBndWVzdCBtaWdyYXRpb24gaW5mbwogIC0gcmVjb3JkX3R5cGVzOiBWSVJUX01JR1JBVEVfSU4KICAgIGFjdGlvbjogbWlncmF0ZWQtdm0tZnJvbQogICAgZWNzOiAqZWNzLWhvc3QKICAjIEFVRElUX1ZJUlRfTUlHUkFURV9PVVQgLSBPdXRib3VuZCBndWVzdCBtaWdyYXRpb24gaW5mbwogIC0gcmVjb3JkX3R5cGVzOiBWSVJUX01JR1JBVEVfT1VUCiAgICBhY3Rpb246IG1pZ3JhdGVkLXZtLXRvCiAgICBlY3M6ICplY3MtaG9zdAogICMgQVVESVRfVklSVF9SRVNPVVJDRSAtIFJlc291cmNlIGFzc2lnbm1lbnQKICAtIHJlY29yZF90eXBlczogVklSVF9SRVNPVVJDRQogICAgYWN0aW9uOiBhc3NpZ25lZC12bS1yZXNvdXJjZQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiByZXNyYwogICAgICBzZWNvbmRhcnk6IHZtCiAgICAgIHdoYXQ6IHZpcnR1YWwtbWFjaGluZQogICAgZWNzOiAqZWNzLWhvc3QKCiAgIyBVc2Vyc3BhY2UgcHJvY2VzcyBldmVudHMKCiAgIyBBVURJVF9DSEdSUF9JRCAtIFVzZXIgc3BhY2UgZ3JvdXAgSUQgY2hhbmdlZAogIC0gcmVjb3JkX3R5cGVzOiBDSEdSUF9JRAogICAgYWN0aW9uOiBjaGFuZ2VkLWdyb3VwCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogY2hhbmdlCiAgIyBBVURJVF9DSFVTRVJfSUQgLSBDaGFuZ2VkIHVzZXIgSUQgc3VwcGxlbWVudGFsIGRhdGEKICAtIHJlY29yZF90eXBlczogQ0hVU0VSX0lECiAgICBhY3Rpb246IGNoYW5nZWQtdXNlci1pZAogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IGNoYW5nZQogICMgQVVESVRfVEVTVCAtIFVzZWQgZm9yIHRlc3Qgc3VjY2VzcyBtZXNzYWdlcwogIC0gcmVjb3JkX3R5cGVzOiBURVNUCiAgICBhY3Rpb246IHNlbnQtdGVzdAogICAgZWNzOiAqZWNzLXByb2Nlc3MKICAjIEFVRElUX1RSVVNURURfQVBQIC0gVHJ1c3RlZCBhcHAgbXNnIC0gZnJlZXN0eWxlIHRleHQKICAtIHJlY29yZF90eXBlczogVFJVU1RFRF9BUFAKICAgIGFjdGlvbjogdW5rbm93bgogICAgZWNzOiAqZWNzLXByb2Nlc3MKICAjIEFVRElUX1VTRVJfQ01EIC0gVXNlciBzaGVsbCBjb21tYW5kIGFuZCBhcmdzCiAgLSByZWNvcmRfdHlwZXM6IFVTRVJfQ01ECiAgICBhY3Rpb246IHJhbi1jb21tYW5kCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGNtZAogICAgICB3aGF0OiBwcm9jZXNzCiAgICBkZXNjcmlwdGlvbjogPgogICAgICBUaGVzZSBtZXNzYWdlcyBhcmUgZnJvbSB1c2VyLXNwYWNlIGFwcHMsIGxpa2Ugc3VkbywgdGhhdCBsb2cgY29tbWFuZHMKICAgICAgYmVpbmcgcnVuIGJ5IGEgdXNlci4gVGhlIHVpZCBjb250YWluZWQgaW4gdGhlc2UgbWVzc2FnZXMgaXMgdXNlcidzIFVJRCBhdAogICAgICB0aGUgdGltZSB0aGUgY29tbWFuZCB3YXMgcnVuLiBJdCBpcyBub3QgdGhlICJ0YXJnZXQiIFVJRCB1c2VkIHRvIHJ1biB0aGUKICAgICAgY29tbWFuZCwgd2hpY2ggaXMgbm9ybWFsbHkgcm9vdC4KICAgIGVjczoKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBzdGFydAoKICAjIEhvc3QtbGV2ZWwgZXZlbnRzCgogICMgQVVESVRfU1lTVEVNX0JPT1QgLSBTeXN0ZW0gYm9vdAogIC0gcmVjb3JkX3R5cGVzOiBTWVNURU1fQk9PVAogICAgYWN0aW9uOiBib290ZWQtc3lzdGVtCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHN5c3RlbQogICAgZWNzOgogICAgICA8PDogKmVjcy1ob3N0CiAgICAgIHR5cGU6IHN0YXJ0CiAgIyBBVURJVF9TWVNURU1fUlVOTEVWRUwgLSBTeXN0ZW0gcnVubGV2ZWwgY2hhbmdlCiAgLSByZWNvcmRfdHlwZXM6IFNZU1RFTV9SVU5MRVZFTAogICAgYWN0aW9uOiBjaGFuZ2VkLXRvLXJ1bmxldmVsCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IG5ldy1sZXZlbAogICAgICB3aGF0OiBzeXN0ZW0KICAgIGVjczoKICAgICAgPDw6ICplY3MtaG9zdAogICAgICB0eXBlOiBjaGFuZ2UKICAjIEFVRElUX1NZU1RFTV9TSFVURE9XTiAtIFN5c3RlbSBzaHV0ZG93bgogIC0gcmVjb3JkX3R5cGVzOiBTWVNURU1fU0hVVERPV04KICAgIGFjdGlvbjogc2h1dGRvd24tc3lzdGVtCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHN5c3RlbQogICAgZWNzOgogICAgICA8PDogKmVjcy1ob3N0CiAgICAgIHR5cGU6IGVuZAoKICAjIFNlcnZpY2UtbGV2ZWwgZXZlbnRzCgogICMgQVVESVRfU0VSVklDRV9TVEFSVCAtIFNlcnZpY2UgKGRhZW1vbikgc3RhcnQKICAtIHJlY29yZF90eXBlczogU0VSVklDRV9TVEFSVAogICAgYWN0aW9uOiBzdGFydGVkLXNlcnZpY2UKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogdW5pdAogICAgICB3aGF0OiBzZXJ2aWNlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogc3RhcnQKICAjIEFVRElUX1NFUlZJQ0VfU1RPUCAtIFNlcnZpY2UgKGRhZW1vbikgc3RvcAogIC0gcmVjb3JkX3R5cGVzOiBTRVJWSUNFX1NUT1AKICAgIGFjdGlvbjogc3RvcHBlZC1zZXJ2aWNlCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IHVuaXQKICAgICAgd2hhdDogc2VydmljZQogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IHN0b3AKCiAgIyBBdWRpdGQgaW50ZXJuYWwgZXZlbnRzCgogICMgQVVESVRfQ09ORklHX0NIQU5HRSAtIEF1ZGl0IHN5c3RlbSBjb25maWd1cmF0aW9uIGNoYW5nZQogIC0gcmVjb3JkX3R5cGVzOiBDT05GSUdfQ0hBTkdFCiAgICBhY3Rpb246IGNoYW5nZWQtYXVkaXQtY29uZmlndXJhdGlvbgogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OgogICAgICAgIFtvcCwga2V5LCBhdWRpdF9lbmFibGVkLCBhdWRpdF9waWQsIGF1ZGl0X2JhY2tsb2dfbGltaXQsIGF1ZGl0X2ZhaWx1cmVdCiAgICAgIHdoYXQ6IGF1ZGl0LWNvbmZpZwogICAgZWNzOgogICAgICBjYXRlZ29yeTogW3Byb2Nlc3MsIGNvbmZpZ3VyYXRpb25dCiAgICAgIHR5cGU6IGNoYW5nZQogICMgQVVESVRfREFFTU9OX0FCT1JUIC0gRGFlbW9uIGVycm9yIHN0b3AgcmVjb3JkCiAgLSByZWNvcmRfdHlwZXM6IERBRU1PTl9BQk9SVAogICAgYWN0aW9uOiBhYm9ydGVkLWF1ZGl0ZC1zdGFydHVwCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNlcnZpY2UKICAgIGVjczoKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBzdG9wCiAgIyBBVURJVF9EQUVNT05fQUNDRVBUIC0gQXVkaXRkIGFjY2VwdGVkIHJlbW90ZSBjb25uZWN0aW9uCiAgLSByZWNvcmRfdHlwZXM6IERBRU1PTl9BQ0NFUFQKICAgIGFjdGlvbjogcmVtb3RlLWF1ZGl0LWNvbm5lY3RlZAogICAgb2JqZWN0OgogICAgICB3aGF0OiBzZXJ2aWNlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLW5ldHdvcmsKICAgICAgdHlwZToKICAgICAgICAtIGNvbm5lY3Rpb24KICAgICAgICAtIHN0YXJ0CiAgIyBBVURJVF9EQUVNT05fQ0xPU0UgLSBBdWRpdGQgY2xvc2VkIHJlbW90ZSBjb25uZWN0aW9uCiAgLSByZWNvcmRfdHlwZXM6IERBRU1PTl9DTE9TRQogICAgYWN0aW9uOiByZW1vdGUtYXVkaXQtZGlzY29ubmVjdGVkCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNlcnZpY2UKICAgIGVjczoKICAgICAgPDw6ICplY3MtbmV0d29yawogICAgICB0eXBlOgogICAgICAgIC0gY29ubmVjdGlvbgogICAgICAgIC0gc3RhcnQKICAjIEFVRElUX0RBRU1PTl9DT05GSUcgLSBEYWVtb24gY29uZmlnIGNoYW5nZQogIC0gcmVjb3JkX3R5cGVzOiBEQUVNT05fQ09ORklHCiAgICBhY3Rpb246IGNoYW5nZWQtYXVkaXRkLWNvbmZpZ3VyYXRpb24KICAgIG9iamVjdDoKICAgICAgd2hhdDogc2VydmljZQogICAgZWNzOgogICAgICBjYXRlZ29yeTogW3Byb2Nlc3MsIGNvbmZpZ3VyYXRpb25dCiAgICAgIHR5cGU6IGNoYW5nZQogICMgQVVESVRfREFFTU9OX0VORCAtIERhZW1vbiBub3JtYWwgc3RvcCByZWNvcmQKICAtIHJlY29yZF90eXBlczogREFFTU9OX0VORAogICAgYWN0aW9uOiBzaHV0ZG93bi1hdWRpdAogICAgb2JqZWN0OgogICAgICB3aGF0OiBzZXJ2aWNlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogc3RvcAogICMgQVVESVRfREFFTU9OX0VSUiAtIEF1ZGl0ZCBpbnRlcm5hbCBlcnJvcgogIC0gcmVjb3JkX3R5cGVzOiBEQUVNT05fRVJSCiAgICBhY3Rpb246IGF1ZGl0LWVycm9yCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNlcnZpY2UKICAgIGVjczogKmVjcy1wcm9jZXNzCiAgIyBBVURJVF9EQUVNT05fUkVDT05GSUcgLSBBdWRpdGQgc2hvdWxkIHJlY29uZmlndXJlCiAgLSByZWNvcmRfdHlwZXM6IERBRU1PTl9SRUNPTkZJRwogICAgYWN0aW9uOiByZWNvbmZpZ3VyZWQtYXVkaXRkCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNlcnZpY2UKICAgIGVjczoKICAgICAgY2F0ZWdvcnk6IFtwcm9jZXNzLCBjb25maWd1cmF0aW9uXQogICAgICB0eXBlOiBpbmZvCiAgIyBBVURJVF9EQUVNT05fUkVTVU1FIC0gQXVkaXRkIHNob3VsZCByZXN1bWUgbG9nZ2luZwogIC0gcmVjb3JkX3R5cGVzOiBEQUVNT05fUkVTVU1FCiAgICBhY3Rpb246IHJlc3VtZWQtYXVkaXQtbG9nZ2luZwogICAgb2JqZWN0OgogICAgICB3aGF0OiBzZXJ2aWNlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogY2hhbmdlCiAgIyBBVURJVF9EQUVNT05fUk9UQVRFIC0gQXVkaXRkIHNob3VsZCByb3RhdGUgbG9ncwogIC0gcmVjb3JkX3R5cGVzOiBEQUVNT05fUk9UQVRFCiAgICBhY3Rpb246IHJvdGF0ZWQtYXVkaXQtbG9ncwogICAgb2JqZWN0OgogICAgICB3aGF0OiBzZXJ2aWNlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogY2hhbmdlCiAgIyBBVURJVF9EQUVNT05fU1RBUlQgLSBEYWVtb24gc3RhcnR1cCByZWNvcmQKICAtIHJlY29yZF90eXBlczogREFFTU9OX1NUQVJUCiAgICBhY3Rpb246IHN0YXJ0ZWQtYXVkaXQKICAgIG9iamVjdDoKICAgICAgd2hhdDogc2VydmljZQogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IHN0YXJ0CiAgIyBBVURJVF9LRVJORUwgLSBBc3luY2hyb25vdXMgYXVkaXQgcmVjb3JkLiBOT1QgQSBSRVFVRVNULgogIC0gcmVjb3JkX3R5cGVzOiBLRVJORUwKICAgIGFjdGlvbjogaW5pdGlhbGl6ZWQtYXVkaXQtc3Vic3lzdGVtCiAgICBlY3M6ICplY3MtcHJvY2VzcwoKICAjIENvbmZpZ3VyYXRpb24gY2hhbmdlIGV2ZW50cwoKICAjIEFVRElUX1VTWVNfQ09ORklHIC0gVXNlciBzcGFjZSBzeXN0ZW0gY29uZmlnIGNoYW5nZQogIC0gcmVjb3JkX3R5cGVzOiBVU1lTX0NPTkZJRwogICAgYWN0aW9uOiBjaGFuZ2VkLWNvbmZpZ3VyYXRpb24KICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogb3AKICAgICAgd2hhdDogc3lzdGVtCiAgICBlY3M6CiAgICAgIGNhdGVnb3J5OiBjb25maWd1cmF0aW9uCiAgICAgIHR5cGU6IGNoYW5nZQogICMgQVVESVRfTkVURklMVEVSX0NGRyAtIE5ldGZpbHRlciBjaGFpbiBtb2RpZmljYXRpb25zCiAgLSByZWNvcmRfdHlwZXM6IE5FVEZJTFRFUl9DRkcKICAgIGFjdGlvbjogbG9hZGVkLWZpcmV3YWxsLXJ1bGUtdG8KICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogdGFibGUKICAgICAgd2hhdDogZmlyZXdhbGwKICAgIGVjczoKICAgICAgY2F0ZWdvcnk6IGNvbmZpZ3VyYXRpb24KICAgICAgdHlwZTogY2hhbmdlCiAgIyBBVURJVF9GRUFUVVJFX0NIQU5HRSAtIGF1ZGl0IGxvZyBsaXN0aW5nIGZlYXR1cmUgY2hhbmdlcwogIC0gcmVjb3JkX3R5cGVzOiBGRUFUVVJFX0NIQU5HRQogICAgYWN0aW9uOiBjaGFuZ2VkLWF1ZGl0LWZlYXR1cmUKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogZmVhdHVyZQogICAgICB3aGF0OiBzeXN0ZW0KICAgIGVjczoKICAgICAgY2F0ZWdvcnk6IGNvbmZpZ3VyYXRpb24KICAgICAgdHlwZTogY2hhbmdlCiAgIyBBVURJVF9SRVBMQUNFIC0gUmVwbGFjZSBhdWRpdGQgaWYgdGhpcyBwYWNrZXQgdW5hbnN3ZXJkCgogICMgVFRZIGV2ZW50cwoKICAtIHJlY29yZF90eXBlczoKICAgICAgIyBBVURJVF9UVFkgLSBJbnB1dCBvbiBhbiBhZG1pbmlzdHJhdGl2ZSBUVFkKICAgICAgLSBUVFkKICAgICAgIyBBVURJVF9VU0VSX1RUWSAtIE5vbi1JQ0FOT04gVFRZIGlucHV0IG1lYW5pbmcKICAgICAgLSBVU0VSX1RUWQogICAgYWN0aW9uOiB0eXBlZAogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBkYXRhCiAgICAgIHdoYXQ6IGtleXN0cm9rZXMKICAgIGhvdzogW2NvbW0sIGV4ZV0KCiAgIyBQb2xpY3kgZXZlbnRzCgogICMgQVVESVRfQVZDIC0gU0UgTGludXggYXZjIGRlbmlhbCBvciBncmFudCAoc2VsaW51eCkKICAtIHJlY29yZF90eXBlczogQVZDCiAgICBhY3Rpb246IHZpb2xhdGVkLXNlbGludXgtcG9saWN5CiAgICBzdWJqZWN0OgogICAgICBwcmltYXJ5OiBzY29udGV4dAogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiB0Y29udGV4dAogICAgICBzZWNvbmRhcnk6IHRjbGFzcwogICAgaGFzX2ZpZWxkczoKICAgICAgLSBzZXJlc3VsdAogICMgQVVESVRfQVZDIC0gU0UgTGludXggYXZjIGRlbmlhbCBvciBncmFudCAoYXBwYXJtb3IpCiAgLSByZWNvcmRfdHlwZXM6IEFWQwogICAgYWN0aW9uOiB2aW9sYXRlZC1hcHBhcm1vci1wb2xpY3kKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogb3BlcmF0aW9uCiAgICAgIHNlY29uZGFyeTogW3JlcXVlc3RlZF9tYXNrLCBkZW5pZWRfbWFzaywgY2FwbmFtZV0KICAgICAgd2hhdDogcG9saWN5CiAgICBoYXNfZmllbGRzOgogICAgICAtIGFwcGFybW9yCiAgIyBBVURJVF9GU19SRUxBQkVMIC0gRmlsZXN5c3RlbSByZWxhYmVsZWQKICAtIHJlY29yZF90eXBlczogRlNfUkVMQUJFTAogICAgYWN0aW9uOiByZWxhYmVsZWQtZmlsZXN5c3RlbQogICAgb2JqZWN0OgogICAgICB3aGF0OiBtYWMtY29uZmlnCiAgIyBBVURJVF9MQUJFTF9MRVZFTF9DSEFOR0UgLSBPYmplY3QncyBsZXZlbCB3YXMgY2hhbmdlZAogIC0gcmVjb3JkX3R5cGVzOiBMQUJFTF9MRVZFTF9DSEFOR0UKICAgIGFjdGlvbjogbW9kaWZpZWQtbGV2ZWwtb2YKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogcHJpbnRlcgogICAgICB3aGF0OiBwcmludGVyCiAgIyBBVURJVF9MQUJFTF9PVkVSUklERSAtIEFkbWluIGlzIG92ZXJyaWRpbmcgYSBsYWJlbAogIC0gcmVjb3JkX3R5cGVzOiBMQUJFTF9PVkVSUklERQogICAgYWN0aW9uOiBvdmVycm9kZS1sYWJlbC1vZgogICAgb2JqZWN0OgogICAgICB3aGF0OiBtYWMtY29uZmlnCiAgIyBBVURJVF9NQUNfQ0hFQ0sgLSBVc2VyIHNwYWNlIE1BQyBkZWNpc2lvbiByZXN1bHRzCiAgLSByZWNvcmRfdHlwZXM6IE1BQ19DSEVDSwogICAgYWN0aW9uOiBtYWMtcGVybWlzc2lvbgogICMgQVVESVRfTUFDX0NPTkZJR19DSEFOR0UgLSBDaGFuZ2VzIHRvIGJvb2xlYW5zCiAgLSByZWNvcmRfdHlwZXM6IE1BQ19DT05GSUdfQ0hBTkdFCiAgICBhY3Rpb246IGNoYW5nZWQtc2VsaW51eC1ib29sZWFuCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGJvb2wKICAgICAgd2hhdDogbWFjLWNvbmZpZwogICAgZWNzOgogICAgICBjYXRlZ29yeTogY29uZmlndXJhdGlvbgogICAgICB0eXBlOiBjaGFuZ2UKICAjIEFVRElUX01BQ19QT0xJQ1lfTE9BRCAtIFBvbGljeSBmaWxlIGxvYWQKICAtIHJlY29yZF90eXBlczogTUFDX1BPTElDWV9MT0FECiAgICBhY3Rpb246IGxvYWRlZC1zZWxpbnV4LXBvbGljeQogICAgb2JqZWN0OgogICAgICB3aGF0OiBtYWMtY29uZmlnCiAgICBlY3M6CiAgICAgIGNhdGVnb3J5OiBjb25maWd1cmF0aW9uCiAgICAgIHR5cGU6IGFjY2VzcwogICMgQVVESVRfTUFDX1NUQVRVUyAtIENoYW5nZWQgZW5mb3JjaW5nLHBlcm1pc3NpdmUsb2ZmCiAgLSByZWNvcmRfdHlwZXM6IE1BQ19TVEFUVVMKICAgIGFjdGlvbjogY2hhbmdlZC1zZWxpbnV4LWVuZm9yY2VtZW50CiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGVuZm9yY2luZwogICAgICB3aGF0OiBtYWMtY29uZmlnCiAgICBlY3M6CiAgICAgIGNhdGVnb3J5OiBjb25maWd1cmF0aW9uCiAgICAgIHR5cGU6IGNoYW5nZQogICMgQVVESVRfVVNFUl9BVkMgLSBVc2VyIHNwYWNlIGF2YyBtZXNzYWdlCiAgLSByZWNvcmRfdHlwZXM6IFVTRVJfQVZDCiAgICBhY3Rpb246IGFjY2Vzcy1wZXJtaXNzaW9uCiAgIyBBVURJVF9VU0VSX01BQ19DT05GSUdfQ0hBTkdFIC0gQ2hhbmdlIG1hZGUgdG8gTUFDIHBvbGljeQogIC0gcmVjb3JkX3R5cGVzOiBVU0VSX01BQ19DT05GSUdfQ0hBTkdFCiAgICBhY3Rpb246IGNoYW5nZWQtbWFjLWNvbmZpZ3VyYXRpb24KICAgIG9iamVjdDoKICAgICAgd2hhdDogbWFjLWNvbmZpZwogICAgZWNzOgogICAgICBjYXRlZ29yeTogY29uZmlndXJhdGlvbgogICAgICB0eXBlOiBjaGFuZ2UKICAjIEFVRElUX1VTRVJfTUFDX1BPTElDWV9MT0FEIC0gVXNlcnNwYyBkYWVtb24gbG9hZGVkIHBvbGljCiAgLSByZWNvcmRfdHlwZXM6IFVTRVJfTUFDX1BPTElDWV9MT0FECiAgICBhY3Rpb246IGxvYWRlZC1tYWMtcG9saWN5CiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IG1hYy1jb25maWcKICAgIGVjczoKICAgICAgY2F0ZWdvcnk6IGNvbmZpZ3VyYXRpb24KICAgICAgdHlwZTogYWNjZXNzCiAgIyBBVURJVF9VU0VSX1NFTElOVVhfRVJSIC0gU0UgTGludXggdXNlciBzcGFjZSBlcnJvcgogIC0gcmVjb3JkX3R5cGVzOiBVU0VSX1NFTElOVVhfRVJSCiAgICBhY3Rpb246IGFjY2Vzcy1lcnJvcgogICMgQVVESVRfU0VDQ09NUCAtIFNlY3VyZSBDb21wdXRpbmcgZXZlbnQKICAtIHJlY29yZF90eXBlczogU0VDQ09NUAogICAgYWN0aW9uOiB2aW9sYXRlZC1zZWNjb21wLXBvbGljeQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBzeXNjYWxsCiAgICAgIHdoYXQ6IHByb2Nlc3MKICAjIEFVRElUX1NFTElOVVhfRVJSIC0gSW50ZXJuYWwgU0UgTGludXggRXJyb3JzCiAgLSBhY3Rpb246IGNhdXNlZC1tYWMtcG9saWN5LWVycm9yCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHN5c3RlbQogICAgcmVjb3JkX3R5cGVzOiBTRUxJTlVYX0VSUgogICMgQVVESVRfQVBQQVJNT1JfQUxMT1dFRAogICMgQVVESVRfQVBQQVJNT1JfREVOSUVECiAgIyBBVURJVF9BUFBBUk1PUl9FUlJPUgogICMgQVVESVRfQVZDX1BBVEggLSBkZW50cnksIHZmc21vdW50IHBhaXIgZnJvbSBhdmMKICAjIEFVRElUX0FQUEFSTU9SX0FVRElUCiAgIyBBVURJVF9BUFBBUk1PUl9ISU5UCiAgIyBBVURJVF9BUFBBUk1PUl9TVEFUVVMKICAjIEFVRElUX0FQUEFSTU9SX0VSUk9SCiAgIyBBVURJVF9ERVZfQUxMT0MgLSBEZXZpY2Ugd2FzIGFsbG9jYXRlZAogICMgQVVESVRfREVWX0RFQUxMT0MgLSBEZXZpY2Ugd2FzIGRlYWxsb2NhdGVkCiAgIyBBVURJVF9NQUNfVU5MQkxfQUxMT1cgLSBOZXRMYWJlbDogYWxsb3cgdW5sYWJlbGVkIHRyYWZmaWMKICAjIEFVRElUX01BQ19DSVBTT1Y0X0FERCAtIE5ldExhYmVsOiBhZGQgQ0lQU092NCBET0kgZW50cnkKICAjIEFVRElUX01BQ19DSVBTT1Y0X0RFTCAtIE5ldExhYmVsOiBkZWwgQ0lQU092NCBET0kgZW50cnkKICAjIEFVRElUX01BQ19NQVBfQUREIC0gTmV0TGFiZWw6IGFkZCBMU00gZG9tYWluIG1hcHBpbmcKICAjIEFVRElUX01BQ19NQVBfREVMIC0gTmV0TGFiZWw6IGRlbCBMU00gZG9tYWluIG1hcHBpbmcKICAjIEFVRElUX01BQ19JUFNFQ19FVkVOVCAtIEF1ZGl0IGFuIElQU2VjIGV2ZW50CiAgIyBBVURJVF9NQUNfVU5MQkxfU1RDQUREIC0gTmV0TGFiZWw6IGFkZCBhIHN0YXRpYyBsYWJlbAogICMgQVVESVRfTUFDX1VOTEJMX1NUQ0RFTCAtIE5ldExhYmVsOiBkZWwgYSBzdGF0aWMgbGFiZWwKICAjIEFVRElUX01BQ19DQUxJUFNPX0FERCAtIE5ldExhYmVsOiBhZGQgQ0FMSVBTTyBET0kgZW50cnkKICAjIEFVRElUX01BQ19DQUxJUFNPX0RFTCAtIE5ldExhYmVsOiBkZWwgQ0FMSVBTTyBET0kgZW50cnkKICAjIEFVRElUX1VTRVJfTEFCRUxFRF9FWFBPUlQgLSBPYmplY3QgZXhwb3J0ZWQgd2l0aCBsYWJlbAogICMgQVVESVRfVVNFUl9VTkxBQkVMRURfRVhQT1JUIC0gT2JqZWN0IGV4cG9ydGVkIHdpdGhvdXQgbGFiZWwKCiAgIyBDcnlwdG8gZXZlbnRzCgogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIGFjdGlvbjogbmVnb3RpYXRlZC1jcnlwdG8ta2V5CiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGZwCiAgICAgIHNlY29uZGFyeTogW2FkZHIsIGhvc3RuYW1lXQogICAgICB3aGF0OiB1c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogQ1JZUFRPX0tFWV9VU0VSCiAgICBzb3VyY2VfaXA6IFthZGRyXQogICAgZWNzOiAqZWNzLXByb2Nlc3MKICAtIGFjdGlvbjogY3J5cHRvLW9mZmljZXItbG9nZ2VkLWluCiAgICByZWNvcmRfdHlwZXM6IENSWVBUT19MT0dJTgogIC0gYWN0aW9uOiBjcnlwdG8tb2ZmaWNlci1sb2dnZWQtb3V0CiAgICByZWNvcmRfdHlwZXM6IENSWVBUT19MT0dPVVQKICAgIGVjczogKmVjcy1wcm9jZXNzCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgYWN0aW9uOiBzdGFydGVkLWNyeXB0by1zZXNzaW9uCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGFkZHIKICAgICAgc2Vjb25kYXJ5OiBbcnBvcnRdCiAgICByZWNvcmRfdHlwZXM6IENSWVBUT19TRVNTSU9OCiAgICBzb3VyY2VfaXA6IFthZGRyXQogICAgZWNzOiAqZWNzLXByb2Nlc3MKICAtIGFjdGlvbjogYWNjZXNzLXJlc3VsdAogICAgcmVjb3JkX3R5cGVzOiBEQUNfQ0hFQ0sKCiAgIyBBbm9tYWxpZXMKCiAgIyBBVURJVF9BTk9NX0FCRU5EIC0gUHJvY2VzcyBlbmRlZCBhYm5vcm1hbGx5CiAgLSByZWNvcmRfdHlwZXM6IEFOT01fQUJFTkQKICAgIGFjdGlvbjogY3Jhc2hlZC1wcm9ncmFtCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IFtjb21tLCBleGVdCiAgICAgIHNlY29uZGFyeTogcGlkCiAgICAgIHdoYXQ6IHByb2Nlc3MKICAgIGhvdzogc2lnCiAgICBlY3M6CiAgICAgICMgY29uc2lkZXIgYWRkaW5nIGFuIGFub21hbHkgY2F0ZWdvcnkgd2hlbiB3ZSBpbnRyb2R1Y2UKICAgICAgIyB0byBFQ1MKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBlbmQKICAjIEFVRElUX0FOT01fRVhFQyAtIEV4ZWN1dGlvbiBvZiBmaWxlCiAgLSByZWNvcmRfdHlwZXM6IEFOT01fRVhFQwogICAgYWN0aW9uOiBhdHRlbXB0ZWQtZXhlY3V0aW9uLW9mLWZvcmJpZGRlbi1wcm9ncmFtCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGNtZAogICAgICB3aGF0OiBwcm9jZXNzCiAgICBob3c6IHRlcm1pbmFsCiAgICBlY3M6CiAgICAgICMgY29uc2lkZXIgYWRkaW5nIGFuIGFub21hbHkgY2F0ZWdvcnkgd2hlbiB3ZSBpbnRyb2R1Y2UKICAgICAgIyB0byBFQ1MKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBzdGFydAogICMgQVVESVRfQU5PTV9MSU5LIC0gU3VzcGljaW91cyB1c2Ugb2YgZmlsZSBsaW5rcwogIC0gcmVjb3JkX3R5cGVzOiBBTk9NX0xJTksKICAgIGFjdGlvbjogdXNlZC1zdXNwaWNpb3VzLWxpbmsKICAjIEFVRElUX0FOT01fTE9HSU5fRkFJTFVSRVMgLSBGYWlsZWQgbG9naW4gbGltaXQgcmVhY2hlZAogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogQU5PTV9MT0dJTl9GQUlMVVJFUwogICAgYWN0aW9uOiBmYWlsZWQtbG9nLWluLXRvby1tYW55LXRpbWVzLXRvCiAgIyBBVURJVF9BTk9NX0xPR0lOX0xPQ0FUSU9OIC0gTG9naW4gZnJvbSBmb3JiaWRkZW4gbG9jYXRpb24KICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IEFOT01fTE9HSU5fTE9DQVRJT04KICAgIGFjdGlvbjogYXR0ZW1wdGVkLWxvZy1pbi1mcm9tLXVudXN1YWwtcGxhY2UtdG8KICAjIEFVRElUX0FOT01fTE9HSU5fU0VTU0lPTlMgLSBNYXggY29uY3VycmVudCBzZXNzaW9ucyByZWFjaGVkCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBBTk9NX0xPR0lOX1NFU1NJT05TCiAgICBhY3Rpb246IG9wZW5lZC10b28tbWFueS1zZXNzaW9ucy10bwogICMgQVVESVRfQU5PTV9MT0dJTl9USU1FIC0gTG9naW4gYXR0ZW1wdGVkIGF0IGJhZCB0aW1lCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBBTk9NX0xPR0lOX1RJTUUKICAgIGFjdGlvbjogYXR0ZW1wdGVkLWxvZy1pbi1kdXJpbmctdW51c3VhbC1ob3VyLXRvCiAgIyBBVURJVF9BTk9NX1BST01JU0NVT1VTIC0gRGV2aWNlIGNoYW5nZWQgcHJvbWlzY3VvdXMgbW9kZQogIC0gcmVjb3JkX3R5cGVzOiBBTk9NX1BST01JU0NVT1VTCiAgICBhY3Rpb246IGNoYW5nZWQtcHJvbWlzY3VvdXMtbW9kZS1vbi1kZXZpY2UgIyBDb3VsZCBiZSBlbnRlcmVkIG9yIGV4aXRlZCBiYXNlZCBvbiBwcm9tIGZpZWxkLgogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBkZXYKICAgICAgd2hhdDogbmV0d29yay1kZXZpY2UKICAjIEFVRElUX0FOT01fUkJBQ19JTlRFR1JJVFlfRkFJTCAtIFJCQUMgZmlsZSBpbnRlZ3JpdHkgZmFpbHVyZQogIC0gcmVjb3JkX3R5cGVzOiBBTk9NX1JCQUNfSU5URUdSSVRZX0ZBSUwKICAgIGFjdGlvbjogdGVzdGVkLWZpbGUtc3lzdGVtLWludGVncml0eS1vZgogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBob3N0bmFtZQogICAgICB3aGF0OiBmaWxlc3lzdGVtCiAgIyBBVURJVF9BTk9NX0xPR0lOX0FDQ1QgLSBMb2dpbiBhdHRlbXB0ZWQgdG8gd2F0Y2hlZCBhY2N0CiAgIyBBVURJVF9BTk9NX01BWF9EQUMgLSBNYXggREFDIGZhaWx1cmVzIHJlYWNoZWQKICAjIEFVRElUX0FOT01fTUFYX01BQyAtIE1heCBNQUMgZmFpbHVyZXMgcmVhY2hlZAogICMgQVVESVRfQU5PTV9BTVRVX0ZBSUwgLSBBTVRVIGZhaWx1cmUKICAjIEFVRElUX0FOT01fUkJBQ19GQUlMIC0gUkJBQyBzZWxmIHRlc3QgZmFpbHVyZQogICMgQVVESVRfQU5PTV9DUllQVE9fRkFJTCAtIENyeXB0byBzeXN0ZW0gdGVzdCBmYWlsdXJlCiAgIyBBVURJVF9BTk9NX01LX0VYRSAtIE1ha2UgYW4gZXhlY3V0YWJsZQogICMgQVVESVRfQU5PTV9BQ0NFU1NfRlMgLSBBY2Nlc3Mgb2YgZmlsZSBvciBkaXIKICAjIEFVRElUX0FOT01fQUREX0FDQ1QgLSBBZGRpbmcgYW4gYWNjdAogICMgQVVESVRfQU5PTV9ERUxfQUNDVCAtIERlbGV0aW5nIGFuIGFjY3QKICAjIEFVRElUX0FOT01fTU9EX0FDQ1QgLSBDaGFuZ2luZyBhbiBhY2N0CiAgIyBBVURJVF9BTk9NX1JPT1RfVFJBTlMgLSBVc2VyIGJlY2FtZSByb290CiAgIyBBVURJVF9BTk9NX0xPR0lOX1NFUlZJQ0UgLSBTZXJ2aWNlIGFjY3QgYXR0ZW1wdGVkIGxvZ2luCgogICMgQW5vbWFseSByZXNwb25zZXMKCiAgIyBBVURJVF9SRVNQX0FOT01BTFkgLSBBbm9tYWx5IG5vdCByZWFjdGVkIHRvCiAgIyBBVURJVF9SRVNQX0FMRVJUIC0gQWxlcnQgZW1haWwgd2FzIHNlbnQKICAjIEFVRElUX1JFU1BfS0lMTF9QUk9DIC0gS2lsbCBwcm9ncmFtCiAgIyBBVURJVF9SRVNQX1RFUk1fQUNDRVNTIC0gVGVybWluYXRlIHNlc3Npb24KICAjIEFVRElUX1JFU1BfQUNDVF9SRU1PVEUgLSBBY2N0IGxvY2tlZCBmcm9tIHJlbW90ZSBhY2Nlc3MKICAjIEFVRElUX1JFU1BfQUNDVF9MT0NLX1RJTUVEIC0gVXNlciBhY2N0IGxvY2tlZCBmb3IgdGltZQogICMgQVVESVRfUkVTUF9BQ0NUX1VOTE9DS19USU1FRCAtIFVzZXIgYWNjdCB1bmxvY2tlZCBmcm9tIHRpbWUKICAjIEFVRElUX1JFU1BfQUNDVF9MT0NLIC0gVXNlciBhY2N0IHdhcyBsb2NrZWQKICAjIEFVRElUX1JFU1BfVEVSTV9MT0NLIC0gVGVybWluYWwgd2FzIGxvY2tlZAogICMgQVVESVRfUkVTUF9TRUJPT0wgLSBTZXQgYW4gU0UgTGludXggYm9vbGVhbgogICMgQVVESVRfUkVTUF9FWEVDIC0gRXhlY3V0ZSBhIHNjcmlwdAogICMgQVVESVRfUkVTUF9TSU5HTEUgLSBHbyB0byBzaW5nbGUgdXNlciBtb2RlCiAgIyBBVURJVF9SRVNQX0hBTFQgLSB0YWtlIHRoZSBzeXN0ZW0gZG93bgogICMgQVVESVRfUkVTUF9PUklHSU5fQkxPQ0sgLSBBZGRyZXNzIGJsb2NrZWQgYnkgaXB0YWJsZXMKICAjIEFVRElUX1JFU1BfT1JJR0lOX0JMT0NLX1RJTUVEIC0gQWRkcmVzcyBibG9ja2VkIGZvciB0aW1lCgogICMgQXVkaXQgcnVsZSBldmVudHMKCiAgIyBBVURJVF9TWVNDQUxMIC0gU3lzY2FsbCBldmVudAogICMgQVVESVRfUEFUSCAtIEZpbGVuYW1lIHBhdGggaW5mb3JtYXRpb24KICAjIEFVRElUX0lQQyAtIElQQyByZWNvcmQKICAjIEFVRElUX1NPQ0tFVENBTEwgLSBzeXNfc29ja2V0Y2FsbCBhcmd1bWVudHMKICAjIEFVRElUX1NPQ0tBRERSIC0gc29ja2FkZHIgY29waWVkIGFzIHN5c2NhbGwgYXJnCiAgIyBBVURJVF9DV0QgLSBDdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5CiAgIyBBVURJVF9FWEVDVkUgLSBleGVjdmUgYXJndW1lbnRzCiAgIyBBVURJVF9JUENfU0VUX1BFUk0gLSBJUEMgbmV3IHBlcm1pc3Npb25zIHJlY29yZCB0eXBlCiAgIyBBVURJVF9NUV9PUEVOIC0gUE9TSVggTVEgb3BlbiByZWNvcmQgdHlwZQogICMgQVVESVRfTVFfU0VORFJFQ1YtIFBPU0lYIE1RIHNlbmQvcmVjZWl2ZSByZWNvcmQgdHlwZQogICMgQVVESVRfTVFfTk9USUZZIC0gUE9TSVggTVEgbm90aWZ5IHJlY29yZCB0eXBlCiAgIyBBVURJVF9NUV9HRVRTRVRBVFRSIC0gUE9TSVggTVEgZ2V0L3NldCBhdHRyaWJ1dGUgcmVjb3JkIHR5cGUKICAjIEFVRElUX0ZEX1BBSVIgLSBhdWRpdCByZWNvcmQgZm9yIHBpcGUvc29ja2V0cGFpcgogICMgQVVESVRfT0JKX1BJRCAtIHB0cmFjZSB0YXJnZXQKICAjIEFVRElUX0JQUk1fRkNBUFMgLSBJbmZvcm1hdGlvbiBhYm91dCBmY2FwcyBpbmNyZWFzaW5nIHBlcm1zCiAgIyBBVURJVF9DQVBTRVQgLSBSZWNvcmQgc2hvd2luZyBhcmd1bWVudCB0byBzeXNfY2Fwc2V0CiAgIyBBVURJVF9NTUFQIC0gUmVjb3JkIHNob3dpbmcgZGVzY3JpcHRvciBhbmQgZmxhZ3MgaW4gbW1hcAogICMgQVVESVRfTkVURklMVEVSX1BLVCAtIFBhY2tldHMgdHJhdmVyc2luZyBuZXRmaWx0ZXIgY2hhaW5zCgogICMgSW50ZWdyaXR5IGNoZWNrcwoKICAjIEFVRElUX0lOVEVHUklUWV9EQVRBIC0gRGF0YSBpbnRlZ3JpdHkgdmVyaWZpY2F0aW9uCiAgIyBBVURJVF9JTlRFR1JJVFlfTUVUQURBVEEgLSBNZXRhZGF0YSBpbnRlZ3JpdHkgdmVyaWZpY2F0aW9uCiAgIyBBVURJVF9JTlRFR1JJVFlfU1RBVFVTIC0gSW50ZWdyaXR5IGVuYWJsZSBzdGF0dXMKICAjIEFVRElUX0lOVEVHUklUWV9IQVNIIC0gSW50ZWdyaXR5IEhBU0ggdHlwZQogICMgQVVESVRfSU5URUdSSVRZX1BDUiAtIFBDUiBpbnZhbGlkYXRpb24gbXNncwogICMgQVVESVRfSU5URUdSSVRZX1JVTEUgLSBQb2xpY3kgcnVsZQoKICAjIFZhcmlvdXMKCiAgIyBBVURJVF9VU0VSIC0gTWVzc2FnZSBmcm9tIHVzZXJzcGFjZSAtLSBkZXByZWNhdGVkCiAgLSByZWNvcmRfdHlwZXM6IFVTRVIKICAgIGFjdGlvbjogc2VudC1tZXNzYWdlCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGFkZHIK") assets["normalizationData"] = value } diff --git a/auparse/auparse.go b/auparse/auparse.go index 74c9271..34a0e57 100644 --- a/auparse/auparse.go +++ b/auparse/auparse.go @@ -317,6 +317,7 @@ func trimQuotesAndSpace(v string) string { return strings.Trim(v, `'" `) } func enrichData(msg *AuditMessage) error { normalizeUnsetID("auid", msg.fields) + normalizeUnsetID("old-auid", msg.fields) normalizeUnsetID("ses", msg.fields) // Many different message types can have subj field so check them all. From 2507d6f89ffaf942dcc2b0a6c5d38baa87dbe669 Mon Sep 17 00:00:00 2001 From: Adrian Serrano Date: Thu, 21 Jan 2021 18:35:40 +0100 Subject: [PATCH 04/15] Support AUDIT_LOGIN from kernels <3.14 --- aucoalesce/normalizations.yaml | 2 +- aucoalesce/znormalize_data.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/aucoalesce/normalizations.yaml b/aucoalesce/normalizations.yaml index 0c90ae6..c431d09 100644 --- a/aucoalesce/normalizations.yaml +++ b/aucoalesce/normalizations.yaml @@ -1039,7 +1039,7 @@ normalizations: primary: [old_auid, old-auid] secondary: uid object: - primary: auid + primary: [new-auid, new_auid, auid] what: user-session ecs: <<: *ecs-auth diff --git a/aucoalesce/znormalize_data.go b/aucoalesce/znormalize_data.go index 46fef4f..d1eb653 100644 --- a/aucoalesce/znormalize_data.go +++ b/aucoalesce/znormalize_data.go @@ -31,7 +31,7 @@ func asset(key string) ([]byte, error) { assets = map[string][]byte{} var value []byte - value, _ = base64.StdEncoding.DecodeString("LS0tCiMgTWFjcm9zIGRlY2xhcmVzIHNvbWUgWUFNTCBhbmNob3JzIHRoYXQgY2FuIGJlIHJlZmVyZW5jZWQgZm9yIHNvbWUgY29tbW9uCiMgb2JqZWN0IHR5cGUgbm9ybWFsaXphdGlvbnMgbGlrZSB1c2VyLXNlc3Npb24sIHNvY2tldCwgb3IgcHJvY2Vzcy4KbWFjcm9zOgogIC0gJmRlZmF1bHRzCiAgICBzdWJqZWN0OgogICAgICBwcmltYXJ5OiBhdWlkCiAgICAgIHNlY29uZGFyeTogdWlkCiAgICBob3c6IFtleGUsIGNvbW1dCgogIC0gJm1hY3JvLXVzZXItc2Vzc2lvbgogICAgc3ViamVjdDoKICAgICAgcHJpbWFyeTogYXVpZAogICAgICBzZWNvbmRhcnk6IFthY2N0LCBpZCwgdWlkXQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiB0ZXJtaW5hbAogICAgICBzZWNvbmRhcnk6IFthZGRyLCBob3N0bmFtZV0KICAgICAgd2hhdDogdXNlci1zZXNzaW9uCiAgICBob3c6IFtleGUsIHRlcm1pbmFsXQoKICAtICZtYWNyby1zb2NrZXQKICAgIDw8OiAqZGVmYXVsdHMKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogW2FkZHIsIHBhdGhdCiAgICAgIHNlY29uZGFyeTogcG9ydAogICAgICB3aGF0OiBzb2NrZXQKCiAgLSAmbWFjcm8tcHJvY2VzcwogICAgPDw6ICpkZWZhdWx0cwogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBbY21kLCBleGUsIGNvbW1dCiAgICAgIHNlY29uZGFyeTogcGlkCiAgICAgIHdoYXQ6IHByb2Nlc3MKICAgIGhvdzogdGVybWluYWwKCiAgLSAmZWNzLWlhbQogICAgY2F0ZWdvcnk6IGlhbQogICAgdHlwZTogaW5mbwoKICAtICZlY3MtYXV0aAogICAgY2F0ZWdvcnk6IGF1dGhlbnRpY2F0aW9uCiAgICB0eXBlOiBpbmZvCiAgICBtYXBwaW5nczoKICAgICAgLSBmcm9tOiBhY3Rvci5wcmltYXJ5CiAgICAgICAgdG86IHVzZXIKICAgICAgLSBmcm9tOiBhY3Rvci5zZWNvbmRhcnkKICAgICAgICB0bzogdXNlci5lZmZlY3RpdmUKCiAgLSAmZWNzLWhvc3QKICAgIGNhdGVnb3J5OiBob3N0CiAgICB0eXBlOiBpbmZvCgogIC0gJmVjcy1wcm9jZXNzCiAgICBjYXRlZ29yeTogcHJvY2VzcwogICAgdHlwZTogaW5mbwoKICAtICZlY3MtZmlsZQogICAgY2F0ZWdvcnk6IGZpbGUKICAgIHR5cGU6IGluZm8KCiAgLSAmZWNzLWRyaXZlcgogICAgY2F0ZWdvcnk6IGRyaXZlcgogICAgdHlwZTogaW5mbwoKICAtICZlY3MtbmV0d29yawogICAgY2F0ZWdvcnk6IG5ldHdvcmsKICAgIHR5cGU6CiAgICAgIC0gY29ubmVjdGlvbgogICAgICAtIGluZm8KCiAgLSAmZWNzLXVzZXItbW9kaWZpY2F0aW9uLW1hcHBpbmdzCiAgICBtYXBwaW5nczoKICAgICAgLSBmcm9tOiBhY3Rvci5wcmltYXJ5CiAgICAgICAgdG86IHVzZXIKICAgICAgLSBmcm9tOiBhY3Rvci5zZWNvbmRhcnkKICAgICAgICB0bzogdXNlci5lZmZlY3RpdmUKICAgICAgLSBmcm9tOiBvYmplY3QucHJpbWFyeQogICAgICAgIHRvOiB1c2VyLnRhcmdldAoKICAtICZlY3MtZ3JvdXAtbW9kaWZpY2F0aW9uLW1hcHBpbmdzCiAgICBtYXBwaW5nczoKICAgICAgLSBmcm9tOiBhY3Rvci5wcmltYXJ5CiAgICAgICAgdG86IHVzZXIKICAgICAgLSBmcm9tOiBhY3Rvci5zZWNvbmRhcnkKICAgICAgICB0bzogdXNlci5lZmZlY3RpdmUKICAgICAgLSBmcm9tOiBvYmplY3QucHJpbWFyeQogICAgICAgIHRvOiBncm91cC50YXJnZXQKCiMgTm9ybWFsaXphdGlvbnMgaXMgYSBsaXN0IG9mIGRlY2xhcmF0aW9ucyBzcGVjaWZ5aW5nIGhvdyB0byBub3JtYWxpemUgdGhlIGRhdGEKIyBjb250YWluZWQgaW4gYW4gZXZlbnQuIFRoZSBub3JtYWxpemF0aW9uIGNhbiBiZSBhcHBsaWVkIGJhc2VkIG9uIHRoZSBzeXNjYWxsCiMgbmFtZSAoZS5nLiBjb25uZWN0LCBvcGVuKSBvciBiYXNlZCBvbiB0aGUgcmVjb3JkIHR5cGUgKGUuZy4gVVNFUl9MT0dJTikuCiMgTm8gdHdvIG5vcm1hbGl6YXRpb25zIGNhbiBhcHBseSB0byB0aGUgc2FtZSBzeXNjYWxsIG9yIHJlY29yZCB0eXBlLiBUaGlzCiMgd2lsbCByZXN1bHQgaW4gYSBmYWlsdXJlIGF0IGxvYWQgdGltZS4KIwojIEVhY2ggbm9ybWFsaXphdGlvbiBzaG91bGQgc3BlY2lmeToKIyAgIGFjdGlvbiAtIHdoYXQgaGFwcGVuZWQKIyAgIGFjdG9yICAtIHdobyBkaWQgdGhpcyBvciB3aG8gdHJpZ2dlcmVkIHRoZSBldmVudAojICAgb2JqZWN0IC0gd2hhdCB3YXMgdGhlICJ0aGluZyIgaW52b2x2ZWQgaW4gdGhlIGFjdGlvbiAoZS5nLiBwcm9jZXNzLCBzb2NrZXQpCiMgICBob3cgICAgLSBob3cgd2FzIHRoZSBhY3Rpb24gcGVyZm9ybWVkIChlLmcuIGV4ZSBvciB0ZXJtaW5hbCkKbm9ybWFsaXphdGlvbnM6CiAgLSBlY3M6ICplY3MtcHJvY2VzcwogICAgc3lzY2FsbHM6CiAgICAgIC0gJyonICMgdGhpcyBpcyBhIGNhdGNoIGFsbAogIC0gYWN0aW9uOiBvcGVuZWQtZmlsZQogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBjcmVhdCAtIG9wZW4gYW5kIHBvc3NpYmx5IGNyZWF0ZSBhIGZpbGUKICAgICAgLSBjcmVhdAogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgIHR5cGU6IGNyZWF0aW9uCiAgLSBhY3Rpb246IG9wZW5lZC1maWxlCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIGZhbGxvY2F0ZSAtIG1hbmlwdWxhdGUgZmlsZSBzcGFjZQogICAgICAtIGZhbGxvY2F0ZQogICAgICAjIHRydW5jYXRlIC0gdHJ1bmNhdGUgYSBmaWxlIHRvIGEgc3BlY2lmaWVkIGxlbmd0aAogICAgICAtIHRydW5jYXRlCiAgICAgICMgZnRydW5jYXRlIC0gdHJ1bmNhdGUgYSBmaWxlIHRvIGEgc3BlY2lmaWVkIGxlbmd0aAogICAgICAtIGZ0cnVuY2F0ZQogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgICMgdGVjaG5pY2FsbHkgeW91IGNhbiB0cnVuY2F0ZSBhIGZpbGUgdG8gdGhlIHNhbWUgbGVuZ3RoCiAgICAgICMgYnV0IHJlZ2FyZGxlc3MsIHdlIGNvbnNpZGVyIHRoaXMgYSBjaGFuZ2UKICAgICAgdHlwZTogY2hhbmdlCiAgLSBhY3Rpb246IG9wZW5lZC1maWxlCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIG9wZW4gLSBvcGVuIGFuZCBwb3NzaWJseSBjcmVhdGUgYSBmaWxlCiAgICAgIC0gb3BlbgogICAgICAjIG9wZW5hdCAtIG9wZW4gYW5kIHBvc3NpYmx5IGNyZWF0ZSBhIGZpbGUKICAgICAgLSBvcGVuYXQKICAgICAgIyByZWFkbGluayAtIHJlYWQgdmFsdWUgb2YgYSBzeW1ib2xpYyBsaW5rCiAgICAgIC0gcmVhZGxpbmsKICAgICAgIyByZWFkbGlua2F0IC0gcmVhZCB2YWx1ZSBvZiBhIHN5bWJvbGljIGxpbmsKICAgICAgLSByZWFkbGlua2F0CiAgICBlY3M6ICplY3MtZmlsZQogIC0gYWN0aW9uOiByZWFkLWZpbGUKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgc3lzY2FsbHM6CiAgICAgICMgcmVhZCAtIHJlYWQgZnJvbSBhIGZpbGUgZGVzY3JpcHRvcgogICAgICAtIHJlYWQKICAgIGVjczogKmVjcy1maWxlCiAgLSBhY3Rpb246IHdyb3RlLXRvLWZpbGUKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgc3lzY2FsbHM6CiAgICAgICMgd3JpdGUgLSB3cml0ZSB0byBhIGZpbGUgZGVzY3JpcHRvcgogICAgICAtIHdyaXRlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgdHlwZTogY2hhbmdlCiAgLSBhY3Rpb246IGNoYW5nZWQtZmlsZS1hdHRyaWJ1dGVzLW9mCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIHNldHhhdHRyIC0gc2V0IGFuIGV4dGVuZGVkIGF0dHJpYnV0ZSB2YWx1ZQogICAgICAtIHNldHhhdHRyCiAgICAgICMgZnNldHhhdHRyIC0gc2V0IGFuIGV4dGVuZGVkIGF0dHJpYnV0ZSB2YWx1ZQogICAgICAtIGZzZXR4YXR0cgogICAgICAjIGxzZXR4YXR0ciAtIHNldCBhbiBleHRlbmRlZCBhdHRyaWJ1dGUgdmFsdWUKICAgICAgLSBsc2V0eGF0dHIKICAgICAgIyByZW1vdmV4YXR0ciAtIHJlbW92ZSBhbiBleHRlbmRlZCBhdHRyaWJ1dGUKICAgICAgLSByZW1vdmV4YXR0cgogICAgICAjIGZyZW1vdmV4YXR0ciAtIHJlbW92ZSBhbiBleHRlbmRlZCBhdHRyaWJ1dGUKICAgICAgLSBmcmVtb3ZleGF0dHIKICAgICAgIyBscmVtb3ZleGF0dHIgLSByZW1vdmUgYW4gZXh0ZW5kZWQgYXR0cmlidXRlCiAgICAgIC0gbHJlbW92ZXhhdHRyCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgdHlwZTogY2hhbmdlCiAgLSBhY3Rpb246IGNoYW5nZWQtZmlsZS1wZXJtaXNzaW9ucy1vZgogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBjaG1vZCAtIGNoYW5nZSBwZXJtaXNzaW9ucyBvZiBhIGZpbGUKICAgICAgLSBjaG1vZAogICAgICAjIGZjaG1vZCAtIGNoYW5nZSBwZXJtaXNzaW9ucyBvZiBhIGZpbGUKICAgICAgLSBmY2htb2QKICAgICAgIyBmY2htb2RhdCAtIGNoYW5nZSBwZXJtaXNzaW9ucyBvZiBhIGZpbGUKICAgICAgLSBmY2htb2RhdAogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgIHR5cGU6IGNoYW5nZQogIC0gYWN0aW9uOiBjaGFuZ2VkLWZpbGUtb3duZXJzaGlwLW9mCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIGNob3duIC0gY2hhbmdlIG93bmVyc2hpcCBvZiBhIGZpbGUKICAgICAgLSBjaG93bgogICAgICAjIGZjaG93biAtIGNoYW5nZSBvd25lcnNoaXAgb2YgYSBmaWxlCiAgICAgIC0gZmNob3duCiAgICAgICMgZmNob3duYXQgLSBjaGFuZ2Ugb3duZXJzaGlwIG9mIGEgZmlsZQogICAgICAtIGZjaG93bmF0CiAgICAgICMgbGNob3duIC0gY2hhbmdlIG93bmVyc2hpcCBvZiBhIGZpbGUKICAgICAgLSBsY2hvd24KICAgIGVjczoKICAgICAgPDw6ICplY3MtZmlsZQogICAgICB0eXBlOiBjaGFuZ2UKICAtIGFjdGlvbjogbG9hZGVkLWtlcm5lbC1tb2R1bGUKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgICBwcmltYXJ5OiBuYW1lCiAgICByZWNvcmRfdHlwZXM6CiAgICAgIC0gS0VSTl9NT0RVTEUKICAgIHN5c2NhbGxzOgogICAgICAjIGZpbml0X21vZHVsZSAtIGxvYWQgYSBrZXJuZWwgbW9kdWxlCiAgICAgIC0gZmluaXRfbW9kdWxlCiAgICAgICMgaW5pdF9tb2R1bGUgLSBsb2FkIGEga2VybmVsIG1vZHVsZQogICAgICAtIGluaXRfbW9kdWxlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWRyaXZlcgogICAgICB0eXBlOiBzdGFydAogIC0gYWN0aW9uOiB1bmxvYWRlZC1rZXJuZWwtbW9kdWxlCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIGRlbGV0ZV9tb2R1bGUgLSB1bmxvYWQgYSBrZXJuZWwgbW9kdWxlCiAgICAgIC0gZGVsZXRlX21vZHVsZQogICAgZWNzOgogICAgICA8PDogKmVjcy1kcml2ZXIKICAgICAgdHlwZTogZW5kCiAgLSBhY3Rpb246IGNyZWF0ZWQtZGlyZWN0b3J5CiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgICAgcGF0aF9pbmRleDogMQogICAgc3lzY2FsbHM6CiAgICAgICMgbWtkaXIgLSBjcmVhdGUgYSBkaXJlY3RvcnkKICAgICAgLSBta2RpcgogICAgICAjIG1rZGlyYXQgLSBjcmVhdGUgYSBkaXJlY3RvcnkKICAgICAgLSBta2RpcmF0CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgdHlwZTogY3JlYXRpb24KICAtIGFjdGlvbjogbW91bnRlZAogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlc3lzdGVtCiAgICAgIHBhdGhfaW5kZXg6IDEKICAgIHN5c2NhbGxzOgogICAgICAjIG1vdW50IC0gbW91bnQgZmlsZXN5c3RlbQogICAgICAtIG1vdW50CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgIyBzaW5jZSBhIG5ldyBtb3VudCBhcHBlYXJzIG9uIHRoZSBzeXN0ZW0KICAgICAgIyB3ZSBjb25zaWRlciB0aGlzIGEgaGlnaC1sZXZlbCAiY3JlYXRpb24iIGV2ZW50CiAgICAgIHR5cGU6IGNyZWF0aW9uCiAgLSBhY3Rpb246IHJlbmFtZWQKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgICBwYXRoX2luZGV4OiAyCiAgICBzeXNjYWxsczoKICAgICAgIyByZW5hbWUgLSBjaGFuZ2UgdGhlIG5hbWUgb3IgbG9jYXRpb24gb2YgYSBmaWxlCiAgICAgIC0gcmVuYW1lCiAgICAgICMgcmVuYW1lYXQgLSBjaGFuZ2UgdGhlIG5hbWUgb3IgbG9jYXRpb24gb2YgYSBmaWxlCiAgICAgIC0gcmVuYW1lYXQKICAgICAgIyByZW5hbWVhdDIgLSBjaGFuZ2UgdGhlIG5hbWUgb3IgbG9jYXRpb24gb2YgYSBmaWxlCiAgICAgIC0gcmVuYW1lYXQyCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgdHlwZTogY2hhbmdlCiAgLSBhY3Rpb246IGNoZWNrZWQtbWV0YWRhdGEtb2YKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgc3lzY2FsbHM6CiAgICAgICMgYWNjZXNzIC0gY2hlY2sgdXNlcidzIHBlcm1pc3Npb25zIGZvciBhIGZpbGUKICAgICAgLSBhY2Nlc3MKICAgICAgIyBmYWNjZXNzYXQgLSBjaGVjayB1c2VyJ3MgcGVybWlzc2lvbnMgZm9yIGEgZmlsZQogICAgICAtIGZhY2Nlc3NhdAogICAgICAjIGZzdGF0YXQgLSBnZXQgZmlsZSBzdGF0dXMKICAgICAgLSBmc3RhdGF0CiAgICAgICMgbmV3ZnN0YXRhdCAtIGdldCBmaWxlIHN0YXR1cwogICAgICAtIG5ld2ZzdGF0YXQKICAgICAgIyBzdGF0IC0gZ2V0IGZpbGUgc3RhdHVzCiAgICAgIC0gc3RhdAogICAgICAjIHN0YXQ2NCAtIGdldCBmaWxlIHN0YXR1cwogICAgICAtIHN0YXQ2NAogICAgICAjIGZzdGF0IC0gZ2V0IGZpbGUgc3RhdHVzCiAgICAgIC0gZnN0YXQKICAgICAgIyBsc3RhdCAtIGdldCBmaWxlIHN0YXR1cwogICAgICAtIGxzdGF0CiAgICAgICMgZ2V0eGF0dHIgLSByZXRyaWV2ZSBhbiBleHRlbmRlZCBhdHRyaWJ1dGUgdmFsdWUKICAgICAgLSBnZXR4YXR0cgogICAgICAjIGxnZXR4YXR0ciAtIHJldHJpZXZlIGFuIGV4dGVuZGVkIGF0dHJpYnV0ZSB2YWx1ZQogICAgICAtIGxnZXR4YXR0cgogICAgICAjIGZnZXR4YXR0ciAtIHJldHJpZXZlIGFuIGV4dGVuZGVkIGF0dHJpYnV0ZSB2YWx1ZQogICAgICAtIGZnZXR4YXR0cgogICAgZWNzOiAqZWNzLWZpbGUKICAtIGFjdGlvbjogY2hlY2tlZC1maWxlc3lzdGVtLW1ldGFkYXRhLW9mCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGVzeXN0ZW0KICAgIHN5c2NhbGxzOgogICAgICAjIHN0YXRmcyAtIGdldCBmaWxlc3lzdGVtIHN0YXRpc3RpY3MKICAgICAgLSBzdGF0ZnMKICAgICAgIyBmc3RhdGZzIC0gZ2V0IGZpbGVzeXN0ZW0gc3RhdGlzdGljcwogICAgICAtIGZzdGF0ZnMKICAgIGVjczogKmVjcy1maWxlCiAgLSBhY3Rpb246IHN5bWxpbmtlZAogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBzeW1saW5rIC0gbWFrZSBhIG5ldyBuYW1lIGZvciBhIGZpbGUKICAgICAgLSBzeW1saW5rCiAgICAgICMgc3ltbGlua2F0IC0gbWFrZSBhIG5ldyBuYW1lIGZvciBhIGZpbGUKICAgICAgLSBzeW1saW5rYXQKICAgIGVjczoKICAgICAgPDw6ICplY3MtZmlsZQogICAgICAjICJjcmVhdGlvbiIgc2luY2Ugd2UncmUgY3JlYXRpbmcgYSBuZXcgZmlsZSBzeXN0ZW0KICAgICAgIyBlbnRyeSBmb3IgdGhlIHN5bWxpbmsKICAgICAgdHlwZTogY3JlYXRpb24KICAtIGFjdGlvbjogdW5tb3VudGVkCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGVzeXN0ZW0KICAgIHN5c2NhbGxzOgogICAgICAjIHVtb3VudCAtIHVubW91bnQgZmlsZXN5c3RlbQogICAgICAtIHVtb3VudAogICAgICAjIHVtb3VudDIgLSB1bm1vdW50IGZpbGVzeXN0ZW0KICAgICAgLSB1bW91bnQyCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgIyAiZGVsZXRpb24iIHRvIG1pcnJvciB0aGUgImNyZWF0aW9uIiBvZiB0aGUgbW91bnQKICAgICAgdHlwZTogZGVsZXRpb24KICAtIGFjdGlvbjogZGVsZXRlZAogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBybWRpciAtIGRlbGV0ZSBhIGRpcmVjdG9yeQogICAgICAtIHJtZGlyCiAgICAgICMgdW5saW5rIC0gZGVsZXRlIGEgbmFtZSBhbmQgcG9zc2libHkgdGhlIGZpbGUgaXQgcmVmZXJzIHRvCiAgICAgIC0gdW5saW5rCiAgICAgICMgdW5saW5rYXQgLSBkZWxldGUgYSBuYW1lIGFuZCBwb3NzaWJseSB0aGUgZmlsZSBpdCByZWZlcnMgdG8KICAgICAgLSB1bmxpbmthdAogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgIHR5cGU6IGRlbGV0aW9uCiAgLSBhY3Rpb246IGNoYW5nZWQtdGltZXN0YW1wLW9mCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIHV0aW1lIC0gY2hhbmdlIGZpbGUgbGFzdCBhY2Nlc3MgYW5kIG1vZGlmaWNhdGlvbiB0aW1lcwogICAgICAtIHV0aW1lCiAgICAgICMgdXRpbWVzIC0gY2hhbmdlIGZpbGUgbGFzdCBhY2Nlc3MgYW5kIG1vZGlmaWNhdGlvbiB0aW1lcwogICAgICAtIHV0aW1lcwogICAgICAjIGZ1dGltZXNhdCAtIGNoYW5nZSB0aW1lc3RhbXBzIG9mIGEgZmlsZSByZWxhdGl2ZSB0byBhIFwgZGlyZWN0b3J5IGZpbGUgZGVzY3JpcHRvcgogICAgICAtIGZ1dGltZXNhdAogICAgICAjIGZ1dGltZW5zIC0gY2hhbmdlIGZpbGUgdGltZXN0YW1wcyB3aXRoIG5hbm9zZWNvbmQgcHJlY2lzaW9uCiAgICAgIC0gZnV0aW1lbnMKICAgICAgIyB1dGltZW5zYXQgLSBjaGFuZ2UgZmlsZSB0aW1lc3RhbXBzIHdpdGggbmFub3NlY29uZCBwcmVjaXNpb24KICAgICAgLSB1dGltZW5zYXQKICAgIGVjczogKmVjcy1maWxlCiAgLSBhY3Rpb246IGV4ZWN1dGVkCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIGV4ZWN2ZSAtIGV4ZWN1dGUgcHJvZ3JhbQogICAgICAtIGV4ZWN2ZQogICAgICAjIGV4ZWN2ZWF0IC0gZXhlY3V0ZSBwcm9ncmFtIHJlbGF0aXZlIHRvIGEgZGlyZWN0b3J5IGZpbGUgZGVzY3JpcHRvcgogICAgICAtIGV4ZWN2ZWF0CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogc3RhcnQKICAtIGFjdGlvbjogbGlzdGVuLWZvci1jb25uZWN0aW9ucwogICAgb2JqZWN0OgogICAgICB3aGF0OiBzb2NrZXQKICAgIHN5c2NhbGxzOgogICAgICAjIGxpc3Rlbi0gbGlzdGVuIGZvciBjb25uZWN0aW9ucyBvbiBhIHNvY2tldAogICAgICAtIGxpc3RlbgogICAgZWNzOgogICAgICA8PDogKmVjcy1uZXR3b3JrCiAgICAgIHR5cGU6IHN0YXJ0CiAgLSBhY3Rpb246IGFjY2VwdGVkLWNvbm5lY3Rpb24tZnJvbQogICAgb2JqZWN0OgogICAgICB3aGF0OiBzb2NrZXQKICAgIHN5c2NhbGxzOgogICAgICAjIGFjY2VwdCAtIGFjY2VwdCBhIGNvbm5lY3Rpb24gb24gYSBzb2NrZXQKICAgICAgLSBhY2NlcHQKICAgICAgIyBhY2NlcHQ0IC0gYWNjZXB0IGEgY29ubmVjdGlvbiBvbiBhIHNvY2tldAogICAgICAtIGFjY2VwdDQKICAgIGVjczoKICAgICAgPDw6ICplY3MtbmV0d29yawogICAgICB0eXBlOgogICAgICAgIC0gY29ubmVjdGlvbgogICAgICAgIC0gc3RhcnQKICAtIGFjdGlvbjogYm91bmQtc29ja2V0CiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNvY2tldAogICAgc3lzY2FsbHM6CiAgICAgICMgYmluZCAtYmluZCBhIG5hbWUgdG8gYSBzb2NrZXQKICAgICAgLSBiaW5kCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLW5ldHdvcmsKICAgICAgdHlwZTogc3RhcnQKICAtIGFjdGlvbjogY29ubmVjdGVkLXRvCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNvY2tldAogICAgc3lzY2FsbHM6CiAgICAgIC0gY29ubmVjdAogICAgZWNzOgogICAgICA8PDogKmVjcy1uZXR3b3JrCiAgICAgIHR5cGU6CiAgICAgICAgLSBjb25uZWN0aW9uCiAgICAgICAgLSBzdGFydAogIC0gYWN0aW9uOiByZWNlaXZlZC1mcm9tCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNvY2tldAogICAgc3lzY2FsbHM6CiAgICAgICMgcmVjdiAtIHJlY2VpdmUgYSBtZXNzYWdlIGZyb20gYSBzb2NrZXQKICAgICAgLSByZWN2CiAgICAgICMgcmVjdmZyb20gLSByZWNlaXZlIGEgbWVzc2FnZSBmcm9tIGEgc29ja2V0CiAgICAgIC0gcmVjdmZyb20KICAgICAgIyByZWN2bXNnIC0gcmVjZWl2ZSBhIG1lc3NhZ2UgZnJvbSBhIHNvY2tldAogICAgICAtIHJlY3Ztc2cKICAgICAgIyByZWN2bW1zZyAtIHJlY2VpdmUgbXVsdGlwbGUgbWVzc2FnZXMgb24gYSBzb2NrZXQKICAgICAgLSByZWN2bW1zZwogICAgZWNzOgogICAgICA8PDogKmVjcy1uZXR3b3JrCiAgLSBhY3Rpb246IHNlbnQtdG8KICAgIG9iamVjdDoKICAgICAgd2hhdDogc29ja2V0CiAgICBzeXNjYWxsczoKICAgICAgIyBzZW5kIC0gc2VuZCBhIG1lc3NhZ2Ugb24gYSBzb2NrZXQKICAgICAgLSBzZW5kCiAgICAgICMgc2VuZHRvIC0gc2VuZCBhIG1lc3NhZ2Ugb24gYSBzb2NrZXQKICAgICAgLSBzZW5kdG8KICAgICAgIyBzZW5kbXNnIC0gc2VuZCBhIG1lc3NhZ2Ugb24gYSBzb2NrZXQKICAgICAgLSBzZW5kbXNnCiAgICAgICMgc2VuZG1tc2cgLSBzZW5kIG11bHRpcGxlIG1lc3NhZ2VzIG9uIGEgc29ja2V0CiAgICAgIC0gc2VuZG1tc2cKICAgIGVjczoKICAgICAgPDw6ICplY3MtbmV0d29yawogIC0gYWN0aW9uOiBraWxsZWQtcGlkCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHByb2Nlc3MKICAgIHN5c2NhbGxzOgogICAgICAjIGtpbGwgLSBzZW5kIHNpZ25hbCB0byBhIHByb2Nlc3MKICAgICAgLSBraWxsCiAgICAgICMgdGtpbGwgLSBzZW5kIGEgc2lnbmFsIHRvIGEgdGhyZWFkCiAgICAgIC0gdGtpbGwKICAgICAgIyB0Z2tpbGwgLSBzZW5kIGEgc2lnbmFsIHRvIGEgdGhyZWFkCiAgICAgIC0gdGdraWxsCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogZW5kCiAgLSBhY3Rpb246IGNoYW5nZWQtaWRlbnRpdHktb2YKICAgIG9iamVjdDoKICAgICAgd2hhdDogcHJvY2VzcwogICAgaG93OiBzeXNjYWxsCiAgICBzeXNjYWxsczoKICAgICAgIyBzZXR1aWQgLSBzZXQgdXNlciBpZGVudGl0eQogICAgICAtIHNldHVpZAogICAgICAjIHNldGV1aWQgLSBzZXQgZWZmZWN0aXZlIHVzZXIgb3IgZ3JvdXAgSUQKICAgICAgLSBzZXRldWlkCiAgICAgICMgc2V0ZnN1aWQgLSBzZXQgdXNlciBpZGVudGl0eSB1c2VkIGZvciBmaWxlc3lzdGVtIGNoZWNrcwogICAgICAtIHNldGZzdWlkCiAgICAgICMgc2V0cmV1aWQgLSBzZXQgcmVhbCBhbmQvb3IgZWZmZWN0aXZlIHVzZXIgb3IgZ3JvdXAgSUQKICAgICAgLSBzZXRyZXVpZAogICAgICAjIHNldGdpZCAtIHNldCBncm91cCBpZGVudGl0eQogICAgICAtIHNldGdpZAogICAgICAjIHNldGVnaWQgLSBzZXQgZWZmZWN0aXZlIHVzZXIgb3IgZ3JvdXAgSUQKICAgICAgLSBzZXRlZ2lkCiAgICAgICMgc2V0ZnNnaWQgLSBzZXQgZ3JvdXAgaWRlbnRpdHkgdXNlZCBmb3IgZmlsZXN5c3RlbSBjaGVja3MKICAgICAgLSBzZXRmc2dpZAogICAgICAjIHNldHJlZ2lkIC0gc2V0IHJlYWwgYW5kL29yIGVmZmVjdGl2ZSB1c2VyIG9yIGdyb3VwIElECiAgICAgIC0gc2V0cmVnaWQKICAgICAgIyBzZXRyZXN1aWQgLSBzZXQgcmVhbCwgZWZmZWN0aXZlIGFuZCBzYXZlZCB1c2VyIG9yIGdyb3VwIElECiAgICAgIC0gc2V0cmVzdWlkCiAgICAgICMgc2V0cmVzZ2lkIC0gc2V0IHJlYWwsIGVmZmVjdGl2ZSBhbmQgc2F2ZWQgdXNlciBvciBncm91cCBJRAogICAgICAtIHNldHJlc2dpZAogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IGNoYW5nZQogIC0gYWN0aW9uOiBjaGFuZ2VkLXN5c3RlbS10aW1lCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHN5c3RlbQogICAgc3lzY2FsbHM6CiAgICAgICMgc2V0dGltZW9mZGF5IC0gZ2V0IC8gc2V0IHRpbWUKICAgICAgLSBzZXR0aW1lb2ZkYXkKICAgICAgIyBjbG9ja19zZXR0aW1lIC0gY2xvY2sgYW5kIHRpbWUgZnVuY3Rpb25zCiAgICAgIC0gY2xvY2tfc2V0dGltZQogICAgICAjIHN0aW1lIC0gc2V0IHRpbWUKICAgICAgLSBzdGltZQogICAgICAjIGFkanRpbWV4IC0gdHVuZSBrZXJuZWwgY2xvY2sKICAgICAgLSBhZGp0aW1leAogICAgZWNzOgogICAgICA8PDogKmVjcy1ob3N0CiAgICAgIHR5cGU6IGNoYW5nZQogIC0gYWN0aW9uOiBtYWtlLWRldmljZQogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBta25vZCAtIGNyZWF0ZSBhIHNwZWNpYWwgb3Igb3JkaW5hcnkgZmlsZQogICAgICAtIG1rbm9kCiAgICAgICMgbWtub2RhdCAtIGNyZWF0ZSBhIHNwZWNpYWwgb3Igb3JkaW5hcnkgZmlsZQogICAgICAtIG1rbm9kYXQKICAgIGVjczoKICAgICAgPDw6ICplY3MtZmlsZQogICAgICB0eXBlOiBjcmVhdGlvbgogIC0gYWN0aW9uOiBjaGFuZ2VkLXN5c3RlbS1uYW1lCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHN5c3RlbQogICAgc3lzY2FsbHM6CiAgICAgICMgc2V0aG9zdG5hbWUgLSBnZXQvc2V0IGhvc3RuYW1lCiAgICAgIC0gc2V0aG9zdG5hbWUKICAgICAgIyBzZXRkb21haW5uYW1lIC0gZ2V0L3NldCBOSVMgZG9tYWluIG5hbWUKICAgICAgLSBzZXRkb21haW5uYW1lCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWhvc3QKICAgICAgdHlwZTogY2hhbmdlCiAgLSBhY3Rpb246IGFsbG9jYXRlZC1tZW1vcnkKICAgIG9iamVjdDoKICAgICAgd2hhdDogbWVtb3J5CiAgICBzeXNjYWxsczoKICAgICAgIyBtbWFwIC0gbWFwIG9yIHVubWFwIGZpbGVzIG9yIGRldmljZXMgaW50byBtZW1vcnkKICAgICAgLSBtbWFwCiAgICAgICMgbW1hcDIgLSBtYXAgZmlsZXMgb3IgZGV2aWNlcyBpbnRvIG1lbW9yeQogICAgICAtIG1tYXAyCiAgICAgICMgYnJrIC0gY2hhbmdlIGRhdGEgc2VnbWVudCBzaXplCiAgICAgIC0gYnJrCiAgICBlY3M6ICplY3MtcHJvY2VzcwogIC0gYWN0aW9uOiBhZGp1c3RlZC1zY2hlZHVsaW5nLXBvbGljeS1vZgogICAgb2JqZWN0OgogICAgICB3aGF0OiBwcm9jZXNzCiAgICBob3c6IHN5c2NhbGwKICAgIHN5c2NhbGxzOgogICAgICAjIHNjaGVkX3NldHBhcmFtIC0gc2V0IGFuZCBnZXQgc2NoZWR1bGluZyBwYXJhbWV0ZXJzCiAgICAgIC0gc2NoZWRfc2V0cGFyYW0KICAgICAgIyBzY2hlZF9zZXRzY2hlZHVsZXIgLSBzZXQgYW5kIGdldCBzY2hlZHVsaW5nIHBvbGljeS9wYXJhbWV0ZXJzCiAgICAgIC0gc2NoZWRfc2V0c2NoZWR1bGVyCiAgICAgICMgc2NoZWRfc2V0YXR0ciAtIHNldCBhbmQgZ2V0IHNjaGVkdWxpbmcgcG9saWN5IGFuZCBhdHRyaWJ1dGVzCiAgICAgIC0gc2NoZWRfc2V0YXR0cgogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IGNoYW5nZQoKICAjIEN1cnJlbnRseSB1bmhhbmRsZWQKICAjIHRoaXMgbGlzdCBjb21lcyBmcm9tIHBhcnNpbmcgbGludXggbWFuIHBhZ2VzIGF0IGh0dHBzOi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9kb2NzL21hbi1wYWdlcy9tYW4tcGFnZXMuZ2l0CgogICMgc2lnYWN0aW9uIC0gZXhhbWluZSBhbmQgY2hhbmdlIGEgc2lnbmFsIGFjdGlvbgogICMgcnRfc2lnYWN0aW9uIC0gZXhhbWluZSBhbmQgY2hhbmdlIGEgc2lnbmFsIGFjdGlvbgogICMgcHJlYWQgLSByZWFkIGZyb20gb3Igd3JpdGUgdG8gYSBmaWxlIGRlc2NyaXB0b3IgYXQgYSBnaXZlbiBvZmZzZXQKICAjIHB3cml0ZSAtIHJlYWQgZnJvbSBvciB3cml0ZSB0byBhIGZpbGUgZGVzY3JpcHRvciBhdCBhIGdpdmVuIG9mZnNldAogICMgczM5MF9ndWFyZGVkX3N0b3JhZ2UgLSBvcGVyYXRpb25zIHdpdGggei9BcmNoaXRlY3R1cmUgZ3VhcmRlZCBzdG9yYWdlIGZhY2lsaXR5CiAgIyBzY2hlZF9nZXRhdHRyIC0gc2V0IGFuZCBnZXQgc2NoZWR1bGluZyBwb2xpY3kgYW5kIGF0dHJpYnV0ZXMKICAjIGdldHJ1c2FnZSAtIGdldCByZXNvdXJjZSB1c2FnZQogICMgZmxvY2sgLSBhcHBseSBvciByZW1vdmUgYW4gYWR2aXNvcnkgbG9jayBvbiBhbiBvcGVuIGZpbGUKICAjIHBpZGZkX2dldGZkIC0gb2J0YWluIGEgZHVwbGljYXRlIG9mIGFub3RoZXIgcHJvY2VzcydzIGZpbGUgZGVzY3JpcHRvcgogICMgY2xvY2tfbmFub3NsZWVwIC0gaGlnaC1yZXNvbHV0aW9uIHNsZWVwIHdpdGggc3BlY2lmaWFibGUgY2xvY2sKICAjIGdldHBhZ2VzaXplIC0gZ2V0IG1lbW9yeSBwYWdlIHNpemUKICAjIHBpZGZkX29wZW4gLSBvYnRhaW4gYSBmaWxlIGRlc2NyaXB0b3IgdGhhdCByZWZlcnMgdG8gYSBwcm9jZXNzCiAgIyBzcGxpY2UgLSBzcGxpY2UgZGF0YSB0by9mcm9tIGEgcGlwZQogICMgZ2V0cmVzdWlkIC0gZ2V0IHJlYWwsIGVmZmVjdGl2ZSBhbmQgc2F2ZWQgdXNlci9ncm91cCBJRHMKICAjIGdldHJlc2dpZCAtIGdldCByZWFsLCBlZmZlY3RpdmUgYW5kIHNhdmVkIHVzZXIvZ3JvdXAgSURzCiAgIyByZW1hcF9maWxlX3BhZ2VzIC0gY3JlYXRlIGEgbm9ubGluZWFyIGZpbGUgbWFwcGluZwogICMgaW9fY2FuY2VsIC0gY2FuY2VsIGFuIG91dHN0YW5kaW5nIGFzeW5jaHJvbm91cyBJL08gb3BlcmF0aW9uCiAgIyBwcmN0bCAtIG9wZXJhdGlvbnMgb24gYSBwcm9jZXNzIG9yIHRocmVhZAogICMgY2xvY2tfZ2V0cmVzIC0gY2xvY2sgYW5kIHRpbWUgZnVuY3Rpb25zCiAgIyBjbG9ja19nZXR0aW1lIC0gY2xvY2sgYW5kIHRpbWUgZnVuY3Rpb25zCiAgIyBnZXRncm91cHMgLSBnZXQvc2V0IGxpc3Qgb2Ygc3VwcGxlbWVudGFyeSBncm91cCBJRHMKICAjIHNldGdyb3VwcyAtIGdldC9zZXQgbGlzdCBvZiBzdXBwbGVtZW50YXJ5IGdyb3VwIElEcwogICMgdm1zcGxpY2UgLSBzcGxpY2UgdXNlciBwYWdlcyB0by9mcm9tIGEgcGlwZQogICMgZXBvbGxfY3JlYXRlIC0gb3BlbiBhbiBlcG9sbCBmaWxlIGRlc2NyaXB0b3IKICAjIGVwb2xsX2NyZWF0ZTEgLSBvcGVuIGFuIGVwb2xsIGZpbGUgZGVzY3JpcHRvcgogICMgcG9zaXhfZmFkdmlzZSAtIHByZWRlY2xhcmUgYW4gYWNjZXNzIHBhdHRlcm4gZm9yIGZpbGUgZGF0YQogICMgc2lnd2FpdGluZm8gLSBzeW5jaHJvbm91c2x5IHdhaXQgZm9yIHF1ZXVlZCBzaWduYWxzCiAgIyBzaWd0aW1lZHdhaXQgLSBzeW5jaHJvbm91c2x5IHdhaXQgZm9yIHF1ZXVlZCBzaWduYWxzCiAgIyBydF9zaWd0aW1lZHdhaXQgLSBzeW5jaHJvbm91c2x5IHdhaXQgZm9yIHF1ZXVlZCBzaWduYWxzCiAgIyBzaWdyZXR1cm4gLSByZXR1cm4gZnJvbSBzaWduYWwgaGFuZGxlciBhbmQgY2xlYW51cCBzdGFjayBmcmFtZQogICMgcnRfc2lncmV0dXJuIC0gcmV0dXJuIGZyb20gc2lnbmFsIGhhbmRsZXIgYW5kIGNsZWFudXAgc3RhY2sgZnJhbWUKICAjIGdldHJhbmRvbSAtIG9idGFpbiBhIHNlcmllcyBvZiByYW5kb20gYnl0ZXMKICAjIGtleWN0bCAtIG1hbmlwdWxhdGUgdGhlIGtlcm5lbCdzIGtleSBtYW5hZ2VtZW50IGZhY2lsaXR5CiAgIyBzY2hlZF9nZXRzY2hlZHVsZXIgLSBzZXQgYW5kIGdldCBzY2hlZHVsaW5nIHBvbGljeS9wYXJhbWV0ZXJzCiAgIyBtYmluZCAtIHNldCBtZW1vcnkgcG9saWN5IGZvciBhIG1lbW9yeSByYW5nZQogICMgZ2V0cHJpb3JpdHkgLSBnZXQvc2V0IHByb2dyYW0gc2NoZWR1bGluZyBwcmlvcml0eQogICMgc2V0cHJpb3JpdHkgLSBnZXQvc2V0IHByb2dyYW0gc2NoZWR1bGluZyBwcmlvcml0eQogICMgaW5vdGlmeV9pbml0IC0gaW5pdGlhbGl6ZSBhbiBpbm90aWZ5IGluc3RhbmNlCiAgIyBpbm90aWZ5X2luaXQxIC0gaW5pdGlhbGl6ZSBhbiBpbm90aWZ5IGluc3RhbmNlCiAgIyBzZW1jdGwgLSBTeXN0ZW0gViBzZW1hcGhvcmUgY29udHJvbCBvcGVyYXRpb25zCiAgIyBnZXRob3N0bmFtZSAtIGdldC9zZXQgaG9zdG5hbWUKICAjIHB0cmFjZSAtIHByb2Nlc3MgdHJhY2UKICAjIHN5c2N0bCAtIHJlYWQvd3JpdGUgc3lzdGVtIHBhcmFtZXRlcnMKICAjIGdldHBlZXJuYW1lIC0gZ2V0IG5hbWUgb2YgY29ubmVjdGVkIHBlZXIgc29ja2V0CiAgIyBmb3JrIC0gY3JlYXRlIGEgY2hpbGQgcHJvY2VzcwogICMgcXVlcnlfbW9kdWxlIC0gcXVlcnkgdGhlIGtlcm5lbCBmb3IgdmFyaW91cyBiaXRzIHBlcnRhaW5pbmcgdG8gbW9kdWxlcwogICMgaW9jdGxfbGlzdCAtIGxpc3Qgb2YgaW9jdGwgY2FsbHMgaW4gTGludXgvaTM4NiBrZXJuZWwKICAjIG1zZ2dldCAtIGdldCBhIFN5c3RlbSBWIG1lc3NhZ2UgcXVldWUgaWRlbnRpZmllcgogICMgc3B1X2NyZWF0ZSAtIGNyZWF0ZSBhIG5ldyBzcHUgY29udGV4dAogICMgc3VicGFnZV9wcm90IC0gZGVmaW5lIGEgc3VicGFnZSBwcm90ZWN0aW9uIGZvciBhbiBhZGRyZXNzIHJhbmdlCiAgIyBxdW90YWN0bCAtIG1hbmlwdWxhdGUgZGlzayBxdW90YXMKICAjIG5mc3NlcnZjdGwgLSBzeXNjYWxsIGludGVyZmFjZSB0byBrZXJuZWwgbmZzIGRhZW1vbgogICMgb3BlbmF0MiAtIG9wZW4gYW5kIHBvc3NpYmx5IGNyZWF0ZSBhIGZpbGUgKGV4dGVuZGVkKQogICMgZ2V0cmxpbWl0IC0gZ2V0L3NldCByZXNvdXJjZSBsaW1pdHMKICAjIHNldHJsaW1pdCAtIGdldC9zZXQgcmVzb3VyY2UgbGltaXRzCiAgIyBwcmxpbWl0IC0gZ2V0L3NldCByZXNvdXJjZSBsaW1pdHMKICAjIHRlZSAtIGR1cGxpY2F0aW5nIHBpcGUgY29udGVudAogICMgc2htZ2V0IC0gYWxsb2NhdGVzIGEgU3lzdGVtIFYgc2hhcmVkIG1lbW9yeSBzZWdtZW50CiAgIyBjcmVhdGVfbW9kdWxlIC0gY3JlYXRlIGEgbG9hZGFibGUgbW9kdWxlIGVudHJ5CiAgIyBnZXR0aW1lb2ZkYXkgLSBnZXQgLyBzZXQgdGltZQogICMgdGltZXJfY3JlYXRlIC0gY3JlYXRlIGEgUE9TSVggcGVyLXByb2Nlc3MgdGltZXIKICAjIGZhbm90aWZ5X21hcmsgLSBhZGQsIHJlbW92ZSwgb3IgbW9kaWZ5IGFuIGZhbm90aWZ5IG1hcmsgb24gYSBmaWxlc3lzdGVtIG9iamVjdAogICMgcGlwZSAtIGNyZWF0ZSBwaXBlCiAgIyBwaXBlMiAtIGNyZWF0ZSBwaXBlCiAgIyBpbnRybyAtIGludHJvZHVjdGlvbiB0byBzeXN0ZW0gY2FsbHMKICAjIGxvb2t1cF9kY29va2llIC0gcmV0dXJuIGEgZGlyZWN0b3J5IGVudHJ5J3MgcGF0aAogICMgc3lzZnMgLSBnZXQgZmlsZXN5c3RlbSB0eXBlIGluZm9ybWF0aW9uCiAgIyBzMzkwX3J1bnRpbWVfaW5zdHIgLSBlbmFibGUvZGlzYWJsZSBzMzkwIENQVSBydW4tdGltZSBpbnN0cnVtZW50YXRpb24KICAjIHNldG5zIC0gcmVhc3NvY2lhdGUgdGhyZWFkIHdpdGggYSBuYW1lc3BhY2UKICAjIHNldF9tZW1wb2xpY3kgLSBzZXQgZGVmYXVsdCBOVU1BIG1lbW9yeSBwb2xpY3kgZm9yIGEgdGhyZWFkIGFuZCBpdHMgY2hpbGRyZW4KICAjIG5pY2UgLSBjaGFuZ2UgcHJvY2VzcyBwcmlvcml0eQogICMgaW9fc2V0dXAgLSBjcmVhdGUgYW4gYXN5bmNocm9ub3VzIEkvTyBjb250ZXh0CiAgIyBtaW5jb3JlIC0gZGV0ZXJtaW5lIHdoZXRoZXIgcGFnZXMgYXJlIHJlc2lkZW50IGluIG1lbW9yeQogICMgaW9jdGxfY29uc29sZSAtIGlvY3RscyBmb3IgY29uc29sZSB0ZXJtaW5hbCBhbmQgdmlydHVhbCBjb25zb2xlcwogICMgcG9sbCAtIHdhaXQgZm9yIHNvbWUgZXZlbnQgb24gYSBmaWxlIGRlc2NyaXB0b3IKICAjIHBwb2xsIC0gd2FpdCBmb3Igc29tZSBldmVudCBvbiBhIGZpbGUgZGVzY3JpcHRvcgogICMgY2FwZ2V0IC0gc2V0L2dldCBjYXBhYmlsaXRpZXMgb2YgdGhyZWFkKHMpCiAgIyBjYXBzZXQgLSBzZXQvZ2V0IGNhcGFiaWxpdGllcyBvZiB0aHJlYWQocykKICAjIGlvY3RsX3R0eSAtIGlvY3RscyBmb3IgdGVybWluYWxzIGFuZCBzZXJpYWwgbGluZXMKICAjIGlvcGwgLSBjaGFuZ2UgSS9PIHByaXZpbGVnZSBsZXZlbAogICMgaW9fZ2V0ZXZlbnRzIC0gcmVhZCBhc3luY2hyb25vdXMgSS9PIGV2ZW50cyBmcm9tIHRoZSBjb21wbGV0aW9uIHF1ZXVlCiAgIyBwcm9jZXNzX3ZtX3JlYWR2IC0gdHJhbnNmZXIgZGF0YSBiZXR3ZWVuIHByb2Nlc3MgYWRkcmVzcyBzcGFjZXMKICAjIHByb2Nlc3Nfdm1fd3JpdGV2IC0gdHJhbnNmZXIgZGF0YSBiZXR3ZWVuIHByb2Nlc3MgYWRkcmVzcyBzcGFjZXMKICAjIHBjaWNvbmZpZ19yZWFkIC0gcGNpIGRldmljZSBpbmZvcm1hdGlvbiBoYW5kbGluZwogICMgcGNpY29uZmlnX3dyaXRlIC0gcGNpIGRldmljZSBpbmZvcm1hdGlvbiBoYW5kbGluZwogICMgcGNpY29uZmlnX2lvYmFzZSAtIHBjaSBkZXZpY2UgaW5mb3JtYXRpb24gaGFuZGxpbmcKICAjIHNicmsgLSBjaGFuZ2UgZGF0YSBzZWdtZW50IHNpemUKICAjIHNldF90aWRfYWRkcmVzcyAtIHNldCBwb2ludGVyIHRvIHRocmVhZCBJRAogICMgcGtleV9hbGxvYyAtIGFsbG9jYXRlIG9yIGZyZWUgYSBwcm90ZWN0aW9uIGtleQogICMgcGtleV9mcmVlIC0gYWxsb2NhdGUgb3IgZnJlZSBhIHByb3RlY3Rpb24ga2V5CiAgIyBzZWxlY3QgLSBzeW5jaHJvbm91cyBJL08gbXVsdGlwbGV4aW5nCiAgIyBwc2VsZWN0IC0gc3luY2hyb25vdXMgSS9PIG11bHRpcGxleGluZwogICMga2V4ZWNfbG9hZCAtIGxvYWQgYSBuZXcga2VybmVsIGZvciBsYXRlciBleGVjdXRpb24KICAjIGtleGVjX2ZpbGVfbG9hZCAtIGxvYWQgYSBuZXcga2VybmVsIGZvciBsYXRlciBleGVjdXRpb24KICAjIHBlcnNvbmFsaXR5IC0gc2V0IHRoZSBwcm9jZXNzIGV4ZWN1dGlvbiBkb21haW4KICAjIGlvY3RsX2dldGZzbWFwIC0gcmV0cmlldmUgdGhlIHBoeXNpY2FsIGxheW91dCBvZiB0aGUgZmlsZXN5c3RlbQogICMgaW5vdGlmeV9ybV93YXRjaCAtIHJlbW92ZSBhbiBleGlzdGluZyB3YXRjaCBmcm9tIGFuIGlub3RpZnkgaW5zdGFuY2UKICAjIHBlcmZfZXZlbnRfb3BlbiAtIHNldCB1cCBwZXJmb3JtYW5jZSBtb25pdG9yaW5nCiAgIyB0aW1lcl9nZXRvdmVycnVuIC0gZ2V0IG92ZXJydW4gY291bnQgZm9yIGEgUE9TSVggcGVyLXByb2Nlc3MgdGltZXIKICAjIHdhaXQzIC0gd2FpdCBmb3IgcHJvY2VzcyB0byBjaGFuZ2Ugc3RhdGUsIEJTRCBzdHlsZQogICMgd2FpdDQgLSB3YWl0IGZvciBwcm9jZXNzIHRvIGNoYW5nZSBzdGF0ZSwgQlNEIHN0eWxlCiAgIyBsaW5rIC0gbWFrZSBhIG5ldyBuYW1lIGZvciBhIGZpbGUKICAjIGxpbmthdCAtIG1ha2UgYSBuZXcgbmFtZSBmb3IgYSBmaWxlCiAgIyBzY2hlZF9ycl9nZXRfaW50ZXJ2YWwgLSBnZXQgdGhlIFNDSEVEX1JSIGludGVydmFsIGZvciB0aGUgbmFtZWQgcHJvY2VzcwogICMgbXVubWFwIC0gbWFwIG9yIHVubWFwIGZpbGVzIG9yIGRldmljZXMgaW50byBtZW1vcnkKICAjIHNvY2tldGNhbGwgLSBzb2NrZXQgc3lzdGVtIGNhbGxzCiAgIyBtcmVtYXAgLSByZW1hcCBhIHZpcnR1YWwgbWVtb3J5IGFkZHJlc3MKICAjIHZmb3JrIC0gY3JlYXRlIGEgY2hpbGQgcHJvY2VzcyBhbmQgYmxvY2sgcGFyZW50CiAgIyBzZWNjb21wIC0gb3BlcmF0ZSBvbiBTZWN1cmUgQ29tcHV0aW5nIHN0YXRlIG9mIHRoZSBwcm9jZXNzCiAgIyByZXF1ZXN0X2tleSAtIHJlcXVlc3QgYSBrZXkgZnJvbSB0aGUga2VybmVsJ3Mga2V5IG1hbmFnZW1lbnQgZmFjaWxpdHkKICAjIHN5c2NhbGwgLSBpbmRpcmVjdCBzeXN0ZW0gY2FsbAogICMga2NtcCAtIGNvbXBhcmUgdHdvIHByb2Nlc3NlcyB0byBkZXRlcm1pbmUgaWYgdGhleSBzaGFyZSBhIGtlcm5lbCByZXNvdXJjZQogICMgcmVhZGRpciAtIHJlYWQgZGlyZWN0b3J5IGVudHJ5CiAgIyBpb3Blcm0gLSBzZXQgcG9ydCBpbnB1dC9vdXRwdXQgcGVybWlzc2lvbnMKICAjIHNwdV9ydW4gLSBleGVjdXRlIGFuIFNQVSBjb250ZXh0CiAgIyByZWJvb3QgLSByZWJvb3Qgb3IgZW5hYmxlL2Rpc2FibGUgQ3RybC1BbHQtRGVsCiAgIyByZWFkYWhlYWQgLSBpbml0aWF0ZSBmaWxlIHJlYWRhaGVhZCBpbnRvIHBhZ2UgY2FjaGUKICAjIHNjaGVkX2dldHBhcmFtIC0gc2V0IGFuZCBnZXQgc2NoZWR1bGluZyBwYXJhbWV0ZXJzCiAgIyBhY2N0IC0gc3dpdGNoIHByb2Nlc3MgYWNjb3VudGluZyBvbiBvciBvZmYKICAjIHNpZ3N1c3BlbmQgLSB3YWl0IGZvciBhIHNpZ25hbAogICMgcnRfc2lnc3VzcGVuZCAtIHdhaXQgZm9yIGEgc2lnbmFsCiAgIyBleGl0X2dyb3VwIC0gZXhpdCBhbGwgdGhyZWFkcyBpbiBhIHByb2Nlc3MKICAjIHNvY2tldCAtIGNyZWF0ZSBhbiBlbmRwb2ludCBmb3IgY29tbXVuaWNhdGlvbgogICMgaW9jdGxfdXNlcmZhdWx0ZmQgLSBjcmVhdGUgYSBmaWxlIGRlc2NyaXB0b3IgZm9yIGhhbmRsaW5nIHBhZ2UgZmF1bHRzIGluIHVzZXIgc3BhY2UKICAjIHNjaGVkX2dldF9wcmlvcml0eV9tYXggLSBnZXQgc3RhdGljIHByaW9yaXR5IHJhbmdlCiAgIyBzY2hlZF9nZXRfcHJpb3JpdHlfbWluICAtIGdldCBzdGF0aWMgcHJpb3JpdHkgcmFuZ2UKICAjIGdldGRlbnRzIC0gZ2V0IGRpcmVjdG9yeSBlbnRyaWVzCiAgIyBnZXRkZW50czY0IC0gZ2V0IGRpcmVjdG9yeSBlbnRyaWVzCiAgIyBzZWxlY3QgLSBzeW5jaHJvbm91cyBJL08gbXVsdGlwbGV4aW5nCiAgIyBwc2VsZWN0IC0gc3luY2hyb25vdXMgSS9PIG11bHRpcGxleGluZwogICMgYWxsb2NfaHVnZXBhZ2VzIC0gYWxsb2NhdGUgb3IgZnJlZSBodWdlIHBhZ2VzCiAgIyBmcmVlX2h1Z2VwYWdlcyAtIGFsbG9jYXRlIG9yIGZyZWUgaHVnZSBwYWdlcwogICMgZnN5bmMgLSBzeW5jaHJvbml6ZSBhIGZpbGUncyBpbi1jb3JlIHN0YXRlIHdpdGggc3RvcmFnZSBkZXZpY2UKICAjIGZkYXRhc3luYyAtIHN5bmNocm9uaXplIGEgZmlsZSdzIGluLWNvcmUgc3RhdGUgd2l0aCBzdG9yYWdlIGRldmljZQogICMgc3lzY2FsbHMgLSBMaW51eCBzeXN0ZW0gY2FsbHMKICAjIG1lbWZkX2NyZWF0ZSAtIGNyZWF0ZSBhbiBhbm9ueW1vdXMgZmlsZQogICMgbW9kaWZ5X2xkdCAtIGdldCBvciBzZXQgYSBwZXItcHJvY2VzcyBMRFQgZW50cnkKICAjIGdldF9rZXJuZWxfc3ltcyAtIHJldHJpZXZlIGV4cG9ydGVkIGtlcm5lbCBhbmQgbW9kdWxlIHN5bWJvbHMKICAjIGxzZWVrIC0gcmVwb3NpdGlvbiByZWFkL3dyaXRlIGZpbGUgb2Zmc2V0CiAgIyBzaG1hdCAtIFN5c3RlbSBWIHNoYXJlZCBtZW1vcnkgb3BlcmF0aW9ucwogICMgc2htZHQgLSBTeXN0ZW0gViBzaGFyZWQgbWVtb3J5IG9wZXJhdGlvbnMKICAjIHRpbWVyX2RlbGV0ZSAtIGRlbGV0ZSBhIFBPU0lYIHBlci1wcm9jZXNzIHRpbWVyCiAgIyBwZXJmbW9uY3RsIC0gaW50ZXJmYWNlIHRvIElBLTY0IHBlcmZvcm1hbmNlIG1vbml0b3JpbmcgdW5pdAogICMgbW92ZV9wYWdlcyAtIG1vdmUgaW5kaXZpZHVhbCBwYWdlcyBvZiBhIHByb2Nlc3MgdG8gYW5vdGhlciBub2RlCiAgIyBjaGRpciAtIGNoYW5nZSB3b3JraW5nIGRpcmVjdG9yeQogICMgZmNoZGlyIC0gY2hhbmdlIHdvcmtpbmcgZGlyZWN0b3J5CiAgIyB0aW1lIC0gZ2V0IHRpbWUgaW4gc2Vjb25kcwogICMgX2V4aXQgLSB0ZXJtaW5hdGUgdGhlIGNhbGxpbmcgcHJvY2VzcwogICMgX0V4aXQgLSB0ZXJtaW5hdGUgdGhlIGNhbGxpbmcgcHJvY2VzcwogICMgczM5MF9zdGh5aSAtIGVtdWxhdGUgU1RIWUkgaW5zdHJ1Y3Rpb24KICAjIGlvX3N1Ym1pdCAtIHN1Ym1pdCBhc3luY2hyb25vdXMgSS9PIGJsb2NrcyBmb3IgcHJvY2Vzc2luZwogICMgbWxvY2sgLSBsb2NrIGFuZCB1bmxvY2sgbWVtb3J5CiAgIyBtbG9jazIgLSBsb2NrIGFuZCB1bmxvY2sgbWVtb3J5CiAgIyBtdW5sb2NrIC0gbG9jayBhbmQgdW5sb2NrIG1lbW9yeQogICMgbWxvY2thbGwgLSBsb2NrIGFuZCB1bmxvY2sgbWVtb3J5CiAgIyBtdW5sb2NrYWxsIC0gbG9jayBhbmQgdW5sb2NrIG1lbW9yeQogICMgdW1hc2sgLSBzZXQgZmlsZSBtb2RlIGNyZWF0aW9uIG1hc2sKICAjIGFyY2hfcHJjdGwgLSBzZXQgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHRocmVhZCBzdGF0ZQogICMgdXNlbGliIC0gbG9hZCBzaGFyZWQgbGlicmFyeQogICMgc2VuZGZpbGUgLSB0cmFuc2ZlciBkYXRhIGJldHdlZW4gZmlsZSBkZXNjcmlwdG9ycwogICMgc2htY3RsIC0gU3lzdGVtIFYgc2hhcmVkIG1lbW9yeSBjb250cm9sCiAgIyBlcG9sbF93YWl0IC0gd2FpdCBmb3IgYW4gSS9PIGV2ZW50IG9uIGFuIGVwb2xsIGZpbGUgZGVzY3JpcHRvcgogICMgZXBvbGxfcHdhaXQgLSB3YWl0IGZvciBhbiBJL08gZXZlbnQgb24gYW4gZXBvbGwgZmlsZSBkZXNjcmlwdG9yCiAgIyBzaWdhbHRzdGFjayAtIHNldCBhbmQvb3IgZ2V0IHNpZ25hbCBzdGFjayBjb250ZXh0CiAgIyBpb2N0bCAtIGNvbnRyb2wgZGV2aWNlCiAgIyBzaWduYWxmZCAtIGNyZWF0ZSBhIGZpbGUgZGVzY3JpcHRvciBmb3IgYWNjZXB0aW5nIHNpZ25hbHMKICAjIHVuc2hhcmUgLSBkaXNhc3NvY2lhdGUgcGFydHMgb2YgdGhlIHByb2Nlc3MgZXhlY3V0aW9uIGNvbnRleHQKICAjIGNocm9vdCAtIGNoYW5nZSByb290IGRpcmVjdG9yeQogICMgbWFkdmlzZSAtIGdpdmUgYWR2aWNlIGFib3V0IHVzZSBvZiBtZW1vcnkKICAjIGdldHRpZCAtIGdldCB0aHJlYWQgaWRlbnRpZmljYXRpb24KICAjIGdldHNvY2tuYW1lIC0gZ2V0IHNvY2tldCBuYW1lCiAgIyBpb19kZXN0cm95IC0gZGVzdHJveSBhbiBhc3luY2hyb25vdXMgSS9PIGNvbnRleHQKICAjIHNldHVwIC0gc2V0dXAgZGV2aWNlcyBhbmQgZmlsZXN5c3RlbXMsIG1vdW50IHJvb3QgZmlsZXN5c3RlbQogICMgbnRwX2FkanRpbWUgLSB0dW5lIGtlcm5lbCBjbG9jawogICMgc2VtZ2V0IC0gZ2V0IGEgU3lzdGVtIFYgc2VtYXBob3JlIHNldCBpZGVudGlmaWVyCiAgIyBnZXR1aWQgLSBnZXQgdXNlciBpZGVudGl0eQogICMgZ2V0ZXVpZCAtIGdldCB1c2VyIGlkZW50aXR5CiAgIyBfc3lzY2FsbCAtIGludm9raW5nIGEgc3lzdGVtIGNhbGwgd2l0aG91dCBsaWJyYXJ5IHN1cHBvcnQgKE9CU09MRVRFKQogICMgc2NoZWRfc2V0YWZmaW5pdHkgLSBcIHNldCBhbmQgZ2V0IGEgdGhyZWFkJ3MgQ1BVIGFmZmluaXR5IG1hc2sKICAjIHNjaGVkX2dldGFmZmluaXR5IC0gXCBzZXQgYW5kIGdldCBhIHRocmVhZCdzIENQVSBhZmZpbml0eSBtYXNrCiAgIyBjYWNoZWZsdXNoIC0gZmx1c2ggY29udGVudHMgb2YgaW5zdHJ1Y3Rpb24gYW5kL29yIGRhdGEgY2FjaGUKICAjIHBpdm90X3Jvb3QgLSBjaGFuZ2UgdGhlIHJvb3QgbW91bnQKICAjIG1zZ2N0bCAtIFN5c3RlbSBWIG1lc3NhZ2UgY29udHJvbCBvcGVyYXRpb25zCiAgIyBpb2N0bF9mYXQgLSBtYW5pcHVsYXRpbmcgdGhlIEZBVCBmaWxlc3lzdGVtCiAgIyBzZXRwZ2lkIC0gc2V0L2dldCBwcm9jZXNzIGdyb3VwCiAgIyBnZXRwZ2lkIC0gc2V0L2dldCBwcm9jZXNzIGdyb3VwCiAgIyBzZXRwZ3JwIC0gc2V0L2dldCBwcm9jZXNzIGdyb3VwCiAgIyBnZXRwZ3JwIC0gc2V0L2dldCBwcm9jZXNzIGdyb3VwCiAgIyBzb2NrZXRwYWlyIC0gY3JlYXRlIGEgcGFpciBvZiBjb25uZWN0ZWQgc29ja2V0cwogICMgYmRmbHVzaCAtIHN0YXJ0LCBmbHVzaCwgb3IgdHVuZSBidWZmZXItZGlydHktZmx1c2ggZGFlbW9uCiAgIyBhbGFybSAtIHNldCBhbiBhbGFybSBjbG9jayBmb3IgZGVsaXZlcnkgb2YgYSBzaWduYWwKICAjIHRpbWVyX3NldHRpbWUgLSBhcm0vZGlzYXJtIGFuZCBmZXRjaCBzdGF0ZSBvZiBQT1NJWCBwZXItcHJvY2VzcyB0aW1lcgogICMgdGltZXJfZ2V0dGltZSAtIGFybS9kaXNhcm0gYW5kIGZldGNoIHN0YXRlIG9mIFBPU0lYIHBlci1wcm9jZXNzIHRpbWVyCiAgIyBhZGRfa2V5IC0gYWRkIGEga2V5IHRvIHRoZSBrZXJuZWwncyBrZXkgbWFuYWdlbWVudCBmYWNpbGl0eQogICMgcnRfc2lncXVldWVpbmZvIC0gcXVldWUgYSBzaWduYWwgYW5kIGRhdGEKICAjIHJ0X3Rnc2lncXVldWVpbmZvIC0gcXVldWUgYSBzaWduYWwgYW5kIGRhdGEKICAjIHVzZXJmYXVsdGZkIC0gY3JlYXRlIGEgZmlsZSBkZXNjcmlwdG9yIGZvciBoYW5kbGluZyBwYWdlIGZhdWx0cyBpbiB1c2VyIHNwYWNlCiAgIyBzZW1vcCAtIFN5c3RlbSBWIHNlbWFwaG9yZSBvcGVyYXRpb25zCiAgIyBzZW10aW1lZG9wIC0gU3lzdGVtIFYgc2VtYXBob3JlIG9wZXJhdGlvbnMKICAjIGdldGdpZCAtIGdldCBncm91cCBpZGVudGl0eQogICMgZ2V0ZWdpZCAtIGdldCBncm91cCBpZGVudGl0eQogICMgZ2V0cGlkIC0gZ2V0IHByb2Nlc3MgaWRlbnRpZmljYXRpb24KICAjIGdldHBwaWQgLSBnZXQgcHJvY2VzcyBpZGVudGlmaWNhdGlvbgogICMgc2lncHJvY21hc2sgLSBleGFtaW5lIGFuZCBjaGFuZ2UgYmxvY2tlZCBzaWduYWxzCiAgIyBydF9zaWdwcm9jbWFzayAtIGV4YW1pbmUgYW5kIGNoYW5nZSBibG9ja2VkIHNpZ25hbHMKICAjIHVuYW1lIC0gZ2V0IG5hbWUgYW5kIGluZm9ybWF0aW9uIGFib3V0IGN1cnJlbnQga2VybmVsCiAgIyBzdGF0eCAtIGdldCBmaWxlIHN0YXR1cyAoZXh0ZW5kZWQpCiAgIyBpb2N0bF9maWNsb25lcmFuZ2UgLSBzaGFyZSBzb21lIHRoZSBkYXRhIG9mIG9uZSBmaWxlIHdpdGggYW5vdGhlciBmaWxlCiAgIyBpb2N0bF9maWNsb25lIC0gc2hhcmUgc29tZSB0aGUgZGF0YSBvZiBvbmUgZmlsZSB3aXRoIGFub3RoZXIgZmlsZQogICMgbXFfZ2V0c2V0YXR0ciAtIGdldC9zZXQgbWVzc2FnZSBxdWV1ZSBhdHRyaWJ1dGVzCiAgIyBpb3ByaW9fZ2V0IC0gZ2V0L3NldCBJL08gc2NoZWR1bGluZyBjbGFzcyBhbmQgcHJpb3JpdHkKICAjIGlvcHJpb19zZXQgLSBnZXQvc2V0IEkvTyBzY2hlZHVsaW5nIGNsYXNzIGFuZCBwcmlvcml0eQogICMgZXBvbGxfY3RsIC0gY29udHJvbCBpbnRlcmZhY2UgZm9yIGFuIGVwb2xsIGZpbGUgZGVzY3JpcHRvcgogICMgc3luYyAtIGNvbW1pdCBmaWxlc3lzdGVtIGNhY2hlcyB0byBkaXNrCiAgIyBzeW5jZnMgLSBjb21taXQgZmlsZXN5c3RlbSBjYWNoZXMgdG8gZGlzawogICMgc2V0c2lkIC0gY3JlYXRlcyBhIHNlc3Npb24gYW5kIHNldHMgdGhlIHByb2Nlc3MgZ3JvdXAgSUQKICAjIHNodXRkb3duIC0gc2h1dCBkb3duIHBhcnQgb2YgYSBmdWxsLWR1cGxleCBjb25uZWN0aW9uCiAgIyBnZXRzaWQgLSBnZXQgc2Vzc2lvbiBJRAogICMgZ2V0X3RocmVhZF9hcmVhIC0gbWFuaXB1bGF0ZSB0aHJlYWQtbG9jYWwgc3RvcmFnZSBpbmZvcm1hdGlvbgogICMgc2V0X3RocmVhZF9hcmVhIC0gbWFuaXB1bGF0ZSB0aHJlYWQtbG9jYWwgc3RvcmFnZSBpbmZvcm1hdGlvbgogICMgdGltZXJmZF9jcmVhdGUgLSB0aW1lcnMgdGhhdCBub3RpZnkgdmlhIGZpbGUgZGVzY3JpcHRvcnMKICAjIHRpbWVyZmRfc2V0dGltZSAtIHRpbWVycyB0aGF0IG5vdGlmeSB2aWEgZmlsZSBkZXNjcmlwdG9ycwogICMgdGltZXJmZF9nZXR0aW1lIC0gdGltZXJzIHRoYXQgbm90aWZ5IHZpYSBmaWxlIGRlc2NyaXB0b3JzCiAgIyBpb2N0bF9maWRlZHVwZXJhbmdlIC0gc2hhcmUgc29tZSB0aGUgZGF0YSBvZiBvbmUgZmlsZSB3aXRoIGFub3RoZXIgZmlsZQogICMgbmFtZV90b19oYW5kbGVfYXQgLSBvYnRhaW4gaGFuZGxlIGZvciBhIHBhdGhuYW1lIGFuZCBvcGVuIGZpbGUgdmlhIGEgaGFuZGxlCiAgIyBvcGVuX2J5X2hhbmRsZV9hdCAtIG9idGFpbiBoYW5kbGUgZm9yIGEgcGF0aG5hbWUgYW5kIG9wZW4gZmlsZSB2aWEgYSBoYW5kbGUKICAjIGZ1dGV4IC0gZmFzdCB1c2VyLXNwYWNlIGxvY2tpbmcKICAjIGlvY3RsX25zIC0gaW9jdGwoKSBvcGVyYXRpb25zIGZvciBMaW51eCBuYW1lc3BhY2VzCiAgIyBwaWRmZF9zZW5kX3NpZ25hbCAtIHNlbmQgYSBzaWduYWwgdG8gYSBwcm9jZXNzIHNwZWNpZmllZCBieSBhIGZpbGUgZGVzY3JpcHRvcgogICMgY2xvbmUgLSBjcmVhdGUgYSBjaGlsZCBwcm9jZXNzCiAgIyBfX2Nsb25lMiAtIGNyZWF0ZSBhIGNoaWxkIHByb2Nlc3MKICAjIGNsb25lMyAtIGNyZWF0ZSBhIGNoaWxkIHByb2Nlc3MKICAjIHRpbWVzIC0gZ2V0IHByb2Nlc3MgdGltZXMKICAjIHN5c2luZm8gLSByZXR1cm4gc3lzdGVtIGluZm9ybWF0aW9uCiAgIyBpcGMgLSBTeXN0ZW0gViBJUEMgc3lzdGVtIGNhbGxzCiAgIyBldmVudGZkIC0gY3JlYXRlIGEgZmlsZSBkZXNjcmlwdG9yIGZvciBldmVudCBub3RpZmljYXRpb24KICAjIHdhaXQgLSB3YWl0IGZvciBwcm9jZXNzIHRvIGNoYW5nZSBzdGF0ZQogICMgd2FpdHBpZCAtIHdhaXQgZm9yIHByb2Nlc3MgdG8gY2hhbmdlIHN0YXRlCiAgIyB3YWl0aWQgLSB3YWl0IGZvciBwcm9jZXNzIHRvIGNoYW5nZSBzdGF0ZQogICMgZ2V0ZG9tYWlubmFtZSAtIGdldC9zZXQgTklTIGRvbWFpbiBuYW1lCiAgIyBpZGxlIC0gbWFrZSBwcm9jZXNzIDAgaWRsZQogICMgaW5vdGlmeV9hZGRfd2F0Y2ggLSBhZGQgYSB3YXRjaCB0byBhbiBpbml0aWFsaXplZCBpbm90aWZ5IGluc3RhbmNlCiAgIyBnZXRfbWVtcG9saWN5IC0gcmV0cmlldmUgTlVNQSBtZW1vcnkgcG9saWN5IGZvciBhIHRocmVhZAogICMgYnBmIC0gcGVyZm9ybSBhIGNvbW1hbmQgb24gYW4gZXh0ZW5kZWQgQlBGIG1hcCBvciBwcm9ncmFtCiAgIyBnZXRzb2Nrb3B0IC0gZ2V0IGFuZCBzZXQgb3B0aW9ucyBvbiBzb2NrZXRzCiAgIyBzZXRzb2Nrb3B0IC0gZ2V0IGFuZCBzZXQgb3B0aW9ucyBvbiBzb2NrZXRzCiAgIyBnZXRpdGltZXIgLSBnZXQgb3Igc2V0IHZhbHVlIG9mIGFuIGludGVydmFsIHRpbWVyCiAgIyBzZXRpdGltZXIgLSBnZXQgb3Igc2V0IHZhbHVlIG9mIGFuIGludGVydmFsIHRpbWVyCiAgIyBtZW1iYXJyaWVyIC0gaXNzdWUgbWVtb3J5IGJhcnJpZXJzIG9uIGEgc2V0IG9mIHRocmVhZHMKICAjIG1wcm90ZWN0IC0gc2V0IHByb3RlY3Rpb24gb24gYSByZWdpb24gb2YgbWVtb3J5CiAgIyBwa2V5X21wcm90ZWN0IC0gc2V0IHByb3RlY3Rpb24gb24gYSByZWdpb24gb2YgbWVtb3J5CiAgIyBnZXRjcHUgLSBkZXRlcm1pbmUgQ1BVIGFuZCBOVU1BIG5vZGUgb24gd2hpY2ggdGhlIGNhbGxpbmcgdGhyZWFkIGlzIHJ1bm5pbmcKICAjIGlvY3RsX2ZzbGFiZWwgLSBnZXQgb3Igc2V0IGEgZmlsZXN5c3RlbSBsYWJlbAogICMgbGlzdHhhdHRyIC0gbGlzdCBleHRlbmRlZCBhdHRyaWJ1dGUgbmFtZXMKICAjIGxsaXN0eGF0dHIgLSBsaXN0IGV4dGVuZGVkIGF0dHJpYnV0ZSBuYW1lcwogICMgZmxpc3R4YXR0ciAtIGxpc3QgZXh0ZW5kZWQgYXR0cmlidXRlIG5hbWVzCiAgIyBfbGxzZWVrIC0gcmVwb3NpdGlvbiByZWFkL3dyaXRlIGZpbGUgb2Zmc2V0CiAgIyBmY250bCAtIG1hbmlwdWxhdGUgZmlsZSBkZXNjcmlwdG9yCiAgIyB1c3RhdCAtIGdldCBmaWxlc3lzdGVtIHN0YXRpc3RpY3MKICAjIHNpZ25hbCAtIEFOU0kgQyBzaWduYWwgaGFuZGxpbmcKICAjIG5hbm9zbGVlcCAtIGhpZ2gtcmVzb2x1dGlvbiBzbGVlcAogICMgY29ubmVjdCAtIGluaXRpYXRlIGEgY29ubmVjdGlvbiBvbiBhIHNvY2tldAogICMgdm04Nm9sZCAtIGVudGVyIHZpcnR1YWwgODA4NiBtb2RlCiAgIyB2bTg2IC0gZW50ZXIgdmlydHVhbCA4MDg2IG1vZGUKICAjIGZhbm90aWZ5X2luaXQgLSBjcmVhdGUgYW5kIGluaXRpYWxpemUgZmFub3RpZnkgZ3JvdXAKICAjIG1pZ3JhdGVfcGFnZXMgLSBtb3ZlIGFsbCBwYWdlcyBpbiBhIHByb2Nlc3MgdG8gYW5vdGhlciBzZXQgb2Ygbm9kZXMKICAjIHJlc3RhcnRfc3lzY2FsbCAtIHJlc3RhcnQgYSBzeXN0ZW0gY2FsbCBhZnRlciBpbnRlcnJ1cHRpb24gYnkgYSBzdG9wIHNpZ25hbAogICMgY2xvc2UgLSBjbG9zZSBhIGZpbGUgZGVzY3JpcHRvcgogICMgbXNncmN2IC0gU3lzdGVtIFYgbWVzc2FnZSBxdWV1ZSBvcGVyYXRpb25zCiAgIyBtc2dzbmQgLSBTeXN0ZW0gViBtZXNzYWdlIHF1ZXVlIG9wZXJhdGlvbnMKICAjIHJlYWR2IC0gcmVhZCBvciB3cml0ZSBkYXRhIGludG8gbXVsdGlwbGUgYnVmZmVycwogICMgd3JpdGV2IC0gcmVhZCBvciB3cml0ZSBkYXRhIGludG8gbXVsdGlwbGUgYnVmZmVycwogICMgcHJlYWR2IC0gcmVhZCBvciB3cml0ZSBkYXRhIGludG8gbXVsdGlwbGUgYnVmZmVycwogICMgcHdyaXRldiAtIHJlYWQgb3Igd3JpdGUgZGF0YSBpbnRvIG11bHRpcGxlIGJ1ZmZlcnMKICAjIHByZWFkdjIgLSByZWFkIG9yIHdyaXRlIGRhdGEgaW50byBtdWx0aXBsZSBidWZmZXJzCiAgIyBwd3JpdGV2MiAtIHJlYWQgb3Igd3JpdGUgZGF0YSBpbnRvIG11bHRpcGxlIGJ1ZmZlcnMKICAjIHN5c2xvZyAtIHJlYWQgYW5kL29yIGNsZWFyIGtlcm5lbCBtZXNzYWdlIHJpbmcgYnVmZmVyOyBzZXQgY29uc29sZV9sb2dsZXZlbAogICMga2xvZ2N0bCAtIHJlYWQgYW5kL29yIGNsZWFyIGtlcm5lbCBtZXNzYWdlIHJpbmcgYnVmZmVyOyBzZXQgY29uc29sZV9sb2dsZXZlbAogICMgc2NoZWRfeWllbGQgLSB5aWVsZCB0aGUgcHJvY2Vzc29yCiAgIyB2aGFuZ3VwIC0gdmlydHVhbGx5IGhhbmd1cCB0aGUgY3VycmVudCB0ZXJtaW5hbAogICMgaW9jdGxfaWZsYWdzIC0gaW9jdGwoKSBvcGVyYXRpb25zIGZvciBpbm9kZSBmbGFncwogICMgc2dldG1hc2sgLSBtYW5pcHVsYXRpb24gb2Ygc2lnbmFsIG1hc2sgKG9ic29sZXRlKQogICMgc3NldG1hc2sgLSBtYW5pcHVsYXRpb24gb2Ygc2lnbmFsIG1hc2sgKG9ic29sZXRlKQogICMgc3luY19maWxlX3JhbmdlIC0gc3luYyBhIGZpbGUgc2VnbWVudCB3aXRoIGRpc2sKICAjIGNvcHlfZmlsZV9yYW5nZSAtIENvcHkgYSByYW5nZSBvZiBkYXRhIGZyb20gb25lIGZpbGUgdG8gYW5vdGhlcgogICMgc2lncGVuZGluZyAtIGV4YW1pbmUgcGVuZGluZyBzaWduYWxzCiAgIyBydF9zaWdwZW5kaW5nIC0gZXhhbWluZSBwZW5kaW5nIHNpZ25hbHMKICAjIGdldHVud2luZCAtIGNvcHkgdGhlIHVud2luZCBkYXRhIHRvIGNhbGxlcidzIGJ1ZmZlcgogICMgbXN5bmMgLSBzeW5jaHJvbml6ZSBhIGZpbGUgd2l0aCBhIG1lbW9yeSBtYXAKICAjIGdldF9yb2J1c3RfbGlzdCAtIGdldC9zZXQgbGlzdCBvZiByb2J1c3QgZnV0ZXhlcwogICMgc2V0X3JvYnVzdF9saXN0IC0gZ2V0L3NldCBsaXN0IG9mIHJvYnVzdCBmdXRleGVzCiAgIyBkdXAgLSBkdXBsaWNhdGUgYSBmaWxlIGRlc2NyaXB0b3IKICAjIGR1cDIgLSBkdXBsaWNhdGUgYSBmaWxlIGRlc2NyaXB0b3IKICAjIGR1cDMgLSBkdXBsaWNhdGUgYSBmaWxlIGRlc2NyaXB0b3IKICAjIHMzOTBfcGNpX21taW9fd3JpdGUgLSB0cmFuc2ZlciBkYXRhIHRvL2Zyb20gUENJIE1NSU8gbWVtb3J5IHBhZ2UKICAjIHMzOTBfcGNpX21taW9fcmVhZCAtIHRyYW5zZmVyIGRhdGEgdG8vZnJvbSBQQ0kgTU1JTyBtZW1vcnkgcGFnZQogICMgcGF1c2UgLSB3YWl0IGZvciBzaWduYWwKICAjIHN3YXBvbiAtIHN0YXJ0L3N0b3Agc3dhcHBpbmcgdG8gZmlsZS9kZXZpY2UKICAjIHN3YXBvZmYgLSBzdGFydC9zdG9wIHN3YXBwaW5nIHRvIGZpbGUvZGV2aWNlCgogICMgUmVjb3JkIHR5cGUgbm9ybWFsaXphdGlvbnMKICAjIFVzZWZ1bCBsaW5rczoKICAjIGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS90b3J2YWxkcy9saW51eC92NC4xNi9pbmNsdWRlL3VhcGkvbGludXgvYXVkaXQuaAogICMgaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2xpbnV4LWF1ZGl0L2F1ZGl0LXVzZXJzcGFjZS80ZDkzMzMwMWIxODM1Y2FmYTA4YjllOWVmNzA1YzhmYjZjOTZjYjYyL2xpYi9saWJhdWRpdC5oCiAgIyBodHRwczovL3d3dy5lbGFzdGljLmNvL2d1aWRlL2VuL2Vjcy9jdXJyZW50L2Vjcy1hbGxvd2VkLXZhbHVlcy1ldmVudC1jYXRlZ29yeS5odG1sCgogICMgSUFNIHJlbGF0ZWQgZXZlbnRzCgogICMgQVVESVRfQUNDVF9MT0NLIC0gVXNlcidzIGFjY291bnQgbG9ja2VkIGJ5IGFkbWluCiAgLSByZWNvcmRfdHlwZXM6IEFDQ1RfTE9DSwogICAgYWN0aW9uOiBsb2NrZWQtYWNjb3VudAogICAgZWNzOgogICAgICA8PDogKmVjcy1pYW0KICAgICAgdHlwZToKICAgICAgICAtIHVzZXIKICAgICAgICAtIGluZm8KICAjIEFVRElUX0FDQ1RfVU5MT0NLIC0gVXNlcidzIGFjY291bnQgdW5sb2NrZWQgYnkgYWRtaW4KICAtIHJlY29yZF90eXBlczogQUNDVF9VTkxPQ0sKICAgIGFjdGlvbjogdW5sb2NrZWQtYWNjb3VudAogICAgZWNzOgogICAgICA8PDogKmVjcy1pYW0KICAgICAgdHlwZToKICAgICAgICAtIHVzZXIKICAgICAgICAtIGluZm8KICAjIEFVRElUX0FERF9HUk9VUCAtIEdyb3VwIGFjY291bnQgYWRkZWQKICAtIHJlY29yZF90eXBlczogQUREX0dST1VQCiAgICBhY3Rpb246IGFkZGVkLWdyb3VwLWFjY291bnQtdG8KICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogW2lkLCBhY2N0XQogICAgICB3aGF0OiBhY2NvdW50CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWlhbQogICAgICA8PDogKmVjcy1ncm91cC1tb2RpZmljYXRpb24tbWFwcGluZ3MKICAgICAgdHlwZToKICAgICAgICAtIGdyb3VwCiAgICAgICAgLSBjcmVhdGlvbgoKICAjIEFVRElUX0FERF9VU0VSIC0gVXNlciBhY2NvdW50IGFkZGVkCiAgLSByZWNvcmRfdHlwZXM6IEFERF9VU0VSCiAgICBhY3Rpb246IGFkZGVkLXVzZXItYWNjb3VudAogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBbaWQsIGFjY3RdCiAgICAgIHdoYXQ6IGFjY291bnQKICAgIGVjczoKICAgICAgPDw6ICplY3MtaWFtCiAgICAgIDw8OiAqZWNzLXVzZXItbW9kaWZpY2F0aW9uLW1hcHBpbmdzCiAgICAgIHR5cGU6CiAgICAgICAgLSB1c2VyCiAgICAgICAgLSBjcmVhdGlvbgogICMgQVVESVRfREVMX0dST1VQIC0gR3JvdXAgYWNjb3VudCBkZWxldGVkCiAgLSByZWNvcmRfdHlwZXM6IERFTF9HUk9VUAogICAgYWN0aW9uOiBkZWxldGVkLWdyb3VwLWFjY291bnQtZnJvbQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBbaWQsIGFjY3RdCiAgICAgIHdoYXQ6IGFjY291bnQKICAgIGVjczoKICAgICAgPDw6ICplY3MtaWFtCiAgICAgIDw8OiAqZWNzLWdyb3VwLW1vZGlmaWNhdGlvbi1tYXBwaW5ncwogICAgICB0eXBlOgogICAgICAgIC0gZ3JvdXAKICAgICAgICAtIGRlbGV0aW9uCiAgIyBBVURJVF9ERUxfVVNFUiAtIFVzZXIgYWNjb3VudCBkZWxldGVkCiAgLSByZWNvcmRfdHlwZXM6IERFTF9VU0VSCiAgICBhY3Rpb246IGRlbGV0ZWQtdXNlci1hY2NvdW50CiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IFtpZCwgYWNjdF0KICAgICAgd2hhdDogYWNjb3VudAogICAgZWNzOgogICAgICA8PDogKmVjcy1pYW0KICAgICAgPDw6ICplY3MtdXNlci1tb2RpZmljYXRpb24tbWFwcGluZ3MKICAgICAgdHlwZToKICAgICAgICAtIHVzZXIKICAgICAgICAtIGRlbGV0aW9uCiAgIyBBVURJVF9HUlBfTUdNVCAtIEdyb3VwIGFjY291bnQgYXR0ciB3YXMgbW9kaWZpZWQKICAtIHJlY29yZF90eXBlczogR1JQX01HTVQKICAgIGFjdGlvbjogbW9kaWZpZWQtZ3JvdXAtYWNjb3VudAogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBbaWQsIGFjY3RdCiAgICAgIHdoYXQ6IGFjY291bnQKICAgIGVjczoKICAgICAgPDw6ICplY3MtaWFtCiAgICAgIHR5cGU6CiAgICAgICAgLSBncm91cAogICAgICAgIC0gY2hhbmdlCiAgICAgIG1hcHBpbmdzOgogICAgICAgIC0gZnJvbTogYWN0b3IucHJpbWFyeQogICAgICAgICAgdG86IHVzZXIKICAgICAgICAtIGZyb206IGFjdG9yLnNlY29uZGFyeQogICAgICAgICAgdG86IGdyb3VwLnRhcmdldAogICAgICAgIC0gZnJvbTogdWlkLnVpZAogICAgICAgICAgdG86IHVzZXIuZWZmZWN0aXZlCiAgIyBBVURJVF9ST0xFX0FTU0lHTiAtIEFkbWluIGFzc2lnbmVkIHVzZXIgdG8gcm9sZQogIC0gcmVjb3JkX3R5cGVzOiBST0xFX0FTU0lHTgogICAgYWN0aW9uOiBhc3NpZ25lZC11c2VyLXJvbGUtdG8KICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogW2lkLCBhY2N0XQogICAgICB3aGF0OiBhY2NvdW50CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWlhbQogICAgICB0eXBlOgogICAgICAgIC0gdXNlcgogICAgICAgIC0gY2hhbmdlCiAgIyBBVURJVF9ST0xFX01PRElGWSAtIEFkbWluIG1vZGlmaWVkIGEgcm9sZQogIC0gcmVjb3JkX3R5cGVzOiBST0xFX01PRElGWQogICAgYWN0aW9uOiBtb2RpZmllZC1yb2xlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWlhbQogICAgICB0eXBlOgogICAgICAgIC0gY2hhbmdlCiAgIyBBVURJVF9ST0xFX1JFTU9WRSAtIEFkbWluIHJlbW92ZWQgdXNlciBmcm9tIHJvbGUKICAtIHJlY29yZF90eXBlczogUk9MRV9SRU1PVkUKICAgIGFjdGlvbjogcmVtb3ZlZC11c2VyLXJvbGUtZnJvbQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBbaWQsIGFjY3RdCiAgICAgIHdoYXQ6IGFjY291bnQKICAgIGVjczoKICAgICAgPDw6ICplY3MtaWFtCiAgICAgIHR5cGU6CiAgICAgICAgLSB1c2VyCiAgICAgICAgLSBjaGFuZ2UKICAjIEFVRElUX1VTRVJfTUdNVCAtIFVzZXIgYWNjdCBhdHRyaWJ1dGUgY2hhbmdlCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBVU0VSX01HTVQKICAgIGFjdGlvbjogbW9kaWZpZWQtdXNlci1hY2NvdW50CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWlhbQogICAgICB0eXBlOgogICAgICAgIC0gdXNlcgogICAgICAgIC0gY2hhbmdlCiAgICAgIG1hcHBpbmdzOgogICAgICAgIC0gZnJvbTogYWN0b3IucHJpbWFyeQogICAgICAgICAgdG86IHVzZXIKICAgICAgICAtIGZyb206IGFjdG9yLnNlY29uZGFyeQogICAgICAgICAgdG86IHVzZXIudGFyZ2V0CiAgICAgICAgLSBmcm9tOiB1aWQudWlkCiAgICAgICAgICB0bzogdXNlci5lZmZlY3RpdmUKICAjIEFVRElUX1VTRVJfQ0hBVVRIVE9LIC0gVXNlciBhY2N0IHBhc3N3b3JkIG9yIHBpbiBjaGFuZ2VkCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBVU0VSX0NIQVVUSFRPSwogICAgYWN0aW9uOiBjaGFuZ2VkLXBhc3N3b3JkCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWlhbQogICAgICB0eXBlOgogICAgICAgIC0gdXNlcgogICAgICAgIC0gY2hhbmdlCiAgICAgIG1hcHBpbmdzOgogICAgICAgIC0gZnJvbTogYWN0b3IucHJpbWFyeQogICAgICAgICAgdG86IHVzZXIKICAgICAgICAtIGZyb206IHVpZC51aWQKICAgICAgICAgIHRvOiB1c2VyLmVmZmVjdGl2ZQogICAgICAgIC0gZnJvbTogYWN0b3Iuc2Vjb25kYXJ5CiAgICAgICAgICB0bzogdXNlci50YXJnZXQKCiAgIyBBVURJVF9HUlBfQ0hBVVRIVE9LIC0gR3JvdXAgYWNjdCBwYXNzd29yZCBvciBwaW4gY2hhbmdlZAogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogR1JQX0NIQVVUSFRPSwogICAgYWN0aW9uOiBjaGFuZ2VkLWdyb3VwLXBhc3N3b3JkCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGFjY3QKICAgICAgd2hhdDogdXNlci1zZXNzaW9uCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWlhbQogICAgICB0eXBlOgogICAgICAgIC0gZ3JvdXAKICAgICAgICAtIGNoYW5nZQogICAgICBtYXBwaW5nczoKICAgICAgICAtIGZyb206IGFjdG9yLnByaW1hcnkKICAgICAgICAgIHRvOiB1c2VyCiAgICAgICAgLSBmcm9tOiB1aWQudWlkCiAgICAgICAgICB0bzogdXNlci5lZmZlY3RpdmUKICAgICAgICAtIGZyb206IGFjdG9yLnNlY29uZGFyeQogICAgICAgICAgdG86IGdyb3VwLnRhcmdldAoKICAjIEF1dGhlbnRpY2F0aW9uIHJlbGF0ZWQgZXZlbnRzCgogICMgQVVESVRfQ1JFRF9BQ1EgLSBVc2VyIGNyZWRlbnRpYWwgYWNxdWlyZWQKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IENSRURfQUNRCiAgICBhY3Rpb246IGFjcXVpcmVkLWNyZWRlbnRpYWxzCiAgICBlY3M6ICplY3MtYXV0aAogICMgQVVESVRfQ1JFRF9ESVNQIC0gVXNlciBjcmVkZW50aWFsIGRpc3Bvc2VkCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBDUkVEX0RJU1AKICAgIGFjdGlvbjogZGlzcG9zZWQtY3JlZGVudGlhbHMKICAgIGVjczogKmVjcy1hdXRoCiAgIyBBVURJVF9DUkVEX1JFRlIgLSBVc2VyIGNyZWRlbnRpYWwgcmVmcmVzaGVkCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBDUkVEX1JFRlIKICAgIGFjdGlvbjogcmVmcmVzaGVkLWNyZWRlbnRpYWxzCiAgICBlY3M6ICplY3MtYXV0aAogICMgQVVESVRfR1JQX0FVVEggLSBBdXRoZW50aWNhdGlvbiBmb3IgZ3JvdXAgcGFzc3dvcmQKICAtIHJlY29yZF90eXBlczogR1JQX0FVVEgKICAgIGFjdGlvbjogYXV0aGVudGljYXRlZC10by1ncm91cAogICAgZWNzOiAqZWNzLWF1dGgKICAjIEFVRElUX0xPR0lOIC0gRGVmaW5lIHRoZSBsb2dpbiBpZCBhbmQgaW5mb3JtYXRpb24KICAtIHJlY29yZF90eXBlczogTE9HSU4KICAgIGFjdGlvbjogY2hhbmdlZC1sb2dpbi1pZC10bwogICAgc3ViamVjdDoKICAgICAgcHJpbWFyeTogW29sZF9hdWlkLCBvbGQtYXVpZF0KICAgICAgc2Vjb25kYXJ5OiB1aWQKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogYXVpZAogICAgICB3aGF0OiB1c2VyLXNlc3Npb24KICAgIGVjczoKICAgICAgPDw6ICplY3MtYXV0aAogICAgICB0eXBlOiBzdGFydAogICAgICBtYXBwaW5nczoKICAgICAgICAtIGZyb206IGFjdG9yLnByaW1hcnkKICAgICAgICAgIHRvOiB1c2VyCiAgICAgICAgLSBmcm9tOiBvYmplY3QucHJpbWFyeQogICAgICAgICAgdG86IHVzZXIuZWZmZWN0aXZlCiAgIyBBVURJVF9VU0VSX0FDQ1QgLSBVc2VyIHN5c3RlbSBhY2Nlc3MgYXV0aG9yaXphdGlvbgogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogVVNFUl9BQ0NUCiAgICBhY3Rpb246IHdhcy1hdXRob3JpemVkCiAgICBlY3M6ICplY3MtYXV0aAogICMgQVVESVRfVVNFUl9BVVRIIC0gVXNlciBzeXN0ZW0gYWNjZXNzIGF1dGhlbnRpY2F0aW9uCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBVU0VSX0FVVEgKICAgIGFjdGlvbjogYXV0aGVudGljYXRlZAogICAgZWNzOiAqZWNzLWF1dGgKICAjIEFVRElUX1VTRVJfRU5EIC0gVXNlciBzZXNzaW9uIGVuZAogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogVVNFUl9FTkQKICAgIGFjdGlvbjogZW5kZWQtc2Vzc2lvbgogICAgZWNzOiAqZWNzLWF1dGgKICAjIEFVRElUX1VTRVJfRVJSIC0gVXNlciBhY2N0IHN0YXRlIGVycm9yCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBVU0VSX0VSUgogICAgYWN0aW9uOiBlcnJvcgogICAgc291cmNlX2lwOiBbYWRkcl0KICAgIGVjczogKmVjcy1hdXRoCiAgIyBBVURJVF9VU0VSX0xPR0lOIC0gVXNlciBoYXMgbG9nZ2VkIGluCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBVU0VSX0xPR0lOCiAgICBhY3Rpb246IGxvZ2dlZC1pbgogICAgc291cmNlX2lwOiBbYWRkcl0KICAgIGVjczoKICAgICAgPDw6ICplY3MtYXV0aAogICAgICB0eXBlOiBzdGFydAogICMgQVVESVRfVVNFUl9MT0dPVVQgLSBVc2VyIGhhcyBsb2dnZWQgb3V0CiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBVU0VSX0xPR09VVAogICAgYWN0aW9uOiBsb2dnZWQtb3V0CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWF1dGgKICAgICAgdHlwZTogZW5kCiAgIyBBVURJVF9VU0VSX1JPTEVfQ0hBTkdFIC0gVXNlciBjaGFuZ2VkIHRvIGEgbmV3IHJvbGUKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IFVTRVJfUk9MRV9DSEFOR0UKICAgIGFjdGlvbjogY2hhbmdlZC1yb2xlLXRvCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IHNlbGVjdGVkLWNvbnRleHQKICAgICAgd2hhdDogdXNlci1zZXNzaW9uCiAgIyBBVURJVF9VU0VSX1NUQVJUIC0gVXNlciBzZXNzaW9uIHN0YXJ0CiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBVU0VSX1NUQVJUCiAgICBhY3Rpb246IHN0YXJ0ZWQtc2Vzc2lvbgogICAgc291cmNlX2lwOiBbYWRkcl0KICAgIGVjczogKmVjcy1hdXRoCgogICMgSG9zdCB2aXJ0dWFsaXphdGlvbiBldmVudHMKCiAgIyBBVURJVF9WSVJUX0NPTlRST0wgLSBTdGFydCwgUGF1c2UsIFN0b3AgVk0KICAtIHJlY29yZF90eXBlczogVklSVF9DT05UUk9MCiAgICBhY3Rpb246IGlzc3VlZC12bS1jb250cm9sCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IG9wCiAgICAgIHNlY29uZGFyeTogdm0KICAgICAgd2hhdDogdmlydHVhbC1tYWNoaW5lCiAgICBlY3M6ICplY3MtaG9zdAogICMgQVVESVRfVklSVF9DUkVBVEUgLSBDcmVhdGlvbiBvZiBndWVzdCBpbWFnZQogIC0gcmVjb3JkX3R5cGVzOiBWSVJUX0NSRUFURQogICAgYWN0aW9uOiBjcmVhdGVkLXZtLWltYWdlCiAgICBlY3M6ICplY3MtaG9zdAogICMgQVVESVRfVklSVF9ERVNUUk9ZIC0gRGVzdHJ1Y3Rpb24gb2YgZ3Vlc3QgaW1hZ2UKICAtIHJlY29yZF90eXBlczogVklSVF9ERVNUUk9ZCiAgICBhY3Rpb246IGRlbGV0ZWQtdm0taW1hZ2UKICAgIGVjczogKmVjcy1ob3N0CiAgIyBBVURJVF9WSVJUX0lOVEVHUklUWV9DSEVDSyAtIEd1ZXN0IGludGVncml0eSByZXN1bHRzCiAgLSByZWNvcmRfdHlwZXM6IFZJUlRfSU5URUdSSVRZX0NIRUNLCiAgICBhY3Rpb246IGNoZWNrZWQtaW50ZWdyaXR5LW9mCiAgICBlY3M6ICplY3MtaG9zdAogICMgQVVESVRfVklSVF9NQUNISU5FX0lEIC0gQmluZGluZyBvZiBsYWJlbCB0byBWTQogIC0gcmVjb3JkX3R5cGVzOiBWSVJUX01BQ0hJTkVfSUQKICAgIGFjdGlvbjogYXNzaWduZWQtdm0taWQKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogdm0KICAgICAgd2hhdDogdmlydHVhbC1tYWNoaW5lCiAgICBlY3M6ICplY3MtaG9zdAogICMgQVVESVRfVklSVF9NSUdSQVRFX0lOIC0gSW5ib3VuZCBndWVzdCBtaWdyYXRpb24gaW5mbwogIC0gcmVjb3JkX3R5cGVzOiBWSVJUX01JR1JBVEVfSU4KICAgIGFjdGlvbjogbWlncmF0ZWQtdm0tZnJvbQogICAgZWNzOiAqZWNzLWhvc3QKICAjIEFVRElUX1ZJUlRfTUlHUkFURV9PVVQgLSBPdXRib3VuZCBndWVzdCBtaWdyYXRpb24gaW5mbwogIC0gcmVjb3JkX3R5cGVzOiBWSVJUX01JR1JBVEVfT1VUCiAgICBhY3Rpb246IG1pZ3JhdGVkLXZtLXRvCiAgICBlY3M6ICplY3MtaG9zdAogICMgQVVESVRfVklSVF9SRVNPVVJDRSAtIFJlc291cmNlIGFzc2lnbm1lbnQKICAtIHJlY29yZF90eXBlczogVklSVF9SRVNPVVJDRQogICAgYWN0aW9uOiBhc3NpZ25lZC12bS1yZXNvdXJjZQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiByZXNyYwogICAgICBzZWNvbmRhcnk6IHZtCiAgICAgIHdoYXQ6IHZpcnR1YWwtbWFjaGluZQogICAgZWNzOiAqZWNzLWhvc3QKCiAgIyBVc2Vyc3BhY2UgcHJvY2VzcyBldmVudHMKCiAgIyBBVURJVF9DSEdSUF9JRCAtIFVzZXIgc3BhY2UgZ3JvdXAgSUQgY2hhbmdlZAogIC0gcmVjb3JkX3R5cGVzOiBDSEdSUF9JRAogICAgYWN0aW9uOiBjaGFuZ2VkLWdyb3VwCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogY2hhbmdlCiAgIyBBVURJVF9DSFVTRVJfSUQgLSBDaGFuZ2VkIHVzZXIgSUQgc3VwcGxlbWVudGFsIGRhdGEKICAtIHJlY29yZF90eXBlczogQ0hVU0VSX0lECiAgICBhY3Rpb246IGNoYW5nZWQtdXNlci1pZAogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IGNoYW5nZQogICMgQVVESVRfVEVTVCAtIFVzZWQgZm9yIHRlc3Qgc3VjY2VzcyBtZXNzYWdlcwogIC0gcmVjb3JkX3R5cGVzOiBURVNUCiAgICBhY3Rpb246IHNlbnQtdGVzdAogICAgZWNzOiAqZWNzLXByb2Nlc3MKICAjIEFVRElUX1RSVVNURURfQVBQIC0gVHJ1c3RlZCBhcHAgbXNnIC0gZnJlZXN0eWxlIHRleHQKICAtIHJlY29yZF90eXBlczogVFJVU1RFRF9BUFAKICAgIGFjdGlvbjogdW5rbm93bgogICAgZWNzOiAqZWNzLXByb2Nlc3MKICAjIEFVRElUX1VTRVJfQ01EIC0gVXNlciBzaGVsbCBjb21tYW5kIGFuZCBhcmdzCiAgLSByZWNvcmRfdHlwZXM6IFVTRVJfQ01ECiAgICBhY3Rpb246IHJhbi1jb21tYW5kCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGNtZAogICAgICB3aGF0OiBwcm9jZXNzCiAgICBkZXNjcmlwdGlvbjogPgogICAgICBUaGVzZSBtZXNzYWdlcyBhcmUgZnJvbSB1c2VyLXNwYWNlIGFwcHMsIGxpa2Ugc3VkbywgdGhhdCBsb2cgY29tbWFuZHMKICAgICAgYmVpbmcgcnVuIGJ5IGEgdXNlci4gVGhlIHVpZCBjb250YWluZWQgaW4gdGhlc2UgbWVzc2FnZXMgaXMgdXNlcidzIFVJRCBhdAogICAgICB0aGUgdGltZSB0aGUgY29tbWFuZCB3YXMgcnVuLiBJdCBpcyBub3QgdGhlICJ0YXJnZXQiIFVJRCB1c2VkIHRvIHJ1biB0aGUKICAgICAgY29tbWFuZCwgd2hpY2ggaXMgbm9ybWFsbHkgcm9vdC4KICAgIGVjczoKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBzdGFydAoKICAjIEhvc3QtbGV2ZWwgZXZlbnRzCgogICMgQVVESVRfU1lTVEVNX0JPT1QgLSBTeXN0ZW0gYm9vdAogIC0gcmVjb3JkX3R5cGVzOiBTWVNURU1fQk9PVAogICAgYWN0aW9uOiBib290ZWQtc3lzdGVtCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHN5c3RlbQogICAgZWNzOgogICAgICA8PDogKmVjcy1ob3N0CiAgICAgIHR5cGU6IHN0YXJ0CiAgIyBBVURJVF9TWVNURU1fUlVOTEVWRUwgLSBTeXN0ZW0gcnVubGV2ZWwgY2hhbmdlCiAgLSByZWNvcmRfdHlwZXM6IFNZU1RFTV9SVU5MRVZFTAogICAgYWN0aW9uOiBjaGFuZ2VkLXRvLXJ1bmxldmVsCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IG5ldy1sZXZlbAogICAgICB3aGF0OiBzeXN0ZW0KICAgIGVjczoKICAgICAgPDw6ICplY3MtaG9zdAogICAgICB0eXBlOiBjaGFuZ2UKICAjIEFVRElUX1NZU1RFTV9TSFVURE9XTiAtIFN5c3RlbSBzaHV0ZG93bgogIC0gcmVjb3JkX3R5cGVzOiBTWVNURU1fU0hVVERPV04KICAgIGFjdGlvbjogc2h1dGRvd24tc3lzdGVtCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHN5c3RlbQogICAgZWNzOgogICAgICA8PDogKmVjcy1ob3N0CiAgICAgIHR5cGU6IGVuZAoKICAjIFNlcnZpY2UtbGV2ZWwgZXZlbnRzCgogICMgQVVESVRfU0VSVklDRV9TVEFSVCAtIFNlcnZpY2UgKGRhZW1vbikgc3RhcnQKICAtIHJlY29yZF90eXBlczogU0VSVklDRV9TVEFSVAogICAgYWN0aW9uOiBzdGFydGVkLXNlcnZpY2UKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogdW5pdAogICAgICB3aGF0OiBzZXJ2aWNlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogc3RhcnQKICAjIEFVRElUX1NFUlZJQ0VfU1RPUCAtIFNlcnZpY2UgKGRhZW1vbikgc3RvcAogIC0gcmVjb3JkX3R5cGVzOiBTRVJWSUNFX1NUT1AKICAgIGFjdGlvbjogc3RvcHBlZC1zZXJ2aWNlCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IHVuaXQKICAgICAgd2hhdDogc2VydmljZQogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IHN0b3AKCiAgIyBBdWRpdGQgaW50ZXJuYWwgZXZlbnRzCgogICMgQVVESVRfQ09ORklHX0NIQU5HRSAtIEF1ZGl0IHN5c3RlbSBjb25maWd1cmF0aW9uIGNoYW5nZQogIC0gcmVjb3JkX3R5cGVzOiBDT05GSUdfQ0hBTkdFCiAgICBhY3Rpb246IGNoYW5nZWQtYXVkaXQtY29uZmlndXJhdGlvbgogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OgogICAgICAgIFtvcCwga2V5LCBhdWRpdF9lbmFibGVkLCBhdWRpdF9waWQsIGF1ZGl0X2JhY2tsb2dfbGltaXQsIGF1ZGl0X2ZhaWx1cmVdCiAgICAgIHdoYXQ6IGF1ZGl0LWNvbmZpZwogICAgZWNzOgogICAgICBjYXRlZ29yeTogW3Byb2Nlc3MsIGNvbmZpZ3VyYXRpb25dCiAgICAgIHR5cGU6IGNoYW5nZQogICMgQVVESVRfREFFTU9OX0FCT1JUIC0gRGFlbW9uIGVycm9yIHN0b3AgcmVjb3JkCiAgLSByZWNvcmRfdHlwZXM6IERBRU1PTl9BQk9SVAogICAgYWN0aW9uOiBhYm9ydGVkLWF1ZGl0ZC1zdGFydHVwCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNlcnZpY2UKICAgIGVjczoKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBzdG9wCiAgIyBBVURJVF9EQUVNT05fQUNDRVBUIC0gQXVkaXRkIGFjY2VwdGVkIHJlbW90ZSBjb25uZWN0aW9uCiAgLSByZWNvcmRfdHlwZXM6IERBRU1PTl9BQ0NFUFQKICAgIGFjdGlvbjogcmVtb3RlLWF1ZGl0LWNvbm5lY3RlZAogICAgb2JqZWN0OgogICAgICB3aGF0OiBzZXJ2aWNlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLW5ldHdvcmsKICAgICAgdHlwZToKICAgICAgICAtIGNvbm5lY3Rpb24KICAgICAgICAtIHN0YXJ0CiAgIyBBVURJVF9EQUVNT05fQ0xPU0UgLSBBdWRpdGQgY2xvc2VkIHJlbW90ZSBjb25uZWN0aW9uCiAgLSByZWNvcmRfdHlwZXM6IERBRU1PTl9DTE9TRQogICAgYWN0aW9uOiByZW1vdGUtYXVkaXQtZGlzY29ubmVjdGVkCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNlcnZpY2UKICAgIGVjczoKICAgICAgPDw6ICplY3MtbmV0d29yawogICAgICB0eXBlOgogICAgICAgIC0gY29ubmVjdGlvbgogICAgICAgIC0gc3RhcnQKICAjIEFVRElUX0RBRU1PTl9DT05GSUcgLSBEYWVtb24gY29uZmlnIGNoYW5nZQogIC0gcmVjb3JkX3R5cGVzOiBEQUVNT05fQ09ORklHCiAgICBhY3Rpb246IGNoYW5nZWQtYXVkaXRkLWNvbmZpZ3VyYXRpb24KICAgIG9iamVjdDoKICAgICAgd2hhdDogc2VydmljZQogICAgZWNzOgogICAgICBjYXRlZ29yeTogW3Byb2Nlc3MsIGNvbmZpZ3VyYXRpb25dCiAgICAgIHR5cGU6IGNoYW5nZQogICMgQVVESVRfREFFTU9OX0VORCAtIERhZW1vbiBub3JtYWwgc3RvcCByZWNvcmQKICAtIHJlY29yZF90eXBlczogREFFTU9OX0VORAogICAgYWN0aW9uOiBzaHV0ZG93bi1hdWRpdAogICAgb2JqZWN0OgogICAgICB3aGF0OiBzZXJ2aWNlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogc3RvcAogICMgQVVESVRfREFFTU9OX0VSUiAtIEF1ZGl0ZCBpbnRlcm5hbCBlcnJvcgogIC0gcmVjb3JkX3R5cGVzOiBEQUVNT05fRVJSCiAgICBhY3Rpb246IGF1ZGl0LWVycm9yCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNlcnZpY2UKICAgIGVjczogKmVjcy1wcm9jZXNzCiAgIyBBVURJVF9EQUVNT05fUkVDT05GSUcgLSBBdWRpdGQgc2hvdWxkIHJlY29uZmlndXJlCiAgLSByZWNvcmRfdHlwZXM6IERBRU1PTl9SRUNPTkZJRwogICAgYWN0aW9uOiByZWNvbmZpZ3VyZWQtYXVkaXRkCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNlcnZpY2UKICAgIGVjczoKICAgICAgY2F0ZWdvcnk6IFtwcm9jZXNzLCBjb25maWd1cmF0aW9uXQogICAgICB0eXBlOiBpbmZvCiAgIyBBVURJVF9EQUVNT05fUkVTVU1FIC0gQXVkaXRkIHNob3VsZCByZXN1bWUgbG9nZ2luZwogIC0gcmVjb3JkX3R5cGVzOiBEQUVNT05fUkVTVU1FCiAgICBhY3Rpb246IHJlc3VtZWQtYXVkaXQtbG9nZ2luZwogICAgb2JqZWN0OgogICAgICB3aGF0OiBzZXJ2aWNlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogY2hhbmdlCiAgIyBBVURJVF9EQUVNT05fUk9UQVRFIC0gQXVkaXRkIHNob3VsZCByb3RhdGUgbG9ncwogIC0gcmVjb3JkX3R5cGVzOiBEQUVNT05fUk9UQVRFCiAgICBhY3Rpb246IHJvdGF0ZWQtYXVkaXQtbG9ncwogICAgb2JqZWN0OgogICAgICB3aGF0OiBzZXJ2aWNlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogY2hhbmdlCiAgIyBBVURJVF9EQUVNT05fU1RBUlQgLSBEYWVtb24gc3RhcnR1cCByZWNvcmQKICAtIHJlY29yZF90eXBlczogREFFTU9OX1NUQVJUCiAgICBhY3Rpb246IHN0YXJ0ZWQtYXVkaXQKICAgIG9iamVjdDoKICAgICAgd2hhdDogc2VydmljZQogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IHN0YXJ0CiAgIyBBVURJVF9LRVJORUwgLSBBc3luY2hyb25vdXMgYXVkaXQgcmVjb3JkLiBOT1QgQSBSRVFVRVNULgogIC0gcmVjb3JkX3R5cGVzOiBLRVJORUwKICAgIGFjdGlvbjogaW5pdGlhbGl6ZWQtYXVkaXQtc3Vic3lzdGVtCiAgICBlY3M6ICplY3MtcHJvY2VzcwoKICAjIENvbmZpZ3VyYXRpb24gY2hhbmdlIGV2ZW50cwoKICAjIEFVRElUX1VTWVNfQ09ORklHIC0gVXNlciBzcGFjZSBzeXN0ZW0gY29uZmlnIGNoYW5nZQogIC0gcmVjb3JkX3R5cGVzOiBVU1lTX0NPTkZJRwogICAgYWN0aW9uOiBjaGFuZ2VkLWNvbmZpZ3VyYXRpb24KICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogb3AKICAgICAgd2hhdDogc3lzdGVtCiAgICBlY3M6CiAgICAgIGNhdGVnb3J5OiBjb25maWd1cmF0aW9uCiAgICAgIHR5cGU6IGNoYW5nZQogICMgQVVESVRfTkVURklMVEVSX0NGRyAtIE5ldGZpbHRlciBjaGFpbiBtb2RpZmljYXRpb25zCiAgLSByZWNvcmRfdHlwZXM6IE5FVEZJTFRFUl9DRkcKICAgIGFjdGlvbjogbG9hZGVkLWZpcmV3YWxsLXJ1bGUtdG8KICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogdGFibGUKICAgICAgd2hhdDogZmlyZXdhbGwKICAgIGVjczoKICAgICAgY2F0ZWdvcnk6IGNvbmZpZ3VyYXRpb24KICAgICAgdHlwZTogY2hhbmdlCiAgIyBBVURJVF9GRUFUVVJFX0NIQU5HRSAtIGF1ZGl0IGxvZyBsaXN0aW5nIGZlYXR1cmUgY2hhbmdlcwogIC0gcmVjb3JkX3R5cGVzOiBGRUFUVVJFX0NIQU5HRQogICAgYWN0aW9uOiBjaGFuZ2VkLWF1ZGl0LWZlYXR1cmUKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogZmVhdHVyZQogICAgICB3aGF0OiBzeXN0ZW0KICAgIGVjczoKICAgICAgY2F0ZWdvcnk6IGNvbmZpZ3VyYXRpb24KICAgICAgdHlwZTogY2hhbmdlCiAgIyBBVURJVF9SRVBMQUNFIC0gUmVwbGFjZSBhdWRpdGQgaWYgdGhpcyBwYWNrZXQgdW5hbnN3ZXJkCgogICMgVFRZIGV2ZW50cwoKICAtIHJlY29yZF90eXBlczoKICAgICAgIyBBVURJVF9UVFkgLSBJbnB1dCBvbiBhbiBhZG1pbmlzdHJhdGl2ZSBUVFkKICAgICAgLSBUVFkKICAgICAgIyBBVURJVF9VU0VSX1RUWSAtIE5vbi1JQ0FOT04gVFRZIGlucHV0IG1lYW5pbmcKICAgICAgLSBVU0VSX1RUWQogICAgYWN0aW9uOiB0eXBlZAogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBkYXRhCiAgICAgIHdoYXQ6IGtleXN0cm9rZXMKICAgIGhvdzogW2NvbW0sIGV4ZV0KCiAgIyBQb2xpY3kgZXZlbnRzCgogICMgQVVESVRfQVZDIC0gU0UgTGludXggYXZjIGRlbmlhbCBvciBncmFudCAoc2VsaW51eCkKICAtIHJlY29yZF90eXBlczogQVZDCiAgICBhY3Rpb246IHZpb2xhdGVkLXNlbGludXgtcG9saWN5CiAgICBzdWJqZWN0OgogICAgICBwcmltYXJ5OiBzY29udGV4dAogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiB0Y29udGV4dAogICAgICBzZWNvbmRhcnk6IHRjbGFzcwogICAgaGFzX2ZpZWxkczoKICAgICAgLSBzZXJlc3VsdAogICMgQVVESVRfQVZDIC0gU0UgTGludXggYXZjIGRlbmlhbCBvciBncmFudCAoYXBwYXJtb3IpCiAgLSByZWNvcmRfdHlwZXM6IEFWQwogICAgYWN0aW9uOiB2aW9sYXRlZC1hcHBhcm1vci1wb2xpY3kKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogb3BlcmF0aW9uCiAgICAgIHNlY29uZGFyeTogW3JlcXVlc3RlZF9tYXNrLCBkZW5pZWRfbWFzaywgY2FwbmFtZV0KICAgICAgd2hhdDogcG9saWN5CiAgICBoYXNfZmllbGRzOgogICAgICAtIGFwcGFybW9yCiAgIyBBVURJVF9GU19SRUxBQkVMIC0gRmlsZXN5c3RlbSByZWxhYmVsZWQKICAtIHJlY29yZF90eXBlczogRlNfUkVMQUJFTAogICAgYWN0aW9uOiByZWxhYmVsZWQtZmlsZXN5c3RlbQogICAgb2JqZWN0OgogICAgICB3aGF0OiBtYWMtY29uZmlnCiAgIyBBVURJVF9MQUJFTF9MRVZFTF9DSEFOR0UgLSBPYmplY3QncyBsZXZlbCB3YXMgY2hhbmdlZAogIC0gcmVjb3JkX3R5cGVzOiBMQUJFTF9MRVZFTF9DSEFOR0UKICAgIGFjdGlvbjogbW9kaWZpZWQtbGV2ZWwtb2YKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogcHJpbnRlcgogICAgICB3aGF0OiBwcmludGVyCiAgIyBBVURJVF9MQUJFTF9PVkVSUklERSAtIEFkbWluIGlzIG92ZXJyaWRpbmcgYSBsYWJlbAogIC0gcmVjb3JkX3R5cGVzOiBMQUJFTF9PVkVSUklERQogICAgYWN0aW9uOiBvdmVycm9kZS1sYWJlbC1vZgogICAgb2JqZWN0OgogICAgICB3aGF0OiBtYWMtY29uZmlnCiAgIyBBVURJVF9NQUNfQ0hFQ0sgLSBVc2VyIHNwYWNlIE1BQyBkZWNpc2lvbiByZXN1bHRzCiAgLSByZWNvcmRfdHlwZXM6IE1BQ19DSEVDSwogICAgYWN0aW9uOiBtYWMtcGVybWlzc2lvbgogICMgQVVESVRfTUFDX0NPTkZJR19DSEFOR0UgLSBDaGFuZ2VzIHRvIGJvb2xlYW5zCiAgLSByZWNvcmRfdHlwZXM6IE1BQ19DT05GSUdfQ0hBTkdFCiAgICBhY3Rpb246IGNoYW5nZWQtc2VsaW51eC1ib29sZWFuCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGJvb2wKICAgICAgd2hhdDogbWFjLWNvbmZpZwogICAgZWNzOgogICAgICBjYXRlZ29yeTogY29uZmlndXJhdGlvbgogICAgICB0eXBlOiBjaGFuZ2UKICAjIEFVRElUX01BQ19QT0xJQ1lfTE9BRCAtIFBvbGljeSBmaWxlIGxvYWQKICAtIHJlY29yZF90eXBlczogTUFDX1BPTElDWV9MT0FECiAgICBhY3Rpb246IGxvYWRlZC1zZWxpbnV4LXBvbGljeQogICAgb2JqZWN0OgogICAgICB3aGF0OiBtYWMtY29uZmlnCiAgICBlY3M6CiAgICAgIGNhdGVnb3J5OiBjb25maWd1cmF0aW9uCiAgICAgIHR5cGU6IGFjY2VzcwogICMgQVVESVRfTUFDX1NUQVRVUyAtIENoYW5nZWQgZW5mb3JjaW5nLHBlcm1pc3NpdmUsb2ZmCiAgLSByZWNvcmRfdHlwZXM6IE1BQ19TVEFUVVMKICAgIGFjdGlvbjogY2hhbmdlZC1zZWxpbnV4LWVuZm9yY2VtZW50CiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGVuZm9yY2luZwogICAgICB3aGF0OiBtYWMtY29uZmlnCiAgICBlY3M6CiAgICAgIGNhdGVnb3J5OiBjb25maWd1cmF0aW9uCiAgICAgIHR5cGU6IGNoYW5nZQogICMgQVVESVRfVVNFUl9BVkMgLSBVc2VyIHNwYWNlIGF2YyBtZXNzYWdlCiAgLSByZWNvcmRfdHlwZXM6IFVTRVJfQVZDCiAgICBhY3Rpb246IGFjY2Vzcy1wZXJtaXNzaW9uCiAgIyBBVURJVF9VU0VSX01BQ19DT05GSUdfQ0hBTkdFIC0gQ2hhbmdlIG1hZGUgdG8gTUFDIHBvbGljeQogIC0gcmVjb3JkX3R5cGVzOiBVU0VSX01BQ19DT05GSUdfQ0hBTkdFCiAgICBhY3Rpb246IGNoYW5nZWQtbWFjLWNvbmZpZ3VyYXRpb24KICAgIG9iamVjdDoKICAgICAgd2hhdDogbWFjLWNvbmZpZwogICAgZWNzOgogICAgICBjYXRlZ29yeTogY29uZmlndXJhdGlvbgogICAgICB0eXBlOiBjaGFuZ2UKICAjIEFVRElUX1VTRVJfTUFDX1BPTElDWV9MT0FEIC0gVXNlcnNwYyBkYWVtb24gbG9hZGVkIHBvbGljCiAgLSByZWNvcmRfdHlwZXM6IFVTRVJfTUFDX1BPTElDWV9MT0FECiAgICBhY3Rpb246IGxvYWRlZC1tYWMtcG9saWN5CiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IG1hYy1jb25maWcKICAgIGVjczoKICAgICAgY2F0ZWdvcnk6IGNvbmZpZ3VyYXRpb24KICAgICAgdHlwZTogYWNjZXNzCiAgIyBBVURJVF9VU0VSX1NFTElOVVhfRVJSIC0gU0UgTGludXggdXNlciBzcGFjZSBlcnJvcgogIC0gcmVjb3JkX3R5cGVzOiBVU0VSX1NFTElOVVhfRVJSCiAgICBhY3Rpb246IGFjY2Vzcy1lcnJvcgogICMgQVVESVRfU0VDQ09NUCAtIFNlY3VyZSBDb21wdXRpbmcgZXZlbnQKICAtIHJlY29yZF90eXBlczogU0VDQ09NUAogICAgYWN0aW9uOiB2aW9sYXRlZC1zZWNjb21wLXBvbGljeQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBzeXNjYWxsCiAgICAgIHdoYXQ6IHByb2Nlc3MKICAjIEFVRElUX1NFTElOVVhfRVJSIC0gSW50ZXJuYWwgU0UgTGludXggRXJyb3JzCiAgLSBhY3Rpb246IGNhdXNlZC1tYWMtcG9saWN5LWVycm9yCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHN5c3RlbQogICAgcmVjb3JkX3R5cGVzOiBTRUxJTlVYX0VSUgogICMgQVVESVRfQVBQQVJNT1JfQUxMT1dFRAogICMgQVVESVRfQVBQQVJNT1JfREVOSUVECiAgIyBBVURJVF9BUFBBUk1PUl9FUlJPUgogICMgQVVESVRfQVZDX1BBVEggLSBkZW50cnksIHZmc21vdW50IHBhaXIgZnJvbSBhdmMKICAjIEFVRElUX0FQUEFSTU9SX0FVRElUCiAgIyBBVURJVF9BUFBBUk1PUl9ISU5UCiAgIyBBVURJVF9BUFBBUk1PUl9TVEFUVVMKICAjIEFVRElUX0FQUEFSTU9SX0VSUk9SCiAgIyBBVURJVF9ERVZfQUxMT0MgLSBEZXZpY2Ugd2FzIGFsbG9jYXRlZAogICMgQVVESVRfREVWX0RFQUxMT0MgLSBEZXZpY2Ugd2FzIGRlYWxsb2NhdGVkCiAgIyBBVURJVF9NQUNfVU5MQkxfQUxMT1cgLSBOZXRMYWJlbDogYWxsb3cgdW5sYWJlbGVkIHRyYWZmaWMKICAjIEFVRElUX01BQ19DSVBTT1Y0X0FERCAtIE5ldExhYmVsOiBhZGQgQ0lQU092NCBET0kgZW50cnkKICAjIEFVRElUX01BQ19DSVBTT1Y0X0RFTCAtIE5ldExhYmVsOiBkZWwgQ0lQU092NCBET0kgZW50cnkKICAjIEFVRElUX01BQ19NQVBfQUREIC0gTmV0TGFiZWw6IGFkZCBMU00gZG9tYWluIG1hcHBpbmcKICAjIEFVRElUX01BQ19NQVBfREVMIC0gTmV0TGFiZWw6IGRlbCBMU00gZG9tYWluIG1hcHBpbmcKICAjIEFVRElUX01BQ19JUFNFQ19FVkVOVCAtIEF1ZGl0IGFuIElQU2VjIGV2ZW50CiAgIyBBVURJVF9NQUNfVU5MQkxfU1RDQUREIC0gTmV0TGFiZWw6IGFkZCBhIHN0YXRpYyBsYWJlbAogICMgQVVESVRfTUFDX1VOTEJMX1NUQ0RFTCAtIE5ldExhYmVsOiBkZWwgYSBzdGF0aWMgbGFiZWwKICAjIEFVRElUX01BQ19DQUxJUFNPX0FERCAtIE5ldExhYmVsOiBhZGQgQ0FMSVBTTyBET0kgZW50cnkKICAjIEFVRElUX01BQ19DQUxJUFNPX0RFTCAtIE5ldExhYmVsOiBkZWwgQ0FMSVBTTyBET0kgZW50cnkKICAjIEFVRElUX1VTRVJfTEFCRUxFRF9FWFBPUlQgLSBPYmplY3QgZXhwb3J0ZWQgd2l0aCBsYWJlbAogICMgQVVESVRfVVNFUl9VTkxBQkVMRURfRVhQT1JUIC0gT2JqZWN0IGV4cG9ydGVkIHdpdGhvdXQgbGFiZWwKCiAgIyBDcnlwdG8gZXZlbnRzCgogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIGFjdGlvbjogbmVnb3RpYXRlZC1jcnlwdG8ta2V5CiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGZwCiAgICAgIHNlY29uZGFyeTogW2FkZHIsIGhvc3RuYW1lXQogICAgICB3aGF0OiB1c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogQ1JZUFRPX0tFWV9VU0VSCiAgICBzb3VyY2VfaXA6IFthZGRyXQogICAgZWNzOiAqZWNzLXByb2Nlc3MKICAtIGFjdGlvbjogY3J5cHRvLW9mZmljZXItbG9nZ2VkLWluCiAgICByZWNvcmRfdHlwZXM6IENSWVBUT19MT0dJTgogIC0gYWN0aW9uOiBjcnlwdG8tb2ZmaWNlci1sb2dnZWQtb3V0CiAgICByZWNvcmRfdHlwZXM6IENSWVBUT19MT0dPVVQKICAgIGVjczogKmVjcy1wcm9jZXNzCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgYWN0aW9uOiBzdGFydGVkLWNyeXB0by1zZXNzaW9uCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGFkZHIKICAgICAgc2Vjb25kYXJ5OiBbcnBvcnRdCiAgICByZWNvcmRfdHlwZXM6IENSWVBUT19TRVNTSU9OCiAgICBzb3VyY2VfaXA6IFthZGRyXQogICAgZWNzOiAqZWNzLXByb2Nlc3MKICAtIGFjdGlvbjogYWNjZXNzLXJlc3VsdAogICAgcmVjb3JkX3R5cGVzOiBEQUNfQ0hFQ0sKCiAgIyBBbm9tYWxpZXMKCiAgIyBBVURJVF9BTk9NX0FCRU5EIC0gUHJvY2VzcyBlbmRlZCBhYm5vcm1hbGx5CiAgLSByZWNvcmRfdHlwZXM6IEFOT01fQUJFTkQKICAgIGFjdGlvbjogY3Jhc2hlZC1wcm9ncmFtCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IFtjb21tLCBleGVdCiAgICAgIHNlY29uZGFyeTogcGlkCiAgICAgIHdoYXQ6IHByb2Nlc3MKICAgIGhvdzogc2lnCiAgICBlY3M6CiAgICAgICMgY29uc2lkZXIgYWRkaW5nIGFuIGFub21hbHkgY2F0ZWdvcnkgd2hlbiB3ZSBpbnRyb2R1Y2UKICAgICAgIyB0byBFQ1MKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBlbmQKICAjIEFVRElUX0FOT01fRVhFQyAtIEV4ZWN1dGlvbiBvZiBmaWxlCiAgLSByZWNvcmRfdHlwZXM6IEFOT01fRVhFQwogICAgYWN0aW9uOiBhdHRlbXB0ZWQtZXhlY3V0aW9uLW9mLWZvcmJpZGRlbi1wcm9ncmFtCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGNtZAogICAgICB3aGF0OiBwcm9jZXNzCiAgICBob3c6IHRlcm1pbmFsCiAgICBlY3M6CiAgICAgICMgY29uc2lkZXIgYWRkaW5nIGFuIGFub21hbHkgY2F0ZWdvcnkgd2hlbiB3ZSBpbnRyb2R1Y2UKICAgICAgIyB0byBFQ1MKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBzdGFydAogICMgQVVESVRfQU5PTV9MSU5LIC0gU3VzcGljaW91cyB1c2Ugb2YgZmlsZSBsaW5rcwogIC0gcmVjb3JkX3R5cGVzOiBBTk9NX0xJTksKICAgIGFjdGlvbjogdXNlZC1zdXNwaWNpb3VzLWxpbmsKICAjIEFVRElUX0FOT01fTE9HSU5fRkFJTFVSRVMgLSBGYWlsZWQgbG9naW4gbGltaXQgcmVhY2hlZAogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogQU5PTV9MT0dJTl9GQUlMVVJFUwogICAgYWN0aW9uOiBmYWlsZWQtbG9nLWluLXRvby1tYW55LXRpbWVzLXRvCiAgIyBBVURJVF9BTk9NX0xPR0lOX0xPQ0FUSU9OIC0gTG9naW4gZnJvbSBmb3JiaWRkZW4gbG9jYXRpb24KICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IEFOT01fTE9HSU5fTE9DQVRJT04KICAgIGFjdGlvbjogYXR0ZW1wdGVkLWxvZy1pbi1mcm9tLXVudXN1YWwtcGxhY2UtdG8KICAjIEFVRElUX0FOT01fTE9HSU5fU0VTU0lPTlMgLSBNYXggY29uY3VycmVudCBzZXNzaW9ucyByZWFjaGVkCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBBTk9NX0xPR0lOX1NFU1NJT05TCiAgICBhY3Rpb246IG9wZW5lZC10b28tbWFueS1zZXNzaW9ucy10bwogICMgQVVESVRfQU5PTV9MT0dJTl9USU1FIC0gTG9naW4gYXR0ZW1wdGVkIGF0IGJhZCB0aW1lCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBBTk9NX0xPR0lOX1RJTUUKICAgIGFjdGlvbjogYXR0ZW1wdGVkLWxvZy1pbi1kdXJpbmctdW51c3VhbC1ob3VyLXRvCiAgIyBBVURJVF9BTk9NX1BST01JU0NVT1VTIC0gRGV2aWNlIGNoYW5nZWQgcHJvbWlzY3VvdXMgbW9kZQogIC0gcmVjb3JkX3R5cGVzOiBBTk9NX1BST01JU0NVT1VTCiAgICBhY3Rpb246IGNoYW5nZWQtcHJvbWlzY3VvdXMtbW9kZS1vbi1kZXZpY2UgIyBDb3VsZCBiZSBlbnRlcmVkIG9yIGV4aXRlZCBiYXNlZCBvbiBwcm9tIGZpZWxkLgogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBkZXYKICAgICAgd2hhdDogbmV0d29yay1kZXZpY2UKICAjIEFVRElUX0FOT01fUkJBQ19JTlRFR1JJVFlfRkFJTCAtIFJCQUMgZmlsZSBpbnRlZ3JpdHkgZmFpbHVyZQogIC0gcmVjb3JkX3R5cGVzOiBBTk9NX1JCQUNfSU5URUdSSVRZX0ZBSUwKICAgIGFjdGlvbjogdGVzdGVkLWZpbGUtc3lzdGVtLWludGVncml0eS1vZgogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBob3N0bmFtZQogICAgICB3aGF0OiBmaWxlc3lzdGVtCiAgIyBBVURJVF9BTk9NX0xPR0lOX0FDQ1QgLSBMb2dpbiBhdHRlbXB0ZWQgdG8gd2F0Y2hlZCBhY2N0CiAgIyBBVURJVF9BTk9NX01BWF9EQUMgLSBNYXggREFDIGZhaWx1cmVzIHJlYWNoZWQKICAjIEFVRElUX0FOT01fTUFYX01BQyAtIE1heCBNQUMgZmFpbHVyZXMgcmVhY2hlZAogICMgQVVESVRfQU5PTV9BTVRVX0ZBSUwgLSBBTVRVIGZhaWx1cmUKICAjIEFVRElUX0FOT01fUkJBQ19GQUlMIC0gUkJBQyBzZWxmIHRlc3QgZmFpbHVyZQogICMgQVVESVRfQU5PTV9DUllQVE9fRkFJTCAtIENyeXB0byBzeXN0ZW0gdGVzdCBmYWlsdXJlCiAgIyBBVURJVF9BTk9NX01LX0VYRSAtIE1ha2UgYW4gZXhlY3V0YWJsZQogICMgQVVESVRfQU5PTV9BQ0NFU1NfRlMgLSBBY2Nlc3Mgb2YgZmlsZSBvciBkaXIKICAjIEFVRElUX0FOT01fQUREX0FDQ1QgLSBBZGRpbmcgYW4gYWNjdAogICMgQVVESVRfQU5PTV9ERUxfQUNDVCAtIERlbGV0aW5nIGFuIGFjY3QKICAjIEFVRElUX0FOT01fTU9EX0FDQ1QgLSBDaGFuZ2luZyBhbiBhY2N0CiAgIyBBVURJVF9BTk9NX1JPT1RfVFJBTlMgLSBVc2VyIGJlY2FtZSByb290CiAgIyBBVURJVF9BTk9NX0xPR0lOX1NFUlZJQ0UgLSBTZXJ2aWNlIGFjY3QgYXR0ZW1wdGVkIGxvZ2luCgogICMgQW5vbWFseSByZXNwb25zZXMKCiAgIyBBVURJVF9SRVNQX0FOT01BTFkgLSBBbm9tYWx5IG5vdCByZWFjdGVkIHRvCiAgIyBBVURJVF9SRVNQX0FMRVJUIC0gQWxlcnQgZW1haWwgd2FzIHNlbnQKICAjIEFVRElUX1JFU1BfS0lMTF9QUk9DIC0gS2lsbCBwcm9ncmFtCiAgIyBBVURJVF9SRVNQX1RFUk1fQUNDRVNTIC0gVGVybWluYXRlIHNlc3Npb24KICAjIEFVRElUX1JFU1BfQUNDVF9SRU1PVEUgLSBBY2N0IGxvY2tlZCBmcm9tIHJlbW90ZSBhY2Nlc3MKICAjIEFVRElUX1JFU1BfQUNDVF9MT0NLX1RJTUVEIC0gVXNlciBhY2N0IGxvY2tlZCBmb3IgdGltZQogICMgQVVESVRfUkVTUF9BQ0NUX1VOTE9DS19USU1FRCAtIFVzZXIgYWNjdCB1bmxvY2tlZCBmcm9tIHRpbWUKICAjIEFVRElUX1JFU1BfQUNDVF9MT0NLIC0gVXNlciBhY2N0IHdhcyBsb2NrZWQKICAjIEFVRElUX1JFU1BfVEVSTV9MT0NLIC0gVGVybWluYWwgd2FzIGxvY2tlZAogICMgQVVESVRfUkVTUF9TRUJPT0wgLSBTZXQgYW4gU0UgTGludXggYm9vbGVhbgogICMgQVVESVRfUkVTUF9FWEVDIC0gRXhlY3V0ZSBhIHNjcmlwdAogICMgQVVESVRfUkVTUF9TSU5HTEUgLSBHbyB0byBzaW5nbGUgdXNlciBtb2RlCiAgIyBBVURJVF9SRVNQX0hBTFQgLSB0YWtlIHRoZSBzeXN0ZW0gZG93bgogICMgQVVESVRfUkVTUF9PUklHSU5fQkxPQ0sgLSBBZGRyZXNzIGJsb2NrZWQgYnkgaXB0YWJsZXMKICAjIEFVRElUX1JFU1BfT1JJR0lOX0JMT0NLX1RJTUVEIC0gQWRkcmVzcyBibG9ja2VkIGZvciB0aW1lCgogICMgQXVkaXQgcnVsZSBldmVudHMKCiAgIyBBVURJVF9TWVNDQUxMIC0gU3lzY2FsbCBldmVudAogICMgQVVESVRfUEFUSCAtIEZpbGVuYW1lIHBhdGggaW5mb3JtYXRpb24KICAjIEFVRElUX0lQQyAtIElQQyByZWNvcmQKICAjIEFVRElUX1NPQ0tFVENBTEwgLSBzeXNfc29ja2V0Y2FsbCBhcmd1bWVudHMKICAjIEFVRElUX1NPQ0tBRERSIC0gc29ja2FkZHIgY29waWVkIGFzIHN5c2NhbGwgYXJnCiAgIyBBVURJVF9DV0QgLSBDdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5CiAgIyBBVURJVF9FWEVDVkUgLSBleGVjdmUgYXJndW1lbnRzCiAgIyBBVURJVF9JUENfU0VUX1BFUk0gLSBJUEMgbmV3IHBlcm1pc3Npb25zIHJlY29yZCB0eXBlCiAgIyBBVURJVF9NUV9PUEVOIC0gUE9TSVggTVEgb3BlbiByZWNvcmQgdHlwZQogICMgQVVESVRfTVFfU0VORFJFQ1YtIFBPU0lYIE1RIHNlbmQvcmVjZWl2ZSByZWNvcmQgdHlwZQogICMgQVVESVRfTVFfTk9USUZZIC0gUE9TSVggTVEgbm90aWZ5IHJlY29yZCB0eXBlCiAgIyBBVURJVF9NUV9HRVRTRVRBVFRSIC0gUE9TSVggTVEgZ2V0L3NldCBhdHRyaWJ1dGUgcmVjb3JkIHR5cGUKICAjIEFVRElUX0ZEX1BBSVIgLSBhdWRpdCByZWNvcmQgZm9yIHBpcGUvc29ja2V0cGFpcgogICMgQVVESVRfT0JKX1BJRCAtIHB0cmFjZSB0YXJnZXQKICAjIEFVRElUX0JQUk1fRkNBUFMgLSBJbmZvcm1hdGlvbiBhYm91dCBmY2FwcyBpbmNyZWFzaW5nIHBlcm1zCiAgIyBBVURJVF9DQVBTRVQgLSBSZWNvcmQgc2hvd2luZyBhcmd1bWVudCB0byBzeXNfY2Fwc2V0CiAgIyBBVURJVF9NTUFQIC0gUmVjb3JkIHNob3dpbmcgZGVzY3JpcHRvciBhbmQgZmxhZ3MgaW4gbW1hcAogICMgQVVESVRfTkVURklMVEVSX1BLVCAtIFBhY2tldHMgdHJhdmVyc2luZyBuZXRmaWx0ZXIgY2hhaW5zCgogICMgSW50ZWdyaXR5IGNoZWNrcwoKICAjIEFVRElUX0lOVEVHUklUWV9EQVRBIC0gRGF0YSBpbnRlZ3JpdHkgdmVyaWZpY2F0aW9uCiAgIyBBVURJVF9JTlRFR1JJVFlfTUVUQURBVEEgLSBNZXRhZGF0YSBpbnRlZ3JpdHkgdmVyaWZpY2F0aW9uCiAgIyBBVURJVF9JTlRFR1JJVFlfU1RBVFVTIC0gSW50ZWdyaXR5IGVuYWJsZSBzdGF0dXMKICAjIEFVRElUX0lOVEVHUklUWV9IQVNIIC0gSW50ZWdyaXR5IEhBU0ggdHlwZQogICMgQVVESVRfSU5URUdSSVRZX1BDUiAtIFBDUiBpbnZhbGlkYXRpb24gbXNncwogICMgQVVESVRfSU5URUdSSVRZX1JVTEUgLSBQb2xpY3kgcnVsZQoKICAjIFZhcmlvdXMKCiAgIyBBVURJVF9VU0VSIC0gTWVzc2FnZSBmcm9tIHVzZXJzcGFjZSAtLSBkZXByZWNhdGVkCiAgLSByZWNvcmRfdHlwZXM6IFVTRVIKICAgIGFjdGlvbjogc2VudC1tZXNzYWdlCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGFkZHIK") + value, _ = base64.StdEncoding.DecodeString("LS0tCiMgTWFjcm9zIGRlY2xhcmVzIHNvbWUgWUFNTCBhbmNob3JzIHRoYXQgY2FuIGJlIHJlZmVyZW5jZWQgZm9yIHNvbWUgY29tbW9uCiMgb2JqZWN0IHR5cGUgbm9ybWFsaXphdGlvbnMgbGlrZSB1c2VyLXNlc3Npb24sIHNvY2tldCwgb3IgcHJvY2Vzcy4KbWFjcm9zOgogIC0gJmRlZmF1bHRzCiAgICBzdWJqZWN0OgogICAgICBwcmltYXJ5OiBhdWlkCiAgICAgIHNlY29uZGFyeTogdWlkCiAgICBob3c6IFtleGUsIGNvbW1dCgogIC0gJm1hY3JvLXVzZXItc2Vzc2lvbgogICAgc3ViamVjdDoKICAgICAgcHJpbWFyeTogYXVpZAogICAgICBzZWNvbmRhcnk6IFthY2N0LCBpZCwgdWlkXQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiB0ZXJtaW5hbAogICAgICBzZWNvbmRhcnk6IFthZGRyLCBob3N0bmFtZV0KICAgICAgd2hhdDogdXNlci1zZXNzaW9uCiAgICBob3c6IFtleGUsIHRlcm1pbmFsXQoKICAtICZtYWNyby1zb2NrZXQKICAgIDw8OiAqZGVmYXVsdHMKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogW2FkZHIsIHBhdGhdCiAgICAgIHNlY29uZGFyeTogcG9ydAogICAgICB3aGF0OiBzb2NrZXQKCiAgLSAmbWFjcm8tcHJvY2VzcwogICAgPDw6ICpkZWZhdWx0cwogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBbY21kLCBleGUsIGNvbW1dCiAgICAgIHNlY29uZGFyeTogcGlkCiAgICAgIHdoYXQ6IHByb2Nlc3MKICAgIGhvdzogdGVybWluYWwKCiAgLSAmZWNzLWlhbQogICAgY2F0ZWdvcnk6IGlhbQogICAgdHlwZTogaW5mbwoKICAtICZlY3MtYXV0aAogICAgY2F0ZWdvcnk6IGF1dGhlbnRpY2F0aW9uCiAgICB0eXBlOiBpbmZvCiAgICBtYXBwaW5nczoKICAgICAgLSBmcm9tOiBhY3Rvci5wcmltYXJ5CiAgICAgICAgdG86IHVzZXIKICAgICAgLSBmcm9tOiBhY3Rvci5zZWNvbmRhcnkKICAgICAgICB0bzogdXNlci5lZmZlY3RpdmUKCiAgLSAmZWNzLWhvc3QKICAgIGNhdGVnb3J5OiBob3N0CiAgICB0eXBlOiBpbmZvCgogIC0gJmVjcy1wcm9jZXNzCiAgICBjYXRlZ29yeTogcHJvY2VzcwogICAgdHlwZTogaW5mbwoKICAtICZlY3MtZmlsZQogICAgY2F0ZWdvcnk6IGZpbGUKICAgIHR5cGU6IGluZm8KCiAgLSAmZWNzLWRyaXZlcgogICAgY2F0ZWdvcnk6IGRyaXZlcgogICAgdHlwZTogaW5mbwoKICAtICZlY3MtbmV0d29yawogICAgY2F0ZWdvcnk6IG5ldHdvcmsKICAgIHR5cGU6CiAgICAgIC0gY29ubmVjdGlvbgogICAgICAtIGluZm8KCiAgLSAmZWNzLXVzZXItbW9kaWZpY2F0aW9uLW1hcHBpbmdzCiAgICBtYXBwaW5nczoKICAgICAgLSBmcm9tOiBhY3Rvci5wcmltYXJ5CiAgICAgICAgdG86IHVzZXIKICAgICAgLSBmcm9tOiBhY3Rvci5zZWNvbmRhcnkKICAgICAgICB0bzogdXNlci5lZmZlY3RpdmUKICAgICAgLSBmcm9tOiBvYmplY3QucHJpbWFyeQogICAgICAgIHRvOiB1c2VyLnRhcmdldAoKICAtICZlY3MtZ3JvdXAtbW9kaWZpY2F0aW9uLW1hcHBpbmdzCiAgICBtYXBwaW5nczoKICAgICAgLSBmcm9tOiBhY3Rvci5wcmltYXJ5CiAgICAgICAgdG86IHVzZXIKICAgICAgLSBmcm9tOiBhY3Rvci5zZWNvbmRhcnkKICAgICAgICB0bzogdXNlci5lZmZlY3RpdmUKICAgICAgLSBmcm9tOiBvYmplY3QucHJpbWFyeQogICAgICAgIHRvOiBncm91cC50YXJnZXQKCiMgTm9ybWFsaXphdGlvbnMgaXMgYSBsaXN0IG9mIGRlY2xhcmF0aW9ucyBzcGVjaWZ5aW5nIGhvdyB0byBub3JtYWxpemUgdGhlIGRhdGEKIyBjb250YWluZWQgaW4gYW4gZXZlbnQuIFRoZSBub3JtYWxpemF0aW9uIGNhbiBiZSBhcHBsaWVkIGJhc2VkIG9uIHRoZSBzeXNjYWxsCiMgbmFtZSAoZS5nLiBjb25uZWN0LCBvcGVuKSBvciBiYXNlZCBvbiB0aGUgcmVjb3JkIHR5cGUgKGUuZy4gVVNFUl9MT0dJTikuCiMgTm8gdHdvIG5vcm1hbGl6YXRpb25zIGNhbiBhcHBseSB0byB0aGUgc2FtZSBzeXNjYWxsIG9yIHJlY29yZCB0eXBlLiBUaGlzCiMgd2lsbCByZXN1bHQgaW4gYSBmYWlsdXJlIGF0IGxvYWQgdGltZS4KIwojIEVhY2ggbm9ybWFsaXphdGlvbiBzaG91bGQgc3BlY2lmeToKIyAgIGFjdGlvbiAtIHdoYXQgaGFwcGVuZWQKIyAgIGFjdG9yICAtIHdobyBkaWQgdGhpcyBvciB3aG8gdHJpZ2dlcmVkIHRoZSBldmVudAojICAgb2JqZWN0IC0gd2hhdCB3YXMgdGhlICJ0aGluZyIgaW52b2x2ZWQgaW4gdGhlIGFjdGlvbiAoZS5nLiBwcm9jZXNzLCBzb2NrZXQpCiMgICBob3cgICAgLSBob3cgd2FzIHRoZSBhY3Rpb24gcGVyZm9ybWVkIChlLmcuIGV4ZSBvciB0ZXJtaW5hbCkKbm9ybWFsaXphdGlvbnM6CiAgLSBlY3M6ICplY3MtcHJvY2VzcwogICAgc3lzY2FsbHM6CiAgICAgIC0gJyonICMgdGhpcyBpcyBhIGNhdGNoIGFsbAogIC0gYWN0aW9uOiBvcGVuZWQtZmlsZQogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBjcmVhdCAtIG9wZW4gYW5kIHBvc3NpYmx5IGNyZWF0ZSBhIGZpbGUKICAgICAgLSBjcmVhdAogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgIHR5cGU6IGNyZWF0aW9uCiAgLSBhY3Rpb246IG9wZW5lZC1maWxlCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIGZhbGxvY2F0ZSAtIG1hbmlwdWxhdGUgZmlsZSBzcGFjZQogICAgICAtIGZhbGxvY2F0ZQogICAgICAjIHRydW5jYXRlIC0gdHJ1bmNhdGUgYSBmaWxlIHRvIGEgc3BlY2lmaWVkIGxlbmd0aAogICAgICAtIHRydW5jYXRlCiAgICAgICMgZnRydW5jYXRlIC0gdHJ1bmNhdGUgYSBmaWxlIHRvIGEgc3BlY2lmaWVkIGxlbmd0aAogICAgICAtIGZ0cnVuY2F0ZQogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgICMgdGVjaG5pY2FsbHkgeW91IGNhbiB0cnVuY2F0ZSBhIGZpbGUgdG8gdGhlIHNhbWUgbGVuZ3RoCiAgICAgICMgYnV0IHJlZ2FyZGxlc3MsIHdlIGNvbnNpZGVyIHRoaXMgYSBjaGFuZ2UKICAgICAgdHlwZTogY2hhbmdlCiAgLSBhY3Rpb246IG9wZW5lZC1maWxlCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIG9wZW4gLSBvcGVuIGFuZCBwb3NzaWJseSBjcmVhdGUgYSBmaWxlCiAgICAgIC0gb3BlbgogICAgICAjIG9wZW5hdCAtIG9wZW4gYW5kIHBvc3NpYmx5IGNyZWF0ZSBhIGZpbGUKICAgICAgLSBvcGVuYXQKICAgICAgIyByZWFkbGluayAtIHJlYWQgdmFsdWUgb2YgYSBzeW1ib2xpYyBsaW5rCiAgICAgIC0gcmVhZGxpbmsKICAgICAgIyByZWFkbGlua2F0IC0gcmVhZCB2YWx1ZSBvZiBhIHN5bWJvbGljIGxpbmsKICAgICAgLSByZWFkbGlua2F0CiAgICBlY3M6ICplY3MtZmlsZQogIC0gYWN0aW9uOiByZWFkLWZpbGUKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgc3lzY2FsbHM6CiAgICAgICMgcmVhZCAtIHJlYWQgZnJvbSBhIGZpbGUgZGVzY3JpcHRvcgogICAgICAtIHJlYWQKICAgIGVjczogKmVjcy1maWxlCiAgLSBhY3Rpb246IHdyb3RlLXRvLWZpbGUKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgc3lzY2FsbHM6CiAgICAgICMgd3JpdGUgLSB3cml0ZSB0byBhIGZpbGUgZGVzY3JpcHRvcgogICAgICAtIHdyaXRlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgdHlwZTogY2hhbmdlCiAgLSBhY3Rpb246IGNoYW5nZWQtZmlsZS1hdHRyaWJ1dGVzLW9mCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIHNldHhhdHRyIC0gc2V0IGFuIGV4dGVuZGVkIGF0dHJpYnV0ZSB2YWx1ZQogICAgICAtIHNldHhhdHRyCiAgICAgICMgZnNldHhhdHRyIC0gc2V0IGFuIGV4dGVuZGVkIGF0dHJpYnV0ZSB2YWx1ZQogICAgICAtIGZzZXR4YXR0cgogICAgICAjIGxzZXR4YXR0ciAtIHNldCBhbiBleHRlbmRlZCBhdHRyaWJ1dGUgdmFsdWUKICAgICAgLSBsc2V0eGF0dHIKICAgICAgIyByZW1vdmV4YXR0ciAtIHJlbW92ZSBhbiBleHRlbmRlZCBhdHRyaWJ1dGUKICAgICAgLSByZW1vdmV4YXR0cgogICAgICAjIGZyZW1vdmV4YXR0ciAtIHJlbW92ZSBhbiBleHRlbmRlZCBhdHRyaWJ1dGUKICAgICAgLSBmcmVtb3ZleGF0dHIKICAgICAgIyBscmVtb3ZleGF0dHIgLSByZW1vdmUgYW4gZXh0ZW5kZWQgYXR0cmlidXRlCiAgICAgIC0gbHJlbW92ZXhhdHRyCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgdHlwZTogY2hhbmdlCiAgLSBhY3Rpb246IGNoYW5nZWQtZmlsZS1wZXJtaXNzaW9ucy1vZgogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBjaG1vZCAtIGNoYW5nZSBwZXJtaXNzaW9ucyBvZiBhIGZpbGUKICAgICAgLSBjaG1vZAogICAgICAjIGZjaG1vZCAtIGNoYW5nZSBwZXJtaXNzaW9ucyBvZiBhIGZpbGUKICAgICAgLSBmY2htb2QKICAgICAgIyBmY2htb2RhdCAtIGNoYW5nZSBwZXJtaXNzaW9ucyBvZiBhIGZpbGUKICAgICAgLSBmY2htb2RhdAogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgIHR5cGU6IGNoYW5nZQogIC0gYWN0aW9uOiBjaGFuZ2VkLWZpbGUtb3duZXJzaGlwLW9mCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIGNob3duIC0gY2hhbmdlIG93bmVyc2hpcCBvZiBhIGZpbGUKICAgICAgLSBjaG93bgogICAgICAjIGZjaG93biAtIGNoYW5nZSBvd25lcnNoaXAgb2YgYSBmaWxlCiAgICAgIC0gZmNob3duCiAgICAgICMgZmNob3duYXQgLSBjaGFuZ2Ugb3duZXJzaGlwIG9mIGEgZmlsZQogICAgICAtIGZjaG93bmF0CiAgICAgICMgbGNob3duIC0gY2hhbmdlIG93bmVyc2hpcCBvZiBhIGZpbGUKICAgICAgLSBsY2hvd24KICAgIGVjczoKICAgICAgPDw6ICplY3MtZmlsZQogICAgICB0eXBlOiBjaGFuZ2UKICAtIGFjdGlvbjogbG9hZGVkLWtlcm5lbC1tb2R1bGUKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgICBwcmltYXJ5OiBuYW1lCiAgICByZWNvcmRfdHlwZXM6CiAgICAgIC0gS0VSTl9NT0RVTEUKICAgIHN5c2NhbGxzOgogICAgICAjIGZpbml0X21vZHVsZSAtIGxvYWQgYSBrZXJuZWwgbW9kdWxlCiAgICAgIC0gZmluaXRfbW9kdWxlCiAgICAgICMgaW5pdF9tb2R1bGUgLSBsb2FkIGEga2VybmVsIG1vZHVsZQogICAgICAtIGluaXRfbW9kdWxlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWRyaXZlcgogICAgICB0eXBlOiBzdGFydAogIC0gYWN0aW9uOiB1bmxvYWRlZC1rZXJuZWwtbW9kdWxlCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIGRlbGV0ZV9tb2R1bGUgLSB1bmxvYWQgYSBrZXJuZWwgbW9kdWxlCiAgICAgIC0gZGVsZXRlX21vZHVsZQogICAgZWNzOgogICAgICA8PDogKmVjcy1kcml2ZXIKICAgICAgdHlwZTogZW5kCiAgLSBhY3Rpb246IGNyZWF0ZWQtZGlyZWN0b3J5CiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgICAgcGF0aF9pbmRleDogMQogICAgc3lzY2FsbHM6CiAgICAgICMgbWtkaXIgLSBjcmVhdGUgYSBkaXJlY3RvcnkKICAgICAgLSBta2RpcgogICAgICAjIG1rZGlyYXQgLSBjcmVhdGUgYSBkaXJlY3RvcnkKICAgICAgLSBta2RpcmF0CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgdHlwZTogY3JlYXRpb24KICAtIGFjdGlvbjogbW91bnRlZAogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlc3lzdGVtCiAgICAgIHBhdGhfaW5kZXg6IDEKICAgIHN5c2NhbGxzOgogICAgICAjIG1vdW50IC0gbW91bnQgZmlsZXN5c3RlbQogICAgICAtIG1vdW50CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgIyBzaW5jZSBhIG5ldyBtb3VudCBhcHBlYXJzIG9uIHRoZSBzeXN0ZW0KICAgICAgIyB3ZSBjb25zaWRlciB0aGlzIGEgaGlnaC1sZXZlbCAiY3JlYXRpb24iIGV2ZW50CiAgICAgIHR5cGU6IGNyZWF0aW9uCiAgLSBhY3Rpb246IHJlbmFtZWQKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgICBwYXRoX2luZGV4OiAyCiAgICBzeXNjYWxsczoKICAgICAgIyByZW5hbWUgLSBjaGFuZ2UgdGhlIG5hbWUgb3IgbG9jYXRpb24gb2YgYSBmaWxlCiAgICAgIC0gcmVuYW1lCiAgICAgICMgcmVuYW1lYXQgLSBjaGFuZ2UgdGhlIG5hbWUgb3IgbG9jYXRpb24gb2YgYSBmaWxlCiAgICAgIC0gcmVuYW1lYXQKICAgICAgIyByZW5hbWVhdDIgLSBjaGFuZ2UgdGhlIG5hbWUgb3IgbG9jYXRpb24gb2YgYSBmaWxlCiAgICAgIC0gcmVuYW1lYXQyCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgdHlwZTogY2hhbmdlCiAgLSBhY3Rpb246IGNoZWNrZWQtbWV0YWRhdGEtb2YKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgc3lzY2FsbHM6CiAgICAgICMgYWNjZXNzIC0gY2hlY2sgdXNlcidzIHBlcm1pc3Npb25zIGZvciBhIGZpbGUKICAgICAgLSBhY2Nlc3MKICAgICAgIyBmYWNjZXNzYXQgLSBjaGVjayB1c2VyJ3MgcGVybWlzc2lvbnMgZm9yIGEgZmlsZQogICAgICAtIGZhY2Nlc3NhdAogICAgICAjIGZzdGF0YXQgLSBnZXQgZmlsZSBzdGF0dXMKICAgICAgLSBmc3RhdGF0CiAgICAgICMgbmV3ZnN0YXRhdCAtIGdldCBmaWxlIHN0YXR1cwogICAgICAtIG5ld2ZzdGF0YXQKICAgICAgIyBzdGF0IC0gZ2V0IGZpbGUgc3RhdHVzCiAgICAgIC0gc3RhdAogICAgICAjIHN0YXQ2NCAtIGdldCBmaWxlIHN0YXR1cwogICAgICAtIHN0YXQ2NAogICAgICAjIGZzdGF0IC0gZ2V0IGZpbGUgc3RhdHVzCiAgICAgIC0gZnN0YXQKICAgICAgIyBsc3RhdCAtIGdldCBmaWxlIHN0YXR1cwogICAgICAtIGxzdGF0CiAgICAgICMgZ2V0eGF0dHIgLSByZXRyaWV2ZSBhbiBleHRlbmRlZCBhdHRyaWJ1dGUgdmFsdWUKICAgICAgLSBnZXR4YXR0cgogICAgICAjIGxnZXR4YXR0ciAtIHJldHJpZXZlIGFuIGV4dGVuZGVkIGF0dHJpYnV0ZSB2YWx1ZQogICAgICAtIGxnZXR4YXR0cgogICAgICAjIGZnZXR4YXR0ciAtIHJldHJpZXZlIGFuIGV4dGVuZGVkIGF0dHJpYnV0ZSB2YWx1ZQogICAgICAtIGZnZXR4YXR0cgogICAgZWNzOiAqZWNzLWZpbGUKICAtIGFjdGlvbjogY2hlY2tlZC1maWxlc3lzdGVtLW1ldGFkYXRhLW9mCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGVzeXN0ZW0KICAgIHN5c2NhbGxzOgogICAgICAjIHN0YXRmcyAtIGdldCBmaWxlc3lzdGVtIHN0YXRpc3RpY3MKICAgICAgLSBzdGF0ZnMKICAgICAgIyBmc3RhdGZzIC0gZ2V0IGZpbGVzeXN0ZW0gc3RhdGlzdGljcwogICAgICAtIGZzdGF0ZnMKICAgIGVjczogKmVjcy1maWxlCiAgLSBhY3Rpb246IHN5bWxpbmtlZAogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBzeW1saW5rIC0gbWFrZSBhIG5ldyBuYW1lIGZvciBhIGZpbGUKICAgICAgLSBzeW1saW5rCiAgICAgICMgc3ltbGlua2F0IC0gbWFrZSBhIG5ldyBuYW1lIGZvciBhIGZpbGUKICAgICAgLSBzeW1saW5rYXQKICAgIGVjczoKICAgICAgPDw6ICplY3MtZmlsZQogICAgICAjICJjcmVhdGlvbiIgc2luY2Ugd2UncmUgY3JlYXRpbmcgYSBuZXcgZmlsZSBzeXN0ZW0KICAgICAgIyBlbnRyeSBmb3IgdGhlIHN5bWxpbmsKICAgICAgdHlwZTogY3JlYXRpb24KICAtIGFjdGlvbjogdW5tb3VudGVkCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGVzeXN0ZW0KICAgIHN5c2NhbGxzOgogICAgICAjIHVtb3VudCAtIHVubW91bnQgZmlsZXN5c3RlbQogICAgICAtIHVtb3VudAogICAgICAjIHVtb3VudDIgLSB1bm1vdW50IGZpbGVzeXN0ZW0KICAgICAgLSB1bW91bnQyCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgIyAiZGVsZXRpb24iIHRvIG1pcnJvciB0aGUgImNyZWF0aW9uIiBvZiB0aGUgbW91bnQKICAgICAgdHlwZTogZGVsZXRpb24KICAtIGFjdGlvbjogZGVsZXRlZAogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBybWRpciAtIGRlbGV0ZSBhIGRpcmVjdG9yeQogICAgICAtIHJtZGlyCiAgICAgICMgdW5saW5rIC0gZGVsZXRlIGEgbmFtZSBhbmQgcG9zc2libHkgdGhlIGZpbGUgaXQgcmVmZXJzIHRvCiAgICAgIC0gdW5saW5rCiAgICAgICMgdW5saW5rYXQgLSBkZWxldGUgYSBuYW1lIGFuZCBwb3NzaWJseSB0aGUgZmlsZSBpdCByZWZlcnMgdG8KICAgICAgLSB1bmxpbmthdAogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgIHR5cGU6IGRlbGV0aW9uCiAgLSBhY3Rpb246IGNoYW5nZWQtdGltZXN0YW1wLW9mCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIHV0aW1lIC0gY2hhbmdlIGZpbGUgbGFzdCBhY2Nlc3MgYW5kIG1vZGlmaWNhdGlvbiB0aW1lcwogICAgICAtIHV0aW1lCiAgICAgICMgdXRpbWVzIC0gY2hhbmdlIGZpbGUgbGFzdCBhY2Nlc3MgYW5kIG1vZGlmaWNhdGlvbiB0aW1lcwogICAgICAtIHV0aW1lcwogICAgICAjIGZ1dGltZXNhdCAtIGNoYW5nZSB0aW1lc3RhbXBzIG9mIGEgZmlsZSByZWxhdGl2ZSB0byBhIFwgZGlyZWN0b3J5IGZpbGUgZGVzY3JpcHRvcgogICAgICAtIGZ1dGltZXNhdAogICAgICAjIGZ1dGltZW5zIC0gY2hhbmdlIGZpbGUgdGltZXN0YW1wcyB3aXRoIG5hbm9zZWNvbmQgcHJlY2lzaW9uCiAgICAgIC0gZnV0aW1lbnMKICAgICAgIyB1dGltZW5zYXQgLSBjaGFuZ2UgZmlsZSB0aW1lc3RhbXBzIHdpdGggbmFub3NlY29uZCBwcmVjaXNpb24KICAgICAgLSB1dGltZW5zYXQKICAgIGVjczogKmVjcy1maWxlCiAgLSBhY3Rpb246IGV4ZWN1dGVkCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIGV4ZWN2ZSAtIGV4ZWN1dGUgcHJvZ3JhbQogICAgICAtIGV4ZWN2ZQogICAgICAjIGV4ZWN2ZWF0IC0gZXhlY3V0ZSBwcm9ncmFtIHJlbGF0aXZlIHRvIGEgZGlyZWN0b3J5IGZpbGUgZGVzY3JpcHRvcgogICAgICAtIGV4ZWN2ZWF0CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogc3RhcnQKICAtIGFjdGlvbjogbGlzdGVuLWZvci1jb25uZWN0aW9ucwogICAgb2JqZWN0OgogICAgICB3aGF0OiBzb2NrZXQKICAgIHN5c2NhbGxzOgogICAgICAjIGxpc3Rlbi0gbGlzdGVuIGZvciBjb25uZWN0aW9ucyBvbiBhIHNvY2tldAogICAgICAtIGxpc3RlbgogICAgZWNzOgogICAgICA8PDogKmVjcy1uZXR3b3JrCiAgICAgIHR5cGU6IHN0YXJ0CiAgLSBhY3Rpb246IGFjY2VwdGVkLWNvbm5lY3Rpb24tZnJvbQogICAgb2JqZWN0OgogICAgICB3aGF0OiBzb2NrZXQKICAgIHN5c2NhbGxzOgogICAgICAjIGFjY2VwdCAtIGFjY2VwdCBhIGNvbm5lY3Rpb24gb24gYSBzb2NrZXQKICAgICAgLSBhY2NlcHQKICAgICAgIyBhY2NlcHQ0IC0gYWNjZXB0IGEgY29ubmVjdGlvbiBvbiBhIHNvY2tldAogICAgICAtIGFjY2VwdDQKICAgIGVjczoKICAgICAgPDw6ICplY3MtbmV0d29yawogICAgICB0eXBlOgogICAgICAgIC0gY29ubmVjdGlvbgogICAgICAgIC0gc3RhcnQKICAtIGFjdGlvbjogYm91bmQtc29ja2V0CiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNvY2tldAogICAgc3lzY2FsbHM6CiAgICAgICMgYmluZCAtYmluZCBhIG5hbWUgdG8gYSBzb2NrZXQKICAgICAgLSBiaW5kCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLW5ldHdvcmsKICAgICAgdHlwZTogc3RhcnQKICAtIGFjdGlvbjogY29ubmVjdGVkLXRvCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNvY2tldAogICAgc3lzY2FsbHM6CiAgICAgIC0gY29ubmVjdAogICAgZWNzOgogICAgICA8PDogKmVjcy1uZXR3b3JrCiAgICAgIHR5cGU6CiAgICAgICAgLSBjb25uZWN0aW9uCiAgICAgICAgLSBzdGFydAogIC0gYWN0aW9uOiByZWNlaXZlZC1mcm9tCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNvY2tldAogICAgc3lzY2FsbHM6CiAgICAgICMgcmVjdiAtIHJlY2VpdmUgYSBtZXNzYWdlIGZyb20gYSBzb2NrZXQKICAgICAgLSByZWN2CiAgICAgICMgcmVjdmZyb20gLSByZWNlaXZlIGEgbWVzc2FnZSBmcm9tIGEgc29ja2V0CiAgICAgIC0gcmVjdmZyb20KICAgICAgIyByZWN2bXNnIC0gcmVjZWl2ZSBhIG1lc3NhZ2UgZnJvbSBhIHNvY2tldAogICAgICAtIHJlY3Ztc2cKICAgICAgIyByZWN2bW1zZyAtIHJlY2VpdmUgbXVsdGlwbGUgbWVzc2FnZXMgb24gYSBzb2NrZXQKICAgICAgLSByZWN2bW1zZwogICAgZWNzOgogICAgICA8PDogKmVjcy1uZXR3b3JrCiAgLSBhY3Rpb246IHNlbnQtdG8KICAgIG9iamVjdDoKICAgICAgd2hhdDogc29ja2V0CiAgICBzeXNjYWxsczoKICAgICAgIyBzZW5kIC0gc2VuZCBhIG1lc3NhZ2Ugb24gYSBzb2NrZXQKICAgICAgLSBzZW5kCiAgICAgICMgc2VuZHRvIC0gc2VuZCBhIG1lc3NhZ2Ugb24gYSBzb2NrZXQKICAgICAgLSBzZW5kdG8KICAgICAgIyBzZW5kbXNnIC0gc2VuZCBhIG1lc3NhZ2Ugb24gYSBzb2NrZXQKICAgICAgLSBzZW5kbXNnCiAgICAgICMgc2VuZG1tc2cgLSBzZW5kIG11bHRpcGxlIG1lc3NhZ2VzIG9uIGEgc29ja2V0CiAgICAgIC0gc2VuZG1tc2cKICAgIGVjczoKICAgICAgPDw6ICplY3MtbmV0d29yawogIC0gYWN0aW9uOiBraWxsZWQtcGlkCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHByb2Nlc3MKICAgIHN5c2NhbGxzOgogICAgICAjIGtpbGwgLSBzZW5kIHNpZ25hbCB0byBhIHByb2Nlc3MKICAgICAgLSBraWxsCiAgICAgICMgdGtpbGwgLSBzZW5kIGEgc2lnbmFsIHRvIGEgdGhyZWFkCiAgICAgIC0gdGtpbGwKICAgICAgIyB0Z2tpbGwgLSBzZW5kIGEgc2lnbmFsIHRvIGEgdGhyZWFkCiAgICAgIC0gdGdraWxsCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogZW5kCiAgLSBhY3Rpb246IGNoYW5nZWQtaWRlbnRpdHktb2YKICAgIG9iamVjdDoKICAgICAgd2hhdDogcHJvY2VzcwogICAgaG93OiBzeXNjYWxsCiAgICBzeXNjYWxsczoKICAgICAgIyBzZXR1aWQgLSBzZXQgdXNlciBpZGVudGl0eQogICAgICAtIHNldHVpZAogICAgICAjIHNldGV1aWQgLSBzZXQgZWZmZWN0aXZlIHVzZXIgb3IgZ3JvdXAgSUQKICAgICAgLSBzZXRldWlkCiAgICAgICMgc2V0ZnN1aWQgLSBzZXQgdXNlciBpZGVudGl0eSB1c2VkIGZvciBmaWxlc3lzdGVtIGNoZWNrcwogICAgICAtIHNldGZzdWlkCiAgICAgICMgc2V0cmV1aWQgLSBzZXQgcmVhbCBhbmQvb3IgZWZmZWN0aXZlIHVzZXIgb3IgZ3JvdXAgSUQKICAgICAgLSBzZXRyZXVpZAogICAgICAjIHNldGdpZCAtIHNldCBncm91cCBpZGVudGl0eQogICAgICAtIHNldGdpZAogICAgICAjIHNldGVnaWQgLSBzZXQgZWZmZWN0aXZlIHVzZXIgb3IgZ3JvdXAgSUQKICAgICAgLSBzZXRlZ2lkCiAgICAgICMgc2V0ZnNnaWQgLSBzZXQgZ3JvdXAgaWRlbnRpdHkgdXNlZCBmb3IgZmlsZXN5c3RlbSBjaGVja3MKICAgICAgLSBzZXRmc2dpZAogICAgICAjIHNldHJlZ2lkIC0gc2V0IHJlYWwgYW5kL29yIGVmZmVjdGl2ZSB1c2VyIG9yIGdyb3VwIElECiAgICAgIC0gc2V0cmVnaWQKICAgICAgIyBzZXRyZXN1aWQgLSBzZXQgcmVhbCwgZWZmZWN0aXZlIGFuZCBzYXZlZCB1c2VyIG9yIGdyb3VwIElECiAgICAgIC0gc2V0cmVzdWlkCiAgICAgICMgc2V0cmVzZ2lkIC0gc2V0IHJlYWwsIGVmZmVjdGl2ZSBhbmQgc2F2ZWQgdXNlciBvciBncm91cCBJRAogICAgICAtIHNldHJlc2dpZAogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IGNoYW5nZQogIC0gYWN0aW9uOiBjaGFuZ2VkLXN5c3RlbS10aW1lCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHN5c3RlbQogICAgc3lzY2FsbHM6CiAgICAgICMgc2V0dGltZW9mZGF5IC0gZ2V0IC8gc2V0IHRpbWUKICAgICAgLSBzZXR0aW1lb2ZkYXkKICAgICAgIyBjbG9ja19zZXR0aW1lIC0gY2xvY2sgYW5kIHRpbWUgZnVuY3Rpb25zCiAgICAgIC0gY2xvY2tfc2V0dGltZQogICAgICAjIHN0aW1lIC0gc2V0IHRpbWUKICAgICAgLSBzdGltZQogICAgICAjIGFkanRpbWV4IC0gdHVuZSBrZXJuZWwgY2xvY2sKICAgICAgLSBhZGp0aW1leAogICAgZWNzOgogICAgICA8PDogKmVjcy1ob3N0CiAgICAgIHR5cGU6IGNoYW5nZQogIC0gYWN0aW9uOiBtYWtlLWRldmljZQogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBta25vZCAtIGNyZWF0ZSBhIHNwZWNpYWwgb3Igb3JkaW5hcnkgZmlsZQogICAgICAtIG1rbm9kCiAgICAgICMgbWtub2RhdCAtIGNyZWF0ZSBhIHNwZWNpYWwgb3Igb3JkaW5hcnkgZmlsZQogICAgICAtIG1rbm9kYXQKICAgIGVjczoKICAgICAgPDw6ICplY3MtZmlsZQogICAgICB0eXBlOiBjcmVhdGlvbgogIC0gYWN0aW9uOiBjaGFuZ2VkLXN5c3RlbS1uYW1lCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHN5c3RlbQogICAgc3lzY2FsbHM6CiAgICAgICMgc2V0aG9zdG5hbWUgLSBnZXQvc2V0IGhvc3RuYW1lCiAgICAgIC0gc2V0aG9zdG5hbWUKICAgICAgIyBzZXRkb21haW5uYW1lIC0gZ2V0L3NldCBOSVMgZG9tYWluIG5hbWUKICAgICAgLSBzZXRkb21haW5uYW1lCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWhvc3QKICAgICAgdHlwZTogY2hhbmdlCiAgLSBhY3Rpb246IGFsbG9jYXRlZC1tZW1vcnkKICAgIG9iamVjdDoKICAgICAgd2hhdDogbWVtb3J5CiAgICBzeXNjYWxsczoKICAgICAgIyBtbWFwIC0gbWFwIG9yIHVubWFwIGZpbGVzIG9yIGRldmljZXMgaW50byBtZW1vcnkKICAgICAgLSBtbWFwCiAgICAgICMgbW1hcDIgLSBtYXAgZmlsZXMgb3IgZGV2aWNlcyBpbnRvIG1lbW9yeQogICAgICAtIG1tYXAyCiAgICAgICMgYnJrIC0gY2hhbmdlIGRhdGEgc2VnbWVudCBzaXplCiAgICAgIC0gYnJrCiAgICBlY3M6ICplY3MtcHJvY2VzcwogIC0gYWN0aW9uOiBhZGp1c3RlZC1zY2hlZHVsaW5nLXBvbGljeS1vZgogICAgb2JqZWN0OgogICAgICB3aGF0OiBwcm9jZXNzCiAgICBob3c6IHN5c2NhbGwKICAgIHN5c2NhbGxzOgogICAgICAjIHNjaGVkX3NldHBhcmFtIC0gc2V0IGFuZCBnZXQgc2NoZWR1bGluZyBwYXJhbWV0ZXJzCiAgICAgIC0gc2NoZWRfc2V0cGFyYW0KICAgICAgIyBzY2hlZF9zZXRzY2hlZHVsZXIgLSBzZXQgYW5kIGdldCBzY2hlZHVsaW5nIHBvbGljeS9wYXJhbWV0ZXJzCiAgICAgIC0gc2NoZWRfc2V0c2NoZWR1bGVyCiAgICAgICMgc2NoZWRfc2V0YXR0ciAtIHNldCBhbmQgZ2V0IHNjaGVkdWxpbmcgcG9saWN5IGFuZCBhdHRyaWJ1dGVzCiAgICAgIC0gc2NoZWRfc2V0YXR0cgogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IGNoYW5nZQoKICAjIEN1cnJlbnRseSB1bmhhbmRsZWQKICAjIHRoaXMgbGlzdCBjb21lcyBmcm9tIHBhcnNpbmcgbGludXggbWFuIHBhZ2VzIGF0IGh0dHBzOi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9kb2NzL21hbi1wYWdlcy9tYW4tcGFnZXMuZ2l0CgogICMgc2lnYWN0aW9uIC0gZXhhbWluZSBhbmQgY2hhbmdlIGEgc2lnbmFsIGFjdGlvbgogICMgcnRfc2lnYWN0aW9uIC0gZXhhbWluZSBhbmQgY2hhbmdlIGEgc2lnbmFsIGFjdGlvbgogICMgcHJlYWQgLSByZWFkIGZyb20gb3Igd3JpdGUgdG8gYSBmaWxlIGRlc2NyaXB0b3IgYXQgYSBnaXZlbiBvZmZzZXQKICAjIHB3cml0ZSAtIHJlYWQgZnJvbSBvciB3cml0ZSB0byBhIGZpbGUgZGVzY3JpcHRvciBhdCBhIGdpdmVuIG9mZnNldAogICMgczM5MF9ndWFyZGVkX3N0b3JhZ2UgLSBvcGVyYXRpb25zIHdpdGggei9BcmNoaXRlY3R1cmUgZ3VhcmRlZCBzdG9yYWdlIGZhY2lsaXR5CiAgIyBzY2hlZF9nZXRhdHRyIC0gc2V0IGFuZCBnZXQgc2NoZWR1bGluZyBwb2xpY3kgYW5kIGF0dHJpYnV0ZXMKICAjIGdldHJ1c2FnZSAtIGdldCByZXNvdXJjZSB1c2FnZQogICMgZmxvY2sgLSBhcHBseSBvciByZW1vdmUgYW4gYWR2aXNvcnkgbG9jayBvbiBhbiBvcGVuIGZpbGUKICAjIHBpZGZkX2dldGZkIC0gb2J0YWluIGEgZHVwbGljYXRlIG9mIGFub3RoZXIgcHJvY2VzcydzIGZpbGUgZGVzY3JpcHRvcgogICMgY2xvY2tfbmFub3NsZWVwIC0gaGlnaC1yZXNvbHV0aW9uIHNsZWVwIHdpdGggc3BlY2lmaWFibGUgY2xvY2sKICAjIGdldHBhZ2VzaXplIC0gZ2V0IG1lbW9yeSBwYWdlIHNpemUKICAjIHBpZGZkX29wZW4gLSBvYnRhaW4gYSBmaWxlIGRlc2NyaXB0b3IgdGhhdCByZWZlcnMgdG8gYSBwcm9jZXNzCiAgIyBzcGxpY2UgLSBzcGxpY2UgZGF0YSB0by9mcm9tIGEgcGlwZQogICMgZ2V0cmVzdWlkIC0gZ2V0IHJlYWwsIGVmZmVjdGl2ZSBhbmQgc2F2ZWQgdXNlci9ncm91cCBJRHMKICAjIGdldHJlc2dpZCAtIGdldCByZWFsLCBlZmZlY3RpdmUgYW5kIHNhdmVkIHVzZXIvZ3JvdXAgSURzCiAgIyByZW1hcF9maWxlX3BhZ2VzIC0gY3JlYXRlIGEgbm9ubGluZWFyIGZpbGUgbWFwcGluZwogICMgaW9fY2FuY2VsIC0gY2FuY2VsIGFuIG91dHN0YW5kaW5nIGFzeW5jaHJvbm91cyBJL08gb3BlcmF0aW9uCiAgIyBwcmN0bCAtIG9wZXJhdGlvbnMgb24gYSBwcm9jZXNzIG9yIHRocmVhZAogICMgY2xvY2tfZ2V0cmVzIC0gY2xvY2sgYW5kIHRpbWUgZnVuY3Rpb25zCiAgIyBjbG9ja19nZXR0aW1lIC0gY2xvY2sgYW5kIHRpbWUgZnVuY3Rpb25zCiAgIyBnZXRncm91cHMgLSBnZXQvc2V0IGxpc3Qgb2Ygc3VwcGxlbWVudGFyeSBncm91cCBJRHMKICAjIHNldGdyb3VwcyAtIGdldC9zZXQgbGlzdCBvZiBzdXBwbGVtZW50YXJ5IGdyb3VwIElEcwogICMgdm1zcGxpY2UgLSBzcGxpY2UgdXNlciBwYWdlcyB0by9mcm9tIGEgcGlwZQogICMgZXBvbGxfY3JlYXRlIC0gb3BlbiBhbiBlcG9sbCBmaWxlIGRlc2NyaXB0b3IKICAjIGVwb2xsX2NyZWF0ZTEgLSBvcGVuIGFuIGVwb2xsIGZpbGUgZGVzY3JpcHRvcgogICMgcG9zaXhfZmFkdmlzZSAtIHByZWRlY2xhcmUgYW4gYWNjZXNzIHBhdHRlcm4gZm9yIGZpbGUgZGF0YQogICMgc2lnd2FpdGluZm8gLSBzeW5jaHJvbm91c2x5IHdhaXQgZm9yIHF1ZXVlZCBzaWduYWxzCiAgIyBzaWd0aW1lZHdhaXQgLSBzeW5jaHJvbm91c2x5IHdhaXQgZm9yIHF1ZXVlZCBzaWduYWxzCiAgIyBydF9zaWd0aW1lZHdhaXQgLSBzeW5jaHJvbm91c2x5IHdhaXQgZm9yIHF1ZXVlZCBzaWduYWxzCiAgIyBzaWdyZXR1cm4gLSByZXR1cm4gZnJvbSBzaWduYWwgaGFuZGxlciBhbmQgY2xlYW51cCBzdGFjayBmcmFtZQogICMgcnRfc2lncmV0dXJuIC0gcmV0dXJuIGZyb20gc2lnbmFsIGhhbmRsZXIgYW5kIGNsZWFudXAgc3RhY2sgZnJhbWUKICAjIGdldHJhbmRvbSAtIG9idGFpbiBhIHNlcmllcyBvZiByYW5kb20gYnl0ZXMKICAjIGtleWN0bCAtIG1hbmlwdWxhdGUgdGhlIGtlcm5lbCdzIGtleSBtYW5hZ2VtZW50IGZhY2lsaXR5CiAgIyBzY2hlZF9nZXRzY2hlZHVsZXIgLSBzZXQgYW5kIGdldCBzY2hlZHVsaW5nIHBvbGljeS9wYXJhbWV0ZXJzCiAgIyBtYmluZCAtIHNldCBtZW1vcnkgcG9saWN5IGZvciBhIG1lbW9yeSByYW5nZQogICMgZ2V0cHJpb3JpdHkgLSBnZXQvc2V0IHByb2dyYW0gc2NoZWR1bGluZyBwcmlvcml0eQogICMgc2V0cHJpb3JpdHkgLSBnZXQvc2V0IHByb2dyYW0gc2NoZWR1bGluZyBwcmlvcml0eQogICMgaW5vdGlmeV9pbml0IC0gaW5pdGlhbGl6ZSBhbiBpbm90aWZ5IGluc3RhbmNlCiAgIyBpbm90aWZ5X2luaXQxIC0gaW5pdGlhbGl6ZSBhbiBpbm90aWZ5IGluc3RhbmNlCiAgIyBzZW1jdGwgLSBTeXN0ZW0gViBzZW1hcGhvcmUgY29udHJvbCBvcGVyYXRpb25zCiAgIyBnZXRob3N0bmFtZSAtIGdldC9zZXQgaG9zdG5hbWUKICAjIHB0cmFjZSAtIHByb2Nlc3MgdHJhY2UKICAjIHN5c2N0bCAtIHJlYWQvd3JpdGUgc3lzdGVtIHBhcmFtZXRlcnMKICAjIGdldHBlZXJuYW1lIC0gZ2V0IG5hbWUgb2YgY29ubmVjdGVkIHBlZXIgc29ja2V0CiAgIyBmb3JrIC0gY3JlYXRlIGEgY2hpbGQgcHJvY2VzcwogICMgcXVlcnlfbW9kdWxlIC0gcXVlcnkgdGhlIGtlcm5lbCBmb3IgdmFyaW91cyBiaXRzIHBlcnRhaW5pbmcgdG8gbW9kdWxlcwogICMgaW9jdGxfbGlzdCAtIGxpc3Qgb2YgaW9jdGwgY2FsbHMgaW4gTGludXgvaTM4NiBrZXJuZWwKICAjIG1zZ2dldCAtIGdldCBhIFN5c3RlbSBWIG1lc3NhZ2UgcXVldWUgaWRlbnRpZmllcgogICMgc3B1X2NyZWF0ZSAtIGNyZWF0ZSBhIG5ldyBzcHUgY29udGV4dAogICMgc3VicGFnZV9wcm90IC0gZGVmaW5lIGEgc3VicGFnZSBwcm90ZWN0aW9uIGZvciBhbiBhZGRyZXNzIHJhbmdlCiAgIyBxdW90YWN0bCAtIG1hbmlwdWxhdGUgZGlzayBxdW90YXMKICAjIG5mc3NlcnZjdGwgLSBzeXNjYWxsIGludGVyZmFjZSB0byBrZXJuZWwgbmZzIGRhZW1vbgogICMgb3BlbmF0MiAtIG9wZW4gYW5kIHBvc3NpYmx5IGNyZWF0ZSBhIGZpbGUgKGV4dGVuZGVkKQogICMgZ2V0cmxpbWl0IC0gZ2V0L3NldCByZXNvdXJjZSBsaW1pdHMKICAjIHNldHJsaW1pdCAtIGdldC9zZXQgcmVzb3VyY2UgbGltaXRzCiAgIyBwcmxpbWl0IC0gZ2V0L3NldCByZXNvdXJjZSBsaW1pdHMKICAjIHRlZSAtIGR1cGxpY2F0aW5nIHBpcGUgY29udGVudAogICMgc2htZ2V0IC0gYWxsb2NhdGVzIGEgU3lzdGVtIFYgc2hhcmVkIG1lbW9yeSBzZWdtZW50CiAgIyBjcmVhdGVfbW9kdWxlIC0gY3JlYXRlIGEgbG9hZGFibGUgbW9kdWxlIGVudHJ5CiAgIyBnZXR0aW1lb2ZkYXkgLSBnZXQgLyBzZXQgdGltZQogICMgdGltZXJfY3JlYXRlIC0gY3JlYXRlIGEgUE9TSVggcGVyLXByb2Nlc3MgdGltZXIKICAjIGZhbm90aWZ5X21hcmsgLSBhZGQsIHJlbW92ZSwgb3IgbW9kaWZ5IGFuIGZhbm90aWZ5IG1hcmsgb24gYSBmaWxlc3lzdGVtIG9iamVjdAogICMgcGlwZSAtIGNyZWF0ZSBwaXBlCiAgIyBwaXBlMiAtIGNyZWF0ZSBwaXBlCiAgIyBpbnRybyAtIGludHJvZHVjdGlvbiB0byBzeXN0ZW0gY2FsbHMKICAjIGxvb2t1cF9kY29va2llIC0gcmV0dXJuIGEgZGlyZWN0b3J5IGVudHJ5J3MgcGF0aAogICMgc3lzZnMgLSBnZXQgZmlsZXN5c3RlbSB0eXBlIGluZm9ybWF0aW9uCiAgIyBzMzkwX3J1bnRpbWVfaW5zdHIgLSBlbmFibGUvZGlzYWJsZSBzMzkwIENQVSBydW4tdGltZSBpbnN0cnVtZW50YXRpb24KICAjIHNldG5zIC0gcmVhc3NvY2lhdGUgdGhyZWFkIHdpdGggYSBuYW1lc3BhY2UKICAjIHNldF9tZW1wb2xpY3kgLSBzZXQgZGVmYXVsdCBOVU1BIG1lbW9yeSBwb2xpY3kgZm9yIGEgdGhyZWFkIGFuZCBpdHMgY2hpbGRyZW4KICAjIG5pY2UgLSBjaGFuZ2UgcHJvY2VzcyBwcmlvcml0eQogICMgaW9fc2V0dXAgLSBjcmVhdGUgYW4gYXN5bmNocm9ub3VzIEkvTyBjb250ZXh0CiAgIyBtaW5jb3JlIC0gZGV0ZXJtaW5lIHdoZXRoZXIgcGFnZXMgYXJlIHJlc2lkZW50IGluIG1lbW9yeQogICMgaW9jdGxfY29uc29sZSAtIGlvY3RscyBmb3IgY29uc29sZSB0ZXJtaW5hbCBhbmQgdmlydHVhbCBjb25zb2xlcwogICMgcG9sbCAtIHdhaXQgZm9yIHNvbWUgZXZlbnQgb24gYSBmaWxlIGRlc2NyaXB0b3IKICAjIHBwb2xsIC0gd2FpdCBmb3Igc29tZSBldmVudCBvbiBhIGZpbGUgZGVzY3JpcHRvcgogICMgY2FwZ2V0IC0gc2V0L2dldCBjYXBhYmlsaXRpZXMgb2YgdGhyZWFkKHMpCiAgIyBjYXBzZXQgLSBzZXQvZ2V0IGNhcGFiaWxpdGllcyBvZiB0aHJlYWQocykKICAjIGlvY3RsX3R0eSAtIGlvY3RscyBmb3IgdGVybWluYWxzIGFuZCBzZXJpYWwgbGluZXMKICAjIGlvcGwgLSBjaGFuZ2UgSS9PIHByaXZpbGVnZSBsZXZlbAogICMgaW9fZ2V0ZXZlbnRzIC0gcmVhZCBhc3luY2hyb25vdXMgSS9PIGV2ZW50cyBmcm9tIHRoZSBjb21wbGV0aW9uIHF1ZXVlCiAgIyBwcm9jZXNzX3ZtX3JlYWR2IC0gdHJhbnNmZXIgZGF0YSBiZXR3ZWVuIHByb2Nlc3MgYWRkcmVzcyBzcGFjZXMKICAjIHByb2Nlc3Nfdm1fd3JpdGV2IC0gdHJhbnNmZXIgZGF0YSBiZXR3ZWVuIHByb2Nlc3MgYWRkcmVzcyBzcGFjZXMKICAjIHBjaWNvbmZpZ19yZWFkIC0gcGNpIGRldmljZSBpbmZvcm1hdGlvbiBoYW5kbGluZwogICMgcGNpY29uZmlnX3dyaXRlIC0gcGNpIGRldmljZSBpbmZvcm1hdGlvbiBoYW5kbGluZwogICMgcGNpY29uZmlnX2lvYmFzZSAtIHBjaSBkZXZpY2UgaW5mb3JtYXRpb24gaGFuZGxpbmcKICAjIHNicmsgLSBjaGFuZ2UgZGF0YSBzZWdtZW50IHNpemUKICAjIHNldF90aWRfYWRkcmVzcyAtIHNldCBwb2ludGVyIHRvIHRocmVhZCBJRAogICMgcGtleV9hbGxvYyAtIGFsbG9jYXRlIG9yIGZyZWUgYSBwcm90ZWN0aW9uIGtleQogICMgcGtleV9mcmVlIC0gYWxsb2NhdGUgb3IgZnJlZSBhIHByb3RlY3Rpb24ga2V5CiAgIyBzZWxlY3QgLSBzeW5jaHJvbm91cyBJL08gbXVsdGlwbGV4aW5nCiAgIyBwc2VsZWN0IC0gc3luY2hyb25vdXMgSS9PIG11bHRpcGxleGluZwogICMga2V4ZWNfbG9hZCAtIGxvYWQgYSBuZXcga2VybmVsIGZvciBsYXRlciBleGVjdXRpb24KICAjIGtleGVjX2ZpbGVfbG9hZCAtIGxvYWQgYSBuZXcga2VybmVsIGZvciBsYXRlciBleGVjdXRpb24KICAjIHBlcnNvbmFsaXR5IC0gc2V0IHRoZSBwcm9jZXNzIGV4ZWN1dGlvbiBkb21haW4KICAjIGlvY3RsX2dldGZzbWFwIC0gcmV0cmlldmUgdGhlIHBoeXNpY2FsIGxheW91dCBvZiB0aGUgZmlsZXN5c3RlbQogICMgaW5vdGlmeV9ybV93YXRjaCAtIHJlbW92ZSBhbiBleGlzdGluZyB3YXRjaCBmcm9tIGFuIGlub3RpZnkgaW5zdGFuY2UKICAjIHBlcmZfZXZlbnRfb3BlbiAtIHNldCB1cCBwZXJmb3JtYW5jZSBtb25pdG9yaW5nCiAgIyB0aW1lcl9nZXRvdmVycnVuIC0gZ2V0IG92ZXJydW4gY291bnQgZm9yIGEgUE9TSVggcGVyLXByb2Nlc3MgdGltZXIKICAjIHdhaXQzIC0gd2FpdCBmb3IgcHJvY2VzcyB0byBjaGFuZ2Ugc3RhdGUsIEJTRCBzdHlsZQogICMgd2FpdDQgLSB3YWl0IGZvciBwcm9jZXNzIHRvIGNoYW5nZSBzdGF0ZSwgQlNEIHN0eWxlCiAgIyBsaW5rIC0gbWFrZSBhIG5ldyBuYW1lIGZvciBhIGZpbGUKICAjIGxpbmthdCAtIG1ha2UgYSBuZXcgbmFtZSBmb3IgYSBmaWxlCiAgIyBzY2hlZF9ycl9nZXRfaW50ZXJ2YWwgLSBnZXQgdGhlIFNDSEVEX1JSIGludGVydmFsIGZvciB0aGUgbmFtZWQgcHJvY2VzcwogICMgbXVubWFwIC0gbWFwIG9yIHVubWFwIGZpbGVzIG9yIGRldmljZXMgaW50byBtZW1vcnkKICAjIHNvY2tldGNhbGwgLSBzb2NrZXQgc3lzdGVtIGNhbGxzCiAgIyBtcmVtYXAgLSByZW1hcCBhIHZpcnR1YWwgbWVtb3J5IGFkZHJlc3MKICAjIHZmb3JrIC0gY3JlYXRlIGEgY2hpbGQgcHJvY2VzcyBhbmQgYmxvY2sgcGFyZW50CiAgIyBzZWNjb21wIC0gb3BlcmF0ZSBvbiBTZWN1cmUgQ29tcHV0aW5nIHN0YXRlIG9mIHRoZSBwcm9jZXNzCiAgIyByZXF1ZXN0X2tleSAtIHJlcXVlc3QgYSBrZXkgZnJvbSB0aGUga2VybmVsJ3Mga2V5IG1hbmFnZW1lbnQgZmFjaWxpdHkKICAjIHN5c2NhbGwgLSBpbmRpcmVjdCBzeXN0ZW0gY2FsbAogICMga2NtcCAtIGNvbXBhcmUgdHdvIHByb2Nlc3NlcyB0byBkZXRlcm1pbmUgaWYgdGhleSBzaGFyZSBhIGtlcm5lbCByZXNvdXJjZQogICMgcmVhZGRpciAtIHJlYWQgZGlyZWN0b3J5IGVudHJ5CiAgIyBpb3Blcm0gLSBzZXQgcG9ydCBpbnB1dC9vdXRwdXQgcGVybWlzc2lvbnMKICAjIHNwdV9ydW4gLSBleGVjdXRlIGFuIFNQVSBjb250ZXh0CiAgIyByZWJvb3QgLSByZWJvb3Qgb3IgZW5hYmxlL2Rpc2FibGUgQ3RybC1BbHQtRGVsCiAgIyByZWFkYWhlYWQgLSBpbml0aWF0ZSBmaWxlIHJlYWRhaGVhZCBpbnRvIHBhZ2UgY2FjaGUKICAjIHNjaGVkX2dldHBhcmFtIC0gc2V0IGFuZCBnZXQgc2NoZWR1bGluZyBwYXJhbWV0ZXJzCiAgIyBhY2N0IC0gc3dpdGNoIHByb2Nlc3MgYWNjb3VudGluZyBvbiBvciBvZmYKICAjIHNpZ3N1c3BlbmQgLSB3YWl0IGZvciBhIHNpZ25hbAogICMgcnRfc2lnc3VzcGVuZCAtIHdhaXQgZm9yIGEgc2lnbmFsCiAgIyBleGl0X2dyb3VwIC0gZXhpdCBhbGwgdGhyZWFkcyBpbiBhIHByb2Nlc3MKICAjIHNvY2tldCAtIGNyZWF0ZSBhbiBlbmRwb2ludCBmb3IgY29tbXVuaWNhdGlvbgogICMgaW9jdGxfdXNlcmZhdWx0ZmQgLSBjcmVhdGUgYSBmaWxlIGRlc2NyaXB0b3IgZm9yIGhhbmRsaW5nIHBhZ2UgZmF1bHRzIGluIHVzZXIgc3BhY2UKICAjIHNjaGVkX2dldF9wcmlvcml0eV9tYXggLSBnZXQgc3RhdGljIHByaW9yaXR5IHJhbmdlCiAgIyBzY2hlZF9nZXRfcHJpb3JpdHlfbWluICAtIGdldCBzdGF0aWMgcHJpb3JpdHkgcmFuZ2UKICAjIGdldGRlbnRzIC0gZ2V0IGRpcmVjdG9yeSBlbnRyaWVzCiAgIyBnZXRkZW50czY0IC0gZ2V0IGRpcmVjdG9yeSBlbnRyaWVzCiAgIyBzZWxlY3QgLSBzeW5jaHJvbm91cyBJL08gbXVsdGlwbGV4aW5nCiAgIyBwc2VsZWN0IC0gc3luY2hyb25vdXMgSS9PIG11bHRpcGxleGluZwogICMgYWxsb2NfaHVnZXBhZ2VzIC0gYWxsb2NhdGUgb3IgZnJlZSBodWdlIHBhZ2VzCiAgIyBmcmVlX2h1Z2VwYWdlcyAtIGFsbG9jYXRlIG9yIGZyZWUgaHVnZSBwYWdlcwogICMgZnN5bmMgLSBzeW5jaHJvbml6ZSBhIGZpbGUncyBpbi1jb3JlIHN0YXRlIHdpdGggc3RvcmFnZSBkZXZpY2UKICAjIGZkYXRhc3luYyAtIHN5bmNocm9uaXplIGEgZmlsZSdzIGluLWNvcmUgc3RhdGUgd2l0aCBzdG9yYWdlIGRldmljZQogICMgc3lzY2FsbHMgLSBMaW51eCBzeXN0ZW0gY2FsbHMKICAjIG1lbWZkX2NyZWF0ZSAtIGNyZWF0ZSBhbiBhbm9ueW1vdXMgZmlsZQogICMgbW9kaWZ5X2xkdCAtIGdldCBvciBzZXQgYSBwZXItcHJvY2VzcyBMRFQgZW50cnkKICAjIGdldF9rZXJuZWxfc3ltcyAtIHJldHJpZXZlIGV4cG9ydGVkIGtlcm5lbCBhbmQgbW9kdWxlIHN5bWJvbHMKICAjIGxzZWVrIC0gcmVwb3NpdGlvbiByZWFkL3dyaXRlIGZpbGUgb2Zmc2V0CiAgIyBzaG1hdCAtIFN5c3RlbSBWIHNoYXJlZCBtZW1vcnkgb3BlcmF0aW9ucwogICMgc2htZHQgLSBTeXN0ZW0gViBzaGFyZWQgbWVtb3J5IG9wZXJhdGlvbnMKICAjIHRpbWVyX2RlbGV0ZSAtIGRlbGV0ZSBhIFBPU0lYIHBlci1wcm9jZXNzIHRpbWVyCiAgIyBwZXJmbW9uY3RsIC0gaW50ZXJmYWNlIHRvIElBLTY0IHBlcmZvcm1hbmNlIG1vbml0b3JpbmcgdW5pdAogICMgbW92ZV9wYWdlcyAtIG1vdmUgaW5kaXZpZHVhbCBwYWdlcyBvZiBhIHByb2Nlc3MgdG8gYW5vdGhlciBub2RlCiAgIyBjaGRpciAtIGNoYW5nZSB3b3JraW5nIGRpcmVjdG9yeQogICMgZmNoZGlyIC0gY2hhbmdlIHdvcmtpbmcgZGlyZWN0b3J5CiAgIyB0aW1lIC0gZ2V0IHRpbWUgaW4gc2Vjb25kcwogICMgX2V4aXQgLSB0ZXJtaW5hdGUgdGhlIGNhbGxpbmcgcHJvY2VzcwogICMgX0V4aXQgLSB0ZXJtaW5hdGUgdGhlIGNhbGxpbmcgcHJvY2VzcwogICMgczM5MF9zdGh5aSAtIGVtdWxhdGUgU1RIWUkgaW5zdHJ1Y3Rpb24KICAjIGlvX3N1Ym1pdCAtIHN1Ym1pdCBhc3luY2hyb25vdXMgSS9PIGJsb2NrcyBmb3IgcHJvY2Vzc2luZwogICMgbWxvY2sgLSBsb2NrIGFuZCB1bmxvY2sgbWVtb3J5CiAgIyBtbG9jazIgLSBsb2NrIGFuZCB1bmxvY2sgbWVtb3J5CiAgIyBtdW5sb2NrIC0gbG9jayBhbmQgdW5sb2NrIG1lbW9yeQogICMgbWxvY2thbGwgLSBsb2NrIGFuZCB1bmxvY2sgbWVtb3J5CiAgIyBtdW5sb2NrYWxsIC0gbG9jayBhbmQgdW5sb2NrIG1lbW9yeQogICMgdW1hc2sgLSBzZXQgZmlsZSBtb2RlIGNyZWF0aW9uIG1hc2sKICAjIGFyY2hfcHJjdGwgLSBzZXQgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHRocmVhZCBzdGF0ZQogICMgdXNlbGliIC0gbG9hZCBzaGFyZWQgbGlicmFyeQogICMgc2VuZGZpbGUgLSB0cmFuc2ZlciBkYXRhIGJldHdlZW4gZmlsZSBkZXNjcmlwdG9ycwogICMgc2htY3RsIC0gU3lzdGVtIFYgc2hhcmVkIG1lbW9yeSBjb250cm9sCiAgIyBlcG9sbF93YWl0IC0gd2FpdCBmb3IgYW4gSS9PIGV2ZW50IG9uIGFuIGVwb2xsIGZpbGUgZGVzY3JpcHRvcgogICMgZXBvbGxfcHdhaXQgLSB3YWl0IGZvciBhbiBJL08gZXZlbnQgb24gYW4gZXBvbGwgZmlsZSBkZXNjcmlwdG9yCiAgIyBzaWdhbHRzdGFjayAtIHNldCBhbmQvb3IgZ2V0IHNpZ25hbCBzdGFjayBjb250ZXh0CiAgIyBpb2N0bCAtIGNvbnRyb2wgZGV2aWNlCiAgIyBzaWduYWxmZCAtIGNyZWF0ZSBhIGZpbGUgZGVzY3JpcHRvciBmb3IgYWNjZXB0aW5nIHNpZ25hbHMKICAjIHVuc2hhcmUgLSBkaXNhc3NvY2lhdGUgcGFydHMgb2YgdGhlIHByb2Nlc3MgZXhlY3V0aW9uIGNvbnRleHQKICAjIGNocm9vdCAtIGNoYW5nZSByb290IGRpcmVjdG9yeQogICMgbWFkdmlzZSAtIGdpdmUgYWR2aWNlIGFib3V0IHVzZSBvZiBtZW1vcnkKICAjIGdldHRpZCAtIGdldCB0aHJlYWQgaWRlbnRpZmljYXRpb24KICAjIGdldHNvY2tuYW1lIC0gZ2V0IHNvY2tldCBuYW1lCiAgIyBpb19kZXN0cm95IC0gZGVzdHJveSBhbiBhc3luY2hyb25vdXMgSS9PIGNvbnRleHQKICAjIHNldHVwIC0gc2V0dXAgZGV2aWNlcyBhbmQgZmlsZXN5c3RlbXMsIG1vdW50IHJvb3QgZmlsZXN5c3RlbQogICMgbnRwX2FkanRpbWUgLSB0dW5lIGtlcm5lbCBjbG9jawogICMgc2VtZ2V0IC0gZ2V0IGEgU3lzdGVtIFYgc2VtYXBob3JlIHNldCBpZGVudGlmaWVyCiAgIyBnZXR1aWQgLSBnZXQgdXNlciBpZGVudGl0eQogICMgZ2V0ZXVpZCAtIGdldCB1c2VyIGlkZW50aXR5CiAgIyBfc3lzY2FsbCAtIGludm9raW5nIGEgc3lzdGVtIGNhbGwgd2l0aG91dCBsaWJyYXJ5IHN1cHBvcnQgKE9CU09MRVRFKQogICMgc2NoZWRfc2V0YWZmaW5pdHkgLSBcIHNldCBhbmQgZ2V0IGEgdGhyZWFkJ3MgQ1BVIGFmZmluaXR5IG1hc2sKICAjIHNjaGVkX2dldGFmZmluaXR5IC0gXCBzZXQgYW5kIGdldCBhIHRocmVhZCdzIENQVSBhZmZpbml0eSBtYXNrCiAgIyBjYWNoZWZsdXNoIC0gZmx1c2ggY29udGVudHMgb2YgaW5zdHJ1Y3Rpb24gYW5kL29yIGRhdGEgY2FjaGUKICAjIHBpdm90X3Jvb3QgLSBjaGFuZ2UgdGhlIHJvb3QgbW91bnQKICAjIG1zZ2N0bCAtIFN5c3RlbSBWIG1lc3NhZ2UgY29udHJvbCBvcGVyYXRpb25zCiAgIyBpb2N0bF9mYXQgLSBtYW5pcHVsYXRpbmcgdGhlIEZBVCBmaWxlc3lzdGVtCiAgIyBzZXRwZ2lkIC0gc2V0L2dldCBwcm9jZXNzIGdyb3VwCiAgIyBnZXRwZ2lkIC0gc2V0L2dldCBwcm9jZXNzIGdyb3VwCiAgIyBzZXRwZ3JwIC0gc2V0L2dldCBwcm9jZXNzIGdyb3VwCiAgIyBnZXRwZ3JwIC0gc2V0L2dldCBwcm9jZXNzIGdyb3VwCiAgIyBzb2NrZXRwYWlyIC0gY3JlYXRlIGEgcGFpciBvZiBjb25uZWN0ZWQgc29ja2V0cwogICMgYmRmbHVzaCAtIHN0YXJ0LCBmbHVzaCwgb3IgdHVuZSBidWZmZXItZGlydHktZmx1c2ggZGFlbW9uCiAgIyBhbGFybSAtIHNldCBhbiBhbGFybSBjbG9jayBmb3IgZGVsaXZlcnkgb2YgYSBzaWduYWwKICAjIHRpbWVyX3NldHRpbWUgLSBhcm0vZGlzYXJtIGFuZCBmZXRjaCBzdGF0ZSBvZiBQT1NJWCBwZXItcHJvY2VzcyB0aW1lcgogICMgdGltZXJfZ2V0dGltZSAtIGFybS9kaXNhcm0gYW5kIGZldGNoIHN0YXRlIG9mIFBPU0lYIHBlci1wcm9jZXNzIHRpbWVyCiAgIyBhZGRfa2V5IC0gYWRkIGEga2V5IHRvIHRoZSBrZXJuZWwncyBrZXkgbWFuYWdlbWVudCBmYWNpbGl0eQogICMgcnRfc2lncXVldWVpbmZvIC0gcXVldWUgYSBzaWduYWwgYW5kIGRhdGEKICAjIHJ0X3Rnc2lncXVldWVpbmZvIC0gcXVldWUgYSBzaWduYWwgYW5kIGRhdGEKICAjIHVzZXJmYXVsdGZkIC0gY3JlYXRlIGEgZmlsZSBkZXNjcmlwdG9yIGZvciBoYW5kbGluZyBwYWdlIGZhdWx0cyBpbiB1c2VyIHNwYWNlCiAgIyBzZW1vcCAtIFN5c3RlbSBWIHNlbWFwaG9yZSBvcGVyYXRpb25zCiAgIyBzZW10aW1lZG9wIC0gU3lzdGVtIFYgc2VtYXBob3JlIG9wZXJhdGlvbnMKICAjIGdldGdpZCAtIGdldCBncm91cCBpZGVudGl0eQogICMgZ2V0ZWdpZCAtIGdldCBncm91cCBpZGVudGl0eQogICMgZ2V0cGlkIC0gZ2V0IHByb2Nlc3MgaWRlbnRpZmljYXRpb24KICAjIGdldHBwaWQgLSBnZXQgcHJvY2VzcyBpZGVudGlmaWNhdGlvbgogICMgc2lncHJvY21hc2sgLSBleGFtaW5lIGFuZCBjaGFuZ2UgYmxvY2tlZCBzaWduYWxzCiAgIyBydF9zaWdwcm9jbWFzayAtIGV4YW1pbmUgYW5kIGNoYW5nZSBibG9ja2VkIHNpZ25hbHMKICAjIHVuYW1lIC0gZ2V0IG5hbWUgYW5kIGluZm9ybWF0aW9uIGFib3V0IGN1cnJlbnQga2VybmVsCiAgIyBzdGF0eCAtIGdldCBmaWxlIHN0YXR1cyAoZXh0ZW5kZWQpCiAgIyBpb2N0bF9maWNsb25lcmFuZ2UgLSBzaGFyZSBzb21lIHRoZSBkYXRhIG9mIG9uZSBmaWxlIHdpdGggYW5vdGhlciBmaWxlCiAgIyBpb2N0bF9maWNsb25lIC0gc2hhcmUgc29tZSB0aGUgZGF0YSBvZiBvbmUgZmlsZSB3aXRoIGFub3RoZXIgZmlsZQogICMgbXFfZ2V0c2V0YXR0ciAtIGdldC9zZXQgbWVzc2FnZSBxdWV1ZSBhdHRyaWJ1dGVzCiAgIyBpb3ByaW9fZ2V0IC0gZ2V0L3NldCBJL08gc2NoZWR1bGluZyBjbGFzcyBhbmQgcHJpb3JpdHkKICAjIGlvcHJpb19zZXQgLSBnZXQvc2V0IEkvTyBzY2hlZHVsaW5nIGNsYXNzIGFuZCBwcmlvcml0eQogICMgZXBvbGxfY3RsIC0gY29udHJvbCBpbnRlcmZhY2UgZm9yIGFuIGVwb2xsIGZpbGUgZGVzY3JpcHRvcgogICMgc3luYyAtIGNvbW1pdCBmaWxlc3lzdGVtIGNhY2hlcyB0byBkaXNrCiAgIyBzeW5jZnMgLSBjb21taXQgZmlsZXN5c3RlbSBjYWNoZXMgdG8gZGlzawogICMgc2V0c2lkIC0gY3JlYXRlcyBhIHNlc3Npb24gYW5kIHNldHMgdGhlIHByb2Nlc3MgZ3JvdXAgSUQKICAjIHNodXRkb3duIC0gc2h1dCBkb3duIHBhcnQgb2YgYSBmdWxsLWR1cGxleCBjb25uZWN0aW9uCiAgIyBnZXRzaWQgLSBnZXQgc2Vzc2lvbiBJRAogICMgZ2V0X3RocmVhZF9hcmVhIC0gbWFuaXB1bGF0ZSB0aHJlYWQtbG9jYWwgc3RvcmFnZSBpbmZvcm1hdGlvbgogICMgc2V0X3RocmVhZF9hcmVhIC0gbWFuaXB1bGF0ZSB0aHJlYWQtbG9jYWwgc3RvcmFnZSBpbmZvcm1hdGlvbgogICMgdGltZXJmZF9jcmVhdGUgLSB0aW1lcnMgdGhhdCBub3RpZnkgdmlhIGZpbGUgZGVzY3JpcHRvcnMKICAjIHRpbWVyZmRfc2V0dGltZSAtIHRpbWVycyB0aGF0IG5vdGlmeSB2aWEgZmlsZSBkZXNjcmlwdG9ycwogICMgdGltZXJmZF9nZXR0aW1lIC0gdGltZXJzIHRoYXQgbm90aWZ5IHZpYSBmaWxlIGRlc2NyaXB0b3JzCiAgIyBpb2N0bF9maWRlZHVwZXJhbmdlIC0gc2hhcmUgc29tZSB0aGUgZGF0YSBvZiBvbmUgZmlsZSB3aXRoIGFub3RoZXIgZmlsZQogICMgbmFtZV90b19oYW5kbGVfYXQgLSBvYnRhaW4gaGFuZGxlIGZvciBhIHBhdGhuYW1lIGFuZCBvcGVuIGZpbGUgdmlhIGEgaGFuZGxlCiAgIyBvcGVuX2J5X2hhbmRsZV9hdCAtIG9idGFpbiBoYW5kbGUgZm9yIGEgcGF0aG5hbWUgYW5kIG9wZW4gZmlsZSB2aWEgYSBoYW5kbGUKICAjIGZ1dGV4IC0gZmFzdCB1c2VyLXNwYWNlIGxvY2tpbmcKICAjIGlvY3RsX25zIC0gaW9jdGwoKSBvcGVyYXRpb25zIGZvciBMaW51eCBuYW1lc3BhY2VzCiAgIyBwaWRmZF9zZW5kX3NpZ25hbCAtIHNlbmQgYSBzaWduYWwgdG8gYSBwcm9jZXNzIHNwZWNpZmllZCBieSBhIGZpbGUgZGVzY3JpcHRvcgogICMgY2xvbmUgLSBjcmVhdGUgYSBjaGlsZCBwcm9jZXNzCiAgIyBfX2Nsb25lMiAtIGNyZWF0ZSBhIGNoaWxkIHByb2Nlc3MKICAjIGNsb25lMyAtIGNyZWF0ZSBhIGNoaWxkIHByb2Nlc3MKICAjIHRpbWVzIC0gZ2V0IHByb2Nlc3MgdGltZXMKICAjIHN5c2luZm8gLSByZXR1cm4gc3lzdGVtIGluZm9ybWF0aW9uCiAgIyBpcGMgLSBTeXN0ZW0gViBJUEMgc3lzdGVtIGNhbGxzCiAgIyBldmVudGZkIC0gY3JlYXRlIGEgZmlsZSBkZXNjcmlwdG9yIGZvciBldmVudCBub3RpZmljYXRpb24KICAjIHdhaXQgLSB3YWl0IGZvciBwcm9jZXNzIHRvIGNoYW5nZSBzdGF0ZQogICMgd2FpdHBpZCAtIHdhaXQgZm9yIHByb2Nlc3MgdG8gY2hhbmdlIHN0YXRlCiAgIyB3YWl0aWQgLSB3YWl0IGZvciBwcm9jZXNzIHRvIGNoYW5nZSBzdGF0ZQogICMgZ2V0ZG9tYWlubmFtZSAtIGdldC9zZXQgTklTIGRvbWFpbiBuYW1lCiAgIyBpZGxlIC0gbWFrZSBwcm9jZXNzIDAgaWRsZQogICMgaW5vdGlmeV9hZGRfd2F0Y2ggLSBhZGQgYSB3YXRjaCB0byBhbiBpbml0aWFsaXplZCBpbm90aWZ5IGluc3RhbmNlCiAgIyBnZXRfbWVtcG9saWN5IC0gcmV0cmlldmUgTlVNQSBtZW1vcnkgcG9saWN5IGZvciBhIHRocmVhZAogICMgYnBmIC0gcGVyZm9ybSBhIGNvbW1hbmQgb24gYW4gZXh0ZW5kZWQgQlBGIG1hcCBvciBwcm9ncmFtCiAgIyBnZXRzb2Nrb3B0IC0gZ2V0IGFuZCBzZXQgb3B0aW9ucyBvbiBzb2NrZXRzCiAgIyBzZXRzb2Nrb3B0IC0gZ2V0IGFuZCBzZXQgb3B0aW9ucyBvbiBzb2NrZXRzCiAgIyBnZXRpdGltZXIgLSBnZXQgb3Igc2V0IHZhbHVlIG9mIGFuIGludGVydmFsIHRpbWVyCiAgIyBzZXRpdGltZXIgLSBnZXQgb3Igc2V0IHZhbHVlIG9mIGFuIGludGVydmFsIHRpbWVyCiAgIyBtZW1iYXJyaWVyIC0gaXNzdWUgbWVtb3J5IGJhcnJpZXJzIG9uIGEgc2V0IG9mIHRocmVhZHMKICAjIG1wcm90ZWN0IC0gc2V0IHByb3RlY3Rpb24gb24gYSByZWdpb24gb2YgbWVtb3J5CiAgIyBwa2V5X21wcm90ZWN0IC0gc2V0IHByb3RlY3Rpb24gb24gYSByZWdpb24gb2YgbWVtb3J5CiAgIyBnZXRjcHUgLSBkZXRlcm1pbmUgQ1BVIGFuZCBOVU1BIG5vZGUgb24gd2hpY2ggdGhlIGNhbGxpbmcgdGhyZWFkIGlzIHJ1bm5pbmcKICAjIGlvY3RsX2ZzbGFiZWwgLSBnZXQgb3Igc2V0IGEgZmlsZXN5c3RlbSBsYWJlbAogICMgbGlzdHhhdHRyIC0gbGlzdCBleHRlbmRlZCBhdHRyaWJ1dGUgbmFtZXMKICAjIGxsaXN0eGF0dHIgLSBsaXN0IGV4dGVuZGVkIGF0dHJpYnV0ZSBuYW1lcwogICMgZmxpc3R4YXR0ciAtIGxpc3QgZXh0ZW5kZWQgYXR0cmlidXRlIG5hbWVzCiAgIyBfbGxzZWVrIC0gcmVwb3NpdGlvbiByZWFkL3dyaXRlIGZpbGUgb2Zmc2V0CiAgIyBmY250bCAtIG1hbmlwdWxhdGUgZmlsZSBkZXNjcmlwdG9yCiAgIyB1c3RhdCAtIGdldCBmaWxlc3lzdGVtIHN0YXRpc3RpY3MKICAjIHNpZ25hbCAtIEFOU0kgQyBzaWduYWwgaGFuZGxpbmcKICAjIG5hbm9zbGVlcCAtIGhpZ2gtcmVzb2x1dGlvbiBzbGVlcAogICMgY29ubmVjdCAtIGluaXRpYXRlIGEgY29ubmVjdGlvbiBvbiBhIHNvY2tldAogICMgdm04Nm9sZCAtIGVudGVyIHZpcnR1YWwgODA4NiBtb2RlCiAgIyB2bTg2IC0gZW50ZXIgdmlydHVhbCA4MDg2IG1vZGUKICAjIGZhbm90aWZ5X2luaXQgLSBjcmVhdGUgYW5kIGluaXRpYWxpemUgZmFub3RpZnkgZ3JvdXAKICAjIG1pZ3JhdGVfcGFnZXMgLSBtb3ZlIGFsbCBwYWdlcyBpbiBhIHByb2Nlc3MgdG8gYW5vdGhlciBzZXQgb2Ygbm9kZXMKICAjIHJlc3RhcnRfc3lzY2FsbCAtIHJlc3RhcnQgYSBzeXN0ZW0gY2FsbCBhZnRlciBpbnRlcnJ1cHRpb24gYnkgYSBzdG9wIHNpZ25hbAogICMgY2xvc2UgLSBjbG9zZSBhIGZpbGUgZGVzY3JpcHRvcgogICMgbXNncmN2IC0gU3lzdGVtIFYgbWVzc2FnZSBxdWV1ZSBvcGVyYXRpb25zCiAgIyBtc2dzbmQgLSBTeXN0ZW0gViBtZXNzYWdlIHF1ZXVlIG9wZXJhdGlvbnMKICAjIHJlYWR2IC0gcmVhZCBvciB3cml0ZSBkYXRhIGludG8gbXVsdGlwbGUgYnVmZmVycwogICMgd3JpdGV2IC0gcmVhZCBvciB3cml0ZSBkYXRhIGludG8gbXVsdGlwbGUgYnVmZmVycwogICMgcHJlYWR2IC0gcmVhZCBvciB3cml0ZSBkYXRhIGludG8gbXVsdGlwbGUgYnVmZmVycwogICMgcHdyaXRldiAtIHJlYWQgb3Igd3JpdGUgZGF0YSBpbnRvIG11bHRpcGxlIGJ1ZmZlcnMKICAjIHByZWFkdjIgLSByZWFkIG9yIHdyaXRlIGRhdGEgaW50byBtdWx0aXBsZSBidWZmZXJzCiAgIyBwd3JpdGV2MiAtIHJlYWQgb3Igd3JpdGUgZGF0YSBpbnRvIG11bHRpcGxlIGJ1ZmZlcnMKICAjIHN5c2xvZyAtIHJlYWQgYW5kL29yIGNsZWFyIGtlcm5lbCBtZXNzYWdlIHJpbmcgYnVmZmVyOyBzZXQgY29uc29sZV9sb2dsZXZlbAogICMga2xvZ2N0bCAtIHJlYWQgYW5kL29yIGNsZWFyIGtlcm5lbCBtZXNzYWdlIHJpbmcgYnVmZmVyOyBzZXQgY29uc29sZV9sb2dsZXZlbAogICMgc2NoZWRfeWllbGQgLSB5aWVsZCB0aGUgcHJvY2Vzc29yCiAgIyB2aGFuZ3VwIC0gdmlydHVhbGx5IGhhbmd1cCB0aGUgY3VycmVudCB0ZXJtaW5hbAogICMgaW9jdGxfaWZsYWdzIC0gaW9jdGwoKSBvcGVyYXRpb25zIGZvciBpbm9kZSBmbGFncwogICMgc2dldG1hc2sgLSBtYW5pcHVsYXRpb24gb2Ygc2lnbmFsIG1hc2sgKG9ic29sZXRlKQogICMgc3NldG1hc2sgLSBtYW5pcHVsYXRpb24gb2Ygc2lnbmFsIG1hc2sgKG9ic29sZXRlKQogICMgc3luY19maWxlX3JhbmdlIC0gc3luYyBhIGZpbGUgc2VnbWVudCB3aXRoIGRpc2sKICAjIGNvcHlfZmlsZV9yYW5nZSAtIENvcHkgYSByYW5nZSBvZiBkYXRhIGZyb20gb25lIGZpbGUgdG8gYW5vdGhlcgogICMgc2lncGVuZGluZyAtIGV4YW1pbmUgcGVuZGluZyBzaWduYWxzCiAgIyBydF9zaWdwZW5kaW5nIC0gZXhhbWluZSBwZW5kaW5nIHNpZ25hbHMKICAjIGdldHVud2luZCAtIGNvcHkgdGhlIHVud2luZCBkYXRhIHRvIGNhbGxlcidzIGJ1ZmZlcgogICMgbXN5bmMgLSBzeW5jaHJvbml6ZSBhIGZpbGUgd2l0aCBhIG1lbW9yeSBtYXAKICAjIGdldF9yb2J1c3RfbGlzdCAtIGdldC9zZXQgbGlzdCBvZiByb2J1c3QgZnV0ZXhlcwogICMgc2V0X3JvYnVzdF9saXN0IC0gZ2V0L3NldCBsaXN0IG9mIHJvYnVzdCBmdXRleGVzCiAgIyBkdXAgLSBkdXBsaWNhdGUgYSBmaWxlIGRlc2NyaXB0b3IKICAjIGR1cDIgLSBkdXBsaWNhdGUgYSBmaWxlIGRlc2NyaXB0b3IKICAjIGR1cDMgLSBkdXBsaWNhdGUgYSBmaWxlIGRlc2NyaXB0b3IKICAjIHMzOTBfcGNpX21taW9fd3JpdGUgLSB0cmFuc2ZlciBkYXRhIHRvL2Zyb20gUENJIE1NSU8gbWVtb3J5IHBhZ2UKICAjIHMzOTBfcGNpX21taW9fcmVhZCAtIHRyYW5zZmVyIGRhdGEgdG8vZnJvbSBQQ0kgTU1JTyBtZW1vcnkgcGFnZQogICMgcGF1c2UgLSB3YWl0IGZvciBzaWduYWwKICAjIHN3YXBvbiAtIHN0YXJ0L3N0b3Agc3dhcHBpbmcgdG8gZmlsZS9kZXZpY2UKICAjIHN3YXBvZmYgLSBzdGFydC9zdG9wIHN3YXBwaW5nIHRvIGZpbGUvZGV2aWNlCgogICMgUmVjb3JkIHR5cGUgbm9ybWFsaXphdGlvbnMKICAjIFVzZWZ1bCBsaW5rczoKICAjIGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS90b3J2YWxkcy9saW51eC92NC4xNi9pbmNsdWRlL3VhcGkvbGludXgvYXVkaXQuaAogICMgaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2xpbnV4LWF1ZGl0L2F1ZGl0LXVzZXJzcGFjZS80ZDkzMzMwMWIxODM1Y2FmYTA4YjllOWVmNzA1YzhmYjZjOTZjYjYyL2xpYi9saWJhdWRpdC5oCiAgIyBodHRwczovL3d3dy5lbGFzdGljLmNvL2d1aWRlL2VuL2Vjcy9jdXJyZW50L2Vjcy1hbGxvd2VkLXZhbHVlcy1ldmVudC1jYXRlZ29yeS5odG1sCgogICMgSUFNIHJlbGF0ZWQgZXZlbnRzCgogICMgQVVESVRfQUNDVF9MT0NLIC0gVXNlcidzIGFjY291bnQgbG9ja2VkIGJ5IGFkbWluCiAgLSByZWNvcmRfdHlwZXM6IEFDQ1RfTE9DSwogICAgYWN0aW9uOiBsb2NrZWQtYWNjb3VudAogICAgZWNzOgogICAgICA8PDogKmVjcy1pYW0KICAgICAgdHlwZToKICAgICAgICAtIHVzZXIKICAgICAgICAtIGluZm8KICAjIEFVRElUX0FDQ1RfVU5MT0NLIC0gVXNlcidzIGFjY291bnQgdW5sb2NrZWQgYnkgYWRtaW4KICAtIHJlY29yZF90eXBlczogQUNDVF9VTkxPQ0sKICAgIGFjdGlvbjogdW5sb2NrZWQtYWNjb3VudAogICAgZWNzOgogICAgICA8PDogKmVjcy1pYW0KICAgICAgdHlwZToKICAgICAgICAtIHVzZXIKICAgICAgICAtIGluZm8KICAjIEFVRElUX0FERF9HUk9VUCAtIEdyb3VwIGFjY291bnQgYWRkZWQKICAtIHJlY29yZF90eXBlczogQUREX0dST1VQCiAgICBhY3Rpb246IGFkZGVkLWdyb3VwLWFjY291bnQtdG8KICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogW2lkLCBhY2N0XQogICAgICB3aGF0OiBhY2NvdW50CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWlhbQogICAgICA8PDogKmVjcy1ncm91cC1tb2RpZmljYXRpb24tbWFwcGluZ3MKICAgICAgdHlwZToKICAgICAgICAtIGdyb3VwCiAgICAgICAgLSBjcmVhdGlvbgoKICAjIEFVRElUX0FERF9VU0VSIC0gVXNlciBhY2NvdW50IGFkZGVkCiAgLSByZWNvcmRfdHlwZXM6IEFERF9VU0VSCiAgICBhY3Rpb246IGFkZGVkLXVzZXItYWNjb3VudAogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBbaWQsIGFjY3RdCiAgICAgIHdoYXQ6IGFjY291bnQKICAgIGVjczoKICAgICAgPDw6ICplY3MtaWFtCiAgICAgIDw8OiAqZWNzLXVzZXItbW9kaWZpY2F0aW9uLW1hcHBpbmdzCiAgICAgIHR5cGU6CiAgICAgICAgLSB1c2VyCiAgICAgICAgLSBjcmVhdGlvbgogICMgQVVESVRfREVMX0dST1VQIC0gR3JvdXAgYWNjb3VudCBkZWxldGVkCiAgLSByZWNvcmRfdHlwZXM6IERFTF9HUk9VUAogICAgYWN0aW9uOiBkZWxldGVkLWdyb3VwLWFjY291bnQtZnJvbQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBbaWQsIGFjY3RdCiAgICAgIHdoYXQ6IGFjY291bnQKICAgIGVjczoKICAgICAgPDw6ICplY3MtaWFtCiAgICAgIDw8OiAqZWNzLWdyb3VwLW1vZGlmaWNhdGlvbi1tYXBwaW5ncwogICAgICB0eXBlOgogICAgICAgIC0gZ3JvdXAKICAgICAgICAtIGRlbGV0aW9uCiAgIyBBVURJVF9ERUxfVVNFUiAtIFVzZXIgYWNjb3VudCBkZWxldGVkCiAgLSByZWNvcmRfdHlwZXM6IERFTF9VU0VSCiAgICBhY3Rpb246IGRlbGV0ZWQtdXNlci1hY2NvdW50CiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IFtpZCwgYWNjdF0KICAgICAgd2hhdDogYWNjb3VudAogICAgZWNzOgogICAgICA8PDogKmVjcy1pYW0KICAgICAgPDw6ICplY3MtdXNlci1tb2RpZmljYXRpb24tbWFwcGluZ3MKICAgICAgdHlwZToKICAgICAgICAtIHVzZXIKICAgICAgICAtIGRlbGV0aW9uCiAgIyBBVURJVF9HUlBfTUdNVCAtIEdyb3VwIGFjY291bnQgYXR0ciB3YXMgbW9kaWZpZWQKICAtIHJlY29yZF90eXBlczogR1JQX01HTVQKICAgIGFjdGlvbjogbW9kaWZpZWQtZ3JvdXAtYWNjb3VudAogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBbaWQsIGFjY3RdCiAgICAgIHdoYXQ6IGFjY291bnQKICAgIGVjczoKICAgICAgPDw6ICplY3MtaWFtCiAgICAgIHR5cGU6CiAgICAgICAgLSBncm91cAogICAgICAgIC0gY2hhbmdlCiAgICAgIG1hcHBpbmdzOgogICAgICAgIC0gZnJvbTogYWN0b3IucHJpbWFyeQogICAgICAgICAgdG86IHVzZXIKICAgICAgICAtIGZyb206IGFjdG9yLnNlY29uZGFyeQogICAgICAgICAgdG86IGdyb3VwLnRhcmdldAogICAgICAgIC0gZnJvbTogdWlkLnVpZAogICAgICAgICAgdG86IHVzZXIuZWZmZWN0aXZlCiAgIyBBVURJVF9ST0xFX0FTU0lHTiAtIEFkbWluIGFzc2lnbmVkIHVzZXIgdG8gcm9sZQogIC0gcmVjb3JkX3R5cGVzOiBST0xFX0FTU0lHTgogICAgYWN0aW9uOiBhc3NpZ25lZC11c2VyLXJvbGUtdG8KICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogW2lkLCBhY2N0XQogICAgICB3aGF0OiBhY2NvdW50CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWlhbQogICAgICB0eXBlOgogICAgICAgIC0gdXNlcgogICAgICAgIC0gY2hhbmdlCiAgIyBBVURJVF9ST0xFX01PRElGWSAtIEFkbWluIG1vZGlmaWVkIGEgcm9sZQogIC0gcmVjb3JkX3R5cGVzOiBST0xFX01PRElGWQogICAgYWN0aW9uOiBtb2RpZmllZC1yb2xlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWlhbQogICAgICB0eXBlOgogICAgICAgIC0gY2hhbmdlCiAgIyBBVURJVF9ST0xFX1JFTU9WRSAtIEFkbWluIHJlbW92ZWQgdXNlciBmcm9tIHJvbGUKICAtIHJlY29yZF90eXBlczogUk9MRV9SRU1PVkUKICAgIGFjdGlvbjogcmVtb3ZlZC11c2VyLXJvbGUtZnJvbQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBbaWQsIGFjY3RdCiAgICAgIHdoYXQ6IGFjY291bnQKICAgIGVjczoKICAgICAgPDw6ICplY3MtaWFtCiAgICAgIHR5cGU6CiAgICAgICAgLSB1c2VyCiAgICAgICAgLSBjaGFuZ2UKICAjIEFVRElUX1VTRVJfTUdNVCAtIFVzZXIgYWNjdCBhdHRyaWJ1dGUgY2hhbmdlCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBVU0VSX01HTVQKICAgIGFjdGlvbjogbW9kaWZpZWQtdXNlci1hY2NvdW50CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWlhbQogICAgICB0eXBlOgogICAgICAgIC0gdXNlcgogICAgICAgIC0gY2hhbmdlCiAgICAgIG1hcHBpbmdzOgogICAgICAgIC0gZnJvbTogYWN0b3IucHJpbWFyeQogICAgICAgICAgdG86IHVzZXIKICAgICAgICAtIGZyb206IGFjdG9yLnNlY29uZGFyeQogICAgICAgICAgdG86IHVzZXIudGFyZ2V0CiAgICAgICAgLSBmcm9tOiB1aWQudWlkCiAgICAgICAgICB0bzogdXNlci5lZmZlY3RpdmUKICAjIEFVRElUX1VTRVJfQ0hBVVRIVE9LIC0gVXNlciBhY2N0IHBhc3N3b3JkIG9yIHBpbiBjaGFuZ2VkCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBVU0VSX0NIQVVUSFRPSwogICAgYWN0aW9uOiBjaGFuZ2VkLXBhc3N3b3JkCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWlhbQogICAgICB0eXBlOgogICAgICAgIC0gdXNlcgogICAgICAgIC0gY2hhbmdlCiAgICAgIG1hcHBpbmdzOgogICAgICAgIC0gZnJvbTogYWN0b3IucHJpbWFyeQogICAgICAgICAgdG86IHVzZXIKICAgICAgICAtIGZyb206IHVpZC51aWQKICAgICAgICAgIHRvOiB1c2VyLmVmZmVjdGl2ZQogICAgICAgIC0gZnJvbTogYWN0b3Iuc2Vjb25kYXJ5CiAgICAgICAgICB0bzogdXNlci50YXJnZXQKCiAgIyBBVURJVF9HUlBfQ0hBVVRIVE9LIC0gR3JvdXAgYWNjdCBwYXNzd29yZCBvciBwaW4gY2hhbmdlZAogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogR1JQX0NIQVVUSFRPSwogICAgYWN0aW9uOiBjaGFuZ2VkLWdyb3VwLXBhc3N3b3JkCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGFjY3QKICAgICAgd2hhdDogdXNlci1zZXNzaW9uCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWlhbQogICAgICB0eXBlOgogICAgICAgIC0gZ3JvdXAKICAgICAgICAtIGNoYW5nZQogICAgICBtYXBwaW5nczoKICAgICAgICAtIGZyb206IGFjdG9yLnByaW1hcnkKICAgICAgICAgIHRvOiB1c2VyCiAgICAgICAgLSBmcm9tOiB1aWQudWlkCiAgICAgICAgICB0bzogdXNlci5lZmZlY3RpdmUKICAgICAgICAtIGZyb206IGFjdG9yLnNlY29uZGFyeQogICAgICAgICAgdG86IGdyb3VwLnRhcmdldAoKICAjIEF1dGhlbnRpY2F0aW9uIHJlbGF0ZWQgZXZlbnRzCgogICMgQVVESVRfQ1JFRF9BQ1EgLSBVc2VyIGNyZWRlbnRpYWwgYWNxdWlyZWQKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IENSRURfQUNRCiAgICBhY3Rpb246IGFjcXVpcmVkLWNyZWRlbnRpYWxzCiAgICBlY3M6ICplY3MtYXV0aAogICMgQVVESVRfQ1JFRF9ESVNQIC0gVXNlciBjcmVkZW50aWFsIGRpc3Bvc2VkCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBDUkVEX0RJU1AKICAgIGFjdGlvbjogZGlzcG9zZWQtY3JlZGVudGlhbHMKICAgIGVjczogKmVjcy1hdXRoCiAgIyBBVURJVF9DUkVEX1JFRlIgLSBVc2VyIGNyZWRlbnRpYWwgcmVmcmVzaGVkCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBDUkVEX1JFRlIKICAgIGFjdGlvbjogcmVmcmVzaGVkLWNyZWRlbnRpYWxzCiAgICBlY3M6ICplY3MtYXV0aAogICMgQVVESVRfR1JQX0FVVEggLSBBdXRoZW50aWNhdGlvbiBmb3IgZ3JvdXAgcGFzc3dvcmQKICAtIHJlY29yZF90eXBlczogR1JQX0FVVEgKICAgIGFjdGlvbjogYXV0aGVudGljYXRlZC10by1ncm91cAogICAgZWNzOiAqZWNzLWF1dGgKICAjIEFVRElUX0xPR0lOIC0gRGVmaW5lIHRoZSBsb2dpbiBpZCBhbmQgaW5mb3JtYXRpb24KICAtIHJlY29yZF90eXBlczogTE9HSU4KICAgIGFjdGlvbjogY2hhbmdlZC1sb2dpbi1pZC10bwogICAgc3ViamVjdDoKICAgICAgcHJpbWFyeTogW29sZF9hdWlkLCBvbGQtYXVpZF0KICAgICAgc2Vjb25kYXJ5OiB1aWQKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogW25ldy1hdWlkLCBuZXdfYXVpZCwgYXVpZF0KICAgICAgd2hhdDogdXNlci1zZXNzaW9uCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWF1dGgKICAgICAgdHlwZTogc3RhcnQKICAgICAgbWFwcGluZ3M6CiAgICAgICAgLSBmcm9tOiBhY3Rvci5wcmltYXJ5CiAgICAgICAgICB0bzogdXNlcgogICAgICAgIC0gZnJvbTogb2JqZWN0LnByaW1hcnkKICAgICAgICAgIHRvOiB1c2VyLmVmZmVjdGl2ZQogICMgQVVESVRfVVNFUl9BQ0NUIC0gVXNlciBzeXN0ZW0gYWNjZXNzIGF1dGhvcml6YXRpb24KICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IFVTRVJfQUNDVAogICAgYWN0aW9uOiB3YXMtYXV0aG9yaXplZAogICAgZWNzOiAqZWNzLWF1dGgKICAjIEFVRElUX1VTRVJfQVVUSCAtIFVzZXIgc3lzdGVtIGFjY2VzcyBhdXRoZW50aWNhdGlvbgogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogVVNFUl9BVVRICiAgICBhY3Rpb246IGF1dGhlbnRpY2F0ZWQKICAgIGVjczogKmVjcy1hdXRoCiAgIyBBVURJVF9VU0VSX0VORCAtIFVzZXIgc2Vzc2lvbiBlbmQKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IFVTRVJfRU5ECiAgICBhY3Rpb246IGVuZGVkLXNlc3Npb24KICAgIGVjczogKmVjcy1hdXRoCiAgIyBBVURJVF9VU0VSX0VSUiAtIFVzZXIgYWNjdCBzdGF0ZSBlcnJvcgogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogVVNFUl9FUlIKICAgIGFjdGlvbjogZXJyb3IKICAgIHNvdXJjZV9pcDogW2FkZHJdCiAgICBlY3M6ICplY3MtYXV0aAogICMgQVVESVRfVVNFUl9MT0dJTiAtIFVzZXIgaGFzIGxvZ2dlZCBpbgogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogVVNFUl9MT0dJTgogICAgYWN0aW9uOiBsb2dnZWQtaW4KICAgIHNvdXJjZV9pcDogW2FkZHJdCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWF1dGgKICAgICAgdHlwZTogc3RhcnQKICAjIEFVRElUX1VTRVJfTE9HT1VUIC0gVXNlciBoYXMgbG9nZ2VkIG91dAogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogVVNFUl9MT0dPVVQKICAgIGFjdGlvbjogbG9nZ2VkLW91dAogICAgZWNzOgogICAgICA8PDogKmVjcy1hdXRoCiAgICAgIHR5cGU6IGVuZAogICMgQVVESVRfVVNFUl9ST0xFX0NIQU5HRSAtIFVzZXIgY2hhbmdlZCB0byBhIG5ldyByb2xlCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBVU0VSX1JPTEVfQ0hBTkdFCiAgICBhY3Rpb246IGNoYW5nZWQtcm9sZS10bwogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBzZWxlY3RlZC1jb250ZXh0CiAgICAgIHdoYXQ6IHVzZXItc2Vzc2lvbgogICMgQVVESVRfVVNFUl9TVEFSVCAtIFVzZXIgc2Vzc2lvbiBzdGFydAogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogVVNFUl9TVEFSVAogICAgYWN0aW9uOiBzdGFydGVkLXNlc3Npb24KICAgIHNvdXJjZV9pcDogW2FkZHJdCiAgICBlY3M6ICplY3MtYXV0aAoKICAjIEhvc3QgdmlydHVhbGl6YXRpb24gZXZlbnRzCgogICMgQVVESVRfVklSVF9DT05UUk9MIC0gU3RhcnQsIFBhdXNlLCBTdG9wIFZNCiAgLSByZWNvcmRfdHlwZXM6IFZJUlRfQ09OVFJPTAogICAgYWN0aW9uOiBpc3N1ZWQtdm0tY29udHJvbAogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBvcAogICAgICBzZWNvbmRhcnk6IHZtCiAgICAgIHdoYXQ6IHZpcnR1YWwtbWFjaGluZQogICAgZWNzOiAqZWNzLWhvc3QKICAjIEFVRElUX1ZJUlRfQ1JFQVRFIC0gQ3JlYXRpb24gb2YgZ3Vlc3QgaW1hZ2UKICAtIHJlY29yZF90eXBlczogVklSVF9DUkVBVEUKICAgIGFjdGlvbjogY3JlYXRlZC12bS1pbWFnZQogICAgZWNzOiAqZWNzLWhvc3QKICAjIEFVRElUX1ZJUlRfREVTVFJPWSAtIERlc3RydWN0aW9uIG9mIGd1ZXN0IGltYWdlCiAgLSByZWNvcmRfdHlwZXM6IFZJUlRfREVTVFJPWQogICAgYWN0aW9uOiBkZWxldGVkLXZtLWltYWdlCiAgICBlY3M6ICplY3MtaG9zdAogICMgQVVESVRfVklSVF9JTlRFR1JJVFlfQ0hFQ0sgLSBHdWVzdCBpbnRlZ3JpdHkgcmVzdWx0cwogIC0gcmVjb3JkX3R5cGVzOiBWSVJUX0lOVEVHUklUWV9DSEVDSwogICAgYWN0aW9uOiBjaGVja2VkLWludGVncml0eS1vZgogICAgZWNzOiAqZWNzLWhvc3QKICAjIEFVRElUX1ZJUlRfTUFDSElORV9JRCAtIEJpbmRpbmcgb2YgbGFiZWwgdG8gVk0KICAtIHJlY29yZF90eXBlczogVklSVF9NQUNISU5FX0lECiAgICBhY3Rpb246IGFzc2lnbmVkLXZtLWlkCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IHZtCiAgICAgIHdoYXQ6IHZpcnR1YWwtbWFjaGluZQogICAgZWNzOiAqZWNzLWhvc3QKICAjIEFVRElUX1ZJUlRfTUlHUkFURV9JTiAtIEluYm91bmQgZ3Vlc3QgbWlncmF0aW9uIGluZm8KICAtIHJlY29yZF90eXBlczogVklSVF9NSUdSQVRFX0lOCiAgICBhY3Rpb246IG1pZ3JhdGVkLXZtLWZyb20KICAgIGVjczogKmVjcy1ob3N0CiAgIyBBVURJVF9WSVJUX01JR1JBVEVfT1VUIC0gT3V0Ym91bmQgZ3Vlc3QgbWlncmF0aW9uIGluZm8KICAtIHJlY29yZF90eXBlczogVklSVF9NSUdSQVRFX09VVAogICAgYWN0aW9uOiBtaWdyYXRlZC12bS10bwogICAgZWNzOiAqZWNzLWhvc3QKICAjIEFVRElUX1ZJUlRfUkVTT1VSQ0UgLSBSZXNvdXJjZSBhc3NpZ25tZW50CiAgLSByZWNvcmRfdHlwZXM6IFZJUlRfUkVTT1VSQ0UKICAgIGFjdGlvbjogYXNzaWduZWQtdm0tcmVzb3VyY2UKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogcmVzcmMKICAgICAgc2Vjb25kYXJ5OiB2bQogICAgICB3aGF0OiB2aXJ0dWFsLW1hY2hpbmUKICAgIGVjczogKmVjcy1ob3N0CgogICMgVXNlcnNwYWNlIHByb2Nlc3MgZXZlbnRzCgogICMgQVVESVRfQ0hHUlBfSUQgLSBVc2VyIHNwYWNlIGdyb3VwIElEIGNoYW5nZWQKICAtIHJlY29yZF90eXBlczogQ0hHUlBfSUQKICAgIGFjdGlvbjogY2hhbmdlZC1ncm91cAogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IGNoYW5nZQogICMgQVVESVRfQ0hVU0VSX0lEIC0gQ2hhbmdlZCB1c2VyIElEIHN1cHBsZW1lbnRhbCBkYXRhCiAgLSByZWNvcmRfdHlwZXM6IENIVVNFUl9JRAogICAgYWN0aW9uOiBjaGFuZ2VkLXVzZXItaWQKICAgIGVjczoKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBjaGFuZ2UKICAjIEFVRElUX1RFU1QgLSBVc2VkIGZvciB0ZXN0IHN1Y2Nlc3MgbWVzc2FnZXMKICAtIHJlY29yZF90eXBlczogVEVTVAogICAgYWN0aW9uOiBzZW50LXRlc3QKICAgIGVjczogKmVjcy1wcm9jZXNzCiAgIyBBVURJVF9UUlVTVEVEX0FQUCAtIFRydXN0ZWQgYXBwIG1zZyAtIGZyZWVzdHlsZSB0ZXh0CiAgLSByZWNvcmRfdHlwZXM6IFRSVVNURURfQVBQCiAgICBhY3Rpb246IHVua25vd24KICAgIGVjczogKmVjcy1wcm9jZXNzCiAgIyBBVURJVF9VU0VSX0NNRCAtIFVzZXIgc2hlbGwgY29tbWFuZCBhbmQgYXJncwogIC0gcmVjb3JkX3R5cGVzOiBVU0VSX0NNRAogICAgYWN0aW9uOiByYW4tY29tbWFuZAogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBjbWQKICAgICAgd2hhdDogcHJvY2VzcwogICAgZGVzY3JpcHRpb246ID4KICAgICAgVGhlc2UgbWVzc2FnZXMgYXJlIGZyb20gdXNlci1zcGFjZSBhcHBzLCBsaWtlIHN1ZG8sIHRoYXQgbG9nIGNvbW1hbmRzCiAgICAgIGJlaW5nIHJ1biBieSBhIHVzZXIuIFRoZSB1aWQgY29udGFpbmVkIGluIHRoZXNlIG1lc3NhZ2VzIGlzIHVzZXIncyBVSUQgYXQKICAgICAgdGhlIHRpbWUgdGhlIGNvbW1hbmQgd2FzIHJ1bi4gSXQgaXMgbm90IHRoZSAidGFyZ2V0IiBVSUQgdXNlZCB0byBydW4gdGhlCiAgICAgIGNvbW1hbmQsIHdoaWNoIGlzIG5vcm1hbGx5IHJvb3QuCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogc3RhcnQKCiAgIyBIb3N0LWxldmVsIGV2ZW50cwoKICAjIEFVRElUX1NZU1RFTV9CT09UIC0gU3lzdGVtIGJvb3QKICAtIHJlY29yZF90eXBlczogU1lTVEVNX0JPT1QKICAgIGFjdGlvbjogYm9vdGVkLXN5c3RlbQogICAgb2JqZWN0OgogICAgICB3aGF0OiBzeXN0ZW0KICAgIGVjczoKICAgICAgPDw6ICplY3MtaG9zdAogICAgICB0eXBlOiBzdGFydAogICMgQVVESVRfU1lTVEVNX1JVTkxFVkVMIC0gU3lzdGVtIHJ1bmxldmVsIGNoYW5nZQogIC0gcmVjb3JkX3R5cGVzOiBTWVNURU1fUlVOTEVWRUwKICAgIGFjdGlvbjogY2hhbmdlZC10by1ydW5sZXZlbAogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBuZXctbGV2ZWwKICAgICAgd2hhdDogc3lzdGVtCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWhvc3QKICAgICAgdHlwZTogY2hhbmdlCiAgIyBBVURJVF9TWVNURU1fU0hVVERPV04gLSBTeXN0ZW0gc2h1dGRvd24KICAtIHJlY29yZF90eXBlczogU1lTVEVNX1NIVVRET1dOCiAgICBhY3Rpb246IHNodXRkb3duLXN5c3RlbQogICAgb2JqZWN0OgogICAgICB3aGF0OiBzeXN0ZW0KICAgIGVjczoKICAgICAgPDw6ICplY3MtaG9zdAogICAgICB0eXBlOiBlbmQKCiAgIyBTZXJ2aWNlLWxldmVsIGV2ZW50cwoKICAjIEFVRElUX1NFUlZJQ0VfU1RBUlQgLSBTZXJ2aWNlIChkYWVtb24pIHN0YXJ0CiAgLSByZWNvcmRfdHlwZXM6IFNFUlZJQ0VfU1RBUlQKICAgIGFjdGlvbjogc3RhcnRlZC1zZXJ2aWNlCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IHVuaXQKICAgICAgd2hhdDogc2VydmljZQogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IHN0YXJ0CiAgIyBBVURJVF9TRVJWSUNFX1NUT1AgLSBTZXJ2aWNlIChkYWVtb24pIHN0b3AKICAtIHJlY29yZF90eXBlczogU0VSVklDRV9TVE9QCiAgICBhY3Rpb246IHN0b3BwZWQtc2VydmljZQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiB1bml0CiAgICAgIHdoYXQ6IHNlcnZpY2UKICAgIGVjczoKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBzdG9wCgogICMgQXVkaXRkIGludGVybmFsIGV2ZW50cwoKICAjIEFVRElUX0NPTkZJR19DSEFOR0UgLSBBdWRpdCBzeXN0ZW0gY29uZmlndXJhdGlvbiBjaGFuZ2UKICAtIHJlY29yZF90eXBlczogQ09ORklHX0NIQU5HRQogICAgYWN0aW9uOiBjaGFuZ2VkLWF1ZGl0LWNvbmZpZ3VyYXRpb24KICAgIG9iamVjdDoKICAgICAgcHJpbWFyeToKICAgICAgICBbb3AsIGtleSwgYXVkaXRfZW5hYmxlZCwgYXVkaXRfcGlkLCBhdWRpdF9iYWNrbG9nX2xpbWl0LCBhdWRpdF9mYWlsdXJlXQogICAgICB3aGF0OiBhdWRpdC1jb25maWcKICAgIGVjczoKICAgICAgY2F0ZWdvcnk6IFtwcm9jZXNzLCBjb25maWd1cmF0aW9uXQogICAgICB0eXBlOiBjaGFuZ2UKICAjIEFVRElUX0RBRU1PTl9BQk9SVCAtIERhZW1vbiBlcnJvciBzdG9wIHJlY29yZAogIC0gcmVjb3JkX3R5cGVzOiBEQUVNT05fQUJPUlQKICAgIGFjdGlvbjogYWJvcnRlZC1hdWRpdGQtc3RhcnR1cAogICAgb2JqZWN0OgogICAgICB3aGF0OiBzZXJ2aWNlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogc3RvcAogICMgQVVESVRfREFFTU9OX0FDQ0VQVCAtIEF1ZGl0ZCBhY2NlcHRlZCByZW1vdGUgY29ubmVjdGlvbgogIC0gcmVjb3JkX3R5cGVzOiBEQUVNT05fQUNDRVBUCiAgICBhY3Rpb246IHJlbW90ZS1hdWRpdC1jb25uZWN0ZWQKICAgIG9iamVjdDoKICAgICAgd2hhdDogc2VydmljZQogICAgZWNzOgogICAgICA8PDogKmVjcy1uZXR3b3JrCiAgICAgIHR5cGU6CiAgICAgICAgLSBjb25uZWN0aW9uCiAgICAgICAgLSBzdGFydAogICMgQVVESVRfREFFTU9OX0NMT1NFIC0gQXVkaXRkIGNsb3NlZCByZW1vdGUgY29ubmVjdGlvbgogIC0gcmVjb3JkX3R5cGVzOiBEQUVNT05fQ0xPU0UKICAgIGFjdGlvbjogcmVtb3RlLWF1ZGl0LWRpc2Nvbm5lY3RlZAogICAgb2JqZWN0OgogICAgICB3aGF0OiBzZXJ2aWNlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLW5ldHdvcmsKICAgICAgdHlwZToKICAgICAgICAtIGNvbm5lY3Rpb24KICAgICAgICAtIHN0YXJ0CiAgIyBBVURJVF9EQUVNT05fQ09ORklHIC0gRGFlbW9uIGNvbmZpZyBjaGFuZ2UKICAtIHJlY29yZF90eXBlczogREFFTU9OX0NPTkZJRwogICAgYWN0aW9uOiBjaGFuZ2VkLWF1ZGl0ZC1jb25maWd1cmF0aW9uCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNlcnZpY2UKICAgIGVjczoKICAgICAgY2F0ZWdvcnk6IFtwcm9jZXNzLCBjb25maWd1cmF0aW9uXQogICAgICB0eXBlOiBjaGFuZ2UKICAjIEFVRElUX0RBRU1PTl9FTkQgLSBEYWVtb24gbm9ybWFsIHN0b3AgcmVjb3JkCiAgLSByZWNvcmRfdHlwZXM6IERBRU1PTl9FTkQKICAgIGFjdGlvbjogc2h1dGRvd24tYXVkaXQKICAgIG9iamVjdDoKICAgICAgd2hhdDogc2VydmljZQogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IHN0b3AKICAjIEFVRElUX0RBRU1PTl9FUlIgLSBBdWRpdGQgaW50ZXJuYWwgZXJyb3IKICAtIHJlY29yZF90eXBlczogREFFTU9OX0VSUgogICAgYWN0aW9uOiBhdWRpdC1lcnJvcgogICAgb2JqZWN0OgogICAgICB3aGF0OiBzZXJ2aWNlCiAgICBlY3M6ICplY3MtcHJvY2VzcwogICMgQVVESVRfREFFTU9OX1JFQ09ORklHIC0gQXVkaXRkIHNob3VsZCByZWNvbmZpZ3VyZQogIC0gcmVjb3JkX3R5cGVzOiBEQUVNT05fUkVDT05GSUcKICAgIGFjdGlvbjogcmVjb25maWd1cmVkLWF1ZGl0ZAogICAgb2JqZWN0OgogICAgICB3aGF0OiBzZXJ2aWNlCiAgICBlY3M6CiAgICAgIGNhdGVnb3J5OiBbcHJvY2VzcywgY29uZmlndXJhdGlvbl0KICAgICAgdHlwZTogaW5mbwogICMgQVVESVRfREFFTU9OX1JFU1VNRSAtIEF1ZGl0ZCBzaG91bGQgcmVzdW1lIGxvZ2dpbmcKICAtIHJlY29yZF90eXBlczogREFFTU9OX1JFU1VNRQogICAgYWN0aW9uOiByZXN1bWVkLWF1ZGl0LWxvZ2dpbmcKICAgIG9iamVjdDoKICAgICAgd2hhdDogc2VydmljZQogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IGNoYW5nZQogICMgQVVESVRfREFFTU9OX1JPVEFURSAtIEF1ZGl0ZCBzaG91bGQgcm90YXRlIGxvZ3MKICAtIHJlY29yZF90eXBlczogREFFTU9OX1JPVEFURQogICAgYWN0aW9uOiByb3RhdGVkLWF1ZGl0LWxvZ3MKICAgIG9iamVjdDoKICAgICAgd2hhdDogc2VydmljZQogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IGNoYW5nZQogICMgQVVESVRfREFFTU9OX1NUQVJUIC0gRGFlbW9uIHN0YXJ0dXAgcmVjb3JkCiAgLSByZWNvcmRfdHlwZXM6IERBRU1PTl9TVEFSVAogICAgYWN0aW9uOiBzdGFydGVkLWF1ZGl0CiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNlcnZpY2UKICAgIGVjczoKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBzdGFydAogICMgQVVESVRfS0VSTkVMIC0gQXN5bmNocm9ub3VzIGF1ZGl0IHJlY29yZC4gTk9UIEEgUkVRVUVTVC4KICAtIHJlY29yZF90eXBlczogS0VSTkVMCiAgICBhY3Rpb246IGluaXRpYWxpemVkLWF1ZGl0LXN1YnN5c3RlbQogICAgZWNzOiAqZWNzLXByb2Nlc3MKCiAgIyBDb25maWd1cmF0aW9uIGNoYW5nZSBldmVudHMKCiAgIyBBVURJVF9VU1lTX0NPTkZJRyAtIFVzZXIgc3BhY2Ugc3lzdGVtIGNvbmZpZyBjaGFuZ2UKICAtIHJlY29yZF90eXBlczogVVNZU19DT05GSUcKICAgIGFjdGlvbjogY2hhbmdlZC1jb25maWd1cmF0aW9uCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IG9wCiAgICAgIHdoYXQ6IHN5c3RlbQogICAgZWNzOgogICAgICBjYXRlZ29yeTogY29uZmlndXJhdGlvbgogICAgICB0eXBlOiBjaGFuZ2UKICAjIEFVRElUX05FVEZJTFRFUl9DRkcgLSBOZXRmaWx0ZXIgY2hhaW4gbW9kaWZpY2F0aW9ucwogIC0gcmVjb3JkX3R5cGVzOiBORVRGSUxURVJfQ0ZHCiAgICBhY3Rpb246IGxvYWRlZC1maXJld2FsbC1ydWxlLXRvCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IHRhYmxlCiAgICAgIHdoYXQ6IGZpcmV3YWxsCiAgICBlY3M6CiAgICAgIGNhdGVnb3J5OiBjb25maWd1cmF0aW9uCiAgICAgIHR5cGU6IGNoYW5nZQogICMgQVVESVRfRkVBVFVSRV9DSEFOR0UgLSBhdWRpdCBsb2cgbGlzdGluZyBmZWF0dXJlIGNoYW5nZXMKICAtIHJlY29yZF90eXBlczogRkVBVFVSRV9DSEFOR0UKICAgIGFjdGlvbjogY2hhbmdlZC1hdWRpdC1mZWF0dXJlCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGZlYXR1cmUKICAgICAgd2hhdDogc3lzdGVtCiAgICBlY3M6CiAgICAgIGNhdGVnb3J5OiBjb25maWd1cmF0aW9uCiAgICAgIHR5cGU6IGNoYW5nZQogICMgQVVESVRfUkVQTEFDRSAtIFJlcGxhY2UgYXVkaXRkIGlmIHRoaXMgcGFja2V0IHVuYW5zd2VyZAoKICAjIFRUWSBldmVudHMKCiAgLSByZWNvcmRfdHlwZXM6CiAgICAgICMgQVVESVRfVFRZIC0gSW5wdXQgb24gYW4gYWRtaW5pc3RyYXRpdmUgVFRZCiAgICAgIC0gVFRZCiAgICAgICMgQVVESVRfVVNFUl9UVFkgLSBOb24tSUNBTk9OIFRUWSBpbnB1dCBtZWFuaW5nCiAgICAgIC0gVVNFUl9UVFkKICAgIGFjdGlvbjogdHlwZWQKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogZGF0YQogICAgICB3aGF0OiBrZXlzdHJva2VzCiAgICBob3c6IFtjb21tLCBleGVdCgogICMgUG9saWN5IGV2ZW50cwoKICAjIEFVRElUX0FWQyAtIFNFIExpbnV4IGF2YyBkZW5pYWwgb3IgZ3JhbnQgKHNlbGludXgpCiAgLSByZWNvcmRfdHlwZXM6IEFWQwogICAgYWN0aW9uOiB2aW9sYXRlZC1zZWxpbnV4LXBvbGljeQogICAgc3ViamVjdDoKICAgICAgcHJpbWFyeTogc2NvbnRleHQKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogdGNvbnRleHQKICAgICAgc2Vjb25kYXJ5OiB0Y2xhc3MKICAgIGhhc19maWVsZHM6CiAgICAgIC0gc2VyZXN1bHQKICAjIEFVRElUX0FWQyAtIFNFIExpbnV4IGF2YyBkZW5pYWwgb3IgZ3JhbnQgKGFwcGFybW9yKQogIC0gcmVjb3JkX3R5cGVzOiBBVkMKICAgIGFjdGlvbjogdmlvbGF0ZWQtYXBwYXJtb3ItcG9saWN5CiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IG9wZXJhdGlvbgogICAgICBzZWNvbmRhcnk6IFtyZXF1ZXN0ZWRfbWFzaywgZGVuaWVkX21hc2ssIGNhcG5hbWVdCiAgICAgIHdoYXQ6IHBvbGljeQogICAgaGFzX2ZpZWxkczoKICAgICAgLSBhcHBhcm1vcgogICMgQVVESVRfRlNfUkVMQUJFTCAtIEZpbGVzeXN0ZW0gcmVsYWJlbGVkCiAgLSByZWNvcmRfdHlwZXM6IEZTX1JFTEFCRUwKICAgIGFjdGlvbjogcmVsYWJlbGVkLWZpbGVzeXN0ZW0KICAgIG9iamVjdDoKICAgICAgd2hhdDogbWFjLWNvbmZpZwogICMgQVVESVRfTEFCRUxfTEVWRUxfQ0hBTkdFIC0gT2JqZWN0J3MgbGV2ZWwgd2FzIGNoYW5nZWQKICAtIHJlY29yZF90eXBlczogTEFCRUxfTEVWRUxfQ0hBTkdFCiAgICBhY3Rpb246IG1vZGlmaWVkLWxldmVsLW9mCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IHByaW50ZXIKICAgICAgd2hhdDogcHJpbnRlcgogICMgQVVESVRfTEFCRUxfT1ZFUlJJREUgLSBBZG1pbiBpcyBvdmVycmlkaW5nIGEgbGFiZWwKICAtIHJlY29yZF90eXBlczogTEFCRUxfT1ZFUlJJREUKICAgIGFjdGlvbjogb3ZlcnJvZGUtbGFiZWwtb2YKICAgIG9iamVjdDoKICAgICAgd2hhdDogbWFjLWNvbmZpZwogICMgQVVESVRfTUFDX0NIRUNLIC0gVXNlciBzcGFjZSBNQUMgZGVjaXNpb24gcmVzdWx0cwogIC0gcmVjb3JkX3R5cGVzOiBNQUNfQ0hFQ0sKICAgIGFjdGlvbjogbWFjLXBlcm1pc3Npb24KICAjIEFVRElUX01BQ19DT05GSUdfQ0hBTkdFIC0gQ2hhbmdlcyB0byBib29sZWFucwogIC0gcmVjb3JkX3R5cGVzOiBNQUNfQ09ORklHX0NIQU5HRQogICAgYWN0aW9uOiBjaGFuZ2VkLXNlbGludXgtYm9vbGVhbgogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBib29sCiAgICAgIHdoYXQ6IG1hYy1jb25maWcKICAgIGVjczoKICAgICAgY2F0ZWdvcnk6IGNvbmZpZ3VyYXRpb24KICAgICAgdHlwZTogY2hhbmdlCiAgIyBBVURJVF9NQUNfUE9MSUNZX0xPQUQgLSBQb2xpY3kgZmlsZSBsb2FkCiAgLSByZWNvcmRfdHlwZXM6IE1BQ19QT0xJQ1lfTE9BRAogICAgYWN0aW9uOiBsb2FkZWQtc2VsaW51eC1wb2xpY3kKICAgIG9iamVjdDoKICAgICAgd2hhdDogbWFjLWNvbmZpZwogICAgZWNzOgogICAgICBjYXRlZ29yeTogY29uZmlndXJhdGlvbgogICAgICB0eXBlOiBhY2Nlc3MKICAjIEFVRElUX01BQ19TVEFUVVMgLSBDaGFuZ2VkIGVuZm9yY2luZyxwZXJtaXNzaXZlLG9mZgogIC0gcmVjb3JkX3R5cGVzOiBNQUNfU1RBVFVTCiAgICBhY3Rpb246IGNoYW5nZWQtc2VsaW51eC1lbmZvcmNlbWVudAogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBlbmZvcmNpbmcKICAgICAgd2hhdDogbWFjLWNvbmZpZwogICAgZWNzOgogICAgICBjYXRlZ29yeTogY29uZmlndXJhdGlvbgogICAgICB0eXBlOiBjaGFuZ2UKICAjIEFVRElUX1VTRVJfQVZDIC0gVXNlciBzcGFjZSBhdmMgbWVzc2FnZQogIC0gcmVjb3JkX3R5cGVzOiBVU0VSX0FWQwogICAgYWN0aW9uOiBhY2Nlc3MtcGVybWlzc2lvbgogICMgQVVESVRfVVNFUl9NQUNfQ09ORklHX0NIQU5HRSAtIENoYW5nZSBtYWRlIHRvIE1BQyBwb2xpY3kKICAtIHJlY29yZF90eXBlczogVVNFUl9NQUNfQ09ORklHX0NIQU5HRQogICAgYWN0aW9uOiBjaGFuZ2VkLW1hYy1jb25maWd1cmF0aW9uCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IG1hYy1jb25maWcKICAgIGVjczoKICAgICAgY2F0ZWdvcnk6IGNvbmZpZ3VyYXRpb24KICAgICAgdHlwZTogY2hhbmdlCiAgIyBBVURJVF9VU0VSX01BQ19QT0xJQ1lfTE9BRCAtIFVzZXJzcGMgZGFlbW9uIGxvYWRlZCBwb2xpYwogIC0gcmVjb3JkX3R5cGVzOiBVU0VSX01BQ19QT0xJQ1lfTE9BRAogICAgYWN0aW9uOiBsb2FkZWQtbWFjLXBvbGljeQogICAgb2JqZWN0OgogICAgICB3aGF0OiBtYWMtY29uZmlnCiAgICBlY3M6CiAgICAgIGNhdGVnb3J5OiBjb25maWd1cmF0aW9uCiAgICAgIHR5cGU6IGFjY2VzcwogICMgQVVESVRfVVNFUl9TRUxJTlVYX0VSUiAtIFNFIExpbnV4IHVzZXIgc3BhY2UgZXJyb3IKICAtIHJlY29yZF90eXBlczogVVNFUl9TRUxJTlVYX0VSUgogICAgYWN0aW9uOiBhY2Nlc3MtZXJyb3IKICAjIEFVRElUX1NFQ0NPTVAgLSBTZWN1cmUgQ29tcHV0aW5nIGV2ZW50CiAgLSByZWNvcmRfdHlwZXM6IFNFQ0NPTVAKICAgIGFjdGlvbjogdmlvbGF0ZWQtc2VjY29tcC1wb2xpY3kKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogc3lzY2FsbAogICAgICB3aGF0OiBwcm9jZXNzCiAgIyBBVURJVF9TRUxJTlVYX0VSUiAtIEludGVybmFsIFNFIExpbnV4IEVycm9ycwogIC0gYWN0aW9uOiBjYXVzZWQtbWFjLXBvbGljeS1lcnJvcgogICAgb2JqZWN0OgogICAgICB3aGF0OiBzeXN0ZW0KICAgIHJlY29yZF90eXBlczogU0VMSU5VWF9FUlIKICAjIEFVRElUX0FQUEFSTU9SX0FMTE9XRUQKICAjIEFVRElUX0FQUEFSTU9SX0RFTklFRAogICMgQVVESVRfQVBQQVJNT1JfRVJST1IKICAjIEFVRElUX0FWQ19QQVRIIC0gZGVudHJ5LCB2ZnNtb3VudCBwYWlyIGZyb20gYXZjCiAgIyBBVURJVF9BUFBBUk1PUl9BVURJVAogICMgQVVESVRfQVBQQVJNT1JfSElOVAogICMgQVVESVRfQVBQQVJNT1JfU1RBVFVTCiAgIyBBVURJVF9BUFBBUk1PUl9FUlJPUgogICMgQVVESVRfREVWX0FMTE9DIC0gRGV2aWNlIHdhcyBhbGxvY2F0ZWQKICAjIEFVRElUX0RFVl9ERUFMTE9DIC0gRGV2aWNlIHdhcyBkZWFsbG9jYXRlZAogICMgQVVESVRfTUFDX1VOTEJMX0FMTE9XIC0gTmV0TGFiZWw6IGFsbG93IHVubGFiZWxlZCB0cmFmZmljCiAgIyBBVURJVF9NQUNfQ0lQU09WNF9BREQgLSBOZXRMYWJlbDogYWRkIENJUFNPdjQgRE9JIGVudHJ5CiAgIyBBVURJVF9NQUNfQ0lQU09WNF9ERUwgLSBOZXRMYWJlbDogZGVsIENJUFNPdjQgRE9JIGVudHJ5CiAgIyBBVURJVF9NQUNfTUFQX0FERCAtIE5ldExhYmVsOiBhZGQgTFNNIGRvbWFpbiBtYXBwaW5nCiAgIyBBVURJVF9NQUNfTUFQX0RFTCAtIE5ldExhYmVsOiBkZWwgTFNNIGRvbWFpbiBtYXBwaW5nCiAgIyBBVURJVF9NQUNfSVBTRUNfRVZFTlQgLSBBdWRpdCBhbiBJUFNlYyBldmVudAogICMgQVVESVRfTUFDX1VOTEJMX1NUQ0FERCAtIE5ldExhYmVsOiBhZGQgYSBzdGF0aWMgbGFiZWwKICAjIEFVRElUX01BQ19VTkxCTF9TVENERUwgLSBOZXRMYWJlbDogZGVsIGEgc3RhdGljIGxhYmVsCiAgIyBBVURJVF9NQUNfQ0FMSVBTT19BREQgLSBOZXRMYWJlbDogYWRkIENBTElQU08gRE9JIGVudHJ5CiAgIyBBVURJVF9NQUNfQ0FMSVBTT19ERUwgLSBOZXRMYWJlbDogZGVsIENBTElQU08gRE9JIGVudHJ5CiAgIyBBVURJVF9VU0VSX0xBQkVMRURfRVhQT1JUIC0gT2JqZWN0IGV4cG9ydGVkIHdpdGggbGFiZWwKICAjIEFVRElUX1VTRVJfVU5MQUJFTEVEX0VYUE9SVCAtIE9iamVjdCBleHBvcnRlZCB3aXRob3V0IGxhYmVsCgogICMgQ3J5cHRvIGV2ZW50cwoKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICBhY3Rpb246IG5lZ290aWF0ZWQtY3J5cHRvLWtleQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBmcAogICAgICBzZWNvbmRhcnk6IFthZGRyLCBob3N0bmFtZV0KICAgICAgd2hhdDogdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IENSWVBUT19LRVlfVVNFUgogICAgc291cmNlX2lwOiBbYWRkcl0KICAgIGVjczogKmVjcy1wcm9jZXNzCiAgLSBhY3Rpb246IGNyeXB0by1vZmZpY2VyLWxvZ2dlZC1pbgogICAgcmVjb3JkX3R5cGVzOiBDUllQVE9fTE9HSU4KICAtIGFjdGlvbjogY3J5cHRvLW9mZmljZXItbG9nZ2VkLW91dAogICAgcmVjb3JkX3R5cGVzOiBDUllQVE9fTE9HT1VUCiAgICBlY3M6ICplY3MtcHJvY2VzcwogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIGFjdGlvbjogc3RhcnRlZC1jcnlwdG8tc2Vzc2lvbgogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBhZGRyCiAgICAgIHNlY29uZGFyeTogW3Jwb3J0XQogICAgcmVjb3JkX3R5cGVzOiBDUllQVE9fU0VTU0lPTgogICAgc291cmNlX2lwOiBbYWRkcl0KICAgIGVjczogKmVjcy1wcm9jZXNzCiAgLSBhY3Rpb246IGFjY2Vzcy1yZXN1bHQKICAgIHJlY29yZF90eXBlczogREFDX0NIRUNLCgogICMgQW5vbWFsaWVzCgogICMgQVVESVRfQU5PTV9BQkVORCAtIFByb2Nlc3MgZW5kZWQgYWJub3JtYWxseQogIC0gcmVjb3JkX3R5cGVzOiBBTk9NX0FCRU5ECiAgICBhY3Rpb246IGNyYXNoZWQtcHJvZ3JhbQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBbY29tbSwgZXhlXQogICAgICBzZWNvbmRhcnk6IHBpZAogICAgICB3aGF0OiBwcm9jZXNzCiAgICBob3c6IHNpZwogICAgZWNzOgogICAgICAjIGNvbnNpZGVyIGFkZGluZyBhbiBhbm9tYWx5IGNhdGVnb3J5IHdoZW4gd2UgaW50cm9kdWNlCiAgICAgICMgdG8gRUNTCiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogZW5kCiAgIyBBVURJVF9BTk9NX0VYRUMgLSBFeGVjdXRpb24gb2YgZmlsZQogIC0gcmVjb3JkX3R5cGVzOiBBTk9NX0VYRUMKICAgIGFjdGlvbjogYXR0ZW1wdGVkLWV4ZWN1dGlvbi1vZi1mb3JiaWRkZW4tcHJvZ3JhbQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBjbWQKICAgICAgd2hhdDogcHJvY2VzcwogICAgaG93OiB0ZXJtaW5hbAogICAgZWNzOgogICAgICAjIGNvbnNpZGVyIGFkZGluZyBhbiBhbm9tYWx5IGNhdGVnb3J5IHdoZW4gd2UgaW50cm9kdWNlCiAgICAgICMgdG8gRUNTCiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogc3RhcnQKICAjIEFVRElUX0FOT01fTElOSyAtIFN1c3BpY2lvdXMgdXNlIG9mIGZpbGUgbGlua3MKICAtIHJlY29yZF90eXBlczogQU5PTV9MSU5LCiAgICBhY3Rpb246IHVzZWQtc3VzcGljaW91cy1saW5rCiAgIyBBVURJVF9BTk9NX0xPR0lOX0ZBSUxVUkVTIC0gRmFpbGVkIGxvZ2luIGxpbWl0IHJlYWNoZWQKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IEFOT01fTE9HSU5fRkFJTFVSRVMKICAgIGFjdGlvbjogZmFpbGVkLWxvZy1pbi10b28tbWFueS10aW1lcy10bwogICMgQVVESVRfQU5PTV9MT0dJTl9MT0NBVElPTiAtIExvZ2luIGZyb20gZm9yYmlkZGVuIGxvY2F0aW9uCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBBTk9NX0xPR0lOX0xPQ0FUSU9OCiAgICBhY3Rpb246IGF0dGVtcHRlZC1sb2ctaW4tZnJvbS11bnVzdWFsLXBsYWNlLXRvCiAgIyBBVURJVF9BTk9NX0xPR0lOX1NFU1NJT05TIC0gTWF4IGNvbmN1cnJlbnQgc2Vzc2lvbnMgcmVhY2hlZAogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogQU5PTV9MT0dJTl9TRVNTSU9OUwogICAgYWN0aW9uOiBvcGVuZWQtdG9vLW1hbnktc2Vzc2lvbnMtdG8KICAjIEFVRElUX0FOT01fTE9HSU5fVElNRSAtIExvZ2luIGF0dGVtcHRlZCBhdCBiYWQgdGltZQogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogQU5PTV9MT0dJTl9USU1FCiAgICBhY3Rpb246IGF0dGVtcHRlZC1sb2ctaW4tZHVyaW5nLXVudXN1YWwtaG91ci10bwogICMgQVVESVRfQU5PTV9QUk9NSVNDVU9VUyAtIERldmljZSBjaGFuZ2VkIHByb21pc2N1b3VzIG1vZGUKICAtIHJlY29yZF90eXBlczogQU5PTV9QUk9NSVNDVU9VUwogICAgYWN0aW9uOiBjaGFuZ2VkLXByb21pc2N1b3VzLW1vZGUtb24tZGV2aWNlICMgQ291bGQgYmUgZW50ZXJlZCBvciBleGl0ZWQgYmFzZWQgb24gcHJvbSBmaWVsZC4KICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogZGV2CiAgICAgIHdoYXQ6IG5ldHdvcmstZGV2aWNlCiAgIyBBVURJVF9BTk9NX1JCQUNfSU5URUdSSVRZX0ZBSUwgLSBSQkFDIGZpbGUgaW50ZWdyaXR5IGZhaWx1cmUKICAtIHJlY29yZF90eXBlczogQU5PTV9SQkFDX0lOVEVHUklUWV9GQUlMCiAgICBhY3Rpb246IHRlc3RlZC1maWxlLXN5c3RlbS1pbnRlZ3JpdHktb2YKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogaG9zdG5hbWUKICAgICAgd2hhdDogZmlsZXN5c3RlbQogICMgQVVESVRfQU5PTV9MT0dJTl9BQ0NUIC0gTG9naW4gYXR0ZW1wdGVkIHRvIHdhdGNoZWQgYWNjdAogICMgQVVESVRfQU5PTV9NQVhfREFDIC0gTWF4IERBQyBmYWlsdXJlcyByZWFjaGVkCiAgIyBBVURJVF9BTk9NX01BWF9NQUMgLSBNYXggTUFDIGZhaWx1cmVzIHJlYWNoZWQKICAjIEFVRElUX0FOT01fQU1UVV9GQUlMIC0gQU1UVSBmYWlsdXJlCiAgIyBBVURJVF9BTk9NX1JCQUNfRkFJTCAtIFJCQUMgc2VsZiB0ZXN0IGZhaWx1cmUKICAjIEFVRElUX0FOT01fQ1JZUFRPX0ZBSUwgLSBDcnlwdG8gc3lzdGVtIHRlc3QgZmFpbHVyZQogICMgQVVESVRfQU5PTV9NS19FWEUgLSBNYWtlIGFuIGV4ZWN1dGFibGUKICAjIEFVRElUX0FOT01fQUNDRVNTX0ZTIC0gQWNjZXNzIG9mIGZpbGUgb3IgZGlyCiAgIyBBVURJVF9BTk9NX0FERF9BQ0NUIC0gQWRkaW5nIGFuIGFjY3QKICAjIEFVRElUX0FOT01fREVMX0FDQ1QgLSBEZWxldGluZyBhbiBhY2N0CiAgIyBBVURJVF9BTk9NX01PRF9BQ0NUIC0gQ2hhbmdpbmcgYW4gYWNjdAogICMgQVVESVRfQU5PTV9ST09UX1RSQU5TIC0gVXNlciBiZWNhbWUgcm9vdAogICMgQVVESVRfQU5PTV9MT0dJTl9TRVJWSUNFIC0gU2VydmljZSBhY2N0IGF0dGVtcHRlZCBsb2dpbgoKICAjIEFub21hbHkgcmVzcG9uc2VzCgogICMgQVVESVRfUkVTUF9BTk9NQUxZIC0gQW5vbWFseSBub3QgcmVhY3RlZCB0bwogICMgQVVESVRfUkVTUF9BTEVSVCAtIEFsZXJ0IGVtYWlsIHdhcyBzZW50CiAgIyBBVURJVF9SRVNQX0tJTExfUFJPQyAtIEtpbGwgcHJvZ3JhbQogICMgQVVESVRfUkVTUF9URVJNX0FDQ0VTUyAtIFRlcm1pbmF0ZSBzZXNzaW9uCiAgIyBBVURJVF9SRVNQX0FDQ1RfUkVNT1RFIC0gQWNjdCBsb2NrZWQgZnJvbSByZW1vdGUgYWNjZXNzCiAgIyBBVURJVF9SRVNQX0FDQ1RfTE9DS19USU1FRCAtIFVzZXIgYWNjdCBsb2NrZWQgZm9yIHRpbWUKICAjIEFVRElUX1JFU1BfQUNDVF9VTkxPQ0tfVElNRUQgLSBVc2VyIGFjY3QgdW5sb2NrZWQgZnJvbSB0aW1lCiAgIyBBVURJVF9SRVNQX0FDQ1RfTE9DSyAtIFVzZXIgYWNjdCB3YXMgbG9ja2VkCiAgIyBBVURJVF9SRVNQX1RFUk1fTE9DSyAtIFRlcm1pbmFsIHdhcyBsb2NrZWQKICAjIEFVRElUX1JFU1BfU0VCT09MIC0gU2V0IGFuIFNFIExpbnV4IGJvb2xlYW4KICAjIEFVRElUX1JFU1BfRVhFQyAtIEV4ZWN1dGUgYSBzY3JpcHQKICAjIEFVRElUX1JFU1BfU0lOR0xFIC0gR28gdG8gc2luZ2xlIHVzZXIgbW9kZQogICMgQVVESVRfUkVTUF9IQUxUIC0gdGFrZSB0aGUgc3lzdGVtIGRvd24KICAjIEFVRElUX1JFU1BfT1JJR0lOX0JMT0NLIC0gQWRkcmVzcyBibG9ja2VkIGJ5IGlwdGFibGVzCiAgIyBBVURJVF9SRVNQX09SSUdJTl9CTE9DS19USU1FRCAtIEFkZHJlc3MgYmxvY2tlZCBmb3IgdGltZQoKICAjIEF1ZGl0IHJ1bGUgZXZlbnRzCgogICMgQVVESVRfU1lTQ0FMTCAtIFN5c2NhbGwgZXZlbnQKICAjIEFVRElUX1BBVEggLSBGaWxlbmFtZSBwYXRoIGluZm9ybWF0aW9uCiAgIyBBVURJVF9JUEMgLSBJUEMgcmVjb3JkCiAgIyBBVURJVF9TT0NLRVRDQUxMIC0gc3lzX3NvY2tldGNhbGwgYXJndW1lbnRzCiAgIyBBVURJVF9TT0NLQUREUiAtIHNvY2thZGRyIGNvcGllZCBhcyBzeXNjYWxsIGFyZwogICMgQVVESVRfQ1dEIC0gQ3VycmVudCB3b3JraW5nIGRpcmVjdG9yeQogICMgQVVESVRfRVhFQ1ZFIC0gZXhlY3ZlIGFyZ3VtZW50cwogICMgQVVESVRfSVBDX1NFVF9QRVJNIC0gSVBDIG5ldyBwZXJtaXNzaW9ucyByZWNvcmQgdHlwZQogICMgQVVESVRfTVFfT1BFTiAtIFBPU0lYIE1RIG9wZW4gcmVjb3JkIHR5cGUKICAjIEFVRElUX01RX1NFTkRSRUNWLSBQT1NJWCBNUSBzZW5kL3JlY2VpdmUgcmVjb3JkIHR5cGUKICAjIEFVRElUX01RX05PVElGWSAtIFBPU0lYIE1RIG5vdGlmeSByZWNvcmQgdHlwZQogICMgQVVESVRfTVFfR0VUU0VUQVRUUiAtIFBPU0lYIE1RIGdldC9zZXQgYXR0cmlidXRlIHJlY29yZCB0eXBlCiAgIyBBVURJVF9GRF9QQUlSIC0gYXVkaXQgcmVjb3JkIGZvciBwaXBlL3NvY2tldHBhaXIKICAjIEFVRElUX09CSl9QSUQgLSBwdHJhY2UgdGFyZ2V0CiAgIyBBVURJVF9CUFJNX0ZDQVBTIC0gSW5mb3JtYXRpb24gYWJvdXQgZmNhcHMgaW5jcmVhc2luZyBwZXJtcwogICMgQVVESVRfQ0FQU0VUIC0gUmVjb3JkIHNob3dpbmcgYXJndW1lbnQgdG8gc3lzX2NhcHNldAogICMgQVVESVRfTU1BUCAtIFJlY29yZCBzaG93aW5nIGRlc2NyaXB0b3IgYW5kIGZsYWdzIGluIG1tYXAKICAjIEFVRElUX05FVEZJTFRFUl9QS1QgLSBQYWNrZXRzIHRyYXZlcnNpbmcgbmV0ZmlsdGVyIGNoYWlucwoKICAjIEludGVncml0eSBjaGVja3MKCiAgIyBBVURJVF9JTlRFR1JJVFlfREFUQSAtIERhdGEgaW50ZWdyaXR5IHZlcmlmaWNhdGlvbgogICMgQVVESVRfSU5URUdSSVRZX01FVEFEQVRBIC0gTWV0YWRhdGEgaW50ZWdyaXR5IHZlcmlmaWNhdGlvbgogICMgQVVESVRfSU5URUdSSVRZX1NUQVRVUyAtIEludGVncml0eSBlbmFibGUgc3RhdHVzCiAgIyBBVURJVF9JTlRFR1JJVFlfSEFTSCAtIEludGVncml0eSBIQVNIIHR5cGUKICAjIEFVRElUX0lOVEVHUklUWV9QQ1IgLSBQQ1IgaW52YWxpZGF0aW9uIG1zZ3MKICAjIEFVRElUX0lOVEVHUklUWV9SVUxFIC0gUG9saWN5IHJ1bGUKCiAgIyBWYXJpb3VzCgogICMgQVVESVRfVVNFUiAtIE1lc3NhZ2UgZnJvbSB1c2Vyc3BhY2UgLS0gZGVwcmVjYXRlZAogIC0gcmVjb3JkX3R5cGVzOiBVU0VSCiAgICBhY3Rpb246IHNlbnQtbWVzc2FnZQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBhZGRyCg==") assets["normalizationData"] = value } From 117b2abf4a3445fec0c7755c22a0cdc124d80ad9 Mon Sep 17 00:00:00 2001 From: Adrian Serrano Date: Thu, 21 Jan 2021 19:11:37 +0100 Subject: [PATCH 05/15] Rename actor.* to subject.* to align with normalizations yml --- aucoalesce/normalizations.yaml | 30 +++++++++++++++--------------- aucoalesce/normalize.go | 4 ++-- aucoalesce/znormalize_data.go | 2 +- 3 files changed, 18 insertions(+), 18 deletions(-) diff --git a/aucoalesce/normalizations.yaml b/aucoalesce/normalizations.yaml index c431d09..cdb6a96 100644 --- a/aucoalesce/normalizations.yaml +++ b/aucoalesce/normalizations.yaml @@ -41,9 +41,9 @@ macros: category: authentication type: info mappings: - - from: actor.primary + - from: subject.primary to: user - - from: actor.secondary + - from: subject.secondary to: user.effective - &ecs-host @@ -70,18 +70,18 @@ macros: - &ecs-user-modification-mappings mappings: - - from: actor.primary + - from: subject.primary to: user - - from: actor.secondary + - from: subject.secondary to: user.effective - from: object.primary to: user.target - &ecs-group-modification-mappings mappings: - - from: actor.primary + - from: subject.primary to: user - - from: actor.secondary + - from: subject.secondary to: user.effective - from: object.primary to: group.target @@ -923,9 +923,9 @@ normalizations: - group - change mappings: - - from: actor.primary + - from: subject.primary to: user - - from: actor.secondary + - from: subject.secondary to: group.target - from: uid.uid to: user.effective @@ -968,9 +968,9 @@ normalizations: - user - change mappings: - - from: actor.primary + - from: subject.primary to: user - - from: actor.secondary + - from: subject.secondary to: user.target - from: uid.uid to: user.effective @@ -984,11 +984,11 @@ normalizations: - user - change mappings: - - from: actor.primary + - from: subject.primary to: user - from: uid.uid to: user.effective - - from: actor.secondary + - from: subject.secondary to: user.target # AUDIT_GRP_CHAUTHTOK - Group acct password or pin changed @@ -1004,11 +1004,11 @@ normalizations: - group - change mappings: - - from: actor.primary + - from: subject.primary to: user - from: uid.uid to: user.effective - - from: actor.secondary + - from: subject.secondary to: group.target # Authentication related events @@ -1045,7 +1045,7 @@ normalizations: <<: *ecs-auth type: start mappings: - - from: actor.primary + - from: subject.primary to: user - from: object.primary to: user.effective diff --git a/aucoalesce/normalize.go b/aucoalesce/normalize.go index 6c68376..ec6db0a 100644 --- a/aucoalesce/normalize.go +++ b/aucoalesce/normalize.go @@ -105,10 +105,10 @@ type writeReference func(*Event, string) var ( fromFieldReferences = map[string]readReference{ - "actor.primary": func(event *Event) string { + "subject.primary": func(event *Event) string { return event.Summary.Actor.Primary }, - "actor.secondary": func(event *Event) string { + "subject.secondary": func(event *Event) string { return event.Summary.Actor.Secondary }, "object.primary": func(event *Event) string { diff --git a/aucoalesce/znormalize_data.go b/aucoalesce/znormalize_data.go index d1eb653..a60fcc5 100644 --- a/aucoalesce/znormalize_data.go +++ b/aucoalesce/znormalize_data.go @@ -31,7 +31,7 @@ func asset(key string) ([]byte, error) { assets = map[string][]byte{} var value []byte - value, _ = base64.StdEncoding.DecodeString("LS0tCiMgTWFjcm9zIGRlY2xhcmVzIHNvbWUgWUFNTCBhbmNob3JzIHRoYXQgY2FuIGJlIHJlZmVyZW5jZWQgZm9yIHNvbWUgY29tbW9uCiMgb2JqZWN0IHR5cGUgbm9ybWFsaXphdGlvbnMgbGlrZSB1c2VyLXNlc3Npb24sIHNvY2tldCwgb3IgcHJvY2Vzcy4KbWFjcm9zOgogIC0gJmRlZmF1bHRzCiAgICBzdWJqZWN0OgogICAgICBwcmltYXJ5OiBhdWlkCiAgICAgIHNlY29uZGFyeTogdWlkCiAgICBob3c6IFtleGUsIGNvbW1dCgogIC0gJm1hY3JvLXVzZXItc2Vzc2lvbgogICAgc3ViamVjdDoKICAgICAgcHJpbWFyeTogYXVpZAogICAgICBzZWNvbmRhcnk6IFthY2N0LCBpZCwgdWlkXQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiB0ZXJtaW5hbAogICAgICBzZWNvbmRhcnk6IFthZGRyLCBob3N0bmFtZV0KICAgICAgd2hhdDogdXNlci1zZXNzaW9uCiAgICBob3c6IFtleGUsIHRlcm1pbmFsXQoKICAtICZtYWNyby1zb2NrZXQKICAgIDw8OiAqZGVmYXVsdHMKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogW2FkZHIsIHBhdGhdCiAgICAgIHNlY29uZGFyeTogcG9ydAogICAgICB3aGF0OiBzb2NrZXQKCiAgLSAmbWFjcm8tcHJvY2VzcwogICAgPDw6ICpkZWZhdWx0cwogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBbY21kLCBleGUsIGNvbW1dCiAgICAgIHNlY29uZGFyeTogcGlkCiAgICAgIHdoYXQ6IHByb2Nlc3MKICAgIGhvdzogdGVybWluYWwKCiAgLSAmZWNzLWlhbQogICAgY2F0ZWdvcnk6IGlhbQogICAgdHlwZTogaW5mbwoKICAtICZlY3MtYXV0aAogICAgY2F0ZWdvcnk6IGF1dGhlbnRpY2F0aW9uCiAgICB0eXBlOiBpbmZvCiAgICBtYXBwaW5nczoKICAgICAgLSBmcm9tOiBhY3Rvci5wcmltYXJ5CiAgICAgICAgdG86IHVzZXIKICAgICAgLSBmcm9tOiBhY3Rvci5zZWNvbmRhcnkKICAgICAgICB0bzogdXNlci5lZmZlY3RpdmUKCiAgLSAmZWNzLWhvc3QKICAgIGNhdGVnb3J5OiBob3N0CiAgICB0eXBlOiBpbmZvCgogIC0gJmVjcy1wcm9jZXNzCiAgICBjYXRlZ29yeTogcHJvY2VzcwogICAgdHlwZTogaW5mbwoKICAtICZlY3MtZmlsZQogICAgY2F0ZWdvcnk6IGZpbGUKICAgIHR5cGU6IGluZm8KCiAgLSAmZWNzLWRyaXZlcgogICAgY2F0ZWdvcnk6IGRyaXZlcgogICAgdHlwZTogaW5mbwoKICAtICZlY3MtbmV0d29yawogICAgY2F0ZWdvcnk6IG5ldHdvcmsKICAgIHR5cGU6CiAgICAgIC0gY29ubmVjdGlvbgogICAgICAtIGluZm8KCiAgLSAmZWNzLXVzZXItbW9kaWZpY2F0aW9uLW1hcHBpbmdzCiAgICBtYXBwaW5nczoKICAgICAgLSBmcm9tOiBhY3Rvci5wcmltYXJ5CiAgICAgICAgdG86IHVzZXIKICAgICAgLSBmcm9tOiBhY3Rvci5zZWNvbmRhcnkKICAgICAgICB0bzogdXNlci5lZmZlY3RpdmUKICAgICAgLSBmcm9tOiBvYmplY3QucHJpbWFyeQogICAgICAgIHRvOiB1c2VyLnRhcmdldAoKICAtICZlY3MtZ3JvdXAtbW9kaWZpY2F0aW9uLW1hcHBpbmdzCiAgICBtYXBwaW5nczoKICAgICAgLSBmcm9tOiBhY3Rvci5wcmltYXJ5CiAgICAgICAgdG86IHVzZXIKICAgICAgLSBmcm9tOiBhY3Rvci5zZWNvbmRhcnkKICAgICAgICB0bzogdXNlci5lZmZlY3RpdmUKICAgICAgLSBmcm9tOiBvYmplY3QucHJpbWFyeQogICAgICAgIHRvOiBncm91cC50YXJnZXQKCiMgTm9ybWFsaXphdGlvbnMgaXMgYSBsaXN0IG9mIGRlY2xhcmF0aW9ucyBzcGVjaWZ5aW5nIGhvdyB0byBub3JtYWxpemUgdGhlIGRhdGEKIyBjb250YWluZWQgaW4gYW4gZXZlbnQuIFRoZSBub3JtYWxpemF0aW9uIGNhbiBiZSBhcHBsaWVkIGJhc2VkIG9uIHRoZSBzeXNjYWxsCiMgbmFtZSAoZS5nLiBjb25uZWN0LCBvcGVuKSBvciBiYXNlZCBvbiB0aGUgcmVjb3JkIHR5cGUgKGUuZy4gVVNFUl9MT0dJTikuCiMgTm8gdHdvIG5vcm1hbGl6YXRpb25zIGNhbiBhcHBseSB0byB0aGUgc2FtZSBzeXNjYWxsIG9yIHJlY29yZCB0eXBlLiBUaGlzCiMgd2lsbCByZXN1bHQgaW4gYSBmYWlsdXJlIGF0IGxvYWQgdGltZS4KIwojIEVhY2ggbm9ybWFsaXphdGlvbiBzaG91bGQgc3BlY2lmeToKIyAgIGFjdGlvbiAtIHdoYXQgaGFwcGVuZWQKIyAgIGFjdG9yICAtIHdobyBkaWQgdGhpcyBvciB3aG8gdHJpZ2dlcmVkIHRoZSBldmVudAojICAgb2JqZWN0IC0gd2hhdCB3YXMgdGhlICJ0aGluZyIgaW52b2x2ZWQgaW4gdGhlIGFjdGlvbiAoZS5nLiBwcm9jZXNzLCBzb2NrZXQpCiMgICBob3cgICAgLSBob3cgd2FzIHRoZSBhY3Rpb24gcGVyZm9ybWVkIChlLmcuIGV4ZSBvciB0ZXJtaW5hbCkKbm9ybWFsaXphdGlvbnM6CiAgLSBlY3M6ICplY3MtcHJvY2VzcwogICAgc3lzY2FsbHM6CiAgICAgIC0gJyonICMgdGhpcyBpcyBhIGNhdGNoIGFsbAogIC0gYWN0aW9uOiBvcGVuZWQtZmlsZQogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBjcmVhdCAtIG9wZW4gYW5kIHBvc3NpYmx5IGNyZWF0ZSBhIGZpbGUKICAgICAgLSBjcmVhdAogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgIHR5cGU6IGNyZWF0aW9uCiAgLSBhY3Rpb246IG9wZW5lZC1maWxlCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIGZhbGxvY2F0ZSAtIG1hbmlwdWxhdGUgZmlsZSBzcGFjZQogICAgICAtIGZhbGxvY2F0ZQogICAgICAjIHRydW5jYXRlIC0gdHJ1bmNhdGUgYSBmaWxlIHRvIGEgc3BlY2lmaWVkIGxlbmd0aAogICAgICAtIHRydW5jYXRlCiAgICAgICMgZnRydW5jYXRlIC0gdHJ1bmNhdGUgYSBmaWxlIHRvIGEgc3BlY2lmaWVkIGxlbmd0aAogICAgICAtIGZ0cnVuY2F0ZQogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgICMgdGVjaG5pY2FsbHkgeW91IGNhbiB0cnVuY2F0ZSBhIGZpbGUgdG8gdGhlIHNhbWUgbGVuZ3RoCiAgICAgICMgYnV0IHJlZ2FyZGxlc3MsIHdlIGNvbnNpZGVyIHRoaXMgYSBjaGFuZ2UKICAgICAgdHlwZTogY2hhbmdlCiAgLSBhY3Rpb246IG9wZW5lZC1maWxlCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIG9wZW4gLSBvcGVuIGFuZCBwb3NzaWJseSBjcmVhdGUgYSBmaWxlCiAgICAgIC0gb3BlbgogICAgICAjIG9wZW5hdCAtIG9wZW4gYW5kIHBvc3NpYmx5IGNyZWF0ZSBhIGZpbGUKICAgICAgLSBvcGVuYXQKICAgICAgIyByZWFkbGluayAtIHJlYWQgdmFsdWUgb2YgYSBzeW1ib2xpYyBsaW5rCiAgICAgIC0gcmVhZGxpbmsKICAgICAgIyByZWFkbGlua2F0IC0gcmVhZCB2YWx1ZSBvZiBhIHN5bWJvbGljIGxpbmsKICAgICAgLSByZWFkbGlua2F0CiAgICBlY3M6ICplY3MtZmlsZQogIC0gYWN0aW9uOiByZWFkLWZpbGUKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgc3lzY2FsbHM6CiAgICAgICMgcmVhZCAtIHJlYWQgZnJvbSBhIGZpbGUgZGVzY3JpcHRvcgogICAgICAtIHJlYWQKICAgIGVjczogKmVjcy1maWxlCiAgLSBhY3Rpb246IHdyb3RlLXRvLWZpbGUKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgc3lzY2FsbHM6CiAgICAgICMgd3JpdGUgLSB3cml0ZSB0byBhIGZpbGUgZGVzY3JpcHRvcgogICAgICAtIHdyaXRlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgdHlwZTogY2hhbmdlCiAgLSBhY3Rpb246IGNoYW5nZWQtZmlsZS1hdHRyaWJ1dGVzLW9mCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIHNldHhhdHRyIC0gc2V0IGFuIGV4dGVuZGVkIGF0dHJpYnV0ZSB2YWx1ZQogICAgICAtIHNldHhhdHRyCiAgICAgICMgZnNldHhhdHRyIC0gc2V0IGFuIGV4dGVuZGVkIGF0dHJpYnV0ZSB2YWx1ZQogICAgICAtIGZzZXR4YXR0cgogICAgICAjIGxzZXR4YXR0ciAtIHNldCBhbiBleHRlbmRlZCBhdHRyaWJ1dGUgdmFsdWUKICAgICAgLSBsc2V0eGF0dHIKICAgICAgIyByZW1vdmV4YXR0ciAtIHJlbW92ZSBhbiBleHRlbmRlZCBhdHRyaWJ1dGUKICAgICAgLSByZW1vdmV4YXR0cgogICAgICAjIGZyZW1vdmV4YXR0ciAtIHJlbW92ZSBhbiBleHRlbmRlZCBhdHRyaWJ1dGUKICAgICAgLSBmcmVtb3ZleGF0dHIKICAgICAgIyBscmVtb3ZleGF0dHIgLSByZW1vdmUgYW4gZXh0ZW5kZWQgYXR0cmlidXRlCiAgICAgIC0gbHJlbW92ZXhhdHRyCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgdHlwZTogY2hhbmdlCiAgLSBhY3Rpb246IGNoYW5nZWQtZmlsZS1wZXJtaXNzaW9ucy1vZgogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBjaG1vZCAtIGNoYW5nZSBwZXJtaXNzaW9ucyBvZiBhIGZpbGUKICAgICAgLSBjaG1vZAogICAgICAjIGZjaG1vZCAtIGNoYW5nZSBwZXJtaXNzaW9ucyBvZiBhIGZpbGUKICAgICAgLSBmY2htb2QKICAgICAgIyBmY2htb2RhdCAtIGNoYW5nZSBwZXJtaXNzaW9ucyBvZiBhIGZpbGUKICAgICAgLSBmY2htb2RhdAogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgIHR5cGU6IGNoYW5nZQogIC0gYWN0aW9uOiBjaGFuZ2VkLWZpbGUtb3duZXJzaGlwLW9mCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIGNob3duIC0gY2hhbmdlIG93bmVyc2hpcCBvZiBhIGZpbGUKICAgICAgLSBjaG93bgogICAgICAjIGZjaG93biAtIGNoYW5nZSBvd25lcnNoaXAgb2YgYSBmaWxlCiAgICAgIC0gZmNob3duCiAgICAgICMgZmNob3duYXQgLSBjaGFuZ2Ugb3duZXJzaGlwIG9mIGEgZmlsZQogICAgICAtIGZjaG93bmF0CiAgICAgICMgbGNob3duIC0gY2hhbmdlIG93bmVyc2hpcCBvZiBhIGZpbGUKICAgICAgLSBsY2hvd24KICAgIGVjczoKICAgICAgPDw6ICplY3MtZmlsZQogICAgICB0eXBlOiBjaGFuZ2UKICAtIGFjdGlvbjogbG9hZGVkLWtlcm5lbC1tb2R1bGUKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgICBwcmltYXJ5OiBuYW1lCiAgICByZWNvcmRfdHlwZXM6CiAgICAgIC0gS0VSTl9NT0RVTEUKICAgIHN5c2NhbGxzOgogICAgICAjIGZpbml0X21vZHVsZSAtIGxvYWQgYSBrZXJuZWwgbW9kdWxlCiAgICAgIC0gZmluaXRfbW9kdWxlCiAgICAgICMgaW5pdF9tb2R1bGUgLSBsb2FkIGEga2VybmVsIG1vZHVsZQogICAgICAtIGluaXRfbW9kdWxlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWRyaXZlcgogICAgICB0eXBlOiBzdGFydAogIC0gYWN0aW9uOiB1bmxvYWRlZC1rZXJuZWwtbW9kdWxlCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIGRlbGV0ZV9tb2R1bGUgLSB1bmxvYWQgYSBrZXJuZWwgbW9kdWxlCiAgICAgIC0gZGVsZXRlX21vZHVsZQogICAgZWNzOgogICAgICA8PDogKmVjcy1kcml2ZXIKICAgICAgdHlwZTogZW5kCiAgLSBhY3Rpb246IGNyZWF0ZWQtZGlyZWN0b3J5CiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgICAgcGF0aF9pbmRleDogMQogICAgc3lzY2FsbHM6CiAgICAgICMgbWtkaXIgLSBjcmVhdGUgYSBkaXJlY3RvcnkKICAgICAgLSBta2RpcgogICAgICAjIG1rZGlyYXQgLSBjcmVhdGUgYSBkaXJlY3RvcnkKICAgICAgLSBta2RpcmF0CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgdHlwZTogY3JlYXRpb24KICAtIGFjdGlvbjogbW91bnRlZAogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlc3lzdGVtCiAgICAgIHBhdGhfaW5kZXg6IDEKICAgIHN5c2NhbGxzOgogICAgICAjIG1vdW50IC0gbW91bnQgZmlsZXN5c3RlbQogICAgICAtIG1vdW50CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgIyBzaW5jZSBhIG5ldyBtb3VudCBhcHBlYXJzIG9uIHRoZSBzeXN0ZW0KICAgICAgIyB3ZSBjb25zaWRlciB0aGlzIGEgaGlnaC1sZXZlbCAiY3JlYXRpb24iIGV2ZW50CiAgICAgIHR5cGU6IGNyZWF0aW9uCiAgLSBhY3Rpb246IHJlbmFtZWQKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgICBwYXRoX2luZGV4OiAyCiAgICBzeXNjYWxsczoKICAgICAgIyByZW5hbWUgLSBjaGFuZ2UgdGhlIG5hbWUgb3IgbG9jYXRpb24gb2YgYSBmaWxlCiAgICAgIC0gcmVuYW1lCiAgICAgICMgcmVuYW1lYXQgLSBjaGFuZ2UgdGhlIG5hbWUgb3IgbG9jYXRpb24gb2YgYSBmaWxlCiAgICAgIC0gcmVuYW1lYXQKICAgICAgIyByZW5hbWVhdDIgLSBjaGFuZ2UgdGhlIG5hbWUgb3IgbG9jYXRpb24gb2YgYSBmaWxlCiAgICAgIC0gcmVuYW1lYXQyCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgdHlwZTogY2hhbmdlCiAgLSBhY3Rpb246IGNoZWNrZWQtbWV0YWRhdGEtb2YKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgc3lzY2FsbHM6CiAgICAgICMgYWNjZXNzIC0gY2hlY2sgdXNlcidzIHBlcm1pc3Npb25zIGZvciBhIGZpbGUKICAgICAgLSBhY2Nlc3MKICAgICAgIyBmYWNjZXNzYXQgLSBjaGVjayB1c2VyJ3MgcGVybWlzc2lvbnMgZm9yIGEgZmlsZQogICAgICAtIGZhY2Nlc3NhdAogICAgICAjIGZzdGF0YXQgLSBnZXQgZmlsZSBzdGF0dXMKICAgICAgLSBmc3RhdGF0CiAgICAgICMgbmV3ZnN0YXRhdCAtIGdldCBmaWxlIHN0YXR1cwogICAgICAtIG5ld2ZzdGF0YXQKICAgICAgIyBzdGF0IC0gZ2V0IGZpbGUgc3RhdHVzCiAgICAgIC0gc3RhdAogICAgICAjIHN0YXQ2NCAtIGdldCBmaWxlIHN0YXR1cwogICAgICAtIHN0YXQ2NAogICAgICAjIGZzdGF0IC0gZ2V0IGZpbGUgc3RhdHVzCiAgICAgIC0gZnN0YXQKICAgICAgIyBsc3RhdCAtIGdldCBmaWxlIHN0YXR1cwogICAgICAtIGxzdGF0CiAgICAgICMgZ2V0eGF0dHIgLSByZXRyaWV2ZSBhbiBleHRlbmRlZCBhdHRyaWJ1dGUgdmFsdWUKICAgICAgLSBnZXR4YXR0cgogICAgICAjIGxnZXR4YXR0ciAtIHJldHJpZXZlIGFuIGV4dGVuZGVkIGF0dHJpYnV0ZSB2YWx1ZQogICAgICAtIGxnZXR4YXR0cgogICAgICAjIGZnZXR4YXR0ciAtIHJldHJpZXZlIGFuIGV4dGVuZGVkIGF0dHJpYnV0ZSB2YWx1ZQogICAgICAtIGZnZXR4YXR0cgogICAgZWNzOiAqZWNzLWZpbGUKICAtIGFjdGlvbjogY2hlY2tlZC1maWxlc3lzdGVtLW1ldGFkYXRhLW9mCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGVzeXN0ZW0KICAgIHN5c2NhbGxzOgogICAgICAjIHN0YXRmcyAtIGdldCBmaWxlc3lzdGVtIHN0YXRpc3RpY3MKICAgICAgLSBzdGF0ZnMKICAgICAgIyBmc3RhdGZzIC0gZ2V0IGZpbGVzeXN0ZW0gc3RhdGlzdGljcwogICAgICAtIGZzdGF0ZnMKICAgIGVjczogKmVjcy1maWxlCiAgLSBhY3Rpb246IHN5bWxpbmtlZAogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBzeW1saW5rIC0gbWFrZSBhIG5ldyBuYW1lIGZvciBhIGZpbGUKICAgICAgLSBzeW1saW5rCiAgICAgICMgc3ltbGlua2F0IC0gbWFrZSBhIG5ldyBuYW1lIGZvciBhIGZpbGUKICAgICAgLSBzeW1saW5rYXQKICAgIGVjczoKICAgICAgPDw6ICplY3MtZmlsZQogICAgICAjICJjcmVhdGlvbiIgc2luY2Ugd2UncmUgY3JlYXRpbmcgYSBuZXcgZmlsZSBzeXN0ZW0KICAgICAgIyBlbnRyeSBmb3IgdGhlIHN5bWxpbmsKICAgICAgdHlwZTogY3JlYXRpb24KICAtIGFjdGlvbjogdW5tb3VudGVkCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGVzeXN0ZW0KICAgIHN5c2NhbGxzOgogICAgICAjIHVtb3VudCAtIHVubW91bnQgZmlsZXN5c3RlbQogICAgICAtIHVtb3VudAogICAgICAjIHVtb3VudDIgLSB1bm1vdW50IGZpbGVzeXN0ZW0KICAgICAgLSB1bW91bnQyCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgIyAiZGVsZXRpb24iIHRvIG1pcnJvciB0aGUgImNyZWF0aW9uIiBvZiB0aGUgbW91bnQKICAgICAgdHlwZTogZGVsZXRpb24KICAtIGFjdGlvbjogZGVsZXRlZAogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBybWRpciAtIGRlbGV0ZSBhIGRpcmVjdG9yeQogICAgICAtIHJtZGlyCiAgICAgICMgdW5saW5rIC0gZGVsZXRlIGEgbmFtZSBhbmQgcG9zc2libHkgdGhlIGZpbGUgaXQgcmVmZXJzIHRvCiAgICAgIC0gdW5saW5rCiAgICAgICMgdW5saW5rYXQgLSBkZWxldGUgYSBuYW1lIGFuZCBwb3NzaWJseSB0aGUgZmlsZSBpdCByZWZlcnMgdG8KICAgICAgLSB1bmxpbmthdAogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgIHR5cGU6IGRlbGV0aW9uCiAgLSBhY3Rpb246IGNoYW5nZWQtdGltZXN0YW1wLW9mCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIHV0aW1lIC0gY2hhbmdlIGZpbGUgbGFzdCBhY2Nlc3MgYW5kIG1vZGlmaWNhdGlvbiB0aW1lcwogICAgICAtIHV0aW1lCiAgICAgICMgdXRpbWVzIC0gY2hhbmdlIGZpbGUgbGFzdCBhY2Nlc3MgYW5kIG1vZGlmaWNhdGlvbiB0aW1lcwogICAgICAtIHV0aW1lcwogICAgICAjIGZ1dGltZXNhdCAtIGNoYW5nZSB0aW1lc3RhbXBzIG9mIGEgZmlsZSByZWxhdGl2ZSB0byBhIFwgZGlyZWN0b3J5IGZpbGUgZGVzY3JpcHRvcgogICAgICAtIGZ1dGltZXNhdAogICAgICAjIGZ1dGltZW5zIC0gY2hhbmdlIGZpbGUgdGltZXN0YW1wcyB3aXRoIG5hbm9zZWNvbmQgcHJlY2lzaW9uCiAgICAgIC0gZnV0aW1lbnMKICAgICAgIyB1dGltZW5zYXQgLSBjaGFuZ2UgZmlsZSB0aW1lc3RhbXBzIHdpdGggbmFub3NlY29uZCBwcmVjaXNpb24KICAgICAgLSB1dGltZW5zYXQKICAgIGVjczogKmVjcy1maWxlCiAgLSBhY3Rpb246IGV4ZWN1dGVkCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIGV4ZWN2ZSAtIGV4ZWN1dGUgcHJvZ3JhbQogICAgICAtIGV4ZWN2ZQogICAgICAjIGV4ZWN2ZWF0IC0gZXhlY3V0ZSBwcm9ncmFtIHJlbGF0aXZlIHRvIGEgZGlyZWN0b3J5IGZpbGUgZGVzY3JpcHRvcgogICAgICAtIGV4ZWN2ZWF0CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogc3RhcnQKICAtIGFjdGlvbjogbGlzdGVuLWZvci1jb25uZWN0aW9ucwogICAgb2JqZWN0OgogICAgICB3aGF0OiBzb2NrZXQKICAgIHN5c2NhbGxzOgogICAgICAjIGxpc3Rlbi0gbGlzdGVuIGZvciBjb25uZWN0aW9ucyBvbiBhIHNvY2tldAogICAgICAtIGxpc3RlbgogICAgZWNzOgogICAgICA8PDogKmVjcy1uZXR3b3JrCiAgICAgIHR5cGU6IHN0YXJ0CiAgLSBhY3Rpb246IGFjY2VwdGVkLWNvbm5lY3Rpb24tZnJvbQogICAgb2JqZWN0OgogICAgICB3aGF0OiBzb2NrZXQKICAgIHN5c2NhbGxzOgogICAgICAjIGFjY2VwdCAtIGFjY2VwdCBhIGNvbm5lY3Rpb24gb24gYSBzb2NrZXQKICAgICAgLSBhY2NlcHQKICAgICAgIyBhY2NlcHQ0IC0gYWNjZXB0IGEgY29ubmVjdGlvbiBvbiBhIHNvY2tldAogICAgICAtIGFjY2VwdDQKICAgIGVjczoKICAgICAgPDw6ICplY3MtbmV0d29yawogICAgICB0eXBlOgogICAgICAgIC0gY29ubmVjdGlvbgogICAgICAgIC0gc3RhcnQKICAtIGFjdGlvbjogYm91bmQtc29ja2V0CiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNvY2tldAogICAgc3lzY2FsbHM6CiAgICAgICMgYmluZCAtYmluZCBhIG5hbWUgdG8gYSBzb2NrZXQKICAgICAgLSBiaW5kCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLW5ldHdvcmsKICAgICAgdHlwZTogc3RhcnQKICAtIGFjdGlvbjogY29ubmVjdGVkLXRvCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNvY2tldAogICAgc3lzY2FsbHM6CiAgICAgIC0gY29ubmVjdAogICAgZWNzOgogICAgICA8PDogKmVjcy1uZXR3b3JrCiAgICAgIHR5cGU6CiAgICAgICAgLSBjb25uZWN0aW9uCiAgICAgICAgLSBzdGFydAogIC0gYWN0aW9uOiByZWNlaXZlZC1mcm9tCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNvY2tldAogICAgc3lzY2FsbHM6CiAgICAgICMgcmVjdiAtIHJlY2VpdmUgYSBtZXNzYWdlIGZyb20gYSBzb2NrZXQKICAgICAgLSByZWN2CiAgICAgICMgcmVjdmZyb20gLSByZWNlaXZlIGEgbWVzc2FnZSBmcm9tIGEgc29ja2V0CiAgICAgIC0gcmVjdmZyb20KICAgICAgIyByZWN2bXNnIC0gcmVjZWl2ZSBhIG1lc3NhZ2UgZnJvbSBhIHNvY2tldAogICAgICAtIHJlY3Ztc2cKICAgICAgIyByZWN2bW1zZyAtIHJlY2VpdmUgbXVsdGlwbGUgbWVzc2FnZXMgb24gYSBzb2NrZXQKICAgICAgLSByZWN2bW1zZwogICAgZWNzOgogICAgICA8PDogKmVjcy1uZXR3b3JrCiAgLSBhY3Rpb246IHNlbnQtdG8KICAgIG9iamVjdDoKICAgICAgd2hhdDogc29ja2V0CiAgICBzeXNjYWxsczoKICAgICAgIyBzZW5kIC0gc2VuZCBhIG1lc3NhZ2Ugb24gYSBzb2NrZXQKICAgICAgLSBzZW5kCiAgICAgICMgc2VuZHRvIC0gc2VuZCBhIG1lc3NhZ2Ugb24gYSBzb2NrZXQKICAgICAgLSBzZW5kdG8KICAgICAgIyBzZW5kbXNnIC0gc2VuZCBhIG1lc3NhZ2Ugb24gYSBzb2NrZXQKICAgICAgLSBzZW5kbXNnCiAgICAgICMgc2VuZG1tc2cgLSBzZW5kIG11bHRpcGxlIG1lc3NhZ2VzIG9uIGEgc29ja2V0CiAgICAgIC0gc2VuZG1tc2cKICAgIGVjczoKICAgICAgPDw6ICplY3MtbmV0d29yawogIC0gYWN0aW9uOiBraWxsZWQtcGlkCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHByb2Nlc3MKICAgIHN5c2NhbGxzOgogICAgICAjIGtpbGwgLSBzZW5kIHNpZ25hbCB0byBhIHByb2Nlc3MKICAgICAgLSBraWxsCiAgICAgICMgdGtpbGwgLSBzZW5kIGEgc2lnbmFsIHRvIGEgdGhyZWFkCiAgICAgIC0gdGtpbGwKICAgICAgIyB0Z2tpbGwgLSBzZW5kIGEgc2lnbmFsIHRvIGEgdGhyZWFkCiAgICAgIC0gdGdraWxsCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogZW5kCiAgLSBhY3Rpb246IGNoYW5nZWQtaWRlbnRpdHktb2YKICAgIG9iamVjdDoKICAgICAgd2hhdDogcHJvY2VzcwogICAgaG93OiBzeXNjYWxsCiAgICBzeXNjYWxsczoKICAgICAgIyBzZXR1aWQgLSBzZXQgdXNlciBpZGVudGl0eQogICAgICAtIHNldHVpZAogICAgICAjIHNldGV1aWQgLSBzZXQgZWZmZWN0aXZlIHVzZXIgb3IgZ3JvdXAgSUQKICAgICAgLSBzZXRldWlkCiAgICAgICMgc2V0ZnN1aWQgLSBzZXQgdXNlciBpZGVudGl0eSB1c2VkIGZvciBmaWxlc3lzdGVtIGNoZWNrcwogICAgICAtIHNldGZzdWlkCiAgICAgICMgc2V0cmV1aWQgLSBzZXQgcmVhbCBhbmQvb3IgZWZmZWN0aXZlIHVzZXIgb3IgZ3JvdXAgSUQKICAgICAgLSBzZXRyZXVpZAogICAgICAjIHNldGdpZCAtIHNldCBncm91cCBpZGVudGl0eQogICAgICAtIHNldGdpZAogICAgICAjIHNldGVnaWQgLSBzZXQgZWZmZWN0aXZlIHVzZXIgb3IgZ3JvdXAgSUQKICAgICAgLSBzZXRlZ2lkCiAgICAgICMgc2V0ZnNnaWQgLSBzZXQgZ3JvdXAgaWRlbnRpdHkgdXNlZCBmb3IgZmlsZXN5c3RlbSBjaGVja3MKICAgICAgLSBzZXRmc2dpZAogICAgICAjIHNldHJlZ2lkIC0gc2V0IHJlYWwgYW5kL29yIGVmZmVjdGl2ZSB1c2VyIG9yIGdyb3VwIElECiAgICAgIC0gc2V0cmVnaWQKICAgICAgIyBzZXRyZXN1aWQgLSBzZXQgcmVhbCwgZWZmZWN0aXZlIGFuZCBzYXZlZCB1c2VyIG9yIGdyb3VwIElECiAgICAgIC0gc2V0cmVzdWlkCiAgICAgICMgc2V0cmVzZ2lkIC0gc2V0IHJlYWwsIGVmZmVjdGl2ZSBhbmQgc2F2ZWQgdXNlciBvciBncm91cCBJRAogICAgICAtIHNldHJlc2dpZAogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IGNoYW5nZQogIC0gYWN0aW9uOiBjaGFuZ2VkLXN5c3RlbS10aW1lCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHN5c3RlbQogICAgc3lzY2FsbHM6CiAgICAgICMgc2V0dGltZW9mZGF5IC0gZ2V0IC8gc2V0IHRpbWUKICAgICAgLSBzZXR0aW1lb2ZkYXkKICAgICAgIyBjbG9ja19zZXR0aW1lIC0gY2xvY2sgYW5kIHRpbWUgZnVuY3Rpb25zCiAgICAgIC0gY2xvY2tfc2V0dGltZQogICAgICAjIHN0aW1lIC0gc2V0IHRpbWUKICAgICAgLSBzdGltZQogICAgICAjIGFkanRpbWV4IC0gdHVuZSBrZXJuZWwgY2xvY2sKICAgICAgLSBhZGp0aW1leAogICAgZWNzOgogICAgICA8PDogKmVjcy1ob3N0CiAgICAgIHR5cGU6IGNoYW5nZQogIC0gYWN0aW9uOiBtYWtlLWRldmljZQogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBta25vZCAtIGNyZWF0ZSBhIHNwZWNpYWwgb3Igb3JkaW5hcnkgZmlsZQogICAgICAtIG1rbm9kCiAgICAgICMgbWtub2RhdCAtIGNyZWF0ZSBhIHNwZWNpYWwgb3Igb3JkaW5hcnkgZmlsZQogICAgICAtIG1rbm9kYXQKICAgIGVjczoKICAgICAgPDw6ICplY3MtZmlsZQogICAgICB0eXBlOiBjcmVhdGlvbgogIC0gYWN0aW9uOiBjaGFuZ2VkLXN5c3RlbS1uYW1lCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHN5c3RlbQogICAgc3lzY2FsbHM6CiAgICAgICMgc2V0aG9zdG5hbWUgLSBnZXQvc2V0IGhvc3RuYW1lCiAgICAgIC0gc2V0aG9zdG5hbWUKICAgICAgIyBzZXRkb21haW5uYW1lIC0gZ2V0L3NldCBOSVMgZG9tYWluIG5hbWUKICAgICAgLSBzZXRkb21haW5uYW1lCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWhvc3QKICAgICAgdHlwZTogY2hhbmdlCiAgLSBhY3Rpb246IGFsbG9jYXRlZC1tZW1vcnkKICAgIG9iamVjdDoKICAgICAgd2hhdDogbWVtb3J5CiAgICBzeXNjYWxsczoKICAgICAgIyBtbWFwIC0gbWFwIG9yIHVubWFwIGZpbGVzIG9yIGRldmljZXMgaW50byBtZW1vcnkKICAgICAgLSBtbWFwCiAgICAgICMgbW1hcDIgLSBtYXAgZmlsZXMgb3IgZGV2aWNlcyBpbnRvIG1lbW9yeQogICAgICAtIG1tYXAyCiAgICAgICMgYnJrIC0gY2hhbmdlIGRhdGEgc2VnbWVudCBzaXplCiAgICAgIC0gYnJrCiAgICBlY3M6ICplY3MtcHJvY2VzcwogIC0gYWN0aW9uOiBhZGp1c3RlZC1zY2hlZHVsaW5nLXBvbGljeS1vZgogICAgb2JqZWN0OgogICAgICB3aGF0OiBwcm9jZXNzCiAgICBob3c6IHN5c2NhbGwKICAgIHN5c2NhbGxzOgogICAgICAjIHNjaGVkX3NldHBhcmFtIC0gc2V0IGFuZCBnZXQgc2NoZWR1bGluZyBwYXJhbWV0ZXJzCiAgICAgIC0gc2NoZWRfc2V0cGFyYW0KICAgICAgIyBzY2hlZF9zZXRzY2hlZHVsZXIgLSBzZXQgYW5kIGdldCBzY2hlZHVsaW5nIHBvbGljeS9wYXJhbWV0ZXJzCiAgICAgIC0gc2NoZWRfc2V0c2NoZWR1bGVyCiAgICAgICMgc2NoZWRfc2V0YXR0ciAtIHNldCBhbmQgZ2V0IHNjaGVkdWxpbmcgcG9saWN5IGFuZCBhdHRyaWJ1dGVzCiAgICAgIC0gc2NoZWRfc2V0YXR0cgogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IGNoYW5nZQoKICAjIEN1cnJlbnRseSB1bmhhbmRsZWQKICAjIHRoaXMgbGlzdCBjb21lcyBmcm9tIHBhcnNpbmcgbGludXggbWFuIHBhZ2VzIGF0IGh0dHBzOi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9kb2NzL21hbi1wYWdlcy9tYW4tcGFnZXMuZ2l0CgogICMgc2lnYWN0aW9uIC0gZXhhbWluZSBhbmQgY2hhbmdlIGEgc2lnbmFsIGFjdGlvbgogICMgcnRfc2lnYWN0aW9uIC0gZXhhbWluZSBhbmQgY2hhbmdlIGEgc2lnbmFsIGFjdGlvbgogICMgcHJlYWQgLSByZWFkIGZyb20gb3Igd3JpdGUgdG8gYSBmaWxlIGRlc2NyaXB0b3IgYXQgYSBnaXZlbiBvZmZzZXQKICAjIHB3cml0ZSAtIHJlYWQgZnJvbSBvciB3cml0ZSB0byBhIGZpbGUgZGVzY3JpcHRvciBhdCBhIGdpdmVuIG9mZnNldAogICMgczM5MF9ndWFyZGVkX3N0b3JhZ2UgLSBvcGVyYXRpb25zIHdpdGggei9BcmNoaXRlY3R1cmUgZ3VhcmRlZCBzdG9yYWdlIGZhY2lsaXR5CiAgIyBzY2hlZF9nZXRhdHRyIC0gc2V0IGFuZCBnZXQgc2NoZWR1bGluZyBwb2xpY3kgYW5kIGF0dHJpYnV0ZXMKICAjIGdldHJ1c2FnZSAtIGdldCByZXNvdXJjZSB1c2FnZQogICMgZmxvY2sgLSBhcHBseSBvciByZW1vdmUgYW4gYWR2aXNvcnkgbG9jayBvbiBhbiBvcGVuIGZpbGUKICAjIHBpZGZkX2dldGZkIC0gb2J0YWluIGEgZHVwbGljYXRlIG9mIGFub3RoZXIgcHJvY2VzcydzIGZpbGUgZGVzY3JpcHRvcgogICMgY2xvY2tfbmFub3NsZWVwIC0gaGlnaC1yZXNvbHV0aW9uIHNsZWVwIHdpdGggc3BlY2lmaWFibGUgY2xvY2sKICAjIGdldHBhZ2VzaXplIC0gZ2V0IG1lbW9yeSBwYWdlIHNpemUKICAjIHBpZGZkX29wZW4gLSBvYnRhaW4gYSBmaWxlIGRlc2NyaXB0b3IgdGhhdCByZWZlcnMgdG8gYSBwcm9jZXNzCiAgIyBzcGxpY2UgLSBzcGxpY2UgZGF0YSB0by9mcm9tIGEgcGlwZQogICMgZ2V0cmVzdWlkIC0gZ2V0IHJlYWwsIGVmZmVjdGl2ZSBhbmQgc2F2ZWQgdXNlci9ncm91cCBJRHMKICAjIGdldHJlc2dpZCAtIGdldCByZWFsLCBlZmZlY3RpdmUgYW5kIHNhdmVkIHVzZXIvZ3JvdXAgSURzCiAgIyByZW1hcF9maWxlX3BhZ2VzIC0gY3JlYXRlIGEgbm9ubGluZWFyIGZpbGUgbWFwcGluZwogICMgaW9fY2FuY2VsIC0gY2FuY2VsIGFuIG91dHN0YW5kaW5nIGFzeW5jaHJvbm91cyBJL08gb3BlcmF0aW9uCiAgIyBwcmN0bCAtIG9wZXJhdGlvbnMgb24gYSBwcm9jZXNzIG9yIHRocmVhZAogICMgY2xvY2tfZ2V0cmVzIC0gY2xvY2sgYW5kIHRpbWUgZnVuY3Rpb25zCiAgIyBjbG9ja19nZXR0aW1lIC0gY2xvY2sgYW5kIHRpbWUgZnVuY3Rpb25zCiAgIyBnZXRncm91cHMgLSBnZXQvc2V0IGxpc3Qgb2Ygc3VwcGxlbWVudGFyeSBncm91cCBJRHMKICAjIHNldGdyb3VwcyAtIGdldC9zZXQgbGlzdCBvZiBzdXBwbGVtZW50YXJ5IGdyb3VwIElEcwogICMgdm1zcGxpY2UgLSBzcGxpY2UgdXNlciBwYWdlcyB0by9mcm9tIGEgcGlwZQogICMgZXBvbGxfY3JlYXRlIC0gb3BlbiBhbiBlcG9sbCBmaWxlIGRlc2NyaXB0b3IKICAjIGVwb2xsX2NyZWF0ZTEgLSBvcGVuIGFuIGVwb2xsIGZpbGUgZGVzY3JpcHRvcgogICMgcG9zaXhfZmFkdmlzZSAtIHByZWRlY2xhcmUgYW4gYWNjZXNzIHBhdHRlcm4gZm9yIGZpbGUgZGF0YQogICMgc2lnd2FpdGluZm8gLSBzeW5jaHJvbm91c2x5IHdhaXQgZm9yIHF1ZXVlZCBzaWduYWxzCiAgIyBzaWd0aW1lZHdhaXQgLSBzeW5jaHJvbm91c2x5IHdhaXQgZm9yIHF1ZXVlZCBzaWduYWxzCiAgIyBydF9zaWd0aW1lZHdhaXQgLSBzeW5jaHJvbm91c2x5IHdhaXQgZm9yIHF1ZXVlZCBzaWduYWxzCiAgIyBzaWdyZXR1cm4gLSByZXR1cm4gZnJvbSBzaWduYWwgaGFuZGxlciBhbmQgY2xlYW51cCBzdGFjayBmcmFtZQogICMgcnRfc2lncmV0dXJuIC0gcmV0dXJuIGZyb20gc2lnbmFsIGhhbmRsZXIgYW5kIGNsZWFudXAgc3RhY2sgZnJhbWUKICAjIGdldHJhbmRvbSAtIG9idGFpbiBhIHNlcmllcyBvZiByYW5kb20gYnl0ZXMKICAjIGtleWN0bCAtIG1hbmlwdWxhdGUgdGhlIGtlcm5lbCdzIGtleSBtYW5hZ2VtZW50IGZhY2lsaXR5CiAgIyBzY2hlZF9nZXRzY2hlZHVsZXIgLSBzZXQgYW5kIGdldCBzY2hlZHVsaW5nIHBvbGljeS9wYXJhbWV0ZXJzCiAgIyBtYmluZCAtIHNldCBtZW1vcnkgcG9saWN5IGZvciBhIG1lbW9yeSByYW5nZQogICMgZ2V0cHJpb3JpdHkgLSBnZXQvc2V0IHByb2dyYW0gc2NoZWR1bGluZyBwcmlvcml0eQogICMgc2V0cHJpb3JpdHkgLSBnZXQvc2V0IHByb2dyYW0gc2NoZWR1bGluZyBwcmlvcml0eQogICMgaW5vdGlmeV9pbml0IC0gaW5pdGlhbGl6ZSBhbiBpbm90aWZ5IGluc3RhbmNlCiAgIyBpbm90aWZ5X2luaXQxIC0gaW5pdGlhbGl6ZSBhbiBpbm90aWZ5IGluc3RhbmNlCiAgIyBzZW1jdGwgLSBTeXN0ZW0gViBzZW1hcGhvcmUgY29udHJvbCBvcGVyYXRpb25zCiAgIyBnZXRob3N0bmFtZSAtIGdldC9zZXQgaG9zdG5hbWUKICAjIHB0cmFjZSAtIHByb2Nlc3MgdHJhY2UKICAjIHN5c2N0bCAtIHJlYWQvd3JpdGUgc3lzdGVtIHBhcmFtZXRlcnMKICAjIGdldHBlZXJuYW1lIC0gZ2V0IG5hbWUgb2YgY29ubmVjdGVkIHBlZXIgc29ja2V0CiAgIyBmb3JrIC0gY3JlYXRlIGEgY2hpbGQgcHJvY2VzcwogICMgcXVlcnlfbW9kdWxlIC0gcXVlcnkgdGhlIGtlcm5lbCBmb3IgdmFyaW91cyBiaXRzIHBlcnRhaW5pbmcgdG8gbW9kdWxlcwogICMgaW9jdGxfbGlzdCAtIGxpc3Qgb2YgaW9jdGwgY2FsbHMgaW4gTGludXgvaTM4NiBrZXJuZWwKICAjIG1zZ2dldCAtIGdldCBhIFN5c3RlbSBWIG1lc3NhZ2UgcXVldWUgaWRlbnRpZmllcgogICMgc3B1X2NyZWF0ZSAtIGNyZWF0ZSBhIG5ldyBzcHUgY29udGV4dAogICMgc3VicGFnZV9wcm90IC0gZGVmaW5lIGEgc3VicGFnZSBwcm90ZWN0aW9uIGZvciBhbiBhZGRyZXNzIHJhbmdlCiAgIyBxdW90YWN0bCAtIG1hbmlwdWxhdGUgZGlzayBxdW90YXMKICAjIG5mc3NlcnZjdGwgLSBzeXNjYWxsIGludGVyZmFjZSB0byBrZXJuZWwgbmZzIGRhZW1vbgogICMgb3BlbmF0MiAtIG9wZW4gYW5kIHBvc3NpYmx5IGNyZWF0ZSBhIGZpbGUgKGV4dGVuZGVkKQogICMgZ2V0cmxpbWl0IC0gZ2V0L3NldCByZXNvdXJjZSBsaW1pdHMKICAjIHNldHJsaW1pdCAtIGdldC9zZXQgcmVzb3VyY2UgbGltaXRzCiAgIyBwcmxpbWl0IC0gZ2V0L3NldCByZXNvdXJjZSBsaW1pdHMKICAjIHRlZSAtIGR1cGxpY2F0aW5nIHBpcGUgY29udGVudAogICMgc2htZ2V0IC0gYWxsb2NhdGVzIGEgU3lzdGVtIFYgc2hhcmVkIG1lbW9yeSBzZWdtZW50CiAgIyBjcmVhdGVfbW9kdWxlIC0gY3JlYXRlIGEgbG9hZGFibGUgbW9kdWxlIGVudHJ5CiAgIyBnZXR0aW1lb2ZkYXkgLSBnZXQgLyBzZXQgdGltZQogICMgdGltZXJfY3JlYXRlIC0gY3JlYXRlIGEgUE9TSVggcGVyLXByb2Nlc3MgdGltZXIKICAjIGZhbm90aWZ5X21hcmsgLSBhZGQsIHJlbW92ZSwgb3IgbW9kaWZ5IGFuIGZhbm90aWZ5IG1hcmsgb24gYSBmaWxlc3lzdGVtIG9iamVjdAogICMgcGlwZSAtIGNyZWF0ZSBwaXBlCiAgIyBwaXBlMiAtIGNyZWF0ZSBwaXBlCiAgIyBpbnRybyAtIGludHJvZHVjdGlvbiB0byBzeXN0ZW0gY2FsbHMKICAjIGxvb2t1cF9kY29va2llIC0gcmV0dXJuIGEgZGlyZWN0b3J5IGVudHJ5J3MgcGF0aAogICMgc3lzZnMgLSBnZXQgZmlsZXN5c3RlbSB0eXBlIGluZm9ybWF0aW9uCiAgIyBzMzkwX3J1bnRpbWVfaW5zdHIgLSBlbmFibGUvZGlzYWJsZSBzMzkwIENQVSBydW4tdGltZSBpbnN0cnVtZW50YXRpb24KICAjIHNldG5zIC0gcmVhc3NvY2lhdGUgdGhyZWFkIHdpdGggYSBuYW1lc3BhY2UKICAjIHNldF9tZW1wb2xpY3kgLSBzZXQgZGVmYXVsdCBOVU1BIG1lbW9yeSBwb2xpY3kgZm9yIGEgdGhyZWFkIGFuZCBpdHMgY2hpbGRyZW4KICAjIG5pY2UgLSBjaGFuZ2UgcHJvY2VzcyBwcmlvcml0eQogICMgaW9fc2V0dXAgLSBjcmVhdGUgYW4gYXN5bmNocm9ub3VzIEkvTyBjb250ZXh0CiAgIyBtaW5jb3JlIC0gZGV0ZXJtaW5lIHdoZXRoZXIgcGFnZXMgYXJlIHJlc2lkZW50IGluIG1lbW9yeQogICMgaW9jdGxfY29uc29sZSAtIGlvY3RscyBmb3IgY29uc29sZSB0ZXJtaW5hbCBhbmQgdmlydHVhbCBjb25zb2xlcwogICMgcG9sbCAtIHdhaXQgZm9yIHNvbWUgZXZlbnQgb24gYSBmaWxlIGRlc2NyaXB0b3IKICAjIHBwb2xsIC0gd2FpdCBmb3Igc29tZSBldmVudCBvbiBhIGZpbGUgZGVzY3JpcHRvcgogICMgY2FwZ2V0IC0gc2V0L2dldCBjYXBhYmlsaXRpZXMgb2YgdGhyZWFkKHMpCiAgIyBjYXBzZXQgLSBzZXQvZ2V0IGNhcGFiaWxpdGllcyBvZiB0aHJlYWQocykKICAjIGlvY3RsX3R0eSAtIGlvY3RscyBmb3IgdGVybWluYWxzIGFuZCBzZXJpYWwgbGluZXMKICAjIGlvcGwgLSBjaGFuZ2UgSS9PIHByaXZpbGVnZSBsZXZlbAogICMgaW9fZ2V0ZXZlbnRzIC0gcmVhZCBhc3luY2hyb25vdXMgSS9PIGV2ZW50cyBmcm9tIHRoZSBjb21wbGV0aW9uIHF1ZXVlCiAgIyBwcm9jZXNzX3ZtX3JlYWR2IC0gdHJhbnNmZXIgZGF0YSBiZXR3ZWVuIHByb2Nlc3MgYWRkcmVzcyBzcGFjZXMKICAjIHByb2Nlc3Nfdm1fd3JpdGV2IC0gdHJhbnNmZXIgZGF0YSBiZXR3ZWVuIHByb2Nlc3MgYWRkcmVzcyBzcGFjZXMKICAjIHBjaWNvbmZpZ19yZWFkIC0gcGNpIGRldmljZSBpbmZvcm1hdGlvbiBoYW5kbGluZwogICMgcGNpY29uZmlnX3dyaXRlIC0gcGNpIGRldmljZSBpbmZvcm1hdGlvbiBoYW5kbGluZwogICMgcGNpY29uZmlnX2lvYmFzZSAtIHBjaSBkZXZpY2UgaW5mb3JtYXRpb24gaGFuZGxpbmcKICAjIHNicmsgLSBjaGFuZ2UgZGF0YSBzZWdtZW50IHNpemUKICAjIHNldF90aWRfYWRkcmVzcyAtIHNldCBwb2ludGVyIHRvIHRocmVhZCBJRAogICMgcGtleV9hbGxvYyAtIGFsbG9jYXRlIG9yIGZyZWUgYSBwcm90ZWN0aW9uIGtleQogICMgcGtleV9mcmVlIC0gYWxsb2NhdGUgb3IgZnJlZSBhIHByb3RlY3Rpb24ga2V5CiAgIyBzZWxlY3QgLSBzeW5jaHJvbm91cyBJL08gbXVsdGlwbGV4aW5nCiAgIyBwc2VsZWN0IC0gc3luY2hyb25vdXMgSS9PIG11bHRpcGxleGluZwogICMga2V4ZWNfbG9hZCAtIGxvYWQgYSBuZXcga2VybmVsIGZvciBsYXRlciBleGVjdXRpb24KICAjIGtleGVjX2ZpbGVfbG9hZCAtIGxvYWQgYSBuZXcga2VybmVsIGZvciBsYXRlciBleGVjdXRpb24KICAjIHBlcnNvbmFsaXR5IC0gc2V0IHRoZSBwcm9jZXNzIGV4ZWN1dGlvbiBkb21haW4KICAjIGlvY3RsX2dldGZzbWFwIC0gcmV0cmlldmUgdGhlIHBoeXNpY2FsIGxheW91dCBvZiB0aGUgZmlsZXN5c3RlbQogICMgaW5vdGlmeV9ybV93YXRjaCAtIHJlbW92ZSBhbiBleGlzdGluZyB3YXRjaCBmcm9tIGFuIGlub3RpZnkgaW5zdGFuY2UKICAjIHBlcmZfZXZlbnRfb3BlbiAtIHNldCB1cCBwZXJmb3JtYW5jZSBtb25pdG9yaW5nCiAgIyB0aW1lcl9nZXRvdmVycnVuIC0gZ2V0IG92ZXJydW4gY291bnQgZm9yIGEgUE9TSVggcGVyLXByb2Nlc3MgdGltZXIKICAjIHdhaXQzIC0gd2FpdCBmb3IgcHJvY2VzcyB0byBjaGFuZ2Ugc3RhdGUsIEJTRCBzdHlsZQogICMgd2FpdDQgLSB3YWl0IGZvciBwcm9jZXNzIHRvIGNoYW5nZSBzdGF0ZSwgQlNEIHN0eWxlCiAgIyBsaW5rIC0gbWFrZSBhIG5ldyBuYW1lIGZvciBhIGZpbGUKICAjIGxpbmthdCAtIG1ha2UgYSBuZXcgbmFtZSBmb3IgYSBmaWxlCiAgIyBzY2hlZF9ycl9nZXRfaW50ZXJ2YWwgLSBnZXQgdGhlIFNDSEVEX1JSIGludGVydmFsIGZvciB0aGUgbmFtZWQgcHJvY2VzcwogICMgbXVubWFwIC0gbWFwIG9yIHVubWFwIGZpbGVzIG9yIGRldmljZXMgaW50byBtZW1vcnkKICAjIHNvY2tldGNhbGwgLSBzb2NrZXQgc3lzdGVtIGNhbGxzCiAgIyBtcmVtYXAgLSByZW1hcCBhIHZpcnR1YWwgbWVtb3J5IGFkZHJlc3MKICAjIHZmb3JrIC0gY3JlYXRlIGEgY2hpbGQgcHJvY2VzcyBhbmQgYmxvY2sgcGFyZW50CiAgIyBzZWNjb21wIC0gb3BlcmF0ZSBvbiBTZWN1cmUgQ29tcHV0aW5nIHN0YXRlIG9mIHRoZSBwcm9jZXNzCiAgIyByZXF1ZXN0X2tleSAtIHJlcXVlc3QgYSBrZXkgZnJvbSB0aGUga2VybmVsJ3Mga2V5IG1hbmFnZW1lbnQgZmFjaWxpdHkKICAjIHN5c2NhbGwgLSBpbmRpcmVjdCBzeXN0ZW0gY2FsbAogICMga2NtcCAtIGNvbXBhcmUgdHdvIHByb2Nlc3NlcyB0byBkZXRlcm1pbmUgaWYgdGhleSBzaGFyZSBhIGtlcm5lbCByZXNvdXJjZQogICMgcmVhZGRpciAtIHJlYWQgZGlyZWN0b3J5IGVudHJ5CiAgIyBpb3Blcm0gLSBzZXQgcG9ydCBpbnB1dC9vdXRwdXQgcGVybWlzc2lvbnMKICAjIHNwdV9ydW4gLSBleGVjdXRlIGFuIFNQVSBjb250ZXh0CiAgIyByZWJvb3QgLSByZWJvb3Qgb3IgZW5hYmxlL2Rpc2FibGUgQ3RybC1BbHQtRGVsCiAgIyByZWFkYWhlYWQgLSBpbml0aWF0ZSBmaWxlIHJlYWRhaGVhZCBpbnRvIHBhZ2UgY2FjaGUKICAjIHNjaGVkX2dldHBhcmFtIC0gc2V0IGFuZCBnZXQgc2NoZWR1bGluZyBwYXJhbWV0ZXJzCiAgIyBhY2N0IC0gc3dpdGNoIHByb2Nlc3MgYWNjb3VudGluZyBvbiBvciBvZmYKICAjIHNpZ3N1c3BlbmQgLSB3YWl0IGZvciBhIHNpZ25hbAogICMgcnRfc2lnc3VzcGVuZCAtIHdhaXQgZm9yIGEgc2lnbmFsCiAgIyBleGl0X2dyb3VwIC0gZXhpdCBhbGwgdGhyZWFkcyBpbiBhIHByb2Nlc3MKICAjIHNvY2tldCAtIGNyZWF0ZSBhbiBlbmRwb2ludCBmb3IgY29tbXVuaWNhdGlvbgogICMgaW9jdGxfdXNlcmZhdWx0ZmQgLSBjcmVhdGUgYSBmaWxlIGRlc2NyaXB0b3IgZm9yIGhhbmRsaW5nIHBhZ2UgZmF1bHRzIGluIHVzZXIgc3BhY2UKICAjIHNjaGVkX2dldF9wcmlvcml0eV9tYXggLSBnZXQgc3RhdGljIHByaW9yaXR5IHJhbmdlCiAgIyBzY2hlZF9nZXRfcHJpb3JpdHlfbWluICAtIGdldCBzdGF0aWMgcHJpb3JpdHkgcmFuZ2UKICAjIGdldGRlbnRzIC0gZ2V0IGRpcmVjdG9yeSBlbnRyaWVzCiAgIyBnZXRkZW50czY0IC0gZ2V0IGRpcmVjdG9yeSBlbnRyaWVzCiAgIyBzZWxlY3QgLSBzeW5jaHJvbm91cyBJL08gbXVsdGlwbGV4aW5nCiAgIyBwc2VsZWN0IC0gc3luY2hyb25vdXMgSS9PIG11bHRpcGxleGluZwogICMgYWxsb2NfaHVnZXBhZ2VzIC0gYWxsb2NhdGUgb3IgZnJlZSBodWdlIHBhZ2VzCiAgIyBmcmVlX2h1Z2VwYWdlcyAtIGFsbG9jYXRlIG9yIGZyZWUgaHVnZSBwYWdlcwogICMgZnN5bmMgLSBzeW5jaHJvbml6ZSBhIGZpbGUncyBpbi1jb3JlIHN0YXRlIHdpdGggc3RvcmFnZSBkZXZpY2UKICAjIGZkYXRhc3luYyAtIHN5bmNocm9uaXplIGEgZmlsZSdzIGluLWNvcmUgc3RhdGUgd2l0aCBzdG9yYWdlIGRldmljZQogICMgc3lzY2FsbHMgLSBMaW51eCBzeXN0ZW0gY2FsbHMKICAjIG1lbWZkX2NyZWF0ZSAtIGNyZWF0ZSBhbiBhbm9ueW1vdXMgZmlsZQogICMgbW9kaWZ5X2xkdCAtIGdldCBvciBzZXQgYSBwZXItcHJvY2VzcyBMRFQgZW50cnkKICAjIGdldF9rZXJuZWxfc3ltcyAtIHJldHJpZXZlIGV4cG9ydGVkIGtlcm5lbCBhbmQgbW9kdWxlIHN5bWJvbHMKICAjIGxzZWVrIC0gcmVwb3NpdGlvbiByZWFkL3dyaXRlIGZpbGUgb2Zmc2V0CiAgIyBzaG1hdCAtIFN5c3RlbSBWIHNoYXJlZCBtZW1vcnkgb3BlcmF0aW9ucwogICMgc2htZHQgLSBTeXN0ZW0gViBzaGFyZWQgbWVtb3J5IG9wZXJhdGlvbnMKICAjIHRpbWVyX2RlbGV0ZSAtIGRlbGV0ZSBhIFBPU0lYIHBlci1wcm9jZXNzIHRpbWVyCiAgIyBwZXJmbW9uY3RsIC0gaW50ZXJmYWNlIHRvIElBLTY0IHBlcmZvcm1hbmNlIG1vbml0b3JpbmcgdW5pdAogICMgbW92ZV9wYWdlcyAtIG1vdmUgaW5kaXZpZHVhbCBwYWdlcyBvZiBhIHByb2Nlc3MgdG8gYW5vdGhlciBub2RlCiAgIyBjaGRpciAtIGNoYW5nZSB3b3JraW5nIGRpcmVjdG9yeQogICMgZmNoZGlyIC0gY2hhbmdlIHdvcmtpbmcgZGlyZWN0b3J5CiAgIyB0aW1lIC0gZ2V0IHRpbWUgaW4gc2Vjb25kcwogICMgX2V4aXQgLSB0ZXJtaW5hdGUgdGhlIGNhbGxpbmcgcHJvY2VzcwogICMgX0V4aXQgLSB0ZXJtaW5hdGUgdGhlIGNhbGxpbmcgcHJvY2VzcwogICMgczM5MF9zdGh5aSAtIGVtdWxhdGUgU1RIWUkgaW5zdHJ1Y3Rpb24KICAjIGlvX3N1Ym1pdCAtIHN1Ym1pdCBhc3luY2hyb25vdXMgSS9PIGJsb2NrcyBmb3IgcHJvY2Vzc2luZwogICMgbWxvY2sgLSBsb2NrIGFuZCB1bmxvY2sgbWVtb3J5CiAgIyBtbG9jazIgLSBsb2NrIGFuZCB1bmxvY2sgbWVtb3J5CiAgIyBtdW5sb2NrIC0gbG9jayBhbmQgdW5sb2NrIG1lbW9yeQogICMgbWxvY2thbGwgLSBsb2NrIGFuZCB1bmxvY2sgbWVtb3J5CiAgIyBtdW5sb2NrYWxsIC0gbG9jayBhbmQgdW5sb2NrIG1lbW9yeQogICMgdW1hc2sgLSBzZXQgZmlsZSBtb2RlIGNyZWF0aW9uIG1hc2sKICAjIGFyY2hfcHJjdGwgLSBzZXQgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHRocmVhZCBzdGF0ZQogICMgdXNlbGliIC0gbG9hZCBzaGFyZWQgbGlicmFyeQogICMgc2VuZGZpbGUgLSB0cmFuc2ZlciBkYXRhIGJldHdlZW4gZmlsZSBkZXNjcmlwdG9ycwogICMgc2htY3RsIC0gU3lzdGVtIFYgc2hhcmVkIG1lbW9yeSBjb250cm9sCiAgIyBlcG9sbF93YWl0IC0gd2FpdCBmb3IgYW4gSS9PIGV2ZW50IG9uIGFuIGVwb2xsIGZpbGUgZGVzY3JpcHRvcgogICMgZXBvbGxfcHdhaXQgLSB3YWl0IGZvciBhbiBJL08gZXZlbnQgb24gYW4gZXBvbGwgZmlsZSBkZXNjcmlwdG9yCiAgIyBzaWdhbHRzdGFjayAtIHNldCBhbmQvb3IgZ2V0IHNpZ25hbCBzdGFjayBjb250ZXh0CiAgIyBpb2N0bCAtIGNvbnRyb2wgZGV2aWNlCiAgIyBzaWduYWxmZCAtIGNyZWF0ZSBhIGZpbGUgZGVzY3JpcHRvciBmb3IgYWNjZXB0aW5nIHNpZ25hbHMKICAjIHVuc2hhcmUgLSBkaXNhc3NvY2lhdGUgcGFydHMgb2YgdGhlIHByb2Nlc3MgZXhlY3V0aW9uIGNvbnRleHQKICAjIGNocm9vdCAtIGNoYW5nZSByb290IGRpcmVjdG9yeQogICMgbWFkdmlzZSAtIGdpdmUgYWR2aWNlIGFib3V0IHVzZSBvZiBtZW1vcnkKICAjIGdldHRpZCAtIGdldCB0aHJlYWQgaWRlbnRpZmljYXRpb24KICAjIGdldHNvY2tuYW1lIC0gZ2V0IHNvY2tldCBuYW1lCiAgIyBpb19kZXN0cm95IC0gZGVzdHJveSBhbiBhc3luY2hyb25vdXMgSS9PIGNvbnRleHQKICAjIHNldHVwIC0gc2V0dXAgZGV2aWNlcyBhbmQgZmlsZXN5c3RlbXMsIG1vdW50IHJvb3QgZmlsZXN5c3RlbQogICMgbnRwX2FkanRpbWUgLSB0dW5lIGtlcm5lbCBjbG9jawogICMgc2VtZ2V0IC0gZ2V0IGEgU3lzdGVtIFYgc2VtYXBob3JlIHNldCBpZGVudGlmaWVyCiAgIyBnZXR1aWQgLSBnZXQgdXNlciBpZGVudGl0eQogICMgZ2V0ZXVpZCAtIGdldCB1c2VyIGlkZW50aXR5CiAgIyBfc3lzY2FsbCAtIGludm9raW5nIGEgc3lzdGVtIGNhbGwgd2l0aG91dCBsaWJyYXJ5IHN1cHBvcnQgKE9CU09MRVRFKQogICMgc2NoZWRfc2V0YWZmaW5pdHkgLSBcIHNldCBhbmQgZ2V0IGEgdGhyZWFkJ3MgQ1BVIGFmZmluaXR5IG1hc2sKICAjIHNjaGVkX2dldGFmZmluaXR5IC0gXCBzZXQgYW5kIGdldCBhIHRocmVhZCdzIENQVSBhZmZpbml0eSBtYXNrCiAgIyBjYWNoZWZsdXNoIC0gZmx1c2ggY29udGVudHMgb2YgaW5zdHJ1Y3Rpb24gYW5kL29yIGRhdGEgY2FjaGUKICAjIHBpdm90X3Jvb3QgLSBjaGFuZ2UgdGhlIHJvb3QgbW91bnQKICAjIG1zZ2N0bCAtIFN5c3RlbSBWIG1lc3NhZ2UgY29udHJvbCBvcGVyYXRpb25zCiAgIyBpb2N0bF9mYXQgLSBtYW5pcHVsYXRpbmcgdGhlIEZBVCBmaWxlc3lzdGVtCiAgIyBzZXRwZ2lkIC0gc2V0L2dldCBwcm9jZXNzIGdyb3VwCiAgIyBnZXRwZ2lkIC0gc2V0L2dldCBwcm9jZXNzIGdyb3VwCiAgIyBzZXRwZ3JwIC0gc2V0L2dldCBwcm9jZXNzIGdyb3VwCiAgIyBnZXRwZ3JwIC0gc2V0L2dldCBwcm9jZXNzIGdyb3VwCiAgIyBzb2NrZXRwYWlyIC0gY3JlYXRlIGEgcGFpciBvZiBjb25uZWN0ZWQgc29ja2V0cwogICMgYmRmbHVzaCAtIHN0YXJ0LCBmbHVzaCwgb3IgdHVuZSBidWZmZXItZGlydHktZmx1c2ggZGFlbW9uCiAgIyBhbGFybSAtIHNldCBhbiBhbGFybSBjbG9jayBmb3IgZGVsaXZlcnkgb2YgYSBzaWduYWwKICAjIHRpbWVyX3NldHRpbWUgLSBhcm0vZGlzYXJtIGFuZCBmZXRjaCBzdGF0ZSBvZiBQT1NJWCBwZXItcHJvY2VzcyB0aW1lcgogICMgdGltZXJfZ2V0dGltZSAtIGFybS9kaXNhcm0gYW5kIGZldGNoIHN0YXRlIG9mIFBPU0lYIHBlci1wcm9jZXNzIHRpbWVyCiAgIyBhZGRfa2V5IC0gYWRkIGEga2V5IHRvIHRoZSBrZXJuZWwncyBrZXkgbWFuYWdlbWVudCBmYWNpbGl0eQogICMgcnRfc2lncXVldWVpbmZvIC0gcXVldWUgYSBzaWduYWwgYW5kIGRhdGEKICAjIHJ0X3Rnc2lncXVldWVpbmZvIC0gcXVldWUgYSBzaWduYWwgYW5kIGRhdGEKICAjIHVzZXJmYXVsdGZkIC0gY3JlYXRlIGEgZmlsZSBkZXNjcmlwdG9yIGZvciBoYW5kbGluZyBwYWdlIGZhdWx0cyBpbiB1c2VyIHNwYWNlCiAgIyBzZW1vcCAtIFN5c3RlbSBWIHNlbWFwaG9yZSBvcGVyYXRpb25zCiAgIyBzZW10aW1lZG9wIC0gU3lzdGVtIFYgc2VtYXBob3JlIG9wZXJhdGlvbnMKICAjIGdldGdpZCAtIGdldCBncm91cCBpZGVudGl0eQogICMgZ2V0ZWdpZCAtIGdldCBncm91cCBpZGVudGl0eQogICMgZ2V0cGlkIC0gZ2V0IHByb2Nlc3MgaWRlbnRpZmljYXRpb24KICAjIGdldHBwaWQgLSBnZXQgcHJvY2VzcyBpZGVudGlmaWNhdGlvbgogICMgc2lncHJvY21hc2sgLSBleGFtaW5lIGFuZCBjaGFuZ2UgYmxvY2tlZCBzaWduYWxzCiAgIyBydF9zaWdwcm9jbWFzayAtIGV4YW1pbmUgYW5kIGNoYW5nZSBibG9ja2VkIHNpZ25hbHMKICAjIHVuYW1lIC0gZ2V0IG5hbWUgYW5kIGluZm9ybWF0aW9uIGFib3V0IGN1cnJlbnQga2VybmVsCiAgIyBzdGF0eCAtIGdldCBmaWxlIHN0YXR1cyAoZXh0ZW5kZWQpCiAgIyBpb2N0bF9maWNsb25lcmFuZ2UgLSBzaGFyZSBzb21lIHRoZSBkYXRhIG9mIG9uZSBmaWxlIHdpdGggYW5vdGhlciBmaWxlCiAgIyBpb2N0bF9maWNsb25lIC0gc2hhcmUgc29tZSB0aGUgZGF0YSBvZiBvbmUgZmlsZSB3aXRoIGFub3RoZXIgZmlsZQogICMgbXFfZ2V0c2V0YXR0ciAtIGdldC9zZXQgbWVzc2FnZSBxdWV1ZSBhdHRyaWJ1dGVzCiAgIyBpb3ByaW9fZ2V0IC0gZ2V0L3NldCBJL08gc2NoZWR1bGluZyBjbGFzcyBhbmQgcHJpb3JpdHkKICAjIGlvcHJpb19zZXQgLSBnZXQvc2V0IEkvTyBzY2hlZHVsaW5nIGNsYXNzIGFuZCBwcmlvcml0eQogICMgZXBvbGxfY3RsIC0gY29udHJvbCBpbnRlcmZhY2UgZm9yIGFuIGVwb2xsIGZpbGUgZGVzY3JpcHRvcgogICMgc3luYyAtIGNvbW1pdCBmaWxlc3lzdGVtIGNhY2hlcyB0byBkaXNrCiAgIyBzeW5jZnMgLSBjb21taXQgZmlsZXN5c3RlbSBjYWNoZXMgdG8gZGlzawogICMgc2V0c2lkIC0gY3JlYXRlcyBhIHNlc3Npb24gYW5kIHNldHMgdGhlIHByb2Nlc3MgZ3JvdXAgSUQKICAjIHNodXRkb3duIC0gc2h1dCBkb3duIHBhcnQgb2YgYSBmdWxsLWR1cGxleCBjb25uZWN0aW9uCiAgIyBnZXRzaWQgLSBnZXQgc2Vzc2lvbiBJRAogICMgZ2V0X3RocmVhZF9hcmVhIC0gbWFuaXB1bGF0ZSB0aHJlYWQtbG9jYWwgc3RvcmFnZSBpbmZvcm1hdGlvbgogICMgc2V0X3RocmVhZF9hcmVhIC0gbWFuaXB1bGF0ZSB0aHJlYWQtbG9jYWwgc3RvcmFnZSBpbmZvcm1hdGlvbgogICMgdGltZXJmZF9jcmVhdGUgLSB0aW1lcnMgdGhhdCBub3RpZnkgdmlhIGZpbGUgZGVzY3JpcHRvcnMKICAjIHRpbWVyZmRfc2V0dGltZSAtIHRpbWVycyB0aGF0IG5vdGlmeSB2aWEgZmlsZSBkZXNjcmlwdG9ycwogICMgdGltZXJmZF9nZXR0aW1lIC0gdGltZXJzIHRoYXQgbm90aWZ5IHZpYSBmaWxlIGRlc2NyaXB0b3JzCiAgIyBpb2N0bF9maWRlZHVwZXJhbmdlIC0gc2hhcmUgc29tZSB0aGUgZGF0YSBvZiBvbmUgZmlsZSB3aXRoIGFub3RoZXIgZmlsZQogICMgbmFtZV90b19oYW5kbGVfYXQgLSBvYnRhaW4gaGFuZGxlIGZvciBhIHBhdGhuYW1lIGFuZCBvcGVuIGZpbGUgdmlhIGEgaGFuZGxlCiAgIyBvcGVuX2J5X2hhbmRsZV9hdCAtIG9idGFpbiBoYW5kbGUgZm9yIGEgcGF0aG5hbWUgYW5kIG9wZW4gZmlsZSB2aWEgYSBoYW5kbGUKICAjIGZ1dGV4IC0gZmFzdCB1c2VyLXNwYWNlIGxvY2tpbmcKICAjIGlvY3RsX25zIC0gaW9jdGwoKSBvcGVyYXRpb25zIGZvciBMaW51eCBuYW1lc3BhY2VzCiAgIyBwaWRmZF9zZW5kX3NpZ25hbCAtIHNlbmQgYSBzaWduYWwgdG8gYSBwcm9jZXNzIHNwZWNpZmllZCBieSBhIGZpbGUgZGVzY3JpcHRvcgogICMgY2xvbmUgLSBjcmVhdGUgYSBjaGlsZCBwcm9jZXNzCiAgIyBfX2Nsb25lMiAtIGNyZWF0ZSBhIGNoaWxkIHByb2Nlc3MKICAjIGNsb25lMyAtIGNyZWF0ZSBhIGNoaWxkIHByb2Nlc3MKICAjIHRpbWVzIC0gZ2V0IHByb2Nlc3MgdGltZXMKICAjIHN5c2luZm8gLSByZXR1cm4gc3lzdGVtIGluZm9ybWF0aW9uCiAgIyBpcGMgLSBTeXN0ZW0gViBJUEMgc3lzdGVtIGNhbGxzCiAgIyBldmVudGZkIC0gY3JlYXRlIGEgZmlsZSBkZXNjcmlwdG9yIGZvciBldmVudCBub3RpZmljYXRpb24KICAjIHdhaXQgLSB3YWl0IGZvciBwcm9jZXNzIHRvIGNoYW5nZSBzdGF0ZQogICMgd2FpdHBpZCAtIHdhaXQgZm9yIHByb2Nlc3MgdG8gY2hhbmdlIHN0YXRlCiAgIyB3YWl0aWQgLSB3YWl0IGZvciBwcm9jZXNzIHRvIGNoYW5nZSBzdGF0ZQogICMgZ2V0ZG9tYWlubmFtZSAtIGdldC9zZXQgTklTIGRvbWFpbiBuYW1lCiAgIyBpZGxlIC0gbWFrZSBwcm9jZXNzIDAgaWRsZQogICMgaW5vdGlmeV9hZGRfd2F0Y2ggLSBhZGQgYSB3YXRjaCB0byBhbiBpbml0aWFsaXplZCBpbm90aWZ5IGluc3RhbmNlCiAgIyBnZXRfbWVtcG9saWN5IC0gcmV0cmlldmUgTlVNQSBtZW1vcnkgcG9saWN5IGZvciBhIHRocmVhZAogICMgYnBmIC0gcGVyZm9ybSBhIGNvbW1hbmQgb24gYW4gZXh0ZW5kZWQgQlBGIG1hcCBvciBwcm9ncmFtCiAgIyBnZXRzb2Nrb3B0IC0gZ2V0IGFuZCBzZXQgb3B0aW9ucyBvbiBzb2NrZXRzCiAgIyBzZXRzb2Nrb3B0IC0gZ2V0IGFuZCBzZXQgb3B0aW9ucyBvbiBzb2NrZXRzCiAgIyBnZXRpdGltZXIgLSBnZXQgb3Igc2V0IHZhbHVlIG9mIGFuIGludGVydmFsIHRpbWVyCiAgIyBzZXRpdGltZXIgLSBnZXQgb3Igc2V0IHZhbHVlIG9mIGFuIGludGVydmFsIHRpbWVyCiAgIyBtZW1iYXJyaWVyIC0gaXNzdWUgbWVtb3J5IGJhcnJpZXJzIG9uIGEgc2V0IG9mIHRocmVhZHMKICAjIG1wcm90ZWN0IC0gc2V0IHByb3RlY3Rpb24gb24gYSByZWdpb24gb2YgbWVtb3J5CiAgIyBwa2V5X21wcm90ZWN0IC0gc2V0IHByb3RlY3Rpb24gb24gYSByZWdpb24gb2YgbWVtb3J5CiAgIyBnZXRjcHUgLSBkZXRlcm1pbmUgQ1BVIGFuZCBOVU1BIG5vZGUgb24gd2hpY2ggdGhlIGNhbGxpbmcgdGhyZWFkIGlzIHJ1bm5pbmcKICAjIGlvY3RsX2ZzbGFiZWwgLSBnZXQgb3Igc2V0IGEgZmlsZXN5c3RlbSBsYWJlbAogICMgbGlzdHhhdHRyIC0gbGlzdCBleHRlbmRlZCBhdHRyaWJ1dGUgbmFtZXMKICAjIGxsaXN0eGF0dHIgLSBsaXN0IGV4dGVuZGVkIGF0dHJpYnV0ZSBuYW1lcwogICMgZmxpc3R4YXR0ciAtIGxpc3QgZXh0ZW5kZWQgYXR0cmlidXRlIG5hbWVzCiAgIyBfbGxzZWVrIC0gcmVwb3NpdGlvbiByZWFkL3dyaXRlIGZpbGUgb2Zmc2V0CiAgIyBmY250bCAtIG1hbmlwdWxhdGUgZmlsZSBkZXNjcmlwdG9yCiAgIyB1c3RhdCAtIGdldCBmaWxlc3lzdGVtIHN0YXRpc3RpY3MKICAjIHNpZ25hbCAtIEFOU0kgQyBzaWduYWwgaGFuZGxpbmcKICAjIG5hbm9zbGVlcCAtIGhpZ2gtcmVzb2x1dGlvbiBzbGVlcAogICMgY29ubmVjdCAtIGluaXRpYXRlIGEgY29ubmVjdGlvbiBvbiBhIHNvY2tldAogICMgdm04Nm9sZCAtIGVudGVyIHZpcnR1YWwgODA4NiBtb2RlCiAgIyB2bTg2IC0gZW50ZXIgdmlydHVhbCA4MDg2IG1vZGUKICAjIGZhbm90aWZ5X2luaXQgLSBjcmVhdGUgYW5kIGluaXRpYWxpemUgZmFub3RpZnkgZ3JvdXAKICAjIG1pZ3JhdGVfcGFnZXMgLSBtb3ZlIGFsbCBwYWdlcyBpbiBhIHByb2Nlc3MgdG8gYW5vdGhlciBzZXQgb2Ygbm9kZXMKICAjIHJlc3RhcnRfc3lzY2FsbCAtIHJlc3RhcnQgYSBzeXN0ZW0gY2FsbCBhZnRlciBpbnRlcnJ1cHRpb24gYnkgYSBzdG9wIHNpZ25hbAogICMgY2xvc2UgLSBjbG9zZSBhIGZpbGUgZGVzY3JpcHRvcgogICMgbXNncmN2IC0gU3lzdGVtIFYgbWVzc2FnZSBxdWV1ZSBvcGVyYXRpb25zCiAgIyBtc2dzbmQgLSBTeXN0ZW0gViBtZXNzYWdlIHF1ZXVlIG9wZXJhdGlvbnMKICAjIHJlYWR2IC0gcmVhZCBvciB3cml0ZSBkYXRhIGludG8gbXVsdGlwbGUgYnVmZmVycwogICMgd3JpdGV2IC0gcmVhZCBvciB3cml0ZSBkYXRhIGludG8gbXVsdGlwbGUgYnVmZmVycwogICMgcHJlYWR2IC0gcmVhZCBvciB3cml0ZSBkYXRhIGludG8gbXVsdGlwbGUgYnVmZmVycwogICMgcHdyaXRldiAtIHJlYWQgb3Igd3JpdGUgZGF0YSBpbnRvIG11bHRpcGxlIGJ1ZmZlcnMKICAjIHByZWFkdjIgLSByZWFkIG9yIHdyaXRlIGRhdGEgaW50byBtdWx0aXBsZSBidWZmZXJzCiAgIyBwd3JpdGV2MiAtIHJlYWQgb3Igd3JpdGUgZGF0YSBpbnRvIG11bHRpcGxlIGJ1ZmZlcnMKICAjIHN5c2xvZyAtIHJlYWQgYW5kL29yIGNsZWFyIGtlcm5lbCBtZXNzYWdlIHJpbmcgYnVmZmVyOyBzZXQgY29uc29sZV9sb2dsZXZlbAogICMga2xvZ2N0bCAtIHJlYWQgYW5kL29yIGNsZWFyIGtlcm5lbCBtZXNzYWdlIHJpbmcgYnVmZmVyOyBzZXQgY29uc29sZV9sb2dsZXZlbAogICMgc2NoZWRfeWllbGQgLSB5aWVsZCB0aGUgcHJvY2Vzc29yCiAgIyB2aGFuZ3VwIC0gdmlydHVhbGx5IGhhbmd1cCB0aGUgY3VycmVudCB0ZXJtaW5hbAogICMgaW9jdGxfaWZsYWdzIC0gaW9jdGwoKSBvcGVyYXRpb25zIGZvciBpbm9kZSBmbGFncwogICMgc2dldG1hc2sgLSBtYW5pcHVsYXRpb24gb2Ygc2lnbmFsIG1hc2sgKG9ic29sZXRlKQogICMgc3NldG1hc2sgLSBtYW5pcHVsYXRpb24gb2Ygc2lnbmFsIG1hc2sgKG9ic29sZXRlKQogICMgc3luY19maWxlX3JhbmdlIC0gc3luYyBhIGZpbGUgc2VnbWVudCB3aXRoIGRpc2sKICAjIGNvcHlfZmlsZV9yYW5nZSAtIENvcHkgYSByYW5nZSBvZiBkYXRhIGZyb20gb25lIGZpbGUgdG8gYW5vdGhlcgogICMgc2lncGVuZGluZyAtIGV4YW1pbmUgcGVuZGluZyBzaWduYWxzCiAgIyBydF9zaWdwZW5kaW5nIC0gZXhhbWluZSBwZW5kaW5nIHNpZ25hbHMKICAjIGdldHVud2luZCAtIGNvcHkgdGhlIHVud2luZCBkYXRhIHRvIGNhbGxlcidzIGJ1ZmZlcgogICMgbXN5bmMgLSBzeW5jaHJvbml6ZSBhIGZpbGUgd2l0aCBhIG1lbW9yeSBtYXAKICAjIGdldF9yb2J1c3RfbGlzdCAtIGdldC9zZXQgbGlzdCBvZiByb2J1c3QgZnV0ZXhlcwogICMgc2V0X3JvYnVzdF9saXN0IC0gZ2V0L3NldCBsaXN0IG9mIHJvYnVzdCBmdXRleGVzCiAgIyBkdXAgLSBkdXBsaWNhdGUgYSBmaWxlIGRlc2NyaXB0b3IKICAjIGR1cDIgLSBkdXBsaWNhdGUgYSBmaWxlIGRlc2NyaXB0b3IKICAjIGR1cDMgLSBkdXBsaWNhdGUgYSBmaWxlIGRlc2NyaXB0b3IKICAjIHMzOTBfcGNpX21taW9fd3JpdGUgLSB0cmFuc2ZlciBkYXRhIHRvL2Zyb20gUENJIE1NSU8gbWVtb3J5IHBhZ2UKICAjIHMzOTBfcGNpX21taW9fcmVhZCAtIHRyYW5zZmVyIGRhdGEgdG8vZnJvbSBQQ0kgTU1JTyBtZW1vcnkgcGFnZQogICMgcGF1c2UgLSB3YWl0IGZvciBzaWduYWwKICAjIHN3YXBvbiAtIHN0YXJ0L3N0b3Agc3dhcHBpbmcgdG8gZmlsZS9kZXZpY2UKICAjIHN3YXBvZmYgLSBzdGFydC9zdG9wIHN3YXBwaW5nIHRvIGZpbGUvZGV2aWNlCgogICMgUmVjb3JkIHR5cGUgbm9ybWFsaXphdGlvbnMKICAjIFVzZWZ1bCBsaW5rczoKICAjIGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS90b3J2YWxkcy9saW51eC92NC4xNi9pbmNsdWRlL3VhcGkvbGludXgvYXVkaXQuaAogICMgaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2xpbnV4LWF1ZGl0L2F1ZGl0LXVzZXJzcGFjZS80ZDkzMzMwMWIxODM1Y2FmYTA4YjllOWVmNzA1YzhmYjZjOTZjYjYyL2xpYi9saWJhdWRpdC5oCiAgIyBodHRwczovL3d3dy5lbGFzdGljLmNvL2d1aWRlL2VuL2Vjcy9jdXJyZW50L2Vjcy1hbGxvd2VkLXZhbHVlcy1ldmVudC1jYXRlZ29yeS5odG1sCgogICMgSUFNIHJlbGF0ZWQgZXZlbnRzCgogICMgQVVESVRfQUNDVF9MT0NLIC0gVXNlcidzIGFjY291bnQgbG9ja2VkIGJ5IGFkbWluCiAgLSByZWNvcmRfdHlwZXM6IEFDQ1RfTE9DSwogICAgYWN0aW9uOiBsb2NrZWQtYWNjb3VudAogICAgZWNzOgogICAgICA8PDogKmVjcy1pYW0KICAgICAgdHlwZToKICAgICAgICAtIHVzZXIKICAgICAgICAtIGluZm8KICAjIEFVRElUX0FDQ1RfVU5MT0NLIC0gVXNlcidzIGFjY291bnQgdW5sb2NrZWQgYnkgYWRtaW4KICAtIHJlY29yZF90eXBlczogQUNDVF9VTkxPQ0sKICAgIGFjdGlvbjogdW5sb2NrZWQtYWNjb3VudAogICAgZWNzOgogICAgICA8PDogKmVjcy1pYW0KICAgICAgdHlwZToKICAgICAgICAtIHVzZXIKICAgICAgICAtIGluZm8KICAjIEFVRElUX0FERF9HUk9VUCAtIEdyb3VwIGFjY291bnQgYWRkZWQKICAtIHJlY29yZF90eXBlczogQUREX0dST1VQCiAgICBhY3Rpb246IGFkZGVkLWdyb3VwLWFjY291bnQtdG8KICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogW2lkLCBhY2N0XQogICAgICB3aGF0OiBhY2NvdW50CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWlhbQogICAgICA8PDogKmVjcy1ncm91cC1tb2RpZmljYXRpb24tbWFwcGluZ3MKICAgICAgdHlwZToKICAgICAgICAtIGdyb3VwCiAgICAgICAgLSBjcmVhdGlvbgoKICAjIEFVRElUX0FERF9VU0VSIC0gVXNlciBhY2NvdW50IGFkZGVkCiAgLSByZWNvcmRfdHlwZXM6IEFERF9VU0VSCiAgICBhY3Rpb246IGFkZGVkLXVzZXItYWNjb3VudAogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBbaWQsIGFjY3RdCiAgICAgIHdoYXQ6IGFjY291bnQKICAgIGVjczoKICAgICAgPDw6ICplY3MtaWFtCiAgICAgIDw8OiAqZWNzLXVzZXItbW9kaWZpY2F0aW9uLW1hcHBpbmdzCiAgICAgIHR5cGU6CiAgICAgICAgLSB1c2VyCiAgICAgICAgLSBjcmVhdGlvbgogICMgQVVESVRfREVMX0dST1VQIC0gR3JvdXAgYWNjb3VudCBkZWxldGVkCiAgLSByZWNvcmRfdHlwZXM6IERFTF9HUk9VUAogICAgYWN0aW9uOiBkZWxldGVkLWdyb3VwLWFjY291bnQtZnJvbQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBbaWQsIGFjY3RdCiAgICAgIHdoYXQ6IGFjY291bnQKICAgIGVjczoKICAgICAgPDw6ICplY3MtaWFtCiAgICAgIDw8OiAqZWNzLWdyb3VwLW1vZGlmaWNhdGlvbi1tYXBwaW5ncwogICAgICB0eXBlOgogICAgICAgIC0gZ3JvdXAKICAgICAgICAtIGRlbGV0aW9uCiAgIyBBVURJVF9ERUxfVVNFUiAtIFVzZXIgYWNjb3VudCBkZWxldGVkCiAgLSByZWNvcmRfdHlwZXM6IERFTF9VU0VSCiAgICBhY3Rpb246IGRlbGV0ZWQtdXNlci1hY2NvdW50CiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IFtpZCwgYWNjdF0KICAgICAgd2hhdDogYWNjb3VudAogICAgZWNzOgogICAgICA8PDogKmVjcy1pYW0KICAgICAgPDw6ICplY3MtdXNlci1tb2RpZmljYXRpb24tbWFwcGluZ3MKICAgICAgdHlwZToKICAgICAgICAtIHVzZXIKICAgICAgICAtIGRlbGV0aW9uCiAgIyBBVURJVF9HUlBfTUdNVCAtIEdyb3VwIGFjY291bnQgYXR0ciB3YXMgbW9kaWZpZWQKICAtIHJlY29yZF90eXBlczogR1JQX01HTVQKICAgIGFjdGlvbjogbW9kaWZpZWQtZ3JvdXAtYWNjb3VudAogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBbaWQsIGFjY3RdCiAgICAgIHdoYXQ6IGFjY291bnQKICAgIGVjczoKICAgICAgPDw6ICplY3MtaWFtCiAgICAgIHR5cGU6CiAgICAgICAgLSBncm91cAogICAgICAgIC0gY2hhbmdlCiAgICAgIG1hcHBpbmdzOgogICAgICAgIC0gZnJvbTogYWN0b3IucHJpbWFyeQogICAgICAgICAgdG86IHVzZXIKICAgICAgICAtIGZyb206IGFjdG9yLnNlY29uZGFyeQogICAgICAgICAgdG86IGdyb3VwLnRhcmdldAogICAgICAgIC0gZnJvbTogdWlkLnVpZAogICAgICAgICAgdG86IHVzZXIuZWZmZWN0aXZlCiAgIyBBVURJVF9ST0xFX0FTU0lHTiAtIEFkbWluIGFzc2lnbmVkIHVzZXIgdG8gcm9sZQogIC0gcmVjb3JkX3R5cGVzOiBST0xFX0FTU0lHTgogICAgYWN0aW9uOiBhc3NpZ25lZC11c2VyLXJvbGUtdG8KICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogW2lkLCBhY2N0XQogICAgICB3aGF0OiBhY2NvdW50CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWlhbQogICAgICB0eXBlOgogICAgICAgIC0gdXNlcgogICAgICAgIC0gY2hhbmdlCiAgIyBBVURJVF9ST0xFX01PRElGWSAtIEFkbWluIG1vZGlmaWVkIGEgcm9sZQogIC0gcmVjb3JkX3R5cGVzOiBST0xFX01PRElGWQogICAgYWN0aW9uOiBtb2RpZmllZC1yb2xlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWlhbQogICAgICB0eXBlOgogICAgICAgIC0gY2hhbmdlCiAgIyBBVURJVF9ST0xFX1JFTU9WRSAtIEFkbWluIHJlbW92ZWQgdXNlciBmcm9tIHJvbGUKICAtIHJlY29yZF90eXBlczogUk9MRV9SRU1PVkUKICAgIGFjdGlvbjogcmVtb3ZlZC11c2VyLXJvbGUtZnJvbQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBbaWQsIGFjY3RdCiAgICAgIHdoYXQ6IGFjY291bnQKICAgIGVjczoKICAgICAgPDw6ICplY3MtaWFtCiAgICAgIHR5cGU6CiAgICAgICAgLSB1c2VyCiAgICAgICAgLSBjaGFuZ2UKICAjIEFVRElUX1VTRVJfTUdNVCAtIFVzZXIgYWNjdCBhdHRyaWJ1dGUgY2hhbmdlCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBVU0VSX01HTVQKICAgIGFjdGlvbjogbW9kaWZpZWQtdXNlci1hY2NvdW50CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWlhbQogICAgICB0eXBlOgogICAgICAgIC0gdXNlcgogICAgICAgIC0gY2hhbmdlCiAgICAgIG1hcHBpbmdzOgogICAgICAgIC0gZnJvbTogYWN0b3IucHJpbWFyeQogICAgICAgICAgdG86IHVzZXIKICAgICAgICAtIGZyb206IGFjdG9yLnNlY29uZGFyeQogICAgICAgICAgdG86IHVzZXIudGFyZ2V0CiAgICAgICAgLSBmcm9tOiB1aWQudWlkCiAgICAgICAgICB0bzogdXNlci5lZmZlY3RpdmUKICAjIEFVRElUX1VTRVJfQ0hBVVRIVE9LIC0gVXNlciBhY2N0IHBhc3N3b3JkIG9yIHBpbiBjaGFuZ2VkCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBVU0VSX0NIQVVUSFRPSwogICAgYWN0aW9uOiBjaGFuZ2VkLXBhc3N3b3JkCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWlhbQogICAgICB0eXBlOgogICAgICAgIC0gdXNlcgogICAgICAgIC0gY2hhbmdlCiAgICAgIG1hcHBpbmdzOgogICAgICAgIC0gZnJvbTogYWN0b3IucHJpbWFyeQogICAgICAgICAgdG86IHVzZXIKICAgICAgICAtIGZyb206IHVpZC51aWQKICAgICAgICAgIHRvOiB1c2VyLmVmZmVjdGl2ZQogICAgICAgIC0gZnJvbTogYWN0b3Iuc2Vjb25kYXJ5CiAgICAgICAgICB0bzogdXNlci50YXJnZXQKCiAgIyBBVURJVF9HUlBfQ0hBVVRIVE9LIC0gR3JvdXAgYWNjdCBwYXNzd29yZCBvciBwaW4gY2hhbmdlZAogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogR1JQX0NIQVVUSFRPSwogICAgYWN0aW9uOiBjaGFuZ2VkLWdyb3VwLXBhc3N3b3JkCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGFjY3QKICAgICAgd2hhdDogdXNlci1zZXNzaW9uCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWlhbQogICAgICB0eXBlOgogICAgICAgIC0gZ3JvdXAKICAgICAgICAtIGNoYW5nZQogICAgICBtYXBwaW5nczoKICAgICAgICAtIGZyb206IGFjdG9yLnByaW1hcnkKICAgICAgICAgIHRvOiB1c2VyCiAgICAgICAgLSBmcm9tOiB1aWQudWlkCiAgICAgICAgICB0bzogdXNlci5lZmZlY3RpdmUKICAgICAgICAtIGZyb206IGFjdG9yLnNlY29uZGFyeQogICAgICAgICAgdG86IGdyb3VwLnRhcmdldAoKICAjIEF1dGhlbnRpY2F0aW9uIHJlbGF0ZWQgZXZlbnRzCgogICMgQVVESVRfQ1JFRF9BQ1EgLSBVc2VyIGNyZWRlbnRpYWwgYWNxdWlyZWQKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IENSRURfQUNRCiAgICBhY3Rpb246IGFjcXVpcmVkLWNyZWRlbnRpYWxzCiAgICBlY3M6ICplY3MtYXV0aAogICMgQVVESVRfQ1JFRF9ESVNQIC0gVXNlciBjcmVkZW50aWFsIGRpc3Bvc2VkCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBDUkVEX0RJU1AKICAgIGFjdGlvbjogZGlzcG9zZWQtY3JlZGVudGlhbHMKICAgIGVjczogKmVjcy1hdXRoCiAgIyBBVURJVF9DUkVEX1JFRlIgLSBVc2VyIGNyZWRlbnRpYWwgcmVmcmVzaGVkCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBDUkVEX1JFRlIKICAgIGFjdGlvbjogcmVmcmVzaGVkLWNyZWRlbnRpYWxzCiAgICBlY3M6ICplY3MtYXV0aAogICMgQVVESVRfR1JQX0FVVEggLSBBdXRoZW50aWNhdGlvbiBmb3IgZ3JvdXAgcGFzc3dvcmQKICAtIHJlY29yZF90eXBlczogR1JQX0FVVEgKICAgIGFjdGlvbjogYXV0aGVudGljYXRlZC10by1ncm91cAogICAgZWNzOiAqZWNzLWF1dGgKICAjIEFVRElUX0xPR0lOIC0gRGVmaW5lIHRoZSBsb2dpbiBpZCBhbmQgaW5mb3JtYXRpb24KICAtIHJlY29yZF90eXBlczogTE9HSU4KICAgIGFjdGlvbjogY2hhbmdlZC1sb2dpbi1pZC10bwogICAgc3ViamVjdDoKICAgICAgcHJpbWFyeTogW29sZF9hdWlkLCBvbGQtYXVpZF0KICAgICAgc2Vjb25kYXJ5OiB1aWQKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogW25ldy1hdWlkLCBuZXdfYXVpZCwgYXVpZF0KICAgICAgd2hhdDogdXNlci1zZXNzaW9uCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWF1dGgKICAgICAgdHlwZTogc3RhcnQKICAgICAgbWFwcGluZ3M6CiAgICAgICAgLSBmcm9tOiBhY3Rvci5wcmltYXJ5CiAgICAgICAgICB0bzogdXNlcgogICAgICAgIC0gZnJvbTogb2JqZWN0LnByaW1hcnkKICAgICAgICAgIHRvOiB1c2VyLmVmZmVjdGl2ZQogICMgQVVESVRfVVNFUl9BQ0NUIC0gVXNlciBzeXN0ZW0gYWNjZXNzIGF1dGhvcml6YXRpb24KICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IFVTRVJfQUNDVAogICAgYWN0aW9uOiB3YXMtYXV0aG9yaXplZAogICAgZWNzOiAqZWNzLWF1dGgKICAjIEFVRElUX1VTRVJfQVVUSCAtIFVzZXIgc3lzdGVtIGFjY2VzcyBhdXRoZW50aWNhdGlvbgogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogVVNFUl9BVVRICiAgICBhY3Rpb246IGF1dGhlbnRpY2F0ZWQKICAgIGVjczogKmVjcy1hdXRoCiAgIyBBVURJVF9VU0VSX0VORCAtIFVzZXIgc2Vzc2lvbiBlbmQKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IFVTRVJfRU5ECiAgICBhY3Rpb246IGVuZGVkLXNlc3Npb24KICAgIGVjczogKmVjcy1hdXRoCiAgIyBBVURJVF9VU0VSX0VSUiAtIFVzZXIgYWNjdCBzdGF0ZSBlcnJvcgogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogVVNFUl9FUlIKICAgIGFjdGlvbjogZXJyb3IKICAgIHNvdXJjZV9pcDogW2FkZHJdCiAgICBlY3M6ICplY3MtYXV0aAogICMgQVVESVRfVVNFUl9MT0dJTiAtIFVzZXIgaGFzIGxvZ2dlZCBpbgogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogVVNFUl9MT0dJTgogICAgYWN0aW9uOiBsb2dnZWQtaW4KICAgIHNvdXJjZV9pcDogW2FkZHJdCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWF1dGgKICAgICAgdHlwZTogc3RhcnQKICAjIEFVRElUX1VTRVJfTE9HT1VUIC0gVXNlciBoYXMgbG9nZ2VkIG91dAogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogVVNFUl9MT0dPVVQKICAgIGFjdGlvbjogbG9nZ2VkLW91dAogICAgZWNzOgogICAgICA8PDogKmVjcy1hdXRoCiAgICAgIHR5cGU6IGVuZAogICMgQVVESVRfVVNFUl9ST0xFX0NIQU5HRSAtIFVzZXIgY2hhbmdlZCB0byBhIG5ldyByb2xlCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBVU0VSX1JPTEVfQ0hBTkdFCiAgICBhY3Rpb246IGNoYW5nZWQtcm9sZS10bwogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBzZWxlY3RlZC1jb250ZXh0CiAgICAgIHdoYXQ6IHVzZXItc2Vzc2lvbgogICMgQVVESVRfVVNFUl9TVEFSVCAtIFVzZXIgc2Vzc2lvbiBzdGFydAogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogVVNFUl9TVEFSVAogICAgYWN0aW9uOiBzdGFydGVkLXNlc3Npb24KICAgIHNvdXJjZV9pcDogW2FkZHJdCiAgICBlY3M6ICplY3MtYXV0aAoKICAjIEhvc3QgdmlydHVhbGl6YXRpb24gZXZlbnRzCgogICMgQVVESVRfVklSVF9DT05UUk9MIC0gU3RhcnQsIFBhdXNlLCBTdG9wIFZNCiAgLSByZWNvcmRfdHlwZXM6IFZJUlRfQ09OVFJPTAogICAgYWN0aW9uOiBpc3N1ZWQtdm0tY29udHJvbAogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBvcAogICAgICBzZWNvbmRhcnk6IHZtCiAgICAgIHdoYXQ6IHZpcnR1YWwtbWFjaGluZQogICAgZWNzOiAqZWNzLWhvc3QKICAjIEFVRElUX1ZJUlRfQ1JFQVRFIC0gQ3JlYXRpb24gb2YgZ3Vlc3QgaW1hZ2UKICAtIHJlY29yZF90eXBlczogVklSVF9DUkVBVEUKICAgIGFjdGlvbjogY3JlYXRlZC12bS1pbWFnZQogICAgZWNzOiAqZWNzLWhvc3QKICAjIEFVRElUX1ZJUlRfREVTVFJPWSAtIERlc3RydWN0aW9uIG9mIGd1ZXN0IGltYWdlCiAgLSByZWNvcmRfdHlwZXM6IFZJUlRfREVTVFJPWQogICAgYWN0aW9uOiBkZWxldGVkLXZtLWltYWdlCiAgICBlY3M6ICplY3MtaG9zdAogICMgQVVESVRfVklSVF9JTlRFR1JJVFlfQ0hFQ0sgLSBHdWVzdCBpbnRlZ3JpdHkgcmVzdWx0cwogIC0gcmVjb3JkX3R5cGVzOiBWSVJUX0lOVEVHUklUWV9DSEVDSwogICAgYWN0aW9uOiBjaGVja2VkLWludGVncml0eS1vZgogICAgZWNzOiAqZWNzLWhvc3QKICAjIEFVRElUX1ZJUlRfTUFDSElORV9JRCAtIEJpbmRpbmcgb2YgbGFiZWwgdG8gVk0KICAtIHJlY29yZF90eXBlczogVklSVF9NQUNISU5FX0lECiAgICBhY3Rpb246IGFzc2lnbmVkLXZtLWlkCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IHZtCiAgICAgIHdoYXQ6IHZpcnR1YWwtbWFjaGluZQogICAgZWNzOiAqZWNzLWhvc3QKICAjIEFVRElUX1ZJUlRfTUlHUkFURV9JTiAtIEluYm91bmQgZ3Vlc3QgbWlncmF0aW9uIGluZm8KICAtIHJlY29yZF90eXBlczogVklSVF9NSUdSQVRFX0lOCiAgICBhY3Rpb246IG1pZ3JhdGVkLXZtLWZyb20KICAgIGVjczogKmVjcy1ob3N0CiAgIyBBVURJVF9WSVJUX01JR1JBVEVfT1VUIC0gT3V0Ym91bmQgZ3Vlc3QgbWlncmF0aW9uIGluZm8KICAtIHJlY29yZF90eXBlczogVklSVF9NSUdSQVRFX09VVAogICAgYWN0aW9uOiBtaWdyYXRlZC12bS10bwogICAgZWNzOiAqZWNzLWhvc3QKICAjIEFVRElUX1ZJUlRfUkVTT1VSQ0UgLSBSZXNvdXJjZSBhc3NpZ25tZW50CiAgLSByZWNvcmRfdHlwZXM6IFZJUlRfUkVTT1VSQ0UKICAgIGFjdGlvbjogYXNzaWduZWQtdm0tcmVzb3VyY2UKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogcmVzcmMKICAgICAgc2Vjb25kYXJ5OiB2bQogICAgICB3aGF0OiB2aXJ0dWFsLW1hY2hpbmUKICAgIGVjczogKmVjcy1ob3N0CgogICMgVXNlcnNwYWNlIHByb2Nlc3MgZXZlbnRzCgogICMgQVVESVRfQ0hHUlBfSUQgLSBVc2VyIHNwYWNlIGdyb3VwIElEIGNoYW5nZWQKICAtIHJlY29yZF90eXBlczogQ0hHUlBfSUQKICAgIGFjdGlvbjogY2hhbmdlZC1ncm91cAogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IGNoYW5nZQogICMgQVVESVRfQ0hVU0VSX0lEIC0gQ2hhbmdlZCB1c2VyIElEIHN1cHBsZW1lbnRhbCBkYXRhCiAgLSByZWNvcmRfdHlwZXM6IENIVVNFUl9JRAogICAgYWN0aW9uOiBjaGFuZ2VkLXVzZXItaWQKICAgIGVjczoKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBjaGFuZ2UKICAjIEFVRElUX1RFU1QgLSBVc2VkIGZvciB0ZXN0IHN1Y2Nlc3MgbWVzc2FnZXMKICAtIHJlY29yZF90eXBlczogVEVTVAogICAgYWN0aW9uOiBzZW50LXRlc3QKICAgIGVjczogKmVjcy1wcm9jZXNzCiAgIyBBVURJVF9UUlVTVEVEX0FQUCAtIFRydXN0ZWQgYXBwIG1zZyAtIGZyZWVzdHlsZSB0ZXh0CiAgLSByZWNvcmRfdHlwZXM6IFRSVVNURURfQVBQCiAgICBhY3Rpb246IHVua25vd24KICAgIGVjczogKmVjcy1wcm9jZXNzCiAgIyBBVURJVF9VU0VSX0NNRCAtIFVzZXIgc2hlbGwgY29tbWFuZCBhbmQgYXJncwogIC0gcmVjb3JkX3R5cGVzOiBVU0VSX0NNRAogICAgYWN0aW9uOiByYW4tY29tbWFuZAogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBjbWQKICAgICAgd2hhdDogcHJvY2VzcwogICAgZGVzY3JpcHRpb246ID4KICAgICAgVGhlc2UgbWVzc2FnZXMgYXJlIGZyb20gdXNlci1zcGFjZSBhcHBzLCBsaWtlIHN1ZG8sIHRoYXQgbG9nIGNvbW1hbmRzCiAgICAgIGJlaW5nIHJ1biBieSBhIHVzZXIuIFRoZSB1aWQgY29udGFpbmVkIGluIHRoZXNlIG1lc3NhZ2VzIGlzIHVzZXIncyBVSUQgYXQKICAgICAgdGhlIHRpbWUgdGhlIGNvbW1hbmQgd2FzIHJ1bi4gSXQgaXMgbm90IHRoZSAidGFyZ2V0IiBVSUQgdXNlZCB0byBydW4gdGhlCiAgICAgIGNvbW1hbmQsIHdoaWNoIGlzIG5vcm1hbGx5IHJvb3QuCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogc3RhcnQKCiAgIyBIb3N0LWxldmVsIGV2ZW50cwoKICAjIEFVRElUX1NZU1RFTV9CT09UIC0gU3lzdGVtIGJvb3QKICAtIHJlY29yZF90eXBlczogU1lTVEVNX0JPT1QKICAgIGFjdGlvbjogYm9vdGVkLXN5c3RlbQogICAgb2JqZWN0OgogICAgICB3aGF0OiBzeXN0ZW0KICAgIGVjczoKICAgICAgPDw6ICplY3MtaG9zdAogICAgICB0eXBlOiBzdGFydAogICMgQVVESVRfU1lTVEVNX1JVTkxFVkVMIC0gU3lzdGVtIHJ1bmxldmVsIGNoYW5nZQogIC0gcmVjb3JkX3R5cGVzOiBTWVNURU1fUlVOTEVWRUwKICAgIGFjdGlvbjogY2hhbmdlZC10by1ydW5sZXZlbAogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBuZXctbGV2ZWwKICAgICAgd2hhdDogc3lzdGVtCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWhvc3QKICAgICAgdHlwZTogY2hhbmdlCiAgIyBBVURJVF9TWVNURU1fU0hVVERPV04gLSBTeXN0ZW0gc2h1dGRvd24KICAtIHJlY29yZF90eXBlczogU1lTVEVNX1NIVVRET1dOCiAgICBhY3Rpb246IHNodXRkb3duLXN5c3RlbQogICAgb2JqZWN0OgogICAgICB3aGF0OiBzeXN0ZW0KICAgIGVjczoKICAgICAgPDw6ICplY3MtaG9zdAogICAgICB0eXBlOiBlbmQKCiAgIyBTZXJ2aWNlLWxldmVsIGV2ZW50cwoKICAjIEFVRElUX1NFUlZJQ0VfU1RBUlQgLSBTZXJ2aWNlIChkYWVtb24pIHN0YXJ0CiAgLSByZWNvcmRfdHlwZXM6IFNFUlZJQ0VfU1RBUlQKICAgIGFjdGlvbjogc3RhcnRlZC1zZXJ2aWNlCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IHVuaXQKICAgICAgd2hhdDogc2VydmljZQogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IHN0YXJ0CiAgIyBBVURJVF9TRVJWSUNFX1NUT1AgLSBTZXJ2aWNlIChkYWVtb24pIHN0b3AKICAtIHJlY29yZF90eXBlczogU0VSVklDRV9TVE9QCiAgICBhY3Rpb246IHN0b3BwZWQtc2VydmljZQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiB1bml0CiAgICAgIHdoYXQ6IHNlcnZpY2UKICAgIGVjczoKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBzdG9wCgogICMgQXVkaXRkIGludGVybmFsIGV2ZW50cwoKICAjIEFVRElUX0NPTkZJR19DSEFOR0UgLSBBdWRpdCBzeXN0ZW0gY29uZmlndXJhdGlvbiBjaGFuZ2UKICAtIHJlY29yZF90eXBlczogQ09ORklHX0NIQU5HRQogICAgYWN0aW9uOiBjaGFuZ2VkLWF1ZGl0LWNvbmZpZ3VyYXRpb24KICAgIG9iamVjdDoKICAgICAgcHJpbWFyeToKICAgICAgICBbb3AsIGtleSwgYXVkaXRfZW5hYmxlZCwgYXVkaXRfcGlkLCBhdWRpdF9iYWNrbG9nX2xpbWl0LCBhdWRpdF9mYWlsdXJlXQogICAgICB3aGF0OiBhdWRpdC1jb25maWcKICAgIGVjczoKICAgICAgY2F0ZWdvcnk6IFtwcm9jZXNzLCBjb25maWd1cmF0aW9uXQogICAgICB0eXBlOiBjaGFuZ2UKICAjIEFVRElUX0RBRU1PTl9BQk9SVCAtIERhZW1vbiBlcnJvciBzdG9wIHJlY29yZAogIC0gcmVjb3JkX3R5cGVzOiBEQUVNT05fQUJPUlQKICAgIGFjdGlvbjogYWJvcnRlZC1hdWRpdGQtc3RhcnR1cAogICAgb2JqZWN0OgogICAgICB3aGF0OiBzZXJ2aWNlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogc3RvcAogICMgQVVESVRfREFFTU9OX0FDQ0VQVCAtIEF1ZGl0ZCBhY2NlcHRlZCByZW1vdGUgY29ubmVjdGlvbgogIC0gcmVjb3JkX3R5cGVzOiBEQUVNT05fQUNDRVBUCiAgICBhY3Rpb246IHJlbW90ZS1hdWRpdC1jb25uZWN0ZWQKICAgIG9iamVjdDoKICAgICAgd2hhdDogc2VydmljZQogICAgZWNzOgogICAgICA8PDogKmVjcy1uZXR3b3JrCiAgICAgIHR5cGU6CiAgICAgICAgLSBjb25uZWN0aW9uCiAgICAgICAgLSBzdGFydAogICMgQVVESVRfREFFTU9OX0NMT1NFIC0gQXVkaXRkIGNsb3NlZCByZW1vdGUgY29ubmVjdGlvbgogIC0gcmVjb3JkX3R5cGVzOiBEQUVNT05fQ0xPU0UKICAgIGFjdGlvbjogcmVtb3RlLWF1ZGl0LWRpc2Nvbm5lY3RlZAogICAgb2JqZWN0OgogICAgICB3aGF0OiBzZXJ2aWNlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLW5ldHdvcmsKICAgICAgdHlwZToKICAgICAgICAtIGNvbm5lY3Rpb24KICAgICAgICAtIHN0YXJ0CiAgIyBBVURJVF9EQUVNT05fQ09ORklHIC0gRGFlbW9uIGNvbmZpZyBjaGFuZ2UKICAtIHJlY29yZF90eXBlczogREFFTU9OX0NPTkZJRwogICAgYWN0aW9uOiBjaGFuZ2VkLWF1ZGl0ZC1jb25maWd1cmF0aW9uCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNlcnZpY2UKICAgIGVjczoKICAgICAgY2F0ZWdvcnk6IFtwcm9jZXNzLCBjb25maWd1cmF0aW9uXQogICAgICB0eXBlOiBjaGFuZ2UKICAjIEFVRElUX0RBRU1PTl9FTkQgLSBEYWVtb24gbm9ybWFsIHN0b3AgcmVjb3JkCiAgLSByZWNvcmRfdHlwZXM6IERBRU1PTl9FTkQKICAgIGFjdGlvbjogc2h1dGRvd24tYXVkaXQKICAgIG9iamVjdDoKICAgICAgd2hhdDogc2VydmljZQogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IHN0b3AKICAjIEFVRElUX0RBRU1PTl9FUlIgLSBBdWRpdGQgaW50ZXJuYWwgZXJyb3IKICAtIHJlY29yZF90eXBlczogREFFTU9OX0VSUgogICAgYWN0aW9uOiBhdWRpdC1lcnJvcgogICAgb2JqZWN0OgogICAgICB3aGF0OiBzZXJ2aWNlCiAgICBlY3M6ICplY3MtcHJvY2VzcwogICMgQVVESVRfREFFTU9OX1JFQ09ORklHIC0gQXVkaXRkIHNob3VsZCByZWNvbmZpZ3VyZQogIC0gcmVjb3JkX3R5cGVzOiBEQUVNT05fUkVDT05GSUcKICAgIGFjdGlvbjogcmVjb25maWd1cmVkLWF1ZGl0ZAogICAgb2JqZWN0OgogICAgICB3aGF0OiBzZXJ2aWNlCiAgICBlY3M6CiAgICAgIGNhdGVnb3J5OiBbcHJvY2VzcywgY29uZmlndXJhdGlvbl0KICAgICAgdHlwZTogaW5mbwogICMgQVVESVRfREFFTU9OX1JFU1VNRSAtIEF1ZGl0ZCBzaG91bGQgcmVzdW1lIGxvZ2dpbmcKICAtIHJlY29yZF90eXBlczogREFFTU9OX1JFU1VNRQogICAgYWN0aW9uOiByZXN1bWVkLWF1ZGl0LWxvZ2dpbmcKICAgIG9iamVjdDoKICAgICAgd2hhdDogc2VydmljZQogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IGNoYW5nZQogICMgQVVESVRfREFFTU9OX1JPVEFURSAtIEF1ZGl0ZCBzaG91bGQgcm90YXRlIGxvZ3MKICAtIHJlY29yZF90eXBlczogREFFTU9OX1JPVEFURQogICAgYWN0aW9uOiByb3RhdGVkLWF1ZGl0LWxvZ3MKICAgIG9iamVjdDoKICAgICAgd2hhdDogc2VydmljZQogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IGNoYW5nZQogICMgQVVESVRfREFFTU9OX1NUQVJUIC0gRGFlbW9uIHN0YXJ0dXAgcmVjb3JkCiAgLSByZWNvcmRfdHlwZXM6IERBRU1PTl9TVEFSVAogICAgYWN0aW9uOiBzdGFydGVkLWF1ZGl0CiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNlcnZpY2UKICAgIGVjczoKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBzdGFydAogICMgQVVESVRfS0VSTkVMIC0gQXN5bmNocm9ub3VzIGF1ZGl0IHJlY29yZC4gTk9UIEEgUkVRVUVTVC4KICAtIHJlY29yZF90eXBlczogS0VSTkVMCiAgICBhY3Rpb246IGluaXRpYWxpemVkLWF1ZGl0LXN1YnN5c3RlbQogICAgZWNzOiAqZWNzLXByb2Nlc3MKCiAgIyBDb25maWd1cmF0aW9uIGNoYW5nZSBldmVudHMKCiAgIyBBVURJVF9VU1lTX0NPTkZJRyAtIFVzZXIgc3BhY2Ugc3lzdGVtIGNvbmZpZyBjaGFuZ2UKICAtIHJlY29yZF90eXBlczogVVNZU19DT05GSUcKICAgIGFjdGlvbjogY2hhbmdlZC1jb25maWd1cmF0aW9uCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IG9wCiAgICAgIHdoYXQ6IHN5c3RlbQogICAgZWNzOgogICAgICBjYXRlZ29yeTogY29uZmlndXJhdGlvbgogICAgICB0eXBlOiBjaGFuZ2UKICAjIEFVRElUX05FVEZJTFRFUl9DRkcgLSBOZXRmaWx0ZXIgY2hhaW4gbW9kaWZpY2F0aW9ucwogIC0gcmVjb3JkX3R5cGVzOiBORVRGSUxURVJfQ0ZHCiAgICBhY3Rpb246IGxvYWRlZC1maXJld2FsbC1ydWxlLXRvCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IHRhYmxlCiAgICAgIHdoYXQ6IGZpcmV3YWxsCiAgICBlY3M6CiAgICAgIGNhdGVnb3J5OiBjb25maWd1cmF0aW9uCiAgICAgIHR5cGU6IGNoYW5nZQogICMgQVVESVRfRkVBVFVSRV9DSEFOR0UgLSBhdWRpdCBsb2cgbGlzdGluZyBmZWF0dXJlIGNoYW5nZXMKICAtIHJlY29yZF90eXBlczogRkVBVFVSRV9DSEFOR0UKICAgIGFjdGlvbjogY2hhbmdlZC1hdWRpdC1mZWF0dXJlCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGZlYXR1cmUKICAgICAgd2hhdDogc3lzdGVtCiAgICBlY3M6CiAgICAgIGNhdGVnb3J5OiBjb25maWd1cmF0aW9uCiAgICAgIHR5cGU6IGNoYW5nZQogICMgQVVESVRfUkVQTEFDRSAtIFJlcGxhY2UgYXVkaXRkIGlmIHRoaXMgcGFja2V0IHVuYW5zd2VyZAoKICAjIFRUWSBldmVudHMKCiAgLSByZWNvcmRfdHlwZXM6CiAgICAgICMgQVVESVRfVFRZIC0gSW5wdXQgb24gYW4gYWRtaW5pc3RyYXRpdmUgVFRZCiAgICAgIC0gVFRZCiAgICAgICMgQVVESVRfVVNFUl9UVFkgLSBOb24tSUNBTk9OIFRUWSBpbnB1dCBtZWFuaW5nCiAgICAgIC0gVVNFUl9UVFkKICAgIGFjdGlvbjogdHlwZWQKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogZGF0YQogICAgICB3aGF0OiBrZXlzdHJva2VzCiAgICBob3c6IFtjb21tLCBleGVdCgogICMgUG9saWN5IGV2ZW50cwoKICAjIEFVRElUX0FWQyAtIFNFIExpbnV4IGF2YyBkZW5pYWwgb3IgZ3JhbnQgKHNlbGludXgpCiAgLSByZWNvcmRfdHlwZXM6IEFWQwogICAgYWN0aW9uOiB2aW9sYXRlZC1zZWxpbnV4LXBvbGljeQogICAgc3ViamVjdDoKICAgICAgcHJpbWFyeTogc2NvbnRleHQKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogdGNvbnRleHQKICAgICAgc2Vjb25kYXJ5OiB0Y2xhc3MKICAgIGhhc19maWVsZHM6CiAgICAgIC0gc2VyZXN1bHQKICAjIEFVRElUX0FWQyAtIFNFIExpbnV4IGF2YyBkZW5pYWwgb3IgZ3JhbnQgKGFwcGFybW9yKQogIC0gcmVjb3JkX3R5cGVzOiBBVkMKICAgIGFjdGlvbjogdmlvbGF0ZWQtYXBwYXJtb3ItcG9saWN5CiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IG9wZXJhdGlvbgogICAgICBzZWNvbmRhcnk6IFtyZXF1ZXN0ZWRfbWFzaywgZGVuaWVkX21hc2ssIGNhcG5hbWVdCiAgICAgIHdoYXQ6IHBvbGljeQogICAgaGFzX2ZpZWxkczoKICAgICAgLSBhcHBhcm1vcgogICMgQVVESVRfRlNfUkVMQUJFTCAtIEZpbGVzeXN0ZW0gcmVsYWJlbGVkCiAgLSByZWNvcmRfdHlwZXM6IEZTX1JFTEFCRUwKICAgIGFjdGlvbjogcmVsYWJlbGVkLWZpbGVzeXN0ZW0KICAgIG9iamVjdDoKICAgICAgd2hhdDogbWFjLWNvbmZpZwogICMgQVVESVRfTEFCRUxfTEVWRUxfQ0hBTkdFIC0gT2JqZWN0J3MgbGV2ZWwgd2FzIGNoYW5nZWQKICAtIHJlY29yZF90eXBlczogTEFCRUxfTEVWRUxfQ0hBTkdFCiAgICBhY3Rpb246IG1vZGlmaWVkLWxldmVsLW9mCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IHByaW50ZXIKICAgICAgd2hhdDogcHJpbnRlcgogICMgQVVESVRfTEFCRUxfT1ZFUlJJREUgLSBBZG1pbiBpcyBvdmVycmlkaW5nIGEgbGFiZWwKICAtIHJlY29yZF90eXBlczogTEFCRUxfT1ZFUlJJREUKICAgIGFjdGlvbjogb3ZlcnJvZGUtbGFiZWwtb2YKICAgIG9iamVjdDoKICAgICAgd2hhdDogbWFjLWNvbmZpZwogICMgQVVESVRfTUFDX0NIRUNLIC0gVXNlciBzcGFjZSBNQUMgZGVjaXNpb24gcmVzdWx0cwogIC0gcmVjb3JkX3R5cGVzOiBNQUNfQ0hFQ0sKICAgIGFjdGlvbjogbWFjLXBlcm1pc3Npb24KICAjIEFVRElUX01BQ19DT05GSUdfQ0hBTkdFIC0gQ2hhbmdlcyB0byBib29sZWFucwogIC0gcmVjb3JkX3R5cGVzOiBNQUNfQ09ORklHX0NIQU5HRQogICAgYWN0aW9uOiBjaGFuZ2VkLXNlbGludXgtYm9vbGVhbgogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBib29sCiAgICAgIHdoYXQ6IG1hYy1jb25maWcKICAgIGVjczoKICAgICAgY2F0ZWdvcnk6IGNvbmZpZ3VyYXRpb24KICAgICAgdHlwZTogY2hhbmdlCiAgIyBBVURJVF9NQUNfUE9MSUNZX0xPQUQgLSBQb2xpY3kgZmlsZSBsb2FkCiAgLSByZWNvcmRfdHlwZXM6IE1BQ19QT0xJQ1lfTE9BRAogICAgYWN0aW9uOiBsb2FkZWQtc2VsaW51eC1wb2xpY3kKICAgIG9iamVjdDoKICAgICAgd2hhdDogbWFjLWNvbmZpZwogICAgZWNzOgogICAgICBjYXRlZ29yeTogY29uZmlndXJhdGlvbgogICAgICB0eXBlOiBhY2Nlc3MKICAjIEFVRElUX01BQ19TVEFUVVMgLSBDaGFuZ2VkIGVuZm9yY2luZyxwZXJtaXNzaXZlLG9mZgogIC0gcmVjb3JkX3R5cGVzOiBNQUNfU1RBVFVTCiAgICBhY3Rpb246IGNoYW5nZWQtc2VsaW51eC1lbmZvcmNlbWVudAogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBlbmZvcmNpbmcKICAgICAgd2hhdDogbWFjLWNvbmZpZwogICAgZWNzOgogICAgICBjYXRlZ29yeTogY29uZmlndXJhdGlvbgogICAgICB0eXBlOiBjaGFuZ2UKICAjIEFVRElUX1VTRVJfQVZDIC0gVXNlciBzcGFjZSBhdmMgbWVzc2FnZQogIC0gcmVjb3JkX3R5cGVzOiBVU0VSX0FWQwogICAgYWN0aW9uOiBhY2Nlc3MtcGVybWlzc2lvbgogICMgQVVESVRfVVNFUl9NQUNfQ09ORklHX0NIQU5HRSAtIENoYW5nZSBtYWRlIHRvIE1BQyBwb2xpY3kKICAtIHJlY29yZF90eXBlczogVVNFUl9NQUNfQ09ORklHX0NIQU5HRQogICAgYWN0aW9uOiBjaGFuZ2VkLW1hYy1jb25maWd1cmF0aW9uCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IG1hYy1jb25maWcKICAgIGVjczoKICAgICAgY2F0ZWdvcnk6IGNvbmZpZ3VyYXRpb24KICAgICAgdHlwZTogY2hhbmdlCiAgIyBBVURJVF9VU0VSX01BQ19QT0xJQ1lfTE9BRCAtIFVzZXJzcGMgZGFlbW9uIGxvYWRlZCBwb2xpYwogIC0gcmVjb3JkX3R5cGVzOiBVU0VSX01BQ19QT0xJQ1lfTE9BRAogICAgYWN0aW9uOiBsb2FkZWQtbWFjLXBvbGljeQogICAgb2JqZWN0OgogICAgICB3aGF0OiBtYWMtY29uZmlnCiAgICBlY3M6CiAgICAgIGNhdGVnb3J5OiBjb25maWd1cmF0aW9uCiAgICAgIHR5cGU6IGFjY2VzcwogICMgQVVESVRfVVNFUl9TRUxJTlVYX0VSUiAtIFNFIExpbnV4IHVzZXIgc3BhY2UgZXJyb3IKICAtIHJlY29yZF90eXBlczogVVNFUl9TRUxJTlVYX0VSUgogICAgYWN0aW9uOiBhY2Nlc3MtZXJyb3IKICAjIEFVRElUX1NFQ0NPTVAgLSBTZWN1cmUgQ29tcHV0aW5nIGV2ZW50CiAgLSByZWNvcmRfdHlwZXM6IFNFQ0NPTVAKICAgIGFjdGlvbjogdmlvbGF0ZWQtc2VjY29tcC1wb2xpY3kKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogc3lzY2FsbAogICAgICB3aGF0OiBwcm9jZXNzCiAgIyBBVURJVF9TRUxJTlVYX0VSUiAtIEludGVybmFsIFNFIExpbnV4IEVycm9ycwogIC0gYWN0aW9uOiBjYXVzZWQtbWFjLXBvbGljeS1lcnJvcgogICAgb2JqZWN0OgogICAgICB3aGF0OiBzeXN0ZW0KICAgIHJlY29yZF90eXBlczogU0VMSU5VWF9FUlIKICAjIEFVRElUX0FQUEFSTU9SX0FMTE9XRUQKICAjIEFVRElUX0FQUEFSTU9SX0RFTklFRAogICMgQVVESVRfQVBQQVJNT1JfRVJST1IKICAjIEFVRElUX0FWQ19QQVRIIC0gZGVudHJ5LCB2ZnNtb3VudCBwYWlyIGZyb20gYXZjCiAgIyBBVURJVF9BUFBBUk1PUl9BVURJVAogICMgQVVESVRfQVBQQVJNT1JfSElOVAogICMgQVVESVRfQVBQQVJNT1JfU1RBVFVTCiAgIyBBVURJVF9BUFBBUk1PUl9FUlJPUgogICMgQVVESVRfREVWX0FMTE9DIC0gRGV2aWNlIHdhcyBhbGxvY2F0ZWQKICAjIEFVRElUX0RFVl9ERUFMTE9DIC0gRGV2aWNlIHdhcyBkZWFsbG9jYXRlZAogICMgQVVESVRfTUFDX1VOTEJMX0FMTE9XIC0gTmV0TGFiZWw6IGFsbG93IHVubGFiZWxlZCB0cmFmZmljCiAgIyBBVURJVF9NQUNfQ0lQU09WNF9BREQgLSBOZXRMYWJlbDogYWRkIENJUFNPdjQgRE9JIGVudHJ5CiAgIyBBVURJVF9NQUNfQ0lQU09WNF9ERUwgLSBOZXRMYWJlbDogZGVsIENJUFNPdjQgRE9JIGVudHJ5CiAgIyBBVURJVF9NQUNfTUFQX0FERCAtIE5ldExhYmVsOiBhZGQgTFNNIGRvbWFpbiBtYXBwaW5nCiAgIyBBVURJVF9NQUNfTUFQX0RFTCAtIE5ldExhYmVsOiBkZWwgTFNNIGRvbWFpbiBtYXBwaW5nCiAgIyBBVURJVF9NQUNfSVBTRUNfRVZFTlQgLSBBdWRpdCBhbiBJUFNlYyBldmVudAogICMgQVVESVRfTUFDX1VOTEJMX1NUQ0FERCAtIE5ldExhYmVsOiBhZGQgYSBzdGF0aWMgbGFiZWwKICAjIEFVRElUX01BQ19VTkxCTF9TVENERUwgLSBOZXRMYWJlbDogZGVsIGEgc3RhdGljIGxhYmVsCiAgIyBBVURJVF9NQUNfQ0FMSVBTT19BREQgLSBOZXRMYWJlbDogYWRkIENBTElQU08gRE9JIGVudHJ5CiAgIyBBVURJVF9NQUNfQ0FMSVBTT19ERUwgLSBOZXRMYWJlbDogZGVsIENBTElQU08gRE9JIGVudHJ5CiAgIyBBVURJVF9VU0VSX0xBQkVMRURfRVhQT1JUIC0gT2JqZWN0IGV4cG9ydGVkIHdpdGggbGFiZWwKICAjIEFVRElUX1VTRVJfVU5MQUJFTEVEX0VYUE9SVCAtIE9iamVjdCBleHBvcnRlZCB3aXRob3V0IGxhYmVsCgogICMgQ3J5cHRvIGV2ZW50cwoKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICBhY3Rpb246IG5lZ290aWF0ZWQtY3J5cHRvLWtleQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBmcAogICAgICBzZWNvbmRhcnk6IFthZGRyLCBob3N0bmFtZV0KICAgICAgd2hhdDogdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IENSWVBUT19LRVlfVVNFUgogICAgc291cmNlX2lwOiBbYWRkcl0KICAgIGVjczogKmVjcy1wcm9jZXNzCiAgLSBhY3Rpb246IGNyeXB0by1vZmZpY2VyLWxvZ2dlZC1pbgogICAgcmVjb3JkX3R5cGVzOiBDUllQVE9fTE9HSU4KICAtIGFjdGlvbjogY3J5cHRvLW9mZmljZXItbG9nZ2VkLW91dAogICAgcmVjb3JkX3R5cGVzOiBDUllQVE9fTE9HT1VUCiAgICBlY3M6ICplY3MtcHJvY2VzcwogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIGFjdGlvbjogc3RhcnRlZC1jcnlwdG8tc2Vzc2lvbgogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBhZGRyCiAgICAgIHNlY29uZGFyeTogW3Jwb3J0XQogICAgcmVjb3JkX3R5cGVzOiBDUllQVE9fU0VTU0lPTgogICAgc291cmNlX2lwOiBbYWRkcl0KICAgIGVjczogKmVjcy1wcm9jZXNzCiAgLSBhY3Rpb246IGFjY2Vzcy1yZXN1bHQKICAgIHJlY29yZF90eXBlczogREFDX0NIRUNLCgogICMgQW5vbWFsaWVzCgogICMgQVVESVRfQU5PTV9BQkVORCAtIFByb2Nlc3MgZW5kZWQgYWJub3JtYWxseQogIC0gcmVjb3JkX3R5cGVzOiBBTk9NX0FCRU5ECiAgICBhY3Rpb246IGNyYXNoZWQtcHJvZ3JhbQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBbY29tbSwgZXhlXQogICAgICBzZWNvbmRhcnk6IHBpZAogICAgICB3aGF0OiBwcm9jZXNzCiAgICBob3c6IHNpZwogICAgZWNzOgogICAgICAjIGNvbnNpZGVyIGFkZGluZyBhbiBhbm9tYWx5IGNhdGVnb3J5IHdoZW4gd2UgaW50cm9kdWNlCiAgICAgICMgdG8gRUNTCiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogZW5kCiAgIyBBVURJVF9BTk9NX0VYRUMgLSBFeGVjdXRpb24gb2YgZmlsZQogIC0gcmVjb3JkX3R5cGVzOiBBTk9NX0VYRUMKICAgIGFjdGlvbjogYXR0ZW1wdGVkLWV4ZWN1dGlvbi1vZi1mb3JiaWRkZW4tcHJvZ3JhbQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBjbWQKICAgICAgd2hhdDogcHJvY2VzcwogICAgaG93OiB0ZXJtaW5hbAogICAgZWNzOgogICAgICAjIGNvbnNpZGVyIGFkZGluZyBhbiBhbm9tYWx5IGNhdGVnb3J5IHdoZW4gd2UgaW50cm9kdWNlCiAgICAgICMgdG8gRUNTCiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogc3RhcnQKICAjIEFVRElUX0FOT01fTElOSyAtIFN1c3BpY2lvdXMgdXNlIG9mIGZpbGUgbGlua3MKICAtIHJlY29yZF90eXBlczogQU5PTV9MSU5LCiAgICBhY3Rpb246IHVzZWQtc3VzcGljaW91cy1saW5rCiAgIyBBVURJVF9BTk9NX0xPR0lOX0ZBSUxVUkVTIC0gRmFpbGVkIGxvZ2luIGxpbWl0IHJlYWNoZWQKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IEFOT01fTE9HSU5fRkFJTFVSRVMKICAgIGFjdGlvbjogZmFpbGVkLWxvZy1pbi10b28tbWFueS10aW1lcy10bwogICMgQVVESVRfQU5PTV9MT0dJTl9MT0NBVElPTiAtIExvZ2luIGZyb20gZm9yYmlkZGVuIGxvY2F0aW9uCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBBTk9NX0xPR0lOX0xPQ0FUSU9OCiAgICBhY3Rpb246IGF0dGVtcHRlZC1sb2ctaW4tZnJvbS11bnVzdWFsLXBsYWNlLXRvCiAgIyBBVURJVF9BTk9NX0xPR0lOX1NFU1NJT05TIC0gTWF4IGNvbmN1cnJlbnQgc2Vzc2lvbnMgcmVhY2hlZAogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogQU5PTV9MT0dJTl9TRVNTSU9OUwogICAgYWN0aW9uOiBvcGVuZWQtdG9vLW1hbnktc2Vzc2lvbnMtdG8KICAjIEFVRElUX0FOT01fTE9HSU5fVElNRSAtIExvZ2luIGF0dGVtcHRlZCBhdCBiYWQgdGltZQogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogQU5PTV9MT0dJTl9USU1FCiAgICBhY3Rpb246IGF0dGVtcHRlZC1sb2ctaW4tZHVyaW5nLXVudXN1YWwtaG91ci10bwogICMgQVVESVRfQU5PTV9QUk9NSVNDVU9VUyAtIERldmljZSBjaGFuZ2VkIHByb21pc2N1b3VzIG1vZGUKICAtIHJlY29yZF90eXBlczogQU5PTV9QUk9NSVNDVU9VUwogICAgYWN0aW9uOiBjaGFuZ2VkLXByb21pc2N1b3VzLW1vZGUtb24tZGV2aWNlICMgQ291bGQgYmUgZW50ZXJlZCBvciBleGl0ZWQgYmFzZWQgb24gcHJvbSBmaWVsZC4KICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogZGV2CiAgICAgIHdoYXQ6IG5ldHdvcmstZGV2aWNlCiAgIyBBVURJVF9BTk9NX1JCQUNfSU5URUdSSVRZX0ZBSUwgLSBSQkFDIGZpbGUgaW50ZWdyaXR5IGZhaWx1cmUKICAtIHJlY29yZF90eXBlczogQU5PTV9SQkFDX0lOVEVHUklUWV9GQUlMCiAgICBhY3Rpb246IHRlc3RlZC1maWxlLXN5c3RlbS1pbnRlZ3JpdHktb2YKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogaG9zdG5hbWUKICAgICAgd2hhdDogZmlsZXN5c3RlbQogICMgQVVESVRfQU5PTV9MT0dJTl9BQ0NUIC0gTG9naW4gYXR0ZW1wdGVkIHRvIHdhdGNoZWQgYWNjdAogICMgQVVESVRfQU5PTV9NQVhfREFDIC0gTWF4IERBQyBmYWlsdXJlcyByZWFjaGVkCiAgIyBBVURJVF9BTk9NX01BWF9NQUMgLSBNYXggTUFDIGZhaWx1cmVzIHJlYWNoZWQKICAjIEFVRElUX0FOT01fQU1UVV9GQUlMIC0gQU1UVSBmYWlsdXJlCiAgIyBBVURJVF9BTk9NX1JCQUNfRkFJTCAtIFJCQUMgc2VsZiB0ZXN0IGZhaWx1cmUKICAjIEFVRElUX0FOT01fQ1JZUFRPX0ZBSUwgLSBDcnlwdG8gc3lzdGVtIHRlc3QgZmFpbHVyZQogICMgQVVESVRfQU5PTV9NS19FWEUgLSBNYWtlIGFuIGV4ZWN1dGFibGUKICAjIEFVRElUX0FOT01fQUNDRVNTX0ZTIC0gQWNjZXNzIG9mIGZpbGUgb3IgZGlyCiAgIyBBVURJVF9BTk9NX0FERF9BQ0NUIC0gQWRkaW5nIGFuIGFjY3QKICAjIEFVRElUX0FOT01fREVMX0FDQ1QgLSBEZWxldGluZyBhbiBhY2N0CiAgIyBBVURJVF9BTk9NX01PRF9BQ0NUIC0gQ2hhbmdpbmcgYW4gYWNjdAogICMgQVVESVRfQU5PTV9ST09UX1RSQU5TIC0gVXNlciBiZWNhbWUgcm9vdAogICMgQVVESVRfQU5PTV9MT0dJTl9TRVJWSUNFIC0gU2VydmljZSBhY2N0IGF0dGVtcHRlZCBsb2dpbgoKICAjIEFub21hbHkgcmVzcG9uc2VzCgogICMgQVVESVRfUkVTUF9BTk9NQUxZIC0gQW5vbWFseSBub3QgcmVhY3RlZCB0bwogICMgQVVESVRfUkVTUF9BTEVSVCAtIEFsZXJ0IGVtYWlsIHdhcyBzZW50CiAgIyBBVURJVF9SRVNQX0tJTExfUFJPQyAtIEtpbGwgcHJvZ3JhbQogICMgQVVESVRfUkVTUF9URVJNX0FDQ0VTUyAtIFRlcm1pbmF0ZSBzZXNzaW9uCiAgIyBBVURJVF9SRVNQX0FDQ1RfUkVNT1RFIC0gQWNjdCBsb2NrZWQgZnJvbSByZW1vdGUgYWNjZXNzCiAgIyBBVURJVF9SRVNQX0FDQ1RfTE9DS19USU1FRCAtIFVzZXIgYWNjdCBsb2NrZWQgZm9yIHRpbWUKICAjIEFVRElUX1JFU1BfQUNDVF9VTkxPQ0tfVElNRUQgLSBVc2VyIGFjY3QgdW5sb2NrZWQgZnJvbSB0aW1lCiAgIyBBVURJVF9SRVNQX0FDQ1RfTE9DSyAtIFVzZXIgYWNjdCB3YXMgbG9ja2VkCiAgIyBBVURJVF9SRVNQX1RFUk1fTE9DSyAtIFRlcm1pbmFsIHdhcyBsb2NrZWQKICAjIEFVRElUX1JFU1BfU0VCT09MIC0gU2V0IGFuIFNFIExpbnV4IGJvb2xlYW4KICAjIEFVRElUX1JFU1BfRVhFQyAtIEV4ZWN1dGUgYSBzY3JpcHQKICAjIEFVRElUX1JFU1BfU0lOR0xFIC0gR28gdG8gc2luZ2xlIHVzZXIgbW9kZQogICMgQVVESVRfUkVTUF9IQUxUIC0gdGFrZSB0aGUgc3lzdGVtIGRvd24KICAjIEFVRElUX1JFU1BfT1JJR0lOX0JMT0NLIC0gQWRkcmVzcyBibG9ja2VkIGJ5IGlwdGFibGVzCiAgIyBBVURJVF9SRVNQX09SSUdJTl9CTE9DS19USU1FRCAtIEFkZHJlc3MgYmxvY2tlZCBmb3IgdGltZQoKICAjIEF1ZGl0IHJ1bGUgZXZlbnRzCgogICMgQVVESVRfU1lTQ0FMTCAtIFN5c2NhbGwgZXZlbnQKICAjIEFVRElUX1BBVEggLSBGaWxlbmFtZSBwYXRoIGluZm9ybWF0aW9uCiAgIyBBVURJVF9JUEMgLSBJUEMgcmVjb3JkCiAgIyBBVURJVF9TT0NLRVRDQUxMIC0gc3lzX3NvY2tldGNhbGwgYXJndW1lbnRzCiAgIyBBVURJVF9TT0NLQUREUiAtIHNvY2thZGRyIGNvcGllZCBhcyBzeXNjYWxsIGFyZwogICMgQVVESVRfQ1dEIC0gQ3VycmVudCB3b3JraW5nIGRpcmVjdG9yeQogICMgQVVESVRfRVhFQ1ZFIC0gZXhlY3ZlIGFyZ3VtZW50cwogICMgQVVESVRfSVBDX1NFVF9QRVJNIC0gSVBDIG5ldyBwZXJtaXNzaW9ucyByZWNvcmQgdHlwZQogICMgQVVESVRfTVFfT1BFTiAtIFBPU0lYIE1RIG9wZW4gcmVjb3JkIHR5cGUKICAjIEFVRElUX01RX1NFTkRSRUNWLSBQT1NJWCBNUSBzZW5kL3JlY2VpdmUgcmVjb3JkIHR5cGUKICAjIEFVRElUX01RX05PVElGWSAtIFBPU0lYIE1RIG5vdGlmeSByZWNvcmQgdHlwZQogICMgQVVESVRfTVFfR0VUU0VUQVRUUiAtIFBPU0lYIE1RIGdldC9zZXQgYXR0cmlidXRlIHJlY29yZCB0eXBlCiAgIyBBVURJVF9GRF9QQUlSIC0gYXVkaXQgcmVjb3JkIGZvciBwaXBlL3NvY2tldHBhaXIKICAjIEFVRElUX09CSl9QSUQgLSBwdHJhY2UgdGFyZ2V0CiAgIyBBVURJVF9CUFJNX0ZDQVBTIC0gSW5mb3JtYXRpb24gYWJvdXQgZmNhcHMgaW5jcmVhc2luZyBwZXJtcwogICMgQVVESVRfQ0FQU0VUIC0gUmVjb3JkIHNob3dpbmcgYXJndW1lbnQgdG8gc3lzX2NhcHNldAogICMgQVVESVRfTU1BUCAtIFJlY29yZCBzaG93aW5nIGRlc2NyaXB0b3IgYW5kIGZsYWdzIGluIG1tYXAKICAjIEFVRElUX05FVEZJTFRFUl9QS1QgLSBQYWNrZXRzIHRyYXZlcnNpbmcgbmV0ZmlsdGVyIGNoYWlucwoKICAjIEludGVncml0eSBjaGVja3MKCiAgIyBBVURJVF9JTlRFR1JJVFlfREFUQSAtIERhdGEgaW50ZWdyaXR5IHZlcmlmaWNhdGlvbgogICMgQVVESVRfSU5URUdSSVRZX01FVEFEQVRBIC0gTWV0YWRhdGEgaW50ZWdyaXR5IHZlcmlmaWNhdGlvbgogICMgQVVESVRfSU5URUdSSVRZX1NUQVRVUyAtIEludGVncml0eSBlbmFibGUgc3RhdHVzCiAgIyBBVURJVF9JTlRFR1JJVFlfSEFTSCAtIEludGVncml0eSBIQVNIIHR5cGUKICAjIEFVRElUX0lOVEVHUklUWV9QQ1IgLSBQQ1IgaW52YWxpZGF0aW9uIG1zZ3MKICAjIEFVRElUX0lOVEVHUklUWV9SVUxFIC0gUG9saWN5IHJ1bGUKCiAgIyBWYXJpb3VzCgogICMgQVVESVRfVVNFUiAtIE1lc3NhZ2UgZnJvbSB1c2Vyc3BhY2UgLS0gZGVwcmVjYXRlZAogIC0gcmVjb3JkX3R5cGVzOiBVU0VSCiAgICBhY3Rpb246IHNlbnQtbWVzc2FnZQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBhZGRyCg==") + value, _ = base64.StdEncoding.DecodeString("LS0tCiMgTWFjcm9zIGRlY2xhcmVzIHNvbWUgWUFNTCBhbmNob3JzIHRoYXQgY2FuIGJlIHJlZmVyZW5jZWQgZm9yIHNvbWUgY29tbW9uCiMgb2JqZWN0IHR5cGUgbm9ybWFsaXphdGlvbnMgbGlrZSB1c2VyLXNlc3Npb24sIHNvY2tldCwgb3IgcHJvY2Vzcy4KbWFjcm9zOgogIC0gJmRlZmF1bHRzCiAgICBzdWJqZWN0OgogICAgICBwcmltYXJ5OiBhdWlkCiAgICAgIHNlY29uZGFyeTogdWlkCiAgICBob3c6IFtleGUsIGNvbW1dCgogIC0gJm1hY3JvLXVzZXItc2Vzc2lvbgogICAgc3ViamVjdDoKICAgICAgcHJpbWFyeTogYXVpZAogICAgICBzZWNvbmRhcnk6IFthY2N0LCBpZCwgdWlkXQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiB0ZXJtaW5hbAogICAgICBzZWNvbmRhcnk6IFthZGRyLCBob3N0bmFtZV0KICAgICAgd2hhdDogdXNlci1zZXNzaW9uCiAgICBob3c6IFtleGUsIHRlcm1pbmFsXQoKICAtICZtYWNyby1zb2NrZXQKICAgIDw8OiAqZGVmYXVsdHMKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogW2FkZHIsIHBhdGhdCiAgICAgIHNlY29uZGFyeTogcG9ydAogICAgICB3aGF0OiBzb2NrZXQKCiAgLSAmbWFjcm8tcHJvY2VzcwogICAgPDw6ICpkZWZhdWx0cwogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBbY21kLCBleGUsIGNvbW1dCiAgICAgIHNlY29uZGFyeTogcGlkCiAgICAgIHdoYXQ6IHByb2Nlc3MKICAgIGhvdzogdGVybWluYWwKCiAgLSAmZWNzLWlhbQogICAgY2F0ZWdvcnk6IGlhbQogICAgdHlwZTogaW5mbwoKICAtICZlY3MtYXV0aAogICAgY2F0ZWdvcnk6IGF1dGhlbnRpY2F0aW9uCiAgICB0eXBlOiBpbmZvCiAgICBtYXBwaW5nczoKICAgICAgLSBmcm9tOiBzdWJqZWN0LnByaW1hcnkKICAgICAgICB0bzogdXNlcgogICAgICAtIGZyb206IHN1YmplY3Quc2Vjb25kYXJ5CiAgICAgICAgdG86IHVzZXIuZWZmZWN0aXZlCgogIC0gJmVjcy1ob3N0CiAgICBjYXRlZ29yeTogaG9zdAogICAgdHlwZTogaW5mbwoKICAtICZlY3MtcHJvY2VzcwogICAgY2F0ZWdvcnk6IHByb2Nlc3MKICAgIHR5cGU6IGluZm8KCiAgLSAmZWNzLWZpbGUKICAgIGNhdGVnb3J5OiBmaWxlCiAgICB0eXBlOiBpbmZvCgogIC0gJmVjcy1kcml2ZXIKICAgIGNhdGVnb3J5OiBkcml2ZXIKICAgIHR5cGU6IGluZm8KCiAgLSAmZWNzLW5ldHdvcmsKICAgIGNhdGVnb3J5OiBuZXR3b3JrCiAgICB0eXBlOgogICAgICAtIGNvbm5lY3Rpb24KICAgICAgLSBpbmZvCgogIC0gJmVjcy11c2VyLW1vZGlmaWNhdGlvbi1tYXBwaW5ncwogICAgbWFwcGluZ3M6CiAgICAgIC0gZnJvbTogc3ViamVjdC5wcmltYXJ5CiAgICAgICAgdG86IHVzZXIKICAgICAgLSBmcm9tOiBzdWJqZWN0LnNlY29uZGFyeQogICAgICAgIHRvOiB1c2VyLmVmZmVjdGl2ZQogICAgICAtIGZyb206IG9iamVjdC5wcmltYXJ5CiAgICAgICAgdG86IHVzZXIudGFyZ2V0CgogIC0gJmVjcy1ncm91cC1tb2RpZmljYXRpb24tbWFwcGluZ3MKICAgIG1hcHBpbmdzOgogICAgICAtIGZyb206IHN1YmplY3QucHJpbWFyeQogICAgICAgIHRvOiB1c2VyCiAgICAgIC0gZnJvbTogc3ViamVjdC5zZWNvbmRhcnkKICAgICAgICB0bzogdXNlci5lZmZlY3RpdmUKICAgICAgLSBmcm9tOiBvYmplY3QucHJpbWFyeQogICAgICAgIHRvOiBncm91cC50YXJnZXQKCiMgTm9ybWFsaXphdGlvbnMgaXMgYSBsaXN0IG9mIGRlY2xhcmF0aW9ucyBzcGVjaWZ5aW5nIGhvdyB0byBub3JtYWxpemUgdGhlIGRhdGEKIyBjb250YWluZWQgaW4gYW4gZXZlbnQuIFRoZSBub3JtYWxpemF0aW9uIGNhbiBiZSBhcHBsaWVkIGJhc2VkIG9uIHRoZSBzeXNjYWxsCiMgbmFtZSAoZS5nLiBjb25uZWN0LCBvcGVuKSBvciBiYXNlZCBvbiB0aGUgcmVjb3JkIHR5cGUgKGUuZy4gVVNFUl9MT0dJTikuCiMgTm8gdHdvIG5vcm1hbGl6YXRpb25zIGNhbiBhcHBseSB0byB0aGUgc2FtZSBzeXNjYWxsIG9yIHJlY29yZCB0eXBlLiBUaGlzCiMgd2lsbCByZXN1bHQgaW4gYSBmYWlsdXJlIGF0IGxvYWQgdGltZS4KIwojIEVhY2ggbm9ybWFsaXphdGlvbiBzaG91bGQgc3BlY2lmeToKIyAgIGFjdGlvbiAtIHdoYXQgaGFwcGVuZWQKIyAgIGFjdG9yICAtIHdobyBkaWQgdGhpcyBvciB3aG8gdHJpZ2dlcmVkIHRoZSBldmVudAojICAgb2JqZWN0IC0gd2hhdCB3YXMgdGhlICJ0aGluZyIgaW52b2x2ZWQgaW4gdGhlIGFjdGlvbiAoZS5nLiBwcm9jZXNzLCBzb2NrZXQpCiMgICBob3cgICAgLSBob3cgd2FzIHRoZSBhY3Rpb24gcGVyZm9ybWVkIChlLmcuIGV4ZSBvciB0ZXJtaW5hbCkKbm9ybWFsaXphdGlvbnM6CiAgLSBlY3M6ICplY3MtcHJvY2VzcwogICAgc3lzY2FsbHM6CiAgICAgIC0gJyonICMgdGhpcyBpcyBhIGNhdGNoIGFsbAogIC0gYWN0aW9uOiBvcGVuZWQtZmlsZQogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBjcmVhdCAtIG9wZW4gYW5kIHBvc3NpYmx5IGNyZWF0ZSBhIGZpbGUKICAgICAgLSBjcmVhdAogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgIHR5cGU6IGNyZWF0aW9uCiAgLSBhY3Rpb246IG9wZW5lZC1maWxlCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIGZhbGxvY2F0ZSAtIG1hbmlwdWxhdGUgZmlsZSBzcGFjZQogICAgICAtIGZhbGxvY2F0ZQogICAgICAjIHRydW5jYXRlIC0gdHJ1bmNhdGUgYSBmaWxlIHRvIGEgc3BlY2lmaWVkIGxlbmd0aAogICAgICAtIHRydW5jYXRlCiAgICAgICMgZnRydW5jYXRlIC0gdHJ1bmNhdGUgYSBmaWxlIHRvIGEgc3BlY2lmaWVkIGxlbmd0aAogICAgICAtIGZ0cnVuY2F0ZQogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgICMgdGVjaG5pY2FsbHkgeW91IGNhbiB0cnVuY2F0ZSBhIGZpbGUgdG8gdGhlIHNhbWUgbGVuZ3RoCiAgICAgICMgYnV0IHJlZ2FyZGxlc3MsIHdlIGNvbnNpZGVyIHRoaXMgYSBjaGFuZ2UKICAgICAgdHlwZTogY2hhbmdlCiAgLSBhY3Rpb246IG9wZW5lZC1maWxlCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIG9wZW4gLSBvcGVuIGFuZCBwb3NzaWJseSBjcmVhdGUgYSBmaWxlCiAgICAgIC0gb3BlbgogICAgICAjIG9wZW5hdCAtIG9wZW4gYW5kIHBvc3NpYmx5IGNyZWF0ZSBhIGZpbGUKICAgICAgLSBvcGVuYXQKICAgICAgIyByZWFkbGluayAtIHJlYWQgdmFsdWUgb2YgYSBzeW1ib2xpYyBsaW5rCiAgICAgIC0gcmVhZGxpbmsKICAgICAgIyByZWFkbGlua2F0IC0gcmVhZCB2YWx1ZSBvZiBhIHN5bWJvbGljIGxpbmsKICAgICAgLSByZWFkbGlua2F0CiAgICBlY3M6ICplY3MtZmlsZQogIC0gYWN0aW9uOiByZWFkLWZpbGUKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgc3lzY2FsbHM6CiAgICAgICMgcmVhZCAtIHJlYWQgZnJvbSBhIGZpbGUgZGVzY3JpcHRvcgogICAgICAtIHJlYWQKICAgIGVjczogKmVjcy1maWxlCiAgLSBhY3Rpb246IHdyb3RlLXRvLWZpbGUKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgc3lzY2FsbHM6CiAgICAgICMgd3JpdGUgLSB3cml0ZSB0byBhIGZpbGUgZGVzY3JpcHRvcgogICAgICAtIHdyaXRlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgdHlwZTogY2hhbmdlCiAgLSBhY3Rpb246IGNoYW5nZWQtZmlsZS1hdHRyaWJ1dGVzLW9mCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIHNldHhhdHRyIC0gc2V0IGFuIGV4dGVuZGVkIGF0dHJpYnV0ZSB2YWx1ZQogICAgICAtIHNldHhhdHRyCiAgICAgICMgZnNldHhhdHRyIC0gc2V0IGFuIGV4dGVuZGVkIGF0dHJpYnV0ZSB2YWx1ZQogICAgICAtIGZzZXR4YXR0cgogICAgICAjIGxzZXR4YXR0ciAtIHNldCBhbiBleHRlbmRlZCBhdHRyaWJ1dGUgdmFsdWUKICAgICAgLSBsc2V0eGF0dHIKICAgICAgIyByZW1vdmV4YXR0ciAtIHJlbW92ZSBhbiBleHRlbmRlZCBhdHRyaWJ1dGUKICAgICAgLSByZW1vdmV4YXR0cgogICAgICAjIGZyZW1vdmV4YXR0ciAtIHJlbW92ZSBhbiBleHRlbmRlZCBhdHRyaWJ1dGUKICAgICAgLSBmcmVtb3ZleGF0dHIKICAgICAgIyBscmVtb3ZleGF0dHIgLSByZW1vdmUgYW4gZXh0ZW5kZWQgYXR0cmlidXRlCiAgICAgIC0gbHJlbW92ZXhhdHRyCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgdHlwZTogY2hhbmdlCiAgLSBhY3Rpb246IGNoYW5nZWQtZmlsZS1wZXJtaXNzaW9ucy1vZgogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBjaG1vZCAtIGNoYW5nZSBwZXJtaXNzaW9ucyBvZiBhIGZpbGUKICAgICAgLSBjaG1vZAogICAgICAjIGZjaG1vZCAtIGNoYW5nZSBwZXJtaXNzaW9ucyBvZiBhIGZpbGUKICAgICAgLSBmY2htb2QKICAgICAgIyBmY2htb2RhdCAtIGNoYW5nZSBwZXJtaXNzaW9ucyBvZiBhIGZpbGUKICAgICAgLSBmY2htb2RhdAogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgIHR5cGU6IGNoYW5nZQogIC0gYWN0aW9uOiBjaGFuZ2VkLWZpbGUtb3duZXJzaGlwLW9mCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIGNob3duIC0gY2hhbmdlIG93bmVyc2hpcCBvZiBhIGZpbGUKICAgICAgLSBjaG93bgogICAgICAjIGZjaG93biAtIGNoYW5nZSBvd25lcnNoaXAgb2YgYSBmaWxlCiAgICAgIC0gZmNob3duCiAgICAgICMgZmNob3duYXQgLSBjaGFuZ2Ugb3duZXJzaGlwIG9mIGEgZmlsZQogICAgICAtIGZjaG93bmF0CiAgICAgICMgbGNob3duIC0gY2hhbmdlIG93bmVyc2hpcCBvZiBhIGZpbGUKICAgICAgLSBsY2hvd24KICAgIGVjczoKICAgICAgPDw6ICplY3MtZmlsZQogICAgICB0eXBlOiBjaGFuZ2UKICAtIGFjdGlvbjogbG9hZGVkLWtlcm5lbC1tb2R1bGUKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgICBwcmltYXJ5OiBuYW1lCiAgICByZWNvcmRfdHlwZXM6CiAgICAgIC0gS0VSTl9NT0RVTEUKICAgIHN5c2NhbGxzOgogICAgICAjIGZpbml0X21vZHVsZSAtIGxvYWQgYSBrZXJuZWwgbW9kdWxlCiAgICAgIC0gZmluaXRfbW9kdWxlCiAgICAgICMgaW5pdF9tb2R1bGUgLSBsb2FkIGEga2VybmVsIG1vZHVsZQogICAgICAtIGluaXRfbW9kdWxlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWRyaXZlcgogICAgICB0eXBlOiBzdGFydAogIC0gYWN0aW9uOiB1bmxvYWRlZC1rZXJuZWwtbW9kdWxlCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIGRlbGV0ZV9tb2R1bGUgLSB1bmxvYWQgYSBrZXJuZWwgbW9kdWxlCiAgICAgIC0gZGVsZXRlX21vZHVsZQogICAgZWNzOgogICAgICA8PDogKmVjcy1kcml2ZXIKICAgICAgdHlwZTogZW5kCiAgLSBhY3Rpb246IGNyZWF0ZWQtZGlyZWN0b3J5CiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgICAgcGF0aF9pbmRleDogMQogICAgc3lzY2FsbHM6CiAgICAgICMgbWtkaXIgLSBjcmVhdGUgYSBkaXJlY3RvcnkKICAgICAgLSBta2RpcgogICAgICAjIG1rZGlyYXQgLSBjcmVhdGUgYSBkaXJlY3RvcnkKICAgICAgLSBta2RpcmF0CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgdHlwZTogY3JlYXRpb24KICAtIGFjdGlvbjogbW91bnRlZAogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlc3lzdGVtCiAgICAgIHBhdGhfaW5kZXg6IDEKICAgIHN5c2NhbGxzOgogICAgICAjIG1vdW50IC0gbW91bnQgZmlsZXN5c3RlbQogICAgICAtIG1vdW50CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgIyBzaW5jZSBhIG5ldyBtb3VudCBhcHBlYXJzIG9uIHRoZSBzeXN0ZW0KICAgICAgIyB3ZSBjb25zaWRlciB0aGlzIGEgaGlnaC1sZXZlbCAiY3JlYXRpb24iIGV2ZW50CiAgICAgIHR5cGU6IGNyZWF0aW9uCiAgLSBhY3Rpb246IHJlbmFtZWQKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgICBwYXRoX2luZGV4OiAyCiAgICBzeXNjYWxsczoKICAgICAgIyByZW5hbWUgLSBjaGFuZ2UgdGhlIG5hbWUgb3IgbG9jYXRpb24gb2YgYSBmaWxlCiAgICAgIC0gcmVuYW1lCiAgICAgICMgcmVuYW1lYXQgLSBjaGFuZ2UgdGhlIG5hbWUgb3IgbG9jYXRpb24gb2YgYSBmaWxlCiAgICAgIC0gcmVuYW1lYXQKICAgICAgIyByZW5hbWVhdDIgLSBjaGFuZ2UgdGhlIG5hbWUgb3IgbG9jYXRpb24gb2YgYSBmaWxlCiAgICAgIC0gcmVuYW1lYXQyCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgdHlwZTogY2hhbmdlCiAgLSBhY3Rpb246IGNoZWNrZWQtbWV0YWRhdGEtb2YKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgc3lzY2FsbHM6CiAgICAgICMgYWNjZXNzIC0gY2hlY2sgdXNlcidzIHBlcm1pc3Npb25zIGZvciBhIGZpbGUKICAgICAgLSBhY2Nlc3MKICAgICAgIyBmYWNjZXNzYXQgLSBjaGVjayB1c2VyJ3MgcGVybWlzc2lvbnMgZm9yIGEgZmlsZQogICAgICAtIGZhY2Nlc3NhdAogICAgICAjIGZzdGF0YXQgLSBnZXQgZmlsZSBzdGF0dXMKICAgICAgLSBmc3RhdGF0CiAgICAgICMgbmV3ZnN0YXRhdCAtIGdldCBmaWxlIHN0YXR1cwogICAgICAtIG5ld2ZzdGF0YXQKICAgICAgIyBzdGF0IC0gZ2V0IGZpbGUgc3RhdHVzCiAgICAgIC0gc3RhdAogICAgICAjIHN0YXQ2NCAtIGdldCBmaWxlIHN0YXR1cwogICAgICAtIHN0YXQ2NAogICAgICAjIGZzdGF0IC0gZ2V0IGZpbGUgc3RhdHVzCiAgICAgIC0gZnN0YXQKICAgICAgIyBsc3RhdCAtIGdldCBmaWxlIHN0YXR1cwogICAgICAtIGxzdGF0CiAgICAgICMgZ2V0eGF0dHIgLSByZXRyaWV2ZSBhbiBleHRlbmRlZCBhdHRyaWJ1dGUgdmFsdWUKICAgICAgLSBnZXR4YXR0cgogICAgICAjIGxnZXR4YXR0ciAtIHJldHJpZXZlIGFuIGV4dGVuZGVkIGF0dHJpYnV0ZSB2YWx1ZQogICAgICAtIGxnZXR4YXR0cgogICAgICAjIGZnZXR4YXR0ciAtIHJldHJpZXZlIGFuIGV4dGVuZGVkIGF0dHJpYnV0ZSB2YWx1ZQogICAgICAtIGZnZXR4YXR0cgogICAgZWNzOiAqZWNzLWZpbGUKICAtIGFjdGlvbjogY2hlY2tlZC1maWxlc3lzdGVtLW1ldGFkYXRhLW9mCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGVzeXN0ZW0KICAgIHN5c2NhbGxzOgogICAgICAjIHN0YXRmcyAtIGdldCBmaWxlc3lzdGVtIHN0YXRpc3RpY3MKICAgICAgLSBzdGF0ZnMKICAgICAgIyBmc3RhdGZzIC0gZ2V0IGZpbGVzeXN0ZW0gc3RhdGlzdGljcwogICAgICAtIGZzdGF0ZnMKICAgIGVjczogKmVjcy1maWxlCiAgLSBhY3Rpb246IHN5bWxpbmtlZAogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBzeW1saW5rIC0gbWFrZSBhIG5ldyBuYW1lIGZvciBhIGZpbGUKICAgICAgLSBzeW1saW5rCiAgICAgICMgc3ltbGlua2F0IC0gbWFrZSBhIG5ldyBuYW1lIGZvciBhIGZpbGUKICAgICAgLSBzeW1saW5rYXQKICAgIGVjczoKICAgICAgPDw6ICplY3MtZmlsZQogICAgICAjICJjcmVhdGlvbiIgc2luY2Ugd2UncmUgY3JlYXRpbmcgYSBuZXcgZmlsZSBzeXN0ZW0KICAgICAgIyBlbnRyeSBmb3IgdGhlIHN5bWxpbmsKICAgICAgdHlwZTogY3JlYXRpb24KICAtIGFjdGlvbjogdW5tb3VudGVkCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGVzeXN0ZW0KICAgIHN5c2NhbGxzOgogICAgICAjIHVtb3VudCAtIHVubW91bnQgZmlsZXN5c3RlbQogICAgICAtIHVtb3VudAogICAgICAjIHVtb3VudDIgLSB1bm1vdW50IGZpbGVzeXN0ZW0KICAgICAgLSB1bW91bnQyCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgIyAiZGVsZXRpb24iIHRvIG1pcnJvciB0aGUgImNyZWF0aW9uIiBvZiB0aGUgbW91bnQKICAgICAgdHlwZTogZGVsZXRpb24KICAtIGFjdGlvbjogZGVsZXRlZAogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBybWRpciAtIGRlbGV0ZSBhIGRpcmVjdG9yeQogICAgICAtIHJtZGlyCiAgICAgICMgdW5saW5rIC0gZGVsZXRlIGEgbmFtZSBhbmQgcG9zc2libHkgdGhlIGZpbGUgaXQgcmVmZXJzIHRvCiAgICAgIC0gdW5saW5rCiAgICAgICMgdW5saW5rYXQgLSBkZWxldGUgYSBuYW1lIGFuZCBwb3NzaWJseSB0aGUgZmlsZSBpdCByZWZlcnMgdG8KICAgICAgLSB1bmxpbmthdAogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgIHR5cGU6IGRlbGV0aW9uCiAgLSBhY3Rpb246IGNoYW5nZWQtdGltZXN0YW1wLW9mCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIHV0aW1lIC0gY2hhbmdlIGZpbGUgbGFzdCBhY2Nlc3MgYW5kIG1vZGlmaWNhdGlvbiB0aW1lcwogICAgICAtIHV0aW1lCiAgICAgICMgdXRpbWVzIC0gY2hhbmdlIGZpbGUgbGFzdCBhY2Nlc3MgYW5kIG1vZGlmaWNhdGlvbiB0aW1lcwogICAgICAtIHV0aW1lcwogICAgICAjIGZ1dGltZXNhdCAtIGNoYW5nZSB0aW1lc3RhbXBzIG9mIGEgZmlsZSByZWxhdGl2ZSB0byBhIFwgZGlyZWN0b3J5IGZpbGUgZGVzY3JpcHRvcgogICAgICAtIGZ1dGltZXNhdAogICAgICAjIGZ1dGltZW5zIC0gY2hhbmdlIGZpbGUgdGltZXN0YW1wcyB3aXRoIG5hbm9zZWNvbmQgcHJlY2lzaW9uCiAgICAgIC0gZnV0aW1lbnMKICAgICAgIyB1dGltZW5zYXQgLSBjaGFuZ2UgZmlsZSB0aW1lc3RhbXBzIHdpdGggbmFub3NlY29uZCBwcmVjaXNpb24KICAgICAgLSB1dGltZW5zYXQKICAgIGVjczogKmVjcy1maWxlCiAgLSBhY3Rpb246IGV4ZWN1dGVkCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIGV4ZWN2ZSAtIGV4ZWN1dGUgcHJvZ3JhbQogICAgICAtIGV4ZWN2ZQogICAgICAjIGV4ZWN2ZWF0IC0gZXhlY3V0ZSBwcm9ncmFtIHJlbGF0aXZlIHRvIGEgZGlyZWN0b3J5IGZpbGUgZGVzY3JpcHRvcgogICAgICAtIGV4ZWN2ZWF0CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogc3RhcnQKICAtIGFjdGlvbjogbGlzdGVuLWZvci1jb25uZWN0aW9ucwogICAgb2JqZWN0OgogICAgICB3aGF0OiBzb2NrZXQKICAgIHN5c2NhbGxzOgogICAgICAjIGxpc3Rlbi0gbGlzdGVuIGZvciBjb25uZWN0aW9ucyBvbiBhIHNvY2tldAogICAgICAtIGxpc3RlbgogICAgZWNzOgogICAgICA8PDogKmVjcy1uZXR3b3JrCiAgICAgIHR5cGU6IHN0YXJ0CiAgLSBhY3Rpb246IGFjY2VwdGVkLWNvbm5lY3Rpb24tZnJvbQogICAgb2JqZWN0OgogICAgICB3aGF0OiBzb2NrZXQKICAgIHN5c2NhbGxzOgogICAgICAjIGFjY2VwdCAtIGFjY2VwdCBhIGNvbm5lY3Rpb24gb24gYSBzb2NrZXQKICAgICAgLSBhY2NlcHQKICAgICAgIyBhY2NlcHQ0IC0gYWNjZXB0IGEgY29ubmVjdGlvbiBvbiBhIHNvY2tldAogICAgICAtIGFjY2VwdDQKICAgIGVjczoKICAgICAgPDw6ICplY3MtbmV0d29yawogICAgICB0eXBlOgogICAgICAgIC0gY29ubmVjdGlvbgogICAgICAgIC0gc3RhcnQKICAtIGFjdGlvbjogYm91bmQtc29ja2V0CiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNvY2tldAogICAgc3lzY2FsbHM6CiAgICAgICMgYmluZCAtYmluZCBhIG5hbWUgdG8gYSBzb2NrZXQKICAgICAgLSBiaW5kCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLW5ldHdvcmsKICAgICAgdHlwZTogc3RhcnQKICAtIGFjdGlvbjogY29ubmVjdGVkLXRvCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNvY2tldAogICAgc3lzY2FsbHM6CiAgICAgIC0gY29ubmVjdAogICAgZWNzOgogICAgICA8PDogKmVjcy1uZXR3b3JrCiAgICAgIHR5cGU6CiAgICAgICAgLSBjb25uZWN0aW9uCiAgICAgICAgLSBzdGFydAogIC0gYWN0aW9uOiByZWNlaXZlZC1mcm9tCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNvY2tldAogICAgc3lzY2FsbHM6CiAgICAgICMgcmVjdiAtIHJlY2VpdmUgYSBtZXNzYWdlIGZyb20gYSBzb2NrZXQKICAgICAgLSByZWN2CiAgICAgICMgcmVjdmZyb20gLSByZWNlaXZlIGEgbWVzc2FnZSBmcm9tIGEgc29ja2V0CiAgICAgIC0gcmVjdmZyb20KICAgICAgIyByZWN2bXNnIC0gcmVjZWl2ZSBhIG1lc3NhZ2UgZnJvbSBhIHNvY2tldAogICAgICAtIHJlY3Ztc2cKICAgICAgIyByZWN2bW1zZyAtIHJlY2VpdmUgbXVsdGlwbGUgbWVzc2FnZXMgb24gYSBzb2NrZXQKICAgICAgLSByZWN2bW1zZwogICAgZWNzOgogICAgICA8PDogKmVjcy1uZXR3b3JrCiAgLSBhY3Rpb246IHNlbnQtdG8KICAgIG9iamVjdDoKICAgICAgd2hhdDogc29ja2V0CiAgICBzeXNjYWxsczoKICAgICAgIyBzZW5kIC0gc2VuZCBhIG1lc3NhZ2Ugb24gYSBzb2NrZXQKICAgICAgLSBzZW5kCiAgICAgICMgc2VuZHRvIC0gc2VuZCBhIG1lc3NhZ2Ugb24gYSBzb2NrZXQKICAgICAgLSBzZW5kdG8KICAgICAgIyBzZW5kbXNnIC0gc2VuZCBhIG1lc3NhZ2Ugb24gYSBzb2NrZXQKICAgICAgLSBzZW5kbXNnCiAgICAgICMgc2VuZG1tc2cgLSBzZW5kIG11bHRpcGxlIG1lc3NhZ2VzIG9uIGEgc29ja2V0CiAgICAgIC0gc2VuZG1tc2cKICAgIGVjczoKICAgICAgPDw6ICplY3MtbmV0d29yawogIC0gYWN0aW9uOiBraWxsZWQtcGlkCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHByb2Nlc3MKICAgIHN5c2NhbGxzOgogICAgICAjIGtpbGwgLSBzZW5kIHNpZ25hbCB0byBhIHByb2Nlc3MKICAgICAgLSBraWxsCiAgICAgICMgdGtpbGwgLSBzZW5kIGEgc2lnbmFsIHRvIGEgdGhyZWFkCiAgICAgIC0gdGtpbGwKICAgICAgIyB0Z2tpbGwgLSBzZW5kIGEgc2lnbmFsIHRvIGEgdGhyZWFkCiAgICAgIC0gdGdraWxsCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogZW5kCiAgLSBhY3Rpb246IGNoYW5nZWQtaWRlbnRpdHktb2YKICAgIG9iamVjdDoKICAgICAgd2hhdDogcHJvY2VzcwogICAgaG93OiBzeXNjYWxsCiAgICBzeXNjYWxsczoKICAgICAgIyBzZXR1aWQgLSBzZXQgdXNlciBpZGVudGl0eQogICAgICAtIHNldHVpZAogICAgICAjIHNldGV1aWQgLSBzZXQgZWZmZWN0aXZlIHVzZXIgb3IgZ3JvdXAgSUQKICAgICAgLSBzZXRldWlkCiAgICAgICMgc2V0ZnN1aWQgLSBzZXQgdXNlciBpZGVudGl0eSB1c2VkIGZvciBmaWxlc3lzdGVtIGNoZWNrcwogICAgICAtIHNldGZzdWlkCiAgICAgICMgc2V0cmV1aWQgLSBzZXQgcmVhbCBhbmQvb3IgZWZmZWN0aXZlIHVzZXIgb3IgZ3JvdXAgSUQKICAgICAgLSBzZXRyZXVpZAogICAgICAjIHNldGdpZCAtIHNldCBncm91cCBpZGVudGl0eQogICAgICAtIHNldGdpZAogICAgICAjIHNldGVnaWQgLSBzZXQgZWZmZWN0aXZlIHVzZXIgb3IgZ3JvdXAgSUQKICAgICAgLSBzZXRlZ2lkCiAgICAgICMgc2V0ZnNnaWQgLSBzZXQgZ3JvdXAgaWRlbnRpdHkgdXNlZCBmb3IgZmlsZXN5c3RlbSBjaGVja3MKICAgICAgLSBzZXRmc2dpZAogICAgICAjIHNldHJlZ2lkIC0gc2V0IHJlYWwgYW5kL29yIGVmZmVjdGl2ZSB1c2VyIG9yIGdyb3VwIElECiAgICAgIC0gc2V0cmVnaWQKICAgICAgIyBzZXRyZXN1aWQgLSBzZXQgcmVhbCwgZWZmZWN0aXZlIGFuZCBzYXZlZCB1c2VyIG9yIGdyb3VwIElECiAgICAgIC0gc2V0cmVzdWlkCiAgICAgICMgc2V0cmVzZ2lkIC0gc2V0IHJlYWwsIGVmZmVjdGl2ZSBhbmQgc2F2ZWQgdXNlciBvciBncm91cCBJRAogICAgICAtIHNldHJlc2dpZAogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IGNoYW5nZQogIC0gYWN0aW9uOiBjaGFuZ2VkLXN5c3RlbS10aW1lCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHN5c3RlbQogICAgc3lzY2FsbHM6CiAgICAgICMgc2V0dGltZW9mZGF5IC0gZ2V0IC8gc2V0IHRpbWUKICAgICAgLSBzZXR0aW1lb2ZkYXkKICAgICAgIyBjbG9ja19zZXR0aW1lIC0gY2xvY2sgYW5kIHRpbWUgZnVuY3Rpb25zCiAgICAgIC0gY2xvY2tfc2V0dGltZQogICAgICAjIHN0aW1lIC0gc2V0IHRpbWUKICAgICAgLSBzdGltZQogICAgICAjIGFkanRpbWV4IC0gdHVuZSBrZXJuZWwgY2xvY2sKICAgICAgLSBhZGp0aW1leAogICAgZWNzOgogICAgICA8PDogKmVjcy1ob3N0CiAgICAgIHR5cGU6IGNoYW5nZQogIC0gYWN0aW9uOiBtYWtlLWRldmljZQogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBta25vZCAtIGNyZWF0ZSBhIHNwZWNpYWwgb3Igb3JkaW5hcnkgZmlsZQogICAgICAtIG1rbm9kCiAgICAgICMgbWtub2RhdCAtIGNyZWF0ZSBhIHNwZWNpYWwgb3Igb3JkaW5hcnkgZmlsZQogICAgICAtIG1rbm9kYXQKICAgIGVjczoKICAgICAgPDw6ICplY3MtZmlsZQogICAgICB0eXBlOiBjcmVhdGlvbgogIC0gYWN0aW9uOiBjaGFuZ2VkLXN5c3RlbS1uYW1lCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHN5c3RlbQogICAgc3lzY2FsbHM6CiAgICAgICMgc2V0aG9zdG5hbWUgLSBnZXQvc2V0IGhvc3RuYW1lCiAgICAgIC0gc2V0aG9zdG5hbWUKICAgICAgIyBzZXRkb21haW5uYW1lIC0gZ2V0L3NldCBOSVMgZG9tYWluIG5hbWUKICAgICAgLSBzZXRkb21haW5uYW1lCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWhvc3QKICAgICAgdHlwZTogY2hhbmdlCiAgLSBhY3Rpb246IGFsbG9jYXRlZC1tZW1vcnkKICAgIG9iamVjdDoKICAgICAgd2hhdDogbWVtb3J5CiAgICBzeXNjYWxsczoKICAgICAgIyBtbWFwIC0gbWFwIG9yIHVubWFwIGZpbGVzIG9yIGRldmljZXMgaW50byBtZW1vcnkKICAgICAgLSBtbWFwCiAgICAgICMgbW1hcDIgLSBtYXAgZmlsZXMgb3IgZGV2aWNlcyBpbnRvIG1lbW9yeQogICAgICAtIG1tYXAyCiAgICAgICMgYnJrIC0gY2hhbmdlIGRhdGEgc2VnbWVudCBzaXplCiAgICAgIC0gYnJrCiAgICBlY3M6ICplY3MtcHJvY2VzcwogIC0gYWN0aW9uOiBhZGp1c3RlZC1zY2hlZHVsaW5nLXBvbGljeS1vZgogICAgb2JqZWN0OgogICAgICB3aGF0OiBwcm9jZXNzCiAgICBob3c6IHN5c2NhbGwKICAgIHN5c2NhbGxzOgogICAgICAjIHNjaGVkX3NldHBhcmFtIC0gc2V0IGFuZCBnZXQgc2NoZWR1bGluZyBwYXJhbWV0ZXJzCiAgICAgIC0gc2NoZWRfc2V0cGFyYW0KICAgICAgIyBzY2hlZF9zZXRzY2hlZHVsZXIgLSBzZXQgYW5kIGdldCBzY2hlZHVsaW5nIHBvbGljeS9wYXJhbWV0ZXJzCiAgICAgIC0gc2NoZWRfc2V0c2NoZWR1bGVyCiAgICAgICMgc2NoZWRfc2V0YXR0ciAtIHNldCBhbmQgZ2V0IHNjaGVkdWxpbmcgcG9saWN5IGFuZCBhdHRyaWJ1dGVzCiAgICAgIC0gc2NoZWRfc2V0YXR0cgogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IGNoYW5nZQoKICAjIEN1cnJlbnRseSB1bmhhbmRsZWQKICAjIHRoaXMgbGlzdCBjb21lcyBmcm9tIHBhcnNpbmcgbGludXggbWFuIHBhZ2VzIGF0IGh0dHBzOi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9kb2NzL21hbi1wYWdlcy9tYW4tcGFnZXMuZ2l0CgogICMgc2lnYWN0aW9uIC0gZXhhbWluZSBhbmQgY2hhbmdlIGEgc2lnbmFsIGFjdGlvbgogICMgcnRfc2lnYWN0aW9uIC0gZXhhbWluZSBhbmQgY2hhbmdlIGEgc2lnbmFsIGFjdGlvbgogICMgcHJlYWQgLSByZWFkIGZyb20gb3Igd3JpdGUgdG8gYSBmaWxlIGRlc2NyaXB0b3IgYXQgYSBnaXZlbiBvZmZzZXQKICAjIHB3cml0ZSAtIHJlYWQgZnJvbSBvciB3cml0ZSB0byBhIGZpbGUgZGVzY3JpcHRvciBhdCBhIGdpdmVuIG9mZnNldAogICMgczM5MF9ndWFyZGVkX3N0b3JhZ2UgLSBvcGVyYXRpb25zIHdpdGggei9BcmNoaXRlY3R1cmUgZ3VhcmRlZCBzdG9yYWdlIGZhY2lsaXR5CiAgIyBzY2hlZF9nZXRhdHRyIC0gc2V0IGFuZCBnZXQgc2NoZWR1bGluZyBwb2xpY3kgYW5kIGF0dHJpYnV0ZXMKICAjIGdldHJ1c2FnZSAtIGdldCByZXNvdXJjZSB1c2FnZQogICMgZmxvY2sgLSBhcHBseSBvciByZW1vdmUgYW4gYWR2aXNvcnkgbG9jayBvbiBhbiBvcGVuIGZpbGUKICAjIHBpZGZkX2dldGZkIC0gb2J0YWluIGEgZHVwbGljYXRlIG9mIGFub3RoZXIgcHJvY2VzcydzIGZpbGUgZGVzY3JpcHRvcgogICMgY2xvY2tfbmFub3NsZWVwIC0gaGlnaC1yZXNvbHV0aW9uIHNsZWVwIHdpdGggc3BlY2lmaWFibGUgY2xvY2sKICAjIGdldHBhZ2VzaXplIC0gZ2V0IG1lbW9yeSBwYWdlIHNpemUKICAjIHBpZGZkX29wZW4gLSBvYnRhaW4gYSBmaWxlIGRlc2NyaXB0b3IgdGhhdCByZWZlcnMgdG8gYSBwcm9jZXNzCiAgIyBzcGxpY2UgLSBzcGxpY2UgZGF0YSB0by9mcm9tIGEgcGlwZQogICMgZ2V0cmVzdWlkIC0gZ2V0IHJlYWwsIGVmZmVjdGl2ZSBhbmQgc2F2ZWQgdXNlci9ncm91cCBJRHMKICAjIGdldHJlc2dpZCAtIGdldCByZWFsLCBlZmZlY3RpdmUgYW5kIHNhdmVkIHVzZXIvZ3JvdXAgSURzCiAgIyByZW1hcF9maWxlX3BhZ2VzIC0gY3JlYXRlIGEgbm9ubGluZWFyIGZpbGUgbWFwcGluZwogICMgaW9fY2FuY2VsIC0gY2FuY2VsIGFuIG91dHN0YW5kaW5nIGFzeW5jaHJvbm91cyBJL08gb3BlcmF0aW9uCiAgIyBwcmN0bCAtIG9wZXJhdGlvbnMgb24gYSBwcm9jZXNzIG9yIHRocmVhZAogICMgY2xvY2tfZ2V0cmVzIC0gY2xvY2sgYW5kIHRpbWUgZnVuY3Rpb25zCiAgIyBjbG9ja19nZXR0aW1lIC0gY2xvY2sgYW5kIHRpbWUgZnVuY3Rpb25zCiAgIyBnZXRncm91cHMgLSBnZXQvc2V0IGxpc3Qgb2Ygc3VwcGxlbWVudGFyeSBncm91cCBJRHMKICAjIHNldGdyb3VwcyAtIGdldC9zZXQgbGlzdCBvZiBzdXBwbGVtZW50YXJ5IGdyb3VwIElEcwogICMgdm1zcGxpY2UgLSBzcGxpY2UgdXNlciBwYWdlcyB0by9mcm9tIGEgcGlwZQogICMgZXBvbGxfY3JlYXRlIC0gb3BlbiBhbiBlcG9sbCBmaWxlIGRlc2NyaXB0b3IKICAjIGVwb2xsX2NyZWF0ZTEgLSBvcGVuIGFuIGVwb2xsIGZpbGUgZGVzY3JpcHRvcgogICMgcG9zaXhfZmFkdmlzZSAtIHByZWRlY2xhcmUgYW4gYWNjZXNzIHBhdHRlcm4gZm9yIGZpbGUgZGF0YQogICMgc2lnd2FpdGluZm8gLSBzeW5jaHJvbm91c2x5IHdhaXQgZm9yIHF1ZXVlZCBzaWduYWxzCiAgIyBzaWd0aW1lZHdhaXQgLSBzeW5jaHJvbm91c2x5IHdhaXQgZm9yIHF1ZXVlZCBzaWduYWxzCiAgIyBydF9zaWd0aW1lZHdhaXQgLSBzeW5jaHJvbm91c2x5IHdhaXQgZm9yIHF1ZXVlZCBzaWduYWxzCiAgIyBzaWdyZXR1cm4gLSByZXR1cm4gZnJvbSBzaWduYWwgaGFuZGxlciBhbmQgY2xlYW51cCBzdGFjayBmcmFtZQogICMgcnRfc2lncmV0dXJuIC0gcmV0dXJuIGZyb20gc2lnbmFsIGhhbmRsZXIgYW5kIGNsZWFudXAgc3RhY2sgZnJhbWUKICAjIGdldHJhbmRvbSAtIG9idGFpbiBhIHNlcmllcyBvZiByYW5kb20gYnl0ZXMKICAjIGtleWN0bCAtIG1hbmlwdWxhdGUgdGhlIGtlcm5lbCdzIGtleSBtYW5hZ2VtZW50IGZhY2lsaXR5CiAgIyBzY2hlZF9nZXRzY2hlZHVsZXIgLSBzZXQgYW5kIGdldCBzY2hlZHVsaW5nIHBvbGljeS9wYXJhbWV0ZXJzCiAgIyBtYmluZCAtIHNldCBtZW1vcnkgcG9saWN5IGZvciBhIG1lbW9yeSByYW5nZQogICMgZ2V0cHJpb3JpdHkgLSBnZXQvc2V0IHByb2dyYW0gc2NoZWR1bGluZyBwcmlvcml0eQogICMgc2V0cHJpb3JpdHkgLSBnZXQvc2V0IHByb2dyYW0gc2NoZWR1bGluZyBwcmlvcml0eQogICMgaW5vdGlmeV9pbml0IC0gaW5pdGlhbGl6ZSBhbiBpbm90aWZ5IGluc3RhbmNlCiAgIyBpbm90aWZ5X2luaXQxIC0gaW5pdGlhbGl6ZSBhbiBpbm90aWZ5IGluc3RhbmNlCiAgIyBzZW1jdGwgLSBTeXN0ZW0gViBzZW1hcGhvcmUgY29udHJvbCBvcGVyYXRpb25zCiAgIyBnZXRob3N0bmFtZSAtIGdldC9zZXQgaG9zdG5hbWUKICAjIHB0cmFjZSAtIHByb2Nlc3MgdHJhY2UKICAjIHN5c2N0bCAtIHJlYWQvd3JpdGUgc3lzdGVtIHBhcmFtZXRlcnMKICAjIGdldHBlZXJuYW1lIC0gZ2V0IG5hbWUgb2YgY29ubmVjdGVkIHBlZXIgc29ja2V0CiAgIyBmb3JrIC0gY3JlYXRlIGEgY2hpbGQgcHJvY2VzcwogICMgcXVlcnlfbW9kdWxlIC0gcXVlcnkgdGhlIGtlcm5lbCBmb3IgdmFyaW91cyBiaXRzIHBlcnRhaW5pbmcgdG8gbW9kdWxlcwogICMgaW9jdGxfbGlzdCAtIGxpc3Qgb2YgaW9jdGwgY2FsbHMgaW4gTGludXgvaTM4NiBrZXJuZWwKICAjIG1zZ2dldCAtIGdldCBhIFN5c3RlbSBWIG1lc3NhZ2UgcXVldWUgaWRlbnRpZmllcgogICMgc3B1X2NyZWF0ZSAtIGNyZWF0ZSBhIG5ldyBzcHUgY29udGV4dAogICMgc3VicGFnZV9wcm90IC0gZGVmaW5lIGEgc3VicGFnZSBwcm90ZWN0aW9uIGZvciBhbiBhZGRyZXNzIHJhbmdlCiAgIyBxdW90YWN0bCAtIG1hbmlwdWxhdGUgZGlzayBxdW90YXMKICAjIG5mc3NlcnZjdGwgLSBzeXNjYWxsIGludGVyZmFjZSB0byBrZXJuZWwgbmZzIGRhZW1vbgogICMgb3BlbmF0MiAtIG9wZW4gYW5kIHBvc3NpYmx5IGNyZWF0ZSBhIGZpbGUgKGV4dGVuZGVkKQogICMgZ2V0cmxpbWl0IC0gZ2V0L3NldCByZXNvdXJjZSBsaW1pdHMKICAjIHNldHJsaW1pdCAtIGdldC9zZXQgcmVzb3VyY2UgbGltaXRzCiAgIyBwcmxpbWl0IC0gZ2V0L3NldCByZXNvdXJjZSBsaW1pdHMKICAjIHRlZSAtIGR1cGxpY2F0aW5nIHBpcGUgY29udGVudAogICMgc2htZ2V0IC0gYWxsb2NhdGVzIGEgU3lzdGVtIFYgc2hhcmVkIG1lbW9yeSBzZWdtZW50CiAgIyBjcmVhdGVfbW9kdWxlIC0gY3JlYXRlIGEgbG9hZGFibGUgbW9kdWxlIGVudHJ5CiAgIyBnZXR0aW1lb2ZkYXkgLSBnZXQgLyBzZXQgdGltZQogICMgdGltZXJfY3JlYXRlIC0gY3JlYXRlIGEgUE9TSVggcGVyLXByb2Nlc3MgdGltZXIKICAjIGZhbm90aWZ5X21hcmsgLSBhZGQsIHJlbW92ZSwgb3IgbW9kaWZ5IGFuIGZhbm90aWZ5IG1hcmsgb24gYSBmaWxlc3lzdGVtIG9iamVjdAogICMgcGlwZSAtIGNyZWF0ZSBwaXBlCiAgIyBwaXBlMiAtIGNyZWF0ZSBwaXBlCiAgIyBpbnRybyAtIGludHJvZHVjdGlvbiB0byBzeXN0ZW0gY2FsbHMKICAjIGxvb2t1cF9kY29va2llIC0gcmV0dXJuIGEgZGlyZWN0b3J5IGVudHJ5J3MgcGF0aAogICMgc3lzZnMgLSBnZXQgZmlsZXN5c3RlbSB0eXBlIGluZm9ybWF0aW9uCiAgIyBzMzkwX3J1bnRpbWVfaW5zdHIgLSBlbmFibGUvZGlzYWJsZSBzMzkwIENQVSBydW4tdGltZSBpbnN0cnVtZW50YXRpb24KICAjIHNldG5zIC0gcmVhc3NvY2lhdGUgdGhyZWFkIHdpdGggYSBuYW1lc3BhY2UKICAjIHNldF9tZW1wb2xpY3kgLSBzZXQgZGVmYXVsdCBOVU1BIG1lbW9yeSBwb2xpY3kgZm9yIGEgdGhyZWFkIGFuZCBpdHMgY2hpbGRyZW4KICAjIG5pY2UgLSBjaGFuZ2UgcHJvY2VzcyBwcmlvcml0eQogICMgaW9fc2V0dXAgLSBjcmVhdGUgYW4gYXN5bmNocm9ub3VzIEkvTyBjb250ZXh0CiAgIyBtaW5jb3JlIC0gZGV0ZXJtaW5lIHdoZXRoZXIgcGFnZXMgYXJlIHJlc2lkZW50IGluIG1lbW9yeQogICMgaW9jdGxfY29uc29sZSAtIGlvY3RscyBmb3IgY29uc29sZSB0ZXJtaW5hbCBhbmQgdmlydHVhbCBjb25zb2xlcwogICMgcG9sbCAtIHdhaXQgZm9yIHNvbWUgZXZlbnQgb24gYSBmaWxlIGRlc2NyaXB0b3IKICAjIHBwb2xsIC0gd2FpdCBmb3Igc29tZSBldmVudCBvbiBhIGZpbGUgZGVzY3JpcHRvcgogICMgY2FwZ2V0IC0gc2V0L2dldCBjYXBhYmlsaXRpZXMgb2YgdGhyZWFkKHMpCiAgIyBjYXBzZXQgLSBzZXQvZ2V0IGNhcGFiaWxpdGllcyBvZiB0aHJlYWQocykKICAjIGlvY3RsX3R0eSAtIGlvY3RscyBmb3IgdGVybWluYWxzIGFuZCBzZXJpYWwgbGluZXMKICAjIGlvcGwgLSBjaGFuZ2UgSS9PIHByaXZpbGVnZSBsZXZlbAogICMgaW9fZ2V0ZXZlbnRzIC0gcmVhZCBhc3luY2hyb25vdXMgSS9PIGV2ZW50cyBmcm9tIHRoZSBjb21wbGV0aW9uIHF1ZXVlCiAgIyBwcm9jZXNzX3ZtX3JlYWR2IC0gdHJhbnNmZXIgZGF0YSBiZXR3ZWVuIHByb2Nlc3MgYWRkcmVzcyBzcGFjZXMKICAjIHByb2Nlc3Nfdm1fd3JpdGV2IC0gdHJhbnNmZXIgZGF0YSBiZXR3ZWVuIHByb2Nlc3MgYWRkcmVzcyBzcGFjZXMKICAjIHBjaWNvbmZpZ19yZWFkIC0gcGNpIGRldmljZSBpbmZvcm1hdGlvbiBoYW5kbGluZwogICMgcGNpY29uZmlnX3dyaXRlIC0gcGNpIGRldmljZSBpbmZvcm1hdGlvbiBoYW5kbGluZwogICMgcGNpY29uZmlnX2lvYmFzZSAtIHBjaSBkZXZpY2UgaW5mb3JtYXRpb24gaGFuZGxpbmcKICAjIHNicmsgLSBjaGFuZ2UgZGF0YSBzZWdtZW50IHNpemUKICAjIHNldF90aWRfYWRkcmVzcyAtIHNldCBwb2ludGVyIHRvIHRocmVhZCBJRAogICMgcGtleV9hbGxvYyAtIGFsbG9jYXRlIG9yIGZyZWUgYSBwcm90ZWN0aW9uIGtleQogICMgcGtleV9mcmVlIC0gYWxsb2NhdGUgb3IgZnJlZSBhIHByb3RlY3Rpb24ga2V5CiAgIyBzZWxlY3QgLSBzeW5jaHJvbm91cyBJL08gbXVsdGlwbGV4aW5nCiAgIyBwc2VsZWN0IC0gc3luY2hyb25vdXMgSS9PIG11bHRpcGxleGluZwogICMga2V4ZWNfbG9hZCAtIGxvYWQgYSBuZXcga2VybmVsIGZvciBsYXRlciBleGVjdXRpb24KICAjIGtleGVjX2ZpbGVfbG9hZCAtIGxvYWQgYSBuZXcga2VybmVsIGZvciBsYXRlciBleGVjdXRpb24KICAjIHBlcnNvbmFsaXR5IC0gc2V0IHRoZSBwcm9jZXNzIGV4ZWN1dGlvbiBkb21haW4KICAjIGlvY3RsX2dldGZzbWFwIC0gcmV0cmlldmUgdGhlIHBoeXNpY2FsIGxheW91dCBvZiB0aGUgZmlsZXN5c3RlbQogICMgaW5vdGlmeV9ybV93YXRjaCAtIHJlbW92ZSBhbiBleGlzdGluZyB3YXRjaCBmcm9tIGFuIGlub3RpZnkgaW5zdGFuY2UKICAjIHBlcmZfZXZlbnRfb3BlbiAtIHNldCB1cCBwZXJmb3JtYW5jZSBtb25pdG9yaW5nCiAgIyB0aW1lcl9nZXRvdmVycnVuIC0gZ2V0IG92ZXJydW4gY291bnQgZm9yIGEgUE9TSVggcGVyLXByb2Nlc3MgdGltZXIKICAjIHdhaXQzIC0gd2FpdCBmb3IgcHJvY2VzcyB0byBjaGFuZ2Ugc3RhdGUsIEJTRCBzdHlsZQogICMgd2FpdDQgLSB3YWl0IGZvciBwcm9jZXNzIHRvIGNoYW5nZSBzdGF0ZSwgQlNEIHN0eWxlCiAgIyBsaW5rIC0gbWFrZSBhIG5ldyBuYW1lIGZvciBhIGZpbGUKICAjIGxpbmthdCAtIG1ha2UgYSBuZXcgbmFtZSBmb3IgYSBmaWxlCiAgIyBzY2hlZF9ycl9nZXRfaW50ZXJ2YWwgLSBnZXQgdGhlIFNDSEVEX1JSIGludGVydmFsIGZvciB0aGUgbmFtZWQgcHJvY2VzcwogICMgbXVubWFwIC0gbWFwIG9yIHVubWFwIGZpbGVzIG9yIGRldmljZXMgaW50byBtZW1vcnkKICAjIHNvY2tldGNhbGwgLSBzb2NrZXQgc3lzdGVtIGNhbGxzCiAgIyBtcmVtYXAgLSByZW1hcCBhIHZpcnR1YWwgbWVtb3J5IGFkZHJlc3MKICAjIHZmb3JrIC0gY3JlYXRlIGEgY2hpbGQgcHJvY2VzcyBhbmQgYmxvY2sgcGFyZW50CiAgIyBzZWNjb21wIC0gb3BlcmF0ZSBvbiBTZWN1cmUgQ29tcHV0aW5nIHN0YXRlIG9mIHRoZSBwcm9jZXNzCiAgIyByZXF1ZXN0X2tleSAtIHJlcXVlc3QgYSBrZXkgZnJvbSB0aGUga2VybmVsJ3Mga2V5IG1hbmFnZW1lbnQgZmFjaWxpdHkKICAjIHN5c2NhbGwgLSBpbmRpcmVjdCBzeXN0ZW0gY2FsbAogICMga2NtcCAtIGNvbXBhcmUgdHdvIHByb2Nlc3NlcyB0byBkZXRlcm1pbmUgaWYgdGhleSBzaGFyZSBhIGtlcm5lbCByZXNvdXJjZQogICMgcmVhZGRpciAtIHJlYWQgZGlyZWN0b3J5IGVudHJ5CiAgIyBpb3Blcm0gLSBzZXQgcG9ydCBpbnB1dC9vdXRwdXQgcGVybWlzc2lvbnMKICAjIHNwdV9ydW4gLSBleGVjdXRlIGFuIFNQVSBjb250ZXh0CiAgIyByZWJvb3QgLSByZWJvb3Qgb3IgZW5hYmxlL2Rpc2FibGUgQ3RybC1BbHQtRGVsCiAgIyByZWFkYWhlYWQgLSBpbml0aWF0ZSBmaWxlIHJlYWRhaGVhZCBpbnRvIHBhZ2UgY2FjaGUKICAjIHNjaGVkX2dldHBhcmFtIC0gc2V0IGFuZCBnZXQgc2NoZWR1bGluZyBwYXJhbWV0ZXJzCiAgIyBhY2N0IC0gc3dpdGNoIHByb2Nlc3MgYWNjb3VudGluZyBvbiBvciBvZmYKICAjIHNpZ3N1c3BlbmQgLSB3YWl0IGZvciBhIHNpZ25hbAogICMgcnRfc2lnc3VzcGVuZCAtIHdhaXQgZm9yIGEgc2lnbmFsCiAgIyBleGl0X2dyb3VwIC0gZXhpdCBhbGwgdGhyZWFkcyBpbiBhIHByb2Nlc3MKICAjIHNvY2tldCAtIGNyZWF0ZSBhbiBlbmRwb2ludCBmb3IgY29tbXVuaWNhdGlvbgogICMgaW9jdGxfdXNlcmZhdWx0ZmQgLSBjcmVhdGUgYSBmaWxlIGRlc2NyaXB0b3IgZm9yIGhhbmRsaW5nIHBhZ2UgZmF1bHRzIGluIHVzZXIgc3BhY2UKICAjIHNjaGVkX2dldF9wcmlvcml0eV9tYXggLSBnZXQgc3RhdGljIHByaW9yaXR5IHJhbmdlCiAgIyBzY2hlZF9nZXRfcHJpb3JpdHlfbWluICAtIGdldCBzdGF0aWMgcHJpb3JpdHkgcmFuZ2UKICAjIGdldGRlbnRzIC0gZ2V0IGRpcmVjdG9yeSBlbnRyaWVzCiAgIyBnZXRkZW50czY0IC0gZ2V0IGRpcmVjdG9yeSBlbnRyaWVzCiAgIyBzZWxlY3QgLSBzeW5jaHJvbm91cyBJL08gbXVsdGlwbGV4aW5nCiAgIyBwc2VsZWN0IC0gc3luY2hyb25vdXMgSS9PIG11bHRpcGxleGluZwogICMgYWxsb2NfaHVnZXBhZ2VzIC0gYWxsb2NhdGUgb3IgZnJlZSBodWdlIHBhZ2VzCiAgIyBmcmVlX2h1Z2VwYWdlcyAtIGFsbG9jYXRlIG9yIGZyZWUgaHVnZSBwYWdlcwogICMgZnN5bmMgLSBzeW5jaHJvbml6ZSBhIGZpbGUncyBpbi1jb3JlIHN0YXRlIHdpdGggc3RvcmFnZSBkZXZpY2UKICAjIGZkYXRhc3luYyAtIHN5bmNocm9uaXplIGEgZmlsZSdzIGluLWNvcmUgc3RhdGUgd2l0aCBzdG9yYWdlIGRldmljZQogICMgc3lzY2FsbHMgLSBMaW51eCBzeXN0ZW0gY2FsbHMKICAjIG1lbWZkX2NyZWF0ZSAtIGNyZWF0ZSBhbiBhbm9ueW1vdXMgZmlsZQogICMgbW9kaWZ5X2xkdCAtIGdldCBvciBzZXQgYSBwZXItcHJvY2VzcyBMRFQgZW50cnkKICAjIGdldF9rZXJuZWxfc3ltcyAtIHJldHJpZXZlIGV4cG9ydGVkIGtlcm5lbCBhbmQgbW9kdWxlIHN5bWJvbHMKICAjIGxzZWVrIC0gcmVwb3NpdGlvbiByZWFkL3dyaXRlIGZpbGUgb2Zmc2V0CiAgIyBzaG1hdCAtIFN5c3RlbSBWIHNoYXJlZCBtZW1vcnkgb3BlcmF0aW9ucwogICMgc2htZHQgLSBTeXN0ZW0gViBzaGFyZWQgbWVtb3J5IG9wZXJhdGlvbnMKICAjIHRpbWVyX2RlbGV0ZSAtIGRlbGV0ZSBhIFBPU0lYIHBlci1wcm9jZXNzIHRpbWVyCiAgIyBwZXJmbW9uY3RsIC0gaW50ZXJmYWNlIHRvIElBLTY0IHBlcmZvcm1hbmNlIG1vbml0b3JpbmcgdW5pdAogICMgbW92ZV9wYWdlcyAtIG1vdmUgaW5kaXZpZHVhbCBwYWdlcyBvZiBhIHByb2Nlc3MgdG8gYW5vdGhlciBub2RlCiAgIyBjaGRpciAtIGNoYW5nZSB3b3JraW5nIGRpcmVjdG9yeQogICMgZmNoZGlyIC0gY2hhbmdlIHdvcmtpbmcgZGlyZWN0b3J5CiAgIyB0aW1lIC0gZ2V0IHRpbWUgaW4gc2Vjb25kcwogICMgX2V4aXQgLSB0ZXJtaW5hdGUgdGhlIGNhbGxpbmcgcHJvY2VzcwogICMgX0V4aXQgLSB0ZXJtaW5hdGUgdGhlIGNhbGxpbmcgcHJvY2VzcwogICMgczM5MF9zdGh5aSAtIGVtdWxhdGUgU1RIWUkgaW5zdHJ1Y3Rpb24KICAjIGlvX3N1Ym1pdCAtIHN1Ym1pdCBhc3luY2hyb25vdXMgSS9PIGJsb2NrcyBmb3IgcHJvY2Vzc2luZwogICMgbWxvY2sgLSBsb2NrIGFuZCB1bmxvY2sgbWVtb3J5CiAgIyBtbG9jazIgLSBsb2NrIGFuZCB1bmxvY2sgbWVtb3J5CiAgIyBtdW5sb2NrIC0gbG9jayBhbmQgdW5sb2NrIG1lbW9yeQogICMgbWxvY2thbGwgLSBsb2NrIGFuZCB1bmxvY2sgbWVtb3J5CiAgIyBtdW5sb2NrYWxsIC0gbG9jayBhbmQgdW5sb2NrIG1lbW9yeQogICMgdW1hc2sgLSBzZXQgZmlsZSBtb2RlIGNyZWF0aW9uIG1hc2sKICAjIGFyY2hfcHJjdGwgLSBzZXQgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHRocmVhZCBzdGF0ZQogICMgdXNlbGliIC0gbG9hZCBzaGFyZWQgbGlicmFyeQogICMgc2VuZGZpbGUgLSB0cmFuc2ZlciBkYXRhIGJldHdlZW4gZmlsZSBkZXNjcmlwdG9ycwogICMgc2htY3RsIC0gU3lzdGVtIFYgc2hhcmVkIG1lbW9yeSBjb250cm9sCiAgIyBlcG9sbF93YWl0IC0gd2FpdCBmb3IgYW4gSS9PIGV2ZW50IG9uIGFuIGVwb2xsIGZpbGUgZGVzY3JpcHRvcgogICMgZXBvbGxfcHdhaXQgLSB3YWl0IGZvciBhbiBJL08gZXZlbnQgb24gYW4gZXBvbGwgZmlsZSBkZXNjcmlwdG9yCiAgIyBzaWdhbHRzdGFjayAtIHNldCBhbmQvb3IgZ2V0IHNpZ25hbCBzdGFjayBjb250ZXh0CiAgIyBpb2N0bCAtIGNvbnRyb2wgZGV2aWNlCiAgIyBzaWduYWxmZCAtIGNyZWF0ZSBhIGZpbGUgZGVzY3JpcHRvciBmb3IgYWNjZXB0aW5nIHNpZ25hbHMKICAjIHVuc2hhcmUgLSBkaXNhc3NvY2lhdGUgcGFydHMgb2YgdGhlIHByb2Nlc3MgZXhlY3V0aW9uIGNvbnRleHQKICAjIGNocm9vdCAtIGNoYW5nZSByb290IGRpcmVjdG9yeQogICMgbWFkdmlzZSAtIGdpdmUgYWR2aWNlIGFib3V0IHVzZSBvZiBtZW1vcnkKICAjIGdldHRpZCAtIGdldCB0aHJlYWQgaWRlbnRpZmljYXRpb24KICAjIGdldHNvY2tuYW1lIC0gZ2V0IHNvY2tldCBuYW1lCiAgIyBpb19kZXN0cm95IC0gZGVzdHJveSBhbiBhc3luY2hyb25vdXMgSS9PIGNvbnRleHQKICAjIHNldHVwIC0gc2V0dXAgZGV2aWNlcyBhbmQgZmlsZXN5c3RlbXMsIG1vdW50IHJvb3QgZmlsZXN5c3RlbQogICMgbnRwX2FkanRpbWUgLSB0dW5lIGtlcm5lbCBjbG9jawogICMgc2VtZ2V0IC0gZ2V0IGEgU3lzdGVtIFYgc2VtYXBob3JlIHNldCBpZGVudGlmaWVyCiAgIyBnZXR1aWQgLSBnZXQgdXNlciBpZGVudGl0eQogICMgZ2V0ZXVpZCAtIGdldCB1c2VyIGlkZW50aXR5CiAgIyBfc3lzY2FsbCAtIGludm9raW5nIGEgc3lzdGVtIGNhbGwgd2l0aG91dCBsaWJyYXJ5IHN1cHBvcnQgKE9CU09MRVRFKQogICMgc2NoZWRfc2V0YWZmaW5pdHkgLSBcIHNldCBhbmQgZ2V0IGEgdGhyZWFkJ3MgQ1BVIGFmZmluaXR5IG1hc2sKICAjIHNjaGVkX2dldGFmZmluaXR5IC0gXCBzZXQgYW5kIGdldCBhIHRocmVhZCdzIENQVSBhZmZpbml0eSBtYXNrCiAgIyBjYWNoZWZsdXNoIC0gZmx1c2ggY29udGVudHMgb2YgaW5zdHJ1Y3Rpb24gYW5kL29yIGRhdGEgY2FjaGUKICAjIHBpdm90X3Jvb3QgLSBjaGFuZ2UgdGhlIHJvb3QgbW91bnQKICAjIG1zZ2N0bCAtIFN5c3RlbSBWIG1lc3NhZ2UgY29udHJvbCBvcGVyYXRpb25zCiAgIyBpb2N0bF9mYXQgLSBtYW5pcHVsYXRpbmcgdGhlIEZBVCBmaWxlc3lzdGVtCiAgIyBzZXRwZ2lkIC0gc2V0L2dldCBwcm9jZXNzIGdyb3VwCiAgIyBnZXRwZ2lkIC0gc2V0L2dldCBwcm9jZXNzIGdyb3VwCiAgIyBzZXRwZ3JwIC0gc2V0L2dldCBwcm9jZXNzIGdyb3VwCiAgIyBnZXRwZ3JwIC0gc2V0L2dldCBwcm9jZXNzIGdyb3VwCiAgIyBzb2NrZXRwYWlyIC0gY3JlYXRlIGEgcGFpciBvZiBjb25uZWN0ZWQgc29ja2V0cwogICMgYmRmbHVzaCAtIHN0YXJ0LCBmbHVzaCwgb3IgdHVuZSBidWZmZXItZGlydHktZmx1c2ggZGFlbW9uCiAgIyBhbGFybSAtIHNldCBhbiBhbGFybSBjbG9jayBmb3IgZGVsaXZlcnkgb2YgYSBzaWduYWwKICAjIHRpbWVyX3NldHRpbWUgLSBhcm0vZGlzYXJtIGFuZCBmZXRjaCBzdGF0ZSBvZiBQT1NJWCBwZXItcHJvY2VzcyB0aW1lcgogICMgdGltZXJfZ2V0dGltZSAtIGFybS9kaXNhcm0gYW5kIGZldGNoIHN0YXRlIG9mIFBPU0lYIHBlci1wcm9jZXNzIHRpbWVyCiAgIyBhZGRfa2V5IC0gYWRkIGEga2V5IHRvIHRoZSBrZXJuZWwncyBrZXkgbWFuYWdlbWVudCBmYWNpbGl0eQogICMgcnRfc2lncXVldWVpbmZvIC0gcXVldWUgYSBzaWduYWwgYW5kIGRhdGEKICAjIHJ0X3Rnc2lncXVldWVpbmZvIC0gcXVldWUgYSBzaWduYWwgYW5kIGRhdGEKICAjIHVzZXJmYXVsdGZkIC0gY3JlYXRlIGEgZmlsZSBkZXNjcmlwdG9yIGZvciBoYW5kbGluZyBwYWdlIGZhdWx0cyBpbiB1c2VyIHNwYWNlCiAgIyBzZW1vcCAtIFN5c3RlbSBWIHNlbWFwaG9yZSBvcGVyYXRpb25zCiAgIyBzZW10aW1lZG9wIC0gU3lzdGVtIFYgc2VtYXBob3JlIG9wZXJhdGlvbnMKICAjIGdldGdpZCAtIGdldCBncm91cCBpZGVudGl0eQogICMgZ2V0ZWdpZCAtIGdldCBncm91cCBpZGVudGl0eQogICMgZ2V0cGlkIC0gZ2V0IHByb2Nlc3MgaWRlbnRpZmljYXRpb24KICAjIGdldHBwaWQgLSBnZXQgcHJvY2VzcyBpZGVudGlmaWNhdGlvbgogICMgc2lncHJvY21hc2sgLSBleGFtaW5lIGFuZCBjaGFuZ2UgYmxvY2tlZCBzaWduYWxzCiAgIyBydF9zaWdwcm9jbWFzayAtIGV4YW1pbmUgYW5kIGNoYW5nZSBibG9ja2VkIHNpZ25hbHMKICAjIHVuYW1lIC0gZ2V0IG5hbWUgYW5kIGluZm9ybWF0aW9uIGFib3V0IGN1cnJlbnQga2VybmVsCiAgIyBzdGF0eCAtIGdldCBmaWxlIHN0YXR1cyAoZXh0ZW5kZWQpCiAgIyBpb2N0bF9maWNsb25lcmFuZ2UgLSBzaGFyZSBzb21lIHRoZSBkYXRhIG9mIG9uZSBmaWxlIHdpdGggYW5vdGhlciBmaWxlCiAgIyBpb2N0bF9maWNsb25lIC0gc2hhcmUgc29tZSB0aGUgZGF0YSBvZiBvbmUgZmlsZSB3aXRoIGFub3RoZXIgZmlsZQogICMgbXFfZ2V0c2V0YXR0ciAtIGdldC9zZXQgbWVzc2FnZSBxdWV1ZSBhdHRyaWJ1dGVzCiAgIyBpb3ByaW9fZ2V0IC0gZ2V0L3NldCBJL08gc2NoZWR1bGluZyBjbGFzcyBhbmQgcHJpb3JpdHkKICAjIGlvcHJpb19zZXQgLSBnZXQvc2V0IEkvTyBzY2hlZHVsaW5nIGNsYXNzIGFuZCBwcmlvcml0eQogICMgZXBvbGxfY3RsIC0gY29udHJvbCBpbnRlcmZhY2UgZm9yIGFuIGVwb2xsIGZpbGUgZGVzY3JpcHRvcgogICMgc3luYyAtIGNvbW1pdCBmaWxlc3lzdGVtIGNhY2hlcyB0byBkaXNrCiAgIyBzeW5jZnMgLSBjb21taXQgZmlsZXN5c3RlbSBjYWNoZXMgdG8gZGlzawogICMgc2V0c2lkIC0gY3JlYXRlcyBhIHNlc3Npb24gYW5kIHNldHMgdGhlIHByb2Nlc3MgZ3JvdXAgSUQKICAjIHNodXRkb3duIC0gc2h1dCBkb3duIHBhcnQgb2YgYSBmdWxsLWR1cGxleCBjb25uZWN0aW9uCiAgIyBnZXRzaWQgLSBnZXQgc2Vzc2lvbiBJRAogICMgZ2V0X3RocmVhZF9hcmVhIC0gbWFuaXB1bGF0ZSB0aHJlYWQtbG9jYWwgc3RvcmFnZSBpbmZvcm1hdGlvbgogICMgc2V0X3RocmVhZF9hcmVhIC0gbWFuaXB1bGF0ZSB0aHJlYWQtbG9jYWwgc3RvcmFnZSBpbmZvcm1hdGlvbgogICMgdGltZXJmZF9jcmVhdGUgLSB0aW1lcnMgdGhhdCBub3RpZnkgdmlhIGZpbGUgZGVzY3JpcHRvcnMKICAjIHRpbWVyZmRfc2V0dGltZSAtIHRpbWVycyB0aGF0IG5vdGlmeSB2aWEgZmlsZSBkZXNjcmlwdG9ycwogICMgdGltZXJmZF9nZXR0aW1lIC0gdGltZXJzIHRoYXQgbm90aWZ5IHZpYSBmaWxlIGRlc2NyaXB0b3JzCiAgIyBpb2N0bF9maWRlZHVwZXJhbmdlIC0gc2hhcmUgc29tZSB0aGUgZGF0YSBvZiBvbmUgZmlsZSB3aXRoIGFub3RoZXIgZmlsZQogICMgbmFtZV90b19oYW5kbGVfYXQgLSBvYnRhaW4gaGFuZGxlIGZvciBhIHBhdGhuYW1lIGFuZCBvcGVuIGZpbGUgdmlhIGEgaGFuZGxlCiAgIyBvcGVuX2J5X2hhbmRsZV9hdCAtIG9idGFpbiBoYW5kbGUgZm9yIGEgcGF0aG5hbWUgYW5kIG9wZW4gZmlsZSB2aWEgYSBoYW5kbGUKICAjIGZ1dGV4IC0gZmFzdCB1c2VyLXNwYWNlIGxvY2tpbmcKICAjIGlvY3RsX25zIC0gaW9jdGwoKSBvcGVyYXRpb25zIGZvciBMaW51eCBuYW1lc3BhY2VzCiAgIyBwaWRmZF9zZW5kX3NpZ25hbCAtIHNlbmQgYSBzaWduYWwgdG8gYSBwcm9jZXNzIHNwZWNpZmllZCBieSBhIGZpbGUgZGVzY3JpcHRvcgogICMgY2xvbmUgLSBjcmVhdGUgYSBjaGlsZCBwcm9jZXNzCiAgIyBfX2Nsb25lMiAtIGNyZWF0ZSBhIGNoaWxkIHByb2Nlc3MKICAjIGNsb25lMyAtIGNyZWF0ZSBhIGNoaWxkIHByb2Nlc3MKICAjIHRpbWVzIC0gZ2V0IHByb2Nlc3MgdGltZXMKICAjIHN5c2luZm8gLSByZXR1cm4gc3lzdGVtIGluZm9ybWF0aW9uCiAgIyBpcGMgLSBTeXN0ZW0gViBJUEMgc3lzdGVtIGNhbGxzCiAgIyBldmVudGZkIC0gY3JlYXRlIGEgZmlsZSBkZXNjcmlwdG9yIGZvciBldmVudCBub3RpZmljYXRpb24KICAjIHdhaXQgLSB3YWl0IGZvciBwcm9jZXNzIHRvIGNoYW5nZSBzdGF0ZQogICMgd2FpdHBpZCAtIHdhaXQgZm9yIHByb2Nlc3MgdG8gY2hhbmdlIHN0YXRlCiAgIyB3YWl0aWQgLSB3YWl0IGZvciBwcm9jZXNzIHRvIGNoYW5nZSBzdGF0ZQogICMgZ2V0ZG9tYWlubmFtZSAtIGdldC9zZXQgTklTIGRvbWFpbiBuYW1lCiAgIyBpZGxlIC0gbWFrZSBwcm9jZXNzIDAgaWRsZQogICMgaW5vdGlmeV9hZGRfd2F0Y2ggLSBhZGQgYSB3YXRjaCB0byBhbiBpbml0aWFsaXplZCBpbm90aWZ5IGluc3RhbmNlCiAgIyBnZXRfbWVtcG9saWN5IC0gcmV0cmlldmUgTlVNQSBtZW1vcnkgcG9saWN5IGZvciBhIHRocmVhZAogICMgYnBmIC0gcGVyZm9ybSBhIGNvbW1hbmQgb24gYW4gZXh0ZW5kZWQgQlBGIG1hcCBvciBwcm9ncmFtCiAgIyBnZXRzb2Nrb3B0IC0gZ2V0IGFuZCBzZXQgb3B0aW9ucyBvbiBzb2NrZXRzCiAgIyBzZXRzb2Nrb3B0IC0gZ2V0IGFuZCBzZXQgb3B0aW9ucyBvbiBzb2NrZXRzCiAgIyBnZXRpdGltZXIgLSBnZXQgb3Igc2V0IHZhbHVlIG9mIGFuIGludGVydmFsIHRpbWVyCiAgIyBzZXRpdGltZXIgLSBnZXQgb3Igc2V0IHZhbHVlIG9mIGFuIGludGVydmFsIHRpbWVyCiAgIyBtZW1iYXJyaWVyIC0gaXNzdWUgbWVtb3J5IGJhcnJpZXJzIG9uIGEgc2V0IG9mIHRocmVhZHMKICAjIG1wcm90ZWN0IC0gc2V0IHByb3RlY3Rpb24gb24gYSByZWdpb24gb2YgbWVtb3J5CiAgIyBwa2V5X21wcm90ZWN0IC0gc2V0IHByb3RlY3Rpb24gb24gYSByZWdpb24gb2YgbWVtb3J5CiAgIyBnZXRjcHUgLSBkZXRlcm1pbmUgQ1BVIGFuZCBOVU1BIG5vZGUgb24gd2hpY2ggdGhlIGNhbGxpbmcgdGhyZWFkIGlzIHJ1bm5pbmcKICAjIGlvY3RsX2ZzbGFiZWwgLSBnZXQgb3Igc2V0IGEgZmlsZXN5c3RlbSBsYWJlbAogICMgbGlzdHhhdHRyIC0gbGlzdCBleHRlbmRlZCBhdHRyaWJ1dGUgbmFtZXMKICAjIGxsaXN0eGF0dHIgLSBsaXN0IGV4dGVuZGVkIGF0dHJpYnV0ZSBuYW1lcwogICMgZmxpc3R4YXR0ciAtIGxpc3QgZXh0ZW5kZWQgYXR0cmlidXRlIG5hbWVzCiAgIyBfbGxzZWVrIC0gcmVwb3NpdGlvbiByZWFkL3dyaXRlIGZpbGUgb2Zmc2V0CiAgIyBmY250bCAtIG1hbmlwdWxhdGUgZmlsZSBkZXNjcmlwdG9yCiAgIyB1c3RhdCAtIGdldCBmaWxlc3lzdGVtIHN0YXRpc3RpY3MKICAjIHNpZ25hbCAtIEFOU0kgQyBzaWduYWwgaGFuZGxpbmcKICAjIG5hbm9zbGVlcCAtIGhpZ2gtcmVzb2x1dGlvbiBzbGVlcAogICMgY29ubmVjdCAtIGluaXRpYXRlIGEgY29ubmVjdGlvbiBvbiBhIHNvY2tldAogICMgdm04Nm9sZCAtIGVudGVyIHZpcnR1YWwgODA4NiBtb2RlCiAgIyB2bTg2IC0gZW50ZXIgdmlydHVhbCA4MDg2IG1vZGUKICAjIGZhbm90aWZ5X2luaXQgLSBjcmVhdGUgYW5kIGluaXRpYWxpemUgZmFub3RpZnkgZ3JvdXAKICAjIG1pZ3JhdGVfcGFnZXMgLSBtb3ZlIGFsbCBwYWdlcyBpbiBhIHByb2Nlc3MgdG8gYW5vdGhlciBzZXQgb2Ygbm9kZXMKICAjIHJlc3RhcnRfc3lzY2FsbCAtIHJlc3RhcnQgYSBzeXN0ZW0gY2FsbCBhZnRlciBpbnRlcnJ1cHRpb24gYnkgYSBzdG9wIHNpZ25hbAogICMgY2xvc2UgLSBjbG9zZSBhIGZpbGUgZGVzY3JpcHRvcgogICMgbXNncmN2IC0gU3lzdGVtIFYgbWVzc2FnZSBxdWV1ZSBvcGVyYXRpb25zCiAgIyBtc2dzbmQgLSBTeXN0ZW0gViBtZXNzYWdlIHF1ZXVlIG9wZXJhdGlvbnMKICAjIHJlYWR2IC0gcmVhZCBvciB3cml0ZSBkYXRhIGludG8gbXVsdGlwbGUgYnVmZmVycwogICMgd3JpdGV2IC0gcmVhZCBvciB3cml0ZSBkYXRhIGludG8gbXVsdGlwbGUgYnVmZmVycwogICMgcHJlYWR2IC0gcmVhZCBvciB3cml0ZSBkYXRhIGludG8gbXVsdGlwbGUgYnVmZmVycwogICMgcHdyaXRldiAtIHJlYWQgb3Igd3JpdGUgZGF0YSBpbnRvIG11bHRpcGxlIGJ1ZmZlcnMKICAjIHByZWFkdjIgLSByZWFkIG9yIHdyaXRlIGRhdGEgaW50byBtdWx0aXBsZSBidWZmZXJzCiAgIyBwd3JpdGV2MiAtIHJlYWQgb3Igd3JpdGUgZGF0YSBpbnRvIG11bHRpcGxlIGJ1ZmZlcnMKICAjIHN5c2xvZyAtIHJlYWQgYW5kL29yIGNsZWFyIGtlcm5lbCBtZXNzYWdlIHJpbmcgYnVmZmVyOyBzZXQgY29uc29sZV9sb2dsZXZlbAogICMga2xvZ2N0bCAtIHJlYWQgYW5kL29yIGNsZWFyIGtlcm5lbCBtZXNzYWdlIHJpbmcgYnVmZmVyOyBzZXQgY29uc29sZV9sb2dsZXZlbAogICMgc2NoZWRfeWllbGQgLSB5aWVsZCB0aGUgcHJvY2Vzc29yCiAgIyB2aGFuZ3VwIC0gdmlydHVhbGx5IGhhbmd1cCB0aGUgY3VycmVudCB0ZXJtaW5hbAogICMgaW9jdGxfaWZsYWdzIC0gaW9jdGwoKSBvcGVyYXRpb25zIGZvciBpbm9kZSBmbGFncwogICMgc2dldG1hc2sgLSBtYW5pcHVsYXRpb24gb2Ygc2lnbmFsIG1hc2sgKG9ic29sZXRlKQogICMgc3NldG1hc2sgLSBtYW5pcHVsYXRpb24gb2Ygc2lnbmFsIG1hc2sgKG9ic29sZXRlKQogICMgc3luY19maWxlX3JhbmdlIC0gc3luYyBhIGZpbGUgc2VnbWVudCB3aXRoIGRpc2sKICAjIGNvcHlfZmlsZV9yYW5nZSAtIENvcHkgYSByYW5nZSBvZiBkYXRhIGZyb20gb25lIGZpbGUgdG8gYW5vdGhlcgogICMgc2lncGVuZGluZyAtIGV4YW1pbmUgcGVuZGluZyBzaWduYWxzCiAgIyBydF9zaWdwZW5kaW5nIC0gZXhhbWluZSBwZW5kaW5nIHNpZ25hbHMKICAjIGdldHVud2luZCAtIGNvcHkgdGhlIHVud2luZCBkYXRhIHRvIGNhbGxlcidzIGJ1ZmZlcgogICMgbXN5bmMgLSBzeW5jaHJvbml6ZSBhIGZpbGUgd2l0aCBhIG1lbW9yeSBtYXAKICAjIGdldF9yb2J1c3RfbGlzdCAtIGdldC9zZXQgbGlzdCBvZiByb2J1c3QgZnV0ZXhlcwogICMgc2V0X3JvYnVzdF9saXN0IC0gZ2V0L3NldCBsaXN0IG9mIHJvYnVzdCBmdXRleGVzCiAgIyBkdXAgLSBkdXBsaWNhdGUgYSBmaWxlIGRlc2NyaXB0b3IKICAjIGR1cDIgLSBkdXBsaWNhdGUgYSBmaWxlIGRlc2NyaXB0b3IKICAjIGR1cDMgLSBkdXBsaWNhdGUgYSBmaWxlIGRlc2NyaXB0b3IKICAjIHMzOTBfcGNpX21taW9fd3JpdGUgLSB0cmFuc2ZlciBkYXRhIHRvL2Zyb20gUENJIE1NSU8gbWVtb3J5IHBhZ2UKICAjIHMzOTBfcGNpX21taW9fcmVhZCAtIHRyYW5zZmVyIGRhdGEgdG8vZnJvbSBQQ0kgTU1JTyBtZW1vcnkgcGFnZQogICMgcGF1c2UgLSB3YWl0IGZvciBzaWduYWwKICAjIHN3YXBvbiAtIHN0YXJ0L3N0b3Agc3dhcHBpbmcgdG8gZmlsZS9kZXZpY2UKICAjIHN3YXBvZmYgLSBzdGFydC9zdG9wIHN3YXBwaW5nIHRvIGZpbGUvZGV2aWNlCgogICMgUmVjb3JkIHR5cGUgbm9ybWFsaXphdGlvbnMKICAjIFVzZWZ1bCBsaW5rczoKICAjIGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS90b3J2YWxkcy9saW51eC92NC4xNi9pbmNsdWRlL3VhcGkvbGludXgvYXVkaXQuaAogICMgaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2xpbnV4LWF1ZGl0L2F1ZGl0LXVzZXJzcGFjZS80ZDkzMzMwMWIxODM1Y2FmYTA4YjllOWVmNzA1YzhmYjZjOTZjYjYyL2xpYi9saWJhdWRpdC5oCiAgIyBodHRwczovL3d3dy5lbGFzdGljLmNvL2d1aWRlL2VuL2Vjcy9jdXJyZW50L2Vjcy1hbGxvd2VkLXZhbHVlcy1ldmVudC1jYXRlZ29yeS5odG1sCgogICMgSUFNIHJlbGF0ZWQgZXZlbnRzCgogICMgQVVESVRfQUNDVF9MT0NLIC0gVXNlcidzIGFjY291bnQgbG9ja2VkIGJ5IGFkbWluCiAgLSByZWNvcmRfdHlwZXM6IEFDQ1RfTE9DSwogICAgYWN0aW9uOiBsb2NrZWQtYWNjb3VudAogICAgZWNzOgogICAgICA8PDogKmVjcy1pYW0KICAgICAgdHlwZToKICAgICAgICAtIHVzZXIKICAgICAgICAtIGluZm8KICAjIEFVRElUX0FDQ1RfVU5MT0NLIC0gVXNlcidzIGFjY291bnQgdW5sb2NrZWQgYnkgYWRtaW4KICAtIHJlY29yZF90eXBlczogQUNDVF9VTkxPQ0sKICAgIGFjdGlvbjogdW5sb2NrZWQtYWNjb3VudAogICAgZWNzOgogICAgICA8PDogKmVjcy1pYW0KICAgICAgdHlwZToKICAgICAgICAtIHVzZXIKICAgICAgICAtIGluZm8KICAjIEFVRElUX0FERF9HUk9VUCAtIEdyb3VwIGFjY291bnQgYWRkZWQKICAtIHJlY29yZF90eXBlczogQUREX0dST1VQCiAgICBhY3Rpb246IGFkZGVkLWdyb3VwLWFjY291bnQtdG8KICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogW2lkLCBhY2N0XQogICAgICB3aGF0OiBhY2NvdW50CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWlhbQogICAgICA8PDogKmVjcy1ncm91cC1tb2RpZmljYXRpb24tbWFwcGluZ3MKICAgICAgdHlwZToKICAgICAgICAtIGdyb3VwCiAgICAgICAgLSBjcmVhdGlvbgoKICAjIEFVRElUX0FERF9VU0VSIC0gVXNlciBhY2NvdW50IGFkZGVkCiAgLSByZWNvcmRfdHlwZXM6IEFERF9VU0VSCiAgICBhY3Rpb246IGFkZGVkLXVzZXItYWNjb3VudAogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBbaWQsIGFjY3RdCiAgICAgIHdoYXQ6IGFjY291bnQKICAgIGVjczoKICAgICAgPDw6ICplY3MtaWFtCiAgICAgIDw8OiAqZWNzLXVzZXItbW9kaWZpY2F0aW9uLW1hcHBpbmdzCiAgICAgIHR5cGU6CiAgICAgICAgLSB1c2VyCiAgICAgICAgLSBjcmVhdGlvbgogICMgQVVESVRfREVMX0dST1VQIC0gR3JvdXAgYWNjb3VudCBkZWxldGVkCiAgLSByZWNvcmRfdHlwZXM6IERFTF9HUk9VUAogICAgYWN0aW9uOiBkZWxldGVkLWdyb3VwLWFjY291bnQtZnJvbQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBbaWQsIGFjY3RdCiAgICAgIHdoYXQ6IGFjY291bnQKICAgIGVjczoKICAgICAgPDw6ICplY3MtaWFtCiAgICAgIDw8OiAqZWNzLWdyb3VwLW1vZGlmaWNhdGlvbi1tYXBwaW5ncwogICAgICB0eXBlOgogICAgICAgIC0gZ3JvdXAKICAgICAgICAtIGRlbGV0aW9uCiAgIyBBVURJVF9ERUxfVVNFUiAtIFVzZXIgYWNjb3VudCBkZWxldGVkCiAgLSByZWNvcmRfdHlwZXM6IERFTF9VU0VSCiAgICBhY3Rpb246IGRlbGV0ZWQtdXNlci1hY2NvdW50CiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IFtpZCwgYWNjdF0KICAgICAgd2hhdDogYWNjb3VudAogICAgZWNzOgogICAgICA8PDogKmVjcy1pYW0KICAgICAgPDw6ICplY3MtdXNlci1tb2RpZmljYXRpb24tbWFwcGluZ3MKICAgICAgdHlwZToKICAgICAgICAtIHVzZXIKICAgICAgICAtIGRlbGV0aW9uCiAgIyBBVURJVF9HUlBfTUdNVCAtIEdyb3VwIGFjY291bnQgYXR0ciB3YXMgbW9kaWZpZWQKICAtIHJlY29yZF90eXBlczogR1JQX01HTVQKICAgIGFjdGlvbjogbW9kaWZpZWQtZ3JvdXAtYWNjb3VudAogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBbaWQsIGFjY3RdCiAgICAgIHdoYXQ6IGFjY291bnQKICAgIGVjczoKICAgICAgPDw6ICplY3MtaWFtCiAgICAgIHR5cGU6CiAgICAgICAgLSBncm91cAogICAgICAgIC0gY2hhbmdlCiAgICAgIG1hcHBpbmdzOgogICAgICAgIC0gZnJvbTogc3ViamVjdC5wcmltYXJ5CiAgICAgICAgICB0bzogdXNlcgogICAgICAgIC0gZnJvbTogc3ViamVjdC5zZWNvbmRhcnkKICAgICAgICAgIHRvOiBncm91cC50YXJnZXQKICAgICAgICAtIGZyb206IHVpZC51aWQKICAgICAgICAgIHRvOiB1c2VyLmVmZmVjdGl2ZQogICMgQVVESVRfUk9MRV9BU1NJR04gLSBBZG1pbiBhc3NpZ25lZCB1c2VyIHRvIHJvbGUKICAtIHJlY29yZF90eXBlczogUk9MRV9BU1NJR04KICAgIGFjdGlvbjogYXNzaWduZWQtdXNlci1yb2xlLXRvCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IFtpZCwgYWNjdF0KICAgICAgd2hhdDogYWNjb3VudAogICAgZWNzOgogICAgICA8PDogKmVjcy1pYW0KICAgICAgdHlwZToKICAgICAgICAtIHVzZXIKICAgICAgICAtIGNoYW5nZQogICMgQVVESVRfUk9MRV9NT0RJRlkgLSBBZG1pbiBtb2RpZmllZCBhIHJvbGUKICAtIHJlY29yZF90eXBlczogUk9MRV9NT0RJRlkKICAgIGFjdGlvbjogbW9kaWZpZWQtcm9sZQogICAgZWNzOgogICAgICA8PDogKmVjcy1pYW0KICAgICAgdHlwZToKICAgICAgICAtIGNoYW5nZQogICMgQVVESVRfUk9MRV9SRU1PVkUgLSBBZG1pbiByZW1vdmVkIHVzZXIgZnJvbSByb2xlCiAgLSByZWNvcmRfdHlwZXM6IFJPTEVfUkVNT1ZFCiAgICBhY3Rpb246IHJlbW92ZWQtdXNlci1yb2xlLWZyb20KICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogW2lkLCBhY2N0XQogICAgICB3aGF0OiBhY2NvdW50CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWlhbQogICAgICB0eXBlOgogICAgICAgIC0gdXNlcgogICAgICAgIC0gY2hhbmdlCiAgIyBBVURJVF9VU0VSX01HTVQgLSBVc2VyIGFjY3QgYXR0cmlidXRlIGNoYW5nZQogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogVVNFUl9NR01UCiAgICBhY3Rpb246IG1vZGlmaWVkLXVzZXItYWNjb3VudAogICAgZWNzOgogICAgICA8PDogKmVjcy1pYW0KICAgICAgdHlwZToKICAgICAgICAtIHVzZXIKICAgICAgICAtIGNoYW5nZQogICAgICBtYXBwaW5nczoKICAgICAgICAtIGZyb206IHN1YmplY3QucHJpbWFyeQogICAgICAgICAgdG86IHVzZXIKICAgICAgICAtIGZyb206IHN1YmplY3Quc2Vjb25kYXJ5CiAgICAgICAgICB0bzogdXNlci50YXJnZXQKICAgICAgICAtIGZyb206IHVpZC51aWQKICAgICAgICAgIHRvOiB1c2VyLmVmZmVjdGl2ZQogICMgQVVESVRfVVNFUl9DSEFVVEhUT0sgLSBVc2VyIGFjY3QgcGFzc3dvcmQgb3IgcGluIGNoYW5nZWQKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IFVTRVJfQ0hBVVRIVE9LCiAgICBhY3Rpb246IGNoYW5nZWQtcGFzc3dvcmQKICAgIGVjczoKICAgICAgPDw6ICplY3MtaWFtCiAgICAgIHR5cGU6CiAgICAgICAgLSB1c2VyCiAgICAgICAgLSBjaGFuZ2UKICAgICAgbWFwcGluZ3M6CiAgICAgICAgLSBmcm9tOiBzdWJqZWN0LnByaW1hcnkKICAgICAgICAgIHRvOiB1c2VyCiAgICAgICAgLSBmcm9tOiB1aWQudWlkCiAgICAgICAgICB0bzogdXNlci5lZmZlY3RpdmUKICAgICAgICAtIGZyb206IHN1YmplY3Quc2Vjb25kYXJ5CiAgICAgICAgICB0bzogdXNlci50YXJnZXQKCiAgIyBBVURJVF9HUlBfQ0hBVVRIVE9LIC0gR3JvdXAgYWNjdCBwYXNzd29yZCBvciBwaW4gY2hhbmdlZAogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogR1JQX0NIQVVUSFRPSwogICAgYWN0aW9uOiBjaGFuZ2VkLWdyb3VwLXBhc3N3b3JkCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGFjY3QKICAgICAgd2hhdDogdXNlci1zZXNzaW9uCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWlhbQogICAgICB0eXBlOgogICAgICAgIC0gZ3JvdXAKICAgICAgICAtIGNoYW5nZQogICAgICBtYXBwaW5nczoKICAgICAgICAtIGZyb206IHN1YmplY3QucHJpbWFyeQogICAgICAgICAgdG86IHVzZXIKICAgICAgICAtIGZyb206IHVpZC51aWQKICAgICAgICAgIHRvOiB1c2VyLmVmZmVjdGl2ZQogICAgICAgIC0gZnJvbTogc3ViamVjdC5zZWNvbmRhcnkKICAgICAgICAgIHRvOiBncm91cC50YXJnZXQKCiAgIyBBdXRoZW50aWNhdGlvbiByZWxhdGVkIGV2ZW50cwoKICAjIEFVRElUX0NSRURfQUNRIC0gVXNlciBjcmVkZW50aWFsIGFjcXVpcmVkCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBDUkVEX0FDUQogICAgYWN0aW9uOiBhY3F1aXJlZC1jcmVkZW50aWFscwogICAgZWNzOiAqZWNzLWF1dGgKICAjIEFVRElUX0NSRURfRElTUCAtIFVzZXIgY3JlZGVudGlhbCBkaXNwb3NlZAogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogQ1JFRF9ESVNQCiAgICBhY3Rpb246IGRpc3Bvc2VkLWNyZWRlbnRpYWxzCiAgICBlY3M6ICplY3MtYXV0aAogICMgQVVESVRfQ1JFRF9SRUZSIC0gVXNlciBjcmVkZW50aWFsIHJlZnJlc2hlZAogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogQ1JFRF9SRUZSCiAgICBhY3Rpb246IHJlZnJlc2hlZC1jcmVkZW50aWFscwogICAgZWNzOiAqZWNzLWF1dGgKICAjIEFVRElUX0dSUF9BVVRIIC0gQXV0aGVudGljYXRpb24gZm9yIGdyb3VwIHBhc3N3b3JkCiAgLSByZWNvcmRfdHlwZXM6IEdSUF9BVVRICiAgICBhY3Rpb246IGF1dGhlbnRpY2F0ZWQtdG8tZ3JvdXAKICAgIGVjczogKmVjcy1hdXRoCiAgIyBBVURJVF9MT0dJTiAtIERlZmluZSB0aGUgbG9naW4gaWQgYW5kIGluZm9ybWF0aW9uCiAgLSByZWNvcmRfdHlwZXM6IExPR0lOCiAgICBhY3Rpb246IGNoYW5nZWQtbG9naW4taWQtdG8KICAgIHN1YmplY3Q6CiAgICAgIHByaW1hcnk6IFtvbGRfYXVpZCwgb2xkLWF1aWRdCiAgICAgIHNlY29uZGFyeTogdWlkCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IFtuZXctYXVpZCwgbmV3X2F1aWQsIGF1aWRdCiAgICAgIHdoYXQ6IHVzZXItc2Vzc2lvbgogICAgZWNzOgogICAgICA8PDogKmVjcy1hdXRoCiAgICAgIHR5cGU6IHN0YXJ0CiAgICAgIG1hcHBpbmdzOgogICAgICAgIC0gZnJvbTogc3ViamVjdC5wcmltYXJ5CiAgICAgICAgICB0bzogdXNlcgogICAgICAgIC0gZnJvbTogb2JqZWN0LnByaW1hcnkKICAgICAgICAgIHRvOiB1c2VyLmVmZmVjdGl2ZQogICMgQVVESVRfVVNFUl9BQ0NUIC0gVXNlciBzeXN0ZW0gYWNjZXNzIGF1dGhvcml6YXRpb24KICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IFVTRVJfQUNDVAogICAgYWN0aW9uOiB3YXMtYXV0aG9yaXplZAogICAgZWNzOiAqZWNzLWF1dGgKICAjIEFVRElUX1VTRVJfQVVUSCAtIFVzZXIgc3lzdGVtIGFjY2VzcyBhdXRoZW50aWNhdGlvbgogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogVVNFUl9BVVRICiAgICBhY3Rpb246IGF1dGhlbnRpY2F0ZWQKICAgIGVjczogKmVjcy1hdXRoCiAgIyBBVURJVF9VU0VSX0VORCAtIFVzZXIgc2Vzc2lvbiBlbmQKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IFVTRVJfRU5ECiAgICBhY3Rpb246IGVuZGVkLXNlc3Npb24KICAgIGVjczogKmVjcy1hdXRoCiAgIyBBVURJVF9VU0VSX0VSUiAtIFVzZXIgYWNjdCBzdGF0ZSBlcnJvcgogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogVVNFUl9FUlIKICAgIGFjdGlvbjogZXJyb3IKICAgIHNvdXJjZV9pcDogW2FkZHJdCiAgICBlY3M6ICplY3MtYXV0aAogICMgQVVESVRfVVNFUl9MT0dJTiAtIFVzZXIgaGFzIGxvZ2dlZCBpbgogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogVVNFUl9MT0dJTgogICAgYWN0aW9uOiBsb2dnZWQtaW4KICAgIHNvdXJjZV9pcDogW2FkZHJdCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWF1dGgKICAgICAgdHlwZTogc3RhcnQKICAjIEFVRElUX1VTRVJfTE9HT1VUIC0gVXNlciBoYXMgbG9nZ2VkIG91dAogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogVVNFUl9MT0dPVVQKICAgIGFjdGlvbjogbG9nZ2VkLW91dAogICAgZWNzOgogICAgICA8PDogKmVjcy1hdXRoCiAgICAgIHR5cGU6IGVuZAogICMgQVVESVRfVVNFUl9ST0xFX0NIQU5HRSAtIFVzZXIgY2hhbmdlZCB0byBhIG5ldyByb2xlCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBVU0VSX1JPTEVfQ0hBTkdFCiAgICBhY3Rpb246IGNoYW5nZWQtcm9sZS10bwogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBzZWxlY3RlZC1jb250ZXh0CiAgICAgIHdoYXQ6IHVzZXItc2Vzc2lvbgogICMgQVVESVRfVVNFUl9TVEFSVCAtIFVzZXIgc2Vzc2lvbiBzdGFydAogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogVVNFUl9TVEFSVAogICAgYWN0aW9uOiBzdGFydGVkLXNlc3Npb24KICAgIHNvdXJjZV9pcDogW2FkZHJdCiAgICBlY3M6ICplY3MtYXV0aAoKICAjIEhvc3QgdmlydHVhbGl6YXRpb24gZXZlbnRzCgogICMgQVVESVRfVklSVF9DT05UUk9MIC0gU3RhcnQsIFBhdXNlLCBTdG9wIFZNCiAgLSByZWNvcmRfdHlwZXM6IFZJUlRfQ09OVFJPTAogICAgYWN0aW9uOiBpc3N1ZWQtdm0tY29udHJvbAogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBvcAogICAgICBzZWNvbmRhcnk6IHZtCiAgICAgIHdoYXQ6IHZpcnR1YWwtbWFjaGluZQogICAgZWNzOiAqZWNzLWhvc3QKICAjIEFVRElUX1ZJUlRfQ1JFQVRFIC0gQ3JlYXRpb24gb2YgZ3Vlc3QgaW1hZ2UKICAtIHJlY29yZF90eXBlczogVklSVF9DUkVBVEUKICAgIGFjdGlvbjogY3JlYXRlZC12bS1pbWFnZQogICAgZWNzOiAqZWNzLWhvc3QKICAjIEFVRElUX1ZJUlRfREVTVFJPWSAtIERlc3RydWN0aW9uIG9mIGd1ZXN0IGltYWdlCiAgLSByZWNvcmRfdHlwZXM6IFZJUlRfREVTVFJPWQogICAgYWN0aW9uOiBkZWxldGVkLXZtLWltYWdlCiAgICBlY3M6ICplY3MtaG9zdAogICMgQVVESVRfVklSVF9JTlRFR1JJVFlfQ0hFQ0sgLSBHdWVzdCBpbnRlZ3JpdHkgcmVzdWx0cwogIC0gcmVjb3JkX3R5cGVzOiBWSVJUX0lOVEVHUklUWV9DSEVDSwogICAgYWN0aW9uOiBjaGVja2VkLWludGVncml0eS1vZgogICAgZWNzOiAqZWNzLWhvc3QKICAjIEFVRElUX1ZJUlRfTUFDSElORV9JRCAtIEJpbmRpbmcgb2YgbGFiZWwgdG8gVk0KICAtIHJlY29yZF90eXBlczogVklSVF9NQUNISU5FX0lECiAgICBhY3Rpb246IGFzc2lnbmVkLXZtLWlkCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IHZtCiAgICAgIHdoYXQ6IHZpcnR1YWwtbWFjaGluZQogICAgZWNzOiAqZWNzLWhvc3QKICAjIEFVRElUX1ZJUlRfTUlHUkFURV9JTiAtIEluYm91bmQgZ3Vlc3QgbWlncmF0aW9uIGluZm8KICAtIHJlY29yZF90eXBlczogVklSVF9NSUdSQVRFX0lOCiAgICBhY3Rpb246IG1pZ3JhdGVkLXZtLWZyb20KICAgIGVjczogKmVjcy1ob3N0CiAgIyBBVURJVF9WSVJUX01JR1JBVEVfT1VUIC0gT3V0Ym91bmQgZ3Vlc3QgbWlncmF0aW9uIGluZm8KICAtIHJlY29yZF90eXBlczogVklSVF9NSUdSQVRFX09VVAogICAgYWN0aW9uOiBtaWdyYXRlZC12bS10bwogICAgZWNzOiAqZWNzLWhvc3QKICAjIEFVRElUX1ZJUlRfUkVTT1VSQ0UgLSBSZXNvdXJjZSBhc3NpZ25tZW50CiAgLSByZWNvcmRfdHlwZXM6IFZJUlRfUkVTT1VSQ0UKICAgIGFjdGlvbjogYXNzaWduZWQtdm0tcmVzb3VyY2UKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogcmVzcmMKICAgICAgc2Vjb25kYXJ5OiB2bQogICAgICB3aGF0OiB2aXJ0dWFsLW1hY2hpbmUKICAgIGVjczogKmVjcy1ob3N0CgogICMgVXNlcnNwYWNlIHByb2Nlc3MgZXZlbnRzCgogICMgQVVESVRfQ0hHUlBfSUQgLSBVc2VyIHNwYWNlIGdyb3VwIElEIGNoYW5nZWQKICAtIHJlY29yZF90eXBlczogQ0hHUlBfSUQKICAgIGFjdGlvbjogY2hhbmdlZC1ncm91cAogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IGNoYW5nZQogICMgQVVESVRfQ0hVU0VSX0lEIC0gQ2hhbmdlZCB1c2VyIElEIHN1cHBsZW1lbnRhbCBkYXRhCiAgLSByZWNvcmRfdHlwZXM6IENIVVNFUl9JRAogICAgYWN0aW9uOiBjaGFuZ2VkLXVzZXItaWQKICAgIGVjczoKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBjaGFuZ2UKICAjIEFVRElUX1RFU1QgLSBVc2VkIGZvciB0ZXN0IHN1Y2Nlc3MgbWVzc2FnZXMKICAtIHJlY29yZF90eXBlczogVEVTVAogICAgYWN0aW9uOiBzZW50LXRlc3QKICAgIGVjczogKmVjcy1wcm9jZXNzCiAgIyBBVURJVF9UUlVTVEVEX0FQUCAtIFRydXN0ZWQgYXBwIG1zZyAtIGZyZWVzdHlsZSB0ZXh0CiAgLSByZWNvcmRfdHlwZXM6IFRSVVNURURfQVBQCiAgICBhY3Rpb246IHVua25vd24KICAgIGVjczogKmVjcy1wcm9jZXNzCiAgIyBBVURJVF9VU0VSX0NNRCAtIFVzZXIgc2hlbGwgY29tbWFuZCBhbmQgYXJncwogIC0gcmVjb3JkX3R5cGVzOiBVU0VSX0NNRAogICAgYWN0aW9uOiByYW4tY29tbWFuZAogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBjbWQKICAgICAgd2hhdDogcHJvY2VzcwogICAgZGVzY3JpcHRpb246ID4KICAgICAgVGhlc2UgbWVzc2FnZXMgYXJlIGZyb20gdXNlci1zcGFjZSBhcHBzLCBsaWtlIHN1ZG8sIHRoYXQgbG9nIGNvbW1hbmRzCiAgICAgIGJlaW5nIHJ1biBieSBhIHVzZXIuIFRoZSB1aWQgY29udGFpbmVkIGluIHRoZXNlIG1lc3NhZ2VzIGlzIHVzZXIncyBVSUQgYXQKICAgICAgdGhlIHRpbWUgdGhlIGNvbW1hbmQgd2FzIHJ1bi4gSXQgaXMgbm90IHRoZSAidGFyZ2V0IiBVSUQgdXNlZCB0byBydW4gdGhlCiAgICAgIGNvbW1hbmQsIHdoaWNoIGlzIG5vcm1hbGx5IHJvb3QuCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogc3RhcnQKCiAgIyBIb3N0LWxldmVsIGV2ZW50cwoKICAjIEFVRElUX1NZU1RFTV9CT09UIC0gU3lzdGVtIGJvb3QKICAtIHJlY29yZF90eXBlczogU1lTVEVNX0JPT1QKICAgIGFjdGlvbjogYm9vdGVkLXN5c3RlbQogICAgb2JqZWN0OgogICAgICB3aGF0OiBzeXN0ZW0KICAgIGVjczoKICAgICAgPDw6ICplY3MtaG9zdAogICAgICB0eXBlOiBzdGFydAogICMgQVVESVRfU1lTVEVNX1JVTkxFVkVMIC0gU3lzdGVtIHJ1bmxldmVsIGNoYW5nZQogIC0gcmVjb3JkX3R5cGVzOiBTWVNURU1fUlVOTEVWRUwKICAgIGFjdGlvbjogY2hhbmdlZC10by1ydW5sZXZlbAogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBuZXctbGV2ZWwKICAgICAgd2hhdDogc3lzdGVtCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWhvc3QKICAgICAgdHlwZTogY2hhbmdlCiAgIyBBVURJVF9TWVNURU1fU0hVVERPV04gLSBTeXN0ZW0gc2h1dGRvd24KICAtIHJlY29yZF90eXBlczogU1lTVEVNX1NIVVRET1dOCiAgICBhY3Rpb246IHNodXRkb3duLXN5c3RlbQogICAgb2JqZWN0OgogICAgICB3aGF0OiBzeXN0ZW0KICAgIGVjczoKICAgICAgPDw6ICplY3MtaG9zdAogICAgICB0eXBlOiBlbmQKCiAgIyBTZXJ2aWNlLWxldmVsIGV2ZW50cwoKICAjIEFVRElUX1NFUlZJQ0VfU1RBUlQgLSBTZXJ2aWNlIChkYWVtb24pIHN0YXJ0CiAgLSByZWNvcmRfdHlwZXM6IFNFUlZJQ0VfU1RBUlQKICAgIGFjdGlvbjogc3RhcnRlZC1zZXJ2aWNlCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IHVuaXQKICAgICAgd2hhdDogc2VydmljZQogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IHN0YXJ0CiAgIyBBVURJVF9TRVJWSUNFX1NUT1AgLSBTZXJ2aWNlIChkYWVtb24pIHN0b3AKICAtIHJlY29yZF90eXBlczogU0VSVklDRV9TVE9QCiAgICBhY3Rpb246IHN0b3BwZWQtc2VydmljZQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiB1bml0CiAgICAgIHdoYXQ6IHNlcnZpY2UKICAgIGVjczoKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBzdG9wCgogICMgQXVkaXRkIGludGVybmFsIGV2ZW50cwoKICAjIEFVRElUX0NPTkZJR19DSEFOR0UgLSBBdWRpdCBzeXN0ZW0gY29uZmlndXJhdGlvbiBjaGFuZ2UKICAtIHJlY29yZF90eXBlczogQ09ORklHX0NIQU5HRQogICAgYWN0aW9uOiBjaGFuZ2VkLWF1ZGl0LWNvbmZpZ3VyYXRpb24KICAgIG9iamVjdDoKICAgICAgcHJpbWFyeToKICAgICAgICBbb3AsIGtleSwgYXVkaXRfZW5hYmxlZCwgYXVkaXRfcGlkLCBhdWRpdF9iYWNrbG9nX2xpbWl0LCBhdWRpdF9mYWlsdXJlXQogICAgICB3aGF0OiBhdWRpdC1jb25maWcKICAgIGVjczoKICAgICAgY2F0ZWdvcnk6IFtwcm9jZXNzLCBjb25maWd1cmF0aW9uXQogICAgICB0eXBlOiBjaGFuZ2UKICAjIEFVRElUX0RBRU1PTl9BQk9SVCAtIERhZW1vbiBlcnJvciBzdG9wIHJlY29yZAogIC0gcmVjb3JkX3R5cGVzOiBEQUVNT05fQUJPUlQKICAgIGFjdGlvbjogYWJvcnRlZC1hdWRpdGQtc3RhcnR1cAogICAgb2JqZWN0OgogICAgICB3aGF0OiBzZXJ2aWNlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogc3RvcAogICMgQVVESVRfREFFTU9OX0FDQ0VQVCAtIEF1ZGl0ZCBhY2NlcHRlZCByZW1vdGUgY29ubmVjdGlvbgogIC0gcmVjb3JkX3R5cGVzOiBEQUVNT05fQUNDRVBUCiAgICBhY3Rpb246IHJlbW90ZS1hdWRpdC1jb25uZWN0ZWQKICAgIG9iamVjdDoKICAgICAgd2hhdDogc2VydmljZQogICAgZWNzOgogICAgICA8PDogKmVjcy1uZXR3b3JrCiAgICAgIHR5cGU6CiAgICAgICAgLSBjb25uZWN0aW9uCiAgICAgICAgLSBzdGFydAogICMgQVVESVRfREFFTU9OX0NMT1NFIC0gQXVkaXRkIGNsb3NlZCByZW1vdGUgY29ubmVjdGlvbgogIC0gcmVjb3JkX3R5cGVzOiBEQUVNT05fQ0xPU0UKICAgIGFjdGlvbjogcmVtb3RlLWF1ZGl0LWRpc2Nvbm5lY3RlZAogICAgb2JqZWN0OgogICAgICB3aGF0OiBzZXJ2aWNlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLW5ldHdvcmsKICAgICAgdHlwZToKICAgICAgICAtIGNvbm5lY3Rpb24KICAgICAgICAtIHN0YXJ0CiAgIyBBVURJVF9EQUVNT05fQ09ORklHIC0gRGFlbW9uIGNvbmZpZyBjaGFuZ2UKICAtIHJlY29yZF90eXBlczogREFFTU9OX0NPTkZJRwogICAgYWN0aW9uOiBjaGFuZ2VkLWF1ZGl0ZC1jb25maWd1cmF0aW9uCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNlcnZpY2UKICAgIGVjczoKICAgICAgY2F0ZWdvcnk6IFtwcm9jZXNzLCBjb25maWd1cmF0aW9uXQogICAgICB0eXBlOiBjaGFuZ2UKICAjIEFVRElUX0RBRU1PTl9FTkQgLSBEYWVtb24gbm9ybWFsIHN0b3AgcmVjb3JkCiAgLSByZWNvcmRfdHlwZXM6IERBRU1PTl9FTkQKICAgIGFjdGlvbjogc2h1dGRvd24tYXVkaXQKICAgIG9iamVjdDoKICAgICAgd2hhdDogc2VydmljZQogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IHN0b3AKICAjIEFVRElUX0RBRU1PTl9FUlIgLSBBdWRpdGQgaW50ZXJuYWwgZXJyb3IKICAtIHJlY29yZF90eXBlczogREFFTU9OX0VSUgogICAgYWN0aW9uOiBhdWRpdC1lcnJvcgogICAgb2JqZWN0OgogICAgICB3aGF0OiBzZXJ2aWNlCiAgICBlY3M6ICplY3MtcHJvY2VzcwogICMgQVVESVRfREFFTU9OX1JFQ09ORklHIC0gQXVkaXRkIHNob3VsZCByZWNvbmZpZ3VyZQogIC0gcmVjb3JkX3R5cGVzOiBEQUVNT05fUkVDT05GSUcKICAgIGFjdGlvbjogcmVjb25maWd1cmVkLWF1ZGl0ZAogICAgb2JqZWN0OgogICAgICB3aGF0OiBzZXJ2aWNlCiAgICBlY3M6CiAgICAgIGNhdGVnb3J5OiBbcHJvY2VzcywgY29uZmlndXJhdGlvbl0KICAgICAgdHlwZTogaW5mbwogICMgQVVESVRfREFFTU9OX1JFU1VNRSAtIEF1ZGl0ZCBzaG91bGQgcmVzdW1lIGxvZ2dpbmcKICAtIHJlY29yZF90eXBlczogREFFTU9OX1JFU1VNRQogICAgYWN0aW9uOiByZXN1bWVkLWF1ZGl0LWxvZ2dpbmcKICAgIG9iamVjdDoKICAgICAgd2hhdDogc2VydmljZQogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IGNoYW5nZQogICMgQVVESVRfREFFTU9OX1JPVEFURSAtIEF1ZGl0ZCBzaG91bGQgcm90YXRlIGxvZ3MKICAtIHJlY29yZF90eXBlczogREFFTU9OX1JPVEFURQogICAgYWN0aW9uOiByb3RhdGVkLWF1ZGl0LWxvZ3MKICAgIG9iamVjdDoKICAgICAgd2hhdDogc2VydmljZQogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IGNoYW5nZQogICMgQVVESVRfREFFTU9OX1NUQVJUIC0gRGFlbW9uIHN0YXJ0dXAgcmVjb3JkCiAgLSByZWNvcmRfdHlwZXM6IERBRU1PTl9TVEFSVAogICAgYWN0aW9uOiBzdGFydGVkLWF1ZGl0CiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNlcnZpY2UKICAgIGVjczoKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBzdGFydAogICMgQVVESVRfS0VSTkVMIC0gQXN5bmNocm9ub3VzIGF1ZGl0IHJlY29yZC4gTk9UIEEgUkVRVUVTVC4KICAtIHJlY29yZF90eXBlczogS0VSTkVMCiAgICBhY3Rpb246IGluaXRpYWxpemVkLWF1ZGl0LXN1YnN5c3RlbQogICAgZWNzOiAqZWNzLXByb2Nlc3MKCiAgIyBDb25maWd1cmF0aW9uIGNoYW5nZSBldmVudHMKCiAgIyBBVURJVF9VU1lTX0NPTkZJRyAtIFVzZXIgc3BhY2Ugc3lzdGVtIGNvbmZpZyBjaGFuZ2UKICAtIHJlY29yZF90eXBlczogVVNZU19DT05GSUcKICAgIGFjdGlvbjogY2hhbmdlZC1jb25maWd1cmF0aW9uCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IG9wCiAgICAgIHdoYXQ6IHN5c3RlbQogICAgZWNzOgogICAgICBjYXRlZ29yeTogY29uZmlndXJhdGlvbgogICAgICB0eXBlOiBjaGFuZ2UKICAjIEFVRElUX05FVEZJTFRFUl9DRkcgLSBOZXRmaWx0ZXIgY2hhaW4gbW9kaWZpY2F0aW9ucwogIC0gcmVjb3JkX3R5cGVzOiBORVRGSUxURVJfQ0ZHCiAgICBhY3Rpb246IGxvYWRlZC1maXJld2FsbC1ydWxlLXRvCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IHRhYmxlCiAgICAgIHdoYXQ6IGZpcmV3YWxsCiAgICBlY3M6CiAgICAgIGNhdGVnb3J5OiBjb25maWd1cmF0aW9uCiAgICAgIHR5cGU6IGNoYW5nZQogICMgQVVESVRfRkVBVFVSRV9DSEFOR0UgLSBhdWRpdCBsb2cgbGlzdGluZyBmZWF0dXJlIGNoYW5nZXMKICAtIHJlY29yZF90eXBlczogRkVBVFVSRV9DSEFOR0UKICAgIGFjdGlvbjogY2hhbmdlZC1hdWRpdC1mZWF0dXJlCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGZlYXR1cmUKICAgICAgd2hhdDogc3lzdGVtCiAgICBlY3M6CiAgICAgIGNhdGVnb3J5OiBjb25maWd1cmF0aW9uCiAgICAgIHR5cGU6IGNoYW5nZQogICMgQVVESVRfUkVQTEFDRSAtIFJlcGxhY2UgYXVkaXRkIGlmIHRoaXMgcGFja2V0IHVuYW5zd2VyZAoKICAjIFRUWSBldmVudHMKCiAgLSByZWNvcmRfdHlwZXM6CiAgICAgICMgQVVESVRfVFRZIC0gSW5wdXQgb24gYW4gYWRtaW5pc3RyYXRpdmUgVFRZCiAgICAgIC0gVFRZCiAgICAgICMgQVVESVRfVVNFUl9UVFkgLSBOb24tSUNBTk9OIFRUWSBpbnB1dCBtZWFuaW5nCiAgICAgIC0gVVNFUl9UVFkKICAgIGFjdGlvbjogdHlwZWQKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogZGF0YQogICAgICB3aGF0OiBrZXlzdHJva2VzCiAgICBob3c6IFtjb21tLCBleGVdCgogICMgUG9saWN5IGV2ZW50cwoKICAjIEFVRElUX0FWQyAtIFNFIExpbnV4IGF2YyBkZW5pYWwgb3IgZ3JhbnQgKHNlbGludXgpCiAgLSByZWNvcmRfdHlwZXM6IEFWQwogICAgYWN0aW9uOiB2aW9sYXRlZC1zZWxpbnV4LXBvbGljeQogICAgc3ViamVjdDoKICAgICAgcHJpbWFyeTogc2NvbnRleHQKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogdGNvbnRleHQKICAgICAgc2Vjb25kYXJ5OiB0Y2xhc3MKICAgIGhhc19maWVsZHM6CiAgICAgIC0gc2VyZXN1bHQKICAjIEFVRElUX0FWQyAtIFNFIExpbnV4IGF2YyBkZW5pYWwgb3IgZ3JhbnQgKGFwcGFybW9yKQogIC0gcmVjb3JkX3R5cGVzOiBBVkMKICAgIGFjdGlvbjogdmlvbGF0ZWQtYXBwYXJtb3ItcG9saWN5CiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IG9wZXJhdGlvbgogICAgICBzZWNvbmRhcnk6IFtyZXF1ZXN0ZWRfbWFzaywgZGVuaWVkX21hc2ssIGNhcG5hbWVdCiAgICAgIHdoYXQ6IHBvbGljeQogICAgaGFzX2ZpZWxkczoKICAgICAgLSBhcHBhcm1vcgogICMgQVVESVRfRlNfUkVMQUJFTCAtIEZpbGVzeXN0ZW0gcmVsYWJlbGVkCiAgLSByZWNvcmRfdHlwZXM6IEZTX1JFTEFCRUwKICAgIGFjdGlvbjogcmVsYWJlbGVkLWZpbGVzeXN0ZW0KICAgIG9iamVjdDoKICAgICAgd2hhdDogbWFjLWNvbmZpZwogICMgQVVESVRfTEFCRUxfTEVWRUxfQ0hBTkdFIC0gT2JqZWN0J3MgbGV2ZWwgd2FzIGNoYW5nZWQKICAtIHJlY29yZF90eXBlczogTEFCRUxfTEVWRUxfQ0hBTkdFCiAgICBhY3Rpb246IG1vZGlmaWVkLWxldmVsLW9mCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IHByaW50ZXIKICAgICAgd2hhdDogcHJpbnRlcgogICMgQVVESVRfTEFCRUxfT1ZFUlJJREUgLSBBZG1pbiBpcyBvdmVycmlkaW5nIGEgbGFiZWwKICAtIHJlY29yZF90eXBlczogTEFCRUxfT1ZFUlJJREUKICAgIGFjdGlvbjogb3ZlcnJvZGUtbGFiZWwtb2YKICAgIG9iamVjdDoKICAgICAgd2hhdDogbWFjLWNvbmZpZwogICMgQVVESVRfTUFDX0NIRUNLIC0gVXNlciBzcGFjZSBNQUMgZGVjaXNpb24gcmVzdWx0cwogIC0gcmVjb3JkX3R5cGVzOiBNQUNfQ0hFQ0sKICAgIGFjdGlvbjogbWFjLXBlcm1pc3Npb24KICAjIEFVRElUX01BQ19DT05GSUdfQ0hBTkdFIC0gQ2hhbmdlcyB0byBib29sZWFucwogIC0gcmVjb3JkX3R5cGVzOiBNQUNfQ09ORklHX0NIQU5HRQogICAgYWN0aW9uOiBjaGFuZ2VkLXNlbGludXgtYm9vbGVhbgogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBib29sCiAgICAgIHdoYXQ6IG1hYy1jb25maWcKICAgIGVjczoKICAgICAgY2F0ZWdvcnk6IGNvbmZpZ3VyYXRpb24KICAgICAgdHlwZTogY2hhbmdlCiAgIyBBVURJVF9NQUNfUE9MSUNZX0xPQUQgLSBQb2xpY3kgZmlsZSBsb2FkCiAgLSByZWNvcmRfdHlwZXM6IE1BQ19QT0xJQ1lfTE9BRAogICAgYWN0aW9uOiBsb2FkZWQtc2VsaW51eC1wb2xpY3kKICAgIG9iamVjdDoKICAgICAgd2hhdDogbWFjLWNvbmZpZwogICAgZWNzOgogICAgICBjYXRlZ29yeTogY29uZmlndXJhdGlvbgogICAgICB0eXBlOiBhY2Nlc3MKICAjIEFVRElUX01BQ19TVEFUVVMgLSBDaGFuZ2VkIGVuZm9yY2luZyxwZXJtaXNzaXZlLG9mZgogIC0gcmVjb3JkX3R5cGVzOiBNQUNfU1RBVFVTCiAgICBhY3Rpb246IGNoYW5nZWQtc2VsaW51eC1lbmZvcmNlbWVudAogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBlbmZvcmNpbmcKICAgICAgd2hhdDogbWFjLWNvbmZpZwogICAgZWNzOgogICAgICBjYXRlZ29yeTogY29uZmlndXJhdGlvbgogICAgICB0eXBlOiBjaGFuZ2UKICAjIEFVRElUX1VTRVJfQVZDIC0gVXNlciBzcGFjZSBhdmMgbWVzc2FnZQogIC0gcmVjb3JkX3R5cGVzOiBVU0VSX0FWQwogICAgYWN0aW9uOiBhY2Nlc3MtcGVybWlzc2lvbgogICMgQVVESVRfVVNFUl9NQUNfQ09ORklHX0NIQU5HRSAtIENoYW5nZSBtYWRlIHRvIE1BQyBwb2xpY3kKICAtIHJlY29yZF90eXBlczogVVNFUl9NQUNfQ09ORklHX0NIQU5HRQogICAgYWN0aW9uOiBjaGFuZ2VkLW1hYy1jb25maWd1cmF0aW9uCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IG1hYy1jb25maWcKICAgIGVjczoKICAgICAgY2F0ZWdvcnk6IGNvbmZpZ3VyYXRpb24KICAgICAgdHlwZTogY2hhbmdlCiAgIyBBVURJVF9VU0VSX01BQ19QT0xJQ1lfTE9BRCAtIFVzZXJzcGMgZGFlbW9uIGxvYWRlZCBwb2xpYwogIC0gcmVjb3JkX3R5cGVzOiBVU0VSX01BQ19QT0xJQ1lfTE9BRAogICAgYWN0aW9uOiBsb2FkZWQtbWFjLXBvbGljeQogICAgb2JqZWN0OgogICAgICB3aGF0OiBtYWMtY29uZmlnCiAgICBlY3M6CiAgICAgIGNhdGVnb3J5OiBjb25maWd1cmF0aW9uCiAgICAgIHR5cGU6IGFjY2VzcwogICMgQVVESVRfVVNFUl9TRUxJTlVYX0VSUiAtIFNFIExpbnV4IHVzZXIgc3BhY2UgZXJyb3IKICAtIHJlY29yZF90eXBlczogVVNFUl9TRUxJTlVYX0VSUgogICAgYWN0aW9uOiBhY2Nlc3MtZXJyb3IKICAjIEFVRElUX1NFQ0NPTVAgLSBTZWN1cmUgQ29tcHV0aW5nIGV2ZW50CiAgLSByZWNvcmRfdHlwZXM6IFNFQ0NPTVAKICAgIGFjdGlvbjogdmlvbGF0ZWQtc2VjY29tcC1wb2xpY3kKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogc3lzY2FsbAogICAgICB3aGF0OiBwcm9jZXNzCiAgIyBBVURJVF9TRUxJTlVYX0VSUiAtIEludGVybmFsIFNFIExpbnV4IEVycm9ycwogIC0gYWN0aW9uOiBjYXVzZWQtbWFjLXBvbGljeS1lcnJvcgogICAgb2JqZWN0OgogICAgICB3aGF0OiBzeXN0ZW0KICAgIHJlY29yZF90eXBlczogU0VMSU5VWF9FUlIKICAjIEFVRElUX0FQUEFSTU9SX0FMTE9XRUQKICAjIEFVRElUX0FQUEFSTU9SX0RFTklFRAogICMgQVVESVRfQVBQQVJNT1JfRVJST1IKICAjIEFVRElUX0FWQ19QQVRIIC0gZGVudHJ5LCB2ZnNtb3VudCBwYWlyIGZyb20gYXZjCiAgIyBBVURJVF9BUFBBUk1PUl9BVURJVAogICMgQVVESVRfQVBQQVJNT1JfSElOVAogICMgQVVESVRfQVBQQVJNT1JfU1RBVFVTCiAgIyBBVURJVF9BUFBBUk1PUl9FUlJPUgogICMgQVVESVRfREVWX0FMTE9DIC0gRGV2aWNlIHdhcyBhbGxvY2F0ZWQKICAjIEFVRElUX0RFVl9ERUFMTE9DIC0gRGV2aWNlIHdhcyBkZWFsbG9jYXRlZAogICMgQVVESVRfTUFDX1VOTEJMX0FMTE9XIC0gTmV0TGFiZWw6IGFsbG93IHVubGFiZWxlZCB0cmFmZmljCiAgIyBBVURJVF9NQUNfQ0lQU09WNF9BREQgLSBOZXRMYWJlbDogYWRkIENJUFNPdjQgRE9JIGVudHJ5CiAgIyBBVURJVF9NQUNfQ0lQU09WNF9ERUwgLSBOZXRMYWJlbDogZGVsIENJUFNPdjQgRE9JIGVudHJ5CiAgIyBBVURJVF9NQUNfTUFQX0FERCAtIE5ldExhYmVsOiBhZGQgTFNNIGRvbWFpbiBtYXBwaW5nCiAgIyBBVURJVF9NQUNfTUFQX0RFTCAtIE5ldExhYmVsOiBkZWwgTFNNIGRvbWFpbiBtYXBwaW5nCiAgIyBBVURJVF9NQUNfSVBTRUNfRVZFTlQgLSBBdWRpdCBhbiBJUFNlYyBldmVudAogICMgQVVESVRfTUFDX1VOTEJMX1NUQ0FERCAtIE5ldExhYmVsOiBhZGQgYSBzdGF0aWMgbGFiZWwKICAjIEFVRElUX01BQ19VTkxCTF9TVENERUwgLSBOZXRMYWJlbDogZGVsIGEgc3RhdGljIGxhYmVsCiAgIyBBVURJVF9NQUNfQ0FMSVBTT19BREQgLSBOZXRMYWJlbDogYWRkIENBTElQU08gRE9JIGVudHJ5CiAgIyBBVURJVF9NQUNfQ0FMSVBTT19ERUwgLSBOZXRMYWJlbDogZGVsIENBTElQU08gRE9JIGVudHJ5CiAgIyBBVURJVF9VU0VSX0xBQkVMRURfRVhQT1JUIC0gT2JqZWN0IGV4cG9ydGVkIHdpdGggbGFiZWwKICAjIEFVRElUX1VTRVJfVU5MQUJFTEVEX0VYUE9SVCAtIE9iamVjdCBleHBvcnRlZCB3aXRob3V0IGxhYmVsCgogICMgQ3J5cHRvIGV2ZW50cwoKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICBhY3Rpb246IG5lZ290aWF0ZWQtY3J5cHRvLWtleQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBmcAogICAgICBzZWNvbmRhcnk6IFthZGRyLCBob3N0bmFtZV0KICAgICAgd2hhdDogdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IENSWVBUT19LRVlfVVNFUgogICAgc291cmNlX2lwOiBbYWRkcl0KICAgIGVjczogKmVjcy1wcm9jZXNzCiAgLSBhY3Rpb246IGNyeXB0by1vZmZpY2VyLWxvZ2dlZC1pbgogICAgcmVjb3JkX3R5cGVzOiBDUllQVE9fTE9HSU4KICAtIGFjdGlvbjogY3J5cHRvLW9mZmljZXItbG9nZ2VkLW91dAogICAgcmVjb3JkX3R5cGVzOiBDUllQVE9fTE9HT1VUCiAgICBlY3M6ICplY3MtcHJvY2VzcwogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIGFjdGlvbjogc3RhcnRlZC1jcnlwdG8tc2Vzc2lvbgogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBhZGRyCiAgICAgIHNlY29uZGFyeTogW3Jwb3J0XQogICAgcmVjb3JkX3R5cGVzOiBDUllQVE9fU0VTU0lPTgogICAgc291cmNlX2lwOiBbYWRkcl0KICAgIGVjczogKmVjcy1wcm9jZXNzCiAgLSBhY3Rpb246IGFjY2Vzcy1yZXN1bHQKICAgIHJlY29yZF90eXBlczogREFDX0NIRUNLCgogICMgQW5vbWFsaWVzCgogICMgQVVESVRfQU5PTV9BQkVORCAtIFByb2Nlc3MgZW5kZWQgYWJub3JtYWxseQogIC0gcmVjb3JkX3R5cGVzOiBBTk9NX0FCRU5ECiAgICBhY3Rpb246IGNyYXNoZWQtcHJvZ3JhbQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBbY29tbSwgZXhlXQogICAgICBzZWNvbmRhcnk6IHBpZAogICAgICB3aGF0OiBwcm9jZXNzCiAgICBob3c6IHNpZwogICAgZWNzOgogICAgICAjIGNvbnNpZGVyIGFkZGluZyBhbiBhbm9tYWx5IGNhdGVnb3J5IHdoZW4gd2UgaW50cm9kdWNlCiAgICAgICMgdG8gRUNTCiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogZW5kCiAgIyBBVURJVF9BTk9NX0VYRUMgLSBFeGVjdXRpb24gb2YgZmlsZQogIC0gcmVjb3JkX3R5cGVzOiBBTk9NX0VYRUMKICAgIGFjdGlvbjogYXR0ZW1wdGVkLWV4ZWN1dGlvbi1vZi1mb3JiaWRkZW4tcHJvZ3JhbQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBjbWQKICAgICAgd2hhdDogcHJvY2VzcwogICAgaG93OiB0ZXJtaW5hbAogICAgZWNzOgogICAgICAjIGNvbnNpZGVyIGFkZGluZyBhbiBhbm9tYWx5IGNhdGVnb3J5IHdoZW4gd2UgaW50cm9kdWNlCiAgICAgICMgdG8gRUNTCiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogc3RhcnQKICAjIEFVRElUX0FOT01fTElOSyAtIFN1c3BpY2lvdXMgdXNlIG9mIGZpbGUgbGlua3MKICAtIHJlY29yZF90eXBlczogQU5PTV9MSU5LCiAgICBhY3Rpb246IHVzZWQtc3VzcGljaW91cy1saW5rCiAgIyBBVURJVF9BTk9NX0xPR0lOX0ZBSUxVUkVTIC0gRmFpbGVkIGxvZ2luIGxpbWl0IHJlYWNoZWQKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IEFOT01fTE9HSU5fRkFJTFVSRVMKICAgIGFjdGlvbjogZmFpbGVkLWxvZy1pbi10b28tbWFueS10aW1lcy10bwogICMgQVVESVRfQU5PTV9MT0dJTl9MT0NBVElPTiAtIExvZ2luIGZyb20gZm9yYmlkZGVuIGxvY2F0aW9uCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBBTk9NX0xPR0lOX0xPQ0FUSU9OCiAgICBhY3Rpb246IGF0dGVtcHRlZC1sb2ctaW4tZnJvbS11bnVzdWFsLXBsYWNlLXRvCiAgIyBBVURJVF9BTk9NX0xPR0lOX1NFU1NJT05TIC0gTWF4IGNvbmN1cnJlbnQgc2Vzc2lvbnMgcmVhY2hlZAogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogQU5PTV9MT0dJTl9TRVNTSU9OUwogICAgYWN0aW9uOiBvcGVuZWQtdG9vLW1hbnktc2Vzc2lvbnMtdG8KICAjIEFVRElUX0FOT01fTE9HSU5fVElNRSAtIExvZ2luIGF0dGVtcHRlZCBhdCBiYWQgdGltZQogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogQU5PTV9MT0dJTl9USU1FCiAgICBhY3Rpb246IGF0dGVtcHRlZC1sb2ctaW4tZHVyaW5nLXVudXN1YWwtaG91ci10bwogICMgQVVESVRfQU5PTV9QUk9NSVNDVU9VUyAtIERldmljZSBjaGFuZ2VkIHByb21pc2N1b3VzIG1vZGUKICAtIHJlY29yZF90eXBlczogQU5PTV9QUk9NSVNDVU9VUwogICAgYWN0aW9uOiBjaGFuZ2VkLXByb21pc2N1b3VzLW1vZGUtb24tZGV2aWNlICMgQ291bGQgYmUgZW50ZXJlZCBvciBleGl0ZWQgYmFzZWQgb24gcHJvbSBmaWVsZC4KICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogZGV2CiAgICAgIHdoYXQ6IG5ldHdvcmstZGV2aWNlCiAgIyBBVURJVF9BTk9NX1JCQUNfSU5URUdSSVRZX0ZBSUwgLSBSQkFDIGZpbGUgaW50ZWdyaXR5IGZhaWx1cmUKICAtIHJlY29yZF90eXBlczogQU5PTV9SQkFDX0lOVEVHUklUWV9GQUlMCiAgICBhY3Rpb246IHRlc3RlZC1maWxlLXN5c3RlbS1pbnRlZ3JpdHktb2YKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogaG9zdG5hbWUKICAgICAgd2hhdDogZmlsZXN5c3RlbQogICMgQVVESVRfQU5PTV9MT0dJTl9BQ0NUIC0gTG9naW4gYXR0ZW1wdGVkIHRvIHdhdGNoZWQgYWNjdAogICMgQVVESVRfQU5PTV9NQVhfREFDIC0gTWF4IERBQyBmYWlsdXJlcyByZWFjaGVkCiAgIyBBVURJVF9BTk9NX01BWF9NQUMgLSBNYXggTUFDIGZhaWx1cmVzIHJlYWNoZWQKICAjIEFVRElUX0FOT01fQU1UVV9GQUlMIC0gQU1UVSBmYWlsdXJlCiAgIyBBVURJVF9BTk9NX1JCQUNfRkFJTCAtIFJCQUMgc2VsZiB0ZXN0IGZhaWx1cmUKICAjIEFVRElUX0FOT01fQ1JZUFRPX0ZBSUwgLSBDcnlwdG8gc3lzdGVtIHRlc3QgZmFpbHVyZQogICMgQVVESVRfQU5PTV9NS19FWEUgLSBNYWtlIGFuIGV4ZWN1dGFibGUKICAjIEFVRElUX0FOT01fQUNDRVNTX0ZTIC0gQWNjZXNzIG9mIGZpbGUgb3IgZGlyCiAgIyBBVURJVF9BTk9NX0FERF9BQ0NUIC0gQWRkaW5nIGFuIGFjY3QKICAjIEFVRElUX0FOT01fREVMX0FDQ1QgLSBEZWxldGluZyBhbiBhY2N0CiAgIyBBVURJVF9BTk9NX01PRF9BQ0NUIC0gQ2hhbmdpbmcgYW4gYWNjdAogICMgQVVESVRfQU5PTV9ST09UX1RSQU5TIC0gVXNlciBiZWNhbWUgcm9vdAogICMgQVVESVRfQU5PTV9MT0dJTl9TRVJWSUNFIC0gU2VydmljZSBhY2N0IGF0dGVtcHRlZCBsb2dpbgoKICAjIEFub21hbHkgcmVzcG9uc2VzCgogICMgQVVESVRfUkVTUF9BTk9NQUxZIC0gQW5vbWFseSBub3QgcmVhY3RlZCB0bwogICMgQVVESVRfUkVTUF9BTEVSVCAtIEFsZXJ0IGVtYWlsIHdhcyBzZW50CiAgIyBBVURJVF9SRVNQX0tJTExfUFJPQyAtIEtpbGwgcHJvZ3JhbQogICMgQVVESVRfUkVTUF9URVJNX0FDQ0VTUyAtIFRlcm1pbmF0ZSBzZXNzaW9uCiAgIyBBVURJVF9SRVNQX0FDQ1RfUkVNT1RFIC0gQWNjdCBsb2NrZWQgZnJvbSByZW1vdGUgYWNjZXNzCiAgIyBBVURJVF9SRVNQX0FDQ1RfTE9DS19USU1FRCAtIFVzZXIgYWNjdCBsb2NrZWQgZm9yIHRpbWUKICAjIEFVRElUX1JFU1BfQUNDVF9VTkxPQ0tfVElNRUQgLSBVc2VyIGFjY3QgdW5sb2NrZWQgZnJvbSB0aW1lCiAgIyBBVURJVF9SRVNQX0FDQ1RfTE9DSyAtIFVzZXIgYWNjdCB3YXMgbG9ja2VkCiAgIyBBVURJVF9SRVNQX1RFUk1fTE9DSyAtIFRlcm1pbmFsIHdhcyBsb2NrZWQKICAjIEFVRElUX1JFU1BfU0VCT09MIC0gU2V0IGFuIFNFIExpbnV4IGJvb2xlYW4KICAjIEFVRElUX1JFU1BfRVhFQyAtIEV4ZWN1dGUgYSBzY3JpcHQKICAjIEFVRElUX1JFU1BfU0lOR0xFIC0gR28gdG8gc2luZ2xlIHVzZXIgbW9kZQogICMgQVVESVRfUkVTUF9IQUxUIC0gdGFrZSB0aGUgc3lzdGVtIGRvd24KICAjIEFVRElUX1JFU1BfT1JJR0lOX0JMT0NLIC0gQWRkcmVzcyBibG9ja2VkIGJ5IGlwdGFibGVzCiAgIyBBVURJVF9SRVNQX09SSUdJTl9CTE9DS19USU1FRCAtIEFkZHJlc3MgYmxvY2tlZCBmb3IgdGltZQoKICAjIEF1ZGl0IHJ1bGUgZXZlbnRzCgogICMgQVVESVRfU1lTQ0FMTCAtIFN5c2NhbGwgZXZlbnQKICAjIEFVRElUX1BBVEggLSBGaWxlbmFtZSBwYXRoIGluZm9ybWF0aW9uCiAgIyBBVURJVF9JUEMgLSBJUEMgcmVjb3JkCiAgIyBBVURJVF9TT0NLRVRDQUxMIC0gc3lzX3NvY2tldGNhbGwgYXJndW1lbnRzCiAgIyBBVURJVF9TT0NLQUREUiAtIHNvY2thZGRyIGNvcGllZCBhcyBzeXNjYWxsIGFyZwogICMgQVVESVRfQ1dEIC0gQ3VycmVudCB3b3JraW5nIGRpcmVjdG9yeQogICMgQVVESVRfRVhFQ1ZFIC0gZXhlY3ZlIGFyZ3VtZW50cwogICMgQVVESVRfSVBDX1NFVF9QRVJNIC0gSVBDIG5ldyBwZXJtaXNzaW9ucyByZWNvcmQgdHlwZQogICMgQVVESVRfTVFfT1BFTiAtIFBPU0lYIE1RIG9wZW4gcmVjb3JkIHR5cGUKICAjIEFVRElUX01RX1NFTkRSRUNWLSBQT1NJWCBNUSBzZW5kL3JlY2VpdmUgcmVjb3JkIHR5cGUKICAjIEFVRElUX01RX05PVElGWSAtIFBPU0lYIE1RIG5vdGlmeSByZWNvcmQgdHlwZQogICMgQVVESVRfTVFfR0VUU0VUQVRUUiAtIFBPU0lYIE1RIGdldC9zZXQgYXR0cmlidXRlIHJlY29yZCB0eXBlCiAgIyBBVURJVF9GRF9QQUlSIC0gYXVkaXQgcmVjb3JkIGZvciBwaXBlL3NvY2tldHBhaXIKICAjIEFVRElUX09CSl9QSUQgLSBwdHJhY2UgdGFyZ2V0CiAgIyBBVURJVF9CUFJNX0ZDQVBTIC0gSW5mb3JtYXRpb24gYWJvdXQgZmNhcHMgaW5jcmVhc2luZyBwZXJtcwogICMgQVVESVRfQ0FQU0VUIC0gUmVjb3JkIHNob3dpbmcgYXJndW1lbnQgdG8gc3lzX2NhcHNldAogICMgQVVESVRfTU1BUCAtIFJlY29yZCBzaG93aW5nIGRlc2NyaXB0b3IgYW5kIGZsYWdzIGluIG1tYXAKICAjIEFVRElUX05FVEZJTFRFUl9QS1QgLSBQYWNrZXRzIHRyYXZlcnNpbmcgbmV0ZmlsdGVyIGNoYWlucwoKICAjIEludGVncml0eSBjaGVja3MKCiAgIyBBVURJVF9JTlRFR1JJVFlfREFUQSAtIERhdGEgaW50ZWdyaXR5IHZlcmlmaWNhdGlvbgogICMgQVVESVRfSU5URUdSSVRZX01FVEFEQVRBIC0gTWV0YWRhdGEgaW50ZWdyaXR5IHZlcmlmaWNhdGlvbgogICMgQVVESVRfSU5URUdSSVRZX1NUQVRVUyAtIEludGVncml0eSBlbmFibGUgc3RhdHVzCiAgIyBBVURJVF9JTlRFR1JJVFlfSEFTSCAtIEludGVncml0eSBIQVNIIHR5cGUKICAjIEFVRElUX0lOVEVHUklUWV9QQ1IgLSBQQ1IgaW52YWxpZGF0aW9uIG1zZ3MKICAjIEFVRElUX0lOVEVHUklUWV9SVUxFIC0gUG9saWN5IHJ1bGUKCiAgIyBWYXJpb3VzCgogICMgQVVESVRfVVNFUiAtIE1lc3NhZ2UgZnJvbSB1c2Vyc3BhY2UgLS0gZGVwcmVjYXRlZAogIC0gcmVjb3JkX3R5cGVzOiBVU0VSCiAgICBhY3Rpb246IHNlbnQtbWVzc2FnZQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBhZGRyCg==") assets["normalizationData"] = value } From bb3682b564d78914fa80ef9d51c64c19d0ad16d3 Mon Sep 17 00:00:00 2001 From: Adrian Serrano Date: Sun, 24 Jan 2021 12:03:38 +0100 Subject: [PATCH 06/15] Fix ecs struct encoding and update README samples --- README.md | 51 +++++++++++++++++++++++++++++++++++------- aucoalesce/coalesce.go | 8 +++---- 2 files changed, 47 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 77e460f..b986abe 100644 --- a/README.md +++ b/README.md @@ -83,7 +83,7 @@ result: success session: "4" summary: actor: - primary: "1000" + primary: vagrant secondary: root action: acquired-credentials object: @@ -95,6 +95,7 @@ user: auid: "1000" uid: "0" names: + auid: vagrant uid: root selinux: category: c0.c1023 @@ -116,6 +117,18 @@ ecs: - authentication type: - info + user: + name: vagrant + id: "1000" + effective: + name: root + id: "0" + target: {} + changes: {} + group: + effective: {} + target: {} + changes: {} --- timestamp: 2016-12-07T02:22:14.303Z @@ -126,7 +139,7 @@ result: success session: "4" summary: actor: - primary: "1000" + primary: vagrant secondary: root action: started-session object: @@ -138,6 +151,7 @@ user: auid: "1000" uid: "0" names: + auid: vagrant uid: root selinux: category: c0.c1023 @@ -159,6 +173,18 @@ ecs: - authentication type: - info + user: + name: vagrant + id: "1000" + effective: + name: root + id: "0" + target: {} + changes: {} + group: + effective: {} + target: {} + changes: {} --- timestamp: 2016-12-07T02:22:14.304Z @@ -169,7 +195,7 @@ result: success session: "4" summary: actor: - primary: "1000" + primary: vagrant secondary: root action: executed object: @@ -188,12 +214,13 @@ user: suid: "0" uid: "0" names: - egid: wheel + auid: vagrant + egid: root euid: root - fsgid: wheel + fsgid: root fsuid: root - gid: wheel - sgid: wheel + gid: root + sgid: root suid: root uid: root selinux: @@ -218,7 +245,7 @@ file: uid: "0" gid: "0" owner: root - group: wheel + group: root selinux: domain: su_exec_t level: s0 @@ -267,6 +294,14 @@ ecs: - process type: - start + user: + effective: {} + target: {} + changes: {} + group: + effective: {} + target: {} + changes: {} ``` ## ECS compatibility diff --git a/aucoalesce/coalesce.go b/aucoalesce/coalesce.go index 8d89757..db90225 100644 --- a/aucoalesce/coalesce.go +++ b/aucoalesce/coalesce.go @@ -47,10 +47,10 @@ type ECSEntityData struct { } type ECSEntity struct { - ECSEntityData - Effective ECSEntityData `json:"effective" yaml:"effective"` - Target ECSEntityData `json:"target" yaml:"target"` - Changes ECSEntityData `json:"changes" yaml:"changes"` + ECSEntityData `json:",inline" yaml:",inline"` + Effective ECSEntityData `json:"effective" yaml:"effective"` + Target ECSEntityData `json:"target" yaml:"target"` + Changes ECSEntityData `json:"changes" yaml:"changes"` } type ECSFields struct { From 897c3d4e5ea0fd3b81159f1117c3012bbec4f2f1 Mon Sep 17 00:00:00 2001 From: Adrian Serrano Date: Sun, 24 Jan 2021 12:05:03 +0100 Subject: [PATCH 07/15] Update ECS reference in README to v1.8 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b986abe..784ae5b 100644 --- a/README.md +++ b/README.md @@ -306,4 +306,4 @@ ecs: ## ECS compatibility -This currently provides [Elastic Common Schema (ECS) 1.5](https://www.elastic.co/guide/en/ecs/current/index.html) categorization support for some of the more prominent or meaningful auditd events and syscalls. +This currently provides [Elastic Common Schema (ECS) 1.8](https://www.elastic.co/guide/en/ecs/current/index.html) categorization support for some of the more prominent or meaningful auditd events and syscalls. From 2b8c647a31be36e2d3c3b409b7f6af983840e7bf Mon Sep 17 00:00:00 2001 From: Adrian Serrano Date: Sun, 24 Jan 2021 12:22:12 +0100 Subject: [PATCH 08/15] Add changelog entry --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d3b9174..46aafb2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,8 @@ This project adheres to [Semantic Versioning](http://semver.org/). ### Added +- Add user and group mapping for ECS 1.8 compatibility [#86](https://github.com/elastic/go-libaudit/pull/86) + ### Changed ### Removed From e5c1ed2bfa8260484ff19dae45e7b15cb797f8f4 Mon Sep 17 00:00:00 2001 From: Adrian Serrano Date: Mon, 25 Jan 2021 11:15:13 +0100 Subject: [PATCH 09/15] Update test files --- aucoalesce/testdata/rhel-7-linux-3.10.0.json.golden | 8 ++++---- aucoalesce/testdata/ubuntu-16.10-linux-4.8.0.json.golden | 2 +- aucoalesce/testdata/ubuntu-17.04-linux-4.10.0.json.golden | 8 ++++---- auparse/testdata/audit-rhel7.log.golden | 2 +- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/aucoalesce/testdata/rhel-7-linux-3.10.0.json.golden b/aucoalesce/testdata/rhel-7-linux-3.10.0.json.golden index a29eae4..e534bde 100644 --- a/aucoalesce/testdata/rhel-7-linux-3.10.0.json.golden +++ b/aucoalesce/testdata/rhel-7-linux-3.10.0.json.golden @@ -282,7 +282,7 @@ "session": "1", "summary": { "actor": { - "primary": "4294967295", + "primary": "unset", "secondary": "0" }, "action": "changed-login-id-to", @@ -294,7 +294,7 @@ "user": { "ids": { "auid": "1000", - "old-auid": "4294967295", + "old-auid": "unset", "uid": "0" }, "selinux": { @@ -321,7 +321,7 @@ ] }, "user": { - "id": "4294967295", + "id": "unset", "effective": { "id": "0" }, @@ -396,7 +396,7 @@ ] }, "user": { - "name": "unset", + "id": "unset", "effective": { "name": "root" }, diff --git a/aucoalesce/testdata/ubuntu-16.10-linux-4.8.0.json.golden b/aucoalesce/testdata/ubuntu-16.10-linux-4.8.0.json.golden index 598c222..1eeb563 100644 --- a/aucoalesce/testdata/ubuntu-16.10-linux-4.8.0.json.golden +++ b/aucoalesce/testdata/ubuntu-16.10-linux-4.8.0.json.golden @@ -556,7 +556,7 @@ ] }, "user": { - "name": "unset", + "id": "unset", "effective": { "name": "(invalid user)" }, diff --git a/aucoalesce/testdata/ubuntu-17.04-linux-4.10.0.json.golden b/aucoalesce/testdata/ubuntu-17.04-linux-4.10.0.json.golden index 139cffe..a065c0f 100644 --- a/aucoalesce/testdata/ubuntu-17.04-linux-4.10.0.json.golden +++ b/aucoalesce/testdata/ubuntu-17.04-linux-4.10.0.json.golden @@ -45,7 +45,7 @@ ] }, "user": { - "name": "unset", + "id": "unset", "effective": { "name": "root" }, @@ -289,7 +289,7 @@ ] }, "user": { - "name": "unset", + "id": "unset", "effective": { "name": "root" }, @@ -611,7 +611,7 @@ ] }, "user": { - "name": "unset", + "id": "unset", "effective": { "id": "0" }, @@ -679,7 +679,7 @@ ] }, "user": { - "name": "unset", + "id": "unset", "effective": { "name": "(invalid user)" }, diff --git a/auparse/testdata/audit-rhel7.log.golden b/auparse/testdata/audit-rhel7.log.golden index 1b05d82..c0d640a 100644 --- a/auparse/testdata/audit-rhel7.log.golden +++ b/auparse/testdata/audit-rhel7.log.golden @@ -306,7 +306,7 @@ "raw_msg": "audit(1481077043.057:414): pid=1298 uid=0 subj=system_u:system_r:sshd_t:s0-s0:c0.c1023 old-auid=4294967295 auid=1000 old-ses=4294967295 ses=1 res=1", "data": { "auid": "1000", - "old-auid": "4294967295", + "old-auid": "unset", "old-ses": "4294967295", "pid": "1298", "result": "success", From 61b4ffa4c2fae9d5f60ec887cec81f006d25fdda Mon Sep 17 00:00:00 2001 From: Adrian Serrano Date: Mon, 25 Jan 2021 12:29:10 +0100 Subject: [PATCH 10/15] Support ECS `session` category --- aucoalesce/normalizations.yaml | 17 +++++++++++++++-- .../testdata/rhel-7-linux-3.10.0.json.golden | 2 +- .../ubuntu-16.10-linux-4.8.0.json.golden | 8 ++++---- .../ubuntu-17.04-linux-4.10.0.json.golden | 8 ++++---- aucoalesce/znormalize_data.go | 2 +- 5 files changed, 25 insertions(+), 12 deletions(-) diff --git a/aucoalesce/normalizations.yaml b/aucoalesce/normalizations.yaml index cdb6a96..d64a79c 100644 --- a/aucoalesce/normalizations.yaml +++ b/aucoalesce/normalizations.yaml @@ -46,6 +46,15 @@ macros: - from: subject.secondary to: user.effective + - &ecs-session + category: session + type: info + mappings: + - from: subject.primary + to: user + - from: subject.secondary + to: user.effective + - &ecs-host category: host type: info @@ -1063,7 +1072,9 @@ normalizations: - <<: *macro-user-session record_types: USER_END action: ended-session - ecs: *ecs-auth + ecs: + <<: *ecs-session + type: end # AUDIT_USER_ERR - User acct state error - <<: *macro-user-session record_types: USER_ERR @@ -1097,7 +1108,9 @@ normalizations: record_types: USER_START action: started-session source_ip: [addr] - ecs: *ecs-auth + ecs: + <<: *ecs-session + type: start # Host virtualization events diff --git a/aucoalesce/testdata/rhel-7-linux-3.10.0.json.golden b/aucoalesce/testdata/rhel-7-linux-3.10.0.json.golden index e534bde..ead9bf8 100644 --- a/aucoalesce/testdata/rhel-7-linux-3.10.0.json.golden +++ b/aucoalesce/testdata/rhel-7-linux-3.10.0.json.golden @@ -323,7 +323,7 @@ "user": { "id": "unset", "effective": { - "id": "0" + "id": "1000" }, "target": {}, "changes": {} diff --git a/aucoalesce/testdata/ubuntu-16.10-linux-4.8.0.json.golden b/aucoalesce/testdata/ubuntu-16.10-linux-4.8.0.json.golden index 1eeb563..fc97282 100644 --- a/aucoalesce/testdata/ubuntu-16.10-linux-4.8.0.json.golden +++ b/aucoalesce/testdata/ubuntu-16.10-linux-4.8.0.json.golden @@ -478,10 +478,10 @@ "ecs": { "event": { "category": [ - "authentication" + "session" ], "type": [ - "info" + "end" ] }, "user": { @@ -687,10 +687,10 @@ "ecs": { "event": { "category": [ - "authentication" + "session" ], "type": [ - "info" + "start" ] }, "user": { diff --git a/aucoalesce/testdata/ubuntu-17.04-linux-4.10.0.json.golden b/aucoalesce/testdata/ubuntu-17.04-linux-4.10.0.json.golden index a065c0f..33653d9 100644 --- a/aucoalesce/testdata/ubuntu-17.04-linux-4.10.0.json.golden +++ b/aucoalesce/testdata/ubuntu-17.04-linux-4.10.0.json.golden @@ -533,10 +533,10 @@ "ecs": { "event": { "category": [ - "authentication" + "session" ], "type": [ - "info" + "end" ] }, "user": { @@ -733,10 +733,10 @@ "ecs": { "event": { "category": [ - "authentication" + "session" ], "type": [ - "info" + "start" ] }, "user": { diff --git a/aucoalesce/znormalize_data.go b/aucoalesce/znormalize_data.go index a60fcc5..2581478 100644 --- a/aucoalesce/znormalize_data.go +++ b/aucoalesce/znormalize_data.go @@ -31,7 +31,7 @@ func asset(key string) ([]byte, error) { assets = map[string][]byte{} var value []byte - value, _ = base64.StdEncoding.DecodeString("LS0tCiMgTWFjcm9zIGRlY2xhcmVzIHNvbWUgWUFNTCBhbmNob3JzIHRoYXQgY2FuIGJlIHJlZmVyZW5jZWQgZm9yIHNvbWUgY29tbW9uCiMgb2JqZWN0IHR5cGUgbm9ybWFsaXphdGlvbnMgbGlrZSB1c2VyLXNlc3Npb24sIHNvY2tldCwgb3IgcHJvY2Vzcy4KbWFjcm9zOgogIC0gJmRlZmF1bHRzCiAgICBzdWJqZWN0OgogICAgICBwcmltYXJ5OiBhdWlkCiAgICAgIHNlY29uZGFyeTogdWlkCiAgICBob3c6IFtleGUsIGNvbW1dCgogIC0gJm1hY3JvLXVzZXItc2Vzc2lvbgogICAgc3ViamVjdDoKICAgICAgcHJpbWFyeTogYXVpZAogICAgICBzZWNvbmRhcnk6IFthY2N0LCBpZCwgdWlkXQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiB0ZXJtaW5hbAogICAgICBzZWNvbmRhcnk6IFthZGRyLCBob3N0bmFtZV0KICAgICAgd2hhdDogdXNlci1zZXNzaW9uCiAgICBob3c6IFtleGUsIHRlcm1pbmFsXQoKICAtICZtYWNyby1zb2NrZXQKICAgIDw8OiAqZGVmYXVsdHMKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogW2FkZHIsIHBhdGhdCiAgICAgIHNlY29uZGFyeTogcG9ydAogICAgICB3aGF0OiBzb2NrZXQKCiAgLSAmbWFjcm8tcHJvY2VzcwogICAgPDw6ICpkZWZhdWx0cwogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBbY21kLCBleGUsIGNvbW1dCiAgICAgIHNlY29uZGFyeTogcGlkCiAgICAgIHdoYXQ6IHByb2Nlc3MKICAgIGhvdzogdGVybWluYWwKCiAgLSAmZWNzLWlhbQogICAgY2F0ZWdvcnk6IGlhbQogICAgdHlwZTogaW5mbwoKICAtICZlY3MtYXV0aAogICAgY2F0ZWdvcnk6IGF1dGhlbnRpY2F0aW9uCiAgICB0eXBlOiBpbmZvCiAgICBtYXBwaW5nczoKICAgICAgLSBmcm9tOiBzdWJqZWN0LnByaW1hcnkKICAgICAgICB0bzogdXNlcgogICAgICAtIGZyb206IHN1YmplY3Quc2Vjb25kYXJ5CiAgICAgICAgdG86IHVzZXIuZWZmZWN0aXZlCgogIC0gJmVjcy1ob3N0CiAgICBjYXRlZ29yeTogaG9zdAogICAgdHlwZTogaW5mbwoKICAtICZlY3MtcHJvY2VzcwogICAgY2F0ZWdvcnk6IHByb2Nlc3MKICAgIHR5cGU6IGluZm8KCiAgLSAmZWNzLWZpbGUKICAgIGNhdGVnb3J5OiBmaWxlCiAgICB0eXBlOiBpbmZvCgogIC0gJmVjcy1kcml2ZXIKICAgIGNhdGVnb3J5OiBkcml2ZXIKICAgIHR5cGU6IGluZm8KCiAgLSAmZWNzLW5ldHdvcmsKICAgIGNhdGVnb3J5OiBuZXR3b3JrCiAgICB0eXBlOgogICAgICAtIGNvbm5lY3Rpb24KICAgICAgLSBpbmZvCgogIC0gJmVjcy11c2VyLW1vZGlmaWNhdGlvbi1tYXBwaW5ncwogICAgbWFwcGluZ3M6CiAgICAgIC0gZnJvbTogc3ViamVjdC5wcmltYXJ5CiAgICAgICAgdG86IHVzZXIKICAgICAgLSBmcm9tOiBzdWJqZWN0LnNlY29uZGFyeQogICAgICAgIHRvOiB1c2VyLmVmZmVjdGl2ZQogICAgICAtIGZyb206IG9iamVjdC5wcmltYXJ5CiAgICAgICAgdG86IHVzZXIudGFyZ2V0CgogIC0gJmVjcy1ncm91cC1tb2RpZmljYXRpb24tbWFwcGluZ3MKICAgIG1hcHBpbmdzOgogICAgICAtIGZyb206IHN1YmplY3QucHJpbWFyeQogICAgICAgIHRvOiB1c2VyCiAgICAgIC0gZnJvbTogc3ViamVjdC5zZWNvbmRhcnkKICAgICAgICB0bzogdXNlci5lZmZlY3RpdmUKICAgICAgLSBmcm9tOiBvYmplY3QucHJpbWFyeQogICAgICAgIHRvOiBncm91cC50YXJnZXQKCiMgTm9ybWFsaXphdGlvbnMgaXMgYSBsaXN0IG9mIGRlY2xhcmF0aW9ucyBzcGVjaWZ5aW5nIGhvdyB0byBub3JtYWxpemUgdGhlIGRhdGEKIyBjb250YWluZWQgaW4gYW4gZXZlbnQuIFRoZSBub3JtYWxpemF0aW9uIGNhbiBiZSBhcHBsaWVkIGJhc2VkIG9uIHRoZSBzeXNjYWxsCiMgbmFtZSAoZS5nLiBjb25uZWN0LCBvcGVuKSBvciBiYXNlZCBvbiB0aGUgcmVjb3JkIHR5cGUgKGUuZy4gVVNFUl9MT0dJTikuCiMgTm8gdHdvIG5vcm1hbGl6YXRpb25zIGNhbiBhcHBseSB0byB0aGUgc2FtZSBzeXNjYWxsIG9yIHJlY29yZCB0eXBlLiBUaGlzCiMgd2lsbCByZXN1bHQgaW4gYSBmYWlsdXJlIGF0IGxvYWQgdGltZS4KIwojIEVhY2ggbm9ybWFsaXphdGlvbiBzaG91bGQgc3BlY2lmeToKIyAgIGFjdGlvbiAtIHdoYXQgaGFwcGVuZWQKIyAgIGFjdG9yICAtIHdobyBkaWQgdGhpcyBvciB3aG8gdHJpZ2dlcmVkIHRoZSBldmVudAojICAgb2JqZWN0IC0gd2hhdCB3YXMgdGhlICJ0aGluZyIgaW52b2x2ZWQgaW4gdGhlIGFjdGlvbiAoZS5nLiBwcm9jZXNzLCBzb2NrZXQpCiMgICBob3cgICAgLSBob3cgd2FzIHRoZSBhY3Rpb24gcGVyZm9ybWVkIChlLmcuIGV4ZSBvciB0ZXJtaW5hbCkKbm9ybWFsaXphdGlvbnM6CiAgLSBlY3M6ICplY3MtcHJvY2VzcwogICAgc3lzY2FsbHM6CiAgICAgIC0gJyonICMgdGhpcyBpcyBhIGNhdGNoIGFsbAogIC0gYWN0aW9uOiBvcGVuZWQtZmlsZQogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBjcmVhdCAtIG9wZW4gYW5kIHBvc3NpYmx5IGNyZWF0ZSBhIGZpbGUKICAgICAgLSBjcmVhdAogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgIHR5cGU6IGNyZWF0aW9uCiAgLSBhY3Rpb246IG9wZW5lZC1maWxlCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIGZhbGxvY2F0ZSAtIG1hbmlwdWxhdGUgZmlsZSBzcGFjZQogICAgICAtIGZhbGxvY2F0ZQogICAgICAjIHRydW5jYXRlIC0gdHJ1bmNhdGUgYSBmaWxlIHRvIGEgc3BlY2lmaWVkIGxlbmd0aAogICAgICAtIHRydW5jYXRlCiAgICAgICMgZnRydW5jYXRlIC0gdHJ1bmNhdGUgYSBmaWxlIHRvIGEgc3BlY2lmaWVkIGxlbmd0aAogICAgICAtIGZ0cnVuY2F0ZQogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgICMgdGVjaG5pY2FsbHkgeW91IGNhbiB0cnVuY2F0ZSBhIGZpbGUgdG8gdGhlIHNhbWUgbGVuZ3RoCiAgICAgICMgYnV0IHJlZ2FyZGxlc3MsIHdlIGNvbnNpZGVyIHRoaXMgYSBjaGFuZ2UKICAgICAgdHlwZTogY2hhbmdlCiAgLSBhY3Rpb246IG9wZW5lZC1maWxlCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIG9wZW4gLSBvcGVuIGFuZCBwb3NzaWJseSBjcmVhdGUgYSBmaWxlCiAgICAgIC0gb3BlbgogICAgICAjIG9wZW5hdCAtIG9wZW4gYW5kIHBvc3NpYmx5IGNyZWF0ZSBhIGZpbGUKICAgICAgLSBvcGVuYXQKICAgICAgIyByZWFkbGluayAtIHJlYWQgdmFsdWUgb2YgYSBzeW1ib2xpYyBsaW5rCiAgICAgIC0gcmVhZGxpbmsKICAgICAgIyByZWFkbGlua2F0IC0gcmVhZCB2YWx1ZSBvZiBhIHN5bWJvbGljIGxpbmsKICAgICAgLSByZWFkbGlua2F0CiAgICBlY3M6ICplY3MtZmlsZQogIC0gYWN0aW9uOiByZWFkLWZpbGUKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgc3lzY2FsbHM6CiAgICAgICMgcmVhZCAtIHJlYWQgZnJvbSBhIGZpbGUgZGVzY3JpcHRvcgogICAgICAtIHJlYWQKICAgIGVjczogKmVjcy1maWxlCiAgLSBhY3Rpb246IHdyb3RlLXRvLWZpbGUKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgc3lzY2FsbHM6CiAgICAgICMgd3JpdGUgLSB3cml0ZSB0byBhIGZpbGUgZGVzY3JpcHRvcgogICAgICAtIHdyaXRlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgdHlwZTogY2hhbmdlCiAgLSBhY3Rpb246IGNoYW5nZWQtZmlsZS1hdHRyaWJ1dGVzLW9mCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIHNldHhhdHRyIC0gc2V0IGFuIGV4dGVuZGVkIGF0dHJpYnV0ZSB2YWx1ZQogICAgICAtIHNldHhhdHRyCiAgICAgICMgZnNldHhhdHRyIC0gc2V0IGFuIGV4dGVuZGVkIGF0dHJpYnV0ZSB2YWx1ZQogICAgICAtIGZzZXR4YXR0cgogICAgICAjIGxzZXR4YXR0ciAtIHNldCBhbiBleHRlbmRlZCBhdHRyaWJ1dGUgdmFsdWUKICAgICAgLSBsc2V0eGF0dHIKICAgICAgIyByZW1vdmV4YXR0ciAtIHJlbW92ZSBhbiBleHRlbmRlZCBhdHRyaWJ1dGUKICAgICAgLSByZW1vdmV4YXR0cgogICAgICAjIGZyZW1vdmV4YXR0ciAtIHJlbW92ZSBhbiBleHRlbmRlZCBhdHRyaWJ1dGUKICAgICAgLSBmcmVtb3ZleGF0dHIKICAgICAgIyBscmVtb3ZleGF0dHIgLSByZW1vdmUgYW4gZXh0ZW5kZWQgYXR0cmlidXRlCiAgICAgIC0gbHJlbW92ZXhhdHRyCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgdHlwZTogY2hhbmdlCiAgLSBhY3Rpb246IGNoYW5nZWQtZmlsZS1wZXJtaXNzaW9ucy1vZgogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBjaG1vZCAtIGNoYW5nZSBwZXJtaXNzaW9ucyBvZiBhIGZpbGUKICAgICAgLSBjaG1vZAogICAgICAjIGZjaG1vZCAtIGNoYW5nZSBwZXJtaXNzaW9ucyBvZiBhIGZpbGUKICAgICAgLSBmY2htb2QKICAgICAgIyBmY2htb2RhdCAtIGNoYW5nZSBwZXJtaXNzaW9ucyBvZiBhIGZpbGUKICAgICAgLSBmY2htb2RhdAogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgIHR5cGU6IGNoYW5nZQogIC0gYWN0aW9uOiBjaGFuZ2VkLWZpbGUtb3duZXJzaGlwLW9mCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIGNob3duIC0gY2hhbmdlIG93bmVyc2hpcCBvZiBhIGZpbGUKICAgICAgLSBjaG93bgogICAgICAjIGZjaG93biAtIGNoYW5nZSBvd25lcnNoaXAgb2YgYSBmaWxlCiAgICAgIC0gZmNob3duCiAgICAgICMgZmNob3duYXQgLSBjaGFuZ2Ugb3duZXJzaGlwIG9mIGEgZmlsZQogICAgICAtIGZjaG93bmF0CiAgICAgICMgbGNob3duIC0gY2hhbmdlIG93bmVyc2hpcCBvZiBhIGZpbGUKICAgICAgLSBsY2hvd24KICAgIGVjczoKICAgICAgPDw6ICplY3MtZmlsZQogICAgICB0eXBlOiBjaGFuZ2UKICAtIGFjdGlvbjogbG9hZGVkLWtlcm5lbC1tb2R1bGUKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgICBwcmltYXJ5OiBuYW1lCiAgICByZWNvcmRfdHlwZXM6CiAgICAgIC0gS0VSTl9NT0RVTEUKICAgIHN5c2NhbGxzOgogICAgICAjIGZpbml0X21vZHVsZSAtIGxvYWQgYSBrZXJuZWwgbW9kdWxlCiAgICAgIC0gZmluaXRfbW9kdWxlCiAgICAgICMgaW5pdF9tb2R1bGUgLSBsb2FkIGEga2VybmVsIG1vZHVsZQogICAgICAtIGluaXRfbW9kdWxlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWRyaXZlcgogICAgICB0eXBlOiBzdGFydAogIC0gYWN0aW9uOiB1bmxvYWRlZC1rZXJuZWwtbW9kdWxlCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIGRlbGV0ZV9tb2R1bGUgLSB1bmxvYWQgYSBrZXJuZWwgbW9kdWxlCiAgICAgIC0gZGVsZXRlX21vZHVsZQogICAgZWNzOgogICAgICA8PDogKmVjcy1kcml2ZXIKICAgICAgdHlwZTogZW5kCiAgLSBhY3Rpb246IGNyZWF0ZWQtZGlyZWN0b3J5CiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgICAgcGF0aF9pbmRleDogMQogICAgc3lzY2FsbHM6CiAgICAgICMgbWtkaXIgLSBjcmVhdGUgYSBkaXJlY3RvcnkKICAgICAgLSBta2RpcgogICAgICAjIG1rZGlyYXQgLSBjcmVhdGUgYSBkaXJlY3RvcnkKICAgICAgLSBta2RpcmF0CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgdHlwZTogY3JlYXRpb24KICAtIGFjdGlvbjogbW91bnRlZAogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlc3lzdGVtCiAgICAgIHBhdGhfaW5kZXg6IDEKICAgIHN5c2NhbGxzOgogICAgICAjIG1vdW50IC0gbW91bnQgZmlsZXN5c3RlbQogICAgICAtIG1vdW50CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgIyBzaW5jZSBhIG5ldyBtb3VudCBhcHBlYXJzIG9uIHRoZSBzeXN0ZW0KICAgICAgIyB3ZSBjb25zaWRlciB0aGlzIGEgaGlnaC1sZXZlbCAiY3JlYXRpb24iIGV2ZW50CiAgICAgIHR5cGU6IGNyZWF0aW9uCiAgLSBhY3Rpb246IHJlbmFtZWQKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgICBwYXRoX2luZGV4OiAyCiAgICBzeXNjYWxsczoKICAgICAgIyByZW5hbWUgLSBjaGFuZ2UgdGhlIG5hbWUgb3IgbG9jYXRpb24gb2YgYSBmaWxlCiAgICAgIC0gcmVuYW1lCiAgICAgICMgcmVuYW1lYXQgLSBjaGFuZ2UgdGhlIG5hbWUgb3IgbG9jYXRpb24gb2YgYSBmaWxlCiAgICAgIC0gcmVuYW1lYXQKICAgICAgIyByZW5hbWVhdDIgLSBjaGFuZ2UgdGhlIG5hbWUgb3IgbG9jYXRpb24gb2YgYSBmaWxlCiAgICAgIC0gcmVuYW1lYXQyCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgdHlwZTogY2hhbmdlCiAgLSBhY3Rpb246IGNoZWNrZWQtbWV0YWRhdGEtb2YKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgc3lzY2FsbHM6CiAgICAgICMgYWNjZXNzIC0gY2hlY2sgdXNlcidzIHBlcm1pc3Npb25zIGZvciBhIGZpbGUKICAgICAgLSBhY2Nlc3MKICAgICAgIyBmYWNjZXNzYXQgLSBjaGVjayB1c2VyJ3MgcGVybWlzc2lvbnMgZm9yIGEgZmlsZQogICAgICAtIGZhY2Nlc3NhdAogICAgICAjIGZzdGF0YXQgLSBnZXQgZmlsZSBzdGF0dXMKICAgICAgLSBmc3RhdGF0CiAgICAgICMgbmV3ZnN0YXRhdCAtIGdldCBmaWxlIHN0YXR1cwogICAgICAtIG5ld2ZzdGF0YXQKICAgICAgIyBzdGF0IC0gZ2V0IGZpbGUgc3RhdHVzCiAgICAgIC0gc3RhdAogICAgICAjIHN0YXQ2NCAtIGdldCBmaWxlIHN0YXR1cwogICAgICAtIHN0YXQ2NAogICAgICAjIGZzdGF0IC0gZ2V0IGZpbGUgc3RhdHVzCiAgICAgIC0gZnN0YXQKICAgICAgIyBsc3RhdCAtIGdldCBmaWxlIHN0YXR1cwogICAgICAtIGxzdGF0CiAgICAgICMgZ2V0eGF0dHIgLSByZXRyaWV2ZSBhbiBleHRlbmRlZCBhdHRyaWJ1dGUgdmFsdWUKICAgICAgLSBnZXR4YXR0cgogICAgICAjIGxnZXR4YXR0ciAtIHJldHJpZXZlIGFuIGV4dGVuZGVkIGF0dHJpYnV0ZSB2YWx1ZQogICAgICAtIGxnZXR4YXR0cgogICAgICAjIGZnZXR4YXR0ciAtIHJldHJpZXZlIGFuIGV4dGVuZGVkIGF0dHJpYnV0ZSB2YWx1ZQogICAgICAtIGZnZXR4YXR0cgogICAgZWNzOiAqZWNzLWZpbGUKICAtIGFjdGlvbjogY2hlY2tlZC1maWxlc3lzdGVtLW1ldGFkYXRhLW9mCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGVzeXN0ZW0KICAgIHN5c2NhbGxzOgogICAgICAjIHN0YXRmcyAtIGdldCBmaWxlc3lzdGVtIHN0YXRpc3RpY3MKICAgICAgLSBzdGF0ZnMKICAgICAgIyBmc3RhdGZzIC0gZ2V0IGZpbGVzeXN0ZW0gc3RhdGlzdGljcwogICAgICAtIGZzdGF0ZnMKICAgIGVjczogKmVjcy1maWxlCiAgLSBhY3Rpb246IHN5bWxpbmtlZAogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBzeW1saW5rIC0gbWFrZSBhIG5ldyBuYW1lIGZvciBhIGZpbGUKICAgICAgLSBzeW1saW5rCiAgICAgICMgc3ltbGlua2F0IC0gbWFrZSBhIG5ldyBuYW1lIGZvciBhIGZpbGUKICAgICAgLSBzeW1saW5rYXQKICAgIGVjczoKICAgICAgPDw6ICplY3MtZmlsZQogICAgICAjICJjcmVhdGlvbiIgc2luY2Ugd2UncmUgY3JlYXRpbmcgYSBuZXcgZmlsZSBzeXN0ZW0KICAgICAgIyBlbnRyeSBmb3IgdGhlIHN5bWxpbmsKICAgICAgdHlwZTogY3JlYXRpb24KICAtIGFjdGlvbjogdW5tb3VudGVkCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGVzeXN0ZW0KICAgIHN5c2NhbGxzOgogICAgICAjIHVtb3VudCAtIHVubW91bnQgZmlsZXN5c3RlbQogICAgICAtIHVtb3VudAogICAgICAjIHVtb3VudDIgLSB1bm1vdW50IGZpbGVzeXN0ZW0KICAgICAgLSB1bW91bnQyCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgIyAiZGVsZXRpb24iIHRvIG1pcnJvciB0aGUgImNyZWF0aW9uIiBvZiB0aGUgbW91bnQKICAgICAgdHlwZTogZGVsZXRpb24KICAtIGFjdGlvbjogZGVsZXRlZAogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBybWRpciAtIGRlbGV0ZSBhIGRpcmVjdG9yeQogICAgICAtIHJtZGlyCiAgICAgICMgdW5saW5rIC0gZGVsZXRlIGEgbmFtZSBhbmQgcG9zc2libHkgdGhlIGZpbGUgaXQgcmVmZXJzIHRvCiAgICAgIC0gdW5saW5rCiAgICAgICMgdW5saW5rYXQgLSBkZWxldGUgYSBuYW1lIGFuZCBwb3NzaWJseSB0aGUgZmlsZSBpdCByZWZlcnMgdG8KICAgICAgLSB1bmxpbmthdAogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgIHR5cGU6IGRlbGV0aW9uCiAgLSBhY3Rpb246IGNoYW5nZWQtdGltZXN0YW1wLW9mCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIHV0aW1lIC0gY2hhbmdlIGZpbGUgbGFzdCBhY2Nlc3MgYW5kIG1vZGlmaWNhdGlvbiB0aW1lcwogICAgICAtIHV0aW1lCiAgICAgICMgdXRpbWVzIC0gY2hhbmdlIGZpbGUgbGFzdCBhY2Nlc3MgYW5kIG1vZGlmaWNhdGlvbiB0aW1lcwogICAgICAtIHV0aW1lcwogICAgICAjIGZ1dGltZXNhdCAtIGNoYW5nZSB0aW1lc3RhbXBzIG9mIGEgZmlsZSByZWxhdGl2ZSB0byBhIFwgZGlyZWN0b3J5IGZpbGUgZGVzY3JpcHRvcgogICAgICAtIGZ1dGltZXNhdAogICAgICAjIGZ1dGltZW5zIC0gY2hhbmdlIGZpbGUgdGltZXN0YW1wcyB3aXRoIG5hbm9zZWNvbmQgcHJlY2lzaW9uCiAgICAgIC0gZnV0aW1lbnMKICAgICAgIyB1dGltZW5zYXQgLSBjaGFuZ2UgZmlsZSB0aW1lc3RhbXBzIHdpdGggbmFub3NlY29uZCBwcmVjaXNpb24KICAgICAgLSB1dGltZW5zYXQKICAgIGVjczogKmVjcy1maWxlCiAgLSBhY3Rpb246IGV4ZWN1dGVkCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIGV4ZWN2ZSAtIGV4ZWN1dGUgcHJvZ3JhbQogICAgICAtIGV4ZWN2ZQogICAgICAjIGV4ZWN2ZWF0IC0gZXhlY3V0ZSBwcm9ncmFtIHJlbGF0aXZlIHRvIGEgZGlyZWN0b3J5IGZpbGUgZGVzY3JpcHRvcgogICAgICAtIGV4ZWN2ZWF0CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogc3RhcnQKICAtIGFjdGlvbjogbGlzdGVuLWZvci1jb25uZWN0aW9ucwogICAgb2JqZWN0OgogICAgICB3aGF0OiBzb2NrZXQKICAgIHN5c2NhbGxzOgogICAgICAjIGxpc3Rlbi0gbGlzdGVuIGZvciBjb25uZWN0aW9ucyBvbiBhIHNvY2tldAogICAgICAtIGxpc3RlbgogICAgZWNzOgogICAgICA8PDogKmVjcy1uZXR3b3JrCiAgICAgIHR5cGU6IHN0YXJ0CiAgLSBhY3Rpb246IGFjY2VwdGVkLWNvbm5lY3Rpb24tZnJvbQogICAgb2JqZWN0OgogICAgICB3aGF0OiBzb2NrZXQKICAgIHN5c2NhbGxzOgogICAgICAjIGFjY2VwdCAtIGFjY2VwdCBhIGNvbm5lY3Rpb24gb24gYSBzb2NrZXQKICAgICAgLSBhY2NlcHQKICAgICAgIyBhY2NlcHQ0IC0gYWNjZXB0IGEgY29ubmVjdGlvbiBvbiBhIHNvY2tldAogICAgICAtIGFjY2VwdDQKICAgIGVjczoKICAgICAgPDw6ICplY3MtbmV0d29yawogICAgICB0eXBlOgogICAgICAgIC0gY29ubmVjdGlvbgogICAgICAgIC0gc3RhcnQKICAtIGFjdGlvbjogYm91bmQtc29ja2V0CiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNvY2tldAogICAgc3lzY2FsbHM6CiAgICAgICMgYmluZCAtYmluZCBhIG5hbWUgdG8gYSBzb2NrZXQKICAgICAgLSBiaW5kCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLW5ldHdvcmsKICAgICAgdHlwZTogc3RhcnQKICAtIGFjdGlvbjogY29ubmVjdGVkLXRvCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNvY2tldAogICAgc3lzY2FsbHM6CiAgICAgIC0gY29ubmVjdAogICAgZWNzOgogICAgICA8PDogKmVjcy1uZXR3b3JrCiAgICAgIHR5cGU6CiAgICAgICAgLSBjb25uZWN0aW9uCiAgICAgICAgLSBzdGFydAogIC0gYWN0aW9uOiByZWNlaXZlZC1mcm9tCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNvY2tldAogICAgc3lzY2FsbHM6CiAgICAgICMgcmVjdiAtIHJlY2VpdmUgYSBtZXNzYWdlIGZyb20gYSBzb2NrZXQKICAgICAgLSByZWN2CiAgICAgICMgcmVjdmZyb20gLSByZWNlaXZlIGEgbWVzc2FnZSBmcm9tIGEgc29ja2V0CiAgICAgIC0gcmVjdmZyb20KICAgICAgIyByZWN2bXNnIC0gcmVjZWl2ZSBhIG1lc3NhZ2UgZnJvbSBhIHNvY2tldAogICAgICAtIHJlY3Ztc2cKICAgICAgIyByZWN2bW1zZyAtIHJlY2VpdmUgbXVsdGlwbGUgbWVzc2FnZXMgb24gYSBzb2NrZXQKICAgICAgLSByZWN2bW1zZwogICAgZWNzOgogICAgICA8PDogKmVjcy1uZXR3b3JrCiAgLSBhY3Rpb246IHNlbnQtdG8KICAgIG9iamVjdDoKICAgICAgd2hhdDogc29ja2V0CiAgICBzeXNjYWxsczoKICAgICAgIyBzZW5kIC0gc2VuZCBhIG1lc3NhZ2Ugb24gYSBzb2NrZXQKICAgICAgLSBzZW5kCiAgICAgICMgc2VuZHRvIC0gc2VuZCBhIG1lc3NhZ2Ugb24gYSBzb2NrZXQKICAgICAgLSBzZW5kdG8KICAgICAgIyBzZW5kbXNnIC0gc2VuZCBhIG1lc3NhZ2Ugb24gYSBzb2NrZXQKICAgICAgLSBzZW5kbXNnCiAgICAgICMgc2VuZG1tc2cgLSBzZW5kIG11bHRpcGxlIG1lc3NhZ2VzIG9uIGEgc29ja2V0CiAgICAgIC0gc2VuZG1tc2cKICAgIGVjczoKICAgICAgPDw6ICplY3MtbmV0d29yawogIC0gYWN0aW9uOiBraWxsZWQtcGlkCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHByb2Nlc3MKICAgIHN5c2NhbGxzOgogICAgICAjIGtpbGwgLSBzZW5kIHNpZ25hbCB0byBhIHByb2Nlc3MKICAgICAgLSBraWxsCiAgICAgICMgdGtpbGwgLSBzZW5kIGEgc2lnbmFsIHRvIGEgdGhyZWFkCiAgICAgIC0gdGtpbGwKICAgICAgIyB0Z2tpbGwgLSBzZW5kIGEgc2lnbmFsIHRvIGEgdGhyZWFkCiAgICAgIC0gdGdraWxsCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogZW5kCiAgLSBhY3Rpb246IGNoYW5nZWQtaWRlbnRpdHktb2YKICAgIG9iamVjdDoKICAgICAgd2hhdDogcHJvY2VzcwogICAgaG93OiBzeXNjYWxsCiAgICBzeXNjYWxsczoKICAgICAgIyBzZXR1aWQgLSBzZXQgdXNlciBpZGVudGl0eQogICAgICAtIHNldHVpZAogICAgICAjIHNldGV1aWQgLSBzZXQgZWZmZWN0aXZlIHVzZXIgb3IgZ3JvdXAgSUQKICAgICAgLSBzZXRldWlkCiAgICAgICMgc2V0ZnN1aWQgLSBzZXQgdXNlciBpZGVudGl0eSB1c2VkIGZvciBmaWxlc3lzdGVtIGNoZWNrcwogICAgICAtIHNldGZzdWlkCiAgICAgICMgc2V0cmV1aWQgLSBzZXQgcmVhbCBhbmQvb3IgZWZmZWN0aXZlIHVzZXIgb3IgZ3JvdXAgSUQKICAgICAgLSBzZXRyZXVpZAogICAgICAjIHNldGdpZCAtIHNldCBncm91cCBpZGVudGl0eQogICAgICAtIHNldGdpZAogICAgICAjIHNldGVnaWQgLSBzZXQgZWZmZWN0aXZlIHVzZXIgb3IgZ3JvdXAgSUQKICAgICAgLSBzZXRlZ2lkCiAgICAgICMgc2V0ZnNnaWQgLSBzZXQgZ3JvdXAgaWRlbnRpdHkgdXNlZCBmb3IgZmlsZXN5c3RlbSBjaGVja3MKICAgICAgLSBzZXRmc2dpZAogICAgICAjIHNldHJlZ2lkIC0gc2V0IHJlYWwgYW5kL29yIGVmZmVjdGl2ZSB1c2VyIG9yIGdyb3VwIElECiAgICAgIC0gc2V0cmVnaWQKICAgICAgIyBzZXRyZXN1aWQgLSBzZXQgcmVhbCwgZWZmZWN0aXZlIGFuZCBzYXZlZCB1c2VyIG9yIGdyb3VwIElECiAgICAgIC0gc2V0cmVzdWlkCiAgICAgICMgc2V0cmVzZ2lkIC0gc2V0IHJlYWwsIGVmZmVjdGl2ZSBhbmQgc2F2ZWQgdXNlciBvciBncm91cCBJRAogICAgICAtIHNldHJlc2dpZAogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IGNoYW5nZQogIC0gYWN0aW9uOiBjaGFuZ2VkLXN5c3RlbS10aW1lCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHN5c3RlbQogICAgc3lzY2FsbHM6CiAgICAgICMgc2V0dGltZW9mZGF5IC0gZ2V0IC8gc2V0IHRpbWUKICAgICAgLSBzZXR0aW1lb2ZkYXkKICAgICAgIyBjbG9ja19zZXR0aW1lIC0gY2xvY2sgYW5kIHRpbWUgZnVuY3Rpb25zCiAgICAgIC0gY2xvY2tfc2V0dGltZQogICAgICAjIHN0aW1lIC0gc2V0IHRpbWUKICAgICAgLSBzdGltZQogICAgICAjIGFkanRpbWV4IC0gdHVuZSBrZXJuZWwgY2xvY2sKICAgICAgLSBhZGp0aW1leAogICAgZWNzOgogICAgICA8PDogKmVjcy1ob3N0CiAgICAgIHR5cGU6IGNoYW5nZQogIC0gYWN0aW9uOiBtYWtlLWRldmljZQogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBta25vZCAtIGNyZWF0ZSBhIHNwZWNpYWwgb3Igb3JkaW5hcnkgZmlsZQogICAgICAtIG1rbm9kCiAgICAgICMgbWtub2RhdCAtIGNyZWF0ZSBhIHNwZWNpYWwgb3Igb3JkaW5hcnkgZmlsZQogICAgICAtIG1rbm9kYXQKICAgIGVjczoKICAgICAgPDw6ICplY3MtZmlsZQogICAgICB0eXBlOiBjcmVhdGlvbgogIC0gYWN0aW9uOiBjaGFuZ2VkLXN5c3RlbS1uYW1lCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHN5c3RlbQogICAgc3lzY2FsbHM6CiAgICAgICMgc2V0aG9zdG5hbWUgLSBnZXQvc2V0IGhvc3RuYW1lCiAgICAgIC0gc2V0aG9zdG5hbWUKICAgICAgIyBzZXRkb21haW5uYW1lIC0gZ2V0L3NldCBOSVMgZG9tYWluIG5hbWUKICAgICAgLSBzZXRkb21haW5uYW1lCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWhvc3QKICAgICAgdHlwZTogY2hhbmdlCiAgLSBhY3Rpb246IGFsbG9jYXRlZC1tZW1vcnkKICAgIG9iamVjdDoKICAgICAgd2hhdDogbWVtb3J5CiAgICBzeXNjYWxsczoKICAgICAgIyBtbWFwIC0gbWFwIG9yIHVubWFwIGZpbGVzIG9yIGRldmljZXMgaW50byBtZW1vcnkKICAgICAgLSBtbWFwCiAgICAgICMgbW1hcDIgLSBtYXAgZmlsZXMgb3IgZGV2aWNlcyBpbnRvIG1lbW9yeQogICAgICAtIG1tYXAyCiAgICAgICMgYnJrIC0gY2hhbmdlIGRhdGEgc2VnbWVudCBzaXplCiAgICAgIC0gYnJrCiAgICBlY3M6ICplY3MtcHJvY2VzcwogIC0gYWN0aW9uOiBhZGp1c3RlZC1zY2hlZHVsaW5nLXBvbGljeS1vZgogICAgb2JqZWN0OgogICAgICB3aGF0OiBwcm9jZXNzCiAgICBob3c6IHN5c2NhbGwKICAgIHN5c2NhbGxzOgogICAgICAjIHNjaGVkX3NldHBhcmFtIC0gc2V0IGFuZCBnZXQgc2NoZWR1bGluZyBwYXJhbWV0ZXJzCiAgICAgIC0gc2NoZWRfc2V0cGFyYW0KICAgICAgIyBzY2hlZF9zZXRzY2hlZHVsZXIgLSBzZXQgYW5kIGdldCBzY2hlZHVsaW5nIHBvbGljeS9wYXJhbWV0ZXJzCiAgICAgIC0gc2NoZWRfc2V0c2NoZWR1bGVyCiAgICAgICMgc2NoZWRfc2V0YXR0ciAtIHNldCBhbmQgZ2V0IHNjaGVkdWxpbmcgcG9saWN5IGFuZCBhdHRyaWJ1dGVzCiAgICAgIC0gc2NoZWRfc2V0YXR0cgogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IGNoYW5nZQoKICAjIEN1cnJlbnRseSB1bmhhbmRsZWQKICAjIHRoaXMgbGlzdCBjb21lcyBmcm9tIHBhcnNpbmcgbGludXggbWFuIHBhZ2VzIGF0IGh0dHBzOi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9kb2NzL21hbi1wYWdlcy9tYW4tcGFnZXMuZ2l0CgogICMgc2lnYWN0aW9uIC0gZXhhbWluZSBhbmQgY2hhbmdlIGEgc2lnbmFsIGFjdGlvbgogICMgcnRfc2lnYWN0aW9uIC0gZXhhbWluZSBhbmQgY2hhbmdlIGEgc2lnbmFsIGFjdGlvbgogICMgcHJlYWQgLSByZWFkIGZyb20gb3Igd3JpdGUgdG8gYSBmaWxlIGRlc2NyaXB0b3IgYXQgYSBnaXZlbiBvZmZzZXQKICAjIHB3cml0ZSAtIHJlYWQgZnJvbSBvciB3cml0ZSB0byBhIGZpbGUgZGVzY3JpcHRvciBhdCBhIGdpdmVuIG9mZnNldAogICMgczM5MF9ndWFyZGVkX3N0b3JhZ2UgLSBvcGVyYXRpb25zIHdpdGggei9BcmNoaXRlY3R1cmUgZ3VhcmRlZCBzdG9yYWdlIGZhY2lsaXR5CiAgIyBzY2hlZF9nZXRhdHRyIC0gc2V0IGFuZCBnZXQgc2NoZWR1bGluZyBwb2xpY3kgYW5kIGF0dHJpYnV0ZXMKICAjIGdldHJ1c2FnZSAtIGdldCByZXNvdXJjZSB1c2FnZQogICMgZmxvY2sgLSBhcHBseSBvciByZW1vdmUgYW4gYWR2aXNvcnkgbG9jayBvbiBhbiBvcGVuIGZpbGUKICAjIHBpZGZkX2dldGZkIC0gb2J0YWluIGEgZHVwbGljYXRlIG9mIGFub3RoZXIgcHJvY2VzcydzIGZpbGUgZGVzY3JpcHRvcgogICMgY2xvY2tfbmFub3NsZWVwIC0gaGlnaC1yZXNvbHV0aW9uIHNsZWVwIHdpdGggc3BlY2lmaWFibGUgY2xvY2sKICAjIGdldHBhZ2VzaXplIC0gZ2V0IG1lbW9yeSBwYWdlIHNpemUKICAjIHBpZGZkX29wZW4gLSBvYnRhaW4gYSBmaWxlIGRlc2NyaXB0b3IgdGhhdCByZWZlcnMgdG8gYSBwcm9jZXNzCiAgIyBzcGxpY2UgLSBzcGxpY2UgZGF0YSB0by9mcm9tIGEgcGlwZQogICMgZ2V0cmVzdWlkIC0gZ2V0IHJlYWwsIGVmZmVjdGl2ZSBhbmQgc2F2ZWQgdXNlci9ncm91cCBJRHMKICAjIGdldHJlc2dpZCAtIGdldCByZWFsLCBlZmZlY3RpdmUgYW5kIHNhdmVkIHVzZXIvZ3JvdXAgSURzCiAgIyByZW1hcF9maWxlX3BhZ2VzIC0gY3JlYXRlIGEgbm9ubGluZWFyIGZpbGUgbWFwcGluZwogICMgaW9fY2FuY2VsIC0gY2FuY2VsIGFuIG91dHN0YW5kaW5nIGFzeW5jaHJvbm91cyBJL08gb3BlcmF0aW9uCiAgIyBwcmN0bCAtIG9wZXJhdGlvbnMgb24gYSBwcm9jZXNzIG9yIHRocmVhZAogICMgY2xvY2tfZ2V0cmVzIC0gY2xvY2sgYW5kIHRpbWUgZnVuY3Rpb25zCiAgIyBjbG9ja19nZXR0aW1lIC0gY2xvY2sgYW5kIHRpbWUgZnVuY3Rpb25zCiAgIyBnZXRncm91cHMgLSBnZXQvc2V0IGxpc3Qgb2Ygc3VwcGxlbWVudGFyeSBncm91cCBJRHMKICAjIHNldGdyb3VwcyAtIGdldC9zZXQgbGlzdCBvZiBzdXBwbGVtZW50YXJ5IGdyb3VwIElEcwogICMgdm1zcGxpY2UgLSBzcGxpY2UgdXNlciBwYWdlcyB0by9mcm9tIGEgcGlwZQogICMgZXBvbGxfY3JlYXRlIC0gb3BlbiBhbiBlcG9sbCBmaWxlIGRlc2NyaXB0b3IKICAjIGVwb2xsX2NyZWF0ZTEgLSBvcGVuIGFuIGVwb2xsIGZpbGUgZGVzY3JpcHRvcgogICMgcG9zaXhfZmFkdmlzZSAtIHByZWRlY2xhcmUgYW4gYWNjZXNzIHBhdHRlcm4gZm9yIGZpbGUgZGF0YQogICMgc2lnd2FpdGluZm8gLSBzeW5jaHJvbm91c2x5IHdhaXQgZm9yIHF1ZXVlZCBzaWduYWxzCiAgIyBzaWd0aW1lZHdhaXQgLSBzeW5jaHJvbm91c2x5IHdhaXQgZm9yIHF1ZXVlZCBzaWduYWxzCiAgIyBydF9zaWd0aW1lZHdhaXQgLSBzeW5jaHJvbm91c2x5IHdhaXQgZm9yIHF1ZXVlZCBzaWduYWxzCiAgIyBzaWdyZXR1cm4gLSByZXR1cm4gZnJvbSBzaWduYWwgaGFuZGxlciBhbmQgY2xlYW51cCBzdGFjayBmcmFtZQogICMgcnRfc2lncmV0dXJuIC0gcmV0dXJuIGZyb20gc2lnbmFsIGhhbmRsZXIgYW5kIGNsZWFudXAgc3RhY2sgZnJhbWUKICAjIGdldHJhbmRvbSAtIG9idGFpbiBhIHNlcmllcyBvZiByYW5kb20gYnl0ZXMKICAjIGtleWN0bCAtIG1hbmlwdWxhdGUgdGhlIGtlcm5lbCdzIGtleSBtYW5hZ2VtZW50IGZhY2lsaXR5CiAgIyBzY2hlZF9nZXRzY2hlZHVsZXIgLSBzZXQgYW5kIGdldCBzY2hlZHVsaW5nIHBvbGljeS9wYXJhbWV0ZXJzCiAgIyBtYmluZCAtIHNldCBtZW1vcnkgcG9saWN5IGZvciBhIG1lbW9yeSByYW5nZQogICMgZ2V0cHJpb3JpdHkgLSBnZXQvc2V0IHByb2dyYW0gc2NoZWR1bGluZyBwcmlvcml0eQogICMgc2V0cHJpb3JpdHkgLSBnZXQvc2V0IHByb2dyYW0gc2NoZWR1bGluZyBwcmlvcml0eQogICMgaW5vdGlmeV9pbml0IC0gaW5pdGlhbGl6ZSBhbiBpbm90aWZ5IGluc3RhbmNlCiAgIyBpbm90aWZ5X2luaXQxIC0gaW5pdGlhbGl6ZSBhbiBpbm90aWZ5IGluc3RhbmNlCiAgIyBzZW1jdGwgLSBTeXN0ZW0gViBzZW1hcGhvcmUgY29udHJvbCBvcGVyYXRpb25zCiAgIyBnZXRob3N0bmFtZSAtIGdldC9zZXQgaG9zdG5hbWUKICAjIHB0cmFjZSAtIHByb2Nlc3MgdHJhY2UKICAjIHN5c2N0bCAtIHJlYWQvd3JpdGUgc3lzdGVtIHBhcmFtZXRlcnMKICAjIGdldHBlZXJuYW1lIC0gZ2V0IG5hbWUgb2YgY29ubmVjdGVkIHBlZXIgc29ja2V0CiAgIyBmb3JrIC0gY3JlYXRlIGEgY2hpbGQgcHJvY2VzcwogICMgcXVlcnlfbW9kdWxlIC0gcXVlcnkgdGhlIGtlcm5lbCBmb3IgdmFyaW91cyBiaXRzIHBlcnRhaW5pbmcgdG8gbW9kdWxlcwogICMgaW9jdGxfbGlzdCAtIGxpc3Qgb2YgaW9jdGwgY2FsbHMgaW4gTGludXgvaTM4NiBrZXJuZWwKICAjIG1zZ2dldCAtIGdldCBhIFN5c3RlbSBWIG1lc3NhZ2UgcXVldWUgaWRlbnRpZmllcgogICMgc3B1X2NyZWF0ZSAtIGNyZWF0ZSBhIG5ldyBzcHUgY29udGV4dAogICMgc3VicGFnZV9wcm90IC0gZGVmaW5lIGEgc3VicGFnZSBwcm90ZWN0aW9uIGZvciBhbiBhZGRyZXNzIHJhbmdlCiAgIyBxdW90YWN0bCAtIG1hbmlwdWxhdGUgZGlzayBxdW90YXMKICAjIG5mc3NlcnZjdGwgLSBzeXNjYWxsIGludGVyZmFjZSB0byBrZXJuZWwgbmZzIGRhZW1vbgogICMgb3BlbmF0MiAtIG9wZW4gYW5kIHBvc3NpYmx5IGNyZWF0ZSBhIGZpbGUgKGV4dGVuZGVkKQogICMgZ2V0cmxpbWl0IC0gZ2V0L3NldCByZXNvdXJjZSBsaW1pdHMKICAjIHNldHJsaW1pdCAtIGdldC9zZXQgcmVzb3VyY2UgbGltaXRzCiAgIyBwcmxpbWl0IC0gZ2V0L3NldCByZXNvdXJjZSBsaW1pdHMKICAjIHRlZSAtIGR1cGxpY2F0aW5nIHBpcGUgY29udGVudAogICMgc2htZ2V0IC0gYWxsb2NhdGVzIGEgU3lzdGVtIFYgc2hhcmVkIG1lbW9yeSBzZWdtZW50CiAgIyBjcmVhdGVfbW9kdWxlIC0gY3JlYXRlIGEgbG9hZGFibGUgbW9kdWxlIGVudHJ5CiAgIyBnZXR0aW1lb2ZkYXkgLSBnZXQgLyBzZXQgdGltZQogICMgdGltZXJfY3JlYXRlIC0gY3JlYXRlIGEgUE9TSVggcGVyLXByb2Nlc3MgdGltZXIKICAjIGZhbm90aWZ5X21hcmsgLSBhZGQsIHJlbW92ZSwgb3IgbW9kaWZ5IGFuIGZhbm90aWZ5IG1hcmsgb24gYSBmaWxlc3lzdGVtIG9iamVjdAogICMgcGlwZSAtIGNyZWF0ZSBwaXBlCiAgIyBwaXBlMiAtIGNyZWF0ZSBwaXBlCiAgIyBpbnRybyAtIGludHJvZHVjdGlvbiB0byBzeXN0ZW0gY2FsbHMKICAjIGxvb2t1cF9kY29va2llIC0gcmV0dXJuIGEgZGlyZWN0b3J5IGVudHJ5J3MgcGF0aAogICMgc3lzZnMgLSBnZXQgZmlsZXN5c3RlbSB0eXBlIGluZm9ybWF0aW9uCiAgIyBzMzkwX3J1bnRpbWVfaW5zdHIgLSBlbmFibGUvZGlzYWJsZSBzMzkwIENQVSBydW4tdGltZSBpbnN0cnVtZW50YXRpb24KICAjIHNldG5zIC0gcmVhc3NvY2lhdGUgdGhyZWFkIHdpdGggYSBuYW1lc3BhY2UKICAjIHNldF9tZW1wb2xpY3kgLSBzZXQgZGVmYXVsdCBOVU1BIG1lbW9yeSBwb2xpY3kgZm9yIGEgdGhyZWFkIGFuZCBpdHMgY2hpbGRyZW4KICAjIG5pY2UgLSBjaGFuZ2UgcHJvY2VzcyBwcmlvcml0eQogICMgaW9fc2V0dXAgLSBjcmVhdGUgYW4gYXN5bmNocm9ub3VzIEkvTyBjb250ZXh0CiAgIyBtaW5jb3JlIC0gZGV0ZXJtaW5lIHdoZXRoZXIgcGFnZXMgYXJlIHJlc2lkZW50IGluIG1lbW9yeQogICMgaW9jdGxfY29uc29sZSAtIGlvY3RscyBmb3IgY29uc29sZSB0ZXJtaW5hbCBhbmQgdmlydHVhbCBjb25zb2xlcwogICMgcG9sbCAtIHdhaXQgZm9yIHNvbWUgZXZlbnQgb24gYSBmaWxlIGRlc2NyaXB0b3IKICAjIHBwb2xsIC0gd2FpdCBmb3Igc29tZSBldmVudCBvbiBhIGZpbGUgZGVzY3JpcHRvcgogICMgY2FwZ2V0IC0gc2V0L2dldCBjYXBhYmlsaXRpZXMgb2YgdGhyZWFkKHMpCiAgIyBjYXBzZXQgLSBzZXQvZ2V0IGNhcGFiaWxpdGllcyBvZiB0aHJlYWQocykKICAjIGlvY3RsX3R0eSAtIGlvY3RscyBmb3IgdGVybWluYWxzIGFuZCBzZXJpYWwgbGluZXMKICAjIGlvcGwgLSBjaGFuZ2UgSS9PIHByaXZpbGVnZSBsZXZlbAogICMgaW9fZ2V0ZXZlbnRzIC0gcmVhZCBhc3luY2hyb25vdXMgSS9PIGV2ZW50cyBmcm9tIHRoZSBjb21wbGV0aW9uIHF1ZXVlCiAgIyBwcm9jZXNzX3ZtX3JlYWR2IC0gdHJhbnNmZXIgZGF0YSBiZXR3ZWVuIHByb2Nlc3MgYWRkcmVzcyBzcGFjZXMKICAjIHByb2Nlc3Nfdm1fd3JpdGV2IC0gdHJhbnNmZXIgZGF0YSBiZXR3ZWVuIHByb2Nlc3MgYWRkcmVzcyBzcGFjZXMKICAjIHBjaWNvbmZpZ19yZWFkIC0gcGNpIGRldmljZSBpbmZvcm1hdGlvbiBoYW5kbGluZwogICMgcGNpY29uZmlnX3dyaXRlIC0gcGNpIGRldmljZSBpbmZvcm1hdGlvbiBoYW5kbGluZwogICMgcGNpY29uZmlnX2lvYmFzZSAtIHBjaSBkZXZpY2UgaW5mb3JtYXRpb24gaGFuZGxpbmcKICAjIHNicmsgLSBjaGFuZ2UgZGF0YSBzZWdtZW50IHNpemUKICAjIHNldF90aWRfYWRkcmVzcyAtIHNldCBwb2ludGVyIHRvIHRocmVhZCBJRAogICMgcGtleV9hbGxvYyAtIGFsbG9jYXRlIG9yIGZyZWUgYSBwcm90ZWN0aW9uIGtleQogICMgcGtleV9mcmVlIC0gYWxsb2NhdGUgb3IgZnJlZSBhIHByb3RlY3Rpb24ga2V5CiAgIyBzZWxlY3QgLSBzeW5jaHJvbm91cyBJL08gbXVsdGlwbGV4aW5nCiAgIyBwc2VsZWN0IC0gc3luY2hyb25vdXMgSS9PIG11bHRpcGxleGluZwogICMga2V4ZWNfbG9hZCAtIGxvYWQgYSBuZXcga2VybmVsIGZvciBsYXRlciBleGVjdXRpb24KICAjIGtleGVjX2ZpbGVfbG9hZCAtIGxvYWQgYSBuZXcga2VybmVsIGZvciBsYXRlciBleGVjdXRpb24KICAjIHBlcnNvbmFsaXR5IC0gc2V0IHRoZSBwcm9jZXNzIGV4ZWN1dGlvbiBkb21haW4KICAjIGlvY3RsX2dldGZzbWFwIC0gcmV0cmlldmUgdGhlIHBoeXNpY2FsIGxheW91dCBvZiB0aGUgZmlsZXN5c3RlbQogICMgaW5vdGlmeV9ybV93YXRjaCAtIHJlbW92ZSBhbiBleGlzdGluZyB3YXRjaCBmcm9tIGFuIGlub3RpZnkgaW5zdGFuY2UKICAjIHBlcmZfZXZlbnRfb3BlbiAtIHNldCB1cCBwZXJmb3JtYW5jZSBtb25pdG9yaW5nCiAgIyB0aW1lcl9nZXRvdmVycnVuIC0gZ2V0IG92ZXJydW4gY291bnQgZm9yIGEgUE9TSVggcGVyLXByb2Nlc3MgdGltZXIKICAjIHdhaXQzIC0gd2FpdCBmb3IgcHJvY2VzcyB0byBjaGFuZ2Ugc3RhdGUsIEJTRCBzdHlsZQogICMgd2FpdDQgLSB3YWl0IGZvciBwcm9jZXNzIHRvIGNoYW5nZSBzdGF0ZSwgQlNEIHN0eWxlCiAgIyBsaW5rIC0gbWFrZSBhIG5ldyBuYW1lIGZvciBhIGZpbGUKICAjIGxpbmthdCAtIG1ha2UgYSBuZXcgbmFtZSBmb3IgYSBmaWxlCiAgIyBzY2hlZF9ycl9nZXRfaW50ZXJ2YWwgLSBnZXQgdGhlIFNDSEVEX1JSIGludGVydmFsIGZvciB0aGUgbmFtZWQgcHJvY2VzcwogICMgbXVubWFwIC0gbWFwIG9yIHVubWFwIGZpbGVzIG9yIGRldmljZXMgaW50byBtZW1vcnkKICAjIHNvY2tldGNhbGwgLSBzb2NrZXQgc3lzdGVtIGNhbGxzCiAgIyBtcmVtYXAgLSByZW1hcCBhIHZpcnR1YWwgbWVtb3J5IGFkZHJlc3MKICAjIHZmb3JrIC0gY3JlYXRlIGEgY2hpbGQgcHJvY2VzcyBhbmQgYmxvY2sgcGFyZW50CiAgIyBzZWNjb21wIC0gb3BlcmF0ZSBvbiBTZWN1cmUgQ29tcHV0aW5nIHN0YXRlIG9mIHRoZSBwcm9jZXNzCiAgIyByZXF1ZXN0X2tleSAtIHJlcXVlc3QgYSBrZXkgZnJvbSB0aGUga2VybmVsJ3Mga2V5IG1hbmFnZW1lbnQgZmFjaWxpdHkKICAjIHN5c2NhbGwgLSBpbmRpcmVjdCBzeXN0ZW0gY2FsbAogICMga2NtcCAtIGNvbXBhcmUgdHdvIHByb2Nlc3NlcyB0byBkZXRlcm1pbmUgaWYgdGhleSBzaGFyZSBhIGtlcm5lbCByZXNvdXJjZQogICMgcmVhZGRpciAtIHJlYWQgZGlyZWN0b3J5IGVudHJ5CiAgIyBpb3Blcm0gLSBzZXQgcG9ydCBpbnB1dC9vdXRwdXQgcGVybWlzc2lvbnMKICAjIHNwdV9ydW4gLSBleGVjdXRlIGFuIFNQVSBjb250ZXh0CiAgIyByZWJvb3QgLSByZWJvb3Qgb3IgZW5hYmxlL2Rpc2FibGUgQ3RybC1BbHQtRGVsCiAgIyByZWFkYWhlYWQgLSBpbml0aWF0ZSBmaWxlIHJlYWRhaGVhZCBpbnRvIHBhZ2UgY2FjaGUKICAjIHNjaGVkX2dldHBhcmFtIC0gc2V0IGFuZCBnZXQgc2NoZWR1bGluZyBwYXJhbWV0ZXJzCiAgIyBhY2N0IC0gc3dpdGNoIHByb2Nlc3MgYWNjb3VudGluZyBvbiBvciBvZmYKICAjIHNpZ3N1c3BlbmQgLSB3YWl0IGZvciBhIHNpZ25hbAogICMgcnRfc2lnc3VzcGVuZCAtIHdhaXQgZm9yIGEgc2lnbmFsCiAgIyBleGl0X2dyb3VwIC0gZXhpdCBhbGwgdGhyZWFkcyBpbiBhIHByb2Nlc3MKICAjIHNvY2tldCAtIGNyZWF0ZSBhbiBlbmRwb2ludCBmb3IgY29tbXVuaWNhdGlvbgogICMgaW9jdGxfdXNlcmZhdWx0ZmQgLSBjcmVhdGUgYSBmaWxlIGRlc2NyaXB0b3IgZm9yIGhhbmRsaW5nIHBhZ2UgZmF1bHRzIGluIHVzZXIgc3BhY2UKICAjIHNjaGVkX2dldF9wcmlvcml0eV9tYXggLSBnZXQgc3RhdGljIHByaW9yaXR5IHJhbmdlCiAgIyBzY2hlZF9nZXRfcHJpb3JpdHlfbWluICAtIGdldCBzdGF0aWMgcHJpb3JpdHkgcmFuZ2UKICAjIGdldGRlbnRzIC0gZ2V0IGRpcmVjdG9yeSBlbnRyaWVzCiAgIyBnZXRkZW50czY0IC0gZ2V0IGRpcmVjdG9yeSBlbnRyaWVzCiAgIyBzZWxlY3QgLSBzeW5jaHJvbm91cyBJL08gbXVsdGlwbGV4aW5nCiAgIyBwc2VsZWN0IC0gc3luY2hyb25vdXMgSS9PIG11bHRpcGxleGluZwogICMgYWxsb2NfaHVnZXBhZ2VzIC0gYWxsb2NhdGUgb3IgZnJlZSBodWdlIHBhZ2VzCiAgIyBmcmVlX2h1Z2VwYWdlcyAtIGFsbG9jYXRlIG9yIGZyZWUgaHVnZSBwYWdlcwogICMgZnN5bmMgLSBzeW5jaHJvbml6ZSBhIGZpbGUncyBpbi1jb3JlIHN0YXRlIHdpdGggc3RvcmFnZSBkZXZpY2UKICAjIGZkYXRhc3luYyAtIHN5bmNocm9uaXplIGEgZmlsZSdzIGluLWNvcmUgc3RhdGUgd2l0aCBzdG9yYWdlIGRldmljZQogICMgc3lzY2FsbHMgLSBMaW51eCBzeXN0ZW0gY2FsbHMKICAjIG1lbWZkX2NyZWF0ZSAtIGNyZWF0ZSBhbiBhbm9ueW1vdXMgZmlsZQogICMgbW9kaWZ5X2xkdCAtIGdldCBvciBzZXQgYSBwZXItcHJvY2VzcyBMRFQgZW50cnkKICAjIGdldF9rZXJuZWxfc3ltcyAtIHJldHJpZXZlIGV4cG9ydGVkIGtlcm5lbCBhbmQgbW9kdWxlIHN5bWJvbHMKICAjIGxzZWVrIC0gcmVwb3NpdGlvbiByZWFkL3dyaXRlIGZpbGUgb2Zmc2V0CiAgIyBzaG1hdCAtIFN5c3RlbSBWIHNoYXJlZCBtZW1vcnkgb3BlcmF0aW9ucwogICMgc2htZHQgLSBTeXN0ZW0gViBzaGFyZWQgbWVtb3J5IG9wZXJhdGlvbnMKICAjIHRpbWVyX2RlbGV0ZSAtIGRlbGV0ZSBhIFBPU0lYIHBlci1wcm9jZXNzIHRpbWVyCiAgIyBwZXJmbW9uY3RsIC0gaW50ZXJmYWNlIHRvIElBLTY0IHBlcmZvcm1hbmNlIG1vbml0b3JpbmcgdW5pdAogICMgbW92ZV9wYWdlcyAtIG1vdmUgaW5kaXZpZHVhbCBwYWdlcyBvZiBhIHByb2Nlc3MgdG8gYW5vdGhlciBub2RlCiAgIyBjaGRpciAtIGNoYW5nZSB3b3JraW5nIGRpcmVjdG9yeQogICMgZmNoZGlyIC0gY2hhbmdlIHdvcmtpbmcgZGlyZWN0b3J5CiAgIyB0aW1lIC0gZ2V0IHRpbWUgaW4gc2Vjb25kcwogICMgX2V4aXQgLSB0ZXJtaW5hdGUgdGhlIGNhbGxpbmcgcHJvY2VzcwogICMgX0V4aXQgLSB0ZXJtaW5hdGUgdGhlIGNhbGxpbmcgcHJvY2VzcwogICMgczM5MF9zdGh5aSAtIGVtdWxhdGUgU1RIWUkgaW5zdHJ1Y3Rpb24KICAjIGlvX3N1Ym1pdCAtIHN1Ym1pdCBhc3luY2hyb25vdXMgSS9PIGJsb2NrcyBmb3IgcHJvY2Vzc2luZwogICMgbWxvY2sgLSBsb2NrIGFuZCB1bmxvY2sgbWVtb3J5CiAgIyBtbG9jazIgLSBsb2NrIGFuZCB1bmxvY2sgbWVtb3J5CiAgIyBtdW5sb2NrIC0gbG9jayBhbmQgdW5sb2NrIG1lbW9yeQogICMgbWxvY2thbGwgLSBsb2NrIGFuZCB1bmxvY2sgbWVtb3J5CiAgIyBtdW5sb2NrYWxsIC0gbG9jayBhbmQgdW5sb2NrIG1lbW9yeQogICMgdW1hc2sgLSBzZXQgZmlsZSBtb2RlIGNyZWF0aW9uIG1hc2sKICAjIGFyY2hfcHJjdGwgLSBzZXQgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHRocmVhZCBzdGF0ZQogICMgdXNlbGliIC0gbG9hZCBzaGFyZWQgbGlicmFyeQogICMgc2VuZGZpbGUgLSB0cmFuc2ZlciBkYXRhIGJldHdlZW4gZmlsZSBkZXNjcmlwdG9ycwogICMgc2htY3RsIC0gU3lzdGVtIFYgc2hhcmVkIG1lbW9yeSBjb250cm9sCiAgIyBlcG9sbF93YWl0IC0gd2FpdCBmb3IgYW4gSS9PIGV2ZW50IG9uIGFuIGVwb2xsIGZpbGUgZGVzY3JpcHRvcgogICMgZXBvbGxfcHdhaXQgLSB3YWl0IGZvciBhbiBJL08gZXZlbnQgb24gYW4gZXBvbGwgZmlsZSBkZXNjcmlwdG9yCiAgIyBzaWdhbHRzdGFjayAtIHNldCBhbmQvb3IgZ2V0IHNpZ25hbCBzdGFjayBjb250ZXh0CiAgIyBpb2N0bCAtIGNvbnRyb2wgZGV2aWNlCiAgIyBzaWduYWxmZCAtIGNyZWF0ZSBhIGZpbGUgZGVzY3JpcHRvciBmb3IgYWNjZXB0aW5nIHNpZ25hbHMKICAjIHVuc2hhcmUgLSBkaXNhc3NvY2lhdGUgcGFydHMgb2YgdGhlIHByb2Nlc3MgZXhlY3V0aW9uIGNvbnRleHQKICAjIGNocm9vdCAtIGNoYW5nZSByb290IGRpcmVjdG9yeQogICMgbWFkdmlzZSAtIGdpdmUgYWR2aWNlIGFib3V0IHVzZSBvZiBtZW1vcnkKICAjIGdldHRpZCAtIGdldCB0aHJlYWQgaWRlbnRpZmljYXRpb24KICAjIGdldHNvY2tuYW1lIC0gZ2V0IHNvY2tldCBuYW1lCiAgIyBpb19kZXN0cm95IC0gZGVzdHJveSBhbiBhc3luY2hyb25vdXMgSS9PIGNvbnRleHQKICAjIHNldHVwIC0gc2V0dXAgZGV2aWNlcyBhbmQgZmlsZXN5c3RlbXMsIG1vdW50IHJvb3QgZmlsZXN5c3RlbQogICMgbnRwX2FkanRpbWUgLSB0dW5lIGtlcm5lbCBjbG9jawogICMgc2VtZ2V0IC0gZ2V0IGEgU3lzdGVtIFYgc2VtYXBob3JlIHNldCBpZGVudGlmaWVyCiAgIyBnZXR1aWQgLSBnZXQgdXNlciBpZGVudGl0eQogICMgZ2V0ZXVpZCAtIGdldCB1c2VyIGlkZW50aXR5CiAgIyBfc3lzY2FsbCAtIGludm9raW5nIGEgc3lzdGVtIGNhbGwgd2l0aG91dCBsaWJyYXJ5IHN1cHBvcnQgKE9CU09MRVRFKQogICMgc2NoZWRfc2V0YWZmaW5pdHkgLSBcIHNldCBhbmQgZ2V0IGEgdGhyZWFkJ3MgQ1BVIGFmZmluaXR5IG1hc2sKICAjIHNjaGVkX2dldGFmZmluaXR5IC0gXCBzZXQgYW5kIGdldCBhIHRocmVhZCdzIENQVSBhZmZpbml0eSBtYXNrCiAgIyBjYWNoZWZsdXNoIC0gZmx1c2ggY29udGVudHMgb2YgaW5zdHJ1Y3Rpb24gYW5kL29yIGRhdGEgY2FjaGUKICAjIHBpdm90X3Jvb3QgLSBjaGFuZ2UgdGhlIHJvb3QgbW91bnQKICAjIG1zZ2N0bCAtIFN5c3RlbSBWIG1lc3NhZ2UgY29udHJvbCBvcGVyYXRpb25zCiAgIyBpb2N0bF9mYXQgLSBtYW5pcHVsYXRpbmcgdGhlIEZBVCBmaWxlc3lzdGVtCiAgIyBzZXRwZ2lkIC0gc2V0L2dldCBwcm9jZXNzIGdyb3VwCiAgIyBnZXRwZ2lkIC0gc2V0L2dldCBwcm9jZXNzIGdyb3VwCiAgIyBzZXRwZ3JwIC0gc2V0L2dldCBwcm9jZXNzIGdyb3VwCiAgIyBnZXRwZ3JwIC0gc2V0L2dldCBwcm9jZXNzIGdyb3VwCiAgIyBzb2NrZXRwYWlyIC0gY3JlYXRlIGEgcGFpciBvZiBjb25uZWN0ZWQgc29ja2V0cwogICMgYmRmbHVzaCAtIHN0YXJ0LCBmbHVzaCwgb3IgdHVuZSBidWZmZXItZGlydHktZmx1c2ggZGFlbW9uCiAgIyBhbGFybSAtIHNldCBhbiBhbGFybSBjbG9jayBmb3IgZGVsaXZlcnkgb2YgYSBzaWduYWwKICAjIHRpbWVyX3NldHRpbWUgLSBhcm0vZGlzYXJtIGFuZCBmZXRjaCBzdGF0ZSBvZiBQT1NJWCBwZXItcHJvY2VzcyB0aW1lcgogICMgdGltZXJfZ2V0dGltZSAtIGFybS9kaXNhcm0gYW5kIGZldGNoIHN0YXRlIG9mIFBPU0lYIHBlci1wcm9jZXNzIHRpbWVyCiAgIyBhZGRfa2V5IC0gYWRkIGEga2V5IHRvIHRoZSBrZXJuZWwncyBrZXkgbWFuYWdlbWVudCBmYWNpbGl0eQogICMgcnRfc2lncXVldWVpbmZvIC0gcXVldWUgYSBzaWduYWwgYW5kIGRhdGEKICAjIHJ0X3Rnc2lncXVldWVpbmZvIC0gcXVldWUgYSBzaWduYWwgYW5kIGRhdGEKICAjIHVzZXJmYXVsdGZkIC0gY3JlYXRlIGEgZmlsZSBkZXNjcmlwdG9yIGZvciBoYW5kbGluZyBwYWdlIGZhdWx0cyBpbiB1c2VyIHNwYWNlCiAgIyBzZW1vcCAtIFN5c3RlbSBWIHNlbWFwaG9yZSBvcGVyYXRpb25zCiAgIyBzZW10aW1lZG9wIC0gU3lzdGVtIFYgc2VtYXBob3JlIG9wZXJhdGlvbnMKICAjIGdldGdpZCAtIGdldCBncm91cCBpZGVudGl0eQogICMgZ2V0ZWdpZCAtIGdldCBncm91cCBpZGVudGl0eQogICMgZ2V0cGlkIC0gZ2V0IHByb2Nlc3MgaWRlbnRpZmljYXRpb24KICAjIGdldHBwaWQgLSBnZXQgcHJvY2VzcyBpZGVudGlmaWNhdGlvbgogICMgc2lncHJvY21hc2sgLSBleGFtaW5lIGFuZCBjaGFuZ2UgYmxvY2tlZCBzaWduYWxzCiAgIyBydF9zaWdwcm9jbWFzayAtIGV4YW1pbmUgYW5kIGNoYW5nZSBibG9ja2VkIHNpZ25hbHMKICAjIHVuYW1lIC0gZ2V0IG5hbWUgYW5kIGluZm9ybWF0aW9uIGFib3V0IGN1cnJlbnQga2VybmVsCiAgIyBzdGF0eCAtIGdldCBmaWxlIHN0YXR1cyAoZXh0ZW5kZWQpCiAgIyBpb2N0bF9maWNsb25lcmFuZ2UgLSBzaGFyZSBzb21lIHRoZSBkYXRhIG9mIG9uZSBmaWxlIHdpdGggYW5vdGhlciBmaWxlCiAgIyBpb2N0bF9maWNsb25lIC0gc2hhcmUgc29tZSB0aGUgZGF0YSBvZiBvbmUgZmlsZSB3aXRoIGFub3RoZXIgZmlsZQogICMgbXFfZ2V0c2V0YXR0ciAtIGdldC9zZXQgbWVzc2FnZSBxdWV1ZSBhdHRyaWJ1dGVzCiAgIyBpb3ByaW9fZ2V0IC0gZ2V0L3NldCBJL08gc2NoZWR1bGluZyBjbGFzcyBhbmQgcHJpb3JpdHkKICAjIGlvcHJpb19zZXQgLSBnZXQvc2V0IEkvTyBzY2hlZHVsaW5nIGNsYXNzIGFuZCBwcmlvcml0eQogICMgZXBvbGxfY3RsIC0gY29udHJvbCBpbnRlcmZhY2UgZm9yIGFuIGVwb2xsIGZpbGUgZGVzY3JpcHRvcgogICMgc3luYyAtIGNvbW1pdCBmaWxlc3lzdGVtIGNhY2hlcyB0byBkaXNrCiAgIyBzeW5jZnMgLSBjb21taXQgZmlsZXN5c3RlbSBjYWNoZXMgdG8gZGlzawogICMgc2V0c2lkIC0gY3JlYXRlcyBhIHNlc3Npb24gYW5kIHNldHMgdGhlIHByb2Nlc3MgZ3JvdXAgSUQKICAjIHNodXRkb3duIC0gc2h1dCBkb3duIHBhcnQgb2YgYSBmdWxsLWR1cGxleCBjb25uZWN0aW9uCiAgIyBnZXRzaWQgLSBnZXQgc2Vzc2lvbiBJRAogICMgZ2V0X3RocmVhZF9hcmVhIC0gbWFuaXB1bGF0ZSB0aHJlYWQtbG9jYWwgc3RvcmFnZSBpbmZvcm1hdGlvbgogICMgc2V0X3RocmVhZF9hcmVhIC0gbWFuaXB1bGF0ZSB0aHJlYWQtbG9jYWwgc3RvcmFnZSBpbmZvcm1hdGlvbgogICMgdGltZXJmZF9jcmVhdGUgLSB0aW1lcnMgdGhhdCBub3RpZnkgdmlhIGZpbGUgZGVzY3JpcHRvcnMKICAjIHRpbWVyZmRfc2V0dGltZSAtIHRpbWVycyB0aGF0IG5vdGlmeSB2aWEgZmlsZSBkZXNjcmlwdG9ycwogICMgdGltZXJmZF9nZXR0aW1lIC0gdGltZXJzIHRoYXQgbm90aWZ5IHZpYSBmaWxlIGRlc2NyaXB0b3JzCiAgIyBpb2N0bF9maWRlZHVwZXJhbmdlIC0gc2hhcmUgc29tZSB0aGUgZGF0YSBvZiBvbmUgZmlsZSB3aXRoIGFub3RoZXIgZmlsZQogICMgbmFtZV90b19oYW5kbGVfYXQgLSBvYnRhaW4gaGFuZGxlIGZvciBhIHBhdGhuYW1lIGFuZCBvcGVuIGZpbGUgdmlhIGEgaGFuZGxlCiAgIyBvcGVuX2J5X2hhbmRsZV9hdCAtIG9idGFpbiBoYW5kbGUgZm9yIGEgcGF0aG5hbWUgYW5kIG9wZW4gZmlsZSB2aWEgYSBoYW5kbGUKICAjIGZ1dGV4IC0gZmFzdCB1c2VyLXNwYWNlIGxvY2tpbmcKICAjIGlvY3RsX25zIC0gaW9jdGwoKSBvcGVyYXRpb25zIGZvciBMaW51eCBuYW1lc3BhY2VzCiAgIyBwaWRmZF9zZW5kX3NpZ25hbCAtIHNlbmQgYSBzaWduYWwgdG8gYSBwcm9jZXNzIHNwZWNpZmllZCBieSBhIGZpbGUgZGVzY3JpcHRvcgogICMgY2xvbmUgLSBjcmVhdGUgYSBjaGlsZCBwcm9jZXNzCiAgIyBfX2Nsb25lMiAtIGNyZWF0ZSBhIGNoaWxkIHByb2Nlc3MKICAjIGNsb25lMyAtIGNyZWF0ZSBhIGNoaWxkIHByb2Nlc3MKICAjIHRpbWVzIC0gZ2V0IHByb2Nlc3MgdGltZXMKICAjIHN5c2luZm8gLSByZXR1cm4gc3lzdGVtIGluZm9ybWF0aW9uCiAgIyBpcGMgLSBTeXN0ZW0gViBJUEMgc3lzdGVtIGNhbGxzCiAgIyBldmVudGZkIC0gY3JlYXRlIGEgZmlsZSBkZXNjcmlwdG9yIGZvciBldmVudCBub3RpZmljYXRpb24KICAjIHdhaXQgLSB3YWl0IGZvciBwcm9jZXNzIHRvIGNoYW5nZSBzdGF0ZQogICMgd2FpdHBpZCAtIHdhaXQgZm9yIHByb2Nlc3MgdG8gY2hhbmdlIHN0YXRlCiAgIyB3YWl0aWQgLSB3YWl0IGZvciBwcm9jZXNzIHRvIGNoYW5nZSBzdGF0ZQogICMgZ2V0ZG9tYWlubmFtZSAtIGdldC9zZXQgTklTIGRvbWFpbiBuYW1lCiAgIyBpZGxlIC0gbWFrZSBwcm9jZXNzIDAgaWRsZQogICMgaW5vdGlmeV9hZGRfd2F0Y2ggLSBhZGQgYSB3YXRjaCB0byBhbiBpbml0aWFsaXplZCBpbm90aWZ5IGluc3RhbmNlCiAgIyBnZXRfbWVtcG9saWN5IC0gcmV0cmlldmUgTlVNQSBtZW1vcnkgcG9saWN5IGZvciBhIHRocmVhZAogICMgYnBmIC0gcGVyZm9ybSBhIGNvbW1hbmQgb24gYW4gZXh0ZW5kZWQgQlBGIG1hcCBvciBwcm9ncmFtCiAgIyBnZXRzb2Nrb3B0IC0gZ2V0IGFuZCBzZXQgb3B0aW9ucyBvbiBzb2NrZXRzCiAgIyBzZXRzb2Nrb3B0IC0gZ2V0IGFuZCBzZXQgb3B0aW9ucyBvbiBzb2NrZXRzCiAgIyBnZXRpdGltZXIgLSBnZXQgb3Igc2V0IHZhbHVlIG9mIGFuIGludGVydmFsIHRpbWVyCiAgIyBzZXRpdGltZXIgLSBnZXQgb3Igc2V0IHZhbHVlIG9mIGFuIGludGVydmFsIHRpbWVyCiAgIyBtZW1iYXJyaWVyIC0gaXNzdWUgbWVtb3J5IGJhcnJpZXJzIG9uIGEgc2V0IG9mIHRocmVhZHMKICAjIG1wcm90ZWN0IC0gc2V0IHByb3RlY3Rpb24gb24gYSByZWdpb24gb2YgbWVtb3J5CiAgIyBwa2V5X21wcm90ZWN0IC0gc2V0IHByb3RlY3Rpb24gb24gYSByZWdpb24gb2YgbWVtb3J5CiAgIyBnZXRjcHUgLSBkZXRlcm1pbmUgQ1BVIGFuZCBOVU1BIG5vZGUgb24gd2hpY2ggdGhlIGNhbGxpbmcgdGhyZWFkIGlzIHJ1bm5pbmcKICAjIGlvY3RsX2ZzbGFiZWwgLSBnZXQgb3Igc2V0IGEgZmlsZXN5c3RlbSBsYWJlbAogICMgbGlzdHhhdHRyIC0gbGlzdCBleHRlbmRlZCBhdHRyaWJ1dGUgbmFtZXMKICAjIGxsaXN0eGF0dHIgLSBsaXN0IGV4dGVuZGVkIGF0dHJpYnV0ZSBuYW1lcwogICMgZmxpc3R4YXR0ciAtIGxpc3QgZXh0ZW5kZWQgYXR0cmlidXRlIG5hbWVzCiAgIyBfbGxzZWVrIC0gcmVwb3NpdGlvbiByZWFkL3dyaXRlIGZpbGUgb2Zmc2V0CiAgIyBmY250bCAtIG1hbmlwdWxhdGUgZmlsZSBkZXNjcmlwdG9yCiAgIyB1c3RhdCAtIGdldCBmaWxlc3lzdGVtIHN0YXRpc3RpY3MKICAjIHNpZ25hbCAtIEFOU0kgQyBzaWduYWwgaGFuZGxpbmcKICAjIG5hbm9zbGVlcCAtIGhpZ2gtcmVzb2x1dGlvbiBzbGVlcAogICMgY29ubmVjdCAtIGluaXRpYXRlIGEgY29ubmVjdGlvbiBvbiBhIHNvY2tldAogICMgdm04Nm9sZCAtIGVudGVyIHZpcnR1YWwgODA4NiBtb2RlCiAgIyB2bTg2IC0gZW50ZXIgdmlydHVhbCA4MDg2IG1vZGUKICAjIGZhbm90aWZ5X2luaXQgLSBjcmVhdGUgYW5kIGluaXRpYWxpemUgZmFub3RpZnkgZ3JvdXAKICAjIG1pZ3JhdGVfcGFnZXMgLSBtb3ZlIGFsbCBwYWdlcyBpbiBhIHByb2Nlc3MgdG8gYW5vdGhlciBzZXQgb2Ygbm9kZXMKICAjIHJlc3RhcnRfc3lzY2FsbCAtIHJlc3RhcnQgYSBzeXN0ZW0gY2FsbCBhZnRlciBpbnRlcnJ1cHRpb24gYnkgYSBzdG9wIHNpZ25hbAogICMgY2xvc2UgLSBjbG9zZSBhIGZpbGUgZGVzY3JpcHRvcgogICMgbXNncmN2IC0gU3lzdGVtIFYgbWVzc2FnZSBxdWV1ZSBvcGVyYXRpb25zCiAgIyBtc2dzbmQgLSBTeXN0ZW0gViBtZXNzYWdlIHF1ZXVlIG9wZXJhdGlvbnMKICAjIHJlYWR2IC0gcmVhZCBvciB3cml0ZSBkYXRhIGludG8gbXVsdGlwbGUgYnVmZmVycwogICMgd3JpdGV2IC0gcmVhZCBvciB3cml0ZSBkYXRhIGludG8gbXVsdGlwbGUgYnVmZmVycwogICMgcHJlYWR2IC0gcmVhZCBvciB3cml0ZSBkYXRhIGludG8gbXVsdGlwbGUgYnVmZmVycwogICMgcHdyaXRldiAtIHJlYWQgb3Igd3JpdGUgZGF0YSBpbnRvIG11bHRpcGxlIGJ1ZmZlcnMKICAjIHByZWFkdjIgLSByZWFkIG9yIHdyaXRlIGRhdGEgaW50byBtdWx0aXBsZSBidWZmZXJzCiAgIyBwd3JpdGV2MiAtIHJlYWQgb3Igd3JpdGUgZGF0YSBpbnRvIG11bHRpcGxlIGJ1ZmZlcnMKICAjIHN5c2xvZyAtIHJlYWQgYW5kL29yIGNsZWFyIGtlcm5lbCBtZXNzYWdlIHJpbmcgYnVmZmVyOyBzZXQgY29uc29sZV9sb2dsZXZlbAogICMga2xvZ2N0bCAtIHJlYWQgYW5kL29yIGNsZWFyIGtlcm5lbCBtZXNzYWdlIHJpbmcgYnVmZmVyOyBzZXQgY29uc29sZV9sb2dsZXZlbAogICMgc2NoZWRfeWllbGQgLSB5aWVsZCB0aGUgcHJvY2Vzc29yCiAgIyB2aGFuZ3VwIC0gdmlydHVhbGx5IGhhbmd1cCB0aGUgY3VycmVudCB0ZXJtaW5hbAogICMgaW9jdGxfaWZsYWdzIC0gaW9jdGwoKSBvcGVyYXRpb25zIGZvciBpbm9kZSBmbGFncwogICMgc2dldG1hc2sgLSBtYW5pcHVsYXRpb24gb2Ygc2lnbmFsIG1hc2sgKG9ic29sZXRlKQogICMgc3NldG1hc2sgLSBtYW5pcHVsYXRpb24gb2Ygc2lnbmFsIG1hc2sgKG9ic29sZXRlKQogICMgc3luY19maWxlX3JhbmdlIC0gc3luYyBhIGZpbGUgc2VnbWVudCB3aXRoIGRpc2sKICAjIGNvcHlfZmlsZV9yYW5nZSAtIENvcHkgYSByYW5nZSBvZiBkYXRhIGZyb20gb25lIGZpbGUgdG8gYW5vdGhlcgogICMgc2lncGVuZGluZyAtIGV4YW1pbmUgcGVuZGluZyBzaWduYWxzCiAgIyBydF9zaWdwZW5kaW5nIC0gZXhhbWluZSBwZW5kaW5nIHNpZ25hbHMKICAjIGdldHVud2luZCAtIGNvcHkgdGhlIHVud2luZCBkYXRhIHRvIGNhbGxlcidzIGJ1ZmZlcgogICMgbXN5bmMgLSBzeW5jaHJvbml6ZSBhIGZpbGUgd2l0aCBhIG1lbW9yeSBtYXAKICAjIGdldF9yb2J1c3RfbGlzdCAtIGdldC9zZXQgbGlzdCBvZiByb2J1c3QgZnV0ZXhlcwogICMgc2V0X3JvYnVzdF9saXN0IC0gZ2V0L3NldCBsaXN0IG9mIHJvYnVzdCBmdXRleGVzCiAgIyBkdXAgLSBkdXBsaWNhdGUgYSBmaWxlIGRlc2NyaXB0b3IKICAjIGR1cDIgLSBkdXBsaWNhdGUgYSBmaWxlIGRlc2NyaXB0b3IKICAjIGR1cDMgLSBkdXBsaWNhdGUgYSBmaWxlIGRlc2NyaXB0b3IKICAjIHMzOTBfcGNpX21taW9fd3JpdGUgLSB0cmFuc2ZlciBkYXRhIHRvL2Zyb20gUENJIE1NSU8gbWVtb3J5IHBhZ2UKICAjIHMzOTBfcGNpX21taW9fcmVhZCAtIHRyYW5zZmVyIGRhdGEgdG8vZnJvbSBQQ0kgTU1JTyBtZW1vcnkgcGFnZQogICMgcGF1c2UgLSB3YWl0IGZvciBzaWduYWwKICAjIHN3YXBvbiAtIHN0YXJ0L3N0b3Agc3dhcHBpbmcgdG8gZmlsZS9kZXZpY2UKICAjIHN3YXBvZmYgLSBzdGFydC9zdG9wIHN3YXBwaW5nIHRvIGZpbGUvZGV2aWNlCgogICMgUmVjb3JkIHR5cGUgbm9ybWFsaXphdGlvbnMKICAjIFVzZWZ1bCBsaW5rczoKICAjIGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS90b3J2YWxkcy9saW51eC92NC4xNi9pbmNsdWRlL3VhcGkvbGludXgvYXVkaXQuaAogICMgaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2xpbnV4LWF1ZGl0L2F1ZGl0LXVzZXJzcGFjZS80ZDkzMzMwMWIxODM1Y2FmYTA4YjllOWVmNzA1YzhmYjZjOTZjYjYyL2xpYi9saWJhdWRpdC5oCiAgIyBodHRwczovL3d3dy5lbGFzdGljLmNvL2d1aWRlL2VuL2Vjcy9jdXJyZW50L2Vjcy1hbGxvd2VkLXZhbHVlcy1ldmVudC1jYXRlZ29yeS5odG1sCgogICMgSUFNIHJlbGF0ZWQgZXZlbnRzCgogICMgQVVESVRfQUNDVF9MT0NLIC0gVXNlcidzIGFjY291bnQgbG9ja2VkIGJ5IGFkbWluCiAgLSByZWNvcmRfdHlwZXM6IEFDQ1RfTE9DSwogICAgYWN0aW9uOiBsb2NrZWQtYWNjb3VudAogICAgZWNzOgogICAgICA8PDogKmVjcy1pYW0KICAgICAgdHlwZToKICAgICAgICAtIHVzZXIKICAgICAgICAtIGluZm8KICAjIEFVRElUX0FDQ1RfVU5MT0NLIC0gVXNlcidzIGFjY291bnQgdW5sb2NrZWQgYnkgYWRtaW4KICAtIHJlY29yZF90eXBlczogQUNDVF9VTkxPQ0sKICAgIGFjdGlvbjogdW5sb2NrZWQtYWNjb3VudAogICAgZWNzOgogICAgICA8PDogKmVjcy1pYW0KICAgICAgdHlwZToKICAgICAgICAtIHVzZXIKICAgICAgICAtIGluZm8KICAjIEFVRElUX0FERF9HUk9VUCAtIEdyb3VwIGFjY291bnQgYWRkZWQKICAtIHJlY29yZF90eXBlczogQUREX0dST1VQCiAgICBhY3Rpb246IGFkZGVkLWdyb3VwLWFjY291bnQtdG8KICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogW2lkLCBhY2N0XQogICAgICB3aGF0OiBhY2NvdW50CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWlhbQogICAgICA8PDogKmVjcy1ncm91cC1tb2RpZmljYXRpb24tbWFwcGluZ3MKICAgICAgdHlwZToKICAgICAgICAtIGdyb3VwCiAgICAgICAgLSBjcmVhdGlvbgoKICAjIEFVRElUX0FERF9VU0VSIC0gVXNlciBhY2NvdW50IGFkZGVkCiAgLSByZWNvcmRfdHlwZXM6IEFERF9VU0VSCiAgICBhY3Rpb246IGFkZGVkLXVzZXItYWNjb3VudAogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBbaWQsIGFjY3RdCiAgICAgIHdoYXQ6IGFjY291bnQKICAgIGVjczoKICAgICAgPDw6ICplY3MtaWFtCiAgICAgIDw8OiAqZWNzLXVzZXItbW9kaWZpY2F0aW9uLW1hcHBpbmdzCiAgICAgIHR5cGU6CiAgICAgICAgLSB1c2VyCiAgICAgICAgLSBjcmVhdGlvbgogICMgQVVESVRfREVMX0dST1VQIC0gR3JvdXAgYWNjb3VudCBkZWxldGVkCiAgLSByZWNvcmRfdHlwZXM6IERFTF9HUk9VUAogICAgYWN0aW9uOiBkZWxldGVkLWdyb3VwLWFjY291bnQtZnJvbQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBbaWQsIGFjY3RdCiAgICAgIHdoYXQ6IGFjY291bnQKICAgIGVjczoKICAgICAgPDw6ICplY3MtaWFtCiAgICAgIDw8OiAqZWNzLWdyb3VwLW1vZGlmaWNhdGlvbi1tYXBwaW5ncwogICAgICB0eXBlOgogICAgICAgIC0gZ3JvdXAKICAgICAgICAtIGRlbGV0aW9uCiAgIyBBVURJVF9ERUxfVVNFUiAtIFVzZXIgYWNjb3VudCBkZWxldGVkCiAgLSByZWNvcmRfdHlwZXM6IERFTF9VU0VSCiAgICBhY3Rpb246IGRlbGV0ZWQtdXNlci1hY2NvdW50CiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IFtpZCwgYWNjdF0KICAgICAgd2hhdDogYWNjb3VudAogICAgZWNzOgogICAgICA8PDogKmVjcy1pYW0KICAgICAgPDw6ICplY3MtdXNlci1tb2RpZmljYXRpb24tbWFwcGluZ3MKICAgICAgdHlwZToKICAgICAgICAtIHVzZXIKICAgICAgICAtIGRlbGV0aW9uCiAgIyBBVURJVF9HUlBfTUdNVCAtIEdyb3VwIGFjY291bnQgYXR0ciB3YXMgbW9kaWZpZWQKICAtIHJlY29yZF90eXBlczogR1JQX01HTVQKICAgIGFjdGlvbjogbW9kaWZpZWQtZ3JvdXAtYWNjb3VudAogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBbaWQsIGFjY3RdCiAgICAgIHdoYXQ6IGFjY291bnQKICAgIGVjczoKICAgICAgPDw6ICplY3MtaWFtCiAgICAgIHR5cGU6CiAgICAgICAgLSBncm91cAogICAgICAgIC0gY2hhbmdlCiAgICAgIG1hcHBpbmdzOgogICAgICAgIC0gZnJvbTogc3ViamVjdC5wcmltYXJ5CiAgICAgICAgICB0bzogdXNlcgogICAgICAgIC0gZnJvbTogc3ViamVjdC5zZWNvbmRhcnkKICAgICAgICAgIHRvOiBncm91cC50YXJnZXQKICAgICAgICAtIGZyb206IHVpZC51aWQKICAgICAgICAgIHRvOiB1c2VyLmVmZmVjdGl2ZQogICMgQVVESVRfUk9MRV9BU1NJR04gLSBBZG1pbiBhc3NpZ25lZCB1c2VyIHRvIHJvbGUKICAtIHJlY29yZF90eXBlczogUk9MRV9BU1NJR04KICAgIGFjdGlvbjogYXNzaWduZWQtdXNlci1yb2xlLXRvCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IFtpZCwgYWNjdF0KICAgICAgd2hhdDogYWNjb3VudAogICAgZWNzOgogICAgICA8PDogKmVjcy1pYW0KICAgICAgdHlwZToKICAgICAgICAtIHVzZXIKICAgICAgICAtIGNoYW5nZQogICMgQVVESVRfUk9MRV9NT0RJRlkgLSBBZG1pbiBtb2RpZmllZCBhIHJvbGUKICAtIHJlY29yZF90eXBlczogUk9MRV9NT0RJRlkKICAgIGFjdGlvbjogbW9kaWZpZWQtcm9sZQogICAgZWNzOgogICAgICA8PDogKmVjcy1pYW0KICAgICAgdHlwZToKICAgICAgICAtIGNoYW5nZQogICMgQVVESVRfUk9MRV9SRU1PVkUgLSBBZG1pbiByZW1vdmVkIHVzZXIgZnJvbSByb2xlCiAgLSByZWNvcmRfdHlwZXM6IFJPTEVfUkVNT1ZFCiAgICBhY3Rpb246IHJlbW92ZWQtdXNlci1yb2xlLWZyb20KICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogW2lkLCBhY2N0XQogICAgICB3aGF0OiBhY2NvdW50CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWlhbQogICAgICB0eXBlOgogICAgICAgIC0gdXNlcgogICAgICAgIC0gY2hhbmdlCiAgIyBBVURJVF9VU0VSX01HTVQgLSBVc2VyIGFjY3QgYXR0cmlidXRlIGNoYW5nZQogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogVVNFUl9NR01UCiAgICBhY3Rpb246IG1vZGlmaWVkLXVzZXItYWNjb3VudAogICAgZWNzOgogICAgICA8PDogKmVjcy1pYW0KICAgICAgdHlwZToKICAgICAgICAtIHVzZXIKICAgICAgICAtIGNoYW5nZQogICAgICBtYXBwaW5nczoKICAgICAgICAtIGZyb206IHN1YmplY3QucHJpbWFyeQogICAgICAgICAgdG86IHVzZXIKICAgICAgICAtIGZyb206IHN1YmplY3Quc2Vjb25kYXJ5CiAgICAgICAgICB0bzogdXNlci50YXJnZXQKICAgICAgICAtIGZyb206IHVpZC51aWQKICAgICAgICAgIHRvOiB1c2VyLmVmZmVjdGl2ZQogICMgQVVESVRfVVNFUl9DSEFVVEhUT0sgLSBVc2VyIGFjY3QgcGFzc3dvcmQgb3IgcGluIGNoYW5nZWQKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IFVTRVJfQ0hBVVRIVE9LCiAgICBhY3Rpb246IGNoYW5nZWQtcGFzc3dvcmQKICAgIGVjczoKICAgICAgPDw6ICplY3MtaWFtCiAgICAgIHR5cGU6CiAgICAgICAgLSB1c2VyCiAgICAgICAgLSBjaGFuZ2UKICAgICAgbWFwcGluZ3M6CiAgICAgICAgLSBmcm9tOiBzdWJqZWN0LnByaW1hcnkKICAgICAgICAgIHRvOiB1c2VyCiAgICAgICAgLSBmcm9tOiB1aWQudWlkCiAgICAgICAgICB0bzogdXNlci5lZmZlY3RpdmUKICAgICAgICAtIGZyb206IHN1YmplY3Quc2Vjb25kYXJ5CiAgICAgICAgICB0bzogdXNlci50YXJnZXQKCiAgIyBBVURJVF9HUlBfQ0hBVVRIVE9LIC0gR3JvdXAgYWNjdCBwYXNzd29yZCBvciBwaW4gY2hhbmdlZAogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogR1JQX0NIQVVUSFRPSwogICAgYWN0aW9uOiBjaGFuZ2VkLWdyb3VwLXBhc3N3b3JkCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGFjY3QKICAgICAgd2hhdDogdXNlci1zZXNzaW9uCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWlhbQogICAgICB0eXBlOgogICAgICAgIC0gZ3JvdXAKICAgICAgICAtIGNoYW5nZQogICAgICBtYXBwaW5nczoKICAgICAgICAtIGZyb206IHN1YmplY3QucHJpbWFyeQogICAgICAgICAgdG86IHVzZXIKICAgICAgICAtIGZyb206IHVpZC51aWQKICAgICAgICAgIHRvOiB1c2VyLmVmZmVjdGl2ZQogICAgICAgIC0gZnJvbTogc3ViamVjdC5zZWNvbmRhcnkKICAgICAgICAgIHRvOiBncm91cC50YXJnZXQKCiAgIyBBdXRoZW50aWNhdGlvbiByZWxhdGVkIGV2ZW50cwoKICAjIEFVRElUX0NSRURfQUNRIC0gVXNlciBjcmVkZW50aWFsIGFjcXVpcmVkCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBDUkVEX0FDUQogICAgYWN0aW9uOiBhY3F1aXJlZC1jcmVkZW50aWFscwogICAgZWNzOiAqZWNzLWF1dGgKICAjIEFVRElUX0NSRURfRElTUCAtIFVzZXIgY3JlZGVudGlhbCBkaXNwb3NlZAogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogQ1JFRF9ESVNQCiAgICBhY3Rpb246IGRpc3Bvc2VkLWNyZWRlbnRpYWxzCiAgICBlY3M6ICplY3MtYXV0aAogICMgQVVESVRfQ1JFRF9SRUZSIC0gVXNlciBjcmVkZW50aWFsIHJlZnJlc2hlZAogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogQ1JFRF9SRUZSCiAgICBhY3Rpb246IHJlZnJlc2hlZC1jcmVkZW50aWFscwogICAgZWNzOiAqZWNzLWF1dGgKICAjIEFVRElUX0dSUF9BVVRIIC0gQXV0aGVudGljYXRpb24gZm9yIGdyb3VwIHBhc3N3b3JkCiAgLSByZWNvcmRfdHlwZXM6IEdSUF9BVVRICiAgICBhY3Rpb246IGF1dGhlbnRpY2F0ZWQtdG8tZ3JvdXAKICAgIGVjczogKmVjcy1hdXRoCiAgIyBBVURJVF9MT0dJTiAtIERlZmluZSB0aGUgbG9naW4gaWQgYW5kIGluZm9ybWF0aW9uCiAgLSByZWNvcmRfdHlwZXM6IExPR0lOCiAgICBhY3Rpb246IGNoYW5nZWQtbG9naW4taWQtdG8KICAgIHN1YmplY3Q6CiAgICAgIHByaW1hcnk6IFtvbGRfYXVpZCwgb2xkLWF1aWRdCiAgICAgIHNlY29uZGFyeTogdWlkCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IFtuZXctYXVpZCwgbmV3X2F1aWQsIGF1aWRdCiAgICAgIHdoYXQ6IHVzZXItc2Vzc2lvbgogICAgZWNzOgogICAgICA8PDogKmVjcy1hdXRoCiAgICAgIHR5cGU6IHN0YXJ0CiAgICAgIG1hcHBpbmdzOgogICAgICAgIC0gZnJvbTogc3ViamVjdC5wcmltYXJ5CiAgICAgICAgICB0bzogdXNlcgogICAgICAgIC0gZnJvbTogb2JqZWN0LnByaW1hcnkKICAgICAgICAgIHRvOiB1c2VyLmVmZmVjdGl2ZQogICMgQVVESVRfVVNFUl9BQ0NUIC0gVXNlciBzeXN0ZW0gYWNjZXNzIGF1dGhvcml6YXRpb24KICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IFVTRVJfQUNDVAogICAgYWN0aW9uOiB3YXMtYXV0aG9yaXplZAogICAgZWNzOiAqZWNzLWF1dGgKICAjIEFVRElUX1VTRVJfQVVUSCAtIFVzZXIgc3lzdGVtIGFjY2VzcyBhdXRoZW50aWNhdGlvbgogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogVVNFUl9BVVRICiAgICBhY3Rpb246IGF1dGhlbnRpY2F0ZWQKICAgIGVjczogKmVjcy1hdXRoCiAgIyBBVURJVF9VU0VSX0VORCAtIFVzZXIgc2Vzc2lvbiBlbmQKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IFVTRVJfRU5ECiAgICBhY3Rpb246IGVuZGVkLXNlc3Npb24KICAgIGVjczogKmVjcy1hdXRoCiAgIyBBVURJVF9VU0VSX0VSUiAtIFVzZXIgYWNjdCBzdGF0ZSBlcnJvcgogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogVVNFUl9FUlIKICAgIGFjdGlvbjogZXJyb3IKICAgIHNvdXJjZV9pcDogW2FkZHJdCiAgICBlY3M6ICplY3MtYXV0aAogICMgQVVESVRfVVNFUl9MT0dJTiAtIFVzZXIgaGFzIGxvZ2dlZCBpbgogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogVVNFUl9MT0dJTgogICAgYWN0aW9uOiBsb2dnZWQtaW4KICAgIHNvdXJjZV9pcDogW2FkZHJdCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWF1dGgKICAgICAgdHlwZTogc3RhcnQKICAjIEFVRElUX1VTRVJfTE9HT1VUIC0gVXNlciBoYXMgbG9nZ2VkIG91dAogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogVVNFUl9MT0dPVVQKICAgIGFjdGlvbjogbG9nZ2VkLW91dAogICAgZWNzOgogICAgICA8PDogKmVjcy1hdXRoCiAgICAgIHR5cGU6IGVuZAogICMgQVVESVRfVVNFUl9ST0xFX0NIQU5HRSAtIFVzZXIgY2hhbmdlZCB0byBhIG5ldyByb2xlCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBVU0VSX1JPTEVfQ0hBTkdFCiAgICBhY3Rpb246IGNoYW5nZWQtcm9sZS10bwogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBzZWxlY3RlZC1jb250ZXh0CiAgICAgIHdoYXQ6IHVzZXItc2Vzc2lvbgogICMgQVVESVRfVVNFUl9TVEFSVCAtIFVzZXIgc2Vzc2lvbiBzdGFydAogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogVVNFUl9TVEFSVAogICAgYWN0aW9uOiBzdGFydGVkLXNlc3Npb24KICAgIHNvdXJjZV9pcDogW2FkZHJdCiAgICBlY3M6ICplY3MtYXV0aAoKICAjIEhvc3QgdmlydHVhbGl6YXRpb24gZXZlbnRzCgogICMgQVVESVRfVklSVF9DT05UUk9MIC0gU3RhcnQsIFBhdXNlLCBTdG9wIFZNCiAgLSByZWNvcmRfdHlwZXM6IFZJUlRfQ09OVFJPTAogICAgYWN0aW9uOiBpc3N1ZWQtdm0tY29udHJvbAogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBvcAogICAgICBzZWNvbmRhcnk6IHZtCiAgICAgIHdoYXQ6IHZpcnR1YWwtbWFjaGluZQogICAgZWNzOiAqZWNzLWhvc3QKICAjIEFVRElUX1ZJUlRfQ1JFQVRFIC0gQ3JlYXRpb24gb2YgZ3Vlc3QgaW1hZ2UKICAtIHJlY29yZF90eXBlczogVklSVF9DUkVBVEUKICAgIGFjdGlvbjogY3JlYXRlZC12bS1pbWFnZQogICAgZWNzOiAqZWNzLWhvc3QKICAjIEFVRElUX1ZJUlRfREVTVFJPWSAtIERlc3RydWN0aW9uIG9mIGd1ZXN0IGltYWdlCiAgLSByZWNvcmRfdHlwZXM6IFZJUlRfREVTVFJPWQogICAgYWN0aW9uOiBkZWxldGVkLXZtLWltYWdlCiAgICBlY3M6ICplY3MtaG9zdAogICMgQVVESVRfVklSVF9JTlRFR1JJVFlfQ0hFQ0sgLSBHdWVzdCBpbnRlZ3JpdHkgcmVzdWx0cwogIC0gcmVjb3JkX3R5cGVzOiBWSVJUX0lOVEVHUklUWV9DSEVDSwogICAgYWN0aW9uOiBjaGVja2VkLWludGVncml0eS1vZgogICAgZWNzOiAqZWNzLWhvc3QKICAjIEFVRElUX1ZJUlRfTUFDSElORV9JRCAtIEJpbmRpbmcgb2YgbGFiZWwgdG8gVk0KICAtIHJlY29yZF90eXBlczogVklSVF9NQUNISU5FX0lECiAgICBhY3Rpb246IGFzc2lnbmVkLXZtLWlkCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IHZtCiAgICAgIHdoYXQ6IHZpcnR1YWwtbWFjaGluZQogICAgZWNzOiAqZWNzLWhvc3QKICAjIEFVRElUX1ZJUlRfTUlHUkFURV9JTiAtIEluYm91bmQgZ3Vlc3QgbWlncmF0aW9uIGluZm8KICAtIHJlY29yZF90eXBlczogVklSVF9NSUdSQVRFX0lOCiAgICBhY3Rpb246IG1pZ3JhdGVkLXZtLWZyb20KICAgIGVjczogKmVjcy1ob3N0CiAgIyBBVURJVF9WSVJUX01JR1JBVEVfT1VUIC0gT3V0Ym91bmQgZ3Vlc3QgbWlncmF0aW9uIGluZm8KICAtIHJlY29yZF90eXBlczogVklSVF9NSUdSQVRFX09VVAogICAgYWN0aW9uOiBtaWdyYXRlZC12bS10bwogICAgZWNzOiAqZWNzLWhvc3QKICAjIEFVRElUX1ZJUlRfUkVTT1VSQ0UgLSBSZXNvdXJjZSBhc3NpZ25tZW50CiAgLSByZWNvcmRfdHlwZXM6IFZJUlRfUkVTT1VSQ0UKICAgIGFjdGlvbjogYXNzaWduZWQtdm0tcmVzb3VyY2UKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogcmVzcmMKICAgICAgc2Vjb25kYXJ5OiB2bQogICAgICB3aGF0OiB2aXJ0dWFsLW1hY2hpbmUKICAgIGVjczogKmVjcy1ob3N0CgogICMgVXNlcnNwYWNlIHByb2Nlc3MgZXZlbnRzCgogICMgQVVESVRfQ0hHUlBfSUQgLSBVc2VyIHNwYWNlIGdyb3VwIElEIGNoYW5nZWQKICAtIHJlY29yZF90eXBlczogQ0hHUlBfSUQKICAgIGFjdGlvbjogY2hhbmdlZC1ncm91cAogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IGNoYW5nZQogICMgQVVESVRfQ0hVU0VSX0lEIC0gQ2hhbmdlZCB1c2VyIElEIHN1cHBsZW1lbnRhbCBkYXRhCiAgLSByZWNvcmRfdHlwZXM6IENIVVNFUl9JRAogICAgYWN0aW9uOiBjaGFuZ2VkLXVzZXItaWQKICAgIGVjczoKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBjaGFuZ2UKICAjIEFVRElUX1RFU1QgLSBVc2VkIGZvciB0ZXN0IHN1Y2Nlc3MgbWVzc2FnZXMKICAtIHJlY29yZF90eXBlczogVEVTVAogICAgYWN0aW9uOiBzZW50LXRlc3QKICAgIGVjczogKmVjcy1wcm9jZXNzCiAgIyBBVURJVF9UUlVTVEVEX0FQUCAtIFRydXN0ZWQgYXBwIG1zZyAtIGZyZWVzdHlsZSB0ZXh0CiAgLSByZWNvcmRfdHlwZXM6IFRSVVNURURfQVBQCiAgICBhY3Rpb246IHVua25vd24KICAgIGVjczogKmVjcy1wcm9jZXNzCiAgIyBBVURJVF9VU0VSX0NNRCAtIFVzZXIgc2hlbGwgY29tbWFuZCBhbmQgYXJncwogIC0gcmVjb3JkX3R5cGVzOiBVU0VSX0NNRAogICAgYWN0aW9uOiByYW4tY29tbWFuZAogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBjbWQKICAgICAgd2hhdDogcHJvY2VzcwogICAgZGVzY3JpcHRpb246ID4KICAgICAgVGhlc2UgbWVzc2FnZXMgYXJlIGZyb20gdXNlci1zcGFjZSBhcHBzLCBsaWtlIHN1ZG8sIHRoYXQgbG9nIGNvbW1hbmRzCiAgICAgIGJlaW5nIHJ1biBieSBhIHVzZXIuIFRoZSB1aWQgY29udGFpbmVkIGluIHRoZXNlIG1lc3NhZ2VzIGlzIHVzZXIncyBVSUQgYXQKICAgICAgdGhlIHRpbWUgdGhlIGNvbW1hbmQgd2FzIHJ1bi4gSXQgaXMgbm90IHRoZSAidGFyZ2V0IiBVSUQgdXNlZCB0byBydW4gdGhlCiAgICAgIGNvbW1hbmQsIHdoaWNoIGlzIG5vcm1hbGx5IHJvb3QuCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogc3RhcnQKCiAgIyBIb3N0LWxldmVsIGV2ZW50cwoKICAjIEFVRElUX1NZU1RFTV9CT09UIC0gU3lzdGVtIGJvb3QKICAtIHJlY29yZF90eXBlczogU1lTVEVNX0JPT1QKICAgIGFjdGlvbjogYm9vdGVkLXN5c3RlbQogICAgb2JqZWN0OgogICAgICB3aGF0OiBzeXN0ZW0KICAgIGVjczoKICAgICAgPDw6ICplY3MtaG9zdAogICAgICB0eXBlOiBzdGFydAogICMgQVVESVRfU1lTVEVNX1JVTkxFVkVMIC0gU3lzdGVtIHJ1bmxldmVsIGNoYW5nZQogIC0gcmVjb3JkX3R5cGVzOiBTWVNURU1fUlVOTEVWRUwKICAgIGFjdGlvbjogY2hhbmdlZC10by1ydW5sZXZlbAogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBuZXctbGV2ZWwKICAgICAgd2hhdDogc3lzdGVtCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWhvc3QKICAgICAgdHlwZTogY2hhbmdlCiAgIyBBVURJVF9TWVNURU1fU0hVVERPV04gLSBTeXN0ZW0gc2h1dGRvd24KICAtIHJlY29yZF90eXBlczogU1lTVEVNX1NIVVRET1dOCiAgICBhY3Rpb246IHNodXRkb3duLXN5c3RlbQogICAgb2JqZWN0OgogICAgICB3aGF0OiBzeXN0ZW0KICAgIGVjczoKICAgICAgPDw6ICplY3MtaG9zdAogICAgICB0eXBlOiBlbmQKCiAgIyBTZXJ2aWNlLWxldmVsIGV2ZW50cwoKICAjIEFVRElUX1NFUlZJQ0VfU1RBUlQgLSBTZXJ2aWNlIChkYWVtb24pIHN0YXJ0CiAgLSByZWNvcmRfdHlwZXM6IFNFUlZJQ0VfU1RBUlQKICAgIGFjdGlvbjogc3RhcnRlZC1zZXJ2aWNlCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IHVuaXQKICAgICAgd2hhdDogc2VydmljZQogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IHN0YXJ0CiAgIyBBVURJVF9TRVJWSUNFX1NUT1AgLSBTZXJ2aWNlIChkYWVtb24pIHN0b3AKICAtIHJlY29yZF90eXBlczogU0VSVklDRV9TVE9QCiAgICBhY3Rpb246IHN0b3BwZWQtc2VydmljZQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiB1bml0CiAgICAgIHdoYXQ6IHNlcnZpY2UKICAgIGVjczoKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBzdG9wCgogICMgQXVkaXRkIGludGVybmFsIGV2ZW50cwoKICAjIEFVRElUX0NPTkZJR19DSEFOR0UgLSBBdWRpdCBzeXN0ZW0gY29uZmlndXJhdGlvbiBjaGFuZ2UKICAtIHJlY29yZF90eXBlczogQ09ORklHX0NIQU5HRQogICAgYWN0aW9uOiBjaGFuZ2VkLWF1ZGl0LWNvbmZpZ3VyYXRpb24KICAgIG9iamVjdDoKICAgICAgcHJpbWFyeToKICAgICAgICBbb3AsIGtleSwgYXVkaXRfZW5hYmxlZCwgYXVkaXRfcGlkLCBhdWRpdF9iYWNrbG9nX2xpbWl0LCBhdWRpdF9mYWlsdXJlXQogICAgICB3aGF0OiBhdWRpdC1jb25maWcKICAgIGVjczoKICAgICAgY2F0ZWdvcnk6IFtwcm9jZXNzLCBjb25maWd1cmF0aW9uXQogICAgICB0eXBlOiBjaGFuZ2UKICAjIEFVRElUX0RBRU1PTl9BQk9SVCAtIERhZW1vbiBlcnJvciBzdG9wIHJlY29yZAogIC0gcmVjb3JkX3R5cGVzOiBEQUVNT05fQUJPUlQKICAgIGFjdGlvbjogYWJvcnRlZC1hdWRpdGQtc3RhcnR1cAogICAgb2JqZWN0OgogICAgICB3aGF0OiBzZXJ2aWNlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogc3RvcAogICMgQVVESVRfREFFTU9OX0FDQ0VQVCAtIEF1ZGl0ZCBhY2NlcHRlZCByZW1vdGUgY29ubmVjdGlvbgogIC0gcmVjb3JkX3R5cGVzOiBEQUVNT05fQUNDRVBUCiAgICBhY3Rpb246IHJlbW90ZS1hdWRpdC1jb25uZWN0ZWQKICAgIG9iamVjdDoKICAgICAgd2hhdDogc2VydmljZQogICAgZWNzOgogICAgICA8PDogKmVjcy1uZXR3b3JrCiAgICAgIHR5cGU6CiAgICAgICAgLSBjb25uZWN0aW9uCiAgICAgICAgLSBzdGFydAogICMgQVVESVRfREFFTU9OX0NMT1NFIC0gQXVkaXRkIGNsb3NlZCByZW1vdGUgY29ubmVjdGlvbgogIC0gcmVjb3JkX3R5cGVzOiBEQUVNT05fQ0xPU0UKICAgIGFjdGlvbjogcmVtb3RlLWF1ZGl0LWRpc2Nvbm5lY3RlZAogICAgb2JqZWN0OgogICAgICB3aGF0OiBzZXJ2aWNlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLW5ldHdvcmsKICAgICAgdHlwZToKICAgICAgICAtIGNvbm5lY3Rpb24KICAgICAgICAtIHN0YXJ0CiAgIyBBVURJVF9EQUVNT05fQ09ORklHIC0gRGFlbW9uIGNvbmZpZyBjaGFuZ2UKICAtIHJlY29yZF90eXBlczogREFFTU9OX0NPTkZJRwogICAgYWN0aW9uOiBjaGFuZ2VkLWF1ZGl0ZC1jb25maWd1cmF0aW9uCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNlcnZpY2UKICAgIGVjczoKICAgICAgY2F0ZWdvcnk6IFtwcm9jZXNzLCBjb25maWd1cmF0aW9uXQogICAgICB0eXBlOiBjaGFuZ2UKICAjIEFVRElUX0RBRU1PTl9FTkQgLSBEYWVtb24gbm9ybWFsIHN0b3AgcmVjb3JkCiAgLSByZWNvcmRfdHlwZXM6IERBRU1PTl9FTkQKICAgIGFjdGlvbjogc2h1dGRvd24tYXVkaXQKICAgIG9iamVjdDoKICAgICAgd2hhdDogc2VydmljZQogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IHN0b3AKICAjIEFVRElUX0RBRU1PTl9FUlIgLSBBdWRpdGQgaW50ZXJuYWwgZXJyb3IKICAtIHJlY29yZF90eXBlczogREFFTU9OX0VSUgogICAgYWN0aW9uOiBhdWRpdC1lcnJvcgogICAgb2JqZWN0OgogICAgICB3aGF0OiBzZXJ2aWNlCiAgICBlY3M6ICplY3MtcHJvY2VzcwogICMgQVVESVRfREFFTU9OX1JFQ09ORklHIC0gQXVkaXRkIHNob3VsZCByZWNvbmZpZ3VyZQogIC0gcmVjb3JkX3R5cGVzOiBEQUVNT05fUkVDT05GSUcKICAgIGFjdGlvbjogcmVjb25maWd1cmVkLWF1ZGl0ZAogICAgb2JqZWN0OgogICAgICB3aGF0OiBzZXJ2aWNlCiAgICBlY3M6CiAgICAgIGNhdGVnb3J5OiBbcHJvY2VzcywgY29uZmlndXJhdGlvbl0KICAgICAgdHlwZTogaW5mbwogICMgQVVESVRfREFFTU9OX1JFU1VNRSAtIEF1ZGl0ZCBzaG91bGQgcmVzdW1lIGxvZ2dpbmcKICAtIHJlY29yZF90eXBlczogREFFTU9OX1JFU1VNRQogICAgYWN0aW9uOiByZXN1bWVkLWF1ZGl0LWxvZ2dpbmcKICAgIG9iamVjdDoKICAgICAgd2hhdDogc2VydmljZQogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IGNoYW5nZQogICMgQVVESVRfREFFTU9OX1JPVEFURSAtIEF1ZGl0ZCBzaG91bGQgcm90YXRlIGxvZ3MKICAtIHJlY29yZF90eXBlczogREFFTU9OX1JPVEFURQogICAgYWN0aW9uOiByb3RhdGVkLWF1ZGl0LWxvZ3MKICAgIG9iamVjdDoKICAgICAgd2hhdDogc2VydmljZQogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IGNoYW5nZQogICMgQVVESVRfREFFTU9OX1NUQVJUIC0gRGFlbW9uIHN0YXJ0dXAgcmVjb3JkCiAgLSByZWNvcmRfdHlwZXM6IERBRU1PTl9TVEFSVAogICAgYWN0aW9uOiBzdGFydGVkLWF1ZGl0CiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNlcnZpY2UKICAgIGVjczoKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBzdGFydAogICMgQVVESVRfS0VSTkVMIC0gQXN5bmNocm9ub3VzIGF1ZGl0IHJlY29yZC4gTk9UIEEgUkVRVUVTVC4KICAtIHJlY29yZF90eXBlczogS0VSTkVMCiAgICBhY3Rpb246IGluaXRpYWxpemVkLWF1ZGl0LXN1YnN5c3RlbQogICAgZWNzOiAqZWNzLXByb2Nlc3MKCiAgIyBDb25maWd1cmF0aW9uIGNoYW5nZSBldmVudHMKCiAgIyBBVURJVF9VU1lTX0NPTkZJRyAtIFVzZXIgc3BhY2Ugc3lzdGVtIGNvbmZpZyBjaGFuZ2UKICAtIHJlY29yZF90eXBlczogVVNZU19DT05GSUcKICAgIGFjdGlvbjogY2hhbmdlZC1jb25maWd1cmF0aW9uCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IG9wCiAgICAgIHdoYXQ6IHN5c3RlbQogICAgZWNzOgogICAgICBjYXRlZ29yeTogY29uZmlndXJhdGlvbgogICAgICB0eXBlOiBjaGFuZ2UKICAjIEFVRElUX05FVEZJTFRFUl9DRkcgLSBOZXRmaWx0ZXIgY2hhaW4gbW9kaWZpY2F0aW9ucwogIC0gcmVjb3JkX3R5cGVzOiBORVRGSUxURVJfQ0ZHCiAgICBhY3Rpb246IGxvYWRlZC1maXJld2FsbC1ydWxlLXRvCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IHRhYmxlCiAgICAgIHdoYXQ6IGZpcmV3YWxsCiAgICBlY3M6CiAgICAgIGNhdGVnb3J5OiBjb25maWd1cmF0aW9uCiAgICAgIHR5cGU6IGNoYW5nZQogICMgQVVESVRfRkVBVFVSRV9DSEFOR0UgLSBhdWRpdCBsb2cgbGlzdGluZyBmZWF0dXJlIGNoYW5nZXMKICAtIHJlY29yZF90eXBlczogRkVBVFVSRV9DSEFOR0UKICAgIGFjdGlvbjogY2hhbmdlZC1hdWRpdC1mZWF0dXJlCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGZlYXR1cmUKICAgICAgd2hhdDogc3lzdGVtCiAgICBlY3M6CiAgICAgIGNhdGVnb3J5OiBjb25maWd1cmF0aW9uCiAgICAgIHR5cGU6IGNoYW5nZQogICMgQVVESVRfUkVQTEFDRSAtIFJlcGxhY2UgYXVkaXRkIGlmIHRoaXMgcGFja2V0IHVuYW5zd2VyZAoKICAjIFRUWSBldmVudHMKCiAgLSByZWNvcmRfdHlwZXM6CiAgICAgICMgQVVESVRfVFRZIC0gSW5wdXQgb24gYW4gYWRtaW5pc3RyYXRpdmUgVFRZCiAgICAgIC0gVFRZCiAgICAgICMgQVVESVRfVVNFUl9UVFkgLSBOb24tSUNBTk9OIFRUWSBpbnB1dCBtZWFuaW5nCiAgICAgIC0gVVNFUl9UVFkKICAgIGFjdGlvbjogdHlwZWQKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogZGF0YQogICAgICB3aGF0OiBrZXlzdHJva2VzCiAgICBob3c6IFtjb21tLCBleGVdCgogICMgUG9saWN5IGV2ZW50cwoKICAjIEFVRElUX0FWQyAtIFNFIExpbnV4IGF2YyBkZW5pYWwgb3IgZ3JhbnQgKHNlbGludXgpCiAgLSByZWNvcmRfdHlwZXM6IEFWQwogICAgYWN0aW9uOiB2aW9sYXRlZC1zZWxpbnV4LXBvbGljeQogICAgc3ViamVjdDoKICAgICAgcHJpbWFyeTogc2NvbnRleHQKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogdGNvbnRleHQKICAgICAgc2Vjb25kYXJ5OiB0Y2xhc3MKICAgIGhhc19maWVsZHM6CiAgICAgIC0gc2VyZXN1bHQKICAjIEFVRElUX0FWQyAtIFNFIExpbnV4IGF2YyBkZW5pYWwgb3IgZ3JhbnQgKGFwcGFybW9yKQogIC0gcmVjb3JkX3R5cGVzOiBBVkMKICAgIGFjdGlvbjogdmlvbGF0ZWQtYXBwYXJtb3ItcG9saWN5CiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IG9wZXJhdGlvbgogICAgICBzZWNvbmRhcnk6IFtyZXF1ZXN0ZWRfbWFzaywgZGVuaWVkX21hc2ssIGNhcG5hbWVdCiAgICAgIHdoYXQ6IHBvbGljeQogICAgaGFzX2ZpZWxkczoKICAgICAgLSBhcHBhcm1vcgogICMgQVVESVRfRlNfUkVMQUJFTCAtIEZpbGVzeXN0ZW0gcmVsYWJlbGVkCiAgLSByZWNvcmRfdHlwZXM6IEZTX1JFTEFCRUwKICAgIGFjdGlvbjogcmVsYWJlbGVkLWZpbGVzeXN0ZW0KICAgIG9iamVjdDoKICAgICAgd2hhdDogbWFjLWNvbmZpZwogICMgQVVESVRfTEFCRUxfTEVWRUxfQ0hBTkdFIC0gT2JqZWN0J3MgbGV2ZWwgd2FzIGNoYW5nZWQKICAtIHJlY29yZF90eXBlczogTEFCRUxfTEVWRUxfQ0hBTkdFCiAgICBhY3Rpb246IG1vZGlmaWVkLWxldmVsLW9mCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IHByaW50ZXIKICAgICAgd2hhdDogcHJpbnRlcgogICMgQVVESVRfTEFCRUxfT1ZFUlJJREUgLSBBZG1pbiBpcyBvdmVycmlkaW5nIGEgbGFiZWwKICAtIHJlY29yZF90eXBlczogTEFCRUxfT1ZFUlJJREUKICAgIGFjdGlvbjogb3ZlcnJvZGUtbGFiZWwtb2YKICAgIG9iamVjdDoKICAgICAgd2hhdDogbWFjLWNvbmZpZwogICMgQVVESVRfTUFDX0NIRUNLIC0gVXNlciBzcGFjZSBNQUMgZGVjaXNpb24gcmVzdWx0cwogIC0gcmVjb3JkX3R5cGVzOiBNQUNfQ0hFQ0sKICAgIGFjdGlvbjogbWFjLXBlcm1pc3Npb24KICAjIEFVRElUX01BQ19DT05GSUdfQ0hBTkdFIC0gQ2hhbmdlcyB0byBib29sZWFucwogIC0gcmVjb3JkX3R5cGVzOiBNQUNfQ09ORklHX0NIQU5HRQogICAgYWN0aW9uOiBjaGFuZ2VkLXNlbGludXgtYm9vbGVhbgogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBib29sCiAgICAgIHdoYXQ6IG1hYy1jb25maWcKICAgIGVjczoKICAgICAgY2F0ZWdvcnk6IGNvbmZpZ3VyYXRpb24KICAgICAgdHlwZTogY2hhbmdlCiAgIyBBVURJVF9NQUNfUE9MSUNZX0xPQUQgLSBQb2xpY3kgZmlsZSBsb2FkCiAgLSByZWNvcmRfdHlwZXM6IE1BQ19QT0xJQ1lfTE9BRAogICAgYWN0aW9uOiBsb2FkZWQtc2VsaW51eC1wb2xpY3kKICAgIG9iamVjdDoKICAgICAgd2hhdDogbWFjLWNvbmZpZwogICAgZWNzOgogICAgICBjYXRlZ29yeTogY29uZmlndXJhdGlvbgogICAgICB0eXBlOiBhY2Nlc3MKICAjIEFVRElUX01BQ19TVEFUVVMgLSBDaGFuZ2VkIGVuZm9yY2luZyxwZXJtaXNzaXZlLG9mZgogIC0gcmVjb3JkX3R5cGVzOiBNQUNfU1RBVFVTCiAgICBhY3Rpb246IGNoYW5nZWQtc2VsaW51eC1lbmZvcmNlbWVudAogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBlbmZvcmNpbmcKICAgICAgd2hhdDogbWFjLWNvbmZpZwogICAgZWNzOgogICAgICBjYXRlZ29yeTogY29uZmlndXJhdGlvbgogICAgICB0eXBlOiBjaGFuZ2UKICAjIEFVRElUX1VTRVJfQVZDIC0gVXNlciBzcGFjZSBhdmMgbWVzc2FnZQogIC0gcmVjb3JkX3R5cGVzOiBVU0VSX0FWQwogICAgYWN0aW9uOiBhY2Nlc3MtcGVybWlzc2lvbgogICMgQVVESVRfVVNFUl9NQUNfQ09ORklHX0NIQU5HRSAtIENoYW5nZSBtYWRlIHRvIE1BQyBwb2xpY3kKICAtIHJlY29yZF90eXBlczogVVNFUl9NQUNfQ09ORklHX0NIQU5HRQogICAgYWN0aW9uOiBjaGFuZ2VkLW1hYy1jb25maWd1cmF0aW9uCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IG1hYy1jb25maWcKICAgIGVjczoKICAgICAgY2F0ZWdvcnk6IGNvbmZpZ3VyYXRpb24KICAgICAgdHlwZTogY2hhbmdlCiAgIyBBVURJVF9VU0VSX01BQ19QT0xJQ1lfTE9BRCAtIFVzZXJzcGMgZGFlbW9uIGxvYWRlZCBwb2xpYwogIC0gcmVjb3JkX3R5cGVzOiBVU0VSX01BQ19QT0xJQ1lfTE9BRAogICAgYWN0aW9uOiBsb2FkZWQtbWFjLXBvbGljeQogICAgb2JqZWN0OgogICAgICB3aGF0OiBtYWMtY29uZmlnCiAgICBlY3M6CiAgICAgIGNhdGVnb3J5OiBjb25maWd1cmF0aW9uCiAgICAgIHR5cGU6IGFjY2VzcwogICMgQVVESVRfVVNFUl9TRUxJTlVYX0VSUiAtIFNFIExpbnV4IHVzZXIgc3BhY2UgZXJyb3IKICAtIHJlY29yZF90eXBlczogVVNFUl9TRUxJTlVYX0VSUgogICAgYWN0aW9uOiBhY2Nlc3MtZXJyb3IKICAjIEFVRElUX1NFQ0NPTVAgLSBTZWN1cmUgQ29tcHV0aW5nIGV2ZW50CiAgLSByZWNvcmRfdHlwZXM6IFNFQ0NPTVAKICAgIGFjdGlvbjogdmlvbGF0ZWQtc2VjY29tcC1wb2xpY3kKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogc3lzY2FsbAogICAgICB3aGF0OiBwcm9jZXNzCiAgIyBBVURJVF9TRUxJTlVYX0VSUiAtIEludGVybmFsIFNFIExpbnV4IEVycm9ycwogIC0gYWN0aW9uOiBjYXVzZWQtbWFjLXBvbGljeS1lcnJvcgogICAgb2JqZWN0OgogICAgICB3aGF0OiBzeXN0ZW0KICAgIHJlY29yZF90eXBlczogU0VMSU5VWF9FUlIKICAjIEFVRElUX0FQUEFSTU9SX0FMTE9XRUQKICAjIEFVRElUX0FQUEFSTU9SX0RFTklFRAogICMgQVVESVRfQVBQQVJNT1JfRVJST1IKICAjIEFVRElUX0FWQ19QQVRIIC0gZGVudHJ5LCB2ZnNtb3VudCBwYWlyIGZyb20gYXZjCiAgIyBBVURJVF9BUFBBUk1PUl9BVURJVAogICMgQVVESVRfQVBQQVJNT1JfSElOVAogICMgQVVESVRfQVBQQVJNT1JfU1RBVFVTCiAgIyBBVURJVF9BUFBBUk1PUl9FUlJPUgogICMgQVVESVRfREVWX0FMTE9DIC0gRGV2aWNlIHdhcyBhbGxvY2F0ZWQKICAjIEFVRElUX0RFVl9ERUFMTE9DIC0gRGV2aWNlIHdhcyBkZWFsbG9jYXRlZAogICMgQVVESVRfTUFDX1VOTEJMX0FMTE9XIC0gTmV0TGFiZWw6IGFsbG93IHVubGFiZWxlZCB0cmFmZmljCiAgIyBBVURJVF9NQUNfQ0lQU09WNF9BREQgLSBOZXRMYWJlbDogYWRkIENJUFNPdjQgRE9JIGVudHJ5CiAgIyBBVURJVF9NQUNfQ0lQU09WNF9ERUwgLSBOZXRMYWJlbDogZGVsIENJUFNPdjQgRE9JIGVudHJ5CiAgIyBBVURJVF9NQUNfTUFQX0FERCAtIE5ldExhYmVsOiBhZGQgTFNNIGRvbWFpbiBtYXBwaW5nCiAgIyBBVURJVF9NQUNfTUFQX0RFTCAtIE5ldExhYmVsOiBkZWwgTFNNIGRvbWFpbiBtYXBwaW5nCiAgIyBBVURJVF9NQUNfSVBTRUNfRVZFTlQgLSBBdWRpdCBhbiBJUFNlYyBldmVudAogICMgQVVESVRfTUFDX1VOTEJMX1NUQ0FERCAtIE5ldExhYmVsOiBhZGQgYSBzdGF0aWMgbGFiZWwKICAjIEFVRElUX01BQ19VTkxCTF9TVENERUwgLSBOZXRMYWJlbDogZGVsIGEgc3RhdGljIGxhYmVsCiAgIyBBVURJVF9NQUNfQ0FMSVBTT19BREQgLSBOZXRMYWJlbDogYWRkIENBTElQU08gRE9JIGVudHJ5CiAgIyBBVURJVF9NQUNfQ0FMSVBTT19ERUwgLSBOZXRMYWJlbDogZGVsIENBTElQU08gRE9JIGVudHJ5CiAgIyBBVURJVF9VU0VSX0xBQkVMRURfRVhQT1JUIC0gT2JqZWN0IGV4cG9ydGVkIHdpdGggbGFiZWwKICAjIEFVRElUX1VTRVJfVU5MQUJFTEVEX0VYUE9SVCAtIE9iamVjdCBleHBvcnRlZCB3aXRob3V0IGxhYmVsCgogICMgQ3J5cHRvIGV2ZW50cwoKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICBhY3Rpb246IG5lZ290aWF0ZWQtY3J5cHRvLWtleQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBmcAogICAgICBzZWNvbmRhcnk6IFthZGRyLCBob3N0bmFtZV0KICAgICAgd2hhdDogdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IENSWVBUT19LRVlfVVNFUgogICAgc291cmNlX2lwOiBbYWRkcl0KICAgIGVjczogKmVjcy1wcm9jZXNzCiAgLSBhY3Rpb246IGNyeXB0by1vZmZpY2VyLWxvZ2dlZC1pbgogICAgcmVjb3JkX3R5cGVzOiBDUllQVE9fTE9HSU4KICAtIGFjdGlvbjogY3J5cHRvLW9mZmljZXItbG9nZ2VkLW91dAogICAgcmVjb3JkX3R5cGVzOiBDUllQVE9fTE9HT1VUCiAgICBlY3M6ICplY3MtcHJvY2VzcwogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIGFjdGlvbjogc3RhcnRlZC1jcnlwdG8tc2Vzc2lvbgogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBhZGRyCiAgICAgIHNlY29uZGFyeTogW3Jwb3J0XQogICAgcmVjb3JkX3R5cGVzOiBDUllQVE9fU0VTU0lPTgogICAgc291cmNlX2lwOiBbYWRkcl0KICAgIGVjczogKmVjcy1wcm9jZXNzCiAgLSBhY3Rpb246IGFjY2Vzcy1yZXN1bHQKICAgIHJlY29yZF90eXBlczogREFDX0NIRUNLCgogICMgQW5vbWFsaWVzCgogICMgQVVESVRfQU5PTV9BQkVORCAtIFByb2Nlc3MgZW5kZWQgYWJub3JtYWxseQogIC0gcmVjb3JkX3R5cGVzOiBBTk9NX0FCRU5ECiAgICBhY3Rpb246IGNyYXNoZWQtcHJvZ3JhbQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBbY29tbSwgZXhlXQogICAgICBzZWNvbmRhcnk6IHBpZAogICAgICB3aGF0OiBwcm9jZXNzCiAgICBob3c6IHNpZwogICAgZWNzOgogICAgICAjIGNvbnNpZGVyIGFkZGluZyBhbiBhbm9tYWx5IGNhdGVnb3J5IHdoZW4gd2UgaW50cm9kdWNlCiAgICAgICMgdG8gRUNTCiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogZW5kCiAgIyBBVURJVF9BTk9NX0VYRUMgLSBFeGVjdXRpb24gb2YgZmlsZQogIC0gcmVjb3JkX3R5cGVzOiBBTk9NX0VYRUMKICAgIGFjdGlvbjogYXR0ZW1wdGVkLWV4ZWN1dGlvbi1vZi1mb3JiaWRkZW4tcHJvZ3JhbQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBjbWQKICAgICAgd2hhdDogcHJvY2VzcwogICAgaG93OiB0ZXJtaW5hbAogICAgZWNzOgogICAgICAjIGNvbnNpZGVyIGFkZGluZyBhbiBhbm9tYWx5IGNhdGVnb3J5IHdoZW4gd2UgaW50cm9kdWNlCiAgICAgICMgdG8gRUNTCiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogc3RhcnQKICAjIEFVRElUX0FOT01fTElOSyAtIFN1c3BpY2lvdXMgdXNlIG9mIGZpbGUgbGlua3MKICAtIHJlY29yZF90eXBlczogQU5PTV9MSU5LCiAgICBhY3Rpb246IHVzZWQtc3VzcGljaW91cy1saW5rCiAgIyBBVURJVF9BTk9NX0xPR0lOX0ZBSUxVUkVTIC0gRmFpbGVkIGxvZ2luIGxpbWl0IHJlYWNoZWQKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IEFOT01fTE9HSU5fRkFJTFVSRVMKICAgIGFjdGlvbjogZmFpbGVkLWxvZy1pbi10b28tbWFueS10aW1lcy10bwogICMgQVVESVRfQU5PTV9MT0dJTl9MT0NBVElPTiAtIExvZ2luIGZyb20gZm9yYmlkZGVuIGxvY2F0aW9uCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBBTk9NX0xPR0lOX0xPQ0FUSU9OCiAgICBhY3Rpb246IGF0dGVtcHRlZC1sb2ctaW4tZnJvbS11bnVzdWFsLXBsYWNlLXRvCiAgIyBBVURJVF9BTk9NX0xPR0lOX1NFU1NJT05TIC0gTWF4IGNvbmN1cnJlbnQgc2Vzc2lvbnMgcmVhY2hlZAogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogQU5PTV9MT0dJTl9TRVNTSU9OUwogICAgYWN0aW9uOiBvcGVuZWQtdG9vLW1hbnktc2Vzc2lvbnMtdG8KICAjIEFVRElUX0FOT01fTE9HSU5fVElNRSAtIExvZ2luIGF0dGVtcHRlZCBhdCBiYWQgdGltZQogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogQU5PTV9MT0dJTl9USU1FCiAgICBhY3Rpb246IGF0dGVtcHRlZC1sb2ctaW4tZHVyaW5nLXVudXN1YWwtaG91ci10bwogICMgQVVESVRfQU5PTV9QUk9NSVNDVU9VUyAtIERldmljZSBjaGFuZ2VkIHByb21pc2N1b3VzIG1vZGUKICAtIHJlY29yZF90eXBlczogQU5PTV9QUk9NSVNDVU9VUwogICAgYWN0aW9uOiBjaGFuZ2VkLXByb21pc2N1b3VzLW1vZGUtb24tZGV2aWNlICMgQ291bGQgYmUgZW50ZXJlZCBvciBleGl0ZWQgYmFzZWQgb24gcHJvbSBmaWVsZC4KICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogZGV2CiAgICAgIHdoYXQ6IG5ldHdvcmstZGV2aWNlCiAgIyBBVURJVF9BTk9NX1JCQUNfSU5URUdSSVRZX0ZBSUwgLSBSQkFDIGZpbGUgaW50ZWdyaXR5IGZhaWx1cmUKICAtIHJlY29yZF90eXBlczogQU5PTV9SQkFDX0lOVEVHUklUWV9GQUlMCiAgICBhY3Rpb246IHRlc3RlZC1maWxlLXN5c3RlbS1pbnRlZ3JpdHktb2YKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogaG9zdG5hbWUKICAgICAgd2hhdDogZmlsZXN5c3RlbQogICMgQVVESVRfQU5PTV9MT0dJTl9BQ0NUIC0gTG9naW4gYXR0ZW1wdGVkIHRvIHdhdGNoZWQgYWNjdAogICMgQVVESVRfQU5PTV9NQVhfREFDIC0gTWF4IERBQyBmYWlsdXJlcyByZWFjaGVkCiAgIyBBVURJVF9BTk9NX01BWF9NQUMgLSBNYXggTUFDIGZhaWx1cmVzIHJlYWNoZWQKICAjIEFVRElUX0FOT01fQU1UVV9GQUlMIC0gQU1UVSBmYWlsdXJlCiAgIyBBVURJVF9BTk9NX1JCQUNfRkFJTCAtIFJCQUMgc2VsZiB0ZXN0IGZhaWx1cmUKICAjIEFVRElUX0FOT01fQ1JZUFRPX0ZBSUwgLSBDcnlwdG8gc3lzdGVtIHRlc3QgZmFpbHVyZQogICMgQVVESVRfQU5PTV9NS19FWEUgLSBNYWtlIGFuIGV4ZWN1dGFibGUKICAjIEFVRElUX0FOT01fQUNDRVNTX0ZTIC0gQWNjZXNzIG9mIGZpbGUgb3IgZGlyCiAgIyBBVURJVF9BTk9NX0FERF9BQ0NUIC0gQWRkaW5nIGFuIGFjY3QKICAjIEFVRElUX0FOT01fREVMX0FDQ1QgLSBEZWxldGluZyBhbiBhY2N0CiAgIyBBVURJVF9BTk9NX01PRF9BQ0NUIC0gQ2hhbmdpbmcgYW4gYWNjdAogICMgQVVESVRfQU5PTV9ST09UX1RSQU5TIC0gVXNlciBiZWNhbWUgcm9vdAogICMgQVVESVRfQU5PTV9MT0dJTl9TRVJWSUNFIC0gU2VydmljZSBhY2N0IGF0dGVtcHRlZCBsb2dpbgoKICAjIEFub21hbHkgcmVzcG9uc2VzCgogICMgQVVESVRfUkVTUF9BTk9NQUxZIC0gQW5vbWFseSBub3QgcmVhY3RlZCB0bwogICMgQVVESVRfUkVTUF9BTEVSVCAtIEFsZXJ0IGVtYWlsIHdhcyBzZW50CiAgIyBBVURJVF9SRVNQX0tJTExfUFJPQyAtIEtpbGwgcHJvZ3JhbQogICMgQVVESVRfUkVTUF9URVJNX0FDQ0VTUyAtIFRlcm1pbmF0ZSBzZXNzaW9uCiAgIyBBVURJVF9SRVNQX0FDQ1RfUkVNT1RFIC0gQWNjdCBsb2NrZWQgZnJvbSByZW1vdGUgYWNjZXNzCiAgIyBBVURJVF9SRVNQX0FDQ1RfTE9DS19USU1FRCAtIFVzZXIgYWNjdCBsb2NrZWQgZm9yIHRpbWUKICAjIEFVRElUX1JFU1BfQUNDVF9VTkxPQ0tfVElNRUQgLSBVc2VyIGFjY3QgdW5sb2NrZWQgZnJvbSB0aW1lCiAgIyBBVURJVF9SRVNQX0FDQ1RfTE9DSyAtIFVzZXIgYWNjdCB3YXMgbG9ja2VkCiAgIyBBVURJVF9SRVNQX1RFUk1fTE9DSyAtIFRlcm1pbmFsIHdhcyBsb2NrZWQKICAjIEFVRElUX1JFU1BfU0VCT09MIC0gU2V0IGFuIFNFIExpbnV4IGJvb2xlYW4KICAjIEFVRElUX1JFU1BfRVhFQyAtIEV4ZWN1dGUgYSBzY3JpcHQKICAjIEFVRElUX1JFU1BfU0lOR0xFIC0gR28gdG8gc2luZ2xlIHVzZXIgbW9kZQogICMgQVVESVRfUkVTUF9IQUxUIC0gdGFrZSB0aGUgc3lzdGVtIGRvd24KICAjIEFVRElUX1JFU1BfT1JJR0lOX0JMT0NLIC0gQWRkcmVzcyBibG9ja2VkIGJ5IGlwdGFibGVzCiAgIyBBVURJVF9SRVNQX09SSUdJTl9CTE9DS19USU1FRCAtIEFkZHJlc3MgYmxvY2tlZCBmb3IgdGltZQoKICAjIEF1ZGl0IHJ1bGUgZXZlbnRzCgogICMgQVVESVRfU1lTQ0FMTCAtIFN5c2NhbGwgZXZlbnQKICAjIEFVRElUX1BBVEggLSBGaWxlbmFtZSBwYXRoIGluZm9ybWF0aW9uCiAgIyBBVURJVF9JUEMgLSBJUEMgcmVjb3JkCiAgIyBBVURJVF9TT0NLRVRDQUxMIC0gc3lzX3NvY2tldGNhbGwgYXJndW1lbnRzCiAgIyBBVURJVF9TT0NLQUREUiAtIHNvY2thZGRyIGNvcGllZCBhcyBzeXNjYWxsIGFyZwogICMgQVVESVRfQ1dEIC0gQ3VycmVudCB3b3JraW5nIGRpcmVjdG9yeQogICMgQVVESVRfRVhFQ1ZFIC0gZXhlY3ZlIGFyZ3VtZW50cwogICMgQVVESVRfSVBDX1NFVF9QRVJNIC0gSVBDIG5ldyBwZXJtaXNzaW9ucyByZWNvcmQgdHlwZQogICMgQVVESVRfTVFfT1BFTiAtIFBPU0lYIE1RIG9wZW4gcmVjb3JkIHR5cGUKICAjIEFVRElUX01RX1NFTkRSRUNWLSBQT1NJWCBNUSBzZW5kL3JlY2VpdmUgcmVjb3JkIHR5cGUKICAjIEFVRElUX01RX05PVElGWSAtIFBPU0lYIE1RIG5vdGlmeSByZWNvcmQgdHlwZQogICMgQVVESVRfTVFfR0VUU0VUQVRUUiAtIFBPU0lYIE1RIGdldC9zZXQgYXR0cmlidXRlIHJlY29yZCB0eXBlCiAgIyBBVURJVF9GRF9QQUlSIC0gYXVkaXQgcmVjb3JkIGZvciBwaXBlL3NvY2tldHBhaXIKICAjIEFVRElUX09CSl9QSUQgLSBwdHJhY2UgdGFyZ2V0CiAgIyBBVURJVF9CUFJNX0ZDQVBTIC0gSW5mb3JtYXRpb24gYWJvdXQgZmNhcHMgaW5jcmVhc2luZyBwZXJtcwogICMgQVVESVRfQ0FQU0VUIC0gUmVjb3JkIHNob3dpbmcgYXJndW1lbnQgdG8gc3lzX2NhcHNldAogICMgQVVESVRfTU1BUCAtIFJlY29yZCBzaG93aW5nIGRlc2NyaXB0b3IgYW5kIGZsYWdzIGluIG1tYXAKICAjIEFVRElUX05FVEZJTFRFUl9QS1QgLSBQYWNrZXRzIHRyYXZlcnNpbmcgbmV0ZmlsdGVyIGNoYWlucwoKICAjIEludGVncml0eSBjaGVja3MKCiAgIyBBVURJVF9JTlRFR1JJVFlfREFUQSAtIERhdGEgaW50ZWdyaXR5IHZlcmlmaWNhdGlvbgogICMgQVVESVRfSU5URUdSSVRZX01FVEFEQVRBIC0gTWV0YWRhdGEgaW50ZWdyaXR5IHZlcmlmaWNhdGlvbgogICMgQVVESVRfSU5URUdSSVRZX1NUQVRVUyAtIEludGVncml0eSBlbmFibGUgc3RhdHVzCiAgIyBBVURJVF9JTlRFR1JJVFlfSEFTSCAtIEludGVncml0eSBIQVNIIHR5cGUKICAjIEFVRElUX0lOVEVHUklUWV9QQ1IgLSBQQ1IgaW52YWxpZGF0aW9uIG1zZ3MKICAjIEFVRElUX0lOVEVHUklUWV9SVUxFIC0gUG9saWN5IHJ1bGUKCiAgIyBWYXJpb3VzCgogICMgQVVESVRfVVNFUiAtIE1lc3NhZ2UgZnJvbSB1c2Vyc3BhY2UgLS0gZGVwcmVjYXRlZAogIC0gcmVjb3JkX3R5cGVzOiBVU0VSCiAgICBhY3Rpb246IHNlbnQtbWVzc2FnZQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBhZGRyCg==") + value, _ = base64.StdEncoding.DecodeString("LS0tCiMgTWFjcm9zIGRlY2xhcmVzIHNvbWUgWUFNTCBhbmNob3JzIHRoYXQgY2FuIGJlIHJlZmVyZW5jZWQgZm9yIHNvbWUgY29tbW9uCiMgb2JqZWN0IHR5cGUgbm9ybWFsaXphdGlvbnMgbGlrZSB1c2VyLXNlc3Npb24sIHNvY2tldCwgb3IgcHJvY2Vzcy4KbWFjcm9zOgogIC0gJmRlZmF1bHRzCiAgICBzdWJqZWN0OgogICAgICBwcmltYXJ5OiBhdWlkCiAgICAgIHNlY29uZGFyeTogdWlkCiAgICBob3c6IFtleGUsIGNvbW1dCgogIC0gJm1hY3JvLXVzZXItc2Vzc2lvbgogICAgc3ViamVjdDoKICAgICAgcHJpbWFyeTogYXVpZAogICAgICBzZWNvbmRhcnk6IFthY2N0LCBpZCwgdWlkXQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiB0ZXJtaW5hbAogICAgICBzZWNvbmRhcnk6IFthZGRyLCBob3N0bmFtZV0KICAgICAgd2hhdDogdXNlci1zZXNzaW9uCiAgICBob3c6IFtleGUsIHRlcm1pbmFsXQoKICAtICZtYWNyby1zb2NrZXQKICAgIDw8OiAqZGVmYXVsdHMKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogW2FkZHIsIHBhdGhdCiAgICAgIHNlY29uZGFyeTogcG9ydAogICAgICB3aGF0OiBzb2NrZXQKCiAgLSAmbWFjcm8tcHJvY2VzcwogICAgPDw6ICpkZWZhdWx0cwogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBbY21kLCBleGUsIGNvbW1dCiAgICAgIHNlY29uZGFyeTogcGlkCiAgICAgIHdoYXQ6IHByb2Nlc3MKICAgIGhvdzogdGVybWluYWwKCiAgLSAmZWNzLWlhbQogICAgY2F0ZWdvcnk6IGlhbQogICAgdHlwZTogaW5mbwoKICAtICZlY3MtYXV0aAogICAgY2F0ZWdvcnk6IGF1dGhlbnRpY2F0aW9uCiAgICB0eXBlOiBpbmZvCiAgICBtYXBwaW5nczoKICAgICAgLSBmcm9tOiBzdWJqZWN0LnByaW1hcnkKICAgICAgICB0bzogdXNlcgogICAgICAtIGZyb206IHN1YmplY3Quc2Vjb25kYXJ5CiAgICAgICAgdG86IHVzZXIuZWZmZWN0aXZlCgogIC0gJmVjcy1zZXNzaW9uCiAgICBjYXRlZ29yeTogc2Vzc2lvbgogICAgdHlwZTogaW5mbwogICAgbWFwcGluZ3M6CiAgICAgIC0gZnJvbTogc3ViamVjdC5wcmltYXJ5CiAgICAgICAgdG86IHVzZXIKICAgICAgLSBmcm9tOiBzdWJqZWN0LnNlY29uZGFyeQogICAgICAgIHRvOiB1c2VyLmVmZmVjdGl2ZQoKICAtICZlY3MtaG9zdAogICAgY2F0ZWdvcnk6IGhvc3QKICAgIHR5cGU6IGluZm8KCiAgLSAmZWNzLXByb2Nlc3MKICAgIGNhdGVnb3J5OiBwcm9jZXNzCiAgICB0eXBlOiBpbmZvCgogIC0gJmVjcy1maWxlCiAgICBjYXRlZ29yeTogZmlsZQogICAgdHlwZTogaW5mbwoKICAtICZlY3MtZHJpdmVyCiAgICBjYXRlZ29yeTogZHJpdmVyCiAgICB0eXBlOiBpbmZvCgogIC0gJmVjcy1uZXR3b3JrCiAgICBjYXRlZ29yeTogbmV0d29yawogICAgdHlwZToKICAgICAgLSBjb25uZWN0aW9uCiAgICAgIC0gaW5mbwoKICAtICZlY3MtdXNlci1tb2RpZmljYXRpb24tbWFwcGluZ3MKICAgIG1hcHBpbmdzOgogICAgICAtIGZyb206IHN1YmplY3QucHJpbWFyeQogICAgICAgIHRvOiB1c2VyCiAgICAgIC0gZnJvbTogc3ViamVjdC5zZWNvbmRhcnkKICAgICAgICB0bzogdXNlci5lZmZlY3RpdmUKICAgICAgLSBmcm9tOiBvYmplY3QucHJpbWFyeQogICAgICAgIHRvOiB1c2VyLnRhcmdldAoKICAtICZlY3MtZ3JvdXAtbW9kaWZpY2F0aW9uLW1hcHBpbmdzCiAgICBtYXBwaW5nczoKICAgICAgLSBmcm9tOiBzdWJqZWN0LnByaW1hcnkKICAgICAgICB0bzogdXNlcgogICAgICAtIGZyb206IHN1YmplY3Quc2Vjb25kYXJ5CiAgICAgICAgdG86IHVzZXIuZWZmZWN0aXZlCiAgICAgIC0gZnJvbTogb2JqZWN0LnByaW1hcnkKICAgICAgICB0bzogZ3JvdXAudGFyZ2V0CgojIE5vcm1hbGl6YXRpb25zIGlzIGEgbGlzdCBvZiBkZWNsYXJhdGlvbnMgc3BlY2lmeWluZyBob3cgdG8gbm9ybWFsaXplIHRoZSBkYXRhCiMgY29udGFpbmVkIGluIGFuIGV2ZW50LiBUaGUgbm9ybWFsaXphdGlvbiBjYW4gYmUgYXBwbGllZCBiYXNlZCBvbiB0aGUgc3lzY2FsbAojIG5hbWUgKGUuZy4gY29ubmVjdCwgb3Blbikgb3IgYmFzZWQgb24gdGhlIHJlY29yZCB0eXBlIChlLmcuIFVTRVJfTE9HSU4pLgojIE5vIHR3byBub3JtYWxpemF0aW9ucyBjYW4gYXBwbHkgdG8gdGhlIHNhbWUgc3lzY2FsbCBvciByZWNvcmQgdHlwZS4gVGhpcwojIHdpbGwgcmVzdWx0IGluIGEgZmFpbHVyZSBhdCBsb2FkIHRpbWUuCiMKIyBFYWNoIG5vcm1hbGl6YXRpb24gc2hvdWxkIHNwZWNpZnk6CiMgICBhY3Rpb24gLSB3aGF0IGhhcHBlbmVkCiMgICBhY3RvciAgLSB3aG8gZGlkIHRoaXMgb3Igd2hvIHRyaWdnZXJlZCB0aGUgZXZlbnQKIyAgIG9iamVjdCAtIHdoYXQgd2FzIHRoZSAidGhpbmciIGludm9sdmVkIGluIHRoZSBhY3Rpb24gKGUuZy4gcHJvY2Vzcywgc29ja2V0KQojICAgaG93ICAgIC0gaG93IHdhcyB0aGUgYWN0aW9uIHBlcmZvcm1lZCAoZS5nLiBleGUgb3IgdGVybWluYWwpCm5vcm1hbGl6YXRpb25zOgogIC0gZWNzOiAqZWNzLXByb2Nlc3MKICAgIHN5c2NhbGxzOgogICAgICAtICcqJyAjIHRoaXMgaXMgYSBjYXRjaCBhbGwKICAtIGFjdGlvbjogb3BlbmVkLWZpbGUKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgc3lzY2FsbHM6CiAgICAgICMgY3JlYXQgLSBvcGVuIGFuZCBwb3NzaWJseSBjcmVhdGUgYSBmaWxlCiAgICAgIC0gY3JlYXQKICAgIGVjczoKICAgICAgPDw6ICplY3MtZmlsZQogICAgICB0eXBlOiBjcmVhdGlvbgogIC0gYWN0aW9uOiBvcGVuZWQtZmlsZQogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBmYWxsb2NhdGUgLSBtYW5pcHVsYXRlIGZpbGUgc3BhY2UKICAgICAgLSBmYWxsb2NhdGUKICAgICAgIyB0cnVuY2F0ZSAtIHRydW5jYXRlIGEgZmlsZSB0byBhIHNwZWNpZmllZCBsZW5ndGgKICAgICAgLSB0cnVuY2F0ZQogICAgICAjIGZ0cnVuY2F0ZSAtIHRydW5jYXRlIGEgZmlsZSB0byBhIHNwZWNpZmllZCBsZW5ndGgKICAgICAgLSBmdHJ1bmNhdGUKICAgIGVjczoKICAgICAgPDw6ICplY3MtZmlsZQogICAgICAjIHRlY2huaWNhbGx5IHlvdSBjYW4gdHJ1bmNhdGUgYSBmaWxlIHRvIHRoZSBzYW1lIGxlbmd0aAogICAgICAjIGJ1dCByZWdhcmRsZXNzLCB3ZSBjb25zaWRlciB0aGlzIGEgY2hhbmdlCiAgICAgIHR5cGU6IGNoYW5nZQogIC0gYWN0aW9uOiBvcGVuZWQtZmlsZQogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBvcGVuIC0gb3BlbiBhbmQgcG9zc2libHkgY3JlYXRlIGEgZmlsZQogICAgICAtIG9wZW4KICAgICAgIyBvcGVuYXQgLSBvcGVuIGFuZCBwb3NzaWJseSBjcmVhdGUgYSBmaWxlCiAgICAgIC0gb3BlbmF0CiAgICAgICMgcmVhZGxpbmsgLSByZWFkIHZhbHVlIG9mIGEgc3ltYm9saWMgbGluawogICAgICAtIHJlYWRsaW5rCiAgICAgICMgcmVhZGxpbmthdCAtIHJlYWQgdmFsdWUgb2YgYSBzeW1ib2xpYyBsaW5rCiAgICAgIC0gcmVhZGxpbmthdAogICAgZWNzOiAqZWNzLWZpbGUKICAtIGFjdGlvbjogcmVhZC1maWxlCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIHJlYWQgLSByZWFkIGZyb20gYSBmaWxlIGRlc2NyaXB0b3IKICAgICAgLSByZWFkCiAgICBlY3M6ICplY3MtZmlsZQogIC0gYWN0aW9uOiB3cm90ZS10by1maWxlCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIHdyaXRlIC0gd3JpdGUgdG8gYSBmaWxlIGRlc2NyaXB0b3IKICAgICAgLSB3cml0ZQogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgIHR5cGU6IGNoYW5nZQogIC0gYWN0aW9uOiBjaGFuZ2VkLWZpbGUtYXR0cmlidXRlcy1vZgogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBzZXR4YXR0ciAtIHNldCBhbiBleHRlbmRlZCBhdHRyaWJ1dGUgdmFsdWUKICAgICAgLSBzZXR4YXR0cgogICAgICAjIGZzZXR4YXR0ciAtIHNldCBhbiBleHRlbmRlZCBhdHRyaWJ1dGUgdmFsdWUKICAgICAgLSBmc2V0eGF0dHIKICAgICAgIyBsc2V0eGF0dHIgLSBzZXQgYW4gZXh0ZW5kZWQgYXR0cmlidXRlIHZhbHVlCiAgICAgIC0gbHNldHhhdHRyCiAgICAgICMgcmVtb3ZleGF0dHIgLSByZW1vdmUgYW4gZXh0ZW5kZWQgYXR0cmlidXRlCiAgICAgIC0gcmVtb3ZleGF0dHIKICAgICAgIyBmcmVtb3ZleGF0dHIgLSByZW1vdmUgYW4gZXh0ZW5kZWQgYXR0cmlidXRlCiAgICAgIC0gZnJlbW92ZXhhdHRyCiAgICAgICMgbHJlbW92ZXhhdHRyIC0gcmVtb3ZlIGFuIGV4dGVuZGVkIGF0dHJpYnV0ZQogICAgICAtIGxyZW1vdmV4YXR0cgogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgIHR5cGU6IGNoYW5nZQogIC0gYWN0aW9uOiBjaGFuZ2VkLWZpbGUtcGVybWlzc2lvbnMtb2YKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgc3lzY2FsbHM6CiAgICAgICMgY2htb2QgLSBjaGFuZ2UgcGVybWlzc2lvbnMgb2YgYSBmaWxlCiAgICAgIC0gY2htb2QKICAgICAgIyBmY2htb2QgLSBjaGFuZ2UgcGVybWlzc2lvbnMgb2YgYSBmaWxlCiAgICAgIC0gZmNobW9kCiAgICAgICMgZmNobW9kYXQgLSBjaGFuZ2UgcGVybWlzc2lvbnMgb2YgYSBmaWxlCiAgICAgIC0gZmNobW9kYXQKICAgIGVjczoKICAgICAgPDw6ICplY3MtZmlsZQogICAgICB0eXBlOiBjaGFuZ2UKICAtIGFjdGlvbjogY2hhbmdlZC1maWxlLW93bmVyc2hpcC1vZgogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBjaG93biAtIGNoYW5nZSBvd25lcnNoaXAgb2YgYSBmaWxlCiAgICAgIC0gY2hvd24KICAgICAgIyBmY2hvd24gLSBjaGFuZ2Ugb3duZXJzaGlwIG9mIGEgZmlsZQogICAgICAtIGZjaG93bgogICAgICAjIGZjaG93bmF0IC0gY2hhbmdlIG93bmVyc2hpcCBvZiBhIGZpbGUKICAgICAgLSBmY2hvd25hdAogICAgICAjIGxjaG93biAtIGNoYW5nZSBvd25lcnNoaXAgb2YgYSBmaWxlCiAgICAgIC0gbGNob3duCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgdHlwZTogY2hhbmdlCiAgLSBhY3Rpb246IGxvYWRlZC1rZXJuZWwtbW9kdWxlCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgICAgcHJpbWFyeTogbmFtZQogICAgcmVjb3JkX3R5cGVzOgogICAgICAtIEtFUk5fTU9EVUxFCiAgICBzeXNjYWxsczoKICAgICAgIyBmaW5pdF9tb2R1bGUgLSBsb2FkIGEga2VybmVsIG1vZHVsZQogICAgICAtIGZpbml0X21vZHVsZQogICAgICAjIGluaXRfbW9kdWxlIC0gbG9hZCBhIGtlcm5lbCBtb2R1bGUKICAgICAgLSBpbml0X21vZHVsZQogICAgZWNzOgogICAgICA8PDogKmVjcy1kcml2ZXIKICAgICAgdHlwZTogc3RhcnQKICAtIGFjdGlvbjogdW5sb2FkZWQta2VybmVsLW1vZHVsZQogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBkZWxldGVfbW9kdWxlIC0gdW5sb2FkIGEga2VybmVsIG1vZHVsZQogICAgICAtIGRlbGV0ZV9tb2R1bGUKICAgIGVjczoKICAgICAgPDw6ICplY3MtZHJpdmVyCiAgICAgIHR5cGU6IGVuZAogIC0gYWN0aW9uOiBjcmVhdGVkLWRpcmVjdG9yeQogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICAgIHBhdGhfaW5kZXg6IDEKICAgIHN5c2NhbGxzOgogICAgICAjIG1rZGlyIC0gY3JlYXRlIGEgZGlyZWN0b3J5CiAgICAgIC0gbWtkaXIKICAgICAgIyBta2RpcmF0IC0gY3JlYXRlIGEgZGlyZWN0b3J5CiAgICAgIC0gbWtkaXJhdAogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgIHR5cGU6IGNyZWF0aW9uCiAgLSBhY3Rpb246IG1vdW50ZWQKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZXN5c3RlbQogICAgICBwYXRoX2luZGV4OiAxCiAgICBzeXNjYWxsczoKICAgICAgIyBtb3VudCAtIG1vdW50IGZpbGVzeXN0ZW0KICAgICAgLSBtb3VudAogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgICMgc2luY2UgYSBuZXcgbW91bnQgYXBwZWFycyBvbiB0aGUgc3lzdGVtCiAgICAgICMgd2UgY29uc2lkZXIgdGhpcyBhIGhpZ2gtbGV2ZWwgImNyZWF0aW9uIiBldmVudAogICAgICB0eXBlOiBjcmVhdGlvbgogIC0gYWN0aW9uOiByZW5hbWVkCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgICAgcGF0aF9pbmRleDogMgogICAgc3lzY2FsbHM6CiAgICAgICMgcmVuYW1lIC0gY2hhbmdlIHRoZSBuYW1lIG9yIGxvY2F0aW9uIG9mIGEgZmlsZQogICAgICAtIHJlbmFtZQogICAgICAjIHJlbmFtZWF0IC0gY2hhbmdlIHRoZSBuYW1lIG9yIGxvY2F0aW9uIG9mIGEgZmlsZQogICAgICAtIHJlbmFtZWF0CiAgICAgICMgcmVuYW1lYXQyIC0gY2hhbmdlIHRoZSBuYW1lIG9yIGxvY2F0aW9uIG9mIGEgZmlsZQogICAgICAtIHJlbmFtZWF0MgogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgIHR5cGU6IGNoYW5nZQogIC0gYWN0aW9uOiBjaGVja2VkLW1ldGFkYXRhLW9mCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIGFjY2VzcyAtIGNoZWNrIHVzZXIncyBwZXJtaXNzaW9ucyBmb3IgYSBmaWxlCiAgICAgIC0gYWNjZXNzCiAgICAgICMgZmFjY2Vzc2F0IC0gY2hlY2sgdXNlcidzIHBlcm1pc3Npb25zIGZvciBhIGZpbGUKICAgICAgLSBmYWNjZXNzYXQKICAgICAgIyBmc3RhdGF0IC0gZ2V0IGZpbGUgc3RhdHVzCiAgICAgIC0gZnN0YXRhdAogICAgICAjIG5ld2ZzdGF0YXQgLSBnZXQgZmlsZSBzdGF0dXMKICAgICAgLSBuZXdmc3RhdGF0CiAgICAgICMgc3RhdCAtIGdldCBmaWxlIHN0YXR1cwogICAgICAtIHN0YXQKICAgICAgIyBzdGF0NjQgLSBnZXQgZmlsZSBzdGF0dXMKICAgICAgLSBzdGF0NjQKICAgICAgIyBmc3RhdCAtIGdldCBmaWxlIHN0YXR1cwogICAgICAtIGZzdGF0CiAgICAgICMgbHN0YXQgLSBnZXQgZmlsZSBzdGF0dXMKICAgICAgLSBsc3RhdAogICAgICAjIGdldHhhdHRyIC0gcmV0cmlldmUgYW4gZXh0ZW5kZWQgYXR0cmlidXRlIHZhbHVlCiAgICAgIC0gZ2V0eGF0dHIKICAgICAgIyBsZ2V0eGF0dHIgLSByZXRyaWV2ZSBhbiBleHRlbmRlZCBhdHRyaWJ1dGUgdmFsdWUKICAgICAgLSBsZ2V0eGF0dHIKICAgICAgIyBmZ2V0eGF0dHIgLSByZXRyaWV2ZSBhbiBleHRlbmRlZCBhdHRyaWJ1dGUgdmFsdWUKICAgICAgLSBmZ2V0eGF0dHIKICAgIGVjczogKmVjcy1maWxlCiAgLSBhY3Rpb246IGNoZWNrZWQtZmlsZXN5c3RlbS1tZXRhZGF0YS1vZgogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlc3lzdGVtCiAgICBzeXNjYWxsczoKICAgICAgIyBzdGF0ZnMgLSBnZXQgZmlsZXN5c3RlbSBzdGF0aXN0aWNzCiAgICAgIC0gc3RhdGZzCiAgICAgICMgZnN0YXRmcyAtIGdldCBmaWxlc3lzdGVtIHN0YXRpc3RpY3MKICAgICAgLSBmc3RhdGZzCiAgICBlY3M6ICplY3MtZmlsZQogIC0gYWN0aW9uOiBzeW1saW5rZWQKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgc3lzY2FsbHM6CiAgICAgICMgc3ltbGluayAtIG1ha2UgYSBuZXcgbmFtZSBmb3IgYSBmaWxlCiAgICAgIC0gc3ltbGluawogICAgICAjIHN5bWxpbmthdCAtIG1ha2UgYSBuZXcgbmFtZSBmb3IgYSBmaWxlCiAgICAgIC0gc3ltbGlua2F0CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgIyAiY3JlYXRpb24iIHNpbmNlIHdlJ3JlIGNyZWF0aW5nIGEgbmV3IGZpbGUgc3lzdGVtCiAgICAgICMgZW50cnkgZm9yIHRoZSBzeW1saW5rCiAgICAgIHR5cGU6IGNyZWF0aW9uCiAgLSBhY3Rpb246IHVubW91bnRlZAogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlc3lzdGVtCiAgICBzeXNjYWxsczoKICAgICAgIyB1bW91bnQgLSB1bm1vdW50IGZpbGVzeXN0ZW0KICAgICAgLSB1bW91bnQKICAgICAgIyB1bW91bnQyIC0gdW5tb3VudCBmaWxlc3lzdGVtCiAgICAgIC0gdW1vdW50MgogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgICMgImRlbGV0aW9uIiB0byBtaXJyb3IgdGhlICJjcmVhdGlvbiIgb2YgdGhlIG1vdW50CiAgICAgIHR5cGU6IGRlbGV0aW9uCiAgLSBhY3Rpb246IGRlbGV0ZWQKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgc3lzY2FsbHM6CiAgICAgICMgcm1kaXIgLSBkZWxldGUgYSBkaXJlY3RvcnkKICAgICAgLSBybWRpcgogICAgICAjIHVubGluayAtIGRlbGV0ZSBhIG5hbWUgYW5kIHBvc3NpYmx5IHRoZSBmaWxlIGl0IHJlZmVycyB0bwogICAgICAtIHVubGluawogICAgICAjIHVubGlua2F0IC0gZGVsZXRlIGEgbmFtZSBhbmQgcG9zc2libHkgdGhlIGZpbGUgaXQgcmVmZXJzIHRvCiAgICAgIC0gdW5saW5rYXQKICAgIGVjczoKICAgICAgPDw6ICplY3MtZmlsZQogICAgICB0eXBlOiBkZWxldGlvbgogIC0gYWN0aW9uOiBjaGFuZ2VkLXRpbWVzdGFtcC1vZgogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyB1dGltZSAtIGNoYW5nZSBmaWxlIGxhc3QgYWNjZXNzIGFuZCBtb2RpZmljYXRpb24gdGltZXMKICAgICAgLSB1dGltZQogICAgICAjIHV0aW1lcyAtIGNoYW5nZSBmaWxlIGxhc3QgYWNjZXNzIGFuZCBtb2RpZmljYXRpb24gdGltZXMKICAgICAgLSB1dGltZXMKICAgICAgIyBmdXRpbWVzYXQgLSBjaGFuZ2UgdGltZXN0YW1wcyBvZiBhIGZpbGUgcmVsYXRpdmUgdG8gYSBcIGRpcmVjdG9yeSBmaWxlIGRlc2NyaXB0b3IKICAgICAgLSBmdXRpbWVzYXQKICAgICAgIyBmdXRpbWVucyAtIGNoYW5nZSBmaWxlIHRpbWVzdGFtcHMgd2l0aCBuYW5vc2Vjb25kIHByZWNpc2lvbgogICAgICAtIGZ1dGltZW5zCiAgICAgICMgdXRpbWVuc2F0IC0gY2hhbmdlIGZpbGUgdGltZXN0YW1wcyB3aXRoIG5hbm9zZWNvbmQgcHJlY2lzaW9uCiAgICAgIC0gdXRpbWVuc2F0CiAgICBlY3M6ICplY3MtZmlsZQogIC0gYWN0aW9uOiBleGVjdXRlZAogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBleGVjdmUgLSBleGVjdXRlIHByb2dyYW0KICAgICAgLSBleGVjdmUKICAgICAgIyBleGVjdmVhdCAtIGV4ZWN1dGUgcHJvZ3JhbSByZWxhdGl2ZSB0byBhIGRpcmVjdG9yeSBmaWxlIGRlc2NyaXB0b3IKICAgICAgLSBleGVjdmVhdAogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IHN0YXJ0CiAgLSBhY3Rpb246IGxpc3Rlbi1mb3ItY29ubmVjdGlvbnMKICAgIG9iamVjdDoKICAgICAgd2hhdDogc29ja2V0CiAgICBzeXNjYWxsczoKICAgICAgIyBsaXN0ZW4tIGxpc3RlbiBmb3IgY29ubmVjdGlvbnMgb24gYSBzb2NrZXQKICAgICAgLSBsaXN0ZW4KICAgIGVjczoKICAgICAgPDw6ICplY3MtbmV0d29yawogICAgICB0eXBlOiBzdGFydAogIC0gYWN0aW9uOiBhY2NlcHRlZC1jb25uZWN0aW9uLWZyb20KICAgIG9iamVjdDoKICAgICAgd2hhdDogc29ja2V0CiAgICBzeXNjYWxsczoKICAgICAgIyBhY2NlcHQgLSBhY2NlcHQgYSBjb25uZWN0aW9uIG9uIGEgc29ja2V0CiAgICAgIC0gYWNjZXB0CiAgICAgICMgYWNjZXB0NCAtIGFjY2VwdCBhIGNvbm5lY3Rpb24gb24gYSBzb2NrZXQKICAgICAgLSBhY2NlcHQ0CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLW5ldHdvcmsKICAgICAgdHlwZToKICAgICAgICAtIGNvbm5lY3Rpb24KICAgICAgICAtIHN0YXJ0CiAgLSBhY3Rpb246IGJvdW5kLXNvY2tldAogICAgb2JqZWN0OgogICAgICB3aGF0OiBzb2NrZXQKICAgIHN5c2NhbGxzOgogICAgICAjIGJpbmQgLWJpbmQgYSBuYW1lIHRvIGEgc29ja2V0CiAgICAgIC0gYmluZAogICAgZWNzOgogICAgICA8PDogKmVjcy1uZXR3b3JrCiAgICAgIHR5cGU6IHN0YXJ0CiAgLSBhY3Rpb246IGNvbm5lY3RlZC10bwogICAgb2JqZWN0OgogICAgICB3aGF0OiBzb2NrZXQKICAgIHN5c2NhbGxzOgogICAgICAtIGNvbm5lY3QKICAgIGVjczoKICAgICAgPDw6ICplY3MtbmV0d29yawogICAgICB0eXBlOgogICAgICAgIC0gY29ubmVjdGlvbgogICAgICAgIC0gc3RhcnQKICAtIGFjdGlvbjogcmVjZWl2ZWQtZnJvbQogICAgb2JqZWN0OgogICAgICB3aGF0OiBzb2NrZXQKICAgIHN5c2NhbGxzOgogICAgICAjIHJlY3YgLSByZWNlaXZlIGEgbWVzc2FnZSBmcm9tIGEgc29ja2V0CiAgICAgIC0gcmVjdgogICAgICAjIHJlY3Zmcm9tIC0gcmVjZWl2ZSBhIG1lc3NhZ2UgZnJvbSBhIHNvY2tldAogICAgICAtIHJlY3Zmcm9tCiAgICAgICMgcmVjdm1zZyAtIHJlY2VpdmUgYSBtZXNzYWdlIGZyb20gYSBzb2NrZXQKICAgICAgLSByZWN2bXNnCiAgICAgICMgcmVjdm1tc2cgLSByZWNlaXZlIG11bHRpcGxlIG1lc3NhZ2VzIG9uIGEgc29ja2V0CiAgICAgIC0gcmVjdm1tc2cKICAgIGVjczoKICAgICAgPDw6ICplY3MtbmV0d29yawogIC0gYWN0aW9uOiBzZW50LXRvCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNvY2tldAogICAgc3lzY2FsbHM6CiAgICAgICMgc2VuZCAtIHNlbmQgYSBtZXNzYWdlIG9uIGEgc29ja2V0CiAgICAgIC0gc2VuZAogICAgICAjIHNlbmR0byAtIHNlbmQgYSBtZXNzYWdlIG9uIGEgc29ja2V0CiAgICAgIC0gc2VuZHRvCiAgICAgICMgc2VuZG1zZyAtIHNlbmQgYSBtZXNzYWdlIG9uIGEgc29ja2V0CiAgICAgIC0gc2VuZG1zZwogICAgICAjIHNlbmRtbXNnIC0gc2VuZCBtdWx0aXBsZSBtZXNzYWdlcyBvbiBhIHNvY2tldAogICAgICAtIHNlbmRtbXNnCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLW5ldHdvcmsKICAtIGFjdGlvbjoga2lsbGVkLXBpZAogICAgb2JqZWN0OgogICAgICB3aGF0OiBwcm9jZXNzCiAgICBzeXNjYWxsczoKICAgICAgIyBraWxsIC0gc2VuZCBzaWduYWwgdG8gYSBwcm9jZXNzCiAgICAgIC0ga2lsbAogICAgICAjIHRraWxsIC0gc2VuZCBhIHNpZ25hbCB0byBhIHRocmVhZAogICAgICAtIHRraWxsCiAgICAgICMgdGdraWxsIC0gc2VuZCBhIHNpZ25hbCB0byBhIHRocmVhZAogICAgICAtIHRna2lsbAogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IGVuZAogIC0gYWN0aW9uOiBjaGFuZ2VkLWlkZW50aXR5LW9mCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHByb2Nlc3MKICAgIGhvdzogc3lzY2FsbAogICAgc3lzY2FsbHM6CiAgICAgICMgc2V0dWlkIC0gc2V0IHVzZXIgaWRlbnRpdHkKICAgICAgLSBzZXR1aWQKICAgICAgIyBzZXRldWlkIC0gc2V0IGVmZmVjdGl2ZSB1c2VyIG9yIGdyb3VwIElECiAgICAgIC0gc2V0ZXVpZAogICAgICAjIHNldGZzdWlkIC0gc2V0IHVzZXIgaWRlbnRpdHkgdXNlZCBmb3IgZmlsZXN5c3RlbSBjaGVja3MKICAgICAgLSBzZXRmc3VpZAogICAgICAjIHNldHJldWlkIC0gc2V0IHJlYWwgYW5kL29yIGVmZmVjdGl2ZSB1c2VyIG9yIGdyb3VwIElECiAgICAgIC0gc2V0cmV1aWQKICAgICAgIyBzZXRnaWQgLSBzZXQgZ3JvdXAgaWRlbnRpdHkKICAgICAgLSBzZXRnaWQKICAgICAgIyBzZXRlZ2lkIC0gc2V0IGVmZmVjdGl2ZSB1c2VyIG9yIGdyb3VwIElECiAgICAgIC0gc2V0ZWdpZAogICAgICAjIHNldGZzZ2lkIC0gc2V0IGdyb3VwIGlkZW50aXR5IHVzZWQgZm9yIGZpbGVzeXN0ZW0gY2hlY2tzCiAgICAgIC0gc2V0ZnNnaWQKICAgICAgIyBzZXRyZWdpZCAtIHNldCByZWFsIGFuZC9vciBlZmZlY3RpdmUgdXNlciBvciBncm91cCBJRAogICAgICAtIHNldHJlZ2lkCiAgICAgICMgc2V0cmVzdWlkIC0gc2V0IHJlYWwsIGVmZmVjdGl2ZSBhbmQgc2F2ZWQgdXNlciBvciBncm91cCBJRAogICAgICAtIHNldHJlc3VpZAogICAgICAjIHNldHJlc2dpZCAtIHNldCByZWFsLCBlZmZlY3RpdmUgYW5kIHNhdmVkIHVzZXIgb3IgZ3JvdXAgSUQKICAgICAgLSBzZXRyZXNnaWQKICAgIGVjczoKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBjaGFuZ2UKICAtIGFjdGlvbjogY2hhbmdlZC1zeXN0ZW0tdGltZQogICAgb2JqZWN0OgogICAgICB3aGF0OiBzeXN0ZW0KICAgIHN5c2NhbGxzOgogICAgICAjIHNldHRpbWVvZmRheSAtIGdldCAvIHNldCB0aW1lCiAgICAgIC0gc2V0dGltZW9mZGF5CiAgICAgICMgY2xvY2tfc2V0dGltZSAtIGNsb2NrIGFuZCB0aW1lIGZ1bmN0aW9ucwogICAgICAtIGNsb2NrX3NldHRpbWUKICAgICAgIyBzdGltZSAtIHNldCB0aW1lCiAgICAgIC0gc3RpbWUKICAgICAgIyBhZGp0aW1leCAtIHR1bmUga2VybmVsIGNsb2NrCiAgICAgIC0gYWRqdGltZXgKICAgIGVjczoKICAgICAgPDw6ICplY3MtaG9zdAogICAgICB0eXBlOiBjaGFuZ2UKICAtIGFjdGlvbjogbWFrZS1kZXZpY2UKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgc3lzY2FsbHM6CiAgICAgICMgbWtub2QgLSBjcmVhdGUgYSBzcGVjaWFsIG9yIG9yZGluYXJ5IGZpbGUKICAgICAgLSBta25vZAogICAgICAjIG1rbm9kYXQgLSBjcmVhdGUgYSBzcGVjaWFsIG9yIG9yZGluYXJ5IGZpbGUKICAgICAgLSBta25vZGF0CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgdHlwZTogY3JlYXRpb24KICAtIGFjdGlvbjogY2hhbmdlZC1zeXN0ZW0tbmFtZQogICAgb2JqZWN0OgogICAgICB3aGF0OiBzeXN0ZW0KICAgIHN5c2NhbGxzOgogICAgICAjIHNldGhvc3RuYW1lIC0gZ2V0L3NldCBob3N0bmFtZQogICAgICAtIHNldGhvc3RuYW1lCiAgICAgICMgc2V0ZG9tYWlubmFtZSAtIGdldC9zZXQgTklTIGRvbWFpbiBuYW1lCiAgICAgIC0gc2V0ZG9tYWlubmFtZQogICAgZWNzOgogICAgICA8PDogKmVjcy1ob3N0CiAgICAgIHR5cGU6IGNoYW5nZQogIC0gYWN0aW9uOiBhbGxvY2F0ZWQtbWVtb3J5CiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IG1lbW9yeQogICAgc3lzY2FsbHM6CiAgICAgICMgbW1hcCAtIG1hcCBvciB1bm1hcCBmaWxlcyBvciBkZXZpY2VzIGludG8gbWVtb3J5CiAgICAgIC0gbW1hcAogICAgICAjIG1tYXAyIC0gbWFwIGZpbGVzIG9yIGRldmljZXMgaW50byBtZW1vcnkKICAgICAgLSBtbWFwMgogICAgICAjIGJyayAtIGNoYW5nZSBkYXRhIHNlZ21lbnQgc2l6ZQogICAgICAtIGJyawogICAgZWNzOiAqZWNzLXByb2Nlc3MKICAtIGFjdGlvbjogYWRqdXN0ZWQtc2NoZWR1bGluZy1wb2xpY3ktb2YKICAgIG9iamVjdDoKICAgICAgd2hhdDogcHJvY2VzcwogICAgaG93OiBzeXNjYWxsCiAgICBzeXNjYWxsczoKICAgICAgIyBzY2hlZF9zZXRwYXJhbSAtIHNldCBhbmQgZ2V0IHNjaGVkdWxpbmcgcGFyYW1ldGVycwogICAgICAtIHNjaGVkX3NldHBhcmFtCiAgICAgICMgc2NoZWRfc2V0c2NoZWR1bGVyIC0gc2V0IGFuZCBnZXQgc2NoZWR1bGluZyBwb2xpY3kvcGFyYW1ldGVycwogICAgICAtIHNjaGVkX3NldHNjaGVkdWxlcgogICAgICAjIHNjaGVkX3NldGF0dHIgLSBzZXQgYW5kIGdldCBzY2hlZHVsaW5nIHBvbGljeSBhbmQgYXR0cmlidXRlcwogICAgICAtIHNjaGVkX3NldGF0dHIKICAgIGVjczoKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBjaGFuZ2UKCiAgIyBDdXJyZW50bHkgdW5oYW5kbGVkCiAgIyB0aGlzIGxpc3QgY29tZXMgZnJvbSBwYXJzaW5nIGxpbnV4IG1hbiBwYWdlcyBhdCBodHRwczovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vZG9jcy9tYW4tcGFnZXMvbWFuLXBhZ2VzLmdpdAoKICAjIHNpZ2FjdGlvbiAtIGV4YW1pbmUgYW5kIGNoYW5nZSBhIHNpZ25hbCBhY3Rpb24KICAjIHJ0X3NpZ2FjdGlvbiAtIGV4YW1pbmUgYW5kIGNoYW5nZSBhIHNpZ25hbCBhY3Rpb24KICAjIHByZWFkIC0gcmVhZCBmcm9tIG9yIHdyaXRlIHRvIGEgZmlsZSBkZXNjcmlwdG9yIGF0IGEgZ2l2ZW4gb2Zmc2V0CiAgIyBwd3JpdGUgLSByZWFkIGZyb20gb3Igd3JpdGUgdG8gYSBmaWxlIGRlc2NyaXB0b3IgYXQgYSBnaXZlbiBvZmZzZXQKICAjIHMzOTBfZ3VhcmRlZF9zdG9yYWdlIC0gb3BlcmF0aW9ucyB3aXRoIHovQXJjaGl0ZWN0dXJlIGd1YXJkZWQgc3RvcmFnZSBmYWNpbGl0eQogICMgc2NoZWRfZ2V0YXR0ciAtIHNldCBhbmQgZ2V0IHNjaGVkdWxpbmcgcG9saWN5IGFuZCBhdHRyaWJ1dGVzCiAgIyBnZXRydXNhZ2UgLSBnZXQgcmVzb3VyY2UgdXNhZ2UKICAjIGZsb2NrIC0gYXBwbHkgb3IgcmVtb3ZlIGFuIGFkdmlzb3J5IGxvY2sgb24gYW4gb3BlbiBmaWxlCiAgIyBwaWRmZF9nZXRmZCAtIG9idGFpbiBhIGR1cGxpY2F0ZSBvZiBhbm90aGVyIHByb2Nlc3MncyBmaWxlIGRlc2NyaXB0b3IKICAjIGNsb2NrX25hbm9zbGVlcCAtIGhpZ2gtcmVzb2x1dGlvbiBzbGVlcCB3aXRoIHNwZWNpZmlhYmxlIGNsb2NrCiAgIyBnZXRwYWdlc2l6ZSAtIGdldCBtZW1vcnkgcGFnZSBzaXplCiAgIyBwaWRmZF9vcGVuIC0gb2J0YWluIGEgZmlsZSBkZXNjcmlwdG9yIHRoYXQgcmVmZXJzIHRvIGEgcHJvY2VzcwogICMgc3BsaWNlIC0gc3BsaWNlIGRhdGEgdG8vZnJvbSBhIHBpcGUKICAjIGdldHJlc3VpZCAtIGdldCByZWFsLCBlZmZlY3RpdmUgYW5kIHNhdmVkIHVzZXIvZ3JvdXAgSURzCiAgIyBnZXRyZXNnaWQgLSBnZXQgcmVhbCwgZWZmZWN0aXZlIGFuZCBzYXZlZCB1c2VyL2dyb3VwIElEcwogICMgcmVtYXBfZmlsZV9wYWdlcyAtIGNyZWF0ZSBhIG5vbmxpbmVhciBmaWxlIG1hcHBpbmcKICAjIGlvX2NhbmNlbCAtIGNhbmNlbCBhbiBvdXRzdGFuZGluZyBhc3luY2hyb25vdXMgSS9PIG9wZXJhdGlvbgogICMgcHJjdGwgLSBvcGVyYXRpb25zIG9uIGEgcHJvY2VzcyBvciB0aHJlYWQKICAjIGNsb2NrX2dldHJlcyAtIGNsb2NrIGFuZCB0aW1lIGZ1bmN0aW9ucwogICMgY2xvY2tfZ2V0dGltZSAtIGNsb2NrIGFuZCB0aW1lIGZ1bmN0aW9ucwogICMgZ2V0Z3JvdXBzIC0gZ2V0L3NldCBsaXN0IG9mIHN1cHBsZW1lbnRhcnkgZ3JvdXAgSURzCiAgIyBzZXRncm91cHMgLSBnZXQvc2V0IGxpc3Qgb2Ygc3VwcGxlbWVudGFyeSBncm91cCBJRHMKICAjIHZtc3BsaWNlIC0gc3BsaWNlIHVzZXIgcGFnZXMgdG8vZnJvbSBhIHBpcGUKICAjIGVwb2xsX2NyZWF0ZSAtIG9wZW4gYW4gZXBvbGwgZmlsZSBkZXNjcmlwdG9yCiAgIyBlcG9sbF9jcmVhdGUxIC0gb3BlbiBhbiBlcG9sbCBmaWxlIGRlc2NyaXB0b3IKICAjIHBvc2l4X2ZhZHZpc2UgLSBwcmVkZWNsYXJlIGFuIGFjY2VzcyBwYXR0ZXJuIGZvciBmaWxlIGRhdGEKICAjIHNpZ3dhaXRpbmZvIC0gc3luY2hyb25vdXNseSB3YWl0IGZvciBxdWV1ZWQgc2lnbmFscwogICMgc2lndGltZWR3YWl0IC0gc3luY2hyb25vdXNseSB3YWl0IGZvciBxdWV1ZWQgc2lnbmFscwogICMgcnRfc2lndGltZWR3YWl0IC0gc3luY2hyb25vdXNseSB3YWl0IGZvciBxdWV1ZWQgc2lnbmFscwogICMgc2lncmV0dXJuIC0gcmV0dXJuIGZyb20gc2lnbmFsIGhhbmRsZXIgYW5kIGNsZWFudXAgc3RhY2sgZnJhbWUKICAjIHJ0X3NpZ3JldHVybiAtIHJldHVybiBmcm9tIHNpZ25hbCBoYW5kbGVyIGFuZCBjbGVhbnVwIHN0YWNrIGZyYW1lCiAgIyBnZXRyYW5kb20gLSBvYnRhaW4gYSBzZXJpZXMgb2YgcmFuZG9tIGJ5dGVzCiAgIyBrZXljdGwgLSBtYW5pcHVsYXRlIHRoZSBrZXJuZWwncyBrZXkgbWFuYWdlbWVudCBmYWNpbGl0eQogICMgc2NoZWRfZ2V0c2NoZWR1bGVyIC0gc2V0IGFuZCBnZXQgc2NoZWR1bGluZyBwb2xpY3kvcGFyYW1ldGVycwogICMgbWJpbmQgLSBzZXQgbWVtb3J5IHBvbGljeSBmb3IgYSBtZW1vcnkgcmFuZ2UKICAjIGdldHByaW9yaXR5IC0gZ2V0L3NldCBwcm9ncmFtIHNjaGVkdWxpbmcgcHJpb3JpdHkKICAjIHNldHByaW9yaXR5IC0gZ2V0L3NldCBwcm9ncmFtIHNjaGVkdWxpbmcgcHJpb3JpdHkKICAjIGlub3RpZnlfaW5pdCAtIGluaXRpYWxpemUgYW4gaW5vdGlmeSBpbnN0YW5jZQogICMgaW5vdGlmeV9pbml0MSAtIGluaXRpYWxpemUgYW4gaW5vdGlmeSBpbnN0YW5jZQogICMgc2VtY3RsIC0gU3lzdGVtIFYgc2VtYXBob3JlIGNvbnRyb2wgb3BlcmF0aW9ucwogICMgZ2V0aG9zdG5hbWUgLSBnZXQvc2V0IGhvc3RuYW1lCiAgIyBwdHJhY2UgLSBwcm9jZXNzIHRyYWNlCiAgIyBzeXNjdGwgLSByZWFkL3dyaXRlIHN5c3RlbSBwYXJhbWV0ZXJzCiAgIyBnZXRwZWVybmFtZSAtIGdldCBuYW1lIG9mIGNvbm5lY3RlZCBwZWVyIHNvY2tldAogICMgZm9yayAtIGNyZWF0ZSBhIGNoaWxkIHByb2Nlc3MKICAjIHF1ZXJ5X21vZHVsZSAtIHF1ZXJ5IHRoZSBrZXJuZWwgZm9yIHZhcmlvdXMgYml0cyBwZXJ0YWluaW5nIHRvIG1vZHVsZXMKICAjIGlvY3RsX2xpc3QgLSBsaXN0IG9mIGlvY3RsIGNhbGxzIGluIExpbnV4L2kzODYga2VybmVsCiAgIyBtc2dnZXQgLSBnZXQgYSBTeXN0ZW0gViBtZXNzYWdlIHF1ZXVlIGlkZW50aWZpZXIKICAjIHNwdV9jcmVhdGUgLSBjcmVhdGUgYSBuZXcgc3B1IGNvbnRleHQKICAjIHN1YnBhZ2VfcHJvdCAtIGRlZmluZSBhIHN1YnBhZ2UgcHJvdGVjdGlvbiBmb3IgYW4gYWRkcmVzcyByYW5nZQogICMgcXVvdGFjdGwgLSBtYW5pcHVsYXRlIGRpc2sgcXVvdGFzCiAgIyBuZnNzZXJ2Y3RsIC0gc3lzY2FsbCBpbnRlcmZhY2UgdG8ga2VybmVsIG5mcyBkYWVtb24KICAjIG9wZW5hdDIgLSBvcGVuIGFuZCBwb3NzaWJseSBjcmVhdGUgYSBmaWxlIChleHRlbmRlZCkKICAjIGdldHJsaW1pdCAtIGdldC9zZXQgcmVzb3VyY2UgbGltaXRzCiAgIyBzZXRybGltaXQgLSBnZXQvc2V0IHJlc291cmNlIGxpbWl0cwogICMgcHJsaW1pdCAtIGdldC9zZXQgcmVzb3VyY2UgbGltaXRzCiAgIyB0ZWUgLSBkdXBsaWNhdGluZyBwaXBlIGNvbnRlbnQKICAjIHNobWdldCAtIGFsbG9jYXRlcyBhIFN5c3RlbSBWIHNoYXJlZCBtZW1vcnkgc2VnbWVudAogICMgY3JlYXRlX21vZHVsZSAtIGNyZWF0ZSBhIGxvYWRhYmxlIG1vZHVsZSBlbnRyeQogICMgZ2V0dGltZW9mZGF5IC0gZ2V0IC8gc2V0IHRpbWUKICAjIHRpbWVyX2NyZWF0ZSAtIGNyZWF0ZSBhIFBPU0lYIHBlci1wcm9jZXNzIHRpbWVyCiAgIyBmYW5vdGlmeV9tYXJrIC0gYWRkLCByZW1vdmUsIG9yIG1vZGlmeSBhbiBmYW5vdGlmeSBtYXJrIG9uIGEgZmlsZXN5c3RlbSBvYmplY3QKICAjIHBpcGUgLSBjcmVhdGUgcGlwZQogICMgcGlwZTIgLSBjcmVhdGUgcGlwZQogICMgaW50cm8gLSBpbnRyb2R1Y3Rpb24gdG8gc3lzdGVtIGNhbGxzCiAgIyBsb29rdXBfZGNvb2tpZSAtIHJldHVybiBhIGRpcmVjdG9yeSBlbnRyeSdzIHBhdGgKICAjIHN5c2ZzIC0gZ2V0IGZpbGVzeXN0ZW0gdHlwZSBpbmZvcm1hdGlvbgogICMgczM5MF9ydW50aW1lX2luc3RyIC0gZW5hYmxlL2Rpc2FibGUgczM5MCBDUFUgcnVuLXRpbWUgaW5zdHJ1bWVudGF0aW9uCiAgIyBzZXRucyAtIHJlYXNzb2NpYXRlIHRocmVhZCB3aXRoIGEgbmFtZXNwYWNlCiAgIyBzZXRfbWVtcG9saWN5IC0gc2V0IGRlZmF1bHQgTlVNQSBtZW1vcnkgcG9saWN5IGZvciBhIHRocmVhZCBhbmQgaXRzIGNoaWxkcmVuCiAgIyBuaWNlIC0gY2hhbmdlIHByb2Nlc3MgcHJpb3JpdHkKICAjIGlvX3NldHVwIC0gY3JlYXRlIGFuIGFzeW5jaHJvbm91cyBJL08gY29udGV4dAogICMgbWluY29yZSAtIGRldGVybWluZSB3aGV0aGVyIHBhZ2VzIGFyZSByZXNpZGVudCBpbiBtZW1vcnkKICAjIGlvY3RsX2NvbnNvbGUgLSBpb2N0bHMgZm9yIGNvbnNvbGUgdGVybWluYWwgYW5kIHZpcnR1YWwgY29uc29sZXMKICAjIHBvbGwgLSB3YWl0IGZvciBzb21lIGV2ZW50IG9uIGEgZmlsZSBkZXNjcmlwdG9yCiAgIyBwcG9sbCAtIHdhaXQgZm9yIHNvbWUgZXZlbnQgb24gYSBmaWxlIGRlc2NyaXB0b3IKICAjIGNhcGdldCAtIHNldC9nZXQgY2FwYWJpbGl0aWVzIG9mIHRocmVhZChzKQogICMgY2Fwc2V0IC0gc2V0L2dldCBjYXBhYmlsaXRpZXMgb2YgdGhyZWFkKHMpCiAgIyBpb2N0bF90dHkgLSBpb2N0bHMgZm9yIHRlcm1pbmFscyBhbmQgc2VyaWFsIGxpbmVzCiAgIyBpb3BsIC0gY2hhbmdlIEkvTyBwcml2aWxlZ2UgbGV2ZWwKICAjIGlvX2dldGV2ZW50cyAtIHJlYWQgYXN5bmNocm9ub3VzIEkvTyBldmVudHMgZnJvbSB0aGUgY29tcGxldGlvbiBxdWV1ZQogICMgcHJvY2Vzc192bV9yZWFkdiAtIHRyYW5zZmVyIGRhdGEgYmV0d2VlbiBwcm9jZXNzIGFkZHJlc3Mgc3BhY2VzCiAgIyBwcm9jZXNzX3ZtX3dyaXRldiAtIHRyYW5zZmVyIGRhdGEgYmV0d2VlbiBwcm9jZXNzIGFkZHJlc3Mgc3BhY2VzCiAgIyBwY2ljb25maWdfcmVhZCAtIHBjaSBkZXZpY2UgaW5mb3JtYXRpb24gaGFuZGxpbmcKICAjIHBjaWNvbmZpZ193cml0ZSAtIHBjaSBkZXZpY2UgaW5mb3JtYXRpb24gaGFuZGxpbmcKICAjIHBjaWNvbmZpZ19pb2Jhc2UgLSBwY2kgZGV2aWNlIGluZm9ybWF0aW9uIGhhbmRsaW5nCiAgIyBzYnJrIC0gY2hhbmdlIGRhdGEgc2VnbWVudCBzaXplCiAgIyBzZXRfdGlkX2FkZHJlc3MgLSBzZXQgcG9pbnRlciB0byB0aHJlYWQgSUQKICAjIHBrZXlfYWxsb2MgLSBhbGxvY2F0ZSBvciBmcmVlIGEgcHJvdGVjdGlvbiBrZXkKICAjIHBrZXlfZnJlZSAtIGFsbG9jYXRlIG9yIGZyZWUgYSBwcm90ZWN0aW9uIGtleQogICMgc2VsZWN0IC0gc3luY2hyb25vdXMgSS9PIG11bHRpcGxleGluZwogICMgcHNlbGVjdCAtIHN5bmNocm9ub3VzIEkvTyBtdWx0aXBsZXhpbmcKICAjIGtleGVjX2xvYWQgLSBsb2FkIGEgbmV3IGtlcm5lbCBmb3IgbGF0ZXIgZXhlY3V0aW9uCiAgIyBrZXhlY19maWxlX2xvYWQgLSBsb2FkIGEgbmV3IGtlcm5lbCBmb3IgbGF0ZXIgZXhlY3V0aW9uCiAgIyBwZXJzb25hbGl0eSAtIHNldCB0aGUgcHJvY2VzcyBleGVjdXRpb24gZG9tYWluCiAgIyBpb2N0bF9nZXRmc21hcCAtIHJldHJpZXZlIHRoZSBwaHlzaWNhbCBsYXlvdXQgb2YgdGhlIGZpbGVzeXN0ZW0KICAjIGlub3RpZnlfcm1fd2F0Y2ggLSByZW1vdmUgYW4gZXhpc3Rpbmcgd2F0Y2ggZnJvbSBhbiBpbm90aWZ5IGluc3RhbmNlCiAgIyBwZXJmX2V2ZW50X29wZW4gLSBzZXQgdXAgcGVyZm9ybWFuY2UgbW9uaXRvcmluZwogICMgdGltZXJfZ2V0b3ZlcnJ1biAtIGdldCBvdmVycnVuIGNvdW50IGZvciBhIFBPU0lYIHBlci1wcm9jZXNzIHRpbWVyCiAgIyB3YWl0MyAtIHdhaXQgZm9yIHByb2Nlc3MgdG8gY2hhbmdlIHN0YXRlLCBCU0Qgc3R5bGUKICAjIHdhaXQ0IC0gd2FpdCBmb3IgcHJvY2VzcyB0byBjaGFuZ2Ugc3RhdGUsIEJTRCBzdHlsZQogICMgbGluayAtIG1ha2UgYSBuZXcgbmFtZSBmb3IgYSBmaWxlCiAgIyBsaW5rYXQgLSBtYWtlIGEgbmV3IG5hbWUgZm9yIGEgZmlsZQogICMgc2NoZWRfcnJfZ2V0X2ludGVydmFsIC0gZ2V0IHRoZSBTQ0hFRF9SUiBpbnRlcnZhbCBmb3IgdGhlIG5hbWVkIHByb2Nlc3MKICAjIG11bm1hcCAtIG1hcCBvciB1bm1hcCBmaWxlcyBvciBkZXZpY2VzIGludG8gbWVtb3J5CiAgIyBzb2NrZXRjYWxsIC0gc29ja2V0IHN5c3RlbSBjYWxscwogICMgbXJlbWFwIC0gcmVtYXAgYSB2aXJ0dWFsIG1lbW9yeSBhZGRyZXNzCiAgIyB2Zm9yayAtIGNyZWF0ZSBhIGNoaWxkIHByb2Nlc3MgYW5kIGJsb2NrIHBhcmVudAogICMgc2VjY29tcCAtIG9wZXJhdGUgb24gU2VjdXJlIENvbXB1dGluZyBzdGF0ZSBvZiB0aGUgcHJvY2VzcwogICMgcmVxdWVzdF9rZXkgLSByZXF1ZXN0IGEga2V5IGZyb20gdGhlIGtlcm5lbCdzIGtleSBtYW5hZ2VtZW50IGZhY2lsaXR5CiAgIyBzeXNjYWxsIC0gaW5kaXJlY3Qgc3lzdGVtIGNhbGwKICAjIGtjbXAgLSBjb21wYXJlIHR3byBwcm9jZXNzZXMgdG8gZGV0ZXJtaW5lIGlmIHRoZXkgc2hhcmUgYSBrZXJuZWwgcmVzb3VyY2UKICAjIHJlYWRkaXIgLSByZWFkIGRpcmVjdG9yeSBlbnRyeQogICMgaW9wZXJtIC0gc2V0IHBvcnQgaW5wdXQvb3V0cHV0IHBlcm1pc3Npb25zCiAgIyBzcHVfcnVuIC0gZXhlY3V0ZSBhbiBTUFUgY29udGV4dAogICMgcmVib290IC0gcmVib290IG9yIGVuYWJsZS9kaXNhYmxlIEN0cmwtQWx0LURlbAogICMgcmVhZGFoZWFkIC0gaW5pdGlhdGUgZmlsZSByZWFkYWhlYWQgaW50byBwYWdlIGNhY2hlCiAgIyBzY2hlZF9nZXRwYXJhbSAtIHNldCBhbmQgZ2V0IHNjaGVkdWxpbmcgcGFyYW1ldGVycwogICMgYWNjdCAtIHN3aXRjaCBwcm9jZXNzIGFjY291bnRpbmcgb24gb3Igb2ZmCiAgIyBzaWdzdXNwZW5kIC0gd2FpdCBmb3IgYSBzaWduYWwKICAjIHJ0X3NpZ3N1c3BlbmQgLSB3YWl0IGZvciBhIHNpZ25hbAogICMgZXhpdF9ncm91cCAtIGV4aXQgYWxsIHRocmVhZHMgaW4gYSBwcm9jZXNzCiAgIyBzb2NrZXQgLSBjcmVhdGUgYW4gZW5kcG9pbnQgZm9yIGNvbW11bmljYXRpb24KICAjIGlvY3RsX3VzZXJmYXVsdGZkIC0gY3JlYXRlIGEgZmlsZSBkZXNjcmlwdG9yIGZvciBoYW5kbGluZyBwYWdlIGZhdWx0cyBpbiB1c2VyIHNwYWNlCiAgIyBzY2hlZF9nZXRfcHJpb3JpdHlfbWF4IC0gZ2V0IHN0YXRpYyBwcmlvcml0eSByYW5nZQogICMgc2NoZWRfZ2V0X3ByaW9yaXR5X21pbiAgLSBnZXQgc3RhdGljIHByaW9yaXR5IHJhbmdlCiAgIyBnZXRkZW50cyAtIGdldCBkaXJlY3RvcnkgZW50cmllcwogICMgZ2V0ZGVudHM2NCAtIGdldCBkaXJlY3RvcnkgZW50cmllcwogICMgc2VsZWN0IC0gc3luY2hyb25vdXMgSS9PIG11bHRpcGxleGluZwogICMgcHNlbGVjdCAtIHN5bmNocm9ub3VzIEkvTyBtdWx0aXBsZXhpbmcKICAjIGFsbG9jX2h1Z2VwYWdlcyAtIGFsbG9jYXRlIG9yIGZyZWUgaHVnZSBwYWdlcwogICMgZnJlZV9odWdlcGFnZXMgLSBhbGxvY2F0ZSBvciBmcmVlIGh1Z2UgcGFnZXMKICAjIGZzeW5jIC0gc3luY2hyb25pemUgYSBmaWxlJ3MgaW4tY29yZSBzdGF0ZSB3aXRoIHN0b3JhZ2UgZGV2aWNlCiAgIyBmZGF0YXN5bmMgLSBzeW5jaHJvbml6ZSBhIGZpbGUncyBpbi1jb3JlIHN0YXRlIHdpdGggc3RvcmFnZSBkZXZpY2UKICAjIHN5c2NhbGxzIC0gTGludXggc3lzdGVtIGNhbGxzCiAgIyBtZW1mZF9jcmVhdGUgLSBjcmVhdGUgYW4gYW5vbnltb3VzIGZpbGUKICAjIG1vZGlmeV9sZHQgLSBnZXQgb3Igc2V0IGEgcGVyLXByb2Nlc3MgTERUIGVudHJ5CiAgIyBnZXRfa2VybmVsX3N5bXMgLSByZXRyaWV2ZSBleHBvcnRlZCBrZXJuZWwgYW5kIG1vZHVsZSBzeW1ib2xzCiAgIyBsc2VlayAtIHJlcG9zaXRpb24gcmVhZC93cml0ZSBmaWxlIG9mZnNldAogICMgc2htYXQgLSBTeXN0ZW0gViBzaGFyZWQgbWVtb3J5IG9wZXJhdGlvbnMKICAjIHNobWR0IC0gU3lzdGVtIFYgc2hhcmVkIG1lbW9yeSBvcGVyYXRpb25zCiAgIyB0aW1lcl9kZWxldGUgLSBkZWxldGUgYSBQT1NJWCBwZXItcHJvY2VzcyB0aW1lcgogICMgcGVyZm1vbmN0bCAtIGludGVyZmFjZSB0byBJQS02NCBwZXJmb3JtYW5jZSBtb25pdG9yaW5nIHVuaXQKICAjIG1vdmVfcGFnZXMgLSBtb3ZlIGluZGl2aWR1YWwgcGFnZXMgb2YgYSBwcm9jZXNzIHRvIGFub3RoZXIgbm9kZQogICMgY2hkaXIgLSBjaGFuZ2Ugd29ya2luZyBkaXJlY3RvcnkKICAjIGZjaGRpciAtIGNoYW5nZSB3b3JraW5nIGRpcmVjdG9yeQogICMgdGltZSAtIGdldCB0aW1lIGluIHNlY29uZHMKICAjIF9leGl0IC0gdGVybWluYXRlIHRoZSBjYWxsaW5nIHByb2Nlc3MKICAjIF9FeGl0IC0gdGVybWluYXRlIHRoZSBjYWxsaW5nIHByb2Nlc3MKICAjIHMzOTBfc3RoeWkgLSBlbXVsYXRlIFNUSFlJIGluc3RydWN0aW9uCiAgIyBpb19zdWJtaXQgLSBzdWJtaXQgYXN5bmNocm9ub3VzIEkvTyBibG9ja3MgZm9yIHByb2Nlc3NpbmcKICAjIG1sb2NrIC0gbG9jayBhbmQgdW5sb2NrIG1lbW9yeQogICMgbWxvY2syIC0gbG9jayBhbmQgdW5sb2NrIG1lbW9yeQogICMgbXVubG9jayAtIGxvY2sgYW5kIHVubG9jayBtZW1vcnkKICAjIG1sb2NrYWxsIC0gbG9jayBhbmQgdW5sb2NrIG1lbW9yeQogICMgbXVubG9ja2FsbCAtIGxvY2sgYW5kIHVubG9jayBtZW1vcnkKICAjIHVtYXNrIC0gc2V0IGZpbGUgbW9kZSBjcmVhdGlvbiBtYXNrCiAgIyBhcmNoX3ByY3RsIC0gc2V0IGFyY2hpdGVjdHVyZS1zcGVjaWZpYyB0aHJlYWQgc3RhdGUKICAjIHVzZWxpYiAtIGxvYWQgc2hhcmVkIGxpYnJhcnkKICAjIHNlbmRmaWxlIC0gdHJhbnNmZXIgZGF0YSBiZXR3ZWVuIGZpbGUgZGVzY3JpcHRvcnMKICAjIHNobWN0bCAtIFN5c3RlbSBWIHNoYXJlZCBtZW1vcnkgY29udHJvbAogICMgZXBvbGxfd2FpdCAtIHdhaXQgZm9yIGFuIEkvTyBldmVudCBvbiBhbiBlcG9sbCBmaWxlIGRlc2NyaXB0b3IKICAjIGVwb2xsX3B3YWl0IC0gd2FpdCBmb3IgYW4gSS9PIGV2ZW50IG9uIGFuIGVwb2xsIGZpbGUgZGVzY3JpcHRvcgogICMgc2lnYWx0c3RhY2sgLSBzZXQgYW5kL29yIGdldCBzaWduYWwgc3RhY2sgY29udGV4dAogICMgaW9jdGwgLSBjb250cm9sIGRldmljZQogICMgc2lnbmFsZmQgLSBjcmVhdGUgYSBmaWxlIGRlc2NyaXB0b3IgZm9yIGFjY2VwdGluZyBzaWduYWxzCiAgIyB1bnNoYXJlIC0gZGlzYXNzb2NpYXRlIHBhcnRzIG9mIHRoZSBwcm9jZXNzIGV4ZWN1dGlvbiBjb250ZXh0CiAgIyBjaHJvb3QgLSBjaGFuZ2Ugcm9vdCBkaXJlY3RvcnkKICAjIG1hZHZpc2UgLSBnaXZlIGFkdmljZSBhYm91dCB1c2Ugb2YgbWVtb3J5CiAgIyBnZXR0aWQgLSBnZXQgdGhyZWFkIGlkZW50aWZpY2F0aW9uCiAgIyBnZXRzb2NrbmFtZSAtIGdldCBzb2NrZXQgbmFtZQogICMgaW9fZGVzdHJveSAtIGRlc3Ryb3kgYW4gYXN5bmNocm9ub3VzIEkvTyBjb250ZXh0CiAgIyBzZXR1cCAtIHNldHVwIGRldmljZXMgYW5kIGZpbGVzeXN0ZW1zLCBtb3VudCByb290IGZpbGVzeXN0ZW0KICAjIG50cF9hZGp0aW1lIC0gdHVuZSBrZXJuZWwgY2xvY2sKICAjIHNlbWdldCAtIGdldCBhIFN5c3RlbSBWIHNlbWFwaG9yZSBzZXQgaWRlbnRpZmllcgogICMgZ2V0dWlkIC0gZ2V0IHVzZXIgaWRlbnRpdHkKICAjIGdldGV1aWQgLSBnZXQgdXNlciBpZGVudGl0eQogICMgX3N5c2NhbGwgLSBpbnZva2luZyBhIHN5c3RlbSBjYWxsIHdpdGhvdXQgbGlicmFyeSBzdXBwb3J0IChPQlNPTEVURSkKICAjIHNjaGVkX3NldGFmZmluaXR5IC0gXCBzZXQgYW5kIGdldCBhIHRocmVhZCdzIENQVSBhZmZpbml0eSBtYXNrCiAgIyBzY2hlZF9nZXRhZmZpbml0eSAtIFwgc2V0IGFuZCBnZXQgYSB0aHJlYWQncyBDUFUgYWZmaW5pdHkgbWFzawogICMgY2FjaGVmbHVzaCAtIGZsdXNoIGNvbnRlbnRzIG9mIGluc3RydWN0aW9uIGFuZC9vciBkYXRhIGNhY2hlCiAgIyBwaXZvdF9yb290IC0gY2hhbmdlIHRoZSByb290IG1vdW50CiAgIyBtc2djdGwgLSBTeXN0ZW0gViBtZXNzYWdlIGNvbnRyb2wgb3BlcmF0aW9ucwogICMgaW9jdGxfZmF0IC0gbWFuaXB1bGF0aW5nIHRoZSBGQVQgZmlsZXN5c3RlbQogICMgc2V0cGdpZCAtIHNldC9nZXQgcHJvY2VzcyBncm91cAogICMgZ2V0cGdpZCAtIHNldC9nZXQgcHJvY2VzcyBncm91cAogICMgc2V0cGdycCAtIHNldC9nZXQgcHJvY2VzcyBncm91cAogICMgZ2V0cGdycCAtIHNldC9nZXQgcHJvY2VzcyBncm91cAogICMgc29ja2V0cGFpciAtIGNyZWF0ZSBhIHBhaXIgb2YgY29ubmVjdGVkIHNvY2tldHMKICAjIGJkZmx1c2ggLSBzdGFydCwgZmx1c2gsIG9yIHR1bmUgYnVmZmVyLWRpcnR5LWZsdXNoIGRhZW1vbgogICMgYWxhcm0gLSBzZXQgYW4gYWxhcm0gY2xvY2sgZm9yIGRlbGl2ZXJ5IG9mIGEgc2lnbmFsCiAgIyB0aW1lcl9zZXR0aW1lIC0gYXJtL2Rpc2FybSBhbmQgZmV0Y2ggc3RhdGUgb2YgUE9TSVggcGVyLXByb2Nlc3MgdGltZXIKICAjIHRpbWVyX2dldHRpbWUgLSBhcm0vZGlzYXJtIGFuZCBmZXRjaCBzdGF0ZSBvZiBQT1NJWCBwZXItcHJvY2VzcyB0aW1lcgogICMgYWRkX2tleSAtIGFkZCBhIGtleSB0byB0aGUga2VybmVsJ3Mga2V5IG1hbmFnZW1lbnQgZmFjaWxpdHkKICAjIHJ0X3NpZ3F1ZXVlaW5mbyAtIHF1ZXVlIGEgc2lnbmFsIGFuZCBkYXRhCiAgIyBydF90Z3NpZ3F1ZXVlaW5mbyAtIHF1ZXVlIGEgc2lnbmFsIGFuZCBkYXRhCiAgIyB1c2VyZmF1bHRmZCAtIGNyZWF0ZSBhIGZpbGUgZGVzY3JpcHRvciBmb3IgaGFuZGxpbmcgcGFnZSBmYXVsdHMgaW4gdXNlciBzcGFjZQogICMgc2Vtb3AgLSBTeXN0ZW0gViBzZW1hcGhvcmUgb3BlcmF0aW9ucwogICMgc2VtdGltZWRvcCAtIFN5c3RlbSBWIHNlbWFwaG9yZSBvcGVyYXRpb25zCiAgIyBnZXRnaWQgLSBnZXQgZ3JvdXAgaWRlbnRpdHkKICAjIGdldGVnaWQgLSBnZXQgZ3JvdXAgaWRlbnRpdHkKICAjIGdldHBpZCAtIGdldCBwcm9jZXNzIGlkZW50aWZpY2F0aW9uCiAgIyBnZXRwcGlkIC0gZ2V0IHByb2Nlc3MgaWRlbnRpZmljYXRpb24KICAjIHNpZ3Byb2NtYXNrIC0gZXhhbWluZSBhbmQgY2hhbmdlIGJsb2NrZWQgc2lnbmFscwogICMgcnRfc2lncHJvY21hc2sgLSBleGFtaW5lIGFuZCBjaGFuZ2UgYmxvY2tlZCBzaWduYWxzCiAgIyB1bmFtZSAtIGdldCBuYW1lIGFuZCBpbmZvcm1hdGlvbiBhYm91dCBjdXJyZW50IGtlcm5lbAogICMgc3RhdHggLSBnZXQgZmlsZSBzdGF0dXMgKGV4dGVuZGVkKQogICMgaW9jdGxfZmljbG9uZXJhbmdlIC0gc2hhcmUgc29tZSB0aGUgZGF0YSBvZiBvbmUgZmlsZSB3aXRoIGFub3RoZXIgZmlsZQogICMgaW9jdGxfZmljbG9uZSAtIHNoYXJlIHNvbWUgdGhlIGRhdGEgb2Ygb25lIGZpbGUgd2l0aCBhbm90aGVyIGZpbGUKICAjIG1xX2dldHNldGF0dHIgLSBnZXQvc2V0IG1lc3NhZ2UgcXVldWUgYXR0cmlidXRlcwogICMgaW9wcmlvX2dldCAtIGdldC9zZXQgSS9PIHNjaGVkdWxpbmcgY2xhc3MgYW5kIHByaW9yaXR5CiAgIyBpb3ByaW9fc2V0IC0gZ2V0L3NldCBJL08gc2NoZWR1bGluZyBjbGFzcyBhbmQgcHJpb3JpdHkKICAjIGVwb2xsX2N0bCAtIGNvbnRyb2wgaW50ZXJmYWNlIGZvciBhbiBlcG9sbCBmaWxlIGRlc2NyaXB0b3IKICAjIHN5bmMgLSBjb21taXQgZmlsZXN5c3RlbSBjYWNoZXMgdG8gZGlzawogICMgc3luY2ZzIC0gY29tbWl0IGZpbGVzeXN0ZW0gY2FjaGVzIHRvIGRpc2sKICAjIHNldHNpZCAtIGNyZWF0ZXMgYSBzZXNzaW9uIGFuZCBzZXRzIHRoZSBwcm9jZXNzIGdyb3VwIElECiAgIyBzaHV0ZG93biAtIHNodXQgZG93biBwYXJ0IG9mIGEgZnVsbC1kdXBsZXggY29ubmVjdGlvbgogICMgZ2V0c2lkIC0gZ2V0IHNlc3Npb24gSUQKICAjIGdldF90aHJlYWRfYXJlYSAtIG1hbmlwdWxhdGUgdGhyZWFkLWxvY2FsIHN0b3JhZ2UgaW5mb3JtYXRpb24KICAjIHNldF90aHJlYWRfYXJlYSAtIG1hbmlwdWxhdGUgdGhyZWFkLWxvY2FsIHN0b3JhZ2UgaW5mb3JtYXRpb24KICAjIHRpbWVyZmRfY3JlYXRlIC0gdGltZXJzIHRoYXQgbm90aWZ5IHZpYSBmaWxlIGRlc2NyaXB0b3JzCiAgIyB0aW1lcmZkX3NldHRpbWUgLSB0aW1lcnMgdGhhdCBub3RpZnkgdmlhIGZpbGUgZGVzY3JpcHRvcnMKICAjIHRpbWVyZmRfZ2V0dGltZSAtIHRpbWVycyB0aGF0IG5vdGlmeSB2aWEgZmlsZSBkZXNjcmlwdG9ycwogICMgaW9jdGxfZmlkZWR1cGVyYW5nZSAtIHNoYXJlIHNvbWUgdGhlIGRhdGEgb2Ygb25lIGZpbGUgd2l0aCBhbm90aGVyIGZpbGUKICAjIG5hbWVfdG9faGFuZGxlX2F0IC0gb2J0YWluIGhhbmRsZSBmb3IgYSBwYXRobmFtZSBhbmQgb3BlbiBmaWxlIHZpYSBhIGhhbmRsZQogICMgb3Blbl9ieV9oYW5kbGVfYXQgLSBvYnRhaW4gaGFuZGxlIGZvciBhIHBhdGhuYW1lIGFuZCBvcGVuIGZpbGUgdmlhIGEgaGFuZGxlCiAgIyBmdXRleCAtIGZhc3QgdXNlci1zcGFjZSBsb2NraW5nCiAgIyBpb2N0bF9ucyAtIGlvY3RsKCkgb3BlcmF0aW9ucyBmb3IgTGludXggbmFtZXNwYWNlcwogICMgcGlkZmRfc2VuZF9zaWduYWwgLSBzZW5kIGEgc2lnbmFsIHRvIGEgcHJvY2VzcyBzcGVjaWZpZWQgYnkgYSBmaWxlIGRlc2NyaXB0b3IKICAjIGNsb25lIC0gY3JlYXRlIGEgY2hpbGQgcHJvY2VzcwogICMgX19jbG9uZTIgLSBjcmVhdGUgYSBjaGlsZCBwcm9jZXNzCiAgIyBjbG9uZTMgLSBjcmVhdGUgYSBjaGlsZCBwcm9jZXNzCiAgIyB0aW1lcyAtIGdldCBwcm9jZXNzIHRpbWVzCiAgIyBzeXNpbmZvIC0gcmV0dXJuIHN5c3RlbSBpbmZvcm1hdGlvbgogICMgaXBjIC0gU3lzdGVtIFYgSVBDIHN5c3RlbSBjYWxscwogICMgZXZlbnRmZCAtIGNyZWF0ZSBhIGZpbGUgZGVzY3JpcHRvciBmb3IgZXZlbnQgbm90aWZpY2F0aW9uCiAgIyB3YWl0IC0gd2FpdCBmb3IgcHJvY2VzcyB0byBjaGFuZ2Ugc3RhdGUKICAjIHdhaXRwaWQgLSB3YWl0IGZvciBwcm9jZXNzIHRvIGNoYW5nZSBzdGF0ZQogICMgd2FpdGlkIC0gd2FpdCBmb3IgcHJvY2VzcyB0byBjaGFuZ2Ugc3RhdGUKICAjIGdldGRvbWFpbm5hbWUgLSBnZXQvc2V0IE5JUyBkb21haW4gbmFtZQogICMgaWRsZSAtIG1ha2UgcHJvY2VzcyAwIGlkbGUKICAjIGlub3RpZnlfYWRkX3dhdGNoIC0gYWRkIGEgd2F0Y2ggdG8gYW4gaW5pdGlhbGl6ZWQgaW5vdGlmeSBpbnN0YW5jZQogICMgZ2V0X21lbXBvbGljeSAtIHJldHJpZXZlIE5VTUEgbWVtb3J5IHBvbGljeSBmb3IgYSB0aHJlYWQKICAjIGJwZiAtIHBlcmZvcm0gYSBjb21tYW5kIG9uIGFuIGV4dGVuZGVkIEJQRiBtYXAgb3IgcHJvZ3JhbQogICMgZ2V0c29ja29wdCAtIGdldCBhbmQgc2V0IG9wdGlvbnMgb24gc29ja2V0cwogICMgc2V0c29ja29wdCAtIGdldCBhbmQgc2V0IG9wdGlvbnMgb24gc29ja2V0cwogICMgZ2V0aXRpbWVyIC0gZ2V0IG9yIHNldCB2YWx1ZSBvZiBhbiBpbnRlcnZhbCB0aW1lcgogICMgc2V0aXRpbWVyIC0gZ2V0IG9yIHNldCB2YWx1ZSBvZiBhbiBpbnRlcnZhbCB0aW1lcgogICMgbWVtYmFycmllciAtIGlzc3VlIG1lbW9yeSBiYXJyaWVycyBvbiBhIHNldCBvZiB0aHJlYWRzCiAgIyBtcHJvdGVjdCAtIHNldCBwcm90ZWN0aW9uIG9uIGEgcmVnaW9uIG9mIG1lbW9yeQogICMgcGtleV9tcHJvdGVjdCAtIHNldCBwcm90ZWN0aW9uIG9uIGEgcmVnaW9uIG9mIG1lbW9yeQogICMgZ2V0Y3B1IC0gZGV0ZXJtaW5lIENQVSBhbmQgTlVNQSBub2RlIG9uIHdoaWNoIHRoZSBjYWxsaW5nIHRocmVhZCBpcyBydW5uaW5nCiAgIyBpb2N0bF9mc2xhYmVsIC0gZ2V0IG9yIHNldCBhIGZpbGVzeXN0ZW0gbGFiZWwKICAjIGxpc3R4YXR0ciAtIGxpc3QgZXh0ZW5kZWQgYXR0cmlidXRlIG5hbWVzCiAgIyBsbGlzdHhhdHRyIC0gbGlzdCBleHRlbmRlZCBhdHRyaWJ1dGUgbmFtZXMKICAjIGZsaXN0eGF0dHIgLSBsaXN0IGV4dGVuZGVkIGF0dHJpYnV0ZSBuYW1lcwogICMgX2xsc2VlayAtIHJlcG9zaXRpb24gcmVhZC93cml0ZSBmaWxlIG9mZnNldAogICMgZmNudGwgLSBtYW5pcHVsYXRlIGZpbGUgZGVzY3JpcHRvcgogICMgdXN0YXQgLSBnZXQgZmlsZXN5c3RlbSBzdGF0aXN0aWNzCiAgIyBzaWduYWwgLSBBTlNJIEMgc2lnbmFsIGhhbmRsaW5nCiAgIyBuYW5vc2xlZXAgLSBoaWdoLXJlc29sdXRpb24gc2xlZXAKICAjIGNvbm5lY3QgLSBpbml0aWF0ZSBhIGNvbm5lY3Rpb24gb24gYSBzb2NrZXQKICAjIHZtODZvbGQgLSBlbnRlciB2aXJ0dWFsIDgwODYgbW9kZQogICMgdm04NiAtIGVudGVyIHZpcnR1YWwgODA4NiBtb2RlCiAgIyBmYW5vdGlmeV9pbml0IC0gY3JlYXRlIGFuZCBpbml0aWFsaXplIGZhbm90aWZ5IGdyb3VwCiAgIyBtaWdyYXRlX3BhZ2VzIC0gbW92ZSBhbGwgcGFnZXMgaW4gYSBwcm9jZXNzIHRvIGFub3RoZXIgc2V0IG9mIG5vZGVzCiAgIyByZXN0YXJ0X3N5c2NhbGwgLSByZXN0YXJ0IGEgc3lzdGVtIGNhbGwgYWZ0ZXIgaW50ZXJydXB0aW9uIGJ5IGEgc3RvcCBzaWduYWwKICAjIGNsb3NlIC0gY2xvc2UgYSBmaWxlIGRlc2NyaXB0b3IKICAjIG1zZ3JjdiAtIFN5c3RlbSBWIG1lc3NhZ2UgcXVldWUgb3BlcmF0aW9ucwogICMgbXNnc25kIC0gU3lzdGVtIFYgbWVzc2FnZSBxdWV1ZSBvcGVyYXRpb25zCiAgIyByZWFkdiAtIHJlYWQgb3Igd3JpdGUgZGF0YSBpbnRvIG11bHRpcGxlIGJ1ZmZlcnMKICAjIHdyaXRldiAtIHJlYWQgb3Igd3JpdGUgZGF0YSBpbnRvIG11bHRpcGxlIGJ1ZmZlcnMKICAjIHByZWFkdiAtIHJlYWQgb3Igd3JpdGUgZGF0YSBpbnRvIG11bHRpcGxlIGJ1ZmZlcnMKICAjIHB3cml0ZXYgLSByZWFkIG9yIHdyaXRlIGRhdGEgaW50byBtdWx0aXBsZSBidWZmZXJzCiAgIyBwcmVhZHYyIC0gcmVhZCBvciB3cml0ZSBkYXRhIGludG8gbXVsdGlwbGUgYnVmZmVycwogICMgcHdyaXRldjIgLSByZWFkIG9yIHdyaXRlIGRhdGEgaW50byBtdWx0aXBsZSBidWZmZXJzCiAgIyBzeXNsb2cgLSByZWFkIGFuZC9vciBjbGVhciBrZXJuZWwgbWVzc2FnZSByaW5nIGJ1ZmZlcjsgc2V0IGNvbnNvbGVfbG9nbGV2ZWwKICAjIGtsb2djdGwgLSByZWFkIGFuZC9vciBjbGVhciBrZXJuZWwgbWVzc2FnZSByaW5nIGJ1ZmZlcjsgc2V0IGNvbnNvbGVfbG9nbGV2ZWwKICAjIHNjaGVkX3lpZWxkIC0geWllbGQgdGhlIHByb2Nlc3NvcgogICMgdmhhbmd1cCAtIHZpcnR1YWxseSBoYW5ndXAgdGhlIGN1cnJlbnQgdGVybWluYWwKICAjIGlvY3RsX2lmbGFncyAtIGlvY3RsKCkgb3BlcmF0aW9ucyBmb3IgaW5vZGUgZmxhZ3MKICAjIHNnZXRtYXNrIC0gbWFuaXB1bGF0aW9uIG9mIHNpZ25hbCBtYXNrIChvYnNvbGV0ZSkKICAjIHNzZXRtYXNrIC0gbWFuaXB1bGF0aW9uIG9mIHNpZ25hbCBtYXNrIChvYnNvbGV0ZSkKICAjIHN5bmNfZmlsZV9yYW5nZSAtIHN5bmMgYSBmaWxlIHNlZ21lbnQgd2l0aCBkaXNrCiAgIyBjb3B5X2ZpbGVfcmFuZ2UgLSBDb3B5IGEgcmFuZ2Ugb2YgZGF0YSBmcm9tIG9uZSBmaWxlIHRvIGFub3RoZXIKICAjIHNpZ3BlbmRpbmcgLSBleGFtaW5lIHBlbmRpbmcgc2lnbmFscwogICMgcnRfc2lncGVuZGluZyAtIGV4YW1pbmUgcGVuZGluZyBzaWduYWxzCiAgIyBnZXR1bndpbmQgLSBjb3B5IHRoZSB1bndpbmQgZGF0YSB0byBjYWxsZXIncyBidWZmZXIKICAjIG1zeW5jIC0gc3luY2hyb25pemUgYSBmaWxlIHdpdGggYSBtZW1vcnkgbWFwCiAgIyBnZXRfcm9idXN0X2xpc3QgLSBnZXQvc2V0IGxpc3Qgb2Ygcm9idXN0IGZ1dGV4ZXMKICAjIHNldF9yb2J1c3RfbGlzdCAtIGdldC9zZXQgbGlzdCBvZiByb2J1c3QgZnV0ZXhlcwogICMgZHVwIC0gZHVwbGljYXRlIGEgZmlsZSBkZXNjcmlwdG9yCiAgIyBkdXAyIC0gZHVwbGljYXRlIGEgZmlsZSBkZXNjcmlwdG9yCiAgIyBkdXAzIC0gZHVwbGljYXRlIGEgZmlsZSBkZXNjcmlwdG9yCiAgIyBzMzkwX3BjaV9tbWlvX3dyaXRlIC0gdHJhbnNmZXIgZGF0YSB0by9mcm9tIFBDSSBNTUlPIG1lbW9yeSBwYWdlCiAgIyBzMzkwX3BjaV9tbWlvX3JlYWQgLSB0cmFuc2ZlciBkYXRhIHRvL2Zyb20gUENJIE1NSU8gbWVtb3J5IHBhZ2UKICAjIHBhdXNlIC0gd2FpdCBmb3Igc2lnbmFsCiAgIyBzd2Fwb24gLSBzdGFydC9zdG9wIHN3YXBwaW5nIHRvIGZpbGUvZGV2aWNlCiAgIyBzd2Fwb2ZmIC0gc3RhcnQvc3RvcCBzd2FwcGluZyB0byBmaWxlL2RldmljZQoKICAjIFJlY29yZCB0eXBlIG5vcm1hbGl6YXRpb25zCiAgIyBVc2VmdWwgbGlua3M6CiAgIyBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vdG9ydmFsZHMvbGludXgvdjQuMTYvaW5jbHVkZS91YXBpL2xpbnV4L2F1ZGl0LmgKICAjIGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9saW51eC1hdWRpdC9hdWRpdC11c2Vyc3BhY2UvNGQ5MzMzMDFiMTgzNWNhZmEwOGI5ZTllZjcwNWM4ZmI2Yzk2Y2I2Mi9saWIvbGliYXVkaXQuaAogICMgaHR0cHM6Ly93d3cuZWxhc3RpYy5jby9ndWlkZS9lbi9lY3MvY3VycmVudC9lY3MtYWxsb3dlZC12YWx1ZXMtZXZlbnQtY2F0ZWdvcnkuaHRtbAoKICAjIElBTSByZWxhdGVkIGV2ZW50cwoKICAjIEFVRElUX0FDQ1RfTE9DSyAtIFVzZXIncyBhY2NvdW50IGxvY2tlZCBieSBhZG1pbgogIC0gcmVjb3JkX3R5cGVzOiBBQ0NUX0xPQ0sKICAgIGFjdGlvbjogbG9ja2VkLWFjY291bnQKICAgIGVjczoKICAgICAgPDw6ICplY3MtaWFtCiAgICAgIHR5cGU6CiAgICAgICAgLSB1c2VyCiAgICAgICAgLSBpbmZvCiAgIyBBVURJVF9BQ0NUX1VOTE9DSyAtIFVzZXIncyBhY2NvdW50IHVubG9ja2VkIGJ5IGFkbWluCiAgLSByZWNvcmRfdHlwZXM6IEFDQ1RfVU5MT0NLCiAgICBhY3Rpb246IHVubG9ja2VkLWFjY291bnQKICAgIGVjczoKICAgICAgPDw6ICplY3MtaWFtCiAgICAgIHR5cGU6CiAgICAgICAgLSB1c2VyCiAgICAgICAgLSBpbmZvCiAgIyBBVURJVF9BRERfR1JPVVAgLSBHcm91cCBhY2NvdW50IGFkZGVkCiAgLSByZWNvcmRfdHlwZXM6IEFERF9HUk9VUAogICAgYWN0aW9uOiBhZGRlZC1ncm91cC1hY2NvdW50LXRvCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IFtpZCwgYWNjdF0KICAgICAgd2hhdDogYWNjb3VudAogICAgZWNzOgogICAgICA8PDogKmVjcy1pYW0KICAgICAgPDw6ICplY3MtZ3JvdXAtbW9kaWZpY2F0aW9uLW1hcHBpbmdzCiAgICAgIHR5cGU6CiAgICAgICAgLSBncm91cAogICAgICAgIC0gY3JlYXRpb24KCiAgIyBBVURJVF9BRERfVVNFUiAtIFVzZXIgYWNjb3VudCBhZGRlZAogIC0gcmVjb3JkX3R5cGVzOiBBRERfVVNFUgogICAgYWN0aW9uOiBhZGRlZC11c2VyLWFjY291bnQKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogW2lkLCBhY2N0XQogICAgICB3aGF0OiBhY2NvdW50CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWlhbQogICAgICA8PDogKmVjcy11c2VyLW1vZGlmaWNhdGlvbi1tYXBwaW5ncwogICAgICB0eXBlOgogICAgICAgIC0gdXNlcgogICAgICAgIC0gY3JlYXRpb24KICAjIEFVRElUX0RFTF9HUk9VUCAtIEdyb3VwIGFjY291bnQgZGVsZXRlZAogIC0gcmVjb3JkX3R5cGVzOiBERUxfR1JPVVAKICAgIGFjdGlvbjogZGVsZXRlZC1ncm91cC1hY2NvdW50LWZyb20KICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogW2lkLCBhY2N0XQogICAgICB3aGF0OiBhY2NvdW50CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWlhbQogICAgICA8PDogKmVjcy1ncm91cC1tb2RpZmljYXRpb24tbWFwcGluZ3MKICAgICAgdHlwZToKICAgICAgICAtIGdyb3VwCiAgICAgICAgLSBkZWxldGlvbgogICMgQVVESVRfREVMX1VTRVIgLSBVc2VyIGFjY291bnQgZGVsZXRlZAogIC0gcmVjb3JkX3R5cGVzOiBERUxfVVNFUgogICAgYWN0aW9uOiBkZWxldGVkLXVzZXItYWNjb3VudAogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBbaWQsIGFjY3RdCiAgICAgIHdoYXQ6IGFjY291bnQKICAgIGVjczoKICAgICAgPDw6ICplY3MtaWFtCiAgICAgIDw8OiAqZWNzLXVzZXItbW9kaWZpY2F0aW9uLW1hcHBpbmdzCiAgICAgIHR5cGU6CiAgICAgICAgLSB1c2VyCiAgICAgICAgLSBkZWxldGlvbgogICMgQVVESVRfR1JQX01HTVQgLSBHcm91cCBhY2NvdW50IGF0dHIgd2FzIG1vZGlmaWVkCiAgLSByZWNvcmRfdHlwZXM6IEdSUF9NR01UCiAgICBhY3Rpb246IG1vZGlmaWVkLWdyb3VwLWFjY291bnQKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogW2lkLCBhY2N0XQogICAgICB3aGF0OiBhY2NvdW50CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWlhbQogICAgICB0eXBlOgogICAgICAgIC0gZ3JvdXAKICAgICAgICAtIGNoYW5nZQogICAgICBtYXBwaW5nczoKICAgICAgICAtIGZyb206IHN1YmplY3QucHJpbWFyeQogICAgICAgICAgdG86IHVzZXIKICAgICAgICAtIGZyb206IHN1YmplY3Quc2Vjb25kYXJ5CiAgICAgICAgICB0bzogZ3JvdXAudGFyZ2V0CiAgICAgICAgLSBmcm9tOiB1aWQudWlkCiAgICAgICAgICB0bzogdXNlci5lZmZlY3RpdmUKICAjIEFVRElUX1JPTEVfQVNTSUdOIC0gQWRtaW4gYXNzaWduZWQgdXNlciB0byByb2xlCiAgLSByZWNvcmRfdHlwZXM6IFJPTEVfQVNTSUdOCiAgICBhY3Rpb246IGFzc2lnbmVkLXVzZXItcm9sZS10bwogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBbaWQsIGFjY3RdCiAgICAgIHdoYXQ6IGFjY291bnQKICAgIGVjczoKICAgICAgPDw6ICplY3MtaWFtCiAgICAgIHR5cGU6CiAgICAgICAgLSB1c2VyCiAgICAgICAgLSBjaGFuZ2UKICAjIEFVRElUX1JPTEVfTU9ESUZZIC0gQWRtaW4gbW9kaWZpZWQgYSByb2xlCiAgLSByZWNvcmRfdHlwZXM6IFJPTEVfTU9ESUZZCiAgICBhY3Rpb246IG1vZGlmaWVkLXJvbGUKICAgIGVjczoKICAgICAgPDw6ICplY3MtaWFtCiAgICAgIHR5cGU6CiAgICAgICAgLSBjaGFuZ2UKICAjIEFVRElUX1JPTEVfUkVNT1ZFIC0gQWRtaW4gcmVtb3ZlZCB1c2VyIGZyb20gcm9sZQogIC0gcmVjb3JkX3R5cGVzOiBST0xFX1JFTU9WRQogICAgYWN0aW9uOiByZW1vdmVkLXVzZXItcm9sZS1mcm9tCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IFtpZCwgYWNjdF0KICAgICAgd2hhdDogYWNjb3VudAogICAgZWNzOgogICAgICA8PDogKmVjcy1pYW0KICAgICAgdHlwZToKICAgICAgICAtIHVzZXIKICAgICAgICAtIGNoYW5nZQogICMgQVVESVRfVVNFUl9NR01UIC0gVXNlciBhY2N0IGF0dHJpYnV0ZSBjaGFuZ2UKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IFVTRVJfTUdNVAogICAgYWN0aW9uOiBtb2RpZmllZC11c2VyLWFjY291bnQKICAgIGVjczoKICAgICAgPDw6ICplY3MtaWFtCiAgICAgIHR5cGU6CiAgICAgICAgLSB1c2VyCiAgICAgICAgLSBjaGFuZ2UKICAgICAgbWFwcGluZ3M6CiAgICAgICAgLSBmcm9tOiBzdWJqZWN0LnByaW1hcnkKICAgICAgICAgIHRvOiB1c2VyCiAgICAgICAgLSBmcm9tOiBzdWJqZWN0LnNlY29uZGFyeQogICAgICAgICAgdG86IHVzZXIudGFyZ2V0CiAgICAgICAgLSBmcm9tOiB1aWQudWlkCiAgICAgICAgICB0bzogdXNlci5lZmZlY3RpdmUKICAjIEFVRElUX1VTRVJfQ0hBVVRIVE9LIC0gVXNlciBhY2N0IHBhc3N3b3JkIG9yIHBpbiBjaGFuZ2VkCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBVU0VSX0NIQVVUSFRPSwogICAgYWN0aW9uOiBjaGFuZ2VkLXBhc3N3b3JkCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWlhbQogICAgICB0eXBlOgogICAgICAgIC0gdXNlcgogICAgICAgIC0gY2hhbmdlCiAgICAgIG1hcHBpbmdzOgogICAgICAgIC0gZnJvbTogc3ViamVjdC5wcmltYXJ5CiAgICAgICAgICB0bzogdXNlcgogICAgICAgIC0gZnJvbTogdWlkLnVpZAogICAgICAgICAgdG86IHVzZXIuZWZmZWN0aXZlCiAgICAgICAgLSBmcm9tOiBzdWJqZWN0LnNlY29uZGFyeQogICAgICAgICAgdG86IHVzZXIudGFyZ2V0CgogICMgQVVESVRfR1JQX0NIQVVUSFRPSyAtIEdyb3VwIGFjY3QgcGFzc3dvcmQgb3IgcGluIGNoYW5nZWQKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IEdSUF9DSEFVVEhUT0sKICAgIGFjdGlvbjogY2hhbmdlZC1ncm91cC1wYXNzd29yZAogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBhY2N0CiAgICAgIHdoYXQ6IHVzZXItc2Vzc2lvbgogICAgZWNzOgogICAgICA8PDogKmVjcy1pYW0KICAgICAgdHlwZToKICAgICAgICAtIGdyb3VwCiAgICAgICAgLSBjaGFuZ2UKICAgICAgbWFwcGluZ3M6CiAgICAgICAgLSBmcm9tOiBzdWJqZWN0LnByaW1hcnkKICAgICAgICAgIHRvOiB1c2VyCiAgICAgICAgLSBmcm9tOiB1aWQudWlkCiAgICAgICAgICB0bzogdXNlci5lZmZlY3RpdmUKICAgICAgICAtIGZyb206IHN1YmplY3Quc2Vjb25kYXJ5CiAgICAgICAgICB0bzogZ3JvdXAudGFyZ2V0CgogICMgQXV0aGVudGljYXRpb24gcmVsYXRlZCBldmVudHMKCiAgIyBBVURJVF9DUkVEX0FDUSAtIFVzZXIgY3JlZGVudGlhbCBhY3F1aXJlZAogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogQ1JFRF9BQ1EKICAgIGFjdGlvbjogYWNxdWlyZWQtY3JlZGVudGlhbHMKICAgIGVjczogKmVjcy1hdXRoCiAgIyBBVURJVF9DUkVEX0RJU1AgLSBVc2VyIGNyZWRlbnRpYWwgZGlzcG9zZWQKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IENSRURfRElTUAogICAgYWN0aW9uOiBkaXNwb3NlZC1jcmVkZW50aWFscwogICAgZWNzOiAqZWNzLWF1dGgKICAjIEFVRElUX0NSRURfUkVGUiAtIFVzZXIgY3JlZGVudGlhbCByZWZyZXNoZWQKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IENSRURfUkVGUgogICAgYWN0aW9uOiByZWZyZXNoZWQtY3JlZGVudGlhbHMKICAgIGVjczogKmVjcy1hdXRoCiAgIyBBVURJVF9HUlBfQVVUSCAtIEF1dGhlbnRpY2F0aW9uIGZvciBncm91cCBwYXNzd29yZAogIC0gcmVjb3JkX3R5cGVzOiBHUlBfQVVUSAogICAgYWN0aW9uOiBhdXRoZW50aWNhdGVkLXRvLWdyb3VwCiAgICBlY3M6ICplY3MtYXV0aAogICMgQVVESVRfTE9HSU4gLSBEZWZpbmUgdGhlIGxvZ2luIGlkIGFuZCBpbmZvcm1hdGlvbgogIC0gcmVjb3JkX3R5cGVzOiBMT0dJTgogICAgYWN0aW9uOiBjaGFuZ2VkLWxvZ2luLWlkLXRvCiAgICBzdWJqZWN0OgogICAgICBwcmltYXJ5OiBbb2xkX2F1aWQsIG9sZC1hdWlkXQogICAgICBzZWNvbmRhcnk6IHVpZAogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBbbmV3LWF1aWQsIG5ld19hdWlkLCBhdWlkXQogICAgICB3aGF0OiB1c2VyLXNlc3Npb24KICAgIGVjczoKICAgICAgPDw6ICplY3MtYXV0aAogICAgICB0eXBlOiBzdGFydAogICAgICBtYXBwaW5nczoKICAgICAgICAtIGZyb206IHN1YmplY3QucHJpbWFyeQogICAgICAgICAgdG86IHVzZXIKICAgICAgICAtIGZyb206IG9iamVjdC5wcmltYXJ5CiAgICAgICAgICB0bzogdXNlci5lZmZlY3RpdmUKICAjIEFVRElUX1VTRVJfQUNDVCAtIFVzZXIgc3lzdGVtIGFjY2VzcyBhdXRob3JpemF0aW9uCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBVU0VSX0FDQ1QKICAgIGFjdGlvbjogd2FzLWF1dGhvcml6ZWQKICAgIGVjczogKmVjcy1hdXRoCiAgIyBBVURJVF9VU0VSX0FVVEggLSBVc2VyIHN5c3RlbSBhY2Nlc3MgYXV0aGVudGljYXRpb24KICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IFVTRVJfQVVUSAogICAgYWN0aW9uOiBhdXRoZW50aWNhdGVkCiAgICBlY3M6ICplY3MtYXV0aAogICMgQVVESVRfVVNFUl9FTkQgLSBVc2VyIHNlc3Npb24gZW5kCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBVU0VSX0VORAogICAgYWN0aW9uOiBlbmRlZC1zZXNzaW9uCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXNlc3Npb24KICAgICAgdHlwZTogZW5kCiAgIyBBVURJVF9VU0VSX0VSUiAtIFVzZXIgYWNjdCBzdGF0ZSBlcnJvcgogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogVVNFUl9FUlIKICAgIGFjdGlvbjogZXJyb3IKICAgIHNvdXJjZV9pcDogW2FkZHJdCiAgICBlY3M6ICplY3MtYXV0aAogICMgQVVESVRfVVNFUl9MT0dJTiAtIFVzZXIgaGFzIGxvZ2dlZCBpbgogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogVVNFUl9MT0dJTgogICAgYWN0aW9uOiBsb2dnZWQtaW4KICAgIHNvdXJjZV9pcDogW2FkZHJdCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWF1dGgKICAgICAgdHlwZTogc3RhcnQKICAjIEFVRElUX1VTRVJfTE9HT1VUIC0gVXNlciBoYXMgbG9nZ2VkIG91dAogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogVVNFUl9MT0dPVVQKICAgIGFjdGlvbjogbG9nZ2VkLW91dAogICAgZWNzOgogICAgICA8PDogKmVjcy1hdXRoCiAgICAgIHR5cGU6IGVuZAogICMgQVVESVRfVVNFUl9ST0xFX0NIQU5HRSAtIFVzZXIgY2hhbmdlZCB0byBhIG5ldyByb2xlCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBVU0VSX1JPTEVfQ0hBTkdFCiAgICBhY3Rpb246IGNoYW5nZWQtcm9sZS10bwogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBzZWxlY3RlZC1jb250ZXh0CiAgICAgIHdoYXQ6IHVzZXItc2Vzc2lvbgogICMgQVVESVRfVVNFUl9TVEFSVCAtIFVzZXIgc2Vzc2lvbiBzdGFydAogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogVVNFUl9TVEFSVAogICAgYWN0aW9uOiBzdGFydGVkLXNlc3Npb24KICAgIHNvdXJjZV9pcDogW2FkZHJdCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXNlc3Npb24KICAgICAgdHlwZTogc3RhcnQKCiAgIyBIb3N0IHZpcnR1YWxpemF0aW9uIGV2ZW50cwoKICAjIEFVRElUX1ZJUlRfQ09OVFJPTCAtIFN0YXJ0LCBQYXVzZSwgU3RvcCBWTQogIC0gcmVjb3JkX3R5cGVzOiBWSVJUX0NPTlRST0wKICAgIGFjdGlvbjogaXNzdWVkLXZtLWNvbnRyb2wKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogb3AKICAgICAgc2Vjb25kYXJ5OiB2bQogICAgICB3aGF0OiB2aXJ0dWFsLW1hY2hpbmUKICAgIGVjczogKmVjcy1ob3N0CiAgIyBBVURJVF9WSVJUX0NSRUFURSAtIENyZWF0aW9uIG9mIGd1ZXN0IGltYWdlCiAgLSByZWNvcmRfdHlwZXM6IFZJUlRfQ1JFQVRFCiAgICBhY3Rpb246IGNyZWF0ZWQtdm0taW1hZ2UKICAgIGVjczogKmVjcy1ob3N0CiAgIyBBVURJVF9WSVJUX0RFU1RST1kgLSBEZXN0cnVjdGlvbiBvZiBndWVzdCBpbWFnZQogIC0gcmVjb3JkX3R5cGVzOiBWSVJUX0RFU1RST1kKICAgIGFjdGlvbjogZGVsZXRlZC12bS1pbWFnZQogICAgZWNzOiAqZWNzLWhvc3QKICAjIEFVRElUX1ZJUlRfSU5URUdSSVRZX0NIRUNLIC0gR3Vlc3QgaW50ZWdyaXR5IHJlc3VsdHMKICAtIHJlY29yZF90eXBlczogVklSVF9JTlRFR1JJVFlfQ0hFQ0sKICAgIGFjdGlvbjogY2hlY2tlZC1pbnRlZ3JpdHktb2YKICAgIGVjczogKmVjcy1ob3N0CiAgIyBBVURJVF9WSVJUX01BQ0hJTkVfSUQgLSBCaW5kaW5nIG9mIGxhYmVsIHRvIFZNCiAgLSByZWNvcmRfdHlwZXM6IFZJUlRfTUFDSElORV9JRAogICAgYWN0aW9uOiBhc3NpZ25lZC12bS1pZAogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiB2bQogICAgICB3aGF0OiB2aXJ0dWFsLW1hY2hpbmUKICAgIGVjczogKmVjcy1ob3N0CiAgIyBBVURJVF9WSVJUX01JR1JBVEVfSU4gLSBJbmJvdW5kIGd1ZXN0IG1pZ3JhdGlvbiBpbmZvCiAgLSByZWNvcmRfdHlwZXM6IFZJUlRfTUlHUkFURV9JTgogICAgYWN0aW9uOiBtaWdyYXRlZC12bS1mcm9tCiAgICBlY3M6ICplY3MtaG9zdAogICMgQVVESVRfVklSVF9NSUdSQVRFX09VVCAtIE91dGJvdW5kIGd1ZXN0IG1pZ3JhdGlvbiBpbmZvCiAgLSByZWNvcmRfdHlwZXM6IFZJUlRfTUlHUkFURV9PVVQKICAgIGFjdGlvbjogbWlncmF0ZWQtdm0tdG8KICAgIGVjczogKmVjcy1ob3N0CiAgIyBBVURJVF9WSVJUX1JFU09VUkNFIC0gUmVzb3VyY2UgYXNzaWdubWVudAogIC0gcmVjb3JkX3R5cGVzOiBWSVJUX1JFU09VUkNFCiAgICBhY3Rpb246IGFzc2lnbmVkLXZtLXJlc291cmNlCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IHJlc3JjCiAgICAgIHNlY29uZGFyeTogdm0KICAgICAgd2hhdDogdmlydHVhbC1tYWNoaW5lCiAgICBlY3M6ICplY3MtaG9zdAoKICAjIFVzZXJzcGFjZSBwcm9jZXNzIGV2ZW50cwoKICAjIEFVRElUX0NIR1JQX0lEIC0gVXNlciBzcGFjZSBncm91cCBJRCBjaGFuZ2VkCiAgLSByZWNvcmRfdHlwZXM6IENIR1JQX0lECiAgICBhY3Rpb246IGNoYW5nZWQtZ3JvdXAKICAgIGVjczoKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBjaGFuZ2UKICAjIEFVRElUX0NIVVNFUl9JRCAtIENoYW5nZWQgdXNlciBJRCBzdXBwbGVtZW50YWwgZGF0YQogIC0gcmVjb3JkX3R5cGVzOiBDSFVTRVJfSUQKICAgIGFjdGlvbjogY2hhbmdlZC11c2VyLWlkCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogY2hhbmdlCiAgIyBBVURJVF9URVNUIC0gVXNlZCBmb3IgdGVzdCBzdWNjZXNzIG1lc3NhZ2VzCiAgLSByZWNvcmRfdHlwZXM6IFRFU1QKICAgIGFjdGlvbjogc2VudC10ZXN0CiAgICBlY3M6ICplY3MtcHJvY2VzcwogICMgQVVESVRfVFJVU1RFRF9BUFAgLSBUcnVzdGVkIGFwcCBtc2cgLSBmcmVlc3R5bGUgdGV4dAogIC0gcmVjb3JkX3R5cGVzOiBUUlVTVEVEX0FQUAogICAgYWN0aW9uOiB1bmtub3duCiAgICBlY3M6ICplY3MtcHJvY2VzcwogICMgQVVESVRfVVNFUl9DTUQgLSBVc2VyIHNoZWxsIGNvbW1hbmQgYW5kIGFyZ3MKICAtIHJlY29yZF90eXBlczogVVNFUl9DTUQKICAgIGFjdGlvbjogcmFuLWNvbW1hbmQKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogY21kCiAgICAgIHdoYXQ6IHByb2Nlc3MKICAgIGRlc2NyaXB0aW9uOiA+CiAgICAgIFRoZXNlIG1lc3NhZ2VzIGFyZSBmcm9tIHVzZXItc3BhY2UgYXBwcywgbGlrZSBzdWRvLCB0aGF0IGxvZyBjb21tYW5kcwogICAgICBiZWluZyBydW4gYnkgYSB1c2VyLiBUaGUgdWlkIGNvbnRhaW5lZCBpbiB0aGVzZSBtZXNzYWdlcyBpcyB1c2VyJ3MgVUlEIGF0CiAgICAgIHRoZSB0aW1lIHRoZSBjb21tYW5kIHdhcyBydW4uIEl0IGlzIG5vdCB0aGUgInRhcmdldCIgVUlEIHVzZWQgdG8gcnVuIHRoZQogICAgICBjb21tYW5kLCB3aGljaCBpcyBub3JtYWxseSByb290LgogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IHN0YXJ0CgogICMgSG9zdC1sZXZlbCBldmVudHMKCiAgIyBBVURJVF9TWVNURU1fQk9PVCAtIFN5c3RlbSBib290CiAgLSByZWNvcmRfdHlwZXM6IFNZU1RFTV9CT09UCiAgICBhY3Rpb246IGJvb3RlZC1zeXN0ZW0KICAgIG9iamVjdDoKICAgICAgd2hhdDogc3lzdGVtCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWhvc3QKICAgICAgdHlwZTogc3RhcnQKICAjIEFVRElUX1NZU1RFTV9SVU5MRVZFTCAtIFN5c3RlbSBydW5sZXZlbCBjaGFuZ2UKICAtIHJlY29yZF90eXBlczogU1lTVEVNX1JVTkxFVkVMCiAgICBhY3Rpb246IGNoYW5nZWQtdG8tcnVubGV2ZWwKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogbmV3LWxldmVsCiAgICAgIHdoYXQ6IHN5c3RlbQogICAgZWNzOgogICAgICA8PDogKmVjcy1ob3N0CiAgICAgIHR5cGU6IGNoYW5nZQogICMgQVVESVRfU1lTVEVNX1NIVVRET1dOIC0gU3lzdGVtIHNodXRkb3duCiAgLSByZWNvcmRfdHlwZXM6IFNZU1RFTV9TSFVURE9XTgogICAgYWN0aW9uOiBzaHV0ZG93bi1zeXN0ZW0KICAgIG9iamVjdDoKICAgICAgd2hhdDogc3lzdGVtCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWhvc3QKICAgICAgdHlwZTogZW5kCgogICMgU2VydmljZS1sZXZlbCBldmVudHMKCiAgIyBBVURJVF9TRVJWSUNFX1NUQVJUIC0gU2VydmljZSAoZGFlbW9uKSBzdGFydAogIC0gcmVjb3JkX3R5cGVzOiBTRVJWSUNFX1NUQVJUCiAgICBhY3Rpb246IHN0YXJ0ZWQtc2VydmljZQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiB1bml0CiAgICAgIHdoYXQ6IHNlcnZpY2UKICAgIGVjczoKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBzdGFydAogICMgQVVESVRfU0VSVklDRV9TVE9QIC0gU2VydmljZSAoZGFlbW9uKSBzdG9wCiAgLSByZWNvcmRfdHlwZXM6IFNFUlZJQ0VfU1RPUAogICAgYWN0aW9uOiBzdG9wcGVkLXNlcnZpY2UKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogdW5pdAogICAgICB3aGF0OiBzZXJ2aWNlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogc3RvcAoKICAjIEF1ZGl0ZCBpbnRlcm5hbCBldmVudHMKCiAgIyBBVURJVF9DT05GSUdfQ0hBTkdFIC0gQXVkaXQgc3lzdGVtIGNvbmZpZ3VyYXRpb24gY2hhbmdlCiAgLSByZWNvcmRfdHlwZXM6IENPTkZJR19DSEFOR0UKICAgIGFjdGlvbjogY2hhbmdlZC1hdWRpdC1jb25maWd1cmF0aW9uCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6CiAgICAgICAgW29wLCBrZXksIGF1ZGl0X2VuYWJsZWQsIGF1ZGl0X3BpZCwgYXVkaXRfYmFja2xvZ19saW1pdCwgYXVkaXRfZmFpbHVyZV0KICAgICAgd2hhdDogYXVkaXQtY29uZmlnCiAgICBlY3M6CiAgICAgIGNhdGVnb3J5OiBbcHJvY2VzcywgY29uZmlndXJhdGlvbl0KICAgICAgdHlwZTogY2hhbmdlCiAgIyBBVURJVF9EQUVNT05fQUJPUlQgLSBEYWVtb24gZXJyb3Igc3RvcCByZWNvcmQKICAtIHJlY29yZF90eXBlczogREFFTU9OX0FCT1JUCiAgICBhY3Rpb246IGFib3J0ZWQtYXVkaXRkLXN0YXJ0dXAKICAgIG9iamVjdDoKICAgICAgd2hhdDogc2VydmljZQogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IHN0b3AKICAjIEFVRElUX0RBRU1PTl9BQ0NFUFQgLSBBdWRpdGQgYWNjZXB0ZWQgcmVtb3RlIGNvbm5lY3Rpb24KICAtIHJlY29yZF90eXBlczogREFFTU9OX0FDQ0VQVAogICAgYWN0aW9uOiByZW1vdGUtYXVkaXQtY29ubmVjdGVkCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNlcnZpY2UKICAgIGVjczoKICAgICAgPDw6ICplY3MtbmV0d29yawogICAgICB0eXBlOgogICAgICAgIC0gY29ubmVjdGlvbgogICAgICAgIC0gc3RhcnQKICAjIEFVRElUX0RBRU1PTl9DTE9TRSAtIEF1ZGl0ZCBjbG9zZWQgcmVtb3RlIGNvbm5lY3Rpb24KICAtIHJlY29yZF90eXBlczogREFFTU9OX0NMT1NFCiAgICBhY3Rpb246IHJlbW90ZS1hdWRpdC1kaXNjb25uZWN0ZWQKICAgIG9iamVjdDoKICAgICAgd2hhdDogc2VydmljZQogICAgZWNzOgogICAgICA8PDogKmVjcy1uZXR3b3JrCiAgICAgIHR5cGU6CiAgICAgICAgLSBjb25uZWN0aW9uCiAgICAgICAgLSBzdGFydAogICMgQVVESVRfREFFTU9OX0NPTkZJRyAtIERhZW1vbiBjb25maWcgY2hhbmdlCiAgLSByZWNvcmRfdHlwZXM6IERBRU1PTl9DT05GSUcKICAgIGFjdGlvbjogY2hhbmdlZC1hdWRpdGQtY29uZmlndXJhdGlvbgogICAgb2JqZWN0OgogICAgICB3aGF0OiBzZXJ2aWNlCiAgICBlY3M6CiAgICAgIGNhdGVnb3J5OiBbcHJvY2VzcywgY29uZmlndXJhdGlvbl0KICAgICAgdHlwZTogY2hhbmdlCiAgIyBBVURJVF9EQUVNT05fRU5EIC0gRGFlbW9uIG5vcm1hbCBzdG9wIHJlY29yZAogIC0gcmVjb3JkX3R5cGVzOiBEQUVNT05fRU5ECiAgICBhY3Rpb246IHNodXRkb3duLWF1ZGl0CiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNlcnZpY2UKICAgIGVjczoKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBzdG9wCiAgIyBBVURJVF9EQUVNT05fRVJSIC0gQXVkaXRkIGludGVybmFsIGVycm9yCiAgLSByZWNvcmRfdHlwZXM6IERBRU1PTl9FUlIKICAgIGFjdGlvbjogYXVkaXQtZXJyb3IKICAgIG9iamVjdDoKICAgICAgd2hhdDogc2VydmljZQogICAgZWNzOiAqZWNzLXByb2Nlc3MKICAjIEFVRElUX0RBRU1PTl9SRUNPTkZJRyAtIEF1ZGl0ZCBzaG91bGQgcmVjb25maWd1cmUKICAtIHJlY29yZF90eXBlczogREFFTU9OX1JFQ09ORklHCiAgICBhY3Rpb246IHJlY29uZmlndXJlZC1hdWRpdGQKICAgIG9iamVjdDoKICAgICAgd2hhdDogc2VydmljZQogICAgZWNzOgogICAgICBjYXRlZ29yeTogW3Byb2Nlc3MsIGNvbmZpZ3VyYXRpb25dCiAgICAgIHR5cGU6IGluZm8KICAjIEFVRElUX0RBRU1PTl9SRVNVTUUgLSBBdWRpdGQgc2hvdWxkIHJlc3VtZSBsb2dnaW5nCiAgLSByZWNvcmRfdHlwZXM6IERBRU1PTl9SRVNVTUUKICAgIGFjdGlvbjogcmVzdW1lZC1hdWRpdC1sb2dnaW5nCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNlcnZpY2UKICAgIGVjczoKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBjaGFuZ2UKICAjIEFVRElUX0RBRU1PTl9ST1RBVEUgLSBBdWRpdGQgc2hvdWxkIHJvdGF0ZSBsb2dzCiAgLSByZWNvcmRfdHlwZXM6IERBRU1PTl9ST1RBVEUKICAgIGFjdGlvbjogcm90YXRlZC1hdWRpdC1sb2dzCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNlcnZpY2UKICAgIGVjczoKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBjaGFuZ2UKICAjIEFVRElUX0RBRU1PTl9TVEFSVCAtIERhZW1vbiBzdGFydHVwIHJlY29yZAogIC0gcmVjb3JkX3R5cGVzOiBEQUVNT05fU1RBUlQKICAgIGFjdGlvbjogc3RhcnRlZC1hdWRpdAogICAgb2JqZWN0OgogICAgICB3aGF0OiBzZXJ2aWNlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogc3RhcnQKICAjIEFVRElUX0tFUk5FTCAtIEFzeW5jaHJvbm91cyBhdWRpdCByZWNvcmQuIE5PVCBBIFJFUVVFU1QuCiAgLSByZWNvcmRfdHlwZXM6IEtFUk5FTAogICAgYWN0aW9uOiBpbml0aWFsaXplZC1hdWRpdC1zdWJzeXN0ZW0KICAgIGVjczogKmVjcy1wcm9jZXNzCgogICMgQ29uZmlndXJhdGlvbiBjaGFuZ2UgZXZlbnRzCgogICMgQVVESVRfVVNZU19DT05GSUcgLSBVc2VyIHNwYWNlIHN5c3RlbSBjb25maWcgY2hhbmdlCiAgLSByZWNvcmRfdHlwZXM6IFVTWVNfQ09ORklHCiAgICBhY3Rpb246IGNoYW5nZWQtY29uZmlndXJhdGlvbgogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBvcAogICAgICB3aGF0OiBzeXN0ZW0KICAgIGVjczoKICAgICAgY2F0ZWdvcnk6IGNvbmZpZ3VyYXRpb24KICAgICAgdHlwZTogY2hhbmdlCiAgIyBBVURJVF9ORVRGSUxURVJfQ0ZHIC0gTmV0ZmlsdGVyIGNoYWluIG1vZGlmaWNhdGlvbnMKICAtIHJlY29yZF90eXBlczogTkVURklMVEVSX0NGRwogICAgYWN0aW9uOiBsb2FkZWQtZmlyZXdhbGwtcnVsZS10bwogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiB0YWJsZQogICAgICB3aGF0OiBmaXJld2FsbAogICAgZWNzOgogICAgICBjYXRlZ29yeTogY29uZmlndXJhdGlvbgogICAgICB0eXBlOiBjaGFuZ2UKICAjIEFVRElUX0ZFQVRVUkVfQ0hBTkdFIC0gYXVkaXQgbG9nIGxpc3RpbmcgZmVhdHVyZSBjaGFuZ2VzCiAgLSByZWNvcmRfdHlwZXM6IEZFQVRVUkVfQ0hBTkdFCiAgICBhY3Rpb246IGNoYW5nZWQtYXVkaXQtZmVhdHVyZQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBmZWF0dXJlCiAgICAgIHdoYXQ6IHN5c3RlbQogICAgZWNzOgogICAgICBjYXRlZ29yeTogY29uZmlndXJhdGlvbgogICAgICB0eXBlOiBjaGFuZ2UKICAjIEFVRElUX1JFUExBQ0UgLSBSZXBsYWNlIGF1ZGl0ZCBpZiB0aGlzIHBhY2tldCB1bmFuc3dlcmQKCiAgIyBUVFkgZXZlbnRzCgogIC0gcmVjb3JkX3R5cGVzOgogICAgICAjIEFVRElUX1RUWSAtIElucHV0IG9uIGFuIGFkbWluaXN0cmF0aXZlIFRUWQogICAgICAtIFRUWQogICAgICAjIEFVRElUX1VTRVJfVFRZIC0gTm9uLUlDQU5PTiBUVFkgaW5wdXQgbWVhbmluZwogICAgICAtIFVTRVJfVFRZCiAgICBhY3Rpb246IHR5cGVkCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGRhdGEKICAgICAgd2hhdDoga2V5c3Ryb2tlcwogICAgaG93OiBbY29tbSwgZXhlXQoKICAjIFBvbGljeSBldmVudHMKCiAgIyBBVURJVF9BVkMgLSBTRSBMaW51eCBhdmMgZGVuaWFsIG9yIGdyYW50IChzZWxpbnV4KQogIC0gcmVjb3JkX3R5cGVzOiBBVkMKICAgIGFjdGlvbjogdmlvbGF0ZWQtc2VsaW51eC1wb2xpY3kKICAgIHN1YmplY3Q6CiAgICAgIHByaW1hcnk6IHNjb250ZXh0CiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IHRjb250ZXh0CiAgICAgIHNlY29uZGFyeTogdGNsYXNzCiAgICBoYXNfZmllbGRzOgogICAgICAtIHNlcmVzdWx0CiAgIyBBVURJVF9BVkMgLSBTRSBMaW51eCBhdmMgZGVuaWFsIG9yIGdyYW50IChhcHBhcm1vcikKICAtIHJlY29yZF90eXBlczogQVZDCiAgICBhY3Rpb246IHZpb2xhdGVkLWFwcGFybW9yLXBvbGljeQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBvcGVyYXRpb24KICAgICAgc2Vjb25kYXJ5OiBbcmVxdWVzdGVkX21hc2ssIGRlbmllZF9tYXNrLCBjYXBuYW1lXQogICAgICB3aGF0OiBwb2xpY3kKICAgIGhhc19maWVsZHM6CiAgICAgIC0gYXBwYXJtb3IKICAjIEFVRElUX0ZTX1JFTEFCRUwgLSBGaWxlc3lzdGVtIHJlbGFiZWxlZAogIC0gcmVjb3JkX3R5cGVzOiBGU19SRUxBQkVMCiAgICBhY3Rpb246IHJlbGFiZWxlZC1maWxlc3lzdGVtCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IG1hYy1jb25maWcKICAjIEFVRElUX0xBQkVMX0xFVkVMX0NIQU5HRSAtIE9iamVjdCdzIGxldmVsIHdhcyBjaGFuZ2VkCiAgLSByZWNvcmRfdHlwZXM6IExBQkVMX0xFVkVMX0NIQU5HRQogICAgYWN0aW9uOiBtb2RpZmllZC1sZXZlbC1vZgogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBwcmludGVyCiAgICAgIHdoYXQ6IHByaW50ZXIKICAjIEFVRElUX0xBQkVMX09WRVJSSURFIC0gQWRtaW4gaXMgb3ZlcnJpZGluZyBhIGxhYmVsCiAgLSByZWNvcmRfdHlwZXM6IExBQkVMX09WRVJSSURFCiAgICBhY3Rpb246IG92ZXJyb2RlLWxhYmVsLW9mCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IG1hYy1jb25maWcKICAjIEFVRElUX01BQ19DSEVDSyAtIFVzZXIgc3BhY2UgTUFDIGRlY2lzaW9uIHJlc3VsdHMKICAtIHJlY29yZF90eXBlczogTUFDX0NIRUNLCiAgICBhY3Rpb246IG1hYy1wZXJtaXNzaW9uCiAgIyBBVURJVF9NQUNfQ09ORklHX0NIQU5HRSAtIENoYW5nZXMgdG8gYm9vbGVhbnMKICAtIHJlY29yZF90eXBlczogTUFDX0NPTkZJR19DSEFOR0UKICAgIGFjdGlvbjogY2hhbmdlZC1zZWxpbnV4LWJvb2xlYW4KICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogYm9vbAogICAgICB3aGF0OiBtYWMtY29uZmlnCiAgICBlY3M6CiAgICAgIGNhdGVnb3J5OiBjb25maWd1cmF0aW9uCiAgICAgIHR5cGU6IGNoYW5nZQogICMgQVVESVRfTUFDX1BPTElDWV9MT0FEIC0gUG9saWN5IGZpbGUgbG9hZAogIC0gcmVjb3JkX3R5cGVzOiBNQUNfUE9MSUNZX0xPQUQKICAgIGFjdGlvbjogbG9hZGVkLXNlbGludXgtcG9saWN5CiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IG1hYy1jb25maWcKICAgIGVjczoKICAgICAgY2F0ZWdvcnk6IGNvbmZpZ3VyYXRpb24KICAgICAgdHlwZTogYWNjZXNzCiAgIyBBVURJVF9NQUNfU1RBVFVTIC0gQ2hhbmdlZCBlbmZvcmNpbmcscGVybWlzc2l2ZSxvZmYKICAtIHJlY29yZF90eXBlczogTUFDX1NUQVRVUwogICAgYWN0aW9uOiBjaGFuZ2VkLXNlbGludXgtZW5mb3JjZW1lbnQKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogZW5mb3JjaW5nCiAgICAgIHdoYXQ6IG1hYy1jb25maWcKICAgIGVjczoKICAgICAgY2F0ZWdvcnk6IGNvbmZpZ3VyYXRpb24KICAgICAgdHlwZTogY2hhbmdlCiAgIyBBVURJVF9VU0VSX0FWQyAtIFVzZXIgc3BhY2UgYXZjIG1lc3NhZ2UKICAtIHJlY29yZF90eXBlczogVVNFUl9BVkMKICAgIGFjdGlvbjogYWNjZXNzLXBlcm1pc3Npb24KICAjIEFVRElUX1VTRVJfTUFDX0NPTkZJR19DSEFOR0UgLSBDaGFuZ2UgbWFkZSB0byBNQUMgcG9saWN5CiAgLSByZWNvcmRfdHlwZXM6IFVTRVJfTUFDX0NPTkZJR19DSEFOR0UKICAgIGFjdGlvbjogY2hhbmdlZC1tYWMtY29uZmlndXJhdGlvbgogICAgb2JqZWN0OgogICAgICB3aGF0OiBtYWMtY29uZmlnCiAgICBlY3M6CiAgICAgIGNhdGVnb3J5OiBjb25maWd1cmF0aW9uCiAgICAgIHR5cGU6IGNoYW5nZQogICMgQVVESVRfVVNFUl9NQUNfUE9MSUNZX0xPQUQgLSBVc2Vyc3BjIGRhZW1vbiBsb2FkZWQgcG9saWMKICAtIHJlY29yZF90eXBlczogVVNFUl9NQUNfUE9MSUNZX0xPQUQKICAgIGFjdGlvbjogbG9hZGVkLW1hYy1wb2xpY3kKICAgIG9iamVjdDoKICAgICAgd2hhdDogbWFjLWNvbmZpZwogICAgZWNzOgogICAgICBjYXRlZ29yeTogY29uZmlndXJhdGlvbgogICAgICB0eXBlOiBhY2Nlc3MKICAjIEFVRElUX1VTRVJfU0VMSU5VWF9FUlIgLSBTRSBMaW51eCB1c2VyIHNwYWNlIGVycm9yCiAgLSByZWNvcmRfdHlwZXM6IFVTRVJfU0VMSU5VWF9FUlIKICAgIGFjdGlvbjogYWNjZXNzLWVycm9yCiAgIyBBVURJVF9TRUNDT01QIC0gU2VjdXJlIENvbXB1dGluZyBldmVudAogIC0gcmVjb3JkX3R5cGVzOiBTRUNDT01QCiAgICBhY3Rpb246IHZpb2xhdGVkLXNlY2NvbXAtcG9saWN5CiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IHN5c2NhbGwKICAgICAgd2hhdDogcHJvY2VzcwogICMgQVVESVRfU0VMSU5VWF9FUlIgLSBJbnRlcm5hbCBTRSBMaW51eCBFcnJvcnMKICAtIGFjdGlvbjogY2F1c2VkLW1hYy1wb2xpY3ktZXJyb3IKICAgIG9iamVjdDoKICAgICAgd2hhdDogc3lzdGVtCiAgICByZWNvcmRfdHlwZXM6IFNFTElOVVhfRVJSCiAgIyBBVURJVF9BUFBBUk1PUl9BTExPV0VECiAgIyBBVURJVF9BUFBBUk1PUl9ERU5JRUQKICAjIEFVRElUX0FQUEFSTU9SX0VSUk9SCiAgIyBBVURJVF9BVkNfUEFUSCAtIGRlbnRyeSwgdmZzbW91bnQgcGFpciBmcm9tIGF2YwogICMgQVVESVRfQVBQQVJNT1JfQVVESVQKICAjIEFVRElUX0FQUEFSTU9SX0hJTlQKICAjIEFVRElUX0FQUEFSTU9SX1NUQVRVUwogICMgQVVESVRfQVBQQVJNT1JfRVJST1IKICAjIEFVRElUX0RFVl9BTExPQyAtIERldmljZSB3YXMgYWxsb2NhdGVkCiAgIyBBVURJVF9ERVZfREVBTExPQyAtIERldmljZSB3YXMgZGVhbGxvY2F0ZWQKICAjIEFVRElUX01BQ19VTkxCTF9BTExPVyAtIE5ldExhYmVsOiBhbGxvdyB1bmxhYmVsZWQgdHJhZmZpYwogICMgQVVESVRfTUFDX0NJUFNPVjRfQUREIC0gTmV0TGFiZWw6IGFkZCBDSVBTT3Y0IERPSSBlbnRyeQogICMgQVVESVRfTUFDX0NJUFNPVjRfREVMIC0gTmV0TGFiZWw6IGRlbCBDSVBTT3Y0IERPSSBlbnRyeQogICMgQVVESVRfTUFDX01BUF9BREQgLSBOZXRMYWJlbDogYWRkIExTTSBkb21haW4gbWFwcGluZwogICMgQVVESVRfTUFDX01BUF9ERUwgLSBOZXRMYWJlbDogZGVsIExTTSBkb21haW4gbWFwcGluZwogICMgQVVESVRfTUFDX0lQU0VDX0VWRU5UIC0gQXVkaXQgYW4gSVBTZWMgZXZlbnQKICAjIEFVRElUX01BQ19VTkxCTF9TVENBREQgLSBOZXRMYWJlbDogYWRkIGEgc3RhdGljIGxhYmVsCiAgIyBBVURJVF9NQUNfVU5MQkxfU1RDREVMIC0gTmV0TGFiZWw6IGRlbCBhIHN0YXRpYyBsYWJlbAogICMgQVVESVRfTUFDX0NBTElQU09fQUREIC0gTmV0TGFiZWw6IGFkZCBDQUxJUFNPIERPSSBlbnRyeQogICMgQVVESVRfTUFDX0NBTElQU09fREVMIC0gTmV0TGFiZWw6IGRlbCBDQUxJUFNPIERPSSBlbnRyeQogICMgQVVESVRfVVNFUl9MQUJFTEVEX0VYUE9SVCAtIE9iamVjdCBleHBvcnRlZCB3aXRoIGxhYmVsCiAgIyBBVURJVF9VU0VSX1VOTEFCRUxFRF9FWFBPUlQgLSBPYmplY3QgZXhwb3J0ZWQgd2l0aG91dCBsYWJlbAoKICAjIENyeXB0byBldmVudHMKCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgYWN0aW9uOiBuZWdvdGlhdGVkLWNyeXB0by1rZXkKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogZnAKICAgICAgc2Vjb25kYXJ5OiBbYWRkciwgaG9zdG5hbWVdCiAgICAgIHdoYXQ6IHVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBDUllQVE9fS0VZX1VTRVIKICAgIHNvdXJjZV9pcDogW2FkZHJdCiAgICBlY3M6ICplY3MtcHJvY2VzcwogIC0gYWN0aW9uOiBjcnlwdG8tb2ZmaWNlci1sb2dnZWQtaW4KICAgIHJlY29yZF90eXBlczogQ1JZUFRPX0xPR0lOCiAgLSBhY3Rpb246IGNyeXB0by1vZmZpY2VyLWxvZ2dlZC1vdXQKICAgIHJlY29yZF90eXBlczogQ1JZUFRPX0xPR09VVAogICAgZWNzOiAqZWNzLXByb2Nlc3MKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICBhY3Rpb246IHN0YXJ0ZWQtY3J5cHRvLXNlc3Npb24KICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogYWRkcgogICAgICBzZWNvbmRhcnk6IFtycG9ydF0KICAgIHJlY29yZF90eXBlczogQ1JZUFRPX1NFU1NJT04KICAgIHNvdXJjZV9pcDogW2FkZHJdCiAgICBlY3M6ICplY3MtcHJvY2VzcwogIC0gYWN0aW9uOiBhY2Nlc3MtcmVzdWx0CiAgICByZWNvcmRfdHlwZXM6IERBQ19DSEVDSwoKICAjIEFub21hbGllcwoKICAjIEFVRElUX0FOT01fQUJFTkQgLSBQcm9jZXNzIGVuZGVkIGFibm9ybWFsbHkKICAtIHJlY29yZF90eXBlczogQU5PTV9BQkVORAogICAgYWN0aW9uOiBjcmFzaGVkLXByb2dyYW0KICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogW2NvbW0sIGV4ZV0KICAgICAgc2Vjb25kYXJ5OiBwaWQKICAgICAgd2hhdDogcHJvY2VzcwogICAgaG93OiBzaWcKICAgIGVjczoKICAgICAgIyBjb25zaWRlciBhZGRpbmcgYW4gYW5vbWFseSBjYXRlZ29yeSB3aGVuIHdlIGludHJvZHVjZQogICAgICAjIHRvIEVDUwogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IGVuZAogICMgQVVESVRfQU5PTV9FWEVDIC0gRXhlY3V0aW9uIG9mIGZpbGUKICAtIHJlY29yZF90eXBlczogQU5PTV9FWEVDCiAgICBhY3Rpb246IGF0dGVtcHRlZC1leGVjdXRpb24tb2YtZm9yYmlkZGVuLXByb2dyYW0KICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogY21kCiAgICAgIHdoYXQ6IHByb2Nlc3MKICAgIGhvdzogdGVybWluYWwKICAgIGVjczoKICAgICAgIyBjb25zaWRlciBhZGRpbmcgYW4gYW5vbWFseSBjYXRlZ29yeSB3aGVuIHdlIGludHJvZHVjZQogICAgICAjIHRvIEVDUwogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IHN0YXJ0CiAgIyBBVURJVF9BTk9NX0xJTksgLSBTdXNwaWNpb3VzIHVzZSBvZiBmaWxlIGxpbmtzCiAgLSByZWNvcmRfdHlwZXM6IEFOT01fTElOSwogICAgYWN0aW9uOiB1c2VkLXN1c3BpY2lvdXMtbGluawogICMgQVVESVRfQU5PTV9MT0dJTl9GQUlMVVJFUyAtIEZhaWxlZCBsb2dpbiBsaW1pdCByZWFjaGVkCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBBTk9NX0xPR0lOX0ZBSUxVUkVTCiAgICBhY3Rpb246IGZhaWxlZC1sb2ctaW4tdG9vLW1hbnktdGltZXMtdG8KICAjIEFVRElUX0FOT01fTE9HSU5fTE9DQVRJT04gLSBMb2dpbiBmcm9tIGZvcmJpZGRlbiBsb2NhdGlvbgogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogQU5PTV9MT0dJTl9MT0NBVElPTgogICAgYWN0aW9uOiBhdHRlbXB0ZWQtbG9nLWluLWZyb20tdW51c3VhbC1wbGFjZS10bwogICMgQVVESVRfQU5PTV9MT0dJTl9TRVNTSU9OUyAtIE1heCBjb25jdXJyZW50IHNlc3Npb25zIHJlYWNoZWQKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IEFOT01fTE9HSU5fU0VTU0lPTlMKICAgIGFjdGlvbjogb3BlbmVkLXRvby1tYW55LXNlc3Npb25zLXRvCiAgIyBBVURJVF9BTk9NX0xPR0lOX1RJTUUgLSBMb2dpbiBhdHRlbXB0ZWQgYXQgYmFkIHRpbWUKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IEFOT01fTE9HSU5fVElNRQogICAgYWN0aW9uOiBhdHRlbXB0ZWQtbG9nLWluLWR1cmluZy11bnVzdWFsLWhvdXItdG8KICAjIEFVRElUX0FOT01fUFJPTUlTQ1VPVVMgLSBEZXZpY2UgY2hhbmdlZCBwcm9taXNjdW91cyBtb2RlCiAgLSByZWNvcmRfdHlwZXM6IEFOT01fUFJPTUlTQ1VPVVMKICAgIGFjdGlvbjogY2hhbmdlZC1wcm9taXNjdW91cy1tb2RlLW9uLWRldmljZSAjIENvdWxkIGJlIGVudGVyZWQgb3IgZXhpdGVkIGJhc2VkIG9uIHByb20gZmllbGQuCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGRldgogICAgICB3aGF0OiBuZXR3b3JrLWRldmljZQogICMgQVVESVRfQU5PTV9SQkFDX0lOVEVHUklUWV9GQUlMIC0gUkJBQyBmaWxlIGludGVncml0eSBmYWlsdXJlCiAgLSByZWNvcmRfdHlwZXM6IEFOT01fUkJBQ19JTlRFR1JJVFlfRkFJTAogICAgYWN0aW9uOiB0ZXN0ZWQtZmlsZS1zeXN0ZW0taW50ZWdyaXR5LW9mCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGhvc3RuYW1lCiAgICAgIHdoYXQ6IGZpbGVzeXN0ZW0KICAjIEFVRElUX0FOT01fTE9HSU5fQUNDVCAtIExvZ2luIGF0dGVtcHRlZCB0byB3YXRjaGVkIGFjY3QKICAjIEFVRElUX0FOT01fTUFYX0RBQyAtIE1heCBEQUMgZmFpbHVyZXMgcmVhY2hlZAogICMgQVVESVRfQU5PTV9NQVhfTUFDIC0gTWF4IE1BQyBmYWlsdXJlcyByZWFjaGVkCiAgIyBBVURJVF9BTk9NX0FNVFVfRkFJTCAtIEFNVFUgZmFpbHVyZQogICMgQVVESVRfQU5PTV9SQkFDX0ZBSUwgLSBSQkFDIHNlbGYgdGVzdCBmYWlsdXJlCiAgIyBBVURJVF9BTk9NX0NSWVBUT19GQUlMIC0gQ3J5cHRvIHN5c3RlbSB0ZXN0IGZhaWx1cmUKICAjIEFVRElUX0FOT01fTUtfRVhFIC0gTWFrZSBhbiBleGVjdXRhYmxlCiAgIyBBVURJVF9BTk9NX0FDQ0VTU19GUyAtIEFjY2VzcyBvZiBmaWxlIG9yIGRpcgogICMgQVVESVRfQU5PTV9BRERfQUNDVCAtIEFkZGluZyBhbiBhY2N0CiAgIyBBVURJVF9BTk9NX0RFTF9BQ0NUIC0gRGVsZXRpbmcgYW4gYWNjdAogICMgQVVESVRfQU5PTV9NT0RfQUNDVCAtIENoYW5naW5nIGFuIGFjY3QKICAjIEFVRElUX0FOT01fUk9PVF9UUkFOUyAtIFVzZXIgYmVjYW1lIHJvb3QKICAjIEFVRElUX0FOT01fTE9HSU5fU0VSVklDRSAtIFNlcnZpY2UgYWNjdCBhdHRlbXB0ZWQgbG9naW4KCiAgIyBBbm9tYWx5IHJlc3BvbnNlcwoKICAjIEFVRElUX1JFU1BfQU5PTUFMWSAtIEFub21hbHkgbm90IHJlYWN0ZWQgdG8KICAjIEFVRElUX1JFU1BfQUxFUlQgLSBBbGVydCBlbWFpbCB3YXMgc2VudAogICMgQVVESVRfUkVTUF9LSUxMX1BST0MgLSBLaWxsIHByb2dyYW0KICAjIEFVRElUX1JFU1BfVEVSTV9BQ0NFU1MgLSBUZXJtaW5hdGUgc2Vzc2lvbgogICMgQVVESVRfUkVTUF9BQ0NUX1JFTU9URSAtIEFjY3QgbG9ja2VkIGZyb20gcmVtb3RlIGFjY2VzcwogICMgQVVESVRfUkVTUF9BQ0NUX0xPQ0tfVElNRUQgLSBVc2VyIGFjY3QgbG9ja2VkIGZvciB0aW1lCiAgIyBBVURJVF9SRVNQX0FDQ1RfVU5MT0NLX1RJTUVEIC0gVXNlciBhY2N0IHVubG9ja2VkIGZyb20gdGltZQogICMgQVVESVRfUkVTUF9BQ0NUX0xPQ0sgLSBVc2VyIGFjY3Qgd2FzIGxvY2tlZAogICMgQVVESVRfUkVTUF9URVJNX0xPQ0sgLSBUZXJtaW5hbCB3YXMgbG9ja2VkCiAgIyBBVURJVF9SRVNQX1NFQk9PTCAtIFNldCBhbiBTRSBMaW51eCBib29sZWFuCiAgIyBBVURJVF9SRVNQX0VYRUMgLSBFeGVjdXRlIGEgc2NyaXB0CiAgIyBBVURJVF9SRVNQX1NJTkdMRSAtIEdvIHRvIHNpbmdsZSB1c2VyIG1vZGUKICAjIEFVRElUX1JFU1BfSEFMVCAtIHRha2UgdGhlIHN5c3RlbSBkb3duCiAgIyBBVURJVF9SRVNQX09SSUdJTl9CTE9DSyAtIEFkZHJlc3MgYmxvY2tlZCBieSBpcHRhYmxlcwogICMgQVVESVRfUkVTUF9PUklHSU5fQkxPQ0tfVElNRUQgLSBBZGRyZXNzIGJsb2NrZWQgZm9yIHRpbWUKCiAgIyBBdWRpdCBydWxlIGV2ZW50cwoKICAjIEFVRElUX1NZU0NBTEwgLSBTeXNjYWxsIGV2ZW50CiAgIyBBVURJVF9QQVRIIC0gRmlsZW5hbWUgcGF0aCBpbmZvcm1hdGlvbgogICMgQVVESVRfSVBDIC0gSVBDIHJlY29yZAogICMgQVVESVRfU09DS0VUQ0FMTCAtIHN5c19zb2NrZXRjYWxsIGFyZ3VtZW50cwogICMgQVVESVRfU09DS0FERFIgLSBzb2NrYWRkciBjb3BpZWQgYXMgc3lzY2FsbCBhcmcKICAjIEFVRElUX0NXRCAtIEN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkKICAjIEFVRElUX0VYRUNWRSAtIGV4ZWN2ZSBhcmd1bWVudHMKICAjIEFVRElUX0lQQ19TRVRfUEVSTSAtIElQQyBuZXcgcGVybWlzc2lvbnMgcmVjb3JkIHR5cGUKICAjIEFVRElUX01RX09QRU4gLSBQT1NJWCBNUSBvcGVuIHJlY29yZCB0eXBlCiAgIyBBVURJVF9NUV9TRU5EUkVDVi0gUE9TSVggTVEgc2VuZC9yZWNlaXZlIHJlY29yZCB0eXBlCiAgIyBBVURJVF9NUV9OT1RJRlkgLSBQT1NJWCBNUSBub3RpZnkgcmVjb3JkIHR5cGUKICAjIEFVRElUX01RX0dFVFNFVEFUVFIgLSBQT1NJWCBNUSBnZXQvc2V0IGF0dHJpYnV0ZSByZWNvcmQgdHlwZQogICMgQVVESVRfRkRfUEFJUiAtIGF1ZGl0IHJlY29yZCBmb3IgcGlwZS9zb2NrZXRwYWlyCiAgIyBBVURJVF9PQkpfUElEIC0gcHRyYWNlIHRhcmdldAogICMgQVVESVRfQlBSTV9GQ0FQUyAtIEluZm9ybWF0aW9uIGFib3V0IGZjYXBzIGluY3JlYXNpbmcgcGVybXMKICAjIEFVRElUX0NBUFNFVCAtIFJlY29yZCBzaG93aW5nIGFyZ3VtZW50IHRvIHN5c19jYXBzZXQKICAjIEFVRElUX01NQVAgLSBSZWNvcmQgc2hvd2luZyBkZXNjcmlwdG9yIGFuZCBmbGFncyBpbiBtbWFwCiAgIyBBVURJVF9ORVRGSUxURVJfUEtUIC0gUGFja2V0cyB0cmF2ZXJzaW5nIG5ldGZpbHRlciBjaGFpbnMKCiAgIyBJbnRlZ3JpdHkgY2hlY2tzCgogICMgQVVESVRfSU5URUdSSVRZX0RBVEEgLSBEYXRhIGludGVncml0eSB2ZXJpZmljYXRpb24KICAjIEFVRElUX0lOVEVHUklUWV9NRVRBREFUQSAtIE1ldGFkYXRhIGludGVncml0eSB2ZXJpZmljYXRpb24KICAjIEFVRElUX0lOVEVHUklUWV9TVEFUVVMgLSBJbnRlZ3JpdHkgZW5hYmxlIHN0YXR1cwogICMgQVVESVRfSU5URUdSSVRZX0hBU0ggLSBJbnRlZ3JpdHkgSEFTSCB0eXBlCiAgIyBBVURJVF9JTlRFR1JJVFlfUENSIC0gUENSIGludmFsaWRhdGlvbiBtc2dzCiAgIyBBVURJVF9JTlRFR1JJVFlfUlVMRSAtIFBvbGljeSBydWxlCgogICMgVmFyaW91cwoKICAjIEFVRElUX1VTRVIgLSBNZXNzYWdlIGZyb20gdXNlcnNwYWNlIC0tIGRlcHJlY2F0ZWQKICAtIHJlY29yZF90eXBlczogVVNFUgogICAgYWN0aW9uOiBzZW50LW1lc3NhZ2UKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogYWRkcgo=") assets["normalizationData"] = value } From 6e80636e8db2d0ccd32a8655df95b3fdc8ff4d10 Mon Sep 17 00:00:00 2001 From: Adrian Serrano Date: Mon, 25 Jan 2021 12:54:50 +0100 Subject: [PATCH 11/15] Fix implicit rune to string conversion warning Nit: Fixes an implicit rune to string conversion warning emitted by vet. There was no bug, but the implicit conversion is deprecated starting in Go 1.15. > rule/rule.go:367:29: conversion from untyped int to string yields a string of one rune, not a string of digits (did you mean fmt.Sprint(x)?) --- rule/rule.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rule/rule.go b/rule/rule.go index afd6115..51bc142 100644 --- a/rule/rule.go +++ b/rule/rule.go @@ -364,7 +364,7 @@ func addFileWatch(data *ruleData, rule *FileWatchRule) error { func addKeys(data *ruleData, keys []string) error { if len(keys) > 0 { - key := strings.Join(keys, string(keySeparator)) + key := strings.Join(keys, string(rune(keySeparator))) if err := addFilter(data, "key", "=", key); err != nil { return errors.Wrapf(err, "failed to add keys [%v]", strings.Join(keys, ",")) } From 8e0720dad9fd4c7182d1f3ddb46afb443388e7ab Mon Sep 17 00:00:00 2001 From: Adrian Serrano Date: Mon, 25 Jan 2021 16:17:36 +0100 Subject: [PATCH 12/15] Update changelog --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 46aafb2..eccb271 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,8 @@ This project adheres to [Semantic Versioning](http://semver.org/). ### Changed +- Change ECS category of USER_START and USER_END messages to `session`. [#86](https://github.com/elastic/go-libaudit/pull/86) + ### Removed ### Deprecated From 11ee0dbbbbee625e68c80a4b05d6b3582bd2d15e Mon Sep 17 00:00:00 2001 From: Adrian Serrano Date: Wed, 27 Jan 2021 12:27:48 +0100 Subject: [PATCH 13/15] Add AUDIT_SOFTWARE_UPDATE from filebeat auditd/log --- aucoalesce/normalizations.yaml | 7 +++++++ aucoalesce/znormalize_data.go | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/aucoalesce/normalizations.yaml b/aucoalesce/normalizations.yaml index d64a79c..dd1b53c 100644 --- a/aucoalesce/normalizations.yaml +++ b/aucoalesce/normalizations.yaml @@ -1663,3 +1663,10 @@ normalizations: action: sent-message object: primary: addr + + # AUDIT_SOFTWARE_UPDATE - Package management + - record_types: SOFTWARE_UPDATE + action: package-updated + ecs: + category: package + type: info diff --git a/aucoalesce/znormalize_data.go b/aucoalesce/znormalize_data.go index 2581478..a28fc0f 100644 --- a/aucoalesce/znormalize_data.go +++ b/aucoalesce/znormalize_data.go @@ -31,7 +31,7 @@ func asset(key string) ([]byte, error) { assets = map[string][]byte{} var value []byte - value, _ = base64.StdEncoding.DecodeString("LS0tCiMgTWFjcm9zIGRlY2xhcmVzIHNvbWUgWUFNTCBhbmNob3JzIHRoYXQgY2FuIGJlIHJlZmVyZW5jZWQgZm9yIHNvbWUgY29tbW9uCiMgb2JqZWN0IHR5cGUgbm9ybWFsaXphdGlvbnMgbGlrZSB1c2VyLXNlc3Npb24sIHNvY2tldCwgb3IgcHJvY2Vzcy4KbWFjcm9zOgogIC0gJmRlZmF1bHRzCiAgICBzdWJqZWN0OgogICAgICBwcmltYXJ5OiBhdWlkCiAgICAgIHNlY29uZGFyeTogdWlkCiAgICBob3c6IFtleGUsIGNvbW1dCgogIC0gJm1hY3JvLXVzZXItc2Vzc2lvbgogICAgc3ViamVjdDoKICAgICAgcHJpbWFyeTogYXVpZAogICAgICBzZWNvbmRhcnk6IFthY2N0LCBpZCwgdWlkXQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiB0ZXJtaW5hbAogICAgICBzZWNvbmRhcnk6IFthZGRyLCBob3N0bmFtZV0KICAgICAgd2hhdDogdXNlci1zZXNzaW9uCiAgICBob3c6IFtleGUsIHRlcm1pbmFsXQoKICAtICZtYWNyby1zb2NrZXQKICAgIDw8OiAqZGVmYXVsdHMKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogW2FkZHIsIHBhdGhdCiAgICAgIHNlY29uZGFyeTogcG9ydAogICAgICB3aGF0OiBzb2NrZXQKCiAgLSAmbWFjcm8tcHJvY2VzcwogICAgPDw6ICpkZWZhdWx0cwogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBbY21kLCBleGUsIGNvbW1dCiAgICAgIHNlY29uZGFyeTogcGlkCiAgICAgIHdoYXQ6IHByb2Nlc3MKICAgIGhvdzogdGVybWluYWwKCiAgLSAmZWNzLWlhbQogICAgY2F0ZWdvcnk6IGlhbQogICAgdHlwZTogaW5mbwoKICAtICZlY3MtYXV0aAogICAgY2F0ZWdvcnk6IGF1dGhlbnRpY2F0aW9uCiAgICB0eXBlOiBpbmZvCiAgICBtYXBwaW5nczoKICAgICAgLSBmcm9tOiBzdWJqZWN0LnByaW1hcnkKICAgICAgICB0bzogdXNlcgogICAgICAtIGZyb206IHN1YmplY3Quc2Vjb25kYXJ5CiAgICAgICAgdG86IHVzZXIuZWZmZWN0aXZlCgogIC0gJmVjcy1zZXNzaW9uCiAgICBjYXRlZ29yeTogc2Vzc2lvbgogICAgdHlwZTogaW5mbwogICAgbWFwcGluZ3M6CiAgICAgIC0gZnJvbTogc3ViamVjdC5wcmltYXJ5CiAgICAgICAgdG86IHVzZXIKICAgICAgLSBmcm9tOiBzdWJqZWN0LnNlY29uZGFyeQogICAgICAgIHRvOiB1c2VyLmVmZmVjdGl2ZQoKICAtICZlY3MtaG9zdAogICAgY2F0ZWdvcnk6IGhvc3QKICAgIHR5cGU6IGluZm8KCiAgLSAmZWNzLXByb2Nlc3MKICAgIGNhdGVnb3J5OiBwcm9jZXNzCiAgICB0eXBlOiBpbmZvCgogIC0gJmVjcy1maWxlCiAgICBjYXRlZ29yeTogZmlsZQogICAgdHlwZTogaW5mbwoKICAtICZlY3MtZHJpdmVyCiAgICBjYXRlZ29yeTogZHJpdmVyCiAgICB0eXBlOiBpbmZvCgogIC0gJmVjcy1uZXR3b3JrCiAgICBjYXRlZ29yeTogbmV0d29yawogICAgdHlwZToKICAgICAgLSBjb25uZWN0aW9uCiAgICAgIC0gaW5mbwoKICAtICZlY3MtdXNlci1tb2RpZmljYXRpb24tbWFwcGluZ3MKICAgIG1hcHBpbmdzOgogICAgICAtIGZyb206IHN1YmplY3QucHJpbWFyeQogICAgICAgIHRvOiB1c2VyCiAgICAgIC0gZnJvbTogc3ViamVjdC5zZWNvbmRhcnkKICAgICAgICB0bzogdXNlci5lZmZlY3RpdmUKICAgICAgLSBmcm9tOiBvYmplY3QucHJpbWFyeQogICAgICAgIHRvOiB1c2VyLnRhcmdldAoKICAtICZlY3MtZ3JvdXAtbW9kaWZpY2F0aW9uLW1hcHBpbmdzCiAgICBtYXBwaW5nczoKICAgICAgLSBmcm9tOiBzdWJqZWN0LnByaW1hcnkKICAgICAgICB0bzogdXNlcgogICAgICAtIGZyb206IHN1YmplY3Quc2Vjb25kYXJ5CiAgICAgICAgdG86IHVzZXIuZWZmZWN0aXZlCiAgICAgIC0gZnJvbTogb2JqZWN0LnByaW1hcnkKICAgICAgICB0bzogZ3JvdXAudGFyZ2V0CgojIE5vcm1hbGl6YXRpb25zIGlzIGEgbGlzdCBvZiBkZWNsYXJhdGlvbnMgc3BlY2lmeWluZyBob3cgdG8gbm9ybWFsaXplIHRoZSBkYXRhCiMgY29udGFpbmVkIGluIGFuIGV2ZW50LiBUaGUgbm9ybWFsaXphdGlvbiBjYW4gYmUgYXBwbGllZCBiYXNlZCBvbiB0aGUgc3lzY2FsbAojIG5hbWUgKGUuZy4gY29ubmVjdCwgb3Blbikgb3IgYmFzZWQgb24gdGhlIHJlY29yZCB0eXBlIChlLmcuIFVTRVJfTE9HSU4pLgojIE5vIHR3byBub3JtYWxpemF0aW9ucyBjYW4gYXBwbHkgdG8gdGhlIHNhbWUgc3lzY2FsbCBvciByZWNvcmQgdHlwZS4gVGhpcwojIHdpbGwgcmVzdWx0IGluIGEgZmFpbHVyZSBhdCBsb2FkIHRpbWUuCiMKIyBFYWNoIG5vcm1hbGl6YXRpb24gc2hvdWxkIHNwZWNpZnk6CiMgICBhY3Rpb24gLSB3aGF0IGhhcHBlbmVkCiMgICBhY3RvciAgLSB3aG8gZGlkIHRoaXMgb3Igd2hvIHRyaWdnZXJlZCB0aGUgZXZlbnQKIyAgIG9iamVjdCAtIHdoYXQgd2FzIHRoZSAidGhpbmciIGludm9sdmVkIGluIHRoZSBhY3Rpb24gKGUuZy4gcHJvY2Vzcywgc29ja2V0KQojICAgaG93ICAgIC0gaG93IHdhcyB0aGUgYWN0aW9uIHBlcmZvcm1lZCAoZS5nLiBleGUgb3IgdGVybWluYWwpCm5vcm1hbGl6YXRpb25zOgogIC0gZWNzOiAqZWNzLXByb2Nlc3MKICAgIHN5c2NhbGxzOgogICAgICAtICcqJyAjIHRoaXMgaXMgYSBjYXRjaCBhbGwKICAtIGFjdGlvbjogb3BlbmVkLWZpbGUKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgc3lzY2FsbHM6CiAgICAgICMgY3JlYXQgLSBvcGVuIGFuZCBwb3NzaWJseSBjcmVhdGUgYSBmaWxlCiAgICAgIC0gY3JlYXQKICAgIGVjczoKICAgICAgPDw6ICplY3MtZmlsZQogICAgICB0eXBlOiBjcmVhdGlvbgogIC0gYWN0aW9uOiBvcGVuZWQtZmlsZQogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBmYWxsb2NhdGUgLSBtYW5pcHVsYXRlIGZpbGUgc3BhY2UKICAgICAgLSBmYWxsb2NhdGUKICAgICAgIyB0cnVuY2F0ZSAtIHRydW5jYXRlIGEgZmlsZSB0byBhIHNwZWNpZmllZCBsZW5ndGgKICAgICAgLSB0cnVuY2F0ZQogICAgICAjIGZ0cnVuY2F0ZSAtIHRydW5jYXRlIGEgZmlsZSB0byBhIHNwZWNpZmllZCBsZW5ndGgKICAgICAgLSBmdHJ1bmNhdGUKICAgIGVjczoKICAgICAgPDw6ICplY3MtZmlsZQogICAgICAjIHRlY2huaWNhbGx5IHlvdSBjYW4gdHJ1bmNhdGUgYSBmaWxlIHRvIHRoZSBzYW1lIGxlbmd0aAogICAgICAjIGJ1dCByZWdhcmRsZXNzLCB3ZSBjb25zaWRlciB0aGlzIGEgY2hhbmdlCiAgICAgIHR5cGU6IGNoYW5nZQogIC0gYWN0aW9uOiBvcGVuZWQtZmlsZQogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBvcGVuIC0gb3BlbiBhbmQgcG9zc2libHkgY3JlYXRlIGEgZmlsZQogICAgICAtIG9wZW4KICAgICAgIyBvcGVuYXQgLSBvcGVuIGFuZCBwb3NzaWJseSBjcmVhdGUgYSBmaWxlCiAgICAgIC0gb3BlbmF0CiAgICAgICMgcmVhZGxpbmsgLSByZWFkIHZhbHVlIG9mIGEgc3ltYm9saWMgbGluawogICAgICAtIHJlYWRsaW5rCiAgICAgICMgcmVhZGxpbmthdCAtIHJlYWQgdmFsdWUgb2YgYSBzeW1ib2xpYyBsaW5rCiAgICAgIC0gcmVhZGxpbmthdAogICAgZWNzOiAqZWNzLWZpbGUKICAtIGFjdGlvbjogcmVhZC1maWxlCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIHJlYWQgLSByZWFkIGZyb20gYSBmaWxlIGRlc2NyaXB0b3IKICAgICAgLSByZWFkCiAgICBlY3M6ICplY3MtZmlsZQogIC0gYWN0aW9uOiB3cm90ZS10by1maWxlCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIHdyaXRlIC0gd3JpdGUgdG8gYSBmaWxlIGRlc2NyaXB0b3IKICAgICAgLSB3cml0ZQogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgIHR5cGU6IGNoYW5nZQogIC0gYWN0aW9uOiBjaGFuZ2VkLWZpbGUtYXR0cmlidXRlcy1vZgogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBzZXR4YXR0ciAtIHNldCBhbiBleHRlbmRlZCBhdHRyaWJ1dGUgdmFsdWUKICAgICAgLSBzZXR4YXR0cgogICAgICAjIGZzZXR4YXR0ciAtIHNldCBhbiBleHRlbmRlZCBhdHRyaWJ1dGUgdmFsdWUKICAgICAgLSBmc2V0eGF0dHIKICAgICAgIyBsc2V0eGF0dHIgLSBzZXQgYW4gZXh0ZW5kZWQgYXR0cmlidXRlIHZhbHVlCiAgICAgIC0gbHNldHhhdHRyCiAgICAgICMgcmVtb3ZleGF0dHIgLSByZW1vdmUgYW4gZXh0ZW5kZWQgYXR0cmlidXRlCiAgICAgIC0gcmVtb3ZleGF0dHIKICAgICAgIyBmcmVtb3ZleGF0dHIgLSByZW1vdmUgYW4gZXh0ZW5kZWQgYXR0cmlidXRlCiAgICAgIC0gZnJlbW92ZXhhdHRyCiAgICAgICMgbHJlbW92ZXhhdHRyIC0gcmVtb3ZlIGFuIGV4dGVuZGVkIGF0dHJpYnV0ZQogICAgICAtIGxyZW1vdmV4YXR0cgogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgIHR5cGU6IGNoYW5nZQogIC0gYWN0aW9uOiBjaGFuZ2VkLWZpbGUtcGVybWlzc2lvbnMtb2YKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgc3lzY2FsbHM6CiAgICAgICMgY2htb2QgLSBjaGFuZ2UgcGVybWlzc2lvbnMgb2YgYSBmaWxlCiAgICAgIC0gY2htb2QKICAgICAgIyBmY2htb2QgLSBjaGFuZ2UgcGVybWlzc2lvbnMgb2YgYSBmaWxlCiAgICAgIC0gZmNobW9kCiAgICAgICMgZmNobW9kYXQgLSBjaGFuZ2UgcGVybWlzc2lvbnMgb2YgYSBmaWxlCiAgICAgIC0gZmNobW9kYXQKICAgIGVjczoKICAgICAgPDw6ICplY3MtZmlsZQogICAgICB0eXBlOiBjaGFuZ2UKICAtIGFjdGlvbjogY2hhbmdlZC1maWxlLW93bmVyc2hpcC1vZgogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBjaG93biAtIGNoYW5nZSBvd25lcnNoaXAgb2YgYSBmaWxlCiAgICAgIC0gY2hvd24KICAgICAgIyBmY2hvd24gLSBjaGFuZ2Ugb3duZXJzaGlwIG9mIGEgZmlsZQogICAgICAtIGZjaG93bgogICAgICAjIGZjaG93bmF0IC0gY2hhbmdlIG93bmVyc2hpcCBvZiBhIGZpbGUKICAgICAgLSBmY2hvd25hdAogICAgICAjIGxjaG93biAtIGNoYW5nZSBvd25lcnNoaXAgb2YgYSBmaWxlCiAgICAgIC0gbGNob3duCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgdHlwZTogY2hhbmdlCiAgLSBhY3Rpb246IGxvYWRlZC1rZXJuZWwtbW9kdWxlCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgICAgcHJpbWFyeTogbmFtZQogICAgcmVjb3JkX3R5cGVzOgogICAgICAtIEtFUk5fTU9EVUxFCiAgICBzeXNjYWxsczoKICAgICAgIyBmaW5pdF9tb2R1bGUgLSBsb2FkIGEga2VybmVsIG1vZHVsZQogICAgICAtIGZpbml0X21vZHVsZQogICAgICAjIGluaXRfbW9kdWxlIC0gbG9hZCBhIGtlcm5lbCBtb2R1bGUKICAgICAgLSBpbml0X21vZHVsZQogICAgZWNzOgogICAgICA8PDogKmVjcy1kcml2ZXIKICAgICAgdHlwZTogc3RhcnQKICAtIGFjdGlvbjogdW5sb2FkZWQta2VybmVsLW1vZHVsZQogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBkZWxldGVfbW9kdWxlIC0gdW5sb2FkIGEga2VybmVsIG1vZHVsZQogICAgICAtIGRlbGV0ZV9tb2R1bGUKICAgIGVjczoKICAgICAgPDw6ICplY3MtZHJpdmVyCiAgICAgIHR5cGU6IGVuZAogIC0gYWN0aW9uOiBjcmVhdGVkLWRpcmVjdG9yeQogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICAgIHBhdGhfaW5kZXg6IDEKICAgIHN5c2NhbGxzOgogICAgICAjIG1rZGlyIC0gY3JlYXRlIGEgZGlyZWN0b3J5CiAgICAgIC0gbWtkaXIKICAgICAgIyBta2RpcmF0IC0gY3JlYXRlIGEgZGlyZWN0b3J5CiAgICAgIC0gbWtkaXJhdAogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgIHR5cGU6IGNyZWF0aW9uCiAgLSBhY3Rpb246IG1vdW50ZWQKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZXN5c3RlbQogICAgICBwYXRoX2luZGV4OiAxCiAgICBzeXNjYWxsczoKICAgICAgIyBtb3VudCAtIG1vdW50IGZpbGVzeXN0ZW0KICAgICAgLSBtb3VudAogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgICMgc2luY2UgYSBuZXcgbW91bnQgYXBwZWFycyBvbiB0aGUgc3lzdGVtCiAgICAgICMgd2UgY29uc2lkZXIgdGhpcyBhIGhpZ2gtbGV2ZWwgImNyZWF0aW9uIiBldmVudAogICAgICB0eXBlOiBjcmVhdGlvbgogIC0gYWN0aW9uOiByZW5hbWVkCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgICAgcGF0aF9pbmRleDogMgogICAgc3lzY2FsbHM6CiAgICAgICMgcmVuYW1lIC0gY2hhbmdlIHRoZSBuYW1lIG9yIGxvY2F0aW9uIG9mIGEgZmlsZQogICAgICAtIHJlbmFtZQogICAgICAjIHJlbmFtZWF0IC0gY2hhbmdlIHRoZSBuYW1lIG9yIGxvY2F0aW9uIG9mIGEgZmlsZQogICAgICAtIHJlbmFtZWF0CiAgICAgICMgcmVuYW1lYXQyIC0gY2hhbmdlIHRoZSBuYW1lIG9yIGxvY2F0aW9uIG9mIGEgZmlsZQogICAgICAtIHJlbmFtZWF0MgogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgIHR5cGU6IGNoYW5nZQogIC0gYWN0aW9uOiBjaGVja2VkLW1ldGFkYXRhLW9mCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIGFjY2VzcyAtIGNoZWNrIHVzZXIncyBwZXJtaXNzaW9ucyBmb3IgYSBmaWxlCiAgICAgIC0gYWNjZXNzCiAgICAgICMgZmFjY2Vzc2F0IC0gY2hlY2sgdXNlcidzIHBlcm1pc3Npb25zIGZvciBhIGZpbGUKICAgICAgLSBmYWNjZXNzYXQKICAgICAgIyBmc3RhdGF0IC0gZ2V0IGZpbGUgc3RhdHVzCiAgICAgIC0gZnN0YXRhdAogICAgICAjIG5ld2ZzdGF0YXQgLSBnZXQgZmlsZSBzdGF0dXMKICAgICAgLSBuZXdmc3RhdGF0CiAgICAgICMgc3RhdCAtIGdldCBmaWxlIHN0YXR1cwogICAgICAtIHN0YXQKICAgICAgIyBzdGF0NjQgLSBnZXQgZmlsZSBzdGF0dXMKICAgICAgLSBzdGF0NjQKICAgICAgIyBmc3RhdCAtIGdldCBmaWxlIHN0YXR1cwogICAgICAtIGZzdGF0CiAgICAgICMgbHN0YXQgLSBnZXQgZmlsZSBzdGF0dXMKICAgICAgLSBsc3RhdAogICAgICAjIGdldHhhdHRyIC0gcmV0cmlldmUgYW4gZXh0ZW5kZWQgYXR0cmlidXRlIHZhbHVlCiAgICAgIC0gZ2V0eGF0dHIKICAgICAgIyBsZ2V0eGF0dHIgLSByZXRyaWV2ZSBhbiBleHRlbmRlZCBhdHRyaWJ1dGUgdmFsdWUKICAgICAgLSBsZ2V0eGF0dHIKICAgICAgIyBmZ2V0eGF0dHIgLSByZXRyaWV2ZSBhbiBleHRlbmRlZCBhdHRyaWJ1dGUgdmFsdWUKICAgICAgLSBmZ2V0eGF0dHIKICAgIGVjczogKmVjcy1maWxlCiAgLSBhY3Rpb246IGNoZWNrZWQtZmlsZXN5c3RlbS1tZXRhZGF0YS1vZgogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlc3lzdGVtCiAgICBzeXNjYWxsczoKICAgICAgIyBzdGF0ZnMgLSBnZXQgZmlsZXN5c3RlbSBzdGF0aXN0aWNzCiAgICAgIC0gc3RhdGZzCiAgICAgICMgZnN0YXRmcyAtIGdldCBmaWxlc3lzdGVtIHN0YXRpc3RpY3MKICAgICAgLSBmc3RhdGZzCiAgICBlY3M6ICplY3MtZmlsZQogIC0gYWN0aW9uOiBzeW1saW5rZWQKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgc3lzY2FsbHM6CiAgICAgICMgc3ltbGluayAtIG1ha2UgYSBuZXcgbmFtZSBmb3IgYSBmaWxlCiAgICAgIC0gc3ltbGluawogICAgICAjIHN5bWxpbmthdCAtIG1ha2UgYSBuZXcgbmFtZSBmb3IgYSBmaWxlCiAgICAgIC0gc3ltbGlua2F0CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgIyAiY3JlYXRpb24iIHNpbmNlIHdlJ3JlIGNyZWF0aW5nIGEgbmV3IGZpbGUgc3lzdGVtCiAgICAgICMgZW50cnkgZm9yIHRoZSBzeW1saW5rCiAgICAgIHR5cGU6IGNyZWF0aW9uCiAgLSBhY3Rpb246IHVubW91bnRlZAogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlc3lzdGVtCiAgICBzeXNjYWxsczoKICAgICAgIyB1bW91bnQgLSB1bm1vdW50IGZpbGVzeXN0ZW0KICAgICAgLSB1bW91bnQKICAgICAgIyB1bW91bnQyIC0gdW5tb3VudCBmaWxlc3lzdGVtCiAgICAgIC0gdW1vdW50MgogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgICMgImRlbGV0aW9uIiB0byBtaXJyb3IgdGhlICJjcmVhdGlvbiIgb2YgdGhlIG1vdW50CiAgICAgIHR5cGU6IGRlbGV0aW9uCiAgLSBhY3Rpb246IGRlbGV0ZWQKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgc3lzY2FsbHM6CiAgICAgICMgcm1kaXIgLSBkZWxldGUgYSBkaXJlY3RvcnkKICAgICAgLSBybWRpcgogICAgICAjIHVubGluayAtIGRlbGV0ZSBhIG5hbWUgYW5kIHBvc3NpYmx5IHRoZSBmaWxlIGl0IHJlZmVycyB0bwogICAgICAtIHVubGluawogICAgICAjIHVubGlua2F0IC0gZGVsZXRlIGEgbmFtZSBhbmQgcG9zc2libHkgdGhlIGZpbGUgaXQgcmVmZXJzIHRvCiAgICAgIC0gdW5saW5rYXQKICAgIGVjczoKICAgICAgPDw6ICplY3MtZmlsZQogICAgICB0eXBlOiBkZWxldGlvbgogIC0gYWN0aW9uOiBjaGFuZ2VkLXRpbWVzdGFtcC1vZgogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyB1dGltZSAtIGNoYW5nZSBmaWxlIGxhc3QgYWNjZXNzIGFuZCBtb2RpZmljYXRpb24gdGltZXMKICAgICAgLSB1dGltZQogICAgICAjIHV0aW1lcyAtIGNoYW5nZSBmaWxlIGxhc3QgYWNjZXNzIGFuZCBtb2RpZmljYXRpb24gdGltZXMKICAgICAgLSB1dGltZXMKICAgICAgIyBmdXRpbWVzYXQgLSBjaGFuZ2UgdGltZXN0YW1wcyBvZiBhIGZpbGUgcmVsYXRpdmUgdG8gYSBcIGRpcmVjdG9yeSBmaWxlIGRlc2NyaXB0b3IKICAgICAgLSBmdXRpbWVzYXQKICAgICAgIyBmdXRpbWVucyAtIGNoYW5nZSBmaWxlIHRpbWVzdGFtcHMgd2l0aCBuYW5vc2Vjb25kIHByZWNpc2lvbgogICAgICAtIGZ1dGltZW5zCiAgICAgICMgdXRpbWVuc2F0IC0gY2hhbmdlIGZpbGUgdGltZXN0YW1wcyB3aXRoIG5hbm9zZWNvbmQgcHJlY2lzaW9uCiAgICAgIC0gdXRpbWVuc2F0CiAgICBlY3M6ICplY3MtZmlsZQogIC0gYWN0aW9uOiBleGVjdXRlZAogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBleGVjdmUgLSBleGVjdXRlIHByb2dyYW0KICAgICAgLSBleGVjdmUKICAgICAgIyBleGVjdmVhdCAtIGV4ZWN1dGUgcHJvZ3JhbSByZWxhdGl2ZSB0byBhIGRpcmVjdG9yeSBmaWxlIGRlc2NyaXB0b3IKICAgICAgLSBleGVjdmVhdAogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IHN0YXJ0CiAgLSBhY3Rpb246IGxpc3Rlbi1mb3ItY29ubmVjdGlvbnMKICAgIG9iamVjdDoKICAgICAgd2hhdDogc29ja2V0CiAgICBzeXNjYWxsczoKICAgICAgIyBsaXN0ZW4tIGxpc3RlbiBmb3IgY29ubmVjdGlvbnMgb24gYSBzb2NrZXQKICAgICAgLSBsaXN0ZW4KICAgIGVjczoKICAgICAgPDw6ICplY3MtbmV0d29yawogICAgICB0eXBlOiBzdGFydAogIC0gYWN0aW9uOiBhY2NlcHRlZC1jb25uZWN0aW9uLWZyb20KICAgIG9iamVjdDoKICAgICAgd2hhdDogc29ja2V0CiAgICBzeXNjYWxsczoKICAgICAgIyBhY2NlcHQgLSBhY2NlcHQgYSBjb25uZWN0aW9uIG9uIGEgc29ja2V0CiAgICAgIC0gYWNjZXB0CiAgICAgICMgYWNjZXB0NCAtIGFjY2VwdCBhIGNvbm5lY3Rpb24gb24gYSBzb2NrZXQKICAgICAgLSBhY2NlcHQ0CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLW5ldHdvcmsKICAgICAgdHlwZToKICAgICAgICAtIGNvbm5lY3Rpb24KICAgICAgICAtIHN0YXJ0CiAgLSBhY3Rpb246IGJvdW5kLXNvY2tldAogICAgb2JqZWN0OgogICAgICB3aGF0OiBzb2NrZXQKICAgIHN5c2NhbGxzOgogICAgICAjIGJpbmQgLWJpbmQgYSBuYW1lIHRvIGEgc29ja2V0CiAgICAgIC0gYmluZAogICAgZWNzOgogICAgICA8PDogKmVjcy1uZXR3b3JrCiAgICAgIHR5cGU6IHN0YXJ0CiAgLSBhY3Rpb246IGNvbm5lY3RlZC10bwogICAgb2JqZWN0OgogICAgICB3aGF0OiBzb2NrZXQKICAgIHN5c2NhbGxzOgogICAgICAtIGNvbm5lY3QKICAgIGVjczoKICAgICAgPDw6ICplY3MtbmV0d29yawogICAgICB0eXBlOgogICAgICAgIC0gY29ubmVjdGlvbgogICAgICAgIC0gc3RhcnQKICAtIGFjdGlvbjogcmVjZWl2ZWQtZnJvbQogICAgb2JqZWN0OgogICAgICB3aGF0OiBzb2NrZXQKICAgIHN5c2NhbGxzOgogICAgICAjIHJlY3YgLSByZWNlaXZlIGEgbWVzc2FnZSBmcm9tIGEgc29ja2V0CiAgICAgIC0gcmVjdgogICAgICAjIHJlY3Zmcm9tIC0gcmVjZWl2ZSBhIG1lc3NhZ2UgZnJvbSBhIHNvY2tldAogICAgICAtIHJlY3Zmcm9tCiAgICAgICMgcmVjdm1zZyAtIHJlY2VpdmUgYSBtZXNzYWdlIGZyb20gYSBzb2NrZXQKICAgICAgLSByZWN2bXNnCiAgICAgICMgcmVjdm1tc2cgLSByZWNlaXZlIG11bHRpcGxlIG1lc3NhZ2VzIG9uIGEgc29ja2V0CiAgICAgIC0gcmVjdm1tc2cKICAgIGVjczoKICAgICAgPDw6ICplY3MtbmV0d29yawogIC0gYWN0aW9uOiBzZW50LXRvCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNvY2tldAogICAgc3lzY2FsbHM6CiAgICAgICMgc2VuZCAtIHNlbmQgYSBtZXNzYWdlIG9uIGEgc29ja2V0CiAgICAgIC0gc2VuZAogICAgICAjIHNlbmR0byAtIHNlbmQgYSBtZXNzYWdlIG9uIGEgc29ja2V0CiAgICAgIC0gc2VuZHRvCiAgICAgICMgc2VuZG1zZyAtIHNlbmQgYSBtZXNzYWdlIG9uIGEgc29ja2V0CiAgICAgIC0gc2VuZG1zZwogICAgICAjIHNlbmRtbXNnIC0gc2VuZCBtdWx0aXBsZSBtZXNzYWdlcyBvbiBhIHNvY2tldAogICAgICAtIHNlbmRtbXNnCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLW5ldHdvcmsKICAtIGFjdGlvbjoga2lsbGVkLXBpZAogICAgb2JqZWN0OgogICAgICB3aGF0OiBwcm9jZXNzCiAgICBzeXNjYWxsczoKICAgICAgIyBraWxsIC0gc2VuZCBzaWduYWwgdG8gYSBwcm9jZXNzCiAgICAgIC0ga2lsbAogICAgICAjIHRraWxsIC0gc2VuZCBhIHNpZ25hbCB0byBhIHRocmVhZAogICAgICAtIHRraWxsCiAgICAgICMgdGdraWxsIC0gc2VuZCBhIHNpZ25hbCB0byBhIHRocmVhZAogICAgICAtIHRna2lsbAogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IGVuZAogIC0gYWN0aW9uOiBjaGFuZ2VkLWlkZW50aXR5LW9mCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHByb2Nlc3MKICAgIGhvdzogc3lzY2FsbAogICAgc3lzY2FsbHM6CiAgICAgICMgc2V0dWlkIC0gc2V0IHVzZXIgaWRlbnRpdHkKICAgICAgLSBzZXR1aWQKICAgICAgIyBzZXRldWlkIC0gc2V0IGVmZmVjdGl2ZSB1c2VyIG9yIGdyb3VwIElECiAgICAgIC0gc2V0ZXVpZAogICAgICAjIHNldGZzdWlkIC0gc2V0IHVzZXIgaWRlbnRpdHkgdXNlZCBmb3IgZmlsZXN5c3RlbSBjaGVja3MKICAgICAgLSBzZXRmc3VpZAogICAgICAjIHNldHJldWlkIC0gc2V0IHJlYWwgYW5kL29yIGVmZmVjdGl2ZSB1c2VyIG9yIGdyb3VwIElECiAgICAgIC0gc2V0cmV1aWQKICAgICAgIyBzZXRnaWQgLSBzZXQgZ3JvdXAgaWRlbnRpdHkKICAgICAgLSBzZXRnaWQKICAgICAgIyBzZXRlZ2lkIC0gc2V0IGVmZmVjdGl2ZSB1c2VyIG9yIGdyb3VwIElECiAgICAgIC0gc2V0ZWdpZAogICAgICAjIHNldGZzZ2lkIC0gc2V0IGdyb3VwIGlkZW50aXR5IHVzZWQgZm9yIGZpbGVzeXN0ZW0gY2hlY2tzCiAgICAgIC0gc2V0ZnNnaWQKICAgICAgIyBzZXRyZWdpZCAtIHNldCByZWFsIGFuZC9vciBlZmZlY3RpdmUgdXNlciBvciBncm91cCBJRAogICAgICAtIHNldHJlZ2lkCiAgICAgICMgc2V0cmVzdWlkIC0gc2V0IHJlYWwsIGVmZmVjdGl2ZSBhbmQgc2F2ZWQgdXNlciBvciBncm91cCBJRAogICAgICAtIHNldHJlc3VpZAogICAgICAjIHNldHJlc2dpZCAtIHNldCByZWFsLCBlZmZlY3RpdmUgYW5kIHNhdmVkIHVzZXIgb3IgZ3JvdXAgSUQKICAgICAgLSBzZXRyZXNnaWQKICAgIGVjczoKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBjaGFuZ2UKICAtIGFjdGlvbjogY2hhbmdlZC1zeXN0ZW0tdGltZQogICAgb2JqZWN0OgogICAgICB3aGF0OiBzeXN0ZW0KICAgIHN5c2NhbGxzOgogICAgICAjIHNldHRpbWVvZmRheSAtIGdldCAvIHNldCB0aW1lCiAgICAgIC0gc2V0dGltZW9mZGF5CiAgICAgICMgY2xvY2tfc2V0dGltZSAtIGNsb2NrIGFuZCB0aW1lIGZ1bmN0aW9ucwogICAgICAtIGNsb2NrX3NldHRpbWUKICAgICAgIyBzdGltZSAtIHNldCB0aW1lCiAgICAgIC0gc3RpbWUKICAgICAgIyBhZGp0aW1leCAtIHR1bmUga2VybmVsIGNsb2NrCiAgICAgIC0gYWRqdGltZXgKICAgIGVjczoKICAgICAgPDw6ICplY3MtaG9zdAogICAgICB0eXBlOiBjaGFuZ2UKICAtIGFjdGlvbjogbWFrZS1kZXZpY2UKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgc3lzY2FsbHM6CiAgICAgICMgbWtub2QgLSBjcmVhdGUgYSBzcGVjaWFsIG9yIG9yZGluYXJ5IGZpbGUKICAgICAgLSBta25vZAogICAgICAjIG1rbm9kYXQgLSBjcmVhdGUgYSBzcGVjaWFsIG9yIG9yZGluYXJ5IGZpbGUKICAgICAgLSBta25vZGF0CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgdHlwZTogY3JlYXRpb24KICAtIGFjdGlvbjogY2hhbmdlZC1zeXN0ZW0tbmFtZQogICAgb2JqZWN0OgogICAgICB3aGF0OiBzeXN0ZW0KICAgIHN5c2NhbGxzOgogICAgICAjIHNldGhvc3RuYW1lIC0gZ2V0L3NldCBob3N0bmFtZQogICAgICAtIHNldGhvc3RuYW1lCiAgICAgICMgc2V0ZG9tYWlubmFtZSAtIGdldC9zZXQgTklTIGRvbWFpbiBuYW1lCiAgICAgIC0gc2V0ZG9tYWlubmFtZQogICAgZWNzOgogICAgICA8PDogKmVjcy1ob3N0CiAgICAgIHR5cGU6IGNoYW5nZQogIC0gYWN0aW9uOiBhbGxvY2F0ZWQtbWVtb3J5CiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IG1lbW9yeQogICAgc3lzY2FsbHM6CiAgICAgICMgbW1hcCAtIG1hcCBvciB1bm1hcCBmaWxlcyBvciBkZXZpY2VzIGludG8gbWVtb3J5CiAgICAgIC0gbW1hcAogICAgICAjIG1tYXAyIC0gbWFwIGZpbGVzIG9yIGRldmljZXMgaW50byBtZW1vcnkKICAgICAgLSBtbWFwMgogICAgICAjIGJyayAtIGNoYW5nZSBkYXRhIHNlZ21lbnQgc2l6ZQogICAgICAtIGJyawogICAgZWNzOiAqZWNzLXByb2Nlc3MKICAtIGFjdGlvbjogYWRqdXN0ZWQtc2NoZWR1bGluZy1wb2xpY3ktb2YKICAgIG9iamVjdDoKICAgICAgd2hhdDogcHJvY2VzcwogICAgaG93OiBzeXNjYWxsCiAgICBzeXNjYWxsczoKICAgICAgIyBzY2hlZF9zZXRwYXJhbSAtIHNldCBhbmQgZ2V0IHNjaGVkdWxpbmcgcGFyYW1ldGVycwogICAgICAtIHNjaGVkX3NldHBhcmFtCiAgICAgICMgc2NoZWRfc2V0c2NoZWR1bGVyIC0gc2V0IGFuZCBnZXQgc2NoZWR1bGluZyBwb2xpY3kvcGFyYW1ldGVycwogICAgICAtIHNjaGVkX3NldHNjaGVkdWxlcgogICAgICAjIHNjaGVkX3NldGF0dHIgLSBzZXQgYW5kIGdldCBzY2hlZHVsaW5nIHBvbGljeSBhbmQgYXR0cmlidXRlcwogICAgICAtIHNjaGVkX3NldGF0dHIKICAgIGVjczoKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBjaGFuZ2UKCiAgIyBDdXJyZW50bHkgdW5oYW5kbGVkCiAgIyB0aGlzIGxpc3QgY29tZXMgZnJvbSBwYXJzaW5nIGxpbnV4IG1hbiBwYWdlcyBhdCBodHRwczovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vZG9jcy9tYW4tcGFnZXMvbWFuLXBhZ2VzLmdpdAoKICAjIHNpZ2FjdGlvbiAtIGV4YW1pbmUgYW5kIGNoYW5nZSBhIHNpZ25hbCBhY3Rpb24KICAjIHJ0X3NpZ2FjdGlvbiAtIGV4YW1pbmUgYW5kIGNoYW5nZSBhIHNpZ25hbCBhY3Rpb24KICAjIHByZWFkIC0gcmVhZCBmcm9tIG9yIHdyaXRlIHRvIGEgZmlsZSBkZXNjcmlwdG9yIGF0IGEgZ2l2ZW4gb2Zmc2V0CiAgIyBwd3JpdGUgLSByZWFkIGZyb20gb3Igd3JpdGUgdG8gYSBmaWxlIGRlc2NyaXB0b3IgYXQgYSBnaXZlbiBvZmZzZXQKICAjIHMzOTBfZ3VhcmRlZF9zdG9yYWdlIC0gb3BlcmF0aW9ucyB3aXRoIHovQXJjaGl0ZWN0dXJlIGd1YXJkZWQgc3RvcmFnZSBmYWNpbGl0eQogICMgc2NoZWRfZ2V0YXR0ciAtIHNldCBhbmQgZ2V0IHNjaGVkdWxpbmcgcG9saWN5IGFuZCBhdHRyaWJ1dGVzCiAgIyBnZXRydXNhZ2UgLSBnZXQgcmVzb3VyY2UgdXNhZ2UKICAjIGZsb2NrIC0gYXBwbHkgb3IgcmVtb3ZlIGFuIGFkdmlzb3J5IGxvY2sgb24gYW4gb3BlbiBmaWxlCiAgIyBwaWRmZF9nZXRmZCAtIG9idGFpbiBhIGR1cGxpY2F0ZSBvZiBhbm90aGVyIHByb2Nlc3MncyBmaWxlIGRlc2NyaXB0b3IKICAjIGNsb2NrX25hbm9zbGVlcCAtIGhpZ2gtcmVzb2x1dGlvbiBzbGVlcCB3aXRoIHNwZWNpZmlhYmxlIGNsb2NrCiAgIyBnZXRwYWdlc2l6ZSAtIGdldCBtZW1vcnkgcGFnZSBzaXplCiAgIyBwaWRmZF9vcGVuIC0gb2J0YWluIGEgZmlsZSBkZXNjcmlwdG9yIHRoYXQgcmVmZXJzIHRvIGEgcHJvY2VzcwogICMgc3BsaWNlIC0gc3BsaWNlIGRhdGEgdG8vZnJvbSBhIHBpcGUKICAjIGdldHJlc3VpZCAtIGdldCByZWFsLCBlZmZlY3RpdmUgYW5kIHNhdmVkIHVzZXIvZ3JvdXAgSURzCiAgIyBnZXRyZXNnaWQgLSBnZXQgcmVhbCwgZWZmZWN0aXZlIGFuZCBzYXZlZCB1c2VyL2dyb3VwIElEcwogICMgcmVtYXBfZmlsZV9wYWdlcyAtIGNyZWF0ZSBhIG5vbmxpbmVhciBmaWxlIG1hcHBpbmcKICAjIGlvX2NhbmNlbCAtIGNhbmNlbCBhbiBvdXRzdGFuZGluZyBhc3luY2hyb25vdXMgSS9PIG9wZXJhdGlvbgogICMgcHJjdGwgLSBvcGVyYXRpb25zIG9uIGEgcHJvY2VzcyBvciB0aHJlYWQKICAjIGNsb2NrX2dldHJlcyAtIGNsb2NrIGFuZCB0aW1lIGZ1bmN0aW9ucwogICMgY2xvY2tfZ2V0dGltZSAtIGNsb2NrIGFuZCB0aW1lIGZ1bmN0aW9ucwogICMgZ2V0Z3JvdXBzIC0gZ2V0L3NldCBsaXN0IG9mIHN1cHBsZW1lbnRhcnkgZ3JvdXAgSURzCiAgIyBzZXRncm91cHMgLSBnZXQvc2V0IGxpc3Qgb2Ygc3VwcGxlbWVudGFyeSBncm91cCBJRHMKICAjIHZtc3BsaWNlIC0gc3BsaWNlIHVzZXIgcGFnZXMgdG8vZnJvbSBhIHBpcGUKICAjIGVwb2xsX2NyZWF0ZSAtIG9wZW4gYW4gZXBvbGwgZmlsZSBkZXNjcmlwdG9yCiAgIyBlcG9sbF9jcmVhdGUxIC0gb3BlbiBhbiBlcG9sbCBmaWxlIGRlc2NyaXB0b3IKICAjIHBvc2l4X2ZhZHZpc2UgLSBwcmVkZWNsYXJlIGFuIGFjY2VzcyBwYXR0ZXJuIGZvciBmaWxlIGRhdGEKICAjIHNpZ3dhaXRpbmZvIC0gc3luY2hyb25vdXNseSB3YWl0IGZvciBxdWV1ZWQgc2lnbmFscwogICMgc2lndGltZWR3YWl0IC0gc3luY2hyb25vdXNseSB3YWl0IGZvciBxdWV1ZWQgc2lnbmFscwogICMgcnRfc2lndGltZWR3YWl0IC0gc3luY2hyb25vdXNseSB3YWl0IGZvciBxdWV1ZWQgc2lnbmFscwogICMgc2lncmV0dXJuIC0gcmV0dXJuIGZyb20gc2lnbmFsIGhhbmRsZXIgYW5kIGNsZWFudXAgc3RhY2sgZnJhbWUKICAjIHJ0X3NpZ3JldHVybiAtIHJldHVybiBmcm9tIHNpZ25hbCBoYW5kbGVyIGFuZCBjbGVhbnVwIHN0YWNrIGZyYW1lCiAgIyBnZXRyYW5kb20gLSBvYnRhaW4gYSBzZXJpZXMgb2YgcmFuZG9tIGJ5dGVzCiAgIyBrZXljdGwgLSBtYW5pcHVsYXRlIHRoZSBrZXJuZWwncyBrZXkgbWFuYWdlbWVudCBmYWNpbGl0eQogICMgc2NoZWRfZ2V0c2NoZWR1bGVyIC0gc2V0IGFuZCBnZXQgc2NoZWR1bGluZyBwb2xpY3kvcGFyYW1ldGVycwogICMgbWJpbmQgLSBzZXQgbWVtb3J5IHBvbGljeSBmb3IgYSBtZW1vcnkgcmFuZ2UKICAjIGdldHByaW9yaXR5IC0gZ2V0L3NldCBwcm9ncmFtIHNjaGVkdWxpbmcgcHJpb3JpdHkKICAjIHNldHByaW9yaXR5IC0gZ2V0L3NldCBwcm9ncmFtIHNjaGVkdWxpbmcgcHJpb3JpdHkKICAjIGlub3RpZnlfaW5pdCAtIGluaXRpYWxpemUgYW4gaW5vdGlmeSBpbnN0YW5jZQogICMgaW5vdGlmeV9pbml0MSAtIGluaXRpYWxpemUgYW4gaW5vdGlmeSBpbnN0YW5jZQogICMgc2VtY3RsIC0gU3lzdGVtIFYgc2VtYXBob3JlIGNvbnRyb2wgb3BlcmF0aW9ucwogICMgZ2V0aG9zdG5hbWUgLSBnZXQvc2V0IGhvc3RuYW1lCiAgIyBwdHJhY2UgLSBwcm9jZXNzIHRyYWNlCiAgIyBzeXNjdGwgLSByZWFkL3dyaXRlIHN5c3RlbSBwYXJhbWV0ZXJzCiAgIyBnZXRwZWVybmFtZSAtIGdldCBuYW1lIG9mIGNvbm5lY3RlZCBwZWVyIHNvY2tldAogICMgZm9yayAtIGNyZWF0ZSBhIGNoaWxkIHByb2Nlc3MKICAjIHF1ZXJ5X21vZHVsZSAtIHF1ZXJ5IHRoZSBrZXJuZWwgZm9yIHZhcmlvdXMgYml0cyBwZXJ0YWluaW5nIHRvIG1vZHVsZXMKICAjIGlvY3RsX2xpc3QgLSBsaXN0IG9mIGlvY3RsIGNhbGxzIGluIExpbnV4L2kzODYga2VybmVsCiAgIyBtc2dnZXQgLSBnZXQgYSBTeXN0ZW0gViBtZXNzYWdlIHF1ZXVlIGlkZW50aWZpZXIKICAjIHNwdV9jcmVhdGUgLSBjcmVhdGUgYSBuZXcgc3B1IGNvbnRleHQKICAjIHN1YnBhZ2VfcHJvdCAtIGRlZmluZSBhIHN1YnBhZ2UgcHJvdGVjdGlvbiBmb3IgYW4gYWRkcmVzcyByYW5nZQogICMgcXVvdGFjdGwgLSBtYW5pcHVsYXRlIGRpc2sgcXVvdGFzCiAgIyBuZnNzZXJ2Y3RsIC0gc3lzY2FsbCBpbnRlcmZhY2UgdG8ga2VybmVsIG5mcyBkYWVtb24KICAjIG9wZW5hdDIgLSBvcGVuIGFuZCBwb3NzaWJseSBjcmVhdGUgYSBmaWxlIChleHRlbmRlZCkKICAjIGdldHJsaW1pdCAtIGdldC9zZXQgcmVzb3VyY2UgbGltaXRzCiAgIyBzZXRybGltaXQgLSBnZXQvc2V0IHJlc291cmNlIGxpbWl0cwogICMgcHJsaW1pdCAtIGdldC9zZXQgcmVzb3VyY2UgbGltaXRzCiAgIyB0ZWUgLSBkdXBsaWNhdGluZyBwaXBlIGNvbnRlbnQKICAjIHNobWdldCAtIGFsbG9jYXRlcyBhIFN5c3RlbSBWIHNoYXJlZCBtZW1vcnkgc2VnbWVudAogICMgY3JlYXRlX21vZHVsZSAtIGNyZWF0ZSBhIGxvYWRhYmxlIG1vZHVsZSBlbnRyeQogICMgZ2V0dGltZW9mZGF5IC0gZ2V0IC8gc2V0IHRpbWUKICAjIHRpbWVyX2NyZWF0ZSAtIGNyZWF0ZSBhIFBPU0lYIHBlci1wcm9jZXNzIHRpbWVyCiAgIyBmYW5vdGlmeV9tYXJrIC0gYWRkLCByZW1vdmUsIG9yIG1vZGlmeSBhbiBmYW5vdGlmeSBtYXJrIG9uIGEgZmlsZXN5c3RlbSBvYmplY3QKICAjIHBpcGUgLSBjcmVhdGUgcGlwZQogICMgcGlwZTIgLSBjcmVhdGUgcGlwZQogICMgaW50cm8gLSBpbnRyb2R1Y3Rpb24gdG8gc3lzdGVtIGNhbGxzCiAgIyBsb29rdXBfZGNvb2tpZSAtIHJldHVybiBhIGRpcmVjdG9yeSBlbnRyeSdzIHBhdGgKICAjIHN5c2ZzIC0gZ2V0IGZpbGVzeXN0ZW0gdHlwZSBpbmZvcm1hdGlvbgogICMgczM5MF9ydW50aW1lX2luc3RyIC0gZW5hYmxlL2Rpc2FibGUgczM5MCBDUFUgcnVuLXRpbWUgaW5zdHJ1bWVudGF0aW9uCiAgIyBzZXRucyAtIHJlYXNzb2NpYXRlIHRocmVhZCB3aXRoIGEgbmFtZXNwYWNlCiAgIyBzZXRfbWVtcG9saWN5IC0gc2V0IGRlZmF1bHQgTlVNQSBtZW1vcnkgcG9saWN5IGZvciBhIHRocmVhZCBhbmQgaXRzIGNoaWxkcmVuCiAgIyBuaWNlIC0gY2hhbmdlIHByb2Nlc3MgcHJpb3JpdHkKICAjIGlvX3NldHVwIC0gY3JlYXRlIGFuIGFzeW5jaHJvbm91cyBJL08gY29udGV4dAogICMgbWluY29yZSAtIGRldGVybWluZSB3aGV0aGVyIHBhZ2VzIGFyZSByZXNpZGVudCBpbiBtZW1vcnkKICAjIGlvY3RsX2NvbnNvbGUgLSBpb2N0bHMgZm9yIGNvbnNvbGUgdGVybWluYWwgYW5kIHZpcnR1YWwgY29uc29sZXMKICAjIHBvbGwgLSB3YWl0IGZvciBzb21lIGV2ZW50IG9uIGEgZmlsZSBkZXNjcmlwdG9yCiAgIyBwcG9sbCAtIHdhaXQgZm9yIHNvbWUgZXZlbnQgb24gYSBmaWxlIGRlc2NyaXB0b3IKICAjIGNhcGdldCAtIHNldC9nZXQgY2FwYWJpbGl0aWVzIG9mIHRocmVhZChzKQogICMgY2Fwc2V0IC0gc2V0L2dldCBjYXBhYmlsaXRpZXMgb2YgdGhyZWFkKHMpCiAgIyBpb2N0bF90dHkgLSBpb2N0bHMgZm9yIHRlcm1pbmFscyBhbmQgc2VyaWFsIGxpbmVzCiAgIyBpb3BsIC0gY2hhbmdlIEkvTyBwcml2aWxlZ2UgbGV2ZWwKICAjIGlvX2dldGV2ZW50cyAtIHJlYWQgYXN5bmNocm9ub3VzIEkvTyBldmVudHMgZnJvbSB0aGUgY29tcGxldGlvbiBxdWV1ZQogICMgcHJvY2Vzc192bV9yZWFkdiAtIHRyYW5zZmVyIGRhdGEgYmV0d2VlbiBwcm9jZXNzIGFkZHJlc3Mgc3BhY2VzCiAgIyBwcm9jZXNzX3ZtX3dyaXRldiAtIHRyYW5zZmVyIGRhdGEgYmV0d2VlbiBwcm9jZXNzIGFkZHJlc3Mgc3BhY2VzCiAgIyBwY2ljb25maWdfcmVhZCAtIHBjaSBkZXZpY2UgaW5mb3JtYXRpb24gaGFuZGxpbmcKICAjIHBjaWNvbmZpZ193cml0ZSAtIHBjaSBkZXZpY2UgaW5mb3JtYXRpb24gaGFuZGxpbmcKICAjIHBjaWNvbmZpZ19pb2Jhc2UgLSBwY2kgZGV2aWNlIGluZm9ybWF0aW9uIGhhbmRsaW5nCiAgIyBzYnJrIC0gY2hhbmdlIGRhdGEgc2VnbWVudCBzaXplCiAgIyBzZXRfdGlkX2FkZHJlc3MgLSBzZXQgcG9pbnRlciB0byB0aHJlYWQgSUQKICAjIHBrZXlfYWxsb2MgLSBhbGxvY2F0ZSBvciBmcmVlIGEgcHJvdGVjdGlvbiBrZXkKICAjIHBrZXlfZnJlZSAtIGFsbG9jYXRlIG9yIGZyZWUgYSBwcm90ZWN0aW9uIGtleQogICMgc2VsZWN0IC0gc3luY2hyb25vdXMgSS9PIG11bHRpcGxleGluZwogICMgcHNlbGVjdCAtIHN5bmNocm9ub3VzIEkvTyBtdWx0aXBsZXhpbmcKICAjIGtleGVjX2xvYWQgLSBsb2FkIGEgbmV3IGtlcm5lbCBmb3IgbGF0ZXIgZXhlY3V0aW9uCiAgIyBrZXhlY19maWxlX2xvYWQgLSBsb2FkIGEgbmV3IGtlcm5lbCBmb3IgbGF0ZXIgZXhlY3V0aW9uCiAgIyBwZXJzb25hbGl0eSAtIHNldCB0aGUgcHJvY2VzcyBleGVjdXRpb24gZG9tYWluCiAgIyBpb2N0bF9nZXRmc21hcCAtIHJldHJpZXZlIHRoZSBwaHlzaWNhbCBsYXlvdXQgb2YgdGhlIGZpbGVzeXN0ZW0KICAjIGlub3RpZnlfcm1fd2F0Y2ggLSByZW1vdmUgYW4gZXhpc3Rpbmcgd2F0Y2ggZnJvbSBhbiBpbm90aWZ5IGluc3RhbmNlCiAgIyBwZXJmX2V2ZW50X29wZW4gLSBzZXQgdXAgcGVyZm9ybWFuY2UgbW9uaXRvcmluZwogICMgdGltZXJfZ2V0b3ZlcnJ1biAtIGdldCBvdmVycnVuIGNvdW50IGZvciBhIFBPU0lYIHBlci1wcm9jZXNzIHRpbWVyCiAgIyB3YWl0MyAtIHdhaXQgZm9yIHByb2Nlc3MgdG8gY2hhbmdlIHN0YXRlLCBCU0Qgc3R5bGUKICAjIHdhaXQ0IC0gd2FpdCBmb3IgcHJvY2VzcyB0byBjaGFuZ2Ugc3RhdGUsIEJTRCBzdHlsZQogICMgbGluayAtIG1ha2UgYSBuZXcgbmFtZSBmb3IgYSBmaWxlCiAgIyBsaW5rYXQgLSBtYWtlIGEgbmV3IG5hbWUgZm9yIGEgZmlsZQogICMgc2NoZWRfcnJfZ2V0X2ludGVydmFsIC0gZ2V0IHRoZSBTQ0hFRF9SUiBpbnRlcnZhbCBmb3IgdGhlIG5hbWVkIHByb2Nlc3MKICAjIG11bm1hcCAtIG1hcCBvciB1bm1hcCBmaWxlcyBvciBkZXZpY2VzIGludG8gbWVtb3J5CiAgIyBzb2NrZXRjYWxsIC0gc29ja2V0IHN5c3RlbSBjYWxscwogICMgbXJlbWFwIC0gcmVtYXAgYSB2aXJ0dWFsIG1lbW9yeSBhZGRyZXNzCiAgIyB2Zm9yayAtIGNyZWF0ZSBhIGNoaWxkIHByb2Nlc3MgYW5kIGJsb2NrIHBhcmVudAogICMgc2VjY29tcCAtIG9wZXJhdGUgb24gU2VjdXJlIENvbXB1dGluZyBzdGF0ZSBvZiB0aGUgcHJvY2VzcwogICMgcmVxdWVzdF9rZXkgLSByZXF1ZXN0IGEga2V5IGZyb20gdGhlIGtlcm5lbCdzIGtleSBtYW5hZ2VtZW50IGZhY2lsaXR5CiAgIyBzeXNjYWxsIC0gaW5kaXJlY3Qgc3lzdGVtIGNhbGwKICAjIGtjbXAgLSBjb21wYXJlIHR3byBwcm9jZXNzZXMgdG8gZGV0ZXJtaW5lIGlmIHRoZXkgc2hhcmUgYSBrZXJuZWwgcmVzb3VyY2UKICAjIHJlYWRkaXIgLSByZWFkIGRpcmVjdG9yeSBlbnRyeQogICMgaW9wZXJtIC0gc2V0IHBvcnQgaW5wdXQvb3V0cHV0IHBlcm1pc3Npb25zCiAgIyBzcHVfcnVuIC0gZXhlY3V0ZSBhbiBTUFUgY29udGV4dAogICMgcmVib290IC0gcmVib290IG9yIGVuYWJsZS9kaXNhYmxlIEN0cmwtQWx0LURlbAogICMgcmVhZGFoZWFkIC0gaW5pdGlhdGUgZmlsZSByZWFkYWhlYWQgaW50byBwYWdlIGNhY2hlCiAgIyBzY2hlZF9nZXRwYXJhbSAtIHNldCBhbmQgZ2V0IHNjaGVkdWxpbmcgcGFyYW1ldGVycwogICMgYWNjdCAtIHN3aXRjaCBwcm9jZXNzIGFjY291bnRpbmcgb24gb3Igb2ZmCiAgIyBzaWdzdXNwZW5kIC0gd2FpdCBmb3IgYSBzaWduYWwKICAjIHJ0X3NpZ3N1c3BlbmQgLSB3YWl0IGZvciBhIHNpZ25hbAogICMgZXhpdF9ncm91cCAtIGV4aXQgYWxsIHRocmVhZHMgaW4gYSBwcm9jZXNzCiAgIyBzb2NrZXQgLSBjcmVhdGUgYW4gZW5kcG9pbnQgZm9yIGNvbW11bmljYXRpb24KICAjIGlvY3RsX3VzZXJmYXVsdGZkIC0gY3JlYXRlIGEgZmlsZSBkZXNjcmlwdG9yIGZvciBoYW5kbGluZyBwYWdlIGZhdWx0cyBpbiB1c2VyIHNwYWNlCiAgIyBzY2hlZF9nZXRfcHJpb3JpdHlfbWF4IC0gZ2V0IHN0YXRpYyBwcmlvcml0eSByYW5nZQogICMgc2NoZWRfZ2V0X3ByaW9yaXR5X21pbiAgLSBnZXQgc3RhdGljIHByaW9yaXR5IHJhbmdlCiAgIyBnZXRkZW50cyAtIGdldCBkaXJlY3RvcnkgZW50cmllcwogICMgZ2V0ZGVudHM2NCAtIGdldCBkaXJlY3RvcnkgZW50cmllcwogICMgc2VsZWN0IC0gc3luY2hyb25vdXMgSS9PIG11bHRpcGxleGluZwogICMgcHNlbGVjdCAtIHN5bmNocm9ub3VzIEkvTyBtdWx0aXBsZXhpbmcKICAjIGFsbG9jX2h1Z2VwYWdlcyAtIGFsbG9jYXRlIG9yIGZyZWUgaHVnZSBwYWdlcwogICMgZnJlZV9odWdlcGFnZXMgLSBhbGxvY2F0ZSBvciBmcmVlIGh1Z2UgcGFnZXMKICAjIGZzeW5jIC0gc3luY2hyb25pemUgYSBmaWxlJ3MgaW4tY29yZSBzdGF0ZSB3aXRoIHN0b3JhZ2UgZGV2aWNlCiAgIyBmZGF0YXN5bmMgLSBzeW5jaHJvbml6ZSBhIGZpbGUncyBpbi1jb3JlIHN0YXRlIHdpdGggc3RvcmFnZSBkZXZpY2UKICAjIHN5c2NhbGxzIC0gTGludXggc3lzdGVtIGNhbGxzCiAgIyBtZW1mZF9jcmVhdGUgLSBjcmVhdGUgYW4gYW5vbnltb3VzIGZpbGUKICAjIG1vZGlmeV9sZHQgLSBnZXQgb3Igc2V0IGEgcGVyLXByb2Nlc3MgTERUIGVudHJ5CiAgIyBnZXRfa2VybmVsX3N5bXMgLSByZXRyaWV2ZSBleHBvcnRlZCBrZXJuZWwgYW5kIG1vZHVsZSBzeW1ib2xzCiAgIyBsc2VlayAtIHJlcG9zaXRpb24gcmVhZC93cml0ZSBmaWxlIG9mZnNldAogICMgc2htYXQgLSBTeXN0ZW0gViBzaGFyZWQgbWVtb3J5IG9wZXJhdGlvbnMKICAjIHNobWR0IC0gU3lzdGVtIFYgc2hhcmVkIG1lbW9yeSBvcGVyYXRpb25zCiAgIyB0aW1lcl9kZWxldGUgLSBkZWxldGUgYSBQT1NJWCBwZXItcHJvY2VzcyB0aW1lcgogICMgcGVyZm1vbmN0bCAtIGludGVyZmFjZSB0byBJQS02NCBwZXJmb3JtYW5jZSBtb25pdG9yaW5nIHVuaXQKICAjIG1vdmVfcGFnZXMgLSBtb3ZlIGluZGl2aWR1YWwgcGFnZXMgb2YgYSBwcm9jZXNzIHRvIGFub3RoZXIgbm9kZQogICMgY2hkaXIgLSBjaGFuZ2Ugd29ya2luZyBkaXJlY3RvcnkKICAjIGZjaGRpciAtIGNoYW5nZSB3b3JraW5nIGRpcmVjdG9yeQogICMgdGltZSAtIGdldCB0aW1lIGluIHNlY29uZHMKICAjIF9leGl0IC0gdGVybWluYXRlIHRoZSBjYWxsaW5nIHByb2Nlc3MKICAjIF9FeGl0IC0gdGVybWluYXRlIHRoZSBjYWxsaW5nIHByb2Nlc3MKICAjIHMzOTBfc3RoeWkgLSBlbXVsYXRlIFNUSFlJIGluc3RydWN0aW9uCiAgIyBpb19zdWJtaXQgLSBzdWJtaXQgYXN5bmNocm9ub3VzIEkvTyBibG9ja3MgZm9yIHByb2Nlc3NpbmcKICAjIG1sb2NrIC0gbG9jayBhbmQgdW5sb2NrIG1lbW9yeQogICMgbWxvY2syIC0gbG9jayBhbmQgdW5sb2NrIG1lbW9yeQogICMgbXVubG9jayAtIGxvY2sgYW5kIHVubG9jayBtZW1vcnkKICAjIG1sb2NrYWxsIC0gbG9jayBhbmQgdW5sb2NrIG1lbW9yeQogICMgbXVubG9ja2FsbCAtIGxvY2sgYW5kIHVubG9jayBtZW1vcnkKICAjIHVtYXNrIC0gc2V0IGZpbGUgbW9kZSBjcmVhdGlvbiBtYXNrCiAgIyBhcmNoX3ByY3RsIC0gc2V0IGFyY2hpdGVjdHVyZS1zcGVjaWZpYyB0aHJlYWQgc3RhdGUKICAjIHVzZWxpYiAtIGxvYWQgc2hhcmVkIGxpYnJhcnkKICAjIHNlbmRmaWxlIC0gdHJhbnNmZXIgZGF0YSBiZXR3ZWVuIGZpbGUgZGVzY3JpcHRvcnMKICAjIHNobWN0bCAtIFN5c3RlbSBWIHNoYXJlZCBtZW1vcnkgY29udHJvbAogICMgZXBvbGxfd2FpdCAtIHdhaXQgZm9yIGFuIEkvTyBldmVudCBvbiBhbiBlcG9sbCBmaWxlIGRlc2NyaXB0b3IKICAjIGVwb2xsX3B3YWl0IC0gd2FpdCBmb3IgYW4gSS9PIGV2ZW50IG9uIGFuIGVwb2xsIGZpbGUgZGVzY3JpcHRvcgogICMgc2lnYWx0c3RhY2sgLSBzZXQgYW5kL29yIGdldCBzaWduYWwgc3RhY2sgY29udGV4dAogICMgaW9jdGwgLSBjb250cm9sIGRldmljZQogICMgc2lnbmFsZmQgLSBjcmVhdGUgYSBmaWxlIGRlc2NyaXB0b3IgZm9yIGFjY2VwdGluZyBzaWduYWxzCiAgIyB1bnNoYXJlIC0gZGlzYXNzb2NpYXRlIHBhcnRzIG9mIHRoZSBwcm9jZXNzIGV4ZWN1dGlvbiBjb250ZXh0CiAgIyBjaHJvb3QgLSBjaGFuZ2Ugcm9vdCBkaXJlY3RvcnkKICAjIG1hZHZpc2UgLSBnaXZlIGFkdmljZSBhYm91dCB1c2Ugb2YgbWVtb3J5CiAgIyBnZXR0aWQgLSBnZXQgdGhyZWFkIGlkZW50aWZpY2F0aW9uCiAgIyBnZXRzb2NrbmFtZSAtIGdldCBzb2NrZXQgbmFtZQogICMgaW9fZGVzdHJveSAtIGRlc3Ryb3kgYW4gYXN5bmNocm9ub3VzIEkvTyBjb250ZXh0CiAgIyBzZXR1cCAtIHNldHVwIGRldmljZXMgYW5kIGZpbGVzeXN0ZW1zLCBtb3VudCByb290IGZpbGVzeXN0ZW0KICAjIG50cF9hZGp0aW1lIC0gdHVuZSBrZXJuZWwgY2xvY2sKICAjIHNlbWdldCAtIGdldCBhIFN5c3RlbSBWIHNlbWFwaG9yZSBzZXQgaWRlbnRpZmllcgogICMgZ2V0dWlkIC0gZ2V0IHVzZXIgaWRlbnRpdHkKICAjIGdldGV1aWQgLSBnZXQgdXNlciBpZGVudGl0eQogICMgX3N5c2NhbGwgLSBpbnZva2luZyBhIHN5c3RlbSBjYWxsIHdpdGhvdXQgbGlicmFyeSBzdXBwb3J0IChPQlNPTEVURSkKICAjIHNjaGVkX3NldGFmZmluaXR5IC0gXCBzZXQgYW5kIGdldCBhIHRocmVhZCdzIENQVSBhZmZpbml0eSBtYXNrCiAgIyBzY2hlZF9nZXRhZmZpbml0eSAtIFwgc2V0IGFuZCBnZXQgYSB0aHJlYWQncyBDUFUgYWZmaW5pdHkgbWFzawogICMgY2FjaGVmbHVzaCAtIGZsdXNoIGNvbnRlbnRzIG9mIGluc3RydWN0aW9uIGFuZC9vciBkYXRhIGNhY2hlCiAgIyBwaXZvdF9yb290IC0gY2hhbmdlIHRoZSByb290IG1vdW50CiAgIyBtc2djdGwgLSBTeXN0ZW0gViBtZXNzYWdlIGNvbnRyb2wgb3BlcmF0aW9ucwogICMgaW9jdGxfZmF0IC0gbWFuaXB1bGF0aW5nIHRoZSBGQVQgZmlsZXN5c3RlbQogICMgc2V0cGdpZCAtIHNldC9nZXQgcHJvY2VzcyBncm91cAogICMgZ2V0cGdpZCAtIHNldC9nZXQgcHJvY2VzcyBncm91cAogICMgc2V0cGdycCAtIHNldC9nZXQgcHJvY2VzcyBncm91cAogICMgZ2V0cGdycCAtIHNldC9nZXQgcHJvY2VzcyBncm91cAogICMgc29ja2V0cGFpciAtIGNyZWF0ZSBhIHBhaXIgb2YgY29ubmVjdGVkIHNvY2tldHMKICAjIGJkZmx1c2ggLSBzdGFydCwgZmx1c2gsIG9yIHR1bmUgYnVmZmVyLWRpcnR5LWZsdXNoIGRhZW1vbgogICMgYWxhcm0gLSBzZXQgYW4gYWxhcm0gY2xvY2sgZm9yIGRlbGl2ZXJ5IG9mIGEgc2lnbmFsCiAgIyB0aW1lcl9zZXR0aW1lIC0gYXJtL2Rpc2FybSBhbmQgZmV0Y2ggc3RhdGUgb2YgUE9TSVggcGVyLXByb2Nlc3MgdGltZXIKICAjIHRpbWVyX2dldHRpbWUgLSBhcm0vZGlzYXJtIGFuZCBmZXRjaCBzdGF0ZSBvZiBQT1NJWCBwZXItcHJvY2VzcyB0aW1lcgogICMgYWRkX2tleSAtIGFkZCBhIGtleSB0byB0aGUga2VybmVsJ3Mga2V5IG1hbmFnZW1lbnQgZmFjaWxpdHkKICAjIHJ0X3NpZ3F1ZXVlaW5mbyAtIHF1ZXVlIGEgc2lnbmFsIGFuZCBkYXRhCiAgIyBydF90Z3NpZ3F1ZXVlaW5mbyAtIHF1ZXVlIGEgc2lnbmFsIGFuZCBkYXRhCiAgIyB1c2VyZmF1bHRmZCAtIGNyZWF0ZSBhIGZpbGUgZGVzY3JpcHRvciBmb3IgaGFuZGxpbmcgcGFnZSBmYXVsdHMgaW4gdXNlciBzcGFjZQogICMgc2Vtb3AgLSBTeXN0ZW0gViBzZW1hcGhvcmUgb3BlcmF0aW9ucwogICMgc2VtdGltZWRvcCAtIFN5c3RlbSBWIHNlbWFwaG9yZSBvcGVyYXRpb25zCiAgIyBnZXRnaWQgLSBnZXQgZ3JvdXAgaWRlbnRpdHkKICAjIGdldGVnaWQgLSBnZXQgZ3JvdXAgaWRlbnRpdHkKICAjIGdldHBpZCAtIGdldCBwcm9jZXNzIGlkZW50aWZpY2F0aW9uCiAgIyBnZXRwcGlkIC0gZ2V0IHByb2Nlc3MgaWRlbnRpZmljYXRpb24KICAjIHNpZ3Byb2NtYXNrIC0gZXhhbWluZSBhbmQgY2hhbmdlIGJsb2NrZWQgc2lnbmFscwogICMgcnRfc2lncHJvY21hc2sgLSBleGFtaW5lIGFuZCBjaGFuZ2UgYmxvY2tlZCBzaWduYWxzCiAgIyB1bmFtZSAtIGdldCBuYW1lIGFuZCBpbmZvcm1hdGlvbiBhYm91dCBjdXJyZW50IGtlcm5lbAogICMgc3RhdHggLSBnZXQgZmlsZSBzdGF0dXMgKGV4dGVuZGVkKQogICMgaW9jdGxfZmljbG9uZXJhbmdlIC0gc2hhcmUgc29tZSB0aGUgZGF0YSBvZiBvbmUgZmlsZSB3aXRoIGFub3RoZXIgZmlsZQogICMgaW9jdGxfZmljbG9uZSAtIHNoYXJlIHNvbWUgdGhlIGRhdGEgb2Ygb25lIGZpbGUgd2l0aCBhbm90aGVyIGZpbGUKICAjIG1xX2dldHNldGF0dHIgLSBnZXQvc2V0IG1lc3NhZ2UgcXVldWUgYXR0cmlidXRlcwogICMgaW9wcmlvX2dldCAtIGdldC9zZXQgSS9PIHNjaGVkdWxpbmcgY2xhc3MgYW5kIHByaW9yaXR5CiAgIyBpb3ByaW9fc2V0IC0gZ2V0L3NldCBJL08gc2NoZWR1bGluZyBjbGFzcyBhbmQgcHJpb3JpdHkKICAjIGVwb2xsX2N0bCAtIGNvbnRyb2wgaW50ZXJmYWNlIGZvciBhbiBlcG9sbCBmaWxlIGRlc2NyaXB0b3IKICAjIHN5bmMgLSBjb21taXQgZmlsZXN5c3RlbSBjYWNoZXMgdG8gZGlzawogICMgc3luY2ZzIC0gY29tbWl0IGZpbGVzeXN0ZW0gY2FjaGVzIHRvIGRpc2sKICAjIHNldHNpZCAtIGNyZWF0ZXMgYSBzZXNzaW9uIGFuZCBzZXRzIHRoZSBwcm9jZXNzIGdyb3VwIElECiAgIyBzaHV0ZG93biAtIHNodXQgZG93biBwYXJ0IG9mIGEgZnVsbC1kdXBsZXggY29ubmVjdGlvbgogICMgZ2V0c2lkIC0gZ2V0IHNlc3Npb24gSUQKICAjIGdldF90aHJlYWRfYXJlYSAtIG1hbmlwdWxhdGUgdGhyZWFkLWxvY2FsIHN0b3JhZ2UgaW5mb3JtYXRpb24KICAjIHNldF90aHJlYWRfYXJlYSAtIG1hbmlwdWxhdGUgdGhyZWFkLWxvY2FsIHN0b3JhZ2UgaW5mb3JtYXRpb24KICAjIHRpbWVyZmRfY3JlYXRlIC0gdGltZXJzIHRoYXQgbm90aWZ5IHZpYSBmaWxlIGRlc2NyaXB0b3JzCiAgIyB0aW1lcmZkX3NldHRpbWUgLSB0aW1lcnMgdGhhdCBub3RpZnkgdmlhIGZpbGUgZGVzY3JpcHRvcnMKICAjIHRpbWVyZmRfZ2V0dGltZSAtIHRpbWVycyB0aGF0IG5vdGlmeSB2aWEgZmlsZSBkZXNjcmlwdG9ycwogICMgaW9jdGxfZmlkZWR1cGVyYW5nZSAtIHNoYXJlIHNvbWUgdGhlIGRhdGEgb2Ygb25lIGZpbGUgd2l0aCBhbm90aGVyIGZpbGUKICAjIG5hbWVfdG9faGFuZGxlX2F0IC0gb2J0YWluIGhhbmRsZSBmb3IgYSBwYXRobmFtZSBhbmQgb3BlbiBmaWxlIHZpYSBhIGhhbmRsZQogICMgb3Blbl9ieV9oYW5kbGVfYXQgLSBvYnRhaW4gaGFuZGxlIGZvciBhIHBhdGhuYW1lIGFuZCBvcGVuIGZpbGUgdmlhIGEgaGFuZGxlCiAgIyBmdXRleCAtIGZhc3QgdXNlci1zcGFjZSBsb2NraW5nCiAgIyBpb2N0bF9ucyAtIGlvY3RsKCkgb3BlcmF0aW9ucyBmb3IgTGludXggbmFtZXNwYWNlcwogICMgcGlkZmRfc2VuZF9zaWduYWwgLSBzZW5kIGEgc2lnbmFsIHRvIGEgcHJvY2VzcyBzcGVjaWZpZWQgYnkgYSBmaWxlIGRlc2NyaXB0b3IKICAjIGNsb25lIC0gY3JlYXRlIGEgY2hpbGQgcHJvY2VzcwogICMgX19jbG9uZTIgLSBjcmVhdGUgYSBjaGlsZCBwcm9jZXNzCiAgIyBjbG9uZTMgLSBjcmVhdGUgYSBjaGlsZCBwcm9jZXNzCiAgIyB0aW1lcyAtIGdldCBwcm9jZXNzIHRpbWVzCiAgIyBzeXNpbmZvIC0gcmV0dXJuIHN5c3RlbSBpbmZvcm1hdGlvbgogICMgaXBjIC0gU3lzdGVtIFYgSVBDIHN5c3RlbSBjYWxscwogICMgZXZlbnRmZCAtIGNyZWF0ZSBhIGZpbGUgZGVzY3JpcHRvciBmb3IgZXZlbnQgbm90aWZpY2F0aW9uCiAgIyB3YWl0IC0gd2FpdCBmb3IgcHJvY2VzcyB0byBjaGFuZ2Ugc3RhdGUKICAjIHdhaXRwaWQgLSB3YWl0IGZvciBwcm9jZXNzIHRvIGNoYW5nZSBzdGF0ZQogICMgd2FpdGlkIC0gd2FpdCBmb3IgcHJvY2VzcyB0byBjaGFuZ2Ugc3RhdGUKICAjIGdldGRvbWFpbm5hbWUgLSBnZXQvc2V0IE5JUyBkb21haW4gbmFtZQogICMgaWRsZSAtIG1ha2UgcHJvY2VzcyAwIGlkbGUKICAjIGlub3RpZnlfYWRkX3dhdGNoIC0gYWRkIGEgd2F0Y2ggdG8gYW4gaW5pdGlhbGl6ZWQgaW5vdGlmeSBpbnN0YW5jZQogICMgZ2V0X21lbXBvbGljeSAtIHJldHJpZXZlIE5VTUEgbWVtb3J5IHBvbGljeSBmb3IgYSB0aHJlYWQKICAjIGJwZiAtIHBlcmZvcm0gYSBjb21tYW5kIG9uIGFuIGV4dGVuZGVkIEJQRiBtYXAgb3IgcHJvZ3JhbQogICMgZ2V0c29ja29wdCAtIGdldCBhbmQgc2V0IG9wdGlvbnMgb24gc29ja2V0cwogICMgc2V0c29ja29wdCAtIGdldCBhbmQgc2V0IG9wdGlvbnMgb24gc29ja2V0cwogICMgZ2V0aXRpbWVyIC0gZ2V0IG9yIHNldCB2YWx1ZSBvZiBhbiBpbnRlcnZhbCB0aW1lcgogICMgc2V0aXRpbWVyIC0gZ2V0IG9yIHNldCB2YWx1ZSBvZiBhbiBpbnRlcnZhbCB0aW1lcgogICMgbWVtYmFycmllciAtIGlzc3VlIG1lbW9yeSBiYXJyaWVycyBvbiBhIHNldCBvZiB0aHJlYWRzCiAgIyBtcHJvdGVjdCAtIHNldCBwcm90ZWN0aW9uIG9uIGEgcmVnaW9uIG9mIG1lbW9yeQogICMgcGtleV9tcHJvdGVjdCAtIHNldCBwcm90ZWN0aW9uIG9uIGEgcmVnaW9uIG9mIG1lbW9yeQogICMgZ2V0Y3B1IC0gZGV0ZXJtaW5lIENQVSBhbmQgTlVNQSBub2RlIG9uIHdoaWNoIHRoZSBjYWxsaW5nIHRocmVhZCBpcyBydW5uaW5nCiAgIyBpb2N0bF9mc2xhYmVsIC0gZ2V0IG9yIHNldCBhIGZpbGVzeXN0ZW0gbGFiZWwKICAjIGxpc3R4YXR0ciAtIGxpc3QgZXh0ZW5kZWQgYXR0cmlidXRlIG5hbWVzCiAgIyBsbGlzdHhhdHRyIC0gbGlzdCBleHRlbmRlZCBhdHRyaWJ1dGUgbmFtZXMKICAjIGZsaXN0eGF0dHIgLSBsaXN0IGV4dGVuZGVkIGF0dHJpYnV0ZSBuYW1lcwogICMgX2xsc2VlayAtIHJlcG9zaXRpb24gcmVhZC93cml0ZSBmaWxlIG9mZnNldAogICMgZmNudGwgLSBtYW5pcHVsYXRlIGZpbGUgZGVzY3JpcHRvcgogICMgdXN0YXQgLSBnZXQgZmlsZXN5c3RlbSBzdGF0aXN0aWNzCiAgIyBzaWduYWwgLSBBTlNJIEMgc2lnbmFsIGhhbmRsaW5nCiAgIyBuYW5vc2xlZXAgLSBoaWdoLXJlc29sdXRpb24gc2xlZXAKICAjIGNvbm5lY3QgLSBpbml0aWF0ZSBhIGNvbm5lY3Rpb24gb24gYSBzb2NrZXQKICAjIHZtODZvbGQgLSBlbnRlciB2aXJ0dWFsIDgwODYgbW9kZQogICMgdm04NiAtIGVudGVyIHZpcnR1YWwgODA4NiBtb2RlCiAgIyBmYW5vdGlmeV9pbml0IC0gY3JlYXRlIGFuZCBpbml0aWFsaXplIGZhbm90aWZ5IGdyb3VwCiAgIyBtaWdyYXRlX3BhZ2VzIC0gbW92ZSBhbGwgcGFnZXMgaW4gYSBwcm9jZXNzIHRvIGFub3RoZXIgc2V0IG9mIG5vZGVzCiAgIyByZXN0YXJ0X3N5c2NhbGwgLSByZXN0YXJ0IGEgc3lzdGVtIGNhbGwgYWZ0ZXIgaW50ZXJydXB0aW9uIGJ5IGEgc3RvcCBzaWduYWwKICAjIGNsb3NlIC0gY2xvc2UgYSBmaWxlIGRlc2NyaXB0b3IKICAjIG1zZ3JjdiAtIFN5c3RlbSBWIG1lc3NhZ2UgcXVldWUgb3BlcmF0aW9ucwogICMgbXNnc25kIC0gU3lzdGVtIFYgbWVzc2FnZSBxdWV1ZSBvcGVyYXRpb25zCiAgIyByZWFkdiAtIHJlYWQgb3Igd3JpdGUgZGF0YSBpbnRvIG11bHRpcGxlIGJ1ZmZlcnMKICAjIHdyaXRldiAtIHJlYWQgb3Igd3JpdGUgZGF0YSBpbnRvIG11bHRpcGxlIGJ1ZmZlcnMKICAjIHByZWFkdiAtIHJlYWQgb3Igd3JpdGUgZGF0YSBpbnRvIG11bHRpcGxlIGJ1ZmZlcnMKICAjIHB3cml0ZXYgLSByZWFkIG9yIHdyaXRlIGRhdGEgaW50byBtdWx0aXBsZSBidWZmZXJzCiAgIyBwcmVhZHYyIC0gcmVhZCBvciB3cml0ZSBkYXRhIGludG8gbXVsdGlwbGUgYnVmZmVycwogICMgcHdyaXRldjIgLSByZWFkIG9yIHdyaXRlIGRhdGEgaW50byBtdWx0aXBsZSBidWZmZXJzCiAgIyBzeXNsb2cgLSByZWFkIGFuZC9vciBjbGVhciBrZXJuZWwgbWVzc2FnZSByaW5nIGJ1ZmZlcjsgc2V0IGNvbnNvbGVfbG9nbGV2ZWwKICAjIGtsb2djdGwgLSByZWFkIGFuZC9vciBjbGVhciBrZXJuZWwgbWVzc2FnZSByaW5nIGJ1ZmZlcjsgc2V0IGNvbnNvbGVfbG9nbGV2ZWwKICAjIHNjaGVkX3lpZWxkIC0geWllbGQgdGhlIHByb2Nlc3NvcgogICMgdmhhbmd1cCAtIHZpcnR1YWxseSBoYW5ndXAgdGhlIGN1cnJlbnQgdGVybWluYWwKICAjIGlvY3RsX2lmbGFncyAtIGlvY3RsKCkgb3BlcmF0aW9ucyBmb3IgaW5vZGUgZmxhZ3MKICAjIHNnZXRtYXNrIC0gbWFuaXB1bGF0aW9uIG9mIHNpZ25hbCBtYXNrIChvYnNvbGV0ZSkKICAjIHNzZXRtYXNrIC0gbWFuaXB1bGF0aW9uIG9mIHNpZ25hbCBtYXNrIChvYnNvbGV0ZSkKICAjIHN5bmNfZmlsZV9yYW5nZSAtIHN5bmMgYSBmaWxlIHNlZ21lbnQgd2l0aCBkaXNrCiAgIyBjb3B5X2ZpbGVfcmFuZ2UgLSBDb3B5IGEgcmFuZ2Ugb2YgZGF0YSBmcm9tIG9uZSBmaWxlIHRvIGFub3RoZXIKICAjIHNpZ3BlbmRpbmcgLSBleGFtaW5lIHBlbmRpbmcgc2lnbmFscwogICMgcnRfc2lncGVuZGluZyAtIGV4YW1pbmUgcGVuZGluZyBzaWduYWxzCiAgIyBnZXR1bndpbmQgLSBjb3B5IHRoZSB1bndpbmQgZGF0YSB0byBjYWxsZXIncyBidWZmZXIKICAjIG1zeW5jIC0gc3luY2hyb25pemUgYSBmaWxlIHdpdGggYSBtZW1vcnkgbWFwCiAgIyBnZXRfcm9idXN0X2xpc3QgLSBnZXQvc2V0IGxpc3Qgb2Ygcm9idXN0IGZ1dGV4ZXMKICAjIHNldF9yb2J1c3RfbGlzdCAtIGdldC9zZXQgbGlzdCBvZiByb2J1c3QgZnV0ZXhlcwogICMgZHVwIC0gZHVwbGljYXRlIGEgZmlsZSBkZXNjcmlwdG9yCiAgIyBkdXAyIC0gZHVwbGljYXRlIGEgZmlsZSBkZXNjcmlwdG9yCiAgIyBkdXAzIC0gZHVwbGljYXRlIGEgZmlsZSBkZXNjcmlwdG9yCiAgIyBzMzkwX3BjaV9tbWlvX3dyaXRlIC0gdHJhbnNmZXIgZGF0YSB0by9mcm9tIFBDSSBNTUlPIG1lbW9yeSBwYWdlCiAgIyBzMzkwX3BjaV9tbWlvX3JlYWQgLSB0cmFuc2ZlciBkYXRhIHRvL2Zyb20gUENJIE1NSU8gbWVtb3J5IHBhZ2UKICAjIHBhdXNlIC0gd2FpdCBmb3Igc2lnbmFsCiAgIyBzd2Fwb24gLSBzdGFydC9zdG9wIHN3YXBwaW5nIHRvIGZpbGUvZGV2aWNlCiAgIyBzd2Fwb2ZmIC0gc3RhcnQvc3RvcCBzd2FwcGluZyB0byBmaWxlL2RldmljZQoKICAjIFJlY29yZCB0eXBlIG5vcm1hbGl6YXRpb25zCiAgIyBVc2VmdWwgbGlua3M6CiAgIyBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vdG9ydmFsZHMvbGludXgvdjQuMTYvaW5jbHVkZS91YXBpL2xpbnV4L2F1ZGl0LmgKICAjIGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9saW51eC1hdWRpdC9hdWRpdC11c2Vyc3BhY2UvNGQ5MzMzMDFiMTgzNWNhZmEwOGI5ZTllZjcwNWM4ZmI2Yzk2Y2I2Mi9saWIvbGliYXVkaXQuaAogICMgaHR0cHM6Ly93d3cuZWxhc3RpYy5jby9ndWlkZS9lbi9lY3MvY3VycmVudC9lY3MtYWxsb3dlZC12YWx1ZXMtZXZlbnQtY2F0ZWdvcnkuaHRtbAoKICAjIElBTSByZWxhdGVkIGV2ZW50cwoKICAjIEFVRElUX0FDQ1RfTE9DSyAtIFVzZXIncyBhY2NvdW50IGxvY2tlZCBieSBhZG1pbgogIC0gcmVjb3JkX3R5cGVzOiBBQ0NUX0xPQ0sKICAgIGFjdGlvbjogbG9ja2VkLWFjY291bnQKICAgIGVjczoKICAgICAgPDw6ICplY3MtaWFtCiAgICAgIHR5cGU6CiAgICAgICAgLSB1c2VyCiAgICAgICAgLSBpbmZvCiAgIyBBVURJVF9BQ0NUX1VOTE9DSyAtIFVzZXIncyBhY2NvdW50IHVubG9ja2VkIGJ5IGFkbWluCiAgLSByZWNvcmRfdHlwZXM6IEFDQ1RfVU5MT0NLCiAgICBhY3Rpb246IHVubG9ja2VkLWFjY291bnQKICAgIGVjczoKICAgICAgPDw6ICplY3MtaWFtCiAgICAgIHR5cGU6CiAgICAgICAgLSB1c2VyCiAgICAgICAgLSBpbmZvCiAgIyBBVURJVF9BRERfR1JPVVAgLSBHcm91cCBhY2NvdW50IGFkZGVkCiAgLSByZWNvcmRfdHlwZXM6IEFERF9HUk9VUAogICAgYWN0aW9uOiBhZGRlZC1ncm91cC1hY2NvdW50LXRvCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IFtpZCwgYWNjdF0KICAgICAgd2hhdDogYWNjb3VudAogICAgZWNzOgogICAgICA8PDogKmVjcy1pYW0KICAgICAgPDw6ICplY3MtZ3JvdXAtbW9kaWZpY2F0aW9uLW1hcHBpbmdzCiAgICAgIHR5cGU6CiAgICAgICAgLSBncm91cAogICAgICAgIC0gY3JlYXRpb24KCiAgIyBBVURJVF9BRERfVVNFUiAtIFVzZXIgYWNjb3VudCBhZGRlZAogIC0gcmVjb3JkX3R5cGVzOiBBRERfVVNFUgogICAgYWN0aW9uOiBhZGRlZC11c2VyLWFjY291bnQKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogW2lkLCBhY2N0XQogICAgICB3aGF0OiBhY2NvdW50CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWlhbQogICAgICA8PDogKmVjcy11c2VyLW1vZGlmaWNhdGlvbi1tYXBwaW5ncwogICAgICB0eXBlOgogICAgICAgIC0gdXNlcgogICAgICAgIC0gY3JlYXRpb24KICAjIEFVRElUX0RFTF9HUk9VUCAtIEdyb3VwIGFjY291bnQgZGVsZXRlZAogIC0gcmVjb3JkX3R5cGVzOiBERUxfR1JPVVAKICAgIGFjdGlvbjogZGVsZXRlZC1ncm91cC1hY2NvdW50LWZyb20KICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogW2lkLCBhY2N0XQogICAgICB3aGF0OiBhY2NvdW50CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWlhbQogICAgICA8PDogKmVjcy1ncm91cC1tb2RpZmljYXRpb24tbWFwcGluZ3MKICAgICAgdHlwZToKICAgICAgICAtIGdyb3VwCiAgICAgICAgLSBkZWxldGlvbgogICMgQVVESVRfREVMX1VTRVIgLSBVc2VyIGFjY291bnQgZGVsZXRlZAogIC0gcmVjb3JkX3R5cGVzOiBERUxfVVNFUgogICAgYWN0aW9uOiBkZWxldGVkLXVzZXItYWNjb3VudAogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBbaWQsIGFjY3RdCiAgICAgIHdoYXQ6IGFjY291bnQKICAgIGVjczoKICAgICAgPDw6ICplY3MtaWFtCiAgICAgIDw8OiAqZWNzLXVzZXItbW9kaWZpY2F0aW9uLW1hcHBpbmdzCiAgICAgIHR5cGU6CiAgICAgICAgLSB1c2VyCiAgICAgICAgLSBkZWxldGlvbgogICMgQVVESVRfR1JQX01HTVQgLSBHcm91cCBhY2NvdW50IGF0dHIgd2FzIG1vZGlmaWVkCiAgLSByZWNvcmRfdHlwZXM6IEdSUF9NR01UCiAgICBhY3Rpb246IG1vZGlmaWVkLWdyb3VwLWFjY291bnQKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogW2lkLCBhY2N0XQogICAgICB3aGF0OiBhY2NvdW50CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWlhbQogICAgICB0eXBlOgogICAgICAgIC0gZ3JvdXAKICAgICAgICAtIGNoYW5nZQogICAgICBtYXBwaW5nczoKICAgICAgICAtIGZyb206IHN1YmplY3QucHJpbWFyeQogICAgICAgICAgdG86IHVzZXIKICAgICAgICAtIGZyb206IHN1YmplY3Quc2Vjb25kYXJ5CiAgICAgICAgICB0bzogZ3JvdXAudGFyZ2V0CiAgICAgICAgLSBmcm9tOiB1aWQudWlkCiAgICAgICAgICB0bzogdXNlci5lZmZlY3RpdmUKICAjIEFVRElUX1JPTEVfQVNTSUdOIC0gQWRtaW4gYXNzaWduZWQgdXNlciB0byByb2xlCiAgLSByZWNvcmRfdHlwZXM6IFJPTEVfQVNTSUdOCiAgICBhY3Rpb246IGFzc2lnbmVkLXVzZXItcm9sZS10bwogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBbaWQsIGFjY3RdCiAgICAgIHdoYXQ6IGFjY291bnQKICAgIGVjczoKICAgICAgPDw6ICplY3MtaWFtCiAgICAgIHR5cGU6CiAgICAgICAgLSB1c2VyCiAgICAgICAgLSBjaGFuZ2UKICAjIEFVRElUX1JPTEVfTU9ESUZZIC0gQWRtaW4gbW9kaWZpZWQgYSByb2xlCiAgLSByZWNvcmRfdHlwZXM6IFJPTEVfTU9ESUZZCiAgICBhY3Rpb246IG1vZGlmaWVkLXJvbGUKICAgIGVjczoKICAgICAgPDw6ICplY3MtaWFtCiAgICAgIHR5cGU6CiAgICAgICAgLSBjaGFuZ2UKICAjIEFVRElUX1JPTEVfUkVNT1ZFIC0gQWRtaW4gcmVtb3ZlZCB1c2VyIGZyb20gcm9sZQogIC0gcmVjb3JkX3R5cGVzOiBST0xFX1JFTU9WRQogICAgYWN0aW9uOiByZW1vdmVkLXVzZXItcm9sZS1mcm9tCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IFtpZCwgYWNjdF0KICAgICAgd2hhdDogYWNjb3VudAogICAgZWNzOgogICAgICA8PDogKmVjcy1pYW0KICAgICAgdHlwZToKICAgICAgICAtIHVzZXIKICAgICAgICAtIGNoYW5nZQogICMgQVVESVRfVVNFUl9NR01UIC0gVXNlciBhY2N0IGF0dHJpYnV0ZSBjaGFuZ2UKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IFVTRVJfTUdNVAogICAgYWN0aW9uOiBtb2RpZmllZC11c2VyLWFjY291bnQKICAgIGVjczoKICAgICAgPDw6ICplY3MtaWFtCiAgICAgIHR5cGU6CiAgICAgICAgLSB1c2VyCiAgICAgICAgLSBjaGFuZ2UKICAgICAgbWFwcGluZ3M6CiAgICAgICAgLSBmcm9tOiBzdWJqZWN0LnByaW1hcnkKICAgICAgICAgIHRvOiB1c2VyCiAgICAgICAgLSBmcm9tOiBzdWJqZWN0LnNlY29uZGFyeQogICAgICAgICAgdG86IHVzZXIudGFyZ2V0CiAgICAgICAgLSBmcm9tOiB1aWQudWlkCiAgICAgICAgICB0bzogdXNlci5lZmZlY3RpdmUKICAjIEFVRElUX1VTRVJfQ0hBVVRIVE9LIC0gVXNlciBhY2N0IHBhc3N3b3JkIG9yIHBpbiBjaGFuZ2VkCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBVU0VSX0NIQVVUSFRPSwogICAgYWN0aW9uOiBjaGFuZ2VkLXBhc3N3b3JkCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWlhbQogICAgICB0eXBlOgogICAgICAgIC0gdXNlcgogICAgICAgIC0gY2hhbmdlCiAgICAgIG1hcHBpbmdzOgogICAgICAgIC0gZnJvbTogc3ViamVjdC5wcmltYXJ5CiAgICAgICAgICB0bzogdXNlcgogICAgICAgIC0gZnJvbTogdWlkLnVpZAogICAgICAgICAgdG86IHVzZXIuZWZmZWN0aXZlCiAgICAgICAgLSBmcm9tOiBzdWJqZWN0LnNlY29uZGFyeQogICAgICAgICAgdG86IHVzZXIudGFyZ2V0CgogICMgQVVESVRfR1JQX0NIQVVUSFRPSyAtIEdyb3VwIGFjY3QgcGFzc3dvcmQgb3IgcGluIGNoYW5nZWQKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IEdSUF9DSEFVVEhUT0sKICAgIGFjdGlvbjogY2hhbmdlZC1ncm91cC1wYXNzd29yZAogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBhY2N0CiAgICAgIHdoYXQ6IHVzZXItc2Vzc2lvbgogICAgZWNzOgogICAgICA8PDogKmVjcy1pYW0KICAgICAgdHlwZToKICAgICAgICAtIGdyb3VwCiAgICAgICAgLSBjaGFuZ2UKICAgICAgbWFwcGluZ3M6CiAgICAgICAgLSBmcm9tOiBzdWJqZWN0LnByaW1hcnkKICAgICAgICAgIHRvOiB1c2VyCiAgICAgICAgLSBmcm9tOiB1aWQudWlkCiAgICAgICAgICB0bzogdXNlci5lZmZlY3RpdmUKICAgICAgICAtIGZyb206IHN1YmplY3Quc2Vjb25kYXJ5CiAgICAgICAgICB0bzogZ3JvdXAudGFyZ2V0CgogICMgQXV0aGVudGljYXRpb24gcmVsYXRlZCBldmVudHMKCiAgIyBBVURJVF9DUkVEX0FDUSAtIFVzZXIgY3JlZGVudGlhbCBhY3F1aXJlZAogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogQ1JFRF9BQ1EKICAgIGFjdGlvbjogYWNxdWlyZWQtY3JlZGVudGlhbHMKICAgIGVjczogKmVjcy1hdXRoCiAgIyBBVURJVF9DUkVEX0RJU1AgLSBVc2VyIGNyZWRlbnRpYWwgZGlzcG9zZWQKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IENSRURfRElTUAogICAgYWN0aW9uOiBkaXNwb3NlZC1jcmVkZW50aWFscwogICAgZWNzOiAqZWNzLWF1dGgKICAjIEFVRElUX0NSRURfUkVGUiAtIFVzZXIgY3JlZGVudGlhbCByZWZyZXNoZWQKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IENSRURfUkVGUgogICAgYWN0aW9uOiByZWZyZXNoZWQtY3JlZGVudGlhbHMKICAgIGVjczogKmVjcy1hdXRoCiAgIyBBVURJVF9HUlBfQVVUSCAtIEF1dGhlbnRpY2F0aW9uIGZvciBncm91cCBwYXNzd29yZAogIC0gcmVjb3JkX3R5cGVzOiBHUlBfQVVUSAogICAgYWN0aW9uOiBhdXRoZW50aWNhdGVkLXRvLWdyb3VwCiAgICBlY3M6ICplY3MtYXV0aAogICMgQVVESVRfTE9HSU4gLSBEZWZpbmUgdGhlIGxvZ2luIGlkIGFuZCBpbmZvcm1hdGlvbgogIC0gcmVjb3JkX3R5cGVzOiBMT0dJTgogICAgYWN0aW9uOiBjaGFuZ2VkLWxvZ2luLWlkLXRvCiAgICBzdWJqZWN0OgogICAgICBwcmltYXJ5OiBbb2xkX2F1aWQsIG9sZC1hdWlkXQogICAgICBzZWNvbmRhcnk6IHVpZAogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBbbmV3LWF1aWQsIG5ld19hdWlkLCBhdWlkXQogICAgICB3aGF0OiB1c2VyLXNlc3Npb24KICAgIGVjczoKICAgICAgPDw6ICplY3MtYXV0aAogICAgICB0eXBlOiBzdGFydAogICAgICBtYXBwaW5nczoKICAgICAgICAtIGZyb206IHN1YmplY3QucHJpbWFyeQogICAgICAgICAgdG86IHVzZXIKICAgICAgICAtIGZyb206IG9iamVjdC5wcmltYXJ5CiAgICAgICAgICB0bzogdXNlci5lZmZlY3RpdmUKICAjIEFVRElUX1VTRVJfQUNDVCAtIFVzZXIgc3lzdGVtIGFjY2VzcyBhdXRob3JpemF0aW9uCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBVU0VSX0FDQ1QKICAgIGFjdGlvbjogd2FzLWF1dGhvcml6ZWQKICAgIGVjczogKmVjcy1hdXRoCiAgIyBBVURJVF9VU0VSX0FVVEggLSBVc2VyIHN5c3RlbSBhY2Nlc3MgYXV0aGVudGljYXRpb24KICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IFVTRVJfQVVUSAogICAgYWN0aW9uOiBhdXRoZW50aWNhdGVkCiAgICBlY3M6ICplY3MtYXV0aAogICMgQVVESVRfVVNFUl9FTkQgLSBVc2VyIHNlc3Npb24gZW5kCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBVU0VSX0VORAogICAgYWN0aW9uOiBlbmRlZC1zZXNzaW9uCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXNlc3Npb24KICAgICAgdHlwZTogZW5kCiAgIyBBVURJVF9VU0VSX0VSUiAtIFVzZXIgYWNjdCBzdGF0ZSBlcnJvcgogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogVVNFUl9FUlIKICAgIGFjdGlvbjogZXJyb3IKICAgIHNvdXJjZV9pcDogW2FkZHJdCiAgICBlY3M6ICplY3MtYXV0aAogICMgQVVESVRfVVNFUl9MT0dJTiAtIFVzZXIgaGFzIGxvZ2dlZCBpbgogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogVVNFUl9MT0dJTgogICAgYWN0aW9uOiBsb2dnZWQtaW4KICAgIHNvdXJjZV9pcDogW2FkZHJdCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWF1dGgKICAgICAgdHlwZTogc3RhcnQKICAjIEFVRElUX1VTRVJfTE9HT1VUIC0gVXNlciBoYXMgbG9nZ2VkIG91dAogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogVVNFUl9MT0dPVVQKICAgIGFjdGlvbjogbG9nZ2VkLW91dAogICAgZWNzOgogICAgICA8PDogKmVjcy1hdXRoCiAgICAgIHR5cGU6IGVuZAogICMgQVVESVRfVVNFUl9ST0xFX0NIQU5HRSAtIFVzZXIgY2hhbmdlZCB0byBhIG5ldyByb2xlCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBVU0VSX1JPTEVfQ0hBTkdFCiAgICBhY3Rpb246IGNoYW5nZWQtcm9sZS10bwogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBzZWxlY3RlZC1jb250ZXh0CiAgICAgIHdoYXQ6IHVzZXItc2Vzc2lvbgogICMgQVVESVRfVVNFUl9TVEFSVCAtIFVzZXIgc2Vzc2lvbiBzdGFydAogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogVVNFUl9TVEFSVAogICAgYWN0aW9uOiBzdGFydGVkLXNlc3Npb24KICAgIHNvdXJjZV9pcDogW2FkZHJdCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXNlc3Npb24KICAgICAgdHlwZTogc3RhcnQKCiAgIyBIb3N0IHZpcnR1YWxpemF0aW9uIGV2ZW50cwoKICAjIEFVRElUX1ZJUlRfQ09OVFJPTCAtIFN0YXJ0LCBQYXVzZSwgU3RvcCBWTQogIC0gcmVjb3JkX3R5cGVzOiBWSVJUX0NPTlRST0wKICAgIGFjdGlvbjogaXNzdWVkLXZtLWNvbnRyb2wKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogb3AKICAgICAgc2Vjb25kYXJ5OiB2bQogICAgICB3aGF0OiB2aXJ0dWFsLW1hY2hpbmUKICAgIGVjczogKmVjcy1ob3N0CiAgIyBBVURJVF9WSVJUX0NSRUFURSAtIENyZWF0aW9uIG9mIGd1ZXN0IGltYWdlCiAgLSByZWNvcmRfdHlwZXM6IFZJUlRfQ1JFQVRFCiAgICBhY3Rpb246IGNyZWF0ZWQtdm0taW1hZ2UKICAgIGVjczogKmVjcy1ob3N0CiAgIyBBVURJVF9WSVJUX0RFU1RST1kgLSBEZXN0cnVjdGlvbiBvZiBndWVzdCBpbWFnZQogIC0gcmVjb3JkX3R5cGVzOiBWSVJUX0RFU1RST1kKICAgIGFjdGlvbjogZGVsZXRlZC12bS1pbWFnZQogICAgZWNzOiAqZWNzLWhvc3QKICAjIEFVRElUX1ZJUlRfSU5URUdSSVRZX0NIRUNLIC0gR3Vlc3QgaW50ZWdyaXR5IHJlc3VsdHMKICAtIHJlY29yZF90eXBlczogVklSVF9JTlRFR1JJVFlfQ0hFQ0sKICAgIGFjdGlvbjogY2hlY2tlZC1pbnRlZ3JpdHktb2YKICAgIGVjczogKmVjcy1ob3N0CiAgIyBBVURJVF9WSVJUX01BQ0hJTkVfSUQgLSBCaW5kaW5nIG9mIGxhYmVsIHRvIFZNCiAgLSByZWNvcmRfdHlwZXM6IFZJUlRfTUFDSElORV9JRAogICAgYWN0aW9uOiBhc3NpZ25lZC12bS1pZAogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiB2bQogICAgICB3aGF0OiB2aXJ0dWFsLW1hY2hpbmUKICAgIGVjczogKmVjcy1ob3N0CiAgIyBBVURJVF9WSVJUX01JR1JBVEVfSU4gLSBJbmJvdW5kIGd1ZXN0IG1pZ3JhdGlvbiBpbmZvCiAgLSByZWNvcmRfdHlwZXM6IFZJUlRfTUlHUkFURV9JTgogICAgYWN0aW9uOiBtaWdyYXRlZC12bS1mcm9tCiAgICBlY3M6ICplY3MtaG9zdAogICMgQVVESVRfVklSVF9NSUdSQVRFX09VVCAtIE91dGJvdW5kIGd1ZXN0IG1pZ3JhdGlvbiBpbmZvCiAgLSByZWNvcmRfdHlwZXM6IFZJUlRfTUlHUkFURV9PVVQKICAgIGFjdGlvbjogbWlncmF0ZWQtdm0tdG8KICAgIGVjczogKmVjcy1ob3N0CiAgIyBBVURJVF9WSVJUX1JFU09VUkNFIC0gUmVzb3VyY2UgYXNzaWdubWVudAogIC0gcmVjb3JkX3R5cGVzOiBWSVJUX1JFU09VUkNFCiAgICBhY3Rpb246IGFzc2lnbmVkLXZtLXJlc291cmNlCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IHJlc3JjCiAgICAgIHNlY29uZGFyeTogdm0KICAgICAgd2hhdDogdmlydHVhbC1tYWNoaW5lCiAgICBlY3M6ICplY3MtaG9zdAoKICAjIFVzZXJzcGFjZSBwcm9jZXNzIGV2ZW50cwoKICAjIEFVRElUX0NIR1JQX0lEIC0gVXNlciBzcGFjZSBncm91cCBJRCBjaGFuZ2VkCiAgLSByZWNvcmRfdHlwZXM6IENIR1JQX0lECiAgICBhY3Rpb246IGNoYW5nZWQtZ3JvdXAKICAgIGVjczoKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBjaGFuZ2UKICAjIEFVRElUX0NIVVNFUl9JRCAtIENoYW5nZWQgdXNlciBJRCBzdXBwbGVtZW50YWwgZGF0YQogIC0gcmVjb3JkX3R5cGVzOiBDSFVTRVJfSUQKICAgIGFjdGlvbjogY2hhbmdlZC11c2VyLWlkCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogY2hhbmdlCiAgIyBBVURJVF9URVNUIC0gVXNlZCBmb3IgdGVzdCBzdWNjZXNzIG1lc3NhZ2VzCiAgLSByZWNvcmRfdHlwZXM6IFRFU1QKICAgIGFjdGlvbjogc2VudC10ZXN0CiAgICBlY3M6ICplY3MtcHJvY2VzcwogICMgQVVESVRfVFJVU1RFRF9BUFAgLSBUcnVzdGVkIGFwcCBtc2cgLSBmcmVlc3R5bGUgdGV4dAogIC0gcmVjb3JkX3R5cGVzOiBUUlVTVEVEX0FQUAogICAgYWN0aW9uOiB1bmtub3duCiAgICBlY3M6ICplY3MtcHJvY2VzcwogICMgQVVESVRfVVNFUl9DTUQgLSBVc2VyIHNoZWxsIGNvbW1hbmQgYW5kIGFyZ3MKICAtIHJlY29yZF90eXBlczogVVNFUl9DTUQKICAgIGFjdGlvbjogcmFuLWNvbW1hbmQKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogY21kCiAgICAgIHdoYXQ6IHByb2Nlc3MKICAgIGRlc2NyaXB0aW9uOiA+CiAgICAgIFRoZXNlIG1lc3NhZ2VzIGFyZSBmcm9tIHVzZXItc3BhY2UgYXBwcywgbGlrZSBzdWRvLCB0aGF0IGxvZyBjb21tYW5kcwogICAgICBiZWluZyBydW4gYnkgYSB1c2VyLiBUaGUgdWlkIGNvbnRhaW5lZCBpbiB0aGVzZSBtZXNzYWdlcyBpcyB1c2VyJ3MgVUlEIGF0CiAgICAgIHRoZSB0aW1lIHRoZSBjb21tYW5kIHdhcyBydW4uIEl0IGlzIG5vdCB0aGUgInRhcmdldCIgVUlEIHVzZWQgdG8gcnVuIHRoZQogICAgICBjb21tYW5kLCB3aGljaCBpcyBub3JtYWxseSByb290LgogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IHN0YXJ0CgogICMgSG9zdC1sZXZlbCBldmVudHMKCiAgIyBBVURJVF9TWVNURU1fQk9PVCAtIFN5c3RlbSBib290CiAgLSByZWNvcmRfdHlwZXM6IFNZU1RFTV9CT09UCiAgICBhY3Rpb246IGJvb3RlZC1zeXN0ZW0KICAgIG9iamVjdDoKICAgICAgd2hhdDogc3lzdGVtCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWhvc3QKICAgICAgdHlwZTogc3RhcnQKICAjIEFVRElUX1NZU1RFTV9SVU5MRVZFTCAtIFN5c3RlbSBydW5sZXZlbCBjaGFuZ2UKICAtIHJlY29yZF90eXBlczogU1lTVEVNX1JVTkxFVkVMCiAgICBhY3Rpb246IGNoYW5nZWQtdG8tcnVubGV2ZWwKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogbmV3LWxldmVsCiAgICAgIHdoYXQ6IHN5c3RlbQogICAgZWNzOgogICAgICA8PDogKmVjcy1ob3N0CiAgICAgIHR5cGU6IGNoYW5nZQogICMgQVVESVRfU1lTVEVNX1NIVVRET1dOIC0gU3lzdGVtIHNodXRkb3duCiAgLSByZWNvcmRfdHlwZXM6IFNZU1RFTV9TSFVURE9XTgogICAgYWN0aW9uOiBzaHV0ZG93bi1zeXN0ZW0KICAgIG9iamVjdDoKICAgICAgd2hhdDogc3lzdGVtCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWhvc3QKICAgICAgdHlwZTogZW5kCgogICMgU2VydmljZS1sZXZlbCBldmVudHMKCiAgIyBBVURJVF9TRVJWSUNFX1NUQVJUIC0gU2VydmljZSAoZGFlbW9uKSBzdGFydAogIC0gcmVjb3JkX3R5cGVzOiBTRVJWSUNFX1NUQVJUCiAgICBhY3Rpb246IHN0YXJ0ZWQtc2VydmljZQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiB1bml0CiAgICAgIHdoYXQ6IHNlcnZpY2UKICAgIGVjczoKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBzdGFydAogICMgQVVESVRfU0VSVklDRV9TVE9QIC0gU2VydmljZSAoZGFlbW9uKSBzdG9wCiAgLSByZWNvcmRfdHlwZXM6IFNFUlZJQ0VfU1RPUAogICAgYWN0aW9uOiBzdG9wcGVkLXNlcnZpY2UKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogdW5pdAogICAgICB3aGF0OiBzZXJ2aWNlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogc3RvcAoKICAjIEF1ZGl0ZCBpbnRlcm5hbCBldmVudHMKCiAgIyBBVURJVF9DT05GSUdfQ0hBTkdFIC0gQXVkaXQgc3lzdGVtIGNvbmZpZ3VyYXRpb24gY2hhbmdlCiAgLSByZWNvcmRfdHlwZXM6IENPTkZJR19DSEFOR0UKICAgIGFjdGlvbjogY2hhbmdlZC1hdWRpdC1jb25maWd1cmF0aW9uCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6CiAgICAgICAgW29wLCBrZXksIGF1ZGl0X2VuYWJsZWQsIGF1ZGl0X3BpZCwgYXVkaXRfYmFja2xvZ19saW1pdCwgYXVkaXRfZmFpbHVyZV0KICAgICAgd2hhdDogYXVkaXQtY29uZmlnCiAgICBlY3M6CiAgICAgIGNhdGVnb3J5OiBbcHJvY2VzcywgY29uZmlndXJhdGlvbl0KICAgICAgdHlwZTogY2hhbmdlCiAgIyBBVURJVF9EQUVNT05fQUJPUlQgLSBEYWVtb24gZXJyb3Igc3RvcCByZWNvcmQKICAtIHJlY29yZF90eXBlczogREFFTU9OX0FCT1JUCiAgICBhY3Rpb246IGFib3J0ZWQtYXVkaXRkLXN0YXJ0dXAKICAgIG9iamVjdDoKICAgICAgd2hhdDogc2VydmljZQogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IHN0b3AKICAjIEFVRElUX0RBRU1PTl9BQ0NFUFQgLSBBdWRpdGQgYWNjZXB0ZWQgcmVtb3RlIGNvbm5lY3Rpb24KICAtIHJlY29yZF90eXBlczogREFFTU9OX0FDQ0VQVAogICAgYWN0aW9uOiByZW1vdGUtYXVkaXQtY29ubmVjdGVkCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNlcnZpY2UKICAgIGVjczoKICAgICAgPDw6ICplY3MtbmV0d29yawogICAgICB0eXBlOgogICAgICAgIC0gY29ubmVjdGlvbgogICAgICAgIC0gc3RhcnQKICAjIEFVRElUX0RBRU1PTl9DTE9TRSAtIEF1ZGl0ZCBjbG9zZWQgcmVtb3RlIGNvbm5lY3Rpb24KICAtIHJlY29yZF90eXBlczogREFFTU9OX0NMT1NFCiAgICBhY3Rpb246IHJlbW90ZS1hdWRpdC1kaXNjb25uZWN0ZWQKICAgIG9iamVjdDoKICAgICAgd2hhdDogc2VydmljZQogICAgZWNzOgogICAgICA8PDogKmVjcy1uZXR3b3JrCiAgICAgIHR5cGU6CiAgICAgICAgLSBjb25uZWN0aW9uCiAgICAgICAgLSBzdGFydAogICMgQVVESVRfREFFTU9OX0NPTkZJRyAtIERhZW1vbiBjb25maWcgY2hhbmdlCiAgLSByZWNvcmRfdHlwZXM6IERBRU1PTl9DT05GSUcKICAgIGFjdGlvbjogY2hhbmdlZC1hdWRpdGQtY29uZmlndXJhdGlvbgogICAgb2JqZWN0OgogICAgICB3aGF0OiBzZXJ2aWNlCiAgICBlY3M6CiAgICAgIGNhdGVnb3J5OiBbcHJvY2VzcywgY29uZmlndXJhdGlvbl0KICAgICAgdHlwZTogY2hhbmdlCiAgIyBBVURJVF9EQUVNT05fRU5EIC0gRGFlbW9uIG5vcm1hbCBzdG9wIHJlY29yZAogIC0gcmVjb3JkX3R5cGVzOiBEQUVNT05fRU5ECiAgICBhY3Rpb246IHNodXRkb3duLWF1ZGl0CiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNlcnZpY2UKICAgIGVjczoKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBzdG9wCiAgIyBBVURJVF9EQUVNT05fRVJSIC0gQXVkaXRkIGludGVybmFsIGVycm9yCiAgLSByZWNvcmRfdHlwZXM6IERBRU1PTl9FUlIKICAgIGFjdGlvbjogYXVkaXQtZXJyb3IKICAgIG9iamVjdDoKICAgICAgd2hhdDogc2VydmljZQogICAgZWNzOiAqZWNzLXByb2Nlc3MKICAjIEFVRElUX0RBRU1PTl9SRUNPTkZJRyAtIEF1ZGl0ZCBzaG91bGQgcmVjb25maWd1cmUKICAtIHJlY29yZF90eXBlczogREFFTU9OX1JFQ09ORklHCiAgICBhY3Rpb246IHJlY29uZmlndXJlZC1hdWRpdGQKICAgIG9iamVjdDoKICAgICAgd2hhdDogc2VydmljZQogICAgZWNzOgogICAgICBjYXRlZ29yeTogW3Byb2Nlc3MsIGNvbmZpZ3VyYXRpb25dCiAgICAgIHR5cGU6IGluZm8KICAjIEFVRElUX0RBRU1PTl9SRVNVTUUgLSBBdWRpdGQgc2hvdWxkIHJlc3VtZSBsb2dnaW5nCiAgLSByZWNvcmRfdHlwZXM6IERBRU1PTl9SRVNVTUUKICAgIGFjdGlvbjogcmVzdW1lZC1hdWRpdC1sb2dnaW5nCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNlcnZpY2UKICAgIGVjczoKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBjaGFuZ2UKICAjIEFVRElUX0RBRU1PTl9ST1RBVEUgLSBBdWRpdGQgc2hvdWxkIHJvdGF0ZSBsb2dzCiAgLSByZWNvcmRfdHlwZXM6IERBRU1PTl9ST1RBVEUKICAgIGFjdGlvbjogcm90YXRlZC1hdWRpdC1sb2dzCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNlcnZpY2UKICAgIGVjczoKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBjaGFuZ2UKICAjIEFVRElUX0RBRU1PTl9TVEFSVCAtIERhZW1vbiBzdGFydHVwIHJlY29yZAogIC0gcmVjb3JkX3R5cGVzOiBEQUVNT05fU1RBUlQKICAgIGFjdGlvbjogc3RhcnRlZC1hdWRpdAogICAgb2JqZWN0OgogICAgICB3aGF0OiBzZXJ2aWNlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogc3RhcnQKICAjIEFVRElUX0tFUk5FTCAtIEFzeW5jaHJvbm91cyBhdWRpdCByZWNvcmQuIE5PVCBBIFJFUVVFU1QuCiAgLSByZWNvcmRfdHlwZXM6IEtFUk5FTAogICAgYWN0aW9uOiBpbml0aWFsaXplZC1hdWRpdC1zdWJzeXN0ZW0KICAgIGVjczogKmVjcy1wcm9jZXNzCgogICMgQ29uZmlndXJhdGlvbiBjaGFuZ2UgZXZlbnRzCgogICMgQVVESVRfVVNZU19DT05GSUcgLSBVc2VyIHNwYWNlIHN5c3RlbSBjb25maWcgY2hhbmdlCiAgLSByZWNvcmRfdHlwZXM6IFVTWVNfQ09ORklHCiAgICBhY3Rpb246IGNoYW5nZWQtY29uZmlndXJhdGlvbgogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBvcAogICAgICB3aGF0OiBzeXN0ZW0KICAgIGVjczoKICAgICAgY2F0ZWdvcnk6IGNvbmZpZ3VyYXRpb24KICAgICAgdHlwZTogY2hhbmdlCiAgIyBBVURJVF9ORVRGSUxURVJfQ0ZHIC0gTmV0ZmlsdGVyIGNoYWluIG1vZGlmaWNhdGlvbnMKICAtIHJlY29yZF90eXBlczogTkVURklMVEVSX0NGRwogICAgYWN0aW9uOiBsb2FkZWQtZmlyZXdhbGwtcnVsZS10bwogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiB0YWJsZQogICAgICB3aGF0OiBmaXJld2FsbAogICAgZWNzOgogICAgICBjYXRlZ29yeTogY29uZmlndXJhdGlvbgogICAgICB0eXBlOiBjaGFuZ2UKICAjIEFVRElUX0ZFQVRVUkVfQ0hBTkdFIC0gYXVkaXQgbG9nIGxpc3RpbmcgZmVhdHVyZSBjaGFuZ2VzCiAgLSByZWNvcmRfdHlwZXM6IEZFQVRVUkVfQ0hBTkdFCiAgICBhY3Rpb246IGNoYW5nZWQtYXVkaXQtZmVhdHVyZQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBmZWF0dXJlCiAgICAgIHdoYXQ6IHN5c3RlbQogICAgZWNzOgogICAgICBjYXRlZ29yeTogY29uZmlndXJhdGlvbgogICAgICB0eXBlOiBjaGFuZ2UKICAjIEFVRElUX1JFUExBQ0UgLSBSZXBsYWNlIGF1ZGl0ZCBpZiB0aGlzIHBhY2tldCB1bmFuc3dlcmQKCiAgIyBUVFkgZXZlbnRzCgogIC0gcmVjb3JkX3R5cGVzOgogICAgICAjIEFVRElUX1RUWSAtIElucHV0IG9uIGFuIGFkbWluaXN0cmF0aXZlIFRUWQogICAgICAtIFRUWQogICAgICAjIEFVRElUX1VTRVJfVFRZIC0gTm9uLUlDQU5PTiBUVFkgaW5wdXQgbWVhbmluZwogICAgICAtIFVTRVJfVFRZCiAgICBhY3Rpb246IHR5cGVkCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGRhdGEKICAgICAgd2hhdDoga2V5c3Ryb2tlcwogICAgaG93OiBbY29tbSwgZXhlXQoKICAjIFBvbGljeSBldmVudHMKCiAgIyBBVURJVF9BVkMgLSBTRSBMaW51eCBhdmMgZGVuaWFsIG9yIGdyYW50IChzZWxpbnV4KQogIC0gcmVjb3JkX3R5cGVzOiBBVkMKICAgIGFjdGlvbjogdmlvbGF0ZWQtc2VsaW51eC1wb2xpY3kKICAgIHN1YmplY3Q6CiAgICAgIHByaW1hcnk6IHNjb250ZXh0CiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IHRjb250ZXh0CiAgICAgIHNlY29uZGFyeTogdGNsYXNzCiAgICBoYXNfZmllbGRzOgogICAgICAtIHNlcmVzdWx0CiAgIyBBVURJVF9BVkMgLSBTRSBMaW51eCBhdmMgZGVuaWFsIG9yIGdyYW50IChhcHBhcm1vcikKICAtIHJlY29yZF90eXBlczogQVZDCiAgICBhY3Rpb246IHZpb2xhdGVkLWFwcGFybW9yLXBvbGljeQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBvcGVyYXRpb24KICAgICAgc2Vjb25kYXJ5OiBbcmVxdWVzdGVkX21hc2ssIGRlbmllZF9tYXNrLCBjYXBuYW1lXQogICAgICB3aGF0OiBwb2xpY3kKICAgIGhhc19maWVsZHM6CiAgICAgIC0gYXBwYXJtb3IKICAjIEFVRElUX0ZTX1JFTEFCRUwgLSBGaWxlc3lzdGVtIHJlbGFiZWxlZAogIC0gcmVjb3JkX3R5cGVzOiBGU19SRUxBQkVMCiAgICBhY3Rpb246IHJlbGFiZWxlZC1maWxlc3lzdGVtCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IG1hYy1jb25maWcKICAjIEFVRElUX0xBQkVMX0xFVkVMX0NIQU5HRSAtIE9iamVjdCdzIGxldmVsIHdhcyBjaGFuZ2VkCiAgLSByZWNvcmRfdHlwZXM6IExBQkVMX0xFVkVMX0NIQU5HRQogICAgYWN0aW9uOiBtb2RpZmllZC1sZXZlbC1vZgogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBwcmludGVyCiAgICAgIHdoYXQ6IHByaW50ZXIKICAjIEFVRElUX0xBQkVMX09WRVJSSURFIC0gQWRtaW4gaXMgb3ZlcnJpZGluZyBhIGxhYmVsCiAgLSByZWNvcmRfdHlwZXM6IExBQkVMX09WRVJSSURFCiAgICBhY3Rpb246IG92ZXJyb2RlLWxhYmVsLW9mCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IG1hYy1jb25maWcKICAjIEFVRElUX01BQ19DSEVDSyAtIFVzZXIgc3BhY2UgTUFDIGRlY2lzaW9uIHJlc3VsdHMKICAtIHJlY29yZF90eXBlczogTUFDX0NIRUNLCiAgICBhY3Rpb246IG1hYy1wZXJtaXNzaW9uCiAgIyBBVURJVF9NQUNfQ09ORklHX0NIQU5HRSAtIENoYW5nZXMgdG8gYm9vbGVhbnMKICAtIHJlY29yZF90eXBlczogTUFDX0NPTkZJR19DSEFOR0UKICAgIGFjdGlvbjogY2hhbmdlZC1zZWxpbnV4LWJvb2xlYW4KICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogYm9vbAogICAgICB3aGF0OiBtYWMtY29uZmlnCiAgICBlY3M6CiAgICAgIGNhdGVnb3J5OiBjb25maWd1cmF0aW9uCiAgICAgIHR5cGU6IGNoYW5nZQogICMgQVVESVRfTUFDX1BPTElDWV9MT0FEIC0gUG9saWN5IGZpbGUgbG9hZAogIC0gcmVjb3JkX3R5cGVzOiBNQUNfUE9MSUNZX0xPQUQKICAgIGFjdGlvbjogbG9hZGVkLXNlbGludXgtcG9saWN5CiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IG1hYy1jb25maWcKICAgIGVjczoKICAgICAgY2F0ZWdvcnk6IGNvbmZpZ3VyYXRpb24KICAgICAgdHlwZTogYWNjZXNzCiAgIyBBVURJVF9NQUNfU1RBVFVTIC0gQ2hhbmdlZCBlbmZvcmNpbmcscGVybWlzc2l2ZSxvZmYKICAtIHJlY29yZF90eXBlczogTUFDX1NUQVRVUwogICAgYWN0aW9uOiBjaGFuZ2VkLXNlbGludXgtZW5mb3JjZW1lbnQKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogZW5mb3JjaW5nCiAgICAgIHdoYXQ6IG1hYy1jb25maWcKICAgIGVjczoKICAgICAgY2F0ZWdvcnk6IGNvbmZpZ3VyYXRpb24KICAgICAgdHlwZTogY2hhbmdlCiAgIyBBVURJVF9VU0VSX0FWQyAtIFVzZXIgc3BhY2UgYXZjIG1lc3NhZ2UKICAtIHJlY29yZF90eXBlczogVVNFUl9BVkMKICAgIGFjdGlvbjogYWNjZXNzLXBlcm1pc3Npb24KICAjIEFVRElUX1VTRVJfTUFDX0NPTkZJR19DSEFOR0UgLSBDaGFuZ2UgbWFkZSB0byBNQUMgcG9saWN5CiAgLSByZWNvcmRfdHlwZXM6IFVTRVJfTUFDX0NPTkZJR19DSEFOR0UKICAgIGFjdGlvbjogY2hhbmdlZC1tYWMtY29uZmlndXJhdGlvbgogICAgb2JqZWN0OgogICAgICB3aGF0OiBtYWMtY29uZmlnCiAgICBlY3M6CiAgICAgIGNhdGVnb3J5OiBjb25maWd1cmF0aW9uCiAgICAgIHR5cGU6IGNoYW5nZQogICMgQVVESVRfVVNFUl9NQUNfUE9MSUNZX0xPQUQgLSBVc2Vyc3BjIGRhZW1vbiBsb2FkZWQgcG9saWMKICAtIHJlY29yZF90eXBlczogVVNFUl9NQUNfUE9MSUNZX0xPQUQKICAgIGFjdGlvbjogbG9hZGVkLW1hYy1wb2xpY3kKICAgIG9iamVjdDoKICAgICAgd2hhdDogbWFjLWNvbmZpZwogICAgZWNzOgogICAgICBjYXRlZ29yeTogY29uZmlndXJhdGlvbgogICAgICB0eXBlOiBhY2Nlc3MKICAjIEFVRElUX1VTRVJfU0VMSU5VWF9FUlIgLSBTRSBMaW51eCB1c2VyIHNwYWNlIGVycm9yCiAgLSByZWNvcmRfdHlwZXM6IFVTRVJfU0VMSU5VWF9FUlIKICAgIGFjdGlvbjogYWNjZXNzLWVycm9yCiAgIyBBVURJVF9TRUNDT01QIC0gU2VjdXJlIENvbXB1dGluZyBldmVudAogIC0gcmVjb3JkX3R5cGVzOiBTRUNDT01QCiAgICBhY3Rpb246IHZpb2xhdGVkLXNlY2NvbXAtcG9saWN5CiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IHN5c2NhbGwKICAgICAgd2hhdDogcHJvY2VzcwogICMgQVVESVRfU0VMSU5VWF9FUlIgLSBJbnRlcm5hbCBTRSBMaW51eCBFcnJvcnMKICAtIGFjdGlvbjogY2F1c2VkLW1hYy1wb2xpY3ktZXJyb3IKICAgIG9iamVjdDoKICAgICAgd2hhdDogc3lzdGVtCiAgICByZWNvcmRfdHlwZXM6IFNFTElOVVhfRVJSCiAgIyBBVURJVF9BUFBBUk1PUl9BTExPV0VECiAgIyBBVURJVF9BUFBBUk1PUl9ERU5JRUQKICAjIEFVRElUX0FQUEFSTU9SX0VSUk9SCiAgIyBBVURJVF9BVkNfUEFUSCAtIGRlbnRyeSwgdmZzbW91bnQgcGFpciBmcm9tIGF2YwogICMgQVVESVRfQVBQQVJNT1JfQVVESVQKICAjIEFVRElUX0FQUEFSTU9SX0hJTlQKICAjIEFVRElUX0FQUEFSTU9SX1NUQVRVUwogICMgQVVESVRfQVBQQVJNT1JfRVJST1IKICAjIEFVRElUX0RFVl9BTExPQyAtIERldmljZSB3YXMgYWxsb2NhdGVkCiAgIyBBVURJVF9ERVZfREVBTExPQyAtIERldmljZSB3YXMgZGVhbGxvY2F0ZWQKICAjIEFVRElUX01BQ19VTkxCTF9BTExPVyAtIE5ldExhYmVsOiBhbGxvdyB1bmxhYmVsZWQgdHJhZmZpYwogICMgQVVESVRfTUFDX0NJUFNPVjRfQUREIC0gTmV0TGFiZWw6IGFkZCBDSVBTT3Y0IERPSSBlbnRyeQogICMgQVVESVRfTUFDX0NJUFNPVjRfREVMIC0gTmV0TGFiZWw6IGRlbCBDSVBTT3Y0IERPSSBlbnRyeQogICMgQVVESVRfTUFDX01BUF9BREQgLSBOZXRMYWJlbDogYWRkIExTTSBkb21haW4gbWFwcGluZwogICMgQVVESVRfTUFDX01BUF9ERUwgLSBOZXRMYWJlbDogZGVsIExTTSBkb21haW4gbWFwcGluZwogICMgQVVESVRfTUFDX0lQU0VDX0VWRU5UIC0gQXVkaXQgYW4gSVBTZWMgZXZlbnQKICAjIEFVRElUX01BQ19VTkxCTF9TVENBREQgLSBOZXRMYWJlbDogYWRkIGEgc3RhdGljIGxhYmVsCiAgIyBBVURJVF9NQUNfVU5MQkxfU1RDREVMIC0gTmV0TGFiZWw6IGRlbCBhIHN0YXRpYyBsYWJlbAogICMgQVVESVRfTUFDX0NBTElQU09fQUREIC0gTmV0TGFiZWw6IGFkZCBDQUxJUFNPIERPSSBlbnRyeQogICMgQVVESVRfTUFDX0NBTElQU09fREVMIC0gTmV0TGFiZWw6IGRlbCBDQUxJUFNPIERPSSBlbnRyeQogICMgQVVESVRfVVNFUl9MQUJFTEVEX0VYUE9SVCAtIE9iamVjdCBleHBvcnRlZCB3aXRoIGxhYmVsCiAgIyBBVURJVF9VU0VSX1VOTEFCRUxFRF9FWFBPUlQgLSBPYmplY3QgZXhwb3J0ZWQgd2l0aG91dCBsYWJlbAoKICAjIENyeXB0byBldmVudHMKCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgYWN0aW9uOiBuZWdvdGlhdGVkLWNyeXB0by1rZXkKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogZnAKICAgICAgc2Vjb25kYXJ5OiBbYWRkciwgaG9zdG5hbWVdCiAgICAgIHdoYXQ6IHVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBDUllQVE9fS0VZX1VTRVIKICAgIHNvdXJjZV9pcDogW2FkZHJdCiAgICBlY3M6ICplY3MtcHJvY2VzcwogIC0gYWN0aW9uOiBjcnlwdG8tb2ZmaWNlci1sb2dnZWQtaW4KICAgIHJlY29yZF90eXBlczogQ1JZUFRPX0xPR0lOCiAgLSBhY3Rpb246IGNyeXB0by1vZmZpY2VyLWxvZ2dlZC1vdXQKICAgIHJlY29yZF90eXBlczogQ1JZUFRPX0xPR09VVAogICAgZWNzOiAqZWNzLXByb2Nlc3MKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICBhY3Rpb246IHN0YXJ0ZWQtY3J5cHRvLXNlc3Npb24KICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogYWRkcgogICAgICBzZWNvbmRhcnk6IFtycG9ydF0KICAgIHJlY29yZF90eXBlczogQ1JZUFRPX1NFU1NJT04KICAgIHNvdXJjZV9pcDogW2FkZHJdCiAgICBlY3M6ICplY3MtcHJvY2VzcwogIC0gYWN0aW9uOiBhY2Nlc3MtcmVzdWx0CiAgICByZWNvcmRfdHlwZXM6IERBQ19DSEVDSwoKICAjIEFub21hbGllcwoKICAjIEFVRElUX0FOT01fQUJFTkQgLSBQcm9jZXNzIGVuZGVkIGFibm9ybWFsbHkKICAtIHJlY29yZF90eXBlczogQU5PTV9BQkVORAogICAgYWN0aW9uOiBjcmFzaGVkLXByb2dyYW0KICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogW2NvbW0sIGV4ZV0KICAgICAgc2Vjb25kYXJ5OiBwaWQKICAgICAgd2hhdDogcHJvY2VzcwogICAgaG93OiBzaWcKICAgIGVjczoKICAgICAgIyBjb25zaWRlciBhZGRpbmcgYW4gYW5vbWFseSBjYXRlZ29yeSB3aGVuIHdlIGludHJvZHVjZQogICAgICAjIHRvIEVDUwogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IGVuZAogICMgQVVESVRfQU5PTV9FWEVDIC0gRXhlY3V0aW9uIG9mIGZpbGUKICAtIHJlY29yZF90eXBlczogQU5PTV9FWEVDCiAgICBhY3Rpb246IGF0dGVtcHRlZC1leGVjdXRpb24tb2YtZm9yYmlkZGVuLXByb2dyYW0KICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogY21kCiAgICAgIHdoYXQ6IHByb2Nlc3MKICAgIGhvdzogdGVybWluYWwKICAgIGVjczoKICAgICAgIyBjb25zaWRlciBhZGRpbmcgYW4gYW5vbWFseSBjYXRlZ29yeSB3aGVuIHdlIGludHJvZHVjZQogICAgICAjIHRvIEVDUwogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IHN0YXJ0CiAgIyBBVURJVF9BTk9NX0xJTksgLSBTdXNwaWNpb3VzIHVzZSBvZiBmaWxlIGxpbmtzCiAgLSByZWNvcmRfdHlwZXM6IEFOT01fTElOSwogICAgYWN0aW9uOiB1c2VkLXN1c3BpY2lvdXMtbGluawogICMgQVVESVRfQU5PTV9MT0dJTl9GQUlMVVJFUyAtIEZhaWxlZCBsb2dpbiBsaW1pdCByZWFjaGVkCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBBTk9NX0xPR0lOX0ZBSUxVUkVTCiAgICBhY3Rpb246IGZhaWxlZC1sb2ctaW4tdG9vLW1hbnktdGltZXMtdG8KICAjIEFVRElUX0FOT01fTE9HSU5fTE9DQVRJT04gLSBMb2dpbiBmcm9tIGZvcmJpZGRlbiBsb2NhdGlvbgogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogQU5PTV9MT0dJTl9MT0NBVElPTgogICAgYWN0aW9uOiBhdHRlbXB0ZWQtbG9nLWluLWZyb20tdW51c3VhbC1wbGFjZS10bwogICMgQVVESVRfQU5PTV9MT0dJTl9TRVNTSU9OUyAtIE1heCBjb25jdXJyZW50IHNlc3Npb25zIHJlYWNoZWQKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IEFOT01fTE9HSU5fU0VTU0lPTlMKICAgIGFjdGlvbjogb3BlbmVkLXRvby1tYW55LXNlc3Npb25zLXRvCiAgIyBBVURJVF9BTk9NX0xPR0lOX1RJTUUgLSBMb2dpbiBhdHRlbXB0ZWQgYXQgYmFkIHRpbWUKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IEFOT01fTE9HSU5fVElNRQogICAgYWN0aW9uOiBhdHRlbXB0ZWQtbG9nLWluLWR1cmluZy11bnVzdWFsLWhvdXItdG8KICAjIEFVRElUX0FOT01fUFJPTUlTQ1VPVVMgLSBEZXZpY2UgY2hhbmdlZCBwcm9taXNjdW91cyBtb2RlCiAgLSByZWNvcmRfdHlwZXM6IEFOT01fUFJPTUlTQ1VPVVMKICAgIGFjdGlvbjogY2hhbmdlZC1wcm9taXNjdW91cy1tb2RlLW9uLWRldmljZSAjIENvdWxkIGJlIGVudGVyZWQgb3IgZXhpdGVkIGJhc2VkIG9uIHByb20gZmllbGQuCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGRldgogICAgICB3aGF0OiBuZXR3b3JrLWRldmljZQogICMgQVVESVRfQU5PTV9SQkFDX0lOVEVHUklUWV9GQUlMIC0gUkJBQyBmaWxlIGludGVncml0eSBmYWlsdXJlCiAgLSByZWNvcmRfdHlwZXM6IEFOT01fUkJBQ19JTlRFR1JJVFlfRkFJTAogICAgYWN0aW9uOiB0ZXN0ZWQtZmlsZS1zeXN0ZW0taW50ZWdyaXR5LW9mCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGhvc3RuYW1lCiAgICAgIHdoYXQ6IGZpbGVzeXN0ZW0KICAjIEFVRElUX0FOT01fTE9HSU5fQUNDVCAtIExvZ2luIGF0dGVtcHRlZCB0byB3YXRjaGVkIGFjY3QKICAjIEFVRElUX0FOT01fTUFYX0RBQyAtIE1heCBEQUMgZmFpbHVyZXMgcmVhY2hlZAogICMgQVVESVRfQU5PTV9NQVhfTUFDIC0gTWF4IE1BQyBmYWlsdXJlcyByZWFjaGVkCiAgIyBBVURJVF9BTk9NX0FNVFVfRkFJTCAtIEFNVFUgZmFpbHVyZQogICMgQVVESVRfQU5PTV9SQkFDX0ZBSUwgLSBSQkFDIHNlbGYgdGVzdCBmYWlsdXJlCiAgIyBBVURJVF9BTk9NX0NSWVBUT19GQUlMIC0gQ3J5cHRvIHN5c3RlbSB0ZXN0IGZhaWx1cmUKICAjIEFVRElUX0FOT01fTUtfRVhFIC0gTWFrZSBhbiBleGVjdXRhYmxlCiAgIyBBVURJVF9BTk9NX0FDQ0VTU19GUyAtIEFjY2VzcyBvZiBmaWxlIG9yIGRpcgogICMgQVVESVRfQU5PTV9BRERfQUNDVCAtIEFkZGluZyBhbiBhY2N0CiAgIyBBVURJVF9BTk9NX0RFTF9BQ0NUIC0gRGVsZXRpbmcgYW4gYWNjdAogICMgQVVESVRfQU5PTV9NT0RfQUNDVCAtIENoYW5naW5nIGFuIGFjY3QKICAjIEFVRElUX0FOT01fUk9PVF9UUkFOUyAtIFVzZXIgYmVjYW1lIHJvb3QKICAjIEFVRElUX0FOT01fTE9HSU5fU0VSVklDRSAtIFNlcnZpY2UgYWNjdCBhdHRlbXB0ZWQgbG9naW4KCiAgIyBBbm9tYWx5IHJlc3BvbnNlcwoKICAjIEFVRElUX1JFU1BfQU5PTUFMWSAtIEFub21hbHkgbm90IHJlYWN0ZWQgdG8KICAjIEFVRElUX1JFU1BfQUxFUlQgLSBBbGVydCBlbWFpbCB3YXMgc2VudAogICMgQVVESVRfUkVTUF9LSUxMX1BST0MgLSBLaWxsIHByb2dyYW0KICAjIEFVRElUX1JFU1BfVEVSTV9BQ0NFU1MgLSBUZXJtaW5hdGUgc2Vzc2lvbgogICMgQVVESVRfUkVTUF9BQ0NUX1JFTU9URSAtIEFjY3QgbG9ja2VkIGZyb20gcmVtb3RlIGFjY2VzcwogICMgQVVESVRfUkVTUF9BQ0NUX0xPQ0tfVElNRUQgLSBVc2VyIGFjY3QgbG9ja2VkIGZvciB0aW1lCiAgIyBBVURJVF9SRVNQX0FDQ1RfVU5MT0NLX1RJTUVEIC0gVXNlciBhY2N0IHVubG9ja2VkIGZyb20gdGltZQogICMgQVVESVRfUkVTUF9BQ0NUX0xPQ0sgLSBVc2VyIGFjY3Qgd2FzIGxvY2tlZAogICMgQVVESVRfUkVTUF9URVJNX0xPQ0sgLSBUZXJtaW5hbCB3YXMgbG9ja2VkCiAgIyBBVURJVF9SRVNQX1NFQk9PTCAtIFNldCBhbiBTRSBMaW51eCBib29sZWFuCiAgIyBBVURJVF9SRVNQX0VYRUMgLSBFeGVjdXRlIGEgc2NyaXB0CiAgIyBBVURJVF9SRVNQX1NJTkdMRSAtIEdvIHRvIHNpbmdsZSB1c2VyIG1vZGUKICAjIEFVRElUX1JFU1BfSEFMVCAtIHRha2UgdGhlIHN5c3RlbSBkb3duCiAgIyBBVURJVF9SRVNQX09SSUdJTl9CTE9DSyAtIEFkZHJlc3MgYmxvY2tlZCBieSBpcHRhYmxlcwogICMgQVVESVRfUkVTUF9PUklHSU5fQkxPQ0tfVElNRUQgLSBBZGRyZXNzIGJsb2NrZWQgZm9yIHRpbWUKCiAgIyBBdWRpdCBydWxlIGV2ZW50cwoKICAjIEFVRElUX1NZU0NBTEwgLSBTeXNjYWxsIGV2ZW50CiAgIyBBVURJVF9QQVRIIC0gRmlsZW5hbWUgcGF0aCBpbmZvcm1hdGlvbgogICMgQVVESVRfSVBDIC0gSVBDIHJlY29yZAogICMgQVVESVRfU09DS0VUQ0FMTCAtIHN5c19zb2NrZXRjYWxsIGFyZ3VtZW50cwogICMgQVVESVRfU09DS0FERFIgLSBzb2NrYWRkciBjb3BpZWQgYXMgc3lzY2FsbCBhcmcKICAjIEFVRElUX0NXRCAtIEN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkKICAjIEFVRElUX0VYRUNWRSAtIGV4ZWN2ZSBhcmd1bWVudHMKICAjIEFVRElUX0lQQ19TRVRfUEVSTSAtIElQQyBuZXcgcGVybWlzc2lvbnMgcmVjb3JkIHR5cGUKICAjIEFVRElUX01RX09QRU4gLSBQT1NJWCBNUSBvcGVuIHJlY29yZCB0eXBlCiAgIyBBVURJVF9NUV9TRU5EUkVDVi0gUE9TSVggTVEgc2VuZC9yZWNlaXZlIHJlY29yZCB0eXBlCiAgIyBBVURJVF9NUV9OT1RJRlkgLSBQT1NJWCBNUSBub3RpZnkgcmVjb3JkIHR5cGUKICAjIEFVRElUX01RX0dFVFNFVEFUVFIgLSBQT1NJWCBNUSBnZXQvc2V0IGF0dHJpYnV0ZSByZWNvcmQgdHlwZQogICMgQVVESVRfRkRfUEFJUiAtIGF1ZGl0IHJlY29yZCBmb3IgcGlwZS9zb2NrZXRwYWlyCiAgIyBBVURJVF9PQkpfUElEIC0gcHRyYWNlIHRhcmdldAogICMgQVVESVRfQlBSTV9GQ0FQUyAtIEluZm9ybWF0aW9uIGFib3V0IGZjYXBzIGluY3JlYXNpbmcgcGVybXMKICAjIEFVRElUX0NBUFNFVCAtIFJlY29yZCBzaG93aW5nIGFyZ3VtZW50IHRvIHN5c19jYXBzZXQKICAjIEFVRElUX01NQVAgLSBSZWNvcmQgc2hvd2luZyBkZXNjcmlwdG9yIGFuZCBmbGFncyBpbiBtbWFwCiAgIyBBVURJVF9ORVRGSUxURVJfUEtUIC0gUGFja2V0cyB0cmF2ZXJzaW5nIG5ldGZpbHRlciBjaGFpbnMKCiAgIyBJbnRlZ3JpdHkgY2hlY2tzCgogICMgQVVESVRfSU5URUdSSVRZX0RBVEEgLSBEYXRhIGludGVncml0eSB2ZXJpZmljYXRpb24KICAjIEFVRElUX0lOVEVHUklUWV9NRVRBREFUQSAtIE1ldGFkYXRhIGludGVncml0eSB2ZXJpZmljYXRpb24KICAjIEFVRElUX0lOVEVHUklUWV9TVEFUVVMgLSBJbnRlZ3JpdHkgZW5hYmxlIHN0YXR1cwogICMgQVVESVRfSU5URUdSSVRZX0hBU0ggLSBJbnRlZ3JpdHkgSEFTSCB0eXBlCiAgIyBBVURJVF9JTlRFR1JJVFlfUENSIC0gUENSIGludmFsaWRhdGlvbiBtc2dzCiAgIyBBVURJVF9JTlRFR1JJVFlfUlVMRSAtIFBvbGljeSBydWxlCgogICMgVmFyaW91cwoKICAjIEFVRElUX1VTRVIgLSBNZXNzYWdlIGZyb20gdXNlcnNwYWNlIC0tIGRlcHJlY2F0ZWQKICAtIHJlY29yZF90eXBlczogVVNFUgogICAgYWN0aW9uOiBzZW50LW1lc3NhZ2UKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogYWRkcgo=") + value, _ = base64.StdEncoding.DecodeString("LS0tCiMgTWFjcm9zIGRlY2xhcmVzIHNvbWUgWUFNTCBhbmNob3JzIHRoYXQgY2FuIGJlIHJlZmVyZW5jZWQgZm9yIHNvbWUgY29tbW9uCiMgb2JqZWN0IHR5cGUgbm9ybWFsaXphdGlvbnMgbGlrZSB1c2VyLXNlc3Npb24sIHNvY2tldCwgb3IgcHJvY2Vzcy4KbWFjcm9zOgogIC0gJmRlZmF1bHRzCiAgICBzdWJqZWN0OgogICAgICBwcmltYXJ5OiBhdWlkCiAgICAgIHNlY29uZGFyeTogdWlkCiAgICBob3c6IFtleGUsIGNvbW1dCgogIC0gJm1hY3JvLXVzZXItc2Vzc2lvbgogICAgc3ViamVjdDoKICAgICAgcHJpbWFyeTogYXVpZAogICAgICBzZWNvbmRhcnk6IFthY2N0LCBpZCwgdWlkXQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiB0ZXJtaW5hbAogICAgICBzZWNvbmRhcnk6IFthZGRyLCBob3N0bmFtZV0KICAgICAgd2hhdDogdXNlci1zZXNzaW9uCiAgICBob3c6IFtleGUsIHRlcm1pbmFsXQoKICAtICZtYWNyby1zb2NrZXQKICAgIDw8OiAqZGVmYXVsdHMKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogW2FkZHIsIHBhdGhdCiAgICAgIHNlY29uZGFyeTogcG9ydAogICAgICB3aGF0OiBzb2NrZXQKCiAgLSAmbWFjcm8tcHJvY2VzcwogICAgPDw6ICpkZWZhdWx0cwogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBbY21kLCBleGUsIGNvbW1dCiAgICAgIHNlY29uZGFyeTogcGlkCiAgICAgIHdoYXQ6IHByb2Nlc3MKICAgIGhvdzogdGVybWluYWwKCiAgLSAmZWNzLWlhbQogICAgY2F0ZWdvcnk6IGlhbQogICAgdHlwZTogaW5mbwoKICAtICZlY3MtYXV0aAogICAgY2F0ZWdvcnk6IGF1dGhlbnRpY2F0aW9uCiAgICB0eXBlOiBpbmZvCiAgICBtYXBwaW5nczoKICAgICAgLSBmcm9tOiBzdWJqZWN0LnByaW1hcnkKICAgICAgICB0bzogdXNlcgogICAgICAtIGZyb206IHN1YmplY3Quc2Vjb25kYXJ5CiAgICAgICAgdG86IHVzZXIuZWZmZWN0aXZlCgogIC0gJmVjcy1zZXNzaW9uCiAgICBjYXRlZ29yeTogc2Vzc2lvbgogICAgdHlwZTogaW5mbwogICAgbWFwcGluZ3M6CiAgICAgIC0gZnJvbTogc3ViamVjdC5wcmltYXJ5CiAgICAgICAgdG86IHVzZXIKICAgICAgLSBmcm9tOiBzdWJqZWN0LnNlY29uZGFyeQogICAgICAgIHRvOiB1c2VyLmVmZmVjdGl2ZQoKICAtICZlY3MtaG9zdAogICAgY2F0ZWdvcnk6IGhvc3QKICAgIHR5cGU6IGluZm8KCiAgLSAmZWNzLXByb2Nlc3MKICAgIGNhdGVnb3J5OiBwcm9jZXNzCiAgICB0eXBlOiBpbmZvCgogIC0gJmVjcy1maWxlCiAgICBjYXRlZ29yeTogZmlsZQogICAgdHlwZTogaW5mbwoKICAtICZlY3MtZHJpdmVyCiAgICBjYXRlZ29yeTogZHJpdmVyCiAgICB0eXBlOiBpbmZvCgogIC0gJmVjcy1uZXR3b3JrCiAgICBjYXRlZ29yeTogbmV0d29yawogICAgdHlwZToKICAgICAgLSBjb25uZWN0aW9uCiAgICAgIC0gaW5mbwoKICAtICZlY3MtdXNlci1tb2RpZmljYXRpb24tbWFwcGluZ3MKICAgIG1hcHBpbmdzOgogICAgICAtIGZyb206IHN1YmplY3QucHJpbWFyeQogICAgICAgIHRvOiB1c2VyCiAgICAgIC0gZnJvbTogc3ViamVjdC5zZWNvbmRhcnkKICAgICAgICB0bzogdXNlci5lZmZlY3RpdmUKICAgICAgLSBmcm9tOiBvYmplY3QucHJpbWFyeQogICAgICAgIHRvOiB1c2VyLnRhcmdldAoKICAtICZlY3MtZ3JvdXAtbW9kaWZpY2F0aW9uLW1hcHBpbmdzCiAgICBtYXBwaW5nczoKICAgICAgLSBmcm9tOiBzdWJqZWN0LnByaW1hcnkKICAgICAgICB0bzogdXNlcgogICAgICAtIGZyb206IHN1YmplY3Quc2Vjb25kYXJ5CiAgICAgICAgdG86IHVzZXIuZWZmZWN0aXZlCiAgICAgIC0gZnJvbTogb2JqZWN0LnByaW1hcnkKICAgICAgICB0bzogZ3JvdXAudGFyZ2V0CgojIE5vcm1hbGl6YXRpb25zIGlzIGEgbGlzdCBvZiBkZWNsYXJhdGlvbnMgc3BlY2lmeWluZyBob3cgdG8gbm9ybWFsaXplIHRoZSBkYXRhCiMgY29udGFpbmVkIGluIGFuIGV2ZW50LiBUaGUgbm9ybWFsaXphdGlvbiBjYW4gYmUgYXBwbGllZCBiYXNlZCBvbiB0aGUgc3lzY2FsbAojIG5hbWUgKGUuZy4gY29ubmVjdCwgb3Blbikgb3IgYmFzZWQgb24gdGhlIHJlY29yZCB0eXBlIChlLmcuIFVTRVJfTE9HSU4pLgojIE5vIHR3byBub3JtYWxpemF0aW9ucyBjYW4gYXBwbHkgdG8gdGhlIHNhbWUgc3lzY2FsbCBvciByZWNvcmQgdHlwZS4gVGhpcwojIHdpbGwgcmVzdWx0IGluIGEgZmFpbHVyZSBhdCBsb2FkIHRpbWUuCiMKIyBFYWNoIG5vcm1hbGl6YXRpb24gc2hvdWxkIHNwZWNpZnk6CiMgICBhY3Rpb24gLSB3aGF0IGhhcHBlbmVkCiMgICBhY3RvciAgLSB3aG8gZGlkIHRoaXMgb3Igd2hvIHRyaWdnZXJlZCB0aGUgZXZlbnQKIyAgIG9iamVjdCAtIHdoYXQgd2FzIHRoZSAidGhpbmciIGludm9sdmVkIGluIHRoZSBhY3Rpb24gKGUuZy4gcHJvY2Vzcywgc29ja2V0KQojICAgaG93ICAgIC0gaG93IHdhcyB0aGUgYWN0aW9uIHBlcmZvcm1lZCAoZS5nLiBleGUgb3IgdGVybWluYWwpCm5vcm1hbGl6YXRpb25zOgogIC0gZWNzOiAqZWNzLXByb2Nlc3MKICAgIHN5c2NhbGxzOgogICAgICAtICcqJyAjIHRoaXMgaXMgYSBjYXRjaCBhbGwKICAtIGFjdGlvbjogb3BlbmVkLWZpbGUKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgc3lzY2FsbHM6CiAgICAgICMgY3JlYXQgLSBvcGVuIGFuZCBwb3NzaWJseSBjcmVhdGUgYSBmaWxlCiAgICAgIC0gY3JlYXQKICAgIGVjczoKICAgICAgPDw6ICplY3MtZmlsZQogICAgICB0eXBlOiBjcmVhdGlvbgogIC0gYWN0aW9uOiBvcGVuZWQtZmlsZQogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBmYWxsb2NhdGUgLSBtYW5pcHVsYXRlIGZpbGUgc3BhY2UKICAgICAgLSBmYWxsb2NhdGUKICAgICAgIyB0cnVuY2F0ZSAtIHRydW5jYXRlIGEgZmlsZSB0byBhIHNwZWNpZmllZCBsZW5ndGgKICAgICAgLSB0cnVuY2F0ZQogICAgICAjIGZ0cnVuY2F0ZSAtIHRydW5jYXRlIGEgZmlsZSB0byBhIHNwZWNpZmllZCBsZW5ndGgKICAgICAgLSBmdHJ1bmNhdGUKICAgIGVjczoKICAgICAgPDw6ICplY3MtZmlsZQogICAgICAjIHRlY2huaWNhbGx5IHlvdSBjYW4gdHJ1bmNhdGUgYSBmaWxlIHRvIHRoZSBzYW1lIGxlbmd0aAogICAgICAjIGJ1dCByZWdhcmRsZXNzLCB3ZSBjb25zaWRlciB0aGlzIGEgY2hhbmdlCiAgICAgIHR5cGU6IGNoYW5nZQogIC0gYWN0aW9uOiBvcGVuZWQtZmlsZQogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBvcGVuIC0gb3BlbiBhbmQgcG9zc2libHkgY3JlYXRlIGEgZmlsZQogICAgICAtIG9wZW4KICAgICAgIyBvcGVuYXQgLSBvcGVuIGFuZCBwb3NzaWJseSBjcmVhdGUgYSBmaWxlCiAgICAgIC0gb3BlbmF0CiAgICAgICMgcmVhZGxpbmsgLSByZWFkIHZhbHVlIG9mIGEgc3ltYm9saWMgbGluawogICAgICAtIHJlYWRsaW5rCiAgICAgICMgcmVhZGxpbmthdCAtIHJlYWQgdmFsdWUgb2YgYSBzeW1ib2xpYyBsaW5rCiAgICAgIC0gcmVhZGxpbmthdAogICAgZWNzOiAqZWNzLWZpbGUKICAtIGFjdGlvbjogcmVhZC1maWxlCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIHJlYWQgLSByZWFkIGZyb20gYSBmaWxlIGRlc2NyaXB0b3IKICAgICAgLSByZWFkCiAgICBlY3M6ICplY3MtZmlsZQogIC0gYWN0aW9uOiB3cm90ZS10by1maWxlCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIHdyaXRlIC0gd3JpdGUgdG8gYSBmaWxlIGRlc2NyaXB0b3IKICAgICAgLSB3cml0ZQogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgIHR5cGU6IGNoYW5nZQogIC0gYWN0aW9uOiBjaGFuZ2VkLWZpbGUtYXR0cmlidXRlcy1vZgogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBzZXR4YXR0ciAtIHNldCBhbiBleHRlbmRlZCBhdHRyaWJ1dGUgdmFsdWUKICAgICAgLSBzZXR4YXR0cgogICAgICAjIGZzZXR4YXR0ciAtIHNldCBhbiBleHRlbmRlZCBhdHRyaWJ1dGUgdmFsdWUKICAgICAgLSBmc2V0eGF0dHIKICAgICAgIyBsc2V0eGF0dHIgLSBzZXQgYW4gZXh0ZW5kZWQgYXR0cmlidXRlIHZhbHVlCiAgICAgIC0gbHNldHhhdHRyCiAgICAgICMgcmVtb3ZleGF0dHIgLSByZW1vdmUgYW4gZXh0ZW5kZWQgYXR0cmlidXRlCiAgICAgIC0gcmVtb3ZleGF0dHIKICAgICAgIyBmcmVtb3ZleGF0dHIgLSByZW1vdmUgYW4gZXh0ZW5kZWQgYXR0cmlidXRlCiAgICAgIC0gZnJlbW92ZXhhdHRyCiAgICAgICMgbHJlbW92ZXhhdHRyIC0gcmVtb3ZlIGFuIGV4dGVuZGVkIGF0dHJpYnV0ZQogICAgICAtIGxyZW1vdmV4YXR0cgogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgIHR5cGU6IGNoYW5nZQogIC0gYWN0aW9uOiBjaGFuZ2VkLWZpbGUtcGVybWlzc2lvbnMtb2YKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgc3lzY2FsbHM6CiAgICAgICMgY2htb2QgLSBjaGFuZ2UgcGVybWlzc2lvbnMgb2YgYSBmaWxlCiAgICAgIC0gY2htb2QKICAgICAgIyBmY2htb2QgLSBjaGFuZ2UgcGVybWlzc2lvbnMgb2YgYSBmaWxlCiAgICAgIC0gZmNobW9kCiAgICAgICMgZmNobW9kYXQgLSBjaGFuZ2UgcGVybWlzc2lvbnMgb2YgYSBmaWxlCiAgICAgIC0gZmNobW9kYXQKICAgIGVjczoKICAgICAgPDw6ICplY3MtZmlsZQogICAgICB0eXBlOiBjaGFuZ2UKICAtIGFjdGlvbjogY2hhbmdlZC1maWxlLW93bmVyc2hpcC1vZgogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBjaG93biAtIGNoYW5nZSBvd25lcnNoaXAgb2YgYSBmaWxlCiAgICAgIC0gY2hvd24KICAgICAgIyBmY2hvd24gLSBjaGFuZ2Ugb3duZXJzaGlwIG9mIGEgZmlsZQogICAgICAtIGZjaG93bgogICAgICAjIGZjaG93bmF0IC0gY2hhbmdlIG93bmVyc2hpcCBvZiBhIGZpbGUKICAgICAgLSBmY2hvd25hdAogICAgICAjIGxjaG93biAtIGNoYW5nZSBvd25lcnNoaXAgb2YgYSBmaWxlCiAgICAgIC0gbGNob3duCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgdHlwZTogY2hhbmdlCiAgLSBhY3Rpb246IGxvYWRlZC1rZXJuZWwtbW9kdWxlCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgICAgcHJpbWFyeTogbmFtZQogICAgcmVjb3JkX3R5cGVzOgogICAgICAtIEtFUk5fTU9EVUxFCiAgICBzeXNjYWxsczoKICAgICAgIyBmaW5pdF9tb2R1bGUgLSBsb2FkIGEga2VybmVsIG1vZHVsZQogICAgICAtIGZpbml0X21vZHVsZQogICAgICAjIGluaXRfbW9kdWxlIC0gbG9hZCBhIGtlcm5lbCBtb2R1bGUKICAgICAgLSBpbml0X21vZHVsZQogICAgZWNzOgogICAgICA8PDogKmVjcy1kcml2ZXIKICAgICAgdHlwZTogc3RhcnQKICAtIGFjdGlvbjogdW5sb2FkZWQta2VybmVsLW1vZHVsZQogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBkZWxldGVfbW9kdWxlIC0gdW5sb2FkIGEga2VybmVsIG1vZHVsZQogICAgICAtIGRlbGV0ZV9tb2R1bGUKICAgIGVjczoKICAgICAgPDw6ICplY3MtZHJpdmVyCiAgICAgIHR5cGU6IGVuZAogIC0gYWN0aW9uOiBjcmVhdGVkLWRpcmVjdG9yeQogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICAgIHBhdGhfaW5kZXg6IDEKICAgIHN5c2NhbGxzOgogICAgICAjIG1rZGlyIC0gY3JlYXRlIGEgZGlyZWN0b3J5CiAgICAgIC0gbWtkaXIKICAgICAgIyBta2RpcmF0IC0gY3JlYXRlIGEgZGlyZWN0b3J5CiAgICAgIC0gbWtkaXJhdAogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgIHR5cGU6IGNyZWF0aW9uCiAgLSBhY3Rpb246IG1vdW50ZWQKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZXN5c3RlbQogICAgICBwYXRoX2luZGV4OiAxCiAgICBzeXNjYWxsczoKICAgICAgIyBtb3VudCAtIG1vdW50IGZpbGVzeXN0ZW0KICAgICAgLSBtb3VudAogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgICMgc2luY2UgYSBuZXcgbW91bnQgYXBwZWFycyBvbiB0aGUgc3lzdGVtCiAgICAgICMgd2UgY29uc2lkZXIgdGhpcyBhIGhpZ2gtbGV2ZWwgImNyZWF0aW9uIiBldmVudAogICAgICB0eXBlOiBjcmVhdGlvbgogIC0gYWN0aW9uOiByZW5hbWVkCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgICAgcGF0aF9pbmRleDogMgogICAgc3lzY2FsbHM6CiAgICAgICMgcmVuYW1lIC0gY2hhbmdlIHRoZSBuYW1lIG9yIGxvY2F0aW9uIG9mIGEgZmlsZQogICAgICAtIHJlbmFtZQogICAgICAjIHJlbmFtZWF0IC0gY2hhbmdlIHRoZSBuYW1lIG9yIGxvY2F0aW9uIG9mIGEgZmlsZQogICAgICAtIHJlbmFtZWF0CiAgICAgICMgcmVuYW1lYXQyIC0gY2hhbmdlIHRoZSBuYW1lIG9yIGxvY2F0aW9uIG9mIGEgZmlsZQogICAgICAtIHJlbmFtZWF0MgogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgIHR5cGU6IGNoYW5nZQogIC0gYWN0aW9uOiBjaGVja2VkLW1ldGFkYXRhLW9mCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIGFjY2VzcyAtIGNoZWNrIHVzZXIncyBwZXJtaXNzaW9ucyBmb3IgYSBmaWxlCiAgICAgIC0gYWNjZXNzCiAgICAgICMgZmFjY2Vzc2F0IC0gY2hlY2sgdXNlcidzIHBlcm1pc3Npb25zIGZvciBhIGZpbGUKICAgICAgLSBmYWNjZXNzYXQKICAgICAgIyBmc3RhdGF0IC0gZ2V0IGZpbGUgc3RhdHVzCiAgICAgIC0gZnN0YXRhdAogICAgICAjIG5ld2ZzdGF0YXQgLSBnZXQgZmlsZSBzdGF0dXMKICAgICAgLSBuZXdmc3RhdGF0CiAgICAgICMgc3RhdCAtIGdldCBmaWxlIHN0YXR1cwogICAgICAtIHN0YXQKICAgICAgIyBzdGF0NjQgLSBnZXQgZmlsZSBzdGF0dXMKICAgICAgLSBzdGF0NjQKICAgICAgIyBmc3RhdCAtIGdldCBmaWxlIHN0YXR1cwogICAgICAtIGZzdGF0CiAgICAgICMgbHN0YXQgLSBnZXQgZmlsZSBzdGF0dXMKICAgICAgLSBsc3RhdAogICAgICAjIGdldHhhdHRyIC0gcmV0cmlldmUgYW4gZXh0ZW5kZWQgYXR0cmlidXRlIHZhbHVlCiAgICAgIC0gZ2V0eGF0dHIKICAgICAgIyBsZ2V0eGF0dHIgLSByZXRyaWV2ZSBhbiBleHRlbmRlZCBhdHRyaWJ1dGUgdmFsdWUKICAgICAgLSBsZ2V0eGF0dHIKICAgICAgIyBmZ2V0eGF0dHIgLSByZXRyaWV2ZSBhbiBleHRlbmRlZCBhdHRyaWJ1dGUgdmFsdWUKICAgICAgLSBmZ2V0eGF0dHIKICAgIGVjczogKmVjcy1maWxlCiAgLSBhY3Rpb246IGNoZWNrZWQtZmlsZXN5c3RlbS1tZXRhZGF0YS1vZgogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlc3lzdGVtCiAgICBzeXNjYWxsczoKICAgICAgIyBzdGF0ZnMgLSBnZXQgZmlsZXN5c3RlbSBzdGF0aXN0aWNzCiAgICAgIC0gc3RhdGZzCiAgICAgICMgZnN0YXRmcyAtIGdldCBmaWxlc3lzdGVtIHN0YXRpc3RpY3MKICAgICAgLSBmc3RhdGZzCiAgICBlY3M6ICplY3MtZmlsZQogIC0gYWN0aW9uOiBzeW1saW5rZWQKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgc3lzY2FsbHM6CiAgICAgICMgc3ltbGluayAtIG1ha2UgYSBuZXcgbmFtZSBmb3IgYSBmaWxlCiAgICAgIC0gc3ltbGluawogICAgICAjIHN5bWxpbmthdCAtIG1ha2UgYSBuZXcgbmFtZSBmb3IgYSBmaWxlCiAgICAgIC0gc3ltbGlua2F0CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgIyAiY3JlYXRpb24iIHNpbmNlIHdlJ3JlIGNyZWF0aW5nIGEgbmV3IGZpbGUgc3lzdGVtCiAgICAgICMgZW50cnkgZm9yIHRoZSBzeW1saW5rCiAgICAgIHR5cGU6IGNyZWF0aW9uCiAgLSBhY3Rpb246IHVubW91bnRlZAogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlc3lzdGVtCiAgICBzeXNjYWxsczoKICAgICAgIyB1bW91bnQgLSB1bm1vdW50IGZpbGVzeXN0ZW0KICAgICAgLSB1bW91bnQKICAgICAgIyB1bW91bnQyIC0gdW5tb3VudCBmaWxlc3lzdGVtCiAgICAgIC0gdW1vdW50MgogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgICMgImRlbGV0aW9uIiB0byBtaXJyb3IgdGhlICJjcmVhdGlvbiIgb2YgdGhlIG1vdW50CiAgICAgIHR5cGU6IGRlbGV0aW9uCiAgLSBhY3Rpb246IGRlbGV0ZWQKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgc3lzY2FsbHM6CiAgICAgICMgcm1kaXIgLSBkZWxldGUgYSBkaXJlY3RvcnkKICAgICAgLSBybWRpcgogICAgICAjIHVubGluayAtIGRlbGV0ZSBhIG5hbWUgYW5kIHBvc3NpYmx5IHRoZSBmaWxlIGl0IHJlZmVycyB0bwogICAgICAtIHVubGluawogICAgICAjIHVubGlua2F0IC0gZGVsZXRlIGEgbmFtZSBhbmQgcG9zc2libHkgdGhlIGZpbGUgaXQgcmVmZXJzIHRvCiAgICAgIC0gdW5saW5rYXQKICAgIGVjczoKICAgICAgPDw6ICplY3MtZmlsZQogICAgICB0eXBlOiBkZWxldGlvbgogIC0gYWN0aW9uOiBjaGFuZ2VkLXRpbWVzdGFtcC1vZgogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyB1dGltZSAtIGNoYW5nZSBmaWxlIGxhc3QgYWNjZXNzIGFuZCBtb2RpZmljYXRpb24gdGltZXMKICAgICAgLSB1dGltZQogICAgICAjIHV0aW1lcyAtIGNoYW5nZSBmaWxlIGxhc3QgYWNjZXNzIGFuZCBtb2RpZmljYXRpb24gdGltZXMKICAgICAgLSB1dGltZXMKICAgICAgIyBmdXRpbWVzYXQgLSBjaGFuZ2UgdGltZXN0YW1wcyBvZiBhIGZpbGUgcmVsYXRpdmUgdG8gYSBcIGRpcmVjdG9yeSBmaWxlIGRlc2NyaXB0b3IKICAgICAgLSBmdXRpbWVzYXQKICAgICAgIyBmdXRpbWVucyAtIGNoYW5nZSBmaWxlIHRpbWVzdGFtcHMgd2l0aCBuYW5vc2Vjb25kIHByZWNpc2lvbgogICAgICAtIGZ1dGltZW5zCiAgICAgICMgdXRpbWVuc2F0IC0gY2hhbmdlIGZpbGUgdGltZXN0YW1wcyB3aXRoIG5hbm9zZWNvbmQgcHJlY2lzaW9uCiAgICAgIC0gdXRpbWVuc2F0CiAgICBlY3M6ICplY3MtZmlsZQogIC0gYWN0aW9uOiBleGVjdXRlZAogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBleGVjdmUgLSBleGVjdXRlIHByb2dyYW0KICAgICAgLSBleGVjdmUKICAgICAgIyBleGVjdmVhdCAtIGV4ZWN1dGUgcHJvZ3JhbSByZWxhdGl2ZSB0byBhIGRpcmVjdG9yeSBmaWxlIGRlc2NyaXB0b3IKICAgICAgLSBleGVjdmVhdAogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IHN0YXJ0CiAgLSBhY3Rpb246IGxpc3Rlbi1mb3ItY29ubmVjdGlvbnMKICAgIG9iamVjdDoKICAgICAgd2hhdDogc29ja2V0CiAgICBzeXNjYWxsczoKICAgICAgIyBsaXN0ZW4tIGxpc3RlbiBmb3IgY29ubmVjdGlvbnMgb24gYSBzb2NrZXQKICAgICAgLSBsaXN0ZW4KICAgIGVjczoKICAgICAgPDw6ICplY3MtbmV0d29yawogICAgICB0eXBlOiBzdGFydAogIC0gYWN0aW9uOiBhY2NlcHRlZC1jb25uZWN0aW9uLWZyb20KICAgIG9iamVjdDoKICAgICAgd2hhdDogc29ja2V0CiAgICBzeXNjYWxsczoKICAgICAgIyBhY2NlcHQgLSBhY2NlcHQgYSBjb25uZWN0aW9uIG9uIGEgc29ja2V0CiAgICAgIC0gYWNjZXB0CiAgICAgICMgYWNjZXB0NCAtIGFjY2VwdCBhIGNvbm5lY3Rpb24gb24gYSBzb2NrZXQKICAgICAgLSBhY2NlcHQ0CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLW5ldHdvcmsKICAgICAgdHlwZToKICAgICAgICAtIGNvbm5lY3Rpb24KICAgICAgICAtIHN0YXJ0CiAgLSBhY3Rpb246IGJvdW5kLXNvY2tldAogICAgb2JqZWN0OgogICAgICB3aGF0OiBzb2NrZXQKICAgIHN5c2NhbGxzOgogICAgICAjIGJpbmQgLWJpbmQgYSBuYW1lIHRvIGEgc29ja2V0CiAgICAgIC0gYmluZAogICAgZWNzOgogICAgICA8PDogKmVjcy1uZXR3b3JrCiAgICAgIHR5cGU6IHN0YXJ0CiAgLSBhY3Rpb246IGNvbm5lY3RlZC10bwogICAgb2JqZWN0OgogICAgICB3aGF0OiBzb2NrZXQKICAgIHN5c2NhbGxzOgogICAgICAtIGNvbm5lY3QKICAgIGVjczoKICAgICAgPDw6ICplY3MtbmV0d29yawogICAgICB0eXBlOgogICAgICAgIC0gY29ubmVjdGlvbgogICAgICAgIC0gc3RhcnQKICAtIGFjdGlvbjogcmVjZWl2ZWQtZnJvbQogICAgb2JqZWN0OgogICAgICB3aGF0OiBzb2NrZXQKICAgIHN5c2NhbGxzOgogICAgICAjIHJlY3YgLSByZWNlaXZlIGEgbWVzc2FnZSBmcm9tIGEgc29ja2V0CiAgICAgIC0gcmVjdgogICAgICAjIHJlY3Zmcm9tIC0gcmVjZWl2ZSBhIG1lc3NhZ2UgZnJvbSBhIHNvY2tldAogICAgICAtIHJlY3Zmcm9tCiAgICAgICMgcmVjdm1zZyAtIHJlY2VpdmUgYSBtZXNzYWdlIGZyb20gYSBzb2NrZXQKICAgICAgLSByZWN2bXNnCiAgICAgICMgcmVjdm1tc2cgLSByZWNlaXZlIG11bHRpcGxlIG1lc3NhZ2VzIG9uIGEgc29ja2V0CiAgICAgIC0gcmVjdm1tc2cKICAgIGVjczoKICAgICAgPDw6ICplY3MtbmV0d29yawogIC0gYWN0aW9uOiBzZW50LXRvCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNvY2tldAogICAgc3lzY2FsbHM6CiAgICAgICMgc2VuZCAtIHNlbmQgYSBtZXNzYWdlIG9uIGEgc29ja2V0CiAgICAgIC0gc2VuZAogICAgICAjIHNlbmR0byAtIHNlbmQgYSBtZXNzYWdlIG9uIGEgc29ja2V0CiAgICAgIC0gc2VuZHRvCiAgICAgICMgc2VuZG1zZyAtIHNlbmQgYSBtZXNzYWdlIG9uIGEgc29ja2V0CiAgICAgIC0gc2VuZG1zZwogICAgICAjIHNlbmRtbXNnIC0gc2VuZCBtdWx0aXBsZSBtZXNzYWdlcyBvbiBhIHNvY2tldAogICAgICAtIHNlbmRtbXNnCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLW5ldHdvcmsKICAtIGFjdGlvbjoga2lsbGVkLXBpZAogICAgb2JqZWN0OgogICAgICB3aGF0OiBwcm9jZXNzCiAgICBzeXNjYWxsczoKICAgICAgIyBraWxsIC0gc2VuZCBzaWduYWwgdG8gYSBwcm9jZXNzCiAgICAgIC0ga2lsbAogICAgICAjIHRraWxsIC0gc2VuZCBhIHNpZ25hbCB0byBhIHRocmVhZAogICAgICAtIHRraWxsCiAgICAgICMgdGdraWxsIC0gc2VuZCBhIHNpZ25hbCB0byBhIHRocmVhZAogICAgICAtIHRna2lsbAogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IGVuZAogIC0gYWN0aW9uOiBjaGFuZ2VkLWlkZW50aXR5LW9mCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHByb2Nlc3MKICAgIGhvdzogc3lzY2FsbAogICAgc3lzY2FsbHM6CiAgICAgICMgc2V0dWlkIC0gc2V0IHVzZXIgaWRlbnRpdHkKICAgICAgLSBzZXR1aWQKICAgICAgIyBzZXRldWlkIC0gc2V0IGVmZmVjdGl2ZSB1c2VyIG9yIGdyb3VwIElECiAgICAgIC0gc2V0ZXVpZAogICAgICAjIHNldGZzdWlkIC0gc2V0IHVzZXIgaWRlbnRpdHkgdXNlZCBmb3IgZmlsZXN5c3RlbSBjaGVja3MKICAgICAgLSBzZXRmc3VpZAogICAgICAjIHNldHJldWlkIC0gc2V0IHJlYWwgYW5kL29yIGVmZmVjdGl2ZSB1c2VyIG9yIGdyb3VwIElECiAgICAgIC0gc2V0cmV1aWQKICAgICAgIyBzZXRnaWQgLSBzZXQgZ3JvdXAgaWRlbnRpdHkKICAgICAgLSBzZXRnaWQKICAgICAgIyBzZXRlZ2lkIC0gc2V0IGVmZmVjdGl2ZSB1c2VyIG9yIGdyb3VwIElECiAgICAgIC0gc2V0ZWdpZAogICAgICAjIHNldGZzZ2lkIC0gc2V0IGdyb3VwIGlkZW50aXR5IHVzZWQgZm9yIGZpbGVzeXN0ZW0gY2hlY2tzCiAgICAgIC0gc2V0ZnNnaWQKICAgICAgIyBzZXRyZWdpZCAtIHNldCByZWFsIGFuZC9vciBlZmZlY3RpdmUgdXNlciBvciBncm91cCBJRAogICAgICAtIHNldHJlZ2lkCiAgICAgICMgc2V0cmVzdWlkIC0gc2V0IHJlYWwsIGVmZmVjdGl2ZSBhbmQgc2F2ZWQgdXNlciBvciBncm91cCBJRAogICAgICAtIHNldHJlc3VpZAogICAgICAjIHNldHJlc2dpZCAtIHNldCByZWFsLCBlZmZlY3RpdmUgYW5kIHNhdmVkIHVzZXIgb3IgZ3JvdXAgSUQKICAgICAgLSBzZXRyZXNnaWQKICAgIGVjczoKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBjaGFuZ2UKICAtIGFjdGlvbjogY2hhbmdlZC1zeXN0ZW0tdGltZQogICAgb2JqZWN0OgogICAgICB3aGF0OiBzeXN0ZW0KICAgIHN5c2NhbGxzOgogICAgICAjIHNldHRpbWVvZmRheSAtIGdldCAvIHNldCB0aW1lCiAgICAgIC0gc2V0dGltZW9mZGF5CiAgICAgICMgY2xvY2tfc2V0dGltZSAtIGNsb2NrIGFuZCB0aW1lIGZ1bmN0aW9ucwogICAgICAtIGNsb2NrX3NldHRpbWUKICAgICAgIyBzdGltZSAtIHNldCB0aW1lCiAgICAgIC0gc3RpbWUKICAgICAgIyBhZGp0aW1leCAtIHR1bmUga2VybmVsIGNsb2NrCiAgICAgIC0gYWRqdGltZXgKICAgIGVjczoKICAgICAgPDw6ICplY3MtaG9zdAogICAgICB0eXBlOiBjaGFuZ2UKICAtIGFjdGlvbjogbWFrZS1kZXZpY2UKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgc3lzY2FsbHM6CiAgICAgICMgbWtub2QgLSBjcmVhdGUgYSBzcGVjaWFsIG9yIG9yZGluYXJ5IGZpbGUKICAgICAgLSBta25vZAogICAgICAjIG1rbm9kYXQgLSBjcmVhdGUgYSBzcGVjaWFsIG9yIG9yZGluYXJ5IGZpbGUKICAgICAgLSBta25vZGF0CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgdHlwZTogY3JlYXRpb24KICAtIGFjdGlvbjogY2hhbmdlZC1zeXN0ZW0tbmFtZQogICAgb2JqZWN0OgogICAgICB3aGF0OiBzeXN0ZW0KICAgIHN5c2NhbGxzOgogICAgICAjIHNldGhvc3RuYW1lIC0gZ2V0L3NldCBob3N0bmFtZQogICAgICAtIHNldGhvc3RuYW1lCiAgICAgICMgc2V0ZG9tYWlubmFtZSAtIGdldC9zZXQgTklTIGRvbWFpbiBuYW1lCiAgICAgIC0gc2V0ZG9tYWlubmFtZQogICAgZWNzOgogICAgICA8PDogKmVjcy1ob3N0CiAgICAgIHR5cGU6IGNoYW5nZQogIC0gYWN0aW9uOiBhbGxvY2F0ZWQtbWVtb3J5CiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IG1lbW9yeQogICAgc3lzY2FsbHM6CiAgICAgICMgbW1hcCAtIG1hcCBvciB1bm1hcCBmaWxlcyBvciBkZXZpY2VzIGludG8gbWVtb3J5CiAgICAgIC0gbW1hcAogICAgICAjIG1tYXAyIC0gbWFwIGZpbGVzIG9yIGRldmljZXMgaW50byBtZW1vcnkKICAgICAgLSBtbWFwMgogICAgICAjIGJyayAtIGNoYW5nZSBkYXRhIHNlZ21lbnQgc2l6ZQogICAgICAtIGJyawogICAgZWNzOiAqZWNzLXByb2Nlc3MKICAtIGFjdGlvbjogYWRqdXN0ZWQtc2NoZWR1bGluZy1wb2xpY3ktb2YKICAgIG9iamVjdDoKICAgICAgd2hhdDogcHJvY2VzcwogICAgaG93OiBzeXNjYWxsCiAgICBzeXNjYWxsczoKICAgICAgIyBzY2hlZF9zZXRwYXJhbSAtIHNldCBhbmQgZ2V0IHNjaGVkdWxpbmcgcGFyYW1ldGVycwogICAgICAtIHNjaGVkX3NldHBhcmFtCiAgICAgICMgc2NoZWRfc2V0c2NoZWR1bGVyIC0gc2V0IGFuZCBnZXQgc2NoZWR1bGluZyBwb2xpY3kvcGFyYW1ldGVycwogICAgICAtIHNjaGVkX3NldHNjaGVkdWxlcgogICAgICAjIHNjaGVkX3NldGF0dHIgLSBzZXQgYW5kIGdldCBzY2hlZHVsaW5nIHBvbGljeSBhbmQgYXR0cmlidXRlcwogICAgICAtIHNjaGVkX3NldGF0dHIKICAgIGVjczoKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBjaGFuZ2UKCiAgIyBDdXJyZW50bHkgdW5oYW5kbGVkCiAgIyB0aGlzIGxpc3QgY29tZXMgZnJvbSBwYXJzaW5nIGxpbnV4IG1hbiBwYWdlcyBhdCBodHRwczovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vZG9jcy9tYW4tcGFnZXMvbWFuLXBhZ2VzLmdpdAoKICAjIHNpZ2FjdGlvbiAtIGV4YW1pbmUgYW5kIGNoYW5nZSBhIHNpZ25hbCBhY3Rpb24KICAjIHJ0X3NpZ2FjdGlvbiAtIGV4YW1pbmUgYW5kIGNoYW5nZSBhIHNpZ25hbCBhY3Rpb24KICAjIHByZWFkIC0gcmVhZCBmcm9tIG9yIHdyaXRlIHRvIGEgZmlsZSBkZXNjcmlwdG9yIGF0IGEgZ2l2ZW4gb2Zmc2V0CiAgIyBwd3JpdGUgLSByZWFkIGZyb20gb3Igd3JpdGUgdG8gYSBmaWxlIGRlc2NyaXB0b3IgYXQgYSBnaXZlbiBvZmZzZXQKICAjIHMzOTBfZ3VhcmRlZF9zdG9yYWdlIC0gb3BlcmF0aW9ucyB3aXRoIHovQXJjaGl0ZWN0dXJlIGd1YXJkZWQgc3RvcmFnZSBmYWNpbGl0eQogICMgc2NoZWRfZ2V0YXR0ciAtIHNldCBhbmQgZ2V0IHNjaGVkdWxpbmcgcG9saWN5IGFuZCBhdHRyaWJ1dGVzCiAgIyBnZXRydXNhZ2UgLSBnZXQgcmVzb3VyY2UgdXNhZ2UKICAjIGZsb2NrIC0gYXBwbHkgb3IgcmVtb3ZlIGFuIGFkdmlzb3J5IGxvY2sgb24gYW4gb3BlbiBmaWxlCiAgIyBwaWRmZF9nZXRmZCAtIG9idGFpbiBhIGR1cGxpY2F0ZSBvZiBhbm90aGVyIHByb2Nlc3MncyBmaWxlIGRlc2NyaXB0b3IKICAjIGNsb2NrX25hbm9zbGVlcCAtIGhpZ2gtcmVzb2x1dGlvbiBzbGVlcCB3aXRoIHNwZWNpZmlhYmxlIGNsb2NrCiAgIyBnZXRwYWdlc2l6ZSAtIGdldCBtZW1vcnkgcGFnZSBzaXplCiAgIyBwaWRmZF9vcGVuIC0gb2J0YWluIGEgZmlsZSBkZXNjcmlwdG9yIHRoYXQgcmVmZXJzIHRvIGEgcHJvY2VzcwogICMgc3BsaWNlIC0gc3BsaWNlIGRhdGEgdG8vZnJvbSBhIHBpcGUKICAjIGdldHJlc3VpZCAtIGdldCByZWFsLCBlZmZlY3RpdmUgYW5kIHNhdmVkIHVzZXIvZ3JvdXAgSURzCiAgIyBnZXRyZXNnaWQgLSBnZXQgcmVhbCwgZWZmZWN0aXZlIGFuZCBzYXZlZCB1c2VyL2dyb3VwIElEcwogICMgcmVtYXBfZmlsZV9wYWdlcyAtIGNyZWF0ZSBhIG5vbmxpbmVhciBmaWxlIG1hcHBpbmcKICAjIGlvX2NhbmNlbCAtIGNhbmNlbCBhbiBvdXRzdGFuZGluZyBhc3luY2hyb25vdXMgSS9PIG9wZXJhdGlvbgogICMgcHJjdGwgLSBvcGVyYXRpb25zIG9uIGEgcHJvY2VzcyBvciB0aHJlYWQKICAjIGNsb2NrX2dldHJlcyAtIGNsb2NrIGFuZCB0aW1lIGZ1bmN0aW9ucwogICMgY2xvY2tfZ2V0dGltZSAtIGNsb2NrIGFuZCB0aW1lIGZ1bmN0aW9ucwogICMgZ2V0Z3JvdXBzIC0gZ2V0L3NldCBsaXN0IG9mIHN1cHBsZW1lbnRhcnkgZ3JvdXAgSURzCiAgIyBzZXRncm91cHMgLSBnZXQvc2V0IGxpc3Qgb2Ygc3VwcGxlbWVudGFyeSBncm91cCBJRHMKICAjIHZtc3BsaWNlIC0gc3BsaWNlIHVzZXIgcGFnZXMgdG8vZnJvbSBhIHBpcGUKICAjIGVwb2xsX2NyZWF0ZSAtIG9wZW4gYW4gZXBvbGwgZmlsZSBkZXNjcmlwdG9yCiAgIyBlcG9sbF9jcmVhdGUxIC0gb3BlbiBhbiBlcG9sbCBmaWxlIGRlc2NyaXB0b3IKICAjIHBvc2l4X2ZhZHZpc2UgLSBwcmVkZWNsYXJlIGFuIGFjY2VzcyBwYXR0ZXJuIGZvciBmaWxlIGRhdGEKICAjIHNpZ3dhaXRpbmZvIC0gc3luY2hyb25vdXNseSB3YWl0IGZvciBxdWV1ZWQgc2lnbmFscwogICMgc2lndGltZWR3YWl0IC0gc3luY2hyb25vdXNseSB3YWl0IGZvciBxdWV1ZWQgc2lnbmFscwogICMgcnRfc2lndGltZWR3YWl0IC0gc3luY2hyb25vdXNseSB3YWl0IGZvciBxdWV1ZWQgc2lnbmFscwogICMgc2lncmV0dXJuIC0gcmV0dXJuIGZyb20gc2lnbmFsIGhhbmRsZXIgYW5kIGNsZWFudXAgc3RhY2sgZnJhbWUKICAjIHJ0X3NpZ3JldHVybiAtIHJldHVybiBmcm9tIHNpZ25hbCBoYW5kbGVyIGFuZCBjbGVhbnVwIHN0YWNrIGZyYW1lCiAgIyBnZXRyYW5kb20gLSBvYnRhaW4gYSBzZXJpZXMgb2YgcmFuZG9tIGJ5dGVzCiAgIyBrZXljdGwgLSBtYW5pcHVsYXRlIHRoZSBrZXJuZWwncyBrZXkgbWFuYWdlbWVudCBmYWNpbGl0eQogICMgc2NoZWRfZ2V0c2NoZWR1bGVyIC0gc2V0IGFuZCBnZXQgc2NoZWR1bGluZyBwb2xpY3kvcGFyYW1ldGVycwogICMgbWJpbmQgLSBzZXQgbWVtb3J5IHBvbGljeSBmb3IgYSBtZW1vcnkgcmFuZ2UKICAjIGdldHByaW9yaXR5IC0gZ2V0L3NldCBwcm9ncmFtIHNjaGVkdWxpbmcgcHJpb3JpdHkKICAjIHNldHByaW9yaXR5IC0gZ2V0L3NldCBwcm9ncmFtIHNjaGVkdWxpbmcgcHJpb3JpdHkKICAjIGlub3RpZnlfaW5pdCAtIGluaXRpYWxpemUgYW4gaW5vdGlmeSBpbnN0YW5jZQogICMgaW5vdGlmeV9pbml0MSAtIGluaXRpYWxpemUgYW4gaW5vdGlmeSBpbnN0YW5jZQogICMgc2VtY3RsIC0gU3lzdGVtIFYgc2VtYXBob3JlIGNvbnRyb2wgb3BlcmF0aW9ucwogICMgZ2V0aG9zdG5hbWUgLSBnZXQvc2V0IGhvc3RuYW1lCiAgIyBwdHJhY2UgLSBwcm9jZXNzIHRyYWNlCiAgIyBzeXNjdGwgLSByZWFkL3dyaXRlIHN5c3RlbSBwYXJhbWV0ZXJzCiAgIyBnZXRwZWVybmFtZSAtIGdldCBuYW1lIG9mIGNvbm5lY3RlZCBwZWVyIHNvY2tldAogICMgZm9yayAtIGNyZWF0ZSBhIGNoaWxkIHByb2Nlc3MKICAjIHF1ZXJ5X21vZHVsZSAtIHF1ZXJ5IHRoZSBrZXJuZWwgZm9yIHZhcmlvdXMgYml0cyBwZXJ0YWluaW5nIHRvIG1vZHVsZXMKICAjIGlvY3RsX2xpc3QgLSBsaXN0IG9mIGlvY3RsIGNhbGxzIGluIExpbnV4L2kzODYga2VybmVsCiAgIyBtc2dnZXQgLSBnZXQgYSBTeXN0ZW0gViBtZXNzYWdlIHF1ZXVlIGlkZW50aWZpZXIKICAjIHNwdV9jcmVhdGUgLSBjcmVhdGUgYSBuZXcgc3B1IGNvbnRleHQKICAjIHN1YnBhZ2VfcHJvdCAtIGRlZmluZSBhIHN1YnBhZ2UgcHJvdGVjdGlvbiBmb3IgYW4gYWRkcmVzcyByYW5nZQogICMgcXVvdGFjdGwgLSBtYW5pcHVsYXRlIGRpc2sgcXVvdGFzCiAgIyBuZnNzZXJ2Y3RsIC0gc3lzY2FsbCBpbnRlcmZhY2UgdG8ga2VybmVsIG5mcyBkYWVtb24KICAjIG9wZW5hdDIgLSBvcGVuIGFuZCBwb3NzaWJseSBjcmVhdGUgYSBmaWxlIChleHRlbmRlZCkKICAjIGdldHJsaW1pdCAtIGdldC9zZXQgcmVzb3VyY2UgbGltaXRzCiAgIyBzZXRybGltaXQgLSBnZXQvc2V0IHJlc291cmNlIGxpbWl0cwogICMgcHJsaW1pdCAtIGdldC9zZXQgcmVzb3VyY2UgbGltaXRzCiAgIyB0ZWUgLSBkdXBsaWNhdGluZyBwaXBlIGNvbnRlbnQKICAjIHNobWdldCAtIGFsbG9jYXRlcyBhIFN5c3RlbSBWIHNoYXJlZCBtZW1vcnkgc2VnbWVudAogICMgY3JlYXRlX21vZHVsZSAtIGNyZWF0ZSBhIGxvYWRhYmxlIG1vZHVsZSBlbnRyeQogICMgZ2V0dGltZW9mZGF5IC0gZ2V0IC8gc2V0IHRpbWUKICAjIHRpbWVyX2NyZWF0ZSAtIGNyZWF0ZSBhIFBPU0lYIHBlci1wcm9jZXNzIHRpbWVyCiAgIyBmYW5vdGlmeV9tYXJrIC0gYWRkLCByZW1vdmUsIG9yIG1vZGlmeSBhbiBmYW5vdGlmeSBtYXJrIG9uIGEgZmlsZXN5c3RlbSBvYmplY3QKICAjIHBpcGUgLSBjcmVhdGUgcGlwZQogICMgcGlwZTIgLSBjcmVhdGUgcGlwZQogICMgaW50cm8gLSBpbnRyb2R1Y3Rpb24gdG8gc3lzdGVtIGNhbGxzCiAgIyBsb29rdXBfZGNvb2tpZSAtIHJldHVybiBhIGRpcmVjdG9yeSBlbnRyeSdzIHBhdGgKICAjIHN5c2ZzIC0gZ2V0IGZpbGVzeXN0ZW0gdHlwZSBpbmZvcm1hdGlvbgogICMgczM5MF9ydW50aW1lX2luc3RyIC0gZW5hYmxlL2Rpc2FibGUgczM5MCBDUFUgcnVuLXRpbWUgaW5zdHJ1bWVudGF0aW9uCiAgIyBzZXRucyAtIHJlYXNzb2NpYXRlIHRocmVhZCB3aXRoIGEgbmFtZXNwYWNlCiAgIyBzZXRfbWVtcG9saWN5IC0gc2V0IGRlZmF1bHQgTlVNQSBtZW1vcnkgcG9saWN5IGZvciBhIHRocmVhZCBhbmQgaXRzIGNoaWxkcmVuCiAgIyBuaWNlIC0gY2hhbmdlIHByb2Nlc3MgcHJpb3JpdHkKICAjIGlvX3NldHVwIC0gY3JlYXRlIGFuIGFzeW5jaHJvbm91cyBJL08gY29udGV4dAogICMgbWluY29yZSAtIGRldGVybWluZSB3aGV0aGVyIHBhZ2VzIGFyZSByZXNpZGVudCBpbiBtZW1vcnkKICAjIGlvY3RsX2NvbnNvbGUgLSBpb2N0bHMgZm9yIGNvbnNvbGUgdGVybWluYWwgYW5kIHZpcnR1YWwgY29uc29sZXMKICAjIHBvbGwgLSB3YWl0IGZvciBzb21lIGV2ZW50IG9uIGEgZmlsZSBkZXNjcmlwdG9yCiAgIyBwcG9sbCAtIHdhaXQgZm9yIHNvbWUgZXZlbnQgb24gYSBmaWxlIGRlc2NyaXB0b3IKICAjIGNhcGdldCAtIHNldC9nZXQgY2FwYWJpbGl0aWVzIG9mIHRocmVhZChzKQogICMgY2Fwc2V0IC0gc2V0L2dldCBjYXBhYmlsaXRpZXMgb2YgdGhyZWFkKHMpCiAgIyBpb2N0bF90dHkgLSBpb2N0bHMgZm9yIHRlcm1pbmFscyBhbmQgc2VyaWFsIGxpbmVzCiAgIyBpb3BsIC0gY2hhbmdlIEkvTyBwcml2aWxlZ2UgbGV2ZWwKICAjIGlvX2dldGV2ZW50cyAtIHJlYWQgYXN5bmNocm9ub3VzIEkvTyBldmVudHMgZnJvbSB0aGUgY29tcGxldGlvbiBxdWV1ZQogICMgcHJvY2Vzc192bV9yZWFkdiAtIHRyYW5zZmVyIGRhdGEgYmV0d2VlbiBwcm9jZXNzIGFkZHJlc3Mgc3BhY2VzCiAgIyBwcm9jZXNzX3ZtX3dyaXRldiAtIHRyYW5zZmVyIGRhdGEgYmV0d2VlbiBwcm9jZXNzIGFkZHJlc3Mgc3BhY2VzCiAgIyBwY2ljb25maWdfcmVhZCAtIHBjaSBkZXZpY2UgaW5mb3JtYXRpb24gaGFuZGxpbmcKICAjIHBjaWNvbmZpZ193cml0ZSAtIHBjaSBkZXZpY2UgaW5mb3JtYXRpb24gaGFuZGxpbmcKICAjIHBjaWNvbmZpZ19pb2Jhc2UgLSBwY2kgZGV2aWNlIGluZm9ybWF0aW9uIGhhbmRsaW5nCiAgIyBzYnJrIC0gY2hhbmdlIGRhdGEgc2VnbWVudCBzaXplCiAgIyBzZXRfdGlkX2FkZHJlc3MgLSBzZXQgcG9pbnRlciB0byB0aHJlYWQgSUQKICAjIHBrZXlfYWxsb2MgLSBhbGxvY2F0ZSBvciBmcmVlIGEgcHJvdGVjdGlvbiBrZXkKICAjIHBrZXlfZnJlZSAtIGFsbG9jYXRlIG9yIGZyZWUgYSBwcm90ZWN0aW9uIGtleQogICMgc2VsZWN0IC0gc3luY2hyb25vdXMgSS9PIG11bHRpcGxleGluZwogICMgcHNlbGVjdCAtIHN5bmNocm9ub3VzIEkvTyBtdWx0aXBsZXhpbmcKICAjIGtleGVjX2xvYWQgLSBsb2FkIGEgbmV3IGtlcm5lbCBmb3IgbGF0ZXIgZXhlY3V0aW9uCiAgIyBrZXhlY19maWxlX2xvYWQgLSBsb2FkIGEgbmV3IGtlcm5lbCBmb3IgbGF0ZXIgZXhlY3V0aW9uCiAgIyBwZXJzb25hbGl0eSAtIHNldCB0aGUgcHJvY2VzcyBleGVjdXRpb24gZG9tYWluCiAgIyBpb2N0bF9nZXRmc21hcCAtIHJldHJpZXZlIHRoZSBwaHlzaWNhbCBsYXlvdXQgb2YgdGhlIGZpbGVzeXN0ZW0KICAjIGlub3RpZnlfcm1fd2F0Y2ggLSByZW1vdmUgYW4gZXhpc3Rpbmcgd2F0Y2ggZnJvbSBhbiBpbm90aWZ5IGluc3RhbmNlCiAgIyBwZXJmX2V2ZW50X29wZW4gLSBzZXQgdXAgcGVyZm9ybWFuY2UgbW9uaXRvcmluZwogICMgdGltZXJfZ2V0b3ZlcnJ1biAtIGdldCBvdmVycnVuIGNvdW50IGZvciBhIFBPU0lYIHBlci1wcm9jZXNzIHRpbWVyCiAgIyB3YWl0MyAtIHdhaXQgZm9yIHByb2Nlc3MgdG8gY2hhbmdlIHN0YXRlLCBCU0Qgc3R5bGUKICAjIHdhaXQ0IC0gd2FpdCBmb3IgcHJvY2VzcyB0byBjaGFuZ2Ugc3RhdGUsIEJTRCBzdHlsZQogICMgbGluayAtIG1ha2UgYSBuZXcgbmFtZSBmb3IgYSBmaWxlCiAgIyBsaW5rYXQgLSBtYWtlIGEgbmV3IG5hbWUgZm9yIGEgZmlsZQogICMgc2NoZWRfcnJfZ2V0X2ludGVydmFsIC0gZ2V0IHRoZSBTQ0hFRF9SUiBpbnRlcnZhbCBmb3IgdGhlIG5hbWVkIHByb2Nlc3MKICAjIG11bm1hcCAtIG1hcCBvciB1bm1hcCBmaWxlcyBvciBkZXZpY2VzIGludG8gbWVtb3J5CiAgIyBzb2NrZXRjYWxsIC0gc29ja2V0IHN5c3RlbSBjYWxscwogICMgbXJlbWFwIC0gcmVtYXAgYSB2aXJ0dWFsIG1lbW9yeSBhZGRyZXNzCiAgIyB2Zm9yayAtIGNyZWF0ZSBhIGNoaWxkIHByb2Nlc3MgYW5kIGJsb2NrIHBhcmVudAogICMgc2VjY29tcCAtIG9wZXJhdGUgb24gU2VjdXJlIENvbXB1dGluZyBzdGF0ZSBvZiB0aGUgcHJvY2VzcwogICMgcmVxdWVzdF9rZXkgLSByZXF1ZXN0IGEga2V5IGZyb20gdGhlIGtlcm5lbCdzIGtleSBtYW5hZ2VtZW50IGZhY2lsaXR5CiAgIyBzeXNjYWxsIC0gaW5kaXJlY3Qgc3lzdGVtIGNhbGwKICAjIGtjbXAgLSBjb21wYXJlIHR3byBwcm9jZXNzZXMgdG8gZGV0ZXJtaW5lIGlmIHRoZXkgc2hhcmUgYSBrZXJuZWwgcmVzb3VyY2UKICAjIHJlYWRkaXIgLSByZWFkIGRpcmVjdG9yeSBlbnRyeQogICMgaW9wZXJtIC0gc2V0IHBvcnQgaW5wdXQvb3V0cHV0IHBlcm1pc3Npb25zCiAgIyBzcHVfcnVuIC0gZXhlY3V0ZSBhbiBTUFUgY29udGV4dAogICMgcmVib290IC0gcmVib290IG9yIGVuYWJsZS9kaXNhYmxlIEN0cmwtQWx0LURlbAogICMgcmVhZGFoZWFkIC0gaW5pdGlhdGUgZmlsZSByZWFkYWhlYWQgaW50byBwYWdlIGNhY2hlCiAgIyBzY2hlZF9nZXRwYXJhbSAtIHNldCBhbmQgZ2V0IHNjaGVkdWxpbmcgcGFyYW1ldGVycwogICMgYWNjdCAtIHN3aXRjaCBwcm9jZXNzIGFjY291bnRpbmcgb24gb3Igb2ZmCiAgIyBzaWdzdXNwZW5kIC0gd2FpdCBmb3IgYSBzaWduYWwKICAjIHJ0X3NpZ3N1c3BlbmQgLSB3YWl0IGZvciBhIHNpZ25hbAogICMgZXhpdF9ncm91cCAtIGV4aXQgYWxsIHRocmVhZHMgaW4gYSBwcm9jZXNzCiAgIyBzb2NrZXQgLSBjcmVhdGUgYW4gZW5kcG9pbnQgZm9yIGNvbW11bmljYXRpb24KICAjIGlvY3RsX3VzZXJmYXVsdGZkIC0gY3JlYXRlIGEgZmlsZSBkZXNjcmlwdG9yIGZvciBoYW5kbGluZyBwYWdlIGZhdWx0cyBpbiB1c2VyIHNwYWNlCiAgIyBzY2hlZF9nZXRfcHJpb3JpdHlfbWF4IC0gZ2V0IHN0YXRpYyBwcmlvcml0eSByYW5nZQogICMgc2NoZWRfZ2V0X3ByaW9yaXR5X21pbiAgLSBnZXQgc3RhdGljIHByaW9yaXR5IHJhbmdlCiAgIyBnZXRkZW50cyAtIGdldCBkaXJlY3RvcnkgZW50cmllcwogICMgZ2V0ZGVudHM2NCAtIGdldCBkaXJlY3RvcnkgZW50cmllcwogICMgc2VsZWN0IC0gc3luY2hyb25vdXMgSS9PIG11bHRpcGxleGluZwogICMgcHNlbGVjdCAtIHN5bmNocm9ub3VzIEkvTyBtdWx0aXBsZXhpbmcKICAjIGFsbG9jX2h1Z2VwYWdlcyAtIGFsbG9jYXRlIG9yIGZyZWUgaHVnZSBwYWdlcwogICMgZnJlZV9odWdlcGFnZXMgLSBhbGxvY2F0ZSBvciBmcmVlIGh1Z2UgcGFnZXMKICAjIGZzeW5jIC0gc3luY2hyb25pemUgYSBmaWxlJ3MgaW4tY29yZSBzdGF0ZSB3aXRoIHN0b3JhZ2UgZGV2aWNlCiAgIyBmZGF0YXN5bmMgLSBzeW5jaHJvbml6ZSBhIGZpbGUncyBpbi1jb3JlIHN0YXRlIHdpdGggc3RvcmFnZSBkZXZpY2UKICAjIHN5c2NhbGxzIC0gTGludXggc3lzdGVtIGNhbGxzCiAgIyBtZW1mZF9jcmVhdGUgLSBjcmVhdGUgYW4gYW5vbnltb3VzIGZpbGUKICAjIG1vZGlmeV9sZHQgLSBnZXQgb3Igc2V0IGEgcGVyLXByb2Nlc3MgTERUIGVudHJ5CiAgIyBnZXRfa2VybmVsX3N5bXMgLSByZXRyaWV2ZSBleHBvcnRlZCBrZXJuZWwgYW5kIG1vZHVsZSBzeW1ib2xzCiAgIyBsc2VlayAtIHJlcG9zaXRpb24gcmVhZC93cml0ZSBmaWxlIG9mZnNldAogICMgc2htYXQgLSBTeXN0ZW0gViBzaGFyZWQgbWVtb3J5IG9wZXJhdGlvbnMKICAjIHNobWR0IC0gU3lzdGVtIFYgc2hhcmVkIG1lbW9yeSBvcGVyYXRpb25zCiAgIyB0aW1lcl9kZWxldGUgLSBkZWxldGUgYSBQT1NJWCBwZXItcHJvY2VzcyB0aW1lcgogICMgcGVyZm1vbmN0bCAtIGludGVyZmFjZSB0byBJQS02NCBwZXJmb3JtYW5jZSBtb25pdG9yaW5nIHVuaXQKICAjIG1vdmVfcGFnZXMgLSBtb3ZlIGluZGl2aWR1YWwgcGFnZXMgb2YgYSBwcm9jZXNzIHRvIGFub3RoZXIgbm9kZQogICMgY2hkaXIgLSBjaGFuZ2Ugd29ya2luZyBkaXJlY3RvcnkKICAjIGZjaGRpciAtIGNoYW5nZSB3b3JraW5nIGRpcmVjdG9yeQogICMgdGltZSAtIGdldCB0aW1lIGluIHNlY29uZHMKICAjIF9leGl0IC0gdGVybWluYXRlIHRoZSBjYWxsaW5nIHByb2Nlc3MKICAjIF9FeGl0IC0gdGVybWluYXRlIHRoZSBjYWxsaW5nIHByb2Nlc3MKICAjIHMzOTBfc3RoeWkgLSBlbXVsYXRlIFNUSFlJIGluc3RydWN0aW9uCiAgIyBpb19zdWJtaXQgLSBzdWJtaXQgYXN5bmNocm9ub3VzIEkvTyBibG9ja3MgZm9yIHByb2Nlc3NpbmcKICAjIG1sb2NrIC0gbG9jayBhbmQgdW5sb2NrIG1lbW9yeQogICMgbWxvY2syIC0gbG9jayBhbmQgdW5sb2NrIG1lbW9yeQogICMgbXVubG9jayAtIGxvY2sgYW5kIHVubG9jayBtZW1vcnkKICAjIG1sb2NrYWxsIC0gbG9jayBhbmQgdW5sb2NrIG1lbW9yeQogICMgbXVubG9ja2FsbCAtIGxvY2sgYW5kIHVubG9jayBtZW1vcnkKICAjIHVtYXNrIC0gc2V0IGZpbGUgbW9kZSBjcmVhdGlvbiBtYXNrCiAgIyBhcmNoX3ByY3RsIC0gc2V0IGFyY2hpdGVjdHVyZS1zcGVjaWZpYyB0aHJlYWQgc3RhdGUKICAjIHVzZWxpYiAtIGxvYWQgc2hhcmVkIGxpYnJhcnkKICAjIHNlbmRmaWxlIC0gdHJhbnNmZXIgZGF0YSBiZXR3ZWVuIGZpbGUgZGVzY3JpcHRvcnMKICAjIHNobWN0bCAtIFN5c3RlbSBWIHNoYXJlZCBtZW1vcnkgY29udHJvbAogICMgZXBvbGxfd2FpdCAtIHdhaXQgZm9yIGFuIEkvTyBldmVudCBvbiBhbiBlcG9sbCBmaWxlIGRlc2NyaXB0b3IKICAjIGVwb2xsX3B3YWl0IC0gd2FpdCBmb3IgYW4gSS9PIGV2ZW50IG9uIGFuIGVwb2xsIGZpbGUgZGVzY3JpcHRvcgogICMgc2lnYWx0c3RhY2sgLSBzZXQgYW5kL29yIGdldCBzaWduYWwgc3RhY2sgY29udGV4dAogICMgaW9jdGwgLSBjb250cm9sIGRldmljZQogICMgc2lnbmFsZmQgLSBjcmVhdGUgYSBmaWxlIGRlc2NyaXB0b3IgZm9yIGFjY2VwdGluZyBzaWduYWxzCiAgIyB1bnNoYXJlIC0gZGlzYXNzb2NpYXRlIHBhcnRzIG9mIHRoZSBwcm9jZXNzIGV4ZWN1dGlvbiBjb250ZXh0CiAgIyBjaHJvb3QgLSBjaGFuZ2Ugcm9vdCBkaXJlY3RvcnkKICAjIG1hZHZpc2UgLSBnaXZlIGFkdmljZSBhYm91dCB1c2Ugb2YgbWVtb3J5CiAgIyBnZXR0aWQgLSBnZXQgdGhyZWFkIGlkZW50aWZpY2F0aW9uCiAgIyBnZXRzb2NrbmFtZSAtIGdldCBzb2NrZXQgbmFtZQogICMgaW9fZGVzdHJveSAtIGRlc3Ryb3kgYW4gYXN5bmNocm9ub3VzIEkvTyBjb250ZXh0CiAgIyBzZXR1cCAtIHNldHVwIGRldmljZXMgYW5kIGZpbGVzeXN0ZW1zLCBtb3VudCByb290IGZpbGVzeXN0ZW0KICAjIG50cF9hZGp0aW1lIC0gdHVuZSBrZXJuZWwgY2xvY2sKICAjIHNlbWdldCAtIGdldCBhIFN5c3RlbSBWIHNlbWFwaG9yZSBzZXQgaWRlbnRpZmllcgogICMgZ2V0dWlkIC0gZ2V0IHVzZXIgaWRlbnRpdHkKICAjIGdldGV1aWQgLSBnZXQgdXNlciBpZGVudGl0eQogICMgX3N5c2NhbGwgLSBpbnZva2luZyBhIHN5c3RlbSBjYWxsIHdpdGhvdXQgbGlicmFyeSBzdXBwb3J0IChPQlNPTEVURSkKICAjIHNjaGVkX3NldGFmZmluaXR5IC0gXCBzZXQgYW5kIGdldCBhIHRocmVhZCdzIENQVSBhZmZpbml0eSBtYXNrCiAgIyBzY2hlZF9nZXRhZmZpbml0eSAtIFwgc2V0IGFuZCBnZXQgYSB0aHJlYWQncyBDUFUgYWZmaW5pdHkgbWFzawogICMgY2FjaGVmbHVzaCAtIGZsdXNoIGNvbnRlbnRzIG9mIGluc3RydWN0aW9uIGFuZC9vciBkYXRhIGNhY2hlCiAgIyBwaXZvdF9yb290IC0gY2hhbmdlIHRoZSByb290IG1vdW50CiAgIyBtc2djdGwgLSBTeXN0ZW0gViBtZXNzYWdlIGNvbnRyb2wgb3BlcmF0aW9ucwogICMgaW9jdGxfZmF0IC0gbWFuaXB1bGF0aW5nIHRoZSBGQVQgZmlsZXN5c3RlbQogICMgc2V0cGdpZCAtIHNldC9nZXQgcHJvY2VzcyBncm91cAogICMgZ2V0cGdpZCAtIHNldC9nZXQgcHJvY2VzcyBncm91cAogICMgc2V0cGdycCAtIHNldC9nZXQgcHJvY2VzcyBncm91cAogICMgZ2V0cGdycCAtIHNldC9nZXQgcHJvY2VzcyBncm91cAogICMgc29ja2V0cGFpciAtIGNyZWF0ZSBhIHBhaXIgb2YgY29ubmVjdGVkIHNvY2tldHMKICAjIGJkZmx1c2ggLSBzdGFydCwgZmx1c2gsIG9yIHR1bmUgYnVmZmVyLWRpcnR5LWZsdXNoIGRhZW1vbgogICMgYWxhcm0gLSBzZXQgYW4gYWxhcm0gY2xvY2sgZm9yIGRlbGl2ZXJ5IG9mIGEgc2lnbmFsCiAgIyB0aW1lcl9zZXR0aW1lIC0gYXJtL2Rpc2FybSBhbmQgZmV0Y2ggc3RhdGUgb2YgUE9TSVggcGVyLXByb2Nlc3MgdGltZXIKICAjIHRpbWVyX2dldHRpbWUgLSBhcm0vZGlzYXJtIGFuZCBmZXRjaCBzdGF0ZSBvZiBQT1NJWCBwZXItcHJvY2VzcyB0aW1lcgogICMgYWRkX2tleSAtIGFkZCBhIGtleSB0byB0aGUga2VybmVsJ3Mga2V5IG1hbmFnZW1lbnQgZmFjaWxpdHkKICAjIHJ0X3NpZ3F1ZXVlaW5mbyAtIHF1ZXVlIGEgc2lnbmFsIGFuZCBkYXRhCiAgIyBydF90Z3NpZ3F1ZXVlaW5mbyAtIHF1ZXVlIGEgc2lnbmFsIGFuZCBkYXRhCiAgIyB1c2VyZmF1bHRmZCAtIGNyZWF0ZSBhIGZpbGUgZGVzY3JpcHRvciBmb3IgaGFuZGxpbmcgcGFnZSBmYXVsdHMgaW4gdXNlciBzcGFjZQogICMgc2Vtb3AgLSBTeXN0ZW0gViBzZW1hcGhvcmUgb3BlcmF0aW9ucwogICMgc2VtdGltZWRvcCAtIFN5c3RlbSBWIHNlbWFwaG9yZSBvcGVyYXRpb25zCiAgIyBnZXRnaWQgLSBnZXQgZ3JvdXAgaWRlbnRpdHkKICAjIGdldGVnaWQgLSBnZXQgZ3JvdXAgaWRlbnRpdHkKICAjIGdldHBpZCAtIGdldCBwcm9jZXNzIGlkZW50aWZpY2F0aW9uCiAgIyBnZXRwcGlkIC0gZ2V0IHByb2Nlc3MgaWRlbnRpZmljYXRpb24KICAjIHNpZ3Byb2NtYXNrIC0gZXhhbWluZSBhbmQgY2hhbmdlIGJsb2NrZWQgc2lnbmFscwogICMgcnRfc2lncHJvY21hc2sgLSBleGFtaW5lIGFuZCBjaGFuZ2UgYmxvY2tlZCBzaWduYWxzCiAgIyB1bmFtZSAtIGdldCBuYW1lIGFuZCBpbmZvcm1hdGlvbiBhYm91dCBjdXJyZW50IGtlcm5lbAogICMgc3RhdHggLSBnZXQgZmlsZSBzdGF0dXMgKGV4dGVuZGVkKQogICMgaW9jdGxfZmljbG9uZXJhbmdlIC0gc2hhcmUgc29tZSB0aGUgZGF0YSBvZiBvbmUgZmlsZSB3aXRoIGFub3RoZXIgZmlsZQogICMgaW9jdGxfZmljbG9uZSAtIHNoYXJlIHNvbWUgdGhlIGRhdGEgb2Ygb25lIGZpbGUgd2l0aCBhbm90aGVyIGZpbGUKICAjIG1xX2dldHNldGF0dHIgLSBnZXQvc2V0IG1lc3NhZ2UgcXVldWUgYXR0cmlidXRlcwogICMgaW9wcmlvX2dldCAtIGdldC9zZXQgSS9PIHNjaGVkdWxpbmcgY2xhc3MgYW5kIHByaW9yaXR5CiAgIyBpb3ByaW9fc2V0IC0gZ2V0L3NldCBJL08gc2NoZWR1bGluZyBjbGFzcyBhbmQgcHJpb3JpdHkKICAjIGVwb2xsX2N0bCAtIGNvbnRyb2wgaW50ZXJmYWNlIGZvciBhbiBlcG9sbCBmaWxlIGRlc2NyaXB0b3IKICAjIHN5bmMgLSBjb21taXQgZmlsZXN5c3RlbSBjYWNoZXMgdG8gZGlzawogICMgc3luY2ZzIC0gY29tbWl0IGZpbGVzeXN0ZW0gY2FjaGVzIHRvIGRpc2sKICAjIHNldHNpZCAtIGNyZWF0ZXMgYSBzZXNzaW9uIGFuZCBzZXRzIHRoZSBwcm9jZXNzIGdyb3VwIElECiAgIyBzaHV0ZG93biAtIHNodXQgZG93biBwYXJ0IG9mIGEgZnVsbC1kdXBsZXggY29ubmVjdGlvbgogICMgZ2V0c2lkIC0gZ2V0IHNlc3Npb24gSUQKICAjIGdldF90aHJlYWRfYXJlYSAtIG1hbmlwdWxhdGUgdGhyZWFkLWxvY2FsIHN0b3JhZ2UgaW5mb3JtYXRpb24KICAjIHNldF90aHJlYWRfYXJlYSAtIG1hbmlwdWxhdGUgdGhyZWFkLWxvY2FsIHN0b3JhZ2UgaW5mb3JtYXRpb24KICAjIHRpbWVyZmRfY3JlYXRlIC0gdGltZXJzIHRoYXQgbm90aWZ5IHZpYSBmaWxlIGRlc2NyaXB0b3JzCiAgIyB0aW1lcmZkX3NldHRpbWUgLSB0aW1lcnMgdGhhdCBub3RpZnkgdmlhIGZpbGUgZGVzY3JpcHRvcnMKICAjIHRpbWVyZmRfZ2V0dGltZSAtIHRpbWVycyB0aGF0IG5vdGlmeSB2aWEgZmlsZSBkZXNjcmlwdG9ycwogICMgaW9jdGxfZmlkZWR1cGVyYW5nZSAtIHNoYXJlIHNvbWUgdGhlIGRhdGEgb2Ygb25lIGZpbGUgd2l0aCBhbm90aGVyIGZpbGUKICAjIG5hbWVfdG9faGFuZGxlX2F0IC0gb2J0YWluIGhhbmRsZSBmb3IgYSBwYXRobmFtZSBhbmQgb3BlbiBmaWxlIHZpYSBhIGhhbmRsZQogICMgb3Blbl9ieV9oYW5kbGVfYXQgLSBvYnRhaW4gaGFuZGxlIGZvciBhIHBhdGhuYW1lIGFuZCBvcGVuIGZpbGUgdmlhIGEgaGFuZGxlCiAgIyBmdXRleCAtIGZhc3QgdXNlci1zcGFjZSBsb2NraW5nCiAgIyBpb2N0bF9ucyAtIGlvY3RsKCkgb3BlcmF0aW9ucyBmb3IgTGludXggbmFtZXNwYWNlcwogICMgcGlkZmRfc2VuZF9zaWduYWwgLSBzZW5kIGEgc2lnbmFsIHRvIGEgcHJvY2VzcyBzcGVjaWZpZWQgYnkgYSBmaWxlIGRlc2NyaXB0b3IKICAjIGNsb25lIC0gY3JlYXRlIGEgY2hpbGQgcHJvY2VzcwogICMgX19jbG9uZTIgLSBjcmVhdGUgYSBjaGlsZCBwcm9jZXNzCiAgIyBjbG9uZTMgLSBjcmVhdGUgYSBjaGlsZCBwcm9jZXNzCiAgIyB0aW1lcyAtIGdldCBwcm9jZXNzIHRpbWVzCiAgIyBzeXNpbmZvIC0gcmV0dXJuIHN5c3RlbSBpbmZvcm1hdGlvbgogICMgaXBjIC0gU3lzdGVtIFYgSVBDIHN5c3RlbSBjYWxscwogICMgZXZlbnRmZCAtIGNyZWF0ZSBhIGZpbGUgZGVzY3JpcHRvciBmb3IgZXZlbnQgbm90aWZpY2F0aW9uCiAgIyB3YWl0IC0gd2FpdCBmb3IgcHJvY2VzcyB0byBjaGFuZ2Ugc3RhdGUKICAjIHdhaXRwaWQgLSB3YWl0IGZvciBwcm9jZXNzIHRvIGNoYW5nZSBzdGF0ZQogICMgd2FpdGlkIC0gd2FpdCBmb3IgcHJvY2VzcyB0byBjaGFuZ2Ugc3RhdGUKICAjIGdldGRvbWFpbm5hbWUgLSBnZXQvc2V0IE5JUyBkb21haW4gbmFtZQogICMgaWRsZSAtIG1ha2UgcHJvY2VzcyAwIGlkbGUKICAjIGlub3RpZnlfYWRkX3dhdGNoIC0gYWRkIGEgd2F0Y2ggdG8gYW4gaW5pdGlhbGl6ZWQgaW5vdGlmeSBpbnN0YW5jZQogICMgZ2V0X21lbXBvbGljeSAtIHJldHJpZXZlIE5VTUEgbWVtb3J5IHBvbGljeSBmb3IgYSB0aHJlYWQKICAjIGJwZiAtIHBlcmZvcm0gYSBjb21tYW5kIG9uIGFuIGV4dGVuZGVkIEJQRiBtYXAgb3IgcHJvZ3JhbQogICMgZ2V0c29ja29wdCAtIGdldCBhbmQgc2V0IG9wdGlvbnMgb24gc29ja2V0cwogICMgc2V0c29ja29wdCAtIGdldCBhbmQgc2V0IG9wdGlvbnMgb24gc29ja2V0cwogICMgZ2V0aXRpbWVyIC0gZ2V0IG9yIHNldCB2YWx1ZSBvZiBhbiBpbnRlcnZhbCB0aW1lcgogICMgc2V0aXRpbWVyIC0gZ2V0IG9yIHNldCB2YWx1ZSBvZiBhbiBpbnRlcnZhbCB0aW1lcgogICMgbWVtYmFycmllciAtIGlzc3VlIG1lbW9yeSBiYXJyaWVycyBvbiBhIHNldCBvZiB0aHJlYWRzCiAgIyBtcHJvdGVjdCAtIHNldCBwcm90ZWN0aW9uIG9uIGEgcmVnaW9uIG9mIG1lbW9yeQogICMgcGtleV9tcHJvdGVjdCAtIHNldCBwcm90ZWN0aW9uIG9uIGEgcmVnaW9uIG9mIG1lbW9yeQogICMgZ2V0Y3B1IC0gZGV0ZXJtaW5lIENQVSBhbmQgTlVNQSBub2RlIG9uIHdoaWNoIHRoZSBjYWxsaW5nIHRocmVhZCBpcyBydW5uaW5nCiAgIyBpb2N0bF9mc2xhYmVsIC0gZ2V0IG9yIHNldCBhIGZpbGVzeXN0ZW0gbGFiZWwKICAjIGxpc3R4YXR0ciAtIGxpc3QgZXh0ZW5kZWQgYXR0cmlidXRlIG5hbWVzCiAgIyBsbGlzdHhhdHRyIC0gbGlzdCBleHRlbmRlZCBhdHRyaWJ1dGUgbmFtZXMKICAjIGZsaXN0eGF0dHIgLSBsaXN0IGV4dGVuZGVkIGF0dHJpYnV0ZSBuYW1lcwogICMgX2xsc2VlayAtIHJlcG9zaXRpb24gcmVhZC93cml0ZSBmaWxlIG9mZnNldAogICMgZmNudGwgLSBtYW5pcHVsYXRlIGZpbGUgZGVzY3JpcHRvcgogICMgdXN0YXQgLSBnZXQgZmlsZXN5c3RlbSBzdGF0aXN0aWNzCiAgIyBzaWduYWwgLSBBTlNJIEMgc2lnbmFsIGhhbmRsaW5nCiAgIyBuYW5vc2xlZXAgLSBoaWdoLXJlc29sdXRpb24gc2xlZXAKICAjIGNvbm5lY3QgLSBpbml0aWF0ZSBhIGNvbm5lY3Rpb24gb24gYSBzb2NrZXQKICAjIHZtODZvbGQgLSBlbnRlciB2aXJ0dWFsIDgwODYgbW9kZQogICMgdm04NiAtIGVudGVyIHZpcnR1YWwgODA4NiBtb2RlCiAgIyBmYW5vdGlmeV9pbml0IC0gY3JlYXRlIGFuZCBpbml0aWFsaXplIGZhbm90aWZ5IGdyb3VwCiAgIyBtaWdyYXRlX3BhZ2VzIC0gbW92ZSBhbGwgcGFnZXMgaW4gYSBwcm9jZXNzIHRvIGFub3RoZXIgc2V0IG9mIG5vZGVzCiAgIyByZXN0YXJ0X3N5c2NhbGwgLSByZXN0YXJ0IGEgc3lzdGVtIGNhbGwgYWZ0ZXIgaW50ZXJydXB0aW9uIGJ5IGEgc3RvcCBzaWduYWwKICAjIGNsb3NlIC0gY2xvc2UgYSBmaWxlIGRlc2NyaXB0b3IKICAjIG1zZ3JjdiAtIFN5c3RlbSBWIG1lc3NhZ2UgcXVldWUgb3BlcmF0aW9ucwogICMgbXNnc25kIC0gU3lzdGVtIFYgbWVzc2FnZSBxdWV1ZSBvcGVyYXRpb25zCiAgIyByZWFkdiAtIHJlYWQgb3Igd3JpdGUgZGF0YSBpbnRvIG11bHRpcGxlIGJ1ZmZlcnMKICAjIHdyaXRldiAtIHJlYWQgb3Igd3JpdGUgZGF0YSBpbnRvIG11bHRpcGxlIGJ1ZmZlcnMKICAjIHByZWFkdiAtIHJlYWQgb3Igd3JpdGUgZGF0YSBpbnRvIG11bHRpcGxlIGJ1ZmZlcnMKICAjIHB3cml0ZXYgLSByZWFkIG9yIHdyaXRlIGRhdGEgaW50byBtdWx0aXBsZSBidWZmZXJzCiAgIyBwcmVhZHYyIC0gcmVhZCBvciB3cml0ZSBkYXRhIGludG8gbXVsdGlwbGUgYnVmZmVycwogICMgcHdyaXRldjIgLSByZWFkIG9yIHdyaXRlIGRhdGEgaW50byBtdWx0aXBsZSBidWZmZXJzCiAgIyBzeXNsb2cgLSByZWFkIGFuZC9vciBjbGVhciBrZXJuZWwgbWVzc2FnZSByaW5nIGJ1ZmZlcjsgc2V0IGNvbnNvbGVfbG9nbGV2ZWwKICAjIGtsb2djdGwgLSByZWFkIGFuZC9vciBjbGVhciBrZXJuZWwgbWVzc2FnZSByaW5nIGJ1ZmZlcjsgc2V0IGNvbnNvbGVfbG9nbGV2ZWwKICAjIHNjaGVkX3lpZWxkIC0geWllbGQgdGhlIHByb2Nlc3NvcgogICMgdmhhbmd1cCAtIHZpcnR1YWxseSBoYW5ndXAgdGhlIGN1cnJlbnQgdGVybWluYWwKICAjIGlvY3RsX2lmbGFncyAtIGlvY3RsKCkgb3BlcmF0aW9ucyBmb3IgaW5vZGUgZmxhZ3MKICAjIHNnZXRtYXNrIC0gbWFuaXB1bGF0aW9uIG9mIHNpZ25hbCBtYXNrIChvYnNvbGV0ZSkKICAjIHNzZXRtYXNrIC0gbWFuaXB1bGF0aW9uIG9mIHNpZ25hbCBtYXNrIChvYnNvbGV0ZSkKICAjIHN5bmNfZmlsZV9yYW5nZSAtIHN5bmMgYSBmaWxlIHNlZ21lbnQgd2l0aCBkaXNrCiAgIyBjb3B5X2ZpbGVfcmFuZ2UgLSBDb3B5IGEgcmFuZ2Ugb2YgZGF0YSBmcm9tIG9uZSBmaWxlIHRvIGFub3RoZXIKICAjIHNpZ3BlbmRpbmcgLSBleGFtaW5lIHBlbmRpbmcgc2lnbmFscwogICMgcnRfc2lncGVuZGluZyAtIGV4YW1pbmUgcGVuZGluZyBzaWduYWxzCiAgIyBnZXR1bndpbmQgLSBjb3B5IHRoZSB1bndpbmQgZGF0YSB0byBjYWxsZXIncyBidWZmZXIKICAjIG1zeW5jIC0gc3luY2hyb25pemUgYSBmaWxlIHdpdGggYSBtZW1vcnkgbWFwCiAgIyBnZXRfcm9idXN0X2xpc3QgLSBnZXQvc2V0IGxpc3Qgb2Ygcm9idXN0IGZ1dGV4ZXMKICAjIHNldF9yb2J1c3RfbGlzdCAtIGdldC9zZXQgbGlzdCBvZiByb2J1c3QgZnV0ZXhlcwogICMgZHVwIC0gZHVwbGljYXRlIGEgZmlsZSBkZXNjcmlwdG9yCiAgIyBkdXAyIC0gZHVwbGljYXRlIGEgZmlsZSBkZXNjcmlwdG9yCiAgIyBkdXAzIC0gZHVwbGljYXRlIGEgZmlsZSBkZXNjcmlwdG9yCiAgIyBzMzkwX3BjaV9tbWlvX3dyaXRlIC0gdHJhbnNmZXIgZGF0YSB0by9mcm9tIFBDSSBNTUlPIG1lbW9yeSBwYWdlCiAgIyBzMzkwX3BjaV9tbWlvX3JlYWQgLSB0cmFuc2ZlciBkYXRhIHRvL2Zyb20gUENJIE1NSU8gbWVtb3J5IHBhZ2UKICAjIHBhdXNlIC0gd2FpdCBmb3Igc2lnbmFsCiAgIyBzd2Fwb24gLSBzdGFydC9zdG9wIHN3YXBwaW5nIHRvIGZpbGUvZGV2aWNlCiAgIyBzd2Fwb2ZmIC0gc3RhcnQvc3RvcCBzd2FwcGluZyB0byBmaWxlL2RldmljZQoKICAjIFJlY29yZCB0eXBlIG5vcm1hbGl6YXRpb25zCiAgIyBVc2VmdWwgbGlua3M6CiAgIyBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vdG9ydmFsZHMvbGludXgvdjQuMTYvaW5jbHVkZS91YXBpL2xpbnV4L2F1ZGl0LmgKICAjIGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9saW51eC1hdWRpdC9hdWRpdC11c2Vyc3BhY2UvNGQ5MzMzMDFiMTgzNWNhZmEwOGI5ZTllZjcwNWM4ZmI2Yzk2Y2I2Mi9saWIvbGliYXVkaXQuaAogICMgaHR0cHM6Ly93d3cuZWxhc3RpYy5jby9ndWlkZS9lbi9lY3MvY3VycmVudC9lY3MtYWxsb3dlZC12YWx1ZXMtZXZlbnQtY2F0ZWdvcnkuaHRtbAoKICAjIElBTSByZWxhdGVkIGV2ZW50cwoKICAjIEFVRElUX0FDQ1RfTE9DSyAtIFVzZXIncyBhY2NvdW50IGxvY2tlZCBieSBhZG1pbgogIC0gcmVjb3JkX3R5cGVzOiBBQ0NUX0xPQ0sKICAgIGFjdGlvbjogbG9ja2VkLWFjY291bnQKICAgIGVjczoKICAgICAgPDw6ICplY3MtaWFtCiAgICAgIHR5cGU6CiAgICAgICAgLSB1c2VyCiAgICAgICAgLSBpbmZvCiAgIyBBVURJVF9BQ0NUX1VOTE9DSyAtIFVzZXIncyBhY2NvdW50IHVubG9ja2VkIGJ5IGFkbWluCiAgLSByZWNvcmRfdHlwZXM6IEFDQ1RfVU5MT0NLCiAgICBhY3Rpb246IHVubG9ja2VkLWFjY291bnQKICAgIGVjczoKICAgICAgPDw6ICplY3MtaWFtCiAgICAgIHR5cGU6CiAgICAgICAgLSB1c2VyCiAgICAgICAgLSBpbmZvCiAgIyBBVURJVF9BRERfR1JPVVAgLSBHcm91cCBhY2NvdW50IGFkZGVkCiAgLSByZWNvcmRfdHlwZXM6IEFERF9HUk9VUAogICAgYWN0aW9uOiBhZGRlZC1ncm91cC1hY2NvdW50LXRvCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IFtpZCwgYWNjdF0KICAgICAgd2hhdDogYWNjb3VudAogICAgZWNzOgogICAgICA8PDogKmVjcy1pYW0KICAgICAgPDw6ICplY3MtZ3JvdXAtbW9kaWZpY2F0aW9uLW1hcHBpbmdzCiAgICAgIHR5cGU6CiAgICAgICAgLSBncm91cAogICAgICAgIC0gY3JlYXRpb24KCiAgIyBBVURJVF9BRERfVVNFUiAtIFVzZXIgYWNjb3VudCBhZGRlZAogIC0gcmVjb3JkX3R5cGVzOiBBRERfVVNFUgogICAgYWN0aW9uOiBhZGRlZC11c2VyLWFjY291bnQKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogW2lkLCBhY2N0XQogICAgICB3aGF0OiBhY2NvdW50CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWlhbQogICAgICA8PDogKmVjcy11c2VyLW1vZGlmaWNhdGlvbi1tYXBwaW5ncwogICAgICB0eXBlOgogICAgICAgIC0gdXNlcgogICAgICAgIC0gY3JlYXRpb24KICAjIEFVRElUX0RFTF9HUk9VUCAtIEdyb3VwIGFjY291bnQgZGVsZXRlZAogIC0gcmVjb3JkX3R5cGVzOiBERUxfR1JPVVAKICAgIGFjdGlvbjogZGVsZXRlZC1ncm91cC1hY2NvdW50LWZyb20KICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogW2lkLCBhY2N0XQogICAgICB3aGF0OiBhY2NvdW50CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWlhbQogICAgICA8PDogKmVjcy1ncm91cC1tb2RpZmljYXRpb24tbWFwcGluZ3MKICAgICAgdHlwZToKICAgICAgICAtIGdyb3VwCiAgICAgICAgLSBkZWxldGlvbgogICMgQVVESVRfREVMX1VTRVIgLSBVc2VyIGFjY291bnQgZGVsZXRlZAogIC0gcmVjb3JkX3R5cGVzOiBERUxfVVNFUgogICAgYWN0aW9uOiBkZWxldGVkLXVzZXItYWNjb3VudAogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBbaWQsIGFjY3RdCiAgICAgIHdoYXQ6IGFjY291bnQKICAgIGVjczoKICAgICAgPDw6ICplY3MtaWFtCiAgICAgIDw8OiAqZWNzLXVzZXItbW9kaWZpY2F0aW9uLW1hcHBpbmdzCiAgICAgIHR5cGU6CiAgICAgICAgLSB1c2VyCiAgICAgICAgLSBkZWxldGlvbgogICMgQVVESVRfR1JQX01HTVQgLSBHcm91cCBhY2NvdW50IGF0dHIgd2FzIG1vZGlmaWVkCiAgLSByZWNvcmRfdHlwZXM6IEdSUF9NR01UCiAgICBhY3Rpb246IG1vZGlmaWVkLWdyb3VwLWFjY291bnQKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogW2lkLCBhY2N0XQogICAgICB3aGF0OiBhY2NvdW50CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWlhbQogICAgICB0eXBlOgogICAgICAgIC0gZ3JvdXAKICAgICAgICAtIGNoYW5nZQogICAgICBtYXBwaW5nczoKICAgICAgICAtIGZyb206IHN1YmplY3QucHJpbWFyeQogICAgICAgICAgdG86IHVzZXIKICAgICAgICAtIGZyb206IHN1YmplY3Quc2Vjb25kYXJ5CiAgICAgICAgICB0bzogZ3JvdXAudGFyZ2V0CiAgICAgICAgLSBmcm9tOiB1aWQudWlkCiAgICAgICAgICB0bzogdXNlci5lZmZlY3RpdmUKICAjIEFVRElUX1JPTEVfQVNTSUdOIC0gQWRtaW4gYXNzaWduZWQgdXNlciB0byByb2xlCiAgLSByZWNvcmRfdHlwZXM6IFJPTEVfQVNTSUdOCiAgICBhY3Rpb246IGFzc2lnbmVkLXVzZXItcm9sZS10bwogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBbaWQsIGFjY3RdCiAgICAgIHdoYXQ6IGFjY291bnQKICAgIGVjczoKICAgICAgPDw6ICplY3MtaWFtCiAgICAgIHR5cGU6CiAgICAgICAgLSB1c2VyCiAgICAgICAgLSBjaGFuZ2UKICAjIEFVRElUX1JPTEVfTU9ESUZZIC0gQWRtaW4gbW9kaWZpZWQgYSByb2xlCiAgLSByZWNvcmRfdHlwZXM6IFJPTEVfTU9ESUZZCiAgICBhY3Rpb246IG1vZGlmaWVkLXJvbGUKICAgIGVjczoKICAgICAgPDw6ICplY3MtaWFtCiAgICAgIHR5cGU6CiAgICAgICAgLSBjaGFuZ2UKICAjIEFVRElUX1JPTEVfUkVNT1ZFIC0gQWRtaW4gcmVtb3ZlZCB1c2VyIGZyb20gcm9sZQogIC0gcmVjb3JkX3R5cGVzOiBST0xFX1JFTU9WRQogICAgYWN0aW9uOiByZW1vdmVkLXVzZXItcm9sZS1mcm9tCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IFtpZCwgYWNjdF0KICAgICAgd2hhdDogYWNjb3VudAogICAgZWNzOgogICAgICA8PDogKmVjcy1pYW0KICAgICAgdHlwZToKICAgICAgICAtIHVzZXIKICAgICAgICAtIGNoYW5nZQogICMgQVVESVRfVVNFUl9NR01UIC0gVXNlciBhY2N0IGF0dHJpYnV0ZSBjaGFuZ2UKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IFVTRVJfTUdNVAogICAgYWN0aW9uOiBtb2RpZmllZC11c2VyLWFjY291bnQKICAgIGVjczoKICAgICAgPDw6ICplY3MtaWFtCiAgICAgIHR5cGU6CiAgICAgICAgLSB1c2VyCiAgICAgICAgLSBjaGFuZ2UKICAgICAgbWFwcGluZ3M6CiAgICAgICAgLSBmcm9tOiBzdWJqZWN0LnByaW1hcnkKICAgICAgICAgIHRvOiB1c2VyCiAgICAgICAgLSBmcm9tOiBzdWJqZWN0LnNlY29uZGFyeQogICAgICAgICAgdG86IHVzZXIudGFyZ2V0CiAgICAgICAgLSBmcm9tOiB1aWQudWlkCiAgICAgICAgICB0bzogdXNlci5lZmZlY3RpdmUKICAjIEFVRElUX1VTRVJfQ0hBVVRIVE9LIC0gVXNlciBhY2N0IHBhc3N3b3JkIG9yIHBpbiBjaGFuZ2VkCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBVU0VSX0NIQVVUSFRPSwogICAgYWN0aW9uOiBjaGFuZ2VkLXBhc3N3b3JkCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWlhbQogICAgICB0eXBlOgogICAgICAgIC0gdXNlcgogICAgICAgIC0gY2hhbmdlCiAgICAgIG1hcHBpbmdzOgogICAgICAgIC0gZnJvbTogc3ViamVjdC5wcmltYXJ5CiAgICAgICAgICB0bzogdXNlcgogICAgICAgIC0gZnJvbTogdWlkLnVpZAogICAgICAgICAgdG86IHVzZXIuZWZmZWN0aXZlCiAgICAgICAgLSBmcm9tOiBzdWJqZWN0LnNlY29uZGFyeQogICAgICAgICAgdG86IHVzZXIudGFyZ2V0CgogICMgQVVESVRfR1JQX0NIQVVUSFRPSyAtIEdyb3VwIGFjY3QgcGFzc3dvcmQgb3IgcGluIGNoYW5nZWQKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IEdSUF9DSEFVVEhUT0sKICAgIGFjdGlvbjogY2hhbmdlZC1ncm91cC1wYXNzd29yZAogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBhY2N0CiAgICAgIHdoYXQ6IHVzZXItc2Vzc2lvbgogICAgZWNzOgogICAgICA8PDogKmVjcy1pYW0KICAgICAgdHlwZToKICAgICAgICAtIGdyb3VwCiAgICAgICAgLSBjaGFuZ2UKICAgICAgbWFwcGluZ3M6CiAgICAgICAgLSBmcm9tOiBzdWJqZWN0LnByaW1hcnkKICAgICAgICAgIHRvOiB1c2VyCiAgICAgICAgLSBmcm9tOiB1aWQudWlkCiAgICAgICAgICB0bzogdXNlci5lZmZlY3RpdmUKICAgICAgICAtIGZyb206IHN1YmplY3Quc2Vjb25kYXJ5CiAgICAgICAgICB0bzogZ3JvdXAudGFyZ2V0CgogICMgQXV0aGVudGljYXRpb24gcmVsYXRlZCBldmVudHMKCiAgIyBBVURJVF9DUkVEX0FDUSAtIFVzZXIgY3JlZGVudGlhbCBhY3F1aXJlZAogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogQ1JFRF9BQ1EKICAgIGFjdGlvbjogYWNxdWlyZWQtY3JlZGVudGlhbHMKICAgIGVjczogKmVjcy1hdXRoCiAgIyBBVURJVF9DUkVEX0RJU1AgLSBVc2VyIGNyZWRlbnRpYWwgZGlzcG9zZWQKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IENSRURfRElTUAogICAgYWN0aW9uOiBkaXNwb3NlZC1jcmVkZW50aWFscwogICAgZWNzOiAqZWNzLWF1dGgKICAjIEFVRElUX0NSRURfUkVGUiAtIFVzZXIgY3JlZGVudGlhbCByZWZyZXNoZWQKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IENSRURfUkVGUgogICAgYWN0aW9uOiByZWZyZXNoZWQtY3JlZGVudGlhbHMKICAgIGVjczogKmVjcy1hdXRoCiAgIyBBVURJVF9HUlBfQVVUSCAtIEF1dGhlbnRpY2F0aW9uIGZvciBncm91cCBwYXNzd29yZAogIC0gcmVjb3JkX3R5cGVzOiBHUlBfQVVUSAogICAgYWN0aW9uOiBhdXRoZW50aWNhdGVkLXRvLWdyb3VwCiAgICBlY3M6ICplY3MtYXV0aAogICMgQVVESVRfTE9HSU4gLSBEZWZpbmUgdGhlIGxvZ2luIGlkIGFuZCBpbmZvcm1hdGlvbgogIC0gcmVjb3JkX3R5cGVzOiBMT0dJTgogICAgYWN0aW9uOiBjaGFuZ2VkLWxvZ2luLWlkLXRvCiAgICBzdWJqZWN0OgogICAgICBwcmltYXJ5OiBbb2xkX2F1aWQsIG9sZC1hdWlkXQogICAgICBzZWNvbmRhcnk6IHVpZAogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBbbmV3LWF1aWQsIG5ld19hdWlkLCBhdWlkXQogICAgICB3aGF0OiB1c2VyLXNlc3Npb24KICAgIGVjczoKICAgICAgPDw6ICplY3MtYXV0aAogICAgICB0eXBlOiBzdGFydAogICAgICBtYXBwaW5nczoKICAgICAgICAtIGZyb206IHN1YmplY3QucHJpbWFyeQogICAgICAgICAgdG86IHVzZXIKICAgICAgICAtIGZyb206IG9iamVjdC5wcmltYXJ5CiAgICAgICAgICB0bzogdXNlci5lZmZlY3RpdmUKICAjIEFVRElUX1VTRVJfQUNDVCAtIFVzZXIgc3lzdGVtIGFjY2VzcyBhdXRob3JpemF0aW9uCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBVU0VSX0FDQ1QKICAgIGFjdGlvbjogd2FzLWF1dGhvcml6ZWQKICAgIGVjczogKmVjcy1hdXRoCiAgIyBBVURJVF9VU0VSX0FVVEggLSBVc2VyIHN5c3RlbSBhY2Nlc3MgYXV0aGVudGljYXRpb24KICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IFVTRVJfQVVUSAogICAgYWN0aW9uOiBhdXRoZW50aWNhdGVkCiAgICBlY3M6ICplY3MtYXV0aAogICMgQVVESVRfVVNFUl9FTkQgLSBVc2VyIHNlc3Npb24gZW5kCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBVU0VSX0VORAogICAgYWN0aW9uOiBlbmRlZC1zZXNzaW9uCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXNlc3Npb24KICAgICAgdHlwZTogZW5kCiAgIyBBVURJVF9VU0VSX0VSUiAtIFVzZXIgYWNjdCBzdGF0ZSBlcnJvcgogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogVVNFUl9FUlIKICAgIGFjdGlvbjogZXJyb3IKICAgIHNvdXJjZV9pcDogW2FkZHJdCiAgICBlY3M6ICplY3MtYXV0aAogICMgQVVESVRfVVNFUl9MT0dJTiAtIFVzZXIgaGFzIGxvZ2dlZCBpbgogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogVVNFUl9MT0dJTgogICAgYWN0aW9uOiBsb2dnZWQtaW4KICAgIHNvdXJjZV9pcDogW2FkZHJdCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWF1dGgKICAgICAgdHlwZTogc3RhcnQKICAjIEFVRElUX1VTRVJfTE9HT1VUIC0gVXNlciBoYXMgbG9nZ2VkIG91dAogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogVVNFUl9MT0dPVVQKICAgIGFjdGlvbjogbG9nZ2VkLW91dAogICAgZWNzOgogICAgICA8PDogKmVjcy1hdXRoCiAgICAgIHR5cGU6IGVuZAogICMgQVVESVRfVVNFUl9ST0xFX0NIQU5HRSAtIFVzZXIgY2hhbmdlZCB0byBhIG5ldyByb2xlCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBVU0VSX1JPTEVfQ0hBTkdFCiAgICBhY3Rpb246IGNoYW5nZWQtcm9sZS10bwogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBzZWxlY3RlZC1jb250ZXh0CiAgICAgIHdoYXQ6IHVzZXItc2Vzc2lvbgogICMgQVVESVRfVVNFUl9TVEFSVCAtIFVzZXIgc2Vzc2lvbiBzdGFydAogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogVVNFUl9TVEFSVAogICAgYWN0aW9uOiBzdGFydGVkLXNlc3Npb24KICAgIHNvdXJjZV9pcDogW2FkZHJdCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXNlc3Npb24KICAgICAgdHlwZTogc3RhcnQKCiAgIyBIb3N0IHZpcnR1YWxpemF0aW9uIGV2ZW50cwoKICAjIEFVRElUX1ZJUlRfQ09OVFJPTCAtIFN0YXJ0LCBQYXVzZSwgU3RvcCBWTQogIC0gcmVjb3JkX3R5cGVzOiBWSVJUX0NPTlRST0wKICAgIGFjdGlvbjogaXNzdWVkLXZtLWNvbnRyb2wKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogb3AKICAgICAgc2Vjb25kYXJ5OiB2bQogICAgICB3aGF0OiB2aXJ0dWFsLW1hY2hpbmUKICAgIGVjczogKmVjcy1ob3N0CiAgIyBBVURJVF9WSVJUX0NSRUFURSAtIENyZWF0aW9uIG9mIGd1ZXN0IGltYWdlCiAgLSByZWNvcmRfdHlwZXM6IFZJUlRfQ1JFQVRFCiAgICBhY3Rpb246IGNyZWF0ZWQtdm0taW1hZ2UKICAgIGVjczogKmVjcy1ob3N0CiAgIyBBVURJVF9WSVJUX0RFU1RST1kgLSBEZXN0cnVjdGlvbiBvZiBndWVzdCBpbWFnZQogIC0gcmVjb3JkX3R5cGVzOiBWSVJUX0RFU1RST1kKICAgIGFjdGlvbjogZGVsZXRlZC12bS1pbWFnZQogICAgZWNzOiAqZWNzLWhvc3QKICAjIEFVRElUX1ZJUlRfSU5URUdSSVRZX0NIRUNLIC0gR3Vlc3QgaW50ZWdyaXR5IHJlc3VsdHMKICAtIHJlY29yZF90eXBlczogVklSVF9JTlRFR1JJVFlfQ0hFQ0sKICAgIGFjdGlvbjogY2hlY2tlZC1pbnRlZ3JpdHktb2YKICAgIGVjczogKmVjcy1ob3N0CiAgIyBBVURJVF9WSVJUX01BQ0hJTkVfSUQgLSBCaW5kaW5nIG9mIGxhYmVsIHRvIFZNCiAgLSByZWNvcmRfdHlwZXM6IFZJUlRfTUFDSElORV9JRAogICAgYWN0aW9uOiBhc3NpZ25lZC12bS1pZAogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiB2bQogICAgICB3aGF0OiB2aXJ0dWFsLW1hY2hpbmUKICAgIGVjczogKmVjcy1ob3N0CiAgIyBBVURJVF9WSVJUX01JR1JBVEVfSU4gLSBJbmJvdW5kIGd1ZXN0IG1pZ3JhdGlvbiBpbmZvCiAgLSByZWNvcmRfdHlwZXM6IFZJUlRfTUlHUkFURV9JTgogICAgYWN0aW9uOiBtaWdyYXRlZC12bS1mcm9tCiAgICBlY3M6ICplY3MtaG9zdAogICMgQVVESVRfVklSVF9NSUdSQVRFX09VVCAtIE91dGJvdW5kIGd1ZXN0IG1pZ3JhdGlvbiBpbmZvCiAgLSByZWNvcmRfdHlwZXM6IFZJUlRfTUlHUkFURV9PVVQKICAgIGFjdGlvbjogbWlncmF0ZWQtdm0tdG8KICAgIGVjczogKmVjcy1ob3N0CiAgIyBBVURJVF9WSVJUX1JFU09VUkNFIC0gUmVzb3VyY2UgYXNzaWdubWVudAogIC0gcmVjb3JkX3R5cGVzOiBWSVJUX1JFU09VUkNFCiAgICBhY3Rpb246IGFzc2lnbmVkLXZtLXJlc291cmNlCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IHJlc3JjCiAgICAgIHNlY29uZGFyeTogdm0KICAgICAgd2hhdDogdmlydHVhbC1tYWNoaW5lCiAgICBlY3M6ICplY3MtaG9zdAoKICAjIFVzZXJzcGFjZSBwcm9jZXNzIGV2ZW50cwoKICAjIEFVRElUX0NIR1JQX0lEIC0gVXNlciBzcGFjZSBncm91cCBJRCBjaGFuZ2VkCiAgLSByZWNvcmRfdHlwZXM6IENIR1JQX0lECiAgICBhY3Rpb246IGNoYW5nZWQtZ3JvdXAKICAgIGVjczoKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBjaGFuZ2UKICAjIEFVRElUX0NIVVNFUl9JRCAtIENoYW5nZWQgdXNlciBJRCBzdXBwbGVtZW50YWwgZGF0YQogIC0gcmVjb3JkX3R5cGVzOiBDSFVTRVJfSUQKICAgIGFjdGlvbjogY2hhbmdlZC11c2VyLWlkCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogY2hhbmdlCiAgIyBBVURJVF9URVNUIC0gVXNlZCBmb3IgdGVzdCBzdWNjZXNzIG1lc3NhZ2VzCiAgLSByZWNvcmRfdHlwZXM6IFRFU1QKICAgIGFjdGlvbjogc2VudC10ZXN0CiAgICBlY3M6ICplY3MtcHJvY2VzcwogICMgQVVESVRfVFJVU1RFRF9BUFAgLSBUcnVzdGVkIGFwcCBtc2cgLSBmcmVlc3R5bGUgdGV4dAogIC0gcmVjb3JkX3R5cGVzOiBUUlVTVEVEX0FQUAogICAgYWN0aW9uOiB1bmtub3duCiAgICBlY3M6ICplY3MtcHJvY2VzcwogICMgQVVESVRfVVNFUl9DTUQgLSBVc2VyIHNoZWxsIGNvbW1hbmQgYW5kIGFyZ3MKICAtIHJlY29yZF90eXBlczogVVNFUl9DTUQKICAgIGFjdGlvbjogcmFuLWNvbW1hbmQKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogY21kCiAgICAgIHdoYXQ6IHByb2Nlc3MKICAgIGRlc2NyaXB0aW9uOiA+CiAgICAgIFRoZXNlIG1lc3NhZ2VzIGFyZSBmcm9tIHVzZXItc3BhY2UgYXBwcywgbGlrZSBzdWRvLCB0aGF0IGxvZyBjb21tYW5kcwogICAgICBiZWluZyBydW4gYnkgYSB1c2VyLiBUaGUgdWlkIGNvbnRhaW5lZCBpbiB0aGVzZSBtZXNzYWdlcyBpcyB1c2VyJ3MgVUlEIGF0CiAgICAgIHRoZSB0aW1lIHRoZSBjb21tYW5kIHdhcyBydW4uIEl0IGlzIG5vdCB0aGUgInRhcmdldCIgVUlEIHVzZWQgdG8gcnVuIHRoZQogICAgICBjb21tYW5kLCB3aGljaCBpcyBub3JtYWxseSByb290LgogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IHN0YXJ0CgogICMgSG9zdC1sZXZlbCBldmVudHMKCiAgIyBBVURJVF9TWVNURU1fQk9PVCAtIFN5c3RlbSBib290CiAgLSByZWNvcmRfdHlwZXM6IFNZU1RFTV9CT09UCiAgICBhY3Rpb246IGJvb3RlZC1zeXN0ZW0KICAgIG9iamVjdDoKICAgICAgd2hhdDogc3lzdGVtCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWhvc3QKICAgICAgdHlwZTogc3RhcnQKICAjIEFVRElUX1NZU1RFTV9SVU5MRVZFTCAtIFN5c3RlbSBydW5sZXZlbCBjaGFuZ2UKICAtIHJlY29yZF90eXBlczogU1lTVEVNX1JVTkxFVkVMCiAgICBhY3Rpb246IGNoYW5nZWQtdG8tcnVubGV2ZWwKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogbmV3LWxldmVsCiAgICAgIHdoYXQ6IHN5c3RlbQogICAgZWNzOgogICAgICA8PDogKmVjcy1ob3N0CiAgICAgIHR5cGU6IGNoYW5nZQogICMgQVVESVRfU1lTVEVNX1NIVVRET1dOIC0gU3lzdGVtIHNodXRkb3duCiAgLSByZWNvcmRfdHlwZXM6IFNZU1RFTV9TSFVURE9XTgogICAgYWN0aW9uOiBzaHV0ZG93bi1zeXN0ZW0KICAgIG9iamVjdDoKICAgICAgd2hhdDogc3lzdGVtCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWhvc3QKICAgICAgdHlwZTogZW5kCgogICMgU2VydmljZS1sZXZlbCBldmVudHMKCiAgIyBBVURJVF9TRVJWSUNFX1NUQVJUIC0gU2VydmljZSAoZGFlbW9uKSBzdGFydAogIC0gcmVjb3JkX3R5cGVzOiBTRVJWSUNFX1NUQVJUCiAgICBhY3Rpb246IHN0YXJ0ZWQtc2VydmljZQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiB1bml0CiAgICAgIHdoYXQ6IHNlcnZpY2UKICAgIGVjczoKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBzdGFydAogICMgQVVESVRfU0VSVklDRV9TVE9QIC0gU2VydmljZSAoZGFlbW9uKSBzdG9wCiAgLSByZWNvcmRfdHlwZXM6IFNFUlZJQ0VfU1RPUAogICAgYWN0aW9uOiBzdG9wcGVkLXNlcnZpY2UKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogdW5pdAogICAgICB3aGF0OiBzZXJ2aWNlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogc3RvcAoKICAjIEF1ZGl0ZCBpbnRlcm5hbCBldmVudHMKCiAgIyBBVURJVF9DT05GSUdfQ0hBTkdFIC0gQXVkaXQgc3lzdGVtIGNvbmZpZ3VyYXRpb24gY2hhbmdlCiAgLSByZWNvcmRfdHlwZXM6IENPTkZJR19DSEFOR0UKICAgIGFjdGlvbjogY2hhbmdlZC1hdWRpdC1jb25maWd1cmF0aW9uCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6CiAgICAgICAgW29wLCBrZXksIGF1ZGl0X2VuYWJsZWQsIGF1ZGl0X3BpZCwgYXVkaXRfYmFja2xvZ19saW1pdCwgYXVkaXRfZmFpbHVyZV0KICAgICAgd2hhdDogYXVkaXQtY29uZmlnCiAgICBlY3M6CiAgICAgIGNhdGVnb3J5OiBbcHJvY2VzcywgY29uZmlndXJhdGlvbl0KICAgICAgdHlwZTogY2hhbmdlCiAgIyBBVURJVF9EQUVNT05fQUJPUlQgLSBEYWVtb24gZXJyb3Igc3RvcCByZWNvcmQKICAtIHJlY29yZF90eXBlczogREFFTU9OX0FCT1JUCiAgICBhY3Rpb246IGFib3J0ZWQtYXVkaXRkLXN0YXJ0dXAKICAgIG9iamVjdDoKICAgICAgd2hhdDogc2VydmljZQogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IHN0b3AKICAjIEFVRElUX0RBRU1PTl9BQ0NFUFQgLSBBdWRpdGQgYWNjZXB0ZWQgcmVtb3RlIGNvbm5lY3Rpb24KICAtIHJlY29yZF90eXBlczogREFFTU9OX0FDQ0VQVAogICAgYWN0aW9uOiByZW1vdGUtYXVkaXQtY29ubmVjdGVkCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNlcnZpY2UKICAgIGVjczoKICAgICAgPDw6ICplY3MtbmV0d29yawogICAgICB0eXBlOgogICAgICAgIC0gY29ubmVjdGlvbgogICAgICAgIC0gc3RhcnQKICAjIEFVRElUX0RBRU1PTl9DTE9TRSAtIEF1ZGl0ZCBjbG9zZWQgcmVtb3RlIGNvbm5lY3Rpb24KICAtIHJlY29yZF90eXBlczogREFFTU9OX0NMT1NFCiAgICBhY3Rpb246IHJlbW90ZS1hdWRpdC1kaXNjb25uZWN0ZWQKICAgIG9iamVjdDoKICAgICAgd2hhdDogc2VydmljZQogICAgZWNzOgogICAgICA8PDogKmVjcy1uZXR3b3JrCiAgICAgIHR5cGU6CiAgICAgICAgLSBjb25uZWN0aW9uCiAgICAgICAgLSBzdGFydAogICMgQVVESVRfREFFTU9OX0NPTkZJRyAtIERhZW1vbiBjb25maWcgY2hhbmdlCiAgLSByZWNvcmRfdHlwZXM6IERBRU1PTl9DT05GSUcKICAgIGFjdGlvbjogY2hhbmdlZC1hdWRpdGQtY29uZmlndXJhdGlvbgogICAgb2JqZWN0OgogICAgICB3aGF0OiBzZXJ2aWNlCiAgICBlY3M6CiAgICAgIGNhdGVnb3J5OiBbcHJvY2VzcywgY29uZmlndXJhdGlvbl0KICAgICAgdHlwZTogY2hhbmdlCiAgIyBBVURJVF9EQUVNT05fRU5EIC0gRGFlbW9uIG5vcm1hbCBzdG9wIHJlY29yZAogIC0gcmVjb3JkX3R5cGVzOiBEQUVNT05fRU5ECiAgICBhY3Rpb246IHNodXRkb3duLWF1ZGl0CiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNlcnZpY2UKICAgIGVjczoKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBzdG9wCiAgIyBBVURJVF9EQUVNT05fRVJSIC0gQXVkaXRkIGludGVybmFsIGVycm9yCiAgLSByZWNvcmRfdHlwZXM6IERBRU1PTl9FUlIKICAgIGFjdGlvbjogYXVkaXQtZXJyb3IKICAgIG9iamVjdDoKICAgICAgd2hhdDogc2VydmljZQogICAgZWNzOiAqZWNzLXByb2Nlc3MKICAjIEFVRElUX0RBRU1PTl9SRUNPTkZJRyAtIEF1ZGl0ZCBzaG91bGQgcmVjb25maWd1cmUKICAtIHJlY29yZF90eXBlczogREFFTU9OX1JFQ09ORklHCiAgICBhY3Rpb246IHJlY29uZmlndXJlZC1hdWRpdGQKICAgIG9iamVjdDoKICAgICAgd2hhdDogc2VydmljZQogICAgZWNzOgogICAgICBjYXRlZ29yeTogW3Byb2Nlc3MsIGNvbmZpZ3VyYXRpb25dCiAgICAgIHR5cGU6IGluZm8KICAjIEFVRElUX0RBRU1PTl9SRVNVTUUgLSBBdWRpdGQgc2hvdWxkIHJlc3VtZSBsb2dnaW5nCiAgLSByZWNvcmRfdHlwZXM6IERBRU1PTl9SRVNVTUUKICAgIGFjdGlvbjogcmVzdW1lZC1hdWRpdC1sb2dnaW5nCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNlcnZpY2UKICAgIGVjczoKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBjaGFuZ2UKICAjIEFVRElUX0RBRU1PTl9ST1RBVEUgLSBBdWRpdGQgc2hvdWxkIHJvdGF0ZSBsb2dzCiAgLSByZWNvcmRfdHlwZXM6IERBRU1PTl9ST1RBVEUKICAgIGFjdGlvbjogcm90YXRlZC1hdWRpdC1sb2dzCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNlcnZpY2UKICAgIGVjczoKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBjaGFuZ2UKICAjIEFVRElUX0RBRU1PTl9TVEFSVCAtIERhZW1vbiBzdGFydHVwIHJlY29yZAogIC0gcmVjb3JkX3R5cGVzOiBEQUVNT05fU1RBUlQKICAgIGFjdGlvbjogc3RhcnRlZC1hdWRpdAogICAgb2JqZWN0OgogICAgICB3aGF0OiBzZXJ2aWNlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogc3RhcnQKICAjIEFVRElUX0tFUk5FTCAtIEFzeW5jaHJvbm91cyBhdWRpdCByZWNvcmQuIE5PVCBBIFJFUVVFU1QuCiAgLSByZWNvcmRfdHlwZXM6IEtFUk5FTAogICAgYWN0aW9uOiBpbml0aWFsaXplZC1hdWRpdC1zdWJzeXN0ZW0KICAgIGVjczogKmVjcy1wcm9jZXNzCgogICMgQ29uZmlndXJhdGlvbiBjaGFuZ2UgZXZlbnRzCgogICMgQVVESVRfVVNZU19DT05GSUcgLSBVc2VyIHNwYWNlIHN5c3RlbSBjb25maWcgY2hhbmdlCiAgLSByZWNvcmRfdHlwZXM6IFVTWVNfQ09ORklHCiAgICBhY3Rpb246IGNoYW5nZWQtY29uZmlndXJhdGlvbgogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBvcAogICAgICB3aGF0OiBzeXN0ZW0KICAgIGVjczoKICAgICAgY2F0ZWdvcnk6IGNvbmZpZ3VyYXRpb24KICAgICAgdHlwZTogY2hhbmdlCiAgIyBBVURJVF9ORVRGSUxURVJfQ0ZHIC0gTmV0ZmlsdGVyIGNoYWluIG1vZGlmaWNhdGlvbnMKICAtIHJlY29yZF90eXBlczogTkVURklMVEVSX0NGRwogICAgYWN0aW9uOiBsb2FkZWQtZmlyZXdhbGwtcnVsZS10bwogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiB0YWJsZQogICAgICB3aGF0OiBmaXJld2FsbAogICAgZWNzOgogICAgICBjYXRlZ29yeTogY29uZmlndXJhdGlvbgogICAgICB0eXBlOiBjaGFuZ2UKICAjIEFVRElUX0ZFQVRVUkVfQ0hBTkdFIC0gYXVkaXQgbG9nIGxpc3RpbmcgZmVhdHVyZSBjaGFuZ2VzCiAgLSByZWNvcmRfdHlwZXM6IEZFQVRVUkVfQ0hBTkdFCiAgICBhY3Rpb246IGNoYW5nZWQtYXVkaXQtZmVhdHVyZQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBmZWF0dXJlCiAgICAgIHdoYXQ6IHN5c3RlbQogICAgZWNzOgogICAgICBjYXRlZ29yeTogY29uZmlndXJhdGlvbgogICAgICB0eXBlOiBjaGFuZ2UKICAjIEFVRElUX1JFUExBQ0UgLSBSZXBsYWNlIGF1ZGl0ZCBpZiB0aGlzIHBhY2tldCB1bmFuc3dlcmQKCiAgIyBUVFkgZXZlbnRzCgogIC0gcmVjb3JkX3R5cGVzOgogICAgICAjIEFVRElUX1RUWSAtIElucHV0IG9uIGFuIGFkbWluaXN0cmF0aXZlIFRUWQogICAgICAtIFRUWQogICAgICAjIEFVRElUX1VTRVJfVFRZIC0gTm9uLUlDQU5PTiBUVFkgaW5wdXQgbWVhbmluZwogICAgICAtIFVTRVJfVFRZCiAgICBhY3Rpb246IHR5cGVkCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGRhdGEKICAgICAgd2hhdDoga2V5c3Ryb2tlcwogICAgaG93OiBbY29tbSwgZXhlXQoKICAjIFBvbGljeSBldmVudHMKCiAgIyBBVURJVF9BVkMgLSBTRSBMaW51eCBhdmMgZGVuaWFsIG9yIGdyYW50IChzZWxpbnV4KQogIC0gcmVjb3JkX3R5cGVzOiBBVkMKICAgIGFjdGlvbjogdmlvbGF0ZWQtc2VsaW51eC1wb2xpY3kKICAgIHN1YmplY3Q6CiAgICAgIHByaW1hcnk6IHNjb250ZXh0CiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IHRjb250ZXh0CiAgICAgIHNlY29uZGFyeTogdGNsYXNzCiAgICBoYXNfZmllbGRzOgogICAgICAtIHNlcmVzdWx0CiAgIyBBVURJVF9BVkMgLSBTRSBMaW51eCBhdmMgZGVuaWFsIG9yIGdyYW50IChhcHBhcm1vcikKICAtIHJlY29yZF90eXBlczogQVZDCiAgICBhY3Rpb246IHZpb2xhdGVkLWFwcGFybW9yLXBvbGljeQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBvcGVyYXRpb24KICAgICAgc2Vjb25kYXJ5OiBbcmVxdWVzdGVkX21hc2ssIGRlbmllZF9tYXNrLCBjYXBuYW1lXQogICAgICB3aGF0OiBwb2xpY3kKICAgIGhhc19maWVsZHM6CiAgICAgIC0gYXBwYXJtb3IKICAjIEFVRElUX0ZTX1JFTEFCRUwgLSBGaWxlc3lzdGVtIHJlbGFiZWxlZAogIC0gcmVjb3JkX3R5cGVzOiBGU19SRUxBQkVMCiAgICBhY3Rpb246IHJlbGFiZWxlZC1maWxlc3lzdGVtCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IG1hYy1jb25maWcKICAjIEFVRElUX0xBQkVMX0xFVkVMX0NIQU5HRSAtIE9iamVjdCdzIGxldmVsIHdhcyBjaGFuZ2VkCiAgLSByZWNvcmRfdHlwZXM6IExBQkVMX0xFVkVMX0NIQU5HRQogICAgYWN0aW9uOiBtb2RpZmllZC1sZXZlbC1vZgogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBwcmludGVyCiAgICAgIHdoYXQ6IHByaW50ZXIKICAjIEFVRElUX0xBQkVMX09WRVJSSURFIC0gQWRtaW4gaXMgb3ZlcnJpZGluZyBhIGxhYmVsCiAgLSByZWNvcmRfdHlwZXM6IExBQkVMX09WRVJSSURFCiAgICBhY3Rpb246IG92ZXJyb2RlLWxhYmVsLW9mCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IG1hYy1jb25maWcKICAjIEFVRElUX01BQ19DSEVDSyAtIFVzZXIgc3BhY2UgTUFDIGRlY2lzaW9uIHJlc3VsdHMKICAtIHJlY29yZF90eXBlczogTUFDX0NIRUNLCiAgICBhY3Rpb246IG1hYy1wZXJtaXNzaW9uCiAgIyBBVURJVF9NQUNfQ09ORklHX0NIQU5HRSAtIENoYW5nZXMgdG8gYm9vbGVhbnMKICAtIHJlY29yZF90eXBlczogTUFDX0NPTkZJR19DSEFOR0UKICAgIGFjdGlvbjogY2hhbmdlZC1zZWxpbnV4LWJvb2xlYW4KICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogYm9vbAogICAgICB3aGF0OiBtYWMtY29uZmlnCiAgICBlY3M6CiAgICAgIGNhdGVnb3J5OiBjb25maWd1cmF0aW9uCiAgICAgIHR5cGU6IGNoYW5nZQogICMgQVVESVRfTUFDX1BPTElDWV9MT0FEIC0gUG9saWN5IGZpbGUgbG9hZAogIC0gcmVjb3JkX3R5cGVzOiBNQUNfUE9MSUNZX0xPQUQKICAgIGFjdGlvbjogbG9hZGVkLXNlbGludXgtcG9saWN5CiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IG1hYy1jb25maWcKICAgIGVjczoKICAgICAgY2F0ZWdvcnk6IGNvbmZpZ3VyYXRpb24KICAgICAgdHlwZTogYWNjZXNzCiAgIyBBVURJVF9NQUNfU1RBVFVTIC0gQ2hhbmdlZCBlbmZvcmNpbmcscGVybWlzc2l2ZSxvZmYKICAtIHJlY29yZF90eXBlczogTUFDX1NUQVRVUwogICAgYWN0aW9uOiBjaGFuZ2VkLXNlbGludXgtZW5mb3JjZW1lbnQKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogZW5mb3JjaW5nCiAgICAgIHdoYXQ6IG1hYy1jb25maWcKICAgIGVjczoKICAgICAgY2F0ZWdvcnk6IGNvbmZpZ3VyYXRpb24KICAgICAgdHlwZTogY2hhbmdlCiAgIyBBVURJVF9VU0VSX0FWQyAtIFVzZXIgc3BhY2UgYXZjIG1lc3NhZ2UKICAtIHJlY29yZF90eXBlczogVVNFUl9BVkMKICAgIGFjdGlvbjogYWNjZXNzLXBlcm1pc3Npb24KICAjIEFVRElUX1VTRVJfTUFDX0NPTkZJR19DSEFOR0UgLSBDaGFuZ2UgbWFkZSB0byBNQUMgcG9saWN5CiAgLSByZWNvcmRfdHlwZXM6IFVTRVJfTUFDX0NPTkZJR19DSEFOR0UKICAgIGFjdGlvbjogY2hhbmdlZC1tYWMtY29uZmlndXJhdGlvbgogICAgb2JqZWN0OgogICAgICB3aGF0OiBtYWMtY29uZmlnCiAgICBlY3M6CiAgICAgIGNhdGVnb3J5OiBjb25maWd1cmF0aW9uCiAgICAgIHR5cGU6IGNoYW5nZQogICMgQVVESVRfVVNFUl9NQUNfUE9MSUNZX0xPQUQgLSBVc2Vyc3BjIGRhZW1vbiBsb2FkZWQgcG9saWMKICAtIHJlY29yZF90eXBlczogVVNFUl9NQUNfUE9MSUNZX0xPQUQKICAgIGFjdGlvbjogbG9hZGVkLW1hYy1wb2xpY3kKICAgIG9iamVjdDoKICAgICAgd2hhdDogbWFjLWNvbmZpZwogICAgZWNzOgogICAgICBjYXRlZ29yeTogY29uZmlndXJhdGlvbgogICAgICB0eXBlOiBhY2Nlc3MKICAjIEFVRElUX1VTRVJfU0VMSU5VWF9FUlIgLSBTRSBMaW51eCB1c2VyIHNwYWNlIGVycm9yCiAgLSByZWNvcmRfdHlwZXM6IFVTRVJfU0VMSU5VWF9FUlIKICAgIGFjdGlvbjogYWNjZXNzLWVycm9yCiAgIyBBVURJVF9TRUNDT01QIC0gU2VjdXJlIENvbXB1dGluZyBldmVudAogIC0gcmVjb3JkX3R5cGVzOiBTRUNDT01QCiAgICBhY3Rpb246IHZpb2xhdGVkLXNlY2NvbXAtcG9saWN5CiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IHN5c2NhbGwKICAgICAgd2hhdDogcHJvY2VzcwogICMgQVVESVRfU0VMSU5VWF9FUlIgLSBJbnRlcm5hbCBTRSBMaW51eCBFcnJvcnMKICAtIGFjdGlvbjogY2F1c2VkLW1hYy1wb2xpY3ktZXJyb3IKICAgIG9iamVjdDoKICAgICAgd2hhdDogc3lzdGVtCiAgICByZWNvcmRfdHlwZXM6IFNFTElOVVhfRVJSCiAgIyBBVURJVF9BUFBBUk1PUl9BTExPV0VECiAgIyBBVURJVF9BUFBBUk1PUl9ERU5JRUQKICAjIEFVRElUX0FQUEFSTU9SX0VSUk9SCiAgIyBBVURJVF9BVkNfUEFUSCAtIGRlbnRyeSwgdmZzbW91bnQgcGFpciBmcm9tIGF2YwogICMgQVVESVRfQVBQQVJNT1JfQVVESVQKICAjIEFVRElUX0FQUEFSTU9SX0hJTlQKICAjIEFVRElUX0FQUEFSTU9SX1NUQVRVUwogICMgQVVESVRfQVBQQVJNT1JfRVJST1IKICAjIEFVRElUX0RFVl9BTExPQyAtIERldmljZSB3YXMgYWxsb2NhdGVkCiAgIyBBVURJVF9ERVZfREVBTExPQyAtIERldmljZSB3YXMgZGVhbGxvY2F0ZWQKICAjIEFVRElUX01BQ19VTkxCTF9BTExPVyAtIE5ldExhYmVsOiBhbGxvdyB1bmxhYmVsZWQgdHJhZmZpYwogICMgQVVESVRfTUFDX0NJUFNPVjRfQUREIC0gTmV0TGFiZWw6IGFkZCBDSVBTT3Y0IERPSSBlbnRyeQogICMgQVVESVRfTUFDX0NJUFNPVjRfREVMIC0gTmV0TGFiZWw6IGRlbCBDSVBTT3Y0IERPSSBlbnRyeQogICMgQVVESVRfTUFDX01BUF9BREQgLSBOZXRMYWJlbDogYWRkIExTTSBkb21haW4gbWFwcGluZwogICMgQVVESVRfTUFDX01BUF9ERUwgLSBOZXRMYWJlbDogZGVsIExTTSBkb21haW4gbWFwcGluZwogICMgQVVESVRfTUFDX0lQU0VDX0VWRU5UIC0gQXVkaXQgYW4gSVBTZWMgZXZlbnQKICAjIEFVRElUX01BQ19VTkxCTF9TVENBREQgLSBOZXRMYWJlbDogYWRkIGEgc3RhdGljIGxhYmVsCiAgIyBBVURJVF9NQUNfVU5MQkxfU1RDREVMIC0gTmV0TGFiZWw6IGRlbCBhIHN0YXRpYyBsYWJlbAogICMgQVVESVRfTUFDX0NBTElQU09fQUREIC0gTmV0TGFiZWw6IGFkZCBDQUxJUFNPIERPSSBlbnRyeQogICMgQVVESVRfTUFDX0NBTElQU09fREVMIC0gTmV0TGFiZWw6IGRlbCBDQUxJUFNPIERPSSBlbnRyeQogICMgQVVESVRfVVNFUl9MQUJFTEVEX0VYUE9SVCAtIE9iamVjdCBleHBvcnRlZCB3aXRoIGxhYmVsCiAgIyBBVURJVF9VU0VSX1VOTEFCRUxFRF9FWFBPUlQgLSBPYmplY3QgZXhwb3J0ZWQgd2l0aG91dCBsYWJlbAoKICAjIENyeXB0byBldmVudHMKCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgYWN0aW9uOiBuZWdvdGlhdGVkLWNyeXB0by1rZXkKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogZnAKICAgICAgc2Vjb25kYXJ5OiBbYWRkciwgaG9zdG5hbWVdCiAgICAgIHdoYXQ6IHVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBDUllQVE9fS0VZX1VTRVIKICAgIHNvdXJjZV9pcDogW2FkZHJdCiAgICBlY3M6ICplY3MtcHJvY2VzcwogIC0gYWN0aW9uOiBjcnlwdG8tb2ZmaWNlci1sb2dnZWQtaW4KICAgIHJlY29yZF90eXBlczogQ1JZUFRPX0xPR0lOCiAgLSBhY3Rpb246IGNyeXB0by1vZmZpY2VyLWxvZ2dlZC1vdXQKICAgIHJlY29yZF90eXBlczogQ1JZUFRPX0xPR09VVAogICAgZWNzOiAqZWNzLXByb2Nlc3MKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICBhY3Rpb246IHN0YXJ0ZWQtY3J5cHRvLXNlc3Npb24KICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogYWRkcgogICAgICBzZWNvbmRhcnk6IFtycG9ydF0KICAgIHJlY29yZF90eXBlczogQ1JZUFRPX1NFU1NJT04KICAgIHNvdXJjZV9pcDogW2FkZHJdCiAgICBlY3M6ICplY3MtcHJvY2VzcwogIC0gYWN0aW9uOiBhY2Nlc3MtcmVzdWx0CiAgICByZWNvcmRfdHlwZXM6IERBQ19DSEVDSwoKICAjIEFub21hbGllcwoKICAjIEFVRElUX0FOT01fQUJFTkQgLSBQcm9jZXNzIGVuZGVkIGFibm9ybWFsbHkKICAtIHJlY29yZF90eXBlczogQU5PTV9BQkVORAogICAgYWN0aW9uOiBjcmFzaGVkLXByb2dyYW0KICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogW2NvbW0sIGV4ZV0KICAgICAgc2Vjb25kYXJ5OiBwaWQKICAgICAgd2hhdDogcHJvY2VzcwogICAgaG93OiBzaWcKICAgIGVjczoKICAgICAgIyBjb25zaWRlciBhZGRpbmcgYW4gYW5vbWFseSBjYXRlZ29yeSB3aGVuIHdlIGludHJvZHVjZQogICAgICAjIHRvIEVDUwogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IGVuZAogICMgQVVESVRfQU5PTV9FWEVDIC0gRXhlY3V0aW9uIG9mIGZpbGUKICAtIHJlY29yZF90eXBlczogQU5PTV9FWEVDCiAgICBhY3Rpb246IGF0dGVtcHRlZC1leGVjdXRpb24tb2YtZm9yYmlkZGVuLXByb2dyYW0KICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogY21kCiAgICAgIHdoYXQ6IHByb2Nlc3MKICAgIGhvdzogdGVybWluYWwKICAgIGVjczoKICAgICAgIyBjb25zaWRlciBhZGRpbmcgYW4gYW5vbWFseSBjYXRlZ29yeSB3aGVuIHdlIGludHJvZHVjZQogICAgICAjIHRvIEVDUwogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IHN0YXJ0CiAgIyBBVURJVF9BTk9NX0xJTksgLSBTdXNwaWNpb3VzIHVzZSBvZiBmaWxlIGxpbmtzCiAgLSByZWNvcmRfdHlwZXM6IEFOT01fTElOSwogICAgYWN0aW9uOiB1c2VkLXN1c3BpY2lvdXMtbGluawogICMgQVVESVRfQU5PTV9MT0dJTl9GQUlMVVJFUyAtIEZhaWxlZCBsb2dpbiBsaW1pdCByZWFjaGVkCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBBTk9NX0xPR0lOX0ZBSUxVUkVTCiAgICBhY3Rpb246IGZhaWxlZC1sb2ctaW4tdG9vLW1hbnktdGltZXMtdG8KICAjIEFVRElUX0FOT01fTE9HSU5fTE9DQVRJT04gLSBMb2dpbiBmcm9tIGZvcmJpZGRlbiBsb2NhdGlvbgogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogQU5PTV9MT0dJTl9MT0NBVElPTgogICAgYWN0aW9uOiBhdHRlbXB0ZWQtbG9nLWluLWZyb20tdW51c3VhbC1wbGFjZS10bwogICMgQVVESVRfQU5PTV9MT0dJTl9TRVNTSU9OUyAtIE1heCBjb25jdXJyZW50IHNlc3Npb25zIHJlYWNoZWQKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IEFOT01fTE9HSU5fU0VTU0lPTlMKICAgIGFjdGlvbjogb3BlbmVkLXRvby1tYW55LXNlc3Npb25zLXRvCiAgIyBBVURJVF9BTk9NX0xPR0lOX1RJTUUgLSBMb2dpbiBhdHRlbXB0ZWQgYXQgYmFkIHRpbWUKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IEFOT01fTE9HSU5fVElNRQogICAgYWN0aW9uOiBhdHRlbXB0ZWQtbG9nLWluLWR1cmluZy11bnVzdWFsLWhvdXItdG8KICAjIEFVRElUX0FOT01fUFJPTUlTQ1VPVVMgLSBEZXZpY2UgY2hhbmdlZCBwcm9taXNjdW91cyBtb2RlCiAgLSByZWNvcmRfdHlwZXM6IEFOT01fUFJPTUlTQ1VPVVMKICAgIGFjdGlvbjogY2hhbmdlZC1wcm9taXNjdW91cy1tb2RlLW9uLWRldmljZSAjIENvdWxkIGJlIGVudGVyZWQgb3IgZXhpdGVkIGJhc2VkIG9uIHByb20gZmllbGQuCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGRldgogICAgICB3aGF0OiBuZXR3b3JrLWRldmljZQogICMgQVVESVRfQU5PTV9SQkFDX0lOVEVHUklUWV9GQUlMIC0gUkJBQyBmaWxlIGludGVncml0eSBmYWlsdXJlCiAgLSByZWNvcmRfdHlwZXM6IEFOT01fUkJBQ19JTlRFR1JJVFlfRkFJTAogICAgYWN0aW9uOiB0ZXN0ZWQtZmlsZS1zeXN0ZW0taW50ZWdyaXR5LW9mCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGhvc3RuYW1lCiAgICAgIHdoYXQ6IGZpbGVzeXN0ZW0KICAjIEFVRElUX0FOT01fTE9HSU5fQUNDVCAtIExvZ2luIGF0dGVtcHRlZCB0byB3YXRjaGVkIGFjY3QKICAjIEFVRElUX0FOT01fTUFYX0RBQyAtIE1heCBEQUMgZmFpbHVyZXMgcmVhY2hlZAogICMgQVVESVRfQU5PTV9NQVhfTUFDIC0gTWF4IE1BQyBmYWlsdXJlcyByZWFjaGVkCiAgIyBBVURJVF9BTk9NX0FNVFVfRkFJTCAtIEFNVFUgZmFpbHVyZQogICMgQVVESVRfQU5PTV9SQkFDX0ZBSUwgLSBSQkFDIHNlbGYgdGVzdCBmYWlsdXJlCiAgIyBBVURJVF9BTk9NX0NSWVBUT19GQUlMIC0gQ3J5cHRvIHN5c3RlbSB0ZXN0IGZhaWx1cmUKICAjIEFVRElUX0FOT01fTUtfRVhFIC0gTWFrZSBhbiBleGVjdXRhYmxlCiAgIyBBVURJVF9BTk9NX0FDQ0VTU19GUyAtIEFjY2VzcyBvZiBmaWxlIG9yIGRpcgogICMgQVVESVRfQU5PTV9BRERfQUNDVCAtIEFkZGluZyBhbiBhY2N0CiAgIyBBVURJVF9BTk9NX0RFTF9BQ0NUIC0gRGVsZXRpbmcgYW4gYWNjdAogICMgQVVESVRfQU5PTV9NT0RfQUNDVCAtIENoYW5naW5nIGFuIGFjY3QKICAjIEFVRElUX0FOT01fUk9PVF9UUkFOUyAtIFVzZXIgYmVjYW1lIHJvb3QKICAjIEFVRElUX0FOT01fTE9HSU5fU0VSVklDRSAtIFNlcnZpY2UgYWNjdCBhdHRlbXB0ZWQgbG9naW4KCiAgIyBBbm9tYWx5IHJlc3BvbnNlcwoKICAjIEFVRElUX1JFU1BfQU5PTUFMWSAtIEFub21hbHkgbm90IHJlYWN0ZWQgdG8KICAjIEFVRElUX1JFU1BfQUxFUlQgLSBBbGVydCBlbWFpbCB3YXMgc2VudAogICMgQVVESVRfUkVTUF9LSUxMX1BST0MgLSBLaWxsIHByb2dyYW0KICAjIEFVRElUX1JFU1BfVEVSTV9BQ0NFU1MgLSBUZXJtaW5hdGUgc2Vzc2lvbgogICMgQVVESVRfUkVTUF9BQ0NUX1JFTU9URSAtIEFjY3QgbG9ja2VkIGZyb20gcmVtb3RlIGFjY2VzcwogICMgQVVESVRfUkVTUF9BQ0NUX0xPQ0tfVElNRUQgLSBVc2VyIGFjY3QgbG9ja2VkIGZvciB0aW1lCiAgIyBBVURJVF9SRVNQX0FDQ1RfVU5MT0NLX1RJTUVEIC0gVXNlciBhY2N0IHVubG9ja2VkIGZyb20gdGltZQogICMgQVVESVRfUkVTUF9BQ0NUX0xPQ0sgLSBVc2VyIGFjY3Qgd2FzIGxvY2tlZAogICMgQVVESVRfUkVTUF9URVJNX0xPQ0sgLSBUZXJtaW5hbCB3YXMgbG9ja2VkCiAgIyBBVURJVF9SRVNQX1NFQk9PTCAtIFNldCBhbiBTRSBMaW51eCBib29sZWFuCiAgIyBBVURJVF9SRVNQX0VYRUMgLSBFeGVjdXRlIGEgc2NyaXB0CiAgIyBBVURJVF9SRVNQX1NJTkdMRSAtIEdvIHRvIHNpbmdsZSB1c2VyIG1vZGUKICAjIEFVRElUX1JFU1BfSEFMVCAtIHRha2UgdGhlIHN5c3RlbSBkb3duCiAgIyBBVURJVF9SRVNQX09SSUdJTl9CTE9DSyAtIEFkZHJlc3MgYmxvY2tlZCBieSBpcHRhYmxlcwogICMgQVVESVRfUkVTUF9PUklHSU5fQkxPQ0tfVElNRUQgLSBBZGRyZXNzIGJsb2NrZWQgZm9yIHRpbWUKCiAgIyBBdWRpdCBydWxlIGV2ZW50cwoKICAjIEFVRElUX1NZU0NBTEwgLSBTeXNjYWxsIGV2ZW50CiAgIyBBVURJVF9QQVRIIC0gRmlsZW5hbWUgcGF0aCBpbmZvcm1hdGlvbgogICMgQVVESVRfSVBDIC0gSVBDIHJlY29yZAogICMgQVVESVRfU09DS0VUQ0FMTCAtIHN5c19zb2NrZXRjYWxsIGFyZ3VtZW50cwogICMgQVVESVRfU09DS0FERFIgLSBzb2NrYWRkciBjb3BpZWQgYXMgc3lzY2FsbCBhcmcKICAjIEFVRElUX0NXRCAtIEN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkKICAjIEFVRElUX0VYRUNWRSAtIGV4ZWN2ZSBhcmd1bWVudHMKICAjIEFVRElUX0lQQ19TRVRfUEVSTSAtIElQQyBuZXcgcGVybWlzc2lvbnMgcmVjb3JkIHR5cGUKICAjIEFVRElUX01RX09QRU4gLSBQT1NJWCBNUSBvcGVuIHJlY29yZCB0eXBlCiAgIyBBVURJVF9NUV9TRU5EUkVDVi0gUE9TSVggTVEgc2VuZC9yZWNlaXZlIHJlY29yZCB0eXBlCiAgIyBBVURJVF9NUV9OT1RJRlkgLSBQT1NJWCBNUSBub3RpZnkgcmVjb3JkIHR5cGUKICAjIEFVRElUX01RX0dFVFNFVEFUVFIgLSBQT1NJWCBNUSBnZXQvc2V0IGF0dHJpYnV0ZSByZWNvcmQgdHlwZQogICMgQVVESVRfRkRfUEFJUiAtIGF1ZGl0IHJlY29yZCBmb3IgcGlwZS9zb2NrZXRwYWlyCiAgIyBBVURJVF9PQkpfUElEIC0gcHRyYWNlIHRhcmdldAogICMgQVVESVRfQlBSTV9GQ0FQUyAtIEluZm9ybWF0aW9uIGFib3V0IGZjYXBzIGluY3JlYXNpbmcgcGVybXMKICAjIEFVRElUX0NBUFNFVCAtIFJlY29yZCBzaG93aW5nIGFyZ3VtZW50IHRvIHN5c19jYXBzZXQKICAjIEFVRElUX01NQVAgLSBSZWNvcmQgc2hvd2luZyBkZXNjcmlwdG9yIGFuZCBmbGFncyBpbiBtbWFwCiAgIyBBVURJVF9ORVRGSUxURVJfUEtUIC0gUGFja2V0cyB0cmF2ZXJzaW5nIG5ldGZpbHRlciBjaGFpbnMKCiAgIyBJbnRlZ3JpdHkgY2hlY2tzCgogICMgQVVESVRfSU5URUdSSVRZX0RBVEEgLSBEYXRhIGludGVncml0eSB2ZXJpZmljYXRpb24KICAjIEFVRElUX0lOVEVHUklUWV9NRVRBREFUQSAtIE1ldGFkYXRhIGludGVncml0eSB2ZXJpZmljYXRpb24KICAjIEFVRElUX0lOVEVHUklUWV9TVEFUVVMgLSBJbnRlZ3JpdHkgZW5hYmxlIHN0YXR1cwogICMgQVVESVRfSU5URUdSSVRZX0hBU0ggLSBJbnRlZ3JpdHkgSEFTSCB0eXBlCiAgIyBBVURJVF9JTlRFR1JJVFlfUENSIC0gUENSIGludmFsaWRhdGlvbiBtc2dzCiAgIyBBVURJVF9JTlRFR1JJVFlfUlVMRSAtIFBvbGljeSBydWxlCgogICMgVmFyaW91cwoKICAjIEFVRElUX1VTRVIgLSBNZXNzYWdlIGZyb20gdXNlcnNwYWNlIC0tIGRlcHJlY2F0ZWQKICAtIHJlY29yZF90eXBlczogVVNFUgogICAgYWN0aW9uOiBzZW50LW1lc3NhZ2UKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogYWRkcgoKICAjIEFVRElUX1NPRlRXQVJFX1VQREFURSAtIFBhY2thZ2UgbWFuYWdlbWVudAogIC0gcmVjb3JkX3R5cGVzOiBTT0ZUV0FSRV9VUERBVEUKICAgIGFjdGlvbjogcGFja2FnZS11cGRhdGVkCiAgICBlY3M6CiAgICAgIGNhdGVnb3J5OiBwYWNrYWdlCiAgICAgIHR5cGU6IGluZm8K") assets["normalizationData"] = value } From f3af093069c590768aab32e302aeb73d6eb45839 Mon Sep 17 00:00:00 2001 From: Adrian Serrano Date: Sun, 31 Jan 2021 18:44:13 +0100 Subject: [PATCH 14/15] Map to group.* instead of group.target.* group.target is not defined by ECS. --- aucoalesce/coalesce.go | 6 +- aucoalesce/normalizations.yaml | 6 +- aucoalesce/normalize.go | 9 -- .../testdata/random-internet.json.golden | 6 +- .../testdata/rhel-7-linux-3.10.0.json.golden | 60 +++---------- .../ubuntu-16.04-linux-4.13.0.json.golden | 12 +-- .../ubuntu-16.10-linux-4.8.0.json.golden | 84 +++-------------- .../ubuntu-17.04-linux-4.10.0.json.golden | 90 ++++--------------- aucoalesce/znormalize_data.go | 2 +- 9 files changed, 49 insertions(+), 226 deletions(-) diff --git a/aucoalesce/coalesce.go b/aucoalesce/coalesce.go index db90225..1d22fde 100644 --- a/aucoalesce/coalesce.go +++ b/aucoalesce/coalesce.go @@ -54,9 +54,9 @@ type ECSEntity struct { } type ECSFields struct { - Event ECSEvent `json:"event" yaml:"event"` - User ECSEntity `json:"user" yaml:"user"` - Group ECSEntity `json:"group" yaml:"group"` + Event ECSEvent `json:"event" yaml:"event"` + User ECSEntity `json:"user" yaml:"user"` + Group ECSEntityData `json:"group" yaml:"group"` } type Event struct { diff --git a/aucoalesce/normalizations.yaml b/aucoalesce/normalizations.yaml index dd1b53c..fcf05d3 100644 --- a/aucoalesce/normalizations.yaml +++ b/aucoalesce/normalizations.yaml @@ -93,7 +93,7 @@ macros: - from: subject.secondary to: user.effective - from: object.primary - to: group.target + to: group # Normalizations is a list of declarations specifying how to normalize the data # contained in an event. The normalization can be applied based on the syscall @@ -935,7 +935,7 @@ normalizations: - from: subject.primary to: user - from: subject.secondary - to: group.target + to: group - from: uid.uid to: user.effective # AUDIT_ROLE_ASSIGN - Admin assigned user to role @@ -1018,7 +1018,7 @@ normalizations: - from: uid.uid to: user.effective - from: subject.secondary - to: group.target + to: group # Authentication related events diff --git a/aucoalesce/normalize.go b/aucoalesce/normalize.go index ec6db0a..18aac99 100644 --- a/aucoalesce/normalize.go +++ b/aucoalesce/normalize.go @@ -148,15 +148,6 @@ var ( "group": func(event *Event, s string) { event.ECS.Group.set(s) }, - "group.effective": func(event *Event, s string) { - event.ECS.Group.Effective.set(s) - }, - "group.target": func(event *Event, s string) { - event.ECS.Group.Target.set(s) - }, - "group.changes": func(event *Event, s string) { - event.ECS.Group.Changes.set(s) - }, } ) diff --git a/aucoalesce/testdata/random-internet.json.golden b/aucoalesce/testdata/random-internet.json.golden index b793c52..98db480 100644 --- a/aucoalesce/testdata/random-internet.json.golden +++ b/aucoalesce/testdata/random-internet.json.golden @@ -56,11 +56,7 @@ "target": {}, "changes": {} }, - "group": { - "effective": {}, - "target": {}, - "changes": {} - } + "group": {} } } } diff --git a/aucoalesce/testdata/rhel-7-linux-3.10.0.json.golden b/aucoalesce/testdata/rhel-7-linux-3.10.0.json.golden index ead9bf8..8b805e6 100644 --- a/aucoalesce/testdata/rhel-7-linux-3.10.0.json.golden +++ b/aucoalesce/testdata/rhel-7-linux-3.10.0.json.golden @@ -52,11 +52,7 @@ "target": {}, "changes": {} }, - "group": { - "effective": {}, - "target": {}, - "changes": {} - } + "group": {} } } }, @@ -110,11 +106,7 @@ "target": {}, "changes": {} }, - "group": { - "effective": {}, - "target": {}, - "changes": {} - } + "group": {} } } }, @@ -184,11 +176,7 @@ "target": {}, "changes": {} }, - "group": { - "effective": {}, - "target": {}, - "changes": {} - } + "group": {} } } }, @@ -263,11 +251,7 @@ "target": {}, "changes": {} }, - "group": { - "effective": {}, - "target": {}, - "changes": {} - } + "group": {} } } }, @@ -328,11 +312,7 @@ "target": {}, "changes": {} }, - "group": { - "effective": {}, - "target": {}, - "changes": {} - } + "group": {} } } }, @@ -403,11 +383,7 @@ "target": {}, "changes": {} }, - "group": { - "effective": {}, - "target": {}, - "changes": {} - } + "group": {} } } }, @@ -471,11 +447,7 @@ "target": {}, "changes": {} }, - "group": { - "effective": {}, - "target": {}, - "changes": {} - } + "group": {} } }, "warnings": [ @@ -555,11 +527,7 @@ "target": {}, "changes": {} }, - "group": { - "effective": {}, - "target": {}, - "changes": {} - } + "group": {} } } }, @@ -683,11 +651,7 @@ "target": {}, "changes": {} }, - "group": { - "effective": {}, - "target": {}, - "changes": {} - } + "group": {} } } }, @@ -801,11 +765,7 @@ "target": {}, "changes": {} }, - "group": { - "effective": {}, - "target": {}, - "changes": {} - } + "group": {} } } } diff --git a/aucoalesce/testdata/ubuntu-16.04-linux-4.13.0.json.golden b/aucoalesce/testdata/ubuntu-16.04-linux-4.13.0.json.golden index 5648178..86c55ab 100644 --- a/aucoalesce/testdata/ubuntu-16.04-linux-4.13.0.json.golden +++ b/aucoalesce/testdata/ubuntu-16.04-linux-4.13.0.json.golden @@ -71,11 +71,7 @@ "target": {}, "changes": {} }, - "group": { - "effective": {}, - "target": {}, - "changes": {} - } + "group": {} } }, "warnings": [ @@ -203,11 +199,7 @@ "target": {}, "changes": {} }, - "group": { - "effective": {}, - "target": {}, - "changes": {} - } + "group": {} } }, "warnings": [ diff --git a/aucoalesce/testdata/ubuntu-16.10-linux-4.8.0.json.golden b/aucoalesce/testdata/ubuntu-16.10-linux-4.8.0.json.golden index fc97282..ab85f38 100644 --- a/aucoalesce/testdata/ubuntu-16.10-linux-4.8.0.json.golden +++ b/aucoalesce/testdata/ubuntu-16.10-linux-4.8.0.json.golden @@ -71,11 +71,7 @@ "target": {}, "changes": {} }, - "group": { - "effective": {}, - "target": {}, - "changes": {} - } + "group": {} } } }, @@ -126,11 +122,7 @@ "target": {}, "changes": {} }, - "group": { - "effective": {}, - "target": {}, - "changes": {} - } + "group": {} } } }, @@ -182,11 +174,7 @@ "target": {}, "changes": {} }, - "group": { - "effective": {}, - "target": {}, - "changes": {} - } + "group": {} } } }, @@ -296,11 +284,7 @@ "target": {}, "changes": {} }, - "group": { - "effective": {}, - "target": {}, - "changes": {} - } + "group": {} } } }, @@ -374,11 +358,7 @@ "target": {}, "changes": {} }, - "group": { - "effective": {}, - "target": {}, - "changes": {} - } + "group": {} } } }, @@ -431,11 +411,7 @@ "target": {}, "changes": {} }, - "group": { - "effective": {}, - "target": {}, - "changes": {} - } + "group": {} } } }, @@ -492,11 +468,7 @@ "target": {}, "changes": {} }, - "group": { - "effective": {}, - "target": {}, - "changes": {} - } + "group": {} } }, "warnings": [ @@ -563,11 +535,7 @@ "target": {}, "changes": {} }, - "group": { - "effective": {}, - "target": {}, - "changes": {} - } + "group": {} } } }, @@ -632,11 +600,7 @@ "target": {}, "changes": {} }, - "group": { - "effective": {}, - "target": {}, - "changes": {} - } + "group": {} } } }, @@ -701,11 +665,7 @@ "target": {}, "changes": {} }, - "group": { - "effective": {}, - "target": {}, - "changes": {} - } + "group": {} } } }, @@ -789,11 +749,7 @@ "target": {}, "changes": {} }, - "group": { - "effective": {}, - "target": {}, - "changes": {} - } + "group": {} } } }, @@ -864,11 +820,7 @@ "target": {}, "changes": {} }, - "group": { - "effective": {}, - "target": {}, - "changes": {} - } + "group": {} } } }, @@ -952,11 +904,7 @@ "target": {}, "changes": {} }, - "group": { - "effective": {}, - "target": {}, - "changes": {} - } + "group": {} } } }, @@ -1027,11 +975,7 @@ "target": {}, "changes": {} }, - "group": { - "effective": {}, - "target": {}, - "changes": {} - } + "group": {} } } } diff --git a/aucoalesce/testdata/ubuntu-17.04-linux-4.10.0.json.golden b/aucoalesce/testdata/ubuntu-17.04-linux-4.10.0.json.golden index 33653d9..93c462a 100644 --- a/aucoalesce/testdata/ubuntu-17.04-linux-4.10.0.json.golden +++ b/aucoalesce/testdata/ubuntu-17.04-linux-4.10.0.json.golden @@ -52,11 +52,7 @@ "target": {}, "changes": {} }, - "group": { - "effective": {}, - "target": {}, - "changes": {} - } + "group": {} } }, "warnings": [ @@ -116,11 +112,7 @@ "target": {}, "changes": {} }, - "group": { - "effective": {}, - "target": {}, - "changes": {} - } + "group": {} } }, "warnings": [ @@ -235,11 +227,7 @@ "target": {}, "changes": {} }, - "group": { - "effective": {}, - "target": {}, - "changes": {} - } + "group": {} } } }, @@ -296,11 +284,7 @@ "target": {}, "changes": {} }, - "group": { - "effective": {}, - "target": {}, - "changes": {} - } + "group": {} } }, "warnings": [ @@ -360,11 +344,7 @@ "target": {}, "changes": {} }, - "group": { - "effective": {}, - "target": {}, - "changes": {} - } + "group": {} } }, "warnings": [ @@ -427,11 +407,7 @@ }, "changes": {} }, - "group": { - "effective": {}, - "target": {}, - "changes": {} - } + "group": {} } }, "warnings": [ @@ -486,11 +462,7 @@ "target": {}, "changes": {} }, - "group": { - "effective": {}, - "target": {}, - "changes": {} - } + "group": {} } } }, @@ -547,11 +519,7 @@ "target": {}, "changes": {} }, - "group": { - "effective": {}, - "target": {}, - "changes": {} - } + "group": {} } }, "warnings": [ @@ -618,11 +586,7 @@ "target": {}, "changes": {} }, - "group": { - "effective": {}, - "target": {}, - "changes": {} - } + "group": {} } } }, @@ -686,11 +650,7 @@ "target": {}, "changes": {} }, - "group": { - "effective": {}, - "target": {}, - "changes": {} - } + "group": {} } } }, @@ -747,11 +707,7 @@ "target": {}, "changes": {} }, - "group": { - "effective": {}, - "target": {}, - "changes": {} - } + "group": {} } }, "warnings": [ @@ -826,11 +782,7 @@ "target": {}, "changes": {} }, - "group": { - "effective": {}, - "target": {}, - "changes": {} - } + "group": {} } } }, @@ -901,11 +853,7 @@ "target": {}, "changes": {} }, - "group": { - "effective": {}, - "target": {}, - "changes": {} - } + "group": {} } } }, @@ -1032,11 +980,7 @@ "target": {}, "changes": {} }, - "group": { - "effective": {}, - "target": {}, - "changes": {} - } + "group": {} } } }, @@ -1141,11 +1085,7 @@ "target": {}, "changes": {} }, - "group": { - "effective": {}, - "target": {}, - "changes": {} - } + "group": {} } } } diff --git a/aucoalesce/znormalize_data.go b/aucoalesce/znormalize_data.go index a28fc0f..ca6e59c 100644 --- a/aucoalesce/znormalize_data.go +++ b/aucoalesce/znormalize_data.go @@ -31,7 +31,7 @@ func asset(key string) ([]byte, error) { assets = map[string][]byte{} var value []byte - value, _ = base64.StdEncoding.DecodeString("LS0tCiMgTWFjcm9zIGRlY2xhcmVzIHNvbWUgWUFNTCBhbmNob3JzIHRoYXQgY2FuIGJlIHJlZmVyZW5jZWQgZm9yIHNvbWUgY29tbW9uCiMgb2JqZWN0IHR5cGUgbm9ybWFsaXphdGlvbnMgbGlrZSB1c2VyLXNlc3Npb24sIHNvY2tldCwgb3IgcHJvY2Vzcy4KbWFjcm9zOgogIC0gJmRlZmF1bHRzCiAgICBzdWJqZWN0OgogICAgICBwcmltYXJ5OiBhdWlkCiAgICAgIHNlY29uZGFyeTogdWlkCiAgICBob3c6IFtleGUsIGNvbW1dCgogIC0gJm1hY3JvLXVzZXItc2Vzc2lvbgogICAgc3ViamVjdDoKICAgICAgcHJpbWFyeTogYXVpZAogICAgICBzZWNvbmRhcnk6IFthY2N0LCBpZCwgdWlkXQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiB0ZXJtaW5hbAogICAgICBzZWNvbmRhcnk6IFthZGRyLCBob3N0bmFtZV0KICAgICAgd2hhdDogdXNlci1zZXNzaW9uCiAgICBob3c6IFtleGUsIHRlcm1pbmFsXQoKICAtICZtYWNyby1zb2NrZXQKICAgIDw8OiAqZGVmYXVsdHMKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogW2FkZHIsIHBhdGhdCiAgICAgIHNlY29uZGFyeTogcG9ydAogICAgICB3aGF0OiBzb2NrZXQKCiAgLSAmbWFjcm8tcHJvY2VzcwogICAgPDw6ICpkZWZhdWx0cwogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBbY21kLCBleGUsIGNvbW1dCiAgICAgIHNlY29uZGFyeTogcGlkCiAgICAgIHdoYXQ6IHByb2Nlc3MKICAgIGhvdzogdGVybWluYWwKCiAgLSAmZWNzLWlhbQogICAgY2F0ZWdvcnk6IGlhbQogICAgdHlwZTogaW5mbwoKICAtICZlY3MtYXV0aAogICAgY2F0ZWdvcnk6IGF1dGhlbnRpY2F0aW9uCiAgICB0eXBlOiBpbmZvCiAgICBtYXBwaW5nczoKICAgICAgLSBmcm9tOiBzdWJqZWN0LnByaW1hcnkKICAgICAgICB0bzogdXNlcgogICAgICAtIGZyb206IHN1YmplY3Quc2Vjb25kYXJ5CiAgICAgICAgdG86IHVzZXIuZWZmZWN0aXZlCgogIC0gJmVjcy1zZXNzaW9uCiAgICBjYXRlZ29yeTogc2Vzc2lvbgogICAgdHlwZTogaW5mbwogICAgbWFwcGluZ3M6CiAgICAgIC0gZnJvbTogc3ViamVjdC5wcmltYXJ5CiAgICAgICAgdG86IHVzZXIKICAgICAgLSBmcm9tOiBzdWJqZWN0LnNlY29uZGFyeQogICAgICAgIHRvOiB1c2VyLmVmZmVjdGl2ZQoKICAtICZlY3MtaG9zdAogICAgY2F0ZWdvcnk6IGhvc3QKICAgIHR5cGU6IGluZm8KCiAgLSAmZWNzLXByb2Nlc3MKICAgIGNhdGVnb3J5OiBwcm9jZXNzCiAgICB0eXBlOiBpbmZvCgogIC0gJmVjcy1maWxlCiAgICBjYXRlZ29yeTogZmlsZQogICAgdHlwZTogaW5mbwoKICAtICZlY3MtZHJpdmVyCiAgICBjYXRlZ29yeTogZHJpdmVyCiAgICB0eXBlOiBpbmZvCgogIC0gJmVjcy1uZXR3b3JrCiAgICBjYXRlZ29yeTogbmV0d29yawogICAgdHlwZToKICAgICAgLSBjb25uZWN0aW9uCiAgICAgIC0gaW5mbwoKICAtICZlY3MtdXNlci1tb2RpZmljYXRpb24tbWFwcGluZ3MKICAgIG1hcHBpbmdzOgogICAgICAtIGZyb206IHN1YmplY3QucHJpbWFyeQogICAgICAgIHRvOiB1c2VyCiAgICAgIC0gZnJvbTogc3ViamVjdC5zZWNvbmRhcnkKICAgICAgICB0bzogdXNlci5lZmZlY3RpdmUKICAgICAgLSBmcm9tOiBvYmplY3QucHJpbWFyeQogICAgICAgIHRvOiB1c2VyLnRhcmdldAoKICAtICZlY3MtZ3JvdXAtbW9kaWZpY2F0aW9uLW1hcHBpbmdzCiAgICBtYXBwaW5nczoKICAgICAgLSBmcm9tOiBzdWJqZWN0LnByaW1hcnkKICAgICAgICB0bzogdXNlcgogICAgICAtIGZyb206IHN1YmplY3Quc2Vjb25kYXJ5CiAgICAgICAgdG86IHVzZXIuZWZmZWN0aXZlCiAgICAgIC0gZnJvbTogb2JqZWN0LnByaW1hcnkKICAgICAgICB0bzogZ3JvdXAudGFyZ2V0CgojIE5vcm1hbGl6YXRpb25zIGlzIGEgbGlzdCBvZiBkZWNsYXJhdGlvbnMgc3BlY2lmeWluZyBob3cgdG8gbm9ybWFsaXplIHRoZSBkYXRhCiMgY29udGFpbmVkIGluIGFuIGV2ZW50LiBUaGUgbm9ybWFsaXphdGlvbiBjYW4gYmUgYXBwbGllZCBiYXNlZCBvbiB0aGUgc3lzY2FsbAojIG5hbWUgKGUuZy4gY29ubmVjdCwgb3Blbikgb3IgYmFzZWQgb24gdGhlIHJlY29yZCB0eXBlIChlLmcuIFVTRVJfTE9HSU4pLgojIE5vIHR3byBub3JtYWxpemF0aW9ucyBjYW4gYXBwbHkgdG8gdGhlIHNhbWUgc3lzY2FsbCBvciByZWNvcmQgdHlwZS4gVGhpcwojIHdpbGwgcmVzdWx0IGluIGEgZmFpbHVyZSBhdCBsb2FkIHRpbWUuCiMKIyBFYWNoIG5vcm1hbGl6YXRpb24gc2hvdWxkIHNwZWNpZnk6CiMgICBhY3Rpb24gLSB3aGF0IGhhcHBlbmVkCiMgICBhY3RvciAgLSB3aG8gZGlkIHRoaXMgb3Igd2hvIHRyaWdnZXJlZCB0aGUgZXZlbnQKIyAgIG9iamVjdCAtIHdoYXQgd2FzIHRoZSAidGhpbmciIGludm9sdmVkIGluIHRoZSBhY3Rpb24gKGUuZy4gcHJvY2Vzcywgc29ja2V0KQojICAgaG93ICAgIC0gaG93IHdhcyB0aGUgYWN0aW9uIHBlcmZvcm1lZCAoZS5nLiBleGUgb3IgdGVybWluYWwpCm5vcm1hbGl6YXRpb25zOgogIC0gZWNzOiAqZWNzLXByb2Nlc3MKICAgIHN5c2NhbGxzOgogICAgICAtICcqJyAjIHRoaXMgaXMgYSBjYXRjaCBhbGwKICAtIGFjdGlvbjogb3BlbmVkLWZpbGUKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgc3lzY2FsbHM6CiAgICAgICMgY3JlYXQgLSBvcGVuIGFuZCBwb3NzaWJseSBjcmVhdGUgYSBmaWxlCiAgICAgIC0gY3JlYXQKICAgIGVjczoKICAgICAgPDw6ICplY3MtZmlsZQogICAgICB0eXBlOiBjcmVhdGlvbgogIC0gYWN0aW9uOiBvcGVuZWQtZmlsZQogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBmYWxsb2NhdGUgLSBtYW5pcHVsYXRlIGZpbGUgc3BhY2UKICAgICAgLSBmYWxsb2NhdGUKICAgICAgIyB0cnVuY2F0ZSAtIHRydW5jYXRlIGEgZmlsZSB0byBhIHNwZWNpZmllZCBsZW5ndGgKICAgICAgLSB0cnVuY2F0ZQogICAgICAjIGZ0cnVuY2F0ZSAtIHRydW5jYXRlIGEgZmlsZSB0byBhIHNwZWNpZmllZCBsZW5ndGgKICAgICAgLSBmdHJ1bmNhdGUKICAgIGVjczoKICAgICAgPDw6ICplY3MtZmlsZQogICAgICAjIHRlY2huaWNhbGx5IHlvdSBjYW4gdHJ1bmNhdGUgYSBmaWxlIHRvIHRoZSBzYW1lIGxlbmd0aAogICAgICAjIGJ1dCByZWdhcmRsZXNzLCB3ZSBjb25zaWRlciB0aGlzIGEgY2hhbmdlCiAgICAgIHR5cGU6IGNoYW5nZQogIC0gYWN0aW9uOiBvcGVuZWQtZmlsZQogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBvcGVuIC0gb3BlbiBhbmQgcG9zc2libHkgY3JlYXRlIGEgZmlsZQogICAgICAtIG9wZW4KICAgICAgIyBvcGVuYXQgLSBvcGVuIGFuZCBwb3NzaWJseSBjcmVhdGUgYSBmaWxlCiAgICAgIC0gb3BlbmF0CiAgICAgICMgcmVhZGxpbmsgLSByZWFkIHZhbHVlIG9mIGEgc3ltYm9saWMgbGluawogICAgICAtIHJlYWRsaW5rCiAgICAgICMgcmVhZGxpbmthdCAtIHJlYWQgdmFsdWUgb2YgYSBzeW1ib2xpYyBsaW5rCiAgICAgIC0gcmVhZGxpbmthdAogICAgZWNzOiAqZWNzLWZpbGUKICAtIGFjdGlvbjogcmVhZC1maWxlCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIHJlYWQgLSByZWFkIGZyb20gYSBmaWxlIGRlc2NyaXB0b3IKICAgICAgLSByZWFkCiAgICBlY3M6ICplY3MtZmlsZQogIC0gYWN0aW9uOiB3cm90ZS10by1maWxlCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIHdyaXRlIC0gd3JpdGUgdG8gYSBmaWxlIGRlc2NyaXB0b3IKICAgICAgLSB3cml0ZQogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgIHR5cGU6IGNoYW5nZQogIC0gYWN0aW9uOiBjaGFuZ2VkLWZpbGUtYXR0cmlidXRlcy1vZgogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBzZXR4YXR0ciAtIHNldCBhbiBleHRlbmRlZCBhdHRyaWJ1dGUgdmFsdWUKICAgICAgLSBzZXR4YXR0cgogICAgICAjIGZzZXR4YXR0ciAtIHNldCBhbiBleHRlbmRlZCBhdHRyaWJ1dGUgdmFsdWUKICAgICAgLSBmc2V0eGF0dHIKICAgICAgIyBsc2V0eGF0dHIgLSBzZXQgYW4gZXh0ZW5kZWQgYXR0cmlidXRlIHZhbHVlCiAgICAgIC0gbHNldHhhdHRyCiAgICAgICMgcmVtb3ZleGF0dHIgLSByZW1vdmUgYW4gZXh0ZW5kZWQgYXR0cmlidXRlCiAgICAgIC0gcmVtb3ZleGF0dHIKICAgICAgIyBmcmVtb3ZleGF0dHIgLSByZW1vdmUgYW4gZXh0ZW5kZWQgYXR0cmlidXRlCiAgICAgIC0gZnJlbW92ZXhhdHRyCiAgICAgICMgbHJlbW92ZXhhdHRyIC0gcmVtb3ZlIGFuIGV4dGVuZGVkIGF0dHJpYnV0ZQogICAgICAtIGxyZW1vdmV4YXR0cgogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgIHR5cGU6IGNoYW5nZQogIC0gYWN0aW9uOiBjaGFuZ2VkLWZpbGUtcGVybWlzc2lvbnMtb2YKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgc3lzY2FsbHM6CiAgICAgICMgY2htb2QgLSBjaGFuZ2UgcGVybWlzc2lvbnMgb2YgYSBmaWxlCiAgICAgIC0gY2htb2QKICAgICAgIyBmY2htb2QgLSBjaGFuZ2UgcGVybWlzc2lvbnMgb2YgYSBmaWxlCiAgICAgIC0gZmNobW9kCiAgICAgICMgZmNobW9kYXQgLSBjaGFuZ2UgcGVybWlzc2lvbnMgb2YgYSBmaWxlCiAgICAgIC0gZmNobW9kYXQKICAgIGVjczoKICAgICAgPDw6ICplY3MtZmlsZQogICAgICB0eXBlOiBjaGFuZ2UKICAtIGFjdGlvbjogY2hhbmdlZC1maWxlLW93bmVyc2hpcC1vZgogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBjaG93biAtIGNoYW5nZSBvd25lcnNoaXAgb2YgYSBmaWxlCiAgICAgIC0gY2hvd24KICAgICAgIyBmY2hvd24gLSBjaGFuZ2Ugb3duZXJzaGlwIG9mIGEgZmlsZQogICAgICAtIGZjaG93bgogICAgICAjIGZjaG93bmF0IC0gY2hhbmdlIG93bmVyc2hpcCBvZiBhIGZpbGUKICAgICAgLSBmY2hvd25hdAogICAgICAjIGxjaG93biAtIGNoYW5nZSBvd25lcnNoaXAgb2YgYSBmaWxlCiAgICAgIC0gbGNob3duCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgdHlwZTogY2hhbmdlCiAgLSBhY3Rpb246IGxvYWRlZC1rZXJuZWwtbW9kdWxlCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgICAgcHJpbWFyeTogbmFtZQogICAgcmVjb3JkX3R5cGVzOgogICAgICAtIEtFUk5fTU9EVUxFCiAgICBzeXNjYWxsczoKICAgICAgIyBmaW5pdF9tb2R1bGUgLSBsb2FkIGEga2VybmVsIG1vZHVsZQogICAgICAtIGZpbml0X21vZHVsZQogICAgICAjIGluaXRfbW9kdWxlIC0gbG9hZCBhIGtlcm5lbCBtb2R1bGUKICAgICAgLSBpbml0X21vZHVsZQogICAgZWNzOgogICAgICA8PDogKmVjcy1kcml2ZXIKICAgICAgdHlwZTogc3RhcnQKICAtIGFjdGlvbjogdW5sb2FkZWQta2VybmVsLW1vZHVsZQogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBkZWxldGVfbW9kdWxlIC0gdW5sb2FkIGEga2VybmVsIG1vZHVsZQogICAgICAtIGRlbGV0ZV9tb2R1bGUKICAgIGVjczoKICAgICAgPDw6ICplY3MtZHJpdmVyCiAgICAgIHR5cGU6IGVuZAogIC0gYWN0aW9uOiBjcmVhdGVkLWRpcmVjdG9yeQogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICAgIHBhdGhfaW5kZXg6IDEKICAgIHN5c2NhbGxzOgogICAgICAjIG1rZGlyIC0gY3JlYXRlIGEgZGlyZWN0b3J5CiAgICAgIC0gbWtkaXIKICAgICAgIyBta2RpcmF0IC0gY3JlYXRlIGEgZGlyZWN0b3J5CiAgICAgIC0gbWtkaXJhdAogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgIHR5cGU6IGNyZWF0aW9uCiAgLSBhY3Rpb246IG1vdW50ZWQKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZXN5c3RlbQogICAgICBwYXRoX2luZGV4OiAxCiAgICBzeXNjYWxsczoKICAgICAgIyBtb3VudCAtIG1vdW50IGZpbGVzeXN0ZW0KICAgICAgLSBtb3VudAogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgICMgc2luY2UgYSBuZXcgbW91bnQgYXBwZWFycyBvbiB0aGUgc3lzdGVtCiAgICAgICMgd2UgY29uc2lkZXIgdGhpcyBhIGhpZ2gtbGV2ZWwgImNyZWF0aW9uIiBldmVudAogICAgICB0eXBlOiBjcmVhdGlvbgogIC0gYWN0aW9uOiByZW5hbWVkCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgICAgcGF0aF9pbmRleDogMgogICAgc3lzY2FsbHM6CiAgICAgICMgcmVuYW1lIC0gY2hhbmdlIHRoZSBuYW1lIG9yIGxvY2F0aW9uIG9mIGEgZmlsZQogICAgICAtIHJlbmFtZQogICAgICAjIHJlbmFtZWF0IC0gY2hhbmdlIHRoZSBuYW1lIG9yIGxvY2F0aW9uIG9mIGEgZmlsZQogICAgICAtIHJlbmFtZWF0CiAgICAgICMgcmVuYW1lYXQyIC0gY2hhbmdlIHRoZSBuYW1lIG9yIGxvY2F0aW9uIG9mIGEgZmlsZQogICAgICAtIHJlbmFtZWF0MgogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgIHR5cGU6IGNoYW5nZQogIC0gYWN0aW9uOiBjaGVja2VkLW1ldGFkYXRhLW9mCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIGFjY2VzcyAtIGNoZWNrIHVzZXIncyBwZXJtaXNzaW9ucyBmb3IgYSBmaWxlCiAgICAgIC0gYWNjZXNzCiAgICAgICMgZmFjY2Vzc2F0IC0gY2hlY2sgdXNlcidzIHBlcm1pc3Npb25zIGZvciBhIGZpbGUKICAgICAgLSBmYWNjZXNzYXQKICAgICAgIyBmc3RhdGF0IC0gZ2V0IGZpbGUgc3RhdHVzCiAgICAgIC0gZnN0YXRhdAogICAgICAjIG5ld2ZzdGF0YXQgLSBnZXQgZmlsZSBzdGF0dXMKICAgICAgLSBuZXdmc3RhdGF0CiAgICAgICMgc3RhdCAtIGdldCBmaWxlIHN0YXR1cwogICAgICAtIHN0YXQKICAgICAgIyBzdGF0NjQgLSBnZXQgZmlsZSBzdGF0dXMKICAgICAgLSBzdGF0NjQKICAgICAgIyBmc3RhdCAtIGdldCBmaWxlIHN0YXR1cwogICAgICAtIGZzdGF0CiAgICAgICMgbHN0YXQgLSBnZXQgZmlsZSBzdGF0dXMKICAgICAgLSBsc3RhdAogICAgICAjIGdldHhhdHRyIC0gcmV0cmlldmUgYW4gZXh0ZW5kZWQgYXR0cmlidXRlIHZhbHVlCiAgICAgIC0gZ2V0eGF0dHIKICAgICAgIyBsZ2V0eGF0dHIgLSByZXRyaWV2ZSBhbiBleHRlbmRlZCBhdHRyaWJ1dGUgdmFsdWUKICAgICAgLSBsZ2V0eGF0dHIKICAgICAgIyBmZ2V0eGF0dHIgLSByZXRyaWV2ZSBhbiBleHRlbmRlZCBhdHRyaWJ1dGUgdmFsdWUKICAgICAgLSBmZ2V0eGF0dHIKICAgIGVjczogKmVjcy1maWxlCiAgLSBhY3Rpb246IGNoZWNrZWQtZmlsZXN5c3RlbS1tZXRhZGF0YS1vZgogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlc3lzdGVtCiAgICBzeXNjYWxsczoKICAgICAgIyBzdGF0ZnMgLSBnZXQgZmlsZXN5c3RlbSBzdGF0aXN0aWNzCiAgICAgIC0gc3RhdGZzCiAgICAgICMgZnN0YXRmcyAtIGdldCBmaWxlc3lzdGVtIHN0YXRpc3RpY3MKICAgICAgLSBmc3RhdGZzCiAgICBlY3M6ICplY3MtZmlsZQogIC0gYWN0aW9uOiBzeW1saW5rZWQKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgc3lzY2FsbHM6CiAgICAgICMgc3ltbGluayAtIG1ha2UgYSBuZXcgbmFtZSBmb3IgYSBmaWxlCiAgICAgIC0gc3ltbGluawogICAgICAjIHN5bWxpbmthdCAtIG1ha2UgYSBuZXcgbmFtZSBmb3IgYSBmaWxlCiAgICAgIC0gc3ltbGlua2F0CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgIyAiY3JlYXRpb24iIHNpbmNlIHdlJ3JlIGNyZWF0aW5nIGEgbmV3IGZpbGUgc3lzdGVtCiAgICAgICMgZW50cnkgZm9yIHRoZSBzeW1saW5rCiAgICAgIHR5cGU6IGNyZWF0aW9uCiAgLSBhY3Rpb246IHVubW91bnRlZAogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlc3lzdGVtCiAgICBzeXNjYWxsczoKICAgICAgIyB1bW91bnQgLSB1bm1vdW50IGZpbGVzeXN0ZW0KICAgICAgLSB1bW91bnQKICAgICAgIyB1bW91bnQyIC0gdW5tb3VudCBmaWxlc3lzdGVtCiAgICAgIC0gdW1vdW50MgogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgICMgImRlbGV0aW9uIiB0byBtaXJyb3IgdGhlICJjcmVhdGlvbiIgb2YgdGhlIG1vdW50CiAgICAgIHR5cGU6IGRlbGV0aW9uCiAgLSBhY3Rpb246IGRlbGV0ZWQKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgc3lzY2FsbHM6CiAgICAgICMgcm1kaXIgLSBkZWxldGUgYSBkaXJlY3RvcnkKICAgICAgLSBybWRpcgogICAgICAjIHVubGluayAtIGRlbGV0ZSBhIG5hbWUgYW5kIHBvc3NpYmx5IHRoZSBmaWxlIGl0IHJlZmVycyB0bwogICAgICAtIHVubGluawogICAgICAjIHVubGlua2F0IC0gZGVsZXRlIGEgbmFtZSBhbmQgcG9zc2libHkgdGhlIGZpbGUgaXQgcmVmZXJzIHRvCiAgICAgIC0gdW5saW5rYXQKICAgIGVjczoKICAgICAgPDw6ICplY3MtZmlsZQogICAgICB0eXBlOiBkZWxldGlvbgogIC0gYWN0aW9uOiBjaGFuZ2VkLXRpbWVzdGFtcC1vZgogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyB1dGltZSAtIGNoYW5nZSBmaWxlIGxhc3QgYWNjZXNzIGFuZCBtb2RpZmljYXRpb24gdGltZXMKICAgICAgLSB1dGltZQogICAgICAjIHV0aW1lcyAtIGNoYW5nZSBmaWxlIGxhc3QgYWNjZXNzIGFuZCBtb2RpZmljYXRpb24gdGltZXMKICAgICAgLSB1dGltZXMKICAgICAgIyBmdXRpbWVzYXQgLSBjaGFuZ2UgdGltZXN0YW1wcyBvZiBhIGZpbGUgcmVsYXRpdmUgdG8gYSBcIGRpcmVjdG9yeSBmaWxlIGRlc2NyaXB0b3IKICAgICAgLSBmdXRpbWVzYXQKICAgICAgIyBmdXRpbWVucyAtIGNoYW5nZSBmaWxlIHRpbWVzdGFtcHMgd2l0aCBuYW5vc2Vjb25kIHByZWNpc2lvbgogICAgICAtIGZ1dGltZW5zCiAgICAgICMgdXRpbWVuc2F0IC0gY2hhbmdlIGZpbGUgdGltZXN0YW1wcyB3aXRoIG5hbm9zZWNvbmQgcHJlY2lzaW9uCiAgICAgIC0gdXRpbWVuc2F0CiAgICBlY3M6ICplY3MtZmlsZQogIC0gYWN0aW9uOiBleGVjdXRlZAogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBleGVjdmUgLSBleGVjdXRlIHByb2dyYW0KICAgICAgLSBleGVjdmUKICAgICAgIyBleGVjdmVhdCAtIGV4ZWN1dGUgcHJvZ3JhbSByZWxhdGl2ZSB0byBhIGRpcmVjdG9yeSBmaWxlIGRlc2NyaXB0b3IKICAgICAgLSBleGVjdmVhdAogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IHN0YXJ0CiAgLSBhY3Rpb246IGxpc3Rlbi1mb3ItY29ubmVjdGlvbnMKICAgIG9iamVjdDoKICAgICAgd2hhdDogc29ja2V0CiAgICBzeXNjYWxsczoKICAgICAgIyBsaXN0ZW4tIGxpc3RlbiBmb3IgY29ubmVjdGlvbnMgb24gYSBzb2NrZXQKICAgICAgLSBsaXN0ZW4KICAgIGVjczoKICAgICAgPDw6ICplY3MtbmV0d29yawogICAgICB0eXBlOiBzdGFydAogIC0gYWN0aW9uOiBhY2NlcHRlZC1jb25uZWN0aW9uLWZyb20KICAgIG9iamVjdDoKICAgICAgd2hhdDogc29ja2V0CiAgICBzeXNjYWxsczoKICAgICAgIyBhY2NlcHQgLSBhY2NlcHQgYSBjb25uZWN0aW9uIG9uIGEgc29ja2V0CiAgICAgIC0gYWNjZXB0CiAgICAgICMgYWNjZXB0NCAtIGFjY2VwdCBhIGNvbm5lY3Rpb24gb24gYSBzb2NrZXQKICAgICAgLSBhY2NlcHQ0CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLW5ldHdvcmsKICAgICAgdHlwZToKICAgICAgICAtIGNvbm5lY3Rpb24KICAgICAgICAtIHN0YXJ0CiAgLSBhY3Rpb246IGJvdW5kLXNvY2tldAogICAgb2JqZWN0OgogICAgICB3aGF0OiBzb2NrZXQKICAgIHN5c2NhbGxzOgogICAgICAjIGJpbmQgLWJpbmQgYSBuYW1lIHRvIGEgc29ja2V0CiAgICAgIC0gYmluZAogICAgZWNzOgogICAgICA8PDogKmVjcy1uZXR3b3JrCiAgICAgIHR5cGU6IHN0YXJ0CiAgLSBhY3Rpb246IGNvbm5lY3RlZC10bwogICAgb2JqZWN0OgogICAgICB3aGF0OiBzb2NrZXQKICAgIHN5c2NhbGxzOgogICAgICAtIGNvbm5lY3QKICAgIGVjczoKICAgICAgPDw6ICplY3MtbmV0d29yawogICAgICB0eXBlOgogICAgICAgIC0gY29ubmVjdGlvbgogICAgICAgIC0gc3RhcnQKICAtIGFjdGlvbjogcmVjZWl2ZWQtZnJvbQogICAgb2JqZWN0OgogICAgICB3aGF0OiBzb2NrZXQKICAgIHN5c2NhbGxzOgogICAgICAjIHJlY3YgLSByZWNlaXZlIGEgbWVzc2FnZSBmcm9tIGEgc29ja2V0CiAgICAgIC0gcmVjdgogICAgICAjIHJlY3Zmcm9tIC0gcmVjZWl2ZSBhIG1lc3NhZ2UgZnJvbSBhIHNvY2tldAogICAgICAtIHJlY3Zmcm9tCiAgICAgICMgcmVjdm1zZyAtIHJlY2VpdmUgYSBtZXNzYWdlIGZyb20gYSBzb2NrZXQKICAgICAgLSByZWN2bXNnCiAgICAgICMgcmVjdm1tc2cgLSByZWNlaXZlIG11bHRpcGxlIG1lc3NhZ2VzIG9uIGEgc29ja2V0CiAgICAgIC0gcmVjdm1tc2cKICAgIGVjczoKICAgICAgPDw6ICplY3MtbmV0d29yawogIC0gYWN0aW9uOiBzZW50LXRvCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNvY2tldAogICAgc3lzY2FsbHM6CiAgICAgICMgc2VuZCAtIHNlbmQgYSBtZXNzYWdlIG9uIGEgc29ja2V0CiAgICAgIC0gc2VuZAogICAgICAjIHNlbmR0byAtIHNlbmQgYSBtZXNzYWdlIG9uIGEgc29ja2V0CiAgICAgIC0gc2VuZHRvCiAgICAgICMgc2VuZG1zZyAtIHNlbmQgYSBtZXNzYWdlIG9uIGEgc29ja2V0CiAgICAgIC0gc2VuZG1zZwogICAgICAjIHNlbmRtbXNnIC0gc2VuZCBtdWx0aXBsZSBtZXNzYWdlcyBvbiBhIHNvY2tldAogICAgICAtIHNlbmRtbXNnCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLW5ldHdvcmsKICAtIGFjdGlvbjoga2lsbGVkLXBpZAogICAgb2JqZWN0OgogICAgICB3aGF0OiBwcm9jZXNzCiAgICBzeXNjYWxsczoKICAgICAgIyBraWxsIC0gc2VuZCBzaWduYWwgdG8gYSBwcm9jZXNzCiAgICAgIC0ga2lsbAogICAgICAjIHRraWxsIC0gc2VuZCBhIHNpZ25hbCB0byBhIHRocmVhZAogICAgICAtIHRraWxsCiAgICAgICMgdGdraWxsIC0gc2VuZCBhIHNpZ25hbCB0byBhIHRocmVhZAogICAgICAtIHRna2lsbAogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IGVuZAogIC0gYWN0aW9uOiBjaGFuZ2VkLWlkZW50aXR5LW9mCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHByb2Nlc3MKICAgIGhvdzogc3lzY2FsbAogICAgc3lzY2FsbHM6CiAgICAgICMgc2V0dWlkIC0gc2V0IHVzZXIgaWRlbnRpdHkKICAgICAgLSBzZXR1aWQKICAgICAgIyBzZXRldWlkIC0gc2V0IGVmZmVjdGl2ZSB1c2VyIG9yIGdyb3VwIElECiAgICAgIC0gc2V0ZXVpZAogICAgICAjIHNldGZzdWlkIC0gc2V0IHVzZXIgaWRlbnRpdHkgdXNlZCBmb3IgZmlsZXN5c3RlbSBjaGVja3MKICAgICAgLSBzZXRmc3VpZAogICAgICAjIHNldHJldWlkIC0gc2V0IHJlYWwgYW5kL29yIGVmZmVjdGl2ZSB1c2VyIG9yIGdyb3VwIElECiAgICAgIC0gc2V0cmV1aWQKICAgICAgIyBzZXRnaWQgLSBzZXQgZ3JvdXAgaWRlbnRpdHkKICAgICAgLSBzZXRnaWQKICAgICAgIyBzZXRlZ2lkIC0gc2V0IGVmZmVjdGl2ZSB1c2VyIG9yIGdyb3VwIElECiAgICAgIC0gc2V0ZWdpZAogICAgICAjIHNldGZzZ2lkIC0gc2V0IGdyb3VwIGlkZW50aXR5IHVzZWQgZm9yIGZpbGVzeXN0ZW0gY2hlY2tzCiAgICAgIC0gc2V0ZnNnaWQKICAgICAgIyBzZXRyZWdpZCAtIHNldCByZWFsIGFuZC9vciBlZmZlY3RpdmUgdXNlciBvciBncm91cCBJRAogICAgICAtIHNldHJlZ2lkCiAgICAgICMgc2V0cmVzdWlkIC0gc2V0IHJlYWwsIGVmZmVjdGl2ZSBhbmQgc2F2ZWQgdXNlciBvciBncm91cCBJRAogICAgICAtIHNldHJlc3VpZAogICAgICAjIHNldHJlc2dpZCAtIHNldCByZWFsLCBlZmZlY3RpdmUgYW5kIHNhdmVkIHVzZXIgb3IgZ3JvdXAgSUQKICAgICAgLSBzZXRyZXNnaWQKICAgIGVjczoKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBjaGFuZ2UKICAtIGFjdGlvbjogY2hhbmdlZC1zeXN0ZW0tdGltZQogICAgb2JqZWN0OgogICAgICB3aGF0OiBzeXN0ZW0KICAgIHN5c2NhbGxzOgogICAgICAjIHNldHRpbWVvZmRheSAtIGdldCAvIHNldCB0aW1lCiAgICAgIC0gc2V0dGltZW9mZGF5CiAgICAgICMgY2xvY2tfc2V0dGltZSAtIGNsb2NrIGFuZCB0aW1lIGZ1bmN0aW9ucwogICAgICAtIGNsb2NrX3NldHRpbWUKICAgICAgIyBzdGltZSAtIHNldCB0aW1lCiAgICAgIC0gc3RpbWUKICAgICAgIyBhZGp0aW1leCAtIHR1bmUga2VybmVsIGNsb2NrCiAgICAgIC0gYWRqdGltZXgKICAgIGVjczoKICAgICAgPDw6ICplY3MtaG9zdAogICAgICB0eXBlOiBjaGFuZ2UKICAtIGFjdGlvbjogbWFrZS1kZXZpY2UKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgc3lzY2FsbHM6CiAgICAgICMgbWtub2QgLSBjcmVhdGUgYSBzcGVjaWFsIG9yIG9yZGluYXJ5IGZpbGUKICAgICAgLSBta25vZAogICAgICAjIG1rbm9kYXQgLSBjcmVhdGUgYSBzcGVjaWFsIG9yIG9yZGluYXJ5IGZpbGUKICAgICAgLSBta25vZGF0CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgdHlwZTogY3JlYXRpb24KICAtIGFjdGlvbjogY2hhbmdlZC1zeXN0ZW0tbmFtZQogICAgb2JqZWN0OgogICAgICB3aGF0OiBzeXN0ZW0KICAgIHN5c2NhbGxzOgogICAgICAjIHNldGhvc3RuYW1lIC0gZ2V0L3NldCBob3N0bmFtZQogICAgICAtIHNldGhvc3RuYW1lCiAgICAgICMgc2V0ZG9tYWlubmFtZSAtIGdldC9zZXQgTklTIGRvbWFpbiBuYW1lCiAgICAgIC0gc2V0ZG9tYWlubmFtZQogICAgZWNzOgogICAgICA8PDogKmVjcy1ob3N0CiAgICAgIHR5cGU6IGNoYW5nZQogIC0gYWN0aW9uOiBhbGxvY2F0ZWQtbWVtb3J5CiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IG1lbW9yeQogICAgc3lzY2FsbHM6CiAgICAgICMgbW1hcCAtIG1hcCBvciB1bm1hcCBmaWxlcyBvciBkZXZpY2VzIGludG8gbWVtb3J5CiAgICAgIC0gbW1hcAogICAgICAjIG1tYXAyIC0gbWFwIGZpbGVzIG9yIGRldmljZXMgaW50byBtZW1vcnkKICAgICAgLSBtbWFwMgogICAgICAjIGJyayAtIGNoYW5nZSBkYXRhIHNlZ21lbnQgc2l6ZQogICAgICAtIGJyawogICAgZWNzOiAqZWNzLXByb2Nlc3MKICAtIGFjdGlvbjogYWRqdXN0ZWQtc2NoZWR1bGluZy1wb2xpY3ktb2YKICAgIG9iamVjdDoKICAgICAgd2hhdDogcHJvY2VzcwogICAgaG93OiBzeXNjYWxsCiAgICBzeXNjYWxsczoKICAgICAgIyBzY2hlZF9zZXRwYXJhbSAtIHNldCBhbmQgZ2V0IHNjaGVkdWxpbmcgcGFyYW1ldGVycwogICAgICAtIHNjaGVkX3NldHBhcmFtCiAgICAgICMgc2NoZWRfc2V0c2NoZWR1bGVyIC0gc2V0IGFuZCBnZXQgc2NoZWR1bGluZyBwb2xpY3kvcGFyYW1ldGVycwogICAgICAtIHNjaGVkX3NldHNjaGVkdWxlcgogICAgICAjIHNjaGVkX3NldGF0dHIgLSBzZXQgYW5kIGdldCBzY2hlZHVsaW5nIHBvbGljeSBhbmQgYXR0cmlidXRlcwogICAgICAtIHNjaGVkX3NldGF0dHIKICAgIGVjczoKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBjaGFuZ2UKCiAgIyBDdXJyZW50bHkgdW5oYW5kbGVkCiAgIyB0aGlzIGxpc3QgY29tZXMgZnJvbSBwYXJzaW5nIGxpbnV4IG1hbiBwYWdlcyBhdCBodHRwczovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vZG9jcy9tYW4tcGFnZXMvbWFuLXBhZ2VzLmdpdAoKICAjIHNpZ2FjdGlvbiAtIGV4YW1pbmUgYW5kIGNoYW5nZSBhIHNpZ25hbCBhY3Rpb24KICAjIHJ0X3NpZ2FjdGlvbiAtIGV4YW1pbmUgYW5kIGNoYW5nZSBhIHNpZ25hbCBhY3Rpb24KICAjIHByZWFkIC0gcmVhZCBmcm9tIG9yIHdyaXRlIHRvIGEgZmlsZSBkZXNjcmlwdG9yIGF0IGEgZ2l2ZW4gb2Zmc2V0CiAgIyBwd3JpdGUgLSByZWFkIGZyb20gb3Igd3JpdGUgdG8gYSBmaWxlIGRlc2NyaXB0b3IgYXQgYSBnaXZlbiBvZmZzZXQKICAjIHMzOTBfZ3VhcmRlZF9zdG9yYWdlIC0gb3BlcmF0aW9ucyB3aXRoIHovQXJjaGl0ZWN0dXJlIGd1YXJkZWQgc3RvcmFnZSBmYWNpbGl0eQogICMgc2NoZWRfZ2V0YXR0ciAtIHNldCBhbmQgZ2V0IHNjaGVkdWxpbmcgcG9saWN5IGFuZCBhdHRyaWJ1dGVzCiAgIyBnZXRydXNhZ2UgLSBnZXQgcmVzb3VyY2UgdXNhZ2UKICAjIGZsb2NrIC0gYXBwbHkgb3IgcmVtb3ZlIGFuIGFkdmlzb3J5IGxvY2sgb24gYW4gb3BlbiBmaWxlCiAgIyBwaWRmZF9nZXRmZCAtIG9idGFpbiBhIGR1cGxpY2F0ZSBvZiBhbm90aGVyIHByb2Nlc3MncyBmaWxlIGRlc2NyaXB0b3IKICAjIGNsb2NrX25hbm9zbGVlcCAtIGhpZ2gtcmVzb2x1dGlvbiBzbGVlcCB3aXRoIHNwZWNpZmlhYmxlIGNsb2NrCiAgIyBnZXRwYWdlc2l6ZSAtIGdldCBtZW1vcnkgcGFnZSBzaXplCiAgIyBwaWRmZF9vcGVuIC0gb2J0YWluIGEgZmlsZSBkZXNjcmlwdG9yIHRoYXQgcmVmZXJzIHRvIGEgcHJvY2VzcwogICMgc3BsaWNlIC0gc3BsaWNlIGRhdGEgdG8vZnJvbSBhIHBpcGUKICAjIGdldHJlc3VpZCAtIGdldCByZWFsLCBlZmZlY3RpdmUgYW5kIHNhdmVkIHVzZXIvZ3JvdXAgSURzCiAgIyBnZXRyZXNnaWQgLSBnZXQgcmVhbCwgZWZmZWN0aXZlIGFuZCBzYXZlZCB1c2VyL2dyb3VwIElEcwogICMgcmVtYXBfZmlsZV9wYWdlcyAtIGNyZWF0ZSBhIG5vbmxpbmVhciBmaWxlIG1hcHBpbmcKICAjIGlvX2NhbmNlbCAtIGNhbmNlbCBhbiBvdXRzdGFuZGluZyBhc3luY2hyb25vdXMgSS9PIG9wZXJhdGlvbgogICMgcHJjdGwgLSBvcGVyYXRpb25zIG9uIGEgcHJvY2VzcyBvciB0aHJlYWQKICAjIGNsb2NrX2dldHJlcyAtIGNsb2NrIGFuZCB0aW1lIGZ1bmN0aW9ucwogICMgY2xvY2tfZ2V0dGltZSAtIGNsb2NrIGFuZCB0aW1lIGZ1bmN0aW9ucwogICMgZ2V0Z3JvdXBzIC0gZ2V0L3NldCBsaXN0IG9mIHN1cHBsZW1lbnRhcnkgZ3JvdXAgSURzCiAgIyBzZXRncm91cHMgLSBnZXQvc2V0IGxpc3Qgb2Ygc3VwcGxlbWVudGFyeSBncm91cCBJRHMKICAjIHZtc3BsaWNlIC0gc3BsaWNlIHVzZXIgcGFnZXMgdG8vZnJvbSBhIHBpcGUKICAjIGVwb2xsX2NyZWF0ZSAtIG9wZW4gYW4gZXBvbGwgZmlsZSBkZXNjcmlwdG9yCiAgIyBlcG9sbF9jcmVhdGUxIC0gb3BlbiBhbiBlcG9sbCBmaWxlIGRlc2NyaXB0b3IKICAjIHBvc2l4X2ZhZHZpc2UgLSBwcmVkZWNsYXJlIGFuIGFjY2VzcyBwYXR0ZXJuIGZvciBmaWxlIGRhdGEKICAjIHNpZ3dhaXRpbmZvIC0gc3luY2hyb25vdXNseSB3YWl0IGZvciBxdWV1ZWQgc2lnbmFscwogICMgc2lndGltZWR3YWl0IC0gc3luY2hyb25vdXNseSB3YWl0IGZvciBxdWV1ZWQgc2lnbmFscwogICMgcnRfc2lndGltZWR3YWl0IC0gc3luY2hyb25vdXNseSB3YWl0IGZvciBxdWV1ZWQgc2lnbmFscwogICMgc2lncmV0dXJuIC0gcmV0dXJuIGZyb20gc2lnbmFsIGhhbmRsZXIgYW5kIGNsZWFudXAgc3RhY2sgZnJhbWUKICAjIHJ0X3NpZ3JldHVybiAtIHJldHVybiBmcm9tIHNpZ25hbCBoYW5kbGVyIGFuZCBjbGVhbnVwIHN0YWNrIGZyYW1lCiAgIyBnZXRyYW5kb20gLSBvYnRhaW4gYSBzZXJpZXMgb2YgcmFuZG9tIGJ5dGVzCiAgIyBrZXljdGwgLSBtYW5pcHVsYXRlIHRoZSBrZXJuZWwncyBrZXkgbWFuYWdlbWVudCBmYWNpbGl0eQogICMgc2NoZWRfZ2V0c2NoZWR1bGVyIC0gc2V0IGFuZCBnZXQgc2NoZWR1bGluZyBwb2xpY3kvcGFyYW1ldGVycwogICMgbWJpbmQgLSBzZXQgbWVtb3J5IHBvbGljeSBmb3IgYSBtZW1vcnkgcmFuZ2UKICAjIGdldHByaW9yaXR5IC0gZ2V0L3NldCBwcm9ncmFtIHNjaGVkdWxpbmcgcHJpb3JpdHkKICAjIHNldHByaW9yaXR5IC0gZ2V0L3NldCBwcm9ncmFtIHNjaGVkdWxpbmcgcHJpb3JpdHkKICAjIGlub3RpZnlfaW5pdCAtIGluaXRpYWxpemUgYW4gaW5vdGlmeSBpbnN0YW5jZQogICMgaW5vdGlmeV9pbml0MSAtIGluaXRpYWxpemUgYW4gaW5vdGlmeSBpbnN0YW5jZQogICMgc2VtY3RsIC0gU3lzdGVtIFYgc2VtYXBob3JlIGNvbnRyb2wgb3BlcmF0aW9ucwogICMgZ2V0aG9zdG5hbWUgLSBnZXQvc2V0IGhvc3RuYW1lCiAgIyBwdHJhY2UgLSBwcm9jZXNzIHRyYWNlCiAgIyBzeXNjdGwgLSByZWFkL3dyaXRlIHN5c3RlbSBwYXJhbWV0ZXJzCiAgIyBnZXRwZWVybmFtZSAtIGdldCBuYW1lIG9mIGNvbm5lY3RlZCBwZWVyIHNvY2tldAogICMgZm9yayAtIGNyZWF0ZSBhIGNoaWxkIHByb2Nlc3MKICAjIHF1ZXJ5X21vZHVsZSAtIHF1ZXJ5IHRoZSBrZXJuZWwgZm9yIHZhcmlvdXMgYml0cyBwZXJ0YWluaW5nIHRvIG1vZHVsZXMKICAjIGlvY3RsX2xpc3QgLSBsaXN0IG9mIGlvY3RsIGNhbGxzIGluIExpbnV4L2kzODYga2VybmVsCiAgIyBtc2dnZXQgLSBnZXQgYSBTeXN0ZW0gViBtZXNzYWdlIHF1ZXVlIGlkZW50aWZpZXIKICAjIHNwdV9jcmVhdGUgLSBjcmVhdGUgYSBuZXcgc3B1IGNvbnRleHQKICAjIHN1YnBhZ2VfcHJvdCAtIGRlZmluZSBhIHN1YnBhZ2UgcHJvdGVjdGlvbiBmb3IgYW4gYWRkcmVzcyByYW5nZQogICMgcXVvdGFjdGwgLSBtYW5pcHVsYXRlIGRpc2sgcXVvdGFzCiAgIyBuZnNzZXJ2Y3RsIC0gc3lzY2FsbCBpbnRlcmZhY2UgdG8ga2VybmVsIG5mcyBkYWVtb24KICAjIG9wZW5hdDIgLSBvcGVuIGFuZCBwb3NzaWJseSBjcmVhdGUgYSBmaWxlIChleHRlbmRlZCkKICAjIGdldHJsaW1pdCAtIGdldC9zZXQgcmVzb3VyY2UgbGltaXRzCiAgIyBzZXRybGltaXQgLSBnZXQvc2V0IHJlc291cmNlIGxpbWl0cwogICMgcHJsaW1pdCAtIGdldC9zZXQgcmVzb3VyY2UgbGltaXRzCiAgIyB0ZWUgLSBkdXBsaWNhdGluZyBwaXBlIGNvbnRlbnQKICAjIHNobWdldCAtIGFsbG9jYXRlcyBhIFN5c3RlbSBWIHNoYXJlZCBtZW1vcnkgc2VnbWVudAogICMgY3JlYXRlX21vZHVsZSAtIGNyZWF0ZSBhIGxvYWRhYmxlIG1vZHVsZSBlbnRyeQogICMgZ2V0dGltZW9mZGF5IC0gZ2V0IC8gc2V0IHRpbWUKICAjIHRpbWVyX2NyZWF0ZSAtIGNyZWF0ZSBhIFBPU0lYIHBlci1wcm9jZXNzIHRpbWVyCiAgIyBmYW5vdGlmeV9tYXJrIC0gYWRkLCByZW1vdmUsIG9yIG1vZGlmeSBhbiBmYW5vdGlmeSBtYXJrIG9uIGEgZmlsZXN5c3RlbSBvYmplY3QKICAjIHBpcGUgLSBjcmVhdGUgcGlwZQogICMgcGlwZTIgLSBjcmVhdGUgcGlwZQogICMgaW50cm8gLSBpbnRyb2R1Y3Rpb24gdG8gc3lzdGVtIGNhbGxzCiAgIyBsb29rdXBfZGNvb2tpZSAtIHJldHVybiBhIGRpcmVjdG9yeSBlbnRyeSdzIHBhdGgKICAjIHN5c2ZzIC0gZ2V0IGZpbGVzeXN0ZW0gdHlwZSBpbmZvcm1hdGlvbgogICMgczM5MF9ydW50aW1lX2luc3RyIC0gZW5hYmxlL2Rpc2FibGUgczM5MCBDUFUgcnVuLXRpbWUgaW5zdHJ1bWVudGF0aW9uCiAgIyBzZXRucyAtIHJlYXNzb2NpYXRlIHRocmVhZCB3aXRoIGEgbmFtZXNwYWNlCiAgIyBzZXRfbWVtcG9saWN5IC0gc2V0IGRlZmF1bHQgTlVNQSBtZW1vcnkgcG9saWN5IGZvciBhIHRocmVhZCBhbmQgaXRzIGNoaWxkcmVuCiAgIyBuaWNlIC0gY2hhbmdlIHByb2Nlc3MgcHJpb3JpdHkKICAjIGlvX3NldHVwIC0gY3JlYXRlIGFuIGFzeW5jaHJvbm91cyBJL08gY29udGV4dAogICMgbWluY29yZSAtIGRldGVybWluZSB3aGV0aGVyIHBhZ2VzIGFyZSByZXNpZGVudCBpbiBtZW1vcnkKICAjIGlvY3RsX2NvbnNvbGUgLSBpb2N0bHMgZm9yIGNvbnNvbGUgdGVybWluYWwgYW5kIHZpcnR1YWwgY29uc29sZXMKICAjIHBvbGwgLSB3YWl0IGZvciBzb21lIGV2ZW50IG9uIGEgZmlsZSBkZXNjcmlwdG9yCiAgIyBwcG9sbCAtIHdhaXQgZm9yIHNvbWUgZXZlbnQgb24gYSBmaWxlIGRlc2NyaXB0b3IKICAjIGNhcGdldCAtIHNldC9nZXQgY2FwYWJpbGl0aWVzIG9mIHRocmVhZChzKQogICMgY2Fwc2V0IC0gc2V0L2dldCBjYXBhYmlsaXRpZXMgb2YgdGhyZWFkKHMpCiAgIyBpb2N0bF90dHkgLSBpb2N0bHMgZm9yIHRlcm1pbmFscyBhbmQgc2VyaWFsIGxpbmVzCiAgIyBpb3BsIC0gY2hhbmdlIEkvTyBwcml2aWxlZ2UgbGV2ZWwKICAjIGlvX2dldGV2ZW50cyAtIHJlYWQgYXN5bmNocm9ub3VzIEkvTyBldmVudHMgZnJvbSB0aGUgY29tcGxldGlvbiBxdWV1ZQogICMgcHJvY2Vzc192bV9yZWFkdiAtIHRyYW5zZmVyIGRhdGEgYmV0d2VlbiBwcm9jZXNzIGFkZHJlc3Mgc3BhY2VzCiAgIyBwcm9jZXNzX3ZtX3dyaXRldiAtIHRyYW5zZmVyIGRhdGEgYmV0d2VlbiBwcm9jZXNzIGFkZHJlc3Mgc3BhY2VzCiAgIyBwY2ljb25maWdfcmVhZCAtIHBjaSBkZXZpY2UgaW5mb3JtYXRpb24gaGFuZGxpbmcKICAjIHBjaWNvbmZpZ193cml0ZSAtIHBjaSBkZXZpY2UgaW5mb3JtYXRpb24gaGFuZGxpbmcKICAjIHBjaWNvbmZpZ19pb2Jhc2UgLSBwY2kgZGV2aWNlIGluZm9ybWF0aW9uIGhhbmRsaW5nCiAgIyBzYnJrIC0gY2hhbmdlIGRhdGEgc2VnbWVudCBzaXplCiAgIyBzZXRfdGlkX2FkZHJlc3MgLSBzZXQgcG9pbnRlciB0byB0aHJlYWQgSUQKICAjIHBrZXlfYWxsb2MgLSBhbGxvY2F0ZSBvciBmcmVlIGEgcHJvdGVjdGlvbiBrZXkKICAjIHBrZXlfZnJlZSAtIGFsbG9jYXRlIG9yIGZyZWUgYSBwcm90ZWN0aW9uIGtleQogICMgc2VsZWN0IC0gc3luY2hyb25vdXMgSS9PIG11bHRpcGxleGluZwogICMgcHNlbGVjdCAtIHN5bmNocm9ub3VzIEkvTyBtdWx0aXBsZXhpbmcKICAjIGtleGVjX2xvYWQgLSBsb2FkIGEgbmV3IGtlcm5lbCBmb3IgbGF0ZXIgZXhlY3V0aW9uCiAgIyBrZXhlY19maWxlX2xvYWQgLSBsb2FkIGEgbmV3IGtlcm5lbCBmb3IgbGF0ZXIgZXhlY3V0aW9uCiAgIyBwZXJzb25hbGl0eSAtIHNldCB0aGUgcHJvY2VzcyBleGVjdXRpb24gZG9tYWluCiAgIyBpb2N0bF9nZXRmc21hcCAtIHJldHJpZXZlIHRoZSBwaHlzaWNhbCBsYXlvdXQgb2YgdGhlIGZpbGVzeXN0ZW0KICAjIGlub3RpZnlfcm1fd2F0Y2ggLSByZW1vdmUgYW4gZXhpc3Rpbmcgd2F0Y2ggZnJvbSBhbiBpbm90aWZ5IGluc3RhbmNlCiAgIyBwZXJmX2V2ZW50X29wZW4gLSBzZXQgdXAgcGVyZm9ybWFuY2UgbW9uaXRvcmluZwogICMgdGltZXJfZ2V0b3ZlcnJ1biAtIGdldCBvdmVycnVuIGNvdW50IGZvciBhIFBPU0lYIHBlci1wcm9jZXNzIHRpbWVyCiAgIyB3YWl0MyAtIHdhaXQgZm9yIHByb2Nlc3MgdG8gY2hhbmdlIHN0YXRlLCBCU0Qgc3R5bGUKICAjIHdhaXQ0IC0gd2FpdCBmb3IgcHJvY2VzcyB0byBjaGFuZ2Ugc3RhdGUsIEJTRCBzdHlsZQogICMgbGluayAtIG1ha2UgYSBuZXcgbmFtZSBmb3IgYSBmaWxlCiAgIyBsaW5rYXQgLSBtYWtlIGEgbmV3IG5hbWUgZm9yIGEgZmlsZQogICMgc2NoZWRfcnJfZ2V0X2ludGVydmFsIC0gZ2V0IHRoZSBTQ0hFRF9SUiBpbnRlcnZhbCBmb3IgdGhlIG5hbWVkIHByb2Nlc3MKICAjIG11bm1hcCAtIG1hcCBvciB1bm1hcCBmaWxlcyBvciBkZXZpY2VzIGludG8gbWVtb3J5CiAgIyBzb2NrZXRjYWxsIC0gc29ja2V0IHN5c3RlbSBjYWxscwogICMgbXJlbWFwIC0gcmVtYXAgYSB2aXJ0dWFsIG1lbW9yeSBhZGRyZXNzCiAgIyB2Zm9yayAtIGNyZWF0ZSBhIGNoaWxkIHByb2Nlc3MgYW5kIGJsb2NrIHBhcmVudAogICMgc2VjY29tcCAtIG9wZXJhdGUgb24gU2VjdXJlIENvbXB1dGluZyBzdGF0ZSBvZiB0aGUgcHJvY2VzcwogICMgcmVxdWVzdF9rZXkgLSByZXF1ZXN0IGEga2V5IGZyb20gdGhlIGtlcm5lbCdzIGtleSBtYW5hZ2VtZW50IGZhY2lsaXR5CiAgIyBzeXNjYWxsIC0gaW5kaXJlY3Qgc3lzdGVtIGNhbGwKICAjIGtjbXAgLSBjb21wYXJlIHR3byBwcm9jZXNzZXMgdG8gZGV0ZXJtaW5lIGlmIHRoZXkgc2hhcmUgYSBrZXJuZWwgcmVzb3VyY2UKICAjIHJlYWRkaXIgLSByZWFkIGRpcmVjdG9yeSBlbnRyeQogICMgaW9wZXJtIC0gc2V0IHBvcnQgaW5wdXQvb3V0cHV0IHBlcm1pc3Npb25zCiAgIyBzcHVfcnVuIC0gZXhlY3V0ZSBhbiBTUFUgY29udGV4dAogICMgcmVib290IC0gcmVib290IG9yIGVuYWJsZS9kaXNhYmxlIEN0cmwtQWx0LURlbAogICMgcmVhZGFoZWFkIC0gaW5pdGlhdGUgZmlsZSByZWFkYWhlYWQgaW50byBwYWdlIGNhY2hlCiAgIyBzY2hlZF9nZXRwYXJhbSAtIHNldCBhbmQgZ2V0IHNjaGVkdWxpbmcgcGFyYW1ldGVycwogICMgYWNjdCAtIHN3aXRjaCBwcm9jZXNzIGFjY291bnRpbmcgb24gb3Igb2ZmCiAgIyBzaWdzdXNwZW5kIC0gd2FpdCBmb3IgYSBzaWduYWwKICAjIHJ0X3NpZ3N1c3BlbmQgLSB3YWl0IGZvciBhIHNpZ25hbAogICMgZXhpdF9ncm91cCAtIGV4aXQgYWxsIHRocmVhZHMgaW4gYSBwcm9jZXNzCiAgIyBzb2NrZXQgLSBjcmVhdGUgYW4gZW5kcG9pbnQgZm9yIGNvbW11bmljYXRpb24KICAjIGlvY3RsX3VzZXJmYXVsdGZkIC0gY3JlYXRlIGEgZmlsZSBkZXNjcmlwdG9yIGZvciBoYW5kbGluZyBwYWdlIGZhdWx0cyBpbiB1c2VyIHNwYWNlCiAgIyBzY2hlZF9nZXRfcHJpb3JpdHlfbWF4IC0gZ2V0IHN0YXRpYyBwcmlvcml0eSByYW5nZQogICMgc2NoZWRfZ2V0X3ByaW9yaXR5X21pbiAgLSBnZXQgc3RhdGljIHByaW9yaXR5IHJhbmdlCiAgIyBnZXRkZW50cyAtIGdldCBkaXJlY3RvcnkgZW50cmllcwogICMgZ2V0ZGVudHM2NCAtIGdldCBkaXJlY3RvcnkgZW50cmllcwogICMgc2VsZWN0IC0gc3luY2hyb25vdXMgSS9PIG11bHRpcGxleGluZwogICMgcHNlbGVjdCAtIHN5bmNocm9ub3VzIEkvTyBtdWx0aXBsZXhpbmcKICAjIGFsbG9jX2h1Z2VwYWdlcyAtIGFsbG9jYXRlIG9yIGZyZWUgaHVnZSBwYWdlcwogICMgZnJlZV9odWdlcGFnZXMgLSBhbGxvY2F0ZSBvciBmcmVlIGh1Z2UgcGFnZXMKICAjIGZzeW5jIC0gc3luY2hyb25pemUgYSBmaWxlJ3MgaW4tY29yZSBzdGF0ZSB3aXRoIHN0b3JhZ2UgZGV2aWNlCiAgIyBmZGF0YXN5bmMgLSBzeW5jaHJvbml6ZSBhIGZpbGUncyBpbi1jb3JlIHN0YXRlIHdpdGggc3RvcmFnZSBkZXZpY2UKICAjIHN5c2NhbGxzIC0gTGludXggc3lzdGVtIGNhbGxzCiAgIyBtZW1mZF9jcmVhdGUgLSBjcmVhdGUgYW4gYW5vbnltb3VzIGZpbGUKICAjIG1vZGlmeV9sZHQgLSBnZXQgb3Igc2V0IGEgcGVyLXByb2Nlc3MgTERUIGVudHJ5CiAgIyBnZXRfa2VybmVsX3N5bXMgLSByZXRyaWV2ZSBleHBvcnRlZCBrZXJuZWwgYW5kIG1vZHVsZSBzeW1ib2xzCiAgIyBsc2VlayAtIHJlcG9zaXRpb24gcmVhZC93cml0ZSBmaWxlIG9mZnNldAogICMgc2htYXQgLSBTeXN0ZW0gViBzaGFyZWQgbWVtb3J5IG9wZXJhdGlvbnMKICAjIHNobWR0IC0gU3lzdGVtIFYgc2hhcmVkIG1lbW9yeSBvcGVyYXRpb25zCiAgIyB0aW1lcl9kZWxldGUgLSBkZWxldGUgYSBQT1NJWCBwZXItcHJvY2VzcyB0aW1lcgogICMgcGVyZm1vbmN0bCAtIGludGVyZmFjZSB0byBJQS02NCBwZXJmb3JtYW5jZSBtb25pdG9yaW5nIHVuaXQKICAjIG1vdmVfcGFnZXMgLSBtb3ZlIGluZGl2aWR1YWwgcGFnZXMgb2YgYSBwcm9jZXNzIHRvIGFub3RoZXIgbm9kZQogICMgY2hkaXIgLSBjaGFuZ2Ugd29ya2luZyBkaXJlY3RvcnkKICAjIGZjaGRpciAtIGNoYW5nZSB3b3JraW5nIGRpcmVjdG9yeQogICMgdGltZSAtIGdldCB0aW1lIGluIHNlY29uZHMKICAjIF9leGl0IC0gdGVybWluYXRlIHRoZSBjYWxsaW5nIHByb2Nlc3MKICAjIF9FeGl0IC0gdGVybWluYXRlIHRoZSBjYWxsaW5nIHByb2Nlc3MKICAjIHMzOTBfc3RoeWkgLSBlbXVsYXRlIFNUSFlJIGluc3RydWN0aW9uCiAgIyBpb19zdWJtaXQgLSBzdWJtaXQgYXN5bmNocm9ub3VzIEkvTyBibG9ja3MgZm9yIHByb2Nlc3NpbmcKICAjIG1sb2NrIC0gbG9jayBhbmQgdW5sb2NrIG1lbW9yeQogICMgbWxvY2syIC0gbG9jayBhbmQgdW5sb2NrIG1lbW9yeQogICMgbXVubG9jayAtIGxvY2sgYW5kIHVubG9jayBtZW1vcnkKICAjIG1sb2NrYWxsIC0gbG9jayBhbmQgdW5sb2NrIG1lbW9yeQogICMgbXVubG9ja2FsbCAtIGxvY2sgYW5kIHVubG9jayBtZW1vcnkKICAjIHVtYXNrIC0gc2V0IGZpbGUgbW9kZSBjcmVhdGlvbiBtYXNrCiAgIyBhcmNoX3ByY3RsIC0gc2V0IGFyY2hpdGVjdHVyZS1zcGVjaWZpYyB0aHJlYWQgc3RhdGUKICAjIHVzZWxpYiAtIGxvYWQgc2hhcmVkIGxpYnJhcnkKICAjIHNlbmRmaWxlIC0gdHJhbnNmZXIgZGF0YSBiZXR3ZWVuIGZpbGUgZGVzY3JpcHRvcnMKICAjIHNobWN0bCAtIFN5c3RlbSBWIHNoYXJlZCBtZW1vcnkgY29udHJvbAogICMgZXBvbGxfd2FpdCAtIHdhaXQgZm9yIGFuIEkvTyBldmVudCBvbiBhbiBlcG9sbCBmaWxlIGRlc2NyaXB0b3IKICAjIGVwb2xsX3B3YWl0IC0gd2FpdCBmb3IgYW4gSS9PIGV2ZW50IG9uIGFuIGVwb2xsIGZpbGUgZGVzY3JpcHRvcgogICMgc2lnYWx0c3RhY2sgLSBzZXQgYW5kL29yIGdldCBzaWduYWwgc3RhY2sgY29udGV4dAogICMgaW9jdGwgLSBjb250cm9sIGRldmljZQogICMgc2lnbmFsZmQgLSBjcmVhdGUgYSBmaWxlIGRlc2NyaXB0b3IgZm9yIGFjY2VwdGluZyBzaWduYWxzCiAgIyB1bnNoYXJlIC0gZGlzYXNzb2NpYXRlIHBhcnRzIG9mIHRoZSBwcm9jZXNzIGV4ZWN1dGlvbiBjb250ZXh0CiAgIyBjaHJvb3QgLSBjaGFuZ2Ugcm9vdCBkaXJlY3RvcnkKICAjIG1hZHZpc2UgLSBnaXZlIGFkdmljZSBhYm91dCB1c2Ugb2YgbWVtb3J5CiAgIyBnZXR0aWQgLSBnZXQgdGhyZWFkIGlkZW50aWZpY2F0aW9uCiAgIyBnZXRzb2NrbmFtZSAtIGdldCBzb2NrZXQgbmFtZQogICMgaW9fZGVzdHJveSAtIGRlc3Ryb3kgYW4gYXN5bmNocm9ub3VzIEkvTyBjb250ZXh0CiAgIyBzZXR1cCAtIHNldHVwIGRldmljZXMgYW5kIGZpbGVzeXN0ZW1zLCBtb3VudCByb290IGZpbGVzeXN0ZW0KICAjIG50cF9hZGp0aW1lIC0gdHVuZSBrZXJuZWwgY2xvY2sKICAjIHNlbWdldCAtIGdldCBhIFN5c3RlbSBWIHNlbWFwaG9yZSBzZXQgaWRlbnRpZmllcgogICMgZ2V0dWlkIC0gZ2V0IHVzZXIgaWRlbnRpdHkKICAjIGdldGV1aWQgLSBnZXQgdXNlciBpZGVudGl0eQogICMgX3N5c2NhbGwgLSBpbnZva2luZyBhIHN5c3RlbSBjYWxsIHdpdGhvdXQgbGlicmFyeSBzdXBwb3J0IChPQlNPTEVURSkKICAjIHNjaGVkX3NldGFmZmluaXR5IC0gXCBzZXQgYW5kIGdldCBhIHRocmVhZCdzIENQVSBhZmZpbml0eSBtYXNrCiAgIyBzY2hlZF9nZXRhZmZpbml0eSAtIFwgc2V0IGFuZCBnZXQgYSB0aHJlYWQncyBDUFUgYWZmaW5pdHkgbWFzawogICMgY2FjaGVmbHVzaCAtIGZsdXNoIGNvbnRlbnRzIG9mIGluc3RydWN0aW9uIGFuZC9vciBkYXRhIGNhY2hlCiAgIyBwaXZvdF9yb290IC0gY2hhbmdlIHRoZSByb290IG1vdW50CiAgIyBtc2djdGwgLSBTeXN0ZW0gViBtZXNzYWdlIGNvbnRyb2wgb3BlcmF0aW9ucwogICMgaW9jdGxfZmF0IC0gbWFuaXB1bGF0aW5nIHRoZSBGQVQgZmlsZXN5c3RlbQogICMgc2V0cGdpZCAtIHNldC9nZXQgcHJvY2VzcyBncm91cAogICMgZ2V0cGdpZCAtIHNldC9nZXQgcHJvY2VzcyBncm91cAogICMgc2V0cGdycCAtIHNldC9nZXQgcHJvY2VzcyBncm91cAogICMgZ2V0cGdycCAtIHNldC9nZXQgcHJvY2VzcyBncm91cAogICMgc29ja2V0cGFpciAtIGNyZWF0ZSBhIHBhaXIgb2YgY29ubmVjdGVkIHNvY2tldHMKICAjIGJkZmx1c2ggLSBzdGFydCwgZmx1c2gsIG9yIHR1bmUgYnVmZmVyLWRpcnR5LWZsdXNoIGRhZW1vbgogICMgYWxhcm0gLSBzZXQgYW4gYWxhcm0gY2xvY2sgZm9yIGRlbGl2ZXJ5IG9mIGEgc2lnbmFsCiAgIyB0aW1lcl9zZXR0aW1lIC0gYXJtL2Rpc2FybSBhbmQgZmV0Y2ggc3RhdGUgb2YgUE9TSVggcGVyLXByb2Nlc3MgdGltZXIKICAjIHRpbWVyX2dldHRpbWUgLSBhcm0vZGlzYXJtIGFuZCBmZXRjaCBzdGF0ZSBvZiBQT1NJWCBwZXItcHJvY2VzcyB0aW1lcgogICMgYWRkX2tleSAtIGFkZCBhIGtleSB0byB0aGUga2VybmVsJ3Mga2V5IG1hbmFnZW1lbnQgZmFjaWxpdHkKICAjIHJ0X3NpZ3F1ZXVlaW5mbyAtIHF1ZXVlIGEgc2lnbmFsIGFuZCBkYXRhCiAgIyBydF90Z3NpZ3F1ZXVlaW5mbyAtIHF1ZXVlIGEgc2lnbmFsIGFuZCBkYXRhCiAgIyB1c2VyZmF1bHRmZCAtIGNyZWF0ZSBhIGZpbGUgZGVzY3JpcHRvciBmb3IgaGFuZGxpbmcgcGFnZSBmYXVsdHMgaW4gdXNlciBzcGFjZQogICMgc2Vtb3AgLSBTeXN0ZW0gViBzZW1hcGhvcmUgb3BlcmF0aW9ucwogICMgc2VtdGltZWRvcCAtIFN5c3RlbSBWIHNlbWFwaG9yZSBvcGVyYXRpb25zCiAgIyBnZXRnaWQgLSBnZXQgZ3JvdXAgaWRlbnRpdHkKICAjIGdldGVnaWQgLSBnZXQgZ3JvdXAgaWRlbnRpdHkKICAjIGdldHBpZCAtIGdldCBwcm9jZXNzIGlkZW50aWZpY2F0aW9uCiAgIyBnZXRwcGlkIC0gZ2V0IHByb2Nlc3MgaWRlbnRpZmljYXRpb24KICAjIHNpZ3Byb2NtYXNrIC0gZXhhbWluZSBhbmQgY2hhbmdlIGJsb2NrZWQgc2lnbmFscwogICMgcnRfc2lncHJvY21hc2sgLSBleGFtaW5lIGFuZCBjaGFuZ2UgYmxvY2tlZCBzaWduYWxzCiAgIyB1bmFtZSAtIGdldCBuYW1lIGFuZCBpbmZvcm1hdGlvbiBhYm91dCBjdXJyZW50IGtlcm5lbAogICMgc3RhdHggLSBnZXQgZmlsZSBzdGF0dXMgKGV4dGVuZGVkKQogICMgaW9jdGxfZmljbG9uZXJhbmdlIC0gc2hhcmUgc29tZSB0aGUgZGF0YSBvZiBvbmUgZmlsZSB3aXRoIGFub3RoZXIgZmlsZQogICMgaW9jdGxfZmljbG9uZSAtIHNoYXJlIHNvbWUgdGhlIGRhdGEgb2Ygb25lIGZpbGUgd2l0aCBhbm90aGVyIGZpbGUKICAjIG1xX2dldHNldGF0dHIgLSBnZXQvc2V0IG1lc3NhZ2UgcXVldWUgYXR0cmlidXRlcwogICMgaW9wcmlvX2dldCAtIGdldC9zZXQgSS9PIHNjaGVkdWxpbmcgY2xhc3MgYW5kIHByaW9yaXR5CiAgIyBpb3ByaW9fc2V0IC0gZ2V0L3NldCBJL08gc2NoZWR1bGluZyBjbGFzcyBhbmQgcHJpb3JpdHkKICAjIGVwb2xsX2N0bCAtIGNvbnRyb2wgaW50ZXJmYWNlIGZvciBhbiBlcG9sbCBmaWxlIGRlc2NyaXB0b3IKICAjIHN5bmMgLSBjb21taXQgZmlsZXN5c3RlbSBjYWNoZXMgdG8gZGlzawogICMgc3luY2ZzIC0gY29tbWl0IGZpbGVzeXN0ZW0gY2FjaGVzIHRvIGRpc2sKICAjIHNldHNpZCAtIGNyZWF0ZXMgYSBzZXNzaW9uIGFuZCBzZXRzIHRoZSBwcm9jZXNzIGdyb3VwIElECiAgIyBzaHV0ZG93biAtIHNodXQgZG93biBwYXJ0IG9mIGEgZnVsbC1kdXBsZXggY29ubmVjdGlvbgogICMgZ2V0c2lkIC0gZ2V0IHNlc3Npb24gSUQKICAjIGdldF90aHJlYWRfYXJlYSAtIG1hbmlwdWxhdGUgdGhyZWFkLWxvY2FsIHN0b3JhZ2UgaW5mb3JtYXRpb24KICAjIHNldF90aHJlYWRfYXJlYSAtIG1hbmlwdWxhdGUgdGhyZWFkLWxvY2FsIHN0b3JhZ2UgaW5mb3JtYXRpb24KICAjIHRpbWVyZmRfY3JlYXRlIC0gdGltZXJzIHRoYXQgbm90aWZ5IHZpYSBmaWxlIGRlc2NyaXB0b3JzCiAgIyB0aW1lcmZkX3NldHRpbWUgLSB0aW1lcnMgdGhhdCBub3RpZnkgdmlhIGZpbGUgZGVzY3JpcHRvcnMKICAjIHRpbWVyZmRfZ2V0dGltZSAtIHRpbWVycyB0aGF0IG5vdGlmeSB2aWEgZmlsZSBkZXNjcmlwdG9ycwogICMgaW9jdGxfZmlkZWR1cGVyYW5nZSAtIHNoYXJlIHNvbWUgdGhlIGRhdGEgb2Ygb25lIGZpbGUgd2l0aCBhbm90aGVyIGZpbGUKICAjIG5hbWVfdG9faGFuZGxlX2F0IC0gb2J0YWluIGhhbmRsZSBmb3IgYSBwYXRobmFtZSBhbmQgb3BlbiBmaWxlIHZpYSBhIGhhbmRsZQogICMgb3Blbl9ieV9oYW5kbGVfYXQgLSBvYnRhaW4gaGFuZGxlIGZvciBhIHBhdGhuYW1lIGFuZCBvcGVuIGZpbGUgdmlhIGEgaGFuZGxlCiAgIyBmdXRleCAtIGZhc3QgdXNlci1zcGFjZSBsb2NraW5nCiAgIyBpb2N0bF9ucyAtIGlvY3RsKCkgb3BlcmF0aW9ucyBmb3IgTGludXggbmFtZXNwYWNlcwogICMgcGlkZmRfc2VuZF9zaWduYWwgLSBzZW5kIGEgc2lnbmFsIHRvIGEgcHJvY2VzcyBzcGVjaWZpZWQgYnkgYSBmaWxlIGRlc2NyaXB0b3IKICAjIGNsb25lIC0gY3JlYXRlIGEgY2hpbGQgcHJvY2VzcwogICMgX19jbG9uZTIgLSBjcmVhdGUgYSBjaGlsZCBwcm9jZXNzCiAgIyBjbG9uZTMgLSBjcmVhdGUgYSBjaGlsZCBwcm9jZXNzCiAgIyB0aW1lcyAtIGdldCBwcm9jZXNzIHRpbWVzCiAgIyBzeXNpbmZvIC0gcmV0dXJuIHN5c3RlbSBpbmZvcm1hdGlvbgogICMgaXBjIC0gU3lzdGVtIFYgSVBDIHN5c3RlbSBjYWxscwogICMgZXZlbnRmZCAtIGNyZWF0ZSBhIGZpbGUgZGVzY3JpcHRvciBmb3IgZXZlbnQgbm90aWZpY2F0aW9uCiAgIyB3YWl0IC0gd2FpdCBmb3IgcHJvY2VzcyB0byBjaGFuZ2Ugc3RhdGUKICAjIHdhaXRwaWQgLSB3YWl0IGZvciBwcm9jZXNzIHRvIGNoYW5nZSBzdGF0ZQogICMgd2FpdGlkIC0gd2FpdCBmb3IgcHJvY2VzcyB0byBjaGFuZ2Ugc3RhdGUKICAjIGdldGRvbWFpbm5hbWUgLSBnZXQvc2V0IE5JUyBkb21haW4gbmFtZQogICMgaWRsZSAtIG1ha2UgcHJvY2VzcyAwIGlkbGUKICAjIGlub3RpZnlfYWRkX3dhdGNoIC0gYWRkIGEgd2F0Y2ggdG8gYW4gaW5pdGlhbGl6ZWQgaW5vdGlmeSBpbnN0YW5jZQogICMgZ2V0X21lbXBvbGljeSAtIHJldHJpZXZlIE5VTUEgbWVtb3J5IHBvbGljeSBmb3IgYSB0aHJlYWQKICAjIGJwZiAtIHBlcmZvcm0gYSBjb21tYW5kIG9uIGFuIGV4dGVuZGVkIEJQRiBtYXAgb3IgcHJvZ3JhbQogICMgZ2V0c29ja29wdCAtIGdldCBhbmQgc2V0IG9wdGlvbnMgb24gc29ja2V0cwogICMgc2V0c29ja29wdCAtIGdldCBhbmQgc2V0IG9wdGlvbnMgb24gc29ja2V0cwogICMgZ2V0aXRpbWVyIC0gZ2V0IG9yIHNldCB2YWx1ZSBvZiBhbiBpbnRlcnZhbCB0aW1lcgogICMgc2V0aXRpbWVyIC0gZ2V0IG9yIHNldCB2YWx1ZSBvZiBhbiBpbnRlcnZhbCB0aW1lcgogICMgbWVtYmFycmllciAtIGlzc3VlIG1lbW9yeSBiYXJyaWVycyBvbiBhIHNldCBvZiB0aHJlYWRzCiAgIyBtcHJvdGVjdCAtIHNldCBwcm90ZWN0aW9uIG9uIGEgcmVnaW9uIG9mIG1lbW9yeQogICMgcGtleV9tcHJvdGVjdCAtIHNldCBwcm90ZWN0aW9uIG9uIGEgcmVnaW9uIG9mIG1lbW9yeQogICMgZ2V0Y3B1IC0gZGV0ZXJtaW5lIENQVSBhbmQgTlVNQSBub2RlIG9uIHdoaWNoIHRoZSBjYWxsaW5nIHRocmVhZCBpcyBydW5uaW5nCiAgIyBpb2N0bF9mc2xhYmVsIC0gZ2V0IG9yIHNldCBhIGZpbGVzeXN0ZW0gbGFiZWwKICAjIGxpc3R4YXR0ciAtIGxpc3QgZXh0ZW5kZWQgYXR0cmlidXRlIG5hbWVzCiAgIyBsbGlzdHhhdHRyIC0gbGlzdCBleHRlbmRlZCBhdHRyaWJ1dGUgbmFtZXMKICAjIGZsaXN0eGF0dHIgLSBsaXN0IGV4dGVuZGVkIGF0dHJpYnV0ZSBuYW1lcwogICMgX2xsc2VlayAtIHJlcG9zaXRpb24gcmVhZC93cml0ZSBmaWxlIG9mZnNldAogICMgZmNudGwgLSBtYW5pcHVsYXRlIGZpbGUgZGVzY3JpcHRvcgogICMgdXN0YXQgLSBnZXQgZmlsZXN5c3RlbSBzdGF0aXN0aWNzCiAgIyBzaWduYWwgLSBBTlNJIEMgc2lnbmFsIGhhbmRsaW5nCiAgIyBuYW5vc2xlZXAgLSBoaWdoLXJlc29sdXRpb24gc2xlZXAKICAjIGNvbm5lY3QgLSBpbml0aWF0ZSBhIGNvbm5lY3Rpb24gb24gYSBzb2NrZXQKICAjIHZtODZvbGQgLSBlbnRlciB2aXJ0dWFsIDgwODYgbW9kZQogICMgdm04NiAtIGVudGVyIHZpcnR1YWwgODA4NiBtb2RlCiAgIyBmYW5vdGlmeV9pbml0IC0gY3JlYXRlIGFuZCBpbml0aWFsaXplIGZhbm90aWZ5IGdyb3VwCiAgIyBtaWdyYXRlX3BhZ2VzIC0gbW92ZSBhbGwgcGFnZXMgaW4gYSBwcm9jZXNzIHRvIGFub3RoZXIgc2V0IG9mIG5vZGVzCiAgIyByZXN0YXJ0X3N5c2NhbGwgLSByZXN0YXJ0IGEgc3lzdGVtIGNhbGwgYWZ0ZXIgaW50ZXJydXB0aW9uIGJ5IGEgc3RvcCBzaWduYWwKICAjIGNsb3NlIC0gY2xvc2UgYSBmaWxlIGRlc2NyaXB0b3IKICAjIG1zZ3JjdiAtIFN5c3RlbSBWIG1lc3NhZ2UgcXVldWUgb3BlcmF0aW9ucwogICMgbXNnc25kIC0gU3lzdGVtIFYgbWVzc2FnZSBxdWV1ZSBvcGVyYXRpb25zCiAgIyByZWFkdiAtIHJlYWQgb3Igd3JpdGUgZGF0YSBpbnRvIG11bHRpcGxlIGJ1ZmZlcnMKICAjIHdyaXRldiAtIHJlYWQgb3Igd3JpdGUgZGF0YSBpbnRvIG11bHRpcGxlIGJ1ZmZlcnMKICAjIHByZWFkdiAtIHJlYWQgb3Igd3JpdGUgZGF0YSBpbnRvIG11bHRpcGxlIGJ1ZmZlcnMKICAjIHB3cml0ZXYgLSByZWFkIG9yIHdyaXRlIGRhdGEgaW50byBtdWx0aXBsZSBidWZmZXJzCiAgIyBwcmVhZHYyIC0gcmVhZCBvciB3cml0ZSBkYXRhIGludG8gbXVsdGlwbGUgYnVmZmVycwogICMgcHdyaXRldjIgLSByZWFkIG9yIHdyaXRlIGRhdGEgaW50byBtdWx0aXBsZSBidWZmZXJzCiAgIyBzeXNsb2cgLSByZWFkIGFuZC9vciBjbGVhciBrZXJuZWwgbWVzc2FnZSByaW5nIGJ1ZmZlcjsgc2V0IGNvbnNvbGVfbG9nbGV2ZWwKICAjIGtsb2djdGwgLSByZWFkIGFuZC9vciBjbGVhciBrZXJuZWwgbWVzc2FnZSByaW5nIGJ1ZmZlcjsgc2V0IGNvbnNvbGVfbG9nbGV2ZWwKICAjIHNjaGVkX3lpZWxkIC0geWllbGQgdGhlIHByb2Nlc3NvcgogICMgdmhhbmd1cCAtIHZpcnR1YWxseSBoYW5ndXAgdGhlIGN1cnJlbnQgdGVybWluYWwKICAjIGlvY3RsX2lmbGFncyAtIGlvY3RsKCkgb3BlcmF0aW9ucyBmb3IgaW5vZGUgZmxhZ3MKICAjIHNnZXRtYXNrIC0gbWFuaXB1bGF0aW9uIG9mIHNpZ25hbCBtYXNrIChvYnNvbGV0ZSkKICAjIHNzZXRtYXNrIC0gbWFuaXB1bGF0aW9uIG9mIHNpZ25hbCBtYXNrIChvYnNvbGV0ZSkKICAjIHN5bmNfZmlsZV9yYW5nZSAtIHN5bmMgYSBmaWxlIHNlZ21lbnQgd2l0aCBkaXNrCiAgIyBjb3B5X2ZpbGVfcmFuZ2UgLSBDb3B5IGEgcmFuZ2Ugb2YgZGF0YSBmcm9tIG9uZSBmaWxlIHRvIGFub3RoZXIKICAjIHNpZ3BlbmRpbmcgLSBleGFtaW5lIHBlbmRpbmcgc2lnbmFscwogICMgcnRfc2lncGVuZGluZyAtIGV4YW1pbmUgcGVuZGluZyBzaWduYWxzCiAgIyBnZXR1bndpbmQgLSBjb3B5IHRoZSB1bndpbmQgZGF0YSB0byBjYWxsZXIncyBidWZmZXIKICAjIG1zeW5jIC0gc3luY2hyb25pemUgYSBmaWxlIHdpdGggYSBtZW1vcnkgbWFwCiAgIyBnZXRfcm9idXN0X2xpc3QgLSBnZXQvc2V0IGxpc3Qgb2Ygcm9idXN0IGZ1dGV4ZXMKICAjIHNldF9yb2J1c3RfbGlzdCAtIGdldC9zZXQgbGlzdCBvZiByb2J1c3QgZnV0ZXhlcwogICMgZHVwIC0gZHVwbGljYXRlIGEgZmlsZSBkZXNjcmlwdG9yCiAgIyBkdXAyIC0gZHVwbGljYXRlIGEgZmlsZSBkZXNjcmlwdG9yCiAgIyBkdXAzIC0gZHVwbGljYXRlIGEgZmlsZSBkZXNjcmlwdG9yCiAgIyBzMzkwX3BjaV9tbWlvX3dyaXRlIC0gdHJhbnNmZXIgZGF0YSB0by9mcm9tIFBDSSBNTUlPIG1lbW9yeSBwYWdlCiAgIyBzMzkwX3BjaV9tbWlvX3JlYWQgLSB0cmFuc2ZlciBkYXRhIHRvL2Zyb20gUENJIE1NSU8gbWVtb3J5IHBhZ2UKICAjIHBhdXNlIC0gd2FpdCBmb3Igc2lnbmFsCiAgIyBzd2Fwb24gLSBzdGFydC9zdG9wIHN3YXBwaW5nIHRvIGZpbGUvZGV2aWNlCiAgIyBzd2Fwb2ZmIC0gc3RhcnQvc3RvcCBzd2FwcGluZyB0byBmaWxlL2RldmljZQoKICAjIFJlY29yZCB0eXBlIG5vcm1hbGl6YXRpb25zCiAgIyBVc2VmdWwgbGlua3M6CiAgIyBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vdG9ydmFsZHMvbGludXgvdjQuMTYvaW5jbHVkZS91YXBpL2xpbnV4L2F1ZGl0LmgKICAjIGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9saW51eC1hdWRpdC9hdWRpdC11c2Vyc3BhY2UvNGQ5MzMzMDFiMTgzNWNhZmEwOGI5ZTllZjcwNWM4ZmI2Yzk2Y2I2Mi9saWIvbGliYXVkaXQuaAogICMgaHR0cHM6Ly93d3cuZWxhc3RpYy5jby9ndWlkZS9lbi9lY3MvY3VycmVudC9lY3MtYWxsb3dlZC12YWx1ZXMtZXZlbnQtY2F0ZWdvcnkuaHRtbAoKICAjIElBTSByZWxhdGVkIGV2ZW50cwoKICAjIEFVRElUX0FDQ1RfTE9DSyAtIFVzZXIncyBhY2NvdW50IGxvY2tlZCBieSBhZG1pbgogIC0gcmVjb3JkX3R5cGVzOiBBQ0NUX0xPQ0sKICAgIGFjdGlvbjogbG9ja2VkLWFjY291bnQKICAgIGVjczoKICAgICAgPDw6ICplY3MtaWFtCiAgICAgIHR5cGU6CiAgICAgICAgLSB1c2VyCiAgICAgICAgLSBpbmZvCiAgIyBBVURJVF9BQ0NUX1VOTE9DSyAtIFVzZXIncyBhY2NvdW50IHVubG9ja2VkIGJ5IGFkbWluCiAgLSByZWNvcmRfdHlwZXM6IEFDQ1RfVU5MT0NLCiAgICBhY3Rpb246IHVubG9ja2VkLWFjY291bnQKICAgIGVjczoKICAgICAgPDw6ICplY3MtaWFtCiAgICAgIHR5cGU6CiAgICAgICAgLSB1c2VyCiAgICAgICAgLSBpbmZvCiAgIyBBVURJVF9BRERfR1JPVVAgLSBHcm91cCBhY2NvdW50IGFkZGVkCiAgLSByZWNvcmRfdHlwZXM6IEFERF9HUk9VUAogICAgYWN0aW9uOiBhZGRlZC1ncm91cC1hY2NvdW50LXRvCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IFtpZCwgYWNjdF0KICAgICAgd2hhdDogYWNjb3VudAogICAgZWNzOgogICAgICA8PDogKmVjcy1pYW0KICAgICAgPDw6ICplY3MtZ3JvdXAtbW9kaWZpY2F0aW9uLW1hcHBpbmdzCiAgICAgIHR5cGU6CiAgICAgICAgLSBncm91cAogICAgICAgIC0gY3JlYXRpb24KCiAgIyBBVURJVF9BRERfVVNFUiAtIFVzZXIgYWNjb3VudCBhZGRlZAogIC0gcmVjb3JkX3R5cGVzOiBBRERfVVNFUgogICAgYWN0aW9uOiBhZGRlZC11c2VyLWFjY291bnQKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogW2lkLCBhY2N0XQogICAgICB3aGF0OiBhY2NvdW50CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWlhbQogICAgICA8PDogKmVjcy11c2VyLW1vZGlmaWNhdGlvbi1tYXBwaW5ncwogICAgICB0eXBlOgogICAgICAgIC0gdXNlcgogICAgICAgIC0gY3JlYXRpb24KICAjIEFVRElUX0RFTF9HUk9VUCAtIEdyb3VwIGFjY291bnQgZGVsZXRlZAogIC0gcmVjb3JkX3R5cGVzOiBERUxfR1JPVVAKICAgIGFjdGlvbjogZGVsZXRlZC1ncm91cC1hY2NvdW50LWZyb20KICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogW2lkLCBhY2N0XQogICAgICB3aGF0OiBhY2NvdW50CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWlhbQogICAgICA8PDogKmVjcy1ncm91cC1tb2RpZmljYXRpb24tbWFwcGluZ3MKICAgICAgdHlwZToKICAgICAgICAtIGdyb3VwCiAgICAgICAgLSBkZWxldGlvbgogICMgQVVESVRfREVMX1VTRVIgLSBVc2VyIGFjY291bnQgZGVsZXRlZAogIC0gcmVjb3JkX3R5cGVzOiBERUxfVVNFUgogICAgYWN0aW9uOiBkZWxldGVkLXVzZXItYWNjb3VudAogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBbaWQsIGFjY3RdCiAgICAgIHdoYXQ6IGFjY291bnQKICAgIGVjczoKICAgICAgPDw6ICplY3MtaWFtCiAgICAgIDw8OiAqZWNzLXVzZXItbW9kaWZpY2F0aW9uLW1hcHBpbmdzCiAgICAgIHR5cGU6CiAgICAgICAgLSB1c2VyCiAgICAgICAgLSBkZWxldGlvbgogICMgQVVESVRfR1JQX01HTVQgLSBHcm91cCBhY2NvdW50IGF0dHIgd2FzIG1vZGlmaWVkCiAgLSByZWNvcmRfdHlwZXM6IEdSUF9NR01UCiAgICBhY3Rpb246IG1vZGlmaWVkLWdyb3VwLWFjY291bnQKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogW2lkLCBhY2N0XQogICAgICB3aGF0OiBhY2NvdW50CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWlhbQogICAgICB0eXBlOgogICAgICAgIC0gZ3JvdXAKICAgICAgICAtIGNoYW5nZQogICAgICBtYXBwaW5nczoKICAgICAgICAtIGZyb206IHN1YmplY3QucHJpbWFyeQogICAgICAgICAgdG86IHVzZXIKICAgICAgICAtIGZyb206IHN1YmplY3Quc2Vjb25kYXJ5CiAgICAgICAgICB0bzogZ3JvdXAudGFyZ2V0CiAgICAgICAgLSBmcm9tOiB1aWQudWlkCiAgICAgICAgICB0bzogdXNlci5lZmZlY3RpdmUKICAjIEFVRElUX1JPTEVfQVNTSUdOIC0gQWRtaW4gYXNzaWduZWQgdXNlciB0byByb2xlCiAgLSByZWNvcmRfdHlwZXM6IFJPTEVfQVNTSUdOCiAgICBhY3Rpb246IGFzc2lnbmVkLXVzZXItcm9sZS10bwogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBbaWQsIGFjY3RdCiAgICAgIHdoYXQ6IGFjY291bnQKICAgIGVjczoKICAgICAgPDw6ICplY3MtaWFtCiAgICAgIHR5cGU6CiAgICAgICAgLSB1c2VyCiAgICAgICAgLSBjaGFuZ2UKICAjIEFVRElUX1JPTEVfTU9ESUZZIC0gQWRtaW4gbW9kaWZpZWQgYSByb2xlCiAgLSByZWNvcmRfdHlwZXM6IFJPTEVfTU9ESUZZCiAgICBhY3Rpb246IG1vZGlmaWVkLXJvbGUKICAgIGVjczoKICAgICAgPDw6ICplY3MtaWFtCiAgICAgIHR5cGU6CiAgICAgICAgLSBjaGFuZ2UKICAjIEFVRElUX1JPTEVfUkVNT1ZFIC0gQWRtaW4gcmVtb3ZlZCB1c2VyIGZyb20gcm9sZQogIC0gcmVjb3JkX3R5cGVzOiBST0xFX1JFTU9WRQogICAgYWN0aW9uOiByZW1vdmVkLXVzZXItcm9sZS1mcm9tCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IFtpZCwgYWNjdF0KICAgICAgd2hhdDogYWNjb3VudAogICAgZWNzOgogICAgICA8PDogKmVjcy1pYW0KICAgICAgdHlwZToKICAgICAgICAtIHVzZXIKICAgICAgICAtIGNoYW5nZQogICMgQVVESVRfVVNFUl9NR01UIC0gVXNlciBhY2N0IGF0dHJpYnV0ZSBjaGFuZ2UKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IFVTRVJfTUdNVAogICAgYWN0aW9uOiBtb2RpZmllZC11c2VyLWFjY291bnQKICAgIGVjczoKICAgICAgPDw6ICplY3MtaWFtCiAgICAgIHR5cGU6CiAgICAgICAgLSB1c2VyCiAgICAgICAgLSBjaGFuZ2UKICAgICAgbWFwcGluZ3M6CiAgICAgICAgLSBmcm9tOiBzdWJqZWN0LnByaW1hcnkKICAgICAgICAgIHRvOiB1c2VyCiAgICAgICAgLSBmcm9tOiBzdWJqZWN0LnNlY29uZGFyeQogICAgICAgICAgdG86IHVzZXIudGFyZ2V0CiAgICAgICAgLSBmcm9tOiB1aWQudWlkCiAgICAgICAgICB0bzogdXNlci5lZmZlY3RpdmUKICAjIEFVRElUX1VTRVJfQ0hBVVRIVE9LIC0gVXNlciBhY2N0IHBhc3N3b3JkIG9yIHBpbiBjaGFuZ2VkCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBVU0VSX0NIQVVUSFRPSwogICAgYWN0aW9uOiBjaGFuZ2VkLXBhc3N3b3JkCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWlhbQogICAgICB0eXBlOgogICAgICAgIC0gdXNlcgogICAgICAgIC0gY2hhbmdlCiAgICAgIG1hcHBpbmdzOgogICAgICAgIC0gZnJvbTogc3ViamVjdC5wcmltYXJ5CiAgICAgICAgICB0bzogdXNlcgogICAgICAgIC0gZnJvbTogdWlkLnVpZAogICAgICAgICAgdG86IHVzZXIuZWZmZWN0aXZlCiAgICAgICAgLSBmcm9tOiBzdWJqZWN0LnNlY29uZGFyeQogICAgICAgICAgdG86IHVzZXIudGFyZ2V0CgogICMgQVVESVRfR1JQX0NIQVVUSFRPSyAtIEdyb3VwIGFjY3QgcGFzc3dvcmQgb3IgcGluIGNoYW5nZWQKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IEdSUF9DSEFVVEhUT0sKICAgIGFjdGlvbjogY2hhbmdlZC1ncm91cC1wYXNzd29yZAogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBhY2N0CiAgICAgIHdoYXQ6IHVzZXItc2Vzc2lvbgogICAgZWNzOgogICAgICA8PDogKmVjcy1pYW0KICAgICAgdHlwZToKICAgICAgICAtIGdyb3VwCiAgICAgICAgLSBjaGFuZ2UKICAgICAgbWFwcGluZ3M6CiAgICAgICAgLSBmcm9tOiBzdWJqZWN0LnByaW1hcnkKICAgICAgICAgIHRvOiB1c2VyCiAgICAgICAgLSBmcm9tOiB1aWQudWlkCiAgICAgICAgICB0bzogdXNlci5lZmZlY3RpdmUKICAgICAgICAtIGZyb206IHN1YmplY3Quc2Vjb25kYXJ5CiAgICAgICAgICB0bzogZ3JvdXAudGFyZ2V0CgogICMgQXV0aGVudGljYXRpb24gcmVsYXRlZCBldmVudHMKCiAgIyBBVURJVF9DUkVEX0FDUSAtIFVzZXIgY3JlZGVudGlhbCBhY3F1aXJlZAogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogQ1JFRF9BQ1EKICAgIGFjdGlvbjogYWNxdWlyZWQtY3JlZGVudGlhbHMKICAgIGVjczogKmVjcy1hdXRoCiAgIyBBVURJVF9DUkVEX0RJU1AgLSBVc2VyIGNyZWRlbnRpYWwgZGlzcG9zZWQKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IENSRURfRElTUAogICAgYWN0aW9uOiBkaXNwb3NlZC1jcmVkZW50aWFscwogICAgZWNzOiAqZWNzLWF1dGgKICAjIEFVRElUX0NSRURfUkVGUiAtIFVzZXIgY3JlZGVudGlhbCByZWZyZXNoZWQKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IENSRURfUkVGUgogICAgYWN0aW9uOiByZWZyZXNoZWQtY3JlZGVudGlhbHMKICAgIGVjczogKmVjcy1hdXRoCiAgIyBBVURJVF9HUlBfQVVUSCAtIEF1dGhlbnRpY2F0aW9uIGZvciBncm91cCBwYXNzd29yZAogIC0gcmVjb3JkX3R5cGVzOiBHUlBfQVVUSAogICAgYWN0aW9uOiBhdXRoZW50aWNhdGVkLXRvLWdyb3VwCiAgICBlY3M6ICplY3MtYXV0aAogICMgQVVESVRfTE9HSU4gLSBEZWZpbmUgdGhlIGxvZ2luIGlkIGFuZCBpbmZvcm1hdGlvbgogIC0gcmVjb3JkX3R5cGVzOiBMT0dJTgogICAgYWN0aW9uOiBjaGFuZ2VkLWxvZ2luLWlkLXRvCiAgICBzdWJqZWN0OgogICAgICBwcmltYXJ5OiBbb2xkX2F1aWQsIG9sZC1hdWlkXQogICAgICBzZWNvbmRhcnk6IHVpZAogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBbbmV3LWF1aWQsIG5ld19hdWlkLCBhdWlkXQogICAgICB3aGF0OiB1c2VyLXNlc3Npb24KICAgIGVjczoKICAgICAgPDw6ICplY3MtYXV0aAogICAgICB0eXBlOiBzdGFydAogICAgICBtYXBwaW5nczoKICAgICAgICAtIGZyb206IHN1YmplY3QucHJpbWFyeQogICAgICAgICAgdG86IHVzZXIKICAgICAgICAtIGZyb206IG9iamVjdC5wcmltYXJ5CiAgICAgICAgICB0bzogdXNlci5lZmZlY3RpdmUKICAjIEFVRElUX1VTRVJfQUNDVCAtIFVzZXIgc3lzdGVtIGFjY2VzcyBhdXRob3JpemF0aW9uCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBVU0VSX0FDQ1QKICAgIGFjdGlvbjogd2FzLWF1dGhvcml6ZWQKICAgIGVjczogKmVjcy1hdXRoCiAgIyBBVURJVF9VU0VSX0FVVEggLSBVc2VyIHN5c3RlbSBhY2Nlc3MgYXV0aGVudGljYXRpb24KICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IFVTRVJfQVVUSAogICAgYWN0aW9uOiBhdXRoZW50aWNhdGVkCiAgICBlY3M6ICplY3MtYXV0aAogICMgQVVESVRfVVNFUl9FTkQgLSBVc2VyIHNlc3Npb24gZW5kCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBVU0VSX0VORAogICAgYWN0aW9uOiBlbmRlZC1zZXNzaW9uCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXNlc3Npb24KICAgICAgdHlwZTogZW5kCiAgIyBBVURJVF9VU0VSX0VSUiAtIFVzZXIgYWNjdCBzdGF0ZSBlcnJvcgogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogVVNFUl9FUlIKICAgIGFjdGlvbjogZXJyb3IKICAgIHNvdXJjZV9pcDogW2FkZHJdCiAgICBlY3M6ICplY3MtYXV0aAogICMgQVVESVRfVVNFUl9MT0dJTiAtIFVzZXIgaGFzIGxvZ2dlZCBpbgogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogVVNFUl9MT0dJTgogICAgYWN0aW9uOiBsb2dnZWQtaW4KICAgIHNvdXJjZV9pcDogW2FkZHJdCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWF1dGgKICAgICAgdHlwZTogc3RhcnQKICAjIEFVRElUX1VTRVJfTE9HT1VUIC0gVXNlciBoYXMgbG9nZ2VkIG91dAogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogVVNFUl9MT0dPVVQKICAgIGFjdGlvbjogbG9nZ2VkLW91dAogICAgZWNzOgogICAgICA8PDogKmVjcy1hdXRoCiAgICAgIHR5cGU6IGVuZAogICMgQVVESVRfVVNFUl9ST0xFX0NIQU5HRSAtIFVzZXIgY2hhbmdlZCB0byBhIG5ldyByb2xlCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBVU0VSX1JPTEVfQ0hBTkdFCiAgICBhY3Rpb246IGNoYW5nZWQtcm9sZS10bwogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBzZWxlY3RlZC1jb250ZXh0CiAgICAgIHdoYXQ6IHVzZXItc2Vzc2lvbgogICMgQVVESVRfVVNFUl9TVEFSVCAtIFVzZXIgc2Vzc2lvbiBzdGFydAogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogVVNFUl9TVEFSVAogICAgYWN0aW9uOiBzdGFydGVkLXNlc3Npb24KICAgIHNvdXJjZV9pcDogW2FkZHJdCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXNlc3Npb24KICAgICAgdHlwZTogc3RhcnQKCiAgIyBIb3N0IHZpcnR1YWxpemF0aW9uIGV2ZW50cwoKICAjIEFVRElUX1ZJUlRfQ09OVFJPTCAtIFN0YXJ0LCBQYXVzZSwgU3RvcCBWTQogIC0gcmVjb3JkX3R5cGVzOiBWSVJUX0NPTlRST0wKICAgIGFjdGlvbjogaXNzdWVkLXZtLWNvbnRyb2wKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogb3AKICAgICAgc2Vjb25kYXJ5OiB2bQogICAgICB3aGF0OiB2aXJ0dWFsLW1hY2hpbmUKICAgIGVjczogKmVjcy1ob3N0CiAgIyBBVURJVF9WSVJUX0NSRUFURSAtIENyZWF0aW9uIG9mIGd1ZXN0IGltYWdlCiAgLSByZWNvcmRfdHlwZXM6IFZJUlRfQ1JFQVRFCiAgICBhY3Rpb246IGNyZWF0ZWQtdm0taW1hZ2UKICAgIGVjczogKmVjcy1ob3N0CiAgIyBBVURJVF9WSVJUX0RFU1RST1kgLSBEZXN0cnVjdGlvbiBvZiBndWVzdCBpbWFnZQogIC0gcmVjb3JkX3R5cGVzOiBWSVJUX0RFU1RST1kKICAgIGFjdGlvbjogZGVsZXRlZC12bS1pbWFnZQogICAgZWNzOiAqZWNzLWhvc3QKICAjIEFVRElUX1ZJUlRfSU5URUdSSVRZX0NIRUNLIC0gR3Vlc3QgaW50ZWdyaXR5IHJlc3VsdHMKICAtIHJlY29yZF90eXBlczogVklSVF9JTlRFR1JJVFlfQ0hFQ0sKICAgIGFjdGlvbjogY2hlY2tlZC1pbnRlZ3JpdHktb2YKICAgIGVjczogKmVjcy1ob3N0CiAgIyBBVURJVF9WSVJUX01BQ0hJTkVfSUQgLSBCaW5kaW5nIG9mIGxhYmVsIHRvIFZNCiAgLSByZWNvcmRfdHlwZXM6IFZJUlRfTUFDSElORV9JRAogICAgYWN0aW9uOiBhc3NpZ25lZC12bS1pZAogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiB2bQogICAgICB3aGF0OiB2aXJ0dWFsLW1hY2hpbmUKICAgIGVjczogKmVjcy1ob3N0CiAgIyBBVURJVF9WSVJUX01JR1JBVEVfSU4gLSBJbmJvdW5kIGd1ZXN0IG1pZ3JhdGlvbiBpbmZvCiAgLSByZWNvcmRfdHlwZXM6IFZJUlRfTUlHUkFURV9JTgogICAgYWN0aW9uOiBtaWdyYXRlZC12bS1mcm9tCiAgICBlY3M6ICplY3MtaG9zdAogICMgQVVESVRfVklSVF9NSUdSQVRFX09VVCAtIE91dGJvdW5kIGd1ZXN0IG1pZ3JhdGlvbiBpbmZvCiAgLSByZWNvcmRfdHlwZXM6IFZJUlRfTUlHUkFURV9PVVQKICAgIGFjdGlvbjogbWlncmF0ZWQtdm0tdG8KICAgIGVjczogKmVjcy1ob3N0CiAgIyBBVURJVF9WSVJUX1JFU09VUkNFIC0gUmVzb3VyY2UgYXNzaWdubWVudAogIC0gcmVjb3JkX3R5cGVzOiBWSVJUX1JFU09VUkNFCiAgICBhY3Rpb246IGFzc2lnbmVkLXZtLXJlc291cmNlCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IHJlc3JjCiAgICAgIHNlY29uZGFyeTogdm0KICAgICAgd2hhdDogdmlydHVhbC1tYWNoaW5lCiAgICBlY3M6ICplY3MtaG9zdAoKICAjIFVzZXJzcGFjZSBwcm9jZXNzIGV2ZW50cwoKICAjIEFVRElUX0NIR1JQX0lEIC0gVXNlciBzcGFjZSBncm91cCBJRCBjaGFuZ2VkCiAgLSByZWNvcmRfdHlwZXM6IENIR1JQX0lECiAgICBhY3Rpb246IGNoYW5nZWQtZ3JvdXAKICAgIGVjczoKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBjaGFuZ2UKICAjIEFVRElUX0NIVVNFUl9JRCAtIENoYW5nZWQgdXNlciBJRCBzdXBwbGVtZW50YWwgZGF0YQogIC0gcmVjb3JkX3R5cGVzOiBDSFVTRVJfSUQKICAgIGFjdGlvbjogY2hhbmdlZC11c2VyLWlkCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogY2hhbmdlCiAgIyBBVURJVF9URVNUIC0gVXNlZCBmb3IgdGVzdCBzdWNjZXNzIG1lc3NhZ2VzCiAgLSByZWNvcmRfdHlwZXM6IFRFU1QKICAgIGFjdGlvbjogc2VudC10ZXN0CiAgICBlY3M6ICplY3MtcHJvY2VzcwogICMgQVVESVRfVFJVU1RFRF9BUFAgLSBUcnVzdGVkIGFwcCBtc2cgLSBmcmVlc3R5bGUgdGV4dAogIC0gcmVjb3JkX3R5cGVzOiBUUlVTVEVEX0FQUAogICAgYWN0aW9uOiB1bmtub3duCiAgICBlY3M6ICplY3MtcHJvY2VzcwogICMgQVVESVRfVVNFUl9DTUQgLSBVc2VyIHNoZWxsIGNvbW1hbmQgYW5kIGFyZ3MKICAtIHJlY29yZF90eXBlczogVVNFUl9DTUQKICAgIGFjdGlvbjogcmFuLWNvbW1hbmQKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogY21kCiAgICAgIHdoYXQ6IHByb2Nlc3MKICAgIGRlc2NyaXB0aW9uOiA+CiAgICAgIFRoZXNlIG1lc3NhZ2VzIGFyZSBmcm9tIHVzZXItc3BhY2UgYXBwcywgbGlrZSBzdWRvLCB0aGF0IGxvZyBjb21tYW5kcwogICAgICBiZWluZyBydW4gYnkgYSB1c2VyLiBUaGUgdWlkIGNvbnRhaW5lZCBpbiB0aGVzZSBtZXNzYWdlcyBpcyB1c2VyJ3MgVUlEIGF0CiAgICAgIHRoZSB0aW1lIHRoZSBjb21tYW5kIHdhcyBydW4uIEl0IGlzIG5vdCB0aGUgInRhcmdldCIgVUlEIHVzZWQgdG8gcnVuIHRoZQogICAgICBjb21tYW5kLCB3aGljaCBpcyBub3JtYWxseSByb290LgogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IHN0YXJ0CgogICMgSG9zdC1sZXZlbCBldmVudHMKCiAgIyBBVURJVF9TWVNURU1fQk9PVCAtIFN5c3RlbSBib290CiAgLSByZWNvcmRfdHlwZXM6IFNZU1RFTV9CT09UCiAgICBhY3Rpb246IGJvb3RlZC1zeXN0ZW0KICAgIG9iamVjdDoKICAgICAgd2hhdDogc3lzdGVtCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWhvc3QKICAgICAgdHlwZTogc3RhcnQKICAjIEFVRElUX1NZU1RFTV9SVU5MRVZFTCAtIFN5c3RlbSBydW5sZXZlbCBjaGFuZ2UKICAtIHJlY29yZF90eXBlczogU1lTVEVNX1JVTkxFVkVMCiAgICBhY3Rpb246IGNoYW5nZWQtdG8tcnVubGV2ZWwKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogbmV3LWxldmVsCiAgICAgIHdoYXQ6IHN5c3RlbQogICAgZWNzOgogICAgICA8PDogKmVjcy1ob3N0CiAgICAgIHR5cGU6IGNoYW5nZQogICMgQVVESVRfU1lTVEVNX1NIVVRET1dOIC0gU3lzdGVtIHNodXRkb3duCiAgLSByZWNvcmRfdHlwZXM6IFNZU1RFTV9TSFVURE9XTgogICAgYWN0aW9uOiBzaHV0ZG93bi1zeXN0ZW0KICAgIG9iamVjdDoKICAgICAgd2hhdDogc3lzdGVtCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWhvc3QKICAgICAgdHlwZTogZW5kCgogICMgU2VydmljZS1sZXZlbCBldmVudHMKCiAgIyBBVURJVF9TRVJWSUNFX1NUQVJUIC0gU2VydmljZSAoZGFlbW9uKSBzdGFydAogIC0gcmVjb3JkX3R5cGVzOiBTRVJWSUNFX1NUQVJUCiAgICBhY3Rpb246IHN0YXJ0ZWQtc2VydmljZQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiB1bml0CiAgICAgIHdoYXQ6IHNlcnZpY2UKICAgIGVjczoKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBzdGFydAogICMgQVVESVRfU0VSVklDRV9TVE9QIC0gU2VydmljZSAoZGFlbW9uKSBzdG9wCiAgLSByZWNvcmRfdHlwZXM6IFNFUlZJQ0VfU1RPUAogICAgYWN0aW9uOiBzdG9wcGVkLXNlcnZpY2UKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogdW5pdAogICAgICB3aGF0OiBzZXJ2aWNlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogc3RvcAoKICAjIEF1ZGl0ZCBpbnRlcm5hbCBldmVudHMKCiAgIyBBVURJVF9DT05GSUdfQ0hBTkdFIC0gQXVkaXQgc3lzdGVtIGNvbmZpZ3VyYXRpb24gY2hhbmdlCiAgLSByZWNvcmRfdHlwZXM6IENPTkZJR19DSEFOR0UKICAgIGFjdGlvbjogY2hhbmdlZC1hdWRpdC1jb25maWd1cmF0aW9uCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6CiAgICAgICAgW29wLCBrZXksIGF1ZGl0X2VuYWJsZWQsIGF1ZGl0X3BpZCwgYXVkaXRfYmFja2xvZ19saW1pdCwgYXVkaXRfZmFpbHVyZV0KICAgICAgd2hhdDogYXVkaXQtY29uZmlnCiAgICBlY3M6CiAgICAgIGNhdGVnb3J5OiBbcHJvY2VzcywgY29uZmlndXJhdGlvbl0KICAgICAgdHlwZTogY2hhbmdlCiAgIyBBVURJVF9EQUVNT05fQUJPUlQgLSBEYWVtb24gZXJyb3Igc3RvcCByZWNvcmQKICAtIHJlY29yZF90eXBlczogREFFTU9OX0FCT1JUCiAgICBhY3Rpb246IGFib3J0ZWQtYXVkaXRkLXN0YXJ0dXAKICAgIG9iamVjdDoKICAgICAgd2hhdDogc2VydmljZQogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IHN0b3AKICAjIEFVRElUX0RBRU1PTl9BQ0NFUFQgLSBBdWRpdGQgYWNjZXB0ZWQgcmVtb3RlIGNvbm5lY3Rpb24KICAtIHJlY29yZF90eXBlczogREFFTU9OX0FDQ0VQVAogICAgYWN0aW9uOiByZW1vdGUtYXVkaXQtY29ubmVjdGVkCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNlcnZpY2UKICAgIGVjczoKICAgICAgPDw6ICplY3MtbmV0d29yawogICAgICB0eXBlOgogICAgICAgIC0gY29ubmVjdGlvbgogICAgICAgIC0gc3RhcnQKICAjIEFVRElUX0RBRU1PTl9DTE9TRSAtIEF1ZGl0ZCBjbG9zZWQgcmVtb3RlIGNvbm5lY3Rpb24KICAtIHJlY29yZF90eXBlczogREFFTU9OX0NMT1NFCiAgICBhY3Rpb246IHJlbW90ZS1hdWRpdC1kaXNjb25uZWN0ZWQKICAgIG9iamVjdDoKICAgICAgd2hhdDogc2VydmljZQogICAgZWNzOgogICAgICA8PDogKmVjcy1uZXR3b3JrCiAgICAgIHR5cGU6CiAgICAgICAgLSBjb25uZWN0aW9uCiAgICAgICAgLSBzdGFydAogICMgQVVESVRfREFFTU9OX0NPTkZJRyAtIERhZW1vbiBjb25maWcgY2hhbmdlCiAgLSByZWNvcmRfdHlwZXM6IERBRU1PTl9DT05GSUcKICAgIGFjdGlvbjogY2hhbmdlZC1hdWRpdGQtY29uZmlndXJhdGlvbgogICAgb2JqZWN0OgogICAgICB3aGF0OiBzZXJ2aWNlCiAgICBlY3M6CiAgICAgIGNhdGVnb3J5OiBbcHJvY2VzcywgY29uZmlndXJhdGlvbl0KICAgICAgdHlwZTogY2hhbmdlCiAgIyBBVURJVF9EQUVNT05fRU5EIC0gRGFlbW9uIG5vcm1hbCBzdG9wIHJlY29yZAogIC0gcmVjb3JkX3R5cGVzOiBEQUVNT05fRU5ECiAgICBhY3Rpb246IHNodXRkb3duLWF1ZGl0CiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNlcnZpY2UKICAgIGVjczoKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBzdG9wCiAgIyBBVURJVF9EQUVNT05fRVJSIC0gQXVkaXRkIGludGVybmFsIGVycm9yCiAgLSByZWNvcmRfdHlwZXM6IERBRU1PTl9FUlIKICAgIGFjdGlvbjogYXVkaXQtZXJyb3IKICAgIG9iamVjdDoKICAgICAgd2hhdDogc2VydmljZQogICAgZWNzOiAqZWNzLXByb2Nlc3MKICAjIEFVRElUX0RBRU1PTl9SRUNPTkZJRyAtIEF1ZGl0ZCBzaG91bGQgcmVjb25maWd1cmUKICAtIHJlY29yZF90eXBlczogREFFTU9OX1JFQ09ORklHCiAgICBhY3Rpb246IHJlY29uZmlndXJlZC1hdWRpdGQKICAgIG9iamVjdDoKICAgICAgd2hhdDogc2VydmljZQogICAgZWNzOgogICAgICBjYXRlZ29yeTogW3Byb2Nlc3MsIGNvbmZpZ3VyYXRpb25dCiAgICAgIHR5cGU6IGluZm8KICAjIEFVRElUX0RBRU1PTl9SRVNVTUUgLSBBdWRpdGQgc2hvdWxkIHJlc3VtZSBsb2dnaW5nCiAgLSByZWNvcmRfdHlwZXM6IERBRU1PTl9SRVNVTUUKICAgIGFjdGlvbjogcmVzdW1lZC1hdWRpdC1sb2dnaW5nCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNlcnZpY2UKICAgIGVjczoKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBjaGFuZ2UKICAjIEFVRElUX0RBRU1PTl9ST1RBVEUgLSBBdWRpdGQgc2hvdWxkIHJvdGF0ZSBsb2dzCiAgLSByZWNvcmRfdHlwZXM6IERBRU1PTl9ST1RBVEUKICAgIGFjdGlvbjogcm90YXRlZC1hdWRpdC1sb2dzCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNlcnZpY2UKICAgIGVjczoKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBjaGFuZ2UKICAjIEFVRElUX0RBRU1PTl9TVEFSVCAtIERhZW1vbiBzdGFydHVwIHJlY29yZAogIC0gcmVjb3JkX3R5cGVzOiBEQUVNT05fU1RBUlQKICAgIGFjdGlvbjogc3RhcnRlZC1hdWRpdAogICAgb2JqZWN0OgogICAgICB3aGF0OiBzZXJ2aWNlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogc3RhcnQKICAjIEFVRElUX0tFUk5FTCAtIEFzeW5jaHJvbm91cyBhdWRpdCByZWNvcmQuIE5PVCBBIFJFUVVFU1QuCiAgLSByZWNvcmRfdHlwZXM6IEtFUk5FTAogICAgYWN0aW9uOiBpbml0aWFsaXplZC1hdWRpdC1zdWJzeXN0ZW0KICAgIGVjczogKmVjcy1wcm9jZXNzCgogICMgQ29uZmlndXJhdGlvbiBjaGFuZ2UgZXZlbnRzCgogICMgQVVESVRfVVNZU19DT05GSUcgLSBVc2VyIHNwYWNlIHN5c3RlbSBjb25maWcgY2hhbmdlCiAgLSByZWNvcmRfdHlwZXM6IFVTWVNfQ09ORklHCiAgICBhY3Rpb246IGNoYW5nZWQtY29uZmlndXJhdGlvbgogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBvcAogICAgICB3aGF0OiBzeXN0ZW0KICAgIGVjczoKICAgICAgY2F0ZWdvcnk6IGNvbmZpZ3VyYXRpb24KICAgICAgdHlwZTogY2hhbmdlCiAgIyBBVURJVF9ORVRGSUxURVJfQ0ZHIC0gTmV0ZmlsdGVyIGNoYWluIG1vZGlmaWNhdGlvbnMKICAtIHJlY29yZF90eXBlczogTkVURklMVEVSX0NGRwogICAgYWN0aW9uOiBsb2FkZWQtZmlyZXdhbGwtcnVsZS10bwogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiB0YWJsZQogICAgICB3aGF0OiBmaXJld2FsbAogICAgZWNzOgogICAgICBjYXRlZ29yeTogY29uZmlndXJhdGlvbgogICAgICB0eXBlOiBjaGFuZ2UKICAjIEFVRElUX0ZFQVRVUkVfQ0hBTkdFIC0gYXVkaXQgbG9nIGxpc3RpbmcgZmVhdHVyZSBjaGFuZ2VzCiAgLSByZWNvcmRfdHlwZXM6IEZFQVRVUkVfQ0hBTkdFCiAgICBhY3Rpb246IGNoYW5nZWQtYXVkaXQtZmVhdHVyZQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBmZWF0dXJlCiAgICAgIHdoYXQ6IHN5c3RlbQogICAgZWNzOgogICAgICBjYXRlZ29yeTogY29uZmlndXJhdGlvbgogICAgICB0eXBlOiBjaGFuZ2UKICAjIEFVRElUX1JFUExBQ0UgLSBSZXBsYWNlIGF1ZGl0ZCBpZiB0aGlzIHBhY2tldCB1bmFuc3dlcmQKCiAgIyBUVFkgZXZlbnRzCgogIC0gcmVjb3JkX3R5cGVzOgogICAgICAjIEFVRElUX1RUWSAtIElucHV0IG9uIGFuIGFkbWluaXN0cmF0aXZlIFRUWQogICAgICAtIFRUWQogICAgICAjIEFVRElUX1VTRVJfVFRZIC0gTm9uLUlDQU5PTiBUVFkgaW5wdXQgbWVhbmluZwogICAgICAtIFVTRVJfVFRZCiAgICBhY3Rpb246IHR5cGVkCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGRhdGEKICAgICAgd2hhdDoga2V5c3Ryb2tlcwogICAgaG93OiBbY29tbSwgZXhlXQoKICAjIFBvbGljeSBldmVudHMKCiAgIyBBVURJVF9BVkMgLSBTRSBMaW51eCBhdmMgZGVuaWFsIG9yIGdyYW50IChzZWxpbnV4KQogIC0gcmVjb3JkX3R5cGVzOiBBVkMKICAgIGFjdGlvbjogdmlvbGF0ZWQtc2VsaW51eC1wb2xpY3kKICAgIHN1YmplY3Q6CiAgICAgIHByaW1hcnk6IHNjb250ZXh0CiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IHRjb250ZXh0CiAgICAgIHNlY29uZGFyeTogdGNsYXNzCiAgICBoYXNfZmllbGRzOgogICAgICAtIHNlcmVzdWx0CiAgIyBBVURJVF9BVkMgLSBTRSBMaW51eCBhdmMgZGVuaWFsIG9yIGdyYW50IChhcHBhcm1vcikKICAtIHJlY29yZF90eXBlczogQVZDCiAgICBhY3Rpb246IHZpb2xhdGVkLWFwcGFybW9yLXBvbGljeQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBvcGVyYXRpb24KICAgICAgc2Vjb25kYXJ5OiBbcmVxdWVzdGVkX21hc2ssIGRlbmllZF9tYXNrLCBjYXBuYW1lXQogICAgICB3aGF0OiBwb2xpY3kKICAgIGhhc19maWVsZHM6CiAgICAgIC0gYXBwYXJtb3IKICAjIEFVRElUX0ZTX1JFTEFCRUwgLSBGaWxlc3lzdGVtIHJlbGFiZWxlZAogIC0gcmVjb3JkX3R5cGVzOiBGU19SRUxBQkVMCiAgICBhY3Rpb246IHJlbGFiZWxlZC1maWxlc3lzdGVtCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IG1hYy1jb25maWcKICAjIEFVRElUX0xBQkVMX0xFVkVMX0NIQU5HRSAtIE9iamVjdCdzIGxldmVsIHdhcyBjaGFuZ2VkCiAgLSByZWNvcmRfdHlwZXM6IExBQkVMX0xFVkVMX0NIQU5HRQogICAgYWN0aW9uOiBtb2RpZmllZC1sZXZlbC1vZgogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBwcmludGVyCiAgICAgIHdoYXQ6IHByaW50ZXIKICAjIEFVRElUX0xBQkVMX09WRVJSSURFIC0gQWRtaW4gaXMgb3ZlcnJpZGluZyBhIGxhYmVsCiAgLSByZWNvcmRfdHlwZXM6IExBQkVMX09WRVJSSURFCiAgICBhY3Rpb246IG92ZXJyb2RlLWxhYmVsLW9mCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IG1hYy1jb25maWcKICAjIEFVRElUX01BQ19DSEVDSyAtIFVzZXIgc3BhY2UgTUFDIGRlY2lzaW9uIHJlc3VsdHMKICAtIHJlY29yZF90eXBlczogTUFDX0NIRUNLCiAgICBhY3Rpb246IG1hYy1wZXJtaXNzaW9uCiAgIyBBVURJVF9NQUNfQ09ORklHX0NIQU5HRSAtIENoYW5nZXMgdG8gYm9vbGVhbnMKICAtIHJlY29yZF90eXBlczogTUFDX0NPTkZJR19DSEFOR0UKICAgIGFjdGlvbjogY2hhbmdlZC1zZWxpbnV4LWJvb2xlYW4KICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogYm9vbAogICAgICB3aGF0OiBtYWMtY29uZmlnCiAgICBlY3M6CiAgICAgIGNhdGVnb3J5OiBjb25maWd1cmF0aW9uCiAgICAgIHR5cGU6IGNoYW5nZQogICMgQVVESVRfTUFDX1BPTElDWV9MT0FEIC0gUG9saWN5IGZpbGUgbG9hZAogIC0gcmVjb3JkX3R5cGVzOiBNQUNfUE9MSUNZX0xPQUQKICAgIGFjdGlvbjogbG9hZGVkLXNlbGludXgtcG9saWN5CiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IG1hYy1jb25maWcKICAgIGVjczoKICAgICAgY2F0ZWdvcnk6IGNvbmZpZ3VyYXRpb24KICAgICAgdHlwZTogYWNjZXNzCiAgIyBBVURJVF9NQUNfU1RBVFVTIC0gQ2hhbmdlZCBlbmZvcmNpbmcscGVybWlzc2l2ZSxvZmYKICAtIHJlY29yZF90eXBlczogTUFDX1NUQVRVUwogICAgYWN0aW9uOiBjaGFuZ2VkLXNlbGludXgtZW5mb3JjZW1lbnQKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogZW5mb3JjaW5nCiAgICAgIHdoYXQ6IG1hYy1jb25maWcKICAgIGVjczoKICAgICAgY2F0ZWdvcnk6IGNvbmZpZ3VyYXRpb24KICAgICAgdHlwZTogY2hhbmdlCiAgIyBBVURJVF9VU0VSX0FWQyAtIFVzZXIgc3BhY2UgYXZjIG1lc3NhZ2UKICAtIHJlY29yZF90eXBlczogVVNFUl9BVkMKICAgIGFjdGlvbjogYWNjZXNzLXBlcm1pc3Npb24KICAjIEFVRElUX1VTRVJfTUFDX0NPTkZJR19DSEFOR0UgLSBDaGFuZ2UgbWFkZSB0byBNQUMgcG9saWN5CiAgLSByZWNvcmRfdHlwZXM6IFVTRVJfTUFDX0NPTkZJR19DSEFOR0UKICAgIGFjdGlvbjogY2hhbmdlZC1tYWMtY29uZmlndXJhdGlvbgogICAgb2JqZWN0OgogICAgICB3aGF0OiBtYWMtY29uZmlnCiAgICBlY3M6CiAgICAgIGNhdGVnb3J5OiBjb25maWd1cmF0aW9uCiAgICAgIHR5cGU6IGNoYW5nZQogICMgQVVESVRfVVNFUl9NQUNfUE9MSUNZX0xPQUQgLSBVc2Vyc3BjIGRhZW1vbiBsb2FkZWQgcG9saWMKICAtIHJlY29yZF90eXBlczogVVNFUl9NQUNfUE9MSUNZX0xPQUQKICAgIGFjdGlvbjogbG9hZGVkLW1hYy1wb2xpY3kKICAgIG9iamVjdDoKICAgICAgd2hhdDogbWFjLWNvbmZpZwogICAgZWNzOgogICAgICBjYXRlZ29yeTogY29uZmlndXJhdGlvbgogICAgICB0eXBlOiBhY2Nlc3MKICAjIEFVRElUX1VTRVJfU0VMSU5VWF9FUlIgLSBTRSBMaW51eCB1c2VyIHNwYWNlIGVycm9yCiAgLSByZWNvcmRfdHlwZXM6IFVTRVJfU0VMSU5VWF9FUlIKICAgIGFjdGlvbjogYWNjZXNzLWVycm9yCiAgIyBBVURJVF9TRUNDT01QIC0gU2VjdXJlIENvbXB1dGluZyBldmVudAogIC0gcmVjb3JkX3R5cGVzOiBTRUNDT01QCiAgICBhY3Rpb246IHZpb2xhdGVkLXNlY2NvbXAtcG9saWN5CiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IHN5c2NhbGwKICAgICAgd2hhdDogcHJvY2VzcwogICMgQVVESVRfU0VMSU5VWF9FUlIgLSBJbnRlcm5hbCBTRSBMaW51eCBFcnJvcnMKICAtIGFjdGlvbjogY2F1c2VkLW1hYy1wb2xpY3ktZXJyb3IKICAgIG9iamVjdDoKICAgICAgd2hhdDogc3lzdGVtCiAgICByZWNvcmRfdHlwZXM6IFNFTElOVVhfRVJSCiAgIyBBVURJVF9BUFBBUk1PUl9BTExPV0VECiAgIyBBVURJVF9BUFBBUk1PUl9ERU5JRUQKICAjIEFVRElUX0FQUEFSTU9SX0VSUk9SCiAgIyBBVURJVF9BVkNfUEFUSCAtIGRlbnRyeSwgdmZzbW91bnQgcGFpciBmcm9tIGF2YwogICMgQVVESVRfQVBQQVJNT1JfQVVESVQKICAjIEFVRElUX0FQUEFSTU9SX0hJTlQKICAjIEFVRElUX0FQUEFSTU9SX1NUQVRVUwogICMgQVVESVRfQVBQQVJNT1JfRVJST1IKICAjIEFVRElUX0RFVl9BTExPQyAtIERldmljZSB3YXMgYWxsb2NhdGVkCiAgIyBBVURJVF9ERVZfREVBTExPQyAtIERldmljZSB3YXMgZGVhbGxvY2F0ZWQKICAjIEFVRElUX01BQ19VTkxCTF9BTExPVyAtIE5ldExhYmVsOiBhbGxvdyB1bmxhYmVsZWQgdHJhZmZpYwogICMgQVVESVRfTUFDX0NJUFNPVjRfQUREIC0gTmV0TGFiZWw6IGFkZCBDSVBTT3Y0IERPSSBlbnRyeQogICMgQVVESVRfTUFDX0NJUFNPVjRfREVMIC0gTmV0TGFiZWw6IGRlbCBDSVBTT3Y0IERPSSBlbnRyeQogICMgQVVESVRfTUFDX01BUF9BREQgLSBOZXRMYWJlbDogYWRkIExTTSBkb21haW4gbWFwcGluZwogICMgQVVESVRfTUFDX01BUF9ERUwgLSBOZXRMYWJlbDogZGVsIExTTSBkb21haW4gbWFwcGluZwogICMgQVVESVRfTUFDX0lQU0VDX0VWRU5UIC0gQXVkaXQgYW4gSVBTZWMgZXZlbnQKICAjIEFVRElUX01BQ19VTkxCTF9TVENBREQgLSBOZXRMYWJlbDogYWRkIGEgc3RhdGljIGxhYmVsCiAgIyBBVURJVF9NQUNfVU5MQkxfU1RDREVMIC0gTmV0TGFiZWw6IGRlbCBhIHN0YXRpYyBsYWJlbAogICMgQVVESVRfTUFDX0NBTElQU09fQUREIC0gTmV0TGFiZWw6IGFkZCBDQUxJUFNPIERPSSBlbnRyeQogICMgQVVESVRfTUFDX0NBTElQU09fREVMIC0gTmV0TGFiZWw6IGRlbCBDQUxJUFNPIERPSSBlbnRyeQogICMgQVVESVRfVVNFUl9MQUJFTEVEX0VYUE9SVCAtIE9iamVjdCBleHBvcnRlZCB3aXRoIGxhYmVsCiAgIyBBVURJVF9VU0VSX1VOTEFCRUxFRF9FWFBPUlQgLSBPYmplY3QgZXhwb3J0ZWQgd2l0aG91dCBsYWJlbAoKICAjIENyeXB0byBldmVudHMKCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgYWN0aW9uOiBuZWdvdGlhdGVkLWNyeXB0by1rZXkKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogZnAKICAgICAgc2Vjb25kYXJ5OiBbYWRkciwgaG9zdG5hbWVdCiAgICAgIHdoYXQ6IHVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBDUllQVE9fS0VZX1VTRVIKICAgIHNvdXJjZV9pcDogW2FkZHJdCiAgICBlY3M6ICplY3MtcHJvY2VzcwogIC0gYWN0aW9uOiBjcnlwdG8tb2ZmaWNlci1sb2dnZWQtaW4KICAgIHJlY29yZF90eXBlczogQ1JZUFRPX0xPR0lOCiAgLSBhY3Rpb246IGNyeXB0by1vZmZpY2VyLWxvZ2dlZC1vdXQKICAgIHJlY29yZF90eXBlczogQ1JZUFRPX0xPR09VVAogICAgZWNzOiAqZWNzLXByb2Nlc3MKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICBhY3Rpb246IHN0YXJ0ZWQtY3J5cHRvLXNlc3Npb24KICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogYWRkcgogICAgICBzZWNvbmRhcnk6IFtycG9ydF0KICAgIHJlY29yZF90eXBlczogQ1JZUFRPX1NFU1NJT04KICAgIHNvdXJjZV9pcDogW2FkZHJdCiAgICBlY3M6ICplY3MtcHJvY2VzcwogIC0gYWN0aW9uOiBhY2Nlc3MtcmVzdWx0CiAgICByZWNvcmRfdHlwZXM6IERBQ19DSEVDSwoKICAjIEFub21hbGllcwoKICAjIEFVRElUX0FOT01fQUJFTkQgLSBQcm9jZXNzIGVuZGVkIGFibm9ybWFsbHkKICAtIHJlY29yZF90eXBlczogQU5PTV9BQkVORAogICAgYWN0aW9uOiBjcmFzaGVkLXByb2dyYW0KICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogW2NvbW0sIGV4ZV0KICAgICAgc2Vjb25kYXJ5OiBwaWQKICAgICAgd2hhdDogcHJvY2VzcwogICAgaG93OiBzaWcKICAgIGVjczoKICAgICAgIyBjb25zaWRlciBhZGRpbmcgYW4gYW5vbWFseSBjYXRlZ29yeSB3aGVuIHdlIGludHJvZHVjZQogICAgICAjIHRvIEVDUwogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IGVuZAogICMgQVVESVRfQU5PTV9FWEVDIC0gRXhlY3V0aW9uIG9mIGZpbGUKICAtIHJlY29yZF90eXBlczogQU5PTV9FWEVDCiAgICBhY3Rpb246IGF0dGVtcHRlZC1leGVjdXRpb24tb2YtZm9yYmlkZGVuLXByb2dyYW0KICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogY21kCiAgICAgIHdoYXQ6IHByb2Nlc3MKICAgIGhvdzogdGVybWluYWwKICAgIGVjczoKICAgICAgIyBjb25zaWRlciBhZGRpbmcgYW4gYW5vbWFseSBjYXRlZ29yeSB3aGVuIHdlIGludHJvZHVjZQogICAgICAjIHRvIEVDUwogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IHN0YXJ0CiAgIyBBVURJVF9BTk9NX0xJTksgLSBTdXNwaWNpb3VzIHVzZSBvZiBmaWxlIGxpbmtzCiAgLSByZWNvcmRfdHlwZXM6IEFOT01fTElOSwogICAgYWN0aW9uOiB1c2VkLXN1c3BpY2lvdXMtbGluawogICMgQVVESVRfQU5PTV9MT0dJTl9GQUlMVVJFUyAtIEZhaWxlZCBsb2dpbiBsaW1pdCByZWFjaGVkCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBBTk9NX0xPR0lOX0ZBSUxVUkVTCiAgICBhY3Rpb246IGZhaWxlZC1sb2ctaW4tdG9vLW1hbnktdGltZXMtdG8KICAjIEFVRElUX0FOT01fTE9HSU5fTE9DQVRJT04gLSBMb2dpbiBmcm9tIGZvcmJpZGRlbiBsb2NhdGlvbgogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogQU5PTV9MT0dJTl9MT0NBVElPTgogICAgYWN0aW9uOiBhdHRlbXB0ZWQtbG9nLWluLWZyb20tdW51c3VhbC1wbGFjZS10bwogICMgQVVESVRfQU5PTV9MT0dJTl9TRVNTSU9OUyAtIE1heCBjb25jdXJyZW50IHNlc3Npb25zIHJlYWNoZWQKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IEFOT01fTE9HSU5fU0VTU0lPTlMKICAgIGFjdGlvbjogb3BlbmVkLXRvby1tYW55LXNlc3Npb25zLXRvCiAgIyBBVURJVF9BTk9NX0xPR0lOX1RJTUUgLSBMb2dpbiBhdHRlbXB0ZWQgYXQgYmFkIHRpbWUKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IEFOT01fTE9HSU5fVElNRQogICAgYWN0aW9uOiBhdHRlbXB0ZWQtbG9nLWluLWR1cmluZy11bnVzdWFsLWhvdXItdG8KICAjIEFVRElUX0FOT01fUFJPTUlTQ1VPVVMgLSBEZXZpY2UgY2hhbmdlZCBwcm9taXNjdW91cyBtb2RlCiAgLSByZWNvcmRfdHlwZXM6IEFOT01fUFJPTUlTQ1VPVVMKICAgIGFjdGlvbjogY2hhbmdlZC1wcm9taXNjdW91cy1tb2RlLW9uLWRldmljZSAjIENvdWxkIGJlIGVudGVyZWQgb3IgZXhpdGVkIGJhc2VkIG9uIHByb20gZmllbGQuCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGRldgogICAgICB3aGF0OiBuZXR3b3JrLWRldmljZQogICMgQVVESVRfQU5PTV9SQkFDX0lOVEVHUklUWV9GQUlMIC0gUkJBQyBmaWxlIGludGVncml0eSBmYWlsdXJlCiAgLSByZWNvcmRfdHlwZXM6IEFOT01fUkJBQ19JTlRFR1JJVFlfRkFJTAogICAgYWN0aW9uOiB0ZXN0ZWQtZmlsZS1zeXN0ZW0taW50ZWdyaXR5LW9mCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGhvc3RuYW1lCiAgICAgIHdoYXQ6IGZpbGVzeXN0ZW0KICAjIEFVRElUX0FOT01fTE9HSU5fQUNDVCAtIExvZ2luIGF0dGVtcHRlZCB0byB3YXRjaGVkIGFjY3QKICAjIEFVRElUX0FOT01fTUFYX0RBQyAtIE1heCBEQUMgZmFpbHVyZXMgcmVhY2hlZAogICMgQVVESVRfQU5PTV9NQVhfTUFDIC0gTWF4IE1BQyBmYWlsdXJlcyByZWFjaGVkCiAgIyBBVURJVF9BTk9NX0FNVFVfRkFJTCAtIEFNVFUgZmFpbHVyZQogICMgQVVESVRfQU5PTV9SQkFDX0ZBSUwgLSBSQkFDIHNlbGYgdGVzdCBmYWlsdXJlCiAgIyBBVURJVF9BTk9NX0NSWVBUT19GQUlMIC0gQ3J5cHRvIHN5c3RlbSB0ZXN0IGZhaWx1cmUKICAjIEFVRElUX0FOT01fTUtfRVhFIC0gTWFrZSBhbiBleGVjdXRhYmxlCiAgIyBBVURJVF9BTk9NX0FDQ0VTU19GUyAtIEFjY2VzcyBvZiBmaWxlIG9yIGRpcgogICMgQVVESVRfQU5PTV9BRERfQUNDVCAtIEFkZGluZyBhbiBhY2N0CiAgIyBBVURJVF9BTk9NX0RFTF9BQ0NUIC0gRGVsZXRpbmcgYW4gYWNjdAogICMgQVVESVRfQU5PTV9NT0RfQUNDVCAtIENoYW5naW5nIGFuIGFjY3QKICAjIEFVRElUX0FOT01fUk9PVF9UUkFOUyAtIFVzZXIgYmVjYW1lIHJvb3QKICAjIEFVRElUX0FOT01fTE9HSU5fU0VSVklDRSAtIFNlcnZpY2UgYWNjdCBhdHRlbXB0ZWQgbG9naW4KCiAgIyBBbm9tYWx5IHJlc3BvbnNlcwoKICAjIEFVRElUX1JFU1BfQU5PTUFMWSAtIEFub21hbHkgbm90IHJlYWN0ZWQgdG8KICAjIEFVRElUX1JFU1BfQUxFUlQgLSBBbGVydCBlbWFpbCB3YXMgc2VudAogICMgQVVESVRfUkVTUF9LSUxMX1BST0MgLSBLaWxsIHByb2dyYW0KICAjIEFVRElUX1JFU1BfVEVSTV9BQ0NFU1MgLSBUZXJtaW5hdGUgc2Vzc2lvbgogICMgQVVESVRfUkVTUF9BQ0NUX1JFTU9URSAtIEFjY3QgbG9ja2VkIGZyb20gcmVtb3RlIGFjY2VzcwogICMgQVVESVRfUkVTUF9BQ0NUX0xPQ0tfVElNRUQgLSBVc2VyIGFjY3QgbG9ja2VkIGZvciB0aW1lCiAgIyBBVURJVF9SRVNQX0FDQ1RfVU5MT0NLX1RJTUVEIC0gVXNlciBhY2N0IHVubG9ja2VkIGZyb20gdGltZQogICMgQVVESVRfUkVTUF9BQ0NUX0xPQ0sgLSBVc2VyIGFjY3Qgd2FzIGxvY2tlZAogICMgQVVESVRfUkVTUF9URVJNX0xPQ0sgLSBUZXJtaW5hbCB3YXMgbG9ja2VkCiAgIyBBVURJVF9SRVNQX1NFQk9PTCAtIFNldCBhbiBTRSBMaW51eCBib29sZWFuCiAgIyBBVURJVF9SRVNQX0VYRUMgLSBFeGVjdXRlIGEgc2NyaXB0CiAgIyBBVURJVF9SRVNQX1NJTkdMRSAtIEdvIHRvIHNpbmdsZSB1c2VyIG1vZGUKICAjIEFVRElUX1JFU1BfSEFMVCAtIHRha2UgdGhlIHN5c3RlbSBkb3duCiAgIyBBVURJVF9SRVNQX09SSUdJTl9CTE9DSyAtIEFkZHJlc3MgYmxvY2tlZCBieSBpcHRhYmxlcwogICMgQVVESVRfUkVTUF9PUklHSU5fQkxPQ0tfVElNRUQgLSBBZGRyZXNzIGJsb2NrZWQgZm9yIHRpbWUKCiAgIyBBdWRpdCBydWxlIGV2ZW50cwoKICAjIEFVRElUX1NZU0NBTEwgLSBTeXNjYWxsIGV2ZW50CiAgIyBBVURJVF9QQVRIIC0gRmlsZW5hbWUgcGF0aCBpbmZvcm1hdGlvbgogICMgQVVESVRfSVBDIC0gSVBDIHJlY29yZAogICMgQVVESVRfU09DS0VUQ0FMTCAtIHN5c19zb2NrZXRjYWxsIGFyZ3VtZW50cwogICMgQVVESVRfU09DS0FERFIgLSBzb2NrYWRkciBjb3BpZWQgYXMgc3lzY2FsbCBhcmcKICAjIEFVRElUX0NXRCAtIEN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkKICAjIEFVRElUX0VYRUNWRSAtIGV4ZWN2ZSBhcmd1bWVudHMKICAjIEFVRElUX0lQQ19TRVRfUEVSTSAtIElQQyBuZXcgcGVybWlzc2lvbnMgcmVjb3JkIHR5cGUKICAjIEFVRElUX01RX09QRU4gLSBQT1NJWCBNUSBvcGVuIHJlY29yZCB0eXBlCiAgIyBBVURJVF9NUV9TRU5EUkVDVi0gUE9TSVggTVEgc2VuZC9yZWNlaXZlIHJlY29yZCB0eXBlCiAgIyBBVURJVF9NUV9OT1RJRlkgLSBQT1NJWCBNUSBub3RpZnkgcmVjb3JkIHR5cGUKICAjIEFVRElUX01RX0dFVFNFVEFUVFIgLSBQT1NJWCBNUSBnZXQvc2V0IGF0dHJpYnV0ZSByZWNvcmQgdHlwZQogICMgQVVESVRfRkRfUEFJUiAtIGF1ZGl0IHJlY29yZCBmb3IgcGlwZS9zb2NrZXRwYWlyCiAgIyBBVURJVF9PQkpfUElEIC0gcHRyYWNlIHRhcmdldAogICMgQVVESVRfQlBSTV9GQ0FQUyAtIEluZm9ybWF0aW9uIGFib3V0IGZjYXBzIGluY3JlYXNpbmcgcGVybXMKICAjIEFVRElUX0NBUFNFVCAtIFJlY29yZCBzaG93aW5nIGFyZ3VtZW50IHRvIHN5c19jYXBzZXQKICAjIEFVRElUX01NQVAgLSBSZWNvcmQgc2hvd2luZyBkZXNjcmlwdG9yIGFuZCBmbGFncyBpbiBtbWFwCiAgIyBBVURJVF9ORVRGSUxURVJfUEtUIC0gUGFja2V0cyB0cmF2ZXJzaW5nIG5ldGZpbHRlciBjaGFpbnMKCiAgIyBJbnRlZ3JpdHkgY2hlY2tzCgogICMgQVVESVRfSU5URUdSSVRZX0RBVEEgLSBEYXRhIGludGVncml0eSB2ZXJpZmljYXRpb24KICAjIEFVRElUX0lOVEVHUklUWV9NRVRBREFUQSAtIE1ldGFkYXRhIGludGVncml0eSB2ZXJpZmljYXRpb24KICAjIEFVRElUX0lOVEVHUklUWV9TVEFUVVMgLSBJbnRlZ3JpdHkgZW5hYmxlIHN0YXR1cwogICMgQVVESVRfSU5URUdSSVRZX0hBU0ggLSBJbnRlZ3JpdHkgSEFTSCB0eXBlCiAgIyBBVURJVF9JTlRFR1JJVFlfUENSIC0gUENSIGludmFsaWRhdGlvbiBtc2dzCiAgIyBBVURJVF9JTlRFR1JJVFlfUlVMRSAtIFBvbGljeSBydWxlCgogICMgVmFyaW91cwoKICAjIEFVRElUX1VTRVIgLSBNZXNzYWdlIGZyb20gdXNlcnNwYWNlIC0tIGRlcHJlY2F0ZWQKICAtIHJlY29yZF90eXBlczogVVNFUgogICAgYWN0aW9uOiBzZW50LW1lc3NhZ2UKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogYWRkcgoKICAjIEFVRElUX1NPRlRXQVJFX1VQREFURSAtIFBhY2thZ2UgbWFuYWdlbWVudAogIC0gcmVjb3JkX3R5cGVzOiBTT0ZUV0FSRV9VUERBVEUKICAgIGFjdGlvbjogcGFja2FnZS11cGRhdGVkCiAgICBlY3M6CiAgICAgIGNhdGVnb3J5OiBwYWNrYWdlCiAgICAgIHR5cGU6IGluZm8K") + value, _ = base64.StdEncoding.DecodeString("LS0tCiMgTWFjcm9zIGRlY2xhcmVzIHNvbWUgWUFNTCBhbmNob3JzIHRoYXQgY2FuIGJlIHJlZmVyZW5jZWQgZm9yIHNvbWUgY29tbW9uCiMgb2JqZWN0IHR5cGUgbm9ybWFsaXphdGlvbnMgbGlrZSB1c2VyLXNlc3Npb24sIHNvY2tldCwgb3IgcHJvY2Vzcy4KbWFjcm9zOgogIC0gJmRlZmF1bHRzCiAgICBzdWJqZWN0OgogICAgICBwcmltYXJ5OiBhdWlkCiAgICAgIHNlY29uZGFyeTogdWlkCiAgICBob3c6IFtleGUsIGNvbW1dCgogIC0gJm1hY3JvLXVzZXItc2Vzc2lvbgogICAgc3ViamVjdDoKICAgICAgcHJpbWFyeTogYXVpZAogICAgICBzZWNvbmRhcnk6IFthY2N0LCBpZCwgdWlkXQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiB0ZXJtaW5hbAogICAgICBzZWNvbmRhcnk6IFthZGRyLCBob3N0bmFtZV0KICAgICAgd2hhdDogdXNlci1zZXNzaW9uCiAgICBob3c6IFtleGUsIHRlcm1pbmFsXQoKICAtICZtYWNyby1zb2NrZXQKICAgIDw8OiAqZGVmYXVsdHMKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogW2FkZHIsIHBhdGhdCiAgICAgIHNlY29uZGFyeTogcG9ydAogICAgICB3aGF0OiBzb2NrZXQKCiAgLSAmbWFjcm8tcHJvY2VzcwogICAgPDw6ICpkZWZhdWx0cwogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBbY21kLCBleGUsIGNvbW1dCiAgICAgIHNlY29uZGFyeTogcGlkCiAgICAgIHdoYXQ6IHByb2Nlc3MKICAgIGhvdzogdGVybWluYWwKCiAgLSAmZWNzLWlhbQogICAgY2F0ZWdvcnk6IGlhbQogICAgdHlwZTogaW5mbwoKICAtICZlY3MtYXV0aAogICAgY2F0ZWdvcnk6IGF1dGhlbnRpY2F0aW9uCiAgICB0eXBlOiBpbmZvCiAgICBtYXBwaW5nczoKICAgICAgLSBmcm9tOiBzdWJqZWN0LnByaW1hcnkKICAgICAgICB0bzogdXNlcgogICAgICAtIGZyb206IHN1YmplY3Quc2Vjb25kYXJ5CiAgICAgICAgdG86IHVzZXIuZWZmZWN0aXZlCgogIC0gJmVjcy1zZXNzaW9uCiAgICBjYXRlZ29yeTogc2Vzc2lvbgogICAgdHlwZTogaW5mbwogICAgbWFwcGluZ3M6CiAgICAgIC0gZnJvbTogc3ViamVjdC5wcmltYXJ5CiAgICAgICAgdG86IHVzZXIKICAgICAgLSBmcm9tOiBzdWJqZWN0LnNlY29uZGFyeQogICAgICAgIHRvOiB1c2VyLmVmZmVjdGl2ZQoKICAtICZlY3MtaG9zdAogICAgY2F0ZWdvcnk6IGhvc3QKICAgIHR5cGU6IGluZm8KCiAgLSAmZWNzLXByb2Nlc3MKICAgIGNhdGVnb3J5OiBwcm9jZXNzCiAgICB0eXBlOiBpbmZvCgogIC0gJmVjcy1maWxlCiAgICBjYXRlZ29yeTogZmlsZQogICAgdHlwZTogaW5mbwoKICAtICZlY3MtZHJpdmVyCiAgICBjYXRlZ29yeTogZHJpdmVyCiAgICB0eXBlOiBpbmZvCgogIC0gJmVjcy1uZXR3b3JrCiAgICBjYXRlZ29yeTogbmV0d29yawogICAgdHlwZToKICAgICAgLSBjb25uZWN0aW9uCiAgICAgIC0gaW5mbwoKICAtICZlY3MtdXNlci1tb2RpZmljYXRpb24tbWFwcGluZ3MKICAgIG1hcHBpbmdzOgogICAgICAtIGZyb206IHN1YmplY3QucHJpbWFyeQogICAgICAgIHRvOiB1c2VyCiAgICAgIC0gZnJvbTogc3ViamVjdC5zZWNvbmRhcnkKICAgICAgICB0bzogdXNlci5lZmZlY3RpdmUKICAgICAgLSBmcm9tOiBvYmplY3QucHJpbWFyeQogICAgICAgIHRvOiB1c2VyLnRhcmdldAoKICAtICZlY3MtZ3JvdXAtbW9kaWZpY2F0aW9uLW1hcHBpbmdzCiAgICBtYXBwaW5nczoKICAgICAgLSBmcm9tOiBzdWJqZWN0LnByaW1hcnkKICAgICAgICB0bzogdXNlcgogICAgICAtIGZyb206IHN1YmplY3Quc2Vjb25kYXJ5CiAgICAgICAgdG86IHVzZXIuZWZmZWN0aXZlCiAgICAgIC0gZnJvbTogb2JqZWN0LnByaW1hcnkKICAgICAgICB0bzogZ3JvdXAKCiMgTm9ybWFsaXphdGlvbnMgaXMgYSBsaXN0IG9mIGRlY2xhcmF0aW9ucyBzcGVjaWZ5aW5nIGhvdyB0byBub3JtYWxpemUgdGhlIGRhdGEKIyBjb250YWluZWQgaW4gYW4gZXZlbnQuIFRoZSBub3JtYWxpemF0aW9uIGNhbiBiZSBhcHBsaWVkIGJhc2VkIG9uIHRoZSBzeXNjYWxsCiMgbmFtZSAoZS5nLiBjb25uZWN0LCBvcGVuKSBvciBiYXNlZCBvbiB0aGUgcmVjb3JkIHR5cGUgKGUuZy4gVVNFUl9MT0dJTikuCiMgTm8gdHdvIG5vcm1hbGl6YXRpb25zIGNhbiBhcHBseSB0byB0aGUgc2FtZSBzeXNjYWxsIG9yIHJlY29yZCB0eXBlLiBUaGlzCiMgd2lsbCByZXN1bHQgaW4gYSBmYWlsdXJlIGF0IGxvYWQgdGltZS4KIwojIEVhY2ggbm9ybWFsaXphdGlvbiBzaG91bGQgc3BlY2lmeToKIyAgIGFjdGlvbiAtIHdoYXQgaGFwcGVuZWQKIyAgIGFjdG9yICAtIHdobyBkaWQgdGhpcyBvciB3aG8gdHJpZ2dlcmVkIHRoZSBldmVudAojICAgb2JqZWN0IC0gd2hhdCB3YXMgdGhlICJ0aGluZyIgaW52b2x2ZWQgaW4gdGhlIGFjdGlvbiAoZS5nLiBwcm9jZXNzLCBzb2NrZXQpCiMgICBob3cgICAgLSBob3cgd2FzIHRoZSBhY3Rpb24gcGVyZm9ybWVkIChlLmcuIGV4ZSBvciB0ZXJtaW5hbCkKbm9ybWFsaXphdGlvbnM6CiAgLSBlY3M6ICplY3MtcHJvY2VzcwogICAgc3lzY2FsbHM6CiAgICAgIC0gJyonICMgdGhpcyBpcyBhIGNhdGNoIGFsbAogIC0gYWN0aW9uOiBvcGVuZWQtZmlsZQogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBjcmVhdCAtIG9wZW4gYW5kIHBvc3NpYmx5IGNyZWF0ZSBhIGZpbGUKICAgICAgLSBjcmVhdAogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgIHR5cGU6IGNyZWF0aW9uCiAgLSBhY3Rpb246IG9wZW5lZC1maWxlCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIGZhbGxvY2F0ZSAtIG1hbmlwdWxhdGUgZmlsZSBzcGFjZQogICAgICAtIGZhbGxvY2F0ZQogICAgICAjIHRydW5jYXRlIC0gdHJ1bmNhdGUgYSBmaWxlIHRvIGEgc3BlY2lmaWVkIGxlbmd0aAogICAgICAtIHRydW5jYXRlCiAgICAgICMgZnRydW5jYXRlIC0gdHJ1bmNhdGUgYSBmaWxlIHRvIGEgc3BlY2lmaWVkIGxlbmd0aAogICAgICAtIGZ0cnVuY2F0ZQogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgICMgdGVjaG5pY2FsbHkgeW91IGNhbiB0cnVuY2F0ZSBhIGZpbGUgdG8gdGhlIHNhbWUgbGVuZ3RoCiAgICAgICMgYnV0IHJlZ2FyZGxlc3MsIHdlIGNvbnNpZGVyIHRoaXMgYSBjaGFuZ2UKICAgICAgdHlwZTogY2hhbmdlCiAgLSBhY3Rpb246IG9wZW5lZC1maWxlCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIG9wZW4gLSBvcGVuIGFuZCBwb3NzaWJseSBjcmVhdGUgYSBmaWxlCiAgICAgIC0gb3BlbgogICAgICAjIG9wZW5hdCAtIG9wZW4gYW5kIHBvc3NpYmx5IGNyZWF0ZSBhIGZpbGUKICAgICAgLSBvcGVuYXQKICAgICAgIyByZWFkbGluayAtIHJlYWQgdmFsdWUgb2YgYSBzeW1ib2xpYyBsaW5rCiAgICAgIC0gcmVhZGxpbmsKICAgICAgIyByZWFkbGlua2F0IC0gcmVhZCB2YWx1ZSBvZiBhIHN5bWJvbGljIGxpbmsKICAgICAgLSByZWFkbGlua2F0CiAgICBlY3M6ICplY3MtZmlsZQogIC0gYWN0aW9uOiByZWFkLWZpbGUKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgc3lzY2FsbHM6CiAgICAgICMgcmVhZCAtIHJlYWQgZnJvbSBhIGZpbGUgZGVzY3JpcHRvcgogICAgICAtIHJlYWQKICAgIGVjczogKmVjcy1maWxlCiAgLSBhY3Rpb246IHdyb3RlLXRvLWZpbGUKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgc3lzY2FsbHM6CiAgICAgICMgd3JpdGUgLSB3cml0ZSB0byBhIGZpbGUgZGVzY3JpcHRvcgogICAgICAtIHdyaXRlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgdHlwZTogY2hhbmdlCiAgLSBhY3Rpb246IGNoYW5nZWQtZmlsZS1hdHRyaWJ1dGVzLW9mCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIHNldHhhdHRyIC0gc2V0IGFuIGV4dGVuZGVkIGF0dHJpYnV0ZSB2YWx1ZQogICAgICAtIHNldHhhdHRyCiAgICAgICMgZnNldHhhdHRyIC0gc2V0IGFuIGV4dGVuZGVkIGF0dHJpYnV0ZSB2YWx1ZQogICAgICAtIGZzZXR4YXR0cgogICAgICAjIGxzZXR4YXR0ciAtIHNldCBhbiBleHRlbmRlZCBhdHRyaWJ1dGUgdmFsdWUKICAgICAgLSBsc2V0eGF0dHIKICAgICAgIyByZW1vdmV4YXR0ciAtIHJlbW92ZSBhbiBleHRlbmRlZCBhdHRyaWJ1dGUKICAgICAgLSByZW1vdmV4YXR0cgogICAgICAjIGZyZW1vdmV4YXR0ciAtIHJlbW92ZSBhbiBleHRlbmRlZCBhdHRyaWJ1dGUKICAgICAgLSBmcmVtb3ZleGF0dHIKICAgICAgIyBscmVtb3ZleGF0dHIgLSByZW1vdmUgYW4gZXh0ZW5kZWQgYXR0cmlidXRlCiAgICAgIC0gbHJlbW92ZXhhdHRyCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgdHlwZTogY2hhbmdlCiAgLSBhY3Rpb246IGNoYW5nZWQtZmlsZS1wZXJtaXNzaW9ucy1vZgogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBjaG1vZCAtIGNoYW5nZSBwZXJtaXNzaW9ucyBvZiBhIGZpbGUKICAgICAgLSBjaG1vZAogICAgICAjIGZjaG1vZCAtIGNoYW5nZSBwZXJtaXNzaW9ucyBvZiBhIGZpbGUKICAgICAgLSBmY2htb2QKICAgICAgIyBmY2htb2RhdCAtIGNoYW5nZSBwZXJtaXNzaW9ucyBvZiBhIGZpbGUKICAgICAgLSBmY2htb2RhdAogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgIHR5cGU6IGNoYW5nZQogIC0gYWN0aW9uOiBjaGFuZ2VkLWZpbGUtb3duZXJzaGlwLW9mCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIGNob3duIC0gY2hhbmdlIG93bmVyc2hpcCBvZiBhIGZpbGUKICAgICAgLSBjaG93bgogICAgICAjIGZjaG93biAtIGNoYW5nZSBvd25lcnNoaXAgb2YgYSBmaWxlCiAgICAgIC0gZmNob3duCiAgICAgICMgZmNob3duYXQgLSBjaGFuZ2Ugb3duZXJzaGlwIG9mIGEgZmlsZQogICAgICAtIGZjaG93bmF0CiAgICAgICMgbGNob3duIC0gY2hhbmdlIG93bmVyc2hpcCBvZiBhIGZpbGUKICAgICAgLSBsY2hvd24KICAgIGVjczoKICAgICAgPDw6ICplY3MtZmlsZQogICAgICB0eXBlOiBjaGFuZ2UKICAtIGFjdGlvbjogbG9hZGVkLWtlcm5lbC1tb2R1bGUKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgICBwcmltYXJ5OiBuYW1lCiAgICByZWNvcmRfdHlwZXM6CiAgICAgIC0gS0VSTl9NT0RVTEUKICAgIHN5c2NhbGxzOgogICAgICAjIGZpbml0X21vZHVsZSAtIGxvYWQgYSBrZXJuZWwgbW9kdWxlCiAgICAgIC0gZmluaXRfbW9kdWxlCiAgICAgICMgaW5pdF9tb2R1bGUgLSBsb2FkIGEga2VybmVsIG1vZHVsZQogICAgICAtIGluaXRfbW9kdWxlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWRyaXZlcgogICAgICB0eXBlOiBzdGFydAogIC0gYWN0aW9uOiB1bmxvYWRlZC1rZXJuZWwtbW9kdWxlCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIGRlbGV0ZV9tb2R1bGUgLSB1bmxvYWQgYSBrZXJuZWwgbW9kdWxlCiAgICAgIC0gZGVsZXRlX21vZHVsZQogICAgZWNzOgogICAgICA8PDogKmVjcy1kcml2ZXIKICAgICAgdHlwZTogZW5kCiAgLSBhY3Rpb246IGNyZWF0ZWQtZGlyZWN0b3J5CiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgICAgcGF0aF9pbmRleDogMQogICAgc3lzY2FsbHM6CiAgICAgICMgbWtkaXIgLSBjcmVhdGUgYSBkaXJlY3RvcnkKICAgICAgLSBta2RpcgogICAgICAjIG1rZGlyYXQgLSBjcmVhdGUgYSBkaXJlY3RvcnkKICAgICAgLSBta2RpcmF0CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgdHlwZTogY3JlYXRpb24KICAtIGFjdGlvbjogbW91bnRlZAogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlc3lzdGVtCiAgICAgIHBhdGhfaW5kZXg6IDEKICAgIHN5c2NhbGxzOgogICAgICAjIG1vdW50IC0gbW91bnQgZmlsZXN5c3RlbQogICAgICAtIG1vdW50CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgIyBzaW5jZSBhIG5ldyBtb3VudCBhcHBlYXJzIG9uIHRoZSBzeXN0ZW0KICAgICAgIyB3ZSBjb25zaWRlciB0aGlzIGEgaGlnaC1sZXZlbCAiY3JlYXRpb24iIGV2ZW50CiAgICAgIHR5cGU6IGNyZWF0aW9uCiAgLSBhY3Rpb246IHJlbmFtZWQKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgICBwYXRoX2luZGV4OiAyCiAgICBzeXNjYWxsczoKICAgICAgIyByZW5hbWUgLSBjaGFuZ2UgdGhlIG5hbWUgb3IgbG9jYXRpb24gb2YgYSBmaWxlCiAgICAgIC0gcmVuYW1lCiAgICAgICMgcmVuYW1lYXQgLSBjaGFuZ2UgdGhlIG5hbWUgb3IgbG9jYXRpb24gb2YgYSBmaWxlCiAgICAgIC0gcmVuYW1lYXQKICAgICAgIyByZW5hbWVhdDIgLSBjaGFuZ2UgdGhlIG5hbWUgb3IgbG9jYXRpb24gb2YgYSBmaWxlCiAgICAgIC0gcmVuYW1lYXQyCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgdHlwZTogY2hhbmdlCiAgLSBhY3Rpb246IGNoZWNrZWQtbWV0YWRhdGEtb2YKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgc3lzY2FsbHM6CiAgICAgICMgYWNjZXNzIC0gY2hlY2sgdXNlcidzIHBlcm1pc3Npb25zIGZvciBhIGZpbGUKICAgICAgLSBhY2Nlc3MKICAgICAgIyBmYWNjZXNzYXQgLSBjaGVjayB1c2VyJ3MgcGVybWlzc2lvbnMgZm9yIGEgZmlsZQogICAgICAtIGZhY2Nlc3NhdAogICAgICAjIGZzdGF0YXQgLSBnZXQgZmlsZSBzdGF0dXMKICAgICAgLSBmc3RhdGF0CiAgICAgICMgbmV3ZnN0YXRhdCAtIGdldCBmaWxlIHN0YXR1cwogICAgICAtIG5ld2ZzdGF0YXQKICAgICAgIyBzdGF0IC0gZ2V0IGZpbGUgc3RhdHVzCiAgICAgIC0gc3RhdAogICAgICAjIHN0YXQ2NCAtIGdldCBmaWxlIHN0YXR1cwogICAgICAtIHN0YXQ2NAogICAgICAjIGZzdGF0IC0gZ2V0IGZpbGUgc3RhdHVzCiAgICAgIC0gZnN0YXQKICAgICAgIyBsc3RhdCAtIGdldCBmaWxlIHN0YXR1cwogICAgICAtIGxzdGF0CiAgICAgICMgZ2V0eGF0dHIgLSByZXRyaWV2ZSBhbiBleHRlbmRlZCBhdHRyaWJ1dGUgdmFsdWUKICAgICAgLSBnZXR4YXR0cgogICAgICAjIGxnZXR4YXR0ciAtIHJldHJpZXZlIGFuIGV4dGVuZGVkIGF0dHJpYnV0ZSB2YWx1ZQogICAgICAtIGxnZXR4YXR0cgogICAgICAjIGZnZXR4YXR0ciAtIHJldHJpZXZlIGFuIGV4dGVuZGVkIGF0dHJpYnV0ZSB2YWx1ZQogICAgICAtIGZnZXR4YXR0cgogICAgZWNzOiAqZWNzLWZpbGUKICAtIGFjdGlvbjogY2hlY2tlZC1maWxlc3lzdGVtLW1ldGFkYXRhLW9mCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGVzeXN0ZW0KICAgIHN5c2NhbGxzOgogICAgICAjIHN0YXRmcyAtIGdldCBmaWxlc3lzdGVtIHN0YXRpc3RpY3MKICAgICAgLSBzdGF0ZnMKICAgICAgIyBmc3RhdGZzIC0gZ2V0IGZpbGVzeXN0ZW0gc3RhdGlzdGljcwogICAgICAtIGZzdGF0ZnMKICAgIGVjczogKmVjcy1maWxlCiAgLSBhY3Rpb246IHN5bWxpbmtlZAogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBzeW1saW5rIC0gbWFrZSBhIG5ldyBuYW1lIGZvciBhIGZpbGUKICAgICAgLSBzeW1saW5rCiAgICAgICMgc3ltbGlua2F0IC0gbWFrZSBhIG5ldyBuYW1lIGZvciBhIGZpbGUKICAgICAgLSBzeW1saW5rYXQKICAgIGVjczoKICAgICAgPDw6ICplY3MtZmlsZQogICAgICAjICJjcmVhdGlvbiIgc2luY2Ugd2UncmUgY3JlYXRpbmcgYSBuZXcgZmlsZSBzeXN0ZW0KICAgICAgIyBlbnRyeSBmb3IgdGhlIHN5bWxpbmsKICAgICAgdHlwZTogY3JlYXRpb24KICAtIGFjdGlvbjogdW5tb3VudGVkCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGVzeXN0ZW0KICAgIHN5c2NhbGxzOgogICAgICAjIHVtb3VudCAtIHVubW91bnQgZmlsZXN5c3RlbQogICAgICAtIHVtb3VudAogICAgICAjIHVtb3VudDIgLSB1bm1vdW50IGZpbGVzeXN0ZW0KICAgICAgLSB1bW91bnQyCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgIyAiZGVsZXRpb24iIHRvIG1pcnJvciB0aGUgImNyZWF0aW9uIiBvZiB0aGUgbW91bnQKICAgICAgdHlwZTogZGVsZXRpb24KICAtIGFjdGlvbjogZGVsZXRlZAogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBybWRpciAtIGRlbGV0ZSBhIGRpcmVjdG9yeQogICAgICAtIHJtZGlyCiAgICAgICMgdW5saW5rIC0gZGVsZXRlIGEgbmFtZSBhbmQgcG9zc2libHkgdGhlIGZpbGUgaXQgcmVmZXJzIHRvCiAgICAgIC0gdW5saW5rCiAgICAgICMgdW5saW5rYXQgLSBkZWxldGUgYSBuYW1lIGFuZCBwb3NzaWJseSB0aGUgZmlsZSBpdCByZWZlcnMgdG8KICAgICAgLSB1bmxpbmthdAogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgIHR5cGU6IGRlbGV0aW9uCiAgLSBhY3Rpb246IGNoYW5nZWQtdGltZXN0YW1wLW9mCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIHV0aW1lIC0gY2hhbmdlIGZpbGUgbGFzdCBhY2Nlc3MgYW5kIG1vZGlmaWNhdGlvbiB0aW1lcwogICAgICAtIHV0aW1lCiAgICAgICMgdXRpbWVzIC0gY2hhbmdlIGZpbGUgbGFzdCBhY2Nlc3MgYW5kIG1vZGlmaWNhdGlvbiB0aW1lcwogICAgICAtIHV0aW1lcwogICAgICAjIGZ1dGltZXNhdCAtIGNoYW5nZSB0aW1lc3RhbXBzIG9mIGEgZmlsZSByZWxhdGl2ZSB0byBhIFwgZGlyZWN0b3J5IGZpbGUgZGVzY3JpcHRvcgogICAgICAtIGZ1dGltZXNhdAogICAgICAjIGZ1dGltZW5zIC0gY2hhbmdlIGZpbGUgdGltZXN0YW1wcyB3aXRoIG5hbm9zZWNvbmQgcHJlY2lzaW9uCiAgICAgIC0gZnV0aW1lbnMKICAgICAgIyB1dGltZW5zYXQgLSBjaGFuZ2UgZmlsZSB0aW1lc3RhbXBzIHdpdGggbmFub3NlY29uZCBwcmVjaXNpb24KICAgICAgLSB1dGltZW5zYXQKICAgIGVjczogKmVjcy1maWxlCiAgLSBhY3Rpb246IGV4ZWN1dGVkCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIGV4ZWN2ZSAtIGV4ZWN1dGUgcHJvZ3JhbQogICAgICAtIGV4ZWN2ZQogICAgICAjIGV4ZWN2ZWF0IC0gZXhlY3V0ZSBwcm9ncmFtIHJlbGF0aXZlIHRvIGEgZGlyZWN0b3J5IGZpbGUgZGVzY3JpcHRvcgogICAgICAtIGV4ZWN2ZWF0CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogc3RhcnQKICAtIGFjdGlvbjogbGlzdGVuLWZvci1jb25uZWN0aW9ucwogICAgb2JqZWN0OgogICAgICB3aGF0OiBzb2NrZXQKICAgIHN5c2NhbGxzOgogICAgICAjIGxpc3Rlbi0gbGlzdGVuIGZvciBjb25uZWN0aW9ucyBvbiBhIHNvY2tldAogICAgICAtIGxpc3RlbgogICAgZWNzOgogICAgICA8PDogKmVjcy1uZXR3b3JrCiAgICAgIHR5cGU6IHN0YXJ0CiAgLSBhY3Rpb246IGFjY2VwdGVkLWNvbm5lY3Rpb24tZnJvbQogICAgb2JqZWN0OgogICAgICB3aGF0OiBzb2NrZXQKICAgIHN5c2NhbGxzOgogICAgICAjIGFjY2VwdCAtIGFjY2VwdCBhIGNvbm5lY3Rpb24gb24gYSBzb2NrZXQKICAgICAgLSBhY2NlcHQKICAgICAgIyBhY2NlcHQ0IC0gYWNjZXB0IGEgY29ubmVjdGlvbiBvbiBhIHNvY2tldAogICAgICAtIGFjY2VwdDQKICAgIGVjczoKICAgICAgPDw6ICplY3MtbmV0d29yawogICAgICB0eXBlOgogICAgICAgIC0gY29ubmVjdGlvbgogICAgICAgIC0gc3RhcnQKICAtIGFjdGlvbjogYm91bmQtc29ja2V0CiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNvY2tldAogICAgc3lzY2FsbHM6CiAgICAgICMgYmluZCAtYmluZCBhIG5hbWUgdG8gYSBzb2NrZXQKICAgICAgLSBiaW5kCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLW5ldHdvcmsKICAgICAgdHlwZTogc3RhcnQKICAtIGFjdGlvbjogY29ubmVjdGVkLXRvCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNvY2tldAogICAgc3lzY2FsbHM6CiAgICAgIC0gY29ubmVjdAogICAgZWNzOgogICAgICA8PDogKmVjcy1uZXR3b3JrCiAgICAgIHR5cGU6CiAgICAgICAgLSBjb25uZWN0aW9uCiAgICAgICAgLSBzdGFydAogIC0gYWN0aW9uOiByZWNlaXZlZC1mcm9tCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNvY2tldAogICAgc3lzY2FsbHM6CiAgICAgICMgcmVjdiAtIHJlY2VpdmUgYSBtZXNzYWdlIGZyb20gYSBzb2NrZXQKICAgICAgLSByZWN2CiAgICAgICMgcmVjdmZyb20gLSByZWNlaXZlIGEgbWVzc2FnZSBmcm9tIGEgc29ja2V0CiAgICAgIC0gcmVjdmZyb20KICAgICAgIyByZWN2bXNnIC0gcmVjZWl2ZSBhIG1lc3NhZ2UgZnJvbSBhIHNvY2tldAogICAgICAtIHJlY3Ztc2cKICAgICAgIyByZWN2bW1zZyAtIHJlY2VpdmUgbXVsdGlwbGUgbWVzc2FnZXMgb24gYSBzb2NrZXQKICAgICAgLSByZWN2bW1zZwogICAgZWNzOgogICAgICA8PDogKmVjcy1uZXR3b3JrCiAgLSBhY3Rpb246IHNlbnQtdG8KICAgIG9iamVjdDoKICAgICAgd2hhdDogc29ja2V0CiAgICBzeXNjYWxsczoKICAgICAgIyBzZW5kIC0gc2VuZCBhIG1lc3NhZ2Ugb24gYSBzb2NrZXQKICAgICAgLSBzZW5kCiAgICAgICMgc2VuZHRvIC0gc2VuZCBhIG1lc3NhZ2Ugb24gYSBzb2NrZXQKICAgICAgLSBzZW5kdG8KICAgICAgIyBzZW5kbXNnIC0gc2VuZCBhIG1lc3NhZ2Ugb24gYSBzb2NrZXQKICAgICAgLSBzZW5kbXNnCiAgICAgICMgc2VuZG1tc2cgLSBzZW5kIG11bHRpcGxlIG1lc3NhZ2VzIG9uIGEgc29ja2V0CiAgICAgIC0gc2VuZG1tc2cKICAgIGVjczoKICAgICAgPDw6ICplY3MtbmV0d29yawogIC0gYWN0aW9uOiBraWxsZWQtcGlkCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHByb2Nlc3MKICAgIHN5c2NhbGxzOgogICAgICAjIGtpbGwgLSBzZW5kIHNpZ25hbCB0byBhIHByb2Nlc3MKICAgICAgLSBraWxsCiAgICAgICMgdGtpbGwgLSBzZW5kIGEgc2lnbmFsIHRvIGEgdGhyZWFkCiAgICAgIC0gdGtpbGwKICAgICAgIyB0Z2tpbGwgLSBzZW5kIGEgc2lnbmFsIHRvIGEgdGhyZWFkCiAgICAgIC0gdGdraWxsCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogZW5kCiAgLSBhY3Rpb246IGNoYW5nZWQtaWRlbnRpdHktb2YKICAgIG9iamVjdDoKICAgICAgd2hhdDogcHJvY2VzcwogICAgaG93OiBzeXNjYWxsCiAgICBzeXNjYWxsczoKICAgICAgIyBzZXR1aWQgLSBzZXQgdXNlciBpZGVudGl0eQogICAgICAtIHNldHVpZAogICAgICAjIHNldGV1aWQgLSBzZXQgZWZmZWN0aXZlIHVzZXIgb3IgZ3JvdXAgSUQKICAgICAgLSBzZXRldWlkCiAgICAgICMgc2V0ZnN1aWQgLSBzZXQgdXNlciBpZGVudGl0eSB1c2VkIGZvciBmaWxlc3lzdGVtIGNoZWNrcwogICAgICAtIHNldGZzdWlkCiAgICAgICMgc2V0cmV1aWQgLSBzZXQgcmVhbCBhbmQvb3IgZWZmZWN0aXZlIHVzZXIgb3IgZ3JvdXAgSUQKICAgICAgLSBzZXRyZXVpZAogICAgICAjIHNldGdpZCAtIHNldCBncm91cCBpZGVudGl0eQogICAgICAtIHNldGdpZAogICAgICAjIHNldGVnaWQgLSBzZXQgZWZmZWN0aXZlIHVzZXIgb3IgZ3JvdXAgSUQKICAgICAgLSBzZXRlZ2lkCiAgICAgICMgc2V0ZnNnaWQgLSBzZXQgZ3JvdXAgaWRlbnRpdHkgdXNlZCBmb3IgZmlsZXN5c3RlbSBjaGVja3MKICAgICAgLSBzZXRmc2dpZAogICAgICAjIHNldHJlZ2lkIC0gc2V0IHJlYWwgYW5kL29yIGVmZmVjdGl2ZSB1c2VyIG9yIGdyb3VwIElECiAgICAgIC0gc2V0cmVnaWQKICAgICAgIyBzZXRyZXN1aWQgLSBzZXQgcmVhbCwgZWZmZWN0aXZlIGFuZCBzYXZlZCB1c2VyIG9yIGdyb3VwIElECiAgICAgIC0gc2V0cmVzdWlkCiAgICAgICMgc2V0cmVzZ2lkIC0gc2V0IHJlYWwsIGVmZmVjdGl2ZSBhbmQgc2F2ZWQgdXNlciBvciBncm91cCBJRAogICAgICAtIHNldHJlc2dpZAogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IGNoYW5nZQogIC0gYWN0aW9uOiBjaGFuZ2VkLXN5c3RlbS10aW1lCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHN5c3RlbQogICAgc3lzY2FsbHM6CiAgICAgICMgc2V0dGltZW9mZGF5IC0gZ2V0IC8gc2V0IHRpbWUKICAgICAgLSBzZXR0aW1lb2ZkYXkKICAgICAgIyBjbG9ja19zZXR0aW1lIC0gY2xvY2sgYW5kIHRpbWUgZnVuY3Rpb25zCiAgICAgIC0gY2xvY2tfc2V0dGltZQogICAgICAjIHN0aW1lIC0gc2V0IHRpbWUKICAgICAgLSBzdGltZQogICAgICAjIGFkanRpbWV4IC0gdHVuZSBrZXJuZWwgY2xvY2sKICAgICAgLSBhZGp0aW1leAogICAgZWNzOgogICAgICA8PDogKmVjcy1ob3N0CiAgICAgIHR5cGU6IGNoYW5nZQogIC0gYWN0aW9uOiBtYWtlLWRldmljZQogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBta25vZCAtIGNyZWF0ZSBhIHNwZWNpYWwgb3Igb3JkaW5hcnkgZmlsZQogICAgICAtIG1rbm9kCiAgICAgICMgbWtub2RhdCAtIGNyZWF0ZSBhIHNwZWNpYWwgb3Igb3JkaW5hcnkgZmlsZQogICAgICAtIG1rbm9kYXQKICAgIGVjczoKICAgICAgPDw6ICplY3MtZmlsZQogICAgICB0eXBlOiBjcmVhdGlvbgogIC0gYWN0aW9uOiBjaGFuZ2VkLXN5c3RlbS1uYW1lCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHN5c3RlbQogICAgc3lzY2FsbHM6CiAgICAgICMgc2V0aG9zdG5hbWUgLSBnZXQvc2V0IGhvc3RuYW1lCiAgICAgIC0gc2V0aG9zdG5hbWUKICAgICAgIyBzZXRkb21haW5uYW1lIC0gZ2V0L3NldCBOSVMgZG9tYWluIG5hbWUKICAgICAgLSBzZXRkb21haW5uYW1lCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWhvc3QKICAgICAgdHlwZTogY2hhbmdlCiAgLSBhY3Rpb246IGFsbG9jYXRlZC1tZW1vcnkKICAgIG9iamVjdDoKICAgICAgd2hhdDogbWVtb3J5CiAgICBzeXNjYWxsczoKICAgICAgIyBtbWFwIC0gbWFwIG9yIHVubWFwIGZpbGVzIG9yIGRldmljZXMgaW50byBtZW1vcnkKICAgICAgLSBtbWFwCiAgICAgICMgbW1hcDIgLSBtYXAgZmlsZXMgb3IgZGV2aWNlcyBpbnRvIG1lbW9yeQogICAgICAtIG1tYXAyCiAgICAgICMgYnJrIC0gY2hhbmdlIGRhdGEgc2VnbWVudCBzaXplCiAgICAgIC0gYnJrCiAgICBlY3M6ICplY3MtcHJvY2VzcwogIC0gYWN0aW9uOiBhZGp1c3RlZC1zY2hlZHVsaW5nLXBvbGljeS1vZgogICAgb2JqZWN0OgogICAgICB3aGF0OiBwcm9jZXNzCiAgICBob3c6IHN5c2NhbGwKICAgIHN5c2NhbGxzOgogICAgICAjIHNjaGVkX3NldHBhcmFtIC0gc2V0IGFuZCBnZXQgc2NoZWR1bGluZyBwYXJhbWV0ZXJzCiAgICAgIC0gc2NoZWRfc2V0cGFyYW0KICAgICAgIyBzY2hlZF9zZXRzY2hlZHVsZXIgLSBzZXQgYW5kIGdldCBzY2hlZHVsaW5nIHBvbGljeS9wYXJhbWV0ZXJzCiAgICAgIC0gc2NoZWRfc2V0c2NoZWR1bGVyCiAgICAgICMgc2NoZWRfc2V0YXR0ciAtIHNldCBhbmQgZ2V0IHNjaGVkdWxpbmcgcG9saWN5IGFuZCBhdHRyaWJ1dGVzCiAgICAgIC0gc2NoZWRfc2V0YXR0cgogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IGNoYW5nZQoKICAjIEN1cnJlbnRseSB1bmhhbmRsZWQKICAjIHRoaXMgbGlzdCBjb21lcyBmcm9tIHBhcnNpbmcgbGludXggbWFuIHBhZ2VzIGF0IGh0dHBzOi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9kb2NzL21hbi1wYWdlcy9tYW4tcGFnZXMuZ2l0CgogICMgc2lnYWN0aW9uIC0gZXhhbWluZSBhbmQgY2hhbmdlIGEgc2lnbmFsIGFjdGlvbgogICMgcnRfc2lnYWN0aW9uIC0gZXhhbWluZSBhbmQgY2hhbmdlIGEgc2lnbmFsIGFjdGlvbgogICMgcHJlYWQgLSByZWFkIGZyb20gb3Igd3JpdGUgdG8gYSBmaWxlIGRlc2NyaXB0b3IgYXQgYSBnaXZlbiBvZmZzZXQKICAjIHB3cml0ZSAtIHJlYWQgZnJvbSBvciB3cml0ZSB0byBhIGZpbGUgZGVzY3JpcHRvciBhdCBhIGdpdmVuIG9mZnNldAogICMgczM5MF9ndWFyZGVkX3N0b3JhZ2UgLSBvcGVyYXRpb25zIHdpdGggei9BcmNoaXRlY3R1cmUgZ3VhcmRlZCBzdG9yYWdlIGZhY2lsaXR5CiAgIyBzY2hlZF9nZXRhdHRyIC0gc2V0IGFuZCBnZXQgc2NoZWR1bGluZyBwb2xpY3kgYW5kIGF0dHJpYnV0ZXMKICAjIGdldHJ1c2FnZSAtIGdldCByZXNvdXJjZSB1c2FnZQogICMgZmxvY2sgLSBhcHBseSBvciByZW1vdmUgYW4gYWR2aXNvcnkgbG9jayBvbiBhbiBvcGVuIGZpbGUKICAjIHBpZGZkX2dldGZkIC0gb2J0YWluIGEgZHVwbGljYXRlIG9mIGFub3RoZXIgcHJvY2VzcydzIGZpbGUgZGVzY3JpcHRvcgogICMgY2xvY2tfbmFub3NsZWVwIC0gaGlnaC1yZXNvbHV0aW9uIHNsZWVwIHdpdGggc3BlY2lmaWFibGUgY2xvY2sKICAjIGdldHBhZ2VzaXplIC0gZ2V0IG1lbW9yeSBwYWdlIHNpemUKICAjIHBpZGZkX29wZW4gLSBvYnRhaW4gYSBmaWxlIGRlc2NyaXB0b3IgdGhhdCByZWZlcnMgdG8gYSBwcm9jZXNzCiAgIyBzcGxpY2UgLSBzcGxpY2UgZGF0YSB0by9mcm9tIGEgcGlwZQogICMgZ2V0cmVzdWlkIC0gZ2V0IHJlYWwsIGVmZmVjdGl2ZSBhbmQgc2F2ZWQgdXNlci9ncm91cCBJRHMKICAjIGdldHJlc2dpZCAtIGdldCByZWFsLCBlZmZlY3RpdmUgYW5kIHNhdmVkIHVzZXIvZ3JvdXAgSURzCiAgIyByZW1hcF9maWxlX3BhZ2VzIC0gY3JlYXRlIGEgbm9ubGluZWFyIGZpbGUgbWFwcGluZwogICMgaW9fY2FuY2VsIC0gY2FuY2VsIGFuIG91dHN0YW5kaW5nIGFzeW5jaHJvbm91cyBJL08gb3BlcmF0aW9uCiAgIyBwcmN0bCAtIG9wZXJhdGlvbnMgb24gYSBwcm9jZXNzIG9yIHRocmVhZAogICMgY2xvY2tfZ2V0cmVzIC0gY2xvY2sgYW5kIHRpbWUgZnVuY3Rpb25zCiAgIyBjbG9ja19nZXR0aW1lIC0gY2xvY2sgYW5kIHRpbWUgZnVuY3Rpb25zCiAgIyBnZXRncm91cHMgLSBnZXQvc2V0IGxpc3Qgb2Ygc3VwcGxlbWVudGFyeSBncm91cCBJRHMKICAjIHNldGdyb3VwcyAtIGdldC9zZXQgbGlzdCBvZiBzdXBwbGVtZW50YXJ5IGdyb3VwIElEcwogICMgdm1zcGxpY2UgLSBzcGxpY2UgdXNlciBwYWdlcyB0by9mcm9tIGEgcGlwZQogICMgZXBvbGxfY3JlYXRlIC0gb3BlbiBhbiBlcG9sbCBmaWxlIGRlc2NyaXB0b3IKICAjIGVwb2xsX2NyZWF0ZTEgLSBvcGVuIGFuIGVwb2xsIGZpbGUgZGVzY3JpcHRvcgogICMgcG9zaXhfZmFkdmlzZSAtIHByZWRlY2xhcmUgYW4gYWNjZXNzIHBhdHRlcm4gZm9yIGZpbGUgZGF0YQogICMgc2lnd2FpdGluZm8gLSBzeW5jaHJvbm91c2x5IHdhaXQgZm9yIHF1ZXVlZCBzaWduYWxzCiAgIyBzaWd0aW1lZHdhaXQgLSBzeW5jaHJvbm91c2x5IHdhaXQgZm9yIHF1ZXVlZCBzaWduYWxzCiAgIyBydF9zaWd0aW1lZHdhaXQgLSBzeW5jaHJvbm91c2x5IHdhaXQgZm9yIHF1ZXVlZCBzaWduYWxzCiAgIyBzaWdyZXR1cm4gLSByZXR1cm4gZnJvbSBzaWduYWwgaGFuZGxlciBhbmQgY2xlYW51cCBzdGFjayBmcmFtZQogICMgcnRfc2lncmV0dXJuIC0gcmV0dXJuIGZyb20gc2lnbmFsIGhhbmRsZXIgYW5kIGNsZWFudXAgc3RhY2sgZnJhbWUKICAjIGdldHJhbmRvbSAtIG9idGFpbiBhIHNlcmllcyBvZiByYW5kb20gYnl0ZXMKICAjIGtleWN0bCAtIG1hbmlwdWxhdGUgdGhlIGtlcm5lbCdzIGtleSBtYW5hZ2VtZW50IGZhY2lsaXR5CiAgIyBzY2hlZF9nZXRzY2hlZHVsZXIgLSBzZXQgYW5kIGdldCBzY2hlZHVsaW5nIHBvbGljeS9wYXJhbWV0ZXJzCiAgIyBtYmluZCAtIHNldCBtZW1vcnkgcG9saWN5IGZvciBhIG1lbW9yeSByYW5nZQogICMgZ2V0cHJpb3JpdHkgLSBnZXQvc2V0IHByb2dyYW0gc2NoZWR1bGluZyBwcmlvcml0eQogICMgc2V0cHJpb3JpdHkgLSBnZXQvc2V0IHByb2dyYW0gc2NoZWR1bGluZyBwcmlvcml0eQogICMgaW5vdGlmeV9pbml0IC0gaW5pdGlhbGl6ZSBhbiBpbm90aWZ5IGluc3RhbmNlCiAgIyBpbm90aWZ5X2luaXQxIC0gaW5pdGlhbGl6ZSBhbiBpbm90aWZ5IGluc3RhbmNlCiAgIyBzZW1jdGwgLSBTeXN0ZW0gViBzZW1hcGhvcmUgY29udHJvbCBvcGVyYXRpb25zCiAgIyBnZXRob3N0bmFtZSAtIGdldC9zZXQgaG9zdG5hbWUKICAjIHB0cmFjZSAtIHByb2Nlc3MgdHJhY2UKICAjIHN5c2N0bCAtIHJlYWQvd3JpdGUgc3lzdGVtIHBhcmFtZXRlcnMKICAjIGdldHBlZXJuYW1lIC0gZ2V0IG5hbWUgb2YgY29ubmVjdGVkIHBlZXIgc29ja2V0CiAgIyBmb3JrIC0gY3JlYXRlIGEgY2hpbGQgcHJvY2VzcwogICMgcXVlcnlfbW9kdWxlIC0gcXVlcnkgdGhlIGtlcm5lbCBmb3IgdmFyaW91cyBiaXRzIHBlcnRhaW5pbmcgdG8gbW9kdWxlcwogICMgaW9jdGxfbGlzdCAtIGxpc3Qgb2YgaW9jdGwgY2FsbHMgaW4gTGludXgvaTM4NiBrZXJuZWwKICAjIG1zZ2dldCAtIGdldCBhIFN5c3RlbSBWIG1lc3NhZ2UgcXVldWUgaWRlbnRpZmllcgogICMgc3B1X2NyZWF0ZSAtIGNyZWF0ZSBhIG5ldyBzcHUgY29udGV4dAogICMgc3VicGFnZV9wcm90IC0gZGVmaW5lIGEgc3VicGFnZSBwcm90ZWN0aW9uIGZvciBhbiBhZGRyZXNzIHJhbmdlCiAgIyBxdW90YWN0bCAtIG1hbmlwdWxhdGUgZGlzayBxdW90YXMKICAjIG5mc3NlcnZjdGwgLSBzeXNjYWxsIGludGVyZmFjZSB0byBrZXJuZWwgbmZzIGRhZW1vbgogICMgb3BlbmF0MiAtIG9wZW4gYW5kIHBvc3NpYmx5IGNyZWF0ZSBhIGZpbGUgKGV4dGVuZGVkKQogICMgZ2V0cmxpbWl0IC0gZ2V0L3NldCByZXNvdXJjZSBsaW1pdHMKICAjIHNldHJsaW1pdCAtIGdldC9zZXQgcmVzb3VyY2UgbGltaXRzCiAgIyBwcmxpbWl0IC0gZ2V0L3NldCByZXNvdXJjZSBsaW1pdHMKICAjIHRlZSAtIGR1cGxpY2F0aW5nIHBpcGUgY29udGVudAogICMgc2htZ2V0IC0gYWxsb2NhdGVzIGEgU3lzdGVtIFYgc2hhcmVkIG1lbW9yeSBzZWdtZW50CiAgIyBjcmVhdGVfbW9kdWxlIC0gY3JlYXRlIGEgbG9hZGFibGUgbW9kdWxlIGVudHJ5CiAgIyBnZXR0aW1lb2ZkYXkgLSBnZXQgLyBzZXQgdGltZQogICMgdGltZXJfY3JlYXRlIC0gY3JlYXRlIGEgUE9TSVggcGVyLXByb2Nlc3MgdGltZXIKICAjIGZhbm90aWZ5X21hcmsgLSBhZGQsIHJlbW92ZSwgb3IgbW9kaWZ5IGFuIGZhbm90aWZ5IG1hcmsgb24gYSBmaWxlc3lzdGVtIG9iamVjdAogICMgcGlwZSAtIGNyZWF0ZSBwaXBlCiAgIyBwaXBlMiAtIGNyZWF0ZSBwaXBlCiAgIyBpbnRybyAtIGludHJvZHVjdGlvbiB0byBzeXN0ZW0gY2FsbHMKICAjIGxvb2t1cF9kY29va2llIC0gcmV0dXJuIGEgZGlyZWN0b3J5IGVudHJ5J3MgcGF0aAogICMgc3lzZnMgLSBnZXQgZmlsZXN5c3RlbSB0eXBlIGluZm9ybWF0aW9uCiAgIyBzMzkwX3J1bnRpbWVfaW5zdHIgLSBlbmFibGUvZGlzYWJsZSBzMzkwIENQVSBydW4tdGltZSBpbnN0cnVtZW50YXRpb24KICAjIHNldG5zIC0gcmVhc3NvY2lhdGUgdGhyZWFkIHdpdGggYSBuYW1lc3BhY2UKICAjIHNldF9tZW1wb2xpY3kgLSBzZXQgZGVmYXVsdCBOVU1BIG1lbW9yeSBwb2xpY3kgZm9yIGEgdGhyZWFkIGFuZCBpdHMgY2hpbGRyZW4KICAjIG5pY2UgLSBjaGFuZ2UgcHJvY2VzcyBwcmlvcml0eQogICMgaW9fc2V0dXAgLSBjcmVhdGUgYW4gYXN5bmNocm9ub3VzIEkvTyBjb250ZXh0CiAgIyBtaW5jb3JlIC0gZGV0ZXJtaW5lIHdoZXRoZXIgcGFnZXMgYXJlIHJlc2lkZW50IGluIG1lbW9yeQogICMgaW9jdGxfY29uc29sZSAtIGlvY3RscyBmb3IgY29uc29sZSB0ZXJtaW5hbCBhbmQgdmlydHVhbCBjb25zb2xlcwogICMgcG9sbCAtIHdhaXQgZm9yIHNvbWUgZXZlbnQgb24gYSBmaWxlIGRlc2NyaXB0b3IKICAjIHBwb2xsIC0gd2FpdCBmb3Igc29tZSBldmVudCBvbiBhIGZpbGUgZGVzY3JpcHRvcgogICMgY2FwZ2V0IC0gc2V0L2dldCBjYXBhYmlsaXRpZXMgb2YgdGhyZWFkKHMpCiAgIyBjYXBzZXQgLSBzZXQvZ2V0IGNhcGFiaWxpdGllcyBvZiB0aHJlYWQocykKICAjIGlvY3RsX3R0eSAtIGlvY3RscyBmb3IgdGVybWluYWxzIGFuZCBzZXJpYWwgbGluZXMKICAjIGlvcGwgLSBjaGFuZ2UgSS9PIHByaXZpbGVnZSBsZXZlbAogICMgaW9fZ2V0ZXZlbnRzIC0gcmVhZCBhc3luY2hyb25vdXMgSS9PIGV2ZW50cyBmcm9tIHRoZSBjb21wbGV0aW9uIHF1ZXVlCiAgIyBwcm9jZXNzX3ZtX3JlYWR2IC0gdHJhbnNmZXIgZGF0YSBiZXR3ZWVuIHByb2Nlc3MgYWRkcmVzcyBzcGFjZXMKICAjIHByb2Nlc3Nfdm1fd3JpdGV2IC0gdHJhbnNmZXIgZGF0YSBiZXR3ZWVuIHByb2Nlc3MgYWRkcmVzcyBzcGFjZXMKICAjIHBjaWNvbmZpZ19yZWFkIC0gcGNpIGRldmljZSBpbmZvcm1hdGlvbiBoYW5kbGluZwogICMgcGNpY29uZmlnX3dyaXRlIC0gcGNpIGRldmljZSBpbmZvcm1hdGlvbiBoYW5kbGluZwogICMgcGNpY29uZmlnX2lvYmFzZSAtIHBjaSBkZXZpY2UgaW5mb3JtYXRpb24gaGFuZGxpbmcKICAjIHNicmsgLSBjaGFuZ2UgZGF0YSBzZWdtZW50IHNpemUKICAjIHNldF90aWRfYWRkcmVzcyAtIHNldCBwb2ludGVyIHRvIHRocmVhZCBJRAogICMgcGtleV9hbGxvYyAtIGFsbG9jYXRlIG9yIGZyZWUgYSBwcm90ZWN0aW9uIGtleQogICMgcGtleV9mcmVlIC0gYWxsb2NhdGUgb3IgZnJlZSBhIHByb3RlY3Rpb24ga2V5CiAgIyBzZWxlY3QgLSBzeW5jaHJvbm91cyBJL08gbXVsdGlwbGV4aW5nCiAgIyBwc2VsZWN0IC0gc3luY2hyb25vdXMgSS9PIG11bHRpcGxleGluZwogICMga2V4ZWNfbG9hZCAtIGxvYWQgYSBuZXcga2VybmVsIGZvciBsYXRlciBleGVjdXRpb24KICAjIGtleGVjX2ZpbGVfbG9hZCAtIGxvYWQgYSBuZXcga2VybmVsIGZvciBsYXRlciBleGVjdXRpb24KICAjIHBlcnNvbmFsaXR5IC0gc2V0IHRoZSBwcm9jZXNzIGV4ZWN1dGlvbiBkb21haW4KICAjIGlvY3RsX2dldGZzbWFwIC0gcmV0cmlldmUgdGhlIHBoeXNpY2FsIGxheW91dCBvZiB0aGUgZmlsZXN5c3RlbQogICMgaW5vdGlmeV9ybV93YXRjaCAtIHJlbW92ZSBhbiBleGlzdGluZyB3YXRjaCBmcm9tIGFuIGlub3RpZnkgaW5zdGFuY2UKICAjIHBlcmZfZXZlbnRfb3BlbiAtIHNldCB1cCBwZXJmb3JtYW5jZSBtb25pdG9yaW5nCiAgIyB0aW1lcl9nZXRvdmVycnVuIC0gZ2V0IG92ZXJydW4gY291bnQgZm9yIGEgUE9TSVggcGVyLXByb2Nlc3MgdGltZXIKICAjIHdhaXQzIC0gd2FpdCBmb3IgcHJvY2VzcyB0byBjaGFuZ2Ugc3RhdGUsIEJTRCBzdHlsZQogICMgd2FpdDQgLSB3YWl0IGZvciBwcm9jZXNzIHRvIGNoYW5nZSBzdGF0ZSwgQlNEIHN0eWxlCiAgIyBsaW5rIC0gbWFrZSBhIG5ldyBuYW1lIGZvciBhIGZpbGUKICAjIGxpbmthdCAtIG1ha2UgYSBuZXcgbmFtZSBmb3IgYSBmaWxlCiAgIyBzY2hlZF9ycl9nZXRfaW50ZXJ2YWwgLSBnZXQgdGhlIFNDSEVEX1JSIGludGVydmFsIGZvciB0aGUgbmFtZWQgcHJvY2VzcwogICMgbXVubWFwIC0gbWFwIG9yIHVubWFwIGZpbGVzIG9yIGRldmljZXMgaW50byBtZW1vcnkKICAjIHNvY2tldGNhbGwgLSBzb2NrZXQgc3lzdGVtIGNhbGxzCiAgIyBtcmVtYXAgLSByZW1hcCBhIHZpcnR1YWwgbWVtb3J5IGFkZHJlc3MKICAjIHZmb3JrIC0gY3JlYXRlIGEgY2hpbGQgcHJvY2VzcyBhbmQgYmxvY2sgcGFyZW50CiAgIyBzZWNjb21wIC0gb3BlcmF0ZSBvbiBTZWN1cmUgQ29tcHV0aW5nIHN0YXRlIG9mIHRoZSBwcm9jZXNzCiAgIyByZXF1ZXN0X2tleSAtIHJlcXVlc3QgYSBrZXkgZnJvbSB0aGUga2VybmVsJ3Mga2V5IG1hbmFnZW1lbnQgZmFjaWxpdHkKICAjIHN5c2NhbGwgLSBpbmRpcmVjdCBzeXN0ZW0gY2FsbAogICMga2NtcCAtIGNvbXBhcmUgdHdvIHByb2Nlc3NlcyB0byBkZXRlcm1pbmUgaWYgdGhleSBzaGFyZSBhIGtlcm5lbCByZXNvdXJjZQogICMgcmVhZGRpciAtIHJlYWQgZGlyZWN0b3J5IGVudHJ5CiAgIyBpb3Blcm0gLSBzZXQgcG9ydCBpbnB1dC9vdXRwdXQgcGVybWlzc2lvbnMKICAjIHNwdV9ydW4gLSBleGVjdXRlIGFuIFNQVSBjb250ZXh0CiAgIyByZWJvb3QgLSByZWJvb3Qgb3IgZW5hYmxlL2Rpc2FibGUgQ3RybC1BbHQtRGVsCiAgIyByZWFkYWhlYWQgLSBpbml0aWF0ZSBmaWxlIHJlYWRhaGVhZCBpbnRvIHBhZ2UgY2FjaGUKICAjIHNjaGVkX2dldHBhcmFtIC0gc2V0IGFuZCBnZXQgc2NoZWR1bGluZyBwYXJhbWV0ZXJzCiAgIyBhY2N0IC0gc3dpdGNoIHByb2Nlc3MgYWNjb3VudGluZyBvbiBvciBvZmYKICAjIHNpZ3N1c3BlbmQgLSB3YWl0IGZvciBhIHNpZ25hbAogICMgcnRfc2lnc3VzcGVuZCAtIHdhaXQgZm9yIGEgc2lnbmFsCiAgIyBleGl0X2dyb3VwIC0gZXhpdCBhbGwgdGhyZWFkcyBpbiBhIHByb2Nlc3MKICAjIHNvY2tldCAtIGNyZWF0ZSBhbiBlbmRwb2ludCBmb3IgY29tbXVuaWNhdGlvbgogICMgaW9jdGxfdXNlcmZhdWx0ZmQgLSBjcmVhdGUgYSBmaWxlIGRlc2NyaXB0b3IgZm9yIGhhbmRsaW5nIHBhZ2UgZmF1bHRzIGluIHVzZXIgc3BhY2UKICAjIHNjaGVkX2dldF9wcmlvcml0eV9tYXggLSBnZXQgc3RhdGljIHByaW9yaXR5IHJhbmdlCiAgIyBzY2hlZF9nZXRfcHJpb3JpdHlfbWluICAtIGdldCBzdGF0aWMgcHJpb3JpdHkgcmFuZ2UKICAjIGdldGRlbnRzIC0gZ2V0IGRpcmVjdG9yeSBlbnRyaWVzCiAgIyBnZXRkZW50czY0IC0gZ2V0IGRpcmVjdG9yeSBlbnRyaWVzCiAgIyBzZWxlY3QgLSBzeW5jaHJvbm91cyBJL08gbXVsdGlwbGV4aW5nCiAgIyBwc2VsZWN0IC0gc3luY2hyb25vdXMgSS9PIG11bHRpcGxleGluZwogICMgYWxsb2NfaHVnZXBhZ2VzIC0gYWxsb2NhdGUgb3IgZnJlZSBodWdlIHBhZ2VzCiAgIyBmcmVlX2h1Z2VwYWdlcyAtIGFsbG9jYXRlIG9yIGZyZWUgaHVnZSBwYWdlcwogICMgZnN5bmMgLSBzeW5jaHJvbml6ZSBhIGZpbGUncyBpbi1jb3JlIHN0YXRlIHdpdGggc3RvcmFnZSBkZXZpY2UKICAjIGZkYXRhc3luYyAtIHN5bmNocm9uaXplIGEgZmlsZSdzIGluLWNvcmUgc3RhdGUgd2l0aCBzdG9yYWdlIGRldmljZQogICMgc3lzY2FsbHMgLSBMaW51eCBzeXN0ZW0gY2FsbHMKICAjIG1lbWZkX2NyZWF0ZSAtIGNyZWF0ZSBhbiBhbm9ueW1vdXMgZmlsZQogICMgbW9kaWZ5X2xkdCAtIGdldCBvciBzZXQgYSBwZXItcHJvY2VzcyBMRFQgZW50cnkKICAjIGdldF9rZXJuZWxfc3ltcyAtIHJldHJpZXZlIGV4cG9ydGVkIGtlcm5lbCBhbmQgbW9kdWxlIHN5bWJvbHMKICAjIGxzZWVrIC0gcmVwb3NpdGlvbiByZWFkL3dyaXRlIGZpbGUgb2Zmc2V0CiAgIyBzaG1hdCAtIFN5c3RlbSBWIHNoYXJlZCBtZW1vcnkgb3BlcmF0aW9ucwogICMgc2htZHQgLSBTeXN0ZW0gViBzaGFyZWQgbWVtb3J5IG9wZXJhdGlvbnMKICAjIHRpbWVyX2RlbGV0ZSAtIGRlbGV0ZSBhIFBPU0lYIHBlci1wcm9jZXNzIHRpbWVyCiAgIyBwZXJmbW9uY3RsIC0gaW50ZXJmYWNlIHRvIElBLTY0IHBlcmZvcm1hbmNlIG1vbml0b3JpbmcgdW5pdAogICMgbW92ZV9wYWdlcyAtIG1vdmUgaW5kaXZpZHVhbCBwYWdlcyBvZiBhIHByb2Nlc3MgdG8gYW5vdGhlciBub2RlCiAgIyBjaGRpciAtIGNoYW5nZSB3b3JraW5nIGRpcmVjdG9yeQogICMgZmNoZGlyIC0gY2hhbmdlIHdvcmtpbmcgZGlyZWN0b3J5CiAgIyB0aW1lIC0gZ2V0IHRpbWUgaW4gc2Vjb25kcwogICMgX2V4aXQgLSB0ZXJtaW5hdGUgdGhlIGNhbGxpbmcgcHJvY2VzcwogICMgX0V4aXQgLSB0ZXJtaW5hdGUgdGhlIGNhbGxpbmcgcHJvY2VzcwogICMgczM5MF9zdGh5aSAtIGVtdWxhdGUgU1RIWUkgaW5zdHJ1Y3Rpb24KICAjIGlvX3N1Ym1pdCAtIHN1Ym1pdCBhc3luY2hyb25vdXMgSS9PIGJsb2NrcyBmb3IgcHJvY2Vzc2luZwogICMgbWxvY2sgLSBsb2NrIGFuZCB1bmxvY2sgbWVtb3J5CiAgIyBtbG9jazIgLSBsb2NrIGFuZCB1bmxvY2sgbWVtb3J5CiAgIyBtdW5sb2NrIC0gbG9jayBhbmQgdW5sb2NrIG1lbW9yeQogICMgbWxvY2thbGwgLSBsb2NrIGFuZCB1bmxvY2sgbWVtb3J5CiAgIyBtdW5sb2NrYWxsIC0gbG9jayBhbmQgdW5sb2NrIG1lbW9yeQogICMgdW1hc2sgLSBzZXQgZmlsZSBtb2RlIGNyZWF0aW9uIG1hc2sKICAjIGFyY2hfcHJjdGwgLSBzZXQgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHRocmVhZCBzdGF0ZQogICMgdXNlbGliIC0gbG9hZCBzaGFyZWQgbGlicmFyeQogICMgc2VuZGZpbGUgLSB0cmFuc2ZlciBkYXRhIGJldHdlZW4gZmlsZSBkZXNjcmlwdG9ycwogICMgc2htY3RsIC0gU3lzdGVtIFYgc2hhcmVkIG1lbW9yeSBjb250cm9sCiAgIyBlcG9sbF93YWl0IC0gd2FpdCBmb3IgYW4gSS9PIGV2ZW50IG9uIGFuIGVwb2xsIGZpbGUgZGVzY3JpcHRvcgogICMgZXBvbGxfcHdhaXQgLSB3YWl0IGZvciBhbiBJL08gZXZlbnQgb24gYW4gZXBvbGwgZmlsZSBkZXNjcmlwdG9yCiAgIyBzaWdhbHRzdGFjayAtIHNldCBhbmQvb3IgZ2V0IHNpZ25hbCBzdGFjayBjb250ZXh0CiAgIyBpb2N0bCAtIGNvbnRyb2wgZGV2aWNlCiAgIyBzaWduYWxmZCAtIGNyZWF0ZSBhIGZpbGUgZGVzY3JpcHRvciBmb3IgYWNjZXB0aW5nIHNpZ25hbHMKICAjIHVuc2hhcmUgLSBkaXNhc3NvY2lhdGUgcGFydHMgb2YgdGhlIHByb2Nlc3MgZXhlY3V0aW9uIGNvbnRleHQKICAjIGNocm9vdCAtIGNoYW5nZSByb290IGRpcmVjdG9yeQogICMgbWFkdmlzZSAtIGdpdmUgYWR2aWNlIGFib3V0IHVzZSBvZiBtZW1vcnkKICAjIGdldHRpZCAtIGdldCB0aHJlYWQgaWRlbnRpZmljYXRpb24KICAjIGdldHNvY2tuYW1lIC0gZ2V0IHNvY2tldCBuYW1lCiAgIyBpb19kZXN0cm95IC0gZGVzdHJveSBhbiBhc3luY2hyb25vdXMgSS9PIGNvbnRleHQKICAjIHNldHVwIC0gc2V0dXAgZGV2aWNlcyBhbmQgZmlsZXN5c3RlbXMsIG1vdW50IHJvb3QgZmlsZXN5c3RlbQogICMgbnRwX2FkanRpbWUgLSB0dW5lIGtlcm5lbCBjbG9jawogICMgc2VtZ2V0IC0gZ2V0IGEgU3lzdGVtIFYgc2VtYXBob3JlIHNldCBpZGVudGlmaWVyCiAgIyBnZXR1aWQgLSBnZXQgdXNlciBpZGVudGl0eQogICMgZ2V0ZXVpZCAtIGdldCB1c2VyIGlkZW50aXR5CiAgIyBfc3lzY2FsbCAtIGludm9raW5nIGEgc3lzdGVtIGNhbGwgd2l0aG91dCBsaWJyYXJ5IHN1cHBvcnQgKE9CU09MRVRFKQogICMgc2NoZWRfc2V0YWZmaW5pdHkgLSBcIHNldCBhbmQgZ2V0IGEgdGhyZWFkJ3MgQ1BVIGFmZmluaXR5IG1hc2sKICAjIHNjaGVkX2dldGFmZmluaXR5IC0gXCBzZXQgYW5kIGdldCBhIHRocmVhZCdzIENQVSBhZmZpbml0eSBtYXNrCiAgIyBjYWNoZWZsdXNoIC0gZmx1c2ggY29udGVudHMgb2YgaW5zdHJ1Y3Rpb24gYW5kL29yIGRhdGEgY2FjaGUKICAjIHBpdm90X3Jvb3QgLSBjaGFuZ2UgdGhlIHJvb3QgbW91bnQKICAjIG1zZ2N0bCAtIFN5c3RlbSBWIG1lc3NhZ2UgY29udHJvbCBvcGVyYXRpb25zCiAgIyBpb2N0bF9mYXQgLSBtYW5pcHVsYXRpbmcgdGhlIEZBVCBmaWxlc3lzdGVtCiAgIyBzZXRwZ2lkIC0gc2V0L2dldCBwcm9jZXNzIGdyb3VwCiAgIyBnZXRwZ2lkIC0gc2V0L2dldCBwcm9jZXNzIGdyb3VwCiAgIyBzZXRwZ3JwIC0gc2V0L2dldCBwcm9jZXNzIGdyb3VwCiAgIyBnZXRwZ3JwIC0gc2V0L2dldCBwcm9jZXNzIGdyb3VwCiAgIyBzb2NrZXRwYWlyIC0gY3JlYXRlIGEgcGFpciBvZiBjb25uZWN0ZWQgc29ja2V0cwogICMgYmRmbHVzaCAtIHN0YXJ0LCBmbHVzaCwgb3IgdHVuZSBidWZmZXItZGlydHktZmx1c2ggZGFlbW9uCiAgIyBhbGFybSAtIHNldCBhbiBhbGFybSBjbG9jayBmb3IgZGVsaXZlcnkgb2YgYSBzaWduYWwKICAjIHRpbWVyX3NldHRpbWUgLSBhcm0vZGlzYXJtIGFuZCBmZXRjaCBzdGF0ZSBvZiBQT1NJWCBwZXItcHJvY2VzcyB0aW1lcgogICMgdGltZXJfZ2V0dGltZSAtIGFybS9kaXNhcm0gYW5kIGZldGNoIHN0YXRlIG9mIFBPU0lYIHBlci1wcm9jZXNzIHRpbWVyCiAgIyBhZGRfa2V5IC0gYWRkIGEga2V5IHRvIHRoZSBrZXJuZWwncyBrZXkgbWFuYWdlbWVudCBmYWNpbGl0eQogICMgcnRfc2lncXVldWVpbmZvIC0gcXVldWUgYSBzaWduYWwgYW5kIGRhdGEKICAjIHJ0X3Rnc2lncXVldWVpbmZvIC0gcXVldWUgYSBzaWduYWwgYW5kIGRhdGEKICAjIHVzZXJmYXVsdGZkIC0gY3JlYXRlIGEgZmlsZSBkZXNjcmlwdG9yIGZvciBoYW5kbGluZyBwYWdlIGZhdWx0cyBpbiB1c2VyIHNwYWNlCiAgIyBzZW1vcCAtIFN5c3RlbSBWIHNlbWFwaG9yZSBvcGVyYXRpb25zCiAgIyBzZW10aW1lZG9wIC0gU3lzdGVtIFYgc2VtYXBob3JlIG9wZXJhdGlvbnMKICAjIGdldGdpZCAtIGdldCBncm91cCBpZGVudGl0eQogICMgZ2V0ZWdpZCAtIGdldCBncm91cCBpZGVudGl0eQogICMgZ2V0cGlkIC0gZ2V0IHByb2Nlc3MgaWRlbnRpZmljYXRpb24KICAjIGdldHBwaWQgLSBnZXQgcHJvY2VzcyBpZGVudGlmaWNhdGlvbgogICMgc2lncHJvY21hc2sgLSBleGFtaW5lIGFuZCBjaGFuZ2UgYmxvY2tlZCBzaWduYWxzCiAgIyBydF9zaWdwcm9jbWFzayAtIGV4YW1pbmUgYW5kIGNoYW5nZSBibG9ja2VkIHNpZ25hbHMKICAjIHVuYW1lIC0gZ2V0IG5hbWUgYW5kIGluZm9ybWF0aW9uIGFib3V0IGN1cnJlbnQga2VybmVsCiAgIyBzdGF0eCAtIGdldCBmaWxlIHN0YXR1cyAoZXh0ZW5kZWQpCiAgIyBpb2N0bF9maWNsb25lcmFuZ2UgLSBzaGFyZSBzb21lIHRoZSBkYXRhIG9mIG9uZSBmaWxlIHdpdGggYW5vdGhlciBmaWxlCiAgIyBpb2N0bF9maWNsb25lIC0gc2hhcmUgc29tZSB0aGUgZGF0YSBvZiBvbmUgZmlsZSB3aXRoIGFub3RoZXIgZmlsZQogICMgbXFfZ2V0c2V0YXR0ciAtIGdldC9zZXQgbWVzc2FnZSBxdWV1ZSBhdHRyaWJ1dGVzCiAgIyBpb3ByaW9fZ2V0IC0gZ2V0L3NldCBJL08gc2NoZWR1bGluZyBjbGFzcyBhbmQgcHJpb3JpdHkKICAjIGlvcHJpb19zZXQgLSBnZXQvc2V0IEkvTyBzY2hlZHVsaW5nIGNsYXNzIGFuZCBwcmlvcml0eQogICMgZXBvbGxfY3RsIC0gY29udHJvbCBpbnRlcmZhY2UgZm9yIGFuIGVwb2xsIGZpbGUgZGVzY3JpcHRvcgogICMgc3luYyAtIGNvbW1pdCBmaWxlc3lzdGVtIGNhY2hlcyB0byBkaXNrCiAgIyBzeW5jZnMgLSBjb21taXQgZmlsZXN5c3RlbSBjYWNoZXMgdG8gZGlzawogICMgc2V0c2lkIC0gY3JlYXRlcyBhIHNlc3Npb24gYW5kIHNldHMgdGhlIHByb2Nlc3MgZ3JvdXAgSUQKICAjIHNodXRkb3duIC0gc2h1dCBkb3duIHBhcnQgb2YgYSBmdWxsLWR1cGxleCBjb25uZWN0aW9uCiAgIyBnZXRzaWQgLSBnZXQgc2Vzc2lvbiBJRAogICMgZ2V0X3RocmVhZF9hcmVhIC0gbWFuaXB1bGF0ZSB0aHJlYWQtbG9jYWwgc3RvcmFnZSBpbmZvcm1hdGlvbgogICMgc2V0X3RocmVhZF9hcmVhIC0gbWFuaXB1bGF0ZSB0aHJlYWQtbG9jYWwgc3RvcmFnZSBpbmZvcm1hdGlvbgogICMgdGltZXJmZF9jcmVhdGUgLSB0aW1lcnMgdGhhdCBub3RpZnkgdmlhIGZpbGUgZGVzY3JpcHRvcnMKICAjIHRpbWVyZmRfc2V0dGltZSAtIHRpbWVycyB0aGF0IG5vdGlmeSB2aWEgZmlsZSBkZXNjcmlwdG9ycwogICMgdGltZXJmZF9nZXR0aW1lIC0gdGltZXJzIHRoYXQgbm90aWZ5IHZpYSBmaWxlIGRlc2NyaXB0b3JzCiAgIyBpb2N0bF9maWRlZHVwZXJhbmdlIC0gc2hhcmUgc29tZSB0aGUgZGF0YSBvZiBvbmUgZmlsZSB3aXRoIGFub3RoZXIgZmlsZQogICMgbmFtZV90b19oYW5kbGVfYXQgLSBvYnRhaW4gaGFuZGxlIGZvciBhIHBhdGhuYW1lIGFuZCBvcGVuIGZpbGUgdmlhIGEgaGFuZGxlCiAgIyBvcGVuX2J5X2hhbmRsZV9hdCAtIG9idGFpbiBoYW5kbGUgZm9yIGEgcGF0aG5hbWUgYW5kIG9wZW4gZmlsZSB2aWEgYSBoYW5kbGUKICAjIGZ1dGV4IC0gZmFzdCB1c2VyLXNwYWNlIGxvY2tpbmcKICAjIGlvY3RsX25zIC0gaW9jdGwoKSBvcGVyYXRpb25zIGZvciBMaW51eCBuYW1lc3BhY2VzCiAgIyBwaWRmZF9zZW5kX3NpZ25hbCAtIHNlbmQgYSBzaWduYWwgdG8gYSBwcm9jZXNzIHNwZWNpZmllZCBieSBhIGZpbGUgZGVzY3JpcHRvcgogICMgY2xvbmUgLSBjcmVhdGUgYSBjaGlsZCBwcm9jZXNzCiAgIyBfX2Nsb25lMiAtIGNyZWF0ZSBhIGNoaWxkIHByb2Nlc3MKICAjIGNsb25lMyAtIGNyZWF0ZSBhIGNoaWxkIHByb2Nlc3MKICAjIHRpbWVzIC0gZ2V0IHByb2Nlc3MgdGltZXMKICAjIHN5c2luZm8gLSByZXR1cm4gc3lzdGVtIGluZm9ybWF0aW9uCiAgIyBpcGMgLSBTeXN0ZW0gViBJUEMgc3lzdGVtIGNhbGxzCiAgIyBldmVudGZkIC0gY3JlYXRlIGEgZmlsZSBkZXNjcmlwdG9yIGZvciBldmVudCBub3RpZmljYXRpb24KICAjIHdhaXQgLSB3YWl0IGZvciBwcm9jZXNzIHRvIGNoYW5nZSBzdGF0ZQogICMgd2FpdHBpZCAtIHdhaXQgZm9yIHByb2Nlc3MgdG8gY2hhbmdlIHN0YXRlCiAgIyB3YWl0aWQgLSB3YWl0IGZvciBwcm9jZXNzIHRvIGNoYW5nZSBzdGF0ZQogICMgZ2V0ZG9tYWlubmFtZSAtIGdldC9zZXQgTklTIGRvbWFpbiBuYW1lCiAgIyBpZGxlIC0gbWFrZSBwcm9jZXNzIDAgaWRsZQogICMgaW5vdGlmeV9hZGRfd2F0Y2ggLSBhZGQgYSB3YXRjaCB0byBhbiBpbml0aWFsaXplZCBpbm90aWZ5IGluc3RhbmNlCiAgIyBnZXRfbWVtcG9saWN5IC0gcmV0cmlldmUgTlVNQSBtZW1vcnkgcG9saWN5IGZvciBhIHRocmVhZAogICMgYnBmIC0gcGVyZm9ybSBhIGNvbW1hbmQgb24gYW4gZXh0ZW5kZWQgQlBGIG1hcCBvciBwcm9ncmFtCiAgIyBnZXRzb2Nrb3B0IC0gZ2V0IGFuZCBzZXQgb3B0aW9ucyBvbiBzb2NrZXRzCiAgIyBzZXRzb2Nrb3B0IC0gZ2V0IGFuZCBzZXQgb3B0aW9ucyBvbiBzb2NrZXRzCiAgIyBnZXRpdGltZXIgLSBnZXQgb3Igc2V0IHZhbHVlIG9mIGFuIGludGVydmFsIHRpbWVyCiAgIyBzZXRpdGltZXIgLSBnZXQgb3Igc2V0IHZhbHVlIG9mIGFuIGludGVydmFsIHRpbWVyCiAgIyBtZW1iYXJyaWVyIC0gaXNzdWUgbWVtb3J5IGJhcnJpZXJzIG9uIGEgc2V0IG9mIHRocmVhZHMKICAjIG1wcm90ZWN0IC0gc2V0IHByb3RlY3Rpb24gb24gYSByZWdpb24gb2YgbWVtb3J5CiAgIyBwa2V5X21wcm90ZWN0IC0gc2V0IHByb3RlY3Rpb24gb24gYSByZWdpb24gb2YgbWVtb3J5CiAgIyBnZXRjcHUgLSBkZXRlcm1pbmUgQ1BVIGFuZCBOVU1BIG5vZGUgb24gd2hpY2ggdGhlIGNhbGxpbmcgdGhyZWFkIGlzIHJ1bm5pbmcKICAjIGlvY3RsX2ZzbGFiZWwgLSBnZXQgb3Igc2V0IGEgZmlsZXN5c3RlbSBsYWJlbAogICMgbGlzdHhhdHRyIC0gbGlzdCBleHRlbmRlZCBhdHRyaWJ1dGUgbmFtZXMKICAjIGxsaXN0eGF0dHIgLSBsaXN0IGV4dGVuZGVkIGF0dHJpYnV0ZSBuYW1lcwogICMgZmxpc3R4YXR0ciAtIGxpc3QgZXh0ZW5kZWQgYXR0cmlidXRlIG5hbWVzCiAgIyBfbGxzZWVrIC0gcmVwb3NpdGlvbiByZWFkL3dyaXRlIGZpbGUgb2Zmc2V0CiAgIyBmY250bCAtIG1hbmlwdWxhdGUgZmlsZSBkZXNjcmlwdG9yCiAgIyB1c3RhdCAtIGdldCBmaWxlc3lzdGVtIHN0YXRpc3RpY3MKICAjIHNpZ25hbCAtIEFOU0kgQyBzaWduYWwgaGFuZGxpbmcKICAjIG5hbm9zbGVlcCAtIGhpZ2gtcmVzb2x1dGlvbiBzbGVlcAogICMgY29ubmVjdCAtIGluaXRpYXRlIGEgY29ubmVjdGlvbiBvbiBhIHNvY2tldAogICMgdm04Nm9sZCAtIGVudGVyIHZpcnR1YWwgODA4NiBtb2RlCiAgIyB2bTg2IC0gZW50ZXIgdmlydHVhbCA4MDg2IG1vZGUKICAjIGZhbm90aWZ5X2luaXQgLSBjcmVhdGUgYW5kIGluaXRpYWxpemUgZmFub3RpZnkgZ3JvdXAKICAjIG1pZ3JhdGVfcGFnZXMgLSBtb3ZlIGFsbCBwYWdlcyBpbiBhIHByb2Nlc3MgdG8gYW5vdGhlciBzZXQgb2Ygbm9kZXMKICAjIHJlc3RhcnRfc3lzY2FsbCAtIHJlc3RhcnQgYSBzeXN0ZW0gY2FsbCBhZnRlciBpbnRlcnJ1cHRpb24gYnkgYSBzdG9wIHNpZ25hbAogICMgY2xvc2UgLSBjbG9zZSBhIGZpbGUgZGVzY3JpcHRvcgogICMgbXNncmN2IC0gU3lzdGVtIFYgbWVzc2FnZSBxdWV1ZSBvcGVyYXRpb25zCiAgIyBtc2dzbmQgLSBTeXN0ZW0gViBtZXNzYWdlIHF1ZXVlIG9wZXJhdGlvbnMKICAjIHJlYWR2IC0gcmVhZCBvciB3cml0ZSBkYXRhIGludG8gbXVsdGlwbGUgYnVmZmVycwogICMgd3JpdGV2IC0gcmVhZCBvciB3cml0ZSBkYXRhIGludG8gbXVsdGlwbGUgYnVmZmVycwogICMgcHJlYWR2IC0gcmVhZCBvciB3cml0ZSBkYXRhIGludG8gbXVsdGlwbGUgYnVmZmVycwogICMgcHdyaXRldiAtIHJlYWQgb3Igd3JpdGUgZGF0YSBpbnRvIG11bHRpcGxlIGJ1ZmZlcnMKICAjIHByZWFkdjIgLSByZWFkIG9yIHdyaXRlIGRhdGEgaW50byBtdWx0aXBsZSBidWZmZXJzCiAgIyBwd3JpdGV2MiAtIHJlYWQgb3Igd3JpdGUgZGF0YSBpbnRvIG11bHRpcGxlIGJ1ZmZlcnMKICAjIHN5c2xvZyAtIHJlYWQgYW5kL29yIGNsZWFyIGtlcm5lbCBtZXNzYWdlIHJpbmcgYnVmZmVyOyBzZXQgY29uc29sZV9sb2dsZXZlbAogICMga2xvZ2N0bCAtIHJlYWQgYW5kL29yIGNsZWFyIGtlcm5lbCBtZXNzYWdlIHJpbmcgYnVmZmVyOyBzZXQgY29uc29sZV9sb2dsZXZlbAogICMgc2NoZWRfeWllbGQgLSB5aWVsZCB0aGUgcHJvY2Vzc29yCiAgIyB2aGFuZ3VwIC0gdmlydHVhbGx5IGhhbmd1cCB0aGUgY3VycmVudCB0ZXJtaW5hbAogICMgaW9jdGxfaWZsYWdzIC0gaW9jdGwoKSBvcGVyYXRpb25zIGZvciBpbm9kZSBmbGFncwogICMgc2dldG1hc2sgLSBtYW5pcHVsYXRpb24gb2Ygc2lnbmFsIG1hc2sgKG9ic29sZXRlKQogICMgc3NldG1hc2sgLSBtYW5pcHVsYXRpb24gb2Ygc2lnbmFsIG1hc2sgKG9ic29sZXRlKQogICMgc3luY19maWxlX3JhbmdlIC0gc3luYyBhIGZpbGUgc2VnbWVudCB3aXRoIGRpc2sKICAjIGNvcHlfZmlsZV9yYW5nZSAtIENvcHkgYSByYW5nZSBvZiBkYXRhIGZyb20gb25lIGZpbGUgdG8gYW5vdGhlcgogICMgc2lncGVuZGluZyAtIGV4YW1pbmUgcGVuZGluZyBzaWduYWxzCiAgIyBydF9zaWdwZW5kaW5nIC0gZXhhbWluZSBwZW5kaW5nIHNpZ25hbHMKICAjIGdldHVud2luZCAtIGNvcHkgdGhlIHVud2luZCBkYXRhIHRvIGNhbGxlcidzIGJ1ZmZlcgogICMgbXN5bmMgLSBzeW5jaHJvbml6ZSBhIGZpbGUgd2l0aCBhIG1lbW9yeSBtYXAKICAjIGdldF9yb2J1c3RfbGlzdCAtIGdldC9zZXQgbGlzdCBvZiByb2J1c3QgZnV0ZXhlcwogICMgc2V0X3JvYnVzdF9saXN0IC0gZ2V0L3NldCBsaXN0IG9mIHJvYnVzdCBmdXRleGVzCiAgIyBkdXAgLSBkdXBsaWNhdGUgYSBmaWxlIGRlc2NyaXB0b3IKICAjIGR1cDIgLSBkdXBsaWNhdGUgYSBmaWxlIGRlc2NyaXB0b3IKICAjIGR1cDMgLSBkdXBsaWNhdGUgYSBmaWxlIGRlc2NyaXB0b3IKICAjIHMzOTBfcGNpX21taW9fd3JpdGUgLSB0cmFuc2ZlciBkYXRhIHRvL2Zyb20gUENJIE1NSU8gbWVtb3J5IHBhZ2UKICAjIHMzOTBfcGNpX21taW9fcmVhZCAtIHRyYW5zZmVyIGRhdGEgdG8vZnJvbSBQQ0kgTU1JTyBtZW1vcnkgcGFnZQogICMgcGF1c2UgLSB3YWl0IGZvciBzaWduYWwKICAjIHN3YXBvbiAtIHN0YXJ0L3N0b3Agc3dhcHBpbmcgdG8gZmlsZS9kZXZpY2UKICAjIHN3YXBvZmYgLSBzdGFydC9zdG9wIHN3YXBwaW5nIHRvIGZpbGUvZGV2aWNlCgogICMgUmVjb3JkIHR5cGUgbm9ybWFsaXphdGlvbnMKICAjIFVzZWZ1bCBsaW5rczoKICAjIGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS90b3J2YWxkcy9saW51eC92NC4xNi9pbmNsdWRlL3VhcGkvbGludXgvYXVkaXQuaAogICMgaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2xpbnV4LWF1ZGl0L2F1ZGl0LXVzZXJzcGFjZS80ZDkzMzMwMWIxODM1Y2FmYTA4YjllOWVmNzA1YzhmYjZjOTZjYjYyL2xpYi9saWJhdWRpdC5oCiAgIyBodHRwczovL3d3dy5lbGFzdGljLmNvL2d1aWRlL2VuL2Vjcy9jdXJyZW50L2Vjcy1hbGxvd2VkLXZhbHVlcy1ldmVudC1jYXRlZ29yeS5odG1sCgogICMgSUFNIHJlbGF0ZWQgZXZlbnRzCgogICMgQVVESVRfQUNDVF9MT0NLIC0gVXNlcidzIGFjY291bnQgbG9ja2VkIGJ5IGFkbWluCiAgLSByZWNvcmRfdHlwZXM6IEFDQ1RfTE9DSwogICAgYWN0aW9uOiBsb2NrZWQtYWNjb3VudAogICAgZWNzOgogICAgICA8PDogKmVjcy1pYW0KICAgICAgdHlwZToKICAgICAgICAtIHVzZXIKICAgICAgICAtIGluZm8KICAjIEFVRElUX0FDQ1RfVU5MT0NLIC0gVXNlcidzIGFjY291bnQgdW5sb2NrZWQgYnkgYWRtaW4KICAtIHJlY29yZF90eXBlczogQUNDVF9VTkxPQ0sKICAgIGFjdGlvbjogdW5sb2NrZWQtYWNjb3VudAogICAgZWNzOgogICAgICA8PDogKmVjcy1pYW0KICAgICAgdHlwZToKICAgICAgICAtIHVzZXIKICAgICAgICAtIGluZm8KICAjIEFVRElUX0FERF9HUk9VUCAtIEdyb3VwIGFjY291bnQgYWRkZWQKICAtIHJlY29yZF90eXBlczogQUREX0dST1VQCiAgICBhY3Rpb246IGFkZGVkLWdyb3VwLWFjY291bnQtdG8KICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogW2lkLCBhY2N0XQogICAgICB3aGF0OiBhY2NvdW50CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWlhbQogICAgICA8PDogKmVjcy1ncm91cC1tb2RpZmljYXRpb24tbWFwcGluZ3MKICAgICAgdHlwZToKICAgICAgICAtIGdyb3VwCiAgICAgICAgLSBjcmVhdGlvbgoKICAjIEFVRElUX0FERF9VU0VSIC0gVXNlciBhY2NvdW50IGFkZGVkCiAgLSByZWNvcmRfdHlwZXM6IEFERF9VU0VSCiAgICBhY3Rpb246IGFkZGVkLXVzZXItYWNjb3VudAogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBbaWQsIGFjY3RdCiAgICAgIHdoYXQ6IGFjY291bnQKICAgIGVjczoKICAgICAgPDw6ICplY3MtaWFtCiAgICAgIDw8OiAqZWNzLXVzZXItbW9kaWZpY2F0aW9uLW1hcHBpbmdzCiAgICAgIHR5cGU6CiAgICAgICAgLSB1c2VyCiAgICAgICAgLSBjcmVhdGlvbgogICMgQVVESVRfREVMX0dST1VQIC0gR3JvdXAgYWNjb3VudCBkZWxldGVkCiAgLSByZWNvcmRfdHlwZXM6IERFTF9HUk9VUAogICAgYWN0aW9uOiBkZWxldGVkLWdyb3VwLWFjY291bnQtZnJvbQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBbaWQsIGFjY3RdCiAgICAgIHdoYXQ6IGFjY291bnQKICAgIGVjczoKICAgICAgPDw6ICplY3MtaWFtCiAgICAgIDw8OiAqZWNzLWdyb3VwLW1vZGlmaWNhdGlvbi1tYXBwaW5ncwogICAgICB0eXBlOgogICAgICAgIC0gZ3JvdXAKICAgICAgICAtIGRlbGV0aW9uCiAgIyBBVURJVF9ERUxfVVNFUiAtIFVzZXIgYWNjb3VudCBkZWxldGVkCiAgLSByZWNvcmRfdHlwZXM6IERFTF9VU0VSCiAgICBhY3Rpb246IGRlbGV0ZWQtdXNlci1hY2NvdW50CiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IFtpZCwgYWNjdF0KICAgICAgd2hhdDogYWNjb3VudAogICAgZWNzOgogICAgICA8PDogKmVjcy1pYW0KICAgICAgPDw6ICplY3MtdXNlci1tb2RpZmljYXRpb24tbWFwcGluZ3MKICAgICAgdHlwZToKICAgICAgICAtIHVzZXIKICAgICAgICAtIGRlbGV0aW9uCiAgIyBBVURJVF9HUlBfTUdNVCAtIEdyb3VwIGFjY291bnQgYXR0ciB3YXMgbW9kaWZpZWQKICAtIHJlY29yZF90eXBlczogR1JQX01HTVQKICAgIGFjdGlvbjogbW9kaWZpZWQtZ3JvdXAtYWNjb3VudAogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBbaWQsIGFjY3RdCiAgICAgIHdoYXQ6IGFjY291bnQKICAgIGVjczoKICAgICAgPDw6ICplY3MtaWFtCiAgICAgIHR5cGU6CiAgICAgICAgLSBncm91cAogICAgICAgIC0gY2hhbmdlCiAgICAgIG1hcHBpbmdzOgogICAgICAgIC0gZnJvbTogc3ViamVjdC5wcmltYXJ5CiAgICAgICAgICB0bzogdXNlcgogICAgICAgIC0gZnJvbTogc3ViamVjdC5zZWNvbmRhcnkKICAgICAgICAgIHRvOiBncm91cAogICAgICAgIC0gZnJvbTogdWlkLnVpZAogICAgICAgICAgdG86IHVzZXIuZWZmZWN0aXZlCiAgIyBBVURJVF9ST0xFX0FTU0lHTiAtIEFkbWluIGFzc2lnbmVkIHVzZXIgdG8gcm9sZQogIC0gcmVjb3JkX3R5cGVzOiBST0xFX0FTU0lHTgogICAgYWN0aW9uOiBhc3NpZ25lZC11c2VyLXJvbGUtdG8KICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogW2lkLCBhY2N0XQogICAgICB3aGF0OiBhY2NvdW50CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWlhbQogICAgICB0eXBlOgogICAgICAgIC0gdXNlcgogICAgICAgIC0gY2hhbmdlCiAgIyBBVURJVF9ST0xFX01PRElGWSAtIEFkbWluIG1vZGlmaWVkIGEgcm9sZQogIC0gcmVjb3JkX3R5cGVzOiBST0xFX01PRElGWQogICAgYWN0aW9uOiBtb2RpZmllZC1yb2xlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWlhbQogICAgICB0eXBlOgogICAgICAgIC0gY2hhbmdlCiAgIyBBVURJVF9ST0xFX1JFTU9WRSAtIEFkbWluIHJlbW92ZWQgdXNlciBmcm9tIHJvbGUKICAtIHJlY29yZF90eXBlczogUk9MRV9SRU1PVkUKICAgIGFjdGlvbjogcmVtb3ZlZC11c2VyLXJvbGUtZnJvbQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBbaWQsIGFjY3RdCiAgICAgIHdoYXQ6IGFjY291bnQKICAgIGVjczoKICAgICAgPDw6ICplY3MtaWFtCiAgICAgIHR5cGU6CiAgICAgICAgLSB1c2VyCiAgICAgICAgLSBjaGFuZ2UKICAjIEFVRElUX1VTRVJfTUdNVCAtIFVzZXIgYWNjdCBhdHRyaWJ1dGUgY2hhbmdlCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBVU0VSX01HTVQKICAgIGFjdGlvbjogbW9kaWZpZWQtdXNlci1hY2NvdW50CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWlhbQogICAgICB0eXBlOgogICAgICAgIC0gdXNlcgogICAgICAgIC0gY2hhbmdlCiAgICAgIG1hcHBpbmdzOgogICAgICAgIC0gZnJvbTogc3ViamVjdC5wcmltYXJ5CiAgICAgICAgICB0bzogdXNlcgogICAgICAgIC0gZnJvbTogc3ViamVjdC5zZWNvbmRhcnkKICAgICAgICAgIHRvOiB1c2VyLnRhcmdldAogICAgICAgIC0gZnJvbTogdWlkLnVpZAogICAgICAgICAgdG86IHVzZXIuZWZmZWN0aXZlCiAgIyBBVURJVF9VU0VSX0NIQVVUSFRPSyAtIFVzZXIgYWNjdCBwYXNzd29yZCBvciBwaW4gY2hhbmdlZAogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogVVNFUl9DSEFVVEhUT0sKICAgIGFjdGlvbjogY2hhbmdlZC1wYXNzd29yZAogICAgZWNzOgogICAgICA8PDogKmVjcy1pYW0KICAgICAgdHlwZToKICAgICAgICAtIHVzZXIKICAgICAgICAtIGNoYW5nZQogICAgICBtYXBwaW5nczoKICAgICAgICAtIGZyb206IHN1YmplY3QucHJpbWFyeQogICAgICAgICAgdG86IHVzZXIKICAgICAgICAtIGZyb206IHVpZC51aWQKICAgICAgICAgIHRvOiB1c2VyLmVmZmVjdGl2ZQogICAgICAgIC0gZnJvbTogc3ViamVjdC5zZWNvbmRhcnkKICAgICAgICAgIHRvOiB1c2VyLnRhcmdldAoKICAjIEFVRElUX0dSUF9DSEFVVEhUT0sgLSBHcm91cCBhY2N0IHBhc3N3b3JkIG9yIHBpbiBjaGFuZ2VkCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBHUlBfQ0hBVVRIVE9LCiAgICBhY3Rpb246IGNoYW5nZWQtZ3JvdXAtcGFzc3dvcmQKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogYWNjdAogICAgICB3aGF0OiB1c2VyLXNlc3Npb24KICAgIGVjczoKICAgICAgPDw6ICplY3MtaWFtCiAgICAgIHR5cGU6CiAgICAgICAgLSBncm91cAogICAgICAgIC0gY2hhbmdlCiAgICAgIG1hcHBpbmdzOgogICAgICAgIC0gZnJvbTogc3ViamVjdC5wcmltYXJ5CiAgICAgICAgICB0bzogdXNlcgogICAgICAgIC0gZnJvbTogdWlkLnVpZAogICAgICAgICAgdG86IHVzZXIuZWZmZWN0aXZlCiAgICAgICAgLSBmcm9tOiBzdWJqZWN0LnNlY29uZGFyeQogICAgICAgICAgdG86IGdyb3VwCgogICMgQXV0aGVudGljYXRpb24gcmVsYXRlZCBldmVudHMKCiAgIyBBVURJVF9DUkVEX0FDUSAtIFVzZXIgY3JlZGVudGlhbCBhY3F1aXJlZAogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogQ1JFRF9BQ1EKICAgIGFjdGlvbjogYWNxdWlyZWQtY3JlZGVudGlhbHMKICAgIGVjczogKmVjcy1hdXRoCiAgIyBBVURJVF9DUkVEX0RJU1AgLSBVc2VyIGNyZWRlbnRpYWwgZGlzcG9zZWQKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IENSRURfRElTUAogICAgYWN0aW9uOiBkaXNwb3NlZC1jcmVkZW50aWFscwogICAgZWNzOiAqZWNzLWF1dGgKICAjIEFVRElUX0NSRURfUkVGUiAtIFVzZXIgY3JlZGVudGlhbCByZWZyZXNoZWQKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IENSRURfUkVGUgogICAgYWN0aW9uOiByZWZyZXNoZWQtY3JlZGVudGlhbHMKICAgIGVjczogKmVjcy1hdXRoCiAgIyBBVURJVF9HUlBfQVVUSCAtIEF1dGhlbnRpY2F0aW9uIGZvciBncm91cCBwYXNzd29yZAogIC0gcmVjb3JkX3R5cGVzOiBHUlBfQVVUSAogICAgYWN0aW9uOiBhdXRoZW50aWNhdGVkLXRvLWdyb3VwCiAgICBlY3M6ICplY3MtYXV0aAogICMgQVVESVRfTE9HSU4gLSBEZWZpbmUgdGhlIGxvZ2luIGlkIGFuZCBpbmZvcm1hdGlvbgogIC0gcmVjb3JkX3R5cGVzOiBMT0dJTgogICAgYWN0aW9uOiBjaGFuZ2VkLWxvZ2luLWlkLXRvCiAgICBzdWJqZWN0OgogICAgICBwcmltYXJ5OiBbb2xkX2F1aWQsIG9sZC1hdWlkXQogICAgICBzZWNvbmRhcnk6IHVpZAogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBbbmV3LWF1aWQsIG5ld19hdWlkLCBhdWlkXQogICAgICB3aGF0OiB1c2VyLXNlc3Npb24KICAgIGVjczoKICAgICAgPDw6ICplY3MtYXV0aAogICAgICB0eXBlOiBzdGFydAogICAgICBtYXBwaW5nczoKICAgICAgICAtIGZyb206IHN1YmplY3QucHJpbWFyeQogICAgICAgICAgdG86IHVzZXIKICAgICAgICAtIGZyb206IG9iamVjdC5wcmltYXJ5CiAgICAgICAgICB0bzogdXNlci5lZmZlY3RpdmUKICAjIEFVRElUX1VTRVJfQUNDVCAtIFVzZXIgc3lzdGVtIGFjY2VzcyBhdXRob3JpemF0aW9uCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBVU0VSX0FDQ1QKICAgIGFjdGlvbjogd2FzLWF1dGhvcml6ZWQKICAgIGVjczogKmVjcy1hdXRoCiAgIyBBVURJVF9VU0VSX0FVVEggLSBVc2VyIHN5c3RlbSBhY2Nlc3MgYXV0aGVudGljYXRpb24KICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IFVTRVJfQVVUSAogICAgYWN0aW9uOiBhdXRoZW50aWNhdGVkCiAgICBlY3M6ICplY3MtYXV0aAogICMgQVVESVRfVVNFUl9FTkQgLSBVc2VyIHNlc3Npb24gZW5kCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBVU0VSX0VORAogICAgYWN0aW9uOiBlbmRlZC1zZXNzaW9uCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXNlc3Npb24KICAgICAgdHlwZTogZW5kCiAgIyBBVURJVF9VU0VSX0VSUiAtIFVzZXIgYWNjdCBzdGF0ZSBlcnJvcgogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogVVNFUl9FUlIKICAgIGFjdGlvbjogZXJyb3IKICAgIHNvdXJjZV9pcDogW2FkZHJdCiAgICBlY3M6ICplY3MtYXV0aAogICMgQVVESVRfVVNFUl9MT0dJTiAtIFVzZXIgaGFzIGxvZ2dlZCBpbgogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogVVNFUl9MT0dJTgogICAgYWN0aW9uOiBsb2dnZWQtaW4KICAgIHNvdXJjZV9pcDogW2FkZHJdCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWF1dGgKICAgICAgdHlwZTogc3RhcnQKICAjIEFVRElUX1VTRVJfTE9HT1VUIC0gVXNlciBoYXMgbG9nZ2VkIG91dAogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogVVNFUl9MT0dPVVQKICAgIGFjdGlvbjogbG9nZ2VkLW91dAogICAgZWNzOgogICAgICA8PDogKmVjcy1hdXRoCiAgICAgIHR5cGU6IGVuZAogICMgQVVESVRfVVNFUl9ST0xFX0NIQU5HRSAtIFVzZXIgY2hhbmdlZCB0byBhIG5ldyByb2xlCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBVU0VSX1JPTEVfQ0hBTkdFCiAgICBhY3Rpb246IGNoYW5nZWQtcm9sZS10bwogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBzZWxlY3RlZC1jb250ZXh0CiAgICAgIHdoYXQ6IHVzZXItc2Vzc2lvbgogICMgQVVESVRfVVNFUl9TVEFSVCAtIFVzZXIgc2Vzc2lvbiBzdGFydAogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogVVNFUl9TVEFSVAogICAgYWN0aW9uOiBzdGFydGVkLXNlc3Npb24KICAgIHNvdXJjZV9pcDogW2FkZHJdCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXNlc3Npb24KICAgICAgdHlwZTogc3RhcnQKCiAgIyBIb3N0IHZpcnR1YWxpemF0aW9uIGV2ZW50cwoKICAjIEFVRElUX1ZJUlRfQ09OVFJPTCAtIFN0YXJ0LCBQYXVzZSwgU3RvcCBWTQogIC0gcmVjb3JkX3R5cGVzOiBWSVJUX0NPTlRST0wKICAgIGFjdGlvbjogaXNzdWVkLXZtLWNvbnRyb2wKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogb3AKICAgICAgc2Vjb25kYXJ5OiB2bQogICAgICB3aGF0OiB2aXJ0dWFsLW1hY2hpbmUKICAgIGVjczogKmVjcy1ob3N0CiAgIyBBVURJVF9WSVJUX0NSRUFURSAtIENyZWF0aW9uIG9mIGd1ZXN0IGltYWdlCiAgLSByZWNvcmRfdHlwZXM6IFZJUlRfQ1JFQVRFCiAgICBhY3Rpb246IGNyZWF0ZWQtdm0taW1hZ2UKICAgIGVjczogKmVjcy1ob3N0CiAgIyBBVURJVF9WSVJUX0RFU1RST1kgLSBEZXN0cnVjdGlvbiBvZiBndWVzdCBpbWFnZQogIC0gcmVjb3JkX3R5cGVzOiBWSVJUX0RFU1RST1kKICAgIGFjdGlvbjogZGVsZXRlZC12bS1pbWFnZQogICAgZWNzOiAqZWNzLWhvc3QKICAjIEFVRElUX1ZJUlRfSU5URUdSSVRZX0NIRUNLIC0gR3Vlc3QgaW50ZWdyaXR5IHJlc3VsdHMKICAtIHJlY29yZF90eXBlczogVklSVF9JTlRFR1JJVFlfQ0hFQ0sKICAgIGFjdGlvbjogY2hlY2tlZC1pbnRlZ3JpdHktb2YKICAgIGVjczogKmVjcy1ob3N0CiAgIyBBVURJVF9WSVJUX01BQ0hJTkVfSUQgLSBCaW5kaW5nIG9mIGxhYmVsIHRvIFZNCiAgLSByZWNvcmRfdHlwZXM6IFZJUlRfTUFDSElORV9JRAogICAgYWN0aW9uOiBhc3NpZ25lZC12bS1pZAogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiB2bQogICAgICB3aGF0OiB2aXJ0dWFsLW1hY2hpbmUKICAgIGVjczogKmVjcy1ob3N0CiAgIyBBVURJVF9WSVJUX01JR1JBVEVfSU4gLSBJbmJvdW5kIGd1ZXN0IG1pZ3JhdGlvbiBpbmZvCiAgLSByZWNvcmRfdHlwZXM6IFZJUlRfTUlHUkFURV9JTgogICAgYWN0aW9uOiBtaWdyYXRlZC12bS1mcm9tCiAgICBlY3M6ICplY3MtaG9zdAogICMgQVVESVRfVklSVF9NSUdSQVRFX09VVCAtIE91dGJvdW5kIGd1ZXN0IG1pZ3JhdGlvbiBpbmZvCiAgLSByZWNvcmRfdHlwZXM6IFZJUlRfTUlHUkFURV9PVVQKICAgIGFjdGlvbjogbWlncmF0ZWQtdm0tdG8KICAgIGVjczogKmVjcy1ob3N0CiAgIyBBVURJVF9WSVJUX1JFU09VUkNFIC0gUmVzb3VyY2UgYXNzaWdubWVudAogIC0gcmVjb3JkX3R5cGVzOiBWSVJUX1JFU09VUkNFCiAgICBhY3Rpb246IGFzc2lnbmVkLXZtLXJlc291cmNlCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IHJlc3JjCiAgICAgIHNlY29uZGFyeTogdm0KICAgICAgd2hhdDogdmlydHVhbC1tYWNoaW5lCiAgICBlY3M6ICplY3MtaG9zdAoKICAjIFVzZXJzcGFjZSBwcm9jZXNzIGV2ZW50cwoKICAjIEFVRElUX0NIR1JQX0lEIC0gVXNlciBzcGFjZSBncm91cCBJRCBjaGFuZ2VkCiAgLSByZWNvcmRfdHlwZXM6IENIR1JQX0lECiAgICBhY3Rpb246IGNoYW5nZWQtZ3JvdXAKICAgIGVjczoKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBjaGFuZ2UKICAjIEFVRElUX0NIVVNFUl9JRCAtIENoYW5nZWQgdXNlciBJRCBzdXBwbGVtZW50YWwgZGF0YQogIC0gcmVjb3JkX3R5cGVzOiBDSFVTRVJfSUQKICAgIGFjdGlvbjogY2hhbmdlZC11c2VyLWlkCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogY2hhbmdlCiAgIyBBVURJVF9URVNUIC0gVXNlZCBmb3IgdGVzdCBzdWNjZXNzIG1lc3NhZ2VzCiAgLSByZWNvcmRfdHlwZXM6IFRFU1QKICAgIGFjdGlvbjogc2VudC10ZXN0CiAgICBlY3M6ICplY3MtcHJvY2VzcwogICMgQVVESVRfVFJVU1RFRF9BUFAgLSBUcnVzdGVkIGFwcCBtc2cgLSBmcmVlc3R5bGUgdGV4dAogIC0gcmVjb3JkX3R5cGVzOiBUUlVTVEVEX0FQUAogICAgYWN0aW9uOiB1bmtub3duCiAgICBlY3M6ICplY3MtcHJvY2VzcwogICMgQVVESVRfVVNFUl9DTUQgLSBVc2VyIHNoZWxsIGNvbW1hbmQgYW5kIGFyZ3MKICAtIHJlY29yZF90eXBlczogVVNFUl9DTUQKICAgIGFjdGlvbjogcmFuLWNvbW1hbmQKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogY21kCiAgICAgIHdoYXQ6IHByb2Nlc3MKICAgIGRlc2NyaXB0aW9uOiA+CiAgICAgIFRoZXNlIG1lc3NhZ2VzIGFyZSBmcm9tIHVzZXItc3BhY2UgYXBwcywgbGlrZSBzdWRvLCB0aGF0IGxvZyBjb21tYW5kcwogICAgICBiZWluZyBydW4gYnkgYSB1c2VyLiBUaGUgdWlkIGNvbnRhaW5lZCBpbiB0aGVzZSBtZXNzYWdlcyBpcyB1c2VyJ3MgVUlEIGF0CiAgICAgIHRoZSB0aW1lIHRoZSBjb21tYW5kIHdhcyBydW4uIEl0IGlzIG5vdCB0aGUgInRhcmdldCIgVUlEIHVzZWQgdG8gcnVuIHRoZQogICAgICBjb21tYW5kLCB3aGljaCBpcyBub3JtYWxseSByb290LgogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IHN0YXJ0CgogICMgSG9zdC1sZXZlbCBldmVudHMKCiAgIyBBVURJVF9TWVNURU1fQk9PVCAtIFN5c3RlbSBib290CiAgLSByZWNvcmRfdHlwZXM6IFNZU1RFTV9CT09UCiAgICBhY3Rpb246IGJvb3RlZC1zeXN0ZW0KICAgIG9iamVjdDoKICAgICAgd2hhdDogc3lzdGVtCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWhvc3QKICAgICAgdHlwZTogc3RhcnQKICAjIEFVRElUX1NZU1RFTV9SVU5MRVZFTCAtIFN5c3RlbSBydW5sZXZlbCBjaGFuZ2UKICAtIHJlY29yZF90eXBlczogU1lTVEVNX1JVTkxFVkVMCiAgICBhY3Rpb246IGNoYW5nZWQtdG8tcnVubGV2ZWwKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogbmV3LWxldmVsCiAgICAgIHdoYXQ6IHN5c3RlbQogICAgZWNzOgogICAgICA8PDogKmVjcy1ob3N0CiAgICAgIHR5cGU6IGNoYW5nZQogICMgQVVESVRfU1lTVEVNX1NIVVRET1dOIC0gU3lzdGVtIHNodXRkb3duCiAgLSByZWNvcmRfdHlwZXM6IFNZU1RFTV9TSFVURE9XTgogICAgYWN0aW9uOiBzaHV0ZG93bi1zeXN0ZW0KICAgIG9iamVjdDoKICAgICAgd2hhdDogc3lzdGVtCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWhvc3QKICAgICAgdHlwZTogZW5kCgogICMgU2VydmljZS1sZXZlbCBldmVudHMKCiAgIyBBVURJVF9TRVJWSUNFX1NUQVJUIC0gU2VydmljZSAoZGFlbW9uKSBzdGFydAogIC0gcmVjb3JkX3R5cGVzOiBTRVJWSUNFX1NUQVJUCiAgICBhY3Rpb246IHN0YXJ0ZWQtc2VydmljZQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiB1bml0CiAgICAgIHdoYXQ6IHNlcnZpY2UKICAgIGVjczoKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBzdGFydAogICMgQVVESVRfU0VSVklDRV9TVE9QIC0gU2VydmljZSAoZGFlbW9uKSBzdG9wCiAgLSByZWNvcmRfdHlwZXM6IFNFUlZJQ0VfU1RPUAogICAgYWN0aW9uOiBzdG9wcGVkLXNlcnZpY2UKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogdW5pdAogICAgICB3aGF0OiBzZXJ2aWNlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogc3RvcAoKICAjIEF1ZGl0ZCBpbnRlcm5hbCBldmVudHMKCiAgIyBBVURJVF9DT05GSUdfQ0hBTkdFIC0gQXVkaXQgc3lzdGVtIGNvbmZpZ3VyYXRpb24gY2hhbmdlCiAgLSByZWNvcmRfdHlwZXM6IENPTkZJR19DSEFOR0UKICAgIGFjdGlvbjogY2hhbmdlZC1hdWRpdC1jb25maWd1cmF0aW9uCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6CiAgICAgICAgW29wLCBrZXksIGF1ZGl0X2VuYWJsZWQsIGF1ZGl0X3BpZCwgYXVkaXRfYmFja2xvZ19saW1pdCwgYXVkaXRfZmFpbHVyZV0KICAgICAgd2hhdDogYXVkaXQtY29uZmlnCiAgICBlY3M6CiAgICAgIGNhdGVnb3J5OiBbcHJvY2VzcywgY29uZmlndXJhdGlvbl0KICAgICAgdHlwZTogY2hhbmdlCiAgIyBBVURJVF9EQUVNT05fQUJPUlQgLSBEYWVtb24gZXJyb3Igc3RvcCByZWNvcmQKICAtIHJlY29yZF90eXBlczogREFFTU9OX0FCT1JUCiAgICBhY3Rpb246IGFib3J0ZWQtYXVkaXRkLXN0YXJ0dXAKICAgIG9iamVjdDoKICAgICAgd2hhdDogc2VydmljZQogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IHN0b3AKICAjIEFVRElUX0RBRU1PTl9BQ0NFUFQgLSBBdWRpdGQgYWNjZXB0ZWQgcmVtb3RlIGNvbm5lY3Rpb24KICAtIHJlY29yZF90eXBlczogREFFTU9OX0FDQ0VQVAogICAgYWN0aW9uOiByZW1vdGUtYXVkaXQtY29ubmVjdGVkCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNlcnZpY2UKICAgIGVjczoKICAgICAgPDw6ICplY3MtbmV0d29yawogICAgICB0eXBlOgogICAgICAgIC0gY29ubmVjdGlvbgogICAgICAgIC0gc3RhcnQKICAjIEFVRElUX0RBRU1PTl9DTE9TRSAtIEF1ZGl0ZCBjbG9zZWQgcmVtb3RlIGNvbm5lY3Rpb24KICAtIHJlY29yZF90eXBlczogREFFTU9OX0NMT1NFCiAgICBhY3Rpb246IHJlbW90ZS1hdWRpdC1kaXNjb25uZWN0ZWQKICAgIG9iamVjdDoKICAgICAgd2hhdDogc2VydmljZQogICAgZWNzOgogICAgICA8PDogKmVjcy1uZXR3b3JrCiAgICAgIHR5cGU6CiAgICAgICAgLSBjb25uZWN0aW9uCiAgICAgICAgLSBzdGFydAogICMgQVVESVRfREFFTU9OX0NPTkZJRyAtIERhZW1vbiBjb25maWcgY2hhbmdlCiAgLSByZWNvcmRfdHlwZXM6IERBRU1PTl9DT05GSUcKICAgIGFjdGlvbjogY2hhbmdlZC1hdWRpdGQtY29uZmlndXJhdGlvbgogICAgb2JqZWN0OgogICAgICB3aGF0OiBzZXJ2aWNlCiAgICBlY3M6CiAgICAgIGNhdGVnb3J5OiBbcHJvY2VzcywgY29uZmlndXJhdGlvbl0KICAgICAgdHlwZTogY2hhbmdlCiAgIyBBVURJVF9EQUVNT05fRU5EIC0gRGFlbW9uIG5vcm1hbCBzdG9wIHJlY29yZAogIC0gcmVjb3JkX3R5cGVzOiBEQUVNT05fRU5ECiAgICBhY3Rpb246IHNodXRkb3duLWF1ZGl0CiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNlcnZpY2UKICAgIGVjczoKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBzdG9wCiAgIyBBVURJVF9EQUVNT05fRVJSIC0gQXVkaXRkIGludGVybmFsIGVycm9yCiAgLSByZWNvcmRfdHlwZXM6IERBRU1PTl9FUlIKICAgIGFjdGlvbjogYXVkaXQtZXJyb3IKICAgIG9iamVjdDoKICAgICAgd2hhdDogc2VydmljZQogICAgZWNzOiAqZWNzLXByb2Nlc3MKICAjIEFVRElUX0RBRU1PTl9SRUNPTkZJRyAtIEF1ZGl0ZCBzaG91bGQgcmVjb25maWd1cmUKICAtIHJlY29yZF90eXBlczogREFFTU9OX1JFQ09ORklHCiAgICBhY3Rpb246IHJlY29uZmlndXJlZC1hdWRpdGQKICAgIG9iamVjdDoKICAgICAgd2hhdDogc2VydmljZQogICAgZWNzOgogICAgICBjYXRlZ29yeTogW3Byb2Nlc3MsIGNvbmZpZ3VyYXRpb25dCiAgICAgIHR5cGU6IGluZm8KICAjIEFVRElUX0RBRU1PTl9SRVNVTUUgLSBBdWRpdGQgc2hvdWxkIHJlc3VtZSBsb2dnaW5nCiAgLSByZWNvcmRfdHlwZXM6IERBRU1PTl9SRVNVTUUKICAgIGFjdGlvbjogcmVzdW1lZC1hdWRpdC1sb2dnaW5nCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNlcnZpY2UKICAgIGVjczoKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBjaGFuZ2UKICAjIEFVRElUX0RBRU1PTl9ST1RBVEUgLSBBdWRpdGQgc2hvdWxkIHJvdGF0ZSBsb2dzCiAgLSByZWNvcmRfdHlwZXM6IERBRU1PTl9ST1RBVEUKICAgIGFjdGlvbjogcm90YXRlZC1hdWRpdC1sb2dzCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNlcnZpY2UKICAgIGVjczoKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBjaGFuZ2UKICAjIEFVRElUX0RBRU1PTl9TVEFSVCAtIERhZW1vbiBzdGFydHVwIHJlY29yZAogIC0gcmVjb3JkX3R5cGVzOiBEQUVNT05fU1RBUlQKICAgIGFjdGlvbjogc3RhcnRlZC1hdWRpdAogICAgb2JqZWN0OgogICAgICB3aGF0OiBzZXJ2aWNlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogc3RhcnQKICAjIEFVRElUX0tFUk5FTCAtIEFzeW5jaHJvbm91cyBhdWRpdCByZWNvcmQuIE5PVCBBIFJFUVVFU1QuCiAgLSByZWNvcmRfdHlwZXM6IEtFUk5FTAogICAgYWN0aW9uOiBpbml0aWFsaXplZC1hdWRpdC1zdWJzeXN0ZW0KICAgIGVjczogKmVjcy1wcm9jZXNzCgogICMgQ29uZmlndXJhdGlvbiBjaGFuZ2UgZXZlbnRzCgogICMgQVVESVRfVVNZU19DT05GSUcgLSBVc2VyIHNwYWNlIHN5c3RlbSBjb25maWcgY2hhbmdlCiAgLSByZWNvcmRfdHlwZXM6IFVTWVNfQ09ORklHCiAgICBhY3Rpb246IGNoYW5nZWQtY29uZmlndXJhdGlvbgogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBvcAogICAgICB3aGF0OiBzeXN0ZW0KICAgIGVjczoKICAgICAgY2F0ZWdvcnk6IGNvbmZpZ3VyYXRpb24KICAgICAgdHlwZTogY2hhbmdlCiAgIyBBVURJVF9ORVRGSUxURVJfQ0ZHIC0gTmV0ZmlsdGVyIGNoYWluIG1vZGlmaWNhdGlvbnMKICAtIHJlY29yZF90eXBlczogTkVURklMVEVSX0NGRwogICAgYWN0aW9uOiBsb2FkZWQtZmlyZXdhbGwtcnVsZS10bwogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiB0YWJsZQogICAgICB3aGF0OiBmaXJld2FsbAogICAgZWNzOgogICAgICBjYXRlZ29yeTogY29uZmlndXJhdGlvbgogICAgICB0eXBlOiBjaGFuZ2UKICAjIEFVRElUX0ZFQVRVUkVfQ0hBTkdFIC0gYXVkaXQgbG9nIGxpc3RpbmcgZmVhdHVyZSBjaGFuZ2VzCiAgLSByZWNvcmRfdHlwZXM6IEZFQVRVUkVfQ0hBTkdFCiAgICBhY3Rpb246IGNoYW5nZWQtYXVkaXQtZmVhdHVyZQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBmZWF0dXJlCiAgICAgIHdoYXQ6IHN5c3RlbQogICAgZWNzOgogICAgICBjYXRlZ29yeTogY29uZmlndXJhdGlvbgogICAgICB0eXBlOiBjaGFuZ2UKICAjIEFVRElUX1JFUExBQ0UgLSBSZXBsYWNlIGF1ZGl0ZCBpZiB0aGlzIHBhY2tldCB1bmFuc3dlcmQKCiAgIyBUVFkgZXZlbnRzCgogIC0gcmVjb3JkX3R5cGVzOgogICAgICAjIEFVRElUX1RUWSAtIElucHV0IG9uIGFuIGFkbWluaXN0cmF0aXZlIFRUWQogICAgICAtIFRUWQogICAgICAjIEFVRElUX1VTRVJfVFRZIC0gTm9uLUlDQU5PTiBUVFkgaW5wdXQgbWVhbmluZwogICAgICAtIFVTRVJfVFRZCiAgICBhY3Rpb246IHR5cGVkCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGRhdGEKICAgICAgd2hhdDoga2V5c3Ryb2tlcwogICAgaG93OiBbY29tbSwgZXhlXQoKICAjIFBvbGljeSBldmVudHMKCiAgIyBBVURJVF9BVkMgLSBTRSBMaW51eCBhdmMgZGVuaWFsIG9yIGdyYW50IChzZWxpbnV4KQogIC0gcmVjb3JkX3R5cGVzOiBBVkMKICAgIGFjdGlvbjogdmlvbGF0ZWQtc2VsaW51eC1wb2xpY3kKICAgIHN1YmplY3Q6CiAgICAgIHByaW1hcnk6IHNjb250ZXh0CiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IHRjb250ZXh0CiAgICAgIHNlY29uZGFyeTogdGNsYXNzCiAgICBoYXNfZmllbGRzOgogICAgICAtIHNlcmVzdWx0CiAgIyBBVURJVF9BVkMgLSBTRSBMaW51eCBhdmMgZGVuaWFsIG9yIGdyYW50IChhcHBhcm1vcikKICAtIHJlY29yZF90eXBlczogQVZDCiAgICBhY3Rpb246IHZpb2xhdGVkLWFwcGFybW9yLXBvbGljeQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBvcGVyYXRpb24KICAgICAgc2Vjb25kYXJ5OiBbcmVxdWVzdGVkX21hc2ssIGRlbmllZF9tYXNrLCBjYXBuYW1lXQogICAgICB3aGF0OiBwb2xpY3kKICAgIGhhc19maWVsZHM6CiAgICAgIC0gYXBwYXJtb3IKICAjIEFVRElUX0ZTX1JFTEFCRUwgLSBGaWxlc3lzdGVtIHJlbGFiZWxlZAogIC0gcmVjb3JkX3R5cGVzOiBGU19SRUxBQkVMCiAgICBhY3Rpb246IHJlbGFiZWxlZC1maWxlc3lzdGVtCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IG1hYy1jb25maWcKICAjIEFVRElUX0xBQkVMX0xFVkVMX0NIQU5HRSAtIE9iamVjdCdzIGxldmVsIHdhcyBjaGFuZ2VkCiAgLSByZWNvcmRfdHlwZXM6IExBQkVMX0xFVkVMX0NIQU5HRQogICAgYWN0aW9uOiBtb2RpZmllZC1sZXZlbC1vZgogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBwcmludGVyCiAgICAgIHdoYXQ6IHByaW50ZXIKICAjIEFVRElUX0xBQkVMX09WRVJSSURFIC0gQWRtaW4gaXMgb3ZlcnJpZGluZyBhIGxhYmVsCiAgLSByZWNvcmRfdHlwZXM6IExBQkVMX09WRVJSSURFCiAgICBhY3Rpb246IG92ZXJyb2RlLWxhYmVsLW9mCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IG1hYy1jb25maWcKICAjIEFVRElUX01BQ19DSEVDSyAtIFVzZXIgc3BhY2UgTUFDIGRlY2lzaW9uIHJlc3VsdHMKICAtIHJlY29yZF90eXBlczogTUFDX0NIRUNLCiAgICBhY3Rpb246IG1hYy1wZXJtaXNzaW9uCiAgIyBBVURJVF9NQUNfQ09ORklHX0NIQU5HRSAtIENoYW5nZXMgdG8gYm9vbGVhbnMKICAtIHJlY29yZF90eXBlczogTUFDX0NPTkZJR19DSEFOR0UKICAgIGFjdGlvbjogY2hhbmdlZC1zZWxpbnV4LWJvb2xlYW4KICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogYm9vbAogICAgICB3aGF0OiBtYWMtY29uZmlnCiAgICBlY3M6CiAgICAgIGNhdGVnb3J5OiBjb25maWd1cmF0aW9uCiAgICAgIHR5cGU6IGNoYW5nZQogICMgQVVESVRfTUFDX1BPTElDWV9MT0FEIC0gUG9saWN5IGZpbGUgbG9hZAogIC0gcmVjb3JkX3R5cGVzOiBNQUNfUE9MSUNZX0xPQUQKICAgIGFjdGlvbjogbG9hZGVkLXNlbGludXgtcG9saWN5CiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IG1hYy1jb25maWcKICAgIGVjczoKICAgICAgY2F0ZWdvcnk6IGNvbmZpZ3VyYXRpb24KICAgICAgdHlwZTogYWNjZXNzCiAgIyBBVURJVF9NQUNfU1RBVFVTIC0gQ2hhbmdlZCBlbmZvcmNpbmcscGVybWlzc2l2ZSxvZmYKICAtIHJlY29yZF90eXBlczogTUFDX1NUQVRVUwogICAgYWN0aW9uOiBjaGFuZ2VkLXNlbGludXgtZW5mb3JjZW1lbnQKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogZW5mb3JjaW5nCiAgICAgIHdoYXQ6IG1hYy1jb25maWcKICAgIGVjczoKICAgICAgY2F0ZWdvcnk6IGNvbmZpZ3VyYXRpb24KICAgICAgdHlwZTogY2hhbmdlCiAgIyBBVURJVF9VU0VSX0FWQyAtIFVzZXIgc3BhY2UgYXZjIG1lc3NhZ2UKICAtIHJlY29yZF90eXBlczogVVNFUl9BVkMKICAgIGFjdGlvbjogYWNjZXNzLXBlcm1pc3Npb24KICAjIEFVRElUX1VTRVJfTUFDX0NPTkZJR19DSEFOR0UgLSBDaGFuZ2UgbWFkZSB0byBNQUMgcG9saWN5CiAgLSByZWNvcmRfdHlwZXM6IFVTRVJfTUFDX0NPTkZJR19DSEFOR0UKICAgIGFjdGlvbjogY2hhbmdlZC1tYWMtY29uZmlndXJhdGlvbgogICAgb2JqZWN0OgogICAgICB3aGF0OiBtYWMtY29uZmlnCiAgICBlY3M6CiAgICAgIGNhdGVnb3J5OiBjb25maWd1cmF0aW9uCiAgICAgIHR5cGU6IGNoYW5nZQogICMgQVVESVRfVVNFUl9NQUNfUE9MSUNZX0xPQUQgLSBVc2Vyc3BjIGRhZW1vbiBsb2FkZWQgcG9saWMKICAtIHJlY29yZF90eXBlczogVVNFUl9NQUNfUE9MSUNZX0xPQUQKICAgIGFjdGlvbjogbG9hZGVkLW1hYy1wb2xpY3kKICAgIG9iamVjdDoKICAgICAgd2hhdDogbWFjLWNvbmZpZwogICAgZWNzOgogICAgICBjYXRlZ29yeTogY29uZmlndXJhdGlvbgogICAgICB0eXBlOiBhY2Nlc3MKICAjIEFVRElUX1VTRVJfU0VMSU5VWF9FUlIgLSBTRSBMaW51eCB1c2VyIHNwYWNlIGVycm9yCiAgLSByZWNvcmRfdHlwZXM6IFVTRVJfU0VMSU5VWF9FUlIKICAgIGFjdGlvbjogYWNjZXNzLWVycm9yCiAgIyBBVURJVF9TRUNDT01QIC0gU2VjdXJlIENvbXB1dGluZyBldmVudAogIC0gcmVjb3JkX3R5cGVzOiBTRUNDT01QCiAgICBhY3Rpb246IHZpb2xhdGVkLXNlY2NvbXAtcG9saWN5CiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IHN5c2NhbGwKICAgICAgd2hhdDogcHJvY2VzcwogICMgQVVESVRfU0VMSU5VWF9FUlIgLSBJbnRlcm5hbCBTRSBMaW51eCBFcnJvcnMKICAtIGFjdGlvbjogY2F1c2VkLW1hYy1wb2xpY3ktZXJyb3IKICAgIG9iamVjdDoKICAgICAgd2hhdDogc3lzdGVtCiAgICByZWNvcmRfdHlwZXM6IFNFTElOVVhfRVJSCiAgIyBBVURJVF9BUFBBUk1PUl9BTExPV0VECiAgIyBBVURJVF9BUFBBUk1PUl9ERU5JRUQKICAjIEFVRElUX0FQUEFSTU9SX0VSUk9SCiAgIyBBVURJVF9BVkNfUEFUSCAtIGRlbnRyeSwgdmZzbW91bnQgcGFpciBmcm9tIGF2YwogICMgQVVESVRfQVBQQVJNT1JfQVVESVQKICAjIEFVRElUX0FQUEFSTU9SX0hJTlQKICAjIEFVRElUX0FQUEFSTU9SX1NUQVRVUwogICMgQVVESVRfQVBQQVJNT1JfRVJST1IKICAjIEFVRElUX0RFVl9BTExPQyAtIERldmljZSB3YXMgYWxsb2NhdGVkCiAgIyBBVURJVF9ERVZfREVBTExPQyAtIERldmljZSB3YXMgZGVhbGxvY2F0ZWQKICAjIEFVRElUX01BQ19VTkxCTF9BTExPVyAtIE5ldExhYmVsOiBhbGxvdyB1bmxhYmVsZWQgdHJhZmZpYwogICMgQVVESVRfTUFDX0NJUFNPVjRfQUREIC0gTmV0TGFiZWw6IGFkZCBDSVBTT3Y0IERPSSBlbnRyeQogICMgQVVESVRfTUFDX0NJUFNPVjRfREVMIC0gTmV0TGFiZWw6IGRlbCBDSVBTT3Y0IERPSSBlbnRyeQogICMgQVVESVRfTUFDX01BUF9BREQgLSBOZXRMYWJlbDogYWRkIExTTSBkb21haW4gbWFwcGluZwogICMgQVVESVRfTUFDX01BUF9ERUwgLSBOZXRMYWJlbDogZGVsIExTTSBkb21haW4gbWFwcGluZwogICMgQVVESVRfTUFDX0lQU0VDX0VWRU5UIC0gQXVkaXQgYW4gSVBTZWMgZXZlbnQKICAjIEFVRElUX01BQ19VTkxCTF9TVENBREQgLSBOZXRMYWJlbDogYWRkIGEgc3RhdGljIGxhYmVsCiAgIyBBVURJVF9NQUNfVU5MQkxfU1RDREVMIC0gTmV0TGFiZWw6IGRlbCBhIHN0YXRpYyBsYWJlbAogICMgQVVESVRfTUFDX0NBTElQU09fQUREIC0gTmV0TGFiZWw6IGFkZCBDQUxJUFNPIERPSSBlbnRyeQogICMgQVVESVRfTUFDX0NBTElQU09fREVMIC0gTmV0TGFiZWw6IGRlbCBDQUxJUFNPIERPSSBlbnRyeQogICMgQVVESVRfVVNFUl9MQUJFTEVEX0VYUE9SVCAtIE9iamVjdCBleHBvcnRlZCB3aXRoIGxhYmVsCiAgIyBBVURJVF9VU0VSX1VOTEFCRUxFRF9FWFBPUlQgLSBPYmplY3QgZXhwb3J0ZWQgd2l0aG91dCBsYWJlbAoKICAjIENyeXB0byBldmVudHMKCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgYWN0aW9uOiBuZWdvdGlhdGVkLWNyeXB0by1rZXkKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogZnAKICAgICAgc2Vjb25kYXJ5OiBbYWRkciwgaG9zdG5hbWVdCiAgICAgIHdoYXQ6IHVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBDUllQVE9fS0VZX1VTRVIKICAgIHNvdXJjZV9pcDogW2FkZHJdCiAgICBlY3M6ICplY3MtcHJvY2VzcwogIC0gYWN0aW9uOiBjcnlwdG8tb2ZmaWNlci1sb2dnZWQtaW4KICAgIHJlY29yZF90eXBlczogQ1JZUFRPX0xPR0lOCiAgLSBhY3Rpb246IGNyeXB0by1vZmZpY2VyLWxvZ2dlZC1vdXQKICAgIHJlY29yZF90eXBlczogQ1JZUFRPX0xPR09VVAogICAgZWNzOiAqZWNzLXByb2Nlc3MKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICBhY3Rpb246IHN0YXJ0ZWQtY3J5cHRvLXNlc3Npb24KICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogYWRkcgogICAgICBzZWNvbmRhcnk6IFtycG9ydF0KICAgIHJlY29yZF90eXBlczogQ1JZUFRPX1NFU1NJT04KICAgIHNvdXJjZV9pcDogW2FkZHJdCiAgICBlY3M6ICplY3MtcHJvY2VzcwogIC0gYWN0aW9uOiBhY2Nlc3MtcmVzdWx0CiAgICByZWNvcmRfdHlwZXM6IERBQ19DSEVDSwoKICAjIEFub21hbGllcwoKICAjIEFVRElUX0FOT01fQUJFTkQgLSBQcm9jZXNzIGVuZGVkIGFibm9ybWFsbHkKICAtIHJlY29yZF90eXBlczogQU5PTV9BQkVORAogICAgYWN0aW9uOiBjcmFzaGVkLXByb2dyYW0KICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogW2NvbW0sIGV4ZV0KICAgICAgc2Vjb25kYXJ5OiBwaWQKICAgICAgd2hhdDogcHJvY2VzcwogICAgaG93OiBzaWcKICAgIGVjczoKICAgICAgIyBjb25zaWRlciBhZGRpbmcgYW4gYW5vbWFseSBjYXRlZ29yeSB3aGVuIHdlIGludHJvZHVjZQogICAgICAjIHRvIEVDUwogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IGVuZAogICMgQVVESVRfQU5PTV9FWEVDIC0gRXhlY3V0aW9uIG9mIGZpbGUKICAtIHJlY29yZF90eXBlczogQU5PTV9FWEVDCiAgICBhY3Rpb246IGF0dGVtcHRlZC1leGVjdXRpb24tb2YtZm9yYmlkZGVuLXByb2dyYW0KICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogY21kCiAgICAgIHdoYXQ6IHByb2Nlc3MKICAgIGhvdzogdGVybWluYWwKICAgIGVjczoKICAgICAgIyBjb25zaWRlciBhZGRpbmcgYW4gYW5vbWFseSBjYXRlZ29yeSB3aGVuIHdlIGludHJvZHVjZQogICAgICAjIHRvIEVDUwogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IHN0YXJ0CiAgIyBBVURJVF9BTk9NX0xJTksgLSBTdXNwaWNpb3VzIHVzZSBvZiBmaWxlIGxpbmtzCiAgLSByZWNvcmRfdHlwZXM6IEFOT01fTElOSwogICAgYWN0aW9uOiB1c2VkLXN1c3BpY2lvdXMtbGluawogICMgQVVESVRfQU5PTV9MT0dJTl9GQUlMVVJFUyAtIEZhaWxlZCBsb2dpbiBsaW1pdCByZWFjaGVkCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBBTk9NX0xPR0lOX0ZBSUxVUkVTCiAgICBhY3Rpb246IGZhaWxlZC1sb2ctaW4tdG9vLW1hbnktdGltZXMtdG8KICAjIEFVRElUX0FOT01fTE9HSU5fTE9DQVRJT04gLSBMb2dpbiBmcm9tIGZvcmJpZGRlbiBsb2NhdGlvbgogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogQU5PTV9MT0dJTl9MT0NBVElPTgogICAgYWN0aW9uOiBhdHRlbXB0ZWQtbG9nLWluLWZyb20tdW51c3VhbC1wbGFjZS10bwogICMgQVVESVRfQU5PTV9MT0dJTl9TRVNTSU9OUyAtIE1heCBjb25jdXJyZW50IHNlc3Npb25zIHJlYWNoZWQKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IEFOT01fTE9HSU5fU0VTU0lPTlMKICAgIGFjdGlvbjogb3BlbmVkLXRvby1tYW55LXNlc3Npb25zLXRvCiAgIyBBVURJVF9BTk9NX0xPR0lOX1RJTUUgLSBMb2dpbiBhdHRlbXB0ZWQgYXQgYmFkIHRpbWUKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IEFOT01fTE9HSU5fVElNRQogICAgYWN0aW9uOiBhdHRlbXB0ZWQtbG9nLWluLWR1cmluZy11bnVzdWFsLWhvdXItdG8KICAjIEFVRElUX0FOT01fUFJPTUlTQ1VPVVMgLSBEZXZpY2UgY2hhbmdlZCBwcm9taXNjdW91cyBtb2RlCiAgLSByZWNvcmRfdHlwZXM6IEFOT01fUFJPTUlTQ1VPVVMKICAgIGFjdGlvbjogY2hhbmdlZC1wcm9taXNjdW91cy1tb2RlLW9uLWRldmljZSAjIENvdWxkIGJlIGVudGVyZWQgb3IgZXhpdGVkIGJhc2VkIG9uIHByb20gZmllbGQuCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGRldgogICAgICB3aGF0OiBuZXR3b3JrLWRldmljZQogICMgQVVESVRfQU5PTV9SQkFDX0lOVEVHUklUWV9GQUlMIC0gUkJBQyBmaWxlIGludGVncml0eSBmYWlsdXJlCiAgLSByZWNvcmRfdHlwZXM6IEFOT01fUkJBQ19JTlRFR1JJVFlfRkFJTAogICAgYWN0aW9uOiB0ZXN0ZWQtZmlsZS1zeXN0ZW0taW50ZWdyaXR5LW9mCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGhvc3RuYW1lCiAgICAgIHdoYXQ6IGZpbGVzeXN0ZW0KICAjIEFVRElUX0FOT01fTE9HSU5fQUNDVCAtIExvZ2luIGF0dGVtcHRlZCB0byB3YXRjaGVkIGFjY3QKICAjIEFVRElUX0FOT01fTUFYX0RBQyAtIE1heCBEQUMgZmFpbHVyZXMgcmVhY2hlZAogICMgQVVESVRfQU5PTV9NQVhfTUFDIC0gTWF4IE1BQyBmYWlsdXJlcyByZWFjaGVkCiAgIyBBVURJVF9BTk9NX0FNVFVfRkFJTCAtIEFNVFUgZmFpbHVyZQogICMgQVVESVRfQU5PTV9SQkFDX0ZBSUwgLSBSQkFDIHNlbGYgdGVzdCBmYWlsdXJlCiAgIyBBVURJVF9BTk9NX0NSWVBUT19GQUlMIC0gQ3J5cHRvIHN5c3RlbSB0ZXN0IGZhaWx1cmUKICAjIEFVRElUX0FOT01fTUtfRVhFIC0gTWFrZSBhbiBleGVjdXRhYmxlCiAgIyBBVURJVF9BTk9NX0FDQ0VTU19GUyAtIEFjY2VzcyBvZiBmaWxlIG9yIGRpcgogICMgQVVESVRfQU5PTV9BRERfQUNDVCAtIEFkZGluZyBhbiBhY2N0CiAgIyBBVURJVF9BTk9NX0RFTF9BQ0NUIC0gRGVsZXRpbmcgYW4gYWNjdAogICMgQVVESVRfQU5PTV9NT0RfQUNDVCAtIENoYW5naW5nIGFuIGFjY3QKICAjIEFVRElUX0FOT01fUk9PVF9UUkFOUyAtIFVzZXIgYmVjYW1lIHJvb3QKICAjIEFVRElUX0FOT01fTE9HSU5fU0VSVklDRSAtIFNlcnZpY2UgYWNjdCBhdHRlbXB0ZWQgbG9naW4KCiAgIyBBbm9tYWx5IHJlc3BvbnNlcwoKICAjIEFVRElUX1JFU1BfQU5PTUFMWSAtIEFub21hbHkgbm90IHJlYWN0ZWQgdG8KICAjIEFVRElUX1JFU1BfQUxFUlQgLSBBbGVydCBlbWFpbCB3YXMgc2VudAogICMgQVVESVRfUkVTUF9LSUxMX1BST0MgLSBLaWxsIHByb2dyYW0KICAjIEFVRElUX1JFU1BfVEVSTV9BQ0NFU1MgLSBUZXJtaW5hdGUgc2Vzc2lvbgogICMgQVVESVRfUkVTUF9BQ0NUX1JFTU9URSAtIEFjY3QgbG9ja2VkIGZyb20gcmVtb3RlIGFjY2VzcwogICMgQVVESVRfUkVTUF9BQ0NUX0xPQ0tfVElNRUQgLSBVc2VyIGFjY3QgbG9ja2VkIGZvciB0aW1lCiAgIyBBVURJVF9SRVNQX0FDQ1RfVU5MT0NLX1RJTUVEIC0gVXNlciBhY2N0IHVubG9ja2VkIGZyb20gdGltZQogICMgQVVESVRfUkVTUF9BQ0NUX0xPQ0sgLSBVc2VyIGFjY3Qgd2FzIGxvY2tlZAogICMgQVVESVRfUkVTUF9URVJNX0xPQ0sgLSBUZXJtaW5hbCB3YXMgbG9ja2VkCiAgIyBBVURJVF9SRVNQX1NFQk9PTCAtIFNldCBhbiBTRSBMaW51eCBib29sZWFuCiAgIyBBVURJVF9SRVNQX0VYRUMgLSBFeGVjdXRlIGEgc2NyaXB0CiAgIyBBVURJVF9SRVNQX1NJTkdMRSAtIEdvIHRvIHNpbmdsZSB1c2VyIG1vZGUKICAjIEFVRElUX1JFU1BfSEFMVCAtIHRha2UgdGhlIHN5c3RlbSBkb3duCiAgIyBBVURJVF9SRVNQX09SSUdJTl9CTE9DSyAtIEFkZHJlc3MgYmxvY2tlZCBieSBpcHRhYmxlcwogICMgQVVESVRfUkVTUF9PUklHSU5fQkxPQ0tfVElNRUQgLSBBZGRyZXNzIGJsb2NrZWQgZm9yIHRpbWUKCiAgIyBBdWRpdCBydWxlIGV2ZW50cwoKICAjIEFVRElUX1NZU0NBTEwgLSBTeXNjYWxsIGV2ZW50CiAgIyBBVURJVF9QQVRIIC0gRmlsZW5hbWUgcGF0aCBpbmZvcm1hdGlvbgogICMgQVVESVRfSVBDIC0gSVBDIHJlY29yZAogICMgQVVESVRfU09DS0VUQ0FMTCAtIHN5c19zb2NrZXRjYWxsIGFyZ3VtZW50cwogICMgQVVESVRfU09DS0FERFIgLSBzb2NrYWRkciBjb3BpZWQgYXMgc3lzY2FsbCBhcmcKICAjIEFVRElUX0NXRCAtIEN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkKICAjIEFVRElUX0VYRUNWRSAtIGV4ZWN2ZSBhcmd1bWVudHMKICAjIEFVRElUX0lQQ19TRVRfUEVSTSAtIElQQyBuZXcgcGVybWlzc2lvbnMgcmVjb3JkIHR5cGUKICAjIEFVRElUX01RX09QRU4gLSBQT1NJWCBNUSBvcGVuIHJlY29yZCB0eXBlCiAgIyBBVURJVF9NUV9TRU5EUkVDVi0gUE9TSVggTVEgc2VuZC9yZWNlaXZlIHJlY29yZCB0eXBlCiAgIyBBVURJVF9NUV9OT1RJRlkgLSBQT1NJWCBNUSBub3RpZnkgcmVjb3JkIHR5cGUKICAjIEFVRElUX01RX0dFVFNFVEFUVFIgLSBQT1NJWCBNUSBnZXQvc2V0IGF0dHJpYnV0ZSByZWNvcmQgdHlwZQogICMgQVVESVRfRkRfUEFJUiAtIGF1ZGl0IHJlY29yZCBmb3IgcGlwZS9zb2NrZXRwYWlyCiAgIyBBVURJVF9PQkpfUElEIC0gcHRyYWNlIHRhcmdldAogICMgQVVESVRfQlBSTV9GQ0FQUyAtIEluZm9ybWF0aW9uIGFib3V0IGZjYXBzIGluY3JlYXNpbmcgcGVybXMKICAjIEFVRElUX0NBUFNFVCAtIFJlY29yZCBzaG93aW5nIGFyZ3VtZW50IHRvIHN5c19jYXBzZXQKICAjIEFVRElUX01NQVAgLSBSZWNvcmQgc2hvd2luZyBkZXNjcmlwdG9yIGFuZCBmbGFncyBpbiBtbWFwCiAgIyBBVURJVF9ORVRGSUxURVJfUEtUIC0gUGFja2V0cyB0cmF2ZXJzaW5nIG5ldGZpbHRlciBjaGFpbnMKCiAgIyBJbnRlZ3JpdHkgY2hlY2tzCgogICMgQVVESVRfSU5URUdSSVRZX0RBVEEgLSBEYXRhIGludGVncml0eSB2ZXJpZmljYXRpb24KICAjIEFVRElUX0lOVEVHUklUWV9NRVRBREFUQSAtIE1ldGFkYXRhIGludGVncml0eSB2ZXJpZmljYXRpb24KICAjIEFVRElUX0lOVEVHUklUWV9TVEFUVVMgLSBJbnRlZ3JpdHkgZW5hYmxlIHN0YXR1cwogICMgQVVESVRfSU5URUdSSVRZX0hBU0ggLSBJbnRlZ3JpdHkgSEFTSCB0eXBlCiAgIyBBVURJVF9JTlRFR1JJVFlfUENSIC0gUENSIGludmFsaWRhdGlvbiBtc2dzCiAgIyBBVURJVF9JTlRFR1JJVFlfUlVMRSAtIFBvbGljeSBydWxlCgogICMgVmFyaW91cwoKICAjIEFVRElUX1VTRVIgLSBNZXNzYWdlIGZyb20gdXNlcnNwYWNlIC0tIGRlcHJlY2F0ZWQKICAtIHJlY29yZF90eXBlczogVVNFUgogICAgYWN0aW9uOiBzZW50LW1lc3NhZ2UKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogYWRkcgoKICAjIEFVRElUX1NPRlRXQVJFX1VQREFURSAtIFBhY2thZ2UgbWFuYWdlbWVudAogIC0gcmVjb3JkX3R5cGVzOiBTT0ZUV0FSRV9VUERBVEUKICAgIGFjdGlvbjogcGFja2FnZS11cGRhdGVkCiAgICBlY3M6CiAgICAgIGNhdGVnb3J5OiBwYWNrYWdlCiAgICAgIHR5cGU6IGluZm8K") assets["normalizationData"] = value } From 9113b6a51cd4353b0423a5182215e2436f8ce11a Mon Sep 17 00:00:00 2001 From: Adrian Serrano Date: Tue, 2 Feb 2021 16:20:16 +0100 Subject: [PATCH 15/15] Update README.md --- README.md | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 784ae5b..c9bcdde 100644 --- a/README.md +++ b/README.md @@ -125,10 +125,7 @@ ecs: id: "0" target: {} changes: {} - group: - effective: {} - target: {} - changes: {} + group: {} --- timestamp: 2016-12-07T02:22:14.303Z @@ -181,10 +178,7 @@ ecs: id: "0" target: {} changes: {} - group: - effective: {} - target: {} - changes: {} + group: {} --- timestamp: 2016-12-07T02:22:14.304Z @@ -298,10 +292,7 @@ ecs: effective: {} target: {} changes: {} - group: - effective: {} - target: {} - changes: {} + group: {} ``` ## ECS compatibility