Repository: elastic/go-libaudit
Pull request #80 (2020-12-08 16:23:39)

Add ingress/egress and configuration categorization
This adds the new `configuration` category to a few different auditd events. Unfortunately `AUDIT_CONFIG_CHANGE` and a few others already had `process` as the category, so I just added the additional category so we don't potentially break anything in beats.

The network direction changes are breaking, but that's what's needed for the ECS update.

Related: https://github.com/elastic/beats/issues/21674, https://github.com/elastic/ecs/pull/945



Patch:
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 2a3ac87..67e3d8a 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -7,8 +7,12 @@ This project adheres to [Semantic Versioning](http://semver.org/).
 
 ### Added
 
+- ECS 1.7 `configuration` categorization. [#80](https://github.com/elastic/go-libaudit/pull/80)
+
 ### Changed
 
+- Use ingress/egress instead of inbound/outbound for ECS 1.7. [#80](https://github.com/elastic/go-libaudit/pull/80)
+
 ### Removed
 
 ### Deprecated
diff --git a/aucoalesce/coalesce.go b/aucoalesce/coalesce.go
index 48db6c8..db75f20 100644
--- a/aucoalesce/coalesce.go
+++ b/aucoalesce/coalesce.go
@@ -123,9 +123,9 @@ const (
 func (d Direction) String() string {
 	switch d {
 	case IncomingDir:
-		return "inbound"
+		return "ingress"
 	case OutgoingDir:
-		return "outbound"
+		return "egress"
 	}
 	return "unknown"
 }
diff --git a/aucoalesce/normalizations.yaml b/aucoalesce/normalizations.yaml
index d45a01e..e7981f8 100644
--- a/aucoalesce/normalizations.yaml
+++ b/aucoalesce/normalizations.yaml
@@ -1179,7 +1179,7 @@ normalizations:
         [op, key, audit_enabled, audit_pid, audit_backlog_limit, audit_failure]
       what: audit-config
     ecs:
-      <<: *ecs-process
+      category: [process, configuration]
       type: change
   # AUDIT_DAEMON_ABORT - Daemon error stop record
   - record_types: DAEMON_ABORT
@@ -1215,8 +1215,8 @@ normalizations:
     object:
       what: service
     ecs:
-      <<: *ecs-process
-      type: stop
+      category: [process, configuration]
+      type: change
   # AUDIT_DAEMON_END - Daemon normal stop record
   - record_types: DAEMON_END
     action: shutdown-audit
@@ -1237,8 +1237,8 @@ normalizations:
     object:
       what: service
     ecs:
-      <<: *ecs-process
-      type: change
+      category: [process, configuration]
+      type: info
   # AUDIT_DAEMON_RESUME - Auditd should resume logging
   - record_types: DAEMON_RESUME
     action: resumed-audit-logging
@@ -1276,18 +1276,27 @@ normalizations:
     object:
       primary: op
       what: system
+    ecs:
+      category: configuration
+      type: change
   # AUDIT_NETFILTER_CFG - Netfilter chain modifications
   - record_types: NETFILTER_CFG
     action: loaded-firewall-rule-to
     object:
       primary: table
       what: firewall
+    ecs:
+      category: configuration
+      type: change
   # AUDIT_FEATURE_CHANGE - audit log listing feature changes
   - record_types: FEATURE_CHANGE
     action: changed-audit-feature
     object:
       primary: feature
       what: system
+    ecs:
+      category: configuration
+      type: change
   # AUDIT_REPLACE - Replace auditd if this packet unanswerd
 
   # TTY events
@@ -1349,17 +1358,26 @@ normalizations:
     object:
       primary: bool
       what: mac-config
+    ecs:
+      category: configuration
+      type: change
   # AUDIT_MAC_POLICY_LOAD - Policy file load
   - record_types: MAC_POLICY_LOAD
     action: loaded-selinux-policy
     object:
       what: mac-config
+    ecs:
+      category: configuration
+      type: access
   # AUDIT_MAC_STATUS - Changed enforcing,permissive,off
   - record_types: MAC_STATUS
     action: changed-selinux-enforcement
     object:
       primary: enforcing
       what: mac-config
+    ecs:
+      category: configuration
+      type: change
   # AUDIT_USER_AVC - User space avc message
   - record_types: USER_AVC
     action: access-permission
@@ -1368,11 +1386,17 @@ normalizations:
     action: changed-mac-configuration
     object:
       what: mac-config
+    ecs:
+      category: configuration
+      type: change
   # AUDIT_USER_MAC_POLICY_LOAD - Userspc daemon loaded polic
   - record_types: USER_MAC_POLICY_LOAD
     action: loaded-mac-policy
     object:
       what: mac-config
+    ecs:
+      category: configuration
+      type: access
   # AUDIT_USER_SELINUX_ERR - SE Linux user space error
   - record_types: USER_SELINUX_ERR
     action: access-error
diff --git a/aucoalesce/znormalize_data.go b/aucoalesce/znormalize_data.go
index 430afbd..1505132 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("LS0tCiMgTWFjcm9zIGRlY2xhcmVzIHNvbWUgWUFNTCBhbmNob3JzIHRoYXQgY2FuIGJlIHJlZmVyZW5jZWQgZm9yIHNvbWUgY29tbW9uCiMgb2JqZWN0IHR5cGUgbm9ybWFsaXphdGlvbnMgbGlrZSB1c2VyLXNlc3Npb24sIHNvY2tldCwgb3IgcHJvY2Vzcy4KbWFjcm9zOgogIC0gJmRlZmF1bHRzCiAgICBzdWJqZWN0OgogICAgICBwcmltYXJ5OiBhdWlkCiAgICAgIHNlY29uZGFyeTogdWlkCiAgICBob3c6IFtleGUsIGNvbW1dCgogIC0gJm1hY3JvLXVzZXItc2Vzc2lvbgogICAgc3ViamVjdDoKICAgICAgcHJpbWFyeTogYXVpZAogICAgICBzZWNvbmRhcnk6IFthY2N0LCBpZCwgdWlkXQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiB0ZXJtaW5hbAogICAgICBzZWNvbmRhcnk6IFthZGRyLCBob3N0bmFtZV0KICAgICAgd2hhdDogdXNlci1zZXNzaW9uCiAgICBob3c6IFtleGUsIHRlcm1pbmFsXQoKICAtICZtYWNyby1zb2NrZXQKICAgIDw8OiAqZGVmYXVsdHMKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogW2FkZHIsIHBhdGhdCiAgICAgIHNlY29uZGFyeTogcG9ydAogICAgICB3aGF0OiBzb2NrZXQKCiAgLSAmbWFjcm8tcHJvY2VzcwogICAgPDw6ICpkZWZhdWx0cwogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBbY21kLCBleGUsIGNvbW1dCiAgICAgIHNlY29uZGFyeTogcGlkCiAgICAgIHdoYXQ6IHByb2Nlc3MKICAgIGhvdzogdGVybWluYWwKCiAgLSAmZWNzLWlhbQogICAgY2F0ZWdvcnk6IGlhbQogICAgdHlwZTogaW5mbwoKICAtICZlY3MtYXV0aAogICAgY2F0ZWdvcnk6IGF1dGhlbnRpY2F0aW9uCiAgICB0eXBlOiBpbmZvCgogIC0gJmVjcy1ob3N0CiAgICBjYXRlZ29yeTogaG9zdAogICAgdHlwZTogaW5mbwoKICAtICZlY3MtcHJvY2VzcwogICAgY2F0ZWdvcnk6IHByb2Nlc3MKICAgIHR5cGU6IGluZm8KCiAgLSAmZWNzLWZpbGUKICAgIGNhdGVnb3J5OiBmaWxlCiAgICB0eXBlOiBpbmZvCgogIC0gJmVjcy1kcml2ZXIKICAgIGNhdGVnb3J5OiBkcml2ZXIKICAgIHR5cGU6IGluZm8KCiAgLSAmZWNzLW5ldHdvcmsKICAgIGNhdGVnb3J5OiBuZXR3b3JrCiAgICB0eXBlOgogICAgICAtIGNvbm5lY3Rpb24KICAgICAgLSBpbmZvCgojIE5vcm1hbGl6YXRpb25zIGlzIGEgbGlzdCBvZiBkZWNsYXJhdGlvbnMgc3BlY2lmeWluZyBob3cgdG8gbm9ybWFsaXplIHRoZSBkYXRhCiMgY29udGFpbmVkIGluIGFuIGV2ZW50LiBUaGUgbm9ybWFsaXphdGlvbiBjYW4gYmUgYXBwbGllZCBiYXNlZCBvbiB0aGUgc3lzY2FsbAojIG5hbWUgKGUuZy4gY29ubmVjdCwgb3Blbikgb3IgYmFzZWQgb24gdGhlIHJlY29yZCB0eXBlIChlLmcuIFVTRVJfTE9HSU4pLgojIE5vIHR3byBub3JtYWxpemF0aW9ucyBjYW4gYXBwbHkgdG8gdGhlIHNhbWUgc3lzY2FsbCBvciByZWNvcmQgdHlwZS4gVGhpcwojIHdpbGwgcmVzdWx0IGluIGEgZmFpbHVyZSBhdCBsb2FkIHRpbWUuCiMKIyBFYWNoIG5vcm1hbGl6YXRpb24gc2hvdWxkIHNwZWNpZnk6CiMgICBhY3Rpb24gLSB3aGF0IGhhcHBlbmVkCiMgICBhY3RvciAgLSB3aG8gZGlkIHRoaXMgb3Igd2hvIHRyaWdnZXJlZCB0aGUgZXZlbnQKIyAgIG9iamVjdCAtIHdoYXQgd2FzIHRoZSAidGhpbmciIGludm9sdmVkIGluIHRoZSBhY3Rpb24gKGUuZy4gcHJvY2Vzcywgc29ja2V0KQojICAgaG93ICAgIC0gaG93IHdhcyB0aGUgYWN0aW9uIHBlcmZvcm1lZCAoZS5nLiBleGUgb3IgdGVybWluYWwpCm5vcm1hbGl6YXRpb25zOgogIC0gZWNzOiAqZWNzLXByb2Nlc3MKICAgIHN5c2NhbGxzOgogICAgICAtICcqJyAjIHRoaXMgaXMgYSBjYXRjaCBhbGwKICAtIGFjdGlvbjogb3BlbmVkLWZpbGUKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgc3lzY2FsbHM6CiAgICAgICMgY3JlYXQgLSBvcGVuIGFuZCBwb3NzaWJseSBjcmVhdGUgYSBmaWxlCiAgICAgIC0gY3JlYXQKICAgIGVjczoKICAgICAgPDw6ICplY3MtZmlsZQogICAgICB0eXBlOiBjcmVhdGlvbgogIC0gYWN0aW9uOiBvcGVuZWQtZmlsZQogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBmYWxsb2NhdGUgLSBtYW5pcHVsYXRlIGZpbGUgc3BhY2UKICAgICAgLSBmYWxsb2NhdGUKICAgICAgIyB0cnVuY2F0ZSAtIHRydW5jYXRlIGEgZmlsZSB0byBhIHNwZWNpZmllZCBsZW5ndGgKICAgICAgLSB0cnVuY2F0ZQogICAgICAjIGZ0cnVuY2F0ZSAtIHRydW5jYXRlIGEgZmlsZSB0byBhIHNwZWNpZmllZCBsZW5ndGgKICAgICAgLSBmdHJ1bmNhdGUKICAgIGVjczoKICAgICAgPDw6ICplY3MtZmlsZQogICAgICAjIHRlY2huaWNhbGx5IHlvdSBjYW4gdHJ1bmNhdGUgYSBmaWxlIHRvIHRoZSBzYW1lIGxlbmd0aAogICAgICAjIGJ1dCByZWdhcmRsZXNzLCB3ZSBjb25zaWRlciB0aGlzIGEgY2hhbmdlCiAgICAgIHR5cGU6IGNoYW5nZQogIC0gYWN0aW9uOiBvcGVuZWQtZmlsZQogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBvcGVuIC0gb3BlbiBhbmQgcG9zc2libHkgY3JlYXRlIGEgZmlsZQogICAgICAtIG9wZW4KICAgICAgIyBvcGVuYXQgLSBvcGVuIGFuZCBwb3NzaWJseSBjcmVhdGUgYSBmaWxlCiAgICAgIC0gb3BlbmF0CiAgICAgICMgcmVhZGxpbmsgLSByZWFkIHZhbHVlIG9mIGEgc3ltYm9saWMgbGluawogICAgICAtIHJlYWRsaW5rCiAgICAgICMgcmVhZGxpbmthdCAtIHJlYWQgdmFsdWUgb2YgYSBzeW1ib2xpYyBsaW5rCiAgICAgIC0gcmVhZGxpbmthdAogICAgZWNzOiAqZWNzLWZpbGUKICAtIGFjdGlvbjogcmVhZC1maWxlCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIHJlYWQgLSByZWFkIGZyb20gYSBmaWxlIGRlc2NyaXB0b3IKICAgICAgLSByZWFkCiAgICBlY3M6ICplY3MtZmlsZQogIC0gYWN0aW9uOiB3cm90ZS10by1maWxlCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIHdyaXRlIC0gd3JpdGUgdG8gYSBmaWxlIGRlc2NyaXB0b3IKICAgICAgLSB3cml0ZQogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgIHR5cGU6IGNoYW5nZQogIC0gYWN0aW9uOiBjaGFuZ2VkLWZpbGUtYXR0cmlidXRlcy1vZgogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBzZXR4YXR0ciAtIHNldCBhbiBleHRlbmRlZCBhdHRyaWJ1dGUgdmFsdWUKICAgICAgLSBzZXR4YXR0cgogICAgICAjIGZzZXR4YXR0ciAtIHNldCBhbiBleHRlbmRlZCBhdHRyaWJ1dGUgdmFsdWUKICAgICAgLSBmc2V0eGF0dHIKICAgICAgIyBsc2V0eGF0dHIgLSBzZXQgYW4gZXh0ZW5kZWQgYXR0cmlidXRlIHZhbHVlCiAgICAgIC0gbHNldHhhdHRyCiAgICAgICMgcmVtb3ZleGF0dHIgLSByZW1vdmUgYW4gZXh0ZW5kZWQgYXR0cmlidXRlCiAgICAgIC0gcmVtb3ZleGF0dHIKICAgICAgIyBmcmVtb3ZleGF0dHIgLSByZW1vdmUgYW4gZXh0ZW5kZWQgYXR0cmlidXRlCiAgICAgIC0gZnJlbW92ZXhhdHRyCiAgICAgICMgbHJlbW92ZXhhdHRyIC0gcmVtb3ZlIGFuIGV4dGVuZGVkIGF0dHJpYnV0ZQogICAgICAtIGxyZW1vdmV4YXR0cgogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgIHR5cGU6IGNoYW5nZQogIC0gYWN0aW9uOiBjaGFuZ2VkLWZpbGUtcGVybWlzc2lvbnMtb2YKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgc3lzY2FsbHM6CiAgICAgICMgY2htb2QgLSBjaGFuZ2UgcGVybWlzc2lvbnMgb2YgYSBmaWxlCiAgICAgIC0gY2htb2QKICAgICAgIyBmY2htb2QgLSBjaGFuZ2UgcGVybWlzc2lvbnMgb2YgYSBmaWxlCiAgICAgIC0gZmNobW9kCiAgICAgICMgZmNobW9kYXQgLSBjaGFuZ2UgcGVybWlzc2lvbnMgb2YgYSBmaWxlCiAgICAgIC0gZmNobW9kYXQKICAgIGVjczoKICAgICAgPDw6ICplY3MtZmlsZQogICAgICB0eXBlOiBjaGFuZ2UKICAtIGFjdGlvbjogY2hhbmdlZC1maWxlLW93bmVyc2hpcC1vZgogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBjaG93biAtIGNoYW5nZSBvd25lcnNoaXAgb2YgYSBmaWxlCiAgICAgIC0gY2hvd24KICAgICAgIyBmY2hvd24gLSBjaGFuZ2Ugb3duZXJzaGlwIG9mIGEgZmlsZQogICAgICAtIGZjaG93bgogICAgICAjIGZjaG93bmF0IC0gY2hhbmdlIG93bmVyc2hpcCBvZiBhIGZpbGUKICAgICAgLSBmY2hvd25hdAogICAgICAjIGxjaG93biAtIGNoYW5nZSBvd25lcnNoaXAgb2YgYSBmaWxlCiAgICAgIC0gbGNob3duCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgdHlwZTogY2hhbmdlCiAgLSBhY3Rpb246IGxvYWRlZC1rZXJuZWwtbW9kdWxlCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgICAgcHJpbWFyeTogbmFtZQogICAgcmVjb3JkX3R5cGVzOgogICAgICAtIEtFUk5fTU9EVUxFCiAgICBzeXNjYWxsczoKICAgICAgIyBmaW5pdF9tb2R1bGUgLSBsb2FkIGEga2VybmVsIG1vZHVsZQogICAgICAtIGZpbml0X21vZHVsZQogICAgICAjIGluaXRfbW9kdWxlIC0gbG9hZCBhIGtlcm5lbCBtb2R1bGUKICAgICAgLSBpbml0X21vZHVsZQogICAgZWNzOgogICAgICA8PDogKmVjcy1kcml2ZXIKICAgICAgdHlwZTogc3RhcnQKICAtIGFjdGlvbjogdW5sb2FkZWQta2VybmVsLW1vZHVsZQogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBkZWxldGVfbW9kdWxlIC0gdW5sb2FkIGEga2VybmVsIG1vZHVsZQogICAgICAtIGRlbGV0ZV9tb2R1bGUKICAgIGVjczoKICAgICAgPDw6ICplY3MtZHJpdmVyCiAgICAgIHR5cGU6IGVuZAogIC0gYWN0aW9uOiBjcmVhdGVkLWRpcmVjdG9yeQogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICAgIHBhdGhfaW5kZXg6IDEKICAgIHN5c2NhbGxzOgogICAgICAjIG1rZGlyIC0gY3JlYXRlIGEgZGlyZWN0b3J5CiAgICAgIC0gbWtkaXIKICAgICAgIyBta2RpcmF0IC0gY3JlYXRlIGEgZGlyZWN0b3J5CiAgICAgIC0gbWtkaXJhdAogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgIHR5cGU6IGNyZWF0aW9uCiAgLSBhY3Rpb246IG1vdW50ZWQKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZXN5c3RlbQogICAgICBwYXRoX2luZGV4OiAxCiAgICBzeXNjYWxsczoKICAgICAgIyBtb3VudCAtIG1vdW50IGZpbGVzeXN0ZW0KICAgICAgLSBtb3VudAogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgICMgc2luY2UgYSBuZXcgbW91bnQgYXBwZWFycyBvbiB0aGUgc3lzdGVtCiAgICAgICMgd2UgY29uc2lkZXIgdGhpcyBhIGhpZ2gtbGV2ZWwgImNyZWF0aW9uIiBldmVudAogICAgICB0eXBlOiBjcmVhdGlvbgogIC0gYWN0aW9uOiByZW5hbWVkCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgICAgcGF0aF9pbmRleDogMgogICAgc3lzY2FsbHM6CiAgICAgICMgcmVuYW1lIC0gY2hhbmdlIHRoZSBuYW1lIG9yIGxvY2F0aW9uIG9mIGEgZmlsZQogICAgICAtIHJlbmFtZQogICAgICAjIHJlbmFtZWF0IC0gY2hhbmdlIHRoZSBuYW1lIG9yIGxvY2F0aW9uIG9mIGEgZmlsZQogICAgICAtIHJlbmFtZWF0CiAgICAgICMgcmVuYW1lYXQyIC0gY2hhbmdlIHRoZSBuYW1lIG9yIGxvY2F0aW9uIG9mIGEgZmlsZQogICAgICAtIHJlbmFtZWF0MgogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgIHR5cGU6IGNoYW5nZQogIC0gYWN0aW9uOiBjaGVja2VkLW1ldGFkYXRhLW9mCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIGFjY2VzcyAtIGNoZWNrIHVzZXIncyBwZXJtaXNzaW9ucyBmb3IgYSBmaWxlCiAgICAgIC0gYWNjZXNzCiAgICAgICMgZmFjY2Vzc2F0IC0gY2hlY2sgdXNlcidzIHBlcm1pc3Npb25zIGZvciBhIGZpbGUKICAgICAgLSBmYWNjZXNzYXQKICAgICAgIyBmc3RhdGF0IC0gZ2V0IGZpbGUgc3RhdHVzCiAgICAgIC0gZnN0YXRhdAogICAgICAjIG5ld2ZzdGF0YXQgLSBnZXQgZmlsZSBzdGF0dXMKICAgICAgLSBuZXdmc3RhdGF0CiAgICAgICMgc3RhdCAtIGdldCBmaWxlIHN0YXR1cwogICAgICAtIHN0YXQKICAgICAgIyBzdGF0NjQgLSBnZXQgZmlsZSBzdGF0dXMKICAgICAgLSBzdGF0NjQKICAgICAgIyBmc3RhdCAtIGdldCBmaWxlIHN0YXR1cwogICAgICAtIGZzdGF0CiAgICAgICMgbHN0YXQgLSBnZXQgZmlsZSBzdGF0dXMKICAgICAgLSBsc3RhdAogICAgICAjIGdldHhhdHRyIC0gcmV0cmlldmUgYW4gZXh0ZW5kZWQgYXR0cmlidXRlIHZhbHVlCiAgICAgIC0gZ2V0eGF0dHIKICAgICAgIyBsZ2V0eGF0dHIgLSByZXRyaWV2ZSBhbiBleHRlbmRlZCBhdHRyaWJ1dGUgdmFsdWUKICAgICAgLSBsZ2V0eGF0dHIKICAgICAgIyBmZ2V0eGF0dHIgLSByZXRyaWV2ZSBhbiBleHRlbmRlZCBhdHRyaWJ1dGUgdmFsdWUKICAgICAgLSBmZ2V0eGF0dHIKICAgIGVjczogKmVjcy1maWxlCiAgLSBhY3Rpb246IGNoZWNrZWQtZmlsZXN5c3RlbS1tZXRhZGF0YS1vZgogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlc3lzdGVtCiAgICBzeXNjYWxsczoKICAgICAgIyBzdGF0ZnMgLSBnZXQgZmlsZXN5c3RlbSBzdGF0aXN0aWNzCiAgICAgIC0gc3RhdGZzCiAgICAgICMgZnN0YXRmcyAtIGdldCBmaWxlc3lzdGVtIHN0YXRpc3RpY3MKICAgICAgLSBmc3RhdGZzCiAgICBlY3M6ICplY3MtZmlsZQogIC0gYWN0aW9uOiBzeW1saW5rZWQKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgc3lzY2FsbHM6CiAgICAgICMgc3ltbGluayAtIG1ha2UgYSBuZXcgbmFtZSBmb3IgYSBmaWxlCiAgICAgIC0gc3ltbGluawogICAgICAjIHN5bWxpbmthdCAtIG1ha2UgYSBuZXcgbmFtZSBmb3IgYSBmaWxlCiAgICAgIC0gc3ltbGlua2F0CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgIyAiY3JlYXRpb24iIHNpbmNlIHdlJ3JlIGNyZWF0aW5nIGEgbmV3IGZpbGUgc3lzdGVtCiAgICAgICMgZW50cnkgZm9yIHRoZSBzeW1saW5rCiAgICAgIHR5cGU6IGNyZWF0aW9uCiAgLSBhY3Rpb246IHVubW91bnRlZAogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlc3lzdGVtCiAgICBzeXNjYWxsczoKICAgICAgIyB1bW91bnQgLSB1bm1vdW50IGZpbGVzeXN0ZW0KICAgICAgLSB1bW91bnQKICAgICAgIyB1bW91bnQyIC0gdW5tb3VudCBmaWxlc3lzdGVtCiAgICAgIC0gdW1vdW50MgogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgICMgImRlbGV0aW9uIiB0byBtaXJyb3IgdGhlICJjcmVhdGlvbiIgb2YgdGhlIG1vdW50CiAgICAgIHR5cGU6IGRlbGV0aW9uCiAgLSBhY3Rpb246IGRlbGV0ZWQKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgc3lzY2FsbHM6CiAgICAgICMgcm1kaXIgLSBkZWxldGUgYSBkaXJlY3RvcnkKICAgICAgLSBybWRpcgogICAgICAjIHVubGluayAtIGRlbGV0ZSBhIG5hbWUgYW5kIHBvc3NpYmx5IHRoZSBmaWxlIGl0IHJlZmVycyB0bwogICAgICAtIHVubGluawogICAgICAjIHVubGlua2F0IC0gZGVsZXRlIGEgbmFtZSBhbmQgcG9zc2libHkgdGhlIGZpbGUgaXQgcmVmZXJzIHRvCiAgICAgIC0gdW5saW5rYXQKICAgIGVjczoKICAgICAgPDw6ICplY3MtZmlsZQogICAgICB0eXBlOiBkZWxldGlvbgogIC0gYWN0aW9uOiBjaGFuZ2VkLXRpbWVzdGFtcC1vZgogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyB1dGltZSAtIGNoYW5nZSBmaWxlIGxhc3QgYWNjZXNzIGFuZCBtb2RpZmljYXRpb24gdGltZXMKICAgICAgLSB1dGltZQogICAgICAjIHV0aW1lcyAtIGNoYW5nZSBmaWxlIGxhc3QgYWNjZXNzIGFuZCBtb2RpZmljYXRpb24gdGltZXMKICAgICAgLSB1dGltZXMKICAgICAgIyBmdXRpbWVzYXQgLSBjaGFuZ2UgdGltZXN0YW1wcyBvZiBhIGZpbGUgcmVsYXRpdmUgdG8gYSBcIGRpcmVjdG9yeSBmaWxlIGRlc2NyaXB0b3IKICAgICAgLSBmdXRpbWVzYXQKICAgICAgIyBmdXRpbWVucyAtIGNoYW5nZSBmaWxlIHRpbWVzdGFtcHMgd2l0aCBuYW5vc2Vjb25kIHByZWNpc2lvbgogICAgICAtIGZ1dGltZW5zCiAgICAgICMgdXRpbWVuc2F0IC0gY2hhbmdlIGZpbGUgdGltZXN0YW1wcyB3aXRoIG5hbm9zZWNvbmQgcHJlY2lzaW9uCiAgICAgIC0gdXRpbWVuc2F0CiAgICBlY3M6ICplY3MtZmlsZQogIC0gYWN0aW9uOiBleGVjdXRlZAogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBleGVjdmUgLSBleGVjdXRlIHByb2dyYW0KICAgICAgLSBleGVjdmUKICAgICAgIyBleGVjdmVhdCAtIGV4ZWN1dGUgcHJvZ3JhbSByZWxhdGl2ZSB0byBhIGRpcmVjdG9yeSBmaWxlIGRlc2NyaXB0b3IKICAgICAgLSBleGVjdmVhdAogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IHN0YXJ0CiAgLSBhY3Rpb246IGxpc3Rlbi1mb3ItY29ubmVjdGlvbnMKICAgIG9iamVjdDoKICAgICAgd2hhdDogc29ja2V0CiAgICBzeXNjYWxsczoKICAgICAgIyBsaXN0ZW4tIGxpc3RlbiBmb3IgY29ubmVjdGlvbnMgb24gYSBzb2NrZXQKICAgICAgLSBsaXN0ZW4KICAgIGVjczoKICAgICAgPDw6ICplY3MtbmV0d29yawogICAgICB0eXBlOiBzdGFydAogIC0gYWN0aW9uOiBhY2NlcHRlZC1jb25uZWN0aW9uLWZyb20KICAgIG9iamVjdDoKICAgICAgd2hhdDogc29ja2V0CiAgICBzeXNjYWxsczoKICAgICAgIyBhY2NlcHQgLSBhY2NlcHQgYSBjb25uZWN0aW9uIG9uIGEgc29ja2V0CiAgICAgIC0gYWNjZXB0CiAgICAgICMgYWNjZXB0NCAtIGFjY2VwdCBhIGNvbm5lY3Rpb24gb24gYSBzb2NrZXQKICAgICAgLSBhY2NlcHQ0CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLW5ldHdvcmsKICAgICAgdHlwZToKICAgICAgICAtIGNvbm5lY3Rpb24KICAgICAgICAtIHN0YXJ0CiAgLSBhY3Rpb246IGJvdW5kLXNvY2tldAogICAgb2JqZWN0OgogICAgICB3aGF0OiBzb2NrZXQKICAgIHN5c2NhbGxzOgogICAgICAjIGJpbmQgLWJpbmQgYSBuYW1lIHRvIGEgc29ja2V0CiAgICAgIC0gYmluZAogICAgZWNzOgogICAgICA8PDogKmVjcy1uZXR3b3JrCiAgICAgIHR5cGU6IHN0YXJ0CiAgLSBhY3Rpb246IGNvbm5lY3RlZC10bwogICAgb2JqZWN0OgogICAgICB3aGF0OiBzb2NrZXQKICAgIHN5c2NhbGxzOgogICAgICAtIGNvbm5lY3QKICAgIGVjczoKICAgICAgPDw6ICplY3MtbmV0d29yawogICAgICB0eXBlOgogICAgICAgIC0gY29ubmVjdGlvbgogICAgICAgIC0gc3RhcnQKICAtIGFjdGlvbjogcmVjZWl2ZWQtZnJvbQogICAgb2JqZWN0OgogICAgICB3aGF0OiBzb2NrZXQKICAgIHN5c2NhbGxzOgogICAgICAjIHJlY3YgLSByZWNlaXZlIGEgbWVzc2FnZSBmcm9tIGEgc29ja2V0CiAgICAgIC0gcmVjdgogICAgICAjIHJlY3Zmcm9tIC0gcmVjZWl2ZSBhIG1lc3NhZ2UgZnJvbSBhIHNvY2tldAogICAgICAtIHJlY3Zmcm9tCiAgICAgICMgcmVjdm1zZyAtIHJlY2VpdmUgYSBtZXNzYWdlIGZyb20gYSBzb2NrZXQKICAgICAgLSByZWN2bXNnCiAgICAgICMgcmVjdm1tc2cgLSByZWNlaXZlIG11bHRpcGxlIG1lc3NhZ2VzIG9uIGEgc29ja2V0CiAgICAgIC0gcmVjdm1tc2cKICAgIGVjczoKICAgICAgPDw6ICplY3MtbmV0d29yawogIC0gYWN0aW9uOiBzZW50LXRvCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNvY2tldAogICAgc3lzY2FsbHM6CiAgICAgICMgc2VuZCAtIHNlbmQgYSBtZXNzYWdlIG9uIGEgc29ja2V0CiAgICAgIC0gc2VuZAogICAgICAjIHNlbmR0byAtIHNlbmQgYSBtZXNzYWdlIG9uIGEgc29ja2V0CiAgICAgIC0gc2VuZHRvCiAgICAgICMgc2VuZG1zZyAtIHNlbmQgYSBtZXNzYWdlIG9uIGEgc29ja2V0CiAgICAgIC0gc2VuZG1zZwogICAgICAjIHNlbmRtbXNnIC0gc2VuZCBtdWx0aXBsZSBtZXNzYWdlcyBvbiBhIHNvY2tldAogICAgICAtIHNlbmRtbXNnCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLW5ldHdvcmsKICAtIGFjdGlvbjoga2lsbGVkLXBpZAogICAgb2JqZWN0OgogICAgICB3aGF0OiBwcm9jZXNzCiAgICBzeXNjYWxsczoKICAgICAgIyBraWxsIC0gc2VuZCBzaWduYWwgdG8gYSBwcm9jZXNzCiAgICAgIC0ga2lsbAogICAgICAjIHRraWxsIC0gc2VuZCBhIHNpZ25hbCB0byBhIHRocmVhZAogICAgICAtIHRraWxsCiAgICAgICMgdGdraWxsIC0gc2VuZCBhIHNpZ25hbCB0byBhIHRocmVhZAogICAgICAtIHRna2lsbAogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IGVuZAogIC0gYWN0aW9uOiBjaGFuZ2VkLWlkZW50aXR5LW9mCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHByb2Nlc3MKICAgIGhvdzogc3lzY2FsbAogICAgc3lzY2FsbHM6CiAgICAgICMgc2V0dWlkIC0gc2V0IHVzZXIgaWRlbnRpdHkKICAgICAgLSBzZXR1aWQKICAgICAgIyBzZXRldWlkIC0gc2V0IGVmZmVjdGl2ZSB1c2VyIG9yIGdyb3VwIElECiAgICAgIC0gc2V0ZXVpZAogICAgICAjIHNldGZzdWlkIC0gc2V0IHVzZXIgaWRlbnRpdHkgdXNlZCBmb3IgZmlsZXN5c3RlbSBjaGVja3MKICAgICAgLSBzZXRmc3VpZAogICAgICAjIHNldHJldWlkIC0gc2V0IHJlYWwgYW5kL29yIGVmZmVjdGl2ZSB1c2VyIG9yIGdyb3VwIElECiAgICAgIC0gc2V0cmV1aWQKICAgICAgIyBzZXRnaWQgLSBzZXQgZ3JvdXAgaWRlbnRpdHkKICAgICAgLSBzZXRnaWQKICAgICAgIyBzZXRlZ2lkIC0gc2V0IGVmZmVjdGl2ZSB1c2VyIG9yIGdyb3VwIElECiAgICAgIC0gc2V0ZWdpZAogICAgICAjIHNldGZzZ2lkIC0gc2V0IGdyb3VwIGlkZW50aXR5IHVzZWQgZm9yIGZpbGVzeXN0ZW0gY2hlY2tzCiAgICAgIC0gc2V0ZnNnaWQKICAgICAgIyBzZXRyZWdpZCAtIHNldCByZWFsIGFuZC9vciBlZmZlY3RpdmUgdXNlciBvciBncm91cCBJRAogICAgICAtIHNldHJlZ2lkCiAgICAgICMgc2V0cmVzdWlkIC0gc2V0IHJlYWwsIGVmZmVjdGl2ZSBhbmQgc2F2ZWQgdXNlciBvciBncm91cCBJRAogICAgICAtIHNldHJlc3VpZAogICAgICAjIHNldHJlc2dpZCAtIHNldCByZWFsLCBlZmZlY3RpdmUgYW5kIHNhdmVkIHVzZXIgb3IgZ3JvdXAgSUQKICAgICAgLSBzZXRyZXNnaWQKICAgIGVjczoKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBjaGFuZ2UKICAtIGFjdGlvbjogY2hhbmdlZC1zeXN0ZW0tdGltZQogICAgb2JqZWN0OgogICAgICB3aGF0OiBzeXN0ZW0KICAgIHN5c2NhbGxzOgogICAgICAjIHNldHRpbWVvZmRheSAtIGdldCAvIHNldCB0aW1lCiAgICAgIC0gc2V0dGltZW9mZGF5CiAgICAgICMgY2xvY2tfc2V0dGltZSAtIGNsb2NrIGFuZCB0aW1lIGZ1bmN0aW9ucwogICAgICAtIGNsb2NrX3NldHRpbWUKICAgICAgIyBzdGltZSAtIHNldCB0aW1lCiAgICAgIC0gc3RpbWUKICAgICAgIyBhZGp0aW1leCAtIHR1bmUga2VybmVsIGNsb2NrCiAgICAgIC0gYWRqdGltZXgKICAgIGVjczoKICAgICAgPDw6ICplY3MtaG9zdAogICAgICB0eXBlOiBjaGFuZ2UKICAtIGFjdGlvbjogbWFrZS1kZXZpY2UKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgc3lzY2FsbHM6CiAgICAgICMgbWtub2QgLSBjcmVhdGUgYSBzcGVjaWFsIG9yIG9yZGluYXJ5IGZpbGUKICAgICAgLSBta25vZAogICAgICAjIG1rbm9kYXQgLSBjcmVhdGUgYSBzcGVjaWFsIG9yIG9yZGluYXJ5IGZpbGUKICAgICAgLSBta25vZGF0CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgdHlwZTogY3JlYXRpb24KICAtIGFjdGlvbjogY2hhbmdlZC1zeXN0ZW0tbmFtZQogICAgb2JqZWN0OgogICAgICB3aGF0OiBzeXN0ZW0KICAgIHN5c2NhbGxzOgogICAgICAjIHNldGhvc3RuYW1lIC0gZ2V0L3NldCBob3N0bmFtZQogICAgICAtIHNldGhvc3RuYW1lCiAgICAgICMgc2V0ZG9tYWlubmFtZSAtIGdldC9zZXQgTklTIGRvbWFpbiBuYW1lCiAgICAgIC0gc2V0ZG9tYWlubmFtZQogICAgZWNzOgogICAgICA8PDogKmVjcy1ob3N0CiAgICAgIHR5cGU6IGNoYW5nZQogIC0gYWN0aW9uOiBhbGxvY2F0ZWQtbWVtb3J5CiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IG1lbW9yeQogICAgc3lzY2FsbHM6CiAgICAgICMgbW1hcCAtIG1hcCBvciB1bm1hcCBmaWxlcyBvciBkZXZpY2VzIGludG8gbWVtb3J5CiAgICAgIC0gbW1hcAogICAgICAjIG1tYXAyIC0gbWFwIGZpbGVzIG9yIGRldmljZXMgaW50byBtZW1vcnkKICAgICAgLSBtbWFwMgogICAgICAjIGJyayAtIGNoYW5nZSBkYXRhIHNlZ21lbnQgc2l6ZQogICAgICAtIGJyawogICAgZWNzOiAqZWNzLXByb2Nlc3MKICAtIGFjdGlvbjogYWRqdXN0ZWQtc2NoZWR1bGluZy1wb2xpY3ktb2YKICAgIG9iamVjdDoKICAgICAgd2hhdDogcHJvY2VzcwogICAgaG93OiBzeXNjYWxsCiAgICBzeXNjYWxsczoKICAgICAgIyBzY2hlZF9zZXRwYXJhbSAtIHNldCBhbmQgZ2V0IHNjaGVkdWxpbmcgcGFyYW1ldGVycwogICAgICAtIHNjaGVkX3NldHBhcmFtCiAgICAgICMgc2NoZWRfc2V0c2NoZWR1bGVyIC0gc2V0IGFuZCBnZXQgc2NoZWR1bGluZyBwb2xpY3kvcGFyYW1ldGVycwogICAgICAtIHNjaGVkX3NldHNjaGVkdWxlcgogICAgICAjIHNjaGVkX3NldGF0dHIgLSBzZXQgYW5kIGdldCBzY2hlZHVsaW5nIHBvbGljeSBhbmQgYXR0cmlidXRlcwogICAgICAtIHNjaGVkX3NldGF0dHIKICAgIGVjczoKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBjaGFuZ2UKCiAgIyBDdXJyZW50bHkgdW5oYW5kbGVkCiAgIyB0aGlzIGxpc3QgY29tZXMgZnJvbSBwYXJzaW5nIGxpbnV4IG1hbiBwYWdlcyBhdCBodHRwczovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vZG9jcy9tYW4tcGFnZXMvbWFuLXBhZ2VzLmdpdAoKICAjIHNpZ2FjdGlvbiAtIGV4YW1pbmUgYW5kIGNoYW5nZSBhIHNpZ25hbCBhY3Rpb24KICAjIHJ0X3NpZ2FjdGlvbiAtIGV4YW1pbmUgYW5kIGNoYW5nZSBhIHNpZ25hbCBhY3Rpb24KICAjIHByZWFkIC0gcmVhZCBmcm9tIG9yIHdyaXRlIHRvIGEgZmlsZSBkZXNjcmlwdG9yIGF0IGEgZ2l2ZW4gb2Zmc2V0CiAgIyBwd3JpdGUgLSByZWFkIGZyb20gb3Igd3JpdGUgdG8gYSBmaWxlIGRlc2NyaXB0b3IgYXQgYSBnaXZlbiBvZmZzZXQKICAjIHMzOTBfZ3VhcmRlZF9zdG9yYWdlIC0gb3BlcmF0aW9ucyB3aXRoIHovQXJjaGl0ZWN0dXJlIGd1YXJkZWQgc3RvcmFnZSBmYWNpbGl0eQogICMgc2NoZWRfZ2V0YXR0ciAtIHNldCBhbmQgZ2V0IHNjaGVkdWxpbmcgcG9saWN5IGFuZCBhdHRyaWJ1dGVzCiAgIyBnZXRydXNhZ2UgLSBnZXQgcmVzb3VyY2UgdXNhZ2UKICAjIGZsb2NrIC0gYXBwbHkgb3IgcmVtb3ZlIGFuIGFkdmlzb3J5IGxvY2sgb24gYW4gb3BlbiBmaWxlCiAgIyBwaWRmZF9nZXRmZCAtIG9idGFpbiBhIGR1cGxpY2F0ZSBvZiBhbm90aGVyIHByb2Nlc3MncyBmaWxlIGRlc2NyaXB0b3IKICAjIGNsb2NrX25hbm9zbGVlcCAtIGhpZ2gtcmVzb2x1dGlvbiBzbGVlcCB3aXRoIHNwZWNpZmlhYmxlIGNsb2NrCiAgIyBnZXRwYWdlc2l6ZSAtIGdldCBtZW1vcnkgcGFnZSBzaXplCiAgIyBwaWRmZF9vcGVuIC0gb2J0YWluIGEgZmlsZSBkZXNjcmlwdG9yIHRoYXQgcmVmZXJzIHRvIGEgcHJvY2VzcwogICMgc3BsaWNlIC0gc3BsaWNlIGRhdGEgdG8vZnJvbSBhIHBpcGUKICAjIGdldHJlc3VpZCAtIGdldCByZWFsLCBlZmZlY3RpdmUgYW5kIHNhdmVkIHVzZXIvZ3JvdXAgSURzCiAgIyBnZXRyZXNnaWQgLSBnZXQgcmVhbCwgZWZmZWN0aXZlIGFuZCBzYXZlZCB1c2VyL2dyb3VwIElEcwogICMgcmVtYXBfZmlsZV9wYWdlcyAtIGNyZWF0ZSBhIG5vbmxpbmVhciBmaWxlIG1hcHBpbmcKICAjIGlvX2NhbmNlbCAtIGNhbmNlbCBhbiBvdXRzdGFuZGluZyBhc3luY2hyb25vdXMgSS9PIG9wZXJhdGlvbgogICMgcHJjdGwgLSBvcGVyYXRpb25zIG9uIGEgcHJvY2VzcyBvciB0aHJlYWQKICAjIGNsb2NrX2dldHJlcyAtIGNsb2NrIGFuZCB0aW1lIGZ1bmN0aW9ucwogICMgY2xvY2tfZ2V0dGltZSAtIGNsb2NrIGFuZCB0aW1lIGZ1bmN0aW9ucwogICMgZ2V0Z3JvdXBzIC0gZ2V0L3NldCBsaXN0IG9mIHN1cHBsZW1lbnRhcnkgZ3JvdXAgSURzCiAgIyBzZXRncm91cHMgLSBnZXQvc2V0IGxpc3Qgb2Ygc3VwcGxlbWVudGFyeSBncm91cCBJRHMKICAjIHZtc3BsaWNlIC0gc3BsaWNlIHVzZXIgcGFnZXMgdG8vZnJvbSBhIHBpcGUKICAjIGVwb2xsX2NyZWF0ZSAtIG9wZW4gYW4gZXBvbGwgZmlsZSBkZXNjcmlwdG9yCiAgIyBlcG9sbF9jcmVhdGUxIC0gb3BlbiBhbiBlcG9sbCBmaWxlIGRlc2NyaXB0b3IKICAjIHBvc2l4X2ZhZHZpc2UgLSBwcmVkZWNsYXJlIGFuIGFjY2VzcyBwYXR0ZXJuIGZvciBmaWxlIGRhdGEKICAjIHNpZ3dhaXRpbmZvIC0gc3luY2hyb25vdXNseSB3YWl0IGZvciBxdWV1ZWQgc2lnbmFscwogICMgc2lndGltZWR3YWl0IC0gc3luY2hyb25vdXNseSB3YWl0IGZvciBxdWV1ZWQgc2lnbmFscwogICMgcnRfc2lndGltZWR3YWl0IC0gc3luY2hyb25vdXNseSB3YWl0IGZvciBxdWV1ZWQgc2lnbmFscwogICMgc2lncmV0dXJuIC0gcmV0dXJuIGZyb20gc2lnbmFsIGhhbmRsZXIgYW5kIGNsZWFudXAgc3RhY2sgZnJhbWUKICAjIHJ0X3NpZ3JldHVybiAtIHJldHVybiBmcm9tIHNpZ25hbCBoYW5kbGVyIGFuZCBjbGVhbnVwIHN0YWNrIGZyYW1lCiAgIyBnZXRyYW5kb20gLSBvYnRhaW4gYSBzZXJpZXMgb2YgcmFuZG9tIGJ5dGVzCiAgIyBrZXljdGwgLSBtYW5pcHVsYXRlIHRoZSBrZXJuZWwncyBrZXkgbWFuYWdlbWVudCBmYWNpbGl0eQogICMgc2NoZWRfZ2V0c2NoZWR1bGVyIC0gc2V0IGFuZCBnZXQgc2NoZWR1bGluZyBwb2xpY3kvcGFyYW1ldGVycwogICMgbWJpbmQgLSBzZXQgbWVtb3J5IHBvbGljeSBmb3IgYSBtZW1vcnkgcmFuZ2UKICAjIGdldHByaW9yaXR5IC0gZ2V0L3NldCBwcm9ncmFtIHNjaGVkdWxpbmcgcHJpb3JpdHkKICAjIHNldHByaW9yaXR5IC0gZ2V0L3NldCBwcm9ncmFtIHNjaGVkdWxpbmcgcHJpb3JpdHkKICAjIGlub3RpZnlfaW5pdCAtIGluaXRpYWxpemUgYW4gaW5vdGlmeSBpbnN0YW5jZQogICMgaW5vdGlmeV9pbml0MSAtIGluaXRpYWxpemUgYW4gaW5vdGlmeSBpbnN0YW5jZQogICMgc2VtY3RsIC0gU3lzdGVtIFYgc2VtYXBob3JlIGNvbnRyb2wgb3BlcmF0aW9ucwogICMgZ2V0aG9zdG5hbWUgLSBnZXQvc2V0IGhvc3RuYW1lCiAgIyBwdHJhY2UgLSBwcm9jZXNzIHRyYWNlCiAgIyBzeXNjdGwgLSByZWFkL3dyaXRlIHN5c3RlbSBwYXJhbWV0ZXJzCiAgIyBnZXRwZWVybmFtZSAtIGdldCBuYW1lIG9mIGNvbm5lY3RlZCBwZWVyIHNvY2tldAogICMgZm9yayAtIGNyZWF0ZSBhIGNoaWxkIHByb2Nlc3MKICAjIHF1ZXJ5X21vZHVsZSAtIHF1ZXJ5IHRoZSBrZXJuZWwgZm9yIHZhcmlvdXMgYml0cyBwZXJ0YWluaW5nIHRvIG1vZHVsZXMKICAjIGlvY3RsX2xpc3QgLSBsaXN0IG9mIGlvY3RsIGNhbGxzIGluIExpbnV4L2kzODYga2VybmVsCiAgIyBtc2dnZXQgLSBnZXQgYSBTeXN0ZW0gViBtZXNzYWdlIHF1ZXVlIGlkZW50aWZpZXIKICAjIHNwdV9jcmVhdGUgLSBjcmVhdGUgYSBuZXcgc3B1IGNvbnRleHQKICAjIHN1YnBhZ2VfcHJvdCAtIGRlZmluZSBhIHN1YnBhZ2UgcHJvdGVjdGlvbiBmb3IgYW4gYWRkcmVzcyByYW5nZQogICMgcXVvdGFjdGwgLSBtYW5pcHVsYXRlIGRpc2sgcXVvdGFzCiAgIyBuZnNzZXJ2Y3RsIC0gc3lzY2FsbCBpbnRlcmZhY2UgdG8ga2VybmVsIG5mcyBkYWVtb24KICAjIG9wZW5hdDIgLSBvcGVuIGFuZCBwb3NzaWJseSBjcmVhdGUgYSBmaWxlIChleHRlbmRlZCkKICAjIGdldHJsaW1pdCAtIGdldC9zZXQgcmVzb3VyY2UgbGltaXRzCiAgIyBzZXRybGltaXQgLSBnZXQvc2V0IHJlc291cmNlIGxpbWl0cwogICMgcHJsaW1pdCAtIGdldC9zZXQgcmVzb3VyY2UgbGltaXRzCiAgIyB0ZWUgLSBkdXBsaWNhdGluZyBwaXBlIGNvbnRlbnQKICAjIHNobWdldCAtIGFsbG9jYXRlcyBhIFN5c3RlbSBWIHNoYXJlZCBtZW1vcnkgc2VnbWVudAogICMgY3JlYXRlX21vZHVsZSAtIGNyZWF0ZSBhIGxvYWRhYmxlIG1vZHVsZSBlbnRyeQogICMgZ2V0dGltZW9mZGF5IC0gZ2V0IC8gc2V0IHRpbWUKICAjIHRpbWVyX2NyZWF0ZSAtIGNyZWF0ZSBhIFBPU0lYIHBlci1wcm9jZXNzIHRpbWVyCiAgIyBmYW5vdGlmeV9tYXJrIC0gYWRkLCByZW1vdmUsIG9yIG1vZGlmeSBhbiBmYW5vdGlmeSBtYXJrIG9uIGEgZmlsZXN5c3RlbSBvYmplY3QKICAjIHBpcGUgLSBjcmVhdGUgcGlwZQogICMgcGlwZTIgLSBjcmVhdGUgcGlwZQogICMgaW50cm8gLSBpbnRyb2R1Y3Rpb24gdG8gc3lzdGVtIGNhbGxzCiAgIyBsb29rdXBfZGNvb2tpZSAtIHJldHVybiBhIGRpcmVjdG9yeSBlbnRyeSdzIHBhdGgKICAjIHN5c2ZzIC0gZ2V0IGZpbGVzeXN0ZW0gdHlwZSBpbmZvcm1hdGlvbgogICMgczM5MF9ydW50aW1lX2luc3RyIC0gZW5hYmxlL2Rpc2FibGUgczM5MCBDUFUgcnVuLXRpbWUgaW5zdHJ1bWVudGF0aW9uCiAgIyBzZXRucyAtIHJlYXNzb2NpYXRlIHRocmVhZCB3aXRoIGEgbmFtZXNwYWNlCiAgIyBzZXRfbWVtcG9saWN5IC0gc2V0IGRlZmF1bHQgTlVNQSBtZW1vcnkgcG9saWN5IGZvciBhIHRocmVhZCBhbmQgaXRzIGNoaWxkcmVuCiAgIyBuaWNlIC0gY2hhbmdlIHByb2Nlc3MgcHJpb3JpdHkKICAjIGlvX3NldHVwIC0gY3JlYXRlIGFuIGFzeW5jaHJvbm91cyBJL08gY29udGV4dAogICMgbWluY29yZSAtIGRldGVybWluZSB3aGV0aGVyIHBhZ2VzIGFyZSByZXNpZGVudCBpbiBtZW1vcnkKICAjIGlvY3RsX2NvbnNvbGUgLSBpb2N0bHMgZm9yIGNvbnNvbGUgdGVybWluYWwgYW5kIHZpcnR1YWwgY29uc29sZXMKICAjIHBvbGwgLSB3YWl0IGZvciBzb21lIGV2ZW50IG9uIGEgZmlsZSBkZXNjcmlwdG9yCiAgIyBwcG9sbCAtIHdhaXQgZm9yIHNvbWUgZXZlbnQgb24gYSBmaWxlIGRlc2NyaXB0b3IKICAjIGNhcGdldCAtIHNldC9nZXQgY2FwYWJpbGl0aWVzIG9mIHRocmVhZChzKQogICMgY2Fwc2V0IC0gc2V0L2dldCBjYXBhYmlsaXRpZXMgb2YgdGhyZWFkKHMpCiAgIyBpb2N0bF90dHkgLSBpb2N0bHMgZm9yIHRlcm1pbmFscyBhbmQgc2VyaWFsIGxpbmVzCiAgIyBpb3BsIC0gY2hhbmdlIEkvTyBwcml2aWxlZ2UgbGV2ZWwKICAjIGlvX2dldGV2ZW50cyAtIHJlYWQgYXN5bmNocm9ub3VzIEkvTyBldmVudHMgZnJvbSB0aGUgY29tcGxldGlvbiBxdWV1ZQogICMgcHJvY2Vzc192bV9yZWFkdiAtIHRyYW5zZmVyIGRhdGEgYmV0d2VlbiBwcm9jZXNzIGFkZHJlc3Mgc3BhY2VzCiAgIyBwcm9jZXNzX3ZtX3dyaXRldiAtIHRyYW5zZmVyIGRhdGEgYmV0d2VlbiBwcm9jZXNzIGFkZHJlc3Mgc3BhY2VzCiAgIyBwY2ljb25maWdfcmVhZCAtIHBjaSBkZXZpY2UgaW5mb3JtYXRpb24gaGFuZGxpbmcKICAjIHBjaWNvbmZpZ193cml0ZSAtIHBjaSBkZXZpY2UgaW5mb3JtYXRpb24gaGFuZGxpbmcKICAjIHBjaWNvbmZpZ19pb2Jhc2UgLSBwY2kgZGV2aWNlIGluZm9ybWF0aW9uIGhhbmRsaW5nCiAgIyBzYnJrIC0gY2hhbmdlIGRhdGEgc2VnbWVudCBzaXplCiAgIyBzZXRfdGlkX2FkZHJlc3MgLSBzZXQgcG9pbnRlciB0byB0aHJlYWQgSUQKICAjIHBrZXlfYWxsb2MgLSBhbGxvY2F0ZSBvciBmcmVlIGEgcHJvdGVjdGlvbiBrZXkKICAjIHBrZXlfZnJlZSAtIGFsbG9jYXRlIG9yIGZyZWUgYSBwcm90ZWN0aW9uIGtleQogICMgc2VsZWN0IC0gc3luY2hyb25vdXMgSS9PIG11bHRpcGxleGluZwogICMgcHNlbGVjdCAtIHN5bmNocm9ub3VzIEkvTyBtdWx0aXBsZXhpbmcKICAjIGtleGVjX2xvYWQgLSBsb2FkIGEgbmV3IGtlcm5lbCBmb3IgbGF0ZXIgZXhlY3V0aW9uCiAgIyBrZXhlY19maWxlX2xvYWQgLSBsb2FkIGEgbmV3IGtlcm5lbCBmb3IgbGF0ZXIgZXhlY3V0aW9uCiAgIyBwZXJzb25hbGl0eSAtIHNldCB0aGUgcHJvY2VzcyBleGVjdXRpb24gZG9tYWluCiAgIyBpb2N0bF9nZXRmc21hcCAtIHJldHJpZXZlIHRoZSBwaHlzaWNhbCBsYXlvdXQgb2YgdGhlIGZpbGVzeXN0ZW0KICAjIGlub3RpZnlfcm1fd2F0Y2ggLSByZW1vdmUgYW4gZXhpc3Rpbmcgd2F0Y2ggZnJvbSBhbiBpbm90aWZ5IGluc3RhbmNlCiAgIyBwZXJmX2V2ZW50X29wZW4gLSBzZXQgdXAgcGVyZm9ybWFuY2UgbW9uaXRvcmluZwogICMgdGltZXJfZ2V0b3ZlcnJ1biAtIGdldCBvdmVycnVuIGNvdW50IGZvciBhIFBPU0lYIHBlci1wcm9jZXNzIHRpbWVyCiAgIyB3YWl0MyAtIHdhaXQgZm9yIHByb2Nlc3MgdG8gY2hhbmdlIHN0YXRlLCBCU0Qgc3R5bGUKICAjIHdhaXQ0IC0gd2FpdCBmb3IgcHJvY2VzcyB0byBjaGFuZ2Ugc3RhdGUsIEJTRCBzdHlsZQogICMgbGluayAtIG1ha2UgYSBuZXcgbmFtZSBmb3IgYSBmaWxlCiAgIyBsaW5rYXQgLSBtYWtlIGEgbmV3IG5hbWUgZm9yIGEgZmlsZQogICMgc2NoZWRfcnJfZ2V0X2ludGVydmFsIC0gZ2V0IHRoZSBTQ0hFRF9SUiBpbnRlcnZhbCBmb3IgdGhlIG5hbWVkIHByb2Nlc3MKICAjIG11bm1hcCAtIG1hcCBvciB1bm1hcCBmaWxlcyBvciBkZXZpY2VzIGludG8gbWVtb3J5CiAgIyBzb2NrZXRjYWxsIC0gc29ja2V0IHN5c3RlbSBjYWxscwogICMgbXJlbWFwIC0gcmVtYXAgYSB2aXJ0dWFsIG1lbW9yeSBhZGRyZXNzCiAgIyB2Zm9yayAtIGNyZWF0ZSBhIGNoaWxkIHByb2Nlc3MgYW5kIGJsb2NrIHBhcmVudAogICMgc2VjY29tcCAtIG9wZXJhdGUgb24gU2VjdXJlIENvbXB1dGluZyBzdGF0ZSBvZiB0aGUgcHJvY2VzcwogICMgcmVxdWVzdF9rZXkgLSByZXF1ZXN0IGEga2V5IGZyb20gdGhlIGtlcm5lbCdzIGtleSBtYW5hZ2VtZW50IGZhY2lsaXR5CiAgIyBzeXNjYWxsIC0gaW5kaXJlY3Qgc3lzdGVtIGNhbGwKICAjIGtjbXAgLSBjb21wYXJlIHR3byBwcm9jZXNzZXMgdG8gZGV0ZXJtaW5lIGlmIHRoZXkgc2hhcmUgYSBrZXJuZWwgcmVzb3VyY2UKICAjIHJlYWRkaXIgLSByZWFkIGRpcmVjdG9yeSBlbnRyeQogICMgaW9wZXJtIC0gc2V0IHBvcnQgaW5wdXQvb3V0cHV0IHBlcm1pc3Npb25zCiAgIyBzcHVfcnVuIC0gZXhlY3V0ZSBhbiBTUFUgY29udGV4dAogICMgcmVib290IC0gcmVib290IG9yIGVuYWJsZS9kaXNhYmxlIEN0cmwtQWx0LURlbAogICMgcmVhZGFoZWFkIC0gaW5pdGlhdGUgZmlsZSByZWFkYWhlYWQgaW50byBwYWdlIGNhY2hlCiAgIyBzY2hlZF9nZXRwYXJhbSAtIHNldCBhbmQgZ2V0IHNjaGVkdWxpbmcgcGFyYW1ldGVycwogICMgYWNjdCAtIHN3aXRjaCBwcm9jZXNzIGFjY291bnRpbmcgb24gb3Igb2ZmCiAgIyBzaWdzdXNwZW5kIC0gd2FpdCBmb3IgYSBzaWduYWwKICAjIHJ0X3NpZ3N1c3BlbmQgLSB3YWl0IGZvciBhIHNpZ25hbAogICMgZXhpdF9ncm91cCAtIGV4aXQgYWxsIHRocmVhZHMgaW4gYSBwcm9jZXNzCiAgIyBzb2NrZXQgLSBjcmVhdGUgYW4gZW5kcG9pbnQgZm9yIGNvbW11bmljYXRpb24KICAjIGlvY3RsX3VzZXJmYXVsdGZkIC0gY3JlYXRlIGEgZmlsZSBkZXNjcmlwdG9yIGZvciBoYW5kbGluZyBwYWdlIGZhdWx0cyBpbiB1c2VyIHNwYWNlCiAgIyBzY2hlZF9nZXRfcHJpb3JpdHlfbWF4IC0gZ2V0IHN0YXRpYyBwcmlvcml0eSByYW5nZQogICMgc2NoZWRfZ2V0X3ByaW9yaXR5X21pbiAgLSBnZXQgc3RhdGljIHByaW9yaXR5IHJhbmdlCiAgIyBnZXRkZW50cyAtIGdldCBkaXJlY3RvcnkgZW50cmllcwogICMgZ2V0ZGVudHM2NCAtIGdldCBkaXJlY3RvcnkgZW50cmllcwogICMgc2VsZWN0IC0gc3luY2hyb25vdXMgSS9PIG11bHRpcGxleGluZwogICMgcHNlbGVjdCAtIHN5bmNocm9ub3VzIEkvTyBtdWx0aXBsZXhpbmcKICAjIGFsbG9jX2h1Z2VwYWdlcyAtIGFsbG9jYXRlIG9yIGZyZWUgaHVnZSBwYWdlcwogICMgZnJlZV9odWdlcGFnZXMgLSBhbGxvY2F0ZSBvciBmcmVlIGh1Z2UgcGFnZXMKICAjIGZzeW5jIC0gc3luY2hyb25pemUgYSBmaWxlJ3MgaW4tY29yZSBzdGF0ZSB3aXRoIHN0b3JhZ2UgZGV2aWNlCiAgIyBmZGF0YXN5bmMgLSBzeW5jaHJvbml6ZSBhIGZpbGUncyBpbi1jb3JlIHN0YXRlIHdpdGggc3RvcmFnZSBkZXZpY2UKICAjIHN5c2NhbGxzIC0gTGludXggc3lzdGVtIGNhbGxzCiAgIyBtZW1mZF9jcmVhdGUgLSBjcmVhdGUgYW4gYW5vbnltb3VzIGZpbGUKICAjIG1vZGlmeV9sZHQgLSBnZXQgb3Igc2V0IGEgcGVyLXByb2Nlc3MgTERUIGVudHJ5CiAgIyBnZXRfa2VybmVsX3N5bXMgLSByZXRyaWV2ZSBleHBvcnRlZCBrZXJuZWwgYW5kIG1vZHVsZSBzeW1ib2xzCiAgIyBsc2VlayAtIHJlcG9zaXRpb24gcmVhZC93cml0ZSBmaWxlIG9mZnNldAogICMgc2htYXQgLSBTeXN0ZW0gViBzaGFyZWQgbWVtb3J5IG9wZXJhdGlvbnMKICAjIHNobWR0IC0gU3lzdGVtIFYgc2hhcmVkIG1lbW9yeSBvcGVyYXRpb25zCiAgIyB0aW1lcl9kZWxldGUgLSBkZWxldGUgYSBQT1NJWCBwZXItcHJvY2VzcyB0aW1lcgogICMgcGVyZm1vbmN0bCAtIGludGVyZmFjZSB0byBJQS02NCBwZXJmb3JtYW5jZSBtb25pdG9yaW5nIHVuaXQKICAjIG1vdmVfcGFnZXMgLSBtb3ZlIGluZGl2aWR1YWwgcGFnZXMgb2YgYSBwcm9jZXNzIHRvIGFub3RoZXIgbm9kZQogICMgY2hkaXIgLSBjaGFuZ2Ugd29ya2luZyBkaXJlY3RvcnkKICAjIGZjaGRpciAtIGNoYW5nZSB3b3JraW5nIGRpcmVjdG9yeQogICMgdGltZSAtIGdldCB0aW1lIGluIHNlY29uZHMKICAjIF9leGl0IC0gdGVybWluYXRlIHRoZSBjYWxsaW5nIHByb2Nlc3MKICAjIF9FeGl0IC0gdGVybWluYXRlIHRoZSBjYWxsaW5nIHByb2Nlc3MKICAjIHMzOTBfc3RoeWkgLSBlbXVsYXRlIFNUSFlJIGluc3RydWN0aW9uCiAgIyBpb19zdWJtaXQgLSBzdWJtaXQgYXN5bmNocm9ub3VzIEkvTyBibG9ja3MgZm9yIHByb2Nlc3NpbmcKICAjIG1sb2NrIC0gbG9jayBhbmQgdW5sb2NrIG1lbW9yeQogICMgbWxvY2syIC0gbG9jayBhbmQgdW5sb2NrIG1lbW9yeQogICMgbXVubG9jayAtIGxvY2sgYW5kIHVubG9jayBtZW1vcnkKICAjIG1sb2NrYWxsIC0gbG9jayBhbmQgdW5sb2NrIG1lbW9yeQogICMgbXVubG9ja2FsbCAtIGxvY2sgYW5kIHVubG9jayBtZW1vcnkKICAjIHVtYXNrIC0gc2V0IGZpbGUgbW9kZSBjcmVhdGlvbiBtYXNrCiAgIyBhcmNoX3ByY3RsIC0gc2V0IGFyY2hpdGVjdHVyZS1zcGVjaWZpYyB0aHJlYWQgc3RhdGUKICAjIHVzZWxpYiAtIGxvYWQgc2hhcmVkIGxpYnJhcnkKICAjIHNlbmRmaWxlIC0gdHJhbnNmZXIgZGF0YSBiZXR3ZWVuIGZpbGUgZGVzY3JpcHRvcnMKICAjIHNobWN0bCAtIFN5c3RlbSBWIHNoYXJlZCBtZW1vcnkgY29udHJvbAogICMgZXBvbGxfd2FpdCAtIHdhaXQgZm9yIGFuIEkvTyBldmVudCBvbiBhbiBlcG9sbCBmaWxlIGRlc2NyaXB0b3IKICAjIGVwb2xsX3B3YWl0IC0gd2FpdCBmb3IgYW4gSS9PIGV2ZW50IG9uIGFuIGVwb2xsIGZpbGUgZGVzY3JpcHRvcgogICMgc2lnYWx0c3RhY2sgLSBzZXQgYW5kL29yIGdldCBzaWduYWwgc3RhY2sgY29udGV4dAogICMgaW9jdGwgLSBjb250cm9sIGRldmljZQogICMgc2lnbmFsZmQgLSBjcmVhdGUgYSBmaWxlIGRlc2NyaXB0b3IgZm9yIGFjY2VwdGluZyBzaWduYWxzCiAgIyB1bnNoYXJlIC0gZGlzYXNzb2NpYXRlIHBhcnRzIG9mIHRoZSBwcm9jZXNzIGV4ZWN1dGlvbiBjb250ZXh0CiAgIyBjaHJvb3QgLSBjaGFuZ2Ugcm9vdCBkaXJlY3RvcnkKICAjIG1hZHZpc2UgLSBnaXZlIGFkdmljZSBhYm91dCB1c2Ugb2YgbWVtb3J5CiAgIyBnZXR0aWQgLSBnZXQgdGhyZWFkIGlkZW50aWZpY2F0aW9uCiAgIyBnZXRzb2NrbmFtZSAtIGdldCBzb2NrZXQgbmFtZQogICMgaW9fZGVzdHJveSAtIGRlc3Ryb3kgYW4gYXN5bmNocm9ub3VzIEkvTyBjb250ZXh0CiAgIyBzZXR1cCAtIHNldHVwIGRldmljZXMgYW5kIGZpbGVzeXN0ZW1zLCBtb3VudCByb290IGZpbGVzeXN0ZW0KICAjIG50cF9hZGp0aW1lIC0gdHVuZSBrZXJuZWwgY2xvY2sKICAjIHNlbWdldCAtIGdldCBhIFN5c3RlbSBWIHNlbWFwaG9yZSBzZXQgaWRlbnRpZmllcgogICMgZ2V0dWlkIC0gZ2V0IHVzZXIgaWRlbnRpdHkKICAjIGdldGV1aWQgLSBnZXQgdXNlciBpZGVudGl0eQogICMgX3N5c2NhbGwgLSBpbnZva2luZyBhIHN5c3RlbSBjYWxsIHdpdGhvdXQgbGlicmFyeSBzdXBwb3J0IChPQlNPTEVURSkKICAjIHNjaGVkX3NldGFmZmluaXR5IC0gXCBzZXQgYW5kIGdldCBhIHRocmVhZCdzIENQVSBhZmZpbml0eSBtYXNrCiAgIyBzY2hlZF9nZXRhZmZpbml0eSAtIFwgc2V0IGFuZCBnZXQgYSB0aHJlYWQncyBDUFUgYWZmaW5pdHkgbWFzawogICMgY2FjaGVmbHVzaCAtIGZsdXNoIGNvbnRlbnRzIG9mIGluc3RydWN0aW9uIGFuZC9vciBkYXRhIGNhY2hlCiAgIyBwaXZvdF9yb290IC0gY2hhbmdlIHRoZSByb290IG1vdW50CiAgIyBtc2djdGwgLSBTeXN0ZW0gViBtZXNzYWdlIGNvbnRyb2wgb3BlcmF0aW9ucwogICMgaW9jdGxfZmF0IC0gbWFuaXB1bGF0aW5nIHRoZSBGQVQgZmlsZXN5c3RlbQogICMgc2V0cGdpZCAtIHNldC9nZXQgcHJvY2VzcyBncm91cAogICMgZ2V0cGdpZCAtIHNldC9nZXQgcHJvY2VzcyBncm91cAogICMgc2V0cGdycCAtIHNldC9nZXQgcHJvY2VzcyBncm91cAogICMgZ2V0cGdycCAtIHNldC9nZXQgcHJvY2VzcyBncm91cAogICMgc29ja2V0cGFpciAtIGNyZWF0ZSBhIHBhaXIgb2YgY29ubmVjdGVkIHNvY2tldHMKICAjIGJkZmx1c2ggLSBzdGFydCwgZmx1c2gsIG9yIHR1bmUgYnVmZmVyLWRpcnR5LWZsdXNoIGRhZW1vbgogICMgYWxhcm0gLSBzZXQgYW4gYWxhcm0gY2xvY2sgZm9yIGRlbGl2ZXJ5IG9mIGEgc2lnbmFsCiAgIyB0aW1lcl9zZXR0aW1lIC0gYXJtL2Rpc2FybSBhbmQgZmV0Y2ggc3RhdGUgb2YgUE9TSVggcGVyLXByb2Nlc3MgdGltZXIKICAjIHRpbWVyX2dldHRpbWUgLSBhcm0vZGlzYXJtIGFuZCBmZXRjaCBzdGF0ZSBvZiBQT1NJWCBwZXItcHJvY2VzcyB0aW1lcgogICMgYWRkX2tleSAtIGFkZCBhIGtleSB0byB0aGUga2VybmVsJ3Mga2V5IG1hbmFnZW1lbnQgZmFjaWxpdHkKICAjIHJ0X3NpZ3F1ZXVlaW5mbyAtIHF1ZXVlIGEgc2lnbmFsIGFuZCBkYXRhCiAgIyBydF90Z3NpZ3F1ZXVlaW5mbyAtIHF1ZXVlIGEgc2lnbmFsIGFuZCBkYXRhCiAgIyB1c2VyZmF1bHRmZCAtIGNyZWF0ZSBhIGZpbGUgZGVzY3JpcHRvciBmb3IgaGFuZGxpbmcgcGFnZSBmYXVsdHMgaW4gdXNlciBzcGFjZQogICMgc2Vtb3AgLSBTeXN0ZW0gViBzZW1hcGhvcmUgb3BlcmF0aW9ucwogICMgc2VtdGltZWRvcCAtIFN5c3RlbSBWIHNlbWFwaG9yZSBvcGVyYXRpb25zCiAgIyBnZXRnaWQgLSBnZXQgZ3JvdXAgaWRlbnRpdHkKICAjIGdldGVnaWQgLSBnZXQgZ3JvdXAgaWRlbnRpdHkKICAjIGdldHBpZCAtIGdldCBwcm9jZXNzIGlkZW50aWZpY2F0aW9uCiAgIyBnZXRwcGlkIC0gZ2V0IHByb2Nlc3MgaWRlbnRpZmljYXRpb24KICAjIHNpZ3Byb2NtYXNrIC0gZXhhbWluZSBhbmQgY2hhbmdlIGJsb2NrZWQgc2lnbmFscwogICMgcnRfc2lncHJvY21hc2sgLSBleGFtaW5lIGFuZCBjaGFuZ2UgYmxvY2tlZCBzaWduYWxzCiAgIyB1bmFtZSAtIGdldCBuYW1lIGFuZCBpbmZvcm1hdGlvbiBhYm91dCBjdXJyZW50IGtlcm5lbAogICMgc3RhdHggLSBnZXQgZmlsZSBzdGF0dXMgKGV4dGVuZGVkKQogICMgaW9jdGxfZmljbG9uZXJhbmdlIC0gc2hhcmUgc29tZSB0aGUgZGF0YSBvZiBvbmUgZmlsZSB3aXRoIGFub3RoZXIgZmlsZQogICMgaW9jdGxfZmljbG9uZSAtIHNoYXJlIHNvbWUgdGhlIGRhdGEgb2Ygb25lIGZpbGUgd2l0aCBhbm90aGVyIGZpbGUKICAjIG1xX2dldHNldGF0dHIgLSBnZXQvc2V0IG1lc3NhZ2UgcXVldWUgYXR0cmlidXRlcwogICMgaW9wcmlvX2dldCAtIGdldC9zZXQgSS9PIHNjaGVkdWxpbmcgY2xhc3MgYW5kIHByaW9yaXR5CiAgIyBpb3ByaW9fc2V0IC0gZ2V0L3NldCBJL08gc2NoZWR1bGluZyBjbGFzcyBhbmQgcHJpb3JpdHkKICAjIGVwb2xsX2N0bCAtIGNvbnRyb2wgaW50ZXJmYWNlIGZvciBhbiBlcG9sbCBmaWxlIGRlc2NyaXB0b3IKICAjIHN5bmMgLSBjb21taXQgZmlsZXN5c3RlbSBjYWNoZXMgdG8gZGlzawogICMgc3luY2ZzIC0gY29tbWl0IGZpbGVzeXN0ZW0gY2FjaGVzIHRvIGRpc2sKICAjIHNldHNpZCAtIGNyZWF0ZXMgYSBzZXNzaW9uIGFuZCBzZXRzIHRoZSBwcm9jZXNzIGdyb3VwIElECiAgIyBzaHV0ZG93biAtIHNodXQgZG93biBwYXJ0IG9mIGEgZnVsbC1kdXBsZXggY29ubmVjdGlvbgogICMgZ2V0c2lkIC0gZ2V0IHNlc3Npb24gSUQKICAjIGdldF90aHJlYWRfYXJlYSAtIG1hbmlwdWxhdGUgdGhyZWFkLWxvY2FsIHN0b3JhZ2UgaW5mb3JtYXRpb24KICAjIHNldF90aHJlYWRfYXJlYSAtIG1hbmlwdWxhdGUgdGhyZWFkLWxvY2FsIHN0b3JhZ2UgaW5mb3JtYXRpb24KICAjIHRpbWVyZmRfY3JlYXRlIC0gdGltZXJzIHRoYXQgbm90aWZ5IHZpYSBmaWxlIGRlc2NyaXB0b3JzCiAgIyB0aW1lcmZkX3NldHRpbWUgLSB0aW1lcnMgdGhhdCBub3RpZnkgdmlhIGZpbGUgZGVzY3JpcHRvcnMKICAjIHRpbWVyZmRfZ2V0dGltZSAtIHRpbWVycyB0aGF0IG5vdGlmeSB2aWEgZmlsZSBkZXNjcmlwdG9ycwogICMgaW9jdGxfZmlkZWR1cGVyYW5nZSAtIHNoYXJlIHNvbWUgdGhlIGRhdGEgb2Ygb25lIGZpbGUgd2l0aCBhbm90aGVyIGZpbGUKICAjIG5hbWVfdG9faGFuZGxlX2F0IC0gb2J0YWluIGhhbmRsZSBmb3IgYSBwYXRobmFtZSBhbmQgb3BlbiBmaWxlIHZpYSBhIGhhbmRsZQogICMgb3Blbl9ieV9oYW5kbGVfYXQgLSBvYnRhaW4gaGFuZGxlIGZvciBhIHBhdGhuYW1lIGFuZCBvcGVuIGZpbGUgdmlhIGEgaGFuZGxlCiAgIyBmdXRleCAtIGZhc3QgdXNlci1zcGFjZSBsb2NraW5nCiAgIyBpb2N0bF9ucyAtIGlvY3RsKCkgb3BlcmF0aW9ucyBmb3IgTGludXggbmFtZXNwYWNlcwogICMgcGlkZmRfc2VuZF9zaWduYWwgLSBzZW5kIGEgc2lnbmFsIHRvIGEgcHJvY2VzcyBzcGVjaWZpZWQgYnkgYSBmaWxlIGRlc2NyaXB0b3IKICAjIGNsb25lIC0gY3JlYXRlIGEgY2hpbGQgcHJvY2VzcwogICMgX19jbG9uZTIgLSBjcmVhdGUgYSBjaGlsZCBwcm9jZXNzCiAgIyBjbG9uZTMgLSBjcmVhdGUgYSBjaGlsZCBwcm9jZXNzCiAgIyB0aW1lcyAtIGdldCBwcm9jZXNzIHRpbWVzCiAgIyBzeXNpbmZvIC0gcmV0dXJuIHN5c3RlbSBpbmZvcm1hdGlvbgogICMgaXBjIC0gU3lzdGVtIFYgSVBDIHN5c3RlbSBjYWxscwogICMgZXZlbnRmZCAtIGNyZWF0ZSBhIGZpbGUgZGVzY3JpcHRvciBmb3IgZXZlbnQgbm90aWZpY2F0aW9uCiAgIyB3YWl0IC0gd2FpdCBmb3IgcHJvY2VzcyB0byBjaGFuZ2Ugc3RhdGUKICAjIHdhaXRwaWQgLSB3YWl0IGZvciBwcm9jZXNzIHRvIGNoYW5nZSBzdGF0ZQogICMgd2FpdGlkIC0gd2FpdCBmb3IgcHJvY2VzcyB0byBjaGFuZ2Ugc3RhdGUKICAjIGdldGRvbWFpbm5hbWUgLSBnZXQvc2V0IE5JUyBkb21haW4gbmFtZQogICMgaWRsZSAtIG1ha2UgcHJvY2VzcyAwIGlkbGUKICAjIGlub3RpZnlfYWRkX3dhdGNoIC0gYWRkIGEgd2F0Y2ggdG8gYW4gaW5pdGlhbGl6ZWQgaW5vdGlmeSBpbnN0YW5jZQogICMgZ2V0X21lbXBvbGljeSAtIHJldHJpZXZlIE5VTUEgbWVtb3J5IHBvbGljeSBmb3IgYSB0aHJlYWQKICAjIGJwZiAtIHBlcmZvcm0gYSBjb21tYW5kIG9uIGFuIGV4dGVuZGVkIEJQRiBtYXAgb3IgcHJvZ3JhbQogICMgZ2V0c29ja29wdCAtIGdldCBhbmQgc2V0IG9wdGlvbnMgb24gc29ja2V0cwogICMgc2V0c29ja29wdCAtIGdldCBhbmQgc2V0IG9wdGlvbnMgb24gc29ja2V0cwogICMgZ2V0aXRpbWVyIC0gZ2V0IG9yIHNldCB2YWx1ZSBvZiBhbiBpbnRlcnZhbCB0aW1lcgogICMgc2V0aXRpbWVyIC0gZ2V0IG9yIHNldCB2YWx1ZSBvZiBhbiBpbnRlcnZhbCB0aW1lcgogICMgbWVtYmFycmllciAtIGlzc3VlIG1lbW9yeSBiYXJyaWVycyBvbiBhIHNldCBvZiB0aHJlYWRzCiAgIyBtcHJvdGVjdCAtIHNldCBwcm90ZWN0aW9uIG9uIGEgcmVnaW9uIG9mIG1lbW9yeQogICMgcGtleV9tcHJvdGVjdCAtIHNldCBwcm90ZWN0aW9uIG9uIGEgcmVnaW9uIG9mIG1lbW9yeQogICMgZ2V0Y3B1IC0gZGV0ZXJtaW5lIENQVSBhbmQgTlVNQSBub2RlIG9uIHdoaWNoIHRoZSBjYWxsaW5nIHRocmVhZCBpcyBydW5uaW5nCiAgIyBpb2N0bF9mc2xhYmVsIC0gZ2V0IG9yIHNldCBhIGZpbGVzeXN0ZW0gbGFiZWwKICAjIGxpc3R4YXR0ciAtIGxpc3QgZXh0ZW5kZWQgYXR0cmlidXRlIG5hbWVzCiAgIyBsbGlzdHhhdHRyIC0gbGlzdCBleHRlbmRlZCBhdHRyaWJ1dGUgbmFtZXMKICAjIGZsaXN0eGF0dHIgLSBsaXN0IGV4dGVuZGVkIGF0dHJpYnV0ZSBuYW1lcwogICMgX2xsc2VlayAtIHJlcG9zaXRpb24gcmVhZC93cml0ZSBmaWxlIG9mZnNldAogICMgZmNudGwgLSBtYW5pcHVsYXRlIGZpbGUgZGVzY3JpcHRvcgogICMgdXN0YXQgLSBnZXQgZmlsZXN5c3RlbSBzdGF0aXN0aWNzCiAgIyBzaWduYWwgLSBBTlNJIEMgc2lnbmFsIGhhbmRsaW5nCiAgIyBuYW5vc2xlZXAgLSBoaWdoLXJlc29sdXRpb24gc2xlZXAKICAjIGNvbm5lY3QgLSBpbml0aWF0ZSBhIGNvbm5lY3Rpb24gb24gYSBzb2NrZXQKICAjIHZtODZvbGQgLSBlbnRlciB2aXJ0dWFsIDgwODYgbW9kZQogICMgdm04NiAtIGVudGVyIHZpcnR1YWwgODA4NiBtb2RlCiAgIyBmYW5vdGlmeV9pbml0IC0gY3JlYXRlIGFuZCBpbml0aWFsaXplIGZhbm90aWZ5IGdyb3VwCiAgIyBtaWdyYXRlX3BhZ2VzIC0gbW92ZSBhbGwgcGFnZXMgaW4gYSBwcm9jZXNzIHRvIGFub3RoZXIgc2V0IG9mIG5vZGVzCiAgIyByZXN0YXJ0X3N5c2NhbGwgLSByZXN0YXJ0IGEgc3lzdGVtIGNhbGwgYWZ0ZXIgaW50ZXJydXB0aW9uIGJ5IGEgc3RvcCBzaWduYWwKICAjIGNsb3NlIC0gY2xvc2UgYSBmaWxlIGRlc2NyaXB0b3IKICAjIG1zZ3JjdiAtIFN5c3RlbSBWIG1lc3NhZ2UgcXVldWUgb3BlcmF0aW9ucwogICMgbXNnc25kIC0gU3lzdGVtIFYgbWVzc2FnZSBxdWV1ZSBvcGVyYXRpb25zCiAgIyByZWFkdiAtIHJlYWQgb3Igd3JpdGUgZGF0YSBpbnRvIG11bHRpcGxlIGJ1ZmZlcnMKICAjIHdyaXRldiAtIHJlYWQgb3Igd3JpdGUgZGF0YSBpbnRvIG11bHRpcGxlIGJ1ZmZlcnMKICAjIHByZWFkdiAtIHJlYWQgb3Igd3JpdGUgZGF0YSBpbnRvIG11bHRpcGxlIGJ1ZmZlcnMKICAjIHB3cml0ZXYgLSByZWFkIG9yIHdyaXRlIGRhdGEgaW50byBtdWx0aXBsZSBidWZmZXJzCiAgIyBwcmVhZHYyIC0gcmVhZCBvciB3cml0ZSBkYXRhIGludG8gbXVsdGlwbGUgYnVmZmVycwogICMgcHdyaXRldjIgLSByZWFkIG9yIHdyaXRlIGRhdGEgaW50byBtdWx0aXBsZSBidWZmZXJzCiAgIyBzeXNsb2cgLSByZWFkIGFuZC9vciBjbGVhciBrZXJuZWwgbWVzc2FnZSByaW5nIGJ1ZmZlcjsgc2V0IGNvbnNvbGVfbG9nbGV2ZWwKICAjIGtsb2djdGwgLSByZWFkIGFuZC9vciBjbGVhciBrZXJuZWwgbWVzc2FnZSByaW5nIGJ1ZmZlcjsgc2V0IGNvbnNvbGVfbG9nbGV2ZWwKICAjIHNjaGVkX3lpZWxkIC0geWllbGQgdGhlIHByb2Nlc3NvcgogICMgdmhhbmd1cCAtIHZpcnR1YWxseSBoYW5ndXAgdGhlIGN1cnJlbnQgdGVybWluYWwKICAjIGlvY3RsX2lmbGFncyAtIGlvY3RsKCkgb3BlcmF0aW9ucyBmb3IgaW5vZGUgZmxhZ3MKICAjIHNnZXRtYXNrIC0gbWFuaXB1bGF0aW9uIG9mIHNpZ25hbCBtYXNrIChvYnNvbGV0ZSkKICAjIHNzZXRtYXNrIC0gbWFuaXB1bGF0aW9uIG9mIHNpZ25hbCBtYXNrIChvYnNvbGV0ZSkKICAjIHN5bmNfZmlsZV9yYW5nZSAtIHN5bmMgYSBmaWxlIHNlZ21lbnQgd2l0aCBkaXNrCiAgIyBjb3B5X2ZpbGVfcmFuZ2UgLSBDb3B5IGEgcmFuZ2Ugb2YgZGF0YSBmcm9tIG9uZSBmaWxlIHRvIGFub3RoZXIKICAjIHNpZ3BlbmRpbmcgLSBleGFtaW5lIHBlbmRpbmcgc2lnbmFscwogICMgcnRfc2lncGVuZGluZyAtIGV4YW1pbmUgcGVuZGluZyBzaWduYWxzCiAgIyBnZXR1bndpbmQgLSBjb3B5IHRoZSB1bndpbmQgZGF0YSB0byBjYWxsZXIncyBidWZmZXIKICAjIG1zeW5jIC0gc3luY2hyb25pemUgYSBmaWxlIHdpdGggYSBtZW1vcnkgbWFwCiAgIyBnZXRfcm9idXN0X2xpc3QgLSBnZXQvc2V0IGxpc3Qgb2Ygcm9idXN0IGZ1dGV4ZXMKICAjIHNldF9yb2J1c3RfbGlzdCAtIGdldC9zZXQgbGlzdCBvZiByb2J1c3QgZnV0ZXhlcwogICMgZHVwIC0gZHVwbGljYXRlIGEgZmlsZSBkZXNjcmlwdG9yCiAgIyBkdXAyIC0gZHVwbGljYXRlIGEgZmlsZSBkZXNjcmlwdG9yCiAgIyBkdXAzIC0gZHVwbGljYXRlIGEgZmlsZSBkZXNjcmlwdG9yCiAgIyBzMzkwX3BjaV9tbWlvX3dyaXRlIC0gdHJhbnNmZXIgZGF0YSB0by9mcm9tIFBDSSBNTUlPIG1lbW9yeSBwYWdlCiAgIyBzMzkwX3BjaV9tbWlvX3JlYWQgLSB0cmFuc2ZlciBkYXRhIHRvL2Zyb20gUENJIE1NSU8gbWVtb3J5IHBhZ2UKICAjIHBhdXNlIC0gd2FpdCBmb3Igc2lnbmFsCiAgIyBzd2Fwb24gLSBzdGFydC9zdG9wIHN3YXBwaW5nIHRvIGZpbGUvZGV2aWNlCiAgIyBzd2Fwb2ZmIC0gc3RhcnQvc3RvcCBzd2FwcGluZyB0byBmaWxlL2RldmljZQoKICAjIFJlY29yZCB0eXBlIG5vcm1hbGl6YXRpb25zCiAgIyBVc2VmdWwgbGlua3M6CiAgIyBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vdG9ydmFsZHMvbGludXgvdjQuMTYvaW5jbHVkZS91YXBpL2xpbnV4L2F1ZGl0LmgKICAjIGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9saW51eC1hdWRpdC9hdWRpdC11c2Vyc3BhY2UvNGQ5MzMzMDFiMTgzNWNhZmEwOGI5ZTllZjcwNWM4ZmI2Yzk2Y2I2Mi9saWIvbGliYXVkaXQuaAogICMgaHR0cHM6Ly93d3cuZWxhc3RpYy5jby9ndWlkZS9lbi9lY3MvY3VycmVudC9lY3MtYWxsb3dlZC12YWx1ZXMtZXZlbnQtY2F0ZWdvcnkuaHRtbAoKICAjIElBTSByZWxhdGVkIGV2ZW50cwoKICAjIEFVRElUX0FDQ1RfTE9DSyAtIFVzZXIncyBhY2NvdW50IGxvY2tlZCBieSBhZG1pbgogIC0gcmVjb3JkX3R5cGVzOiBBQ0NUX0xPQ0sKICAgIGFjdGlvbjogbG9ja2VkLWFjY291bnQKICAgIGVjczoKICAgICAgPDw6ICplY3MtaWFtCiAgICAgIHR5cGU6CiAgICAgICAgLSB1c2VyCiAgICAgICAgLSBpbmZvCiAgIyBBVURJVF9BQ0NUX1VOTE9DSyAtIFVzZXIncyBhY2NvdW50IHVubG9ja2VkIGJ5IGFkbWluCiAgLSByZWNvcmRfdHlwZXM6IEFDQ1RfVU5MT0NLCiAgICBhY3Rpb246IHVubG9ja2VkLWFjY291bnQKICAgIGVjczoKICAgICAgPDw6ICplY3MtaWFtCiAgICAgIHR5cGU6CiAgICAgICAgLSB1c2VyCiAgICAgICAgLSBpbmZvCiAgIyBBVURJVF9BRERfR1JPVVAgLSBHcm91cCBhY2NvdW50IGFkZGVkCiAgLSByZWNvcmRfdHlwZXM6IEFERF9HUk9VUAogICAgYWN0aW9uOiBhZGRlZC1ncm91cC1hY2NvdW50LXRvCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IFtpZCwgYWNjdF0KICAgICAgd2hhdDogYWNjb3VudAogICAgZWNzOgogICAgICA8PDogKmVjcy1pYW0KICAgICAgdHlwZToKICAgICAgICAtIGdyb3VwCiAgICAgICAgLSBjcmVhdGlvbgogICMgQVVESVRfQUREX1VTRVIgLSBVc2VyIGFjY291bnQgYWRkZWQKICAtIHJlY29yZF90eXBlczogQUREX1VTRVIKICAgIGFjdGlvbjogYWRkZWQtdXNlci1hY2NvdW50CiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IFtpZCwgYWNjdF0KICAgICAgd2hhdDogYWNjb3VudAogICAgZWNzOgogICAgICA8PDogKmVjcy1pYW0KICAgICAgdHlwZToKICAgICAgICAtIHVzZXIKICAgICAgICAtIGNyZWF0aW9uCiAgIyBBVURJVF9ERUxfR1JPVVAgLSBHcm91cCBhY2NvdW50IGRlbGV0ZWQKICAtIHJlY29yZF90eXBlczogREVMX0dST1VQCiAgICBhY3Rpb246IGRlbGV0ZWQtZ3JvdXAtYWNjb3VudC1mcm9tCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IFtpZCwgYWNjdF0KICAgICAgd2hhdDogYWNjb3VudAogICAgZWNzOgogICAgICA8PDogKmVjcy1pYW0KICAgICAgdHlwZToKICAgICAgICAtIGdyb3VwCiAgICAgICAgLSBkZWxldGlvbgogICMgQVVESVRfREVMX1VTRVIgLSBVc2VyIGFjY291bnQgZGVsZXRlZAogIC0gcmVjb3JkX3R5cGVzOiBERUxfVVNFUgogICAgYWN0aW9uOiBkZWxldGVkLXVzZXItYWNjb3VudAogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBbaWQsIGFjY3RdCiAgICAgIHdoYXQ6IGFjY291bnQKICAgIGVjczoKICAgICAgPDw6ICplY3MtaWFtCiAgICAgIHR5cGU6CiAgICAgICAgLSB1c2VyCiAgICAgICAgLSBkZWxldGlvbgogICMgQVVESVRfR1JQX01HTVQgLSBHcm91cCBhY2NvdW50IGF0dHIgd2FzIG1vZGlmaWVkCiAgLSByZWNvcmRfdHlwZXM6IEdSUF9NR01UCiAgICBhY3Rpb246IG1vZGlmaWVkLWdyb3VwLWFjY291bnQKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogW2lkLCBhY2N0XQogICAgICB3aGF0OiBhY2NvdW50CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWlhbQogICAgICB0eXBlOgogICAgICAgIC0gZ3JvdXAKICAgICAgICAtIGNoYW5nZQogICMgQVVESVRfUk9MRV9BU1NJR04gLSBBZG1pbiBhc3NpZ25lZCB1c2VyIHRvIHJvbGUKICAtIHJlY29yZF90eXBlczogUk9MRV9BU1NJR04KICAgIGFjdGlvbjogYXNzaWduZWQtdXNlci1yb2xlLXRvCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IFtpZCwgYWNjdF0KICAgICAgd2hhdDogYWNjb3VudAogICAgZWNzOgogICAgICA8PDogKmVjcy1pYW0KICAgICAgdHlwZToKICAgICAgICAtIHVzZXIKICAgICAgICAtIGNoYW5nZQogICMgQVVESVRfUk9MRV9NT0RJRlkgLSBBZG1pbiBtb2RpZmllZCBhIHJvbGUKICAtIHJlY29yZF90eXBlczogUk9MRV9NT0RJRlkKICAgIGFjdGlvbjogbW9kaWZpZWQtcm9sZQogICAgZWNzOgogICAgICA8PDogKmVjcy1pYW0KICAgICAgdHlwZToKICAgICAgICAtIGNoYW5nZQogICMgQVVESVRfUk9MRV9SRU1PVkUgLSBBZG1pbiByZW1vdmVkIHVzZXIgZnJvbSByb2xlCiAgLSByZWNvcmRfdHlwZXM6IFJPTEVfUkVNT1ZFCiAgICBhY3Rpb246IHJlbW92ZWQtdXNlLXJvbGUtZnJvbQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBbaWQsIGFjY3RdCiAgICAgIHdoYXQ6IGFjY291bnQKICAgIGVjczoKICAgICAgPDw6ICplY3MtaWFtCiAgICAgIHR5cGU6CiAgICAgICAgLSB1c2VyCiAgICAgICAgLSBjaGFuZ2UKICAjIEFVRElUX1VTRVJfTUdNVCAtIFVzZXIgYWNjdCBhdHRyaWJ1dGUgY2hhbmdlCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBVU0VSX01HTVQKICAgIGFjdGlvbjogbW9kaWZpZWQtdXNlci1hY2NvdW50CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWlhbQogICAgICB0eXBlOgogICAgICAgIC0gdXNlcgogICAgICAgIC0gY2hhbmdlCiAgIyBBVURJVF9VU0VSX0NIQVVUSFRPSyAtIFVzZXIgYWNjdCBwYXNzd29yZCBvciBwaW4gY2hhbmdlZAogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogVVNFUl9DSEFVVEhUT0sKICAgIGFjdGlvbjogY2hhbmdlZC1wYXNzd29yZAogICAgZWNzOgogICAgICA8PDogKmVjcy1pYW0KICAgICAgdHlwZToKICAgICAgICAtIHVzZXIKICAgICAgICAtIGNoYW5nZQogICMgQVVESVRfR1JQX0NIQVVUSFRPSyAtIEdyb3VwIGFjY3QgcGFzc3dvcmQgb3IgcGluIGNoYW5nZWQKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IEdSUF9DSEFVVEhUT0sKICAgIGFjdGlvbjogY2hhbmdlZC1ncm91cC1wYXNzd29yZAogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBhY2N0CiAgICAgIHdoYXQ6IHVzZXItc2Vzc2lvbgogICAgZWNzOgogICAgICA8PDogKmVjcy1pYW0KICAgICAgdHlwZToKICAgICAgICAtIGdyb3VwCiAgICAgICAgLSBjaGFuZ2UKCiAgIyBBdXRoZW50aWNhdGlvbiByZWxhdGVkIGV2ZW50cwoKICAjIEFVRElUX0NSRURfQUNRIC0gVXNlciBjcmVkZW50aWFsIGFjcXVpcmVkCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBDUkVEX0FDUQogICAgYWN0aW9uOiBhY3F1aXJlZC1jcmVkZW50aWFscwogICAgZWNzOiAqZWNzLWF1dGgKICAjIEFVRElUX0NSRURfRElTUCAtIFVzZXIgY3JlZGVudGlhbCBkaXNwb3NlZAogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogQ1JFRF9ESVNQCiAgICBhY3Rpb246IGRpc3Bvc2VkLWNyZWRlbnRpYWxzCiAgICBlY3M6ICplY3MtYXV0aAogICMgQVVESVRfQ1JFRF9SRUZSIC0gVXNlciBjcmVkZW50aWFsIHJlZnJlc2hlZAogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogQ1JFRF9SRUZSCiAgICBhY3Rpb246IHJlZnJlc2hlZC1jcmVkZW50aWFscwogICAgZWNzOiAqZWNzLWF1dGgKICAjIEFVRElUX0dSUF9BVVRIIC0gQXV0aGVudGljYXRpb24gZm9yIGdyb3VwIHBhc3N3b3JkCiAgLSByZWNvcmRfdHlwZXM6IEdSUF9BVVRICiAgICBhY3Rpb246IGF1dGhlbnRpY2F0ZWQtdG8tZ3JvdXAKICAgIGVjczogKmVjcy1hdXRoCiAgIyBBVURJVF9MT0dJTiAtIERlZmluZSB0aGUgbG9naW4gaWQgYW5kIGluZm9ybWF0aW9uCiAgLSByZWNvcmRfdHlwZXM6IExPR0lOCiAgICBhY3Rpb246IGNoYW5nZWQtbG9naW4taWQtdG8KICAgIHN1YmplY3Q6CiAgICAgIHByaW1hcnk6IFtvbGRfYXVpZCwgb2xkLWF1aWRdCiAgICAgIHNlY29uZGFyeTogdWlkCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGF1aWQKICAgICAgd2hhdDogdXNlci1zZXNzaW9uCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWF1dGgKICAgICAgdHlwZTogc3RhcnQKICAjIEFVRElUX1VTRVJfQUNDVCAtIFVzZXIgc3lzdGVtIGFjY2VzcyBhdXRob3JpemF0aW9uCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBVU0VSX0FDQ1QKICAgIGFjdGlvbjogd2FzLWF1dGhvcml6ZWQKICAgIGVjczogKmVjcy1hdXRoCiAgIyBBVURJVF9VU0VSX0FVVEggLSBVc2VyIHN5c3RlbSBhY2Nlc3MgYXV0aGVudGljYXRpb24KICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IFVTRVJfQVVUSAogICAgYWN0aW9uOiBhdXRoZW50aWNhdGVkCiAgICBlY3M6ICplY3MtYXV0aAogICMgQVVESVRfVVNFUl9FTkQgLSBVc2VyIHNlc3Npb24gZW5kCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBVU0VSX0VORAogICAgYWN0aW9uOiBlbmRlZC1zZXNzaW9uCiAgICBlY3M6ICplY3MtYXV0aAogICMgQVVESVRfVVNFUl9FUlIgLSBVc2VyIGFjY3Qgc3RhdGUgZXJyb3IKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IFVTRVJfRVJSCiAgICBhY3Rpb246IGVycm9yCiAgICBzb3VyY2VfaXA6IFthZGRyXQogICAgZWNzOiAqZWNzLWF1dGgKICAjIEFVRElUX1VTRVJfTE9HSU4gLSBVc2VyIGhhcyBsb2dnZWQgaW4KICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IFVTRVJfTE9HSU4KICAgIGFjdGlvbjogbG9nZ2VkLWluCiAgICBzb3VyY2VfaXA6IFthZGRyXQogICAgZWNzOgogICAgICA8PDogKmVjcy1hdXRoCiAgICAgIHR5cGU6IHN0YXJ0CiAgIyBBVURJVF9VU0VSX0xPR09VVCAtIFVzZXIgaGFzIGxvZ2dlZCBvdXQKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IFVTRVJfTE9HT1VUCiAgICBhY3Rpb246IGxvZ2dlZC1vdXQKICAgIGVjczoKICAgICAgPDw6ICplY3MtYXV0aAogICAgICB0eXBlOiBlbmQKICAjIEFVRElUX1VTRVJfUk9MRV9DSEFOR0UgLSBVc2VyIGNoYW5nZWQgdG8gYSBuZXcgcm9sZQogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogVVNFUl9ST0xFX0NIQU5HRQogICAgYWN0aW9uOiBjaGFuZ2VkLXJvbGUtdG8KICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogc2VsZWN0ZWQtY29udGV4dAogICAgICB3aGF0OiB1c2VyLXNlc3Npb24KICAjIEFVRElUX1VTRVJfU1RBUlQgLSBVc2VyIHNlc3Npb24gc3RhcnQKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IFVTRVJfU1RBUlQKICAgIGFjdGlvbjogc3RhcnRlZC1zZXNzaW9uCiAgICBzb3VyY2VfaXA6IFthZGRyXQogICAgZWNzOiAqZWNzLWF1dGgKCiAgIyBIb3N0IHZpcnR1YWxpemF0aW9uIGV2ZW50cwoKICAjIEFVRElUX1ZJUlRfQ09OVFJPTCAtIFN0YXJ0LCBQYXVzZSwgU3RvcCBWTQogIC0gcmVjb3JkX3R5cGVzOiBWSVJUX0NPTlRST0wKICAgIGFjdGlvbjogaXNzdWVkLXZtLWNvbnRyb2wKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogb3AKICAgICAgc2Vjb25kYXJ5OiB2bQogICAgICB3aGF0OiB2aXJ0dWFsLW1hY2hpbmUKICAgIGVjczogKmVjcy1ob3N0CiAgIyBBVURJVF9WSVJUX0NSRUFURSAtIENyZWF0aW9uIG9mIGd1ZXN0IGltYWdlCiAgLSByZWNvcmRfdHlwZXM6IFZJUlRfQ1JFQVRFCiAgICBhY3Rpb246IGNyZWF0ZWQtdm0taW1hZ2UKICAgIGVjczogKmVjcy1ob3N0CiAgIyBBVURJVF9WSVJUX0RFU1RST1kgLSBEZXN0cnVjdGlvbiBvZiBndWVzdCBpbWFnZQogIC0gcmVjb3JkX3R5cGVzOiBWSVJUX0RFU1RST1kKICAgIGFjdGlvbjogZGVsZXRlZC12bS1pbWFnZQogICAgZWNzOiAqZWNzLWhvc3QKICAjIEFVRElUX1ZJUlRfSU5URUdSSVRZX0NIRUNLIC0gR3Vlc3QgaW50ZWdyaXR5IHJlc3VsdHMKICAtIHJlY29yZF90eXBlczogVklSVF9JTlRFR1JJVFlfQ0hFQ0sKICAgIGFjdGlvbjogY2hlY2tlZC1pbnRlZ3JpdHktb2YKICAgIGVjczogKmVjcy1ob3N0CiAgIyBBVURJVF9WSVJUX01BQ0hJTkVfSUQgLSBCaW5kaW5nIG9mIGxhYmVsIHRvIFZNCiAgLSByZWNvcmRfdHlwZXM6IFZJUlRfTUFDSElORV9JRAogICAgYWN0aW9uOiBhc3NpZ25lZC12bS1pZAogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiB2bQogICAgICB3aGF0OiB2aXJ0dWFsLW1hY2hpbmUKICAgIGVjczogKmVjcy1ob3N0CiAgIyBBVURJVF9WSVJUX01JR1JBVEVfSU4gLSBJbmJvdW5kIGd1ZXN0IG1pZ3JhdGlvbiBpbmZvCiAgLSByZWNvcmRfdHlwZXM6IFZJUlRfTUlHUkFURV9JTgogICAgYWN0aW9uOiBtaWdyYXRlZC12bS1mcm9tCiAgICBlY3M6ICplY3MtaG9zdAogICMgQVVESVRfVklSVF9NSUdSQVRFX09VVCAtIE91dGJvdW5kIGd1ZXN0IG1pZ3JhdGlvbiBpbmZvCiAgLSByZWNvcmRfdHlwZXM6IFZJUlRfTUlHUkFURV9PVVQKICAgIGFjdGlvbjogbWlncmF0ZWQtdm0tdG8KICAgIGVjczogKmVjcy1ob3N0CiAgIyBBVURJVF9WSVJUX1JFU09VUkNFIC0gUmVzb3VyY2UgYXNzaWdubWVudAogIC0gcmVjb3JkX3R5cGVzOiBWSVJUX1JFU09VUkNFCiAgICBhY3Rpb246IGFzc2lnbmVkLXZtLXJlc291cmNlCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IHJlc3JjCiAgICAgIHNlY29uZGFyeTogdm0KICAgICAgd2hhdDogdmlydHVhbC1tYWNoaW5lCiAgICBlY3M6ICplY3MtaG9zdAoKICAjIFVzZXJzcGFjZSBwcm9jZXNzIGV2ZW50cwoKICAjIEFVRElUX0NIR1JQX0lEIC0gVXNlciBzcGFjZSBncm91cCBJRCBjaGFuZ2VkCiAgLSByZWNvcmRfdHlwZXM6IENIR1JQX0lECiAgICBhY3Rpb246IGNoYW5nZWQtZ3JvdXAKICAgIGVjczoKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBjaGFuZ2UKICAjIEFVRElUX0NIVVNFUl9JRCAtIENoYW5nZWQgdXNlciBJRCBzdXBwbGVtZW50YWwgZGF0YQogIC0gcmVjb3JkX3R5cGVzOiBDSFVTRVJfSUQKICAgIGFjdGlvbjogY2hhbmdlZC11c2VyLWlkCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogY2hhbmdlCiAgIyBBVURJVF9URVNUIC0gVXNlZCBmb3IgdGVzdCBzdWNjZXNzIG1lc3NhZ2VzCiAgLSByZWNvcmRfdHlwZXM6IFRFU1QKICAgIGFjdGlvbjogc2VudC10ZXN0CiAgICBlY3M6ICplY3MtcHJvY2VzcwogICMgQVVESVRfVFJVU1RFRF9BUFAgLSBUcnVzdGVkIGFwcCBtc2cgLSBmcmVlc3R5bGUgdGV4dAogIC0gcmVjb3JkX3R5cGVzOiBUUlVTVEVEX0FQUAogICAgYWN0aW9uOiB1bmtub3duCiAgICBlY3M6ICplY3MtcHJvY2VzcwogICMgQVVESVRfVVNFUl9DTUQgLSBVc2VyIHNoZWxsIGNvbW1hbmQgYW5kIGFyZ3MKICAtIHJlY29yZF90eXBlczogVVNFUl9DTUQKICAgIGFjdGlvbjogcmFuLWNvbW1hbmQKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogY21kCiAgICAgIHdoYXQ6IHByb2Nlc3MKICAgIGRlc2NyaXB0aW9uOiA+CiAgICAgIFRoZXNlIG1lc3NhZ2VzIGFyZSBmcm9tIHVzZXItc3BhY2UgYXBwcywgbGlrZSBzdWRvLCB0aGF0IGxvZyBjb21tYW5kcwogICAgICBiZWluZyBydW4gYnkgYSB1c2VyLiBUaGUgdWlkIGNvbnRhaW5lZCBpbiB0aGVzZSBtZXNzYWdlcyBpcyB1c2VyJ3MgVUlEIGF0CiAgICAgIHRoZSB0aW1lIHRoZSBjb21tYW5kIHdhcyBydW4uIEl0IGlzIG5vdCB0aGUgInRhcmdldCIgVUlEIHVzZWQgdG8gcnVuIHRoZQogICAgICBjb21tYW5kLCB3aGljaCBpcyBub3JtYWxseSByb290LgogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IHN0YXJ0CgogICMgSG9zdC1sZXZlbCBldmVudHMKCiAgIyBBVURJVF9TWVNURU1fQk9PVCAtIFN5c3RlbSBib290CiAgLSByZWNvcmRfdHlwZXM6IFNZU1RFTV9CT09UCiAgICBhY3Rpb246IGJvb3RlZC1zeXN0ZW0KICAgIG9iamVjdDoKICAgICAgd2hhdDogc3lzdGVtCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWhvc3QKICAgICAgdHlwZTogc3RhcnQKICAjIEFVRElUX1NZU1RFTV9SVU5MRVZFTCAtIFN5c3RlbSBydW5sZXZlbCBjaGFuZ2UKICAtIHJlY29yZF90eXBlczogU1lTVEVNX1JVTkxFVkVMCiAgICBhY3Rpb246IGNoYW5nZWQtdG8tcnVubGV2ZWwKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogbmV3LWxldmVsCiAgICAgIHdoYXQ6IHN5c3RlbQogICAgZWNzOgogICAgICA8PDogKmVjcy1ob3N0CiAgICAgIHR5cGU6IGNoYW5nZQogICMgQVVESVRfU1lTVEVNX1NIVVRET1dOIC0gU3lzdGVtIHNodXRkb3duCiAgLSByZWNvcmRfdHlwZXM6IFNZU1RFTV9TSFVURE9XTgogICAgYWN0aW9uOiBzaHV0ZG93bi1zeXN0ZW0KICAgIG9iamVjdDoKICAgICAgd2hhdDogc3lzdGVtCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWhvc3QKICAgICAgdHlwZTogZW5kCgogICMgU2VydmljZS1sZXZlbCBldmVudHMKCiAgIyBBVURJVF9TRVJWSUNFX1NUQVJUIC0gU2VydmljZSAoZGFlbW9uKSBzdGFydAogIC0gcmVjb3JkX3R5cGVzOiBTRVJWSUNFX1NUQVJUCiAgICBhY3Rpb246IHN0YXJ0ZWQtc2VydmljZQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiB1bml0CiAgICAgIHdoYXQ6IHNlcnZpY2UKICAgIGVjczoKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBzdGFydAogICMgQVVESVRfU0VSVklDRV9TVE9QIC0gU2VydmljZSAoZGFlbW9uKSBzdG9wCiAgLSByZWNvcmRfdHlwZXM6IFNFUlZJQ0VfU1RPUAogICAgYWN0aW9uOiBzdG9wcGVkLXNlcnZpY2UKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogdW5pdAogICAgICB3aGF0OiBzZXJ2aWNlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogc3RvcAoKICAjIEF1ZGl0ZCBpbnRlcm5hbCBldmVudHMKCiAgIyBBVURJVF9DT05GSUdfQ0hBTkdFIC0gQXVkaXQgc3lzdGVtIGNvbmZpZ3VyYXRpb24gY2hhbmdlCiAgLSByZWNvcmRfdHlwZXM6IENPTkZJR19DSEFOR0UKICAgIGFjdGlvbjogY2hhbmdlZC1hdWRpdC1jb25maWd1cmF0aW9uCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6CiAgICAgICAgW29wLCBrZXksIGF1ZGl0X2VuYWJsZWQsIGF1ZGl0X3BpZCwgYXVkaXRfYmFja2xvZ19saW1pdCwgYXVkaXRfZmFpbHVyZV0KICAgICAgd2hhdDogYXVkaXQtY29uZmlnCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogY2hhbmdlCiAgIyBBVURJVF9EQUVNT05fQUJPUlQgLSBEYWVtb24gZXJyb3Igc3RvcCByZWNvcmQKICAtIHJlY29yZF90eXBlczogREFFTU9OX0FCT1JUCiAgICBhY3Rpb246IGFib3J0ZWQtYXVkaXRkLXN0YXJ0dXAKICAgIG9iamVjdDoKICAgICAgd2hhdDogc2VydmljZQogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IHN0b3AKICAjIEFVRElUX0RBRU1PTl9BQ0NFUFQgLSBBdWRpdGQgYWNjZXB0ZWQgcmVtb3RlIGNvbm5lY3Rpb24KICAtIHJlY29yZF90eXBlczogREFFTU9OX0FDQ0VQVAogICAgYWN0aW9uOiByZW1vdGUtYXVkaXQtY29ubmVjdGVkCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNlcnZpY2UKICAgIGVjczoKICAgICAgPDw6ICplY3MtbmV0d29yawogICAgICB0eXBlOgogICAgICAgIC0gY29ubmVjdGlvbgogICAgICAgIC0gc3RhcnQKICAjIEFVRElUX0RBRU1PTl9DTE9TRSAtIEF1ZGl0ZCBjbG9zZWQgcmVtb3RlIGNvbm5lY3Rpb24KICAtIHJlY29yZF90eXBlczogREFFTU9OX0NMT1NFCiAgICBhY3Rpb246IHJlbW90ZS1hdWRpdC1kaXNjb25uZWN0ZWQKICAgIG9iamVjdDoKICAgICAgd2hhdDogc2VydmljZQogICAgZWNzOgogICAgICA8PDogKmVjcy1uZXR3b3JrCiAgICAgIHR5cGU6CiAgICAgICAgLSBjb25uZWN0aW9uCiAgICAgICAgLSBzdGFydAogICMgQVVESVRfREFFTU9OX0NPTkZJRyAtIERhZW1vbiBjb25maWcgY2hhbmdlCiAgLSByZWNvcmRfdHlwZXM6IERBRU1PTl9DT05GSUcKICAgIGFjdGlvbjogY2hhbmdlZC1hdWRpdGQtY29uZmlndXJhdGlvbgogICAgb2JqZWN0OgogICAgICB3aGF0OiBzZXJ2aWNlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogc3RvcAogICMgQVVESVRfREFFTU9OX0VORCAtIERhZW1vbiBub3JtYWwgc3RvcCByZWNvcmQKICAtIHJlY29yZF90eXBlczogREFFTU9OX0VORAogICAgYWN0aW9uOiBzaHV0ZG93bi1hdWRpdAogICAgb2JqZWN0OgogICAgICB3aGF0OiBzZXJ2aWNlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogc3RvcAogICMgQVVESVRfREFFTU9OX0VSUiAtIEF1ZGl0ZCBpbnRlcm5hbCBlcnJvcgogIC0gcmVjb3JkX3R5cGVzOiBEQUVNT05fRVJSCiAgICBhY3Rpb246IGF1ZGl0LWVycm9yCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNlcnZpY2UKICAgIGVjczogKmVjcy1wcm9jZXNzCiAgIyBBVURJVF9EQUVNT05fUkVDT05GSUcgLSBBdWRpdGQgc2hvdWxkIHJlY29uZmlndXJlCiAgLSByZWNvcmRfdHlwZXM6IERBRU1PTl9SRUNPTkZJRwogICAgYWN0aW9uOiByZWNvbmZpZ3VyZWQtYXVkaXRkCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNlcnZpY2UKICAgIGVjczoKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBjaGFuZ2UKICAjIEFVRElUX0RBRU1PTl9SRVNVTUUgLSBBdWRpdGQgc2hvdWxkIHJlc3VtZSBsb2dnaW5nCiAgLSByZWNvcmRfdHlwZXM6IERBRU1PTl9SRVNVTUUKICAgIGFjdGlvbjogcmVzdW1lZC1hdWRpdC1sb2dnaW5nCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNlcnZpY2UKICAgIGVjczoKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBjaGFuZ2UKICAjIEFVRElUX0RBRU1PTl9ST1RBVEUgLSBBdWRpdGQgc2hvdWxkIHJvdGF0ZSBsb2dzCiAgLSByZWNvcmRfdHlwZXM6IERBRU1PTl9ST1RBVEUKICAgIGFjdGlvbjogcm90YXRlZC1hdWRpdC1sb2dzCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNlcnZpY2UKICAgIGVjczoKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBjaGFuZ2UKICAjIEFVRElUX0RBRU1PTl9TVEFSVCAtIERhZW1vbiBzdGFydHVwIHJlY29yZAogIC0gcmVjb3JkX3R5cGVzOiBEQUVNT05fU1RBUlQKICAgIGFjdGlvbjogc3RhcnRlZC1hdWRpdAogICAgb2JqZWN0OgogICAgICB3aGF0OiBzZXJ2aWNlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogc3RhcnQKICAjIEFVRElUX0tFUk5FTCAtIEFzeW5jaHJvbm91cyBhdWRpdCByZWNvcmQuIE5PVCBBIFJFUVVFU1QuCiAgLSByZWNvcmRfdHlwZXM6IEtFUk5FTAogICAgYWN0aW9uOiBpbml0aWFsaXplZC1hdWRpdC1zdWJzeXN0ZW0KICAgIGVjczogKmVjcy1wcm9jZXNzCgogICMgQ29uZmlndXJhdGlvbiBjaGFuZ2UgZXZlbnRzCgogICMgQVVESVRfVVNZU19DT05GSUcgLSBVc2VyIHNwYWNlIHN5c3RlbSBjb25maWcgY2hhbmdlCiAgLSByZWNvcmRfdHlwZXM6IFVTWVNfQ09ORklHCiAgICBhY3Rpb246IGNoYW5nZWQtY29uZmlndXJhdGlvbgogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBvcAogICAgICB3aGF0OiBzeXN0ZW0KICAjIEFVRElUX05FVEZJTFRFUl9DRkcgLSBOZXRmaWx0ZXIgY2hhaW4gbW9kaWZpY2F0aW9ucwogIC0gcmVjb3JkX3R5cGVzOiBORVRGSUxURVJfQ0ZHCiAgICBhY3Rpb246IGxvYWRlZC1maXJld2FsbC1ydWxlLXRvCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IHRhYmxlCiAgICAgIHdoYXQ6IGZpcmV3YWxsCiAgIyBBVURJVF9GRUFUVVJFX0NIQU5HRSAtIGF1ZGl0IGxvZyBsaXN0aW5nIGZlYXR1cmUgY2hhbmdlcwogIC0gcmVjb3JkX3R5cGVzOiBGRUFUVVJFX0NIQU5HRQogICAgYWN0aW9uOiBjaGFuZ2VkLWF1ZGl0LWZlYXR1cmUKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogZmVhdHVyZQogICAgICB3aGF0OiBzeXN0ZW0KICAjIEFVRElUX1JFUExBQ0UgLSBSZXBsYWNlIGF1ZGl0ZCBpZiB0aGlzIHBhY2tldCB1bmFuc3dlcmQKCiAgIyBUVFkgZXZlbnRzCgogIC0gcmVjb3JkX3R5cGVzOgogICAgICAjIEFVRElUX1RUWSAtIElucHV0IG9uIGFuIGFkbWluaXN0cmF0aXZlIFRUWQogICAgICAtIFRUWQogICAgICAjIEFVRElUX1VTRVJfVFRZIC0gTm9uLUlDQU5PTiBUVFkgaW5wdXQgbWVhbmluZwogICAgICAtIFVTRVJfVFRZCiAgICBhY3Rpb246IHR5cGVkCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGRhdGEKICAgICAgd2hhdDoga2V5c3Ryb2tlcwogICAgaG93OiBbY29tbSwgZXhlXQoKICAjIFBvbGljeSBldmVudHMKCiAgIyBBVURJVF9BVkMgLSBTRSBMaW51eCBhdmMgZGVuaWFsIG9yIGdyYW50IChzZWxpbnV4KQogIC0gcmVjb3JkX3R5cGVzOiBBVkMKICAgIGFjdGlvbjogdmlvbGF0ZWQtc2VsaW51eC1wb2xpY3kKICAgIHN1YmplY3Q6CiAgICAgIHByaW1hcnk6IHNjb250ZXh0CiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IHRjb250ZXh0CiAgICAgIHNlY29uZGFyeTogdGNsYXNzCiAgICBoYXNfZmllbGRzOgogICAgICAtIHNlcmVzdWx0CiAgIyBBVURJVF9BVkMgLSBTRSBMaW51eCBhdmMgZGVuaWFsIG9yIGdyYW50IChhcHBhcm1vcikKICAtIHJlY29yZF90eXBlczogQVZDCiAgICBhY3Rpb246IHZpb2xhdGVkLWFwcGFybW9yLXBvbGljeQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBvcGVyYXRpb24KICAgICAgc2Vjb25kYXJ5OiBbcmVxdWVzdGVkX21hc2ssIGRlbmllZF9tYXNrLCBjYXBuYW1lXQogICAgICB3aGF0OiBwb2xpY3kKICAgIGhhc19maWVsZHM6CiAgICAgIC0gYXBwYXJtb3IKICAjIEFVRElUX0ZTX1JFTEFCRUwgLSBGaWxlc3lzdGVtIHJlbGFiZWxlZAogIC0gcmVjb3JkX3R5cGVzOiBGU19SRUxBQkVMCiAgICBhY3Rpb246IHJlbGFiZWxlZC1maWxlc3lzdGVtCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IG1hYy1jb25maWcKICAjIEFVRElUX0xBQkVMX0xFVkVMX0NIQU5HRSAtIE9iamVjdCdzIGxldmVsIHdhcyBjaGFuZ2VkCiAgLSByZWNvcmRfdHlwZXM6IExBQkVMX0xFVkVMX0NIQU5HRQogICAgYWN0aW9uOiBtb2RpZmllZC1sZXZlbC1vZgogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBwcmludGVyCiAgICAgIHdoYXQ6IHByaW50ZXIKICAjIEFVRElUX0xBQkVMX09WRVJSSURFIC0gQWRtaW4gaXMgb3ZlcnJpZGluZyBhIGxhYmVsCiAgLSByZWNvcmRfdHlwZXM6IExBQkVMX09WRVJSSURFCiAgICBhY3Rpb246IG92ZXJyb2RlLWxhYmVsLW9mCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IG1hYy1jb25maWcKICAjIEFVRElUX01BQ19DSEVDSyAtIFVzZXIgc3BhY2UgTUFDIGRlY2lzaW9uIHJlc3VsdHMKICAtIHJlY29yZF90eXBlczogTUFDX0NIRUNLCiAgICBhY3Rpb246IG1hYy1wZXJtaXNzaW9uCiAgIyBBVURJVF9NQUNfQ09ORklHX0NIQU5HRSAtIENoYW5nZXMgdG8gYm9vbGVhbnMKICAtIHJlY29yZF90eXBlczogTUFDX0NPTkZJR19DSEFOR0UKICAgIGFjdGlvbjogY2hhbmdlZC1zZWxpbnV4LWJvb2xlYW4KICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogYm9vbAogICAgICB3aGF0OiBtYWMtY29uZmlnCiAgIyBBVURJVF9NQUNfUE9MSUNZX0xPQUQgLSBQb2xpY3kgZmlsZSBsb2FkCiAgLSByZWNvcmRfdHlwZXM6IE1BQ19QT0xJQ1lfTE9BRAogICAgYWN0aW9uOiBsb2FkZWQtc2VsaW51eC1wb2xpY3kKICAgIG9iamVjdDoKICAgICAgd2hhdDogbWFjLWNvbmZpZwogICMgQVVESVRfTUFDX1NUQVRVUyAtIENoYW5nZWQgZW5mb3JjaW5nLHBlcm1pc3NpdmUsb2ZmCiAgLSByZWNvcmRfdHlwZXM6IE1BQ19TVEFUVVMKICAgIGFjdGlvbjogY2hhbmdlZC1zZWxpbnV4LWVuZm9yY2VtZW50CiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGVuZm9yY2luZwogICAgICB3aGF0OiBtYWMtY29uZmlnCiAgIyBBVURJVF9VU0VSX0FWQyAtIFVzZXIgc3BhY2UgYXZjIG1lc3NhZ2UKICAtIHJlY29yZF90eXBlczogVVNFUl9BVkMKICAgIGFjdGlvbjogYWNjZXNzLXBlcm1pc3Npb24KICAjIEFVRElUX1VTRVJfTUFDX0NPTkZJR19DSEFOR0UgLSBDaGFuZ2UgbWFkZSB0byBNQUMgcG9saWN5CiAgLSByZWNvcmRfdHlwZXM6IFVTRVJfTUFDX0NPTkZJR19DSEFOR0UKICAgIGFjdGlvbjogY2hhbmdlZC1tYWMtY29uZmlndXJhdGlvbgogICAgb2JqZWN0OgogICAgICB3aGF0OiBtYWMtY29uZmlnCiAgIyBBVURJVF9VU0VSX01BQ19QT0xJQ1lfTE9BRCAtIFVzZXJzcGMgZGFlbW9uIGxvYWRlZCBwb2xpYwogIC0gcmVjb3JkX3R5cGVzOiBVU0VSX01BQ19QT0xJQ1lfTE9BRAogICAgYWN0aW9uOiBsb2FkZWQtbWFjLXBvbGljeQogICAgb2JqZWN0OgogICAgICB3aGF0OiBtYWMtY29uZmlnCiAgIyBBVURJVF9VU0VSX1NFTElOVVhfRVJSIC0gU0UgTGludXggdXNlciBzcGFjZSBlcnJvcgogIC0gcmVjb3JkX3R5cGVzOiBVU0VSX1NFTElOVVhfRVJSCiAgICBhY3Rpb246IGFjY2Vzcy1lcnJvcgogICMgQVVESVRfU0VDQ09NUCAtIFNlY3VyZSBDb21wdXRpbmcgZXZlbnQKICAtIHJlY29yZF90eXBlczogU0VDQ09NUAogICAgYWN0aW9uOiB2aW9sYXRlZC1zZWNjb21wLXBvbGljeQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBzeXNjYWxsCiAgICAgIHdoYXQ6IHByb2Nlc3MKICAjIEFVRElUX1NFTElOVVhfRVJSIC0gSW50ZXJuYWwgU0UgTGludXggRXJyb3JzCiAgLSBhY3Rpb246IGNhdXNlZC1tYWMtcG9saWN5LWVycm9yCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHN5c3RlbQogICAgcmVjb3JkX3R5cGVzOiBTRUxJTlVYX0VSUgogICMgQVVESVRfQVBQQVJNT1JfQUxMT1dFRAogICMgQVVESVRfQVBQQVJNT1JfREVOSUVECiAgIyBBVURJVF9BUFBBUk1PUl9FUlJPUgogICMgQVVESVRfQVZDX1BBVEggLSBkZW50cnksIHZmc21vdW50IHBhaXIgZnJvbSBhdmMKICAjIEFVRElUX0FQUEFSTU9SX0FVRElUCiAgIyBBVURJVF9BUFBBUk1PUl9ISU5UCiAgIyBBVURJVF9BUFBBUk1PUl9TVEFUVVMKICAjIEFVRElUX0FQUEFSTU9SX0VSUk9SCiAgIyBBVURJVF9ERVZfQUxMT0MgLSBEZXZpY2Ugd2FzIGFsbG9jYXRlZAogICMgQVVESVRfREVWX0RFQUxMT0MgLSBEZXZpY2Ugd2FzIGRlYWxsb2NhdGVkCiAgIyBBVURJVF9NQUNfVU5MQkxfQUxMT1cgLSBOZXRMYWJlbDogYWxsb3cgdW5sYWJlbGVkIHRyYWZmaWMKICAjIEFVRElUX01BQ19DSVBTT1Y0X0FERCAtIE5ldExhYmVsOiBhZGQgQ0lQU092NCBET0kgZW50cnkKICAjIEFVRElUX01BQ19DSVBTT1Y0X0RFTCAtIE5ldExhYmVsOiBkZWwgQ0lQU092NCBET0kgZW50cnkKICAjIEFVRElUX01BQ19NQVBfQUREIC0gTmV0TGFiZWw6IGFkZCBMU00gZG9tYWluIG1hcHBpbmcKICAjIEFVRElUX01BQ19NQVBfREVMIC0gTmV0TGFiZWw6IGRlbCBMU00gZG9tYWluIG1hcHBpbmcKICAjIEFVRElUX01BQ19JUFNFQ19FVkVOVCAtIEF1ZGl0IGFuIElQU2VjIGV2ZW50CiAgIyBBVURJVF9NQUNfVU5MQkxfU1RDQUREIC0gTmV0TGFiZWw6IGFkZCBhIHN0YXRpYyBsYWJlbAogICMgQVVESVRfTUFDX1VOTEJMX1NUQ0RFTCAtIE5ldExhYmVsOiBkZWwgYSBzdGF0aWMgbGFiZWwKICAjIEFVRElUX01BQ19DQUxJUFNPX0FERCAtIE5ldExhYmVsOiBhZGQgQ0FMSVBTTyBET0kgZW50cnkKICAjIEFVRElUX01BQ19DQUxJUFNPX0RFTCAtIE5ldExhYmVsOiBkZWwgQ0FMSVBTTyBET0kgZW50cnkKICAjIEFVRElUX1VTRVJfTEFCRUxFRF9FWFBPUlQgLSBPYmplY3QgZXhwb3J0ZWQgd2l0aCBsYWJlbAogICMgQVVESVRfVVNFUl9VTkxBQkVMRURfRVhQT1JUIC0gT2JqZWN0IGV4cG9ydGVkIHdpdGhvdXQgbGFiZWwKCiAgIyBDcnlwdG8gZXZlbnRzCgogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIGFjdGlvbjogbmVnb3RpYXRlZC1jcnlwdG8ta2V5CiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGZwCiAgICAgIHNlY29uZGFyeTogW2FkZHIsIGhvc3RuYW1lXQogICAgICB3aGF0OiB1c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogQ1JZUFRPX0tFWV9VU0VSCiAgICBzb3VyY2VfaXA6IFthZGRyXQogICAgZWNzOiAqZWNzLXByb2Nlc3MKICAtIGFjdGlvbjogY3J5cHRvLW9mZmljZXItbG9nZ2VkLWluCiAgICByZWNvcmRfdHlwZXM6IENSWVBUT19MT0dJTgogIC0gYWN0aW9uOiBjcnlwdG8tb2ZmaWNlci1sb2dnZWQtb3V0CiAgICByZWNvcmRfdHlwZXM6IENSWVBUT19MT0dPVVQKICAgIGVjczogKmVjcy1wcm9jZXNzCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgYWN0aW9uOiBzdGFydGVkLWNyeXB0by1zZXNzaW9uCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGFkZHIKICAgICAgc2Vjb25kYXJ5OiBbcnBvcnRdCiAgICByZWNvcmRfdHlwZXM6IENSWVBUT19TRVNTSU9OCiAgICBzb3VyY2VfaXA6IFthZGRyXQogICAgZWNzOiAqZWNzLXByb2Nlc3MKICAtIGFjdGlvbjogYWNjZXNzLXJlc3VsdAogICAgcmVjb3JkX3R5cGVzOiBEQUNfQ0hFQ0sKCiAgIyBBbm9tYWxpZXMKCiAgIyBBVURJVF9BTk9NX0FCRU5EIC0gUHJvY2VzcyBlbmRlZCBhYm5vcm1hbGx5CiAgLSByZWNvcmRfdHlwZXM6IEFOT01fQUJFTkQKICAgIGFjdGlvbjogY3Jhc2hlZC1wcm9ncmFtCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IFtjb21tLCBleGVdCiAgICAgIHNlY29uZGFyeTogcGlkCiAgICAgIHdoYXQ6IHByb2Nlc3MKICAgIGhvdzogc2lnCiAgICBlY3M6CiAgICAgICMgY29uc2lkZXIgYWRkaW5nIGFuIGFub21hbHkgY2F0ZWdvcnkgd2hlbiB3ZSBpbnRyb2R1Y2UKICAgICAgIyB0byBFQ1MKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBlbmQKICAjIEFVRElUX0FOT01fRVhFQyAtIEV4ZWN1dGlvbiBvZiBmaWxlCiAgLSByZWNvcmRfdHlwZXM6IEFOT01fRVhFQwogICAgYWN0aW9uOiBhdHRlbXB0ZWQtZXhlY3V0aW9uLW9mLWZvcmJpZGRlbi1wcm9ncmFtCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGNtZAogICAgICB3aGF0OiBwcm9jZXNzCiAgICBob3c6IHRlcm1pbmFsCiAgICBlY3M6CiAgICAgICMgY29uc2lkZXIgYWRkaW5nIGFuIGFub21hbHkgY2F0ZWdvcnkgd2hlbiB3ZSBpbnRyb2R1Y2UKICAgICAgIyB0byBFQ1MKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBzdGFydAogICMgQVVESVRfQU5PTV9MSU5LIC0gU3VzcGljaW91cyB1c2Ugb2YgZmlsZSBsaW5rcwogIC0gcmVjb3JkX3R5cGVzOiBBTk9NX0xJTksKICAgIGFjdGlvbjogdXNlZC1zdXNwY2lvdXMtbGluawogICMgQVVESVRfQU5PTV9MT0dJTl9GQUlMVVJFUyAtIEZhaWxlZCBsb2dpbiBsaW1pdCByZWFjaGVkCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBBTk9NX0xPR0lOX0ZBSUxVUkVTCiAgICBhY3Rpb246IGZhaWxlZC1sb2ctaW4tdG9vLW1hbnktdGltZXMtdG8KICAjIEFVRElUX0FOT01fTE9HSU5fTE9DQVRJT04gLSBMb2dpbiBmcm9tIGZvcmJpZGRlbiBsb2NhdGlvbgogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogQU5PTV9MT0dJTl9MT0NBVElPTgogICAgYWN0aW9uOiBhdHRlbXB0ZWQtbG9nLWluLWZyb20tdW51c3VhbC1wbGFjZS10bwogICMgQVVESVRfQU5PTV9MT0dJTl9TRVNTSU9OUyAtIE1heCBjb25jdXJyZW50IHNlc3Npb25zIHJlYWNoZWQKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IEFOT01fTE9HSU5fU0VTU0lPTlMKICAgIGFjdGlvbjogb3BlbmVkLXRvby1tYW55LXNlc3Npb25zLXRvCiAgIyBBVURJVF9BTk9NX0xPR0lOX1RJTUUgLSBMb2dpbiBhdHRlbXB0ZWQgYXQgYmFkIHRpbWUKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IEFOT01fTE9HSU5fVElNRQogICAgYWN0aW9uOiBhdHRlbXB0ZWQtbG9nLWluLWR1cmluZy11bnVzdWFsLWhvdXItdG8KICAjIEFVRElUX0FOT01fUFJPTUlTQ1VPVVMgLSBEZXZpY2UgY2hhbmdlZCBwcm9taXNjdW91cyBtb2RlCiAgLSByZWNvcmRfdHlwZXM6IEFOT01fUFJPTUlTQ1VPVVMKICAgIGFjdGlvbjogY2hhbmdlZC1wcm9taXNjdW91cy1tb2RlLW9uLWRldmljZSAjIENvdWxkIGJlIGVudGVyZWQgb3IgZXhpdGVkIGJhc2VkIG9uIHByb20gZmllbGQuCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGRldgogICAgICB3aGF0OiBuZXR3b3JrLWRldmljZQogICMgQVVESVRfQU5PTV9SQkFDX0lOVEVHUklUWV9GQUlMIC0gUkJBQyBmaWxlIGludGVncml0eSBmYWlsdXJlCiAgLSByZWNvcmRfdHlwZXM6IEFOT01fUkJBQ19JTlRFR1JJVFlfRkFJTAogICAgYWN0aW9uOiB0ZXN0ZWQtZmlsZS1zeXN0ZW0taW50ZWdyaXR5LW9mCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGhvc3RuYW1lCiAgICAgIHdoYXQ6IGZpbGVzeXN0ZW0KICAjIEFVRElUX0FOT01fTE9HSU5fQUNDVCAtIExvZ2luIGF0dGVtcHRlZCB0byB3YXRjaGVkIGFjY3QKICAjIEFVRElUX0FOT01fTUFYX0RBQyAtIE1heCBEQUMgZmFpbHVyZXMgcmVhY2hlZAogICMgQVVESVRfQU5PTV9NQVhfTUFDIC0gTWF4IE1BQyBmYWlsdXJlcyByZWFjaGVkCiAgIyBBVURJVF9BTk9NX0FNVFVfRkFJTCAtIEFNVFUgZmFpbHVyZQogICMgQVVESVRfQU5PTV9SQkFDX0ZBSUwgLSBSQkFDIHNlbGYgdGVzdCBmYWlsdXJlCiAgIyBBVURJVF9BTk9NX0NSWVBUT19GQUlMIC0gQ3J5cHRvIHN5c3RlbSB0ZXN0IGZhaWx1cmUKICAjIEFVRElUX0FOT01fTUtfRVhFIC0gTWFrZSBhbiBleGVjdXRhYmxlCiAgIyBBVURJVF9BTk9NX0FDQ0VTU19GUyAtIEFjY2VzcyBvZiBmaWxlIG9yIGRpcgogICMgQVVESVRfQU5PTV9BRERfQUNDVCAtIEFkZGluZyBhbiBhY2N0CiAgIyBBVURJVF9BTk9NX0RFTF9BQ0NUIC0gRGVsZXRpbmcgYW4gYWNjdAogICMgQVVESVRfQU5PTV9NT0RfQUNDVCAtIENoYW5naW5nIGFuIGFjY3QKICAjIEFVRElUX0FOT01fUk9PVF9UUkFOUyAtIFVzZXIgYmVjYW1lIHJvb3QKICAjIEFVRElUX0FOT01fTE9HSU5fU0VSVklDRSAtIFNlcnZpY2UgYWNjdCBhdHRlbXB0ZWQgbG9naW4KCiAgIyBBbm9tYWx5IHJlc3BvbnNlcwoKICAjIEFVRElUX1JFU1BfQU5PTUFMWSAtIEFub21hbHkgbm90IHJlYWN0ZWQgdG8KICAjIEFVRElUX1JFU1BfQUxFUlQgLSBBbGVydCBlbWFpbCB3YXMgc2VudAogICMgQVVESVRfUkVTUF9LSUxMX1BST0MgLSBLaWxsIHByb2dyYW0KICAjIEFVRElUX1JFU1BfVEVSTV9BQ0NFU1MgLSBUZXJtaW5hdGUgc2Vzc2lvbgogICMgQVVESVRfUkVTUF9BQ0NUX1JFTU9URSAtIEFjY3QgbG9ja2VkIGZyb20gcmVtb3RlIGFjY2VzcwogICMgQVVESVRfUkVTUF9BQ0NUX0xPQ0tfVElNRUQgLSBVc2VyIGFjY3QgbG9ja2VkIGZvciB0aW1lCiAgIyBBVURJVF9SRVNQX0FDQ1RfVU5MT0NLX1RJTUVEIC0gVXNlciBhY2N0IHVubG9ja2VkIGZyb20gdGltZQogICMgQVVESVRfUkVTUF9BQ0NUX0xPQ0sgLSBVc2VyIGFjY3Qgd2FzIGxvY2tlZAogICMgQVVESVRfUkVTUF9URVJNX0xPQ0sgLSBUZXJtaW5hbCB3YXMgbG9ja2VkCiAgIyBBVURJVF9SRVNQX1NFQk9PTCAtIFNldCBhbiBTRSBMaW51eCBib29sZWFuCiAgIyBBVURJVF9SRVNQX0VYRUMgLSBFeGVjdXRlIGEgc2NyaXB0CiAgIyBBVURJVF9SRVNQX1NJTkdMRSAtIEdvIHRvIHNpbmdsZSB1c2VyIG1vZGUKICAjIEFVRElUX1JFU1BfSEFMVCAtIHRha2UgdGhlIHN5c3RlbSBkb3duCiAgIyBBVURJVF9SRVNQX09SSUdJTl9CTE9DSyAtIEFkZHJlc3MgYmxvY2tlZCBieSBpcHRhYmxlcwogICMgQVVESVRfUkVTUF9PUklHSU5fQkxPQ0tfVElNRUQgLSBBZGRyZXNzIGJsb2NrZWQgZm9yIHRpbWUKCiAgIyBBdWRpdCBydWxlIGV2ZW50cwoKICAjIEFVRElUX1NZU0NBTEwgLSBTeXNjYWxsIGV2ZW50CiAgIyBBVURJVF9QQVRIIC0gRmlsZW5hbWUgcGF0aCBpbmZvcm1hdGlvbgogICMgQVVESVRfSVBDIC0gSVBDIHJlY29yZAogICMgQVVESVRfU09DS0VUQ0FMTCAtIHN5c19zb2NrZXRjYWxsIGFyZ3VtZW50cwogICMgQVVESVRfU09DS0FERFIgLSBzb2NrYWRkciBjb3BpZWQgYXMgc3lzY2FsbCBhcmcKICAjIEFVRElUX0NXRCAtIEN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkKICAjIEFVRElUX0VYRUNWRSAtIGV4ZWN2ZSBhcmd1bWVudHMKICAjIEFVRElUX0lQQ19TRVRfUEVSTSAtIElQQyBuZXcgcGVybWlzc2lvbnMgcmVjb3JkIHR5cGUKICAjIEFVRElUX01RX09QRU4gLSBQT1NJWCBNUSBvcGVuIHJlY29yZCB0eXBlCiAgIyBBVURJVF9NUV9TRU5EUkVDVi0gUE9TSVggTVEgc2VuZC9yZWNlaXZlIHJlY29yZCB0eXBlCiAgIyBBVURJVF9NUV9OT1RJRlkgLSBQT1NJWCBNUSBub3RpZnkgcmVjb3JkIHR5cGUKICAjIEFVRElUX01RX0dFVFNFVEFUVFIgLSBQT1NJWCBNUSBnZXQvc2V0IGF0dHJpYnV0ZSByZWNvcmQgdHlwZQogICMgQVVESVRfRkRfUEFJUiAtIGF1ZGl0IHJlY29yZCBmb3IgcGlwZS9zb2NrZXRwYWlyCiAgIyBBVURJVF9PQkpfUElEIC0gcHRyYWNlIHRhcmdldAogICMgQVVESVRfQlBSTV9GQ0FQUyAtIEluZm9ybWF0aW9uIGFib3V0IGZjYXBzIGluY3JlYXNpbmcgcGVybXMKICAjIEFVRElUX0NBUFNFVCAtIFJlY29yZCBzaG93aW5nIGFyZ3VtZW50IHRvIHN5c19jYXBzZXQKICAjIEFVRElUX01NQVAgLSBSZWNvcmQgc2hvd2luZyBkZXNjcmlwdG9yIGFuZCBmbGFncyBpbiBtbWFwCiAgIyBBVURJVF9ORVRGSUxURVJfUEtUIC0gUGFja2V0cyB0cmF2ZXJzaW5nIG5ldGZpbHRlciBjaGFpbnMKCiAgIyBJbnRlZ3JpdHkgY2hlY2tzCgogICMgQVVESVRfSU5URUdSSVRZX0RBVEEgLSBEYXRhIGludGVncml0eSB2ZXJpZmljYXRpb24KICAjIEFVRElUX0lOVEVHUklUWV9NRVRBREFUQSAtIE1ldGFkYXRhIGludGVncml0eSB2ZXJpZmljYXRpb24KICAjIEFVRElUX0lOVEVHUklUWV9TVEFUVVMgLSBJbnRlZ3JpdHkgZW5hYmxlIHN0YXR1cwogICMgQVVESVRfSU5URUdSSVRZX0hBU0ggLSBJbnRlZ3JpdHkgSEFTSCB0eXBlCiAgIyBBVURJVF9JTlRFR1JJVFlfUENSIC0gUENSIGludmFsaWRhdGlvbiBtc2dzCiAgIyBBVURJVF9JTlRFR1JJVFlfUlVMRSAtIFBvbGljeSBydWxlCgogICMgVmFyaW91cwoKICAjIEFVRElUX1VTRVIgLSBNZXNzYWdlIGZyb20gdXNlcnNwYWNlIC0tIGRlcHJlY2F0ZWQKICAtIHJlY29yZF90eXBlczogVVNFUgogICAgYWN0aW9uOiBzZW50LW1lc3NhZ2UKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogYWRkcgo=")
+		value, _ = base64.StdEncoding.DecodeString("LS0tCiMgTWFjcm9zIGRlY2xhcmVzIHNvbWUgWUFNTCBhbmNob3JzIHRoYXQgY2FuIGJlIHJlZmVyZW5jZWQgZm9yIHNvbWUgY29tbW9uCiMgb2JqZWN0IHR5cGUgbm9ybWFsaXphdGlvbnMgbGlrZSB1c2VyLXNlc3Npb24sIHNvY2tldCwgb3IgcHJvY2Vzcy4KbWFjcm9zOgogIC0gJmRlZmF1bHRzCiAgICBzdWJqZWN0OgogICAgICBwcmltYXJ5OiBhdWlkCiAgICAgIHNlY29uZGFyeTogdWlkCiAgICBob3c6IFtleGUsIGNvbW1dCgogIC0gJm1hY3JvLXVzZXItc2Vzc2lvbgogICAgc3ViamVjdDoKICAgICAgcHJpbWFyeTogYXVpZAogICAgICBzZWNvbmRhcnk6IFthY2N0LCBpZCwgdWlkXQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiB0ZXJtaW5hbAogICAgICBzZWNvbmRhcnk6IFthZGRyLCBob3N0bmFtZV0KICAgICAgd2hhdDogdXNlci1zZXNzaW9uCiAgICBob3c6IFtleGUsIHRlcm1pbmFsXQoKICAtICZtYWNyby1zb2NrZXQKICAgIDw8OiAqZGVmYXVsdHMKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogW2FkZHIsIHBhdGhdCiAgICAgIHNlY29uZGFyeTogcG9ydAogICAgICB3aGF0OiBzb2NrZXQKCiAgLSAmbWFjcm8tcHJvY2VzcwogICAgPDw6ICpkZWZhdWx0cwogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBbY21kLCBleGUsIGNvbW1dCiAgICAgIHNlY29uZGFyeTogcGlkCiAgICAgIHdoYXQ6IHByb2Nlc3MKICAgIGhvdzogdGVybWluYWwKCiAgLSAmZWNzLWlhbQogICAgY2F0ZWdvcnk6IGlhbQogICAgdHlwZTogaW5mbwoKICAtICZlY3MtYXV0aAogICAgY2F0ZWdvcnk6IGF1dGhlbnRpY2F0aW9uCiAgICB0eXBlOiBpbmZvCgogIC0gJmVjcy1ob3N0CiAgICBjYXRlZ29yeTogaG9zdAogICAgdHlwZTogaW5mbwoKICAtICZlY3MtcHJvY2VzcwogICAgY2F0ZWdvcnk6IHByb2Nlc3MKICAgIHR5cGU6IGluZm8KCiAgLSAmZWNzLWZpbGUKICAgIGNhdGVnb3J5OiBmaWxlCiAgICB0eXBlOiBpbmZvCgogIC0gJmVjcy1kcml2ZXIKICAgIGNhdGVnb3J5OiBkcml2ZXIKICAgIHR5cGU6IGluZm8KCiAgLSAmZWNzLW5ldHdvcmsKICAgIGNhdGVnb3J5OiBuZXR3b3JrCiAgICB0eXBlOgogICAgICAtIGNvbm5lY3Rpb24KICAgICAgLSBpbmZvCgojIE5vcm1hbGl6YXRpb25zIGlzIGEgbGlzdCBvZiBkZWNsYXJhdGlvbnMgc3BlY2lmeWluZyBob3cgdG8gbm9ybWFsaXplIHRoZSBkYXRhCiMgY29udGFpbmVkIGluIGFuIGV2ZW50LiBUaGUgbm9ybWFsaXphdGlvbiBjYW4gYmUgYXBwbGllZCBiYXNlZCBvbiB0aGUgc3lzY2FsbAojIG5hbWUgKGUuZy4gY29ubmVjdCwgb3Blbikgb3IgYmFzZWQgb24gdGhlIHJlY29yZCB0eXBlIChlLmcuIFVTRVJfTE9HSU4pLgojIE5vIHR3byBub3JtYWxpemF0aW9ucyBjYW4gYXBwbHkgdG8gdGhlIHNhbWUgc3lzY2FsbCBvciByZWNvcmQgdHlwZS4gVGhpcwojIHdpbGwgcmVzdWx0IGluIGEgZmFpbHVyZSBhdCBsb2FkIHRpbWUuCiMKIyBFYWNoIG5vcm1hbGl6YXRpb24gc2hvdWxkIHNwZWNpZnk6CiMgICBhY3Rpb24gLSB3aGF0IGhhcHBlbmVkCiMgICBhY3RvciAgLSB3aG8gZGlkIHRoaXMgb3Igd2hvIHRyaWdnZXJlZCB0aGUgZXZlbnQKIyAgIG9iamVjdCAtIHdoYXQgd2FzIHRoZSAidGhpbmciIGludm9sdmVkIGluIHRoZSBhY3Rpb24gKGUuZy4gcHJvY2Vzcywgc29ja2V0KQojICAgaG93ICAgIC0gaG93IHdhcyB0aGUgYWN0aW9uIHBlcmZvcm1lZCAoZS5nLiBleGUgb3IgdGVybWluYWwpCm5vcm1hbGl6YXRpb25zOgogIC0gZWNzOiAqZWNzLXByb2Nlc3MKICAgIHN5c2NhbGxzOgogICAgICAtICcqJyAjIHRoaXMgaXMgYSBjYXRjaCBhbGwKICAtIGFjdGlvbjogb3BlbmVkLWZpbGUKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgc3lzY2FsbHM6CiAgICAgICMgY3JlYXQgLSBvcGVuIGFuZCBwb3NzaWJseSBjcmVhdGUgYSBmaWxlCiAgICAgIC0gY3JlYXQKICAgIGVjczoKICAgICAgPDw6ICplY3MtZmlsZQogICAgICB0eXBlOiBjcmVhdGlvbgogIC0gYWN0aW9uOiBvcGVuZWQtZmlsZQogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBmYWxsb2NhdGUgLSBtYW5pcHVsYXRlIGZpbGUgc3BhY2UKICAgICAgLSBmYWxsb2NhdGUKICAgICAgIyB0cnVuY2F0ZSAtIHRydW5jYXRlIGEgZmlsZSB0byBhIHNwZWNpZmllZCBsZW5ndGgKICAgICAgLSB0cnVuY2F0ZQogICAgICAjIGZ0cnVuY2F0ZSAtIHRydW5jYXRlIGEgZmlsZSB0byBhIHNwZWNpZmllZCBsZW5ndGgKICAgICAgLSBmdHJ1bmNhdGUKICAgIGVjczoKICAgICAgPDw6ICplY3MtZmlsZQogICAgICAjIHRlY2huaWNhbGx5IHlvdSBjYW4gdHJ1bmNhdGUgYSBmaWxlIHRvIHRoZSBzYW1lIGxlbmd0aAogICAgICAjIGJ1dCByZWdhcmRsZXNzLCB3ZSBjb25zaWRlciB0aGlzIGEgY2hhbmdlCiAgICAgIHR5cGU6IGNoYW5nZQogIC0gYWN0aW9uOiBvcGVuZWQtZmlsZQogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBvcGVuIC0gb3BlbiBhbmQgcG9zc2libHkgY3JlYXRlIGEgZmlsZQogICAgICAtIG9wZW4KICAgICAgIyBvcGVuYXQgLSBvcGVuIGFuZCBwb3NzaWJseSBjcmVhdGUgYSBmaWxlCiAgICAgIC0gb3BlbmF0CiAgICAgICMgcmVhZGxpbmsgLSByZWFkIHZhbHVlIG9mIGEgc3ltYm9saWMgbGluawogICAgICAtIHJlYWRsaW5rCiAgICAgICMgcmVhZGxpbmthdCAtIHJlYWQgdmFsdWUgb2YgYSBzeW1ib2xpYyBsaW5rCiAgICAgIC0gcmVhZGxpbmthdAogICAgZWNzOiAqZWNzLWZpbGUKICAtIGFjdGlvbjogcmVhZC1maWxlCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIHJlYWQgLSByZWFkIGZyb20gYSBmaWxlIGRlc2NyaXB0b3IKICAgICAgLSByZWFkCiAgICBlY3M6ICplY3MtZmlsZQogIC0gYWN0aW9uOiB3cm90ZS10by1maWxlCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIHdyaXRlIC0gd3JpdGUgdG8gYSBmaWxlIGRlc2NyaXB0b3IKICAgICAgLSB3cml0ZQogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgIHR5cGU6IGNoYW5nZQogIC0gYWN0aW9uOiBjaGFuZ2VkLWZpbGUtYXR0cmlidXRlcy1vZgogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBzZXR4YXR0ciAtIHNldCBhbiBleHRlbmRlZCBhdHRyaWJ1dGUgdmFsdWUKICAgICAgLSBzZXR4YXR0cgogICAgICAjIGZzZXR4YXR0ciAtIHNldCBhbiBleHRlbmRlZCBhdHRyaWJ1dGUgdmFsdWUKICAgICAgLSBmc2V0eGF0dHIKICAgICAgIyBsc2V0eGF0dHIgLSBzZXQgYW4gZXh0ZW5kZWQgYXR0cmlidXRlIHZhbHVlCiAgICAgIC0gbHNldHhhdHRyCiAgICAgICMgcmVtb3ZleGF0dHIgLSByZW1vdmUgYW4gZXh0ZW5kZWQgYXR0cmlidXRlCiAgICAgIC0gcmVtb3ZleGF0dHIKICAgICAgIyBmcmVtb3ZleGF0dHIgLSByZW1vdmUgYW4gZXh0ZW5kZWQgYXR0cmlidXRlCiAgICAgIC0gZnJlbW92ZXhhdHRyCiAgICAgICMgbHJlbW92ZXhhdHRyIC0gcmVtb3ZlIGFuIGV4dGVuZGVkIGF0dHJpYnV0ZQogICAgICAtIGxyZW1vdmV4YXR0cgogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgIHR5cGU6IGNoYW5nZQogIC0gYWN0aW9uOiBjaGFuZ2VkLWZpbGUtcGVybWlzc2lvbnMtb2YKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgc3lzY2FsbHM6CiAgICAgICMgY2htb2QgLSBjaGFuZ2UgcGVybWlzc2lvbnMgb2YgYSBmaWxlCiAgICAgIC0gY2htb2QKICAgICAgIyBmY2htb2QgLSBjaGFuZ2UgcGVybWlzc2lvbnMgb2YgYSBmaWxlCiAgICAgIC0gZmNobW9kCiAgICAgICMgZmNobW9kYXQgLSBjaGFuZ2UgcGVybWlzc2lvbnMgb2YgYSBmaWxlCiAgICAgIC0gZmNobW9kYXQKICAgIGVjczoKICAgICAgPDw6ICplY3MtZmlsZQogICAgICB0eXBlOiBjaGFuZ2UKICAtIGFjdGlvbjogY2hhbmdlZC1maWxlLW93bmVyc2hpcC1vZgogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBjaG93biAtIGNoYW5nZSBvd25lcnNoaXAgb2YgYSBmaWxlCiAgICAgIC0gY2hvd24KICAgICAgIyBmY2hvd24gLSBjaGFuZ2Ugb3duZXJzaGlwIG9mIGEgZmlsZQogICAgICAtIGZjaG93bgogICAgICAjIGZjaG93bmF0IC0gY2hhbmdlIG93bmVyc2hpcCBvZiBhIGZpbGUKICAgICAgLSBmY2hvd25hdAogICAgICAjIGxjaG93biAtIGNoYW5nZSBvd25lcnNoaXAgb2YgYSBmaWxlCiAgICAgIC0gbGNob3duCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgdHlwZTogY2hhbmdlCiAgLSBhY3Rpb246IGxvYWRlZC1rZXJuZWwtbW9kdWxlCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgICAgcHJpbWFyeTogbmFtZQogICAgcmVjb3JkX3R5cGVzOgogICAgICAtIEtFUk5fTU9EVUxFCiAgICBzeXNjYWxsczoKICAgICAgIyBmaW5pdF9tb2R1bGUgLSBsb2FkIGEga2VybmVsIG1vZHVsZQogICAgICAtIGZpbml0X21vZHVsZQogICAgICAjIGluaXRfbW9kdWxlIC0gbG9hZCBhIGtlcm5lbCBtb2R1bGUKICAgICAgLSBpbml0X21vZHVsZQogICAgZWNzOgogICAgICA8PDogKmVjcy1kcml2ZXIKICAgICAgdHlwZTogc3RhcnQKICAtIGFjdGlvbjogdW5sb2FkZWQta2VybmVsLW1vZHVsZQogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBkZWxldGVfbW9kdWxlIC0gdW5sb2FkIGEga2VybmVsIG1vZHVsZQogICAgICAtIGRlbGV0ZV9tb2R1bGUKICAgIGVjczoKICAgICAgPDw6ICplY3MtZHJpdmVyCiAgICAgIHR5cGU6IGVuZAogIC0gYWN0aW9uOiBjcmVhdGVkLWRpcmVjdG9yeQogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICAgIHBhdGhfaW5kZXg6IDEKICAgIHN5c2NhbGxzOgogICAgICAjIG1rZGlyIC0gY3JlYXRlIGEgZGlyZWN0b3J5CiAgICAgIC0gbWtkaXIKICAgICAgIyBta2RpcmF0IC0gY3JlYXRlIGEgZGlyZWN0b3J5CiAgICAgIC0gbWtkaXJhdAogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgIHR5cGU6IGNyZWF0aW9uCiAgLSBhY3Rpb246IG1vdW50ZWQKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZXN5c3RlbQogICAgICBwYXRoX2luZGV4OiAxCiAgICBzeXNjYWxsczoKICAgICAgIyBtb3VudCAtIG1vdW50IGZpbGVzeXN0ZW0KICAgICAgLSBtb3VudAogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgICMgc2luY2UgYSBuZXcgbW91bnQgYXBwZWFycyBvbiB0aGUgc3lzdGVtCiAgICAgICMgd2UgY29uc2lkZXIgdGhpcyBhIGhpZ2gtbGV2ZWwgImNyZWF0aW9uIiBldmVudAogICAgICB0eXBlOiBjcmVhdGlvbgogIC0gYWN0aW9uOiByZW5hbWVkCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgICAgcGF0aF9pbmRleDogMgogICAgc3lzY2FsbHM6CiAgICAgICMgcmVuYW1lIC0gY2hhbmdlIHRoZSBuYW1lIG9yIGxvY2F0aW9uIG9mIGEgZmlsZQogICAgICAtIHJlbmFtZQogICAgICAjIHJlbmFtZWF0IC0gY2hhbmdlIHRoZSBuYW1lIG9yIGxvY2F0aW9uIG9mIGEgZmlsZQogICAgICAtIHJlbmFtZWF0CiAgICAgICMgcmVuYW1lYXQyIC0gY2hhbmdlIHRoZSBuYW1lIG9yIGxvY2F0aW9uIG9mIGEgZmlsZQogICAgICAtIHJlbmFtZWF0MgogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgIHR5cGU6IGNoYW5nZQogIC0gYWN0aW9uOiBjaGVja2VkLW1ldGFkYXRhLW9mCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IGZpbGUKICAgIHN5c2NhbGxzOgogICAgICAjIGFjY2VzcyAtIGNoZWNrIHVzZXIncyBwZXJtaXNzaW9ucyBmb3IgYSBmaWxlCiAgICAgIC0gYWNjZXNzCiAgICAgICMgZmFjY2Vzc2F0IC0gY2hlY2sgdXNlcidzIHBlcm1pc3Npb25zIGZvciBhIGZpbGUKICAgICAgLSBmYWNjZXNzYXQKICAgICAgIyBmc3RhdGF0IC0gZ2V0IGZpbGUgc3RhdHVzCiAgICAgIC0gZnN0YXRhdAogICAgICAjIG5ld2ZzdGF0YXQgLSBnZXQgZmlsZSBzdGF0dXMKICAgICAgLSBuZXdmc3RhdGF0CiAgICAgICMgc3RhdCAtIGdldCBmaWxlIHN0YXR1cwogICAgICAtIHN0YXQKICAgICAgIyBzdGF0NjQgLSBnZXQgZmlsZSBzdGF0dXMKICAgICAgLSBzdGF0NjQKICAgICAgIyBmc3RhdCAtIGdldCBmaWxlIHN0YXR1cwogICAgICAtIGZzdGF0CiAgICAgICMgbHN0YXQgLSBnZXQgZmlsZSBzdGF0dXMKICAgICAgLSBsc3RhdAogICAgICAjIGdldHhhdHRyIC0gcmV0cmlldmUgYW4gZXh0ZW5kZWQgYXR0cmlidXRlIHZhbHVlCiAgICAgIC0gZ2V0eGF0dHIKICAgICAgIyBsZ2V0eGF0dHIgLSByZXRyaWV2ZSBhbiBleHRlbmRlZCBhdHRyaWJ1dGUgdmFsdWUKICAgICAgLSBsZ2V0eGF0dHIKICAgICAgIyBmZ2V0eGF0dHIgLSByZXRyaWV2ZSBhbiBleHRlbmRlZCBhdHRyaWJ1dGUgdmFsdWUKICAgICAgLSBmZ2V0eGF0dHIKICAgIGVjczogKmVjcy1maWxlCiAgLSBhY3Rpb246IGNoZWNrZWQtZmlsZXN5c3RlbS1tZXRhZGF0YS1vZgogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlc3lzdGVtCiAgICBzeXNjYWxsczoKICAgICAgIyBzdGF0ZnMgLSBnZXQgZmlsZXN5c3RlbSBzdGF0aXN0aWNzCiAgICAgIC0gc3RhdGZzCiAgICAgICMgZnN0YXRmcyAtIGdldCBmaWxlc3lzdGVtIHN0YXRpc3RpY3MKICAgICAgLSBmc3RhdGZzCiAgICBlY3M6ICplY3MtZmlsZQogIC0gYWN0aW9uOiBzeW1saW5rZWQKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgc3lzY2FsbHM6CiAgICAgICMgc3ltbGluayAtIG1ha2UgYSBuZXcgbmFtZSBmb3IgYSBmaWxlCiAgICAgIC0gc3ltbGluawogICAgICAjIHN5bWxpbmthdCAtIG1ha2UgYSBuZXcgbmFtZSBmb3IgYSBmaWxlCiAgICAgIC0gc3ltbGlua2F0CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgIyAiY3JlYXRpb24iIHNpbmNlIHdlJ3JlIGNyZWF0aW5nIGEgbmV3IGZpbGUgc3lzdGVtCiAgICAgICMgZW50cnkgZm9yIHRoZSBzeW1saW5rCiAgICAgIHR5cGU6IGNyZWF0aW9uCiAgLSBhY3Rpb246IHVubW91bnRlZAogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlc3lzdGVtCiAgICBzeXNjYWxsczoKICAgICAgIyB1bW91bnQgLSB1bm1vdW50IGZpbGVzeXN0ZW0KICAgICAgLSB1bW91bnQKICAgICAgIyB1bW91bnQyIC0gdW5tb3VudCBmaWxlc3lzdGVtCiAgICAgIC0gdW1vdW50MgogICAgZWNzOgogICAgICA8PDogKmVjcy1maWxlCiAgICAgICMgImRlbGV0aW9uIiB0byBtaXJyb3IgdGhlICJjcmVhdGlvbiIgb2YgdGhlIG1vdW50CiAgICAgIHR5cGU6IGRlbGV0aW9uCiAgLSBhY3Rpb246IGRlbGV0ZWQKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgc3lzY2FsbHM6CiAgICAgICMgcm1kaXIgLSBkZWxldGUgYSBkaXJlY3RvcnkKICAgICAgLSBybWRpcgogICAgICAjIHVubGluayAtIGRlbGV0ZSBhIG5hbWUgYW5kIHBvc3NpYmx5IHRoZSBmaWxlIGl0IHJlZmVycyB0bwogICAgICAtIHVubGluawogICAgICAjIHVubGlua2F0IC0gZGVsZXRlIGEgbmFtZSBhbmQgcG9zc2libHkgdGhlIGZpbGUgaXQgcmVmZXJzIHRvCiAgICAgIC0gdW5saW5rYXQKICAgIGVjczoKICAgICAgPDw6ICplY3MtZmlsZQogICAgICB0eXBlOiBkZWxldGlvbgogIC0gYWN0aW9uOiBjaGFuZ2VkLXRpbWVzdGFtcC1vZgogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyB1dGltZSAtIGNoYW5nZSBmaWxlIGxhc3QgYWNjZXNzIGFuZCBtb2RpZmljYXRpb24gdGltZXMKICAgICAgLSB1dGltZQogICAgICAjIHV0aW1lcyAtIGNoYW5nZSBmaWxlIGxhc3QgYWNjZXNzIGFuZCBtb2RpZmljYXRpb24gdGltZXMKICAgICAgLSB1dGltZXMKICAgICAgIyBmdXRpbWVzYXQgLSBjaGFuZ2UgdGltZXN0YW1wcyBvZiBhIGZpbGUgcmVsYXRpdmUgdG8gYSBcIGRpcmVjdG9yeSBmaWxlIGRlc2NyaXB0b3IKICAgICAgLSBmdXRpbWVzYXQKICAgICAgIyBmdXRpbWVucyAtIGNoYW5nZSBmaWxlIHRpbWVzdGFtcHMgd2l0aCBuYW5vc2Vjb25kIHByZWNpc2lvbgogICAgICAtIGZ1dGltZW5zCiAgICAgICMgdXRpbWVuc2F0IC0gY2hhbmdlIGZpbGUgdGltZXN0YW1wcyB3aXRoIG5hbm9zZWNvbmQgcHJlY2lzaW9uCiAgICAgIC0gdXRpbWVuc2F0CiAgICBlY3M6ICplY3MtZmlsZQogIC0gYWN0aW9uOiBleGVjdXRlZAogICAgb2JqZWN0OgogICAgICB3aGF0OiBmaWxlCiAgICBzeXNjYWxsczoKICAgICAgIyBleGVjdmUgLSBleGVjdXRlIHByb2dyYW0KICAgICAgLSBleGVjdmUKICAgICAgIyBleGVjdmVhdCAtIGV4ZWN1dGUgcHJvZ3JhbSByZWxhdGl2ZSB0byBhIGRpcmVjdG9yeSBmaWxlIGRlc2NyaXB0b3IKICAgICAgLSBleGVjdmVhdAogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IHN0YXJ0CiAgLSBhY3Rpb246IGxpc3Rlbi1mb3ItY29ubmVjdGlvbnMKICAgIG9iamVjdDoKICAgICAgd2hhdDogc29ja2V0CiAgICBzeXNjYWxsczoKICAgICAgIyBsaXN0ZW4tIGxpc3RlbiBmb3IgY29ubmVjdGlvbnMgb24gYSBzb2NrZXQKICAgICAgLSBsaXN0ZW4KICAgIGVjczoKICAgICAgPDw6ICplY3MtbmV0d29yawogICAgICB0eXBlOiBzdGFydAogIC0gYWN0aW9uOiBhY2NlcHRlZC1jb25uZWN0aW9uLWZyb20KICAgIG9iamVjdDoKICAgICAgd2hhdDogc29ja2V0CiAgICBzeXNjYWxsczoKICAgICAgIyBhY2NlcHQgLSBhY2NlcHQgYSBjb25uZWN0aW9uIG9uIGEgc29ja2V0CiAgICAgIC0gYWNjZXB0CiAgICAgICMgYWNjZXB0NCAtIGFjY2VwdCBhIGNvbm5lY3Rpb24gb24gYSBzb2NrZXQKICAgICAgLSBhY2NlcHQ0CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLW5ldHdvcmsKICAgICAgdHlwZToKICAgICAgICAtIGNvbm5lY3Rpb24KICAgICAgICAtIHN0YXJ0CiAgLSBhY3Rpb246IGJvdW5kLXNvY2tldAogICAgb2JqZWN0OgogICAgICB3aGF0OiBzb2NrZXQKICAgIHN5c2NhbGxzOgogICAgICAjIGJpbmQgLWJpbmQgYSBuYW1lIHRvIGEgc29ja2V0CiAgICAgIC0gYmluZAogICAgZWNzOgogICAgICA8PDogKmVjcy1uZXR3b3JrCiAgICAgIHR5cGU6IHN0YXJ0CiAgLSBhY3Rpb246IGNvbm5lY3RlZC10bwogICAgb2JqZWN0OgogICAgICB3aGF0OiBzb2NrZXQKICAgIHN5c2NhbGxzOgogICAgICAtIGNvbm5lY3QKICAgIGVjczoKICAgICAgPDw6ICplY3MtbmV0d29yawogICAgICB0eXBlOgogICAgICAgIC0gY29ubmVjdGlvbgogICAgICAgIC0gc3RhcnQKICAtIGFjdGlvbjogcmVjZWl2ZWQtZnJvbQogICAgb2JqZWN0OgogICAgICB3aGF0OiBzb2NrZXQKICAgIHN5c2NhbGxzOgogICAgICAjIHJlY3YgLSByZWNlaXZlIGEgbWVzc2FnZSBmcm9tIGEgc29ja2V0CiAgICAgIC0gcmVjdgogICAgICAjIHJlY3Zmcm9tIC0gcmVjZWl2ZSBhIG1lc3NhZ2UgZnJvbSBhIHNvY2tldAogICAgICAtIHJlY3Zmcm9tCiAgICAgICMgcmVjdm1zZyAtIHJlY2VpdmUgYSBtZXNzYWdlIGZyb20gYSBzb2NrZXQKICAgICAgLSByZWN2bXNnCiAgICAgICMgcmVjdm1tc2cgLSByZWNlaXZlIG11bHRpcGxlIG1lc3NhZ2VzIG9uIGEgc29ja2V0CiAgICAgIC0gcmVjdm1tc2cKICAgIGVjczoKICAgICAgPDw6ICplY3MtbmV0d29yawogIC0gYWN0aW9uOiBzZW50LXRvCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNvY2tldAogICAgc3lzY2FsbHM6CiAgICAgICMgc2VuZCAtIHNlbmQgYSBtZXNzYWdlIG9uIGEgc29ja2V0CiAgICAgIC0gc2VuZAogICAgICAjIHNlbmR0byAtIHNlbmQgYSBtZXNzYWdlIG9uIGEgc29ja2V0CiAgICAgIC0gc2VuZHRvCiAgICAgICMgc2VuZG1zZyAtIHNlbmQgYSBtZXNzYWdlIG9uIGEgc29ja2V0CiAgICAgIC0gc2VuZG1zZwogICAgICAjIHNlbmRtbXNnIC0gc2VuZCBtdWx0aXBsZSBtZXNzYWdlcyBvbiBhIHNvY2tldAogICAgICAtIHNlbmRtbXNnCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLW5ldHdvcmsKICAtIGFjdGlvbjoga2lsbGVkLXBpZAogICAgb2JqZWN0OgogICAgICB3aGF0OiBwcm9jZXNzCiAgICBzeXNjYWxsczoKICAgICAgIyBraWxsIC0gc2VuZCBzaWduYWwgdG8gYSBwcm9jZXNzCiAgICAgIC0ga2lsbAogICAgICAjIHRraWxsIC0gc2VuZCBhIHNpZ25hbCB0byBhIHRocmVhZAogICAgICAtIHRraWxsCiAgICAgICMgdGdraWxsIC0gc2VuZCBhIHNpZ25hbCB0byBhIHRocmVhZAogICAgICAtIHRna2lsbAogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IGVuZAogIC0gYWN0aW9uOiBjaGFuZ2VkLWlkZW50aXR5LW9mCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHByb2Nlc3MKICAgIGhvdzogc3lzY2FsbAogICAgc3lzY2FsbHM6CiAgICAgICMgc2V0dWlkIC0gc2V0IHVzZXIgaWRlbnRpdHkKICAgICAgLSBzZXR1aWQKICAgICAgIyBzZXRldWlkIC0gc2V0IGVmZmVjdGl2ZSB1c2VyIG9yIGdyb3VwIElECiAgICAgIC0gc2V0ZXVpZAogICAgICAjIHNldGZzdWlkIC0gc2V0IHVzZXIgaWRlbnRpdHkgdXNlZCBmb3IgZmlsZXN5c3RlbSBjaGVja3MKICAgICAgLSBzZXRmc3VpZAogICAgICAjIHNldHJldWlkIC0gc2V0IHJlYWwgYW5kL29yIGVmZmVjdGl2ZSB1c2VyIG9yIGdyb3VwIElECiAgICAgIC0gc2V0cmV1aWQKICAgICAgIyBzZXRnaWQgLSBzZXQgZ3JvdXAgaWRlbnRpdHkKICAgICAgLSBzZXRnaWQKICAgICAgIyBzZXRlZ2lkIC0gc2V0IGVmZmVjdGl2ZSB1c2VyIG9yIGdyb3VwIElECiAgICAgIC0gc2V0ZWdpZAogICAgICAjIHNldGZzZ2lkIC0gc2V0IGdyb3VwIGlkZW50aXR5IHVzZWQgZm9yIGZpbGVzeXN0ZW0gY2hlY2tzCiAgICAgIC0gc2V0ZnNnaWQKICAgICAgIyBzZXRyZWdpZCAtIHNldCByZWFsIGFuZC9vciBlZmZlY3RpdmUgdXNlciBvciBncm91cCBJRAogICAgICAtIHNldHJlZ2lkCiAgICAgICMgc2V0cmVzdWlkIC0gc2V0IHJlYWwsIGVmZmVjdGl2ZSBhbmQgc2F2ZWQgdXNlciBvciBncm91cCBJRAogICAgICAtIHNldHJlc3VpZAogICAgICAjIHNldHJlc2dpZCAtIHNldCByZWFsLCBlZmZlY3RpdmUgYW5kIHNhdmVkIHVzZXIgb3IgZ3JvdXAgSUQKICAgICAgLSBzZXRyZXNnaWQKICAgIGVjczoKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBjaGFuZ2UKICAtIGFjdGlvbjogY2hhbmdlZC1zeXN0ZW0tdGltZQogICAgb2JqZWN0OgogICAgICB3aGF0OiBzeXN0ZW0KICAgIHN5c2NhbGxzOgogICAgICAjIHNldHRpbWVvZmRheSAtIGdldCAvIHNldCB0aW1lCiAgICAgIC0gc2V0dGltZW9mZGF5CiAgICAgICMgY2xvY2tfc2V0dGltZSAtIGNsb2NrIGFuZCB0aW1lIGZ1bmN0aW9ucwogICAgICAtIGNsb2NrX3NldHRpbWUKICAgICAgIyBzdGltZSAtIHNldCB0aW1lCiAgICAgIC0gc3RpbWUKICAgICAgIyBhZGp0aW1leCAtIHR1bmUga2VybmVsIGNsb2NrCiAgICAgIC0gYWRqdGltZXgKICAgIGVjczoKICAgICAgPDw6ICplY3MtaG9zdAogICAgICB0eXBlOiBjaGFuZ2UKICAtIGFjdGlvbjogbWFrZS1kZXZpY2UKICAgIG9iamVjdDoKICAgICAgd2hhdDogZmlsZQogICAgc3lzY2FsbHM6CiAgICAgICMgbWtub2QgLSBjcmVhdGUgYSBzcGVjaWFsIG9yIG9yZGluYXJ5IGZpbGUKICAgICAgLSBta25vZAogICAgICAjIG1rbm9kYXQgLSBjcmVhdGUgYSBzcGVjaWFsIG9yIG9yZGluYXJ5IGZpbGUKICAgICAgLSBta25vZGF0CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWZpbGUKICAgICAgdHlwZTogY3JlYXRpb24KICAtIGFjdGlvbjogY2hhbmdlZC1zeXN0ZW0tbmFtZQogICAgb2JqZWN0OgogICAgICB3aGF0OiBzeXN0ZW0KICAgIHN5c2NhbGxzOgogICAgICAjIHNldGhvc3RuYW1lIC0gZ2V0L3NldCBob3N0bmFtZQogICAgICAtIHNldGhvc3RuYW1lCiAgICAgICMgc2V0ZG9tYWlubmFtZSAtIGdldC9zZXQgTklTIGRvbWFpbiBuYW1lCiAgICAgIC0gc2V0ZG9tYWlubmFtZQogICAgZWNzOgogICAgICA8PDogKmVjcy1ob3N0CiAgICAgIHR5cGU6IGNoYW5nZQogIC0gYWN0aW9uOiBhbGxvY2F0ZWQtbWVtb3J5CiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IG1lbW9yeQogICAgc3lzY2FsbHM6CiAgICAgICMgbW1hcCAtIG1hcCBvciB1bm1hcCBmaWxlcyBvciBkZXZpY2VzIGludG8gbWVtb3J5CiAgICAgIC0gbW1hcAogICAgICAjIG1tYXAyIC0gbWFwIGZpbGVzIG9yIGRldmljZXMgaW50byBtZW1vcnkKICAgICAgLSBtbWFwMgogICAgICAjIGJyayAtIGNoYW5nZSBkYXRhIHNlZ21lbnQgc2l6ZQogICAgICAtIGJyawogICAgZWNzOiAqZWNzLXByb2Nlc3MKICAtIGFjdGlvbjogYWRqdXN0ZWQtc2NoZWR1bGluZy1wb2xpY3ktb2YKICAgIG9iamVjdDoKICAgICAgd2hhdDogcHJvY2VzcwogICAgaG93OiBzeXNjYWxsCiAgICBzeXNjYWxsczoKICAgICAgIyBzY2hlZF9zZXRwYXJhbSAtIHNldCBhbmQgZ2V0IHNjaGVkdWxpbmcgcGFyYW1ldGVycwogICAgICAtIHNjaGVkX3NldHBhcmFtCiAgICAgICMgc2NoZWRfc2V0c2NoZWR1bGVyIC0gc2V0IGFuZCBnZXQgc2NoZWR1bGluZyBwb2xpY3kvcGFyYW1ldGVycwogICAgICAtIHNjaGVkX3NldHNjaGVkdWxlcgogICAgICAjIHNjaGVkX3NldGF0dHIgLSBzZXQgYW5kIGdldCBzY2hlZHVsaW5nIHBvbGljeSBhbmQgYXR0cmlidXRlcwogICAgICAtIHNjaGVkX3NldGF0dHIKICAgIGVjczoKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBjaGFuZ2UKCiAgIyBDdXJyZW50bHkgdW5oYW5kbGVkCiAgIyB0aGlzIGxpc3QgY29tZXMgZnJvbSBwYXJzaW5nIGxpbnV4IG1hbiBwYWdlcyBhdCBodHRwczovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vZG9jcy9tYW4tcGFnZXMvbWFuLXBhZ2VzLmdpdAoKICAjIHNpZ2FjdGlvbiAtIGV4YW1pbmUgYW5kIGNoYW5nZSBhIHNpZ25hbCBhY3Rpb24KICAjIHJ0X3NpZ2FjdGlvbiAtIGV4YW1pbmUgYW5kIGNoYW5nZSBhIHNpZ25hbCBhY3Rpb24KICAjIHByZWFkIC0gcmVhZCBmcm9tIG9yIHdyaXRlIHRvIGEgZmlsZSBkZXNjcmlwdG9yIGF0IGEgZ2l2ZW4gb2Zmc2V0CiAgIyBwd3JpdGUgLSByZWFkIGZyb20gb3Igd3JpdGUgdG8gYSBmaWxlIGRlc2NyaXB0b3IgYXQgYSBnaXZlbiBvZmZzZXQKICAjIHMzOTBfZ3VhcmRlZF9zdG9yYWdlIC0gb3BlcmF0aW9ucyB3aXRoIHovQXJjaGl0ZWN0dXJlIGd1YXJkZWQgc3RvcmFnZSBmYWNpbGl0eQogICMgc2NoZWRfZ2V0YXR0ciAtIHNldCBhbmQgZ2V0IHNjaGVkdWxpbmcgcG9saWN5IGFuZCBhdHRyaWJ1dGVzCiAgIyBnZXRydXNhZ2UgLSBnZXQgcmVzb3VyY2UgdXNhZ2UKICAjIGZsb2NrIC0gYXBwbHkgb3IgcmVtb3ZlIGFuIGFkdmlzb3J5IGxvY2sgb24gYW4gb3BlbiBmaWxlCiAgIyBwaWRmZF9nZXRmZCAtIG9idGFpbiBhIGR1cGxpY2F0ZSBvZiBhbm90aGVyIHByb2Nlc3MncyBmaWxlIGRlc2NyaXB0b3IKICAjIGNsb2NrX25hbm9zbGVlcCAtIGhpZ2gtcmVzb2x1dGlvbiBzbGVlcCB3aXRoIHNwZWNpZmlhYmxlIGNsb2NrCiAgIyBnZXRwYWdlc2l6ZSAtIGdldCBtZW1vcnkgcGFnZSBzaXplCiAgIyBwaWRmZF9vcGVuIC0gb2J0YWluIGEgZmlsZSBkZXNjcmlwdG9yIHRoYXQgcmVmZXJzIHRvIGEgcHJvY2VzcwogICMgc3BsaWNlIC0gc3BsaWNlIGRhdGEgdG8vZnJvbSBhIHBpcGUKICAjIGdldHJlc3VpZCAtIGdldCByZWFsLCBlZmZlY3RpdmUgYW5kIHNhdmVkIHVzZXIvZ3JvdXAgSURzCiAgIyBnZXRyZXNnaWQgLSBnZXQgcmVhbCwgZWZmZWN0aXZlIGFuZCBzYXZlZCB1c2VyL2dyb3VwIElEcwogICMgcmVtYXBfZmlsZV9wYWdlcyAtIGNyZWF0ZSBhIG5vbmxpbmVhciBmaWxlIG1hcHBpbmcKICAjIGlvX2NhbmNlbCAtIGNhbmNlbCBhbiBvdXRzdGFuZGluZyBhc3luY2hyb25vdXMgSS9PIG9wZXJhdGlvbgogICMgcHJjdGwgLSBvcGVyYXRpb25zIG9uIGEgcHJvY2VzcyBvciB0aHJlYWQKICAjIGNsb2NrX2dldHJlcyAtIGNsb2NrIGFuZCB0aW1lIGZ1bmN0aW9ucwogICMgY2xvY2tfZ2V0dGltZSAtIGNsb2NrIGFuZCB0aW1lIGZ1bmN0aW9ucwogICMgZ2V0Z3JvdXBzIC0gZ2V0L3NldCBsaXN0IG9mIHN1cHBsZW1lbnRhcnkgZ3JvdXAgSURzCiAgIyBzZXRncm91cHMgLSBnZXQvc2V0IGxpc3Qgb2Ygc3VwcGxlbWVudGFyeSBncm91cCBJRHMKICAjIHZtc3BsaWNlIC0gc3BsaWNlIHVzZXIgcGFnZXMgdG8vZnJvbSBhIHBpcGUKICAjIGVwb2xsX2NyZWF0ZSAtIG9wZW4gYW4gZXBvbGwgZmlsZSBkZXNjcmlwdG9yCiAgIyBlcG9sbF9jcmVhdGUxIC0gb3BlbiBhbiBlcG9sbCBmaWxlIGRlc2NyaXB0b3IKICAjIHBvc2l4X2ZhZHZpc2UgLSBwcmVkZWNsYXJlIGFuIGFjY2VzcyBwYXR0ZXJuIGZvciBmaWxlIGRhdGEKICAjIHNpZ3dhaXRpbmZvIC0gc3luY2hyb25vdXNseSB3YWl0IGZvciBxdWV1ZWQgc2lnbmFscwogICMgc2lndGltZWR3YWl0IC0gc3luY2hyb25vdXNseSB3YWl0IGZvciBxdWV1ZWQgc2lnbmFscwogICMgcnRfc2lndGltZWR3YWl0IC0gc3luY2hyb25vdXNseSB3YWl0IGZvciBxdWV1ZWQgc2lnbmFscwogICMgc2lncmV0dXJuIC0gcmV0dXJuIGZyb20gc2lnbmFsIGhhbmRsZXIgYW5kIGNsZWFudXAgc3RhY2sgZnJhbWUKICAjIHJ0X3NpZ3JldHVybiAtIHJldHVybiBmcm9tIHNpZ25hbCBoYW5kbGVyIGFuZCBjbGVhbnVwIHN0YWNrIGZyYW1lCiAgIyBnZXRyYW5kb20gLSBvYnRhaW4gYSBzZXJpZXMgb2YgcmFuZG9tIGJ5dGVzCiAgIyBrZXljdGwgLSBtYW5pcHVsYXRlIHRoZSBrZXJuZWwncyBrZXkgbWFuYWdlbWVudCBmYWNpbGl0eQogICMgc2NoZWRfZ2V0c2NoZWR1bGVyIC0gc2V0IGFuZCBnZXQgc2NoZWR1bGluZyBwb2xpY3kvcGFyYW1ldGVycwogICMgbWJpbmQgLSBzZXQgbWVtb3J5IHBvbGljeSBmb3IgYSBtZW1vcnkgcmFuZ2UKICAjIGdldHByaW9yaXR5IC0gZ2V0L3NldCBwcm9ncmFtIHNjaGVkdWxpbmcgcHJpb3JpdHkKICAjIHNldHByaW9yaXR5IC0gZ2V0L3NldCBwcm9ncmFtIHNjaGVkdWxpbmcgcHJpb3JpdHkKICAjIGlub3RpZnlfaW5pdCAtIGluaXRpYWxpemUgYW4gaW5vdGlmeSBpbnN0YW5jZQogICMgaW5vdGlmeV9pbml0MSAtIGluaXRpYWxpemUgYW4gaW5vdGlmeSBpbnN0YW5jZQogICMgc2VtY3RsIC0gU3lzdGVtIFYgc2VtYXBob3JlIGNvbnRyb2wgb3BlcmF0aW9ucwogICMgZ2V0aG9zdG5hbWUgLSBnZXQvc2V0IGhvc3RuYW1lCiAgIyBwdHJhY2UgLSBwcm9jZXNzIHRyYWNlCiAgIyBzeXNjdGwgLSByZWFkL3dyaXRlIHN5c3RlbSBwYXJhbWV0ZXJzCiAgIyBnZXRwZWVybmFtZSAtIGdldCBuYW1lIG9mIGNvbm5lY3RlZCBwZWVyIHNvY2tldAogICMgZm9yayAtIGNyZWF0ZSBhIGNoaWxkIHByb2Nlc3MKICAjIHF1ZXJ5X21vZHVsZSAtIHF1ZXJ5IHRoZSBrZXJuZWwgZm9yIHZhcmlvdXMgYml0cyBwZXJ0YWluaW5nIHRvIG1vZHVsZXMKICAjIGlvY3RsX2xpc3QgLSBsaXN0IG9mIGlvY3RsIGNhbGxzIGluIExpbnV4L2kzODYga2VybmVsCiAgIyBtc2dnZXQgLSBnZXQgYSBTeXN0ZW0gViBtZXNzYWdlIHF1ZXVlIGlkZW50aWZpZXIKICAjIHNwdV9jcmVhdGUgLSBjcmVhdGUgYSBuZXcgc3B1IGNvbnRleHQKICAjIHN1YnBhZ2VfcHJvdCAtIGRlZmluZSBhIHN1YnBhZ2UgcHJvdGVjdGlvbiBmb3IgYW4gYWRkcmVzcyByYW5nZQogICMgcXVvdGFjdGwgLSBtYW5pcHVsYXRlIGRpc2sgcXVvdGFzCiAgIyBuZnNzZXJ2Y3RsIC0gc3lzY2FsbCBpbnRlcmZhY2UgdG8ga2VybmVsIG5mcyBkYWVtb24KICAjIG9wZW5hdDIgLSBvcGVuIGFuZCBwb3NzaWJseSBjcmVhdGUgYSBmaWxlIChleHRlbmRlZCkKICAjIGdldHJsaW1pdCAtIGdldC9zZXQgcmVzb3VyY2UgbGltaXRzCiAgIyBzZXRybGltaXQgLSBnZXQvc2V0IHJlc291cmNlIGxpbWl0cwogICMgcHJsaW1pdCAtIGdldC9zZXQgcmVzb3VyY2UgbGltaXRzCiAgIyB0ZWUgLSBkdXBsaWNhdGluZyBwaXBlIGNvbnRlbnQKICAjIHNobWdldCAtIGFsbG9jYXRlcyBhIFN5c3RlbSBWIHNoYXJlZCBtZW1vcnkgc2VnbWVudAogICMgY3JlYXRlX21vZHVsZSAtIGNyZWF0ZSBhIGxvYWRhYmxlIG1vZHVsZSBlbnRyeQogICMgZ2V0dGltZW9mZGF5IC0gZ2V0IC8gc2V0IHRpbWUKICAjIHRpbWVyX2NyZWF0ZSAtIGNyZWF0ZSBhIFBPU0lYIHBlci1wcm9jZXNzIHRpbWVyCiAgIyBmYW5vdGlmeV9tYXJrIC0gYWRkLCByZW1vdmUsIG9yIG1vZGlmeSBhbiBmYW5vdGlmeSBtYXJrIG9uIGEgZmlsZXN5c3RlbSBvYmplY3QKICAjIHBpcGUgLSBjcmVhdGUgcGlwZQogICMgcGlwZTIgLSBjcmVhdGUgcGlwZQogICMgaW50cm8gLSBpbnRyb2R1Y3Rpb24gdG8gc3lzdGVtIGNhbGxzCiAgIyBsb29rdXBfZGNvb2tpZSAtIHJldHVybiBhIGRpcmVjdG9yeSBlbnRyeSdzIHBhdGgKICAjIHN5c2ZzIC0gZ2V0IGZpbGVzeXN0ZW0gdHlwZSBpbmZvcm1hdGlvbgogICMgczM5MF9ydW50aW1lX2luc3RyIC0gZW5hYmxlL2Rpc2FibGUgczM5MCBDUFUgcnVuLXRpbWUgaW5zdHJ1bWVudGF0aW9uCiAgIyBzZXRucyAtIHJlYXNzb2NpYXRlIHRocmVhZCB3aXRoIGEgbmFtZXNwYWNlCiAgIyBzZXRfbWVtcG9saWN5IC0gc2V0IGRlZmF1bHQgTlVNQSBtZW1vcnkgcG9saWN5IGZvciBhIHRocmVhZCBhbmQgaXRzIGNoaWxkcmVuCiAgIyBuaWNlIC0gY2hhbmdlIHByb2Nlc3MgcHJpb3JpdHkKICAjIGlvX3NldHVwIC0gY3JlYXRlIGFuIGFzeW5jaHJvbm91cyBJL08gY29udGV4dAogICMgbWluY29yZSAtIGRldGVybWluZSB3aGV0aGVyIHBhZ2VzIGFyZSByZXNpZGVudCBpbiBtZW1vcnkKICAjIGlvY3RsX2NvbnNvbGUgLSBpb2N0bHMgZm9yIGNvbnNvbGUgdGVybWluYWwgYW5kIHZpcnR1YWwgY29uc29sZXMKICAjIHBvbGwgLSB3YWl0IGZvciBzb21lIGV2ZW50IG9uIGEgZmlsZSBkZXNjcmlwdG9yCiAgIyBwcG9sbCAtIHdhaXQgZm9yIHNvbWUgZXZlbnQgb24gYSBmaWxlIGRlc2NyaXB0b3IKICAjIGNhcGdldCAtIHNldC9nZXQgY2FwYWJpbGl0aWVzIG9mIHRocmVhZChzKQogICMgY2Fwc2V0IC0gc2V0L2dldCBjYXBhYmlsaXRpZXMgb2YgdGhyZWFkKHMpCiAgIyBpb2N0bF90dHkgLSBpb2N0bHMgZm9yIHRlcm1pbmFscyBhbmQgc2VyaWFsIGxpbmVzCiAgIyBpb3BsIC0gY2hhbmdlIEkvTyBwcml2aWxlZ2UgbGV2ZWwKICAjIGlvX2dldGV2ZW50cyAtIHJlYWQgYXN5bmNocm9ub3VzIEkvTyBldmVudHMgZnJvbSB0aGUgY29tcGxldGlvbiBxdWV1ZQogICMgcHJvY2Vzc192bV9yZWFkdiAtIHRyYW5zZmVyIGRhdGEgYmV0d2VlbiBwcm9jZXNzIGFkZHJlc3Mgc3BhY2VzCiAgIyBwcm9jZXNzX3ZtX3dyaXRldiAtIHRyYW5zZmVyIGRhdGEgYmV0d2VlbiBwcm9jZXNzIGFkZHJlc3Mgc3BhY2VzCiAgIyBwY2ljb25maWdfcmVhZCAtIHBjaSBkZXZpY2UgaW5mb3JtYXRpb24gaGFuZGxpbmcKICAjIHBjaWNvbmZpZ193cml0ZSAtIHBjaSBkZXZpY2UgaW5mb3JtYXRpb24gaGFuZGxpbmcKICAjIHBjaWNvbmZpZ19pb2Jhc2UgLSBwY2kgZGV2aWNlIGluZm9ybWF0aW9uIGhhbmRsaW5nCiAgIyBzYnJrIC0gY2hhbmdlIGRhdGEgc2VnbWVudCBzaXplCiAgIyBzZXRfdGlkX2FkZHJlc3MgLSBzZXQgcG9pbnRlciB0byB0aHJlYWQgSUQKICAjIHBrZXlfYWxsb2MgLSBhbGxvY2F0ZSBvciBmcmVlIGEgcHJvdGVjdGlvbiBrZXkKICAjIHBrZXlfZnJlZSAtIGFsbG9jYXRlIG9yIGZyZWUgYSBwcm90ZWN0aW9uIGtleQogICMgc2VsZWN0IC0gc3luY2hyb25vdXMgSS9PIG11bHRpcGxleGluZwogICMgcHNlbGVjdCAtIHN5bmNocm9ub3VzIEkvTyBtdWx0aXBsZXhpbmcKICAjIGtleGVjX2xvYWQgLSBsb2FkIGEgbmV3IGtlcm5lbCBmb3IgbGF0ZXIgZXhlY3V0aW9uCiAgIyBrZXhlY19maWxlX2xvYWQgLSBsb2FkIGEgbmV3IGtlcm5lbCBmb3IgbGF0ZXIgZXhlY3V0aW9uCiAgIyBwZXJzb25hbGl0eSAtIHNldCB0aGUgcHJvY2VzcyBleGVjdXRpb24gZG9tYWluCiAgIyBpb2N0bF9nZXRmc21hcCAtIHJldHJpZXZlIHRoZSBwaHlzaWNhbCBsYXlvdXQgb2YgdGhlIGZpbGVzeXN0ZW0KICAjIGlub3RpZnlfcm1fd2F0Y2ggLSByZW1vdmUgYW4gZXhpc3Rpbmcgd2F0Y2ggZnJvbSBhbiBpbm90aWZ5IGluc3RhbmNlCiAgIyBwZXJmX2V2ZW50X29wZW4gLSBzZXQgdXAgcGVyZm9ybWFuY2UgbW9uaXRvcmluZwogICMgdGltZXJfZ2V0b3ZlcnJ1biAtIGdldCBvdmVycnVuIGNvdW50IGZvciBhIFBPU0lYIHBlci1wcm9jZXNzIHRpbWVyCiAgIyB3YWl0MyAtIHdhaXQgZm9yIHByb2Nlc3MgdG8gY2hhbmdlIHN0YXRlLCBCU0Qgc3R5bGUKICAjIHdhaXQ0IC0gd2FpdCBmb3IgcHJvY2VzcyB0byBjaGFuZ2Ugc3RhdGUsIEJTRCBzdHlsZQogICMgbGluayAtIG1ha2UgYSBuZXcgbmFtZSBmb3IgYSBmaWxlCiAgIyBsaW5rYXQgLSBtYWtlIGEgbmV3IG5hbWUgZm9yIGEgZmlsZQogICMgc2NoZWRfcnJfZ2V0X2ludGVydmFsIC0gZ2V0IHRoZSBTQ0hFRF9SUiBpbnRlcnZhbCBmb3IgdGhlIG5hbWVkIHByb2Nlc3MKICAjIG11bm1hcCAtIG1hcCBvciB1bm1hcCBmaWxlcyBvciBkZXZpY2VzIGludG8gbWVtb3J5CiAgIyBzb2NrZXRjYWxsIC0gc29ja2V0IHN5c3RlbSBjYWxscwogICMgbXJlbWFwIC0gcmVtYXAgYSB2aXJ0dWFsIG1lbW9yeSBhZGRyZXNzCiAgIyB2Zm9yayAtIGNyZWF0ZSBhIGNoaWxkIHByb2Nlc3MgYW5kIGJsb2NrIHBhcmVudAogICMgc2VjY29tcCAtIG9wZXJhdGUgb24gU2VjdXJlIENvbXB1dGluZyBzdGF0ZSBvZiB0aGUgcHJvY2VzcwogICMgcmVxdWVzdF9rZXkgLSByZXF1ZXN0IGEga2V5IGZyb20gdGhlIGtlcm5lbCdzIGtleSBtYW5hZ2VtZW50IGZhY2lsaXR5CiAgIyBzeXNjYWxsIC0gaW5kaXJlY3Qgc3lzdGVtIGNhbGwKICAjIGtjbXAgLSBjb21wYXJlIHR3byBwcm9jZXNzZXMgdG8gZGV0ZXJtaW5lIGlmIHRoZXkgc2hhcmUgYSBrZXJuZWwgcmVzb3VyY2UKICAjIHJlYWRkaXIgLSByZWFkIGRpcmVjdG9yeSBlbnRyeQogICMgaW9wZXJtIC0gc2V0IHBvcnQgaW5wdXQvb3V0cHV0IHBlcm1pc3Npb25zCiAgIyBzcHVfcnVuIC0gZXhlY3V0ZSBhbiBTUFUgY29udGV4dAogICMgcmVib290IC0gcmVib290IG9yIGVuYWJsZS9kaXNhYmxlIEN0cmwtQWx0LURlbAogICMgcmVhZGFoZWFkIC0gaW5pdGlhdGUgZmlsZSByZWFkYWhlYWQgaW50byBwYWdlIGNhY2hlCiAgIyBzY2hlZF9nZXRwYXJhbSAtIHNldCBhbmQgZ2V0IHNjaGVkdWxpbmcgcGFyYW1ldGVycwogICMgYWNjdCAtIHN3aXRjaCBwcm9jZXNzIGFjY291bnRpbmcgb24gb3Igb2ZmCiAgIyBzaWdzdXNwZW5kIC0gd2FpdCBmb3IgYSBzaWduYWwKICAjIHJ0X3NpZ3N1c3BlbmQgLSB3YWl0IGZvciBhIHNpZ25hbAogICMgZXhpdF9ncm91cCAtIGV4aXQgYWxsIHRocmVhZHMgaW4gYSBwcm9jZXNzCiAgIyBzb2NrZXQgLSBjcmVhdGUgYW4gZW5kcG9pbnQgZm9yIGNvbW11bmljYXRpb24KICAjIGlvY3RsX3VzZXJmYXVsdGZkIC0gY3JlYXRlIGEgZmlsZSBkZXNjcmlwdG9yIGZvciBoYW5kbGluZyBwYWdlIGZhdWx0cyBpbiB1c2VyIHNwYWNlCiAgIyBzY2hlZF9nZXRfcHJpb3JpdHlfbWF4IC0gZ2V0IHN0YXRpYyBwcmlvcml0eSByYW5nZQogICMgc2NoZWRfZ2V0X3ByaW9yaXR5X21pbiAgLSBnZXQgc3RhdGljIHByaW9yaXR5IHJhbmdlCiAgIyBnZXRkZW50cyAtIGdldCBkaXJlY3RvcnkgZW50cmllcwogICMgZ2V0ZGVudHM2NCAtIGdldCBkaXJlY3RvcnkgZW50cmllcwogICMgc2VsZWN0IC0gc3luY2hyb25vdXMgSS9PIG11bHRpcGxleGluZwogICMgcHNlbGVjdCAtIHN5bmNocm9ub3VzIEkvTyBtdWx0aXBsZXhpbmcKICAjIGFsbG9jX2h1Z2VwYWdlcyAtIGFsbG9jYXRlIG9yIGZyZWUgaHVnZSBwYWdlcwogICMgZnJlZV9odWdlcGFnZXMgLSBhbGxvY2F0ZSBvciBmcmVlIGh1Z2UgcGFnZXMKICAjIGZzeW5jIC0gc3luY2hyb25pemUgYSBmaWxlJ3MgaW4tY29yZSBzdGF0ZSB3aXRoIHN0b3JhZ2UgZGV2aWNlCiAgIyBmZGF0YXN5bmMgLSBzeW5jaHJvbml6ZSBhIGZpbGUncyBpbi1jb3JlIHN0YXRlIHdpdGggc3RvcmFnZSBkZXZpY2UKICAjIHN5c2NhbGxzIC0gTGludXggc3lzdGVtIGNhbGxzCiAgIyBtZW1mZF9jcmVhdGUgLSBjcmVhdGUgYW4gYW5vbnltb3VzIGZpbGUKICAjIG1vZGlmeV9sZHQgLSBnZXQgb3Igc2V0IGEgcGVyLXByb2Nlc3MgTERUIGVudHJ5CiAgIyBnZXRfa2VybmVsX3N5bXMgLSByZXRyaWV2ZSBleHBvcnRlZCBrZXJuZWwgYW5kIG1vZHVsZSBzeW1ib2xzCiAgIyBsc2VlayAtIHJlcG9zaXRpb24gcmVhZC93cml0ZSBmaWxlIG9mZnNldAogICMgc2htYXQgLSBTeXN0ZW0gViBzaGFyZWQgbWVtb3J5IG9wZXJhdGlvbnMKICAjIHNobWR0IC0gU3lzdGVtIFYgc2hhcmVkIG1lbW9yeSBvcGVyYXRpb25zCiAgIyB0aW1lcl9kZWxldGUgLSBkZWxldGUgYSBQT1NJWCBwZXItcHJvY2VzcyB0aW1lcgogICMgcGVyZm1vbmN0bCAtIGludGVyZmFjZSB0byBJQS02NCBwZXJmb3JtYW5jZSBtb25pdG9yaW5nIHVuaXQKICAjIG1vdmVfcGFnZXMgLSBtb3ZlIGluZGl2aWR1YWwgcGFnZXMgb2YgYSBwcm9jZXNzIHRvIGFub3RoZXIgbm9kZQogICMgY2hkaXIgLSBjaGFuZ2Ugd29ya2luZyBkaXJlY3RvcnkKICAjIGZjaGRpciAtIGNoYW5nZSB3b3JraW5nIGRpcmVjdG9yeQogICMgdGltZSAtIGdldCB0aW1lIGluIHNlY29uZHMKICAjIF9leGl0IC0gdGVybWluYXRlIHRoZSBjYWxsaW5nIHByb2Nlc3MKICAjIF9FeGl0IC0gdGVybWluYXRlIHRoZSBjYWxsaW5nIHByb2Nlc3MKICAjIHMzOTBfc3RoeWkgLSBlbXVsYXRlIFNUSFlJIGluc3RydWN0aW9uCiAgIyBpb19zdWJtaXQgLSBzdWJtaXQgYXN5bmNocm9ub3VzIEkvTyBibG9ja3MgZm9yIHByb2Nlc3NpbmcKICAjIG1sb2NrIC0gbG9jayBhbmQgdW5sb2NrIG1lbW9yeQogICMgbWxvY2syIC0gbG9jayBhbmQgdW5sb2NrIG1lbW9yeQogICMgbXVubG9jayAtIGxvY2sgYW5kIHVubG9jayBtZW1vcnkKICAjIG1sb2NrYWxsIC0gbG9jayBhbmQgdW5sb2NrIG1lbW9yeQogICMgbXVubG9ja2FsbCAtIGxvY2sgYW5kIHVubG9jayBtZW1vcnkKICAjIHVtYXNrIC0gc2V0IGZpbGUgbW9kZSBjcmVhdGlvbiBtYXNrCiAgIyBhcmNoX3ByY3RsIC0gc2V0IGFyY2hpdGVjdHVyZS1zcGVjaWZpYyB0aHJlYWQgc3RhdGUKICAjIHVzZWxpYiAtIGxvYWQgc2hhcmVkIGxpYnJhcnkKICAjIHNlbmRmaWxlIC0gdHJhbnNmZXIgZGF0YSBiZXR3ZWVuIGZpbGUgZGVzY3JpcHRvcnMKICAjIHNobWN0bCAtIFN5c3RlbSBWIHNoYXJlZCBtZW1vcnkgY29udHJvbAogICMgZXBvbGxfd2FpdCAtIHdhaXQgZm9yIGFuIEkvTyBldmVudCBvbiBhbiBlcG9sbCBmaWxlIGRlc2NyaXB0b3IKICAjIGVwb2xsX3B3YWl0IC0gd2FpdCBmb3IgYW4gSS9PIGV2ZW50IG9uIGFuIGVwb2xsIGZpbGUgZGVzY3JpcHRvcgogICMgc2lnYWx0c3RhY2sgLSBzZXQgYW5kL29yIGdldCBzaWduYWwgc3RhY2sgY29udGV4dAogICMgaW9jdGwgLSBjb250cm9sIGRldmljZQogICMgc2lnbmFsZmQgLSBjcmVhdGUgYSBmaWxlIGRlc2NyaXB0b3IgZm9yIGFjY2VwdGluZyBzaWduYWxzCiAgIyB1bnNoYXJlIC0gZGlzYXNzb2NpYXRlIHBhcnRzIG9mIHRoZSBwcm9jZXNzIGV4ZWN1dGlvbiBjb250ZXh0CiAgIyBjaHJvb3QgLSBjaGFuZ2Ugcm9vdCBkaXJlY3RvcnkKICAjIG1hZHZpc2UgLSBnaXZlIGFkdmljZSBhYm91dCB1c2Ugb2YgbWVtb3J5CiAgIyBnZXR0aWQgLSBnZXQgdGhyZWFkIGlkZW50aWZpY2F0aW9uCiAgIyBnZXRzb2NrbmFtZSAtIGdldCBzb2NrZXQgbmFtZQogICMgaW9fZGVzdHJveSAtIGRlc3Ryb3kgYW4gYXN5bmNocm9ub3VzIEkvTyBjb250ZXh0CiAgIyBzZXR1cCAtIHNldHVwIGRldmljZXMgYW5kIGZpbGVzeXN0ZW1zLCBtb3VudCByb290IGZpbGVzeXN0ZW0KICAjIG50cF9hZGp0aW1lIC0gdHVuZSBrZXJuZWwgY2xvY2sKICAjIHNlbWdldCAtIGdldCBhIFN5c3RlbSBWIHNlbWFwaG9yZSBzZXQgaWRlbnRpZmllcgogICMgZ2V0dWlkIC0gZ2V0IHVzZXIgaWRlbnRpdHkKICAjIGdldGV1aWQgLSBnZXQgdXNlciBpZGVudGl0eQogICMgX3N5c2NhbGwgLSBpbnZva2luZyBhIHN5c3RlbSBjYWxsIHdpdGhvdXQgbGlicmFyeSBzdXBwb3J0IChPQlNPTEVURSkKICAjIHNjaGVkX3NldGFmZmluaXR5IC0gXCBzZXQgYW5kIGdldCBhIHRocmVhZCdzIENQVSBhZmZpbml0eSBtYXNrCiAgIyBzY2hlZF9nZXRhZmZpbml0eSAtIFwgc2V0IGFuZCBnZXQgYSB0aHJlYWQncyBDUFUgYWZmaW5pdHkgbWFzawogICMgY2FjaGVmbHVzaCAtIGZsdXNoIGNvbnRlbnRzIG9mIGluc3RydWN0aW9uIGFuZC9vciBkYXRhIGNhY2hlCiAgIyBwaXZvdF9yb290IC0gY2hhbmdlIHRoZSByb290IG1vdW50CiAgIyBtc2djdGwgLSBTeXN0ZW0gViBtZXNzYWdlIGNvbnRyb2wgb3BlcmF0aW9ucwogICMgaW9jdGxfZmF0IC0gbWFuaXB1bGF0aW5nIHRoZSBGQVQgZmlsZXN5c3RlbQogICMgc2V0cGdpZCAtIHNldC9nZXQgcHJvY2VzcyBncm91cAogICMgZ2V0cGdpZCAtIHNldC9nZXQgcHJvY2VzcyBncm91cAogICMgc2V0cGdycCAtIHNldC9nZXQgcHJvY2VzcyBncm91cAogICMgZ2V0cGdycCAtIHNldC9nZXQgcHJvY2VzcyBncm91cAogICMgc29ja2V0cGFpciAtIGNyZWF0ZSBhIHBhaXIgb2YgY29ubmVjdGVkIHNvY2tldHMKICAjIGJkZmx1c2ggLSBzdGFydCwgZmx1c2gsIG9yIHR1bmUgYnVmZmVyLWRpcnR5LWZsdXNoIGRhZW1vbgogICMgYWxhcm0gLSBzZXQgYW4gYWxhcm0gY2xvY2sgZm9yIGRlbGl2ZXJ5IG9mIGEgc2lnbmFsCiAgIyB0aW1lcl9zZXR0aW1lIC0gYXJtL2Rpc2FybSBhbmQgZmV0Y2ggc3RhdGUgb2YgUE9TSVggcGVyLXByb2Nlc3MgdGltZXIKICAjIHRpbWVyX2dldHRpbWUgLSBhcm0vZGlzYXJtIGFuZCBmZXRjaCBzdGF0ZSBvZiBQT1NJWCBwZXItcHJvY2VzcyB0aW1lcgogICMgYWRkX2tleSAtIGFkZCBhIGtleSB0byB0aGUga2VybmVsJ3Mga2V5IG1hbmFnZW1lbnQgZmFjaWxpdHkKICAjIHJ0X3NpZ3F1ZXVlaW5mbyAtIHF1ZXVlIGEgc2lnbmFsIGFuZCBkYXRhCiAgIyBydF90Z3NpZ3F1ZXVlaW5mbyAtIHF1ZXVlIGEgc2lnbmFsIGFuZCBkYXRhCiAgIyB1c2VyZmF1bHRmZCAtIGNyZWF0ZSBhIGZpbGUgZGVzY3JpcHRvciBmb3IgaGFuZGxpbmcgcGFnZSBmYXVsdHMgaW4gdXNlciBzcGFjZQogICMgc2Vtb3AgLSBTeXN0ZW0gViBzZW1hcGhvcmUgb3BlcmF0aW9ucwogICMgc2VtdGltZWRvcCAtIFN5c3RlbSBWIHNlbWFwaG9yZSBvcGVyYXRpb25zCiAgIyBnZXRnaWQgLSBnZXQgZ3JvdXAgaWRlbnRpdHkKICAjIGdldGVnaWQgLSBnZXQgZ3JvdXAgaWRlbnRpdHkKICAjIGdldHBpZCAtIGdldCBwcm9jZXNzIGlkZW50aWZpY2F0aW9uCiAgIyBnZXRwcGlkIC0gZ2V0IHByb2Nlc3MgaWRlbnRpZmljYXRpb24KICAjIHNpZ3Byb2NtYXNrIC0gZXhhbWluZSBhbmQgY2hhbmdlIGJsb2NrZWQgc2lnbmFscwogICMgcnRfc2lncHJvY21hc2sgLSBleGFtaW5lIGFuZCBjaGFuZ2UgYmxvY2tlZCBzaWduYWxzCiAgIyB1bmFtZSAtIGdldCBuYW1lIGFuZCBpbmZvcm1hdGlvbiBhYm91dCBjdXJyZW50IGtlcm5lbAogICMgc3RhdHggLSBnZXQgZmlsZSBzdGF0dXMgKGV4dGVuZGVkKQogICMgaW9jdGxfZmljbG9uZXJhbmdlIC0gc2hhcmUgc29tZSB0aGUgZGF0YSBvZiBvbmUgZmlsZSB3aXRoIGFub3RoZXIgZmlsZQogICMgaW9jdGxfZmljbG9uZSAtIHNoYXJlIHNvbWUgdGhlIGRhdGEgb2Ygb25lIGZpbGUgd2l0aCBhbm90aGVyIGZpbGUKICAjIG1xX2dldHNldGF0dHIgLSBnZXQvc2V0IG1lc3NhZ2UgcXVldWUgYXR0cmlidXRlcwogICMgaW9wcmlvX2dldCAtIGdldC9zZXQgSS9PIHNjaGVkdWxpbmcgY2xhc3MgYW5kIHByaW9yaXR5CiAgIyBpb3ByaW9fc2V0IC0gZ2V0L3NldCBJL08gc2NoZWR1bGluZyBjbGFzcyBhbmQgcHJpb3JpdHkKICAjIGVwb2xsX2N0bCAtIGNvbnRyb2wgaW50ZXJmYWNlIGZvciBhbiBlcG9sbCBmaWxlIGRlc2NyaXB0b3IKICAjIHN5bmMgLSBjb21taXQgZmlsZXN5c3RlbSBjYWNoZXMgdG8gZGlzawogICMgc3luY2ZzIC0gY29tbWl0IGZpbGVzeXN0ZW0gY2FjaGVzIHRvIGRpc2sKICAjIHNldHNpZCAtIGNyZWF0ZXMgYSBzZXNzaW9uIGFuZCBzZXRzIHRoZSBwcm9jZXNzIGdyb3VwIElECiAgIyBzaHV0ZG93biAtIHNodXQgZG93biBwYXJ0IG9mIGEgZnVsbC1kdXBsZXggY29ubmVjdGlvbgogICMgZ2V0c2lkIC0gZ2V0IHNlc3Npb24gSUQKICAjIGdldF90aHJlYWRfYXJlYSAtIG1hbmlwdWxhdGUgdGhyZWFkLWxvY2FsIHN0b3JhZ2UgaW5mb3JtYXRpb24KICAjIHNldF90aHJlYWRfYXJlYSAtIG1hbmlwdWxhdGUgdGhyZWFkLWxvY2FsIHN0b3JhZ2UgaW5mb3JtYXRpb24KICAjIHRpbWVyZmRfY3JlYXRlIC0gdGltZXJzIHRoYXQgbm90aWZ5IHZpYSBmaWxlIGRlc2NyaXB0b3JzCiAgIyB0aW1lcmZkX3NldHRpbWUgLSB0aW1lcnMgdGhhdCBub3RpZnkgdmlhIGZpbGUgZGVzY3JpcHRvcnMKICAjIHRpbWVyZmRfZ2V0dGltZSAtIHRpbWVycyB0aGF0IG5vdGlmeSB2aWEgZmlsZSBkZXNjcmlwdG9ycwogICMgaW9jdGxfZmlkZWR1cGVyYW5nZSAtIHNoYXJlIHNvbWUgdGhlIGRhdGEgb2Ygb25lIGZpbGUgd2l0aCBhbm90aGVyIGZpbGUKICAjIG5hbWVfdG9faGFuZGxlX2F0IC0gb2J0YWluIGhhbmRsZSBmb3IgYSBwYXRobmFtZSBhbmQgb3BlbiBmaWxlIHZpYSBhIGhhbmRsZQogICMgb3Blbl9ieV9oYW5kbGVfYXQgLSBvYnRhaW4gaGFuZGxlIGZvciBhIHBhdGhuYW1lIGFuZCBvcGVuIGZpbGUgdmlhIGEgaGFuZGxlCiAgIyBmdXRleCAtIGZhc3QgdXNlci1zcGFjZSBsb2NraW5nCiAgIyBpb2N0bF9ucyAtIGlvY3RsKCkgb3BlcmF0aW9ucyBmb3IgTGludXggbmFtZXNwYWNlcwogICMgcGlkZmRfc2VuZF9zaWduYWwgLSBzZW5kIGEgc2lnbmFsIHRvIGEgcHJvY2VzcyBzcGVjaWZpZWQgYnkgYSBmaWxlIGRlc2NyaXB0b3IKICAjIGNsb25lIC0gY3JlYXRlIGEgY2hpbGQgcHJvY2VzcwogICMgX19jbG9uZTIgLSBjcmVhdGUgYSBjaGlsZCBwcm9jZXNzCiAgIyBjbG9uZTMgLSBjcmVhdGUgYSBjaGlsZCBwcm9jZXNzCiAgIyB0aW1lcyAtIGdldCBwcm9jZXNzIHRpbWVzCiAgIyBzeXNpbmZvIC0gcmV0dXJuIHN5c3RlbSBpbmZvcm1hdGlvbgogICMgaXBjIC0gU3lzdGVtIFYgSVBDIHN5c3RlbSBjYWxscwogICMgZXZlbnRmZCAtIGNyZWF0ZSBhIGZpbGUgZGVzY3JpcHRvciBmb3IgZXZlbnQgbm90aWZpY2F0aW9uCiAgIyB3YWl0IC0gd2FpdCBmb3IgcHJvY2VzcyB0byBjaGFuZ2Ugc3RhdGUKICAjIHdhaXRwaWQgLSB3YWl0IGZvciBwcm9jZXNzIHRvIGNoYW5nZSBzdGF0ZQogICMgd2FpdGlkIC0gd2FpdCBmb3IgcHJvY2VzcyB0byBjaGFuZ2Ugc3RhdGUKICAjIGdldGRvbWFpbm5hbWUgLSBnZXQvc2V0IE5JUyBkb21haW4gbmFtZQogICMgaWRsZSAtIG1ha2UgcHJvY2VzcyAwIGlkbGUKICAjIGlub3RpZnlfYWRkX3dhdGNoIC0gYWRkIGEgd2F0Y2ggdG8gYW4gaW5pdGlhbGl6ZWQgaW5vdGlmeSBpbnN0YW5jZQogICMgZ2V0X21lbXBvbGljeSAtIHJldHJpZXZlIE5VTUEgbWVtb3J5IHBvbGljeSBmb3IgYSB0aHJlYWQKICAjIGJwZiAtIHBlcmZvcm0gYSBjb21tYW5kIG9uIGFuIGV4dGVuZGVkIEJQRiBtYXAgb3IgcHJvZ3JhbQogICMgZ2V0c29ja29wdCAtIGdldCBhbmQgc2V0IG9wdGlvbnMgb24gc29ja2V0cwogICMgc2V0c29ja29wdCAtIGdldCBhbmQgc2V0IG9wdGlvbnMgb24gc29ja2V0cwogICMgZ2V0aXRpbWVyIC0gZ2V0IG9yIHNldCB2YWx1ZSBvZiBhbiBpbnRlcnZhbCB0aW1lcgogICMgc2V0aXRpbWVyIC0gZ2V0IG9yIHNldCB2YWx1ZSBvZiBhbiBpbnRlcnZhbCB0aW1lcgogICMgbWVtYmFycmllciAtIGlzc3VlIG1lbW9yeSBiYXJyaWVycyBvbiBhIHNldCBvZiB0aHJlYWRzCiAgIyBtcHJvdGVjdCAtIHNldCBwcm90ZWN0aW9uIG9uIGEgcmVnaW9uIG9mIG1lbW9yeQogICMgcGtleV9tcHJvdGVjdCAtIHNldCBwcm90ZWN0aW9uIG9uIGEgcmVnaW9uIG9mIG1lbW9yeQogICMgZ2V0Y3B1IC0gZGV0ZXJtaW5lIENQVSBhbmQgTlVNQSBub2RlIG9uIHdoaWNoIHRoZSBjYWxsaW5nIHRocmVhZCBpcyBydW5uaW5nCiAgIyBpb2N0bF9mc2xhYmVsIC0gZ2V0IG9yIHNldCBhIGZpbGVzeXN0ZW0gbGFiZWwKICAjIGxpc3R4YXR0ciAtIGxpc3QgZXh0ZW5kZWQgYXR0cmlidXRlIG5hbWVzCiAgIyBsbGlzdHhhdHRyIC0gbGlzdCBleHRlbmRlZCBhdHRyaWJ1dGUgbmFtZXMKICAjIGZsaXN0eGF0dHIgLSBsaXN0IGV4dGVuZGVkIGF0dHJpYnV0ZSBuYW1lcwogICMgX2xsc2VlayAtIHJlcG9zaXRpb24gcmVhZC93cml0ZSBmaWxlIG9mZnNldAogICMgZmNudGwgLSBtYW5pcHVsYXRlIGZpbGUgZGVzY3JpcHRvcgogICMgdXN0YXQgLSBnZXQgZmlsZXN5c3RlbSBzdGF0aXN0aWNzCiAgIyBzaWduYWwgLSBBTlNJIEMgc2lnbmFsIGhhbmRsaW5nCiAgIyBuYW5vc2xlZXAgLSBoaWdoLXJlc29sdXRpb24gc2xlZXAKICAjIGNvbm5lY3QgLSBpbml0aWF0ZSBhIGNvbm5lY3Rpb24gb24gYSBzb2NrZXQKICAjIHZtODZvbGQgLSBlbnRlciB2aXJ0dWFsIDgwODYgbW9kZQogICMgdm04NiAtIGVudGVyIHZpcnR1YWwgODA4NiBtb2RlCiAgIyBmYW5vdGlmeV9pbml0IC0gY3JlYXRlIGFuZCBpbml0aWFsaXplIGZhbm90aWZ5IGdyb3VwCiAgIyBtaWdyYXRlX3BhZ2VzIC0gbW92ZSBhbGwgcGFnZXMgaW4gYSBwcm9jZXNzIHRvIGFub3RoZXIgc2V0IG9mIG5vZGVzCiAgIyByZXN0YXJ0X3N5c2NhbGwgLSByZXN0YXJ0IGEgc3lzdGVtIGNhbGwgYWZ0ZXIgaW50ZXJydXB0aW9uIGJ5IGEgc3RvcCBzaWduYWwKICAjIGNsb3NlIC0gY2xvc2UgYSBmaWxlIGRlc2NyaXB0b3IKICAjIG1zZ3JjdiAtIFN5c3RlbSBWIG1lc3NhZ2UgcXVldWUgb3BlcmF0aW9ucwogICMgbXNnc25kIC0gU3lzdGVtIFYgbWVzc2FnZSBxdWV1ZSBvcGVyYXRpb25zCiAgIyByZWFkdiAtIHJlYWQgb3Igd3JpdGUgZGF0YSBpbnRvIG11bHRpcGxlIGJ1ZmZlcnMKICAjIHdyaXRldiAtIHJlYWQgb3Igd3JpdGUgZGF0YSBpbnRvIG11bHRpcGxlIGJ1ZmZlcnMKICAjIHByZWFkdiAtIHJlYWQgb3Igd3JpdGUgZGF0YSBpbnRvIG11bHRpcGxlIGJ1ZmZlcnMKICAjIHB3cml0ZXYgLSByZWFkIG9yIHdyaXRlIGRhdGEgaW50byBtdWx0aXBsZSBidWZmZXJzCiAgIyBwcmVhZHYyIC0gcmVhZCBvciB3cml0ZSBkYXRhIGludG8gbXVsdGlwbGUgYnVmZmVycwogICMgcHdyaXRldjIgLSByZWFkIG9yIHdyaXRlIGRhdGEgaW50byBtdWx0aXBsZSBidWZmZXJzCiAgIyBzeXNsb2cgLSByZWFkIGFuZC9vciBjbGVhciBrZXJuZWwgbWVzc2FnZSByaW5nIGJ1ZmZlcjsgc2V0IGNvbnNvbGVfbG9nbGV2ZWwKICAjIGtsb2djdGwgLSByZWFkIGFuZC9vciBjbGVhciBrZXJuZWwgbWVzc2FnZSByaW5nIGJ1ZmZlcjsgc2V0IGNvbnNvbGVfbG9nbGV2ZWwKICAjIHNjaGVkX3lpZWxkIC0geWllbGQgdGhlIHByb2Nlc3NvcgogICMgdmhhbmd1cCAtIHZpcnR1YWxseSBoYW5ndXAgdGhlIGN1cnJlbnQgdGVybWluYWwKICAjIGlvY3RsX2lmbGFncyAtIGlvY3RsKCkgb3BlcmF0aW9ucyBmb3IgaW5vZGUgZmxhZ3MKICAjIHNnZXRtYXNrIC0gbWFuaXB1bGF0aW9uIG9mIHNpZ25hbCBtYXNrIChvYnNvbGV0ZSkKICAjIHNzZXRtYXNrIC0gbWFuaXB1bGF0aW9uIG9mIHNpZ25hbCBtYXNrIChvYnNvbGV0ZSkKICAjIHN5bmNfZmlsZV9yYW5nZSAtIHN5bmMgYSBmaWxlIHNlZ21lbnQgd2l0aCBkaXNrCiAgIyBjb3B5X2ZpbGVfcmFuZ2UgLSBDb3B5IGEgcmFuZ2Ugb2YgZGF0YSBmcm9tIG9uZSBmaWxlIHRvIGFub3RoZXIKICAjIHNpZ3BlbmRpbmcgLSBleGFtaW5lIHBlbmRpbmcgc2lnbmFscwogICMgcnRfc2lncGVuZGluZyAtIGV4YW1pbmUgcGVuZGluZyBzaWduYWxzCiAgIyBnZXR1bndpbmQgLSBjb3B5IHRoZSB1bndpbmQgZGF0YSB0byBjYWxsZXIncyBidWZmZXIKICAjIG1zeW5jIC0gc3luY2hyb25pemUgYSBmaWxlIHdpdGggYSBtZW1vcnkgbWFwCiAgIyBnZXRfcm9idXN0X2xpc3QgLSBnZXQvc2V0IGxpc3Qgb2Ygcm9idXN0IGZ1dGV4ZXMKICAjIHNldF9yb2J1c3RfbGlzdCAtIGdldC9zZXQgbGlzdCBvZiByb2J1c3QgZnV0ZXhlcwogICMgZHVwIC0gZHVwbGljYXRlIGEgZmlsZSBkZXNjcmlwdG9yCiAgIyBkdXAyIC0gZHVwbGljYXRlIGEgZmlsZSBkZXNjcmlwdG9yCiAgIyBkdXAzIC0gZHVwbGljYXRlIGEgZmlsZSBkZXNjcmlwdG9yCiAgIyBzMzkwX3BjaV9tbWlvX3dyaXRlIC0gdHJhbnNmZXIgZGF0YSB0by9mcm9tIFBDSSBNTUlPIG1lbW9yeSBwYWdlCiAgIyBzMzkwX3BjaV9tbWlvX3JlYWQgLSB0cmFuc2ZlciBkYXRhIHRvL2Zyb20gUENJIE1NSU8gbWVtb3J5IHBhZ2UKICAjIHBhdXNlIC0gd2FpdCBmb3Igc2lnbmFsCiAgIyBzd2Fwb24gLSBzdGFydC9zdG9wIHN3YXBwaW5nIHRvIGZpbGUvZGV2aWNlCiAgIyBzd2Fwb2ZmIC0gc3RhcnQvc3RvcCBzd2FwcGluZyB0byBmaWxlL2RldmljZQoKICAjIFJlY29yZCB0eXBlIG5vcm1hbGl6YXRpb25zCiAgIyBVc2VmdWwgbGlua3M6CiAgIyBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vdG9ydmFsZHMvbGludXgvdjQuMTYvaW5jbHVkZS91YXBpL2xpbnV4L2F1ZGl0LmgKICAjIGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9saW51eC1hdWRpdC9hdWRpdC11c2Vyc3BhY2UvNGQ5MzMzMDFiMTgzNWNhZmEwOGI5ZTllZjcwNWM4ZmI2Yzk2Y2I2Mi9saWIvbGliYXVkaXQuaAogICMgaHR0cHM6Ly93d3cuZWxhc3RpYy5jby9ndWlkZS9lbi9lY3MvY3VycmVudC9lY3MtYWxsb3dlZC12YWx1ZXMtZXZlbnQtY2F0ZWdvcnkuaHRtbAoKICAjIElBTSByZWxhdGVkIGV2ZW50cwoKICAjIEFVRElUX0FDQ1RfTE9DSyAtIFVzZXIncyBhY2NvdW50IGxvY2tlZCBieSBhZG1pbgogIC0gcmVjb3JkX3R5cGVzOiBBQ0NUX0xPQ0sKICAgIGFjdGlvbjogbG9ja2VkLWFjY291bnQKICAgIGVjczoKICAgICAgPDw6ICplY3MtaWFtCiAgICAgIHR5cGU6CiAgICAgICAgLSB1c2VyCiAgICAgICAgLSBpbmZvCiAgIyBBVURJVF9BQ0NUX1VOTE9DSyAtIFVzZXIncyBhY2NvdW50IHVubG9ja2VkIGJ5IGFkbWluCiAgLSByZWNvcmRfdHlwZXM6IEFDQ1RfVU5MT0NLCiAgICBhY3Rpb246IHVubG9ja2VkLWFjY291bnQKICAgIGVjczoKICAgICAgPDw6ICplY3MtaWFtCiAgICAgIHR5cGU6CiAgICAgICAgLSB1c2VyCiAgICAgICAgLSBpbmZvCiAgIyBBVURJVF9BRERfR1JPVVAgLSBHcm91cCBhY2NvdW50IGFkZGVkCiAgLSByZWNvcmRfdHlwZXM6IEFERF9HUk9VUAogICAgYWN0aW9uOiBhZGRlZC1ncm91cC1hY2NvdW50LXRvCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IFtpZCwgYWNjdF0KICAgICAgd2hhdDogYWNjb3VudAogICAgZWNzOgogICAgICA8PDogKmVjcy1pYW0KICAgICAgdHlwZToKICAgICAgICAtIGdyb3VwCiAgICAgICAgLSBjcmVhdGlvbgogICMgQVVESVRfQUREX1VTRVIgLSBVc2VyIGFjY291bnQgYWRkZWQKICAtIHJlY29yZF90eXBlczogQUREX1VTRVIKICAgIGFjdGlvbjogYWRkZWQtdXNlci1hY2NvdW50CiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IFtpZCwgYWNjdF0KICAgICAgd2hhdDogYWNjb3VudAogICAgZWNzOgogICAgICA8PDogKmVjcy1pYW0KICAgICAgdHlwZToKICAgICAgICAtIHVzZXIKICAgICAgICAtIGNyZWF0aW9uCiAgIyBBVURJVF9ERUxfR1JPVVAgLSBHcm91cCBhY2NvdW50IGRlbGV0ZWQKICAtIHJlY29yZF90eXBlczogREVMX0dST1VQCiAgICBhY3Rpb246IGRlbGV0ZWQtZ3JvdXAtYWNjb3VudC1mcm9tCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IFtpZCwgYWNjdF0KICAgICAgd2hhdDogYWNjb3VudAogICAgZWNzOgogICAgICA8PDogKmVjcy1pYW0KICAgICAgdHlwZToKICAgICAgICAtIGdyb3VwCiAgICAgICAgLSBkZWxldGlvbgogICMgQVVESVRfREVMX1VTRVIgLSBVc2VyIGFjY291bnQgZGVsZXRlZAogIC0gcmVjb3JkX3R5cGVzOiBERUxfVVNFUgogICAgYWN0aW9uOiBkZWxldGVkLXVzZXItYWNjb3VudAogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBbaWQsIGFjY3RdCiAgICAgIHdoYXQ6IGFjY291bnQKICAgIGVjczoKICAgICAgPDw6ICplY3MtaWFtCiAgICAgIHR5cGU6CiAgICAgICAgLSB1c2VyCiAgICAgICAgLSBkZWxldGlvbgogICMgQVVESVRfR1JQX01HTVQgLSBHcm91cCBhY2NvdW50IGF0dHIgd2FzIG1vZGlmaWVkCiAgLSByZWNvcmRfdHlwZXM6IEdSUF9NR01UCiAgICBhY3Rpb246IG1vZGlmaWVkLWdyb3VwLWFjY291bnQKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogW2lkLCBhY2N0XQogICAgICB3aGF0OiBhY2NvdW50CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWlhbQogICAgICB0eXBlOgogICAgICAgIC0gZ3JvdXAKICAgICAgICAtIGNoYW5nZQogICMgQVVESVRfUk9MRV9BU1NJR04gLSBBZG1pbiBhc3NpZ25lZCB1c2VyIHRvIHJvbGUKICAtIHJlY29yZF90eXBlczogUk9MRV9BU1NJR04KICAgIGFjdGlvbjogYXNzaWduZWQtdXNlci1yb2xlLXRvCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IFtpZCwgYWNjdF0KICAgICAgd2hhdDogYWNjb3VudAogICAgZWNzOgogICAgICA8PDogKmVjcy1pYW0KICAgICAgdHlwZToKICAgICAgICAtIHVzZXIKICAgICAgICAtIGNoYW5nZQogICMgQVVESVRfUk9MRV9NT0RJRlkgLSBBZG1pbiBtb2RpZmllZCBhIHJvbGUKICAtIHJlY29yZF90eXBlczogUk9MRV9NT0RJRlkKICAgIGFjdGlvbjogbW9kaWZpZWQtcm9sZQogICAgZWNzOgogICAgICA8PDogKmVjcy1pYW0KICAgICAgdHlwZToKICAgICAgICAtIGNoYW5nZQogICMgQVVESVRfUk9MRV9SRU1PVkUgLSBBZG1pbiByZW1vdmVkIHVzZXIgZnJvbSByb2xlCiAgLSByZWNvcmRfdHlwZXM6IFJPTEVfUkVNT1ZFCiAgICBhY3Rpb246IHJlbW92ZWQtdXNlci1yb2xlLWZyb20KICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogW2lkLCBhY2N0XQogICAgICB3aGF0OiBhY2NvdW50CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWlhbQogICAgICB0eXBlOgogICAgICAgIC0gdXNlcgogICAgICAgIC0gY2hhbmdlCiAgIyBBVURJVF9VU0VSX01HTVQgLSBVc2VyIGFjY3QgYXR0cmlidXRlIGNoYW5nZQogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogVVNFUl9NR01UCiAgICBhY3Rpb246IG1vZGlmaWVkLXVzZXItYWNjb3VudAogICAgZWNzOgogICAgICA8PDogKmVjcy1pYW0KICAgICAgdHlwZToKICAgICAgICAtIHVzZXIKICAgICAgICAtIGNoYW5nZQogICMgQVVESVRfVVNFUl9DSEFVVEhUT0sgLSBVc2VyIGFjY3QgcGFzc3dvcmQgb3IgcGluIGNoYW5nZWQKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IFVTRVJfQ0hBVVRIVE9LCiAgICBhY3Rpb246IGNoYW5nZWQtcGFzc3dvcmQKICAgIGVjczoKICAgICAgPDw6ICplY3MtaWFtCiAgICAgIHR5cGU6CiAgICAgICAgLSB1c2VyCiAgICAgICAgLSBjaGFuZ2UKICAjIEFVRElUX0dSUF9DSEFVVEhUT0sgLSBHcm91cCBhY2N0IHBhc3N3b3JkIG9yIHBpbiBjaGFuZ2VkCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBHUlBfQ0hBVVRIVE9LCiAgICBhY3Rpb246IGNoYW5nZWQtZ3JvdXAtcGFzc3dvcmQKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogYWNjdAogICAgICB3aGF0OiB1c2VyLXNlc3Npb24KICAgIGVjczoKICAgICAgPDw6ICplY3MtaWFtCiAgICAgIHR5cGU6CiAgICAgICAgLSBncm91cAogICAgICAgIC0gY2hhbmdlCgogICMgQXV0aGVudGljYXRpb24gcmVsYXRlZCBldmVudHMKCiAgIyBBVURJVF9DUkVEX0FDUSAtIFVzZXIgY3JlZGVudGlhbCBhY3F1aXJlZAogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogQ1JFRF9BQ1EKICAgIGFjdGlvbjogYWNxdWlyZWQtY3JlZGVudGlhbHMKICAgIGVjczogKmVjcy1hdXRoCiAgIyBBVURJVF9DUkVEX0RJU1AgLSBVc2VyIGNyZWRlbnRpYWwgZGlzcG9zZWQKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IENSRURfRElTUAogICAgYWN0aW9uOiBkaXNwb3NlZC1jcmVkZW50aWFscwogICAgZWNzOiAqZWNzLWF1dGgKICAjIEFVRElUX0NSRURfUkVGUiAtIFVzZXIgY3JlZGVudGlhbCByZWZyZXNoZWQKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IENSRURfUkVGUgogICAgYWN0aW9uOiByZWZyZXNoZWQtY3JlZGVudGlhbHMKICAgIGVjczogKmVjcy1hdXRoCiAgIyBBVURJVF9HUlBfQVVUSCAtIEF1dGhlbnRpY2F0aW9uIGZvciBncm91cCBwYXNzd29yZAogIC0gcmVjb3JkX3R5cGVzOiBHUlBfQVVUSAogICAgYWN0aW9uOiBhdXRoZW50aWNhdGVkLXRvLWdyb3VwCiAgICBlY3M6ICplY3MtYXV0aAogICMgQVVESVRfTE9HSU4gLSBEZWZpbmUgdGhlIGxvZ2luIGlkIGFuZCBpbmZvcm1hdGlvbgogIC0gcmVjb3JkX3R5cGVzOiBMT0dJTgogICAgYWN0aW9uOiBjaGFuZ2VkLWxvZ2luLWlkLXRvCiAgICBzdWJqZWN0OgogICAgICBwcmltYXJ5OiBbb2xkX2F1aWQsIG9sZC1hdWlkXQogICAgICBzZWNvbmRhcnk6IHVpZAogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBhdWlkCiAgICAgIHdoYXQ6IHVzZXItc2Vzc2lvbgogICAgZWNzOgogICAgICA8PDogKmVjcy1hdXRoCiAgICAgIHR5cGU6IHN0YXJ0CiAgIyBBVURJVF9VU0VSX0FDQ1QgLSBVc2VyIHN5c3RlbSBhY2Nlc3MgYXV0aG9yaXphdGlvbgogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogVVNFUl9BQ0NUCiAgICBhY3Rpb246IHdhcy1hdXRob3JpemVkCiAgICBlY3M6ICplY3MtYXV0aAogICMgQVVESVRfVVNFUl9BVVRIIC0gVXNlciBzeXN0ZW0gYWNjZXNzIGF1dGhlbnRpY2F0aW9uCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBVU0VSX0FVVEgKICAgIGFjdGlvbjogYXV0aGVudGljYXRlZAogICAgZWNzOiAqZWNzLWF1dGgKICAjIEFVRElUX1VTRVJfRU5EIC0gVXNlciBzZXNzaW9uIGVuZAogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogVVNFUl9FTkQKICAgIGFjdGlvbjogZW5kZWQtc2Vzc2lvbgogICAgZWNzOiAqZWNzLWF1dGgKICAjIEFVRElUX1VTRVJfRVJSIC0gVXNlciBhY2N0IHN0YXRlIGVycm9yCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBVU0VSX0VSUgogICAgYWN0aW9uOiBlcnJvcgogICAgc291cmNlX2lwOiBbYWRkcl0KICAgIGVjczogKmVjcy1hdXRoCiAgIyBBVURJVF9VU0VSX0xPR0lOIC0gVXNlciBoYXMgbG9nZ2VkIGluCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBVU0VSX0xPR0lOCiAgICBhY3Rpb246IGxvZ2dlZC1pbgogICAgc291cmNlX2lwOiBbYWRkcl0KICAgIGVjczoKICAgICAgPDw6ICplY3MtYXV0aAogICAgICB0eXBlOiBzdGFydAogICMgQVVESVRfVVNFUl9MT0dPVVQgLSBVc2VyIGhhcyBsb2dnZWQgb3V0CiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBVU0VSX0xPR09VVAogICAgYWN0aW9uOiBsb2dnZWQtb3V0CiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLWF1dGgKICAgICAgdHlwZTogZW5kCiAgIyBBVURJVF9VU0VSX1JPTEVfQ0hBTkdFIC0gVXNlciBjaGFuZ2VkIHRvIGEgbmV3IHJvbGUKICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IFVTRVJfUk9MRV9DSEFOR0UKICAgIGFjdGlvbjogY2hhbmdlZC1yb2xlLXRvCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IHNlbGVjdGVkLWNvbnRleHQKICAgICAgd2hhdDogdXNlci1zZXNzaW9uCiAgIyBBVURJVF9VU0VSX1NUQVJUIC0gVXNlciBzZXNzaW9uIHN0YXJ0CiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBVU0VSX1NUQVJUCiAgICBhY3Rpb246IHN0YXJ0ZWQtc2Vzc2lvbgogICAgc291cmNlX2lwOiBbYWRkcl0KICAgIGVjczogKmVjcy1hdXRoCgogICMgSG9zdCB2aXJ0dWFsaXphdGlvbiBldmVudHMKCiAgIyBBVURJVF9WSVJUX0NPTlRST0wgLSBTdGFydCwgUGF1c2UsIFN0b3AgVk0KICAtIHJlY29yZF90eXBlczogVklSVF9DT05UUk9MCiAgICBhY3Rpb246IGlzc3VlZC12bS1jb250cm9sCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IG9wCiAgICAgIHNlY29uZGFyeTogdm0KICAgICAgd2hhdDogdmlydHVhbC1tYWNoaW5lCiAgICBlY3M6ICplY3MtaG9zdAogICMgQVVESVRfVklSVF9DUkVBVEUgLSBDcmVhdGlvbiBvZiBndWVzdCBpbWFnZQogIC0gcmVjb3JkX3R5cGVzOiBWSVJUX0NSRUFURQogICAgYWN0aW9uOiBjcmVhdGVkLXZtLWltYWdlCiAgICBlY3M6ICplY3MtaG9zdAogICMgQVVESVRfVklSVF9ERVNUUk9ZIC0gRGVzdHJ1Y3Rpb24gb2YgZ3Vlc3QgaW1hZ2UKICAtIHJlY29yZF90eXBlczogVklSVF9ERVNUUk9ZCiAgICBhY3Rpb246IGRlbGV0ZWQtdm0taW1hZ2UKICAgIGVjczogKmVjcy1ob3N0CiAgIyBBVURJVF9WSVJUX0lOVEVHUklUWV9DSEVDSyAtIEd1ZXN0IGludGVncml0eSByZXN1bHRzCiAgLSByZWNvcmRfdHlwZXM6IFZJUlRfSU5URUdSSVRZX0NIRUNLCiAgICBhY3Rpb246IGNoZWNrZWQtaW50ZWdyaXR5LW9mCiAgICBlY3M6ICplY3MtaG9zdAogICMgQVVESVRfVklSVF9NQUNISU5FX0lEIC0gQmluZGluZyBvZiBsYWJlbCB0byBWTQogIC0gcmVjb3JkX3R5cGVzOiBWSVJUX01BQ0hJTkVfSUQKICAgIGFjdGlvbjogYXNzaWduZWQtdm0taWQKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogdm0KICAgICAgd2hhdDogdmlydHVhbC1tYWNoaW5lCiAgICBlY3M6ICplY3MtaG9zdAogICMgQVVESVRfVklSVF9NSUdSQVRFX0lOIC0gSW5ib3VuZCBndWVzdCBtaWdyYXRpb24gaW5mbwogIC0gcmVjb3JkX3R5cGVzOiBWSVJUX01JR1JBVEVfSU4KICAgIGFjdGlvbjogbWlncmF0ZWQtdm0tZnJvbQogICAgZWNzOiAqZWNzLWhvc3QKICAjIEFVRElUX1ZJUlRfTUlHUkFURV9PVVQgLSBPdXRib3VuZCBndWVzdCBtaWdyYXRpb24gaW5mbwogIC0gcmVjb3JkX3R5cGVzOiBWSVJUX01JR1JBVEVfT1VUCiAgICBhY3Rpb246IG1pZ3JhdGVkLXZtLXRvCiAgICBlY3M6ICplY3MtaG9zdAogICMgQVVESVRfVklSVF9SRVNPVVJDRSAtIFJlc291cmNlIGFzc2lnbm1lbnQKICAtIHJlY29yZF90eXBlczogVklSVF9SRVNPVVJDRQogICAgYWN0aW9uOiBhc3NpZ25lZC12bS1yZXNvdXJjZQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiByZXNyYwogICAgICBzZWNvbmRhcnk6IHZtCiAgICAgIHdoYXQ6IHZpcnR1YWwtbWFjaGluZQogICAgZWNzOiAqZWNzLWhvc3QKCiAgIyBVc2Vyc3BhY2UgcHJvY2VzcyBldmVudHMKCiAgIyBBVURJVF9DSEdSUF9JRCAtIFVzZXIgc3BhY2UgZ3JvdXAgSUQgY2hhbmdlZAogIC0gcmVjb3JkX3R5cGVzOiBDSEdSUF9JRAogICAgYWN0aW9uOiBjaGFuZ2VkLWdyb3VwCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogY2hhbmdlCiAgIyBBVURJVF9DSFVTRVJfSUQgLSBDaGFuZ2VkIHVzZXIgSUQgc3VwcGxlbWVudGFsIGRhdGEKICAtIHJlY29yZF90eXBlczogQ0hVU0VSX0lECiAgICBhY3Rpb246IGNoYW5nZWQtdXNlci1pZAogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IGNoYW5nZQogICMgQVVESVRfVEVTVCAtIFVzZWQgZm9yIHRlc3Qgc3VjY2VzcyBtZXNzYWdlcwogIC0gcmVjb3JkX3R5cGVzOiBURVNUCiAgICBhY3Rpb246IHNlbnQtdGVzdAogICAgZWNzOiAqZWNzLXByb2Nlc3MKICAjIEFVRElUX1RSVVNURURfQVBQIC0gVHJ1c3RlZCBhcHAgbXNnIC0gZnJlZXN0eWxlIHRleHQKICAtIHJlY29yZF90eXBlczogVFJVU1RFRF9BUFAKICAgIGFjdGlvbjogdW5rbm93bgogICAgZWNzOiAqZWNzLXByb2Nlc3MKICAjIEFVRElUX1VTRVJfQ01EIC0gVXNlciBzaGVsbCBjb21tYW5kIGFuZCBhcmdzCiAgLSByZWNvcmRfdHlwZXM6IFVTRVJfQ01ECiAgICBhY3Rpb246IHJhbi1jb21tYW5kCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGNtZAogICAgICB3aGF0OiBwcm9jZXNzCiAgICBkZXNjcmlwdGlvbjogPgogICAgICBUaGVzZSBtZXNzYWdlcyBhcmUgZnJvbSB1c2VyLXNwYWNlIGFwcHMsIGxpa2Ugc3VkbywgdGhhdCBsb2cgY29tbWFuZHMKICAgICAgYmVpbmcgcnVuIGJ5IGEgdXNlci4gVGhlIHVpZCBjb250YWluZWQgaW4gdGhlc2UgbWVzc2FnZXMgaXMgdXNlcidzIFVJRCBhdAogICAgICB0aGUgdGltZSB0aGUgY29tbWFuZCB3YXMgcnVuLiBJdCBpcyBub3QgdGhlICJ0YXJnZXQiIFVJRCB1c2VkIHRvIHJ1biB0aGUKICAgICAgY29tbWFuZCwgd2hpY2ggaXMgbm9ybWFsbHkgcm9vdC4KICAgIGVjczoKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBzdGFydAoKICAjIEhvc3QtbGV2ZWwgZXZlbnRzCgogICMgQVVESVRfU1lTVEVNX0JPT1QgLSBTeXN0ZW0gYm9vdAogIC0gcmVjb3JkX3R5cGVzOiBTWVNURU1fQk9PVAogICAgYWN0aW9uOiBib290ZWQtc3lzdGVtCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHN5c3RlbQogICAgZWNzOgogICAgICA8PDogKmVjcy1ob3N0CiAgICAgIHR5cGU6IHN0YXJ0CiAgIyBBVURJVF9TWVNURU1fUlVOTEVWRUwgLSBTeXN0ZW0gcnVubGV2ZWwgY2hhbmdlCiAgLSByZWNvcmRfdHlwZXM6IFNZU1RFTV9SVU5MRVZFTAogICAgYWN0aW9uOiBjaGFuZ2VkLXRvLXJ1bmxldmVsCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IG5ldy1sZXZlbAogICAgICB3aGF0OiBzeXN0ZW0KICAgIGVjczoKICAgICAgPDw6ICplY3MtaG9zdAogICAgICB0eXBlOiBjaGFuZ2UKICAjIEFVRElUX1NZU1RFTV9TSFVURE9XTiAtIFN5c3RlbSBzaHV0ZG93bgogIC0gcmVjb3JkX3R5cGVzOiBTWVNURU1fU0hVVERPV04KICAgIGFjdGlvbjogc2h1dGRvd24tc3lzdGVtCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHN5c3RlbQogICAgZWNzOgogICAgICA8PDogKmVjcy1ob3N0CiAgICAgIHR5cGU6IGVuZAoKICAjIFNlcnZpY2UtbGV2ZWwgZXZlbnRzCgogICMgQVVESVRfU0VSVklDRV9TVEFSVCAtIFNlcnZpY2UgKGRhZW1vbikgc3RhcnQKICAtIHJlY29yZF90eXBlczogU0VSVklDRV9TVEFSVAogICAgYWN0aW9uOiBzdGFydGVkLXNlcnZpY2UKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogdW5pdAogICAgICB3aGF0OiBzZXJ2aWNlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogc3RhcnQKICAjIEFVRElUX1NFUlZJQ0VfU1RPUCAtIFNlcnZpY2UgKGRhZW1vbikgc3RvcAogIC0gcmVjb3JkX3R5cGVzOiBTRVJWSUNFX1NUT1AKICAgIGFjdGlvbjogc3RvcHBlZC1zZXJ2aWNlCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IHVuaXQKICAgICAgd2hhdDogc2VydmljZQogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IHN0b3AKCiAgIyBBdWRpdGQgaW50ZXJuYWwgZXZlbnRzCgogICMgQVVESVRfQ09ORklHX0NIQU5HRSAtIEF1ZGl0IHN5c3RlbSBjb25maWd1cmF0aW9uIGNoYW5nZQogIC0gcmVjb3JkX3R5cGVzOiBDT05GSUdfQ0hBTkdFCiAgICBhY3Rpb246IGNoYW5nZWQtYXVkaXQtY29uZmlndXJhdGlvbgogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OgogICAgICAgIFtvcCwga2V5LCBhdWRpdF9lbmFibGVkLCBhdWRpdF9waWQsIGF1ZGl0X2JhY2tsb2dfbGltaXQsIGF1ZGl0X2ZhaWx1cmVdCiAgICAgIHdoYXQ6IGF1ZGl0LWNvbmZpZwogICAgZWNzOgogICAgICBjYXRlZ29yeTogW3Byb2Nlc3MsIGNvbmZpZ3VyYXRpb25dCiAgICAgIHR5cGU6IGNoYW5nZQogICMgQVVESVRfREFFTU9OX0FCT1JUIC0gRGFlbW9uIGVycm9yIHN0b3AgcmVjb3JkCiAgLSByZWNvcmRfdHlwZXM6IERBRU1PTl9BQk9SVAogICAgYWN0aW9uOiBhYm9ydGVkLWF1ZGl0ZC1zdGFydHVwCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNlcnZpY2UKICAgIGVjczoKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBzdG9wCiAgIyBBVURJVF9EQUVNT05fQUNDRVBUIC0gQXVkaXRkIGFjY2VwdGVkIHJlbW90ZSBjb25uZWN0aW9uCiAgLSByZWNvcmRfdHlwZXM6IERBRU1PTl9BQ0NFUFQKICAgIGFjdGlvbjogcmVtb3RlLWF1ZGl0LWNvbm5lY3RlZAogICAgb2JqZWN0OgogICAgICB3aGF0OiBzZXJ2aWNlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLW5ldHdvcmsKICAgICAgdHlwZToKICAgICAgICAtIGNvbm5lY3Rpb24KICAgICAgICAtIHN0YXJ0CiAgIyBBVURJVF9EQUVNT05fQ0xPU0UgLSBBdWRpdGQgY2xvc2VkIHJlbW90ZSBjb25uZWN0aW9uCiAgLSByZWNvcmRfdHlwZXM6IERBRU1PTl9DTE9TRQogICAgYWN0aW9uOiByZW1vdGUtYXVkaXQtZGlzY29ubmVjdGVkCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNlcnZpY2UKICAgIGVjczoKICAgICAgPDw6ICplY3MtbmV0d29yawogICAgICB0eXBlOgogICAgICAgIC0gY29ubmVjdGlvbgogICAgICAgIC0gc3RhcnQKICAjIEFVRElUX0RBRU1PTl9DT05GSUcgLSBEYWVtb24gY29uZmlnIGNoYW5nZQogIC0gcmVjb3JkX3R5cGVzOiBEQUVNT05fQ09ORklHCiAgICBhY3Rpb246IGNoYW5nZWQtYXVkaXRkLWNvbmZpZ3VyYXRpb24KICAgIG9iamVjdDoKICAgICAgd2hhdDogc2VydmljZQogICAgZWNzOgogICAgICBjYXRlZ29yeTogW3Byb2Nlc3MsIGNvbmZpZ3VyYXRpb25dCiAgICAgIHR5cGU6IGNoYW5nZQogICMgQVVESVRfREFFTU9OX0VORCAtIERhZW1vbiBub3JtYWwgc3RvcCByZWNvcmQKICAtIHJlY29yZF90eXBlczogREFFTU9OX0VORAogICAgYWN0aW9uOiBzaHV0ZG93bi1hdWRpdAogICAgb2JqZWN0OgogICAgICB3aGF0OiBzZXJ2aWNlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogc3RvcAogICMgQVVESVRfREFFTU9OX0VSUiAtIEF1ZGl0ZCBpbnRlcm5hbCBlcnJvcgogIC0gcmVjb3JkX3R5cGVzOiBEQUVNT05fRVJSCiAgICBhY3Rpb246IGF1ZGl0LWVycm9yCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNlcnZpY2UKICAgIGVjczogKmVjcy1wcm9jZXNzCiAgIyBBVURJVF9EQUVNT05fUkVDT05GSUcgLSBBdWRpdGQgc2hvdWxkIHJlY29uZmlndXJlCiAgLSByZWNvcmRfdHlwZXM6IERBRU1PTl9SRUNPTkZJRwogICAgYWN0aW9uOiByZWNvbmZpZ3VyZWQtYXVkaXRkCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHNlcnZpY2UKICAgIGVjczoKICAgICAgY2F0ZWdvcnk6IFtwcm9jZXNzLCBjb25maWd1cmF0aW9uXQogICAgICB0eXBlOiBpbmZvCiAgIyBBVURJVF9EQUVNT05fUkVTVU1FIC0gQXVkaXRkIHNob3VsZCByZXN1bWUgbG9nZ2luZwogIC0gcmVjb3JkX3R5cGVzOiBEQUVNT05fUkVTVU1FCiAgICBhY3Rpb246IHJlc3VtZWQtYXVkaXQtbG9nZ2luZwogICAgb2JqZWN0OgogICAgICB3aGF0OiBzZXJ2aWNlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogY2hhbmdlCiAgIyBBVURJVF9EQUVNT05fUk9UQVRFIC0gQXVkaXRkIHNob3VsZCByb3RhdGUgbG9ncwogIC0gcmVjb3JkX3R5cGVzOiBEQUVNT05fUk9UQVRFCiAgICBhY3Rpb246IHJvdGF0ZWQtYXVkaXQtbG9ncwogICAgb2JqZWN0OgogICAgICB3aGF0OiBzZXJ2aWNlCiAgICBlY3M6CiAgICAgIDw8OiAqZWNzLXByb2Nlc3MKICAgICAgdHlwZTogY2hhbmdlCiAgIyBBVURJVF9EQUVNT05fU1RBUlQgLSBEYWVtb24gc3RhcnR1cCByZWNvcmQKICAtIHJlY29yZF90eXBlczogREFFTU9OX1NUQVJUCiAgICBhY3Rpb246IHN0YXJ0ZWQtYXVkaXQKICAgIG9iamVjdDoKICAgICAgd2hhdDogc2VydmljZQogICAgZWNzOgogICAgICA8PDogKmVjcy1wcm9jZXNzCiAgICAgIHR5cGU6IHN0YXJ0CiAgIyBBVURJVF9LRVJORUwgLSBBc3luY2hyb25vdXMgYXVkaXQgcmVjb3JkLiBOT1QgQSBSRVFVRVNULgogIC0gcmVjb3JkX3R5cGVzOiBLRVJORUwKICAgIGFjdGlvbjogaW5pdGlhbGl6ZWQtYXVkaXQtc3Vic3lzdGVtCiAgICBlY3M6ICplY3MtcHJvY2VzcwoKICAjIENvbmZpZ3VyYXRpb24gY2hhbmdlIGV2ZW50cwoKICAjIEFVRElUX1VTWVNfQ09ORklHIC0gVXNlciBzcGFjZSBzeXN0ZW0gY29uZmlnIGNoYW5nZQogIC0gcmVjb3JkX3R5cGVzOiBVU1lTX0NPTkZJRwogICAgYWN0aW9uOiBjaGFuZ2VkLWNvbmZpZ3VyYXRpb24KICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogb3AKICAgICAgd2hhdDogc3lzdGVtCiAgICBlY3M6CiAgICAgIGNhdGVnb3J5OiBjb25maWd1cmF0aW9uCiAgICAgIHR5cGU6IGNoYW5nZQogICMgQVVESVRfTkVURklMVEVSX0NGRyAtIE5ldGZpbHRlciBjaGFpbiBtb2RpZmljYXRpb25zCiAgLSByZWNvcmRfdHlwZXM6IE5FVEZJTFRFUl9DRkcKICAgIGFjdGlvbjogbG9hZGVkLWZpcmV3YWxsLXJ1bGUtdG8KICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogdGFibGUKICAgICAgd2hhdDogZmlyZXdhbGwKICAgIGVjczoKICAgICAgY2F0ZWdvcnk6IGNvbmZpZ3VyYXRpb24KICAgICAgdHlwZTogY2hhbmdlCiAgIyBBVURJVF9GRUFUVVJFX0NIQU5HRSAtIGF1ZGl0IGxvZyBsaXN0aW5nIGZlYXR1cmUgY2hhbmdlcwogIC0gcmVjb3JkX3R5cGVzOiBGRUFUVVJFX0NIQU5HRQogICAgYWN0aW9uOiBjaGFuZ2VkLWF1ZGl0LWZlYXR1cmUKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogZmVhdHVyZQogICAgICB3aGF0OiBzeXN0ZW0KICAgIGVjczoKICAgICAgY2F0ZWdvcnk6IGNvbmZpZ3VyYXRpb24KICAgICAgdHlwZTogY2hhbmdlCiAgIyBBVURJVF9SRVBMQUNFIC0gUmVwbGFjZSBhdWRpdGQgaWYgdGhpcyBwYWNrZXQgdW5hbnN3ZXJkCgogICMgVFRZIGV2ZW50cwoKICAtIHJlY29yZF90eXBlczoKICAgICAgIyBBVURJVF9UVFkgLSBJbnB1dCBvbiBhbiBhZG1pbmlzdHJhdGl2ZSBUVFkKICAgICAgLSBUVFkKICAgICAgIyBBVURJVF9VU0VSX1RUWSAtIE5vbi1JQ0FOT04gVFRZIGlucHV0IG1lYW5pbmcKICAgICAgLSBVU0VSX1RUWQogICAgYWN0aW9uOiB0eXBlZAogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBkYXRhCiAgICAgIHdoYXQ6IGtleXN0cm9rZXMKICAgIGhvdzogW2NvbW0sIGV4ZV0KCiAgIyBQb2xpY3kgZXZlbnRzCgogICMgQVVESVRfQVZDIC0gU0UgTGludXggYXZjIGRlbmlhbCBvciBncmFudCAoc2VsaW51eCkKICAtIHJlY29yZF90eXBlczogQVZDCiAgICBhY3Rpb246IHZpb2xhdGVkLXNlbGludXgtcG9saWN5CiAgICBzdWJqZWN0OgogICAgICBwcmltYXJ5OiBzY29udGV4dAogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiB0Y29udGV4dAogICAgICBzZWNvbmRhcnk6IHRjbGFzcwogICAgaGFzX2ZpZWxkczoKICAgICAgLSBzZXJlc3VsdAogICMgQVVESVRfQVZDIC0gU0UgTGludXggYXZjIGRlbmlhbCBvciBncmFudCAoYXBwYXJtb3IpCiAgLSByZWNvcmRfdHlwZXM6IEFWQwogICAgYWN0aW9uOiB2aW9sYXRlZC1hcHBhcm1vci1wb2xpY3kKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogb3BlcmF0aW9uCiAgICAgIHNlY29uZGFyeTogW3JlcXVlc3RlZF9tYXNrLCBkZW5pZWRfbWFzaywgY2FwbmFtZV0KICAgICAgd2hhdDogcG9saWN5CiAgICBoYXNfZmllbGRzOgogICAgICAtIGFwcGFybW9yCiAgIyBBVURJVF9GU19SRUxBQkVMIC0gRmlsZXN5c3RlbSByZWxhYmVsZWQKICAtIHJlY29yZF90eXBlczogRlNfUkVMQUJFTAogICAgYWN0aW9uOiByZWxhYmVsZWQtZmlsZXN5c3RlbQogICAgb2JqZWN0OgogICAgICB3aGF0OiBtYWMtY29uZmlnCiAgIyBBVURJVF9MQUJFTF9MRVZFTF9DSEFOR0UgLSBPYmplY3QncyBsZXZlbCB3YXMgY2hhbmdlZAogIC0gcmVjb3JkX3R5cGVzOiBMQUJFTF9MRVZFTF9DSEFOR0UKICAgIGFjdGlvbjogbW9kaWZpZWQtbGV2ZWwtb2YKICAgIG9iamVjdDoKICAgICAgcHJpbWFyeTogcHJpbnRlcgogICAgICB3aGF0OiBwcmludGVyCiAgIyBBVURJVF9MQUJFTF9PVkVSUklERSAtIEFkbWluIGlzIG92ZXJyaWRpbmcgYSBsYWJlbAogIC0gcmVjb3JkX3R5cGVzOiBMQUJFTF9PVkVSUklERQogICAgYWN0aW9uOiBvdmVycm9kZS1sYWJlbC1vZgogICAgb2JqZWN0OgogICAgICB3aGF0OiBtYWMtY29uZmlnCiAgIyBBVURJVF9NQUNfQ0hFQ0sgLSBVc2VyIHNwYWNlIE1BQyBkZWNpc2lvbiByZXN1bHRzCiAgLSByZWNvcmRfdHlwZXM6IE1BQ19DSEVDSwogICAgYWN0aW9uOiBtYWMtcGVybWlzc2lvbgogICMgQVVESVRfTUFDX0NPTkZJR19DSEFOR0UgLSBDaGFuZ2VzIHRvIGJvb2xlYW5zCiAgLSByZWNvcmRfdHlwZXM6IE1BQ19DT05GSUdfQ0hBTkdFCiAgICBhY3Rpb246IGNoYW5nZWQtc2VsaW51eC1ib29sZWFuCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGJvb2wKICAgICAgd2hhdDogbWFjLWNvbmZpZwogICAgZWNzOgogICAgICBjYXRlZ29yeTogY29uZmlndXJhdGlvbgogICAgICB0eXBlOiBjaGFuZ2UKICAjIEFVRElUX01BQ19QT0xJQ1lfTE9BRCAtIFBvbGljeSBmaWxlIGxvYWQKICAtIHJlY29yZF90eXBlczogTUFDX1BPTElDWV9MT0FECiAgICBhY3Rpb246IGxvYWRlZC1zZWxpbnV4LXBvbGljeQogICAgb2JqZWN0OgogICAgICB3aGF0OiBtYWMtY29uZmlnCiAgICBlY3M6CiAgICAgIGNhdGVnb3J5OiBjb25maWd1cmF0aW9uCiAgICAgIHR5cGU6IGFjY2VzcwogICMgQVVESVRfTUFDX1NUQVRVUyAtIENoYW5nZWQgZW5mb3JjaW5nLHBlcm1pc3NpdmUsb2ZmCiAgLSByZWNvcmRfdHlwZXM6IE1BQ19TVEFUVVMKICAgIGFjdGlvbjogY2hhbmdlZC1zZWxpbnV4LWVuZm9yY2VtZW50CiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGVuZm9yY2luZwogICAgICB3aGF0OiBtYWMtY29uZmlnCiAgICBlY3M6CiAgICAgIGNhdGVnb3J5OiBjb25maWd1cmF0aW9uCiAgICAgIHR5cGU6IGNoYW5nZQogICMgQVVESVRfVVNFUl9BVkMgLSBVc2VyIHNwYWNlIGF2YyBtZXNzYWdlCiAgLSByZWNvcmRfdHlwZXM6IFVTRVJfQVZDCiAgICBhY3Rpb246IGFjY2Vzcy1wZXJtaXNzaW9uCiAgIyBBVURJVF9VU0VSX01BQ19DT05GSUdfQ0hBTkdFIC0gQ2hhbmdlIG1hZGUgdG8gTUFDIHBvbGljeQogIC0gcmVjb3JkX3R5cGVzOiBVU0VSX01BQ19DT05GSUdfQ0hBTkdFCiAgICBhY3Rpb246IGNoYW5nZWQtbWFjLWNvbmZpZ3VyYXRpb24KICAgIG9iamVjdDoKICAgICAgd2hhdDogbWFjLWNvbmZpZwogICAgZWNzOgogICAgICBjYXRlZ29yeTogY29uZmlndXJhdGlvbgogICAgICB0eXBlOiBjaGFuZ2UKICAjIEFVRElUX1VTRVJfTUFDX1BPTElDWV9MT0FEIC0gVXNlcnNwYyBkYWVtb24gbG9hZGVkIHBvbGljCiAgLSByZWNvcmRfdHlwZXM6IFVTRVJfTUFDX1BPTElDWV9MT0FECiAgICBhY3Rpb246IGxvYWRlZC1tYWMtcG9saWN5CiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IG1hYy1jb25maWcKICAgIGVjczoKICAgICAgY2F0ZWdvcnk6IGNvbmZpZ3VyYXRpb24KICAgICAgdHlwZTogYWNjZXNzCiAgIyBBVURJVF9VU0VSX1NFTElOVVhfRVJSIC0gU0UgTGludXggdXNlciBzcGFjZSBlcnJvcgogIC0gcmVjb3JkX3R5cGVzOiBVU0VSX1NFTElOVVhfRVJSCiAgICBhY3Rpb246IGFjY2Vzcy1lcnJvcgogICMgQVVESVRfU0VDQ09NUCAtIFNlY3VyZSBDb21wdXRpbmcgZXZlbnQKICAtIHJlY29yZF90eXBlczogU0VDQ09NUAogICAgYWN0aW9uOiB2aW9sYXRlZC1zZWNjb21wLXBvbGljeQogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBzeXNjYWxsCiAgICAgIHdoYXQ6IHByb2Nlc3MKICAjIEFVRElUX1NFTElOVVhfRVJSIC0gSW50ZXJuYWwgU0UgTGludXggRXJyb3JzCiAgLSBhY3Rpb246IGNhdXNlZC1tYWMtcG9saWN5LWVycm9yCiAgICBvYmplY3Q6CiAgICAgIHdoYXQ6IHN5c3RlbQogICAgcmVjb3JkX3R5cGVzOiBTRUxJTlVYX0VSUgogICMgQVVESVRfQVBQQVJNT1JfQUxMT1dFRAogICMgQVVESVRfQVBQQVJNT1JfREVOSUVECiAgIyBBVURJVF9BUFBBUk1PUl9FUlJPUgogICMgQVVESVRfQVZDX1BBVEggLSBkZW50cnksIHZmc21vdW50IHBhaXIgZnJvbSBhdmMKICAjIEFVRElUX0FQUEFSTU9SX0FVRElUCiAgIyBBVURJVF9BUFBBUk1PUl9ISU5UCiAgIyBBVURJVF9BUFBBUk1PUl9TVEFUVVMKICAjIEFVRElUX0FQUEFSTU9SX0VSUk9SCiAgIyBBVURJVF9ERVZfQUxMT0MgLSBEZXZpY2Ugd2FzIGFsbG9jYXRlZAogICMgQVVESVRfREVWX0RFQUxMT0MgLSBEZXZpY2Ugd2FzIGRlYWxsb2NhdGVkCiAgIyBBVURJVF9NQUNfVU5MQkxfQUxMT1cgLSBOZXRMYWJlbDogYWxsb3cgdW5sYWJlbGVkIHRyYWZmaWMKICAjIEFVRElUX01BQ19DSVBTT1Y0X0FERCAtIE5ldExhYmVsOiBhZGQgQ0lQU092NCBET0kgZW50cnkKICAjIEFVRElUX01BQ19DSVBTT1Y0X0RFTCAtIE5ldExhYmVsOiBkZWwgQ0lQU092NCBET0kgZW50cnkKICAjIEFVRElUX01BQ19NQVBfQUREIC0gTmV0TGFiZWw6IGFkZCBMU00gZG9tYWluIG1hcHBpbmcKICAjIEFVRElUX01BQ19NQVBfREVMIC0gTmV0TGFiZWw6IGRlbCBMU00gZG9tYWluIG1hcHBpbmcKICAjIEFVRElUX01BQ19JUFNFQ19FVkVOVCAtIEF1ZGl0IGFuIElQU2VjIGV2ZW50CiAgIyBBVURJVF9NQUNfVU5MQkxfU1RDQUREIC0gTmV0TGFiZWw6IGFkZCBhIHN0YXRpYyBsYWJlbAogICMgQVVESVRfTUFDX1VOTEJMX1NUQ0RFTCAtIE5ldExhYmVsOiBkZWwgYSBzdGF0aWMgbGFiZWwKICAjIEFVRElUX01BQ19DQUxJUFNPX0FERCAtIE5ldExhYmVsOiBhZGQgQ0FMSVBTTyBET0kgZW50cnkKICAjIEFVRElUX01BQ19DQUxJUFNPX0RFTCAtIE5ldExhYmVsOiBkZWwgQ0FMSVBTTyBET0kgZW50cnkKICAjIEFVRElUX1VTRVJfTEFCRUxFRF9FWFBPUlQgLSBPYmplY3QgZXhwb3J0ZWQgd2l0aCBsYWJlbAogICMgQVVESVRfVVNFUl9VTkxBQkVMRURfRVhQT1JUIC0gT2JqZWN0IGV4cG9ydGVkIHdpdGhvdXQgbGFiZWwKCiAgIyBDcnlwdG8gZXZlbnRzCgogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIGFjdGlvbjogbmVnb3RpYXRlZC1jcnlwdG8ta2V5CiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGZwCiAgICAgIHNlY29uZGFyeTogW2FkZHIsIGhvc3RuYW1lXQogICAgICB3aGF0OiB1c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogQ1JZUFRPX0tFWV9VU0VSCiAgICBzb3VyY2VfaXA6IFthZGRyXQogICAgZWNzOiAqZWNzLXByb2Nlc3MKICAtIGFjdGlvbjogY3J5cHRvLW9mZmljZXItbG9nZ2VkLWluCiAgICByZWNvcmRfdHlwZXM6IENSWVBUT19MT0dJTgogIC0gYWN0aW9uOiBjcnlwdG8tb2ZmaWNlci1sb2dnZWQtb3V0CiAgICByZWNvcmRfdHlwZXM6IENSWVBUT19MT0dPVVQKICAgIGVjczogKmVjcy1wcm9jZXNzCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgYWN0aW9uOiBzdGFydGVkLWNyeXB0by1zZXNzaW9uCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGFkZHIKICAgICAgc2Vjb25kYXJ5OiBbcnBvcnRdCiAgICByZWNvcmRfdHlwZXM6IENSWVBUT19TRVNTSU9OCiAgICBzb3VyY2VfaXA6IFthZGRyXQogICAgZWNzOiAqZWNzLXByb2Nlc3MKICAtIGFjdGlvbjogYWNjZXNzLXJlc3VsdAogICAgcmVjb3JkX3R5cGVzOiBEQUNfQ0hFQ0sKCiAgIyBBbm9tYWxpZXMKCiAgIyBBVURJVF9BTk9NX0FCRU5EIC0gUHJvY2VzcyBlbmRlZCBhYm5vcm1hbGx5CiAgLSByZWNvcmRfdHlwZXM6IEFOT01fQUJFTkQKICAgIGFjdGlvbjogY3Jhc2hlZC1wcm9ncmFtCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IFtjb21tLCBleGVdCiAgICAgIHNlY29uZGFyeTogcGlkCiAgICAgIHdoYXQ6IHByb2Nlc3MKICAgIGhvdzogc2lnCiAgICBlY3M6CiAgICAgICMgY29uc2lkZXIgYWRkaW5nIGFuIGFub21hbHkgY2F0ZWdvcnkgd2hlbiB3ZSBpbnRyb2R1Y2UKICAgICAgIyB0byBFQ1MKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBlbmQKICAjIEFVRElUX0FOT01fRVhFQyAtIEV4ZWN1dGlvbiBvZiBmaWxlCiAgLSByZWNvcmRfdHlwZXM6IEFOT01fRVhFQwogICAgYWN0aW9uOiBhdHRlbXB0ZWQtZXhlY3V0aW9uLW9mLWZvcmJpZGRlbi1wcm9ncmFtCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGNtZAogICAgICB3aGF0OiBwcm9jZXNzCiAgICBob3c6IHRlcm1pbmFsCiAgICBlY3M6CiAgICAgICMgY29uc2lkZXIgYWRkaW5nIGFuIGFub21hbHkgY2F0ZWdvcnkgd2hlbiB3ZSBpbnRyb2R1Y2UKICAgICAgIyB0byBFQ1MKICAgICAgPDw6ICplY3MtcHJvY2VzcwogICAgICB0eXBlOiBzdGFydAogICMgQVVESVRfQU5PTV9MSU5LIC0gU3VzcGljaW91cyB1c2Ugb2YgZmlsZSBsaW5rcwogIC0gcmVjb3JkX3R5cGVzOiBBTk9NX0xJTksKICAgIGFjdGlvbjogdXNlZC1zdXNwaWNpb3VzLWxpbmsKICAjIEFVRElUX0FOT01fTE9HSU5fRkFJTFVSRVMgLSBGYWlsZWQgbG9naW4gbGltaXQgcmVhY2hlZAogIC0gPDw6ICptYWNyby11c2VyLXNlc3Npb24KICAgIHJlY29yZF90eXBlczogQU5PTV9MT0dJTl9GQUlMVVJFUwogICAgYWN0aW9uOiBmYWlsZWQtbG9nLWluLXRvby1tYW55LXRpbWVzLXRvCiAgIyBBVURJVF9BTk9NX0xPR0lOX0xPQ0FUSU9OIC0gTG9naW4gZnJvbSBmb3JiaWRkZW4gbG9jYXRpb24KICAtIDw8OiAqbWFjcm8tdXNlci1zZXNzaW9uCiAgICByZWNvcmRfdHlwZXM6IEFOT01fTE9HSU5fTE9DQVRJT04KICAgIGFjdGlvbjogYXR0ZW1wdGVkLWxvZy1pbi1mcm9tLXVudXN1YWwtcGxhY2UtdG8KICAjIEFVRElUX0FOT01fTE9HSU5fU0VTU0lPTlMgLSBNYXggY29uY3VycmVudCBzZXNzaW9ucyByZWFjaGVkCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBBTk9NX0xPR0lOX1NFU1NJT05TCiAgICBhY3Rpb246IG9wZW5lZC10b28tbWFueS1zZXNzaW9ucy10bwogICMgQVVESVRfQU5PTV9MT0dJTl9USU1FIC0gTG9naW4gYXR0ZW1wdGVkIGF0IGJhZCB0aW1lCiAgLSA8PDogKm1hY3JvLXVzZXItc2Vzc2lvbgogICAgcmVjb3JkX3R5cGVzOiBBTk9NX0xPR0lOX1RJTUUKICAgIGFjdGlvbjogYXR0ZW1wdGVkLWxvZy1pbi1kdXJpbmctdW51c3VhbC1ob3VyLXRvCiAgIyBBVURJVF9BTk9NX1BST01JU0NVT1VTIC0gRGV2aWNlIGNoYW5nZWQgcHJvbWlzY3VvdXMgbW9kZQogIC0gcmVjb3JkX3R5cGVzOiBBTk9NX1BST01JU0NVT1VTCiAgICBhY3Rpb246IGNoYW5nZWQtcHJvbWlzY3VvdXMtbW9kZS1vbi1kZXZpY2UgIyBDb3VsZCBiZSBlbnRlcmVkIG9yIGV4aXRlZCBiYXNlZCBvbiBwcm9tIGZpZWxkLgogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBkZXYKICAgICAgd2hhdDogbmV0d29yay1kZXZpY2UKICAjIEFVRElUX0FOT01fUkJBQ19JTlRFR1JJVFlfRkFJTCAtIFJCQUMgZmlsZSBpbnRlZ3JpdHkgZmFpbHVyZQogIC0gcmVjb3JkX3R5cGVzOiBBTk9NX1JCQUNfSU5URUdSSVRZX0ZBSUwKICAgIGFjdGlvbjogdGVzdGVkLWZpbGUtc3lzdGVtLWludGVncml0eS1vZgogICAgb2JqZWN0OgogICAgICBwcmltYXJ5OiBob3N0bmFtZQogICAgICB3aGF0OiBmaWxlc3lzdGVtCiAgIyBBVURJVF9BTk9NX0xPR0lOX0FDQ1QgLSBMb2dpbiBhdHRlbXB0ZWQgdG8gd2F0Y2hlZCBhY2N0CiAgIyBBVURJVF9BTk9NX01BWF9EQUMgLSBNYXggREFDIGZhaWx1cmVzIHJlYWNoZWQKICAjIEFVRElUX0FOT01fTUFYX01BQyAtIE1heCBNQUMgZmFpbHVyZXMgcmVhY2hlZAogICMgQVVESVRfQU5PTV9BTVRVX0ZBSUwgLSBBTVRVIGZhaWx1cmUKICAjIEFVRElUX0FOT01fUkJBQ19GQUlMIC0gUkJBQyBzZWxmIHRlc3QgZmFpbHVyZQogICMgQVVESVRfQU5PTV9DUllQVE9fRkFJTCAtIENyeXB0byBzeXN0ZW0gdGVzdCBmYWlsdXJlCiAgIyBBVURJVF9BTk9NX01LX0VYRSAtIE1ha2UgYW4gZXhlY3V0YWJsZQogICMgQVVESVRfQU5PTV9BQ0NFU1NfRlMgLSBBY2Nlc3Mgb2YgZmlsZSBvciBkaXIKICAjIEFVRElUX0FOT01fQUREX0FDQ1QgLSBBZGRpbmcgYW4gYWNjdAogICMgQVVESVRfQU5PTV9ERUxfQUNDVCAtIERlbGV0aW5nIGFuIGFjY3QKICAjIEFVRElUX0FOT01fTU9EX0FDQ1QgLSBDaGFuZ2luZyBhbiBhY2N0CiAgIyBBVURJVF9BTk9NX1JPT1RfVFJBTlMgLSBVc2VyIGJlY2FtZSByb290CiAgIyBBVURJVF9BTk9NX0xPR0lOX1NFUlZJQ0UgLSBTZXJ2aWNlIGFjY3QgYXR0ZW1wdGVkIGxvZ2luCgogICMgQW5vbWFseSByZXNwb25zZXMKCiAgIyBBVURJVF9SRVNQX0FOT01BTFkgLSBBbm9tYWx5IG5vdCByZWFjdGVkIHRvCiAgIyBBVURJVF9SRVNQX0FMRVJUIC0gQWxlcnQgZW1haWwgd2FzIHNlbnQKICAjIEFVRElUX1JFU1BfS0lMTF9QUk9DIC0gS2lsbCBwcm9ncmFtCiAgIyBBVURJVF9SRVNQX1RFUk1fQUNDRVNTIC0gVGVybWluYXRlIHNlc3Npb24KICAjIEFVRElUX1JFU1BfQUNDVF9SRU1PVEUgLSBBY2N0IGxvY2tlZCBmcm9tIHJlbW90ZSBhY2Nlc3MKICAjIEFVRElUX1JFU1BfQUNDVF9MT0NLX1RJTUVEIC0gVXNlciBhY2N0IGxvY2tlZCBmb3IgdGltZQogICMgQVVESVRfUkVTUF9BQ0NUX1VOTE9DS19USU1FRCAtIFVzZXIgYWNjdCB1bmxvY2tlZCBmcm9tIHRpbWUKICAjIEFVRElUX1JFU1BfQUNDVF9MT0NLIC0gVXNlciBhY2N0IHdhcyBsb2NrZWQKICAjIEFVRElUX1JFU1BfVEVSTV9MT0NLIC0gVGVybWluYWwgd2FzIGxvY2tlZAogICMgQVVESVRfUkVTUF9TRUJPT0wgLSBTZXQgYW4gU0UgTGludXggYm9vbGVhbgogICMgQVVESVRfUkVTUF9FWEVDIC0gRXhlY3V0ZSBhIHNjcmlwdAogICMgQVVESVRfUkVTUF9TSU5HTEUgLSBHbyB0byBzaW5nbGUgdXNlciBtb2RlCiAgIyBBVURJVF9SRVNQX0hBTFQgLSB0YWtlIHRoZSBzeXN0ZW0gZG93bgogICMgQVVESVRfUkVTUF9PUklHSU5fQkxPQ0sgLSBBZGRyZXNzIGJsb2NrZWQgYnkgaXB0YWJsZXMKICAjIEFVRElUX1JFU1BfT1JJR0lOX0JMT0NLX1RJTUVEIC0gQWRkcmVzcyBibG9ja2VkIGZvciB0aW1lCgogICMgQXVkaXQgcnVsZSBldmVudHMKCiAgIyBBVURJVF9TWVNDQUxMIC0gU3lzY2FsbCBldmVudAogICMgQVVESVRfUEFUSCAtIEZpbGVuYW1lIHBhdGggaW5mb3JtYXRpb24KICAjIEFVRElUX0lQQyAtIElQQyByZWNvcmQKICAjIEFVRElUX1NPQ0tFVENBTEwgLSBzeXNfc29ja2V0Y2FsbCBhcmd1bWVudHMKICAjIEFVRElUX1NPQ0tBRERSIC0gc29ja2FkZHIgY29waWVkIGFzIHN5c2NhbGwgYXJnCiAgIyBBVURJVF9DV0QgLSBDdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5CiAgIyBBVURJVF9FWEVDVkUgLSBleGVjdmUgYXJndW1lbnRzCiAgIyBBVURJVF9JUENfU0VUX1BFUk0gLSBJUEMgbmV3IHBlcm1pc3Npb25zIHJlY29yZCB0eXBlCiAgIyBBVURJVF9NUV9PUEVOIC0gUE9TSVggTVEgb3BlbiByZWNvcmQgdHlwZQogICMgQVVESVRfTVFfU0VORFJFQ1YtIFBPU0lYIE1RIHNlbmQvcmVjZWl2ZSByZWNvcmQgdHlwZQogICMgQVVESVRfTVFfTk9USUZZIC0gUE9TSVggTVEgbm90aWZ5IHJlY29yZCB0eXBlCiAgIyBBVURJVF9NUV9HRVRTRVRBVFRSIC0gUE9TSVggTVEgZ2V0L3NldCBhdHRyaWJ1dGUgcmVjb3JkIHR5cGUKICAjIEFVRElUX0ZEX1BBSVIgLSBhdWRpdCByZWNvcmQgZm9yIHBpcGUvc29ja2V0cGFpcgogICMgQVVESVRfT0JKX1BJRCAtIHB0cmFjZSB0YXJnZXQKICAjIEFVRElUX0JQUk1fRkNBUFMgLSBJbmZvcm1hdGlvbiBhYm91dCBmY2FwcyBpbmNyZWFzaW5nIHBlcm1zCiAgIyBBVURJVF9DQVBTRVQgLSBSZWNvcmQgc2hvd2luZyBhcmd1bWVudCB0byBzeXNfY2Fwc2V0CiAgIyBBVURJVF9NTUFQIC0gUmVjb3JkIHNob3dpbmcgZGVzY3JpcHRvciBhbmQgZmxhZ3MgaW4gbW1hcAogICMgQVVESVRfTkVURklMVEVSX1BLVCAtIFBhY2tldHMgdHJhdmVyc2luZyBuZXRmaWx0ZXIgY2hhaW5zCgogICMgSW50ZWdyaXR5IGNoZWNrcwoKICAjIEFVRElUX0lOVEVHUklUWV9EQVRBIC0gRGF0YSBpbnRlZ3JpdHkgdmVyaWZpY2F0aW9uCiAgIyBBVURJVF9JTlRFR1JJVFlfTUVUQURBVEEgLSBNZXRhZGF0YSBpbnRlZ3JpdHkgdmVyaWZpY2F0aW9uCiAgIyBBVURJVF9JTlRFR1JJVFlfU1RBVFVTIC0gSW50ZWdyaXR5IGVuYWJsZSBzdGF0dXMKICAjIEFVRElUX0lOVEVHUklUWV9IQVNIIC0gSW50ZWdyaXR5IEhBU0ggdHlwZQogICMgQVVESVRfSU5URUdSSVRZX1BDUiAtIFBDUiBpbnZhbGlkYXRpb24gbXNncwogICMgQVVESVRfSU5URUdSSVRZX1JVTEUgLSBQb2xpY3kgcnVsZQoKICAjIFZhcmlvdXMKCiAgIyBBVURJVF9VU0VSIC0gTWVzc2FnZSBmcm9tIHVzZXJzcGFjZSAtLSBkZXByZWNhdGVkCiAgLSByZWNvcmRfdHlwZXM6IFVTRVIKICAgIGFjdGlvbjogc2VudC1tZXNzYWdlCiAgICBvYmplY3Q6CiAgICAgIHByaW1hcnk6IGFkZHIK")
 		assets["normalizationData"] = value
 	}
 


Test patch:
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 ec6934e..2612dc2 100644
--- a/aucoalesce/testdata/rhel-7-linux-3.10.0.json.golden
+++ b/aucoalesce/testdata/rhel-7-linux-3.10.0.json.golden
@@ -40,7 +40,8 @@
       "ecs": {
         "event": {
           "category": [
-            "process"
+            "process",
+            "configuration"
           ],
           "type": [
             "change"
@@ -87,7 +88,8 @@
       "ecs": {
         "event": {
           "category": [
-            "process"
+            "process",
+            "configuration"
           ],
           "type": [
             "change"
@@ -140,7 +142,7 @@
         "ip": "96.241.146.97"
       },
       "network": {
-        "direction": "inbound"
+        "direction": "ingress"
       },
       "data": {
         "fp": "6d:a3:7f:ed:de:4a:79:f2:aa:49:ec:d1:75:36:97:a3",
@@ -204,7 +206,7 @@
         "ip": "96.241.146.97"
       },
       "network": {
-        "direction": "inbound"
+        "direction": "ingress"
       },
       "data": {
         "cipher": "chacha20-poly1305@openssh.com",
@@ -324,7 +326,7 @@
         "ip": "46.160.144.250"
       },
       "network": {
-        "direction": "inbound"
+        "direction": "ingress"
       },
       "data": {
         "acct": "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 31d5d7f..4e3ab55 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
@@ -104,7 +104,8 @@
       "ecs": {
         "event": {
           "category": [
-            "process"
+            "process",
+            "configuration"
           ],
           "type": [
             "change"
@@ -149,7 +150,8 @@
       "ecs": {
         "event": {
           "category": [
-            "process"
+            "process",
+            "configuration"
           ],
           "type": [
             "change"
@@ -319,9 +321,11 @@
       "ecs": {
         "event": {
           "category": [
+            "configuration",
             "process"
           ],
           "type": [
+            "change",
             "info"
           ]
         }
@@ -462,7 +466,7 @@
         "ip": "179.38.151.221"
       },
       "network": {
-        "direction": "inbound"
+        "direction": "ingress"
       },
       "data": {
         "acct": "(invalid user)",
@@ -517,7 +521,7 @@
         "ip": "72.83.230.100"
       },
       "network": {
-        "direction": "inbound"
+        "direction": "ingress"
       },
       "data": {
         "hostname": "72.83.230.100",
@@ -573,7 +577,7 @@
         "ip": "72.83.230.100"
       },
       "network": {
-        "direction": "inbound"
+        "direction": "ingress"
       },
       "data": {
         "acct": "andrew_kroh",
@@ -643,7 +647,7 @@
         "port": "58140"
       },
       "network": {
-        "direction": "inbound"
+        "direction": "ingress"
       },
       "data": {
         "a0": "3",
@@ -786,7 +790,7 @@
         "port": "80"
       },
       "network": {
-        "direction": "outbound"
+        "direction": "egress"
       },
       "data": {
         "a0": "5",
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 25e333f..8f85928 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
@@ -494,7 +494,7 @@
         "ip": "185.56.82.22"
       },
       "network": {
-        "direction": "inbound"
+        "direction": "ingress"
       },
       "data": {
         "hostname": "185.56.82.22",
@@ -549,7 +549,7 @@
         "ip": "31.207.47.36"
       },
       "network": {
-        "direction": "inbound"
+        "direction": "ingress"
       },
       "data": {
         "acct": "(invalid user)",