KnRvZG8udHh0KiAgICAgIEZvciBWaW0gdmVyc2lvbiA3LjBhYS4gIExhc3QgY2hhbmdlOiAyMDA2IEZlYiAyOAoKCgkJICBWSU0gUkVGRVJFTkNFIE1BTlVBTAkgIGJ5IEJyYW0gTW9vbGVuYWFyCgoKCQkJICAgICAgVE9ETyBsaXN0IGZvciBWaW0JCSp0b2RvKgoKVGhpcyBpcyBhIHZlZWVlcnkgbG9uZyBsaXN0IG9mIGtub3duIGJ1Z3MsIGN1cnJlbnQgd29yayBhbmQgZGVzaXJlZAppbXByb3ZlbWVudHMuICBUbyBtYWtlIGl0IGEgbGl0dGxlIGJpdCBhY2Nlc3NpYmxlLCB0aGUgaXRlbXMgYXJlIGdyb3VwZWQgYnkKc3ViamVjdC4gIEluIHRoZSBmaXJzdCBjb2x1bW4gb2YgdGhlIGxpbmUgYSBjbGFzc2lmaWNhdGlvbiBpcyB1c2VkIHRvIGJlIGFibGUKdG8gbG9vayBmb3IgInRoZSBuZXh0IHRoaW5nIHRvIGRvIjoKClByaW9yaXR5IGNsYXNzaWZpY2F0aW9uOgo5ICAgbmV4dCBwb2ludCByZWxlYXNlCjggICBuZXh0IHJlbGVhc2UKNyAgIGFzIHNvb24gYXMgcG9zc2libGUKNiAgIHNvb24KNSAgIHNob3VsZCBiZSBpbmNsdWRlZAo0ICAgbmljZSB0byBoYXZlCjMgICBjb25zaWRlciBpbmNsdWRpbmcKMiAgIG1heWJlIG5vdAoxICAgcHJvYmFibHkgbm90Ci0gICB1bmNsYXNzaWZpZWQKCgkJCQkJCSAgICAqdm90ZXMtZm9yLWNoYW5nZXMqClNlZSB8ZGV2ZWxvcC50eHR8IGZvciBkZXZlbG9wbWVudCBwbGFucy4gIFlvdSBjYW4gdm90ZSBmb3Igd2hpY2ggaXRlbXMgc2hvdWxkCmJlIHdvcmtlZCBvbiwgYnV0IG9ubHkgaWYgeW91IHNwb25zb3IgVmltIGRldmVsb3BtZW50LiAgU2VlIHxzcG9uc29yfC4KCgkJCQkJCQkqa25vd24tYnVncyoKLS0tLS0tLS0tLS0tLS0tLS0tLS0gS25vd24gYnVncyBhbmQgY3VycmVudCB3b3JrIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpHY2MgNCBnaXZlcyBtb3JlIHdhcm5pbmdzIGZvciB1bmluaXRpYWxpemVkIHZhcnMuCgpJZ25vcmUgImoiIGF0IGhpdC1lbnRlciBwcm9tcHQ/ICAiayIgYWxyZWFkeSB3b3JrcyBkaWZmZXJlbnRseS4KCkNyYXNoIHdpdGggWCBjb21tYW5kIHNlcnZlciAoQ2lhcmFuIE1jQ3JlZXNoKS4KCkN0YWdzIHN0aWxsIGhhc24ndCBpbmNsdWRlZCB0aGUgcGF0Y2guICBEYXJyZW4gaXMgbG9va2luZyBmb3Igc29tZW9uZSB0byBkbwptYWludGFuYW5jZS4KCnNwZWxsaW5nOgotIEFsc28gdXNlIHRoZSBzcGVsbGluZyBkaWN0aW9uYXJ5IGZvciBkaWN0aW9uYXJ5IGNvbXBsZXRpb24uCiAgV2hlbiAnZGljdGlvbmFyeScgaXMgZW1wdHkgYW5kL29yIHdoZW4gImtzcGVsbCIgaXMgaW4gJ2NvbXBsZXRlJy4KLSBVc2UgcnVudGltZS9jbGVhbmFkZCBzY3JpcHQgdG8gY2xlYW51cCAuYWRkIGZpbGVzLiAgV2hlbiB0byBpbnZva2UgaXQ/CiAgQWZ0ZXIgZGVsZXRpbmcgYSB3b3JkIHdpdGggInp3IiBhbmQgc29tZSB0aW1lc3RhbXAgZGlmZmVyZW5jZSBwZXJoYXBzPwogIFN0b3JlIGl0IGFzIHNwZWxsL2NsZWFuYWRkLnZpbS4KLSBzdWdnZXN0aW9uIGZvciAiS0ciIHRvICJrZyIgd2hlbiBpdCdzIGtlZXBjYXNlLgotIFVzaW5nIEtFRVBDQVNFIGZsYWcgc3RpbGwgYWxsb3dzIGFsbC11cHBlciB3b3JkLCBkb2NzIHNheSBpdCBkb2Vzbid0LgogIERvbid0IGFsbG93IGl0LCBiZWNhdXNlIHRoZXJlIGlzIG5vIG90aGVyIHdheSB0byBkbyB0aGlzLgotIEltcGxlbWVudCBOT1NVR0dFU1QgZmxhZyAodXNlZCBmb3Igb2JzY2VuZSB3b3JkcykuCi0gSW1wbGVtZW50IE5PU1BMSVRTVUdTLgotIFJlbmFtZSBDT01QT1VOREZMQUdTIHRvIENPTVBPVU5EUEFUVEVSTiBvciBDT01QT1VORFJVTEU/CiAgICBIdW5zcGVsbCBub3cgdXNlcyBDT01QT1VORCB3aXRoIGEgY291bnQuCi0gQ2hlY2sgb3V0IEh1bnNwZWxsIDEuMS4zLgogICAgd2hhdCBkb2VzIE1BWE5HUkFNU1VHUyBkbz8KICAgIFNlZSBhbm5vdW5jZW1lbnQgKE5lbWV0aCwgNSBqYW4pCiAgICBpcyBDT01QTEVYUFJFRklYRVMgbmVjZXNzYXJ5IG5vdyB0aGF0IHdlIGhhdmUgZmxhZ3MgZm9yIGFmZml4ZXM/Ci0gTG9vayBpbnRvIGh1bmdhcmlhbiBkaWN0aW9uYXJ5OgogIGh0dHA6Ly9tYWd5YXJpc3BlbGwuc291cmNlZm9yZ2UubmV0L2h1X0hVLTEuMC50YXIuZ3oKLSAgIFN1cHBvcnQgZmxhZ3Mgb24gYSBzdWZmaXguICBVc2VkIGZvciBzZWNvbmQgbGV2ZWwgYWZmaXhlcywgcmFyZSBhbmQKICAgIG5vY29tcC4gIFRoZSBmbGFncyBtYXkgYWxzbyBiZSB1c2VkIGZvciBjb21wb3VuZGluZy4gIERlZmF1bHQgaXMgYW4gT1IKICAgIG1lY2hhbmlzbSB3aXRoIHRoZSBmbGFncyBvZiB0aGUgd29yZC4gIEFkZGluZyAiY29tcHNldCIgb24gdGhlIGFmZml4ZXMKICAgIG1lYW5zIHRoZSBjb21wb3VuZCBmbGFncyBvZiB0aGUgd29yZCBhcmUgbm90IHVzZWQuCiAgICBJbnN0ZWFkIG9mICJTRlggYSAwIGFkZC9GTEFHUyAuIiB3ZSBjb3VsZCB1c2UgIlNGWCBhIDAgYWRkIC4gL0ZMQUdTIiAob3IKICAgIHN1cHBvcnQgYm90aCkuCi0gV2hlbiBjb21wb3VuZGluZyBIdW5zcGVsbCBkb2Vzbid0IGFsbG93IGFmZml4ZXMgaW5zaWRlIHRoZSBjb21wb3VuZCB3b3JkLAogIG9ubHkgYmVmb3JlIGFuZCBhZnRlciBpdC4gIENPTVBPVU5EUEVSTUlURkxBRyBjYW4gYmUgdXNlZCB0byBhbGxvdyBpdC4KICBDaGVjayBNeXNwZWxsIGFuZCBBc3BlbGwgaWYgdGhleSBhbHNvIHdvcmsgdGhpcyB3YXkuCiAgVGh1cyBhIHdvcmQgKyBzdWZmaXggbmVlZHMgYSBmbGFnIHRoYXQgaXQgY2FuJ3QgYmUgdXNlZCB3aXRoIGEgZm9sbG93aW5nCiAgY29tcG91bmQsIGFuZCB3b3JkICsgcHJlZml4IGNhbid0IGJlIGFmdGVyIGFub3RoZXIgd29yZCBpbiBhIGNvbXBvdW5kLgotIEltcGxlbWVudCBDT01QT1VOREZPUkJJREZMQUcuCi0gU3VwcG9ydCBicmVha3BvaW50IGNoYXJhY3RlciC3IDB4YjcgYW5kIGlnbm9yZSBpdD8gIE1ha2VzIGl0IHBvc3NpYmxlIHRvIHVzZQogIHNhbWUgd29yZGxpc3QgZm9yIGh5cGhlbmF0aW9uLgo4ICAgQWx0ZXJuYXRlIER1dGNoIHdvcmQgbGlzdCBhdCB3d3cubmVkZXJsYW5kc2V3b29yZGVuLm5sICh1c2Ugc2NyaXB0IHRvCiAgICBvYnRhaW4pLiAgQnV0IG5ldyBNeXNwZWxsIHdvcmRsaXN0IHdpbGwgY29tZSAoSGFnZW4pCi0gRmluZGluZyBzdWdnZXN0aW9ucyB3aXRoIHNvdW5kIGZvbGRpbmcgaXMgc2xvdy4gIFNvbWVob3cgc3RvcmUgdGhlCiAgc291bmQtZm9sZGVkIHdvcmRzIGFuZCBsaW5rIHRvIHRoZSB3b3JkcyBpdCBjb21lcyBmcm9tPwotIEhhdmUgInpnIiBhbmQgInp3IiByZXBvcnQgdGhlIGZpbGUgdGhhdCB3YXMgbW9kaWZpZWQuIChNYXJ2aW4gUmVuaWNoKQotIEFkZCBhIGNvbW1hbmQgbGlrZSAiemciIHRoYXQgc2VsZWN0cyBvbmUgb2YgdGhlIGZpbGVzICdzcGVsbGZpbGUnLgotIEFkZCBhICJ6dWciIGNvbW1hbmQgdGhhdCB1bmRvZXMgInpnIj8gIERlbGV0ZXMgdGhlIGdvb2Qgd29yZCBpbnN0ZWFkIG9mCiAgYWRkaW5nIGEgYmFkIHdvcmQgbGlrZSAienciIHdvdWxkLiAgVXNlICJ6dXciIHRvIHVuZG8gInp3Ij8gIChBbnRvbmlvCiAgQ29sb21ibykKCklzIGl0IHBvc3NpYmxlIHRvIGtlZXAgdGhlIGNvbW1hbmQtbGluZSB3aW5kb3cgb3Blbj8gIFdvdWxkIGFjdHVhbGx5IHdvcmsgbGlrZQpjbG9zaW5nIGl0LCBleGVjdXRpbmcgdGhlIGNvbW1hbmQgYW5kIHJlLW9wZW5pbmcgaXQgKGF0IHRoZSBzYW1lIHBvc2l0aW9uKS4KCk1hYyB1bmljb2RlIHBhdGNoIChEYSBXb29uIEp1bmcpOgotIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGZvciBwbGF0Zm9ybTogaTM4NiwgcHBjIG9yIGJvdGguCiAgICBVc2UgX19MSVRUTEVfRU5ESUFOX18gdG8gdGVzdCBmb3IgY3VycmVudCBwbGF0Zm9ybS4KLSBzZWxlY3RpbmcgcHJvcG9ydGlvbmFsIGZvbnQgYnJlYWtzIGRpc3BsYXkKLSBVVEYtOCB0ZXh0IGNhdXNlcyBkaXNwbGF5IHByb2JsZW1zLiAgRm9udCByZXBsYWNlbWVudCBjYXVzZXMgdGhpcy4KLSBDb21tYW5kLWtleSBtYXBwaW5ncyBkbyBub3Qgd29yay4gKEFsYW4gU2NobWl0dCkKLSBBZGQgZGVmYXVsdCBrZXkgbWFwcGluZ3MgZm9yIHRoZSBjb21tYW5kIGtleSAoQWxhbiBTY2htaXR0KQogICAgdXNlIGh0dHA6Ly9tYWN2aW0ub3JnL09TWC9maWxlcy9ndmltcmMKLSBXaXRoICdub3Bhc3RlJyBwYXN0aW5nIGlzIHdyb25nLCB3aXRoICdwYXN0ZScgQ29tbWFuZC1WIGRvZXNuJ3Qgd29yay4KICAoQWxhbiBTY2htaXR0KQoKUGF0Y2ggdG8gYWRkIGEgZmV3IGZsYWdzIHRvIHNlYXJjaCgpLiAoQmVuamkgRmlzaGVyLCBOb3YgMjksIGRvYyB1cGRhdGUgRGVjIDEpCgpXaW4zMjogVXNlIHRoZSBmcmVlIGRvd25sb2FkYWJsZSBjb21waWxlciA3LjEgKDIwMDMpLiAgRmlndXJlIG91dCBob3cgdG8gZG8KZGVidWdnaW5nICh3aXRoIEFnaWRlPykgYW5kIGRlc2NyaWJlIGl0LiAoR2VvcmdlIFJlaWxseSkKVHJ5IG91dCB1c2luZyB0aGUgZnJlZSBNUyBjb21waWxlciBhbmQgZGVidWdnZXIsIHVzaW5nIE1ha2VfbXZjLm1hay4KVHJ5IHVzaW5nIFZpc3VhbCBDKysgRXhwcmVzcyAyMDA1LiAoSWx5YSBCb2JpciBEZWMgMjApCiAgICBEaXNhZHZhbnRhZ2U6IEFubm95aW5nIHdhcm5pbmcgbWVzc2FnZXMsIHJlcXVpcmVzIC4uLl9OT19ERVBSRUNBVEUsIHRoaXMKICAgIGlzIG5vdCBhIHN0YW5kYXJkIGNvbXBpbGVyLgoKV2luMzI6IENoZWNrIHRoYXQgaW5zdGFsbGVyIHB1dHMgbWVudSBpdGVtcyBpbiAiYWxsIHVzZXJzIiBkaXIgd2hlbiBwb3NzaWJsZSwKbm90IGFkbWluaXN0cmF0b3IgZGlyLgoKQXV0b2xvYWQ6Ci0gQWRkIGEgVmltIHNjcmlwdCBpbiAkVklNUlVOVElNRS90b29scyB0aGF0IHRha2VzIGEgZmlsZSB3aXRoIGEgbGlzdCBvZgogIHNjcmlwdCBuYW1lcyBhbmQgYSBoZWxwIGZpbGUgYW5kIHByb2R1Y2VzIGEgc2NyaXB0IHRoYXQgY2FuIGJlIHNvdXJjZWQgdG8KICBpbnN0YWxsIHRoZSBzY3JpcHRzIGluIHRoZSB1c2VyJ3MgZGlyZWN0b3JpZXMuCiAgVXNlIGZpbmRmaWxlKCksIHNvIHRoYXQgb25seSBmaWxlIG5hbWVzIG5lZWQgdG8gYmUgZ2l2ZW46CiAgICBzY3JpcHQgcGx1Z2luL215c2NyaXB0LnZpbQogICAgc2NyaXB0IGF1dG9sb2FkL215bGliLnZpbQogICAgc2NyaXB0IGF1dG9sb2FkL3lvdXJsaWIudmltCiAgICBoZWxwZmlsZSBkb2MvbXlzY3JpcHQudHh0CiAgRm9yIHRoZSAiaGVscGZpbGUiIGl0ZW0gIjpoZWxwdGFncyIgaXMgcnVuLgoKQWRkICI6c21hcCIsIFNlbGVjdCBtb2RlIG1hcHBpbmc/ICBPdGhlcndpc2U6ICI6c3VubWFwIiwgc28gdGhhdCBWaXN1YWwgbW9kZQptYXBwaW5ncyBmb3Igbm9ybWFsIGtleXMgY2FuIGJlIHJlbW92ZWQgZnJvbSBTZWxlY3QgbW9kZS4KCldoZW4gZXhwYW5kaW5nIG9uIHRoZSBjb21tYW5kIGxpbmUsIHJlY29nbml6ZSBzaGVsbCBjb21tYW5kcywgc3VjaCBhcyAiOiFjbWQiLgpDb21wbGV0ZSBjb21tYW5kIG5hbWVzIGJ5IHNlYXJjaGluZyBpbiAkUEFUSC4gIFdoZW4gY29tcGxldGluZyBmaWxlIG5hbWVzCmVzY2FwZSBzcGVjaWFsIGNoYXJhY3RlcnMgIjsmPD4oKXt9Ii4gKEFkcmkgVmVyaG9lZikKCkFyZSB0aGVyZSBtb3JlIGNvbW1hbmRzIHdoZXJlIHY6c3dhcGNvbW1hbmQgY2FuIGJlIHNldCB0byBzb21ldGhpbmcgdXNlZnVsPwoKUHV0IGF1dG9jb21tYW5kIGV2ZW50IG5hbWVzIGluIGEgaGFzaHRhYmxlIGZvciBmYXN0ZXIgbG9va3VwPwoKQXdhaXRpbmcgcmVzcG9uc2U6Ci0gICBXaW4zMjogdGVhcm9mZiBtZW51IHdpbmRvdyBzaG91bGQgaGF2ZSBhIHNjcm9sbGJhciB3aGVuIGl0J3MgdGFsbGVyIHRoYW4KICAgIHRoZSBzY3JlZW4uCi0gICBtYmxlbihOVUxMLCAwKSBhbHNvIGluIFZpbSA2LjM/CgoKQ09OU0lERVJFRCBGT1IgVkVSU0lPTiA3LjA6CgpPbW5pIGNvbXBsZXRpb246CiAgICBjY29tcGxldGU6CiAgICAtIEZpbmRpbmcgb3V0IGlmIGFuIGl0ZW0gaGFzIG1lbWJlcnMgKHRvIGFkZCAnLicgb3IgJy0+JykgcmVxdWlyZXMgYSBncmVwCiAgICAgIGluIHRoZSB0YWdzIGZpbGVzLCB0aGF0IGlzIHZlcnkgc2xvdy4gIElzIHRoZXJlIGFub3RoZXIgc29sdXRpb24/ICBBdAogICAgICBsZWFzdCBzdG9wIGF0IHRoZSBmaXJzdCBtYXRjaC4KICAgICAgQ291bGQgYnVpbGQgdGhlIGxpc3Qgb2YgaXRlbXMgZm9yIGVhY2ggc3RydWN0dXJlIGluIG1lbW9yeS4gIElzIHRoYXQKICAgICAgZmFzdGVyPyAgTm90IHVzaW5nIHRvbyBtdWNoIG1lbW9yeT8KICAgIC0gRm9yIEMgYWRkIHRhZyAia2luZCIgZmllbGQgdG8gZWFjaCBtYXRjaD8KICAgIC0gRmxpY2tlcmluZyBiZWNhdXNlIG9mIHN5bnRheCBoaWdobGlnaHRpbmcgcmVkcmF3aW5nIGZ1cnRoZXIgbGluZXMuCiAgICAtIFdoZW4gYSB0eXBlZGVmIG9yIHN0cnVjdCBpcyBsb2NhbCB0byBhIGZpbGUgb25seSB1c2UgaXQgaW4gdGhhdCBmaWxlPwoKICAgIFVJOgogICAgLSBBZGQgYW4gImF1dG8iIG1vZGU6IGFmdGVyIHR5cGluZyBhIGNoYXJhY3RlciAob3Igc3RyaW5nKSBjb21wbGV0aW9uIGlzCiAgICAgIGRvbmUgZm9yIHRoZSBsb25nZXN0IGNvbW1vbiBzdHJpbmcuICBwbHVnaW4gZGVmaW5lcyB0aGUgcG9zc2libGUKICAgICAgY2hhcmFjdGVycy9zdHJpbmdzLiAoTWFydGluIFN0dWJlbnNjaHJvdHQpCiAgICAgIEFuZC9vcjogUHJvdmlkZSBhIGZ1bmN0aW9uIHRvIHBvcHVwIHRoZSBtZW51LCBzbyB0aGF0IGFuIGluc2VydCBtb2RlCiAgICAgIG1hcHBpbmcgY2FuIHN0YXJ0IGl0ICh3aXRoIGEgc3BlY2lmaWMgc2VsZWN0aW9uKS4KICAgIC0gR1VJIGltcGxlbWVudGF0aW9uIG9mIHRoZSBwb3B1cCBtZW51LgogICAgLSBTaG93ICJpbmZvIiBmcm9tIGEgbWF0Y2ggaW4gcHJldmlldyB3aW5kb3cuCiAgICAgIE9yIHVzZSBvbmUgd2luZG93IGZvciBtYXRjaGVzLCBhbm90aGVyIGZvciBjb250ZXh0L2luZm8gKERvdWcgS2Vhcm5zLAogICAgICAyMDA1IFNlcCAxMykKICAgIC0gSWRlYXMgb246IGh0dHA6Ly93d3cud2hvbGV0b21hdG8uY29tLwoKICAgIENvbXBsZXRpb24gbG9naWM6CglJZGVhcyBmcm9tIG90aGVyczoKCWh0dHA6Ly93d3cudmltLm9yZy9zY3JpcHRzL3NjcmlwdC5waHA/c2NyaXB0X2lkPTc0NwoJICAgIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvaW5zZW52aW0KCQlvciBodHRwOi8vaW5zZW52aW0uc291cmNlZm9yZ2UubmV0CgkgICAgSmF2YSwgWE1MLCBIVE1MLCBDKyssIEpTUCwgU1FMLCBDIwoJICAgIE1TLVdpbmRvd3Mgb25seSwgbG90cyBvZiBkZXBlbmRlbmNpZXMgKGUuZy4gUGVybCwgSW50ZXJuZXQKCQlleHBsb3JlciksIHVzZXMgLmRsbCBzaGFyZWQgbGlicmFyaWVzLgoJICAgIEZvciBDKysgdXNlcyAkSU5DTFVERSBlbnZpcm9ubWVudCB2YXIuCgkgICAgVXNlcyBQZXJsIGZvciBDKysuCgkgICAgVXNlcyBjdGFncyB0byBmaW5kIHRoZSBpbmZvOgoJCWN0YWdzIC1mICRhbGxUYWdzRmlsZSAtLWZpZWxkcz0rYWlLbW5zU3ogLS1sYW5ndWFnZS1mb3JjZT1DKysgLS1DKysta2luZHM9K2NlZmdtbnBzdXQtZGx1eCAtdSAkZmlsZXMKCgl3d3cudmltLm9yZyBzY3JpcHQgMTIxMyAoSmF2YSBEZXZlbG9wbWVudCBFbnZpcm9ubWVudCkgKEZ1Y2h1YW4gV2FuZykKCUlDb21wbGV0ZTogaHR0cDovL3d3dy52aW0ub3JnL3NjcmlwdHMvc2NyaXB0LnBocD9zY3JpcHRfaWQ9MTI2NQoJICAgIGFuZCBodHRwOi8vc3R1ZDQudHV3aWVuLmFjLmF0L35lMDEyNTY3Mi9pY29tcGxldGUvCglodHRwOi8vY2VkZXQuc291cmNlZm9yZ2UubmV0L2ludGVsbGlzZW5zZS5zaHRtbCAoZm9yIEVtYWNzKQoJSXZhbiBWaWxsYW51ZXZhIGhhcyBzb21ldGhpbmcgZm9yIEphdmEuCglFbWFkczogaHR0cDovL3d3dy54cmVmLXRlY2guY29tL3hyZWZhY3RvcnkvbW9yZV9jX2NvbXBsZXRpb24uaHRtbAoJSWRlYXMgZnJvbSB0aGUgVmltIDcgQk9GIGF0IFNBTkU6CgktIEZvciBpbnRlcnByZXRlZCBsYW5ndWFnZXMsIHVzZSB0aGUgaW50ZXJwcmV0ZXIgdG8gb2J0YWluIGluZm9ybWF0aW9uLgoJICBTaG91bGQgd29yayBmb3IgSmF2YSAoRWNsaXBzZSBkb2VzIHRoaXMpLCBQeXRob24sIFRjbCwgZXRjLgoJICBSaWNoYXJkIEVtYmVyc29uIG1lbnRpb25lZCB3b3JraW5nIG9uIGFuIGludGVyZmFjZSB0byBKYXZhLgoJLSBDaGVjayBSZWFkbGluZSBmb3IgaXRzIGNvbXBsZXRpb24gaW50ZXJmYWNlLgoJLSBVc2UgY3RhZ3MgZm9yIG90aGVyIGxhbmd1YWdlcy4gIFdyaXRpbmcgYSBmaWxlIGNvdWxkIHRyaWdnZXIgcnVubmluZwoJICBjdGFncywgbWVyZ2luZyB0aGUgdGFncyBvZiB0aGUgY2hhbmdlZCBmaWxlLgoJQ29tcGxldGlvbiBpbiAuTkVUIGZyYW1ld29yayBTaGFycERldmVsb3A6IGh0dHA6Ly93d3cuaWNzaGFycGNvZGUubmV0CgogICAgICAgIC0gUHJlLWV4cGFuZCBhYmJyZXZpYXRpb25zLCBzaG93IHdoaWNoIGFiYnJldnMgd291bGQgbWF0Y2g/CgotICAgVU5ETyBUUkVFOiBrZWVwIGFsbCBzdGF0ZXMgb2YgdGhlIHRleHQsIGRvbid0IGRlbGV0ZSB1bmRvIGluZm8uCiAgICBXaGVuIG1ha2luZyBhIGNoYW5nZSwgaW5zdGVhZCBvZiBjbGVhcmluZyBhbnkgZnV0dXJlIHVuZG8gKHRodXMgcmVkbykKICAgIGluZm8sIG1ha2UgYSBuZXcgYnJhbmNoLgogICAgVG8gbmF2aWdhdGUgdGhyb3VnaCB0aGUgdW5kbyB0cmVlIG51bWJlciB0aGUgc3RhdGVzIG9mIHRoZSB0ZXh0CiAgICBzZXF1ZW50aWFsbHkgYW5kIG1ha2UgaXQgcG9zc2libGUgdG8gZ28gdGhyb3VnaCB0aGUgdHJlZSBpbiB0aGF0IG9yZGVyLgogICAgVXNlICJnKysrIiB0byBnbyBmb3J3YXJkLCAiZy0tLSIgdG8gZ28gYmFja3dhcmQuICBDYW4gbWl4IC0gYW5kICsuCiAgICBDb3VsZCBhbHNvIHVzZSB0aW1lc3RhbXBzICh0byBzaG93IHRoZSB0aW1lIGFuZC9vciBqdW1wIHRvIGEgc3RhdGUgZml2ZQogICAgbWludXRlcyBhZ28pLiAoRGF2aWQgU2Nod2Vpa2VydCkKICAgIFRvIGdvIGZyb20gb25lIHN0YXRlIHRvIGFub3RoZXI6IGJhY2t0cmFjayB0byBhIGNvbW1vbiBzdGF0ZSwgdGhlbiBmb3J3YXJkCiAgICBhZ2Fpbi4KICAgIE9ubHkgZGlmZmljdWx0IHRoaW5nOiBXaGVuIGdvaW5nIGJhY2sgaW4gdGltZSwgaG93IHRvIGZpbmQgdGhlIHByZXZpb3VzCiAgICB0ZXh0IHN0YXRlIGluIHRoZSB0cmVlPwogICAgU2hvdyB0aGUgbGlzdCBvZiBjaGFuZ2VzIGluIGEgd2luZG93IHRvIGJlIGFibGUgdG8gc2VsZWN0IGEgdmVyc2lvbj8KICAgIEFsc286IFNlZSAiOmUiIGFzIGEgY2hhbmdlIG9wZXJhdGlvbiwgZmluZCB0aGUgY2hhbmdlcyBhbmQgYWRkIHRoZW0gdG8gdGhlCiAgICB1bmRvIGluZm8uICBOZWVkZWQgZm9yIHdoZW4gYW4gZXh0ZXJuYWwgdG9vbCBjaGFuZ2VzIHRoZSBmaWxlLgotICAgUEVSU0lTVEVOVCBVTkRPOiBzdG9yZSB1bmRvIGluIGEgZmlsZS4KICAgIFVzZSB0aW1lc3RhbXBzLCBzbyB0aGF0IGEgdmVyc2lvbiBhIGNlcnRhaW4gdGltZSBhZ28gY2FuIGJlIGZvdW5kIGFuZCBpbmZvCiAgICBiZWZvcmUgc29tZSB0aW1lL2RhdGUgY2FuIGJlIGZsdXNoZWQuICd1bmRvcGVyc2lzdCcgZ2l2ZXMgbWF4aW11bSB0aW1lIHRvCiAgICBrZWVwIHVuZG86ICIzaCIsICIxZCIsICIydyIsICIxeSIsIGV0Yy4gIEZvciB0aGUgZmlsZSB1c2UgZG90IGFuZAogICAgZXh0ZW5zaW9uOiAiLmZpbGVuYW1lLnVufiIgKGxpa2Ugc3dhcGZpbGUgYnV0ICJ1bn4iIGluc3RlYWQgb2YgInN3cCIpLgotICAgRU1CRURESU5HOiBNYWtlIGl0IHBvc3NpYmxlIHRvIHJ1biBWaW0gaW5zaWRlIGEgd2luZG93IG9mIGFub3RoZXIgcHJvZ3JhbS4KICAgIEZvciBYd2luZG93cyB0aGlzIGNhbiBiZSBkb25lIHdpdGggWFJlcGFyZW50V2luZG93KCkuCiAgICBGb3IgR1RLIE5laWwgQmlyZCBoYXMgYSBwYXRjaCB0byB1c2UgVmltIGxpa2UgYSB3aWRnZXQuCi0gICBBZGQgQ09MVU1OIE5VTUJFUlMgdG8gIjoiIGNvbW1hbmRzICI6bGluZTEsbGluZTJbY29sMSxjb2wyXWNtZCIuICBCbG9jawogICAgY2FuIGJlIHNlbGVjdGVkIHdpdGggQ1RSTC1WLiAgQWxsb3cgJyQnIChlbmQgb2YgbGluZSkgZm9yIGNvbDIuCi0gICBBZGQgREVCVUdHRVIgSU5URVJGQUNFLiAgSW1wbGVtZW50YXRpb24gZm9yIGdkYiBieSBYYXZpZXIgZGUgR2F5ZS4KICAgIFNob3VsZCB3b3JrIGxpa2UgYW4gSURFLiAgVHJ5IHRvIGtlZXAgaXQgZ2VuZXJpYy4gIE5vdyBmb3VuZCBoZXJlOgogICAgaHR0cDovL2NsZXduLnNmLm5ldC4KICAgIEFuZCB0aGUgaWRldmltIHBsdWdpbi9zY3JpcHQuCiAgICBUbyBiZSBhYmxlIHRvIHN0YXJ0IHRoZSBkZWJ1Z2dlciBmcm9tIGluc2lkZSBWaW06IEZvciBHVUkgcnVuIGEgcHJvZ3JhbQogICAgd2l0aCBhIG5ldGJlYW5zIGNvbm5lY3Rpb247IGZvciBjb25zb2xlOiBzdGFydCBhIHByb2dyYW0gdGhhdCBzcGxpdHMgdGhlCiAgICB0ZXJtaW5hbCwgcnVucyB0aGUgZGVidWdnZXIgaW4gb25lIHdpbmRvdyBhbmQgcmVjb25uZWN0IFZpbSBJL08gdG8gdGhlCiAgICBvdGhlciB3aW5kb3cuCiAgICBXaXNoZXMgZm9yIE5ldEJlYW5zIGNvbW1hbmRzOgogICAgLSBtYWtlIGl0IHBvc3NpYmxlIHRvIGhhdmUgJ2RlZmluZUFubm9UeXBlJyBhbHNvIGhhbmRsZSB0ZXJtaW5hbCBjb2xvcnMuCiAgICAtIHNlbmQgJ2JhbGxvb25UZXh0JyBldmVudHMgZm9yIHRoZSBjdXJzb3IgcG9zaXRpb24gKHVzaW5nIEN1cnNvckhvbGQgPykKICAgICAgaW4gdGVybWluYWwgbW9kZS4KLSAgIEVDTElQU0UgcGx1Z2luLiAgUHJvYmxlbSBpczogdGhlIGludGVyZmFjZSBpcyB2ZXJ5IGNvbXBsaWNhdGVkLiAgTmVlZCB0bwogICAgaW1wbGVtZW50IHBhcnQgaW4gSmF2YSBhbmQgdGhlbiBjb25uZWN0IHRvIFZpbS4gIFNvbWUgaGludHMgZnJvbSBBbGV4YW5kcnUKICAgIFJvbWFuLCAyMDA0IERlYyAxNS4gIFNob3VsZCB0aGVuIGFsc28gd29yayB3aXRoIE9yYWNsZSBKZGV2ZWxvcGVyLCBzZWUgSlNSCiAgICAxOTggc3RhbmRhcmQgaHR0cDovL3d3dy5qY3Aub3JnL2VuL2pzci9kZXRhaWw/aWQ9MTk4LgogICAgRWNsaW0gZG9lcyBpdDogaHR0cDovL2VjbGltLnNvdXJjZWZvcmdlLm5ldC8gIChFcmljIFZhbiBEZXdvZXN0aW5lKQogICAgUGx1Z2luIHRoYXQgdXNlcyBhIHRlcm1pbmFsIGVtdWxhdG9yOiBodHRwOi8vdmltcGx1Z2luLnNmLm5ldAotICAgU1RJQ0tZIENVUlNPUjogQWRkIGEgd2F5IG9mIHNjcm9sbGluZyB0aGF0IGxlYXZlcyB0aGUgY3Vyc29yIHdoZXJlIGl0IGlzLgogICAgRXNwZWNpYWxseSB3aGVuIHVzaW5nIHRoZSBzY3JvbGxiYXIuICBUeXBpbmcgYSBjdXJzb3ItbW92ZW1lbnQgY29tbWFuZAogICAgc2Nyb2xscyBiYWNrIHRvIHdoZXJlIHRoZSBjdXJzb3IgaXMuCi0gICBFeGVjdXRlIGEgZnVuY3Rpb24gd2l0aCBzdGFuZGFyZCBvcHRpb24gdmFsdWVzLiAgTm8gbmVlZCB0byBzYXZlIGFuZAogICAgcmVzdG9yZSBvcHRpb24gdmFsdWVzLiAgRXNwZWNpYWxseSB1c2VmdWwgZm9yIG5ldyBvcHRpb25zLiAgUHJvYmxlbTogaG93CiAgICB0byBhdm9pZCBhIHBlcmZvcm1hbmNlIHBlbmFsdHkgKGVzcC4gZm9yIHN0cmluZyBvcHRpb25zKT8KOCAgIFN1cHBvcnQgZm91ciBjb21wb3NpbmcvY29tYmluaW5nIGNoYXJhY3RlcnMsIG5lZWRlZCBmb3IgSGVicmV3LiAoUm9uIEFhcm9uKQogICAgQWRkIHRoZSAnbWF4Y29tYmluaW5nJyBvcHRpb24gdG8gc2V0IHRoZSBuci4gb2YgY29tcG9zaW5nIGNoYXJhY3RlcnMuCiAgICBBdCB0aGUgc2FtZSB0aW1lIHN1cHBvcnQgMzIgYml0IFVuaWNvZGUgY2hhcmFjdGVycz8KOCAgICJnYSIgc2hvdWxkIHNob3cgYWxsIGNvbXBvc2luZyBjaGFyYWN0ZXJzLCBhbHNvIGlmIHRoZXJlIGFyZSBtb3JlIHRoYW4gMi4KOCAgIFNlYXJjaGluZyBmb3IgYSBjb21wb3NpbmcgY2hhcmFjdGVyIGJ5IGl0c2VsZiBzaG91bGQgd29yay4gIFBlcmhhcHMgIi4iCiAgICB3aXRoIGEgY29tcG9zaW5nIGNoYXIgc2hvdWxkIHdvcmsgdG9vLgotICAgQWRkIGEgZmV3IG1vcmUgdGhpbmdzIHRvICdkaWZmb3B0JzogImhvcml6b250YWwiLCAidmVydGljYWwiLAogICAgImZvbGRjb2x1bW4iLiAoQmVuamkgRmlzaGVyLCAyMDA0IEp1biAyMSkKLSAgIEZpbGVDaGFuZ2VkU2hlbGxQb3N0IGF1dG9jb21tYW5kIGV2ZW50OiBhZnRlciAobm90KSByZWxvYWRpbmcgYSBjaGFuZ2VkCiAgICBmaWxlLiAgQ2FuIGJlIHVzZWQgdG8gdXBkYXRlIHN0YXR1c2xpbmUgb3NsdC4KLSAgIFZpbVJlc2l6ZWQgYXV0b2NtZCBldmVudDogV2hlbiB0aGUgVmltIHdpbmRvdyBoYXMgYmVlbiByZXNpemVkIChTSUdXSU5DSCkKICAgIHBhdGNoIGZyb20gWWFrb3YgTGVybmVyLCAyMDAzIEp1bHkgMjQuCglJdCdzIG5vdCBjbGVhciB0aGF0IHRoaXMgZG9lc24ndCBjYXVzZSBwcm9ibGVtcyB3aGVuIHRoZSBleGVjdXRlZAoJY29tbWFuZHMgZG8gc29tZXRoaW5nIGxpa2UgY2hhbmdpbmcgJ2xpbmVzJy4gIEVzcC4gYmVjYXVzZSB0aGUgCglzY3JlZW4gaGFzIG5vdCB5ZXQgYmVlbiBhbGxvY2F0ZWQgd2l0aCB0aGUgbmV3IHNpemUuCi0gICBSdW5uaW5nIGEgc2hlbGwgY29tbWFuZCBmcm9tIHRoZSBHVUkgc3RpbGwgaGFzIGxpbWl0YXRpb25zLiAgTG9vayBpbnRvIGhvdwogICAgdGhlIFZpbSBzaGVsbCBwcm9qZWN0IGNhbiBoZWxwOiBodHRwOi8vdmltc2hlbGwud2FuYS5hdAotICAgRGlzcGxheWluZyBzaXplIG9mIFZpc3VhbCBhcmVhOiB1c2UgMjQtMzMgY29sdW1uIGRpc3BsYXkuCiAgICBXaGVuIHNlbGVjdGluZyBtdWx0aXBsZSBsaW5lcywgdXAgdG8gYWJvdXQgYSBzY3JlZW5mdWwsIGFsc28gY291bnQgdGhlCiAgICBjaGFyYWN0ZXJzLgotICAgTWFjOiBVbmljb2RlIGlucHV0IGFuZCBkaXNwbGF5IChFY2tlaGFyZCBCZXJucywgMjAwNCBKdW5lIDI3KQogICAgT3RoZXIgcGF0Y2ggZnJvbSBEYSBXb29uIEp1bmcsIDIwMDUgSmFuIDE2Lgo4ICAgQWRkIHBhdGNoIGZyb20gTXVyYW9rYSBUYXJvIChNYXIgMTYpIHRvIHN1cHBvcnQgaW5wdXQgbWV0aG9kIG9uIE1hYz8KICAgIE5ldyBwYXRjaCAyMDA0IEp1biAxNgo5ICAgQWRkIGN1cnNvci1jb2x1bW4gaGlnaGxpZ2h0aW5nLiAgRW5hYmxlIGl0IHdpdGggJ2N1cnNvcmNvbHVtbicgb3B0aW9uLAogICAgc2V0IGhpZ2hsaWdodGluZyB3aXRoICJDdXJzb3JDb2x1bW4iIGdyb3VwLiAgVXNlZnVsIGZvciBhbGlnbmluZyB0ZXh0LgogICAgQWxzbyBjdXJzb3Itcm93IGhpZ2hsaWdodGluZy4gIFBhdGNoIGZyb20gWWFzdWhpcm8gTWF0c3Vtb3RvIGZvcgogICAgdW5kZXJsaW5pbmcgdGhlIGN1cnNvciBsaW5lOiAyMDA0IEp1biAxNy4gIFNob3VsZCB1c2UgaGlnaGxpZ2h0IGdyb3VwCiAgICBpbnN0ZWFkLgogICAgQWx0ZXJuYXRpdmU6IHdoZW4gJ251bWJlcicgaXMgc2V0IGhpZ2hsaWdodCB0aGUgbnVtYmVyIG9mIHRoZSBjdXJyZW50CiAgICBsaW5lLgo3ICAgTWFrZSAiOnN0YXJ0aW5zZXJ0IiBjb21tYW5kIHdvcmsgZGlyZWN0bHkgZm9yIGZ1bmN0aW9ucyBhbmQgc2NyaXB0cz8KICAgIEFsc28gbWFrZSBpdCBwb3NzaWJsZSB0byBhcHBlbmQgKGl0J3MgZGlmZmljdWx0IGF0IGVuZCBvZiBsaW5lKS4KLSAgIFdoZW4gdXNpbmcgJ2luY3NlYXJjaCIgQ1RSTC1SIENUUkwtVyBnZXRzIHRoZSB3b3JkIHVuZGVyIHRoZSBjdXJzb3IsIGJ1dAogICAgdGhlIHBhcnQgdGhhdCBhbHJlYWR5IG1hdGNoZWQgaXMgZG91YmxlZCB0aGVuLiAgUmVtb3ZlIHRoZSBwYXJ0IG9mIHRoZQogICAgd29yZCB0aGF0IHdvdWxkIGJlIGRvdWJsZWQuICBNYWtlIGl0IHdvcmsgbGluZSBDVFJMLU4gaW4gSW5zZXJ0IG1vZGUuCi0gICBBZGQgTHVhIGludGVyZmFjZT8gKFdvbGZnYW5nIE9lcnRsKQotICAgIm9uZW1vcmUiIGZsYWcgaW4gJ3ZpcnR1YWxlZGl0JzogbW92ZSBjdXJzb3IgcGFzdCBlbmQgb2YgbGluZS4gIFBhdGNoIGJ5CiAgICBNYXR0aWFzIEZsb2RpbiAoMjAwNCBKdWwgMzApCi0gICBJbiBhIDpzIGNvbW1hbmQgbXVsdGktYnl0ZSBjaGFyYWN0ZXJzIHNob3VsZCBhbHNvIGJlIHVwcGVyL2xvd2VyIGNhc2VkCiAgICB3aXRoIFx1LCBcVSwgZXRjLgo4ICAgQWRkIGEgY29tbWFuZCB0byBqdW1wIHRvIGEgY2VydGFpbiBraW5kIG9mIHRhZy4gIEFsbG93IHRoZSB1c2VyIHRvIHNwZWNpZnkKICAgIHZhbHVlcyBmb3IgdGhlIG9wdGlvbmFsIGZpZWxkcy4gIEUuZy4sICI6dGFnIHNpemUgdHlwZT1tIi4KICAgIEFsc28gYWxsb3cgc3BlY2lmeWluZyB0aGUgZmlsZSBhbmQgY29tbWFuZCwgc28gdGhhdCB0aGUgcmVzdWx0IG9mCiAgICB0YWdsaXN0KCkgY2FuIGJlIHVzZWQuCgpBZGp1c3Qgc3JjL21haW4uYWFwIGZvciBpbnN0YWxsaW5nIG1hbnBhZ2VzIGxpa2UgaW4gTWFrZWZpbGUuCgpXaGVuIGVkaXRpbmcgYSBmaWxlIHdpdGggYm90aCB1dGYtOCBhbmQgbGF0aW4xIHRleHQgVmltIGFsd2F5cyBmYWxscyBiYWNrIHRvCmxhdGluMS4gIEFkZCBhIGNvbW1hbmQgdG8gY29udmVydCB0aGUgbGF0aW4xIGNoYXJhY3RlcnMgdG8gdXRmLTg/CiAgICA6dW5taXggdXRmLTgsbGF0aW4xIGZpbGVuYW1lCldvdWxkIG9ubHkgd29yayB3aGVuICdlbmNvZGluZycgaXMgdXRmLTguCkFsc286IGNvbW1hbmQgdG8gc2VhcmNoIGZvciBpbGxlZ2FsIHV0Zi04IGJ5dGUgc2VxdWVuY2U/CgpBbHNvIGdlbmVyYXRlIHRoZSAucGRiIGZpbGUgdGhhdCBjYW4gYmUgdXNlZCB0byBnZW5lcmF0ZSBhIHVzZWZ1bCBjcmFzaCByZXBvcnQKb24gTVMtV2luZG93cy4gKEdlb3JnZSBSZWlsbHkpCgpBZGQgc3RydG9sKCkgdG8gYXZvaWQgdGhlIHByb2JsZW1zIHdpdGggbGVhZGluZyB6ZXJvIGNhdXNpbmcgb2N0YWwgY29udmVyc2lvbi4KClRyeSBuZXcgUE9TSVggdGVzdHMsIG1hZGUgYWZ0ZXIgbXkgY29tbWVudHMuIChHZW9mZiBDbGFyZSwgMjAwNSBBcHJpbCA3KQpWZXJzaW9uIDEuNSBpcyBpbiB+L3NyYy9wb3NpeC8xLjUuIChMeW5uZSBDYW5hbCkKCkFkZCBhICd0b29sJyB3aW5kb3c6IGJlaGF2ZXMgbGlrZSBhIHByZXZpZXcgd2luZG93IGJ1dCB0aGVyZSBjYW4gYmUgc2V2ZXJhbC4KRG9uJ3QgY291bnQgaXQgaW4gb25seV9vbmVfd2luZG93KCkuIChBbGV4ZWkgQWxleGFuZHJvdikKCldpbjMyOiBQYXRjaCBmb3IgS29yZWFuIElNRS4gKFl1c3VuZywgMjAwNSBNYXJjaCAyMSkKCldoZW4gIj0gZXZhbHVhdGlvbiByZXN1bHRzIGluIGEgTGlzdCwgdXNlIGl0IGFzIGEgc2VxdWVuY2Ugb2YgbGluZXMuCgpTdXBwb3J0ICI6c2V0IHN5bnRheD1jcHAuZG94eWdlbiI/ICBTdWdnZXN0ZWQgcGF0Y2ggYnkgTWljaGFlbCBHZWRkZXMgKDkgQXVnCjIwMDQpLiAgU2hvdWxkIGFsc28gd29yayBmb3IgJ2ZpbGV0eXBlJy4KCkZvciBtYW5pcHVsYXRpbmcgYnVmZmVycyB3aXRob3V0IG9wZW5pbmcgYSBuZXcgd2luZG93LCBzdXBwb3J0IFZpcnR1YWwKd2luZG93cy4gIEV4YW1wbGU6CiAgICA6dmlydHdpbiBsZXQgbCA9IEdldEJ1ZkxpbmUoNCwgMTApCiAgICA6ZnVuIEdldEJ1ZkxpbmUoYnVmbnIsIGxudW0pCiAgICA6ICBleGUgImJ1ZmZlciAiIC4gYTpidWZucgogICAgOiAgcmV0dXJuIGdldGxpbmUobG51bSkKICAgIDplbmRmdW4KVGhlIGdldGxpbmUoKSBhbmQgc2V0bGluZSgpIGZ1bmN0aW9ucyBjb3VsZCB3b3JrIGZvciBvdGhlciBidWZmZXJzLCB1c2luZyBhClZpcnR1YWwgd2luZG93LgpBIFZpcnR1YWwgd2luZG93IG9ubHkgZXhpc3RzIGZvciBvbmUgY29tbWFuZC4gIFRoZXJlIGNhbiBiZSBzZXZlcmFsIChmb3IKbmVzdGVkIGNvbW1hbmRzKS4gIFRoZSB3aW5kb3cgd29ya3MgYXMgaWYgaXQgY29tZXMgYWZ0ZXIgdGhlIGxhc3Qgd2luZG93LCBzaXplCmlzIHRoZSBWaW0gd2luZG93IHNpemUsIGJ1dCBpdCdzIG5ldmVyIGRpc3BsYXllZC4KCldpbjMyOiBJbiB0aGUgZ2VuZXJhdGVkIGJhdGNoIGZpbGVzLCB1c2UgJFZJTVJVTlRJTUUgaWYgaXQncyBzZXQuICBFeGFtcGxlcyBieQpNYXRoaWFzIE1pY2hhZWxpcyAoMjAwNCBTZXAgNikKQWxzbyBwbGFjZSB2aW10dXRvci5iYXQgaW4gJXdpbmRpciU/CgpBZGQgZ3VpX21jaF9icm93c2VkaXIoKSBmb3IgTW90aWYsIE1hYyBPUy9YLgoKSFRNTCBpbmRlbnRpbmcgY2FuIGJlIHNsb3csIGZpbmQgb3V0IHdoeS4gIEFueSB3YXkgdG8gZG8gc29tZSBraW5kIG9mCnByb2ZpbGluZyBmb3IgVmltIHNjcmlwdD8gIEF0IGxlYXN0IGFkZCBhIGZ1bmN0aW9uIHRvIGdldCB0aGUgY3VycmVudCB0aW1lIGluCnVzZWMuICByZWx0aW1lKFtzdGFydCwgW2VuZF1dKQogICAgcmVsdGltZSgpLnNlYyA9PSBzZWNvbmRzLCByZWx0aW1lKCkudXNlYyA9IG1pY3Jvc2Vjb25kcwogICAgcmVsdGltZShzdGFydCkgY3VycmVudCB0aW1lIHJlbGF0aXZlIHRvIFtzdGFydF0KCWVjaG8gdGltZXN0cmluZyhyZWx0aW1lKHN0YXJ0KSwgMykgICgzIGlzIG5yIG9mIGRpZ2l0cyBhZnRlciBkb3QpCiAgICByZWx0aW1lKHN0YXJ0LCBlbmQpIGRpZmZlcmVuY2UgYmV0d2VlbiBzdGFydCBhbmQgZW5kClJlYWwgUHJvZmlsaW5nOgogICAgLSA6cHJvZmlsZSBzdGFydCAvdG1wL3NvbWVmaWxlICAoYXBwZW5kIGlmIGV4aXN0cykKICAgIC0gOnByb2ZpbGUgcGF1c2UKICAgIC0gOnByb2ZpbGUgcmVzdW1lCiAgICAtIDpwcm9maWxlIHN0b3AKICAgIC0gcGVyIGZ1bmN0aW9uIGxpbmUKICAgIC0gc2VsZiwgVmltIGFuZCB0b3RhbCB0aW1lIChpbmNsIHN5c3RlbSB0aW1lKQogICAgLSBkdW1wIHJlc3VsdHMgaW4gZmlsZSBvbiBleGl0IG9yIHdoZW4gc3RvcHBlZC4KCkFkZCBtb3JlIHRlc3RzIGZvciBhbGwgbmV3IGZ1bmN0aW9uYWxpdHkgaW4gVmltIDcuICBFc3BlY2lhbGx5IG5ldyBmdW5jdGlvbnMuCgpVcGRhdGVkIFJ1YnkgaW50ZXJmYWNlLiAoUnlhbiBQYXVsKQoKJ2Vycm9yZm9ybWF0JyBkb2NzIGFyZSBhIGJpdCB1bmNsZWFyLiAgU3VnZ2VzdGlvbnMgYnkgQ2hhcmxlcyBDYW1wYmVsbCAoMjAwNgpKYW4gNikKQWRkIGEgZmxhZyB0byBjaGVjayBmb3IgYSBtYXRjaCB3aXRoIHRoZSBuZXh0IGl0ZW0gZmlyc3Q/ICBIZWxwcyBmb3IKY29udGludWF0aW9uIGxpbmVzIHRoYXQgbWF5IGNvbnRhaW4ganVzdCBhYm91dCBhbnl0aGluZy4KCkF3YWl0aW5nIHVwZGF0ZWQgcGF0Y2hlczoKICAgIC0tLSBhd2FpdGluZyB1cGRhdGVkIHBhdGNoIC0tLQogICAgOCAgIEFkZCAiOm4iIHRvIGZuYW1lbW9kaWZ5KCk6IG5vcm1hbGl6ZSBwYXRoLCByZW1vdmUgIi4uLyIgd2hlbiBwb3NzaWJsZS4KCUFyaWMgQmx1bWVyIGhhcyBhIHBhdGNoIGZvciB0aGlzLgoJSGUgd2lsbCB1cGRhdGUgdGhlIHBhdGNoIGZvciA2LjMuCiAgICBBdXRvY29tbWFuZHM6CiAgICA3ICAgQ29tcGxldGlvbiBvZiBuZXR3b3JrIHNoYXJlcywgcGF0Y2ggYnkgWWFzdWhpcm8gTWF0c3Vtb3RvLgoJVXBkYXRlIDIwMDQgU2VwIDYuCglIb3cgZG9lcyB0aGlzIHdvcms/ICBNaXNzaW5nIGNvbW1lbnRzLgogICAgLQlnZXR0ZXh0KCkJVHJhbnNsYXRlIGEgbWVzc2FnZS4gIChQYXRjaCBmcm9tIFlhc3VoaXJvIE1hdHN1bW90bykKCQkJVXBkYXRlIDIwMDQgU2VwIDEwCgkJCUFub3RoZXIgcGF0Y2ggZnJvbSBFZHdhcmQgTC4gRm94ICgyMDA1IE5vdiAyNCkKCQkJU2VhcmNoIGluICdydW50aW1lcGF0aCc/CgkJCU1vcmUgZG9jcyBhYm91dCBob3cgdG8gdXNlIHRoaXMuCgkJCUhvdyB0byBnZXQgdGhlIG1lc3NhZ2VzIGludG8gdGhlIC5wbyBmaWxlcz8KICAgIC0tLSBkaWQgbm90IHJlc3BvbmQgKHlldCkgLS0KICAgIC0JUGF0Y2ggZm9yICdicmVha2luZGVudCcgb3B0aW9uOiByZXBlYXQgaW5kZW50IGZvciB3cmFwcGVkIGxpbmUuIChWYWNsYXYKCVNtaWxhdWVyLCAyMDA0IFNlcCAxMywgZml4IE9jdCAzMSkKCUFza2VkIGZvciBpbXByb3ZlbWVudHMgMjAwNCBEZWMgMjAuCiAgICA3ICAgTWFrZSAiNWRkIiBvbiBsYXN0LWJ1dC1vbmUtbGluZSBub3QgZGVsZXRlIGFueXRoaW5nIChWaSBjb21wYXRpYmxlKS4KCUFkZCBmbGFnIGluICdjcG9wdGlvbnMnIGZvciB0aGlzLiAgV2hlbiBub3QgcHJlc2VudCwgIjJkZCIgaW4gdGhlIGxhc3QKCWxpbmUgc2hvdWxkIGRlbGV0ZSB0aGUgbGFzdCBsaW5lLiAgUGF0Y2ggZnJvbSBncmVlbnggMjAwMiBBcHIgMTEuCiAgICA4ICAgQWRkIGEgZmV3IG1vcmUgY29tbWFuZCBuYW1lcyB0byB0aGUgbWVudXMuICBQYXRjaCBmcm9tIEppcmkgQnJlemluYQoJKDI4IGZlYiAyMDAyKS4KICAgIDcgICBBVFRFTlRJT04gZGlhbG9nIGNob2ljZXMgYXJlIG1vcmUgbG9naWNhbCB3aGVuICJEZWxldGUgaXQnIGFwcGVhcnMKCWJlZm9yZSAiUXVpdCIuICBQYXRjaCBieSBSb2JlcnQgV2ViYiwgMjAwNCBNYXkgMy4KICAgIC0gICBJbmNsdWRlIGZsaXBjYXNlIHBhdGNoOiB+L3ZpbS9wYXRjaGVzL3dhbGwuZmxpcGNhc2UyID8gIE1ha2UgaXQgd29yawoJZm9yIG11bHRpLWJ5dGUgY2hhcmFjdGVycy4KICAgIC0gICBXaW4zMjogYWRkIG9wdGlvbnMgdG8gcHJpbnQgZGlhbG9nLiAgUGF0Y2ggZnJvbSBWaXBpbiBBcmF2aW5kLgogICAgLSAgIFBhdGNoIHRvIGFkZCBoaWdobGlnaHRpbmcgZm9yIHdoaXRlc3BhY2UuIChUb20gU2NodW1tLCAyMDAzIEp1bCA1KQoJdXNlIHRoZSBwYXRjaCB0aGF0IGtlZXBzIHVzaW5nIEhMRl84IGlmIEhMRl9XUyBoYXMgbm90CgliZWVuIGdpdmVuIHZhbHVlcy4KCUFkZCBzZWN0aW9uIGluIGhlbHAgZmlsZXMgZm9yIHRoZXNlIGhpZ2hsaWdodCBncm91cHM/CiAgICA4ICAgImZnIiBhbmQgImJnIiBkb24ndCB3b3JrIGluIGFuIHh0ZXJtLiAgR2V0IGRlZmF1bHQgY29sb3JzIGZyb20geHRlcm0KCXdpdGggYW4gRVNDIHNlcXVlbmNlLiAgSWRlYXMgaW46IH4vdmltL3BhdGNoZXMvdmlrYXMueHRlcm1jb2xvcnMgLgogICAgNyAgIEFkZCAiRGVmYXVsdEZHIiBhbmQgIkRlZmF1bHRCRyIgZm9yIHRoZSBjb2xvcnMgb2YgdGhlIG1lbnUuIChNYXJjaW4KCURhbGVja2kgaGFzIGEgcGF0Y2ggZm9yIE1vdGlmIGFuZCBDYXJib24pCiAgICAtICAgQWRkIHBvc3NpYmlsaXR5IHRvIGhpZ2hsaWdodCBzcGVjaWZpYyBjb2x1bW5zIChmb3IgRm9ydHJhbikuICBPciBwdXQgYQoJbGluZSBpbiBiZXR3ZWVuIGNvbHVtbnMgKGUuZy4sIGZvciAndGV4dHdpZHRoJykuCglQYXRjaCB0byBhZGQgJ2hsY29sdW1uJyBmcm9tIFZpdCBTdHJhZGFsLCAyMDA0IE1heSAyMC4KICAgIDggICBBZGQgZnVuY3Rpb25zOgoJY29uZmlybSgpCQlhZGQgImZsYWdzIiBhcmd1bWVudCwgd2l0aCAndicgZm9yIHZlcnRpY2FsCgkJCQlsYXlvdXQgYW5kICdjJyBmb3IgY29uc29sZSBkaWFsb2cuIChIYWVnZykKCQkJCUZsZW1taW5nIE1hZHNlbiBoYXMgYSBwYXRjaCBmb3IgdGhlICdjJyBmbGFnCgkJCQkoMjAwMyBNYXkgMTMpCglyYWlzZXdpbigpCQlyYWlzZSBndmltIHdpbmRvdyAoc2VlIEhpZXJBc3Npc3QgcGF0Y2ggZm9yCgkJCQlUY2wgaW1wbGVtZW50YXRpb24gfi92aW0vSGllckFzc2lzdC8gKQogICAgNyAgIE1ha2UgZ2xvYnBhdGgoKSBhbHNvIHdvcmsgd2l0aCB1cHdhcmRzIHNlYXJjaC4gKEJyaWFuIE1lZGxleSkKICAgIDcgICBBZGQgcGF0Y2ggZnJvbSBCZW5vaXQgQ2VycmluYSB0byBpbnRlZ3JhdGUgVmltIGFuZCBQZXJsIGZ1bmN0aW9ucwoJYmV0dGVyLiAgTm93IGFsc28gd29ya3MgZm9yIFJ1YnkgKDIwMDEgTm92IDEwKQogICAgLSAgIFBhdGNoIGZyb20gSGVyY3VsYW5vIGRlIExpbWEgRWlubG9mdCBOZXRvIGZvciBiZXR0ZXIgZm9ybWF0dGluZyBvZiB0aGUKCXF1aWNrZml4IHdpbmRvdyAoMjAwNCBkZWMgMikKICAgIDcgICBXaGVuICdyaWdodGxlZnQnIGlzIHNldCwgdGhlIHNlYXJjaCBwYXR0ZXJuIHNob3VsZCBiZSBkaXNwbGF5ZWQgcmlnaHQKCXRvIGxlZnQgYXMgd2VsbD8gIFNlZSBwYXRjaCBvZiBEZWMgMjYuIChOYWRpbSBTaGFpa2xpKQogICAgOCAgIExvY2sgYWxsIHVzZWQgbWVtb3J5IHNvIHRoYXQgaXQgZG9lc24ndCBnZXQgc3dhcHBlZCB0byBkaXNrICh1bmNyeXB0ZWQpLgoJUGF0Y2ggYnkgSmFzb24gSG9sdCwgMjAwMyBNYXkgMjMuICBVc2VzIG1sb2NrLgogICAgNyAgIFN1cHBvcnQgYSBzdHJvbmdlciBlbmNyeXB0aW9uLiAgSmFzb24gSG9sdCBpbXBsZW1lbnRlZCBBRVMgKE1heSA2IDIwMDMpLgogICAgNyAgIEFkZCAhIHJlZ2lzdGVyLCBmb3Igc2hlbGwgY29tbWFuZHMuIChwYXRjaCBmcm9tIEdyZW5pZSkKICAgIDggICBJbiB0aGUgZ3ppcCBwbHVnaW4sIGFsc28gcmVjb2duaXplICouZ3oub3JpZywgKi5nei5iYWssIGV0Yy4gIExpa2UgaXQncwoJZG9uZSBmb3IgZmlsZXR5cGUgZGV0ZWN0aW9uLiAgUGF0Y2ggZnJvbSBXYWx0ZXIgQnJpc2NvZSwgMjAwMyBKdWwgMS4KICAgIDcgICBBZGQgYSAiLUAgZmlsZWxpc3QiIGFyZ3VtZW50OiByZWFkIGZpbGUgbmFtZXMgZnJvbSBhIGZpbGUuIChEYXZpZAoJS290Y2hhbiBoYXMgYSBwYXRjaCBmb3IgaXQpCiAgICA4ICAgSW5jbHVkZSBhIGNvbm5lY3Rpb24gdG8gYW4gZXh0ZXJuYWwgcHJvZ3JhbSB0aHJvdWdoIGEgcGlwZT8gIFNlZQoJcGF0Y2hlcyBmcm9tIEZlbGJpbmdlciBmb3IgYSBtYXRoZW1hdGljYSBpbnRlcmZhY2UuCglPciB1c2UgZW1hY3Mgc2VydmVyIGtpbmQgb2YgdGhpbmc/CiAgICA3ICAgQWRkICI6anVzdGlmeSIgY29tbWFuZC4gIFBhdGNoIGZyb20gVml0IFN0cmFkYWwgMjAwMiBOb3YgMjUuCiAgICAtICAgZmluZG1hdGNoKCkgc2hvdWxkIGJlIGFkanVzdGVkIGZvciBMaXNwLiAgU2VlIHJlbWFyayBhdAoJZ2V0X2xpc3BfaW5kZW50KCkuICBFc3AuIFwoIGFuZCBcKSBzaG91bGQgYmUgc2tpcHBlZC4gKERvcmFpIFNpdGFyYW0sCglpbmNvbXBsZXRlIHBhdGNoIE1hciAxOCkKICAgIC0JU2V0IHVzZXIgdmFyaWFibGVzIHRvIHRoZSBuYW1lcyBvZiB0aGUgYWN0dWFsbHkgdXNlZCB1c2VyIHZpbXJjIGZpbGUsCgl0aGUgZmlyc3QgZGlyZWN0b3J5IGxvb2tlZCBmb3IgdXNlciBwbHVnaW5zL3N5bnRheCBmaWxlcy4KCSRNWVZJTVJDIGZvciAudmltcmMsICRNWUdWSU1SQyBmb3IgLmd2aW1yYywgJE1ZUlVOVElNRS9wbHVnaW4gZm9yCglydW50aW1lIGZpbGVzPwoJQWxzbzogd2hlbiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgZXhpc3RzLCB1c2UgaXQuICBJZiBpdCBkb2Vzbid0CglleGlzdCwgc2V0IGl0LiAgUmVxdWlyZXMgZ29vZCBuYW1lczogJFZJTV9VU0VSX1ZJTVJDICAkVklNX1VTRVJfRElSCiAgICAtCVRoZSBSZXBsYWNlIGRpYWxvZyB0YWtlcyAiXHIiIGxpdGVyYWwsIHVubGVzcyAicmVwbGFjZSBhbGwiIGlzIHVzZWQuCglOZWVkIHRvIGVzY2FwZSBiYWNrc2xhc2hlcy4KICAgICAgICBXaW4zMjogdGhlIHRleHQgdG8gcmVwbGFjZSB3aXRoIGlzbid0IHJlbWVtYmVyZWQuCiAgICAtCUZvciBHVUkgRmluZC9SZXBsYWNlIGRpYWxvZyBzdXBwb3J0IHVzaW5nIGEgcmVnZXhwLiAgUGF0Y2ggZm9yIE1vdGlmCglhbmQgR1RLIGJ5IGRlZ3JlbmVpciAobm92IDEwIGFuZCBub3YgMTgpLgoKUGF0Y2ggZm9yICJwYXJhbm9pZCBtb2RlIiBieSBLZXZpbiBDb2xsaW5zLCBNYXJjaCA3LiAgTmVlZHMgbXVjaCBtb3JlIHdvcmsuCgpDaGVjayBpZiBmaWxlIGV4cGxvcmVyIGNhbiBoYW5kbGUgZGlyZWN0b3J5IG5hbWVzIGFuZCBsaW5rcyB3aXRoIGEgc2luZ2xlCnF1b3RlLiAoTmlla28gTWFhdGplcywgMjAwNSBKYW4gNCkKCgpWaSBpbmNvbXBhdGliaWxpdHk6CjggICBXaXRoIHVuZG8vcmVkbyBvbmx5IG1hcmtzIGluIHRoZSBjaGFuZ2VkIGxpbmVzIHNob3VsZCBiZSBjaGFuZ2VkLiAgT3RoZXIKICAgIG1hcmtzIHNob3VsZCBiZSBrZXB0LiAgVmkga2VlcHMgZWFjaCBtYXJrIGF0IHRoZSBzYW1lIHRleHQsIGV2ZW4gd2hlbiBpdAogICAgaXMgZGVsZXRlZCBvciByZXN0b3JlZC4gKFdlYmIpCiAgICBBbHNvOiBBIG1hcmsgaXMgbG9zdCBhZnRlcjogbWFrZSBjaGFuZ2UsIHVuZG8sIHJlZG8gYW5kIHVuZG8uCiAgICBFeGFtcGxlOiAie2QnJyIgdGhlbiAidSIgdGhlbiAiZCcnIjogZGVsZXRlcyBhbiBleHRyYSBsaW5lLCBiZWNhdXNlIHRoZSAnJwogICAgcG9zaXRpb24gaXMgb25lIGxpbmUgZG93bi4gKFZlc2VsaW5vdmljKQo4ICAgV2hlbiBzdGRpbiBpcyBub3QgYSB0dHksIGFuZCBWaW0gcmVhZHMgY29tbWFuZHMgZnJvbSBpdCwgYW4gZXJyb3Igc2hvdWxkCiAgICBtYWtlIFZpbSBleGl0Lgo3ICAgVW5peCBWaW0gKG5vdCBndmltKTogVHlwaW5nIENUUkwtQyBpbiBFeCBtb2RlIHNob3VsZCBmaW5pc2ggdGhlIGxpbmUKICAgIChjdXJyZW50bHkgeW91IGNhbiBjb250aW51ZSB0eXBpbmcsIGJ1dCBpdCdzIHRydW5jYXRlZCBsYXRlciBhbnl3YXkpLgogICAgUmVxdWlyZXMgYSB3YXkgdG8gbWFrZSBDVFJMLUMgaW50ZXJydXB0IHNlbGVjdCgpIHdoZW4gaW4gY29va2VkIGlucHV0Lgo4ICAgV2hlbiBsb2FkaW5nIGEgZmlsZSBpbiB0aGUgLmV4cmMsIFZpIGxvYWRzIHRoZSBhcmd1bWVudCBhbnl3YXkuICBWaW0gc2tpcHMKICAgIGxvYWRpbmcgdGhlIGFyZ3VtZW50IGlmIHRoZXJlIGlzIGEgZmlsZSBhbHJlYWR5LiAgV2hlbiBubyBmaWxlIGFyZ3VtZW50CiAgICBnaXZlbiwgVmkgc3RhcnRzIHdpdGggYW4gZW1wdHkgYnVmZmVyLCBWaW0ga2VlcHMgdGhlIGxvYWRlZCBmaWxlLiAoQmVhcmRlZCkKNiAgIEluIEluc2VydCBtb2RlLCB3aGVuIHVzaW5nIDxCUz4gb3IgPERlbD4sIGRvbid0IHdpcGUgb3V0IHRoZSB0ZXh0LCBidXQKICAgIG9ubHkgbW92ZSBiYWNrIHRoZSBjdXJzb3IuCUJlaGF2ZXMgbGlrZSAnJCcgaW4gJ2Nwb3B0aW9ucycuICBVc2UgYSBmbGFnCiAgICBpbiAnY3BvcHRpb25zJyB0byBzd2l0Y2ggdGhpcyBvbi9vZmYuCjggICBXaGVuIGVkaXRpbmcgYSBmaWxlIHdoaWNoIGlzIGEgc3ltYm9saWMgbGluaywgYW5kIHRoZW4gb3BlbmluZyBhbm90aGVyCiAgICBzeW1ib2xpYyBsaW5rIG9uIHRoZSBzYW1lIGZpbGUsIFZpbSB1c2VzIHRoZSBuYW1lIG9mIHRoZSBmaXJzdCBvbmUuCiAgICBBZGp1c3QgdGhlIGZpbGUgbmFtZSBpbiB0aGUgYnVmZmVyIHRvIHRoZSBsYXN0IG9uZSB1c2VkPyAgVXNlIHNldmVyYWwgZmlsZQogICAgbmFtZXMgaW4gb25lIGJ1ZmZlcj8/PwogICAgQWxzbzogV2hlbiBmaXJzdCBlZGl0aW5nIGZpbGUgInRlc3QiLCB3aGljaCBpcyBzeW1saW5rIHRvICJ0ZXN0MiIsIGFuZAogICAgdGhlbiBlZGl0aW5nICJ0ZXN0MiIsIHlvdSBlbmQgdXAgZWRpdGluZyBidWZmZXIgInRlc3QiIGFnYWluLiAgSXQncyBub3QKICAgIGxvZ2ljYWwgdGhhdCB0aGUgbmFtZSB0aGF0IHdhcyBmaXJzdCB1c2VkIHN0aWNrcyB3aXRoIHRoZSBidWZmZXIuCjcgICBUaGUgIjp1bmRvIiBjb21tYW5kIHdvcmtzIGRpZmZlcmVudGx5IGluIEV4IG1vZGUuICBFZGl0IGEgZmlsZSwgbWFrZSBzb21lCiAgICBjaGFuZ2VzLCAiUSIsICJ1bmRvIiBhbmQgX2FsbF8gY2hhbmdlcyBhcmUgdW5kb25lLCBsaWtlIHRoZSAiOnZpc3VhbCIKICAgIGNvbW1hbmQgd2FzIG9uZSBjb21tYW5kLgogICAgT24gdGhlIG90aGVyIGhhbmQsIGFuICI6dW5kbyIgY29tbWFuZCBpbiBhbiBFeCBzY3JpcHQgb25seSB1bmRvZXMgdGhlIGxhc3QKICAgIGNoYW5nZSAoZS5nLiwgdXNlIHR3byA6YXBwZW5kIGNvbW1hbmRzLCB0aGVuIDp1bmRvKS4KNyAgIFRoZSAiOm1hcCIgY29tbWFuZCBvdXRwdXQgb3ZlcndyaXRlcyB0aGUgY29tbWFuZC4gIFBlcmhhcHMgaXQgc2hvdWxkIGtlZXAKICAgIHRoZSAiOm1hcCIgd2hlbiBpdCdzIHVzZWQgd2l0aG91dCBhcmd1bWVudHM/CjcgICBDVFJMLUwgaXMgbm90IHRoZSBlbmQgb2YgYSBzZWN0aW9uPyAgSXQgaXMgZm9yIFBvc2l4ISAgTWFrZSBpdCBhbiBvcHRpb24uCjcgICBJbXBsZW1lbnQgJ3Byb21wdCcgb3B0aW9uLglJbml0IHRvIG9mZiB3aGVuIHN0ZGluIGlzIG5vdCBhIHR0eS4KNyAgIENUUkwtVCBpbiBJbnNlcnQgbW9kZSBpbnNlcnRzICdzaGlmdHdpZHRoJyBvZiBzcGFjZXMgYXQgdGhlIGN1cnNvci4gIEFkZCBhCiAgICBmbGFnIGluICdjcG9wdGlvbnMnIGZvciB0aGlzLgo3ICAgQWRkIGEgd2F5IHRvIHNlbmQgYW4gZW1haWwgZm9yIGEgY3Jhc2hlZCBlZGl0IHNlc3Npb24uICBDcmVhdGUgYSBmaWxlIHdoZW4KICAgIG1ha2luZyBjaGFuZ2VzIChjb250YWluaW5nIG5hbWUgb2YgdGhlIHN3YXAgZmlsZSksIGRlbGV0ZSBpdCB3aGVuIHdyaXRpbmcKICAgIHRoZSBmaWxlLiAgU3VwcGx5IGEgcHJvZ3JhbSB0aGF0IGNhbiBjaGVjayBmb3IgY3Jhc2hlZCBzZXNzaW9ucyAoZWl0aGVyCiAgICBhbGwsIGZvciBhIHN5c3RlbSBzdGFydHVwLCBvciBmb3Igb25lIHVzZXIsIGZvciBpbiBhIC5sb2dpbiBmaWxlKS4KNyAgIFZpIGRvZXNuJ3QgZG8gYXV0b2luZGVudGluZyB3aGVuIGlucHV0IGlzIG5vdCBmcm9tIGEgdHR5IChpbiBFeCBtb2RlKS4KNyAgICJ6MzxDUj4iIHNob3VsZCBzdGlsbCB1c2UgdGhlIHdob2xlIHdpbmRvdywgYnV0IG9ubHkgcmVkaXNwbGF5IDMgbGluZXMuCjcgICAiOnRhZyB4eCIgc2hvdWxkIG1vdmUgdGhlIGN1cnNvciB0byB0aGUgZmlyc3Qgbm9uLWJsYW5rLiAgT3Igc2hvdWxkIGl0IGdvCiAgICB0byB0aGUgbWF0Y2ggd2l0aCB0aGUgdGFnPwlPcHRpb24/CjcgICBJbXBsZW1lbnQgJ2F1dG9wcmludCcvJ2FwJyBvcHRpb24uCjcgICBBZGQgZmxhZyBpbiAnY3BvcHRpb25zJyB0aGF0IG1ha2VzIDxCUz4gYWZ0ZXIgYSBjb3VudCB3b3JrIGxpa2UgPERlbD4KICAgIChTYXlyZSkuCjcgICBBZGQgZmxhZyBpbiAnY3BvcHRpb25zJyB0aGF0IG1ha2VzIG9wZXJhdG9yICh5YW5rLCBmaWx0ZXIpIG5vdCBtb3ZlIHRoZQogICAgY3Vyc29yLCBhdCBsZWFzdCB3aGVuIGNhbmNlbGxlZC4gKGRlZmF1bHQgVmkgY29tcGF0aWJsZSkuCjcgICBUaGlzIFZpLXRyaWNrIGRvZXNuJ3Qgd29yazogIlEiIHRvIGdvIHRvIEV4IG1vZGUsIHRoZW4gImcvcGF0dGVybi92aXN1YWwiLgogICAgSW4gVmkgeW91IGNhbiBlZGl0IGluIHZpc3VhbCBtb2RlLCBhbmQgd2hlbiBkb2luZyAiUSIgeW91IGp1bXAgdG8gdGhlIG5leHQKICAgIG1hdGNoLiAgTnZpIGNhbiBkbyBpdCB0b28uCjcgICBTdXBwb3J0ICdcJyBmb3IgbGluZSBjb250aW51YXRpb24gaW4gRXggbW9kZSBmb3IgdGhlc2UgY29tbWFuZHM6IChMdWVia2luZykKCWcvLi9hXAkJICAgIGcvcGF0dGVybjEvIHMvcGF0dGVybjIvcmVwMVxcCglsaW5lIDFcCQkgICAgbGluZSAyXFwKCWxpbmUgMlwJCSAgICBsaW5lIDNcXAoJLgkJICAgIGxpbmU0Lwo2ICAgIjplIC90bXAvJHR0eSIgZG9lc24ndCB3b3JrLiAgIjplICR1aWQiIGRvZXMuICBJcyAkdHR5IG5vdCBzZXQgYmVjYXVzZSBvZgogICAgdGhlIHdheSB0aGUgc2hlbGwgaXMgc3RhcnRlZD8KNiAgIFZpIGNvbXBhdGliaWxpdHkgKG9wdGlvbmFsKTogbWFrZSAiaWE8Q1I+PEVTQz4xMC4iIGRvIHRoZSBzYW1lIHN0cmFuZ2UKICAgIHRoaW5nLiAgKG9ubHkgcmVwZWF0IGluc2VydCBmb3IgdGhlIGZpcnN0IGxpbmUpLgoKCkdUSysgMSAoT0sgaW4gR1RLIDIpOgo4ICAgV2hlbiBtZW51cyBhcmUgZGlzYWJsZWQsICdtJyByZW1vdmVkIGZyb20gJ2d1aW9wdGlvbnMnLCBBbHQtRiBzdGlsbCBwb3BzCiAgICB1cCB0aGUgRmlsZSBtZW51LiAgQ2Fubm90IHJlcHJvZHVjZSB0aGlzOiBnaXZlcyBhIHdhcm5pbmcgZm9yIGEgTlVMTAogICAgcG9pbnRlciBpZiB0aGUgbWVudSB3YXMgbmV2ZXIgZGlzcGxheWVkLgo4ICAgV2hlbiB1c2luZyAiZ3ZpbSAtZ2VvbSA0MHgzMCIgb3Igc2V0dGluZyAnY29sdW1ucycgaW4gLmd2aW1yYyBvciB3aXRoIGEKICAgIEdVSUVudGVyIGF1dG9jb21tYW5kLCB0aGUgd2lkdGggaXMgc3RpbGwgc2V0IHRvIGZpdCB0aGUgdG9vbGJhci4gIEFsc28KICAgIGhhcHBlbnMgd2hlbiBjaGFuZ2luZyB0aGUgZm9udC4gIEhvdyB0byBhdm9pZCB0aGF0IHRoZSB0b29sYmFyIHNwZWNpZmllcwogICAgdGhlIG1pbmltYWwgd2luZG93IHdpZHRoPwo4ICAgV2hlbiB1c2luZyBhIHRoZW1lIHdpdGggZGlmZmVyZW50IHNjcm9sbGJhcnMgKGd0a3N0ZXApLCB0aGUgc2Nyb2xsYmFycyBjYW4KICAgIGJlIHRvbyBuYXJyb3cuIChEcmF6ZW4gS2FjYXIpCjggICBGb250ICI3eDE0IiBoYXMgYSBib2xkIHZlcnNpb24gIjd4MTRib2xkIi4gIFRyeSB0byBmaW5kIHRoZSBib2xkIGZvbnQgYnkKICAgIGFwcGVuZGluZyAiYm9sZCIgd2hlbiB0aGVyZSBhcmUgbm90IDE0IGRhc2hlcy4KCkdUSysgR1VJIGtub3duIGJ1Z3M6CjggICBHVEsgMjogQ29tYmluaW5nIFVURi04IGNoYXJhY3RlcnMgbm90IGRpc3BsYXllZCBwcm9wZXJseSBpbiBtZW51cyAoTWlrb2xhagogICAgTWFjaG93c2tpKSAgVGhleSBhcmUgZGlzcGxheWVkIGFzIHNlcGFyYXRlIGNoYXJhY3RlcnMuICBQcm9ibGVtIGluCiAgICBjcmVhdGluZyBhIGxhYmVsPwo4ICAgR1RLIDI6IENvbWJpbmluZyBVVEYtOCBjaGFyYWN0ZXJzIGFyZSBzb21ldGltZXMgbm90IGRyYXduIHByb3Blcmx5LgogICAgRGVwZW5kcyBvbiB0aGUgZm9udCBzaXplLCAibW9ub3NwYWNlIDEzIiBoYXMgdGhlIHByb2JsZW0uICBWaW0gc2VlbXMgdG8gZG8KICAgIGV2ZXJ5dGhpbmcgcmlnaHQsIG11c3QgYmUgYSBHVEsgYnVnLiAgSXMgdGhlcmUgYSB3YXkgdG8gd29yayBhcm91bmQgaXQ/CjkgICBDYW4ndCBwYXN0ZSBhIFZpc3VhbCBzZWxlY3Rpb24gZnJvbSBHVEstZ3ZpbSB0byB2aW0gaW4geHRlcm0gb3IgTW90aWYgZ3ZpbQogICAgd2hlbiBpdCBpcyBsb25nZXIgdGhhbiA0MDAwIGNoYXJhY3RlcnMuICBXb3JrcyBPSyBmcm9tIGd2aW0gdG8gZ3ZpbSBhbmQKICAgIHZpbSB0byB2aW0uICBQYXN0aW5nIHRocm91Z2ggeHRlcm0gKHVzaW5nIHRoZSBzaGlmdCBrZXkpIGFsc28gd29ya3MuCiAgICBJdCBzdGFydHMgd29ya2luZyBhZnRlciBHVEsgZ3ZpbSBsb3NlcyB0aGUgc2VsZWN0aW9uIGFuZCBnYWlucyBpdCBhZ2Fpbi4KCldpbjMyIEdVSSBrbm93biBidWdzOgo4ICAgT24gV2luZG93cyA5OCB0aGUgdW5pY293cyBsaWJyYXJ5IGlzIG5lZWRlZCB0byBzdXBwb3J0IGZ1bmN0aW9ucyB3aXRoIFVDUzIKICAgIGZpbGUgbmFtZXMuICBDYW4gd2UgbG9hZCB1bmljb3dzLmRsbCBkeW5hbWljYWxseT8KOCAgIFRoZSAtUCBhcmd1bWVudCBkb2Vzbid0IHdvcmsgdmVyeSB3ZWxsIHdpdGggbWFueSBNREkgYXBwbGljYXRpb25zLgogICAgVGhlIGxhc3QgYXJndW1lbnQgb2YgQ3JlYXRlV2luZG93RXgoKSBzaG91bGQgYmUgdXNlZCwgc2VlIE1TRE4gZG9jcy4KICAgIFR1dG9yaWFsOiBodHRwOi8vd2luMzJhc3NlbWJseS5vbmxpbmUuZnIvdHV0MzIuaHRtbAo4ICAgSW4gZXZhbC5jLCBpby5oIGlzIGluY2x1ZGVkIHdoZW4gTVNXSU4zMiBpcyBkZWZpbmVkLiAgU2hvdWxkbid0IHRoaXMgYmUKICAgIFdJTjMyPyAgT3IgY2FuIGluY2x1ZGluZyBpby5oIGJlIG1vdmVkIHRvIHZpbS5oPyAoRGFuIFNoYXJwKQo3ICAgV2luZG93cyBYUDogV2hlbiB1c2luZyAiQ2xlYXJUeXBlIiBmb3IgdGV4dCBzbW9vdGhpbmcsIGEgY29sdW1uIG9mIHllbGxvdwogICAgcGl4ZWxzIHJlbWFpbnMgd2hlbiB0eXBpbmcgc3BhY2VzIGluIGZyb250IG9mIGEgIkQiICgnZ3VpZm9udCcgc2V0IHRvCiAgICAibHVjaWRhX2NvbnNvbGU6aDgiKS4KNiAgIFdpbjMyIEdVSTogV2l0aCAiLXUgTk9ORSAtVSBOT05FIiBhbmQgZG9pbmcgIkNUUkwtVyB2IiAiQ1RSTC1XIG8iLCB0aGUgIjoiCiAgICBvZiAiOm9ubHkiIGlzIGhpZ2hsaWdodGVkIGxpa2UgdGhlIGN1cnNvci4gIChMaXBlbGlzKQo4ICAgV2hlbiAnZW5jb2RpbmcnIGlzICJ1dGYtOCIsIHNob3VsZCB1c2UgJ2d1aWZvbnQnIGZvciBib3RoIG5vcm1hbCBhbmQgd2lkZQogICAgY2hhcmFjdGVycyB0byBtYWtlIEFzaWFuIGxhbmd1YWdlcyB3b3JrLiAgV2luMzIgZm9udHMgY29udGFpbiBib3RoCiAgICB0eXBlIG9mIGNoYXJhY3RlcnMuCjcgICBXaGVuIGZvbnQgc21vb3RoaW5nIGlzIGVuYWJsZWQsIHJlZHJhd2luZyBjYW4gYmVjb21lIHZlcnkgc2xvdy4gIFRoZSByZWFzb24KICAgIGFwcGVhcnMgdG8gYmUgZHJhd2luZyB3aXRoIGEgdHJhbnNwYXJlbnQgYmFja2dyb3VuZC4gIFdvdWxkIGl0IGJlIHBvc3NpYmxlCiAgICB0byB1c2UgYW4gb3BhcXVlIGJhY2tncm91bmQgaW4gbW9zdCBwbGFjZXM/CjggICBVc2UgYW5vdGhlciBkZWZhdWx0IGZvciAndGVybWVuY29kaW5nJzogdGhlIGFjdGl2ZSBjb2RlcGFnZS4gIE1lYW5zIHRoYXQKICAgIHdoZW4gJ2VuY29kaW5nJyBpcyBjaGFuZ2VkIHR5cGluZyBjaGFyYWN0ZXJzIHN0aWxsIHdvcmtzIHByb3Blcmx5LgogICAgQWx0ZXJuYXRpdmU6IHVzZSB0aGUgVW5pY29kZSBmdW5jdGlvbnMgdG8gb2J0YWluIHR5cGVkIGNoYXJhY3RlcnMuCjggICBXaW4zMjogTXVsdGktYnl0ZSBjaGFyYWN0ZXJzIGFyZSBub3QgZGlzcGxheWVkLCBldmVuIHRob3VnaCB0aGUgc2FtZSBmb250CiAgICBpbiBOb3RlcGFkIGNhbiBkaXNwbGF5IHRoZW0uIChTcmluYXRoIEF2YWRoYW51bGEpICBUcnkgd2l0aCB0aGUKICAgIFVURi04LWRlbW8udHh0IHBhZ2Ugd2l0aCBBbmRhbGUgTW9uby4KNyAgIFRoZSBjdXJzb3IgY29sb3IgaW5kaWNhdGluZyBJTUUgbW9kZSBkb2Vzbid0IHdvcmsgcHJvcGVybHkuIChTaGl6aHUgUGFuLAogICAgMjAwNCBNYXkgOSkKOCAgIFdpbjMyOiBXaGVuIGNsaWNraW5nIG9uIHRoZSBndmltIHRpdGxlIGJhciwgd2hpY2ggZ2l2ZXMgaXQgZm9jdXMsIHByb2R1Y2VzCiAgICBhIGZpbGUtY2hhbmdlZCBkaWFsb2csIGFmdGVyIGNsaWNraW5nIG9uIGEgYnV0dG9uIGluIHRoYXQgZGlhbG9nIHRoZSBndmltCiAgICB3aW5kb3cgZm9sbG93cyB0aGUgbW91c2UuICBUaGUgYnV0dG9uLXVwIGV2ZW50IGlzIGxvc3QuICBPbmx5IHdpdGgKICAgIE1TLVdpbmRvd3MgOTg/CiAgICBUcnkgdGhpczogIjpzZXQgc3cgdHMiLCBnZXQgZW50ZXItcHJvbXB0LCB0aGVuIGNoYW5nZSB0aGUgZmlsZSBpbiBhCiAgICBjb25zb2xlLCBnbyBiYWNrIHRvIFZpbSBhbmQgY2xpY2sgInJlbG9hZCIgaW4gdGhlIGRpYWxvZyBmb3IgdGhlIGNoYW5nZWQKICAgIGZpbGU6IFdpbmRvdyBtb3ZlcyB3aXRoIHRoZSBjdXJzb3IhCiAgICBQdXQgZm9jdXMgZXZlbnQgaW4gaW5wdXQgYnVmZmVyIGFuZCBsZXQgZ2VuZXJpYyBWaW0gY29kZSBoYW5kbGUgaXQ/CjggICBXaGVuIGFjdGl2YXRpbmcgdGhlIFZpbSB3aW5kb3cgd2l0aCBtb3VzZSBjbGljaywgZG9uJ3QgbW92ZSBjdXJzb3IgdG8KICAgIG1vdXNlIHBvc2l0aW9uLiAgQ2F0Y2ggV01fTU9VU0VBQ1RJVkFURS4gKEx1ZXZlbHNtZXllcikKOCAgIFdpbjMyOiBXaGVuIG1vdXNlIGlzIGhpZGRlbiBhbmQgaW4gdGhlIHRvb2xiYXIsIG1vdmluZyBpdCB3b24ndCBtYWtlIGl0CiAgICBhcHBlYXIuIChTYW1pIFNhbG9uZW4pCjggICBXaW5kb3dzIE5UOiB3cml0aW5nIHRvIGF1eC4qIG1ha2VzIFZpbSBoYW5nLiAoQWNldmVkbykKOCAgIFdpbjMyIEdVSTogV2l0aCBtYXhpbWl6ZWQgd2luZG93LCAiOnNldCBnby09ciIgZG9lc24ndCB1c2UgdGhlIHNwYWNlIHRoYXQKICAgIGNvbWVzIGF2YWlsYWJsZS4gKFBvdWNldCkgIEl0IHdvcmtzIE9LIG9uIFdpbiA5OCBidXQgZG9lc24ndCB3b3JrIG9uIFdpbgogICAgTlQgNC4wLiAgTGVhdmVzIGEgZ3JleSBhcmVhIHdoZXJlIHRoZSBzY3JvbGxiYXIgd2FzLiAgIjpzZXQgZ28rPXIiIGFsc28KICAgIGRvZXNuJ3Qgd29yayBwcm9wZXJseS4KOCAgIFdoZW4gVmltIGlzIG1pbmltaXplZCBhbmQgd2hlbiBtYXhpbWl6aW5nIGl0IGEgZmlsZS1jaGFuZ2VkIGRpYWxvZyBwb3BzCiAgICB1cCwgVmltIGlzbid0IG1heGltaXplZC4gIEl0IHNob3VsZCBiZSBkb25lIGJlZm9yZSB0aGUgZGlhbG9nLCBzbyB0aGF0IGl0CiAgICBhcHBlYXJzIGluIHRoZSByaWdodCBwb3NpdGlvbi4gKFdlYmIpCjkgICBXaGVuIHNlbGVjdGluZyBhdCB0aGUgbW9yZS1wcm9tcHQgb3IgaGl0LWVudGVyLXByb21wdCwgdGhlIHJpZ2h0IG1vdXNlCiAgICBidXR0b24gZG9lc24ndCBnaXZlIHBvcHVwIG1lbnUuCiAgICBBdCB0aGUgaGl0LWVudGVyIHByb21wdCBDVFJMLVkgZG9lc24ndCB3b3JrIHRvIGNvcHkgdGhlIG1vZGVsZXNzCiAgICBzZWxlY3Rpb24uCiAgICBPbiB0aGUgY29tbWFuZCBsaW5lLCBkb24ndCBnZXQgYSBwb3B1cCBtZW51IGZvciB0aGUgcmlnaHQgbW91c2UgYnV0dG9uLgogICAgTGV0IHRoZSBtaWRkbGUgYnV0dG9uIHBhc3RlIHNlbGVjdGVkIHRleHQgKG5vdCB0aGUgY2xpcGJvYXJkIGJ1dCB0aGUKICAgIG5vbi1WaXN1YWwgc2VsZWN0aW9uKT8gIE90aGVyd2lzZSBDVFJMLVkgaGFzIHRvIGJlIHVzZWQgdG8gY29weSB0aGUgdGV4dC4KOCAgIFdoZW4gJ2dyZXBwcmcnIGRvZXNuJ3QgZXhlY3V0ZSwgdGhlIGVycm9yIG9ubHkgZmxhc2hlcyBieSwgdGhlCiAgICB1c2VyIGNhbiBoYXJkbHkgc2VlIHdoYXQgaXMgd3JvbmcuIChNb29yZSkKICAgIENvdWxkIHVzZSB2aW1ydW4gd2l0aCBhbiAiLW5vd2FpdCIgYXJndW1lbnQgdG8gb25seSB3YWl0IHdoZW4gYW4gZXJyb3IKICAgIG9jY3VycywgYnV0ICJjb21tYW5kLmNvbSIgZG9lc24ndCByZXR1cm4gYW4gZXJyb3IgY29kZS4KOCAgIFdoZW4gdGhlICdzaGVsbCcgY2Fubm90IGJlIGV4ZWN1dGVkLCBzaG91bGQgZ2l2ZSBhbiBhcHByb3ByaWF0ZSBlcnJvciBtc2cuCiAgICBFc3AuIGZvciBhIGZpbHRlciBjb21tYW5kLCBjdXJyZW50bHkgaXQgb25seSBjb21wbGFpbnMgdGhlIGZpbGUgY291bGQgbm90CiAgICBiZSByZWFkLgo3ICAgQWRkIGFuIG9wdGlvbiB0byBhZGQgb25lIHBpeGVsIGNvbHVtbiB0byB0aGUgY2hhcmFjdGVyIHdpZHRoPyAgTHVjaWRhCiAgICBDb25zb2xlIGl0YWxpYyBpcyB3aWRlciB0aGFuIHRoZSBub3JtYWwgZm9udCAoImQiIG92ZXJsYXBzIHdpdGggbmV4dCBjaGFyKS4KICAgIE9wcG9zaXRlIG9mICdsaW5lc3BhY2UnOiAnY29sdW1uc3BhY2UnLgo3ICAgQXQgdGhlIGhpdC1lbnRlciBwcm9tcHQgc2Nyb2xsaW5nIG5vdyBubyBsb25nZXIgd29ya3MuICBOZWVkIHRvIHVzZSB0aGUKICAgIGtleWJvYXJkIHRvIGdldCBhcm91bmQgdGhpcy4gIFByZXRlbmQgPENSPiB3YXMgaGl0IHdoZW4gdGhlIHVzZXIgdHJpZXMgdG8KICAgIHNjcm9sbD8KNyAgIFNjcm9sbGJhciB3aWR0aCBkb2Vzbid0IGNoYW5nZSB3aGVuIHNlbGVjdGluZyBvdGhlciB3aW5kb3dzIGFwcGVhcmFuY2UuCiAgICBBbHNvIGJhY2tncm91bmQgY29sb3Igb2YgVG9vbGJhciBhbmQgcmVjdGFuZ2xlIGJlbG93IHZlcnQuIHNjcm9sbGJhci4KNyAgICIhc3RhcnQgL21pbiBjbWQiIHNob3VsZCBydW4gaW4gYSBtaW5pbWl6ZWQgd2luZG93LCBpbnN0ZWFkIG9mIHVzaW5nCiAgICAiL21pbiIgYXMgdGhlIGNvbW1hbmQgbmFtZS4gKFJvZ2FsbCkKNiAgIERyYXdpbmcgdGV4dCB0cmFuc3BhcmVudGx5IGRvZXNuJ3Qgc2VlbSB0byB3b3JrICh3aGVuIGRyYXdpbmcgcGFydCBjdXJzb3IpLgo4ICAgQ1RSTCBrZXkgZG9lc24ndCBhbHdheXMgd29yayBpbiBjb21iaW5hdGlvbiB3aXRoIEFMVCBrZXkuICBJdCBkb2VzIHdvcmsKICAgIGZvciBmdW5jdGlvbiBrZXlzLCBub3QgZm9yIGFscGhhYmV0aWMgY2hhcmFjdGVycy4gIFBlcmhhcHMgdGhpcyBpcyBiZWNhdXNlCiAgICBDVFJMLUFMVCBpcyB1c2VkIGJ5IFdpbmRvd3MgYXMgQWx0R3I/CjggICBDVFJMLS0gZG9lc24ndCB3b3JrIGZvciBBWkVSVFksIGJlY2F1c2UgaXQncyBDVFJMLVsgZm9yIFFXRVJUWS4gIEhvdyBkbyB3ZQogICAga25vdyB3aGljaCBrZXlib2FyZCBpcyBiZWluZyB1c2VkPwo3ICAgV2hlbiBzY3JvbGxpbmcsIGFuZCBhIGJhY2tncm91bmQgY29sb3IgaXMgZGl0aGVyZWQsIHRoZSBkaXRoZXIgcGF0dGVybgogICAgZG9lc24ndCBhbHdheXMgam9pbiBjb3JyZWN0bHkgYmV0d2VlbiB0aGUgc2Nyb2xsZWQgYXJlYSBhbmQgdGhlIG5ldyBkcmF3bgogICAgYXJlYSAoS29sb3NlaWtlKS4KOCAgIFdoZW4gZ3VpX2luaXRfZm9udCgpIGlzIGNhbGxlZCB3aXRoICIqIiwgcF9ndWlmb250IGlzIGZyZWVkIHdoaWxlIGl0IG1pZ2h0CiAgICBzdGlsbCBiZSB1c2VkIHNvbWV3aGVyZS4gIFRoaXMgaXMgdG9vIHRyaWNreSwgZG8gdGhlIGZvbnQgc2VsZWN0aW9uIGZpcnN0LAogICAgdGhlbiBzZXQgdGhlIG5ldyBmb250IGJ5IG5hbWUgKHJlcXVpcmVzIHB1dHRpbmcgYWxsIGxvZ2ZvbnQgcGFyYW1ldGVycyBpbgogICAgdGhlIGZvbnQgbmFtZSkuCgoKQXRoZW5hIGFuZCBNb3RpZjoKNiAgIE5ldyBNb3RpZiB0b29sYmFyIGJ1dHRvbiBmcm9tIE1hcmNpbiBEYWxlY2tpOgogICAgLSBXaGVuIHRoZSBtb3VzZSBwb2ludGVyIGlzIG92ZXIgYW4gQWdpZGUgYnV0dG9uIHRoZSByZWQgYmVjb21lcyBibGFjay4KICAgICAgU29tZXRoaW5nIHdpdGggdGhlIHdheSBjb2xvcnMgYXJlIHNwZWNpZmllZCBpbiB0aGUgLnhwbSBmaWxlLgogICAgLSBUaGUgcGl4bWFwIGlzIHR3byBwaXhlbHMgc21hbGxlciB0aGFuIGl0IHNob3VsZCBiZS4gIFRoZSBnYXAgaXMgZmlsbGVkCiAgICAgIHdpdGggZ3JleSBpbnN0ZWFkIG9mIHRoZSBjdXJyZW50IHRvb2xiYXIgYmFja2dyb3VuZCBjb2xvci4KOSAgIENhbiBjb25maWd1cmUgYmUgY2hhbmdlZCB0byBkaXNhYmxlIG5ldGJlYW5zIGlmIHRoZSBYcG0gbGlicmFyeSBpcwogICAgcmVxdWlyZWQgYW5kIGl0J3MgbWlzc2luZz8KOCAgIFdoZW4gdXNpbmcgdGhlIHJlc291cmNlICJWaW0qYm9yZGVyd2lkdGggMiIgdGhlIHdpZGdldHMgYXJlIHBvc2l0aW9uZWQKICAgIHdyb25nLgo5ICAgWElNIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQgZm9yIFNHSS9JUklYLiAgRml4IFhJTSBzbyB0aGF0ICdpbWRpc2FibGUnIGNhbgogICAgYmUgb2ZmIGJ5IGRlZmF1bHQuCjkgICBYSU0gZG9lc24ndCB3b3JrIHByb3Blcmx5IGZvciBBdGhlbmEvTW90aWYuIChZYXN1aGlybyBNYXRzdW1vdG8pICBGb3Igbm93LAogICAga2VlcCBYSU0gYWN0aXZlIGF0IGFsbCB0aW1lcyB3aGVuIHRoZSBpbnB1dCBtZXRob2QgaGFzIHRoZSBwcmVlZGl0aW5nCiAgICBmbGFnLgo4ICAgWDExOiBBIG1lbnUgdGhhdCBjb250YWlucyBhbiB1bWxhdXQgaXMgdHJ1bmNhdGVkIGF0IHRoYXQgY2hhcmFjdGVyLgogICAgSGFwcGVucyB3aGVuIHRoZSBsb2NhbGUgaXMgIkMiLCB3aGljaCB1c2VzIEFTQ0lJIGluc3RlYWQgb2YgSVMwLTg4NTktMS4KICAgIElzIHRoZXJlIGEgd2F5IHRvIHVzZSBsYXRpbjEgYnkgZGVmYXVsdD8gIEdub21lX2luaXQoKSBzZWVtcyB0byBkbyB0aGlzLgo4ICAgUGVyaGFwcyB1c2UgZm9udHNldHMgZm9yIGV2ZXJ5dGhpbmc/CjYgICBXaGVuIHN0YXJ0aW5nIGluIEVuZ2xpc2ggYW5kIHN3aXRjaGluZyB0aGUgbGFuZ3VhZ2UgdG8gSmFwYW5lc2UsIHNldHRpbmcKICAgIHRoZSBsb2NhbGUgd2l0aCAiOmxhbmciLCAnZ3VpZm9udHNldCcgYW5kICJoaSBtZW51IGZvbnQ9IiwgZGVsZXRpbmcgYWxsCiAgICBtZW51cyBhbmQgc2V0dGluZyB0aGVtIGFnYWluLCB0aGUgbWVudXMgZG9uJ3QgdXNlIHRoZSBuZXcgZm9udC4gIE1vc3Qgb2YKICAgIHRoZSB0b29sdGlwcyB3b3JrIHRob3VnaC4uLgo3ICAgTW90aWY6IHdoZW4gdXNpbmcgYSBmaWxlIHNlbGVjdGlvbiBkaWFsb2csIHRoZSBzcGVjaWZpZWQgZmlsZSBuYW1lIGlzIG5vdAogICAgYWx3YXlzIHVzZWQgKHdoZW4gc3BlY2lmeWluZyBhIGZpbHRlciBvciBhbm90aGVyIGRpcmVjdG9yeSkuCjggICBXaGVuICdlbmNvZGluZycgaXMgZGlmZmVyZW50IGZyb20gdGhlIGN1cnJlbnQgbG9jYWxlIChlLmcuLCB1dGYtOCkgdGhlCiAgICBtZW51IHN0cmluZ3MgZG9uJ3Qgd29yay4gIFJlcXVpcmVzIGNvbnZlcnNpb24gZnJvbSAnZW5jb2RpbmcnIHRvIHRoZQogICAgY3VycmVudCBsb2NhbGUuICBXb3JrYXJvdW5kOiBzZXQgJ2xhbmdtZW51Jy4KCgpBdGhlbmEgR1VJOgo5ICAgV2hlbiBkcmFnZ2luZyB0aGUgc2Nyb2xsYmFyIHRodW1iIHZlcnkgZmFzdCwgZm9jdXMgaXMgb25seSBvYnRhaW5lZCBpbgogICAgdGhlIHNjcm9sbGJhciBpdHNlbGYuICBBbmQgdGhlIHRodW1iIGlzIG5vIGxvbmdlciB1cGRhdGVkIHdoZW4gbW92aW5nCiAgICB0aHJvdWdoIGZpbGVzLgo3ICAgVGhlIGZpbGUgc2VsZWN0b3IgaXMgbm90IHJlc2l6YWJsZS4gIFdpdGggYSBiaWcgZm9udCBpdCBpcyBkaWZmaWN1bHQgdG8KICAgIHJlYWQgbG9uZyBmaWxlIG5hbWVzLiAoU2Nocm9lZGVyKQo0ICAgUmUtd3JpdGUgdGhlIHdpZGdldCBhdHRhY2htZW50cyBhbmQgY29kZSBzbyB0aGF0IHdlIHdpbGwgbm90IGhhdmUgdG8gZ28KICAgIHRocm91Z2ggYW5kIGNhbGN1bGF0ZSB0aGUgYWJzb2x1dGUgcG9zaXRpb24gb2YgZXZlcnkgd2lkZ2V0IGV2ZXJ5IHRpbWUgdGhlCiAgICB3aW5kb3cgaXMgcmVmcmVzaGVkL2NoYW5nZXMgc2l6ZS4gIFRoaXMgd2lsbCBoZWxwIHRoZSAiZmxhc2hpbmctd2lkZ2V0cyIKICAgIHByb2JsZW0gZHVyaW5nIGEgcmVmcmVzaC4KNSAgIFdoZW4gc3RhcnRpbmcgZ3ZpbSB3aXRoIGFsbCB0aGUgZGVmYXVsdCBjb2xvcnMgYW5kIHRoZW4gdHlwaW5nCiAgICAiOmhpIE1lbnUgZ3VpYmc9Y3lhbiIsIHRoZSBtZW51cyBjaGFuZ2UgY29sb3IgYnV0IHRoZSBiYWNrZ3JvdW5kIG9mIHRoZQogICAgcHVsbHJpZ2h0IHBpeG1hcCBkb2Vzbid0IGNoYW5nZSBjb2xvcnMuCiAgICBJZiB5b3UgdHlwZSAiOmhpIE1lbnUgZ3VpYmc9Y3lhbiBmb250PWFueWZvbnQiLCB0aGVuIHRoZSBwaXhtYXAgY2hhbmdlcwogICAgY29sb3JzIGFzIGl0IHNob3VsZC4KICAgIEFsbG9jYXRpbmcgYSBuZXcgcGl4bWFwIGFuZCBzZXR0aW5nIHRoZSByZXNvdXJjZSBkb2Vzbid0IGNoYW5nZSB0aGUKICAgIHB1bGxyaWdodCBwaXhtYXAncyBjb2xvcnMuICBXaHk/ICBQb3NzaWJsZSBBdGhlbmEgYnVnPwoKCk1vdGlmIEdVSToKNyAgIFVzZSBYbVN0cmluZ0NyZWF0ZUxvY2FsaXplZCgpIGluc3RlYWQgb2YgWG1TdHJpbmdDcmVhdGVTaW1wbGUoKT8KICAgIERhdmlkIEhhcnJpc29uIHNheXMgaXQncyBPSyAoaXQgZXhpc3RzIGluIE1vdGlmIDEuMikuCjggICBMZXNzdGlmOiBXaGVuIGRlbGV0aW5nIGEgbWVudSB0aGF0J3MgdG9ybiBvZmYsIHRoZSB0b3JuIG9mZiBtZW51IGJlY29tZXMKICAgIHZlcnkgc21hbGwgaW5zdGVhZCBvZiBkaXNhcHBlYXJpbmcuICBXaGVuIGNsb3NpbmcgaXQsIFZpbSBjcmFzaGVzLgogICAgKFBoaWxsaXBwcykKCgpHVUk6CjkgICBPbiBTb2xhcmlzLCBjcmVhdGluZyB0aGUgcG9wdXAgbWVudSBjYXVzZXMgdGhlIHJpZ2h0IG1vdXNlIGJ1dHRvbiBubwogICAgbG9uZ2VyIHRvIHdvcmsgZm9yIGV4dGVuZGluZyB0aGUgc2VsZWN0aW9uLiAoSGFsZXZ5KQo5ICAgV2hlbiBydW5uaW5nIGFuIGV4dGVybmFsIHByb2dyYW0sIGl0IGNhbid0IGFsd2F5cyBiZSBraWxsZWQgd2l0aCBDVFJMLUMuCiAgICBlLmcuLCBvbiBTb2xhcmlzIDUuNSwgd2hlbiB1c2luZyAiSyIgKEtlZWNoKS4gIE90aGVyICdndWlwdHknIHByb2JsZW1zIG9uCiAgICBTb2xhcmlzIDIuNi4gKE1hcmxleSkKOSAgIE9uIFNvbGFyaXM6IFVzaW5nIGEgIi1nZW9tZXRyeSIgYXJndW1lbnQsIGJpZ2dlciB0aGFuIHRoZSB3aW5kb3cgd2hlcmUgVmltCiAgICBpcyBzdGFydGVkIGZyb20sIGNhdXNlcyBlbXB0eSBsaW5lcyBiZWxvdyB0aGUgY21kbGluZS4gKHJhZikKOCAgIFgxMSBHVUk6IFdoZW4gbWVudSBpcyBkaXNhYmxlZCBieSBleGNsdWRpbmcgJ20nIGZyb20gJ2d1aW9wdGlvbnMnLCBBTFQga2V5CiAgICBzaG91bGQgbm90IGJlIHVzZWQgdG8gdHJpZ2dlciBhIG1lbnUgKGxpa2UgdGhlIFdpbjMyIHZlcnNpb24pLgo4ICAgV2hlbiBzZXR0aW5nICdsYW5nbWVudScsIGl0IHNob3VsZCBiZSBlZmZlY3RpdmUgaW1tZWRpYXRlbHkuICBTdG9yZSBib3RoCiAgICB0aGUgRW5nbGlzaCBhbmQgdGhlIHRyYW5zbGF0ZWQgdGV4dCBpbiB0aGUgbWVudSBzdHJ1Y3R1cmUuICBSZS1nZW5lcmF0ZQogICAgdGhlIHRyYW5zbGF0aW9uIHdoZW4gJ2xhbmdtZW51JyBoYXMgY2hhbmdlZC4KOCAgIEJhc2ljIGZsYXcgaW4gdGhlIEdVSSBjb2RlOiBOZXh0U2NyZWVuIGlzIHVwZGF0ZWQgYmVmb3JlIGNhbGxpbmcKICAgIGd1aV93cml0ZSgpLCBidXQgdGhlIEdVSSBjb2RlIHJlbGllcyBvbiBOZXh0U2NyZWVuIHRvIHJlcHJlc2VudCB0aGUgc3RhdGUKICAgIG9mIHdoZXJlIGl0IGlzIHByb2Nlc3NpbmcgdGhlIG91dHB1dC4KICAgIE5lZWQgYmV0dGVyIHNlcGFyYXRpb24gb2YgVmltIGNvcmUgYW5kIEdVSSBjb2RlLgo4ICAgV2hlbiBmb250c2V0IHN1cHBvcnQgaXMgZW5hYmxlZCwgc2V0dGluZyAnZ3VpZm9udCcgdG8gYSBzaW5nbGUgZm9udAogICAgZG9lc24ndCB3b3JrLgo4ICAgTWVudSBwcmlvcml0eSBmb3Igc3ViLW1lbnVzIGZvcjogQW1pZ2EsIEJlT1MuCjggICBBZGQgbWVudSBzZXBhcmF0b3JzIGZvciBBbWlnYSwgUklTQ09TLgo4ICAgQWRkIHdheSB0byBzcGVjaWZ5IHRoZSBmaWxlIGZpbHRlciBmb3IgdGhlIGJyb3dzZSBkaWFsb2cuICBBdCBsZWFzdCBmb3IKICAgIGJyb3dzZSgpLgo4ICAgQWRkIGRpYWxvZyBmb3Igc2VhcmNoL3JlcGxhY2UgdG8gb3RoZXIgR1VJcz8gIFRrIGhhcyBzb21ldGhpbmcgZm9yIHRoaXMsCiAgICB1c2UgdGhhdCBjb2RlPyAgT3IgdXNlIGNvbnNvbGUgZGlhbG9nLgo4ICAgV2hlbiBzZWxlY3RpbmcgYSBmb250IHdpdGggdGhlIGZvbnQgZGlhbG9nIGFuZCB0aGUgZm9udCBpcyBpbnZhbGlkLCB0aGUKICAgIGVycm9yIG1lc3NhZ2UgZGlzYXBwZWFycyB0b28gcXVpY2suCjcgICBNb3JlIGZlYXR1cmVzIGluIHRoZSBmaW5kL3JlcGxhY2UgZGlhbG9nOgogICAgLSByZWdleHAgb24vb2ZmCiAgICAtIHNlYXJjaCBpbiBzZWxlY3Rpb24vYnVmZmVyL2FsbCBidWZmZXJzL2RpcmVjdG9yeQogICAgICAgd2hlbiBhbGwgYnVmZmVycy9kaXJlY3RvcnkgaXMgdXNlZDoKCS0gZmlsdGVyIGZvciBmaWxlIG5hbWUKICAgICAgIHdoZW4gZGlyZWN0b3J5IGlzIHVzZWQ6CgktIHN1YmRpcmVjdG9yeSBvbi9vZmYKCS0gdG9wIGRpcmVjdG9yeSBicm93c2VyCjggICBndWlfY2hlY2tfY29sb3JzKCkgaXMgbm90IGNhbGxlZCBhdCB0aGUgcmlnaHQgbW9tZW50LiAgRG8gaXQgbXVjaCBsYXRlciwKICAgIHRvIGF2b2lkIHByb2JsZW1zLgo4ICAgZ3VpX3VwZGF0ZV9jdXJzb3IoKSBpcyBjYWxsZWQgZm9yIGEgY3Vyc29yIHNoYXBlIGNoYW5nZSwgZXZlbiB3aGVuIHRoZXJlCiAgICBhcmUgbWFwcGluZ3MgdG8gYmUgcHJvY2Vzc2VkLiAgT25seSBkbyBzb21ldGhpbmcgd2hlbiBnb2luZyB0byB3YWl0IGZvcgogICAgaW5wdXQuICBPciBtYXliZSBldmVyeSAxMDAgbXM/CjggICBYMTE6IFdoZW4gdGhlIHdpbmRvdyBzaXplIGlzIHJlZHVjZWQgdG8gZml0IG9uIHNjcmVlbiwgdGhlcmUgYXJlIGJsYW5rCiAgICBsaW5lcyBiZWxvdyB0aGUgdGV4dCBhbmQgYm90dG9tIHNjcm9sbGJhci4gICJndmltIC1nZW9tZXRyeSA4MHg3OCswKzAiLgogICAgV2hlbiB0aGUgIiswKzAiIGlzIG9taXR0ZWQgaXQgd29ya3MuCjggICBXaGVuIHN0YXJ0aW5nIGFuIGV4dGVybmFsIGNvbW1hbmQsIGFuZCAnZ3VpcHR5JyBzZXQsIEJTIGFuZCBERUwgYXJlIG1peGVkCiAgICB1cC4gIFNldCBlcmFzZSBjaGFyYWN0ZXIgc29tZWhvdz8KOCAgIEEgZGVhZCBjaXJjdW1mbGV4IGZvbGxvd2VkIGJ5IGEgc3BhY2Ugc2hvdWxkIGdpdmUgdGhlICdeJyBjaGFyYWN0ZXIKICAgIChSb21tZWwpLiAgTG9vayBob3cgeHRlcm0gZG9lcyB0aGlzLgogICAgQWxzbzogQmVkbmFyIGhhcyBzb21lIGNvZGUgZm9yIGRlYWQga2V5IGhhbmRsaW5nLgogICAgQWxzbzogTmVkaXQgNS4wLjIgd2l0aCBVU0VfWE1JTSBkb2VzIGl0IHJpZ2h0LiAoR2F5YSkKOCAgIFRoZSBjb21wb3NlIGtleSBkb2Vzbid0IHdvcmsgcHJvcGVybHkgKENlcGFzKS4gIEJvdGggZm9yIFdpbjMyIGFuZCBYMTEuCjcgICBUaGUgY3Vyc29yIGluIGFuIGluYWN0aXZlIHdpbmRvdyBzaG91bGQgYmUgaG9sbG93LiAgQ3VycmVudGx5IGl0J3Mgbm90CiAgICB2aXNpYmxlLgo3ICAgR1VJIG9uIFNvbGFyaXMgMi41LjEsIHVzaW5nIC91c3IvZHQvLi46IFdoZW4gZ3ZpbSBzdGFydHMsIGN1cnNvciBpcwogICAgaG9sbG93LCBhZnRlciB3aW5kb3cgbG93ZXJlZC9yYWlzZWQgaXQncyBPSy4gKEdvZGZyZXkpCjcgICBXaGVuIHN0YXJ0aW5nIEdVSSB3aXRoICI6Z3VpIiwgYW5kIHdpbmRvdyBpcyBtYWRlIHNtYWxsZXIgYmVjYXVzZSBpdAogICAgZG9lc24ndCBmaXQgb24gdGhlIHNjcmVlbiwgdGhlcmUgaXMgYW4gZXh0cmEgcmVkcmF3Lgo4ICAgV2hlbiBzZXR0aW5nIGZvbnQgd2l0aCAuWGRlZmF1bHRzLCB0aGVyZSBpcyBhbiBleHRyYSBlbXB0eSBsaW5lIGF0IHRoZQogICAgYm90dG9tLCB3aGljaCBkaXNhcHBlYXJzIHdoZW4gdXNpbmcgIjpzZXQgZ3VpZm9udD08VGFiPiIuIChDaGFkemVsZWspCjggICBXaGVuIGZvbnQgc2hhcGUgY2hhbmdlcywgYnV0IG5vdCB0aGUgc2l6ZSwgZG9pbmcgIjpzZXQgZm9udD0iIGRvZXMgbm90CiAgICByZWRyYXcgdGhlIHNjcmVlbiB3aXRoIHRoZSBuZXcgZm9udC4gIEFsc28gZm9yIFdpbjMyLgogICAgV2hlbiB0aGUgc2l6ZSBjaGFuZ2VzLCBvbiBTb2xhcmlzIDIuNSB0aGVyZSBpc24ndCBhIHJlZHJhdyBmb3IgdGhlCiAgICByZW1haW5pbmcgcGFydCBvZiB0aGUgd2luZG93IChQaGlsbGlwcHMpLgotICAgRmxhc2hlcyByZWFsbHkgYmFkbHkgaW4gY2VydGFpbiBjYXNlcyB3aGVuIHJ1bm5pbmcgcmVtb3RlbHkgZnJvbSBhIFN1bi4KNCAgIFJlLXdyaXRlIHRoZSBjb2RlIHNvIHRoYXQgdGhlIGhpZ2hsaWdodGluZyBpc24ndCBjaGFuZ2VkIG11bHRpcGxlIHRpbWVzCiAgICB3aGVuIGRvaW5nIGEgIjpoaSBjbGVhciIuICBUaGUgY29sb3IgY2hhbmdlcyBoYXBwZW4gdGhyZWUgb3IgbW9yZSB0aW1lcwogICAgY3VycmVudGx5LiAgVGhpcyBpcyB2ZXJ5IG9idmlvdXMgb24gYSA2Nk1oeiA0ODYuCgoKTVNET1MvREpHUFA6CjkgICBQcmVzc2luZyBDVFJMLUMgb2Z0ZW4gY3Jhc2hlcyB0aGUgY29uc29sZSBWaW0gcnVucyBpbi4gKEtlbiBMaWFvKQogICAgV2hlbiAnYmlvc2tleScgaXNuJ3Qgc2V0IGl0IGRvZXNuJ3QgaGFwcGVuLiAgQ291bGQgYmUgYSBwcm9ibGVtIHdpdGggdGhlCiAgICBCSU9TIGVtdWxhdGlvbiBvZiB0aGUgY29uc29sZS4gIFZlcnNpb24gNS42IGFscmVhZHkgaGFkIHRoaXMgcHJvYmxlbS4KOCAgIERKR1BQOiAiY2QgYzoiIGNhbiB0YWtlIHVzIHRvIGEgZGlyZWN0b3J5IHRoYXQgbm8gbG9uZ2VyIGV4aXN0cy4KICAgIGNoYW5nZV9kcml2ZSgpIGRvZXNuJ3QgY2hlY2sgdGhpcy4gIEhvdyB0byBjaGVjayBmb3IgdGhpcyBlcnJvcj8KOSAgIFRoZSAxNiBiaXQgdmVyc2lvbiBydW5zIG91dCBvZiBtZW1vcnkgdmVyeSBxdWlja2x5LiAgU2hvdWxkIGZpbmQgdW51c2VkCiAgICBjb2RlIGFuZCByZWR1Y2Ugc3RhdGljIGRhdGEuCjkgICBDcmFzaCB3aGVuIHJ1bm5pbmcgb24gV2luZG93cyA5OCBpbiBhIGNvbnNvbGUgd2luZG93IGFuZCBwcmVzc2luZyBDVFJMLUMuCiAgICBIYXBwZW5zIG5vdyBhbmQgdGhlbi4gIFdoZW4gZGVidWdnaW5nIFZpbSBpbiBnZGIgdGhpcyBhbHNvIGhhcHBlbnMuICBTaW5jZQogICAgdGhlIGNvbnNvbGUgY3Jhc2hlcywgbWlnaHQgYmUgYSBidWcgaW4gdGhlIERPUyBjb25zb2xlLiAgUmVzZXR0aW5nCiAgICAnYmlvc2tleScgYXZvaWRzIGl0LCBidXQgdGhlbiBDVFJMLUMgZG9lc24ndCB3b3JrLgo5ICAgRE9TOiBNYWtlIENUUkwtRnggYW5kIEFMVC1GeCB3b3JrLgogICAgQ1RSTC1GMSA9IENFLTVFLCBDVFJMLUYyID0gQ0UtNUYsIC4uLCBDVFJMLUYxMCA9IENFLTY3CiAgICBBTFQtRjEgPSBDRS02OCwgQUxULUYyID0gQ0UtNjksIC4uLCBBTFQtRjEwID0gQ0UtNzEKICAgIFNoaWZ0ZWQgY3Vyc29yIGtleXMgcHJvZHVjZSBzYW1lIGNvZGVzIGFzIHVuc2hpZnRlZCBrZXlzLiAgVXNlIGJpb3NrZXkoMikKICAgIHRvIGdldCBtb2RpZmllciBtYXNrIGZvciA8Uy1DLU0tRng+LgogICAgVXNlIEtfU1BFQ0lBTC9LU19NT0RJRklFUiBjb2RlcyB0byBpbnNlcnQgbW9kaWZpZXIgbWFzayBpbiBpbnB1dCBzdHJlYW0/CiAgICBNYWtlIHRoaXMgd29yayBsaWtlIGluIFdpbjMyIGNvbnNvbGUuCiAgICBNYXBwaW5nIHRoaW5ncyBsaWtlIDxNLUE+IGRvZXNuJ3Qgd29yaywgYmVjYXVzZSBpdCBnZW5lcmF0ZXMgYW4gZXh0ZW5kZWQKICAgIGtleSBjb2RlLiAgVXNlIGEgdHJhbnNsYXRpb24gdGFibGU/CjkgICBDYW4ndCByZWFkIGFuIG9wZW5lZCBzd2FwIGZpbGUgd2hlbiB0aGUgInNoYXJlIiBjb21tYW5kIGhhcyBub3QgYmVlbiB1c2VkLgogICAgQXQgbGVhc3QgaWdub3JlIHRoZSBzd2FwIGZpbGVzIHRoYXQgVmltIGhhcyBvcGVuZWQgaXRzZWxmLgo4ICAgVXNlIERKR1BQIDIuMDMuCjggICBUaGUgRG9zMzIgdmVyc2lvbiAoREpHUFApIGNhbid0IHVzZSBsb25nIGZpbGUgbmFtZXMgb24gV2luZG93cyBOVC4KICAgIENoZWNrIGlmIG5ldyBwYWNrYWdlIGNhbiBiZSB1c2VkICh2Mm1pc2MvbnRsZm4wOFtic10uemlwKS4KOCAgIHNldGxvY2FsZSgpIGlzIGJvZ3VzLgo4ICAgVmltIGJ1c3kgd2FpdHMgZm9yIG5ldyBjaGFyYWN0ZXJzIG9yIG1vdXNlIGNsaWNrcy4JU2hvdWxkIHB1dCBpbiBzb21lCiAgICBzb3J0IG9mIHNsZWVwLCB0byBhdm9pZCBlYXRpbmcgNTAlIG9mIHRoZSBDUFUgdGltZS4gIFRlc3Qgb24gYW4gdW5wYXRjaGVkCiAgICBXaW5kb3dzIDk1IHN5c3RlbSEKOCAgIERKR1BQOiB3aGVuIHNoZWxsIGlzIGJhc2gsIG1ha2UgZmFpbHMuIChEb25haG9lKQo3ICAgSGl0dGluZyBDVFJMLVAgdHdpY2UgcXVpY2tseSAoZS5nLiwgaW4ga2V5d29yZCBjb21wbGV0aW9uKSBvbiBhIDgwODgKICAgIG1hY2hpbmUsIHN0YXJ0cyBwcmludGVyIGVjaG8hIChKb2huIE11bGxpbikuCjcgICBNU0RPUyAxNiBiaXQgdmVyc2lvbiBjYW4ndCB3b3JrIHdpdGggQ09NU1BFQyB0aGF0IGhhcyBhbiBhcmd1bWVudCwgZS5nLjoKICAgIENPTVNQRUM9QzpcV0lORE9XU1xDT01NQU5ELkNPTSAvRTo0MDk2ICAgIChCcmFkbGV5KQogICAgQ2F1c2VkIGJ5IEJDQyBzeXN0ZW0oKSBmdW5jdGlvbiAoQm9ybGFuZCAibWFrZSIgaGFzIHRoZSBzYW1lIHByb2JsZW0pLgo4ICAgTW91c2U6IGhhbmRsZSBsZWZ0JnJpZ2h0IGJ1dHRvbiBwcmVzc2VkIGFzIG1pZGRsZSBidXR0b24gcHJlc3NlZC4gIEFkZAogICAgbW9kaWZpZXIga2V5cyBzaGlmdCwgY3RybCBhbmQgYWx0Lgo3ICAgV2hlbiB0b28gbWFueSBmaWxlcyBhcmUgb3BlbiAoZGVwZW5kcyBvbiBGSUxFUyksIHN0cmFuZ2UgdGhpbmdzIGhhcHBlbi4KICAgIFRoZSBEb3MxNiB2ZXJzaW9uIHJ1bnMgb3V0IG9mIG1lbW9yeSwgaW4gdGhlIERvczMyIHZlcnNpb24gIiFscyIgY2F1c2VzIGEKICAgIGNyYXNoLiAgQW5vdGhlciBzeW1wdG9tOiAuc3dwIGZpbGVzIGFyZSBub3QgZGVsZXRlZCwgZXhpc3RpbmcgZmlsZXMgYXJlCiAgICAiW05ldyBmaWxlXSIuCjcgICBESkdQUCB2ZXJzaW9uIGRvZXNuJ3Qgd29yayB3aXRoIGdyYXBoaWNzIGRpc3BsYXkgbW9kZS4gIFN3aXRjaCB0byBhIG1vZGUKICAgIHRoYXQgaXMgc3VwcG9ydGVkPwo4ICAgREpHUFA6ICI6bW9kZSIgZG9lc24ndCB3b3JrIGZvciBtYW55IG1vZGVzLiAgRGlzYWJsZSB0aGVtLgo4ICAgREpHUFA6IFdoZW4gc3RhcnRpbmcgaW4gRXggbW9kZSwgc2hvdWxkbid0IGNsZWFyIHRoZSBzY3JlZW4uIChXYWx0ZXIKICAgIEJyaXNjb2UpCgoKTVNET1MsIE9TLzIgYW5kIFdpbjMyOgo4ICAgT1MvMjogQWRkIGJhY2t0aWNrIGV4cGFuc2lvbi4gIFVuZGVmaW5lIE5PX0VYUEFORFBBVEggYW5kIHVzZQogICAgZ2VuX2V4cGFuZF93aWxkY2FyZHMoKS4KOCAgIE9TLzI6IEFkZCBjbGlwYm9hcmQgc3VwcG9ydD8gIFNlZSBleGFtcGxlIGNsaXBicmQuZXhlIGZyb20gQWxleGFuZGVyCiAgICBXYWduZXIuCjggICBPUy8yOiBBZGQgRXh0ZW5kZWQgQXR0cmlidXRlcyBzdXBwb3J0IGFuZCBkZWZpbmUgSEFWRV9BQ0wuCjggICBPUy8yOiBXaGVuIGVkaXRpbmcgYSBmaWxlIG5hbWUgImZvby50eHQiIHRoYXQgaXMgYWN0dWFsbHkgY2FsbGVkIEZPTy50eHQsCiAgICB3cml0aW5nIHVzZXMgImZvby50eHQiLiAgU2hvdWxkIG9idGFpbiB0aGUgcmVhbCBmaWxlIG5hbWUuCjggICBTaG91bGQgJFVTRVJQUk9GSUxFIGJlIHByZWZlcnJlZCBhYm92ZSAkSE9NRURSSVZFLyRIT01FUEFUSD8gIE5vLCBidXQgaXQncwogICAgYSBnb29kIGZhbGxiYWNrLCB0aHVzIHVzZToKCSAgICAkSE9NRQoJICAgICRIT01FRFJJVkUkSE9NRVBBVEgKCSAgICBTSEdldFNwZWNpYWxGb2xkZXJQYXRoKE5VTEwsIGxwenNQYXRoLCBDU0lETF9BUFBEQVRBLCBGQUxTRSk7CgkgICAgJFVTRVJQUk9GSUxFCgkgICAgU0hHZXRTcGVjaWFsRm9sZGVyUGF0aChOVUxMLCBscHpzUGF0aCwgQ1NJRExfQ09NTU9OX0FQUERBVEEsIEZBTFNFKTsKCSAgICAkQUxMVVNFUlNQUk9GSUxFCgkgICAgJFNZU1RFTURSSVZFXAoJICAgIEM6XAo4ICAgV2luMzIgY29uc29sZTogPE0tVXA+IGFuZCA8TS1Eb3duPiBkb24ndCB3b3JrLiAoR2VkZGVzKSAgV2UgZG9uJ3QgaGF2ZQogICAgc3BlY2lhbCBrZXlzIGZvciB0aGVzZS4gIFNob3VsZCB1c2UgbW9kaWZpZXIgKyBrZXkuCjggICBXaW4zMiBjb25zb2xlOiBjYXBzLWxvY2sgbWFrZXMgbm9uLWFscGhhIGtleXMgd29yayBsaWtlIHdpdGggc2hpZnQuCiAgICBTaG91bGQgd29yayBsaWtlIGluIHRoZSBHVUkgdmVyc2lvbi4KOCAgIEVudmlyb25tZW50IHZhcmlhYmxlcyBpbiBET1MgYXJlIG5vdCBjYXNlIHNlbnNpdGl2ZS4gIE1ha2UgYSBkZWZpbmUgZm9yCiAgICBTVFJDTVBfRU5WKCksIGFuZCB1c2UgaXQgd2hlbiBjb21wYXJpbmcgZW52aXJvbm1lbnQgdmFyIG5hbWVzLgo4ICAgU2V0dGluZyAnc2hlbGxzbGFzaCcgaGFzIG5vIGltbWVkaWF0ZSBlZmZlY3QuICBDaGFuZ2UgYWxsIGZpbGUgbmFtZXMgd2hlbgogICAgaXQgaXMgc2V0L3Jlc2V0PyAgT3Igb25seSB1c2UgaXQgd2hlbiBhY3R1YWxseSBleGVjdXRpbmcgYSBzaGVsbCBjb21tYW5kPwo4ICAgV2hlbiBlZGl0aW5nIGEgZmlsZSBvbiBhIFNhbWJhIHNlcnZlciwgY2FzZSBtaWdodCBtYXR0ZXIuICAiOmUgZmlsZSIKICAgIGZvbGxvd2VkIGJ5ICI6ZSBGSUxFIiB3aWxsIGVkaXQgImZpbGUiIGFnYWluLCBldmVuIHRob3VnaCAiRklMRSIgbWlnaHQgYmUKICAgIGFub3RoZXIgb25lLiAgU2V0IGxhc3QgdXNlZCBuYW1lIGluIGJ1Zmxpc3RfbmV3KCk/ICBGaXggZG9fZWNtZCgpLCBldGMuCjggICBXaGVuIGEgYnVmZmVyIGlzIGVkaXRpbmcgYSBmaWxlIGxpa2UgImZ0cDovL21hY2gvZmlsZSIsIHdoaWNoIGlzIG5vdCBnb2luZwogICAgdG8gYmUgdXNlZCBsaWtlIGEgbm9ybWFsIGZpbGUgbmFtZSwgZG9uJ3QgY2hhbmdlIHRoZSBzbGFzaGVzIHRvCiAgICBiYWNrc2xhc2hlcy4gKFJvbmFsZCBIb2VsbHdhcnRoKQoKCldpbmRvd3MgOTU6CjggICBFZGl0aW5nIGEgZmlsZSBieSBpdCdzIHNob3J0IGZpbGUgbmFtZSBhbmQgd3JpdGluZyBpdCwgbWFrZXMgdGhlIGxvbmcgZmlsZQogICAgbmFtZSBkaXNhcHBlYXIuICBTZXR0aW5nICdiYWNrdXBjb3B5JyBoZWxwcy4KICAgIFVzZSBGaW5kRmlyc3RGaWxlKCktPmNBbHRlcm5hdGVGaWxlTmFtZSBpbiBmbmFtZV9jYXNlKCkgKEdlb3JnZSBSZWlsbHkpLgo4ICAgRG9pbmcgd2lsZGNhcmQgZXhwYW5zaW9uLCB3aWxsIG1hdGNoIHRoZSBzaG9ydCBmaWxlbmFtZSwgYnV0IHJlc3VsdCBpbiB0aGUKICAgIGxvbmcgZmlsZW5hbWUgKGJvdGggREpHUFAgYW5kIFdpbjMyKS4KCgpXaW4zMiBjb25zb2xlOgo5ICAgV2hlbiBlZGl0aW5nIGEgZmlsZSBieSBpdHMgc2hvcnQgZmlsZSBuYW1lLCBpdCBzaG91bGQgYmUgZXhwYW5kZWQgaW50byBpdHMKICAgIGxvbmcgZmlsZSBuYW1lLCB0byBhdm9pZCBwcm9ibGVtcyBsaWtlIHRoZXNlOiAoTWNjb2xsaXN0ZXIpCiAgICAgMSkgQ3JlYXRlIGEgZmlsZSBjYWxsZWQgIi5iYXNocmMiIHVzaW5nIHNvbWUgb3RoZXIgZWRpdG9yLgogICAgIDIpIERyYWcgdGhhdCBmaWxlIG9udG8gYSBzaG9ydGN1dCBvciB0aGUgYWN0dWFsIGV4ZWN1dGFibGUuCiAgICAgMykgTm90ZSB0aGF0IHRoZSBmaWxlIG5hbWUgaXMgc29tZXRoaW5nIGxpa2UgQkFTSFJDfjEKICAgICA0KSBHbyB0byBGaWxlLT5TYXZlIEFzIG1lbnUgaXRlbSBhbmQgdHlwZSAiLmJhc2hyYyIgYXMgdGhlIGZpbGUgbmFtZS4KICAgICA1KSBQcmVzcyAiWWVzIiB0byBpbmRpY2F0ZSB0aGF0IEkgd2FudCB0byBvdmVyd3JpdGUgdGhlIGZpbGUuCiAgICAgNikgTm90ZSB0aGF0IHRoZSBtZXNzYWdlICJGaWxlIGV4aXN0cyAoYWRkICEgdG8gb3ZlcnJpZGUpIiBpcyBkaXNwbGF5ZWQKCWFuZCB0aGUgZmlsZSBpcyBub3Qgc2F2ZWQuCiAgICBVc2UgRmluZEZpcnN0RmlsZSgpIHRvIGV4cGFuZCBhIGZpbGUgbmFtZSBhbmQgZGlyZWN0b3J5IGluIHRoZSBwYXRoIHRvIGl0cwogICAgbG9uZyBuYW1lLgo4ICAgQWxzbyBpbXBsZW1lbnQgJ2NvbnNrZXknIG9wdGlvbiBmb3IgdGhlIFdpbjMyIGNvbnNvbGUgdmVyc2lvbj8gIExvb2sgYXQKICAgIGhvdyBYdmkgZG9lcyBjb25zb2xlIEkvTyB1bmRlciBXaW5kb3dzIE5ULgo3ICAgUmUtaW5zdGFsbCB0aGUgdXNlIG9mICRURVJNIGFuZCBzdXBwb3J0IHRoZSB1c2Ugb2YgZGlmZmVyZW50IHRlcm1pbmFscywKICAgIGJlc2lkZXMgdGhlIGNvbnNvbGUuCjggICBVc2Ugb2YgPGFsdGdyPiBtb2RpZmllciBkb2Vzbid0IHdvcms/ICA1LjMgd2FzIE9LLiAoR2FyY2lhLVN1YXJlei9HdWNrZXMpCjkgICBNYXBwaW5nIDxDLVMtVGFiPiBkb2Vzbid0IHdvcmsgY29ycmVjdGx5LiAgSG93IHRvIHNlZSB0aGUgZGlmZmVyZW5jZSB3aXRoCiAgICA8Qy1TLWk+Pwo5ICAgdG1wbmFtKCkgdXNlcyBmaWxlIGluIHJvb3Qgb2YgZmlsZSBzeXN0ZW06ICJcYXNkZiIuICBUaGF0IGRvZXNuJ3Qgd29yayBvbgogICAgYSBOZXR3YXJlIG5ldHdvcmsgZHJpdmUuICBVc2Ugc2FtZSBmdW5jdGlvbiBhcyBmb3IgV2luMzIgR1VJPwo4ICAgSW4gb3Nfd2luMzIuaCwgSEFWRV9TVFJJQ01QIGFuZCBIQVZFX1NUUk5JQ01QIGFyZSBkZWZpbmVkIG9ubHkgaWYgX19HTlVDX18KICAgIGlzIG5vdCBkZWZpbmVkLiAgU2hvdWxkbid0IHRoYXQgYmUgdGhlIG90aGVyIHdheSBhcm91bmQ/CjcgICBVc2UgU2V0Q29uc29sZUNQKCkgYW5kIFNldENvbnNvbGVPdXRwdXRDUCgpIHRvIGltcGxlbWVudCAndGVybWVuY29kaW5nJz8KICAgIEF2b2lkcyB0aGF0IGlucHV0IGFuZCBvdXRwdXQgd29yayBkaWZmZXJlbnRseS4gIE5lZWQgdG8gYmUgcmVzdG9yZWQgd2hlbgogICAgZXhpdGluZy4KCgpBbWlnYToKOCAgIEluIG1jaF9pbmNoYXIoKSBzaG91bGQgdXNlIGNvbnZlcnRfaW5wdXRfc2FmZSgpIHRvIGhhbmRsZSBpbmNvbXBsZXRlIGJ5dGUKICAgIHNlcXVlbmNlcy4KOSAgIEluIG1jaF9leHBhbmRwYXRoKCkgYSAiKiIgaXMgdG8gYmUgZXhwYW5kZWQsIGJ1dCAiXCoiIGlzbid0LiAgUmVtb3ZlCiAgICBiYWNrc2xhc2hlcyBpbiByZXN1bHQuCjggICBFeGVjdXRpbmcgYSBzaGVsbCwgb25seSBvbmUgb3B0aW9uIGZvciAnc2hlbGwnIGlzIHNlcGFyYXRlZC4gIFNob3VsZCBkbwogICAgYWxsIG9wdGlvbnMsIHVzaW5nIHdoaXRlIHNwYWNlIHNlcGFyYXRpb24uCgoKTWFjaW50b3NoOgo3ICAgUGF0Y2ggdG8gYWRkICd0cmFuc3BhcmVuY3knIG9wdGlvbi4gIERpc2FkdmFudGFnZTogaXQncyBzbG93LiAoRWNrZWhhcmQKICAgIEJlcm5zLCAyMDA0IE1heSA5KSBodHRwOi8vZWNraS50by92aW0vVHJhbnNCYWNrLTIwMDQtMDUtMDkuZGlmZgogICAgTmVlZHMgbW9yZSB3b3JrLiAgQWRkIHdoZW4gc29tZW9uZSByZWFsbHkgd2FudHMgaXQuCjcgICBMb2FkaW5nIHRoZSBQZXJsIGxpYnJhcnkgb25seSB3b3JrcyBvbiBPUy9YIDEwLjIgb3IgMTAuMywgbmV2ZXIgb24gYm90aC4KICAgIExvYWQgdGhlIFBlcmwgbGlicmFyeSBkeW5hbWljYWxseSBzZWUgUHl0aG9uIHNvdXJjZXMgZmlsZSBkeW5sb2FkX21hYwogICAgKEphY2spCiAgICBkeW5hbWljIGxpbmtpbmc6IGh0dHA6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL3RlY2hub3Rlcy90bjIwMDIvdG4yMDY0Lmh0bWwKOCAgIElucHV0dGluZyBVbmljb2RlIGNoYXJhY3RlcnMgZG9lcyBub3Qgd29yayBpbiB0aGUgdGVybWluYWwuICBUaGV5IGFwcGVhcgogICAgdG8gYXJyaXZlIGFzIHVwcGVyIGFuZCBsb3dlciBieXRlcy4gKERhdmlkIEJyb3duLCAyMDA0IEFwcmlsIDE3KQo4ICAgVHlwaW5nIFVuaWNvZGUgY2hhcmFjdGVycyBkb2Vzbid0IHdvcmsgYXQgYWxsIGluIHRoZSBHVUkuCjkgICBQcm9ibGVtcyBpbiBDYXJib24gdmVyc2lvbiBmb3IgT1MgWDogKEJlbmppIEZpc2hlcikKICAgIC0ga2V5Ym9hcmQgc2hvcnRjdXRzIGluIHRoZSBtZW51cyBnZXQgbG9zdC4KOCAgIFRoZSBWaW0vQWJvdXQgbWVudSBkb2Vzbid0IHdvcmsuCjggICAiOmd1aSIgZG9lc24ndCBmb3JrLiAgRW5hYmxpbmcgdGhlIGNvZGUgaW4gZ3VpLmMgdG8gZm9yayBjYXVzZXMgYSBTRUdWLgo4ICAgRGVmaW5lIHZpbV9ta2RpcigpIGZvciBNYWNpbnRvc2guCjggICBEZWZpbmUgbWNoX3dyaXRhYmxlKCkgZm9yIE1hY2ludG9zaC4KOSAgIFdoZW4gRGlza0xvY2sgaXMgcnVubmluZywgdXNpbmcgYSBzd2FwIGZpbGUgY2F1c2VzIGEgY3Jhc2guICBBcHBlYXJzIHRvIGJlCiAgICBhIHByb2JsZW0gd2l0aCB3cml0aW5nIGEgZmlsZSB0aGF0IHN0YXJ0cyB3aXRoIGEgZG90LiAoR2lhY2Fsb25lKQo5ICAgT24gRzMgTWFjLCBPUyB2ZXJzaW9uIDgsIGNvbnRyb2wgc3RyaXAgY2F1c2VzIGNoYXJhY3RlcnMgbWVzc2VkIHVwIHdoZW4KICAgIHNjcm9sbGluZyAoQ1RSTC1MIGNsZWFucyBpdCB1cCkuIChCZW5qaSBGaXNoZXIpCjkgICBPbiBHMyBNYWMsIE9TIHZlcnNpb24gOCwgdmFyaWFibGUtc3BlZWQgc2Nyb2xsaW5nIGRvZXNuJ3Qgd29yaywgYWZ0ZXIgdHdvCiAgICBzZWNvbmRzIG9mIHNjcm9sbGluZyB0aGUgc2NyZWVuIGZyZWV6ZXMuIChCZW5qaSBGaXNoZXIpCjkgICBJbiBtYWNfZXhwYW5kcGF0aCgpIGNoZWNrIHRoYXQgaGFuZGxpbmcgb2YgYmFja3NsYXNoZXMgaXMgZG9uZSBwcm9wZXJseS4KOCAgIFN0YW5kYXJkIE1hYyBzaG9ydGN1dHMgYXJlIG1pc3NpbmcuICAoQW1lcmlnZSkKOCAgIEhhbmRsaW5nIG9mIG5vbi1maXhlZCB3aWR0aCBmb250cyBpcyB3cm9uZy4gKEFtZXJpZ2UpCgoKIlNtYWxsIiBwcm9ibGVtczoKOCAgIFdoZW4gYW4gIjplZGl0IiBpcyBpbnNpZGUgYSB0cnkgY29tbWFuZCBhbmQgdGhlIEFUVEVOVElPTiBwcm9tcHQgaXMgdXNlZCwKICAgIHRoZSA6Y2F0Y2ggY29tbWFuZHMgYXJlIGFsd2F5cyBleGVjdXRlZCwgYWxzbyB3aGVuIHRoZSBmaWxlIGlzIGVkaXRlZAogICAgbm9ybWFsbHkuICBTaG91bGQgcmVzZXQgZGlkX2Vtc2cgYW5kIHVuZG8gc2lkZSBlZmZlY3RzLiAgQWxzbyBtYWtlIHN1cmUKICAgIHRoZSBBVFRFTlRJT04gbWVzc2FnZSBzaG93cyB1cC4gIFNlcnZhdGl1cyBCcmFuZHQgd29ya3Mgb24gdGhpcy4KOSAgIFdoZW4gdXNpbmcgIjplICsrZW5jPWZvbyBmaWxlIiBhbmQgdGhlIGZpbGUgaXMgYWxyZWFkeSBsb2FkZWQgd2l0aAogICAgJ2ZpbGVlbmNvZGluZycgc2V0IHRvICJiYXIiLCB0aGVuIGRvX2VjbWQoKSB1c2VzIHRoYXQgYnVmZmVyLCBldmVuIHRob3VnaAogICAgdGhlIGZpbGVlbmNvZGluZyBkaWZmZXJzLiAgUmVsb2FkIHRoZSBidWZmZXIgaW4gdGhpcyBzaXR1YXRpb24/ICBOZWVkIHRvCiAgICBjaGVjayBmb3IgdGhlIGJ1ZmZlciB0byBiZSB1bm1vZGlmaWVkLgo4ICAgIjpnLy8iIGdpdmVzICJQYXR0ZXJuIG5vdCBmb3VuZCBlcnJvciIgd2l0aCBFNDg2LiAgU2hvdWxkIG5vdCB1c2UgdGhlCiAgICBlcnJvciBudW1iZXIsIGl0J3Mgbm90IGEgcmVndWxhciBlcnJvciBtZXNzYWdlLgo3ICAgVmltdHV0b3IgbGVhdmVzIGVzY2FwZSBzZXF1ZW5jZSBpbiB0ZXJtaW5hbC4gVGhpcyBpcyB0aGUgeHRlcm0gcmVzcG9uc2UgdG8KICAgIHJlcXVlc3RpbmcgdGhlIHZlcnNpb24gbnVtYmVyLiAgKFlhc3VoaXJvIE1hdHN1bW90bykKOCAgIFdoZW4gcmVkaXJlY3RpbmcgYW5kIHVzaW5nICI6c2lsZW50IiB0aGUgY3VycmVudCBjb2x1bW4gZm9yIGRpc3BsYXlpbmcgYW5kCiAgICByZWRpcmVjdGlvbiBjYW4gYmUgZGlmZmVyZW50LiAgVXNlIGEgc2VwYXJhdGUgdmFyaWFibGUgdG8gaG9sZCB0aGUgY29sdW1uCiAgICBmb3IgcmVkaXJlY3Rpb24uCjcgICBUaGVyZSBpcyBubyB3YXkgdG8gY2hhbmdlIGRpcmVjdG9yeSBhbmQgZ28gYmFjayB3aXRob3V0IGNoYW5naW5nIHRoZSBsb2NhbAogICAgYW5kL29yIGdsb2JhbCBkaXJlY3RvcnkuICBBZGQgYSB3YXkgdG8gZmluZCBvdXQgaWYgdGhlIGN1cnJlbnQgd2luZG93IHVzZXMKICAgIGEgbG9jYWwgZGlyZWN0b3J5LiAgQWRkIGNkY21kKCkgdGhhdCByZXR1cm5zICI6Y2QiIG9yICI6bGNkIj8KNyAgIFRoZSBtZXNzYWdlcyBmb3IgInZpbSAtLWhlbHAiIGFuZCAidmltIC0tdmVyc2lvbiIgZG9uJ3QgdXNlCiAgICAndGVybWVuY29kaW5nJy4KOCAgIFdoZW4gJ3Njcm9sbGJpbmQnIGlzIHNldCwgYSB3aW5kb3cgd29uJ3Qgc2Nyb2xsIGhvcml6b250YWxseSBpZiB0aGUgY3Vyc29yCiAgICBsaW5lIGlzIHRvbyBzaG9ydC4gIEFkZCBhIHdvcmQgaW4gJ3Njcm9sbG9wdCcgdG8gYWxsb3cgbW92aW5nIHRoZSBjdXJzb3IKICAgIHRvIGxvbmdlciBsaW5lIHRoYXQgaXMgdmlzaWJsZS4gIEEgc2ltaWxhciB0aGluZyBpcyBkb25lIGZvciB0aGUgR1VJIHdoZW4KICAgIHVzaW5nIHRoZSBob3Jpem9udGFsIHNjcm9sbGJhci4KNyAgIFZpc1ZpbSBjYW4gb25seSBvcGVuIG9uZSBmaWxlLiAgSGFyZCB0byBzb2x2ZTogZWFjaCBvcGVuZWQgZmlsZSBpcyBwYXNzZWQKICAgIHdpdGggYSBzZXBhcmF0ZSBpbnZvY2F0aW9uLCB3b3VsZCBuZWVkIHRvIHVzZSB0aW1lc3RhbXBzIHRvIGtub3cgdGhlCiAgICBpbnZvY2F0aW9ucyBiZWxvbmcgdG9nZXRoZXIuCjggICBXaGVuIGdpdmluZyBhICI6YndpcGVvdXQiIGNvbW1hbmQgYSBmaWxlLWNoYW5nZWQgZGlhbG9nIG1heSBwb3B1cCBmb3IgdGhpcwogICAgYnVmZmVyLCB3aGljaCBpcyBwb2ludGxlc3MuICAoTWlrZSBXaWxsaWFtcykKOCAgIE9uIE1TLVdpbmRvd3MgIjptYWtlIiBkb2Vzbid0IHNob3cgb3V0cHV0IHdoaWxlIGl0IGlzIHdvcmtpbmcuICBVc2UgdGhlCiAgICB0ZWUuZXhlIGZyb20gIGh0dHA6Ly91bnh1dGlscy5zb3VyY2Vmb3JnZS5uZXQvID8gIEFib3V0IDE2IEtieXRlIGluIHRoZQogICAgVW54VXRpbHMuemlwIGFyY2hpdmUuCiAgICBBbHRlcm5hdGUgb25lOiBodHRwOi8vd3d3LnByYW1vZHguMjBtLmNvbS90ZWVfZm9yX3dpbjMyLmh0bSwgYnV0IFdhbHRlcgogICAgQnJpc2NvZSBzYXlzIGl0J3Mgbm90IGFzIGdvb2QuCjggICAnZmlsbGNoYXJzJyBkb2Vzbid0IHdvcmsgZm9yIG11bHRpLWJ5dGUgY2hhcmFjdGVycy4KOCAgIENvbW1hbmQgbGluZSBjb21wbGV0aW9uOiBidWZmZXJzICJmb28udHh0IiBhbmQgIi4uL2IvZm9vLnR4dCIsIGNvbXBsZXRpbmcKICAgICI6YnVmIGZvbzxUYWI+IiBkb2Vzbid0IGZpbmQgdGhlIHNlY29uZCBvbmUuIChHZW9yZ2UgVi4gUmVpbGx5KQo3ICAgT3V0cHV0IGZvciAiOnNjcmlwdG5hbWVzIiBhbmQgIjpicmVha2xpc3QiIHNob3VsZCBzaG9ydGVuIHRoZSBmaWxlIG5hbWVzOgogICAgdXNlICJ+LyIgd2hlbiBwb3NzaWJsZS4KNyAgIG1iX29mZjJjZWxscygpIGRvZXNuJ3Qgd29yayBjb3JyZWN0bHkgb24gdGhlIHRhaWwgYnl0ZSBvZiBhIGRvdWJsZS1ieXRlCiAgICBjaGFyYWN0ZXIuIChZYXN1aGlybyBNYXRzdW1vdG8pICBJdCBzaG91bGQgcmV0dXJuIDEgd2hlbiB1c2VkIG9uIGEgdGFpbAogICAgYnl0ZSwgbGlrZSBmb3IgdXRmLTguICBTdG9yZSBzZWNvbmQgYnl0ZSBvZiBkb3VibGUtYnl0ZSBpbiBTY3JlZW5MaW5lczJbXQogICAgKGxpa2UgZm9yIERCQ1NfSlBOVSkgYW5kIHB1dCBhIHplcm8gaW4gdGhlIHNlY29uZCBieXRlIChsaWtlIGZvciBVVEYtOCkuCjggICAnYmFja3VwZGlyJyBhbmQgJ2RpcmVjdG9yeScgc2hvdWxkIHVzZSAkVE1QRElSLCAkVE1QIGFuZC9vciAkVEVNUCB3aGVuCiAgICBkZWZpbmVkLgo3ICAgSW5zaWRlIGEgZnVuY3Rpb24gd2l0aCAicGVybCA8PEVPRiIgYSBsaW5lIHdpdGggIiRpKysiIGlzIHJlY29nbml6ZWQgYXMgYW4KICAgICI6aW5zZXJ0IiBjb21tYW5kLCBjYXVzaW5nIHRoZSBmb2xsb3dpbmcgImVuZGZ1bmN0aW9uIiBub3QgdG8gYmUgZm91bmQuCiAgICBBZGQgc2tpcHBpbmcgdGhpcyBwZXJsIGNvbnN0cnVjdGlvbiBpbnNpZGUgZnVuY3Rpb24gZGVmaW5pdGlvbnMuCjcgICBXaGVuICd0dGltZW91dGxlbicgaXMgMTAgYW5kICd0aW1lb3V0bGVuJyBpcyAxMDAwLCB0aGVyZSBpcyBhIGtleWNvZGUKICAgICI8RXNjPmEiIGFuZCBhIG1hcHBpbmcgPEVzYz54Iiwgd2hlbiB0eXBpbmcgIjxFc2M+YSIgd2l0aCBoYWxmIGEgc2Vjb25kCiAgICBkZWxheSBzaG91bGQgbm90IGJlIGludGVycHJldGVkIGFzIGEga2V5Y29kZS4gKEhhbnMgR2luemVsKQo3ICAgIjpib3RyaWdodCAxIG5ldyIgdHdpY2UgY2F1c2VzIGFsbCB3aW5kb3cgaGVpZ2h0cyB0byBiZSBjaGFuZ2VkLiAgTWFrZSB0aGUKICAgIGJvdHRvbSB3aW5kb3cgb25seSBiaWdnZXIgYXMgbXVjaCBhcyBuZWVkZWQuCjcgICAiW3AiIGRvZXNuJ3Qgd29yayBpbiBWaXN1YWwgbW9kZS4gKERhdmlkIEJyb3duKQo3ICAgVGhlIEN5Z3dpbiBhbmQgTWluZ1cgbWFrZWZpbGVzIGRlZmluZSAiUEMiLCBidXQgaXQncyBub3QgdXNlZCBhbnl3aGVyZS4KICAgIFJlbW92ZT8gKERhbiBTaGFycCkKOSAgIFRoZSBhcmd1bWVudCA8Zi1hcmdzPiBvZiBhIHVzZXIgY29tbWFuZCBkb2Vzbid0IGhhbmRsZSBiYWNrc2xhc2hlcwogICAgcHJvcGVybHkuICAiQ21kIFwgZSIgaXMgb25lIGFyZ3VtZW50LCAiQ21kIFxcIGUiIHN0aWxsIGlzIG9uZSBhcmd1bWVudC4KICAgICJDbWQgXCAgZSIgaXMgdHdvIGFyZ3VtZW50cywgZmlyc3Qgb25lIGVuZGluZyBpbiBzcGFjZS4gKEtvbnRyYSBHZXJnZWx5KQo5ICAgVXNlciBjb21tYW5kcyB1c2UgdGhlIGNvbnRleHQgb2YgdGhlIHNjcmlwdCB0aGV5IHdlcmUgZGVmaW5lZCBpbi4gIFRoaXMKICAgIGNhdXNlcyBhICJzOnZhciIgYXJndW1lbnQgdG8gdW5leHBlY3RlZGx5IHVzZSBhIHZhcmlhYmxlIGluIHRoZSBkZWZpbmluZwogICAgc2NyaXB0LCBub3QgdGhlIGNhbGxpbmcgc2NyaXB0LiAgQWRkIGFuIGFyZ3VtZW50IHRvICI6Y29tbWFuZCI6CiAgICAiLWtlZXBjb250ZXh0Ii4gIERvIHJlcGxhY2UgPFNJRD4sIHNvIHRoYXQgYSBmdW5jdGlvbiBpbiB0aGUgZGVmaW5pbmcKICAgIHNjcmlwdCBjYW4gYmUgY2FsbGVkLgo4ICAgVGhlIEphcGFuZXNlIG1lc3NhZ2UgdHJhbnNsYXRpb25zIGZvciBNUy1XaW5kb3dzIGFyZSBjYWxsZWQgamEuc2ppcy5wbywKICAgIGJ1dCB0aGV5IHVzZSBlbmNvZGluZyBjcDkzMi4gIFJlbmFtZSB0aGUgZmlsZSBhbmQgY2hlY2sgdGhhdCBpdCBzdGlsbAogICAgd29ya3MuCjkgICBXaGVuIGEgc3ludGF4IHJlZ2lvbiBkb2VzIG5vdCB1c2UgImtlZXBlbmQiIGFuZCBhIGNvbnRhaW5lZCBpdGVtIGRvZXMgdXNlCiAgICAiZXh0ZW5kIiwgdGhpcyBtYWtlcyB0aGUgb3V0ZXIgcmVnaW9uIHN0b3AgYXQgdGhlIGVuZCBvZiB0aGUgY29udGFpbmVkCiAgICByZWdpb24uIChMdXR6IEV5bWVycykgIEFub3RoZXIgZXhhbXBsZSBOb3YgMTQgMjAwMi4KOCAgIEEgdmVyeSBsb25nIG1lc3NhZ2UgaW4gY29uZmlybSgpIGNhbid0IGJlIHF1aXQuICBNYWtlIHRoaXMgcG9zc2libGUgd2l0aAogICAgQ1RSTC1DLgo3ICAgY2xpcF94MTFfb3duX3NlbGVjdGlvbigpIHVzZXMgQ3VycmVudFRpbWUsIHRoYXQgaXMgbm90IGFsbG93ZWQuICBWTkMgWAogICAgc2VydmVyIGhhcyBhIHByb2JsZW0gd2l0aCB0aGlzLiAgKE1hcmsgV2FnZ29uZXIpIFJlbWVtYmVyaW5nIHRoZSB0aW1lc3RhbXAKICAgIG9mIGV2ZW50cyBpc24ndCBhbHdheXMgcG9zc2libGUuICBXZSBkb24ndCBnZXQgdGhlbSBpbiBhbiB4dGVybS4gIEdUSwogICAgZG9lc24ndCBvYnRhaW4gdGhlIHNlbGVjdGlvbiBhZ2FpbiB3aGVuIHRoZSB0aW1lc3RhbXAgZGlmZmVycywgdGh1cyBpdAogICAgd29uJ3Qgd29yayBmb3IgR1RLIGFueXdheS4KOCAgIFdoZW4gdGhlIGNsaXBib2FyZCBpc24ndCBzdXBwb3J0ZWQ6ICI6eWFuayoiIGdpdmVzIGEgY29uZnVzaW5nIGVycm9yCiAgICBtZXNzYWdlLiAgU3BlY2lmaWNhbGx5IG1lbnRpb24gdGhhdCB0aGUgcmVnaXN0ZXIgbmFtZSBpcyBpbnZhbGlkLgo4ICAgImdmIiBhbHdheXMgZXhjbHVkZXMgdHJhaWxpbmcgcHVuY3R1YXRpb24gY2hhcmFjdGVycy4gIGZpbGVfbmFtZV9pbl9saW5lKCkKICAgIGlzIGN1cnJlbnRseSBmaXhlZCB0byB1c2UgIi4sOjshIi4gIEFkZCBhbiBvcHRpb24gdG8gbWFrZSB0aGlzCiAgICBjb25maWd1cmFibGU/CjggICAnaGttYXAnIHNob3VsZCBwcm9iYWJseSBiZSBnbG9iYWwtbG9jYWwuCjkgICBXaGVuICIkIiBpcyBpbiAnY3BvcHRpb25zJyBhbmQgZm9sZGluZyBpcyBhY3RpdmUsIGEgIkMiIGNvbW1hbmQgY2hhbmdlcwogICAgdGhlIGZvbGRzIGFuZCByZXNldHMgd19saW5lc192YWxpZC4gIFRoZSBkaXNwbGF5IHVwZGF0aW5nIGRvZXNuJ3Qgd29yawogICAgdGhlbi4gKFByaXRlc2ggTWlzdHJ5KQo4ICAgIjpzIWZyb20hdG8hIiB3b3JrcywgYnV0ICI6c21hZ2ljIWZyb20hdG8hIiBkb2Vzbid0LiAgSXQgc2VlcyB0aGUgIiEiIGFzIGEKICAgIGZsYWcgdG8gdG8gdGhlIGNvbW1hbmQuICBTYW1lIGZvciAiOnNub21hZ2ljIi4gKEpvaGFuIFNwZXR6KQo4ICAgVXNpbmcgIjpzIiBpbiBhIGZ1bmN0aW9uIGNoYW5nZXMgdGhlIHByZXZpb3VzIHJlcGxhY2VtZW50IHN0cmluZy4gIFNhdmUKICAgICJvbGRfc3ViIiBpbiBzYXZlX3NlYXJjaF9wYXR0ZXJucygpPwo4ICAgV2hlbiBhcHBlbmRpbmcgdG8gYSBmaWxlIGFuZCAncGF0Y2htb2RlJyBpc24ndCBlbXB0eSwgYSBiYWNrdXAgZmlsZSBpcwogICAgYWx3YXlzIHdyaXR0ZW4sIGV2ZW4gd2hlbiB0aGUgb3JpZ2luYWwgZmlsZSBhbHJlYWR5IGV4aXN0cy4KNyAgIFdoZW4gdXNpbmcgImRhdyIgb24gdGhlIGxhc3Qgd29yZCBpbiBhIGZpbGUgYW5kIHRoaXMgaXMgYSBzaW5nbGUgbGV0dGVyLAogICAgbm90aGluZyBpcyBkZWxldGVkLiAgU2hvdWxkIGRlbGV0ZSB0aGUgbGV0dGVyIGFuZCBwcmVjZWRpbmcgd2hpdGUgc3BhY2UuCjkgICBXaGVuIGdldHRpbmcgZm9jdXMgd2hpbGUgd3JpdGluZyBhIGxhcmdlIGZpbGUsIGNvdWxkIHdhcm4gZm9yIHRoaXMgZmlsZQogICAgYmVpbmcgY2hhbmdlZCBvdXRzaWRlIG9mIFZpbS4gIEF2b2lkIGNoZWNraW5nIHRoaXMgd2hpbGUgdGhlIGZpbGUgaXMgYmVpbmcKICAgIHdyaXR0ZW4uCjkgICBUaGUgIkVycm9yIGRldGVjdGVkIHdoaWxlIHByb2Nlc3NpbmcgbW9kZWxpbmVzIiBtZXNzYWdlIHNob3VsZCBoYXZlIGFuCiAgICBlcnJvciBudW1iZXIuCjcgICBUaGUgbWVzc2FnZSBpbiBidF9kb250d3JpdGVfbXNnKCkgY291bGQgYmUgY2xlYXJlci4KOCAgIFRoZSBzY3JpcHQgSUQgdGhhdCBpcyBzdG9yZWQgd2l0aCBhbiBvcHRpb24gYW5kIGRpc3BsYXllZCB3aXRoICI6dmVyYm9zZQogICAgc2V0IiBpc24ndCByZXNldCB3aGVuIHRoZSBvcHRpb24gaXMgc2V0IGludGVybmFsbHkuICBGb3IgZXhhbXBsZSB3aGVuCiAgICAnZm9sZGxldmVsJyBpcyBzZXQgZnJvbSAnZm9sZGxldmVsc3RhcnQnLgo4ICAgSW4gdGhlIGZpbGVmb3JtYXQgZGlhbG9nLCAiQ2FuY2VsIiBpc24ndCB0cmFuc2xhdGVkLiAgQWRkIGEgZ2xvYmFsCiAgICB2YXJpYWJsZSBmb3IgdGhpcy4gKEVkdWFyZG8gRmVybmFuZGV6KQo5ICAgV2hlbiBlZGl0aW5nIGEgZmlsZSB3aXRoICdyZWFkb25seScgc2V0LCB0aGVyZSBpcyBubyBjaGVjayBmb3IgYW4gZXhpc3RpbmcKICAgIHN3YXAgZmlsZS4gIFRoZW4gdXNpbmcgIjp3cml0ZSIgKHdpdGhvdXQgbWFraW5nIGFueSBjaGFuZ2VzKSBkb2Vzbid0IGdpdmUKICAgIGEgd2FybmluZyBlaXRoZXIuICBTaG91bGQgY2hlY2sgZm9yIGFuIGV4aXN0aW5nIHN3YXAgZmlsZSB3aXRob3V0IGNyZWF0aW5nCiAgICBvbmUuCjcgICBXaGVuICdzaG93YnJlYWsnIGlzIHNldCwgdGhlIGFtb3VudCBvZiBzcGFjZSBhIFRhYiBvY2N1cGllcyBjaGFuZ2VzLgogICAgU2hvdWxkIHdvcmsgbGlrZSAnc2hvd2JyZWFrJyBpcyBpbnNlcnRlZCB3aXRob3V0IGNoYW5naW5nIHRoZSBUYWJzLgo3ICAgV2hlbiAnbW91c2Vmb2N1cycgaXMgc2V0IGFuZCBzd2l0Y2hpbmcgdG8gYW5vdGhlciB3aW5kb3cgd2l0aCBhIHR5cGVkCiAgICBjb21tYW5kLCB0aGUgbW91c2UgcG9pbnRlciBtYXkgYmUgbW92ZWQgdG8gYSBwYXJ0IG9mIHRoZSB3aW5kb3cgdGhhdCdzCiAgICBjb3ZlcmVkIGJ5IGFub3RoZXIgd2luZG93IGFuZCB3ZSBsb3NlIGZvY3VzLiAgT25seSBtb3ZlIGluIHRoZSB5CiAgICBkaXJlY3Rpb24sIG5vdCBob3Jpem9udGFsbHk/CjggICBXaGVuIHVzaW5nIENUUkwtRCBhZnRlciAiOmhlbHAiLCByZXN0cmljdCB0aGUgbnVtYmVyIG9mIG1hdGNoZXMgdG8gYQogICAgdGhvdXNhbmQsIG90aGVyd2lzZSB1c2luZyBDVFJMLUQgd2l0aG91dCBhbiBhcmd1bWVudCB0YWtlcyB0b28gbG9uZy4KOCAgICI6aGFyZGNvcHkiOgogICAgLSBVc2luZyB0aGUgY3Rlcm1fY29sb3JbXSB0YWJsZSBpcyB3cm9uZyB3aGVuIHRfY29sb3JzIGlzID4gMTYuCiAgICAtIE5lZWQgdG8gaGFuZGxlIHVucHJpbnRhYmxlIGNoYXJhY3RlcnMuCiAgICAtIFdpbjMyOiBPbiBhIEImVyBwcmludGVyIHN5bnRheCBoaWdobGlnaHRpbmcgaXNuJ3QgdmlzaWJsZS4gIFBlcmZvcm0KICAgICAgZGl0aGVyaW5nIHRvIG1ha2UgZ3JleSB0ZXh0PwogICAgLSBBZGQgYSBmbGFnIGluICdwcmludG9wdGlvbnMnIHRvIGFkZCBhbiBlbXB0eSBwYWdlIHRvIG1ha2UgdGhlIHRvdGFsCiAgICAgIG51bWJlciBldmVuLiAgImFkZGVtcHR5Ij8gKE1pa2UgV2lsbGlhbXMpCiAgICAtIFJlc3BlY3QgJ2xpbmVicmVhaycuICBQZXJoYXBzIGFsc28gJ3Nob3dicmVhayc/CiAgICAtIFNob3VsZCBpbnRlcnByZXRlZCBDVFJMLUwgYXMgYSBwYWdlIGJyZWFrLgogICAgLSBHcmV5IGxpbmUgbnVtYmVycyBhcmUgbm90IGFsd2F5cyByZWFkYWJsZS4gIEFkZCBmaWVsZCBpbiAncHJpbnRvcHRpb25zJy4KICAgICAgRGVmYXVsdCB0byBibGFjayB3aGVuIG5vIHN5bnRheCBoaWdobGlnaHRpbmcuCiAgICAtIEJlIGFibGUgdG8gcHJpbnQgYSB3aW5kb3cgaW4gZGlmZiBtb2RlLgogICAgLSBCZSBhYmxlIHRvIHNwZWNpZnkgYSBjb2xvcnNjaGVtZSB0byB1c2UgZm9yIHByaW50aW5nLiAgQW5kIGEgc2VwYXJhdGUKICAgICAgb25lIGZvciBCJlcgcHJpbnRpbmcgKGlmIHRoYXQgY2FuIGJlIGRldGVjdGVkKS4KOCAgIEluIFZpc3VhbCBibG9jayBtb2RlIHdpdGggJ2xicicgc2V0LCBhIGNoYW5nZSBjb21tYW5kIGRvZXNuJ3QgaW5zZXJ0IHRoZQogICAgdGV4dCBpbiBmb2xsb3dpbmcgbGluZXMgd2hlcmUgdGhlIGxpbmVicmVhayBjaGFuZ2VzLgo5ICAgZG9zaW5zdC5jOiBUaGUgREpHUFAgdmVyc2lvbiBjYW4ndCB1bmluc3RhbGwgdGhlIFVuaW5zdGFsbCByZWdpc3RyeSBrZXkgb24KICAgIFdpbmRvd3MgTlQuICBIb3cgdG8gaW5zdGFsbCBhIC5pbmYgZmlsZSBvbiBXaW5kb3dzIE5UIGFuZCBob3cgdG8gZGV0ZWN0CiAgICB0aGF0IFdpbmRvd3MgTlQgaXMgYmVpbmcgdXNlZD8KOCAgIFdoZW4gJ3ZpcnR1YWxlZGl0JyBpcyAiYmxvY2ssaW5zZXJ0IiBhbmQgZW5jb2RpbmcgaXMgInV0Zi04Iiwgc2VsZWN0aW5nIGEKICAgIGJsb2NrIG9mIG9uZSBkb3VibGUtd2lkZSBjaGFyYWN0ZXIsIHRoZW4gImQiIGRlbGV0ZXMgb25seSBoYWxmIG9mIGl0Lgo4ICAgV2hlbiAndmlydHVhbGVkaXQnIGlzIHNldCwgc2hvdWxkICJJIiBpbiBibG9ja3dpc2UgdmlzdWFsIG1vZGUgYWxzbyBpbnNlcnQKICAgIGluIGxpbmVzIHRoYXQgZG9uJ3QgZXh0ZW5kIGludG8gdGhlIGJsb2NrPwo4ICAgV2l0aCAndmlydHVhbGVkaXQnIHNldCwgaW4gSW5zZXJ0IG1vZGUganVzdCBhZnRlciB0aGUgZW5kIG9mIGxpbmUsIENUUkwtTwogICAgeWggZG9lcyBub3QgeWFuayB0aGUgbGFzdCBjaGFyYWN0ZXIgb2YgdGhlIGxpbmUuIChQYXZlbCBQYXB1c2hldikKICAgIERvaW5nICJobCIgZmlyc3QgYXBwZWFycyB0byBtYWtlIGl0IHdvcmsuCjggICBXaXRoICd2aXJ0dWFsZWRpdCcgc2V0IGl0J3MgcG9zc2libGUgdG8gbW92ZSBpbnRvIHRoZSBibGFuayBhcmVhIGZyb20KICAgICdsaW5lYnJlYWsnLgo4ICAgV2l0aCAndmlydHVhbGVkaXQnIHNldCBhbmQgJ3NlbGVjdGlvbicgImV4Y2x1c2l2ZSIsIGEgVmlzdWFsIHNlbGVjdGlvbgogICAgdGhhdCBlbmRzIGluIG9yIGFmdGVyIGEgdGFiLCAiZCIgZG9lc24ndCBkZWxldGUgKHBhcnQgb2YpIHRoZSB0YWIuCiAgICAoSGVsbXV0IFN0aWVnbGVyKQo4ICAgV2l0aCAndmlydHVhbGVkaXQnIHNldCwgYSBibG9ja3dpc2UgVmlzdWFsIHNlbGVjdGlvbiB0aGF0IHN0YXJ0cyBhbmQgZW5kcwogICAgaW4gYSB0YWIsICI8IiBzaGlmdHMgdG9vIG11Y2guIChIZWxtdXQgU3RpZWdsZXIpCjkgICBXaGVuIGp1bXBpbmcgdG8gYSB0YWcsIHRoZSBzZWFyY2ggcGF0dGVybiBpcyBwdXQgaW4gdGhlIGhpc3RvcnkuICBXaGVuCiAgICAnbWFnaWMnIGlzIG9uLCB0aGUgcGF0dGVybiBtYXkgbm90IHdvcmsuICBUcmFuc2xhdGUgdGhlIHBhdHRlcm4gZGVwZW5kaW5nCiAgICBvbiBwX21hZ2ljIHdoZW4gcHV0dGluZyBpdCBpbiB0aGUgaGlzdG9yeT8gIEFsdGVybmF0aXZlOiBTdG9yZSB2YWx1ZSBvZgogICAgJ21hZ2ljJyBpbiBoaXN0b3J5LiAgKE1hcmdvKQo5ICAgb3B0d2luLnZpbTogUmVzdG9yaW5nIGEgbWFwcGluZyBmb3IgPFNwYWNlPiBvciA8Q1I+IGlzIG5vdCBjb3JyZWN0IGZvcgogICAgIjpub3JlbWFwIi4gIEFkZCAibWFwY21kKHtzdHJpbmd9LCB7bW9kZX0pPyAgVXNlIGNvZGUgZnJvbSAiOm1rZXhyYyIuCjkgICBpbmNzZWFyY2ggaXMgaW5jb3JyZWN0IGZvciAiL3RoYXQvPFJldHVybj4vdGhpcy87Ly8iIChsYXN0IHNlYXJjaCBwYXR0ZXJuCiAgICBpc24ndCB1cGRhdGVkKS4KOSAgIHRlcm1fY29uc29sZSBpcyB1c2VkIGJlZm9yZSBpdCBpcyBzZXQgKG1zZG9zLCBBbWlnYSkuCjkgICBHZXQgb3V0LW9mLW1lbW9yeSBmb3IgIjpnL14vLCRzLy9ALyIgb24gMTAwMCBsaW5lcywgdGhpcyBpcyBub3QgaGFuZGxlZAogICAgY29ycmVjdGx5LiAgR2V0IG1hbnkgZXJyb3IgbWVzc2FnZXMgd2hpbGUgcmVkcmF3aW5nIHRoZSBzY3JlZW4sIHdoaWNoCiAgICBjYXVzZSBhbm90aGVyIHJlZHJhdywgZXRjLgo4ICAgWzxDLUk+IGRvZXNuJ3Qgd29yayB3aGVuICcqJyBpcyBpbiAnaXNrZXl3b3JkJy4gIGZpbmRfcGF0dGVybl9pbl9wYXRoKCkKICAgIG11c3QgZXNjYXBlIHNwZWNpYWwgY2hhcmFjdGVycyBpbiB0aGUgcGF0dGVybi4KOCAgIFZpbSBjYW4gb3ZlcndyaXRlIGEgcmVhZC1vbmx5IGZpbGUgd2l0aCAiOnchIi4gICI6dyIgY2FuJ3Qgb3ZlcndyaXRlIGFuCiAgICBleGlzdGluZyBmaWxlLCAidyEiIGNhbiwgYnV0IHBlcmhhcHMgbm90IGEgcmVhZC1vbmx5IGZpbGU/ICBUaGVuIHVzZQogICAgIjp3ISEiIGZvciB0aGF0LgogICAgT3IgYXNrIGZvciBwZXJtaXNzaW9uIHRvIG92ZXJ3cml0ZSBpdCAoaWYgZmlsZSBjYW4gYmUgbWFkZSB3cml0YWJsZSkgYW5kCiAgICByZXN0b3JlIGZpbGUgdG8gcmVhZG9ubHkgYWZ0ZXJ3YXJkcy4KICAgIE92ZXJ3cml0aW5nIGEgZmlsZSBmb3Igd2hpY2ggYSBzd2FwIGZpbGUgZXhpc3RzIGlzIHNpbWlsYXIgaXNzdWUuCjcgICBXaGVuIGNvbXBpbGVkIHdpdGggInh0ZXJtX2NsaXBib2FyZCIsIHN0YXJ0dXAgY2FuIGJlIHNsb3dlciBhbmQgbWlnaHQgZ2V0CiAgICBlcnJvciBtZXNzYWdlIGZvciBpbnZhbGlkICRESVNQTEFZLiAgVHJ5IGNvbm5lY3RpbmcgdG8gdGhlIFggc2VydmVyIGluIHRoZQogICAgYmFja2dyb3VuZCAoZm9ya2VkKSwgc28gdGhhdCBWaW0gc3RhcnRzIHVwIHF1aWNrZXI/ICBDb25uZWN0IGFzIHNvb24gYXMKICAgIHRoZSBjbGlwYm9hcmQgaXMgdG8gYmUgdXNlZCAoVmlzdWFsIHNlbGVjdCBtb2RlIHN0YXJ0cywgcGFzdGUgZnJvbQogICAgY2xpcGJvYXJkKQo3ICAgWDExOiBTb21lIHBlb3BsZSBwcmVmZXIgdG8gdXNlIENMSVBCT0FSRCBpbnN0ZWFkIG9mIFBSSU1BUlkgZm9yIHRoZSBub3JtYWwKICAgIHNlbGVjdGlvbi4gIEFkZCBhbiAieGNsaXBib2FyZCIgYXJndW1lbnQgdG8gdGhlICdjbGlwYm9hcmQnIG9wdGlvbj8gKE1hcmsKICAgIFdhZ2dvbmVyKQo4ICAgRm9yIHh0ZXJtIG5lZWQgdG8gb3BlbiBhIGNvbm5lY3Rpb24gdG8gdGhlIFggc2VydmVyIHRvIGdldCB0aGUgd2luZG93CiAgICB0aXRsZSwgd2hpY2ggY2FuIGJlIHNsb3cuICBDYW4gYWxzbyBnZXQgdGhlIHRpdGxlIHdpdGggIjxFc2M+WzIxdCIsIG5vCiAgICBuZWVkIHRvIHVzZSBYMTEgY2FsbHMuICBUaGlzIHJldHVybnMgIjxFc2M+XWx7dGl0bGV9PEVzYz5cIi4KNiAgIFdoZW4gdGhlIHh0ZXJtIHJlcG9ydHMgdGhlIG51bWJlciBvZiBjb2xvcnMsIGEgcmVkcmF3IG9jY3Vycy4gIFRoaXMgaXMKICAgIGFubm95aW5nIG9uIGEgc2xvdyBjb25uZWN0aW9uLiAgV2FpdCBmb3IgdGhlIHh0ZXJtIHRvIHJlcG9ydCB0aGUgbnVtYmVyIG9mCiAgICBjb2xvcnMgYmVmb3JlIGRyYXdpbmcgdGhlIHNjcmVlbi4gIFdpdGggYSB0aW1lb3V0Lgo4ICAgV2hlbiB0aGUgYnVpbHRpbiB4dGVybSB0ZXJtY2FwIGNvbnRhaW5zIGNvZGVzIHRoYXQgYXJlIG5vdCB3YW50ZWQsIG5lZWQgYQogICAgd2F5IHRvIGF2b2lkIHVzaW5nIHRoZSBidWlsdGluIHRlcm1jYXAuCjggICBYdGVybSBzZW5kcyBeW1tIIGZvciA8SG9tZT4gYW5kIF5bW0YgZm9yIDxFbmQ+IGluIHNvbWUgbW9kZS4gIEFsc28KICAgIHJlY29nbml6ZSB0aGVzZSBrZXlzPyAgTW9zdGx5IHVzZWZ1bCBmb3IgeHRlcm0gc2ltdWxhdG9ycywgbGlrZSBnbm9tZXRlcm0uCiAgICBTZWUgaHR0cDovL2RpY2tleS5oaXMuY29tL3h0ZXJtL3h0ZXJtLmZhcS5odG1sI3h0ZXJtX3BjX3N0eWxlLgo4ICAgJ1sgYW5kICddIHNob3VsZCBiZSBzZXQgdG8gc3RhcnQvZW5kIG9mIGxpbmUgd2hlbiB1c2luZyBhIGxpbmV3aXNlIG9wZXJhdG9yCiAgICAoZS5nLiwgIjp3IikuCjggICBDVFJMLUEgY2FuJ3QgaGFuZGxlIGJpZyAibG9uZyIgbnVtYmVycywgdGhleSBiZWNvbWUgbmVnYXRpdmUuICBDaGVjayBmb3IKICAgICItIiBjaGFyYWN0ZXIsIGlmIG5vdCBwcmVzZW50LCB1c2UgdW5zaWduZWQgbG9uZy4KOCAgIE1ha2UgaXQgcG9zc2libGUgdG8gZGlzYWJsZSB0aGUgc3BlY2lhbCBtZWFuaW5nIG9mICIjIiBpbiB0aGUgZmlyc3QgY29sdW1uCiAgICBmb3IgIj4+Ii4KOCAgIEFkZCBzdXNwZW5kaW5nIHdpdGggQ1RSTC1aIGF0IHRoZSAibW9yZSIgcHJvbXB0LCBhbmQgd2hlbiBleGVjdXRpbmcgYSBsb25nCiAgICBzY3JpcHQgaW4gZG9fY21kbGluZSgpLgo4ICAgV2hlbiB1c2luZyAnaGlkZGVuJywgbWFueSBzd2FwIGZpbGVzIHdpbGwgYmUgb3Blbi4gIFdoZW4gVmltIHJ1bnMgaW50byB0aGUKICAgIG1heGltdW0gbnVtYmVyIG9mIG9wZW4gZmlsZXMsIGVycm9yIG1lc3NhZ2VzIHdpbGwgYXBwZWFyLiAgRGV0ZWN0IHRoYXQKICAgIHRoaXMgcHJvYmxlbSBpcyBwcmVzZW50LCBhbmQgY2xvc2UgYW55IGhpZGRlbiBmaWxlcyB0aGF0IGRvbid0IGhhdmUKICAgIGNoYW5nZXMuCjggICBXaXRoICd2aW1pbmZvJyBzZXQgc3VjaCB0aGF0IHRoZSAiLnZpbWluZm8iIGZpbGUgaXMgd3JpdHRlbiBvbiBhIEZBVAogICAgZmlsZXN5c3RlbSwgYW4gaWxsZWdhbCBmaWxlIG5hbWUgbWF5IGJlIGNyZWF0ZWQ6ICIudmltIi4KOCAgIEZvciBlYWNoIGJ1ZmZlciB0aGF0IGlzIG9wZW5lZCwgdGhlIHZpbWluZm8gZmlsZSBpcyBvcGVuZWQgYW5kIHJlYWQgdG8KICAgIGNoZWNrIGZvciBmaWxlIG1hcmtzLiAgVGhpcyBjYW4gYmUgc2xvdy4KNyAgIEluIHh0ZXJtLCByZWNvZ25pemUgYm90aCB2dDEwMCBhbmQgdnQyMjAgY3Vyc29yIGtleXMuICBDaGFuZ2UKICAgIGFkZF90ZXJtY29kZSgpIHRvIG5vdCByZW1vdmUgYW4gZXhpc3RpbmcgZW50cnkgZm9yIGEgbmFtZSwgd2hlbiBpdCdzCiAgICBuZWVkZWQuCiAgICBOZWVkIGEgZ2VuZXJpYyBzb2x1dGlvbiB0byByZWNvZ25pemUgZGlmZmVyZW50IGNvZGVzIGZvciB0aGUgc2FtZSBrZXkuCjggICBDb3JlIGR1bXAgd2l0aGluIHNpZ25hbCBmdW5jdGlvbjogZ2RiIGRvZXNuJ3Qgc2hvdyBzdGFjayBiYWNrdHJhY2UhICBPcHRpb24KICAgIHRvIHNraXAgY2F0Y2hfc2lnbmFscygpPwo5ICAgUmVwZWF0aW5nIGEgImN3IiB3aXRoICIuIiBkb2Vzbid0IHdvcmsgaWYgdGhlIHRleHQgd2FzIHBhc3RlZCBmcm9tIHRoZQogICAgY2xpcGJvYXJkLiAoVGhvbWFzIEpvbmVzKSAgSXQncyBiZWNhdXNlIHRoZSBtZW51L3Rvb2xiYXIgaXRlbSBleGl0cyBJbnNlcnQKICAgIG1vZGUgYW5kIHVzZXMgImdQIi4gIEhvdyB0byBmaXggdGhpcyB3aXRob3V0IGJyZWFraW5nIGluc2VydGluZyBhIGJsb2NrIG9mCiAgICB0ZXh0Pwo4ICAgSW4gUmVwbGFjZSBtb2RlIHBhc3RpbmcgZnJvbSB0aGUgY2xpcGJvYXJkICh1c2luZyBtZW51IG9yIHRvb2xiYXIpIGluc2VydHMKICAgIGFsbCB0aGUgdGV4dC4gIEFkZCAiOnJtZW51Ij8KOCAgIFBhc3Rpbmcgd2l0aCB0aGUgbW91c2UgaW4gUmVwbGFjZSBtb2RlIGluc2VydHMgdGhlIHRleHQsIGluc3RlYWQgb2YKICAgIG92ZXJ3cml0aW5nLCB3aGVuIGl0IGlzIG1vcmUgdGhhbiBvbmUgbGluZS4gIFNhbWUgZm9yIHVzaW5nIDxDLVI+Lgo5ICAgQ1RSTC1FIGFuZCBDVFJMLVkgZG9uJ3Qgd29yayBpbiBzbWFsbCB3aW5kb3cgd2hlbiAnc28nIGlzIDQgYW5kIGxpbmVzIGFyZQogICAgd3JhcHBpbmcgKEFjZXZlZG8vaW4uMjI2KS4gIEUuZy4sIHdoZW4gdXNpbmcgQ1RSTC1FLCB3aW5kb3cgaGVpZ2h0IDcsCiAgICB3aW5kb3cgbWlnaHQgYWN0dWFsbHkgc2Nyb2xsIGRvd24gd2hlbiBsYXN0IGxpbmUgb2YgYnVmZmVyIGlzIGRpc3BsYXllZC4KICAgIC0tPiBSZW1lbWJlciBpZiB0aGUgcHJldmlvdXMgY29tbWFuZCB3YXMgImN1cnNvciBmb2xsb3dzIHNjcmVlbiIgb3IKICAgICJzY3JlZW4gZm9sbG93IGN1cnNvciIgYW5kIHVzZSB0aGlzIGluIGN1cnN1cGRhdGUoKS4KNyAgIHRpbGRlX3JlcGxhY2UoKSBjYW4gb25seSBoYW5kbGUgIn4vIiwgc2hvdWxkIGFsc28gZG8gIn51c2VyLyIuCiAgICBHZXQgdGhlIGxpc3Qgb2YgaG9tZSBkaXJlY3RvcmllcyAoZnJvbSAvZXRjL3Bhc3N3ZD8gIFVzZSBnZXRwd2VudCgpKSBhbmQKICAgIHVzZSBzb21lIGNsZXZlciBhbGdvcml0aG0gdG8gbWF0Y2ggYSBwYXRoIHdpdGggdGhhdC4gIEZpbmQgY29tbW9uIHN0cmluZ3MKICAgIGluIHRoZSBsaXN0Pwo4ICAgV2hlbiBkcmFnZ2luZyBzdGF0dXMgbGluZSB3aXRoIG1vdXNlLCBzb21ldGltZXMgYSBqdW1wIHdoZW4gZmlyc3QgY2xpY2tpbmcKICAgIG9uIHRoZSBzdGF0dXMgbGluZSAoY2F1c2VkIGJ5ICd3aW5oZWlnaHQnKS4gIFNlbGVjdCB3aW5kb3cgb24gYnV0dG9uIHVwLAogICAgaW5zdGVhZCBvZiBvbiBidXR0b24gZG93bi4KOCAgIERyYWdnaW5nIHRoZSBzdGF0dXMgbGluZSBkb2Vzbid0IHNjcm9sbCBidXQgcmVkcmF3Lgo5ICAgRXZhbHVhdGluZyAnc3RhdHVzbGluZScgaW4gYnVpbGRfc3RsX3N0cl9obCgpIGRvZXMgbm90IHByb3Blcmx5IGNoZWNrIGZvcgogICAgcmVhY2hpbmcgdGhlIGVuZCBvZiB0aGUgYXZhaWxhYmxlIGJ1ZmZlci4KOCAgIFdoZW4gcGVyZm9ybWluZyBpbmNyZW1lbnRhbCBzZWFyY2gsIHNob3VsZCBhYm9ydCBzZWFyY2hpbmcgYXMgc29vbiBhcyBhCiAgICBjaGFyYWN0ZXIgaXMgdHlwZWQuCjggICBXaGVuIHRoZSB2YWx1ZSBvZiAkTUFLRSBjb250YWlucyBhIHBhdGgsIGNvbmZpZ3VyZSBjYW4ndCBoYW5kbGUgdGhpcy4KICAgIEl0J3MgYW4gYXV0b2NvbmYgYnVnLiAgUmVtb3ZlIHRoZSBwYXRoIGZyb20gJE1BS0UgdG8gd29yayBhcm91bmQgaXQuCjggICBIb3cgdG8gc2V0IFZJTVJDX0ZJTEUgdG8gXCJzb21ldGhpbmdcIiBmb3IgY29uZmlndXJlPyAgV2h5IGRvZXMgdGhpcyBub3QKICAgIHdvcms6IENGTEFHUz0nLURWSU1SQ19GSUxFPVwiL215ZGlyL215ZmlsZVwiJyAuL2NvbmZpZ3VyZQo4ICAgVGhlIHRlbXBvcmFyeSBmaWxlIGlzIHNvbWV0aW1lcyBub3Qgd3JpdGFibGUuICBDaGVjayBmb3IgdGhpcywgYW5kIHVzZSBhbgogICAgYWx0ZXJuYXRlIG5hbWUgd2hlbiBpdCBpc24ndC4gIE9yIGFkZCB0aGUgJ3RlbXB0ZW1wbGF0ZScgb3B0aW9uOiB0ZW1wbGF0ZQogICAgZm9yIHRoZSB0ZW1wIGZpbGUgbmFtZSAiOnNldCB0ZW1wdGVtcGxhdGU9L3Vzci90bXAvPz8/Pz8udG1wIi4KICAgIEFsc286IFdpbjMyIHZlcnNpb24gdXNlcyBXaW5kb3dzIHRlbXAgZGlyZWN0b3J5LCB3aGljaCBtaWdodCBub3Qgd29yayBmb3IKICAgIGN5Z3dpbiBiYXNoLgo3ICAgR2V0IGVycm9yICIqLCBcKyBvciBcKCBvcGVyYW5kIGNvdWxkIGJlIGVtcHR5IiBmb3IgcGF0dGVybiAiXCguXClcMVx7M30iLgogICAgUmVtZW1iZXIgZmxhZ3MgZm9yIGJhY2tyZWZlcmVuY2VzLgo3ICAgV2hlbiBzd2l0Y2hpbmcgdG8gRGF5bGlnaHQgU2F2aW5nIFRpbWUsIFZpbSBjb21wbGFpbnMgdGhhdCBhIGZpbGUgaGFzIGJlZW4KICAgIGNoYW5nZWQgc2luY2UgbGFzdCByZWFkLiAgQ2FuIHdlIHVzZSBhIGZ1bmN0aW9uIHRoYXQgdXNlcyBHTVQ/CjcgICBXaGVuIGNvbXBsZXRpbmcgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgYWZ0ZXIgYSAnJCcsIGNoZWNrIGZvciBmaWxlIG5hbWVzCiAgICB0aGF0IGNvbnRhaW4gYSAnJCcgYWZ0ZXIgYWxsIGhhdmUgYmVlbiBmb3VuZC4KOCAgIFdoZW4gImNtIiB0ZXJtY2FwIGVudHJ5IGlzIG1pc3NpbmcsIHN0YXJ0aW5nIGd2aW0gc2hvdWxkbid0IGNvbXBsYWluIGFib3V0CiAgICBpdC4gKExvaG5lcikgIFRyeSBvdXQgd2l0aCAidnQxMDAiIGVudHJ5LCBjbSByZXBsYWNlZCB3aXRoIGNYLgo3ICAgV2hlbiBhbiBpbmNsdWRlIGZpbGUgc3RhcnRzIHdpdGggIi4uLyIsIHRoZSBjaGVjayBmb3IgYWxyZWFkeSB2aXNpdGluZwogICAgdGhpcyBmaWxlIGRvZXNuJ3Qgd29yay4gIE5lZWQgdG8gc2ltcGxpZnkgdGhlIGZpbGUgbmFtZS4KNyAgIFRoZSBuYW1lcyBhbmQgY29tbWVudHMgZm9yIHRoZSBhcmd1bWVudHMgb2YgZG9fYnJvd3NlKCkgYXJlIGNvbmZ1c2luZy4KICAgICJkZmx0IiBpc24ndCB0aGUgZGVmYXVsdCBmaWxlIG5hbWUgd2hlbiAiaW5pdGRpciIgaXMgbm90IE5VTEwgYW5kCiAgICAiaW5pdGRpciIgaXMgdGhlIGRlZmF1bHQgcGF0aCB0byBiZSB1c2VkLgo3ICAgV2hlbiAnc2Nyb2xsb2ZmJyBpcyBleGFjdGx5IGhhbGYgdGhlIHdpbmRvdyBoZWlnaHQsICJqIiBjYXVzZXMgYSBzY3JvbGwgb2YKICAgIHR3byBsaW5lcyBhdCBhIHRpbWUuICAiayIgZG9lc24ndCBkbyB0aGlzLiAoQ29yeSBULiBFY2hvbHMpCjggICBXaGVuIHdyaXRlX3ZpbWluZm8oKSBpcyB1c2VkIHdoaWxlIHRoZXJlIGFyZSBtYW55IG9ycGhhbmVkIHZpbWluZm8KICAgIHRlbXBmaWxlcyB3cml0aW5nIHRoZSB2aW1pbmZvIGZpbGUgZmFpbHMuICBHaXZlIGEgY2xlYXIgZXJyb3IgbWVzc2FnZSBzbwogICAgdGhhdCB0aGUgdXNlciBrbm93cyBoZSBoYXMgdG8gZGVsZXRlIHRoZSBmaWxlcy4KNyAgIEl0J3MgcG9zc2libGUgdG8gcmVkZWZpbmUgYSBzY3JpcHQtbG9jYWwgZnVuY3Rpb24gd2l0aCAiOmZ1bmMKICAgIDxTTlI+MTIzX1Rlc3QoKSIuIChLcmlzaG5hKSAgRGlzYWxsb3cgdGhpcy4KCgpJIGNhbid0IHJlcHJvZHVjZSB0aGVzZSAoaWYgeW91IGNhbiwgbGV0IG1lIGtub3cgaG93ISk6CjkgICBOVCA0LjAgb24gTlRGUyBmaWxlIHN5c3RlbTogRWRpdGluZyAiLmJhc2hyYyIgKGRyYWcgYW5kIGRyb3ApLCBmaWxlCiAgICBkaXNhcHBlYXJzLiAgRWRpdGluZyAiLnh5eiIgaXMgT0suICBBbHNvLCBkcmFnJmRyb3Agb25seSB3b3JrcyBmb3IgdGhyZWUKICAgIGZpbGVzLiAoTWNDb2xsaXN0ZXIpCgoKUHJvYmxlbXMgdGhhdCB3aWxsIChwcm9iYWJseSkgbm90IGJlIHNvbHZlZDoKLSAgIHh0ZXJtIHRpdGxlOiBUaGUgZm9sbG93aW5nIHNjZW5hcmlvIG1heSBvY2N1ciAoZXNwLiB3aGVuIHJ1bm5pbmcgdGhlIFZpbQogICAgdGVzdCBzY3JpcHQpOiBWaW0gMSBzZXRzIHRoZSB0aXRsZSB0byAiZmlsZTEiLCB0aGVuIHJlc3RvcmVzIHRoZSB0aXRsZSB0bwogICAgInh0ZXJtIiB3aXRoIGFuIEVTQyBzZXF1ZW5jZSB3aGVuIGV4aXRpbmcuICBWaW0gMiBvYnRhaW5zIHRoZSBvbGQgdGl0bGUKICAgIHdpdGggYW4gWCBsaWJyYXJ5IGNhbGwsIHRoaXMgbWF5IHJlc3VsdCBpbiAiZmlsZTEiLCBiZWNhdXNlIHRoZSB3aW5kb3cKICAgIG1hbmFnZXIgaGFzbid0IHByb2Nlc3NlZCB0aGUgInh0ZXJtIiB0aXRsZSB5ZXQuICBDYW4gYXBwYXJlbnRseSBvbmx5IGJlCiAgICB3b3JrZWQgYXJvdW5kIHdpdGggYSBkZWxheS4KLSAgIEluIGEgdGVybWluYWwgd2l0aCAnbW91c2UnIHNldCBzdWNoIHRoYXQgdGhlIG1vdXNlIGlzIGFjdGl2ZSB3aGVuIGVudGVyaW5nCiAgICBhIGNvbW1hbmQgbGluZSwgYWZ0ZXIgZXhlY3V0aW5nIGEgc2hlbGwgY29tbWFuZCB0aGF0IHNjcm9sbHMgdXAgdGhlCiAgICBkaXNwbGF5IGFuZCB0aGVuIHByZXNzaW5nICI6IjogU2VsZWN0aW5nIHRleHQgd2l0aCB0aGUgbW91c2Ugd29ya3MgbGlrZQogICAgdGhlIGRpc3BsYXkgd2Fzbid0IHNjcm9sbGVkLiAgVmltIGRvZXNuJ3Qga25vdyBob3cgbXVjaCB0aGUgZXh0ZXJuYWwKICAgIGNvbW1hbmQgc2Nyb2xsZWQgdXAgdGhlIGRpc3BsYXkuICBVc2UgU2hpZnQgdG8gc2VsZWN0IHRleHQuCi0gICBYIHdpbmRvd3M6IFdoZW4gJERJU1BMQVkgcG9pbnRzIHRvIGEgWCBzZXJ2ZXIgd2hlcmUgdGhlcmUgaXMgbm8gYWNjZXNzCiAgICBwZXJtaXNzaW9uLCB0cnlpbmcgdG8gY29ubmVjdCB0byB0aGUgWCBzZXJ2ZXIgY2F1c2VzIGFuIGVycm9yIG1lc3NhZ2UuCiAgICBYdE9wZW5EaXNwbGF5KCkgcHJpbnRzIHRoaXMgZGlyZWN0bHksIHRoZXJlIGlzIG5vIHdheSB0byBhdm9pZCBpdC4KLSAgIFggd2luZG93czogU2V0dGluZyAnZ3VpZm9udHNldCcgdG8gYW4gaWxsZWdhbCB2YWx1ZSBzb21ldGltZXMgY3Jhc2hlcyBWaW0uCiAgICBUaGlzIGlzIGNhdXNlZCBieSBhIGZhdWx0IGluIGEgWCBsaWJyYXJ5IGZ1bmN0aW9uLCBjYW4ndCBiZSBzb2x2ZWQgaW4gVmltLgotICAgTW90aWY6IFdoZW4gYWRkaW5nIGEgbWVudSBpdGVtICJGaW5kIHRoaXMgJlN5bWJvbCIsIHRoZSAicyIgaW4gInRoaXMiIHdpbGwKICAgIGJlIHVuZGVybGluZWQsIGluc3RlYWQgb2YgaW4gIlN5bWJvbCIuICBNb3RpZiBkb2Vzbid0IGxldCB1cyBzcGVjaWZ5IHdoaWNoCiAgICBjaGFyYWN0ZXIgZ2V0cyB0aGUgaGlnaGxpZ2h0aW5nLgotICAgTW92aW5nIHRoZSBjdXJzb3IgcmVtb3ZlcyBjb2xvciBpbiBjb2xvci14dGVybS4gIFRoaXMgaXMgYSBjb2xvci14dGVybQogICAgcHJvYmxlbSEgIGNvbG9yLXh0ZXJtIHZlci4gNi4xIGJldGEgMyBhbmQgbGF0ZXIgd29yayBwcm9wZXJseS4KLSAgIEluIHpzaCwgImd2aW0mIiBjaGFuZ2VzIHRoZSB0ZXJtaW5hbCBzZXR0aW5ncy4gIFRoaXMgaXMgYSB6c2ggcHJvYmxlbS4KICAgIChKZW5uaW5ncykKLSAgIFByb2JsZW0gd2l0aCBIUHRlcm0gdW5kZXIgWDogb2xkIGNvbnRlbnRzIG9mIHdpbmRvdyBpcyBsb3N0IChDb3NlbnRpbm8pLgotICAgQW1pZ2E6IFdoZW4gdXNpbmcgcXVpY2tmaXggd2l0aCB0aGUgTWFueCBjb21waWxlciB3ZSBvbmx5IGdldCB0aGUgZmlyc3QgMjUKICAgIGVycm9ycy4gIEhvdyBkbyB3ZSBnZXQgdGhlIHJlc3Q/Ci0gICBBbWlnYTogVGhlICI6Y3EiIGNvbW1hbmQgZG9lcyBub3QgYWx3YXlzIGFib3J0IHRoZSBNYW54IGNvbXBpbGVyLiAgV2h5PwotICAgTGludXg6IEEgZmlsZSB3aXRoIHByb3RlY3Rpb24gci0tcnctcnctIGlzIHNlZW4gcmVhZG9ubHkgZm9yIG90aGVycy4gIFRoZQogICAgYWNjZXNzKCkgZnVuY3Rpb24gaW4gR05VIGxpYmMgaXMgcHJvYmFibHkgd3JvbmcuCi0gICBNU0RPUzogV2hlbiB1c2luZyBzbWFydGRyaXZlIHdpdGggd3JpdGUtYmFjayBidWZmZXJpbmcsIHdyaXRpbmcgdG8gYQogICAgcmVhZG9ubHkgZmxvcHB5IHdpbGwgY2F1c2UgcHJvYmxlbXMuICBIb3cgdG8gdGVzdCBmb3IgYSB3cml0YWJsZSBmbG9wcHkKICAgIGZpcnN0PwotICAgTVNET1M6IEJvdGggMTYgYW5kIDMyIGJpdCB2ZXJzaW9uczogRmlsZSBuYW1lIGV4cGFuc2lvbiBkb2Vzbid0IHdvcmsgZm9yCiAgICBuYW1lcyB0aGF0IHN0YXJ0IHdpdGggYSBkb3QuICBUaGVzZSB1c2VkIHRvIGJlIGlsbGVnYWwgZmlsZSBuYW1lcy4KLSAgIFdoZW4gZG9pbmcgYSBDVFJMLVogYW5kIHR5cGluZyBhIGNvbW1hbmQgZm9yIHRoZSBzaGVsbCwgd2hpbGUgVmltIGlzIGJ1c3kKICAgIChlLmcuIHdyaXRpbmcgYSBmaWxlKSwgdGhlIGNvbW1hbmQgZm9yIHRoZSBzaGVsbCBpcyBzb21ldGltZXMgZWF0ZW4gYnkgVmltLAogICAgYmVjYXVzZSB0aGUgdGVybWluYWwgbW9kZSBpcyBjaGFuZ2VkIGZyb20gUkFXIHRvIENCUkVBSy4KLSAgIEFuIG9sZCB2ZXJzaW9uIG9mIEdOVSB0Z290byBjYW4ndCBoYW5kbGUgdGhlIHRlcm1pbmZvIGNvZGUgZm9yICJBRiIuICBUaGUKICAgICIlcDEiIGlzIGludGVycHJldGVkIGFzICIlcCIgYW5kICIxIiwgY2F1c2luZyBjb2xvciBub3QgdG8gYmUgd29ya2luZy4KICAgIEZpeDogQ2hhbmdlIHRoZSAiJXAxIiBpbiB0aGUgIkFGIiBhbmQgIkFCIiB0ZXJtaW5mbyBlbnRyaWVzIHRvICIlcCIuCiAgICAoQmVuemluZ2VyKS4KLSAgIFdoZW4gcnVubmluZyBhbiBleHRlcm5hbCBjb21tYW5kIGZyb20gdGhlIEdVSSwgdHlwZWFoZWFkIGlzIGdvaW5nIHRvIHRoYXQKICAgIHByb2dyYW0sIG5vdCB0byBWaW0uICBJdCBsb29rcyBsaWtlIHRoZSBzaGVsbCBlYXRzIHRoZSBjaGFyYWN0ZXJzLCBWaW0KICAgIGNhbid0IGdldCBiYWNrIHdoYXQgdGhlIGV4dGVybmFsIGNvbW1hbmQgZGlkbid0IHVzZS4KLSAgIFdpbjMyIEdVSTogRXJyb3IgY29kZSBmcm9tIGV4dGVybmFsIGNvbW1hbmQgbm90IHJldHVybmVkIGluIHNoZWxsX2Vycm9yLgogICAgSXQgYXBwZWFycyB0aGF0IGNtZC5leGUgYW5kIGNvbW1hbmQuY29tIGRvbid0IHJldHVybiBhbiBlcnJvciBjb2RlLgotICAgV2luMzIgR1VJOiBUaGUgVG9vbGJhciBpcyBhIGJpdCB0b28gaGlnaCB3aGVuIHRoZSBmbGF0IHN0eWxlIGlzIGJlaW5nCiAgICB1c2VkLiAgV2UgZG9uJ3QgaGF2ZSBjb250cm9sIG92ZXIgdGhlIGhlaWdodCBvZiB0aGUgVG9vbGJhci4KLSAgIFdpbjMyOiBBbGwgZmlsZXMgY3JlYXRlZCBvbiB0aGUgZGF5IG9mIHN3aXRjaGluZyBmcm9tIHdpbnRlciB0byBzdW1tZXIKICAgIHRpbWUgY2F1c2UgImNoYW5nZWQgc2luY2UgZWRpdGluZyBzdGFydGVkIiBtZXNzYWdlcy4gIEl0IGdvZXMgYXdheSB3aGVuCiAgICB0aGUgZmlsZSBpcyB3cml0dGVuIGFnYWluIHRoZSBuZXh0IGRheSwgb3IgdGhlIHRpbWV6b25lIGlzIGFkanVzdGVkLgogICAgREpHUFAgdmVyc2lvbiBpcyBPSy4gKFphaW1pKSAgTG9va3MgbGlrZSBhIHByb2JsZW0gd2l0aCB0aGUgV2luMzIgbGlicmFyeS4KICAgIFJlYm9vdGluZyBkb2Vzbid0IGhlbHAuICBUaW1lIHN0YW1wcyBsb29rIE9LIGluIGRpcmVjdG9yeS4gKFBlbm4pCiAgICBJcyB0aGlzIG9uIEZBVCAoc3RvcmVzIHdhbGwgY2xvY2sgdGltZSkgb3IgTlRGUyAoc3RvcmVzIFVUUyk/Ci0gICBXaW4zMiwgTVMtV2luZG93cyBYUDogJEhPTUUgdXNlcyB0aGUgd3JvbmcgZHJpdmUgd2hlbiB0aGUgdXNlciBwcm9maWxlcwogICAgYXJlIG5vdCBvbiB0aGUgYm9vdCBkaXNrLiAgVGhpcyBpcyBjYXVzZWQgYnkgYSB3cm9uZyB2YWx1ZSBvZiAkSE9NRURSSVZFLgogICAgVGhpcyBpcyBhIGJ1ZyBpbiBYUCwgc2VlIE1TS0IgYXJ0aWNsZSA4MTgxMzQuCi0gICBTdW5PUyA1LjUuMSB3aXRoIE1vdGlmOiBUaGUgZmlsZSBvcGVuIGRpYWxvZyBkb2VzIG5vdCBoYXZlIGEgaG9yaXpvbnRhbAogICAgc2Nyb2xsIGJhciBmb3IgdGhlICJmaWxlcyIgc2VsZWN0aW9uLiAgVGhpcyBpcyBhIHByb2JsZW0gaW4gdGhlIE1vdGlmCiAgICBsaWJyYXJpZXMsIGdldCBhIHBhdGNoIGZyb20gU3VuLgotICAgU29sYXJpcyAyLjYgd2l0aCBHVEsgYW5kIFBlcmw6IGd2aW0gY3Jhc2hlcyB3aGVuIHN0YXJ0ZWQuICBQcm9ibGVtIHdpdGggWAogICAgaW5wdXQgbWV0aG9kIGNhbGxlZCBmcm9tIEdESyBjb2RlLiAgV2l0aG91dCBQZXJsIGl0IGRvZXNuJ3QgY3Jhc2guCi0gICBWTVM6IFZpbWRpZmYgZG9lc24ndCB3b3JrIHdpdGggdGhlIFZNUyBkaWZmLCBiZWNhdXNlIHRoZSBvdXRwdXQgbG9va3MKICAgIGRpZmZlcmVudC4gIFRoaXMgbWFrZXMgdGVzdCA0NyBmYWlsLiAgSW5zdGFsbCBhIFVuaXgtY29tcGF0aWJsZSBkaWZmLgotICAgVk1TIHY3LjEgYW5kIG9sZGVyOiBUZXN0cyAyMSBhbmQgMzIgZmFpbC4gIEZyb20gVk1TIHY3LjEtMiBhbmQgbmV3ZXIgVmltCiAgICBkb2VzIG5vdCBoYXZlIHRoaXMgYmVoYXZpb3IuIChab2x0YW4gQXJwYWRmZnkpCi0gICBXaW4zMiBHVUk6IG1vdXNlIHdoZWVsIGFsd2F5cyBzY3JvbGxzIHJpZ2h0bW9zdCB3aW5kb3cuICBUaGUgZXZlbnRzIGFycml2ZQogICAgaW4gVmltIGFzIGlmIHRoZSByaWdodG1vc3Qgc2Nyb2xsYmFyIHdhcyB1c2VkLgotICAgR1RLIHdpdGggR25vbWU6IFByb2R1Y2VzIGFuIGVycm9yIG1lc3NhZ2Ugd2hlbiBzdGFydGluZyB1cDoKCUdkay1XQVJOSU5HICoqOiBsb2NhbGUgbm90IHN1cHBvcnRlZCBieSBDIGxpYnJhcnkKICAgIFRoaXMgaXMgY2F1c2VkIGJ5IHRoZSBnbm9tZSBsaWJyYXJ5IGdub21lX2luaXQoKSBzZXR0aW5nICRMQ19DVFlQRSB0bwogICAgImVuX1VTIi4gIE5vdCBhbGwgc3lzdGVtcyBzdXBwb3J0IHRoaXMgbG9jYWxlIG5hbWUsIHRodXMgY2F1c2luZyB0aGUKICAgIGVycm9yLiAgSG9wZWZ1bGx5IGEgbmV3ZXIgdmVyc2lvbiBvZiBHVEsvR25vbWUgZml4ZXMgdGhpcyBwcm9ibGVtLgotICAgR1RLIDI6IFdpdGggdGhpcyBtYXBwaW5nIHRoZSBoaXQtZW50ZXIgcHJvbXB0IGlzIF9zb21ldGltZXNfIGJlbG93IHRoZQogICAgc2NyZWVuLCBhdCBvdGhlciB0aW1lcyB0aGVyZSBpcyBhIGdyZXkgYXJlYSBiZWxvdyB0aGUgY29tbWFuZCBsaW5lOgoJOm5tYXAgPEYxMT4gOmlmICZndWlvcHRpb25zPX4nbScgXHwgc2V0IGd1aW9wdGlvbnMtPW0gXHwgZWxzZSBcfCBzZXQgZ3Vpb3B0aW9ucys9bSBcfCBlbmRpZjxjcj4KLSAgIEdUSzogV2hlbiBwYXN0aW5nIGEgc2VsZWN0aW9uIGZyb20gVmltIHRvIHhjbGlwYm9hcmQgZ3ZpbSBjcmFzaGVzIHdpdGggYQogICAgQUJSVCBzaWduYWwuICBQcm9iYWJseSBhbiBlcnJvciBpbiB0aGUgZmlsZSBnZGtzZWxlY3Rpb24uYywgdGhlIGFzc2VydAogICAgYWx3YXlzIGZhaWxzIHdoZW4gWG1iVGV4dExpc3RUb1RleHRQcm9wZXJ0eSgpIGZhaWxzLiAoVG9tIEFsbGFyZCkKLSAgIEdUSyAyOiBnaXZlcyBhbiBhc3NlcnRpb24gZXJyb3IgZm9yIGV2ZXJ5IG5vbi1idWlsdGluIGljb24gaW4gdGhlIHRvb2xiYXIuCiAgICBUaGlzIGlzIGEgR1RLIDIuNC54IGJ1ZywgZml4ZWQgaW4gR1RLIDIuNC4yLiAoVGhvbWFzIGRlIEdyZW5pZXIgZGUgTGF0b3VyKQotICAgV2hlbiB1c2luZyBhbiB4dGVybSB0aGF0IHN1cHBvcnRzIHRoZSB0ZXJtcmVzcG9uc2UgZmVhdHVyZSwgYW5kIHRoZSAndF9DbycKICAgIHRlcm1jYXAgb3B0aW9uIHdhcyB3cm9uZyB3aGVuIFZpbSBzdGFydGVkLCBpdCB3aWxsIGJlIGNvcnJlY3RlZCB3aGVuIHRoZQogICAgdGVybXJlc3BvbnNlIGlzIHJlY2VpdmVkLiAgU2luY2UgdGhlIG51bWJlciBvZiBjb2xvcnMgY2hhbmdlcywgdGhlCiAgICBoaWdobGlnaHRpbmcgbmVlZHMgdG8gYmUgaW5pdGlhbGl6ZWQgYWdhaW4uICBUaGlzIG1heSBjYXVzZSBjb2xvcnMgZGVmaW5lZAogICAgaW4gdGhlIHZpbXJjIGZpbGUgdG8gYmUgbG9zdC4KLSAgIE9uIFdpbmRvd3MgTlQgNC4wIHRoZSBudW1iZXIgb2YgZmlsZXMgcGFzc2VkIHRvIFZpbSB3aXRoIGRyYWcmZHJvcCBhbmQKICAgICJFZGl0IHdpdGggVmltIiBpcyBsaW1pdGVkLiAgVGhlIG1heGltdW0gY29tbWFuZCBsaW5lIGxlbmd0aCBpcyAyNTUgY2hhcnMuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIGV4dGVuc2lvbnMgYW5kIGltcHJvdmVtZW50cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkJCQkJCSAgICAqZXh0ZW5zaW9ucy1pbXByb3ZlbWVudHMqCgpEb2N1bWVudGF0aW9uOgo4ICAgVGhlIEdVSSBoZWxwIHNob3VsZCBleHBsYWluIHRoZSBGaW5kIGFuZCBGaW5kL1JlcGxhY2UgZGlhbG9ncy4gIEFkZCBhIGxpbmsKICAgIHRvIGl0IGZyb20gIjpwcm9tcHRyZXBsIiBhbmQgIjpwcm9tcHRmaW5kIi4KOCAgIExpc3Qgb2Ygb3B0aW9ucyBzaG91bGQgbWVudGlvbiB3aGV0aGVyIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgZXhwYW5kZWQKICAgIG9yIG5vdC4KOCAgIEV4dGVuZCB1c3JfMjcudHh0IGEgYml0LiAoQWRhbSBTZXlmYXJ0aCkKNyAgIEFkZCBhIHNlY3Rpb24gb24gZGVidWdnaW5nIHNjcmlwdHMgaW4gdGhlIHVzZXIgbWFudWFsLgo5ICAgTWFrZSB0aGUgUmVmZXJlbmNlIE1hbnVhbCBtb3JlIHByZWNpc2UuICBGb3IgZWFjaCBjb21tYW5kIG1lbnRpb246CiAgICAtIGNoYW5nZSB0byBjdXJzb3IgcG9zaXRpb24gYW5kIGN1cnN3YW50CiAgICAtIGlmIGl0IGNhbiBiZSB1bmRvbmUgKHUvQ1RSTC1SKSBhbmQgcmVkb25lICguKQogICAgLSBob3cgaXQgd29ya3MgZm9yIGZvbGRlZCBsaW5lcwogICAgLSBob3cgaXQgd29ya3Mgd2l0aCBtdWx0aS1ieXRlIGNoYXJhY3RlcnMKOSAgIEluIGNoYW5nZS50eHQsIHJlbWFyayBhYm91dCBKYXZhZG9jIGlzbid0IHJpZ2h0LiAgUmlnaHQgYWxpZ25tZW50IHdvdWxkCiAgICB3b3JrIHRvby4KOCAgIFNwcmVhZCB0aGUgd2luZG93cyBjb21tYW5kcyBvdmVyIHRoZSBvdGhlciBmaWxlcy4gIEZvciBleGFtcGxlLCAiOnN0YWciCiAgICBzaG91bGQgYmUgd2l0aCAiOnRhZyIuICBDcm9zcy1saW5rIHdpdGggdGFncyB0byBhdm9pZCB0b28gbXVjaCBkb3VibGUKICAgIHRleHQuCjggICBBZGQgdGFncyBmb3IgYWxsIGZlYXR1cmVzLCBlLmcuICJndWlfcnVubmluZyIuCjcgICBNUy1XaW5kb3dzOiBXaGVuIGEgd3JvbmcgY29tbWFuZCBpcyB0eXBlZCB3aXRoIGFuIEFMVCBrZXksIGdpdmUgYSBoaW50IHRvCiAgICBsb29rIGF0IHRoZSBoZWxwIGZvciAnd2luYWx0a2V5cycuCjcgICBBZGQgYSBoZWxwLnZpbSBwbHVnaW4gdGhhdCBtYXBzIDxUYWI+IHRvIGp1bXAgdG8gdGhlIG5leHQgdGFnIGluIHx8IGFuZAogICAgPEMtVGFiPiAoYW5kIDxTLVRhYj4pIHRvIHRoZSBwcmV2aW91cyB0YWcuCi0gICBDaGVjayB0ZXh0IGVkaXRvciBjb21wZW5kaXVtIGZvciB2aSBhbmQgVmltIHJlbWFya3MuCgoKSGVscDoKLSAgIEZpcnN0IHRyeSB1c2luZyB0aGUgIjpoZWxwIiBhcmd1bWVudCBsaXRlcmFsbHksIGJlZm9yZSB1c2luZyBpdCBhcyBhCiAgICBwYXR0ZXJuLiAgQW5kIHRoZW4gbWF0Y2ggaXQgYXMgcGFydCBvZiBhIHRhZy4KLSAgIFdoZW4gYSBoZWxwIGl0ZW0gaGFzIG11bHRpcGxlIG1hdGNoZXMgbWFrZSBpdCBwb3NzaWJsZSB0byB1c2UgIjp0biIgdG8gZ28KICAgIHRvIHRoZSBvdGhlciBtYXRjaGVzLgotICAgU3VwcG9ydCBhIHdheSB0byB2aWV3IChhbmQgZWRpdCkgLmluZm8gZmlsZXMuCi0gICBEZWZhdWx0IG1hcHBpbmcgZm9yIGhlbHAgZmlsZXM6IDxUYWI+IHRvIHBvc2l0aW9uIGN1cnNvciBvbiBuZXh0IHw6dGFnfC4KLSAgIEltcGxlbWVudCBhICJzdGlja3kiIGhlbHAgd2luZG93LCBzb21lIGhlbHAgdGV4dCBsaW5lcyB0aGF0IGFyZSBhbHdheXMKICAgIGRpc3BsYXllZCBpbiBhIHdpbmRvdyB3aXRoIGZpeGVkIGhlaWdodC4gKEd1Y2tlcykgIFVzZSAifi8udmltaGVscCIgZmlsZSwKICAgIHVzZXIgY2FuIGVkaXQgaXQgdG8gaW5zZXJ0IGhpcyBmYXZvcml0ZSBjb21tYW5kcywgbmV3IGFjY291bnQgY2FuIGNvbnRhaW4gYQogICAgZGVmYXVsdCBjb250ZW50cy4KLSAgIE1ha2UgJ3dpbm1pbmhlaWdodCcgYSBsb2NhbCBvcHRpb24sIHNvIHRoYXQgdGhlIHVzZXIgY2FuIHNldCBhIG1pbmltYWwKICAgIGhlaWdodCBmb3IgdGhlIGhlbHAgd2luZG93IChhbmQgb3RoZXIgd2luZG93cykuCi0gICAiOmhlbHAgOnNeSSIgc2hvdWxkIGV4cGFuZCB0byAiOmhlbHAgOnN1YnN0aXR1dGUiLgotICAgTWFrZSB0aGUgaGVscCBrZXkgKDxGMT4pIGNvbnRleHQgc2Vuc2l0aXZlPwotICAgTGVhcm4gbW9kZTogc2hvdyBzaG9ydCBoZWxwIHdoaWxlIHR5cGluZyBjb21tYW5kcy4KCgpVc2VyIEZyaWVuZGxpZXI6CjggICBXaW5kb3dzIGluc3RhbGwgd2l0aCBOU0lTOiBtYWtlIGl0IHBvc3NpYmxlIHRvIGRvIGEgc2lsZW50IGluc3RhbGwsIHNlZQogICAgaHR0cDovL25zaXMuc291cmNlZm9yZ2UubmV0L0RvY3MvQ2hhcHRlcjQuaHRtbCM0LjEyCjggICBXaW5kb3dzIGluc3RhbGwgd2l0aCBpbnN0YWxsLmV4ZTogVXNlIC5leGUgaW5zdGVhZCBvZiAuYmF0IGZpbGVzIGZvcgogICAgbGlua3MsIHNvIHRoYXQgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyBhcmUgcGFzc2VkIG9uIHVubW9kaWZpZWQ/IChXYWx0ZXIKICAgIEJyaXNjb2UpCjggICBXaW5kb3dzIGluc3RhbGw6IEJlIGFibGUgdG8gYXNzb2NpYXRlIFZpbSB3aXRoIGEgc2VsZWN0aW9uIG9mIGZpbGUgdHlwZXM/CjggICBXaW5kb3dzIHVuaW5zdGFsbDogSGF2ZSB1bmluc3RhbC5jIGRlbGV0ZSB0aGUgdmltZmlsZXMgZGlyZWN0b3JpZXMgdGhhdAogICAgZG9zaW5zdC5jIGNyZWF0ZXMuICBMaXN0IHRoZSBjb250ZW50cyBvZiB0aGUgZGlyZWN0b3J5IChyZWN1cnNpdmVseSkgaWYKICAgIHRoZSB1c2VyIGFza3MgZm9yIGl0LiAgUmVxdWlyZXMgYW4gaW1wbGVtZW50YXRpb24gb2YgInJtIC1yZiIuCjggICBSZW1lbWJlciB0aGUgbmFtZSBvZiB0aGUgdmltcmMgZmlsZSB0aGF0IHdhcyB1c2VkICh+Ly52aW1yYywgJFZJTS9fdmltcmMsCiAgICAkSE9NRS9fdmltcmMsIGV0Yy4pIGFuZCBhZGQgImVkaXQgdmltcmMiIHRvIHRoZSBGaWxlIG1lbnUuCi0gICBBZGQgYSB3YXkgdG8gc2F2ZSBsb2NhbCBzZXR0aW5ncyBhbmQgbWFwcGluZ3MgaW50byBhIG5ldyBwbHVnaW4gZmlsZS4KICAgICI6bWtwbHVnaW4gPGZpbGU+Ij8KOCAgIEFkZCAiOnBsdWdpbmluc3RhbGwiIGNvbW1hbmQuICBDYW4gYmUgdXNlZCB0byBpbnN0YWxsIGEgcGx1Z2luIGZpbGUgdGhhdAogICAgaW5jbHVkZXMgZG9jdW1lbnRhdGlvbi4gIExldCB0aGUgdXNlciBzZWxlY3QgYSBkaXJlY3RvcnkgZnJvbQogICAgJ3J1bnRpbWVwYXRoJy4KCSIgVmltIHBsdWdpbgoJPG1haW4gcGx1Z2luIGNvZGU+CgkiID4+PiBwbHVnaW4gaGVscCBzdGFydCA8PDwKCTxwbHVnaW4gZG9jcz4KLSAgIEFkZCBtYXBwaW5ncyBsb2NhbCB0byBhIHdpbmRvdzogIjptYXAgPHdpbmRvdz4gLi4uIj8KOSAgIEFkZCBidWZmZXItbG9jYWwgbWVudS4gIFNob3VsZCBvZmZlciBhIGNob2ljZSBiZXR3ZWVuIHJlbW92aW5nIHRoZSBtZW51IG9yCiAgICBkaXNhYmxpbmcgaXQuICBCZSBjYXJlZnVsIHRoYXQgdGVhci1vZmZzIGRvbid0IGRpc2FwcGVhciAoa2VlcCBvbmUgZW1wdHkKICAgIGl0ZW0/KS4KICAgIEFsdGVybmF0aXZlOiB1c2UgQnVmRW50ZXIgYW5kIEJ1ZkxlYXZlIGF1dG9jb21tYW5kcy4KOCAgIG1ha2UgYSB2aW10dXRvciBzY3JpcHQgZm9yIEFtaWdhIGFuZCBvdGhlciBzeXN0ZW1zLgo3ICAgQWRkIHRoZSBhcmd1bWVudHMgZm9yIGNvbmZpZ3VyZSB0byB0aGUgIjp2ZXJzaW9uIiBvdXRwdXQ/CjcgICBXaGVuIFZpbSBkZXRlY3RzIGEgZmlsZSBpcyBiZWluZyBlZGl0ZWQgZWxzZXdoZXJlIGFuZCBpdCdzIGEgZ3ZpbSBzZXNzaW9uCiAgICBvZiB0aGUgc2FtZSB1c2VyIGl0IHNob3VsZCBvZmZlciBhICJSYWlzZSIgYnV0dG9uLCBzbyB0aGF0IHRoZSBvdGhlciBndmltCiAgICB3aW5kb3cgY2FuIGJlIGRpc3BsYXllZC4gKEVkdWFyZCkKOCAgIFN1cHBvcnQgc2F2aW5nIGFuZCByZXN0b3Jpbmcgc2Vzc2lvbiBmb3IgWCB3aW5kb3dzPyAgSXQgc2hvdWxkIHdvcmsgdG8gZG8KICAgICI6bWtzZXNzaW9uIiBhbmQgdXNlICItUyBmbmFtZSIgZm9yIHRoZSByZXN0YXJ0IGNvbW1hbmQuICBUaGUKICAgIGd1aV94MTFfd21fcHJvdG9jb2xfaGFuZGxlcigpIGFscmVhZHkgdGFrZXMgY2FyZSBvZiB0aGUgcmVzdC4KICAgIGdsb2JhbF9ldmVudF9maWx0ZXIoKSBmb3IgR1RLLgoKClRhYiBwYWdlczoKOSAgIEdVSSBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIHRhYiBwYWdlcyBsaW5lIGZvciBvdGhlciBzeXN0ZW1zLgo4ICAgTWFrZSBHVUkgbWVudSBpbiB0YWIgcGFnZXMgbGluZSBjb25maWd1cmFibGUuICBMaWtlIHRoZSBwb3B1cCBtZW51Lgo4ICAgdGFiIHBhZ2VzIGluIHRoZSBzZXNzaW9uIGZpbGUsIGlmICJ0YWJwYWdlcyIgaW4gJ3Nlc3Npb25vcHRpb25zJwo4ICAgOnRhYm1vdmUgK04JIG1vdmUgdGFiIHBhZ2UgTiBwYWdlcyBmb3J3YXJkCjggICA6dGFibW92ZSAtTgkgbW92ZSB0YWIgcGFnZSBOIHBhZ2VzIGJhY2t3YXJkCjcgICA6dGFiZHVwCSBkdXBsaWNhdGUgdGhlIHRhYiB3aXRoIGFsbCBpdHMgd2luZG93cy4KNiAgIDp0YWIgYmFsbCAgICB0YWIgcGFnZSBmb3IgZWFjaCBidWZmZXIKNiAgIDp0YWIgYWxsICAgICB0YWIgcGFnZSBmb3IgZWFjaCBhcmd1bWVudAo3ICAgT3B0aW9uIHRvIHB1dCB0YWIgbGluZSBhdCB0aGUgbGVmdCBvciByaWdodD8gIE5lZWQgYW4gb3B0aW9uIHRvIHNwZWNpZnkKICAgIGl0cyB3aXRkaC4gIEl0J3MgbGlrZSBhIHNlcGFyYXRlIHdpbmRvdyB3aXRoICI6dGFicyIgb3V0cHV0Lgo3ICAgQWRkIGxvY2FsIHZhcmlhYmxlcyBmb3IgZWFjaCB0YWIgcGFnZT8KOCAgIEFkZCBsb2NhbCBvcHRpb25zIGZvciBlYWNoIHRhYiBwYWdlPyAgRS5nLiwgJ2RpZmZvcHQnIGNvdWxkIGRpZmZlciBiZXR3ZWVuCiAgICB0YWIgcGFnZXMuCjcgICBBZGQgbG9jYWwgaGlnaGxpZ2h0aW5nIGZvciBlYWNoIHRhYiBwYWdlPwoKClNwZWxsIGNoZWNraW5nOgo5ICAgV29yayB0b2dldGhlciB3aXRoIE9wZW5PZmZpY2Uub3JnIHRvIHVwZGF0ZSB0aGUgd29yZGxpc3RzLiAgKEFkcmkgVmVyaG9lZiwKICAgIEFhZCBOYWxlcykgIFNldHVwIHZpbS1zcGVsbCBtYWlsbGlzdD8KLSAgIENvbXBvdW5kIHdvcmQgaXMgYWNjZXB0ZWQgaWYgbnIgb2Ygd29yZHMgaXMgPD0gQ09NUE9VTkRNQVggT1IgbnIgb2YKICAgIHN5bGxhYmxlcyA8PSBDT01QT1VORFNZTE1BWC4gIFNwZWNpZnkgdXNpbmcgQU5EIGluIHRoZSBhZmZpeCBmaWxlPwotICAgQ09NUE9VTkRNQVggLT4gQ09NUE9VTkRXT1JETUFYPwotICAgTkVFRENPTVBPVU5EIGFsc28gdXNlZCBmb3IgYWZmaXg/ICBPciBpcyB0aGlzIGNhbGxlZCBPTkxZSU5DT01QT1VORCBub3c/CiAgICBPciBpcyBPTkxZSU5DT01QT1VORCBvbmx5IGZvciBpbnNpZGUgYSBjb21wb3VuZCwgbm90IGF0IHN0YXJ0IG9yIGVuZD8KLSAgIERvIHdlIG5lZWQgYSBmbGFnIGZvciB0aGUgcnVsZSB0aGF0IHdoZW4gY29tcG91bmRpbmcgaXMgZG9uZSB0aGUgZm9sbG93aW5nCiAgICB3b3JkIGRvZXNuJ3QgaGF2ZSBhIGNhcGl0YWwgYWZ0ZXIgYSB3b3JkIGNoYXJhY3RlciwgZXZlbiBmb3IgT25lY2FwIHdvcmRzPwotICAgTmV3IGh1bnNwZWxsIGhvbWUgcGFnZTogaHR0cDovL2h1bnNwZWxsLnNvdXJjZWZvcmdlLm5ldC8KICAgIC0gVmVyc2lvbiAxLjEuMCBpcyBvdXQgbm93LCBsb29rIGludG8gdGhhdC4KICAgIC0gTG90cyBvZiBjb2RlIGRlcGVuZHMgb24gTEFORywgdGhhdCBpc24ndCByaWdodC4gIEVuYWJsZSBlYWNoIG1lY2hhbmlzbQogICAgICBpbiB0aGUgYWZmaXggZmlsZSBzZXBhcmF0ZWx5LgogICAgLSBFeGFtcGxlIHdpdGggY29tcG91bmRpbmcgZGFzaCBpcyBiYWQsIGdldHMgaW4gdGhlIHdheSBvZiBzZXR0aW5nCiAgICAgIENPTVBPVU5ETUlOIGFuZCBDT01QT1VORE1BWCB0byBhIHJlYXNvbmFibGUgdmFsdWUuCiAgICAtIFBTRVVET1JPT1QgPT0gTkVFREFGRklYCiAgICAtIENPTVBPVU5EUk9PVCAtPiBDT01QT1VOREVEPyAgRm9yIGEgd29yZCB0aGF0IGFscmVhZHkgaXMgYSBjb21wb3VuZCB3b3JkCgkgICAgT3IgdXNlIENPTVBPVU5ERUQyLCBDT01QT1VOREVEMywgZXRjLgotICAgQ0lSQ1VNRklYOiB3aGVuIGEgd29yZCB1c2VzIGEgcHJlZml4IG1hcmtlZCB3aXRoIHRoZSBDSVJDVU1GSVggZmxhZywgdGhlbgogICAgdGhlIHdvcmQgbXVzdCBhbHNvIGhhdmUgYSBzdWZmaXggbWFya2VkIHdpdGggdGhlIENJUkNVTUZJWCBmbGFnLiAgSXQncyBhCiAgICBiaXQgcHJpbWl0aXZlLCBzaW5jZSBvbmx5IG9uZSBmbGFnIGlzIHVzZWQsIHdoaWNoIGRvZXNuJ3QgYWxsb3cgbWF0Y2hpbmcKICAgIHNwZWNpZmljIHByZWZpeGVzIHdpdGggc3VmZml4ZXMuCiAgICBBbHRlcm5hdGl2ZToKCVBTRlgge2ZsYWd9IHtwY2hvcH0ge3BhZGR9IHtwY29uZH0ge3NjaG9wfSB7c2FkZH1bL2ZsYWdzXSB7c2NvbmR9CiAgICBXZSBtaWdodCBub3QgbmVlZCB0aGlzIGF0IGFsbCwgeW91IGNhbiB1c2UgdGhlIE5FRURBRkZJWCBmbGFnIGFuZCB0aGUKICAgIGFmZml4IHdoaWNoIGlzIHJlcXVpcmVkLgotICAgV2hlbiBhIHN1ZmZpeCBoYXMgbW9yZSB0aGFuIG9uZSBzeWxsYWJsZSwgaXQgbWF5IGNvdW50IGFzIGEgd29yZCBmb3IKICAgIENPTVBPVU5ETUFYLgotICAgQWRkIGZsYWdzIHRvIGNvdW50IGV4dHJhIHN5bGxhYmxlcyBpbiBhIHdvcmQuICBTWUxMQUJMRUFERDEgU1lMTEFCTEVBREQyLAogICAgZXRjLj8gIE9yIG1ha2UgaXQgcG9zc2libGUgdG8gc3BlY2lmeSB0aGUgc3lsbGFibGUgY291bnQgb2YgYSB3b3JkCiAgICBkaXJlY3RseSwgZS5nLiwgYWZ0ZXIgYW5vdGhlciBzbGFzaDogL2FiYy8zCi0gICBNT1JQSE8gaXRlbSBpbiBhZmZpeCBmaWxlOiBpZ25vcmUgVEFCIGFuZCBtb3JwaG9sb2dpY2FsIGZpZWxkIGFmdGVyCiAgICB3b3JkL2ZsYWdzIGFuZCBhZmZpeC4KLSAgIEltcGxlbWVudCBtdWx0aXBsZSBmbGFncyBmb3IgY29tcG91bmQgd29yZHMgYW5kIENNUCBpdGVtPwogICAgQXdhaXQgY29tbWVudHMgZnJvbSBvdGhlciBzcGVsbCBjaGVja2luZyBhdXRob3JzLgotICAgQWxzbyBzZWUgdGtsc3BlbGw6IGh0dHA6Ly90a2x0cmFucy5zb3VyY2Vmb3JnZS5uZXQvCjggICBDaGFybGVzIENhbXBiZWxsIGFza3MgZm9yIG1ldGhvZCB0byBhZGQgImNvbnRhaW5lZCIgZ3JvdXBzIHRvIGV4aXN0aW5nCiAgICBzeW50YXggaXRlbXMgKHRvIGFkZCBAU3BlbGwpLgogICAgQWRkICI6c3ludGF4IGNvbnRhaW5zIHtwYXR0ZXJufSBhZGQ9QFNwZWxsIiBjb21tYW5kPyAgQSBiaXQgbGlrZSAiOnN5bgogICAgY2x1c3RlciIgYnV0IGNoYW5nZSB0aGUgY29udGFpbnMgbGlzdCBkaXJlY3RseSBmb3IgbWF0Y2hpbmcgc3ludGF4IGl0ZW1zLgo4ICAgSW5zdGFsbCBzcGVsbCBmaWxlcyB3aXRoIHNyYy9tYWluLmFhcC4KLSAgIFJlZmVyZW5jZXM6IE15U3BlbGwgbGlicmFyeSAoaW4gT3Blbk9mZmljZS5vcmcpLgoJaHR0cDovL3NwZWxsY2hlY2tlci5tb3pkZXYub3JnL3NvdXJjZS5odG1sCglodHRwOi8vd2hpdGVib2FyZC5vcGVub2ZmaWNlLm9yZy9zb3VyY2UvYnJvd3NlL3doaXRlYm9hcmQvbGluZ3Vjb21wb25lbnQvc291cmNlL3NwZWxsY2hlY2svbXlzcGVsbC8KICAgICAgYXV0aG9yOiBLZXZpbiBIZW5kcmlja3MgPGtldmluLmhlbmRyaWNrc0BzeW1wYXRpY28uY2E+CjggICBNYWtlICJlbi1yYXJlIiBzcGVsbCBmaWxlPyAgQXNrIENoYXJsZXMgQ2FtcGJlbGwuCjggICBUaGUgRW5nbGlzaCBkaWN0aW9uYXJpZXMgZm9yIGRpZmZlcmVudCByZWdpb25zIGFyZSBub3QgY29uc2lzdGVudCBpbiB0aGVpcgogICAgdXNlIG9mIHdvcmRzIHdpdGggYSBkYXNoLgo3ICAgSW5zZXJ0IG1vZGUgY29tcGxldGlvbiBtZWNoYW5pc20gdGhhdCB1c2VzIHRoZSBzcGVsbCB3b3JkIGxpc3RzLgo4ICAgQWRkIGhsIGdyb3VwcyB0byAnc3BlbGxsYW5nJz8KCTpzZXQgc3BlbGxsYW5nPWVuX3VzLGVuLXJhcmUvU3BlbGxSYXJlLGVuLW1hdGgvU3BlbGxNYXRoCiAgICBNb3JlIGNvbXBsaWNhdGVkOiBSZWdpb25zIHdpdGggZGlmZmVyZW50IGxhbmd1YWdlcz8gIEUuZy4sIGNvbW1lbnRzCiAgICBpbiBFbmdsaXNoLCBzdHJpbmdzIGluIEdlcm1hbiAocG8gZmlsZSkuCgoKRGlmZiBtb2RlOgo4ICAgVXNlIGRpZmYgbW9kZSB0byBzaG93IHRoZSBjaGFuZ2VzIG1hZGUgaW4gYSBidWZmZXIgKGNvbXBhcmVkIHRvIHRoZSBmaWxlKS4KICAgIFVzZSBhbiB1bm5hbWVkIGJ1ZmZlciwgbGlrZSBkb2luZzoKCW5ldyB8IHNldCBidD1ub2ZpbGUgfCByICMgfCAwZF8gfCBkaWZmdGhpcyB8IHdpbmNtZCBwIHwgZGlmZnRoaXMKICAgIEFsc28gc2hvdyBkaWZmZXJlbmNlIHdpdGggdGhlIGZpbGUgd2hlbiBlZGl0aW5nIHN0YXJ0ZWQ/ICBTaG91bGQgc2hvdyB3aGF0CiAgICBjYW4gYmUgdW5kb25lLiAoVG9tIFBvcG92aWNoKQo3ICAgQWRkIGN1cnNvci1iaW5kaW5nOiB3aGVuIG1vdmluZyB0aGUgY3Vyc29yIGluIG9uZSBkaWZmJ2VkIGJ1ZmZlciwgYWxzbwogICAgbW92ZSBpdCBpbiBvdGhlciBkaWZmJ2VkIGJ1ZmZlcnMsIHNvIHRoYXQgQ1RSTC1XIGNvbW1hbmRzIGdvIHRvIHRoZSBzYW1lCiAgICBsb2NhdGlvbi4KCgpGb2xkaW5nOgogICAgKGNvbW1hbmRzIHN0aWxsIGF2YWlsYWJsZTogekkgekogeksgenAgelAgenEgelEgelYgenkgelk7CiAgICBzZWNvbmRhcnk6IHpCIHpTIHpUIHpaLCB6PSkKOCAgIEFkZCAiei8iIGFuZCAiej8iIGZvciBzZWFyY2hpbmcgaW4gbm90IGZvbGRlZCB0ZXh0IG9ubHkuCjggICBBZGQgZGlmZmVyZW50IGhpZ2hsaWdodGluZyBmb3IgYSBmb2xkIGxpbmUgZGVwZW5kaW5nIG9uIHRoZSBmb2xkIGxldmVsLgogICAgKE5vZWwgSGVuc29uKQo3ICAgVXNlICIrKy0tIiwgIisrKy0tIiBmb3IgZGlmZmVyZW50IGxldmVscyBpbnN0ZWFkIG9mICIrLS0tIiAiKy0tLS0iLgo4ICAgV2hlbiBhIGNsb3NlZCBmb2xkIGlzIGRpc3BsYXllZCBvcGVuIGJlY2F1c2Ugb2YgJ2ZvbGRtaW5saW5lcycsIHRoZQogICAgYmVoYXZpb3Igb2YgY29tbWFuZHMgaXMgc3RpbGwgbGlrZSB0aGUgZm9sZCBpcyBjbG9zZWQuICBIb3cgdG8gbWFrZSB0aGUKICAgIHVzZXIgYXdhcmUgb2YgdGhpcz8KOCAgIEFkZCBhbiBvcHRpb24gJ2ZvbGRza2lwJyB3aXRoIHZhbHVlcyBsaWtlICdmb2xkb3BlbicgdGhhdCBzcGVjaWZpZXMgd2hpY2gKICAgIGNvbW1hbmRzIHNraXAgb3ZlciBhIGNsb3NlZCBmb2xkLgo4ICAgIkgiIGFuZCAiTCIgY291bnQgYnVmZmVyIGxpbmVzIGluc3RlYWQgb2Ygd2luZG93IGxpbmVzLiAoU2VydmF0aXVzIEJyYW5kdCkKOCAgIEFkZCBhIHdheSB0byBhZGQgZm9sZC1wbHVnaW5zLiAgSm9oYW5uZXMgWmVsbG5lciBoYXMgb25lIGZvciBWQi4KNyAgIFdoZW4gdXNpbmcgbWFudWFsIGZvbGRpbmcsIHRoZSB1bmRvIGNvbW1hbmQgc2hvdWxkIGFsc28gcmVzdG9yZSBmb2xkcy4KLSAgIEFsbG93IGNvbXBsZXRlbHkgaGlkaW5nIGEgY2xvc2VkIGZvbGQuICBFLmcuLCBieSBzZXR0aW5nICdmb2xkdGV4dCcgdG8gYW4KICAgIGVtcHR5IHN0cmluZy4gIFJlcXVpcmUgc2hvd2luZyBhIGNoYXJhY3RlciBpbiAnZm9sZGNvbHVtbicgdG8gYXZvaWQgdGhlCiAgICBtaXNzaW5nIGxpbmUgZ29lcyB1bm5vdGljZWQuCiAgICBIb3cgdG8gaW1wbGVtZW50IHRoaXM/Ci0gICBXaGVuIHByZXNzaW5nIHRoZSBkb3duIGFycm93IG9mIGEgc2Nyb2xsYmFyLCBhIGNsb3NlZCBmb2xkIGRvZXNuJ3Qgc2Nyb2xsCiAgICB1bnRpbCBhZnRlciBhIGxvbmcgdGltZS4gIEhvdyB0byBtYWtlIHNjcm9sbGluZyB3aXRoIGNsb3NlZCBmb2xkcwogICAgc21vb3RoZXI/Ci0gICBXaGVuIGNyZWF0aW5nIGEgc2Vzc2lvbiwgYWxzbyBzdG9yZSBmb2xkcyBmb3IgYnVmZmVycyBpbiB0aGUgYnVmZmVyIGxpc3QsCiAgICB1c2luZyB0aGUgd2luaW5mbyBpbiB3aV9mb2xkcy4KLSAgICdmb2xkbWV0aG9kJyAidGV4dG9iamVjdCI6IGZvbGQgb24gc2VjdGlvbnMgYW5kIHBhcmFncmFwaCB0ZXh0IG9iamVjdHMuCi0gICBBZGQgJ2hpZGVjb21tZW50JyBvcHRpb246IGRvbid0IGRpc3BsYXkgY29tbWVudHMgaW4gLyogKi8gYW5kIGFmdGVyIC8vLgogICAgT3IgaXMgdGhlIGNvbmNlYWwgcGF0Y2ggZnJvbSBWaW5jZSBOZWdyaSBhIG1vcmUgZ2VuZXJpYyBzb2x1dGlvbj8KLSAgICJ6dWYiOiB1bmRvIGNoYW5nZSBpbiBtYW51YWwgZm9sZC4gInpVZiIgcmVkbyBjaGFuZ2UgaW4gbWFudWFsIGZvbGQuICBIb3cKICAgIHRvIGltcGxlbWVudCB0aGlzPwotICAgInpKIiBjb21tYW5kOiBhZGQgdGhlIGxpbmUgb3IgZm9sZCBiZWxvdyB0aGUgZm9sZCBpbiB0aGUgZm9sZCB1bmRlciB0aGUKICAgIGN1cnNvci4KLSAgICdmb2xkbWV0aG9kJyAic3ludGF4IjogImZvbGQ9MyI6IHNldCBmb2xkIGxldmVsIGZvciBhIHJlZ2lvbi4KLSAgIEFwcGx5IGEgbmV3IGZvbGRsZXZlbCB0byBhIHJhbmdlIG9mIGxpbmVzLiAoU3RldmUgTGl0dCkKOCAgIEhhdmUgc29tZSB3YXkgdG8gcmVzdHJpY3QgY29tbWFuZHMgdG8gbm90IGZvbGRlZCB0ZXh0LiAgQWxzbyBjb21tYW5kcyBsaWtlCiAgICBzZWFyY2hlcy4KCgpNdWx0aS1ieXRlIGNoYXJhY3RlcnM6CjkgICBXaGVuIHRoZSB0YWlsIGJ5dGUgb2YgYSBkb3VibGUtYnl0ZSBjaGFyYWN0ZXIgaXMgaWxsZWdhbCAoZS5nLiwgYSBDUiksIHRoZQogICAgZGlzcGxheSBpcyBtZXNzZWQgdXAgKFlhc3VoaXJvIE1hdHN1bW90bykuICBTaG91bGQgY2hlY2sgZm9yIGlsbGVnYWwKICAgIGRvdWJsZS1ieXRlIGNoYXJhY3RlcnMgYW5kIGRpc3BsYXkgdGhlbSBkaWZmZXJlbnRseSAoZGlzcGxheSBlYWNoIHNpbmdsZQogICAgYnl0ZSkuCjggICBBZGQgYW4gaXRlbSBpbiAnZmlsZWVuY29kaW5ncycgdG8gY2hlY2sgdGhlIGZpcnN0IGxpbmVzIG9mIGEgZmlsZSBmb3IKICAgIHRoZSBlbmNvZGluZy4gIFNlZSBQeXRob24gUEVQOiBodHRwOi8vd3d3LnB5dGhvbi5vcmcvcGVwcy9wZXAtMDI2My5odG1sLgogICAgVG8gYXZvaWQgZ2V0dGluZyBhIHdyb25nIGVuY29kaW5nIG9ubHkgYWNjZXB0IHNvbWV0aGluZyBFbWFjcy1saWtlOgogICAgIi0qLSBjb2Rpbmc6IGVuYy1uYV9tZS5mb28gLSotIiBhbmQgIi0qLSBjb2Rpbmc9IGVuYy1uYV9tZS5mb28gLSotIgogICAgTWF0Y2ggd2l0aCAiLVwqLVxzKmNvZGluZ1s6PV1ccypcKFs6OndvcmQ6Oi1fLl1cK1wpXHMqLVwqLSIgYW5kIHVzZSBmaXJzdAogICAgaXRlbS4KOCAgIEFkZCBhbiBpdGVtIGluICdmaWxlZW5jb2RpbmdzJyB0byBjaGVjayB0aGUgZmlyc3QgbGluZSBvZiBhbiBYTUwgZmlsZSBmb3IKICAgIHRoZSBlbmNvZGluZy4gIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+ICBPciAiY2hhcnNldD1VVEYtOCI/CiAgICBGb3IgSFRNTCBsb29rIGZvciAiY2hhcnNldD11dGYtOCIuCjggICBUaGUgcXVpY2tmaXggZmlsZSBpcyByZWFkIHdpdGhvdXQgY29udmVyc2lvbiwgdGh1cyBpbiAnZW5jb2RpbmcnLiAgQWRkIGFuCiAgICBvcHRpb24gdG8gc3BlY2lmeSB0aGUgZW5jb2Rpbmcgb2YgdGhlIGVycm9yZmlsZSBhbmQgY29udmVydCBpdC4gIEFsc28gZm9yCiAgICAiOmdyZXAiIGFuZCAiOmhlbHBncmVwIi4KICAgIE1vcmUgZ2VuZXJpYyBzb2x1dGlvbjogc3VwcG9ydCBhIGZpbHRlciAoZS5nLiwgYnkgY2FsbGluZyBhIGZ1bmN0aW9uKS4KOCAgIFdoZW4gYSBmaWxlIHdhcyBjb252ZXJ0ZWQgZnJvbSAnZmlsZWVuY29kaW5nJyB0byAnZW5jb2RpbmcnLCBhIHRhZyBzZWFyY2gKICAgIHNob3VsZCBhbHNvIGRvIHRoaXMgb24gdGhlIHNlYXJjaCBwYXR0ZXJuLiAoQW5kcnplaiBNLiBPc3RydXN6a2EpCjcgICBXaGVuIGNvbnZlcnRpbmcgYSBmaWxlIGZhaWxzLCBtZW50aW9uIHdoaWNoIGJ5dGUgY291bGQgbm90IGJlIGNvbnZlcnRlZCwKICAgIHNvIHRoYXQgdGhlIHVzZXIgY2FuIGZpeCB0aGUgcHJvYmxlbS4KOCAgIEFkZCBjb25maWd1cmUgb3B0aW9uIHRvIGJlIGFibGUgdG8gZGlzYWJsZSB1c2luZyB0aGUgaWNvbnYgbGlicmFyeS4gKFVkbwogICAgU2Nod2VpZ2VydCkKOSAgICdhbGVwaCcgc2hvdWxkIGJlIHNldCB0byAxNDg4IGZvciBVbmljb2RlLiAoWnZpIEhhcidFbCkKOCAgIFNob3VsZCBhZGQgdGVzdCBmb3IgdXNpbmcgdmFyaW91cyBjb21tYW5kcyB3aXRoIG11bHRpLWJ5dGUgY2hhcmFjdGVycy4KOCAgICdpbmZlcmNhc2UnIGRvZXNuJ3Qgd29yayB3aXRoIG11bHRpLWJ5dGUgY2hhcmFjdGVycy4KOCAgIHRvdXBwZXIoKSBmdW5jdGlvbiBkb2Vzbid0IGhhbmRsZSBieXRlIGNvdW50IGNoYW5nZXMuCjcgICBXaGVuIHNlYXJjaGluZywgc2hvdWxkIG9yZGVyIG9mIGNvbXBvc2luZyBjaGFyYWN0ZXJzIGJlIGlnbm9yZWQ/CjggICBTaG91bGQgaW1wbGVtZW50ICdkZWxjb21iaW5lJyBmb3IgY29tbWFuZCBsaW5lIGVkaXRpbmcuCjggICBEZXRlY3Qgb3ZlcmxvbmcgVVRGLTggc2VxdWVuY2VzIGFuZCBoYW5kbGUgdGhlbSBsaWtlIGlsbGVnYWwgYnl0ZXMuCjggICAiOnMveC9cdVwxLyIgZG9lc24ndCB3b3JrLCBtYWtpbmcgdXBwZXJjYXNlIGlzbid0IGRvbmUgZm9yIG11bHRpLWJ5dGUKICAgIGNoYXJhY3RlcnMuCjggICBVVEYtODogInIiIGluIFZpc3VhbCBtb2RlIGRvZXNuJ3QgdGFrZSBjb21wb3NpbmcgY2hhcmFjdGVycy4KOCAgIFVURi04OiBXaGVuIHRoZXJlIGlzIGEgcHJlY29tcG9zZWQgY2hhcmFjdGVyIGluIHRoZSBmb250LCB1c2UgaXQgaW5zdGVhZAogICAgb2YgYSBjaGFyYWN0ZXIgYW5kIGEgY29tcG9zaW5nIGNoYXJhY3Rlci4gIFNlZSB4dGVybSBmb3IgYW4gZXhhbXBsZS4KNyAgIFdoZW4gYSBjaGFyYWN0ZXIgY2FuJ3QgYmUgZGlzcGxheWVkLCBkaXNwbGF5IGl0cyBkaWdyYXBoIGluc3RlYWQuCiAgICAnZGlzcGxheScgb3B0aW9uIHRvIHNwZWNpZnkgdGhpcy4KNyAgIFVzZSBpZGVhcyBmb3IgbmxfbGFuZ2luZm8oKSBmcm9tIE1hcmt1cyBLdWhuIGluIGVuY19kZWZhdWx0KCk6CiAgICAod3d3LmNsLmNhbS5hYy51ay9+bWdrMjUvdWNzL2xhbmdpbmZvLmMpCi0gICBHVEsgYW5kIFdpbjMyOiBBbGxvdyBzZWxlY3RpbmcgZm9udHMgZm9yICdndWlmb250c2V0JyB3aXRoIHRoZQogICAgZm9udHNlbGVjdG9yIHNvbWVob3cuCi0gICBHVEsgYW5kIFdpbjMyOiBtYWtlIGl0IHBvc3NpYmxlIHRvIHNldCB0aGUgZm9udCBmb3IgdGhlIG1lbnUgdG8gbWFrZSBpdAogICAgcG9zc2libGUgdG8gaGF2ZSAnZW5jb2RpbmcnIGRpZmZlcmVudCBmcm9tIHRoZSBjdXJyZW50IGxvY2FsZS4KLSAgIGRiY3NfY2xhc3MoKSBvbmx5IHdvcmtzIGZvciBKYXBhbmVzZSBhbmQgS29yZWFuLiAgSW1wbGVtZW50IHRoaXMgZm9yCiAgICBvdGhlciBlbmNvZGluZ3MuICBUaGUgImV1Yy1qcCIgYW5kICJldWMta3IiIGNob2ljZXMgbWlnaHQgYmUgd3JvbmcuCi0gICBGaW5kIHNvbWUgd2F5IHRvIGF1dG9tYXRpY2FsbHkgc2VsZWN0IHRoZSByaWdodCBHVUkgZm9udCBvciBmb250c2V0LAogICAgZGVwZW5kaW5nIG9uIHRoZSBkZWZhdWx0IHZhbHVlIG9mICdlbmNvZGluZycuCiAgICBJcnJlbGV2YW50IGluIHRoZSBHVEsrIDIgR1VJIHNvIGxvbmcgYXMgVVRGLTggaXMgdXNlZC4KICAgIEZvciBXaW5kb3dzLCB0aGUgY2hhcnNldF9wYWlyc1tdIHRhYmxlIGNvdWxkIGJlIHVzZWQuICBCdXQgaG93IGRvIHdlIGtub3cKICAgIGlmIGEgZm9udCBleGlzdHM/Ci0gICBEbyBrZXlib2FyZCBjb252ZXJzaW9uIGZyb20gJ3Rlcm1lbmNvZGluZycgdG8gJ2VuY29kaW5nJyB3aXRoCiAgICBjb252ZXJ0X2lucHV0KCkgZm9yIE1hYyBHVUkgYW5kIFJpc2NPUyBHVUkuCi0gICBBZGQgbW5lbW9uaWNzIGZyb20gUkZDMTM0NSBsb25nZXIgdGhhbiB0d28gY2hhcmFjdGVycy4KICAgIFN1cHBvcnQgQ1RSTC1LIF97bW5lbW9uaWN9Xwo3ICAgSW4gIi0tIElOU0VSVCAobGFuZykgLS0iIHNob3cgdGhlIG5hbWUgb2YgdGhlIGtleW1hcCB1c2VkIGluc3RlYWQgb2YKICAgICJsYW5nIi4gKElseWEgRG9nb2xhemt5KQotICAgTWFrZSAnbGFuZ21hcCcgYWNjZXB0IG11bHRpLWJ5dGUgY2hhcmFjdGVycy4KLSAgIE1ha2UgJ2JyZWFrYXQnIGFjY2VwdCBtdWx0aS1ieXRlIGNoYXJhY3RlcnMuICBQcm9ibGVtOiBjYW4ndCB1c2UgYSBsb29rdXAKICAgIHRhYmxlIGFueW1vcmUgKGJyZWFrYXRfZmxhZ3NbXSkuCiAgICBTaW1wbGlzdGljIHNvbHV0aW9uOiB3aGVuICdmb3JtYXRvcHRpb25zJyBjb250YWlucyAibSIgYWxzbyBicmVhayBhIGxpbmUKICAgIGF0IGEgbXVsdGktYnl0ZSBjaGFyYWN0ZXIgPj0gMHgxMDAuCi0gICBEbyB3ZSBuZWVkIHRoZSByZXZlcnNlIG9mICdrZXltYXAnLCBsaWtlICdsYW5nbWFwJyBidXQgd2l0aCBmaWxlcyBhbmQKICAgIG11bHRpLWJ5dGUgY2hhcmFjdGVycz8gIEUuZy4sIHdoZW4gdXNpbmcgYSBSdXNzaWFuIGtleWJvYXJkLgotICAgQWRkIHRoZSBwb3NzaWJpbGl0eSB0byBlbnRlciBtYXBwaW5ncyB3aGljaCBhcmUgdXNlZCB3aGVuZXZlciBub3JtYWwgdGV4dAogICAgY291bGQgYmUgZW50ZXJlZC4gIEUuZy4sIGZvciAiZiIgY29tbWFuZC4gIEJ1dCBub3QgaW4gTm9ybWFsIG1vZGUuICBTb3J0CiAgICBvZiBvcHBvc2l0ZSBvZiAnbGFuZ21hcCcuICBVc2UgIjp0bWFwIiBjb21tYW5kPwotICAgV2hlbiBicmVha2luZyBhIGxpbmUsIHRha2UgcHJvcGVydGllcyBvZiBtdWx0aS1ieXRlIGNoYXJhY3RlcnMgaW50bwogICAgYWNjb3VudC4gIFRoZSAibGluZWJyZWFrIiBwcm9ncmFtIGZyb20gQnJ1bm8gSGFpYmxlIGNhbiBkbyBpdDoKICAgIGZ0cDovL2Z0cC5pbG9nLmZyL3B1Yi9Vc2Vycy9oYWlibGUvZ251L2xpbmVicmVhay0wLjEudGFyLmd6CiAgICBCdXQgaXQncyB2ZXJ5IGNvbXBsaWNhdGVkLi4uCgoKUHJpbnRpbmc6CjcgICBJbXBsZW1lbnQgInVuZGVyY3VybCIgZm9yIHByaW50aW5nLgotICAgQWRkICJwYWdlIHdpZHRoIiB0byB3cmFwIGxvbmcgbGluZXMuCi0gICBXaW4zMjogdXNlIGEgZm9udCBkaWFsb2cgZm9yIHNldHRpbmcgJ3ByaW50Zm9udCcuICBDYW4gcmV1c2UgdGhlIGNvZGUgZm9yCiAgICB0aGUgJ2d1aWZvbnQnIGRpYWxvZywgcHV0IHRoZSBjb21tb24gY29kZSBpbiBhIHNlcGFyYXRlIGZ1bmN0aW9uLgotICAgQWRkIHRoZSBmaWxlIHRpbWVzdGFtcCB0byB0aGUgcGFnZSBoZWFkZXIgKHdpdGggYW4gb3B0aW9uKS4gKEdlb3JnZQogICAgUmVpbGx5KQotICAgV2luMzI6IHdoZW4gJ3ByaW50Zm9udCcgaXMgZW1wdHkgdXNlICdndWlmb250Jy4KLSAgIFVuaXg6IFVzZSBzb21lIGRpYWxvZyBib3ggdG8gZG8gdGhlIG9idmlvdXMgc2V0dGluZ3MgKHBhcGVyIHNpemUsIHByaW50ZXIKICAgIG5hbWUsIHBvcnRyYWl0L2xhbmRzY2FwZSwgZXRjKS4KLSAgIFBvc3RTY3JpcHQ6IG9ubHkgd29ya3MgZm9yIDctYml0IEFTQ0lJIGFuZCBFQkNESUMuICBTaG91bGQgc3VwcG9ydAogICAgZGlmZmVyZW50ICdlbmNvZGluZycgdmFsdWVzIHNvbWVob3cuCi0gICBBbGxvdyBzcGVjaWZ5aW5nIHRoZSBwYXBlciBzaXplLCBpbnN0ZWFkIG9mIHVzaW5nIGEgc3RhbmRhcmQgc2l6ZS4gIFNhbWUKICAgIHVuaXRzIGFzIGZvciB0aGUgbWFyZ2lucy4KLSAgIFN1cHBvcnQgcmlnaHQtdG8tbGVmdCB0ZXh0Pwo4ICAgTWFrZSB0aGUgZm9yZWdyb3VuZCBjb2xvciBkYXJrZW5pbmcgZnVuY3Rpb24gcHJlc2VydmUgdGhlIGh1ZSBvZiB0aGUKICAgIGNvbG9yLgoKClN5bnRheCBoaWdobGlnaHRpbmc6CjggICBNYWtlICI6c3luIG9mZiIgdXNlICdydW50aW1lcGF0aCcgaW5zdGVhZCBvZiAkVklNUlVOVElNRS4gKEdhcnkgSm9obnNvbikKICAgIFNob3VsZCBkbyB0aGUgc2FtZSBmb3IgIjpzeW4gb24iIGFuZCAiOnN5biBtYW51YWwiLgo4ICAgU3VwcG9ydCAiY29udGFpbmVkaW4iIGFyZ3VtZW50IGZvciAiOnN5biBpbmNsdWRlIiwgc28gdGhhdCB0aGUgZGVmaW5lZAogICAgY2x1c3RlciBjYW4gYmUgYWRkZWQgdG8gZXhpc3Rpbmcgc3ludGF4IGl0ZW1zLgo4ICAgQyBzeW50YXg6IERvbid0IGhpZ2hsaWdodCB7fSBhcyBlcnJvcnMgaW5zaWRlICgpIHdoZW4gdXNlZCBsaWtlIHRoaXM6CiAgICAiKHsgc29tZXRoaW5nIH0pIiwgb2Z0ZW4gdXNlZCBpbiBHQ0MgY29kZS4KOCAgIFdoZW4gZWRpdGluZyBhIG5ldyBmaWxlIHdpdGhvdXQgYSBuYW1lIGFuZCBnaXZpbmcgaXQgYSBuYW1lIChieSB3cml0aW5nCiAgICBpdCkgYW5kICdmaWxldHlwZScgaXMgbm90IHNldCwgZGV0ZWN0IHRoZSBmaWxldHlwZS4gIEF2b2lkIGRvaW5nIGl0IGZvcgogICAgIjp3cSBmaWxlIi4KOCAgIE1ha2UgY29udmVyc2lvbiB0byBIVE1MIGZhc3RlciAoV3JpdGUgaXQgaW4gQyBvciBwcmUtY29tcGlsZSB0aGUgc2NyaXB0KS4KOSAgIFRoZXJlIGlzIHN0aWxsIGEgcmVkcmF3IGJ1ZyBzb21ld2hlcmUuICBQcm9iYWJseSBiZWNhdXNlIGEgY2FjaGVkIHN0YXRlIGlzCiAgICB1c2VkIGluIGEgd3Jvbmcgd2F5LiAgSSBjYW4ndCByZXByb2R1Y2UgaXQuLi4KNyAgIEJlIGFibGUgdG8gY2hhbmdlIG9ubHkgdGhlIGJhY2tncm91bmQgaGlnaGxpZ2h0aW5nLiAgVXNlZnVsIGZvciBEaWZmKiBhbmQKICAgIFNlYXJjaCBoaWdobGlnaHRpbmcuCjggICBBbGxvdyB0aGUgdXNlciB0byBhZGQgaXRlbXMgdG8gdGhlIFN5bnRheCBtZW51IHNvcnRlZCwgd2l0aG91dCBoYXZpbmcgdG8KICAgIGNoYW5nZSB0aGlzIGZvciBlYWNoIHJlbGVhc2UuCjggICBBZGQgYSAibWF0Y2hjb250YWlucyIgZm9yIHJlZ2lvbnM6IGl0ZW1zIGNvbnRhaW5lZCBpbiB0aGUgc3RhcnQgb3IgZW5kCiAgICBwYXR0ZXJuLCBidXQgbm90IGluIHRoZSBib2R5Lgo4ICAgQWRkIGEgImtlZXBlbmQtY29udGFpbmVkIiBhcmd1bWVudDogRG9uJ3QgY2hhbmdlIHRoZSBlbmQgb2YgYW4gaXRlbSB0aGlzCiAgICBvbmUgaXMgY29udGFpbmVkIGluLiAgTGlrZSAia2VlcGVuZCIgYnV0IHNwZWNpZmllZCBvbiB0aGUgY29udGFpbmVkIGl0ZW0sCiAgICBpbnN0ZWFkIG9mIHRoZSBjb250YWluaW5nIGl0ZW0uCjggICBjcHAudmltOiBJbiBDKysgaXQncyBhbGxvd2VkIHRvIHVzZSB7fSBpbnNpZGUgKCkuCjggICBTb21lIHN5bnRheCBmaWxlcyBzZXQgJ2lza2V5d29yZCcuICBXaGVuIHN3aXRjaGluZyB0byBhbm90aGVyIGZpbGV0eXBlCiAgICB0aGlzIGlzbid0IHJlc2V0LiAgQWRkIGEgc3BlY2lhbCBrZXl3b3JkIGRlZmluaXRpb24gZm9yIHRoZSBzeW50YXggcnVsZXM/CiAgICBXaGVuIHRoaXMgaXMgZG9uZSwgdXNlIHZpbS52aW0gc3ludGF4IGhpZ2hsaWdodGluZyBmb3IgaGVscCBmaWxlIGV4YW1wbGVzLAogICAgYnV0IHdpdGhvdXQgIjoiIGluICdpc2tleXdvcmQnIGZvciBzeW50YXguCjggICBBZGQgc3BlY2lmaWMgc3ludGF4IGl0ZW0gdG8gbWF0Y2ggd2l0aCBwYXJlbnMvYnJhY2VzIHRoYXQgZG9uJ3QgaGF2ZSBhCiAgICAiJSIgbWF0Y2guICA6c3ludGF4IG5vbWF0Y2ggY01hdGNoRXJyb3IgKCx7LFssKSx9LF0gW2NvbnRhaW5lZF0KOCAgIEhpZ2hsaWdodCB0aGUgdGV4dCBiZXR3ZWVuIHR3byBtYXRjaGluZyBwYXJlbnMgKGUuZy4sIHdpdGggYSBncmV5CiAgICBiYWNrZ3JvdW5kKSB3aGVuIG9uIG9uZSBvZiB0aGUgcGFyZW5zIG9yIGluIGJldHdlZW4gdGhlbS4KICAgIE9wdGlvbiBmb3IgdGhlIG1hdGNocGFyZW4gcGx1Z2luPwo4ICAgQWRkIGEgY29tbWFuZCB0byBqdW1wIHRvIHRoZSBuZXh0IGNoYXJhY3RlciBoaWdobGlnaHRlZCB3aXRoICJFcnJvciIuCjggICBXaGVuIHVzaW5nIGEgY3Rlcm0sIGFuZCBubyBjdGVybWZnIG9yIGN0ZXJtYmcgYXJlIGRlZmluZWQsIHVzZSBzdGFydC9zdG9wCiAgICBzZXF1ZW5jZXMuCUFkZCByZW1hcmsgaW4gZG9jcyB0aGF0IDppZiAndGVybScgPT0gInRlcm0tbmFtZSIgc2hvdWxkIGJlCiAgICB1c2VkLgo4ICAgQWRkIEBzcGVsbCBjbHVzdGVyIHRvIFN0cmluZyBhbmQgQ29tbWVudCBncm91cHMgZm9yIG1hbnkgbGFuZ3VhZ2VzLiAgV2lsbAogICAgYWxsb3cgc3BlbGwgY2hlY2tpbmcuIChGbGVpbmVyKQo4ICAgV2hlbiBsaXN0aW5nIHN5bnRheCBpdGVtcywgdHJ5IHRvIHNvcnQgdGhlIGtleXdvcmRzIGFscGhhYmV0aWNhbGx5LiAgQW5kCiAgICByZS1pbnNlcnQgdGhlIFtdIGlmIHBvc3NpYmxlLgo4ICAgTWFrZSBpdCBwb3NzaWJsZSB0byB1c2UgY29sb3Igb2YgdGV4dCBmb3IgVmlzdWFsIGhpZ2hsaWdodCBncm91cCAobGlrZSBmb3IKICAgIHRoZSBDdXJzb3IpLgo4ICAgSXQgd291bGQgYmUgdXNlZnVsIHRvIG1ha2UgdGhlIGhpZ2hsaWdodCBncm91cCBuYW1lIGFuIGV4cHJlc3Npb24uICBUaGVuCiAgICB3aGVuIHRoZXJlIGlzIGEgbWF0Y2gsIHRoZSBleHByZXNzaW9uIHdvdWxkIGJlIGV2YWx1YXRlZCB0byBmaW5kIG91dCB3aGF0CiAgICBoaWdobGlnaHQgZ3JvdXAgdG8gdXNlLiAgQ291bGQgYmUgdXNlZCB0byBjaGVjayBpZiB0aGUgc2hlbGwgdXNlZCBpbiBhCiAgICBwYXNzd29yZCBmaWxlIGFwcGVhcnMgaW4gL2V0Yy9zaGVsbHMuIChOaWtvbGFpIFdlaWJ1bGwpCglzeW4gbWF0Y2ggPXM6Y2hlY2tTaGVsbCh2Om1hdGNoKSBjb250YWluZWQgJ3BhdHRlcm4nCjggICBNYWtlIGl0IHBvc3NpYmxlIHRvIG9ubHkgaGlnaGxpZ2h0IGEgc3ViLWV4cHJlc3Npb24gb2YgYSBtYXRjaC4gIExpa2UKICAgIHVzaW5nICJcMSIgaW4gYSAiOnMiIGNvbW1hbmQuCjggICBTdXBwb3J0IGZvciBkZWxldGluZyBzeW50YXggaXRlbXM6CiAgICA6c3luIGtleXdvcmQgY1RvZG8gcmVtb3ZlIHRoaXMKICAgIDpzeW4gbWF0Y2ggY1RvZG8gcmVtb3ZlICJwYXR0ZXJuIgogICAgOnN5biByZWdpb24gY1N0cmluZyByZW1vdmUgc3RhcnQ9InRoaXMiIGVuZD0idGhhdCIKOCAgIEFkZCBwb3NzaWJpbGl0eSB0byBzeW5jIG9uIHNvbWV0aGluZyBlbHNlLCB3aGVuIHRoZSBzeW5jaW5nIGluIG9uZSB3YXkKICAgIGRvZXNuJ3QgZmluZCBtYXRjaC4gIEZvciBIVE1MOiBXaGVuIG5vIHtzY3JpcHR9IGlzIGZvdW5kLCB0cnkgbG9va2luZyBmb3IKICAgIGEgJzwnLiAgKEZsZWluZXIpCjcgICBSZXBsYWNlIHRoZSBzeW5jaHJvbml6aW5nIG1ldGhvZCB3aXRoIGEgc3RhdGUgbWFjaGluZSBzcGVjaWZpY2F0aW9uPwogICAgU2hvdWxkIGJlIGFibGUgdG8gc3RhcnQgYXQgYW55IGxpbmUgaW4gdGhlIGZpbGUsIHNlYXJjaCBmb3J3YXJkcyBvcgogICAgYmFja3dhcmRzLCBhbmQgdXNlIHRoZSByZXN1bHQgb2YgbWF0Y2hpbmcgYSBwYXR0ZXJuLgo3ICAgVXNlIHBhcnNpbmcgbGlrZSBhd2ssIHNvIHRoYXQgZS5nLiwgYSAoIHdpdGhvdXQgYSBtYXRjaGluZyApIGNhbiBiZQogICAgZGV0ZWN0ZWQuCjggICBNYWtlIGl0IHBvc3NpYmxlIHRvIHVzZSAiaW52ZXJ0ZWQiIGhpZ2hsaWdodGluZywgaW52ZXJ0IHRoZSBvcmlnaW5hbAogICAgY2hhcmFjdGVyLiAgRm9yIFZpc3VhbCBtb2RlLiAgKHh0ZXJtLXNlbGVjdGlvbiBhbHJlYWR5IGRvZXMgdGhpcykuCjggICBIaWdobGlnaHQgbm9uLXByaW50YWJsZSBjaGFyYWN0ZXJzIHdpdGggIlNwZWNpYWxDaGFyIiwgbGlua2VkIHRvCiAgICAiU3BlY2lhbCIuICBEaXNwbGF5IHRoZW0gd2l0aCB0aGUgZGlncmFwaCBjaGFyYWN0ZXJzLCBpZiBwb3NzaWJsZS4KOCAgIEhpZ2hsaWdodCB0aGUgY2xpcGJvYXJkLXNlbGVjdGlvbiB3aXRoIGEgaGlnaGxpZ2h0IGdyb3VwLgo4ICAgQmUgYWJsZSB0byByZXNldCBoaWdobGlnaHRpbmcgdG8gaXRzIG9yaWdpbmFsIChkZWZhdWx0KSB2YWx1ZXMuCjcgICBCZSBhYmxlIHRvIHdyaXRlIGN1cnJlbnQgaGlnaGxpZ2h0aW5nIHRvIGEgZmlsZSBhcyBjb21tYW5kcywgc2ltaWxhciB0bwogICAgIjpta3ZpbXJjIi4KOCAgIEltcHJvdmUgYy52aW06CiAgICAtIEFkZCBjaGVjayBmb3IgdW50ZXJtaW5hdGVkIHN0cmluZ3MsIHdpdGggYSB2YXJpYWJsZSB0byBzd2l0Y2ggaXQgb246CiAgICAgICJjX3N0cmljdF9hbnNpIi4KICAgIC0gRGV0ZWN0IHVuYmFsYW5jZWQgIiNlbmRpZiIuICBSZXF1aXJlcyBsb29raW5nIGJhY2sgYSBsb25nIHdheS4uLgo4ICAgQWRkIGFuIG9wdGlvbiB0byByZXN0cmljdCB0aGUgdXBkYXRpbmcgb2Ygc3ludGF4IGhpZ2hsaWdodGluZyB0byB0aGUKICAgIGN1cnJlbnQgbGluZSB3aGlsZSBpbiBJbnNlcnQgbW9kZS4KOCAgIFdoZW4gZ3Vlc3NpbmcgdmFsdWUgb2YgJ2JhY2tncm91bmQnLCB0aGUgc3ludGF4IGZpbGUgaGFzIGFscmVhZHkgYmVlbgogICAgbG9hZGVkIChmcm9tIHRoZSAuZ3ZpbXJjKS4JQWZ0ZXIgY2hhbmdpbmcgJ2JhY2tncm91bmQnLCBsb2FkIGl0IGFnYWluPwo4ICAgQWRkICI6c3luIHJlc3luYyIgY29tbWFuZCwgdG8gcmUtcGFyc2UgdGhlIHdob2xlIGZpbGUgdW50aWwgdGhlIGN1cnJlbnQKICAgIGRpc3BsYXkgcG9zaXRpb24uCjggICBTaG91bGQgc3VwcG9ydCAibWUiIG9mZnNldCBmb3IgYSByZWdpb24gc3RhcnQgcGF0dGVybi4gIFRvIGJlIHVzZWQgdG8KICAgIGFsbG93IHNlYXJjaGluZyBmb3IgdGhlIGVuZCBwYXR0ZXJuIGluc2lkZSB0aGUgbWF0Y2ggb2YgdGhlIGVuZCBwYXR0ZXJuLgogICAgRXhhbXBsZTogc3luIHJlZ2lvbiBwaWtlWFggc3RhcnQ9IihbXntdIiBlbmQ9IikiIHNob3VsZCB3b3JrIG9uICIoKSIuCjggICBXaGVuIHVzaW5nIGEgcmVnZXhwIGZvciAiY29udGFpbnM9Iiwgc2hvdWxkIGRlbGF5IG1hdGNoaW5nIHdpdGggaXQgdW50aWwKICAgIHJlZHJhd2luZyBoYXBwZW5zLiAgU2V0IGEgZmxhZyB3aGVuIGEgZ3JvdXAgaXMgYWRkZWQsIGNoZWNrIHRoaXMgZmxhZyB3aGVuCiAgICBoaWdobGlnaHRpbmcgc3RhcnRzLgo3ICAgQWRkICJzZW1pdHJhbnMiOiBBZGQgaGlnaGxpZ2h0aW5nLiAgRS5nLiwgbWFrZSB0aGUgdGV4dCBib2xkLCBidXQga2VlcCB0aGUKICAgIGNvbG9ycy4gIEFuZCBhZGQgY29sb3JzLCBzbyB0aGF0IEdyZWVuK1JlZCBiZWNvbWVzIFllbGxvdy4KICAgIEUuZy4gZm9yIHRoaXMgaHRtbDoKCTxCPiBib2xkIHRleHQgPEk+IGl0YWxpYytib2xkIHRleHQgPC9CPiBpdGFsaWMgdGV4dCA8L0k+CjcgICBXaWxkIGlkZWE6IE5vdCBvbmx5IHNldCBoaWdobGlnaHRpbmcsIGJ1dCBhbHNvIGNoYW5nZSB3aGF0IGlzIGRpc3BsYXllZAogICAgKGUuZy4sIHJlbW92ZSBjaGFyYWN0ZXJzLCBzbyB0aGF0ICI8Qj5ib2xkPC9CPiIgY2FuIGJlIHNob3duIGFzICJib2xkIik6Cgk6c3luIHJlZ2lvbiBib2xkc3R1ZmYgc3RhcnQ9IjxCPiIgZGlzcGxheT0iIiBlbmQ9IjwvQj4iIGRpc3BsYXk9IiIKNyAgIENUUkwtXSBjaGVja3MgdGhlIGhpZ2hsaWdodCBncm91cCBmb3IgZmluZGluZyBvdXQgd2hhdCB0aGUgdGFnIGlzLgo3ICAgQWRkIGFuIGV4cGxhbmF0aW9uIGhvdyBhIGxpc3Qgb2Ygd29yZHMgY2FuIGJlIHVzZWQgdG8gaGlnaGxpZ2h0IG1pc3NwZWxsZWQKICAgIHdvcmRzLgo3ICAgQ29tbWFuZCBsaW5lIGNvbXBsZXRpb24gZm9yICI6ZmluZCIgc2hvdWxkIHNlYXJjaCBpbiAncGF0aCcuCjggICBBZGQgbW9yZSBjb21tYW5kIGxpbmUgY29tcGxldGlvbiBmb3IgOnN5bnRheC4KOCAgIEFkZCBtb3JlIGNvbW1hbmQgbGluZSBjb21wbGV0aW9uIGZvciA6aGlnaGxpZ2h0Lgo4ICAgQWRkIG1vcmUgY29tbWFuZCBsaW5lIGNvbXBsZXRpb24gZm9yIDpzaWduLgo3ICAgU2hvdWxkIGZpbmQgYSBiZXR0ZXIgd2F5IHRvIHBhcnNlIHRoZSA6c3ludGF4IGFuZCA6aGlnaGxpZ2h0IGNvbW1hbmRzLgogICAgVXNlIHRhYmxlcyBvciBsaXN0cyB0aGF0IGNhbiBiZSBzaGFyZWQgYnkgcGFyc2luZyBmb3IgZXhlY3V0aW9uIGFuZAogICAgY29tcGxldGlvbj8KOCAgIEFkZCBDb2xvclNjaGVtZVBvc3QgYXV0b2NvbW1hbmQgZXZlbnQsIHNvIHRoYXQgc2NyaXB0cyBjYW4gc2V0IHVwIHRoZWlyCiAgICBoaWdobGlnaHRpbmcuIChTYWxtYW4gSGFsaW0pCjcgICBBZGQgYSBmZXcgc2V0cyBvZiBjb2xvcnMgKGUuZy4gQm9ybGFuZCBUdXJibyBDIG9uZSkuICBXaXRoIGEgbWVudSB0bwogICAgc2VsZWN0IG9uZSBvZiB0aGUgc2V0cy4KOCAgIEFkZCBvZmZzZXRzIHRvIHN1Yi1tYXRjaGVzOiAiXChhKlwpICoiaGU9ZTEtMQogICAgJ2UnIGlzIGVuZCBvZiBtYXRjaCAnZTEnIGlzIGVuZCBvZiBzdWItbWF0Y2ggMSwgJ3MyJyBpcyBzdGFydCBvZiBzdWJtYXRjaAogICAgMiwgZXRjLgo4ICAgSW4gSW5zZXJ0IG1vZGUsIHdoZW4gdGhlcmUgYXJlIHR5cGVhaGVhZCBjaGFyYWN0ZXJzLCBwb3N0cG9uZSB0aGUKICAgIGhpZ2hsaWdodGluZyAoZm9yICIuIiBjb21tYW5kKS4KOCAgIFN5bmNpbmcgb24gY29tbWVudHMgaXNuJ3QgMTAwJSBjb3JyZWN0IHdoZW4gLyAvIGxpbmVzIG1peCB3aXRoIC8gKiBhbmQgKiAvLgogICAgRm9yIGV4YW1wbGU6IFdoYXQgYWJvdXQgYSBsaW5lIHRoYXQgc3RhcnRzIHdpdGggLyAvIGFuZCBjb250YWlucyAqIC8/CjggICBJZ25vcmUgLyAqIGFuZCAgKiAvIGluc2lkZSBzdHJpbmdzLCB3aGVuIHN5bmNpbmcuCjcgICBCdWlsZCBhIGZldyBtb3JlIHN5bnRheCBmaWxlcyBmcm9tIHRoZSBmaWxlICIvdXNyL3NoYXJlL21pc2MvdmdyaW5kZWZzIjoKICAgIElTUCwgTERMLCBJY29uLCByYXRmb3IuICBBbmQgY2hlY2sgIm5lZGl0L3NvdXJjZS9oaWdobGlnaHQuYyIuCjYgICBBZGQgcG9zc2liaWxpdHkgdG8gaGF2ZSBiYWNrZ3JvdW5kIGNvbG9yIGNvbnRpbnVlIHVudGlsIHRoZSByaWdodCBlZGdlIG9mCiAgICB0aGUgd2luZG93LiAgVXNlZnVsIGZvciBjb21tZW50IGJsb2NrcyBhbmQgZnVuY3Rpb24gaGVhZGluZ3MuIChSb2dhbGwpCi0gICBNYWtlIGl0IHBvc3NpYmxlIHRvIGFkZCAiY29udGFpbnMiIGl0ZW1zIGZvciBhbGwgaXRlbXMgaW4gYSBncm91cC4JVXNlZnVsCiAgICB3aGVuIGV4dGVuZGluZyBhbiBhbHJlYWR5IGV4aXN0aW5nIHN5bnRheCBmaWxlLgotICAgQWRkIGxpbmUtY29udGludWF0aW9uIHBhdHRlcm4gZm9yIG5vbi1zeW5jaW5nIGl0ZW1zIHRvbz8KLSAgIEFkZCBwb3NzaWJpbGl0eSB0byBoaWdobGlnaHQgdGhlIHdob2xlIGxpbmUsIGluY2x1ZGluZyB0aGUgcmlnaHQgbWFyZ2luCiAgICAoZm9yIGNvbW1lbnQgYmxvY2tzKS4KLSAgIEFkZCAnaGxtYXRjaCcgb3B0aW9uOiBMaXN0IG9mIGZsYWdzOgogICAgJ2MnOiBoaWdobGlnaHQgbWF0Y2ggZm9yIGNoYXJhY3RlciB1bmRlciB0aGUgY3Vyc29yLgogICAgJ2InOiBoaWdobGlnaHQgdGhlIHByZXZpb3VzICgsIGFuZCBpdHMgbWF0Y2guCiAgICAnYSc6IGhpZ2hsaWdodCBhbGwgdGV4dCBmcm9tIHRoZSBwcmV2aW91cyAoIHVudGlsIGl0cyBtYXRjaC4KCSBBbHNvIGZvciB7fSwgPD4sIGV0Yy4/CiAgICAnZSc6IGhpZ2hsaWdodCBhbGwgYnJhY2VzIHdpdGhvdXQgYSBtYXRjaCAoc2xvdz8pCiAgICBPUjogYWRkIGFuIGFyZ3VtZW50ICJjdXJzb3IiIHRvIHRoZSBzeW50YXggY29tbWFuZCwgd2hpY2ggbWVhbnMgdGhhdCB0aGUKICAgIHJlZ2lvbi9tYXRjaC9rZXl3b3JkIGlzIG9ubHkgaGlnaGxpZ2h0ZWQgd2hlbiB0aGUgY3Vyc29yIGlzIG9uIGl0LgogICAgKENhbXBiZWxsKQogICAgT3IgZG8gaXQgbGlrZSBFbHZpczogZGVmaW5lIHRleHQgb2JqZWN0cyBhbmQgaG93IHRvIGhpZ2hsaWdodCB0aGVtIGFyb3VuZAogICAgdGhlIGN1cnNvci4gKElhaW4gVHJ1c2tldHQpCjcgICBNYWtlIGl0IHBvc3NpYmxlIHRvIHVzZSBhbGwgd29yZHMgaW4gdGhlIHRhZ3MgZmlsZXMgYXMgS2V5d29yZC4KICAgIENhbiBhbHNvIGJlIGRvbmUgd2l0aCBhIHNjcmlwdCAoYnV0IGl0J3Mgc2xvdykuCjcgICBNYWtlIGl0IHBvc3NpYmxlIHRvIGNhbGwgYSAiOiIgY29tbWFuZCB3aGVuIGEgbWF0Y2ggaXMgZm91bmQuICBTaG91bGQKICAgIGFsbG93IGZvciBhZGRpbmcga2V5d29yZHMgZnJvbSB0aGUgdGV4dCAoZS5nLiB2YXJpYWJsZXMgdGhhdCBhcmUgc2V0KS4KICAgIEFuZCBhbGxvd3MgZm9yIHNlY3Rpb25zIHdpdGggZGlmZmVyZW50IGhpZ2hsaWdodGluZy4KNyAgIEFkZCBoaWdobGlnaHQgZ3JvdXAgZm9yIGNvbW1hbmRsaW5lOiAiQ29tbWFuZGxpbmUiLiAgTWFrZSBzdXJlIGl0CiAgICBoaWdobGlnaHRzIHRoZSBjb21tYW5kIGxpbmUgd2hpbGUgdHlwaW5nIGEgY29tbWFuZCwgYW5kIGFueSBvdXRwdXQgZnJvbQogICAgbWVzc2FnZXMuICBBbmQgZXh0ZXJuYWwgY29tbWFuZHM/CjggICBNYWtlIGEgdmVyc2lvbiB0aGF0IHdvcmtzIGxpa2UgbGVzcywgYnV0IHdpdGggaGlnaGxpZ2h0aW5nOiByZWFkIHN0ZGluIGZvcgogICAgdGV4dCwgZXhpdCBhdCBlbmQgb2YgZmlsZSwgZG9uJ3QgYWxsb3cgZWRpdGluZywgZXRjLiAgbW9yZWltPyAgbGVzc2ltPwo3ICAgU3BlY2lhbEtleSBoaWdobGlnaHRpbmcgb3ZlcnJ1bGVzIHN5bnRheCBoaWdobGlnaHRpbmcuICBDYW4ndCBnaXZlIGFuCiAgICB1bnByaW50YWJsZSBjaGFyIGFub3RoZXIgY29sb3IuICBXb3VsZCBiZSB1c2VmdWwgZm9yIF5NIGF0IGVuZCBvZiBsaW5lLgoKCkJ1aWx0LWluIHNjcmlwdCBsYW5ndWFnZToKOCAgIEFkZCByZWZlcnJpbmcgdG8ga2V5IG9wdGlvbnMgd2l0aCAiJnRfeHgiLiAgQm90aCBmb3IgImVjaG8gJnRfeHgiIGFuZAogICAgIjpsZXQgJnRfeHggPSIuICBVc2VmdWwgZm9yIG1ha2luZyBwb3J0YWJsZSBtYXBwaW5ncy4KOCAgIGV4aXN0cygiJiZvcHRpb24iKSB0ZXN0cyBpZiAnb3B0aW9uJyBpcyBhY3R1YWxseSBpbXBsZW1lbnRlZC4gIFVzZWZ1bCBmb3IKICAgICdzaGVsbHNsYXNoJywgZm9yIGV4YW1wbGUuCi0gICBBZGQgIntyYW5nZX1zb3VyY2UiOiBleGVjdXRlIGxpbmVzIGZyb20gYSBidWZmZXIuCiAgICBBbHRlcm5hdGl2ZTogQWxsb3cgcmFuZ2UgZm9yICI6ZXhlYyIsIHBhc3MgaXQgb24gdG8gdGhlIGV4ZWN1dGVkIGNvbW1hbmQuCiAgICAoV2ViYikKICAgIFlvdSBjYW4gYWxyZWFkeSB5YW5rIGxpbmVzIGFuZCB1c2UgOkAiIHRvIGV4ZWN1dGUgdGhlbS4KOCAgIEhhdmUgYSBsb29rIGF0IFZTRUwuICBXb3VsZCBpdCBiZSB1c2VmdWwgdG8gaW5jbHVkZT8gKEJpZ2hhbSkKOCAgIEFkZCAiOmZ1bmdyb3VwIiBjb21tYW5kLCB0byBncm91cCBmdW5jdGlvbiBkZWZpbml0aW9ucyB0b2dldGhlci4gIFdoZW4KICAgIGVuY291bnRlcmVkLCBhbGwgZnVuY3Rpb25zIGluIHRoZSBncm91cCBhcmUgcmVtb3ZlZC4gIFN1Z2dlc3QgdXNpbmcgYW4KICAgIG9ic2N1cmUgbmFtZSB0byBhdm9pZCBuYW1lIGNsYXNoZXMuICBSZXF1aXJlIGEgIjpmdW5ncm91cCBFTkQiIGluIHRoZSBzYW1lCiAgICBzb3VyY2VkIGZpbGU/ICBBc3N1bWUgdGhlIGdyb3VwIGVuZHMgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZS4gIEhhbmRsZQogICAgbmVzdGVkIHBhY2thZ2VzPwogICAgQWx0ZXJuYXRpdmU6IFN1cHBvcnQgcGFja2FnZXMuICB7cGFja2FnZS1uYW1lfTp7ZnVuY3Rpb24tbmFtZX0oKS4KICAgIFBhY2thZ2VzIGFyZSBsb2FkZWQgYXV0b21hdGljYWxseSB3aGVuIGZpcnN0IHVzZWQsIGZyb20KICAgICRWSU1SVU5USU1FL3BhY2thZ2VzIChvciB1c2UgYSBzZWFyY2ggcGF0aCkuCjcgICBBZGQgdGhlIG1hcmtjbGVhcigpIGZ1bmN0aW9uIHRvIGRlbGV0ZSBhIG1hcmsgaW4gYW5vdGhlciBidWZmZXIuICBDaGFybGVzCiAgICBDYW1wYmVsbCAoMjAwNCBKYW4gOSkKICAgIGh0dHA6Ly9teXNpdGUudmVyaXpvbi5uZXQvYXN0cm9uYXV0L3ZpbS9pbmRleC5odG1sI1BhdGNoCiAgICBJbXBsZW1lbnQgc2V0bWFyayhtYXJrbmFtZSwgbG51bSBbLCBjb2wgWywgZmlsZW5hbWVdXSkgaW5zdGVhZD8KICAgIFdoZW4gImxudW0iIGlzIHplcm8gZGVsZXRlIHRoZSBtYXJrLgogICAgV2hlbiAiZmlsZW5hbWUiIGhhcyBubyB3aWxkY2FyZHMgYW5kIHRoZXJlIGlzIG5vIG1hdGNoaW5nIGJ1ZmZlciwgYWRkCiAgICB0aGUgYnVmZmVyICh1bmxpc3RlZCkuCjcgICBQcmUtcGFyc2Ugb3IgY29tcGlsZSBWaW0gc2NyaXB0cyBpbnRvIGEgYnl0ZWNvZGUuCiAgICAxLiBQdXQgdGhlIGJ5dGVjb2RlIHdpdGggdGhlIG9yaWdpbmFsIHNjcmlwdCwgd2l0aCBhbiAiOmlmCiAgICAgICBoYXMoJ2J5dGVjb2RlJykiIGFyb3VuZCBpdCwgc28gdGhhdCBpdCdzIG9ubHkgdXNlZCB3aXRoIGEgVmltIHRoYXQKICAgICAgIHN1cHBvcnRzIGl0LiAgVXBkYXRlIHRoZSBjb2RlIHdpdGggYSBjb21tYW5kLCBjYW4gYmUgdXNlZCBpbiBhbgogICAgICAgYXV0b2NvbW1hbmQuCiAgICAyLiBVc2UgYSAiLnZpYyIgZmlsZSAobGlrZSBQeXRob24gdXNlIC5weWMpLiAgQ3JlYXRlIGl0IHdoZW4gd3JpdGluZyBhCiAgICAgICAudmltIGZpbGUuICBQcm9ibGVtOiBkaXN0cmlidXRpb24uCiAgICAzLiBVc2UgYSBjYWNoZSBkaXJlY3RvcnkgZm9yIGVhY2ggdXNlci4gIEhvdyB0byByZWNvZ25pemUgd2hpY2ggY2FjaGVkCiAgICAgICBmaWxlIGJlbG9uZ3MgdG8gYSBzb3VyY2VkIHNjcmlwdD8KNyAgIEFkZCBhcmd1bWVudCB0byB3aW53aWR0aCgpIHRvIHN1YnRyYWN0IHRoZSBzcGFjZSB0YWtlbiBieSAnZm9sZGNvbHVtbicsCiAgICBzaWducyBhbmQvb3IgJ251bWJlcicuCjggICBBZGQgZnVuY3Rpb25zOgoJcmVhbG5hbWUoKQkJR2V0IHVzZXIgbmFtZSAoZmlyc3QsIGxhc3QsIGZ1bGwpCgkJCQl1c2VyX2Z1bGxuYW1lKCkgcGF0Y2ggYnkgTmlrb2xhaSBXZWlidWxsLCBOb3YKCQkJCTMgMjAwMgoJCQkJT25seSBhZGQgdGhpcyB3aGVuIGFsc28gaW1wbGVtZW50ZWQgZm9yCgkJCQlub24tVW5peCBzeXN0ZW1zLCBvdGhlcndpc2UgYSBzaGVsbCBjbWQgY291bGQKCQkJCWJlIHVzZWQuCgkJCQlnZXRfdXNlcl9uYW1lKCkgZ2V0cyBsb2dpbiBuYW1lLgoJbWVudXByb3Aoe25hbWV9LCB7aWR4fSwge3doYXR9KQoJCQkJR2V0IG1lbnUgcHJvcGVydHkgb2YgbWVudSB7bmFtZX0gaXRlbSB7aWR4fS4KCQkJCW1lbnVwcm9wKCIiLCAxLCAibmFtZSIpIHJldHVybnMgIkZpbGUiLgoJCQkJbWVudXByb3AoIkZpbGUiLCAxLCAibiIpIHJldHVybnMgIm5tZW51CgkJCQlGaWxlLk9wZW4uLi4iIGFyZ3VtZW50LgoJCQkJUGF0Y2ggYnkgSWx5YSBTaGVyLCAyMDA0IEFwciAyMgoJCQkJUmV0dXJuIGEgbGlzdCBvZiBtZW51cyBhbmQvb3IgYSBkaWN0aW9uYXJ5CgkJCQl3aXRoIHByb3BlcnRpZXMgaW5zdGVhZC4KCW1hcG5hbWUoe2lkeH0sIG1vZGUpCXJldHVybiB0aGUgbmFtZSBvZiB0aGUgaWR4J3RoIG1hcHBpbmcuCgkJCQlQYXRjaCBieSBJbHlhIFNoZXIsIDIwMDQgTWFyIDQuCgkJCQlSZXR1cm4gYSBsaXN0IGluc3RlYWQuCgljaGFyMmhleCgpCQljb252ZXJ0IGNoYXIgc3RyaW5nIHRvIGhleCBzdHJpbmcuCglhdHRyaWJ1dGVzKCkJCXJldHVybiBmaWxlIHByb3RlY3Rpb24gZmxhZ3MgImRyd3hyd3hyd3giCglmaWxlY29weShmcm9tLCB0bykJQ29weSBhIGZpbGUKCXNob3J0ZW4oZm5hbWUpCQlzaG9ydGVuIGEgZmlsZSBuYW1lLCBsaWtlIGhvbWVfcmVwbGFjZSgpCglwZXJsKGNtZCkJCWNhbGwgUGVybCBhbmQgcmV0dXJuIHN0cmluZwoJaW5wdXRybCgpCQlsaWtlIGlucHV0KCkgYnV0IHJpZ2h0LXRvLWxlZnQKCXZpcnR1YWxtb2RlKCkJCWFkZCBhcmd1bWVudCB0byBvYnRhaW4gd2hldGhlciAiJCIgd2FzIHVzZWQgaW4KCQkJCVZpc3VhbCBibG9jayBtb2RlLgoJZ2V0YWNwKCkJCVdpbjMyOiBnZXQgY29kZXBhZ2UgKEdsZW5uIE1heW5hcmQpCglkZWxldGVidWZsaW5lKCkJCWRlbGV0ZSBsaW5lIGluIGFueSBidWZmZXIKCWFwcGVuZGJ1ZmxpbmUoKQkJYXBwZW5kIGxpbmUgaW4gYW55IGJ1ZmZlcgoJbGliY2FsbCgpCQlBbGxvdyBtb3JlIHRoYW4gb25lIGFyZ3VtZW50LgoJbGliY2FsbGV4dCgpCQlMaWtlIGxpYmNhbGwoKSwgYnV0IHVzaW5nIGEgY2FsbGJhY2sgZnVuY3Rpb24KCQkJCXRvIGFsbG93IHRoZSBsaWJyYXJ5IHRvIGV4ZWN1dGUgYSBjb21tYW5kIG9yCgkJCQlldmFsdWF0ZSBhbiBleHByZXNzaW9uLgo3ICAgTWFrZSBidWZuYW1lKCInMCIpIHJldHVybiB0aGUgYnVmZmVyIG5hbWUgZnJvbSBtYXJrICcwLiAgSG93IHRvIGdldCB0aGUKICAgIGNvbHVtbiBhbmQgbGluZSBudW1iZXI/ICBjb2woIicwIikgY3VycmVudGx5IHJldHVybnMgemVyby4KOCAgIGFyZ2MoKSByZXR1cm5zIDAgd2hlbiB1c2luZyAidmltIC10IHRhZyIuICBIb3cgdG8gZGV0ZWN0IHRoYXQgbm8gZmlsZSB3YXMKICAgIHNwZWNpZmllZCBpbiBhbnkgd2F5PyAgVG8gYmUgYWJsZSB0byBqdW1wIHRvIHRoZSBsYXN0IGVkaXRlZCBmaWxlLgo4ICAgUGFzcyB0aGUgZXhlY3V0YWJsZSBuYW1lIHRvIHRoZSBWaW0gc2NyaXB0cyBpbiBzb21lIHdheS4gIEFzIHY6YXJndjA/CjggICBBZGQgY29tbWFuZCBhcmd1bWVudHMgd2l0aCB0aHJlZSBkYXNoZXMsIHBhc3NlZCBvbiB0byBWaW0gc2NyaXB0cy4KNyAgIEFkZCBvcHRpb25hbCBhcmd1bWVudHMgdG8gdXNlciBmdW5jdGlvbnM6Cgk6ZnVuYyBteUZ1bmMoYXJnMSwgYXJnMiwgYXJnMyA9ICJibGFoIiwgYXJnNCA9IDE3KQo2ICAgVXNlciBmdW5jdGlvbnM6IEZ1bmN0aW9ucyBsb2NhbCB0byBidWZmZXIgImI6ZnVuYygpIj8KOCAgIEZvciBTdHJpbmdzIGFkZCAiOmxldCB2YXJbe2V4cHJ9XSA9IHtleHByfSIuICBXaGVuIHBhc3QgdGhlIGVuZCBvZiAidmFyIgogICAganVzdCBpZ25vcmUuCjggICBUaGUgIj0gcmVnaXN0ZXIgc2hvdWxkIGJlIHdyaXRhYmxlLCBpZiBmb2xsb3dlZCBieSB0aGUgbmFtZSBvZiBhIHZhcmlhYmxlLAogICAgb3B0aW9uIG9yIGVudmlyb25tZW50IHZhcmlhYmxlLgo4ICAgIjpsZXQgJm9wdGlvbiIgc2hvdWxkIGxpc3QgdGhlIHZhbHVlIG9mIHRoZSBvcHRpb24uCjcgICBBZGQgc3luSURsaXN0KCksIG1ha2luZyB0aGUgd2hvbGUgbGlzdCBvZiBzeW50YXggaXRlbXMgb24gdGhlIHN5bnRheCBzdGFjawogICAgYXZhaWxhYmxlIGFzIGEgTGlzdC4KOCAgIEFkZCBhdXRvY29tbWFuZC1ldmVudCBmb3Igd2hlbiBhIHZhcmlhYmxlIGlzIGNoYW5nZWQ6Cgk6YXUgVmFyQ2hhbmdlZCB7dmFybmFtZX0ge2NvbW1hbmRzfQo4ICAgQWRkICJoYXMoImd1aV9jYXBhYmxlIikiLCB0byBjaGVjayBpZiB0aGUgR1VJIGNhbiBiZSBzdGFydGVkLgo4ICAgQWRkIHBvc3NpYmlsaXR5IHRvIHVzZSB2YXJpYWJsZXMgbGlrZSByZWdpc3RlcnM6IGNoYXJhY3Rlcndpc2UgKGRlZmF1bHQpLAogICAgbGluZXdpc2UgKHdoZW4gZW5kaW5nIGluICdcbicpLCBibG9ja3dpc2UgKHdoZW4gZW5kaW5nIGluICdcMDAxJykuCXJlZzAsCiAgICByZWdhLCByZWclLCBldGMuICBBZGQgZnVuY3Rpb25zIGxpbmV3aXNlKHtleHByfSksIGJsb2Nrd2lzZSh7ZXhwcn0pIGFuZAogICAgY2hhcndpc2Uoe2V4cHJ9KS4KNyAgIE1ha2UgaXQgcG9zc2libGUgdG8gZG8gYW55IGNvbW1hbmQgb24gYSBzdHJpbmcgdmFyaWFibGUgKG1ha2UgYSBidWZmZXIKICAgIHdpdGggb25lIGxpbmUsIGNvbnRhaW5pbmcgdGhlIHN0cmluZykuICBNYXliZSBhZGQgYW4gKGludmlzaWJsZSkgc2NyYXRjaAogICAgYnVmZmVyIGZvciB0aGlzPwoJcmVzdWx0ID0gc2NyYXRjaChzdHJpbmcsIGNvbW1hbmQpCglyZXN1bHQgPSBhcHBseShzdHJpbmcsIGNvbW1hbmQpCglyZXN1bHQgPSBleGVjdXRlKHN0cmluZywgY29tbWFuZCkKICAgICJjb21tYW5kIiB3b3VsZCB1c2UgPD4gbm90YXRpb24uCiAgICBEb2VzIHNjcmF0Y2ggYnVmZmVyIGhhdmUgYSBudW1iZXI/ICBPciByZS11c2Ugc2FtZSBudW1iZXI/CjcgICBBZGQgZnVuY3Rpb24gdG8gZ2VuZXJhdGUgdW5pcXVlIG51bWJlciAoZGF0ZSBpbiBtaWxsaXNlY29uZHMpLgo3ICAgQXV0b21hdGljYWxseSBsb2FkIGEgZnVuY3Rpb24gZnJvbSBhIGZpbGUgd2hlbiBpdCBpcyBjYWxsZWQuICBOZWVkIGFuCiAgICBvcHRpb24gZm9yIHRoZSBzZWFyY2ggcGF0aC4gKFNla2VyYSkKCgpSb2J1c3RuZXNzOgo2ICAgQWRkIGZpbGUgbG9ja2luZy4gIExvY2sgYSBmaWxlIHdoZW4gc3RhcnRpbmcgdG8gZWRpdCBpdCB3aXRoIGZsb2NrKCkgb3IKICAgIGZjbnRsKCkuICBUaGlzIHBhdGNoIGhhcyBhZHZpc29yeSBmaWxlIGxvY2tpbmcgd2hpbGUgcmVhZGluZy93cml0aW5nCiAgICB0aGUgZmlsZSBmb3IgVmltIDUuNDogfi92aW0vcGF0Y2hlcy9rYWhuX2ZpbGVfbG9ja2luZyAuCiAgICBUaGUgcGF0Y2ggaXMgaW5jb21wbGV0ZSAobmVlZHMgc3VwcG9ydCBmb3IgbW9yZSBzeXN0ZW1zLCBhdXRvY29uZikuCiAgICBBbmR5IGRvZXNuJ3QgaGF2ZSB0aW1lIHRvIHdvcmsgb24gaXQuCiAgICBEaXNhZHZhbnRhZ2U6IE5lZWQgdG8gZmluZCB3YXlzIHRvIGdyYWNlZnVsbHkgaGFuZGxlIGZhaWx1cmUgdG8gb2J0YWluIGEKICAgIGxvY2suICBXaGVuIHRvIHJlbGVhc2UgYSBsb2NrOiBXaGVuIGJ1ZmZlciBpcyB1bmxvYWRlZD8KCgpQZXJmb3JtYW5jZToKNyAgIEZvciBzdHJpbmdzIHVwIHRvIDMgYnl0ZXMgZG9uJ3QgYWxsb2NhdGUgbWVtb3J5LCB1c2Ugdl9saXN0IGl0c2VsZiBhcyBhCiAgICBjaGFyYWN0ZXIgYXJyYXkuICBVc2UgVkFSX1NTVFJJTkcgKHNob3J0IHN0cmluZykuCjggICBUdXJuIGJfc3luX2ljIGFuZCBiX3N5bl9jb250YWluZWRpbiBpbnRvIGJfc3luX2ZsYWdzLgo5ICAgTG9hZGluZyBtZW51LnZpbSBzdGlsbCB0YWtlcyBxdWl0ZSBhIGJpdCBvZiB0aW1lLiAgSG93IHRvIG1ha2UgaXQgZmFzdGVyPwo4ICAgaW5faWRfbGlzdCgpIHRha2VzIG11Y2ggdGltZSBmb3Igc3ludGF4IGhpZ2hsaWdodGluZy4gIENhY2hlIHRoZSByZXN1bHQ/CjcgICBzZXRwY21hcmsoKSBzaGlmdHMgdGhlIGp1bXBsaXN0LCB0aGlzIHRha2VzIHF1aXRlIGEgYml0IG9mIHRpbWUgd2hlbgogICAganVtcGluZyBhcm91bmQuICBJbnN0ZWFkIHVzZSBhbiBpbmRleCBmb3IgdGhlIHN0YXJ0Pwo4ICAgV2hlbiBkaXNwbGF5aW5nIGEgc3BhY2Ugd2l0aCBvbmx5IGZvcmVncm91bmQgaGlnaGxpZ2h0aW5nLCBpdCdzIHRoZSBzYW1lCiAgICBhcyBhIHNwYWNlIHdpdGhvdXQgYXR0cmlidXRlcy4gIEF2b2lkIGRpc3BsYXlpbmcgc3BhY2VzIGZvciB0aGUgIn4iIGxpbmVzCiAgICB3aGVuIHN0YXJ0aW5nIHVwIGluIGEgY29sb3IgdGVybWluYWwuCjggICBBdm9pZCBhbGxvYygpIGZvciBzY3JhdGNoIGJ1ZmZlciB1c2UsIGVzcC4gaW4gc3ludGF4LmMuICBJdCdzIHZlcnkgc2xvdyBvbgogICAgV2luMTYuCjkgICBTZXR0aW5nIEdVSSBvcHRpb25zIGluIHRoZSBjb25zb2xlIChlLmcuLCAnZ3VpZm9udCcpIHNob3VsZCBub3QgY2F1c2UgYQogICAgcmVkcmF3Lgo4ICAgUHJvZmlsaW5nIHNob3dzIHRoYXQgaW5faWRfbGlzdCgpIGlzIHVzZWQgdmVyeSBvZnRlbiBmb3IgQyBjb2RlLiAgQ2FuIHRoaXMKICAgIGZ1bmN0aW9uIGJlIGltcHJvdmVkPwo4ICAgRm9yIGFuIGV4aXN0aW5nIGZpbGUsIHRoZSBwYWdlIHNpemUgb2YgdGhlIHN3YXAgZmlsZSBpcyBhbHdheXMgdGhlCiAgICBkZWZhdWx0LCBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBibG9jayBzaXplIG9mIHRoZSBkZXZpY2UsIGJlY2F1c2UgdGhlIHN3YXAKICAgIGZpbGUgaXMgY3JlYXRlZCBvbmx5IGFmdGVyIHNldHRpbmcgdGhlIGJsb2NrIHNpemUgaW4gbWZfb3BlbigpLiAgSG93IGNhbgogICAgdGhpcyBiZSBpbXByb3ZlZD8KOCAgIFNldCBkZWZhdWx0IGZvciAndHR5c2Nyb2xsJyB0byBoYWxmIGEgc2NyZWVuIGhlaWdodD8gIFNob3VsZCBzcGVlZCB1cAogICAgTVMtRE9TIHZlcnNpb24uIChOZWdyaSkKNyAgIEMgc3ludGF4IGhpZ2hsaWdodGluZyBnZXRzIGEgbG90IHNsb3dlciBhZnRlciAiOnNldCBmb2xkbWV0aG9kPXN5bnRheCIuCiAgICAoQ2hhcmxlcyBDYW1wYmVsbCkgIEluc2VydGluZyBhICJ7IiBpcyB2ZXJ5IHNsb3cuIChkbWFuKQo3ICAgSFRNTCBzeW50YXggaGlnaGxpZ2h0aW5nIGlzIHNsb3cgZm9yIGxvbmcgbGluZXMuICBUcnkgZGlzcGxheWluZwogICAgaHR0cDovL3d3dy50aGVyZWdpc3Rlci5jby51ay9jb250ZW50LzQvMjI5MDguaHRtbC4gKEFuZHJlIFBhbmcpCjcgICBDaGVjayBob3cgcGVyZm9ybWFuY2Ugb2YgbG9hZGluZyB0aGUgd29yZGxpc3QgY2FuIGJlIGltcHJvdmVkIChhZGRpbmcgYQogICAgbG90IG9mIGFiYnJldmlhdGlvbnMpLgo3ICAgRE9TIGNvbnNvbGU6IEFkZCB0X0RMIHN1cHBvcnQsIHRvIG1ha2Ugc2Nyb2xsaW5nIGZhc3Rlci4KNyAgIENvbXBpbGUgRXggY29tbWFuZHMgdG8gYnl0ZSBjb2Rlcy4gIFN0b3JlIGJ5dGUgY29kZXMgaW4gYSB2aW0gc2NyaXB0IGZpbGUKICAgIGF0IHRoZSBlbmQsIGFmdGVyICJjb21waWxlZDouICBNYWtlIGl0IGxvb2sgbGlrZSBhIHNpbmdsZSBjb21tZW50IGxpbmUKICAgIGZvciBvbGQgVmltIHZlcnNpb25zLiAgSW5zZXJ0IGZpcnN0IGxpbmUgIlZpbSBzY3JpcHQgY29tcGlsZWQgPHRpbWVzdGFtcD4uCiAgICBPbmx5IHVzZWQgY29tcGlsZWQgY29kZSB3aGVuIHRpbWVzdGFtcCBtYXRjaGVzIHRoZSBmaWxlIHN0YXQuCiAgICBBZGQgY29tbWFuZCB0byBjb21waWxlIGEgdmltIHNjcmlwdCBhbmQgYWRkIGl0IHRvIHRoZSBmaWxlIGluLXBsYWNlLgogICAgU3BsaXQgRXggY29tbWFuZCBleGVjdXRpbmcgaW50byBhIHBhcnNpbmcgYW5kIGV4ZWN1dGluZyBwaGFzZS4KICAgIFVzZSBjb21waWxlZCBjb2RlIGZvciBmdW5jdGlvbnMsIHdoaWxlIGxvb3BzLCBldGMuCjggICBXaGVuIGVkaXRpbmcgYSBmaWxlIHdpdGggZXh0cmVtZWx5IGxvbmcgbGluZXMgKGUuZy4sIGFuIGV4ZWN1dGFibGUpLCB0aGUKICAgICJsaW5lcmVzdCIgaW4gcmVhZGZpbGUoKSBpcyBhbGxvY2F0ZWQgdHdpY2UgdG8gYmUgYWJsZSB0byBjb3B5IHdoYXQgd2FzCiAgICByZWFkIHNvIGZhci4gIFVzZSByZWFsbG9jKCkgaW5zdGVhZD8gIE9yIHNwbGl0IHRoZSBsaW5lIHdoZW4gYWxsb2NhdGluZwogICAgbWVtb3J5IGZhaWxzIGFuZCAibGluZXJlc3QiIGlzIGJpZyAoPiAxMDAwMDApPwo4ICAgV2hlbiBkZWZpbmluZyBhdXRvY29tbWFuZHMgKGUuZy4sIGZyb20gJFZJTVJVTlRJTUUvZmlsZXR5cGUudmltKSwgbmVlZCB0bwogICAgY29tcGFyZSBlYWNoIHBhdHRlcm4gd2l0aCBhbGwgZXhpc3RpbmcgcGF0dGVybnMuICBVc2UgYSBoYXNoIGNvZGUgdG8gYXZvaWQKICAgIHVzaW5nIHN0cmNtcCgpIHRvbyBvZnRlbj8KNyAgIEluY2x1ZGUgdHVyYm9fbG9hZGVyIHBhdGNoZXMsIHNwZWVkaW5nIHVwIHJlYWRpbmcgYSBmaWxlPwogICAgU3BlZWQgdXAgcmVhZGluZyBhIGZpbGUgYnkgcmVhZGluZyBpdCBpbnRvIGEgZml4ZWQtc2l6ZSBidWZmZXIsIGNyZWF0aW5nCiAgICB0aGUgbGlzdCBvZiBpbmRleGVzIGluIGFub3RoZXIgYnVmZmVyLCBhbmQgdGhlbiBjb3B5aW5nIHRoZSByZXN1bHQgaW50byBhCiAgICBtZW1maWxlIGJsb2NrIHdpdGggdHdvIGNvcGllcy4gIFRoZW4gcmVhZCB0aGUgbmV4dCBibG9jayBpbnRvIGFub3RoZXIKICAgIGZpeGVkLXNpemUgYnVmZmVyLCBjcmVhdGUgdGhlIHNlY29uZCBsaXN0IG9mIGluZGV4ZXMgYW5kIGNvcHkgdGV4dCBmcm9tCiAgICB0aGUgdHdvIGJsb2NrcyB0byB0aGUgbWVtZmlsZSBibG9jay4KNyAgIGRvX2NtZGxpbmUoKTogQXZvaWQgdGhhdCB0aGUgY29tbWFuZCBsaW5lIGlzIGNvcGllZCB0byBhbGxvY2F0ZWQgbWVtb3J5CiAgICBhbmQgZnJlZWQgYWdhaW4gbGF0ZXIgYWxsIHRoZSB0aW1lLiAgRm9yIHdoaWxlIGxvb3BzLCBhbmQgZm9yIHdoZW4gY2FsbGVkCiAgICB3aXRoIGFuIGFyZ3VtZW50IHRoYXQgY2FuIGJlIG1lc3NlZCB3aXRoLgogICAgR2VuZXJpYyBzb2x1dGlvbjogTWFrZSBhIHN0cnVjdCB0aGF0IGNvbnRhaW5zIGEgcG9pbnRlciBhbmQgYSBmbGFnIHRoYXQKICAgIGluZGljYXRlcyBpZiB0aGUgcG9pbnRlciBzaG91bGQgYmUgZnJlZWQgd2hlbiByZXBsYWNlZC4KNyAgIENoZWNrIHRoYXQgdGhlIGZpbGUgc2l6ZSBpcyBub3QgbW9yZSB0aGFuICJzaXplb2YobG9uZykiLgotICAgRnVydGhlciBpbXByb3ZlIGZpbmRpbmcgbWFwcGluZ3MgaW4gbWFwaGFzaFtdIGluIHZnZXRvcnBlZWsoKQo4ICAgU3ludGF4IGhpZ2hsaWdodGluZyBpcyBzbG93IHdoZW4gZGVsZXRpbmcgbGluZXMuICBUcnkgaW4KICAgICRWSU1SVU5USU1FL2ZpbGV0eXBlLnZpbS4KLSAgICJvdXQgb2YgbWVtb3J5IiBhZnRlciBkZWxldGluZyAoMSwkZCkgYW5kIGNoYW5naW5nICg6JXMvXi8+IC8pIGEgbG90IG9mCiAgICBsaW5lcyAoMjcwMDApIGEgZmV3IHRpbWVzLiAgTWVtb3J5IGZyYWdtZW50YXRpb24/Ci0gICBIYXZlIGEgbG9vayBhdCBob3cgcGRrc2ggZG9lcyBtZW1vcnkgYWxsb2NhdGlvbiAoYWxsb2MuYykuIChEYWxlY2tpKQotICAgRG8gcHJvZmlsaW5nIG9uOgogICAgLSA6Zy9wYXQvbm9ybWFsIGNtZAogICAgLSAxMDAwaWk8RXNjPgogICAgLSBkZWxldGluZyAxME1ieXRlIHdvcnRoIG9mIGxpbmVzIChuZXRzY2FwZSBiaW5hcnkpCiAgICAtICJbaSIgYW5kICJbZCIgKFllZ2FwcGFuIExha3NobWFuYW4pCiAgICAtICI6Zy9eL20wIiBvbiBhIDQ1MEtieXRlIGZpbGUuICBBbmQgdGhlICJ1Ii4KICAgIC0gaGlnaGxpZ2h0aW5nICJ+L3ZpbS90ZXN0L2xvbmdsaW5lLnRleCIsICJ+L3ZpbS90ZXN0L3Njd29vcC50Y2wiIGFuZAogICAgICAifi92aW0vdGVzdC9sb2NrdXAucGwiLgogICAgLSBsb2FkaW5nIGEgc3ludGF4IGZpbGUgdG8gaGlnaGxpZ2h0IGFsbCB3b3JkcyBub3QgZnJvbSBhIGRpY3Rpb25hcnkuCiAgICAtIGVkaXRpbmcgYSBWaW0gc2NyaXB0IHdpdGggc3ludGF4IGhpZ2hsaWdodGluZyBvbiAobG9hZGluZyB2aW0udmltKS4KNyAgIFNjcmVlbiB1cGRhdGluZyBjYW4gYmUgZnVydGhlciBpbXByb3ZlZCBieSBvbmx5IHJlZHJhd2luZyBsaW5lcyB0aGF0IHdlcmUKICAgIGNoYW5nZWQgKGFuZCBsaW5lcyBhZnRlciB0aGVtLCB3aGVuIHN5bnRheCBoaWdobGlnaHRpbmcgd2FzIHVzZWQsIGFuZCBpdAogICAgY2hhbmdlZCkuCiAgICAtIE9uIGVhY2ggY2hhbmdlLCByZW1lbWJlciBzdGFydCBhbmQgZW5kIG9mIHRoZSBjaGFuZ2UuCiAgICAtIFdoZW4gaW5zZXJ0aW5nL2RlbGV0aW5nIGxpbmVzLCByZW1lbWJlciBiZWdpbiwgZW5kLCBhbmQgbGluZSBjb3VudC4KLSAgIFVzZSBtYWNyb3MvZHVhcnRlL2NhcGljdWEgZm9yIHByb2ZpbGluZy4gIE52aSAxLjcxIGlzIHRoZSBmYXN0ZXN0IQotICAgV2hlbiB1c2luZyBhIGZpbGUgd2l0aCBvbmUgbG9uZyBsaW5lICgxTWJ5dGUpLCB0aGVuIGRvICIkaGhoaCIsIGlzIHN0aWxsCiAgICB2ZXJ5IHNsb3cuICBBdm9pZCBjYWxsaW5nIGdldHZjb2woKSBmb3IgZWFjaCAiaCI/Ci0gICBFeGVjdXRpbmcgYSByZWdpc3RlciwgZS5nLiAiMTAwMDBAQCIgaXMgc2xvdywgYmVjYXVzZSBpbnNfdHlwZWJ1ZiBoYXMgdG8KICAgIG1vdmUgdGhlIHByZXZpb3VzIGNvbW1hbmRzIGZvcndhcmQgZWFjaCB0aW1lLiAgUGFzcyBjb3VudCBmcm9tCiAgICBub3JtYWxfY21kKCkgZG93biB0byBkb19leGVjcmVnKCkuCi0gICBSZXBlYXRpbmcgaW5zZXJ0ICIxMDAwaS08RXNjPiIgZGlzcGxheXMgLS1JTlNFUlQtLSBhbGwgdGhlIHRpbWUsIGJlY2F1c2Ugb2YKICAgIHRoZSA8RXNjPiBhdCB0aGUgZW5kLiAgTWFrZSB0aGlzIHdvcmsgZmFzdGVyIChkaXNhYmxlIHJlZHJhd2luZykuCi0gICBBdm9pZCBjYWxscyB0byBwbGluZXMoKSBmb3IgY3Vyc29yIGxpbmUsIHVzZSB3X2NsaW5lX2hlaWdodC4KLSAgIEFmdGVyICI6c2V0IG5vd3JhcCIgcmVtb3ZlIHN1cGVyZmx1b3VzIHJlZHJhdyB3aXRoIHdyb25nIGhvci4gb2Zmc2V0IGlmCiAgICBjdXJzb3IgaXMgcmlnaHQgb2YgdGhlIHNjcmVlbi4KOCAgIE1ha2UgQ1RSTC1DIG9uIFVuaXggZ2VuZXJhdGUgYSBzaWduYWwsIGF2b2lkIHVzaW5nIHNlbGVjdCgpIHRvIGNoZWNrIGZvciBhCiAgICBDVFJMLUMgKGl0J3Mgc2xvdykuCgoKQ29kZSBzaXplOgo4ICAgR1VJOiBXaGVuIE5PX0NPTlNPTEUgaXMgZGVmaW5lZCwgbW9yZSBjb2RlIGNhbiBiZSBleGNsdWRlZC4KLSAgIFB1dCBnZXRsaW5lKCkgYW5kIGNvb2tpZSBpbiBhIHN0cnVjdCwgc28gb25seSBvbmUgYXJndW1lbnQgaGFzIHRvIGJlCiAgICBwYXNzZWQgdG8gZG9fY21kbGluZSgpIGFuZCBvdGhlciBmdW5jdGlvbnMuCjggICBNYWtlIGEgR1VJLW9ubHkgdmVyc2lvbiBmb3IgVW5peD8KOCAgIEluIGJ1Zl93cml0ZSBfKCkgaXNuJ3QgbmVlZGVkIHdoZW4gc2V0dGluZyBlcnJtc2csIGRvIGl0IG9uY2Ugd2hlbiB1c2luZwogICAgaXQuCjcgICBXaGVuIGNvbXBpbGluZyB3aXRoIGEgR1VJLW9ubHkgdmVyc2lvbiwgdGhlIGNvZGUgZm9yIGN0ZXJtIGNvbG9ycyBjYW4gYmUKICAgIGxlZnQgb3V0Lgo4ICAgV2hlbiBjb21waWxlZCB3aXRoIGEgR1VJLW9ubHkgdmVyc2lvbiwgdGhlIHRlcm1jYXAgZW50cmllcyBmb3IgdGVybWluYWxzCiAgICBjYW4gYmUgcmVtb3ZlZC4KOCAgIENhbiB0aGUgY2hlY2sgZm9yIGxpYmVsZiBpbiBjb25maWd1cmUuaW4gYmUgcmVtb3ZlZD8KCgpNZXNzYWdlczoKOCAgIFdoZW4gdXNpbmcgIjpxIiBpbiBhIGNoYW5nZWQgZmlsZSwgdGhlIGVycm9yIHNheXMgdG8gImFkZCAhIi4gIEFkZCB0aGUKICAgIGNvbW1hbmQgc28gdGhhdCBiZWdpbm5lcnMgdW5kZXJzdGFuZCBpdDogInVzZSA6cSEiLgo4ICAgRm9yICd2ZXJib3NlJyBsZXZlbCAxMiBwcmludHMgY29tbWFuZHMgZnJvbSBzb3VyY2UnZWQgZmlsZXMuICBIb3cgdG8gc2tpcAogICAgbGluZXMgdGhhdCBhcmVuJ3QgZXhlY3V0ZWQ/ICBQZXJoYXBzIG1vdmUgdGhlIGVjaG9pbmcgdG8gZG9fY21kbGluZSgpPwo4ICAgVXNlICdyZXBvcnQnIGZvciAiOmJkZWwiPyAgKEtyaXNobmEpICBUbyBhdm9pZCB0aGVzZSBtZXNzYWdlcyB3aGVuIHVzaW5nIGEKICAgIHNjcmlwdC4KLSAgIERlbGV0ZSBtZXNzYWdlIGFmdGVyIG5ldyBjb21tYW5kIGhhcyBiZWVuIGVudGVyZWQgYW5kIGhhdmUgd2FpdGVkIGZvciBrZXkuCiAgICBQZXJoYXBzIGFmdGVyIHRlbiBzZWNvbmRzPwotICAgTWFrZSBtZXNzYWdlIGhpc3RvcnkgYXZhaWxhYmxlIGluICJtc2ciIHZhcmlhYmxlczogbXNnMSwgbXNnMiwgLi4gbXNnOS4KOSAgIENoZWNrIGhhbmRsaW5nIG9mIG92ZXJ3cml0aW5nIG9mIG1lc3NhZ2VzIGFuZCBkZWxheXM6CiAgICBWZXJ5IHdyb25nOiBlcnJvcnMgd2hpbGUgcmVkcmF3aW5nIGNhdXNlIGVuZGxlc3MgbG9vcC4KICAgIFdoZW4gc3dpdGNoaW5nIHRvIGFub3RoZXIgZmlsZSBhbmQgc2NyZWVuIHNjcm9sbHMgYmVjYXVzZSBvZiB0aGUgbG9uZwogICAgbWVzc2FnZSBhbmQgcmV0dXJuIG11c3QgYmUgdHlwZWQsIGRvbid0IHNjcm9sbCB0aGUgc2NyZWVuIGJhY2sgYmVmb3JlCiAgICByZWRyYXdpbmcuCjcgICBBZGQgYW4gb3B0aW9uLCB3aGljaCBpcyBhIHJlZ2V4cCwgdGhhdCBkaXNhYmxlcyB3YXJuaW5nIG1lc3NhZ2VzIHdoaWNoCiAgICBtYXRjaCB0aGF0IHJlZ2V4cCAoVHNpcmtpbikuCjggICBXaGVuIGFkZHJlc3MgcmFuZ2UgaXMgd3JvbmcgeW91IG9ubHkgZ2V0ICJJbnZhbGlkIHJhbmdlIi4gIEJlIGEgYml0IG1vcmUKICAgIHNwZWNpZmljOiBOZWdhdGl2ZSwgYmV5b25kIGxhc3QgbGluZSwgcmV2ZXJzZSByYW5nZT8gIEluY2x1ZGUgdGhlIHRleHQuCjggICBNYWtlIGl0IHBvc3NpYmxlIHRvIGlnbm9yZSBlcnJvcnMgZm9yIGEgbW9tZW50ICgnZXJyb3JpZ25vcmUnPykuICBBbm90aGVyCiAgICBvcHRpb24gdG8gc3dpdGNoIG9mZiBnaXZpbmcgZXJyb3IgbWVzc2FnZXMgKCdlcnJvcnF1aWV0Jz8pLiAgQWxzbyBhbiBvcHRpb24KICAgIG5vdCB0byBnaXZlIGFueSBtZXNzYWdlcyAoJ3F1aWV0Jyk/ICBPciAiOnF1aWV0IG9uIiwgIjpxdWlldCBvZmYiLgogICAgQ2FyZWZ1bDogRm9yIGEgc2V2ZXJlIGVycm9yIChvdXQgb2YgbWVtb3J5KSwgYW5kIHdoZW4gdGhlIHVzZXIgc3RhcnRzCiAgICB0eXBpbmcsIGVycm9yIG1lc3NhZ2VzIG11c3QgYmUgc3dpdGNoZWQgYmFjayBvbi4KICAgIEFsc28gYSBmbGFnIHRvIGlnbm9yZSBlcnJvciBtZXNzYWdlcyBmb3Igc2hlbGwgY29tbWFuZHMgKGZvciBtYXBwaW5ncykuCi0gICBPcHRpb24gdG8gc2V0IHRpbWUgZm9yIGVtc2coKSBzbGVlcC4gIEludGVycnVwdCBzbGVlcCB3aGVuIGtleSBpcyB0eXBlZD8KICAgIFNsZWVwIGJlZm9yZSBzZWNvbmQgbWVzc2FnZT8KOCAgIEluIEV4IHNpbGVudCBtb2RlIG9yIHdoZW4gcmVhZGluZyBjb21tYW5kcyBmcm9tIGEgZmlsZSwgd2hhdCBleGFjdGx5IGlzCiAgICBub3QgcHJpbnRlZCBhbmQgd2hhdCBpcz8gIENoZWNrICI6cHJpbnQiLCAiOnNldCBhbGwiLCAiOmFyZ3MiLCAiOnZlcnMiLAogICAgZXRjLiAgQXQgbGVhc3QgdGhlcmUgc2hvdWxkIGJlIG5vIHByb21wdC4gKFNtdWxkZXJzKSAgQW5kIGRvbid0IGNsZWFyIHRoZQogICAgc2NyZWVuIHdoZW4gcmVhZGluZyBjb21tYW5kcyBmcm9tIHN0ZGluLiAoS2VuZGFsbCkKICAgIC0tPiBNYWtlIGEgZGlmZmVyZW5jZSBiZXR3ZWVuIGluZm9ybWF0aXZlIG1lc3NhZ2VzLCBwcm9tcHRzLCBldGMuIGFuZAoJZXJyb3IgbWVzc2FnZXMsIHByaW50aW5nIHRleHQsIGV0Yy4KOCAgIFdpbmRvdyBzaG91bGQgYmUgcmVkcmF3biB3aGVuIHJlc2l6aW5nIGF0IHRoZSBoaXQtZW50ZXIgcHJvbXB0LgogICAgQWxzbyBhdCB0aGUgIjp0c2VsZWN0IiBwcm9tcHQuICBGaW5kIGEgZ2VuZXJpYyBzb2x1dGlvbiBmb3IgcmVkcmF3aW5nIHdoZW4KICAgIGEgcHJvbXB0IGlzIHByZXNlbnQgKHdpdGggYSBjYWxsYmFjayBmdW5jdGlvbj8pLgoKClNjcmVlbiB1cGRhdGluZzoKNyAgIEFkZCBhIHN0cmluZyB0byB0aGUgJ2Rpc3BsYXknIG9wdGlvbiB0byBtYWtlIENUUkwtRSBhbmQgQ1RSTC1ZIHNjcm9sbCBvbmUKICAgIHNjcmVlbiBsaW5lLCBhbHNvIGlmIHRoaXMgbWVhbnMgdGhlIGZpcnN0IGxpbmUgZG9lc24ndCBzdGFydCB3aXRoIHRoZQogICAgZmlyc3QgY2hhcmFjdGVyIChsaWtlIHdoYXQgaGFwcGVucyB3aXRoIGEgc2luZ2xlIGxpbmUgdGhhdCBkb2Vzbid0IGZpdCkuCi0gICBzY3JlZW5fbGluZSgpOgogICAgLSBpbnNlcnQvZGVsZXRlIGNoYXJhY3RlciBzdHVmZi4KICAgIC0gaW1wcm92ZSBkZWxldGUgcmVzdCBvZiBsaW5lIChzcGFjZXMgYXQgZW5kIG9mIGxpbmUpLgotICAgV2hlbiBtb3Zpbmcgb3IgcmVzaXppbmcgd2luZG93LCB0cnkgdG8gYXZvaWQgYSBjb21wbGV0ZSByZWRyYXcgKGVzcC4gd2hlbgogICAgZHJhZ2dpbmcgdGhlIHN0YXR1cyBsaW5lIHdpdGggdGhlIG1vdXNlKS4KLSAgIFdoZW4gJ2xhenlyZWRyYXcnIHNldCwgZG9uJ3QgZWNobyA6ZXggY29tbWFuZHM/ICBOZWVkIGEgZmxhZyB0byByZWRyYXcgd2hlbgogICAgd2FpdGluZyBmb3IgYSBjaGFyYWN0ZXIuCjggICBBZGQgYSAiOnJlZnJlc2ggW3dpbm5yXSIgY29tbWFuZCwgdG8gZm9yY2UgdXBkYXRpbmcgYSB3aW5kb3cuICBVc2VmdWwgZnJvbQogICAgYW4gZXZlbnQgaGFuZGxlciB3aGVyZSAiOm5vcm1hbCIgY2FuJ3QgYmUgdXNlZC4gIEFsc28gdXNlZnVsIHdoZW4KICAgICdsYXp5cmVkcmF3JyBpcyBzZXQgaW4gYSBtYXBwaW5nLgo3ICAgTWFrZSAnbGlzdCcgYW5kICdsaW5lYnJlYWsnIHdvcmsgdG9nZXRoZXIuCgoKU2Nyb2xsaW5nOgo4ICAgQWRkICJ6bSIgY29tbWFuZDogc2Nyb2xsIGhvcml6b250YWxseSB0byBwdXQgdGhlIGN1cnNvciBpbiB0aGUgbWlkZGxlLgo2ICAgQWRkIG9wdGlvbiB0byBzZXQgdGhlIG92ZXJsYXAgZm9yIENUUkwtRiBhbmQgQ1RSTC1CLiAoR2FyaGkpCi0gICBleHRlbmQgJ3Njcm9sbGJpbmQnIG9wdGlvbjogJ3Njcm9sbG9wdCcgd29yZHMgInNlYXJjaCIsICJyZWxhdGl2ZSIsIGV0Yy4uCiAgICBBbHNvICdlJ3hlY3V0ZSBzb21lIGNvbW1hbmRzIChzZWFyY2gsIHZlcnRpY2FsIG1vdmVtZW50cykgaW4gYWxsIGJvdW5kCiAgICB3aW5kb3dzLgo3ICAgQWRkICdzY3JvbGxiaW5kJyBmZWF0dXJlIHRvIG1ha2UgdGhlIG9mZnNldCBvZiBvbmUgd2luZG93IHdpdGggdGhlIG5leHQKICAgIG9uZSBlcXVhbCB0byB0aGUgd2luZG93IGhlaWdodC4gIFdoZW4gZWRpdGluZyBvbmUgZmlsZSBpbiBib3RoIHdpbmRvd3MgaXQKICAgIGxvb2tzIGxpa2UgZWFjaCB3aW5kb3cgZGlzcGxheXMgYSBwYWdlIG9mIHRoZSBidWZmZXIuCi0gICBBbGxvdyBzY3JvbGxpbmcgYnkgZHJhZ2dpbmcgd2l0aCB0aGUgbW91c2UgKGdyYWIgYSBjaGFyYWN0ZXIgYW5kIG1vdmUgaXQKICAgIHVwL2Rvd24pLiAgTGlrZSB0aGUgImhhbmQiIGluIEFjcm9iYXQgcmVhZGVyLiAgVXNlIEFsdC1MZWZ0TW91c2UgZm9yIHRoaXM/CiAgICAoR29sZGZhcmIpCi0gICBBZGQgY29tbWFuZCB0byBleGVjdXRlIHNvbWUgY29tbWFuZHMgKHNlYXJjaCwgdmVydGljYWwgbW92ZW1lbnRzKSBpbiBhbGwKICAgIGJvdW5kIHdpbmRvd3MuCi0gICBBZGQgJ3NlYXJjaCcgb3B0aW9uIHRvICdzY3JvbGxvcHQnIHRvIGFsbG93ICdzY3JvbGxiaW5kJyB3aW5kb3dzIHRvCiAgICBiZSBib3VuZCBieSByZWdleHAgc2VhcmNoZXMKLSAgIEFkZCAiej4iIGFuZCAiejwiOiBzY3JvbGwgc2lkZXdheXMgb25lIHNjcmVlbmZ1bC4gKENhbXBiZWxsKQotICAgQWRkIG9wdGlvbiB0byBzZXQgdGhlIG51bWJlciBvZiBsaW5lcyB3aGVuIG5vdCB0byBzY3JvbGwsIGluc3RlYWQgb2YgdGhlCiAgICBmaXhlZCBudW1iZXIgdXNlZCBub3cgKGZvciB0ZXJtaW5hbHMgdGhhdCBzY3JvbGwgc2xvdyB3aXRoIGEgbGFyZ2UgbnVtYmVyCiAgICBvZiBsaW5lcyBidXQgbm90IHdpdGggYSBzaW5nbGUgbGluZSkuCgoKQXV0b2NvbmY6CjggICBTaG91bGQgdXNlIGFjY29uZmlnLmggdG8gZGVmaW5lIHByb3RvdHlwZXMgdGhhdCBhcmUgdXNlZCBieSBhdXRvaGVhZGVyLgo4ICAgU29tZSBjb21waWxlcnMgZG9uJ3QgZ2l2ZSBhbiBlcnJvciBmb3IgIi1PUFQ6T2xpbWl0IiBidXQgYSB3YXJuaW5nLiAoV2ViYikKICAgIEFkZCBhIGNoZWNrIGZvciB0aGUgd2FybmluZywgc28gdGhhdCAiT2xpbWl0IiBjYW4gYmUgYWRkZWQgYXV0b21hdGljYWxseT8KLSAgIEF1dG9jb25mOiBVc2UgQGRhdGFkaXJAIGZvciB0aGUgc3lzdGVtIGluZGVwZW5kZW50IGZpbGVzLiAgTWFrZSBzdXJlIHRoZQogICAgc3lzdGVtIGRlcGVuZGVudCBhbmQgc3lzdGVtIGluZGVwZW5kZW50IGZpbGVzIGFyZSBzZXBhcmF0ZWQuIChMZWl0bmVyKS4KLSAgIEFkZCBhdXRvY29uZiBjaGVjayBmb3Igd2FpdHBpZCgpL3dhaXQ0KCkuCi0gICBSZW1vdmUgZmNudGwoKSBmcm9tIGF1dG9jb25mLCBhbGwgc3lzdGVtcyBoYXZlIGl0PwotICAgU2V0IGRlZmF1bHQgZm9yICdkaWN0aW9uYXJ5JywgYWRkIHNlYXJjaCBmb3IgZGljdGlvbmFyeSB0byBhdXRvY29uZi4KCgpQZXJsIGludGVyZmFjZToKOCAgIFJlbmFtZSB0eXBlbWFwIGZpbGUgdG8gc29tZXRoaW5nIGVsc2U/CjcgICBNYWtlIGJ1ZmZlcnMgYWNjZXNzZWQgYXMgUGVybCBhcnJheXMuIChDbGFyaykKNyAgIE1ha2UgaXQgcG9zc2libGUgdG8gY29tcGlsZSB3aXRoIG5vbi1BTlNJIEM/CjYgICBUY2wvVGsgaGFzIHRoZSAibG9hZCIgY29tbWFuZDogbG9hZCBhIHNoYXJlZCBsaWJyYXJ5ICguc28gb3IgLmRsbCkuCgoKU2hhcmVkIGxpYnJhcmllczoKNiAgIEFkZCBzdXBwb3J0IGZvciBsb2FkaW5nIHNoYXJlZCBsaWJyYXJpZXMsIGFuZCBjYWxsaW5nIGZ1bmN0aW9ucyBpbiBpdC4KCTpsaWJsb2FkIGludGVybmFsLW5hbWUgbGlibmFtZQoJOmxpYnVubG9hZCBpbnRlcm5hbC1uYW1lCgk6bGlibGlzdAoJOmxpYmNhbGwgaW50ZXJuYWwtbmFtZSBmdW5jdGlvbihhcmcxLCBhcmcyLCAuLi4pCgk6bGliY2FsbCBmdW5jdGlvbihhcmcxLCBhcmcyLCAuLi4pCiAgICBsaWJjYWxsKCkgY2FuIGhhdmUgb25seSBvbmUgaW50ZWdlciBvciBTdHJpbmcgYXJndW1lbnQgYXQgdGhlIG1vbWVudC4KNiAgIEhhdmUgYSBsb29rIG9uIGhvdyBQZXJsIGhhbmRsZXMgbG9hZGluZyBkeW5hbWljIGxpYnJhcmllcy4KCgpUYWdzOgo3ICAgQ2FuIENUUkwtXSAoanVtcCB0byB0YWcpIGluY2x1ZGUgYSBmb2xsb3dpbmcgIi4iIGFuZCAiLT4iIHRvIHJlc3RyaWN0IHRoZQogICAgbnVtYmVyIG9mIHBvc3NpYmxlIG1hdGNoZXM/IENoZWNrIHRhZ3MgZmlsZSBmb3IgYW4gaXRlbSB0aGF0IGhhcyBtZW1iZXJzLgogICAgKEZsZW1taW5nIE1hZHNlbikKOCAgIFNjb3BlIGFyZ3VtZW50cyBmb3IgIjp0YWciLCBlLmcuOiAiOnRhZyBjbGFzczpjUGFnZSBvcGVuIiwgbGlrZSBFbHZpcy4KOCAgIFdoZW4gb3V0cHV0IG9mICI6dHNlbGVjdCIgaXMgbG9uZywgZ2V0dGluZyB0aGUgbW9yZS1wcm9tcHQsIHNob3VsZCBiZSBhYmxlCiAgICB0byB0eXBlIHRoZSB0YWcgbnVtYmVyIGRpcmVjdGx5Lgo3ICAgQWRkIHRoZSBwb3NzaWJpbGl0eSB0byB1c2UgdGhlICItdCB7dGFnfSIgYXJndW1lbnQgbXVsdGlwbGUgdGltZXMuICBPcGVuIGEKICAgIHdpbmRvdyBmb3IgZWFjaCB0YWcuCjcgICBNYWtlIG91dHB1dCBvZiAiOnRzZWxlY3QiIGEgYml0IG5pY2VyLiAgVXNlIGhpZ2hsaWdodGluZz8KNyAgIEhpZ2hsaWdodCB0aGUgInRhZyAxIG9mID4yIiBtZXNzYWdlLiAgTmV3IGhpZ2hsaWdodCBncm91cCwgb3Igc2FtZSBhcyAiaGl0CiAgICBib3R0b20iIHNlYXJjaCBtZXNzYWdlLgo3ICAgV2hlbiB1c2luZyAiOnRhZyIgYXQgdGhlIHRvcCBvZiB0aGUgdGFnIHN0YWNrLCBzaG91bGQgYWRkIGFub3RoZXIgZW50cnksCiAgICBzbyBDVFJMLVQgY2FuIGJyaW5nIHlvdSBiYWNrIHRvIHdoZXJlIHlvdSBhcmUgbm93IEFORCB0byB3aGVyZSB5b3Ugd2VyZQogICAgYmVmb3JlIHRoZSBwcmV2aW91cyAiOnRhZyIgY29tbWFuZC4gKFdlYmIpCi0gICBXaGVuIGRvaW5nICJbXkkiIG9yICJbXkQiIGFkZCBwb3NpdGlvbiB0byB0YWcgc3RhY2suCi0gICBBZGQgY29tbWFuZCB0byBwdXQgY3VycmVudCBwb3NpdGlvbiB0byB0YWcgc3RhY2s6ICI6dHB1c2giLgo3ICAgV2hlbiB1c2luZyBDVFJMLV0gb24gc29tZUNsYXNzOjpzb21lTWV0aG9kLCBzZXBhcmF0ZSBjbGFzcyBmcm9tIG1ldGhvZCBhbmQKICAgIHVzZSAiOnRhIGNsYXNzOnNvbWVDbGFzcyBzb21lTWV0aG9kIi4KICAgIEluY2x1ZGUgQysrIHRhZ3MgY2hhbmdlcyAoQmVydGluKS4JQ2hhbmdlICJjbGFzczo6ZnVuYyIgdGFnIGludG8gImZ1bmMiCiAgICB3aXRoICJjbGFzcz1jbGFzcyI/ICBEb2NzIGluIG9sZG1haWwvYmVydGluL2luLnh4eC4KNyAgIEFkZCAiOnRhZ2FyZ3MiLCB0byBzZXQgdmFsdWVzIGZvciBmaWVsZHM6Cgk6dGFnYXJncyBjbGFzczpzb21lY2xhc3MgZmlsZTp2ZXJzaW9uLmMKCTp0YWdhcmdzIGNsZWFyCiAgICBUaGVzZSBhcmUgdGhlbiB0aGUgZGVmYXVsdCB2YWx1ZXMgKGNoYW5nZXMgdGhlIG9yZGVyIG9mIHByaW9yaXR5IGluIHRhZwogICAgbWF0Y2hpbmcpLgo3ICAgU3VwcG9ydCBmb3IgImd0YWdzIiBhbmQgImdsb2JhbCI/ICBXaXRoICI6cnRhZyIgY29tbWFuZD8KICAgIFRoZXJlIGlzIGFuIGV4YW1wbGUgZm9yIGhvdyB0byBkbyB0aGlzIGluIE52aS4KICAgIE9yIGRvIGl0IGxpa2UgRWx2aXM6ICd0YWdwcmcnIGFuZCAndGFncHJnb25jZScgb3B0aW9ucy4gKFlhbWFndWNoaSkKICAgIFRoZSBFbHZpcyBtZXRob2QgaXMgZmFyIG1vcmUgZmxleGlibGUsIGRvIGl0IHRoYXQgd2F5Lgo3ICAgU3VwcG9ydCAiY29sOjk5IiBleHRyYSBmaWVsZCwgdG8gcG9zaXRpb24gdGhlIGN1cnNvciBpbiB0aGF0IGNvbHVtbi4gIFdpdGgKICAgIGEgZmxhZyBpbiAnY3BvcHRpb25zJyB0byBzd2l0Y2ggaXQgb2ZmIGFnYWluLgo3ICAgQmV0dGVyIHN1cHBvcnQgZm9yIGp1bXBpbmcgdG8gd2hlcmUgYSBmdW5jdGlvbiBvciB2YXJpYWJsZSBpcyB1c2VkLiAgVXNlCiAgICB0aGUgaWQtdXRpbHMsIHdpdGggYSBjb25uZWN0aW9uIHRvICJnaWQiIChFbWFjcyBjYW4gZG8gaXQgdG9vKS4gIEFkZAogICAgIjppZHNlbGVjdCIsIHdoaWNoIHVzZXMgYW4gIklEIiBkYXRhYmFzZSAobWFkZSBieSAibWtpZCIpIGxpa2UgInRzZWxlY3QiLgoKClNlY3VyaXR5OgotICAgbm90aGluZyBhdCB0aGUgbW9tZW50CgoKV2luMzIgR1VJOgo4ICAgTWFrZSBkZWJ1ZyBtb2RlIHdvcmsgd2hpbGUgc3RhcnRpbmcgdXAgKHZpbSAtRCkuICBPcGVuIGNvbnNvbGUgd2luZG93IGZvcgogICAgdGhlIG1lc3NhZ2UgYW5kIGlucHV0Pwo3ICAgVGhlIFB5dGhvbiBpbnRlcmZhY2Ugb25seSB3b3JrcyB3aXRoIG9uZSB2ZXJzaW9uIG9mIFB5dGhvbiwgc2VsZWN0ZWQgYXQKICAgIGNvbXBpbGUgdGltZS4gIENhbiB0aGlzIGJlIG1hZGUgdG8gd29yayB3aXRoIHZlcnNpb24gMi4xIGFuZCAyLjIKICAgIGR5bmFtaWNhbGx5Pwo3ICAgR3ZpbUV4dDogd2hlbiB0aGVyZSBhcmUgc2V2ZXJhbCBleGlzdGluZyBWaW1zLCBtb3ZlIHRoZSBsaXN0IHRvIGEgc3VibWVudS4KICAgIChNaWtlIE1jQ29sbGlzdGVyKQo4ICAgV2hlbiB1c2luZyAiRWRpdCB3aXRoIFZpbSIgZm9yIG9uZSBmaWxlIGl0IGNoYW5nZXMgZGlyZWN0b3J5LCB3aGVuIHNldmVyYWwKICAgIGZpbGVzIGFyZSBzZWxlY3RlZCBhbmQgdXNpbmcgIkVkaXQgd2l0aCBzaW5nbGUgVmltIiB0aGUgZGlyZWN0b3J5IGlzbid0CiAgICBjaGFuZ2VkLiAgQXQgbGVhc3QgY2hhbmdlIGRpcmVjdG9yeSB3aGVuIHRoZSBwYXRoIGlzIHRoZSBzYW1lIGZvciBhbGwKICAgIGZpbGVzLiAgUGVyaGFwcyBqdXN0IHVzZSB0aGUgcGF0aCBvZiB0aGUgZmlyc3QgZmlsZSBvciB1c2UgdGhlIGxvbmdlc3QKICAgIGNvbW1vbiBwYXJ0IG9mIHRoZSBwYXRoLgo4ICAgQWRkIGZvbnQgYXJndW1lbnQgdG8gc2V0IHRoZSBsZkNoYXJTZXQuIChCb2JjaWspCjggICBTb21laG93IGF1dG9tYXRpY2FsbHkgZGV0ZWN0IHRoZSBzeXN0ZW0gbGFuZ3VhZ2UgYW5kIHNldCAkTEFORywgc28gdGhhdAogICAgZ2V0dGV4dCBhbmQgbWVudXMgd29yay4KOCAgIENvdWxkIGtlZXAgY29uc29sZSBvcGVuIHRvIHJ1biBtdWx0aXBsZSBjb21tYW5kcywgdG8gYXZvaWQgdGhlIG5lZWQgdG8gaGl0CiAgICByZXR1cm4gaW4gZXZlcnkgY29uc29sZS4KICAgIEFsc286IExvb2sgYXQgaG93IEVtYWNzIGRvZXMgcnVucyBleHRlcm5hbCBjb21tYW5kczoKCWh0dHA6Ly93d3cuY3Mud2FzaGluZ3Rvbi5lZHUvaG9tZXMvdm9lbGtlci9udGVtYWNzLmh0bWwuCjggICBOZWVkIGEgc2VwYXJhdGUgUG9wVXAgbWVudSBmb3IgbW9kZWxlc3Mgc2VsZWN0aW9uLiAgTmVlZCB0d28gbmV3IGNvbW1hbmRzOgogICAgQ29weSBzZWxlY3Rpb24gdG8gY2xpcGJvYXJkLCBQYXN0ZSBzZWxlY3Rpb24gKGFzIHR5cGVkIHRleHQpLgo4ICAgU3VwcG9ydCBjb3B5L3Bhc3RlIGZvciBvdGhlciBmaWxlIGZvcm1hdHMuICBBdCBsZWFzdCBIVE1MLCBwZXJoYXBzIFJURi4KICAgIEFkZCAiY29weSBzcGVjaWFsIiBhbmQgInBhc3RlIHNwZWNpYWwiIGNvbW1hbmRzPwo3ICAgVXNlIGRpZmZlcmVudCBkZWZhdWx0IGNvbG9ycywgdG8gbWF0Y2ggdGhlIGN1cnJlbnQgV2luZG93cyBjb2xvciBzY2hlbWUuCiAgICBTeXNfV2luZG93VGV4dCwgU3lzX1dpbmRvdywgZXRjLiAoTGlvbmVsIFNjaGFmZmhhdXNlcikKNyAgIFVzZSA8Qy1UYWI+IHRvIGN5Y2xlIHRocm91Z2ggb3BlbiB3aW5kb3dzIChlLmcuLCB0aGUgZmluZCBkaWFsb2cpLgo3ICAgPEVzYz4gc2hvdWxkIGNsb3NlIGEgZGlhbG9nLgo3ICAgS2VlcCB0aGUgY29uc29sZSBmb3IgZXh0ZXJuYWwgY29tbWFuZHMgb3Blbi4gIERvbid0IHdhaXQgZm9yIGEga2V5IHRvIGJlCiAgICBoaXQuICBSZS1vcGVuIGl0IHdoZW4gdGhlIHVzZXIgaGFzIGNsb3NlZCBpdCBhbnl3YXkuICBPciB1c2UgYSBwcmVwZW5kZWQKICAgIGNvbW1hbmQ6ICI6bm93YWl0IHtjbWR9Iiwgb3IgIjpxdWlldCIsIHdoaWNoIGV4ZWN1dGVzIHtjbWR9IHdpdGhvdXQgYW55CiAgICBwcm9tcHRzLgo3ICAgU2hvdWxkIGJlIGFibGUgdG8gc2V0IGFuIG9wdGlvbiBzbyB0aGF0IHdoZW4geW91IGRvdWJsZSBjbGljayBhIGZpbGUgdGhhdAogICAgaXMgYXNzb2NpYXRlZCB3aXRoIFZpbSwgeW91IGNhbiBlaXRoZXIgZ2V0IGEgbmV3IGluc3RhbmNlIG9mIFZpbSwgb3IgaGF2ZQogICAgdGhlIGZpbGUgYWRkZWQgaW50byBhbiBhbHJlYWR5IHJ1bm5pbmcgVmltLgo3ICAgVGhlICItUCIgYXJndW1lbnQgb25seSB3b3JrcyBmb3IgdGhlIGN1cnJlbnQgY29kZXBhZ2UuICBVc2Ugd2lkZQogICAgZnVuY3Rpb25zIHRvIGZpbmQgdGhlIHdpbmRvdyB0aXRsZS4KCgpHVUk6CjggICBNYWtlIGlucHV0ZGlhbG9nKCkgd29yayBmb3IgUGhvdG9uLCBBbWlnYSwgUmlzY09TLgotICAgPEMtLT4gY2Fubm90IGJlIG1hcHBlZC4gIFNob3VsZCBiZSBwb3NzaWJsZSB0byByZWNvZ25pemUgdGhpcyBhcyBhCiAgICBub3JtYWwgIi0iIHdpdGggdGhlIEN0cmwgbW9kaWZpZXIuCjcgICBJbXBsZW1lbnQgIjpwb3B1cCIgZm9yIG90aGVyIHN5c3RlbXMgdGhhbiBXaW5kb3dzLgo4ICAgSW1wbGVtZW50ICI6dGVhcm9mZiIgZm9yIG90aGVyIHN5c3RlbXMgdGhhbiBXaW4zMiBHVUkuCjYgICBJbXBsZW1lbnQgIjp1bnRlYXJvZmYiOiBoaWRlIGEgdG9ybi1vZmYgbWVudS4KOCAgIFdoZW4gdXNpbmcgdGhlIHNjcm9sbGJhciB0byBzY3JvbGwsIGRvbid0IG1vdmUgdGhlIGN1cnNvciBwb3NpdGlvbi4gIFdoZW4KICAgIG1vdmluZyB0aGUgY3Vyc29yOiBzY3JvbGwgdG8gdGhlIGN1cnNvciBwb3NpdGlvbi4KOSAgIE1ha2UgPFMtSW5zZXJ0PiBwYXN0ZSBmcm9tIHRoZSBjbGlwYm9hcmQgYnkgZGVmYXVsdC4gKEt1bnplKQo3ICAgTWVudSBsb2NhbCB0byBhIGJ1ZmZlciwgbGlrZSBtYXBwaW5ncy4gIE9yIGxvY2FsIHRvIGEgZmlsZXR5cGU/CjggICBJbiBCdWZmZXJzIG1lbnUsIGFkZCBhIGNob2ljZSB3aGV0aGVyIHNlbGVjdGluZyBhIGJ1ZmZlciBvcGVucyBpdCBpbiB0aGUKICAgIGN1cnJlbnQgd2luZG93LCBzcGxpdHMgdGhlIHdpbmRvdyBvciB1c2VzICI6aGlkZSIuCjggICBEcmFnZ2luZyB0aGUgbW91c2UgcG9pbnRlciBvdXRzaWRlIG9mIGEgVmltIFdpbmRvdyBzaG91bGQgbWFrZSB0aGUgdGV4dAogICAgc2Nyb2xsLiAgUmV0dXJuIGEgdmFsdWUgZnJvbSBndWlfc2VuZF9tb3VzZV9ldmVudCgpIHRvIHRoZSBtYWNoaW5lCiAgICBzcGVjaWZpYyBjb2RlIHRvIGluZGljYXRlIHRoZSB0aW1lIGluIHdoaWNoIHRoZSBldmVudCBzaG91bGQgYmUgcmVwZWF0ZWQuCjggICBNYWtlIGl0IHBvc3NpYmxlIHRvIGlnbm9yZSBhIG1vdXNlIGNsaWNrIHdoZW4gaXQncyB1c2VkIHRvIGdpdmUgVmltIChndmltKQogICAgd2luZG93IGZvY3VzLiAgQWxzbyB3aGVuIGEgbW91c2UgY2xpY2sgaXMgdXNlZCB0byBicmluZyBhIHdpbmRvdyB0byBmcm9udC4KOCAgIE1ha2UgdGhlIHNwbGl0IGludG8gc3lzdGVtIGluZGVwZW5kZW50IGNvZGUgYW5kIHN5c3RlbSBzcGVjaWZpYyBjb2RlIG1vcmUKICAgIGV4cGxpY2l0LiAgVGhlcmUgYXJlIHRvbyBtYW55ICNpZmRlZnMgaW4gZ3VpLmMuCiAgICBJZiBwb3NzaWJsZSwgc2VwYXJhdGUgdGhlIFZpbSBjb2RlIGNvbXBsZXRlbHkgZnJvbSB0aGUgR1VJIGNvZGUsIHRvIGFsbG93CiAgICBydW5uaW5nIHRoZW0gaW4gc2VwYXJhdGUgcHJvY2Vzc2VzLgo3ICAgWDExOiBTdXBwb3J0IGN1cnNvckNvbG9yIHJlc291cmNlIGFuZCAiLWNyIiBhcmd1bWVudC4KOCAgIFgxMSAoYW5kIG90aGVycyk6IENUUkwtOyBpcyBub3QgZGlmZmVyZW50IGZyb20gJzsnLiAgU2V0IHRoZSBtb2RpZmllciBtYXNrCiAgICB0byBpbmNsdWRlIENUUkwgZm9yIGtleXMgd2hlcmUgQ1RSTCBwcm9kdWNlcyB0aGUgc2FtZSBBU0NJSSBjb2RlLgo3ICAgQWRkIHNvbWUgY29kZSB0byBoYW5kbGUgcHJvcG9ydGlvbmFsIGZvbnRzIG9uIG1vcmUgc3lzdGVtcz8gIE5lZWQgdG8gZHJhdwogICAgZWFjaCBjaGFyYWN0ZXIgc2VwYXJhdGVseSAobGlrZSB4dGVybSkuICBBbHNvIGZvciB3aGVuIGEgZG91YmxlLXdpZHRoIGZvbnQKICAgIGlzIG5vdCBleGFjdGx5IGRvdWJsZS13aWR0aC4gKE1hZWRhKQo4ICAgU2hvdWxkIHRha2UgZm9udCBmcm9tIHh0ZXJtIHdoZXJlIGd2aW0gd2FzIHN0YXJ0ZWQgKGlmIG5vIG90aGVyIGRlZmF1bHQpLgo4ICAgU2VsZWN0aW5nIGZvbnQgbmFtZXMgaW4gWDExIGlzIGRpZmZpY3VsdCwgbWFrZSBhIHNjcmlwdCBvciBzb21ldGhpbmcgdG8KICAgIHNlbGVjdCBvbmUuCjggICBWaXN1YWwgaGlnaGxpZ2h0aW5nIHNob3VsZCBrZWVwIHRoZSBzYW1lIGZvbnQgKGJvbGQsIGl0YWxpYywgZXRjLikuCjggICBBZGQgZmxhZyB0byAnZ3Vpb3B0aW9ucycgdG8gbm90IHB1dCBhbnl0aGluZyBpbiB0aGUgY2xpcGJvYXJkIGF0IGFsbD8KOCAgIFNob3VsZCBzdXBwb3J0IGEgd2F5IHRvIHVzZSBrZXlzIHRoYXQgd2UgZG9uJ3QgcmVjb2duaXplIHlldC4gIEFkZCBhCiAgICBjb21tYW5kIHRoYXQgYWRkcyBlbnRyaWVzIHRvIHNwZWNpYWxfa2V5cyBzb21laG93LglIb3cgZG8gd2UgbWFrZSB0aGlzCiAgICBwb3J0YWJsZSAoWDExLCBXaW4zMiwgLi4pPwo3ICAgQWRkIGEgZmxhZyB0byAnZ3Vpb3B0aW9ucycgdGhhdCB0ZWxscyBub3QgdG8gcmVtb3ZlIGluYWN0aXZlIG1lbnUgaXRlbXMuCiAgICBGb3Igc3lzdGVtcyB3aGVyZSBncmV5aW5nLW91dCBvciByZW1vdmluZyBtZW51IGl0ZW1zIGlzIHZlcnkgc2xvdy4gIFRoZQogICAgbWVudSBpdGVtcyB3b3VsZCByZW1haW4gdmlzaWJseSBub3JtYWxseSwgYnV0IG5vdCBkbyBhbnl0aGluZy4KNyAgIEFkZCAiOm1pbmltaXplIiBhbmQgIjptYXhpbWl6ZSIsIHdoaWNoIGljb25pemUgdGhlIHdpbmRvdyBhbmQgYmFjay4KICAgIFVzZWZ1bCB3aGVuIHVzaW5nIGd2aW0gdG8gcnVuIGEgc2NyaXB0IChlLmcuIDJodG1sLnZpbSkuCjcgICBYMTE6IElzIGl0IHBvc3NpYmxlIHRvIGZyZWUgYWxsb2NhdGVkIGNvbG9ycywgc28gdGhhdCBvdGhlciBwcm9ncmFtcyBjYW4KICAgIHVzZSB0aGVtIGFnYWluPyAgT3RoZXJ3aXNlLCBhbGxvdyBkaXNhYmxpbmcgYWxsb2NhdGluZyB0aGUgZGVmYXVsdCBjb2xvcnMuCiAgICBPciBhbGxvY2F0ZSBhbiBvd24gY29sb3JtYXAgKGNoZWNrIFVBRSkuICBXaXRoIGFuIG9wdGlvbiB0byB1c2UgaXQuICBGb3IKICAgIHRoZSBjb21tYW5kbGluZSwgIi1pbnN0YWxsIiBpcyBtb3N0bHkgdXNlZCBmb3IgWDExIHByb2dyYW1zLgo3ICAgQWRkIGNvbW1hbmQgbGluZSBhcmd1bWVudCBmb3IgImd2aW0iIG5vdCB0byBzdGFydCB0aGUgR1VJLiAgU29ydCBvZiB0aGUKICAgIGludmVyc2Ugb2YgInZpbSAtZyIuIChWaWthcykKNyAgIFNob3VsZCBzdXBwb3J0IG11bHRpLWNvbHVtbiBtZW51cy4KLSAgIFNob3VsZCBhZGQgb3B0aW9uIGZvciB3aGVyZSB0byBwdXQgdGhlICJIZWxwIiBtZW51OiBsaWtlIE1vdGlmIGF0IHRoZSBmYXIKICAgIHJpZ2h0LCBvciB3aXRoIHRoZSBvdGhlciBtZW51cyAoYnV0IHN0aWxsIGF0IHRoZSByaWdodCkuCi0gICBBZGQgbWVudSBpdGVtIHRvICJLZWVwIEluc2VydCBtb2RlIi4KOCAgICI6bWtndmltcmMiIGNvbW1hbmQsIHRoYXQgaW5jbHVkZXMgbWVudXMuCjYgICBCaWcgY2hhbmdlOiBNb3ZlIEdVSSB0byBzZXBhcmF0ZSBwcm9ncmFtICJ2aW1ndWkiLCB0byBtYWtlIHN0YXJ0dXAgb2YgdmltIGEKICAgIGxvdCBmYXN0ZXIsIGJ1dCBzdGlsbCBiZSBhYmxlIHRvIGRvICJ2aW0gLWciIG9yICI6Z3VpIi4KNyAgIE1vcmUgZXhwbGljaXQgbW91c2UgYnV0dG9uIGJpbmRpbmcgaW5zdGVhZCBvZiAnbW91c2Vtb2RlbCc/CjcgICBBZGQgb3B0aW9uIHRvIHNldCB0aGUgcG9zaXRpb24gb2YgdGhlIHdpbmRvdyBvbiB0aGUgc2NyZWVuLiAgJ3dpbmRvd3BvcycsCiAgICB3aGljaCBoYXMgYSB2YWx1ZSBvZiAiMTIzLDQ1NiI6IDx4Piw8eT4uCiAgICBPciBhZGQgYSBjb21tYW5kLCBsaWtlICI6d2luc2l6ZSI/CjcgICBBZGQgdG9vbGJhciBmb3IgbW9yZSBHVUlzLgo4ICAgTWFrZSBpdCBwb3NzaWJsZSB0byB1c2UgImFtZW51IGljb249QnVpbHRJbiMjIiwgc28gdGhhdCB0aGUgdG9vbGJhciBpdGVtCiAgICBuYW1lIGNhbiBiZSBjaG9zZW4gZnJlZS4KNyAgIE1ha2UgaXQgcG9zc2libGUgdG8gcHV0IHRoZSB0b29sYmFyIG9uIHRvcCwgbGVmdCwgcmlnaHQgYW5kL29yIGJvdHRvbSBvZgogICAgdGhlIHdpbmRvdz8gIEFsbG93cyBmb3Igc29mdGtleS1saWtlIHVzZS4KNiAgIFNlcGFyYXRlIHRoZSBwYXJ0IG9mIFZpbSB0aGF0IGRvZXMgdGhlIGVkaXRpbmcgZnJvbSB0aGUgcGFydCB0aGF0IHJ1bnMgdGhlCiAgICBHVUkuICBDb21tdW5pY2F0ZSB0aHJvdWdoIGEgcHNldWRvLXR0eS4gIFZpbSBzdGFydHMgdXAsIGNyZWF0ZXMgYQogICAgcHR5IHRoYXQgaXMgY29ubmVjdGVkIHRvIHRoZSB0ZXJtaW5hbC4gIFdoZW4gdGhlIEdVSSBzdGFydHMsIHRoZSBwdHkgaXMKICAgIHJlY29ubmVjdGVkIHRvIHRoZSBHVUkgcHJvY2Vzcy4gIFdoZW4gdGhlIEdVSSBzdG9wcywgaXQgaXMgY29ubmVjdGVkIHRvCiAgICB0aGUgdGVybWluYWwgYWdhaW4uICBBbHNvIHVzZSB0aGUgcHR5IGZvciBleHRlcm5hbCBwcm9jZXNzZXMsIGl0IGxvb2tzCiAgICBsaWtlIGEgdnQxMDAgdGVybWluYWwgdG8gdGhlbS4gIFZpbSB1c2VzIGV4dHJhIGNvbW1hbmRzIHRvIGNvbW11bmljYXRlIEdVSQogICAgdGhpbmdzLgo3ICAgTW90aWY6IEZvciBhIGNvbmZpcm0oKSBkaWFsb2cgPEVudGVyPiBzaG91bGQgYmUgaWdub3JlZCB3aGVuIG5vIGRlZmF1bHQKICAgIGJ1dHRvbiBzZWxlY3RlZCwgPEVzYz4gc2hvdWxkIGNsb3NlIHRoZSBkaWFsb2cuCjcgICBXaGVuIHVzaW5nIGEgcHNldWRvLXR0eSBWaW0gc2hvdWxkIGJlaGF2ZSBsaWtlIHNvbWUgdGVybWluYWwgKHZ0NTIgbG9va3MKICAgIHNpbXBsZSBlbm91Z2gpLiAgVGVybWluYWwgY29kZXMgdG8vZnJvbSBzaGVsbCBzaG91bGQgYmUgdHJhbnNsYXRlZC4KLSAgIFdvdWxkIGl0IGJlIHVzZWZ1bCB0byBiZSBhYmxlIHRvIHF1aXQgdGhlIEdVSSBhbmQgZ28gYmFjayB0byB0aGUgdGVybWluYWwKICAgIHdoZXJlIGl0IHdhcyBzdGFydGVkIGZyb20/CjcgICBTdXBwb3J0ICItdmlzdWFsIDx0eXBlPiIgY29tbWFuZCBsaW5lIGFyZ3VtZW50LgoKCkF1dG9jb21tYW5kczoKNyAgIEZvciBhdXRvY29tbWFuZCBldmVudHMgdGhhdCB0cmlnZ2VyIG11bHRpcGxlIHRpbWVzIHBlciBidWZmZXIgKGUuZy4sCiAgICBDdXJzb3JIb2xkKSwgZ28gdGhyb3VnaCB0aGUgbGlzdCBvbmNlIGFuZCBjYWNoZSB0aGUgcmVzdWx0IGZvciBhIHNwZWNpZmljCiAgICBidWZmZXIuICBJbnZhbGlkYXRlIHRoZSBjYWNoZSB3aGVuIGFkZGluZy9kZWxldGluZyBhdXRvY29tbWFuZHMgb3IKICAgIGNoYW5naW5nIHRoZSBidWZmZXIgbmFtZS4KOCAgIEFkZCBTY3JpcHRSZWFkQ21kIGV2ZW50OiB1c2VkIHRvIGxvYWQgcmVtb3RlIFZpbSBzY3JpcHRzLCBlLmcuCiAgICAidmltIC11IGh0dHA6Ly9tYWNoL3BhdGgvdmltcmMiLgo3ICAgQWRkIFRhZ0p1bXAgZXZlbnQ6IGRvIHNvbWV0aGluZyBhZnRlciBqdW1waW5nIHRvIGEgdGFnLgo4ICAgQWRkICJUYWdKdW1wRmlsZSIgYXV0b2NvbW1hbmQ6IFdoZW4ganVtcGluZyB0byBhbm90aGVyIGZpbGUgZm9yIGEgdGFnLgogICAgQ2FuIGJlIHVzZWQgdG8gb3BlbiAibWFpbi5jLmd6IiB3aGVuICJtYWluLmMiIGlzbid0IGZvdW5kLgo4ICAgVXNlIGFub3RoZXIgb3B0aW9uIHRoYW4gJ3VwZGF0ZXRpbWUnIGZvciB0aGUgQ3Vyc29ySG9sZCBldmVudC4gIFRoZSB0d28KICAgIHRoaW5ncyBhcmUgdW5yZWxhdGVkIGZvciB0aGUgdXNlciAoYnV0IHRoZSBpbXBsZW1lbnRhdGlvbiBpcyBtb3JlCiAgICBkaWZmaWN1bHQpLgo4ICAgQWRkIGFuIGV2ZW50IGxpa2UgQ3Vyc29ySG9sZCB0aGF0IGlzIHRyaWdnZXJlZCByZXBlYXRlZGx5LCBub3QganVzdCBvbmNlCiAgICBhZnRlciB0eXBpbmcgc29tZXRoaW5nLgo3ICAgQWRkIGF1dG9jb21tYW5kIGV2ZW50IGZvciB3aGVuIGEgYnVmZmVyIGNhbm5vdCBiZSBhYmFuZG9uZWQuICBTbyB0aGF0IHRoZQogICAgdXNlciBjYW4gZGVmaW5lIHRoZSBhY3Rpb24gdGFraW5nIChhdXRvd3JpdGUsIGRpYWxvZywgZmFpbCkgYmFzZWQgb24gdGhlCiAgICBraW5kIG9mIGZpbGUuIChZYWtvdiBMZXJuZXIpICBPciBpcyBCdWZMZWF2ZSBzdWZmaWNpZW50Pwo4ICAgQXV0b2NvbW1hbmQgZm9yIHdoZW4gbW9kaWZpZWQgZmlsZXMgaGF2ZSBiZWVuIGZvdW5kLCB3aGVuIGdldHRpbmcgaW5wdXQKICAgIGZvY3VzIGFnYWluIChlLmcuLCBGaWxlQ2hhbmdlZEZvY3VzKS4KICAgIENoZWNrIHdoZW46IGdldHRpbmcgZm9jdXMsIGp1bXBpbmcgdG8gYW5vdGhlciBidWZmZXIsIC4uLgo4ICAgQXV0b2NvbW1hbmRzIHNob3VsZCBub3QgY2hhbmdlIHJlZ2lzdGVycy4gIEFuZCBtYXJrcz8gIEFuZCB0aGUganVtcGxpc3Q/CiAgICBBbmQgYW55dGhpbmcgZWxzZT8gIEFkZCBhIGNvbW1hbmQgdG8gc2F2ZSBhbmQgcmVzdG9yZSB0aGVzZSB0aGluZ3MuCjggICBBZGQgYXV0b2NvbW1hbmRzLCB1c2VyIGZ1bmN0aW9ucyBhbmQgdXNlciBjb21tYW5kcyB0byAiOm1rdmltcmMiLgo2ICAgQWRkIEtleW1hcENoYW5nZWQgZXZlbnQsIHNvIHRoYXQgdGhlIGVmZmVjdHMgb2YgYSBkaWZmZXJlbnQga2V5bWFwIGNhbiBiZQogICAgaGFuZGxlZCAoZS5nLiwgb3RoZXIgZm9udCkgKFJvbiBBYXJvbikKNyAgIFdoZW4gdHJ5aW5nIHRvIG9wZW4gYSBkaXJlY3RvcnksIHRyaWdnZXIgYW4gT3BlbkRpcmVjdG9yeSBldmVudC4KNyAgIEFkZCBmaWxlIHR5cGUgaW4gZnJvbnQgb2YgZmlsZSBwYXR0ZXJuOiA8ZD4gZm9yIGRpcmVjdG9yeSwgPGw+IGZvciBsaW5rLAogICAgPHg+IGZvciBleGVjdXRhYmxlLCBldGMuICA8Jnh4eD4gZm9yIFJpc2MgT1MuICBXaXRoIGNvbW1hcyB0byBzZXBhcmF0ZQogICAgYWx0ZXJuYXRpdmVzLiAgVGhlIGF1dG9jb21tYW5kIGlzIG9ubHkgZXhlY3V0ZWQgd2hlbiBib3RoIHRoZSBmaWxlIHR5cGUKICAgIEFORCB0aGUgZmlsZSBwYXR0ZXJuIG1hdGNoLiAoTGVvbmFyZCkKNSAgIEFkZCBvcHRpb24gdGhhdCBzcGVjaWZpZXMgZXh0ZW5zaW9ucyB3aGljaCBhcmUgdG8gYmUgZGlzY2FyZGVkIGZyb20gdGhlCiAgICBmaWxlIG5hbWUuICBFLmcuICdhdXN1ZmZpeCcsIHdpdGggIi5neiwub3JpZyIuICBTdWNoIHRoYXQgZmlsZS5jLmd6IHdpbGwKICAgIHRyaWdnZXIgdGhlICIqLmMiIGF1dG9jb21tYW5kcy4gIChCZWxhYmFzKQo3ICAgQWRkIHNvbWV0aGluZyB0byBicmVhayB0aGUgYXV0b2NvbW1hbmRzIGZvciB0aGUgY3VycmVudCBldmVudCwgYW5kIGZvcgogICAgd2hhdCBmb2xsb3dzLiAgVXNlZnVsIGZvciBhICJCdWZXcml0ZVByZSIgdGhhdCB3YW50cyB0byBhdm9pZCB3cml0aW5nIHRoZQogICAgZmlsZS4KOCAgIFdoZW4gZWRpdGluZyAidHQuZ3oiLCB3aGljaCBpcyBpbiBET1MgZm9ybWF0LCAnZmlsZWZvcm1hdCcgc3RheXMgYXQKICAgICJ1bml4IiwgdGh1cyB3cml0aW5nIHRoZSBmaWxlIGNoYW5nZXMgaXQuICBTb21laG93IGRldGVjdCB0aGF0IHRoZSByZWFkCiAgICBjb21tYW5kIHVzZWQgZG9zIGZpbGVmb3JtYXQuICBTYW1lIGZvciAnZmlsZWVuY29kaW5nJy4KLSAgIEFkZCBldmVudHMgdG8gYXV0b2NvbW1hbmRzOgogICAgRXJyb3IJICAgIC0gV2hlbiBhbiBlcnJvciBoYXBwZW5zCiAgICBOb3JtYWxFbnRlcgkgICAgLSBFbnRlcmluZyBOb3JtYWwgbW9kZQogICAgUmVwbGFjZUVudGVyICAgIC0gRW50ZXJpbmcgUmVwbGFjZSBtb2RlCiAgICBDbWRFbnRlcgkgICAgLSBFbnRlcmluZyBDbWRsaW5lIG1vZGUKICAgIFZpc3VhbEVudGVyCSAgICAtIEVudGVyaW5nIFZpc3VhbCBtb2RlCiAgICAqTGVhdmUJICAgIC0gTGVhdmluZyBhIG1vZGUgKGluIHBhaXIgd2l0aCB0aGUgYWJvdmUgKkVudGVyKQogICAgVmltTGVhdmVDaGVjayAgICAtIEJlZm9yZSBWaW0gZGVjaWRlcyB0byBleGl0LCBzbyB0aGF0IGl0IGNhbiBiZSBjYW5jZWxsZWQKCQkgICAgICB3aGVuIGV4aXRpbmcgaXNuJ3QgYSBnb29kIGlkZWEuCiAgICBXaW5Nb3ZlZAkgICAgLSB3aGVuIHdpbmRvd3MgaGF2ZSBiZWVuIG1vdmVkIGFyb3VuZCwgZS5nLCAiOndpbmNtZCBKIgogICAgQ21kVW5kZWZpbmVkICAgIC0gTGlrZSBGdW5jVW5kZWZpbmVkIGJ1dCBmb3IgdXNlciBjb21tYW5kcy4KICAgIFNlYXJjaFBvc3QJICAgIC0gQWZ0ZXIgZG9pbmcgYSBzZWFyY2ggY29tbWFuZCAoZS5nLiB0byBkbyAiTSIpCiAgICBQcmVEaXJDaGFuZ2VkL1Bvc3REaXJDaGFuZ2VkCgkJICAgIC0gQmVmb3JlL2FmdGVyICI6Y2QiIGhhcyBiZWVuIHVzZWQgKGZvciBjaGFuZ2luZyB0aGUKCQkgICAgICB3aW5kb3cgdGl0bGUpCiAgICBCdWZSZWFkQWN0aW9uICAgLSByZXBsYWNlcyByZWFkaW5nIGEgZmlsZQogICAgQnVmV3JpdGVBY3Rpb24gIC0gcmVwbGFjZXMgd3JpdGluZyBhIGZpbGUKICAgIFNodXREb3duCSAgICAtIHdoZW4gdGhlIHN5c3RlbSBpcyBhYm91dCB0byBzaHV0IGRvd24KICAgIEluc2VydENoYXJQcmUgICAtIHVzZXIgdHlwZWQgY2hhcmFjdGVyIEluc2VydCBtb2RlLCBiZWZvcmUgaW5zZXJ0aW5nIHRoZQoJCSAgICAgIGNoYXIuICBQYXR0ZXJuIGlzIG1hdGNoZWQgd2l0aCB0ZXh0IGJlZm9yZSB0aGUgY3Vyc29yLgoJCSAgICAgIFNldCB2OmNoYXIgdG8gdGhlIGNoYXJhY3RlciwgY2FuIGJlIGNoYW5nZWQuCgkJICAgICAgKG5vdCB0cmlnZ2VyZWQgd2hlbiAncGFzdGUnIGlzIHNldCkuCiAgICBJbnNlcnRDaGFyUG9zdCAgLSB1c2VyIHR5cGVkIGEgY2hhcmFjdGVyIGluIEluc2VydCBtb2RlLCBhZnRlciBpbnNlcnRpbmcKCQkgICAgICB0aGUgY2hhci4KICAgIEJ1Zk1vZGlmaWVkCSAgICAtIFdoZW4gYSBidWZmZXIgYmVjb21lcyBtb2RpZmllZCwgb3IgdW5tb2RpZmllZCAoZm9yCgkJICAgICAgcHV0dGluZyBhIFsrXSBpbiB0aGUgd2luZG93IHRpdGxlIG9yIGNoZWNraW5nIG91dCB0aGUKCQkgICAgICBmaWxlIGZyb20gQ1ZTKS4KICAgIEJ1ZkZpcnN0Q2hhbmdlICAtIFdoZW4gbWFraW5nIGEgY2hhbmdlLCB3aGVuICdtb2RpZmllZCcgaXMgc2V0LiAgQ2FuIGJlCgkJICAgICAgdXNlZCB0byBkbyBhIDpwcmVzZXJ2ZSBmb3IgcmVtb3RlIGZpbGVzLgogICAgQnVmQ2hhbmdlCSAgICAtIGFmdGVyIGEgY2hhbmdlIHdhcyBtYWRlLiAgU2V0IHNvbWUgdmFyaWFibGVzIHRvIGluZGljYXRlCgkJICAgICAgdGhlIHBvc2l0aW9uIGFuZCBudW1iZXIgb2YgaW5zZXJ0ZWQvZGVsZXRlZCBsaW5lcywgc28KCQkgICAgICB0aGF0IG1hcmtzIGNhbiBiZSB1cGRhdGVkLiAgSGllckFzc2lzdCBoYXMgcGF0Y2ggdG8gYWRkCgkJICAgICAgQnVmQ2hhbmdlUHJlLCBCdWZDaGFuZ2VQb3N0IGFuZCBSZXZlcnRCdWYuIChTaGFoKQogICAgV2luUmVzaXplZAkgICAgLSBXaGVuIGEgd2luZG93IGhhcyBiZWVuIHJlc2l6ZWQKLSAgIFdyaXRlIHRoZSBmaWxlIG5vdyBhbmQgdGhlbiAoJ2F1dG9zYXZlJyk6CgkJCQkgIConYXV0b3NhdmUnKiAqJ2FzJyogKidub2F1dG9zYXZlJyogKidub2FzJyoKICAgICdhdXRvc2F2ZScgJ2F3JyBudW1iZXIgIChkZWZhdWx0IDApCgkgICAgQXV0b21hdGljYWxseSB3cml0ZSB0aGUgY3VycmVudCBidWZmZXIgdG8gZmlsZSBOIHNlY29uZHMgYWZ0ZXIgdGhlCgkgICAgbGFzdCBjaGFuZ2UgaGFzIGJlZW4gbWFkZSBhbmQgd2hlbiB8J21vZGlmaWVkJ3wgaXMgc3RpbGwgc2V0LgoJICAgIERlZmF1bHQ6IDAgPSBkbyBub3QgYXV0b3NhdmUgdGhlIGJ1ZmZlci4KICAgIEFsdGVybmF0aXZlOiBoYXZlICdhdXRvc2F2ZScgdXNlICd1cGRhdGV0aW1lJyBhbmQgJ3VwZGF0ZWNvdW50JyBidXQgbWFrZQogICAgdGhlbSBzYXZlIHRoZSBmaWxlIGl0c2VsZiBiZXNpZGVzIHRoZSBzd2FwZmlsZS4KCgpJbnNlcnQgbW9kZSBjb21wbGV0aW9uL2V4cGFuc2lvbjoKOCAgIFdoZW4gdGhlcmUgaXMgbm8gd29yZCBiZWZvcmUgdGhlIGN1cnNvciBidXQgc29tZXRoaW5nIGxpa2UgInN5cy4iIGNvbXBsZXRlCiAgICB3aXRoICJzeXMuIi4gIFdvcmtzIHdlbGwgZm9yIEMgYW5kIHNpbWlsYXIgbGFuZ3VhZ2VzLgo5ICAgXlheTCBjb21wbGV0aW9uIGRvZXNuJ3QgcmVwZWF0IGNvcnJlY3RseS4gIEl0IHVzZXMgdGhlIGZpcnN0IG1hdGNoIHdpdGgKICAgIHRoZSBsYXN0IGFkZGVkIGxpbmUsIGluc3RlYWQgb2YgY29udGludWluZyB3aGVyZSB0aGUgbGFzdCBtYXRjaCBlbmRlZC4KICAgIChXZWJiKQo4ICAgQWRkIG9wdGlvbiB0byBzZXQgZGlmZmVyZW50IGJlaGF2aW9yIGZvciBJbnNlcnQgbW9kZSBjb21wbGV0aW9uOgogICAgLSBpZ25vcmUvbWF0Y2ggY2FzZQogICAgLSBkaWZmZXJlbnQgY2hhcmFjdGVycyB0aGFuICdpc2tleXdvcmQnCjggICBBZGQgYSBjb21tYW5kIHRvIHVuZG8gdGhlIGNvbXBsZXRpb24sIGdvIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHRleHQuCjcgICBDb21wbGV0aW9uIG9mIGFuIGFiYnJldmlhdGlvbjogQ2FuIGxlYXZlIGxldHRlcnMgb3V0LCBsaWtlIHdoYXQgSW5zdGFudAogICAgdGV4dCBkb2VzOiB3d3cudGV4dHdhcmUuY29tCjggICBVc2UgdGhlIGNsYXNzIGluZm9ybWF0aW9uIGluIHRoZSB0YWdzIGZpbGUgdG8gZG8gY29udGV4dC1zZW5zaXRpdmUKICAgIGNvbXBsZXRpb24uICBBZnRlciAiZm9vLiIgY29tcGxldGUgYWxsIG1lbWJlciBmdW5jdGlvbnMvdmFyaWFibGVzIG9mCiAgICAiZm9vIi4gIE5lZWQgdG8gc2VhcmNoIGJhY2t3YXJkcyBmb3IgdGhlIGNsYXNzIGRlZmluaXRpb24gb2YgZm9vLgogICAgU2hvdWxkIHdvcmsgZm9yIEMrKyBhbmQgSmF2YS4KICAgIEV2ZW4gbW9yZSBjb250ZXh0IHdvdWxkIGJlIG5pY2U6ICJpbXBvcnQgamF2YS5eTiIgLT4gImlvIiwgImxhbmciLCBldGMuCjcgICBXaGVuIGV4cGFuZGluZyAkSE9NRS9kaXIgd2l0aCBeWF5GIGtlZXAgdGhlICRIT01FICh3aXRoIGFuIG9wdGlvbj8pLgo3ICAgQWRkIENUUkwtWCBjb21tYW5kIGluIEluc2VydCBtb2RlIGxpa2UgQ1RSTC1YIENUUkwtTiwgdGhhdCBjb21wbGV0ZXMgV09SRFMKICAgIGluc3RlYWQgb2Ygd29yZHMuCjggICBBZGQgQ1RSTC1YIENUUkwtUjogY29tcGxldGUgd29yZHMgZnJvbSByZWdpc3RlciBjb250ZW50cy4KOCAgIEFkZCBjb21wbGV0aW9uIG9mIHByZXZpb3VzbHkgaW5zZXJ0ZWQgdGV4dHMgKGxpa2Ugd2hhdCBDVFJMLUEgZG9lcykuCiAgICBSZXF1aXJlcyByZW1lbWJlcmluZyBhIG51bWJlciBvZiBpbnNlcnRpb25zLgo4ICAgQWRkICdmJyBmbGFnIHRvICdjb21wbGV0ZSc6IEV4cGFuZCBmaWxlIG5hbWVzLgogICAgQWxzbyBhcHBseSAnY29tcGxldGUnIHRvIHdob2xlIGxpbmUgY29tcGxldGlvbi4KLSAgIE1ha2UgaXQgcG9zc2libGUgdG8gc2VhcmNoIGluY2x1ZGUgZmlsZXMgaW4gc2V2ZXJhbCBwbGFjZXMuICBVc2UgdGhlCiAgICAncGF0aCcgb3B0aW9uPyAgQ2FuIHRoaXMgYmUgZG9uZSB3aXRoIHRoZSBkaWN0aW9uYXJ5IGNvbXBsZXRpb24gKHVzZQogICAgd2lsZGNhcmRzIGluIHRoZSBmaWxlIG5hbWUpPwotICAgTWFrZSBDVFJMLVggQ1RSTC1LIGRvIGEgYmluYXJ5IHNlYXJjaCBpbiB0aGUgZGljdGlvbmFyeSAoaWYgaXQncyBzb3J0ZWQpLgotICAgU3BlZWQgdXAgQ1RSTC1YIENUUkwtSyBkaWN0aW9uYXJ5IHNlYXJjaGluZyAoZG9uJ3QgdXNlIGEgcmVnZXhwPykuCi0gICBTZXQgYSBtYXJrIGF0IHRoZSBwb3NpdGlvbiB3aGVyZSB0aGUgbWF0Y2ggd2FzIGZvdW5kIChmaWxlIG1hcmssIGNvdWxkCiAgICBiZSBpbiBhbm90aGVyIGZpbGUpLgotICAgQWRkIENUUkwtQSBjb21tYW5kIGluIENUUkwtWCBtb2RlOiBzaG93IGFsbCBtYXRjaGVzLgotICAgTWFrZSBDVFJMLVggQ1RSTC1MIHVzZSB0aGUgJ2NvbXBsZXRlJyBvcHRpb24/Ci0gICBBZGQgY29tbWFuZCBpbiBDVFJMLVggbW9kZSB0byBhZGQgZm9sbG93aW5nIHdvcmRzIHRvIHRoZSBjb21wbGV0ZWQgc3RyaW5nCiAgICAoZS5nLiB0byBjb21wbGV0ZSAiUG9pbnRlci0+ZWxlbWVudCIgd2l0aCBDVFJMLVggQ1RSTC1QIENUUkwtVyBDVFJMLVcpCi0gICBDVFJMLVggQ1RSTC1GOiBVc2UgJ3BhdGgnIHRvIGZpbmQgY29tcGxldGlvbnMuCi0gICBDVFJMLVggQ1RSTC1GOiBPcHRpb24gdG8gdXNlIGZvcndhcmQgc2xhc2hlcyBvbiBNUy1XaW5kb3dzPwotICAgQ1RSTC1YIENUUkwtRjogRG9uJ3QgcmVwbGFjZSAiJFZJTSIgd2l0aCB0aGUgYWN0dWFsIHZhbHVlLiAoS2VsbHkpCjggICBBZGQgb3B0aW9uICdpc2V4cGFuZCcsIGNvbnRhaW5pbmcgY2hhcmFjdGVycyB3aGVuIGRvaW5nIGV4cGFuc2lvbiAoc28gdGhhdAogICAgIi4iIGFuZCAiXCIgY2FuIGJlIGluY2x1ZGVkLCB3aXRob3V0IGNoYW5naW5nICdpc2tleXdvcmQnKS4gKEdvbGRmYXJiKQogICAgQWxzbzogJ2lzdGFnd29yZCc6IGNoYXJhY3RlcnMgdXNlZCBmb3IgQ1RSTC1dLgogICAgV2hlbiAnaXNleHBhbmQnIG9yICdpc3RhZ3dvcmQnIGFyZSBlbXB0eSwgdXNlICdpc2tleXdvcmQnLgotICAgQWxsb3cgbGlzdGluZyBhbGwgbWF0Y2hlcyBpbiBzb21lIHdheSAoYW5kIHBpY2tpbmcgb25lIGZyb20gdGhlIGxpc3QpLgoKCkNvbW1hbmQgbGluZSBlZGl0aW5nOgo3ICAgQWRkIGNvbW1hbmRzIChrZXlzKSB0byBkZWxldGUgZnJvbSB0aGUgY3Vyc29yIHRvIHRoZSBlbmQgb2YgdGhlIGNvbW1hbmQKICAgIGxpbmUuCjggICBDdXN0b20gY29tcGxldGlvbiBvZiB1c2VyIGNvbW1hbmRzIGNhbid0IHVzZSB0aGUgc3RhbmRhcmQgY29tcGxldGlvbgogICAgZnVuY3Rpb25zLiAgQWRkIGEgaG9vayB0byBpbnZva2UgYSB1c2VyIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgdHlwZSBvZgogICAgY29tcGxldGlvbiB0byBiZSBkb25lOiAiZmlsZSIsICJ0YWciLCAiY3VzdG9tIiwgZXRjLgotICAgQWRkIGZsYWdzIHRvICd3aGljaHdyYXAnIGZvciBjb21tYW5kIGxpbmUgZWRpdGluZyAoY3Vyc29yIHJpZ2h0IGF0IGVuZCBvZgogICAgbGluZXMgd3JhcHMgdG8gc3RhcnQgb2YgbGluZSkuCi0gICBNYWtlIGVkaXRpbmcgdGhlIGNvbW1hbmQgbGluZSB3b3JrIGxpa2UgSW5zZXJ0IG1vZGUgaW4gYSBzaW5nbGUtbGluZSB2aWV3CiAgICBvbiBhIGJ1ZmZlciB0aGF0IGNvbnRhaW5zIHRoZSBjb21tYW5kIGxpbmUgaGlzdG9yeS4gIEJ1dCB0aGlzIGhhcyBtYW55CiAgICBkaXNhZHZhbnRhZ2VzLCBvbmx5IGltcGxlbWVudCBpdCB3aGVuIHRoZXNlIGNhbiBiZSBzb2x2ZWQuICBFbHZpcyBoYXMgcnVuCiAgICBpbnRvIHRoZXNlLCBzZWUgcmVtYXJrcyBmcm9tIFN0ZXZlICh+L01haWwvb2xkbWFpbC9raXJrZW5kYWxsL2luLjAwMDEyKS4KICAgIC0gR29pbmcgYmFjayBpbiBoaXN0b3J5IGFuZCBlZGl0aW5nIGEgbGluZSB0aGVyZSB3b3VsZCBjaGFuZ2UgdGhlIGhpc3RvcnkuCiAgICAgIFdvdWxkIHN0aWxsIG5lZWQgdG8ga2VlcCBhIGNvcHkgb2YgdGhlIGhpc3RvcnkgZWxzZXdoZXJlLiAgTGlrZSB0aGUKICAgICAgY21kd2luIGRvZXMgbm93IGFscmVhZHkuCiAgICAtIFVzZSBDVFJMLU8gdG8gZXhlY3V0ZSBvbmUgTm9ybWFsIG1vZGUgY29tbWFuZC4gIEhvdyB0byBzd2l0Y2ggdG8gbm9ybWFsCiAgICAgIG1vZGUgZm9yIG1vcmUgY29tbWFuZHM/ICA8RXNjPiBzaG91bGQgY2FuY2VsIHRoZSBjb21tYW5kIGxpbmUuICBDVFJMLVQ/CiAgICAtIFRvIGFsbG93ICIvIiBhbmQgIj0gbmVlZCB0byByZWN1cnNpdmVseSBjYWxsIGdldGNtZGxpbmUoKSwgb3ZlcndyaXRlIHRoZQogICAgICBjbWRsaW5lLiAgQnV0IHRoZW4gd2UgYXJlIGVkaXRpbmcgYSBjb21tYW5kLWxpbmUgYWdhaW4uICBIb3cgdG8gYXZvaWQKICAgICAgdGhhdCB0aGUgdXNlciBnZXRzIGNvbmZ1c2VkIGJ5IHRoZSBzdGFjayBvZiBjb21tYW5kIGxpbmVzPwogICAgLSBVc2UgZWRpdCgpIGZvciBub3JtYWwgY21kbGluZSBlZGl0aW5nPyAgV291bGQgaGF2ZSB0byBpbnRlZ3JhdGUKICAgICAgZ2V0Y21kbGluZSgpIGludG8gZWRpdCgpLiAgTmVlZCB0byBzb2x2ZSBjb25mbGljdHMgYmV0d2VlbiBJbnNlcnQgbW9kZQogICAgICBhbmQgQ29tbWFuZC1saW5lIG1vZGUgY29tbWFuZHMuICBNYWtlIGl0IHdvcmsgbGlrZSBLb3JuIHNoZWxsIGFuZCB0Y3NoLgogICAgICBQcm9ibGVtczoKCS0gSW5zZXJ0OiBjb21wbGV0aW9uIHdpdGggJ3dpbGRjaGFyJwoJLSBJbnNlcnQ6IHVzZSBjbWRsaW5lIGFiYnJldmlhdGlvbnMKCS0gSW5zZXJ0OiBDVFJMLUQgZGVsZXRlcyBpbmRlbnQgaW5zdGVhZCBvZiBsaXN0aW5nIG1hdGNoZXMKCS0gTm9ybWFsOiBubyBDVFJMLVcgY29tbWFuZHMKCS0gTm9ybWFsOiBubyAiOiIgY29tbWFuZHM/CgktIE5vcm1hbDogYWxsb3cgVmlzdWFsIG1vZGUgb25seSB3aXRoaW4gb25lIGxpbmUuCiAgICAtIHdoZXJlIHRvIHNob3cgaW5zZXJ0L25vcm1hbCBtb2RlIG1lc3NhZ2U/ICBDaGFuZ2UgaGlnaGxpZ2h0aW5nIG9mCiAgICAgIGNoYXJhY3RlciBpbiBmaXJzdCBjb2x1bW4/CiAgICAtIEltcGxlbWVudGF0aW9uIGlkZWFzOgogICAgICAtIFNldCAiY3Vyd2luIiBhbmQgImN1cmJ1ZiIgdG8gdGhlIGNvbW1hbmQgbGluZSB3aW5kb3cgYW5kIGJ1ZmZlci4KICAgICAgLSBjdXJ3aW4tPndfdG9wbGluZSBpcyBhbHdheXMgZXF1YWwgdG8gY3Vyd2luLT53X2N1cnNvci5sbnVtLgogICAgICAtIG5ldmVyIHNldCAnbnVtYmVyJywgbm8gZm9sZGluZywgZXRjLiAgTm8gc3RhdHVzIGxpbmUuCiAgICAgIC0gc3luYyB1bmRvIGFmdGVyIGVudGVyaW5nIGEgY29tbWFuZCBsaW5lPwogICAgICAtIHVzZSBOVl9OT0NMIGZsYWcgZm9yIGNvbW1hbmRzIHRoYXQgYXJlIG5vdCBhbGxvd2VkIGluIENvbW1hbmQtbGluZQoJTW9kZS4KCgpDb21tYW5kIGxpbmUgY29tcGxldGlvbjoKOCAgIENoYW5nZSBleHBhbmRfaW50ZXJhY3RpdmVseSBpbnRvIGEgZmxhZyB0aGF0IGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudC4KOCAgIFdpdGggY29tbWFuZCBsaW5lIGNvbXBsZXRpb24gYWZ0ZXIgJyUnIGFuZCAnIycsIGV4cGFuZCBjdXJyZW50L2FsdGVybmF0ZQogICAgZmlsZSBuYW1lLCBzbyBpdCBjYW4gYmUgZWRpdGVkLiAgQWxzbyB3aXRoIG1vZGlmaWVycywgc3VjaCBhcyAiJTpoIi4KOCAgIFdoZW4gY29tcGxldGluZyBjb21tYW5kIG5hbWVzLCBlaXRoZXIgc29ydCB0aGVtIG9uIHRoZSBsb25nIG5hbWUsIG9yIGxpc3QKICAgIHRoZW0gd2l0aCB0aGUgb3B0aW9uYWwgcGFydCBpbnNpZGUgW10uCjcgICBDb21wbGV0aW9uIG9mICI6bWFwIHggIjogZmlsbCBpbiB0aGUgY3VycmVudCBtYXBwaW5nLCBzbyB0aGF0IGl0IGNhbiBiZQogICAgZWRpdGVkLiAoU3ZlbiBHdWNrZXMpCi0gICBGb3IgJ3dpbGRtZW51JzogU2ltcGxpZnkgIi4uL2JhciIgd2hlbiBwb3NzaWJsZS4KLSAgIFdoZW4gdXNpbmcgPFVwPiBpbiB3aWxkbWVudSBtb2RlIGZvciBhIHN1Ym1lbnUsIHNob3VsZCBnbyBiYWNrIHRvIHRoZQogICAgY3VycmVudCBtZW51LCBub3QgdGhlIGZpcnN0IG9uZS4gIEUuZy4sICI6ZW1lbnUgRmlsZS5TYXZlPFVwPiIuCjggICBGb3IgIjpmaW5kIiBhbmQgIjpzZmluZCIgZXhwYW5kIGZpbGVzIGZvdW5kIGluICdwYXRoJy4KOCAgIFdoZW4gdXNpbmcgYmFja3RpY2sgZXhwYW5zaW9uLCB0aGUgZXh0ZXJuYWwgY29tbWFuZCBtYXkgd3JpdGUgYSBncmVldGluZwogICAgbWVzc2FnZS4gIEFkZCBhbiBvcHRpb24gb3IgY29tbWFuZHMgdG8gcmVtb3ZlIGxpbmVzIHRoYXQgbWF0Y2ggYSByZWdleHA/CjcgICBXaGVuIGxpc3RpbmcgbWF0Y2hlcyBvZiBmaWxlcywgZGlzcGxheSB0aGUgY29tbW9uIHBhdGggc2VwYXJhdGVseSBmcm9tIHRoZQogICAgZmlsZSBuYW1lcywgaWYgdGhpcyBtYWtlcyB0aGUgbGlzdGluZyBzaG9ydGVyLiAoV2ViYikKLSAgIEFkZCBjb21tYW5kIGxpbmUgY29tcGxldGlvbiBmb3IgIjppbGlzdCIgYW5kIGZyaWVuZHMsIHNob3cgbWF0Y2hpbmcKICAgIGlkZW50aWZpZXJzIChXZWJiKS4KOCAgIEFkZCBjb21tYW5kIGxpbmUgY29tcGxldGlvbiBmb3IgIm9sZCB2YWx1ZSIgb2YgYSBjb21tYW5kLiAgIjphcmdzIDxrZXk+IgogICAgd291bGQgcmVzdWx0IGluIHRoZSBjdXJyZW50IGxpc3Qgb2YgYXJndW1lbnRzLCB3aGljaCB5b3UgY2FuIHRoZW4gZWRpdC4KNyAgIEFkZCBjb21tYW5kIGxpbmUgY29tcGxldGlvbiB3aXRoIENUUkwtWCwganVzdCBsaWtlIEluc2VydCBtb2RlIGNvbXBsZXRpb24uCiAgICBVc2VmdWwgZm9yICI6cy93b3JkL3h4LyIuCi0gICBBZGQgY29tbWFuZCB0byBnbyBiYWNrIHRvIHRoZSB0ZXh0IGFzIGl0IHdhcyBiZWZvcmUgY29tcGxldGlvbiBzdGFydGVkLgogICAgQWxzbyB0byBiZSB1c2VkIGZvciA8VXA+IGluIHRoZSBjb21tYW5kIGxpbmUuCi0gICBBZGQgJ3dpbGRsb25nZXN0JyBvcHRpb246IEtleSB0byB1c2UgdG8gZmluZCBsb25nZXN0IGNvbW1vbiBtYXRjaCBmb3IKICAgIGNvbW1hbmQgbGluZSBjb21wbGV0aW9uIChkZWZhdWx0IENUUkwtTCksIGxpa2UgJ3dpbGRjaGFyJy4gKENyZWd1dCkKICAgIEFsc286IHdoZW4gdGhlcmUgYXJlIHNldmVyYWwgbWF0Y2hlcywgc2hvdyB0aGVtIGxpbmUgYSBDVFJMLUQuCgoKQ29tbWFuZCBsaW5lIGhpc3Rvcnk6CjkgICBSZW1lbWJlciB3aGljaCBjb21tYW5kIGxpbmVzIHdlcmUgYWN0dWFsbHkgdHlwZWQgYW5kIHdlcmUgbm90IGxvYWRlZCBmcm9tCiAgICB2aW1pbmZvLiAgV2hlbiB3cml0aW5nIHZpbWluZm8gYXBwZW5kIG9ubHkgdGhlc2UgbGluZXMsIHNvIHRoYXQgbGluZXMgZnJvbQogICAgb3RoZXIgVmltJ3MgYXJlIG5vdCBvdmVyd3JpdHRlbi4KLSAgIEFkZCAiS2V5V2FzVHlwZWQiIGZsYWc6IEl0J3MgcmVzZXQgYmVmb3JlIGVhY2ggY29tbWFuZCBhbmQgc2V0IHdoZW4gYQogICAgY2hhcmFjdGVyIGZyb20gdGhlIGtleWJvYXJkIGlzIGNvbnN1bWVkLiBWYWx1ZSBpcyB1c2VkIHRvIGRlY2lkZSB0byBwdXQgYQogICAgY29tbWFuZCBsaW5lIGluIGhpc3Rvcnkgb3Igbm90LiBQdXQgbGluZSBpbiBoaXN0b3J5IGlmIGl0IGRpZG4ndAogICAgY29tcGxldGVseSByZXN1bHRlZCBmcm9tIG9uZSBtYXBwaW5nLgotICAgV2hlbiB1c2luZyAiOmJyb3dzZSIsIGFsc28gcHV0IHRoZSByZXN1bHRpbmcgZWRpdCBjb21tYW5kIGluIHRoZSBoaXN0b3J5LAogICAgc28gdGhhdCBpdCBjYW4gYmUgcmVwZWF0ZWQuIChEZW1pcmVsKQoKCkluc2VydCBtb2RlOgo5ICAgV2hlbiAnYXV0b2luZGVudCcgaXMgc2V0LCBoaXR0aW5nIDxDUj4gdHdpY2UsIHdoaWxlIHRoZXJlIGlzIHRleHQgYWZ0ZXIKICAgIHRoZSBjdXJzb3IsIGRvZXNuJ3QgZGVsZXRlIHRoZSBhdXRvaW5kZW50IGluIHRoZSByZXN1bHRpbmcgYmxhbmsgbGluZS4KICAgIChSaWNoIFdhbGVzKSBUaGlzIGlzIFZpIGNvbXBhdGlibGUsIGJ1dCBpdCBsb29rcyBsaWtlIGEgYnVnLgo4ICAgV2hlbiB1c2luZyBDVFJMLU8gaW4gSW5zZXJ0IG1vZGUsIHRoZW4gZXhlY3V0aW5nIGFuIGluc2VydCBjb21tYW5kCiAgICAiYSIgb3IgImkiLCBzaG91bGQgd2UgcmV0dXJuIHRvIEluc2VydCBtb2RlIGFmdGVyIDxFc2M+PyAoRWdnaW5rKQogICAgUGVyaGFwcyBpdCBjYW4gYmUgYWxsb3dlZCBhIHNpbmdsZSB0aW1lLCB0byBiZSBhYmxlIHRvIGRvCiAgICAiPEMtTz4xMGF4eXo8RXNjPiIuICBOZXN0aW5nIHRoaXMgZnVydGhlciBpcyBjb25mdXNpbmcuCiAgICAiOm1hcCA8RjI+IDVhYWJjPEVzYz4iIHdvcmtzIG9ubHkgb25jZSBmcm9tIEluc2VydCBtb2RlLgo3ICAgVXNlIENUUkwtRyA8Y291bnQ+IHRvIHJlcGVhdCB3aGF0IGZvbGxvd3MuICBVc2VmdWwgZm9yIGluc2VydGluZyBhCiAgICBjaGFyYWN0ZXIgbXVsdGlwbGUgdGltZXMgb3IgcmVwZWF0aW5nIENUUkwtWS4KNyAgIFVzZSAnbWF0Y2hwYWlycycgZm9yICdzaG93bWF0Y2gnOiBXaGVuIGluc2VydGluZyBhIGNoYXJhY3RlciBjaGVjayBpZiBpdAogICAgYXBwZWFycyBpbiB0aGUgcmhzIG9mICdtYXRjaHBhaXJzJy4KLSAgIEluIEluc2VydCBtb2RlIChhbmQgY29tbWFuZCBsaW5lIGVkaXRpbmc/KTogQWxsb3cgdW5kbyBvZiB0aGUgbGFzdCB0eXBlZAogICAgY2hhcmFjdGVyLglUaGlzIGlzIHVzZWZ1bCBmb3IgQ1RSTC1VLCBDVFJMLVcsIGRlbGV0ZSBhbmQgYmFja3NwYWNlLCBhbmQKICAgIGFsc28gZm9yIGNoYXJhY3RlcnMgdGhhdCB3cmFwIHRvIHRoZSBuZXh0IGxpbmUuCiAgICBBbHNvOiBiZSBhYmxlIHRvIHVuZG8gQ1RSTC1SIChpbnNlcnQgcmVnaXN0ZXIpLgogICAgUG9zc2libHkgdXNlICdiYWNrc3BhY2UnPSJ3aG9sZSIgZm9yIGEgbW9kZSB3aGVyZSBhdCBsZWFzdCBhIDxDUj4gdGhhdAogICAgaW5zZXJ0cyBhdXRvaW5kZW50IGlzIHVuZG9uZSBieSBhIHNpbmdsZSA8QlM+LgotICAgVXNlIENUUkwtRyBpbiBJbnNlcnQgbW9kZSBmb3IgYW4gZXh0cmEgcmFuZ2Ugb2YgY29tbWFuZHMsIGxpa2UgImciIGluCiAgICBOb3JtYWwgbW9kZS4KLSAgIE1ha2UgJ3Bhc3RlJyB3b3JrIHdpdGhvdXQgcmVzZXR0aW5nIG90aGVyIG9wdGlvbnMsIGJ1dCBvdmVycmlkZSB0aGVpcgogICAgdmFsdWUuICBBdm9pZHMgcHJvYmxlbXMgd2hlbiBjaGFuZ2luZyBmaWxlcyBhbmQgbW9kZWxpbmVzIG9yIGF1dG9jb21tYW5kcwogICAgYXJlIHVzZWQuCi0gICBXaGVuIHR5cGluZyBDVFJMLVYgYW5kIGEgZGlnaXQgaGlnaGVyIHRoYW4gMiwgb25seSBleHBlY3QgdHdvIGRpZ2l0cy4KLSAgIEluc2VydCBiaW5hcnkgbnVtYmVycyB3aXRoIENUUkwtViBiLgotICAgTWFrZSBpdCBwb3NzaWJsZSB0byB1bmRvIDxCUz4sIDxDLVc+IGFuZCA8Qy1VPi4gIEJhc2ggdXNlcyBDVFJMLVkuCgoKJ2NpbmRlbnQnLCAnc21hcnRpbmRlbnQnOgo4ICAgV3JvbmcgaW5kZW50IGJlbG93ID8gOiB3aXRoICgpOgoJaWYgKChhID8gKGIpIDogYykgIT0gMCkKCQkgICAgICAgYWxpZ25zIHdpdGggIjoiLgo4ICAgVXNpbmcgIisiIHBhcnQgb2YgJ2Npbm9wdGlvbnMnIHdoZXJlIGl0J3Mgbm90IGV4cGVjdGVkIChBbGV4ZWkgQWxleGFuZHJvdik6CglpZiAoYSkKCXsKCX0gZWxzZQoJCQlhc2RmOwo4ICAgV3JvbmcgaW5kZW50IGZvciAiOiIgYWZ0ZXIgYSBtZXRob2Qgd2l0aCBsaW5lIGJyZWFrIGluIGFyZ3VtZW50czoKCUZvbzo6Rm9vIChpbnQgb25lLAoJCSAgICBpbnQgdHdvKQoJOiBzb21ldGhpbmcoNCkKCXt9CjggICBXcm9uZyBpbmRlbnQgZm9yICI6IiBhZnRlciBhIG1ldGhvZCB3aXRoIG11bHRpcGxlIGxpbmVzOgoJRm9vOjpGb28gKGludCBvbmUsIGludCB0d28pCgkJOiBzb21ldGhpbmcoNCksCglzb21ldGhpbmdlbHNlKDMpCgl7fQo5ICAgVG9vIG11Y2ggaW5kZW50IGZvciAibHVsdSI6IChVd2UgWmVpc2JlcmdlcikKICAgICAgIGludCBtYWluICgpCiAgICAgICB7CgkgaWYgKGxhbGEpCgkgICBkbwoJICAgICArKygqbG9sbyk7CgkgICB3aGlsZSAobGlsaQoJCSAgJiYgbGVsZSk7CgkgICBsdWx1OwogICAgICAgfQo5ICAgRnVuY3Rpb24gZ2V0cyBleHRyYSBpbmRlbnQ6IChKYW1heCkKCXZvaWQgZnVuY3Rpb24oaW50IHBhcmFtKSB7CgkgICAgIGlmIChmYWxzZSkKCQkgcmV0dXJuOwoJfQo5ICAgYnJhY2Ugbm90IGluZGVudGVkIGNvcnJlY3RseToKCWNhc2UgJ2MnOiAgIGlmIChjb25kKQoJCQl7CiAgICBTaG91bGQgYWxpZ24gd2l0aCAiaWYiIGluIGNhc2Ugc3RhdGVtZW50Lgo3ICAgQWxsb3cgYWxpZ25pbmcgYSBjbG9zaW5nICIpIiB3aXRoIHRoZSBsaW5lIGFib3ZlLCBpbnN0ZWFkIG9mIHRoZSBtYXRjaGluZwogICAgIigiOiAoUmllaG0pIGlmIChhc2RmYXNkZiAmJgoJCQlhc2RmCgkJCSkKOCAgIEphdmE6IEluc2lkZSBhbiBhbm9ueW1vdXMgY2xhc3MsIGFmdGVyIGFuICJlbHNlIiBvciAidHJ5IiB0aGUgaW5kZW50IGlzCiAgICB0b28gc21hbGwuIChWaW5jZW50IEJlcmdiYXVlcikKOCAgIEluIEMrKyBpdCdzIHBvc3NpYmxlIHRvIGhhdmUge30gaW5zaWRlICgpOiAoS2lyc2huYSkKCQlmdW5jKAoJCQluZXcgU3RyaW5nW10gewoJCQkgICAgImFzZGYiLAoJCQkgICAgImFzZGYiCgkJCX0KCQkgICAgKTsKNyAgIFNlcGFyYXRlICIoMCIgb3B0aW9uIGludG8gaW5zaWRlL291dHNpZGUgYSBmdW5jdGlvbiAoWmVsbG5lcik6CglmdW5jKAoJICAgaW50IHgpCS8vIGluZGVudCBsaWtlICIoNCIKCXsKCSAgIGlmIChhCgkgICAgICAgJiYgYikJLy8gaW5kZW50IGxpa2UgIigwIgo4ICAgU3RyYW5nZSBwcm9ibGVtIHdpdGggdGhpcyBjb2RlLCAiaGVsbG8iIGlzIGluZGVudGVkIHdyb25nOiAoR2FyeSBIb2xsb3dheSkKICAgIG1haW4oKSB7IGNoYXIJZm9vW10gPSAiLyoiOwoJIC8qIFRoaXMgaXMgYSBjb21tZW50OyB0aGUgaW5kZW50YXRpb24gb2YgQwoJICAqIHNvdXJjZSBiZWxvdyB0aGlzIGNvbW1lbnQgZ2V0cyBtZXNzZWQgdXAgZHVlIHRvIHRoZSBzdHJpbmcgYWJvdmUuCgkgICovCgkgIGhlbGxvCjkgICBVc2luZyAieyIgaW4gYSBjb21tZW50OiAoSGVsbXV0IFN0aWVnbGVyKQogICAgaWYgKGEpCiAgICB7CgkgICAgaWYgKGIpCgkgICAgewoJCSAgICAvLyB7CgkgICAgfQoJICAgIH0gPC0tIHRoaXMgaXMgaW5kZW50ZWQgaW5jb3JyZWN0CjkgICBXcm9uZyBpbmRlbnQgZm9yIGNpbm89KDQsIHJlbW92aW5nIHRoZSAodm9pZCkgZml4ZXMgaXQ6IChaZWxsbmVyKQoJKHZvaWQpIE15RmFuY3lGdW5jdGlvbigKCQkJICAgICAgIGFyZ3VtZW50KTsKLSAgIE1ha2Ugc21hcnRpbmRlbnRpbmcgY29uZmlndXJhYmxlLiAgQWRkICdzaW9wdGlvbnMnLCBlLmcuICcjJyBzZXR0aW5nIHRoZQogICAgaW5kZW50IHRvIDAgc2hvdWxkIGJlIHN3aXRjaGVkIG9uL29mZi4KNyAgIFN1cHBvcnQgQU5TSSBzdHlsZSBmdW5jdGlvbiBoZWFkZXIsIHdpdGggZWFjaCBhcmd1bWVudCBvbiBpdHMgb3duIGxpbmUuCi0gICAiW3AiIGFuZCAiXXAiIHNob3VsZCB1c2UgJ2NpbmRlbnQnIGNvZGUgaWYgaXQncyBvbiAob25seSBmb3IgdGhlIGZpcnN0CiAgICBsaW5lKS4KLSAgIEFkZCBvcHRpb24gdG8gJ2NpbmRlbnQnIHRvIHNldCBpbmRlbnQgZm9yIGNvbW1lbnRzIG91dHNpZGUgb2Yge30/Ci0gICBNYWtlIGEgY29tbWFuZCB0byBsaW5lIHVwIGEgY29tbWVudCBhZnRlciBhIGNvZGUgbGluZSB3aXRoIGEgcHJldmlvdXMKICAgIGNvbW1lbnQgYWZ0ZXIgYSBjb2RlIGxpbmUuCUNhbiAnY2luZGVudCcgZG8gdGhpcyBhdXRvbWF0aWNhbGx5Pwo3ICAgQWRkICdqJyBmbGFnIHRvICdmb3JtYXRvcHRpb25zJzogUmVtb3ZlIGNvbW1lbnQgbGVhZGVyIHdoZW4gam9pbmluZyBsaW5lcy4KLSAgIFdoZW4gJ2NpbmRlbnQnaW5nIGEgJ30nLCBzaG93bWF0Y2ggaXMgZG9uZSBiZWZvcmUgZml4aW5nIHRoZSBpbmRlbnQuICBJdAogICAgbG9va3MgYmV0dGVyIHdoZW4gdGhlIGluZGVudCBpcyBmaXhlZCBiZWZvcmUgdGhlIHNob3dtYXRjaC4gKFdlYmIpCi0gICBBZGQgb3B0aW9uIHRvIG1ha2UgaW5kZW50aW5nIHdvcmsgaW4gY29tbWVudHMgdG9vIChmb3IgY29tbWVudGVkLW91dAogICAgY29kZSksIHVubGVzcyB0aGUgbGluZSBzdGFydHMgd2l0aCAiKiIuCi0gICBEb24ndCB1c2UgJ2NpbmRlbnQnIHdoZW4gZG9pbmcgZm9ybWF0dGluZyB3aXRoICJncSI/Ci0gICBXaGVuIGZvcm1hdHRpbmcgYSBjb21tZW50IGFmdGVyIHNvbWUgdGV4dCwgaW5zZXJ0IHRoZSAnKicgZm9yIHRoZSBuZXcgbGluZQogICAgKGluZGVudCBpcyBjb3JyZWN0IGlmICdjaW5kZW50JyBpcyBzZXQsIGJ1dCAnKicgZG9lc24ndCBnZXQgaW5zZXJ0ZWQpLgo4ICAgV2hlbiAnY29tbWVudHMnIGhhcyBib3RoICJzMTovKixtYjoqLGV4OiovIiBhbmQgInMxOigqLG1iOiosZXg6KikiLCB0aGUKICAgICd4JyBmbGFnIGFsd2F5cyB1c2VzIHRoZSBmaXJzdCBtYXRjaC4gIE5lZWQgdG8gY29udGludWUgbG9va2luZyBmb3IgbW9yZQogICAgbWF0Y2hlcyBvZiAiKiIgYW5kIHJlbWVtYmVyIGFsbCBjaGFyYWN0ZXJzIHRoYXQgY291bGQgZW5kIHRoZSBjb21tZW50LgotICAgRm9yIHNtYXJ0aW5kZW50OiBXaGVuIHR5cGluZyAnZWxzZScgbGluZSBpdCB1cCB3aXRoIG1hdGNoaW5nICdpZicuCi0gICAnc21hcnRpbmRlbnQnOiBhbGxvdyBwYXR0ZXJucyBpbiAnY2lud29yZHMnLCBmb3IgZS5nLiBUZVggZmlsZXMsIHdoZXJlCiAgICBsaW5lcyBzdGFydCB3aXRoICJcaXRlbSIuCi0gICBTdXBwb3J0IHRoaXMgc3R5bGUgb2YgY29tbWVudHMgKHdpdGggYW4gb3B0aW9uKTogKEJyb3duKQoJLyogaGVyZSBpcyBhIGNvbW1lbnQgdGhhdAoJaXMganVzdCBhdXRvaW5kZW50ZWQsIGFuZAoJbm90aGluZyBlbHNlICovCi0gICBBZGQgd29yZHMgdG8gJ2NpbndvcmRzJyB0byByZWR1Y2UgdGhlIGluZGVudCwgZS5nLiwgImVuZCIgb3IgImZpIi4KNyAgIFVzZSBUYWJzIGZvciB0aGUgaW5kZW50IG9mIHN0YXJ0aW5nIGxpbmVzLCBwYWQgd2l0aCBzcGFjZXMgZm9yCiAgICBjb250aW51YXRpb24gbGluZXMuICBBbGxvd3MgY2hhbmdpbmcgJ3RhYnN0b3AnIHdpdGhvdXQgbWVzc2luZyB1cCB0aGUKICAgIGluZGVudHMuCiAgICBBbmQvb3I6IEFkZCBvcHRpb24gdG8gY29weSBpbmRlbnQgYXMtaXMsIHdpdGhvdXQgY2hhbmdpbmcgc3BhY2VzIHRvIHRhYnMuCiAgICBBbHNvIGZvciAnYXV0b2luZGVudCcuICAna2VlcHRhYnMnOiB3aGVuIHNldCBkb24ndCBjaGFuZ2UgdGhlIHRhYnMgYW5kCiAgICBzcGFjZXMgdXNlZCBmb3IgaW5kZW50LCB3aGVuIHRoZSBpbmRlbnQgcmVtYWlucyB0aGUgc2FtZSBvciBpbmNyZWFzZXMuCgoKSmF2YToKOCAgIENhbiBoYXZlIHt9IGNvbnN0cnVjdHMgaW5zaWRlIHBhcmVucy4gIEluY2x1ZGUgY2hhbmdlcyBmcm9tIFN0ZXZlCiAgICBPZGVuZGFobD8KOCAgIFJlY29nbml6ZSAiaW1wb3J0IGphdmEudXRpbC5WZWN0b3IiIGFuZCB1c2UgJENMQVNTUEFUSCB0byBmaW5kIGZpbGVzIGZvcgogICAgIltpIiBjb21tYW5kcyBhbmQgZnJpZW5kcy4KLSAgIEZvciBmaWxlcyBmb3VuZCB3aXRoICdpbmNsdWRlJzogaGFuZGxlICIqIiBpbiBpbmNsdWRlZCBuYW1lLCBmb3IgSmF2YS4KICAgIChKYXNvbikKLSAgIEhvdyB0byBtYWtlIGEgInBhY2thZ2UgamF2YS51dGlsIiBjYXVzZSBhbGwgY2xhc3NlcyBpbiB0aGUgcGFja2FnZSB0byBiZQogICAgc2VhcmNoZWQ/ICBBbHNvIGZvciAiaW1wb3J0IGphdmEudXRpbC4qIi4gKE1hcmsgQnJvcGh5KQoKCidjb21tZW50cyc6CjggICBXaGVuIGZvcm1hdHRpbmcgQyBjb21tZW50cyB0aGF0IGFyZSBhZnRlciBjb2RlLCB0aGUgIioiIGlzbid0IHJlcGVhdGVkCiAgICBsaWtlIGl0J3MgZG9uZSB3aGVuIHRoZXJlIGlzIG5vIGNvZGUuICBBbmQgdGhlcmUgaXMgbm8gYXV0b21hdGljIHdyYXBwaW5nLgogICAgUmVjb2duaXplIGNvbW1lbnRzIHRoYXQgY29tZSBhZnRlciBjb2RlLiAgU2hvdWxkIGluc2VydCB0aGUgY29tbWVudCBsZWFkZXIKICAgIHdoZW4gaXQncyAiIyIgb3IgIi8vIi4KICAgIE90aGVyIHdheSBhcm91bmQ6IHdoZW4gYSBDIGNvbW1hbmQgc3RhcnRzIHdpdGggIiogNCIgdGhlICIqIiBpcyByZXBlYXRlZAogICAgd2hpbGUgaXQgc2hvdWxkIG5vdC4gIFVzZSBzeW50YXggSEwgY29tbWVudCByZWNvZ25pdGlvbj8KNyAgIFdoZW4gdXNpbmcgImNvbW1lbnRzPWZnOi0tIiwgVmltIGluc2VydHMgdGhyZWUgc3BhY2VzIGZvciBhIG5ldyBsaW5lLgogICAgV2hlbiBoaXR0aW5nIGEgVEFCLCB0aGVzZSBzcGFjZXMgY291bGQgYmUgcmVtb3ZlZC4KNyAgIFRoZSAnbidlc3RpbmcgZmxhZyBkb2Vzbid0IGRvIHRoZSBpbmRlbnRpbmcgb2YgdGhlIGxhc3QgKHJpZ2h0bW9zdCkgaXRlbS4KNiAgIE1ha2Ugc3RyaW5ncyBpbiAnY29tbWVudHMnIG9wdGlvbiBhIFJFLCB0byBiZSBhYmxlIHRvIG1hdGNoIG1vcmUKICAgIGNvbXBsaWNhdGVkIHRoaW5ncy4gKFBoaWxsaXBwcykgIFVzZSBhIHNwZWNpYWwgZmxhZyB0byBpbmRpY2F0ZSB0aGF0IGEKICAgIHJlZ2V4cCBpcyB1c2VkLgo4ICAgTWFrZSB0aGUgJ2NvbW1lbnRzJyBvcHRpb24gd2l0aCAiLyogKiAqLyIgbGluZXMgb25seSByZXBlYXQgdGhlICIqIiBsaW5lCiAgICB3aGVuIHRoZXJlIGlzIGEgIi8qIiBiZWZvcmUgaXQ/ICBPciBpbmNsdWRlIHRoaXMgaW4gJ2NpbmRlbnQnPwoKClZpcnR1YWwgZWRpdDoKOCAgIE1ha2UgdGhlIGhvcml6b250YWwgc2Nyb2xsYmFyIHdvcmsgdG8gbW92ZSB0aGUgdGV4dCBmdXJ0aGVyIGxlZnQuCjcgICBBZGQgYSBtb2RlIHdoZXJlIHRoZSBjdXJzb3IgaXMgb25seSBhbGxvd2VkIHRvIGdvIG9uZSBjaGFyYWN0ZXIgYWZ0ZXIgdGhlCiAgICBlbmQgb2YgdGhlIGxpbmU/CjcgICBBbGxvdyBzcGVjaWZ5aW5nIGl0IHNlcGFyYXRlbHkgZm9yIFRhYnMgYW5kIGJleW9uZCBlbmQtb2YtbGluZT8KCgpUZXh0IG9iamVjdHM6CjggICBBZGQgdGVzdCBzY3JpcHQgZm9yIHRleHQgb2JqZWN0IGNvbW1hbmRzICJhdyIsICJpVyIsIGV0Yy4KOCAgIEFkZCB0ZXh0IG9iamVjdCBmb3IgcGFydCBvZiBhIENhbWVsSHVtZWRXb3JkIGFuZCB1bmRlcl9zY29yZWRfd29yZC4KICAgIChTY290dCBHcmFoYW0pICAiYWMiIGFuZCAiYXUiPwo4ICAgQWRkIGEgdGV4dCBvYmplY3QgZm9yIGFueSBraW5kIG9mIHF1b3RpbmcsIGFsc28gd2l0aCBtdWx0aS1ieXRlCiAgICBjaGFyYWN0ZXJzLiAgT3B0aW9uIHRvIHNwZWNpZnkgd2hhdCBxdW90ZXMgYXJlIHJlY29nbml6ZWQgKGRlZmF1bHQ6IGFsbCkKICAgIHVzZSAiYXEiIGFuZCAiaXEiLiAgVXNlICdxdW90ZXBhaXJzJyB0byBkZWZpbmUgcGFpcnMgb2YgcXVvdGVzLCBsaWtlCiAgICAnbWF0Y2hwYWlycyc/CjggICBBZGQgdGV4dCBvYmplY3QgZm9yIGFueSBraW5kIG9mIHBhcmVucywgYWxzbyBtdWx0aS1ieXRlIG9uZXMuCjcgICBBZGQgdGV4dCBvYmplY3QgZm9yIGN1cnJlbnQgc2VhcmNoIHBhdHRlcm46ICJhLyIgYW5kICJpLyIuICBNYWtlcyBpdAogICAgcG9zc2libGUgdG8gdHVybiB0ZXh0IGhpZ2hsaWdodGVkIGZvciAnaGxzZWFyY2gnIGludG8gYSBWaXN1YWwgYXJlYS4KOCAgIEFkZCAiZ3AiIGFuZCAiZ1AiIGNvbW1hbmRzOiBpbnNlcnQgdGV4dCBhbmQgbWFrZSBzdXJlIHRoZXJlIGlzIGEgc2luZ2xlCiAgICBzcGFjZSBiZWZvcmUgaXQsIHVubGVzcyBhdCB0aGUgc3RhcnQgb2YgdGhlIGxpbmUsIGFuZCBhZnRlciBpdCwgdW5sZXNzIGF0CiAgICB0aGUgZW5kIG9mIHRoZSBsaW5lIG9yIGJlZm9yZSBhICIuIi4KNyAgIEFkZCBvYmplY3RzIHdpdGggYmFja3dhcmRzIGV4dGVuc2lvbj8gIFVzZSAiSSIgYW5kICJBIi4gIFRodXMgIjJkQXMiCiAgICBkZWxldGVzIHRoZSBjdXJyZW50IGFuZCBwcmV2aW91cyBzZW50ZW5jZS4gKEplbnMgUGF1bHVzKQo3ICAgQWRkICJneyIgYW5kICJnfSIgdG8gbW92ZSB0byB0aGUgZmlyc3QvbGFzdCBjaGFyYWN0ZXIgb2YgYSBwYXJhZ3JhcGgKICAgIChpbnN0ZWFkIG9mIHRoZSBsaW5lIGp1c3QgYmVmb3JlL2FmdGVyIGEgcGFyYWdyYXBoIGFzIHdpdGggInsiIGFuZCAifSIpLgo2ICAgSWdub3JlIGNvbW1lbnQgbGVhZGVycyBmb3Igb2JqZWN0cy4gIE1ha2UgImRhcyIgd29yayBpbiByZXBseS1lbWFpbC4KNSAgIE1ha2UgaXQgcG9zc2libGUgdG8gdXNlIHN5bnRheCBncm91cCBtYXRjaGVzIGFzIGEgdGV4dCBvYmplY3QuICBGb3IKICAgIGV4YW1wbGUsIGRlZmluZSBhICJjY0l0ZW0iIGdyb3VwLCB0aGVuIGRvICJkYTxjY0l0ZW0+IiB0byBkZWxldGUgb25lLgogICAgT3IsIG1heWJlIGp1c3QgZGVmaW5lICJkYWkiLCBkZWxldGUtYW4taXRlbSwgdG8gZGVsZXRlIHRoZSBzeW50YXggaXRlbSB0aGUKICAgIGN1cnNvciBpcyBvbi4KCgpTZWxlY3QgbW9kZToKOCAgIEluIGJsb2Nrd2lzZSBtb2RlLCB0eXBlZCBjaGFyYWN0ZXJzIGFyZSBpbnNlcnRlZCBpbiBmcm9udCBvZiB0aGUgYmxvY2ssCiAgICBiYWNrc3BhY2UgZGVsZXRlcyBhIGNvbHVtbiBiZWZvcmUgdGhlIGJsb2NrLiAoU3RldmUgSGFsbCkKNyAgIEFsdC1sZWZ0bW91c2Ugc3RhcnRzIGJsb2NrIG1vZGUgc2VsZWN0aW9uIGluIE1TIFdvcmQuCiAgICBTZWUgaHR0cDovL3d3dy52aW0ub3JnL3RpcHMvdGlwLnBocD90aXBfaWQ9NzQzCjcgICBBZGQgQ21kbGluZS1zZWxlY3QgbW9kZS4gIExpa2UgU2VsZWN0IG1vZGUsIGJ1dCB1c2VkIG9uIHRoZSBjb21tYW5kIGxpbmUuCiAgICAtIENoYW5nZSBndWlfc2VuZF9tb3VzZV9ldmVudCgpIHRvIHBhc3Mgb24gbW91c2UgZXZlbnRzIHdoZW4gJ21vdXNlJwogICAgICBjb250YWlucyAnQycgb3IgJ0EnLgogICAgLSBDYXRjaCBtb3VzZSBldmVudHMgaW4gZXhfZ2V0bG4uYy4gIEFsc28gc2hpZnQtY3Vyc29yLCBldGMuLCBsaWtlIGluCiAgICAgIG5vcm1hbF9jbWQoKS4KICAgIC0gcmVtZW1iZXIgc3RhcnQgYW5kIGVuZCBvZiBzZWxlY3Rpb24gaW4gY21kbGluZV9pbmZvLgogICAgLSBUeXBpbmcgdGV4dCByZXBsYWNlcyB0aGUgc2VsZWN0aW9uLgoKClZpc3VhbCBtb2RlOgotICAgV2hlbiBkcmFnZ2luZyB0aGUgVmlzdWFsIHNlbGVjdGlvbiB3aXRoIHRoZSBtb3VzZSBhbmQgJ3Njcm9sbG9mZicgaXMgemVybywKICAgIGJlaGF2ZSBsaWtlICdzY3JvbGxvZmYnIGlzIG9uZSwgc28gdGhhdCB0aGUgdGV4dCBzY3JvbGxzIHdoZW4gdGhlIHBvaW50ZXIKICAgIGlzIGluIHRoZSB0b3AgbGluZS4KOCAgIFdoZW4gdXNpbmcgIkkiIG9yICJBIiBpbiBWaXN1YWwgYmxvY2sgbW9kZSwgc2hvcnQgbGluZXMgZG8gbm90IGdldCB0aGUgbmV3CiAgICB0ZXh0LiAgTWFrZSBpdCBwb3NzaWJsZSB0byBhZGQgdGhlIHRleHQgdG8gc2hvcnQgbGluZXMgdG9vLCB3aXRoIHBhZGRpbmcKICAgIHdoZXJlIG5lZWRlZC4KNyAgIFdpdGggYSBWaXN1YWwgYmxvY2sgc2VsZWN0ZWQsICIyeCIgZGVsZXRlcyBhIGJsb2NrIG9mIGRvdWJsZSB0aGUgd2lkdGgsCiAgICAiM3kiIHlhbmtzIGEgYmxvY2sgb2YgdHJpcGxlIHdpZHRoLCBldGMuCjcgICBXaGVuIHNlbGVjdGluZyBsaW5ld2lzZSwgdXNpbmcgIml0ZXh0IiBzaG91bGQgaW5zZXJ0ICJ0ZXh0IiBhdCB0aGUgc3RhcnQKICAgIG9mIGVhY2ggc2VsZWN0ZWQgbGluZS4KOCAgIFdoYXQgaXMgIlIiIHN1cHBvc2VkIHRvIGRvIGluIFZpc3VhbCBtb2RlPwo4ICAgTWFrZSBWaXN1YWwgbW9kZSBsb2NhbCB0byB0aGUgYnVmZmVyLiAgQWxsb3cgY2hhbmdpbmcgdG8gYW5vdGhlciBidWZmZXIuCiAgICBXaGVuIHN0YXJ0aW5nIGEgbmV3IFZpc3VhbCBzZWxlY3Rpb24sIHJlbW92ZSB0aGUgVmlzdWFsIHNlbGVjdGlvbiBpbiBhbnkKICAgIG90aGVyIGJ1ZmZlci4gKFJvbiBBYXJvbikKOCAgIFN1cHBvcnQgZHJhZ2dpbmcgdGhlIFZpc3VhbCBhcmVhIHRvIGRyb3AgaXQgc29tZXdoZXJlIGVsc2UuIChSb24gQWFyb24sCiAgICBCZW4gR29kZnJleSkKNyAgIFN1cHBvcnQgZHJhZ2dpbmcgdGhlIFZpc3VhbCBhcmVhIHRvIGRyb3AgaXQgaW4gYW5vdGhlciBwcm9ncmFtLCBhbmQKICAgIHJlY2VpdmUgZHJvcHBlZCB0ZXh0IGZyb20gYW5vdGhlciBwcm9ncmFtLiAoQmVuIEdvZGZyZXkpCjcgICBXaXRoIGJsb2Nrd2lzZSBWaXN1YWwgbW9kZSBhbmQgImMiLCAiQyIsICJJIiwgIkEiLCBldGMuLCBhbGxvdyB0aGUgdXNlIG9mCiAgICBhIDxDUj4uICBUaGUgZW50ZXJlZCBsaW5lcyBhcmUgcmVwZWF0ZWQgb3ZlciB0aGUgVmlzdWFsIGFyZWEuCjcgICBDVFJMLVYgOnMgc2hvdWxkIHN1YnN0aXR1dGUgb25seSBpbiB0aGUgYmxvY2ssIG5vdCB0byB3aG9sZSBsaW5lcy4gKERhdmlkCiAgICBZb3VuZyBpcyB3b3JraW5nIG9uIHRoaXMpCjcgICBGaWx0ZXJpbmcgYSBibG9jayBzaG91bGQgb25seSBhcHBseSB0byB0aGUgYmxvY2ssIG5vdCB0byB0aGUgd2hvbGUgbGluZXMuCiAgICBXaGVuIHRoZSBudW1iZXIgb2YgbGluZXMgaXMgaW5jcmVhc2VkLCBhZGQgbGluZXMuIFdoZW4gZGVjcmVhc2VkLCBwYWQgd2l0aAogICAgc3BhY2VzIG9yIGRlbGV0ZT8gVXNlICI6YDwsYD4iIG9uIHRoZSBjb21tYW5kIGxpbmUuCjggICBBZnRlciBmaWx0ZXJpbmcgdGhlIFZpc3VhbCBhcmVhLCBtYWtlICJndiIgc2VsZWN0IHRoZSBmaWx0ZXJlZCB0ZXh0PwogICAgQ3VycmVudGx5ICJndiIgb25seSBzZWxlY3RzIGEgc2luZ2xlIGxpbmUsIG5vdCB1c2VmdWwuCjcgICBEb24ndCBtb3ZlIHRoZSBjdXJzb3Igd2hlbiBzY3JvbGxpbmc/ICBOZWVkZWQgd2hlbiB0aGUgc2VsZWN0aW9uIHNob3VsZAogICAgc3RheSB0aGUgc2FtZS4gIFNjcm9sbCB0byB0aGUgY3Vyc29yIGF0IGFueSBtb3ZlbWVudCBjb21tYW5kLiAgV2l0aCBhbgogICAgb3B0aW9uIQo3ICAgSW4gVmlzdWFsIGJsb2NrIG1vZGUsIG5lZWQgdG8gYmUgYWJsZSB0byBkZWZpbmUgYSBjb3JuZXIgb24gYSBwb3NpdGlvbgogICAgdGhhdCBkb2Vzbid0IGhhdmUgdGV4dD8gIEFsc286IHdoZW4gdXNpbmcgdGhlIG1vdXNlLCBiZSBhYmxlIHRvIHNlbGVjdAogICAgcGFydCBvZiBhIFRBQi4gIEV2ZW4gbW9yZTogQWRkIGEgbW9kZSB3aGVyZSB0aGUgY3Vyc29yIGNhbiBiZSBvbiBhIHNjcmVlbgogICAgcG9zaXRpb24gd2hlcmUgdGhlcmUgaXMgbm8gdGV4dC4gIFdoZW4gdHlwaW5nLCBhZGQgc3BhY2VzIHRvIGZpbGwgdGhlIGdhcC4KICAgIE90aGVyIHNvbHV0aW9uOiBBbHdheXMgdXNlIGN1cnN3YW50LCBzbyB0aGF0IHlvdSBjYW4gbW92ZSB0aGUgY3Vyc29yIHRvCiAgICB0aGUgcmlnaHQgY29sdW1uLCBhbmQgdGhlbiB1c2UgdXAvZG93biBtb3ZlbWVudHMgdG8gc2VsZWN0IHRoZSBsaW5lLAogICAgd2l0aG91dCBjaGFuZ2luZyB0aGUgY29sdW1uLgo2ICAgIjpsZWZ0IiBhbmQgIjpyaWdodCIgc2hvdWxkIHdvcmsgaW4gVmlzdWFsIGJsb2NrIG1vZGUuCjcgICBDVFJMLUkgYW5kIENUUkwtTyBzaG91bGQgd29yayBpbiBWaXN1YWwgbW9kZSwgYnV0IG9ubHkganVtcCB0byBtYXJrcyBpbiB0aGUKICAgIGN1cnJlbnQgYnVmZmVyLgo3ICAgQ1RSTC1BIGFuZCBDVFJMLVggc2hvdWxkIGluY3JlYXNlL2RlY3JlYXNlIGFsbCBudW1iZXJzIGluIHRoZSBWaXN1YWwgYXJlYS4KNiAgIEluIG5vbi1CbG9jayBtb2RlLCAiSSIgc2hvdWxkIGluc2VydCB0aGUgc2FtZSB0ZXh0IGluIGZyb250IG9mIGVhY2ggbGluZSwKICAgIGJlZm9yZSB0aGUgZmlyc3Qgbm9uLWJsYW5rLCAiZ0kiIGluIGNvbHVtbiAxLgo2ICAgSW4gbm9uLUJsb2NrIG1vZGUsICJBIiBzaG91bGQgYXBwZW5kIHRoZSBzYW1lIHRleHQgYWZ0ZXIgZWFjaCBsaW5lLgo2ICAgIjonPCwnPnNvdXJjZSIgc2hvdWxkIHJlYWQgdGhlIHNlbGVjdGVkIGxpbmVzIGFuZCAiOnNvdXJjZSIgdGhlbS4KNiAgIFdoZW4gaW4gYmxvY2t3aXNlIHZpc3VhbCBzZWxlY3Rpb24gKENUUkwtViksIGFsbG93IGN1cnNvciB0byBiZSBwbGFjZWQKICAgIHJpZ2h0IG9mIHRoZSBsaW5lLiAgQ291bGQgYWxzbyBhbGxvdyBjdXJzb3IgdG8gYmUgcGxhY2VkIGFueXdoZXJlIG9uIGEgVEFCCiAgICBvciBvdGhlciBzcGVjaWFsIGNoYXJhY3Rlci4KNiAgIEFkZCBjb21tYW5kcyB0byBtb3ZlIHNlbGVjdGVkIHRleHQsIHdpdGhvdXQgZGVzZWxlY3RpbmcuCgoKTW9yZSBhZHZhbmNlZCByZXBlYXRpbmcgY29tbWFuZHM6Ci0gICBBZGQgIi4iIGNvbW1hbmQgZm9yIHZpc3VhbCBtb2RlOiByZWRvIGxhc3QgdmlzdWFsIGNvbW1hbmQgKGUuZy4gIjpmbXQiKS4KNyAgIFJlcGVhdGluZyAiZDp7Y21kfSIgd2l0aCAiLiIgZG9lc24ndCB3b3JrLiAoQmVuamkgRmlzaGVyKSAgU29tZWhvdyByZW1lbWJlcgogICAgdGhlIGNvbW1hbmQgbGluZSBzbyB0aGF0IGl0IGNhbiBiZSByZXBlYXRlZD8KLSAgIEFkZCAiLiIgY29tbWFuZCBhZnRlciBvcGVyYXRvcjogcmVwZWF0IGxhc3QgY29tbWFuZCBvZiBzYW1lIG9wZXJhdG9yLiAgRS5nLgogICAgImMuIiB3aWxsIHJlcGVhdCBsYXN0IGNoYW5nZSwgYWxzbyB3aGVuICJ4IiB1c2VkIHNpbmNlIHRoZW4gKFdlYmIpLgogICAgInkuIiB3aWxsIHJlcGVhdCBsYXN0IHlhbmsuCiAgICAiYzIuIiB3aWxsIHJlcGVhdCB0aGUgbGFzdCBidXQgb25lIGNoYW5nZT8KICAgIEFsc286IGtlZXAgaGlzdG9yeSBvZiBOb3JtYWwgbW9kZSBjb21tYW5kcywgYWRkIGNvbW1hbmQgdG8gbGlzdCB0aGUgaGlzdG9yeQogICAgYW5kL29yIHBpY2sgYW4gb2xkZXIgY29tbWFuZC4KLSAgIEhpc3Rvcnkgc3RhY2sgZm9yIC4gY29tbWFuZD8gIFVzZSAiZy4iIGNvbW1hbmQuCgoKTWFwcGluZ3MgYW5kIEFiYnJldmlhdGlvbnM6CjggICBXaGVuICIwIiBpcyBtYXBwZWQgKGl0IGlzIGEgbW92ZW1lbnQgY29tbWFuZCkgdGhpcyBtYXBwaW5nIHNob3VsZCBub3QgYmUKICAgIHVzZWQgYWZ0ZXIgdHlwaW5nIGFub3RoZXIgbnVtYmVyLCBlLmcuICIyMGwiLiAoQ2hhcmxlcyBDYW1wYmVsbCkKICAgIElzIHRoaXMgcG9zc2libGUgd2l0aG91dCBkaXNhYmxpbmcgdGhlIG1hcHBpbmcgb2YgdGhlIGZvbGxvd2luZyBjb21tYW5kPwo4ICAgU2hvdWxkIG1hcHBpbmcgPEMtQT4gYW5kIDxDLVMtQT4gYm90aCB3b3JrPwo3ICAgIjphYmJyIGIgYnl0ZSIsIGFwcGVuZCAiYiAiIHRvIGFuIGV4aXN0aW5nIHdvcmQgc3RpbGwgZXhwYW5kcyB0byAiYnl0ZSIuCiAgICBUaGlzIGlzIFZpIGNvbXBhdGlibGUsIGJ1dCBjYW4gd2UgYXZvaWQgaXQgYW55d2F5Pwo4ICAgVG8gbWFrZSBhIG1hcHBpbmcgd29yayB3aXRoIGEgcHJlcGVuZGVkICJ4IHRvIHNlbGVjdCBhIHJlZ2lzdGVyLCBzdG9yZSB0aGUKICAgIGxhc3QgX3R5cGVkXyByZWdpc3RlciBuYW1lIGFuZCBhY2Nlc3MgaXQgd2l0aCAiJi4KOCAgIEFkZCAiOmFtYXAiLCBsaWtlICI6YW1lbnUiLgo4ICAgQWRkICI6Y2FiISIsIGFiYnJldmlhdGlvbnMgdGhhdCBvbmx5IGFwcGx5IHRvIENvbW1hbmQtbGluZSBtb2RlIGFuZCBub3QgdG8KICAgIGVudGVyaW5nIHNlYXJjaCBzdHJpbmdzLgo4ICAgQWRkIGEgZmxhZyB0byAiOmFiYnJldiIgdG8gZWF0IHRoZSBjaGFyYWN0ZXIgdGhhdCB0cmlnZ2VycyB0aGUKICAgIGFiYnJldmlhdGlvbi4gIFRodXMgImFiYiBhYiB4eHgiIGFuZCB0eXBpbmcgImFiPFNwYWNlPiIgaW5zZXJ0cyAieHh4IiBhbmQKICAgIG5vdCB0aGUgPFNwYWNlPi4KOCAgIEFsbG93IG1hcHBpbmcgb2YgQ1RSTC1AIChhbnl3aGVyZSBpbiB0aGUgTEhTKS4KOCAgIEdpdmUgYSB3YXJuaW5nIHdoZW4gdXNpbmcgQ1RSTC1DIGluIHRoZSBsaHMgb2YgYSBtYXBwaW5nLiAgSXQgd2lsbCBuZXZlcgogICAgKD8pIHdvcmsuCjggICBBZGQgYSB3YXkgdG8gc2F2ZSBhIGN1cnJlbnQgbWFwcGluZyBhbmQgcmVzdG9yZSBpdCBsYXRlci4gIFVzZSBhIGZ1bmN0aW9uCiAgICB0aGF0IHJldHVybnMgdGhlIG1hcHBpbmcgY29tbWFuZCB0byByZXN0b3JlIGl0OiBtYXBjbWQoKT8gIG1hcGNoZWNrKCkgaXMKICAgIG5vdCBmb29sIHByb29mLiAgSG93IHRvIGhhbmRsZSBhbWJpZ3VvdXMgbWFwcGluZ3M/CjcgICBBZGQgPDB4OGY+IChoZXgpLCA8MDMzPiAob2N0YWwpIGFuZCA8MTIzPiAoZGVjaW1hbCkgdG8gPD4gbm90YXRpb24/CjcgICBBbGxvdyBtYXBwaW5nICJRIiBhbmQgIlF9IiBhdCB0aGUgc2FtZSB0aW1lLiAgTmVlZCB0byBwdXQgYSBmbGFnIHdpdGggIlEiLAogICAgdGhhdCBpdCBuZWVkcyBhbiBleHRyYSBjaGFyYWN0ZXIgYmVmb3JlIGl0IGNhbiBtYXRjaC4gIFNlZSBWaWxlICdtYXBsb25nZXInCiAgICBvcHRpb24uCjcgICBXaGVuIHNvbWVvbmUgdHJpZXMgdG8gdW5tYXAgd2l0aCBhIHRyYWlsaW5nIHNwYWNlLCBhbmQgaXQgZmFpbHMsIHRyeQogICAgdW5tYXBwaW5nIHdpdGhvdXQgdGhlIHRyYWlsaW5nIHNwYWNlLiAgSGVscHMgZm9yICI6dW5tYXAgeHggfCB1bm1hcCB5eSIuCjcgICBNYWtlIGl0IHBvc3NpYmxlIHRvIG1hcCAnd2lsZGNoYXInLCBidXQgb25seSB3aGVuIGl0J3MgYSBzcGVjaWFsIGNoYXJhY3RlcgogICAgKGxpa2UgQ1RSTC1FKS4gIEN1cnJlbnRseSBpdCdzIG9ubHkgcmVjb2duaXplZCB3aGVuIHR5cGVkLiAgVXNlZnVsIGZvcgogICAgbWFwcGluZyBhIGtleSB0byBkbyBzb21ldGhpbmcgYW5kIHRoZW4gY29tcGxldGlvbi4KNyAgIEFkZCBhIG1hcHBpbmcgdGhhdCB3b3JrcyBhbHdheXMsIGZvciByZW1hcHBpbmcgdGhlIGtleWJvYXJkLgo2ICAgQ29udGV4dC1zZW5zaXRpdmUgYWJicmV2aWF0aW9uczogU3BlY2lmeSBzeW50YXggZ3JvdXAocykgaW4gd2hpY2ggdGhlCiAgICBhYmJyZXZpYXRpb25zIGFyZSB0byBiZSB1c2VkLgotICAgQWRkIG1hcHBpbmdzIHRoYXQgdGFrZSBhcmd1bWVudHMuICBDb3VsZCB3b3JrIGxpa2UgdGhlICI6cyIgY29tbWFuZC4gIEZvcgogICAgZXhhbXBsZSwgZm9yIGEgbW91c2UgZXNjYXBlIHNlcXVlbmNlOgoJOm1hcGV4cCAgPEVzYz57XChbMC05XSpcKSxcKFswLTldKlwpOwlIXDFqXDJsCi0gICBNYWtlIGl0IHBvc3NpYmxlIHRvIGluY2x1ZGUgYSA8TnVsPiBpbiB0aGUgbGhzIGFuZCByaHMgb2YgYSBtYXBwaW5nLgotICAgQWRkIGNvbW1hbmQgdG8gcmVwZWF0IGEgd2hvbGUgbWFwcGluZyAoIi4iIG9ubHkgcmVwZWF0cyB0aGUgbGFzdCBjaGFuZ2UgaW4KICAgIGEgbWFwcGluZykuICBBbHNvOiBSZXBlYXQgYSB3aG9sZSBpbnNlcnQgY29tbWFuZCwgaW5jbHVkaW5nIGFueSBtYXBwaW5ncwogICAgdGhhdCBpdCBpbmNsdWRlZC4gIFNvcnQtb2YgYXV0b21hdGljIHJlY29yZGluZz8KLSAgIEFkZCBhbiBvcHRpb24gdG8gIjptYXAiIHRoYXQgbWFrZXMgaXQgZGlzcGxheSB0aGUgc3BlY2lhbCBrZXlzIGluCiAgICA8PiBub3RhdGlvbiAoZS5nLiA8Q1I+IGluc3RlYWQgb2YgXk0pLiAgT3IganVzdCBhbHdheXMgZG8gdGhpcz8KLSAgIEluY2x1ZGUgYW4gb3B0aW9uIChvciBmbGFnIHRvICdjcG9wdGlvbnMnKSB0aGF0IG1ha2VzIGVycm9ycyBpbiBtYXBwaW5ncwogICAgbm90IGZsdXNoIHRoZSByZXN0IG9mIHRoZSBtYXBwaW5nIChsaWtlIG52aSBkb2VzKS4KLSAgIFVzZSBjb250ZXh0IHNlbnNpdGl2ZW5lc3Mgb2YgY29tcGxldGlvbiB0byBzd2l0Y2ggYWJicmV2aWF0aW9ucyBhbmQKICAgIG1hcHBpbmdzIG9mZiBmb3IgOnVuYWIgYW5kIDp1bm1hcC4KNiAgIFdoZW4gdXNpbmcgbWFwcGluZ3MgaW4gSW5zZXJ0IG1vZGUsIGluc2VydCBjaGFyYWN0ZXJzIGZvciBpbmNvbXBsZXRlCiAgICBtYXBwaW5ncyBmaXJzdCwgdGhlbiByZW1vdmUgdGhlbSBhZ2FpbiB3aGVuIGEgbWFwcGluZyBtYXRjaGVzLiAgQXZvaWRzCiAgICB0aGF0IGNoYXJhY3RlcnMgdGhhdCBhcmUgdGhlIHN0YXJ0IG9mIHNvbWUgbWFwcGluZyBhcmUgbm90IHNob3duIHVudGlsIHlvdQogICAgaGl0IGFub3RoZXIgY2hhcmFjdGVyLgotICAgQWRkIG9wdGlvbmFsIDxOdW1iZXI+IGFyZ3VtZW50IGZvciBtYXBwaW5nczoKICAgIDptYXAgPE51bWJlcj5xCSAgICAgXldeVzxOdW1iZXI+RwogICAgOm1hcCA8TnVtYmVyPnE8TnVtYmVyPnQgIF5XXlc8TnVtYmVyMS0xPkc8TnVtYmVyMj5sCiAgICA6bWFwIHE8Q2hhcj4JICAgIDpzLzxDaGFyPi9cdVwwL2cKICAgIE9yIGltcGxpY2l0OgogICAgOm1hcCBxCQkJPFJlZ2lzdGVyPmQ8TnVtYmVyPiQKLSAgIEFkZCBtYXBwaW5ncyBmb3IgcmVwbGFjZSBtb2RlOiAiOnJtYXAiLiAgSG93IGRvIHdlIHRoZW4gZW50ZXIgbWFwcGluZ3MgZm9yCiAgICBub24tcmVwbGFjZSBJbnNlcnQgbW9kZT8KLSAgIEFkZCBzZXBhcmF0ZSBtYXBwaW5ncyBmb3IgVmlzdWFsLWNoYXJhY3Rlci9ibG9jay9saW5lIG1vZGU/CjYgICBBbGlhcyBmb3IgTm9ybWFsIG1vZGUgY29tbWFuZHMsIHdvcmtzIGxpa2UgOnN1YnN0aXR1dGU/ICBXb3VsZCBhbGxvdwogICAgbWFwcGluZ3Mgd2l0aCBhcmd1bWVudHMuCi0gICBBZGQgJ21hcHN0b3AnIGNvbW1hbmQsIHRvIHN0b3AgcmVjdXJzaXZlIG1hcHBpbmdzLgotICAgTGlzdCBtYXBwaW5ncyB0aGF0IGhhdmUgYSByYXcgZXNjYXBlIHNlcXVlbmNlIGJvdGggd2l0aCB0aGUgbmFtZSBvZiB0aGUga2V5CiAgICBmb3IgdGhhdCBlc2NhcGUgc2VxdWVuY2UgKGlmIHRoZXJlIGlzIG9uZSkgYW5kIHRoZSBzZXF1ZW5jZSBpdHNlbGYuCi0gICBMaXN0IG1hcHBpbmdzOiBPbmNlIHdpdGggc3BlY2lhbCBrZXlzIGxpc3RlZCBhcyA8Piwgb25jZSB3aXRoIG1ldGEgY2hhcnMgYXMKICAgIDxNLWE+LCBvbmNlIHdpdGggdGhlIGJ5dGUgdmFsdWVzIChvY3RhbD8pLiAgU29ydCBvZiAic3BlbGwgbWFwcGluZyIgY29tbWFuZD8KLSAgIFdoZW4gZW50ZXJpbmcgbWFwcGluZ3M6IEFkZCB0aGUgcG9zc2liaWxpdHkgdG8gZW50ZXIgbWV0YSBrZXlzIGxpa2UgdGhleQogICAgYXJlIGRpc3BsYXllZCwgd2l0aGluIDw+OiA8TS1hPiwgPH5APiBvciA8fGE+LgotICAgQWxsb3cgbXVsdGlwbGUgYXJndW1lbnRzIHRvIDp1bm1hcC4KLSAgIENvbW1hbmQgdG8gc2hvdyBrZXlzIHRoYXQgYXJlIG5vdCB1c2VkIGFuZCBhdmFpbGFibGUgZm9yIG1hcHBpbmcKICAgICI6ZnJlZWtleXMiLgotICAgQWxsb3cgYW55IGNoYXJhY3RlciBleGNlcHQgd2hpdGUgc3BhY2UgaW4gYWJicmV2aWF0aW9ucyBsaHMgKFJpZWhtKS4KCgpJbmNzZWFyY2g6Ci0gICBBZGQgYSBsaW1pdCB0byB0aGUgbnVtYmVyIG9mIGxpbmVzIHRoYXQgYXJlIHNlYXJjaGVkIGZvciAnaW5jc2VhcmNoJz8KLSAgIFdoZW4gbm8gbWF0Y2ggaXMgZm91bmQgYW5kIHRoZSB1c2VyIHR5cGVzIG1vcmUsIHRoZSBzY3JlZW4gaXMgcmVkcmF3bgogICAgYW55d2F5LiAgQ291bGQgc2tpcCB0aGF0LiAgRXNwLiBpZiB0aGUgbGluZSB3cmFwcyBhbmQgdGhlIHRleHQgaXMgc2Nyb2xsZWQKICAgIHVwIGV2ZXJ5IHRpbWUuCi0gICBUZW1wb3JhcmlseSBvcGVuIGZvbGRzIHRvIHNob3cgd2hlcmUgdGhlIHNlYXJjaCBlbmRzIHVwLiAgUmVzdG9yZSB0aGUKICAgIGZvbGRzIHdoZW4gZ29pbmcgdG8gYW5vdGhlciBsaW5lLgotICAgV2hlbiBpbmNzZWFyY2ggdXNlZCBhbmQgaGl0dGluZyByZXR1cm4sIG5vIG5lZWQgdG8gc2VhcmNoIGFnYWluIGluIG1hbnkKICAgIGNhc2VzLCBzYXZlcyBhIGxvdCBvZiB0aW1lIGluIGJpZyBmaWxlcy4gKFNsb290bWFuIHdhbnRzIHRvIHdvcmsgb24gdGhpcz8pCiAgICBXaGVuIG5vdCB1c2luZyBzcGVjaWFsIGNoYXJhY3RlcnMsIGNhbiBjb250aW51ZSBzZWFyY2ggZnJvbSB0aGUgbGFzdCBtYXRjaAogICAgKG9yIG5vdCBhdCBhbGwsIHdoZW4gdGhlcmUgd2FzIG5vIG1hdGNoKS4gIFNlZSBvbGRtYWlsL3dlYmIvaW4uODcyLgotICAgV2l0aCBpbmNzZWFyY2gsIHVzZSBDVFJMLU4vQ1RSTC1QIHRvIGdvIHRvIG5leHQvcHJldmlvdXMgbWF0Y2gsIHNvbWUgb3RoZXIKICAgIGtleSB0byBjb3B5IG1hdGNoZWQgd29yZCB0byBzZWFyY2ggcGF0dGVybiAoQWxleGFuZGVyIFNjaG1pZCkuCgoKU2VhcmNoaW5nOgo4ICAgQWRkICJnLyIgYW5kICJnYiIgdG8gc2VhcmNoIGZvciBhIHBhdHRlcm4gaW4gdGhlIFZpc3VhbGx5IHNlbGVjdGVkIHRleHQ/CiAgICAiZz8iIGlzIGFscmVhZHkgdXNlZCBmb3Igcm90MTMuCiAgICBDYW4gdXNlICJnLyIgaW4gTm9ybWFsIG1vZGUsIHVzZXMgdGhlICc8IHRvICc+IGFyZWEuCjggICBBZGQgYSBtZWNoYW5pc20gZm9yIHJlY3Vyc2l2ZW5lc3M6ICJcQCgoW14oKV0qXEBnW14oKV0qKVwpIi4gIFxAZyBzdGFuZHMKICAgIGZvciAiZ28gcmVjdXJzaXZlIGhlcmUiIGFuZCBcQCggXCkgbWFya3MgdGhlIHJlY3Vyc2l2ZSBwYXJ0LgogICAgUGVybCBkb2VzIGl0IHRoaXMgd2F5OgoJICAgICRwYXJlbiA9IHFyLyBcKCggW14oKV0gfCAoPz97ICRwYXJlbiB9KSApKiBcKSAveDsKICAgIEhlcmUgJHBhcmVuIGlzIGV2YWx1YXRlZCB3aGVuIGl0J3MgZW5jb3VudGVyZWQuICBUaGlzIGlzIGxpa2UgYSByZWdleHAKICAgIGluc2lkZSBhIHJlZ2V4cC4gIEluIHRoZSBhYm92ZSB0ZXJtcyBpdCB3b3VsZCBiZToKCSAgICBcQCgoXChbXigpXVx8XEBnXCkqKVwpCjcgICBTdXBwb3J0IGZvciBhcHByb3hpbWF0ZS1yZWdleHBzIHRvIGZpbmQgc2ltaWxhciB3b3JkcyAoYWdyZXAKICAgIGh0dHA6Ly93d3cudGdyaWVzLmRlL2FncmVwLyB0cmU6IGh0dHA6Ly9sYXVyaWthcmkubmV0L3RyZS9pbmRleC5odG1sKS4KOCAgIEFkZCBhbiBpdGVtIGZvciBhIGJpZyBjaGFyYWN0ZXIgcmFuZ2UsIHNvIHRoYXQgb25lIGNhbiBzZWFyY2ggZm9yIGEKICAgIGNoaW5lc2UgY2hhcmFjdGVyOiBcelsyMzQtMTIzNF0gIG9yIFx6W1hYLVlZXSBvciBcelsweDIzLTB4MjM0XS4KNyAgIEFkZCBhbiBpdGVtIHN0YWNrIHRvIGFsbG93IG1hdGNoaW5nICgpLiAgT25lIHNpZGUgaXMgInB1c2ggWCBvbgogICAgdGhlIHN0YWNrIGlmIHByZXZpb3VzIGF0b20gbWF0Y2hlZCIuICBPdGhlciBzaWRlIGlzICJtYXRjaCB3aXRoIHRvcCBvZgogICAgc3RhY2ssIHBvcCBpdCB3aGVuIGl0IG1hdGNoZXMiLiAgVXNlICJcQHBYIiBhbmQgIlxAbSI/CglFeGFtcGxlOiBcKChcQHApLlx7LX1cQG1cKSoKNyAgIEFkZCBhbiBvcHRpb24gdG8gYWNjZXB0IGEgbWF0Y2ggYXQgdGhlIGN1cnNvciBwb3NpdGlvbi4gIEFsc28gZm9yCiAgICBzZWFyY2goKS4gKEJyZXR0KQo3ICAgQWRkIGEgZmxhZyB0byAiL3BhdC8iIHRvIGRpc2NhcmQgYW4gZXJyb3IuICBVc2VmdWwgdG8gY29udGludWUgYSBtYXBwaW5nCiAgICB3aGVuIGEgc2VhcmNoIGZhaWxzLiAgQ291bGQgYmUgIi9wYXQvRSIgKGUgaXMgYWxyZWFkeSB1c2VkIGZvciBhbiBvZmZzZXQpLgo3ICAgQWRkIHBhdHRlcm4gaXRlbSB0byB1c2UgcHJvcGVydGllcyBvZiBVbmljb2RlIGNoYXJhY3RlcnMuICBJbiBQZXJsIGl0J3MKICAgICJccHtMfSIgZm9yIGEgbGV0dGVyLiAgU2VlIFJlZ3VsYXIgRXhwcmVzc2lvbiBQb2NrZXQgUmVmZXJlbmNlLgo4ICAgV291bGQgaXQgYmUgcG9zc2libGUgdG8gYWxsb3cgIjoyMyw0NS9wYXQvZmxhZ3MiIHRvIHNlYXJjaCBmb3IgInBhdCIgaW4KICAgIGxpbmVzIDIzIHRvIDQ1PyAgT3IgZG9lcyB0aGlzIGNvbmZsaWN0IHdpdGggRXggcmFuZ2Ugc3ludGF4Pwo4ICAgQWxsb3cgaWRlbnRpY2FsIHBhaXJzIGluICdtYXRjaHBhaXJzJy4gIFJlc3RyaWN0IHRoZSBzZWFyY2ggdG8gdGhlIGN1cnJlbnQKICAgIGxpbmUuCjcgICBBbGxvdyBsb25nZXIgcGFpcnMgaW4gJ21hdGNocGFpcnMnLiAgVXNlIH4vdmltL21hY3Jvcy9tYXRjaGl0LnZpbSBhcyBhbgogICAgZXhhbXBsZS4KOCAgIE1ha2UgaXQgcG9zc2libGUgdG8gZGVmaW5lIHRoZSBjaGFyYWN0ZXIgdGhhdCAiJSIgY2hlY2tzIGZvciBpbgogICAgI2lmLyNlbmRpZi4gIEZvciBubWFrZSBpdCdzICFpZi8hZW5kaWYuCi0gICBGb3IgIiUiIGNvbW1hbmQ6IHNldCBoaWVyYXJjaHkgZm9yIHdoaWNoIHRoaW5ncyBpbmNsdWRlIG90aGVyIHRoaW5ncyB0aGF0CiAgICBzaG91bGQgYmUgaWdub3JlZCAobGlrZSAiKi8iIG9yICIjZW5kaWYiIGluc2lkZSAvKiAqLykuCiAgICBBbHNvOiB1c2UgIiUiIHRvIGp1bXAgZnJvbSBzdGFydCB0byBlbmQgb2Ygc3ludGF4IHJlZ2lvbiBhbmQgYmFjay4KICAgIEFsdGVybmF0aXZlOiB1c2UgbWF0Y2hpdC52aW0KOCAgICIvOi9lKzEiIGdldHMgc3R1Y2sgb24gYSBtYXRjaCBhdCB0aGUgZW5kIG9mIHRoZSBsaW5lLiAgRG8gd2UgY2FyZT8KOCAgIEEgcGF0dGVybiBsaWtlICJcKFteYV1cK1wpXCsiIHRha2VzIGFuIGF3ZnVsIGxvbmcgdGltZS4gIFJlY29nbml6ZSB0aGF0CiAgICB0aGUgcmVjdXJzaXZlICJcKyIgaXMgbWVhbmluZ2xlc3MgYW5kIG9wdGltaXplIGZvciBpdC4KICAgIFRoaXMgb25lIGlzIGFsc28gdmVyeSBzbG93IG9uICIvKiBzb21lIGNvbW1lbnQgKi8iOiAiXlwvXCpcKC4qW14vXVwpKiQiLgo3ICAgUmVjb2duaXplICJbYS16XSIsICJbMC05XSIsIGV0Yy4gYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBmYXN0ZXIgIlxsIiBhbmQKICAgICJcZCIuCjcgICBBZGQgYSB3YXkgdG8gc3BlY2lmeSBjaGFyYWN0ZXJzIGluIDxDLU0+IG9yIDxLZXk+IGZvcm0uICBDb3VsZCBiZQogICAgXCU8Qy1NPi4KOCAgIEZsYWdzIHRoYXQgYXBwbHkgdG8gdGhlIHdob2xlIHBhdHRlcm4uCiAgICBUaGlzIHdvcmtzIGZvciBhbGwgcGxhY2VzIHdoZXJlIGEgcmVnZXhwIGlzIHVzZWQuCiAgICBBZGQgIlxxIiB0byBub3Qgc3RvcmUgdGhpcyBwYXR0ZXJuIGFzIHRoZSBsYXN0IHNlYXJjaCBwYXR0ZXJuPwo4ICAgQWRkIGFuIGFyZ3VtZW50IGFmdGVyICI6cy9wYXQvc3RyLyIgZm9yIGEgcmFuZ2Ugb2YgbWF0Y2hlcy4gIEZvciBleGFtcGxlLAogICAgIjpzL3BhdC9zdHIvIzMtNCIgdG8gcmVwbGFjZSBvbmx5IHRoZSB0aGlyZCBhbmQgZm91cnRoICJwYXQiIGluIGEgbGluZS4KOCAgIEFkZCBhbiBvcHRpb24gbm90IHRvIHVzZSAnaGxzZWFyY2gnIGhpZ2hsaWdodGluZyBmb3IgIjpzIiBhbmQgIjpnIgogICAgY29tbWFuZHMuIChLYWhuKSAgSXQgd291bGQgd29yayBsaWtlICI6bm9oIiBpcyB1c2VkIGFmdGVyIHRoYXQgY29tbWFuZC4KICAgIEFsc286IEFuIGV4dHJhIGZsYWcgdG8gZG8gdGhpcyBvbmNlLCBhbmQgYSBmbGFnIHRvIGtlZXAgdGhlIGV4aXN0aW5nCiAgICBzZWFyY2ggcGF0dGVybi4KLSAgIEFkZCBcJWh7Z3JvdXAtbmFtZX07IHRvIHNlYXJjaCBmb3IgYSBzcGVjaWZpYyBoaWdobGlnaHQgZ3JvdXAuCiAgICBBZGQgXCVze3N5bnRheC1ncm91cH07IHRvIHNlYXJjaCBmb3IgYSBzcGVjaWZpYyBzeW50YXggZ3JvdXAuCi0gICBTdXBwb3J0IFBlcmwgcmVnZXhwLiAgVXNlIFBDUkUgKFBlcmwgQ29tcGF0aWJsZSBSRSkgcGFja2FnZS4gKFNoYWRlKQogICAgT3IgdHJhbnNsYXRlIHRoZSBwYXR0ZXJuIHRvIGEgVmltIG9uZS4KICAgIERvbid0IHN3aXRjaCBvbiB3aXRoIGFuIG9wdGlvbiBmb3IgdHlwZWQgY29tbWFuZHMvbWFwcGluZ3MvZnVuY3Rpb25zLCBpdCdzCiAgICB0b28gY29uZnVzaW5nLiAgVXNlICJcQEAiIGluIHRoZSBwYXR0ZXJuLCB0byBhdm9pZCBpbmNvbXBhdGliaWxpdGllcy4KNyAgIEFkZCBQT1NJWCByZWdleHAsIGxpa2UgTnZpLCB3aXRoICdleHRlbmRlZCcgb3B0aW9uPyAgSXQncyBsaWtlIHZlcnktbWFnaWMuCi0gICBSZW1lbWJlciBmbGFncyBmb3IgYmFja3JlZmVyZW5jZWQgaXRlbXMsIHNvIHRoYXQgIioiIGNhbiBiZSB1c2VkIGFmdGVyIGl0LgogICAgQ2hlY2sgd2l0aCAiXChcU1wpXDFcezN9Ii4gKEhlbW1lcmxpbmcpCi0gICBBZGQgZmxhZ3MgdG8gc2VhcmNoIGNvbW1hbmQgKGFsc28gZm9yICI6cyI/KToKICAgIGkJaWdub3JlIGNhc2UKICAgIEkJdXNlIGNhc2UKICAgIHAJdXNlIFBlcmwgcmVnZXhwIHN5bnRheCAob3IgUE9TSVg/KQogICAgdgl1c2UgVmkgcmVnZXhwIHN5bnRheAogICAgZglmb3JnZXQgcGF0dGVybiwgZG9uJ3Qga2VlcCBpdCBmb3IgIm4iIGNvbW1hbmQKICAgIEYgICByZW1lbWJlciBwYXR0ZXJuLCBrZWVwIGl0IGZvciAibiIgY29tbWFuZAogICAgUGVybCB1c2VzIHRoZXNlIHRvbzoKICAgIGUJZXZhbHVhdGUgdGhlIHJpZ2h0IHNpZGUgYXMgYW4gZXhwcmVzc2lvbiAoUGVybCBvbmx5KQogICAgbQltdWx0aXBsZSBsaW5lIGV4cHJlc3Npb24gKHdlIGRvbid0IG5lZWQgaXQpCiAgICBvCWNvbXBpbGUgb25seSBvbmNlIChQZXJsIG9ubHkpCiAgICBzCXNpbmdsZSBsaW5lIGV4cHJlc3Npb24gKHdlIGRvbid0IG5lZWQgaXQpCiAgICB4CWV4dGVuZGVkIHJlZ2V4cCAod2UgZG9uJ3QgbmVlZCBpdCkKICAgIFdoZW4gdXNlZCBhZnRlciAiOmciIGNvbW1hbmQsIGJhY2tzbGFzaCBuZWVkZWQgdG8gYXZvaWQgY29uZnVzaW9uIHdpdGggdGhlCiAgICBmb2xsb3dpbmcgY29tbWFuZC4KICAgIEFkZCAnc2VhcmNoZmxhZ3MnIGZvciBkZWZhdWx0IGZsYWdzIChyZXBsYWNlcyAnZ2RlZmF1bHQnKS4KLSAgIEFkZCBjb21tYW5kIHRvIGRpc3BsYXkgdGhlIGxhc3QgdXNlZCBzdWJzdGl0dXRlIHBhdHRlcm4gYW5kIGxhc3QgdXNlZAogICAgcGF0dGVybi4gKE1hcmdvKSAgTWF5YmUgbWFrZSBpdCBhY2Nlc3NpYmxlIHRocm91Z2ggYSByZWdpc3RlciAobGlrZSAiLwogICAgZm9yIHNlYXJjaCBzdHJpbmcpPwo3ICAgVXNlIFQtc2VhcmNoIGFsZ29yaXRobSwgdG8gc3BlZWQgdXAgc2VhcmNoaW5nIGZvciBzdHJpbmdzIHdpdGhvdXQgc3BlY2lhbAogICAgY2hhcmFjdGVycy4gIFNlZSBDJ3QgYXJ0aWNsZSwgQXVndXN0IDE5OTcuCi0gICBBZGQgJ2Z1enp5Y2FzZScgb3B0aW9uLCBzbyB0aGF0IGNhc2UgZG9lc24ndCBtYXR0ZXIsIGFuZCAnLScgYW5kICdfJyBhcmUKICAgIGVxdWl2YWxlbnQgKGZvciBVbml4IGZpbGVuYW1lcykuCi0gICBBZGQgJ3YnIGZsYWcgdG8gc2VhcmNoIGNvbW1hbmQ6IGVudGVyIFZpc3VhbCBtb2RlLCB3aXRoIHRoZSBtYXRjaGluZyB0ZXh0CiAgICBhcyBWaXN1YWwgYXJlYS4gKHZhcmlhdGlvbiBvbiBpZGVhIGZyb20gQmVydGluKQotICAgU2VhcmNoaW5nOiAiL3RoaXMvL3RoYXQvIiBzaG91bGQgZmluZCAidGhhdCIgYWZ0ZXIgInRoaXMiLgotICAgQWRkIGdsb2JhbCBzZWFyY2ggY29tbWFuZHM6IEluc3RlYWQgb2Ygd3JhcHBpbmcgYXQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyLAogICAgdGhleSBjb250aW51ZSBpbiBhbm90aGVyIGJ1ZmZlci4gIFVzZSBmbGFnIGFmdGVyIHNlYXJjaCBwYXR0ZXJuOgogICAgYQlmb3IgdGhlIG5leHQgZmlsZSBpbiB0aGUgYXJndW1lbnQgbGlzdAogICAgZglmb3IgZmlsZSBpbiB0aGUgYnVmZmVyIGxpc3QKICAgIHcJZm9yIGZpbGUgZWRpdGVkIGluIGEgd2luZG93LgogICAgZS5nLiAiL3BhdC9mIi4gIFRoZW4gIm4iIGFuZCAiTiIgd29yayB0aHJvdWdoIGZpbGVzIHRvby4gICJmIiBmbGFnIGFsc28gZm9yCiAgICAiOnMvcGF0L2Zvby9mIj8/PyAgVGhlbiB3aGVuICdhdXRvd3JpdGUnIGFuZCAnaGlkZGVuJyBhcmUgYm90aCBub3Qgc2V0LCBhc2sKICAgIGJlZm9yZSBzYXZpbmcgZmlsZXM6ICJTYXZlIG1vZGlmaWVkIGJ1ZmZlciAiL3BhdGgvZmlsZSI/IChZZXMvSGlkZS9ObwogICAgU2F2ZS1hbGwvaGlkZS1BbGwvUXVpdCkgIi4KLSAgICI6cy9wYXQvZm9vLzMiOiBmaW5kIDNyZCBtYXRjaCBvZiAicGF0IiwgbGlrZSBzZWQuIChUaG9tYXMgS29laGxlcikKNyAgIFdoZW4gc2VhcmNoaW5nIHdpdGggJ24nIGdpdmUgbWVzc2FnZSB3aGVuIGdldHRpbmcgYmFjayB3aGVyZSB0aGUgc2VhcmNoCiAgICBmaXJzdCBzdGFydGVkLiAgUmVtZW1iZXIgc3RhcnQgb2Ygc2VhcmNoIGluICcvIG1hcmsuCjcgICBBZGQgb3B0aW9uIHRoYXQgc2Nyb2xscyBzY3JlZW4gdG8gcHV0IGN1cnNvciBpbiBtaWRkbGUgb2Ygc2NyZWVuIGFmdGVyCiAgICBzZWFyY2ggYWx3YXlzL3doZW4gb2ZmLXNjcmVlbi9uZXZlci4gIEFuZCBhZnRlciBhICI6dGFnIiBjb21tYW5kLiAgTWF5YmUKICAgIHNwZWNpZnkgaG93IG1hbnkgbGluZXMgYmVsb3cgdGhlIHNjcmVlbiBjYXVzZXMgYSByZWRyYXcgd2l0aCB0aGUgY3Vyc29yIGluCiAgICB0aGUgbWlkZGxlIChkZWZhdWx0IHdvdWxkIGJlIGhhbGYgYSBzY3JlZW4sIHplcm8gbWVhbnMgYWx3YXlzKS4KNiAgIFN1cHBvcnQgbXVsdGlwbGUgc2VhcmNoIGJ1ZmZlcnMsIHNvIG1hY3JvcyBjYW4gYmUgbWFkZSB3aXRob3V0IHNpZGUKICAgIGVmZmVjdHMuCjcgICBGcm9tIHh2aW06IEFsbG93IGEgbmV3bGluZSBpbiBzZWFyY2ggcGF0dGVybnMgKGFsc28gZm9yIDpzLCBjYW4gZGVsZXRlCiAgICBuZXdsaW5lKS4gIEFkZCBCT1csIEVPVywgTkVXTCwgTkxPUkFOWSwgTkxCVVRBTlksIG1hZ2ljICduJyBhbmQgJ3InLCBldGMuCiAgICBbbm90IGluIHh2aW06XSBBZGQgb3B0aW9uIHRvIHN3aXRjaCBvbiBtYXRjaGVzIGNyb3NzaW5nIE9ORSBsaW5lIGJvdW5kYXJ5Lgo3ICAgQWRkICI6aXNlbGVjdCIsIGEgY29tYmluYXRpb24gb2YgIjppbGlzdCIgYW5kICI6dHNlbGVjdCIuIChBYXJvbikgKFplbGxuZXIpCiAgICBBbHNvICI6ZHNlbGVjdCIuCgoKVW5kbzoKLSAgIE1ha2UgaXQgcG9zc2libGUgdG8gdW5kbyBhbGwgdGhlIGNvbW1hbmRzIGZyb20gYSBtYXBwaW5nLCBpbmNsdWRpbmcgYQogICAgdHJhaWxpbmcgdW5maW5pc2hlZCBjb21tYW5kLCBlLmcuIGZvciAiOm1hcCBLIGlYXltyIi4KLSAgIFdoZW4gYWNjaWRlbnRhbGx5IGhpdHRpbmcgIlIiIGluc3RlYWQgb2YgQ3RybC1SLCBmdXJ0aGVyIEN0cmwtUiBpcyBub3QKICAgIHBvc3NpYmxlLCBldmVuIHdoZW4gdHlwaW5nIDxFc2M+IGltbWVkaWF0ZWx5LiAoR3JhaG4pICBBbHNvIGZvciAiaSIsICJhIiwKICAgIGV0Yy4gIFBvc3Rwb25lIHNhdmluZyBmb3IgdW5kbyB1bnRpbCBzb21ldGhpbmcgaXMgcmVhbGx5IGluc2VydGVkPwo4ICAgV2hlbiBJbnNlcnRpbmcgYSBsb3Qgb2YgdGV4dCwgaXQgY2FuIG9ubHkgYmUgdW5kb25lIGFzIGEgd2hvbGUuICBNYWtlIHVuZG8KICAgIHN5bmMgcG9pbnRzIGF0IGV2ZXJ5IGxpbmUgb3Igd29yZC4gIENvdWxkIHJlY29nbml6ZSB0aGUgc3RhcnQgb2YgYSBuZXcKICAgIHdvcmQgKHdoaXRlIHNwYWNlIGFuZCB0aGVuIG5vbi13aGl0ZSBzcGFjZSkgYW5kIGJhY2tzcGFjaW5nLgogICAgQ2FuIGFscmVhZHkgdXNlIENUUkwtRyB1LCBidXQgdGhhdCByZXF1aXJlcyByZW1hcHBpbmcgYSBsb3Qgb2YgdGhpbmdzLgo4ICAgTWFrZSB1bmRvIG1vcmUgbWVtb3J5LWVmZmljaWVudDogQ29tcGFyZSB0ZXh0IGJlZm9yZSBhbmQgYWZ0ZXIgY2hhbmdlLAogICAgb25seSByZW1lbWJlciB0aGUgbGluZXMgdGhhdCByZWFsbHkgY2hhbmdlZC4KNyAgIEFkZCB1bmRvIGZvciBhIHJhbmdlIG9mIGxpbmVzLiAgQ2FuIGNoYW5nZSB0aGVzZSBiYWNrIHRvIGEgcHJldmlvdXMKICAgIHZlcnNpb24gd2l0aG91dCBjaGFuZ2luZyB0aGUgcmVzdCBvZiB0aGUgZmlsZS4gIFN0b3AgZG9pbmcgdGhpcyB3aGVuIGEKICAgIGNoYW5nZSBpbmNsdWRlcyBvbmx5IHNvbWUgb2YgdGhlc2UgbGluZXMgYW5kIGNoYW5nZXMgdGhlIGxpbmUgY291bnQuICBOZWVkCiAgICB0byBzdG9yZSB0aGVzZSB1bmRvIGFjdGlvbnMgYXMgYSBzZXBhcmF0ZSBjaGFuZ2UgdGhhdCBjYW4gYmUgdW5kb25lLgotICAgRm9yIHVfc2F2ZSgpIGluY2x1ZGUgdGhlIGNvbHVtbiBudW1iZXIuIFRoaXMgY2FuIGJlIHVzZWQgdG8gc2V0ICdbIGFuZCAnXS4KICAgIEFuZCBpbiB0aGUgZnV0dXJlIHRoZSB1bmRvIGNhbiBiZSBtYWRlIG1vcmUgZWZmaWNpZW50IChXZWJiKS4KLSAgIEluIG91dC1vZi1tZW1vcnkgc2l0dWF0aW9uczogRnJlZSBhbGxvY2F0ZWQgc3BhY2UgaW4gdW5kbywgYW5kIHJlZHVjZSB0aGUKICAgIG51bWJlciBvZiB1bmRvIGxldmVscyAod2l0aCBjb25maXJtYXRpb24pLgotICAgSW5zdGVhZCBvZiBbK10sIGdpdmUgdGhlIG51bWJlciBvZiBjaGFuZ2VzIHNpbmNlIHRoZSBsYXN0IHdyaXRlOiBbKzEyM10uCiAgICBXaGVuIHVuZG9pbmcgdG8gYmVmb3JlIHRoZSBsYXN0IHdyaXRlLCBjaGFuZ2UgdGhpcyB0byBhIG5lZ2F0aXZlIG51bWJlcjoKICAgIFstOTldLgotICAgV2l0aCB1bmRvIHdpdGggc2ltcGxlIGxpbmUgZGVsZXRlL2luc2VydDogb3B0aW1pemUgc2NyZWVuIHVwZGF0aW5nLgotICAgV2hlbiBleGVjdXRpbmcgbWFjcm8nczogU2F2ZSBlYWNoIGxpbmUgZm9yIHVuZG8gb25seSBvbmNlLgotICAgU3RvcmUgdW5kbyBpbmZvIGluIGEgZmlsZSB0aGF0IHN1cnZpdmVzIHVudGlsIHRoZSBuZXh0IGVkaXQuICBUaGVuIGl0J3MKICAgIHBvc3NpYmxlIHRvIHVuZG8gdG8gYmVmb3JlIHRoZSBjdXJyZW50IGVkaXRpbmcgc2Vzc2lvbi4gIENvbWJpbmVkIHdpdGgKICAgIHZpbWluZm8/Ci0gICBXaGVuIGRvaW5nIGEgZ2xvYmFsIHN1YnN0aXR1dGUsIGNhdXNpbmcgYWxtb3N0IGFsbCBsaW5lcyB0byBiZSBjaGFuZ2VkLAogICAgdW5kbyBpbmZvIGJlY29tZXMgdmVyeSBiaWcuICBQdXQgdW5kbyBpbmZvIGluIHN3YXAgZmlsZT8/CgoKQnVmZmVyIGxpc3Q6CjcgICBDb21tYW5kIHRvIGV4ZWN1dGUgYSBjb21tYW5kIGluIGFub3RoZXIgYnVmZmVyOiAiOmluYnVmIHtidWZuYW1lfSB7Y21kfSIuCiAgICBBbHNvIGZvciBvdGhlciB3aW5kb3dzOiAiOmlud2luIHt3aW5ucn0ge2NtZH0iLiAgSG93IHRvIG1ha2Ugc3VyZSB0aGF0CiAgICB0aGlzIHdvcmtzIHByb3Blcmx5IGZvciBhbGwgY29tbWFuZHMsIGFuZCBzdGlsbCBiZSBhYmxlIHRvIHJldHVybiB0byB0aGUKICAgIGN1cnJlbnQgYnVmZmVyL3dpbmRvdz8gIEUuZy46ICI6aW5idWYgeHh4IG9ubHkiLgo4ICAgQWRkIEZpbGUue3JlY2VudF9maWxlc30gbWVudSBlbnRyaWVzOiBSZWNlbnRseSBlZGl0ZWQgZmlsZXMuCiAgICBSb24gQWFyb24gaGFzIGEgcGx1Z2luIGZvciB0aGlzOiBtcnUudmltLgo4ICAgVW5peDogQ2hlY2sgYWxsIHVzZXMgb2YgZm5hbWVjbXAoKSBhbmQgZm5hbWVuY21wKCkgaWYgdGhleSBzaG91bGQgY2hlY2sKICAgIGlub2RlIHRvby4KNyAgIEFkZCBhbm90aGVyIG51bWJlciBmb3IgYSBidWZmZXIsIHdoaWNoIGlzIHZpc2libGUgZm9yIHRoZSB1c2VyLiAgV2hlbgogICAgY3JlYXRpbmcgYSBuZXcgYnVmZmVyLCB1c2UgdGhlIGxvd2VzdCBudW1iZXIgbm90IGluIHVzZSAob3IgdGhlIGhpZ2hlc3QKICAgIG51bWJlciBpbiB1c2UgcGx1cyBvbmU/KS4KNyAgIE9mZmVyIHNvbWUgYnVmZmVyIHNlbGVjdGlvbiBmcm9tIHRoZSBjb21tYW5kIGxpbmU/ICBMaWtlIHVzaW5nICI6bHMiIGFuZAogICAgYXNraW5nIGZvciBhIGJ1ZmZlciBudW1iZXIuIChaYWNobWFubikKLSAgIFdoZW4gc3RhcnRpbmcgdG8gZWRpdCBhIGZpbGUgdGhhdCBpcyBhbHJlYWR5IGluIHRoZSBidWZmZXIgbGlzdCwgdXNlIHRoZQogICAgZmlsZSBuYW1lIGFyZ3VtZW50IGZvciB0aGUgbmV3IHNob3J0IGZpbGUgbmFtZS4gKFdlYmIpCi0gICBBZGQgYW4gb3B0aW9uIHRvIG1ha2UgIjpibmV4dCIgYW5kICI6YnByZXYiIHdyYXAgYXJvdW5kIHRoZSBlbmQgb2YgdGhlCiAgICBidWZmZXIgbGlzdC4gIEFsc28gZm9yICI6bmV4dCIgYW5kICI6cHJldiI/CjcgICBBZGQgYXJndW1lbnQgdG8gIjpscyIgd2hpY2ggaXMgYSBwYXR0ZXJuIGZvciBidWZmZXJzIHRvIGxpc3QuCiAgICBFLmcuICI6bHMgKi5jIi4gKFRob21wc29uKQo3ICAgQWRkIGV4cGFuc2lvbiBvZiBidWZmZXIgbmFtZXMsIHNvIHRoYXQgIiouYyIgaXMgZXhwYW5kZWQgdG8gYWxsIGJ1ZmZlcgogICAgbmFtZXMuICBOZWVkZWQgZm9yICI6YmRlbCAqLmMiLCAiOmJ1bmxvYWQgKi5jIiwgZXRjLgo4ICAgU3VwcG9ydCBmb3IgPGFmaWxlPiB3aGVyZSBhIGJ1ZmZlciBuYW1lIGlzIGV4cGVjdGVkLgo4ICAgU29tZSBjb21tYW5kcyBkb24ndCB1c2UgbGluZSBudW1iZXJzLCBidXQgYnVmZmVyIG51bWJlcnMuICAnJCcKICAgIHNob3VsZCB0aGVuIG1lYW4gdGhlIG51bWJlciBvZiB0aGUgbGFzdCBidWZmZXIuICBFLmcuOiAiNCwkYmRlbCIuCjcgICBBZGQgYW4gb3B0aW9uIHRvIG1vc3RseSB1c2Ugc2xhc2hlcyBpbiBmaWxlIG5hbWVzLiAgU2VwYXJhdGVseSBmb3IKICAgIGludGVybmFsIHVzZSBhbmQgZm9yIHdoZW4gZXhlY3V0aW5nIGFuIGV4dGVybmFsIHByb2dyYW0/CgoKU3dhcCAoLnN3cCkgZmlsZXM6CjggICBJZiB3cml0aW5nIHRvIHRoZSBzd2FwIGZpbGUgZmFpbHMsIHNob3VsZCB0cnkgdG8gb3BlbiBvbmUgaW4gYW5vdGhlcgogICAgZGlyZWN0b3J5IGZyb20gJ2RpcicuICBVc2VmdWwgaW4gY2FzZSB0aGUgZmlsZSBzeXN0ZW0gaXMgZnVsbCBhbmQgd2hlbgogICAgdGhlcmUgYXJlIHNob3J0IGZpbGUgbmFtZSBwcm9ibGVtcy4KOCAgIEFsc28gdXNlIHRoZSBjb2RlIHRvIHRyeSB1c2luZyBhIHNob3J0IGZpbGUgbmFtZSBmb3IgdGhlIGJhY2t1cCBhbmQgc3dhcAogICAgZmlsZSBmb3IgdGhlIFdpbjMyIGFuZCBEb3MgMzIgYml0IHZlcnNpb25zLgo4ICAgV2hlbiBhIGZpbGUgaXMgZWRpdGVkIGJ5IHJvb3QsIGFkZCAkTE9HTkFNRSB0byBrbm93IHdobyBkaWQgc3UuCjggICBXaGVuIHRoZSBlZGl0ZWQgZmlsZSBpcyBhIHN5bWxpbmssIHRyeSB0byBwdXQgdGhlIHN3YXAgZmlsZSBpbiB0aGUgc2FtZQogICAgZGlyIGFzIHRoZSBhY3R1YWwgZmlsZS4gIEFkanVzdCBGdWxsTmFtZSgpLiAgQXZvaWRzIGVkaXRpbmcgdGhlIHNhbWUgZmlsZQogICAgdHdpY2UgKGUuZy4gd2hlbiB1c2luZyBxdWlja2ZpeCkuICBBbHNvIHRyeSB0byBtYWtlIHRoZSBuYW1lIG9mIHRoZSBiYWNrdXAKICAgIGZpbGUgdGhlIHNhbWUgYXMgdGhlIGFjdHVhbCBmaWxlPwogICAgVXNlIHRoZSBjb2RlIGZvciByZXNvbHZlKCk/CjcgICBXaGVuIHVzaW5nIDY0IGJpdCBpbm9kZSBudW1iZXJzLCBhbHNvIHN0b3JlIHRoZSB0b3AgMzIgYml0cy4gIEFkZCBhbm90aGVyCiAgICBmaWVsZCBmb3IgdGhpcywgdXNpbmcgcGFydCBvZiBib19mbmFtZVtdLCB0byBrZWVwIGl0IGNvbXBhdGlibGUuCjcgICBXaGVuIGVkaXRpbmcgYSBmaWxlIG9uIHJlbW92YWJsZSBtZWRpYSwgc2hvdWxkIHB1dCBzd2FwIGZpbGUgc29tZXdoZXJlCiAgICBlbHNlLiAgVXNlIHNvbWV0aGluZyBsaWtlICdyJyBmbGFnIGluICd2aW1pbmZvJy4gICdkaXJhdm9pZCc/CiAgICBBbHNvOiBCZSBhYmxlIHRvIHNwZWNpZnkgbWluaW11bSBkaXNrIHNwYWNlLCBza2lwIGRpcmVjdG9yeSB3aGVuIG5vdAogICAgZW5vdWdoIHJvb20uCjcgICBBZGQgYSBjb25maWd1cmUgY2hlY2sgZm9yIHdoaWNoIGRpcmVjdG9yeSBzaG91bGQgYmUgdXNlZDogL3RtcCwgL3Zhci90bXAKICAgIG9yIC92YXIvcHJlc2VydmUuCi0gICBBZGQgYW4gb3B0aW9uIHRvIGNyZWF0ZSBhIHN3YXAgZmlsZSBvbmx5IHdoZW4gbWFraW5nIHRoZSBmaXJzdCBjaGFuZ2UgdG8KICAgIHRoZSBidWZmZXIuICAoTGlhbmcpICBPciBvbmx5IHdoZW4gdGhlIGJ1ZmZlciBpcyBub3QgcmVhZC1vbmx5LgotICAgQWRkIG9wdGlvbiB0byBzZXQgInVtYXNrIiBmb3IgYmFja3VwIGZpbGVzIGFuZCBzd2FwIGZpbGVzIChBbnR3ZXJwZW4pLgogICAgJ2JhY2t1cHVtYXNrJyBhbmQgJ3N3YXB1bWFzayc/ICBPciAndW1hc2tiYWNrJyBhbmQgJ3VtYXNrc3dhcCc/Ci0gICBXaGVuIGVkaXRpbmcgYSByZWFkb25seSBmaWxlLCBkb24ndCB1c2UgYSBzd2FwIGZpbGUgYnV0IHJlYWQgcGFydHMgZnJvbSB0aGUKICAgIG9yaWdpbmFsIGZpbGUuICBBbHNvIGRvIHRoaXMgd2hlbiB0aGUgZmlsZSBpcyBodWdlICg+J21heG1lbScpLiAgV2UgZG8KICAgIG5lZWQgdG8gbG9hZCB0aGUgZmlsZSBvbmNlIHRvIGNvdW50IHRoZSBudW1iZXIgb2YgbGluZXM/ICBQZXJoYXBzIGtlZXAgYQogICAgY2FjaGVkIGxpc3Qgb2Ygd2hpY2ggbGluZSBpcyB3aGVyZS4KCgpWaW1pbmZvOgo3ICAgQ2FuIHByb2JhYmx5IHJlbW92ZSB0aGUgY29kZSB0aGF0IGNoZWNrcyBmb3IgYSB3cml0YWJsZSB2aW1pbmZvIGZpbGUsCiAgICBiZWNhdXNlIHdlIG5vdyBkbyB0aGUgY2hvd24oKSBmb3Igcm9vdCwgYW5kIG90aGVycyBjYW4ndCBvdmVyd3JpdGUgc29tZW9uZQogICAgZWxzZSdzIHZpbWluZm8gZmlsZS4KOCAgIEFkZCBhcmd1bWVudCB0byBrZWVwIHRoZSBsaXN0IG9mIGJ1ZmZlcnMgd2hlbiBWaW0gaXMgc3RhcnRlZCB3aXRoIGEgZmlsZQogICAgbmFtZS4gKFNjaGlsZCkKOCAgIEtlZXAgdGhlIGxhc3QgdXNlZCBkaXJlY3Rvcnkgb2YgdGhlIGZpbGUgYnJvd3NlciAoRmlsZS9PcGVuIG1lbnUpLgo4ICAgUmVtZW1iZXIgdGhlIGxhc3QgdXNlZCByZWdpc3RlciBmb3IgIkBAIi4KOCAgIFJlbWVtYmVyIGEgbGlzdCBvZiBsYXN0IGFjY2Vzc2VkIGZpbGVzLiAgVG8gYmUgdXNlZCBpbiB0aGUKICAgICJGaWxlLk9wZW4gUmVjZW50IiBtZW51LiAgRGVmYXVsdCBpcyB0byByZW1lbWJlciAxMCBmaWxlcyBvciBzby4KICAgIEFsc28gcmVtZW1iZXIgd2hpY2ggZmlsZXMgaGF2ZSBiZWVuIHJlYWQgYW5kIHdyaXR0ZW4uICBIb3cgdG8gZGlzcGxheQogICAgdGhpcz8KNyAgIEFsc28gc3RvcmUgdGhlICIuIHJlZ2lzdGVyIChsYXN0IGluc2VydGVkIHRleHQpLgo3ICAgTWFrZSBpdCBwb3NzaWJsZSB0byBzdG9yZSBidWZmZXIgbmFtZXMgaW4gdmltaW5mbyBmaWxlIHJlbGF0aXZlIHRvIHNvbWUKICAgIGRpcmVjdG9yeSwgdG8gbWFrZSB0aGVtIHBvcnRhYmxlIG92ZXIgYSBuZXR3b3JrLiAoQWFyb24pCjYgICBTdG9yZSBhIHNuYXBzaG90IG9mIHRoZSBjdXJyZW50bHkgb3BlbmVkIHdpbmRvd3MuICBTbyB0aGF0IHdoZW4gcXVpdHRpbmcKICAgIFZpbSwgYW5kIHRoZW4gc3RhcnRpbmcgYWdhaW4gKHdpdGhvdXQgYSBmaWxlIG5hbWUgYXJndW1lbnQpLCB5b3Ugc2VlIHRoZQogICAgc2FtZSBmaWxlcyBpbiB0aGUgd2luZG93cy4gIFVzZSAiOm1rc2Vzc2lvbiIgY29kZT8KLSAgIE1ha2UgbWFya3MgcHJlc2VudCBpbiAudmltaW5mbyB1c2FibGUgYXMgZmlsZSBtYXJrczogRGlzcGxheSBhIGxpc3Qgb2YKICAgICJsYXN0IHZpc2l0ZWQgZmlsZXMiIGFuZCBzZWxlY3Qgb25lIHRvIGp1bXAgdG8uCgoKTW9kZWxpbmVzOgo4ICAgQmVmb3JlIHRyeWluZyB0byBleGVjdXRlIGEgbW9kZWxpbmUsIGNoZWNrIHRoYXQgaXQgbG9va3MgbGlrZSBvbmUgKHZhbGlkCiAgICBvcHRpb24gbmFtZXMpLiAgSWYgaXQncyB2ZXJ5IHdyb25nLCBzaWxlbnRseSBpZ25vcmUgaXQuCiAgICBJZ25vcmUgYSBsaW5lIHRoYXQgc3RhcnRzIHdpdGggIlN1YmplY3Q6ICIuCi0gICBXaGVuIGFuIG9wdGlvbiB2YWx1ZSBpcyBjb21pbmcgZnJvbSBhIG1vZGVsaW5lLCBkbyBub3QgY2FycnkgaXQgb3ZlciB0bwogICAgYW5vdGhlciBlZGl0ZWQgZmlsZT8gIFdvdWxkIG5lZWQgdG8gcmVtZW1iZXIgdGhlIHZhbHVlIGZyb20gYmVmb3JlIHRoZQogICAgbW9kZWxpbmUgc2V0dGluZy4KLSAgIEFsbG93IHNldHRpbmcgYSB2YXJpYWJsZSBmcm9tIGEgbW9kZWxpbmU/ICBPbmx5IGFsbG93IHVzaW5nIGZpeGVkIHN0cmluZ3MsCiAgICBubyBmdW5jdGlvbiBjYWxscywgdG8gYXZvaWQgYSBzZWN1cml0eSBwcm9ibGVtLgotICAgQWxsb3cgIjpkb2F1dG8gQnVmUmVhZCB4LmNwcCIgaW4gbW9kZWxpbmVzLCB0byBleGVjdXRlIGF1dG9jb21tYW5kcyBmb3IKICAgIC5jcHAgZmlsZXMuCi0gICBTdXBwb3J0IHRoZSAiYWJicmV2aWF0ZSIgY29tbWFuZCBpbiBtb2RlbGluZXMgKEtlYXJucykuICBDYXJlZnVsIGZvcgogICAgY2hhcmFjdGVycyBhZnRlciA8RXNjPiwgdGhhdCBpcyBhIHNlY3VyaXR5IGxlYWsuCi0gICBBZGQgb3B0aW9uIHNldHRpbmcgdG8gYXNrIHVzZXIgaWYgaGUgd2FudHMgdG8gaGF2ZSB0aGUgbW9kZWxpbmVzIGV4ZWN1dGVkCiAgICBvciBub3QuICBTYW1lIGZvciAuZXhyYyBpbiBsb2NhbCBkaXIuCgoKU2Vzc2lvbnM6CjggICBET1MvV2luZG93czogIjpta3Nlc3Npb24iIGdlbmVyYXRlcyBhICJjZCIgY29tbWFuZCB3aGVyZSAiYWFcI2JiIiBtZWFucwogICAgZGlyZWN0b3J5ICIjYmIiIGluICJhYSIsIGJ1dCBpdCdzIHVzZWQgYXMgImFhI2JiIi4gKFJvbmFsZCBIb2VsbHdhcnRoKQo3ICAgV2hlbiB0aGVyZSBpcyBhICJoZWxwLnR4dCIgd2luZG93IGluIGEgc2Vzc2lvbiBmaWxlLCByZXN0b3JpbmcgdGhhdAogICAgc2Vzc2lvbiB3aWxsIG5vdCBnZXQgdGhlICJMT0NBTCBBRERJVElPTlMiIGJhY2suCjggICBXaXRoICI6bWtzZXNzaW9uIiBhbHdheXMgc3RvcmUgdGhlICdzZXNzaW9ub3B0aW9ucycgb3B0aW9uLCBldmVuIHdoZW4KICAgICJvcHRpb25zIiBpc24ndCBpbiBpdC4gKFN0LUFtYW50KQo4ICAgV2hlbiB1c2luZyAiOm1rc2Vzc2lvbiIsIGFsc28gc3RvcmUgYSBjb21tYW5kIHRvIHJlc2V0IGFsbCBvcHRpb25zIHRvCiAgICB0aGVpciBkZWZhdWx0IHZhbHVlLCBiZWZvcmUgc2V0dGluZyB0aGUgb3B0aW9ucyB0aGF0IGFyZSBub3QgYXQgdGhlaXIKICAgIGRlZmF1bHQgdmFsdWUuCjcgICBXaXRoICI6bWtzZXNzaW9uIiBhbHNvIHN0b3JlIHRoZSB0YWcgc3RhY2sgYW5kIGp1bXAgaGlzdG9yeS4gKE1pY2hhbAogICAgTWFsZWNraSkKNyAgIFBlcnNpc3RlbnQgdmFyaWFibGVzOiAicDp2YXIiOyBzdG9yZWQgaW4gdmltaW5mbyBmaWxlIGFuZCBzZXNzaW9ucyBmaWxlcy4KIAoKT3B0aW9uczoKNyAgICI6d2l0aCBvcHRpb249dmFsdWUgfCBjb21tYW5kIjogdGVtcG9yYXJpbHkgc2V0IGFuIG9wdGlvbiB2YWx1ZSBhbmQKICAgIHJlc3RvcmUgaXQgYWZ0ZXIgdGhlIGNvbW1hbmQgaGFzIGV4ZWN1dGVkLgo3ICAgU2V0dGluZyBhbiBvcHRpb24gYWx3YXlzIHNldHMgIndfc2V0X2N1cnN3YW50Iiwgd2hpbGUgdGhpcyBpcyBvbmx5CiAgICByZXF1aXJlZCBmb3IgYSBmZXcgb3B0aW9ucy4gIE9ubHkgZG8gaXQgZm9yIHRob3NlIG9wdGlvbnMgdG8gYXZvaWQgdGhlCiAgICBzaWRlIGVmZmVjdC4KOCAgIE1ha2UgIm9sZCIgbnVtYmVyIG9wdGlvbnMgdGhhdCByZWFsbHkgZ2l2ZSBhIG51bWJlciBvZiBlZmZlY3RzIGludG8gc3RyaW5nCiAgICBvcHRpb25zIHRoYXQgYXJlIGEgY29tbWEgc2VwYXJhdGVkIGxpc3QuICBUaGUgb2xkIG51bWJlciB2YWx1ZXMgc2hvdWxkCiAgICBhbHNvIGJlIHN1cHBvcnRlZC4KOCAgIEFkZCBjb21tYW5kcyB0byBzYXZlIGFuZCByZXN0b3JlIGFuIG9wdGlvbiwgd2hpY2ggYWxzbyBwcmVzZXJ2ZXMgdGhlIGZsYWcKICAgIHRoYXQgbWFya3MgaWYgdGhlIG9wdGlvbiB3YXMgc2V0LiAgVXNlZnVsIHRvIGtlZXAgdGhlIGVmZmVjdCBvZiBzZXR0aW5nCiAgICAnY29tcGF0aWJsZScgYWZ0ZXIgIjpzeW50YXggb24iIGhhcyBiZWVuIHVzZWQuCjcgICBUaGVyZSBpcyAndGl0bGVvbGQnLCB3aHkgaXMgdGhlcmUgbm8gJ2ljb25vbGQnPyAoQ2hhemVsYXMpCjcgICBNYWtlICdzY3JvbGxvZmYnIGEgZ2xvYmFsLWxvY2FsIG9wdGlvbiwgc28gdGhhdCBpdCBjYW4gYmUgZGlmZmVyZW50IGluIHRoZQogICAgcXVpY2tmaXggd2luZG93LCBmb3IgZXhhbXBsZS4gKEdhcnkgSG9sbG93YXkpCgoKRXh0ZXJuYWwgY29tbWFuZHM6CjggICBXaGVuIGZpbHRlcmluZyB0ZXh0LCByZWRpcmVjdCBzdGRlcnIgc28gdGhhdCBpdCBjYW4ndCBtZXNzIHVwIHRoZSBzY3JlZW4KICAgIGFuZCBWaW0gZG9lc24ndCBuZWVkIHRvIHJlZHJhdyBpdC4gIEFsc28gZm9yICI6ciAhY21kIi4KNCAgIFNldCBzZXBhcmF0ZSBzaGVsbCBmb3IgIjpzaCIsIHBpcGluZyAicmFuZ2UhZmlsdGVyIiwgcmVhZGluZyB0ZXh0ICJyICFscyIKICAgIGFuZCB3cml0aW5nIHRleHQgIncgIXdjIi4gKERldXRzY2hlKSAgQWxsb3cgYXJndW1lbnRzIGZvciBmYXN0IHN0YXJ0IChlLmcuCiAgICAtZikuCjQgICBBbGxvdyBkaXJlY3QgZXhlY3V0aW9uLCB3aXRob3V0IHVzaW5nIGEgc2hlbGwuCjQgICBSdW4gYW4gZXh0ZXJuYWwgY29tbWFuZCBpbiB0aGUgYmFja2dyb3VuZC4gIEJ1dCBob3cgYWJvdXQgSS9PIGluIHRoZSBHVUk/CiAgICBDYXJlZnVsOiBkb24ndCB0dXJuIFZpbSBpbnRvIGEgc2hlbGwhCjQgICBBZGQgZmVhdHVyZSB0byBkaXNhYmxlIHVzaW5nIGEgc2hlbGwgb3IgZXh0ZXJuYWwgY29tbWFuZHMuCgoKTXVsdGlwbGUgV2luZG93czoKNyAgICJ2aW0gLW9PIGZpbGUgLi4uIiB1c2UgYm90aCBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCBzcGxpdHMuCjggICBBZGQgQ1RSTC1XIFQ6IGdvIHRvIHRoZSB0b3Agd2luZG93IGluIHRoZSBjb2x1bW4gb2YgdGhlIGN1cnJlbnQgd2luZG93LgogICAgQW5kIENUUkwtVyBCOiBnbyB0byBib3R0b20gd2luZG93Lgo3ICAgVXNlIENUUkwtVyA8VGFiPiwgbGlrZSBhbHQtdGFiLCB0byBzd2l0Y2ggYmV0d2VlbiBidWZmZXJzLiAgUmVwZWF0IDxUYWI+CiAgICB0byBzZWxlY3QgYW5vdGhlciBidWZmZXIgKG9ubHkgbG9hZGVkIG9uZXM/KSwgPEJTPiB0byBnbyBiYWNrLCA8RW50ZXI+IHRvCiAgICBzZWxlY3QgYnVmZmVyLCA8RXNjPiB0byBnbyBiYWNrIHRvIG9yaWdpbmFsIGJ1ZmZlci4KNyAgIEFkZCBhICd3aW5maXh3aWR0aCcgb3B0aW9uLCBzaW1pbGFyIHRvICd3aW5maXhoZWlnaHQnLgo2ICAgQWRkIGFuIG9wdGlvbiB0byByZXNpemUgdGhlIHNoZWxsIHdoZW4gc3BsaXR0aW5nIGFuZC9vciBjbG9zaW5nIGEgd2luZG93LgogICAgIjp2c3AiIHdvdWxkIG1ha2UgdGhlIHNoZWxsIHdpZGVyIGJ5IGFzIG1hbnkgY29sdW1ucyBhcyBuZWVkZWQgZm9yIHRoZSBuZXcKICAgIHdpbmRvdy4gIFNwZWNpZnkgYSBtYXhpbXVtIHNpemUgKG9yIHVzZSB0aGUgc2NyZWVuIHNpemUpLiAgIjpjbG9zZSIgd291bGQKICAgIHNocmluayB0aGUgc2hlbGwgYnkgYXMgbWFueSBjb2x1bW5zIGFzIGNvbWUgYXZhaWxhYmxlLiAoRGVtaXJlbCkKNyAgIFdoZW4gc3RhcnRpbmcgVmltIHNldmVyYWwgdGltZXMsIGluc3RhbnRpYXRlIGEgVmltIHNlcnZlciwgdGhhdCBhbGxvd3MKICAgIGNvbW11bmljYXRpb24gYmV0d2VlbiB0aGUgZGlmZmVyZW50IFZpbXMuICBGZWVscyBsaWtlIG9uZSBWaW0gcnVubmluZyB3aXRoCiAgICBtdWx0aXBsZSB0b3AtbGV2ZWwgd2luZG93cy4gIEVzcC4gdXNlZnVsIHdoZW4gVmltIGlzIHN0YXJ0ZWQgZnJvbSBhbiBJREUKICAgIHRvby4gIFJlcXVpcmVzIHNvbWUgZm9ybSBvZiBpbnRlciBwcm9jZXNzIGNvbW11bmljYXRpb24uCi0gICBTdXBwb3J0IGEgY29ubmVjdGlvbiB0byBhbiBleHRlcm5hbCB2aWV3ZXIuICBDb3VsZCBjYWxsIHRoZSB2aWV3ZXIKICAgIGF1dG9tYXRpY2FsbHkgYWZ0ZXIgc29tZSBzZWNvbmRzIG9mIG5vbi1hY3Rpdml0eSwgb3Igd2l0aCBhIGNvbW1hbmQuCiAgICBBbGxvdyBzb21lIHdheSBvZiByZXBvcnRpbmcgc2Nyb2xsaW5nIGFuZCBjdXJzb3IgcG9zaXRpb25pbmcgaW4gdGhlIHZpZXdlcgogICAgdG8gVmltLCBzbyB0aGF0IHRoZSBsaW5rIGJldHdlZW4gdGhlIHZpZXdlZCBhbmQgZWRpdGVkIHRleHQgY2FuIGJlIG1hZGUuCgoKTWFya3M6CjggICBXaGVuIGN1cnNvciBpcyBmaXJzdCBtb3ZlZCBiZWNhdXNlIG9mIHNjcm9sbGluZywgc2V0IGEgbWFyayBhdCB0aGlzCiAgICBwb3NpdGlvbi4gIChSaW1vbiBCYXJyKSAgVXNlICctLgo4ICAgQWRkIGEgY29tbWFuZCB0byBqdW1wIHRvIGEgbWFyayBhbmQgbWFrZSB0aGUgbW90aW9uIGluY2x1c2l2ZS4gIGcnbSBhbmQgZ2BtPwo4ICAgVGhlICciIG1hcmsgaXMgc2V0IHRvIHRoZSBmaXJzdCBsaW5lLCBldmVuIHdoZW4gZG9pbmcgIjpuZXh0IiBhIGZldyB0aW1lcy4KICAgIE9ubHkgc2V0IHRoZSAnIiBtYXJrIHdoZW4gdGhlIGN1cnNvciB3YXMgcmVhbGx5IG1vdmVkIGluIGEgZmlsZS4KOCAgIE1ha2UgYGAgYW5kICcnLCB3aGljaCB3b3VsZCBwb3NpdGlvbiB0aGUgbmV3IGN1cnNvciBwb3NpdGlvbiBpbiB0aGUgbWlkZGxlCiAgICBvZiB0aGUgd2luZG93LCByZXN0b3JlIHRoZSBvbGQgdG9wbGluZSAob3IgcmVsYXRpdmUgcG9zaXRpb24pIGZyb20gd2hlbgogICAgdGhlIG1hcmsgd2FzIHNldC4KNyAgIE1ha2UgYSBsaXN0IG9mIGZpbGUgbWFya3MgaW4gYSBzZXBhcmF0ZSB3aW5kb3cuICBGb3IgbGlzdGluZyBhbGwgYnVmZmVycywKICAgIG1hdGNoaW5nIHRhZ3MsIGVycm9ycywgZXRjLiAgTm9ybWFsIGNvbW1hbmRzIHRvIG1vdmUgYXJvdW5kLiAgQWRkIGNvbW1hbmRzCiAgICB0byBqdW1wIHRvIHRoZSBtYXJrIChpbiBjdXJyZW50IHdpbmRvdyBvciBuZXcgd2luZG93KS4gIFN0YXJ0IGl0IHdpdGgKICAgICI6YnJvd3NlIG1hcmtzIj8KNiAgIEFkZCBhIG1lbnUgdGhhdCBsaXN0cyB0aGUgTWFya3MgbGlrZSAiOm1hcmtzIi4gKEFtZXJpZ2UpCjcgICBGb3IgIjpqdW1wcyIsICI6dGFncyIgYW5kICI6bWFya3MiLCBmb3Igbm90IGxvYWRlZCBidWZmZXJzLCByZW1lbWJlciB0aGUKICAgIHRleHQgYXQgdGhlIG1hcmsuICBIaWdobGlnaHQgdGhlIGNvbHVtbiB3aXRoIHRoZSBtYXJrLgo3ICAgSGlnaGxpZ2h0IGVhY2ggbWFyayBpbiBzb21lIHdheSAoV2l0aCAiTWFyayIgaGlnaGxpZ2h0IGdyb3VwKS4KICAgIE9yIGRpc3BsYXkgbWFya3MgaW4gYSBzZXBhcmF0ZSBjb2x1bW4sIGxpa2UgJ251bWJlcicgZG9lcy4KNyAgIFVzZSBkIm0gdG8gZGVsZXRlIHJlY3Rhbmd1bGFyIGFyZWEgZnJvbSBjdXJzb3IgdG8gbWFyayBtIChsaWtlIFZpbGUncyBcbQogICAgY29tbWFuZCkuCjcgICBUcnkgdG8ga2VlcCBtYXJrcyBpbiB0aGUgc2FtZSBwb3NpdGlvbiB3aGVuOgogICAgLSByZXBsYWNpbmcgd2l0aCBhIGxpbmUgYnJlYWssIGxpa2UgaW4gIjpzL3BhdC9eTS8iLCBtb3ZlIG1hcmtzIGFmdGVyIHRoZQogICAgICBsaW5lIGJyZWFrIGNvbHVtbiB0byB0aGUgbmV4dCBsaW5lLiAoQWNldmVkbykKICAgIC0gaW5zZXJ0aW5nL2RlbGV0aW5nIGNoYXJhY3RlcnMgaW4gYSBsaW5lLgo1ICAgSW5jbHVkZSBtYXJrcyBmb3Igc3RhcnQvZW5kIG9mIHRoZSBjdXJyZW50IHdvcmQgYW5kIHNlY3Rpb24uICBVc2VmdWwgaW4KICAgIG1hcHBpbmdzLgo2ICAgQWRkICJ1bm5hbWVkIG1hcmsiIGZlYXR1cmU6IExpa2UgbWFya3MgZm9yIHRoZSAiOmciIGNvbW1hbmQsIGJ1dCBwbGFjZSBhbmQKICAgIHVucGxhY2UgdGhlbSB3aXRoIGNvbW1hbmRzIGJlZm9yZSBkb2luZyBzb21ldGhpbmcgd2l0aCB0aGUgbGluZXMuCiAgICBIaWdobGlnaHQgdGhlIG1hcmtlZCBsaW5lcyBzb21laG93LgoKCkRpZ3JhcGhzOgo3ICAgTWFrZSAiZ2EiIHNob3cgdGhlIGRpZ3JhcGggZm9yIGEgY2hhcmFjdGVyLCBpZiBpdCBleGlzdHMuCiAgICBBbHNvIHRoZSBrZXltYXA/Ci0gICBNYWtlIGl0IHBvc3NpYmxlIHRvIGVudGVyICJyPEMtRT4iIGFuZCAicjxDLVk+IiAoZ2V0IGNoYXJhY3RlciBmcm9tIGxpbmUKICAgIGJlbG93L2Fib3ZlKS4KLSAgIFVzZSBkaWdyYXBoIHRhYmxlIHRvIHRlbGwgVmltIGFib3V0IHRoZSBjb2xsYXRpbmcgc2VxdWVuY2Ugb2Ygc3BlY2lhbAogICAgY2hhcmFjdGVycz8KOCAgIEFkZCBjb21tYW5kIHRvIHJlbW92ZSBvbmUgb3IgbW9yZSAoYWxsKSBkaWdyYXBocy4gKEJyb3duKQo3ICAgU3VwcG9ydCBkaWZmZXJlbnQgc2V0cyBvZiBkaWdyYXBocyAoZGVwZW5kaW5nIG9uIHRoZSBjaGFyYWN0ZXIgc2V0PykuICBBdAogICAgbGVhc3QgTGF0aW4xL1VuaWNvZGUsIExhdGluLTIsIE1TLURPUyAoZXNwLiBmb3IgV2luMzIpLgoKCldyaXRpbmcgZmlsZXM6Ci0gICBJbiB2aW1fcmVuYW1lKCksIHNob3VsZCBsb2NrICJmcm9tIiBmaWxlIHdoZW4gZGVsZXRpbmcgInRvIiBmaWxlIGZvcgogICAgc3lzdGVtcyBvdGhlciB0aGFuIEFtaWdhLiAgQXZvaWRzIHByb2JsZW1zIHdpdGggdW5leHBlY3RlZCBsb25nbmFtZSB0bwogICAgc2hvcnRuYW1lIGNvbnZlcnNpb24uCjggICB3cml0ZSBtY2hfaXNkZXZpY2UoKSBmb3IgQW1pZ2EsIE1hYywgVk1TLCBldGMuCjggICBXaGVuIGFwcGVuZGluZyB0byBhIGZpbGUsIFZpbSBzaG91bGQgYWxzbyBtYWtlIGEgYmFja3VwIGFuZCBhICdwYXRjaG1vZGUnCiAgICBmaWxlLgo4ICAgJ2JhY2t1cHNraXAnIGRvZXNuJ3Qgd3JpdGUgYSBiYWNrdXAgZmlsZSBhdCBhbGwsIGEgYml0IGRhbmdlcm91cyBmb3Igc29tZQogICAgYXBwbGljYXRpb25zLiAgQWRkICdiYWNrdXBlbHNld2hlcmUnIHRvIHdyaXRlIGEgYmFja3VwIGZpbGUgaW4gYW5vdGhlcgogICAgZGlyZWN0b3J5PyAgT3IgYWRkIGEgZmxhZyB0byAnYmFja3VwZGlyJz8KNyAgIFRoZSAnZGlyZWN0b3J5JyBvcHRpb24gc3VwcG9ydHMgY2hhbmdpbmcgcGF0aCBzZXBhcmF0b3JzIHRvICIlIiB0byBtYWtlCiAgICBmaWxlIG5hbWVzIHVuaXF1ZSwgYWxzbyBzdXBwb3J0IHRoaXMgZm9yICdiYWNrdXBkaXInLiAoTWlrb2xhaiBNYWNob3dza2kpCjYgICBBZGQgYW4gb3B0aW9uIHRvIHdyaXRlIGEgbmV3LCBudW1iZXJlZCwgYmFja3VwIGZpbGUgZWFjaCB0aW1lLiAgTGlrZQogICAgJ3BhdGNobW9kZScsIGUuZy4sICdiYWNrdXBtb2RlJy4KNiAgIE1ha2UgaXQgcG9zc2libGUgdG8gd3JpdGUgJ3BhdGNobW9kZScgZmlsZXMgdG8gYSBkaWZmZXJlbnQgZGlyZWN0b3J5LgogICAgRS5nLiwgIjpzZXQgcGF0Y2htb2RlPX4vYmFja3Vwcy8qLm9yaWciLiAoVGhvbWFzKQo2ICAgQWRkIGFuIG9wdGlvbiB0byBwcmVwZW5kIHNvbWV0aGluZyB0byB0aGUgYmFja3VwIGZpbGUgbmFtZS4gIEUuZy4sICIjIi4KICAgIE9yIG1heWJlIGFsbG93IGEgZnVuY3Rpb24gdG8gbW9kaWZ5IHRoZSBiYWNrdXAgZmlsZSBuYW1lPwo4ICAgT25seSBtYWtlIGEgYmFja3VwIHdoZW4gb3ZlcndyaXRpbmcgYSBmaWxlIGZvciB0aGUgZmlyc3QgdGltZS4gIEF2b2lkcwogICAgbG9zaW5nIHRoZSBvcmlnaW5hbCB3aGVuIHdyaXRpbmcgdHdpY2UuIChTbG9vdG1hbikKNyAgIE9uIG5vbi1Vbml4IG1hY2hpbmVzLCBhbHNvIG92ZXJ3cml0ZSB0aGUgb3JpZ2luYWwgZmlsZSBpbiBzb21lIHNpdHVhdGlvbnMKICAgIChmaWxlIHN5c3RlbSBmdWxsLCBpdCdzIGEgbGluayBvbiBhbiBORlMgcGFydGl0aW9uKS4KNyAgIFdoZW4gZWRpdGluZyBhIGZpbGUsIGNoZWNrIHRoYXQgaXQgaGFzIGJlZW4gY2hhbmdlIG91dHNpZGUgb2YgVmltIG1vcmUKICAgIG9mdGVuLCBub3Qgb25seSB3aGVuIHdyaXRpbmcgb3ZlciBpdC4gIEUuZy4sIGF0IHRoZSB0aW1lIHRoZSBzd2FwIGZpbGUgaXMKICAgIGZsdXNoZWQuICBPciBldmVyeSB0ZW4gc2Vjb25kcyBvciBzbyAodXNlIHRoZSB0aW1lIG9mIGRheSwgY2hlY2sgaXQgYmVmb3JlCiAgICB3YWl0aW5nIGZvciBhIGNoYXJhY3RlciB0byBiZSB0eXBlZCkuCjggICBXaGVuIGEgZmlsZSB3YXMgY2hhbmdlZCBzaW5jZSBlZGl0aW5nIHN0YXJ0ZWQsIHNob3cgdGhpcyBpbiB0aGUgc3RhdHVzCiAgICBsaW5lIG9mIHRoZSB3aW5kb3csIGxpa2UgIlt0aW1lXSIuCiAgICBNYWtlIGl0IGVhc2llciB0byByZWxvYWQgYWxsIG91dGRhdGVkIGZpbGVzIHRoYXQgZG9uJ3QgaGF2ZSBjaGFuZ2VzLgogICAgQXV0b21hdGljIGFuZC9vciB3aXRoIGEgY29tbWFuZC4KCgpTdWJzdGl0dXRlOgo4ICAgU3Vic3RpdHV0ZSB3aXRoIGhleC91bmljb2RlIG51bWJlciAiXCV4ZmYiIGFuZCAiXCV1YWJjZCIuICBKdXN0IGxpa2UKICAgICJcJXVhYmNkIiBpbiBzZWFyY2ggcGF0dGVybi4KOCAgIE1ha2UgaXQgZWFzaWVyIHRvIHJlcGxhY2UgaW4gYWxsIGZpbGVzIGluIHRoZSBhcmd1bWVudCBsaXN0LiAgRS5nLjoKICAgICI6YXJnc3ViL29sZHdvcmQvbmV3d29yZC8iLiAgV29ya3MgbGlrZSAiOmFyZ2RvICVzL29sZHdvcmQvbmV3d29yZC9nfHciLgotICAgOnMvLy9wIHByaW50cyB0aGUgbGluZSBhZnRlciBhIHN1YnN0aXR1dGlvbi4KLSAgIFdpdGggOnMvLy9jIHJlcGxhY2UgXCYsIH4sIGV0Yy4gd2hlbiBzaG93aW5nIHRoZSByZXBsYWNlbWVudCBwYXR0ZXJuLgo4ICAgV2l0aCA6cy8vL2MgYWxsb3cgc2Nyb2xsaW5nIGhvcml6b250YWxseSB3aGVuICdub3dyYXAnIGlzIGVmZmVjdGl2ZS4KICAgIEFsc28gYWxsb3cgYSBjb3VudCBiZWZvcmUgdGhlIHNjcm9sbGluZyBrZXlzLgotICAgQWRkIG51bWJlciBvcHRpb24gdG8gIjpzLy8yIjogcmVwbGFjZSBzZWNvbmQgb2NjdXJyZW5jZSBvZiBzdHJpbmc/ICBPcjoKICAgIDpzLy8vTiBzdWJzdGl0dXRlcyBOIHRpbWVzLgotICAgQWRkIGFuc3dlcnMgdG8gIjpzdWJzdGl0dXRlIiB3aXRoICdjJyBmbGFnLCB1c2VkIGluIGEgIjpnbG9iYWwiLCBlLmcuOgogICAgIjpnL3BhdDEvcy9wYXQyL3BhdDMvY2ciOiAnQScgZG8gYWxsIHJlbWFpbmluZyByZXBsYWNlbWVudHMsICdRJyBkb24ndCBkbwogICAgYW55IHJlcGxhY2VtZW50cywgJ3UnIHVuZG8gbGFzdCBzdWJzdGl0dXRpb24uCjcgICBTdWJzdGl0dXRlIGluIGEgYmxvY2sgb2YgdGV4dC4gIFVzZSB7bGluZX0ue2NvbHVtbn0gbm90YXRpb24gaW4gYW4gRXgKICAgIHJhbmdlLCBlLmcuOiAiOjEuMywkLjVzIiBtZWFucyB0byBzdWJzdGl0dXRlIGZyb20gbGluZSAxIGNvbHVtbiAzIHRvIHRoZQogICAgbGFzdCBsaW5lIGNvbHVtbiA1Lgo1ICAgQWRkIGNvbW1hbmRzIHRvIGJvb2ttYXJrIGxpbmVzLCBkaXNwbGF5IGJvb2ttYXJrcywgcmVtb3ZlIGJvb2ttYXJrcywKICAgIG9wZXJhdGUgb24gbGluZXMgd2l0aCBib29rbWFya3MsIGV0Yy4gIExpa2UgIjpnbG9iYWwiIGJ1dCB3aXRoIHRoZQogICAgcG9zc2liaWxpdHkgdG8ga2VlcCB0aGUgYm9va21hcmtzIGFuZCB1c2UgdGhlbSB3aXRoIHNldmVyYWwgY29tbWFuZHMuCiAgICAoU3RhbmlzbGF2IFNpdGFyKQoKCk1vdXNlIHN1cHBvcnQ6CjggICBBZGQgJ28nIGZsYWcgdG8gJ21vdXNlJz8KNyAgIEJlIGFibGUgdG8gc2V0IGEgJ21vdXNlc2hhcGUnIGZvciB0aGUgcG9wdXAgbWVudS4KOCAgIEFkZCAnbW91c2UnIGZsYWcsIHdoaWNoIHNldHMgYSBiZWhhdmlvciBsaWtlIFZpc3VhbCBtb2RlLCBidXQgYXV0b21hdGljCiAgICB5YW5raW5nIGF0IHRoZSBidXR0b24tdXAgZXZlbnQuICBPciBsaWtlIFNlbGVjdCBtb2RlLCBidXQgdHlwaW5nIGdldHMgeW91CiAgICBvdXQgb2YgU2VsZWN0IG1vZGUsIGluc3RlYWQgb2YgcmVwbGFjaW5nIHRoZSB0ZXh0LiAoQmhhc2thcikKNyAgIENoZWNrb3V0IHN5c21vdXNlKCkgZm9yIEZyZWVCU0QgY29uc29sZSBtb3VzZSBzdXBwb3J0LgotICAgSW1wbGVtZW50IG1vdXNlIHN1cHBvcnQgZm9yIHRoZSBBbWlnYSBjb25zb2xlLgotICAgVXNpbmcgcmlnaHQgbW91c2UgYnV0dG9uIHRvIGV4dGVuZCBhIGJsb2Nrd2lzZSBzZWxlY3Rpb24gc2hvdWxkIGF0dGFjaCB0bwogICAgdGhlIG5lYXJlc3QgY29ybmVyIG9mIHRoZSByZWN0YW5nbGUgKGZvdXIgcG9zc2libGUgY29ybmVycykuCi0gICBQcmVjZWRlIG1vdXNlIGNsaWNrIGJ5IGEgbnVtYmVyIHRvIHNpbXVsYXRlIGRvdWJsZSBjbGlja3M/IT8KLSAgIFdoZW4gbW91c2UgY2xpY2sgYWZ0ZXIgJ3InIGNvbW1hbmQsIGdldCBjaGFyYWN0ZXIgdGhhdCB3YXMgcG9pbnRlZCB0by4KCgpDcnlwdCBhbmQgc2VjdXJpdHk6CjggICBBbHNvIGNyeXB0IHRoZSBzd2FwZmlsZSwgZWFjaCBibG9jayBzZXBhcmF0ZWx5LiAgQ2hhbmdlIG1mX3dyaXRlKCkgYW5kCiAgICBtZl9yZWFkKCkuICBIb3cgdG8gZ2V0IGJfcF9rZXkgdG8gdGhlc2UgZnVuY3Rpb25zPwoKCkFyZ3VtZW50IGxpc3Q6CjYgICBBZGQgY29tbWFuZCB0byBwdXQgYWxsIGZpbGVuYW1lcyBmcm9tIHRoZSB0YWcgZmlsZXMgaW4gdGhlIGFyZ3VtZW50IGxpc3QuCiAgICBXaGVuIGdpdmVuIGFuIGFyZ3VtZW50LCBvbmx5IHVzZSB0aGUgZmlsZXMgd2hlcmUgdGhhdCBhcmd1bWVudCBtYXRjaGVzCiAgICAobGlrZSBgZ3JlcCAtbCBpZGVudGApIGFuZCBqdW1wIHRvIHRoZSBmaXJzdCBtYXRjaC4KNiAgIEFkZCBjb21tYW5kIHRvIGZvcm0gYW4gYXJncyBsaXN0IGZyb20gYWxsIHRoZSBidWZmZXJzPwoKClJlZ2lzdGVyczoKOCAgIERvbid0IGRpc3BsYXkgZW1wdHkgcmVnaXN0ZXJzIHdpdGggIjpkaXNwbGF5Ii4gKEV0aWVubmUpCjggICBNYWtlIHRoZSAjIHJlZ2lzdGVyIHdyaXRhYmxlLCBzbyB0aGF0IGl0IGNhbiBiZSByZXN0b3JlZCBhZnRlciBqdW1waW5nCiAgICBhcm91bmQgaW4gd2luZG93cy4KOCAgIEFkZCBwdXQgY29tbWFuZCB0aGF0IG92ZXJ3cml0ZXMgZXhpc3RpbmcgdGV4dC4gIFNob3VsZCBhbHNvIHdvcmsgZm9yCiAgICBibG9ja3MuICBVc2VmdWwgdG8gbW92ZSB0ZXh0IGFyb3VuZCBpbiBhIHRhYmxlLiAgV29ya3MgbGlrZSB1c2luZyAiUiBeUiByIgogICAgZm9yIGV2ZXJ5IGxpbmUuCjYgICBXaGVuIHlhbmtpbmcgaW50byB0aGUgdW5uYW1lZCByZWdpc3RlcnMgc2V2ZXJhbCB0aW1lcywgc29tZWhvdyBtYWtlIHRoZQogICAgcHJldmlvdXMgY29udGVudHMgYWxzbyBhdmFpbGFibGUgKGxpa2UgaXQncyBkb25lIGZvciBkZWxldGluZykuICBXaGF0CiAgICByZWdpc3RlciBuYW1lcyB0byB1c2U/ICBnIjEsIGciMiwgZXRjLj8KLSAgIFdoZW4gYXBwZW5kaW5nIHRvIGEgcmVnaXN0ZXIsIGFsc28gcmVwb3J0IHRoZSB0b3RhbCByZXN1bHRpbmcgbnVtYmVyIG9mCiAgICBsaW5lcy4gIE9yIGp1c3Qgc2F5ICI5OSBtb3JlIGxpbmVzIHlhbmtlZCIsIGFkZCB0aGUgIm1vcmUiLgotICAgV2hlbiBpbnNlcnRpbmcgYSByZWdpc3RlciBpbiBJbnNlcnQgbW9kZSB3aXRoIENUUkwtUiwgZG9uJ3QgaW5zZXJ0IGNvbW1lbnQKICAgIGxlYWRlciB3aGVuIGxpbmUgd3JhcHM/Ci0gICBUaGUgIjpAciIgY29tbWFuZHMgc2hvdWxkIHRha2UgYSByYW5nZSBhbmQgZXhlY3V0ZSB0aGUgcmVnaXN0ZXIgZm9yIGVhY2gKICAgIGxpbmUgaW4gdGhlIHJhbmdlLgotICAgQWRkICJQIiBjb21tYW5kIHRvIGluc2VydCBjb250ZW50cyBvZiB1bm5hbWVkIHJlZ2lzdGVyLCBtb3ZlIHNlbGVjdGVkIHRleHQKCXRvIHBvc2l0aW9uIG9mIHByZXZpb3VzIGRlbGV0ZWQgKHRvIHN3YXAgZm9vIGFuZCBiYXIgaW4gIiArIGZvbyIpCjggICBTaG91bGQgYmUgYWJsZSB0byB5YW5rIGFuZCBkZWxldGUgaW50byB0aGUgIi8gcmVnaXN0ZXIuCiAgICBIb3cgdG8gdGFrZSBjYXJlIG9mIHRoZSBmbGFncyAob2Zmc2V0LCBtYWdpYyk/CgoKRGVidWcgbW9kZToKNyAgIEFkZCBzb21ldGhpbmcgdG8gZW5hYmxlIGRlYnVnZ2luZyB3aGVuIGEgcmVtb3RlIG1lc3NhZ2UgaXMgcmVjZWl2ZWQuCjggICBBZGQgYnJlYWtwb2ludHMgZm9yIHNldHRpbmcgYW4gb3B0aW9uCjggICBBZGQgYnJlYWtwb2ludHMgZm9yIGFzc2lnbmluZyB0byBhIHZhcmlhYmxlLgo3ICAgQWRkIGEgd2F0Y2hwb2ludCBpbiB0aGUgZGVidWcgbW9kZTogQW4gZXhwcmVzc2lvbiB0aGF0IGJyZWFrcyBleGVjdXRpb24KICAgIHdoZW4gZXZhbHVhdGluZyB0byBub24temVyby4gIEFkZCB0aGUgIndhdGNoYWRkIGV4cHIiIGNvbW1hbmQsIHN0b3Agd2hlbgogICAgdGhlIHZhbHVlIG9mIHRoZSBleHByZXNzaW9uIGNoYW5nZXMuICAiOndhdGNoZGVsIiBkZWxldGVzIGFuIGl0ZW0sCiAgICAiOndhdGNobGlzdCIgbGlzdHMgdGhlIGl0ZW1zLiAoQ2hhcmxlcyBDYW1wYmVsbCkKNyAgIFN0b3JlIHRoZSBoaXN0b3J5IGZyb20gZGVidWcgbW9kZSBpbiB2aW1pbmZvLgo3ICAgTWFrZSB0aGUgZGVidWcgbW9kZSBoaXN0b3J5IGF2YWlsYWJsZSB3aXRoIGhpc3RnZXQoKSBldCBhbC4KCgpWYXJpb3VzIGltcHJvdmVtZW50czoKNyAgIEFkZCBwbHVnaW5zIGZvciBmb3JtYXR0aW5nPyAgU2hvdWxkIGJlIGFibGUgdG8gbWFrZSBhIGNob2ljZSBkZXBlbmRpbmcgb24KICAgIHRoZSBsYW5ndWFnZSBvZiBhIGZpbGUgKEVuZ2xpc2gvS29yZWFuL0phcGFuZXNlL2V0Yy4pLgogICAgU2V0dGluZyB0aGUgJ2xhbmdmb3JtYXQnIG9wdGlvbiB0byAiY2hpbmVzZSIgd291bGQgbG9hZCB0aGUKICAgICJmb3JtYXQvY2hpbmVzZS52aW0iIHBsdWdpbi4KICAgIFRoZSBwbHVnaW4gd291bGQgc2V0ICdmb3JtYXRleHByJyBhbmQgZGVmaW5lIHRoZSBmdW5jdGlvbiBiZWluZyBjYWxsZWQuCiAgICBFZHdhcmQgTC4gRm94IGV4cGxhaW5zIGhvdyBpdCBzaG91bGQgYmUgZG9uZSBmb3IgbW9zdCBBc2lhbiBsYW5ndWFnZXMuCiAgICAoMjAwNSBOb3YgMjQpCjcgICBbdCB0byBtb3ZlIHRvIHByZXZpb3VzIHhtbC9odG1sIHRhZyAobGlrZSAidmF0b3YiKSwgXXQgdG8gbW92ZSB0byBuZXh0CiAgICAoInZhdHYiKS4KNyAgIFs8IHRvIG1vdmUgdG8gcHJldmlvdXMgeG1sL2h0bWwgdGFnLCBlLmcuLCBwcmV2aW91cyA8bGk+LiBdPCB0byBtb3ZlIHRvCiAgICBuZXh0IDxsaT4sIF08IHRvIG5leHQgPC9saT4sIFs8IHRvIHByZXZpb3VzIDwvbGk+Lgo4ICAgQWRkICI6cmVuYW1lIiBjb21tYW5kOiByZW5hbWUgdGhlIGZpbGUgb2YgdGhlIGN1cnJlbnQgYnVmZmVyIGFuZCByZW5hbWUKICAgIHRoZSBidWZmZXIuICBCdWZmZXIgbWF5IGJlIG1vZGlmaWVkLgotICAgQWRkICViIHRvICdlcnJvcmZvcm1hdCc6IGJ1ZmZlciBudW1iZXIuIChZZWdhcHBhbiBMYWtzaG1hbmFuIC8gU3VyZXNoCiAgICBHb3ZpbmRhY2hhcikKNiAgIEluIHRoZSBxdWlja2ZpeCB3aW5kb3cgc3RhdHVzbGluZSBhZGQgdGhlIGNvbW1hbmQgdXNlZCB0byBnZXQgdGhlIGxpc3Qgb2YKICAgIGVycm9ycywgZS5nLiAiOm1ha2UgZm9vIiwgIjpncmVwIHNvbWV0aGluZyAqLmMiLgo2ICAgUHl0aG9uIGludGVyZmFjZTogYWRkIHZpbS5tZXNzYWdlKCkgZnVuY3Rpb24uIChNaWNoYWwgVml0ZWNlaywgMjAwMiBOb3YgNSkKNyAgIFN1cHBvcnQgdXNpbmcgIjp2ZXJ0IiB3aXRoIFVzZXIgY29tbWFuZHMuICBBZGQgZXhwYW5kYWJsZSBpdGVtcyA8dmVydD4uCiAgICBEbyB0aGUgc2FtZSBmb3IgIjpicm93c2UiIGFuZCAiOmNvbmZpcm0iPwogICAgRm9yICI6c2lsZW50IiBhbmQgIjpkZWJ1ZyIgYXBwbHkgdG8gdGhlIHdob2xlIHVzZXIgY29tbWFuZC4KNyAgIEFsbG93IGEgd2luZG93IG5vdCB0byBoYXZlIGEgc3RhdHVzbGluZS4gIE1ha2VzIGl0IHBvc3NpYmxlIHRvIHVzZSBhCiAgICB3aW5kb3cgYXMgYSBidWZmZXItdGFiIHNlbGVjdGlvbi4KNyAgIEFkZCBhbiBpbnZpc2libGUgYnVmZmVyIHdoaWNoIGNhbiBiZSBlZGl0ZWQuICBGb3IgdXNlIGluIHNjcmlwdHMgdGhhdCB3YW50CiAgICB0byBtYW5pcHVsYXRlIHRleHQgd2l0aG91dCBjaGFuZ2luZyB0aGUgd2luZG93IGxheW91dC4KOCAgIEFkZCBhIGNvbW1hbmQgdG8gcmV2ZXJ0IHRvIHRoZSBzYXZlZCB2ZXJzaW9uIG9mIGZpbGU7IHVuZG8gb3IgcmVkbyB1bnRpbAogICAgYWxsIGNoYW5nZXMgYXJlIGdvbmUuCjcgICBBZGQgYSAiOmNwZmlsZSIsIGdvIGluIHRoZSBvdGhlciBkaXJlY3Rpb24gYXMgIjpjbmZpbGUiLgo2ICAgInZpbSAtcSAtIiBzaG91bGQgcmVhZCB0aGUgbGlzdCBvZiBlcnJvcnMgZnJvbSBzdGRpbi4gKEdhdXRhbSBNdWR1bnVyaSkKOCAgIEFkZCAiLS1yZW1vdGUtZmFpbCI6IFdoZW4gY29udGFjdGluZyB0aGUgc2VydmVyIGZhaWxzLCBleGl0IFZpbS4KICAgIEFkZCAiLS1yZW1vdGUtc2VsZiI6IFdoZW4gY29udGFjdGluZyB0aGUgc2VydmVyIGZhaWxzLCBkbyBpdCBpbiB0aGlzIFZpbS4KICAgIE92ZXJydWxlcyB0aGUgZGVmYXVsdCBvZiAiLS1yZW1vdGUtc2VuZCIgdG8gZmFpbCBhbmQgIi0tcmVtb3RlIiB0byBkbyBpdAogICAgaW4gdGhpcyBWaW0uCjggICBXaGVuIFZpbSB3YXMgc3RhcnRlZCB3aXRob3V0IGEgc2VydmVyLCBtYWtlIGl0IHBvc3NpYmxlIHRvIHN0YXJ0IG9uZSwgYXMKICAgIGlmIHRoZSAiLS1zZXJ2ZXJuYW1lIiBhcmd1bWVudCB3YXMgZ2l2ZW4uICAiOnN0YXJ0c2VydmVyIDxuYW1lPiI/CjggICBObyBhZGRyZXNzIHJhbmdlIGNhbiBiZSB1c2VkIGJlZm9yZSB0aGUgY29tbWFuZCBtb2RpZmllcnMuICBUaGlzIG1ha2VzCiAgICB0aGVtIGRpZmZpY3VsdCB0byB1c2UgaW4gYSBtZW51IGZvciBWaXN1YWwgbW9kZS4gIEFjY2VwdCB0aGUgcmFuZ2UgYW5kCiAgICBoYXZlIGl0IGFwcGx5IHRvIHRoZSBmb2xsb3dpbmcgY29tbWFuZC4KOCAgIEFkZCB0aGUgcG9zc2liaWxpdHkgdG8gc2V0ICdmaWxlZm9ybWF0cycgdG8gZm9yY2UgYSBmb3JtYXQgYW5kIHN0cmlwIG90aGVyCiAgICBDUiBjaGFyYWN0ZXJzLiAgRm9yIGV4YW1wbGUsIGZvciAiZG9zIiBmaWxlcyByZW1vdmUgQ1IgY2hhcmFjdGVycyBhdCB0aGUKICAgIGVuZCBvZiB0aGUgbGluZSwgc28gdGhhdCBhIGZpbGUgd2l0aCBtaXhlZCBsaW5lIGVuZGluZ3MgaXMgY2xlYW5lZCB1cC4KICAgIFRvIGp1c3Qgbm90IGRpc3BsYXkgdGhlIENSIGNoYXJhY3RlcnM6IEFkZCBhIGZsYWcgdG8gJ2Rpc3BsYXknPwo3ICAgU29tZSBjb21waWxlcnMgZ2l2ZSBlcnJvciBtZXNzYWdlcyBpbiB3aGljaCB0aGUgZmlsZSBuYW1lIGRvZXMgbm90IGhhdmUgYQogICAgcGF0aC4gIEJlIGFibGUgdG8gc3BlY2lmeSB0aGF0ICdwYXRoJyBpcyB1c2VkIGZvciB0aGVzZSBmaWxlcy4KNyAgIFh0ZXJtIHNlbmRzIDxFc2M+TzNGIGZvciA8TS1FbmQ+LiAgU2ltaWxhcmx5IGZvciBvdGhlciA8TS1Ib21lPiwgPE0tTGVmdD4sCiAgICBldGMuICBDb21iaW5hdGlvbnMgb2YgQWx0LCBDdHJsIGFuZCBTaGlmdCBhcmUgYWxzbyBwb3NzaWJsZS4gIFJlY29nbml6ZQogICAgdGhlc2UgdG8gYXZvaWQgaW5zZXJ0aW5nIHRoZSByYXcgYnl0ZSBzZXF1ZW5jZSwgaGFuZGxlIGxpa2UgdGhlIGtleQogICAgd2l0aG91dCBtb2RpZmllciAodW5sZXNzIG1hcHBlZCkuCjggICBBZGQgIjpicmVha2RlbCAqIjogZGVsZXRlIGFsbCBicmVha3BvaW50cy4KNyAgIFN1cHBvcnQgIjpicm93c2UgZWRpdCIgaW4gY29uc29sZSwgdXNpbmcgZXhwbG9yZXIudmltPwo2ICAgQWRkICJnRyI6IGxpa2Ugd2hhdCAiZ2oiIGlzIHRvICJqIjogZ28gdG8gdGhlIE4ndGggd2luZG93IGxpbmUuCjggICBBZGQgY29tbWFuZCBsaWtlICI6bm9ybWFsIiB0aGF0IGFjY2VwdHMgPEtleT4gbm90YXRpb24gbGlrZSAiOm1hcCIuCjkgICBTdXBwb3J0IEFDTHMgb24gbW9yZSBzeXN0ZW1zLgo3ICAgQWRkIE1vZGVNc2dWaXN1YWwsIE1vZGVNc2dJbnNlcnQsIGV0Yy4gc28gdGhhdCBlYWNoIG1vZGUgbWVzc2FnZSBjYW4gYmUKICAgIGhpZ2hsaWdodGVkIGRpZmZlcmVudGx5Lgo3ICAgQWRkIGEgbWVzc2FnZSBhcmVhIGZvciB0aGUgdXNlci4gIFNldCBzb21lIG9wdGlvbiB0byByZXNlcnZlIHNwYWNlIChhYm92ZQogICAgdGhlIGNvbW1hbmQgbGluZT8pLiAgVXNlIGFuICI6ZWNob3VzZXIiIGNvbW1hbmQgdG8gZGlzcGxheSB0aGUgbWVzc2FnZQogICAgKHRydW5jYXRlZCB0byBmaXQgaW4gdGhlIHNwYWNlKS4KNyAgIEFkZCAlcyB0byAna2V5d29yZHByZyc6IHJlcGxhY2Ugd2l0aCB3b3JkIHVuZGVyIHRoZSBjdXJzb3IuIChaZWxsbmVyKQo4ICAgU3VwcG9ydCBwcmludGluZyBvbiBVbml4LiAgQ2FuIHVzZSAibHBhbnNpLmMiIGFzIGFuIGV4YW1wbGUuIChCb29rb3V0KQo4ICAgQWRkIHB1dCBjb21tYW5kIHRoYXQgcmVwbGFjZXMgdGhlIHRleHQgdW5kZXIgaXQuICBFc3AuIGZvciBibG9ja3dpc2UKICAgIFZpc3VhbCBtb2RlLgo3ICAgRW5oYW5jZSB0ZXJtcmVzcG9uc2Ugc3R1ZmY6IEFkZCB0X0NWKD8pOiBwYXR0ZXJuIG9mIHRlcm0gcmVzcG9uc2UsIHVzZQogICAgcmVnZXhwOiAiXGVcW1s+P11bMC05O10qYyIsIGJ1dCBvbmx5IGNoZWNrIGp1c3QgYWZ0ZXIgc2VuZGluZyB0X1JWLgo3ICAgQWRkICJnfCIgY29tbWFuZDogbW92ZSB0byBOJ3RoIGNvbHVtbiBmcm9tIHRoZSBsZWZ0IG1hcmdpbiAoYWZ0ZXIgd3JhcHBpbmcKICAgIGFuZCBhcHBseWluZyAnbGVmdGNvbCcpLiAgV29ya3MgYXMgInwiIGxpa2Ugd2hhdCAiZzAiIGlzIHRvICIwIi4KNyAgIFN1cHBvcnQgc2V0dGluZyAnZXF1YWxwcmcnIHRvIGEgdXNlciBmdW5jdGlvbiBuYW1lLgo3ICAgSGlnaGxpZ2h0IHRoZSBjaGFyYWN0ZXJzIGFmdGVyIHRoZSBlbmQtb2YtbGluZSBkaWZmZXJlbnRseS4KNyAgIFdoZW4gJ3doaWNod3JhcCcgY29udGFpbnMgImwiLCAiJGRsIiBzaG91bGQgam9pbiBsaW5lcz8KOCAgIEFkZCBhbiBhcmd1bWVudCB0byBjb25maWd1cmUgdG8gdXNlICRDRkxBR1MgYW5kIG5vdCBtb2RpZnkgaXQ/IChNb29uZXkpCjggICBFbmFibGluZyBmZWF0dXJlcyBpcyBhIG1peCBvZiBjb25maWd1cmUgYXJndW1lbnRzIGFuZCBkZWZpbmVzIGluCiAgICBmZWF0dXJlLmguICBIb3cgdG8gbWFrZSB0aGlzIGNvbnNpc3RlbnQ/ICBGZWF0dXJlLmggaXMgcmVxdWlyZWQgZm9yCiAgICBub24tdW5peCBzeXN0ZW1zLiAgUGVyaGFwcyBsZXQgY29uZmlndXJlIGRlZmluZSBDT05GX1hYWCwgYW5kIHVzZSAjaWZkZWYKICAgIENPTkZfWFhYIGluIGZlYXR1cmUuaD8gIFRoZW4gd2hhdCBzaG91bGQgbWluLWZlYXR1cmVzIGFuZCBtYXgtZmVhdHVyZXMgZG8/CjggICBBZGQgImdeRSIgYW5kICJnXlkiLCB0byBzY3JvbGwgYSBzY3JlZW4tZnVsbCBsaW5lIHVwIGFuZCBkb3duLgo2ICAgQWRkICI6dGltZXIiIGNvbW1hbmQsIHRvIHNldCBhIGNvbW1hbmQgdG8gYmUgZXhlY3V0ZWQgYXQgYSBjZXJ0YWluCiAgICBpbnRlcnZhbCwgb3Igb25jZSBhZnRlciBzb21lIHRpbWUgaGFzIGVsYXBzZWQuIChBYXJvbikKICAgIFBlcmhhcHMgYW4gYXV0b2NvbW1hbmQgZXZlbnQgbGlrZSBDdXJzb3JIb2xkIGlzIGJldHRlcj8KOCAgIEFkZCAiOmNvbmZpcm0iIGhhbmRsaW5nIGluIG9wZW5fZXhmaWxlKCksIGZvciB3aGVuIGZpbGUgYWxyZWFkeSBleGlzdHMuCjggICBXaGVuIHF1aXR0aW5nIHdpdGggY2hhbmdlZCBmaWxlcywgbWFrZSB0aGUgZGlhbG9nIGxpc3QgdGhlIGNoYW5nZWQgZmlsZQogICAgYW5kIGFsbG93ICJ3cml0ZSBhbGwiLCAiZGlzY2FyZCBhbGwiLCAid3JpdGUgc29tZSIuICBUaGUgbGFzdCBvbmUgd291bGQKICAgIHRoZW4gYXNrICJ3cml0ZSIgb3IgImRpc2NhcmQiIGZvciBlYWNoIGNoYW5nZWQgZmlsZS4gIFBhdGNoIGluIEhpZXJBc3Npc3QKICAgIGRvZXMgc29tZXRoaW5nIGxpa2UgdGhpcy4gKFNoYWgpCjcgICBVc2UgZ3Jvd2FycmF5IGZvciByZXBsYWNlIHN0YWNrLgo3ICAgSGF2ZSBhIGxvb2sgYXQgdmlIIChIZWxsZW5pYyBvciBHcmVlayB2ZXJzaW9uIG9mIFZpbSkuICBCdXQgYSBzb2x1dGlvbgogICAgb3V0c2lkZSBvZiBWaW0gbWlnaHQgYmUgc2F0aXNmYWN0b3J5IChIYXJpdHNpcykuCjMgICBNYWtlICIyZCUiIHdvcmsgbGlrZSAiZCVkJSIgaW5zdGVhZCBvZiAiZDIlIj8KOCAgIE1ha2UgIm1vcmUiIHByb21wdCBhY2NlcHQgY29tbWFuZCBjaGFyYWN0ZXJzLCBsaWtlICJoaXQtZW50ZXIiIHByb21wdD8KICAgIE9yIGV4dGVuZCBpdCB3aXRoIG1vcmUgY29tbWFuZHMsIGxpa2UgImxlc3MiOiAnYicgZm9yIGJhY2ssICdqJyBmb3Igb25lCiAgICBsaW5lIGRvd24sIGV0Yy4KOCAgIEZvciB0aGUgIi0tbW9yZS0tIiBwcm9tcHQsIHN1cHBvcnQgdGhlICdiJ2FjayBjb21tYW5kIGZvciBtb3JlIGNvbW1hbmRzLgogICAgUG9zc2libGUgaW1wbGVtZW50YXRpb246IERvIGl0IGF0IGEgdmVyeSBsb3cgbGV2ZWwsIGNhY2hpbmcgdGhlIGxpbmVzIHRoYXQKICAgIGFyZSBvbiB0aGUgc2NyZWVuICh3aXRoIGhpZ2hsaWdodCBhdHRyaWJ1dGVzKS4gIEF2b2lkcyB0aGF0IGNoYW5nZXMgaGF2ZQogICAgdG8gYmUgbWFkZSBmb3IgYWxsIGZ1bmN0aW9ucyB0aGF0IGxpc3Qgc29tZXRoaW5nLgo3ICAgImcgQ1RSTC1PIiBqdW1wcyBiYWNrIHRvIGxhc3QgdXNlZCBidWZmZXIuCVNraXAgQ1RSTC1PIGp1bXBzIGluIHRoZSBzYW1lCiAgICBidWZmZXIuICBNYWtlIGp1bXBsaXN0IHJlbWVtYmVyIHRoZSBsYXN0IHRlbiBhY2Nlc3NlZCBidWZmZXJzPwotICAgS2VlcCBhIGxpc3Qgb2YgbW9zdCByZWNlbnRseSB1c2VkIGZpbGVzIGZvciBlYWNoIHdpbmRvdywgdXNlICJbbyIgdG8gZ28KICAgIGJhY2sgKG9sZGVyIGZpbGUpIGFuZCAiXW4iIHRvIGdvIGZvcndhcmQgKG5ld2VyIGZpbGUpIChsaWtlIF5PIGFuZCBeSSBmb3IKICAgIGp1bXBzKS4gKFdlYmIpICBVc2UgIjpmaWxlcyIgYW5kICI6bHMiIHRvIGxpc3QgdGhlIGZpbGVzIGluIGhpc3Rvcnkgb3JkZXIuCjcgICBBZGQgYSBoaXN0b3J5IG9mIHJlY2VudGx5IGFjY2Vzc2VkIGJ1ZmZlci4JTWF5YmUgbWFrZSAiMiBDVFJMLV4iIGp1bXAgdG8KICAgIHRoZSAybmQgcHJldmlvdXNseSB2aXNpdGVkIGJ1ZmZlciwgIjMgQ1RSTC1eIiB0byB0aGUgdGhpcmQsIGV0Yy4gIE9yIHVzZQogICAgIjMgZyBDVFJMLV4iIGZvciB0aGlzPwotICAgQWRkIGNvZGUgdG8gZGlzYWJsZSB0aGUgQ0FQUyBrZXkgd2hlbiBnb2luZyBmcm9tIEluc2VydCB0byBOb3JtYWwgbW9kZS4KLSAgIFNldCBkYXRlL3Byb3RlY3Rpb24vZXRjLiBvZiB0aGUgcGF0Y2hmaWxlIHRoZSBzYW1lIGFzIHRoZSBvcmlnaW5hbCBmaWxlLgotICAgVXNlIGdyb3dhcnJheSBmb3IgdGVybWNvZGVzW10gaW4gdGVybS5jCi0gICBBZGQgPHdpbmRvdy05OT4sIGxpa2UgPGN3b3JkPiBidXQgdXNlIGZpbGVuYW1lIG9mIDk5J3RoIHdpbmRvdy4KNyAgIEFkZCBhIHdheSB0byBjaGFuZ2UgYW4gb3BlcmF0b3IgdG8gYWx3YXlzIHdvcmsgY2hhcmFjdGVyd2lzZS1pbmNsdXNpdmUKICAgIChsaWtlICJ2IiBtYWtlcyB0aGUgb3BlcmF0b3IgY2hhcmFjdGVyd2lzZS1leGNsdXNpdmUpLiAgIngiIGNvdWxkIGJlIHVzZWQuCi0gICBNYWtlIGEgc2V0IG9mIG9wZXJhdGlvbnMgb24gbGlzdCBvZiBuYW1lczogZXhwYW5kIHdpbGRjYXJkcywgcmVwbGFjZSBob21lCiAgICBkaXIsIGFwcGVuZCBhIHN0cmluZywgZGVsZXRlIGEgc3RyaW5nLCBldGMuCi0gICBSZW1vdmUgbWt0ZW1wKCkgYW5kIHVzZSB0bXBuYW1lKCkgb25seT8gIEN0YWdzIGRvZXMgdGhpcy4KLSAgIFdoZW4gcmVwbGFjaW5nIGVudmlyb25tZW50IHZhcmlhYmxlcywgYW5kIHRoZXJlIGlzIG9uZSB0aGF0IGlzIG5vdCBzZXQsCiAgICB0dXJuIGl0IGludG8gYW4gZW1wdHkgc3RyaW5nPyAgT25seSB3aGVuIGV4cGFuZGluZyBvcHRpb25zPyAoSGllYmVydCkKLSAgIE9wdGlvbiB0byBzZXQgY29tbWFuZCB0byBiZSBleGVjdXRlZCBpbnN0ZWFkIG9mIHByb2R1Y2luZyBhIGJlZXAgKGUuZy4gdG8KICAgIGNhbGwgInBsYXkgbmV3YmVlcC5hdSIpLgotICAgQWRkIG9wdGlvbiB0byBzaG93IHRoZSBjdXJyZW50IGZ1bmN0aW9uIG5hbWUgaW4gdGhlIHN0YXR1cyBsaW5lLiAgTW9yZSBvcgogICAgbGVzcyB3aGF0IHlvdSBmaW5kIHdpdGggIltbayIsIGxpa2UgaG93ICdjaW5kZW50JyByZWNvZ25pemVzIGEgZnVuY3Rpb24uCiAgICAoQmhhdHQpLgotICAgIltyIiBhbmQgIl1yIjogbGlrZSAicCIgYW5kICJQIiwgYnV0IHJlcGxhY2UgaW5zdGVhZCBvZiBpbnNlcnQgKGVzcC4gZm9yCiAgICBibG9ja3dpc2UgcmVnaXN0ZXJzKS4KLSAgIEFkZCAndGltZWNoZWNrJyBvcHRpb24sIG9uIGJ5IGRlZmF1bHQuICBNYWtlcyBpdCBwb3NzaWJsZSB0byBzd2l0Y2ggb2ZmIHRoZQogICAgdGltZXN0YW1wIHdhcm5pbmcgYW5kIHF1ZXN0aW9uLiAoRG9kdCkuCi0gICBBZGQgYW4gb3B0aW9uIHRvIHNldCB0aGUgdGltZSBhZnRlciB3aGljaCBWaW0gc2hvdWxkIGNoZWNrIHRoZSB0aW1lc3RhbXBzCiAgICBvZiB0aGUgZmlsZXMuICBPbmx5IGNoZWNrIHdoZW4gYW4gZXZlbnQgb2NjdXJzIChlLmcuLCBjaGFyYWN0ZXIgdHlwZWQsCiAgICBtb3VzZSBtb3ZlZCkuICBVc2VmdWwgZm9yIG5vbi1HVUkgdmVyc2lvbnMgd2hlcmUga2V5Ym9hcmQgZm9jdXMgaXNuJ3QKICAgIG5vdGljZWFibGUuCjkgICBXaGVuIHVzaW5nICI6dyA8Zm5hbWU+IiBpdCdzIHBvc3NpYmxlIHRoYXQgdGhpcyBmaWxlIGlzIGxvYWRlZCBpbiBhbm90aGVyCiAgICBidWZmZXIuICBHaXZlIGEgd2FybmluZyByaWdodCBhd2F5LCBkb24ndCB3YWl0IGZvciBhIHNoZWxsIGNvbW1hbmQuCi0gICBNYWtlICdzbWFydGNhc2UnIHdvcmsgZXZlbiB0aG91Z2ggJ2ljJyBpc24ndCBzZXQgKFdlYmIpLgo3ICAgV2hlbiBmb3JtYXR0aW5nIHRleHQsIGFsbG93IHRvIGJyZWFrIHRoZSBsaW5lIGF0IGEgbnVtYmVyIG9mIGNoYXJhY3RlcnMuCiAgICBVc2UgYW4gb3B0aW9uIGZvciB0aGlzOiAnYnJlYWtjaGFycyc/ICBVc2VmdWwgZm9yIGZvcm1hdHRpbmcgRm9ydHJhbiBjb2RlLgotICAgQWRkIGZsYWcgdG8gJ2Zvcm1hdG9wdGlvbnMnIHRvIGJlIGFibGUgdG8gZm9ybWF0IGJvb2stc3R5bGUgcGFyYWdyYXBocwogICAgKGZpcnN0IGxpbmUgb2YgcGFyYWdyYXBoIGhhcyBsYXJnZXIgaW5kZW50LCBubyBlbXB0eSBsaW5lcyBiZXR3ZWVuCiAgICBwYXJhZ3JhcGhzKS4gIENvbXBsZW1lbnRzIHRoZSAnMicgZmxhZy4gIFVzZSAnPicgZmxhZyB3aGVuIGxhcmdlciBpbmRlbnQKICAgIHN0YXJ0cyBhIG5ldyBwYXJhZ3JhcGgsIHVzZSAnPCcgZmxhZyB3aGVuIHNtYWxsZXIgaW5kZW50IHN0YXJ0cyBhIG5ldwogICAgcGFyYWdyYXBoLglCb3RoIHN0YXJ0IGEgbmV3IHBhcmFncmFwaCBvbiBhbnkgaW5kZW50IGNoYW5nZS4KNyAgIEFkZCBhIHdheSB0byBkZWZpbmUgYW4gaXRlbSBsaXN0IHdpdGggYSBwYXR0ZXJuIGluICdmb3JtYXRvcHRpb25zJy4gIFRoZQogICAgJ24nIGZsYWcgZG9lc24ndCB3b3JrIGZvciAiNi4zIiBvciAiNmEuIi4KOCAgIEFsbG93IHVzaW5nIGEgdHJhaWxpbmcgc3BhY2UgdG8gc2lnbmFsIGEgcGFyYWdyYXBoIHRoYXQgY29udGludWVzIG9uIHRoZQogICAgbmV4dCBsaW5lIChNSU1FIHRleHQvcGxhaW47IGZvcm1hdD1mbG93ZWQsIFJGQyAyNjQ2KS4gIENhbiBiZSB1c2VkIGZvcgogICAgY29udGludW91cyBmb3JtYXR0aW5nLiAgQ291bGQgdXNlICdhdXRvZm9ybWF0JyBvcHRpb24sIHdoaWNoIHNwZWNpZmllcyBhCiAgICByZWdleHAgd2hpY2ggdHJpZ2dlcnMgYXV0by1mb3JtYXR0aW5nIChmb3Igb25lIGxpbmUpLgogICAgIjpzZXQgYXV0b2Zvcm1hdD1cXHMkIi4KLSAgIEJlIGFibGUgdG8gcmVkZWZpbmUgd2hlcmUgYSBzZW50ZW5jZSBzdG9wcy4gIFVzZSBhIHJlZ2V4cCBwYXR0ZXJuPwotICAgU3VwcG9ydCBtdWx0aS1ieXRlIGNoYXJhY3RlcnMgZm9yIHNlbnRlbmNlcy4gIEV4YW1wbGUgZnJvbSBCZW4gUGV0ZXJzb24uCjcgICBBZGQgY29tbWFuZCAiZykiIHRvIGdvIHRvIHRoZSBlbmQgb2YgYSBzZW50ZW5jZSwgImcoIiB0byBnbyBiYWNrIHRvIHRoZQogICAgZW5kIG9mIGEgc2VudGVuY2UuIChTZXJ2YXRpdXMgQnJhbmR0KQotICAgQmUgYWJsZSB0byByZWRlZmluZSB3aGVyZSBhIHBhcmFncmFwaCBzdGFydHMuICBGb3IgIltbIiB3aGVyZSB0aGUgJ3snIGlzCiAgICBub3QgaW4gY29sdW1uIDEuCjYgICBBZGQgIjpjZHByZXYiOiBnbyBiYWNrIHRvIHRoZSBwcmV2aW91cyBkaXJlY3RvcnkuICBOZWVkIHRvIHJlbWVtYmVyIGEKICAgIHN0YWNrIG9mIHByZXZpb3VzIGRpcmVjdG9yaWVzLiAgV2UgYWxzbyBuZWVkICI6Y2RuZXh0Ii4KNyAgIFNob3VsZCAiOmNkIiBmb3IgTVMtRE9TIGdvIHRvICRIT01FLCB3aGVuIGl0J3MgZGVmaW5lZD8KLSAgIE1ha2UgImdxPENSPiIgd29yayBvbiB0aGUgbGFzdCBsaW5lIGluIHRoZSBmaWxlLiAgTWF5YmUgZm9yIGV2ZXJ5IG9wZXJhdG9yPwo4ICAgZmluZG1hdGNobGltaXQoKSBzaG91bGQgYmUgYWJsZSB0byBza2lwIGNvbW1lbnRzLiAgU29sdmVzIHByb2JsZW0gb2YKICAgIG1hdGNoaW5nIHRoZSAneycgaW4gLyogaWYgKGZvbykgeyAqLyAoRml2ZWFzaCkKLSAgIEFkZCBtb3JlIHJlZGlyZWN0aW5nIG9mIEV4IGNvbW1hbmRzOgoJOnJlZGlyICM+ICBidWZuYW1lCgk6cmVkaXIgIz4+IGJ1Zm5hbWUgICAoYXBwZW5kKQotICAgR2l2ZSBlcnJvciBtZXNzYWdlIHdoZW4gc3RhcnRpbmcgOnJlZGlyOiB0d2ljZSBvciB1c2luZyBFTkQgd2hlbiBubwogICAgcmVkaXJlY3Rpb24gd2FzIGFjdGl2ZS4KLSAgIFNldHRpbmcgb2Ygb3B0aW9ucywgc3BlY2lmaWNhbGx5IGZvciBhIGJ1ZmZlciBvciB3aW5kb3csIHdpdGgKICAgICI6c2V0IHdpbmRvdy5vcHRpb24iIG9yICI6c2V0IGJ1ZmZlci5vcHRpb249dmFsIi4gIE9yIHVzZSAiOmJ1ZmZlci5zZXQiLgogICAgQWxzbzogImJ1ZmZlci5tYXAgPEYxPiBxdWl0Ii4KNiAgIFdvdWxkIGl0IGJlIHBvc3NpYmxlIHRvIGNoYW5nZSB0aGUgY29sb3Igb2YgdGhlIGN1cnNvciBpbiB0aGUgV2luMzIKICAgIGNvbnNvbGU/ICAoS2xhdXMgSGFzdCkKLSAgIEFkZCA6ZGVsY3IgY29tbWFuZDoKCQkJICAgICo6ZGVsY3IqCiAgICAgOltyYW5nZV1kZWxjclshXQlDaGVjayBbcmFuZ2VdIGxpbmVzIChkZWZhdWx0OiB3aG9sZSBidWZmZXIpIGZvciBsaW5lcwoJCQllbmRpbmcgaW4gPENSPi4gIElmIGFsbCBsaW5lcyBlbmQgaW4gPENSPiwgb3IgWyFdIGlzCgkJCXVzZWQsIHJlbW92ZSB0aGUgPENSPiBhdCB0aGUgZW5kIG9mIGxpbmVzIGluIFtyYW5nZV0uCgkJCUEgQ1RSTC1aIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgaXMgcmVtb3ZlZC4gIElmCgkJCVtyYW5nZV0gaXMgb21pdHRlZCwgb3IgaXQgaXMgdGhlIHdob2xlIGZpbGUsIGFuZCBhbGwKCQkJbGluZXMgZW5kIGluIDxDUj4gJ3RleHRtb2RlJyBpcyBzZXQuICB7bm90IGluIFZpfQotICAgU2hvdWxkIGludGVncmF0ZSBhZGRzdGFyKCkgYW5kIGZpbGVfcGF0X3RvX3JlZ19wYXQoKS4KLSAgIFdoZW4gd29ya2luZyBvdmVyIGEgc2VyaWFsIGxpbmUgd2l0aCA3IGJpdCBjaGFyYWN0ZXJzLCByZW1vdmUgbWV0YQogICAgY2hhcmFjdGVycyBmcm9tICdpc3ByaW50Jy4KLSAgIFVzZSBmY2hkaXIoKSBpbiBpbml0X2hvbWVkaXIoKSwgbGlrZSBpbiBGdWxsTmFtZSgpLgotICAgSW4gd2luX3VwZGF0ZSgpLCB3aGVuIHRoZSBHVUkgaXMgYWN0aXZlLCBhbHdheXMgdXNlIHRoZSBzY3JvbGxpbmcgYXJlYS4KICAgIEF2b2lkIHRoYXQgdGhlIGxhc3Qgc3RhdHVzIGxpbmUgaXMgZGVsZXRlZCBhbmQgbmVlZHMgdG8gYmUgcmVkcmF3bi4KLSAgIFRoYXQgImNUeCIgZmFpbHMgd2hlbiB0aGUgY3Vyc29yIGlzIGp1c3QgYWZ0ZXIgJ3gnIGlzIFZpIGNvbXBhdGlibGUsIGJ1dAogICAgbWF5IG5vdCBiZSB3aGF0IHlvdSBleHBlY3QuICBBZGQgYSBmbGFnIGluICdjcG9wdGlvbnMnIGZvciB0aGlzPyAgTW9yZQogICAgZ2VuZXJhbDogQWRkIGFuIG9wdGlvbiB0byBhbGxvdyAiYyIgdG8gd29yayB3aXRoIGEgbnVsbCBtb3Rpb24uCi0gICBHaXZlIGJldHRlciBlcnJvciBtZXNzYWdlcyBieSB1c2luZyBlcnJubyAoc3RyZXJyb3IoKSkuCi0gICBHaXZlICJVc2FnZToiIGVycm9yIG1lc3NhZ2Ugd2hlbiBjb21tYW5kIHVzZWQgd2l0aCB3cm9uZyBhcmd1bWVudHMgKGxpa2UKICAgIE52aSkuCi0gICBNYWtlICdyZXN0b3Jlc2NyZWVuJyBvcHRpb24gYWxzbyB3b3JrIGZvciB4dGVybSAoYW5kIG90aGVycyksIHJlcGxhY2VzIHRoZQogICAgU0FWRV9YVEVSTV9TQ1JFRU4gZGVmaW5lLgo3ICAgU3VwcG9ydCBmb3IgIjp3aW5wb3MiIEluIHh0ZXJtOiByZXBvcnQgdGhlIGN1cnJlbnQgd2luZG93IHBvc2l0aW9uLgotICAgR2l2ZSB3YXJuaW5nIG1lc3NhZ2Ugd2hlbiB1c2luZyAiOnNldCB0X3h4PWFzZGYiIGZvciBhIHRlcm1jYXAgY29kZSB0aGF0CiAgICBWaW0gZG9lc24ndCBrbm93IGFib3V0LiAgQWRkIGZsYWcgaW4gJ3Nob3J0bWVzcyc/CjYgICBBZGQgIjpjaGUgPGZpbGU+IiwgbGlzdCBhbGwgdGhlIGluY2x1ZGUgcGF0aHMgd2hpY2ggbGVhZCB0byB0aGlzIGZpbGUuCi0gICBGb3IgYSBjb21tYW5kbGluZSB0aGF0IGhhcyBzZXZlcmFsIGNvbW1hbmRzICg6cywgOmQsIGV0Yy4pIHN1bW1hcml6ZSB0aGUKICAgIGNoYW5nZXMgYWxsIHRvZ2V0aGVyIGluc3RlYWQgb2YgZm9yIGVhY2ggY29tbWFuZCAoZS5nLiBmb3IgdGhlIHJvdDEzCiAgICBtYWNybykuCi0gICBBZGQgY29tbWFuZCBsaWtlICJbSSIgdGhhdCBhbHNvIHNob3dzIHRoZSB0cmVlIG9mIGluY2x1ZGVkIGZpbGVzLgotICAgIjpzZXQgc21eTCIgcmVzdWx0cyBpbiAiOnNldCBzIiwgYmVjYXVzZSBzaG9ydCBuYW1lcyBvZiBvcHRpb25zIGFyZSBhbHNvCiAgICBleHBhbmRlZC4gIElzIHRoZXJlIGEgYmV0dGVyIHdheSB0byBkbyB0aGlzPwotICAgQWRkICI6QCEiIGNvbW1hbmQsIHRvICI6QCIgbGlrZSB3aGF0ICI6c291cmNlISIgaXMgdG8gIjpzb3VyY2UiLgo4ICAgQWRkICI6QDohIjogcmVwZWF0IGxhc3QgY29tbWFuZCB3aXRoIGZvcmNlaXQgc2V0LgotICAgU2hvdWxkIGJlIHBvc3NpYmxlIHRvIHdyaXRlIHRvIGEgZGV2aWNlLCBlLmcuICI6dyEgL2Rldi9udWxsIi4KLSAgIEFkZCAndF9ub3JtYWwnOiBVc2VkIHdoZW5ldmVyIHRfbWUsIHRfc2UsIHRfdWUgb3IgdF9aciBpcyBlbXB0eS4KLSAgICI6Y2FiIG1hcCB0ZXN0IF5WfCBqZSIsICI6Y3VuYWIgbWFwIiBkb2Vzbid0IHdvcmsuCVRoaXMgaXMgdmkgY29tcGF0aWJsZSEKLSAgIENUUkwtVyBDVFJMLUUgYW5kIENUUkwtVyBDVFJMLVkgc2hvdWxkIG1vdmUgdGhlIGN1cnJlbnQgd2luZG93IHVwIG9yIGRvd24KICAgIGlmIGl0IGlzIG5vdCB0aGUgZmlyc3Qgb3IgbGFzdCB3aW5kb3cuCi0gICBJbmNsdWRlLWZpbGUtc2VhcmNoIGNvbW1hbmRzIHNob3VsZCBsb29rIGluIHRoZSBsb2FkZWQgYnVmZmVyIG9mIGEgZmlsZSAoaWYKICAgIHRoZXJlIGlzIG9uZSkgaW5zdGVhZCBvZiB0aGUgZmlsZSBpdHNlbGYuCjcgICBDaGFuZ2UgJ25yZm9ybWF0cycgdG8gaW5jbHVkZSB0aGUgbGVhZGVyIGZvciBlYWNoIGZvcm1hdC4gIEV4YW1wbGU6CglucmZvcm1hdHM9aGV4OiQsYmluYXJ5OmIsb2N0YWw6MAogICAgQWRkIHNldHRpbmcgb2YgJ25yZm9ybWF0cycgdG8gc3ludGF4IGZpbGVzLgotICAgJ3BhdGgnIGNhbiBiZWNvbWUgdmVyeSBsb25nLCBkb24ndCB1c2UgTmFtZUJ1ZmYgZm9yIGV4cGFuc2lvbi4KLSAgIFdoZW4gdW5oaWRpbmcgYSBoaWRkZW4gYnVmZmVyLCBwdXQgdGhlIHNhbWUgbGluZSBhdCB0b3Agb2YgdGhlIHdpbmRvdyBhcwogICAgdGhlIG9uZSBiZWZvcmUgaGlkaW5nIGl0LiAgT3I6IGtlZXAgdGhlIHNhbWUgcmVsYXRpdmUgY3Vyc29yIHBvc2l0aW9uIChzbwogICAgbWFueSBwZXJjZW50IGRvd24gdGhlIHdpbmRvd3MpLgotICAgTWFrZSBpdCBwb3NzaWJsZSBmb3IgdGhlICdzaG93YnJlYWsnIHRvIGJlIGRpc3BsYXllZCBhdCB0aGUgZW5kIG9mIHRoZQogICAgbGluZS4gIFVzZSBhIGNvbW1hIHRvIHNlcGFyYXRlIHRoZSBwYXJ0IGF0IHRoZSBlbmQgYW5kIHRoZSBzdGFydCBvZiB0aGUKICAgIGxpbmU/ICBIaWdobGlnaHQgdGhlIGxpbmVicmVhayBjaGFyYWN0ZXJzLCBhZGQgZmxhZyBpbiAnaGlnaGxpZ2h0Jy4KLSAgIFNvbWUgc3RyaW5nIG9wdGlvbnMgc2hvdWxkIGJlIGV4cGFuZGVkIGlmIHRoZXkgaGF2ZSB3aWxkY2FyZHMsIGUuZy4KICAgICdkaWN0aW9uYXJ5JyB3aGVuIGl0IGlzICIqLmgiLgotICAgVXNlIGEgc3BlY2lmaWMgdHlwZSBmb3IgbnVtYmVyIGFuZCBib29sZWFuIG9wdGlvbnMsIG1ha2luZyBpdCBwb3NzaWJsZSB0bwogICAgY2hhbmdlIGl0IGZvciBzcGVjaWZpYyBtYWNoaW5lcyAoZS5nLiB3aGVuIGEgbG9uZyBpcyA2NCBiaXQpLgotICAgQWRkIG9wdGlvbiBmb3IgPEluc2VydD4gaW4gcmVwbGFjZSBtb2RlIGdvaW5nIHRvIG5vcm1hbCBtb2RlLiAoTnVnZW50KQotICAgQWRkIGEgbmV4dC9wcmV2aW91cyBwb3NzaWJpbGl0eSB0byAiW15JIiBhbmQgZnJpZW5kcy4KLSAgIEFkZCBwb3NzaWJpbGl0eSB0byBjaGFuZ2UgdGhlIEhPTUUgZGlyZWN0b3J5LiAgVXNlIHRoZSBkaXJlY3RvcnkgZnJvbSB0aGUKICAgIHBhc3N3ZCBmaWxlPyAoQW50d2VycGVuKQo4ICAgQWRkIGNvbW1hbmRzIHRvIHB1c2ggYW5kIHBvcCBhbGwgb3IgaW5kaXZpZHVhbCBvcHRpb25zLiAiOnNldHB1c2ggdHciLAogICAgIjpzZXRwb3AgdHciLCAiOnNldHB1c2ggYWxsIi4gIE1heWJlIHB1c2hpbmcvcG9wcGluZyBhbGwgb3B0aW9ucyBpcwogICAgc3VmZmljaWVudC4gICI6c2V0Zmx1c2giIHJlc2V0cyB0aGUgb3B0aW9uIHN0YWNrPwogICAgSG93IHRvIGhhbmRsZSBhbiBhYm9ydGVkIG1hcHBpbmc/ICBSZW1lbWJlciBwb3NpdGlvbiBpbiB0YWcgc3RhY2sgd2hlbgogICAgbWFwcGluZyBzdGFydHMsIHJlc3RvcmUgaXQgd2hlbiBhbiBlcnJvciBhYm9ydHMgdGhlIG1hcHBpbmc/Ci0gICBDaGFuZ2UgIjpmaXhkZWwiIGludG8gb3B0aW9uICdmaXhkZWwnLCB0X2RlbCB3aWxsIGJlIGFkanVzdGVkIGVhY2ggdGltZQogICAgdF9icyBpcyBzZXQ/IChXZWJiKQotICAgImdjIjogZ290byBjaGFyYWN0ZXIsIG1vdmUgYWJzb2x1dGUgY2hhcmFjdGVyIHBvc2l0aW9ucyBmb3J3YXJkLCBhbHNvCiAgICBjb3VudGluZyBuZXdsaW5lcy4gICJnQyIgZ29lcyBiYWNrd2FyZHMgKFdlaWdlcnQpLgotICAgV2hlbiBkb2luZyBDVFJMLV4sIHJlZHJhdyBidWZmZXIgd2l0aCB0aGUgc2FtZSB0b3BsaW5lLiAoRGVtaXJlbCkgIFN0b3JlCiAgICBjdXJzb3Igcm93IGFuZCB3aW5kb3cgaGVpZ2h0IHRvIHJlZHJhdyBjdXJzb3IgYXQgc2FtZSBwZXJjZW50YWdlIG9mIHdpbmRvdwogICAgKFdlYmIpLgotICAgQmVzaWRlcyByZW1lbWJlcmluZyB0aGUgbGFzdCB1c2VkIGxpbmUgbnVtYmVyIG9mIGEgZmlsZSwgYWxzbyByZW1lbWJlciB0aGUKICAgIGNvbHVtbi4gIFVzZSBpdCB3aXRoIENUUkwtXiBldC4gYWwuCi0gICBDaGVjayBmb3Igbm9uLWRpZ2l0cyB3aGVuIHNldHRpbmcgYSBudW1iZXIgb3B0aW9uIChjYXJlZnVsIHdoZW4gZW50ZXJpbmcKICAgIGhleCBjb2RlcyBsaWtlIDB4ZmYpLgotICAgQWRkIG9wdGlvbiB0byBtYWtlICIuIiByZWRvIHRoZSAiQHIiIGNvbW1hbmQsIGluc3RlYWQgb2YgdGhlIGxhc3QgY29tbWFuZAogICAgZXhlY3V0ZWQgYnkgaXQuICBBbHNvIHRvIG1ha2UgIi4iIHJlZG8gdGhlIHdob2xlIG1hcHBpbmcuICBCYXNpY2FsbHk6IHJlZG8KICAgIHRoZSBsYXN0IFRZUEVEIGNvbW1hbmQuCi0gICBTdXBwb3J0IFVSTCBsaW5rcyBmb3IgXlheRiBpbiBJbnNlcnQgbW9kZSwgbGlrZSBmb3IgImdmIi4KLSAgIFN1cHBvcnQgJW5hbWUlIGV4cGFuc2lvbiBmb3IgImdmIiBvbiBXaW5kb3dzLgotICAgTWFrZSAiZ2YiIHdvcmsgb24gImZpbGU6Ly9jOi9wYXRoL25hbWUiLiAgImZpbGU6L2M6LyIgYW5kICJmaWxlOi8vL2M6LyIKICAgIHNob3VsZCBhbHNvIHdvcms/Ci0gICBBZGQgJ3VybHBhdGgnLCB1c2VkIGxpa2UgJ3BhdGgnIGZvciB3aGVuICJnZiIgdXNlZCBvbiBhbiBVUkw/CjggICBXaGVuIHVzaW5nICJnZiIgb24gYW4gYWJzb2x1dGUgZmlsZSBuYW1lLCB3aGlsZSBlZGl0aW5nIGEgcmVtb3RlIGZpbGUKICAgIChzdGFydHMgd2l0aCBzY3A6Ly8gb3IgaHR0cDovLykgc2hvdWxkIHByZXBlbmQgdGhlIG1ldGhvZCBhbmQgbWFjaGluZQogICAgbmFtZS4KLSAgIFdoZW4gZmluZGluZyBhbiBVUkwgb3IgZmlsZSBuYW1lLCBhbmQgaXQgZG9lc24ndCBleGlzdCwgdHJ5IHJlbW92aW5nIGEKICAgIHRyYWlsaW5nICcuJy4KLSAgIEFkZCAiOnBhdGgiIGNvbW1hbmQgbW9kaWZpZXIuICBTaG91bGQgd29yayBmb3IgZXZlcnkgY29tbWFuZCB0aGF0IHRha2VzIGEKICAgIGZpbGUgbmFtZSBhcmd1bWVudCwgdG8gc2VhcmNoIGZvciB0aGUgZmlsZSBuYW1lIGluICdwYXRoJy4JVXNlCiAgICBmaW5kX2ZpbGVfaW5fcGF0aCgpLgotICAgSGlnaGxpZ2h0IGNvbnRyb2wgY2hhcmFjdGVycyBvbiB0aGUgc2NyZWVuOiBTaG93cyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuCiAgICBDVFJMLVggYW5kICJeIiBmb2xsb3dlZCBieSAiWCIgKENvbG9uKS4KLSAgIEludGVncmF0ZSBwYXJzaW5nIG9mIGNtZGxpbmUgY29tbWFuZCBhbmQgcGFyc2luZyBmb3IgZXhwYW5zaW9uLgotICAgQ3JlYXRlIGEgcHJvZ3JhbSB0aGF0IGNhbiB0cmFuc2xhdGUgYSAuc3dwIGZpbGUgZnJvbSBhbnkgbWFjaGluZSBpbnRvIGEKICAgIGZvcm0gdXNhYmxlIGJ5IFZpbSBvbiB0aGUgY3VycmVudCBtYWNoaW5lLgotICAgQWRkICI6bm9ybyIgY29tbWFuZDogUmVzZXQgJ3JvJyBmbGFnIGZvciBhbGwgYnVmZmVycywgZXhjZXB0IG9uZXMgdGhhdCBoYXZlCiAgICBhIHJlYWRvbmx5IGZpbGUuICAiOm5vcm8hIiB3aWxsIHJlc2V0IGFsbCAncm8nIGZsYWdzLgotICAgQWRkIGEgdmFyaWFudCBvZiBDVFJMLVYgdGhhdCBzdG9wcyBpbnRlcnByZXRhdGlvbiBvZiBtb3JlIHRoYW4gb25lCiAgICBjaGFyYWN0ZXIuCUZvciBlbnRlcmluZyBtYXBwaW5ncyBvbiB0aGUgY29tbWFuZCBsaW5lIHdoZXJlIGEga2V5IGNvbnRhaW5zCiAgICBzZXZlcmFsIHNwZWNpYWwgY2hhcmFjdGVycywgZS5nLiBhIHRyYWlsaW5nIG5ld2xpbmUuCi0gICBBZGQgcmVnZXggZm9yICdwYXJhZ3JhcGhzJyBhbmQgJ3NlY3Rpb25zJzogJ3BhcmFyZScgYW5kICdzZWN0cmUnLiAgQ29tYmluZQogICAgdGhlIHR3byBpbnRvIGEgcmVnZXggZm9yIHNlYXJjaGluZy4gKE5lZCBLb256KQotICAgTWFrZSAnMicgb3B0aW9uIGluICdmb3JtYXRvcHRpb25zJyBhbHNvIHdvcmsgaW5zaWRlIGNvbW1lbnRzLgotICAgQWRkICdzJyBmbGFnIHRvICdmb3JtYXRvcHRpb25zJzogRG8gbm90IGJyZWFrIHdoZW4gaW5zaWRlIGEgc3RyaW5nLiAoRG9kdCkKLSAgIFdoZW4gd2luZG93IHNpemUgY2hhbmdlZCAod2l0aCB0aGUgbW91c2UpIGFuZCBtYWRlIHRvbyBzbWFsbCwgc2V0IGl0IGJhY2sKICAgIHRvIHRoZSBtaW5pbWFsIHNpemUuCi0gICBBZGQgIl0+IiBhbmQgIls8Iiwgc2hpZnQgY29tbWVudCBhdCBlbmQgb2YgbGluZSAoY29tbWFuZDsgIC8qIGNvbW1lbnQgKi8pLgotICAgU2hvdWxkIG5vdCBjYWxsIGN1cnNvcmNtZCgpIGZvciBlYWNoIHZnZXRjKCkgaW4gZ2V0Y21kbGluZSgpLgotICAgIjpzcGxpdCBmaWxlMSBmaWxlMiIgYWRkcyB0d28gbW9yZSB3aW5kb3dzIChXZWJiKS4KLSAgIERvbid0IGdpdmUgbWVzc2FnZSAiSW5jb21wbGV0ZSBsYXN0IGxpbmUiIHdoZW4gZWRpdGluZyBiaW5hcnkgZmlsZS4KLSAgIEFkZCAiOmEiLCAiOmkiIGZvciBwcmVsb2FkaW5nIG9mIG5hbWVkIGJ1ZmZlcnMuCi0gICBBbGxvdyBhdXRvd3JpdGUgd2hlbiBkb2luZyAiOmUgZmlsZSIgKHdpdGggYW4gb3B0aW9uICdlYXcnKS4KLSAgIEFsbG93IGEgIitjb21tYW5kIiBhcmd1bWVudCBiZWZvcmUgZWFjaCBmaWxlIG5hbWUgaW4gdGhlIFZpbSBjb21tYW5kIGxpbmU6CiAgICAidmltICsxMjMgZmlsZTEgKzIzNCBmaWxlMiArMzQ1IGZpbGUzIi4gPz8/Ci0gICBXaGVuIGVudGVyaW5nIHRleHQsIGtlZXAgb3RoZXIgd2luZG93cyBvbiBzYW1lIGJ1ZmZlciB1cGRhdGVkICh3aGVuIGEgbGluZQogICAgZW50ZXJlZCk/Ci0gICBDaGVjayBvdXQgaG93IHNjcmVlbiBkb2VzIG91dHB1dCBvcHRpbWl6aW5nLiAgQXBwYXJlbnRseSB0aGlzIGlzIHBvc3NpYmxlCiAgICBhcyBhbiBvdXRwdXQgZmlsdGVyLgotICAgSW4gZG9zdWIoKSByZWdleGVjIGlzIGNhbGxlZCB0d2ljZSBmb3IgdGhlIHNhbWUgbGluZS4gIFRyeSB0byBhdm9pZCB0aGlzLgotICAgV2luZG93IHVwZGF0aW5nIGZyb20gbWVtbGluZS5jOiBpbnNlcnQvZGVsZXRlL3JlcGxhY2UgbGluZS4KLSAgIE9wdGltaXplIG1sX2FwcGVuZCgpIGZvciBzcGVlZCwgZXNwLiBmb3IgcmVhZGluZyBhIGZpbGUuCi0gICBWLi5jIHNob3VsZCBrZWVwIGluZGVudCB3aGVuICdhaScgaXMgc2V0LCBqdXN0IGxpa2UgW2NvdW50XWNjLgotICAgVXBkYXRlc2NyaXB0KCkgY2FuIGJlIGRvbmUgZmFzdGVyIHdpdGggYSBzdHJpbmcgaW5zdGVhZCBvZiBhIGNoYXIuCi0gICBTY3JlZW4gdXBkYXRpbmcgaXMgaW5lZmZpY2llbnQgd2l0aCBDVFJMLUYgYW5kIENUUkwtQiB3aGVuIHRoZXJlIGFyZSBsb25nCiAgICBsaW5lcy4KLSAgIFVwcGVyY2FzZSBjaGFyYWN0ZXJzIGluIGV4IGNvbW1hbmRzIGNhbiBiZSBtYWRlIGxvd2VyY2FzZT8KOCAgIEFkZCBvcHRpb24gdG8gc2hvdyBjaGFyYWN0ZXJzIGluIHRleHQgbm90IGFzICJ8QSIgYnV0IGFzIGRlY2ltYWwgKCJeMTI5IiksCiAgICBoZXggKCJceDgxIikgb3Igb2N0YWwgKCJcMjAxIikgb3IgbWV0YSAoTS14KS4gIE52aSBoYXMgdGhlICdvY3RhbCcgb3B0aW9uCiAgICB0byBzd2l0Y2ggZnJvbSBoZXggdG8gb2N0YWwuICBWaWxlIGNhbiBzaG93IHVucHJpbnRhYmxlIGNoYXJhY3RlcnMgaW4gaGV4CiAgICBvciBpbiBvY3RhbC4KNyAgIFRpZ2h0ZXIgaW50ZWdyYXRpb24gd2l0aCB4eGQgdG8gZWRpdCBiaW5hcnkgZmlsZXMuICBNYWtlIGl0IG1vcmUKICAgIGVhc3kvb2J2aW91cyB0byB1c2UuICBDb21tYW5kIGxpbmUgYXJndW1lbnQ/Ci0gICBIb3cgZG9lcyB2aSBkZXRlY3Qgd2hldGhlciBhIGZpbHRlciBoYXMgbWVzc2VkIHVwIHRoZSBzY3JlZW4/ICBDaGVjayBzb3VyY2UuCiAgICBBZnRlciAiOncgIWNvbW1hbmQiIGEgd2FpdF9yZXR1cm4/Ci0gICBJbXByb3ZlIHNjcmVlbiB1cGRhdGluZyBjb2RlIGZvciBkb3B1dCgpICh1c2Ugc19pbnMoKSkuCi0gICBXaXRoICdwJyBjb21tYW5kIG9uIGxhc3QgbGluZTogc2Nyb2xsIHNjcmVlbiB1cCAoYWxzbyBmb3IgdGVybWluYWxzIHdpdGhvdXQKICAgIGluc2VydCBsaW5lIGNvbW1hbmQpLgotICAgVXNlIGluc2VydC9kZWxldGUgY2hhciB3aGVuIHRlcm1pbmFsIHN1cHBvcnRzIGl0LgotICAgT3B0aW1pemUgc2NyZWVuIHJlZHJhdyBmb3Igc2xvdyB0ZXJtaW5hbHMuCi0gICBPcHRpbWl6ZSAiZHciIGZvciBsb25nIHJvdyBvZiBzcGFjZXMgKHNheSwgMzAwMDApLgotICAgQWRkICItZCBudWxsIiBmb3IgZWRpdGluZyBmcm9tIGEgc2NyaXB0IGZpbGUgd2l0aG91dCBkaXNwbGF5aW5nLgotICAgSW4gSW5zZXJ0IG1vZGU6IFJlbWVtYmVyIHRoZSBjaGFyYWN0ZXJzIHRoYXQgd2VyZSByZW1vdmVkIHdpdGggYmFja3NwYWNlCiAgICBhbmQgcmUtaW5zZXJ0IHRoZW0gb25lIGF0IGEgdGltZSB3aXRoIDxrZXkxPiwgYWxsIHRvZ2V0aGVyIHdpdGggPGtleTI+LgotICAgQW1pZ2E6IEFkZCBwb3NzaWJpbGl0eSB0byBzZXQgYSBrZXltYXAuICBUaGUgY29kZSBpbiBhbWlnYS5jIGRvZXMgbm90IHdvcmsKICAgIHlldC4KLSAgIEltcGxlbWVudCAncmVkcmF3JyBvcHRpb24uCi0gICBBZGQgc3BlY2lhbCBjb2RlIHRvICdzZWN0aW9ucycgb3B0aW9uIHRvIGRlZmluZSBzb21ldGhpbmcgZWxzZSBidXQgJ3snIG9yCiAgICAnfScgYXMgdGhlIHN0YXJ0IG9mIGEgc2VjdGlvbiAoZS5nLiBvbmUgc2hpZnR3aWR0aCB0byB0aGUgcmlnaHQpLgo3ICAgQWxsb3cgdXNpbmcgVmltIGluIGEgcGlwZTogImxzIHwgdmltIC11IHh4eC52aW0gLSB8IHl5eSIuICBPbmx5IG5lZWRzCiAgICBpbXBsZW1lbnRpbmcgIjp3IiB0byBzdGRvdXQgaW4gdGhlIGJ1ZmZlciB0aGF0IHdhcyByZWFkIGZyb20gc3RkaW4uCiAgICBQZXJoYXBzIHdyaXRpbmcgdG8gc3Rkb3V0IHdpbGwgd29yaywgc2luY2Ugc3RkZXJyIGlzIHVzZWQgZm9yIHRoZSB0ZXJtaW5hbAogICAgSS9PLgo4ICAgQWxsb3cgb3BlbmluZyBhbiB1bm5hbWVkIGJ1ZmZlciB3aXRoICI6ZSAhY21kIiBhbmQgIjpzcCAhY21kIi4gIFZpbGUgY2FuCiAgICBkbyBpdC4KLSAgIEFkZCBjb21tYW5kcyBsaWtlIF1dIGFuZCBbWyB0aGF0IGRvIG5vdCBpbmNsdWRlIHRoZSBsaW5lIGp1bXBlZCB0by4KLSAgIFdoZW4gOnVuYWIgd2l0aG91dCBtYXRjaGluZyAiZnJvbSIgcGFydCBhbmQgc2V2ZXJhbCBtYXRjaGluZyAidG8iIHBhcnRzLAogICAgZGVsZXRlIHRoZSBlbnRyeSB0aGF0IHdhcyB1c2VkIGxhc3QsIGluc3RlYWQgb2YgdGhlIGZpcnN0IGluIHRoZSBsaXN0LgotICAgQWRkIHRleHQganVzdGlmaWNhdGlvbiBvcHRpb24uCi0gICBTZXQgYm9vbGVhbiBvcHRpb25zIG9uL29mZiB3aXRoICI6c2V0IHBhc3RlPW9mZiIsICI6c2V0IHBhc3RlPW9uIi4KLSAgIEFmdGVyICJpbnYiaW5nIGFuIG9wdGlvbiBzaG93IHRoZSB2YWx1ZTogIjpzZXQgaW52cGFzdGUiIGdpdmVzICJwYXN0ZSBpcwogICAgb2ZmIi4KLSAgIENoZWNrIGhhbmRsaW5nIG9mIENUUkwtViBhbmQgJ1wnIGZvciAiOiIgY29tbWFuZHMgdGhhdCBkbyBub3QgaGF2ZSBUUkxCQVIuCi0gICBXaGVuIGEgZmlsZSBjYW5ub3QgYmUgb3BlbmVkIGJ1dCBkb2VzIGV4aXN0LCBnaXZlIGVycm9yIG1lc3NhZ2UuCi0gICBBbWlnYTogV2hlbiAncicgcHJvdGVjdGlvbiBiaXQgaXMgbm90IHNldCwgZmlsZSBjYW4gc3RpbGwgYmUgb3BlbmVkIGJ1dAogICAgZ2l2ZXMgcmVhZCBlcnJvcnMuICBDaGVjayBwcm90ZWN0aW9uIGJlZm9yZSBvcGVuaW5nLgotICAgV2hlbiB3cml0aW5nIGNoZWNrIGZvciBmaWxlIGV4aXN0cyBidXQgbm8gcGVybWlzc2lvbiwgIlBlcm1pc3Npb24gZGVuaWVkIi4KLSAgIElmIGZpbGUgZG9lcyBub3QgZXhpc3RzLCBjaGVjayBpZiBkaXJlY3RvcnkgZXhpc3RzLgotICAgTVNET1M6IGFsdGhvdWdoIHRfY3YgYW5kIHRfY2kgYXJlIG5vdCBzZXQsIGRvIGludmVydCBjaGFyIHVuZGVyIGN1cnNvci4KLSAgIFNldHRpbmdzIGVkaXQgbW9kZTogbWFrZSBmaWxlIHdpdGggIjpzZXQgb3B0PXh4IiwgZWRpdCBpdCwgcGFyc2UgaXQgYXMgZXgKICAgIGNvbW1hbmRzLgotICAgIjpzZXQgLXcgYWxsIjogbGlzdCBvbmUgb3B0aW9uIHBlciBsaW5lLgotICAgQW1pZ2E6IHRlc3QgZm9yICd3JyBmbGFnIHdoZW4gcmVhZGluZyBhIGZpbGUuCi0gICA6dGFibGUgY29tbWFuZCAoV2ViYikKLSAgIEFkZCBuZXcgb3BlcmF0b3I6IGNsZWFyLCBtYWtlIGFyZWEgd2hpdGUgKHJlcGxhY2Ugd2l0aCBzcGFjZXMpOiAiZyAiLgotICAgTWFrZSBpdCBwb3NzaWJsZSBmb3IgYSB1c2VyIHRvIGRlZmluZSBhIG5ldyBvcGVyYXRvci4gIEltcGxlbWVudGF0aW9uIHdpdGgKICAgIGludGVybmFsIHNjcmlwdGluZyBsYW5ndWFnZSBvciBQZXJsPwotICAgQWRkIGNvbW1hbmQgdG8gIjpyZWFkIiBhIGZpbGUgYXQgYSBjZXJ0YWluIGNvbHVtbiAoYmxvY2t3aXNlIHJlYWQ/KS4KLSAgIEFkZCBzb3J0IG9mIHJlcGxhY2UgbW9kZSB3aGVyZSBjYXNlIGlzIHRha2VuIGZyb20gdGhlIG9sZCB0ZXh0IChHb2xkZmFyYikuCi0gICBBbGxvdyBtdWx0aXBsZSBhcmd1bWVudHMgZm9yICI6cmVhZCIsIHJlYWQgYWxsIHRoZSBmaWxlcy4KLSAgIFN1cHBvcnQgZm9yIHRhYnMgaW4gc3BlY2lmaWMgY29sdW1uczogIjpzZXQgdGFiY29sPTgsMjAsMzQsNTYiIChEZW1pcmVsKS4KLSAgIEFkZCAnc2VhcmNoZGlyJyBvcHRpb246IERpcmVjdG9yaWVzIHRvIHNlYXJjaCBmb3IgZmlsZSBuYW1lIGJlaW5nIGVkaXRlZAogICAgKERlbWlyZWwpLgotICAgTW9kaWZpZXIgZm9yIHRoZSBwdXQgY29tbWFuZDogQ2hhbmdlIHRvIGxpbmV3aXNlLCBjaGFyd2lzZSwgYmxvY2t3aXNlLCBldGMuCi0gICBBZGQgY29tbWFuZHMgZm9yIHNhdmluZyBhbmQgcmVzdG9yaW5nIG9wdGlvbnMgIjpzZXQgc2F2ZSIgInNldCByZXN0b3JlIiwKICAgIGZvciB1c2UgaW4gbWFjcm8ncyBhbmQgdGhlIGxpa2UuCi0gICBLZWVwIG91dHB1dCBmcm9tIGxpc3RpbmdzIGluIGEgd2luZG93LCBzbyB5b3UgY2FuIGhhdmUgYSBsb29rIGF0IGl0IHdoaWxlCiAgICB3b3JraW5nIGluIGFub3RoZXIgd2luZG93LiAgUHV0IGNtZGxpbmUgaW4gYSBzZXBhcmF0ZSB3aW5kb3c/Ci0gICBBZGQgcG9zc2liaWxpdHkgdG8gcHV0IG91dHB1dCBvZiBleCBjb21tYW5kcyBpbiBhIGJ1ZmZlciBvciBmaWxlLCBlLmcuIGZvcgogICAgIjpzZXQgYWxsIi4gICI6ciA6c2V0IGFsbCI/Ci0gICAnZWRpdCcgb3B0aW9uOiBXaGVuIG9mZiBjaGFuZ2luZyB0aGUgYnVmZmVyIGlzIG5vdCBwb3NzaWJsZSAoUmVhbGx5CiAgICByZWFkLW9ubHkgbW9kZSkuCi0gICBXaGVuIHRoZSAnZXF1YWxhbHdheXMnIG9wdGlvbiBpcyBzZXQsIGNyZWF0aW5nIGEgbmV3IHdpbmRvdyBzaG91bGQgbm90CiAgICByZXN1bHQgaW4gd2luZG93cyB0byBiZWNvbWUgYmlnZ2VyLiAgRGVsZXRpbmcgYSB3aW5kb3cgc2hvdWxkIG5vdCByZXN1bHQgaW4KICAgIGEgd2luZG93IHRvIGJlY29tZSBzbWFsbGVyIChXZWJiKS4KLSAgIFdoZW4gcmVzaXppbmcgdGhlIHdob2xlIFZpbSB3aW5kb3csIHRoZSB3aW5kb3dzIGluc2lkZSBzaG91bGQgYmUgcmVzaXplZAogICAgcHJvcG9ydGlvbmFsbHkgKFdlYmIpLgotICAgSW5jbHVkZSBvcHRpb25zIGRpcmVjdGx5IGluIG9wdGlvbiB0YWJsZSwgbm8gaW5kaXJlY3QgcG9pbnRlcnMuICBVc2UKICAgIG1rb3B0dGFiIHRvIG1ha2Ugb3B0aW9uIHRhYmxlPwotICAgV2hlbiBkb2luZyAiOncgZGlyIiwgd2hlcmUgImRpciIgaXMgYSBkaXJlY3RvcnkgbmFtZSwgd3JpdGUgdGhlIGN1cnJlbnQKICAgIGZpbGUgaW50byB0aGF0IGRpcmVjdG9yeSwgd2l0aCB0aGUgY3VycmVudCBmaWxlIG5hbWUgKHdpdGhvdXQgdGhlIHBhdGgpPwotICAgU3VwcG9ydCBmb3IgJ2RpY3Rpb25hcnkncyB0aGF0IGFyZSBzb3J0ZWQsIG1ha2VzIGFjY2VzcyBhIGxvdCBmYXN0ZXIKICAgIChIYXJpdHNpcykuCi0gICBBZGQgIl5WcngiIG9uIHRoZSBjb21tYW5kIGxpbmUsIHJlcGxhY2Ugd2l0aCBjb250ZW50cyBvZiByZWdpc3RlciB4LiAgVXNlZAogICAgaW5zdGVhZCBvZiBDVFJMLVIgdG8gbWFrZSByZXBlYXRpbmcgcG9zc2libGUuIChNYXJpbmljaGV2KQotICAgQWRkICJeVmIiIG9uIHRoZSBjb21tYW5kIGxpbmUsIHJlcGxhY2Ugd2l0aCB3b3JkIGJlZm9yZSBvciB1bmRlciB0aGUKICAgIGN1cnNvcj8KLSAgIE9wdGlvbiB0byBtYWtlIGEgLnN3cCBmaWxlIG9ubHkgd2hlbiBhIGNoYW5nZSBpcyBtYWRlIChUZW1wbGV0b24pLgotICAgU3VwcG9ydCBtYXBwaW5nIGZvciByZXBsYWNlIG1vZGUgYW5kICJyIiBjb21tYW5kIChWaSBkb2Vzbid0IGRvIHRoaXMpPwo1ICAgQWRkICdpZ25vcmVmaWxlY2FzZScgb3B0aW9uOiBJZ25vcmUgY2FzZSB3aGVuIGV4cGFuZGluZyBmaWxlIG5hbWVzLgogICAgIjplIG1hPFRhYj4iIHdvdWxkIGFsc28gZmluZCAiTWFrZWZpbGUiIG9uIFVuaXguCjggICBTb3J0aW5nIG9mIGZpbGVuYW1lcyBmb3IgY29tcGxldGlvbiBpcyB3cm9uZyBvbiBzeXN0ZW1zIHRoYXQgaWdub3JlCiAgICBjYXNlIG9mIGZpbGVuYW1lcy4gIEFkZCAnaWdub3JlZm5jYXNlJyBvcHRpb24uICBXaGVuIHNldCwgY2FzZSBpbgogICAgZmlsZW5hbWVzIGlzIGlnbm9yZWQgZm9yIHNvcnRpbmcgdGhlbS4gUGF0Y2ggYnkgTWlrZSBXaWxsaWFtczoKICAgIH4vdmltL3BhdGNoZXMvaWdub3JlZm5jYXNlLiAgQWxzbyBjaGFuZ2Ugd2hhdCBtYXRjaGVzPyAgT3IgdXNlIGFub3RoZXIKICAgIG9wdGlvbiBuYW1lLgo4ICAgU2hvdWxkIGJlIGFibGUgdG8gY29tcGlsZSBWaW0gaW4gYW5vdGhlciBkaXJlY3RvcnksIHdpdGggJChzcmNkaXIpIHNldCB0bwogICAgd2hlcmUgdGhlIHNvdXJjZXMgYXJlLiBBZGQgJChzcmNkaXIpIGluIHRoZSBNYWtlZmlsZSBpbiBhIGxvdCBvZiBwbGFjZXMuCiAgICAoTmV0aGVydG9uKQo2ICAgTWFrZSBpdCBjb25maWd1cmFibGUgd2hlbiAiSiIgaW5zZXJ0cyBhIHNwYWNlIG9yIG5vdC4gIFNob3VsZCBub3QgYWRkIGEKICAgIHNwYWNlIGFmdGVyICIoIiwgZm9yIGV4YW1wbGUuCjUgICBXaGVuIGluc2VydGluZyBzcGFjZXMgYWZ0ZXIgdGhlIGVuZC1vZi1saW5lIGZvciAndmlydHVhbGVkaXQnLCB1c2UgdGFicwogICAgd2hlbiB0aGUgdXNlciB3YW50cyB0aGlzIChlLmcuLCBhZGQgYSAidGFiIiBmaWVsZCB0byAndmlydHVhbGVkaXQnKS4KICAgIChTZXJ2YXRpdXMgQnJhbmR0KQoKCkZyb20gRWx2aXM6Ci0gICBVc2UgImluc3RtYW4uc2giIHRvIGluc3RhbGwgbWFucGFnZXM/Ci0gICBBZGQgIjphbGlhcyIgY29tbWFuZC4KLSAgIGZvbnRjaGFuZ2VzIHJlY29nbml6ZWQgIlxcZkIiIGV0Yy4KLSAgIFNlYXJjaCBwYXR0ZXJuczoKICAgICAgXEAJbWF0Y2ggd29yZCB1bmRlciBjdXJzb3IuCiAgICBidXQgZG86CiAgICAgIFxAdwltYXRjaCB0aGUgd29yZCB1bmRlciB0aGUgY3Vyc29yPwogICAgICBcQFcJbWF0Y2ggdGhlIFdPUkQgdW5kZXIgdGhlIGN1cnNvcj8KOCAgICI6d2luZG93IiBjb21tYW5kOgogICAgOndpbiArCW5leHQgd2luZG93ICh1cCkKICAgIDp3aW4gKysJaWRlbSwgd3JhcHBpbmcKICAgIDp3aW4gLQlwcmV2aW91cyB3aW5kb3cgKGRvd24pCiAgICA6d2luIC0tCWlkZW0sIHdyYXBwaW5nCiAgICA6d2luIG5yCXRvIHdpbmRvdyBudW1iZXIgIm5yIgogICAgOndpbiBuYW1lCXRvIHdpbmRvdyBlZGl0aW5nIGJ1ZmZlciAibmFtZSIKNyAgICI6Y2MiIGNvbXBpbGVzIGEgc2luZ2xlIGZpbGUgKGRlZmF1bHQ6IGN1cnJlbnQgb25lKS4gICdjY3ByZycgICBvcHRpb24gaXMKICAgIHByb2dyYW0gdG8gdXNlIHdpdGggIjpjYyIuICBVc2UgIjpjb21waWxlIiBpbnN0ZWFkIG9mICI6Y2MiPwoKCkZyb20gTnZpOgotICAgJ3NlYXJjaGluY3InIG9wdGlvbiwgYWxpYXMgZm9yICdpbmNzZWFyY2gnPwotICAgJ2xlZnRyaWdodCcgb3B0aW9uLCBhbGlhcyBmb3IgJ25vd3JhcCc/Ci0gICBIYXZlIGEgbG9vayBhdCAidmkvZG9jL3ZpLmNoYXJ0IiwgZm9yIE52aSBzcGVjaWFsdGllcy4KOCAgIEFkZCAna2V5dGltZScsIHRpbWUgaW4gMS8xMCBzZWMgZm9yIG1hcHBpbmcgdGltZW91dD8KLSAgIEFkZCAnZmlsZWMnIG9wdGlvbiBhcyBhbiBhbHRlcm5hdGl2ZSBmb3IgJ3dpbGRjaGFyJy4KNiAgIFN1cHBvcnQgTnZpIGNvbW1hbmQgbmFtZXMgYXMgYW4gYWxpYXM6CiAgICA6YmcJCSAgICA6aGlkZQogICAgOmZnCWZuYW1lCSAgICA6YnVmIGZuYW1lICh3aXRoICdoaWRkZW4nIHNldD8pCiAgICA6ZGlzIGIJICAgIDpscwogICAgOkVkaXQgZm5hbWUJICAgIDpzcGxpdCBmbmFtZQogICAgOkZnIGZuYW1lCSAgICA6c2J1ZiBmbmFtZSAod2l0aCAnaGlkZGVuJyBzZXQ/KQogICAgOk5leHQJICAgIDpzbmV4dCAoY2FuJ3QgZG8gdGhpcywgYWxyZWFkeSB1c2UgOk5leHQpCiAgICA6UHJldmlvdXMJICAgIDpzcHJldmlvdXMKICAgIDpUYWcJICAgIDpzdGFnCgoKRnJvbSB4dmk6Ci0gICBDVFJMLV8gOiBzd2FwIDh0aCBiaXQgb2YgY2hhcmFjdGVyLgotICAgQWRkIGVncmVwLWxpa2UgcmVnZXggdHlwZSwgbGlrZSB4dmkgKE5lZCBLb256KSBvciBQZXJsIChFbW1hbnVlbCBNb2dlbmV0KQoKCkZyb20gdmlsZToKLSAgIFdoZW4gaG9yaXpvbnRhbCBzY3JvbGxpbmcsIHVzZSAnPicgZm9yIGxpbmVzIGNvbnRpbnVpbmcgcmlnaHQgb2YgYSB3aW5kb3cuCi0gICBTdXBwb3J0IHB1dHRpbmcgLnN3cCBmaWxlcyBpbiAvdG1wOiBDb21tYW5kIGluIHJjLmxvY2FsIHRvIG1vdmUgLnN3cCBmaWxlcwogICAgZnJvbSAvdG1wIHRvIHNvbWUgZGlyZWN0b3J5IGJlZm9yZSBkZWxldGluZyBmaWxlcy4KCgpGYXIgZnV0dXJlIGFuZCAiYmlnIiBleHRlbnNpb25zOgotICAgSW5zdGVhZCBvZiB1c2luZyBhIE1ha2VmaWxlIGFuZCBhdXRvY29uZiwgdXNlIGEgc2ltcGxlIHNoZWxsIHNjcmlwdCB0bwogICAgZmluZCB0aGUgQyBjb21waWxlciBhbmQgZG8gZXZlcnl0aGluZyB3aXRoIEMgY29kZS4gIFRyYW5zbGF0ZSBzb21ldGhpbmcKICAgIGxpa2UgYW4gQWFwIHJlY2lwZSBhbmQgY29uZmlndXJlLmluIHRvIEMuICBBdm9pZHMgZGVwZW5kaW5nIG9uIFB5dGhvbiwKICAgIHRodXMgd2lsbCB3b3JrIGV2ZXJ5d2hlcmUuICBXaXRoIGJhdGNoIGZpbGUgdG8gZmluZCB0aGUgQyBjb21waWxlciBpdAogICAgd291bGQgYWxzbyB3b3JrIG9uIE1TLVdpbmRvd3MuCi0gICBNYWtlIGl0IGVhc3kgdG8gc2V0dXAgVmltIGZvciBncm91cHMgb2YgdXNlcnM6IG5vdmljZSB2aSB1c2Vycywgbm92aWNlCiAgICBWaW0gdXNlcnMsIEMgcHJvZ3JhbW1lcnMsIHh0ZXJtIHVzZXJzLCBHVUkgdXNlcnMsLi4uCi0gICBDaGFuZ2UgbGF5b3V0IG9mIGJsb2NrcyBpbiBzd2FwIGZpbGU6IFRleHQgYXQgdGhlIHN0YXJ0LCB3aXRoICdcbicgaW4KICAgIGJldHdlZW4gbGluZXMgKGp1c3QgbG9hZCB0aGUgZmlsZSB3aXRob3V0IGNoYW5nZXMsIGV4Y2VwdCBmb3IgTWFjKS4KICAgIEluZGV4ZXMgZm9yIGxpbmVzIGFyZSBmcm9tIHRoZSBlbmQgb2YgdGhlIGJsb2NrIGJhY2t3YXJkcy4gIEl0J3MgdGhlCiAgICBjdXJyZW50IGxheW91dCBtaXJyb3JlZC4KLSAgIE1ha2UgaXQgcG9zc2libGUgdG8gZWRpdCBhIHJlZ2lzdGVyLCBpbiBhIHdpbmRvdywgbGlrZSBhIGJ1ZmZlci4KLSAgIEFkZCBzdHVmZiB0byBzeW50YXggaGlnaGxpZ2h0aW5nIHRvIGNoYW5nZSB0aGUgdGV4dCAodXBwZXItY2FzZSBrZXl3b3JkcywKICAgIHNldCBpbmRlbnQsIGRlZmluZSBvdGhlciBoaWdobGlnaHRpbmcsIGV0Yy4pLgotICAgTW9kZSB0byBrZWVwIEMtY29kZSBmb3JtYXR0ZWQgYWxsIHRoZSB0aW1lIChzb3J0IG9mIG9uLWxpbmUgaW5kZW50KS4KLSAgIFNldmVyYWwgdG9wLWxldmVsIHdpbmRvd3MgaW4gb25lIFZpbSBzZXNzaW9uLiAgQmUgYWJsZSB0byB1c2UgYSBkaWZmZXJlbnQKICAgIGZvbnQgaW4gZWFjaCB0b3AtbGV2ZWwgd2luZG93LgotICAgQWxsb3cgZWRpdGluZyBhYm92ZSBzdGFydCBhbmQgYmVsb3cgZW5kIG9mIGJ1ZmZlciAoZmxhZyBpbiAndmlydHVhbGVkaXQnKS4KLSAgIFNtYXJ0IGN1dC9wYXN0ZTogcmVjb2duaXplIHdvcmRzIGFuZCBhZGp1c3Qgc3BhY2VzIGJlZm9yZS9hZnRlciB0aGVtLgotICAgQWRkIG9wZW4gbW9kZSwgdXNlIGl0IHdoZW4gdGVybWluYWwgaGFzIG5vIGN1cnNvciBwb3NpdGlvbmluZy4KLSAgIFNwZWNpYWwgImRyYXdpbmcgbW9kZSI6IGEgbGluZSBpcyBkcmF3biB3aGVyZSB0aGUgY3Vyc29yIGlzIG1vdmVkIHRvLgogICAgQmFja3NwYWNlIGRlbGV0ZXMgYWxvbmcgdGhlIGxpbmUgKGZyb20ganZpbSkuCi0gICBJbXBsZW1lbnQgIjpCc2V0Iiwgc2V0IG9wdGlvbiBpbiBhbGwgYnVmZmVycy4gIEFsc28gIjpXc2V0Iiwgc2V0IGluIGFsbAogICAgd2luZG93cywgIjpBc2V0LCBzZXQgaW4gYWxsIGFyZ3VtZW50cyBhbmQgIjpUc2V0Iiwgc2V0IGluIGFsbCBmaWxlcwogICAgbWVudGlvbmVkIGluIHRoZSB0YWdzIGZpbGUuCiAgICBBZGQgYnVmZmVyL2FyZyByYW5nZSwgbGlrZSBpbiAiOjIsNUIlcy8uLi4iIChkbyB3ZSByZWFsbHkgbmVlZCB0aGlzPz8/KQogICAgQWRkIHNlYXJjaCBzdHJpbmc6ICJCLyouYy8lcy8uLiI/ICBPciAiOkYvKi5jLyVzLy4uIj8KLSAgIFN1cHBvcnQgZm9yIHVuZGVybGluaW5nICh1bmRlcnNjb3JlLUJTLWNoYXIpLCBib2xkIChjaGFyLUJTLWNoYXIpIGFuZCBvdGhlcgogICAgc3RhbmRvdXQgbW9kZXMgc3dpdGNoZWQgb24vb2ZmIHdpdGggLCAnb3ZlcnN0cmlrZScgb3B0aW9uIChSZWl0ZXIpLgotICAgQWRkIHZlcnRpY2FsIG1vZGUgKFBhdWwgSnVyeSwgRGVtaXJlbCk6ICI1dmR3IiBkZWxldGVzIGEgd29yZCBpbiBmaXZlCiAgICBsaW5lcywgIjN2aXRleHRFU0MiIHdpbGwgaW5zZXJ0ICJ0ZXh0IiBpbiB0aHJlZSBsaW5lcywgZXRjLi4KNCAgIFJlY29nbml6ZSBsLCAjLCBwIGFzICdmbGFncycgdG8gRVggY29tbWFuZHM6CiAgICA6Zy9SRS8jbCBzaGFsbCBwcmludCBsaW5lcyB3aXRoIGxpbmUgbnVtYmVycyBhbmQgaW4gbGlzdCBmb3JtYXQuCiAgICA6Zy9SRS9kcCBzaGFsbCBwcmludCBsaW5lcyB0aGF0IGFyZSBkZWxldGVkLgogICAgUE9TSVg6IENvbW1hbmRzIHdoZXJlIGZsYWdzIHNoYWxsIGFwcGx5IHRvIGFsbCBsaW5lcyB3cml0dGVuOiBsaXN0LAogICAgbnVtYmVyLCBvcGVuLCBwcmludCwgc3Vic3RpdHV0ZSwgdmlzdWFsLCAmLCB6LiAgRm9yIG90aGVyIGNvbW1hbmRzLCBmbGFncwogICAgc2hhbGwgYXBwbHkgdG8gdGhlIGN1cnJlbnQgbGluZSBhZnRlciB0aGUgY29tbWFuZCBjb21wbGV0ZXMuICBFeGFtcGxlczoKICAgIDo3LDEwaiAjbCBKb2luIHRoZSBsaW5lcyA3LTEwIGFuZCBwcmludCB0aGUgcmVzdWx0IGluIGxpc3QKLSAgIEFsbG93IHR3byBvciBtb3JlIHVzZXJzIHRvIGVkaXQgdGhlIHNhbWUgZmlsZSBhdCB0aGUgc2FtZSB0aW1lLiAgQ2hhbmdlcwogICAgYXJlIHJlZmxlY3RlZCBpbiBlYWNoIFZpbSBpbW1lZGlhdGVseS4gIENvdWxkIHdvcmsgd2l0aCBsb2NhbCBmaWxlcyBidXQKICAgIGFsc28gb3ZlciB0aGUgaW50ZXJuZXQuICBTZWUgaHR0cDovL3d3dy5jb2Rpbmdtb25rZXlzLmRlL3N1YmV0aGFlZGl0Ly4KCldoZW4gdXNpbmcgImRvIiBvciAiOmRpZmZnZXQiIGluIGEgYnVmZmVyIHdpdGggY2hhbmdlcyBpbiBldmVyeSBsaW5lIGFuIGV4dHJhCmVtcHR5IGxpbmUgd291bGQgYXBwZWFyLgoKdmltOnR3PTc4OnN3PTQ6c3RzPTQ6dHM9ODpmdD1oZWxwOm5vcmw6CnZpbTogc2V0IGZvKz1uIDoK