JSUgQ29weXJpZ2h0IChjKSAyMDExLTIwMTIgQmFzaG8gVGVjaG5vbG9naWVzLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgolJQolJSBUaGlzIGZpbGUgaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwKJSUgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlCiUlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbgolJSBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKJSUKJSUgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKJSUKJSUgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAolJSBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgolJSAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKJSUgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCiUlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKJSUgdW5kZXIgdGhlIExpY2Vuc2UuCgolJSBAZG9jIEZpbGUgYmFja2VuZCBmb3IgbGFnZXIsIHdpdGggbXVsdGlwbGUgZmlsZSBzdXBwb3J0LgolJSBNdWx0aXBsZSBmaWxlcyBhcmUgc3VwcG9ydGVkLCBlYWNoIHdpdGggdGhlIHBhdGggYW5kIHRoZSBsb2dsZXZlbCBiZWluZwolJSBjb25maWd1cmFibGUuIFRoZSBjb25maWd1cmF0aW9uIHBhcmFtdGVyIGZvciB0aGlzIGJhY2tlbmQgaXMgYSBsaXN0IG9mCiUlIGtleS12YWx1ZSAyLXR1cGxlcy4gU2VlIHRoZSBpbml0KCkgZnVuY3Rpb24gZm9yIHRoZSBhdmFpbGFibGUgb3B0aW9ucy4KJSUgVGhpcyBiYWNrZW5kIHN1cHBvcnRzIGV4dGVybmFsIGFuZCBpbnRlcm5hbCBsb2cKJSUgcm90YXRpb24gYW5kIHdpbGwgcmUtb3BlbiBoYW5kbGVzIHRvIGZpbGVzIGlmIHRoZSBpbm9kZSBjaGFuZ2VzLiBJdCB3aWxsCiUlIGFsc28gcm90YXRlIHRoZSBmaWxlcyBpdHNlbGYgaWYgdGhlIHNpemUgb2YgdGhlIGZpbGUgZXhjZWVkcyB0aGUKJSUgYHNpemUnIGFuZCBrZWVwIGBjb3VudCcgcm90YXRlZCBmaWxlcy4gYGRhdGUnIGlzCiUlIGFuIGFsdGVybmF0ZSByb3RhdGlvbiB0cmlnZ2VyLCBiYXNlZCBvbiB0aW1lLiBTZWUgdGhlIFJFQURNRSBmb3IKJSUgZG9jdW1lbnRhdGlvbi4KJSUgRm9yIHBlcmZvcm1hbmNlLCB0aGUgZmlsZSBiYWNrZW5kIGRvZXMgZGVsYXllZCB3cml0ZXMsIGFsdGhvdWdoIGl0IHdpbGwKJSUgc3luYyBhdCBzcGVjaWZpYyBsb2cgbGV2ZWxzLCBjb25maWd1cmVkIHZpYSB0aGUgYHN5bmNfb24nIG9wdGlvbi4gQnkgZGVmYXVsdAolJSB0aGUgZXJyb3IgbGV2ZWwgb3IgYWJvdmUgd2lsbCB0cmlnZ2VyIGEgc3luYy4KCi1tb2R1bGUobGFnZXJfZmlsZV9iYWNrZW5kKS4KCi1pbmNsdWRlKCJsYWdlci5ocmwiKS4KCi1iZWhhdmlvdXIoZ2VuX2V2ZW50KS4KCi1pZmRlZihURVNUKS4KLWluY2x1ZGVfbGliKCJldW5pdC9pbmNsdWRlL2V1bml0LmhybCIpLgotaW5jbHVkZV9saWIoImtlcm5lbC9pbmNsdWRlL2ZpbGUuaHJsIikuCi1jb21waWxlKFt7cGFyc2VfdHJhbnNmb3JtLCBsYWdlcl90cmFuc2Zvcm19XSkuCi1lbmRpZi4KCi1leHBvcnQoW2luaXQvMSwgaGFuZGxlX2NhbGwvMiwgaGFuZGxlX2V2ZW50LzIsIGhhbmRsZV9pbmZvLzIsIHRlcm1pbmF0ZS8yLAogICAgICAgIGNvZGVfY2hhbmdlLzNdKS4KCi1leHBvcnQoW2NvbmZpZ190b19pZC8xXSkuCgotZGVmaW5lKERFRkFVTFRfTE9HX0xFVkVMLCBpbmZvKS4KLWRlZmluZShERUZBVUxUX1JPVEFUSU9OX1NJWkUsIDEwNDg1NzYwKS4gJSUgMTBtYgotZGVmaW5lKERFRkFVTFRfUk9UQVRJT05fREFURSwgIiREMCIpLiAlJSBtaWRuaWdodAotZGVmaW5lKERFRkFVTFRfUk9UQVRJT05fQ09VTlQsIDUpLgotZGVmaW5lKERFRkFVTFRfU1lOQ19MRVZFTCwgZXJyb3IpLgotZGVmaW5lKERFRkFVTFRfU1lOQ19JTlRFUlZBTCwgMTAwMCkuCi1kZWZpbmUoREVGQVVMVF9TWU5DX1NJWkUsIDEwMjQqNjQpLiAlJSA2NGtiCi1kZWZpbmUoREVGQVVMVF9DSEVDS19JTlRFUlZBTCwgMTAwMCkuCgotcmVjb3JkKHN0YXRlLCB7CiAgICAgICAgbmFtZSA6OiBzdHJpbmcoKSwKICAgICAgICBsZXZlbCA6OiB7J21hc2snLCBpbnRlZ2VyKCl9LAogICAgICAgIGZkIDo6IGZpbGU6aW9fZGV2aWNlKCksCiAgICAgICAgaW5vZGUgOjogaW50ZWdlcigpLAogICAgICAgIGZsYXA9ZmFsc2UgOjogYm9vbGVhbigpLAogICAgICAgIHNpemUgPSAwIDo6IGludGVnZXIoKSwKICAgICAgICBkYXRlLAogICAgICAgIGNvdW50ID0gMTAsCiAgICAgICAgZm9ybWF0dGVyLAogICAgICAgIGZvcm1hdHRlcl9jb25maWcsCiAgICAgICAgc3luY19vbiwKICAgICAgICBjaGVja19pbnRlcnZhbCA9ID9ERUZBVUxUX0NIRUNLX0lOVEVSVkFMLAogICAgICAgIHN5bmNfaW50ZXJ2YWwgPSA/REVGQVVMVF9TWU5DX0lOVEVSVkFMLAogICAgICAgIHN5bmNfc2l6ZSA9ID9ERUZBVUxUX1NZTkNfU0laRSwKICAgICAgICBsYXN0X2NoZWNrID0gb3M6dGltZXN0YW1wKCkKICAgIH0pLgoKLXR5cGUgb3B0aW9uKCkgOjoge2ZpbGUsIHN0cmluZygpfSB8IHtsZXZlbCwgbGFnZXI6bG9nX2xldmVsKCl9IHwKICAgICAgICAgICAgICAgICAge3NpemUsIG5vbl9uZWdfaW50ZWdlcigpfSB8IHtkYXRlLCBzdHJpbmcoKX0gfAogICAgICAgICAgICAgICAgICB7Y291bnQsIG5vbl9uZWdfaW50ZWdlcigpfSB8IHtzeW5jX2ludGVydmFsLCBub25fbmVnX2ludGVnZXIoKX0gfAogICAgICAgICAgICAgICAgICB7c3luY19zaXplLCBub25fbmVnX2ludGVnZXIoKX0gfCB7c3luY19vbiwgbGFnZXI6bG9nX2xldmVsKCl9IHwKICAgICAgICAgICAgICAgICAge2NoZWNrX2ludGVydmFsLCBub25fbmVnX2ludGVnZXIoKX0gfCB7Zm9ybWF0dGVyLCBhdG9tKCl9IHwKICAgICAgICAgICAgICAgICAge2Zvcm1hdHRlcl9jb25maWcsIHRlcm0oKX0uCgotc3BlYyBpbml0KFtvcHRpb24oKSwuLi5dKSAtPiB7b2ssICNzdGF0ZXt9fSB8IHtlcnJvciwgYmFkX2NvbmZpZ30uCmluaXQoe0ZpbGVOYW1lLCBMb2dMZXZlbH0pIHdoZW4gaXNfbGlzdChGaWxlTmFtZSksIGlzX2F0b20oTG9nTGV2ZWwpIC0+CiAgICAlJSBiYWNrd2FyZHMgY29tcGF0YWJpbGl0eSBoYWNrCiAgICBpbml0KFt7ZmlsZSwgRmlsZU5hbWV9LCB7bGV2ZWwsIExvZ0xldmVsfV0pOwppbml0KHtGaWxlTmFtZSwgTG9nTGV2ZWwsIFNpemUsIERhdGUsIENvdW50fSkgd2hlbiBpc19saXN0KEZpbGVOYW1lKSwgaXNfYXRvbShMb2dMZXZlbCkgLT4KICAgICUlIGJhY2t3YXJkcyBjb21wYXRhYmlsaXR5IGhhY2sKICAgIGluaXQoW3tmaWxlLCBGaWxlTmFtZX0sIHtsZXZlbCwgTG9nTGV2ZWx9LCB7c2l6ZSwgU2l6ZX0sIHtkYXRlLCBEYXRlfSwge2NvdW50LCBDb3VudH1dKTsKaW5pdChbe0ZpbGVOYW1lLCBMb2dMZXZlbCwgU2l6ZSwgRGF0ZSwgQ291bnR9LCB7Rm9ybWF0dGVyLEZvcm1hdHRlckNvbmZpZ31dKSB3aGVuIGlzX2xpc3QoRmlsZU5hbWUpLCBpc19hdG9tKExvZ0xldmVsKSwgaXNfYXRvbShGb3JtYXR0ZXIpIC0+CiAgICAlJSBiYWNrd2FyZHMgY29tcGF0YWJpbGl0eSBoYWNrCiAgICBpbml0KFt7ZmlsZSwgRmlsZU5hbWV9LCB7bGV2ZWwsIExvZ0xldmVsfSwge3NpemUsIFNpemV9LCB7ZGF0ZSwgRGF0ZX0sIHtjb3VudCwgQ291bnR9LCB7Zm9ybWF0dGVyLCBGb3JtYXR0ZXJ9LCB7Zm9ybWF0dGVyX2NvbmZpZywgRm9ybWF0dGVyQ29uZmlnfV0pOwppbml0KFtMb2dGaWxlLHtGb3JtYXR0ZXJ9XSkgLT4KICAgICUlIGJhY2t3YXJkcyBjb21wYXRhYmlsaXR5IGhhY2sKICAgIGluaXQoW0xvZ0ZpbGUse0Zvcm1hdHRlcixbXX1dKTsKaW5pdChbe0ZpbGVOYW1lLCBMb2dMZXZlbH0sIHtGb3JtYXR0ZXIsRm9ybWF0dGVyQ29uZmlnfV0pIHdoZW4gaXNfbGlzdChGaWxlTmFtZSksIGlzX2F0b20oTG9nTGV2ZWwpLCBpc19hdG9tKEZvcm1hdHRlcikgLT4KICAgICUlIGJhY2t3YXJkcyBjb21wYXRhYmlsaXR5IGhhY2sKICAgIGluaXQoW3tmaWxlLCBGaWxlTmFtZX0sIHtsZXZlbCwgTG9nTGV2ZWx9LCB7Zm9ybWF0dGVyLCBGb3JtYXR0ZXJ9LCB7Zm9ybWF0dGVyX2NvbmZpZywgRm9ybWF0dGVyQ29uZmlnfV0pOwppbml0KExvZ0ZpbGVDb25maWcpIHdoZW4gaXNfbGlzdChMb2dGaWxlQ29uZmlnKSAtPgogICAgY2FzZSB2YWxpZGF0ZV9sb2dmaWxlX3Byb3BsaXN0KExvZ0ZpbGVDb25maWcpIG9mCiAgICAgICAgZmFsc2UgLT4KICAgICAgICAgICAgJSUgZmFsaWVkIHRvIHZhbGlkYXRlIGNvbmZpZwogICAgICAgICAgICB7ZXJyb3IsIGJhZF9jb25maWd9OwogICAgICAgIENvbmZpZyAtPgogICAgICAgICAgICAlJSBwcm9iYWJhYmx5IGEgYmV0dGVyIHdheSB0byBkbyB0aGlzLCBidXQgd2hhdGV2ZXIKICAgICAgICAgICAgW05hbWUsIExldmVsLCBEYXRlLCBTaXplLCBDb3VudCwgU3luY0ludGVydmFsLCBTeW5jU2l6ZSwgU3luY09uLCBDaGVja0ludGVydmFsLCBGb3JtYXR0ZXIsIEZvcm1hdHRlckNvbmZpZ10gPQogICAgICAgICAgICAgIFtwcm9wbGlzdHM6Z2V0X3ZhbHVlKEtleSwgQ29uZmlnKSB8fCBLZXkgPC0gW2ZpbGUsIGxldmVsLCBkYXRlLCBzaXplLCBjb3VudCwgc3luY19pbnRlcnZhbCwgc3luY19zaXplLCBzeW5jX29uLCBjaGVja19pbnRlcnZhbCwgZm9ybWF0dGVyLCBmb3JtYXR0ZXJfY29uZmlnXV0sCiAgICAgICAgICAgIHNjaGVkdWxlX3JvdGF0aW9uKE5hbWUsIERhdGUpLAogICAgICAgICAgICBTdGF0ZTAgPSAjc3RhdGV7bmFtZT1OYW1lLCBsZXZlbD1MZXZlbCwgc2l6ZT1TaXplLCBkYXRlPURhdGUsIGNvdW50PUNvdW50LCBmb3JtYXR0ZXI9Rm9ybWF0dGVyLAogICAgICAgICAgICAgICAgZm9ybWF0dGVyX2NvbmZpZz1Gb3JtYXR0ZXJDb25maWcsIHN5bmNfb249U3luY09uLCBzeW5jX2ludGVydmFsPVN5bmNJbnRlcnZhbCwgc3luY19zaXplPVN5bmNTaXplLAogICAgICAgICAgICAgICAgY2hlY2tfaW50ZXJ2YWw9Q2hlY2tJbnRlcnZhbH0sCiAgICAgICAgICAgIFN0YXRlID0gY2FzZSBsYWdlcl91dGlsOm9wZW5fbG9nZmlsZShOYW1lLCB7U3luY1NpemUsIFN5bmNJbnRlcnZhbH0pIG9mCiAgICAgICAgICAgICAgICB7b2ssIHtGRCwgSW5vZGUsIF99fSAtPgogICAgICAgICAgICAgICAgICAgIFN0YXRlMCNzdGF0ZXtmZD1GRCwgaW5vZGU9SW5vZGV9OwogICAgICAgICAgICAgICAge2Vycm9yLCBSZWFzb259IC0+CiAgICAgICAgICAgICAgICAgICAgP0lOVF9MT0coZXJyb3IsICJGYWlsZWQgdG8gb3BlbiBsb2cgZmlsZSB+cyB3aXRoIGVycm9yIH5zIiwgW05hbWUsIGZpbGU6Zm9ybWF0X2Vycm9yKFJlYXNvbildKSwKICAgICAgICAgICAgICAgICAgICBTdGF0ZTAjc3RhdGV7ZmxhcD10cnVlfQogICAgICAgICAgICBlbmQsCiAgICAgICAgICAgIHtvaywgU3RhdGV9CiAgICBlbmQuCgolJSBAcHJpdmF0ZQpoYW5kbGVfY2FsbCh7c2V0X2xvZ2xldmVsLCBMZXZlbH0sICNzdGF0ZXtuYW1lPUlkZW50fSA9IFN0YXRlKSAtPgogICAgY2FzZSB2YWxpZGF0ZV9sb2dsZXZlbChMZXZlbCkgb2YKICAgICAgICBmYWxzZSAtPgogICAgICAgICAgICB7b2ssIHtlcnJvciwgYmFkX2xvZ2xldmVsfSwgU3RhdGV9OwogICAgICAgIExldmVscyAtPgogICAgICAgICAgICA/SU5UX0xPRyhub3RpY2UsICJDaGFuZ2VkIGxvZ2xldmVsIG9mIH5zIHRvIH5wIiwgW0lkZW50LCBMZXZlbF0pLAogICAgICAgICAgICB7b2ssIG9rLCBTdGF0ZSNzdGF0ZXtsZXZlbD1MZXZlbHN9fQogICAgZW5kOwpoYW5kbGVfY2FsbChnZXRfbG9nbGV2ZWwsICNzdGF0ZXtsZXZlbD1MZXZlbH0gPSBTdGF0ZSkgLT4KICAgIHtvaywgTGV2ZWwsIFN0YXRlfTsKaGFuZGxlX2NhbGwoX1JlcXVlc3QsIFN0YXRlKSAtPgogICAge29rLCBvaywgU3RhdGV9LgoKJSUgQHByaXZhdGUKaGFuZGxlX2V2ZW50KHtsb2csIE1lc3NhZ2V9LAogICAgI3N0YXRle25hbWU9TmFtZSwgbGV2ZWw9TCxmb3JtYXR0ZXI9Rm9ybWF0dGVyLGZvcm1hdHRlcl9jb25maWc9Rm9ybWF0Q29uZmlnfSA9IFN0YXRlKSAtPgogICAgY2FzZSBsYWdlcl91dGlsOmlzX2xvZ2dhYmxlKE1lc3NhZ2UsTCx7bGFnZXJfZmlsZV9iYWNrZW5kLCBOYW1lfSkgb2YKICAgICAgICB0cnVlIC0+CiAgICAgICAgICAgIHtvayx3cml0ZShTdGF0ZSwgbGFnZXJfbXNnOnRpbWVzdGFtcChNZXNzYWdlKSwgbGFnZXJfbXNnOnNldmVyaXR5X2FzX2ludChNZXNzYWdlKSwgRm9ybWF0dGVyOmZvcm1hdChNZXNzYWdlLEZvcm1hdENvbmZpZykpIH07CiAgICAgICAgZmFsc2UgLT4KICAgICAgICAgICAge29rLCBTdGF0ZX0KICAgIGVuZDsKaGFuZGxlX2V2ZW50KF9FdmVudCwgU3RhdGUpIC0+CiAgICB7b2ssIFN0YXRlfS4KCiUlIEBwcml2YXRlCmhhbmRsZV9pbmZvKHtyb3RhdGUsIEZpbGV9LCAjc3RhdGV7bmFtZT1GaWxlLGNvdW50PUNvdW50LGRhdGU9RGF0ZX0gPSBTdGF0ZSkgLT4KICAgIGxhZ2VyX3V0aWw6cm90YXRlX2xvZ2ZpbGUoRmlsZSwgQ291bnQpLAogICAgc2NoZWR1bGVfcm90YXRpb24oRmlsZSwgRGF0ZSksCiAgICB7b2ssIFN0YXRlfTsKaGFuZGxlX2luZm8oX0luZm8sIFN0YXRlKSAtPgogICAge29rLCBTdGF0ZX0uCgolJSBAcHJpdmF0ZQp0ZXJtaW5hdGUoX1JlYXNvbiwgI3N0YXRle2ZkPUZEfSkgLT4KICAgICUlIGZsdXNoIGFuZCBjbG9zZSBhbnkgZmlsZSBoYW5kbGVzCiAgICBfID0gZmlsZTpkYXRhc3luYyhGRCksCiAgICBfID0gZmlsZTpjbG9zZShGRCksCiAgICBvay4KCiUlIEBwcml2YXRlCmNvZGVfY2hhbmdlKF9PbGRWc24sIFN0YXRlLCBfRXh0cmEpIC0+CiAgICB7b2ssIFN0YXRlfS4KCiUlIEBwcml2YXRlIGNvbnZlcnQgdGhlIGNvbmZpZyBpbnRvIGEgZ2VuX2V2ZW50IGhhbmRsZXIgSUQKY29uZmlnX3RvX2lkKHtOYW1lLF9TZXZlcml0eX0pIHdoZW4gaXNfbGlzdChOYW1lKSAtPgogICAgez9NT0RVTEUsIE5hbWV9Owpjb25maWdfdG9faWQoe05hbWUsX1NldmVyaXR5LF9TaXplLF9Sb3RhdGlvbixfQ291bnR9KSAtPgogICAgez9NT0RVTEUsIE5hbWV9Owpjb25maWdfdG9faWQoW3tOYW1lLF9TZXZlcml0eSxfU2l6ZSxfUm90YXRpb24sX0NvdW50fSwgX0Zvcm1hdF0pIC0+CiAgICB7P01PRFVMRSwgTmFtZX07CmNvbmZpZ190b19pZChbe05hbWUsX1NldmVyaXR5fSwgX0Zvcm1hdF0pIHdoZW4gaXNfbGlzdChOYW1lKSAtPgogICAgez9NT0RVTEUsIE5hbWV9Owpjb25maWdfdG9faWQoQ29uZmlnKSAtPgogICAgY2FzZSBwcm9wbGlzdHM6Z2V0X3ZhbHVlKGZpbGUsIENvbmZpZykgb2YKICAgICAgICB1bmRlZmluZWQgLT4KICAgICAgICAgICAgZXJsYW5nOmVycm9yKG5vX2ZpbGUpOwogICAgICAgIEZpbGUgLT4KICAgICAgICAgICAgez9NT0RVTEUsIEZpbGV9CiAgICBlbmQuCgoKd3JpdGUoI3N0YXRle25hbWU9TmFtZSwgZmQ9RkQsIGlub2RlPUlub2RlLCBmbGFwPUZsYXAsIHNpemU9Um90U2l6ZSwKICAgICAgICBjb3VudD1Db3VudH0gPSBTdGF0ZSwgVGltZXN0YW1wLCBMZXZlbCwgTXNnKSAtPgogICAgTGFzdENoZWNrID0gdGltZXI6bm93X2RpZmYoVGltZXN0YW1wLCBTdGF0ZSNzdGF0ZS5sYXN0X2NoZWNrKSBkaXYgMTAwMCwKICAgIGNhc2UgTGFzdENoZWNrID49IFN0YXRlI3N0YXRlLmNoZWNrX2ludGVydmFsIG9yZWxzZSBGRCA9PSB1bmRlZmluZWQgb2YKICAgICAgICB0cnVlIC0+CiAgICAgICAgICAgICUlIG5lZWQgdG8gY2hlY2sgZm9yIHJvdGF0aW9uCiAgICAgICAgICAgIGNhc2UgbGFnZXJfdXRpbDplbnN1cmVfbG9nZmlsZShOYW1lLCBGRCwgSW5vZGUsIHtTdGF0ZSNzdGF0ZS5zeW5jX3NpemUsIFN0YXRlI3N0YXRlLnN5bmNfaW50ZXJ2YWx9KSBvZgogICAgICAgICAgICAgICAge29rLCB7XywgXywgU2l6ZX19IHdoZW4gUm90U2l6ZSAvPSAwLCBTaXplID4gUm90U2l6ZSAtPgogICAgICAgICAgICAgICAgICAgIGxhZ2VyX3V0aWw6cm90YXRlX2xvZ2ZpbGUoTmFtZSwgQ291bnQpLAogICAgICAgICAgICAgICAgICAgICUlIGdvIGFyb3VuZCB0aGUgbG9vcCBhZ2Fpbiwgd2UnbGwgZG8gYW5vdGhlciByb3RhdGlvbiBjaGVjayBhbmQgaGl0IHRoZSBuZXh0IGNsYXVzZSBoZXJlCiAgICAgICAgICAgICAgICAgICAgd3JpdGUoU3RhdGUsIFRpbWVzdGFtcCwgTGV2ZWwsIE1zZyk7CiAgICAgICAgICAgICAgICB7b2ssIHtOZXdGRCwgTmV3SW5vZGUsIF99fSAtPgogICAgICAgICAgICAgICAgICAgICUlIHVwZGF0ZSBvdXIgbGFzdCBjaGVjayBhbmQgdHJ5IGFnYWluCiAgICAgICAgICAgICAgICAgICAgZG9fd3JpdGUoU3RhdGUjc3RhdGV7bGFzdF9jaGVjaz1UaW1lc3RhbXAsIGZkPU5ld0ZELCBpbm9kZT1OZXdJbm9kZX0sIExldmVsLCBNc2cpOwogICAgICAgICAgICAgICAge2Vycm9yLCBSZWFzb259IC0+CiAgICAgICAgICAgICAgICAgICAgY2FzZSBGbGFwIG9mCiAgICAgICAgICAgICAgICAgICAgICAgIHRydWUgLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlOwogICAgICAgICAgICAgICAgICAgICAgICBfIC0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/SU5UX0xPRyhlcnJvciwgIkZhaWxlZCB0byByZW9wZW4gbG9nIGZpbGUgfnMgd2l0aCBlcnJvciB+cyIsIFtOYW1lLCBmaWxlOmZvcm1hdF9lcnJvcihSZWFzb24pXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZSNzdGF0ZXtmbGFwPXRydWV9CiAgICAgICAgICAgICAgICAgICAgZW5kCiAgICAgICAgICAgIGVuZDsKICAgICAgICBmYWxzZSAtPgogICAgICAgICAgICBkb193cml0ZShTdGF0ZSwgTGV2ZWwsIE1zZykKICAgIGVuZC4KCmRvX3dyaXRlKCNzdGF0ZXtmZD1GRCwgbmFtZT1OYW1lLCBmbGFwPUZsYXB9ID0gU3RhdGUsIExldmVsLCBNc2cpIC0+CiAgICAlJSBkZWxheWVkX3dyaXRlIGRvZXNuJ3QgcmVwb3J0IGVycm9ycwogICAgXyA9IGZpbGU6d3JpdGUoRkQsIHVuaWNvZGU6Y2hhcmFjdGVyc190b19iaW5hcnkoTXNnKSksCiAgICB7bWFzaywgU3luY0xldmVsfSA9IFN0YXRlI3N0YXRlLnN5bmNfb24sCiAgICBjYXNlIChMZXZlbCBiYW5kIFN5bmNMZXZlbCkgLz0gMCBvZgogICAgICAgIHRydWUgLT4KICAgICAgICAgICAgJSUgZm9yY2UgYSBzeW5jIG9uIGFueSBtZXNzYWdlIHRoYXQgbWF0Y2hlcyB0aGUgJ3N5bmNfb24nIGJpdG1hc2sKICAgICAgICAgICAgRmxhcDIgPSBjYXNlIGZpbGU6ZGF0YXN5bmMoRkQpIG9mCiAgICAgICAgICAgICAgICB7ZXJyb3IsIFJlYXNvbjJ9IHdoZW4gRmxhcCA9PSBmYWxzZSAtPgogICAgICAgICAgICAgICAgICAgID9JTlRfTE9HKGVycm9yLCAiRmFpbGVkIHRvIHdyaXRlIGxvZyBtZXNzYWdlIHRvIGZpbGUgfnM6IH5zIiwKICAgICAgICAgICAgICAgICAgICAgICAgW05hbWUsIGZpbGU6Zm9ybWF0X2Vycm9yKFJlYXNvbjIpXSksCiAgICAgICAgICAgICAgICAgICAgdHJ1ZTsKICAgICAgICAgICAgICAgIG9rIC0+CiAgICAgICAgICAgICAgICAgICAgZmFsc2U7CiAgICAgICAgICAgICAgICBfIC0+CiAgICAgICAgICAgICAgICAgICAgRmxhcAogICAgICAgICAgICBlbmQsCiAgICAgICAgICAgIFN0YXRlI3N0YXRle2ZsYXA9RmxhcDJ9OwogICAgICAgIF8gLT4gCiAgICAgICAgICAgIFN0YXRlCiAgICBlbmQuCgp2YWxpZGF0ZV9sb2dsZXZlbChMZXZlbCkgLT4KICAgIHRyeSBsYWdlcl91dGlsOmNvbmZpZ190b19tYXNrKExldmVsKSBvZgogICAgICAgIExldmVscyAtPgogICAgICAgICAgICBMZXZlbHMKICAgIGNhdGNoCiAgICAgICAgXzpfIC0+CiAgICAgICAgICAgIGZhbHNlCiAgICBlbmQuCgp2YWxpZGF0ZV9sb2dmaWxlX3Byb3BsaXN0KExpc3QpIC0+CiAgICB0cnkgdmFsaWRhdGVfbG9nZmlsZV9wcm9wbGlzdChMaXN0LCBbXSkgb2YKICAgICAgICBSZXMgLT4KICAgICAgICAgICAgY2FzZSBwcm9wbGlzdHM6Z2V0X3ZhbHVlKGZpbGUsIFJlcykgb2YKICAgICAgICAgICAgICAgIHVuZGVmaW5lZCAtPgogICAgICAgICAgICAgICAgICAgID9JTlRfTE9HKGVycm9yLCAiTWlzc2luZyByZXF1aXJlZCBmaWxlIG9wdGlvbiIsIFtdKSwKICAgICAgICAgICAgICAgICAgICBmYWxzZTsKICAgICAgICAgICAgICAgIF9GaWxlIC0+CiAgICAgICAgICAgICAgICAgICAgJSUgbWVyZ2Ugd2l0aCB0aGUgZGVmYXVsdCBvcHRpb25zCiAgICAgICAgICAgICAgICAgICAge29rLCBEZWZhdWx0Um90YXRpb25EYXRlfSA9IGxhZ2VyX3V0aWw6cGFyc2Vfcm90YXRpb25fZGF0ZV9zcGVjKD9ERUZBVUxUX1JPVEFUSU9OX0RBVEUpLAogICAgICAgICAgICAgICAgICAgIGxpc3RzOmtleW1lcmdlKDEsIGxpc3RzOnNvcnQoUmVzKSwgbGlzdHM6c29ydChbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7bGV2ZWwsIHZhbGlkYXRlX2xvZ2xldmVsKD9ERUZBVUxUX0xPR19MRVZFTCl9LCB7ZGF0ZSwgRGVmYXVsdFJvdGF0aW9uRGF0ZX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c2l6ZSwgP0RFRkFVTFRfUk9UQVRJT05fU0laRX0sIHtjb3VudCwgP0RFRkFVTFRfUk9UQVRJT05fQ09VTlR9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAge3N5bmNfb24sIHZhbGlkYXRlX2xvZ2xldmVsKD9ERUZBVUxUX1NZTkNfTEVWRUwpfSwge3N5bmNfaW50ZXJ2YWwsID9ERUZBVUxUX1NZTkNfSU5URVJWQUx9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAge3N5bmNfc2l6ZSwgP0RFRkFVTFRfU1lOQ19TSVpFfSwge2NoZWNrX2ludGVydmFsLCA/REVGQVVMVF9DSEVDS19JTlRFUlZBTH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Zm9ybWF0dGVyLCBsYWdlcl9kZWZhdWx0X2Zvcm1hdHRlcn0sIHtmb3JtYXR0ZXJfY29uZmlnLCBbXX0KICAgICAgICAgICAgICAgICAgICAgICAgXSkpCiAgICAgICAgICAgIGVuZAogICAgY2F0Y2gKICAgICAgICB7YmFkX2NvbmZpZywgTXNnLCBWYWx1ZX0gLT4KICAgICAgICAgICAgP0lOVF9MT0coZXJyb3IsICJ+cyB+cCBmb3IgZmlsZSB+cCIsCiAgICAgICAgICAgICAgICBbTXNnLCBWYWx1ZSwgcHJvcGxpc3RzOmdldF92YWx1ZShmaWxlLCBMaXN0KV0pLAogICAgICAgICAgICBmYWxzZQogICAgZW5kLgoKdmFsaWRhdGVfbG9nZmlsZV9wcm9wbGlzdChbXSwgQWNjKSAtPgogICAgQWNjOwp2YWxpZGF0ZV9sb2dmaWxlX3Byb3BsaXN0KFt7ZmlsZSwgRmlsZX18VGFpbF0sIEFjYykgLT4KICAgICUlIGlzIHRoZXJlIGFueSByZWFzb25hYmxlIHZhbGlkYXRpb24gd2UgY2FuIGRvIGhlcmU/CiAgICB2YWxpZGF0ZV9sb2dmaWxlX3Byb3BsaXN0KFRhaWwsIFt7ZmlsZSwgRmlsZX18QWNjXSk7CnZhbGlkYXRlX2xvZ2ZpbGVfcHJvcGxpc3QoW3tsZXZlbCwgTGV2ZWx9fFRhaWxdLCBBY2MpIC0+CiAgICBjYXNlIHZhbGlkYXRlX2xvZ2xldmVsKExldmVsKSBvZgogICAgICAgIGZhbHNlIC0+CiAgICAgICAgICAgIHRocm93KHtiYWRfY29uZmlnLCAiSW52YWxpZCBsb2dsZXZlbCIsIExldmVsfSk7CiAgICAgICAgUmVzIC0+CiAgICAgICAgICAgIHZhbGlkYXRlX2xvZ2ZpbGVfcHJvcGxpc3QoVGFpbCwgW3tsZXZlbCwgUmVzfXxBY2NdKQogICAgZW5kOwp2YWxpZGF0ZV9sb2dmaWxlX3Byb3BsaXN0KFt7c2l6ZSwgU2l6ZX18VGFpbF0sIEFjYykgLT4KICAgIGNhc2UgU2l6ZSBvZgogICAgICAgIFMgd2hlbiBpc19pbnRlZ2VyKFMpLCBTID49IDAgLT4KICAgICAgICAgICAgdmFsaWRhdGVfbG9nZmlsZV9wcm9wbGlzdChUYWlsLCBbe3NpemUsIFNpemV9fEFjY10pOwogICAgICAgIF8gLT4KICAgICAgICAgICAgdGhyb3coe2JhZF9jb25maWcsICJJbnZhbGlkIHJvdGF0aW9uIHNpemUiLCBTaXplfSkKICAgIGVuZDsKdmFsaWRhdGVfbG9nZmlsZV9wcm9wbGlzdChbe2NvdW50LCBDb3VudH18VGFpbF0sIEFjYykgLT4KICAgIGNhc2UgQ291bnQgb2YKICAgICAgICBDIHdoZW4gaXNfaW50ZWdlcihDKSwgQyA+PSAwIC0+CiAgICAgICAgICAgIHZhbGlkYXRlX2xvZ2ZpbGVfcHJvcGxpc3QoVGFpbCwgW3tjb3VudCwgQ291bnR9fEFjY10pOwogICAgICAgIF8gLT4KICAgICAgICAgICAgdGhyb3coe2JhZF9jb25maWcsICJJbnZhbGlkIHJvdGF0aW9uIGNvdW50IiwgQ291bnR9KQogICAgZW5kOwp2YWxpZGF0ZV9sb2dmaWxlX3Byb3BsaXN0KFt7ZGF0ZSwgRGF0ZX18VGFpbF0sIEFjYykgLT4KICAgIGNhc2UgbGFnZXJfdXRpbDpwYXJzZV9yb3RhdGlvbl9kYXRlX3NwZWMoRGF0ZSkgb2YKICAgICAgICB7b2ssIFNwZWN9IC0+CiAgICAgICAgICAgIHZhbGlkYXRlX2xvZ2ZpbGVfcHJvcGxpc3QoVGFpbCwgW3tkYXRlLCBTcGVjfXxBY2NdKTsKICAgICAgICB7ZXJyb3IsIF99IHdoZW4gRGF0ZSA9PSAiIiAtPgogICAgICAgICAgICAlJSBsZWdhY3kgY29uZmlnIGFsbG93ZWQgYmxhbmtzCiAgICAgICAgICAgIHZhbGlkYXRlX2xvZ2ZpbGVfcHJvcGxpc3QoVGFpbCwgQWNjKTsKICAgICAgICB7ZXJyb3IsIF99IC0+CiAgICAgICAgICAgIHRocm93KHtiYWRfY29uZmlnLCAiSW52YWxpZCByb3RhdGlvbiBkYXRlIiwgRGF0ZX0pCiAgICBlbmQ7CnZhbGlkYXRlX2xvZ2ZpbGVfcHJvcGxpc3QoW3tzeW5jX2ludGVydmFsLCBTeW5jSW50fXxUYWlsXSwgQWNjKSAtPgogICAgY2FzZSBTeW5jSW50IG9mCiAgICAgICAgVmFsIHdoZW4gaXNfaW50ZWdlcihWYWwpLCBWYWwgPj0gMCAtPgogICAgICAgICAgICB2YWxpZGF0ZV9sb2dmaWxlX3Byb3BsaXN0KFRhaWwsIFt7c3luY19pbnRlcnZhbCwgVmFsfXxBY2NdKTsKICAgICAgICBfIC0+CiAgICAgICAgICAgIHRocm93KHtiYWRfY29uZmlnLCAiSW52YWxpZCBzeW5jIGludGVydmFsIiwgU3luY0ludH0pCiAgICBlbmQ7CnZhbGlkYXRlX2xvZ2ZpbGVfcHJvcGxpc3QoW3tzeW5jX3NpemUsIFN5bmNTaXplfXxUYWlsXSwgQWNjKSAtPgogICAgY2FzZSBTeW5jU2l6ZSBvZgogICAgICAgIFZhbCB3aGVuIGlzX2ludGVnZXIoVmFsKSwgVmFsID49IDAgLT4KICAgICAgICAgICAgdmFsaWRhdGVfbG9nZmlsZV9wcm9wbGlzdChUYWlsLCBbe3N5bmNfc2l6ZSwgVmFsfXxBY2NdKTsKICAgICAgICBfIC0+CiAgICAgICAgICAgIHRocm93KHtiYWRfY29uZmlnLCAiSW52YWxpZCBzeW5jIHNpemUiLCBTeW5jU2l6ZX0pCiAgICBlbmQ7CnZhbGlkYXRlX2xvZ2ZpbGVfcHJvcGxpc3QoW3tjaGVja19pbnRlcnZhbCwgQ2hlY2tJbnR9fFRhaWxdLCBBY2MpIC0+CiAgICBjYXNlIENoZWNrSW50IG9mCiAgICAgICAgVmFsIHdoZW4gaXNfaW50ZWdlcihWYWwpLCBWYWwgPj0gMCAtPgogICAgICAgICAgICB2YWxpZGF0ZV9sb2dmaWxlX3Byb3BsaXN0KFRhaWwsIFt7Y2hlY2tfaW50ZXJ2YWwsIFZhbH18QWNjXSk7CiAgICAgICAgYWx3YXlzIC0+CiAgICAgICAgICAgIHZhbGlkYXRlX2xvZ2ZpbGVfcHJvcGxpc3QoVGFpbCwgW3tjaGVja19pbnRlcnZhbCwgMH18QWNjXSk7CiAgICAgICAgXyAtPgogICAgICAgICAgICB0aHJvdyh7YmFkX2NvbmZpZywgIkludmFsaWQgY2hlY2sgaW50ZXJ2YWwiLCBDaGVja0ludH0pCiAgICBlbmQ7CnZhbGlkYXRlX2xvZ2ZpbGVfcHJvcGxpc3QoW3tzeW5jX29uLCBMZXZlbH18VGFpbF0sIEFjYykgLT4KICAgIGNhc2UgdmFsaWRhdGVfbG9nbGV2ZWwoTGV2ZWwpIG9mCiAgICAgICAgZmFsc2UgLT4KICAgICAgICAgICAgdGhyb3coe2JhZF9jb25maWcsICJJbnZhbGlkIHN5bmMgb24gbGV2ZWwiLCBMZXZlbH0pOwogICAgICAgIFJlcyAtPgogICAgICAgICAgICB2YWxpZGF0ZV9sb2dmaWxlX3Byb3BsaXN0KFRhaWwsIFt7c3luY19vbiwgUmVzfXxBY2NdKQogICAgZW5kOwp2YWxpZGF0ZV9sb2dmaWxlX3Byb3BsaXN0KFt7Zm9ybWF0dGVyLCBGbXR9fFRhaWxdLCBBY2MpIC0+CiAgICBjYXNlIGlzX2F0b20oRm10KSBvZgogICAgICAgIHRydWUgLT4KICAgICAgICAgICAgdmFsaWRhdGVfbG9nZmlsZV9wcm9wbGlzdChUYWlsLCBbe2Zvcm1hdHRlciwgRm10fXxBY2NdKTsKICAgICAgICBmYWxzZSAtPgogICAgICAgICAgICB0aHJvdyh7YmFkX2NvbmZpZywgIkludmFsaWQgZm9ybWF0dGVyIG1vZHVsZSIsIEZtdH0pCiAgICBlbmQ7CnZhbGlkYXRlX2xvZ2ZpbGVfcHJvcGxpc3QoW3tmb3JtYXR0ZXJfY29uZmlnLCBGbXRDZmd9fFRhaWxdLCBBY2MpIC0+CiAgICBjYXNlIGlzX2xpc3QoRm10Q2ZnKSBvZgogICAgICAgIHRydWUgLT4KICAgICAgICAgICAgdmFsaWRhdGVfbG9nZmlsZV9wcm9wbGlzdChUYWlsLCBbe2Zvcm1hdHRlcl9jb25maWcsIEZtdENmZ318QWNjXSk7CiAgICAgICAgZmFsc2UgLT4KICAgICAgICAgICAgdGhyb3coe2JhZF9jb25maWcsICJJbnZhbGlkIGZvcm1hdHRlciBjb25maWciLCBGbXRDZmd9KQogICAgZW5kOwp2YWxpZGF0ZV9sb2dmaWxlX3Byb3BsaXN0KFtPdGhlcnxfVGFpbF0sIF9BY2MpIC0+CiAgICB0aHJvdyh7YmFkX2NvbmZpZywgIkludmFsaWQgb3B0aW9uIiwgT3RoZXJ9KS4KCnNjaGVkdWxlX3JvdGF0aW9uKF8sIHVuZGVmaW5lZCkgLT4KICAgIG9rOwpzY2hlZHVsZV9yb3RhdGlvbihOYW1lLCBEYXRlKSAtPgogICAgZXJsYW5nOnNlbmRfYWZ0ZXIobGFnZXJfdXRpbDpjYWxjdWxhdGVfbmV4dF9yb3RhdGlvbihEYXRlKSAqIDEwMDAsIHNlbGYoKSwge3JvdGF0ZSwgTmFtZX0pLAogICAgb2suCgotaWZkZWYoVEVTVCkuCgpnZXRfbG9nbGV2ZWxfdGVzdCgpIC0+CiAgICB7b2ssIExldmVsLCBffSA9IGhhbmRsZV9jYWxsKGdldF9sb2dsZXZlbCwKICAgICAgICAjc3RhdGV7bmFtZT0iYmFyIiwgbGV2ZWw9bGFnZXJfdXRpbDpjb25maWdfdG9fbWFzayhpbmZvKSwgZmQ9MCwgaW5vZGU9MH0pLAogICAgP2Fzc2VydEVxdWFsKExldmVsLCBsYWdlcl91dGlsOmNvbmZpZ190b19tYXNrKGluZm8pKSwKICAgIHtvaywgTGV2ZWwyLCBffSA9IGhhbmRsZV9jYWxsKGdldF9sb2dsZXZlbCwKICAgICAgICAjc3RhdGV7bmFtZT0iZm9vIiwgbGV2ZWw9bGFnZXJfdXRpbDpjb25maWdfdG9fbWFzayh3YXJuaW5nKSwgZmQ9MCwgaW5vZGU9MH0pLAogICAgP2Fzc2VydEVxdWFsKExldmVsMiwgbGFnZXJfdXRpbDpjb25maWdfdG9fbWFzayh3YXJuaW5nKSkuCgpyb3RhdGlvbl90ZXN0XygpIC0+CiAgICB7Zm9yZWFjaCwKICAgICBmdW4oKSAtPgogICAgICAgICAgICAgW2ZpbGU6ZGVsZXRlKEYpfHxGIDwtIGZpbGVsaWI6d2lsZGNhcmQoInRlc3QubG9nKiIpXSwKICAgICAgICAgICAgIFN5bmNMZXZlbCA9IHZhbGlkYXRlX2xvZ2xldmVsKD9ERUZBVUxUX1NZTkNfTEVWRUwpLAogICAgICAgICAgICAgU3luY1NpemUgPSA/REVGQVVMVF9TWU5DX1NJWkUsCiAgICAgICAgICAgICBTeW5jSW50ZXJ2YWwgPSA/REVGQVVMVF9TWU5DX0lOVEVSVkFMLAogICAgICAgICAgICAgQ2hlY2tJbnRlcnZhbCA9IDAsICUlIGhhcmQgdG8gdGVzdCBkZWxheWVkIG1vZGUKCiAgICAgICAgICAgICAjc3RhdGV7bmFtZT0idGVzdC5sb2ciLCBsZXZlbD0/REVCVUcsIHN5bmNfb249U3luY0xldmVsLAogICAgICAgICAgICAgICAgICAgIHN5bmNfc2l6ZT1TeW5jU2l6ZSwgc3luY19pbnRlcnZhbD1TeW5jSW50ZXJ2YWwsIGNoZWNrX2ludGVydmFsPUNoZWNrSW50ZXJ2YWx9CgogICAgIGVuZCwKICAgICBmdW4oXykgLT4KICAgICAgICAgICAgIFtmaWxlOmRlbGV0ZShGKXx8RiA8LSBmaWxlbGliOndpbGRjYXJkKCJ0ZXN0LmxvZyoiKV0KICAgICBlbmQsCiAgICAgW2Z1bihEZWZhdWx0U3RhdGUgPSAjc3RhdGV7c3luY19zaXplPVN5bmNTaXplLCBzeW5jX2ludGVydmFsID0gU3luY0ludGVydmFsfSkgLT4KICAgICAgICAgIHsiRXh0ZXJuYWwgcm90YXRpb24gc2hvdWxkIHdvcmsiLAogICAgICAgICAgIGZ1bigpIC0+CiAgICAgICAgICAgICAgICAgICB7b2ssIHtGRCwgSW5vZGUsIF99fSA9IGxhZ2VyX3V0aWw6b3Blbl9sb2dmaWxlKCJ0ZXN0LmxvZyIsIHtTeW5jU2l6ZSwgU3luY0ludGVydmFsfSksCiAgICAgICAgICAgICAgICAgICBTdGF0ZTAgPSBEZWZhdWx0U3RhdGUjc3RhdGV7ZmQ9RkQsIGlub2RlPUlub2RlfSwKICAgICAgICAgICAgICAgICAgID9hc3NlcnRNYXRjaCgjc3RhdGV7bmFtZT0idGVzdC5sb2ciLCBsZXZlbD0/REVCVUcsIGZkPUZELCBpbm9kZT1Jbm9kZX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGUoU3RhdGUwLCBvczp0aW1lc3RhbXAoKSwgP0RFQlVHLCAiaGVsbG8gd29ybGQiKSksCiAgICAgICAgICAgICAgICAgICBmaWxlOmRlbGV0ZSgidGVzdC5sb2ciKSwKICAgICAgICAgICAgICAgICAgIFJlc3VsdCA9IHdyaXRlKFN0YXRlMCwgb3M6dGltZXN0YW1wKCksID9ERUJVRywgImhlbGxvIHdvcmxkIiksCiAgICAgICAgICAgICAgICAgICAlJSBhc3NlcnQgZmlsZSBoYXMgY2hhbmdlZAogICAgICAgICAgICAgICAgICAgP2Fzc2VydCgjc3RhdGV7bmFtZT0idGVzdC5sb2ciLCBsZXZlbD0/REVCVUcsIGZkPUZELCBpbm9kZT1Jbm9kZX0gPS89IFJlc3VsdCksCiAgICAgICAgICAgICAgICAgICA/YXNzZXJ0TWF0Y2goI3N0YXRle25hbWU9InRlc3QubG9nIiwgbGV2ZWw9P0RFQlVHfSwgUmVzdWx0KSwKICAgICAgICAgICAgICAgICAgIGZpbGU6cmVuYW1lKCJ0ZXN0LmxvZyIsICJ0ZXN0LmxvZy4xIiksCiAgICAgICAgICAgICAgICAgICBSZXN1bHQyID0gd3JpdGUoUmVzdWx0LCBvczp0aW1lc3RhbXAoKSwgP0RFQlVHLCAiaGVsbG8gd29ybGQiKSwKICAgICAgICAgICAgICAgICAgICUlIGFzc2VydCBmaWxlIGhhcyBjaGFuZ2VkCiAgICAgICAgICAgICAgICAgICA/YXNzZXJ0KFJlc3VsdCA9Lz0gUmVzdWx0MiksCiAgICAgICAgICAgICAgICAgICA/YXNzZXJ0TWF0Y2goI3N0YXRle25hbWU9InRlc3QubG9nIiwgbGV2ZWw9P0RFQlVHfSwgUmVzdWx0MiksCiAgICAgICAgICAgICAgICAgICBvawogICAgICAgICAgIGVuZH0KICAgICAgZW5kLAogICAgICBmdW4oRGVmYXVsdFN0YXRlID0gI3N0YXRle3N5bmNfc2l6ZT1TeW5jU2l6ZSwgc3luY19pbnRlcnZhbCA9IFN5bmNJbnRlcnZhbH0pIC0+CiAgICAgICAgICB7IkludGVybmFsIHJvdGF0aW9uIGFuZCBkZWxheWVkIHdyaXRlIiwKICAgICAgICAgICBmdW4oKSAtPgogICAgICAgICAgICAgICAgICAgQ2hlY2tJbnRlcnZhbCA9IDMwMDAsICUgMyBzZWMKICAgICAgICAgICAgICAgICAgIFJvdGF0aW9uU2l6ZSA9IDE1LAogICAgICAgICAgICAgICAgICAgUHJldmlvdXNDaGVjayA9IG9zOnRpbWVzdGFtcCgpLAoKICAgICAgICAgICAgICAgICAgIHtvaywge0ZELCBJbm9kZSwgX319ID0gbGFnZXJfdXRpbDpvcGVuX2xvZ2ZpbGUoInRlc3QubG9nIiwge1N5bmNTaXplLCBTeW5jSW50ZXJ2YWx9KSwKICAgICAgICAgICAgICAgICAgIFN0YXRlMCA9IERlZmF1bHRTdGF0ZSNzdGF0ZXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmQ9RkQsIGlub2RlPUlub2RlLCBzaXplPVJvdGF0aW9uU2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tfaW50ZXJ2YWw9Q2hlY2tJbnRlcnZhbCwgbGFzdF9jaGVjaz1QcmV2aW91c0NoZWNrfSwKCiAgICAgICAgICAgICAgICAgICAlJSBuZXcgbWVzc2FnZSB3aXRoaW4gY2hlY2sgaW50ZXJ2YWwgd2l0aCBzeW5jX29uIGxldmVsCiAgICAgICAgICAgICAgICAgICBNc2cxVGltZXN0YW1wID0gYWRkX3NlY3MoUHJldmlvdXNDaGVjaywgMSksCiAgICAgICAgICAgICAgICAgICBTdGF0ZTAgPSBTdGF0ZTEgPSB3cml0ZShTdGF0ZTAsIE1zZzFUaW1lc3RhbXAsID9FUlJPUiwgImJpZyBiaWcgbWVzc2FnZSAxIiksCgogICAgICAgICAgICAgICAgICAgJSUgbmV3IG1lc3NhZ2Ugd2l0aGluIGNoZWNrIGludGVydmFsIHVuZGVyIHN5bmNfb24gbGV2ZWwKICAgICAgICAgICAgICAgICAgICUlIG5vdCB3cml0dGVuIHRvIGRpc2sgeWV0CiAgICAgICAgICAgICAgICAgICBNc2cyVGltZXN0YW1wID0gYWRkX3NlY3MoUHJldmlvdXNDaGVjaywgMiksCiAgICAgICAgICAgICAgICAgICBTdGF0ZTAgPSBTdGF0ZTIgPSB3cml0ZShTdGF0ZTEsIE1zZzJUaW1lc3RhbXAsID9ERUJVRywgImJ1ZmZlcmVkIG1lc3NhZ2UgMiIpLAoKICAgICAgICAgICAgICAgICAgICUlIGFsdGhvdWdoIGZpbGUgc2l6ZSBpcyBiaWcgZW5vdWdoLi4uCiAgICAgICAgICAgICAgICAgICB7b2ssIEZJbmZvfSA9IGZpbGU6cmVhZF9maWxlX2luZm8oInRlc3QubG9nIiksCiAgICAgICAgICAgICAgICAgICA/YXNzZXJ0KFJvdGF0aW9uU2l6ZSA8IEZJbmZvI2ZpbGVfaW5mby5zaXplKSwKICAgICAgICAgICAgICAgICAgICUlIC4uLm5vIHJvdGF0aW9uIHlldAogICAgICAgICAgICAgICAgICAgP2Fzc2VydEVxdWFsKFByZXZpb3VzQ2hlY2ssIFN0YXRlMiNzdGF0ZS5sYXN0X2NoZWNrKSwKICAgICAgICAgICAgICAgICAgID9hc3NlcnROb3QoZmlsZWxpYjppc19yZWd1bGFyKCJ0ZXN0LmxvZy4wIikpLAoKICAgICAgICAgICAgICAgICAgICUlIG5ldyBtZXNzYWdlIGFmdGVyIGNoZWNrIGludGVydmFsCiAgICAgICAgICAgICAgICAgICBNc2czVGltZXN0YW1wID0gYWRkX3NlY3MoUHJldmlvdXNDaGVjaywgNCksCiAgICAgICAgICAgICAgICAgICBfU3RhdGUzID0gd3JpdGUoU3RhdGUyLCBNc2czVGltZXN0YW1wLCA/REVCVUcsICJtZXNzYWdlIDMiKSwKCiAgICAgICAgICAgICAgICAgICAlJSByb3RhdGlvbiBoYXBwZW5lZAogICAgICAgICAgICAgICAgICAgP2Fzc2VydChmaWxlbGliOmlzX3JlZ3VsYXIoInRlc3QubG9nLjAiKSksCgogICAgICAgICAgICAgICAgICAge29rLCBCaW4xfSA9IGZpbGU6cmVhZF9maWxlKCJ0ZXN0LmxvZy4wIiksCiAgICAgICAgICAgICAgICAgICB7b2ssIEJpbjJ9ID0gZmlsZTpyZWFkX2ZpbGUoInRlc3QubG9nIiksCiAgICAgICAgICAgICAgICAgICAlJSBtZXNzYWdlIDEtMyB3cml0dGVuIHRvIGZpbGUKICAgICAgICAgICAgICAgICAgID9hc3NlcnRFcXVhbCg8PCJiaWcgYmlnIG1lc3NhZ2UgMWJ1ZmZlcmVkIG1lc3NhZ2UgMiI+PiwgQmluMSksCiAgICAgICAgICAgICAgICAgICAlJSBtZXNzYWdlIDQgYnVmZmVyZWQsIG5vdCB5ZXQgd3JpdHRlbiB0byBmaWxlCiAgICAgICAgICAgICAgICAgICA/YXNzZXJ0RXF1YWwoPDwiIj4+LCBCaW4yKSwKICAgICAgICAgICAgICAgICAgIG9rCiAgICAgICAgICAgZW5kfQogICAgICBlbmQKICAgICBdfS4KCmFkZF9zZWNzKHtNZWdhLCBTZWNzLCBNaWNyb30sIEFkZCkgLT4KICAgIE5ld1NlY3MgPSBTZWNzICsgQWRkLAogICAge01lZ2EgKyBOZXdTZWNzIGRpdiAxMDAwMDAwMCwgTmV3U2VjcyByZW0gMTAwMDAwMDAsIE1pY3JvfS4KCmZpbGVzeXN0ZW1fdGVzdF8oKSAtPgogICAge2ZvcmVhY2gsCiAgICAgICAgZnVuKCkgLT4KICAgICAgICAgICAgICAgIGZpbGU6d3JpdGVfZmlsZSgidGVzdC5sb2ciLCAiIiksCiAgICAgICAgICAgICAgICBlcnJvcl9sb2dnZXI6dHR5KGZhbHNlKSwKICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uOmxvYWQobGFnZXIpLAogICAgICAgICAgICAgICAgYXBwbGljYXRpb246c2V0X2VudihsYWdlciwgaGFuZGxlcnMsIFt7bGFnZXJfdGVzdF9iYWNrZW5kLCBpbmZvfV0pLAogICAgICAgICAgICAgICAgYXBwbGljYXRpb246c2V0X2VudihsYWdlciwgZXJyb3JfbG9nZ2VyX3JlZGlyZWN0LCBmYWxzZSksCiAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbjpzZXRfZW52KGxhZ2VyLCBhc3luY190aHJlc2hvbGQsIHVuZGVmaW5lZCksCiAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbjpzdGFydChsYWdlcikKICAgICAgICBlbmQsCiAgICAgICAgZnVuKF8pIC0+CiAgICAgICAgICAgICAgICBmaWxlOmRlbGV0ZSgidGVzdC5sb2ciKSwKICAgICAgICAgICAgICAgIGZpbGU6ZGVsZXRlKCJ0ZXN0LmxvZy4wIiksCiAgICAgICAgICAgICAgICBmaWxlOmRlbGV0ZSgidGVzdC5sb2cuMSIpLAogICAgICAgICAgICAgICAgYXBwbGljYXRpb246c3RvcChsYWdlciksCiAgICAgICAgICAgICAgICBlcnJvcl9sb2dnZXI6dHR5KHRydWUpCiAgICAgICAgZW5kLAogICAgICAgIFsKICAgICAgICAgICAgeyJ1bmRlciBub3JtYWwgY2lyY3Vtc3RhbmNlcywgZmlsZSBzaG91bGQgYmUgb3BlbmVkIiwKICAgICAgICAgICAgICAgIGZ1bigpIC0+CiAgICAgICAgICAgICAgICAgICAgICAgIGdlbl9ldmVudDphZGRfaGFuZGxlcihsYWdlcl9ldmVudCwgbGFnZXJfZmlsZV9iYWNrZW5kLCBbeyJ0ZXN0LmxvZyIsIGluZm99LCB7bGFnZXJfZGVmYXVsdF9mb3JtYXR0ZXJ9XSksCiAgICAgICAgICAgICAgICAgICAgICAgIGxhZ2VyOmxvZyhlcnJvciwgc2VsZigpLCAiVGVzdCBtZXNzYWdlIiksCiAgICAgICAgICAgICAgICAgICAgICAgIHtvaywgQmlufSA9IGZpbGU6cmVhZF9maWxlKCJ0ZXN0LmxvZyIpLAogICAgICAgICAgICAgICAgICAgICAgICBQaWQgPSBwaWRfdG9fbGlzdChzZWxmKCkpLAogICAgICAgICAgICAgICAgICAgICAgICA/YXNzZXJ0TWF0Y2goW18sIF8sICJbZXJyb3JdIiwgUGlkLCAiVGVzdCBtZXNzYWdlXG4iXSwgcmU6c3BsaXQoQmluLCAiICIsIFt7cmV0dXJuLCBsaXN0fSwge3BhcnRzLCA1fV0pKQogICAgICAgICAgICAgICAgZW5kCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsiZG9uJ3QgY2hva2Ugb24gdW5pY29kZSIsCiAgICAgICAgICAgICAgICBmdW4oKSAtPgogICAgICAgICAgICAgICAgICAgICAgICBnZW5fZXZlbnQ6YWRkX2hhbmRsZXIobGFnZXJfZXZlbnQsIGxhZ2VyX2ZpbGVfYmFja2VuZCwgW3sidGVzdC5sb2ciLCBpbmZvfSwge2xhZ2VyX2RlZmF1bHRfZm9ybWF0dGVyfV0pLAogICAgICAgICAgICAgICAgICAgICAgICBsYWdlcjpsb2coZXJyb3IsIHNlbGYoKSwifnRzIiwgW1syMDAxMywyNTk5MSwyNzk3OSwzNTc5N11dKSwKICAgICAgICAgICAgICAgICAgICAgICAge29rLCBCaW59ID0gZmlsZTpyZWFkX2ZpbGUoInRlc3QubG9nIiksCiAgICAgICAgICAgICAgICAgICAgICAgIFBpZCA9IHBpZF90b19saXN0KHNlbGYoKSksCiAgICAgICAgICAgICAgICAgICAgICAgID9hc3NlcnRNYXRjaChbXywgXywgIltlcnJvcl0iLCBQaWQsICBbMjI4LDE4NCwxNzMsMjMwLDE1MCwxMzUsMjMwLDE4MSwxMzksMjMyLDE3NSwxNDksICRcbl1dLCByZTpzcGxpdChCaW4sICIgIiwgW3tyZXR1cm4sIGxpc3R9LCB7cGFydHMsIDV9XSkpCiAgICAgICAgICAgICAgICBlbmQKICAgICAgICAgICAgfSwKICAgICAgICAgICAgeyJkb24ndCBjaG9rZSBvbiBsYXRpbi0xIiwKICAgICAgICAgICAgICAgIGZ1bigpIC0+CiAgICAgICAgICAgICAgICAgICAgICAgICUlIFhYWCBpZiB0aGlzIHRlc3QgZmFpbHMsIGNoZWNrIHRoYXQgdGhpcyBmaWxlIGlzIGVuY29kZWQgbGF0aW4tMSwgbm90IHV0Zi04IQogICAgICAgICAgICAgICAgICAgICAgICBnZW5fZXZlbnQ6YWRkX2hhbmRsZXIobGFnZXJfZXZlbnQsIGxhZ2VyX2ZpbGVfYmFja2VuZCwgW3sidGVzdC5sb2ciLCBpbmZvfSwge2xhZ2VyX2RlZmF1bHRfZm9ybWF0dGVyfV0pLAogICAgICAgICAgICAgICAgICAgICAgICBsYWdlcjpsb2coZXJyb3IsIHNlbGYoKSwifnRzIiwgWyJMxt3OTi3vIl0pLAogICAgICAgICAgICAgICAgICAgICAgICB7b2ssIEJpbn0gPSBmaWxlOnJlYWRfZmlsZSgidGVzdC5sb2ciKSwKICAgICAgICAgICAgICAgICAgICAgICAgUGlkID0gcGlkX3RvX2xpc3Qoc2VsZigpKSwKICAgICAgICAgICAgICAgICAgICAgICAgUmVzID0gcmU6c3BsaXQoQmluLCAiICIsIFt7cmV0dXJuLCBsaXN0fSwge3BhcnRzLCA1fV0pLAogICAgICAgICAgICAgICAgICAgICAgICA/YXNzZXJ0TWF0Y2goW18sIF8sICJbZXJyb3JdIiwgUGlkLCAgWzc2LDE5NSwxMzQsMTk1LDE1NywxOTUsMTQyLDc4LDQ1LDE5NSwxNzUsJFxuXV0sIFJlcykKICAgICAgICAgICAgICAgIGVuZAogICAgICAgICAgICB9LAogICAgICAgICAgICB7ImZpbGUgY2FuJ3QgYmUgb3BlbmVkIG9uIHN0YXJ0dXAgdHJpZ2dlcnMgYW4gZXJyb3IgbWVzc2FnZSIsCiAgICAgICAgICAgICAgICBmdW4oKSAtPgogICAgICAgICAgICAgICAgICAgICAgICB7b2ssIEZJbmZvfSA9IGZpbGU6cmVhZF9maWxlX2luZm8oInRlc3QubG9nIiksCiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGU6d3JpdGVfZmlsZV9pbmZvKCJ0ZXN0LmxvZyIsIEZJbmZvI2ZpbGVfaW5mb3ttb2RlID0gMH0pLAogICAgICAgICAgICAgICAgICAgICAgICBnZW5fZXZlbnQ6YWRkX2hhbmRsZXIobGFnZXJfZXZlbnQsIGxhZ2VyX2ZpbGVfYmFja2VuZCwgeyJ0ZXN0LmxvZyIsIGluZm8sIDEwKjEwMjQqMTAyNCwgIiREMCIsIDV9KSwKICAgICAgICAgICAgICAgICAgICAgICAgP2Fzc2VydEVxdWFsKDEsIGxhZ2VyX3Rlc3RfYmFja2VuZDpjb3VudCgpKSwKICAgICAgICAgICAgICAgICAgICAgICAge19MZXZlbCwgX1RpbWUsTWVzc2FnZSxfTWV0YWRhdGF9ID0gbGFnZXJfdGVzdF9iYWNrZW5kOnBvcCgpLAogICAgICAgICAgICAgICAgICAgICAgICA/YXNzZXJ0RXF1YWwoIkZhaWxlZCB0byBvcGVuIGxvZyBmaWxlIHRlc3QubG9nIHdpdGggZXJyb3IgcGVybWlzc2lvbiBkZW5pZWQiLCBsaXN0czpmbGF0dGVuKE1lc3NhZ2UpKQogICAgICAgICAgICAgICAgZW5kCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsiZmlsZSB0aGF0IGJlY29tZXMgdW5hdmFpbGFibGUgYXQgcnVudGltZSBzaG91bGQgdHJpZ2dlciBhbiBlcnJvciBtZXNzYWdlIiwKICAgICAgICAgICAgICAgIGZ1bigpIC0+CiAgICAgICAgICAgICAgICAgICAgICAgIGdlbl9ldmVudDphZGRfaGFuZGxlcihsYWdlcl9ldmVudCwgbGFnZXJfZmlsZV9iYWNrZW5kLCBbe2ZpbGUsICJ0ZXN0LmxvZyJ9LCB7bGV2ZWwsIGluZm99LCB7Y2hlY2tfaW50ZXJ2YWwsIDB9XSksCiAgICAgICAgICAgICAgICAgICAgICAgID9hc3NlcnRFcXVhbCgwLCBsYWdlcl90ZXN0X2JhY2tlbmQ6Y291bnQoKSksCiAgICAgICAgICAgICAgICAgICAgICAgIGxhZ2VyOmxvZyhlcnJvciwgc2VsZigpLCAiVGVzdCBtZXNzYWdlIiksCiAgICAgICAgICAgICAgICAgICAgICAgID9hc3NlcnRFcXVhbCgxLCBsYWdlcl90ZXN0X2JhY2tlbmQ6Y291bnQoKSksCiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGU6ZGVsZXRlKCJ0ZXN0LmxvZyIpLAogICAgICAgICAgICAgICAgICAgICAgICBmaWxlOndyaXRlX2ZpbGUoInRlc3QubG9nIiwgIiIpLAogICAgICAgICAgICAgICAgICAgICAgICB7b2ssIEZJbmZvfSA9IGZpbGU6cmVhZF9maWxlX2luZm8oInRlc3QubG9nIiksCiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGU6d3JpdGVfZmlsZV9pbmZvKCJ0ZXN0LmxvZyIsIEZJbmZvI2ZpbGVfaW5mb3ttb2RlID0gMH0pLAogICAgICAgICAgICAgICAgICAgICAgICBsYWdlcjpsb2coZXJyb3IsIHNlbGYoKSwgIlRlc3QgbWVzc2FnZSIpLAogICAgICAgICAgICAgICAgICAgICAgICA/YXNzZXJ0RXF1YWwoMywgbGFnZXJfdGVzdF9iYWNrZW5kOmNvdW50KCkpLAogICAgICAgICAgICAgICAgICAgICAgICBsYWdlcl90ZXN0X2JhY2tlbmQ6cG9wKCksCiAgICAgICAgICAgICAgICAgICAgICAgIGxhZ2VyX3Rlc3RfYmFja2VuZDpwb3AoKSwKICAgICAgICAgICAgICAgICAgICAgICAge19MZXZlbCwgX1RpbWUsIE1lc3NhZ2UsX01ldGFkYXRhfSA9IGxhZ2VyX3Rlc3RfYmFja2VuZDpwb3AoKSwKICAgICAgICAgICAgICAgICAgICAgICAgP2Fzc2VydEVxdWFsKCJGYWlsZWQgdG8gcmVvcGVuIGxvZyBmaWxlIHRlc3QubG9nIHdpdGggZXJyb3IgcGVybWlzc2lvbiBkZW5pZWQiLCBsaXN0czpmbGF0dGVuKE1lc3NhZ2UpKQogICAgICAgICAgICAgICAgZW5kCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsidW5hdmFpbGFibGUgZmlsZXMgdGhhdCBhcmUgZml4ZWQgYXQgcnVudGltZSBzaG91bGQgc3RhcnQgaGF2aW5nIGxvZyBtZXNzYWdlcyB3cml0dGVuIiwKICAgICAgICAgICAgICAgIGZ1bigpIC0+CiAgICAgICAgICAgICAgICAgICAgICAgIHtvaywgRkluZm99ID0gZmlsZTpyZWFkX2ZpbGVfaW5mbygidGVzdC5sb2ciKSwKICAgICAgICAgICAgICAgICAgICAgICAgT2xkUGVybXMgPSBGSW5mbyNmaWxlX2luZm8ubW9kZSwKICAgICAgICAgICAgICAgICAgICAgICAgZmlsZTp3cml0ZV9maWxlX2luZm8oInRlc3QubG9nIiwgRkluZm8jZmlsZV9pbmZve21vZGUgPSAwfSksCiAgICAgICAgICAgICAgICAgICAgICAgIGdlbl9ldmVudDphZGRfaGFuZGxlcihsYWdlcl9ldmVudCwgbGFnZXJfZmlsZV9iYWNrZW5kLCBbe2ZpbGUsICJ0ZXN0LmxvZyJ9LHtjaGVja19pbnRlcnZhbCwgMH1dKSwKICAgICAgICAgICAgICAgICAgICAgICAgP2Fzc2VydEVxdWFsKDEsIGxhZ2VyX3Rlc3RfYmFja2VuZDpjb3VudCgpKSwKICAgICAgICAgICAgICAgICAgICAgICAge19MZXZlbCwgX1RpbWUsIE1lc3NhZ2UsX01ldGFkYXRhfSA9IGxhZ2VyX3Rlc3RfYmFja2VuZDpwb3AoKSwKICAgICAgICAgICAgICAgICAgICAgICAgP2Fzc2VydEVxdWFsKCJGYWlsZWQgdG8gb3BlbiBsb2cgZmlsZSB0ZXN0LmxvZyB3aXRoIGVycm9yIHBlcm1pc3Npb24gZGVuaWVkIiwgbGlzdHM6ZmxhdHRlbihNZXNzYWdlKSksCiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGU6d3JpdGVfZmlsZV9pbmZvKCJ0ZXN0LmxvZyIsIEZJbmZvI2ZpbGVfaW5mb3ttb2RlID0gT2xkUGVybXN9KSwKICAgICAgICAgICAgICAgICAgICAgICAgbGFnZXI6bG9nKGVycm9yLCBzZWxmKCksICJUZXN0IG1lc3NhZ2UiKSwKICAgICAgICAgICAgICAgICAgICAgICAge29rLCBCaW59ID0gZmlsZTpyZWFkX2ZpbGUoInRlc3QubG9nIiksCiAgICAgICAgICAgICAgICAgICAgICAgIFBpZCA9IHBpZF90b19saXN0KHNlbGYoKSksCiAgICAgICAgICAgICAgICAgICAgICAgID9hc3NlcnRNYXRjaChbXywgXywgIltlcnJvcl0iLCBQaWQsICJUZXN0IG1lc3NhZ2VcbiJdLCByZTpzcGxpdChCaW4sICIgIiwgW3tyZXR1cm4sIGxpc3R9LCB7cGFydHMsIDV9XSkpCiAgICAgICAgICAgICAgICBlbmQKICAgICAgICAgICAgfSwKICAgICAgICAgICAgeyJleHRlcm5hbCBsb2dmaWxlIHJvdGF0aW9uL2RlbGV0aW9uIHNob3VsZCBiZSBoYW5kbGVkIiwKICAgICAgICAgICAgICAgIGZ1bigpIC0+CiAgICAgICAgICAgICAgICAgICAgICAgIGdlbl9ldmVudDphZGRfaGFuZGxlcihsYWdlcl9ldmVudCwgbGFnZXJfZmlsZV9iYWNrZW5kLCBbe2ZpbGUsICJ0ZXN0LmxvZyJ9LCB7bGV2ZWwsIGluZm99LCB7Y2hlY2tfaW50ZXJ2YWwsIDB9XSksCiAgICAgICAgICAgICAgICAgICAgICAgID9hc3NlcnRFcXVhbCgwLCBsYWdlcl90ZXN0X2JhY2tlbmQ6Y291bnQoKSksCiAgICAgICAgICAgICAgICAgICAgICAgIGxhZ2VyOmxvZyhlcnJvciwgc2VsZigpLCAiVGVzdCBtZXNzYWdlMSIpLAogICAgICAgICAgICAgICAgICAgICAgICA/YXNzZXJ0RXF1YWwoMSwgbGFnZXJfdGVzdF9iYWNrZW5kOmNvdW50KCkpLAogICAgICAgICAgICAgICAgICAgICAgICBmaWxlOmRlbGV0ZSgidGVzdC5sb2ciKSwKICAgICAgICAgICAgICAgICAgICAgICAgZmlsZTp3cml0ZV9maWxlKCJ0ZXN0LmxvZyIsICIiKSwKICAgICAgICAgICAgICAgICAgICAgICAgbGFnZXI6bG9nKGVycm9yLCBzZWxmKCksICJUZXN0IG1lc3NhZ2UyIiksCiAgICAgICAgICAgICAgICAgICAgICAgIHtvaywgQmlufSA9IGZpbGU6cmVhZF9maWxlKCJ0ZXN0LmxvZyIpLAogICAgICAgICAgICAgICAgICAgICAgICBQaWQgPSBwaWRfdG9fbGlzdChzZWxmKCkpLAogICAgICAgICAgICAgICAgICAgICAgICA/YXNzZXJ0TWF0Y2goW18sIF8sICJbZXJyb3JdIiwgUGlkLCAiVGVzdCBtZXNzYWdlMlxuIl0sIHJlOnNwbGl0KEJpbiwgIiAiLCBbe3JldHVybiwgbGlzdH0sIHtwYXJ0cywgNX1dKSksCiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGU6cmVuYW1lKCJ0ZXN0LmxvZyIsICJ0ZXN0LmxvZy4wIiksCiAgICAgICAgICAgICAgICAgICAgICAgIGxhZ2VyOmxvZyhlcnJvciwgc2VsZigpLCAiVGVzdCBtZXNzYWdlMyIpLAogICAgICAgICAgICAgICAgICAgICAgICB7b2ssIEJpbjJ9ID0gZmlsZTpyZWFkX2ZpbGUoInRlc3QubG9nIiksCiAgICAgICAgICAgICAgICAgICAgICAgID9hc3NlcnRNYXRjaChbXywgXywgIltlcnJvcl0iLCBQaWQsICJUZXN0IG1lc3NhZ2UzXG4iXSwgcmU6c3BsaXQoQmluMiwgIiAiLCBbe3JldHVybiwgbGlzdH0sIHtwYXJ0cywgNX1dKSkKICAgICAgICAgICAgICAgIGVuZAogICAgICAgICAgICB9LAogICAgICAgICAgICB7ImludGVybmFsIHNpemUgcm90YXRpb24gc2hvdWxkIHdvcmsiLAogICAgICAgICAgICAgICAgZnVuKCkgLT4KICAgICAgICAgICAgICAgICAgICAgICAgZ2VuX2V2ZW50OmFkZF9oYW5kbGVyKGxhZ2VyX2V2ZW50LCBsYWdlcl9maWxlX2JhY2tlbmQsIFt7ZmlsZSwgInRlc3QubG9nIn0sIHtsZXZlbCwgaW5mb30sIHtjaGVja19pbnRlcnZhbCwgMH0sIHtzaXplLCAxMH1dKSwKICAgICAgICAgICAgICAgICAgICAgICAgbGFnZXI6bG9nKGVycm9yLCBzZWxmKCksICJUZXN0IG1lc3NhZ2UxIiksCiAgICAgICAgICAgICAgICAgICAgICAgIGxhZ2VyOmxvZyhlcnJvciwgc2VsZigpLCAiVGVzdCBtZXNzYWdlMSIpLAogICAgICAgICAgICAgICAgICAgICAgICA/YXNzZXJ0KGZpbGVsaWI6aXNfcmVndWxhcigidGVzdC5sb2cuMCIpKQogICAgICAgICAgICAgICAgZW5kCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsiaW50ZXJuYWwgdGltZSByb3RhdGlvbiBzaG91bGQgd29yayIsCiAgICAgICAgICAgICAgICBmdW4oKSAtPgogICAgICAgICAgICAgICAgICAgICAgICBnZW5fZXZlbnQ6YWRkX2hhbmRsZXIobGFnZXJfZXZlbnQsIGxhZ2VyX2ZpbGVfYmFja2VuZCwgW3tmaWxlLCAidGVzdC5sb2cifSwge2xldmVsLCBpbmZvfSwge2NoZWNrX2ludGVydmFsLCAxMDAwfV0pLAogICAgICAgICAgICAgICAgICAgICAgICBsYWdlcjpsb2coZXJyb3IsIHNlbGYoKSwgIlRlc3QgbWVzc2FnZTEiKSwKICAgICAgICAgICAgICAgICAgICAgICAgbGFnZXI6bG9nKGVycm9yLCBzZWxmKCksICJUZXN0IG1lc3NhZ2UxIiksCiAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlaXMobGFnZXJfZXZlbnQpICEge3JvdGF0ZSwgInRlc3QubG9nIn0sCiAgICAgICAgICAgICAgICAgICAgICAgIGxhZ2VyOmxvZyhlcnJvciwgc2VsZigpLCAiVGVzdCBtZXNzYWdlMSIpLAogICAgICAgICAgICAgICAgICAgICAgICA/YXNzZXJ0KGZpbGVsaWI6aXNfcmVndWxhcigidGVzdC5sb2cuMCIpKQogICAgICAgICAgICAgICAgZW5kCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsic3luY19vbiBvcHRpb24gc2hvdWxkIHdvcmsiLAogICAgICAgICAgICAgICAgZnVuKCkgLT4KICAgICAgICAgICAgICAgICAgICAgICAgZ2VuX2V2ZW50OmFkZF9oYW5kbGVyKGxhZ2VyX2V2ZW50LCBsYWdlcl9maWxlX2JhY2tlbmQsIFt7ZmlsZSwgInRlc3QubG9nIn0sIHtsZXZlbCwgaW5mb30sIHtzeW5jX29uLCAiPWluZm8ifSwge2NoZWNrX2ludGVydmFsLCA1MDAwfSwge3N5bmNfaW50ZXJ2YWwsIDUwMDB9XSksCiAgICAgICAgICAgICAgICAgICAgICAgIGxhZ2VyOmxvZyhlcnJvciwgc2VsZigpLCAiVGVzdCBtZXNzYWdlMSIpLAogICAgICAgICAgICAgICAgICAgICAgICBsYWdlcjpsb2coZXJyb3IsIHNlbGYoKSwgIlRlc3QgbWVzc2FnZTEiKSwKICAgICAgICAgICAgICAgICAgICAgICAgP2Fzc2VydEVxdWFsKHtvaywgPDw+Pn0sIGZpbGU6cmVhZF9maWxlKCJ0ZXN0LmxvZyIpKSwKICAgICAgICAgICAgICAgICAgICAgICAgbGFnZXI6bG9nKGluZm8sIHNlbGYoKSwgIlRlc3QgbWVzc2FnZTEiKSwKICAgICAgICAgICAgICAgICAgICAgICAge29rLCBCaW59ID0gZmlsZTpyZWFkX2ZpbGUoInRlc3QubG9nIiksCiAgICAgICAgICAgICAgICAgICAgICAgID9hc3NlcnQoPDw+PiAvPSBCaW4pCiAgICAgICAgICAgICAgICBlbmQKICAgICAgICAgICAgfSwKICAgICAgICAgICAgeyJzeW5jX29uIG5vbmUgb3B0aW9uIHNob3VsZCB3b3JrIChhbHNvIHRlc3RzIHN5bmNfaW50ZXJ2YWwpIiwKICAgICAgICAgICAgICAgIGZ1bigpIC0+CiAgICAgICAgICAgICAgICAgICAgICAgIGdlbl9ldmVudDphZGRfaGFuZGxlcihsYWdlcl9ldmVudCwgbGFnZXJfZmlsZV9iYWNrZW5kLCBbe2ZpbGUsICJ0ZXN0LmxvZyJ9LCB7bGV2ZWwsIGluZm99LCB7c3luY19vbiwgIm5vbmUifSwge2NoZWNrX2ludGVydmFsLCA1MDAwfSwge3N5bmNfaW50ZXJ2YWwsIDEwMDB9XSksCiAgICAgICAgICAgICAgICAgICAgICAgIGxhZ2VyOmxvZyhlcnJvciwgc2VsZigpLCAiVGVzdCBtZXNzYWdlMSIpLAogICAgICAgICAgICAgICAgICAgICAgICBsYWdlcjpsb2coZXJyb3IsIHNlbGYoKSwgIlRlc3QgbWVzc2FnZTEiKSwKICAgICAgICAgICAgICAgICAgICAgICAgP2Fzc2VydEVxdWFsKHtvaywgPDw+Pn0sIGZpbGU6cmVhZF9maWxlKCJ0ZXN0LmxvZyIpKSwKICAgICAgICAgICAgICAgICAgICAgICAgbGFnZXI6bG9nKGluZm8sIHNlbGYoKSwgIlRlc3QgbWVzc2FnZTEiKSwKICAgICAgICAgICAgICAgICAgICAgICAgP2Fzc2VydEVxdWFsKHtvaywgPDw+Pn0sIGZpbGU6cmVhZF9maWxlKCJ0ZXN0LmxvZyIpKSwKICAgICAgICAgICAgICAgICAgICAgICAgdGltZXI6c2xlZXAoMTAwMCksCiAgICAgICAgICAgICAgICAgICAgICAgIHtvaywgQmlufSA9IGZpbGU6cmVhZF9maWxlKCJ0ZXN0LmxvZyIpLAogICAgICAgICAgICAgICAgICAgICAgICA/YXNzZXJ0KDw8Pj4gLz0gQmluKQogICAgICAgICAgICAgICAgZW5kCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsic3luY19zaXplIG9wdGlvbiBzaG91bGQgd29yayIsCiAgICAgICAgICAgICAgICBmdW4oKSAtPgogICAgICAgICAgICAgICAgICAgICAgICBnZW5fZXZlbnQ6YWRkX2hhbmRsZXIobGFnZXJfZXZlbnQsIGxhZ2VyX2ZpbGVfYmFja2VuZCwgW3tmaWxlLCAidGVzdC5sb2cifSwge2xldmVsLCBpbmZvfSwge3N5bmNfb24sICJub25lIn0sIHtjaGVja19pbnRlcnZhbCwgNTAwMX0sIHtzeW5jX3NpemUsIDY0MH0sIHtzeW5jX2ludGVydmFsLCA1MDAxfV0pLAogICAgICAgICAgICAgICAgICAgICAgICBsYWdlcjpsb2coZXJyb3IsIHNlbGYoKSwgIlRlc3QgbWVzc2FnZWlzNjRieXRlcyIpLAogICAgICAgICAgICAgICAgICAgICAgICBsYWdlcjpsb2coZXJyb3IsIHNlbGYoKSwgIlRlc3QgbWVzc2FnZWlzNjRieXRlcyIpLAogICAgICAgICAgICAgICAgICAgICAgICBsYWdlcjpsb2coZXJyb3IsIHNlbGYoKSwgIlRlc3QgbWVzc2FnZWlzNjRieXRlcyIpLAogICAgICAgICAgICAgICAgICAgICAgICBsYWdlcjpsb2coZXJyb3IsIHNlbGYoKSwgIlRlc3QgbWVzc2FnZWlzNjRieXRlcyIpLAogICAgICAgICAgICAgICAgICAgICAgICBsYWdlcjpsb2coZXJyb3IsIHNlbGYoKSwgIlRlc3QgbWVzc2FnZWlzNjRieXRlcyIpLAogICAgICAgICAgICAgICAgICAgICAgICA/YXNzZXJ0RXF1YWwoe29rLCA8PD4+fSwgZmlsZTpyZWFkX2ZpbGUoInRlc3QubG9nIikpLAogICAgICAgICAgICAgICAgICAgICAgICBsYWdlcjpsb2coZXJyb3IsIHNlbGYoKSwgIlRlc3QgbWVzc2FnZWlzNjRieXRlcyIpLAogICAgICAgICAgICAgICAgICAgICAgICBsYWdlcjpsb2coZXJyb3IsIHNlbGYoKSwgIlRlc3QgbWVzc2FnZWlzNjRieXRlcyIpLAogICAgICAgICAgICAgICAgICAgICAgICBsYWdlcjpsb2coZXJyb3IsIHNlbGYoKSwgIlRlc3QgbWVzc2FnZWlzNjRieXRlcyIpLAogICAgICAgICAgICAgICAgICAgICAgICBsYWdlcjpsb2coZXJyb3IsIHNlbGYoKSwgIlRlc3QgbWVzc2FnZWlzNjRieXRlcyIpLAogICAgICAgICAgICAgICAgICAgICAgICA/YXNzZXJ0RXF1YWwoe29rLCA8PD4+fSwgZmlsZTpyZWFkX2ZpbGUoInRlc3QubG9nIikpLAogICAgICAgICAgICAgICAgICAgICAgICAlJSBub3cgd2UndmUgd3JpdHRlbiBlbm91Z2ggYnl0ZXMKICAgICAgICAgICAgICAgICAgICAgICAgbGFnZXI6bG9nKGVycm9yLCBzZWxmKCksICJUZXN0IG1lc3NhZ2VpczY0Ynl0ZXMiKSwKICAgICAgICAgICAgICAgICAgICAgICAge29rLCBCaW59ID0gZmlsZTpyZWFkX2ZpbGUoInRlc3QubG9nIiksCiAgICAgICAgICAgICAgICAgICAgICAgID9hc3NlcnQoPDw+PiAvPSBCaW4pCiAgICAgICAgICAgICAgICBlbmQKICAgICAgICAgICAgfSwKICAgICAgICAgICAgeyJydW50aW1lIGxldmVsIGNoYW5nZXMiLAogICAgICAgICAgICAgICAgZnVuKCkgLT4KICAgICAgICAgICAgICAgICAgICAgICAgZ2VuX2V2ZW50OmFkZF9oYW5kbGVyKGxhZ2VyX2V2ZW50LCB7bGFnZXJfZmlsZV9iYWNrZW5kLCAidGVzdC5sb2cifSwgeyJ0ZXN0LmxvZyIsIGluZm99KSwKICAgICAgICAgICAgICAgICAgICAgICAgP2Fzc2VydEVxdWFsKDAsIGxhZ2VyX3Rlc3RfYmFja2VuZDpjb3VudCgpKSwKICAgICAgICAgICAgICAgICAgICAgICAgbGFnZXI6bG9nKGluZm8sIHNlbGYoKSwgIlRlc3QgbWVzc2FnZTEiKSwKICAgICAgICAgICAgICAgICAgICAgICAgbGFnZXI6bG9nKGVycm9yLCBzZWxmKCksICJUZXN0IG1lc3NhZ2UyIiksCiAgICAgICAgICAgICAgICAgICAgICAgIHtvaywgQmlufSA9IGZpbGU6cmVhZF9maWxlKCJ0ZXN0LmxvZyIpLAogICAgICAgICAgICAgICAgICAgICAgICBMaW5lcyA9IGxlbmd0aChyZTpzcGxpdChCaW4sICJcbiIsIFt7cmV0dXJuLCBsaXN0fSwgdHJpbV0pKSwKICAgICAgICAgICAgICAgICAgICAgICAgP2Fzc2VydEVxdWFsKExpbmVzLCAyKSwKICAgICAgICAgICAgICAgICAgICAgICAgP2Fzc2VydEVxdWFsKG9rLCBsYWdlcjpzZXRfbG9nbGV2ZWwobGFnZXJfZmlsZV9iYWNrZW5kLCAidGVzdC5sb2ciLCB3YXJuaW5nKSksCiAgICAgICAgICAgICAgICAgICAgICAgIGxhZ2VyOmxvZyhpbmZvLCBzZWxmKCksICJUZXN0IG1lc3NhZ2UzIiksICUlIHRoaXMgd29uJ3QgZ2V0IGxvZ2dlZAogICAgICAgICAgICAgICAgICAgICAgICBsYWdlcjpsb2coZXJyb3IsIHNlbGYoKSwgIlRlc3QgbWVzc2FnZTQiKSwKICAgICAgICAgICAgICAgICAgICAgICAge29rLCBCaW4yfSA9IGZpbGU6cmVhZF9maWxlKCJ0ZXN0LmxvZyIpLAogICAgICAgICAgICAgICAgICAgICAgICBMaW5lczIgPSBsZW5ndGgocmU6c3BsaXQoQmluMiwgIlxuIiwgW3tyZXR1cm4sIGxpc3R9LCB0cmltXSkpLAogICAgICAgICAgICAgICAgICAgICAgICA/YXNzZXJ0RXF1YWwoTGluZXMyLCAzKQogICAgICAgICAgICAgICAgZW5kCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsiaW52YWxpZCBydW50aW1lIGxldmVsIGNoYW5nZXMiLAogICAgICAgICAgICAgICAgZnVuKCkgLT4KICAgICAgICAgICAgICAgICAgICAgICAgZ2VuX2V2ZW50OmFkZF9oYW5kbGVyKGxhZ2VyX2V2ZW50LCBsYWdlcl9maWxlX2JhY2tlbmQsIFt7InRlc3QubG9nIiwgaW5mbywgMTAqMTAyNCoxMDI0LCAiJEQwIiwgNX0sIHtsYWdlcl9kZWZhdWx0X2Zvcm1hdHRlcn1dKSwKICAgICAgICAgICAgICAgICAgICAgICAgZ2VuX2V2ZW50OmFkZF9oYW5kbGVyKGxhZ2VyX2V2ZW50LCBsYWdlcl9maWxlX2JhY2tlbmQsIHsidGVzdDMubG9nIiwgaW5mb30pLAogICAgICAgICAgICAgICAgICAgICAgICA/YXNzZXJ0RXF1YWwoe2Vycm9yLCBiYWRfbW9kdWxlfSwgbGFnZXI6c2V0X2xvZ2xldmVsKGxhZ2VyX2ZpbGVfYmFja2VuZCwgInRlc3QubG9nIiwgd2FybmluZykpCiAgICAgICAgICAgICAgICBlbmQKICAgICAgICAgICAgfSwKICAgICAgICAgICAgeyJ0cmFjaW5nIHNob3VsZCB3b3JrIiwKICAgICAgICAgICAgICAgIGZ1bigpIC0+CiAgICAgICAgICAgICAgICAgICAgICAgIGdlbl9ldmVudDphZGRfaGFuZGxlcihsYWdlcl9ldmVudCwgbGFnZXJfZmlsZV9iYWNrZW5kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgeyJ0ZXN0LmxvZyIsIGNyaXRpY2FsfSksCiAgICAgICAgICAgICAgICAgICAgICAgIGxhZ2VyOmVycm9yKCJUZXN0IG1lc3NhZ2UiKSwKICAgICAgICAgICAgICAgICAgICAgICAgP2Fzc2VydEVxdWFsKHtvaywgPDw+Pn0sIGZpbGU6cmVhZF9maWxlKCJ0ZXN0LmxvZyIpKSwKICAgICAgICAgICAgICAgICAgICAgICAge0xldmVsLCBffSA9IGxhZ2VyX2NvbmZpZzpnZXQobG9nbGV2ZWwpLAogICAgICAgICAgICAgICAgICAgICAgICBsYWdlcl9jb25maWc6c2V0KGxvZ2xldmVsLCB7TGV2ZWwsIFt7W3ttb2R1bGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID9NT0RVTEV9XSwgP0RFQlVHLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2xhZ2VyX2ZpbGVfYmFja2VuZCwgInRlc3QubG9nIn19XX0pLAogICAgICAgICAgICAgICAgICAgICAgICBsYWdlcjplcnJvcigiVGVzdCBtZXNzYWdlIiksCiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVyOnNsZWVwKDEwMDApLAogICAgICAgICAgICAgICAgICAgICAgICB7b2ssIEJpbn0gPSBmaWxlOnJlYWRfZmlsZSgidGVzdC5sb2ciKSwKICAgICAgICAgICAgICAgICAgICAgICAgP2Fzc2VydE1hdGNoKFtfLCBfLCAiW2Vycm9yXSIsIF8sICJUZXN0IG1lc3NhZ2VcbiJdLCByZTpzcGxpdChCaW4sICIgIiwgW3tyZXR1cm4sIGxpc3R9LCB7cGFydHMsIDV9XSkpCiAgICAgICAgICAgICAgICBlbmQKICAgICAgICAgICAgfSwKICAgICAgICAgICAgeyJ0cmFjaW5nIHNob3VsZCBub3QgZHVwbGljYXRlIG1lc3NhZ2VzIiwKICAgICAgICAgICAgICAgIGZ1bigpIC0+CiAgICAgICAgICAgICAgICAgICAgICAgIGdlbl9ldmVudDphZGRfaGFuZGxlcihsYWdlcl9ldmVudCwgbGFnZXJfZmlsZV9iYWNrZW5kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgW3tmaWxlLCAidGVzdC5sb2cifSwge2xldmVsLCBjcml0aWNhbH0sIHtjaGVja19pbnRlcnZhbCwgYWx3YXlzfV0pLAogICAgICAgICAgICAgICAgICAgICAgICBsYWdlcjpjcml0aWNhbCgiVGVzdCBtZXNzYWdlIiksCiAgICAgICAgICAgICAgICAgICAgICAgIHtvaywgQmluMX0gPSBmaWxlOnJlYWRfZmlsZSgidGVzdC5sb2ciKSwKICAgICAgICAgICAgICAgICAgICAgICAgP2Fzc2VydE1hdGNoKFtfLCBfLCAiW2NyaXRpY2FsXSIsIF8sICJUZXN0IG1lc3NhZ2VcbiJdLCByZTpzcGxpdChCaW4xLCAiICIsIFt7cmV0dXJuLCBsaXN0fSwge3BhcnRzLCA1fV0pKSwKICAgICAgICAgICAgICAgICAgICAgICAgb2sgPSBmaWxlOmRlbGV0ZSgidGVzdC5sb2ciKSwKICAgICAgICAgICAgICAgICAgICAgICAge0xldmVsLCBffSA9IGxhZ2VyX2NvbmZpZzpnZXQobG9nbGV2ZWwpLAogICAgICAgICAgICAgICAgICAgICAgICBsYWdlcl9jb25maWc6c2V0KGxvZ2xldmVsLCB7TGV2ZWwsIFt7W3ttb2R1bGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID9NT0RVTEV9XSwgP0RFQlVHLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2xhZ2VyX2ZpbGVfYmFja2VuZCwgInRlc3QubG9nIn19XX0pLAogICAgICAgICAgICAgICAgICAgICAgICBsYWdlcjpjcml0aWNhbCgiVGVzdCBtZXNzYWdlIiksCiAgICAgICAgICAgICAgICAgICAgICAgIHtvaywgQmluMn0gPSBmaWxlOnJlYWRfZmlsZSgidGVzdC5sb2ciKSwKICAgICAgICAgICAgICAgICAgICAgICAgP2Fzc2VydE1hdGNoKFtfLCBfLCAiW2NyaXRpY2FsXSIsIF8sICJUZXN0IG1lc3NhZ2VcbiJdLCByZTpzcGxpdChCaW4yLCAiICIsIFt7cmV0dXJuLCBsaXN0fSwge3BhcnRzLCA1fV0pKSwKICAgICAgICAgICAgICAgICAgICAgICAgb2sgPSBmaWxlOmRlbGV0ZSgidGVzdC5sb2ciKSwKICAgICAgICAgICAgICAgICAgICAgICAgbGFnZXI6ZXJyb3IoIlRlc3QgbWVzc2FnZSIpLAogICAgICAgICAgICAgICAgICAgICAgICB7b2ssIEJpbjN9ID0gZmlsZTpyZWFkX2ZpbGUoInRlc3QubG9nIiksCiAgICAgICAgICAgICAgICAgICAgICAgID9hc3NlcnRNYXRjaChbXywgXywgIltlcnJvcl0iLCBfLCAiVGVzdCBtZXNzYWdlXG4iXSwgcmU6c3BsaXQoQmluMywgIiAiLCBbe3JldHVybiwgbGlzdH0sIHtwYXJ0cywgNX1dKSkKICAgICAgICAgICAgICAgIGVuZAogICAgICAgICAgICB9LAogICAgICAgICAgICB7InRyYWNpbmcgdG8gYSBkZWRpY2F0ZWQgZmlsZSBzaG91bGQgd29yayIsCiAgICAgICAgICAgICAgICBmdW4oKSAtPgogICAgICAgICAgICAgICAgICAgICAgICBmaWxlOmRlbGV0ZSgiZm9vLmxvZyIpLAogICAgICAgICAgICAgICAgICAgICAgICB7b2ssIF99ID0gbGFnZXI6dHJhY2VfZmlsZSgiZm9vLmxvZyIsIFt7bW9kdWxlLCA/TU9EVUxFfV0pLAogICAgICAgICAgICAgICAgICAgICAgICBsYWdlcjplcnJvcigiVGVzdCBtZXNzYWdlIiksCiAgICAgICAgICAgICAgICAgICAgICAgICUlIG5vdCBlbGVnaWJsZSBmb3IgdHJhY2UKICAgICAgICAgICAgICAgICAgICAgICAgbGFnZXI6bG9nKGVycm9yLCBzZWxmKCksICJUZXN0IG1lc3NhZ2UiKSwKICAgICAgICAgICAgICAgICAgICAgICAge29rLCBCaW4zfSA9IGZpbGU6cmVhZF9maWxlKCJmb28ubG9nIiksCiAgICAgICAgICAgICAgICAgICAgICAgID9hc3NlcnRNYXRjaChbXywgXywgIltlcnJvcl0iLCBfLCAiVGVzdCBtZXNzYWdlXG4iXSwgcmU6c3BsaXQoQmluMywgIiAiLCBbe3JldHVybiwgbGlzdH0sIHtwYXJ0cywgNX1dKSkKICAgICAgICAgICAgICAgIGVuZAogICAgICAgICAgICB9CiAgICAgICAgXQogICAgfS4KCmZvcm1hdHRpbmdfdGVzdF8oKSAtPgogICAge2ZvcmVhY2gsCiAgICAgICAgZnVuKCkgLT4KICAgICAgICAgICAgICAgIGZpbGU6d3JpdGVfZmlsZSgidGVzdC5sb2ciLCAiIiksCiAgICAgICAgICAgICAgICBmaWxlOndyaXRlX2ZpbGUoInRlc3QyLmxvZyIsICIiKSwKICAgICAgICAgICAgICAgIGVycm9yX2xvZ2dlcjp0dHkoZmFsc2UpLAogICAgICAgICAgICAgICAgYXBwbGljYXRpb246bG9hZChsYWdlciksCiAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbjpzZXRfZW52KGxhZ2VyLCBoYW5kbGVycywgW3tsYWdlcl90ZXN0X2JhY2tlbmQsIGluZm99XSksCiAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbjpzZXRfZW52KGxhZ2VyLCBlcnJvcl9sb2dnZXJfcmVkaXJlY3QsIGZhbHNlKSwKICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uOnN0YXJ0KGxhZ2VyKQogICAgICAgIGVuZCwKICAgICAgICBmdW4oXykgLT4KICAgICAgICAgICAgICAgIGZpbGU6ZGVsZXRlKCJ0ZXN0LmxvZyIpLAogICAgICAgICAgICAgICAgZmlsZTpkZWxldGUoInRlc3QyLmxvZyIpLAogICAgICAgICAgICAgICAgYXBwbGljYXRpb246c3RvcChsYWdlciksCiAgICAgICAgICAgICAgICBlcnJvcl9sb2dnZXI6dHR5KHRydWUpCiAgICAgICAgZW5kLAogICAgICAgICAgICBbeyJTaG91bGQgaGF2ZSB0d28gbG9nIGZpbGVzLCB0aGUgc2Vjb25kIHByZWZpeGVkIHdpdGggMj4iLAogICAgICAgICAgICAgICAgZnVuKCkgLT4KICAgICAgICAgICAgICAgICAgICAgICBnZW5fZXZlbnQ6YWRkX2hhbmRsZXIobGFnZXJfZXZlbnQsIGxhZ2VyX2ZpbGVfYmFja2VuZCxbeyJ0ZXN0LmxvZyIsIGRlYnVnfSx7bGFnZXJfZGVmYXVsdF9mb3JtYXR0ZXIsWyJbIixzZXZlcml0eSwiXSAiLCBtZXNzYWdlLCAiXG4iXX1dKSwKICAgICAgICAgICAgICAgICAgICAgICBnZW5fZXZlbnQ6YWRkX2hhbmRsZXIobGFnZXJfZXZlbnQsIGxhZ2VyX2ZpbGVfYmFja2VuZCxbeyJ0ZXN0Mi5sb2ciLCBkZWJ1Z30se2xhZ2VyX2RlZmF1bHRfZm9ybWF0dGVyLFsiMj4gWyIsc2V2ZXJpdHksIl0gIiwgbWVzc2FnZSwgIlxuIl19XSksCiAgICAgICAgICAgICAgICAgICAgICAgbGFnZXI6bG9nKGVycm9yLCBzZWxmKCksICJUZXN0IG1lc3NhZ2UiKSwKICAgICAgICAgICAgICAgICAgICAgICA/YXNzZXJ0TWF0Y2goe29rLCA8PCJbZXJyb3JdIFRlc3QgbWVzc2FnZVxuIj4+fSxmaWxlOnJlYWRfZmlsZSgidGVzdC5sb2ciKSksCiAgICAgICAgICAgICAgICAgICAgICAgP2Fzc2VydE1hdGNoKHtvaywgPDwiMj4gW2Vycm9yXSBUZXN0IG1lc3NhZ2VcbiI+Pn0sZmlsZTpyZWFkX2ZpbGUoInRlc3QyLmxvZyIpKQogICAgICAgICAgICAgICAgZW5kCiAgICAgICAgICAgIH0KICAgICAgICBdfS4KCmNvbmZpZ192YWxpZGF0aW9uX3Rlc3RfKCkgLT4KICAgIFsKICAgICAgICB7Im1pc3NpbmcgZmlsZSIsCiAgICAgICAgICAgID9fYXNzZXJ0RXF1YWwoZmFsc2UsCiAgICAgICAgICAgICAgICB2YWxpZGF0ZV9sb2dmaWxlX3Byb3BsaXN0KFt7bGV2ZWwsIGluZm99LHtzaXplLCAxMH1dKSkKICAgICAgICB9LAogICAgICAgIHsiYmFkIGxldmVsIiwKICAgICAgICAgICAgP19hc3NlcnRFcXVhbChmYWxzZSwKICAgICAgICAgICAgICAgIHZhbGlkYXRlX2xvZ2ZpbGVfcHJvcGxpc3QoW3tmaWxlLCAidGVzdC5sb2cifSwge2xldmVsLCBibGFofSx7c2l6ZSwgMTB9XSkpCiAgICAgICAgfSwKICAgICAgICB7ImJhZCBzaXplIiwKICAgICAgICAgICAgP19hc3NlcnRFcXVhbChmYWxzZSwKICAgICAgICAgICAgICAgIHZhbGlkYXRlX2xvZ2ZpbGVfcHJvcGxpc3QoW3tmaWxlLCAidGVzdC5sb2cifSwge3NpemUsIGluZmluaXR5fV0pKQogICAgICAgIH0sCiAgICAgICAgeyJiYWQgY291bnQiLAogICAgICAgICAgICA/X2Fzc2VydEVxdWFsKGZhbHNlLAogICAgICAgICAgICAgICAgdmFsaWRhdGVfbG9nZmlsZV9wcm9wbGlzdChbe2ZpbGUsICJ0ZXN0LmxvZyJ9LCB7Y291bnQsIGluZmluaXR5fV0pKQogICAgICAgIH0sCiAgICAgICAgeyJiYWQgZGF0ZSIsCiAgICAgICAgICAgID9fYXNzZXJ0RXF1YWwoZmFsc2UsCiAgICAgICAgICAgICAgICB2YWxpZGF0ZV9sb2dmaWxlX3Byb3BsaXN0KFt7ZmlsZSwgInRlc3QubG9nIn0sIHtkYXRlLCAibWlkbmlnaHQifV0pKQogICAgICAgIH0sCiAgICAgICAgeyJibGFuayBkYXRlIGlzIG9rIiwKICAgICAgICAgICAgP19hc3NlcnRNYXRjaChbX3xfXSwKICAgICAgICAgICAgICAgIHZhbGlkYXRlX2xvZ2ZpbGVfcHJvcGxpc3QoW3tmaWxlLCAidGVzdC5sb2cifSwge2RhdGUsICIifV0pKQogICAgICAgIH0sCiAgICAgICAgeyJiYWQgc3luY19pbnRlcnZhbCIsCiAgICAgICAgICAgID9fYXNzZXJ0RXF1YWwoZmFsc2UsCiAgICAgICAgICAgICAgICB2YWxpZGF0ZV9sb2dmaWxlX3Byb3BsaXN0KFt7ZmlsZSwgInRlc3QubG9nIn0sIHtzeW5jX2ludGVydmFsLCBpbmZpbml0eX1dKSkKICAgICAgICB9LAogICAgICAgIHsiYmFkIHN5bmNfc2l6ZSIsCiAgICAgICAgICAgID9fYXNzZXJ0RXF1YWwoZmFsc2UsCiAgICAgICAgICAgICAgICB2YWxpZGF0ZV9sb2dmaWxlX3Byb3BsaXN0KFt7ZmlsZSwgInRlc3QubG9nIn0sIHtzeW5jX3NpemUsIGluZmluaXR5fV0pKQogICAgICAgIH0sCiAgICAgICAgeyJiYWQgY2hlY2tfaW50ZXJ2YWwiLAogICAgICAgICAgICA/X2Fzc2VydEVxdWFsKGZhbHNlLAogICAgICAgICAgICAgICAgdmFsaWRhdGVfbG9nZmlsZV9wcm9wbGlzdChbe2ZpbGUsICJ0ZXN0LmxvZyJ9LCB7Y2hlY2tfaW50ZXJ2YWwsIGluZmluaXR5fV0pKQogICAgICAgIH0sCiAgICAgICAgeyJiYWQgc3luY19vbiBsZXZlbCIsCiAgICAgICAgICAgID9fYXNzZXJ0RXF1YWwoZmFsc2UsCiAgICAgICAgICAgICAgICB2YWxpZGF0ZV9sb2dmaWxlX3Byb3BsaXN0KFt7ZmlsZSwgInRlc3QubG9nIn0sIHtzeW5jX29uLCBpbmZpbml0eX1dKSkKICAgICAgICB9LAogICAgICAgIHsiYmFkIGZvcm1hdHRlciBtb2R1bGUiLAogICAgICAgICAgICA/X2Fzc2VydEVxdWFsKGZhbHNlLAogICAgICAgICAgICAgICAgdmFsaWRhdGVfbG9nZmlsZV9wcm9wbGlzdChbe2ZpbGUsICJ0ZXN0LmxvZyJ9LCB7Zm9ybWF0dGVyLCAiaW86Zm9ybWF0In1dKSkKICAgICAgICB9LAogICAgICAgIHsiYmFkIGZvcm1hdHRlciBjb25maWciLAogICAgICAgICAgICA/X2Fzc2VydEVxdWFsKGZhbHNlLAogICAgICAgICAgICAgICAgdmFsaWRhdGVfbG9nZmlsZV9wcm9wbGlzdChbe2ZpbGUsICJ0ZXN0LmxvZyJ9LCB7Zm9ybWF0dGVyX2NvbmZpZywgYmxhaH1dKSkKICAgICAgICB9LAogICAgICAgIHsidW5rbm93biBvcHRpb24iLAogICAgICAgICAgICA/X2Fzc2VydEVxdWFsKGZhbHNlLAogICAgICAgICAgICAgICAgdmFsaWRhdGVfbG9nZmlsZV9wcm9wbGlzdChbe2ZpbGUsICJ0ZXN0LmxvZyJ9LCB7cmh1YmFyYiwgc3BpY3l9XSkpCiAgICAgICAgfQogICAgXS4KCgotZW5kaWYuCgo=