LyoKICogVW5pbnN0YWxsZXIgKEZpbm5pc2ggUmVzb3VyY2VzKQogKgogKiBDb3B5cmlnaHQgMjAwNSBLaW1tbyBNeWxseXZpcnRhCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQogKi8KCkxBTkdVQUdFIExBTkdfRklOTklTSCwgU1VCTEFOR19ERUZBVUxUCgpJRERfVU5JTlNUQUxMRVIgRElBTE9HIERJU0NBUkRBQkxFICAwLCAwLCAzMzAsIDE2MApTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiV2luZSBTb3ZlbGx1a3NlbiBQb2lzdGFqYSIKRk9OVCAxMCwgIk1TIFNhbnMgU2VyaWYiCkJFR0lOCiAgICBMVEVYVCAgICAgICAgICAgIlZhbGl0c2UgcG9pc3RldHRhdmEgc292ZWxsdXM6IixJRENfUExFQVNFU0VMRUNULDEwLDEwLDI1MCwxNAogICAgRURJVFRFWFQgICAgICAgIElEQ19GSUxURVIsMTAsMjUsMjUwLDE0LEVTX0FVVE9IU0NST0xMCiAgICBMSVNUQk9YICAgICAgICAgSURDX0xJU1QsMTAsNDMsMjUwLDEwNixMQlNfTk9JTlRFR1JBTEhFSUdIVCB8IAogICAgICAgICAgICAgICAgICAgIExCU19FWFRFTkRFRFNFTCB8IFdTX1ZTQ1JPTEwgfCBXU19UQUJTVE9QCiAgICBQVVNIQlVUVE9OICAgICAgIiZQb2lzdGEiLElEQ19VTklOU1RBTEwsMjcwLDQ4LDUwLDE0CiAgICBQVVNIQlVUVE9OICAgICAgIiZUaWV0b2phIixJRENfQUJPVVQsMjcwLDY1LDUwLDE0CiAgICBQVVNIQlVUVE9OICAgICAgIiZTdWxqZSIsSURDX0VYSVQsMjcwLDgxLDUwLDE0CkVORAoKClNUUklOR1RBQkxFIERJU0NBUkRBQkxFIHsKICAgICBJRFNfQVBQTkFNRSwgIldpbmUgU292ZWxsdWtzZW4gUG9pc3RhamEiCiAgICAgSURTX0FCT1VULCAiV2luZSBTb3ZlbGx1a3NlbiBQb2lzdGFqYSAoQykgMjAwNSBBbmRyZWFzIE1vaHIsIEhhbm51IFZhbHRvbmVuIGphIEpvbmF0aGFuIEVybnN0LiIKICAgICBJRFNfQUJPVVRUSVRMRSwgIlRpZXRvamEgT2hqZWxtYXN0YSIKICAgICBJRFNfUkVHSVNUUllLRVlOT1RBVkFJTEFCTEUsICJSZWtpc3RlcmlhdmFpbnRhIGFzZW5udWtzZW4gcG9pc3Rvb24gZWkgb2xlICh2aWVs5Ckgb2xlbWFzc2EsIG1pdOTkbiBlaSBvbGUgdGVodOR2aXNz5CAhIgogICAgIElEU19VTklOU1RBTExGQUlMRUQsICJQb2lzdG9rb21lbnRvICclcycgZXDkb25uaXN0dWksIGpvaHR1ZW4gZWhr5CBwdXV0dHV2YXN0YSB0aWVkb3N0b3N0YS5cclxuSGFsdWF0a28gcG9pc3RhYSBvaGplbG1hbiByZWtpc3RlcmlzdOQ/Igp9Cg==