diff --git a/pkg/deploy/assets/gateway-production.json b/pkg/deploy/assets/gateway-production.json index 13d461835b4..3d01355f5a8 100644 --- a/pkg/deploy/assets/gateway-production.json +++ b/pkg/deploy/assets/gateway-production.json @@ -308,7 +308,7 @@ "autoUpgradeMinorVersion": true, "settings": {}, "protectedSettings": { - "script": "[base64(concat(base64ToString('c2V0IC1leAoK'),'ACRRESOURCEID=$(base64 -d \u003c\u003c\u003c''',base64(parameters('acrResourceId')),''')\n','AZURECLOUDNAME=$(base64 -d \u003c\u003c\u003c''',base64(parameters('azureCloudName')),''')\n','AZURESECPACKQUALYSURL=$(base64 -d \u003c\u003c\u003c''',base64(parameters('azureSecPackQualysUrl')),''')\n','AZURESECPACKVSATENANTID=$(base64 -d \u003c\u003c\u003c''',base64(parameters('azureSecPackVSATenantId')),''')\n','DATABASEACCOUNTNAME=$(base64 -d \u003c\u003c\u003c''',base64(parameters('databaseAccountName')),''')\n','FLUENTBITIMAGE=$(base64 -d \u003c\u003c\u003c''',base64(parameters('fluentbitImage')),''')\n','GATEWAYDOMAINS=$(base64 -d \u003c\u003c\u003c''',base64(parameters('gatewayDomains')),''')\n','GATEWAYFEATURES=$(base64 -d \u003c\u003c\u003c''',base64(parameters('gatewayFeatures')),''')\n','GATEWAYLOGLEVEL=$(base64 -d \u003c\u003c\u003c''',base64(parameters('gatewayLogLevel')),''')\n','GATEWAYMDSDCONFIGVERSION=$(base64 -d \u003c\u003c\u003c''',base64(parameters('gatewayMdsdConfigVersion')),''')\n','KEYVAULTDNSSUFFIX=$(base64 -d \u003c\u003c\u003c''',base64(parameters('keyvaultDNSSuffix')),''')\n','KEYVAULTPREFIX=$(base64 -d \u003c\u003c\u003c''',base64(parameters('keyvaultPrefix')),''')\n','MDMFRONTENDURL=$(base64 -d \u003c\u003c\u003c''',base64(parameters('mdmFrontendUrl')),''')\n','MDSDENVIRONMENT=$(base64 -d \u003c\u003c\u003c''',base64(parameters('mdsdEnvironment')),''')\n','RPIMAGE=$(base64 -d \u003c\u003c\u003c''',base64(parameters('rpImage')),''')\n','RPMDMACCOUNT=$(base64 -d \u003c\u003c\u003c''',base64(parameters('rpMdmAccount')),''')\n','RPMDSDACCOUNT=$(base64 -d \u003c\u003c\u003c''',base64(parameters('rpMdsdAccount')),''')\n','RPMDSDNAMESPACE=$(base64 -d \u003c\u003c\u003c''',base64(parameters('rpMdsdNamespace')),''')\n','MDMIMAGE=''/geneva/distroless/mdm:2.202602101834.0-20260211-1@sha256:a581e89744933f30a9f8e2724906fde02e713836fce76afefec7092daa01c064''\n','LOCATION=$(base64 -d \u003c\u003c\u003c''',base64(resourceGroup().location),''')\n','SUBSCRIPTIONID=$(base64 -d \u003c\u003c\u003c''',base64(subscription().subscriptionId),''')\n','RESOURCEGROUPNAME=$(base64 -d \u003c\u003c\u003c''',base64(resourceGroup().name),''')\n','\n',base64ToString('IyEvYmluL2Jhc2gKIyBJbnRlcm5hbCBGdW5jdGlvbnMgYW5kIENvbnN0YW50cwoKIyBlbXB0eV9zdHIgLSBjb25zdGFudDsgdXNlZCBieSBmdW5jdGlvbnMgZm9yIG9wdGlvbmFsIG5hbWVyZWYgc3RyaW5nIGFyZ3VlbWVudHMKIyBlbXB0eV9zdHI9IiIKIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CmRlY2xhcmUgLXIgZW1wdHlfc3RyPSIiCgojIHJvbGVfZ2F0ZXdheSAtIGNvbnN0YW50OyBJcyB1c2VkIHRvIGRldGVybWluZSB3aGljaCBWTVNTIGlzIGJlaW5nIGJvb3RzdHJhcHBlZAojIHRoaXMgc2hvdWxkIGJlIHJlZmVyZW5jZWQgYnkgc2NyaXB0cyBzb3VyY2luZyB0aGlzIGZpbGUKIyByb2xlX2dhdGV3YXk9ImdhdGV3YXkiCmRlY2xhcmUgLXIgcm9sZV9nYXRld2F5PSJnYXRld2F5IgojIHJvbGVfcnAgLSBjb25zdGFudDsgSXMgdXNlZCB0byBkZXRlcm1pbmUgd2hpY2ggVk1TUyBpcyBiZWluZyBib290c3RyYXBwZWQKIyB0aGlzIHNob3VsZCBiZSByZWZlcmVuY2VkIGJ5IHNjcmlwdHMgc291cmNpbmcgdGhpcyBmaWxlCiMgcm9sZV9ycD0icnAiCmRlY2xhcmUgLXIgcm9sZV9ycD0icnAiCiMgcm9sZV9kZXZwcm94eSAtIGNvbnN0YW50OyBJcyB1c2VkIHRvIGRldGVybWluZSB3aGljaCBWTVNTIGlzIGJlaW5nIGJvb3RzdHJhcHBlZAojIHJvbGVfZGV2cHJveHk9ImRldnByb3h5IgpkZWNsYXJlIC1yIHJvbGVfZGV2cHJveHk9ImRldnByb3h5IgojIHVzX2dvdl9jbG91ZCAtIGNvbnN0YW50OyBJcyB0aGUgbmFtZSBvZiBBWlVSRUNMT1VETkFNRSBmb3IgVVMgZ292ZXJubWVudCBjbG91ZAojIHVzX2dvdl9jbG91ZD0iQXp1cmVVU0dvdmVybm1lbnQiCmRlY2xhcmUgLXIgdXNfZ292X2Nsb3VkPSJBenVyZVVTR292ZXJubWVudCIKCiMgbG9nIGlzIGEgd3JhcHBlciBmb3IgZWNobyB0aGF0IGluY2x1ZGVzIHRoZSBmdW5jdGlvbiBuYW1lCiMgQXJncwojIDEpIG1zZyAtIHN0cmluZwojIDIpIHN0YWNrX2xldmVsIC0gaW50OyBvcHRpb25hbCwgZGVmYXVsdHMgdG8gdGhlIGZ1bmN0aW9uIGF0IHRoZSBib3R0b20gb2YgdGhlIGNhbGwgc3RhY2sKbG9nKCkgewogICAgbG9jYWwgLXIgbXNnPSIkezE6LSJsb2cgbWVzc2FnZSBpcyBlbXB0eSJ9IgogICAgbG9jYWwgLXIgc3RhY2tfbGV2ZWw9IiR7MjotMX0iCiAgICBlY2hvICIke0ZVTkNOQU1FWyR7c3RhY2tfbGV2ZWx9XX06ICR7bXNnfSIKfQoKIyBhYm9ydCBpcyBhIHdyYXBwZXIgZm9yIGxvZyB0aGF0IGV4aXRzIHdpdGggYW4gZXJyb3IgY29kZQphYm9ydCgpIHsKICAgIGxvY2FsIC1yaSBvcmlnaW5fc3RhY2tsZXZlbD0yCiAgICBsb2cgIiR7MX0iICIkb3JpZ2luX3N0YWNrbGV2ZWwiCiAgICBsb2cgIkV4aXRpbmciCiAgICBleGl0IDEKfQoKIyB3cml0ZV9maWxlCiMgQXJncwojIDEpIGZpbGVuYW1lIC0gc3RyaW5nCiMgMikgZmlsZV9jb250ZW50cyAtIHN0cmluZwojIDMpIGNsb2JiZXIgLSBib29sZWFuOyBvcHRpb25hbCAtIGRlZmF1bHRzIHRvIGZhbHNlCndyaXRlX2ZpbGUoKSB7CiAgICBsb2NhbCAtbiBmaWxlbmFtZT0iJDEiCiAgICBsb2NhbCAtbiBmaWxlX2NvbnRlbnRzPSIkMiIKICAgIGxvY2FsIC1yIGNsb2JiZXI9IiR7MzotZmFsc2V9IgoKICAgIGlmICRjbG9iYmVyOyB0aGVuCiAgICAgICAgbG9nICJPdmVyd3JpdGluZyBmaWxlICRmaWxlbmFtZSIKICAgICAgICBlY2hvICIkZmlsZV9jb250ZW50cyIgPiAiJGZpbGVuYW1lIgogICAgZWxzZQogICAgICAgIGxvZyAiQXBwZW5kaW5nIHRvICRmaWxlbmFtZSIKICAgICAgICBlY2hvICIkZmlsZV9jb250ZW50cyIgPj4gIiRmaWxlbmFtZSIKICAgIGZpCn0KCiMgcmV0cnkgQWRkaW5nIHJldHJ5IGxvZ2ljIHRvIHl1bSBjb21tYW5kcyBpbiBvcmRlciB0byBhdm9pZCBzdGFsbGluZyBvdXQgb24gcmVzb3VyY2UgbG9ja3MKIyBhcmdzOgojIDEpIGNtZF9yZXRyeSAtIG5hbWVyZWYsIGFycmF5OyBDb21tYW5kIGFuZCBhcmd1ZW1lbnQocykgdG8gcmV0cnkKIyAyKSB3YWl0X3RpbWUgLSBuYW1lcmVmLCBpbnRlZ2VyOyBUaW1lIHRvIHdhaXQgYmVmb3JlIHJldHJ5aW5nIGNvbW1hbmQKIyAzKSByZXRyaWVzIC0gaW50ZWdlciwgb3B0aW9uYWw7IEFtbW91bnQgb2YgdGltZXMgdG8gcmV0cnkgY29tbWFuZCwgZGVmYXVsdHMgdG8gNQpyZXRyeSgpIHsKICAgIGxvY2FsIC1uIGNtZF9yZXRyeT0iJDEiCiAgICBsb2NhbCAtbiB3YWl0X3RpbWU9IiQyIgogICAgbG9jYWwgLXJpIHJldHJpZXM9IiR7MzotNX0iCgogICAgCiAgICBmb3IgYXR0ZW1wdCBpbiAkKHNlcSAxICRyZXRyaWVzKTsgZG8KICAgICAgICBsb2cgImF0dGVtcHQgIyR7YXR0ZW1wdH0gLSAke0ZVTkNOQU1FWzJdfSIKICAgICAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwNjgKICAgICAgICAke2NtZF9yZXRyeVtAXX0gJgoKICAgICAgICB3YWl0IC1mICQhICYmIHJldHVybiAwCiAgICAgICAgc2xlZXAgIiR3YWl0X3RpbWUiCiAgICBkb25lCgogICAgYWJvcnQgIiR7Y21kX3JldHJ5WypdfSBmYWlsZWQgYWZ0ZXIgIyRyZXRyaWVzIGF0dGVtcHRzIgp9CgojIHZlcmlmeV9yb2xlCiMgYXJnczoKIyAxKSB0ZXN0X3JvbGUgLSBuYW1lcmVmOyByb2xlIGJlaW5nIHZlcmlmaWVkCnZlcmlmeV9yb2xlKCkgewogICAgbG9jYWwgLW4gdGVzdF9yb2xlPSIkMSIKCiAgICBhbGxvd2VkX3JvbGVzX2dsb2I9Iigkcm9sZV9ycHwkcm9sZV9nYXRld2F5fCRyb2xlX2RldnByb3h5KSIKICAgIGlmIFtbICIkdGVzdF9yb2xlIiA9fiAkYWxsb3dlZF9yb2xlc19nbG9iIF1dOyB0aGVuCiAgICAgICAgbG9nICJWZXJpZmllZCByb2xlIFwiJHRlc3Rfcm9sZVwiIgogICAgZWxzZQogICAgICAgIGFib3J0ICJmYWlsZWQgdG8gdmVyaWZ5IHJvbGUsIHJvbGUgXCIke3Rlc3Rfcm9sZX1cIiBub3QgaW4gXCIke2FsbG93ZWRfcm9sZXNfZ2xvYn1cIiIKICAgIGZpCn0KCiMgZ2V0X2tleXZhdWx0X3N1ZmZpeAojIGFyZ3M6CiMgMSkgcmwgLSBuYW1lcmVmLCBzdHJpbmc7IHJvbGUgdG8gZ2V0IHNob3J0IHJvbGUgZm9yCiMgMikga3Zfc3VmZml4IC0gbmFtZXJlZiwgc3RyaW5nOyBzaG9ydCByb2xlIHdpbGwgYmUgYXNzaWduZWQgdG8gdGhpcyBuYW1lcmVmCiMgMykgc2VjX3ByZWZpeCAtIG5hbWVyZWYsIHN0cmluZzsga2V5dmF1bHQgY2VydGlmaWNhdGUgcHJlZml4IHdpbGwgYmUgYXNzaWduZWQgdG8gdGhpcyBuYW1lcmVmCmdldF9rZXl2YXVsdF9zdWZmaXgoKSB7CiAgICBsb2NhbCAtbiBybD0iJDEiCiAgICBsb2NhbCAtbiBrdl9zdWZmaXg9IiQyIgogICAgbG9jYWwgLW4gc2VjX3ByZWZpeD0iJDMiCgogICAgbG9jYWwgLXIga2V5dmF1bHRfc3VmZml4X3JwPSJzdmMiCiAgICBsb2NhbCAtciBrZXl2YXVsdF9wcmVmaXhfZ2F0ZXdheT0iZ3d5IgoKICAgIGNhc2UgIiRybCIgaW4KICAgICAgICAiJHJvbGVfZ2F0ZXdheSIpCiAgICAgICAgICAgIGt2X3N1ZmZpeD0iJGtleXZhdWx0X3ByZWZpeF9nYXRld2F5IgogICAgICAgICAgICBzZWNfcHJlZml4PSIka2V5dmF1bHRfcHJlZml4X2dhdGV3YXkiCiAgICAgICAgICAgIDs7CiAgICAgICAgIiRyb2xlX3JwIikKICAgICAgICAgICAga3Zfc3VmZml4PSIka2V5dmF1bHRfc3VmZml4X3JwIgogICAgICAgICAgICBzZWNfcHJlZml4PSIkcm9sZV9ycCIKICAgICAgICAgICAgOzsKICAgICAgICAqKQogICAgICAgICAgICBhYm9ydCAidW5rb3duIHJvbGUgJHJsIgogICAgICAgICAgICA7OwogICAgZXNhYwp9CgojIHJlYm9vdF92bSByZXN0b3JlcyBjYWxscyBzaHV0ZG93biAtciBpbiBhIHN1YnNoZWxsCiMgUmVib290cyBzaG91bGQgc2NoZWR1bGVkIGFmdGVyIGFsbCBWTSBleHRlbnNpb25zIGhhdmUgaGFkIHRpbWUgdG8gY29tcGxldGUKIyBSZWZlcmVuY2U6IGh0dHBzOi8vbGVhcm4ubWljcm9zb2Z0LmNvbS9lbi11cy9henVyZS92aXJ0dWFsLW1hY2hpbmVzL2V4dGVuc2lvbnMvY3VzdG9tLXNjcmlwdC1saW51eCN0aXBzCnJlYm9vdF92bSgpIHsKICAgIGxvZyAic3RhcnRpbmciCgogICAgKHNodXRkb3duIC1yIG5vdyAmKQp9CiMhL2Jpbi9iYXNoCiMgUmVwb3NpdG9yeSBhbmQgcGFja2FnZSBtYW5hZ2VtZW50IHJlbGF0ZWQgZnVuY3Rpb25zCgpjb25maWd1cmVfcmVwb19tYXJpbmVyX2V4dGVuZGVkKCkgewogICAgbG9jYWwgLXIgZXh0ZW5kZWRfcmVwb19jb25maWc9Imh0dHBzOi8vcGFja2FnZXMubWljcm9zb2Z0LmNvbS9jYmwtbWFyaW5lci8yLjAvcHJvZC9leHRlbmRlZC94ODZfNjQvY29uZmlnLnJlcG8iCiAgICBjdXJsIC1zU0wgIiRleHRlbmRlZF9yZXBvX2NvbmZpZyIgLW8gL2V0Yy95dW0ucmVwb3MuZC9tYXJpbmVyLWV4dGVuZGVkLnJlcG8KCiAgICBsb2NhbCAtciByZXBvX25hbWU9ImNibC1tYXJpbmVyMi4wcHJvZGV4dGVuZGVkeDg2XzY0IgoKICAgIGxvY2FsIC1yYSBjbWQ9KAogICAgICAgIGRuZgogICAgICAgIHVwZGF0ZQogICAgICAgIC15CiAgICAgICAgLS1lbmFibGVyZXBvPSIkcmVwb19uYW1lIgogICAgKQoKICAgIGxvZyAiRW5hYmxpbmcgcmVwbyAkcmVwb19uYW1lIgogICAgcmV0cnkgY21kICIkMSIgIiR7MjotfSIKfQoKIyBjb25maWd1cmVfcnBtX3JlcG9zCiMgTmV3IHJlcG9zaXRvcmllcyBzaG91bGQgYmUgYWRkZWQgaW4gdGhlaXIgb3duIGZ1bmN0aW9ucywgYW5kIGNhbGxlZCBoZXJlCiMgYXJnczoKIyAxKSB3YWl0X3RpbWUgLSBuYW1lcmVmLCBpbnRlZ2VyOyBUaW1lIHRvIHdhaXQgYmVmb3JlIHJldHJ5aW5nIGNvbW1hbmQKIyAyKSByZXRyaWVzIC0gaW50ZWdlciwgb3B0aW9uYWw7IEFtb3VudCBvZiB0aW1lcyB0byByZXRyeSBjb21tYW5kLCBkZWZhdWx0cyB0byA1CmNvbmZpZ3VyZV9ycG1fcmVwb3MoKSB7CiAgICBsb2cgInN0YXJ0aW5nIgoKICAgIGNvbmZpZ3VyZV9yZXBvX21hcmluZXJfZXh0ZW5kZWQgIiQxIiAiJHsyOi0xfSIKfQoKIyBkbmZfaW5zdGFsbF9wa2dzCiMgYXJnczoKIyAxKSBwa2dzIC0gbmFtZXJlZiwgc3RyaW5nIGFycmF5OyBQYWNrYWdlcyB0byBiZSBpbnN0YWxsZWQKIyAyKSB3YWl0X3RpbWUgLSBuYW1lcmVmLCBpbnRlZ2VyOyBUaW1lIHRvIHdhaXQgYmVmb3JlIHJldHJ5aW5nIGNvbW1hbmQKIyAzKSByZXRyaWVzIC0gaW50ZWdlciwgb3B0aW9uYWw7IEFtb3VudCBvZiB0aW1lcyB0byByZXRyeSBjb21tYW5kLCBkZWZhdWx0cyB0byA1CmRuZl9pbnN0YWxsX3BrZ3MoKSB7CiAgICBsb2NhbCAtbiBwa2dzPSIkMSIKICAgIGxvZyAic3RhcnRpbmciCgogICAgbG9jYWwgLWEgY21kPSgKICAgICAgICBkbmYKICAgICAgICAteQogICAgICAgIGluc3RhbGwKICAgICkKICAgIAogICAgIyBSZWZlcmVuY2U6IGh0dHBzOi8vd3d3LnNoZWxsY2hlY2submV0L3dpa2kvU0MyMjA2CiAgICAjIGFwcGVuZCBwa2dzIGFycmF5IHRvIGNtZAogICAgbWFwZmlsZSAtTyAkKCggJHsjY21kW0BdfSArIDEgKSkgLWQgJyAnIGNtZCA8PDwgIiR7cGtnc1tAXX0iCiAgICBsb2NhbCAtciBjbWQKCiAgICBsb2cgIkF0dGVtcHRpbmcgdG8gaW5zdGFsbCBwYWNrYWdlczogJHtwa2dzWypdfSIKICAgIHJldHJ5IGNtZCAiJDIiICIkezM6LX0iCn0KCgojIGRuZl91cGRhdGVfcGtncwojIGFyZ3M6CiMgMSkgZXhjbHVkZXMgLSBuYW1lcmVmLCBzdHJpbmcgYXJyYXksIG9wdGlvbmFsOyBQYWNrYWdlcyB0byBleGNsdWRlIGZyb20gdXBkYXRpbmcKIyAgICAgICBFYWNoIGluZGV4IG11c3QgYmUgcHJlZml4ZWQgd2l0aCAteCAKIyAyKSB3YWl0X3RpbWUgLSBuYW1lcmVmLCBpbnRlZ2VyOyBUaW1lIHRvIHdhaXQgYmVmb3JlIHJldHJ5aW5nIGNvbW1hbmQKIyAzKSByZXRyaWVzIC0gaW50ZWdlciwgb3B0aW9uYWw7IEFtbW91bnQgb2YgdGltZXMgdG8gcmV0cnkgY29tbWFuZCwgZGVmYXVsdHMgdG8gNQpkbmZfdXBkYXRlX3BrZ3MoKSB7CiAgICBsb2NhbCAtbiBleGNsdWRlcz0iJHsxOi1lbXB0eV9zdHJ9IgogICAgbG9nICJzdGFydGluZyIKCiAgICBsb2NhbCAtYSBjbWQ9KAogICAgICAgIGRuZgogICAgICAgIC15CiAgICAgICAgIyBSZXBsYWNlZCB3aXRoIGV4Y2x1ZGVzCiAgICAgICAgIiIKICAgICAgICB1cGRhdGUKICAgICAgICAtLWFsbG93ZXJhc2luZwogICAgKQoKICAgIGlmIFsgLW4gIiR7ZXhjbHVkZXN9IiBdOyB0aGVuCiAgICAgICAgIyBSZWZlcmVuY2UgaHR0cHM6Ly93d3cuc2hlbGxjaGVjay5uZXQvd2lraS9TQzIyMDYKICAgICAgICBtYXBmaWxlIC1PIDIgY21kIDw8PCAiJHtleGNsdWRlc1tAXX0iCiAgICBlbHNlCiAgICAgICAgIyBSZW1vdmUgZW1wdHkgc3RyaW5nIGlmIHdlIGFyZW4ndCByZXBsYWNpbmcgdGhlbSwgcHJvYmFibHkgZG9lc24ndCBtYXR0ZXIsIGJ1dCB3aHkgbm90IGJlIHNhZmUKICAgICAgICB1bnNldCAiY21kWzJdIgogICAgZmkKICAgIGxvY2FsIC1yIGNtZAoKICAgIGxvZyAiVXBkYXRpbmcgYWxsIHBhY2thZ2VzIGV4Y2x1ZGluZyBcIiR7ZXhjbHVkZXNbKl06LX1cIiIKICAgIHJldHJ5IGNtZCAiJDIiICIkezM6LX0iCn0KCiMgcnBtX2ltcG9ydF9rZXlzCiMgYXJnczoKIyAxKSBrZXlzIC0gbmFtZXJlZiwgc3RyaW5nIGFycmF5OyBycG0ga2V5cyB0byBiZSBpbXBvcnRlZAojIDIpIHdhaXRfdGltZSAtIG5hbWVyZWYsIGludGVnZXI7IFRpbWUgdG8gd2FpdCBiZWZvcmUgcmV0cnlpbmcgY29tbWFuZApycG1faW1wb3J0X2tleXMoKSB7CiAgICBsb2NhbCAtbiBrZXlzPSIkMSIKICAgIGxvZyAic3RhcnRpbmciCgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDY4CiAgICBmb3Iga2V5IGluICR7a2V5c1tAXX07IGRvCiAgICAgICAgaWYgWyAkeyNrZXlzW0BdfSAtZXEgMCBdOyB0aGVuCiAgICAgICAgICAgIGJyZWFrCiAgICAgICAgZmkKCiAgICAgICAgbG9jYWwgLWEgY21kPSgKICAgICAgICAgICAgcnBtCiAgICAgICAgICAgIC0taW1wb3J0CiAgICAgICAgICAgIC12CiAgICAgICAgICAgICIka2V5IgogICAgICAgICkKCiAgICAgICAgbG9nICJJbXBvcnRpbmcgcnBtIHJlcG9zaXRvcnkga2V5ICRrZXkiCiAgICAgICAgcmV0cnkgY21kICIkMiIgIiR7MzotfSIgJiYgdW5zZXQga2V5CiAgICBkb25lCn0KCiMgdXRpbC1jb21tb24uc2ggZG9lcyBub3QgZXhpc3Qgd2hlbiBkZXBsb3llZCB0byBWTVNTIHZpYSBWTVNTIGV4dGVuc2lvbnMKIyBQcm92aWRlcyBzaGVsbGNoZWNrIGRlZmluaXRpb25zCnV0aWxfY29tbW9uPSJ1dGlsLWNvbW1vbi5zaCIKaWYgWyAtZiAiJHV0aWxfY29tbW9uIiBdOyB0aGVuCiAgICAjIHNoZWxsY2hlY2sgc291cmNlPXV0aWwtY29tbW9uLnNoCiAgICBzb3VyY2UgIiR1dGlsX2NvbW1vbiIKZmkKIyEvYmluL2Jhc2gKIyBBUk8gc2VydmljZSBzZXR1cCBmdW5jdGlvbnMKCiMgZW5hYmxlX3NlcnZpY2VzIGVuYWJsZXMgdGhlIHN5c3RlbWQgc2VydmljZXMgdGhhdCBhcmUgcGFzc2VkIGluCiMgYXJnczoKIyAxKSBzZXJ2aWNlcyAtIGFycmF5OyBzZXJ2aWNlcyB0byBiZSBlbmFibGVkCmVuYWJsZV9zZXJ2aWNlcygpIHsKICAgIGxvY2FsIC1uIHN2Y3M9IiQxIgogICAgbG9nICJzdGFydGluZyIKCiAgICBzeXN0ZW1jdGwgZGFlbW9uLXJlbG9hZAoKICAgIGxvZyAiZW5hYmxpbmcgc2VydmljZXMgJHtzdmNzWypdfSIKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjA2OAogICAgZm9yIHN2YyBpbiAke3N2Y3NbQF19OyBkbwogICAgICAgIGxvZyAiRW5hYmxpbmcgYW5kIHN0YXJ0aW5nICRzdmMgbm93IgogICAgICAgIHN5c3RlbWN0bCBlbmFibGUgXAogICAgICAgICAgICAgICAgICAtLW5vdyBcCiAgICAgICAgICAgICAgICAgICIkc3ZjIgogICAgZG9uZQp9CgojIGNvbmZpZ3VyZV9zZXJ2aWNlX2Fyb19nYXRld2F5CiMgYXJnczoKIyAxKSBpbWFnZSAtIG5hbWVyZWYsIHN0cmluZzsgY29udGFpbmVyIGltYWdlCiMgMikgcm9sZSAtIG5hbWVyZWYsIHN0cmluZzsgVk1TUyByb2xlCiMgMykgY29uZl9maWxlIC0gbmFtZXJlZiwgc3RyaW5nOyBhcm8gZ2F0ZXdheSBlbnZpcm9ubWVudCBmaWxlCiMgNCkgaXBhZGRyZXNzIC0gbmFtZXJlZiwgc3RyaW5nOyBzdGF0aWMgaXAgb2YgcG9kbWFuIG5ldHdvcmsgdG8gYmUgYXR0YWNoZWQKY29uZmlndXJlX3NlcnZpY2VfYXJvX2dhdGV3YXkoKSB7CiAgICBsb2NhbCAtbiBpbWFnZT0iJDEiCiAgICBsb2NhbCAtbiByb2xlPSIkMiIKICAgIGxvY2FsIC1uIGNvbmZfZmlsZT0iJDMiCiAgICBsb2NhbCAtbiBpcGFkZHJlc3M9IiQ0IgogICAgbG9nICJzdGFydGluZyIKICAgIGxvZyAiQ29uZmlndXJpbmcgYXJvLWdhdGV3YXkgc2VydmljZSIKCiAgICBsb2NhbCAtciBhcm9fZ2F0ZXdheV9jb25mX2ZpbGVuYW1lPScvZXRjL3N5c2NvbmZpZy9hcm8tZ2F0ZXdheScKICAgIGxvY2FsIC1yIGFkZF9jb25mX2ZpbGU9IlBPRE1BTl9ORVRXT1JLPSdwb2RtYW4nCklQQUREUkVTUz0nJGlwYWRkcmVzcycKUk9MRT0nJHtyb2xlLCx9JwpBUk9fTE9HX0xFVkVMPSckR0FURVdBWUxPR0xFVkVMJyIKCiAgICB3cml0ZV9maWxlIGFyb19nYXRld2F5X2NvbmZfZmlsZW5hbWUgY29uZl9maWxlIHRydWUKICAgIHdyaXRlX2ZpbGUgYXJvX2dhdGV3YXlfY29uZl9maWxlbmFtZSBhZGRfY29uZl9maWxlIGZhbHNlCgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciBhcm9fZ2F0ZXdheV9zZXJ2aWNlX2ZpbGVuYW1lPScvZXRjL3N5c3RlbWQvc3lzdGVtL2Fyby1nYXRld2F5LnNlcnZpY2UnCgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICAjIGJlbG93IHZhcmlhYmxlIGlzIGluIHNpbmdsZSBxdW90ZXMKICAgICMgYXMgaXQgaXMgdG8gYmUgZXhwYW5kZWQgYXQgc3lzdGVtZCBzdGFydCB0aW1lIChieSBzeXN0ZW1kLCBub3QgdGhpcyBzY3JpcHQpCiAgICBsb2NhbCAtciBhcm9fZ2F0ZXdheV9zZXJ2aWNlX2ZpbGU9J1tVbml0XQpBZnRlcj1uZXR3b3JrLW9ubGluZS50YXJnZXQKV2FudHM9bmV0d29yay1vbmxpbmUudGFyZ2V0CgpbU2VydmljZV0KRW52aXJvbm1lbnRGaWxlPS9ldGMvc3lzY29uZmlnL2Fyby1nYXRld2F5CkV4ZWNTdGFydFByZT0tL3Vzci9iaW4vcG9kbWFuIHJtIC1mICVOCkV4ZWNTdGFydD0vdXNyL2Jpbi9wb2RtYW4gcnVuIFwKICAtLWhvc3RuYW1lICVIIFwKICAtLW5hbWUgJU4gXAogIC0tcm0gXAogIC0tY2FwLWRyb3AgbmV0X3JhdyBcCiAgLWUgQUNSX1JFU09VUkNFX0lEIFwKICAtZSBEQVRBQkFTRV9BQ0NPVU5UX05BTUUgXAogIC1lIEdBVEVXQVlfRE9NQUlOUyBcCiAgLWUgR0FURVdBWV9GRUFUVVJFUyBcCiAgLWUgTURNX0FDQ09VTlQgXAogIC1lIE1ETV9OQU1FU1BBQ0UgXAogIC1lIEFST19MT0dfTEVWRUwgXAogIC1tIDJnIFwKICAtLW5ldHdvcms9JHtQT0RNQU5fTkVUV09SS30gXAogIC0taXAgJHtJUEFERFJFU1N9IFwKICAtcCA4MDo4MDgwIFwKICAtcCA4MDgxOjgwODEgXAogIC1wIDQ0Mzo4NDQzIFwKICAtdiAvcnVuL3N5c3RlbWQvam91cm5hbDovcnVuL3N5c3RlbWQvam91cm5hbCBcCiAgLXYgL3Zhci9ldHc6L3Zhci9ldHc6eiBcCiAgJHtSUElNQUdFfSBcCiAgJHtST0xFfQpFeGVjU3RvcD0vdXNyL2Jpbi9wb2RtYW4gc3RvcCAtdCAzNjAwICVOClRpbWVvdXRTdG9wU2VjPTM2MDAKUmVzdGFydD1hbHdheXMKUmVzdGFydFNlYz0xClN0YXJ0TGltaXRJbnRlcnZhbD0wCgpbSW5zdGFsbF0KV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQKICAgICcKCiAgICB3cml0ZV9maWxlIGFyb19nYXRld2F5X3NlcnZpY2VfZmlsZW5hbWUgYXJvX2dhdGV3YXlfc2VydmljZV9maWxlIHRydWUKfQoKIyBjb25maWd1cmVfc2VydmljZV9hcm9fcnAKIyBhcmdzOgojIDEpIGltYWdlIC0gbmFtZXJlZiwgc3RyaW5nOyBSUCBjb250YWluZXIgaW1hZ2UKIyAyKSByb2xlIC0gbmFtZXJlZiwgc3RyaW5nOyBWTVNTIHJvbGUKIyAzKSBjb25mX2ZpbGUgLSBuYW1lcmVmLCBzdHJpbmc7IGFybyBycCBlbnZpcm9ubWVudCBmaWxlCiMgNCkgaXBhZGRyZXNzIC0gbmFtZXJlZiwgc3RyaW5nOyBzdGF0aWMgaXAgb2YgcG9kbWFuIG5ldHdvcmsgdG8gYmUgYXR0YWNoZWQKY29uZmlndXJlX3NlcnZpY2VfYXJvX3JwKCkgewogICAgbG9jYWwgLW4gaW1hZ2U9IiQxIgogICAgbG9jYWwgLW4gcm9sZT0iJDIiCiAgICBsb2NhbCAtbiBjb25mX2ZpbGU9IiQzIgogICAgbG9jYWwgLW4gaXBhZGRyZXNzPSIkNCIKICAgIGxvZyAic3RhcnRpbmciCiAgICBsb2cgIkNvbmZpZ3VyaW5nIGFyby1ycCBzZXJ2aWNlIgoKICAgIGxvY2FsIC1yIGFyb19ycF9jb25mX2ZpbGVuYW1lPScvZXRjL3N5c2NvbmZpZy9hcm8tcnAnCiAgICBsb2NhbCAtciBhZGRfY29uZl9maWxlPSJQT0RNQU5fTkVUV09SSz0ncG9kbWFuJwpJUEFERFJFU1M9JyRpcGFkZHJlc3MnClJPTEU9JyR7cm9sZSwsfScKQVJPX0xPR19MRVZFTD0nJFJQTE9HTEVWRUwnIgoKICAgIHdyaXRlX2ZpbGUgYXJvX3JwX2NvbmZfZmlsZW5hbWUgY29uZl9maWxlIHRydWUKICAgIHdyaXRlX2ZpbGUgYXJvX3JwX2NvbmZfZmlsZW5hbWUgYWRkX2NvbmZfZmlsZSBmYWxzZQoKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgYXJvX3JwX3NlcnZpY2VfZmlsZW5hbWU9Jy9ldGMvc3lzdGVtZC9zeXN0ZW0vYXJvLXJwLnNlcnZpY2UnCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgICMgYmVsb3cgdmFyaWFibGUgaXMgaW4gc2luZ2xlIHF1b3RlcwogICAgIyBhcyBpdCBpcyB0byBiZSBleHBhbmRlZCBhdCBzeXN0ZW1kIHN0YXJ0IHRpbWUgKGJ5IHN5c3RlbWQsIG5vdCB0aGlzIHNjcmlwdCkKICAgIGxvY2FsIC1yIGFyb19ycF9zZXJ2aWNlX2ZpbGU9J1tVbml0XQpBZnRlcj1uZXR3b3JrLW9ubGluZS50YXJnZXQKV2FudHM9bmV0d29yay1vbmxpbmUudGFyZ2V0CgpbU2VydmljZV0KRW52aXJvbm1lbnRGaWxlPS9ldGMvc3lzY29uZmlnL2Fyby1ycApFeGVjU3RhcnRQcmU9LS91c3IvYmluL3BvZG1hbiBybSAtZiAlTgpFeGVjU3RhcnQ9L3Vzci9iaW4vcG9kbWFuIHJ1biBcCiAgLS1ob3N0bmFtZSAlSCBcCiAgLS1uYW1lICVOIFwKICAtLXJtIFwKICAtLWNhcC1kcm9wIG5ldF9yYXcgXAogIC1lIEFDUl9SRVNPVVJDRV9JRCBcCiAgLWUgQURNSU5fQVBJX0NMSUVOVF9DRVJUX0NPTU1PTl9OQU1FIFwKICAtZSBBUk1fQVBJX0NMSUVOVF9DRVJUX0NPTU1PTl9OQU1FIFwKICAtZSBBWlVSRV9BUk1fQ0xJRU5UX0lEIFwKICAtZSBBWlVSRV9GUF9DTElFTlRfSUQgXAogIC1lIENMVVNURVJfTURNX0FDQ09VTlQgXAogIC1lIENMVVNURVJfTURNX05BTUVTUEFDRSBcCiAgLWUgQ0xVU1RFUl9NRFNEX0FDQ09VTlQgXAogIC1lIENMVVNURVJfTURTRF9DT05GSUdfVkVSU0lPTiBcCiAgLWUgQ0xVU1RFUl9NRFNEX05BTUVTUEFDRSBcCiAgLWUgREFUQUJBU0VfQUNDT1VOVF9OQU1FIFwKICAtZSBET01BSU5fTkFNRSBcCiAgLWUgR0FURVdBWV9ET01BSU5TIFwKICAtZSBHQVRFV0FZX1JFU09VUkNFR1JPVVAgXAogIC1lIEtFWVZBVUxUX1BSRUZJWCBcCiAgLWUgTURNX0FDQ09VTlQgXAogIC1lIE1ETV9OQU1FU1BBQ0UgXAogIC1lIE1EU0RfRU5WSVJPTk1FTlQgXAogIC1lIFJQX0ZFQVRVUkVTIFwKICAtZSBBUk9fSU5TVEFMTF9WSUFfSElWRSBcCiAgLWUgQVJPX0hJVkVfREVGQVVMVF9JTlNUQUxMRVJfUFVMTFNQRUMgXAogIC1lIEFST19BRE9QVF9CWV9ISVZFIFwKICAtZSBPSURDX0FGRF9FTkRQT0lOVCBcCiAgLWUgT0lEQ19TVE9SQUdFX0FDQ09VTlRfTkFNRSBcCiAgLWUgTVNJX1JQX0VORFBPSU5UIFwKICAtZSBPVEVMX0FVRElUX1FVRVVFX1NJWkUgXAogIC1lIE1JU0VfQUREUkVTUyBcCiAgLWUgQVJPX0xPR19MRVZFTCBcCiAgLW0gMmcgXAogIC0tbmV0d29yaz0ke1BPRE1BTl9ORVRXT1JLfSBcCiAgLS1pcCAke0lQQUREUkVTU30gXAogIC1wIDQ0Mzo4NDQzIFwKICAtdiAvZXRjL2Fyby1ycDovZXRjL2Fyby1ycCBcCiAgLXYgL3J1bi9zeXN0ZW1kL2pvdXJuYWw6L3J1bi9zeXN0ZW1kL2pvdXJuYWwgXAogIC12IC92YXIvZXR3Oi92YXIvZXR3OnogXAogIC12IC92YXIvcnVuL21kc2QvYXNhOi92YXIvcnVuL21kc2QvYXNhOnogXAogICR7UlBJTUFHRX0gXAogICR7Uk9MRX0KRXhlY1N0b3A9L3Vzci9iaW4vcG9kbWFuIHN0b3AgLXQgMzYwMCAlTgpUaW1lb3V0U3RvcFNlYz0zNjAwClJlc3RhcnQ9YWx3YXlzClJlc3RhcnRTZWM9MQpTdGFydExpbWl0SW50ZXJ2YWw9MAoKW0luc3RhbGxdCldhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0JwoKICAgIHdyaXRlX2ZpbGUgYXJvX3JwX3NlcnZpY2VfZmlsZW5hbWUgYXJvX3JwX3NlcnZpY2VfZmlsZSB0cnVlCn0KCiMgY29uZmlndXJlX3NlcnZpY2VfYXJvX21vbml0b3IKIyBhcmdzOgojIDEpIGltYWdlIC0gbmFtZXJlZiwgc3RyaW5nOyBSUCBjb250YWluZXIgaW1hZ2UKIyAyKSBpcGFkZHJlc3MgLSBuYW1lcmVmLCBzdHJpbmc7IHN0YXRpYyBpcCBvZiBwb2RtYW4gbmV0d29yayB0byBiZSBhdHRhY2hlZApjb25maWd1cmVfc2VydmljZV9hcm9fbW9uaXRvcigpIHsKICAgIGxvY2FsIC1uIGltYWdlPSIkMSIKICAgIGxvY2FsIC1uIGlwYWRkcmVzcz0iJDIiCiAgICBsb2cgInN0YXJ0aW5nIgogICAgbG9nICJDb25maWd1cmluZyBhcm8tbW9uaXRvciBzZXJ2aWNlIgoKICAgICMgRE9NQUlOX05BTUUsIENMVVNURVJfTURTRF9BQ0NPVU5ULCBDTFVTVEVSX01EU0RfQ09ORklHX1ZFUlNJT04sIEdBVEVXQVlfRE9NQUlOUywgR0FURVdBWV9SRVNPVVJDRUdST1VQLCBNRFNEX0VOVklST05NRU5UIENMVVNURVJfTURTRF9OQU1FU1BBQ0UKICAgICMgYXJlIG5vdCB1c2VkLCBidXQgY2FuJ3QgZWFzaWx5IGJlIHJlZmFjdG9yZWQgb3V0LiBTaG91bGQgYmUgcmV2aXNpdGVkIGluIHRoZSBmdXR1cmUuCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIGFyb19tb25pdG9yX3NlcnZpY2VfY29uZl9maWxlbmFtZT0nL2V0Yy9zeXNjb25maWcvYXJvLW1vbml0b3InCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIGFyb19tb25pdG9yX3NlcnZpY2VfY29uZl9maWxlPSJBWlVSRV9GUF9DTElFTlRfSUQ9JyRGUENMSUVOVElEJwpET01BSU5fTkFNRT0nJExPQ0FUSU9OLiRDTFVTVEVSUEFSRU5URE9NQUlOTkFNRScKQ0xVU1RFUl9NRFNEX0FDQ09VTlQ9JyRDTFVTVEVSTURTREFDQ09VTlQnCkNMVVNURVJfTURTRF9DT05GSUdfVkVSU0lPTj0nJENMVVNURVJNRFNEQ09ORklHVkVSU0lPTicKR0FURVdBWV9ET01BSU5TPSckR0FURVdBWURPTUFJTlMnCkdBVEVXQVlfUkVTT1VSQ0VHUk9VUD0nJEdBVEVXQVlSRVNPVVJDRUdST1VQTkFNRScKTURTRF9FTlZJUk9OTUVOVD0nJE1EU0RFTlZJUk9OTUVOVCcKQ0xVU1RFUl9NRFNEX05BTUVTUEFDRT0nJENMVVNURVJNRFNETkFNRVNQQUNFJwpDTFVTVEVSX01ETV9BQ0NPVU5UPSckQ0xVU1RFUk1ETUFDQ09VTlQnCkNMVVNURVJfTURNX05BTUVTUEFDRT1CQk0KREFUQUJBU0VfQUNDT1VOVF9OQU1FPSckREFUQUJBU0VBQ0NPVU5UTkFNRScKS0VZVkFVTFRfUFJFRklYPSckS0VZVkFVTFRQUkVGSVgnCk1ETV9BQ0NPVU5UPSckUlBNRE1BQ0NPVU5UJwpNRE1fTkFNRVNQQUNFPUJCTQpSUElNQUdFPSckaW1hZ2UnClBPRE1BTl9ORVRXT1JLPSdwb2RtYW4nCklQQUREUkVTUz0nJGlwYWRkcmVzcycKQVJPX0lOU1RBTExfVklBX0hJVkU9JyRDTFVTVEVSU0lOU1RBTExWSUFISVZFJwpBUk9fSElWRV9ERUZBVUxUX0lOU1RBTExFUl9QVUxMU1BFQz0nJENMVVNURVJERUZBVUxUSU5TVEFMTEVSUFVMTFNQRUMnCkFST19BRE9QVF9CWV9ISVZFPSckQ0xVU1RFUlNBRE9QVEJZSElWRScKQVJPX0xPR19MRVZFTD0nJE1PTklUT1JMT0dMRVZFTCciCgogICAgd3JpdGVfZmlsZSBhcm9fbW9uaXRvcl9zZXJ2aWNlX2NvbmZfZmlsZW5hbWUgYXJvX21vbml0b3Jfc2VydmljZV9jb25mX2ZpbGUgdHJ1ZQoKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgYXJvX21vbml0b3Jfc2VydmljZV9maWxlbmFtZT0nL2V0Yy9zeXN0ZW1kL3N5c3RlbS9hcm8tbW9uaXRvci5zZXJ2aWNlJwogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICAjIGJlbG93IHZhcmlhYmxlIGlzIGluIHNpbmdsZSBxdW90ZXMKICAgICMgYXMgaXQgaXMgdG8gYmUgZXhwYW5kZWQgYXQgc3lzdGVtZCBzdGFydCB0aW1lIChieSBzeXN0ZW1kLCBub3QgdGhpcyBzY3JpcHQpCiAgICBsb2NhbCAtciBhcm9fbW9uaXRvcl9zZXJ2aWNlX2ZpbGU9J1tVbml0XQpBZnRlcj1uZXR3b3JrLW9ubGluZS50YXJnZXQKV2FudHM9bmV0d29yay1vbmxpbmUudGFyZ2V0CgpbU2VydmljZV0KRW52aXJvbm1lbnRGaWxlPS9ldGMvc3lzY29uZmlnL2Fyby1tb25pdG9yCkV4ZWNTdGFydFByZT0tL3Vzci9iaW4vcG9kbWFuIHJtIC1mICVOCkV4ZWNTdGFydD0vdXNyL2Jpbi9wb2RtYW4gcnVuIFwKICAtLWhvc3RuYW1lICVIIFwKICAtLW5hbWUgJU4gXAogIC0tcm0gXAogIC0tY2FwLWRyb3AgbmV0X3JhdyBcCiAgLS1uZXR3b3JrPSR7UE9ETUFOX05FVFdPUkt9IFwKICAtLWlwICR7SVBBRERSRVNTfSBcCiAgLWUgQVpVUkVfRlBfQ0xJRU5UX0lEIFwKICAtZSBET01BSU5fTkFNRSBcCiAgLWUgQ0xVU1RFUl9NRFNEX0FDQ09VTlQgXAogIC1lIENMVVNURVJfTURTRF9DT05GSUdfVkVSU0lPTiBcCiAgLWUgR0FURVdBWV9ET01BSU5TIFwKICAtZSBHQVRFV0FZX1JFU09VUkNFR1JPVVAgXAogIC1lIE1EU0RfRU5WSVJPTk1FTlQgXAogIC1lIENMVVNURVJfTURTRF9OQU1FU1BBQ0UgXAogIC1lIENMVVNURVJfTURNX0FDQ09VTlQgXAogIC1lIENMVVNURVJfTURNX05BTUVTUEFDRSBcCiAgLWUgREFUQUJBU0VfQUNDT1VOVF9OQU1FIFwKICAtZSBLRVlWQVVMVF9QUkVGSVggXAogIC1lIE1ETV9BQ0NPVU5UIFwKICAtZSBNRE1fTkFNRVNQQUNFIFwKICAtZSBBUk9fSU5TVEFMTF9WSUFfSElWRSBcCiAgLWUgQVJPX0hJVkVfREVGQVVMVF9JTlNUQUxMRVJfUFVMTFNQRUMgXAogIC1lIEFST19BRE9QVF9CWV9ISVZFIFwKICAtZSBBUk9fTE9HX0xFVkVMIFwKICAtbSAyLjVnIFwKICAtdiAvcnVuL3N5c3RlbWQvam91cm5hbDovcnVuL3N5c3RlbWQvam91cm5hbCBcCiAgLXYgL3Zhci9ldHc6L3Zhci9ldHc6eiBcCiAgJHtSUElNQUdFfSBcCiAgbW9uaXRvcgpSZXN0YXJ0PWFsd2F5cwpSZXN0YXJ0U2VjPTEKU3RhcnRMaW1pdEludGVydmFsPTAKCltJbnN0YWxsXQpXYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldCcKCiAgICB3cml0ZV9maWxlIGFyb19tb25pdG9yX3NlcnZpY2VfZmlsZW5hbWUgYXJvX21vbml0b3Jfc2VydmljZV9maWxlIHRydWUKfQoKIyBjb25maWd1cmVfc2VydmljZV9hcm9fcG9ydGFsCiMgYXJnczoKIyAxKSBpbWFnZSAtIG5hbWVyZWYsIHN0cmluZzsgUlAgY29udGFpbmVyIGltYWdlCiMgMikgaXBhZGRyZXNzIC0gbmFtZXJlZiwgc3RyaW5nOyBzdGF0aWMgaXAgb2YgcG9kbWFuIG5ldHdvcmsgdG8gYmUgYXR0YWNoZWQKY29uZmlndXJlX3NlcnZpY2VfYXJvX3BvcnRhbCgpIHsKICAgIGxvY2FsIC1uIGltYWdlPSIkMSIKICAgIGxvY2FsIC1uIGlwYWRkcmVzcz0iJDIiCiAgICBsb2cgInN0YXJ0aW5nIgogICAgbG9nICJDb25maWd1cmluZyBhcm8gcG9ydGFsIHNlcnZpY2UiCgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciBhcm9fcG9ydGFsX3NlcnZpY2VfY29uZl9maWxlbmFtZT0nL2V0Yy9zeXNjb25maWcvYXJvLXBvcnRhbCcKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgYXJvX3BvcnRhbF9zZXJ2aWNlX2NvbmZfZmlsZT0iQVpVUkVfUE9SVEFMX0FDQ0VTU19HUk9VUF9JRFM9JyRQT1JUQUxBQ0NFU1NHUk9VUElEUycKQVpVUkVfUE9SVEFMX0NMSUVOVF9JRD0nJFBPUlRBTENMSUVOVElEJwpBWlVSRV9QT1JUQUxfRUxFVkFURURfR1JPVVBfSURTPSckUE9SVEFMRUxFVkFURURHUk9VUElEUycKREFUQUJBU0VfQUNDT1VOVF9OQU1FPSckREFUQUJBU0VBQ0NPVU5UTkFNRScKS0VZVkFVTFRfUFJFRklYPSckS0VZVkFVTFRQUkVGSVgnCk1ETV9BQ0NPVU5UPSckUlBNRE1BQ0NPVU5UJwpNRE1fTkFNRVNQQUNFPVBvcnRhbApQT1JUQUxfSE9TVE5BTUU9JyRMT0NBVElPTi5hZG1pbi4kUlBQQVJFTlRET01BSU5OQU1FJwpPVEVMX0FVRElUX1FVRVVFX1NJWkU9JyRPVEVMQVVESVRRVUVVRVNJWkUnClJQSU1BR0U9JyRpbWFnZScKUE9ETUFOX05FVFdPUks9J3BvZG1hbicKSVBBRERSRVNTPSckaXBhZGRyZXNzJwpBUk9fTE9HX0xFVkVMPSckUE9SVEFMTE9HTEVWRUwnIgoKICAgIHdyaXRlX2ZpbGUgYXJvX3BvcnRhbF9zZXJ2aWNlX2NvbmZfZmlsZW5hbWUgYXJvX3BvcnRhbF9zZXJ2aWNlX2NvbmZfZmlsZSB0cnVlCgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciBhcm9fcG9ydGFsX3NlcnZpY2VfZmlsZW5hbWU9Jy9ldGMvc3lzdGVtZC9zeXN0ZW0vYXJvLXBvcnRhbC5zZXJ2aWNlJwogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICAjIGJlbG93IHZhcmlhYmxlIGlzIGluIHNpbmdsZSBxdW90ZXMKICAgICMgYXMgaXQgaXMgdG8gYmUgZXhwYW5kZWQgYXQgc3lzdGVtZCBzdGFydCB0aW1lIChieSBzeXN0ZW1kLCBub3QgdGhpcyBzY3JpcHQpCiAgICBsb2NhbCAtciBhcm9fcG9ydGFsX3NlcnZpY2VfZmlsZT0nW1VuaXRdCkFmdGVyPW5ldHdvcmstb25saW5lLnRhcmdldApXYW50cz1uZXR3b3JrLW9ubGluZS50YXJnZXQKU3RhcnRMaW1pdEludGVydmFsPTAKCltTZXJ2aWNlXQpFbnZpcm9ubWVudEZpbGU9L2V0Yy9zeXNjb25maWcvYXJvLXBvcnRhbApFeGVjU3RhcnRQcmU9LS91c3IvYmluL3BvZG1hbiBybSAtZiAlTgpFeGVjU3RhcnQ9L3Vzci9iaW4vcG9kbWFuIHJ1biBcCiAgLS1ob3N0bmFtZSAlSCBcCiAgLS1uYW1lICVOIFwKICAtLXJtIFwKICAtLWNhcC1kcm9wIG5ldF9yYXcgXAogIC0tbmV0d29yaz0ke1BPRE1BTl9ORVRXT1JLfSBcCiAgLS1pcCAke0lQQUREUkVTU30gXAogIC1lIEFaVVJFX1BPUlRBTF9BQ0NFU1NfR1JPVVBfSURTIFwKICAtZSBBWlVSRV9QT1JUQUxfQ0xJRU5UX0lEIFwKICAtZSBBWlVSRV9QT1JUQUxfRUxFVkFURURfR1JPVVBfSURTIFwKICAtZSBEQVRBQkFTRV9BQ0NPVU5UX05BTUUgXAogIC1lIEtFWVZBVUxUX1BSRUZJWCBcCiAgLWUgTURNX0FDQ09VTlQgXAogIC1lIE1ETV9OQU1FU1BBQ0UgXAogIC1lIFBPUlRBTF9IT1NUTkFNRSBcCiAgLWUgT1RFTF9BVURJVF9RVUVVRV9TSVpFIFwKICAtZSBBUk9fTE9HX0xFVkVMIFwKICAtbSAyZyBcCiAgLXAgNDQ0Ojg0NDQgXAogIC1wIDIyMjI6MjIyMiBcCiAgLXYgL3J1bi9zeXN0ZW1kL2pvdXJuYWw6L3J1bi9zeXN0ZW1kL2pvdXJuYWwgXAogIC12IC92YXIvZXR3Oi92YXIvZXR3OnogXAogIC12IC92YXIvcnVuL21kc2QvYXNhOi92YXIvcnVuL21kc2QvYXNhOnogXAogICR7UlBJTUFHRX0gXAogIHBvcnRhbApSZXN0YXJ0PWFsd2F5cwpSZXN0YXJ0U2VjPTEKCltJbnN0YWxsXQpXYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldCcKCiAgICB3cml0ZV9maWxlIGFyb19wb3J0YWxfc2VydmljZV9maWxlbmFtZSBhcm9fcG9ydGFsX3NlcnZpY2VfZmlsZSB0cnVlCn0KCiMgY29uZmlndXJlX3NlcnZpY2VfYXJvX21pbW9fYWN0dWF0b3IKIyBhcmdzOgojIDEpIGltYWdlIC0gbmFtZXJlZiwgc3RyaW5nOyBSUCBjb250YWluZXIgaW1hZ2UKIyAyKSBjb25mX2ZpbGUgLSBuYW1lcmVmLCBzdHJpbmc7IGFybyBycCBlbnZpcm9ubWVudCBmaWxlCiMgMykgaXBhZGRyZXNzIC0gbmFtZXJlZiwgc3RyaW5nOyBzdGF0aWMgaXAgb2YgcG9kbWFuIG5ldHdvcmsgdG8gYmUgYXR0YWNoZWQKY29uZmlndXJlX3NlcnZpY2VfYXJvX21pbW9fYWN0dWF0b3IoKSB7CiAgICBsb2NhbCAtbiBpbWFnZT0iJDEiCiAgICBsb2NhbCAtbiBjb25mX2ZpbGU9IiQyIgogICAgbG9jYWwgLW4gaXBhZGRyZXNzPSIkMyIKICAgIGxvZyAic3RhcnRpbmciCiAgICBsb2cgIkNvbmZpZ3VyaW5nIGFyby1taW1vLWFjdHVhdG9yIHNlcnZpY2UiCgogICAgbG9jYWwgLXIgYXJvX21pbW9fYWN0dWF0b3JfY29uZl9maWxlbmFtZT0nL2V0Yy9zeXNjb25maWcvYXJvLW1pbW8tYWN0dWF0b3InCiAgICBsb2NhbCAtciBhZGRfY29uZl9maWxlPSJQT0RNQU5fTkVUV09SSz0ncG9kbWFuJwpJUEFERFJFU1M9JyRpcGFkZHJlc3MnCkFST19MT0dfTEVWRUw9JyRNSU1PQUNUVUFUT1JMT0dMRVZFTCciCgogICAgd3JpdGVfZmlsZSBhcm9fbWltb19hY3R1YXRvcl9jb25mX2ZpbGVuYW1lIGNvbmZfZmlsZSB0cnVlCiAgICB3cml0ZV9maWxlIGFyb19taW1vX2FjdHVhdG9yX2NvbmZfZmlsZW5hbWUgYWRkX2NvbmZfZmlsZSBmYWxzZQoKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgYXJvX21pbW9fYWN0dWF0b3Jfc2VydmljZV9maWxlbmFtZT0nL2V0Yy9zeXN0ZW1kL3N5c3RlbS9hcm8tbWltby1hY3R1YXRvci5zZXJ2aWNlJwogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICAjIGJlbG93IHZhcmlhYmxlIGlzIGluIHNpbmdsZSBxdW90ZXMKICAgICMgYXMgaXQgaXMgdG8gYmUgZXhwYW5kZWQgYXQgc3lzdGVtZCBzdGFydCB0aW1lIChieSBzeXN0ZW1kLCBub3QgdGhpcyBzY3JpcHQpCiAgICBsb2NhbCAtciBhcm9fbWltb19hY3R1YXRvcl9zZXJ2aWNlX2ZpbGU9J1tVbml0XQpBZnRlcj1uZXR3b3JrLW9ubGluZS50YXJnZXQKV2FudHM9bmV0d29yay1vbmxpbmUudGFyZ2V0CgpbU2VydmljZV0KRW52aXJvbm1lbnRGaWxlPS9ldGMvc3lzY29uZmlnL2Fyby1taW1vLWFjdHVhdG9yCkV4ZWNTdGFydFByZT0tL3Vzci9iaW4vcG9kbWFuIHJtIC1mICVOCkV4ZWNTdGFydD0vdXNyL2Jpbi9wb2RtYW4gcnVuIFwKICAtLWhvc3RuYW1lICVIIFwKICAtLW5hbWUgJU4gXAogIC0tcm0gXAogIC0tY2FwLWRyb3AgbmV0X3JhdyBcCiAgLWUgQUNSX1JFU09VUkNFX0lEIFwKICAtZSBBRE1JTl9BUElfQ0xJRU5UX0NFUlRfQ09NTU9OX05BTUUgXAogIC1lIEFSTV9BUElfQ0xJRU5UX0NFUlRfQ09NTU9OX05BTUUgXAogIC1lIEFaVVJFX0FSTV9DTElFTlRfSUQgXAogIC1lIEFaVVJFX0ZQX0NMSUVOVF9JRCBcCiAgLWUgQ0xVU1RFUl9NRE1fQUNDT1VOVCBcCiAgLWUgQ0xVU1RFUl9NRE1fTkFNRVNQQUNFIFwKICAtZSBDTFVTVEVSX01EU0RfQUNDT1VOVCBcCiAgLWUgQ0xVU1RFUl9NRFNEX0NPTkZJR19WRVJTSU9OIFwKICAtZSBDTFVTVEVSX01EU0RfTkFNRVNQQUNFIFwKICAtZSBEQVRBQkFTRV9BQ0NPVU5UX05BTUUgXAogIC1lIERPTUFJTl9OQU1FIFwKICAtZSBHQVRFV0FZX0RPTUFJTlMgXAogIC1lIEdBVEVXQVlfUkVTT1VSQ0VHUk9VUCBcCiAgLWUgS0VZVkFVTFRfUFJFRklYIFwKICAtZSBNRE1fQUNDT1VOVCBcCiAgLWUgTURNX05BTUVTUEFDRSBcCiAgLWUgTURTRF9FTlZJUk9OTUVOVCBcCiAgLWUgUlBfRkVBVFVSRVMgXAogIC1lIEFST19JTlNUQUxMX1ZJQV9ISVZFIFwKICAtZSBBUk9fSElWRV9ERUZBVUxUX0lOU1RBTExFUl9QVUxMU1BFQyBcCiAgLWUgQVJPX0FET1BUX0JZX0hJVkUgXAogIC1lIE9JRENfQUZEX0VORFBPSU5UIFwKICAtZSBPSURDX1NUT1JBR0VfQUNDT1VOVF9OQU1FIFwKICAtZSBNU0lfUlBfRU5EUE9JTlQgXAogIC1lIEFST19MT0dfTEVWRUwgXAogIC1tIDJnIFwKICAtLW5ldHdvcms9JHtQT0RNQU5fTkVUV09SS30gXAogIC0taXAgJHtJUEFERFJFU1N9IFwKICAtcCA0NDU6ODQ0NSBcCiAgLXYgL2V0Yy9hcm8tcnA6L2V0Yy9hcm8tcnAgXAogIC12IC9ydW4vc3lzdGVtZC9qb3VybmFsOi9ydW4vc3lzdGVtZC9qb3VybmFsIFwKICAtdiAvdmFyL2V0dzovdmFyL2V0dzp6IFwKICAke1JQSU1BR0V9IFwKICBtaW1vLWFjdHVhdG9yCkV4ZWNTdG9wPS91c3IvYmluL3BvZG1hbiBzdG9wIC10IDM2MDAgJU4KVGltZW91dFN0b3BTZWM9MzYwMApSZXN0YXJ0PWFsd2F5cwpSZXN0YXJ0U2VjPTEKU3RhcnRMaW1pdEludGVydmFsPTAKCltJbnN0YWxsXQpXYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldCcKCiAgICB3cml0ZV9maWxlIGFyb19taW1vX2FjdHVhdG9yX3NlcnZpY2VfZmlsZW5hbWUgYXJvX21pbW9fYWN0dWF0b3Jfc2VydmljZV9maWxlIHRydWUKfQoKIyBjb25maWd1cmVfc2VydmljZV9hcm9fbWltb19zY2hlZHVsZXIKIyBhcmdzOgojIDEpIGltYWdlIC0gbmFtZXJlZiwgc3RyaW5nOyBSUCBjb250YWluZXIgaW1hZ2UKIyAyKSBjb25mX2ZpbGUgLSBuYW1lcmVmLCBzdHJpbmc7IGFybyBycCBlbnZpcm9ubWVudCBmaWxlCiMgMykgaXBhZGRyZXNzIC0gbmFtZXJlZiwgc3RyaW5nOyBzdGF0aWMgaXAgb2YgcG9kbWFuIG5ldHdvcmsgdG8gYmUgYXR0YWNoZWQKY29uZmlndXJlX3NlcnZpY2VfYXJvX21pbW9fc2NoZWR1bGVyKCkgewogICAgbG9jYWwgLW4gaW1hZ2U9IiQxIgogICAgbG9jYWwgLW4gY29uZl9maWxlPSIkMiIKICAgIGxvY2FsIC1uIGlwYWRkcmVzcz0iJDMiCiAgICBsb2cgInN0YXJ0aW5nIgogICAgbG9nICJDb25maWd1cmluZyBhcm8tbWltby1zY2hlZHVsZXIgc2VydmljZSIKCiAgICBsb2NhbCAtciBhcm9fbWltb19zY2hlZHVsZXJfY29uZl9maWxlbmFtZT0nL2V0Yy9zeXNjb25maWcvYXJvLW1pbW8tc2NoZWR1bGVyJwogICAgbG9jYWwgLXIgYWRkX2NvbmZfZmlsZT0iUE9ETUFOX05FVFdPUks9J3BvZG1hbicKSVBBRERSRVNTPSckaXBhZGRyZXNzJwpBUk9fTE9HX0xFVkVMPSckTUlNT1NDSEVEVUxFUkxPR0xFVkVMJyIKCiAgICB3cml0ZV9maWxlIGFyb19taW1vX3NjaGVkdWxlcl9jb25mX2ZpbGVuYW1lIGNvbmZfZmlsZSB0cnVlCiAgICB3cml0ZV9maWxlIGFyb19taW1vX3NjaGVkdWxlcl9jb25mX2ZpbGVuYW1lIGFkZF9jb25mX2ZpbGUgZmFsc2UKCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIGFyb19taW1vX3NjaGVkdWxlcl9zZXJ2aWNlX2ZpbGVuYW1lPScvZXRjL3N5c3RlbWQvc3lzdGVtL2Fyby1taW1vLXNjaGVkdWxlci5zZXJ2aWNlJwogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICAjIGJlbG93IHZhcmlhYmxlIGlzIGluIHNpbmdsZSBxdW90ZXMKICAgICMgYXMgaXQgaXMgdG8gYmUgZXhwYW5kZWQgYXQgc3lzdGVtZCBzdGFydCB0aW1lIChieSBzeXN0ZW1kLCBub3QgdGhpcyBzY3JpcHQpCiAgICBsb2NhbCAtciBhcm9fbWltb19zY2hlZHVsZXJfc2VydmljZV9maWxlPSdbVW5pdF0KQWZ0ZXI9bmV0d29yay1vbmxpbmUudGFyZ2V0CldhbnRzPW5ldHdvcmstb25saW5lLnRhcmdldAoKW1NlcnZpY2VdCkVudmlyb25tZW50RmlsZT0vZXRjL3N5c2NvbmZpZy9hcm8tbWltby1zY2hlZHVsZXIKRXhlY1N0YXJ0UHJlPS0vdXNyL2Jpbi9wb2RtYW4gcm0gLWYgJU4KRXhlY1N0YXJ0PS91c3IvYmluL3BvZG1hbiBydW4gXAogIC0taG9zdG5hbWUgJUggXAogIC0tbmFtZSAlTiBcCiAgLS1ybSBcCiAgLS1jYXAtZHJvcCBuZXRfcmF3IFwKICAtZSBBQ1JfUkVTT1VSQ0VfSUQgXAogIC1lIEFETUlOX0FQSV9DTElFTlRfQ0VSVF9DT01NT05fTkFNRSBcCiAgLWUgQVJNX0FQSV9DTElFTlRfQ0VSVF9DT01NT05fTkFNRSBcCiAgLWUgQVpVUkVfQVJNX0NMSUVOVF9JRCBcCiAgLWUgQVpVUkVfRlBfQ0xJRU5UX0lEIFwKICAtZSBDTFVTVEVSX01ETV9BQ0NPVU5UIFwKICAtZSBDTFVTVEVSX01ETV9OQU1FU1BBQ0UgXAogIC1lIENMVVNURVJfTURTRF9BQ0NPVU5UIFwKICAtZSBDTFVTVEVSX01EU0RfQ09ORklHX1ZFUlNJT04gXAogIC1lIENMVVNURVJfTURTRF9OQU1FU1BBQ0UgXAogIC1lIERBVEFCQVNFX0FDQ09VTlRfTkFNRSBcCiAgLWUgRE9NQUlOX05BTUUgXAogIC1lIEdBVEVXQVlfRE9NQUlOUyBcCiAgLWUgR0FURVdBWV9SRVNPVVJDRUdST1VQIFwKICAtZSBLRVlWQVVMVF9QUkVGSVggXAogIC1lIE1ETV9BQ0NPVU5UIFwKICAtZSBNRE1fTkFNRVNQQUNFIFwKICAtZSBNRFNEX0VOVklST05NRU5UIFwKICAtZSBSUF9GRUFUVVJFUyBcCiAgLWUgQVJPX0lOU1RBTExfVklBX0hJVkUgXAogIC1lIEFST19ISVZFX0RFRkFVTFRfSU5TVEFMTEVSX1BVTExTUEVDIFwKICAtZSBBUk9fQURPUFRfQllfSElWRSBcCiAgLWUgT0lEQ19BRkRfRU5EUE9JTlQgXAogIC1lIE9JRENfU1RPUkFHRV9BQ0NPVU5UX05BTUUgXAogIC1lIE1TSV9SUF9FTkRQT0lOVCBcCiAgLWUgQVJPX0xPR19MRVZFTCBcCiAgLW0gMmcgXAogIC0tbmV0d29yaz0ke1BPRE1BTl9ORVRXT1JLfSBcCiAgLS1pcCAke0lQQUREUkVTU30gXAogIC1wIDQ0Njo4NDQ2IFwKICAtdiAvZXRjL2Fyby1ycDovZXRjL2Fyby1ycCBcCiAgLXYgL3J1bi9zeXN0ZW1kL2pvdXJuYWw6L3J1bi9zeXN0ZW1kL2pvdXJuYWwgXAogIC12IC92YXIvZXR3Oi92YXIvZXR3OnogXAogICR7UlBJTUFHRX0gXAogIG1pbW8tc2NoZWR1bGVyCkV4ZWNTdG9wPS91c3IvYmluL3BvZG1hbiBzdG9wIC10IDM2MDAgJU4KVGltZW91dFN0b3BTZWM9MzYwMApSZXN0YXJ0PWFsd2F5cwpSZXN0YXJ0U2VjPTEKU3RhcnRMaW1pdEludGVydmFsPTAKCltJbnN0YWxsXQpXYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldCcKCiAgICB3cml0ZV9maWxlIGFyb19taW1vX3NjaGVkdWxlcl9zZXJ2aWNlX2ZpbGVuYW1lIGFyb19taW1vX3NjaGVkdWxlcl9zZXJ2aWNlX2ZpbGUgdHJ1ZQp9CgojIGNvbmZpZ3VyZV9zZXJ2aWNlX2Fyb19taXNlCiMgYXJnczoKIyAxKSBpbWFnZSAtIG5hbWVyZWYsIHN0cmluZzsgTUlTRSBjb250YWluZXIgaW1hZ2UKIyAyKSBpcGFkZHJlc3MgLSBuYW1lcmVmLCBzdHJpbmc7IHN0YXRpYyBpcCBvZiBwb2RtYW4gbmV0d29yayB0byBiZSBhdHRhY2hlZApjb25maWd1cmVfc2VydmljZV9hcm9fbWlzZSgpIHsKICAgIGxvY2FsIC1uIGltYWdlPSIkMSIKICAgIGxvY2FsIC1uIGlwYWRkcmVzcz0iJDIiCiAgICBsb2cgInN0YXJ0aW5nIgogICAgbG9nICJDb25maWd1cmluZyBhcm8tbWlzZSBzZXJ2aWNlIgoKICAgIExPR0lOSU5TVEFOQ0U9Imh0dHBzOi8vbG9naW4ubWljcm9zb2Z0b25saW5lLmNvbSIKICAgIGlmIFtbICRBWlVSRUNMT1VETkFNRSA9PSAiJHVzX2dvdl9jbG91ZCIgXV07IHRoZW4KICAgICAgICBMT0dJTklOU1RBTkNFPSJodHRwczovL2xvZ2luLm1pY3Jvc29mdG9ubGluZS51cyIKICAgIGZpCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIGFyb19taXNlX3NlcnZpY2VfY29uZl9maWxlbmFtZT0nL2V0Yy9zeXNjb25maWcvYXJvLW1pc2UnCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIGFyb19taXNlX3NlcnZpY2VfY29uZl9maWxlPSJGUENMSUVOVElEPSckRlBDTElFTlRJRCcKRlBURU5BTlRJRD0nJEZQVEVOQU5USUQnCk1JU0VJTUFHRT0nJGltYWdlJwpNSVNFVkFMSURBVURJRU5DRVM9JyRNSVNFVkFMSURBVURJRU5DRVMnCk1JU0VWQUxJREFQUElEUz0nJE1JU0VWQUxJREFQUElEUycKTE9HSU5JTlNUQU5DRT0nJExPR0lOSU5TVEFOQ0UnClBPRE1BTl9ORVRXT1JLPSdwb2RtYW4nCklQQUREUkVTUz0nJGlwYWRkcmVzcyciCgogICAgd3JpdGVfZmlsZSBhcm9fbWlzZV9zZXJ2aWNlX2NvbmZfZmlsZW5hbWUgYXJvX21pc2Vfc2VydmljZV9jb25mX2ZpbGUgdHJ1ZQoKICAgIG1rZGlyIC1wIC9hcHAvbWlzZQogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciBhcm9fbWlzZV9hcHBzZXR0aW5nc19maWxlbmFtZT0nL2FwcC9taXNlL2FwcHNldHRpbmdzLmpzb24nCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIGFyb19taXNlX2FwcHNldHRpbmdzX2ZpbGU9InsKICAgIFwiVmVyc2lvblwiOiBcIjFcIiwKICAgIFwiSGVhcnRiZWF0SW50ZXJ2YWxNc1wiOiA1MDAwLAogICAgXCJBenVyZUFkXCI6IHsKICAgICAgICBcIkluc3RhbmNlXCI6IFwiJExPR0lOSU5TVEFOQ0VcIiwKICAgICAgICBcIkNsaWVudElkXCI6IFwiJEZQQ0xJRU5USURcIiwKICAgICAgICBcIlRlbmFudElkXCI6IFwiJEZQVEVOQU5USURcIiwKICAgICAgICBcIkF1ZGllbmNlXCI6IFwiYXBpOi8vJEZQQ0xJRU5USURcIiwKICAgICAgICBcIlNob3dQSUlcIjogZmFsc2UsCiAgICAgICAgXCJJbmJvdW5kUG9saWNpZXNcIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBcIkxhYmVsXCI6IFwiYXJvcnAtYXJtLWluYm91bmQtcG9saWN5XCIsCiAgICAgICAgICAgICAgICBcIkF1dGhvcml0eVwiOiBcIiRMT0dJTklOU1RBTkNFLyRGUFRFTkFOVElEL1wiCiwKICAgICAgICAgICAgICAgIFwiQXV0aGVudGljYXRpb25TY2hlbWVzXCI6IFsKICAgICAgICAgICAgICAgICAgICBcIlBvUFwiCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgXCJWYWxpZEF1ZGllbmNlc1wiOiAkTUlTRVZBTElEQVVESUVOQ0VTLAogICAgICAgICAgICAgICAgXCJTaWduZWRIdHRwUmVxdWVzdFZhbGlkYXRpb25Qb2xpY3lcIjogewogICAgICAgICAgICAgICAgICAgIFwiVmFsaWRhdGVUc1wiOiB0cnVlLAogICAgICAgICAgICAgICAgICAgIFwiVmFsaWRhdGVNXCI6IHRydWUsCiAgICAgICAgICAgICAgICAgICAgXCJWYWxpZGF0ZVVcIjogdHJ1ZSwKICAgICAgICAgICAgICAgICAgICBcIlZhbGlkYXRlUFwiOiB0cnVlCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgXCJWYWxpZEFwcGxpY2F0aW9uSWRzXCI6ICRNSVNFVkFMSURBUFBJRFMKICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgXCJMb2dnaW5nXCI6IHsKICAgICAgICAgICAgXCJMb2dMZXZlbFwiOiBcIkluZm9ybWF0aW9uXCIKICAgICAgICB9LAogICAgICAgIFwiTW9kdWxlc1wiOiB7CiAgICAgICAgICAgIFwiVHJWMlwiOiB7CiAgICAgICAgICAgICAgICBcIk1vZHVsZVR5cGVcIjogXCJUclYyTW9kdWxlXCIsCiAgICAgICAgICAgICAgICBcIkVuYWJsZWRcIjogdHJ1ZQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSwKICAgIFwiQWxsb3dlZEhvc3RzXCI6IFwiKlwiLAogICAgXCJLZXN0cmVsXCI6IHsKICAgICAgICBcIkVuZHBvaW50c1wiOiB7CiAgICAgICAgICAgIFwiSHR0cFwiOiB7CiAgICAgICAgICAgICAgICBcIlVybFwiOiBcImh0dHA6Ly8kaXBhZGRyZXNzOjUwMDBcIgogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSwKICAgIFwiTG9nZ2luZ1wiOiB7CiAgICAgICAgXCJMb2dMZXZlbFwiOiB7CiAgICAgICAgICAgIFwiRGVmYXVsdFwiOiBcIkluZm9ybWF0aW9uXCIsCiAgICAgICAgICAgIFwiTWljcm9zb2Z0XCI6IFwiSW5mb3JtYXRpb25cIiwKICAgICAgICAgICAgXCJNaWNyb3NvZnQuSG9zdGluZy5MaWZldGltZVwiOiBcIkluZm9ybWF0aW9uXCIKICAgICAgICB9LAogICAgICAgIFwiQ29uc29sZVwiOiB7CiAgICAgICAgICAgIFwiRm9ybWF0dGVyTmFtZVwiOiBcIlNpbXBsZVwiLAogICAgICAgICAgICBcIkZvcm1hdHRlck9wdGlvbnNcIjogewogICAgICAgICAgICAgICAgXCJJbmNsdWRlU2NvcGVzXCI6IHRydWUsCiAgICAgICAgICAgICAgICBcIlNpbmdsZUxpbmVcIjogdHJ1ZSwKICAgICAgICAgICAgICAgIFwiVGltZXN0YW1wRm9ybWF0XCI6IFwiSEg6bW06c3MuZmZmZiBcIiwKICAgICAgICAgICAgICAgIFwiVXNlVXRjVGltZXN0YW1wXCI6IHRydWUKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfSIKCiAgICB3cml0ZV9maWxlIGFyb19taXNlX2FwcHNldHRpbmdzX2ZpbGVuYW1lIGFyb19taXNlX2FwcHNldHRpbmdzX2ZpbGUgdHJ1ZQoKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgYXJvX21pc2Vfc2VydmljZV9maWxlbmFtZT0nL2V0Yy9zeXN0ZW1kL3N5c3RlbS9hcm8tbWlzZS5zZXJ2aWNlJwogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICAjIGJlbG93IHZhcmlhYmxlIGlzIGluIHNpbmdsZSBxdW90ZXMKICAgICMgYXMgaXQgaXMgdG8gYmUgZXhwYW5kZWQgYXQgc3lzdGVtZCBzdGFydCB0aW1lIChieSBzeXN0ZW1kLCBub3QgdGhpcyBzY3JpcHQpCiAgICBsb2NhbCAtciBhcm9fbWlzZV9zZXJ2aWNlX2ZpbGU9J1tVbml0XQpBZnRlcj1uZXR3b3JrLW9ubGluZS50YXJnZXQKV2FudHM9bmV0d29yay1vbmxpbmUudGFyZ2V0ClN0YXJ0TGltaXRJbnRlcnZhbFNlYz0wCltTZXJ2aWNlXQpSZXN0YXJ0U2VjPTFzCkVudmlyb25tZW50RmlsZT0vZXRjL3N5c2NvbmZpZy9hcm8tbWlzZQpFeGVjU3RhcnRQcmU9LS91c3IvYmluL3BvZG1hbiBybSAtZiAlTgpFeGVjU3RhcnQ9L3Vzci9iaW4vcG9kbWFuIHJ1biBcCiAgLXAgNTAwMDo1MDAwIFwKICAtdiAvYXBwL21pc2UvYXBwc2V0dGluZ3MuanNvbjovYXBwL2FwcHNldHRpbmdzLmpzb246eiBcCiAgLS1ob3N0bmFtZSAlSCBcCiAgLS1uYW1lICVOIFwKICAtLW5ldHdvcms9JHtQT0RNQU5fTkVUV09SS30gXAogIC0taXAgJHtJUEFERFJFU1N9IFwKICAtLXJtIFwKICAke01JU0VJTUFHRX0KRXhlY1N0b3A9L3Vzci9iaW4vcG9kbWFuIHN0b3AgJU4KUmVzdGFydD1hbHdheXMKUmVzdGFydFNlYz0zClN0YXJ0TGltaXRJbnRlcnZhbD0wCltJbnN0YWxsXQpXYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldCcKCiAgICB3cml0ZV9maWxlIGFyb19taXNlX3NlcnZpY2VfZmlsZW5hbWUgYXJvX21pc2Vfc2VydmljZV9maWxlIHRydWUKfQojIGNvbmZpZ3VyZV9zZXJ2aWNlX2Fyb19vdGVsX2NvbGxlY3RvcgojIGFyZ3M6CiMgMSkgaW1hZ2UgLSBuYW1lcmVmLCBzdHJpbmc7IE9URUwgY29udGFpbmVyIGltYWdlCiMgMikgc3RhdGljX2lwX2FkZHJlc3MgLSBuYW1lcmVmLCBhcnJheTsgc3RhdGljIGlwcyBvZiBhbGwgc2VydmljZXMKIyAzKSBpcGFkZHJlc3MgLSBuYW1lcmVmLCBzdHJpbmc7IHN0YXRpYyBpcCBvZiBwb2RtYW4gbmV0d29yayB0byBiZSBhdHRhY2hlZApjb25maWd1cmVfc2VydmljZV9hcm9fb3RlbF9jb2xsZWN0b3IoKSB7CiAgICBsb2NhbCAtbiBpbWFnZT0iJDEiCiAgICBsb2NhbCAtbiBzdGF0aWNfaXBfYWRkcmVzcz0iJDIiCiAgICBsb2NhbCAtbiBpcGFkZHJlc3M9IiQzIgogICAgbG9nICJzdGFydGluZyIKICAgIGxvZyAiQ29uZmlndXJpbmcgYXJvLW90ZWwtY29sbGVjdG9yIHNlcnZpY2UiCgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciBhcm9fb3RlbF9jb2xsZWN0b3Jfc2VydmljZV9jb25mX2ZpbGVuYW1lPScvZXRjL3N5c2NvbmZpZy9hcm8tb3RlbC1jb2xsZWN0b3InCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIGFyb19vdGVsX2NvbGxlY3Rvcl9zZXJ2aWNlX2NvbmZfZmlsZT0iR09NRU1MSU1JVD0xMDAwTWlCCk9URUxJTUFHRT0nJGltYWdlJwpQT0RNQU5fTkVUV09SSz0ncG9kbWFuJwpJUEFERFJFU1M9JyRpcGFkZHJlc3MnIgoKICAgIHdyaXRlX2ZpbGUgYXJvX290ZWxfY29sbGVjdG9yX3NlcnZpY2VfY29uZl9maWxlbmFtZSBhcm9fb3RlbF9jb2xsZWN0b3Jfc2VydmljZV9jb25mX2ZpbGUgdHJ1ZQoKICAgIG1rZGlyIC1wIC9hcHAvb3RlbAogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciBhcm9fb3RlbF9jb2xsZWN0b3JfYXBwY29uZmlnX2ZpbGVuYW1lPScvYXBwL290ZWwvY29uZmlnLnlhbWwnCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIGFyb19vdGVsX2NvbGxlY3Rvcl9hcHBjb25maWdfZmlsZT0icmVjZWl2ZXJzOgogIGh0dHBjaGVjazoKICAgIHRhcmdldHM6CiAgICAjIE1JU0UgRW5kcG9pbnRzCiAgICAgIC0gZW5kcG9pbnQ6IGh0dHA6Ly8ke3N0YXRpY19pcF9hZGRyZXNzWyJtaXNlIl19OjUwMDAvaGVhbHRoegogICAgICAgIG1ldGhvZDogR0VUCiAgICAgIC0gZW5kcG9pbnQ6IGh0dHA6Ly8ke3N0YXRpY19pcF9hZGRyZXNzWyJtaXNlIl19OjUwMDAvcmVhZHl6CiAgICAgICAgbWV0aG9kOiBHRVQKICAgICMgT1RFTHMgb3duIEVuZHBvaW50cwogICAgICAtIGVuZHBvaW50OiBodHRwOi8vJGlwYWRkcmVzczoxMzEzMy9oZWFsdGh6CiAgICAgICAgbWV0aG9kOiBHRVQKICAgICAgLSBlbmRwb2ludDogaHR0cDovLyRpcGFkZHJlc3M6MTMxMzMvcmVhZHl6CiAgICAgICAgbWV0aG9kOiBHRVQKICAgIGNvbGxlY3Rpb25faW50ZXJ2YWw6IDIwcwpwcm9jZXNzb3JzOgogIGJhdGNoOgogIGF0dHJpYnV0ZXMvaW5zZXJ0OgogICAgYWN0aW9uczoKICAgICAgLSBrZXk6IFwibG9jYXRpb25cIgogICAgICAgIGFjdGlvbjogaW5zZXJ0CiAgICAgICAgdmFsdWU6IFwiJExPQ0FUSU9OXCIKICAgICAgLSBrZXk6IFwiaG9zdFwiCiAgICAgICAgYWN0aW9uOiBpbnNlcnQKICAgICAgICB2YWx1ZTogXCIkKGhvc3RuYW1lKVwiCmV4dGVuc2lvbnM6CiAgaGVhbHRoX2NoZWNrOgogICAgZW5kcG9pbnQ6ICRpcGFkZHJlc3M6MTMxMzMKZXhwb3J0ZXJzOgogIG90bHA6CiAgICBlbmRwb2ludDogJHtzdGF0aWNfaXBfYWRkcmVzc1sibWRtIl19OjQzMTcKICAgIHRsczoKICAgICAgaW5zZWN1cmU6IHRydWUKc2VydmljZToKICBleHRlbnNpb25zOiBbaGVhbHRoX2NoZWNrXQogIHBpcGVsaW5lczoKICAgIG1ldHJpY3M6CiAgICAgIHJlY2VpdmVyczogW2h0dHBjaGVja10KICAgICAgcHJvY2Vzc29yczogW2JhdGNoLCBhdHRyaWJ1dGVzL2luc2VydF0KICAgICAgZXhwb3J0ZXJzOiBbb3RscF0iCgogICAgd3JpdGVfZmlsZSBhcm9fb3RlbF9jb2xsZWN0b3JfYXBwY29uZmlnX2ZpbGVuYW1lIGFyb19vdGVsX2NvbGxlY3Rvcl9hcHBjb25maWdfZmlsZSB0cnVlCgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciBhcm9fb3RlbF9jb2xsZWN0b3Jfc2VydmljZV9maWxlbmFtZT0nL2V0Yy9zeXN0ZW1kL3N5c3RlbS9hcm8tb3RlbC1jb2xsZWN0b3Iuc2VydmljZScKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgIyBiZWxvdyB2YXJpYWJsZSBpcyBpbiBzaW5nbGUgcXVvdGVzCiAgICAjIGFzIGl0IGlzIHRvIGJlIGV4cGFuZGVkIGF0IHN5c3RlbWQgc3RhcnQgdGltZSAoYnkgc3lzdGVtZCwgbm90IHRoaXMgc2NyaXB0KQogICAgbG9jYWwgLXIgYXJvX290ZWxfY29sbGVjdG9yX3NlcnZpY2VfZmlsZT0nW1VuaXRdCkFmdGVyPW1kbS5zZXJ2aWNlCldhbnRzPW1kbS5zZXJ2aWNlClN0YXJ0TGltaXRJbnRlcnZhbFNlYz0wCltTZXJ2aWNlXQpSZXN0YXJ0U2VjPTFzCkVudmlyb25tZW50RmlsZT0vZXRjL3N5c2NvbmZpZy9hcm8tb3RlbC1jb2xsZWN0b3IKRXhlY1N0YXJ0UHJlPS0vdXNyL2Jpbi9wb2RtYW4gcm0gLWYgJU4KRXhlY1N0YXJ0PS91c3IvYmluL3BvZG1hbiBydW4gXAogIC0taG9zdG5hbWUgJUggXAogIC0tbmFtZSAlTiBcCiAgLS1ybSBcCiAgLS1uZXR3b3JrPSR7UE9ETUFOX05FVFdPUkt9IFwKICAtLWlwICR7SVBBRERSRVNTfSBcCiAgLW0gMmcgXAogIC12IC9hcHAvb3RlbC9jb25maWcueWFtbDovZXRjL290ZWxjb2wtY29udHJpYi9jb25maWcueWFtbDp6IFwKICAke09URUxJTUFHRX0KRXhlY1N0b3A9L3Vzci9iaW4vcG9kbWFuIHN0b3AgJU4KUmVzdGFydD1hbHdheXMKUmVzdGFydFNlYz0zClN0YXJ0TGltaXRJbnRlcnZhbD0wCltJbnN0YWxsXQpXYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldCcKCiAgICB3cml0ZV9maWxlIGFyb19vdGVsX2NvbGxlY3Rvcl9zZXJ2aWNlX2ZpbGVuYW1lIGFyb19vdGVsX2NvbGxlY3Rvcl9zZXJ2aWNlX2ZpbGUgdHJ1ZQp9CgojIGNvbmZpZ3VyZV9zZXJ2aWNlX21kc2QKIyBhcmdzOgojIDEpIG1vbml0b3Jpbmdfcm9sZSAtIG5hbWVyZWYsIHN0cmluZzsgY2FuIGJlICJnYXRld2F5IiBvciAicnAiCiMgMikgbW9uaXRvcl9jb25maWdfdmVyc2lvbiAtIG5hbWVyZWYsIHN0cmluZzsgbWRzZCBjb25maWcgdmVyc2lvbgpjb25maWd1cmVfc2VydmljZV9tZHNkKCkgewogICAgbG9jYWwgLW4gcm9sZT0iJDEiCiAgICBsb2NhbCAtbiBtb25pdG9yX2NvbmZpZ192ZXJzaW9uPSIkMiIKICAgIGxvZyAic3RhcnRpbmciCiAgICBsb2cgImNvbmZpZ3VyaW5nIG1kc2Qgc2VydmljZSIKCiAgICB2ZXJpZnlfcm9sZSByb2xlCgogICAgbG9jYWwgLXIgbWRzZF9zZXJ2aWNlX2Rpcj0iL2V0Yy9zeXN0ZW1kL3N5c3RlbS9tZHNkLnNlcnZpY2UuZCIKICAgIG1rZGlyIC1wICIkbWRzZF9zZXJ2aWNlX2RpciIKCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIG1kc2Rfb3ZlcnJpZGVfY29uZl9maWxlbmFtZT0iJG1kc2Rfc2VydmljZV9kaXIvb3ZlcnJpZGUuY29uZiIKICAgIGxvY2FsIC1yIG1kc2RfY2VydGlmaWNhdGVfc2FuPSIkKG9wZW5zc2wgeDUwOSAtaW4gL3Zhci9saWIvd2FhZ2VudC9NaWNyb3NvZnQuQXp1cmUuS2V5VmF1bHQuU3RvcmUvbWRzZC5wZW0gLW5vb3V0IC1zdWJqZWN0IHwgc2VkIC1lICdzLy4qQ04gPSAvLycpIgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciBtZHNkX292ZXJyaWRlX2NvbmZfZmlsZT0iW1VuaXRdCkFmdGVyPW5ldHdvcmstb25saW5lLnRhcmdldCIKCiAgICB3cml0ZV9maWxlIG1kc2Rfb3ZlcnJpZGVfY29uZl9maWxlbmFtZSBtZHNkX292ZXJyaWRlX2NvbmZfZmlsZSB0cnVlCgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciBkZWZhdWx0X21kc2RfZmlsZW5hbWU9Ii9ldGMvZGVmYXVsdC9tZHNkIgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciBkZWZhdWx0X21kc2RfZmlsZT0iTURTRF9ST0xFX1BSRUZJWD0vdmFyL3J1bi9tZHNkL2RlZmF1bHQKTURTRF9PUFRJT05TPVwiLUEgLWQgLXIgXCRNRFNEX1JPTEVfUFJFRklYXCIKCmV4cG9ydCBNT05JVE9SSU5HX0dDU19FTlZJUk9OTUVOVD0nJE1EU0RFTlZJUk9OTUVOVCcKZXhwb3J0IE1PTklUT1JJTkdfR0NTX0FDQ09VTlQ9JyRSUE1EU0RBQ0NPVU5UJwpleHBvcnQgTU9OSVRPUklOR19HQ1NfUkVHSU9OPSckTE9DQVRJT04nCmV4cG9ydCBNT05JVE9SSU5HX0dDU19BVVRIX0lEX1RZUEU9QXV0aEtleVZhdWx0CmV4cG9ydCBNT05JVE9SSU5HX0dDU19BVVRIX0lEPSckbWRzZF9jZXJ0aWZpY2F0ZV9zYW4nCmV4cG9ydCBNT05JVE9SSU5HX0dDU19OQU1FU1BBQ0U9JyRSUE1EU0ROQU1FU1BBQ0UnCmV4cG9ydCBNT05JVE9SSU5HX0NPTkZJR19WRVJTSU9OPSckbW9uaXRvcl9jb25maWdfdmVyc2lvbicKZXhwb3J0IE1PTklUT1JJTkdfVVNFX0dFTkVWQV9DT05GSUdfU0VSVklDRT10cnVlCgpleHBvcnQgTU9OSVRPUklOR19URU5BTlQ9JyRMT0NBVElPTicKZXhwb3J0IE1PTklUT1JJTkdfUk9MRT0nJHJvbGUnCmV4cG9ydCBNT05JVE9SSU5HX1JPTEVfSU5TVEFOQ0U9XCIkKGhvc3RuYW1lKVwiCgpleHBvcnQgTURTRF9NU0dQQUNLX1NPUlRfQ09MVU1OUz1cIjFcIiIKCiAgICB3cml0ZV9maWxlIGRlZmF1bHRfbWRzZF9maWxlbmFtZSBkZWZhdWx0X21kc2RfZmlsZSB0cnVlCn0KCiMgY29uZmlndXJlX3NlcnZpY2VfZmx1ZW50Yml0CiMgYXJnczoKIyAxKSBjb25mX2ZpbGUgLSBzdHJpbmc7IGZsdWVuYml0IGNvbmZpZ3VyYXRpb24gZmlsZQojIDIpIGltYWdlIC0gc3RyaW5nOyBmbHVlbnRiaXQgY29udGFpbmVyIGltYWdlIHRvIHJ1bgojIDMpIGlwYWRkcmVzcyAtIG5hbWVyZWYsIHN0cmluZzsgc3RhdGljIGlwIG9mIHBvZG1hbiBuZXR3b3JrIHRvIGJlIGF0dGFjaGVkCmNvbmZpZ3VyZV9zZXJ2aWNlX2ZsdWVudGJpdCgpIHsKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLW4gY29uZl9maWxlPSIkMSIKICAgIGxvY2FsIC1uIGltYWdlPSIkMiIKICAgIGxvZyAic3RhcnRpbmciCiAgICBsb2cgIkNvbmZpZ3VyaW5nIGZsdWVudGJpdCBzZXJ2aWNlIgoKICAgIG1rZGlyIC1wIC9ldGMvZmx1ZW50Yml0LwogICAgbWtkaXIgLXAgL3Zhci9saWIvZmx1ZW50CgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciBjb25mX2ZpbGVuYW1lPScvZXRjL2ZsdWVudGJpdC9mbHVlbnRiaXQuY29uZicKICAgIHdyaXRlX2ZpbGUgY29uZl9maWxlbmFtZSBjb25mX2ZpbGUgdHJ1ZQoKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgc3lzY29uZmlnX2ZpbGVuYW1lPScvZXRjL3N5c2NvbmZpZy9mbHVlbnRiaXQnCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIHN5c2NvbmZpZ19maWxlPSJGTFVFTlRCSVRJTUFHRT0kaW1hZ2UiCgogICAgd3JpdGVfZmlsZSBzeXNjb25maWdfZmlsZW5hbWUgc3lzY29uZmlnX2ZpbGUgdHJ1ZQoKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgc2VydmljZV9maWxlbmFtZT0nL2V0Yy9zeXN0ZW1kL3N5c3RlbS9mbHVlbnRiaXQuc2VydmljZScKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgIyBiZWxvdyB2YXJpYWJsZSBpcyBpbiBzaW5nbGUgcXVvdGVzCiAgICAjIGFzIGl0IGlzIHRvIGJlIGV4cGFuZGVkIGF0IHN5c3RlbWQgc3RhcnQgdGltZSAoYnkgc3lzdGVtZCwgbm90IHRoaXMgc2NyaXB0KQogICAgbG9jYWwgLXIgc2VydmljZV9maWxlPSdbVW5pdF0KQWZ0ZXI9bmV0d29yay1vbmxpbmUudGFyZ2V0CldhbnRzPW5ldHdvcmstb25saW5lLnRhcmdldApTdGFydExpbWl0SW50ZXJ2YWxTZWM9MAoKW1NlcnZpY2VdClJlc3RhcnRTZWM9MXMKRW52aXJvbm1lbnRGaWxlPS9ldGMvc3lzY29uZmlnL2ZsdWVudGJpdApFeGVjU3RhcnRQcmU9LS91c3IvYmluL3BvZG1hbiBybSAtZiAlTgpFeGVjU3RhcnQ9L3Vzci9iaW4vcG9kbWFuIHJ1biBcCiAgLS1zZWN1cml0eS1vcHQgbGFiZWw9ZGlzYWJsZSBcCiAgLS1lbnRyeXBvaW50IC9vcHQvdGQtYWdlbnQtYml0L2Jpbi90ZC1hZ2VudC1iaXQgXAogIC0tbmV0PWhvc3QgXAogIC0taG9zdG5hbWUgJUggXAogIC0tbmFtZSAlTiBcCiAgLS1ybSBcCiAgLS1jYXAtZHJvcCBuZXRfcmF3IFwKICAtdiAvZXRjL2ZsdWVudGJpdC9mbHVlbnRiaXQuY29uZjovZXRjL2ZsdWVudGJpdC9mbHVlbnRiaXQuY29uZiBcCiAgLXYgL3Zhci9saWIvZmx1ZW50Oi92YXIvbGliL2ZsdWVudDp6IFwKICAtdiAvdmFyL2xvZy9qb3VybmFsOi92YXIvbG9nL2pvdXJuYWw6cm8gXAogIC12IC9ldGMvbWFjaGluZS1pZDovZXRjL21hY2hpbmUtaWQ6cm8gXAogICR7RkxVRU5UQklUSU1BR0V9IFwKICAtYyAvZXRjL2ZsdWVudGJpdC9mbHVlbnRiaXQuY29uZgoKRXhlY1N0b3A9L3Vzci9iaW4vcG9kbWFuIHN0b3AgJU4KUmVzdGFydD1hbHdheXMKUmVzdGFydFNlYz01ClN0YXJ0TGltaXRJbnRlcnZhbD0wCgpbSW5zdGFsbF0KV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQnCgogICAgd3JpdGVfZmlsZSBzZXJ2aWNlX2ZpbGVuYW1lIHNlcnZpY2VfZmlsZSB0cnVlCn0KCiMgY29uZmlndXJlX3RpbWVyc19tZG1fbWRzZAojIGFyZ3M6CiMgMSkgcm9sZSAtIHN0cmluZzsgY2FuIGJlICJnYXRld2F5IiBvciAicnAiCmNvbmZpZ3VyZV90aW1lcnNfbWRtX21kc2QoKSB7CiAgICBsb2NhbCAtbiByb2xlPSIkMSIKICAgIGxvZyAic3RhcnRpbmciCgogICAgdmVyaWZ5X3JvbGUgcm9sZQoKICAgIGxvY2FsIGtleXZhdWx0X3N1ZmZpeCBzZWNyZXRfcHJlZml4CiAgICBnZXRfa2V5dmF1bHRfc3VmZml4IHJvbGUga2V5dmF1bHRfc3VmZml4IHNlY3JldF9wcmVmaXgKCiAgICBmb3IgdmFyIGluICJtZHNkIiAibWRtIjsgZG8KICAgICAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgICAgICBsb2NhbCBkb3dubG9hZF9jcmVkc19zZXJ2aWNlX2ZpbGVuYW1lPSIvZXRjL3N5c3RlbWQvc3lzdGVtL2Rvd25sb2FkLSR2YXItY3JlZGVudGlhbHMuc2VydmljZSIKICAgICAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgICAgICBsb2NhbCBkb3dubG9hZF9jcmVkc19zZXJ2aWNlX2ZpbGU9IltVbml0XQpEZXNjcmlwdGlvbj1QZXJpb2RpYyAkdmFyIGNyZWRlbnRpYWxzIHJlZnJlc2gKCltTZXJ2aWNlXQpUeXBlPW9uZXNob3QKRXhlY1N0YXJ0PS91c3IvbG9jYWwvYmluL2Rvd25sb2FkLWNyZWRlbnRpYWxzLnNoICR2YXIiCgogICAgICAgIHdyaXRlX2ZpbGUgZG93bmxvYWRfY3JlZHNfc2VydmljZV9maWxlbmFtZSBkb3dubG9hZF9jcmVkc19zZXJ2aWNlX2ZpbGUgdHJ1ZQoKICAgICAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgICAgICBsb2NhbCBkb3dubG9hZF9jcmVkc190aW1lcl9maWxlbmFtZT0iL2V0Yy9zeXN0ZW1kL3N5c3RlbS9kb3dubG9hZC0kdmFyLWNyZWRlbnRpYWxzLnRpbWVyIgogICAgICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgICAgIGxvY2FsIGRvd25sb2FkX2NyZWRzX3RpbWVyX2ZpbGU9IltVbml0XQpEZXNjcmlwdGlvbj1QZXJpb2RpYyAkdmFyIGNyZWRlbnRpYWxzIHJlZnJlc2gKQWZ0ZXI9bmV0d29yay1vbmxpbmUudGFyZ2V0CldhbnRzPW5ldHdvcmstb25saW5lLnRhcmdldAoKW1RpbWVyXQpPbkJvb3RTZWM9MG1pbgpPbkNhbGVuZGFyPTAvMTI6MDA6MDAKQWNjdXJhY3lTZWM9NXMKCltJbnN0YWxsXQpXYW50ZWRCeT10aW1lcnMudGFyZ2V0IgoKICAgICAgICB3cml0ZV9maWxlIGRvd25sb2FkX2NyZWRzX3RpbWVyX2ZpbGVuYW1lIGRvd25sb2FkX2NyZWRzX3RpbWVyX2ZpbGUgdHJ1ZQogICAgZG9uZQoKICAgIGxvY2FsIC1yIGRvd25sb2FkX2NyZWRzX3NjcmlwdF9maWxlbmFtZT0iL3Vzci9sb2NhbC9iaW4vZG93bmxvYWQtY3JlZGVudGlhbHMuc2giCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIGRvd25sb2FkX2NyZWRzX3NjcmlwdF9maWxlPSIjIS9iaW4vYmFzaApzZXQgLWV1CgpDT01QT05FTlQ9XCQxCmVjaG8gXCJEb3dubG9hZCBcJENPTVBPTkVOVCBjcmVkZW50aWFsc1wiCgpURU1QX0RJUj1cIlwkKG1rdGVtcCAtZClcIgpleHBvcnQgQVpVUkVfQ09ORklHX0RJUj1cIlwkKG1rdGVtcCAtZClcIgoKZWNobyBcIkxvZ2dpbmcgaW50byBBenVyZS4uLlwiClJFVFJJRVM9Mwp3aGlsZSBbWyBcJFJFVFJJRVMgLWd0IDAgXV07IGRvCiAgICBpZiBheiBsb2dpbiAtaSAtLWFsbG93LW5vLXN1YnNjcmlwdGlvbnMKICAgIHRoZW4KICAgICAgICBlY2hvIFwiYXogbG9naW4gc3VjY2Vzc2Z1bFwiCiAgICAgICAgYnJlYWsKICAgIGVsc2UKICAgICAgICBlY2hvIFwiYXogbG9naW4gZmFpbGVkLiBSZXRyeWluZy4uLlwiCiAgICAgICAgbGV0IFJFVFJJRVMtPTEKICAgICAgICBzbGVlcCA1CiAgICBmaQpkb25lCgp0cmFwIFwiY2xlYW51cFwiIEVYSVQKCmNsZWFudXAoKSB7CiAgYXogbG9nb3V0CiAgW1sgXCRURU1QX0RJUiA9fiAvdG1wLy4rIF1dICYmIHJtIC1yZiBcJFRFTVBfRElSCiAgW1sgXCRBWlVSRV9DT05GSUdfRElSID1+IC90bXAvLisgXV0gJiYgcm0gLXJmIFwkQVpVUkVfQ09ORklHX0RJUgp9CgppZiBbWyBcJENPTVBPTkVOVCA9IFwibWRtXCIgXV07IHRoZW4KICBDVVJSRU5UX0NFUlRfRklMRT1cIi9ldGMvbWRtLnBlbVwiCmVsaWYgW1sgXCRDT01QT05FTlQgPSBcIm1kc2RcIiBdXTsgdGhlbgogIENVUlJFTlRfQ0VSVF9GSUxFPVwiL3Zhci9saWIvd2FhZ2VudC9NaWNyb3NvZnQuQXp1cmUuS2V5VmF1bHQuU3RvcmUvbWRzZC5wZW1cIgplbHNlCiAgZWNobyBJbnZhbGlkIHVzYWdlICYmIGV4aXQgMQpmaQoKU0VDUkVUX05BTUU9XCIkc2VjcmV0X3ByZWZpeC1cJHtDT01QT05FTlR9XCIKTkVXX0NFUlRfRklMRT1cIlwkVEVNUF9ESVIvXCRDT01QT05FTlQucGVtXCIKZm9yIGF0dGVtcHQgaW4gezEuLjV9OyBkbwogIGF6IGtleXZhdWx0IFwKICAgIHNlY3JldCBcCiAgICBkb3dubG9hZCBcCiAgICAtLWZpbGUgXCJcJE5FV19DRVJUX0ZJTEVcIiBcCiAgICAtLWlkIFwiaHR0cHM6Ly8kS0VZVkFVTFRQUkVGSVgtJGtleXZhdWx0X3N1ZmZpeC4kS0VZVkFVTFRETlNTVUZGSVgvc2VjcmV0cy9cJFNFQ1JFVF9OQU1FXCIgXAogICAgJiYgYnJlYWsKICBpZiBbWyBcJGF0dGVtcHQgLWx0IDUgXV07IHRoZW4gc2xlZXAgMTA7IGVsc2UgZXhpdCAxOyBmaQpkb25lCgppZiBbIC1mIFwkTkVXX0NFUlRfRklMRSBdOyB0aGVuCiAgaWYgW1sgXCRDT01QT05FTlQgPSBcIm1kc2RcIiBdXTsgdGhlbgogICAgY2hvd24gc3lzbG9nOnN5c2xvZyBcJE5FV19DRVJUX0ZJTEUKICBlbHNlCiAgICBzZWQgLWkgLW5lICcxLC9FTkQgQ0VSVElGSUNBVEUvIHAnIFwkTkVXX0NFUlRfRklMRQogIGZpCgogIG5ld19jZXJ0X3NuPVwiXCQob3BlbnNzbCB4NTA5IC1pbiBcIlwkTkVXX0NFUlRfRklMRVwiIC1ub291dCAtc2VyaWFsIHwgYXdrIC1GPSAne3ByaW50IFwkMn0nKVwiCiAgY3VycmVudF9jZXJ0X3NuPVwiXCQob3BlbnNzbCB4NTA5IC1pbiBcIlwkQ1VSUkVOVF9DRVJUX0ZJTEVcIiAtbm9vdXQgLXNlcmlhbCB8IGF3ayAtRj0gJ3twcmludCBcJDJ9JylcIgogIGlmIFtbICEgLXogXCRuZXdfY2VydF9zbiBdXSAmJiBbWyBcJG5ld19jZXJ0X3NuICE9IFwiXCRjdXJyZW50X2NlcnRfc25cIiBdXTsgdGhlbgogICAgZWNobyB1cGRhdGluZyBjZXJ0aWZpY2F0ZSBmb3IgXCRDT01QT05FTlQKICAgIGNobW9kIDA2MDAgXCRORVdfQ0VSVF9GSUxFCiAgICBtdiBcJE5FV19DRVJUX0ZJTEUgXCRDVVJSRU5UX0NFUlRfRklMRQogIGZpCmVsc2UKICBlY2hvIEZhaWxlZCB0byByZWZyZXNoIGNlcnRpZmljYXRlIGZvciBcJENPTVBPTkVOVCAmJiBleGl0IDEKZmkiCgogICAgd3JpdGVfZmlsZSBkb3dubG9hZF9jcmVkc19zY3JpcHRfZmlsZW5hbWUgZG93bmxvYWRfY3JlZHNfc2NyaXB0X2ZpbGUgdHJ1ZQoKICAgIGNobW9kIHUreCAvdXNyL2xvY2FsL2Jpbi9kb3dubG9hZC1jcmVkZW50aWFscy5zaAoKICAgICRkb3dubG9hZF9jcmVkc19zY3JpcHRfZmlsZW5hbWUgbWRzZCAmCiAgICB3YWl0ICIkISIKCgogICAgJGRvd25sb2FkX2NyZWRzX3NjcmlwdF9maWxlbmFtZSBtZG0gJgogICAgd2FpdCAiJCEiCgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciB3YXRjaF9tZG1fY3JlZHNfc2VydmljZV9maWxlbmFtZT0iL2V0Yy9zeXN0ZW1kL3N5c3RlbS93YXRjaC1tZG0tY3JlZGVudGlhbHMuc2VydmljZSIKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgd2F0Y2hfbWRtX2NyZWRzX3NlcnZpY2VfZmlsZT0iW1VuaXRdCkRlc2NyaXB0aW9uPVdhdGNoIGZvciBjaGFuZ2VzIGluIG1kbS5wZW0gYW5kIHJlc3RhcnRzIHRoZSBtZG0gc2VydmljZQoKW1NlcnZpY2VdClR5cGU9b25lc2hvdApFeGVjU3RhcnQ9L3Vzci9iaW4vc3lzdGVtY3RsIHJlc3RhcnQgbWRtLnNlcnZpY2UKCltJbnN0YWxsXQpXYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldCIKCiAgICB3cml0ZV9maWxlIHdhdGNoX21kbV9jcmVkc19zZXJ2aWNlX2ZpbGVuYW1lIHdhdGNoX21kbV9jcmVkc19zZXJ2aWNlX2ZpbGUgdHJ1ZQoKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgd2F0Y2hfbWRtX2NyZWRzX3BhdGhfZmlsZW5hbWU9Jy91c3IvbGliL3N5c3RlbWQvc3lzdGVtL3dhdGNoLW1kbS1jcmVkZW50aWFscy5wYXRoJwogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciB3YXRjaF9tZG1fY3JlZHNfcGF0aF9maWxlPSdbUGF0aF0KUGF0aE1vZGlmaWVkPS9ldGMvbWRtLnBlbQoKW0luc3RhbGxdCldhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0JwoKICAgIHdyaXRlX2ZpbGUgd2F0Y2hfbWRtX2NyZWRzX3BhdGhfZmlsZW5hbWUgd2F0Y2hfbWRtX2NyZWRzX3BhdGhfZmlsZSB0cnVlCgogICAgbG9jYWwgLXIgd2F0Y2hfbWRtX2NyZWRzPSd3YXRjaC1tZG0tY3JlZGVudGlhbHMucGF0aCcKICAgIHN5c3RlbWN0bCBlbmFibGUgLS1ub3cgIiR3YXRjaF9tZG1fY3JlZHMiIHx8IGFib3J0ICJmYWlsZWQgdG8gZW5hYmxlIGFuZCBzdGFydCAkd2F0Y2hfbWRtX2NyZWRzIgp9CgojIGNvbmZpZ3VyZV9zZXJ2aWNlX21kbQojIGFyZ3M6CiMgMSkgcm9sZSAtIG5hbWVyZWYsIHN0cmluZzsgY2FuIGJlICJnYXRld2F5IiBvciAicnAiCiMgMikgaW1hZ2UgLSBuYW1lcmVmLCBzdHJpbmc7IG1kbSBjb250YWluZXIgaW1hZ2UgdG8gcnVuCiMgMykgaXBhZGRyZXNzIC0gbmFtZXJlZiwgc3RyaW5nOyBzdGF0aWMgaXAgb2YgcG9kbWFuIG5ldHdvcmsgdG8gYmUgYXR0YWNoZWQKY29uZmlndXJlX3NlcnZpY2VfbWRtKCkgewogICAgbG9jYWwgLW4gcm9sZT0iJDEiCiAgICBsb2NhbCAtbiBpbWFnZT0iJDIiCiAgICBsb2NhbCAtbiBpcGFkZHJlc3M9IiQzIgogICAgbG9nICJzdGFydGluZyIKICAgIGxvZyAiQ29uZmlndXJpbmcgbWRtIHNlcnZpY2UiCgogICAgdmVyaWZ5X3JvbGUgcm9sZQoKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgc3lzY29uZmlnX21kbV9maWxlbmFtZT0iL2V0Yy9zeXNjb25maWcvbWRtIgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciBzeXNjb25maWdfbWRtX2ZpbGU9Ik1ETUZST05URU5EVVJMPSckTURNRlJPTlRFTkRVUkwnCk1ETUlNQUdFPSckaW1hZ2UnCk1ETVNPVVJDRUVOVklST05NRU5UPSckTE9DQVRJT04nCk1ETVNPVVJDRVJPTEU9JyRyb2xlJwpNRE1TT1VSQ0VST0xFSU5TVEFOQ0U9XCIkKGhvc3RuYW1lKVwiCk1ETV9JTlBVVD1zdGF0c2RfbG9jYWwsb3RscF9ncnBjCk1ETV9OQU1FU1BBQ0U9J09URUwnCk1ETV9BQ0NPVU5UPSdBenVyZVJlZEhhdE9wZW5TaGlmdFJQJwpQT0RNQU5fTkVUV09SSz0ncG9kbWFuJwpJUEFERFJFU1M9JyRpcGFkZHJlc3MnIgoKICAgIHdyaXRlX2ZpbGUgc3lzY29uZmlnX21kbV9maWxlbmFtZSBzeXNjb25maWdfbWRtX2ZpbGUgdHJ1ZQoKICAgIG1rZGlyIC1wIC92YXIvZXR3CiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIG1kbV9zZXJ2aWNlX2ZpbGVuYW1lPSIvZXRjL3N5c3RlbWQvc3lzdGVtL21kbS5zZXJ2aWNlIgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICAjIGJlbG93IHZhcmlhYmxlIGlzIGluIHNpbmdsZSBxdW90ZXMKICAgICMgYXMgaXQgaXMgdG8gYmUgZXhwYW5kZWQgYXQgc3lzdGVtZCBzdGFydCB0aW1lIChieSBzeXN0ZW1kLCBub3QgdGhpcyBzY3JpcHQpCiAgICBsb2NhbCAtciBtZG1fc2VydmljZV9maWxlPSdbVW5pdF0KQWZ0ZXI9bmV0d29yay1vbmxpbmUudGFyZ2V0CldhbnRzPW5ldHdvcmstb25saW5lLnRhcmdldAoKW1NlcnZpY2VdCkVudmlyb25tZW50RmlsZT0vZXRjL3N5c2NvbmZpZy9tZG0KRXhlY1N0YXJ0UHJlPS0vdXNyL2Jpbi9wb2RtYW4gcm0gLWYgJU4KRXhlY1N0YXJ0PS91c3IvYmluL3BvZG1hbiBydW4gXAogIC0tZW50cnlwb2ludCAvdXNyL3NiaW4vTWV0cmljc0V4dGVuc2lvbiBcCiAgLS1ob3N0bmFtZSAlSCBcCiAgLS1uYW1lICVOIFwKICAtLXJtIFwKICAtLWNhcC1kcm9wIG5ldF9yYXcgXAogIC0tbmV0d29yaz0ke1BPRE1BTl9ORVRXT1JLfSBcCiAgLS1pcCAke0lQQUREUkVTU30gXAogIC1tIDJnIFwKICAtdiAvZXRjL21kbS5wZW06L2V0Yy9tZG0ucGVtIFwKICAtdiAvdmFyL2V0dzovdmFyL2V0dzp6IFwKICAke01ETUlNQUdFfSBcCiAgLUlucHV0ICR7TURNX0lOUFVUfSBcCiAgLU1ldHJpY05hbWVzcGFjZSAke01ETV9OQU1FU1BBQ0V9IFwKICAtTW9uaXRvcmluZ0FjY291bnQgJHtNRE1fQUNDT1VOVH0gXAogIC1DZXJ0RmlsZSAvZXRjL21kbS5wZW0gXAogIC1Gcm9udEVuZFVybCAke01ETUZST05URU5EVVJMfSBcCiAgLUxvZ2dlciBDb25zb2xlIFwKICAtTG9nTGV2ZWwgV2FybmluZyBcCiAgLVByaXZhdGVLZXlGaWxlIC9ldGMvbWRtLnBlbSBcCiAgLVNvdXJjZUVudmlyb25tZW50ICR7TURNU09VUkNFRU5WSVJPTk1FTlR9IFwKICAtU291cmNlUm9sZSAke01ETVNPVVJDRVJPTEV9IFwKICAtU291cmNlUm9sZUluc3RhbmNlICR7TURNU09VUkNFUk9MRUlOU1RBTkNFfQpFeGVjU3RvcD0vdXNyL2Jpbi9wb2RtYW4gc3RvcCAlTgpSZXN0YXJ0PWFsd2F5cwpSZXN0YXJ0U2VjPTEKU3RhcnRMaW1pdEludGVydmFsPTAKCltJbnN0YWxsXQpXYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldCcKCiAgICB3cml0ZV9maWxlIG1kbV9zZXJ2aWNlX2ZpbGVuYW1lIG1kbV9zZXJ2aWNlX2ZpbGUgdHJ1ZQp9CgojIGNvbmZpZ3VyZV92bXNzX2Fyb19zZXJ2aWNlCiMgYXJnczoKIyAxKSByIC0gbmFtZXJlZiwgc3RyaW5nOyByb2xlIG9mIFZNU1MKIyAyKSBpbWFnZXMgLSBuYW1lcmVmLCBhc3NvY2lhdGl2ZSBhcnJheTsgQVJPIGNvbnRhaW5lciBpbWFnZXMKIyAzKSBjb25maWdzIC0gbmFtZXJlZiwgYXNzb2NpYXRpdmUgYXJyYXk7IGNvbmZpZ3VyYXRpb24gZmlsZXMgYW5kIHZlcnNpb25zLiBUaGUgdmFsdWVzIHNob3VsZCBiZSBhIHJlZmVyZW5jZSB0byB2YXJpYWJsZXMsIG5vdCBkZXJlZmVyZW5jZWQuCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIGJlY2F1c2UgdGhlIHZhbHVlIGlzIHVzZWQgd2hlbiBjcmVhdGluZyBuYW1lcmVmIHZhcmlhYmxlcyBieSBoZWxwZXIgZnVuY3Rpb25zLgpjb25maWd1cmVfdm1zc19hcm9fc2VydmljZXMoKSB7CiAgICBsb2NhbCAtbiByPSIkMSIKICAgIGxvY2FsIC1uIGltYWdlcz0iJDIiCiAgICBsb2NhbCAtbiBjb25maWdzPSIkMyIKICAgIGxvZyAic3RhcnRpbmciCiAgICB2ZXJpZnlfcm9sZSAiJDEiCgogICAgaWYgWyAiJHIiID09ICIkcm9sZV9nYXRld2F5IiBdOyB0aGVuCiAgICAgICAgY29uZmlndXJlX3NlcnZpY2VfYXJvX2dhdGV3YXkgIiR7aW1hZ2VzWyJycCJdfSIgIiQxIiAiJHtjb25maWdzWyJnYXRld2F5X2NvbmZpZyJdfSIgIiR7Y29uZmlnc1sic3RhdGljX2lwX2FkZHJlc3MiXX1bImdhdGV3YXkiXSIKICAgICAgICBjb25maWd1cmVfY2VydHNfZ2F0ZXdheQogICAgZWxpZiBbICIkciIgPT0gIiRyb2xlX3JwIiBdOyB0aGVuCiAgICAgICAgY29uZmlndXJlX3NlcnZpY2VfYXJvX3JwICIke2ltYWdlc1sicnAiXX0iICIkMSIgIiR7Y29uZmlnc1sicnBfY29uZmlnIl19IiAiJHtjb25maWdzWyJzdGF0aWNfaXBfYWRkcmVzcyJdfVsicnAiXSIKICAgICAgICBjb25maWd1cmVfc2VydmljZV9hcm9fbWltb19hY3R1YXRvciAiJHtpbWFnZXNbInJwIl19IiAiJHtjb25maWdzWyJycF9jb25maWciXX0iICIke2NvbmZpZ3NbInN0YXRpY19pcF9hZGRyZXNzIl19WyJtaW1vX2FjdHVhdG9yIl0iCiAgICAgICAgY29uZmlndXJlX3NlcnZpY2VfYXJvX21pbW9fc2NoZWR1bGVyICIke2ltYWdlc1sicnAiXX0iICIke2NvbmZpZ3NbInJwX2NvbmZpZyJdfSIgIiR7Y29uZmlnc1sic3RhdGljX2lwX2FkZHJlc3MiXX1bIm1pbW9fc2NoZWR1bGVyIl0iCiAgICAgICAgY29uZmlndXJlX3NlcnZpY2VfYXJvX21vbml0b3IgIiR7aW1hZ2VzWyJycCJdfSIgIiR7Y29uZmlnc1sic3RhdGljX2lwX2FkZHJlc3MiXX1bIm1vbml0b3IiXSIKICAgICAgICBjb25maWd1cmVfc2VydmljZV9hcm9fcG9ydGFsICIke2ltYWdlc1sicnAiXX0iICIke2NvbmZpZ3NbInN0YXRpY19pcF9hZGRyZXNzIl19WyJwb3J0YWwiXSIKICAgICAgICBjb25maWd1cmVfc2VydmljZV9hcm9fbWlzZSAiJHtpbWFnZXNbIm1pc2UiXX0iICIke2NvbmZpZ3NbInN0YXRpY19pcF9hZGRyZXNzIl19WyJtaXNlIl0iCiAgICAgICAgY29uZmlndXJlX3NlcnZpY2VfYXJvX290ZWxfY29sbGVjdG9yICIke2ltYWdlc1sib3RlbCJdfSIgIiR7Y29uZmlnc1sic3RhdGljX2lwX2FkZHJlc3MiXX0iICIke2NvbmZpZ3NbInN0YXRpY19pcF9hZGRyZXNzIl19WyJvdGVsX2NvbGxlY3RvciJdIgogICAgICAgIGNvbmZpZ3VyZV9jZXJ0c19ycAogICAgZmkKCiAgICBjb25maWd1cmVfc2VydmljZV9mbHVlbnRiaXQgIiR7Y29uZmlnc1siZmx1ZW50Yml0Il19IiAiJHtpbWFnZXNbImZsdWVudGJpdCJdfSIKICAgIGNvbmZpZ3VyZV90aW1lcnNfbWRtX21kc2QgIiQxIgogICAgY29uZmlndXJlX3NlcnZpY2VfbWRtICIkMSIgIiR7aW1hZ2VzWyJtZG0iXX0iICIke2NvbmZpZ3NbInN0YXRpY19pcF9hZGRyZXNzIl19WyJtZG0iXSIKICAgIGNvbmZpZ3VyZV9zZXJ2aWNlX21kc2QgIiQxIiAiJHtjb25maWdzWyJtZHNkIl19IgogICAgcnVuX2F6c2VjZF9jb25maWdfc2Nhbgp9CgojIHV0aWwtY29tbW9uLnNoIGRvZXMgbm90IGV4aXN0IHdoZW4gZGVwbG95ZWQgdG8gVk1TUyB2aWEgVk1TUyBleHRlbnNpb25zCiMgUHJvdmlkZXMgc2hlbGxjaGVjayBkZWZpbml0aW9ucwp1dGlsX2NvbW1vbj0idXRpbC1jb21tb24uc2giCmlmIFsgLWYgIiR1dGlsX2NvbW1vbiIgXTsgdGhlbgogICAgIyBzaGVsbGNoZWNrIHNvdXJjZT11dGlsLWNvbW1vbi5zaAogICAgc291cmNlICIkdXRpbF9jb21tb24iCmZpCgojIHV0aWwtc3lzdGVtLnNoIGRvZXMgbm90IGV4aXN0IHdoZW4gZGVwbG95ZWQgdG8gVk1TUyB2aWEgVk1TUyBleHRlbnNpb25zCiMgUHJvdmlkZXMgc2hlbGxjaGVjayBkZWZpbml0aW9ucwp1dGlsX3N5c3RlbT0idXRpbC1zeXN0ZW0uc2giCmlmIFsgLWYgIiR1dGlsX3N5c3RlbSIgXTsgdGhlbgogICAgIyBzaGVsbGNoZWNrIHNvdXJjZT11dGlsLXN5c3RlbS5zaAogICAgc291cmNlICIkdXRpbF9zeXN0ZW0iCmZpCiMhL2Jpbi9iYXNoCiMgVGhpcyBmaWxlIGlzIGludGVuZGVkIHRvIGJlIHNvdXJjZWQgYnkgYm9vdHN0cmFwcGluZyBzY3JpcHRzIGZvciBjb21tb25seSB1c2VkIGZ1bmN0aW9ucwoKIyBnZXRfYm9vdF9kZXZfdXVpZAojIEdldCB0aGUgYm9vdCBkZXZpY2VzIHV1aWQKIyBhcmdzOgojIDEpIGJvb3RfZGV2X3V1aWQgLSBuYW1lcmVmLCBzdHJpbmc7IEVtcHR5IHZhcmlhYmxlIGZvciBib290IGRldmljZSB1dWlkIGFzc2lnbm1lbnQKIyBUYWtlbiBhbmQgcmVmYWN0b3JlZCBmcm9tIGh0dHBzOi8vZW5nLm1zL2RvY3MvcHJvZHVjdHMvYXp1cmUtbGludXgvZmVhdHVyZXMvc2VjdXJpdHkvZmlwcwpnZXRfYm9vdF9kZXZfdXVpZCgpIHsKICAgIGxvY2FsIC1uIGJvb3RfZGV2X3V1aWQ9IiQxIgogICAgIyBTZXQgYm9vdF91dWlkIHZhcmlhYmxlIGZvciB0aGUgYm9vdCBwYXJ0aXRpb24gaWYgZGlmZmVyZW50IGZyb20gdGhlIHJvb3QKICAgIGJvb3RfZGV2PSIkKGRmIC9ib290LyB8IHRhaWwgLTEgfCBjdXQgLWQnICcgLWYxKSIKICAgIHJvb3RfZGV2PSIkKGRmIC8gfCB0YWlsIC0xIHwgY3V0IC1kJyAnIC1mMSkiCgogICAgYm9vdF9kZXZfdXVpZD0iJHJvb3RfZGV2IgogICAgaWYgWyAiJGJvb3RfZGV2IiAhPSAiJHJvb3RfZGV2IiBdOyB0aGVuCiAgICAgICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICAgICAgYm9vdF9kZXZfdXVpZD0iYm9vdD1VVUlEPSQoYmxraWQgIiRib290X2RldiIgLXMgVVVJRCAtbyB2YWx1ZSkiCiAgICBmaQp9CgojIGZpcHNfdmVyaWZ5CiMgVmVyaWZ5IHRoYXQgZmlwcyBtb2RlIGlzIGVuYWJsZWQKIyBUYWtlbiBhbmQgcmVmYWN0b3JlZCBmcm9tIGh0dHBzOi8vZW5nLm1zL2RvY3MvcHJvZHVjdHMvYXp1cmUtbGludXgvZmVhdHVyZXMvc2VjdXJpdHkvZmlwcwpmaXBzX3ZlcmlmeSgpIHsKICAgIGZpcHNfZW5hYmxlZF9wcm9jPSIkKGNhdCAvcHJvYy9zeXMvY3J5cHRvL2ZpcHNfZW5hYmxlZCkiCiAgICBmaXBzX2VuYWJsZWRfc3lzY3RsPSIkKHN5c2N0bCAtbiBjcnlwdG8uZmlwc19lbmFibGVkKSIKICAgIGlmIFsgIiRmaXBzX2VuYWJsZWRfcHJvYyIgLW5lIDEgXSB8fCBbICIkZmlwc19lbmFibGVkX3N5c2N0bCIgLW5lIDEgXTsgdGhlbgogICAgICAgIGFib3J0ICJGSVBTIG1vZGUgaXMgZGlzYWJsZWQiCiAgICBmaQoKICAgIGxvZyAiRklQUyBtb2RlIGlzIGVuYWJsZWQiCn0KCiMgZmlwc19jb25maWd1cmUKIyBDb25maWd1cmVzIFZNIHRvIHJ1biB3aXRoIGZpcHMgbW9kZSBlbmFibGVkCiMgVGFrZW4gYW5kIHJlZmFjdG9yZWQgZnJvbSBodHRwczovL2VuZy5tcy9kb2NzL3Byb2R1Y3RzL2F6dXJlLWxpbnV4L2ZlYXR1cmVzL3NlY3VyaXR5L2ZpcHMKIyBUT0RPIHJlbW92ZSB0aGlzIG9uY2Ugc2t1IGNibC1tYXJpbmVyLTItZ2VuMi1maXBzIGlzIHN1cHBvcnRlZCBieSBhdXRvbWF0aWMgT1MgdXBkYXRlcwojIFJlZmVyZW5jZTogaHR0cHM6Ly9sZWFybi5taWNyb3NvZnQuY29tL2VuLXVzL2F6dXJlL3ZpcnR1YWwtbWFjaGluZS1zY2FsZS1zZXRzL3ZpcnR1YWwtbWFjaGluZS1zY2FsZS1zZXRzLWF1dG9tYXRpYy11cGdyYWRlI3N1cHBvcnRlZC1vcy1pbWFnZXMKZmlwc19jb25maWd1cmUoKSB7CiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIGJvb3RfdXVpZAogICAgZ2V0X2Jvb3RfZGV2X3V1aWQgYm9vdF91dWlkCgogICAgbG9jYWwgZ3J1YjJfZW52CiAgICBpZiBncnViMl9lbnY9IiQoZ3J1YjItZWRpdGVudiAtIGxpc3QgfCBncmVwIGtlcm5lbG9wdHMpIjsgdGhlbgogICAgICAgIGdydWIyLWVkaXRlbnYgLSBzZXQgIiRncnViMl9lbnYgZmlwcz0xICRib290X3V1aWQiCiAgICBlbHNlCiAgICAgICAgZ3J1YmJ5IC0tdXBkYXRlLWtlcm5lbD1BTEwgLS1hcmdzPSJmaXBzPTEgJGJvb3RfdXVpZCIKICAgIGZpCgogICAgIyBmaXBzIG1vZGUgdmVyaWZpY2F0aW9uIHdpbGwgZmFpbCB1bnRpbCBhZnRlciB0aGUgdm0gaGFzIGJlZW4gcmVib290ZWQKICAgICMgZmlwc192ZXJpZnkKfQoKIyBjb25maWd1cmVfc3NoZAojIFdlIG5lZWQgdG8gY29uZmlndXJlIFBhc3N3b3JkQXV0aGVudGljYXRpb24gdG8geWVzIGluIG9yZGVyIGZvciB0aGUgVk1TUyBBY2Nlc3MgSklUIHRvIHdvcmsKY29uZmlndXJlX3NzaGQoKSB7CiAgICBsb2cgInN0YXJ0aW5nIgogICAgbG9jYWwgLXIgc3NoZF9jb25maWc9Ii9ldGMvc3NoL3NzaGRfY29uZmlnIgoKICAgIGxvZyAiRWRpdGluZyAkc3NoZF9jb25maWcgdG8gYWxsb3cgcGFzc3dvcmQgYXV0aGVudGljYXRpb24iCiAgICBzZWQgLWkgJ3MvUGFzc3dvcmRBdXRoZW50aWNhdGlvbiBuby9QYXNzd29yZEF1dGhlbnRpY2F0aW9uIHllcy9nJyAiJHNzaGRfY29uZmlnIgoKICAgIHN5c3RlbWN0bCByZWxvYWQgc3NoZC5zZXJ2aWNlIHx8IGFib3J0ICJzc2hkIGZhaWxlZCB0byByZWxvYWQiCn0KCiMgY29uZmlndXJlX2xvZ3JvdGF0ZSBjbG9iYmVycyAvZXRjL2xvZ3JvdGF0ZS5jb25mCiMgYXJnczoKIyAxKSBkcm9waW5fZmlsZXMgLSBuYW1lcmVmLCBhc3NvY2lhdGl2ZSBhcnJheSwgb3B0aW9uYWw7IGxvZ3JvdGF0ZSBmaWxlcyB0byB3cml0ZSB0byAvZXRjL2xvZ3JvdGF0ZS5kCiMgICAgICAgS2V5IG5hbWUgZGljdGF0ZXMgZmlsZW5hbWVzIHdyaXR0ZW4gdG8gL2V0Yy9sb2dyb3RhdGUuZC4KIyBFeGFtcGxlOgojICAgS2V5IGRpY3RhdGVzIHRoZSBmaWxlbmFtZSB3cml0dGVuIGluIC9ldGMvbG9ncm90YXRlLmQKIyAgIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKIyAgIGxvY2FsIC1yQSBsb2dyb3RhdGVfZHJvcGlucz0oCiMgICAgICBbImdhdGV3YXkiXT0iJGdhdGV3YXlfbG9nX2ZpbGUiCiMgICApCmNvbmZpZ3VyZV9sb2dyb3RhdGUoKSB7CiAgICBsb2NhbCAtbiBkcm9waW5fZmlsZXM9IiR7MTotZW1wdHlfc3RyfSIKICAgIGxvZyAic3RhcnRpbmciCgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciBsb2dyb3RhdGVfY29uZl9maWxlbmFtZT0nL2V0Yy9sb2dyb3RhdGUuY29uZicKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgbG9ncm90YXRlX2NvbmZfZmlsZT0nIyBzZWUgIm1hbiBsb2dyb3RhdGUiIGZvciBkZXRhaWxzCiMgcm90YXRlIGxvZyBmaWxlcyB3ZWVrbHkKd2Vla2x5CgojIGtlZXAgMiB3ZWVrcyB3b3J0aCBvZiBiYWNrbG9ncwpyb3RhdGUgMgoKIyBjcmVhdGUgbmV3IChlbXB0eSkgbG9nIGZpbGVzIGFmdGVyIHJvdGF0aW5nIG9sZCBvbmVzCmNyZWF0ZQoKIyB1c2UgZGF0ZSBhcyBhIHN1ZmZpeCBvZiB0aGUgcm90YXRlZCBmaWxlCmRhdGVleHQKCiMgdW5jb21tZW50IHRoaXMgaWYgeW91IHdhbnQgeW91ciBsb2cgZmlsZXMgY29tcHJlc3NlZApjb21wcmVzcwoKIyBSUE0gcGFja2FnZXMgZHJvcCBsb2cgcm90YXRpb24gaW5mb3JtYXRpb24gaW50byB0aGlzIGRpcmVjdG9yeQppbmNsdWRlIC9ldGMvbG9ncm90YXRlLmQKCiMgbm8gcGFja2FnZXMgb3duIHd0bXAgYW5kIGJ0bXAgLS0gd2Ugd2lsbCByb3RhdGUgdGhlbSBoZXJlCi92YXIvbG9nL3d0bXAgewogICAgbW9udGhseQogICAgY3JlYXRlIDA2NjQgcm9vdCB1dG1wCiAgICAgICAgbWluc2l6ZSAxTQogICAgcm90YXRlIDEKfQoKL3Zhci9sb2cvYnRtcCB7CiAgICBtaXNzaW5nb2sKICAgIG1vbnRobHkKICAgIGNyZWF0ZSAwNjAwIHJvb3QgdXRtcAogICAgcm90YXRlIDEKfScKCiAgICB3cml0ZV9maWxlIGxvZ3JvdGF0ZV9jb25mX2ZpbGVuYW1lIGxvZ3JvdGF0ZV9jb25mX2ZpbGUgdHJ1ZQoKICAgIGlmIFsgLW4gIiR7ZHJvcGluX2ZpbGVzWypdfSIgXTsgdGhlbgogICAgICAgIGxvY2FsIC1yIGxvZ3JvdGF0ZV9kPSIvZXRjL2xvZ3JvdGF0ZS5kIgogICAgICAgIGxvZyAiV3JpdGluZyBsb2dyb3RhdGUgZmlsZXMgdG8gJGxvZ3JvdGF0ZV9kIgogICAgICAgIGZvciBkcm9waW5fbmFtZSBpbiAiJHshZHJvcGluX2ZpbGVzW0BdfSI7IGRvCiAgICAgICAgICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgICAgICAgICBsb2NhbCAtciBkcm9waW5fZmlsZW5hbWU9IiRsb2dyb3RhdGVfZC8kZHJvcGluX25hbWUiCiAgICAgICAgICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgICAgICAgICBsb2NhbCAtciBkcm9waW5fZmlsZT0iJHtkcm9waW5fZmlsZXNbIiRkcm9waW5fbmFtZSJdfSIKICAgICAgICAgICAgd3JpdGVfZmlsZSBkcm9waW5fZmlsZW5hbWUgZHJvcGluX2ZpbGUgdHJ1ZQogICAgICAgIGRvbmUKICAgIGZpCn0KCiMgcHVsbF9jb250YWluZXJfaW1hZ2VzCiMgYXJnczoKIyAxKSBwdWxsX2ltYWdlcyAtIG5hbWVyZWYsIHN0cmluZyBhcnJheQojIDIpIHJlZ2lzdHJ5X2NvbmYgLSBuYW1lcmVmLCBzdHJpbmcsIG9wdGlvbmFsOyBwYXRoIHRvIGRvY2tlci9wb2RtYW4gY29uZmlndXJhdGlvbiBmaWxlCnB1bGxfY29udGFpbmVyX2ltYWdlcygpIHsKICAgIGxvY2FsIC1uIHB1bGxfaW1hZ2VzPSIkMSIKICAgIGxvY2FsIC1uIHJlZ2lzdHJ5X2NvbmY9IiR7MjotZW1wdHlfc3RyfSIKICAgIGxvZyAic3RhcnRpbmciCgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtcmkgcmV0cnlfdGltZT0zMAogICAgY21kPSgKICAgICAgICBhegogICAgICAgIGxvZ2luCiAgICAgICAgLWkKICAgICAgICAtLWFsbG93LW5vLXN1YnNjcmlwdGlvbnMKICAgICkKCiAgICBsb2cgIlJ1bm5pbmcgYXogbG9naW4gd2l0aCByZXRyaWVzIgogICAgcmV0cnkgY21kIHJldHJ5X3RpbWUKCiAgICAjIFN1cHByZXNzIGVtdWxhdGlvbiBvdXRwdXQgZm9yIHBvZG1hbiBpbnN0ZWFkIG9mIGRvY2tlciBmb3IgYXogYWNyIGNvbXBhdGFiaWxpdHkKICAgIG1rZGlyIC1wIC9ldGMvY29udGFpbmVycy8KICAgIG1rZGlyIC1wIC9yb290Ly5kb2NrZXIKICAgIHRvdWNoIC9ldGMvY29udGFpbmVycy9ub2RvY2tlcgoKICAgICMgVGhpcyBuYW1lIGlzIHVzZWQgaW4gdGhlIGNhc2UgdGhhdCBheiBhY3IgbG9naW4gc2VhcmNoZXMgZm9yIHRoaXMgaW4gaXQncyBlbnZpcm9ubWVudAogICAgZXhwb3J0IFJFR0lTVFJZX0FVVEhfRklMRT0iL3Jvb3QvLmRvY2tlci9jb25maWcuanNvbiIKCiAgICBpZiBbIC1uICIke3JlZ2lzdHJ5X2NvbmZ9IiBdOyB0aGVuCiAgICAgICAgd3JpdGVfZmlsZSBSRUdJU1RSWV9BVVRIX0ZJTEUgcmVnaXN0cnlfY29uZiB0cnVlCiAgICBmaQoKICAgIGxvZyAibG9nZ2luZyBpbnRvIHByb2QgYWNyIgogICAgY21kPSgKICAgICAgICBhegogICAgICAgIGFjcgogICAgICAgIGxvZ2luCiAgICAgICAgLS1uYW1lCiAgICAgICAgIyBUT0RPIHJlcGxhY2UgdGhpcyB3aXRoIHZhcmlhYmxlIGV4cGFuc2lvbgogICAgICAgICMgUmVmZXJlbmNlOiBodHRwczovL3d3dy5zaGVsbGNoZWNrLm5ldC93aWtpL1NDMjAwMQogICAgICAgICIkKHNlZCAtZSAnc3wuKi98fCcgPDw8IiRBQ1JSRVNPVVJDRUlEIikiCiAgICApCgogICAgcmV0cnkgY21kIHJldHJ5X3RpbWUKCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwNjgKICAgIGZvciBpIGluICR7cHVsbF9pbWFnZXNbQF19OyBkbwogICAgICAgIGxvY2FsIC1uIGltYWdlPSIkaSIKICAgICAgICBjbWQ9KAogICAgICAgICAgICBwb2RtYW4KICAgICAgICAgICAgcHVsbAogICAgICAgICAgICAiJGltYWdlIgogICAgICAgICkKCiAgICAgICAgbG9nICJQdWxsaW5nIGltYWdlICRpbWFnZSB3aXRoIHJldHJpZXMgbm93IgogICAgICAgIHJldHJ5IGNtZCByZXRyeV90aW1lCiAgICBkb25lCgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBjbWQ9KAogICAgICAgIGF6CiAgICAgICAgbG9nb3V0CiAgICApCgogICAgbG9nICJSdW5uaW5nIGF6IGxvZ291dCB3aXRoIHJldHJpZXMiCiAgICByZXRyeSBjbWQgcmV0cnlfdGltZQp9CgojIGNvbmZpZ3VyZV9jZXJ0c19nZW5lcmFsIENvbmZpZ3VyZSBzeXN0ZW0gY2VydGlmaWNhdGVzIGNvbW1vbiB0byBhbGwgVk1TUyBpbnN0YW5jZXMKY29uZmlndXJlX2NlcnRzX2dlbmVyYWwoKSB7CiAgICBsb2cgInN0YXJ0aW5nIgoKICAgICMgc2V0dGluZyBNT05JVE9SSU5HX0dDU19BVVRIX0lEX1RZUEU9QXV0aEtleVZhdWx0IHNlZW1zIHRvIGhhdmUgY2F1c2VkIG1kc2Qgbm90CiAgICAjIHRvIGhvbm91ciBTU0xfQ0VSVF9GSUxFIGFueSBtb3JlLCBoZWF2ZW4gb25seSBrbm93cyB3aHkuCiAgICBsb2NhbCAtciBzc2xfY2VydHNfYmFzZWRpcj0iL3Vzci9saWIvc3NsL2NlcnRzIgogICAgbWtkaXIgLXAgIiRzc2xfY2VydHNfYmFzZWRpciIKICAgIGNzcGxpdCAtZiAiJHNzbF9jZXJ0c19iYXNlZGlyL2NlcnQtIiAtYiAlMDNkLnBlbSAvZXRjL3BraS90bHMvY2VydHMvY2EtYnVuZGxlLmNydCAvXiQvMSAieyp9IiAxPi9kZXYvbnVsbAogICAgY19yZWhhc2ggIiRzc2xfY2VydHNfYmFzZWRpciIKfQoKIyBjb25maWd1cmVfY2VydHNfcnAgQ29uZmlndXJlIHN5c3RlbSBjZXJ0aWZpY2F0ZXMgZm9yIFJQIFZNU1MKIyBhcmdzOgpjb25maWd1cmVfY2VydHNfcnAoKSB7CiAgICBsb2cgInN0YXJ0aW5nIgoKICAgIHZlcmlmeV9yb2xlIHJvbGVfcnAKCiAgICBsb2NhbCAtciBycF9jZXJ0c19iYXNlZGlyPSIvZXRjL2Fyby1ycCIKICAgIG1rZGlyIC1wICIkcnBfY2VydHNfYmFzZWRpciIKICAgIGJhc2U2NCAtZCA8PDwiJEFETUlOQVBJQ0FCVU5ETEUiID4gIiRycF9jZXJ0c19iYXNlZGlyL2FkbWluLWNhLWJ1bmRsZS5wZW0iCiAgICBpZiBbWyAtbiAiJEFSTUFQSUNBQlVORExFIiBdXTsgdGhlbgogICAgYmFzZTY0IC1kIDw8PCIkQVJNQVBJQ0FCVU5ETEUiID4gIiRycF9jZXJ0c19iYXNlZGlyL2FybS1jYS1idW5kbGUucGVtIgogICAgZmkKICAgIGNob3duIC1SIDEwMDA6MTAwMCAiJHJwX2NlcnRzX2Jhc2VkaXIiCgogICAgY29uZmlndXJlX2NlcnRzX2dlbmVyYWwKfQoKIyBjb25maWd1cmVfY2VydHNfZ2F0ZXdheSBDb25maWd1cmUgc3lzdGVtIGNlcnRpZmljYXRlcyBmb3IgR2F0ZXdheSBWTVNTIGluc3RhbmNlcwpjb25maWd1cmVfY2VydHNfZ2F0ZXdheSgpIHsKICAgIGxvZyAic3RhcnRpbmciCgogICAgdmVyaWZ5X3JvbGUgcm9sZV9nYXRld2F5CiAgICBjb25maWd1cmVfY2VydHNfZ2VuZXJhbAp9CgojIGNvbmZpZ3VyZV9jZXJ0c19kZXZwcm94eSBDb25maWd1cmUgc3lzdGVtIGNlcnRpZmljYXRlcyBmb3IgZGV2cHJveHkgVk1TUyBpbnN0YW5jZXMKY29uZmlndXJlX2NlcnRzX2RldnByb3h5KCkgewogICAgbG9nICJzdGFydGluZyIKCiAgICB2ZXJpZnlfcm9sZSByb2xlX2RldnByb3h5CgogICAgbG9jYWwgLXIgcHJveHlfY2VydHNfYmFzZWRpcj0iL2V0Yy9wcm94eSIKICAgIG1rZGlyIC1wICIkcHJveHlfY2VydHNfYmFzZWRpciIKICAgIGJhc2U2NCAtZCA8PDwiJFBST1hZQ0VSVCIgPiAiJHByb3h5X2NlcnRzX2Jhc2VkaXIvcHJveHkuY3J0IgogICAgYmFzZTY0IC1kIDw8PCIkUFJPWFlLRVkiID4gIiRwcm94eV9jZXJ0c19iYXNlZGlyL3Byb3h5LmtleSIKICAgIGJhc2U2NCAtZCA8PDwiJFBST1hZQ0xJRU5UQ0VSVCIgPiAiJHByb3h5X2NlcnRzX2Jhc2VkaXIvcHJveHktY2xpZW50LmNydCIKICAgIGNob3duIC1SIDEwMDA6MTAwMCAvZXRjL3Byb3h5CiAgICBjaG1vZCAwNjAwICIkcHJveHlfY2VydHNfYmFzZWRpci9wcm94eS5rZXkiCn0KCmNvbmZpZ3VyZV9henNlY2Rfc2NhbigpIHsKICAgIGxvZyAic3RhcnRpbmciCgogICAgIyB3ZSBsZWF2ZSBjbGllbnRJZCBibGFuayBhcyBsb25nIGFzIG9ubHkgMSBtYW5hZ2VkIGlkZW50aXR5IGFzc2lnbmVkIHRvIHZtc3MKICAgICMgaWYgd2UgaGF2ZSBtb3JlIHRoYW4gMSwgd2Ugd2lsbCBuZWVkIHRvIHBvcHVsYXRlIHdpdGggY2xpZW50SWQgdXNlZCBmb3Igb2ZmLW5vZGUgc2Nhbm5pbmcKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgbm9kZXNjYW5fYWdlbnRfZmlsZW5hbWU9Ii9ldGMvZGVmYXVsdC92c2Etbm9kZXNjYW4tYWdlbnQuY29uZmlnIgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciBub2Rlc2Nhbl9hZ2VudF9maWxlPSJ7CiAgICBcIk5pY2VcIjogMTksCiAgICBcIlRpbWVvdXRcIjogMTA4MDAsCiAgICBcIkNsaWVudElkXCI6IFwiXCIsCiAgICBcIlRlbmFudElkXCI6ICRBWlVSRVNFQ1BBQ0tWU0FURU5BTlRJRCwKICAgIFwiUXVhbHlzU3RvcmVCYXNlVXJsXCI6ICRBWlVSRVNFQ1BBQ0tRVUFMWVNVUkwsCiAgICBcIlByb2Nlc3NUaW1lb3V0XCI6IDMwMCwKICAgIFwiQ29tbWFuZERlbGF5XCI6IDAKICB9IgoKICAgIHdyaXRlX2ZpbGUgbm9kZXNjYW5fYWdlbnRfZmlsZW5hbWUgbm9kZXNjYW5fYWdlbnRfZmlsZSB0cnVlCn0KCiMgcnVuX2F6c2VjZF9jb25maWdfc2NhbgpydW5fYXpzZWNkX2NvbmZpZ19zY2FuKCkgewogICAgbG9nICJzdGFydGluZyIKCiAgICBjb25maWd1cmVfYXpzZWNkX3NjYW4KCiAgICBsb2NhbCAtYXIgY29uZmlncz0oCiAgICAgICAgImJhc2VsaW5lIgogICAgICAgICJjbGFtYXYiCiAgICAgICAgInNvZnR3YXJlIgogICAgKQoKICAgIGxvZyAiU2Nhbm5pbmcgY29uZmlndXJhdGlvbiBmaWxlcyB3aXRoIGF6c2VjZCAke2NvbmZpZ3NbKl19IgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDY4CiAgICBmb3Igc2NhbiBpbiAke2NvbmZpZ3NbQF19OyBkbwogICAgICAgIGxvZyAiU2Nhbm5pbmcgY29uZmlnIGZpbGUgJHNjYW4gbm93IgogICAgICAgIC91c3IvbG9jYWwvYmluL2F6c2VjZCBjb25maWcgLXMgIiRzY2FuIiAtZCBQMUQKICAgIGRvbmUKfQoKIyBjcmVhdGVfcmVxdWlyZWRfZGlycwpjcmVhdGVfcmVxdWlyZWRfZGlycygpIHsKICAgIGNyZWF0ZV9kaXJzPSgKICAgICAgICAvdmFyL2xvZy9qb3VybmFsCiAgICAgICAgL3Zhci9saWIvd2FhZ2VudC9NaWNyb3NvZnQuQXp1cmUuS2V5VmF1bHQuU3RvcmUKICAgICAgICAjIERvZXMgbm90IGV4aXN0IG9uIGRldlByb3h5Vk1TUwogICAgICAgIC92YXIvb3B0L21pY3Jvc29mdC9saW51eG1vbmFnZW50CiAgICApCgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDY4CiAgICBmb3IgZCBpbiAke2NyZWF0ZV9kaXJzW0BdfTsgZG8KICAgICAgICBsb2cgIkNyZWF0aW5nIGRpcmVjdG9yeSAkZCIKICAgICAgICBta2RpciAtcCAiJGQiIHx8IGFib3J0ICJmYWlsZWQgdG8gY3JlYXRlIGRpcmVjdG9yeSAkZCIKICAgIGRvbmUKfQoKIyBmaXJld2FsbGRfY29uZmlndXJlX2JhY2tlbmQKZmlyZXdhbGxkX2NvbmZpZ3VyZV9iYWNrZW5kKCkgewogICAgbG9nICJzdGFydGluZyIKCiAgICBsb2cgIkNoYW5naW5nIGZpcmV3YWxsZCBiYWNrZW5kIHRvIGlwdGFibGVzIgogICAgY29uZl9maWxlPSIvZXRjL2ZpcmV3YWxsZC9maXJld2FsbGQuY29uZiIKICAgIHNlZCAtaSAncy9GaXJld2FsbEJhY2tlbmQ9bmZ0YWJsZXMvRmlyZXdhbGxCYWNrZW5kPWlwdGFibGVzL2cnICIkY29uZl9maWxlIgp9CgojIGZpcmV3YWxsZF9jb25maWd1cmUKIyBhcmdzOgojIDEpIHBvcnRzIC0gbmFtZXJlZiwgc3RyaW5nIGFycmF5OyBwb3J0cyB0byBiZSBlbmFibGVkLgojICAgICAgIFBvcnRzIG11c3QgYmUgcG9zdGZpeGVkIHdpdGggL3RjcCBvciAvdWRwCmZpcmV3YWxsZF9jb25maWd1cmUoKSB7CiAgICBsb2NhbCAtbiBwb3J0cz0iJDEiCiAgICBsb2cgInN0YXJ0aW5nIgoKICAgIGZpcmV3YWxsZF9jb25maWd1cmVfYmFja2VuZAoKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXJhIHNlcnZpY2U9KAogICAgICAgICJmaXJld2FsbGQiCiAgICApCiAgICBlbmFibGVfc2VydmljZXMgc2VydmljZQoKICAgIGxvZyAiRW5hYmxpbmcgcG9ydHMgJHtwb3J0c1sqXX0gb24gZGVmYXVsdCBmaXJld2FsbGQgem9uZSIKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjA2OAogICAgZm9yIHBvcnQgaW4gJHtwb3J0c1tAXX07IGRvCiAgICAgICAgbG9nICJFbmFibGluZyBwb3J0ICRwb3J0IG5vdyIKICAgICAgICBmaXJld2FsbC1jbWQgIi0tYWRkLXBvcnQ9JHBvcnQiIFwKICAgICAgICAgICAgICAgICAgICAgLS1wZXJtYW5lbnQKICAgIGRvbmUKCiAgICBsb2cgIldyaXRpbmcgcnVudGltZSBjb25maWcgdG8gcGVybWFuZW50IGNvbmZpZyIKICAgIGZpcmV3YWxsLWNtZCAtLXJ1bnRpbWUtdG8tcGVybWFuZW50Cn0KCiMgdXRpbC1jb21tb24uc2ggZG9lcyBub3QgZXhpc3Qgd2hlbiBkZXBsb3llZCB0byBWTVNTIHZpYSBWTVNTIGV4dGVuc2lvbnMKIyBQcm92aWRlcyBzaGVsbGNoZWNrIGRlZmluaXRpb25zCnV0aWxfY29tbW9uPSJ1dGlsLWNvbW1vbi5zaCIKaWYgWyAtZiAiJHV0aWxfY29tbW9uIiBdOyB0aGVuCiAgICAjIHNoZWxsY2hlY2sgc291cmNlPXV0aWwtY29tbW9uLnNoCiAgICBzb3VyY2UgIiR1dGlsX2NvbW1vbiIKZmkKIyEvYmluL2Jhc2gKCnNldCAtbyBlcnJleGl0IFwKICAgIC1vIHBpcGVmYWlsIFwKICAgIC1vIG5vdW5zZXQKCm1haW4oKSB7CiAgICAjIHRyYW5zYWN0aW9uIGF0dGVtcHQgcmV0cnkgdGltZSBpbiBzZWNvbmRzCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yaSByZXRyeV93YWl0X3RpbWU9MzAKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjA2OAogICAgbG9jYWwgLXJpIHBrZ19yZXRyeV9jb3VudD02MAoKICAgIGNyZWF0ZV9yZXF1aXJlZF9kaXJzCiAgICBjb25maWd1cmVfc3NoZAogICAgY29uZmlndXJlX3JwbV9yZXBvcyByZXRyeV93YWl0X3RpbWUgXAogICAgICAgICAgICAgICAgICAgICIkcGtnX3JldHJ5X2NvdW50IgoKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLWFyIGV4Y2x1ZGVfcGtncz0oCiAgICAgICAgIi14IFdBTGludXhBZ2VudCIKICAgICAgICAiLXggV0FMaW51eEFnZW50LXVkZXYiCiAgICApCgogICAgZG5mX3VwZGF0ZV9wa2dzIGV4Y2x1ZGVfcGtncyBcCiAgICAgICAgICAgICAgICAgICAgcmV0cnlfd2FpdF90aW1lIFwKICAgICAgICAgICAgICAgICAgICAiJHBrZ19yZXRyeV9jb3VudCIKCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yYSBpbnN0YWxsX3BrZ3M9KAogICAgICAgIGF6dXJlLWNsaQogICAgICAgIGF6dXJlLW1kc2QKICAgICAgICBwb2RtYW4KICAgICAgICBwb2RtYW4tZG9ja2VyCiAgICAgICAgb3BlbnNzbC1wZXJsCiAgICAgICAgIyBoYWNrIC0gd2UgYXJlIGluc3RhbGxpbmcgcHl0aG9uMyBvbiBob3N0cyBkdWUgdG8gYW4gaXNzdWUgd2l0aCBBenVyZSBMaW51eCBFeHRlbnNpb25zIGh0dHBzOi8vZ2l0aHViLmNvbS9BenVyZS9henVyZS1saW51eC1leHRlbnNpb25zL3B1bGwvMTUwNQogICAgICAgIHB5dGhvbjMKICAgICAgICAjIHJlcXVpcmVkIGZvciBwb2RtYW4gbmV0d29ya2luZwogICAgICAgIGZpcmV3YWxsZAogICAgICAgICMgUmVxdWlyZWQgdG8gZW5hYmxlIGZpcHMKICAgICAgICBncnViYnkKICAgICAgICBkcmFjdXQtZmlwcwogICAgKQoKICAgIGRuZl9pbnN0YWxsX3BrZ3MgaW5zdGFsbF9wa2dzIFwKICAgICAgICAgICAgICAgICAgICAgcmV0cnlfd2FpdF90aW1lIFwKICAgICAgICAgICAgICAgICAgICAgIiRwa2dfcmV0cnlfY291bnQiCgogICAgZmlwc19jb25maWd1cmUKCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIxMTkKICAgIGNvbmZpZ3VyZV9sb2dyb3RhdGUKCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQgZGlzYWJsZT1TQzIxNTMKICAgIGxvY2FsIC1yIG1kbWltYWdlPSIke1JQSU1BR0UlJS8qfS8ke01ETUlNQUdFIyovfSIKICAgIGxvY2FsIC1yIHJwaW1hZ2U9IiRSUElNQUdFIgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciBmbHVlbnRiaXRfaW1hZ2U9IiRGTFVFTlRCSVRJTUFHRSIKICAgICMgdmFsdWVzIGFyZSByZWZlcmVuY2VzIHRvIHZhcmlhYmxlcywgdGhleSBzaG91bGQgbm90IGJlIGRlcmVmZXJlbmNlZCBoZXJlCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yQSBhcm9faW1hZ2VzPSgKICAgICAgICBbIm1kbSJdPSJtZG1pbWFnZSIKICAgICAgICBbInJwIl09InJwaW1hZ2UiCiAgICAgICAgWyJmbHVlbnRiaXQiXT0iZmx1ZW50Yml0X2ltYWdlIgogICAgKQoKICAgIHB1bGxfY29udGFpbmVyX2ltYWdlcyBhcm9faW1hZ2VzCgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtcmEgZW5hYmxlX3BvcnRzPSgKICAgICAgICAjIFJQIGdhdGV3YXkKICAgICAgICAiODAvdGNwIgogICAgICAgICI4MDgxL3RjcCIKICAgICAgICAiNDQzL3RjcCIKICAgICAgICAjIEpJVCBzc2gKICAgICAgICAiMjIvdGNwIgogICAgKQoKICAgIGZpcmV3YWxsZF9jb25maWd1cmUgZW5hYmxlX3BvcnRzCgoKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgZmx1ZW50Yml0X2NvbmZfZmlsZT0iW0lOUFVUXQoJTmFtZSBzeXN0ZW1kCglUYWcgam91cm5hbGQKCVN5c3RlbWRfRmlsdGVyIF9DT01NPWFybwoJREIgL3Zhci9saWIvZmx1ZW50L2pvdXJuYWxkYgoKW0ZJTFRFUl0KCU5hbWUgbW9kaWZ5CglNYXRjaCBqb3VybmFsZAoJUmVtb3ZlX3dpbGRjYXJkIF8KCVJlbW92ZSBUSU1FU1RBTVAKCltPVVRQVVRdCglOYW1lIGZvcndhcmQKCU1hdGNoICoKCVBvcnQgMjkyMzAiCgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciBhcm9fZ2F0ZXdheV9jb25mX2ZpbGU9IkFDUl9SRVNPVVJDRV9JRD0nJEFDUlJFU09VUkNFSUQnCkRBVEFCQVNFX0FDQ09VTlRfTkFNRT0nJERBVEFCQVNFQUNDT1VOVE5BTUUnCk1ETV9BQ0NPVU5UPSckUlBNRE1BQ0NPVU5UJwpNRE1fTkFNRVNQQUNFPScke3JvbGVfZ2F0ZXdheV59JwpHQVRFV0FZX0RPTUFJTlM9JyRHQVRFV0FZRE9NQUlOUycKR0FURVdBWV9GRUFUVVJFUz0nJEdBVEVXQVlGRUFUVVJFUycKUlBJTUFHRT0nJHJwaW1hZ2UnIgoKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgbWRzZF9jb25maWdfdmVyc2lvbj0iJEdBVEVXQVlNRFNEQ09ORklHVkVSU0lPTiIKCiAgICAjIHZhbHVlcyBhcmUgcmVmZXJlbmNlcyB0byB2YXJpYWJsZXMsIHRoZXkgc2hvdWxkIG5vdCBiZSBkZXJlZmVyZW5jZWQgaGVyZQogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtckEgYXJvX2NvbmZpZ3M9KAogICAgICAgIFsiZ2F0ZXdheV9jb25maWciXT0iYXJvX2dhdGV3YXlfY29uZl9maWxlIgogICAgICAgIFsiZmx1ZW50Yml0Il09ImZsdWVudGJpdF9jb25mX2ZpbGUiCiAgICAgICAgWyJtZHNkIl09Im1kc2RfY29uZmlnX3ZlcnNpb24iCiAgICAgICAgWyJzdGF0aWNfaXBfYWRkcmVzcyJdPSJzdGF0aWNfaXBfYWRkcmVzc2VzIgogICAgKQoKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgIyB1c2UgZGVmYXVsdCBwb2RtYW4gbmV0d29yayB3aXRoIHJhbmdlIDEwLjg4LjAuMC8xNgogICAgbG9jYWwgLXJBIHN0YXRpY19pcF9hZGRyZXNzZXM9KAogICAgICAgIFsiZ2F0ZXdheSJdPSIxMC44OC4wLjIiCiAgICAgICAgWyJtZG0iXT0iMTAuODguMC44IgogICAgKQoKICAgIGNvbmZpZ3VyZV92bXNzX2Fyb19zZXJ2aWNlcyByb2xlX2dhdGV3YXkgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyb19pbWFnZXMgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyb19jb25maWdzCgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtcmEgZ2F0ZXdheV9zZXJ2aWNlcz0oCiAgICAgICAgImFyby1nYXRld2F5IgogICAgICAgICJhenNlY2QiCiAgICAgICAgIm1kc2QiCiAgICAgICAgIm1kbSIKICAgICAgICAiY2hyb255ZCIKICAgICAgICAiZmx1ZW50Yml0IgogICAgICAgICJkb3dubG9hZC1tZHNkLWNyZWRlbnRpYWxzLnRpbWVyIgogICAgICAgICJkb3dubG9hZC1tZG0tY3JlZGVudGlhbHMudGltZXIiCiAgICAgICAgImZpcmV3YWxsZCIKICAgICkKCiAgICBlbmFibGVfc2VydmljZXMgZ2F0ZXdheV9zZXJ2aWNlcwoKICAgIHJlYm9vdF92bQp9CgpleHBvcnQgQVpVUkVfQ0xPVURfTkFNRT0iJHtBWlVSRUNMT1VETkFNRTo/IkZhaWxlZCB0byBjYXJyeSBvdmVyIHZhcmlhYmxlcyJ9IgoKIyB1dGlsLnNoIGRvZXMgbm90IGV4aXN0IHdoZW4gZGVwbG95ZWQgdG8gVk1TUyB2aWEgVk1TUyBleHRlbnNpb25zCiMgUHJvdmlkZXMgc2hlbGxjaGVjayBkZWZpbml0aW9ucwp1dGlsPSJ1dGlsLnNoIgppZiBbIC1mICIkdXRpbCIgXTsgdGhlbgogICAgIyBzaGVsbGNoZWNrIHNvdXJjZT11dGlsLnNoCiAgICBzb3VyY2UgIiR1dGlsIgpmaQoKbWFpbiAiJEAiCg==')))]" + "script": "[base64(concat(base64ToString('c2V0IC1leAoK'),'ACRRESOURCEID=$(base64 -d \u003c\u003c\u003c''',base64(parameters('acrResourceId')),''')\n','AZURECLOUDNAME=$(base64 -d \u003c\u003c\u003c''',base64(parameters('azureCloudName')),''')\n','AZURESECPACKQUALYSURL=$(base64 -d \u003c\u003c\u003c''',base64(parameters('azureSecPackQualysUrl')),''')\n','AZURESECPACKVSATENANTID=$(base64 -d \u003c\u003c\u003c''',base64(parameters('azureSecPackVSATenantId')),''')\n','DATABASEACCOUNTNAME=$(base64 -d \u003c\u003c\u003c''',base64(parameters('databaseAccountName')),''')\n','FLUENTBITIMAGE=$(base64 -d \u003c\u003c\u003c''',base64(parameters('fluentbitImage')),''')\n','GATEWAYDOMAINS=$(base64 -d \u003c\u003c\u003c''',base64(parameters('gatewayDomains')),''')\n','GATEWAYFEATURES=$(base64 -d \u003c\u003c\u003c''',base64(parameters('gatewayFeatures')),''')\n','GATEWAYLOGLEVEL=$(base64 -d \u003c\u003c\u003c''',base64(parameters('gatewayLogLevel')),''')\n','GATEWAYMDSDCONFIGVERSION=$(base64 -d \u003c\u003c\u003c''',base64(parameters('gatewayMdsdConfigVersion')),''')\n','KEYVAULTDNSSUFFIX=$(base64 -d \u003c\u003c\u003c''',base64(parameters('keyvaultDNSSuffix')),''')\n','KEYVAULTPREFIX=$(base64 -d \u003c\u003c\u003c''',base64(parameters('keyvaultPrefix')),''')\n','MDMFRONTENDURL=$(base64 -d \u003c\u003c\u003c''',base64(parameters('mdmFrontendUrl')),''')\n','MDSDENVIRONMENT=$(base64 -d \u003c\u003c\u003c''',base64(parameters('mdsdEnvironment')),''')\n','RPIMAGE=$(base64 -d \u003c\u003c\u003c''',base64(parameters('rpImage')),''')\n','RPMDMACCOUNT=$(base64 -d \u003c\u003c\u003c''',base64(parameters('rpMdmAccount')),''')\n','RPMDSDACCOUNT=$(base64 -d \u003c\u003c\u003c''',base64(parameters('rpMdsdAccount')),''')\n','RPMDSDNAMESPACE=$(base64 -d \u003c\u003c\u003c''',base64(parameters('rpMdsdNamespace')),''')\n','MDMIMAGE=''/geneva/distroless/mdm:2.202602101834.0-20260211-1@sha256:a581e89744933f30a9f8e2724906fde02e713836fce76afefec7092daa01c064''\n','LOCATION=$(base64 -d \u003c\u003c\u003c''',base64(resourceGroup().location),''')\n','SUBSCRIPTIONID=$(base64 -d \u003c\u003c\u003c''',base64(subscription().subscriptionId),''')\n','RESOURCEGROUPNAME=$(base64 -d \u003c\u003c\u003c''',base64(resourceGroup().name),''')\n','\n',base64ToString('IyEvYmluL2Jhc2gKIyBJbnRlcm5hbCBGdW5jdGlvbnMgYW5kIENvbnN0YW50cwoKIyBkZWNsYXJlIC1yIGVtcHR5X3N0cj0iIgojCiMgZW1wdHlfc3RyIC0gY29uc3RhbnQKIyAgICogdXNlZCBieSBmdW5jdGlvbnMgZm9yIG9wdGlvbmFsIG5hbWVyZWYgc3RyaW5nIGFyZ3VtZW50cwojIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKZGVjbGFyZSAtciBlbXB0eV9zdHI9IiIKCiMgZGVjbGFyZSAtciByb2xlX2dhdGV3YXk9ImdhdGV3YXkiCiMKIyB0aGlzIHNob3VsZCBiZSByZWZlcmVuY2VkIGJ5IHNjcmlwdHMgc291cmNpbmcgdGhpcyBmaWxlCiMgcm9sZV9nYXRld2F5PSJnYXRld2F5IgpkZWNsYXJlIC1yIHJvbGVfZ2F0ZXdheT0iZ2F0ZXdheSIKCiMgZGVjbGFyZSAtciByb2xlX3JwPSJycCIKIwojIHRoaXMgc2hvdWxkIGJlIHJlZmVyZW5jZWQgYnkgc2NyaXB0cyBzb3VyY2luZyB0aGlzIGZpbGUKIyByb2xlX3JwPSJycCIKZGVjbGFyZSAtciByb2xlX3JwPSJycCIKCiMgZGVjbGFyZSAtciByb2xlX2RldnByb3h5PSJkZXZwcm94eSIKIwojIHJvbGVfZGV2cHJveHkgLSBjb25zdGFudAojICAgKiBJcyB1c2VkIHRvIGRldGVybWluZSB3aGljaCBWTVNTIGlzIGJlaW5nIGJvb3RzdHJhcHBlZApkZWNsYXJlIC1yIHJvbGVfZGV2cHJveHk9ImRldnByb3h5IgoKIyBkZWNsYXJlIC1yIHVzX2dvdl9jbG91ZD0iQXp1cmVVU0dvdmVybm1lbnQiCiMKIyB1c19nb3ZfY2xvdWQgLSBjb25zdGFudAojICAgKiBJcyB0aGUgbmFtZSBvZiBBWlVSRUNMT1VETkFNRSBmb3IgVVMgZ292ZXJubWVudCBjbG91ZApkZWNsYXJlIC1yIHVzX2dvdl9jbG91ZD0iQXp1cmVVU0dvdmVybm1lbnQiCgojIGRlY2xhcmUgLWkgWFRSQUNFX1NFVD0xCiMKIyBjb25zdGFudCB2YWx1ZSBzaWduaWZ5aW5nIHh0cmFjZSBzaGVsbCB2YWx1ZSBpcy9zaG91bGQgYmUgc2V0CmRlY2xhcmUgLWlyIFhUUkFDRV9TRVQ9MQoKIyBkZWNsYXJlIC1pIFhUUkFDRV9VTlNFVD0wCiMKIyBjb25zdGFudCB2YWx1ZSBzaWduaWZ5aW5nIHh0cmFjZSBzaGVsbCB2YWx1ZSBpcy9zaG91bGQgYmUgdW5zZXQKZGVjbGFyZSAtaXIgWFRSQUNFX1VOU0VUPTAKCiMgeHRyYWNlX2lzX3NldCgpCiMKIyBDaGVjayBpZiB4dHJhY2Ugc2hlbGwgb3B0aW9uIGlzIGVuYWJsZWQvZGlzYWJsZWQKIyAgICogUmV0dXJucyBYVFJBQ0VfU0VUIHZhbHVlIGlmIHNldAojICAgKiBSZXR1cm5zIFhUUkFDRV9VTlNFVCB2YWx1ZSBpZiB1bnNldAp4dHJhY2VfaXNfc2V0KCkgewogICAgaWYgW1sgJC0gPX4gIngiIF1dOyB0aGVuCiAgICAgICAgZWNobyBYVFJBQ0VfU0VUCiAgICBmaQogICAgCiAgICBlY2hvIFhUUkFDRV9VTlNFVAp9CgojIHh0cmFjZV90b2dnbGUoKQojCiMgc2V0L3Vuc2V0IHh0cmFjZSBzaGVsbCBvcHRpb24KIyBhcmdzOgojICAgMSkgc3RyaW5nIC0gbmFtZXJlZgojICAgICAgICogTXVzdCBiZSBYVFJBQ0VfU0VUIG9yIFhUUkFDRV9VTlNFVAp4dHJhY2VfdG9nZ2xlKCkgewogICAgaWYgISBbWyAkMSA9fiAoIlhUUkFDRV9TRVQifCJYVFJBQ0VfVU5TRVQiKSBdXTsgdGhlbgogICAgICAgIGxvZyAiXCQxIGludmFsaWQ7IFwkMSBtdXN0IGJlIFhUUkFDRV9TRVQgb3IgWFRSQUNFX1VOU0VULiBcJDE6ICQxIgogICAgICAgIHJldHVybiAxCiAgICBmaQoKICAgIGlmICgoICQxID09IFhUUkFDRV9TRVQgKSk7IHRoZW4KICAgICAgICBzZXQgLXggCiAgICBlbGlmCiAgICAgICAgKCggJDEgPT0gWFRSQUNFX1VOU0VUICkpOyB0aGVuCiAgICAgICAgc2V0ICt4CiAgICBmaQp9CgojIGxvZygpCiMKIyBXcmFwcGVyIGZvciBlY2hvIHRoYXQgaW5jbHVkZXMgdGhlIGZ1bmN0aW9uIG5hbWUKIyBhcmdzOgojICAgMSkgbXNnIC0gc3RyaW5nCiMgICAyKSBzdGFja19sZXZlbCAtIGludAojICAgICAgICogb3B0aW9uYWwKIyAgICAgICAqIGRlZmF1bHRzIHRvIHRoZSBmdW5jdGlvbiBhdCB0aGUgYm90dG9tIG9mIHRoZSBjYWxsIHN0YWNrCmxvZygpIHsKICAgIGxvY2FsIC1yIG1zZz0iJHsxOi0ibG9nIG1lc3NhZ2UgaXMgZW1wdHkifSIKICAgIGxvY2FsIC1yIHN0YWNrX2xldmVsPSIkezI6LTF9IgogICAgZWNobyAiJHtGVU5DTkFNRVske3N0YWNrX2xldmVsfV19OiAke21zZ30iCn0KCiMgYWJvcnQoKQojCiMgV3JhcHBlciBmb3IgbG9nIHRoYXQgZXhpdHMgd2l0aCBhbiBlcnJvciBjb2RlCmFib3J0KCkgewogICAgbG9jYWwgLXJpIG9yaWdpbl9zdGFja2xldmVsPTIKICAgIGxvZyAiJHsxfSIgIiRvcmlnaW5fc3RhY2tsZXZlbCIKICAgIGxvZyAiRXhpdGluZyIKICAgIGV4aXQgMQp9CgojIHdyaXRlX2ZpbGUoKQojCiMgYXJnczoKIyAgIDEpIGZpbGVuYW1lIC0gc3RyaW5nCiMgICAyKSBmaWxlX2NvbnRlbnRzIC0gc3RyaW5nCiMgICAzKSBjbG9iYmVyIC0gYm9vbGVhbgojICAgICAgICogT3B0aW9uYWw7IGRlZmF1bHRzIHRvIGZhbHNlCndyaXRlX2ZpbGUoKSB7CiAgICBsb2NhbCAtbiBmaWxlbmFtZT0iJDEiCiAgICBsb2NhbCAtbiBmaWxlX2NvbnRlbnRzPSIkMiIKICAgIGxvY2FsIC1yIGNsb2JiZXI9IiR7MzotZmFsc2V9IgoKICAgIGlmICRjbG9iYmVyOyB0aGVuCiAgICAgICAgbG9nICJPdmVyd3JpdGluZyBmaWxlICRmaWxlbmFtZSIKICAgICAgICBlY2hvICIkZmlsZV9jb250ZW50cyIgPiAiJGZpbGVuYW1lIgogICAgZWxzZQogICAgICAgIGxvZyAiQXBwZW5kaW5nIHRvICRmaWxlbmFtZSIKICAgICAgICBlY2hvICIkZmlsZV9jb250ZW50cyIgPj4gIiRmaWxlbmFtZSIKICAgIGZpCn0KCiMgcmV0cnkoKQojCiMgQWRkIHJldHJ5IGxvZ2ljIHRvIGNvbW1hbmRzIGluIG9yZGVyIHRvIGF2b2lkIHN0YWxsaW5nIG91dCBvbiByZXNvdXJjZSBsb2NrcwojIGFyZ3M6CiMgICAxKSBjbWRfcmV0cnkgLSBuYW1lcmVmLCBhcnJheQojICAgICAgICogQ29tbWFuZCBhbmQgYXJndW1lbnQocykgdG8gcmV0cnkKIyAgIDIpIHdhaXRfdGltZSAtIG5hbWVyZWYsIGludGVnZXIKIyAgICAgICAqIFRpbWUgdG8gd2FpdCBiZWZvcmUgcmV0cnlpbmcgY29tbWFuZAojICAgMykgcmV0cmllcyAtIGludGVnZXIsIG9wdGlvbmFsCiMgICAgICAgKiBBbW91bnQgb2YgdGltZXMgdG8gcmV0cnkgY29tbWFuZCwgZGVmYXVsdHMgdG8gNQpyZXRyeSgpIHsKICAgIGxvY2FsIC1uIGNtZF9yZXRyeT0iJDEiCiAgICBsb2NhbCAtbiB3YWl0X3RpbWU9IiQyIgogICAgbG9jYWwgLXJpIHJldHJpZXM9IiR7MzotNX0iCgogICAgCiAgICBmb3IgYXR0ZW1wdCBpbiAkKHNlcSAxICRyZXRyaWVzKTsgZG8KICAgICAgICBsb2cgImF0dGVtcHQgIyR7YXR0ZW1wdH0gLSAke0ZVTkNOQU1FWzJdfSIKICAgICAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwNjgKICAgICAgICAke2NtZF9yZXRyeVtAXX0gJgoKICAgICAgICB3YWl0IC1mICQhICYmIHJldHVybiAwCiAgICAgICAgc2xlZXAgIiR3YWl0X3RpbWUiCiAgICBkb25lCgogICAgYWJvcnQgIiR7Y21kX3JldHJ5WypdfSBmYWlsZWQgYWZ0ZXIgIyRyZXRyaWVzIGF0dGVtcHRzIgp9CgojIHZlcmlmeV9yb2xlKCkKIwojIGFyZ3M6CiMgICAxKSB0ZXN0X3JvbGUgLSBuYW1lcmVmCiMgICAgICAgKiByb2xlIGJlaW5nIHZlcmlmaWVkCnZlcmlmeV9yb2xlKCkgewogICAgbG9jYWwgLW4gdGVzdF9yb2xlPSIkMSIKCiAgICBhbGxvd2VkX3JvbGVzX2dsb2I9Iigkcm9sZV9ycHwkcm9sZV9nYXRld2F5fCRyb2xlX2RldnByb3h5KSIKICAgIGlmIFtbICIkdGVzdF9yb2xlIiA9fiAkYWxsb3dlZF9yb2xlc19nbG9iIF1dOyB0aGVuCiAgICAgICAgbG9nICJWZXJpZmllZCByb2xlIFwiJHRlc3Rfcm9sZVwiIgogICAgZWxzZQogICAgICAgIGFib3J0ICJmYWlsZWQgdG8gdmVyaWZ5IHJvbGUsIHJvbGUgXCIke3Rlc3Rfcm9sZX1cIiBub3QgaW4gXCIke2FsbG93ZWRfcm9sZXNfZ2xvYn1cIiIKICAgIGZpCn0KCiMgZ2V0X2tleXZhdWx0X3N1ZmZpeCgpCiMKIyBhcmdzOgojICAgMSkgcmwgLSBuYW1lcmVmLCBzdHJpbmcKIyAgICAgICAqIHJvbGUgdG8gZ2V0IHNob3J0IHJvbGUgZm9yCiMgICAyKSBrdl9zdWZmaXggLSBuYW1lcmVmLCBzdHJpbmcKIyAgICAgICAqIHNob3J0IHJvbGUgd2lsbCBiZSBhc3NpZ25lZCB0byB0aGlzIG5hbWVyZWYKIyAgIDMpIHNlY19wcmVmaXggLSBuYW1lcmVmLCBzdHJpbmcKIyAgICAgICAqIGtleXZhdWx0IGNlcnRpZmljYXRlIHByZWZpeCB3aWxsIGJlIGFzc2lnbmVkIHRvIHRoaXMgbmFtZXJlZgpnZXRfa2V5dmF1bHRfc3VmZml4KCkgewogICAgbG9jYWwgLW4gcmw9IiQxIgogICAgbG9jYWwgLW4ga3Zfc3VmZml4PSIkMiIKICAgIGxvY2FsIC1uIHNlY19wcmVmaXg9IiQzIgoKICAgIGxvY2FsIC1yIGtleXZhdWx0X3N1ZmZpeF9ycD0ic3ZjIgogICAgbG9jYWwgLXIga2V5dmF1bHRfcHJlZml4X2dhdGV3YXk9Imd3eSIKCiAgICBjYXNlICIkcmwiIGluCiAgICAgICAgIiRyb2xlX2dhdGV3YXkiKQogICAgICAgICAgICBrdl9zdWZmaXg9IiRrZXl2YXVsdF9wcmVmaXhfZ2F0ZXdheSIKICAgICAgICAgICAgc2VjX3ByZWZpeD0iJGtleXZhdWx0X3ByZWZpeF9nYXRld2F5IgogICAgICAgICAgICA7OwogICAgICAgICIkcm9sZV9ycCIpCiAgICAgICAgICAgIGt2X3N1ZmZpeD0iJGtleXZhdWx0X3N1ZmZpeF9ycCIKICAgICAgICAgICAgc2VjX3ByZWZpeD0iJHJvbGVfcnAiCiAgICAgICAgICAgIDs7CiAgICAgICAgKikKICAgICAgICAgICAgYWJvcnQgInVua25vd24gcm9sZSAkcmwiCiAgICAgICAgICAgIDs7CiAgICBlc2FjCn0KCiMgcmVib290X3ZtKCkKIwojIHJlYm9vdF92bSByZXN0b3JlcyBjYWxscyBzaHV0ZG93biAtciBpbiBhIHN1YnNoZWxsCiMgICAqIFJlYm9vdHMgc2hvdWxkIHNjaGVkdWxlZCBhZnRlciBhbGwgVk0gZXh0ZW5zaW9ucyBoYXZlIGhhZCB0aW1lIHRvIGNvbXBsZXRlCiMgICAqIFJlZmVyZW5jZTogaHR0cHM6Ly9sZWFybi5taWNyb3NvZnQuY29tL2VuLXVzL2F6dXJlL3ZpcnR1YWwtbWFjaGluZXMvZXh0ZW5zaW9ucy9jdXN0b20tc2NyaXB0LWxpbnV4I3RpcHMKcmVib290X3ZtKCkgewogICAgbG9nICJzdGFydGluZyIKCiAgICAoc2h1dGRvd24gLXIgbm93ICYpCn0KIyEvYmluL2Jhc2gKIyBSZXBvc2l0b3J5IGFuZCBwYWNrYWdlIG1hbmFnZW1lbnQgcmVsYXRlZCBmdW5jdGlvbnMKCiMgY29uZmlndXJlX3JlcG9fbWFyaW5lcl9leHRlbmRlZCgpCmNvbmZpZ3VyZV9yZXBvX21hcmluZXJfZXh0ZW5kZWQoKSB7CiAgICBsb2NhbCAtciBleHRlbmRlZF9yZXBvX2NvbmZpZz0iaHR0cHM6Ly9wYWNrYWdlcy5taWNyb3NvZnQuY29tL2NibC1tYXJpbmVyLzIuMC9wcm9kL2V4dGVuZGVkL3g4Nl82NC9jb25maWcucmVwbyIKICAgIGN1cmwgLXNTTCAiJGV4dGVuZGVkX3JlcG9fY29uZmlnIiAtbyAvZXRjL3l1bS5yZXBvcy5kL21hcmluZXItZXh0ZW5kZWQucmVwbwoKICAgIGxvY2FsIC1yIHJlcG9fbmFtZT0iY2JsLW1hcmluZXIyLjBwcm9kZXh0ZW5kZWR4ODZfNjQiCgogICAgbG9jYWwgLXJhIGNtZD0oCiAgICAgICAgZG5mCiAgICAgICAgdXBkYXRlCiAgICAgICAgLXkKICAgICAgICAtLWVuYWJsZXJlcG89IiRyZXBvX25hbWUiCiAgICApCgogICAgbG9nICJFbmFibGluZyByZXBvICRyZXBvX25hbWUiCiAgICByZXRyeSBjbWQgIiQxIiAiJHsyOi19Igp9CgojIGNvbmZpZ3VyZV9ycG1fcmVwb3MKIwojIE5ldyByZXBvc2l0b3JpZXMgc2hvdWxkIGJlIGFkZGVkIGluIHRoZWlyIG93biBmdW5jdGlvbnMsIGFuZCBjYWxsZWQgaGVyZQojIGFyZ3M6CiMgICAxKSB3YWl0X3RpbWUgLSBuYW1lcmVmLCBpbnRlZ2VyCiMgICAgICAgKiBUaW1lIHRvIHdhaXQgYmVmb3JlIHJldHJ5aW5nIGNvbW1hbmQKIyAgIDIpIHJldHJpZXMgLSBpbnRlZ2VyLCBvcHRpb25hbAojICAgICAgICogQW1vdW50IG9mIHRpbWVzIHRvIHJldHJ5IGNvbW1hbmQsIGRlZmF1bHRzIHRvIDUKY29uZmlndXJlX3JwbV9yZXBvcygpIHsKICAgIGxvZyAic3RhcnRpbmciCgogICAgY29uZmlndXJlX3JlcG9fbWFyaW5lcl9leHRlbmRlZCAiJDEiICIkezI6LTF9Igp9CgojIGRuZl9pbnN0YWxsX3BrZ3MKIwojIGFyZ3M6CiMgICAxKSBwa2dzIC0gbmFtZXJlZiwgc3RyaW5nIGFycmF5CiMgICAgICAgKiBQYWNrYWdlcyB0byBiZSBpbnN0YWxsZWQKIyAgIDIpIHdhaXRfdGltZSAtIG5hbWVyZWYsIGludGVnZXIKIyAgICAgICAqIFRpbWUgdG8gd2FpdCBiZWZvcmUgcmV0cnlpbmcgY29tbWFuZAojICAgMykgcmV0cmllcyAtIGludGVnZXIsIG9wdGlvbmFsCiMgICAgICAgKiBBbW91bnQgb2YgdGltZXMgdG8gcmV0cnkgY29tbWFuZCwgZGVmYXVsdHMgdG8gNQpkbmZfaW5zdGFsbF9wa2dzKCkgewogICAgbG9jYWwgLW4gcGtncz0iJDEiCiAgICBsb2cgInN0YXJ0aW5nIgoKICAgIGxvY2FsIC1hIGNtZD0oCiAgICAgICAgZG5mCiAgICAgICAgLXkKICAgICAgICBpbnN0YWxsCiAgICApCiAgICAKICAgICMgUmVmZXJlbmNlOiBodHRwczovL3d3dy5zaGVsbGNoZWNrLm5ldC93aWtpL1NDMjIwNgogICAgIyBhcHBlbmQgcGtncyBhcnJheSB0byBjbWQKICAgIG1hcGZpbGUgLU8gJCgoICR7I2NtZFtAXX0gKyAxICkpIC1kICcgJyBjbWQgPDw8ICIke3BrZ3NbQF19IgogICAgbG9jYWwgLXIgY21kCgogICAgbG9nICJBdHRlbXB0aW5nIHRvIGluc3RhbGwgcGFja2FnZXM6ICR7cGtnc1sqXX0iCiAgICByZXRyeSBjbWQgIiQyIiAiJHszOi19Igp9CgoKIyBkbmZfdXBkYXRlX3BrZ3MKIwojIGFyZ3M6CiMgICAxKSBleGNsdWRlcyAtIG5hbWVyZWYsIHN0cmluZyBhcnJheSwgb3B0aW9uYWwKIyAgICAgICAqIFBhY2thZ2VzIHRvIGV4Y2x1ZGUgZnJvbSB1cGRhdGluZwojICAgICAgICogRWFjaCBpbmRleCBtdXN0IGJlIHByZWZpeGVkIHdpdGggLXggCiMgICAyKSB3YWl0X3RpbWUgLSBuYW1lcmVmLCBpbnRlZ2VyCiMgICAgICAgKiBUaW1lIHRvIHdhaXQgYmVmb3JlIHJldHJ5aW5nIGNvbW1hbmQKIyAgIDMpIHJldHJpZXMgLSBpbnRlZ2VyLCBvcHRpb25hbAojICAgICAgICogQW1vdW50IG9mIHRpbWVzIHRvIHJldHJ5IGNvbW1hbmQsIGRlZmF1bHRzIHRvIDUKZG5mX3VwZGF0ZV9wa2dzKCkgewogICAgbG9jYWwgLW4gZXhjbHVkZXM9IiR7MTotZW1wdHlfc3RyfSIKICAgIGxvZyAic3RhcnRpbmciCgogICAgbG9jYWwgLWEgY21kPSgKICAgICAgICBkbmYKICAgICAgICAteQogICAgICAgICMgUmVwbGFjZWQgd2l0aCBleGNsdWRlcwogICAgICAgICIiCiAgICAgICAgdXBkYXRlCiAgICAgICAgLS1hbGxvd2VyYXNpbmcKICAgICkKCiAgICBpZiBbIC1uICIke2V4Y2x1ZGVzfSIgXTsgdGhlbgogICAgICAgICMgUmVmZXJlbmNlIGh0dHBzOi8vd3d3LnNoZWxsY2hlY2submV0L3dpa2kvU0MyMjA2CiAgICAgICAgbWFwZmlsZSAtTyAyIGNtZCA8PDwgIiR7ZXhjbHVkZXNbQF19IgogICAgZWxzZQogICAgICAgICMgUmVtb3ZlIGVtcHR5IHN0cmluZyBpZiB3ZSBhcmVuJ3QgcmVwbGFjaW5nIHRoZW0sIHByb2JhYmx5IGRvZXNuJ3QgbWF0dGVyLCBidXQgd2h5IG5vdCBiZSBzYWZlCiAgICAgICAgdW5zZXQgImNtZFsyXSIKICAgIGZpCiAgICBsb2NhbCAtciBjbWQKCiAgICBsb2cgIlVwZGF0aW5nIGFsbCBwYWNrYWdlcyBleGNsdWRpbmcgXCIke2V4Y2x1ZGVzWypdOi19XCIiCiAgICByZXRyeSBjbWQgIiQyIiAiJHszOi19Igp9CgojIHJwbV9pbXBvcnRfa2V5cwojCiMgYXJnczoKIyAgIDEpIGtleXMgLSBuYW1lcmVmLCBzdHJpbmcgYXJyYXkKIyAgICAgICAqIHJwbSBrZXlzIHRvIGJlIGltcG9ydGVkCiMgICAyKSB3YWl0X3RpbWUgLSBuYW1lcmVmLCBpbnRlZ2VyCiMgICAgICAgKiBUaW1lIHRvIHdhaXQgYmVmb3JlIHJldHJ5aW5nIGNvbW1hbmQKcnBtX2ltcG9ydF9rZXlzKCkgewogICAgbG9jYWwgLW4ga2V5cz0iJDEiCiAgICBsb2cgInN0YXJ0aW5nIgoKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjA2OAogICAgZm9yIGtleSBpbiAke2tleXNbQF19OyBkbwogICAgICAgIGlmIFsgJHsja2V5c1tAXX0gLWVxIDAgXTsgdGhlbgogICAgICAgICAgICBicmVhawogICAgICAgIGZpCgogICAgICAgIGxvY2FsIC1hIGNtZD0oCiAgICAgICAgICAgIHJwbQogICAgICAgICAgICAtLWltcG9ydAogICAgICAgICAgICAtdgogICAgICAgICAgICAiJGtleSIKICAgICAgICApCgogICAgICAgIGxvZyAiSW1wb3J0aW5nIHJwbSByZXBvc2l0b3J5IGtleSAka2V5IgogICAgICAgIHJldHJ5IGNtZCAiJDIiICIkezM6LX0iICYmIHVuc2V0IGtleQogICAgZG9uZQp9CgojIHV0aWxfY29tbW9uPSJ1dGlsLWNvbW1vbi5zaCIKIwojIHV0aWwtY29tbW9uLnNoIGRvZXMgbm90IGV4aXN0IHdoZW4gZGVwbG95ZWQgdG8gVk1TUyB2aWEgVk1TUyBleHRlbnNpb25zCiMgUHJvdmlkZXMgc2hlbGxjaGVjayBkZWZpbml0aW9ucwp1dGlsX2NvbW1vbj0idXRpbC1jb21tb24uc2giCmlmIFsgLWYgIiR1dGlsX2NvbW1vbiIgXTsgdGhlbgogICAgIyBzaGVsbGNoZWNrIHNvdXJjZT11dGlsLWNvbW1vbi5zaAogICAgc291cmNlICIkdXRpbF9jb21tb24iCmZpCiMhL2Jpbi9iYXNoCiMgQVJPIHNlcnZpY2Ugc2V0dXAgZnVuY3Rpb25zCgojIGVuYWJsZV9zZXJ2aWNlcwojCiMgZW5hYmxlcyB0aGUgc3lzdGVtZCBzZXJ2aWNlcyB0aGF0IGFyZSBwYXNzZWQgaW4KIyBhcmdzOgojICAgKiAxKSBzZXJ2aWNlcyAtIGFycmF5CiMgICAgICAgKiBzZXJ2aWNlcyB0byBiZSBlbmFibGVkCmVuYWJsZV9zZXJ2aWNlcygpIHsKICAgIGxvY2FsIC1uIHN2Y3M9IiQxIgogICAgbG9nICJzdGFydGluZyIKCiAgICBzeXN0ZW1jdGwgZGFlbW9uLXJlbG9hZAoKICAgIGxvZyAiZW5hYmxpbmcgc2VydmljZXMgJHtzdmNzWypdfSIKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjA2OAogICAgZm9yIHN2YyBpbiAke3N2Y3NbQF19OyBkbwogICAgICAgIGxvZyAiRW5hYmxpbmcgYW5kIHN0YXJ0aW5nICRzdmMgbm93IgogICAgICAgIHN5c3RlbWN0bCBlbmFibGUgXAogICAgICAgICAgICAgICAgICAtLW5vdyBcCiAgICAgICAgICAgICAgICAgICIkc3ZjIgogICAgZG9uZQp9CgojIGNvbmZpZ3VyZV9zZXJ2aWNlX2Fyb19nYXRld2F5CiMKIyBhcmdzOgojICAgMSkgaW1hZ2UgLSBuYW1lcmVmLCBzdHJpbmcKIyAgICAgICAqIGNvbnRhaW5lciBpbWFnZQojICAgMikgcm9sZSAtIG5hbWVyZWYsIHN0cmluZwojICAgICAgICogVk1TUyByb2xlCiMgICAzKSBjb25mX2ZpbGUgLSBuYW1lcmVmLCBzdHJpbmcKIyAgICAgICAqIGFybyBnYXRld2F5IGVudmlyb25tZW50IGZpbGUKIyAgIDQpIGlwYWRkcmVzcyAtIG5hbWVyZWYsIHN0cmluZwojICAgICAgICogc3RhdGljIGlwIG9mIHBvZG1hbiBuZXR3b3JrIHRvIGJlIGF0dGFjaGVkCmNvbmZpZ3VyZV9zZXJ2aWNlX2Fyb19nYXRld2F5KCkgewogICAgbG9jYWwgLW4gaW1hZ2U9IiQxIgogICAgbG9jYWwgLW4gcm9sZT0iJDIiCiAgICBsb2NhbCAtbiBjb25mX2ZpbGU9IiQzIgogICAgbG9jYWwgLW4gaXBhZGRyZXNzPSIkNCIKICAgIGxvZyAic3RhcnRpbmciCiAgICBsb2cgIkNvbmZpZ3VyaW5nIGFyby1nYXRld2F5IHNlcnZpY2UiCgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciBhcm9fZ2F0ZXdheV9jb25mX2ZpbGVuYW1lPScvZXRjL3N5c2NvbmZpZy9hcm8tZ2F0ZXdheScKICAgIGxvY2FsIC1yIGFkZF9jb25mX2ZpbGU9IlBPRE1BTl9ORVRXT1JLPSdwb2RtYW4nCklQQUREUkVTUz0nJGlwYWRkcmVzcycKUk9MRT0nJHtyb2xlLCx9JwpBUk9fTE9HX0xFVkVMPSckR0FURVdBWUxPR0xFVkVMJyIKCiAgICB3cml0ZV9maWxlIGFyb19nYXRld2F5X2NvbmZfZmlsZW5hbWUgY29uZl9maWxlIHRydWUKICAgIHdyaXRlX2ZpbGUgYXJvX2dhdGV3YXlfY29uZl9maWxlbmFtZSBhZGRfY29uZl9maWxlIGZhbHNlCgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciBhcm9fZ2F0ZXdheV9zZXJ2aWNlX2ZpbGVuYW1lPScvZXRjL3N5c3RlbWQvc3lzdGVtL2Fyby1nYXRld2F5LnNlcnZpY2UnCgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMTYKICAgICMgYmVsb3cgdmFyaWFibGUgaXMgaW4gc2luZ2xlIHF1b3RlcwogICAgIyBhcyBpdCBpcyB0byBiZSBleHBhbmRlZCBhdCBzeXN0ZW1kIHN0YXJ0IHRpbWUgKGJ5IHN5c3RlbWQsIG5vdCB0aGlzIHNjcmlwdCkKICAgIGxvY2FsIC1yIGFyb19nYXRld2F5X3NlcnZpY2VfZmlsZT0nW1VuaXRdCkFmdGVyPW5ldHdvcmstb25saW5lLnRhcmdldApXYW50cz1uZXR3b3JrLW9ubGluZS50YXJnZXQKCltTZXJ2aWNlXQpFbnZpcm9ubWVudEZpbGU9L2V0Yy9zeXNjb25maWcvYXJvLWdhdGV3YXkKRXhlY1N0YXJ0UHJlPS0vdXNyL2Jpbi9wb2RtYW4gcm0gLWYgJU4KRXhlY1N0YXJ0PS91c3IvYmluL3BvZG1hbiBydW4gXAogIC0taG9zdG5hbWUgJUggXAogIC0tbmFtZSAlTiBcCiAgLS1ybSBcCiAgLS1jYXAtZHJvcCBuZXRfcmF3IFwKICAtZSBBQ1JfUkVTT1VSQ0VfSUQgXAogIC1lIERBVEFCQVNFX0FDQ09VTlRfTkFNRSBcCiAgLWUgR0FURVdBWV9ET01BSU5TIFwKICAtZSBHQVRFV0FZX0ZFQVRVUkVTIFwKICAtZSBNRE1fQUNDT1VOVCBcCiAgLWUgTURNX05BTUVTUEFDRSBcCiAgLWUgQVJPX0xPR19MRVZFTCBcCiAgLW0gMmcgXAogIC0tbmV0d29yaz0ke1BPRE1BTl9ORVRXT1JLfSBcCiAgLS1pcCAke0lQQUREUkVTU30gXAogIC1wIDgwOjgwODAgXAogIC1wIDgwODE6ODA4MSBcCiAgLXAgNDQzOjg0NDMgXAogIC12IC9ydW4vc3lzdGVtZC9qb3VybmFsOi9ydW4vc3lzdGVtZC9qb3VybmFsIFwKICAtdiAvdmFyL2V0dzovdmFyL2V0dzp6IFwKICAke1JQSU1BR0V9IFwKICAke1JPTEV9CkV4ZWNTdG9wPS91c3IvYmluL3BvZG1hbiBzdG9wIC10IDM2MDAgJU4KVGltZW91dFN0b3BTZWM9MzYwMApSZXN0YXJ0PWFsd2F5cwpSZXN0YXJ0U2VjPTEKU3RhcnRMaW1pdEludGVydmFsPTAKCltJbnN0YWxsXQpXYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldAogICAgJwoKICAgIHdyaXRlX2ZpbGUgYXJvX2dhdGV3YXlfc2VydmljZV9maWxlbmFtZSBhcm9fZ2F0ZXdheV9zZXJ2aWNlX2ZpbGUgdHJ1ZQp9CgojIGNvbmZpZ3VyZV9zZXJ2aWNlX2Fyb19ycAojCiMgYXJnczoKIyAgICogMSkgaW1hZ2UgLSBuYW1lcmVmLCBzdHJpbmcKIyAgICAgICAqIFJQIGNvbnRhaW5lciBpbWFnZQojICAgKiAyKSByb2xlIC0gbmFtZXJlZiwgc3RyaW5nCiMgICAgICAgKiBWTVNTIHJvbGUKIyAgICogMykgY29uZl9maWxlIC0gbmFtZXJlZiwgc3RyaW5nCiMgICAgICAgKiBhcm8gcnAgZW52aXJvbm1lbnQgZmlsZQojICAgKiA0KSBpcGFkZHJlc3MgLSBuYW1lcmVmLCBzdHJpbmcKIyAgICAgICAqIHN0YXRpYyBpcCBvZiBwb2RtYW4gbmV0d29yayB0byBiZSBhdHRhY2hlZApjb25maWd1cmVfc2VydmljZV9hcm9fcnAoKSB7CiAgICBsb2NhbCAtbiBpbWFnZT0iJDEiCiAgICBsb2NhbCAtbiByb2xlPSIkMiIKICAgIGxvY2FsIC1uIGNvbmZfZmlsZT0iJDMiCiAgICBsb2NhbCAtbiBpcGFkZHJlc3M9IiQ0IgogICAgbG9nICJzdGFydGluZyIKICAgIGxvZyAiQ29uZmlndXJpbmcgYXJvLXJwIHNlcnZpY2UiCgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciBhcm9fcnBfY29uZl9maWxlbmFtZT0nL2V0Yy9zeXNjb25maWcvYXJvLXJwJwogICAgbG9jYWwgLXIgYWRkX2NvbmZfZmlsZT0iUE9ETUFOX05FVFdPUks9J3BvZG1hbicKSVBBRERSRVNTPSckaXBhZGRyZXNzJwpST0xFPScke3JvbGUsLH0nCkFST19MT0dfTEVWRUw9JyRSUExPR0xFVkVMJyIKCiAgICB3cml0ZV9maWxlIGFyb19ycF9jb25mX2ZpbGVuYW1lIGNvbmZfZmlsZSB0cnVlCiAgICB3cml0ZV9maWxlIGFyb19ycF9jb25mX2ZpbGVuYW1lIGFkZF9jb25mX2ZpbGUgZmFsc2UKCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIGFyb19ycF9zZXJ2aWNlX2ZpbGVuYW1lPScvZXRjL3N5c3RlbWQvc3lzdGVtL2Fyby1ycC5zZXJ2aWNlJwoKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDE2CiAgICAjIGJlbG93IHZhcmlhYmxlIGlzIGluIHNpbmdsZSBxdW90ZXMKICAgICMgYXMgaXQgaXMgdG8gYmUgZXhwYW5kZWQgYXQgc3lzdGVtZCBzdGFydCB0aW1lIChieSBzeXN0ZW1kLCBub3QgdGhpcyBzY3JpcHQpCiAgICBsb2NhbCAtciBhcm9fcnBfc2VydmljZV9maWxlPSdbVW5pdF0KQWZ0ZXI9bmV0d29yay1vbmxpbmUudGFyZ2V0CldhbnRzPW5ldHdvcmstb25saW5lLnRhcmdldAoKW1NlcnZpY2VdCkVudmlyb25tZW50RmlsZT0vZXRjL3N5c2NvbmZpZy9hcm8tcnAKRXhlY1N0YXJ0UHJlPS0vdXNyL2Jpbi9wb2RtYW4gcm0gLWYgJU4KRXhlY1N0YXJ0PS91c3IvYmluL3BvZG1hbiBydW4gXAogIC0taG9zdG5hbWUgJUggXAogIC0tbmFtZSAlTiBcCiAgLS1ybSBcCiAgLS1jYXAtZHJvcCBuZXRfcmF3IFwKICAtZSBBQ1JfUkVTT1VSQ0VfSUQgXAogIC1lIEFETUlOX0FQSV9DTElFTlRfQ0VSVF9DT01NT05fTkFNRSBcCiAgLWUgQVJNX0FQSV9DTElFTlRfQ0VSVF9DT01NT05fTkFNRSBcCiAgLWUgQVpVUkVfQVJNX0NMSUVOVF9JRCBcCiAgLWUgQVpVUkVfRlBfQ0xJRU5UX0lEIFwKICAtZSBDTFVTVEVSX01ETV9BQ0NPVU5UIFwKICAtZSBDTFVTVEVSX01ETV9OQU1FU1BBQ0UgXAogIC1lIENMVVNURVJfTURTRF9BQ0NPVU5UIFwKICAtZSBDTFVTVEVSX01EU0RfQ09ORklHX1ZFUlNJT04gXAogIC1lIENMVVNURVJfTURTRF9OQU1FU1BBQ0UgXAogIC1lIERBVEFCQVNFX0FDQ09VTlRfTkFNRSBcCiAgLWUgRE9NQUlOX05BTUUgXAogIC1lIEdBVEVXQVlfRE9NQUlOUyBcCiAgLWUgR0FURVdBWV9SRVNPVVJDRUdST1VQIFwKICAtZSBLRVlWQVVMVF9QUkVGSVggXAogIC1lIE1ETV9BQ0NPVU5UIFwKICAtZSBNRE1fTkFNRVNQQUNFIFwKICAtZSBNRFNEX0VOVklST05NRU5UIFwKICAtZSBSUF9GRUFUVVJFUyBcCiAgLWUgQVJPX0lOU1RBTExfVklBX0hJVkUgXAogIC1lIEFST19ISVZFX0RFRkFVTFRfSU5TVEFMTEVSX1BVTExTUEVDIFwKICAtZSBBUk9fQURPUFRfQllfSElWRSBcCiAgLWUgT0lEQ19BRkRfRU5EUE9JTlQgXAogIC1lIE9JRENfU1RPUkFHRV9BQ0NPVU5UX05BTUUgXAogIC1lIE1TSV9SUF9FTkRQT0lOVCBcCiAgLWUgT1RFTF9BVURJVF9RVUVVRV9TSVpFIFwKICAtZSBNSVNFX0FERFJFU1MgXAogIC1lIEFST19MT0dfTEVWRUwgXAogIC1tIDJnIFwKICAtLW5ldHdvcms9JHtQT0RNQU5fTkVUV09SS30gXAogIC0taXAgJHtJUEFERFJFU1N9IFwKICAtcCA0NDM6ODQ0MyBcCiAgLXYgL2V0Yy9hcm8tcnA6L2V0Yy9hcm8tcnAgXAogIC12IC9ydW4vc3lzdGVtZC9qb3VybmFsOi9ydW4vc3lzdGVtZC9qb3VybmFsIFwKICAtdiAvdmFyL2V0dzovdmFyL2V0dzp6IFwKICAtdiAvdmFyL3J1bi9tZHNkL2FzYTovdmFyL3J1bi9tZHNkL2FzYTp6IFwKICAke1JQSU1BR0V9IFwKICAke1JPTEV9CkV4ZWNTdG9wPS91c3IvYmluL3BvZG1hbiBzdG9wIC10IDM2MDAgJU4KVGltZW91dFN0b3BTZWM9MzYwMApSZXN0YXJ0PWFsd2F5cwpSZXN0YXJ0U2VjPTEKU3RhcnRMaW1pdEludGVydmFsPTAKCltJbnN0YWxsXQpXYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldCcKCiAgICB3cml0ZV9maWxlIGFyb19ycF9zZXJ2aWNlX2ZpbGVuYW1lIGFyb19ycF9zZXJ2aWNlX2ZpbGUgdHJ1ZQp9CgojIGNvbmZpZ3VyZV9zZXJ2aWNlX2Fyb19tb25pdG9yCiMKIyBhcmdzOgojICAgMSkgaW1hZ2UgLSBuYW1lcmVmLCBzdHJpbmcKIyAgICAgICAqIFJQIGNvbnRhaW5lciBpbWFnZQojICAgMikgaXBhZGRyZXNzIC0gbmFtZXJlZiwgc3RyaW5nCiMgICAgICAgKiBzdGF0aWMgaXAgb2YgcG9kbWFuIG5ldHdvcmsgdG8gYmUgYXR0YWNoZWQKY29uZmlndXJlX3NlcnZpY2VfYXJvX21vbml0b3IoKSB7CiAgICBsb2NhbCAtbiBpbWFnZT0iJDEiCiAgICBsb2NhbCAtbiBpcGFkZHJlc3M9IiQyIgogICAgbG9nICJzdGFydGluZyIKICAgIGxvZyAiQ29uZmlndXJpbmcgYXJvLW1vbml0b3Igc2VydmljZSIKCiAgICAjIERPTUFJTl9OQU1FLCBDTFVTVEVSX01EU0RfQUNDT1VOVCwgQ0xVU1RFUl9NRFNEX0NPTkZJR19WRVJTSU9OLCBHQVRFV0FZX0RPTUFJTlMsIEdBVEVXQVlfUkVTT1VSQ0VHUk9VUCwgTURTRF9FTlZJUk9OTUVOVCBDTFVTVEVSX01EU0RfTkFNRVNQQUNFCiAgICAjIGFyZSBub3QgdXNlZCwgYnV0IGNhbid0IGVhc2lseSBiZSByZWZhY3RvcmVkIG91dC4gU2hvdWxkIGJlIHJldmlzaXRlZCBpbiB0aGUgZnV0dXJlLgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciBhcm9fbW9uaXRvcl9zZXJ2aWNlX2NvbmZfZmlsZW5hbWU9Jy9ldGMvc3lzY29uZmlnL2Fyby1tb25pdG9yJwoKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgYXJvX21vbml0b3Jfc2VydmljZV9jb25mX2ZpbGU9IkFaVVJFX0ZQX0NMSUVOVF9JRD0nJEZQQ0xJRU5USUQnCkRPTUFJTl9OQU1FPSckTE9DQVRJT04uJENMVVNURVJQQVJFTlRET01BSU5OQU1FJwpDTFVTVEVSX01EU0RfQUNDT1VOVD0nJENMVVNURVJNRFNEQUNDT1VOVCcKQ0xVU1RFUl9NRFNEX0NPTkZJR19WRVJTSU9OPSckQ0xVU1RFUk1EU0RDT05GSUdWRVJTSU9OJwpHQVRFV0FZX0RPTUFJTlM9JyRHQVRFV0FZRE9NQUlOUycKR0FURVdBWV9SRVNPVVJDRUdST1VQPSckR0FURVdBWVJFU09VUkNFR1JPVVBOQU1FJwpNRFNEX0VOVklST05NRU5UPSckTURTREVOVklST05NRU5UJwpDTFVTVEVSX01EU0RfTkFNRVNQQUNFPSckQ0xVU1RFUk1EU0ROQU1FU1BBQ0UnCkNMVVNURVJfTURNX0FDQ09VTlQ9JyRDTFVTVEVSTURNQUNDT1VOVCcKQ0xVU1RFUl9NRE1fTkFNRVNQQUNFPUJCTQpEQVRBQkFTRV9BQ0NPVU5UX05BTUU9JyREQVRBQkFTRUFDQ09VTlROQU1FJwpLRVlWQVVMVF9QUkVGSVg9JyRLRVlWQVVMVFBSRUZJWCcKTURNX0FDQ09VTlQ9JyRSUE1ETUFDQ09VTlQnCk1ETV9OQU1FU1BBQ0U9QkJNClJQSU1BR0U9JyRpbWFnZScKUE9ETUFOX05FVFdPUks9J3BvZG1hbicKSVBBRERSRVNTPSckaXBhZGRyZXNzJwpBUk9fSU5TVEFMTF9WSUFfSElWRT0nJENMVVNURVJTSU5TVEFMTFZJQUhJVkUnCkFST19ISVZFX0RFRkFVTFRfSU5TVEFMTEVSX1BVTExTUEVDPSckQ0xVU1RFUkRFRkFVTFRJTlNUQUxMRVJQVUxMU1BFQycKQVJPX0FET1BUX0JZX0hJVkU9JyRDTFVTVEVSU0FET1BUQllISVZFJwpBUk9fTE9HX0xFVkVMPSckTU9OSVRPUkxPR0xFVkVMJyIKCiAgICB3cml0ZV9maWxlIGFyb19tb25pdG9yX3NlcnZpY2VfY29uZl9maWxlbmFtZSBhcm9fbW9uaXRvcl9zZXJ2aWNlX2NvbmZfZmlsZSB0cnVlCgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciBhcm9fbW9uaXRvcl9zZXJ2aWNlX2ZpbGVuYW1lPScvZXRjL3N5c3RlbWQvc3lzdGVtL2Fyby1tb25pdG9yLnNlcnZpY2UnCgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMTYKICAgICMgYmVsb3cgdmFyaWFibGUgaXMgaW4gc2luZ2xlIHF1b3RlcwogICAgIyBhcyBpdCBpcyB0byBiZSBleHBhbmRlZCBhdCBzeXN0ZW1kIHN0YXJ0IHRpbWUgKGJ5IHN5c3RlbWQsIG5vdCB0aGlzIHNjcmlwdCkKICAgIGxvY2FsIC1yIGFyb19tb25pdG9yX3NlcnZpY2VfZmlsZT0nW1VuaXRdCkFmdGVyPW5ldHdvcmstb25saW5lLnRhcmdldApXYW50cz1uZXR3b3JrLW9ubGluZS50YXJnZXQKCltTZXJ2aWNlXQpFbnZpcm9ubWVudEZpbGU9L2V0Yy9zeXNjb25maWcvYXJvLW1vbml0b3IKRXhlY1N0YXJ0UHJlPS0vdXNyL2Jpbi9wb2RtYW4gcm0gLWYgJU4KRXhlY1N0YXJ0PS91c3IvYmluL3BvZG1hbiBydW4gXAogIC0taG9zdG5hbWUgJUggXAogIC0tbmFtZSAlTiBcCiAgLS1ybSBcCiAgLS1jYXAtZHJvcCBuZXRfcmF3IFwKICAtLW5ldHdvcms9JHtQT0RNQU5fTkVUV09SS30gXAogIC0taXAgJHtJUEFERFJFU1N9IFwKICAtZSBBWlVSRV9GUF9DTElFTlRfSUQgXAogIC1lIERPTUFJTl9OQU1FIFwKICAtZSBDTFVTVEVSX01EU0RfQUNDT1VOVCBcCiAgLWUgQ0xVU1RFUl9NRFNEX0NPTkZJR19WRVJTSU9OIFwKICAtZSBHQVRFV0FZX0RPTUFJTlMgXAogIC1lIEdBVEVXQVlfUkVTT1VSQ0VHUk9VUCBcCiAgLWUgTURTRF9FTlZJUk9OTUVOVCBcCiAgLWUgQ0xVU1RFUl9NRFNEX05BTUVTUEFDRSBcCiAgLWUgQ0xVU1RFUl9NRE1fQUNDT1VOVCBcCiAgLWUgQ0xVU1RFUl9NRE1fTkFNRVNQQUNFIFwKICAtZSBEQVRBQkFTRV9BQ0NPVU5UX05BTUUgXAogIC1lIEtFWVZBVUxUX1BSRUZJWCBcCiAgLWUgTURNX0FDQ09VTlQgXAogIC1lIE1ETV9OQU1FU1BBQ0UgXAogIC1lIEFST19JTlNUQUxMX1ZJQV9ISVZFIFwKICAtZSBBUk9fSElWRV9ERUZBVUxUX0lOU1RBTExFUl9QVUxMU1BFQyBcCiAgLWUgQVJPX0FET1BUX0JZX0hJVkUgXAogIC1lIEFST19MT0dfTEVWRUwgXAogIC1tIDIuNWcgXAogIC12IC9ydW4vc3lzdGVtZC9qb3VybmFsOi9ydW4vc3lzdGVtZC9qb3VybmFsIFwKICAtdiAvdmFyL2V0dzovdmFyL2V0dzp6IFwKICAke1JQSU1BR0V9IFwKICBtb25pdG9yClJlc3RhcnQ9YWx3YXlzClJlc3RhcnRTZWM9MQpTdGFydExpbWl0SW50ZXJ2YWw9MAoKW0luc3RhbGxdCldhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0JwoKICAgIHdyaXRlX2ZpbGUgYXJvX21vbml0b3Jfc2VydmljZV9maWxlbmFtZSBhcm9fbW9uaXRvcl9zZXJ2aWNlX2ZpbGUgdHJ1ZQp9CgojIGNvbmZpZ3VyZV9zZXJ2aWNlX2Fyb19wb3J0YWwKIwojIGFyZ3M6CiMgICAqIDEpIGltYWdlIC0gbmFtZXJlZiwgc3RyaW5nCiMgICAgICAgKiBSUCBjb250YWluZXIgaW1hZ2UKIyAgICogMikgaXBhZGRyZXNzIC0gbmFtZXJlZiwgc3RyaW5nCiMgICAgICAgKiBzdGF0aWMgaXAgb2YgcG9kbWFuIG5ldHdvcmsgdG8gYmUgYXR0YWNoZWQKY29uZmlndXJlX3NlcnZpY2VfYXJvX3BvcnRhbCgpIHsKICAgIGxvY2FsIC1uIGltYWdlPSIkMSIKICAgIGxvY2FsIC1uIGlwYWRkcmVzcz0iJDIiCiAgICBsb2cgInN0YXJ0aW5nIgogICAgbG9nICJDb25maWd1cmluZyBhcm8gcG9ydGFsIHNlcnZpY2UiCgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciBhcm9fcG9ydGFsX3NlcnZpY2VfY29uZl9maWxlbmFtZT0nL2V0Yy9zeXNjb25maWcvYXJvLXBvcnRhbCcKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgYXJvX3BvcnRhbF9zZXJ2aWNlX2NvbmZfZmlsZT0iQVpVUkVfUE9SVEFMX0FDQ0VTU19HUk9VUF9JRFM9JyRQT1JUQUxBQ0NFU1NHUk9VUElEUycKQVpVUkVfUE9SVEFMX0NMSUVOVF9JRD0nJFBPUlRBTENMSUVOVElEJwpBWlVSRV9QT1JUQUxfRUxFVkFURURfR1JPVVBfSURTPSckUE9SVEFMRUxFVkFURURHUk9VUElEUycKREFUQUJBU0VfQUNDT1VOVF9OQU1FPSckREFUQUJBU0VBQ0NPVU5UTkFNRScKS0VZVkFVTFRfUFJFRklYPSckS0VZVkFVTFRQUkVGSVgnCk1ETV9BQ0NPVU5UPSckUlBNRE1BQ0NPVU5UJwpNRE1fTkFNRVNQQUNFPVBvcnRhbApQT1JUQUxfSE9TVE5BTUU9JyRMT0NBVElPTi5hZG1pbi4kUlBQQVJFTlRET01BSU5OQU1FJwpPVEVMX0FVRElUX1FVRVVFX1NJWkU9JyRPVEVMQVVESVRRVUVVRVNJWkUnClJQSU1BR0U9JyRpbWFnZScKUE9ETUFOX05FVFdPUks9J3BvZG1hbicKSVBBRERSRVNTPSckaXBhZGRyZXNzJwpBUk9fTE9HX0xFVkVMPSckUE9SVEFMTE9HTEVWRUwnIgoKICAgIHdyaXRlX2ZpbGUgYXJvX3BvcnRhbF9zZXJ2aWNlX2NvbmZfZmlsZW5hbWUgYXJvX3BvcnRhbF9zZXJ2aWNlX2NvbmZfZmlsZSB0cnVlCgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciBhcm9fcG9ydGFsX3NlcnZpY2VfZmlsZW5hbWU9Jy9ldGMvc3lzdGVtZC9zeXN0ZW0vYXJvLXBvcnRhbC5zZXJ2aWNlJwoKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDE2CiAgICAjIGJlbG93IHZhcmlhYmxlIGlzIGluIHNpbmdsZSBxdW90ZXMKICAgICMgYXMgaXQgaXMgdG8gYmUgZXhwYW5kZWQgYXQgc3lzdGVtZCBzdGFydCB0aW1lIChieSBzeXN0ZW1kLCBub3QgdGhpcyBzY3JpcHQpCiAgICBsb2NhbCAtciBhcm9fcG9ydGFsX3NlcnZpY2VfZmlsZT0nW1VuaXRdCkFmdGVyPW5ldHdvcmstb25saW5lLnRhcmdldApXYW50cz1uZXR3b3JrLW9ubGluZS50YXJnZXQKU3RhcnRMaW1pdEludGVydmFsPTAKCltTZXJ2aWNlXQpFbnZpcm9ubWVudEZpbGU9L2V0Yy9zeXNjb25maWcvYXJvLXBvcnRhbApFeGVjU3RhcnRQcmU9LS91c3IvYmluL3BvZG1hbiBybSAtZiAlTgpFeGVjU3RhcnQ9L3Vzci9iaW4vcG9kbWFuIHJ1biBcCiAgLS1ob3N0bmFtZSAlSCBcCiAgLS1uYW1lICVOIFwKICAtLXJtIFwKICAtLWNhcC1kcm9wIG5ldF9yYXcgXAogIC0tbmV0d29yaz0ke1BPRE1BTl9ORVRXT1JLfSBcCiAgLS1pcCAke0lQQUREUkVTU30gXAogIC1lIEFaVVJFX1BPUlRBTF9BQ0NFU1NfR1JPVVBfSURTIFwKICAtZSBBWlVSRV9QT1JUQUxfQ0xJRU5UX0lEIFwKICAtZSBBWlVSRV9QT1JUQUxfRUxFVkFURURfR1JPVVBfSURTIFwKICAtZSBEQVRBQkFTRV9BQ0NPVU5UX05BTUUgXAogIC1lIEtFWVZBVUxUX1BSRUZJWCBcCiAgLWUgTURNX0FDQ09VTlQgXAogIC1lIE1ETV9OQU1FU1BBQ0UgXAogIC1lIFBPUlRBTF9IT1NUTkFNRSBcCiAgLWUgT1RFTF9BVURJVF9RVUVVRV9TSVpFIFwKICAtZSBBUk9fTE9HX0xFVkVMIFwKICAtbSAyZyBcCiAgLXAgNDQ0Ojg0NDQgXAogIC1wIDIyMjI6MjIyMiBcCiAgLXYgL3J1bi9zeXN0ZW1kL2pvdXJuYWw6L3J1bi9zeXN0ZW1kL2pvdXJuYWwgXAogIC12IC92YXIvZXR3Oi92YXIvZXR3OnogXAogIC12IC92YXIvcnVuL21kc2QvYXNhOi92YXIvcnVuL21kc2QvYXNhOnogXAogICR7UlBJTUFHRX0gXAogIHBvcnRhbApSZXN0YXJ0PWFsd2F5cwpSZXN0YXJ0U2VjPTEKCltJbnN0YWxsXQpXYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldCcKCiAgICB3cml0ZV9maWxlIGFyb19wb3J0YWxfc2VydmljZV9maWxlbmFtZSBhcm9fcG9ydGFsX3NlcnZpY2VfZmlsZSB0cnVlCn0KCiMgY29uZmlndXJlX3NlcnZpY2VfYXJvX21pbW9fYWN0dWF0b3IKIwojIGFyZ3M6CiMgICAxKSBpbWFnZSAtIG5hbWVyZWYsIHN0cmluZwojICAgICAgICogUlAgY29udGFpbmVyIGltYWdlCiMgICAyKSBjb25mX2ZpbGUgLSBuYW1lcmVmLCBzdHJpbmcKIyAgICAgICAqIGFybyBycCBlbnZpcm9ubWVudCBmaWxlCiMgICAzKSBpcGFkZHJlc3MgLSBuYW1lcmVmLCBzdHJpbmcKIyAgICAgICAqIHN0YXRpYyBpcCBvZiBwb2RtYW4gbmV0d29yayB0byBiZSBhdHRhY2hlZApjb25maWd1cmVfc2VydmljZV9hcm9fbWltb19hY3R1YXRvcigpIHsKICAgIGxvY2FsIC1uIGltYWdlPSIkMSIKICAgIGxvY2FsIC1uIGNvbmZfZmlsZT0iJDIiCiAgICBsb2NhbCAtbiBpcGFkZHJlc3M9IiQzIgogICAgbG9nICJzdGFydGluZyIKICAgIGxvZyAiQ29uZmlndXJpbmcgYXJvLW1pbW8tYWN0dWF0b3Igc2VydmljZSIKCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIGFyb19taW1vX2FjdHVhdG9yX2NvbmZfZmlsZW5hbWU9Jy9ldGMvc3lzY29uZmlnL2Fyby1taW1vLWFjdHVhdG9yJwoKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgYWRkX2NvbmZfZmlsZT0iUE9ETUFOX05FVFdPUks9J3BvZG1hbicKSVBBRERSRVNTPSckaXBhZGRyZXNzJwpBUk9fTE9HX0xFVkVMPSckTUlNT0FDVFVBVE9STE9HTEVWRUwnIgoKICAgIHdyaXRlX2ZpbGUgYXJvX21pbW9fYWN0dWF0b3JfY29uZl9maWxlbmFtZSBjb25mX2ZpbGUgdHJ1ZQogICAgd3JpdGVfZmlsZSBhcm9fbWltb19hY3R1YXRvcl9jb25mX2ZpbGVuYW1lIGFkZF9jb25mX2ZpbGUgZmFsc2UKCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIGFyb19taW1vX2FjdHVhdG9yX3NlcnZpY2VfZmlsZW5hbWU9Jy9ldGMvc3lzdGVtZC9zeXN0ZW0vYXJvLW1pbW8tYWN0dWF0b3Iuc2VydmljZScKCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAxNgogICAgIyBiZWxvdyB2YXJpYWJsZSBpcyBpbiBzaW5nbGUgcXVvdGVzCiAgICAjIGFzIGl0IGlzIHRvIGJlIGV4cGFuZGVkIGF0IHN5c3RlbWQgc3RhcnQgdGltZSAoYnkgc3lzdGVtZCwgbm90IHRoaXMgc2NyaXB0KQogICAgbG9jYWwgLXIgYXJvX21pbW9fYWN0dWF0b3Jfc2VydmljZV9maWxlPSdbVW5pdF0KQWZ0ZXI9bmV0d29yay1vbmxpbmUudGFyZ2V0CldhbnRzPW5ldHdvcmstb25saW5lLnRhcmdldAoKW1NlcnZpY2VdCkVudmlyb25tZW50RmlsZT0vZXRjL3N5c2NvbmZpZy9hcm8tbWltby1hY3R1YXRvcgpFeGVjU3RhcnRQcmU9LS91c3IvYmluL3BvZG1hbiBybSAtZiAlTgpFeGVjU3RhcnQ9L3Vzci9iaW4vcG9kbWFuIHJ1biBcCiAgLS1ob3N0bmFtZSAlSCBcCiAgLS1uYW1lICVOIFwKICAtLXJtIFwKICAtLWNhcC1kcm9wIG5ldF9yYXcgXAogIC1lIEFDUl9SRVNPVVJDRV9JRCBcCiAgLWUgQURNSU5fQVBJX0NMSUVOVF9DRVJUX0NPTU1PTl9OQU1FIFwKICAtZSBBUk1fQVBJX0NMSUVOVF9DRVJUX0NPTU1PTl9OQU1FIFwKICAtZSBBWlVSRV9BUk1fQ0xJRU5UX0lEIFwKICAtZSBBWlVSRV9GUF9DTElFTlRfSUQgXAogIC1lIENMVVNURVJfTURNX0FDQ09VTlQgXAogIC1lIENMVVNURVJfTURNX05BTUVTUEFDRSBcCiAgLWUgQ0xVU1RFUl9NRFNEX0FDQ09VTlQgXAogIC1lIENMVVNURVJfTURTRF9DT05GSUdfVkVSU0lPTiBcCiAgLWUgQ0xVU1RFUl9NRFNEX05BTUVTUEFDRSBcCiAgLWUgREFUQUJBU0VfQUNDT1VOVF9OQU1FIFwKICAtZSBET01BSU5fTkFNRSBcCiAgLWUgR0FURVdBWV9ET01BSU5TIFwKICAtZSBHQVRFV0FZX1JFU09VUkNFR1JPVVAgXAogIC1lIEtFWVZBVUxUX1BSRUZJWCBcCiAgLWUgTURNX0FDQ09VTlQgXAogIC1lIE1ETV9OQU1FU1BBQ0UgXAogIC1lIE1EU0RfRU5WSVJPTk1FTlQgXAogIC1lIFJQX0ZFQVRVUkVTIFwKICAtZSBBUk9fSU5TVEFMTF9WSUFfSElWRSBcCiAgLWUgQVJPX0hJVkVfREVGQVVMVF9JTlNUQUxMRVJfUFVMTFNQRUMgXAogIC1lIEFST19BRE9QVF9CWV9ISVZFIFwKICAtZSBPSURDX0FGRF9FTkRQT0lOVCBcCiAgLWUgT0lEQ19TVE9SQUdFX0FDQ09VTlRfTkFNRSBcCiAgLWUgTVNJX1JQX0VORFBPSU5UIFwKICAtZSBBUk9fTE9HX0xFVkVMIFwKICAtbSAyZyBcCiAgLS1uZXR3b3JrPSR7UE9ETUFOX05FVFdPUkt9IFwKICAtLWlwICR7SVBBRERSRVNTfSBcCiAgLXAgNDQ1Ojg0NDUgXAogIC12IC9ldGMvYXJvLXJwOi9ldGMvYXJvLXJwIFwKICAtdiAvcnVuL3N5c3RlbWQvam91cm5hbDovcnVuL3N5c3RlbWQvam91cm5hbCBcCiAgLXYgL3Zhci9ldHc6L3Zhci9ldHc6eiBcCiAgJHtSUElNQUdFfSBcCiAgbWltby1hY3R1YXRvcgpFeGVjU3RvcD0vdXNyL2Jpbi9wb2RtYW4gc3RvcCAtdCAzNjAwICVOClRpbWVvdXRTdG9wU2VjPTM2MDAKUmVzdGFydD1hbHdheXMKUmVzdGFydFNlYz0xClN0YXJ0TGltaXRJbnRlcnZhbD0wCgpbSW5zdGFsbF0KV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQnCgogICAgd3JpdGVfZmlsZSBhcm9fbWltb19hY3R1YXRvcl9zZXJ2aWNlX2ZpbGVuYW1lIGFyb19taW1vX2FjdHVhdG9yX3NlcnZpY2VfZmlsZSB0cnVlCn0KCiMgY29uZmlndXJlX3NlcnZpY2VfYXJvX21pbW9fc2NoZWR1bGVyCiMgYXJnczoKIyAxKSBpbWFnZSAtIG5hbWVyZWYsIHN0cmluZwojICAgICAgICogUlAgY29udGFpbmVyIGltYWdlCiMgMikgY29uZl9maWxlIC0gbmFtZXJlZiwgc3RyaW5nCiMgICAgICAgKiBhcm8gcnAgZW52aXJvbm1lbnQgZmlsZQojIDMpIGlwYWRkcmVzcyAtIG5hbWVyZWYsIHN0cmluZwojICAgICAgICogc3RhdGljIGlwIG9mIHBvZG1hbiBuZXR3b3JrIHRvIGJlIGF0dGFjaGVkCmNvbmZpZ3VyZV9zZXJ2aWNlX2Fyb19taW1vX3NjaGVkdWxlcigpIHsKICAgIGxvY2FsIC1uIGltYWdlPSIkMSIKICAgIGxvY2FsIC1uIGNvbmZfZmlsZT0iJDIiCiAgICBsb2NhbCAtbiBpcGFkZHJlc3M9IiQzIgogICAgbG9nICJzdGFydGluZyIKICAgIGxvZyAiQ29uZmlndXJpbmcgYXJvLW1pbW8tc2NoZWR1bGVyIHNlcnZpY2UiCgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciBhcm9fbWltb19zY2hlZHVsZXJfY29uZl9maWxlbmFtZT0nL2V0Yy9zeXNjb25maWcvYXJvLW1pbW8tc2NoZWR1bGVyJwogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciBhZGRfY29uZl9maWxlPSJQT0RNQU5fTkVUV09SSz0ncG9kbWFuJwpJUEFERFJFU1M9JyRpcGFkZHJlc3MnCkFST19MT0dfTEVWRUw9JyRNSU1PU0NIRURVTEVSTE9HTEVWRUwnIgoKICAgIHdyaXRlX2ZpbGUgYXJvX21pbW9fc2NoZWR1bGVyX2NvbmZfZmlsZW5hbWUgY29uZl9maWxlIHRydWUKICAgIHdyaXRlX2ZpbGUgYXJvX21pbW9fc2NoZWR1bGVyX2NvbmZfZmlsZW5hbWUgYWRkX2NvbmZfZmlsZSBmYWxzZQoKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgYXJvX21pbW9fc2NoZWR1bGVyX3NlcnZpY2VfZmlsZW5hbWU9Jy9ldGMvc3lzdGVtZC9zeXN0ZW0vYXJvLW1pbW8tc2NoZWR1bGVyLnNlcnZpY2UnCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQgZGlzYWJsZT1TQzIwMTYKICAgICMgYmVsb3cgdmFyaWFibGUgaXMgaW4gc2luZ2xlIHF1b3RlcwogICAgIyBhcyBpdCBpcyB0byBiZSBleHBhbmRlZCBhdCBzeXN0ZW1kIHN0YXJ0IHRpbWUgKGJ5IHN5c3RlbWQsIG5vdCB0aGlzIHNjcmlwdCkKICAgIGxvY2FsIC1yIGFyb19taW1vX3NjaGVkdWxlcl9zZXJ2aWNlX2ZpbGU9J1tVbml0XQpBZnRlcj1uZXR3b3JrLW9ubGluZS50YXJnZXQKV2FudHM9bmV0d29yay1vbmxpbmUudGFyZ2V0CgpbU2VydmljZV0KRW52aXJvbm1lbnRGaWxlPS9ldGMvc3lzY29uZmlnL2Fyby1taW1vLXNjaGVkdWxlcgpFeGVjU3RhcnRQcmU9LS91c3IvYmluL3BvZG1hbiBybSAtZiAlTgpFeGVjU3RhcnQ9L3Vzci9iaW4vcG9kbWFuIHJ1biBcCiAgLS1ob3N0bmFtZSAlSCBcCiAgLS1uYW1lICVOIFwKICAtLXJtIFwKICAtLWNhcC1kcm9wIG5ldF9yYXcgXAogIC1lIEFDUl9SRVNPVVJDRV9JRCBcCiAgLWUgQURNSU5fQVBJX0NMSUVOVF9DRVJUX0NPTU1PTl9OQU1FIFwKICAtZSBBUk1fQVBJX0NMSUVOVF9DRVJUX0NPTU1PTl9OQU1FIFwKICAtZSBBWlVSRV9BUk1fQ0xJRU5UX0lEIFwKICAtZSBBWlVSRV9GUF9DTElFTlRfSUQgXAogIC1lIENMVVNURVJfTURNX0FDQ09VTlQgXAogIC1lIENMVVNURVJfTURNX05BTUVTUEFDRSBcCiAgLWUgQ0xVU1RFUl9NRFNEX0FDQ09VTlQgXAogIC1lIENMVVNURVJfTURTRF9DT05GSUdfVkVSU0lPTiBcCiAgLWUgQ0xVU1RFUl9NRFNEX05BTUVTUEFDRSBcCiAgLWUgREFUQUJBU0VfQUNDT1VOVF9OQU1FIFwKICAtZSBET01BSU5fTkFNRSBcCiAgLWUgR0FURVdBWV9ET01BSU5TIFwKICAtZSBHQVRFV0FZX1JFU09VUkNFR1JPVVAgXAogIC1lIEtFWVZBVUxUX1BSRUZJWCBcCiAgLWUgTURNX0FDQ09VTlQgXAogIC1lIE1ETV9OQU1FU1BBQ0UgXAogIC1lIE1EU0RfRU5WSVJPTk1FTlQgXAogIC1lIFJQX0ZFQVRVUkVTIFwKICAtZSBBUk9fSU5TVEFMTF9WSUFfSElWRSBcCiAgLWUgQVJPX0hJVkVfREVGQVVMVF9JTlNUQUxMRVJfUFVMTFNQRUMgXAogIC1lIEFST19BRE9QVF9CWV9ISVZFIFwKICAtZSBPSURDX0FGRF9FTkRQT0lOVCBcCiAgLWUgT0lEQ19TVE9SQUdFX0FDQ09VTlRfTkFNRSBcCiAgLWUgTVNJX1JQX0VORFBPSU5UIFwKICAtZSBBUk9fTE9HX0xFVkVMIFwKICAtbSAyZyBcCiAgLS1uZXR3b3JrPSR7UE9ETUFOX05FVFdPUkt9IFwKICAtLWlwICR7SVBBRERSRVNTfSBcCiAgLXAgNDQ2Ojg0NDYgXAogIC12IC9ldGMvYXJvLXJwOi9ldGMvYXJvLXJwIFwKICAtdiAvcnVuL3N5c3RlbWQvam91cm5hbDovcnVuL3N5c3RlbWQvam91cm5hbCBcCiAgLXYgL3Zhci9ldHc6L3Zhci9ldHc6eiBcCiAgJHtSUElNQUdFfSBcCiAgbWltby1zY2hlZHVsZXIKRXhlY1N0b3A9L3Vzci9iaW4vcG9kbWFuIHN0b3AgLXQgMzYwMCAlTgpUaW1lb3V0U3RvcFNlYz0zNjAwClJlc3RhcnQ9YWx3YXlzClJlc3RhcnRTZWM9MQpTdGFydExpbWl0SW50ZXJ2YWw9MAoKW0luc3RhbGxdCldhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0JwoKICAgIHdyaXRlX2ZpbGUgYXJvX21pbW9fc2NoZWR1bGVyX3NlcnZpY2VfZmlsZW5hbWUgYXJvX21pbW9fc2NoZWR1bGVyX3NlcnZpY2VfZmlsZSB0cnVlCn0KCiMgY29uZmlndXJlX3NlcnZpY2VfYXJvX21pc2UKIwojIGFyZ3M6CiMgICAxKSBpbWFnZSAtIG5hbWVyZWYsIHN0cmluZwojICAgICAgICogTUlTRSBjb250YWluZXIgaW1hZ2UKIyAgIDIpIGlwYWRkcmVzcyAtIG5hbWVyZWYsIHN0cmluZwojICAgICAgICogc3RhdGljIGlwIG9mIHBvZG1hbiBuZXR3b3JrIHRvIGJlIGF0dGFjaGVkCmNvbmZpZ3VyZV9zZXJ2aWNlX2Fyb19taXNlKCkgewogICAgbG9jYWwgLW4gaW1hZ2U9IiQxIgogICAgbG9jYWwgLW4gaXBhZGRyZXNzPSIkMiIKICAgIGxvZyAic3RhcnRpbmciCiAgICBsb2cgIkNvbmZpZ3VyaW5nIGFyby1taXNlIHNlcnZpY2UiCgogICAgTE9HSU5JTlNUQU5DRT0iaHR0cHM6Ly9sb2dpbi5taWNyb3NvZnRvbmxpbmUuY29tIgogICAgaWYgW1sgJEFaVVJFQ0xPVUROQU1FID09ICIkdXNfZ292X2Nsb3VkIiBdXTsgdGhlbgogICAgICAgIExPR0lOSU5TVEFOQ0U9Imh0dHBzOi8vbG9naW4ubWljcm9zb2Z0b25saW5lLnVzIgogICAgZmkKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgYXJvX21pc2Vfc2VydmljZV9jb25mX2ZpbGVuYW1lPScvZXRjL3N5c2NvbmZpZy9hcm8tbWlzZScKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgYXJvX21pc2Vfc2VydmljZV9jb25mX2ZpbGU9IkZQQ0xJRU5USUQ9JyRGUENMSUVOVElEJwpGUFRFTkFOVElEPSckRlBURU5BTlRJRCcKTUlTRUlNQUdFPSckaW1hZ2UnCk1JU0VWQUxJREFVRElFTkNFUz0nJE1JU0VWQUxJREFVRElFTkNFUycKTUlTRVZBTElEQVBQSURTPSckTUlTRVZBTElEQVBQSURTJwpMT0dJTklOU1RBTkNFPSckTE9HSU5JTlNUQU5DRScKUE9ETUFOX05FVFdPUks9J3BvZG1hbicKSVBBRERSRVNTPSckaXBhZGRyZXNzJyIKCiAgICB3cml0ZV9maWxlIGFyb19taXNlX3NlcnZpY2VfY29uZl9maWxlbmFtZSBhcm9fbWlzZV9zZXJ2aWNlX2NvbmZfZmlsZSB0cnVlCgogICAgbWtkaXIgLXAgL2FwcC9taXNlCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIGFyb19taXNlX2FwcHNldHRpbmdzX2ZpbGVuYW1lPScvYXBwL21pc2UvYXBwc2V0dGluZ3MuanNvbicKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgYXJvX21pc2VfYXBwc2V0dGluZ3NfZmlsZT0iewogICAgXCJWZXJzaW9uXCI6IFwiMVwiLAogICAgXCJIZWFydGJlYXRJbnRlcnZhbE1zXCI6IDUwMDAsCiAgICBcIkF6dXJlQWRcIjogewogICAgICAgIFwiSW5zdGFuY2VcIjogXCIkTE9HSU5JTlNUQU5DRVwiLAogICAgICAgIFwiQ2xpZW50SWRcIjogXCIkRlBDTElFTlRJRFwiLAogICAgICAgIFwiVGVuYW50SWRcIjogXCIkRlBURU5BTlRJRFwiLAogICAgICAgIFwiQXVkaWVuY2VcIjogXCJhcGk6Ly8kRlBDTElFTlRJRFwiLAogICAgICAgIFwiU2hvd1BJSVwiOiBmYWxzZSwKICAgICAgICBcIkluYm91bmRQb2xpY2llc1wiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFwiTGFiZWxcIjogXCJhcm9ycC1hcm0taW5ib3VuZC1wb2xpY3lcIiwKICAgICAgICAgICAgICAgIFwiQXV0aG9yaXR5XCI6IFwiJExPR0lOSU5TVEFOQ0UvJEZQVEVOQU5USUQvXCIKLAogICAgICAgICAgICAgICAgXCJBdXRoZW50aWNhdGlvblNjaGVtZXNcIjogWwogICAgICAgICAgICAgICAgICAgIFwiUG9QXCIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICBcIlZhbGlkQXVkaWVuY2VzXCI6ICRNSVNFVkFMSURBVURJRU5DRVMsCiAgICAgICAgICAgICAgICBcIlNpZ25lZEh0dHBSZXF1ZXN0VmFsaWRhdGlvblBvbGljeVwiOiB7CiAgICAgICAgICAgICAgICAgICAgXCJWYWxpZGF0ZVRzXCI6IHRydWUsCiAgICAgICAgICAgICAgICAgICAgXCJWYWxpZGF0ZU1cIjogdHJ1ZSwKICAgICAgICAgICAgICAgICAgICBcIlZhbGlkYXRlVVwiOiB0cnVlLAogICAgICAgICAgICAgICAgICAgIFwiVmFsaWRhdGVQXCI6IHRydWUKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBcIlZhbGlkQXBwbGljYXRpb25JZHNcIjogJE1JU0VWQUxJREFQUElEUwogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICBcIkxvZ2dpbmdcIjogewogICAgICAgICAgICBcIkxvZ0xldmVsXCI6IFwiSW5mb3JtYXRpb25cIgogICAgICAgIH0sCiAgICAgICAgXCJNb2R1bGVzXCI6IHsKICAgICAgICAgICAgXCJUclYyXCI6IHsKICAgICAgICAgICAgICAgIFwiTW9kdWxlVHlwZVwiOiBcIlRyVjJNb2R1bGVcIiwKICAgICAgICAgICAgICAgIFwiRW5hYmxlZFwiOiB0cnVlCiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9LAogICAgXCJBbGxvd2VkSG9zdHNcIjogXCIqXCIsCiAgICBcIktlc3RyZWxcIjogewogICAgICAgIFwiRW5kcG9pbnRzXCI6IHsKICAgICAgICAgICAgXCJIdHRwXCI6IHsKICAgICAgICAgICAgICAgIFwiVXJsXCI6IFwiaHR0cDovLyRpcGFkZHJlc3M6NTAwMFwiCiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9LAogICAgXCJMb2dnaW5nXCI6IHsKICAgICAgICBcIkxvZ0xldmVsXCI6IHsKICAgICAgICAgICAgXCJEZWZhdWx0XCI6IFwiSW5mb3JtYXRpb25cIiwKICAgICAgICAgICAgXCJNaWNyb3NvZnRcIjogXCJJbmZvcm1hdGlvblwiLAogICAgICAgICAgICBcIk1pY3Jvc29mdC5Ib3N0aW5nLkxpZmV0aW1lXCI6IFwiSW5mb3JtYXRpb25cIgogICAgICAgIH0sCiAgICAgICAgXCJDb25zb2xlXCI6IHsKICAgICAgICAgICAgXCJGb3JtYXR0ZXJOYW1lXCI6IFwiU2ltcGxlXCIsCiAgICAgICAgICAgIFwiRm9ybWF0dGVyT3B0aW9uc1wiOiB7CiAgICAgICAgICAgICAgICBcIkluY2x1ZGVTY29wZXNcIjogdHJ1ZSwKICAgICAgICAgICAgICAgIFwiU2luZ2xlTGluZVwiOiB0cnVlLAogICAgICAgICAgICAgICAgXCJUaW1lc3RhbXBGb3JtYXRcIjogXCJISDptbTpzcy5mZmZmIFwiLAogICAgICAgICAgICAgICAgXCJVc2VVdGNUaW1lc3RhbXBcIjogdHJ1ZQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9IgoKICAgIHdyaXRlX2ZpbGUgYXJvX21pc2VfYXBwc2V0dGluZ3NfZmlsZW5hbWUgYXJvX21pc2VfYXBwc2V0dGluZ3NfZmlsZSB0cnVlCgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciBhcm9fbWlzZV9zZXJ2aWNlX2ZpbGVuYW1lPScvZXRjL3N5c3RlbWQvc3lzdGVtL2Fyby1taXNlLnNlcnZpY2UnCgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMTYKICAgICMgYmVsb3cgdmFyaWFibGUgaXMgaW4gc2luZ2xlIHF1b3RlcwogICAgIyBhcyBpdCBpcyB0byBiZSBleHBhbmRlZCBhdCBzeXN0ZW1kIHN0YXJ0IHRpbWUgKGJ5IHN5c3RlbWQsIG5vdCB0aGlzIHNjcmlwdCkKICAgIGxvY2FsIC1yIGFyb19taXNlX3NlcnZpY2VfZmlsZT0nW1VuaXRdCkFmdGVyPW5ldHdvcmstb25saW5lLnRhcmdldApXYW50cz1uZXR3b3JrLW9ubGluZS50YXJnZXQKU3RhcnRMaW1pdEludGVydmFsU2VjPTAKW1NlcnZpY2VdClJlc3RhcnRTZWM9MXMKRW52aXJvbm1lbnRGaWxlPS9ldGMvc3lzY29uZmlnL2Fyby1taXNlCkV4ZWNTdGFydFByZT0tL3Vzci9iaW4vcG9kbWFuIHJtIC1mICVOCkV4ZWNTdGFydD0vdXNyL2Jpbi9wb2RtYW4gcnVuIFwKICAtcCA1MDAwOjUwMDAgXAogIC12IC9hcHAvbWlzZS9hcHBzZXR0aW5ncy5qc29uOi9hcHAvYXBwc2V0dGluZ3MuanNvbjp6IFwKICAtLWhvc3RuYW1lICVIIFwKICAtLW5hbWUgJU4gXAogIC0tbmV0d29yaz0ke1BPRE1BTl9ORVRXT1JLfSBcCiAgLS1pcCAke0lQQUREUkVTU30gXAogIC0tcm0gXAogICR7TUlTRUlNQUdFfQpFeGVjU3RvcD0vdXNyL2Jpbi9wb2RtYW4gc3RvcCAlTgpSZXN0YXJ0PWFsd2F5cwpSZXN0YXJ0U2VjPTMKU3RhcnRMaW1pdEludGVydmFsPTAKW0luc3RhbGxdCldhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0JwoKICAgIHdyaXRlX2ZpbGUgYXJvX21pc2Vfc2VydmljZV9maWxlbmFtZSBhcm9fbWlzZV9zZXJ2aWNlX2ZpbGUgdHJ1ZQp9CgojIGNvbmZpZ3VyZV9zZXJ2aWNlX2Fyb19vdGVsX2NvbGxlY3RvcgojCiMgYXJnczoKIyAgIDEpIGltYWdlIC0gbmFtZXJlZiwgc3RyaW5nCiMgICAgICAgKiBPVEVMIGNvbnRhaW5lciBpbWFnZQojICAgMikgc3RhdGljX2lwX2FkZHJlc3MgLSBuYW1lcmVmLCBhcnJheQojICAgICAgICogc3RhdGljIGlwcyBvZiBhbGwgc2VydmljZXMKIyAgIDMpIGlwYWRkcmVzcyAtIG5hbWVyZWYsIHN0cmluZwojICAgICAgICogc3RhdGljIGlwIG9mIHBvZG1hbiBuZXR3b3JrIHRvIGJlIGF0dGFjaGVkCmNvbmZpZ3VyZV9zZXJ2aWNlX2Fyb19vdGVsX2NvbGxlY3RvcigpIHsKICAgIGxvY2FsIC1uIGltYWdlPSIkMSIKICAgIGxvY2FsIC1uIHN0YXRpY19pcF9hZGRyZXNzPSIkMiIKICAgIGxvY2FsIC1uIGlwYWRkcmVzcz0iJDMiCiAgICBsb2cgInN0YXJ0aW5nIgogICAgbG9nICJDb25maWd1cmluZyBhcm8tb3RlbC1jb2xsZWN0b3Igc2VydmljZSIKCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIGFyb19vdGVsX2NvbGxlY3Rvcl9zZXJ2aWNlX2NvbmZfZmlsZW5hbWU9Jy9ldGMvc3lzY29uZmlnL2Fyby1vdGVsLWNvbGxlY3RvcicKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgYXJvX290ZWxfY29sbGVjdG9yX3NlcnZpY2VfY29uZl9maWxlPSJHT01FTUxJTUlUPTEwMDBNaUIKT1RFTElNQUdFPSckaW1hZ2UnClBPRE1BTl9ORVRXT1JLPSdwb2RtYW4nCklQQUREUkVTUz0nJGlwYWRkcmVzcyciCgogICAgd3JpdGVfZmlsZSBhcm9fb3RlbF9jb2xsZWN0b3Jfc2VydmljZV9jb25mX2ZpbGVuYW1lIGFyb19vdGVsX2NvbGxlY3Rvcl9zZXJ2aWNlX2NvbmZfZmlsZSB0cnVlCgogICAgbWtkaXIgLXAgL2FwcC9vdGVsCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIGFyb19vdGVsX2NvbGxlY3Rvcl9hcHBjb25maWdfZmlsZW5hbWU9Jy9hcHAvb3RlbC9jb25maWcueWFtbCcKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgYXJvX290ZWxfY29sbGVjdG9yX2FwcGNvbmZpZ19maWxlPSJyZWNlaXZlcnM6CiAgaHR0cGNoZWNrOgogICAgdGFyZ2V0czoKICAgICMgTUlTRSBFbmRwb2ludHMKICAgICAgLSBlbmRwb2ludDogaHR0cDovLyR7c3RhdGljX2lwX2FkZHJlc3NbIm1pc2UiXX06NTAwMC9oZWFsdGh6CiAgICAgICAgbWV0aG9kOiBHRVQKICAgICAgLSBlbmRwb2ludDogaHR0cDovLyR7c3RhdGljX2lwX2FkZHJlc3NbIm1pc2UiXX06NTAwMC9yZWFkeXoKICAgICAgICBtZXRob2Q6IEdFVAogICAgIyBPVEVMcyBvd24gRW5kcG9pbnRzCiAgICAgIC0gZW5kcG9pbnQ6IGh0dHA6Ly8kaXBhZGRyZXNzOjEzMTMzL2hlYWx0aHoKICAgICAgICBtZXRob2Q6IEdFVAogICAgICAtIGVuZHBvaW50OiBodHRwOi8vJGlwYWRkcmVzczoxMzEzMy9yZWFkeXoKICAgICAgICBtZXRob2Q6IEdFVAogICAgY29sbGVjdGlvbl9pbnRlcnZhbDogMjBzCnByb2Nlc3NvcnM6CiAgYmF0Y2g6CiAgYXR0cmlidXRlcy9pbnNlcnQ6CiAgICBhY3Rpb25zOgogICAgICAtIGtleTogXCJsb2NhdGlvblwiCiAgICAgICAgYWN0aW9uOiBpbnNlcnQKICAgICAgICB2YWx1ZTogXCIkTE9DQVRJT05cIgogICAgICAtIGtleTogXCJob3N0XCIKICAgICAgICBhY3Rpb246IGluc2VydAogICAgICAgIHZhbHVlOiBcIiQoaG9zdG5hbWUpXCIKZXh0ZW5zaW9uczoKICBoZWFsdGhfY2hlY2s6CiAgICBlbmRwb2ludDogJGlwYWRkcmVzczoxMzEzMwpleHBvcnRlcnM6CiAgb3RscDoKICAgIGVuZHBvaW50OiAke3N0YXRpY19pcF9hZGRyZXNzWyJtZG0iXX06NDMxNwogICAgdGxzOgogICAgICBpbnNlY3VyZTogdHJ1ZQpzZXJ2aWNlOgogIGV4dGVuc2lvbnM6IFtoZWFsdGhfY2hlY2tdCiAgcGlwZWxpbmVzOgogICAgbWV0cmljczoKICAgICAgcmVjZWl2ZXJzOiBbaHR0cGNoZWNrXQogICAgICBwcm9jZXNzb3JzOiBbYmF0Y2gsIGF0dHJpYnV0ZXMvaW5zZXJ0XQogICAgICBleHBvcnRlcnM6IFtvdGxwXSIKCiAgICB3cml0ZV9maWxlIGFyb19vdGVsX2NvbGxlY3Rvcl9hcHBjb25maWdfZmlsZW5hbWUgYXJvX290ZWxfY29sbGVjdG9yX2FwcGNvbmZpZ19maWxlIHRydWUKCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIGFyb19vdGVsX2NvbGxlY3Rvcl9zZXJ2aWNlX2ZpbGVuYW1lPScvZXRjL3N5c3RlbWQvc3lzdGVtL2Fyby1vdGVsLWNvbGxlY3Rvci5zZXJ2aWNlJwoKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDE2CiAgICAjIGJlbG93IHZhcmlhYmxlIGlzIGluIHNpbmdsZSBxdW90ZXMKICAgICMgYXMgaXQgaXMgdG8gYmUgZXhwYW5kZWQgYXQgc3lzdGVtZCBzdGFydCB0aW1lIChieSBzeXN0ZW1kLCBub3QgdGhpcyBzY3JpcHQpCiAgICBsb2NhbCAtciBhcm9fb3RlbF9jb2xsZWN0b3Jfc2VydmljZV9maWxlPSdbVW5pdF0KQWZ0ZXI9bWRtLnNlcnZpY2UKV2FudHM9bWRtLnNlcnZpY2UKU3RhcnRMaW1pdEludGVydmFsU2VjPTAKW1NlcnZpY2VdClJlc3RhcnRTZWM9MXMKRW52aXJvbm1lbnRGaWxlPS9ldGMvc3lzY29uZmlnL2Fyby1vdGVsLWNvbGxlY3RvcgpFeGVjU3RhcnRQcmU9LS91c3IvYmluL3BvZG1hbiBybSAtZiAlTgpFeGVjU3RhcnQ9L3Vzci9iaW4vcG9kbWFuIHJ1biBcCiAgLS1ob3N0bmFtZSAlSCBcCiAgLS1uYW1lICVOIFwKICAtLXJtIFwKICAtLW5ldHdvcms9JHtQT0RNQU5fTkVUV09SS30gXAogIC0taXAgJHtJUEFERFJFU1N9IFwKICAtbSAyZyBcCiAgLXYgL2FwcC9vdGVsL2NvbmZpZy55YW1sOi9ldGMvb3RlbGNvbC1jb250cmliL2NvbmZpZy55YW1sOnogXAogICR7T1RFTElNQUdFfQpFeGVjU3RvcD0vdXNyL2Jpbi9wb2RtYW4gc3RvcCAlTgpSZXN0YXJ0PWFsd2F5cwpSZXN0YXJ0U2VjPTMKU3RhcnRMaW1pdEludGVydmFsPTAKW0luc3RhbGxdCldhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0JwoKICAgIHdyaXRlX2ZpbGUgYXJvX290ZWxfY29sbGVjdG9yX3NlcnZpY2VfZmlsZW5hbWUgYXJvX290ZWxfY29sbGVjdG9yX3NlcnZpY2VfZmlsZSB0cnVlCn0KCiMgY29uZmlndXJlX3NlcnZpY2VfbWRzZAojCiMgYXJnczoKIyAgIDEpIG1vbml0b3Jpbmdfcm9sZSAtIG5hbWVyZWYsIHN0cmluZwojICAgICAgICogY2FuIGJlICJnYXRld2F5IiBvciAicnAiCiMgICAyKSBtb25pdG9yX2NvbmZpZ192ZXJzaW9uIC0gbmFtZXJlZiwgc3RyaW5nCiMgICAgICAgKiBtZHNkIGNvbmZpZyB2ZXJzaW9uCmNvbmZpZ3VyZV9zZXJ2aWNlX21kc2QoKSB7CiAgICBsb2NhbCAtbiByb2xlPSIkMSIKICAgIGxvY2FsIC1uIG1vbml0b3JfY29uZmlnX3ZlcnNpb249IiQyIgogICAgbG9nICJzdGFydGluZyIKICAgIGxvZyAiY29uZmlndXJpbmcgbWRzZCBzZXJ2aWNlIgoKICAgIHZlcmlmeV9yb2xlIHJvbGUKCiAgICBsb2NhbCAtciBtZHNkX3NlcnZpY2VfZGlyPSIvZXRjL3N5c3RlbWQvc3lzdGVtL21kc2Quc2VydmljZS5kIgogICAgbWtkaXIgLXAgIiRtZHNkX3NlcnZpY2VfZGlyIgoKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgbWRzZF9vdmVycmlkZV9jb25mX2ZpbGVuYW1lPSIkbWRzZF9zZXJ2aWNlX2Rpci9vdmVycmlkZS5jb25mIgogICAgbG9jYWwgLXIgbWRzZF9jZXJ0aWZpY2F0ZV9zYW49IiQob3BlbnNzbCB4NTA5IC1pbiAvdmFyL2xpYi93YWFnZW50L01pY3Jvc29mdC5BenVyZS5LZXlWYXVsdC5TdG9yZS9tZHNkLnBlbSAtbm9vdXQgLXN1YmplY3QgfCBzZWQgLWUgJ3MvLipDTiA9IC8vJykiCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIG1kc2Rfb3ZlcnJpZGVfY29uZl9maWxlPSJbVW5pdF0KQWZ0ZXI9bmV0d29yay1vbmxpbmUudGFyZ2V0IgoKICAgIHdyaXRlX2ZpbGUgbWRzZF9vdmVycmlkZV9jb25mX2ZpbGVuYW1lIG1kc2Rfb3ZlcnJpZGVfY29uZl9maWxlIHRydWUKCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIGRlZmF1bHRfbWRzZF9maWxlbmFtZT0iL2V0Yy9kZWZhdWx0L21kc2QiCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIGRlZmF1bHRfbWRzZF9maWxlPSJNRFNEX1JPTEVfUFJFRklYPS92YXIvcnVuL21kc2QvZGVmYXVsdApNRFNEX09QVElPTlM9XCItQSAtZCAtciBcJE1EU0RfUk9MRV9QUkVGSVhcIgoKZXhwb3J0IE1PTklUT1JJTkdfR0NTX0VOVklST05NRU5UPSckTURTREVOVklST05NRU5UJwpleHBvcnQgTU9OSVRPUklOR19HQ1NfQUNDT1VOVD0nJFJQTURTREFDQ09VTlQnCmV4cG9ydCBNT05JVE9SSU5HX0dDU19SRUdJT049JyRMT0NBVElPTicKZXhwb3J0IE1PTklUT1JJTkdfR0NTX0FVVEhfSURfVFlQRT1BdXRoS2V5VmF1bHQKZXhwb3J0IE1PTklUT1JJTkdfR0NTX0FVVEhfSUQ9JyRtZHNkX2NlcnRpZmljYXRlX3NhbicKZXhwb3J0IE1PTklUT1JJTkdfR0NTX05BTUVTUEFDRT0nJFJQTURTRE5BTUVTUEFDRScKZXhwb3J0IE1PTklUT1JJTkdfQ09ORklHX1ZFUlNJT049JyRtb25pdG9yX2NvbmZpZ192ZXJzaW9uJwpleHBvcnQgTU9OSVRPUklOR19VU0VfR0VORVZBX0NPTkZJR19TRVJWSUNFPXRydWUKCmV4cG9ydCBNT05JVE9SSU5HX1RFTkFOVD0nJExPQ0FUSU9OJwpleHBvcnQgTU9OSVRPUklOR19ST0xFPSckcm9sZScKZXhwb3J0IE1PTklUT1JJTkdfUk9MRV9JTlNUQU5DRT1cIiQoaG9zdG5hbWUpXCIKCmV4cG9ydCBNRFNEX01TR1BBQ0tfU09SVF9DT0xVTU5TPVwiMVwiIgoKICAgIHdyaXRlX2ZpbGUgZGVmYXVsdF9tZHNkX2ZpbGVuYW1lIGRlZmF1bHRfbWRzZF9maWxlIHRydWUKfQoKIyBjb25maWd1cmVfc2VydmljZV9mbHVlbnRiaXQKIwojIGFyZ3M6CiMgICAxKSBjb25mX2ZpbGUgLSBzdHJpbmcKIyAgICAgICAqIGZsdWVuYml0IGNvbmZpZ3VyYXRpb24gZmlsZQojICAgMikgaW1hZ2UgLSBzdHJpbmcKIyAgICAgICAqIGZsdWVudGJpdCBjb250YWluZXIgaW1hZ2UgdG8gcnVuCiMgICAzKSBpcGFkZHJlc3MgLSBuYW1lcmVmLCBzdHJpbmcKIyAgICAgICAqIHN0YXRpYyBpcCBvZiBwb2RtYW4gbmV0d29yayB0byBiZSBhdHRhY2hlZApjb25maWd1cmVfc2VydmljZV9mbHVlbnRiaXQoKSB7CiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1uIGNvbmZfZmlsZT0iJDEiCiAgICBsb2NhbCAtbiBpbWFnZT0iJDIiCiAgICBsb2cgInN0YXJ0aW5nIgogICAgbG9nICJDb25maWd1cmluZyBmbHVlbnRiaXQgc2VydmljZSIKCiAgICBta2RpciAtcCAvZXRjL2ZsdWVudGJpdC8KICAgIG1rZGlyIC1wIC92YXIvbGliL2ZsdWVudAoKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgY29uZl9maWxlbmFtZT0nL2V0Yy9mbHVlbnRiaXQvZmx1ZW50Yml0LmNvbmYnCiAgICB3cml0ZV9maWxlIGNvbmZfZmlsZW5hbWUgY29uZl9maWxlIHRydWUKCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIHN5c2NvbmZpZ19maWxlbmFtZT0nL2V0Yy9zeXNjb25maWcvZmx1ZW50Yml0JwogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciBzeXNjb25maWdfZmlsZT0iRkxVRU5UQklUSU1BR0U9JGltYWdlIgoKICAgIHdyaXRlX2ZpbGUgc3lzY29uZmlnX2ZpbGVuYW1lIHN5c2NvbmZpZ19maWxlIHRydWUKCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIHNlcnZpY2VfZmlsZW5hbWU9Jy9ldGMvc3lzdGVtZC9zeXN0ZW0vZmx1ZW50Yml0LnNlcnZpY2UnCgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMTYKICAgICMgYmVsb3cgdmFyaWFibGUgaXMgaW4gc2luZ2xlIHF1b3RlcwogICAgIyBhcyBpdCBpcyB0byBiZSBleHBhbmRlZCBhdCBzeXN0ZW1kIHN0YXJ0IHRpbWUgKGJ5IHN5c3RlbWQsIG5vdCB0aGlzIHNjcmlwdCkKICAgIGxvY2FsIC1yIHNlcnZpY2VfZmlsZT0nW1VuaXRdCkFmdGVyPW5ldHdvcmstb25saW5lLnRhcmdldApXYW50cz1uZXR3b3JrLW9ubGluZS50YXJnZXQKU3RhcnRMaW1pdEludGVydmFsU2VjPTAKCltTZXJ2aWNlXQpSZXN0YXJ0U2VjPTFzCkVudmlyb25tZW50RmlsZT0vZXRjL3N5c2NvbmZpZy9mbHVlbnRiaXQKRXhlY1N0YXJ0UHJlPS0vdXNyL2Jpbi9wb2RtYW4gcm0gLWYgJU4KRXhlY1N0YXJ0PS91c3IvYmluL3BvZG1hbiBydW4gXAogIC0tc2VjdXJpdHktb3B0IGxhYmVsPWRpc2FibGUgXAogIC0tZW50cnlwb2ludCAvb3B0L3RkLWFnZW50LWJpdC9iaW4vdGQtYWdlbnQtYml0IFwKICAtLW5ldD1ob3N0IFwKICAtLWhvc3RuYW1lICVIIFwKICAtLW5hbWUgJU4gXAogIC0tcm0gXAogIC0tY2FwLWRyb3AgbmV0X3JhdyBcCiAgLXYgL2V0Yy9mbHVlbnRiaXQvZmx1ZW50Yml0LmNvbmY6L2V0Yy9mbHVlbnRiaXQvZmx1ZW50Yml0LmNvbmYgXAogIC12IC92YXIvbGliL2ZsdWVudDovdmFyL2xpYi9mbHVlbnQ6eiBcCiAgLXYgL3Zhci9sb2cvam91cm5hbDovdmFyL2xvZy9qb3VybmFsOnJvIFwKICAtdiAvZXRjL21hY2hpbmUtaWQ6L2V0Yy9tYWNoaW5lLWlkOnJvIFwKICAke0ZMVUVOVEJJVElNQUdFfSBcCiAgLWMgL2V0Yy9mbHVlbnRiaXQvZmx1ZW50Yml0LmNvbmYKCkV4ZWNTdG9wPS91c3IvYmluL3BvZG1hbiBzdG9wICVOClJlc3RhcnQ9YWx3YXlzClJlc3RhcnRTZWM9NQpTdGFydExpbWl0SW50ZXJ2YWw9MAoKW0luc3RhbGxdCldhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0JwoKICAgIHdyaXRlX2ZpbGUgc2VydmljZV9maWxlbmFtZSBzZXJ2aWNlX2ZpbGUgdHJ1ZQp9CgojIGNvbmZpZ3VyZV90aW1lcnNfbWRtX21kc2QKIwojIGFyZ3M6CiMgICAxKSByb2xlIC0gc3RyaW5nCiMgICAgICAgKiBjYW4gYmUgImdhdGV3YXkiIG9yICJycCIKY29uZmlndXJlX3RpbWVyc19tZG1fbWRzZCgpIHsKICAgIGxvY2FsIC1uIHJvbGU9IiQxIgogICAgbG9nICJzdGFydGluZyIKCiAgICB2ZXJpZnlfcm9sZSByb2xlCgogICAgbG9jYWwga2V5dmF1bHRfc3VmZml4IHNlY3JldF9wcmVmaXgKICAgIGdldF9rZXl2YXVsdF9zdWZmaXggcm9sZSBrZXl2YXVsdF9zdWZmaXggc2VjcmV0X3ByZWZpeAoKICAgIGZvciB2YXIgaW4gIm1kc2QiICJtZG0iOyBkbwogICAgICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgICAgIGxvY2FsIGRvd25sb2FkX2NyZWRzX3NlcnZpY2VfZmlsZW5hbWU9Ii9ldGMvc3lzdGVtZC9zeXN0ZW0vZG93bmxvYWQtJHZhci1jcmVkZW50aWFscy5zZXJ2aWNlIgogICAgICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgICAgIGxvY2FsIGRvd25sb2FkX2NyZWRzX3NlcnZpY2VfZmlsZT0iW1VuaXRdCkRlc2NyaXB0aW9uPVBlcmlvZGljICR2YXIgY3JlZGVudGlhbHMgcmVmcmVzaAoKW1NlcnZpY2VdClR5cGU9b25lc2hvdApFeGVjU3RhcnQ9L3Vzci9sb2NhbC9iaW4vZG93bmxvYWQtY3JlZGVudGlhbHMuc2ggJHZhciIKCiAgICAgICAgd3JpdGVfZmlsZSBkb3dubG9hZF9jcmVkc19zZXJ2aWNlX2ZpbGVuYW1lIGRvd25sb2FkX2NyZWRzX3NlcnZpY2VfZmlsZSB0cnVlCgogICAgICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgICAgIGxvY2FsIGRvd25sb2FkX2NyZWRzX3RpbWVyX2ZpbGVuYW1lPSIvZXRjL3N5c3RlbWQvc3lzdGVtL2Rvd25sb2FkLSR2YXItY3JlZGVudGlhbHMudGltZXIiCiAgICAgICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICAgICAgbG9jYWwgZG93bmxvYWRfY3JlZHNfdGltZXJfZmlsZT0iW1VuaXRdCkRlc2NyaXB0aW9uPVBlcmlvZGljICR2YXIgY3JlZGVudGlhbHMgcmVmcmVzaApBZnRlcj1uZXR3b3JrLW9ubGluZS50YXJnZXQKV2FudHM9bmV0d29yay1vbmxpbmUudGFyZ2V0CgpbVGltZXJdCk9uQm9vdFNlYz0wbWluCk9uQ2FsZW5kYXI9MC8xMjowMDowMApBY2N1cmFjeVNlYz01cwoKW0luc3RhbGxdCldhbnRlZEJ5PXRpbWVycy50YXJnZXQiCgogICAgICAgIHdyaXRlX2ZpbGUgZG93bmxvYWRfY3JlZHNfdGltZXJfZmlsZW5hbWUgZG93bmxvYWRfY3JlZHNfdGltZXJfZmlsZSB0cnVlCiAgICBkb25lCgogICAgbG9jYWwgLXIgZG93bmxvYWRfY3JlZHNfc2NyaXB0X2ZpbGVuYW1lPSIvdXNyL2xvY2FsL2Jpbi9kb3dubG9hZC1jcmVkZW50aWFscy5zaCIKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgZG93bmxvYWRfY3JlZHNfc2NyaXB0X2ZpbGU9IiMhL2Jpbi9iYXNoCnNldCAtZXUKCkNPTVBPTkVOVD1cJDEKZWNobyBcIkRvd25sb2FkIFwkQ09NUE9ORU5UIGNyZWRlbnRpYWxzXCIKClRFTVBfRElSPVwiXCQobWt0ZW1wIC1kKVwiCmV4cG9ydCBBWlVSRV9DT05GSUdfRElSPVwiXCQobWt0ZW1wIC1kKVwiCgplY2hvIFwiTG9nZ2luZyBpbnRvIEF6dXJlLi4uXCIKUkVUUklFUz0zCndoaWxlIFtbIFwkUkVUUklFUyAtZ3QgMCBdXTsgZG8KICAgIGlmIGF6IGxvZ2luIC1pIC0tYWxsb3ctbm8tc3Vic2NyaXB0aW9ucwogICAgdGhlbgogICAgICAgIGVjaG8gXCJheiBsb2dpbiBzdWNjZXNzZnVsXCIKICAgICAgICBicmVhawogICAgZWxzZQogICAgICAgIGVjaG8gXCJheiBsb2dpbiBmYWlsZWQuIFJldHJ5aW5nLi4uXCIKICAgICAgICBsZXQgUkVUUklFUy09MQogICAgICAgIHNsZWVwIDUKICAgIGZpCmRvbmUKCnRyYXAgXCJjbGVhbnVwXCIgRVhJVAoKY2xlYW51cCgpIHsKICBheiBsb2dvdXQKICBbWyBcJFRFTVBfRElSID1+IC90bXAvLisgXV0gJiYgcm0gLXJmIFwkVEVNUF9ESVIKICBbWyBcJEFaVVJFX0NPTkZJR19ESVIgPX4gL3RtcC8uKyBdXSAmJiBybSAtcmYgXCRBWlVSRV9DT05GSUdfRElSCn0KCmlmIFtbIFwkQ09NUE9ORU5UID0gXCJtZG1cIiBdXTsgdGhlbgogIENVUlJFTlRfQ0VSVF9GSUxFPVwiL2V0Yy9tZG0ucGVtXCIKZWxpZiBbWyBcJENPTVBPTkVOVCA9IFwibWRzZFwiIF1dOyB0aGVuCiAgQ1VSUkVOVF9DRVJUX0ZJTEU9XCIvdmFyL2xpYi93YWFnZW50L01pY3Jvc29mdC5BenVyZS5LZXlWYXVsdC5TdG9yZS9tZHNkLnBlbVwiCmVsc2UKICBlY2hvIEludmFsaWQgdXNhZ2UgJiYgZXhpdCAxCmZpCgpTRUNSRVRfTkFNRT1cIiRzZWNyZXRfcHJlZml4LVwke0NPTVBPTkVOVH1cIgpORVdfQ0VSVF9GSUxFPVwiXCRURU1QX0RJUi9cJENPTVBPTkVOVC5wZW1cIgpmb3IgYXR0ZW1wdCBpbiB7MS4uNX07IGRvCiAgYXoga2V5dmF1bHQgXAogICAgc2VjcmV0IFwKICAgIGRvd25sb2FkIFwKICAgIC0tZmlsZSBcIlwkTkVXX0NFUlRfRklMRVwiIFwKICAgIC0taWQgXCJodHRwczovLyRLRVlWQVVMVFBSRUZJWC0ka2V5dmF1bHRfc3VmZml4LiRLRVlWQVVMVEROU1NVRkZJWC9zZWNyZXRzL1wkU0VDUkVUX05BTUVcIiBcCiAgICAmJiBicmVhawogIGlmIFtbIFwkYXR0ZW1wdCAtbHQgNSBdXTsgdGhlbiBzbGVlcCAxMDsgZWxzZSBleGl0IDE7IGZpCmRvbmUKCmlmIFsgLWYgXCRORVdfQ0VSVF9GSUxFIF07IHRoZW4KICBpZiBbWyBcJENPTVBPTkVOVCA9IFwibWRzZFwiIF1dOyB0aGVuCiAgICBjaG93biBzeXNsb2c6c3lzbG9nIFwkTkVXX0NFUlRfRklMRQogIGVsc2UKICAgIHNlZCAtaSAtbmUgJzEsL0VORCBDRVJUSUZJQ0FURS8gcCcgXCRORVdfQ0VSVF9GSUxFCiAgZmkKCiAgbmV3X2NlcnRfc249XCJcJChvcGVuc3NsIHg1MDkgLWluIFwiXCRORVdfQ0VSVF9GSUxFXCIgLW5vb3V0IC1zZXJpYWwgfCBhd2sgLUY9ICd7cHJpbnQgXCQyfScpXCIKICBjdXJyZW50X2NlcnRfc249XCJcJChvcGVuc3NsIHg1MDkgLWluIFwiXCRDVVJSRU5UX0NFUlRfRklMRVwiIC1ub291dCAtc2VyaWFsIHwgYXdrIC1GPSAne3ByaW50IFwkMn0nKVwiCiAgaWYgW1sgISAteiBcJG5ld19jZXJ0X3NuIF1dICYmIFtbIFwkbmV3X2NlcnRfc24gIT0gXCJcJGN1cnJlbnRfY2VydF9zblwiIF1dOyB0aGVuCiAgICBlY2hvIHVwZGF0aW5nIGNlcnRpZmljYXRlIGZvciBcJENPTVBPTkVOVAogICAgY2htb2QgMDYwMCBcJE5FV19DRVJUX0ZJTEUKICAgIG12IFwkTkVXX0NFUlRfRklMRSBcJENVUlJFTlRfQ0VSVF9GSUxFCiAgZmkKZWxzZQogIGVjaG8gRmFpbGVkIHRvIHJlZnJlc2ggY2VydGlmaWNhdGUgZm9yIFwkQ09NUE9ORU5UICYmIGV4aXQgMQpmaSIKCiAgICB3cml0ZV9maWxlIGRvd25sb2FkX2NyZWRzX3NjcmlwdF9maWxlbmFtZSBkb3dubG9hZF9jcmVkc19zY3JpcHRfZmlsZSB0cnVlCgogICAgY2htb2QgdSt4IC91c3IvbG9jYWwvYmluL2Rvd25sb2FkLWNyZWRlbnRpYWxzLnNoCgogICAgJGRvd25sb2FkX2NyZWRzX3NjcmlwdF9maWxlbmFtZSBtZHNkICYKICAgIHdhaXQgIiQhIgoKCiAgICAkZG93bmxvYWRfY3JlZHNfc2NyaXB0X2ZpbGVuYW1lIG1kbSAmCiAgICB3YWl0ICIkISIKCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIHdhdGNoX21kbV9jcmVkc19zZXJ2aWNlX2ZpbGVuYW1lPSIvZXRjL3N5c3RlbWQvc3lzdGVtL3dhdGNoLW1kbS1jcmVkZW50aWFscy5zZXJ2aWNlIgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciB3YXRjaF9tZG1fY3JlZHNfc2VydmljZV9maWxlPSJbVW5pdF0KRGVzY3JpcHRpb249V2F0Y2ggZm9yIGNoYW5nZXMgaW4gbWRtLnBlbSBhbmQgcmVzdGFydHMgdGhlIG1kbSBzZXJ2aWNlCgpbU2VydmljZV0KVHlwZT1vbmVzaG90CkV4ZWNTdGFydD0vdXNyL2Jpbi9zeXN0ZW1jdGwgcmVzdGFydCBtZG0uc2VydmljZQoKW0luc3RhbGxdCldhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0IgoKICAgIHdyaXRlX2ZpbGUgd2F0Y2hfbWRtX2NyZWRzX3NlcnZpY2VfZmlsZW5hbWUgd2F0Y2hfbWRtX2NyZWRzX3NlcnZpY2VfZmlsZSB0cnVlCgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciB3YXRjaF9tZG1fY3JlZHNfcGF0aF9maWxlbmFtZT0nL3Vzci9saWIvc3lzdGVtZC9zeXN0ZW0vd2F0Y2gtbWRtLWNyZWRlbnRpYWxzLnBhdGgnCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIHdhdGNoX21kbV9jcmVkc19wYXRoX2ZpbGU9J1tQYXRoXQpQYXRoTW9kaWZpZWQ9L2V0Yy9tZG0ucGVtCgpbSW5zdGFsbF0KV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQnCgogICAgd3JpdGVfZmlsZSB3YXRjaF9tZG1fY3JlZHNfcGF0aF9maWxlbmFtZSB3YXRjaF9tZG1fY3JlZHNfcGF0aF9maWxlIHRydWUKCiAgICBsb2NhbCAtciB3YXRjaF9tZG1fY3JlZHM9J3dhdGNoLW1kbS1jcmVkZW50aWFscy5wYXRoJwogICAgc3lzdGVtY3RsIGVuYWJsZSAtLW5vdyAiJHdhdGNoX21kbV9jcmVkcyIgfHwgYWJvcnQgImZhaWxlZCB0byBlbmFibGUgYW5kIHN0YXJ0ICR3YXRjaF9tZG1fY3JlZHMiCn0KCiMgY29uZmlndXJlX3NlcnZpY2VfbWRtCiMKIyBhcmdzOgojICAgMSkgcm9sZSAtIG5hbWVyZWYsIHN0cmluZwojICAgICAgICogY2FuIGJlICJnYXRld2F5IiBvciAicnAiCiMgICAyKSBpbWFnZSAtIG5hbWVyZWYsIHN0cmluZwojICAgICAgICogbWRtIGNvbnRhaW5lciBpbWFnZSB0byBydW4KIyAgIDMpIGlwYWRkcmVzcyAtIG5hbWVyZWYsIHN0cmluZwojICAgICAgICogc3RhdGljIGlwIG9mIHBvZG1hbiBuZXR3b3JrIHRvIGJlIGF0dGFjaGVkCmNvbmZpZ3VyZV9zZXJ2aWNlX21kbSgpIHsKICAgIGxvY2FsIC1uIHJvbGU9IiQxIgogICAgbG9jYWwgLW4gaW1hZ2U9IiQyIgogICAgbG9jYWwgLW4gaXBhZGRyZXNzPSIkMyIKICAgIGxvZyAic3RhcnRpbmciCiAgICBsb2cgIkNvbmZpZ3VyaW5nIG1kbSBzZXJ2aWNlIgoKICAgIHZlcmlmeV9yb2xlIHJvbGUKCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIHN5c2NvbmZpZ19tZG1fZmlsZW5hbWU9Ii9ldGMvc3lzY29uZmlnL21kbSIKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgc3lzY29uZmlnX21kbV9maWxlPSJNRE1GUk9OVEVORFVSTD0nJE1ETUZST05URU5EVVJMJwpNRE1JTUFHRT0nJGltYWdlJwpNRE1TT1VSQ0VFTlZJUk9OTUVOVD0nJExPQ0FUSU9OJwpNRE1TT1VSQ0VST0xFPSckcm9sZScKTURNU09VUkNFUk9MRUlOU1RBTkNFPVwiJChob3N0bmFtZSlcIgpNRE1fSU5QVVQ9c3RhdHNkX2xvY2FsLG90bHBfZ3JwYwpNRE1fTkFNRVNQQUNFPSdPVEVMJwpNRE1fQUNDT1VOVD0nQXp1cmVSZWRIYXRPcGVuU2hpZnRSUCcKUE9ETUFOX05FVFdPUks9J3BvZG1hbicKSVBBRERSRVNTPSckaXBhZGRyZXNzJyIKCiAgICB3cml0ZV9maWxlIHN5c2NvbmZpZ19tZG1fZmlsZW5hbWUgc3lzY29uZmlnX21kbV9maWxlIHRydWUKCiAgICBta2RpciAtcCAvdmFyL2V0dwogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciBtZG1fc2VydmljZV9maWxlbmFtZT0iL2V0Yy9zeXN0ZW1kL3N5c3RlbS9tZG0uc2VydmljZSIKCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAxNgogICAgIyBiZWxvdyB2YXJpYWJsZSBpcyBpbiBzaW5nbGUgcXVvdGVzCiAgICAjIGFzIGl0IGlzIHRvIGJlIGV4cGFuZGVkIGF0IHN5c3RlbWQgc3RhcnQgdGltZSAoYnkgc3lzdGVtZCwgbm90IHRoaXMgc2NyaXB0KQogICAgbG9jYWwgLXIgbWRtX3NlcnZpY2VfZmlsZT0nW1VuaXRdCkFmdGVyPW5ldHdvcmstb25saW5lLnRhcmdldApXYW50cz1uZXR3b3JrLW9ubGluZS50YXJnZXQKCltTZXJ2aWNlXQpFbnZpcm9ubWVudEZpbGU9L2V0Yy9zeXNjb25maWcvbWRtCkV4ZWNTdGFydFByZT0tL3Vzci9iaW4vcG9kbWFuIHJtIC1mICVOCkV4ZWNTdGFydD0vdXNyL2Jpbi9wb2RtYW4gcnVuIFwKICAtLWVudHJ5cG9pbnQgL3Vzci9zYmluL01ldHJpY3NFeHRlbnNpb24gXAogIC0taG9zdG5hbWUgJUggXAogIC0tbmFtZSAlTiBcCiAgLS1ybSBcCiAgLS1jYXAtZHJvcCBuZXRfcmF3IFwKICAtLW5ldHdvcms9JHtQT0RNQU5fTkVUV09SS30gXAogIC0taXAgJHtJUEFERFJFU1N9IFwKICAtbSAyZyBcCiAgLXYgL2V0Yy9tZG0ucGVtOi9ldGMvbWRtLnBlbSBcCiAgLXYgL3Zhci9ldHc6L3Zhci9ldHc6eiBcCiAgJHtNRE1JTUFHRX0gXAogIC1JbnB1dCAke01ETV9JTlBVVH0gXAogIC1NZXRyaWNOYW1lc3BhY2UgJHtNRE1fTkFNRVNQQUNFfSBcCiAgLU1vbml0b3JpbmdBY2NvdW50ICR7TURNX0FDQ09VTlR9IFwKICAtQ2VydEZpbGUgL2V0Yy9tZG0ucGVtIFwKICAtRnJvbnRFbmRVcmwgJHtNRE1GUk9OVEVORFVSTH0gXAogIC1Mb2dnZXIgQ29uc29sZSBcCiAgLUxvZ0xldmVsIFdhcm5pbmcgXAogIC1Qcml2YXRlS2V5RmlsZSAvZXRjL21kbS5wZW0gXAogIC1Tb3VyY2VFbnZpcm9ubWVudCAke01ETVNPVVJDRUVOVklST05NRU5UfSBcCiAgLVNvdXJjZVJvbGUgJHtNRE1TT1VSQ0VST0xFfSBcCiAgLVNvdXJjZVJvbGVJbnN0YW5jZSAke01ETVNPVVJDRVJPTEVJTlNUQU5DRX0KRXhlY1N0b3A9L3Vzci9iaW4vcG9kbWFuIHN0b3AgJU4KUmVzdGFydD1hbHdheXMKUmVzdGFydFNlYz0xClN0YXJ0TGltaXRJbnRlcnZhbD0wCgpbSW5zdGFsbF0KV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQnCgogICAgd3JpdGVfZmlsZSBtZG1fc2VydmljZV9maWxlbmFtZSBtZG1fc2VydmljZV9maWxlIHRydWUKfQoKIyBjb25maWd1cmVfdm1zc19hcm9fc2VydmljZQojCiMgYXJnczoKIyAgIDEpIHIgLSBuYW1lcmVmLCBzdHJpbmcKIyAgICAgICAqIHJvbGUgb2YgVk1TUwojICAgMikgaW1hZ2VzIC0gbmFtZXJlZiwgYXNzb2NpYXRpdmUgYXJyYXkKIyAgICAgICAqIEFSTyBjb250YWluZXIgaW1hZ2VzCiMgICAzKSBjb25maWdzIC0gbmFtZXJlZiwgYXNzb2NpYXRpdmUgYXJyYXkKIyAgICAgICAqIGNvbmZpZ3VyYXRpb24gZmlsZXMgYW5kIHZlcnNpb25zLgojICAgICAgICogVGhlIHZhbHVlcyBzaG91bGQgYmUgYSByZWZlcmVuY2UgdG8gdmFyaWFibGVzLCBub3QgZGVyZWZlcmVuY2VkLgojICAgICAgICogVGhpcyBpcyBiZWNhdXNlIHRoZSB2YWx1ZSBpcyB1c2VkIHdoZW4gY3JlYXRpbmcgbmFtZXJlZiB2YXJpYWJsZXMgYnkgaGVscGVyIGZ1bmN0aW9ucy4KY29uZmlndXJlX3Ztc3NfYXJvX3NlcnZpY2VzKCkgewogICAgbG9jYWwgLW4gcj0iJDEiCiAgICBsb2NhbCAtbiBpbWFnZXM9IiQyIgogICAgbG9jYWwgLW4gY29uZmlncz0iJDMiCiAgICBsb2cgInN0YXJ0aW5nIgogICAgdmVyaWZ5X3JvbGUgIiQxIgoKICAgIGlmIFsgIiRyIiA9PSAiJHJvbGVfZ2F0ZXdheSIgXTsgdGhlbgogICAgICAgIGNvbmZpZ3VyZV9zZXJ2aWNlX2Fyb19nYXRld2F5ICIke2ltYWdlc1sicnAiXX0iICIkMSIgIiR7Y29uZmlnc1siZ2F0ZXdheV9jb25maWciXX0iICIke2NvbmZpZ3NbInN0YXRpY19pcF9hZGRyZXNzIl19W2dhdGV3YXldIgogICAgICAgIGNvbmZpZ3VyZV9jZXJ0c19nYXRld2F5CiAgICBlbGlmIFsgIiRyIiA9PSAiJHJvbGVfcnAiIF07IHRoZW4KICAgICAgICBjb25maWd1cmVfc2VydmljZV9hcm9fcnAgIiR7aW1hZ2VzWyJycCJdfSIgXAogICAgICAgICAgICAiJDEiIFwKICAgICAgICAgICAgIiR7Y29uZmlnc1tycF9jb25maWddfSIgXAogICAgICAgICAgICAiJHtjb25maWdzW3N0YXRpY19pcF9hZGRyZXNzXX1bcnBdIgoKICAgICAgICBjb25maWd1cmVfc2VydmljZV9hcm9fbWltb19hY3R1YXRvciAiJHtpbWFnZXNbcnBdfSIgXAogICAgICAgICAgICAiJHtjb25maWdzW3JwX2NvbmZpZ119IiBcCiAgICAgICAgICAgICIke2NvbmZpZ3Nbc3RhdGljX2lwX2FkZHJlc3NdfVttaW1vX2FjdHVhdG9yXSIKCiAgICAgICAgY29uZmlndXJlX3NlcnZpY2VfYXJvX21pbW9fc2NoZWR1bGVyICIke2ltYWdlc1tycF19IiBcCiAgICAgICAgICAgICIke2NvbmZpZ3NbcnBfY29uZmlnXX0iIFwKICAgICAgICAgICAgIiR7Y29uZmlnc1tzdGF0aWNfaXBfYWRkcmVzc119W21pbW9fc2NoZWR1bGVyXSIKCiAgICAgICAgY29uZmlndXJlX3NlcnZpY2VfYXJvX21vbml0b3IgIiR7aW1hZ2VzW3JwXX0iICIke2NvbmZpZ3Nbc3RhdGljX2lwX2FkZHJlc3NdfVttb25pdG9yXSIKCiAgICAgICAgY29uZmlndXJlX3NlcnZpY2VfYXJvX3BvcnRhbCAiJHtpbWFnZXNbcnBdfSIgIiR7Y29uZmlnc1tzdGF0aWNfaXBfYWRkcmVzc119W3BvcnRhbF0iCgogICAgICAgIGNvbmZpZ3VyZV9zZXJ2aWNlX2Fyb19taXNlICIke2ltYWdlc1ttaXNlXX0iICIke2NvbmZpZ3Nbc3RhdGljX2lwX2FkZHJlc3NdfVttaXNlXSIKCiAgICAgICAgY29uZmlndXJlX3NlcnZpY2VfYXJvX290ZWxfY29sbGVjdG9yICIke2ltYWdlc1tvdGVsXX0iIFwKICAgICAgICAgICAgIiR7Y29uZmlnc1tzdGF0aWNfaXBfYWRkcmVzc119IiBcCiAgICAgICAgICAgICIke2NvbmZpZ3NbInN0YXRpY19pcF9hZGRyZXNzIl19W290ZWxfY29sbGVjdG9yXSIKCiAgICAgICAgY29uZmlndXJlX2NlcnRzX3JwCiAgICBmaQoKICAgIGNvbmZpZ3VyZV9zZXJ2aWNlX2ZsdWVudGJpdCAiJHtjb25maWdzW2ZsdWVudGJpdF19IiAiJHtpbWFnZXNbZmx1ZW50Yml0XX0iCgogICAgY29uZmlndXJlX3RpbWVyc19tZG1fbWRzZCAiJDEiCgogICAgY29uZmlndXJlX3NlcnZpY2VfbWRtICIkMSIgXAogICAgICAgICIke2ltYWdlc1ttZG1dfSIgXAogICAgICAgICIke2NvbmZpZ3NbInN0YXRpY19pcF9hZGRyZXNzIl19W21kbV0iCgogICAgY29uZmlndXJlX3NlcnZpY2VfbWRzZCAiJDEiICIke2NvbmZpZ3NbbWRzZF19IgoKICAgIHJ1bl9henNlY2RfY29uZmlnX3NjYW4KfQoKIyB1dGlsX2NvbW1vbj0idXRpbC1jb21tb24uc2giCiMKIyB1dGlsLWNvbW1vbi5zaCBkb2VzIG5vdCBleGlzdCB3aGVuIGRlcGxveWVkIHRvIFZNU1MgdmlhIFZNU1MgZXh0ZW5zaW9ucwojIFByb3ZpZGVzIHNoZWxsY2hlY2sgZGVmaW5pdGlvbnMKdXRpbF9jb21tb249InV0aWwtY29tbW9uLnNoIgppZiBbIC1mICIkdXRpbF9jb21tb24iIF07IHRoZW4KICAgICMgc2hlbGxjaGVjayBzb3VyY2U9dXRpbC1jb21tb24uc2gKICAgIHNvdXJjZSAiJHV0aWxfY29tbW9uIgpmaQoKIyB1dGlsX3N5c3RlbT0idXRpbC1zeXN0ZW0uc2giCiMKIyB1dGlsLXN5c3RlbS5zaCBkb2VzIG5vdCBleGlzdCB3aGVuIGRlcGxveWVkIHRvIFZNU1MgdmlhIFZNU1MgZXh0ZW5zaW9ucwojIFByb3ZpZGVzIHNoZWxsY2hlY2sgZGVmaW5pdGlvbnMKdXRpbF9zeXN0ZW09InV0aWwtc3lzdGVtLnNoIgppZiBbIC1mICIkdXRpbF9zeXN0ZW0iIF07IHRoZW4KICAgICMgc2hlbGxjaGVjayBzb3VyY2U9dXRpbC1zeXN0ZW0uc2gKICAgIHNvdXJjZSAiJHV0aWxfc3lzdGVtIgpmaQojIS9iaW4vYmFzaAojIFRoaXMgZmlsZSBpcyBpbnRlbmRlZCB0byBiZSBzb3VyY2VkIGJ5IGJvb3RzdHJhcHBpbmcgc2NyaXB0cyBmb3IgY29tbW9ubHkgdXNlZCBmdW5jdGlvbnMKCiMgZ2V0X2Jvb3RfZGV2X3V1aWQKIwojIEdldCB0aGUgYm9vdCBkZXZpY2VzIHV1aWQKIyBhcmdzOgojCiMgICAqIDEpIGJvb3RfZGV2X3V1aWQgLSBuYW1lcmVmLCBzdHJpbmc7IEVtcHR5IHZhcmlhYmxlIGZvciBib290IGRldmljZSB1dWlkIGFzc2lnbm1lbnQKIwojIFRha2VuIGFuZCByZWZhY3RvcmVkIGZyb20gaHR0cHM6Ly9lbmcubXMvZG9jcy9wcm9kdWN0cy9henVyZS1saW51eC9mZWF0dXJlcy9zZWN1cml0eS9maXBzCiMgVE9ETyByZW1vdmUgdGhpcyBvbmNlIHNrdSBjYmwtbWFyaW5lci0yLWdlbjItZmlwcyBpcyBzdXBwb3J0ZWQgYnkgYXV0b21hdGljIE9TIHVwZGF0ZXMKIyAgICogUmVmZXJlbmNlOiBodHRwczovL2xlYXJuLm1pY3Jvc29mdC5jb20vZW4tdXMvYXp1cmUvdmlydHVhbC1tYWNoaW5lLXNjYWxlLXNldHMvdmlydHVhbC1tYWNoaW5lLXNjYWxlLXNldHMtYXV0b21hdGljLXVwZ3JhZGUjc3VwcG9ydGVkLW9zLWltYWdlcwpnZXRfYm9vdF9kZXZfdXVpZCgpIHsKICAgIGxvY2FsIC1uIGJvb3RfZGV2X3V1aWQ9IiQxIgogICAgIyBTZXQgYm9vdF91dWlkIHZhcmlhYmxlIGZvciB0aGUgYm9vdCBwYXJ0aXRpb24gaWYgZGlmZmVyZW50IGZyb20gdGhlIHJvb3QKICAgIGJvb3RfZGV2PSIkKGRmIC9ib290LyB8IHRhaWwgLTEgfCBjdXQgLWQnICcgLWYxKSIKICAgIHJvb3RfZGV2PSIkKGRmIC8gfCB0YWlsIC0xIHwgY3V0IC1kJyAnIC1mMSkiCgogICAgYm9vdF9kZXZfdXVpZD0iJHJvb3RfZGV2IgogICAgaWYgWyAiJGJvb3RfZGV2IiAhPSAiJHJvb3RfZGV2IiBdOyB0aGVuCiAgICAgICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICAgICAgYm9vdF9kZXZfdXVpZD0iYm9vdD1VVUlEPSQoYmxraWQgIiRib290X2RldiIgLXMgVVVJRCAtbyB2YWx1ZSkiCiAgICBmaQp9CgojIGZpcHNfdmVyaWZ5CiMKIyBWZXJpZnkgdGhhdCBmaXBzIG1vZGUgaXMgZW5hYmxlZAojCiMgVGFrZW4gYW5kIHJlZmFjdG9yZWQgZnJvbSBodHRwczovL2VuZy5tcy9kb2NzL3Byb2R1Y3RzL2F6dXJlLWxpbnV4L2ZlYXR1cmVzL3NlY3VyaXR5L2ZpcHMKIyBUT0RPIHJlbW92ZSB0aGlzIG9uY2Ugc2t1IGNibC1tYXJpbmVyLTItZ2VuMi1maXBzIGlzIHN1cHBvcnRlZCBieSBhdXRvbWF0aWMgT1MgdXBkYXRlcwojICAgKiBSZWZlcmVuY2U6IGh0dHBzOi8vbGVhcm4ubWljcm9zb2Z0LmNvbS9lbi11cy9henVyZS92aXJ0dWFsLW1hY2hpbmUtc2NhbGUtc2V0cy92aXJ0dWFsLW1hY2hpbmUtc2NhbGUtc2V0cy1hdXRvbWF0aWMtdXBncmFkZSNzdXBwb3J0ZWQtb3MtaW1hZ2VzCmZpcHNfdmVyaWZ5KCkgewogICAgZmlwc19lbmFibGVkX3Byb2M9IiQoY2F0IC9wcm9jL3N5cy9jcnlwdG8vZmlwc19lbmFibGVkKSIKICAgIGZpcHNfZW5hYmxlZF9zeXNjdGw9IiQoc3lzY3RsIC1uIGNyeXB0by5maXBzX2VuYWJsZWQpIgogICAgaWYgWyAiJGZpcHNfZW5hYmxlZF9wcm9jIiAtbmUgMSBdIHx8IFsgIiRmaXBzX2VuYWJsZWRfc3lzY3RsIiAtbmUgMSBdOyB0aGVuCiAgICAgICAgYWJvcnQgIkZJUFMgbW9kZSBpcyBkaXNhYmxlZCIKICAgIGZpCgogICAgbG9nICJGSVBTIG1vZGUgaXMgZW5hYmxlZCIKfQoKIyBmaXBzX2NvbmZpZ3VyZQojCiMgQ29uZmlndXJlcyBWTSB0byBydW4gd2l0aCBmaXBzIG1vZGUgZW5hYmxlZAojCiMgVGFrZW4gYW5kIHJlZmFjdG9yZWQgZnJvbSBodHRwczovL2VuZy5tcy9kb2NzL3Byb2R1Y3RzL2F6dXJlLWxpbnV4L2ZlYXR1cmVzL3NlY3VyaXR5L2ZpcHMKIyBUT0RPIHJlbW92ZSB0aGlzIG9uY2Ugc2t1IGNibC1tYXJpbmVyLTItZ2VuMi1maXBzIGlzIHN1cHBvcnRlZCBieSBhdXRvbWF0aWMgT1MgdXBkYXRlcwojICAgKiBSZWZlcmVuY2U6IGh0dHBzOi8vbGVhcm4ubWljcm9zb2Z0LmNvbS9lbi11cy9henVyZS92aXJ0dWFsLW1hY2hpbmUtc2NhbGUtc2V0cy92aXJ0dWFsLW1hY2hpbmUtc2NhbGUtc2V0cy1hdXRvbWF0aWMtdXBncmFkZSNzdXBwb3J0ZWQtb3MtaW1hZ2VzCmZpcHNfY29uZmlndXJlKCkgewogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCBib290X3V1aWQKICAgIGdldF9ib290X2Rldl91dWlkIGJvb3RfdXVpZAoKICAgIGxvY2FsIGdydWIyX2VudgogICAgaWYgZ3J1YjJfZW52PSIkKGdydWIyLWVkaXRlbnYgLSBsaXN0IHwgZ3JlcCBrZXJuZWxvcHRzKSI7IHRoZW4KICAgICAgICBncnViMi1lZGl0ZW52IC0gc2V0ICIkZ3J1YjJfZW52IGZpcHM9MSAkYm9vdF91dWlkIgogICAgZWxzZQogICAgICAgIGdydWJieSAtLXVwZGF0ZS1rZXJuZWw9QUxMIC0tYXJncz0iZmlwcz0xICRib290X3V1aWQiCiAgICBmaQoKICAgICMgZmlwcyBtb2RlIHZlcmlmaWNhdGlvbiB3aWxsIGZhaWwgdW50aWwgYWZ0ZXIgdGhlIHZtIGhhcyBiZWVuIHJlYm9vdGVkCiAgICAjIGZpcHNfdmVyaWZ5Cn0KCiMgY29uZmlndXJlX3NzaGQKIwojIFdlIG5lZWQgdG8gY29uZmlndXJlIFBhc3N3b3JkQXV0aGVudGljYXRpb24gdG8geWVzIGluIG9yZGVyIGZvciB0aGUgVk1TUyBBY2Nlc3MgSklUIHRvIHdvcmsKY29uZmlndXJlX3NzaGQoKSB7CiAgICBsb2cgInN0YXJ0aW5nIgogICAgbG9jYWwgLXIgc3NoZF9jb25maWc9Ii9ldGMvc3NoL3NzaGRfY29uZmlnIgoKICAgIGxvZyAiRWRpdGluZyAkc3NoZF9jb25maWcgdG8gYWxsb3cgcGFzc3dvcmQgYXV0aGVudGljYXRpb24iCiAgICBzZWQgLWkgJ3MvUGFzc3dvcmRBdXRoZW50aWNhdGlvbiBuby9QYXNzd29yZEF1dGhlbnRpY2F0aW9uIHllcy9nJyAiJHNzaGRfY29uZmlnIgoKICAgIHN5c3RlbWN0bCByZWxvYWQgc3NoZC5zZXJ2aWNlIHx8IGFib3J0ICJzc2hkIGZhaWxlZCB0byByZWxvYWQiCn0KCiMgY29uZmlndXJlX2xvZ3JvdGF0ZSBjbG9iYmVycyAvZXRjL2xvZ3JvdGF0ZS5jb25mCiMKIyBhcmdzOgojICAgMSkgZHJvcGluX2ZpbGVzIC0gbmFtZXJlZiwgYXNzb2NpYXRpdmUgYXJyYXk7IG9wdGlvbmFsCiMgICAgICAgKiBsb2dyb3RhdGUgZmlsZXMgdG8gd3JpdGUgdG8gL2V0Yy9sb2dyb3RhdGUuZAojICAgICAgICogS2V5IG5hbWUgZGljdGF0ZXMgZmlsZW5hbWVzIHdyaXR0ZW4gdG8gL2V0Yy9sb2dyb3RhdGUuZC4KIwojIEV4YW1wbGU6CiMgICBLZXkgZGljdGF0ZXMgdGhlIGZpbGVuYW1lIHdyaXR0ZW4gaW4gL2V0Yy9sb2dyb3RhdGUuZAojICAgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAojICAgbG9jYWwgLXJBIGxvZ3JvdGF0ZV9kcm9waW5zPSgKIyAgICAgIFsiZ2F0ZXdheSJdPSIkZ2F0ZXdheV9sb2dfZmlsZSIKIyAgICkKY29uZmlndXJlX2xvZ3JvdGF0ZSgpIHsKICAgIGxvY2FsIC1uIGRyb3Bpbl9maWxlcz0iJHsxOi1lbXB0eV9zdHJ9IgogICAgbG9nICJzdGFydGluZyIKCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIGxvZ3JvdGF0ZV9jb25mX2ZpbGVuYW1lPScvZXRjL2xvZ3JvdGF0ZS5jb25mJwogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciBsb2dyb3RhdGVfY29uZl9maWxlPScjIHNlZSAibWFuIGxvZ3JvdGF0ZSIgZm9yIGRldGFpbHMKIyByb3RhdGUgbG9nIGZpbGVzIHdlZWtseQp3ZWVrbHkKCiMga2VlcCAyIHdlZWtzIHdvcnRoIG9mIGJhY2tsb2dzCnJvdGF0ZSAyCgojIGNyZWF0ZSBuZXcgKGVtcHR5KSBsb2cgZmlsZXMgYWZ0ZXIgcm90YXRpbmcgb2xkIG9uZXMKY3JlYXRlCgojIHVzZSBkYXRlIGFzIGEgc3VmZml4IG9mIHRoZSByb3RhdGVkIGZpbGUKZGF0ZWV4dAoKIyB1bmNvbW1lbnQgdGhpcyBpZiB5b3Ugd2FudCB5b3VyIGxvZyBmaWxlcyBjb21wcmVzc2VkCmNvbXByZXNzCgojIFJQTSBwYWNrYWdlcyBkcm9wIGxvZyByb3RhdGlvbiBpbmZvcm1hdGlvbiBpbnRvIHRoaXMgZGlyZWN0b3J5CmluY2x1ZGUgL2V0Yy9sb2dyb3RhdGUuZAoKIyBubyBwYWNrYWdlcyBvd24gd3RtcCBhbmQgYnRtcCAtLSB3ZSB3aWxsIHJvdGF0ZSB0aGVtIGhlcmUKL3Zhci9sb2cvd3RtcCB7CiAgICBtb250aGx5CiAgICBjcmVhdGUgMDY2NCByb290IHV0bXAKICAgICAgICBtaW5zaXplIDFNCiAgICByb3RhdGUgMQp9CgovdmFyL2xvZy9idG1wIHsKICAgIG1pc3NpbmdvawogICAgbW9udGhseQogICAgY3JlYXRlIDA2MDAgcm9vdCB1dG1wCiAgICByb3RhdGUgMQp9JwoKICAgIHdyaXRlX2ZpbGUgbG9ncm90YXRlX2NvbmZfZmlsZW5hbWUgbG9ncm90YXRlX2NvbmZfZmlsZSB0cnVlCgogICAgaWYgWyAtbiAiJHtkcm9waW5fZmlsZXNbKl19IiBdOyB0aGVuCiAgICAgICAgbG9jYWwgLXIgbG9ncm90YXRlX2Q9Ii9ldGMvbG9ncm90YXRlLmQiCiAgICAgICAgbG9nICJXcml0aW5nIGxvZ3JvdGF0ZSBmaWxlcyB0byAkbG9ncm90YXRlX2QiCiAgICAgICAgZm9yIGRyb3Bpbl9uYW1lIGluICIkeyFkcm9waW5fZmlsZXNbQF19IjsgZG8KICAgICAgICAgICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICAgICAgICAgIGxvY2FsIC1yIGRyb3Bpbl9maWxlbmFtZT0iJGxvZ3JvdGF0ZV9kLyRkcm9waW5fbmFtZSIKICAgICAgICAgICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICAgICAgICAgIGxvY2FsIC1yIGRyb3Bpbl9maWxlPSIke2Ryb3Bpbl9maWxlc1siJGRyb3Bpbl9uYW1lIl19IgogICAgICAgICAgICB3cml0ZV9maWxlIGRyb3Bpbl9maWxlbmFtZSBkcm9waW5fZmlsZSB0cnVlCiAgICAgICAgZG9uZQogICAgZmkKfQoKIyBwdWxsX2NvbnRhaW5lcl9pbWFnZXMKIwojIGFyZ3M6CiMgICAxKSBwdWxsX2ltYWdlcyAtIG5hbWVyZWYsIHN0cmluZyBhcnJheQojICAgICAgICogYXJyYXkgb2Ygc3RyaW5ncy4gRWFjaCBzdHJpbmcgaXMgYW4gaW1hZ2UgdG8gYmUgcHVsbGVkLgojICAgMikgcmVnaXN0cnlfY29uZiAtIG5hbWVyZWYsIHN0cmluZywgb3B0aW9uYWwKIyAgICAgICAqIHBhdGggdG8gZG9ja2VyL3BvZG1hbiBjb25maWd1cmF0aW9uIGZpbGUuCnB1bGxfY29udGFpbmVyX2ltYWdlcygpIHsKICAgIGxvY2FsIC1uIHB1bGxfaW1hZ2VzPSIkMSIKICAgIGxvY2FsIC1uIHJlZ2lzdHJ5X2NvbmY9IiR7MjotZW1wdHlfc3RyfSIKICAgIGxvZyAic3RhcnRpbmciCgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtaXIgcmV0cnlfdGltZT0zMAogICAgY21kPSgKICAgICAgICBhegogICAgICAgIGxvZ2luCiAgICAgICAgLWkKICAgICAgICAtLWFsbG93LW5vLXN1YnNjcmlwdGlvbnMKICAgICkKCiAgICBsb2cgIlJ1bm5pbmcgYXogbG9naW4gd2l0aCByZXRyaWVzIgogICAgcmV0cnkgY21kIHJldHJ5X3RpbWUKCiAgICAjIFN1cHByZXNzIGVtdWxhdGlvbiBvdXRwdXQgZm9yIHBvZG1hbiBpbnN0ZWFkIG9mIGRvY2tlciBmb3IgYXogYWNyIGNvbXBhdGliaWxpdHkKICAgIG1rZGlyIC1wIC9ldGMvY29udGFpbmVycy8KICAgIG1rZGlyIC1wIC9yb290Ly5kb2NrZXIKICAgIHRvdWNoIC9ldGMvY29udGFpbmVycy9ub2RvY2tlcgoKICAgIFsgLW4gIiR7cmVnaXN0cnlfY29uZn0iIF0gJiYgd3JpdGVfZmlsZSBSRUdJU1RSWV9BVVRIX0ZJTEUgcmVnaXN0cnlfY29uZiAidHJ1ZSIKCiAgICAjIFRoaXMgbmFtZSBpcyB1c2VkIGluIHRoZSBjYXNlIHRoYXQgYXogYWNyIGxvZ2luIHNlYXJjaGVzIGZvciB0aGlzIGluIGl0J3MgZW52aXJvbm1lbnQKICAgICMgZXhwb3J0ZWQgaGVyZSBhcyBpdCdzIHVzZWQgYnkgcG9kbWFuIGxvZ2luIGFuZCBzdWJzZXF1ZW50IHBvZG1hbiBwdWxsCiAgICBleHBvcnQgUkVHSVNUUllfQVVUSF9GSUxFPSIvcm9vdC8uZG9ja2VyL2NvbmZpZy5qc29uIgoKICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMzI5CiAgIF8oKSB7CiAgICAgICAgbG9jYWwgLXIgYWNyPSIkMSIKICAgICAgICBsb2NhbCAtciByZWdpc3RyeT0iJDIiCgogICAgICAgIGxvY2FsIC1yIHh0cmFjZV9pbml0aWFsX3NldD0iJCh4dHJhY2VfaXNfc2V0KSIKICAgICAgICB4dHJhY2VfdG9nZ2xlIFhUUkFDRV9VTlNFVAoKICAgICAgICBsb2cgImxvZ2dpbmcgaW50byBjb250YWluZXIgcmVnaXN0cnkgJDIiCiAgICAgICAgYXogYWNyIGxvZ2luIFwKICAgICAgICAgICAgLS1uYW1lICIkYWNyIiBcCiAgICAgICAgICAgIC0tZXhwb3NlLXRva2VuIFwKICAgICAgICAgICAgLS1vdXRwdXQgdHN2IFwKICAgICAgICAgICAgLS1xdWVyeSBhY2Nlc3NUb2tlbiBcCiAgICAgICAgICAgIHwgcG9kbWFuIGxvZ2luIFwKICAgICAgICAgICAgICAgIC0tdXNlcm5hbWUgIjAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMCIgXAogICAgICAgICAgICAgICAgLS1wYXNzd29yZC1zdGRpbiBcCiAgICAgICAgICAgICAgICAiJHJlZ2lzdHJ5IgogICAgICAgIGxvY2FsIC1pciBzdGF0dXM9JD8KCiAgICAgICAgeHRyYWNlX3RvZ2dsZSAiJHh0cmFjZV9pbml0aWFsX3NldCIKICAgICAgICByZXR1cm4gIiRzdGF0dXMiCiAgIH0KCiAgICBsb2NhbCAtciBhY3JfbmFtZT0iJHtBQ1JSRVNPVVJDRUlEIyMqL30iCiAgICBsb2NhbCAtciByZWdpc3RyeV9uYW1lPSIke2Fjcl9uYW1lfS5henVyZWNyLmlvIgogICAgY21kPShfICIkYWNyX25hbWUiICIkcmVnaXN0cnlfbmFtZSIpCiAgICByZXRyeSBjbWQgcmV0cnlfdGltZQoKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjA2OAogICAgZm9yIGkgaW4gJHtwdWxsX2ltYWdlc1tAXX07IGRvCiAgICAgICAgbG9jYWwgLW4gaW1hZ2U9IiRpIgogICAgICAgIGNtZD0oCiAgICAgICAgICAgIHBvZG1hbgogICAgICAgICAgICBwdWxsCiAgICAgICAgICAgICIkaW1hZ2UiCiAgICAgICAgKQoKICAgICAgICBsb2cgIlB1bGxpbmcgaW1hZ2UgJGltYWdlIHdpdGggcmV0cmllcyBub3ciCiAgICAgICAgcmV0cnkgY21kIHJldHJ5X3RpbWUKICAgIGRvbmUKCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGNtZD0oCiAgICAgICAgYXoKICAgICAgICBsb2dvdXQKICAgICkKCiAgICBsb2cgIlJ1bm5pbmcgYXogbG9nb3V0IHdpdGggcmV0cmllcyIKICAgIHJldHJ5IGNtZCByZXRyeV90aW1lCn0KCiMgY29uZmlndXJlX2NhX2J1bmRsZSgpCiMKIyBDb25maWd1cmVzIHN5c3RlbSBjYS1idW5kbGUgY2VydGlmaWNhdGVzIGNvbW1vbiB0byBhbGwgVk1TUyBpbnN0YW5jZXMuCmNvbmZpZ3VyZV9jYV9idW5kbGUoKSB7CiAgICBsb2cgInN0YXJ0aW5nIgoKICAgIGxvY2FsIC1yIHh0cmFjZV9pbml0aWFsX3ZhbHVlPSIkKHh0cmFjZV9pc19zZXQpIgogICAgeHRyYWNlX3RvZ2dsZSBYVFJBQ0VfVU5TRVQKCiAgICAjIHNldHRpbmcgTU9OSVRPUklOR19HQ1NfQVVUSF9JRF9UWVBFPUF1dGhLZXlWYXVsdCBzZWVtcyB0byBoYXZlIGNhdXNlZCBtZHNkIG5vdAogICAgIyB0byBob25vdXIgU1NMX0NFUlRfRklMRSBhbnkgbW9yZSwgaGVhdmVuIG9ubHkga25vd3Mgd2h5LgogICAgbG9jYWwgLXIgc3NsX2NlcnRzX2Jhc2VkaXI9Ii91c3IvbGliL3NzbC9jZXJ0cyIKICAgIG1rZGlyIC1wICIkc3NsX2NlcnRzX2Jhc2VkaXIiCgogICAgY2FfYnVuZGxlPSIvZXRjL3BraS90bHMvY2VydHMvY2EtYnVuZGxlLmNydCIKICAgIGxvZyAiQ29uZmlndXJpbmcgJGNhX2J1bmRsZSIKICAgIGNzcGxpdCAtZiAiJHNzbF9jZXJ0c19iYXNlZGlyL2NlcnQtIiAtYiAlMDNkLnBlbSAiJGNhX2J1bmRsZSIgL14kLzEgInsqfSIgMT4vZGV2L251bGwKICAgIGNfcmVoYXNoICIkc3NsX2NlcnRzX2Jhc2VkaXIiCgogICAgeHRyYWNlX3RvZ2dsZSAiJHh0cmFjZV9pbml0aWFsX3ZhbHVlIgp9CgojIGNvbmZpZ3VyZV9jZXJ0c19ycCgpCiMKIyBDb25maWd1cmVzIFJQIHN5c3RlbSBjZXJ0aWZpY2F0ZXMKY29uZmlndXJlX2NlcnRzX3JwKCkgewogICAgbG9nICJzdGFydGluZyIKCiAgICB2ZXJpZnlfcm9sZSByb2xlX3JwCgogICAgbG9jYWwgLXIgeHRyYWNlX2luaXRpYWxfdmFsdWU9IiQoeHRyYWNlX2lzX3NldCkiCiAgICB4dHJhY2VfdG9nZ2xlIFhUUkFDRV9VTlNFVAoKICAgIGxvY2FsIC1yIHJwX2NlcnRzX2Jhc2VkaXI9Ii9ldGMvYXJvLXJwIgogICAgbWtkaXIgLXAgIiRycF9jZXJ0c19iYXNlZGlyIgogICAgYmFzZTY0IC1kIDw8PCIkQURNSU5BUElDQUJVTkRMRSIgPiAiJHJwX2NlcnRzX2Jhc2VkaXIvYWRtaW4tY2EtYnVuZGxlLnBlbSIKICAgIGlmIFtbIC1uICIkQVJNQVBJQ0FCVU5ETEUiIF1dOyB0aGVuCiAgICBiYXNlNjQgLWQgPDw8IiRBUk1BUElDQUJVTkRMRSIgPiAiJHJwX2NlcnRzX2Jhc2VkaXIvYXJtLWNhLWJ1bmRsZS5wZW0iCiAgICBmaQogICAgY2hvd24gLVIgMTAwMDoxMDAwICIkcnBfY2VydHNfYmFzZWRpciIKCgogICAgeHRyYWNlX3RvZ2dsZSAiJHh0cmFjZV9pbml0aWFsX3ZhbHVlIgogICAgY29uZmlndXJlX2NhX2J1bmRsZQp9CgojIGNvbmZpZ3VyZV9jZXJ0c19nYXRld2F5KCkKIwojIENvbmZpZ3VyZXMgc3lzdGVtIHRscyBjZXJ0aWZpY2F0ZXMgZm9yIEdhdGV3YXkgVk1TUyBpbnN0YW5jZXMKY29uZmlndXJlX2NlcnRzX2dhdGV3YXkoKSB7CiAgICBsb2cgInN0YXJ0aW5nIgoKICAgIHZlcmlmeV9yb2xlIHJvbGVfZ2F0ZXdheQogICAgY29uZmlndXJlX2NhX2J1bmRsZQp9CgojIGNvbmZpZ3VyZV9jZXJ0c19kZXZwcm94eSgpCiMKIyBDb25maWd1cmVzIHN5c3RlbSBjZXJ0aWZpY2F0ZXMgZm9yIGRldnByb3h5IFZNU1MgaW5zdGFuY2VzCmNvbmZpZ3VyZV9jZXJ0c19kZXZwcm94eSgpIHsKICAgIGxvZyAic3RhcnRpbmciCgogICAgdmVyaWZ5X3JvbGUgcm9sZV9kZXZwcm94eQogICAgeHRyYWNlX2luaXRpYWxfdmFsdWU9IiQoeHRyYWNlX2lzX3NldCkiCiAgICB4dHJhY2VfdG9nZ2xlIFhUUkFDRV9VTlNFVAoKICAgIGxvY2FsIC1yIHByb3h5X2NlcnRzX2Jhc2VkaXI9Ii9ldGMvcHJveHkiCiAgICBta2RpciAtcCAiJHByb3h5X2NlcnRzX2Jhc2VkaXIiCiAgICBiYXNlNjQgLWQgPDw8IiRQUk9YWUNFUlQiID4gIiRwcm94eV9jZXJ0c19iYXNlZGlyL3Byb3h5LmNydCIKICAgIGJhc2U2NCAtZCA8PDwiJFBST1hZS0VZIiA+ICIkcHJveHlfY2VydHNfYmFzZWRpci9wcm94eS5rZXkiCiAgICBiYXNlNjQgLWQgPDw8IiRQUk9YWUNMSUVOVENFUlQiID4gIiRwcm94eV9jZXJ0c19iYXNlZGlyL3Byb3h5LWNsaWVudC5jcnQiCiAgICBjaG93biAtUiAxMDAwOjEwMDAgL2V0Yy9wcm94eQogICAgY2htb2QgMDYwMCAiJHByb3h5X2NlcnRzX2Jhc2VkaXIvcHJveHkua2V5IgoKICAgIHh0cmFjZV90b2dnbGUgIiR4dHJhY2VfaW5pdGlhbF92YWx1ZSIKfQoKIyBjb25maWd1cmVfYXpzZWNkX3NjYW4oKQpjb25maWd1cmVfYXpzZWNkX3NjYW4oKSB7CiAgICBsb2cgInN0YXJ0aW5nIgoKICAgICMgd2UgbGVhdmUgY2xpZW50SWQgYmxhbmsgYXMgbG9uZyBhcyBvbmx5IDEgbWFuYWdlZCBpZGVudGl0eSBhc3NpZ25lZCB0byB2bXNzCiAgICAjIGlmIHdlIGhhdmUgbW9yZSB0aGFuIDEsIHdlIHdpbGwgbmVlZCB0byBwb3B1bGF0ZSB3aXRoIGNsaWVudElkIHVzZWQgZm9yIG9mZi1ub2RlIHNjYW5uaW5nCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIG5vZGVzY2FuX2FnZW50X2ZpbGVuYW1lPSIvZXRjL2RlZmF1bHQvdnNhLW5vZGVzY2FuLWFnZW50LmNvbmZpZyIKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgbm9kZXNjYW5fYWdlbnRfZmlsZT0iewogICAgXCJOaWNlXCI6IDE5LAogICAgXCJUaW1lb3V0XCI6IDEwODAwLAogICAgXCJDbGllbnRJZFwiOiBcIlwiLAogICAgXCJUZW5hbnRJZFwiOiAkQVpVUkVTRUNQQUNLVlNBVEVOQU5USUQsCiAgICBcIlF1YWx5c1N0b3JlQmFzZVVybFwiOiAkQVpVUkVTRUNQQUNLUVVBTFlTVVJMLAogICAgXCJQcm9jZXNzVGltZW91dFwiOiAzMDAsCiAgICBcIkNvbW1hbmREZWxheVwiOiAwCiAgfSIKCiAgICB3cml0ZV9maWxlIG5vZGVzY2FuX2FnZW50X2ZpbGVuYW1lIG5vZGVzY2FuX2FnZW50X2ZpbGUgdHJ1ZQp9CgojIHJ1bl9henNlY2RfY29uZmlnX3NjYW4KcnVuX2F6c2VjZF9jb25maWdfc2NhbigpIHsKICAgIGxvZyAic3RhcnRpbmciCgogICAgY29uZmlndXJlX2F6c2VjZF9zY2FuCgogICAgbG9jYWwgLWFyIGNvbmZpZ3M9KAogICAgICAgICJiYXNlbGluZSIKICAgICAgICAiY2xhbWF2IgogICAgICAgICJzb2Z0d2FyZSIKICAgICkKCiAgICBsb2cgIlNjYW5uaW5nIGNvbmZpZ3VyYXRpb24gZmlsZXMgd2l0aCBhenNlY2QgJHtjb25maWdzWypdfSIKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjA2OAogICAgZm9yIHNjYW4gaW4gJHtjb25maWdzW0BdfTsgZG8KICAgICAgICBsb2cgIlNjYW5uaW5nIGNvbmZpZyBmaWxlICRzY2FuIG5vdyIKICAgICAgICAvdXNyL2xvY2FsL2Jpbi9henNlY2QgY29uZmlnIC1zICIkc2NhbiIgLWQgUDFECiAgICBkb25lCn0KCiMgY3JlYXRlX3JlcXVpcmVkX2RpcnMKY3JlYXRlX3JlcXVpcmVkX2RpcnMoKSB7CiAgICBjcmVhdGVfZGlycz0oCiAgICAgICAgL3Zhci9sb2cvam91cm5hbAogICAgICAgIC92YXIvbGliL3dhYWdlbnQvTWljcm9zb2Z0LkF6dXJlLktleVZhdWx0LlN0b3JlCiAgICAgICAgIyBEb2VzIG5vdCBleGlzdCBvbiBkZXZQcm94eVZNU1MKICAgICAgICAvdmFyL29wdC9taWNyb3NvZnQvbGludXhtb25hZ2VudAogICAgKQoKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjA2OAogICAgZm9yIGQgaW4gJHtjcmVhdGVfZGlyc1tAXX07IGRvCiAgICAgICAgbG9nICJDcmVhdGluZyBkaXJlY3RvcnkgJGQiCiAgICAgICAgbWtkaXIgLXAgIiRkIiB8fCBhYm9ydCAiZmFpbGVkIHRvIGNyZWF0ZSBkaXJlY3RvcnkgJGQiCiAgICBkb25lCn0KCiMgZmlyZXdhbGxkX2NvbmZpZ3VyZV9iYWNrZW5kCmZpcmV3YWxsZF9jb25maWd1cmVfYmFja2VuZCgpIHsKICAgIGxvZyAic3RhcnRpbmciCgogICAgbG9nICJDaGFuZ2luZyBmaXJld2FsbGQgYmFja2VuZCB0byBpcHRhYmxlcyIKICAgIGNvbmZfZmlsZT0iL2V0Yy9maXJld2FsbGQvZmlyZXdhbGxkLmNvbmYiCiAgICBzZWQgLWkgJ3MvRmlyZXdhbGxCYWNrZW5kPW5mdGFibGVzL0ZpcmV3YWxsQmFja2VuZD1pcHRhYmxlcy9nJyAiJGNvbmZfZmlsZSIKfQoKIyBmaXJld2FsbGRfY29uZmlndXJlCiMKIyBhcmdzOgojIDEpIHBvcnRzIC0gbmFtZXJlZiwgc3RyaW5nIGFycmF5OyBwb3J0cyB0byBiZSBlbmFibGVkLgojICAgICAgICogUG9ydHMgbXVzdCBiZSBwb3N0Zml4ZWQgd2l0aCAvdGNwIG9yIC91ZHAKZmlyZXdhbGxkX2NvbmZpZ3VyZSgpIHsKICAgIGxvY2FsIC1uIHBvcnRzPSIkMSIKICAgIGxvZyAic3RhcnRpbmciCgogICAgZmlyZXdhbGxkX2NvbmZpZ3VyZV9iYWNrZW5kCgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtcmEgc2VydmljZT0oCiAgICAgICAgImZpcmV3YWxsZCIKICAgICkKICAgIGVuYWJsZV9zZXJ2aWNlcyBzZXJ2aWNlCgogICAgbG9nICJFbmFibGluZyBwb3J0cyAke3BvcnRzWypdfSBvbiBkZWZhdWx0IGZpcmV3YWxsZCB6b25lIgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDY4CiAgICBmb3IgcG9ydCBpbiAke3BvcnRzW0BdfTsgZG8KICAgICAgICBsb2cgIkVuYWJsaW5nIHBvcnQgJHBvcnQgbm93IgogICAgICAgIGZpcmV3YWxsLWNtZCAiLS1hZGQtcG9ydD0kcG9ydCIgXAogICAgICAgICAgICAgICAgICAgICAtLXBlcm1hbmVudAogICAgZG9uZQoKICAgIGxvZyAiV3JpdGluZyBydW50aW1lIGNvbmZpZyB0byBwZXJtYW5lbnQgY29uZmlnIgogICAgZmlyZXdhbGwtY21kIC0tcnVudGltZS10by1wZXJtYW5lbnQKfQoKIyB1dGlsLWNvbW1vbi5zaCBkb2VzIG5vdCBleGlzdCB3aGVuIGRlcGxveWVkIHRvIFZNU1MgdmlhIFZNU1MgZXh0ZW5zaW9ucwojIFByb3ZpZGVzIHNoZWxsY2hlY2sgZGVmaW5pdGlvbnMKdXRpbF9jb21tb249InV0aWwtY29tbW9uLnNoIgppZiBbIC1mICIkdXRpbF9jb21tb24iIF07IHRoZW4KICAgICMgc2hlbGxjaGVjayBzb3VyY2U9dXRpbC1jb21tb24uc2gKICAgIHNvdXJjZSAiJHV0aWxfY29tbW9uIgpmaQojIS9iaW4vYmFzaAoKc2V0IC1vIGVycmV4aXQgXAogICAgLW8gcGlwZWZhaWwgXAogICAgLW8gbm91bnNldAoKbWFpbigpIHsKICAgICMgdHJhbnNhY3Rpb24gYXR0ZW1wdCByZXRyeSB0aW1lIGluIHNlY29uZHMKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXJpIHJldHJ5X3dhaXRfdGltZT0zMAogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDY4CiAgICBsb2NhbCAtcmkgcGtnX3JldHJ5X2NvdW50PTYwCgogICAgY3JlYXRlX3JlcXVpcmVkX2RpcnMKICAgIGNvbmZpZ3VyZV9zc2hkCiAgICBjb25maWd1cmVfcnBtX3JlcG9zIHJldHJ5X3dhaXRfdGltZSBcCiAgICAgICAgICAgICAgICAgICAgIiRwa2dfcmV0cnlfY291bnQiCgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtYXIgZXhjbHVkZV9wa2dzPSgKICAgICAgICAiLXggV0FMaW51eEFnZW50IgogICAgICAgICIteCBXQUxpbnV4QWdlbnQtdWRldiIKICAgICkKCiAgICBkbmZfdXBkYXRlX3BrZ3MgZXhjbHVkZV9wa2dzIFwKICAgICAgICAgICAgICAgICAgICByZXRyeV93YWl0X3RpbWUgXAogICAgICAgICAgICAgICAgICAgICIkcGtnX3JldHJ5X2NvdW50IgoKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXJhIGluc3RhbGxfcGtncz0oCiAgICAgICAgYXp1cmUtY2xpCiAgICAgICAgYXp1cmUtbWRzZAogICAgICAgIHBvZG1hbgogICAgICAgIHBvZG1hbi1kb2NrZXIKICAgICAgICBvcGVuc3NsLXBlcmwKICAgICAgICAjIGhhY2sgLSB3ZSBhcmUgaW5zdGFsbGluZyBweXRob24zIG9uIGhvc3RzIGR1ZSB0byBhbiBpc3N1ZSB3aXRoIEF6dXJlIExpbnV4IEV4dGVuc2lvbnMgaHR0cHM6Ly9naXRodWIuY29tL0F6dXJlL2F6dXJlLWxpbnV4LWV4dGVuc2lvbnMvcHVsbC8xNTA1CiAgICAgICAgcHl0aG9uMwogICAgICAgICMgcmVxdWlyZWQgZm9yIHBvZG1hbiBuZXR3b3JraW5nCiAgICAgICAgZmlyZXdhbGxkCiAgICAgICAgIyBSZXF1aXJlZCB0byBlbmFibGUgZmlwcwogICAgICAgIGdydWJieQogICAgICAgIGRyYWN1dC1maXBzCiAgICApCgogICAgZG5mX2luc3RhbGxfcGtncyBpbnN0YWxsX3BrZ3MgXAogICAgICAgICAgICAgICAgICAgICByZXRyeV93YWl0X3RpbWUgXAogICAgICAgICAgICAgICAgICAgICAiJHBrZ19yZXRyeV9jb3VudCIKCiAgICBmaXBzX2NvbmZpZ3VyZQoKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjExOQogICAgY29uZmlndXJlX2xvZ3JvdGF0ZQoKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNCBkaXNhYmxlPVNDMjE1MwogICAgbG9jYWwgLXIgbWRtaW1hZ2U9IiR7UlBJTUFHRSUlLyp9LyR7TURNSU1BR0UjKi99IgogICAgbG9jYWwgLXIgcnBpbWFnZT0iJFJQSU1BR0UiCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIGZsdWVudGJpdF9pbWFnZT0iJEZMVUVOVEJJVElNQUdFIgogICAgIyB2YWx1ZXMgYXJlIHJlZmVyZW5jZXMgdG8gdmFyaWFibGVzLCB0aGV5IHNob3VsZCBub3QgYmUgZGVyZWZlcmVuY2VkIGhlcmUKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXJBIGFyb19pbWFnZXM9KAogICAgICAgIFsibWRtIl09Im1kbWltYWdlIgogICAgICAgIFsicnAiXT0icnBpbWFnZSIKICAgICAgICBbImZsdWVudGJpdCJdPSJmbHVlbnRiaXRfaW1hZ2UiCiAgICApCgogICAgcHVsbF9jb250YWluZXJfaW1hZ2VzIGFyb19pbWFnZXMKCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yYSBlbmFibGVfcG9ydHM9KAogICAgICAgICMgUlAgZ2F0ZXdheQogICAgICAgICI4MC90Y3AiCiAgICAgICAgIjgwODEvdGNwIgogICAgICAgICI0NDMvdGNwIgogICAgICAgICMgSklUIHNzaAogICAgICAgICIyMi90Y3AiCiAgICApCgogICAgZmlyZXdhbGxkX2NvbmZpZ3VyZSBlbmFibGVfcG9ydHMKCgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciBmbHVlbnRiaXRfY29uZl9maWxlPSJbSU5QVVRdCglOYW1lIHN5c3RlbWQKCVRhZyBqb3VybmFsZAoJU3lzdGVtZF9GaWx0ZXIgX0NPTU09YXJvCglEQiAvdmFyL2xpYi9mbHVlbnQvam91cm5hbGRiCgpbRklMVEVSXQoJTmFtZSBtb2RpZnkKCU1hdGNoIGpvdXJuYWxkCglSZW1vdmVfd2lsZGNhcmQgXwoJUmVtb3ZlIFRJTUVTVEFNUAoKW09VVFBVVF0KCU5hbWUgZm9yd2FyZAoJTWF0Y2ggKgoJUG9ydCAyOTIzMCIKCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIGFyb19nYXRld2F5X2NvbmZfZmlsZT0iQUNSX1JFU09VUkNFX0lEPSckQUNSUkVTT1VSQ0VJRCcKREFUQUJBU0VfQUNDT1VOVF9OQU1FPSckREFUQUJBU0VBQ0NPVU5UTkFNRScKTURNX0FDQ09VTlQ9JyRSUE1ETUFDQ09VTlQnCk1ETV9OQU1FU1BBQ0U9JyR7cm9sZV9nYXRld2F5Xn0nCkdBVEVXQVlfRE9NQUlOUz0nJEdBVEVXQVlET01BSU5TJwpHQVRFV0FZX0ZFQVRVUkVTPSckR0FURVdBWUZFQVRVUkVTJwpSUElNQUdFPSckcnBpbWFnZSciCgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciBtZHNkX2NvbmZpZ192ZXJzaW9uPSIkR0FURVdBWU1EU0RDT05GSUdWRVJTSU9OIgoKICAgICMgdmFsdWVzIGFyZSByZWZlcmVuY2VzIHRvIHZhcmlhYmxlcywgdGhleSBzaG91bGQgbm90IGJlIGRlcmVmZXJlbmNlZCBoZXJlCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yQSBhcm9fY29uZmlncz0oCiAgICAgICAgWyJnYXRld2F5X2NvbmZpZyJdPSJhcm9fZ2F0ZXdheV9jb25mX2ZpbGUiCiAgICAgICAgWyJmbHVlbnRiaXQiXT0iZmx1ZW50Yml0X2NvbmZfZmlsZSIKICAgICAgICBbIm1kc2QiXT0ibWRzZF9jb25maWdfdmVyc2lvbiIKICAgICAgICBbInN0YXRpY19pcF9hZGRyZXNzIl09InN0YXRpY19pcF9hZGRyZXNzZXMiCiAgICApCgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICAjIHVzZSBkZWZhdWx0IHBvZG1hbiBuZXR3b3JrIHdpdGggcmFuZ2UgMTAuODguMC4wLzE2CiAgICBsb2NhbCAtckEgc3RhdGljX2lwX2FkZHJlc3Nlcz0oCiAgICAgICAgWyJnYXRld2F5Il09IjEwLjg4LjAuMiIKICAgICAgICBbIm1kbSJdPSIxMC44OC4wLjgiCiAgICApCgogICAgY29uZmlndXJlX3Ztc3NfYXJvX3NlcnZpY2VzIHJvbGVfZ2F0ZXdheSBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJvX2ltYWdlcyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJvX2NvbmZpZ3MKCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yYSBnYXRld2F5X3NlcnZpY2VzPSgKICAgICAgICAiYXJvLWdhdGV3YXkiCiAgICAgICAgImF6c2VjZCIKICAgICAgICAibWRzZCIKICAgICAgICAibWRtIgogICAgICAgICJjaHJvbnlkIgogICAgICAgICJmbHVlbnRiaXQiCiAgICAgICAgImRvd25sb2FkLW1kc2QtY3JlZGVudGlhbHMudGltZXIiCiAgICAgICAgImRvd25sb2FkLW1kbS1jcmVkZW50aWFscy50aW1lciIKICAgICAgICAiZmlyZXdhbGxkIgogICAgKQoKICAgIGVuYWJsZV9zZXJ2aWNlcyBnYXRld2F5X3NlcnZpY2VzCgogICAgcmVib290X3ZtCn0KCiMgZXhwb3J0IEFaVVJFX0NMT1VEX05BTUU9IiR7QVpVUkVDTE9VRE5BTUU6PyJGYWlsZWQgdG8gY2Fycnkgb3ZlciB2YXJpYWJsZXMifSIKZXhwb3J0IEFaVVJFX0NMT1VEX05BTUU9IiR7QVpVUkVDTE9VRE5BTUU6PyJGYWlsZWQgdG8gY2Fycnkgb3ZlciB2YXJpYWJsZXMifSIKCiMgdXRpbD0idXRpbC5zaCIKIwojIHV0aWwuc2ggZG9lcyBub3QgZXhpc3Qgd2hlbiBkZXBsb3llZCB0byBWTVNTIHZpYSBWTVNTIGV4dGVuc2lvbnMKIyBQcm92aWRlcyBzaGVsbGNoZWNrIGRlZmluaXRpb25zCnV0aWw9InV0aWwuc2giCmlmIFsgLWYgIiR1dGlsIiBdOyB0aGVuCiAgICAjIHNoZWxsY2hlY2sgc291cmNlPXV0aWwuc2gKICAgIHNvdXJjZSAiJHV0aWwiCmZpCgptYWluICIkQCIK')))]" } } }, diff --git a/pkg/deploy/assets/rp-production.json b/pkg/deploy/assets/rp-production.json index 4634a495124..c5eab25938c 100644 --- a/pkg/deploy/assets/rp-production.json +++ b/pkg/deploy/assets/rp-production.json @@ -493,11 +493,11 @@ "properties": { "publisher": "Microsoft.Azure.Extensions", "type": "CustomScript", - "typeHandlerVersion": "2.0", + "typeHandlerVersion": "2.1", "autoUpgradeMinorVersion": true, "settings": {}, "protectedSettings": { - "script": "[base64(concat(base64ToString('c2V0IC1leAoK'),'ACRRESOURCEID=$(base64 -d \u003c\u003c\u003c''',base64(parameters('acrResourceId')),''')\n','ADMINAPICLIENTCERTCOMMONNAME=$(base64 -d \u003c\u003c\u003c''',base64(parameters('adminApiClientCertCommonName')),''')\n','ARMAPICLIENTCERTCOMMONNAME=$(base64 -d \u003c\u003c\u003c''',base64(parameters('armApiClientCertCommonName')),''')\n','ARMCLIENTID=$(base64 -d \u003c\u003c\u003c''',base64(parameters('armClientId')),''')\n','AZURECLOUDNAME=$(base64 -d \u003c\u003c\u003c''',base64(parameters('azureCloudName')),''')\n','AZURESECPACKQUALYSURL=$(base64 -d \u003c\u003c\u003c''',base64(parameters('azureSecPackQualysUrl')),''')\n','AZURESECPACKVSATENANTID=$(base64 -d \u003c\u003c\u003c''',base64(parameters('azureSecPackVSATenantId')),''')\n','CLUSTERMDMACCOUNT=$(base64 -d \u003c\u003c\u003c''',base64(parameters('clusterMdmAccount')),''')\n','CLUSTERMDSDACCOUNT=$(base64 -d \u003c\u003c\u003c''',base64(parameters('clusterMdsdAccount')),''')\n','CLUSTERMDSDCONFIGVERSION=$(base64 -d \u003c\u003c\u003c''',base64(parameters('clusterMdsdConfigVersion')),''')\n','CLUSTERMDSDNAMESPACE=$(base64 -d \u003c\u003c\u003c''',base64(parameters('clusterMdsdNamespace')),''')\n','CLUSTERPARENTDOMAINNAME=$(base64 -d \u003c\u003c\u003c''',base64(parameters('clusterParentDomainName')),''')\n','DATABASEACCOUNTNAME=$(base64 -d \u003c\u003c\u003c''',base64(parameters('databaseAccountName')),''')\n','FLUENTBITIMAGE=$(base64 -d \u003c\u003c\u003c''',base64(parameters('fluentbitImage')),''')\n','FPCLIENTID=$(base64 -d \u003c\u003c\u003c''',base64(parameters('fpClientId')),''')\n','FPTENANTID=$(base64 -d \u003c\u003c\u003c''',base64(parameters('fpTenantId')),''')\n','FPSERVICEPRINCIPALID=$(base64 -d \u003c\u003c\u003c''',base64(parameters('fpServicePrincipalId')),''')\n','GATEWAYDOMAINS=$(base64 -d \u003c\u003c\u003c''',base64(parameters('gatewayDomains')),''')\n','GATEWAYRESOURCEGROUPNAME=$(base64 -d \u003c\u003c\u003c''',base64(parameters('gatewayResourceGroupName')),''')\n','GATEWAYSERVICEPRINCIPALID=$(base64 -d \u003c\u003c\u003c''',base64(parameters('gatewayServicePrincipalId')),''')\n','KEYVAULTDNSSUFFIX=$(base64 -d \u003c\u003c\u003c''',base64(parameters('keyvaultDNSSuffix')),''')\n','KEYVAULTPREFIX=$(base64 -d \u003c\u003c\u003c''',base64(parameters('keyvaultPrefix')),''')\n','MDMFRONTENDURL=$(base64 -d \u003c\u003c\u003c''',base64(parameters('mdmFrontendUrl')),''')\n','MDSDENVIRONMENT=$(base64 -d \u003c\u003c\u003c''',base64(parameters('mdsdEnvironment')),''')\n','MSIRPENDPOINT=$(base64 -d \u003c\u003c\u003c''',base64(parameters('msiRpEndpoint')),''')\n','PORTALACCESSGROUPIDS=$(base64 -d \u003c\u003c\u003c''',base64(parameters('portalAccessGroupIds')),''')\n','PORTALCLIENTID=$(base64 -d \u003c\u003c\u003c''',base64(parameters('portalClientId')),''')\n','PORTALELEVATEDGROUPIDS=$(base64 -d \u003c\u003c\u003c''',base64(parameters('portalElevatedGroupIds')),''')\n','RPFEATURES=$(base64 -d \u003c\u003c\u003c''',base64(parameters('rpFeatures')),''')\n','RPIMAGE=$(base64 -d \u003c\u003c\u003c''',base64(parameters('rpImage')),''')\n','RPMDMACCOUNT=$(base64 -d \u003c\u003c\u003c''',base64(parameters('rpMdmAccount')),''')\n','RPMDSDACCOUNT=$(base64 -d \u003c\u003c\u003c''',base64(parameters('rpMdsdAccount')),''')\n','RPMDSDCONFIGVERSION=$(base64 -d \u003c\u003c\u003c''',base64(parameters('rpMdsdConfigVersion')),''')\n','RPMDSDNAMESPACE=$(base64 -d \u003c\u003c\u003c''',base64(parameters('rpMdsdNamespace')),''')\n','RPPARENTDOMAINNAME=$(base64 -d \u003c\u003c\u003c''',base64(parameters('rpParentDomainName')),''')\n','OIDCSTORAGEACCOUNTNAME=$(base64 -d \u003c\u003c\u003c''',base64(parameters('oidcStorageAccountName')),''')\n','OTELAUDITQUEUESIZE=$(base64 -d \u003c\u003c\u003c''',base64(parameters('otelAuditQueueSize')),''')\n','TOKENCONTRIBUTORROLEID=$(base64 -d \u003c\u003c\u003c''',base64(parameters('tokenContributorRoleID')),''')\n','TOKENCONTRIBUTORROLENAME=$(base64 -d \u003c\u003c\u003c''',base64(parameters('tokenContributorRoleName')),''')\n','RPLOGLEVEL=$(base64 -d \u003c\u003c\u003c''',base64(parameters('rpLogLevel')),''')\n','MONITORLOGLEVEL=$(base64 -d \u003c\u003c\u003c''',base64(parameters('monitorLogLevel')),''')\n','PORTALLOGLEVEL=$(base64 -d \u003c\u003c\u003c''',base64(parameters('portalLogLevel')),''')\n','MIMOACTUATORLOGLEVEL=$(base64 -d \u003c\u003c\u003c''',base64(parameters('mimoActuatorLogLevel')),''')\n','MIMOSCHEDULERLOGLEVEL=$(base64 -d \u003c\u003c\u003c''',base64(parameters('mimoSchedulerLogLevel')),''')\n','CLUSTERSINSTALLVIAHIVE=$(base64 -d \u003c\u003c\u003c''',base64(parameters('clustersInstallViaHive')),''')\n','CLUSTERSADOPTBYHIVE=$(base64 -d \u003c\u003c\u003c''',base64(parameters('clustersAdoptByHive')),''')\n','CLUSTERDEFAULTINSTALLERPULLSPEC=$(base64 -d \u003c\u003c\u003c''',base64(parameters('clusterDefaultInstallerPullspec')),''')\n','MISEVALIDAUDIENCES=$(base64 -d \u003c\u003c\u003c''',base64(string(parameters('miseValidAudiences'))),''')\n','MISEVALIDAPPIDS=$(base64 -d \u003c\u003c\u003c''',base64(string(parameters('miseValidAppIDs'))),''')\n','ADMINAPICABUNDLE=''',parameters('adminApiCaBundle'),'''\n','ARMAPICABUNDLE=''',parameters('armApiCaBundle'),'''\n','MDMIMAGE=''/geneva/distroless/mdm:2.202602101834.0-20260211-1@sha256:a581e89744933f30a9f8e2724906fde02e713836fce76afefec7092daa01c064''\n','OTELIMAGE=''mcr.microsoft.com/oss/otel/opentelemetry-collector-contrib:0.95.0-linux-amd64''\n','MISEIMAGE=''/mise:1.0.03103.537-mise-cbl-mariner2.0-distroless''\n','LOCATION=$(base64 -d \u003c\u003c\u003c''',base64(resourceGroup().location),''')\n','SUBSCRIPTIONID=$(base64 -d \u003c\u003c\u003c''',base64(subscription().subscriptionId),''')\n','RESOURCEGROUPNAME=$(base64 -d \u003c\u003c\u003c''',base64(resourceGroup().name),''')\n','\n',base64ToString('IyEvYmluL2Jhc2gKIyBJbnRlcm5hbCBGdW5jdGlvbnMgYW5kIENvbnN0YW50cwoKIyBlbXB0eV9zdHIgLSBjb25zdGFudDsgdXNlZCBieSBmdW5jdGlvbnMgZm9yIG9wdGlvbmFsIG5hbWVyZWYgc3RyaW5nIGFyZ3VlbWVudHMKIyBlbXB0eV9zdHI9IiIKIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CmRlY2xhcmUgLXIgZW1wdHlfc3RyPSIiCgojIHJvbGVfZ2F0ZXdheSAtIGNvbnN0YW50OyBJcyB1c2VkIHRvIGRldGVybWluZSB3aGljaCBWTVNTIGlzIGJlaW5nIGJvb3RzdHJhcHBlZAojIHRoaXMgc2hvdWxkIGJlIHJlZmVyZW5jZWQgYnkgc2NyaXB0cyBzb3VyY2luZyB0aGlzIGZpbGUKIyByb2xlX2dhdGV3YXk9ImdhdGV3YXkiCmRlY2xhcmUgLXIgcm9sZV9nYXRld2F5PSJnYXRld2F5IgojIHJvbGVfcnAgLSBjb25zdGFudDsgSXMgdXNlZCB0byBkZXRlcm1pbmUgd2hpY2ggVk1TUyBpcyBiZWluZyBib290c3RyYXBwZWQKIyB0aGlzIHNob3VsZCBiZSByZWZlcmVuY2VkIGJ5IHNjcmlwdHMgc291cmNpbmcgdGhpcyBmaWxlCiMgcm9sZV9ycD0icnAiCmRlY2xhcmUgLXIgcm9sZV9ycD0icnAiCiMgcm9sZV9kZXZwcm94eSAtIGNvbnN0YW50OyBJcyB1c2VkIHRvIGRldGVybWluZSB3aGljaCBWTVNTIGlzIGJlaW5nIGJvb3RzdHJhcHBlZAojIHJvbGVfZGV2cHJveHk9ImRldnByb3h5IgpkZWNsYXJlIC1yIHJvbGVfZGV2cHJveHk9ImRldnByb3h5IgojIHVzX2dvdl9jbG91ZCAtIGNvbnN0YW50OyBJcyB0aGUgbmFtZSBvZiBBWlVSRUNMT1VETkFNRSBmb3IgVVMgZ292ZXJubWVudCBjbG91ZAojIHVzX2dvdl9jbG91ZD0iQXp1cmVVU0dvdmVybm1lbnQiCmRlY2xhcmUgLXIgdXNfZ292X2Nsb3VkPSJBenVyZVVTR292ZXJubWVudCIKCiMgbG9nIGlzIGEgd3JhcHBlciBmb3IgZWNobyB0aGF0IGluY2x1ZGVzIHRoZSBmdW5jdGlvbiBuYW1lCiMgQXJncwojIDEpIG1zZyAtIHN0cmluZwojIDIpIHN0YWNrX2xldmVsIC0gaW50OyBvcHRpb25hbCwgZGVmYXVsdHMgdG8gdGhlIGZ1bmN0aW9uIGF0IHRoZSBib3R0b20gb2YgdGhlIGNhbGwgc3RhY2sKbG9nKCkgewogICAgbG9jYWwgLXIgbXNnPSIkezE6LSJsb2cgbWVzc2FnZSBpcyBlbXB0eSJ9IgogICAgbG9jYWwgLXIgc3RhY2tfbGV2ZWw9IiR7MjotMX0iCiAgICBlY2hvICIke0ZVTkNOQU1FWyR7c3RhY2tfbGV2ZWx9XX06ICR7bXNnfSIKfQoKIyBhYm9ydCBpcyBhIHdyYXBwZXIgZm9yIGxvZyB0aGF0IGV4aXRzIHdpdGggYW4gZXJyb3IgY29kZQphYm9ydCgpIHsKICAgIGxvY2FsIC1yaSBvcmlnaW5fc3RhY2tsZXZlbD0yCiAgICBsb2cgIiR7MX0iICIkb3JpZ2luX3N0YWNrbGV2ZWwiCiAgICBsb2cgIkV4aXRpbmciCiAgICBleGl0IDEKfQoKIyB3cml0ZV9maWxlCiMgQXJncwojIDEpIGZpbGVuYW1lIC0gc3RyaW5nCiMgMikgZmlsZV9jb250ZW50cyAtIHN0cmluZwojIDMpIGNsb2JiZXIgLSBib29sZWFuOyBvcHRpb25hbCAtIGRlZmF1bHRzIHRvIGZhbHNlCndyaXRlX2ZpbGUoKSB7CiAgICBsb2NhbCAtbiBmaWxlbmFtZT0iJDEiCiAgICBsb2NhbCAtbiBmaWxlX2NvbnRlbnRzPSIkMiIKICAgIGxvY2FsIC1yIGNsb2JiZXI9IiR7MzotZmFsc2V9IgoKICAgIGlmICRjbG9iYmVyOyB0aGVuCiAgICAgICAgbG9nICJPdmVyd3JpdGluZyBmaWxlICRmaWxlbmFtZSIKICAgICAgICBlY2hvICIkZmlsZV9jb250ZW50cyIgPiAiJGZpbGVuYW1lIgogICAgZWxzZQogICAgICAgIGxvZyAiQXBwZW5kaW5nIHRvICRmaWxlbmFtZSIKICAgICAgICBlY2hvICIkZmlsZV9jb250ZW50cyIgPj4gIiRmaWxlbmFtZSIKICAgIGZpCn0KCiMgcmV0cnkgQWRkaW5nIHJldHJ5IGxvZ2ljIHRvIHl1bSBjb21tYW5kcyBpbiBvcmRlciB0byBhdm9pZCBzdGFsbGluZyBvdXQgb24gcmVzb3VyY2UgbG9ja3MKIyBhcmdzOgojIDEpIGNtZF9yZXRyeSAtIG5hbWVyZWYsIGFycmF5OyBDb21tYW5kIGFuZCBhcmd1ZW1lbnQocykgdG8gcmV0cnkKIyAyKSB3YWl0X3RpbWUgLSBuYW1lcmVmLCBpbnRlZ2VyOyBUaW1lIHRvIHdhaXQgYmVmb3JlIHJldHJ5aW5nIGNvbW1hbmQKIyAzKSByZXRyaWVzIC0gaW50ZWdlciwgb3B0aW9uYWw7IEFtbW91bnQgb2YgdGltZXMgdG8gcmV0cnkgY29tbWFuZCwgZGVmYXVsdHMgdG8gNQpyZXRyeSgpIHsKICAgIGxvY2FsIC1uIGNtZF9yZXRyeT0iJDEiCiAgICBsb2NhbCAtbiB3YWl0X3RpbWU9IiQyIgogICAgbG9jYWwgLXJpIHJldHJpZXM9IiR7MzotNX0iCgogICAgCiAgICBmb3IgYXR0ZW1wdCBpbiAkKHNlcSAxICRyZXRyaWVzKTsgZG8KICAgICAgICBsb2cgImF0dGVtcHQgIyR7YXR0ZW1wdH0gLSAke0ZVTkNOQU1FWzJdfSIKICAgICAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwNjgKICAgICAgICAke2NtZF9yZXRyeVtAXX0gJgoKICAgICAgICB3YWl0IC1mICQhICYmIHJldHVybiAwCiAgICAgICAgc2xlZXAgIiR3YWl0X3RpbWUiCiAgICBkb25lCgogICAgYWJvcnQgIiR7Y21kX3JldHJ5WypdfSBmYWlsZWQgYWZ0ZXIgIyRyZXRyaWVzIGF0dGVtcHRzIgp9CgojIHZlcmlmeV9yb2xlCiMgYXJnczoKIyAxKSB0ZXN0X3JvbGUgLSBuYW1lcmVmOyByb2xlIGJlaW5nIHZlcmlmaWVkCnZlcmlmeV9yb2xlKCkgewogICAgbG9jYWwgLW4gdGVzdF9yb2xlPSIkMSIKCiAgICBhbGxvd2VkX3JvbGVzX2dsb2I9Iigkcm9sZV9ycHwkcm9sZV9nYXRld2F5fCRyb2xlX2RldnByb3h5KSIKICAgIGlmIFtbICIkdGVzdF9yb2xlIiA9fiAkYWxsb3dlZF9yb2xlc19nbG9iIF1dOyB0aGVuCiAgICAgICAgbG9nICJWZXJpZmllZCByb2xlIFwiJHRlc3Rfcm9sZVwiIgogICAgZWxzZQogICAgICAgIGFib3J0ICJmYWlsZWQgdG8gdmVyaWZ5IHJvbGUsIHJvbGUgXCIke3Rlc3Rfcm9sZX1cIiBub3QgaW4gXCIke2FsbG93ZWRfcm9sZXNfZ2xvYn1cIiIKICAgIGZpCn0KCiMgZ2V0X2tleXZhdWx0X3N1ZmZpeAojIGFyZ3M6CiMgMSkgcmwgLSBuYW1lcmVmLCBzdHJpbmc7IHJvbGUgdG8gZ2V0IHNob3J0IHJvbGUgZm9yCiMgMikga3Zfc3VmZml4IC0gbmFtZXJlZiwgc3RyaW5nOyBzaG9ydCByb2xlIHdpbGwgYmUgYXNzaWduZWQgdG8gdGhpcyBuYW1lcmVmCiMgMykgc2VjX3ByZWZpeCAtIG5hbWVyZWYsIHN0cmluZzsga2V5dmF1bHQgY2VydGlmaWNhdGUgcHJlZml4IHdpbGwgYmUgYXNzaWduZWQgdG8gdGhpcyBuYW1lcmVmCmdldF9rZXl2YXVsdF9zdWZmaXgoKSB7CiAgICBsb2NhbCAtbiBybD0iJDEiCiAgICBsb2NhbCAtbiBrdl9zdWZmaXg9IiQyIgogICAgbG9jYWwgLW4gc2VjX3ByZWZpeD0iJDMiCgogICAgbG9jYWwgLXIga2V5dmF1bHRfc3VmZml4X3JwPSJzdmMiCiAgICBsb2NhbCAtciBrZXl2YXVsdF9wcmVmaXhfZ2F0ZXdheT0iZ3d5IgoKICAgIGNhc2UgIiRybCIgaW4KICAgICAgICAiJHJvbGVfZ2F0ZXdheSIpCiAgICAgICAgICAgIGt2X3N1ZmZpeD0iJGtleXZhdWx0X3ByZWZpeF9nYXRld2F5IgogICAgICAgICAgICBzZWNfcHJlZml4PSIka2V5dmF1bHRfcHJlZml4X2dhdGV3YXkiCiAgICAgICAgICAgIDs7CiAgICAgICAgIiRyb2xlX3JwIikKICAgICAgICAgICAga3Zfc3VmZml4PSIka2V5dmF1bHRfc3VmZml4X3JwIgogICAgICAgICAgICBzZWNfcHJlZml4PSIkcm9sZV9ycCIKICAgICAgICAgICAgOzsKICAgICAgICAqKQogICAgICAgICAgICBhYm9ydCAidW5rb3duIHJvbGUgJHJsIgogICAgICAgICAgICA7OwogICAgZXNhYwp9CgojIHJlYm9vdF92bSByZXN0b3JlcyBjYWxscyBzaHV0ZG93biAtciBpbiBhIHN1YnNoZWxsCiMgUmVib290cyBzaG91bGQgc2NoZWR1bGVkIGFmdGVyIGFsbCBWTSBleHRlbnNpb25zIGhhdmUgaGFkIHRpbWUgdG8gY29tcGxldGUKIyBSZWZlcmVuY2U6IGh0dHBzOi8vbGVhcm4ubWljcm9zb2Z0LmNvbS9lbi11cy9henVyZS92aXJ0dWFsLW1hY2hpbmVzL2V4dGVuc2lvbnMvY3VzdG9tLXNjcmlwdC1saW51eCN0aXBzCnJlYm9vdF92bSgpIHsKICAgIGxvZyAic3RhcnRpbmciCgogICAgKHNodXRkb3duIC1yIG5vdyAmKQp9CiMhL2Jpbi9iYXNoCiMgUmVwb3NpdG9yeSBhbmQgcGFja2FnZSBtYW5hZ2VtZW50IHJlbGF0ZWQgZnVuY3Rpb25zCgpjb25maWd1cmVfcmVwb19tYXJpbmVyX2V4dGVuZGVkKCkgewogICAgbG9jYWwgLXIgZXh0ZW5kZWRfcmVwb19jb25maWc9Imh0dHBzOi8vcGFja2FnZXMubWljcm9zb2Z0LmNvbS9jYmwtbWFyaW5lci8yLjAvcHJvZC9leHRlbmRlZC94ODZfNjQvY29uZmlnLnJlcG8iCiAgICBjdXJsIC1zU0wgIiRleHRlbmRlZF9yZXBvX2NvbmZpZyIgLW8gL2V0Yy95dW0ucmVwb3MuZC9tYXJpbmVyLWV4dGVuZGVkLnJlcG8KCiAgICBsb2NhbCAtciByZXBvX25hbWU9ImNibC1tYXJpbmVyMi4wcHJvZGV4dGVuZGVkeDg2XzY0IgoKICAgIGxvY2FsIC1yYSBjbWQ9KAogICAgICAgIGRuZgogICAgICAgIHVwZGF0ZQogICAgICAgIC15CiAgICAgICAgLS1lbmFibGVyZXBvPSIkcmVwb19uYW1lIgogICAgKQoKICAgIGxvZyAiRW5hYmxpbmcgcmVwbyAkcmVwb19uYW1lIgogICAgcmV0cnkgY21kICIkMSIgIiR7MjotfSIKfQoKIyBjb25maWd1cmVfcnBtX3JlcG9zCiMgTmV3IHJlcG9zaXRvcmllcyBzaG91bGQgYmUgYWRkZWQgaW4gdGhlaXIgb3duIGZ1bmN0aW9ucywgYW5kIGNhbGxlZCBoZXJlCiMgYXJnczoKIyAxKSB3YWl0X3RpbWUgLSBuYW1lcmVmLCBpbnRlZ2VyOyBUaW1lIHRvIHdhaXQgYmVmb3JlIHJldHJ5aW5nIGNvbW1hbmQKIyAyKSByZXRyaWVzIC0gaW50ZWdlciwgb3B0aW9uYWw7IEFtb3VudCBvZiB0aW1lcyB0byByZXRyeSBjb21tYW5kLCBkZWZhdWx0cyB0byA1CmNvbmZpZ3VyZV9ycG1fcmVwb3MoKSB7CiAgICBsb2cgInN0YXJ0aW5nIgoKICAgIGNvbmZpZ3VyZV9yZXBvX21hcmluZXJfZXh0ZW5kZWQgIiQxIiAiJHsyOi0xfSIKfQoKIyBkbmZfaW5zdGFsbF9wa2dzCiMgYXJnczoKIyAxKSBwa2dzIC0gbmFtZXJlZiwgc3RyaW5nIGFycmF5OyBQYWNrYWdlcyB0byBiZSBpbnN0YWxsZWQKIyAyKSB3YWl0X3RpbWUgLSBuYW1lcmVmLCBpbnRlZ2VyOyBUaW1lIHRvIHdhaXQgYmVmb3JlIHJldHJ5aW5nIGNvbW1hbmQKIyAzKSByZXRyaWVzIC0gaW50ZWdlciwgb3B0aW9uYWw7IEFtb3VudCBvZiB0aW1lcyB0byByZXRyeSBjb21tYW5kLCBkZWZhdWx0cyB0byA1CmRuZl9pbnN0YWxsX3BrZ3MoKSB7CiAgICBsb2NhbCAtbiBwa2dzPSIkMSIKICAgIGxvZyAic3RhcnRpbmciCgogICAgbG9jYWwgLWEgY21kPSgKICAgICAgICBkbmYKICAgICAgICAteQogICAgICAgIGluc3RhbGwKICAgICkKICAgIAogICAgIyBSZWZlcmVuY2U6IGh0dHBzOi8vd3d3LnNoZWxsY2hlY2submV0L3dpa2kvU0MyMjA2CiAgICAjIGFwcGVuZCBwa2dzIGFycmF5IHRvIGNtZAogICAgbWFwZmlsZSAtTyAkKCggJHsjY21kW0BdfSArIDEgKSkgLWQgJyAnIGNtZCA8PDwgIiR7cGtnc1tAXX0iCiAgICBsb2NhbCAtciBjbWQKCiAgICBsb2cgIkF0dGVtcHRpbmcgdG8gaW5zdGFsbCBwYWNrYWdlczogJHtwa2dzWypdfSIKICAgIHJldHJ5IGNtZCAiJDIiICIkezM6LX0iCn0KCgojIGRuZl91cGRhdGVfcGtncwojIGFyZ3M6CiMgMSkgZXhjbHVkZXMgLSBuYW1lcmVmLCBzdHJpbmcgYXJyYXksIG9wdGlvbmFsOyBQYWNrYWdlcyB0byBleGNsdWRlIGZyb20gdXBkYXRpbmcKIyAgICAgICBFYWNoIGluZGV4IG11c3QgYmUgcHJlZml4ZWQgd2l0aCAteCAKIyAyKSB3YWl0X3RpbWUgLSBuYW1lcmVmLCBpbnRlZ2VyOyBUaW1lIHRvIHdhaXQgYmVmb3JlIHJldHJ5aW5nIGNvbW1hbmQKIyAzKSByZXRyaWVzIC0gaW50ZWdlciwgb3B0aW9uYWw7IEFtbW91bnQgb2YgdGltZXMgdG8gcmV0cnkgY29tbWFuZCwgZGVmYXVsdHMgdG8gNQpkbmZfdXBkYXRlX3BrZ3MoKSB7CiAgICBsb2NhbCAtbiBleGNsdWRlcz0iJHsxOi1lbXB0eV9zdHJ9IgogICAgbG9nICJzdGFydGluZyIKCiAgICBsb2NhbCAtYSBjbWQ9KAogICAgICAgIGRuZgogICAgICAgIC15CiAgICAgICAgIyBSZXBsYWNlZCB3aXRoIGV4Y2x1ZGVzCiAgICAgICAgIiIKICAgICAgICB1cGRhdGUKICAgICAgICAtLWFsbG93ZXJhc2luZwogICAgKQoKICAgIGlmIFsgLW4gIiR7ZXhjbHVkZXN9IiBdOyB0aGVuCiAgICAgICAgIyBSZWZlcmVuY2UgaHR0cHM6Ly93d3cuc2hlbGxjaGVjay5uZXQvd2lraS9TQzIyMDYKICAgICAgICBtYXBmaWxlIC1PIDIgY21kIDw8PCAiJHtleGNsdWRlc1tAXX0iCiAgICBlbHNlCiAgICAgICAgIyBSZW1vdmUgZW1wdHkgc3RyaW5nIGlmIHdlIGFyZW4ndCByZXBsYWNpbmcgdGhlbSwgcHJvYmFibHkgZG9lc24ndCBtYXR0ZXIsIGJ1dCB3aHkgbm90IGJlIHNhZmUKICAgICAgICB1bnNldCAiY21kWzJdIgogICAgZmkKICAgIGxvY2FsIC1yIGNtZAoKICAgIGxvZyAiVXBkYXRpbmcgYWxsIHBhY2thZ2VzIGV4Y2x1ZGluZyBcIiR7ZXhjbHVkZXNbKl06LX1cIiIKICAgIHJldHJ5IGNtZCAiJDIiICIkezM6LX0iCn0KCiMgcnBtX2ltcG9ydF9rZXlzCiMgYXJnczoKIyAxKSBrZXlzIC0gbmFtZXJlZiwgc3RyaW5nIGFycmF5OyBycG0ga2V5cyB0byBiZSBpbXBvcnRlZAojIDIpIHdhaXRfdGltZSAtIG5hbWVyZWYsIGludGVnZXI7IFRpbWUgdG8gd2FpdCBiZWZvcmUgcmV0cnlpbmcgY29tbWFuZApycG1faW1wb3J0X2tleXMoKSB7CiAgICBsb2NhbCAtbiBrZXlzPSIkMSIKICAgIGxvZyAic3RhcnRpbmciCgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDY4CiAgICBmb3Iga2V5IGluICR7a2V5c1tAXX07IGRvCiAgICAgICAgaWYgWyAkeyNrZXlzW0BdfSAtZXEgMCBdOyB0aGVuCiAgICAgICAgICAgIGJyZWFrCiAgICAgICAgZmkKCiAgICAgICAgbG9jYWwgLWEgY21kPSgKICAgICAgICAgICAgcnBtCiAgICAgICAgICAgIC0taW1wb3J0CiAgICAgICAgICAgIC12CiAgICAgICAgICAgICIka2V5IgogICAgICAgICkKCiAgICAgICAgbG9nICJJbXBvcnRpbmcgcnBtIHJlcG9zaXRvcnkga2V5ICRrZXkiCiAgICAgICAgcmV0cnkgY21kICIkMiIgIiR7MzotfSIgJiYgdW5zZXQga2V5CiAgICBkb25lCn0KCiMgdXRpbC1jb21tb24uc2ggZG9lcyBub3QgZXhpc3Qgd2hlbiBkZXBsb3llZCB0byBWTVNTIHZpYSBWTVNTIGV4dGVuc2lvbnMKIyBQcm92aWRlcyBzaGVsbGNoZWNrIGRlZmluaXRpb25zCnV0aWxfY29tbW9uPSJ1dGlsLWNvbW1vbi5zaCIKaWYgWyAtZiAiJHV0aWxfY29tbW9uIiBdOyB0aGVuCiAgICAjIHNoZWxsY2hlY2sgc291cmNlPXV0aWwtY29tbW9uLnNoCiAgICBzb3VyY2UgIiR1dGlsX2NvbW1vbiIKZmkKIyEvYmluL2Jhc2gKIyBBUk8gc2VydmljZSBzZXR1cCBmdW5jdGlvbnMKCiMgZW5hYmxlX3NlcnZpY2VzIGVuYWJsZXMgdGhlIHN5c3RlbWQgc2VydmljZXMgdGhhdCBhcmUgcGFzc2VkIGluCiMgYXJnczoKIyAxKSBzZXJ2aWNlcyAtIGFycmF5OyBzZXJ2aWNlcyB0byBiZSBlbmFibGVkCmVuYWJsZV9zZXJ2aWNlcygpIHsKICAgIGxvY2FsIC1uIHN2Y3M9IiQxIgogICAgbG9nICJzdGFydGluZyIKCiAgICBzeXN0ZW1jdGwgZGFlbW9uLXJlbG9hZAoKICAgIGxvZyAiZW5hYmxpbmcgc2VydmljZXMgJHtzdmNzWypdfSIKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjA2OAogICAgZm9yIHN2YyBpbiAke3N2Y3NbQF19OyBkbwogICAgICAgIGxvZyAiRW5hYmxpbmcgYW5kIHN0YXJ0aW5nICRzdmMgbm93IgogICAgICAgIHN5c3RlbWN0bCBlbmFibGUgXAogICAgICAgICAgICAgICAgICAtLW5vdyBcCiAgICAgICAgICAgICAgICAgICIkc3ZjIgogICAgZG9uZQp9CgojIGNvbmZpZ3VyZV9zZXJ2aWNlX2Fyb19nYXRld2F5CiMgYXJnczoKIyAxKSBpbWFnZSAtIG5hbWVyZWYsIHN0cmluZzsgY29udGFpbmVyIGltYWdlCiMgMikgcm9sZSAtIG5hbWVyZWYsIHN0cmluZzsgVk1TUyByb2xlCiMgMykgY29uZl9maWxlIC0gbmFtZXJlZiwgc3RyaW5nOyBhcm8gZ2F0ZXdheSBlbnZpcm9ubWVudCBmaWxlCiMgNCkgaXBhZGRyZXNzIC0gbmFtZXJlZiwgc3RyaW5nOyBzdGF0aWMgaXAgb2YgcG9kbWFuIG5ldHdvcmsgdG8gYmUgYXR0YWNoZWQKY29uZmlndXJlX3NlcnZpY2VfYXJvX2dhdGV3YXkoKSB7CiAgICBsb2NhbCAtbiBpbWFnZT0iJDEiCiAgICBsb2NhbCAtbiByb2xlPSIkMiIKICAgIGxvY2FsIC1uIGNvbmZfZmlsZT0iJDMiCiAgICBsb2NhbCAtbiBpcGFkZHJlc3M9IiQ0IgogICAgbG9nICJzdGFydGluZyIKICAgIGxvZyAiQ29uZmlndXJpbmcgYXJvLWdhdGV3YXkgc2VydmljZSIKCiAgICBsb2NhbCAtciBhcm9fZ2F0ZXdheV9jb25mX2ZpbGVuYW1lPScvZXRjL3N5c2NvbmZpZy9hcm8tZ2F0ZXdheScKICAgIGxvY2FsIC1yIGFkZF9jb25mX2ZpbGU9IlBPRE1BTl9ORVRXT1JLPSdwb2RtYW4nCklQQUREUkVTUz0nJGlwYWRkcmVzcycKUk9MRT0nJHtyb2xlLCx9JwpBUk9fTE9HX0xFVkVMPSckR0FURVdBWUxPR0xFVkVMJyIKCiAgICB3cml0ZV9maWxlIGFyb19nYXRld2F5X2NvbmZfZmlsZW5hbWUgY29uZl9maWxlIHRydWUKICAgIHdyaXRlX2ZpbGUgYXJvX2dhdGV3YXlfY29uZl9maWxlbmFtZSBhZGRfY29uZl9maWxlIGZhbHNlCgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciBhcm9fZ2F0ZXdheV9zZXJ2aWNlX2ZpbGVuYW1lPScvZXRjL3N5c3RlbWQvc3lzdGVtL2Fyby1nYXRld2F5LnNlcnZpY2UnCgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICAjIGJlbG93IHZhcmlhYmxlIGlzIGluIHNpbmdsZSBxdW90ZXMKICAgICMgYXMgaXQgaXMgdG8gYmUgZXhwYW5kZWQgYXQgc3lzdGVtZCBzdGFydCB0aW1lIChieSBzeXN0ZW1kLCBub3QgdGhpcyBzY3JpcHQpCiAgICBsb2NhbCAtciBhcm9fZ2F0ZXdheV9zZXJ2aWNlX2ZpbGU9J1tVbml0XQpBZnRlcj1uZXR3b3JrLW9ubGluZS50YXJnZXQKV2FudHM9bmV0d29yay1vbmxpbmUudGFyZ2V0CgpbU2VydmljZV0KRW52aXJvbm1lbnRGaWxlPS9ldGMvc3lzY29uZmlnL2Fyby1nYXRld2F5CkV4ZWNTdGFydFByZT0tL3Vzci9iaW4vcG9kbWFuIHJtIC1mICVOCkV4ZWNTdGFydD0vdXNyL2Jpbi9wb2RtYW4gcnVuIFwKICAtLWhvc3RuYW1lICVIIFwKICAtLW5hbWUgJU4gXAogIC0tcm0gXAogIC0tY2FwLWRyb3AgbmV0X3JhdyBcCiAgLWUgQUNSX1JFU09VUkNFX0lEIFwKICAtZSBEQVRBQkFTRV9BQ0NPVU5UX05BTUUgXAogIC1lIEdBVEVXQVlfRE9NQUlOUyBcCiAgLWUgR0FURVdBWV9GRUFUVVJFUyBcCiAgLWUgTURNX0FDQ09VTlQgXAogIC1lIE1ETV9OQU1FU1BBQ0UgXAogIC1lIEFST19MT0dfTEVWRUwgXAogIC1tIDJnIFwKICAtLW5ldHdvcms9JHtQT0RNQU5fTkVUV09SS30gXAogIC0taXAgJHtJUEFERFJFU1N9IFwKICAtcCA4MDo4MDgwIFwKICAtcCA4MDgxOjgwODEgXAogIC1wIDQ0Mzo4NDQzIFwKICAtdiAvcnVuL3N5c3RlbWQvam91cm5hbDovcnVuL3N5c3RlbWQvam91cm5hbCBcCiAgLXYgL3Zhci9ldHc6L3Zhci9ldHc6eiBcCiAgJHtSUElNQUdFfSBcCiAgJHtST0xFfQpFeGVjU3RvcD0vdXNyL2Jpbi9wb2RtYW4gc3RvcCAtdCAzNjAwICVOClRpbWVvdXRTdG9wU2VjPTM2MDAKUmVzdGFydD1hbHdheXMKUmVzdGFydFNlYz0xClN0YXJ0TGltaXRJbnRlcnZhbD0wCgpbSW5zdGFsbF0KV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQKICAgICcKCiAgICB3cml0ZV9maWxlIGFyb19nYXRld2F5X3NlcnZpY2VfZmlsZW5hbWUgYXJvX2dhdGV3YXlfc2VydmljZV9maWxlIHRydWUKfQoKIyBjb25maWd1cmVfc2VydmljZV9hcm9fcnAKIyBhcmdzOgojIDEpIGltYWdlIC0gbmFtZXJlZiwgc3RyaW5nOyBSUCBjb250YWluZXIgaW1hZ2UKIyAyKSByb2xlIC0gbmFtZXJlZiwgc3RyaW5nOyBWTVNTIHJvbGUKIyAzKSBjb25mX2ZpbGUgLSBuYW1lcmVmLCBzdHJpbmc7IGFybyBycCBlbnZpcm9ubWVudCBmaWxlCiMgNCkgaXBhZGRyZXNzIC0gbmFtZXJlZiwgc3RyaW5nOyBzdGF0aWMgaXAgb2YgcG9kbWFuIG5ldHdvcmsgdG8gYmUgYXR0YWNoZWQKY29uZmlndXJlX3NlcnZpY2VfYXJvX3JwKCkgewogICAgbG9jYWwgLW4gaW1hZ2U9IiQxIgogICAgbG9jYWwgLW4gcm9sZT0iJDIiCiAgICBsb2NhbCAtbiBjb25mX2ZpbGU9IiQzIgogICAgbG9jYWwgLW4gaXBhZGRyZXNzPSIkNCIKICAgIGxvZyAic3RhcnRpbmciCiAgICBsb2cgIkNvbmZpZ3VyaW5nIGFyby1ycCBzZXJ2aWNlIgoKICAgIGxvY2FsIC1yIGFyb19ycF9jb25mX2ZpbGVuYW1lPScvZXRjL3N5c2NvbmZpZy9hcm8tcnAnCiAgICBsb2NhbCAtciBhZGRfY29uZl9maWxlPSJQT0RNQU5fTkVUV09SSz0ncG9kbWFuJwpJUEFERFJFU1M9JyRpcGFkZHJlc3MnClJPTEU9JyR7cm9sZSwsfScKQVJPX0xPR19MRVZFTD0nJFJQTE9HTEVWRUwnIgoKICAgIHdyaXRlX2ZpbGUgYXJvX3JwX2NvbmZfZmlsZW5hbWUgY29uZl9maWxlIHRydWUKICAgIHdyaXRlX2ZpbGUgYXJvX3JwX2NvbmZfZmlsZW5hbWUgYWRkX2NvbmZfZmlsZSBmYWxzZQoKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgYXJvX3JwX3NlcnZpY2VfZmlsZW5hbWU9Jy9ldGMvc3lzdGVtZC9zeXN0ZW0vYXJvLXJwLnNlcnZpY2UnCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgICMgYmVsb3cgdmFyaWFibGUgaXMgaW4gc2luZ2xlIHF1b3RlcwogICAgIyBhcyBpdCBpcyB0byBiZSBleHBhbmRlZCBhdCBzeXN0ZW1kIHN0YXJ0IHRpbWUgKGJ5IHN5c3RlbWQsIG5vdCB0aGlzIHNjcmlwdCkKICAgIGxvY2FsIC1yIGFyb19ycF9zZXJ2aWNlX2ZpbGU9J1tVbml0XQpBZnRlcj1uZXR3b3JrLW9ubGluZS50YXJnZXQKV2FudHM9bmV0d29yay1vbmxpbmUudGFyZ2V0CgpbU2VydmljZV0KRW52aXJvbm1lbnRGaWxlPS9ldGMvc3lzY29uZmlnL2Fyby1ycApFeGVjU3RhcnRQcmU9LS91c3IvYmluL3BvZG1hbiBybSAtZiAlTgpFeGVjU3RhcnQ9L3Vzci9iaW4vcG9kbWFuIHJ1biBcCiAgLS1ob3N0bmFtZSAlSCBcCiAgLS1uYW1lICVOIFwKICAtLXJtIFwKICAtLWNhcC1kcm9wIG5ldF9yYXcgXAogIC1lIEFDUl9SRVNPVVJDRV9JRCBcCiAgLWUgQURNSU5fQVBJX0NMSUVOVF9DRVJUX0NPTU1PTl9OQU1FIFwKICAtZSBBUk1fQVBJX0NMSUVOVF9DRVJUX0NPTU1PTl9OQU1FIFwKICAtZSBBWlVSRV9BUk1fQ0xJRU5UX0lEIFwKICAtZSBBWlVSRV9GUF9DTElFTlRfSUQgXAogIC1lIENMVVNURVJfTURNX0FDQ09VTlQgXAogIC1lIENMVVNURVJfTURNX05BTUVTUEFDRSBcCiAgLWUgQ0xVU1RFUl9NRFNEX0FDQ09VTlQgXAogIC1lIENMVVNURVJfTURTRF9DT05GSUdfVkVSU0lPTiBcCiAgLWUgQ0xVU1RFUl9NRFNEX05BTUVTUEFDRSBcCiAgLWUgREFUQUJBU0VfQUNDT1VOVF9OQU1FIFwKICAtZSBET01BSU5fTkFNRSBcCiAgLWUgR0FURVdBWV9ET01BSU5TIFwKICAtZSBHQVRFV0FZX1JFU09VUkNFR1JPVVAgXAogIC1lIEtFWVZBVUxUX1BSRUZJWCBcCiAgLWUgTURNX0FDQ09VTlQgXAogIC1lIE1ETV9OQU1FU1BBQ0UgXAogIC1lIE1EU0RfRU5WSVJPTk1FTlQgXAogIC1lIFJQX0ZFQVRVUkVTIFwKICAtZSBBUk9fSU5TVEFMTF9WSUFfSElWRSBcCiAgLWUgQVJPX0hJVkVfREVGQVVMVF9JTlNUQUxMRVJfUFVMTFNQRUMgXAogIC1lIEFST19BRE9QVF9CWV9ISVZFIFwKICAtZSBPSURDX0FGRF9FTkRQT0lOVCBcCiAgLWUgT0lEQ19TVE9SQUdFX0FDQ09VTlRfTkFNRSBcCiAgLWUgTVNJX1JQX0VORFBPSU5UIFwKICAtZSBPVEVMX0FVRElUX1FVRVVFX1NJWkUgXAogIC1lIE1JU0VfQUREUkVTUyBcCiAgLWUgQVJPX0xPR19MRVZFTCBcCiAgLW0gMmcgXAogIC0tbmV0d29yaz0ke1BPRE1BTl9ORVRXT1JLfSBcCiAgLS1pcCAke0lQQUREUkVTU30gXAogIC1wIDQ0Mzo4NDQzIFwKICAtdiAvZXRjL2Fyby1ycDovZXRjL2Fyby1ycCBcCiAgLXYgL3J1bi9zeXN0ZW1kL2pvdXJuYWw6L3J1bi9zeXN0ZW1kL2pvdXJuYWwgXAogIC12IC92YXIvZXR3Oi92YXIvZXR3OnogXAogIC12IC92YXIvcnVuL21kc2QvYXNhOi92YXIvcnVuL21kc2QvYXNhOnogXAogICR7UlBJTUFHRX0gXAogICR7Uk9MRX0KRXhlY1N0b3A9L3Vzci9iaW4vcG9kbWFuIHN0b3AgLXQgMzYwMCAlTgpUaW1lb3V0U3RvcFNlYz0zNjAwClJlc3RhcnQ9YWx3YXlzClJlc3RhcnRTZWM9MQpTdGFydExpbWl0SW50ZXJ2YWw9MAoKW0luc3RhbGxdCldhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0JwoKICAgIHdyaXRlX2ZpbGUgYXJvX3JwX3NlcnZpY2VfZmlsZW5hbWUgYXJvX3JwX3NlcnZpY2VfZmlsZSB0cnVlCn0KCiMgY29uZmlndXJlX3NlcnZpY2VfYXJvX21vbml0b3IKIyBhcmdzOgojIDEpIGltYWdlIC0gbmFtZXJlZiwgc3RyaW5nOyBSUCBjb250YWluZXIgaW1hZ2UKIyAyKSBpcGFkZHJlc3MgLSBuYW1lcmVmLCBzdHJpbmc7IHN0YXRpYyBpcCBvZiBwb2RtYW4gbmV0d29yayB0byBiZSBhdHRhY2hlZApjb25maWd1cmVfc2VydmljZV9hcm9fbW9uaXRvcigpIHsKICAgIGxvY2FsIC1uIGltYWdlPSIkMSIKICAgIGxvY2FsIC1uIGlwYWRkcmVzcz0iJDIiCiAgICBsb2cgInN0YXJ0aW5nIgogICAgbG9nICJDb25maWd1cmluZyBhcm8tbW9uaXRvciBzZXJ2aWNlIgoKICAgICMgRE9NQUlOX05BTUUsIENMVVNURVJfTURTRF9BQ0NPVU5ULCBDTFVTVEVSX01EU0RfQ09ORklHX1ZFUlNJT04sIEdBVEVXQVlfRE9NQUlOUywgR0FURVdBWV9SRVNPVVJDRUdST1VQLCBNRFNEX0VOVklST05NRU5UIENMVVNURVJfTURTRF9OQU1FU1BBQ0UKICAgICMgYXJlIG5vdCB1c2VkLCBidXQgY2FuJ3QgZWFzaWx5IGJlIHJlZmFjdG9yZWQgb3V0LiBTaG91bGQgYmUgcmV2aXNpdGVkIGluIHRoZSBmdXR1cmUuCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIGFyb19tb25pdG9yX3NlcnZpY2VfY29uZl9maWxlbmFtZT0nL2V0Yy9zeXNjb25maWcvYXJvLW1vbml0b3InCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIGFyb19tb25pdG9yX3NlcnZpY2VfY29uZl9maWxlPSJBWlVSRV9GUF9DTElFTlRfSUQ9JyRGUENMSUVOVElEJwpET01BSU5fTkFNRT0nJExPQ0FUSU9OLiRDTFVTVEVSUEFSRU5URE9NQUlOTkFNRScKQ0xVU1RFUl9NRFNEX0FDQ09VTlQ9JyRDTFVTVEVSTURTREFDQ09VTlQnCkNMVVNURVJfTURTRF9DT05GSUdfVkVSU0lPTj0nJENMVVNURVJNRFNEQ09ORklHVkVSU0lPTicKR0FURVdBWV9ET01BSU5TPSckR0FURVdBWURPTUFJTlMnCkdBVEVXQVlfUkVTT1VSQ0VHUk9VUD0nJEdBVEVXQVlSRVNPVVJDRUdST1VQTkFNRScKTURTRF9FTlZJUk9OTUVOVD0nJE1EU0RFTlZJUk9OTUVOVCcKQ0xVU1RFUl9NRFNEX05BTUVTUEFDRT0nJENMVVNURVJNRFNETkFNRVNQQUNFJwpDTFVTVEVSX01ETV9BQ0NPVU5UPSckQ0xVU1RFUk1ETUFDQ09VTlQnCkNMVVNURVJfTURNX05BTUVTUEFDRT1CQk0KREFUQUJBU0VfQUNDT1VOVF9OQU1FPSckREFUQUJBU0VBQ0NPVU5UTkFNRScKS0VZVkFVTFRfUFJFRklYPSckS0VZVkFVTFRQUkVGSVgnCk1ETV9BQ0NPVU5UPSckUlBNRE1BQ0NPVU5UJwpNRE1fTkFNRVNQQUNFPUJCTQpSUElNQUdFPSckaW1hZ2UnClBPRE1BTl9ORVRXT1JLPSdwb2RtYW4nCklQQUREUkVTUz0nJGlwYWRkcmVzcycKQVJPX0lOU1RBTExfVklBX0hJVkU9JyRDTFVTVEVSU0lOU1RBTExWSUFISVZFJwpBUk9fSElWRV9ERUZBVUxUX0lOU1RBTExFUl9QVUxMU1BFQz0nJENMVVNURVJERUZBVUxUSU5TVEFMTEVSUFVMTFNQRUMnCkFST19BRE9QVF9CWV9ISVZFPSckQ0xVU1RFUlNBRE9QVEJZSElWRScKQVJPX0xPR19MRVZFTD0nJE1PTklUT1JMT0dMRVZFTCciCgogICAgd3JpdGVfZmlsZSBhcm9fbW9uaXRvcl9zZXJ2aWNlX2NvbmZfZmlsZW5hbWUgYXJvX21vbml0b3Jfc2VydmljZV9jb25mX2ZpbGUgdHJ1ZQoKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgYXJvX21vbml0b3Jfc2VydmljZV9maWxlbmFtZT0nL2V0Yy9zeXN0ZW1kL3N5c3RlbS9hcm8tbW9uaXRvci5zZXJ2aWNlJwogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICAjIGJlbG93IHZhcmlhYmxlIGlzIGluIHNpbmdsZSBxdW90ZXMKICAgICMgYXMgaXQgaXMgdG8gYmUgZXhwYW5kZWQgYXQgc3lzdGVtZCBzdGFydCB0aW1lIChieSBzeXN0ZW1kLCBub3QgdGhpcyBzY3JpcHQpCiAgICBsb2NhbCAtciBhcm9fbW9uaXRvcl9zZXJ2aWNlX2ZpbGU9J1tVbml0XQpBZnRlcj1uZXR3b3JrLW9ubGluZS50YXJnZXQKV2FudHM9bmV0d29yay1vbmxpbmUudGFyZ2V0CgpbU2VydmljZV0KRW52aXJvbm1lbnRGaWxlPS9ldGMvc3lzY29uZmlnL2Fyby1tb25pdG9yCkV4ZWNTdGFydFByZT0tL3Vzci9iaW4vcG9kbWFuIHJtIC1mICVOCkV4ZWNTdGFydD0vdXNyL2Jpbi9wb2RtYW4gcnVuIFwKICAtLWhvc3RuYW1lICVIIFwKICAtLW5hbWUgJU4gXAogIC0tcm0gXAogIC0tY2FwLWRyb3AgbmV0X3JhdyBcCiAgLS1uZXR3b3JrPSR7UE9ETUFOX05FVFdPUkt9IFwKICAtLWlwICR7SVBBRERSRVNTfSBcCiAgLWUgQVpVUkVfRlBfQ0xJRU5UX0lEIFwKICAtZSBET01BSU5fTkFNRSBcCiAgLWUgQ0xVU1RFUl9NRFNEX0FDQ09VTlQgXAogIC1lIENMVVNURVJfTURTRF9DT05GSUdfVkVSU0lPTiBcCiAgLWUgR0FURVdBWV9ET01BSU5TIFwKICAtZSBHQVRFV0FZX1JFU09VUkNFR1JPVVAgXAogIC1lIE1EU0RfRU5WSVJPTk1FTlQgXAogIC1lIENMVVNURVJfTURTRF9OQU1FU1BBQ0UgXAogIC1lIENMVVNURVJfTURNX0FDQ09VTlQgXAogIC1lIENMVVNURVJfTURNX05BTUVTUEFDRSBcCiAgLWUgREFUQUJBU0VfQUNDT1VOVF9OQU1FIFwKICAtZSBLRVlWQVVMVF9QUkVGSVggXAogIC1lIE1ETV9BQ0NPVU5UIFwKICAtZSBNRE1fTkFNRVNQQUNFIFwKICAtZSBBUk9fSU5TVEFMTF9WSUFfSElWRSBcCiAgLWUgQVJPX0hJVkVfREVGQVVMVF9JTlNUQUxMRVJfUFVMTFNQRUMgXAogIC1lIEFST19BRE9QVF9CWV9ISVZFIFwKICAtZSBBUk9fTE9HX0xFVkVMIFwKICAtbSAyLjVnIFwKICAtdiAvcnVuL3N5c3RlbWQvam91cm5hbDovcnVuL3N5c3RlbWQvam91cm5hbCBcCiAgLXYgL3Zhci9ldHc6L3Zhci9ldHc6eiBcCiAgJHtSUElNQUdFfSBcCiAgbW9uaXRvcgpSZXN0YXJ0PWFsd2F5cwpSZXN0YXJ0U2VjPTEKU3RhcnRMaW1pdEludGVydmFsPTAKCltJbnN0YWxsXQpXYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldCcKCiAgICB3cml0ZV9maWxlIGFyb19tb25pdG9yX3NlcnZpY2VfZmlsZW5hbWUgYXJvX21vbml0b3Jfc2VydmljZV9maWxlIHRydWUKfQoKIyBjb25maWd1cmVfc2VydmljZV9hcm9fcG9ydGFsCiMgYXJnczoKIyAxKSBpbWFnZSAtIG5hbWVyZWYsIHN0cmluZzsgUlAgY29udGFpbmVyIGltYWdlCiMgMikgaXBhZGRyZXNzIC0gbmFtZXJlZiwgc3RyaW5nOyBzdGF0aWMgaXAgb2YgcG9kbWFuIG5ldHdvcmsgdG8gYmUgYXR0YWNoZWQKY29uZmlndXJlX3NlcnZpY2VfYXJvX3BvcnRhbCgpIHsKICAgIGxvY2FsIC1uIGltYWdlPSIkMSIKICAgIGxvY2FsIC1uIGlwYWRkcmVzcz0iJDIiCiAgICBsb2cgInN0YXJ0aW5nIgogICAgbG9nICJDb25maWd1cmluZyBhcm8gcG9ydGFsIHNlcnZpY2UiCgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciBhcm9fcG9ydGFsX3NlcnZpY2VfY29uZl9maWxlbmFtZT0nL2V0Yy9zeXNjb25maWcvYXJvLXBvcnRhbCcKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgYXJvX3BvcnRhbF9zZXJ2aWNlX2NvbmZfZmlsZT0iQVpVUkVfUE9SVEFMX0FDQ0VTU19HUk9VUF9JRFM9JyRQT1JUQUxBQ0NFU1NHUk9VUElEUycKQVpVUkVfUE9SVEFMX0NMSUVOVF9JRD0nJFBPUlRBTENMSUVOVElEJwpBWlVSRV9QT1JUQUxfRUxFVkFURURfR1JPVVBfSURTPSckUE9SVEFMRUxFVkFURURHUk9VUElEUycKREFUQUJBU0VfQUNDT1VOVF9OQU1FPSckREFUQUJBU0VBQ0NPVU5UTkFNRScKS0VZVkFVTFRfUFJFRklYPSckS0VZVkFVTFRQUkVGSVgnCk1ETV9BQ0NPVU5UPSckUlBNRE1BQ0NPVU5UJwpNRE1fTkFNRVNQQUNFPVBvcnRhbApQT1JUQUxfSE9TVE5BTUU9JyRMT0NBVElPTi5hZG1pbi4kUlBQQVJFTlRET01BSU5OQU1FJwpPVEVMX0FVRElUX1FVRVVFX1NJWkU9JyRPVEVMQVVESVRRVUVVRVNJWkUnClJQSU1BR0U9JyRpbWFnZScKUE9ETUFOX05FVFdPUks9J3BvZG1hbicKSVBBRERSRVNTPSckaXBhZGRyZXNzJwpBUk9fTE9HX0xFVkVMPSckUE9SVEFMTE9HTEVWRUwnIgoKICAgIHdyaXRlX2ZpbGUgYXJvX3BvcnRhbF9zZXJ2aWNlX2NvbmZfZmlsZW5hbWUgYXJvX3BvcnRhbF9zZXJ2aWNlX2NvbmZfZmlsZSB0cnVlCgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciBhcm9fcG9ydGFsX3NlcnZpY2VfZmlsZW5hbWU9Jy9ldGMvc3lzdGVtZC9zeXN0ZW0vYXJvLXBvcnRhbC5zZXJ2aWNlJwogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICAjIGJlbG93IHZhcmlhYmxlIGlzIGluIHNpbmdsZSBxdW90ZXMKICAgICMgYXMgaXQgaXMgdG8gYmUgZXhwYW5kZWQgYXQgc3lzdGVtZCBzdGFydCB0aW1lIChieSBzeXN0ZW1kLCBub3QgdGhpcyBzY3JpcHQpCiAgICBsb2NhbCAtciBhcm9fcG9ydGFsX3NlcnZpY2VfZmlsZT0nW1VuaXRdCkFmdGVyPW5ldHdvcmstb25saW5lLnRhcmdldApXYW50cz1uZXR3b3JrLW9ubGluZS50YXJnZXQKU3RhcnRMaW1pdEludGVydmFsPTAKCltTZXJ2aWNlXQpFbnZpcm9ubWVudEZpbGU9L2V0Yy9zeXNjb25maWcvYXJvLXBvcnRhbApFeGVjU3RhcnRQcmU9LS91c3IvYmluL3BvZG1hbiBybSAtZiAlTgpFeGVjU3RhcnQ9L3Vzci9iaW4vcG9kbWFuIHJ1biBcCiAgLS1ob3N0bmFtZSAlSCBcCiAgLS1uYW1lICVOIFwKICAtLXJtIFwKICAtLWNhcC1kcm9wIG5ldF9yYXcgXAogIC0tbmV0d29yaz0ke1BPRE1BTl9ORVRXT1JLfSBcCiAgLS1pcCAke0lQQUREUkVTU30gXAogIC1lIEFaVVJFX1BPUlRBTF9BQ0NFU1NfR1JPVVBfSURTIFwKICAtZSBBWlVSRV9QT1JUQUxfQ0xJRU5UX0lEIFwKICAtZSBBWlVSRV9QT1JUQUxfRUxFVkFURURfR1JPVVBfSURTIFwKICAtZSBEQVRBQkFTRV9BQ0NPVU5UX05BTUUgXAogIC1lIEtFWVZBVUxUX1BSRUZJWCBcCiAgLWUgTURNX0FDQ09VTlQgXAogIC1lIE1ETV9OQU1FU1BBQ0UgXAogIC1lIFBPUlRBTF9IT1NUTkFNRSBcCiAgLWUgT1RFTF9BVURJVF9RVUVVRV9TSVpFIFwKICAtZSBBUk9fTE9HX0xFVkVMIFwKICAtbSAyZyBcCiAgLXAgNDQ0Ojg0NDQgXAogIC1wIDIyMjI6MjIyMiBcCiAgLXYgL3J1bi9zeXN0ZW1kL2pvdXJuYWw6L3J1bi9zeXN0ZW1kL2pvdXJuYWwgXAogIC12IC92YXIvZXR3Oi92YXIvZXR3OnogXAogIC12IC92YXIvcnVuL21kc2QvYXNhOi92YXIvcnVuL21kc2QvYXNhOnogXAogICR7UlBJTUFHRX0gXAogIHBvcnRhbApSZXN0YXJ0PWFsd2F5cwpSZXN0YXJ0U2VjPTEKCltJbnN0YWxsXQpXYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldCcKCiAgICB3cml0ZV9maWxlIGFyb19wb3J0YWxfc2VydmljZV9maWxlbmFtZSBhcm9fcG9ydGFsX3NlcnZpY2VfZmlsZSB0cnVlCn0KCiMgY29uZmlndXJlX3NlcnZpY2VfYXJvX21pbW9fYWN0dWF0b3IKIyBhcmdzOgojIDEpIGltYWdlIC0gbmFtZXJlZiwgc3RyaW5nOyBSUCBjb250YWluZXIgaW1hZ2UKIyAyKSBjb25mX2ZpbGUgLSBuYW1lcmVmLCBzdHJpbmc7IGFybyBycCBlbnZpcm9ubWVudCBmaWxlCiMgMykgaXBhZGRyZXNzIC0gbmFtZXJlZiwgc3RyaW5nOyBzdGF0aWMgaXAgb2YgcG9kbWFuIG5ldHdvcmsgdG8gYmUgYXR0YWNoZWQKY29uZmlndXJlX3NlcnZpY2VfYXJvX21pbW9fYWN0dWF0b3IoKSB7CiAgICBsb2NhbCAtbiBpbWFnZT0iJDEiCiAgICBsb2NhbCAtbiBjb25mX2ZpbGU9IiQyIgogICAgbG9jYWwgLW4gaXBhZGRyZXNzPSIkMyIKICAgIGxvZyAic3RhcnRpbmciCiAgICBsb2cgIkNvbmZpZ3VyaW5nIGFyby1taW1vLWFjdHVhdG9yIHNlcnZpY2UiCgogICAgbG9jYWwgLXIgYXJvX21pbW9fYWN0dWF0b3JfY29uZl9maWxlbmFtZT0nL2V0Yy9zeXNjb25maWcvYXJvLW1pbW8tYWN0dWF0b3InCiAgICBsb2NhbCAtciBhZGRfY29uZl9maWxlPSJQT0RNQU5fTkVUV09SSz0ncG9kbWFuJwpJUEFERFJFU1M9JyRpcGFkZHJlc3MnCkFST19MT0dfTEVWRUw9JyRNSU1PQUNUVUFUT1JMT0dMRVZFTCciCgogICAgd3JpdGVfZmlsZSBhcm9fbWltb19hY3R1YXRvcl9jb25mX2ZpbGVuYW1lIGNvbmZfZmlsZSB0cnVlCiAgICB3cml0ZV9maWxlIGFyb19taW1vX2FjdHVhdG9yX2NvbmZfZmlsZW5hbWUgYWRkX2NvbmZfZmlsZSBmYWxzZQoKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgYXJvX21pbW9fYWN0dWF0b3Jfc2VydmljZV9maWxlbmFtZT0nL2V0Yy9zeXN0ZW1kL3N5c3RlbS9hcm8tbWltby1hY3R1YXRvci5zZXJ2aWNlJwogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICAjIGJlbG93IHZhcmlhYmxlIGlzIGluIHNpbmdsZSBxdW90ZXMKICAgICMgYXMgaXQgaXMgdG8gYmUgZXhwYW5kZWQgYXQgc3lzdGVtZCBzdGFydCB0aW1lIChieSBzeXN0ZW1kLCBub3QgdGhpcyBzY3JpcHQpCiAgICBsb2NhbCAtciBhcm9fbWltb19hY3R1YXRvcl9zZXJ2aWNlX2ZpbGU9J1tVbml0XQpBZnRlcj1uZXR3b3JrLW9ubGluZS50YXJnZXQKV2FudHM9bmV0d29yay1vbmxpbmUudGFyZ2V0CgpbU2VydmljZV0KRW52aXJvbm1lbnRGaWxlPS9ldGMvc3lzY29uZmlnL2Fyby1taW1vLWFjdHVhdG9yCkV4ZWNTdGFydFByZT0tL3Vzci9iaW4vcG9kbWFuIHJtIC1mICVOCkV4ZWNTdGFydD0vdXNyL2Jpbi9wb2RtYW4gcnVuIFwKICAtLWhvc3RuYW1lICVIIFwKICAtLW5hbWUgJU4gXAogIC0tcm0gXAogIC0tY2FwLWRyb3AgbmV0X3JhdyBcCiAgLWUgQUNSX1JFU09VUkNFX0lEIFwKICAtZSBBRE1JTl9BUElfQ0xJRU5UX0NFUlRfQ09NTU9OX05BTUUgXAogIC1lIEFSTV9BUElfQ0xJRU5UX0NFUlRfQ09NTU9OX05BTUUgXAogIC1lIEFaVVJFX0FSTV9DTElFTlRfSUQgXAogIC1lIEFaVVJFX0ZQX0NMSUVOVF9JRCBcCiAgLWUgQ0xVU1RFUl9NRE1fQUNDT1VOVCBcCiAgLWUgQ0xVU1RFUl9NRE1fTkFNRVNQQUNFIFwKICAtZSBDTFVTVEVSX01EU0RfQUNDT1VOVCBcCiAgLWUgQ0xVU1RFUl9NRFNEX0NPTkZJR19WRVJTSU9OIFwKICAtZSBDTFVTVEVSX01EU0RfTkFNRVNQQUNFIFwKICAtZSBEQVRBQkFTRV9BQ0NPVU5UX05BTUUgXAogIC1lIERPTUFJTl9OQU1FIFwKICAtZSBHQVRFV0FZX0RPTUFJTlMgXAogIC1lIEdBVEVXQVlfUkVTT1VSQ0VHUk9VUCBcCiAgLWUgS0VZVkFVTFRfUFJFRklYIFwKICAtZSBNRE1fQUNDT1VOVCBcCiAgLWUgTURNX05BTUVTUEFDRSBcCiAgLWUgTURTRF9FTlZJUk9OTUVOVCBcCiAgLWUgUlBfRkVBVFVSRVMgXAogIC1lIEFST19JTlNUQUxMX1ZJQV9ISVZFIFwKICAtZSBBUk9fSElWRV9ERUZBVUxUX0lOU1RBTExFUl9QVUxMU1BFQyBcCiAgLWUgQVJPX0FET1BUX0JZX0hJVkUgXAogIC1lIE9JRENfQUZEX0VORFBPSU5UIFwKICAtZSBPSURDX1NUT1JBR0VfQUNDT1VOVF9OQU1FIFwKICAtZSBNU0lfUlBfRU5EUE9JTlQgXAogIC1lIEFST19MT0dfTEVWRUwgXAogIC1tIDJnIFwKICAtLW5ldHdvcms9JHtQT0RNQU5fTkVUV09SS30gXAogIC0taXAgJHtJUEFERFJFU1N9IFwKICAtcCA0NDU6ODQ0NSBcCiAgLXYgL2V0Yy9hcm8tcnA6L2V0Yy9hcm8tcnAgXAogIC12IC9ydW4vc3lzdGVtZC9qb3VybmFsOi9ydW4vc3lzdGVtZC9qb3VybmFsIFwKICAtdiAvdmFyL2V0dzovdmFyL2V0dzp6IFwKICAke1JQSU1BR0V9IFwKICBtaW1vLWFjdHVhdG9yCkV4ZWNTdG9wPS91c3IvYmluL3BvZG1hbiBzdG9wIC10IDM2MDAgJU4KVGltZW91dFN0b3BTZWM9MzYwMApSZXN0YXJ0PWFsd2F5cwpSZXN0YXJ0U2VjPTEKU3RhcnRMaW1pdEludGVydmFsPTAKCltJbnN0YWxsXQpXYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldCcKCiAgICB3cml0ZV9maWxlIGFyb19taW1vX2FjdHVhdG9yX3NlcnZpY2VfZmlsZW5hbWUgYXJvX21pbW9fYWN0dWF0b3Jfc2VydmljZV9maWxlIHRydWUKfQoKIyBjb25maWd1cmVfc2VydmljZV9hcm9fbWltb19zY2hlZHVsZXIKIyBhcmdzOgojIDEpIGltYWdlIC0gbmFtZXJlZiwgc3RyaW5nOyBSUCBjb250YWluZXIgaW1hZ2UKIyAyKSBjb25mX2ZpbGUgLSBuYW1lcmVmLCBzdHJpbmc7IGFybyBycCBlbnZpcm9ubWVudCBmaWxlCiMgMykgaXBhZGRyZXNzIC0gbmFtZXJlZiwgc3RyaW5nOyBzdGF0aWMgaXAgb2YgcG9kbWFuIG5ldHdvcmsgdG8gYmUgYXR0YWNoZWQKY29uZmlndXJlX3NlcnZpY2VfYXJvX21pbW9fc2NoZWR1bGVyKCkgewogICAgbG9jYWwgLW4gaW1hZ2U9IiQxIgogICAgbG9jYWwgLW4gY29uZl9maWxlPSIkMiIKICAgIGxvY2FsIC1uIGlwYWRkcmVzcz0iJDMiCiAgICBsb2cgInN0YXJ0aW5nIgogICAgbG9nICJDb25maWd1cmluZyBhcm8tbWltby1zY2hlZHVsZXIgc2VydmljZSIKCiAgICBsb2NhbCAtciBhcm9fbWltb19zY2hlZHVsZXJfY29uZl9maWxlbmFtZT0nL2V0Yy9zeXNjb25maWcvYXJvLW1pbW8tc2NoZWR1bGVyJwogICAgbG9jYWwgLXIgYWRkX2NvbmZfZmlsZT0iUE9ETUFOX05FVFdPUks9J3BvZG1hbicKSVBBRERSRVNTPSckaXBhZGRyZXNzJwpBUk9fTE9HX0xFVkVMPSckTUlNT1NDSEVEVUxFUkxPR0xFVkVMJyIKCiAgICB3cml0ZV9maWxlIGFyb19taW1vX3NjaGVkdWxlcl9jb25mX2ZpbGVuYW1lIGNvbmZfZmlsZSB0cnVlCiAgICB3cml0ZV9maWxlIGFyb19taW1vX3NjaGVkdWxlcl9jb25mX2ZpbGVuYW1lIGFkZF9jb25mX2ZpbGUgZmFsc2UKCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIGFyb19taW1vX3NjaGVkdWxlcl9zZXJ2aWNlX2ZpbGVuYW1lPScvZXRjL3N5c3RlbWQvc3lzdGVtL2Fyby1taW1vLXNjaGVkdWxlci5zZXJ2aWNlJwogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICAjIGJlbG93IHZhcmlhYmxlIGlzIGluIHNpbmdsZSBxdW90ZXMKICAgICMgYXMgaXQgaXMgdG8gYmUgZXhwYW5kZWQgYXQgc3lzdGVtZCBzdGFydCB0aW1lIChieSBzeXN0ZW1kLCBub3QgdGhpcyBzY3JpcHQpCiAgICBsb2NhbCAtciBhcm9fbWltb19zY2hlZHVsZXJfc2VydmljZV9maWxlPSdbVW5pdF0KQWZ0ZXI9bmV0d29yay1vbmxpbmUudGFyZ2V0CldhbnRzPW5ldHdvcmstb25saW5lLnRhcmdldAoKW1NlcnZpY2VdCkVudmlyb25tZW50RmlsZT0vZXRjL3N5c2NvbmZpZy9hcm8tbWltby1zY2hlZHVsZXIKRXhlY1N0YXJ0UHJlPS0vdXNyL2Jpbi9wb2RtYW4gcm0gLWYgJU4KRXhlY1N0YXJ0PS91c3IvYmluL3BvZG1hbiBydW4gXAogIC0taG9zdG5hbWUgJUggXAogIC0tbmFtZSAlTiBcCiAgLS1ybSBcCiAgLS1jYXAtZHJvcCBuZXRfcmF3IFwKICAtZSBBQ1JfUkVTT1VSQ0VfSUQgXAogIC1lIEFETUlOX0FQSV9DTElFTlRfQ0VSVF9DT01NT05fTkFNRSBcCiAgLWUgQVJNX0FQSV9DTElFTlRfQ0VSVF9DT01NT05fTkFNRSBcCiAgLWUgQVpVUkVfQVJNX0NMSUVOVF9JRCBcCiAgLWUgQVpVUkVfRlBfQ0xJRU5UX0lEIFwKICAtZSBDTFVTVEVSX01ETV9BQ0NPVU5UIFwKICAtZSBDTFVTVEVSX01ETV9OQU1FU1BBQ0UgXAogIC1lIENMVVNURVJfTURTRF9BQ0NPVU5UIFwKICAtZSBDTFVTVEVSX01EU0RfQ09ORklHX1ZFUlNJT04gXAogIC1lIENMVVNURVJfTURTRF9OQU1FU1BBQ0UgXAogIC1lIERBVEFCQVNFX0FDQ09VTlRfTkFNRSBcCiAgLWUgRE9NQUlOX05BTUUgXAogIC1lIEdBVEVXQVlfRE9NQUlOUyBcCiAgLWUgR0FURVdBWV9SRVNPVVJDRUdST1VQIFwKICAtZSBLRVlWQVVMVF9QUkVGSVggXAogIC1lIE1ETV9BQ0NPVU5UIFwKICAtZSBNRE1fTkFNRVNQQUNFIFwKICAtZSBNRFNEX0VOVklST05NRU5UIFwKICAtZSBSUF9GRUFUVVJFUyBcCiAgLWUgQVJPX0lOU1RBTExfVklBX0hJVkUgXAogIC1lIEFST19ISVZFX0RFRkFVTFRfSU5TVEFMTEVSX1BVTExTUEVDIFwKICAtZSBBUk9fQURPUFRfQllfSElWRSBcCiAgLWUgT0lEQ19BRkRfRU5EUE9JTlQgXAogIC1lIE9JRENfU1RPUkFHRV9BQ0NPVU5UX05BTUUgXAogIC1lIE1TSV9SUF9FTkRQT0lOVCBcCiAgLWUgQVJPX0xPR19MRVZFTCBcCiAgLW0gMmcgXAogIC0tbmV0d29yaz0ke1BPRE1BTl9ORVRXT1JLfSBcCiAgLS1pcCAke0lQQUREUkVTU30gXAogIC1wIDQ0Njo4NDQ2IFwKICAtdiAvZXRjL2Fyby1ycDovZXRjL2Fyby1ycCBcCiAgLXYgL3J1bi9zeXN0ZW1kL2pvdXJuYWw6L3J1bi9zeXN0ZW1kL2pvdXJuYWwgXAogIC12IC92YXIvZXR3Oi92YXIvZXR3OnogXAogICR7UlBJTUFHRX0gXAogIG1pbW8tc2NoZWR1bGVyCkV4ZWNTdG9wPS91c3IvYmluL3BvZG1hbiBzdG9wIC10IDM2MDAgJU4KVGltZW91dFN0b3BTZWM9MzYwMApSZXN0YXJ0PWFsd2F5cwpSZXN0YXJ0U2VjPTEKU3RhcnRMaW1pdEludGVydmFsPTAKCltJbnN0YWxsXQpXYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldCcKCiAgICB3cml0ZV9maWxlIGFyb19taW1vX3NjaGVkdWxlcl9zZXJ2aWNlX2ZpbGVuYW1lIGFyb19taW1vX3NjaGVkdWxlcl9zZXJ2aWNlX2ZpbGUgdHJ1ZQp9CgojIGNvbmZpZ3VyZV9zZXJ2aWNlX2Fyb19taXNlCiMgYXJnczoKIyAxKSBpbWFnZSAtIG5hbWVyZWYsIHN0cmluZzsgTUlTRSBjb250YWluZXIgaW1hZ2UKIyAyKSBpcGFkZHJlc3MgLSBuYW1lcmVmLCBzdHJpbmc7IHN0YXRpYyBpcCBvZiBwb2RtYW4gbmV0d29yayB0byBiZSBhdHRhY2hlZApjb25maWd1cmVfc2VydmljZV9hcm9fbWlzZSgpIHsKICAgIGxvY2FsIC1uIGltYWdlPSIkMSIKICAgIGxvY2FsIC1uIGlwYWRkcmVzcz0iJDIiCiAgICBsb2cgInN0YXJ0aW5nIgogICAgbG9nICJDb25maWd1cmluZyBhcm8tbWlzZSBzZXJ2aWNlIgoKICAgIExPR0lOSU5TVEFOQ0U9Imh0dHBzOi8vbG9naW4ubWljcm9zb2Z0b25saW5lLmNvbSIKICAgIGlmIFtbICRBWlVSRUNMT1VETkFNRSA9PSAiJHVzX2dvdl9jbG91ZCIgXV07IHRoZW4KICAgICAgICBMT0dJTklOU1RBTkNFPSJodHRwczovL2xvZ2luLm1pY3Jvc29mdG9ubGluZS51cyIKICAgIGZpCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIGFyb19taXNlX3NlcnZpY2VfY29uZl9maWxlbmFtZT0nL2V0Yy9zeXNjb25maWcvYXJvLW1pc2UnCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIGFyb19taXNlX3NlcnZpY2VfY29uZl9maWxlPSJGUENMSUVOVElEPSckRlBDTElFTlRJRCcKRlBURU5BTlRJRD0nJEZQVEVOQU5USUQnCk1JU0VJTUFHRT0nJGltYWdlJwpNSVNFVkFMSURBVURJRU5DRVM9JyRNSVNFVkFMSURBVURJRU5DRVMnCk1JU0VWQUxJREFQUElEUz0nJE1JU0VWQUxJREFQUElEUycKTE9HSU5JTlNUQU5DRT0nJExPR0lOSU5TVEFOQ0UnClBPRE1BTl9ORVRXT1JLPSdwb2RtYW4nCklQQUREUkVTUz0nJGlwYWRkcmVzcyciCgogICAgd3JpdGVfZmlsZSBhcm9fbWlzZV9zZXJ2aWNlX2NvbmZfZmlsZW5hbWUgYXJvX21pc2Vfc2VydmljZV9jb25mX2ZpbGUgdHJ1ZQoKICAgIG1rZGlyIC1wIC9hcHAvbWlzZQogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciBhcm9fbWlzZV9hcHBzZXR0aW5nc19maWxlbmFtZT0nL2FwcC9taXNlL2FwcHNldHRpbmdzLmpzb24nCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIGFyb19taXNlX2FwcHNldHRpbmdzX2ZpbGU9InsKICAgIFwiVmVyc2lvblwiOiBcIjFcIiwKICAgIFwiSGVhcnRiZWF0SW50ZXJ2YWxNc1wiOiA1MDAwLAogICAgXCJBenVyZUFkXCI6IHsKICAgICAgICBcIkluc3RhbmNlXCI6IFwiJExPR0lOSU5TVEFOQ0VcIiwKICAgICAgICBcIkNsaWVudElkXCI6IFwiJEZQQ0xJRU5USURcIiwKICAgICAgICBcIlRlbmFudElkXCI6IFwiJEZQVEVOQU5USURcIiwKICAgICAgICBcIkF1ZGllbmNlXCI6IFwiYXBpOi8vJEZQQ0xJRU5USURcIiwKICAgICAgICBcIlNob3dQSUlcIjogZmFsc2UsCiAgICAgICAgXCJJbmJvdW5kUG9saWNpZXNcIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBcIkxhYmVsXCI6IFwiYXJvcnAtYXJtLWluYm91bmQtcG9saWN5XCIsCiAgICAgICAgICAgICAgICBcIkF1dGhvcml0eVwiOiBcIiRMT0dJTklOU1RBTkNFLyRGUFRFTkFOVElEL1wiCiwKICAgICAgICAgICAgICAgIFwiQXV0aGVudGljYXRpb25TY2hlbWVzXCI6IFsKICAgICAgICAgICAgICAgICAgICBcIlBvUFwiCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgXCJWYWxpZEF1ZGllbmNlc1wiOiAkTUlTRVZBTElEQVVESUVOQ0VTLAogICAgICAgICAgICAgICAgXCJTaWduZWRIdHRwUmVxdWVzdFZhbGlkYXRpb25Qb2xpY3lcIjogewogICAgICAgICAgICAgICAgICAgIFwiVmFsaWRhdGVUc1wiOiB0cnVlLAogICAgICAgICAgICAgICAgICAgIFwiVmFsaWRhdGVNXCI6IHRydWUsCiAgICAgICAgICAgICAgICAgICAgXCJWYWxpZGF0ZVVcIjogdHJ1ZSwKICAgICAgICAgICAgICAgICAgICBcIlZhbGlkYXRlUFwiOiB0cnVlCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgXCJWYWxpZEFwcGxpY2F0aW9uSWRzXCI6ICRNSVNFVkFMSURBUFBJRFMKICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgXCJMb2dnaW5nXCI6IHsKICAgICAgICAgICAgXCJMb2dMZXZlbFwiOiBcIkluZm9ybWF0aW9uXCIKICAgICAgICB9LAogICAgICAgIFwiTW9kdWxlc1wiOiB7CiAgICAgICAgICAgIFwiVHJWMlwiOiB7CiAgICAgICAgICAgICAgICBcIk1vZHVsZVR5cGVcIjogXCJUclYyTW9kdWxlXCIsCiAgICAgICAgICAgICAgICBcIkVuYWJsZWRcIjogdHJ1ZQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSwKICAgIFwiQWxsb3dlZEhvc3RzXCI6IFwiKlwiLAogICAgXCJLZXN0cmVsXCI6IHsKICAgICAgICBcIkVuZHBvaW50c1wiOiB7CiAgICAgICAgICAgIFwiSHR0cFwiOiB7CiAgICAgICAgICAgICAgICBcIlVybFwiOiBcImh0dHA6Ly8kaXBhZGRyZXNzOjUwMDBcIgogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSwKICAgIFwiTG9nZ2luZ1wiOiB7CiAgICAgICAgXCJMb2dMZXZlbFwiOiB7CiAgICAgICAgICAgIFwiRGVmYXVsdFwiOiBcIkluZm9ybWF0aW9uXCIsCiAgICAgICAgICAgIFwiTWljcm9zb2Z0XCI6IFwiSW5mb3JtYXRpb25cIiwKICAgICAgICAgICAgXCJNaWNyb3NvZnQuSG9zdGluZy5MaWZldGltZVwiOiBcIkluZm9ybWF0aW9uXCIKICAgICAgICB9LAogICAgICAgIFwiQ29uc29sZVwiOiB7CiAgICAgICAgICAgIFwiRm9ybWF0dGVyTmFtZVwiOiBcIlNpbXBsZVwiLAogICAgICAgICAgICBcIkZvcm1hdHRlck9wdGlvbnNcIjogewogICAgICAgICAgICAgICAgXCJJbmNsdWRlU2NvcGVzXCI6IHRydWUsCiAgICAgICAgICAgICAgICBcIlNpbmdsZUxpbmVcIjogdHJ1ZSwKICAgICAgICAgICAgICAgIFwiVGltZXN0YW1wRm9ybWF0XCI6IFwiSEg6bW06c3MuZmZmZiBcIiwKICAgICAgICAgICAgICAgIFwiVXNlVXRjVGltZXN0YW1wXCI6IHRydWUKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfSIKCiAgICB3cml0ZV9maWxlIGFyb19taXNlX2FwcHNldHRpbmdzX2ZpbGVuYW1lIGFyb19taXNlX2FwcHNldHRpbmdzX2ZpbGUgdHJ1ZQoKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgYXJvX21pc2Vfc2VydmljZV9maWxlbmFtZT0nL2V0Yy9zeXN0ZW1kL3N5c3RlbS9hcm8tbWlzZS5zZXJ2aWNlJwogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICAjIGJlbG93IHZhcmlhYmxlIGlzIGluIHNpbmdsZSBxdW90ZXMKICAgICMgYXMgaXQgaXMgdG8gYmUgZXhwYW5kZWQgYXQgc3lzdGVtZCBzdGFydCB0aW1lIChieSBzeXN0ZW1kLCBub3QgdGhpcyBzY3JpcHQpCiAgICBsb2NhbCAtciBhcm9fbWlzZV9zZXJ2aWNlX2ZpbGU9J1tVbml0XQpBZnRlcj1uZXR3b3JrLW9ubGluZS50YXJnZXQKV2FudHM9bmV0d29yay1vbmxpbmUudGFyZ2V0ClN0YXJ0TGltaXRJbnRlcnZhbFNlYz0wCltTZXJ2aWNlXQpSZXN0YXJ0U2VjPTFzCkVudmlyb25tZW50RmlsZT0vZXRjL3N5c2NvbmZpZy9hcm8tbWlzZQpFeGVjU3RhcnRQcmU9LS91c3IvYmluL3BvZG1hbiBybSAtZiAlTgpFeGVjU3RhcnQ9L3Vzci9iaW4vcG9kbWFuIHJ1biBcCiAgLXAgNTAwMDo1MDAwIFwKICAtdiAvYXBwL21pc2UvYXBwc2V0dGluZ3MuanNvbjovYXBwL2FwcHNldHRpbmdzLmpzb246eiBcCiAgLS1ob3N0bmFtZSAlSCBcCiAgLS1uYW1lICVOIFwKICAtLW5ldHdvcms9JHtQT0RNQU5fTkVUV09SS30gXAogIC0taXAgJHtJUEFERFJFU1N9IFwKICAtLXJtIFwKICAke01JU0VJTUFHRX0KRXhlY1N0b3A9L3Vzci9iaW4vcG9kbWFuIHN0b3AgJU4KUmVzdGFydD1hbHdheXMKUmVzdGFydFNlYz0zClN0YXJ0TGltaXRJbnRlcnZhbD0wCltJbnN0YWxsXQpXYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldCcKCiAgICB3cml0ZV9maWxlIGFyb19taXNlX3NlcnZpY2VfZmlsZW5hbWUgYXJvX21pc2Vfc2VydmljZV9maWxlIHRydWUKfQojIGNvbmZpZ3VyZV9zZXJ2aWNlX2Fyb19vdGVsX2NvbGxlY3RvcgojIGFyZ3M6CiMgMSkgaW1hZ2UgLSBuYW1lcmVmLCBzdHJpbmc7IE9URUwgY29udGFpbmVyIGltYWdlCiMgMikgc3RhdGljX2lwX2FkZHJlc3MgLSBuYW1lcmVmLCBhcnJheTsgc3RhdGljIGlwcyBvZiBhbGwgc2VydmljZXMKIyAzKSBpcGFkZHJlc3MgLSBuYW1lcmVmLCBzdHJpbmc7IHN0YXRpYyBpcCBvZiBwb2RtYW4gbmV0d29yayB0byBiZSBhdHRhY2hlZApjb25maWd1cmVfc2VydmljZV9hcm9fb3RlbF9jb2xsZWN0b3IoKSB7CiAgICBsb2NhbCAtbiBpbWFnZT0iJDEiCiAgICBsb2NhbCAtbiBzdGF0aWNfaXBfYWRkcmVzcz0iJDIiCiAgICBsb2NhbCAtbiBpcGFkZHJlc3M9IiQzIgogICAgbG9nICJzdGFydGluZyIKICAgIGxvZyAiQ29uZmlndXJpbmcgYXJvLW90ZWwtY29sbGVjdG9yIHNlcnZpY2UiCgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciBhcm9fb3RlbF9jb2xsZWN0b3Jfc2VydmljZV9jb25mX2ZpbGVuYW1lPScvZXRjL3N5c2NvbmZpZy9hcm8tb3RlbC1jb2xsZWN0b3InCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIGFyb19vdGVsX2NvbGxlY3Rvcl9zZXJ2aWNlX2NvbmZfZmlsZT0iR09NRU1MSU1JVD0xMDAwTWlCCk9URUxJTUFHRT0nJGltYWdlJwpQT0RNQU5fTkVUV09SSz0ncG9kbWFuJwpJUEFERFJFU1M9JyRpcGFkZHJlc3MnIgoKICAgIHdyaXRlX2ZpbGUgYXJvX290ZWxfY29sbGVjdG9yX3NlcnZpY2VfY29uZl9maWxlbmFtZSBhcm9fb3RlbF9jb2xsZWN0b3Jfc2VydmljZV9jb25mX2ZpbGUgdHJ1ZQoKICAgIG1rZGlyIC1wIC9hcHAvb3RlbAogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciBhcm9fb3RlbF9jb2xsZWN0b3JfYXBwY29uZmlnX2ZpbGVuYW1lPScvYXBwL290ZWwvY29uZmlnLnlhbWwnCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIGFyb19vdGVsX2NvbGxlY3Rvcl9hcHBjb25maWdfZmlsZT0icmVjZWl2ZXJzOgogIGh0dHBjaGVjazoKICAgIHRhcmdldHM6CiAgICAjIE1JU0UgRW5kcG9pbnRzCiAgICAgIC0gZW5kcG9pbnQ6IGh0dHA6Ly8ke3N0YXRpY19pcF9hZGRyZXNzWyJtaXNlIl19OjUwMDAvaGVhbHRoegogICAgICAgIG1ldGhvZDogR0VUCiAgICAgIC0gZW5kcG9pbnQ6IGh0dHA6Ly8ke3N0YXRpY19pcF9hZGRyZXNzWyJtaXNlIl19OjUwMDAvcmVhZHl6CiAgICAgICAgbWV0aG9kOiBHRVQKICAgICMgT1RFTHMgb3duIEVuZHBvaW50cwogICAgICAtIGVuZHBvaW50OiBodHRwOi8vJGlwYWRkcmVzczoxMzEzMy9oZWFsdGh6CiAgICAgICAgbWV0aG9kOiBHRVQKICAgICAgLSBlbmRwb2ludDogaHR0cDovLyRpcGFkZHJlc3M6MTMxMzMvcmVhZHl6CiAgICAgICAgbWV0aG9kOiBHRVQKICAgIGNvbGxlY3Rpb25faW50ZXJ2YWw6IDIwcwpwcm9jZXNzb3JzOgogIGJhdGNoOgogIGF0dHJpYnV0ZXMvaW5zZXJ0OgogICAgYWN0aW9uczoKICAgICAgLSBrZXk6IFwibG9jYXRpb25cIgogICAgICAgIGFjdGlvbjogaW5zZXJ0CiAgICAgICAgdmFsdWU6IFwiJExPQ0FUSU9OXCIKICAgICAgLSBrZXk6IFwiaG9zdFwiCiAgICAgICAgYWN0aW9uOiBpbnNlcnQKICAgICAgICB2YWx1ZTogXCIkKGhvc3RuYW1lKVwiCmV4dGVuc2lvbnM6CiAgaGVhbHRoX2NoZWNrOgogICAgZW5kcG9pbnQ6ICRpcGFkZHJlc3M6MTMxMzMKZXhwb3J0ZXJzOgogIG90bHA6CiAgICBlbmRwb2ludDogJHtzdGF0aWNfaXBfYWRkcmVzc1sibWRtIl19OjQzMTcKICAgIHRsczoKICAgICAgaW5zZWN1cmU6IHRydWUKc2VydmljZToKICBleHRlbnNpb25zOiBbaGVhbHRoX2NoZWNrXQogIHBpcGVsaW5lczoKICAgIG1ldHJpY3M6CiAgICAgIHJlY2VpdmVyczogW2h0dHBjaGVja10KICAgICAgcHJvY2Vzc29yczogW2JhdGNoLCBhdHRyaWJ1dGVzL2luc2VydF0KICAgICAgZXhwb3J0ZXJzOiBbb3RscF0iCgogICAgd3JpdGVfZmlsZSBhcm9fb3RlbF9jb2xsZWN0b3JfYXBwY29uZmlnX2ZpbGVuYW1lIGFyb19vdGVsX2NvbGxlY3Rvcl9hcHBjb25maWdfZmlsZSB0cnVlCgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciBhcm9fb3RlbF9jb2xsZWN0b3Jfc2VydmljZV9maWxlbmFtZT0nL2V0Yy9zeXN0ZW1kL3N5c3RlbS9hcm8tb3RlbC1jb2xsZWN0b3Iuc2VydmljZScKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgIyBiZWxvdyB2YXJpYWJsZSBpcyBpbiBzaW5nbGUgcXVvdGVzCiAgICAjIGFzIGl0IGlzIHRvIGJlIGV4cGFuZGVkIGF0IHN5c3RlbWQgc3RhcnQgdGltZSAoYnkgc3lzdGVtZCwgbm90IHRoaXMgc2NyaXB0KQogICAgbG9jYWwgLXIgYXJvX290ZWxfY29sbGVjdG9yX3NlcnZpY2VfZmlsZT0nW1VuaXRdCkFmdGVyPW1kbS5zZXJ2aWNlCldhbnRzPW1kbS5zZXJ2aWNlClN0YXJ0TGltaXRJbnRlcnZhbFNlYz0wCltTZXJ2aWNlXQpSZXN0YXJ0U2VjPTFzCkVudmlyb25tZW50RmlsZT0vZXRjL3N5c2NvbmZpZy9hcm8tb3RlbC1jb2xsZWN0b3IKRXhlY1N0YXJ0UHJlPS0vdXNyL2Jpbi9wb2RtYW4gcm0gLWYgJU4KRXhlY1N0YXJ0PS91c3IvYmluL3BvZG1hbiBydW4gXAogIC0taG9zdG5hbWUgJUggXAogIC0tbmFtZSAlTiBcCiAgLS1ybSBcCiAgLS1uZXR3b3JrPSR7UE9ETUFOX05FVFdPUkt9IFwKICAtLWlwICR7SVBBRERSRVNTfSBcCiAgLW0gMmcgXAogIC12IC9hcHAvb3RlbC9jb25maWcueWFtbDovZXRjL290ZWxjb2wtY29udHJpYi9jb25maWcueWFtbDp6IFwKICAke09URUxJTUFHRX0KRXhlY1N0b3A9L3Vzci9iaW4vcG9kbWFuIHN0b3AgJU4KUmVzdGFydD1hbHdheXMKUmVzdGFydFNlYz0zClN0YXJ0TGltaXRJbnRlcnZhbD0wCltJbnN0YWxsXQpXYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldCcKCiAgICB3cml0ZV9maWxlIGFyb19vdGVsX2NvbGxlY3Rvcl9zZXJ2aWNlX2ZpbGVuYW1lIGFyb19vdGVsX2NvbGxlY3Rvcl9zZXJ2aWNlX2ZpbGUgdHJ1ZQp9CgojIGNvbmZpZ3VyZV9zZXJ2aWNlX21kc2QKIyBhcmdzOgojIDEpIG1vbml0b3Jpbmdfcm9sZSAtIG5hbWVyZWYsIHN0cmluZzsgY2FuIGJlICJnYXRld2F5IiBvciAicnAiCiMgMikgbW9uaXRvcl9jb25maWdfdmVyc2lvbiAtIG5hbWVyZWYsIHN0cmluZzsgbWRzZCBjb25maWcgdmVyc2lvbgpjb25maWd1cmVfc2VydmljZV9tZHNkKCkgewogICAgbG9jYWwgLW4gcm9sZT0iJDEiCiAgICBsb2NhbCAtbiBtb25pdG9yX2NvbmZpZ192ZXJzaW9uPSIkMiIKICAgIGxvZyAic3RhcnRpbmciCiAgICBsb2cgImNvbmZpZ3VyaW5nIG1kc2Qgc2VydmljZSIKCiAgICB2ZXJpZnlfcm9sZSByb2xlCgogICAgbG9jYWwgLXIgbWRzZF9zZXJ2aWNlX2Rpcj0iL2V0Yy9zeXN0ZW1kL3N5c3RlbS9tZHNkLnNlcnZpY2UuZCIKICAgIG1rZGlyIC1wICIkbWRzZF9zZXJ2aWNlX2RpciIKCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIG1kc2Rfb3ZlcnJpZGVfY29uZl9maWxlbmFtZT0iJG1kc2Rfc2VydmljZV9kaXIvb3ZlcnJpZGUuY29uZiIKICAgIGxvY2FsIC1yIG1kc2RfY2VydGlmaWNhdGVfc2FuPSIkKG9wZW5zc2wgeDUwOSAtaW4gL3Zhci9saWIvd2FhZ2VudC9NaWNyb3NvZnQuQXp1cmUuS2V5VmF1bHQuU3RvcmUvbWRzZC5wZW0gLW5vb3V0IC1zdWJqZWN0IHwgc2VkIC1lICdzLy4qQ04gPSAvLycpIgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciBtZHNkX292ZXJyaWRlX2NvbmZfZmlsZT0iW1VuaXRdCkFmdGVyPW5ldHdvcmstb25saW5lLnRhcmdldCIKCiAgICB3cml0ZV9maWxlIG1kc2Rfb3ZlcnJpZGVfY29uZl9maWxlbmFtZSBtZHNkX292ZXJyaWRlX2NvbmZfZmlsZSB0cnVlCgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciBkZWZhdWx0X21kc2RfZmlsZW5hbWU9Ii9ldGMvZGVmYXVsdC9tZHNkIgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciBkZWZhdWx0X21kc2RfZmlsZT0iTURTRF9ST0xFX1BSRUZJWD0vdmFyL3J1bi9tZHNkL2RlZmF1bHQKTURTRF9PUFRJT05TPVwiLUEgLWQgLXIgXCRNRFNEX1JPTEVfUFJFRklYXCIKCmV4cG9ydCBNT05JVE9SSU5HX0dDU19FTlZJUk9OTUVOVD0nJE1EU0RFTlZJUk9OTUVOVCcKZXhwb3J0IE1PTklUT1JJTkdfR0NTX0FDQ09VTlQ9JyRSUE1EU0RBQ0NPVU5UJwpleHBvcnQgTU9OSVRPUklOR19HQ1NfUkVHSU9OPSckTE9DQVRJT04nCmV4cG9ydCBNT05JVE9SSU5HX0dDU19BVVRIX0lEX1RZUEU9QXV0aEtleVZhdWx0CmV4cG9ydCBNT05JVE9SSU5HX0dDU19BVVRIX0lEPSckbWRzZF9jZXJ0aWZpY2F0ZV9zYW4nCmV4cG9ydCBNT05JVE9SSU5HX0dDU19OQU1FU1BBQ0U9JyRSUE1EU0ROQU1FU1BBQ0UnCmV4cG9ydCBNT05JVE9SSU5HX0NPTkZJR19WRVJTSU9OPSckbW9uaXRvcl9jb25maWdfdmVyc2lvbicKZXhwb3J0IE1PTklUT1JJTkdfVVNFX0dFTkVWQV9DT05GSUdfU0VSVklDRT10cnVlCgpleHBvcnQgTU9OSVRPUklOR19URU5BTlQ9JyRMT0NBVElPTicKZXhwb3J0IE1PTklUT1JJTkdfUk9MRT0nJHJvbGUnCmV4cG9ydCBNT05JVE9SSU5HX1JPTEVfSU5TVEFOQ0U9XCIkKGhvc3RuYW1lKVwiCgpleHBvcnQgTURTRF9NU0dQQUNLX1NPUlRfQ09MVU1OUz1cIjFcIiIKCiAgICB3cml0ZV9maWxlIGRlZmF1bHRfbWRzZF9maWxlbmFtZSBkZWZhdWx0X21kc2RfZmlsZSB0cnVlCn0KCiMgY29uZmlndXJlX3NlcnZpY2VfZmx1ZW50Yml0CiMgYXJnczoKIyAxKSBjb25mX2ZpbGUgLSBzdHJpbmc7IGZsdWVuYml0IGNvbmZpZ3VyYXRpb24gZmlsZQojIDIpIGltYWdlIC0gc3RyaW5nOyBmbHVlbnRiaXQgY29udGFpbmVyIGltYWdlIHRvIHJ1bgojIDMpIGlwYWRkcmVzcyAtIG5hbWVyZWYsIHN0cmluZzsgc3RhdGljIGlwIG9mIHBvZG1hbiBuZXR3b3JrIHRvIGJlIGF0dGFjaGVkCmNvbmZpZ3VyZV9zZXJ2aWNlX2ZsdWVudGJpdCgpIHsKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLW4gY29uZl9maWxlPSIkMSIKICAgIGxvY2FsIC1uIGltYWdlPSIkMiIKICAgIGxvZyAic3RhcnRpbmciCiAgICBsb2cgIkNvbmZpZ3VyaW5nIGZsdWVudGJpdCBzZXJ2aWNlIgoKICAgIG1rZGlyIC1wIC9ldGMvZmx1ZW50Yml0LwogICAgbWtkaXIgLXAgL3Zhci9saWIvZmx1ZW50CgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciBjb25mX2ZpbGVuYW1lPScvZXRjL2ZsdWVudGJpdC9mbHVlbnRiaXQuY29uZicKICAgIHdyaXRlX2ZpbGUgY29uZl9maWxlbmFtZSBjb25mX2ZpbGUgdHJ1ZQoKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgc3lzY29uZmlnX2ZpbGVuYW1lPScvZXRjL3N5c2NvbmZpZy9mbHVlbnRiaXQnCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIHN5c2NvbmZpZ19maWxlPSJGTFVFTlRCSVRJTUFHRT0kaW1hZ2UiCgogICAgd3JpdGVfZmlsZSBzeXNjb25maWdfZmlsZW5hbWUgc3lzY29uZmlnX2ZpbGUgdHJ1ZQoKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgc2VydmljZV9maWxlbmFtZT0nL2V0Yy9zeXN0ZW1kL3N5c3RlbS9mbHVlbnRiaXQuc2VydmljZScKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgIyBiZWxvdyB2YXJpYWJsZSBpcyBpbiBzaW5nbGUgcXVvdGVzCiAgICAjIGFzIGl0IGlzIHRvIGJlIGV4cGFuZGVkIGF0IHN5c3RlbWQgc3RhcnQgdGltZSAoYnkgc3lzdGVtZCwgbm90IHRoaXMgc2NyaXB0KQogICAgbG9jYWwgLXIgc2VydmljZV9maWxlPSdbVW5pdF0KQWZ0ZXI9bmV0d29yay1vbmxpbmUudGFyZ2V0CldhbnRzPW5ldHdvcmstb25saW5lLnRhcmdldApTdGFydExpbWl0SW50ZXJ2YWxTZWM9MAoKW1NlcnZpY2VdClJlc3RhcnRTZWM9MXMKRW52aXJvbm1lbnRGaWxlPS9ldGMvc3lzY29uZmlnL2ZsdWVudGJpdApFeGVjU3RhcnRQcmU9LS91c3IvYmluL3BvZG1hbiBybSAtZiAlTgpFeGVjU3RhcnQ9L3Vzci9iaW4vcG9kbWFuIHJ1biBcCiAgLS1zZWN1cml0eS1vcHQgbGFiZWw9ZGlzYWJsZSBcCiAgLS1lbnRyeXBvaW50IC9vcHQvdGQtYWdlbnQtYml0L2Jpbi90ZC1hZ2VudC1iaXQgXAogIC0tbmV0PWhvc3QgXAogIC0taG9zdG5hbWUgJUggXAogIC0tbmFtZSAlTiBcCiAgLS1ybSBcCiAgLS1jYXAtZHJvcCBuZXRfcmF3IFwKICAtdiAvZXRjL2ZsdWVudGJpdC9mbHVlbnRiaXQuY29uZjovZXRjL2ZsdWVudGJpdC9mbHVlbnRiaXQuY29uZiBcCiAgLXYgL3Zhci9saWIvZmx1ZW50Oi92YXIvbGliL2ZsdWVudDp6IFwKICAtdiAvdmFyL2xvZy9qb3VybmFsOi92YXIvbG9nL2pvdXJuYWw6cm8gXAogIC12IC9ldGMvbWFjaGluZS1pZDovZXRjL21hY2hpbmUtaWQ6cm8gXAogICR7RkxVRU5UQklUSU1BR0V9IFwKICAtYyAvZXRjL2ZsdWVudGJpdC9mbHVlbnRiaXQuY29uZgoKRXhlY1N0b3A9L3Vzci9iaW4vcG9kbWFuIHN0b3AgJU4KUmVzdGFydD1hbHdheXMKUmVzdGFydFNlYz01ClN0YXJ0TGltaXRJbnRlcnZhbD0wCgpbSW5zdGFsbF0KV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQnCgogICAgd3JpdGVfZmlsZSBzZXJ2aWNlX2ZpbGVuYW1lIHNlcnZpY2VfZmlsZSB0cnVlCn0KCiMgY29uZmlndXJlX3RpbWVyc19tZG1fbWRzZAojIGFyZ3M6CiMgMSkgcm9sZSAtIHN0cmluZzsgY2FuIGJlICJnYXRld2F5IiBvciAicnAiCmNvbmZpZ3VyZV90aW1lcnNfbWRtX21kc2QoKSB7CiAgICBsb2NhbCAtbiByb2xlPSIkMSIKICAgIGxvZyAic3RhcnRpbmciCgogICAgdmVyaWZ5X3JvbGUgcm9sZQoKICAgIGxvY2FsIGtleXZhdWx0X3N1ZmZpeCBzZWNyZXRfcHJlZml4CiAgICBnZXRfa2V5dmF1bHRfc3VmZml4IHJvbGUga2V5dmF1bHRfc3VmZml4IHNlY3JldF9wcmVmaXgKCiAgICBmb3IgdmFyIGluICJtZHNkIiAibWRtIjsgZG8KICAgICAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgICAgICBsb2NhbCBkb3dubG9hZF9jcmVkc19zZXJ2aWNlX2ZpbGVuYW1lPSIvZXRjL3N5c3RlbWQvc3lzdGVtL2Rvd25sb2FkLSR2YXItY3JlZGVudGlhbHMuc2VydmljZSIKICAgICAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgICAgICBsb2NhbCBkb3dubG9hZF9jcmVkc19zZXJ2aWNlX2ZpbGU9IltVbml0XQpEZXNjcmlwdGlvbj1QZXJpb2RpYyAkdmFyIGNyZWRlbnRpYWxzIHJlZnJlc2gKCltTZXJ2aWNlXQpUeXBlPW9uZXNob3QKRXhlY1N0YXJ0PS91c3IvbG9jYWwvYmluL2Rvd25sb2FkLWNyZWRlbnRpYWxzLnNoICR2YXIiCgogICAgICAgIHdyaXRlX2ZpbGUgZG93bmxvYWRfY3JlZHNfc2VydmljZV9maWxlbmFtZSBkb3dubG9hZF9jcmVkc19zZXJ2aWNlX2ZpbGUgdHJ1ZQoKICAgICAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgICAgICBsb2NhbCBkb3dubG9hZF9jcmVkc190aW1lcl9maWxlbmFtZT0iL2V0Yy9zeXN0ZW1kL3N5c3RlbS9kb3dubG9hZC0kdmFyLWNyZWRlbnRpYWxzLnRpbWVyIgogICAgICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgICAgIGxvY2FsIGRvd25sb2FkX2NyZWRzX3RpbWVyX2ZpbGU9IltVbml0XQpEZXNjcmlwdGlvbj1QZXJpb2RpYyAkdmFyIGNyZWRlbnRpYWxzIHJlZnJlc2gKQWZ0ZXI9bmV0d29yay1vbmxpbmUudGFyZ2V0CldhbnRzPW5ldHdvcmstb25saW5lLnRhcmdldAoKW1RpbWVyXQpPbkJvb3RTZWM9MG1pbgpPbkNhbGVuZGFyPTAvMTI6MDA6MDAKQWNjdXJhY3lTZWM9NXMKCltJbnN0YWxsXQpXYW50ZWRCeT10aW1lcnMudGFyZ2V0IgoKICAgICAgICB3cml0ZV9maWxlIGRvd25sb2FkX2NyZWRzX3RpbWVyX2ZpbGVuYW1lIGRvd25sb2FkX2NyZWRzX3RpbWVyX2ZpbGUgdHJ1ZQogICAgZG9uZQoKICAgIGxvY2FsIC1yIGRvd25sb2FkX2NyZWRzX3NjcmlwdF9maWxlbmFtZT0iL3Vzci9sb2NhbC9iaW4vZG93bmxvYWQtY3JlZGVudGlhbHMuc2giCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIGRvd25sb2FkX2NyZWRzX3NjcmlwdF9maWxlPSIjIS9iaW4vYmFzaApzZXQgLWV1CgpDT01QT05FTlQ9XCQxCmVjaG8gXCJEb3dubG9hZCBcJENPTVBPTkVOVCBjcmVkZW50aWFsc1wiCgpURU1QX0RJUj1cIlwkKG1rdGVtcCAtZClcIgpleHBvcnQgQVpVUkVfQ09ORklHX0RJUj1cIlwkKG1rdGVtcCAtZClcIgoKZWNobyBcIkxvZ2dpbmcgaW50byBBenVyZS4uLlwiClJFVFJJRVM9Mwp3aGlsZSBbWyBcJFJFVFJJRVMgLWd0IDAgXV07IGRvCiAgICBpZiBheiBsb2dpbiAtaSAtLWFsbG93LW5vLXN1YnNjcmlwdGlvbnMKICAgIHRoZW4KICAgICAgICBlY2hvIFwiYXogbG9naW4gc3VjY2Vzc2Z1bFwiCiAgICAgICAgYnJlYWsKICAgIGVsc2UKICAgICAgICBlY2hvIFwiYXogbG9naW4gZmFpbGVkLiBSZXRyeWluZy4uLlwiCiAgICAgICAgbGV0IFJFVFJJRVMtPTEKICAgICAgICBzbGVlcCA1CiAgICBmaQpkb25lCgp0cmFwIFwiY2xlYW51cFwiIEVYSVQKCmNsZWFudXAoKSB7CiAgYXogbG9nb3V0CiAgW1sgXCRURU1QX0RJUiA9fiAvdG1wLy4rIF1dICYmIHJtIC1yZiBcJFRFTVBfRElSCiAgW1sgXCRBWlVSRV9DT05GSUdfRElSID1+IC90bXAvLisgXV0gJiYgcm0gLXJmIFwkQVpVUkVfQ09ORklHX0RJUgp9CgppZiBbWyBcJENPTVBPTkVOVCA9IFwibWRtXCIgXV07IHRoZW4KICBDVVJSRU5UX0NFUlRfRklMRT1cIi9ldGMvbWRtLnBlbVwiCmVsaWYgW1sgXCRDT01QT05FTlQgPSBcIm1kc2RcIiBdXTsgdGhlbgogIENVUlJFTlRfQ0VSVF9GSUxFPVwiL3Zhci9saWIvd2FhZ2VudC9NaWNyb3NvZnQuQXp1cmUuS2V5VmF1bHQuU3RvcmUvbWRzZC5wZW1cIgplbHNlCiAgZWNobyBJbnZhbGlkIHVzYWdlICYmIGV4aXQgMQpmaQoKU0VDUkVUX05BTUU9XCIkc2VjcmV0X3ByZWZpeC1cJHtDT01QT05FTlR9XCIKTkVXX0NFUlRfRklMRT1cIlwkVEVNUF9ESVIvXCRDT01QT05FTlQucGVtXCIKZm9yIGF0dGVtcHQgaW4gezEuLjV9OyBkbwogIGF6IGtleXZhdWx0IFwKICAgIHNlY3JldCBcCiAgICBkb3dubG9hZCBcCiAgICAtLWZpbGUgXCJcJE5FV19DRVJUX0ZJTEVcIiBcCiAgICAtLWlkIFwiaHR0cHM6Ly8kS0VZVkFVTFRQUkVGSVgtJGtleXZhdWx0X3N1ZmZpeC4kS0VZVkFVTFRETlNTVUZGSVgvc2VjcmV0cy9cJFNFQ1JFVF9OQU1FXCIgXAogICAgJiYgYnJlYWsKICBpZiBbWyBcJGF0dGVtcHQgLWx0IDUgXV07IHRoZW4gc2xlZXAgMTA7IGVsc2UgZXhpdCAxOyBmaQpkb25lCgppZiBbIC1mIFwkTkVXX0NFUlRfRklMRSBdOyB0aGVuCiAgaWYgW1sgXCRDT01QT05FTlQgPSBcIm1kc2RcIiBdXTsgdGhlbgogICAgY2hvd24gc3lzbG9nOnN5c2xvZyBcJE5FV19DRVJUX0ZJTEUKICBlbHNlCiAgICBzZWQgLWkgLW5lICcxLC9FTkQgQ0VSVElGSUNBVEUvIHAnIFwkTkVXX0NFUlRfRklMRQogIGZpCgogIG5ld19jZXJ0X3NuPVwiXCQob3BlbnNzbCB4NTA5IC1pbiBcIlwkTkVXX0NFUlRfRklMRVwiIC1ub291dCAtc2VyaWFsIHwgYXdrIC1GPSAne3ByaW50IFwkMn0nKVwiCiAgY3VycmVudF9jZXJ0X3NuPVwiXCQob3BlbnNzbCB4NTA5IC1pbiBcIlwkQ1VSUkVOVF9DRVJUX0ZJTEVcIiAtbm9vdXQgLXNlcmlhbCB8IGF3ayAtRj0gJ3twcmludCBcJDJ9JylcIgogIGlmIFtbICEgLXogXCRuZXdfY2VydF9zbiBdXSAmJiBbWyBcJG5ld19jZXJ0X3NuICE9IFwiXCRjdXJyZW50X2NlcnRfc25cIiBdXTsgdGhlbgogICAgZWNobyB1cGRhdGluZyBjZXJ0aWZpY2F0ZSBmb3IgXCRDT01QT05FTlQKICAgIGNobW9kIDA2MDAgXCRORVdfQ0VSVF9GSUxFCiAgICBtdiBcJE5FV19DRVJUX0ZJTEUgXCRDVVJSRU5UX0NFUlRfRklMRQogIGZpCmVsc2UKICBlY2hvIEZhaWxlZCB0byByZWZyZXNoIGNlcnRpZmljYXRlIGZvciBcJENPTVBPTkVOVCAmJiBleGl0IDEKZmkiCgogICAgd3JpdGVfZmlsZSBkb3dubG9hZF9jcmVkc19zY3JpcHRfZmlsZW5hbWUgZG93bmxvYWRfY3JlZHNfc2NyaXB0X2ZpbGUgdHJ1ZQoKICAgIGNobW9kIHUreCAvdXNyL2xvY2FsL2Jpbi9kb3dubG9hZC1jcmVkZW50aWFscy5zaAoKICAgICRkb3dubG9hZF9jcmVkc19zY3JpcHRfZmlsZW5hbWUgbWRzZCAmCiAgICB3YWl0ICIkISIKCgogICAgJGRvd25sb2FkX2NyZWRzX3NjcmlwdF9maWxlbmFtZSBtZG0gJgogICAgd2FpdCAiJCEiCgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciB3YXRjaF9tZG1fY3JlZHNfc2VydmljZV9maWxlbmFtZT0iL2V0Yy9zeXN0ZW1kL3N5c3RlbS93YXRjaC1tZG0tY3JlZGVudGlhbHMuc2VydmljZSIKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgd2F0Y2hfbWRtX2NyZWRzX3NlcnZpY2VfZmlsZT0iW1VuaXRdCkRlc2NyaXB0aW9uPVdhdGNoIGZvciBjaGFuZ2VzIGluIG1kbS5wZW0gYW5kIHJlc3RhcnRzIHRoZSBtZG0gc2VydmljZQoKW1NlcnZpY2VdClR5cGU9b25lc2hvdApFeGVjU3RhcnQ9L3Vzci9iaW4vc3lzdGVtY3RsIHJlc3RhcnQgbWRtLnNlcnZpY2UKCltJbnN0YWxsXQpXYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldCIKCiAgICB3cml0ZV9maWxlIHdhdGNoX21kbV9jcmVkc19zZXJ2aWNlX2ZpbGVuYW1lIHdhdGNoX21kbV9jcmVkc19zZXJ2aWNlX2ZpbGUgdHJ1ZQoKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgd2F0Y2hfbWRtX2NyZWRzX3BhdGhfZmlsZW5hbWU9Jy91c3IvbGliL3N5c3RlbWQvc3lzdGVtL3dhdGNoLW1kbS1jcmVkZW50aWFscy5wYXRoJwogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciB3YXRjaF9tZG1fY3JlZHNfcGF0aF9maWxlPSdbUGF0aF0KUGF0aE1vZGlmaWVkPS9ldGMvbWRtLnBlbQoKW0luc3RhbGxdCldhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0JwoKICAgIHdyaXRlX2ZpbGUgd2F0Y2hfbWRtX2NyZWRzX3BhdGhfZmlsZW5hbWUgd2F0Y2hfbWRtX2NyZWRzX3BhdGhfZmlsZSB0cnVlCgogICAgbG9jYWwgLXIgd2F0Y2hfbWRtX2NyZWRzPSd3YXRjaC1tZG0tY3JlZGVudGlhbHMucGF0aCcKICAgIHN5c3RlbWN0bCBlbmFibGUgLS1ub3cgIiR3YXRjaF9tZG1fY3JlZHMiIHx8IGFib3J0ICJmYWlsZWQgdG8gZW5hYmxlIGFuZCBzdGFydCAkd2F0Y2hfbWRtX2NyZWRzIgp9CgojIGNvbmZpZ3VyZV9zZXJ2aWNlX21kbQojIGFyZ3M6CiMgMSkgcm9sZSAtIG5hbWVyZWYsIHN0cmluZzsgY2FuIGJlICJnYXRld2F5IiBvciAicnAiCiMgMikgaW1hZ2UgLSBuYW1lcmVmLCBzdHJpbmc7IG1kbSBjb250YWluZXIgaW1hZ2UgdG8gcnVuCiMgMykgaXBhZGRyZXNzIC0gbmFtZXJlZiwgc3RyaW5nOyBzdGF0aWMgaXAgb2YgcG9kbWFuIG5ldHdvcmsgdG8gYmUgYXR0YWNoZWQKY29uZmlndXJlX3NlcnZpY2VfbWRtKCkgewogICAgbG9jYWwgLW4gcm9sZT0iJDEiCiAgICBsb2NhbCAtbiBpbWFnZT0iJDIiCiAgICBsb2NhbCAtbiBpcGFkZHJlc3M9IiQzIgogICAgbG9nICJzdGFydGluZyIKICAgIGxvZyAiQ29uZmlndXJpbmcgbWRtIHNlcnZpY2UiCgogICAgdmVyaWZ5X3JvbGUgcm9sZQoKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgc3lzY29uZmlnX21kbV9maWxlbmFtZT0iL2V0Yy9zeXNjb25maWcvbWRtIgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciBzeXNjb25maWdfbWRtX2ZpbGU9Ik1ETUZST05URU5EVVJMPSckTURNRlJPTlRFTkRVUkwnCk1ETUlNQUdFPSckaW1hZ2UnCk1ETVNPVVJDRUVOVklST05NRU5UPSckTE9DQVRJT04nCk1ETVNPVVJDRVJPTEU9JyRyb2xlJwpNRE1TT1VSQ0VST0xFSU5TVEFOQ0U9XCIkKGhvc3RuYW1lKVwiCk1ETV9JTlBVVD1zdGF0c2RfbG9jYWwsb3RscF9ncnBjCk1ETV9OQU1FU1BBQ0U9J09URUwnCk1ETV9BQ0NPVU5UPSdBenVyZVJlZEhhdE9wZW5TaGlmdFJQJwpQT0RNQU5fTkVUV09SSz0ncG9kbWFuJwpJUEFERFJFU1M9JyRpcGFkZHJlc3MnIgoKICAgIHdyaXRlX2ZpbGUgc3lzY29uZmlnX21kbV9maWxlbmFtZSBzeXNjb25maWdfbWRtX2ZpbGUgdHJ1ZQoKICAgIG1rZGlyIC1wIC92YXIvZXR3CiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIG1kbV9zZXJ2aWNlX2ZpbGVuYW1lPSIvZXRjL3N5c3RlbWQvc3lzdGVtL21kbS5zZXJ2aWNlIgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICAjIGJlbG93IHZhcmlhYmxlIGlzIGluIHNpbmdsZSBxdW90ZXMKICAgICMgYXMgaXQgaXMgdG8gYmUgZXhwYW5kZWQgYXQgc3lzdGVtZCBzdGFydCB0aW1lIChieSBzeXN0ZW1kLCBub3QgdGhpcyBzY3JpcHQpCiAgICBsb2NhbCAtciBtZG1fc2VydmljZV9maWxlPSdbVW5pdF0KQWZ0ZXI9bmV0d29yay1vbmxpbmUudGFyZ2V0CldhbnRzPW5ldHdvcmstb25saW5lLnRhcmdldAoKW1NlcnZpY2VdCkVudmlyb25tZW50RmlsZT0vZXRjL3N5c2NvbmZpZy9tZG0KRXhlY1N0YXJ0UHJlPS0vdXNyL2Jpbi9wb2RtYW4gcm0gLWYgJU4KRXhlY1N0YXJ0PS91c3IvYmluL3BvZG1hbiBydW4gXAogIC0tZW50cnlwb2ludCAvdXNyL3NiaW4vTWV0cmljc0V4dGVuc2lvbiBcCiAgLS1ob3N0bmFtZSAlSCBcCiAgLS1uYW1lICVOIFwKICAtLXJtIFwKICAtLWNhcC1kcm9wIG5ldF9yYXcgXAogIC0tbmV0d29yaz0ke1BPRE1BTl9ORVRXT1JLfSBcCiAgLS1pcCAke0lQQUREUkVTU30gXAogIC1tIDJnIFwKICAtdiAvZXRjL21kbS5wZW06L2V0Yy9tZG0ucGVtIFwKICAtdiAvdmFyL2V0dzovdmFyL2V0dzp6IFwKICAke01ETUlNQUdFfSBcCiAgLUlucHV0ICR7TURNX0lOUFVUfSBcCiAgLU1ldHJpY05hbWVzcGFjZSAke01ETV9OQU1FU1BBQ0V9IFwKICAtTW9uaXRvcmluZ0FjY291bnQgJHtNRE1fQUNDT1VOVH0gXAogIC1DZXJ0RmlsZSAvZXRjL21kbS5wZW0gXAogIC1Gcm9udEVuZFVybCAke01ETUZST05URU5EVVJMfSBcCiAgLUxvZ2dlciBDb25zb2xlIFwKICAtTG9nTGV2ZWwgV2FybmluZyBcCiAgLVByaXZhdGVLZXlGaWxlIC9ldGMvbWRtLnBlbSBcCiAgLVNvdXJjZUVudmlyb25tZW50ICR7TURNU09VUkNFRU5WSVJPTk1FTlR9IFwKICAtU291cmNlUm9sZSAke01ETVNPVVJDRVJPTEV9IFwKICAtU291cmNlUm9sZUluc3RhbmNlICR7TURNU09VUkNFUk9MRUlOU1RBTkNFfQpFeGVjU3RvcD0vdXNyL2Jpbi9wb2RtYW4gc3RvcCAlTgpSZXN0YXJ0PWFsd2F5cwpSZXN0YXJ0U2VjPTEKU3RhcnRMaW1pdEludGVydmFsPTAKCltJbnN0YWxsXQpXYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldCcKCiAgICB3cml0ZV9maWxlIG1kbV9zZXJ2aWNlX2ZpbGVuYW1lIG1kbV9zZXJ2aWNlX2ZpbGUgdHJ1ZQp9CgojIGNvbmZpZ3VyZV92bXNzX2Fyb19zZXJ2aWNlCiMgYXJnczoKIyAxKSByIC0gbmFtZXJlZiwgc3RyaW5nOyByb2xlIG9mIFZNU1MKIyAyKSBpbWFnZXMgLSBuYW1lcmVmLCBhc3NvY2lhdGl2ZSBhcnJheTsgQVJPIGNvbnRhaW5lciBpbWFnZXMKIyAzKSBjb25maWdzIC0gbmFtZXJlZiwgYXNzb2NpYXRpdmUgYXJyYXk7IGNvbmZpZ3VyYXRpb24gZmlsZXMgYW5kIHZlcnNpb25zLiBUaGUgdmFsdWVzIHNob3VsZCBiZSBhIHJlZmVyZW5jZSB0byB2YXJpYWJsZXMsIG5vdCBkZXJlZmVyZW5jZWQuCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIGJlY2F1c2UgdGhlIHZhbHVlIGlzIHVzZWQgd2hlbiBjcmVhdGluZyBuYW1lcmVmIHZhcmlhYmxlcyBieSBoZWxwZXIgZnVuY3Rpb25zLgpjb25maWd1cmVfdm1zc19hcm9fc2VydmljZXMoKSB7CiAgICBsb2NhbCAtbiByPSIkMSIKICAgIGxvY2FsIC1uIGltYWdlcz0iJDIiCiAgICBsb2NhbCAtbiBjb25maWdzPSIkMyIKICAgIGxvZyAic3RhcnRpbmciCiAgICB2ZXJpZnlfcm9sZSAiJDEiCgogICAgaWYgWyAiJHIiID09ICIkcm9sZV9nYXRld2F5IiBdOyB0aGVuCiAgICAgICAgY29uZmlndXJlX3NlcnZpY2VfYXJvX2dhdGV3YXkgIiR7aW1hZ2VzWyJycCJdfSIgIiQxIiAiJHtjb25maWdzWyJnYXRld2F5X2NvbmZpZyJdfSIgIiR7Y29uZmlnc1sic3RhdGljX2lwX2FkZHJlc3MiXX1bImdhdGV3YXkiXSIKICAgICAgICBjb25maWd1cmVfY2VydHNfZ2F0ZXdheQogICAgZWxpZiBbICIkciIgPT0gIiRyb2xlX3JwIiBdOyB0aGVuCiAgICAgICAgY29uZmlndXJlX3NlcnZpY2VfYXJvX3JwICIke2ltYWdlc1sicnAiXX0iICIkMSIgIiR7Y29uZmlnc1sicnBfY29uZmlnIl19IiAiJHtjb25maWdzWyJzdGF0aWNfaXBfYWRkcmVzcyJdfVsicnAiXSIKICAgICAgICBjb25maWd1cmVfc2VydmljZV9hcm9fbWltb19hY3R1YXRvciAiJHtpbWFnZXNbInJwIl19IiAiJHtjb25maWdzWyJycF9jb25maWciXX0iICIke2NvbmZpZ3NbInN0YXRpY19pcF9hZGRyZXNzIl19WyJtaW1vX2FjdHVhdG9yIl0iCiAgICAgICAgY29uZmlndXJlX3NlcnZpY2VfYXJvX21pbW9fc2NoZWR1bGVyICIke2ltYWdlc1sicnAiXX0iICIke2NvbmZpZ3NbInJwX2NvbmZpZyJdfSIgIiR7Y29uZmlnc1sic3RhdGljX2lwX2FkZHJlc3MiXX1bIm1pbW9fc2NoZWR1bGVyIl0iCiAgICAgICAgY29uZmlndXJlX3NlcnZpY2VfYXJvX21vbml0b3IgIiR7aW1hZ2VzWyJycCJdfSIgIiR7Y29uZmlnc1sic3RhdGljX2lwX2FkZHJlc3MiXX1bIm1vbml0b3IiXSIKICAgICAgICBjb25maWd1cmVfc2VydmljZV9hcm9fcG9ydGFsICIke2ltYWdlc1sicnAiXX0iICIke2NvbmZpZ3NbInN0YXRpY19pcF9hZGRyZXNzIl19WyJwb3J0YWwiXSIKICAgICAgICBjb25maWd1cmVfc2VydmljZV9hcm9fbWlzZSAiJHtpbWFnZXNbIm1pc2UiXX0iICIke2NvbmZpZ3NbInN0YXRpY19pcF9hZGRyZXNzIl19WyJtaXNlIl0iCiAgICAgICAgY29uZmlndXJlX3NlcnZpY2VfYXJvX290ZWxfY29sbGVjdG9yICIke2ltYWdlc1sib3RlbCJdfSIgIiR7Y29uZmlnc1sic3RhdGljX2lwX2FkZHJlc3MiXX0iICIke2NvbmZpZ3NbInN0YXRpY19pcF9hZGRyZXNzIl19WyJvdGVsX2NvbGxlY3RvciJdIgogICAgICAgIGNvbmZpZ3VyZV9jZXJ0c19ycAogICAgZmkKCiAgICBjb25maWd1cmVfc2VydmljZV9mbHVlbnRiaXQgIiR7Y29uZmlnc1siZmx1ZW50Yml0Il19IiAiJHtpbWFnZXNbImZsdWVudGJpdCJdfSIKICAgIGNvbmZpZ3VyZV90aW1lcnNfbWRtX21kc2QgIiQxIgogICAgY29uZmlndXJlX3NlcnZpY2VfbWRtICIkMSIgIiR7aW1hZ2VzWyJtZG0iXX0iICIke2NvbmZpZ3NbInN0YXRpY19pcF9hZGRyZXNzIl19WyJtZG0iXSIKICAgIGNvbmZpZ3VyZV9zZXJ2aWNlX21kc2QgIiQxIiAiJHtjb25maWdzWyJtZHNkIl19IgogICAgcnVuX2F6c2VjZF9jb25maWdfc2Nhbgp9CgojIHV0aWwtY29tbW9uLnNoIGRvZXMgbm90IGV4aXN0IHdoZW4gZGVwbG95ZWQgdG8gVk1TUyB2aWEgVk1TUyBleHRlbnNpb25zCiMgUHJvdmlkZXMgc2hlbGxjaGVjayBkZWZpbml0aW9ucwp1dGlsX2NvbW1vbj0idXRpbC1jb21tb24uc2giCmlmIFsgLWYgIiR1dGlsX2NvbW1vbiIgXTsgdGhlbgogICAgIyBzaGVsbGNoZWNrIHNvdXJjZT11dGlsLWNvbW1vbi5zaAogICAgc291cmNlICIkdXRpbF9jb21tb24iCmZpCgojIHV0aWwtc3lzdGVtLnNoIGRvZXMgbm90IGV4aXN0IHdoZW4gZGVwbG95ZWQgdG8gVk1TUyB2aWEgVk1TUyBleHRlbnNpb25zCiMgUHJvdmlkZXMgc2hlbGxjaGVjayBkZWZpbml0aW9ucwp1dGlsX3N5c3RlbT0idXRpbC1zeXN0ZW0uc2giCmlmIFsgLWYgIiR1dGlsX3N5c3RlbSIgXTsgdGhlbgogICAgIyBzaGVsbGNoZWNrIHNvdXJjZT11dGlsLXN5c3RlbS5zaAogICAgc291cmNlICIkdXRpbF9zeXN0ZW0iCmZpCiMhL2Jpbi9iYXNoCiMgVGhpcyBmaWxlIGlzIGludGVuZGVkIHRvIGJlIHNvdXJjZWQgYnkgYm9vdHN0cmFwcGluZyBzY3JpcHRzIGZvciBjb21tb25seSB1c2VkIGZ1bmN0aW9ucwoKIyBnZXRfYm9vdF9kZXZfdXVpZAojIEdldCB0aGUgYm9vdCBkZXZpY2VzIHV1aWQKIyBhcmdzOgojIDEpIGJvb3RfZGV2X3V1aWQgLSBuYW1lcmVmLCBzdHJpbmc7IEVtcHR5IHZhcmlhYmxlIGZvciBib290IGRldmljZSB1dWlkIGFzc2lnbm1lbnQKIyBUYWtlbiBhbmQgcmVmYWN0b3JlZCBmcm9tIGh0dHBzOi8vZW5nLm1zL2RvY3MvcHJvZHVjdHMvYXp1cmUtbGludXgvZmVhdHVyZXMvc2VjdXJpdHkvZmlwcwpnZXRfYm9vdF9kZXZfdXVpZCgpIHsKICAgIGxvY2FsIC1uIGJvb3RfZGV2X3V1aWQ9IiQxIgogICAgIyBTZXQgYm9vdF91dWlkIHZhcmlhYmxlIGZvciB0aGUgYm9vdCBwYXJ0aXRpb24gaWYgZGlmZmVyZW50IGZyb20gdGhlIHJvb3QKICAgIGJvb3RfZGV2PSIkKGRmIC9ib290LyB8IHRhaWwgLTEgfCBjdXQgLWQnICcgLWYxKSIKICAgIHJvb3RfZGV2PSIkKGRmIC8gfCB0YWlsIC0xIHwgY3V0IC1kJyAnIC1mMSkiCgogICAgYm9vdF9kZXZfdXVpZD0iJHJvb3RfZGV2IgogICAgaWYgWyAiJGJvb3RfZGV2IiAhPSAiJHJvb3RfZGV2IiBdOyB0aGVuCiAgICAgICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICAgICAgYm9vdF9kZXZfdXVpZD0iYm9vdD1VVUlEPSQoYmxraWQgIiRib290X2RldiIgLXMgVVVJRCAtbyB2YWx1ZSkiCiAgICBmaQp9CgojIGZpcHNfdmVyaWZ5CiMgVmVyaWZ5IHRoYXQgZmlwcyBtb2RlIGlzIGVuYWJsZWQKIyBUYWtlbiBhbmQgcmVmYWN0b3JlZCBmcm9tIGh0dHBzOi8vZW5nLm1zL2RvY3MvcHJvZHVjdHMvYXp1cmUtbGludXgvZmVhdHVyZXMvc2VjdXJpdHkvZmlwcwpmaXBzX3ZlcmlmeSgpIHsKICAgIGZpcHNfZW5hYmxlZF9wcm9jPSIkKGNhdCAvcHJvYy9zeXMvY3J5cHRvL2ZpcHNfZW5hYmxlZCkiCiAgICBmaXBzX2VuYWJsZWRfc3lzY3RsPSIkKHN5c2N0bCAtbiBjcnlwdG8uZmlwc19lbmFibGVkKSIKICAgIGlmIFsgIiRmaXBzX2VuYWJsZWRfcHJvYyIgLW5lIDEgXSB8fCBbICIkZmlwc19lbmFibGVkX3N5c2N0bCIgLW5lIDEgXTsgdGhlbgogICAgICAgIGFib3J0ICJGSVBTIG1vZGUgaXMgZGlzYWJsZWQiCiAgICBmaQoKICAgIGxvZyAiRklQUyBtb2RlIGlzIGVuYWJsZWQiCn0KCiMgZmlwc19jb25maWd1cmUKIyBDb25maWd1cmVzIFZNIHRvIHJ1biB3aXRoIGZpcHMgbW9kZSBlbmFibGVkCiMgVGFrZW4gYW5kIHJlZmFjdG9yZWQgZnJvbSBodHRwczovL2VuZy5tcy9kb2NzL3Byb2R1Y3RzL2F6dXJlLWxpbnV4L2ZlYXR1cmVzL3NlY3VyaXR5L2ZpcHMKIyBUT0RPIHJlbW92ZSB0aGlzIG9uY2Ugc2t1IGNibC1tYXJpbmVyLTItZ2VuMi1maXBzIGlzIHN1cHBvcnRlZCBieSBhdXRvbWF0aWMgT1MgdXBkYXRlcwojIFJlZmVyZW5jZTogaHR0cHM6Ly9sZWFybi5taWNyb3NvZnQuY29tL2VuLXVzL2F6dXJlL3ZpcnR1YWwtbWFjaGluZS1zY2FsZS1zZXRzL3ZpcnR1YWwtbWFjaGluZS1zY2FsZS1zZXRzLWF1dG9tYXRpYy11cGdyYWRlI3N1cHBvcnRlZC1vcy1pbWFnZXMKZmlwc19jb25maWd1cmUoKSB7CiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIGJvb3RfdXVpZAogICAgZ2V0X2Jvb3RfZGV2X3V1aWQgYm9vdF91dWlkCgogICAgbG9jYWwgZ3J1YjJfZW52CiAgICBpZiBncnViMl9lbnY9IiQoZ3J1YjItZWRpdGVudiAtIGxpc3QgfCBncmVwIGtlcm5lbG9wdHMpIjsgdGhlbgogICAgICAgIGdydWIyLWVkaXRlbnYgLSBzZXQgIiRncnViMl9lbnYgZmlwcz0xICRib290X3V1aWQiCiAgICBlbHNlCiAgICAgICAgZ3J1YmJ5IC0tdXBkYXRlLWtlcm5lbD1BTEwgLS1hcmdzPSJmaXBzPTEgJGJvb3RfdXVpZCIKICAgIGZpCgogICAgIyBmaXBzIG1vZGUgdmVyaWZpY2F0aW9uIHdpbGwgZmFpbCB1bnRpbCBhZnRlciB0aGUgdm0gaGFzIGJlZW4gcmVib290ZWQKICAgICMgZmlwc192ZXJpZnkKfQoKIyBjb25maWd1cmVfc3NoZAojIFdlIG5lZWQgdG8gY29uZmlndXJlIFBhc3N3b3JkQXV0aGVudGljYXRpb24gdG8geWVzIGluIG9yZGVyIGZvciB0aGUgVk1TUyBBY2Nlc3MgSklUIHRvIHdvcmsKY29uZmlndXJlX3NzaGQoKSB7CiAgICBsb2cgInN0YXJ0aW5nIgogICAgbG9jYWwgLXIgc3NoZF9jb25maWc9Ii9ldGMvc3NoL3NzaGRfY29uZmlnIgoKICAgIGxvZyAiRWRpdGluZyAkc3NoZF9jb25maWcgdG8gYWxsb3cgcGFzc3dvcmQgYXV0aGVudGljYXRpb24iCiAgICBzZWQgLWkgJ3MvUGFzc3dvcmRBdXRoZW50aWNhdGlvbiBuby9QYXNzd29yZEF1dGhlbnRpY2F0aW9uIHllcy9nJyAiJHNzaGRfY29uZmlnIgoKICAgIHN5c3RlbWN0bCByZWxvYWQgc3NoZC5zZXJ2aWNlIHx8IGFib3J0ICJzc2hkIGZhaWxlZCB0byByZWxvYWQiCn0KCiMgY29uZmlndXJlX2xvZ3JvdGF0ZSBjbG9iYmVycyAvZXRjL2xvZ3JvdGF0ZS5jb25mCiMgYXJnczoKIyAxKSBkcm9waW5fZmlsZXMgLSBuYW1lcmVmLCBhc3NvY2lhdGl2ZSBhcnJheSwgb3B0aW9uYWw7IGxvZ3JvdGF0ZSBmaWxlcyB0byB3cml0ZSB0byAvZXRjL2xvZ3JvdGF0ZS5kCiMgICAgICAgS2V5IG5hbWUgZGljdGF0ZXMgZmlsZW5hbWVzIHdyaXR0ZW4gdG8gL2V0Yy9sb2dyb3RhdGUuZC4KIyBFeGFtcGxlOgojICAgS2V5IGRpY3RhdGVzIHRoZSBmaWxlbmFtZSB3cml0dGVuIGluIC9ldGMvbG9ncm90YXRlLmQKIyAgIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKIyAgIGxvY2FsIC1yQSBsb2dyb3RhdGVfZHJvcGlucz0oCiMgICAgICBbImdhdGV3YXkiXT0iJGdhdGV3YXlfbG9nX2ZpbGUiCiMgICApCmNvbmZpZ3VyZV9sb2dyb3RhdGUoKSB7CiAgICBsb2NhbCAtbiBkcm9waW5fZmlsZXM9IiR7MTotZW1wdHlfc3RyfSIKICAgIGxvZyAic3RhcnRpbmciCgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciBsb2dyb3RhdGVfY29uZl9maWxlbmFtZT0nL2V0Yy9sb2dyb3RhdGUuY29uZicKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgbG9ncm90YXRlX2NvbmZfZmlsZT0nIyBzZWUgIm1hbiBsb2dyb3RhdGUiIGZvciBkZXRhaWxzCiMgcm90YXRlIGxvZyBmaWxlcyB3ZWVrbHkKd2Vla2x5CgojIGtlZXAgMiB3ZWVrcyB3b3J0aCBvZiBiYWNrbG9ncwpyb3RhdGUgMgoKIyBjcmVhdGUgbmV3IChlbXB0eSkgbG9nIGZpbGVzIGFmdGVyIHJvdGF0aW5nIG9sZCBvbmVzCmNyZWF0ZQoKIyB1c2UgZGF0ZSBhcyBhIHN1ZmZpeCBvZiB0aGUgcm90YXRlZCBmaWxlCmRhdGVleHQKCiMgdW5jb21tZW50IHRoaXMgaWYgeW91IHdhbnQgeW91ciBsb2cgZmlsZXMgY29tcHJlc3NlZApjb21wcmVzcwoKIyBSUE0gcGFja2FnZXMgZHJvcCBsb2cgcm90YXRpb24gaW5mb3JtYXRpb24gaW50byB0aGlzIGRpcmVjdG9yeQppbmNsdWRlIC9ldGMvbG9ncm90YXRlLmQKCiMgbm8gcGFja2FnZXMgb3duIHd0bXAgYW5kIGJ0bXAgLS0gd2Ugd2lsbCByb3RhdGUgdGhlbSBoZXJlCi92YXIvbG9nL3d0bXAgewogICAgbW9udGhseQogICAgY3JlYXRlIDA2NjQgcm9vdCB1dG1wCiAgICAgICAgbWluc2l6ZSAxTQogICAgcm90YXRlIDEKfQoKL3Zhci9sb2cvYnRtcCB7CiAgICBtaXNzaW5nb2sKICAgIG1vbnRobHkKICAgIGNyZWF0ZSAwNjAwIHJvb3QgdXRtcAogICAgcm90YXRlIDEKfScKCiAgICB3cml0ZV9maWxlIGxvZ3JvdGF0ZV9jb25mX2ZpbGVuYW1lIGxvZ3JvdGF0ZV9jb25mX2ZpbGUgdHJ1ZQoKICAgIGlmIFsgLW4gIiR7ZHJvcGluX2ZpbGVzWypdfSIgXTsgdGhlbgogICAgICAgIGxvY2FsIC1yIGxvZ3JvdGF0ZV9kPSIvZXRjL2xvZ3JvdGF0ZS5kIgogICAgICAgIGxvZyAiV3JpdGluZyBsb2dyb3RhdGUgZmlsZXMgdG8gJGxvZ3JvdGF0ZV9kIgogICAgICAgIGZvciBkcm9waW5fbmFtZSBpbiAiJHshZHJvcGluX2ZpbGVzW0BdfSI7IGRvCiAgICAgICAgICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgICAgICAgICBsb2NhbCAtciBkcm9waW5fZmlsZW5hbWU9IiRsb2dyb3RhdGVfZC8kZHJvcGluX25hbWUiCiAgICAgICAgICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgICAgICAgICBsb2NhbCAtciBkcm9waW5fZmlsZT0iJHtkcm9waW5fZmlsZXNbIiRkcm9waW5fbmFtZSJdfSIKICAgICAgICAgICAgd3JpdGVfZmlsZSBkcm9waW5fZmlsZW5hbWUgZHJvcGluX2ZpbGUgdHJ1ZQogICAgICAgIGRvbmUKICAgIGZpCn0KCiMgcHVsbF9jb250YWluZXJfaW1hZ2VzCiMgYXJnczoKIyAxKSBwdWxsX2ltYWdlcyAtIG5hbWVyZWYsIHN0cmluZyBhcnJheQojIDIpIHJlZ2lzdHJ5X2NvbmYgLSBuYW1lcmVmLCBzdHJpbmcsIG9wdGlvbmFsOyBwYXRoIHRvIGRvY2tlci9wb2RtYW4gY29uZmlndXJhdGlvbiBmaWxlCnB1bGxfY29udGFpbmVyX2ltYWdlcygpIHsKICAgIGxvY2FsIC1uIHB1bGxfaW1hZ2VzPSIkMSIKICAgIGxvY2FsIC1uIHJlZ2lzdHJ5X2NvbmY9IiR7MjotZW1wdHlfc3RyfSIKICAgIGxvZyAic3RhcnRpbmciCgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtcmkgcmV0cnlfdGltZT0zMAogICAgY21kPSgKICAgICAgICBhegogICAgICAgIGxvZ2luCiAgICAgICAgLWkKICAgICAgICAtLWFsbG93LW5vLXN1YnNjcmlwdGlvbnMKICAgICkKCiAgICBsb2cgIlJ1bm5pbmcgYXogbG9naW4gd2l0aCByZXRyaWVzIgogICAgcmV0cnkgY21kIHJldHJ5X3RpbWUKCiAgICAjIFN1cHByZXNzIGVtdWxhdGlvbiBvdXRwdXQgZm9yIHBvZG1hbiBpbnN0ZWFkIG9mIGRvY2tlciBmb3IgYXogYWNyIGNvbXBhdGFiaWxpdHkKICAgIG1rZGlyIC1wIC9ldGMvY29udGFpbmVycy8KICAgIG1rZGlyIC1wIC9yb290Ly5kb2NrZXIKICAgIHRvdWNoIC9ldGMvY29udGFpbmVycy9ub2RvY2tlcgoKICAgICMgVGhpcyBuYW1lIGlzIHVzZWQgaW4gdGhlIGNhc2UgdGhhdCBheiBhY3IgbG9naW4gc2VhcmNoZXMgZm9yIHRoaXMgaW4gaXQncyBlbnZpcm9ubWVudAogICAgZXhwb3J0IFJFR0lTVFJZX0FVVEhfRklMRT0iL3Jvb3QvLmRvY2tlci9jb25maWcuanNvbiIKCiAgICBpZiBbIC1uICIke3JlZ2lzdHJ5X2NvbmZ9IiBdOyB0aGVuCiAgICAgICAgd3JpdGVfZmlsZSBSRUdJU1RSWV9BVVRIX0ZJTEUgcmVnaXN0cnlfY29uZiB0cnVlCiAgICBmaQoKICAgIGxvZyAibG9nZ2luZyBpbnRvIHByb2QgYWNyIgogICAgY21kPSgKICAgICAgICBhegogICAgICAgIGFjcgogICAgICAgIGxvZ2luCiAgICAgICAgLS1uYW1lCiAgICAgICAgIyBUT0RPIHJlcGxhY2UgdGhpcyB3aXRoIHZhcmlhYmxlIGV4cGFuc2lvbgogICAgICAgICMgUmVmZXJlbmNlOiBodHRwczovL3d3dy5zaGVsbGNoZWNrLm5ldC93aWtpL1NDMjAwMQogICAgICAgICIkKHNlZCAtZSAnc3wuKi98fCcgPDw8IiRBQ1JSRVNPVVJDRUlEIikiCiAgICApCgogICAgcmV0cnkgY21kIHJldHJ5X3RpbWUKCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwNjgKICAgIGZvciBpIGluICR7cHVsbF9pbWFnZXNbQF19OyBkbwogICAgICAgIGxvY2FsIC1uIGltYWdlPSIkaSIKICAgICAgICBjbWQ9KAogICAgICAgICAgICBwb2RtYW4KICAgICAgICAgICAgcHVsbAogICAgICAgICAgICAiJGltYWdlIgogICAgICAgICkKCiAgICAgICAgbG9nICJQdWxsaW5nIGltYWdlICRpbWFnZSB3aXRoIHJldHJpZXMgbm93IgogICAgICAgIHJldHJ5IGNtZCByZXRyeV90aW1lCiAgICBkb25lCgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBjbWQ9KAogICAgICAgIGF6CiAgICAgICAgbG9nb3V0CiAgICApCgogICAgbG9nICJSdW5uaW5nIGF6IGxvZ291dCB3aXRoIHJldHJpZXMiCiAgICByZXRyeSBjbWQgcmV0cnlfdGltZQp9CgojIGNvbmZpZ3VyZV9jZXJ0c19nZW5lcmFsIENvbmZpZ3VyZSBzeXN0ZW0gY2VydGlmaWNhdGVzIGNvbW1vbiB0byBhbGwgVk1TUyBpbnN0YW5jZXMKY29uZmlndXJlX2NlcnRzX2dlbmVyYWwoKSB7CiAgICBsb2cgInN0YXJ0aW5nIgoKICAgICMgc2V0dGluZyBNT05JVE9SSU5HX0dDU19BVVRIX0lEX1RZUEU9QXV0aEtleVZhdWx0IHNlZW1zIHRvIGhhdmUgY2F1c2VkIG1kc2Qgbm90CiAgICAjIHRvIGhvbm91ciBTU0xfQ0VSVF9GSUxFIGFueSBtb3JlLCBoZWF2ZW4gb25seSBrbm93cyB3aHkuCiAgICBsb2NhbCAtciBzc2xfY2VydHNfYmFzZWRpcj0iL3Vzci9saWIvc3NsL2NlcnRzIgogICAgbWtkaXIgLXAgIiRzc2xfY2VydHNfYmFzZWRpciIKICAgIGNzcGxpdCAtZiAiJHNzbF9jZXJ0c19iYXNlZGlyL2NlcnQtIiAtYiAlMDNkLnBlbSAvZXRjL3BraS90bHMvY2VydHMvY2EtYnVuZGxlLmNydCAvXiQvMSAieyp9IiAxPi9kZXYvbnVsbAogICAgY19yZWhhc2ggIiRzc2xfY2VydHNfYmFzZWRpciIKfQoKIyBjb25maWd1cmVfY2VydHNfcnAgQ29uZmlndXJlIHN5c3RlbSBjZXJ0aWZpY2F0ZXMgZm9yIFJQIFZNU1MKIyBhcmdzOgpjb25maWd1cmVfY2VydHNfcnAoKSB7CiAgICBsb2cgInN0YXJ0aW5nIgoKICAgIHZlcmlmeV9yb2xlIHJvbGVfcnAKCiAgICBsb2NhbCAtciBycF9jZXJ0c19iYXNlZGlyPSIvZXRjL2Fyby1ycCIKICAgIG1rZGlyIC1wICIkcnBfY2VydHNfYmFzZWRpciIKICAgIGJhc2U2NCAtZCA8PDwiJEFETUlOQVBJQ0FCVU5ETEUiID4gIiRycF9jZXJ0c19iYXNlZGlyL2FkbWluLWNhLWJ1bmRsZS5wZW0iCiAgICBpZiBbWyAtbiAiJEFSTUFQSUNBQlVORExFIiBdXTsgdGhlbgogICAgYmFzZTY0IC1kIDw8PCIkQVJNQVBJQ0FCVU5ETEUiID4gIiRycF9jZXJ0c19iYXNlZGlyL2FybS1jYS1idW5kbGUucGVtIgogICAgZmkKICAgIGNob3duIC1SIDEwMDA6MTAwMCAiJHJwX2NlcnRzX2Jhc2VkaXIiCgogICAgY29uZmlndXJlX2NlcnRzX2dlbmVyYWwKfQoKIyBjb25maWd1cmVfY2VydHNfZ2F0ZXdheSBDb25maWd1cmUgc3lzdGVtIGNlcnRpZmljYXRlcyBmb3IgR2F0ZXdheSBWTVNTIGluc3RhbmNlcwpjb25maWd1cmVfY2VydHNfZ2F0ZXdheSgpIHsKICAgIGxvZyAic3RhcnRpbmciCgogICAgdmVyaWZ5X3JvbGUgcm9sZV9nYXRld2F5CiAgICBjb25maWd1cmVfY2VydHNfZ2VuZXJhbAp9CgojIGNvbmZpZ3VyZV9jZXJ0c19kZXZwcm94eSBDb25maWd1cmUgc3lzdGVtIGNlcnRpZmljYXRlcyBmb3IgZGV2cHJveHkgVk1TUyBpbnN0YW5jZXMKY29uZmlndXJlX2NlcnRzX2RldnByb3h5KCkgewogICAgbG9nICJzdGFydGluZyIKCiAgICB2ZXJpZnlfcm9sZSByb2xlX2RldnByb3h5CgogICAgbG9jYWwgLXIgcHJveHlfY2VydHNfYmFzZWRpcj0iL2V0Yy9wcm94eSIKICAgIG1rZGlyIC1wICIkcHJveHlfY2VydHNfYmFzZWRpciIKICAgIGJhc2U2NCAtZCA8PDwiJFBST1hZQ0VSVCIgPiAiJHByb3h5X2NlcnRzX2Jhc2VkaXIvcHJveHkuY3J0IgogICAgYmFzZTY0IC1kIDw8PCIkUFJPWFlLRVkiID4gIiRwcm94eV9jZXJ0c19iYXNlZGlyL3Byb3h5LmtleSIKICAgIGJhc2U2NCAtZCA8PDwiJFBST1hZQ0xJRU5UQ0VSVCIgPiAiJHByb3h5X2NlcnRzX2Jhc2VkaXIvcHJveHktY2xpZW50LmNydCIKICAgIGNob3duIC1SIDEwMDA6MTAwMCAvZXRjL3Byb3h5CiAgICBjaG1vZCAwNjAwICIkcHJveHlfY2VydHNfYmFzZWRpci9wcm94eS5rZXkiCn0KCmNvbmZpZ3VyZV9henNlY2Rfc2NhbigpIHsKICAgIGxvZyAic3RhcnRpbmciCgogICAgIyB3ZSBsZWF2ZSBjbGllbnRJZCBibGFuayBhcyBsb25nIGFzIG9ubHkgMSBtYW5hZ2VkIGlkZW50aXR5IGFzc2lnbmVkIHRvIHZtc3MKICAgICMgaWYgd2UgaGF2ZSBtb3JlIHRoYW4gMSwgd2Ugd2lsbCBuZWVkIHRvIHBvcHVsYXRlIHdpdGggY2xpZW50SWQgdXNlZCBmb3Igb2ZmLW5vZGUgc2Nhbm5pbmcKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgbm9kZXNjYW5fYWdlbnRfZmlsZW5hbWU9Ii9ldGMvZGVmYXVsdC92c2Etbm9kZXNjYW4tYWdlbnQuY29uZmlnIgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciBub2Rlc2Nhbl9hZ2VudF9maWxlPSJ7CiAgICBcIk5pY2VcIjogMTksCiAgICBcIlRpbWVvdXRcIjogMTA4MDAsCiAgICBcIkNsaWVudElkXCI6IFwiXCIsCiAgICBcIlRlbmFudElkXCI6ICRBWlVSRVNFQ1BBQ0tWU0FURU5BTlRJRCwKICAgIFwiUXVhbHlzU3RvcmVCYXNlVXJsXCI6ICRBWlVSRVNFQ1BBQ0tRVUFMWVNVUkwsCiAgICBcIlByb2Nlc3NUaW1lb3V0XCI6IDMwMCwKICAgIFwiQ29tbWFuZERlbGF5XCI6IDAKICB9IgoKICAgIHdyaXRlX2ZpbGUgbm9kZXNjYW5fYWdlbnRfZmlsZW5hbWUgbm9kZXNjYW5fYWdlbnRfZmlsZSB0cnVlCn0KCiMgcnVuX2F6c2VjZF9jb25maWdfc2NhbgpydW5fYXpzZWNkX2NvbmZpZ19zY2FuKCkgewogICAgbG9nICJzdGFydGluZyIKCiAgICBjb25maWd1cmVfYXpzZWNkX3NjYW4KCiAgICBsb2NhbCAtYXIgY29uZmlncz0oCiAgICAgICAgImJhc2VsaW5lIgogICAgICAgICJjbGFtYXYiCiAgICAgICAgInNvZnR3YXJlIgogICAgKQoKICAgIGxvZyAiU2Nhbm5pbmcgY29uZmlndXJhdGlvbiBmaWxlcyB3aXRoIGF6c2VjZCAke2NvbmZpZ3NbKl19IgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDY4CiAgICBmb3Igc2NhbiBpbiAke2NvbmZpZ3NbQF19OyBkbwogICAgICAgIGxvZyAiU2Nhbm5pbmcgY29uZmlnIGZpbGUgJHNjYW4gbm93IgogICAgICAgIC91c3IvbG9jYWwvYmluL2F6c2VjZCBjb25maWcgLXMgIiRzY2FuIiAtZCBQMUQKICAgIGRvbmUKfQoKIyBjcmVhdGVfcmVxdWlyZWRfZGlycwpjcmVhdGVfcmVxdWlyZWRfZGlycygpIHsKICAgIGNyZWF0ZV9kaXJzPSgKICAgICAgICAvdmFyL2xvZy9qb3VybmFsCiAgICAgICAgL3Zhci9saWIvd2FhZ2VudC9NaWNyb3NvZnQuQXp1cmUuS2V5VmF1bHQuU3RvcmUKICAgICAgICAjIERvZXMgbm90IGV4aXN0IG9uIGRldlByb3h5Vk1TUwogICAgICAgIC92YXIvb3B0L21pY3Jvc29mdC9saW51eG1vbmFnZW50CiAgICApCgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDY4CiAgICBmb3IgZCBpbiAke2NyZWF0ZV9kaXJzW0BdfTsgZG8KICAgICAgICBsb2cgIkNyZWF0aW5nIGRpcmVjdG9yeSAkZCIKICAgICAgICBta2RpciAtcCAiJGQiIHx8IGFib3J0ICJmYWlsZWQgdG8gY3JlYXRlIGRpcmVjdG9yeSAkZCIKICAgIGRvbmUKfQoKIyBmaXJld2FsbGRfY29uZmlndXJlX2JhY2tlbmQKZmlyZXdhbGxkX2NvbmZpZ3VyZV9iYWNrZW5kKCkgewogICAgbG9nICJzdGFydGluZyIKCiAgICBsb2cgIkNoYW5naW5nIGZpcmV3YWxsZCBiYWNrZW5kIHRvIGlwdGFibGVzIgogICAgY29uZl9maWxlPSIvZXRjL2ZpcmV3YWxsZC9maXJld2FsbGQuY29uZiIKICAgIHNlZCAtaSAncy9GaXJld2FsbEJhY2tlbmQ9bmZ0YWJsZXMvRmlyZXdhbGxCYWNrZW5kPWlwdGFibGVzL2cnICIkY29uZl9maWxlIgp9CgojIGZpcmV3YWxsZF9jb25maWd1cmUKIyBhcmdzOgojIDEpIHBvcnRzIC0gbmFtZXJlZiwgc3RyaW5nIGFycmF5OyBwb3J0cyB0byBiZSBlbmFibGVkLgojICAgICAgIFBvcnRzIG11c3QgYmUgcG9zdGZpeGVkIHdpdGggL3RjcCBvciAvdWRwCmZpcmV3YWxsZF9jb25maWd1cmUoKSB7CiAgICBsb2NhbCAtbiBwb3J0cz0iJDEiCiAgICBsb2cgInN0YXJ0aW5nIgoKICAgIGZpcmV3YWxsZF9jb25maWd1cmVfYmFja2VuZAoKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXJhIHNlcnZpY2U9KAogICAgICAgICJmaXJld2FsbGQiCiAgICApCiAgICBlbmFibGVfc2VydmljZXMgc2VydmljZQoKICAgIGxvZyAiRW5hYmxpbmcgcG9ydHMgJHtwb3J0c1sqXX0gb24gZGVmYXVsdCBmaXJld2FsbGQgem9uZSIKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjA2OAogICAgZm9yIHBvcnQgaW4gJHtwb3J0c1tAXX07IGRvCiAgICAgICAgbG9nICJFbmFibGluZyBwb3J0ICRwb3J0IG5vdyIKICAgICAgICBmaXJld2FsbC1jbWQgIi0tYWRkLXBvcnQ9JHBvcnQiIFwKICAgICAgICAgICAgICAgICAgICAgLS1wZXJtYW5lbnQKICAgIGRvbmUKCiAgICBsb2cgIldyaXRpbmcgcnVudGltZSBjb25maWcgdG8gcGVybWFuZW50IGNvbmZpZyIKICAgIGZpcmV3YWxsLWNtZCAtLXJ1bnRpbWUtdG8tcGVybWFuZW50Cn0KCiMgdXRpbC1jb21tb24uc2ggZG9lcyBub3QgZXhpc3Qgd2hlbiBkZXBsb3llZCB0byBWTVNTIHZpYSBWTVNTIGV4dGVuc2lvbnMKIyBQcm92aWRlcyBzaGVsbGNoZWNrIGRlZmluaXRpb25zCnV0aWxfY29tbW9uPSJ1dGlsLWNvbW1vbi5zaCIKaWYgWyAtZiAiJHV0aWxfY29tbW9uIiBdOyB0aGVuCiAgICAjIHNoZWxsY2hlY2sgc291cmNlPXV0aWwtY29tbW9uLnNoCiAgICBzb3VyY2UgIiR1dGlsX2NvbW1vbiIKZmkKIyEvYmluL2Jhc2gKCnNldCAtbyBlcnJleGl0IFwKICAgIC1vIHBpcGVmYWlsIFwKICAgIC1vIG5vdW5zZXQKCm1haW4oKSB7CiAgICAjIHRyYW5zYWN0aW9uIGF0dGVtcHQgcmV0cnkgdGltZSBpbiBzZWNvbmRzCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yaSByZXRyeV93YWl0X3RpbWU9MzAKICAgIGxvY2FsIC1yaSBwa2dfcmV0cnlfY291bnQ9NjAKCiAgICBjcmVhdGVfcmVxdWlyZWRfZGlycwogICAgY29uZmlndXJlX3NzaGQKICAgIGNvbmZpZ3VyZV9ycG1fcmVwb3MgcmV0cnlfd2FpdF90aW1lIFwKICAgICAgICAgICAgICAgICAgICAgICAgIiRwa2dfcmV0cnlfY291bnQiCgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtYXIgZXhjbHVkZV9wa2dzPSgKICAgICAgICAiLXggV0FMaW51eEFnZW50IgogICAgICAgICIteCBXQUxpbnV4QWdlbnQtdWRldiIKICAgICkKCiAgICBkbmZfdXBkYXRlX3BrZ3MgZXhjbHVkZV9wa2dzIFwKICAgICAgICAgICAgICAgICAgICByZXRyeV93YWl0X3RpbWUgXAogICAgICAgICAgICAgICAgICAgICIkcGtnX3JldHJ5X2NvdW50IgoKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXJhIGluc3RhbGxfcGtncz0oCiAgICAgICAgYXp1cmUtY2xpCiAgICAgICAgYXp1cmUtbWRzZAogICAgICAgIHBvZG1hbgogICAgICAgIHBvZG1hbi1kb2NrZXIKICAgICAgICBvcGVuc3NsLXBlcmwKICAgICAgICAjIGhhY2sgLSB3ZSBhcmUgaW5zdGFsbGluZyBweXRob24zIG9uIGhvc3RzIGR1ZSB0byBhbiBpc3N1ZSB3aXRoIEF6dXJlIExpbnV4IEV4dGVuc2lvbnMgaHR0cHM6Ly9naXRodWIuY29tL0F6dXJlL2F6dXJlLWxpbnV4LWV4dGVuc2lvbnMvcHVsbC8xNTA1CiAgICAgICAgcHl0aG9uMwogICAgICAgICMgcmVxdWlyZWQgZm9yIHBvZG1hbiBuZXR3b3JraW5nCiAgICAgICAgZmlyZXdhbGxkCiAgICAgICAgIyBSZXF1aXJlZCB0byBlbmFibGUgZmlwcwogICAgICAgIGdydWJieQogICAgICAgIGRyYWN1dC1maXBzCiAgICApCgogICAgZG5mX2luc3RhbGxfcGtncyBpbnN0YWxsX3BrZ3MgXAogICAgICAgICAgICAgICAgICAgICAgcmV0cnlfd2FpdF90aW1lIFwKICAgICAgICAgICAgICAgICAgICAgICIkcGtnX3JldHJ5X2NvdW50IgoKICAgIGZpcHNfY29uZmlndXJlCgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMTE5CiAgICBjb25maWd1cmVfbG9ncm90YXRlCgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMTUzIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciBtZG1pbWFnZT0iJHtSUElNQUdFJSUvKn0vJHtNRE1JTUFHRSMqL30iCiAgICBsb2NhbCAtciBycGltYWdlPSIkUlBJTUFHRSIKICAgIGxvY2FsIC1yIG1pc2VpbWFnZT0iJHtSUElNQUdFJSUvKn0vJHtNSVNFSU1BR0UjKi99IgogICAgbG9jYWwgLXIgb3RlbGltYWdlPSIkT1RFTElNQUdFIgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciBmbHVlbnRiaXRfaW1hZ2U9IiRGTFVFTlRCSVRJTUFHRSIKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXJBIGFyb19pbWFnZXM9KAogICAgICAgIFsibWRtIl09Im1kbWltYWdlIgogICAgICAgIFsicnAiXT0icnBpbWFnZSIKICAgICAgICBbImZsdWVudGJpdCJdPSJmbHVlbnRiaXRfaW1hZ2UiCiAgICAgICAgWyJtaXNlIl09Im1pc2VpbWFnZSIKICAgICAgICBbIm90ZWwiXT0ib3RlbGltYWdlIgogICAgKQoKICAgIHB1bGxfY29udGFpbmVyX2ltYWdlcyBhcm9faW1hZ2VzCgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtcmEgZW5hYmxlX3BvcnRzPSgKICAgICAgICAjIFJQIGZyb250ZW5kCiAgICAgICAgIjQ0My90Y3AiCiAgICAgICAgIyBQb3J0YWwgd2ViCiAgICAgICAgIjQ0NC90Y3AiCiAgICAgICAgIyBNSU1PIEFjdHVhdG9yIGhlYWx0aHoKICAgICAgICAiNDQ1L3RjcCIKICAgICAgICAjIE1JTU8gU2NoZWR1bGVyIGhlYWx0aHoKICAgICAgICAiNDQ2L3RjcCIKICAgICAgICAjIFBvcnRhbCBzc2gKICAgICAgICAiMjIyMi90Y3AiCiAgICAgICAgIyBKSVQgc3NoCiAgICAgICAgIjIyL3RjcCIKICAgICkKCiAgICBmaXJld2FsbGRfY29uZmlndXJlIGVuYWJsZV9wb3J0cwoKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzNAogICAgbG9jYWwgLXIgZmx1ZW50Yml0X2NvbmZfZmlsZT0iW0lOUFVUXQoJTmFtZSBzeXN0ZW1kCglUYWcgam91cm5hbGQKCVN5c3RlbWRfRmlsdGVyIF9DT01NPWFybwoJREIgL3Zhci9saWIvZmx1ZW50L2pvdXJuYWxkYgoKW0lOUFVUXQoJTmFtZSBzeXN0ZW1kCglUYWcgam91cm5hbGQKCVN5c3RlbWRfRmlsdGVyIF9TWVNURU1EX1VOSVQ9YXJvLW1pc2Uuc2VydmljZQoJREIgL3Zhci9saWIvZmx1ZW50L2pvdXJuYWxkYgoKW0lOUFVUXQoJTmFtZSBzeXN0ZW1kCglUYWcgam91cm5hbGQKCVN5c3RlbWRfRmlsdGVyIF9TWVNURU1EX1VOSVQ9YXJvLW90ZWwtY29sbGVjdG9yLnNlcnZpY2UKCURCIC92YXIvbGliL2ZsdWVudC9qb3VybmFsZGIKCltGSUxURVJdCglOYW1lIG1vZGlmeQoJTWF0Y2ggam91cm5hbGQKCVJlbW92ZV93aWxkY2FyZCBfCglSZW1vdmUgVElNRVNUQU1QCgpbRklMVEVSXQoJTmFtZSByZXdyaXRlX3RhZwoJTWF0Y2ggam91cm5hbGQKCVJ1bGUgXCRMT0dLSU5EIGFzeW5jcW9zIGFzeW5jcW9zIHRydWUKCltGSUxURVJdCglOYW1lIG1vZGlmeQoJTWF0Y2ggYXN5bmNxb3MKCVJlbW92ZSBDTElFTlRfUFJJTkNJUEFMX05BTUUKCVJlbW92ZSBGSUxFCglSZW1vdmUgQ09NUE9ORU5UCgpbRklMVEVSXQoJTmFtZSByZXdyaXRlX3RhZwoJTWF0Y2ggam91cm5hbGQKCVJ1bGUgXCRMT0dLSU5EIGlmeGF1ZGl0IGlmeGF1ZGl0IGZhbHNlCgpbT1VUUFVUXQoJTmFtZSBmb3J3YXJkCglNYXRjaCAqCglQb3J0IDI5MjMwIgoKICAgICMgdmFsdWVzIGFyZSByZWZlcmVuY2VzIHRvIHZhcmlhYmxlcywgdGhleSBzaG91bGQgbm90IGJlIGRlcmVmZXJlbmNlZCBoZXJlCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yQSBhcm9fY29uZmlncz0oCiAgICAgICAgWyJycF9jb25maWciXT0iYXJvX3JwX2NvbmZfZmlsZSIKICAgICAgICBbImZsdWVudGJpdCJdPSJmbHVlbnRiaXRfY29uZl9maWxlIgogICAgICAgIFsibWRzZCJdPSJtZHNkX2NvbmZpZ192ZXJzaW9uIgogICAgICAgIFsic3RhdGljX2lwX2FkZHJlc3MiXT0ic3RhdGljX2lwX2FkZHJlc3NlcyIKICAgICkKCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgICMgdXNlIGRlZmF1bHQgcG9kbWFuIG5ldHdvcmsgd2l0aCByYW5nZSAxMC44OC4wLjAvMTYKICAgICMgc3RhdGljIElQcyB1c2VkIGZvciB1bmlxdWVseSBpZGVudGlmeWluZyBzZXJ2aWNlcyBpbiBtb25pdG9ycwogICAgbG9jYWwgLXJBIHN0YXRpY19pcF9hZGRyZXNzZXM9KAogICAgICAgIFsicnAiXT0iMTAuODguMC4yIgogICAgICAgIFsibW9uaXRvciJdPSIxMC44OC4wLjMiCiAgICAgICAgWyJwb3J0YWwiXT0iMTAuODguMC40IgogICAgICAgIFsibWltb19hY3R1YXRvciJdPSIxMC44OC4wLjEwIgogICAgICAgIFsibWltb19zY2hlZHVsZXIiXT0iMTAuODguMC4xMSIKICAgICAgICBbIm1pc2UiXT0iMTAuODguMC41IgogICAgICAgIFsib3RlbF9jb2xsZWN0b3IiXT0iMTAuODguMC42IgogICAgICAgIFsibWRtIl09IjEwLjg4LjAuOCIKICAgICkKCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzQKICAgIGxvY2FsIC1yIG1kc2RfY29uZmlnX3ZlcnNpb249IiRSUE1EU0RDT05GSUdWRVJTSU9OIgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtciBhcm9fcnBfY29uZl9maWxlPSJBQ1JfUkVTT1VSQ0VfSUQ9JyRBQ1JSRVNPVVJDRUlEJwpBRE1JTl9BUElfQ0xJRU5UX0NFUlRfQ09NTU9OX05BTUU9JyRBRE1JTkFQSUNMSUVOVENFUlRDT01NT05OQU1FJwpBUk1fQVBJX0NMSUVOVF9DRVJUX0NPTU1PTl9OQU1FPSckQVJNQVBJQ0xJRU5UQ0VSVENPTU1PTk5BTUUnCkFaVVJFX0FSTV9DTElFTlRfSUQ9JyRBUk1DTElFTlRJRCcKQVpVUkVfRlBfQ0xJRU5UX0lEPSckRlBDTElFTlRJRCcKQVpVUkVfRlBfU0VSVklDRV9QUklOQ0lQQUxfSUQ9JyRGUFNFUlZJQ0VQUklOQ0lQQUxJRCcKQ0xVU1RFUl9NRE1fQUNDT1VOVD0nJENMVVNURVJNRE1BQ0NPVU5UJwpDTFVTVEVSX01ETV9OQU1FU1BBQ0U9UlAKQ0xVU1RFUl9NRFNEX0FDQ09VTlQ9JyRDTFVTVEVSTURTREFDQ09VTlQnCkNMVVNURVJfTURTRF9DT05GSUdfVkVSU0lPTj0nJENMVVNURVJNRFNEQ09ORklHVkVSU0lPTicKQ0xVU1RFUl9NRFNEX05BTUVTUEFDRT0nJENMVVNURVJNRFNETkFNRVNQQUNFJwpEQVRBQkFTRV9BQ0NPVU5UX05BTUU9JyREQVRBQkFTRUFDQ09VTlROQU1FJwpET01BSU5fTkFNRT0nJExPQ0FUSU9OLiRDTFVTVEVSUEFSRU5URE9NQUlOTkFNRScKR0FURVdBWV9ET01BSU5TPSckR0FURVdBWURPTUFJTlMnCkdBVEVXQVlfUkVTT1VSQ0VHUk9VUD0nJEdBVEVXQVlSRVNPVVJDRUdST1VQTkFNRScKS0VZVkFVTFRfUFJFRklYPSckS0VZVkFVTFRQUkVGSVgnCk1ETV9BQ0NPVU5UPSckUlBNRE1BQ0NPVU5UJwpNRE1fTkFNRVNQQUNFPScke3JvbGVfcnBeXn0nCk1EU0RfRU5WSVJPTk1FTlQ9JyRNRFNERU5WSVJPTk1FTlQnCk1JU0VfQUREUkVTUz0naHR0cDovLyR7c3RhdGljX2lwX2FkZHJlc3Nlc1sibWlzZSJdfTo1MDAwJwpSUF9GRUFUVVJFUz0nJFJQRkVBVFVSRVMnClJQSU1BR0U9JyRycGltYWdlJwpBUk9fSU5TVEFMTF9WSUFfSElWRT0nJENMVVNURVJTSU5TVEFMTFZJQUhJVkUnCkFST19ISVZFX0RFRkFVTFRfSU5TVEFMTEVSX1BVTExTUEVDPSckQ0xVU1RFUkRFRkFVTFRJTlNUQUxMRVJQVUxMU1BFQycKQVJPX0FET1BUX0JZX0hJVkU9JyRDTFVTVEVSU0FET1BUQllISVZFJwpPSURDX0FGRF9FTkRQT0lOVD0nJExPQ0FUSU9OLm9pYy4kUlBQQVJFTlRET01BSU5OQU1FJwpPSURDX1NUT1JBR0VfQUNDT1VOVF9OQU1FPSckT0lEQ1NUT1JBR0VBQ0NPVU5UTkFNRScKT1RFTF9BVURJVF9RVUVVRV9TSVpFPSckT1RFTEFVRElUUVVFVUVTSVpFJwpNU0lfUlBfRU5EUE9JTlQ9JyRNU0lSUEVORFBPSU5UJwoiCgogICAgY29uZmlndXJlX3Ztc3NfYXJvX3NlcnZpY2VzIHJvbGVfcnAgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyb19pbWFnZXMgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyb19jb25maWdzCgogICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDM0CiAgICBsb2NhbCAtcmEgYXJvX3NlcnZpY2VzPSgKICAgICAgICAiYXJvLW1pc2UiCiAgICAgICAgImFyby1tb25pdG9yIgogICAgICAgICJhcm8tb3RlbC1jb2xsZWN0b3IiCiAgICAgICAgImFyby1wb3J0YWwiCiAgICAgICAgImFyby1taW1vLWFjdHVhdG9yIgogICAgICAgICJhcm8tbWltby1zY2hlZHVsZXIiCiAgICAgICAgImFyby1ycCIKICAgICAgICAiYXpzZWNkIgogICAgICAgICJtZHNkIgogICAgICAgICJtZG0iCiAgICAgICAgImNocm9ueWQiCiAgICAgICAgImZsdWVudGJpdCIKICAgICAgICAiZG93bmxvYWQtbWRzZC1jcmVkZW50aWFscy50aW1lciIKICAgICAgICAiZG93bmxvYWQtbWRtLWNyZWRlbnRpYWxzLnRpbWVyIgogICAgICAgICJmaXJld2FsbGQiCiAgICApCgogICAgZW5hYmxlX3NlcnZpY2VzIGFyb19zZXJ2aWNlcwoKICAgIHJlYm9vdF92bQp9CgojIFRoaXMgdmFyaWFibGUgaXMgdXNlZCBieSBhei1jbGkKIyBJdCdzIGFzc3VtZWQgdGhhdCBpZiB0aGlzIHZhcmlhYmxlIGhhc24ndCBiZWVuIGNhcnJpZWQgb3ZlciwgdGhhdCBvdGhlcnMgYXJlIGFsc28gbm90IHByZXNlbnQsIHNvIHdlIGZhaWwgZWFybHkgYnkgcmV0dXJuaW5nIGFuIGVycm9yCiMgVGhpcyB3YXMgbW9zdGx5IGhlbHBmdWwgd2hlbiB0ZXN0aW5nIG9uIGEgZGV2ZWxvcG1lbnQgVk0sIGJ1dCBpcyBzdGlsbCBhcHBsaWNhYmxlCmV4cG9ydCBBWlVSRV9DTE9VRF9OQU1FPSIke0FaVVJFQ0xPVUROQU1FOj8iRmFpbGVkIHRvIGNhcnJ5IG92ZXIgdmFyaWFibGVzIn0iCgojIHV0aWwuc2ggZG9lcyBub3QgZXhpc3Qgd2hlbiBkZXBsb3llZCB0byBWTVNTIHZpYSBWTVNTIGV4dGVuc2lvbnMKIyBQcm92aWRlcyBzaGVsbGNoZWNrIGRlZmluaXRpb25zCnV0aWw9InV0aWwuc2giCmlmIFsgLWYgIiR1dGlsIiBdOyB0aGVuCiAgICAjIHNoZWxsY2hlY2sgc291cmNlPXV0aWwuc2gKICAgIHNvdXJjZSAiJHV0aWwiCmZpCgptYWluICIkQCIK')))]" + "script": "[base64(concat(base64ToString('c2V0IC1leAoK'),'ACRRESOURCEID=$(base64 -d \u003c\u003c\u003c''',base64(parameters('acrResourceId')),''')\n','ADMINAPICLIENTCERTCOMMONNAME=$(base64 -d \u003c\u003c\u003c''',base64(parameters('adminApiClientCertCommonName')),''')\n','ARMAPICLIENTCERTCOMMONNAME=$(base64 -d \u003c\u003c\u003c''',base64(parameters('armApiClientCertCommonName')),''')\n','ARMCLIENTID=$(base64 -d \u003c\u003c\u003c''',base64(parameters('armClientId')),''')\n','AZURECLOUDNAME=$(base64 -d \u003c\u003c\u003c''',base64(parameters('azureCloudName')),''')\n','AZURESECPACKQUALYSURL=$(base64 -d \u003c\u003c\u003c''',base64(parameters('azureSecPackQualysUrl')),''')\n','AZURESECPACKVSATENANTID=$(base64 -d \u003c\u003c\u003c''',base64(parameters('azureSecPackVSATenantId')),''')\n','CLUSTERMDMACCOUNT=$(base64 -d \u003c\u003c\u003c''',base64(parameters('clusterMdmAccount')),''')\n','CLUSTERMDSDACCOUNT=$(base64 -d \u003c\u003c\u003c''',base64(parameters('clusterMdsdAccount')),''')\n','CLUSTERMDSDCONFIGVERSION=$(base64 -d \u003c\u003c\u003c''',base64(parameters('clusterMdsdConfigVersion')),''')\n','CLUSTERMDSDNAMESPACE=$(base64 -d \u003c\u003c\u003c''',base64(parameters('clusterMdsdNamespace')),''')\n','CLUSTERPARENTDOMAINNAME=$(base64 -d \u003c\u003c\u003c''',base64(parameters('clusterParentDomainName')),''')\n','DATABASEACCOUNTNAME=$(base64 -d \u003c\u003c\u003c''',base64(parameters('databaseAccountName')),''')\n','FLUENTBITIMAGE=$(base64 -d \u003c\u003c\u003c''',base64(parameters('fluentbitImage')),''')\n','FPCLIENTID=$(base64 -d \u003c\u003c\u003c''',base64(parameters('fpClientId')),''')\n','FPTENANTID=$(base64 -d \u003c\u003c\u003c''',base64(parameters('fpTenantId')),''')\n','FPSERVICEPRINCIPALID=$(base64 -d \u003c\u003c\u003c''',base64(parameters('fpServicePrincipalId')),''')\n','GATEWAYDOMAINS=$(base64 -d \u003c\u003c\u003c''',base64(parameters('gatewayDomains')),''')\n','GATEWAYRESOURCEGROUPNAME=$(base64 -d \u003c\u003c\u003c''',base64(parameters('gatewayResourceGroupName')),''')\n','GATEWAYSERVICEPRINCIPALID=$(base64 -d \u003c\u003c\u003c''',base64(parameters('gatewayServicePrincipalId')),''')\n','KEYVAULTDNSSUFFIX=$(base64 -d \u003c\u003c\u003c''',base64(parameters('keyvaultDNSSuffix')),''')\n','KEYVAULTPREFIX=$(base64 -d \u003c\u003c\u003c''',base64(parameters('keyvaultPrefix')),''')\n','MDMFRONTENDURL=$(base64 -d \u003c\u003c\u003c''',base64(parameters('mdmFrontendUrl')),''')\n','MDSDENVIRONMENT=$(base64 -d \u003c\u003c\u003c''',base64(parameters('mdsdEnvironment')),''')\n','MSIRPENDPOINT=$(base64 -d \u003c\u003c\u003c''',base64(parameters('msiRpEndpoint')),''')\n','PORTALACCESSGROUPIDS=$(base64 -d \u003c\u003c\u003c''',base64(parameters('portalAccessGroupIds')),''')\n','PORTALCLIENTID=$(base64 -d \u003c\u003c\u003c''',base64(parameters('portalClientId')),''')\n','PORTALELEVATEDGROUPIDS=$(base64 -d \u003c\u003c\u003c''',base64(parameters('portalElevatedGroupIds')),''')\n','RPFEATURES=$(base64 -d \u003c\u003c\u003c''',base64(parameters('rpFeatures')),''')\n','RPIMAGE=$(base64 -d \u003c\u003c\u003c''',base64(parameters('rpImage')),''')\n','RPMDMACCOUNT=$(base64 -d \u003c\u003c\u003c''',base64(parameters('rpMdmAccount')),''')\n','RPMDSDACCOUNT=$(base64 -d \u003c\u003c\u003c''',base64(parameters('rpMdsdAccount')),''')\n','RPMDSDCONFIGVERSION=$(base64 -d \u003c\u003c\u003c''',base64(parameters('rpMdsdConfigVersion')),''')\n','RPMDSDNAMESPACE=$(base64 -d \u003c\u003c\u003c''',base64(parameters('rpMdsdNamespace')),''')\n','RPPARENTDOMAINNAME=$(base64 -d \u003c\u003c\u003c''',base64(parameters('rpParentDomainName')),''')\n','OIDCSTORAGEACCOUNTNAME=$(base64 -d \u003c\u003c\u003c''',base64(parameters('oidcStorageAccountName')),''')\n','OTELAUDITQUEUESIZE=$(base64 -d \u003c\u003c\u003c''',base64(parameters('otelAuditQueueSize')),''')\n','TOKENCONTRIBUTORROLEID=$(base64 -d \u003c\u003c\u003c''',base64(parameters('tokenContributorRoleID')),''')\n','TOKENCONTRIBUTORROLENAME=$(base64 -d \u003c\u003c\u003c''',base64(parameters('tokenContributorRoleName')),''')\n','RPLOGLEVEL=$(base64 -d \u003c\u003c\u003c''',base64(parameters('rpLogLevel')),''')\n','MONITORLOGLEVEL=$(base64 -d \u003c\u003c\u003c''',base64(parameters('monitorLogLevel')),''')\n','PORTALLOGLEVEL=$(base64 -d \u003c\u003c\u003c''',base64(parameters('portalLogLevel')),''')\n','MIMOACTUATORLOGLEVEL=$(base64 -d \u003c\u003c\u003c''',base64(parameters('mimoActuatorLogLevel')),''')\n','MIMOSCHEDULERLOGLEVEL=$(base64 -d \u003c\u003c\u003c''',base64(parameters('mimoSchedulerLogLevel')),''')\n','CLUSTERSINSTALLVIAHIVE=$(base64 -d \u003c\u003c\u003c''',base64(parameters('clustersInstallViaHive')),''')\n','CLUSTERSADOPTBYHIVE=$(base64 -d \u003c\u003c\u003c''',base64(parameters('clustersAdoptByHive')),''')\n','CLUSTERDEFAULTINSTALLERPULLSPEC=$(base64 -d \u003c\u003c\u003c''',base64(parameters('clusterDefaultInstallerPullspec')),''')\n','MISEVALIDAUDIENCES=$(base64 -d \u003c\u003c\u003c''',base64(string(parameters('miseValidAudiences'))),''')\n','MISEVALIDAPPIDS=$(base64 -d \u003c\u003c\u003c''',base64(string(parameters('miseValidAppIDs'))),''')\n','ADMINAPICABUNDLE=''',parameters('adminApiCaBundle'),'''\n','ARMAPICABUNDLE=''',parameters('armApiCaBundle'),'''\n','MDMIMAGE=''/geneva/distroless/mdm:2.202602101834.0-20260211-1@sha256:a581e89744933f30a9f8e2724906fde02e713836fce76afefec7092daa01c064''\n','OTELIMAGE=''mcr.microsoft.com/oss/otel/opentelemetry-collector-contrib:0.95.0-linux-amd64''\n','MISEIMAGE=''/mise:1.0.03103.537-mise-cbl-mariner2.0-distroless''\n','LOCATION=$(base64 -d \u003c\u003c\u003c''',base64(resourceGroup().location),''')\n','SUBSCRIPTIONID=$(base64 -d \u003c\u003c\u003c''',base64(subscription().subscriptionId),''')\n','RESOURCEGROUPNAME=$(base64 -d \u003c\u003c\u003c''',base64(resourceGroup().name),''')\n','\n',base64ToString('\u001f\ufffd\b\u0000\u0000\u0000\u0000\u0000\u0000\ufffd\ufffd}ٚ\ufffd\ufffd\ufffd\ufffd\u0003\ufffd7\f\ufffd$\\\u001al0\ufffdM7\ufffd\u0010\ufffd3\ufffd\ufffd\u0018a\ufffd\ufffdG\ufffd\ufffd\ufffd'\ufffd\ufffd\ufffd\u001dw\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd|I\fH\ufffdR\ufffd\ufffd*\ufffd\ufffd\ufffd\u0014\ufffd\ufffd8\u0017\ufffdu$$\ufffdz)\u001b\ufffd\ufffd\ufffdQ\u003eZ\ufffd\ufffd\ufffd\ufffd\ufffdh\u0013k\ufffd\u0014n\u0017I\ufffd\ufffd2}j\ufffd­\ufffd\u0005\ufffd\ufffd\ufffd\ufffd;\ufffd~\ufffd|s\u001f@\u0003\ufffd\n_\ufffd\u001a8D3{\u0004E\ufffd\ufffd6\\\ufffd'\ufffd\ufffd\ufffd.\u0012\ufffd\ufffd\ufffdx\ufffdW\ufffdh\ufffd\ufffd\ufffd%\ufffd \u001d#\ufffd^\ufffd[\ufffdU/lj\ufffd\ufffd\ufffd\u0018\ufffd\u0018)r\ufffd\ufffd\ufffdyw^\ufffdK\ufffd\ufffdIg\ufffd\ufffd\\\ufffd\ufffd\ufffdh\u001d\ufffd\ufffdD~\ufffd\ufffd\ufffd\ufffd\ufffdh\ufffdkj\ufffdDp@\f\ufffd\ufffd\u003e3wȿ\ufffd\u0003a\ufffd\u0003a\ufffd \r_\u0003\ufffd\ufffd#\ufffdw\ufffd\ufffd~^\\\ufffdW\ufffd\ufffdMH\ufffdsƇ(\ufffdq\be\ufffd\u0003H\ufffdx\ufffdKz\ufffd\ufffdR\ufffd\ufffdp\ufffdP\ufffdױ\u0006\ufffd\u0000f\ufffd\ufffd7\ufffdN\ufffdtA\ufffd\ufffd-5|%\ufffd\ufffd\"ؓ\ufffd G.\ufffd\ufffdp\ufffd\ufffdc \ufffdL׌\ufffd\u003e37Q\ufffd\ufffd\ufffdl\ufffdD\ufffd\ufffdG\ufffdY\ufffdy\ufffd\ufffdں\ufffdJ9_\ufffd\u0017L\ufffd\ufffdri\ufffd\ufffd\ufffd\r\ufffd\ufffdcA\u001d\ufffd;F\ufffdo=)\ufffd\ufffd\ufffd\u0019\ufffdP\u0003+$\ufffd\u001c\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd'\ufffd\u0011\ufffd\ufffd\ufffdc\ufffd\ufffd\ufffd\ufffd\ufffd\u0014w\ufffdn\t\t\\\ufffdS\ufffd_\b\ufffdX\ufffd\u0019\u0018\ufffd\u0004\ufffd\ufffd\r\ufffd\ufffd$\ufffdfI$\ufffd\ufffd\u0012\ufffd\\T\ufffd\ufffdP\u0004e \ufffd#\ufffdׯ\ufffd\"\ufffd\u003c\ufffd\ufffd\ufffd9~\u0006\ufffdc\ufffd\ufffd8\ufffd\ufffde(\ufffd\t\u001e2\u0004\ufffd9ʥ\u0017\ufffd6\u0006w\ufffd~\r\b\ufffd\ufffd8}̲d\ufffdțP\u0018]cM=\ufffd\ufffd\ufffdFW\ufffd\ufffdk*\u001bQ)\ufffd\u0011ً\ufffd}\ufffd5\u001b\ufffd\u001a(C\u001f\u001f\ufffd#\ufffdK\ro\ufffd\ufffd\ufffd\ufffd\ufffdtu\ufffd\u0016\u00033\u001a3N\ufffdh_㙱\ufffdf2F\ufffd\u0007\ufffdo\ufffd\ufffd\ufffd\ufffd\ufffdYO\u0006\ufffd\ufffd\f\\\ufffd\u0010\ufffdb,mBM\ufffdфK-X\ufffdQ\u000e\ufffd\ufffdŧ8\u0007e\ufffd\ufffd8\ufffdZ5}\ufffd\u0011/mC\u0011\ufffd\u0002\ufffdr\ufffd}\ufffd\ufffd5rK\ufffdK\ufffd\\= G\u003e\ufffdT\ufffd}\f\u001c\ufffd3\u0017.\u000f\ufffdn\ufffd\ufffd\ufffd#硨'\u0000,\u0012$H\u0002\ufffd\ufffd1\ufffd\ufffd1Vd\u0006\ufffd\ufffd\u001a\ufffd\u0000o\ufffd\ufffd\u0010\ufffd\u0006\ufffde\u001d\ufffd^2\ufffd\ufffd\ufffdWm\ufffd\ufffdL\u0015\ufffd\ufffd\n\u0026ܥZS\u000b\ufffd\"\u000b\ufffd\ufffd\ufffd#_\ufffd~|\\\ufffdhDq?[sQ\ufffdn\ufffd\ufffd\u001a؇\ufffd{ETJץ\u0026\ufffd\ufffdf%A\ufffd%\ufffd\u00008%\ufffd΋K]]{^\ufffdNl \ufffd6\ufffd\ufffd\ufffdu\ufffd\u0017E\ufffd\u001d\ufffdb\n\ufffd\ufffd\ufffd\ufffd/\ufffdGW\u0004\ufffd\ufffdg\t\ufffd\u000en\ufffd\ufffd\ufffd\u0001\ufffd\ufffd\u001dӳ\ufffd1\ufffd\ufffd\ufffd71\u0014\ufffd\u0015\ufffd\u0026\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd,5\ufffdY\ufffdr\ufffdR\ufffd\ufffd\ufffde \ufffd\ufffd\ufffdq\ufffd\ufffd\ufffdP\ufffd\ufffd\ufffd/\u001d\u0019\r\ufffd#\ufffd\ufffdujx\ufffd\ufffd\ufffd^/\u0007\\\f\ufffdcT\ufffd\u0001P\r\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd:\ufffd\u0001\ufffdk8\ufffdg\u0026\ufffdЗ\ufffd\ufffd\ufffdG\ufffd\ufffdz\ufffd\ufffd\ufffd\ufffdQ*\ufffd\ufffd\ufffd|WT\ufffd\ufffd\ufffd\u0012\ufffd+\ufffdG\ufffdJ\ufffd|\ufffdw\t\u0019o\ufffd\u0007\ufffd\ufffd\ufffd\u0013C\ufffd\ufffdw\ufffd\ufffd\ufffd\ufffd$\ufffdU\u003e~\ufffd4\f\ufffdJ:\ufffd\ufffd\ufffd?\ufffd7w\ufffd\r\ufffd친/-6^\ufffd\u001c\b\ufffd\ufffd\u001d|\ufffdB\ufffd\ufffdY\ufffd\u0019\ufffd\ufffdP\ufffd\ufffd\ufffd\ufffd\ufffd^-\u0026\ufffd\b|s\u0011\u001c\ufffd\ufffd\u0003{{\ufffdfv\u0011\n/d\u000f\ufffdQ\u001e_\ufffd\u0012\ufffd\ufffd\ufffd\ufffd\ufffd2I\ufffd\ufffdك\u0006F\ufffds\ufffdg\ufffd\ufffd\u0010\\c\u0026\u001b\ufffd\ufffd֤r\u0000\ufffd\u0006w\ufffd\u0026m\ufffdp\ufffd\ufffd\ufffd\ufffd\u001d9\ufffd\ufffdq\ufffdp\ufffd\ufffd*\u001d\ufffdtܣ\ufffdt\ufffd\u0018\ufffd\u003c\ufffd\u001b\ufffd\ufffd^\u001d9\ufffd\ufffd\ufffd\ufffd\u001c\u001c\u0026\ufffd\u0006\ufffd\ufffdv9\ufffdr\ufffdBź\ufffd\u001a\u003eƹ\ufffd_\ufffd\ufffdw]=g\u000bG\u003e\ufffd\ufffd\ufffd\ufffdL蟩\ufffd\ufffd\ufffd[\u001a\ufffd\ufffdrdL\ufffd\ufffdt2Vw\ufffd\ufffd\ufffd\ufffd\u0019(\ufffdt|\ufffd\ufffd\ufffd+\ufffd\u001f纒\ufffd\ufffd7\u0013N\ufffd\ufffd\ufffd\ufffdɾ\u0013\u0019\ufffd\ufffd\ufffd\ufffd\u0016\ufffd29S\ufffd\u001c\u0026\ufffdއ\u001aλt\ufffd\ufffd$\ufffd1\ufffd\u0026\ufffd.w\u0007\ufffd\ufffdd\ufffd\u0010\ufffd\ufffd\ufffdW\u000e/-\ufffd\u0015\ufffdP\u001c5\ufffd\u0010F\ufffdz\ufffd4P\ufffd\u001a:\u0011]\ufffd\ufffd\ufffd\ufffd\ufffd\u0005\ufffdJ\ufffd\ufffdh\u0013\ufffd@\ufffd\ufffd\ufffd\ufffdZ\ufffd\u0010\u001f\ufffdfu6\ufffd.\ufffd\r\ufffdQ\bMJC5=\u0011\ufffdԕq\ufffd\ufffdȄ\u0017m\ufffd\ufffd\ufffdG\u0010\ufffdP\u0019\u001f\ufffd\u003e\ufffd\ufffd4V\ufffd\ufffd\ufffd?W\ufffd\ufffd\ufffd\ufffd\u0017\ufffd\ufffd(W\ufffdpf_\ufffd\ufffd#\ufffd\ufffd\ufffd\\\ufffd\ufffd\ufffd\u0015\u0026;\ufffd\\\ufffdbM:蚔W\ufffdm\u0002\ufffd\ufffd\ufffdgD\u00074\ufffdRr\ufffd\u0007}\ufffd\ufffdi'\u0010\ufffd=\ufffd\u0005\ufffd+\ufffdr\ufffd1\ufffd_\ufffdR.\r5i\ufffdk\u003c\ufffdDs\ufffd\u0004/!:\u0006\ufffd\u000b\ufffdtEd\ufffd\ufffd\ufffd\ufffd\u001cP\ufffd\ufffd8\u0007\ufffdwG\ufffd\u003e\ufffd\ufffd\ufffd\ufffd\ufffdJ5-1^0N\ufffd\ufffdA\u0003\ufffdhBe\u001a\ufffdg\u001fb\ufffd\ufffd\u0015ॷt\ufffd}\b\ufffd\u0015\ufffd\\\ufffdl9\ufffd[\u0003\ufffd8E[\ufffd9\ufffd@d\ufffd=J\ufffd\\\ufffd0W\ufffd\ufffd\ufffd\ufffd \ufffdZ,`n\ufffd\ufffd\ufffd0\ufffdq\ufffd5\ufffd~oB\ufffd\ufffdJ\ufffd\ufffd\ufffdh\ufffd\ufffdZ\ufffdI\ufffd\ufffd?'sh\u0014\ufffdl/\ufffd\ufffd\b\ufffd\ufffd\ufffd\ufffd^\ufffdۮ\u001dѵ\ufffd/+GO\ufffd\ufffd\u003eE9\ufffd.\ufffd\u0011ћׁp\ufffd\ufffd\ufffd\ufffd\ufffdM\ufffd҈\ufffdU\ufffd\u000e^\ufffd\ufffdJ\u00165\ufffd\ufffd\ufffdr\tm\f\u0005\ufffd\ufffd5k\r\ufffd\ufffd\ufffd\ufffd;F\u001b\ufffdi\ufffdt6\"'x\ufffd\ufffd\ufffd\ufffd^\n\u0005b\u0003\ufffd8\ufffd\ufffdׁ\ufffd\ufffd\ufffd\u000e\ufffd\u001d\ufffd \u0007L\ufffd\ufffd%\ufffd\u0017\ufffd\ufffd[\u001e\ufffd\ufffd\ufffd\ufffd;\ufffdԈ\ufffd1\ufffd\ufffd\ufffd\ufffdݑ\ufffdWgq\u001f\n\ufffd\ufffd\ufffd~\ufffd2\ufffd(\ufffdu\ufffdԘL\ufffdG\ufffdta'\ufffd\ufffdH\u0007\ufffdN3\ufffd\ufffd`\ufffd\b\u0012;\ufffd\ufffd\ufffd\ufffd\ufffd\u000e(W\ufffd\ufffd\u0000$\ufffd\ufffd5\u003c\ufffdn\ufffd9\ufffd;(\ufffd(\ufffd;щbѨ\ufffd\ufffd\ufffd\ufffd+v\u000bsM\ufffdJGf)z\ufffdrLt\ufffd{pԮ)\ufffd\ufffd=\u001d\ufffdFw\ufffd\ufffdsp\ufffd\"랇[P\u003e#\ufffd1\u001d\ufffd\u003e\ufffd\ufffd\ufffd\ufffd\u0017B\ufffd\ufffd\ufffdj\ufffd\ufffd\ufffdR\ufffd\u0003.\ufffdf\r}Y\ufffd\ufffd1\u003eo\ufffd(\u003c\u0002ް\ufffd5O\ufffdϯ\ufffdܾ\u0012\ufffdE\ufffd\u0005\"\ufffd\ufffd\u003eS\ufffdP\ufffd\u0019;\ufffd\ufffd=ӻ%\u003eVd—J\u0004\ufffdS\f\r\"\ufffd\ufffd\ufffd\ufffdEm=j\ufffd-\ufffdU\ufffdw\ufffd\ufffd\ufffd۫\n\u001e\ufffd\u001fS\\E9\ufffd犼\ufffd\ufffd\ufffd\ufffd\ufffd\ufffdӢ%H\ufffd\ufffdW\ufffd\ufffd\ufffd\ufffdܢg#\ufffd\ufffd\u001e\ufffd\ufffd\ufffd,\ufffd\ufffd\u001f\ufffd\ufffd\ufffd\ufffd\ufffd\u0017\ufffd,^/\ufffd\ufffd\ufffd5| :\\\ufffd.\ufffdS~\ufffd\ufffd-\ufffdz\ufffd\ufffd\ufffdv\u0011\ufffd\u001e\u001d/\u0016Ԃ\ufffd\u0000\u003e:\u0011=\ufffd\ufffd\ufffd\ufffd\u001d\u0018\ufffd\ufffdT\u003c}Qf\ufffdy\ufffdqTV\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\u0015\u000e\ufffdJG\ufffdC_\ufffdí\ufffd\ufffdB\ufffdP8\ufffd\fj\ufffd\ufffdΣ\ufffd\ufffd͕\u0007\u0010\ufffd)\ufffd\ufffd~$\ufffdU\ufffd\b\ufffd\ufffd\ufffd3\ufffdߏ\ufffdf\u001e\ufffd*\ufffdw\u001e\ufffd;1\ufffd1\u0007E\ufffdnIO\ufffd\ufffd\ufffd\ufffd\u001eodtR \ufffdhΜ\t9bCt\ufffd9ʓ\u0003hsTn(r\u0011\ufffd\ufffd\ufffduf\ufffd\ufffd\u0019_tŦ\ufffd,}p}u\ufffd\ufffd\ufffd\ufffdK\ufffd\ufffdP\ufffd\u0012=W\ufffd\ufffd\ufffd(\ufffdD/\ufffd\ufffd\ufffdX3.\ufffd;\ufffd\ufffd\ufffdC\ufffd\ufffd\ufffd7\ufffd\ufffdU\ufffdjī\ufffd\u0019\u0019\ufffdԯ`n\ufffd\ufffd\ufffdه\ufffd\ufffd\u00118\ufffd!\ufffd\u0012\ufffd\ufffd!\f.\ufffd\u001f]\ufffds]\ufffdֺ\u0012\ufffd\u001d\ufffd\ufffd\ufffd\ufffdE.\u0018\ufffd19\ufffd]\ufffd\ufffd8\ufffdBa\ufffdk|Ur\ufffd\ufffd\ufffd=\u0010\ufffd\f\ufffd\ufffd\u001c\ufffde\u0011\ufffd\u001c9\u000f|\ufffd\ufffdv\ufffd\ufffd8\u0004u\ufffd\ufffd\u0006w\ufffdV\ufffdȾ\ufffdI-C\u0010\ufffdr\ufffd\u0000\ufffd\ufffd\ufffd\ufffdJ\ufffdl\ufffd\ufffd\ufffd\ufffd!hrP$\ufffd\ufffd\ufffd;{7\ufffdI\ufffdil\ufffdj\ufffd\ufffd\u000f2e{7׽\u003c\ufffd_\ufffdX\u0003\ufffdXe\ufffdP^N}\u001c\u0014\u0017\ufffdP\ufffd\ufffdb\u0001d\f\u000ej\ufffd\ufffdC\ufffd\ufffd\ufffd$\ufffd|*e4;g\ufffd\ufffd\ufffd\ufffdb\ufffd\ufffd\u001a^\u001b^\ufffds]=\ufffd\ufffdGv\ufffd\ufffdS\ufffdsg\ufffd_\ufffdb\ufffdQ\ufffd;\ufffd\ufffd5\ufffd\ufffd\u001dS\ufffd\u0007\u001fA\ufffd@9\ufffdH\ufffdp\ufffd\ufffdScf\ufffdH$\u003c\ufffd\ufffdwN\u001f\ufffdy\ufffds\ufffd\ufffd\ufffd\ufffd)\ufffd-9(\ufffdm\ufffd|\u0012޾\ufffd;\ufffd\ufffd\ufffd}\ufffd\ufffd\ufffd!\u001f\ufffd\ufffd|\fE\ufffd\ufffd\ufffd\ufffd為\u000f5ID~\ufffd\ufffd\ufffdB\ufffd\ufffd\u0014lɻ\ufffd|\u001f\t\ufffd\ufffd\ufffd\u0001@\ufffd\ufffd\ufffd\u000b\u0007E\ufffdG9*\u003eZ;\ufffd\ufffdF\ufffdϷ|\ufffdJ\ufffd\ufffdG}~Y\ufffdMք\ufffd-f\ufffd\ufffdz\ufffd\ufffdQ.\ufffd\u001d\ufffd䯘\ufffdV\u003eʗ0yr\ufffd\ufffdx\ufffd\ufffd\ufffd}G\ufffd\ufffdu$\ufffd\u0005\u0012Fd_\ufffd\ufffd\ufffdk5\u003c\ufffd\ufffd\u0003\ufffd\ufffd\ufffd\ufffd\u0001/\ufffd\ufffd\u003cOϫ\ufffd\ufffd\ufffd5\u0013G[\ufffd\ufffd\ufffd\ufffdС\u003e\ufffd\ufffd\ufffd\ufffdC\ufffd\ufffd%ѵ\ufffd\ufffd\ufffd\ufffd\ufffdH\ufffd\ufffd0\ufffd|V\ufffd\ufffd\ufffd\ufffd/\ufffd-\ufffd\ufffdj)\ufffdQ\ufffd\ufffd\ufffdU$\ufffd\u001c\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd3\ufffdǗ;~\ufffd\ufffd$K\u00115\ufffd?Г\ufffd7\ufffd\u0026c][\ufffd\ufffd\ufffdO\rІ*\ufffdфK#\u0011m\ufffd偞\ufffd\ufffdA}\ufffd\ufffd\ufffd\ufffd\ufffd*~\ufffd\ufffd}\u0013@\u0013\ufffds\u0019\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd9\ufffdS\ufffd\ufffdo\ufffd\ufffdv\ufffd\u0010\ufffd\ufffd]\ufffd!2\ufffd/\u0004\ufffd@\ufffd\ufffdZ\ufffdq\ufffd\ufffd\ufffdS\ufffd\ufffdS[q\u0003\ufffdj\ufffd\u0026\\j\ufffd\ufffd]\ufffd\ufffdJ\u001d\ufffd\ufffd-\f\ufffd\ufffdo\ufffd\ufffdoz˫\u0014\ufffd證\ufffd\ufffd 4\ufffd\ufffd\ufffd\ufffd\ufffdg\ufffd\tX+\ufffde\ufffd\u001d\ufffdw\ufffdL\ufffd\ufffd{vt\ufffdݍ\ufffdț-8.\ufffd\ufffd)\u0016^\ufffd\ufffd\ufffd\u0019\ufffd=y\u003c\ufffd\ufffd#A\ufffdtt\ufffd4\u0014$\u000e\ufffd\ufffd\ufffdȘ\ufffd\ufffd\ufffd\r\u0011\ufffd\ufffd\u0010:T\u0007\ufffdB\ufffd\ufffdQ\ufffdlѨ\ufffd\ufffd\ufffd\u0019\ufffd\ufffd\u0026\ufffdaJ\ufffd\ufffd\u0005\ufffda\ufffd\ufffd\ufffd\u0007[\u0026\ufffd+\u001e\ufffd/]\ufffdƚu\ufffd\ufffd3s\ufffd\ufffd@\u0016\ufffd\u0017r\ufffd\ufffdhk\u0013\ufffdo\u001dj\ufffd\u0004d\u001c\ufffd\ufffd\ufffd\u001e|%\ufffdJTʻ\u0000\"\ufffdk\ufffd5\ufffd\u000bK\ufffd\ufffd\ufffd:-\ufffd\ufffd\bڸ;W\ufffd3ww\ufffdrfs\ufffdl\ufffdm^J{\ufffd\ufffde\ufffd\ufffd\u000eK\ufffd,C\ufffd\u003c\ufffd\ufffdu$\ufffd\ufffd\\\u0000\ufffd9\u0004׹\ufffd~\ufffd\ufffd\ufffd\ufffd\"*\ufffd\ufffd\ufffd\u0007\ufffd\ufffd\ufffdi\ufffd%\ufffd!\ufffd\ufffdԇI\ufffd\ufffd\u0004'\u0002w\ufffd}\ufffds\ufffdR\ufffd[\ufffd\ufffd\ufffdv\u0011\ufffd\u0016\ufffd7x\ufffd\ufffd\u0003\"\ufffd\ufffd=Z\ufffd6d\ufffdW\ufffdHX\ufffd\ufffdfӽ$g2\ufffd%QW\u0002\ufffd\ufffd\u0007\ufffdF\u000e\ufffd\ufffd)\u00120ٛ\ufffd\ufffdQ]\ufffdLl\ufffd\ufffd\ufffd\ufffd\ufffd\u0011}_\ufffd\"\ufffdS\ufffd}ޓs\ufffd\ufffd^\ufffd\ufffd\ufffd\ufffd\ufffdtD9ޒ\ufffd\u0013\ufffd%ҤU\ufffd\ufffd\ufffd\ufffd\ufffd\u0011\ufffd\ufffd\ufffd\ufffd\ufffdaN\ufffdM\n%7Oa\ufffd\n$\ufffd\ufffd\ufffd\u0013\u0002\u0003\u0014\ufffdu\ufffd\u0013\u003c\u0019\ufffd\nO\u0019\ufffd\ufffdA\ufffd1J\ufffdv\u003c\ufffd\ufffd\ufffd\u001a\ufffdʥ\ufffd=k\ufffd\u0012\ufffdC\ufffdf\ufffd\ufffd\ufffd\u001f\u0002Hx=(\ufffdW\ufffd\ufffdP\bߐ\ufffd\ufffd\u0000^b\r\u001c\ufffd\u0006\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd`*Ծʗ~t\ufffdrp\u000e\u001b\ufffd\ufffd\ufffd\ufffdl\ufffd\ufffd\ufffd*\ufffd\ufffdk\ufffd\ufffdqQ\ufffdGOLJ\ufffd\u001c\ufffd\u0010\ufffd7s\u0011\ufffd\ufffd3\ufffd\ufffdG\ufffd(\ufffd78\ufffd\u000f\u001d\u001c\ufffd\ufffd\ufffd\u0003\u003czVṲ\ufffd\u0003\ufffd\ufffd\ufffd\ufffdf\ufffdr\ufffd\ufffd\ufffdZڱ엷\tZ\ufffd\u001b\ufffd\ufffd\ufffd;\ufffd\ufffd\ufffd\ufffd\u0006\u0013n\ufffd\ufffd\ufffdj\ufffd\ufffd?.\ufffdr\u0016\ufffd\ufffd\ufffd\ufffd6\ufffd=\ufffdr\ufffd\ufffd\ufffd\ufffd\u001a\u0012\ufffd~\u0010\ufffd\\\ufffd\u0011\ufffd\ufffd\ufffd|\ufffd\ufffd\ufffd@\ufffdY\rs5\r\ufffd\ufffdM\ufffdg\ufffd\ufffd\ufffdwre\ufffd\u0010{\ufffd\ufffd\ufffd\ufffdEO\ufffd\ufffd\ufffd|Ky\ufffd\ufffd}\ufffd\u003e\ufffdE\u001a\ufffd\ufffdx\u0014\u0017\ufffd?MG8\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd1\ufffd\ufffd\ufffd\ufffdfd\u000f\ufffd\ufffdK}\ufffd\ufffd\ufffd)\ufffd\ufffd\ufffd\ufffd\ufffd:7\ufffd\ufffd\u0011]n\ufffd\ufffd\u0012Y\ufffdzv\ufffd\u0006\ufffd\ufffd9\ufffdpkc$\ufffd\ufffdF\ufffd\ufffd\u001a~EmW+\tr\ufffd\u0013^Z\ufffd\ufffd\ufffdޮ\ufffds\ufffdc\ufffd6\ufffd\u0019\ufffd\ufffd\u0019\ufffd\ufffd\ufffdG\ufffd\ufffd\ufffd\ufffdh\ufffd\ufffd)\ufffdG\\\ufffd;,Bb[йk\ufffd@3\ufffd\ufffd\ufffd\ufffd3\ufffd^o\ufffd\ufffd9\ufffd\ufffdwt\ufffdoD\ufffd8\ufffdD{Mt\ufffd0\ufffd\u001az|\ufffd\ufffd\ufffd\ufffd\ufffdJ\ufffdm\ufffd_\ufffd\ufffd\ufffd\u003e\",\u0015,\ufffd}\ufffdCQ\ufffd\u000b\ufffd\ufffd~\ufffd'\ufffd\ufffd\u0010_{~\ufffd\ufffd܋QG\ufffd:\ufffd\ufffd\u0013\ufffd\ufffd+T\ufffd$\ufffdg3_\u0013\ufffd\ufffd\ufffd\ufffdo\ufffd\ufffd\u001c\ufffd\ufffd\u003e\ufffd\ufffd\ufffdCU\ufffd\ufffd|\ufffd\ufffdj\ufffdmt\ufffd\ufffd;D\ufffdNp\u0007\r\ufffd\ufffd\ufffd^\u001f}\ufffd7\ufffd\ufffdP\ufffd\u001f\r\ufffdaW\ufffd,\u0012/\u00079\ufffd\ufffd07\ufffd[*\ufffd\ufffd\ufffd}\ufffd\ufffd\ufffd\ufffd\\\ufffdŸ\u001c\ufffd\ufffd\ufffdFt\u0011\ufffd\ufffdy\u003e±\"\ufffdK\ufffdP\ufffdys\ufffd\ufffd\ufffdg\ufffd\ufffd\u0005\ufffd\ufffd4\ufffdq\ufffd[l}e\ufffd\ufffdr(m\u0010\u003eU\ufffd\ufffd_G,ƞ̽\u001f\ufffdA\ufffd%\ufffdw\ufffd\ufffd\u001b\ufffd\ufffd\ufffd\ufffd\u001c_t%+t\ufffd\ufffdt%J\f\ufffd}\ufffd\u003e9\ufffd\ufffd\ufffdNi\ufffd\f-\ufffd\ufffd\ufffdt\ufffd@\ufffd\ufffd\u001b\ufffd*\ufffd\ufffd\ufffd@\ufffdk\ufffd\ufffd\u001afy\u001c\ufffd9\ufffd\ufffdO[\ufffd\"\ufffd\ufffdF`\ufffd\ufffd\ufffd\ufffdA\ufffd=\ufffd\ufffde\ufffdo\ufffd\u001d~K㲄\u000ej\ufffd\ufffd\ufffd3\ufffd?4s\u001f\ufffdvE\ufffd\ufffd3139*\ufffd\u001a\u001c\ufffd\u001f\ufffdDTy\u001d\b\ufffd5\u0012*\u001e\ufffd\ufffd\ufffd@\ufffd\ufffd\ufffdؘ[\ufffd\u0014:2\u001fi\ufffd\ufffd\ufffdH\ufffd\u003e\ufffd\ufffd\ufffd^Fh$\ufffd\ufffd\ufffd҉\ufffd\ufffdv\u001c\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffdO5\ufffd꿑\ufffd/\ufffdGx89WP\u0004g\ufffd\ufffd\u001c\u0002\ufffd\ufffdg\u0004\ufffdu\ufffd\ufffd\ufffd\u0000\ufffdݡ\ufffd7ԍ\u0011=\ufffd\ufffd\ufffdxSJ\ufffd\ufffdN\ufffd\u001fG\ufffd*\ufffd\ufffd\u0017\u001f=;\ufffd\ufffd\ufffds\ufffd\ufffd4ǥ\ufffd\ufffd\ufffd\ufffdշ\ufffdҟ\ufffd2\u000e_\ufffd\ufffd\ufffd\u0000\ufffd\ufffd\u0007@\ufffde\ufffd\ufffdZ\ufffdT\u000e\ufffd-M\ufffd.5́\ufffd\ufffdѓ\ufffd\ufffd\ufffd\r\ufffdѵ5\u0017\ufffd\ufffd\ufffd[\ufffd\ufffd\u0014\ufffd\ufffd8\ufffd\ufffd\ufffd\ufffd\ufffd0\u0007\ufffd\\\ufffd\ufffd\ufffd\ufffd\ufffd\u003cnQ.6c\ufffd\ufffd\ufffd\ufffd\ufffd3\ufffd\ufffd;\ufffd\ufffd[\ufffdK\ufffd\u001b\ufffd\ufffd\ufffd\ufffdə\ufffd\u000e\ufffd=\ufffd\ufffd\ufffd;?\u0014\ufffd\ufffd\u0010\ufffd\ufffd6b9`\ufffd\ufffdG\ufffd)R\ufffdJ\u000e\ufffd\ufffdH\ufffd\ufffd犏\ufffd\ufffd\ufffd\ufffd\ufffdy\t\u0005c\u001d䗑\ufffd\ufffd'\u0004M\ufffdn\ufffdS$\ufffd\ufffd4\ufffdd_\ufffd#]\u001b\ufffd\ufffd\ufffd\ufffd5\ufffdQ\u000f\ufffdU~E\ufffd\ufffd\ufffd\u0017\ufffdK؍U\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\u0007f\ufffdZ\ufffd\ufffd}رc\ufffd\ufffd\ufffd\u0007*7\ufffd;\ufffde\u0011\u0013^\u0006\u001b\ufffdx\ufffd\ufffd\u0011\u001b\ufffd\ufffd7EH\ufffd\ufffd-\ufffd\ufffdD\ufffdGq:b\ufffd/\u001e\ufffd\ufffd\ufffd\ufffde\u0000\ufffd[?\ufffd9t\ufffd\ufffd\u0010\ufffd\u0015#:)\u003eD\ufffdT\ufffd\u001a\ufffd\ufffd\ufffd\u003c)\ufffd\ufffd\u0007(T\ufffd\ufffd\u0012\ufffd\ufffd\u0011_\ufffd\ufffdxV\ufffd+\ufffd*\ufffd岩rc\ufffd%4\tM\ufffdw@d\ufffdXx\u001bW4L\ufffd\n\u000f\ufffd\ufffdaq\ufffd\u000f\ufffd\ufffddt\ufffdFdP\ufffd\ufffdS\ufffd\ufffd\u003e1f\ufffd\r\ufffd\ufffdg2v\u003e\u0019?8\ufffd\u0014\ufffd4\ufffd\ufffdz\ufffd\u001b\u000b5\ufffd\ufffd3\ufffd\t\ufffdC\ufffd\ufffd\ufffdgE\ufffd\ufffd\n\ufffd\ufffd\ufffdg\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd;X\bou|\ufffd\u001c\ufffd\u0015n\u0019\ufffd\ufffd}\ufffd\ufffd\ufffd3\ufffd\b.\ufffd\ufffd:\ufffd\\80\ufffdZ\ufffd\ufffd\ufffdŷ9\ufffdR\u0016ߨ\ufffdj\ufffd\u0018՚\ufffd\u0026\u001dQ\u0013\ufffd\u0006\ufffdҿ\ufffd\ufffd\ufffd(\u001d\ufffd\u001d\ufffd\ufffd5\ufffd\ufffd\ufffd\ufffd~Na:\ufffd.\ufffd\\E\ufffd\ufffd\ufffdP\ufffdK\ufffd\u001f\ufffd\u001d\ufffd$\ufffd%\ufffd\ufffd\ufffdMN\ufffd\ufffd;Dd\ufffdF\ufffd\ufffd4\ufffd\ufffd\ufffd \ufffd]\ufffd\ufffd\ufffd\ufffd?\ufffd\ufffd\ufffd삭I\ufffd\ufffd\ufffdй73Nq\ufffd\ufffdʦ\ufffd\ufffd\u0016\ufffd\ufffda\ufffd\ufffdN\u0011\ufffd\u000b\n'\ufffd\u001f\u001087\\\u001aC\ufffd\b\u0015~\u0013\n\ufffd!\u0014^\ufffd\ufffd\ufffd\ufffdJ\ufffdhi\ufffd\u0007\ufffd\ufffd\ufffd\ufffdI\u0007\ufffd~)\ufffd\ufffdG}V\ufffd@]\ufffd\u001e/\u0015\u001dT9\ufffd\ufffd'JaP\ufffd\u001a\ufffdT\ufffd\t\u001f\\\ufffd\ufffd\ufffdQ\ufffd\ufffd\ufffd\u0006\ufffd\ufffd\ufffdx-0\ufffd\ufffd\ufffd\ufffd\ufffd-*X\u001e\u0019\ufffdb8N\ufffd\u0016\u001c\u0003\ufffdf\ufffd\ufffd6Qe\ufffd\u0003銠!,}\u0013׼\n\ufffd#z\ufffd\ufffd\ufffd\ufffdH\ufffd\ufffdX\u0003\u0007D\ufffds\ufffdw\ufffd3\ufffd\ufffd\ufffd\ufffd#\ufffd\u0003h^\ufffd\ufffd\ufffd\ufffd\ufffdS\ufffd\ufffdT\ufffd\ufffd|Kt\ufffdA;\ufffd7~eGa\ufffd\u0007\u0000\ufffd\ufffd\u000f\ufffd\u003c\ufffd\ufffdr\ufffdg\ufffd\u0010\ufffd\ufffd[\ufffd\ufffd\u0003?\ufffd|\ufffd\ufffd\u0026\ufffd|~\u0013kĦQ1\ufffdC\"\ufffd5i\ufffdƻ\ufffd\ufffdR\ufffd\ufffd\ufffd\ufffdH\u0000e\ufffd\ufffd\r\ufffd+cv\ufffdƹye\ufffd9\ufffd\ufffdx\u0019\ufffd\ufffd\ufffdx\ufffdH\ufffd\ufffd\ufffd\ufffdUy#\u001dXhn\ufffd\ufffd\ufffdO\u0015\ufffd\u001a\ufffd\u000b\ufffd\ufffd\ufffd\ufffdos\u0014\ufffd6\u000e}\ufffd\u000b\ufffd\u001a\ufffd^\u0002\ufffd\ufffdO\ufffdG\ufffdNq)Gw\u003c\ufffd\ufffd\ufffd\ufffd\ufffd\u0001z\ufffd\ufffd\ufffd{i\ufffd\u000e\nj\u0019\ufffd\ufffd/\ufffdQ\ufffdi\ufffd\ufffd4\ufffd蹘\f\ufffd\rYS\ufffd@*\u0017\ufffd\ufffdnQ\ufffd'\ufffdH\ufffdڟ=lc\ufffd\ufffd\u0004\u0015/\ufffdq\ufffd^^\ufffd0ʫ\\\ufffd'aR˰\ufffdۘ\ufffd\u0006\ufffdq\ufffd\ufffdP\u0018\ufffd\\\ufffd6Ϛ\ufffd\u0006V\ufffdk\ufffd\u001c\ufffdv\u0016\ufffd\ufffd\ufffd\ufffd\u001e\ufffd\ufffd\ufffd\ufffdѱ\ufffd7\ufffd[\ufffd\ufffd\ufffd'\ufffd\ufffd\ufffd0\ufffd\ufffd\b\ufffdb(\u001a\ufffd:\u0003\ufffd\ufffdT\ufffd/\ufffd\ufffd\ufffd\u003eܛ\ufffdr\ufffd\ufffd\ufffd\ufffd\u0018\u0014\ufffd7\ufffd+Ї\ufffd\n\ufffd\ufffd\ufffdcO\ufffds@y\ufffd4\ufffdDФ\ufffd\u003e\ufffd\ufffd\ufffd\r\ufffd\ufffd-\ufffdvm\ufffd\ufffd\u0026,\ufffdv\u001fZ\u003e\ufffd\ufffd\u001ew|Z\ufffd\ufffdH\ufffd\ufffdC\ufffd\ufffd\ufffdd\ufffd\r\ufffd\ufffd\ufffd(\ufffdڸ\u0012˻\ufffd\ufffd\ufffdr|ޝ\ufffd\ufffd񚣨\ufffdM\ufffd\ufffd:\ufffd\u001c\ufffdxT4\u0010wS3\ufffdJ}\u003ca\ufffdݞ򲋥7\u001b\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\u0013\ufffdC\ufffd\u003e\u0004\ufffd\ufffdVɰey\ufffd\ufffdˀ\ufffd]\ufffd\ufffdѣ\ufffd\ufffd\ufffdˤ\ufffd\ufffdr[cv\ufffd\ufffd=W.\ufffdq.d/\ufffdV\ufffdT\ufffdA\f,ޝ(\ufffd9ճA,\ufffd\ufffd\ufffdݮ~7Z\ufffd)F9\u00266!ˇ\ufffd\ufffd4S\ufffd\ufffdW\ufffd6\ufffd\ufffdϖ\ufffd\ufffdp\ufffd\ufffd\ufffd.c\ufffdck\ufffd\ufffd\ufffd\u0011\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd]\ufffd\u000bOh\ufffd\ufffd{\ufffdo\ufffdg\ufffd\ufffds\u0026\u001e\ufffd'\ufffd\ufffd֩\ufffd\ufffds\ufffdOg\ufffdmCgۯ\ufffd\ufffd\ufffd|\ufffd\ufffd\u001b4\ufffd\u0026\ufffd\ufffd\u003e\u0014\ufffd$\ufffd\ufffdr\ufffd3\ufffd\ufffd\ufffd\u000b\ufffd\u0017\u0010\t\ufffd\ufffd\u0004\ufffdw\ufffd\u000fŎ-Lxn)\u0017\ufffd\"\u0017]\ufffd\ufffd1\ufffd\ufffd̷JsIk\u0019\ufffd\ufffd\u0018\ufffdK\ufffd\ufffdWV\u000bS\ufffda_\ufffduu\r\r\ufffd\ufffdQ\ufffd!\ufffd\ufffdӋX\ufffd\t0\ufffdq\ufffd\ufffdσ\ufffd\u0012ڱ\ufffd\ufffd9\ufffd\u001f\ufffd\ufffd\u0011\ufffdg\ufffd)\ufffd\ufffd\ufffdP\u0018\ufffd\t\ufffd\ufffdom\"3p\u003c. \ufffdi\ufffd\ufffd\rϛ\ufffdґ\ufffd\u0010\ufffd\u0011\ufffdy\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffdU\ufffd\ufffd\u0016\u0015Q.\ufffd\ufffd\ufffd);cs\u0001pA)\ufffd5\ufffd1\ufffd\u0013\ufffdɹ\ufffdğ_m\ufffd\ufffd\u0001\ufffdp\ufffd\ufffd\f\ufffd\ufffdp\ufffd\u0018\ufffde\ufffd\ufffd\ufffd\ufffd1\ufffdr\ufffdꉆ\ufffd\ufffd\ufffd\ufffdݑ\ufffdH\ufffdY\fNl\ufffdu\u0019\ufffd/\ufffd,\ufffd\u000eKM\ufffd\ufffd,\ufffd81\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd1vS\u0026\ufffd\ufffd\u000e_\ufffdN\ufffd\ufffdM\u0000\ufffd\u000743N\ufffdB\ufffd\ufffd*\ufffdUQW\ufffdd\u000f\ufffdّ-\ufffdX\u0011\ufffd\ufffd\ufffd\ufffd\ufffd8\ufffdr\u003c\ufffd\u001a\ufffd\ufffd\ufffdԖ\ufffdTU,`\ufffd\ufffdS'\u0016'\u0001\u0017۫\ufffdք\ufffd\ufffd{I\ufffd\u001b\ufffd4u9^v\ufffd\ufffdۙcf\u0001[\u0005\ufffd\ufffd \ufffdT\u000b؀\ufffd\ufffdyn\ufffdS~ey\ufffd\ufffd\ufffd\ufffd\u001bP\ufffdq]\ufffd6!7\ufffd]\u000f\ufffd\ufffdT\ufffdt\ufffd$\ufffd-\ufffd.\ufffd6/-l\ufffdT\ufffd\ufffd\ufffdK\u0016Ėo\ufffd\u0003\ufffdX\ufffd\ufffd\ufffd\ufffd\ufffd\u003e\ufffd{~\ufffdjqUD\ufffd8\ufffd\ufffd:\u003cS\ufffdj\\\ufffd\ufffdIr~\ufffd$\ufffd7b\u001fv\ufffdL\ufffd\ufffdM\ufffd/\ufffdz\u001c8N̉u}\ufffd$\ufffd9Y\ufffd\ufffd\n\ufffd\"\ufffd\ufffd\u003c\ufffd:\ufffd\ufffd\ufffdP\u0004e\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\u001aOq:\u003e\ufffd\ufffdL\ufffd1\ufffd\ufffd:\ufffd.\ufffdU\ufffdd\u001f\ufffda9\u001e/\ufffd\u001c\ufffd:\ufffd\ufffd\ufffdS )\u0019xA\ufffd\ufffdƚt~@oW\ufffdLWxN\ufffd,\ufffd\ufffddL\ufffd\u0014h\ufffd\ufffd|\ufffd\ufffdU\ufffd\u000bE\ufffdE\ufffdBZ\\\ufffd\ufffdb\\8\bV\ufffd\ufffd\ufffd{rn\ufffds\ufffd\ufffd'\ufffdͻ;}\ufffd\ufffdL^,}\ufffd\ufffd\ufffd4\ufffdPƹ\ufffd\ufffd\ufffd0\ufffd`4\ufffd\u0018\ufffd\ufffdY\ufffd\ufffdʇ\ufffd\u001fb\ufffd\ufffd-\u001d\ufffd'zu{\ufffd\u0019\ufffd2\ufffd\ufffd\ufffdOdE\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd{I\u003c3\ufffd'u\ufffd2\u001a\u000f\ufffdu\ufffd\ufffd\ufffd\ufffdUհ\u003e\ufffdY_S\ufffd\ufffda9e\u000fbR76\u0014\ufffdyc\ufffdP-\\e֗\ufffdύE\ufffd\ufffd$ڎ\ufffdM(,\ufffdq\ufffd\ufffd\ufffd\u0012ʟ[\u0018\ufffdWG.\"\ufffd\ufffd\ufffd\f\u001c\ufffd\u000f\ufffdZ\ufffdy[\\\u0000\ufffd\ufffd\ufffd;\ufffdBk\ufffd\u001a\ufffdٜ\ufffdV\u001e\ufffd㙽\u00262\u0010\ufffd\ufffd\ufffd'\ufffd|\ufffd\ufffd\ufffd~\ufffd=\ufffd\ufffd\ufffdG9\ufffd\f\ufffd\ufffd\ufffd\\\ufffd\u003cġ\\)\ufffd\ufffd\ufffd\ufffd1\u0016Cct\ufffd@tZ\ufffd3\ufffd\ufffd\ufffd\ufffdZm\ufffd\ufffd\ufffd\u0001\ufffd\ufffd\ufffd8\ufffdi=5\ufffd\ufffd\ufffd\ufffd\ufffd\ufffdm\u001f\ufffd\u003ch\ufffd\ufffd\ufffdZ\b=!:eO\ufffds\ufffdԛJS\ufffdS\ufffd 7R\ufffd\u001a\ufffd{\ufffd^2\u001a^\u0013\ufffd:@\ufffd\ufffd\ufffd\ufffd\ufffd\ufffdt\ufffd~\ufffd\ufffd\ufffd\ufffds\ufffd\ufffd\ufffdE%\ufffd\ufffd\ufffd\ufffd\ufffd|\ufffdm\ufffdLu\\^Z\ufffd\\\ufffdr\ufffd\ufffd\ufffd\ufffd\ufffdd\ufffd\ufffd\ufffdM\ufffd\ufffdI\ufffdH\ufffd\ufffd\ufffd{\ufffd\ufffd\ufffd\\\ufffd\u0005\ufffd\ufffdc\ufffd\ufffd\ufffd\t\ufffd3\ufffd^\ufffd\ufffd߮\ufffd#݈\ufffd\ufffd\ufffd\ufffdg\u0019)\ufffd\ufffdۆw\ufffd\ufffd\u001fq5\ufffd\ufffd\ufffd\ufffdTh֨Q_\ufffd\ufffd\ufffd\ufffd:\ufffd1\u001d\ufffd\ufffd,\ufffd\ufffd\u003e3\ufffd0\ufffd\t\ufffd/\ufffd/q\b.Z}\ufffd\ufffd\ufffdТ:j\ufffd\ufffd\ufffd\ufffd\ufffd\b\ufffd\ufffd\u0001\ufffduI\u0002h\ufffd\ufffdO\ufffd\ufffd\ufffd9[\ufffd:\ufffdpZ\ufffdt\ufffd\ufffd\u001cت\ufffd\ufffd\u001a\ufffdF\u0011ͬ\ufffdxAs\u000eneŻ\u0013\ufffd\ufffd\u001f\u0015\ufffdʽZ,\ufffdZjy\u0011\n\ufffd\ufffd\ufffd;\u00128\ufffd\u00008\u0005\ufffdkZ\ufffd\ufffd\ufffd^\ufffd{\ufffd\ufffdF\ufffd\ufffd\ufffd\ufffdo\ufffd\ufffd\ufffd\ufffd\u003c\ufffd\u000f\ufffd\ufffd\ufffd\ufffd\ufffd\ufffdN]\u000f\ufffdAN\ufffd\u001c M\ufffd)V\ufffd\ufffdiq\ufffd\u0001\ufffd4q9\ufffdt\ufffdѝ\ufffdi\u0001\ufffd\ufffd\ufffd7\u0005\ufffdAW\ufffd[s\ufffdx\ufffd\r\ufffd\ufffda+\ufffd\ufffd\ufffdX^Y\ufffdŰ\ufffd\ufffd\u00079\u003c\ufffd\ufffdg\ufffd\ufffd\ufffd\u0005S\ufffd@\ufffd\ufffd\ufffd@\ufffd-\ufffd|\u0007\ufffd\ufffd\ufffd\ufffd\u001dZ\ufffd\ufffd\ufffd\ufffdlq^g\ufffd\ufffd\u0002\u0000ӳ\ufffd\ufffdr=۵՟\ufffd\ufffdqd\ufffdқ\ufffd\ufffd\u0019\ufffd\ufffd\ufffda\ufffdp\ufffd\ufffd\ufffd\ufffd|0\ufffd\ufffd:\ufffdT2-\ufffd?D\u001f\ufffd~\u001f\ufffd`\n\ufffd\u0005\ufffd\ufffd~\ufffd+\u0007m\u0003\ufffd\ufffd\ufffd\u00010\u0026\ufffd\u0017;.\u000f\ufffd\ufffd\ufffd\ufffd6\ufffd\ufffd\u0005\ufffd\u0002\ufffd\ufffd\ufffde@s@ҙ\ufffd!~\ufffd\ufffd\ufffd\ufffd\u0004M\ufffd\ufffdL\ufffd\ufffdL5\ufffd\ufffd\u0003o ÎˍL\ufffd\ufffd\ufffd㩒f{\ufffd\u0007\ufffd\ufffdvaf\ufffd\u0005~\ufffdx[v\ufffd\ufffd\u0015Ȱ\f\ufffd\ufffd\u0001\ufffd,\ufffd\u001d\ufffdT\ufffd٪\ufffd\ufffd\ufffdU\ufffd\u0015\ufffd}\ufffdT]\ufffdd\ufffdx\u0019\ufffdӋ\ufffdM\ufffd\ufffd{\u000e\ufffdLZY\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffdx\ufffdL\ufffd\ufffdŵ\ufffd\ufffd\ufffd\ufffdK\ufffd\ufffd\ufffd+\ufffd\u001bM\ufffd\ufffdd\ufffd\ufffd{V$Þ\ufffd+\ufffd\ufffd߽L\ufffd\ufffd\u001d\ufffd\ufffd\ufffd\u000f\ufffd:@\"kU\ufffd̶\\\u000e\ufffdm,\ufffdV]U\ufffd\ufffdg\u001b@\ufffdl\ufffd\u0001`\u0003\ufffdu@\ufffdå\ufffd\ufffdcj\ufffd\ufffd\ufffd\ufffd\ufffd[\u003cter\ufffd\ufffd\ufffdO\ufffdm=Ƽ勒1;X.g\ufffd\ufffdG\ufffd\u0026\ufffd\u0000'9Nckq\ufffd%\u001c'\ufffd\ufffd`x\ufffdz\u003e\ufffd\ufffdg\u000e\ufffd2\u0026vշ\ufffd\ufffd\ufffd-\ufffd=\ufffdAR\ufffd,5\ufffd\ufffdv\ufffd\ufffd\ufffd\u001d־#\u001a|\ufffdJ\u000743\ufffd\ufffd\ufffd^\u0003w\ufffd\ufffd\ufffd\ufffdC6\ufffd\u0012\ufffdL?\u001b\ufffds\u001e?\ufffd\ufffd\ufffdFdr\u0011k\ufffd\ufffd\ufffd\ufffdc\f?\ufffd\ufffd\u0016i\ufffd\ufffdY?ik\u0011݆[\ufffdD\u001f\u001a\ufffdܻH\ufffd\ufffd\ufffdW\ufffd\ufffd֜\ufffdFG\n\ufffd\ufffd\u0005\u003e\ufffdˬ\ufffd\u001c\ufffdև\ufffd\ufffdb\ufffd\ufffd`.\u0014\ufffd_\ufffd\ufffdn\ufffd\ufffd\ufffd\ufffd\ufffd\u0019\ufffd\ufffd\ufffd\ufffd\ufffd55 \ufffd\ufffd\u003e\ufffd\ufffd]O5\\\ufffd\ufffd\ufffd\\\u0019\ufffd\ufffd\ufffd\ufffd\ufffdX\ufffd\u0005x\ufffd\ufffdzX\ufffd\ufffd\ufffd\ufffd\ufffdfȰyɷ\ufffd\ufffd:\ufffd\ufffd6W\ufffd\ufffd\ufffdz\ufffdž+\ufffd:\ufffd\ufffd\ufffd\ufffd$\ufffd)礒\ufffd\ufffd\ufffd\ufffd\ufffdeқ\ufffdQ?\ufffd\u001d\u003c]9\ufffd\ufffd\ufffd4.\ufffd\ufffdQ\ufffd\u0013\ufffd\ufffd\u0004[\ufffd隹\u000eӘ\ufffd5\ufffd\ufffd\u0004\ufffd\ufffdp\ufffd\ufffdB\ufffd@\ufffdOQ\u000e2V+\ufffd\ufffdx7\ufffd{\ufffd\u001c_\ufffd,߾\bS\u0016\ufffdE[\ufffd\ufffd\u0003\ufffd\ufffd\ufffd]\u0018\ufffd\ufffdq\t\ufffdS\ufffd\ufffd\ufffd\ufffd·/\u0019\ufffd\ufffdcmA\ufffdeM{\ufffd\ufffdќ\ufffd_\ufffd7z\ufffde\ufffdv\ufffd\ufffd\ufffdޏ\ufffdd\ufffd\ufffd\ufffdq\ufffd!\ufffd\ufffd\ufffdM\ufffd\ufffd1EV\ufffd\ufffd9\ufffd\ufffdU\ufffd\u003em\u0011;ӝJ\u0013\u000b\ufffdD\ufffd:\u001a\ufffd\ufffddY\ufffd :e\ufffdפ\ufffd\u001b\ufffd\ufffd1-\ufffd\ufffd\ufffd\ufffd)-\ufffdt\u001a\ufffd\u003eC\ufffd\u0004\ufffd潌\ufffd?q\ufffd\ufffd\ufffdxq\ufffd\ufffdq.\ufffdh\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\u003e\u0016\ufffd~\ufffd\ufffd\ufffd\ufffd;D\u0017\ufffd$\ufffde\ufffdj\ufffd\ufffd;\u0000r\ufffd\ufffdA}\ufffd⎜\ufffdi\ufffd\ufffd!\u001cu\ufffd\ufffd\ufffd\u001a\ufffd\ufffd\ufffdV\ufffdz\ufffd\ufffd\ufffd\ufffd\ufffd\u0016Yc36y\ufffd\u0010\ufffd7\ufffd\ufffd\ufffdg(\ufffdUL-`\ufffdV\ufffd\ufffd\u0003z\u0013\u0019\ufffd}\ufffd5\ufffdp\ufffd\ufffd!=\ufffd|\ufffd\ufffd]vl\u000f\u0019\ufffd\u0012\ufffd\u000e\ufffd\ufffdxD\ufffdm\ufffd%\ufffdxg\u0017HVf\ufffd\n\ufffd\ufffd\u0000\n\u0013\ufffd\ufffdN\ufffd\ufffd\ufffd~\u0015\ufffd{6:\ufffd*\ufffd\ufffd\ufffd2\ufffd\ufffd\ufffdѭ۾\ufffd\fˣ\ufffdo\ufffdyZ\ufffd\ufffd\ufffdq\ufffd\ufffd\ufffdbӳ\ufffd˂\ufffd/\ufffd]\u0016\u001e/\ufffdV\u0019\ufffd2\ufffd[\ufffd\ufffd\ufffd\ufffdA\ufffd@\ufffd\ufffd\ufffd\ufffdo\ufffdznaL\ufffdx\u0014\ufffdt=\ufffd\ufffd\u0001D?~\ufffd7\ufffd\ufffd\ufffd\ufffd\ufffd\u001c\ufffd7\u003e\ufffd#k?\ufffd\ufffdƏ\ufffd\ufffd\u0003j\ufffd\ufffd\ufffd\u0018\ufffd\ufffd1\ufffdA\u001a\ufffd\ufffd\ufffd \u001b\u001d\ufffd?\ufffd/\ufffd\ufffd\ufffdBbW\ufffd~x@\ufffd\u003c\ufffd\ufffd\u0005\ufffd\ufffd3{r\ufffdS\ufffd\ufffd@\u003c\ufffd\u0019\ufffd=\u001c\ufffdl\ufffd\ufffd\ufffd\ufffd\ufffd^\ufffd\ufffd\ufffd@\ufffdt\ufffdO`z\u0010/\ufffd\ufffd\ufffd?]\ufffdc\ufffd\ufffdg򳳾\ufffd\ufffd\u0003$\u0003\ufffd\ufffdA\ufffd\ufffd\ufffd\ufffd\ufffd\ufffdF\u000e\ufffd\ufffdz\u001e\ufffd\ufffd\ufffd\ufffdi\ufffd\u0007\ufffd\ufffda\u0001\u0026\ufffdn\ufffd+T\ufffd\u0001ij{\u0015\f\ufffd?\ufffd\ufffd\ufffd#wn\ufffd\u003ew\ufffd\ufffdI_\ufffd~4\ufffd\ufffd8\ufffd+\ufffd\ufffd-\u0026v\u001a\ufffd\ufffd-)\ufffd/b\u0000\ufffd\ufffd\ufffd\ufffdf\u003e\u0000\ufffdp\ufffd\ufffd6\ufffd\u0014\ufffd\ufffd9\ufffd\ufffd\ufffd\ufffd\u0010\u0002\ufffd,-ƻW\ufffd\ufffd\ufffd\ufffd.q\ufffd\ufffd\ufffdhj\ufffd\ufffd}\ufffd\u000fgv1\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd?\ufffd\ufffd\u000e\ufffd\ufffdO\ufffd\ufffd/\ufffd\ufffd4ߙ\ufffd\u0005\ufffd\ufffd\u0019\ufffd\ufffd\ufffd\ufffd\ufffd\u0003\ufffde~\ufffd\u0026w\u003c\ufffd\ufffd\ufffdq\ufffdOkhk?A\u001bW\ufffd'\ufffd\ufffd\"\ufffd;X\ufffdʣ^?l\ufffdu\ufffd\ufffd\ufffd\ufffdm\ufffd\ufffd\ufffd6g\ufffd.W\ufffd\ufffd\u0003\ufffd\ufffd\ufffdتV+\ufffd\ufffd\ufffd\ufffd\u0004u\ufffd\ufffd\ufffd\ufffdո\ufffd\ufffdk\ufffd\ufffd3k\u003cE\ufffdo\ufffd\ufffd8W\u001f\ufffd\ufffd.\ufffd\ufffd1\u0005o*9D_f\ufffd\u000f\ufffd\u001e/1\ufffdO\ufffdU\ufffd\ufffdp\ufffd\ufffd\u001b\ufffd\ufffd\u0011\ufffdJ\ufffd\u001c{\u003e\ufffdS\ufffd\ufffdɷ\ufffd\ufffdػ\ufffd\ufffd\ufffda\ufffd\ufffd\ufffdߧxJ\ufffd\ufffdJ\u003e\ufffdc\ufffdl\ufffd\ufffdŪg{\ufffd\ufffd\ufffd\ufffdV\ufffdgS\ufffd\ufffd\u001e\ufffd\ufffdN\u000f\u0006{\ufffdz\ufffdg\ufffd\u001e\u0007ZY\ufffd\ufffd\ufffdt\ufffdy##XL!zu8\ufffd@e;x\ufffd\ufffd\ufffd\u0019\u000e\ufffd7\ufffd\ufffdk۪\ufffd\ufffd\ufffd1(l\ufffd\ufffd\ufffd\ufffdߨmzk\ufffd\ufffdj?\ufffdE\ufffd^g*\ufffd`\ufffd\ufffdy\u000b\ufffd3e0\ufffd\ufffdn:Z#\ufffd/\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\u0007S@\ufffd\f\ufffdS\ufffdA^\u00056\u0000*\ufffdM\ufffdg6\n}n\u00010u\ufffd]\ufffd\ufffd\ufffd\ufffd\ufffd\ufffdi\ufffd\ufffd\ufffd=\ufffd\ufffd\ufffd\ufffd+\u0019\ufffd\ufffd\ufffd\f\ufffd\ufffd\ufffd\ufffdm\ufffd\ufffd\ufffd̻\ufffd\ufffd\u0019:ۏ|O\ufffd\f\ufffdl\u0002\ufffd\ufffdl\ufffd7\ufffd\ufffdi\ufffd\ufffd\u0011\ufffd\ufffd\u0026{\ufffd'\ufffd\ufffd_\ufffd\ufffd`s\ufffd\ufffd\u000f\rl\ufffdy\ufffd(\ufffd\ufffd\ufffd\u0003\ufffd\u0026t\ufffd\u0007\ufffd\ufffd\ufffd\ufffdt\ufffd\ufffd\ufffd\ufffd\b\ufffdQ*\ufffdK\ufffd\ufffd\ufffd\ufffdxf\ufffdak\ufffd\ufffdB\ufffd\ufffdj\ufffd\ufffdQ\ufffd߫~\ufffd\ufffd\ufffd\u0003\ufffd\ufffd8\ufffd\ufffd\ufffd\ufffd\ufffd\u0014\u003e\ufffdr\ufffdL\ufffd\ufffd*\ufffd\u0001\ufffd㹊DOe\ufffdP\ufffd\ufffd\u0003,\ufffdL\ufffdH\ufffd\ufffd\u000f\ufffdN\r\ufffd|\u0010\ufffd~Z\ufffd\ufffd#\ufffd\u0005\ufffdY\ufffd\ufffd\ufffd\ufffdw\u001b\ufffd~2\ufffdy\ufffdg\ufffdg\ufffd3.Q\ufffd\ufffd\ufffd\ufffdXާ\ufffd\ufffd\u0011\ufffd\ufffd\ufffdF\ufffd\ufffd\ufffd\ufffd\ufffd\"\ufffd\ufffd+Y\f\ufffd=\ufffdBq\ufffd\ufffdq\f\ufffd\ufffd\ufffdO\ufffdu\ufffd\u000b!\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffdh\u000b\ufffds\ufffd\ufffd\"\ufffd:\u0005\ufffd\\\ufffd\ufffd\ufffd\ufffd\ufffd|k\ufffd\ufffdl\ufffd\ufffd:\ufffdaEW\ufffd\ufffd|=\u00153\ufffd\ufffdq\ufffdJ\ufffd\ufffd|j;\u003c\ufffde\ufffd\\\ufffd\ufffd\u0004\u001e'+B_Z\u0005\ufffd\ufffdžJ}+\u000fz\u0015Tr\ufffd\ufffd\ufffd\u001c\u000f\ufffd\u001e\u0026\ufffd\ufffdҞB\ufffd\u000eީ\ufffd\ufffd\ufffdz\ufffd2Rd\ufffd\ufffd\ufffdJ{\ufffdDU\ufffd\ufffd\ufffd\ufffd\ufffd\f}|\byi\u001d\ufffd6\u001f\u0010;/\ufffdU\u001b\ufffd6\u0007s\ufffd\ufffd\ufffd6fy\ufffd͘e\u0011\ufffd?\u000e\u001d\ufffd\u0018\ufffd]\ufffdz\ufffd\ufffda\ufffd\ufffd'(\ufffd\ufffdx\u0006\ufffd\ufffd\u000f\ufffdŸ\u001b\ufffd~\ufffd\ufffd\ufffd\ufffdv\ufffd\ufffd\ufffd\ufffdv\u003e\ufffd\ufffdc\ufffd\ufffd\ufffd\tP\ufffd\f\ufffd\ufffd\ufffd\ufffd\ufffdzw^\ufffd!\ufffd}\ufffdl1?\u0002[+\ufffd\ufffd\ufffd\ufffd\ufffda\u001a\ufffd\ufffd\ufffd|\ufffd{:\ufffdU=\ufffd\ufffdf\ufffd-\ufffdF_\ufffd\ufffd\ufffdtt\ufffd\ufffd\ufffdI\ufffd9ť,\u0004\ufffd(\ufffdx\ufffd\u000e\r\u001a\ufffd\ufffd.\ufffdі\ufffd-\ufffd\ufffd\u0014k\ufffdډ\ufffd\u0013\ufffd\ufffd\ufffd\ufffdsS\ufffd\b^\"M=\ufffd\ufffd[*\ufffd\ufffd\ufffd'\ufffd\ufffd+\ufffdz)\ufffd\ufffd}6\r\u003eάv\ufffd\ufffd\u0007\ufffd\ufffdԫ{F\u000eĚ\ufffd\ufffd\ufffd?!7\ufffd\ufffdlɷ4\ufffd\ufffd\ufffd\ufffd\ufffdT\ufffdx\ufffd\u0013\ufffd\u00067\ufffd\ufffd\ufffdm:\ufffdhe\u0001\ufffd\ufffd\ufffd\u003e\u002660\u003c\ufffd\ufffd\ufffd\ufffd\ufffd\u0001\u001f\ufffd\ufffde\ufffd\ufffd\ufffd\ufffd\ufffd]\ufffd\ufffd\ufffd:\ufffd'q\ufffd\ufffd\ufffd\ufffdO\ufffdyO\ufffd\ufffd?\u001d˵i.,\ufffd\u001fX\ufffd\f8\u001e\ufffdߛX\ufffd\u0017b\b\ufffd\ufffd|\ufffd\ufffd~\ufffd7\ufffd\ufffd:1\ufffd6\u0007a\ufffd7\ufffd\u0015X\ufffd\ufffd\ufffdF\ufffd\u0003\ufffdw7\ufffd\ufffd޷\ufffda=\ufffd]{\u001cO\ufffd\ufffdU[\u001b \u0003+{\n\ufffd*\ufffd\u001b\u0007_y*X\ufffd\ufffdi\ufffd\ufffd]n\ufffdlO%\u000b\ufffd\ufffd\ufffd\ufffd\ufffd:\ufffd\u001dϞ@N\ufffd\ufffdG\ufffd\ufffd,\ufffd\ufffd%2\ufffd\ufffd\ufffdOs|]`\u001a\ufffd'k\u0005o\ufffdJ\ufffd\ufffd\ufffd\ufffd\u003eg\u00079\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffdu\ufffd\ufffd\ufffd\ufffd\u0001|\u0026\ufffdFW_X\ufffd\ufffd\ufffdxfOy]\ufffd\ufffdʻ\ufffd\u001e\ufffd-\ufffd\ufffd\ufffd\u001b?\ufffd\ufffdM'\u0026\ufffd\ufffd%\ufffdޅ7\ufffd=~\ufffdtm4\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd[\ufffd\ufffd\u001f\ufffd\ufffd1f\u0007Ǜb\ufffdെ\ufffd\u0013\u003e|\ufffd\u0026\u000fb\ufffd\ufffd\u0019\ufffdY\u0019_\ufffd\ufffd\ufffdL\ufffd\ufffd\ufffdi\ufffdS\fm\ufffd\ufffd\ufffd\ufffd*\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\u0013~\u001d\ufffd\ufffd\ufffd\u0007\\\ufffd\ufffd\ufffd\u0026\u000e\ufffd\ufffdE\ufffd\ufffd\u001es5|XB\ufffd\ufffd\u0003\ufffdE\ufffdp\ufffd\ufffd\b\ufffd\ufffd/\u001f\ufffd\n\u0004\ufffd\u0018k \ufffd\ufffd\ufffd\u0014B\ufffd\ufffd\ufffd\ufffd\u0010C\u0013Gi\ufffd\ufffdir\u0005\ufffdԗ\u003e\ufffd\ufffd\ufffd\ufffdn\ufffd\u000b\ufffdZ$\u0010\ufffd\ufffd\ufffdC\ufffd\ufffd3\ufffd\ufffd\ufffd\ufffdQ[m\ufffd\ufffdM\ufffds\ufffd\ufffd?\ufffd\ufffd\u0003\ufffd#\ufffd\ufffd\ufffd\ufffd\ufffdh\ufffdui\ufffdOǞ*\ufffd\ufffdR\ufffdw\u0006\ufffd\b\u000e\ufffd\u001d\ufffdŞ\u0006`4ο\u0007\ufffdm\u001f\ufffdwǸϧ\ufffdr\ufffdZ\ufffd3\ufffdE'\ufffd\ufffdƝ\ufffd\ufffd\ufffd\ufffd\ufffd\ufffdt\u003c\ufffd\ufffd\ufffdL\ufffd\ufffdl\ufffdN\ufffd\ufffdm\ufffd\ufffd\ufffd\ufffd7ēc\ufffdڱ\ufffd\ufffd\f\ufffd\ufffd\ufffdO\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffdZw\ufffd^\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffdܬ;\ufffdt\ufffd# \u0019\ufffd\u0001\ufffd9\ufffd\ufffdUȴ\ufffd\ufffd\ufffd\ufffdx\u0004\ufffd}\ufffd\ufffd\ufffd\ufffd[R\ufffd^c\u0003r\ufffdv\ufffd\ufffd\ufffd\u001a;k?\ufffd\ufffd\ufffd\u000e\ufffd\ufffd\ufffd\ufffd\ufffdk\ufffd\ufffd\ufffd6\ufffd\ufffdm\ufffd\ufffdm\ufffd\t\ufffd6\u000b\ufffd\ufffdl\ufffd\ufffd\ufffd\ufffd\ufffd͆\ufffd\ufffd\u0001O\ufffdϒ9\ufffd\u0012Z3\ufffdP^L{\ufffd\ufffd\"\ufffd\ufffd]\ufffdl.j\ufffd\ufffd\u0003\ufffd\ufffd\ufffd\ufffdM\ufffd\ufffd\ufffd\ufffdY$x$\ufffd\ufffdzص\ufffdO\ufffd\ufffd\u0026\ufffd?ˆ\ufffd\ufffd\ufffd\ufffd\ufffd~\ufffd/\ufffd\ufffd\ufffd]\ufffd\u000f\ufffd/\ufffd\ufffd\ufffd\ufffd\f\ufffd@\ufffdg8ި\ufffdw\ufffd\ufffd\ufffd\ufffd\ufffdIهB\\\ufffdﶱ\u001b\ufffd(\u0010\ufffdC\r{s\ufffds\ufffd{`q\ufffdw౺\u0019z\ufffd/\ufffd]j\ufffd\ufffd \tP0\ufffd\ufffd\b2=}pg1\ufffd\ufffd\ufffd\ufffd*\ufffd\ufffdfq\ufffd\ufffd\ufffdmolb\u0013.\ufffd\ufffdc\ufffd\ufffdM\ufffdK\ufffdP@\\\ufffdO\u0007\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\u0000\u001eԝ\ufffd\ufffd\ufffd_\ufffd\ufffd+r\ufffd@~\ufffd\ufffdpx\ufffd\ufffd\ufffdj܈\ufffd\ufffdy\ufffd\ufffd?\ufffdSm\ufffd\ufffdT\ufffd\ufffd\ufffd\ufffde\ufffd\ufffdF\ufffd\ufffdmæ\ufffdJص=\ufffd3i܎\ufffd\ufffdV\ufffdx\ufffd\ufffd\ufffdoy\u0017Þ\ufffd\ufffd7\ufffd\ufffdL\ufffd\ufffd\u0014\ufffd\u003exVV\ufffd\u0001$\ufffdS\u003c\ufffd\ufffdlչ\ufffdC\ufffd\u001b\ufffd\ufffdؙ\ufffd\ufffdUyڙY\ufffd\ufffd\ufffd\ufffd\ufffdw\ufffd\ufffd~R\u0003D\ufffd\ufffds\ufffd?\ufffd\ufffd?\ufffd\ufffd\ufffd\ufffdB\ufffd\ufffd-\ufffdN\ufffd\ufffd\\Pϑ\ufffd\ufffd\ufffd#qBH\ufffd\ufffd9\ufffd\ufffd8\u0026vV\u001e_oi3\ufffd\ufffdy\ufffd\ufffd0\ufffd7\ufffd\u0005L\ufffd qq\\n\ufffd\u0013\ufffdٟ\ufffd\ufffd\ufffd\ufffdf\ufffd\ufffd\ufffdy dw$һ\ufffd\ufffd\ufffd\ufffd\ufffds\ufffd\u0000\ufffdt\u003en\ufffd\ufffd\ufffdW\ufffdX3p\ufffd\ufffd[N\ufffd+}\ufffd\ufffd\u0017\ufffdquw\ufffd\u001c\ufffd\u0019\ufffd[\ufffd\ufffd\ufffdH\ufffd\ufffd\u001a^K\ufffd\ufffd\ufffd\ufffd\ufffds\u001e\u0003\u0001\ufffd\ufffdP\ufffd\ufffdi\ufffd3\ufffd\ufffd%\\\n\ufffd\ufffd8\ufffd\u001a\ufffd|gc\ufffd\ufffd!\f[\ufffd\ufffd\u0006P\ufffd\ufffd}Ӟ\ufffd\ufffdo,\b\ufffd\ufffd\u000f:\ufffd\u0019\ufffdH˾\ufffd\ufffd\u001f?\ufffd\ufffd\ufffd\u0005\ufffd\ufffd\ufffd\ufffds\ufffd\ufffdV\ufffd\f\ufffdܽ#!\ufffd3|\fr\ufffd\u000fs\ufffd\n\ufffdK\u0011\b\u0018G\u003c}?\ufffd\ufffdK\ufffd\ufffd\ufffd\u000b\ufffd\ufffd\ufffd\ufffd\ufffd\u0014\ufffd\ufffd\u0016\ufffd\\*#\ufffd_G9wX\ufffd\ufffd4\u0014\ufffd\u0011)\ufffd\ufffd\ufffd!\ufffdHO\ufffd\u000fDz \ufffd\ufffd\ufffdDt\ufffdQM\u0003\ufffd=\ufffd?\u0019Sd\ufffd)x\ufffd\u0018O;AE\ufffd?\ufffdM\f\u0015C\ufffd\ufffd\ufffd#{\ufffd\ufffd\ufffd5\ufffd\ufffd\u0006S\ufffd\ufffd\ufffd\ufffdI\ufffd\ufffd\ufffd\u000f\ufffd\u001a3|j\ufffd\u0005\u0007\ufffd\ufffdcϹ\ufffdp\ufffdc9\ufffd1Z\ufffd\u001a\ufffd:{\ufffdhU\ufffdi\ufffd\f\ufffd\ufffd\u000bdzi\ufffd\ufffdM\ufffdm\ufffd\ufffdX\ufffd=\ufffdS*\ufffd\u001c\u0004U\u001eA\ufffd\u0003\ufffd\ufffd~\ufffdZ\ufffd|\n5\ufffd\ufffd`\ufffd\ufffd\ufffdq/fv\ufffd\u0002\ufffdR\ufffd;;l\u0006\u0017\ufffd\ufffd=\ufffda\ufffd;\ufffd\ufffd\ufffd\ufffdy\u0013΃}\ufffd\ufffdE\u0000m\f\u0018|\ufffd\u0017\u003eڷ\ufffd\ufffd4\ufffd\u0003V\u0007\ufffd\ufffd\ufffdf\ufffd\ufffd\ufffd|\u00268\n \ufffdun\ufffd\u0019\ufffd\ufffd\u001bye\ufffd|\ufffd;\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffdL]N\ufffd\ufffdEy|\ufffds\ufffd\ufffdp\ufffdN\ufffd\ufffd\ufffd\u001d\ufffd\ufffd\ufffdq\ufffd`\ufffd\ufffd\ufffd\ufffd\ufffdk\ufffd\ufffda\ufffd\u0002տ\ufffd=\ufffd?\ufffdP1\ufffd\b\u0007\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd%\ufffdw\u00023|FlO\"\u001d\ufffd%\ufffd4s|z^\ufffd\ufffd\ufffd\u0018\ufffd\ufffd~\ufffd\ufffd\u000e\ufffd\ufffd\u001e\ufffd\ufffd\ufffd\ufffdr}\ufffd\ufffd\ufffdI׸\ufffd\u000f\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\u0007b+\ufffd5\ufffd\ufffd\ufffd\ufffd\ufffd?\ufffd\"M*­\ufffd\u0019^\ufffdxf\ufffd\ufffd\u0017\u0000\ufffdfo\ufffd\ufffd;ٝ\ufffd}\u001f\ufffd7\ufffd\u001d\ufffd\u0017\ufffd\ufffd\ufffd\ufffd?_\ufffd\"\u0014\ufffd-\ufffd\ufffd\ufffd\ufffd\u0018\ufffd\ufffd\ufffduL\ufffd_\ufffd\u0001\ufffd\ufffd\ufffd\u0006\ufffd\ufffd\ufffdNG_\ufffdy\ufffd\u0011\ufffd\ufffd\u0014\ufffd|\ufffdCn\ufffdI\u0003\u0017_\u0004\ufffdq\ufffd\u0004)\ufffd\ufffd\ufffd\u001e\ufffd\u0026\ufffd\ufffd\ufffdg\ufffd\u0002\ufffd\ufffd\ufffd\ufffd\ufffd\"=OBat\ufffdw\ufffd\u003e^\ufffdV\ufffdG\ufffdᷠ3\ufffdG\ufffd\u0017\ufffd\ufffdޟ}B\u0017\ufffdT\ufffdw˸սP\ufffd\ufffd{\ufffd\u001f+\ufffd\ufffd\ufffdzq\u0003A:\ufffdr\ufffdS\u003e\ufffd`\ufffd\ufffdq\ufffd\ufffd8O\ufffd8rN\tިM\u000f\ufffdz\ufffd\ufffd\ufffd\ufffdΤ8\ufffdnq\ufffd\ufffdQ\ufffdr\ufffd뷲\ufffd?\u0016\ufffd\u0004\u0000b\ufffd\ufffd\ufffd\ufffd\ufffd}\u0017n\ufffd\ufffd\ufffd\ufffd\ufffd+\ufffd\ufffd~\u0016\ufffdy\ufffd\ufffd\ufffd\ufffd\u000b\u001e\ufffd\ufffdGk\ufffdo\ufffd\ufffd\ufffdտ\u0013=\ufffd\ufffd\ufffd\ufffd?\ufffd\ufffd\ufffd\ufffd\u003e\ufffd\u0013u ,\ufffda\ufffdυ\ufffd\ufffd\ufffd\ufffd\ufffd\ufffdc0\ufffd\ufffdj\ufffdg\ufffde\ufffd\ufffd%r\ufffdÃ8ʁ\ufffd\ufffd\u000f\ufffdz\ufffd\u003c\ufffd\ufffd؂c\ufffd?\u0019\ufffd\ufffd\ufffd\ufffdo\u001bj\ufffdt}\ufffd\ufffdh6\u003e1\u0000\ufffd\ufffd|EЦ\ufffd5*G\ufffd\ufffd\u0004\ufffd\ufffd\ufffd\ufffdw\u0006m\ufffdM\ufffd_l\ufffd\ufffdO\ufffdh\ufffdq\u001c\ufffdSK_\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\u0012\ufffd\u0010\ufffd\\S\u001b\ufffd\ufffd\u0013\ufffd\ufffd\ufffd\ufffd[\ufffd\ufffd\u003cS;\ufffd\ufffd\ufffdF\ufffdO\ufffdFo|*O\ufffd\ufffd_\ufffdE\u003e\ufffd\u001a`w\u0002i\u0017L{;%\ufffd\ufffd\u0002\ufffdRM2\ufffd7\ufffd\ufffd='\ufffdo\u0013\n\ufffd\f\ufffd\ufffd5\u0000\ufffdNE\ufffd\ufffd_4*i\r\u0000\ufffd\u001b\ufffd\ufffd립\ufffd\ufffd\ufffd\ufffdw\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd5\u0010\ufffdTD\ufffd\ufffd\ufffd\u001f\ufffd\ufffdnz\ufffd;u\ufffd\u0007\"\u001b\ufffd}S\ufffd=\ufffdͿ\ufffd\ufffd\ufffd\u001eW\ufffd\ufffd\ufffd\ufffd\ufffdE\ufffd\ufffdj\ufffd\ufffd'\ufffdJ\u0012\ufffd\ufffd\ufffda\ufffdP\u0003\ufffd\ufffd\ufffd\ufffd\ufffd;\ufffd\ufffd\ufffdx\ufffd\ufffd.\ufffd\ufffda\ufffdݝ\ufffd\u0017\u0013\ufffd\\z\ufffd+\ufffd\ufffd\ufffd\u000e\ufffd6\ufffd\u000e\ufffd\ufffdӼ8\ufffd\ufffdF\ufffd޿G\ufffd\ufffdz\ufffdq\ufffd\ufffd\ufffd\ufffd\ufffd\ufffdt\ufffd\ufffd\ufffdN\ufffd\f\ufffdk}ni\ufffd\ufffd:J\ufffd\ufffd\ufffd\ufffd\u001f\ufffdz\ufffd#\ufffd\ufffdC4A\ufffd[\ufffda\ufffd\ufffd\ufffd\u0012\ufffd\u0026^B\ufffd\ufffd\ufffd\ufffd\u001b\ufffd\u0003\ufffd\ufffd*]\ufffd\ufffd޻JVP^\\\ufffdVŚ\ufffd0\ufffdϡ\ufffd\ufffd\ufffdl\ufffd\ufffd\u0003sz\u0017Y\ufffd\ufffdd\ufffdtl\ufffd\ufffd\ufffd\ufffd\ufffd\f\ufffd\ufffd\ufffd_S\b9fS*\ufffd\u000e\u0011\u0019\ufffd\ufffd\ufffd)\ufffd;\u003c\ufffdo,{K\ufffd\ufffd\r\ufffd?=g\ufffd|5\ufffd\ufffd\ufffd\ufffd-z@\ufffdޅ\ufffd\ufffdM\ufffd\ufffd*h랩|!|?\u0016^\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd%\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd/\u001dS\ufffde\ufffd\ufffd\ufffd\ufffd\ufffd^\u0017\ufffd\ufffd:'t\ufffd_\ufffd\ufffd\ufffd\ufffd\ufffd\u0015\"C\ufffd\u0011\ufffd\ufffd\ufffd\ufffd\u001fq\ufffd=\ufffdo\ufffd\ufffdS\ufffd\f^w\ufffd\ufffduz]\ufffdϯ\ufffd\ufffd\u001bb\u0007\ufffd5U\ufffd\ufffd\ufffdd\ufffd\ufffd\ufffd\ufffdV.C\ufffd$8\u003c\ufffdt\u0013\ufffd*\u0017\b\t\ufffd7\ufffd\ufffd\u003cKch㨤\ufffd\ufffd\ufffdhkU\ufffd(\ufffd\ufffd\ufffd\ufffdޒ\ufffdZ\u000e\ufffdå\ufffd\u001e\ufffdmj\u001b\ufffd\ufffd\ufffd\ufffdoR\ufffd\ufffd-\ufffd\ufffd1\ufffdk\u0011\u0002\ufffd\ufffd#\ufffd\ufffdaW\ufffd\n{vww\u001e\ufffd\ufffd\ufffd\ufffdgְ\ufffd|\ufffdw=\u0013^Ե3gh\u001d\ufffd\u0000\ufffd\ufffd\ufffd\ufffd\ufffdu\ufffd=\u0015d\u001c\u0004\ufffd\u001c\ufffdG\ufffdw\ufffdΊ\\\ufffd\ufffd\ufffd\ufffd)5\u000ez\ufffd:\ufffd_\ufffd\ufffd\ufffd5\ufffd\ufffd\ufffd\ufffd\ufffd8\u0014\ufffd}4\ufffd\ufffd\ufffd\ufffd\ufffd=\ufffd\u0003oP\u0016\ufffd\ufffdq@\u001a\ufffdh|\ufffd\ufffd\ufffd\ufffd\ufffdL_:\ufffdg\ufffd\f\ufffd\ufffd\ufffd\ufffdvr\ufffd\ufffdT\ufffd\ufffd\u0006^b\r\u001c#\ufffd\ufffd\ufffd\ufffdMW\u000f7k;\ufffd\u0004\ufffdH\ufffdg\ufffd_\ufffd0\u0007\ufffd\ufffd\ufffd\ufffdF9޴\ufffdc\ufffdD9\ufffd \u001f\u000b\b\u001a׷T\u000e\ufffd|\u000766\ufffd|\ufffdriC\ufffd\u0011\ufffd콊\ufffd\ufffdTߙ\u0019E\ufffd\u0005\u001c\ufffd\u000b\ufffd\u0007\u0002/\ufffd\ufffd\ufffd\ufffd?]=\ufffdb\ufffdr\ufffdΧ\ufffd\ufffd\ufffd\ufffd\ufffd/\ufffd\ufffd\ufffd_\ufffd\ufffd\ufffd$_\ufffd\ufffd\u0007t\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\u001f\ufffdOt\ufffd\ufffd\ufffdo\ufffd}\ufffd\ufffdWڼʛ\ufffd\ufffd\ufffdv\ufffd\ufffd\ufffd\ufffd\ufffds/\ufffdL/\ufffd~_\ufffd\ufffd\ufffd\u000bΛ\ufffd\ufffd\ufffd(\ufffd\ufffd}\ufffd\ufffdE\ufffd\ufffd\ufffdijo\ufffd\ufffd|\ufffd{\ufffd\ufffd\u001f\ufffd\ufffdO\ufffdg\ufffd\u0000\u003e\ufffd/\ufffd⇿\ufffd\u001f\u0015\ufffd\ufffd\u0015\r\ufffd\u001fE}\u0001M\ufffd4\ufffd'V_\ufffd\ufffd4\u0010\ufffd#\ufffd\ufffd\u0015\ufffd\ufffd\ufffd2\ufffdOQ:N\ufffd\ufffd8\ufffd\ufffd\u001ch\ufffd]\n\r?\u0017\ufffd\ufffd\ufffd\ufffd~\b\ufffdǾ\ufffd\ufffd\ufffdr\ufffd\ufffdc;\ufffd\ufffd\ufffdxԇ\ufffd\ufffd{i\ufffd\ufffd\ufffd\ufffd#W\ufffd\u0015\ufffdD\ufffd7\ufffd^\ufffd\ufffd\ufffd\ufffd\ufffdM\ufffd\bݏ\ufffd\ufffdƭ\u001c\ufffd(\ufffd\ufffd\u0007\ufffd\ufffd\ufffd[՝Z\u0003\u003c\ufffd\ufffd\ufffdG\u000f\u001a.\ufffd\u001d\ufffd\u00139Eqѩ\ufffd\u001ee\ufffd\ufffd=\ufffd\ufffd\ufffd\ufffd\ufffd_\ufffd+}О\ufffdkV\ufffdS\ufffd\ufffd2\ufffdq6\ufffdߤg\ufffd{\ufffd=\ufffd\ufffd(\ufffd|\ufffd\ufffd\ufffdww\ufffdl\ufffd\u001c\u001bD}\u001f\u0004v\ufffd\ufffd%\ufffd\ufffd\ufffd\ufffd\ufffd\u000bE\u0019\ufffd[\ufffd\u001a*\ufffd\ufffd\ufffd\ufffdG\ufffd\ufffd\u0017a\ufffd\ufffd\ufffdR\u0004\ufffd$\u0006\ufffd\ufffdE\ufffd\ufffd\ufffds\ufffd\ufffd\ufffd\ufffd\ufffd\u0005%rFs\u0004\ufffd\u001f@\ufffd\ufffd\ufffd\ufffdK\ufffd\u00199\ufffd\ufffd\n[\u0019\u0013\u003e\u001e\ufffd\ufffd)\ufffdV2\ufffd\u0026\u001f\ufffd\u0005\u000eD+Y\ufffd\ufffd\ufffd-\ufffd_k\ufffd\ufffd\ufffd\u003c-\u0026n:\ufffdt\ufffd\ufffd\ufffd(\ufffd\ufffd\ufffdt\u0019\ufffd\ufffd\ufffd*\ufffd\ufffdi\u0014H\ufffd\ufffdU|\ufffd\ufffd\ufffdQ\ufffd\ufffd\ufffd\ufffd\ufffd\u0019,Fw\ufffd1\ufffdU\ufffdW\u0015L\ufffd:\ufffd\ufffd\ufffd\ufffd\ufffd\ufffdxfE\ufffd\ufffd\ufffd\ufffd\ufffd9\ufffd\u001d\ufffdw\u001d\ufffd{3:=\ufffd\ufffd\ufffd\ufffd \r\ufffd\ufffdn\ufffdusɢ=\ufffd\ufffdB\ufffd\ufffd~\ufffd\ufffd\u000e\ufffd\ufffdvdT\ufffd\ufffd\ufffd\ufffd\\P\ufffd\ufffd^\u0013\ufffd\ufffd\ufffdF\ufffdG\ufffd\u003e\ufffd\ufffd\ufffd\f{.o\u0018n\u0016\ufffdl\ufffdt\ufffd\ufffd3\ufffd\ufffd魤\ufffd_\ufffd\ufffdl^\ufffdY\ufffd\ufffd\ufffd1\ufffd\u001a\u0016\u001b\ufffd\ufffdK\u003c\u0007/\ufffd\u0007\ufffd\"\ufffd.72\ufffdTr\u001co4\ufffd\\\u003c\ufffdxɱ\ufffd\ufffdp\ufffd\ufffd\ufffd\ufffdw\ufffdO`W\u0001\ufffd\ufffdW\ufffdg\ufffd\ufffd\ufffd-\ufffd\ufffdi\ufffd\ufffd#\ufffd\u0011\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd$2\u001eFl\ufffd\ufffd]\ufffd\ufffd\ufffdg\u0010\ufffdH\ufffd\ufffd\u003e\u001f\ufffdS\ufffd\ufffdv\ufffd߭\ufffdx\u003c\ufffd\ufffd]I\u0014\ufffd\ufffd\ufffd\ufffd'\ufffd\u0001\u003c\u000e\ufffdl\u000e\ufffd\ufffd\u0000ɝ\u003e\ufffd\ufffd\r\f\ufffd\ufffdL\ufffd\u001dVg\ufffdў\ufffdU.\u0026\ufffd/\ufffd\ufffdnq\ufffdW\ufffd\ufffd4gs'\u001e\ufffd\u0005\u001e\ufffd\ufffd\ufffd\ufffdNN/?h\ufffdwac\ufffdϻ6\ufffd\ufffd8\ufffd\u003cN\ufffd\ufffdк\u0000\ufffd\u001b\ufffd\ufffd\ufffd\ufffd\ufffd=\ufffdC\ufffd9R\ufffdj\ufffd\ufffd\ufffdg\ufffd\ufffd\ufffd|ge\u0011\ufffdG~\ufffd7(\u000fg\ufffd\ufffd\ufffd\ufffd\u0012Z\ufffd\ufffd\ufffdo{'=藄\ufffd\ufffd\u000f\ufffdA\ufffd\ufffdn̆\ufffd/\ufffd\ufffd\ufffd\\ۻ`\u003e\u001d/֌\"\u001e\ufffd\u000fK\ufffd7\ufffdo\ufffda\ufffd\ufffd\ufffd8\ufffd\ufffda\ufffdć\u0007j|\ufffd\ufffd\ufffdi\ufffd\ufffd\ufffd\ufffd~\ufffd]\ufffd\u0007b!\ufffdaI\ufffd\u0012\u001a\ufffde:\ufffd\ufffdݣ\u001f\u0015\ufffd\ufffd_TwR\ufffds\ufffd#-Ԉ\ufffdS\ufffd;\ufffd͚\ufffd\ufffdu\ufffd]\ufffdO(\ufffd\ufffdD\ufffd!\ufffd8\ufffd\ufffdr\ufffd\u001d\ufffd\ufffd\u003cW#\ufffd[\ufffdt\ufffd\ufffd]\ufffd^\ufffd܅\ufffd7\ufffd\ufffd;\ufffd\ufffd\r\r\ufffd\ufffd\u0005\u0010\ufffdhe\ufffdkz\ufffd\ufffd\ufffd\ufffd\u0007\u003c\ufffdk\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\u0010ξ\\\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\f\ufffd\ufffd\ufffd\ufffd\ufffd(\u0007\ufffd\ufffd\u001f鍏B\ufffd~\ufffdGSO\ufffd\ufffd;\ufffdj\ufffd\u0004\ufffd!vm\u003c\ufffd\u000e\ufffd(s\ufffdvY\u0013\u001ax\ufffd\u001bzj\ufffd%\ufffdG[\ufffd\ufffd\ufffd\ufffd\ufffdDޟ\ufffdv6\ufffdm.\ufffd\ufffdN\ufffd\ufffd\ufffd5\ufffd\ufffd\ufffdpk\u001d\ufffd\u001c\ufffd\ufffd\ufffd\u0026\ufffd\ufffd\ufffd+y*m~\tw\b\u0004\ufffd\u003c\ufffd\ufffd2\u0014\ufffdT\ufffdA\ufffdX\ufffd\ufffdw\ufffd\ufffd\ufffd\ufffd~{\ufffd\ufffd\ufffd~\ufffd=Y0\ufffdu\ufffd\ufffdj,\ufffd\ufffd3\ufffd\ufffd\"\u0012Y֫c\ufffd\ufffd;\ufffd\ufffd\ufffd\ufffdk\ufffd\ufffdu\ufffdLF\ufffdD^\u0013{\ufffd\ufffd\ufffd\ufffd\u001a\ufffdC\ufffd\ufffd;J\ufffd\u003e\ufffd:\ufffde\u001f\u001cZ\u0000Z\ufffdc\u0018\ufffd\ufffd\ufffdq\ufffd/\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\t\ufffd\ufffdg\ufffd\u001a\ufffdS]\ufffd\ufffd|\ufffd\ufffd\ufffd\ufffdP_y\ufffd5\ufffd\u003ez\ufffd\ufffdQ\ufffdt\ufffd\ufffd\ufffd\ufffd\u0007\ufffd\ufffd\r9\ufffdA\ufffd%z^\ufffd=\ufffd\ufffd\ufffd\u0026\ufffd\ufffdb\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd}}ʈ\ufffd\u000eH\ufffd\ufffd\u003e\ufffd\ufffdO?\ufffd3\ufffd\ufffd\b\ufffd\ufffd\ufffd*\ufffdJ\ufffd\ufffd\u0002mq\ufffd+dp+7\ufffd\ufffd\ufffd\u0000Fq\ufffd\ufffdG\"\ufffdQ\ufffd_\b\ufffd\rD\u0003Ǫt\u0026z\ufffd\u0012\u0026\u0015,1\ufffd\ufffd/\u0004\ufffdP\ufffd\ufffd\ufffd\ufffdG\ufffdyR\ufffd1\ufffdL\u0000\ufffd\ufffd\ufffd[z\ufffd]\ufffdQ\ufffdS\u001a:E\ufffdL\ufffd\u0018\ufffd;z\ufffd|\u0000\ufffd\ufffdbxo\ufffd\ufffd\ufffd\ufffd\\\ufffd/\ufffde\ufffd\ufffd\ufffd\ufffdS,\ufffd\ufffd\ufffd\ufffd\u0012[\ufffdD\ufffd}}ԏCO?\ufffd՚$\ufffd\ufffd\ufffd\u0014\ufffd\ufffd\ufffd\ufffd\ufffd3Γue\ufffd\ufffdD\ufffdG\ufffd\ufffd\ufffd+\ufffd\ufffd\ufffd\ufffdri+\u000bm\\\ufffd3$\ufffd\ufffd;\ufffdq\ufffd\ufffd\u0013\ufffd\ufffdFWl\ufffdg\ufffd\ufffdH#\ufffd/^\ufffd\ufffdEB\ufffd7\ufffd\ufffduy\ufffdo\u0010ۣH\ufffd\ufffdP\u0018\ufffdHX\ufffd\ufffd\ufffd`̣\ufffdۘ,\ufffd\ufffd\ufffdf\ufffdc$$\t\ufffdY\ufffd\ufffd4\ufffd'\ufffd\ufffdb|\f5i\ufffdT\ufffd\ufffd6\ufffd\u001f\ufffd\ufffdz\u00027\ufffd\ufffd\ufffd|/\ufffdٽ\ufffd\ufffd~\ufffd\ufffdmǘ;t?\ufffd\ufffdD{VB\ufffd__\ufffd\ufffd\u000e\ufffd;\ufffd\ufffd~\ufffd+:\ufffd\ufffd\\\ufffd\ufffd\ufffd?L;\ufffd\ufffd\n`0\ufffdJ\u0026\u001d\ufffd\\:U=\ufffdΡ\ufffd\ufffd\ufffd7A%\ufffd5\u000b\ufffd.-\ufffd\u001f\ufffd\ufffdfw^Lv\ufffdŸ\ufffd\u0003\ufffd\ufffd\ufffd\\\ufffd|\u0000\ufffd\r\u001f\ufffd?\ufffd3\ufffd\ufffd\ufffde\u0003cڣ\ufffd;\ufffd\ufffdO\ufffdY\ufffd1?}\ufffd\ufffd\ufffd\ufffd\ufffd\u00199c\ufffd|\ufffd؍C\ufffd\ufffd{tKsL_d\ufffdZ\ufffd\ufffd\ufffdYR\ufffd\ufffdԲ\ufffd\u0003\ufffd5\ufffd\ufffd\ufffd\ufffd\u0011^\ufffdXW\ufffd\ufffd\u00014w\ufffd\ufffdı2\u003e \ufffd\ufffd*\ufffd\ufffd\ufffd\u0002\ufffd\ufffd\ufffd\ufffd\u001b\ufffd\ufffd\ufffd1\ufffd\ufffd\"\ufffd܅\ufffd\u001c\ufffdY{Nt\ufffd\ufffdY\ufffddzS\ufffd\ufffd\ufffd׭ѳG\ufffd\ufffd\"\ufffd/W\ufffd\ufffd¶\ufffd\u0002yeO\ufffd\ufffd\u000e\ufffd)T\ufffd]\ufffd\u001f\ufffd\rr\ufffd\u0015\u003e{\u0005\ufffd\ufffd\ufffd۪{\ufffd4}V\u003e\ufffd.)p \ufffdO\ufffd\ufffdQ\ufffd\"\ufffd\ufffd\u001d\ufffdpk\ufffd\ufffd)\ufffd5\ufffd\ufffd/G\u0002\ufffd\ufffd\u0001\ufffd˰\ufffd]\ufffd\ufffd\ufffd\ufffdwԮT\u000f!YC\ufffd\ufffd\u001c\u001f\ufffdh%\u000b\ufffdպ#\ufffd\ufffdA\ufffd\\\ufffd\ufffdo4\u0016%࣮\ufffd\u0005\ufffd}\ufffd\u000b\ufffd\ufffd\u000ea\ufffd\ufffd\u0010\ufffd \ufffd\ufffdѨ\ufffdm\ufffd\ufffd\ufffd'\ufffd\ufffd\ufffd\ufffdu\ufffd\u001f\ufffd\\\ufffd\ufffd\ufffd\ufffd\ufffd7in\t\ufffd\ufffd\u001a\ufffdn\u001eP\u001a\ufffd`\ufffd\ufffd\ufffdC\ufffd\u000f\ufffd\ufffd\ufffd\ufffd\u0003\ufffdмu\ufffdU\u0003\ufffd3cD\ufffd\ufffd*\\t\ufffd\ufffd#h%\ufffd\ufffd9i\ufffd\u001d{f\ufffd\ufffd\u000f\ufffd\ufffdīu\ufffdB\ufffd\ufffdS\ufffd{\ufffd\ufffd\ufffd.\u0003Hk\\6\ufffd\u0006\ufffd\ufffd\u0016\ufffd\ufffd\ufffd'6X\u001b`\ufffd{\r\ufffd\u000b\u000e\ufffd\u0011\u001f5\ufffd\ufffd\\\ufffdw\ufffd!\ufffd\ufffd\ufffd\ufffd/\ufffd\ufffdP[\ufffd\ufffd'\ufffd\ufffd\ufffd\u0015\ufffd\u000b\ufffd\ufffd4O\ufffd\t\u0004\\b\ufffd\u0001\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\u0002S`z\ufffd4u\ufffdގQߡ\ufffd\ufffdv\ufffd\ufffd\ufffd\u001d\ufffd$s\ufffd\u003eDʏ\ufffdk)\ufffd\ufffd\u0019\ufffdF\ufffd+\u0010\u0011[B\ufffd\u0007\ufffd\ufffdƂs\ufffd\ufffd\ufffdѣ\ufffd\tG\ufffdL\ufffd\ufffd\ufffd\ufffd'\ufffd\ufffd\u0004\u001e\ufffd\ufffdѬ,\u000e8@\ufffd4ǻ\ufffd\ufffd~k;\u0001i\ufffd1\ufffd\ufffd\ufffd\ufffdh\ufffd\ufffd\u0002\ufffd\ufffd\u001a:gN\u0019K\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd*\u001f\ufffd\ufffd\ufffd\u0016\u0007G—,\u001e8^\ufffd\ufffd\ufffd\ufffd\fw\ufffdIP\ufffd\ufffd\\\u001c\ufffd\ufffdK\ufffd#[WdvΈ\ufffdMk?\ufffd\ufffd\ufffd\ufffdgJ\ufffd\u0007\ufffdu\u0011+㋒\ufffdBI\n\ufffd\ufffdL\ufffd\u0006U_\u001c\ufffd϶\ufffd\ufffd7Kz\ufffd\ufffd\ufffd\ufffdD\ufffd\ufffd\ufffds\ufffd\ufffdu\ufffd\u003c\ufffd#=)\ufffdl\u0010\ufffd\ufffd\u000e*\ufffdg{\ufffd\u00059\ufffd\ufffdR\ufffd\u0006W\ufffd3\ufffd\ufffd\ufffdy(\ufffd4ߏ\ufffd\ufffd\ufffdݷ\ufffd}\ufffd\ufffd\u001cM\ufffd}':\u0002\ufffd\u0007\ufffdu\ufffd\ufffd\ufffd7Ѹу+\ufffd-\ufffd\ufffd\u0014\ufffdo\ufffd\ufffdf2\"\ufffd\ufffd9s3\u0000!g\ufffd\u001e\ufffdWv\ufffd\u00176 {վK\ufffd\u0004\u0015\ufffd\ufffdBFW\ufffd\ufffd9p\ufffd,\ufffd\r\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd~\ufffdx\u0013\ufffd\u0019y_\ufffdqy\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd*\ufffdBh2\ufffd\ufffd\rB\ufffd-\ufffd\ufffdZznq4\u003e\u0010\u001c\ufffdN\ufffd\ufffdS\ufffd\u001aj\u0000G\ufffd\ufffd\ufffd\ufffd\ufffd\u0019\ufffdqd\ufffd\ufffdaN\ufffdL\ufffd\ufffdx\u0000=#{\ufffd\ufffd\ufffd\ufffd}\ufffdw\ufffd\ufffd}\ufffdg\ufffd\u000e\ufffd/\ufffd\ufffd~\ufffd\ufffduE\ufffd,\ufffd\u003cc\ufffdGb\ufffd#:\u001b\ufffd\ufffdԁ=\ufffdh~`E\ufffd\ufffd\ufffda\ufffd\ufffd\u000fK\u001aW\ufffd\u0012\ufffd:\ufffd\ufffd9\ufffdf+2=;\ufffd\ufffd\f\ufffdS=\ufffd\ufffd\ufffdDJ4\ufffd\u000e\u0002\u0007\ufffd3\ufffd\u001b\ufffd9\u0010\ufffd\ufffd\ufffd*\u0012^$\ufffd\u0018\ufffd\ufffd\ufffdO\ufffd\u0006\ufffd\ufffdh\ufffd\ufffdY\ufffd/\u0026Y2\ufffd\ufffd\ufffd\ufffdkh\u003c\ufffd'\ufffd\ufffd\ufffd\u0014\ufffd\ufffd\ufffd\u0015\ufffd\ufffd\ufffd\u0005\ufffd\ufffd+E^\ufffd\ufffd\u003e\ufffd{\ufffd\ufffd+\ufffd\ufffdhf\u0014\ufffd\ufffdАU\ufffd\ufffd\ufffd`\ufffd[\ufffd\ufffd\ufffd(ɹ\ufffd\"\u001c\u0013\u0000\f\ufffd\ufffd]\ufffd\ufffdY\ufffd?\ufffd\ufffd\ufffd\u0013z \ufffd:\ufffdC\ufffd\ufffd9\t`\ufffd\ufffd\ufffd\ufffdڻ3\ufffd~\ufffd2\ufffd\ufffd\ufffd\ufffd\ufffd\u0016[nK\ufffdo\ufffd\ufffd\ufffdѝ\ufffd\ufffd#\ufffd#C\u001b\ufffd\ufffdg\ufffd\u0003P4\ufffdd?u%hh\ufffd\u0006\ufffd\ufffdR~\u001a\u0019\ufffd\ufffdG[\ufffd\ufffd\u000e\ufffd@\u0000%\ufffdQC\u003cH\u000f\ufffd\u0017\ufffd\ufffd\u0019\ufffd\ufffd\ufffdF[]\ufffd\ufffd(+۵OgM\u003e\ufffd\ufffd\u0010\nV\ufffd\ufffd\u0004\ufffd\ufffdB\ufffd\u0019\ufffd\ufffd\ufffd\ufffd\ufffd:\ufffd \fҗC\ufffd\u001d\ufffd\ufffd5\ufffd42\ufffd\ufffd\ufffdv\ufffd\u0012}0\ufffd\ufffd1\ufffd\ufffdm\rLl.\ufffdN\r\ufffd\ufffd\u0007\ufffd\ufffd\ufffd\\*\ufffd\ufffd\r\ufffd\ufffd\u0006^\ufffd\ufffdJ\u0016V\ufffd/\u001f\ufffd\ufffd\u000e\ufffd\\\ufffdo\ufffd\ufffd|/\ufffdv\u001c\ufffd5\ufffd\u0007m\ufffd\u001ag\ufffdsx\ufffd\u0015\ufffd{\ufffd\ufffdM\ufffd\ufffd\ufffd\ufffdN~_\u0007\ufffdo\ufffd]=\ufffd\ufffd\u003c\ufffd,OI\tj\ufffdҚ\ufffd_O\ufffd\ufffd\ufffd\ufffdj\u001b5{V\u0007\ufffd5\u003e\u000b\ufffdq^\ufffd-\ufffd1\ufffd+z\ufffd\ufffdn]\ufffd,^ǚ\ufffd\ufffd\u0002\ufffd\ufffd\ufffds\ufffd\ufffdS\ufffdSd\ufffd\ufffd}\u0002\ufffd\u0013~\ufffd_\ufffd݈\u0001\ufffd7K\ufffd\ufffd\ufffdZ|\ufffd拶\ufffd.\ufffd\u0006j\ufffd\ufffd\ufffdZ@\ufffd\ufffdΌN5s\u0017\ufffd\ufffd-\ufffd\ufffd\u0012,wTơ#\ufffd\ufffd\ufffd\"\ufffd'\ufffd{\ufffd\u0016T\ufffd\ufffd=h\ufffd~\ufffd}:i\ufffd\u0003\ufffd؜\ufffd\ufffd\ufffd$\ufffd\ufffdZ\ufffd:\ufffd\ufffd\ufffd\ufffds;\ufffd\"3ݪ\u001e\ufffd\ufffd\ufffd\u000f\ufffdQ\ufffd*\ufffd\ufffd^W\ufffd\ufffdO}TϽ\ufffdgj\ufffd\ufffd\ufffd\ufffd\ufffdD\ufffd\u0026\u0026X\ufffd\ufffd\ufffd\ufffd\u003e\ufffd;c0'\u0007\ufffd\ufffdw\ufffdW^\ufffdZ\ufffd\ufffd^\ufffdϞ\ufffds\u0000\ufffd]\ufffd\u0017\ufffdE\ufffdo\u0015\ufffdoח\ufffd\ufffd\ufffd\n\ufffd[ҭ\ufffd\ufffd\u0007{\ufffd?\ufffd\ufffd'\ufffd\ufffd\ufffd(\ufffdO\u000b\ufffd\ufffd\ufffd\ufffdS\ufffdԱ\ufffdz\ufffd\u0002\ufffd\ufffd딟\u00184\ufffd\ufffd\ufffd\u0010q9N\ufffd!\ufffd\ufffdz\ufffd\"2\ufffd7h~\ufffd\ufffd\ufffd5\ufffd\u0013)46H\ufffdE\ufffdJ\ufffd?jc\ufffd\ufffd=\u0004k\ufffdDn\ufffdAI\u0017\ufffd4\u0006\ufffd\ufffd׷\ufffd\ufffd\ufffdp\ufffd\ufffdoʅ\ufffdR/B\u0002\ufffd`\ufffd\ufffdCqQ\ufffdD?\ufffdG\ufffd\ufffd\u0012\ufffd\ufffdR\ufffda\ufffdWa\ufffdT\ufffd\ufffd\ufffdW{\u0015\ufffd\ufffd\ufffds\ufffd\ufffd$߁\ufffd棸@[S@\ufffd\ufffd=?Z?G\ufffd\ufffd\ufffd6gq\ufffdk^\u0026\ufffd\ufffd)x\ufffdU\ufffd\ufffd47\ufffd\ufffd\ufffd\u001er\\n\ufffd\ufffd\ufffdh\n\ufffd\ufffd\ufffd\ufffd\ufffde\ufffd\ufffd\ufffd\ufffd\u0026\ufffd\ufffdd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffdw\ufffd\ufffd\ufffd\ufffdu߽\ufffd-s=۬\ufffd\ufffd\ufffd|2\ufffdӗ\u000f\ufffdSCYwj\u001c0\ufffd\ufffd\ufffd\u001d\ufffd\ufffd7\ufffd\u0000\ufffd$J\ufffd4\u000f\ufffd\ufffdQj\u0012\u0017\ufffd\ufffd\u0015\u0012\ufffds0t_\ufffd\u0013\ufffdz\ufffd\ufffd.\ufffdn\ufffd\ufffd\u0005\u000b\u003eʁ\ufffd|[\u000f\ufffd\ufffdN\ufffd\u0011OX\u0017hk;\ufffd\ufffd7\ufffd\u0003\ufffd\ufffd\u003e\u001e\ufffd\ufffd\r\ufffd\ufffd\ufffd#5w\ufffd\ufffd^\ufffd\f\ufffde0\u0006\ufffd\ufffdٶ\ufffd?\ufffdn\ufffdH}]\ufffdW\ufffd\ufffd\ufffd\ufffdwQ\ufffd\ufffd\ufffd\ufffd\ufffd\ufffdW﹥2\ufffd\ufffd\ufffd\ufffddN\ufffd\ufffd\u0019\ufffd\ufffd\ufffd7\ufffdƿR\ufffd\ufffd\ufffd1\ufffdK\u0014M\ufffdcFt:Zw\ufffd\ufffd%\ufffd9\ufffd\ufffd\ufffd%\ufffd\u003e$\ufffd\u0016\ufffdmk\ufffdʰ\ufffd=\ufffd\t\ufffd\ufffd\ufffdf\ufffd)R\ufffd|[E\ufffd*\ufffd\ufffduQ}\u001d\ufffd\ufffd\ufffdj펯\ufffd\ufffdny2l\ufffd\ufffd5­\ufffd\ufffd4g\ufffd\ufffd87\\,\u00030k\ufffd\ufffd\b\ufffd\ufffd\ufffd7i\ufffd\ufffdH\ufffdׁ\ufffd\ufffdc\ufffd\ufffdc\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd@0O\ufffd?\ufffdX_\ufffdnu\ufffdY\ufffdE\ufffd\ufffd\ufffdʍ\ufffdYs\ufffd\ufffd\ufffd5\ufffd.\ufffd\ufffd\ufffd\r\ufffd\ufffd\\\ufffdЗG-ܴ\ufffd\u0019\ufffdzb\t\ufffd1\u0012h.@\u0005_\ufffd\ufffdLW\ufffdu\ufffd\ufffdhmM\ufffd\ufffd\u0015\ufffdX z\ufffd#\ufffd\u0011͗r\ufffd\u001c\ufffd,tFg\ufffd7s\ufffd\ufffd\b\ufffd@\u0000\ufffd\ufffd\ufffd಺\ufffd\ufffd\ufffd\ufffd7x\u0002\ufffd)\ufffd\ufffd\u0006\u0001\ufffd+\ufffd\ufffd\ufffdɻ\ufffdwAuo\ufffdh\ufffd\ufffd\ufffd\ufffd\u0000\ufffd'h\ufffd\ufffd!\ufffdt\ufffdp\ufffd{\ufffd'\ufffd\ufffd\ufffdX\ufffd\u003cx\ufffdY\ufffdv\ufffd\ufffd׈g\ufffd\ufffdvl\ufffdẶ\ufffd\ufffdd\ufffd3۷P\b\u0012\ufffd\ufffd\ufffdw\ufffd\ufffd\ufffd\u0006\ufffd\ufffd\ufffd\ufffd\u0000\ufffd\ufffdP0\ufffd\u0000\ufffdE\ufffd\ufffdz\ufffd2\ufffdYܩ\ufffd\ufffd\ufffdP\ufffd6\ufffdAM\ufffdv\ufffd\ufffd_\ufffd\ufffdQn9\\T\ufffdQ]\ufffd6\ufffdΓ\ufffd\ufffd\u000f\ufffd5\ufffd\ufffd\ufffd#\ufffd\u001fH|\ufffdY4\ufffd(ph\u003e\r\ufffd\ufffd1\ufffdr\ufffd\ufffd|Np\ufffdk}\ufffd\u0006:\ufffd\ufffdl`\u000e*\ufffd#*\ufffd\ufffduL{\ufffd\ufffd;\ufffdT=\u0006\ufffd\ufffd\ufffd#\u0001d\ufffd,\ufffd!\ufffd\ufffd\ufffd\u0002е\ufffdQ\u0007\u001f\u001d\ufffdNֶ\ufffd\u0012\ufffd\ufffdD\u001a(u\r\ufffda\ufffd\ufffd\u0019D\ufffd\ufffdM\u000e\u0014:D\ufffd\ufffd\ufffd÷2\ufffd\ufffd\ufffdWz\ufffd\ufffdIN9\\\u003c\ufffdM\ufffdy\ufffd\ufffd\ufffd\u0013\ufffd\ufffd\u0016A#(2\ufffd\ufffdl\ufffd6f\ufffd\ufffd\u0013=\ufffdK=\u001dK\ufffd\u000e\ufffd\ufffd)\ufffdX!A\ufffd\u0010\ufffd\ufffd\u001f\ufffd\ufffd\f\ufffd4\ufffd\ufffdGTk\ufffd*z\ufffd!0}\u003e\ufffd\ufffd\ufffdF\ufffd\ufffdK\ufffd\ufffd\u000bG'so\ufffd\ufffd\ufffd\ufffdf^\ufffd\ufffdYi\ufffd\ufffd\ufffd\ufffdW\ufffd\f\ufffdZ\ufffd\ufffd'蘗|\ufffd\ufffd[ñ\ufffd\u0018f\ufffd\ufffd:\ufffd6\ufffd\u001e\u003e\ufffd\u000b\ufffd\ufffd\u001f\ufffdi\ufffdğ\ufffd\u0013\u001dmi\ufffd\ufffd\ufffd\ufffdl\ufffd\ufffdQF\ufffd\u0011\ufffd\b~\ufffd{#R\ufffdh\ufffdd\ufffd?=|\u001d\ufffdH\ufffd\ufffd\u0014?\u001ekvhο\ufffd\ufffd\ufffd\u0004\ufffd|\u0018m席\ufffd\ufffd\ufffd\ufffd\ufffdᆭsU4l\ufffd\ufffd\ufffd\ufffd\ufffd8\ufffd\ufffdJ\ufffdԉ\ufffdu\ufffd\ufffd\ufffd\ufffdA\ufffd\ufffdx\u0005\u000e\ufffd\ufffd\ufffd9\ufffd\ufffd\ufffd\ufffd޿קa\ufffd\ufffd'a\ufffd\ufffdmM/\ufffd\ufffd\ufffd\ufffd'\ufffd\ufffd\ufffd\ufffd7WK(\ufffd\u001a\u001f\u000bOhz\ufffd\u001e\ufffd\ufffd\ufffd\ufffdҳ\ufffd\u003e\u001d\u0012\ufffd\u000f\ufffd\ufffd\ufffd\ufffd\ufffdԘ}e~\ufffd\ufffdo_\u0019\ufffd\ufffd\ufffd\ufffdP\ufffd\ufffdr\ufffd\\\ufffd\ufffd\ufffd\u0011\ufffd/\ufffd\ufffd\ufffd\ufffd?\ufffd\u0017\ufffdN\ufffd\ufffd\u0012\ufffd\ufffd\ufffd\ufffdo\ufffd`\ufffdA~\ufffd\u003e\ufffd\ufffd\ufffd\ufffdy\ufffd@\u001f\ufffd\ufffd\ufffd\ufffd\ufffd\ufffdW(\u001a\ufffd\ufffdo\ufffd\ufffd\ufffd{ѭ]\ufffd\ufffd\u0001\ufffdg\ufffd|\ufffd餛\ufffdMp\ufffd\ufffd\ufffd~\ufffd\ufffd\ufffdx\ufffd\ufffd\ufffd}\ufffdl-\ufffd\ufffd\ufffd\ufffdO3H\ufffd\u0007x\ufffdW\ufffd\ufffdg!x\u0004\ufffdM/\ufffdZ\u000e܌\ufffd\ufffd\u0000\ufffdN\ufffd[\ufffd\u000f\ufffd\ufffd\ufffdؚ8\u0010\ufffdN\u001f\u0001s\u0013\ufffd/\ufffd\ufffd\ufffd\ufffd\u001af}h|\ufffd\u0014n\ufffd4\u0026\ufffd\u000f\ufffd\ufffd\ufffd\u001fB\ufffd\ufffd\u0018\tIZ\ufffd\ufffd黴\ufffd\by7\u001d]\ufffd4\ufffd\u000f\\\ufffd\ufffd\u0017\ufffd\ufffd\ufffdk\ufffd\ufffd\ufffdR\u0003G]\ufffdq\ufffd]N\u001f~\u0015\ufffdU\ufffd\ufffd\ufffd\ufffd$\ufffd\ufffd\ufffd\ufffdw\ufffd\ufffd\u0012\ufffd}U\ufffd\fET \r\\\ufffd\ufffd5 _\ufffd\ufffd\ufffd\ufffd\ufffdE\ufffd\u0014N*\ufffd(\ufffd\ufffd\ufffd\u0005\ufffd\ufffd?\u001f\u0002A:\ufffd\ufffdt\ufffdo͝\ufffd\u00144w\ufffd\ufffd\b\ufffd\ufffd\ufffd\ufffd\u0001\ufffd}\ufffd\ufffd\ufffd2\ufffd̓\u0006\ufffdR\ufffdI0\ufffd\ufffd\ufffd\u0003\u0004\u0006z^(\fzR0\ufffd\ufffd\ufffd\\\ufffd\ufffd\ufffd\u0006\ufffdu,\ufffd\u001eϰ\ufffdi\ufffd#\ufffd\\\ufffd\ufffd้\ufffd\u003e\ufffds\ufffd๋ͯ\ufffd\ufffdx\ufffda\ufffd\ufffd\ufffd\ufffd\u001df\ufffd\u0006\ufffdz]\ufffd\ufffd:\ufffdO\ufffd\ufffd\u0007\ufffd_nk㪮\ufffd\ufffd\ufffd\ufffd\ufffd\u0006\ufffd\ufffd\u0019#]3N\ufffdh\u0013{m\u001d\ufffddj\u000b\ufffd\u003e\ufffd\ufffd\ufffdY\ufffdT\ufffd\ufffd\ufffd,K\ufffd]\ufffd\u00149\ufffd\ufffdѦ\ufffd\u0019\ufffd\ufffd\ufffd\u00008(бVH\u0003\u0002\u0014\u0001\ufffd\ufffd\ufffd\ufffd\ufffdi\ufffdY\ufffd\ufffd\ufffd\u0004\ufffdD\ufffd4C\ufffd\ufffd\u0007\ufffd\ufffdz\ufffd\u0013\u0013\ufffdl\ufffd\ufffd\ufffd)wc\u003e\ufffd5\ufffd\ufffdSp\ufffdf\ufffd\ufffdߛ\ufffd\ufffdx\ufffd\ufffd q\ufffdv\ufffd\ufffdT\ufffdc\u001fg\ufffd\ufffd^#\u0001o\ufffd{{\u0019\ufffd\ufffd\ufffd^\n\ufffd\ufffd\ufffd#R\ufffdm\ufffd\ufffd=\ufffdr\ufffd/T\ufffd\u0002\ufffdt\ufffdR\ufffda\u001e\u001dC\ufffd8!M\ufffdD\ufffdt\ufffdr)\ufffd}\ufffd\ufffdJ‹@\ufffd\u001c~\ufffd\ufffdG\ufffd\ufffd\"\ufffd\ufffdW9\ufffd㢒\ufffdf\ufffdQ\ufffd\ufffd\u000fGʗP\ufffdv*\ufffdJS\ufffd$s\ufffd'b\ufffdV\ufffd\ufffdNaN\ufffdy\ufffd+v\ufffdM\ufffd\ufffd\u000f\ufffdO\ufffd\ufffd\u0011\ufffdR\ufffd\ufffd\ufffd1\u000e7\ufffd\u0001崟+\ufffd\u0007\u0015C\ufffd֐ӾR\ufffd,\t \ufffdB\ufffdg\ufffd\ufffd\ufffd\ufffd\ufffd91M\ufffdWe\ufffdx9ȉ\ufffdG\ufffd\ufffd\ufffd\ufffd\ufffd\\4\ufffd\ufffd\u0003h\u001c\ufffdy/7p\u0013\n\ufffd\t\ufffd/\ufffd\u0018.N\u0001\ufffd\ufffd{\ufffd8\ufffd%\ufffd7C\ufffdo\ufffd\ufffd \ufffd\ufffd\u0017\ufffd7\ufffdg\ufffdg\ufffd9t\ufffd\ufffdCpF\ufffd\ufffdF\ufffd\ufffd\ufffdDp\ufffd\ufffd\ufffd\u001a\ufffd\ufffd\ufffdt\ufffd\ufffd\ufffdL:\u0017[\u0004\ufffd\u0015\ufffd-U\"\ufffd\ufffd\ufffd!(\u001e\ufffd\ufffd\ufffd\ufffdT/N\ufffd\ufffd\ufffd\ufffd\ufffd\ufffdT\ufffd1Z\ufffd\ufffd\ufffd.=\ufffd\ufffd\ufffdY\ufffd\u0005\ufffd~\ufffd \r\ufffd(\u00074\ufffd\ufffd\ufffd\u001b\ufffd\ufffd@l(\ufffd\ufffd]\ufffdp\ufffd;z\ufffd\ufffdٹ\ufffdH\ufffdV\ufffd\ufffd\ufffdC\ufffd\ufffd\ufffd%\ufffdy\ufffdi\ufffd\ufffd\ufffd\\V2\ufffd\ufffd\ufffd\ufffdD\ufffd\ufffd\u000f.\ufffdu\ufffdj64\ufffd\u000f\ufffd\r\u0017\ufffdx\ufffd+܅\ufffdi\ufffd\u003c\ufffd\ufffd(\ufffd[»\u0016N\ufffd\ufffd\ufffd[\ufffdM8f\ufffdU\ufffd\ufffd\ufffd\u0004+ǩс]O\ufffd\ufffd\ufffd\u003el~\ufffdo\ufffd\ufffd~\ufffd\u000eb\b.\ufffdۄ\u0007\ufffd\ufffd\ufffdw\ufffd\ufffd\u0005\ufffd\ufffd/\ufffd\u0017\ufffdԦ\ufffd\ufffd\ufffd\ufffd\ufffdTO\ufffdp\ufffd\u0000\u0000\f[\u0019\u001f²\ufffd\ufffd\ufffd=`\ufffd\ufffdVב\ufffd\"\ufffd\ufffd\ufffd\ufffdOP\ufffd%\ufffd\ufffd^ed\ufffd\ufffd1y\u001f\ufffdW]\ufffdO\ufffd\ufffd\ufffdE\ufffd\u001d\u001aU\ufffd'\ufffd\ufffdQ\ufffd\n\ufffd\u0007\u0019\u0018\ufffd*\ufffd!\ufffd9D[\ufffd\u0014:\ufffds\u0005\ufffd\ufffd\u001c\u001d\ufffdR\ufffdB\ufffd\ufffd\ufffdE\ufffd\f\u0005\ufffd\u000fD\ufffd:\u0017\ufffd\ufffdt\ufffdR\ufffd[\ufffd2\u0017\u0010\u000e\ufffdM\ufffd\ufffd\ufffd\\d=\u000f\ufffd\ufffd\u001e\ufffd\u0005\u00027\ufffd\ufffds9\ufffd\ufffd\ufffd\u0019\ufffd\ufffd\ufffd\ufffd\ufffd\u001eW\ufffd\ufffdO)\u0012\u000e\ufffd\ufffd\ufffd)=s\ufffd/\u0012(\ufffd\ufffd~@\u00028.R\ufffdZ\u0017\ufffd\ufffd壪\ufffd R\ufffd\ufffdÑ\ufffd1\ufffdO\ufffdO\ufffd\ufffdE\ufffd\u00129\u000bez\u000fLT\ufffd\ufffd^S\ufffd\ufffd\ufffd\ufffd\ufffd~\ufffd\ufffd\ufffdn`\u001d\ufffd\ufffd;\ufffdh\ufffd\ufffd#\ufffd0\ufffd\ufffd\ufffdGJ\ufffd\u0012\u001a\\\ufffd\ufffd\ufffd\ufffd\ufffd\ufffdMF\ufffd\ufffd\u000e5\ufffd7 \ufffd\ufffd\ufffdw\ufffd.\ufffd\ufffd\u0018\ufffd\ufffd(W3\ufffd\ufffd]\ufffdx\b\ufffdš\ufffd\u000f\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd(O\ufffd\ufffd*\u0007\u0002d\ufffd\ufffd\u0011\ufffdK\ufffd\u0002A\ufffdt\ufffd\ufffd{\ufffd\ufffdUJ\ufffdh\ufffdϱ\ufffd\ufffdt\ufffd]sN+:k\ufffd\ufffd\ufffd\f\ufffdX;\ufffd1i\ufffdQ\ufffd\ufffd\ufffd\u000b\ufffd\u0007$2{D\ufffd\u0007\nU\u003e\ufffdo\u0015\ufffdg\ufffdn\\\n\ufffd\ufffd\ufffd\\օ#\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd܌g\ufffd\ufffdy;\ufffd\u000f\ufffd\ufffd\u0026G$C\ufffd\ufffd.\ufffdЗ\ufffdJ\ufffdhb\ufffdHiת\ufffd\ufffd\u001b5\u0007\ufffd\ufffd\ufffd\ufffdQ\ufffdZ?\ufffd`\ufffd\ufffdN\ufffdϹs'\u003c\ufffdJ\ufffdwۜ\ufffd$\u00160\ufffd\ufffd9\ufffd\ufffd=\ufffd\ufffd{\ufffdf\ufffd\u003e\ufffd\ufffdϯ\ufffdڙ\u001e\ufffd\ufffd\ufffdJS\u000f\ufffd\ufffd\r\\\ufffd\ufffdJ\ufffdQ\ufffd\ufffdԺ\ufffdu\ufffdq\u0019\ufffdzI\ufffdP\ufffd9\ufffdH4\ufffd`c\ufffdsX\ufffda\ufffd\ufffd\ufffd\u0007\ufffd\u0012\ufffd8\ufffd\u0006Dw\ufffd/\ufffd\ufffd\u0011y\ufffdD\u0003G\ufffd\ufffd\u0017\ufffd\ufffd\u0011\ufffd\ufffdS4\ufffd\ufffd\ufffd\ufffd\u003e\ufffdW\ufffdF[\ufffd.R\u001e#\r\u0013\ufffdF\ufffd\ufffd\ufffd\u0002\ufffd\ufffd\ufffd\ufffdy\u0019\ufffdYH\u000bg\ufffd\ufffd\ufffd\ufffd\ufffdQ]\u0010\ufffd\ufffdH?\ufffd\ufffd\ufffd\ufffdZD/t\ufffd\n\ufffd\ufffddy\ufffd\u0005\ufffda\ufffd1\u001f.\ufffd\ufffd\ufffd\ufffd]t\ufffd\ufffd\ufffd2\ufffd\ufffd(\ufffd\ufffd\ufffdI\u000f\ufffd`\ufffd:ߧ\ufffd\ufffd-\ufffdť\ufffd\ufffd\u001a\ufffd:NLs\ufffd\ufffdI\ufffd\ufffd\ufffdU\ufffd\u0012:\ufffd\ufffdz\ufffdb\u001a\ufffdH\ufffd\u0010]\ufffd\u0006\ufffd6\ufffd\ufffdFv\u000f\ufffd\ufffd]\ufffdZ\ufffd\ufffd\ufffdX\ufffdF\ufffd\ufffd{ڇ\ufffd\ufffd\ufffd\ufffd\ufffd\ufffdH4\ufffdP42v\ufffd\u001d\ufffd\ufffd\ufffd\ufffd\ufffd\u001e\ufffd\ufffd\ufffd\u000fX\ufffdW\ufffd;XL\ufffd\ufffd\u0005iL\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd^$N\ufffd=\ufffd\ufffdM\ufffdܯ\u00030\ufffd\ufffdK|\ufffd7\ufffd\ufffdkd\ufffdP\ufffd\ufffd\ufffd:9M\ufffdnN\ufffdl}\u001fm\ufffd\ufffd\ufffdlپ]\ufffd\ufffd\ufffdqv3\u000e\ufffd\u0005\ufffdSK\"b\u0017\ufffd\u0004f\ufffd\ufffd\u000e7x\ufffd\ufffd\ufffd곗\ufffd\u003e{^\ufffd\ufffd}g_*\u001f\ufffdR\ufffd\u0002h^cA*\ufffdT\ufffdi,ekӾ\ufffd\ufffd/\ufffd\f\u0013\ufffdhk\ufffd\u003c\ufffd\u0007\ufffdhrDL.\ufffd\ufffd\u0019\ufffdSf8Q:\ufffd\ufffdD\ufffdijJ\ufffdh)\ufffd5\u0012\ufffd\u0019\ufffd\ufffd\u0026\ufffd\ufffd\ufffdv8gQ\ufffd\ufffd\ufffdh\ufffdbz\u0016\ufffdM\ufffdIi\ufffd\ufffd2*\ufffd\ufffdv\ufffd9\ufffd\ufffd\ufffd(\ufffd\ufffd\ufffd?h\ufffdX\ufffdx?\u001b{\ufffd\ufffdkҙ\ufffd.W\ufffd7\ufffd\t\ufffd\ufffd\u0010\ufffd!\ufffd\ufffdzM\f\ufffd\ufffd\ri\u003c\ufffd\ufffd\u0010\ufffd\ufffd\ufffd\ufffd\ufffdG\"\u000b\ufffd1CG\u0000#]\ufffd\ufffd]\ufffd\u0026f6a\ufffd\ufffdD\u0011\ufffd\ufffd\ufffd8sDv\u003e\u001cWy\ufffd\ufffd|\ufffd\u0012\ufffd\ufffd9Լ\ufffdׂ\u003cG0\ufffd\ufffd\ufffdr\ufffd\ufffd}|\ufffd\ufffd\ufffd\ufffd˧p?\ufffd\ufffd\ufffd\ufffd\ufffd\u0017C\ufffd\ufffd_\ufffd\u0015\ufffd\ufffd(\ufffd\ufffdKt}w\ufffd6\ufffd\ufffdvbn\ufffd\u0011\u0013\ufffd݉\ufffd\u0011X\ufffd\u0018\ufffd^}\ufffd\ufffd\u003e\ufffd\ufffdG6\ufffd]\ufffd\ufffd\\\ufffdU'\u001a\ufffd\ufffd\ufffd/o)\ufffdC(s\u001f@\ufffd\ufffd3C\ufffdyO\ufffd_\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\u0007h\ufffd7{Au\ufffd\ufffd\ufffd_f\ufffd\ufffduW\ufffd8\ufffdy\u0015]\u0018\u001d\ufffd\ufffd\u001f\ufffdq\ufffd\ufffdE\ufffdt\ufffd\ufffd\ufffd)~\ufffd\ufffdL\ufffdb\ufffd\ufffd\ufffd\ufffd\ufffd*D䃿\ufffdYF\ufffd\ufffdR\ufffd\ufffdie\ufffd\ufffdJ\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd[\ufffdX\u0007\ufffdvU\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd+R\"\ufffd\ufffd\ufffd#\ufffdQ\ufffd\ufffd1\ufffdҫ\ufffdxt\u001b\ufffdg\ufffd*\ufffd%\ufffd\ufffd\ufffd\u000b\ufffd\ufffd\ufffdv\b.^\ufffd\ufffd:\ufffdc\ufffd\ufffd\u00159L?c\ufffdpӤ\ufffd\ufffdAs\ufffdi\ufffd\ufffd\ufffdS\ufffd\ufffd\ufffd\ufffdRy\ufffd\ufffd\u0017ڿ\ufffd\ufffd\ufffd0\ufffd\ufffdh\u001cn\ufffd\ufffd\ufffd\u0005J\ufffdQ(Қ\ufffdc\ufffd\ufffd\u0003\ufffd\ufffdD\ufffd\u0026\ufffdFs#\ufffd3\ufffd\ufffd\bU\u003e1\ufffd\ufffd?\ufffd¦\u001a\ufffd\ufffd\ufffd\ufffd\ufffd7\ufffd\ufffd\ufffd\ufffdR\ufffd\ufffd\ufffd\u001a\ufffd\ufffd\ufffd\ufffd\ufffd\ufffdw\ufffd`Z\ufffdPW\ufffdxH\ufffde\ufffd_|\ufffd\ufffd\ufffd=|ޣ3M\ufffds\f\ufffd޼\ufffd^\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd`K\ufffd=\u003e\ufffd\u001dYDN\ufffd3\ufffd\u001a\ufffdLd\u0013\ufffd\u0011p\ufffd{\ufffdݞ=\ufffd\u0018\ufffdl=\ufffdˆ[j\ufffd:\ufffd\ufffd\ufffdr@\ufffdh1\t\u0004S!\ufffd\ufffd\ufffd\ufffd3\ufffd\ufffdpܻk\ufffd\ufffd\ufffd%,\ufffd\u003eQ\ufffd\ufffdۆ\u0006\u0017\ufffd\ufffd\ufffd\t\ufffd\ufffd\u001an\ufffd?_D\"\ufffd\t\ufffd\ufffd\ufffdC_:\ufffd\ufffdz\ufffdQ\ufffd`5\ufffd蓱\ufffd\ufffd\ufffd\t-\ufffdbE\ufffd\ufffd8C\ufffd=\ufffd\ufffdC\ufffdCE\ufffdCw\ufffd\u003c~~ScRٔ\ufffd\ufffdŞj~\ufffdޅf\ufffd\ufffdi\ufffdm\ufffd\u003e\ufffd\ufffd^\ufffd\ufffd\ufffd\u001a=\ufffd\ufffd\ufffd\u003c\ufffdқ\ufffd\tσQ\ufffd\ufffdz\ufffd\ufffd\u001c\ufffdi\ufffd\u000b\ufffdqv3~o\ufffd\ufffdo\ufffd\ufffd\ufffd\ufffd\ufffd\ufffdG\u001aC*ջ5Y*/\ufffd\ufffdN\u001d\ufffd\ufffd\ufffd\ufffd\ufffd{\ufffd\ufffd\ufffd\ufffduN\ufffdq#\ufffd\ufffd\ufffd\ufffd\ufffd\ufffdr\ufffd\u0006\ufffd,\ufffdð\u00109\ufffd!\ufffd\ufffd%~\ufffd\u001a\ufffd\ufffdü\ufffd\ufffd\ufffd3\ufffd[=\ufffdNG\ufffd\ufffdڹ\ufffdg\u0016\u0011^i\ufffd\ufffd\ufffd\ufffd\ufffd\u0003\ufffdc\ufffd\ufffd\ufffdtu-\u0006\ufffd꼠G=\ufffd\ufffdo*\ufffd𣚌r\ufffd^\ufffdJiuO\ufffd\ufffd|Il_\ufffd,\ufffd\u0018\u0003\ufffd[\u0004m\ufffdDs\ufffdC4#\ufffd\ufffd\ufffde\ufffd{\ufffdr\ufffd%\ufffd^\ufffd\ufffdL`:'au\ufffdi\ufffd\ufffdor\ufffdh]\u0015\ufffd\u0007i\ufffdf)\ufffd\ufffd\ufffd˫\ufffd\ufffdR\ufffd\ufffdLn\u001c\ufffd\ufffḋ\u001a\ufffd\ufffd\u001d\ufffd\ufffd\ufffdA\ufffd\ufffd\ufffdQ\ufffd\b\ufffd\ufffd\ufffd\ufffd\u001fߡf`$`\ufffd\ufffd\u0011\ufffd%\ufffd\ufffd\ufffd\ufffd\ufffd\ufffdfw\ufffd\ufffd\ufffd3\ufffd\"8\\9\ufffdԌ\ufffdFMے\ufffd\\@\ufffdJs\ufffd]\ufffd\ufffdh\ufffdv\ufffd\ufffd\ufffdv-\ufffd\ufffd?\ufffd~/ $\ufffd\u001eߚ\ufffdY\ufffd\ufffd\u001d澺\u000f5I\ufffd\ufffd\ufffd\u0013\ufffd-\ufffd\ufffdjO\ufffdx\u0017{/{\ufffd\ufffdm\ufffd\ufffd\ufffd*/6\ufffd;\ufffd˖\ufffdo\ufffdd9\ufffd\ufffdZ\ufffd#\u0006F\ufffd%\ufffd\ufffd\ufffd\ufffd\ufffd\ufffdN\r\ufffdJ}\u003e,n\ufffd\ufffdC\ufffd_j\ufffd{\ufffd\ufffd}\ufffd\ufffd\ufffdx][GT\ufffd[\ufffdC\ufffd\ufffd1\u001d\ufffd\u003e\u0005\ufffd\u0001Gi\u0015ǃ\ufffd$\ufffd͒\ufffd\u0026@BW8]\ufffd\ufffd\"\ufffdeC=T)\ufffd\ufffd\ufffdOT\u000e\ufffdZ-Y\ufffdb\ufffd\ufffd\ufffd\ufffd\u0017\ufffduL\ufffd\u003ež\ufffd\u001b\u001eG:\ufffdB\u0005[m\ufffd\ufffd\ufffd\u0000/4\ufffd\ufffd\ufffd\ufffdliL\ufffd\ufffd\ufffd\ufffd\ufffdy\ufffd\ufffd\ufffd=\ufffdv| \ufffd\u0000\ufffdzU\ufffd=t\ufffdRv\u0007pG\ufffd\ufffd\ufffd\ufffd\u0015\ufffdj\ufffd#\ufffd].T\u001f\ufffd\u0004U\u001ee\u0000\ufffd\u000e\ufffd\ufffd\ufffd.3\u0013\u0007\ufffd \ufffdȵ\ufffd\u0003Tw\ufffdh\ufffd3D\ufffd\ufffd\ufffd\ufffdm\ufffd\ufffd\\\ufffd}\ufffd\ufffd\r\ufffd\ufffd@I}9\ufffd+\ufffd\u0015\ufffd\ufffd]\ufffds\\\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd7\ufffd\ufffd\u001ey\ufffdu\ufffd\ufffd\ufffd\ufffd:\ufffd\ufffd\ufffd9\ufffde`\ufffd\u0000\ufffd\ufffd0^Y\u0000xN\ufffd3\ufffd\ufffdOL\ufffd\ufffdqlxK{?\b\ufffd\ufffd\ufffd\ufffd\ufffdvN\ufffd:ӭ\ufffd\u001f\ufffd\ufffd\ufffdwz\u0001\ufffd_\ufffd\ufffd(w\ufffdB\ufffd\ufffd\ufffd \ufffd\ufffd\ufffd\ufffd+\ufffd\f\ufffd\ufffd\ufffd\ufffd^k.\ufffd\ufffd\r\u0002R\u0011R\ufffdA\ufffdC\ufffd\ufffd\ufffd\ufffdK\re\ufffd\u0012ψ\ufffd\u000fVKH뗹\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\u0004\ufffd`]]{^\ufffdNl \u0001\u0017\ufffd*\u0018\ufffdn`\ufffd\u0012=\ufffd\ufffd\ufffd?\ufffd›\ufffd\ufffd\ufffd\ufffd\ufffd\\\ufffd\ufffdo\ufffdg ש\ufffdOF\ufffd軃9M܁я\ufffd\ufffd\ufffd\u003e\ufffdx\ufffd\ufffdX\r\ufffd\ufffdg\ufffd\ufffd\ufffd\ufffdK\ufffd\ufffd\ufffdÑ\ufffd\ufffdoez\ufffdp\ufffd\ufffdм\ufffd\ufffd==\u000e\ufffdkU0Ҽ\ufffd\ufffd\ufffd\ufffd\ufffdf|^L؟\ufffdK\ufffd\u003e\ufffd\ufffd+\\\ufffd\ufffd\ufffd\ufffd2\ufffd3Y\ufffd|n|I\n\ufffd5\ufffd\u0018\ufffd\ufffd\ufffdI\ufffd\ufffd\ufffd҇i\ufffd\ufffdh_L\ufffd\ufffd\ufffdB2\u0026?z9_\u001f3\ufffd\f|\u0013C\ufffd\u0026{\ufffdg9\u0019\u000fh\ufffd\ufffd7\ufffd\ufffd}\u003e\ufffd)_\ufffd\ufffdg41\ufffd\ufffdj\ufffdׁh\ufffd\u001a\u001dqv\ufffd-\ufffdp\ufffd\ufffd.\u0002O\ufffdr\ufffd\ufffd\ufffd\ufffd\ufffd\ufffdM\ufffd\ufffd\r\ufffd\ufffd;\u003e\u003e\u0004u\u0013Uz\ufffd\ufffd\u00191\ufffd\ufffdo\ufffd\ufffd\u001c\ufffd\ufffd\ufffd+3׫\ufffd\ufffd\ufffd@\ufffd\ufffd\ufffd\\u\ufffdh\ufffd\ufffd\ufffd\ufffdLQ\ufffd\ufffd\ufffd\ufffd\u001bZ\ufffdՕ\ufffd\ufffdӽ\ufffd\ufffd\ufffd񮣳g\ufffd\u0007d\ufffd\u000e}]\ufffd?\ufffda\ufffd7\ufffd\u001d_\ufffdճ\ufffd\ufffdM\ufffd\ufffd\u0001M\ufffd\ufffd=-W\u003c\ufffd^\ufffd\ufffd\ufffd\ufffd\ufffd\u001f\ufffd\ufffd_\ufffdw\ufffd_\ufffd\u0001\u001e\ufffd\ufffd\u001eU\ufffd\b\ufffd'6}\ufffdgqA\ufffd9\ufffd\ufffd\u001c\u0013{\ufffd\u0018\ufffdQo\ufffd\ufffdt\u0003\ufffd\ufffd\ufffd\ufffdΗ\ufffdA\ufffd\ufffd\b\ufffd-\ufffdu߭\ufffdt\u001cڛ\ufffdnMM^\u0002\ufffd\ufffd\ufffd[\ufffdKէu\ufffd\ufffdj\ufffd\ufffd@\ufffd\ufffd\ufffd\ufffdI\ufffdʧ\ufffd\ufffd\u0017O\ufffd\ufffd\ufffd\u003c1y\u00138|\u001a\ufffd\ufffd\ufffd֧\ufffdz\ufffd\u0010y\\\ufffd\ufffdQ/\ufffd\ufffd\ufffd\ufffd\ufffd\u0017M-\u0010\\\ufffd\ufffdg\ufffd\t\ufffdT\ufffd\ufffd3\ufffd\ufffd@\ufffd\ufffd\u0010O`u\u001f4\u001e\ufffdy\ufffd\ufffd\ufffd\ufffd\ufffd{\u001e#\u0007@5d\ufffd\u0003+\ufffd\ufffd\\\u001bX\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\u0006\ufffd\u0014a2ްU\ufffd󁬾{\ufffd\ufffd\ufffd\ufffd\ufffd%_\ufffd\u000f\u000eU\ufffd\ufffd]\u0000\u0011\ufffd5V3\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd)n\ufffdǣ\ufffd\ufffd\ufffd\ufffd\u0014C=\ufffdxsq\ufffd\ufffdf\u001dn\ufffd$\ufffd\ufffd\u00129g\ufffdϬ\ufffd\u001c\u001cu\ufffd\ufffd\ufffd-\ufffdw\ufffd\"\ufffd\ufffd\ufffdh\u003e\u001c\ufffd\ufffd7\ufffd\ufffd\ufffd\ufffd\u0026:\ufffd\u0012꒞\ufffd=dp:\u0017\ufffdk\ufffdT\ufffd\nM-zW\u000fճ\u0007\ufffdt\ufffdL\ufffdU\ufffd\u0005G\ufffd]:}V俖\ufffdą3\ufffd\ufffd\ufffd2\ufffdO\u000f\ufffd{\ufffd\ufffd,\u001b\ufffd^\ufffd1\ufffd\ufffd\u001dS\ufffd֥\ufffd\ufffd]\ufffd\u001ai\ufffd\ufffd\ufffdJLYL#T\ufffdz\ufffd\ufffd\ufffd\ufffd\u0004\ufffd9\ufffd\ufffd:\ufffd\ufffd\ufffd\u0010\ufffdc\ufffd\ufffd4\ufffd\u001b\ufffd7\ufffd\u0026s\ufffd%\ufffd_\ufffd\ufffd\ufffd\ufffd\ufffdk\ufffd\ufffd\ufffd\ufffd}9!\r\bsaćZݏ\ufffd\\E9\ufffd\u0005\ufffd\ufffd\ufffd?\ufffd\ufffd\ufffd\ufffd\ufffdѱ\ufffd\f\ufffd^\ufffd\ufffdUFʃs\ufffd\u001aV\ufffd\ufffd\ufffd\ufffd\ufffdGy\ufffd7\ufffdC_\ufffd\ufffdL\ufffd\ufffd\u0007\ufffd\ufffdY\ufffd\ufffd\ufffdKH\ufffd\ufffd\ufffd\ufffd\\\ufffdǴG\ufffd\ufffd\ufffd\u003c\ufffd2\ufffd\ufffd\ufffd\f=\ufffd3\ufffd\ufffd\u0002\ufffd\ufffd\u0018\ufffdof\u001bA\ufffd4\ufffd\ufffd\ufffd\ufffd\u001da\ufffd\ufffd\ufffd\ufffdn\u001aٝ\ufffdW\ufffd\u00064\ufffdK\ufffd\ufffd\ufffd+zfy\ufffd\ufffdx#ٛ\ufffd\ufffd\ufffd\u0019\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd;\ufffd\ufffdAXN\ufffdo\u001f\ufffd\ufffdˡG\ufffd\ufffd\u000e\ufffdN\ufffd\ufffd!\ufffd\ufffd?\ufffd\u0003\u0018\ufffd\u0005d\ufffd\ufffdT\u0005x\ufffd\ufffd;\ufffd\ufffdzpQx\ufffd\r\ufffd[K\ufffd'\ufffd\u001fzj\ufffd^\ufffd\r6h\u001c澹\ufffd\ufffd\ufffdY\ufffd5\ufffdݘsu\ufffd\ufffd\ufffd\u003c\u0007\ufffdl\u0010=rw!\ufffd$=\u0007\ufffd\u000e\ufffd\ufffdosEq\ufffd\ufffd\u0005\ufffdc\ufffd\ufffd\ufffd` w\ufffd+\ufffd\ufffd{\ufffd\ufffd\ufffd[\ufffd*Y\u0015;\ufffd\ufffd\u0007\u0017M\ufffd\ufffd\u003e\ufffd\ufffdQyw^\ufffd\ufffd4mz\ufffd\u000fɶ\ufffd3\ufffdԅe\ufffdɷ\ufffd\u003e\u001d\ufffd\ufffd8\ufffd\ufffd\ufffd\ufffd!\ufffd\ufffdQ.\ufffd|\u003c!\ufffd\u0007q\ufffd\ufffd8\ufffd\ufffde(\ufffdGu\ufffd\ufffd\ufffd\ufffd\ufffd\u001e\u0003\ufffdC\ufffd\ufffdy\ufffd\ufffd\ufffdG~\ufffd\ufffd\u001aB\ufffdg@g\u001c놎\ufffdm\ufffd\ufffd\ufffd\ufffd3\ufffd\u0012͌\ufffdǬ\ufffd\ufffdۿ\"5\u001e\ufffd~r\ufffd-/\ufffd\u0002\ufffd#:\ufffd\ufffd\ufffd\u0013j\ufffd0\u003c\ufffd\u0001\u0019'\ufffd9\ufffd\ufffd\ufffd\ufffd\ufffd\t\ufffdB\ufffdb\ufffd\ufffd\u003e9\ufffd\ufffd*;.\ufffdF\u000e\u0007\ufffd\ufffd\ufffd\ufffd\u001f=\ufffd\u0014v\u003cpv\ufffdj\ufffdF!\ufffd=\u0003\ufffd¡\ufffd+|\u0011f\ufffd\ufffd/i\ufffd\ufffdh\u0013m\ufffd\u003c\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffdc\ufffdc\ufffd6Sb\ufffdֱ\ufffd\u001eM\ufffd{\t~\ufffd\ufffdz\ufffd\ufffdK\u0001\ufffd\ufffd3\ufffd\ufffd!.\u0014\ufffd-\ufffda\ufffd[\ufffd\u0006\ufffd_X\ufffd\ufffdT\ufffd\ufffd\ufffd\ufffd5\ufffd\u0001,\ufffdȧ\ufffdMn\u0002\ufffde\ufffdj\u0015\ufffd?\ufffd?(D\ufffd\ufffd\ufffd\ufffd\ufffd|D\u000f\ufffd\u0014\ufffd\u001f\ufffd\ufffd\ufffd\ufffd\ufffdQ\\Y\ufffd\ufffd\u000bv\u003c\ufffdY܅\ufffd\ufffd@l\u0012\u0004\u0012\ufffd\ufffd\ufffd\ufffd\u000b\ufffd\ufffdN\u003el\ufffd\ufffd\ufffd\ufffd\u0012\u0002\ufffd\ufffd\ufffd\ufffd\ufffdY\ufffd\ufffdY\ufffd3\u0019#\ufffdEI\ufffd*U\ufffd\ufffd\u0016\ufffd\ufffdfY\ufffd\ufffdY\ufffd\u000e\ufffdǙc\b\ufffd;ij\ufffd'\ufffd\ufffd\ufffdd1\ufffd\ufffd6Qj\ufffd\ufffd\u0006\ufffd\\{\r!\u0006瘎\u00262Vc\ufffd%\ufffd\ufffd%\ufffd*\ufffd\ufffd`\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\u001c\ufffd\ufffd\ufffd\ufffdwx\ufffdX\u001c\ufffd\ufffd\ufffdUT\ufffdq\ufffd\ufffd\ufffd\u0026\ufffd{\ufffd\ufffd*\ufffdo\ufffd\ufffd|W\ufffd\ufffd\ufffd\ufffd\u0026\ufffd\u0013\ufffdJw\ufffd\ufffd\ufffdY\ufffd\ufffd0\ufffd\u0014\ufffd\u0010\ufffdkk\ufffd\ufffd.\u0013\ufffd\ufffd]\ufffd#\ufffd\ufffd\ufffd\u0004\ufffd\ufffdM̿\ufffd\ufffdT\u000b\ufffd\ufffd\u0003?\ufffd\ufffd\ufffdZ\ufffd\u0016\ufffd\ufffd\ufffd\ufffd\ufffd,\ufffd*\ufffdw\ufffd\ufffdւ\ufffd\u0005\ufffdx\ufffdR\ufffdJ,\ufffd\u0019r\ufffd,\ufffd/wfO\ufffd\ufffd\ufffdw\ufffdm8n\ufffd5\ufffdNϳ\ufffdIy\u003e\ufffd\u001c\ufffd\ufffd\ufffdRt\ufffd\u0001\ufffd\u003c;\ufffd\ufffd\ufffd\ufffd^\ufffd}\u003e-\u0003z\ufffd\ufffd\ufffd\u0011\u0026\ufffd\ufffd1\ufffd\ufffd7\ufffdM\ufffd\u00032!!\t\ufffdO3w\u0019җ\ufffdy\ufffd\u0003\u003e\ufffd\ufffd\u0002\ufffd\u001fPZgw\ufffd!\ufffd\ufffd\u0011b\u0011\ufffd\ufffdBi?\ufffd\u001c\ufffd\ufffdS\u001f\u001bz!޿,fӮ\ufffd\u0012l\ufffdmVa;\ufffd\ufffd\ufffdW\ne\ufffd^v}\u0017_\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\u0001\ufffd\ufffd?\ufffd\ufffd\ufffd\u0007\ufffd\ufffd\ufffd+\u001f\ufffd}\u0017\ufffdU\ufffd!\ufffdr\ufffdkgZ\ufffd\ufffdn낾]\ufffd\ufffd1\ufffd\ufffd3|a\u003c\ufffd|s\u001e\ufffd\ufffd\u0002\u0013\ufffdwo\ufffd[\ufffd\ufffd\ufffd,F\ufffd\ufffd\ufffd\ufffd\u0007\ufffd\ufffd\ufffd\b\ufffd]\ufffd\ufffd\ufffd\ufffd[{?\ufffd^h\ufffdW\ufffdy\n6\ufffd|\ufffd\ufffdX\ufffd\u001d۫\ufffd\ufffd \ufffdQ]\ufffd\ufffdY\ufffd\ufffd\ufffd]\ufffdO\ufffd\ufffd\ufffd`\ufffd\u0016\ufffd\bܺ\ufffdWQ\ufffd\ufffd\ufffd\u0016\ufffd;\ufffd6\u0006\ufffd\ufffd/p\u001e\ufffd\ufffdu\ufffd|#3d\ufffd\ufffd\u0007\ufffdO\ufffd\ufffd)H\ufffd\u001e\ufffd\u0013z\ufffd+Z\u0002\ufffdI\ufffd\ufffdL\ufffd\ufffd\ufffd\ufffd\b\ufffdG\ufffd_\ufffd\u003e\ufffd\ufffd\ufffdH=yP8\ufffd\ufffdŶ\ufffd\ufffd\ufffd\ufffd\ufffdX㲉\ufffd.?\ufffd+m\ufffdc\ufffdXӃ|\u0011\ufffdF.\ufffdW\ufffd\ufffd\u001c\ufffd@\ufffdߠ\ufffd\ufffd\ufffd\u0014b2\ufffdSa\u0019\u001f\ufffdد\ufffd\ufffd\ufffd\ufffd\u001e\u0002ާ\ufffd\"\ufffd\ufffd\ufffdd\ufffd\ufffd\ufffd\u0017p\ufffd\ufffd\ufffd]\ufffde\ufffd\ufffdHo\ufffd\ufffd\ufffd,\ufffd\u0003Q\ufffd\ufffd\ufffd\ufffdr\ufffdx\ufffd\ufffd\ufffdPn\u003cg\u0010\u0013ѷ\u0005Kwg\ufffdX[\ufffdvY\u0019uaMw\ufffd\ufffd\u0019\ufffd\ufffd-ݩ\ufffd/'i\ufffdj\ufffd\ufffdgι\ufffd\ufffd\ufffdSc\ufffd\ufffd\ufffd\ufffd\ufffdxRB\fvE\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd3B_\ufffd\ufffd~5\ufffd\ufffd\ufffd\u003c\ufffd{\ufffd\ufffd\u001c;?\ufffd\u001b\u000e\ufffd\ufffd\ufffd\ufffd\u0018\ufffdw\ufffd\ufffd\"\ufffd\ufffd3\ufffd\ufffd?b\ufffd\ufffd\ufffd\ufffd\ufffd礔\ufffdXJ\u001d_\ufffd\ufffd\u001aN\ufffd\ufffd\ufffd\ufffd\ufffd+gɱ\ufffdē\ufffdp\u001a\ufffd\u0015\ufffd\u001bw \ufffd5ӕ\u003e5\ufffd\ufffdj\ufffdB5\ufffdA\ufffd\t\ufffd\ufffdׯ\ufffdD\u0001?\u0007\ufffd\ufffd\ufffdbCe\u001c\ufffd\ufffd\ufffd:\ufffd\ufffd\ufffd\ufffd\u0016q\ufffd*o\ufffd\ufffd1\u0019\ufffd\ufffd\u0010\ufffd\u0000L\ufffd,\ufffd|\ufffd\ufffd\ufffd\ufffdl\ufffdki\ufffd\u001e \ufffd\u0019\ufffd\ufffd\ufffdW\ufffd\ufffd'\ufffdke\ufffd\ufffd\ufffd\ufffd\ufffd\ufffdL\ufffdř\u0014}\u001f\ufffd\nܓ\ufffd_\ufffd\ufffd\ufffd\ufffd\ufffdVv\ufffd%\u0016\r\ufffd\ufffd\ufffd,[ݹ#\ufffd\ufffd\ufffd\ufffd(\ufffd\ufffdy\ufffd\ufffd\u0010\ufffdd\u0018\ufffdy\u0007\u0019n\ufffdɴ|\u0015\ufffd\f͹\ufffd\ufffdQ\r76ĩ\ufffdm\ufffd\ufffdu\ufffd\ufffd8\ufffd\ufffd\u0007\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd@9f;\ufffd͟\ufffdK\ufffd\u0018\u001b\ufffdRs'\ufffd5\ufffd\ufffd*cܿ/\ufffd\ufffd9\ufffd}n\ufffd\ufffd桾M\ufffd\ufffd\u0003ڝi\ufffdh\ufffd\ufffd\ufffd\\\ufffd\ufffdc\ufffd\ufffd,\ufffd\ufffd\ufffd\ufffd\ufffd\ufffdM\ufffdOON(\ufffd\ufffd\ufffd\\\ufffd\"\u000f@g\ufffd\ufffd\t\ufffd{\ufffdx\u001f\ufffdx\u0002q\ufffdJ\\\ufffd@\ufffdN\u001fpgbi\u001f\\?\u0012\ufffd\ufffd\ufffd\ufffdպ\ufffd~\u000f\u000b\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd?\ufffd;\u0012y(\ufffd\ufffd\ufffd\ufffd:\ufffd\u0004\u0006\ufffd\ufffd\ufffdy\ufffdc\ufffd;\ufffd\ufffd\ufffd\ufffd*\u003e\ufffd~\ufffd*C\ufffd\u000e\u003e+\ufffdoOY\ufffd\ufffd=\ufffd\ufffdە\ufffd\ufffd6;\ufffd\ufffd\ufffdX\ufffd|\ng\ufffd\ufffd{ld\ufffd\ufffd\ufffd\ufffdr\ufffd\ufffd\ufffd\ufffd]\ufffd\u001d\ufffd\ufffd\ufffdb\ufffdJ\ufffd\u001a_$\ufffd q\ufffdR\ufffdN\u0013\ufffd\ufffd}\u003eE\u0006?o/w\ufffd, \ufffd\ufffdz\ufffd*7\ufffd\ufffdq\ufffdz\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\u0012-e\ufffdg\u001fw\ufffd`~\ufffd\ufffd\ufffd\u0018\ufffd\ufffd}\f\ufffd\ufffd\ufffd\ufffd0o\ufffd\ufffd\ufffd\ufffd\ufffd=g`\u0017\ufffd\u0007\u0011\ufffdK׼\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\u0007\u0017\u0015f$t/\u0013\ufffd.\ufffdo'̓͆jh\u0001\ufffd\ufffdvc\ufffd\u0026\ufffdL\u0013y~O\ufffd|\ufffdԙTɸ\ufffdU\ufffd\ufffdi5*.W}\ufffd\u003e\u001f\ufffd}\ufffd\b\u001d\u000b$\ufffd$\ufffd\ufffd2\ufffd\u003ez\ufffd\ufffdߩn\ufffd{\ufffd}6\u0016\ufffd\ufffd\ufffdo`\u0019J\ufffd\ufffd\ufffd=\u0019\ufffd_\ufffdV\ufffd\ufffd7\ufffd\ufffdW\ufffd\ufffd\ufffd\u001b\ufffdK\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffdۇ\ufffd\ufffd\ufffd\ufffd\ufffdc\ufffde\u0007\ufffd\ufffdY\ufffdO\ufffd\u000f\ufffd\ufffd7~.sݤ\u0018A~\n\ufffd\ufffd\u0006/_\ufffdE\u003c2m\ufffd\u0018\ufffd\ufffd\u001a\ufffd\u003c\ufffd\u0010\ufffdk\ufffd,\ufffd\u0026\u003e\u0012\ufffd\ufffd\ufffd\u000b\ufffd\ufffd\ufffd\ufffd\u001an!S|o\ufffdTpG'\u00175O1\ufffd\ufffd\u001f\ufffd\ufffd\ufffdMl\ufffd\u001bb+\ufffdL}\u000e\ufffd\ufffd\ufffd\ufffd\"\"'\ufffd\ufffdSeN\ng\ufffd\ufffd\ufffd{\ufffd\u0002\ufffd\ufffd[[\ufffd\ufffd\ufffd\ufffd\ufffdb\u001f\u0001\ufffd\ufffd\ufffds2\ufffd\ufffd\ufffd\tIE\ufffdE\ufffdj\ufffdc\u0026sQ\ufffdܼ\ufffd\ufffd\ufffd\ufffdA\ufffd?4˼B\ufffd\"\t\u0004\ufffd\ufffdi`\ufffd8\ufffd3e\ufffdPf\ufffd\ufffd\ufffd=C\ufffdz\ufffd\ufffd,o\ufffdp\u000f\ufffd\ufffd5p3\ufffd\u0017\ufffd\u0016\ufffd\ufffd|\ufffd.A\ufffd\ufffd\ufffd\ufffd\ufffd\ufffdů\ufffd\ufffd\ufffdޫ\ufffd\u001d\ufffd\u0017a\ufffd\ufffd{\r\t\ufffd\ufffdGc^\u000b\fֆ\ufffd|\ufffd\ufffd3\ufffd\ufffdyy\u0007\ufffd\u000b\u001fyAS\ufffd[q\ufffd\ufffd\ufffd\u0004\ufffd\ufffd\ufffd\u001f\ufffd0\u0011\ufffd\ufffdn\ufffd\ufffd\ufffd\ufffd._\ufffd\u00038X\ufffdxl\ufffd`rn\ufffd\ufffdn\ufffd*ƕ\ufffd\ufffdq\ufffd\ufffd\ufffds\tr\ufffd\u0000\ufffd\ufffdœ\ufffd\ufffd\ufffd\ufffd}\u0007xWL3\ufffdJ/\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\u0001\ufffd\ufffdH۵߷\u001fC\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\u0015/\ufffd\ufffdp4\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\u0004\u0016\ufffdh\ufffd\ufffd\ufffd蝺\ufffdw8A\ufffd\ufffd\u0018\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\u0013\u001e\u0016\ufffdm\u0002Na\ufffdS\ufffdM\ufffdJ\ufffde\r\ufffdݥ\u001fk=\ufffd\\\"\ufffdw2\ufffd\ufffd\ufffdS\ufffd\ufffd}\ufffd-jC[\ufffd\ufffdCnԀ\ufffdP\ufffd\ufffd\u0015#\ufffd\u001b\ufffd\ufffd[7\ufffd\ufffdk\ufffdŵ;\ufffdC\ufffdٲe|\ufffdV\ufffdo=\ufffdŸ\u0005\ufffd|\ufffd\ufffdy_\ufffdػ\ufffd\ufffd\ufffdcCT\ufffd\ufffd\ufffdu\ufffdnց$\ufffd\ufffdyiu\ufffd\ufffd\ufffd\ufffdޭ\u0017\ufffd\ufffd}\n\ufffd\ufffd[\ufffd\ufffdխ\ufffdm\ufffdʾz۟\ufffdح\ufffd\u000e=}g͸\ufffd\u001e\ufffdܨ\ufffdo\ufffd5\ufffdL\u0010%I\ufffd\ufffdE\r?\ufffdĤ\ufffd6\ufffd,\ufffd|\ufffd\ufffd\u0003\ufffd\ufffdKe\ufffd.^㊽\u0017|~\ufffd1\ufffd4\ufffd\ufffdQ\ufffd\ufffd\ufffd\u003cl\ufffd\ufffd?q\u0015\ufffd-\ufffd\ufffd|t\ufffdv\ufffd\ufffd2\u003e\ufffd\ufffd\rp\ufffd\ufffd;ڎb\ufffd\u0013Lt;\ufffd\ufffdsH\u0003\u0003b/b\ufffd\u0006\ufffd\ufffd\t\ufffd\u001f\ufffd/X\ufffd\u001f*\u001e\ufffd\ufffd \ufffd\ufffdȓE\ufffdu\ufffd\ufffd\ufffd\ufffd\ufffd\ufffdS\ufffd}\ufffd؇\u0013\ufffd3\ufffd\ufffd+\ufffd\r{n\ufffd\ufffd\ufffdR\ufffdU\ufffd\ufffd߱\ufffdk\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffdx\ufffd\ufffd:Buj\ufffdkk\ufffdB\ufffdO\ufffd\ufffdiL}\u0012\u0010=\ufffd6\ufffd\f\ufffdlAm\u001a*s\ufffd\ufffdr\ufffd\ufffd6\ufffd\ufffd\ufffdt\ufffd-=s\ufffd\u0026\ufffd\ufffd\"ҊyH\u0026\ufffd\ufffd\ufffd\ufffdk\u003c\ufffd\ufffd\ufffdq\ufffd\ufffd-\ufffd\u0018~qL\ufffdğd\ufffd\ufffdƋnL\ufffd9\ufffdl\u0006\ufffdl\u0004y^T\ufffd\u001e\ufffd\ufffdBp#\u0012\ufffd\ufffd\ufffdkSƬr\ufffd\ufffd\ufffd\ufffd̪W\u0007\ufffd\ufffd\ufffdJP\ufffdN\ufffd٣\ufffdŠtJ\u0006\ufffdVeco\ufffdL\u003c.o\u003e\ufffd\ufffdX\ufffd\ufffd\ufffd6\f\ufffdTw\ufffdN\u0016\ufffdũw_\u000b\ufffd\b\ufffd\u00029T=\ufffdi*\ufffd\u0019\u0014\ufffd\ufffd\ufffd\u003eA\ufffd\ufffdk\ufffd\ufffdV\u0003\ufffd\u0002p8`\ufffd`\ufffd\ufffda\ufffde\ufffd\ufffdI\ufffd\ufffd\ufffd#\ufffd \b\ufffdy\ufffd`\u003c\ufffd\r\ufffdN\u0005\ufffd7\ufffd\ufffdQ`\ufffd\ufffd\ufffd\ufffd]\ufffd\ufffdo\ufffd\ufffdj^\ufffdP\u0007\u00108\ufffd\ufffd\u000e\ufffdFv8\ufffd\ufffd(M\u003c\ufffd\ufffd\\\ufffd\r7\ufffdS\u0017B\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd}\ufffd\ufffdx\u003c\ufffd\ufffd\u0017\ufffdY\ufffd岀=\ufffdg\u0015;\u00171}\rۻ\ufffd\ufffd5\u0006\ufffd\ufffd\ufffd\ufffd\u003cf;\ufffdŶ͇\ufffd\ufffd\\\ufffdz\ufffd\ufffd\ufffdyK\ufffd\ufffd\ufffd\ufffd\"\ufffd~\u003e\ufffd6\ufffd\u000b롾\ufffd[\ufffds\u0005\ufffdɐw^X\u000f\u000f\ufffd\ufffd\ufffdi\ufffd_\fu\ufffdS\ufffd#\f\ufffdԮ\ufffd\u001cb2\u000f\ufffd\ufffdOw޹\ufffdyN\u001f\ufffd{\ufffd\ufffd\ufffdv΋+\ufffd\ufffdscXN\ufffd\ufffd\ufffd\ufffd\ufffd \ufffd\ufffdw\ufffd\u001f}U\ufffd\ufffd\ufffd\ufffd\t\ufffdto\ufffd\ufffd\ufffd\ufffd\ufffd|?\ufffd|\ufffd\ufffd\u000b\ufffdT\u0007\ufffd˼w\ufffd,\ufffd\ufffd\u001f\ufffd\ufffd\u0011\u0012[\ufffd\ufffd\ufffd%\ufffdq\ufffd\ufffd\u0017\ufffd\ufffdx\ufffd\u0026\ufffd`\ufffd\u0001n\u000e0\u0000\u003c3н5)\ufffd\ufffdqX\ufffd$0\ufffd\u001a_\ufffd\u003ex\ufffd\ufffd\t|\u001c\ufffd0\ufffd\ufffdցv\ufffdT\ufffdR\ufffd7G\ufffdxn\ufffdq\ufffd\u0003ʗ(\b{\ufffd?\u0018t\ufffdH\ufffd\u003c\u0007DG\ufffd^R\ufffd뀚^\ufffd5\ufffdZ\ufffdd\ufffd%\"\ufffdK\ufffd\f(\ufffd\u0012\ufffdJ\ufffd\ufffdh\u001f\ufffd=\ufffd\ufffd\\\tm\u001f\ufffdRrM\ufffd0\ufffdF{\ufffdȱ\ufffdR\ufffd\ufffdy\ufffdʟ\ufffd\ufffd\ufffd5f\ufffd2.f\ufffd\ufffd03\ufffd\ufffd%\ufffd\ufffd\ufffd\ufffd05\u0002R\ufffd\ufffd@cA@β\u001d\ufffd \u003e\ufffd\ufffd\u000b4\ufffd\u003e\u0017\ufffdhgJt\ufffd\b3\ufffd\ufffd\ufffd\u003c\ufffd_P\ufffd\ufffdP\ufffd\ufffd2\u0003\ufffd\ufffddB\ufffd\ufffdq\u0016!\u001a\ufffd\ufffd'\ufffdO`^\ufffdn\ufffd\ufffdF\f¦\ufffdz\ufffdow\ufffd%Ч\ufffd\ufffd\ufffd\ufffd\b\ufffd\ufffd\ufffd\ufffdU\ufffdm\ufffd\ufffd\u0019\ufffd\ufffd\ufffdiIC\ufffd\ufffd\ufffdh?\ufffd\u001b\ufffd\ufffd@3\ufffdq\ufffd\u001e\ufffd2\ufffd\ufffdF\u001f\ufffd\ufffd8\"6\ufffd\u0001\ufffd֠\u000e\ufffd\ufffd\ufffd;\u001d\ufffd\ufffdb3(Q\ufffd\ufffdю]\ufffd\ufffd\ufffd9i\ufffdY\ufffd,ّ\ufffd\ufffd!p\ufffd _\ufffd\ufffdqt\ufffdw\ufffd\ufffd\ufffd\ufffd\ufffdg\u0017ۆ\u001f\u0010\ufffd\f\ufffd\ufffd\ufffd\tk\ufffd`Z\ufffd15d]\ufffdq\ufffd\ufffdN\ufffdKD\ufffd\u0017\ufffd\ufffd\ufffd*\u000b\ufffd\ufffd4\t(S\ufffd\ufffd#)\rJ\ufffd;\ufffdϕ\ufffdT\ufffd\ufffdN\u0003\ufffd^\ufffdє\ufffd\ufffdF\b\ufffd!\ufffdK\ufffd\ufffd\ufffd)\ufffd\u0007\ufffd\ufffdNH7\u0007\ufffd\ufffdo\ufffd\ufffd\t/G\ufffd9\ufffd\ufffd\u001b\\`y\ufffd:\ufffd\ufffd\u0001\ufffdkrР.\ufffd\ufffd5\u0026\ufffd8\ufffd\ufffdKTꨑ\u0011\ufffd\u0026\ufffd\ufffdyy\ufffdht\u001d\u0010l󱒋v\u0000,\ufffd\u0019pf\ufffd\ufffd\ufffd\ufffd~IC\ufffdXGo\ufffdb6=y\ufffdcH\ufffd\ufffd`\ufffd\b_\ufffd\ufffd.\u000fy\u0001.\ufffdI\u0011\r1]\u001c,\ufffd\ufffdqx\ufffd\ufffd\ufffd\ufffdd3Ii\ufffd\ufffdw\ufffd6ZDȈC\ufffd֡\ufffd\ufffd\ufffdlE]\ufffd\ufffd\u000b\ufffd֣%\ufffd\ra\ufffd\u001bnHS\ufffdh\u0018\ufffdf\ufffd۲|m\ufffd\u0026\ufffd\ufffdsDl:\ufffd=G\ufffdsٖo8k\ufffd\u000bL\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\u0026\nj\ufffd?x/\ufffd\ufffd\ufffdH7I\ufffdyi\ufffdA\ufffd\ufffd\ufffdG\ufffd\ufffd\u0001c\ufffd\u000f\ufffdt|\t\t\ufffd%\u001ar02PT\ufffd \ufffd\ufffd\u0015\ufffdܼ2\ufffd\ufffd\ufffd\ufffd\ufffd \ufffd\ufffdm,eTʿ\ufffdG\ufffdI\ufffd{\u0026\ufffd\ufffd\ufffd\ufffd+\ufffd\ufffdC#\ufffd\ufffdAW\ufffd\ufffd\u001d)\ufffd\ufffd\ufffdQ\ufffd\f\ufffd\u0012\ufffdQd`J(\ufffdԈBz\u0014\ufffd\ufffd\ufffd6\ufffd\ufffdf\ufffdP\ufffd(\ufffd\ufffd\ufffd\ufffd\u001e\ufffdؚ0\ufffd˕MlÓ2E4\u0016\u0012\ufffd=2_B\ufffdӷ;\u0018䷹L܎\ufffd\ufffd\ufffd\ufffd\u003e\ufffd\ufffd\ufffd~\ufffd?y\ufffd\ufffd?\ufffd\ufffd\ufffdf8\ufffd\ufffd\ufffdf\ufffd\ufffd\ufffd}\ufffdE\ufffd\ufffd\ufffd\ufffd[\ufffdp\u0010ϵͫ\u001f\u001f\ufffd\ufffd\ufffd\ufffdb\ufffd\ufffdܨ\ufffd\ufffd\ufffdnտ\ufffd\ufffd\ufffdy\ufffd\ufffdtn\ufffd\ufffdu\ufffdZ\ufffd\ufffdj7\ufffd\ufffd\u0007\ufffd\ufffd\ufffd\ufffdo\u001d\ufffd)򝆿9ڠN\ufffd-\ufffd\ufffd\ufffd\ufffd8\u0018\ufffd\ufffd\ufffd\u0015\ufffd\ufffd:\ufffd\ufffd\ufffdC\ufffd\u0010W\ufffd\ufffdp\ufffd\ufffd\ufffd~\ufffd\ufffd\r\ufffd]\ufffd\ufffd?\ufffd\ufffd\u001a\u0007s}g\ufffd\ufffd\ufffd\u0014y\u0016\ufffd\ufffd\ufffd\ufffd-\ufffdL\ufffd\ufffd\ufffd\ufffdQ\ufffd\ufffd\ufffdӇ\u0026\ufffd\ufffd\ufffd\u0019\ufffd\u001f\ufffdNcPܮi\ufffd|Մ\ufffd\u0013h\ufffd\u0017J\ufffdy\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\u0018\ufffdm~\ufffd\u0026\ufffd\ufffdm'\ufffd\ufffdu\ufffd\u001e4\ufffd\tO \ufffd\ufffd\ufffd\ufffd\ufffdzy\ufffd\ufffd\ufffd\ufffdc9:\u001f\ufffd\ufffdb\u0013\u0026\ufffd\u0001\ufffd\ufffdc_\ufffd\ufffd\ufffd\u003c\ufffd\ufffd\ufffd\ufffd\ufffd\ufffdHR\ufffd\nߖ\ufffd\ufffd鍃Ͳ\ufffd,ۙ\ufffde\ufffd\ufffd+\ufffd\ufffd\ufffdӻ|?\u001bcn\ufffdJ;\ufffd\ufffd\ufffd_Ml\u0000`)\ufffd?\ufffd2/Y\r\ufffdD\u0015`-\u0003\ufffd\ufffdy\u0002\ufffd\ufffdp\ufffdB\ufffd\ufffd\ufffd\u001d\ufffdv\u0026\ufffd\u000f\ufffdW\ufffd\ufffd\ufffdڋ\u0011\u0002\ufffd\ufffd|\ufffd\ufffdm\ufffdu\ufffdSz\ufffd\ufffdp襉\ufffd\ufffd\ufffdv\ufffdV`\ufffd\ufffd\ufffdll~@\ufffd?J\ufffd\ufffde\ufffd\n\u003e^\ufffd\u001b\ufffd\u0010\ufffd\ufffdL\ufffdS\ufffd\ufffd=\ufffd98\ufffdX\u0000Rwl\ufffd\ufffd\ufffdQ \ufffd\u0018\ufffd+\ufffd\u0017\ufffdN\ufffd\u003e\u0014\ufffd\ufffd\ufffd[\ufffdp\ufffd`\ufffd^C\ufffd\ufffd\ufffdh\ufffd\ufffd\u0013x\ufffd\ufffd\ufffd\ufffd\ufffdx\t=\u0011_\u0001q\u000b\u0002\ufffdU\ufffd\u001c\ufffd\u0007\ufffdY\ufffd$\u001f\u0001\ufffd\ufffd\ufffd$1\ufffdD\ufffd\u001e\ufffd]\ufffdA,\ufffd\ufffd\ufffdj\ufffd\ufffd|d\ufffdy%\ufffdV\ufffd3\ufffd)\ufffd\ufffd'\ufffdҷ+\ufffdq1u7o\ufffd\ufffd\ufffd\u0001\u0000\u0000\ufffd\ufffd\ufffdqps\ufffdG\u0001\u0000')))]" } } }, diff --git a/pkg/deploy/generator/generators.go b/pkg/deploy/generator/generators.go index bfcf7d13a05..bc3773f8945 100644 --- a/pkg/deploy/generator/generators.go +++ b/pkg/deploy/generator/generators.go @@ -7,6 +7,8 @@ import ( "encoding/json" "os" + "github.com/sirupsen/logrus" + "github.com/Azure/ARO-RP/pkg/util/arm" ) @@ -17,11 +19,13 @@ type Generator interface { type generator struct { production bool + log *logrus.Entry } func New(production bool) Generator { return &generator{ production: production, + log: logrus.WithField("component", "generate"), } } diff --git a/pkg/deploy/generator/resources_dev.go b/pkg/deploy/generator/resources_dev.go index d1982639218..2a32429c6ef 100644 --- a/pkg/deploy/generator/resources_dev.go +++ b/pkg/deploy/generator/resources_dev.go @@ -4,6 +4,8 @@ package generator // Licensed under the Apache License 2.0. import ( + "bytes" + "compress/gzip" "encoding/base64" "fmt" "strings" @@ -101,7 +103,19 @@ func (g *generator) devProxyVMSS() *arm.Resource { ) } + var buffer bytes.Buffer + gz := gzip.NewWriter(&buffer) + trailer := base64.StdEncoding.EncodeToString([]byte(scriptDevProxyVMSS)) + if _, err := gz.Write([]byte(trailer)); err != nil { + g.log.Errorf("failed to gzip script trailer: %s", err) + return &arm.Resource{} + } + + if err := gz.Close(); err != nil { + g.log.Errorf("failed to close gzip: %s", err) + return &arm.Resource{} + } parts = append(parts, "'\n'", fmt.Sprintf("base64ToString('%s')", trailer)) customScript := fmt.Sprintf("[base64(concat(%s))]", strings.Join(parts, ",")) diff --git a/pkg/deploy/generator/resources_gateway.go b/pkg/deploy/generator/resources_gateway.go index dd541a2426d..ba02b27641f 100644 --- a/pkg/deploy/generator/resources_gateway.go +++ b/pkg/deploy/generator/resources_gateway.go @@ -4,6 +4,8 @@ package generator // Licensed under the Apache License 2.0. import ( + "bytes" + "compress/gzip" "encoding/base64" "fmt" "strings" @@ -248,7 +250,20 @@ func (g *generator) gatewayVMSS() *arm.Resource { scriptUtilServices + scriptUtilSystem + scriptGatewayVMSS + + var buffer bytes.Buffer + gz := gzip.NewWriter(&buffer) + trailer := base64.StdEncoding.EncodeToString([]byte(bootstrapScript)) + if _, err := gz.Write([]byte(trailer)); err != nil { + g.log.Errorf("failed to gzip script trailer: %s", err) + return &arm.Resource{} + } + + if err := gz.Close(); err != nil { + g.log.Errorf("failed to close gzip: %s", err) + return &arm.Resource{} + } parts = append(parts, "'\n'", fmt.Sprintf("base64ToString('%s')", trailer)) customScript := fmt.Sprintf("[base64(concat(%s))]", strings.Join(parts, ",")) diff --git a/pkg/deploy/generator/resources_rp.go b/pkg/deploy/generator/resources_rp.go index beda18e8a5d..4437e7dd9f3 100644 --- a/pkg/deploy/generator/resources_rp.go +++ b/pkg/deploy/generator/resources_rp.go @@ -4,6 +4,8 @@ package generator // Licensed under the Apache License 2.0. import ( + "bytes" + "compress/gzip" "encoding/base64" "fmt" "strings" @@ -479,10 +481,26 @@ func (g *generator) rpVMSS() *arm.Resource { scriptUtilServices + scriptUtilSystem + scriptRpVMSS + + var buffer bytes.Buffer + gz := gzip.NewWriter(&buffer) + trailer := base64.StdEncoding.EncodeToString([]byte(bootstrapScript)) - parts = append(parts, "'\n'", fmt.Sprintf("base64ToString('%s')", trailer)) + if _, err := gz.Write([]byte(trailer)); err != nil { + g.log.Errorf("failed to gzip script trailer: %s", err) + return &arm.Resource{} + } + + if err := gz.Close(); err != nil { + g.log.Errorf("failed to close gzip: %s", err) + return &arm.Resource{} + } + + g.log.Info("Writting gzipped customScript buffer.") + parts = append(parts, "'\n'", fmt.Sprintf("base64ToString('%s')", buffer.Bytes())) customScript := fmt.Sprintf("[base64(concat(%s))]", strings.Join(parts, ",")) + g.log.Info("Returning arm resource.") return &arm.Resource{ Resource: &mgmtcompute.VirtualMachineScaleSet{ Sku: &mgmtcompute.Sku{ @@ -583,7 +601,7 @@ func (g *generator) rpVMSS() *arm.Resource { VirtualMachineScaleSetExtensionProperties: &mgmtcompute.VirtualMachineScaleSetExtensionProperties{ Publisher: pointerutils.ToPtr("Microsoft.Azure.Extensions"), Type: pointerutils.ToPtr("CustomScript"), - TypeHandlerVersion: pointerutils.ToPtr("2.0"), + TypeHandlerVersion: pointerutils.ToPtr("2.1"), AutoUpgradeMinorVersion: pointerutils.ToPtr(true), Settings: map[string]interface{}{}, ProtectedSettings: map[string]interface{}{ diff --git a/pkg/deploy/generator/scripts/gatewayVMSS.sh b/pkg/deploy/generator/scripts/gatewayVMSS.sh index 40bcbee2f6b..b9cfb3a9e08 100644 --- a/pkg/deploy/generator/scripts/gatewayVMSS.sh +++ b/pkg/deploy/generator/scripts/gatewayVMSS.sh @@ -147,8 +147,11 @@ RPIMAGE='$rpimage'" reboot_vm } +# export AZURE_CLOUD_NAME="${AZURECLOUDNAME:?"Failed to carry over variables"}" export AZURE_CLOUD_NAME="${AZURECLOUDNAME:?"Failed to carry over variables"}" +# util="util.sh" +# # util.sh does not exist when deployed to VMSS via VMSS extensions # Provides shellcheck definitions util="util.sh" diff --git a/pkg/deploy/generator/scripts/rpVMSS.sh b/pkg/deploy/generator/scripts/rpVMSS.sh index e493f65cf15..8ab533ee450 100644 --- a/pkg/deploy/generator/scripts/rpVMSS.sh +++ b/pkg/deploy/generator/scripts/rpVMSS.sh @@ -8,10 +8,12 @@ main() { # transaction attempt retry time in seconds # shellcheck disable=SC2034 local -ri retry_wait_time=30 - local -ri pkg_retry_count=60 create_required_dirs + configure_sshd + + local -ri pkg_retry_count=60 configure_rpm_repos retry_wait_time \ "$pkg_retry_count" @@ -53,10 +55,16 @@ main() { # shellcheck disable=SC2153 disable=SC2034 local -r mdmimage="${RPIMAGE%%/*}/${MDMIMAGE#*/}" local -r rpimage="$RPIMAGE" + + # shellcheck disable=SC2034 local -r miseimage="${RPIMAGE%%/*}/${MISEIMAGE#*/}" + + # shellcheck disable=SC2034 local -r otelimage="$OTELIMAGE" + # shellcheck disable=SC2034 local -r fluentbit_image="$FLUENTBITIMAGE" + # shellcheck disable=SC2034 local -rA aro_images=( ["mdm"]="mdmimage" @@ -143,8 +151,7 @@ main() { ) # shellcheck disable=SC2034 - # use default podman network with range 10.88.0.0/16 - # static IPs used for uniquely identifying services in monitors + # Static IPs used for uniquely identifying services in monitors local -rA static_ip_addresses=( ["rp"]="10.88.0.2" ["monitor"]="10.88.0.3" @@ -218,11 +225,15 @@ MSI_RP_ENDPOINT='$MSIRPENDPOINT' reboot_vm } +# export AZURE_CLOUD_NAME="${AZURECLOUDNAME:?"Failed to carry over variables"}" +# # This variable is used by az-cli # It's assumed that if this variable hasn't been carried over, that others are also not present, so we fail early by returning an error # This was mostly helpful when testing on a development VM, but is still applicable export AZURE_CLOUD_NAME="${AZURECLOUDNAME:?"Failed to carry over variables"}" +# util="util.sh" +# # util.sh does not exist when deployed to VMSS via VMSS extensions # Provides shellcheck definitions util="util.sh" diff --git a/pkg/deploy/generator/scripts/util-common.sh b/pkg/deploy/generator/scripts/util-common.sh index a78a4dbf589..a515c719347 100644 --- a/pkg/deploy/generator/scripts/util-common.sh +++ b/pkg/deploy/generator/scripts/util-common.sh @@ -1,37 +1,97 @@ #!/bin/bash # Internal Functions and Constants -# empty_str - constant; used by functions for optional nameref string arguements -# empty_str="" +# declare -r empty_str="" +# +# empty_str - constant +# * used by functions for optional nameref string arguments # shellcheck disable=SC2034 declare -r empty_str="" -# role_gateway - constant; Is used to determine which VMSS is being bootstrapped +# declare -r role_gateway="gateway" +# # this should be referenced by scripts sourcing this file # role_gateway="gateway" declare -r role_gateway="gateway" -# role_rp - constant; Is used to determine which VMSS is being bootstrapped + +# declare -r role_rp="rp" +# # this should be referenced by scripts sourcing this file # role_rp="rp" declare -r role_rp="rp" -# role_devproxy - constant; Is used to determine which VMSS is being bootstrapped -# role_devproxy="devproxy" + +# declare -r role_devproxy="devproxy" +# +# role_devproxy - constant +# * Is used to determine which VMSS is being bootstrapped declare -r role_devproxy="devproxy" -# us_gov_cloud - constant; Is the name of AZURECLOUDNAME for US government cloud -# us_gov_cloud="AzureUSGovernment" + +# declare -r us_gov_cloud="AzureUSGovernment" +# +# us_gov_cloud - constant +# * Is the name of AZURECLOUDNAME for US government cloud declare -r us_gov_cloud="AzureUSGovernment" -# log is a wrapper for echo that includes the function name -# Args -# 1) msg - string -# 2) stack_level - int; optional, defaults to the function at the bottom of the call stack +# declare -i XTRACE_SET=1 +# +# constant value signifying xtrace shell value is/should be set +declare -ir XTRACE_SET=1 + +# declare -i XTRACE_UNSET=0 +# +# constant value signifying xtrace shell value is/should be unset +declare -ir XTRACE_UNSET=0 + +# xtrace_is_set() +# +# Check if xtrace shell option is enabled/disabled +# * Returns XTRACE_SET value if set +# * Returns XTRACE_UNSET value if unset +xtrace_is_set() { + if [[ $- =~ "x" ]]; then + echo XTRACE_SET + fi + + echo XTRACE_UNSET +} + +# xtrace_toggle() +# +# set/unset xtrace shell option +# args: +# 1) string - nameref +# * Must be XTRACE_SET or XTRACE_UNSET +xtrace_toggle() { + if ! [[ $1 =~ ("XTRACE_SET"|"XTRACE_UNSET") ]]; then + log "\$1 invalid; \$1 must be XTRACE_SET or XTRACE_UNSET. \$1: $1" + return 1 + fi + + if (( $1 == XTRACE_SET )); then + set -x + elif + (( $1 == XTRACE_UNSET )); then + set +x + fi +} + +# log() +# +# Wrapper for echo that includes the function name +# args: +# 1) msg - string +# 2) stack_level - int +# * optional +# * defaults to the function at the bottom of the call stack log() { local -r msg="${1:-"log message is empty"}" local -r stack_level="${2:-1}" echo "${FUNCNAME[${stack_level}]}: ${msg}" } -# abort is a wrapper for log that exits with an error code +# abort() +# +# Wrapper for log that exits with an error code abort() { local -ri origin_stacklevel=2 log "${1}" "$origin_stacklevel" @@ -39,11 +99,13 @@ abort() { exit 1 } -# write_file -# Args -# 1) filename - string -# 2) file_contents - string -# 3) clobber - boolean; optional - defaults to false +# write_file() +# +# args: +# 1) filename - string +# 2) file_contents - string +# 3) clobber - boolean +# * Optional; defaults to false write_file() { local -n filename="$1" local -n file_contents="$2" @@ -58,11 +120,16 @@ write_file() { fi } -# retry Adding retry logic to yum commands in order to avoid stalling out on resource locks +# retry() +# +# Add retry logic to commands in order to avoid stalling out on resource locks # args: -# 1) cmd_retry - nameref, array; Command and arguement(s) to retry -# 2) wait_time - nameref, integer; Time to wait before retrying command -# 3) retries - integer, optional; Ammount of times to retry command, defaults to 5 +# 1) cmd_retry - nameref, array +# * Command and argument(s) to retry +# 2) wait_time - nameref, integer +# * Time to wait before retrying command +# 3) retries - integer, optional +# * Amount of times to retry command, defaults to 5 retry() { local -n cmd_retry="$1" local -n wait_time="$2" @@ -81,9 +148,11 @@ retry() { abort "${cmd_retry[*]} failed after #$retries attempts" } -# verify_role +# verify_role() +# # args: -# 1) test_role - nameref; role being verified +# 1) test_role - nameref +# * role being verified verify_role() { local -n test_role="$1" @@ -95,11 +164,15 @@ verify_role() { fi } -# get_keyvault_suffix +# get_keyvault_suffix() +# # args: -# 1) rl - nameref, string; role to get short role for -# 2) kv_suffix - nameref, string; short role will be assigned to this nameref -# 3) sec_prefix - nameref, string; keyvault certificate prefix will be assigned to this nameref +# 1) rl - nameref, string +# * role to get short role for +# 2) kv_suffix - nameref, string +# * short role will be assigned to this nameref +# 3) sec_prefix - nameref, string +# * keyvault certificate prefix will be assigned to this nameref get_keyvault_suffix() { local -n rl="$1" local -n kv_suffix="$2" @@ -118,14 +191,16 @@ get_keyvault_suffix() { sec_prefix="$role_rp" ;; *) - abort "unkown role $rl" + abort "unknown role $rl" ;; esac } +# reboot_vm() +# # reboot_vm restores calls shutdown -r in a subshell -# Reboots should scheduled after all VM extensions have had time to complete -# Reference: https://learn.microsoft.com/en-us/azure/virtual-machines/extensions/custom-script-linux#tips +# * Reboots should scheduled after all VM extensions have had time to complete +# * Reference: https://learn.microsoft.com/en-us/azure/virtual-machines/extensions/custom-script-linux#tips reboot_vm() { log "starting" diff --git a/pkg/deploy/generator/scripts/util-packages.sh b/pkg/deploy/generator/scripts/util-packages.sh index 95102ba25d1..b8d37cdf198 100644 --- a/pkg/deploy/generator/scripts/util-packages.sh +++ b/pkg/deploy/generator/scripts/util-packages.sh @@ -1,6 +1,7 @@ #!/bin/bash # Repository and package management related functions +# configure_repo_mariner_extended() configure_repo_mariner_extended() { local -r extended_repo_config="https://packages.microsoft.com/cbl-mariner/2.0/prod/extended/x86_64/config.repo" curl -sSL "$extended_repo_config" -o /etc/yum.repos.d/mariner-extended.repo @@ -19,10 +20,13 @@ configure_repo_mariner_extended() { } # configure_rpm_repos +# # New repositories should be added in their own functions, and called here # args: -# 1) wait_time - nameref, integer; Time to wait before retrying command -# 2) retries - integer, optional; Amount of times to retry command, defaults to 5 +# 1) wait_time - nameref, integer +# * Time to wait before retrying command +# 2) retries - integer, optional +# * Amount of times to retry command, defaults to 5 configure_rpm_repos() { log "starting" @@ -30,10 +34,14 @@ configure_rpm_repos() { } # dnf_install_pkgs +# # args: -# 1) pkgs - nameref, string array; Packages to be installed -# 2) wait_time - nameref, integer; Time to wait before retrying command -# 3) retries - integer, optional; Amount of times to retry command, defaults to 5 +# 1) pkgs - nameref, string array +# * Packages to be installed +# 2) wait_time - nameref, integer +# * Time to wait before retrying command +# 3) retries - integer, optional +# * Amount of times to retry command, defaults to 5 dnf_install_pkgs() { local -n pkgs="$1" log "starting" @@ -55,11 +63,15 @@ dnf_install_pkgs() { # dnf_update_pkgs +# # args: -# 1) excludes - nameref, string array, optional; Packages to exclude from updating -# Each index must be prefixed with -x -# 2) wait_time - nameref, integer; Time to wait before retrying command -# 3) retries - integer, optional; Ammount of times to retry command, defaults to 5 +# 1) excludes - nameref, string array, optional +# * Packages to exclude from updating +# * Each index must be prefixed with -x +# 2) wait_time - nameref, integer +# * Time to wait before retrying command +# 3) retries - integer, optional +# * Amount of times to retry command, defaults to 5 dnf_update_pkgs() { local -n excludes="${1:-empty_str}" log "starting" @@ -87,9 +99,12 @@ dnf_update_pkgs() { } # rpm_import_keys +# # args: -# 1) keys - nameref, string array; rpm keys to be imported -# 2) wait_time - nameref, integer; Time to wait before retrying command +# 1) keys - nameref, string array +# * rpm keys to be imported +# 2) wait_time - nameref, integer +# * Time to wait before retrying command rpm_import_keys() { local -n keys="$1" log "starting" @@ -112,6 +127,8 @@ rpm_import_keys() { done } +# util_common="util-common.sh" +# # util-common.sh does not exist when deployed to VMSS via VMSS extensions # Provides shellcheck definitions util_common="util-common.sh" diff --git a/pkg/deploy/generator/scripts/util-services.sh b/pkg/deploy/generator/scripts/util-services.sh index 69fa920dd2f..06f85f1acdf 100644 --- a/pkg/deploy/generator/scripts/util-services.sh +++ b/pkg/deploy/generator/scripts/util-services.sh @@ -1,9 +1,12 @@ #!/bin/bash # ARO service setup functions -# enable_services enables the systemd services that are passed in +# enable_services +# +# enables the systemd services that are passed in # args: -# 1) services - array; services to be enabled +# * 1) services - array +# * services to be enabled enable_services() { local -n svcs="$1" log "starting" @@ -21,11 +24,16 @@ enable_services() { } # configure_service_aro_gateway +# # args: -# 1) image - nameref, string; container image -# 2) role - nameref, string; VMSS role -# 3) conf_file - nameref, string; aro gateway environment file -# 4) ipaddress - nameref, string; static ip of podman network to be attached +# 1) image - nameref, string +# * container image +# 2) role - nameref, string +# * VMSS role +# 3) conf_file - nameref, string +# * aro gateway environment file +# 4) ipaddress - nameref, string +# * static ip of podman network to be attached configure_service_aro_gateway() { local -n image="$1" local -n role="$2" @@ -34,6 +42,7 @@ configure_service_aro_gateway() { log "starting" log "Configuring aro-gateway service" + # shellcheck disable=SC2034 local -r aro_gateway_conf_filename='/etc/sysconfig/aro-gateway' local -r add_conf_file="PODMAN_NETWORK='podman' IPADDRESS='$ipaddress' @@ -47,6 +56,7 @@ ARO_LOG_LEVEL='$GATEWAYLOGLEVEL'" local -r aro_gateway_service_filename='/etc/systemd/system/aro-gateway.service' # shellcheck disable=SC2034 + # shellcheck disable=SC2016 # below variable is in single quotes # as it is to be expanded at systemd start time (by systemd, not this script) local -r aro_gateway_service_file='[Unit] @@ -92,11 +102,16 @@ WantedBy=multi-user.target } # configure_service_aro_rp +# # args: -# 1) image - nameref, string; RP container image -# 2) role - nameref, string; VMSS role -# 3) conf_file - nameref, string; aro rp environment file -# 4) ipaddress - nameref, string; static ip of podman network to be attached +# * 1) image - nameref, string +# * RP container image +# * 2) role - nameref, string +# * VMSS role +# * 3) conf_file - nameref, string +# * aro rp environment file +# * 4) ipaddress - nameref, string +# * static ip of podman network to be attached configure_service_aro_rp() { local -n image="$1" local -n role="$2" @@ -105,6 +120,7 @@ configure_service_aro_rp() { log "starting" log "Configuring aro-rp service" + # shellcheck disable=SC2034 local -r aro_rp_conf_filename='/etc/sysconfig/aro-rp' local -r add_conf_file="PODMAN_NETWORK='podman' IPADDRESS='$ipaddress' @@ -116,7 +132,9 @@ ARO_LOG_LEVEL='$RPLOGLEVEL'" # shellcheck disable=SC2034 local -r aro_rp_service_filename='/etc/systemd/system/aro-rp.service' + # shellcheck disable=SC2034 + # shellcheck disable=SC2016 # below variable is in single quotes # as it is to be expanded at systemd start time (by systemd, not this script) local -r aro_rp_service_file='[Unit] @@ -182,9 +200,12 @@ WantedBy=multi-user.target' } # configure_service_aro_monitor +# # args: -# 1) image - nameref, string; RP container image -# 2) ipaddress - nameref, string; static ip of podman network to be attached +# 1) image - nameref, string +# * RP container image +# 2) ipaddress - nameref, string +# * static ip of podman network to be attached configure_service_aro_monitor() { local -n image="$1" local -n ipaddress="$2" @@ -195,6 +216,7 @@ configure_service_aro_monitor() { # are not used, but can't easily be refactored out. Should be revisited in the future. # shellcheck disable=SC2034 local -r aro_monitor_service_conf_filename='/etc/sysconfig/aro-monitor' + # shellcheck disable=SC2034 local -r aro_monitor_service_conf_file="AZURE_FP_CLIENT_ID='$FPCLIENTID' DOMAIN_NAME='$LOCATION.$CLUSTERPARENTDOMAINNAME' @@ -222,7 +244,9 @@ ARO_LOG_LEVEL='$MONITORLOGLEVEL'" # shellcheck disable=SC2034 local -r aro_monitor_service_filename='/etc/systemd/system/aro-monitor.service' + # shellcheck disable=SC2034 + # shellcheck disable=SC2016 # below variable is in single quotes # as it is to be expanded at systemd start time (by systemd, not this script) local -r aro_monitor_service_file='[Unit] @@ -273,9 +297,12 @@ WantedBy=multi-user.target' } # configure_service_aro_portal +# # args: -# 1) image - nameref, string; RP container image -# 2) ipaddress - nameref, string; static ip of podman network to be attached +# * 1) image - nameref, string +# * RP container image +# * 2) ipaddress - nameref, string +# * static ip of podman network to be attached configure_service_aro_portal() { local -n image="$1" local -n ipaddress="$2" @@ -303,7 +330,9 @@ ARO_LOG_LEVEL='$PORTALLOGLEVEL'" # shellcheck disable=SC2034 local -r aro_portal_service_filename='/etc/systemd/system/aro-portal.service' + # shellcheck disable=SC2034 + # shellcheck disable=SC2016 # below variable is in single quotes # as it is to be expanded at systemd start time (by systemd, not this script) local -r aro_portal_service_file='[Unit] @@ -349,10 +378,14 @@ WantedBy=multi-user.target' } # configure_service_aro_mimo_actuator +# # args: -# 1) image - nameref, string; RP container image -# 2) conf_file - nameref, string; aro rp environment file -# 3) ipaddress - nameref, string; static ip of podman network to be attached +# 1) image - nameref, string +# * RP container image +# 2) conf_file - nameref, string +# * aro rp environment file +# 3) ipaddress - nameref, string +# * static ip of podman network to be attached configure_service_aro_mimo_actuator() { local -n image="$1" local -n conf_file="$2" @@ -360,7 +393,10 @@ configure_service_aro_mimo_actuator() { log "starting" log "Configuring aro-mimo-actuator service" + # shellcheck disable=SC2034 local -r aro_mimo_actuator_conf_filename='/etc/sysconfig/aro-mimo-actuator' + + # shellcheck disable=SC2034 local -r add_conf_file="PODMAN_NETWORK='podman' IPADDRESS='$ipaddress' ARO_LOG_LEVEL='$MIMOACTUATORLOGLEVEL'" @@ -370,7 +406,9 @@ ARO_LOG_LEVEL='$MIMOACTUATORLOGLEVEL'" # shellcheck disable=SC2034 local -r aro_mimo_actuator_service_filename='/etc/systemd/system/aro-mimo-actuator.service' + # shellcheck disable=SC2034 + # shellcheck disable=SC2016 # below variable is in single quotes # as it is to be expanded at systemd start time (by systemd, not this script) local -r aro_mimo_actuator_service_file='[Unit] @@ -434,9 +472,12 @@ WantedBy=multi-user.target' # configure_service_aro_mimo_scheduler # args: -# 1) image - nameref, string; RP container image -# 2) conf_file - nameref, string; aro rp environment file -# 3) ipaddress - nameref, string; static ip of podman network to be attached +# 1) image - nameref, string +# * RP container image +# 2) conf_file - nameref, string +# * aro rp environment file +# 3) ipaddress - nameref, string +# * static ip of podman network to be attached configure_service_aro_mimo_scheduler() { local -n image="$1" local -n conf_file="$2" @@ -444,7 +485,9 @@ configure_service_aro_mimo_scheduler() { log "starting" log "Configuring aro-mimo-scheduler service" + # shellcheck disable=SC2034 local -r aro_mimo_scheduler_conf_filename='/etc/sysconfig/aro-mimo-scheduler' + # shellcheck disable=SC2034 local -r add_conf_file="PODMAN_NETWORK='podman' IPADDRESS='$ipaddress' ARO_LOG_LEVEL='$MIMOSCHEDULERLOGLEVEL'" @@ -454,7 +497,7 @@ ARO_LOG_LEVEL='$MIMOSCHEDULERLOGLEVEL'" # shellcheck disable=SC2034 local -r aro_mimo_scheduler_service_filename='/etc/systemd/system/aro-mimo-scheduler.service' - # shellcheck disable=SC2034 + # shellcheck disable=SC2034 disable=SC2016 # below variable is in single quotes # as it is to be expanded at systemd start time (by systemd, not this script) local -r aro_mimo_scheduler_service_file='[Unit] @@ -517,9 +560,12 @@ WantedBy=multi-user.target' } # configure_service_aro_mise +# # args: -# 1) image - nameref, string; MISE container image -# 2) ipaddress - nameref, string; static ip of podman network to be attached +# 1) image - nameref, string +# * MISE container image +# 2) ipaddress - nameref, string +# * static ip of podman network to be attached configure_service_aro_mise() { local -n image="$1" local -n ipaddress="$2" @@ -615,7 +661,9 @@ IPADDRESS='$ipaddress'" # shellcheck disable=SC2034 local -r aro_mise_service_filename='/etc/systemd/system/aro-mise.service' + # shellcheck disable=SC2034 + # shellcheck disable=SC2016 # below variable is in single quotes # as it is to be expanded at systemd start time (by systemd, not this script) local -r aro_mise_service_file='[Unit] @@ -644,11 +692,16 @@ WantedBy=multi-user.target' write_file aro_mise_service_filename aro_mise_service_file true } + # configure_service_aro_otel_collector +# # args: -# 1) image - nameref, string; OTEL container image -# 2) static_ip_address - nameref, array; static ips of all services -# 3) ipaddress - nameref, string; static ip of podman network to be attached +# 1) image - nameref, string +# * OTEL container image +# 2) static_ip_address - nameref, array +# * static ips of all services +# 3) ipaddress - nameref, string +# * static ip of podman network to be attached configure_service_aro_otel_collector() { local -n image="$1" local -n static_ip_address="$2" @@ -714,7 +767,9 @@ service: # shellcheck disable=SC2034 local -r aro_otel_collector_service_filename='/etc/systemd/system/aro-otel-collector.service' + # shellcheck disable=SC2034 + # shellcheck disable=SC2016 # below variable is in single quotes # as it is to be expanded at systemd start time (by systemd, not this script) local -r aro_otel_collector_service_file='[Unit] @@ -745,9 +800,12 @@ WantedBy=multi-user.target' } # configure_service_mdsd +# # args: -# 1) monitoring_role - nameref, string; can be "gateway" or "rp" -# 2) monitor_config_version - nameref, string; mdsd config version +# 1) monitoring_role - nameref, string +# * can be "gateway" or "rp" +# 2) monitor_config_version - nameref, string +# * mdsd config version configure_service_mdsd() { local -n role="$1" local -n monitor_config_version="$2" @@ -793,10 +851,14 @@ export MDSD_MSGPACK_SORT_COLUMNS=\"1\"" } # configure_service_fluentbit +# # args: -# 1) conf_file - string; fluenbit configuration file -# 2) image - string; fluentbit container image to run -# 3) ipaddress - nameref, string; static ip of podman network to be attached +# 1) conf_file - string +# * fluenbit configuration file +# 2) image - string +# * fluentbit container image to run +# 3) ipaddress - nameref, string +# * static ip of podman network to be attached configure_service_fluentbit() { # shellcheck disable=SC2034 local -n conf_file="$1" @@ -820,7 +882,9 @@ configure_service_fluentbit() { # shellcheck disable=SC2034 local -r service_filename='/etc/systemd/system/fluentbit.service' + # shellcheck disable=SC2034 + # shellcheck disable=SC2016 # below variable is in single quotes # as it is to be expanded at systemd start time (by systemd, not this script) local -r service_file='[Unit] @@ -859,8 +923,10 @@ WantedBy=multi-user.target' } # configure_timers_mdm_mdsd +# # args: -# 1) role - string; can be "gateway" or "rp" +# 1) role - string +# * can be "gateway" or "rp" configure_timers_mdm_mdsd() { local -n role="$1" log "starting" @@ -1015,10 +1081,14 @@ WantedBy=multi-user.target' } # configure_service_mdm +# # args: -# 1) role - nameref, string; can be "gateway" or "rp" -# 2) image - nameref, string; mdm container image to run -# 3) ipaddress - nameref, string; static ip of podman network to be attached +# 1) role - nameref, string +# * can be "gateway" or "rp" +# 2) image - nameref, string +# * mdm container image to run +# 3) ipaddress - nameref, string +# * static ip of podman network to be attached configure_service_mdm() { local -n role="$1" local -n image="$2" @@ -1047,7 +1117,9 @@ IPADDRESS='$ipaddress'" mkdir -p /var/etw # shellcheck disable=SC2034 local -r mdm_service_filename="/etc/systemd/system/mdm.service" + # shellcheck disable=SC2034 + # shellcheck disable=SC2016 # below variable is in single quotes # as it is to be expanded at systemd start time (by systemd, not this script) local -r mdm_service_file='[Unit] @@ -1092,11 +1164,16 @@ WantedBy=multi-user.target' } # configure_vmss_aro_service +# # args: -# 1) r - nameref, string; role of VMSS -# 2) images - nameref, associative array; ARO container images -# 3) configs - nameref, associative array; configuration files and versions. The values should be a reference to variables, not dereferenced. -# This is because the value is used when creating nameref variables by helper functions. +# 1) r - nameref, string +# * role of VMSS +# 2) images - nameref, associative array +# * ARO container images +# 3) configs - nameref, associative array +# * configuration files and versions. +# * The values should be a reference to variables, not dereferenced. +# * This is because the value is used when creating nameref variables by helper functions. configure_vmss_aro_services() { local -n r="$1" local -n images="$2" @@ -1105,26 +1182,50 @@ configure_vmss_aro_services() { verify_role "$1" if [ "$r" == "$role_gateway" ]; then - configure_service_aro_gateway "${images["rp"]}" "$1" "${configs["gateway_config"]}" "${configs["static_ip_address"]}["gateway"]" + configure_service_aro_gateway "${images["rp"]}" "$1" "${configs["gateway_config"]}" "${configs["static_ip_address"]}[gateway]" configure_certs_gateway elif [ "$r" == "$role_rp" ]; then - configure_service_aro_rp "${images["rp"]}" "$1" "${configs["rp_config"]}" "${configs["static_ip_address"]}["rp"]" - configure_service_aro_mimo_actuator "${images["rp"]}" "${configs["rp_config"]}" "${configs["static_ip_address"]}["mimo_actuator"]" - configure_service_aro_mimo_scheduler "${images["rp"]}" "${configs["rp_config"]}" "${configs["static_ip_address"]}["mimo_scheduler"]" - configure_service_aro_monitor "${images["rp"]}" "${configs["static_ip_address"]}["monitor"]" - configure_service_aro_portal "${images["rp"]}" "${configs["static_ip_address"]}["portal"]" - configure_service_aro_mise "${images["mise"]}" "${configs["static_ip_address"]}["mise"]" - configure_service_aro_otel_collector "${images["otel"]}" "${configs["static_ip_address"]}" "${configs["static_ip_address"]}["otel_collector"]" + configure_service_aro_rp "${images["rp"]}" \ + "$1" \ + "${configs[rp_config]}" \ + "${configs[static_ip_address]}[rp]" + + configure_service_aro_mimo_actuator "${images[rp]}" \ + "${configs[rp_config]}" \ + "${configs[static_ip_address]}[mimo_actuator]" + + configure_service_aro_mimo_scheduler "${images[rp]}" \ + "${configs[rp_config]}" \ + "${configs[static_ip_address]}[mimo_scheduler]" + + configure_service_aro_monitor "${images[rp]}" "${configs[static_ip_address]}[monitor]" + + configure_service_aro_portal "${images[rp]}" "${configs[static_ip_address]}[portal]" + + configure_service_aro_mise "${images[mise]}" "${configs[static_ip_address]}[mise]" + + configure_service_aro_otel_collector "${images[otel]}" \ + "${configs[static_ip_address]}" \ + "${configs["static_ip_address"]}[otel_collector]" + configure_certs_rp fi - configure_service_fluentbit "${configs["fluentbit"]}" "${images["fluentbit"]}" + configure_service_fluentbit "${configs[fluentbit]}" "${images[fluentbit]}" + configure_timers_mdm_mdsd "$1" - configure_service_mdm "$1" "${images["mdm"]}" "${configs["static_ip_address"]}["mdm"]" - configure_service_mdsd "$1" "${configs["mdsd"]}" + + configure_service_mdm "$1" \ + "${images[mdm]}" \ + "${configs["static_ip_address"]}[mdm]" + + configure_service_mdsd "$1" "${configs[mdsd]}" + run_azsecd_config_scan } +# util_common="util-common.sh" +# # util-common.sh does not exist when deployed to VMSS via VMSS extensions # Provides shellcheck definitions util_common="util-common.sh" @@ -1133,6 +1234,8 @@ if [ -f "$util_common" ]; then source "$util_common" fi +# util_system="util-system.sh" +# # util-system.sh does not exist when deployed to VMSS via VMSS extensions # Provides shellcheck definitions util_system="util-system.sh" diff --git a/pkg/deploy/generator/scripts/util-system.sh b/pkg/deploy/generator/scripts/util-system.sh index 0fc156f9a35..aabae1c5f60 100644 --- a/pkg/deploy/generator/scripts/util-system.sh +++ b/pkg/deploy/generator/scripts/util-system.sh @@ -2,10 +2,15 @@ # This file is intended to be sourced by bootstrapping scripts for commonly used functions # get_boot_dev_uuid +# # Get the boot devices uuid # args: -# 1) boot_dev_uuid - nameref, string; Empty variable for boot device uuid assignment +# +# * 1) boot_dev_uuid - nameref, string; Empty variable for boot device uuid assignment +# # Taken and refactored from https://eng.ms/docs/products/azure-linux/features/security/fips +# TODO remove this once sku cbl-mariner-2-gen2-fips is supported by automatic OS updates +# * Reference: https://learn.microsoft.com/en-us/azure/virtual-machine-scale-sets/virtual-machine-scale-sets-automatic-upgrade#supported-os-images get_boot_dev_uuid() { local -n boot_dev_uuid="$1" # Set boot_uuid variable for the boot partition if different from the root @@ -20,8 +25,12 @@ get_boot_dev_uuid() { } # fips_verify +# # Verify that fips mode is enabled +# # Taken and refactored from https://eng.ms/docs/products/azure-linux/features/security/fips +# TODO remove this once sku cbl-mariner-2-gen2-fips is supported by automatic OS updates +# * Reference: https://learn.microsoft.com/en-us/azure/virtual-machine-scale-sets/virtual-machine-scale-sets-automatic-upgrade#supported-os-images fips_verify() { fips_enabled_proc="$(cat /proc/sys/crypto/fips_enabled)" fips_enabled_sysctl="$(sysctl -n crypto.fips_enabled)" @@ -33,10 +42,12 @@ fips_verify() { } # fips_configure +# # Configures VM to run with fips mode enabled +# # Taken and refactored from https://eng.ms/docs/products/azure-linux/features/security/fips # TODO remove this once sku cbl-mariner-2-gen2-fips is supported by automatic OS updates -# Reference: https://learn.microsoft.com/en-us/azure/virtual-machine-scale-sets/virtual-machine-scale-sets-automatic-upgrade#supported-os-images +# * Reference: https://learn.microsoft.com/en-us/azure/virtual-machine-scale-sets/virtual-machine-scale-sets-automatic-upgrade#supported-os-images fips_configure() { # shellcheck disable=SC2034 local boot_uuid @@ -54,6 +65,7 @@ fips_configure() { } # configure_sshd +# # We need to configure PasswordAuthentication to yes in order for the VMSS Access JIT to work configure_sshd() { log "starting" @@ -66,9 +78,12 @@ configure_sshd() { } # configure_logrotate clobbers /etc/logrotate.conf +# # args: -# 1) dropin_files - nameref, associative array, optional; logrotate files to write to /etc/logrotate.d -# Key name dictates filenames written to /etc/logrotate.d. +# 1) dropin_files - nameref, associative array; optional +# * logrotate files to write to /etc/logrotate.d +# * Key name dictates filenames written to /etc/logrotate.d. +# # Example: # Key dictates the filename written in /etc/logrotate.d # shellcheck disable=SC2034 @@ -132,16 +147,19 @@ include /etc/logrotate.d } # pull_container_images +# # args: -# 1) pull_images - nameref, string array -# 2) registry_conf - nameref, string, optional; path to docker/podman configuration file +# 1) pull_images - nameref, string array +# * array of strings. Each string is an image to be pulled. +# 2) registry_conf - nameref, string, optional +# * path to docker/podman configuration file. pull_container_images() { local -n pull_images="$1" local -n registry_conf="${2:-empty_str}" log "starting" # shellcheck disable=SC2034 - local -ri retry_time=30 + local -ir retry_time=30 cmd=( az login @@ -152,29 +170,44 @@ pull_container_images() { log "Running az login with retries" retry cmd retry_time - # Suppress emulation output for podman instead of docker for az acr compatability + # Suppress emulation output for podman instead of docker for az acr compatibility mkdir -p /etc/containers/ mkdir -p /root/.docker touch /etc/containers/nodocker + [ -n "${registry_conf}" ] && write_file REGISTRY_AUTH_FILE registry_conf "true" + # This name is used in the case that az acr login searches for this in it's environment + # exported here as it's used by podman login and subsequent podman pull export REGISTRY_AUTH_FILE="/root/.docker/config.json" - if [ -n "${registry_conf}" ]; then - write_file REGISTRY_AUTH_FILE registry_conf true - fi - - log "logging into prod acr" - cmd=( - az - acr - login - --name - # TODO replace this with variable expansion - # Reference: https://www.shellcheck.net/wiki/SC2001 - "$(sed -e 's|.*/||' <<<"$ACRRESOURCEID")" - ) - + # shellcheck disable=SC2329 + _() { + local -r acr="$1" + local -r registry="$2" + + local -r xtrace_initial_set="$(xtrace_is_set)" + xtrace_toggle XTRACE_UNSET + + log "logging into container registry $2" + az acr login \ + --name "$acr" \ + --expose-token \ + --output tsv \ + --query accessToken \ + | podman login \ + --username "00000000-0000-0000-0000-000000000000" \ + --password-stdin \ + "$registry" + local -ir status=$? + + xtrace_toggle "$xtrace_initial_set" + return "$status" + } + + local -r acr_name="${ACRRESOURCEID##*/}" + local -r registry_name="${acr_name}.azurecr.io" + cmd=(_ "$acr_name" "$registry_name") retry cmd retry_time # shellcheck disable=SC2068 @@ -200,25 +233,39 @@ pull_container_images() { retry cmd retry_time } -# configure_certs_general Configure system certificates common to all VMSS instances -configure_certs_general() { +# configure_ca_bundle() +# +# Configures system ca-bundle certificates common to all VMSS instances. +configure_ca_bundle() { log "starting" + local -r xtrace_initial_value="$(xtrace_is_set)" + xtrace_toggle XTRACE_UNSET + # setting MONITORING_GCS_AUTH_ID_TYPE=AuthKeyVault seems to have caused mdsd not # to honour SSL_CERT_FILE any more, heaven only knows why. local -r ssl_certs_basedir="/usr/lib/ssl/certs" mkdir -p "$ssl_certs_basedir" - csplit -f "$ssl_certs_basedir/cert-" -b %03d.pem /etc/pki/tls/certs/ca-bundle.crt /^$/1 "{*}" 1>/dev/null + + ca_bundle="/etc/pki/tls/certs/ca-bundle.crt" + log "Configuring $ca_bundle" + csplit -f "$ssl_certs_basedir/cert-" -b %03d.pem "$ca_bundle" /^$/1 "{*}" 1>/dev/null c_rehash "$ssl_certs_basedir" + + xtrace_toggle "$xtrace_initial_value" } -# configure_certs_rp Configure system certificates for RP VMSS -# args: +# configure_certs_rp() +# +# Configures RP system certificates configure_certs_rp() { log "starting" verify_role role_rp + local -r xtrace_initial_value="$(xtrace_is_set)" + xtrace_toggle XTRACE_UNSET + local -r rp_certs_basedir="/etc/aro-rp" mkdir -p "$rp_certs_basedir" base64 -d <<<"$ADMINAPICABUNDLE" > "$rp_certs_basedir/admin-ca-bundle.pem" @@ -227,22 +274,30 @@ configure_certs_rp() { fi chown -R 1000:1000 "$rp_certs_basedir" - configure_certs_general + + xtrace_toggle "$xtrace_initial_value" + configure_ca_bundle } -# configure_certs_gateway Configure system certificates for Gateway VMSS instances +# configure_certs_gateway() +# +# Configures system tls certificates for Gateway VMSS instances configure_certs_gateway() { log "starting" verify_role role_gateway - configure_certs_general + configure_ca_bundle } -# configure_certs_devproxy Configure system certificates for devproxy VMSS instances +# configure_certs_devproxy() +# +# Configures system certificates for devproxy VMSS instances configure_certs_devproxy() { log "starting" verify_role role_devproxy + xtrace_initial_value="$(xtrace_is_set)" + xtrace_toggle XTRACE_UNSET local -r proxy_certs_basedir="/etc/proxy" mkdir -p "$proxy_certs_basedir" @@ -251,8 +306,11 @@ configure_certs_devproxy() { base64 -d <<<"$PROXYCLIENTCERT" > "$proxy_certs_basedir/proxy-client.crt" chown -R 1000:1000 /etc/proxy chmod 0600 "$proxy_certs_basedir/proxy.key" + + xtrace_toggle "$xtrace_initial_value" } +# configure_azsecd_scan() configure_azsecd_scan() { log "starting" @@ -320,9 +378,10 @@ firewalld_configure_backend() { } # firewalld_configure +# # args: # 1) ports - nameref, string array; ports to be enabled. -# Ports must be postfixed with /tcp or /udp +# * Ports must be postfixed with /tcp or /udp firewalld_configure() { local -n ports="$1" log "starting" diff --git a/pkg/deploy/generator/scripts/util.sh b/pkg/deploy/generator/scripts/util.sh index ca1f36304ea..ec00f1a1a5b 100644 --- a/pkg/deploy/generator/scripts/util.sh +++ b/pkg/deploy/generator/scripts/util.sh @@ -1,31 +1,35 @@ #!/bin/bash # File to be sourced by *VMSS.sh scripts -# This is only present for the ability to manaully run the VMSS setup scripts seperate from the deploy process. -# e. g. scp copying the script to a test VM +# +# This is only present for the ability to manually run the VMSS setup scripts separate from the deploy process. +# * e.g. scp copying the script to a test VM +# # During normal deployment operations, the other util-*.sh files are prefixed to the VMSS scripts -if [ "${DEBUG:-false}" == true ]; then - set -x -fi +[ "${DEBUG:-false}" == true ] && set -x +# util_common="util-common.sh" util_common="util-common.sh" if [ -f "$util_common" ]; then # shellcheck source=util-common.sh source "$util_common" fi +# util_system="util-system.sh" util_system="util-system.sh" if [ -f "$util_system" ]; then # shellcheck source=util-system.sh source "$util_system" fi +# util_services="util-services.sh" util_services="util-services.sh" if [ -f "$util_services" ]; then # shellcheck source=util-services.sh source "$util_services" fi +# util_pkgs="util-packages.sh" util_pkgs="util-packages.sh" if [ -f "$util_pkgs" ]; then # shellcheck source=util-packages.sh