Km1hcC50eHQqICAgICAgIEZvciBWaW0gdmVyc2lvbiA3LjAuICBMYXN0IGNoYW5nZTogMjAwNiBNYXkgMDMKCgoJCSAgVklNIFJFRkVSRU5DRSBNQU5VQUwgICAgYnkgQnJhbSBNb29sZW5hYXIKCgpLZXkgbWFwcGluZywgYWJicmV2aWF0aW9ucyBhbmQgdXNlci1kZWZpbmVkIGNvbW1hbmRzLgoKVGhpcyBzdWJqZWN0IGlzIGludHJvZHVjZWQgaW4gc2VjdGlvbnMgfDA1LjN8LCB8MjQuN3wgYW5kIHw0MC4xfCBvZiB0aGUgdXNlcgptYW51YWwuCgoxLiBLZXkgbWFwcGluZwkJCXxrZXktbWFwcGluZ3wKICAgMS4xIE1BUCBDT01NQU5EUwkJCXw6bWFwLWNvbW1hbmRzfAogICAxLjIgU3BlY2lhbCBhcmd1bWVudHMJCXw6bWFwLWFyZ3VtZW50c3wKICAgMS4zIE1hcHBpbmcgYW5kIG1vZGVzCQl8Om1hcC1tb2Rlc3wKICAgMS40IExpc3RpbmcgbWFwcGluZ3MJCQl8bWFwLWxpc3Rpbmd8CiAgIDEuNSBNYXBwaW5nIHNwZWNpYWwga2V5cwkJfDptYXAtc3BlY2lhbC1rZXlzfAogICAxLjYgU3BlY2lhbCBjaGFyYWN0ZXJzCQl8Om1hcC1zcGVjaWFsLWNoYXJzfAogICAxLjcgV2hhdCBrZXlzIHRvIG1hcAkJCXxtYXAtd2hpY2gta2V5c3wKICAgMS44IEV4YW1wbGVzCQkJCXxtYXAtZXhhbXBsZXN8CiAgIDEuOSBVc2luZyBtYXBwaW5ncwkJCXxtYXAtdHlwaW5nfAogICAxLjEwIE1hcHBpbmcgYWx0LWtleXMJCXw6bWFwLWFsdC1rZXlzfAogICAxLjExIE1hcHBpbmcgYW4gb3BlcmF0b3IJCXw6bWFwLW9wZXJhdG9yfAoyLiBBYmJyZXZpYXRpb25zCQl8YWJicmV2aWF0aW9uc3wKMy4gTG9jYWwgbWFwcGluZ3MgYW5kIGZ1bmN0aW9ucwl8c2NyaXB0LWxvY2FsfAo0LiBVc2VyLWRlZmluZWQgY29tbWFuZHMJfHVzZXItY29tbWFuZHN8Cgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gS2V5IG1hcHBpbmcJCQkJKmtleS1tYXBwaW5nKiAqbWFwcGluZyogKm1hY3JvKgoKS2V5IG1hcHBpbmcgaXMgdXNlZCB0byBjaGFuZ2UgdGhlIG1lYW5pbmcgb2YgdHlwZWQga2V5cy4gIFRoZSBtb3N0IGNvbW1vbiB1c2UKaXMgdG8gZGVmaW5lIGEgc2VxdWVuY2UgY29tbWFuZHMgZm9yIGEgZnVuY3Rpb24ga2V5LiAgRXhhbXBsZTogPgoKCTptYXAgPEYyPiBhPEMtUj49c3RyZnRpbWUoIiVjIik8Q1I+PEVzYz4KClRoaXMgYXBwZW5kcyB0aGUgY3VycmVudCBkYXRlIGFuZCB0aW1lIGFmdGVyIHRoZSBjdXJzb3IgKGluIDw+IG5vdGF0aW9uIHw8PnwpLgoKCjEuMSBNQVAgQ09NTUFORFMJCQkJCSo6bWFwLWNvbW1hbmRzKgoKVGhlcmUgYXJlIGNvbW1hbmRzIHRvIGVudGVyIG5ldyBtYXBwaW5ncywgcmVtb3ZlIG1hcHBpbmdzIGFuZCBsaXN0IG1hcHBpbmdzLgpTZWUgfG1hcC1vdmVydmlld3wgZm9yIHRoZSB2YXJpb3VzIGZvcm1zIG9mICJtYXAiIGFuZCB0aGVpciByZWxhdGlvbnNoaXBzIHdpdGgKbW9kZXMuCgp7bGhzfQltZWFucyBsZWZ0LWhhbmQtc2lkZQkqe2xoc30qCntyaHN9CW1lYW5zIHJpZ2h0LWhhbmQtc2lkZQkqe3Joc30qCgo6bWFwCXtsaHN9IHtyaHN9CQl8bWFwbW9kZS1udm98CQkqOm1hcCoKOm5tW2FwXQl7bGhzfSB7cmhzfQkJfG1hcG1vZGUtbnwJCSo6bm0qICo6bm1hcCoKOnZtW2FwXQl7bGhzfSB7cmhzfQkJfG1hcG1vZGUtdnwJCSo6dm0qICo6dm1hcCoKOnhtW2FwXQl7bGhzfSB7cmhzfQkJfG1hcG1vZGUteHwJCSo6eG0qICo6eG1hcCoKOnNtYXAJe2xoc30ge3Joc30JCXxtYXBtb2RlLXN8CQkgICAgICAqOnNtYXAqCjpvbVthcF0Je2xoc30ge3Joc30JCXxtYXBtb2RlLW98CQkqOm9tKiAqOm9tYXAqCjptYXAhCXtsaHN9IHtyaHN9CQl8bWFwbW9kZS1pY3wJCSo6bWFwISoKOmltW2FwXQl7bGhzfSB7cmhzfQkJfG1hcG1vZGUtaXwJCSo6aW0qICo6aW1hcCoKOmxtW2FwXQl7bGhzfSB7cmhzfQkJfG1hcG1vZGUtbHwJCSo6bG0qICo6bG1hcCoKOmNtW2FwXQl7bGhzfSB7cmhzfQkJfG1hcG1vZGUtY3wJCSo6Y20qICo6Y21hcCoKCQkJTWFwIHRoZSBrZXkgc2VxdWVuY2Uge2xoc30gdG8ge3Joc30gZm9yIHRoZSBtb2RlcwoJCQl3aGVyZSB0aGUgbWFwIGNvbW1hbmQgYXBwbGllcy4gIFRoZSByZXN1bHQsIGluY2x1ZGluZwoJCQl7cmhzfSwgaXMgdGhlbiBmdXJ0aGVyIHNjYW5uZWQgZm9yIG1hcHBpbmdzLiAgVGhpcwoJCQlhbGxvd3MgZm9yIG5lc3RlZCBhbmQgcmVjdXJzaXZlIHVzZSBvZiBtYXBwaW5ncy4KCgo6bm9bcmVtYXBdICB7bGhzfSB7cmhzfQkJfG1hcG1vZGUtbnZvfAkJKjpubyogICo6bm9yZW1hcCoKOm5uW29yZW1hcF0ge2xoc30ge3Joc30JCXxtYXBtb2RlLW58CQkqOm5uKiAgKjpubm9yZW1hcCoKOnZuW29yZW1hcF0ge2xoc30ge3Joc30JCXxtYXBtb2RlLXZ8CQkqOnZuKiAgKjp2bm9yZW1hcCoKOnhuW29yZW1hcF0ge2xoc30ge3Joc30JCXxtYXBtb2RlLXh8CQkqOnhuKiAgKjp4bm9yZW1hcCoKOnNub3JbZW1hcF0ge2xoc30ge3Joc30JCXxtYXBtb2RlLXN8CQkqOnNub3IqICo6c25vcmVtYXAqCjpvbm9bcmVtYXBdIHtsaHN9IHtyaHN9CQl8bWFwbW9kZS1vfAkJKjpvbm8qICo6b25vcmVtYXAqCjpub1tyZW1hcF0hIHtsaHN9IHtyaHN9CQl8bWFwbW9kZS1pY3wJCSo6bm8hKiAqOm5vcmVtYXAhKgo6aW5vW3JlbWFwXSB7bGhzfSB7cmhzfQkJfG1hcG1vZGUtaXwJCSo6aW5vKiAqOmlub3JlbWFwKgo6bG5bb3JlbWFwXSB7bGhzfSB7cmhzfQkJfG1hcG1vZGUtbHwJCSo6bG4qICAqOmxub3JlbWFwKgo6Y25vW3JlbWFwXSB7bGhzfSB7cmhzfQkJfG1hcG1vZGUtY3wJCSo6Y25vKiAqOmNub3JlbWFwKgoJCQlNYXAgdGhlIGtleSBzZXF1ZW5jZSB7bGhzfSB0byB7cmhzfSBmb3IgdGhlIG1vZGVzCgkJCXdoZXJlIHRoZSBtYXAgY29tbWFuZCBhcHBsaWVzLiAgRGlzYWxsb3cgbWFwcGluZyBvZgoJCQl7cmhzfSwgdG8gYXZvaWQgbmVzdGVkIGFuZCByZWN1cnNpdmUgbWFwcGluZ3MuICBPZnRlbgoJCQl1c2VkIHRvIHJlZGVmaW5lIGEgY29tbWFuZC4gIHtub3QgaW4gVml9CgoKOnVubVthcF0gIHtsaHN9CQkJfG1hcG1vZGUtbnZvfAkJKjp1bm0qICAqOnVubWFwKgo6bnVuW21hcF0ge2xoc30JCQl8bWFwbW9kZS1ufAkJKjpudW4qICAqOm51bm1hcCoKOnZ1W25tYXBdIHtsaHN9CQkJfG1hcG1vZGUtdnwJCSo6dnUqICAgKjp2dW5tYXAqCjp4dVtubWFwXSB7bGhzfQkJCXxtYXBtb2RlLXh8CQkqOnh1KiAgICo6eHVubWFwKgo6c3VubVthcF0ge2xoc30JCQl8bWFwbW9kZS1zfAkJKjpzdW5tKiAqOnN1bm1hcCoKOm91W25tYXBdIHtsaHN9CQkJfG1hcG1vZGUtb3wJCSo6b3UqICAgKjpvdW5tYXAqCjp1bm1bYXBdISB7bGhzfQkJCXxtYXBtb2RlLWljfAkJKjp1bm0hKiAqOnVubWFwISoKOml1W25tYXBdIHtsaHN9CQkJfG1hcG1vZGUtaXwJCSo6aXUqICAgKjppdW5tYXAqCjpsdVtubWFwXSB7bGhzfQkJCXxtYXBtb2RlLWx8CQkqOmx1KiAgICo6bHVubWFwKgo6Y3Vbbm1hcF0ge2xoc30JCQl8bWFwbW9kZS1jfAkJKjpjdSogICAqOmN1bm1hcCoKCQkJUmVtb3ZlIHRoZSBtYXBwaW5nIG9mIHtsaHN9IGZvciB0aGUgbW9kZXMgd2hlcmUgdGhlCgkJCW1hcCBjb21tYW5kIGFwcGxpZXMuICBUaGUgbWFwcGluZyBtYXkgcmVtYWluIGRlZmluZWQKCQkJZm9yIG90aGVyIG1vZGVzIHdoZXJlIGl0IGFwcGxpZXMuCgkJCU5vdGU6IFRyYWlsaW5nIHNwYWNlcyBhcmUgaW5jbHVkZWQgaW4gdGhlIHtsaHN9LiAgVGhpcwoJCQl1bm1hcCBkb2VzIE5PVCB3b3JrOiA+CgkJCQk6bWFwIEBAIGZvbwoJCQkJOnVubWFwIEBAIHwgcHJpbnQKCjptYXBjW2xlYXJdCQkJfG1hcG1vZGUtbnZvfAkJKjptYXBjKiAgICo6bWFwY2xlYXIqCjpubWFwY1tsZWFyXQkJCXxtYXBtb2RlLW58CQkqOm5tYXBjKiAgKjpubWFwY2xlYXIqCjp2bWFwY1tsZWFyXQkJCXxtYXBtb2RlLXZ8CQkqOnZtYXBjKiAgKjp2bWFwY2xlYXIqCjp4bWFwY1tsZWFyXQkJCXxtYXBtb2RlLXh8CQkqOnhtYXBjKiAgKjp4bWFwY2xlYXIqCjpzbWFwY1tsZWFyXQkJCXxtYXBtb2RlLXN8CQkqOnNtYXBjKiAgKjpzbWFwY2xlYXIqCjpvbWFwY1tsZWFyXQkJCXxtYXBtb2RlLW98CQkqOm9tYXBjKiAgKjpvbWFwY2xlYXIqCjptYXBjW2xlYXJdIQkJCXxtYXBtb2RlLWljfAkJKjptYXBjISogICo6bWFwY2xlYXIhKgo6aW1hcGNbbGVhcl0JCQl8bWFwbW9kZS1pfAkJKjppbWFwYyogICo6aW1hcGNsZWFyKgo6bG1hcGNbbGVhcl0JCQl8bWFwbW9kZS1sfAkJKjpsbWFwYyogICo6bG1hcGNsZWFyKgo6Y21hcGNbbGVhcl0JCQl8bWFwbW9kZS1jfAkJKjpjbWFwYyogICo6Y21hcGNsZWFyKgoJCQlSZW1vdmUgQUxMIG1hcHBpbmdzIGZvciB0aGUgbW9kZXMgd2hlcmUgdGhlIG1hcAoJCQljb21tYW5kIGFwcGxpZXMuICB7bm90IGluIFZpfQoJCQlXYXJuaW5nOiBUaGlzIGFsc28gcmVtb3ZlcyB0aGUgZGVmYXVsdCBtYXBwaW5ncy4KCjptYXAJCQkJfG1hcG1vZGUtbnZvfAo6bm1bYXBdCQkJCXxtYXBtb2RlLW58Cjp2bVthcF0JCQkJfG1hcG1vZGUtdnwKOnhtW2FwXQkJCQl8bWFwbW9kZS14fAo6c21bYXBdCQkJCXxtYXBtb2RlLXN8CjpvbVthcF0JCQkJfG1hcG1vZGUtb3wKOm1hcCEJCQkJfG1hcG1vZGUtaWN8CjppbVthcF0JCQkJfG1hcG1vZGUtaXwKOmxtW2FwXQkJCQl8bWFwbW9kZS1sfAo6Y21bYXBdCQkJCXxtYXBtb2RlLWN8CgkJCUxpc3QgYWxsIGtleSBtYXBwaW5ncyBmb3IgdGhlIG1vZGVzIHdoZXJlIHRoZSBtYXAKCQkJY29tbWFuZCBhcHBsaWVzLiAgTm90ZSB0aGF0ICI6bWFwIiBhbmQgIjptYXAhIiBhcmUKCQkJdXNlZCBtb3N0IG9mdGVuLCBiZWNhdXNlIHRoZXkgaW5jbHVkZSB0aGUgb3RoZXIgbW9kZXMuCgo6bWFwICAgIHtsaHN9CQkJfG1hcG1vZGUtbnZvfAkJKjptYXBfbCoKOm5tW2FwXSB7bGhzfQkJCXxtYXBtb2RlLW58CQkqOm5tYXBfbCoKOnZtW2FwXSB7bGhzfQkJCXxtYXBtb2RlLXZ8CQkqOnZtYXBfbCoKOnhtW2FwXSB7bGhzfQkJCXxtYXBtb2RlLXh8CQkqOnhtYXBfbCoKOnNtW2FwXSB7bGhzfQkJCXxtYXBtb2RlLXN8CQkqOnNtYXBfbCoKOm9tW2FwXSB7bGhzfQkJCXxtYXBtb2RlLW98CQkqOm9tYXBfbCoKOm1hcCEgICB7bGhzfQkJCXxtYXBtb2RlLWljfAkJKjptYXBfbCEqCjppbVthcF0ge2xoc30JCQl8bWFwbW9kZS1pfAkJKjppbWFwX2wqCjpsbVthcF0ge2xoc30JCQl8bWFwbW9kZS1sfAkJKjpsbWFwX2wqCjpjbVthcF0ge2xoc30JCQl8bWFwbW9kZS1jfAkJKjpjbWFwX2wqCgkJCUxpc3QgdGhlIGtleSBtYXBwaW5ncyBmb3IgdGhlIGtleSBzZXF1ZW5jZXMgc3RhcnRpbmcKCQkJd2l0aCB7bGhzfSBpbiB0aGUgbW9kZXMgd2hlcmUgdGhlIG1hcCBjb21tYW5kIGFwcGxpZXMuCgkJCXtub3QgaW4gVml9CgpUaGVzZSBjb21tYW5kcyBhcmUgdXNlZCB0byBtYXAgYSBrZXkgb3Iga2V5IHNlcXVlbmNlIHRvIGEgc3RyaW5nIG9mCmNoYXJhY3RlcnMuICBZb3UgY2FuIHVzZSB0aGlzIHRvIHB1dCBjb21tYW5kIHNlcXVlbmNlcyB1bmRlciBmdW5jdGlvbiBrZXlzLAp0cmFuc2xhdGUgb25lIGtleSBpbnRvIGFub3RoZXIsIGV0Yy4gIFNlZSB8Om1rZXhyY3wgZm9yIGhvdyB0byBzYXZlIGFuZApyZXN0b3JlIHRoZSBjdXJyZW50IG1hcHBpbmdzLgoKCQkJCQkJCSptYXAtYW1iaWd1b3VzKgpXaGVuIHR3byBtYXBwaW5ncyBzdGFydCB3aXRoIHRoZSBzYW1lIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMsIHRoZXkgYXJlCmFtYmlndW91cy4gIEV4YW1wbGU6ID4KCTppbWFwIGFhIGZvbwoJOmltYXAgYWFhIGJhcgpXaGVuIFZpbSBoYXMgcmVhZCAiYWEiLCBpdCB3aWxsIG5lZWQgdG8gZ2V0IGFub3RoZXIgY2hhcmFjdGVyIHRvIGJlIGFibGUgdG8KZGVjaWRlIGlmICJhYSIgb3IgImFhYSIgc2hvdWxkIGJlIG1hcHBlZC4gIFRoaXMgbWVhbnMgdGhhdCBhZnRlciB0eXBpbmcgImFhIgp0aGF0IG1hcHBpbmcgd29uJ3QgZ2V0IGV4cGFuZGVkIHlldCwgVmltIGlzIHdhaXRpbmcgZm9yIGFub3RoZXIgY2hhcmFjdGVyLgpJZiB5b3UgdHlwZSBhIHNwYWNlLCB0aGVuICJmb28iIHdpbGwgZ2V0IGluc2VydGVkLCBwbHVzIHRoZSBzcGFjZS4gIElmIHlvdQp0eXBlICJhIiwgdGhlbiAiYmFyIiB3aWxsIGdldCBpbnNlcnRlZC4Ke1ZpIGRvZXMgbm90IGFsbG93IGFtYmlndW91cyBtYXBwaW5nc30KCgoxLjIgU1BFQ0lBTCBBUkdVTUVOVFMJCQkJCSo6bWFwLWFyZ3VtZW50cyoKCiI8YnVmZmVyPiIsICI8c2lsZW50PiIsICI8c3BlY2lhbD4iLCAiPHNjcmlwdD4iLCAiPGV4cHI+IiBhbmQgIjx1bmlxdWU+IiBjYW4KYmUgdXNlZCBpbiBhbnkgb3JkZXIuICBUaGV5IG11c3QgYXBwZWFyIHJpZ2h0IGFmdGVyIHRoZSBjb21tYW5kLCBiZWZvcmUgYW55Cm90aGVyIGFyZ3VtZW50cy4KCgkJCQkqOm1hcC1sb2NhbCogKjptYXAtPGJ1ZmZlcj4qICpFMjI0KiAqRTIyNSoKSWYgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIG9uZSBvZiB0aGVzZSBjb21tYW5kcyBpcyAiPGJ1ZmZlcj4iIGl0IHdpbGwgYXBwbHkgdG8KbWFwcGluZ3MgbG9jYWxseSB0byB0aGUgY3VycmVudCBidWZmZXIgb25seS4gIEV4YW1wbGU6ID4KCTptYXAgPGJ1ZmZlcj4gICx3ICAvWy4sO108Q1I+ClRoZW4geW91IGNhbiBtYXAgIix3IiB0byBzb21ldGhpbmcgZWxzZSBpbiBhbm90aGVyIGJ1ZmZlcjogPgoJOm1hcCA8YnVmZmVyPiAgLHcgIC9bIyYhXTxDUj4KVGhlIGxvY2FsIGJ1ZmZlciBtYXBwaW5ncyBhcmUgdXNlZCBiZWZvcmUgdGhlIGdsb2JhbCBvbmVzLgpUaGUgIjxidWZmZXI+IiBhcmd1bWVudCBjYW4gYWxzbyBiZSB1c2VkIHRvIGNsZWFyIG1hcHBpbmdzOiA+Cgk6dW5tYXAgPGJ1ZmZlcj4gLHcKCTptYXBjbGVhciA8YnVmZmVyPgpMb2NhbCBtYXBwaW5ncyBhcmUgYWxzbyBjbGVhcmVkIHdoZW4gYSBidWZmZXIgaXMgZGVsZXRlZCwgYnV0IG5vdCB3aGVuIGl0IGlzCnVubG9hZGVkLiAgSnVzdCBsaWtlIGxvY2FsIG9wdGlvbiB2YWx1ZXMuCgoJCQkJCQkqOm1hcC08c2lsZW50PiogKjptYXAtc2lsZW50KgpUbyBkZWZpbmUgYSBtYXBwaW5nIHdoaWNoIHdpbGwgbm90IGJlIGVjaG9lZCBvbiB0aGUgY29tbWFuZCBsaW5lLCBhZGQKIjxzaWxlbnQ+IiBhcyB0aGUgZmlyc3QgYXJndW1lbnQuICBFeGFtcGxlOiA+Cgk6bWFwIDxzaWxlbnQ+ICxoIC9IZWFkZXI8Q1I+ClRoZSBzZWFyY2ggc3RyaW5nIHdpbGwgbm90IGJlIGVjaG9lZCB3aGVuIHVzaW5nIHRoaXMgbWFwcGluZy4gIE1lc3NhZ2VzIGZyb20KdGhlIGV4ZWN1dGVkIGNvbW1hbmQgYXJlIHN0aWxsIGdpdmVuIHRob3VnaC4gIFRvIHNodXQgdGhlbSB1cCB0b28sIGFkZCBhCiI6c2lsZW50IiBpbiB0aGUgZXhlY3V0ZWQgY29tbWFuZDogPgoJOm1hcCA8c2lsZW50PiAsaCA6ZXhlICI6c2lsZW50IG5vcm1hbCAvSGVhZGVyXHIiPENSPgpQcm9tcHRzIHdpbGwgc3RpbGwgYmUgZ2l2ZW4sIGUuZy4sIGZvciBpbnB1dGRpYWxvZygpLgpVc2luZyAiPHNpbGVudD4iIGZvciBhbiBhYmJyZXZpYXRpb24gaXMgcG9zc2libGUsIGJ1dCB3aWxsIGNhdXNlIHJlZHJhd2luZyBvZgp0aGUgY29tbWFuZCBsaW5lIHRvIGZhaWwuCgoJCQkJCQkqOm1hcC08c3BlY2lhbD4qICo6bWFwLXNwZWNpYWwqCkRlZmluZSBhIG1hcHBpbmcgd2l0aCA8PiBub3RhdGlvbiBmb3Igc3BlY2lhbCBrZXlzLCBldmVuIHRob3VnaCB0aGUgIjwiIGZsYWcKbWF5IGFwcGVhciBpbiAnY3BvcHRpb25zJy4gIFRoaXMgaXMgdXNlZnVsIGlmIHRoZSBzaWRlIGVmZmVjdCBvZiBzZXR0aW5nCidjcG9wdGlvbnMnIGlzIG5vdCBkZXNpcmVkLiAgRXhhbXBsZTogPgoJOm1hcCA8c3BlY2lhbD4gPEYxMj4gL0hlYWRlcjxDUj4KPAoJCQkJCQkqOm1hcC08c2NyaXB0PiogKjptYXAtc2NyaXB0KgpJZiB0aGUgZmlyc3QgYXJndW1lbnQgdG8gb25lIG9mIHRoZXNlIGNvbW1hbmRzIGlzICI8c2NyaXB0PiIgYW5kIGl0IGlzIHVzZWQgdG8KZGVmaW5lIGEgbmV3IG1hcHBpbmcgb3IgYWJicmV2aWF0aW9uLCB0aGUgbWFwcGluZyB3aWxsIG9ubHkgcmVtYXAgY2hhcmFjdGVycwppbiB0aGUge3Joc30gdXNpbmcgbWFwcGluZ3MgdGhhdCB3ZXJlIGRlZmluZWQgbG9jYWwgdG8gYSBzY3JpcHQsIHN0YXJ0aW5nIHdpdGgKIjxTSUQ+Ii4gIFRoaXMgY2FuIGJlIHVzZWQgdG8gYXZvaWQgdGhhdCBtYXBwaW5ncyBmcm9tIG91dHNpZGUgYSBzY3JpcHQKaW50ZXJmZXJlIChlLmcuLCB3aGVuIENUUkwtViBpcyByZW1hcHBlZCBpbiBtc3dpbi52aW0pLCBidXQgZG8gdXNlIG90aGVyCm1hcHBpbmdzIGRlZmluZWQgaW4gdGhlIHNjcmlwdC4KTm90ZTogIjptYXAgPHNjcmlwdD4iIGFuZCAiOm5vcmVtYXAgPHNjcmlwdD4iIGRvIHRoZSBzYW1lIHRoaW5nLiAgVGhlCiI8c2NyaXB0PiIgb3ZlcnJ1bGVzIHRoZSBjb21tYW5kIG5hbWUuICBVc2luZyAiOm5vcmVtYXAgPHNjcmlwdD4iIGlzCnByZWZlcnJlZCwgYmVjYXVzZSBpdCdzIGNsZWFyZXIgdGhhdCByZW1hcHBpbmcgaXMgKG1vc3RseSkgZGlzYWJsZWQuCgoJCQkJCQkqOm1hcC08dW5pcXVlPiogKkUyMjYqICpFMjI3KgpJZiB0aGUgZmlyc3QgYXJndW1lbnQgdG8gb25lIG9mIHRoZXNlIGNvbW1hbmRzIGlzICI8dW5pcXVlPiIgYW5kIGl0IGlzIHVzZWQgdG8KZGVmaW5lIGEgbmV3IG1hcHBpbmcgb3IgYWJicmV2aWF0aW9uLCB0aGUgY29tbWFuZCB3aWxsIGZhaWwgaWYgdGhlIG1hcHBpbmcgb3IKYWJicmV2aWF0aW9uIGFscmVhZHkgZXhpc3RzLiAgRXhhbXBsZTogPgoJOm1hcCA8dW5pcXVlPiAsdyAgL1sjJiFdPENSPgpXaGVuIGRlZmluaW5nIGEgbG9jYWwgbWFwcGluZywgdGhlcmUgd2lsbCBhbHNvIGJlIGEgY2hlY2sgaWYgYSBnbG9iYWwgbWFwCmFscmVhZHkgZXhpc3RzIHdoaWNoIGlzIGVxdWFsLgpFeGFtcGxlIG9mIHdoYXQgd2lsbCBmYWlsOiA+Cgk6bWFwICx3ICAvWyMmIV08Q1I+Cgk6bWFwIDxidWZmZXI+IDx1bmlxdWU+ICx3ICAvWy4sO108Q1I+CklmIHlvdSB3YW50IHRvIG1hcCBhIGtleSBhbmQgdGhlbiBoYXZlIGl0IGRvIHdoYXQgaXQgd2FzIG9yaWdpbmFsbHkgbWFwcGVkIHRvLApoYXZlIGEgbG9vayBhdCB8bWFwYXJnKCl8LgoKCQkJCQkJKjptYXAtPGV4cHI+KiAqOm1hcC1leHByZXNzaW9uKgpJZiB0aGUgZmlyc3QgYXJndW1lbnQgdG8gb25lIG9mIHRoZXNlIGNvbW1hbmRzIGlzICI8ZXhwcj4iIGFuZCBpdCBpcyB1c2VkIHRvCmRlZmluZSBhIG5ldyBtYXBwaW5nIG9yIGFiYnJldmlhdGlvbiwgdGhlIGFyZ3VtZW50IGlzIGFuIGV4cHJlc3Npb24uICBUaGUKZXhwcmVzc2lvbiBpcyBldmFsdWF0ZWQgdG8gb2J0YWluIHRoZSB7cmhzfSB0aGF0IGlzIHVzZWQuICBFeGFtcGxlOiA+Cgk6aW5vcmVtYXAgPGV4cHI+IC4gSW5zZXJ0RG90KCkKVGhlIHJlc3VsdCBvZiB0aGUgSW5zZXJ0RG90KCkgZnVuY3Rpb24gd2lsbCBiZSBpbnNlcnRlZC4gIEl0IGNvdWxkIGNoZWNrIHRoZQp0ZXh0IGJlZm9yZSB0aGUgY3Vyc29yIGFuZCBzdGFydCBvbW5pIGNvbXBsZXRpb24gd2hlbiBzb21lIGNvbmRpdGlvbiBpcyBtZXQuCgpCZSB2ZXJ5IGNhcmVmdWwgYWJvdXQgc2lkZSBlZmZlY3RzISAgVGhlIGV4cHJlc3Npb24gaXMgZXZhbHVhdGVkIHdoaWxlCm9idGFpbmluZyBjaGFyYWN0ZXJzLCB5b3UgbWF5IHZlcnkgd2VsbCBtYWtlIHRoZSBjb21tYW5kIGR5c2Z1bmN0aW9uYWwuCkZvciB0aGlzIHJlYXNvbiB0aGUgZm9sbG93aW5nIGlzIGJsb2NrZWQ6Ci0gY2hhbmdpbmcgdGhlIGJ1ZmZlciB0ZXh0IHx0ZXh0bG9ja3wKLSBlZGl0aW5nIGFub3RoZXIgYnVmZmVyCi0gdGhlIHw6bm9ybWFsfCBjb21tYW5kCi0gbW92aW5nIHRoZSBjdXJzb3IgaXMgYWxsb3dlZCwgYnV0IGl0IGlzIHJlc3RvcmVkIGFmdGVyd2FyZHMKSWYgeW91IHdhbnQgdGhlIG1hcHBpbmcgdG8gZG8gYW55IG9mIHRoZXNlIGxldCB0aGUgcmV0dXJuZWQgY2hhcmFjdGVycyBkbwp0aGF0LgoKSGVyZSBpcyBhbiBleGFtcGxlIHRoYXQgaW5zZXJ0cyBhIGxpc3QgbnVtYmVyIHRoYXQgaW5jcmVhc2VzOiA+CglsZXQgY291bnRlciA9IDAKCWlub3JlbWFwIDxleHByPiA8Qy1MPiBMaXN0SXRlbSgpCglpbm9yZW1hcCA8ZXhwcj4gPEMtUj4gTGlzdFJlc2V0KCkKCglmdW5jIExpc3RJdGVtKCkKCSAgbGV0IGc6Y291bnRlciArPSAxCgkgIHJldHVybiBnOmNvdW50ZXIgLiAnLiAnCgllbmRmdW5jCgoJZnVuYyBMaXN0UmVzZXQoKQoJICBsZXQgZzpjb3VudGVyID0gMAoJICByZXR1cm4gJycKCWVuZGZ1bmMKCkNUUkwtTCBpbnNlcnRzIHRoZSBuZXh0IG51bWJlciwgQ1RSTC1SIHJlc2V0cyB0aGUgY291bnQuICBDVFJMLVIgcmV0dXJucyBhbgplbXB0eSBzdHJpbmcsIHNvIHRoYXQgbm90aGluZyBpcyBpbnNlcnRlZC4KCk5vdGUgdGhhdCB0aGVyZSBhcmUgc29tZSB0cmlja3MgdG8gbWFrZSBzcGVjaWFsIGtleXMgd29yayBhbmQgZXNjYXBlIENTSSBieXRlcwppbiB0aGUgdGV4dC4gIFRoZSB8Om1hcHwgY29tbWFuZCBhbHNvIGRvZXMgdGhpcywgdGh1cyB5b3UgbXVzdCBhdm9pZCB0aGF0IGl0CmlzIGRvbmUgdHdpY2UuICBUaGlzIGRvZXMgbm90IHdvcms6ID4KCTppbWFwIDxleHByPiA8RjM+ICI8Q2hhci0weDYxMUI+IgpCZWNhdXNlIHRoZSA8Q2hhci0gc2VxdWVuY2UgaXMgZXNjYXBlZCBmb3IgYmVpbmcgYSB8OmltYXB8IGFyZ3VtZW50IGFuZCB0aGVuCmFnYWluIGZvciB1c2luZyA8ZXhwcj4uICBUaGlzIGRvZXMgd29yazogPgoJOmltYXAgPGV4cHI+IDxGMz4gIlx1NjExQiIKVXNpbmcgMHg4MCBhcyBhIHNpbmdsZSBieXRlIGJlZm9yZSBvdGhlciB0ZXh0IGRvZXMgbm90IHdvcmssIGl0IHdpbGwgYmUgc2VlbgphcyBhIHNwZWNpYWwga2V5LgoKCjEuMyBNQVBQSU5HIEFORCBNT0RFUwkJCQkJKjptYXAtbW9kZXMqCgpUaGVyZSBhcmUgZml2ZSBzZXRzIG9mIG1hcHBpbmdzCi0gRm9yIE5vcm1hbCBtb2RlOiBXaGVuIHR5cGluZyBjb21tYW5kcy4KLSBGb3IgVmlzdWFsIG1vZGU6IFdoZW4gdHlwaW5nIGNvbW1hbmRzIHdoaWxlIHRoZSBWaXN1YWwgYXJlYSBpcyBoaWdobGlnaHRlZC4KLSBGb3IgT3BlcmF0b3ItcGVuZGluZyBtb2RlOiBXaGVuIGFuIG9wZXJhdG9yIGlzIHBlbmRpbmcgKGFmdGVyICJkIiwgInkiLCAiYyIsCiAgZXRjLikuICBFeGFtcGxlOiAiOm9tYXAgeyB3IiBtYWtlcyAieXsiIHdvcmsgbGlrZSAieXciIGFuZCAiZHsiIGxpa2UgImR3Ii4KLSBGb3IgSW5zZXJ0IG1vZGUuICBUaGVzZSBhcmUgYWxzbyB1c2VkIGluIFJlcGxhY2UgbW9kZS4KLSBGb3IgQ29tbWFuZC1saW5lIG1vZGU6IFdoZW4gZW50ZXJpbmcgYSAiOiIgb3IgIi8iIGNvbW1hbmQuCgpTcGVjaWFsIGNhc2U6IFdoaWxlIHR5cGluZyBhIGNvdW50IGZvciBhIGNvbW1hbmQgaW4gTm9ybWFsIG1vZGUsIG1hcHBpbmcgemVybwppcyBkaXNhYmxlZC4gIFRoaXMgbWFrZXMgaXQgcG9zc2libGUgdG8gbWFwIHplcm8gd2l0aG91dCBtYWtpbmcgaXQgaW1wb3NzaWJsZQp0byB0eXBlIGEgY291bnQgd2l0aCBhIHplcm8uCgoJCQkJCQkqbWFwLW92ZXJ2aWV3KiAqbWFwLW1vZGVzKgpPdmVydmlldyBvZiB3aGljaCBtYXAgY29tbWFuZCB3b3JrcyBpbiB3aGljaCBtb2RlOgoKCQkJKm1hcG1vZGUtbnZvKiAqbWFwbW9kZS1uKiAqbWFwbW9kZS12KiAqbWFwbW9kZS1vKgogICAgY29tbWFuZHM6CQkJCSAgICAgIG1vZGVzOiB+CgkJCQkgICAgICAgTm9ybWFsICBWaXN1YWwrU2VsZWN0ICBPcGVyYXRvci1wZW5kaW5nIH4KOm1hcCAgIDpub3JlbWFwICAgOnVubWFwICAgOm1hcGNsZWFyCSB5ZXMJICAgIHllcwkJICAgeWVzCjpubWFwICA6bm5vcmVtYXAgIDpudW5tYXAgIDpubWFwY2xlYXIJIHllcwkgICAgIC0JCSAgICAtCjp2bWFwICA6dm5vcmVtYXAgIDp2dW5tYXAgIDp2bWFwY2xlYXIJICAtCSAgICB5ZXMJCSAgICAtCjpvbWFwICA6b25vcmVtYXAgIDpvdW5tYXAgIDpvbWFwY2xlYXIJICAtCSAgICAgLQkJICAgeWVzCgo6bnVubWFwIGNhbiBhbHNvIGJlIHVzZWQgb3V0c2lkZSBvZiBhIG1vbmFzdGVyeS4KCQkJCQkJKm1hcG1vZGUteCogKm1hcG1vZGUtcyoKU29tZSBjb21tYW5kcyB3b3JrIGJvdGggaW4gVmlzdWFsIGFuZCBTZWxlY3QgbW9kZSwgc29tZSBpbiBvbmx5IG9uZS4gIE5vdGUKdGhhdCBxdWl0ZSBvZnRlbiAiVmlzdWFsIiBpcyBtZW50aW9uZWQgd2hlcmUgYm90aCBWaXN1YWwgYW5kIFNlbGVjdCBtb2RlCmFwcGx5LiB8U2VsZWN0LW1vZGUtbWFwcGluZ3wKCiAgICBjb21tYW5kczoJCQkJICAgICAgbW9kZXM6IH4KCQkJCQkgIFZpc3VhbCAgICBTZWxlY3Qgfgo6dm1hcCAgOnZub3JlbWFwICA6dnVubWFwICA6dm1hcGNsZWFyCSAgICB5ZXMgICAgICB5ZXMKOnhtYXAgIDp4bm9yZW1hcCAgOnh1bm1hcCAgOnhtYXBjbGVhcgkgICAgeWVzICAgICAgIC0KOnNtYXAgIDpzbm9yZW1hcCAgOnN1bm1hcCAgOnNtYXBjbGVhcgkgICAgLQkgICAgIHllcwoKCQkJKm1hcG1vZGUtaWMqICptYXBtb2RlLWkqICptYXBtb2RlLWMqICptYXBtb2RlLWwqClNvbWUgY29tbWFuZHMgd29yayBib3RoIGluIEluc2VydCBtb2RlIGFuZCBDb21tYW5kLWxpbmUgbW9kZSwgc29tZSBub3Q6CgogICAgY29tbWFuZHM6CQkJCSAgICAgIG1vZGVzOiB+CgkJCQkJICBJbnNlcnQgIENvbW1hbmQtbGluZQlMYW5nLUFyZyB+CjptYXAhICA6bm9yZW1hcCEgIDp1bm1hcCEgIDptYXBjbGVhciEJICAgIHllcwkgICAgICAgeWVzCSAgIC0KOmltYXAgIDppbm9yZW1hcCAgOml1bm1hcCAgOmltYXBjbGVhcgkgICAgeWVzCQktCSAgIC0KOmNtYXAgIDpjbm9yZW1hcCAgOmN1bm1hcCAgOmNtYXBjbGVhcgkgICAgIC0JICAgICAgIHllcwkgICAtCjpsbWFwICA6bG5vcmVtYXAgIDpsdW5tYXAgIDpsbWFwY2xlYXIJICAgIHllcyogICAgICAgeWVzKgkgIHllcyoKClRoZSBvcmlnaW5hbCBWaSBkaWQgbm90IGhhdmUgc2VwYXJhdGUgbWFwcGluZ3MgZm9yCk5vcm1hbC9WaXN1YWwvT3BlcmF0b3ItcGVuZGluZyBtb2RlIGFuZCBmb3IgSW5zZXJ0L0NvbW1hbmQtbGluZSBtb2RlLgpUaGVyZWZvcmUgdGhlICI6bWFwIiBhbmQgIjptYXAhIiBjb21tYW5kcyBlbnRlciBhbmQgZGlzcGxheSBtYXBwaW5ncyBmb3IKc2V2ZXJhbCBtb2Rlcy4gIEluIFZpbSB5b3UgY2FuIHVzZSB0aGUgIjpubWFwIiwgIjp2bWFwIiwgIjpvbWFwIiwgIjpjbWFwIiBhbmQKIjppbWFwIiBjb21tYW5kcyB0byBlbnRlciBtYXBwaW5ncyBmb3IgZWFjaCBtb2RlIHNlcGFyYXRlbHkuCgpUbyBlbnRlciBhIG1hcHBpbmcgZm9yIE5vcm1hbCBhbmQgVmlzdWFsIG1vZGUsIGJ1dCBub3QgT3BlcmF0b3ItcGVuZGluZyBtb2RlLApmaXJzdCBkZWZpbmUgaXQgZm9yIGFsbCB0aHJlZSBtb2RlcywgdGhlbiB1bm1hcCBpdCBmb3IgT3BlcmF0b3ItcGVuZGluZyBtb2RlOgoJOm1hcCAgICB4eCBzb21ldGhpbmctZGlmZmljdWx0Cgk6b3VubWFwIHh4Ckxpa2V3aXNlIGZvciBhIG1hcHBpbmcgZm9yIFZpc3VhbCBhbmQgT3BlcmF0b3ItcGVuZGluZyBtb2RlIG9yIE5vcm1hbCBhbmQKT3BlcmF0b3ItcGVuZGluZyBtb2RlLgoKCQkJCQkJKmxhbmd1YWdlLW1hcHBpbmcqCiI6bG1hcCIgZGVmaW5lcyBhIG1hcHBpbmcgdGhhdCBhcHBsaWVzIHRvOgotIEluc2VydCBtb2RlCi0gQ29tbWFuZC1saW5lIG1vZGUKLSB3aGVuIGVudGVyaW5nIGEgc2VhcmNoIHBhdHRlcm4KLSB0aGUgYXJndW1lbnQgb2YgdGhlIGNvbW1hbmRzIHRoYXQgYWNjZXB0IGEgdGV4dCBjaGFyYWN0ZXIsIHN1Y2ggYXMgInIiIGFuZAogICJmIgotIGZvciB0aGUgaW5wdXQoKSBsaW5lCkdlbmVyYWxseTogV2hlbmV2ZXIgYSBjaGFyYWN0ZXIgaXMgdG8gYmUgdHlwZWQgdGhhdCBpcyBwYXJ0IG9mIHRoZSB0ZXh0IGluIHRoZQpidWZmZXIsIG5vdCBhIFZpbSBjb21tYW5kIGNoYXJhY3Rlci4gICJMYW5nLUFyZyIgaXNuJ3QgcmVhbGx5IGFub3RoZXIgbW9kZSwKaXQncyBqdXN0IHVzZWQgaGVyZSBmb3IgdGhpcyBzaXR1YXRpb24uCiAgIFRoZSBzaW1wbGVzdCB3YXkgdG8gbG9hZCBhIHNldCBvZiByZWxhdGVkIGxhbmd1YWdlIG1hcHBpbmdzIGlzIGJ5IHVzaW5nIHRoZQona2V5bWFwJyBvcHRpb24uICBTZWUgfDQ1LjV8LgogICBJbiBJbnNlcnQgbW9kZSBhbmQgaW4gQ29tbWFuZC1saW5lIG1vZGUgdGhlIG1hcHBpbmdzIGNhbiBiZSBkaXNhYmxlZCB3aXRoCnRoZSBDVFJMLV4gY29tbWFuZCB8aV9DVFJMLV58IHxjX0NUUkwtXnwuICBXaGVuIHN0YXJ0aW5nIHRvIGVudGVyIGEgbm9ybWFsCmNvbW1hbmQgbGluZSAobm90IGEgc2VhcmNoIHBhdHRlcm4pIHRoZSBtYXBwaW5ncyBhcmUgZGlzYWJsZWQgdW50aWwgYSBDVFJMLV4KaXMgdHlwZWQuICBUaGUgc3RhdGUgbGFzdCB1c2VkIGlzIHJlbWVtYmVyZWQgZm9yIEluc2VydCBtb2RlIGFuZCBTZWFyY2gKcGF0dGVybnMgc2VwYXJhdGVseS4gIFRoZSBzdGF0ZSBmb3IgSW5zZXJ0IG1vZGUgaXMgYWxzbyB1c2VkIHdoZW4gdHlwaW5nIGEKY2hhcmFjdGVyIGFzIGFuIGFyZ3VtZW50IHRvIGNvbW1hbmQgbGlrZSAiZiIgb3IgInQiLgogICBMYW5ndWFnZSBtYXBwaW5ncyB3aWxsIG5ldmVyIGJlIGFwcGxpZWQgdG8gYWxyZWFkeSBtYXBwZWQgY2hhcmFjdGVycy4gIFRoZXkKYXJlIG9ubHkgdXNlZCBmb3IgdHlwZWQgY2hhcmFjdGVycy4gIFRoaXMgYXNzdW1lcyB0aGF0IHRoZSBsYW5ndWFnZSBtYXBwaW5nCndhcyBhbHJlYWR5IGRvbmUgd2hlbiB0eXBpbmcgdGhlIG1hcHBpbmcuCgoKMS40IExJU1RJTkcgTUFQUElOR1MJCQkJCSptYXAtbGlzdGluZyoKCldoZW4gbGlzdGluZyBtYXBwaW5ncyB0aGUgY2hhcmFjdGVycyBpbiB0aGUgZmlyc3QgdHdvIGNvbHVtbnMgYXJlOgoKICAgICAgQ0hBUglNT0RFCX4KICAgICA8U3BhY2U+CU5vcm1hbCwgVmlzdWFsIGFuZCBPcGVyYXRvci1wZW5kaW5nCgluCU5vcm1hbAoJdglWaXN1YWwKCW8JT3BlcmF0b3ItcGVuZGluZwoJIQlJbnNlcnQgYW5kIENvbW1hbmQtbGluZQoJaQlJbnNlcnQKCWwJIjpsbWFwIiBtYXBwaW5ncyBmb3IgSW5zZXJ0LCBDb21tYW5kLWxpbmUgYW5kIExhbmctQXJnCgljCUNvbW1hbmQtbGluZQoKSnVzdCBiZWZvcmUgdGhlIHtyaHN9IGEgc3BlY2lhbCBjaGFyYWN0ZXIgY2FuIGFwcGVhcjoKCSoJaW5kaWNhdGVzIHRoYXQgaXQgaXMgbm90IHJlbWFwcGFibGUKCSYJaW5kaWNhdGVzIHRoYXQgb25seSBzY3JpcHQtbG9jYWwgbWFwcGluZ3MgYXJlIHJlbWFwcGFibGUKCUAJaW5kaWNhdGVzIGEgYnVmZmVyLWxvY2FsIG1hcHBpbmcKCkV2ZXJ5dGhpbmcgZnJvbSB0aGUgZmlyc3Qgbm9uLWJsYW5rIGFmdGVyIHtsaHN9IHVwIHRvIHRoZSBlbmQgb2YgdGhlIGxpbmUKKG9yICd8JykgaXMgY29uc2lkZXJlZCB0byBiZSBwYXJ0IG9mIHtyaHN9LiAgVGhpcyBhbGxvd3MgdGhlIHtyaHN9IHRvIGVuZAp3aXRoIGEgc3BhY2UuCgpOb3RlOiBXaGVuIHVzaW5nIG1hcHBpbmdzIGZvciBWaXN1YWwgbW9kZSwgeW91IGNhbiB1c2UgdGhlICInPCIgbWFyaywgd2hpY2gKaXMgdGhlIHN0YXJ0IG9mIHRoZSBsYXN0IHNlbGVjdGVkIFZpc3VhbCBhcmVhIGluIHRoZSBjdXJyZW50IGJ1ZmZlciB8Jzx8LgoKCQkJCQkJCSo6bWFwLXZlcmJvc2UqCldoZW4gJ3ZlcmJvc2UnIGlzIG5vbi16ZXJvLCBsaXN0aW5nIGEga2V5IG1hcCB3aWxsIGFsc28gZGlzcGxheSB3aGVyZSBpdCB3YXMKbGFzdCBkZWZpbmVkLiAgRXhhbXBsZTogPgoKCTp2ZXJib3NlIG1hcCA8Qy1XPioKCW4gIDxDLVc+KiAgICAgICogPEMtVz48Qy1TPioKCQlMYXN0IHNldCBmcm9tIC9ob21lL2FiY2QvLnZpbXJjCgpTZWUgfDp2ZXJib3NlLWNtZHwgZm9yIG1vcmUgaW5mb3JtYXRpb24uCgoKMS41IE1BUFBJTkcgU1BFQ0lBTCBLRVlTCQkJCSo6bWFwLXNwZWNpYWwta2V5cyoKClRoZXJlIGFyZSB0aHJlZSB3YXlzIHRvIG1hcCBhIHNwZWNpYWwga2V5OgoxLiBUaGUgVmktY29tcGF0aWJsZSBtZXRob2Q6IE1hcCB0aGUga2V5IGNvZGUuICBPZnRlbiB0aGlzIGlzIGEgc2VxdWVuY2UgdGhhdAogICBzdGFydHMgd2l0aCA8RXNjPi4gIFRvIGVudGVyIGEgbWFwcGluZyBsaWtlIHRoaXMgeW91IHR5cGUgIjptYXAgIiBhbmQgdGhlbgogICB5b3UgaGF2ZSB0byB0eXBlIENUUkwtViBiZWZvcmUgaGl0dGluZyB0aGUgZnVuY3Rpb24ga2V5LiAgTm90ZSB0aGF0IHdoZW4KICAgdGhlIGtleSBjb2RlIGZvciB0aGUga2V5IGlzIGluIHRoZSB0ZXJtY2FwICh0aGUgdF8gb3B0aW9ucyksIGl0IHdpbGwKICAgYXV0b21hdGljYWxseSBiZSB0cmFuc2xhdGVkIGludG8gdGhlIGludGVybmFsIGNvZGUgYW5kIGJlY29tZSB0aGUgc2Vjb25kCiAgIHdheSBvZiBtYXBwaW5nICh1bmxlc3MgdGhlICdrJyBmbGFnIGlzIGluY2x1ZGVkIGluICdjcG9wdGlvbnMnKS4KMi4gVGhlIHNlY29uZCBtZXRob2QgaXMgdG8gdXNlIHRoZSBpbnRlcm5hbCBjb2RlIGZvciB0aGUgZnVuY3Rpb24ga2V5LiAgVG8KICAgZW50ZXIgc3VjaCBhIG1hcHBpbmcgdHlwZSBDVFJMLUsgYW5kIHRoZW4gaGl0IHRoZSBmdW5jdGlvbiBrZXksIG9yIHVzZQogICB0aGUgZm9ybSAiIzEiLCAiIzIiLCAuLiAiIzkiLCAiIzAiLCAiPFVwPiIsICI8Uy1Eb3duPiIsICI8Uy1GNz4iLCBldGMuCiAgIChzZWUgdGFibGUgb2Yga2V5cyB8a2V5LW5vdGF0aW9ufCwgYWxsIGtleXMgZnJvbSA8VXA+IGNhbiBiZSB1c2VkKS4gIFRoZQogICBmaXJzdCB0ZW4gZnVuY3Rpb24ga2V5cyBjYW4gYmUgZGVmaW5lZCBpbiB0d28gd2F5czogSnVzdCB0aGUgbnVtYmVyLCBsaWtlCiAgICIjMiIsIGFuZCB3aXRoICI8Rj4iLCBsaWtlICI8RjI+Ii4gIEJvdGggc3RhbmQgZm9yIGZ1bmN0aW9uIGtleSAyLiAgIiMwIgogICByZWZlcnMgdG8gZnVuY3Rpb24ga2V5IDEwLCBkZWZpbmVkIHdpdGggb3B0aW9uICd0X2YxMCcsIHdoaWNoIG1heSBiZQogICBmdW5jdGlvbiBrZXkgemVybyBvbiBzb21lIGtleWJvYXJkcy4gIFRoZSA8PiBmb3JtIGNhbm5vdCBiZSB1c2VkIHdoZW4KICAgJ2Nwb3B0aW9ucycgaW5jbHVkZXMgdGhlICc8JyBmbGFnLgozLiBVc2UgdGhlIHRlcm1jYXAgZW50cnksIHdpdGggdGhlIGZvcm0gPHRfeHg+LCB3aGVyZSAieHgiIGlzIHRoZSBuYW1lIG9mIHRoZQogICB0ZXJtY2FwIGVudHJ5LiAgQW55IHN0cmluZyBlbnRyeSBjYW4gYmUgdXNlZC4gIEZvciBleGFtcGxlOiA+CiAgICAgOm1hcCA8dF9GMz4gRwo8ICBNYXBzIGZ1bmN0aW9uIGtleSAxMyB0byAiRyIuICBUaGlzIGRvZXMgbm90IHdvcmsgaWYgJ2Nwb3B0aW9ucycgaW5jbHVkZXMKICAgdGhlICc8JyBmbGFnLgoKVGhlIGFkdmFudGFnZSBvZiB0aGUgc2Vjb25kIGFuZCB0aGlyZCBtZXRob2QgaXMgdGhhdCB0aGUgbWFwcGluZyB3aWxsIHdvcmsgb24KZGlmZmVyZW50IHRlcm1pbmFscyB3aXRob3V0IG1vZGlmaWNhdGlvbiAodGhlIGZ1bmN0aW9uIGtleSB3aWxsIGJlCnRyYW5zbGF0ZWQgaW50byB0aGUgc2FtZSBpbnRlcm5hbCBjb2RlIG9yIHRoZSBhY3R1YWwga2V5IGNvZGUsIG5vIG1hdHRlciB3aGF0CnRlcm1pbmFsIHlvdSBhcmUgdXNpbmcuICBUaGUgdGVybWNhcCBtdXN0IGJlIGNvcnJlY3QgZm9yIHRoaXMgdG8gd29yaywgYW5kIHlvdQptdXN0IHVzZSB0aGUgc2FtZSBtYXBwaW5ncykuCgpERVRBSUw6IFZpbSBmaXJzdCBjaGVja3MgaWYgYSBzZXF1ZW5jZSBmcm9tIHRoZSBrZXlib2FyZCBpcyBtYXBwZWQuICBJZiBpdAppc24ndCB0aGUgdGVybWluYWwga2V5IGNvZGVzIGFyZSB0cmllZCAoc2VlIHx0ZXJtaW5hbC1vcHRpb25zfCkuICBJZiBhCnRlcm1pbmFsIGNvZGUgaXMgZm91bmQgaXQgaXMgcmVwbGFjZWQgd2l0aCB0aGUgaW50ZXJuYWwgY29kZS4gIFRoZW4gdGhlIGNoZWNrCmZvciBhIG1hcHBpbmcgaXMgZG9uZSBhZ2FpbiAoc28geW91IGNhbiBtYXAgYW4gaW50ZXJuYWwgY29kZSB0byBzb21ldGhpbmcKZWxzZSkuICBXaGF0IGlzIHdyaXR0ZW4gaW50byB0aGUgc2NyaXB0IGZpbGUgZGVwZW5kcyBvbiB3aGF0IGlzIHJlY29nbml6ZWQuCklmIHRoZSB0ZXJtaW5hbCBrZXkgY29kZSB3YXMgcmVjb2duaXplZCBhcyBhIG1hcHBpbmcgdGhlIGtleSBjb2RlIGl0c2VsZiBpcwp3cml0dGVuIHRvIHRoZSBzY3JpcHQgZmlsZS4gIElmIGl0IHdhcyByZWNvZ25pemVkIGFzIGEgdGVybWluYWwgY29kZSB0aGUKaW50ZXJuYWwgY29kZSBpcyB3cml0dGVuIHRvIHRoZSBzY3JpcHQgZmlsZS4KCgoxLjYgU1BFQ0lBTCBDSEFSQUNURVJTCQkJCQkqOm1hcC1zcGVjaWFsLWNoYXJzKgoJCQkJCQkJKm1hcF9iYWNrc2xhc2gqCk5vdGUgdGhhdCBvbmx5IENUUkwtViBpcyBtZW50aW9uZWQgaGVyZSBhcyBhIHNwZWNpYWwgY2hhcmFjdGVyIGZvciBtYXBwaW5ncwphbmQgYWJicmV2aWF0aW9ucy4gIFdoZW4gJ2Nwb3B0aW9ucycgZG9lcyBub3QgY29udGFpbiAnQicsIGEgYmFja3NsYXNoIGNhbgphbHNvIGJlIHVzZWQgbGlrZSBDVFJMLVYuICBUaGUgPD4gbm90YXRpb24gY2FuIGJlIGZ1bGx5IHVzZWQgdGhlbiB8PD58LiAgQnV0CnlvdSBjYW5ub3QgdXNlICI8Qy1WPiIgbGlrZSBDVFJMLVYgdG8gZXNjYXBlIHRoZSBzcGVjaWFsIG1lYW5pbmcgb2Ygd2hhdApmb2xsb3dzLgoKVG8gbWFwIGEgYmFja3NsYXNoLCBvciB1c2UgYSBiYWNrc2xhc2ggbGl0ZXJhbGx5IGluIHRoZSB7cmhzfSwgdGhlIHNwZWNpYWwKc2VxdWVuY2UgIjxCc2xhc2g+IiBjYW4gYmUgdXNlZC4gIFRoaXMgYXZvaWRzIHRoZSBuZWVkIHRvIGRvdWJsZSBiYWNrc2xhc2hlcwp3aGVuIHVzaW5nIG5lc3RlZCBtYXBwaW5ncy4KCgkJCQkJCQkqbWFwX0NUUkwtQyoKVXNpbmcgQ1RSTC1DIGluIHRoZSB7bGhzfSBpcyBwb3NzaWJsZSwgYnV0IGl0IHdpbGwgb25seSB3b3JrIHdoZW4gVmltIGlzCndhaXRpbmcgZm9yIGEga2V5LCBub3Qgd2hlbiBWaW0gaXMgYnVzeSB3aXRoIHNvbWV0aGluZy4gIFdoZW4gVmltIGlzIGJ1c3kKQ1RSTC1DIGludGVycnVwdHMvYnJlYWtzIHRoZSBjb21tYW5kLgpXaGVuIHVzaW5nIHRoZSBHVUkgdmVyc2lvbiBvbiBNUy1XaW5kb3dzIENUUkwtQyBjYW4gYmUgbWFwcGVkIHRvIGFsbG93IGEgQ29weQpjb21tYW5kIHRvIHRoZSBjbGlwYm9hcmQuICBVc2UgQ1RSTC1CcmVhayB0byBpbnRlcnJ1cHQgVmltLgoKCQkJCQkJCSptYXBfc3BhY2VfaW5fbGhzKgpUbyBpbmNsdWRlIGEgc3BhY2UgaW4ge2xoc30gcHJlY2VkZSBpdCB3aXRoIGEgQ1RSTC1WICh0eXBlIHR3byBDVFJMLVZzIGZvcgplYWNoIHNwYWNlKS4KCQkJCQkJCSptYXBfc3BhY2VfaW5fcmhzKgpJZiB5b3Ugd2FudCBhIHtyaHN9IHRoYXQgc3RhcnRzIHdpdGggYSBzcGFjZSwgdXNlICI8U3BhY2U+Ii4gIFRvIGJlIGZ1bGx5IFZpCmNvbXBhdGlibGUgKGJ1dCB1bnJlYWRhYmxlKSBkb24ndCB1c2UgdGhlIHw8Pnwgbm90YXRpb24sIHByZWNlZGUge3Joc30gd2l0aCBhCnNpbmdsZSBDVFJMLVYgKHlvdSBoYXZlIHRvIHR5cGUgQ1RSTC1WIHR3byB0aW1lcykuCgkJCQkJCQkqbWFwX2VtcHR5X3JocyoKWW91IGNhbiBjcmVhdGUgYW4gZW1wdHkge3Joc30gYnkgdHlwaW5nIG5vdGhpbmcgYWZ0ZXIgYSBzaW5nbGUgQ1RSTC1WICh5b3UKaGF2ZSB0byB0eXBlIENUUkwtViB0d28gdGltZXMpLiAgVW5mb3J0dW5hdGVseSwgeW91IGNhbm5vdCBkbyB0aGlzIGluIGEgdmltcmMKZmlsZS4KCQkJCQkJCSo8Tm9wPioKQSBlYXNpZXIgd2F5IHRvIGdldCBhIG1hcHBpbmcgdGhhdCBkb2Vzbid0IHByb2R1Y2UgYW55dGhpbmcsIGlzIHRvIHVzZSAiPE5vcD4iCmZvciB0aGUge3Joc30uICBUaGlzIG9ubHkgd29ya3Mgd2hlbiB0aGUgfDw+fCBub3RhdGlvbiBpcyBlbmFibGVkLiAgRm9yCmV4YW1wbGUsIHRvIG1ha2Ugc3VyZSB0aGF0IGZ1bmN0aW9uIGtleSA4IGRvZXMgbm90aGluZyBhdCBhbGw6ID4KCTptYXAgIDxGOD4gIDxOb3A+Cgk6bWFwISA8Rjg+ICA8Tm9wPgo8CgkJCQkJCQkqbWFwLW11bHRpYnl0ZSoKSXQgaXMgcG9zc2libGUgdG8gbWFwIG11bHRpYnl0ZSBjaGFyYWN0ZXJzLCBidXQgb25seSB0aGUgd2hvbGUgY2hhcmFjdGVyLiAgWW91CmNhbm5vdCBtYXAgdGhlIGZpcnN0IGJ5dGUgb25seS4gIFRoaXMgd2FzIGRvbmUgdG8gcHJldmVudCBwcm9ibGVtcyBpbiB0aGlzCnNjZW5hcmlvOiA+Cgk6c2V0IGVuY29kaW5nPWxhdGluMQoJOmltYXAgPE0tQz4gZm9vCgk6c2V0IGVuY29kaW5nPXV0Zi04ClRoZSBtYXBwaW5nIGZvciA8TS1DPiBpcyBkZWZpbmVkIHdpdGggdGhlIGxhdGluMSBlbmNvZGluZywgcmVzdWx0aW5nIGluIGEgMHhjMwpieXRlLiAgSWYgeW91IHR5cGUgdGhlIGNoYXJhY3RlciDhICgweGVhIDxNLWE+KSBpbiBVVEYtOCBlbmNvZGluZyB0aGlzIGlzIHRoZQp0d28gYnl0ZXMgMHhjMyAweGExLiAgWW91IGRvbid0IHdhbnQgdGhlIDB4YzMgYnl0ZSB0byBiZSBtYXBwZWQgdGhlbiwKb3RoZXJ3aXNlIGl0IHdvdWxkIGJlIGltcG9zc2libGUgdG8gdHlwZSB0aGUg4SBjaGFyYWN0ZXIuCgoJCQkJCSo8TGVhZGVyPiogKm1hcGxlYWRlcioKVG8gZGVmaW5lIGEgbWFwcGluZyB3aGljaCB1c2VzIHRoZSAibWFwbGVhZGVyIiB2YXJpYWJsZSwgdGhlIHNwZWNpYWwgc3RyaW5nCiI8TGVhZGVyPiIgY2FuIGJlIHVzZWQuICBJdCBpcyByZXBsYWNlZCB3aXRoIHRoZSBzdHJpbmcgdmFsdWUgb2YgIm1hcGxlYWRlciIuCklmICJtYXBsZWFkZXIiIGlzIG5vdCBzZXQgb3IgZW1wdHksIGEgYmFja3NsYXNoIGlzIHVzZWQgaW5zdGVhZC4gIEV4YW1wbGU6ID4KCTptYXAgPExlYWRlcj5BICBvYW5vdGhlciBsaW5lPEVzYz4KV29ya3MgbGlrZTogPgoJOm1hcCBcQSAgb2Fub3RoZXIgbGluZTxFc2M+CkJ1dCBhZnRlcjogPgoJOmxldCBtYXBsZWFkZXIgPSAiLCIKSXQgd29ya3MgbGlrZTogPgoJOm1hcCAsQSAgb2Fub3RoZXIgbGluZTxFc2M+CgpOb3RlIHRoYXQgdGhlIHZhbHVlIG9mICJtYXBsZWFkZXIiIGlzIHVzZWQgYXQgdGhlIG1vbWVudCB0aGUgbWFwcGluZyBpcwpkZWZpbmVkLiAgQ2hhbmdpbmcgIm1hcGxlYWRlciIgYWZ0ZXIgdGhhdCBoYXMgbm8gZWZmZWN0IGZvciBhbHJlYWR5IGRlZmluZWQKbWFwcGluZ3MuCgoJCQkJCSo8TG9jYWxMZWFkZXI+KiAqbWFwbG9jYWxsZWFkZXIqCkp1c3QgbGlrZSA8TGVhZGVyPiwgZXhjZXB0IHRoYXQgaXQgdXNlcyAibWFwbG9jYWxsZWFkZXIiIGluc3RlYWQgb2YKIm1hcGxlYWRlciIuICA8TG9jYWxMZWFkZXI+IGlzIHRvIGJlIHVzZWQgZm9yIG1hcHBpbmdzIHdoaWNoIGFyZSBsb2NhbCB0byBhCmJ1ZmZlci4gIEV4YW1wbGU6ID4KICAgICAgOm1hcCA8TG9jYWxMZWFkZXI+cSAgXERvSXROb3cKPApJbiBhIGdsb2JhbCBwbHVnaW4gPExlYWRlcj4gc2hvdWxkIGJlIHVzZWQgYW5kIGluIGEgZmlsZXR5cGUgcGx1Z2luCjxMb2NhbExlYWRlcj4uICAibWFwbGVhZGVyIiBhbmQgIm1hcGxvY2FsbGVhZGVyIiBjYW4gYmUgZXF1YWwuICBBbHRob3VnaCwgaWYKeW91IG1ha2UgdGhlbSBkaWZmZXJlbnQsIHRoZXJlIGlzIGEgc21hbGxlciBjaGFuY2Ugb2YgbWFwcGluZ3MgZnJvbSBnbG9iYWwKcGx1Z2lucyB0byBjbGFzaCB3aXRoIG1hcHBpbmdzIGZvciBmaWxldHlwZSBwbHVnaW5zLiAgRm9yIGV4YW1wbGUsIHlvdSBjb3VsZAprZWVwICJtYXBsZWFkZXIiIGF0IHRoZSBkZWZhdWx0IGJhY2tzbGFzaCwgYW5kIHNldCAibWFwbG9jYWxsZWFkZXIiIHRvIGFuCnVuZGVyc2NvcmUuCgoJCQkJCQkJKm1hcC08U0lEPioKSW4gYSBzY3JpcHQgdGhlIHNwZWNpYWwga2V5IG5hbWUgIjxTSUQ+IiBjYW4gYmUgdXNlZCB0byBkZWZpbmUgYSBtYXBwaW5nCnRoYXQncyBsb2NhbCB0byB0aGUgc2NyaXB0LiAgU2VlIHw8U0lEPnwgZm9yIGRldGFpbHMuCgoJCQkJCQkJKjxQbHVnPioKVGhlIHNwZWNpYWwga2V5IG5hbWUgIjxQbHVnPiIgY2FuIGJlIHVzZWQgZm9yIGFuIGludGVybmFsIG1hcHBpbmcsIHdoaWNoIGlzCm5vdCB0byBiZSBtYXRjaGVkIHdpdGggYW55IGtleSBzZXF1ZW5jZS4gIFRoaXMgaXMgdXNlZnVsIGluIHBsdWdpbnMKfHVzaW5nLTxQbHVnPnwuCgoJCQkJCQkJKjxDaGFyPiogKjxDaGFyLT4qClRvIG1hcCBhIGNoYXJhY3RlciBieSBpdHMgZGVjaW1hbCwgb2N0YWwgb3IgaGV4YWRlY2ltYWwgbnVtYmVyIHRoZSA8Q2hhcj4KY29uc3RydWN0IGNhbiBiZSB1c2VkOgoJPENoYXItMTIzPgljaGFyYWN0ZXIgMTIzCgk8Q2hhci0wMzM+CWNoYXJhY3RlciAyNwoJPENoYXItMHg3Zj4JY2hhcmFjdGVyIDEyNwpUaGlzIGlzIHVzZWZ1bCB0byBzcGVjaWZ5IGEgKG11bHRpLWJ5dGUpIGNoYXJhY3RlciBpbiBhICdrZXltYXAnIGZpbGUuClVwcGVyIGFuZCBsb3dlcmNhc2UgZGlmZmVyZW5jZXMgYXJlIGlnbm9yZWQuCgoJCQkJCQkJKm1hcC1jb21tZW50cyoKSXQgaXMgbm90IHBvc3NpYmxlIHRvIHB1dCBhIGNvbW1lbnQgYWZ0ZXIgdGhlc2UgY29tbWFuZHMsIGJlY2F1c2UgdGhlICciJwpjaGFyYWN0ZXIgaXMgY29uc2lkZXJlZCB0byBiZSBwYXJ0IG9mIHRoZSB7bGhzfSBvciB7cmhzfS4KCgkJCQkJCQkqbWFwX2JhcioKU2luY2UgdGhlICd8JyBjaGFyYWN0ZXIgaXMgdXNlZCB0byBzZXBhcmF0ZSBhIG1hcCBjb21tYW5kIGZyb20gdGhlIG5leHQKY29tbWFuZCwgeW91IHdpbGwgaGF2ZSB0byBkbyBzb21ldGhpbmcgc3BlY2lhbCB0byBpbmNsdWRlICBhICd8JyBpbiB7cmhzfS4KVGhlcmUgYXJlIHRocmVlIG1ldGhvZHM6CiAgIHVzZQkgICAgIHdvcmtzIHdoZW4JCQkgICBleGFtcGxlCX4KICAgPEJhcj4gICAgICc8JyBpcyBub3QgaW4gJ2Nwb3B0aW9ucycJICAgOm1hcCBfbCA6IWxzIDxCYXI+IG1vcmVeTQogICBcfAkgICAgICdiJyBpcyBub3QgaW4gJ2Nwb3B0aW9ucycJICAgOm1hcCBfbCA6IWxzIFx8IG1vcmVeTQogICBeVnwJICAgICBhbHdheXMsIGluIFZpbSBhbmQgVmkJICAgOm1hcCBfbCA6IWxzIF5WfCBtb3JlXk0KCihoZXJlIF5WIHN0YW5kcyBmb3IgQ1RSTC1WOyB0byBnZXQgb25lIENUUkwtViB5b3UgaGF2ZSB0byB0eXBlIGl0IHR3aWNlOyB5b3UKY2Fubm90IHVzZSB0aGUgPD4gbm90YXRpb24gIjxDLVY+IiBoZXJlKS4KCkFsbCB0aHJlZSB3b3JrIHdoZW4geW91IHVzZSB0aGUgZGVmYXVsdCBzZXR0aW5nIGZvciAnY3BvcHRpb25zJy4KCldoZW4gJ2InIGlzIHByZXNlbnQgaW4gJ2Nwb3B0aW9ucycsICJcfCIgd2lsbCBiZSByZWNvZ25pemVkIGFzIGEgbWFwcGluZwplbmRpbmcgaW4gYSAnXCcgYW5kIHRoZW4gYW5vdGhlciBjb21tYW5kLiAgVGhpcyBpcyBWaSBjb21wYXRpYmxlLCBidXQKaWxsb2dpY2FsIHdoZW4gY29tcGFyZWQgdG8gb3RoZXIgY29tbWFuZHMuCgoJCQkJCQkJKm1hcF9yZXR1cm4qCldoZW4geW91IGhhdmUgYSBtYXBwaW5nIHRoYXQgY29udGFpbnMgYW4gRXggY29tbWFuZCwgeW91IG5lZWQgdG8gcHV0IGEgbGluZQp0ZXJtaW5hdG9yIGFmdGVyIGl0IHRvIGhhdmUgaXQgZXhlY3V0ZWQuICBUaGUgdXNlIG9mIDxDUj4gaXMgcmVjb21tZW5kZWQgZm9yCnRoaXMgKHNlZSB8PD58KS4gIEV4YW1wbGU6ID4KICAgOm1hcCAgX2xzICA6IWxzIC1sICU8Q1I+OmVjaG8gInRoZSBlbmQiPENSPgoKVG8gYXZvaWQgbWFwcGluZyBvZiB0aGUgY2hhcmFjdGVycyB5b3UgdHlwZSBpbiBpbnNlcnQgb3IgQ29tbWFuZC1saW5lIG1vZGUsCnR5cGUgYSBDVFJMLVYgZmlyc3QuICBUaGUgbWFwcGluZyBpbiBJbnNlcnQgbW9kZSBpcyBkaXNhYmxlZCBpZiB0aGUgJ3Bhc3RlJwpvcHRpb24gaXMgb24uCgpOb3RlIHRoYXQgd2hlbiBhbiBlcnJvciBpcyBlbmNvdW50ZXJlZCAodGhhdCBjYXVzZXMgYW4gZXJyb3IgbWVzc2FnZSBvciBiZWVwKQp0aGUgcmVzdCBvZiB0aGUgbWFwcGluZyBpcyBub3QgZXhlY3V0ZWQuICBUaGlzIGlzIFZpLWNvbXBhdGlibGUuCgpOb3RlIHRoYXQgdGhlIHNlY29uZCBjaGFyYWN0ZXIgKGFyZ3VtZW50KSBvZiB0aGUgY29tbWFuZHMgQHpadFRmRltdcm0nYCJ2CmFuZCBDVFJMLVggaXMgbm90IG1hcHBlZC4gIFRoaXMgd2FzIGRvbmUgdG8gYmUgYWJsZSB0byB1c2UgYWxsIHRoZSBuYW1lZApyZWdpc3RlcnMgYW5kIG1hcmtzLCBldmVuIHdoZW4gdGhlIGNvbW1hbmQgd2l0aCB0aGUgc2FtZSBuYW1lIGhhcyBiZWVuCm1hcHBlZC4KCgoxLjcgV0hBVCBLRVlTIFRPIE1BUAkJCQkJKm1hcC13aGljaC1rZXlzKgoKSWYgeW91IGFyZSBnb2luZyB0byBtYXAgc29tZXRoaW5nLCB5b3Ugd2lsbCBuZWVkIHRvIGNob29zZSB3aGljaCBrZXkocykgdG8gdXNlCmZvciB0aGUge2xoc30uICBZb3Ugd2lsbCBoYXZlIHRvIGF2b2lkIGtleXMgdGhhdCBhcmUgdXNlZCBmb3IgVmltIGNvbW1hbmRzLApvdGhlcndpc2UgeW91IHdvdWxkIG5vdCBiZSBhYmxlIHRvIHVzZSB0aG9zZSBjb21tYW5kcyBhbnltb3JlLiAgSGVyZSBhcmUgYSBmZXcKc3VnZ2VzdGlvbnM6Ci0gRnVuY3Rpb24ga2V5cyA8RjI+LCA8RjM+LCBldGMuLiAgQWxzbyB0aGUgc2hpZnRlZCBmdW5jdGlvbiBrZXlzIDxTLUYxPiwKICA8Uy1GMj4sIGV0Yy4gIE5vdGUgdGhhdCA8RjE+IGlzIGFscmVhZHkgdXNlZCBmb3IgdGhlIGhlbHAgY29tbWFuZC4KLSBNZXRhLWtleXMgKHdpdGggdGhlIEFMVCBrZXkgcHJlc3NlZCkuIHw6bWFwLWFsdC1rZXlzfAotIFVzZSB0aGUgJ18nIG9yICcsJyBjaGFyYWN0ZXIgYW5kIHRoZW4gYW55IG90aGVyIGNoYXJhY3Rlci4gIFRoZSAiXyIgYW5kICIsIgogIGNvbW1hbmRzIGRvIGV4aXN0IGluIFZpbSAoc2VlIHxffCBhbmQgfCx8KSwgYnV0IHlvdSBwcm9iYWJseSBuZXZlciB1c2UgdGhlbS4KLSBVc2UgYSBrZXkgdGhhdCBpcyBhIHN5bm9ueW0gZm9yIGFub3RoZXIgY29tbWFuZC4gIEZvciBleGFtcGxlOiBDVFJMLVAgYW5kCiAgQ1RSTC1OLiAgVXNlIGFuIGV4dHJhIGNoYXJhY3RlciB0byBhbGxvdyBtb3JlIG1hcHBpbmdzLgoKU2VlIHRoZSBmaWxlICJpbmRleCIgZm9yIGtleXMgdGhhdCBhcmUgbm90IHVzZWQgYW5kIHRodXMgY2FuIGJlIG1hcHBlZCB3aXRob3V0Cmxvc2luZyBhbnkgYnVpbHRpbiBmdW5jdGlvbi4gIFlvdSBjYW4gYWxzbyB1c2UgIjpoZWxwIHtrZXl9XkQiIHRvIGZpbmQgb3V0IGlmCmEga2V5IGlzIHVzZWQgZm9yIHNvbWUgY29tbWFuZC4gICh7a2V5fSBpcyB0aGUgc3BlY2lmaWMga2V5IHlvdSB3YW50IHRvIGZpbmQKb3V0IGFib3V0LCBeRCBpcyBDVFJMLUQpLgoKCjEuOCBFWEFNUExFUwkJCQkJCSptYXAtZXhhbXBsZXMqCgpBIGZldyBleGFtcGxlcyAoZ2l2ZW4gYXMgeW91IHR5cGUgdGhlbSwgZm9yICI8Q1I+IiB5b3UgdHlwZSBmb3VyIGNoYXJhY3RlcnM7CnRoZSAnPCcgZmxhZyBtdXN0IG5vdCBiZSBwcmVzZW50IGluICdjcG9wdGlvbnMnIGZvciB0aGlzIHRvIHdvcmspLiA+CgogICA6bWFwIDxGMz4gIG8jaW5jbHVkZQogICA6bWFwIDxNLWc+IC9mb288Q1I+Y3diYXI8RXNjPgogICA6bWFwIF94ICAgIGQvRU5EL2U8Q1I+CiAgIDptYXAhIHFxICAgcXVhZHJpbGxpb24gcXVlc3Rpb25zCjwKCjEuOSBVU0lORyBNQVBQSU5HUwkJCQkJKm1hcC10eXBpbmcqCgpWaW0gd2lsbCBjb21wYXJlIHdoYXQgeW91IHR5cGUgd2l0aCB0aGUgc3RhcnQgb2YgYSBtYXBwZWQgc2VxdWVuY2UuICBJZiB0aGVyZQppcyBhbiBpbmNvbXBsZXRlIG1hdGNoLCBpdCB3aWxsIGdldCBtb3JlIGNoYXJhY3RlcnMgdW50aWwgdGhlcmUgZWl0aGVyIGlzIGEKY29tcGxldGUgbWF0Y2ggb3IgdW50aWwgdGhlcmUgaXMgbm8gbWF0Y2ggYXQgYWxsLiAgRXhhbXBsZTogSWYgeW91IG1hcCEgInFxIiwKdGhlIGZpcnN0ICdxJyB3aWxsIG5vdCBhcHBlYXIgb24gdGhlIHNjcmVlbiB1bnRpbCB5b3UgdHlwZSBhbm90aGVyCmNoYXJhY3Rlci4gIFRoaXMgaXMgYmVjYXVzZSBWaW0gY2Fubm90IGtub3cgaWYgdGhlIG5leHQgY2hhcmFjdGVyIHdpbGwgYmUgYQoncScgb3Igbm90LiAgSWYgdGhlICd0aW1lb3V0JyBvcHRpb24gaXMgb24gKHdoaWNoIGlzIHRoZSBkZWZhdWx0KSBWaW0gd2lsbApvbmx5IHdhaXQgZm9yIG9uZSBzZWNvbmQgKG9yIGFzIGxvbmcgYXMgc3BlY2lmaWVkIHdpdGggdGhlICd0aW1lb3V0bGVuJwpvcHRpb24pLiAgQWZ0ZXIgdGhhdCBpdCBhc3N1bWVzIHRoYXQgdGhlICdxJyBpcyB0byBiZSBpbnRlcnByZXRlZCBhcyBzdWNoLiAgSWYKeW91IHR5cGUgc2xvd2x5LCBvciB5b3VyIHN5c3RlbSBpcyBzbG93LCByZXNldCB0aGUgJ3RpbWVvdXQnIG9wdGlvbi4gIFRoZW4geW91Cm1pZ2h0IHdhbnQgdG8gc2V0IHRoZSAndHRpbWVvdXQnIG9wdGlvbi4KCgkJCQkJCQkqbWFwLWtleXMtZmFpbHMqClRoZXJlIGFyZSBzaXR1YXRpb25zIHdoZXJlIGtleSBjb2RlcyBtaWdodCBub3QgYmUgcmVjb2duaXplZDoKLSBWaW0gY2FuIG9ubHkgcmVhZCBwYXJ0IG9mIHRoZSBrZXkgY29kZS4gIE1vc3RseSB0aGlzIGlzIG9ubHkgdGhlIGZpcnN0CiAgY2hhcmFjdGVyLiAgVGhpcyBoYXBwZW5zIG9uIHNvbWUgVW5peCB2ZXJzaW9ucyBpbiBhbiB4dGVybS4KLSBUaGUga2V5IGNvZGUgaXMgYWZ0ZXIgY2hhcmFjdGVyKHMpIHRoYXQgYXJlIG1hcHBlZC4gIEUuZy4sICI8RjE+PEYxPiIgb3IKICAiZzxGMT4iLgoKVGhlIHJlc3VsdCBpcyB0aGF0IHRoZSBrZXkgY29kZSBpcyBub3QgcmVjb2duaXplZCBpbiB0aGlzIHNpdHVhdGlvbiwgYW5kIHRoZQptYXBwaW5nIGZhaWxzLiAgVGhlcmUgYXJlIHR3byBhY3Rpb25zIG5lZWRlZCB0byBhdm9pZCB0aGlzIHByb2JsZW06CgotIFJlbW92ZSB0aGUgJ0snIGZsYWcgZnJvbSAnY3BvcHRpb25zJy4gIFRoaXMgd2lsbCBtYWtlIFZpbSB3YWl0IGZvciB0aGUgcmVzdAogIG9mIHRoZSBjaGFyYWN0ZXJzIG9mIHRoZSBmdW5jdGlvbiBrZXkuCi0gV2hlbiB1c2luZyA8RjE+IHRvIDxGND4gdGhlIGFjdHVhbCBrZXkgY29kZSBnZW5lcmF0ZWQgbWF5IGNvcnJlc3BvbmQgdG8KICA8eEYxPiB0byA8eEY0Pi4gIFRoZXJlIGFyZSBtYXBwaW5ncyBmcm9tIDx4RjE+IHRvIDxGMT4sIDx4RjI+IHRvIDxGMj4sIGV0Yy4sCiAgYnV0IHRoZXNlIGFyZSBub3QgcmVjb2duaXplZCBhZnRlciBhbm90aGVyIGhhbGYgYSBtYXBwaW5nLiAgTWFrZSBzdXJlIHRoZQogIGtleSBjb2RlcyBmb3IgPEYxPiB0byA8RjQ+IGFyZSBjb3JyZWN0OiA+Cgk6c2V0IDxGMT49PHR5cGUgQ1RSTC1WPjx0eXBlIEYxPgo8IFR5cGUgdGhlIDxGMT4gYXMgZm91ciBjaGFyYWN0ZXJzLiAgVGhlIHBhcnQgYWZ0ZXIgdGhlICI9IiBtdXN0IGJlIGRvbmUgd2l0aAogIHRoZSBhY3R1YWwga2V5cywgbm90IHRoZSBsaXRlcmFsIHRleHQuCkFub3RoZXIgc29sdXRpb24gaXMgdG8gdXNlIHRoZSBhY3R1YWwga2V5IGNvZGUgaW4gdGhlIG1hcHBpbmcgZm9yIHRoZSBzZWNvbmQKc3BlY2lhbCBrZXk6ID4KCTptYXAgPEYxPjxFc2M+T1AgOmVjaG8gInllcyI8Q1I+CkRvbid0IHR5cGUgYSByZWFsIDxFc2M+LCBWaW0gd2lsbCByZWNvZ25pemUgdGhlIGtleSBjb2RlIGFuZCByZXBsYWNlIGl0IHdpdGgKPEYxPiBhbnl3YXkuCgpBbm90aGVyIHByb2JsZW0gbWF5IGJlIHRoYXQgd2hlbiBrZWVwaW5nIEFMVCBvciBNZXRhIHByZXNzZWQgdGhlIHRlcm1pbmFsCnByZXBlbmRzIEVTQyBpbnN0ZWFkIG9mIHNldHRpbmcgdGhlIDh0aCBiaXQuICBTZWUgfDptYXAtYWx0LWtleXN8LgoKCQkJCQkJKnJlY3Vyc2l2ZV9tYXBwaW5nKgpJZiB5b3UgaW5jbHVkZSB0aGUge2xoc30gaW4gdGhlIHtyaHN9IHlvdSBoYXZlIGEgcmVjdXJzaXZlIG1hcHBpbmcuICBXaGVuCntsaHN9IGlzIHR5cGVkLCBpdCB3aWxsIGJlIHJlcGxhY2VkIHdpdGgge3Joc30uICBXaGVuIHRoZSB7bGhzfSB3aGljaCBpcwppbmNsdWRlZCBpbiB7cmhzfSBpcyBlbmNvdW50ZXJlZCBpdCB3aWxsIGJlIHJlcGxhY2VkIHdpdGgge3Joc30sIGFuZCBzbyBvbi4KVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0byByZXBlYXQgYSBjb21tYW5kIGFuIGluZmluaXRlIG51bWJlciBvZiB0aW1lcy4gIFRoZQpvbmx5IHByb2JsZW0gaXMgdGhhdCB0aGUgb25seSB3YXkgdG8gc3RvcCB0aGlzIGlzIGJ5IGNhdXNpbmcgYW4gZXJyb3IuICBUaGUKbWFjcm9zIHRvIHNvbHZlIGEgbWF6ZSB1c2VzIHRoaXMsIGxvb2sgdGhlcmUgZm9yIGFuIGV4YW1wbGUuICBUaGVyZSBpcyBvbmUKZXhjZXB0aW9uOiBJZiB0aGUge3Joc30gc3RhcnRzIHdpdGgge2xoc30sIHRoZSBmaXJzdCBjaGFyYWN0ZXIgaXMgbm90IG1hcHBlZAphZ2FpbiAodGhpcyBpcyBWaSBjb21wYXRpYmxlKS4KRm9yIGV4YW1wbGU6ID4KICAgOm1hcCBhYiBhYmNkCndpbGwgZXhlY3V0ZSB0aGUgImEiIGNvbW1hbmQgYW5kIGluc2VydCAiYmNkIiBpbiB0aGUgdGV4dC4gIFRoZSAiYWIiIGluIHRoZQp7cmhzfSB3aWxsIG5vdCBiZSBtYXBwZWQgYWdhaW4uCgpJZiB5b3Ugd2FudCB0byBleGNoYW5nZSB0aGUgbWVhbmluZyBvZiB0d28ga2V5cyB5b3Ugc2hvdWxkIHVzZSB0aGUgOm5vcmVtYXAKY29tbWFuZC4gIEZvciBleGFtcGxlOiA+CiAgIDpub3JlbWFwIGsgagogICA6bm9yZW1hcCBqIGsKVGhpcyB3aWxsIGV4Y2hhbmdlIHRoZSBjdXJzb3IgdXAgYW5kIGRvd24gY29tbWFuZHMuCgpXaXRoIHRoZSBub3JtYWwgOm1hcCBjb21tYW5kLCB3aGVuIHRoZSAncmVtYXAnIG9wdGlvbiBpcyBvbiwgbWFwcGluZyB0YWtlcwpwbGFjZSB1bnRpbCB0aGUgdGV4dCBpcyBmb3VuZCBub3QgdG8gYmUgYSBwYXJ0IG9mIGEge2xoc30uICBGb3IgZXhhbXBsZSwgaWYKeW91IHVzZTogPgogICA6bWFwIHggeQogICA6bWFwIHkgeApWaW0gd2lsbCByZXBsYWNlIHggd2l0aCB5LCBhbmQgdGhlbiB5IHdpdGggeCwgZXRjLiAgV2hlbiB0aGlzIGhhcyBoYXBwZW5lZAonbWF4bWFwZGVwdGgnIHRpbWVzIChkZWZhdWx0IDEwMDApLCBWaW0gd2lsbCBnaXZlIHRoZSBlcnJvciBtZXNzYWdlCiJyZWN1cnNpdmUgbWFwcGluZyIuCgoJCQkJCQkJKjptYXAtdW5kbyoKSWYgeW91IGluY2x1ZGUgYW4gdW5kbyBjb21tYW5kIGluc2lkZSBhIG1hcHBlZCBzZXF1ZW5jZSwgdGhpcyB3aWxsIGJyaW5nIHRoZQp0ZXh0IGJhY2sgaW4gdGhlIHN0YXRlIGJlZm9yZSBleGVjdXRpbmcgdGhlIG1hY3JvLiAgVGhpcyBpcyBjb21wYXRpYmxlIHdpdGgKdGhlIG9yaWdpbmFsIFZpLCBhcyBsb25nIGFzIHRoZXJlIGlzIG9ubHkgb25lIHVuZG8gY29tbWFuZCBpbiB0aGUgbWFwcGVkCnNlcXVlbmNlIChoYXZpbmcgdHdvIHVuZG8gY29tbWFuZHMgaW4gYSBtYXBwZWQgc2VxdWVuY2UgZGlkIG5vdCBtYWtlIHNlbnNlCmluIHRoZSBvcmlnaW5hbCBWaSwgeW91IHdvdWxkIGdldCBiYWNrIHRoZSB0ZXh0IGJlZm9yZSB0aGUgZmlyc3QgdW5kbykuCgoKMS4xMCBNQVBQSU5HIEFMVC1LRVlTCQkJCQkqOm1hcC1hbHQta2V5cyoKCkluIHRoZSBHVUkgVmltIGhhbmRsZXMgdGhlIEFsdCBrZXkgaXRzZWxmLCB0aHVzIG1hcHBpbmcga2V5cyB3aXRoIEFMVCBzaG91bGQKYWx3YXlzIHdvcmsuICBCdXQgaW4gYSB0ZXJtaW5hbCBWaW0gZ2V0cyBhIHNlcXVlbmNlIG9mIGJ5dGVzIGFuZCBoYXMgdG8gZmlndXJlCm91dCB3aGV0aGVyIEFMVCB3YXMgcHJlc3NlZCBvciBub3QuCgpCeSBkZWZhdWx0IFZpbSBhc3N1bWVzIHRoYXQgcHJlc3NpbmcgdGhlIEFMVCBrZXkgc2V0cyB0aGUgOHRoIGJpdCBvZiBhIHR5cGVkCmNoYXJhY3Rlci4gIE1vc3QgZGVjZW50IHRlcm1pbmFscyBjYW4gd29yayB0aGF0IHdheSwgc3VjaCBhcyB4dGVybSwgYXRlcm0gYW5kCnJ4dnQuICBJZiB5b3VyIDxBLWs+IG1hcHBpbmdzIGRvbid0IHdvcmsgaXQgbWlnaHQgYmUgdGhhdCB0aGUgdGVybWluYWwgaXMKcHJlZml4aW5nIHRoZSBjaGFyYWN0ZXIgd2l0aCBhbiBFU0MgY2hhcmFjdGVyLiAgQnV0IHlvdSBjYW4ganVzdCBhcyB3ZWxsIHR5cGUKRVNDIGJlZm9yZSBhIGNoYXJhY3RlciwgdGh1cyBWaW0gZG9lc24ndCBrbm93IHdoYXQgaGFwcGVuZWQgKGV4Y2VwdCBmb3IKY2hlY2tpbmcgdGhlIGRlbGF5IGJldHdlZW4gY2hhcmFjdGVycywgd2hpY2ggaXMgbm90IHJlbGlhYmxlKS4KCkFzIG9mIHRoaXMgd3JpdGluZywgc29tZSBtYWluc3RyZWFtIHRlcm1pbmFscyBsaWtlIGdub21lLXRlcm1pbmFsIGFuZCBrb25zb2xlCnVzZSB0aGUgRVNDIHByZWZpeC4gIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIGEgd2F5IHRvIGhhdmUgdGhlbSB1c2UgdGhlIDh0aCBiaXQKaW5zdGVhZC4gIFh0ZXJtIHNob3VsZCB3b3JrIHdlbGwgYnkgZGVmYXVsdC4gIEF0ZXJtIGFuZCByeHZ0IHNob3VsZCB3b3JrIHdlbGwKd2hlbiBzdGFydGVkIHdpdGggdGhlICItLW1ldGE4IiBhcmd1bWVudC4gIFlvdSBjYW4gYWxzbyB0d2VhayByZXNvdXJjZXMgbGlrZQoibWV0YVNlbmRzRXNjYXBlIiwgImVpZ2h0Qml0SW5wdXQiIGFuZCAiZWlnaHRCaXRPdXRwdXQiLgoKT24gdGhlIExpbnV4IGNvbnNvbGUsIHRoaXMgYmVoYXZpb3IgY2FuIGJlIHRvZ2dsZWQgd2l0aCB0aGUgInNldG1ldGFtb2RlIgpjb21tYW5kLiAgQmVhciBpbiBtaW5kIHRoYXQgbm90IHVzaW5nIGFuIEVTQyBwcmVmaXggY291bGQgZ2V0IHlvdSBpbiB0cm91YmxlCndpdGggb3RoZXIgcHJvZ3JhbXMuICBZb3Ugc2hvdWxkIG1ha2Ugc3VyZSB0aGF0IGJhc2ggaGFzIHRoZSAiY29udmVydC1tZXRhIgpvcHRpb24gc2V0IHRvICJvbiIgaW4gb3JkZXIgZm9yIHlvdXIgTWV0YSBrZXliaW5kaW5ncyB0byBzdGlsbCB3b3JrIG9uIGl0CihpdCdzIHRoZSBkZWZhdWx0IHJlYWRsaW5lIGJlaGF2aW9yLCB1bmxlc3MgY2hhbmdlZCBieSBzcGVjaWZpYyBzeXN0ZW0KY29uZmlndXJhdGlvbikuICBGb3IgdGhhdCwgeW91IGNhbiBhZGQgdGhlIGxpbmU6ID4KCglzZXQgY29udmVydC1tZXRhIG9uCgp0byB5b3VyIH4vLmlucHV0cmMgZmlsZS4gSWYgeW91J3JlIGNyZWF0aW5nIHRoZSBmaWxlLCB5b3UgbWlnaHQgd2FudCB0byB1c2U6ID4KCgkkaW5jbHVkZSAvZXRjL2lucHV0cmMKCmFzIHRoZSBmaXJzdCBsaW5lLCBpZiB0aGF0IGZpbGUgZXhpc3RzIG9uIHlvdXIgc3lzdGVtLCB0byBrZWVwIGdsb2JhbCBvcHRpb25zLgpUaGlzIG1heSBjYXVzZSBhIHByb2JsZW0gZm9yIGVudGVyaW5nIHNwZWNpYWwgY2hhcmFjdGVycywgc3VjaCBhcyB0aGUgdW1sYXV0LgpUaGVuIHlvdSBzaG91bGQgdXNlIENUUkwtViBiZWZvcmUgdGhhdCBjaGFyYWN0ZXIuCgpCZWFyIGluIG1pbmQgdGhhdCBjb252ZXJ0LW1ldGEgaGFzIGJlZW4gcmVwb3J0ZWQgdG8gaGF2ZSB0cm91YmxlcyB3aGVuIHVzZWQgaW4KVVRGLTggbG9jYWxlcy4gIE9uIHRlcm1pbmFscyBsaWtlIHh0ZXJtLCB0aGUgIm1ldGFTZW5kc0VzY2FwZSIgcmVzb3VyY2UgY2FuIGJlCnRvZ2dsZWQgb24gdGhlIGZseSB0aHJvdWdoIHRoZSAiTWFpbiBPcHRpb25zIiBtZW51LCBieSBwcmVzc2luZyBDdHJsLUxlZnRDbGljawpvbiB0aGUgdGVybWluYWw7IHRoYXQncyBhIGdvb2QgbGFzdCByZXNvdXJjZSBpbiBjYXNlIHlvdSB3YW50IHRvIHNlbmQgRVNDIHdoZW4KdXNpbmcgb3RoZXIgYXBwbGljYXRpb25zIGJ1dCBub3Qgd2hlbiBpbnNpZGUgVklNLgoKCjEuMTEgTUFQUElORyBBTiBPUEVSQVRPUgkJCQkqOm1hcC1vcGVyYXRvcioKCkFuIG9wZXJhdG9yIGlzIHVzZWQgYmVmb3JlIGEge21vdGlvbn0gY29tbWFuZC4gIFRvIGRlZmluZSB5b3VyIG93biBvcGVyYXRvcgp5b3UgbXVzdCBjcmVhdGUgbWFwcGluZyB0aGF0IGZpcnN0IHNldHMgdGhlICdvcGVyYXRvcmZ1bmMnIG9wdGlvbiBhbmQgdGhlbgppbnZva2UgdGhlIHxnQHwgb3BlcmF0b3IuICBBZnRlciB0aGUgdXNlciB0eXBlcyB0aGUge21vdGlvbn0gY29tbWFuZCB0aGUKc3BlY2lmaWVkIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkLgoKCQkJCQkJCSpnQCogKkU3NzQqICpFNzc1KgpnQHttb3Rpb259CQlDYWxsIHRoZSBmdW5jdGlvbiBzZXQgYnkgdGhlICdvcGVyYXRvcmZ1bmMnIG9wdGlvbi4KCQkJVGhlICdbIG1hcmsgaXMgcG9zaXRpb25lZCBhdCB0aGUgc3RhcnQgb2YgdGhlIHRleHQKCQkJbW92ZWQgb3ZlciBieSB7bW90aW9ufSwgdGhlICddIG1hcmsgb24gdGhlIGxhc3QKCQkJY2hhcmFjdGVyIG9mIHRoZSB0ZXh0LgoJCQlUaGUgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggb25lIFN0cmluZyBhcmd1bWVudDoKCQkJICAgICJsaW5lIgl7bW90aW9ufSB3YXMgfGxpbmV3aXNlfAoJCQkgICAgImNoYXIiCXttb3Rpb259IHdhcyB8Y2hhcmFjdGVyd2lzZXwKCQkJICAgICJibG9jayIJe21vdGlvbn0gd2FzIHxibG9ja3dpc2UtdmlzdWFsfHwKCQkJQWx0aG91Z2ggImJsb2NrIiB3b3VsZCByYXJlbHkgYXBwZWFyLCBzaW5jZSBpdCBjYW4KCQkJb25seSByZXN1bHQgZnJvbSBWaXN1YWwgbW9kZSB3aGVyZSAiZ0AiIGlzIG5vdCB1c2VmdWwuCgkJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgK2V2YWwKCQkJZmVhdHVyZX0KCkhlcmUgaXMgYW4gZXhhbXBsZSB0aGF0IGNvdW50cyB0aGUgbnVtYmVyIG9mIHNwYWNlcyB3aXRoIDxGND46ID4KCglubWFwIDxzaWxlbnQ+IDxGND4gOnNldCBvcGZ1bmM9Q291bnRTcGFjZXM8Q1I+Z0AKCXZtYXAgPHNpbGVudD4gPEY0PiA6PEMtVT5jYWxsIENvdW50U3BhY2VzKHZpc3VhbG1vZGUoKSwgMSk8Q1I+CgoJZnVuY3Rpb24hIENvdW50U3BhY2VzKHR5cGUsIC4uLikKCSAgbGV0IHNlbF9zYXZlID0gJnNlbGVjdGlvbgoJICBsZXQgJnNlbGVjdGlvbiA9ICJpbmNsdXNpdmUiCgkgIGxldCByZWdfc2F2ZSA9IEBACgoJICBpZiBhOjAgICIgSW52b2tlZCBmcm9tIFZpc3VhbCBtb2RlLCB1c2UgJzwgYW5kICc+IG1hcmtzLgoJICAgIHNpbGVudCBleGUgIm5vcm1hbCEgYDwiIC4gYTp0eXBlIC4gImA+eSIKCSAgZWxzZWlmIGE6dHlwZSA9PSAnbGluZScKCSAgICBzaWxlbnQgZXhlICJub3JtYWwhICdbViddeSIKCSAgZWxzZWlmIGE6dHlwZSA9PSAnYmxvY2snCgkgICAgc2lsZW50IGV4ZSAibm9ybWFsISBgW1w8Qy1WPmBdeSIKCSAgZWxzZQoJICAgIHNpbGVudCBleGUgIm5vcm1hbCEgYFt2YF15IgoJICBlbmRpZgoKCSAgZWNob21zZyBzdHJsZW4oc3Vic3RpdHV0ZShAQCwgJ1teIF0nLCAnJywgJ2cnKSkKCgkgIGxldCAmc2VsZWN0aW9uID0gc2VsX3NhdmUKCSAgbGV0IEBAID0gcmVnX3NhdmUKCWVuZGZ1bmN0aW9uCgpOb3RlIHRoYXQgdGhlICdzZWxlY3Rpb24nIG9wdGlvbiBpcyB0ZW1wb3JhcmlseSBzZXQgdG8gImluY2x1c2l2ZSIgdG8gYmUgYWJsZQp0byB5YW5rIGV4YWN0bHkgdGhlIHJpZ2h0IHRleHQgYnkgdXNpbmcgVmlzdWFsIG1vZGUgZnJvbSB0aGUgJ1sgdG8gdGhlICddCm1hcmsuCgpBbHNvIG5vdGUgdGhhdCB0aGVyZSBpcyBhIHNlcGFyYXRlIG1hcHBpbmcgZm9yIFZpc3VhbCBtb2RlLiAgSXQgcmVtb3ZlcyB0aGUKIic8LCc+IiByYW5nZSB0aGF0ICI6IiBpbnNlcnRzIGluIFZpc3VhbCBtb2RlIGFuZCBpbnZva2VzIHRoZSBmdW5jdGlvbiB3aXRoCnZpc3VhbG1vZGUoKSBhbmQgYW4gZXh0cmEgYXJndW1lbnQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gQWJicmV2aWF0aW9ucwkJCSphYmJyZXZpYXRpb25zKiAqQWJicmV2aWF0aW9ucyoKCkFiYnJldmlhdGlvbnMgYXJlIHVzZWQgaW4gSW5zZXJ0IG1vZGUsIFJlcGxhY2UgbW9kZSBhbmQgQ29tbWFuZC1saW5lIG1vZGUuCklmIHlvdSBlbnRlciBhIHdvcmQgdGhhdCBpcyBhbiBhYmJyZXZpYXRpb24sIGl0IGlzIHJlcGxhY2VkIHdpdGggdGhlIHdvcmQgaXQKc3RhbmRzIGZvci4gIFRoaXMgY2FuIGJlIHVzZWQgdG8gc2F2ZSB0eXBpbmcgZm9yIG9mdGVuIHVzZWQgbG9uZyB3b3Jkcy4gIEFuZAp5b3UgY2FuIHVzZSBpdCB0byBhdXRvbWF0aWNhbGx5IGNvcnJlY3Qgb2J2aW91cyBzcGVsbGluZyBlcnJvcnMuCkV4YW1wbGVzOgoKCTppYWIgbXMgTWljcm9Tb2Z0Cgk6aWFiIHRpaHMgdGhpcwoKVGhlcmUgYXJlIHRocmVlIHR5cGVzIG9mIGFiYnJldmlhdGlvbnM6CgpmdWxsLWlkCSAgVGhlICJmdWxsLWlkIiB0eXBlIGNvbnNpc3RzIGVudGlyZWx5IG9mIGtleXdvcmQgY2hhcmFjdGVycyAobGV0dGVycwoJICBhbmQgY2hhcmFjdGVycyBmcm9tICdpc2tleXdvcmQnIG9wdGlvbikuICBUaGlzIGlzIHRoZSBtb3N0IGNvbW1vbgoJICBhYmJyZXZpYXRpb24uCgoJICBFeGFtcGxlczogImZvbyIsICJnMyIsICItMSIKCmVuZC1pZAkgIFRoZSAiZW5kLWlkIiB0eXBlIGVuZHMgaW4gYSBrZXl3b3JkIGNoYXJhY3RlciwgYnV0IGFsbCB0aGUgb3RoZXIKCSAgY2hhcmFjdGVycyBhcmUgbm90IGtleXdvcmQgY2hhcmFjdGVycy4KCgkgIEV4YW1wbGVzOiAiI2kiLCAiLi5mIiwgIiQvNyIKCm5vbi1pZAkgIFRoZSAibm9uLWlkIiB0eXBlIGVuZHMgaW4gYSBub24ta2V5d29yZCBjaGFyYWN0ZXIsIHRoZSBvdGhlcgoJICBjaGFyYWN0ZXJzIG1heSBiZSBvZiBhbnkgdHlwZSwgZXhjbHVkaW5nIHNwYWNlIGFuZCBUYWIuICB7dGhpcyB0eXBlCgkgIGlzIG5vdCBzdXBwb3J0ZWQgYnkgVml9CgoJICBFeGFtcGxlczogImRlZiMiLCAiNC83JCIKCkV4YW1wbGVzIG9mIHN0cmluZ3MgdGhhdCBjYW5ub3QgYmUgYWJicmV2aWF0aW9uczogImEuYiIsICIjZGVmIiwgImEgYiIsICJfJHIiCgpBbiBhYmJyZXZpYXRpb24gaXMgb25seSByZWNvZ25pemVkIHdoZW4geW91IHR5cGUgYSBub24ta2V5d29yZCBjaGFyYWN0ZXIuClRoaXMgY2FuIGFsc28gYmUgdGhlIDxFc2M+IHRoYXQgZW5kcyBpbnNlcnQgbW9kZSBvciB0aGUgPENSPiB0aGF0IGVuZHMgYQpjb21tYW5kLiAgVGhlIG5vbi1rZXl3b3JkIGNoYXJhY3RlciB3aGljaCBlbmRzIHRoZSBhYmJyZXZpYXRpb24gaXMgaW5zZXJ0ZWQKYWZ0ZXIgdGhlIGV4cGFuZGVkIGFiYnJldmlhdGlvbi4gIEFuIGV4Y2VwdGlvbiB0byB0aGlzIGlzIHRoZSBjaGFyYWN0ZXIgPEMtXT4sCndoaWNoIGlzIHVzZWQgdG8gZXhwYW5kIGFuIGFiYnJldmlhdGlvbiB3aXRob3V0IGluc2VydGluZyBhbnkgZXh0cmEKY2hhcmFjdGVycy4KCkV4YW1wbGU6ID4KICAgOmFiIGhoCWhlbGxvCjwJICAgICJoaDxTcGFjZT4iIGlzIGV4cGFuZGVkIHRvICJoZWxsbzxTcGFjZT4iCgkgICAgImhoPEMtXT4iIGlzIGV4cGFuZGVkIHRvICJoZWxsbyIKClRoZSBjaGFyYWN0ZXJzIGJlZm9yZSB0aGUgY3Vyc29yIG11c3QgbWF0Y2ggdGhlIGFiYnJldmlhdGlvbi4gIEVhY2ggdHlwZSBoYXMKYW4gYWRkaXRpb25hbCBydWxlOgoKZnVsbC1pZAkgIEluIGZyb250IG9mIHRoZSBtYXRjaCBpcyBhIG5vbi1rZXl3b3JkIGNoYXJhY3Rlciwgb3IgdGhpcyBpcyB3aGVyZQoJICB0aGUgbGluZSBvciBpbnNlcnRpb24gc3RhcnRzLiAgRXhjZXB0aW9uOiBXaGVuIHRoZSBhYmJyZXZpYXRpb24gaXMKCSAgb25seSBvbmUgY2hhcmFjdGVyLCBpdCBpcyBub3QgcmVjb2duaXplZCBpZiB0aGVyZSBpcyBhIG5vbi1rZXl3b3JkCgkgIGNoYXJhY3RlciBpbiBmcm9udCBvZiBpdCwgb3RoZXIgdGhhbiBhIHNwYWNlIG9yIGEgPFRhYj4uCgplbmQtaWQJICBJbiBmcm9udCBvZiB0aGUgbWF0Y2ggaXMgYSBrZXl3b3JkIGNoYXJhY3Rlciwgb3IgYSBzcGFjZSBvciBhIDxUYWI+LAoJICBvciB0aGlzIGlzIHdoZXJlIHRoZSBsaW5lIG9yIGluc2VydGlvbiBzdGFydHMuCgpub24taWQJICBJbiBmcm9udCBvZiB0aGUgbWF0Y2ggaXMgYSBzcGFjZSwgPFRhYj4gb3IgdGhlIHN0YXJ0IG9mIHRoZSBsaW5lIG9yCgkgIHRoZSBpbnNlcnRpb24uCgpFeGFtcGxlczogKHtDVVJTT1J9IGlzIHdoZXJlIHlvdSB0eXBlIGEgbm9uLWtleXdvcmQgY2hhcmFjdGVyKSA+CiAgIDphYiBmb28gICBmb3VyIG9sZCBvdHRlcnMKPAkJIiBmb297Q1VSU09SfSIJICBpcyBleHBhbmRlZCB0byAiIGZvdXIgb2xkIG90dGVycyIKCQkiIGZvb2JhcntDVVJTT1J9IiBpcyBub3QgZXhwYW5kZWQKCQkiYmFyZm9ve0NVUlNPUn0iICBpcyBub3QgZXhwYW5kZWQKPgogICA6YWIgI2kgI2luY2x1ZGUKPAkJIiNpe0NVUlNPUn0iCSAgaXMgZXhwYW5kZWQgdG8gIiNpbmNsdWRlIgoJCSI+I2l7Q1VSU09SfSIJICBpcyBub3QgZXhwYW5kZWQKPgogICA6YWIgOzsgPGVuZG9mbGluZT4KPAkJInRlc3Q7OyIJICBpcyBub3QgZXhwYW5kZWQKCQkidGVzdCA7OyIJICBpcyBleHBhbmRlZCB0byAidGVzdCA8ZW5kb2ZsaW5lPiIKClRvIGF2b2lkIHRoZSBhYmJyZXZpYXRpb24gaW4gaW5zZXJ0IG1vZGU6IFR5cGUgcGFydCBvZiB0aGUgYWJicmV2aWF0aW9uLCBleGl0Cmluc2VydCBtb2RlIHdpdGggPEVzYz4sIHJlLWVudGVyIGluc2VydCBtb2RlIHdpdGggImEiIGFuZCB0eXBlIHRoZSByZXN0LiAgT3IKdHlwZSBDVFJMLVYgYmVmb3JlIHRoZSBjaGFyYWN0ZXIgYWZ0ZXIgdGhlIGFiYnJldmlhdGlvbi4KVG8gYXZvaWQgdGhlIGFiYnJldmlhdGlvbiBpbiBDb21tYW5kLWxpbmUgbW9kZTogVHlwZSBDVFJMLVYgdHdpY2Ugc29tZXdoZXJlIGluCnRoZSBhYmJyZXZpYXRpb24gdG8gYXZvaWQgaXQgdG8gYmUgcmVwbGFjZWQuICBBIENUUkwtViBpbiBmcm9udCBvZiBhIG5vcm1hbApjaGFyYWN0ZXIgaXMgbW9zdGx5IGlnbm9yZWQgb3RoZXJ3aXNlLgoKSXQgaXMgcG9zc2libGUgdG8gbW92ZSB0aGUgY3Vyc29yIGFmdGVyIGFuIGFiYnJldmlhdGlvbjogPgogICA6aWFiIGlmIGlmICgpPExlZnQ+ClRoaXMgZG9lcyBub3Qgd29yayBpZiAnY3BvcHRpb25zJyBpbmNsdWRlcyB0aGUgJzwnIGZsYWcuIHw8PnwKCllvdSBjYW4gZXZlbiBkbyBtb3JlIGNvbXBsaWNhdGVkIHRoaW5ncy4gIEZvciBleGFtcGxlLCB0byBjb25zdW1lIHRoZSBzcGFjZQp0eXBlZCBhZnRlciBhbiBhYmJyZXZpYXRpb246ID4KICAgZnVuYyBFYXRjaGFyKHBhdCkKICAgICAgbGV0IGMgPSBucjJjaGFyKGdldGNoYXIoMCkpCiAgICAgIHJldHVybiAoYyA9fiBhOnBhdCkgPyAnJyA6IGMKICAgZW5kZnVuYwogICBpYWJiciA8c2lsZW50PiBpZiBpZiAoKTxMZWZ0PjxDLVI+PUVhdGNoYXIoJ1xzJyk8Q1I+CgpUaGVyZSBhcmUgbm8gZGVmYXVsdCBhYmJyZXZpYXRpb25zLgoKQWJicmV2aWF0aW9ucyBhcmUgbmV2ZXIgcmVjdXJzaXZlLiAgWW91IGNhbiB1c2UgIjphYiBmIGYtby1vIiB3aXRob3V0IGFueQpwcm9ibGVtLiAgQnV0IGFiYnJldmlhdGlvbnMgY2FuIGJlIG1hcHBlZC4gIHtzb21lIHZlcnNpb25zIG9mIFZpIHN1cHBvcnQKcmVjdXJzaXZlIGFiYnJldmlhdGlvbnMsIGZvciBubyBhcHBhcmVudCByZWFzb259CgpBYmJyZXZpYXRpb25zIGFyZSBkaXNhYmxlZCBpZiB0aGUgJ3Bhc3RlJyBvcHRpb24gaXMgb24uCgoJCQkJKjphYmJyZXZpYXRlLWxvY2FsKiAqOmFiYnJldmlhdGUtPGJ1ZmZlcj4qCkp1c3QgbGlrZSBtYXBwaW5ncywgYWJicmV2aWF0aW9ucyBjYW4gYmUgbG9jYWwgdG8gYSBidWZmZXIuICBUaGlzIGlzIG1vc3RseQp1c2VkIGluIGEgfGZpbGV0eXBlLXBsdWdpbnwgZmlsZS4gIEV4YW1wbGUgZm9yIGEgQyBwbHVnaW4gZmlsZTogPgoJOmFiYiA8YnVmZmVyPiBGRiAgZm9yIChpID0gMDsgaSA8IDsgKytpKQo8CgkJCQkJCSo6YWIqICo6YWJicmV2aWF0ZSoKOmFiW2JyZXZpYXRlXQkJbGlzdCBhbGwgYWJicmV2aWF0aW9ucy4gIFRoZSBjaGFyYWN0ZXIgaW4gdGhlIGZpcnN0CgkJCWNvbHVtbiBpbmRpY2F0ZXMgdGhlIG1vZGUgd2hlcmUgdGhlIGFiYnJldmlhdGlvbiBpcwoJCQl1c2VkOiAnaScgZm9yIGluc2VydCBtb2RlLCAnYycgZm9yIENvbW1hbmQtbGluZQoJCQltb2RlLCAnIScgZm9yIGJvdGguICBUaGVzZSBhcmUgdGhlIHNhbWUgYXMgZm9yCgkJCW1hcHBpbmdzLCBzZWUgfG1hcC1saXN0aW5nfC4KCgkJCQkJCSo6YWJicmV2aWF0ZS12ZXJib3NlKgpXaGVuICd2ZXJib3NlJyBpcyBub24temVybywgbGlzdGluZyBhbiBhYmJyZXZpYXRpb24gd2lsbCBhbHNvIGRpc3BsYXkgd2hlcmUgaXQKd2FzIGxhc3QgZGVmaW5lZC4gIEV4YW1wbGU6ID4KCgk6dmVyYm9zZSBhYmJyZXZpYXRlCgkhICB0ZWgJCSB0aGUKCQlMYXN0IHNldCBmcm9tIC9ob21lL2FiY2QvdmltL2FiYnIudmltCgpTZWUgfDp2ZXJib3NlLWNtZHwgZm9yIG1vcmUgaW5mb3JtYXRpb24uCgo6YWJbYnJldmlhdGVdIHtsaHN9CWxpc3QgdGhlIGFiYnJldmlhdGlvbnMgdGhhdCBzdGFydCB3aXRoIHtsaHN9CgkJCVlvdSBtYXkgbmVlZCB0byBpbnNlcnQgYSBDVFJMLVYgKHR5cGUgaXQgdHdpY2UpIHRvCgkJCWF2b2lkIHRoYXQgYSB0eXBlZCB7bGhzfSBpcyBleHBhbmRlZCwgc2luY2UKCQkJY29tbWFuZC1saW5lIGFiYnJldmlhdGlvbnMgYXBwbHkgaGVyZS4KCjphYlticmV2aWF0ZV0gWzxleHByPl0ge2xoc30ge3Joc30KCQkJYWRkIGFiYnJldmlhdGlvbiBmb3Ige2xoc30gdG8ge3Joc30uICBJZiB7bGhzfSBhbHJlYWR5CgkJCWV4aXN0ZWQgaXQgaXMgcmVwbGFjZWQgd2l0aCB0aGUgbmV3IHtyaHN9LiAge3Joc30gbWF5CgkJCWNvbnRhaW4gc3BhY2VzLgoJCQlTZWUgfDptYXAtPGV4cHI+fCBmb3IgdGhlIG9wdGlvbmFsIDxleHByPiBhcmd1bWVudC4KCgkJCQkJCSo6dW5hKiAqOnVuYWJicmV2aWF0ZSoKOnVuYVtiYnJldmlhdGVdIHtsaHN9CVJlbW92ZSBhYmJyZXZpYXRpb24gZm9yIHtsaHN9IGZyb20gdGhlIGxpc3QuICBJZiBub25lCgkJCWlzIGZvdW5kLCByZW1vdmUgYWJicmV2aWF0aW9ucyBpbiB3aGljaCB7bGhzfSBtYXRjaGVzCgkJCXdpdGggdGhlIHtyaHN9LiAgVGhpcyBpcyBkb25lIHNvIHRoYXQgeW91IGNhbiBldmVuCgkJCXJlbW92ZSBhYmJyZXZpYXRpb25zIGFmdGVyIGV4cGFuc2lvbi4gIFRvIGF2b2lkCgkJCWV4cGFuc2lvbiBpbnNlcnQgYSBDVFJMLVYgKHR5cGUgaXQgdHdpY2UpLgoKCQkJCQkJKjpub3JlYSogKjpub3JlYWJicmV2Kgo6bm9yZWFbYmJyZXZdIFs8ZXhwcj5dIFtsaHNdIFtyaHNdCgkJCXNhbWUgYXMgIjphYiIsIGJ1dCBubyByZW1hcHBpbmcgZm9yIHRoaXMge3Joc30ge25vdAoJCQlpbiBWaX0KCgkJCQkJCSo6Y2EqICo6Y2FiYnJldioKOmNhW2JicmV2XSBbPGV4cHI+XSBbbGhzXSBbcmhzXQoJCQlzYW1lIGFzICI6YWIiLCBidXQgZm9yIENvbW1hbmQtbGluZSBtb2RlIG9ubHkuICB7bm90CgkJCWluIFZpfQoKCQkJCQkJKjpjdW5hKiAqOmN1bmFiYnJldioKOmN1bmFbYmJyZXZdIHtsaHN9CXNhbWUgYXMgIjp1bmEiLCBidXQgZm9yIENvbW1hbmQtbGluZSBtb2RlIG9ubHkuICB7bm90CgkJCWluIFZpfQoKCQkJCQkJKjpjbm9yZWEqICo6Y25vcmVhYmJyZXYqCjpjbm9yZWFbYmJyZXZdIFs8ZXhwcj5dIFtsaHNdIFtyaHNdCgkJCXNhbWUgYXMgIjphYiIsIGJ1dCBmb3IgQ29tbWFuZC1saW5lIG1vZGUgb25seSBhbmQgbm8KCQkJcmVtYXBwaW5nIGZvciB0aGlzIHtyaHN9IHtub3QgaW4gVml9CgoJCQkJCQkqOmlhKiAqOmlhYmJyZXYqCjppYVtiYnJldl0gWzxleHByPl0gW2xoc10gW3Joc10KCQkJc2FtZSBhcyAiOmFiIiwgYnV0IGZvciBJbnNlcnQgbW9kZSBvbmx5LiAge25vdCBpbiBWaX0KCgkJCQkJCSo6aXVuYSogKjppdW5hYmJyZXYqCjppdW5hW2JicmV2XSB7bGhzfQlzYW1lIGFzICI6dW5hIiwgYnV0IGZvciBpbnNlcnQgbW9kZSBvbmx5LiAge25vdCBpbgoJCQlWaX0KCgkJCQkJCSo6aW5vcmVhKiAqOmlub3JlYWJicmV2Kgo6aW5vcmVhW2JicmV2XSBbPGV4cHI+XSBbbGhzXSBbcmhzXQoJCQlzYW1lIGFzICI6YWIiLCBidXQgZm9yIEluc2VydCBtb2RlIG9ubHkgYW5kIG5vCgkJCXJlbWFwcGluZyBmb3IgdGhpcyB7cmhzfSB7bm90IGluIFZpfQoKCQkJCQkJCSo6YWJjKiAqOmFiY2xlYXIqCjphYmNbbGVhcl0JCVJlbW92ZSBhbGwgYWJicmV2aWF0aW9ucy4gIHtub3QgaW4gVml9CgoJCQkJCQkJKjppYWJjKiAqOmlhYmNsZWFyKgo6aWFiY1tsZWFyXQkJUmVtb3ZlIGFsbCBhYmJyZXZpYXRpb25zIGZvciBJbnNlcnQgbW9kZS4gIHtub3QgaW4gVml9CgoJCQkJCQkJKjpjYWJjKiAqOmNhYmNsZWFyKgo6Y2FiY1tsZWFyXQkJUmVtb3ZlIGFsbCBhYmJyZXZpYXRpb25zIGZvciBDb21tYW5kLWxpbmUgbW9kZS4gIHtub3QKCQkJaW4gVml9CgoJCQkJCQkJKnVzaW5nX0NUUkwtVioKSXQgaXMgcG9zc2libGUgdG8gdXNlIHNwZWNpYWwgY2hhcmFjdGVycyBpbiB0aGUgcmhzIG9mIGFuIGFiYnJldmlhdGlvbi4KQ1RSTC1WIGhhcyB0byBiZSB1c2VkIHRvIGF2b2lkIHRoZSBzcGVjaWFsIG1lYW5pbmcgb2YgbW9zdCBub24gcHJpbnRhYmxlCmNoYXJhY3RlcnMuICBIb3cgbWFueSBDVFJMLVZzIG5lZWQgdG8gYmUgdHlwZWQgZGVwZW5kcyBvbiBob3cgeW91IGVudGVyIHRoZQphYmJyZXZpYXRpb24uICBUaGlzIGFsc28gYXBwbGllcyB0byBtYXBwaW5ncy4gIExldCdzIHVzZSBhbiBleGFtcGxlIGhlcmUuCgpTdXBwb3NlIHlvdSB3YW50IHRvIGFiYnJldmlhdGUgImVzYyIgdG8gZW50ZXIgYW4gPEVzYz4gY2hhcmFjdGVyLiAgV2hlbiB5b3UKdHlwZSB0aGUgIjphYiIgY29tbWFuZCBpbiBWaW0sIHlvdSBoYXZlIHRvIGVudGVyIHRoaXM6IChoZXJlIF5WIGlzIGEgQ1RSTC1WCmFuZCBeWyBpcyA8RXNjPikKCllvdSB0eXBlOiAgIGFiIGVzYyBeVl5WXlZeVl5WXlsKCglBbGwga2V5Ym9hcmQgaW5wdXQgaXMgc3ViamVjdGVkIHRvIF5WIHF1b3RlIGludGVycHJldGF0aW9uLCBzbwoJdGhlIGZpcnN0LCB0aGlyZCwgYW5kIGZpZnRoIF5WICBjaGFyYWN0ZXJzIHNpbXBseSBhbGxvdyB0aGUgc2Vjb25kLAoJYW5kIGZvdXJ0aCBeVnMsIGFuZCB0aGUgXlssIHRvIGJlIGVudGVyZWQgaW50byB0aGUgY29tbWFuZC1saW5lLgoKWW91IHNlZTogICAgYWIgZXNjIF5WXlZeWwoKCVRoZSBjb21tYW5kLWxpbmUgY29udGFpbnMgdHdvIGFjdHVhbCBeVnMgYmVmb3JlIHRoZSBeWy4gIFRoaXMgaXMKCWhvdyBpdCBzaG91bGQgYXBwZWFyIGluIHlvdXIgLmV4cmMgZmlsZSwgaWYgeW91IGNob29zZSB0byBnbyB0aGF0Cglyb3V0ZS4gIFRoZSBmaXJzdCBeViBpcyB0aGVyZSB0byBxdW90ZSB0aGUgc2Vjb25kIF5WOyB0aGUgOmFiCgljb21tYW5kIHVzZXMgXlYgYXMgaXRzIG93biBxdW90ZSBjaGFyYWN0ZXIsIHNvIHlvdSBjYW4gaW5jbHVkZSBxdW90ZWQKCXdoaXRlc3BhY2Ugb3IgdGhlIHwgY2hhcmFjdGVyIGluIHRoZSBhYmJyZXZpYXRpb24uICBUaGUgOmFiIGNvbW1hbmQKCWRvZXNuJ3QgZG8gYW55dGhpbmcgc3BlY2lhbCB3aXRoIHRoZSBeWyBjaGFyYWN0ZXIsIHNvIGl0IGRvZXNuJ3QgbmVlZAoJdG8gYmUgcXVvdGVkLiAgKEFsdGhvdWdoIHF1b3RpbmcgaXNuJ3QgaGFybWZ1bDsgdGhhdCdzIHdoeSB0eXBpbmcgNwoJW2J1dCBub3QgOCFdIF5WcyB3b3Jrcy4pCgpTdG9yZWQgYXM6ICBlc2MgICAgIF5WXlsKCglBZnRlciBwYXJzaW5nLCB0aGUgYWJicmV2aWF0aW9uJ3Mgc2hvcnQgZm9ybSAoImVzYyIpIGFuZCBsb25nIGZvcm0KCSh0aGUgdHdvIGNoYXJhY3RlcnMgIl5WXlsiKSBhcmUgc3RvcmVkIGluIHRoZSBhYmJyZXZpYXRpb24gdGFibGUuCglJZiB5b3UgZ2l2ZSB0aGUgOmFiIGNvbW1hbmQgd2l0aCBubyBhcmd1bWVudHMsIHRoaXMgaXMgaG93IHRoZQoJYWJicmV2aWF0aW9uIHdpbGwgYmUgZGlzcGxheWVkLgoKCUxhdGVyLCB3aGVuIHRoZSBhYmJyZXZpYXRpb24gaXMgZXhwYW5kZWQgYmVjYXVzZSB0aGUgdXNlciB0eXBlZCBpbgoJdGhlIHdvcmQgImVzYyIsIHRoZSBsb25nIGZvcm0gaXMgc3ViamVjdGVkIHRvIHRoZSBzYW1lIHR5cGUgb2YKCV5WIGludGVycHJldGF0aW9uIGFzIGtleWJvYXJkIGlucHV0LiAgU28gdGhlIF5WIHByb3RlY3RzIHRoZSBeWwoJY2hhcmFjdGVyIGZyb20gYmVpbmcgaW50ZXJwcmV0ZWQgYXMgdGhlICJleGl0IEluc2VydCBtb2RlIiBjaGFyYWN0ZXIuCglJbnN0ZWFkLCB0aGUgXlsgaXMgaW5zZXJ0ZWQgaW50byB0aGUgdGV4dC4KCkV4cGFuZHMgdG86IF5bCgpbZXhhbXBsZSBnaXZlbiBieSBTdGV2ZSBLaXJrZW5kYWxsXQoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIExvY2FsIG1hcHBpbmdzIGFuZCBmdW5jdGlvbnMJCQkJKnNjcmlwdC1sb2NhbCoKCldoZW4gdXNpbmcgc2V2ZXJhbCBWaW0gc2NyaXB0IGZpbGVzLCB0aGVyZSBpcyB0aGUgZGFuZ2VyIHRoYXQgbWFwcGluZ3MgYW5kCmZ1bmN0aW9ucyB1c2VkIGluIG9uZSBzY3JpcHQgdXNlIHRoZSBzYW1lIG5hbWUgYXMgaW4gb3RoZXIgc2NyaXB0cy4gIFRvIGF2b2lkCnRoaXMsIHRoZXkgY2FuIGJlIG1hZGUgbG9jYWwgdG8gdGhlIHNjcmlwdC4KCgkJCQkJCSo8U0lEPiogKjxTTlI+KiAqRTgxKgpUaGUgc3RyaW5nICI8U0lEPiIgY2FuIGJlIHVzZWQgaW4gYSBtYXBwaW5nIG9yIG1lbnUuICBUaGlzIHJlcXVpcmVzIHRoYXQgdGhlCic8JyBmbGFnIGlzIG5vdCBwcmVzZW50IGluICdjcG9wdGlvbnMnLgogICBXaGVuIGV4ZWN1dGluZyB0aGUgbWFwIGNvbW1hbmQsIFZpbSB3aWxsIHJlcGxhY2UgIjxTSUQ+IiB3aXRoIHRoZSBzcGVjaWFsCmtleSBjb2RlIDxTTlI+LCBmb2xsb3dlZCBieSBhIG51bWJlciB0aGF0J3MgdW5pcXVlIGZvciB0aGUgc2NyaXB0LCBhbmQgYW4KdW5kZXJzY29yZS4gIEV4YW1wbGU6ID4KCTptYXAgPFNJRD5BZGQKY291bGQgZGVmaW5lIGEgbWFwcGluZyAiPFNOUj4yM19BZGQiLgoKV2hlbiBkZWZpbmluZyBhIGZ1bmN0aW9uIGluIGEgc2NyaXB0LCAiczoiIGNhbiBiZSBwcmVwZW5kZWQgdG8gdGhlIG5hbWUgdG8KbWFrZSBpdCBsb2NhbCB0byB0aGUgc2NyaXB0LiAgQnV0IHdoZW4gYSBtYXBwaW5nIGlzIGV4ZWN1dGVkIGZyb20gb3V0c2lkZSBvZgp0aGUgc2NyaXB0LCBpdCBkb2Vzbid0IGtub3cgaW4gd2hpY2ggc2NyaXB0IHRoZSBmdW5jdGlvbiB3YXMgZGVmaW5lZC4gIFRvCmF2b2lkIHRoaXMgcHJvYmxlbSwgdXNlICI8U0lEPiIgaW5zdGVhZCBvZiAiczoiLiAgVGhlIHNhbWUgdHJhbnNsYXRpb24gaXMgZG9uZQphcyBmb3IgbWFwcGluZ3MuICBUaGlzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGRlZmluZSBhIGNhbGwgdG8gdGhlIGZ1bmN0aW9uIGluCmEgbWFwcGluZy4KCldoZW4gYSBsb2NhbCBmdW5jdGlvbiBpcyBleGVjdXRlZCwgaXQgcnVucyBpbiB0aGUgY29udGV4dCBvZiB0aGUgc2NyaXB0IGl0IHdhcwpkZWZpbmVkIGluLiAgVGhpcyBtZWFucyB0aGF0IG5ldyBmdW5jdGlvbnMgYW5kIG1hcHBpbmdzIGl0IGRlZmluZXMgY2FuIGFsc28KdXNlICJzOiIgb3IgIjxTSUQ+IiBhbmQgaXQgd2lsbCB1c2UgdGhlIHNhbWUgdW5pcXVlIG51bWJlciBhcyB3aGVuIHRoZQpmdW5jdGlvbiBpdHNlbGYgd2FzIGRlZmluZWQuICBBbHNvLCB0aGUgInM6dmFyIiBsb2NhbCBzY3JpcHQgdmFyaWFibGVzIGNhbiBiZQp1c2VkLgoKV2hlbiBleGVjdXRpbmcgYW4gYXV0b2NvbW1hbmQgb3IgYSB1c2VyIGNvbW1hbmQsIGl0IHdpbGwgcnVuIGluIHRoZSBjb250ZXh0IG9mCnRoZSBzY3JpcHQgaXQgd2FzIGRlZmluZWQgaW4uICBUaGlzIG1ha2VzIGl0IHBvc3NpYmxlIHRoYXQgdGhlIGNvbW1hbmQgY2FsbHMgYQpsb2NhbCBmdW5jdGlvbiBvciB1c2VzIGEgbG9jYWwgbWFwcGluZy4KCk90aGVyd2lzZSwgdXNpbmcgIjxTSUQ+IiBvdXRzaWRlIG9mIGEgc2NyaXB0IGNvbnRleHQgaXMgYW4gZXJyb3IuCgpJZiB5b3UgbmVlZCB0byBnZXQgdGhlIHNjcmlwdCBudW1iZXIgdG8gdXNlIGluIGEgY29tcGxpY2F0ZWQgc2NyaXB0LCB5b3UgY2FuCnVzZSB0aGlzIGZ1bmN0aW9uOiA+CglmdW5jdGlvbiBzOlNJRCgpCgkgIHJldHVybiBtYXRjaHN0cihleHBhbmQoJzxzZmlsZT4nKSwgJzxTTlI+XHpzXGRcK1x6ZV9TSUQkJykKCWVuZGZ1bgoKVGhlICI8U05SPiIgd2lsbCBiZSBzaG93biB3aGVuIGxpc3RpbmcgZnVuY3Rpb25zIGFuZCBtYXBwaW5ncy4gIFRoaXMgaXMgdXNlZnVsCnRvIGZpbmQgb3V0IHdoYXQgdGhleSBhcmUgZGVmaW5lZCB0by4KClRoZSB8OnNjcmlwdG5hbWVzfCBjb21tYW5kIGNhbiBiZSB1c2VkIHRvIHNlZSB3aGljaCBzY3JpcHRzIGhhdmUgYmVlbiBzb3VyY2VkCmFuZCB3aGF0IHRoZWlyIDxTTlI+IG51bWJlciBpcy4KClRoaXMgaXMgYWxsIHtub3QgaW4gVml9IGFuZCB7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlICtldmFsCmZlYXR1cmV9LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIFVzZXItZGVmaW5lZCBjb21tYW5kcwkJCQkqdXNlci1jb21tYW5kcyoKCkl0IGlzIHBvc3NpYmxlIHRvIGRlZmluZSB5b3VyIG93biBFeCBjb21tYW5kcy4gIEEgdXNlci1kZWZpbmVkIGNvbW1hbmQgY2FuIGFjdApqdXN0IGxpa2UgYSBidWlsdC1pbiBjb21tYW5kIChpdCBjYW4gaGF2ZSBhIHJhbmdlIG9yIGFyZ3VtZW50cywgYXJndW1lbnRzIGNhbgpiZSBjb21wbGV0ZWQgYXMgZmlsZW5hbWVzIG9yIGJ1ZmZlciBuYW1lcywgZXRjKSwgZXhjZXB0IHRoYXQgd2hlbiB0aGUgY29tbWFuZAppcyBleGVjdXRlZCwgaXQgaXMgdHJhbnNmb3JtZWQgaW50byBhIG5vcm1hbCBleCBjb21tYW5kIGFuZCB0aGVuIGV4ZWN1dGVkLgoKRm9yIHN0YXJ0ZXJzOiBTZWUgc2VjdGlvbiB8NDAuMnwgaW4gdGhlIHVzZXIgbWFudWFsLgoKCQkJCQkJKkUxODMqICp1c2VyLWNtZC1hbWJpZ3VvdXMqCkFsbCB1c2VyIGRlZmluZWQgY29tbWFuZHMgbXVzdCBzdGFydCB3aXRoIGFuIHVwcGVyY2FzZSBsZXR0ZXIsIHRvIGF2b2lkCmNvbmZ1c2lvbiB3aXRoIGJ1aWx0aW4gY29tbWFuZHMuICAoVGhlcmUgYXJlIGEgZmV3IGJ1aWx0aW4gY29tbWFuZHMsIG5vdGFibHkKOk5leHQsIDpQcmludCBhbmQgOlgsIHdoaWNoIGRvIHN0YXJ0IHdpdGggYW4gdXBwZXJjYXNlIGxldHRlci4gIFRoZSBidWlsdGluCndpbGwgYWx3YXlzIHRha2UgcHJlY2VkZW5jZSBpbiB0aGVzZSBjYXNlcykuICBUaGUgb3RoZXIgY2hhcmFjdGVycyBvZiB0aGUgdXNlcgpjb21tYW5kIGNhbiBiZSB1cHBlcmNhc2UgbGV0dGVycywgbG93ZXJjYXNlIGxldHRlcnMgb3IgZGlnaXRzLiAgV2hlbiB1c2luZwpkaWdpdHMsIG5vdGUgdGhhdCBvdGhlciBjb21tYW5kcyB0aGF0IHRha2UgYSBudW1lcmljIGFyZ3VtZW50IG1heSBiZWNvbWUKYW1iaWd1b3VzLiAgRm9yIGV4YW1wbGUsIHRoZSBjb21tYW5kICI6Q2MyIiBjb3VsZCBiZSB0aGUgdXNlciBjb21tYW5kICI6Q2MyIgp3aXRob3V0IGFuIGFyZ3VtZW50LCBvciB0aGUgY29tbWFuZCAiOkNjIiB3aXRoIGFyZ3VtZW50ICIyIi4gIEl0IGlzIGFkdmlzZWQgdG8KcHV0IGEgc3BhY2UgYmV0d2VlbiB0aGUgY29tbWFuZCBuYW1lIGFuZCB0aGUgYXJndW1lbnQgdG8gYXZvaWQgdGhlc2UgcHJvYmxlbXMuCgpXaGVuIHVzaW5nIGEgdXNlci1kZWZpbmVkIGNvbW1hbmQsIHRoZSBjb21tYW5kIGNhbiBiZSBhYmJyZXZpYXRlZC4gIEhvd2V2ZXIsIGlmCmFuIGFiYnJldmlhdGlvbiBpcyBub3QgdW5pcXVlLCBhbiBlcnJvciB3aWxsIGJlIGlzc3VlZC4gIEZ1cnRoZXJtb3JlLCBhCmJ1aWx0LWluIGNvbW1hbmQgd2lsbCBhbHdheXMgdGFrZSBwcmVjZWRlbmNlLgoKRXhhbXBsZTogPgoJOmNvbW1hbmQgUmVuYW1lIC4uLgoJOmNvbW1hbmQgUmVudW1iZXIgLi4uCgk6UmVuYQkJCQkiIE1lYW5zICJSZW5hbWUiCgk6UmVudQkJCQkiIE1lYW5zICJSZW51bWJlciIKCTpSZW4JCQkJIiBFcnJvciAtIGFtYmlndW91cwoJOmNvbW1hbmQgUGFzdGUgLi4uCgk6UAkJCQkiIFRoZSBidWlsdC1pbiA6UHJpbnQKCkl0IGlzIHJlY29tbWVuZGVkIHRoYXQgZnVsbCBuYW1lcyBmb3IgdXNlci1kZWZpbmVkIGNvbW1hbmRzIGFyZSB1c2VkIGluCnNjcmlwdHMuCgo6Y29tW21hbmRdCQkJCQkJKjpjb20qICo6Y29tbWFuZCoKCQkJTGlzdCBhbGwgdXNlci1kZWZpbmVkIGNvbW1hbmRzLiAgV2hlbiBsaXN0aW5nIGNvbW1hbmRzLAoJCQl0aGUgY2hhcmFjdGVycyBpbiB0aGUgZmlyc3QgdHdvIGNvbHVtbnMgYXJlCgkJCSAgICAhCUNvbW1hbmQgaGFzIHRoZSAtYmFuZyBhdHRyaWJ1dGUKCQkJICAgICIJQ29tbWFuZCBoYXMgdGhlIC1yZWdpc3RlciBhdHRyaWJ1dGUKCQkJICAgIGIJQ29tbWFuZCBpcyBsb2NhbCB0byBjdXJyZW50IGJ1ZmZlcgoJCQkoc2VlIGJlbG93IGZvciBkZXRhaWxzIG9uIGF0dHJpYnV0ZXMpCgo6Y29tW21hbmRdIHtjbWR9CUxpc3QgdGhlIHVzZXItZGVmaW5lZCBjb21tYW5kcyB0aGF0IHN0YXJ0IHdpdGgge2NtZH0KCgkJCQkJCQkqOmNvbW1hbmQtdmVyYm9zZSoKV2hlbiAndmVyYm9zZScgaXMgbm9uLXplcm8sIGxpc3RpbmcgYSBjb21tYW5kIHdpbGwgYWxzbyBkaXNwbGF5IHdoZXJlIGl0IHdhcwpsYXN0IGRlZmluZWQuIEV4YW1wbGU6ID4KCiAgICA6dmVyYm9zZSBjb21tYW5kIFRPaHRtbAo8CU5hbWUJICAgIEFyZ3MgUmFuZ2UgQ29tcGxldGUgIERlZmluaXRpb24gfgoJVE9odG1sCSAgICAwCSAlCQkgOmNhbGwgQ29udmVydDJIVE1MKDxsaW5lMT4sIDxsaW5lMj4pIH4KCSAgICBMYXN0IHNldCBmcm9tIC91c3Ivc2hhcmUvdmltL3ZpbS03LjAvcGx1Z2luL3RvaHRtbC52aW0gfgoKU2VlIHw6dmVyYm9zZS1jbWR8IGZvciBtb3JlIGluZm9ybWF0aW9uLgoKCQkJCQkJCSpFMTc0KiAqRTE4MioKOmNvbVttYW5kXVshXSBbe2F0dHJ9Li4uXSB7Y21kfSB7cmVwfQoJCQlEZWZpbmUgYSB1c2VyIGNvbW1hbmQuICBUaGUgbmFtZSBvZiB0aGUgY29tbWFuZCBpcwoJCQl7Y21kfSBhbmQgaXRzIHJlcGxhY2VtZW50IHRleHQgaXMge3JlcH0uICBUaGUgY29tbWFuZCdzCgkJCWF0dHJpYnV0ZXMgKHNlZSBiZWxvdykgYXJlIHthdHRyfS4gIElmIHRoZSBjb21tYW5kCgkJCWFscmVhZHkgZXhpc3RzLCBhbiBlcnJvciBpcyByZXBvcnRlZCwgdW5sZXNzIGEgISBpcwoJCQlzcGVjaWZpZWQsIGluIHdoaWNoIGNhc2UgdGhlIGNvbW1hbmQgaXMgcmVkZWZpbmVkLgoKOmRlbGNbb21tYW5kXSB7Y21kfQkJCQkqOmRlbGMqICo6ZGVsY29tbWFuZCogKkUxODQqCgkJCURlbGV0ZSB0aGUgdXNlci1kZWZpbmVkIGNvbW1hbmQge2NtZH0uCgo6Y29tY1tsZWFyXQkJCQkJCSo6Y29tYyogKjpjb21jbGVhcioKCQkJRGVsZXRlIGFsbCB1c2VyLWRlZmluZWQgY29tbWFuZHMuCgpDb21tYW5kIGF0dHJpYnV0ZXMKClVzZXItZGVmaW5lZCBjb21tYW5kcyBhcmUgdHJlYXRlZCBieSBWaW0ganVzdCBsaWtlIGFueSBvdGhlciBleCBjb21tYW5kcy4gIFRoZXkKY2FuIGhhdmUgYXJndW1lbnRzLCBvciBoYXZlIGEgcmFuZ2Ugc3BlY2lmaWVkLiAgQXJndW1lbnRzIGFyZSBzdWJqZWN0IHRvCmNvbXBsZXRpb24gYXMgZmlsZW5hbWVzLCBidWZmZXJzLCBldGMuICBFeGFjdGx5IGhvdyB0aGlzIHdvcmtzIGRlcGVuZHMgdXBvbiB0aGUKY29tbWFuZCdzIGF0dHJpYnV0ZXMsIHdoaWNoIGFyZSBzcGVjaWZpZWQgd2hlbiB0aGUgY29tbWFuZCBpcyBkZWZpbmVkLgoKVGhlcmUgYXJlIGEgbnVtYmVyIG9mIGF0dHJpYnV0ZXMsIHNwbGl0IGludG8gZm91ciBjYXRlZ29yaWVzOiBhcmd1bWVudApoYW5kbGluZywgY29tcGxldGlvbiBiZWhhdmlvciwgcmFuZ2UgaGFuZGxpbmcsIGFuZCBzcGVjaWFsIGNhc2VzLiAgVGhlCmF0dHJpYnV0ZXMgYXJlIGRlc2NyaWJlZCBiZWxvdywgYnkgY2F0ZWdvcnkuCgpBcmd1bWVudCBoYW5kbGluZwkJCQkJKkUxNzUqICpFMTc2KgoKQnkgZGVmYXVsdCwgYSB1c2VyIGRlZmluZWQgY29tbWFuZCB3aWxsIHRha2Ugbm8gYXJndW1lbnRzIChhbmQgYW4gZXJyb3IgaXMKcmVwb3J0ZWQgaWYgYW55IGFyZSBzdXBwbGllZCkuICBIb3dldmVyLCBpdCBpcyBwb3NzaWJsZSB0byBzcGVjaWZ5IHRoYXQgdGhlCmNvbW1hbmQgY2FuIHRha2UgYXJndW1lbnRzLCB1c2luZyB0aGUgLW5hcmdzIGF0dHJpYnV0ZS4gIFZhbGlkIGNhc2VzIGFyZToKCgktbmFyZ3M9MCAgICBObyBhcmd1bWVudHMgYXJlIGFsbG93ZWQgKHRoZSBkZWZhdWx0KQoJLW5hcmdzPTEgICAgRXhhY3RseSBvbmUgYXJndW1lbnQgaXMgcmVxdWlyZWQKCS1uYXJncz0qICAgIEFueSBudW1iZXIgb2YgYXJndW1lbnRzIGFyZSBhbGxvd2VkICgwLCAxLCBvciBtYW55KQoJLW5hcmdzPT8gICAgMCBvciAxIGFyZ3VtZW50cyBhcmUgYWxsb3dlZAoJLW5hcmdzPSsgICAgQXJndW1lbnRzIG11c3QgYmUgc3VwcGxpZWQsIGJ1dCBhbnkgbnVtYmVyIGFyZSBhbGxvd2VkCgpBcmd1bWVudHMgYXJlIGNvbnNpZGVyZWQgdG8gYmUgc2VwYXJhdGVkIGJ5ICh1bmVzY2FwZWQpIHNwYWNlcyBvciBUYWJzIGluIHRoaXMKY29udGV4dC4KCk5vdGUgdGhhdCBhcmd1bWVudHMgYXJlIHVzZWQgYXMgdGV4dCwgbm90IGFzIGV4cHJlc3Npb25zLiAgU3BlY2lmaWNhbGx5LAoiczp2YXIiIHdpbGwgdXNlIHRoZSBzY3JpcHQtbG9jYWwgdmFyaWFibGUgaW4gdGhlIHNjcmlwdCB3aGVyZSB0aGUgY29tbWFuZCB3YXMKZGVmaW5lZCwgbm90IHdoZXJlIGl0IGlzIGludm9rZWQhICBFeGFtcGxlOgogICAgc2NyaXB0MS52aW06ID4KCTpsZXQgczplcnJvciA9ICJOb25lIgoJOmNvbW1hbmQgLW5hcmdzPTEgRXJyb3IgZWNob2VyciA8YXJncz4KPCAgIHNjcmlwdDIudmltOiA+Cgk6c291cmNlIHNjcmlwdDEudmltCgk6bGV0IHM6ZXJyb3IgPSAiV3JvbmchIgoJOkVycm9yIHM6ZXJyb3IKRXhlY3V0aW5nIHNjcmlwdDIudmltIHdpbGwgcmVzdWx0IGluICJOb25lIiB0byBiZSBlY2hvZWQuICBOb3Qgd2hhdCB5b3UKaW50ZW5kZWQhICBDYWxsaW5nIGEgZnVuY3Rpb24gbWF5IGJlIGFuIGFsdGVybmF0aXZlLgoKQ29tcGxldGlvbiBiZWhhdmlvcgkJCQkqOmNvbW1hbmQtY29tcGxldGlvbioKCQkJCQkJCSpFMTc5KiAqRTE4MCogKkUxODEqCkJ5IGRlZmF1bHQsIHRoZSBhcmd1bWVudHMgb2YgdXNlciBkZWZpbmVkIGNvbW1hbmRzIGRvIG5vdCB1bmRlcmdvIGNvbXBsZXRpb24uCkhvd2V2ZXIsIGJ5IHNwZWNpZnlpbmcgb25lIG9yIHRoZSBvdGhlciBvZiB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXMsIGFyZ3VtZW50CmNvbXBsZXRpb24gY2FuIGJlIGVuYWJsZWQ6CgoJLWNvbXBsZXRlPWF1Z3JvdXAJYXV0b2NtZCBncm91cHMKCS1jb21wbGV0ZT1idWZmZXIJYnVmZmVyIG5hbWVzCgktY29tcGxldGU9Y29tbWFuZAlFeCBjb21tYW5kIChhbmQgYXJndW1lbnRzKQoJLWNvbXBsZXRlPWRpcgkJZGlyZWN0b3J5IG5hbWVzCgktY29tcGxldGU9ZW52aXJvbm1lbnQJZW52aXJvbm1lbnQgdmFyaWFibGUgbmFtZXMKCS1jb21wbGV0ZT1ldmVudAkJYXV0b2NvbW1hbmQgZXZlbnRzCgktY29tcGxldGU9ZXhwcmVzc2lvbglWaW0gZXhwcmVzc2lvbgoJLWNvbXBsZXRlPWZpbGUJCWZpbGUgYW5kIGRpcmVjdG9yeSBuYW1lcwoJLWNvbXBsZXRlPXNoZWxsY21kCVNoZWxsIGNvbW1hbmQKCS1jb21wbGV0ZT1mdW5jdGlvbglmdW5jdGlvbiBuYW1lCgktY29tcGxldGU9aGVscAkJaGVscCBzdWJqZWN0cwoJLWNvbXBsZXRlPWhpZ2hsaWdodAloaWdobGlnaHQgZ3JvdXBzCgktY29tcGxldGU9bWFwcGluZwltYXBwaW5nIG5hbWUKCS1jb21wbGV0ZT1tZW51CQltZW51cwoJLWNvbXBsZXRlPW9wdGlvbglvcHRpb25zCgktY29tcGxldGU9dGFnCQl0YWdzCgktY29tcGxldGU9dGFnX2xpc3RmaWxlcwl0YWdzLCBmaWxlIG5hbWVzIGFyZSBzaG93biB3aGVuIENUUkwtRCBpcyBoaXQKCS1jb21wbGV0ZT12YXIJCXVzZXIgdmFyaWFibGVzCgktY29tcGxldGU9Y3VzdG9tLHtmdW5jfSBjdXN0b20gY29tcGxldGlvbiwgZGVmaW5lZCB2aWEge2Z1bmN9CgktY29tcGxldGU9Y3VzdG9tbGlzdCx7ZnVuY30gY3VzdG9tIGNvbXBsZXRpb24sIGRlZmluZWQgdmlhIHtmdW5jfQoKCkN1c3RvbSBjb21wbGV0aW9uCQkJKjpjb21tYW5kLWNvbXBsZXRpb24tY3VzdG9tKgoJCQkJCSo6Y29tbWFuZC1jb21wbGV0aW9uLWN1c3RvbWxpc3QqCgkJCQkJKkU0NjcqICpFNDY4KgpJdCBpcyBwb3NzaWJsZSB0byBkZWZpbmUgY3VzdG9taXplZCBjb21wbGV0aW9uIHNjaGVtZXMgdmlhIHRoZSAiY3VzdG9tLHtmdW5jfSIKb3IgdGhlICJjdXN0b21saXN0LHtmdW5jfSIgY29tcGxldGlvbiBhcmd1bWVudC4gIFRoZSB7ZnVuY30gcGFydCBzaG91bGQgYmUgYQpmdW5jdGlvbiB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvdG90eXBlID4KCgk6ZnVuY3Rpb24ge2Z1bmN9KEFyZ0xlYWQsIENtZExpbmUsIEN1cnNvclBvcykKClRoZSBmdW5jdGlvbiBuZWVkIG5vdCB1c2UgYWxsIHRoZXNlIGFyZ3VtZW50cy4gVGhlIGZ1bmN0aW9uIHNob3VsZCBwcm92aWRlIHRoZQpjb21wbGV0aW9uIGNhbmRpZGF0ZXMgYXMgdGhlIHJldHVybiB2YWx1ZS4KCkZvciB0aGUgImN1c3RvbSIgYXJndW1lbnQsIHRoZSBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIHRoZSBjb21wbGV0aW9uCmNhbmRpZGF0ZXMgb25lIHBlciBsaW5lIGluIGEgbmV3bGluZSBzZXBhcmF0ZWQgc3RyaW5nLgoKRm9yIHRoZSAiY3VzdG9tbGlzdCIgYXJndW1lbnQsIHRoZSBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIHRoZSBjb21wbGV0aW9uCmNhbmRpZGF0ZXMgYXMgYSBWaW0gTGlzdC4gIE5vbi1zdHJpbmcgaXRlbXMgaW4gdGhlIGxpc3QgYXJlIGlnbm9yZWQuCgpUaGUgZnVuY3Rpb24gYXJndW1lbnRzIGFyZToKCUFyZ0xlYWQJCXRoZSBsZWFkaW5nIHBvcnRpb24gb2YgdGhlIGFyZ3VtZW50IGN1cnJlbnRseSBiZWluZwoJCQljb21wbGV0ZWQgb24KCUNtZExpbmUJCXRoZSBlbnRpcmUgY29tbWFuZCBsaW5lCglDdXJzb3JQb3MJdGhlIGN1cnNvciBwb3NpdGlvbiBpbiBpdCAoYnl0ZSBpbmRleCkKVGhlIGZ1bmN0aW9uIG1heSB1c2UgdGhlc2UgZm9yIGRldGVybWluaW5nIGNvbnRleHQuICBGb3IgdGhlICJjdXN0b20iCmFyZ3VtZW50LCBpdCBpcyBub3QgbmVjZXNzYXJ5IHRvIGZpbHRlciBjYW5kaWRhdGVzIGFnYWluc3QgdGhlIChpbXBsaWNpdApwYXR0ZXJuIGluKSBBcmdMZWFkLiAgVmltIHdpbGwgZG8gZmlsdGVyIHRoZSBjYW5kaWRhdGVzIHdpdGggaXRzIHJlZ2V4cCBlbmdpbmUKYWZ0ZXIgZnVuY3Rpb24gcmV0dXJuLCBhbmQgdGhpcyBpcyBwcm9iYWJseSBtb3JlIGVmZmljaWVudCBpbiBtb3N0IGNhc2VzLiBGb3IKdGhlICJjdXN0b21saXN0IiBhcmd1bWVudCwgVmltIHdpbGwgbm90IGZpbHRlciB0aGUgcmV0dXJuZWQgY29tcGxldGlvbgpjYW5kaWRhdGVzIGFuZCB0aGUgdXNlciBzdXBwbGllZCBmdW5jdGlvbiBzaG91bGQgZmlsdGVyIHRoZSBjYW5kaWRhdGVzLgoKVGhlIGZvbGxvd2luZyBleGFtcGxlIGxpc3RzIHVzZXIgbmFtZXMgdG8gYSBGaW5nZXIgY29tbWFuZCA+CiAgICA6Y29tIC1jb21wbGV0ZT1jdXN0b20sTGlzdFVzZXJzIC1uYXJncz0xIEZpbmdlciAhZmluZ2VyIDxhcmdzPgogICAgOmZ1biBMaXN0VXNlcnMoQSxMLFApCiAgICA6ICAgIHJldHVybiBzeXN0ZW0oImN1dCAtZDogLWYxIC9ldGMvcGFzc3dkIikKICAgIDplbmRmdW4KClRoZSBmb2xsb3dpbmcgZXhhbXBsZSBjb21wbGV0ZXMgZmlsZW5hbWVzIGZyb20gdGhlIGRpcmVjdG9yaWVzIHNwZWNpZmllZCBpbgp0aGUgJ3BhdGgnIG9wdGlvbjogPgogICAgOmNvbSAtbmFyZ3M9MSAtYmFuZyAtY29tcGxldGU9Y3VzdG9tbGlzdCxFZGl0RmlsZUNvbXBsZXRlCgkJCVwgRWRpdEZpbGUgZWRpdDxiYW5nPiA8YXJncz4KICAgIDpmdW4gRWRpdEZpbGVDb21wbGV0ZShBLEwsUCkKICAgIDogICAgcmV0dXJuIHNwbGl0KGdsb2JwYXRoKCZwYXRoLCBhOkFyZ0xlYWQpLCAiXG4iKQogICAgOmVuZGZ1bgo8CgpSYW5nZSBoYW5kbGluZwkJCQkJCSpFMTc3KiAqRTE3OCoKCkJ5IGRlZmF1bHQsIHVzZXItZGVmaW5lZCBjb21tYW5kcyBkbyBub3QgYWNjZXB0IGEgbGluZSBudW1iZXIgcmFuZ2UuICBIb3dldmVyLAppdCBpcyBwb3NzaWJsZSB0byBzcGVjaWZ5IHRoYXQgdGhlIGNvbW1hbmQgZG9lcyB0YWtlIGEgcmFuZ2UgKHRoZSAtcmFuZ2UKYXR0cmlidXRlKSwgb3IgdGhhdCBpdCB0YWtlcyBhbiBhcmJpdHJhcnkgY291bnQgdmFsdWUsIGVpdGhlciBpbiB0aGUgbGluZQpudW1iZXIgcG9zaXRpb24gKC1yYW5nZT1OLCBsaWtlIHRoZSB8OnNwbGl0fCBjb21tYW5kKSBvciBhcyBhICJjb3VudCIKYXJndW1lbnQgKC1jb3VudD1OLCBsaWtlIHRoZSB8Ok5leHR8IGNvbW1hbmQpLiAgUG9zc2libGUgYXR0cmlidXRlcyBhcmU6CgoJLXJhbmdlCSAgICBSYW5nZSBhbGxvd2VkLCBkZWZhdWx0IGlzIGN1cnJlbnQgbGluZQoJLXJhbmdlPSUgICAgUmFuZ2UgYWxsb3dlZCwgZGVmYXVsdCBpcyB3aG9sZSBmaWxlICgxLCQpCgktcmFuZ2U9TiAgICBBIGNvdW50IChkZWZhdWx0IE4pIHdoaWNoIGlzIHNwZWNpZmllZCBpbiB0aGUgbGluZQoJCSAgICBudW1iZXIgcG9zaXRpb24gKGxpa2UgfDpzcGxpdHwpCgktY291bnQ9TiAgICBBIGNvdW50IChkZWZhdWx0IE4pIHdoaWNoIGlzIHNwZWNpZmllZCBlaXRoZXIgaW4gdGhlIGxpbmUKCQkgICAgbnVtYmVyIHBvc2l0aW9uLCBvciBhcyBhbiBpbml0aWFsIGFyZ3VtZW50IChsaWtlIHw6TmV4dHwpLgoJCSAgICBTcGVjaWZ5aW5nIC1jb3VudCAod2l0aG91dCBhIGRlZmF1bHQpIGFjdHMgbGlrZSAtY291bnQ9MAoKTm90ZSB0aGF0IC1yYW5nZT1OIGFuZCAtY291bnQ9TiBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIC0gb25seSBvbmUgc2hvdWxkIGJlCnNwZWNpZmllZC4KClNwZWNpYWwgY2FzZXMKClRoZXJlIGFyZSBzb21lIHNwZWNpYWwgY2FzZXMgYXMgd2VsbDoKCgktYmFuZwkgICAgVGhlIGNvbW1hbmQgY2FuIHRha2UgYSAhIG1vZGlmaWVyIChsaWtlIDpxIG9yIDp3KQoJLWJhcgkgICAgVGhlIGNvbW1hbmQgY2FuIGJlIGZvbGxvd2VkIGJ5IGEgInwiIGFuZCBhbm90aGVyIGNvbW1hbmQuCgkJICAgIEEgInwiIGluc2lkZSB0aGUgY29tbWFuZCBhcmd1bWVudCBpcyBub3QgYWxsb3dlZCB0aGVuLgoJCSAgICBBbHNvIGNoZWNrcyBmb3IgYSAiIHRvIHN0YXJ0IGEgY29tbWVudC4KCS1yZWdpc3RlciAgIFRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgY29tbWFuZCBjYW4gYmUgYW4gb3B0aW9uYWwKCQkgICAgcmVnaXN0ZXIgbmFtZSAobGlrZSA6ZGVsLCA6cHV0LCA6eWFuaykuCgktYnVmZmVyCSAgICBUaGUgY29tbWFuZCB3aWxsIG9ubHkgYmUgYXZhaWxhYmxlIGluIHRoZSBjdXJyZW50IGJ1ZmZlci4KCkluIHRoZSBjYXNlcyBvZiB0aGUgLWNvdW50IGFuZCAtcmVnaXN0ZXIgYXR0cmlidXRlcywgaWYgdGhlIG9wdGlvbmFsIGFyZ3VtZW50CmlzIHN1cHBsaWVkLCBpdCBpcyByZW1vdmVkIGZyb20gdGhlIGFyZ3VtZW50IGxpc3QgYW5kIGlzIGF2YWlsYWJsZSB0byB0aGUKcmVwbGFjZW1lbnQgdGV4dCBzZXBhcmF0ZWx5LgoKUmVwbGFjZW1lbnQgdGV4dAoKVGhlIHJlcGxhY2VtZW50IHRleHQgZm9yIGEgdXNlciBkZWZpbmVkIGNvbW1hbmQgaXMgc2Nhbm5lZCBmb3Igc3BlY2lhbCBlc2NhcGUKc2VxdWVuY2VzLCB1c2luZyA8Li4uPiBub3RhdGlvbi4gIEVzY2FwZSBzZXF1ZW5jZXMgYXJlIHJlcGxhY2VkIHdpdGggdmFsdWVzCmZyb20gdGhlIGVudGVyZWQgY29tbWFuZCBsaW5lLCBhbmQgYWxsIG90aGVyIHRleHQgaXMgY29waWVkIHVuY2hhbmdlZC4gIFRoZQpyZXN1bHRpbmcgc3RyaW5nIGlzIGV4ZWN1dGVkIGFzIGFuIEV4IGNvbW1hbmQuICBUbyBhdm9pZCB0aGUgcmVwbGFjZW1lbnQgdXNlCjxsdD4gaW4gcGxhZGUgb2YgdGhlIGluaXRpYWwgPC4gIFRodXMgdG8gaW5jbHVkZSAiPGJhbmc+IiBsaXRlcmFsbHkgdXNlCiI8bHQ+YmFuZz4iLgoKVGhlIHZhbGlkIGVzY2FwZSBzZXF1ZW5jZXMgYXJlCgoJCQkJCQkqPGxpbmUxPioKCTxsaW5lMT4JVGhlIHN0YXJ0aW5nIGxpbmUgb2YgdGhlIGNvbW1hbmQgcmFuZ2UuCgkJCQkJCSo8bGluZTI+KgoJPGxpbmUyPglUaGUgZmluYWwgbGluZSBvZiB0aGUgY29tbWFuZCByYW5nZS4KCQkJCQkJKjxjb3VudD4qCgk8Y291bnQ+CUFueSBjb3VudCBzdXBwbGllZCAoYXMgZGVzY3JpYmVkIGZvciB0aGUgJy1yYW5nZScKCQlhbmQgJy1jb3VudCcgYXR0cmlidXRlcykuCgkJCQkJCSo8YmFuZz4qCgk8YmFuZz4JKFNlZSB0aGUgJy1iYW5nJyBhdHRyaWJ1dGUpIEV4cGFuZHMgdG8gYSAhIGlmIHRoZQoJCWNvbW1hbmQgd2FzIGV4ZWN1dGVkIHdpdGggYSAhIG1vZGlmaWVyLCBvdGhlcndpc2UKCQlleHBhbmRzIHRvIG5vdGhpbmcuCgkJCQkJCSo8cmVnPiogKjxyZWdpc3Rlcj4qCgk8cmVnPgkoU2VlIHRoZSAnLXJlZ2lzdGVyJyBhdHRyaWJ1dGUpIFRoZSBvcHRpb25hbCByZWdpc3RlciwKCQlpZiBzcGVjaWZpZWQuICBPdGhlcndpc2UsIGV4cGFuZHMgdG8gbm90aGluZy4gIDxyZWdpc3Rlcj4KCQlpcyBhIHN5bm9ueW0gZm9yIHRoaXMuCgkJCQkJCSo8YXJncz4qCgk8YXJncz4JVGhlIGNvbW1hbmQgYXJndW1lbnRzLCBleGFjdGx5IGFzIHN1cHBsaWVkIChidXQgYXMKCQlub3RlZCBhYm92ZSwgYW55IGNvdW50IG9yIHJlZ2lzdGVyIGNhbiBjb25zdW1lIHNvbWUKCQlvZiB0aGUgYXJndW1lbnRzLCB3aGljaCBhcmUgdGhlbiBub3QgcGFydCBvZiA8YXJncz4pLgoJPGx0PglBIHNpbmdsZSAnPCcgKExlc3MtVGhhbikgY2hhcmFjdGVyLiAgVGhpcyBpcyBuZWVkZWQgaWYgeW91CgkJd2FudCB0byBnZXQgYSBsaXRlcmFsIGNvcHkgb2Ygb25lIG9mIHRoZXNlIGVzY2FwZSBzZXF1ZW5jZXMKCQlpbnRvIHRoZSBleHBhbnNpb24gLSBmb3IgZXhhbXBsZSwgdG8gZ2V0IDxiYW5nPiwgdXNlCgkJPGx0PmJhbmc+LgoKCQkJCQkJCSo8cS1hcmdzPioKSWYgdGhlIGZpcnN0IHR3byBjaGFyYWN0ZXJzIG9mIGFuIGVzY2FwZSBzZXF1ZW5jZSBhcmUgInEtIiAoZm9yIGV4YW1wbGUsCjxxLWFyZ3M+KSB0aGVuIHRoZSB2YWx1ZSBpcyBxdW90ZWQgaW4gc3VjaCBhIHdheSBhcyB0byBtYWtlIGl0IGEgdmFsaWQgdmFsdWUKZm9yIHVzZSBpbiBhbiBleHByZXNzaW9uLiAgVGhpcyB1c2VzIHRoZSBhcmd1bWVudCBhcyBvbmUgc2luZ2xlIHZhbHVlLgpXaGVuIHRoZXJlIGlzIG5vIGFyZ3VtZW50IDxxLWFyZ3M+IGlzIGFuIGVtcHR5IHN0cmluZy4KClRvIGFsbG93IGNvbW1hbmRzIHRvIHBhc3MgdGhlaXIgYXJndW1lbnRzIG9uIHRvIGEgdXNlci1kZWZpbmVkIGZ1bmN0aW9uLCB0aGVyZQppcyBhIHNwZWNpYWwgZm9ybSA8Zi1hcmdzPiAoImZ1bmN0aW9uIGFyZ3MiKS4gIFRoaXMgc3BsaXRzIHRoZSBjb21tYW5kCmFyZ3VtZW50cyBhdCBzcGFjZXMgYW5kIFRhYnMsIHF1b3RlcyBlYWNoIGFyZ3VtZW50IGluZGl2aWR1YWxseSwgYW5kIHRoZQo8Zi1hcmdzPiBzZXF1ZW5jZSBpcyByZXBsYWNlZCBieSB0aGUgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgcXVvdGVkIGFyZ3VtZW50cy4KU2VlIHRoZSBNeWNtZCBleGFtcGxlIGJlbG93LiAgSWYgbm8gYXJndW1lbnRzIGFyZSBnaXZlbiA8Zi1hcmdzPiBpcyByZW1vdmVkLgoKRXhhbXBsZXMgPgoKICAgIiBEZWxldGUgZXZlcnl0aGluZyBhZnRlciBoZXJlIHRvIHRoZSBlbmQKICAgOmNvbSBEZGVsICssJGQKCiAgICIgUmVuYW1lIHRoZSBjdXJyZW50IGJ1ZmZlcgogICA6Y29tIC1uYXJncz0xIC1iYW5nIC1jb21wbGV0ZT1maWxlIFJlbiBmIDxhcmdzPnx3PGJhbmc+CgogICAiIFJlcGxhY2UgYSByYW5nZSB3aXRoIHRoZSBjb250ZW50cyBvZiBhIGZpbGUKICAgIiAoRW50ZXIgdGhpcyBhbGwgYXMgb25lIGxpbmUpCiAgIDpjb20gLXJhbmdlIC1uYXJncz0xIC1jb21wbGV0ZT1maWxlCgkgUmVwbGFjZSA8bGluZTE+LXB1X3w8bGluZTE+LDxsaW5lMj5kfHIgPGFyZ3M+fDxsaW5lMT5kCgogICAiIENvdW50IHRoZSBudW1iZXIgb2YgbGluZXMgaW4gdGhlIHJhbmdlCiAgIDpjb20hIC1yYW5nZSAtbmFyZ3M9MCBMaW5lcyAgZWNobyA8bGluZTI+IC0gPGxpbmUxPiArIDEgImxpbmVzIgoKICAgIiBDYWxsIGEgdXNlciBmdW5jdGlvbiAoZXhhbXBsZSBvZiA8Zi1hcmdzPikKICAgOmNvbSAtbmFyZ3M9KiBNeWNtZCBjYWxsIE15ZnVuYyg8Zi1hcmdzPikKCldoZW4gZXhlY3V0ZWQgYXM6ID4KCTpNeWNtZCBhcmcxIGFyZzIKVGhpcyB3aWxsIGludm9rZTogPgoJOmNhbGwgTXlmdW5jKCJhcmcxIiwiYXJnMiIpCgogICA6IiBBIG1vcmUgc3Vic3RhbnRpYWwgZXhhbXBsZQogICA6ZnVuY3Rpb24gQWxsYXJncyhjb21tYW5kKQogICA6CWxldCBpID0gMAogICA6CXdoaWxlIGkgPCBhcmdjKCkKICAgOgkgICBpZiBmaWxlcmVhZGFibGUoYXJndihpKSkKICAgOgkgICAgZXhlY3V0ZSAiZSAiIC4gYXJndihpKQogICA6CSAgICAgZXhlY3V0ZSBhOmNvbW1hbmQKICAgOiAgICAgIGVuZGlmCiAgIDogICAgICBsZXQgaSA9IGkgKyAxCiAgIDogICBlbmR3aGlsZQogICA6ZW5kZnVuY3Rpb24KICAgOmNvbW1hbmQgLW5hcmdzPSsgLWNvbXBsZXRlPWNvbW1hbmQgQWxsYXJncyBjYWxsIEFsbGFyZ3MoPHEtYXJncz4pCgpUaGUgY29tbWFuZCBBbGxhcmdzIHRha2VzIGFueSBWaW0gY29tbWFuZChzKSBhcyBhcmd1bWVudCBhbmQgZXhlY3V0ZXMgaXQgb24gYWxsCmZpbGVzIGluIHRoZSBhcmd1bWVudCBsaXN0LiAgVXNhZ2UgZXhhbXBsZSAobm90ZSB1c2Ugb2YgdGhlICJlIiBmbGFnIHRvIGlnbm9yZQplcnJvcnMgYW5kIHRoZSAidXBkYXRlIiBjb21tYW5kIHRvIHdyaXRlIG1vZGlmaWVkIGJ1ZmZlcnMpOiA+Cgk6QWxsYXJncyAlcy9mb28vYmFyL2dlfHVwZGF0ZQpUaGlzIHdpbGwgaW52b2tlOiA+Cgk6Y2FsbCBBbGxhcmdzKCIlcy9mb28vYmFyL2dlfHVwZGF0ZSIpCjwKV2hlbiBkZWZpbmluZyBhbiB1c2VyIGNvbW1hbmQgaW4gYSBzY3JpcHQsIGl0IHdpbGwgYmUgYWJsZSB0byBjYWxsIGZ1bmN0aW9ucwpsb2NhbCB0byB0aGUgc2NyaXB0IGFuZCB1c2UgbWFwcGluZ3MgbG9jYWwgdG8gdGhlIHNjcmlwdC4gIFdoZW4gdGhlIHVzZXIKaW52b2tlcyB0aGUgdXNlciBjb21tYW5kLCBpdCB3aWxsIHJ1biBpbiB0aGUgY29udGV4dCBvZiB0aGUgc2NyaXB0IGl0IHdhcwpkZWZpbmVkIGluLiAgVGhpcyBtYXR0ZXJzIGlmIHw8U0lEPnwgaXMgdXNlZCBpbiBhIGNvbW1hbmQuCgogdmltOnR3PTc4OnRzPTg6ZnQ9aGVscDpub3JsOgo=