Li4gU2VxdWVuY2VzL0NsYXNzZXMvL3NldCB8NDAKCnNldAo9PT0KCkRlc2NyaXB0aW9uCi0tLS0tLS0tLS0tCgpgYHNldGBgIGlzIGEgfHZhcmlhZGljfCwgYGFzc29jaWF0aXZlYF9fLCBgZXh0ZW5zaWJsZWBfXyBzZXF1ZW5jZSBvZiB0eXBlcyB0aGF0IApzdXBwb3J0cyBjb25zdGFudC10aW1lIGluc2VydGlvbiBhbmQgcmVtb3ZhbCBvZiBlbGVtZW50cywgYW5kIHRlc3RpbmcgZm9yIG1lbWJlcnNoaXAuCkEgYGBzZXRgYCBtYXkgY29udGFpbiBhdCBtb3N0IG9uZSBlbGVtZW50IGZvciBlYWNoIGtleS4KCl9fIGBBc3NvY2lhdGl2ZSBTZXF1ZW5jZWBfCl9fIGBFeHRlbnNpYmxlIEFzc29jaWF0aXZlIFNlcXVlbmNlYF8KCkhlYWRlcgotLS0tLS0KCistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCnwgU2VxdWVuY2UgZm9ybSAgICAgfCBIZWFkZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cis9PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCnwgVmFyaWFkaWMgICAgICAgICAgfCBgYCNpbmNsdWRlIDxib29zdC9tcGwvc2V0LmhwcD5gYCAgICAgICAgICAgICAgICAgICAgICB8CistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCnwgTnVtYmVyZWQgICAgICAgICAgfCBgYCNpbmNsdWRlIDxib29zdC9tcGwvc2V0L3NldGBgXCAqbipcIGBgLmhwcD5gYCAgICAgICB8CistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCgoKTW9kZWwgb2YKLS0tLS0tLS0KCiogfFZhcmlhZGljIFNlcXVlbmNlfAoqIHxBc3NvY2lhdGl2ZSBTZXF1ZW5jZXwKKiB8RXh0ZW5zaWJsZSBBc3NvY2lhdGl2ZSBTZXF1ZW5jZXwKCgpFeHByZXNzaW9uIHNlbWFudGljcwotLS0tLS0tLS0tLS0tLS0tLS0tLQoKSW4gdGhlIGZvbGxvd2luZyB0YWJsZSwgYGBzYGAgaXMgYW4gaW5zdGFuY2Ugb2YgYGBzZXRgYCwgYGBwb3NgYCBpcyBhbiBpdGVyYXRvciBpbnRvIGBgc2BgLCAKYW5kIGBgeGBgLCBgYGtgYCwgYW5kIHx0MS4uLnRufCBhcmUgYXJiaXRyYXJ5IHR5cGVzLgoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfCBFeHByZXNzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgU2VtYW50aWNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsKfCAuLiBwYXJzZWQtbGl0ZXJhbDo6ICAgICAgICAgICAgICAgICAgIHwgYGBzZXRgYCBvZiBlbGVtZW50cyB8dDEuLi50bnw7IHNlZSAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfFZhcmlhZGljIFNlcXVlbmNlfC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICBzZXQ8fHQxLi4udG58PiAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICBzZXRcICpuKlwgPHx0MS4uLnRufD4gICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfCAuLiBwYXJzZWQtbGl0ZXJhbDo6ICAgICAgICAgICAgICAgICAgIHwgSWRlbnRpY2FsIHRvIGBgc2V0YGBcICpuKlwgYGA8YGBcIHx0MS4uLnRufFwgYGA+YGA7ICAgICAgIHwKfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc2VlIHxWYXJpYWRpYyBTZXF1ZW5jZXwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICBzZXQ8fHQxLi4udG58Pjo6dHlwZSAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICBzZXRcICpuKlwgPHx0MS4uLnRufD46OnR5cGUgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfCBgYGJlZ2luPHM+Ojp0eXBlYGAgICAgICAgICAgICAgICAgICAgIHwgQW4gaXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIGJlZ2lubmluZyBvZiBgYHNgYDsgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc2VlIHxBc3NvY2lhdGl2ZSBTZXF1ZW5jZXwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfCBgYGVuZDxzPjo6dHlwZWBgICAgICAgICAgICAgICAgICAgICAgIHwgQW4gaXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIGVuZCBvZiBgYHNgYDsgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc2VlIHxBc3NvY2lhdGl2ZSBTZXF1ZW5jZXwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfCBgYHNpemU8cz46OnR5cGVgYCAgICAgICAgICAgICAgICAgICAgIHwgVGhlIHNpemUgb2YgYGBzYGA7IHNlZSB8QXNzb2NpYXRpdmUgU2VxdWVuY2V8LiAgICAgICAgICAgIHwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfCBgYGVtcHR5PHM+Ojp0eXBlYGAgICAgICAgICAgICAgICAgICAgIHwgfHRydWUgaWYgYW5kIG9ubHkgaWZ8IGBgc2BgIGlzIGVtcHR5OyBzZWUgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfEFzc29jaWF0aXZlIFNlcXVlbmNlfC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfCBgYGZyb250PHM+Ojp0eXBlYGAgICAgICAgICAgICAgICAgICAgIHwgVGhlIGZpcnN0IGVsZW1lbnQgaW4gYGBzYGA7IHNlZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfEFzc29jaWF0aXZlIFNlcXVlbmNlfC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfCBgYGhhc19rZXk8cyxrPjo6dHlwZWBgICAgICAgICAgICAgICAgIHwgfHRydWUgaWYgYW5kIG9ubHkgaWZ8IHRoZXJlIGlzIG9uZSBvciBtb3JlIGVsZW1lbnRzICAgICAgIHwKfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgd2l0aCB0aGUga2V5IGBga2BgIGluIGBgc2BgOyBzZWUgfEFzc29jaWF0aXZlIFNlcXVlbmNlfC4gIHwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfCBgYGNvdW50PHMsaz46OnR5cGVgYCAgICAgICAgICAgICAgICAgIHwgVGhlIG51bWJlciBvZiBlbGVtZW50cyB3aXRoIHRoZSBrZXkgYGBrYGAgaW4gYGBzYGA7ICAgICAgIHwKfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc2VlIHxBc3NvY2lhdGl2ZSBTZXF1ZW5jZXwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfCBgYG9yZGVyPHMsaz46OnR5cGVgYCAgICAgICAgICAgICAgICAgIHwgQSB1bmlxdWUgdW5zaWduZWQgfEludGVncmFsIENvbnN0YW50fCBhc3NvY2lhdGVkIHdpdGggICAgIHwKfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdGhlIGtleSBgYGtgYCBpbiBgYHNgYDsgc2VlIHxBc3NvY2lhdGl2ZSBTZXF1ZW5jZXwuICAgICAgIHwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfCAuLiBwYXJzZWQtbGl0ZXJhbDo6ICAgICAgICAgICAgICAgICAgIHwgVGhlIGVsZW1lbnQgYXNzb2NpYXRlZCB3aXRoIHRoZSBrZXkgYGBrYGAgaW4gICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYGBzYGA7IHNlZSB8QXNzb2NpYXRpdmUgU2VxdWVuY2V8LiAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICBhdDxzLGs+Ojp0eXBlICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICBhdDxzLGssZGVmPjo6dHlwZSAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfCBgYGtleV90eXBlPHMseD46OnR5cGVgYCAgICAgICAgICAgICAgIHwgSWRlbnRpY2FsIHRvIGBgeGBgOyBzZWUgfEFzc29jaWF0aXZlIFNlcXVlbmNlfC4gICAgICAgICAgIHwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfCBgYHZhbHVlX3R5cGU8cyx4Pjo6dHlwZWBgICAgICAgICAgICAgIHwgSWRlbnRpY2FsIHRvIGBgeGBgOyBzZWUgfEFzc29jaWF0aXZlIFNlcXVlbmNlfC4gICAgICAgICAgIHwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfCBgYGluc2VydDxzLHg+Ojp0eXBlYGAgICAgICAgICAgICAgICAgIHwgQSBuZXcgYGBzZXRgYCBlcXVpdmFsZW50IHRvIGBgc2BgIGV4Y2VwdCB0aGF0ICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIGF0PCB0LCBrZXlfdHlwZTxzLHg+Ojp0eXBlID46OnR5cGUgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaXMgaWRlbnRpY2FsIHRvIGBgdmFsdWVfdHlwZTxzLHg+Ojp0eXBlYGAuICAgICAgICAgICAgICAgIHwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfCBgYGluc2VydDxzLHBvcyx4Pjo6dHlwZWBgICAgICAgICAgICAgIHwgRXF1aXZhbGVudCB0byBgYGluc2VydDxzLHg+Ojp0eXBlYGA7IGBgcG9zYGAgaXMgaWdub3JlZC4gIHwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfCBgYGVyYXNlX2tleTxzLGs+Ojp0eXBlYGAgICAgICAgICAgICAgIHwgQSBuZXcgYGBzZXRgYCBlcXVpdmFsZW50IHRvIGBgc2BgIGV4Y2VwdCB0aGF0ICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYGBoYXNfa2V5PHQsIGs+Ojp2YWx1ZSA9PSBmYWxzZWBgLiAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfCBgYGVyYXNlPHMscG9zPjo6dHlwZWBgICAgICAgICAgICAgICAgIHwgRXF1aXZhbGVudCB0byBgYGVyYXNlPHMsIGRlcmVmPHBvcz46OnR5cGUgPjo6dHlwZWBgLiAgICAgIHwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfCBgYGNsZWFyPHM+Ojp0eXBlYGAgICAgICAgICAgICAgICAgICAgIHwgQW4gZW1wdHkgYGBzZXRgYDsgc2VlIHxjbGVhcnwuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKCgpFeGFtcGxlCi0tLS0tLS0KCi4uIHBhcnNlZC1saXRlcmFsOjoKCiAgICB0eXBlZGVmIHNldDwgaW50LGxvbmcsZG91YmxlLGludF88NT4gPiBzOwoKICAgIEJPT1NUX01QTF9BU1NFUlRfUkVMQVRJT04oIHNpemU8cz46OnZhbHVlLCA9PSwgNCApOwogICAgQk9PU1RfTVBMX0FTU0VSVF9OT1QoKCBlbXB0eTxzPiApKTsKICAgIAogICAgQk9PU1RfTVBMX0FTU0VSVCgoIGlzX3NhbWU8IGF0PHMsaW50Pjo6dHlwZSwgaW50ID4gKSk7CiAgICBCT09TVF9NUExfQVNTRVJUKCggaXNfc2FtZTwgYXQ8cyxsb25nPjo6dHlwZSwgbG9uZyA+ICkpOwogICAgQk9PU1RfTVBMX0FTU0VSVCgoIGlzX3NhbWU8IGF0PHMsaW50Xzw1PiA+Ojp0eXBlLCBpbnRfPDU+ID4gKSk7CiAgICBCT09TVF9NUExfQVNTRVJUKCggaXNfc2FtZTwgYXQ8cyxjaGFyPjo6dHlwZSwgdm9pZFxfID4gKSk7CgoKU2VlIGFsc28KLS0tLS0tLS0KCnxTZXF1ZW5jZXN8LCB8VmFyaWFkaWMgU2VxdWVuY2V8LCB8QXNzb2NpYXRpdmUgU2VxdWVuY2V8LCB8RXh0ZW5zaWJsZSBBc3NvY2lhdGl2ZSBTZXF1ZW5jZXwsIHxzZXRfY3wsIHxtYXB8LCB8dmVjdG9yfAoKCi4uIGNvcHlyaWdodDo6IENvcHlyaWdodCCpICAyMDAxLTIwMDkgQWxla3NleSBHdXJ0b3ZveSBhbmQgRGF2aWQgQWJyYWhhbXMKICAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZwogICBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkK