KiB4LWZvcndhcmRlZC1mb3IKKiBpbXBs6W1lbnRlciBsJ29wdGlvbiAibG9nIGdsb2JhbCIgYXUgbml2ZWF1IHByb3h5IHBvdXIgdXRpbGlzZXIgbGVzIGxvZ3MKICBnbG9iYXV4LgoqIG1hdGNoaW5nIGNhc2UtaW5zZW5zaXRpdmUKKiBpbXBs6W1lbnRlciBvdXRnb2luZyBhZGRyCiogbG9ndWVyIHRfY254LCB0X2RhdGEsIHRfdG90YWwKKyBmYWN0b3Jpc2VyIGxhIGZvbmN0aW9uIGRlIGxvZyAoc2VuZF9sb2cgPSBzZW5kX3N5c2xvZyt3YXJuaW5nK2FsZXJ0KQorIGTpc2FjdGl2YXRpb24gZHUga2VlcC1hbGl2ZSAoc3VwcHJlc3Npb24gZGVzIF5Db25uZWN0aW9uOiBldCBham91dCBkZXMgQ29ubmVjdGlvbjogY2xvc2UpCiAgLT4gNCBsaWduZXMgKDIgZGVsLCAyIGFkZCkgc3VmZmlzZW50LgorIG5lIHBhcyBsb2d1ZXIgY2VydGFpbmVzIGFkcmVzc2VzIElQIHNvdXJjZXMKICAtPiBwb3VyIGxlcyBoZWFsdGgtY2hlY2tzIHVuaXF1ZW1lbnQgLT4gcGFzIGRlIGxvZyBwb3VyIGxlcyByZXF16nRlcwogICAgIHZpZGVzIChvcHRpb24gZG9udGxvZ251bGwpCi0gbWVzdXJlciBsZSB0cHMgY29uc29tbekgZW50cmUgZGV1eCBzZWxlY3QsIGV0IGZvdXJuaXIgbGEgY29uc28gQ1BVIDoKICAlY3B1ID0gMTAwICogKHRwcmVzZWxlY3QobisxKS10cG9zdHNlbGVjdChuKSkgLyAodHByZXNlbGVjdChuKzEpLXRwcmVzZWxlY3QobikpCiogaW1wbOltZW50ZXIgbGltaXRhdGlvbiBmZCBkYW5zIGxhIGNvbmYgOiBzZXRybGltaXQoUkxJTUlUX05PRklMRSwgLi4uKQotIGltcGzpbWVudGVyIGNvcmUvbm8tY29yZSBkYW5zIGxhIGNvbmYgOiBzZXRybGltaXQoUkxJTUlUX0NPUkUsIC4uLikKLSBvcHRpbWlzZXIgbGVzIHJlZ2V4IHBvdXIgYWNj6WzpcmVyIGxlcyBtYXRjaGVzIDoKICAtIGNvbXB0ZXIgbGVzIG1hdGNoZXMKICAtIHNpIG1hdGNoKG4pICYgKFtuXS5jcHQgPiBbbi0xXS5jcHQpICYgKFtuXS5hY3Rpb24gPT0gW24tMV0uYWN0aW9uKSwgc3dhcChuLG4tMSkKICAtIHLpZ3VsaehyZW1lbnQsIGRpdmlzZXIgdG91cyBsZXMgY29tcHRldXJzIChsb3JzIGQndW4gZOlwYXNzZW1lbnQgcGFyIGV4ZW1wbGUpCi0gZmlsdHJhZ2Ugc3VyIGwnYWRyZXNzZSBJUCBzb3VyY2UsIGV0IHN0b2NrZXIgbGUgcG9pbnRldXIgc3VyIGxhIGRlcm5p6HJlIHJlZ2V4CiAgbWF0Y2jpZSBkYW5zIGxhICJzZXNzaW9uIiBwb3VyIGFjY+ls6XJlciBsZXMgcmVnZXguCi0gZ2VzdGlvbiBrZWVwLWFsaXZlCgorIGhhbmRsZSBwYXJhbWV0cmFibGUgSFRUUCBoZWFsdGgtY2hlY2tzIHJlcGxpZXMKLSBkaWZmZXJlbnRpYXRlIGh0dHAgaGVhZGVycyBhbmQgaHR0cCB1cmlzCi0gc3VwcG9ydCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgaW4gY29uZmlnIGZpbGUKLSBzdXBwb3J0IGtlZXAtYWxpdmUKLSBzdXBwb3J0IFNTTAoKPT09PT09PT09PT09PT09PT09PT09IGRlbWFuZGVzID09PT09PT09PT09PT09PT09PT09PT09PT09Cm9rPiAxKSDpY291dGUgc3VyIHVuZSBwbGFnZSBkZSBwb3J0cyA6Cm9rPiAgIGxpc3RlbiBYWFggMS4yLjMuNDoyMTAwMC0yMTA2MApvaz4gCm9rPiAyKSDpY291dGVzIG11bHRpcGxlcyA6Cm9rPiAgIGxpc3RlbiBYWFggMS4yLjMuNDoyMTAwMApvaz4gICBiaW5kIDIuMy40LjU6MjEwMDEKb2s+ICAgYmluZCAyLjMuNC41OjIxMDAwLTIxMDYwCm9rPiAKb2s+ID0+IG9uIGVuIGFycml2ZSDgIGNlY2kgOgpvaz4gCm9rPiBsaXN0ZW4gWFhYIFsgYWRkcmVzczpwb3J0IF0Kb2s+ICAgIGJpbmQgYWRkcjpwbGFnZS1wb3J0WyxbYWRkcjpdcGxhZ2UtcG9ydF0qCm9rPiAgICBiaW5kIC4uLgpvaz4gICAgLi4uCm9rPiAKb2s+ICAgID0+IHByb3h5LT5saXN0ZW5fZmQgZXQgcHJveHktPmxpc3Rlbl9hZGRyIGRvaXZlbnQg6nRyZQpvaz4gCSAgbWlzIGRhbnMgZGVzIGxpc3Rlcwpvaz4gICAgPT4gT0sgcG91ciBsaXN0ZW4sIGltcGzpbWVudGVyIGxlIEJJTkQuCm9rPiAKb2s+IDMpIHJlY29ubmV4aW9uIHN1ciBsZSBt6m1lIHBvcnQgc3VyIGxlIHNlcnZldXIgOgpvaz4gCm9rPiAgICBzZXJ2ZXIgWFhYIDEuMi4zLjRbOnBvcnRdCm9rPiAgICBzaSA8cG9ydD4gbidlc3QgcGFzIHNw6WNpZmnpLCBvbiB1dGlsaXNlIGxlIG3qbWUgcG9ydCBxdWUgY2VsdWkgcXVpIGEgcmXndQpvaz4gICAgbGEgY29ubmV4aW9uLiBEYW5zIGNlIGNhcywgaWwgZmF1dCBwb3V2b2lyIGZvcmNlciBsZSBwb3J0IGR1IGhlYWx0aC1jaGVjawpvaz4gICAgcGFyIHVuIG5vdXZlYXUgcGFyYW1ldHJlICJwb3J0Ii4Kb2s+IApvaz4gPT4g52EgcGVybWV0IGxlcyBmb3J3YXJkaW5ncyBkZSBwbGFnZXMgOgpvaz4gCm9rPiBsaXN0ZW4gWFhYCm9rPiAgICBiaW5kIDEuMi4zLjQ6MTAwMDAtMTEwMDAKb2s+ICAgIHNlcnZlciAxLjIuMy41Cm9rPiAKNCkgcGFyYW3odHJlcyBwYXIgZOlmYXV0IDoKICAgY3LpZXIgdW5lIHNlY3Rpb24gImRlZmF1bHRzIiBxdWkgcHLpY2lzZSBsZXMgcGFyYW3odHJlcyBwYXIgZOlmYXV0IHBvdXIgbGVzCiAgIHNlY3Rpb25zIHN1aXZhbnRlcywgY29uY2VybmFudCBsZXMgcGFyYW3odHJlcyBzdWl2YW50cyA6CiAgICAgb2stIGxlcyBsb2dzCiAgICAgb2stIGxlcyBtb2RlcyAodGNwL2h0dHApCiAgICAgb2stIGxlIGJhbGFuY2luZyAocm91bmQtcm9iaW4vc291cmNlKQogICAgIG9rLSBsZXMgdGltZS1vdXRzCiAgICAgb2stIG1heGNvbm4KICAgICBvay0gcmVkaXNwCiAgICAgb2stIGxlcyBvcHRpb25zCiAgICAgb2stIGxlIHJldHJ5CiAgICAgb2stIGxlcyBjaGVja3MKICAgICBvay0gbGVzIGNvb2tpZXMvY2FwdHVyZXMKICAgICAgIC0gbGVzIG9wdGlvbnMgZGVzIHNlcnZldXJzID8KICAgICAgIC0gbGVzIGZpbHRyZXMgZXQgcmVnZXggPwoKKiAgaW1wbOltZW50ZXIgImJhbGFuY2Ugc291cmNlIiBwb3VyIGZhaXJlIHVuIGhhc2ggc3VyIGxhIHNvdXJjZS4KICAgcGVybWV0dHJlIGRlIHNw6WNpZmllciB1biBtYXNxdWUgc3VyIGxlcXVlbCBzJ2FwcGxpcXVlIGxlIGhhY2hhZ2UsCiAgIGFpbnNpIHF1J3VuZSBvcHRpb24gcG91ciBoYWNoZXIgZW4gZm9uY3Rpb24gZGUgbCdhZHJlc3NlIGRhbnMgbGUKICAgY2hhbXAgIngtZm9yd2FyZGVkLWZvciIuIFByb2Js6G1lIHBvdXIgbGUgc3VwcG9ydCBkZXMgcGFubmVzOiBjZQogICB0eXBlIGRlIGhhc2ggZXN0IHV0aWxlIGzgIG/5IGxhIHBlcnNpc3RlbmNlIHBhciBjb29raWUgbmUgcGV1dCBwYXMKICAgcydhcHBsaXF1ZXIsIGRvbmMgY29tbWVudCBmYWlyZSBwb3VyIGFzc3VyZXIgdW4gbWF4aW11bSBkZSBwZXJzaXN0ZW5jZQogICBlbiBjYXMgZGUgcGFubmUgPwoKNikgcG9zc2liaWxpdOkgZCd1biBwcm9jZXNzIHPpcGFy6SBwYXIgbGlzdGVuIDoKICAgbGlzdGVuIFhYWAogICAgICBmb3JrIFsgZ3JvdXBfaWQgXQoKICAgbGUgZmFpdCBkZSBzcOljaWZpZXIgZ3JvdXBfaWQgZmVyYSBxdWUgdG91dGVzIGxlcyBpbnN0YW5jZXMgdXRpbGlzYW50IGxlCiAgIG3qbWUgaWRlbnRpZmlhbnQgZGUgZ3JvdXBlIHNlcm9udCBn6XLpZXMgcGFyIHVuIG3qbWUgcHJvY2Vzc3VzLgoKICAgLT4gcGx1cyBzb3VwbGUgZXQgcGx1cyBjb21wculoZW5zaWJsZSBkZSBmYWlyZSBkZXMgc2VjdGlvbnMgcGFyIHByb2Nlc3N1cywKICAgICAgY2UgcXVpIHLpc291ZCDpZ2FsZW1lbnQgbGUgY2FzIGNpLWRlc3NvdXMuIEV4OgogICBwcm9jZXNzX2dyb3VwIFgKICAgICAgbmJwcm9jIFgKICAgICAgdWlkIFgKICAgICAgY2hyb290IFgKICAgICAgbGlzdGVuIC4uLgoKNykgZ+lyZXIgdW4gY2hyb290L3VpZC9naWQgZGlmZulyZW50cyBwYXIgcHJvY2VzcyA6CiAgIGxpc3RlbiBYWFgKICAgICAgY2hyb290IC90cnVjCiAgICAgIHVpZCAxMjMKICAgICAgZ2lkIDQ1NgoKOCkgYmVhdWNvdXAgZGUgcGFyYW3odHJlcyBwb3VycmFpZW50IOp0cmUgc3DpY2lmaXF1ZXMgYXV4IHNlcnZldXJzIGV0IG5vbgogICBhdXggaW5zdGFuY2VzLiBFeGVtcGxlcyA6CiAgICogYWRyZXNzZSBJUCBzb3VyY2UgcG91ciBhdHRlaW5kcmUgbGUgc2VydmV1cgogICAtIG3pdGhvZGUgZGUgaGVhbHRoLWNoZWNrIChwcm90bywgLi4uKQogICAqIG3pdGhvZGUgZGUgaGVhbHRoLWNoZWNrIChwb3J0KQogICAtIHBvaWRzCiAgIC0gYWxlcnRlIGVuIGNhcyBkZSBkaXNwYXJpdGlvbgogICAtIGxlIG5vbWJyZSBtYXggZGUgc2Vzc2lvbnMg4CBsdWkgZW52b3llcgoKb2s+IDkpIGFqb3V0ZXIgZGVzIHBhcmFt6HRyZXMgb3B0aW9ubmVscyDgIGwnb3B0aW9uICJodHRwY2hrIiBwZXJtZXR0YW50Cm9rPiAgICBkZSBmb3JjZXIgbGEgbel0aG9kZSwgbGEgdmVyc2lvbiBIVFRQIGV0IGRlcyBoZWFkZXJzLgpvaz4gICAgZXg6IG9wdGlvbiBodHRwY2hrICAgICAgICAtPiBPUFRJT05TIC8gSFRUUC8xLjAKb2s+IAkgICBvcHRpb24gaHR0cGNoayAvdGVzdCAgLT4gT1BUSU9OUyAvdGVzdCBIVFRQLzEuMApvaz4gCSAgIG9wdGlvbiBodHRwY2hrIEhFQUQgLyBIVFRQLzEuMFxuSG9zdDpcIHd3dyAgIC0+IHRlbCBxdWVsCgpUb2RvIGZvciAxLjEKPT09PT09PT09PT09CiogIm5vIG1vcmUgc2VydmVyIiBhbGVydAoqIGNvbmZpZyBjaGVjawotIGFudGktZmxhcHBpbmcKClRvZG8gZm9yIDEuMgo9PT09PT09PT09PT0KLSBkaXJlY3QgPHNlcnZlcj4gPHJlZ2V4PiA8bWF0Y2g+Ci0gbmV3IGNvbmZpZyBzeW50YXggYWxsb3dpbmcgYnJhY2VzIHRvIGJlIGFibGUgdG8gc2hvcnRlbiBsaW5lcwotIGluc2VydC9sZWFybi9jaGVjay9sb2cgdW5pcXVlIHJlcXVlc3QgSUQsIGFuZCBhZGQgdGhlIGFiaWxpdHkKICB0byBibG9jayBiYWQgcmVzcG9uc2VzLgotIElQdjYgOgoqIGxpc3RlbiBbaXA0LmlwNC5pcDQuaXA0XTpwb3J0Wy1wb3J0XQoqIGxpc3RlbiBbaXA2OjouLi5pcDZdL3BvcnRbLXBvcnRdCi0gc2VydmVyIHh4eCBpcHY0IHwgaXB2NDogfCBpcHY0OnBvcnRbLXBvcnRdIHwgaXB2Ni8gfCBpcHY2L3BvcnRbLXBvcnRdCiogYXBwY29va2llCiogd2VpZ2h0ZWQgcm91bmQgcm9iaW4KLSBvcHRpb24gdG8gc2h1dGRvd24obGlzdGVuX3NvY2spIHdoZW4gbWF4IGNvbm5lY3Rpb25zIHJlYWNoZWQKKiBlcG9sbAotIHJlcGxhY2UgdGhlIGV2ZW50IHNjaGVkdWxlciB3aXRoIGFuIE8obG9nKE4pKSBvbmUuIFRoZSB0aW1lciBxdWV1ZSB3aWxsCiAgbmVlZCBhIHRyZWUgd2l0aCBhIGtub3duIGVuZCAodG8gc3BlZWQgdXAgcXVldWVpbmcgb2YgbGF0ZXN0IGV2ZW50cyksIGFuZAogIG5vIGVudHJ5IGZvciBldGVybml0eS4KLSByZWZpbmUgbWVtb3J5IG1hbmFnZW1lbnQgc28gdGhhdCB0aGUgcmVxdWVzdCBidWZmZXIgaXMgb25seSBhbGxvY2F0ZWQgaW4KICBjbGlfcmVhZCgpIGFuZCByZXNwb25zZSBidWZmZXIgZHVyaW5nIHNydl9yZWFkKCkuIFRoaXMgd291bGQgcHJvdGVjdCBhZ2FpbnN0CiAgYXR0YWNrcyB3aXRoIHRob3VzYW5kcyBjb25uZWN0aW9ucyA6IDIwMDAwIGNvbm5lY3Rpb25zIGNvbnN1bWUgMzQwIE1CIFJTUyBhbmQKICAxLjMgR0IgVlNaIG9uIExpbnV4LiBEYXRhIHNob3VsZCBiZSBpbiBhIHNlcGFyYXRlIGJ1ZmZlciB0byBwcmV2ZW50IGFueQogIGFjdGl2aXR5IG9uIHRoZSBidWZmZXIncyBwb2ludGVycyBmcm9tIHRvdWNoaW5nIHRoZSBidWZmZXIgcGFnZSBpdHNlbGYuCi0gbWFrZSBidWZmZXIgc2l6ZSBjb25maWd1cmFibGUgaW4gZ2xvYmFsIG9wdGlvbnMKKiBtb25pdG9yIG51bWJlciBvZiBzaW11bHRhbmVvdXMgc2Vzc2lvbnMgaW4gbG9ncyAocGVyIHNydi9pbnN0L2dsb2JhbCkKKiBpZ25vcmUgbGVhZGluZyBlbXB0eSBsaW5lcyBpbiBIVFRQIHJlcXVlc3RzCisgbGltaXQgdGhlIHBlci1zZXJ2ZXIgbnVtYmVyIG9mIHNlc3Npb25zIGFuZCBxdWV1ZSBpbmNvbWluZyBjb25uZWN0aW9ucwogID0+IHN0aWxsIG5lZWRzIHJlZmluZW1lbnQgKGFjdGlvbnMgYXQgc2VydmVycyBVUC9ET1dOLCB0aW1lb3V0cykKLSBuZXcgJ3RpbWVvdXQnIGtleXdvcmQgdG8gc2V0IGFsbCB0aW1lb3V0cyAoaW5jbHVkaW5nIHRoZSBxdWV1ZSkKLSBhYmlsaXR5IHRvIGludGVyY2VwdCBhbiBVUkkgdG8gcmVwb3J0IHN0YXRpc3RpY3MKLSBhYmlsaXR5IHRvIGludGVyY2VwdCBhbiBVUkkgdG8gcmV0dXJuIDQwNAotIGVtYmVkZGVkIGVycm9yIHBhZ2VzIGxvYWRlZCBpbiBtZW1vcnkgYXQgc3RhcnR1cCB0aW1lIChlZzogZm9yIGV4cGlyZWQgdGltZQogIGluIGNvbm5lY3Rpb24gcXVldWUpCgoKVE9ETyBmb3IgMS4zCj09PT09PT09PT09PQogIC0gY2hlY2sgYWxsIGNvcHlyaWdodHMKICAtIGZpeCBNYWtlZmlsZS5ic2QKICAtIHNlcGFyYXRlIGlubGluZSBmdW5jdGlvbnMgdG8gcHV0IHRoZW0gaW4gZmlsZXMgY292ZXJlZCBieSBHUEwKICAtIGltcGxlbWVudCBIVFRQIHN0YXR1cyA0MTQgLSByZXF1ZXN0IFVSSSB0b28gbG9uZwogIC0gaW1wbGVtZW50ICd1c2VfZmlsdGVycyA8cHJveHk+JyBhbmQgJ3VzZV9iYWNrZW5kIDxwcm94eT4nCiAgLSBmaXggdGhlIGxvZ3MuIFRoZSBsb2dzIG1pZ2h0IGJlIGRlZmluZWQgZnJvbSB0aGUgZnJvbnRlbmQgYW5kCiAgICBhdWdtZW50ZWQgZGVwZW5kaW5nIG9uIHRoZSBiYWNrZW5kcycgb3B0aW9ucy4gQW5vdGhlciBzb2x1dGlvbgogICAgd291bGQgYmUgdG8gc3VwcG9ydCBhICdsb2cnIHR5cGUgZW50aXR5IGp1c3QgbGlrZSB0aGUgZnJvbnRlbmQsCiAgICBmaWx0ZXJzIGFuZCBiYWNrZW5kLCBvbiB3aGljaCBldmVyeSBlbnRpdHkgY291bGQgcmVseS4KICAtIGltcGxlbWVudCAnb24gdXJpIDx1cmk+IDxwcm94eT4nLCAnb24gaG9zdCA8aG9zdD4gPHByb3h5PicKICAtIHJlbW92ZSB0aGUgZmlyc3Qgbm93IHVzZWxlc3MgaG9wIGluIGhkcl9pZHgKICAtIGJhbGFuY2Ugb24gVVJJIGhhc2ggKHNwZWNpZnkgbGVuZ3RoIG9yIGRlcHRoKQogIC0gYmFsYW5jZSBvbiBhbnkgaGVhZGVyIGhhc2ggKGVnOiBob3N0KQogIC0gYmFsYW5jZSB3aXRoIHJlZGlyZWN0aW9ucyB0byByZWFsIHNlcnZlcnMKICAtIG11bHRpLXNpdGUgTEIgd2l0aCB3ZWlnaHRlZCByZWRpcmVjdGlvbnMgdG8gdGhlIHJlbW90ZSBvbmUKCg==