ZGlmZiAtLWdpdCBhL0NIQU5HRVMgYi9DSEFOR0VTCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0YTBhMzgKLS0tIC9kZXYvbnVsbAorKysgYi9DSEFOR0VTCkBAIC0wLDAgKzEsMzAzIEBACitDaGFuZ2VzIGZyb20gMS4xLjMgdG8gMS4yCis9PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VkIGxpY2Vuc2UgdG8gQXBhY2hlIDIuMAorQm9nb24gZGVmYXVsdCBtb2RlbCBpcyBub3cgQU5ZLCBub3QgRU1QVFkKK1N1cHBvcnQgbmV3IERPQ1RZUEUgb3V0cHV0IHN3aXRjaGVzIC0tZG9jdHlwZS1zeXN0ZW0gYW5kIC0tZG9jdHlwZS1wdWJsaWMKK1N1cHBvcnQgbmV3IFhNTCBkZWNsYXJhdGlvbiBvdXRwdXQgc3dpdGNoZXMgLS1zdGFuZGFsb25lIGFuZCAtLXZlcnNpb24KK05ldyAtLW5vcm9vdGJvZ29ucyBzd2l0Y2ggbWFrZXMgYm9nb25zIGNoaWxkcmVuIG9mIHRoZSByb290CitEb24ndCByZXNvbHZlIGVudGl0eSByZWZlcmVuY2VzIGluIGF0dHJpYnV0ZSB2YWx1ZXMgdW5sZXNzIHNlbWljb2xvbi10ZXJtaW5hdGVkCitTdXBwb3J0IGNoYXJhY3RlciBlbnRpdGllcyBhYm92ZSBVK0ZGRkYKK0FkZCBjaGFyYWN0ZXIgZW50aXRpZXMgZnJvbSB0aGUgMjAwNy0xMi0xNCBkcmFmdCBvZiB4bWwtZW50aXR5LW5hbWVzCitDYWxsIFNBWCBldmVudHMgc3RhcnRQcmVmaXhNYXBwaW5nIGFuZCBlbmRQcmVmaXhNYXBwaW5nIHRvIHJlcG9ydCBwcmVmaXhlcworQ2xlYW4gdXAgbmV3bGluZSBwcm9jZXNzaW5nLCBzaHJpbmtpbmcgaHRtbC5zdG1sIGNvbnNpZGVyYWJseQorQWxsb3cgbGluayBlbGVtZW50cyBpbiB0aGUgYm9keSBhcyB3ZWxsIGFzIHRoZSBoZWFkLCB0byBhdm9pZCBleGNlc3MgYm9kaWVzCitBbGxvdyB0YWJsZXMgaW5zaWRlIHBhcmFncmFwaHMKK0FsbG93IGNlbGxzIGFuZCBmb3JtcyBpbiB0aGVhZCBhbmQgdGZvb3QgZWxlbWVudHMgd2l0aG91dCBpbnRlcnZlbmluZyB0ciBlbGVtZW50CitUaGUgc3BhbiBlbGVtZW50IGlzIG5vIGxvbmdlciByZXN0YXJ0YWJsZQorU3VwcG9ydCBub24tc3RhbmRhcmQgZWxlbWVudHMgYmdzb3VuZCwgYmxpbmssIGNhbnZhcywgY29tbWVudCwgbGlzdGluZywKKwltYXJxdWVlLCBub2JyLCBydWJ5LCByYmMsIHJ0YywgcmIsIHJ0LCBycCwgd2JyLCB4bXAKK0luIEhUTUwgbW9kZSwgYm9vbGVhbiBhdHRyaWJ1dGVzIGxpa2UgY2hlY2tlZCBhcmUgb3V0cHV0IGluIG1pbmltaXplZCBmb3JtCitDb3JyZWN0bHkgaGFuZGxlIHJ1bnMgb2YgbGVzcy10aGFuIGNoYXJhY3RlcnMKK1N1cHByZXNzIGFsbCBidXQgdGhlIGZpcnN0IERPQ1RZUEUgZGVjbGFyYXRpb24KK01vZGlmeSBQSSB0YXJnZXRzIGNvbnRhaW5pbmcgY29sb25zIHRvIGhhdmUgdW5kZXJzY29yZXMgaW5zdGVhZAorVGhlIGNhc2Ugb2YgZWxlbWVudCB0YWdzIGlzIG5vdyBjYW5vbmljYWxpemVkIHRvIHRoZSBzY2hlbWEKK1BJIHRhcmdldHMgYXJlIG5vIGxvbmdlciBmb3JjZWQgdG8gbG93ZXIgY2FzZQorCitDaGFuZ2VzIGZyb20gMS4xLjIgdG8gMS4xLjMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PQorQWxsb3cgUGFyc2VyLnNldCogbWV0aG9kcyB0byBhY2NlcHQgbnVsbAorQWxsb3cgc2V0dGluZyB0aGUgTGV4aWNhbEhhbmRsZXIgZmVhdHVyZSB0byBiZSBudWxsCisJaW4gYm90aCBjYXNlcyBtZWFucyAidXNlIGRlZmF1bHQgYmVoYXZpb3IiCisKK0NoYW5nZXMgZnJvbSAxLjEuMSB0byAxLjEuMgorPT09PT09PT09PT09PT09PT09PT09PT09PT09CitTZXR0aW5nIENEQVRBRWxlbWVudHNGZWF0dXJlIGRpZG4ndCByZWFsbHkgc2V0IENEQVRBRWxlbWVudHMgaW5zdGFuY2UgdmFyaWFibGUKKworQ2hhbmdlcyBmcm9tIDEuMSB0byAxLjEuMQorPT09PT09PT09PT09PT09PT09PT09PT09PQorUmVtb3ZlZCBsZXhpY2FsIGhhbmRsZXIgY2FsbHMgdG8gc3RhcnRDREFUQS9lbmRDREFUQSBmcm9tIENEQVRBIGVsZW1lbnQgaGFuZGxpbmcKK0FkZGVkIGxleGljYWwgaGFuZGxlciBjYWxscyB0byBzdGFydENEQVRBL2VuZENEQVRBIGZyb20gQ0RBVEEgc2VjdGlvbiBoYW5kbGluZworQWRkZWQgQ0RBVEFFbGVtZW50c0ZlYXR1cmUsIHRoZSBwcm9ncmFtbWF0aWMgZXF1aXZhbGVudCBvZiB0aGUgLS1ub2NkYXRhIHN3aXRjaAorCitDaGFuZ2VzIGZyb20gMS4wLjUgdG8gMS4xCis9PT09PT09PT09PT09PT09PT09PT09PT09CitBZGQgVGF0dSBTYWxvcmFudGEncyBKQVhQIHN1cHBvcnQgcGFja2FnZQorCitDaGFuZ2VzIGZyb20gMS4wLjQgdG8gMS4wLjUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PQorTWFqb3IgcmVwYWlycyB0byBjb21tZW50IHNjYW5uaW5nCitTa2lwIGxlYWRpbmcgQk9NCitDb21tZW50IG91dCBkZWJ1Z2dpbmcgY29kZSBpbiBQWVhXcml0ZXIKK0FsbG93ICYjWCBhcyB3ZWxsIGFzICYjeAorQWRkIG5ldC5zZi5zYXhvbiB0byBsaXN0IG9mIHN1cHBvcnRlZCBYU0xUIGVuZ2luZXMKKworQ2hhbmdlcyBmcm9tIDEuMC40IHRvIDEuMC4zCis9PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NlcnRhaW4gb3B0aW9ucyB3ZXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSB0aGF0IHNob3VsZCBub3QgaGF2ZSBiZWVuCitCbG9ja2VkIFhNTCBkZWNsYXJhdGlvbiBmcm9tIHNwZWNpZnlpbmcgYW4gZW5jb2Rpbmcgb2YgIiIKKy0tbWV0aG9kPWh0bWwgd2FzIG5vdCBkb2luZyB0aGUgcmlnaHQgdGhpbmcKKworQ2hhbmdlcyBmcm9tIDEuMC4zIHRvIDEuMC4yCis9PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0ZpeGVkIGJ1aWxkIGZpbGUgdG8gdXNlIEphdmEgdGFyZ2V0IHZlcnNpb24gMS40CitGaXhlZCAtLXZlcnNpb24gc3dpdGNoIHRvIHByaW50IHRoZSByaWdodCB0aGluZworCitDaGFuZ2VzIGZyb20gMS4wLjEgdG8gMS4wLjIKKz09PT09PT09PT09PT09PT09PT09PT09PT09PQorVmVyc2lvbiBhdHRyaWJ1dGUgZGVmYXVsdCB2YWx1ZSByZW1vdmVkIGZyb20gaHRtbCBlbGVtZW50CitMZWFkaW5nIGFuZCB0cmFpbGluZyBoeXBoZW5zIG5vdyB0cmltbWVkIHByb3Blcmx5IGZyb20gY29tbWVudHMKK0FkZGVkIC0tb3V0cHV0LWVuY29kaW5nIHN3aXRjaCB0byBjb250cm9sIGVuY29kaW5nCitJZiBvdXRwdXQgZW5jb2RpbmcgaXMgVW5pY29kZSwgZG9uJ3QgZ2VuZXJhdGUgY2hhcmFjdGVyIHJlZmVyZW5jZXMKK1doaXRlc3BhY2UgY29tcHJlc3NlZCBhbmQganVuayBzdHJpcHBlZCBmcm9tIHB1YmxpYyBpZGVudGlmaWVycworCitDaGFuZ2VzIGZyb20gMS4wIHRvIDEuMC4xCis9PT09PT09PT09PT09PT09PT09PT09PT09CitBZGRlZCBpZ25vcmFibGVXaGl0ZXNwYWNlRmVhdHVyZSBhbmQgLS1pZ25vcmFibGUgdG8gcmVwb3J0IGlnbm9yYWJsZSB3aGl0ZXNwYWNlCisJUGF0Y2ggZHVlIHRvIERhdmlkIFBhc2hsZXkKK0luc2VydCBzcGFjZXMgdG8gYnJlYWsgdXAgLS0gaW4gY29tbWVudHMKK0NoYW5nZSBib2d1cyBjaGFycyBpbiBwdWJsaWNpZHMgdG8gc3BhY2VzCistLWxleGljYWwgc3dpdGNoIG5vdyBvdXRwdXRzIERPQ1RZUEUgaWYgdGhlcmUgaXMgb25lCitSZW1vdmUgdW5uZWNlc3NhcnkgYmxhbmsgbGluZSBhZnRlciBYTUwgZGVjbGFyYXRpb24KKworQ2hhbmdlcyBmcm9tIDEuMHJjOSB0byAxLjAKKz09PT09PT09PT09PT09PT09PT09PT09PT09CitBZGRlZCBmZWF0dXJlIHRvIGNvbnRyb2wgcmVzdGFydGFiaWxpdHkKKwlQYXRjaCBkdWUgdG8gTmlraXRhIFpodWsKK0FkZGVkIGNvcnJlc3BvbmRpbmcgLS1ub3Jlc3RhcnQgc3dpdGNoIGluIENvbW1hbmRMaW5lCitNYWRlIHRyYW5zbGF0ZS1jb2xvbnMgZmVhdHVyZSBhY3R1YWxseSB3b3JrCisKK0NoYW5nZXMgZnJvbSAxLjByYzggdG8gMS4wcmM5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorSWYgdGhlcmUgaXMgYSBwdWJsaWNpZCBidXQgbm8gc3lzdGVtaWQsIHNldCBzeXN0ZW1pZCB0byAiIgorCitDaGFuZ2VzIGZyb20gMS4wcmM3IHRvIDEuMHJjOAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0ZpeGVkIHBhcGVyLWJhZyBidWcgKHNvdXJjZSBkaWRuJ3QgbWF0Y2ggYmluYXJ5IGluIHJlbGVhc2UpCisKK0NoYW5nZXMgZnJvbSAxLjByYzYgdG8gMS4wcmM3Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorTGV4aWNhbEhhbmRsZXIgbm93IGdldHMgRE9DVFlQRSBpbmZvcm1hdGlvbiAocHVibGljaWQgYW5kIHN5c3RlbWlkKQorCVBhdGNoIGR1ZSB0byBNaWtlIEJyZW1mb3JkCitIVE1MU2Nhbm5lciBub3cgcmVwb3J0cyBtb3JlIHVzZWZ1bCBkZWJ1ZyBvdXRwdXQgd2hlbiBub3QgY29tbWVudGVkIG91dAorCVBhdGNoIGR1ZSB0byBNaWtlIEJyZW1mb3JkCitDaGFuZ2UgIjxtZW1iZXJPZkFueT4iIHRvIGV4Y2x1ZGUgIjxyb290PiIgcHNldWRvLWVsZW1lbnQKKwlUaGlzIHByZXZlbnRzICJzY3JpcHQiIGZyb20gYmVpbmcgb3V0cHV0IGFzIGEgcm9vdAorVGhlIHNoYXJlZCBIVE1MUGFyc2VyIG9iamVjdCBoYXMgYmVlbiBlbGltaW5hdGVkCisKK0NoYW5nZXMgZnJvbSAxLjByYzUgdG8gMS4wcmM2Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorSWYgbmFtZXNwYWNlRmVhdHVyZSBpcyBmYWxzZSwgdXJpIGFuZCBsb2NhbG5hbWUgYXJlIHBhc3NlZCBhcyBlbXB0eSBzdHJpbmdzCitUaGUgbmFtZXNwYWNlUHJlZml4ZXNGZWF0dXJlIGlzIG5vdyBhbHdheXMgZmFsc2UKK0NvbW1hbmQgbGluZSBzd2l0Y2ggLS1ub25zIG5vIGxvbmdlciBhZmZlY3RzIG5hbWVzcGFjZVByZWZpeGVzRmVhdHVyZQorQ29tbWFuZCBsaW5lIHN3aXRjaCAtLWh0bWwgbm93IGltcGxpZXMgLS1ub25zCitYTUxXcml0ZXIgaXMgbm93IHRvbGQgZGlyZWN0bHkgdG8gdXNlIHRoZSBzY2hlbWEncyBVUkkgYXMgZGVmYXVsdCBuYW1lc3BhY2UKK1hNTFdyaXRlciBub3cgdGFrZXMgdGhlIGVsZW1lbnQgbmFtZSBmcm9tIHRoZSBxbmFtZSBpZiBsb2NhbG5hbWUgaXMgZW1wdHkKKworQ2hhbmdlcyBmcm9tIDEuMHJjNCB0byAxLjByYzUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitUaGUgLS1ub2RlZmF1bHQgc3dpdGNoIG5vdyByZW1vdmVzIG9ubHkgZGVmYXVsdCBhdHRyaWJ1dGVzLCBub3QgYWxsIG9mIHRoZW0KK0FkZGVkIC0tbm9jb2xvbnMgc3dpdGNoIGFuZCB0cmFuc2xhdGUtY29sb25zIGZlYXR1cmUgdG8gY29udmVydCAiOiIKKwlpbiBuYW1lcyB0byAiXyIgKHRodXMgc3VwcHJlc3NpbmcgbmFtZXNwYWNlcyBvdGhlciB0aGFuIHRoZSBiYXNpYyBvbmUpCitUaGUgcm9vdCBlbGVtZW50IGNhbiBiZSB1bmtub3duIHdpdGhvdXQgcHJvYmxlbQorRW1wdHkgPHNjcmlwdC8+IGFuZCA8c3R5bGUvPiB0YWdzIG5vdyB3b3JrCitBZGRlZCBhbGwgc3RhbmRhcmQgU0FYMiBmZWF0dXJlcyB0byBmZWF0dXJlIGhhc2h0YWJsZQorUmVpbXBsZW1lbnRlZCBuYW1lc3BhY2VQcmVmaXhlcyBmZWF0dXJlIChicm9rZW4gc2luY2UgMS4wcmMzKQorCitDaGFuZ2VzIGZyb20gMS4wcmMzIHRvIDEuMHJjNAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1JlbW92ZSB0cmFpbGluZyA/IGZyb20gcHJvY2Vzc2luZyBpbnN0cnVjdGlvbnMgKGluIGNhc2UgdGhlIGlucHV0IGlzIFhIVE1MKQorQWRkZWQgSmF2YWRvY3MgZm9yIGFsbCBTQVggc3RhbmRhcmQgYW5kIFRhZ1NvdXAtc3BlY2lmaWMgZmVhdHVyZXMgYW5kIHByb3BlcnRpZXMKK0ZpeGVkIHRlcm1pbmF0aW9uIGNvbmRpdGlvbnMgZm9yIGVudGl0eS9jaGFyYWN0ZXIgcmVmZXJlbmNlcworRml4ZWQgRU9GLXB1c2hiYWNrIGJ1ZyB0aGF0IHdhcyBnZW5lcmF0aW5nIGJvZ3VzICYjeDY1NTM1OyByZWZlcmVuY2VzCitBZGRlZCBQYXJzZXIgZmVhdHVyZSBhbmQgLS1ub2RlZmF1bHRzIHN3aXRjaCB0byBpZ25vcmUgZGVmYXVsdCBhdHRyaWJ1dGUgdmFsdWVzCitBZGRlZCBzdXBwb3J0IGZvciBTQVggTG9jYXRvcgorVXBkYXRlZCBBRkwgbGljZW5zZSB0byB2ZXJzaW9uIDMuMAorU2Nhbm5lciBidWZmZXIgc2l6ZSBpbmNyZWFzZXMgYXMgbmVlZGVkLCBhbGxvd2luZyBsYXJnZSBhdHRyaWJ1dGUgdmFsdWVzCitMb29rIGZvciB2YXJpb3VzIFhTTFQgaW1wbGVtZW50YXRpb25zIGFzIGF2YWlsYWJsZSAoc3RpbGwgZmFpbHMgaW4gcmF3IDUuMCkKK0NsZWFuIHVwIGhhbmRsaW5nIG9mIFhNTCBlbXB0eSB0YWdzIGFuZCBTR01MIG1pbmltaXplZCBlbmQtdGFncworU3VwcG9ydCBwcm9wZXIgb3B0aW9ucyBhbmQgaGVscCBtZXNzYWdlIGludGVybmFsbHkKK1VzZSBIYXNodGFibGUgaW4gQ29tbWFuZExpbmUgY2xhc3MgaW5zdGVhZCBvZiBIYXNoTWFwCitEbyBwcm9wZXIgYnVmZmVyaW5nIG9mIElucHV0U3RyZWFtIGFuZCBSZWFkZXIKK0NsZWFuIHVwIGNvbnRlbnQgbW9kZWwgb2Ygbm9mcmFtZXMgZWxlbWVudAorUmVtb3ZlZCBodG1sTW9kZSBpbiBYTUxXcml0ZXIKK0FkZGVkIHN1cHBvcnQgZm9yIFhTTFQgb3V0cHV0IG9wdGlvbnMgTUVUSE9EPWh0bWwgYW5kIE9NSVRfWE1MX0RFQ0xBUkFUSU9OPXllcworQ29tbWFuZCBsaW5lIG9wdGlvbiAtLWh0bWwgc2V0cyBib3RoIG9mIHRoZXNlCitXcm90ZSBzaW1wbGUgdmFsaWRhdG9yIGZvciBUU1NMIHNjaGVtYXMgKHRzc2wvdHNzbC12YWxpZGF0b3IueHNsdCkKK1JlbW92ZWQgdmFyaW91cyB2YWxpZGl0eSBwcm9ibGVtcyBpbiBodG1sLnRzc2wKK1doZW4gcHJvY2Vzc2luZyBhIHN0YXJ0LXRhZywgZG9uJ3QgcmVzdGFydCBlbGVtZW50cyB0aGF0IGFyZW4ndCBpbiB0aGUgbmV3CisJZWxlbWVudCdzIGNvbnRlbnQgbW9kZWwKK1JlbW92ZSBib2d1cyBkb3VibGUgcGFyYW0gaW4gdHNzbC54c2x0CisKK0NoYW5nZXMgZnJvbSAxLjByYzIgdG8gMS4wcmMzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ29udmVydCBDUiBhbmQgQ1JMRiB0byBMRiBpbiBjb21tZW50cyBhbmQgUElzCitGb3JjZSBlbXB0eSBlbGVtZW50cyB0byBjbG9zZSBpbW1lZGlhdGVseQorTWF0Y2ggY2xvc2UgdGFncyBvZiBDREFUQSBlbGVtZW50cyBtb3JlIHByZWNpc2VseSAoYnV0IGNhc2UtYmxpbmQpCitQcm9jZXNzIHN3aXRjaGVzIG9uIHRoZSBjb21tYW5kIGxpbmUKK01hbiBwYWdlIGF2YWlsYWJsZQorCitDaGFuZ2VzIGZyb20gMS4wcmMxIHRvIDEuMHJjMgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0lzb2xhdGVkICYgYW5kICYjIG5vdyBkb24ndCBjcmFzaCBwYXJzZXIKK1RhZ1NvdXAgbm8gbG9uZ2VyIGRlcGVuZHMgb24gL2Rldi9zdGRpbiBleGlzdGluZworUmVmYWN0b3JlZCBQYXJzZXIgY2xhc3MsIHJlbW92aW5nIG1haW4gbWV0aG9kIHRvIG5ldyBDb21tYW5kTGluZSBjbGFzcworQ2hhbmdlcyB0byBjb250ZW50IG1vZGVscyBvZiBmb3JtLCBidXR0b24sIHRhYmxlLCBhbmQgdHIgZWxlbWVudHMgaW4gaHRtbC50c3NsCisnPC9zY3InICsgJ2lwdD4nIGluIGEgc2NyaXB0IGVsZW1lbnQgbm8gbG9uZ2VyIHRlcm1pbmF0ZXMgaXQKK0ludHJvZHVjZWQgInVuY2xvc2VhYmlsaXR5IiBvZiBmb3JtIGFuZCB0YWJsZSBlbGVtZW50cworInB5eGluIiBwcm9wZXJ0eSBzcGVjaWZpZXMgdGhhdCBpbnB1dCBpcyBpbiBQWVggZm9ybWF0CitDb3JyZWN0bHkgY29wZSB3aXRoIHVuZXhwZWN0ZWQgY2hhcmFjdGVycyBhcm91bmQgY29sb25zLCBhbHNvIHdpdGggbXVsdGlwbGUgY29sb25zCitDb3JyZWN0bHkgb3V0cHV0IGNvbW1lbnRzIHdpdGggIi0tIiBpbiB0aGVtIChieSBhZGRpbmcgYSBzcGFjZSkKKworQ2hhbmdlcyBmcm9tIDAuMTAuMiB0byAxLjByYzEKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitTY3JpcHQgY2FuIG5vdyBhcHBlYXIgYW55d2hlcmUKK1N3aXRjaCAtbm9jZGF0YSBjb3JyZWN0bHkgaW1wbGVtZW50ZWQKK0VsaW1pbmF0ZWQgdXNlbGVzcyBNX24gY29uc3RhbnRzIGluIFNjaGVtYQorSW50cm9kdWNlZCA8bWVtYmVyb2ZBbnk+IGFuZCA8aXNSb290PiBhcyBhbHRlcm5hdGl2ZXMgdG8KKwk8bWVtYmVyT2Y+IGluIFRTU0wKK0FsbG93IHByZWZpeGVzIGluIGVsZW1lbnQgbmFtZXMKK0F0dHJpYnV0ZXMgYXJlIG5vdyBub3JtYWxpemVkCitFeHBhbmRlZCBwdWJsaWMgQVBJIGZvciBFbGVtZW50IGFuZCBFbGVtZW50VHlwZQorSmF2YWRvYyBpbXByb3ZlZAorCitDaGFuZ2VzIGZyb20gMC4xMC4xIHRvIDAuMTAuMgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1JlbW92ZWQgbWlzZmVhdHVyZSB3aGVyZWJ5ID4gdGVybWluYXRlZCBhIHRhZyBldmVuIGluc2lkZSBxdW90ZXMKK0FkZGVkIGxpY2Vuc2luZyBsYW5ndWFnZSB0byBYU0xUIHNjcmlwdHMsIFJFTEFYIE5HIHNjaGVtYXMKK1JlbW92ZWQgbG9uZy1zdGFuZGluZyBtaXNoYW5kbGluZyBvZiBlbnRpdHkgcmVmZXJlbmNlcyBpbiBhdHRyaWJ1dGVzCitDbGVhbmVkIHVwIGxvZ2ljIGZvciBjb252ZXJ0aW5nIGp1bmt5IHN0cmluZ3MgdG8gcHJvcGVyIFhNTCBOYW1lcworQ29ycmVjdGx5IGhhbmRsZSBlbXB0eSB0YWcgdGhhdCBoYXMgbm8gd2hpdGVzcGFjZSBvciBhdHRyaWJ1dGVzCitSZXN0b3JlIGNvcnJlY3QgMC45LjMgaGFuZGxpbmcgb2YgYW4gYXBwYXJlbnQgZW5kLXRhZyBpbiBhIENEQVRBIGVsZW1lbnQKK0FkZGVkIHNjcmlwdCBlbGVtZW50IHRvIGNvbnRlbnQgbW9kZWwgb2YgaGVhZCBlbGVtZW50CisKK0NoYW5nZXMgZnJvbSAwLjkuNyB0byAwLjEwLjEgKHRoZXJlIGlzIG5vIDAuMTAuMCk6Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ29udmVydCB0byBYU0xUIGNvbmZpZ3VyYXRpb24gZXhjbHVzaXZlbHk7CisJUGVybCBjb2RlIGFuZCB0YWItc2VwYXJhdGVkIHRhYmxlcyBhcmUgZ29uZQorUmVtb3ZlIHhtbG5zOiogYXR0cmlidXRlcworQXBwZW5kICJfIiB0byBhdHRyaWJ1dGUgbmFtZXMgZW5kaW5nIGluICI6IgorRG9uJ3QgcHJlcGVuZCAiXyIgdG8gYW4gYXR0cmlidXRlIG5hbWUgc3RhcnRpbmcgaW4gIl8iCitIYW5kbGUgbmFtZXNwYWNlIHByZWZpeGVzIGluIGF0dHJpYnV0ZXM6CisJInhtbCIgcHJlZml4IGlzIGhhbmRsZWQgY29ycmVjdGx5CisJb3RoZXIgcHJlZml4ZXMgYXJlIG1hcHBlZCB0byAidXJuOngtcHJlZml4OmZvbyIKK0lnbm9yZSBYTUwgZGVjbGFyYXRpb25zCistRG5vY2RhdGE9dHJ1ZSB0dXJucyBvZmYgRl9DREFUQSBvbiBzY3JpcHQgYW5kIHN0eWxlIGVsZW1lbnRzCitGaXhlZCBvZmYtYnktb25lIGVycm9ycyBpbiBjaGFyYWN0ZXIgcmVmZXJlbmNlcyB0aGF0IG1hZGUgdGhlbSB1bmludGVycHJldGVkCitTdGFydC10YWdzIGVuZGluZyBpbiBhIG1pbmltaXplZCBhdHRyaWJ1dGUgYXJlIG5vIGxvbmdlciBiZWluZyBkcm9wcGVkCitYTUwgZW1wdHkgdGFncyBhcmUgbm93IHN1cHBvcnRlZCAodGhvdWdoIHNsYXNoZXMgYXJlIHN0aWxsIGFsbG93ZWQgaW4KKwl1bnF1b3RlZCBhdHRyaWJ1dGUgdmFsdWVzKQorCitDaGFuZ2VzIGZyb20gMC45LjYgdG8gMC45Ljc6Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09CitVcGdyYWRlZCBBRkwgdG8gdmVyc2lvbiAyLjEKK1Bhc3NlZCB0aHJvdWdoIG5ld2xpbmVzIGluIGNoYXJhY3RlciBjb250ZW50ICh2ZXJ5IG9sZCBidWcpCisKK0NoYW5nZXMgZnJvbSAwLjkuNSB0byAwLjkuNjoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1NjcmlwdCBlbGVtZW50IGNhbiBhcHBlYXIgZGlyZWN0bHkgaW4gYm9keQorIj4iIHRlcm1pbmF0ZXMgYSBzdGFydC10YWcgZXZlbiBpbnNpZGUgYSBxdW90ZWQgYXR0cmlidXRlLAorCXRvIHByb3RlY3QgYWdhaW5zdCB1bmJhbGFuY2VkIHF1b3RlcworIl8iIGlzIHByZXBlbmRlZCB0byBhdHRyaWJ1dGVzIHRoYXQgZG9uJ3QgYmVnaW4gd2l0aCBhIGxldHRlcgorUmVtb3ZlICJ4bWxucyIgYXR0cmlidXRlcyBmcm9tIHRoZSBpbnB1dAorQWxsIHN0YW5kYXJkIGZlYXR1cmVzIGNhbiBub3cgYmUgc2V0CisJKGFsdGhvdWdoIHRoZXJlIGlzIG5vIGVmZmVjdCBmcm9tIGRvaW5nIHNvKQorTmV3ICJib2dvbnMtZW1wdHkiIGZlYXR1cmUgY2FuIGJlIHNldCB0byBmYWxzZSB0byBnaXZlIGJvZ29ucworCSBjb250ZW50IG1vZGVsIG9mIEFOWSByYXRoZXIgdGhhbiBFTVBUWTsKKwktRGFueSBzd2l0Y2ggc2V0cyB0aGlzIGZlYXR1cmUgdG8gZmFsc2UKK1RTU0wgbm93IGhhcyBhbiBleHBsaWNpdCBncm91cCBlbGVtZW50IHRvIGRlY2xhcmUgYW4gZWxlbWVudCBncm91cAorU1RNTCBpcyBhIG5ldyBYTUwgZm9ybWF0IGZvciBtb2RlbGluZyBzdGF0ZS10YWJsZSBjaGFuZ2VzCitMaWNlbnNlIHVwZGF0ZWQgdG8gQUZMIDIuMQorCitDaGFuZ2VzIGZyb20gMC45LjQgdG8gMC45LjU6Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09CitTIGluIHRoZSBzdGF0ZXRhYmxlIG5vdyBtZWFucyBcciBhbmQgXG4gYW5kIFx0IGFzIHdlbGwgYXMgc3BhY2UKKwkoYXMgd2FzIGFsd2F5cyBpbnRlbmRlZDsgYnJhaW4gZmFydCEpCitJbnMgYW5kIGRlbCBlbGVtZW50cyBhcmUgbm93IGFsbG93ZWQgZXZlcnl3aGVyZQorVFNTTCBub3cgY29ycmVjdGx5IHN1cHBvcnRzIGF0dHJpYnV0ZXMgdGhhdCBhcmUgbGVnYWwgb24gYWxsIGVsZW1lbnRzCisKK0NoYW5nZXMgZnJvbSAwLjkuMyB0byAwLjkuNDoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0ZpeGVkIHBhcGVyLWJhZyBidWcgdGhhdCByZXZlYWxlZCBhdHRyaWJ1dGUgdHlwZSBCT09MRUFOIHRvIGFwcGxpY2F0aW9ucy4KK09ic29sZXRlIEFCU1RSQUNUIHJlbW92ZWQgaW4gZmF2b3Igb2YgUkVBRE1FLgorSW1wcm92ZWQgaW1wbGVtZW50YXRpb24gb2YgQ0RBVEEgcmVzdGFydCBhZnRlciBib2d1cyBlbmQtdGFnLgorQWxsb3dlZCBoeXBoZW4sIHVuZGVyc2NvcmUsIGFuZCBwZXJpb2QgaW4gbmFtZXMgYXMgd2VsbCBhcyBjb2xvbi4KK0ZpcnN0IGN1dCBhdCBUYWdTb3VwIFNjaGVtYSBMYW5ndWFnZSAtLSBkb2Vzbid0IGRvIGFueXRoaW5nIHlldC4KK1N1cHBvcnQgQ0RBVEEgc2VjdGlvbnMgb24gaW5wdXQuCitEb24ndCBnZW5lcmF0ZSBidWlsdC1pbiBlbnRpdGllcyB3aXRoaW4gQ0RBVEEgZWxlbWVudHMuCisKK0NoYW5nZXMgZnJvbSAwLjkuMiB0byAwLjkuMzoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NvbnZlbmllbmNlIG1haW4gcHJvZ3JhbSAidGFnc291cCIgaW4gYmluIGRpcmVjdG9yeS4KK0JlZ2luIHRvIGludGVncmF0ZSB0ZXN0cy4KK0ludHJvZHVjZWQgQk9PTEVBTiB0eXBlIChjdXJyZW50bHkganVzdCBjb252ZXJ0ZWQgdG8gTk1UT0tFTikuCitGZWF0dXJlcyB0aGF0IGFjdHVhbGx5IHdvcmsgYXJlIG5vdyBuYW1lZCBjb25zdGFudHMgaW4gUGFyc2VyLgorRG91YmxlIHJvb3QgZWxlbWVudHMgYXJlIHJlYWxseSBnb25lIG5vdy4KK0lEIGF0dHJpYnV0ZXMgd2VyZW4ndCBiZWluZyByZW1vdmVkIGZyb20gcmVzdGFydGVkIGVsZW1lbnRzLgorRml4ZWQgYSBidWcgdGhhdCBtYWRlIHVua25vd24gZWxlbWVudHMgZGlzYXBwZWFyIGluIHNvbWUgY2FzZXMuCitQYXJzZXIgaXMgbm93IHNhZmVseSByZXVzYWJsZS4KK1BZWFdyaXRlciBhbmQgWE1MV3JpdGVyIG5vdyBpbXBsZW1lbnQgTGV4aWNhbEhhbmRsZXIuCitQYXJzZXIgcmVwb3J0cyBjb21tZW50cywgc3RhcnRDREFUQSwgYW5kIGVuZENEQVRBIGV2ZW50cyB0byBhIExleGljYWxIYW5kbGVyLgorU2NhbkhhbmRsZXIgbWV0aG9kcyBub3cgdGhyb3cgb25seSBTQVhFeGNlcHRpb24sIG5vdCBhbHNvIElPRXhjZXB0aW9uLgorLURsZXhpY2FsPXRydWUgc3dpdGNoIHNldHMgdGhlIENvbnRlbnRIYW5kbGVyIGFzIGEgTGV4aWNhbEhhbmRsZXIgYXMgd2VsbAorCShYTUxXcml0ZXIgcHJpbnRzIGNvbW1lbnRzLCBpZ25vcmVzIENEQVRBIHNlY3Rpb25zOyBQWVhXcml0ZXIgaWdub3JlcyBhbGwpLgorLURyZXVzZT10cnVlIHN3aXRjaCByZXVzZXMgYSBzaW5nbGUgUGFyc2VyIG9iamVjdCAobm8gZ3JlYXQgc3BlZWQgZ2FpbikuCitXZSBub3cgZGlzYWxsb3cgYW4gYSBlbGVtZW50IGFzIHRoZSBjaGlsZCBvZiBhbm90aGVyIGEgZWxlbWVudC4KK0FuIGVtcHR5IGlucHV0IGlzIG5vdyB0cmVhdGVkIGFzIHplcm8tbGVuZ3RoIGNoYXJhY3RlciBjb250ZW50LgorSFRNTFdyaXRlciBpcyBnb25lIGluIGZhdm9yIG9mIGFuIGV4dGVuZGVkIFhNTFdyaXRlciB3aXRoIGdldC9zZXRIVE1MTW9kZSBtZXRob2RzLgorQ0RBVEEgZWxlbWVudHMgb25seSB0ZXJtaW5hYXRlIHdpdGggbWF0Y2hpbmcgZW5kLXRhZ3MgKHRoYW5rcyB0byBTZWJhc3RpZW4gQmFyZG91eCkuCisKK0NoYW5nZXMgZnJvbSAwLjkuMSB0byAwLjkuMjoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK05vIGxvbmdlciBpbnNlcnRzIGJvZ3VzIDsgYWZ0ZXIgdW5rbm93biBlbnRpdHkgcmVmZXJlbmNlIHdpdGhvdXQgOy4KK0NvbnNlY3V0aXZlIGVudGl0eSByZWZlcmVuY2VzIG5vdyB3b3JrIGNvcnJlY3RseS4KK1NldHRpbmcgbmFtZXNwYWNlcyBhbmQgbmFtZXNwYWNlLXByZWZpeGVzIG1ldGhvZHMgbm93IHdvcmtzLgorLURub25zPXRydWUgb3B0aW9uIHR1cm5zIG9mZiBuYW1lc3BhY2UgYW5kIHByZWZpeC4KK05ldyBmZWF0dXJlIGh0dHA6Ly93d3cuY2NpbC5vcmcvfmNvd2FuL3RhZ3NvdXAvZmVhdHVyZXMvaWdub3JlLWJvZ29ucyIKKwlzdXBwcmVzc2VzIHVua25vd24gc3RhcnQtdGFncyAoYW55IGVuZC10YWcgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGlnbm9yZWQpLgorLURub2JvZ29ucz10cnVlIG9wdGlvbiB0dXJucyBpZ25vcmUtYm9nb25zIG9uLgorU3VwcHJlc3MgdW5rbm93biBhbmQvb3IgZW1wdHkgaW5pdGlhbCBzdGFydC10YWcgYWx3YXlzCisJKHByZXZlbnRzIGRvdWJsZSByb290IGVsZW1lbnQpLgorU2NoZW1hIG5vdyBhbGxvd3Mgc3R5bGUgYXMgYW4gaW5saW5lIGVsZW1lbnQsIGxpa2Ugc2NyaXB0LgorU2NoZW1hIG5vdyBhbGxvd3MgdHIgYXMgYSBjaGlsZCBvZiB0YWJsZSB0byBhdm9pZCBwcm9ibGVtcyB3aXRoIGVtYmVkZGVkIHRhYmxlcy4KK0NsZWFyIFBhcnNlciBpbnN0YW5jZSB2YXJpYWJsZXMgdG8gbWFrZSBQYXJzZXJzIHByb3Blcmx5IHJldXNhYmxlLgorCitDaGFuZ2VzIGZyb20gMC45IHRvIDAuOS4xOgorPT09PT09PT09PT09PT09PT09PT09PT09PT0KK0luY29ycG9yYXRlZCBwYXRjaCBmb3IgLWphciBzdXBwb3J0IGJ5IEpvc2VwaCBXYWx0b24uCitJbmNvcnBvcmF0ZWQgcGF0Y2ggZm9yIE1lZ2dpbnNvbiBYTUxXcml0ZXIgc3VwcG9ydCBieSBKb3NlcGggV2FsdG9uLgorQ2hhbmdlZCBleGlzdGluZyBYTUxXcml0ZXIgdG8gSFRNTFdyaXRlci4KK1Jld3JvdGUgUGFyc2VybWFpbiBmb3IgYmV0dGVyIGZlYXR1cmVzLCByZW1vdmVkIFRlc3RlciBjbGFzcy4KKy1EbmV3bGluZT10cnVlIHJlbW92ZWQsIG5vdyBpbXBsaWVkIGJ5IC1ESFRNTD10cnVlLgorLURmaWxlcz10cnVlIG5vdyB1c2VkIHRvIGdlbmVyYXRlIHNlcGFyYXRlIG91dHB1dHMgKG9sZCBUZXN0ZXIgYmVoYXZpb3IpCisJd2l0aCBleHRlbnNpb24geGh0bWwgKHJlbW92aW5nIGFueSBvbGQgZXh0ZW5zaW9uKS4KK0ZpeGVkIG5hc3R5IGJ1ZyBpbiBIVE1MU2Nhbm5lciB0aGF0IHdhcyBmYWlsaW5nIHRvIGZpeCB1bnVzdWFsIGVudGl0aWVzLgorRG9uJ3QgYXR0ZW1wdCB0byBzbWFzaCB3aGl0ZXNwYWNlIHRvIHNwYWNlcyBhbnkgbW9yZS4KKworQ2hhbmdlcyBmcm9tIDAuOCB0byAwLjk6Cis9PT09PT09PT09PT09PT09PT09PT09PT0KK0FudC1pZmllZCBieSBNYXJ0aW4gUmFkZW1hY2hlci4KK0Rvbid0IHN1cHByZXNzIGNvbG9ucyBpbiBlbGVtZW50IG5hbWVzLgorRW50aXR5IHByb2JsZW1zIGZpeGVkIChJIGhvcGUpLgorQ2FuIG5vdyBzZXQgbmFtZXNwYWNlIGFuZCBuYW1lc3BhY2UtcHJlZml4ZXMgZmVhdHVyZXMgKHdpdGhvdXQgZWZmZWN0KS4KK1Byb3Blcmx5IHRlbXBsYXRpemUgSFRNTE1vZGVscy5qYXZhLgorQXR0cmlidXRlcyBhcmUgbm8gbG9uZ2VyIGluIHRoZSBIVE1MIG5hbWVzcGFjZS4KZGlmZiAtLWdpdCBhL0xJQ0VOU0UgYi9MSUNFTlNFCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2MWVlYjkKLS0tIC9kZXYvbnVsbAorKysgYi9MSUNFTlNFCkBAIC0wLDAgKzEsMjAxIEBACisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcGFjaGUgTGljZW5zZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAyLjAsIEphbnVhcnkgMjAwNAorICAgICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzLworCisgICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgVVNFLCBSRVBST0RVQ1RJT04sIEFORCBESVNUUklCVVRJT04KKworICAgMS4gRGVmaW5pdGlvbnMuCisKKyAgICAgICJMaWNlbnNlIiBzaGFsbCBtZWFuIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgdXNlLCByZXByb2R1Y3Rpb24sCisgICAgICBhbmQgZGlzdHJpYnV0aW9uIGFzIGRlZmluZWQgYnkgU2VjdGlvbnMgMSB0aHJvdWdoIDkgb2YgdGhpcyBkb2N1bWVudC4KKworICAgICAgIkxpY2Vuc29yIiBzaGFsbCBtZWFuIHRoZSBjb3B5cmlnaHQgb3duZXIgb3IgZW50aXR5IGF1dGhvcml6ZWQgYnkKKyAgICAgIHRoZSBjb3B5cmlnaHQgb3duZXIgdGhhdCBpcyBncmFudGluZyB0aGUgTGljZW5zZS4KKworICAgICAgIkxlZ2FsIEVudGl0eSIgc2hhbGwgbWVhbiB0aGUgdW5pb24gb2YgdGhlIGFjdGluZyBlbnRpdHkgYW5kIGFsbAorICAgICAgb3RoZXIgZW50aXRpZXMgdGhhdCBjb250cm9sLCBhcmUgY29udHJvbGxlZCBieSwgb3IgYXJlIHVuZGVyIGNvbW1vbgorICAgICAgY29udHJvbCB3aXRoIHRoYXQgZW50aXR5LiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwKKyAgICAgICJjb250cm9sIiBtZWFucyAoaSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZQorICAgICAgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3IKKyAgICAgIG90aGVyd2lzZSwgb3IgKGlpKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZQorICAgICAgb3V0c3RhbmRpbmcgc2hhcmVzLCBvciAoaWlpKSBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KKworICAgICAgIllvdSIgKG9yICJZb3VyIikgc2hhbGwgbWVhbiBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eQorICAgICAgZXhlcmNpc2luZyBwZXJtaXNzaW9ucyBncmFudGVkIGJ5IHRoaXMgTGljZW5zZS4KKworICAgICAgIlNvdXJjZSIgZm9ybSBzaGFsbCBtZWFuIHRoZSBwcmVmZXJyZWQgZm9ybSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMsCisgICAgICBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHNvZnR3YXJlIHNvdXJjZSBjb2RlLCBkb2N1bWVudGF0aW9uCisgICAgICBzb3VyY2UsIGFuZCBjb25maWd1cmF0aW9uIGZpbGVzLgorCisgICAgICAiT2JqZWN0IiBmb3JtIHNoYWxsIG1lYW4gYW55IGZvcm0gcmVzdWx0aW5nIGZyb20gbWVjaGFuaWNhbAorICAgICAgdHJhbnNmb3JtYXRpb24gb3IgdHJhbnNsYXRpb24gb2YgYSBTb3VyY2UgZm9ybSwgaW5jbHVkaW5nIGJ1dAorICAgICAgbm90IGxpbWl0ZWQgdG8gY29tcGlsZWQgb2JqZWN0IGNvZGUsIGdlbmVyYXRlZCBkb2N1bWVudGF0aW9uLAorICAgICAgYW5kIGNvbnZlcnNpb25zIHRvIG90aGVyIG1lZGlhIHR5cGVzLgorCisgICAgICAiV29yayIgc2hhbGwgbWVhbiB0aGUgd29yayBvZiBhdXRob3JzaGlwLCB3aGV0aGVyIGluIFNvdXJjZSBvcgorICAgICAgT2JqZWN0IGZvcm0sIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSBMaWNlbnNlLCBhcyBpbmRpY2F0ZWQgYnkgYQorICAgICAgY29weXJpZ2h0IG5vdGljZSB0aGF0IGlzIGluY2x1ZGVkIGluIG9yIGF0dGFjaGVkIHRvIHRoZSB3b3JrCisgICAgICAoYW4gZXhhbXBsZSBpcyBwcm92aWRlZCBpbiB0aGUgQXBwZW5kaXggYmVsb3cpLgorCisgICAgICAiRGVyaXZhdGl2ZSBXb3JrcyIgc2hhbGwgbWVhbiBhbnkgd29yaywgd2hldGhlciBpbiBTb3VyY2Ugb3IgT2JqZWN0CisgICAgICBmb3JtLCB0aGF0IGlzIGJhc2VkIG9uIChvciBkZXJpdmVkIGZyb20pIHRoZSBXb3JrIGFuZCBmb3Igd2hpY2ggdGhlCisgICAgICBlZGl0b3JpYWwgcmV2aXNpb25zLCBhbm5vdGF0aW9ucywgZWxhYm9yYXRpb25zLCBvciBvdGhlciBtb2RpZmljYXRpb25zCisgICAgICByZXByZXNlbnQsIGFzIGEgd2hvbGUsIGFuIG9yaWdpbmFsIHdvcmsgb2YgYXV0aG9yc2hpcC4gRm9yIHRoZSBwdXJwb3NlcworICAgICAgb2YgdGhpcyBMaWNlbnNlLCBEZXJpdmF0aXZlIFdvcmtzIHNoYWxsIG5vdCBpbmNsdWRlIHdvcmtzIHRoYXQgcmVtYWluCisgICAgICBzZXBhcmFibGUgZnJvbSwgb3IgbWVyZWx5IGxpbmsgKG9yIGJpbmQgYnkgbmFtZSkgdG8gdGhlIGludGVyZmFjZXMgb2YsCisgICAgICB0aGUgV29yayBhbmQgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLgorCisgICAgICAiQ29udHJpYnV0aW9uIiBzaGFsbCBtZWFuIGFueSB3b3JrIG9mIGF1dGhvcnNoaXAsIGluY2x1ZGluZworICAgICAgdGhlIG9yaWdpbmFsIHZlcnNpb24gb2YgdGhlIFdvcmsgYW5kIGFueSBtb2RpZmljYXRpb25zIG9yIGFkZGl0aW9ucworICAgICAgdG8gdGhhdCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgdGhhdCBpcyBpbnRlbnRpb25hbGx5CisgICAgICBzdWJtaXR0ZWQgdG8gTGljZW5zb3IgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yayBieSB0aGUgY29weXJpZ2h0IG93bmVyCisgICAgICBvciBieSBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eSBhdXRob3JpemVkIHRvIHN1Ym1pdCBvbiBiZWhhbGYgb2YKKyAgICAgIHRoZSBjb3B5cmlnaHQgb3duZXIuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAic3VibWl0dGVkIgorICAgICAgbWVhbnMgYW55IGZvcm0gb2YgZWxlY3Ryb25pYywgdmVyYmFsLCBvciB3cml0dGVuIGNvbW11bmljYXRpb24gc2VudAorICAgICAgdG8gdGhlIExpY2Vuc29yIG9yIGl0cyByZXByZXNlbnRhdGl2ZXMsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8KKyAgICAgIGNvbW11bmljYXRpb24gb24gZWxlY3Ryb25pYyBtYWlsaW5nIGxpc3RzLCBzb3VyY2UgY29kZSBjb250cm9sIHN5c3RlbXMsCisgICAgICBhbmQgaXNzdWUgdHJhY2tpbmcgc3lzdGVtcyB0aGF0IGFyZSBtYW5hZ2VkIGJ5LCBvciBvbiBiZWhhbGYgb2YsIHRoZQorICAgICAgTGljZW5zb3IgZm9yIHRoZSBwdXJwb3NlIG9mIGRpc2N1c3NpbmcgYW5kIGltcHJvdmluZyB0aGUgV29yaywgYnV0CisgICAgICBleGNsdWRpbmcgY29tbXVuaWNhdGlvbiB0aGF0IGlzIGNvbnNwaWN1b3VzbHkgbWFya2VkIG9yIG90aGVyd2lzZQorICAgICAgZGVzaWduYXRlZCBpbiB3cml0aW5nIGJ5IHRoZSBjb3B5cmlnaHQgb3duZXIgYXMgIk5vdCBhIENvbnRyaWJ1dGlvbi4iCisKKyAgICAgICJDb250cmlidXRvciIgc2hhbGwgbWVhbiBMaWNlbnNvciBhbmQgYW55IGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5CisgICAgICBvbiBiZWhhbGYgb2Ygd2hvbSBhIENvbnRyaWJ1dGlvbiBoYXMgYmVlbiByZWNlaXZlZCBieSBMaWNlbnNvciBhbmQKKyAgICAgIHN1YnNlcXVlbnRseSBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrLgorCisgICAyLiBHcmFudCBvZiBDb3B5cmlnaHQgTGljZW5zZS4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKKyAgICAgIHRoaXMgTGljZW5zZSwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIHRvIFlvdSBhIHBlcnBldHVhbCwKKyAgICAgIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlCisgICAgICBjb3B5cmlnaHQgbGljZW5zZSB0byByZXByb2R1Y2UsIHByZXBhcmUgRGVyaXZhdGl2ZSBXb3JrcyBvZiwKKyAgICAgIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIHN1YmxpY2Vuc2UsIGFuZCBkaXN0cmlidXRlIHRoZQorICAgICAgV29yayBhbmQgc3VjaCBEZXJpdmF0aXZlIFdvcmtzIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybS4KKworICAgMy4gR3JhbnQgb2YgUGF0ZW50IExpY2Vuc2UuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCisgICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsCisgICAgICB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZQorICAgICAgKGV4Y2VwdCBhcyBzdGF0ZWQgaW4gdGhpcyBzZWN0aW9uKSBwYXRlbnQgbGljZW5zZSB0byBtYWtlLCBoYXZlIG1hZGUsCisgICAgICB1c2UsIG9mZmVyIHRvIHNlbGwsIHNlbGwsIGltcG9ydCwgYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgV29yaywKKyAgICAgIHdoZXJlIHN1Y2ggbGljZW5zZSBhcHBsaWVzIG9ubHkgdG8gdGhvc2UgcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlCisgICAgICBieSBzdWNoIENvbnRyaWJ1dG9yIHRoYXQgYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGVpcgorICAgICAgQ29udHJpYnV0aW9uKHMpIGFsb25lIG9yIGJ5IGNvbWJpbmF0aW9uIG9mIHRoZWlyIENvbnRyaWJ1dGlvbihzKQorICAgICAgd2l0aCB0aGUgV29yayB0byB3aGljaCBzdWNoIENvbnRyaWJ1dGlvbihzKSB3YXMgc3VibWl0dGVkLiBJZiBZb3UKKyAgICAgIGluc3RpdHV0ZSBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhCisgICAgICBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0IHRoZSBXb3JrCisgICAgICBvciBhIENvbnRyaWJ1dGlvbiBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrIGNvbnN0aXR1dGVzIGRpcmVjdAorICAgICAgb3IgY29udHJpYnV0b3J5IHBhdGVudCBpbmZyaW5nZW1lbnQsIHRoZW4gYW55IHBhdGVudCBsaWNlbnNlcworICAgICAgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlIGZvciB0aGF0IFdvcmsgc2hhbGwgdGVybWluYXRlCisgICAgICBhcyBvZiB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuCisKKyAgIDQuIFJlZGlzdHJpYnV0aW9uLiBZb3UgbWF5IHJlcHJvZHVjZSBhbmQgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlCisgICAgICBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiBpbiBhbnkgbWVkaXVtLCB3aXRoIG9yIHdpdGhvdXQKKyAgICAgIG1vZGlmaWNhdGlvbnMsIGFuZCBpbiBTb3VyY2Ugb3IgT2JqZWN0IGZvcm0sIHByb3ZpZGVkIHRoYXQgWW91CisgICAgICBtZWV0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworICAgICAgKGEpIFlvdSBtdXN0IGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFdvcmsgb3IKKyAgICAgICAgICBEZXJpdmF0aXZlIFdvcmtzIGEgY29weSBvZiB0aGlzIExpY2Vuc2U7IGFuZAorCisgICAgICAoYikgWW91IG11c3QgY2F1c2UgYW55IG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCisgICAgICAgICAgc3RhdGluZyB0aGF0IFlvdSBjaGFuZ2VkIHRoZSBmaWxlczsgYW5kCisKKyAgICAgIChjKSBZb3UgbXVzdCByZXRhaW4sIGluIHRoZSBTb3VyY2UgZm9ybSBvZiBhbnkgRGVyaXZhdGl2ZSBXb3JrcworICAgICAgICAgIHRoYXQgWW91IGRpc3RyaWJ1dGUsIGFsbCBjb3B5cmlnaHQsIHBhdGVudCwgdHJhZGVtYXJrLCBhbmQKKyAgICAgICAgICBhdHRyaWJ1dGlvbiBub3RpY2VzIGZyb20gdGhlIFNvdXJjZSBmb3JtIG9mIHRoZSBXb3JrLAorICAgICAgICAgIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90IHBlcnRhaW4gdG8gYW55IHBhcnQgb2YKKyAgICAgICAgICB0aGUgRGVyaXZhdGl2ZSBXb3JrczsgYW5kCisKKyAgICAgIChkKSBJZiB0aGUgV29yayBpbmNsdWRlcyBhICJOT1RJQ0UiIHRleHQgZmlsZSBhcyBwYXJ0IG9mIGl0cworICAgICAgICAgIGRpc3RyaWJ1dGlvbiwgdGhlbiBhbnkgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlIG11c3QKKyAgICAgICAgICBpbmNsdWRlIGEgcmVhZGFibGUgY29weSBvZiB0aGUgYXR0cmlidXRpb24gbm90aWNlcyBjb250YWluZWQKKyAgICAgICAgICB3aXRoaW4gc3VjaCBOT1RJQ0UgZmlsZSwgZXhjbHVkaW5nIHRob3NlIG5vdGljZXMgdGhhdCBkbyBub3QKKyAgICAgICAgICBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpbiBhdCBsZWFzdCBvbmUKKyAgICAgICAgICBvZiB0aGUgZm9sbG93aW5nIHBsYWNlczogd2l0aGluIGEgTk9USUNFIHRleHQgZmlsZSBkaXN0cmlidXRlZAorICAgICAgICAgIGFzIHBhcnQgb2YgdGhlIERlcml2YXRpdmUgV29ya3M7IHdpdGhpbiB0aGUgU291cmNlIGZvcm0gb3IKKyAgICAgICAgICBkb2N1bWVudGF0aW9uLCBpZiBwcm92aWRlZCBhbG9uZyB3aXRoIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyBvciwKKyAgICAgICAgICB3aXRoaW4gYSBkaXNwbGF5IGdlbmVyYXRlZCBieSB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaWYgYW5kCisgICAgICAgICAgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBub3RpY2VzIG5vcm1hbGx5IGFwcGVhci4gVGhlIGNvbnRlbnRzCisgICAgICAgICAgb2YgdGhlIE5PVElDRSBmaWxlIGFyZSBmb3IgaW5mb3JtYXRpb25hbCBwdXJwb3NlcyBvbmx5IGFuZAorICAgICAgICAgIGRvIG5vdCBtb2RpZnkgdGhlIExpY2Vuc2UuIFlvdSBtYXkgYWRkIFlvdXIgb3duIGF0dHJpYnV0aW9uCisgICAgICAgICAgbm90aWNlcyB3aXRoaW4gRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbG9uZ3NpZGUKKyAgICAgICAgICBvciBhcyBhbiBhZGRlbmR1bSB0byB0aGUgTk9USUNFIHRleHQgZnJvbSB0aGUgV29yaywgcHJvdmlkZWQKKyAgICAgICAgICB0aGF0IHN1Y2ggYWRkaXRpb25hbCBhdHRyaWJ1dGlvbiBub3RpY2VzIGNhbm5vdCBiZSBjb25zdHJ1ZWQKKyAgICAgICAgICBhcyBtb2RpZnlpbmcgdGhlIExpY2Vuc2UuCisKKyAgICAgIFlvdSBtYXkgYWRkIFlvdXIgb3duIGNvcHlyaWdodCBzdGF0ZW1lbnQgdG8gWW91ciBtb2RpZmljYXRpb25zIGFuZAorICAgICAgbWF5IHByb3ZpZGUgYWRkaXRpb25hbCBvciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBhbmQgY29uZGl0aW9ucworICAgICAgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLCBvciBkaXN0cmlidXRpb24gb2YgWW91ciBtb2RpZmljYXRpb25zLCBvcgorICAgICAgZm9yIGFueSBzdWNoIERlcml2YXRpdmUgV29ya3MgYXMgYSB3aG9sZSwgcHJvdmlkZWQgWW91ciB1c2UsCisgICAgICByZXByb2R1Y3Rpb24sIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlIFdvcmsgb3RoZXJ3aXNlIGNvbXBsaWVzIHdpdGgKKyAgICAgIHRoZSBjb25kaXRpb25zIHN0YXRlZCBpbiB0aGlzIExpY2Vuc2UuCisKKyAgIDUuIFN1Ym1pc3Npb24gb2YgQ29udHJpYnV0aW9ucy4gVW5sZXNzIFlvdSBleHBsaWNpdGx5IHN0YXRlIG90aGVyd2lzZSwKKyAgICAgIGFueSBDb250cmlidXRpb24gaW50ZW50aW9uYWxseSBzdWJtaXR0ZWQgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yaworICAgICAgYnkgWW91IHRvIHRoZSBMaWNlbnNvciBzaGFsbCBiZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKKyAgICAgIHRoaXMgTGljZW5zZSwgd2l0aG91dCBhbnkgYWRkaXRpb25hbCB0ZXJtcyBvciBjb25kaXRpb25zLgorICAgICAgTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgbm90aGluZyBoZXJlaW4gc2hhbGwgc3VwZXJzZWRlIG9yIG1vZGlmeQorICAgICAgdGhlIHRlcm1zIG9mIGFueSBzZXBhcmF0ZSBsaWNlbnNlIGFncmVlbWVudCB5b3UgbWF5IGhhdmUgZXhlY3V0ZWQKKyAgICAgIHdpdGggTGljZW5zb3IgcmVnYXJkaW5nIHN1Y2ggQ29udHJpYnV0aW9ucy4KKworICAgNi4gVHJhZGVtYXJrcy4gVGhpcyBMaWNlbnNlIGRvZXMgbm90IGdyYW50IHBlcm1pc3Npb24gdG8gdXNlIHRoZSB0cmFkZQorICAgICAgbmFtZXMsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3MsIG9yIHByb2R1Y3QgbmFtZXMgb2YgdGhlIExpY2Vuc29yLAorICAgICAgZXhjZXB0IGFzIHJlcXVpcmVkIGZvciByZWFzb25hYmxlIGFuZCBjdXN0b21hcnkgdXNlIGluIGRlc2NyaWJpbmcgdGhlCisgICAgICBvcmlnaW4gb2YgdGhlIFdvcmsgYW5kIHJlcHJvZHVjaW5nIHRoZSBjb250ZW50IG9mIHRoZSBOT1RJQ0UgZmlsZS4KKworICAgNy4gRGlzY2xhaW1lciBvZiBXYXJyYW50eS4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yCisgICAgICBhZ3JlZWQgdG8gaW4gd3JpdGluZywgTGljZW5zb3IgcHJvdmlkZXMgdGhlIFdvcmsgKGFuZCBlYWNoCisgICAgICBDb250cmlidXRvciBwcm92aWRlcyBpdHMgQ29udHJpYnV0aW9ucykgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgorICAgICAgaW1wbGllZCwgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIGFueSB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMKKyAgICAgIG9mIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIG9yIEZJVE5FU1MgRk9SIEEKKyAgICAgIFBBUlRJQ1VMQVIgUFVSUE9TRS4gWW91IGFyZSBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZQorICAgICAgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIG9yIHJlZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGFuZCBhc3N1bWUgYW55CisgICAgICByaXNrcyBhc3NvY2lhdGVkIHdpdGggWW91ciBleGVyY2lzZSBvZiBwZXJtaXNzaW9ucyB1bmRlciB0aGlzIExpY2Vuc2UuCisKKyAgIDguIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LiBJbiBubyBldmVudCBhbmQgdW5kZXIgbm8gbGVnYWwgdGhlb3J5LAorICAgICAgd2hldGhlciBpbiB0b3J0IChpbmNsdWRpbmcgbmVnbGlnZW5jZSksIGNvbnRyYWN0LCBvciBvdGhlcndpc2UsCisgICAgICB1bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgKHN1Y2ggYXMgZGVsaWJlcmF0ZSBhbmQgZ3Jvc3NseQorICAgICAgbmVnbGlnZW50IGFjdHMpIG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzaGFsbCBhbnkgQ29udHJpYnV0b3IgYmUKKyAgICAgIGxpYWJsZSB0byBZb3UgZm9yIGRhbWFnZXMsIGluY2x1ZGluZyBhbnkgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwKKyAgICAgIGluY2lkZW50YWwsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvZiBhbnkgY2hhcmFjdGVyIGFyaXNpbmcgYXMgYQorICAgICAgcmVzdWx0IG9mIHRoaXMgTGljZW5zZSBvciBvdXQgb2YgdGhlIHVzZSBvciBpbmFiaWxpdHkgdG8gdXNlIHRoZQorICAgICAgV29yayAoaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBkYW1hZ2VzIGZvciBsb3NzIG9mIGdvb2R3aWxsLAorICAgICAgd29yayBzdG9wcGFnZSwgY29tcHV0ZXIgZmFpbHVyZSBvciBtYWxmdW5jdGlvbiwgb3IgYW55IGFuZCBhbGwKKyAgICAgIG90aGVyIGNvbW1lcmNpYWwgZGFtYWdlcyBvciBsb3NzZXMpLCBldmVuIGlmIHN1Y2ggQ29udHJpYnV0b3IKKyAgICAgIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcy4KKworICAgOS4gQWNjZXB0aW5nIFdhcnJhbnR5IG9yIEFkZGl0aW9uYWwgTGlhYmlsaXR5LiBXaGlsZSByZWRpc3RyaWJ1dGluZworICAgICAgdGhlIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLCBZb3UgbWF5IGNob29zZSB0byBvZmZlciwKKyAgICAgIGFuZCBjaGFyZ2UgYSBmZWUgZm9yLCBhY2NlcHRhbmNlIG9mIHN1cHBvcnQsIHdhcnJhbnR5LCBpbmRlbW5pdHksCisgICAgICBvciBvdGhlciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgYW5kL29yIHJpZ2h0cyBjb25zaXN0ZW50IHdpdGggdGhpcworICAgICAgTGljZW5zZS4gSG93ZXZlciwgaW4gYWNjZXB0aW5nIHN1Y2ggb2JsaWdhdGlvbnMsIFlvdSBtYXkgYWN0IG9ubHkKKyAgICAgIG9uIFlvdXIgb3duIGJlaGFsZiBhbmQgb24gWW91ciBzb2xlIHJlc3BvbnNpYmlsaXR5LCBub3Qgb24gYmVoYWxmCisgICAgICBvZiBhbnkgb3RoZXIgQ29udHJpYnV0b3IsIGFuZCBvbmx5IGlmIFlvdSBhZ3JlZSB0byBpbmRlbW5pZnksCisgICAgICBkZWZlbmQsIGFuZCBob2xkIGVhY2ggQ29udHJpYnV0b3IgaGFybWxlc3MgZm9yIGFueSBsaWFiaWxpdHkKKyAgICAgIGluY3VycmVkIGJ5LCBvciBjbGFpbXMgYXNzZXJ0ZWQgYWdhaW5zdCwgc3VjaCBDb250cmlidXRvciBieSByZWFzb24KKyAgICAgIG9mIHlvdXIgYWNjZXB0aW5nIGFueSBzdWNoIHdhcnJhbnR5IG9yIGFkZGl0aW9uYWwgbGlhYmlsaXR5LgorCisgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKworICAgQVBQRU5ESVg6IEhvdyB0byBhcHBseSB0aGUgQXBhY2hlIExpY2Vuc2UgdG8geW91ciB3b3JrLgorCisgICAgICBUbyBhcHBseSB0aGUgQXBhY2hlIExpY2Vuc2UgdG8geW91ciB3b3JrLCBhdHRhY2ggdGhlIGZvbGxvd2luZworICAgICAgYm9pbGVycGxhdGUgbm90aWNlLCB3aXRoIHRoZSBmaWVsZHMgZW5jbG9zZWQgYnkgYnJhY2tldHMgIltdIgorICAgICAgcmVwbGFjZWQgd2l0aCB5b3VyIG93biBpZGVudGlmeWluZyBpbmZvcm1hdGlvbi4gKERvbid0IGluY2x1ZGUKKyAgICAgIHRoZSBicmFja2V0cyEpICBUaGUgdGV4dCBzaG91bGQgYmUgZW5jbG9zZWQgaW4gdGhlIGFwcHJvcHJpYXRlCisgICAgICBjb21tZW50IHN5bnRheCBmb3IgdGhlIGZpbGUgZm9ybWF0LiBXZSBhbHNvIHJlY29tbWVuZCB0aGF0IGEKKyAgICAgIGZpbGUgb3IgY2xhc3MgbmFtZSBhbmQgZGVzY3JpcHRpb24gb2YgcHVycG9zZSBiZSBpbmNsdWRlZCBvbiB0aGUKKyAgICAgIHNhbWUgInByaW50ZWQgcGFnZSIgYXMgdGhlIGNvcHlyaWdodCBub3RpY2UgZm9yIGVhc2llcgorICAgICAgaWRlbnRpZmljYXRpb24gd2l0aGluIHRoaXJkLXBhcnR5IGFyY2hpdmVzLgorCisgICBDb3B5cmlnaHQgW3l5eXldIFtuYW1lIG9mIGNvcHlyaWdodCBvd25lcl0KKworICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KZGlmZiAtLWdpdCBhL1JFQURNRSBiL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTcxODE5Ci0tLSAvZGV2L251bGwKKysrIGIvUkVBRE1FCkBAIC0wLDAgKzEsMzU3IEBACisgICAgICAgICAgICAgICAgICAgICAgICBUYWdTb3VwIC0gSnVzdCBLZWVwIE9uIFRydWNraW4nCisKKyAgSW50cm9kdWN0aW9uCisKKyAgIFRoaXMgaXMgdGhlIGhvbWUgcGFnZSBvZiBUYWdTb3VwLCBhIFNBWC1jb21wbGlhbnQgcGFyc2VyIHdyaXR0ZW4gaW4KKyAgIEphdmEgdGhhdCwgaW5zdGVhZCBvZiBwYXJzaW5nIHdlbGwtZm9ybWVkIG9yIHZhbGlkIFhNTCwgcGFyc2VzIEhUTUwgYXMKKyAgIGl0IGlzIGZvdW5kIGluIHRoZSB3aWxkOiBbMV1wb29yLCBuYXN0eSBhbmQgYnJ1dGlzaCwgdGhvdWdoIHF1aXRlIG9mdGVuCisgICBmYXIgZnJvbSBzaG9ydC4gVGFnU291cCBpcyBkZXNpZ25lZCBmb3IgcGVvcGxlIHdobyBoYXZlIHRvIHByb2Nlc3MgdGhpcworICAgc3R1ZmYgdXNpbmcgc29tZSBzZW1ibGFuY2Ugb2YgYSByYXRpb25hbCBhcHBsaWNhdGlvbiBkZXNpZ24uIEJ5CisgICBwcm92aWRpbmcgYSBTQVggaW50ZXJmYWNlLCBpdCBhbGxvd3Mgc3RhbmRhcmQgWE1MIHRvb2xzIHRvIGJlIGFwcGxpZWQKKyAgIHRvIGV2ZW4gdGhlIHdvcnN0IEhUTUwuIFRhZ1NvdXAgYWxzbyBpbmNsdWRlcyBhIGNvbW1hbmQtbGluZSBwcm9jZXNzb3IKKyAgIHRoYXQgcmVhZHMgSFRNTCBmaWxlcyBhbmQgY2FuIGdlbmVyYXRlIGVpdGhlciBjbGVhbiBIVE1MIG9yIHdlbGwtZm9ybWVkCisgICBYTUwgdGhhdCBpcyBhIGNsb3NlIGFwcHJveGltYXRpb24gdG8gWEhUTUwuCisKKyAgIFRoaXMgaXMgYWxzbyB0aGUgUkVBRE1FIGZpbGUgcGFja2FnZWQgd2l0aCBUYWdTb3VwLgorCisgICBUYWdTb3VwIGlzIGZyZWUgYW5kIE9wZW4gU291cmNlIHNvZnR3YXJlLiBBcyBvZiB2ZXJzaW9uIDEuMiwgaXQgaXMKKyAgIGxpY2Vuc2VkIHVuZGVyIHRoZSBbMl1BcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAsIHdoaWNoIGFsbG93cworICAgcHJvcHJpZXRhcnkgcmUtdXNlIGFzIHdlbGwgYXMgdXNlIHdpdGggR1BMIDMuMCBvciBHUEwgMi4wLW9yLWxhdGVyCisgICBwcm9qZWN0cy4gKElmIGFueW9uZSBuZWVkcyBhIEdQTCAyLjAgbGljZW5zZSBmb3IgYSBHUEwgMi4wLW9ubHkKKyAgIHByb2plY3QsIGZlZWwgZnJlZSB0byBhc2suKQorCisgIFdhcm5pbmc6IFRhZ1NvdXAgd2lsbCBub3QgYnVpbGQgb24gc3RvY2sgSmF2YSA1Lnggb3IgNi54IQorCisgICBEdWUgdG8gYSBidWcgaW4gdGhlIHZlcnNpb25zIG9mIFhhbGFuIHNoaXBwZWQgd2l0aCBKYXZhIDUueCBhbmQgNi54LAorICAgVGFnU291cCB3aWxsIG5vdCBidWlsZCBvdXQgb2YgdGhlIGJveC4gWW91IG5lZWQgdG8gcmV0cmlldmUgWzNdU2F4b24KKyAgIDYuNS41LCB3aGljaCBkb2VzIG5vdCBoYXZlIHRoZSBidWcuIFVucGFjayB0aGUgemlwZmlsZSBpbiBhbiBlbXB0eQorICAgZGlyZWN0b3J5IGFuZCBjb3B5IHRoZSBzYXhvbi5qYXIgYW5kIHNheG9uLXhtbC1hcGlzLmphciBmaWxlcyB0bworICAgJEFOVF9IT01FL2xpYi4gVGhlIEFudCBidWlsZCBwcm9jZXNzIGZvciBUYWdTb3VwIHdpbGwgdGhlbiBub3RpY2UgdGhhdAorICAgU2F4b24gaXMgYXZhaWxhYmxlIGFuZCB1c2UgaXQgaW5zdGVhZC4KKworICBUYWdTb3VwIDEuMiByZWxlYXNlZAorCisgICBUaGVyZSBhcmUgYSBncmVhdCBtYW55IGNoYW5nZXMsIG1vc3Qgb2YgdGhlbSBmaXhlcyBmb3IgbG9uZy1zdGFuZGluZworICAgYnVncywgaW4gdGhpcyByZWxlYXNlLiBPbmx5IHRoZSBtb3N0IGltcG9ydGFudCBhcmUgbGlzdGVkIGhlcmU7IGZvciB0aGUKKyAgIHJlc3QsIHNlZSB0aGUgQ0hBTkdFUyBmaWxlIGluIHRoZSBzb3VyY2UgZGlzdHJpYnV0aW9uLiBWZXJ5IHNwZWNpYWwKKyAgIHRoYW5rcyB0byBKb2pvIERpamFtY28sIHdob3NlIGludGVuc2l2ZSBlZmZvcnRzIGF0IGRlYnVnZ2luZyBtYWRlIHRoaXMKKyAgIHJlbGVhc2UgYSB1c2FibGUgdXBncmFkZSByYXRoZXIgdGhhbiBhIHVzZWxlc3MgbWFzcyBvZiB1bmRldGVjdGVkIGJ1Z3MuCisgICAgICogQXMgbm90ZWQgYWJvdmUsIEkgaGF2ZSBjaGFuZ2VkIHRoZSBsaWNlbnNlIHRvIEFwYWNoZSAyLjAuCisgICAgICogVGhlIGRlZmF1bHQgY29udGVudCBtb2RlbCBmb3IgYm9nb25zICh1bmtub3duIGVsZW1lbnRzKSBpcyBub3cgQU5ZCisgICAgICAgcmF0aGVyIHRoYW4gRU1QVFkuIFRoaXMgaXMgYSBicmVha2luZyBjaGFuZ2UsIHdoaWNoIEkgaGF2ZSBkb25lCisgICAgICAgb25seSBiZWNhdXNlIHRoZXJlIHdhcyBzbyBtdWNoIGRlbWFuZCBmb3IgaXQuIEl0IGNhbiBiZSB1bmRvbmUgb24KKyAgICAgICB0aGUgY29tbWFuZCBsaW5lIHdpdGggdGhlIC0tZW1wdHlib2dvbnMgc3dpdGNoLCBvciBwcm9ncmFtbWF0aWNhbGx5CisgICAgICAgd2l0aCBwYXJzZXIuc2V0RmVhdHVyZShQYXJzZXIuZW1wdHlCb2dvbnNGZWF0dXJlLCB0cnVlKS4KKyAgICAgKiBUaGUgcHJvY2Vzc2luZyBvZiBlbnRpdHkgcmVmZXJlbmNlcyBpbiBhdHRyaWJ1dGUgdmFsdWVzIGhhcyBmaW5hbGx5CisgICAgICAgYmVlbiBmaXhlZCB0byBkbyB3aGF0IGJyb3dzZXJzIGRvLiBUaGF0IGlzLCBhIHJlZmVyZW5jZSBpcyBvbmx5CisgICAgICAgcmVjb2duaXplZCBpZiBpdCBpcyBwcm9wZXJseSB0ZXJtaW5hdGVkIGJ5IGEgc2VtaWNvbG9uOyBvdGhlcndpc2UKKyAgICAgICBpdCBpcyB0cmVhdGVkIGFzIHBsYWluIHRleHQuIFRoaXMgbWVhbnMgdGhhdCBVUklzIGxpa2UKKyAgICAgICBmb28/Y2Rvd249MzImY3VwPTQyIGFyZSBubyBsb25nZXIgc2VlbiBhcyBjb250YWluaW5nIGFuIGluc3RhbmNlIG9mCisgICAgICAgdGhlIClVIGNoYXJhY3RlciAod2hvc2UgbmFtZSBoYXBwZW5zIHRvIGJlIGN1cCkuCisgICAgICogU2V2ZXJhbCBuZXcgc3dpdGNoZXMgaGF2ZSBiZWVuIGFkZGVkOgorICAgICAgICAgICsgLS1kb2N0eXBlLXN5c3RlbSBhbmQgLS1kb2N0eXBlLXB1YmxpYyBmb3JjZSBhIERPQ1RZUEUKKyAgICAgICAgICAgIGRlY2xhcmF0aW9uIHRvIGJlIG91dHB1dCBhbmQgYWxsb3cgc2V0dGluZyB0aGUgc3lzdGVtIGFuZAorICAgICAgICAgICAgcHVibGljIGlkZW50aWZpZXJzLgorICAgICAgICAgICsgLS1zdGFuZGFsb25lIGFuZCAtLXZlcnNpb24gYWxsb3cgY29udHJvbCBvZiB0aGUgWE1MCisgICAgICAgICAgICBkZWNsYXJhdGlvbiB0aGF0IGlzIG91dHB1dC4gKE5vdGUgdGhhdCBUYWdTb3VwJ3MgWE1MIG91dHB1dCBpcworICAgICAgICAgICAgYWx3YXlzIHZlcnNpb24gMS4wLCBldmVuIGlmIHlvdSB1c2UgLS12ZXJzaW9uPTEuMS4pCisgICAgICAgICAgKyAtLW5vcm9vdGJvZ29ucyBjYXVzZXMgdW5rbm93biBlbGVtZW50cyBub3QgdG8gYmUgYWxsb3dlZCBhcworICAgICAgICAgICAgdGhlIGRvY3VtZW50IHJvb3QgZWxlbWVudC4gSW5zdGVhZCwgdGhleSBhcmUgbWFkZSBjaGlsZHJlbiBvZgorICAgICAgICAgICAgdGhlIGRlZmF1bHQgcm9vdCBlbGVtZW50ICh0aGUgaHRtbCBlbGVtZW50IGZvciBIVE1MKS4KKyAgICAgKiBUaGUgVGFnU291cCBjb3JlIG5vdyBzdXBwb3J0cyBjaGFyYWN0ZXIgZW50aXRpZXMgd2l0aCB2YWx1ZXMgYWJvdmUKKyAgICAgICBVK0ZGRkYuIEFzIGEgY29uc2VxdWVuY2UsIHRoZSBIVE1MIHNjaGVtYSBub3cgc3VwcG9ydHMgYWxsIDIsMjEwCisgICAgICAgc3RhbmRhcmQgY2hhcmFjdGVyIGVudGl0aWVzIGZyb20gdGhlIFs0XTIwMDctMTItMTQgZHJhZnQgb2YgWE1MCisgICAgICAgRW50aXR5IERlZmluaXRpb25zIGZvciBDaGFyYWN0ZXJzLCBleGNlcHQgdGhlIDk0IHdoaWNoIHJlcXVpcmUgbW9yZQorICAgICAgIHRoYW4gb25lIFVuaWNvZGUgY2hhcmFjdGVyIHRvIHJlcHJlc2VudC4KKyAgICAgKiBUaGUgU0FYIGV2ZW50cyBzdGFydFByZWZpeE1hcHBpbmcgYW5kIGVuZFByZWZpeE1hcHBpbmcgYXJlIG5vdworICAgICAgIGJlaW5nIHJlcG9ydGVkIGZvciBhbGwgY2FzZXMgb2YgZm9yZWlnbiBlbGVtZW50cyBhbmQgYXR0cmlidXRlcy4KKyAgICAgKiBBbGwgYnVncyBhcm91bmQgbmV3bGluZSBwcm9jZXNzaW5nIG9uIFdpbmRvd3Mgc2hvdWxkIG5vdyBiZSBnb25lLgorICAgICAqIEEgbnVtYmVyIG9mIGNvbnRlbnQgbW9kZWxzIGhhdmUgYmVlbiBsb29zZW5lZCB0byBhbGxvdyBlbGVtZW50cyB0bworICAgICAgIGFwcGVhciBpbiBuZXcgYW5kIG5vbi1zdGFuZGFyZCAoYnV0IGNvbW1vbmx5IGZvdW5kKSBwbGFjZXMuIEluCisgICAgICAgcGFydGljdWxhciwgdGFibGVzIGFyZSBub3cgYWxsb3dlZCBpbnNpZGUgcGFyYWdyYXBocywgYWdhaW5zdCB0aGUKKyAgICAgICBsZXR0ZXIgb2YgdGhlIFczQyBzcGVjaWZpY2F0aW9uLgorICAgICAqIFNpbmNlIHRoZSBzcGFuIGVsZW1lbnQgaXMgaW50ZW5kZWQgZm9yIGZpbmUgY29udHJvbCBvZiBhcHBlYXJhbmNlCisgICAgICAgdXNpbmcgQ1NTLCBpdCBzaG91bGQgbmV2ZXIgaGF2ZSBiZWVuIGEgcmVzdGFydGFibGUgZWxlbWVudC4gVGhpcworICAgICAgIHZlcnkgbG9uZy1zdGFuZGluZyBidWcgaGFzIG5vdyBiZWVuIGZpeGVkLgorICAgICAqIFRoZSBmb2xsb3dpbmcgbm9uLXN0YW5kYXJkIGVsZW1lbnRzIGFyZSBub3cgYXQgbGVhc3QgcGFydGx5CisgICAgICAgc3VwcG9ydGVkOiBiZ3NvdW5kLCBibGluaywgY2FudmFzLCBjb21tZW50LCBsaXN0aW5nLCBtYXJxdWVlLCBub2JyLAorICAgICAgIHJiYywgcmIsIHJwLCBydGMsIHJ0LCBydWJ5LCB3YnIsIHhtcC4KKyAgICAgKiBJbiBIVE1MIG91dHB1dCBtb2RlLCBib29sZWFuIGF0dHJpYnV0ZXMgbGlrZSBjaGVja2VkIGFyZSBub3cgb3V0cHV0CisgICAgICAgYXMgc3VjaCwgcmF0aGVyIHRoYW4gaW4gWE1MIHN0eWxlIGFzIGNoZWNrZWQ9ImNoZWNrZWQiLgorICAgICAqIFJ1bnMgb2YgPCBjaGFyYWN0ZXJzIHN1Y2ggYXMgPDwgYW5kIDw8PCBhcmUgbm93IGhhbmRsZWQgY29ycmVjdGx5CisgICAgICAgaW4gdGV4dCByYXRoZXIgdGhhbiBiZWluZyB0cmFuc2Zvcm1lZCBpbnRvIGV4dHJlbWVseSBib2d1cworICAgICAgIHN0YXJ0LXRhZ3MuCisKKyAgIFs1XURvd25sb2FkIHRoZSBUYWdTb3VwIDEuMiBqYXIgZmlsZSBoZXJlLiBJdCdzIGFib3V0IDg3SyBsb25nLgorICAgWzZdRG93bmxvYWQgdGhlIGZ1bGwgVGFnU291cCAxLjIgc291cmNlIGhlcmUuIElmIHlvdSBkb24ndCBoYXZlIHppcCwKKyAgIHlvdSBjYW4gdXNlIGphciB0byB1bnBhY2sgaXQuCisgICBbN11Eb3dubG9hZCB0aGUgY3VycmVudCBDSEFOR0VTIGZpbGUgaGVyZS4KKworICBUYWdTb3VwIDEuMSByZWxlYXNlZAorCisgICBUYWdTb3VwIDEuMSBhZGRzIFRhdHUgU2Fsb3JhbnRhJ3MgSkFYUCBzdXBwb3J0IGZvciBUYWdTb3VwLiBUbyB1c2UKKyAgIFRhZ1NvdXAgd2l0aGluIHRoZSBKQVhQIGZyYW1ld29yayAod2hpY2ggaXMgbm90IHNvbWV0aGluZyBJIG5lY2Vzc2FyaWx5CisgICByZWNvbW1lbmQsIGJ1dCBpdCBpcyBwYXJ0IG9mIHRoZSBKYXZhIFhNTCBwbGF0Zm9ybSksIHlvdSBjYW4gY3JlYXRlIGEKKyAgIFNBWFBhcnNlciBieSBjYWxsaW5nCisgICBvcmcuY2NpbC5jb3dhbi50YWdzb3VwLmpheHAuU0FYUGFyc2VySW1wbC5uZXdJbnN0YW5jZSgpLiBZb3UgY2FuIGFsc28KKyAgIHNldCB0aGUgc3lzdGVtIHByb3BlcnR5IGphdmF4LnhtbC5wYXJzZXJzLlNBWFBhcnNlckZhY3RvcnkgdG8KKyAgIG9yZy5jY2lsLmNvd2FuLnRhZ3NvdXAuamF4cC5TQVhGYWN0b3J5SW1wbCwgYnV0IGJlIGF3YXJlIHRoYXQgZG9pbmcKKyAgIHRoaXMgd2lsbCBjYXVzZSBhbGwgSkFYUC1iYXNlZCBYTUwgcGFyc2luZyB0byBnbyB0aHJvdWdoIFRhZ1NvdXAsIHdoaWNoCisgICBpcyBhIEJhZCBUaGluZyBpZiB5b3VyIGFwcGxpY2F0aW9uIGFsc28gcmVhZHMgWE1MIGRvY3VtZW50cy4KKworICBXaGF0IFRhZ1NvdXAgZG9lcworCisgICBUYWdTb3VwIGlzIGRlc2lnbmVkIGFzIGEgcGFyc2VyLCBub3QgYSB3aG9sZSBhcHBsaWNhdGlvbjsgaXQgaXNuJ3QKKyAgIGludGVuZGVkIHRvIHBlcm1hbmVudGx5IGNsZWFuIHVwIGJhZCBIVE1MLCBhcyBbOF1IVE1MIFRpZHkgZG9lcywgb25seQorICAgdG8gcGFyc2UgaXQgb24gdGhlIGZseS4gVGhlcmVmb3JlLCBpdCBkb2VzIG5vdCBjb252ZXJ0IHByZXNlbnRhdGlvbgorICAgSFRNTCB0byBDU1Mgb3IgYW55dGhpbmcgc2ltaWxhci4gSXQgZG9lcyBndWFyYW50ZWUgd2VsbC1zdHJ1Y3R1cmVkCisgICByZXN1bHRzOiB0YWdzIHdpbGwgd2luZCB1cCBwcm9wZXJseSBuZXN0ZWQsIGRlZmF1bHQgYXR0cmlidXRlcyB3aWxsCisgICBhcHBlYXIgYXBwcm9wcmlhdGVseSwgYW5kIHNvIG9uLgorCisgICBUaGUgc2VtYW50aWNzIG9mIFRhZ1NvdXAgYXJlIGFzIGZhciBhcyBwcmFjdGljYWwgdGhvc2Ugb2YgYWN0dWFsIEhUTUwKKyAgIGJyb3dzZXJzLiBJbiBwYXJ0aWN1bGFyLCBuZXZlciwgbmV2ZXIgd2lsbCBpdCB0aHJvdyBhbnkgc29ydCBvZiBzeW50YXgKKyAgIGVycm9yOiB0aGUgVGFnU291cCBtb3R0byBpcyBbOV0iSnVzdCBLZWVwIE9uIFRydWNraW4nIi4gQnV0IHRoZXJlJ3MKKyAgIG11Y2gsIG11Y2ggbW9yZS4gRm9yIGV4YW1wbGUsIGlmIHRoZSBmaXJzdCB0YWcgaXMgTEksIGl0IHdpbGwgc3VwcGx5CisgICB0aGUgYXBwbGljYXRpb24gd2l0aCBlbmNsb3NpbmcgSFRNTCwgQk9EWSwgYW5kIFVMIHRhZ3MuIFdoeSBVTD8gQmVjYXVzZQorICAgdGhhdCdzIHdoYXQgYnJvd3NlcnMgYXNzdW1lIGluIHRoaXMgc2l0dWF0aW9uLiBGb3IgdGhlIHNhbWUgcmVhc29uLAorICAgb3ZlcmxhcHBpbmcgdGFncyBhcmUgY29ycmVjdGx5IHJlc3RhcnRlZCB3aGVuZXZlciBwb3NzaWJsZTogdGV4dCBsaWtlOgorVGhpcyBpcyA8Qj5ib2xkLCA8ST5ib2xkIGl0YWxpYywgPC9iPml0YWxpYywgPC9pPm5vcm1hbCB0ZXh0CisKKyAgIGdldHMgY29ycmVjdGx5IHJld3JpdHRlbiBhczoKK1RoaXMgaXMgPGI+Ym9sZCwgPGk+Ym9sZCBpdGFsaWMsIDwvaT48L2I+PGk+aXRhbGljLCA8L2k+bm9ybWFsIHRleHQuCisKKyAgIEJ5IGludGVudGlvbiwgVGFnU291cCBpcyBzbWFsbCBhbmQgZmFzdC4gSXQgZG9lcyBub3QgZGVwZW5kIG9uIHRoZQorICAgZXhpc3RlbmNlIG9mIGFueSBmcmFtZXdvcmsgb3RoZXIgdGhhbiBTQVgsIGFuZCBzaG91bGQgYmUgYWJsZSB0byB3b3JrCisgICB3aXRoIGFueSBmcmFtZXdvcmsgdGhhdCBjYW4gYWNjZXB0IFNBWCBwYXJzZXJzLiBJbiBwYXJ0aWN1bGFyLCBbMTBdWE9NCisgICBpcyBrbm93biB0byB3b3JrLgorCisgICBZb3UgY2FuIHJlcGxhY2UgdGhlIGxvdy1sZXZlbCBIVE1MIHNjYW5uZXIgd2l0aCBvbmUgYmFzZWQgb24gU2VhbgorICAgTWNHcmF0aCdzIFsxMV1QWVggZm9ybWF0ICh2ZXJ5IGNsb3NlIHRvIEphbWVzIENsYXJrJ3MgRVNJUyBmb3JtYXQpLiBZb3UKKyAgIGNhbiBhbHNvIHN1cHBseSBhbiBBdXRvRGV0ZWN0b3IgdGhhdCBwZWVrcyBhdCB0aGUgaW5jb21pbmcgYnl0ZSBzdHJlYW0KKyAgIGFuZCBndWVzc2VzIGEgY2hhcmFjdGVyIGVuY29kaW5nIGZvciBpdC4gT3RoZXJ3aXNlLCB0aGUgcGxhdGZvcm0KKyAgIGRlZmF1bHQgaXMgdXNlZC4gSWYgeW91IG5lZWQgYW4gYXV0b2RldGVjdG9yIG9mIGNoYXJhY3RlciBzZXRzLAorICAgY29uc2lkZXIgdHJ5aW5nIHRvIGFkYXB0IHRoZSBbMTJdTW96aWxsYSBvbmU7IGlmIHlvdSBzdWNjZWVkLCBsZXQgbWUKKyAgIGtub3cuCisKKyAgTm90ZTogVGFnU291cCBpbiBKYXZhIDEuMQorCisgICBJZiB5b3UgZ28gdGhyb3VnaCB0aGUgVGFnU291cCBzb3VyY2UgYW5kIHJlcGxhY2UgYWxsIHJlZmVyZW5jZXMgdG8KKyAgIEhhc2hNYXAgd2l0aCBIYXNodGFibGUgYW5kIHJlY29tcGlsZSwgVGFnU291cCB3aWxsIHdvcmsgZmluZSBpbiBKYXZhCisgICAxLjEgVk1zLiBUaGFua3MgdG8gVGhvcmJq+HJuIFZpbm5lIGZvciB0aGlzIGRpc2NvdmVyeS4KKworICBUaGUgVFNheG9uIFhTTFQtZm9yLUhUTUwgcHJvY2Vzc29yCisKKyAgIFsxM11JIGFtIGFsc28gZGlzdHJpYnV0aW5nIFsxNF1UU2F4b24sIGEgcmVwYWNrYWdpbmcgb2YgdmVyc2lvbiA2LjUuNQorICAgb2YgTWljaGFlbCBLYXkncyBTYXhvbiBYU0xUIHZlcnNpb24gMS4wIGltcGxlbWVudGF0aW9uIHRoYXQgaW5jbHVkZXMKKyAgIFRhZ1NvdXAuIFRTYXhvbiBpcyBhIGRyb3AtaW4gcmVwbGFjZW1lbnQgZm9yIFNheG9uLCBhbmQgY2FuIGJlIHVzZWQgdG8KKyAgIHByb2Nlc3MgZWl0aGVyIEhUTUwgb3IgWE1MIGRvY3VtZW50cyB3aXRoIFhTTFQgc3R5bGVzaGVldHMuCisKKyAgVGFnU291cCBhcyBhIHN0YW5kLWFsb25lIHByb2dyYW0KKworICAgSXQgaXMgcG9zc2libGUgdG8gcnVuIFRhZ1NvdXAgYXMgYSBwcm9ncmFtIGJ5IHNheWluZyBqYXZhIC1qYXIKKyAgIHRhZ3NvdXAtMS4wLjEgW29wdGlvbiAuLi5dIFtmaWxlIC4uLl0uIEZpbGVzIG1lbnRpb25lZCBvbiB0aGUgY29tbWFuZAorICAgbGluZSB3aWxsIGJlIHBhcnNlZCBpbmRpdmlkdWFsbHkuIElmIG5vIGZpbGVzIGFyZSBzcGVjaWZpZWQsIHRoZQorICAgc3RhbmRhcmQgaW5wdXQgaXMgcmVhZC4KKworICAgVGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSB1bmRlcnN0b29kOgorCisgICAtLWZpbGVzCisgICAgICAgICAgT3V0cHV0IGludG8gaW5kaXZpZHVhbCBmaWxlcywgd2l0aCBodG1sIGV4dGVuc2lvbnMgY2hhbmdlZCB0bworICAgICAgICAgIHhodG1sLiBPdGhlcndpc2UsIGFsbCBvdXRwdXQgaXMgc2VudCB0byB0aGUgc3RhbmRhcmQgb3V0cHV0LgorCisgICAtLWh0bWwKKyAgICAgICAgICBPdXRwdXQgaXMgaW4gY2xlYW4gSFRNTDogdGhlIFhNTCBkZWNsYXJhdGlvbiBpcyBzdXBwcmVzc2VkLCBhcworICAgICAgICAgIGFyZSBlbmQtdGFncyBmb3IgdGhlIGtub3duIGVtcHR5IGVsZW1lbnRzLgorCisgICAtLW9taXQteG1sLWRlY2xhcmF0aW9uCisgICAgICAgICAgVGhlIFhNTCBkZWNsYXJhdGlvbiBpcyBzdXBwcmVzc2VkLgorCisgICAtLW1ldGhvZD1odG1sCisgICAgICAgICAgRW5kLXRhZ3MgZm9yIHRoZSBrbm93biBlbXB0eSBIVE1MIGVsZW1lbnRzIGFyZSBzdXBwcmVzc2VkLgorCisgICAtLWRvY3R5cGUtc3lzdGVtPXN5c3RlbWlkCisgICAgICAgICAgRm9yY2VzIHRoZSBvdXRwdXQgb2YgYSBET0NUWVBFIGRlY2xhcmF0aW9uIHdpdGggdGhlIHNwZWNpZmllZAorICAgICAgICAgIHN5c3RlbWlkLgorCisgICAtLWRvY3R5cGUtcHVibGljPXB1YmxpY2lkCisgICAgICAgICAgRm9yY2VzIHRoZSBvdXRwdXQgb2YgYSBET0NUWVBFIGRlY2xhcmF0aW9uIHdpdGggdGhlIHNwZWNpZmllZAorICAgICAgICAgIHB1YmxpY2lkLgorCisgICAtLXZlcnNpb249dmVyc2lvbgorICAgICAgICAgIFNldHMgdGhlIHZlcnNpb24gc3RyaW5nIGluIHRoZSBYTUwgZGVjbGFyYXRpb24uCisKKyAgIC0tc3RhbmRhbG9uZT1beWVzfG5vXQorICAgICAgICAgIFNldHMgdGhlIHN0YW5kYWxvbmUgZGVjbGFyYXRpb24gdG8geWVzIG9yIG5vLgorCisgICAtLXB5eAorICAgICAgICAgIE91dHB1dCBpcyBpbiBQWVggZm9ybWF0LgorCisgICAtLXB5eGluCisgICAgICAgICAgSW5wdXQgaXMgaW4gUFlYb2lkIGZvcm1hdCAobmVlZCBub3QgYmUgd2VsbC1mb3JtZWQpLgorCisgICAtLW5vbnMKKyAgICAgICAgICBOYW1lc3BhY2VzIGFyZSBzdXBwcmVzc2VkLiBOb3JtYWxseSwgYWxsIGVsZW1lbnRzIGFyZSBpbiB0aGUKKyAgICAgICAgICBYSFRNTCAxLnggbmFtZXNwYWNlLCBhbmQgYWxsIGF0dHJpYnV0ZXMgYXJlIGluIG5vIG5hbWVzcGFjZS4KKworICAgLS1ub2JvZ29ucworICAgICAgICAgIEJvZ29ucyAodW5rbm93biBlbGVtZW50cykgYXJlIHN1cHByZXNzZWQuCisKKyAgIC0tbm9kZWZhdWx0cworICAgICAgICAgIHN1cHByZXNzIGRlZmF1bHQgYXR0cmlidXRlIHZhbHVlcworCisgICAtLW5vY29sb25zCisgICAgICAgICAgY2hhbmdlIGV4cGxpY2l0IGNvbG9ucyBpbiBlbGVtZW50IGFuZCBhdHRyaWJ1dGUgbmFtZXMgdG8KKyAgICAgICAgICB1bmRlcnNjb3JlcworCisgICAtLW5vcmVzdGFydAorICAgICAgICAgIGRvbid0IHJlc3RhcnQgYW55IG5vcm1hbGx5IHJlc3RhcnRhYmxlIGVsZW1lbnRzCisKKyAgIC0taWdub3JhYmxlCisgICAgICAgICAgb3V0cHV0IHdoaXRlc3BhY2UgaW4gZWxlbWVudHMgd2l0aCBlbGVtZW50LW9ubHkgY29udGVudAorCisgICAtLWVtcHR5Ym9nb25zCisgICAgICAgICAgQm9nb25zIGFyZSBnaXZlbiBhIGNvbnRlbnQgbW9kZWwgb2YgRU1QVFkgcmF0aGVyIHRoYW4gQU5ZLgorCisgICAtLWFueQorICAgICAgICAgIEJvZ29ucyBhcmUgZ2l2ZW4gYSBjb250ZW50IG1vZGVsIG9mIEFOWSByYXRoZXIgdGhhbiBFTVBUWQorICAgICAgICAgIChkZWZhdWx0KS4KKworICAgLS1ub3Jvb3Rib2dvbnMKKyAgICAgICAgICBEb24ndCBhbGxvdyBib2dvbnMgdG8gYmUgcm9vdCBlbGVtZW50czsgbWFrZSB0aGVtIHN1Ym9yZGluYXRlIHRvCisgICAgICAgICAgdGhlIHJvb3QuCisKKyAgIC0tbGV4aWNhbAorICAgICAgICAgIFBhc3MgdGhyb3VnaCBIVE1MIGNvbW1lbnRzIGFuZCBET0NUWVBFIGRlY2xhcmF0aW9ucy4gSGFzIG5vCisgICAgICAgICAgZWZmZWN0IHdoZW4gb3V0cHV0IGlzIGluIFBZWCBmb3JtYXQuCisKKyAgIC0tcmV1c2UKKyAgICAgICAgICBSZXVzZSBhIHNpbmdsZSBpbnN0YW5jZSBvZiBUYWdTb3VwIHBhcnNlciB0aHJvdWdob3V0LiBOb3JtYWxseSwKKyAgICAgICAgICBhIG5ldyBvbmUgaXMgaW5zdGFudGlhdGVkIGZvciBlYWNoIGlucHV0IGZpbGUuCisKKyAgIC0tbm9jZGF0YQorICAgICAgICAgIENoYW5nZSB0aGUgY29udGVudCBtb2RlbHMgb2YgdGhlIHNjcmlwdCBhbmQgc3R5bGUgZWxlbWVudHMgdG8KKyAgICAgICAgICB0cmVhdCB0aGVtIGFzIG9yZGluYXJ5ICNQQ0RBVEEgKHRleHQtb25seSkgZWxlbWVudHMsIGFzIGluCisgICAgICAgICAgWEhUTUwsIHJhdGhlciB0aGFuIHdpdGggdGhlIHNwZWNpYWwgQ0RBVEEgY29udGVudCBtb2RlbC4KKworICAgLS1lbmNvZGluZz1lbmNvZGluZworICAgICAgICAgIFNwZWNpZnkgdGhlIGlucHV0IGVuY29kaW5nLiBUaGUgZGVmYXVsdCBpcyB0aGUgSmF2YSBwbGF0Zm9ybQorICAgICAgICAgIGRlZmF1bHQuCisKKyAgIC0tb3V0cHV0LWVuY29kaW5nPWVuY29kaW5nCisgICAgICAgICAgU3BlY2lmeSB0aGUgb3V0cHV0IGVuY29kaW5nLiBUaGUgZGVmYXVsdCBpcyB0aGUgSmF2YSBwbGF0Zm9ybQorICAgICAgICAgIGRlZmF1bHQuCisKKyAgIC0taGVscAorICAgICAgICAgIFByaW50IGhlbHAuCisKKyAgIC0tdmVyc2lvbgorICAgICAgICAgIFByaW50IHRoZSB2ZXJzaW9uIG51bWJlci4KKworICBTQVggZmVhdHVyZXMgYW5kIHByb3BlcnRpZXMKKworICAgVGFnU291cCBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIFNBWCBmZWF0dXJlcyBpbiBhZGRpdGlvbiB0byB0aGUgc3RhbmRhcmQKKyAgIG9uZXM6CisKKyAgIGh0dHA6Ly93d3cuY2NpbC5vcmcvfmNvd2FuL3RhZ3NvdXAvZmVhdHVyZXMvaWdub3JlLWJvZ29ucworICAgICAgICAgIEEgdmFsdWUgb2YgInRydWUiIGluZGljYXRlcyB0aGF0IHRoZSBwYXJzZXIgd2lsbCBpZ25vcmUgdW5rbm93bgorICAgICAgICAgIGVsZW1lbnRzLgorCisgICBodHRwOi8vd3d3LmNjaWwub3JnL35jb3dhbi90YWdzb3VwL2ZlYXR1cmVzL2JvZ29ucy1lbXB0eQorICAgICAgICAgIEEgdmFsdWUgb2YgInRydWUiIGluZGljYXRlcyB0aGF0IHRoZSBwYXJzZXIgd2lsbCBnaXZlIHVua25vd24KKyAgICAgICAgICBlbGVtZW50cyBhIGNvbnRlbnQgbW9kZWwgb2YgRU1QVFk7IGEgdmFsdWUgb2YgImZhbHNlIiwgYSBjb250ZW50CisgICAgICAgICAgbW9kZWwgb2YgQU5ZLgorCisgICBodHRwOi8vd3d3LmNjaWwub3JnL35jb3dhbi90YWdzb3VwL2ZlYXR1cmVzL3Jvb3QtYm9nb25zCisgICAgICAgICAgQSB2YWx1ZSBvZiAidHJ1ZSIgaW5kaWNhdGVzIHRoYXQgdGhlIHBhcnNlciB3aWxsIGFsbG93IHVua25vd24KKyAgICAgICAgICBlbGVtZW50cyB0byBiZSB0aGUgcm9vdCBvZiB0aGUgb3V0cHV0IGRvY3VtZW50LgorCisgICBodHRwOi8vd3d3LmNjaWwub3JnL35jb3dhbi90YWdzb3VwL2ZlYXR1cmVzL2RlZmF1bHQtYXR0cmlidXRlcworICAgICAgICAgIEEgdmFsdWUgb2YgInRydWUiIGluZGljYXRlcyB0aGF0IHRoZSBwYXJzZXIgd2lsbCByZXR1cm4gZGVmYXVsdAorICAgICAgICAgIGF0dHJpYnV0ZSB2YWx1ZXMgZm9yIG1pc3NpbmcgYXR0cmlidXRlcyB0aGF0IGhhdmUgZGVmYXVsdAorICAgICAgICAgIHZhbHVlcy4KKworICAgaHR0cDovL3d3dy5jY2lsLm9yZy9+Y293YW4vdGFnc291cC9mZWF0dXJlcy90cmFuc2xhdGUtY29sb25zCisgICAgICAgICAgQSB2YWx1ZSBvZiAidHJ1ZSIgaW5kaWNhdGVzIHRoYXQgdGhlIHBhcnNlciB3aWxsIHRyYW5zbGF0ZQorICAgICAgICAgIGNvbG9ucyBpbnRvIHVuZGVyc2NvcmVzIGluIG5hbWVzLgorCisgICBodHRwOi8vd3d3LmNjaWwub3JnL35jb3dhbi90YWdzb3VwL2ZlYXR1cmVzL3Jlc3RhcnQtZWxlbWVudHMKKyAgICAgICAgICBBIHZhbHVlIG9mICJ0cnVlIiBpbmRpY2F0ZXMgdGhhdCB0aGUgcGFyc2VyIHdpbGwgYXR0ZW1wdCB0bworICAgICAgICAgIHJlc3RhcnQgdGhlIHJlc3RhcnRhYmxlIGVsZW1lbnRzLgorCisgICBodHRwOi8vd3d3LmNjaWwub3JnL35jb3dhbi90YWdzb3VwL2ZlYXR1cmVzL2lnbm9yYWJsZS13aGl0ZXNwYWNlCisgICAgICAgICAgQSB2YWx1ZSBvZiAidHJ1ZSIgaW5kaWNhdGVzIHRoYXQgdGhlIHBhcnNlciB3aWxsIHRyYW5zbWl0CisgICAgICAgICAgd2hpdGVzcGFjZSBpbiBlbGVtZW50LW9ubHkgY29udGVudCB2aWEgdGhlIFNBWAorICAgICAgICAgIGlnbm9yYWJsZVdoaXRlc3BhY2UgY2FsbGJhY2suIE5vcm1hbGx5IHRoaXMgaXMgbm90IGRvbmUsIGJlY2F1c2UKKyAgICAgICAgICBIVE1MIGlzIGFuIFNHTUwgYXBwbGljYXRpb24gYW5kIFNHTUwgc3VwcHJlc3NlcyBzdWNoIHdoaXRlc3BhY2UuCisKKyAgIGh0dHA6Ly93d3cuY2NpbC5vcmcvfmNvd2FuL3RhZ3NvdXAvZmVhdHVyZXMvY2RhdGEtZWxlbWVudHMKKyAgICAgICAgICBBIHZhbHVlIG9mICJ0cnVlIiBpbmRpY2F0ZXMgdGhhdCB0aGUgcGFyc2VyIHdpbGwgcHJvY2VzcyB0aGUKKyAgICAgICAgICBzY3JpcHQgYW5kIHN0eWxlIGVsZW1lbnRzIChvciBhbnkgZWxlbWVudHMgd2l0aCB0eXBlPSdjZGF0YScgaW4KKyAgICAgICAgICB0aGUgVFNTTCBzY2hlbWEpIGFzIFNHTUwgQ0RBVEEgZWxlbWVudHMgKHRoYXQgaXMsIG5vIG1hcmt1cCBpcworICAgICAgICAgIHJlY29nbml6ZWQgZXhjZXB0IHRoZSBtYXRjaGluZyBlbmQtdGFnKS4KKworICAgVGFnU291cCBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIFNBWCBwcm9wZXJ0aWVzIGluIGFkZGl0aW9uIHRvIHRoZQorICAgc3RhbmRhcmQgb25lczoKKworICAgaHR0cDovL3d3dy5jY2lsLm9yZy9+Y293YW4vdGFnc291cC9wcm9wZXJ0aWVzL3NjYW5uZXIKKyAgICAgICAgICBTcGVjaWZpZXMgdGhlIFNjYW5uZXIgb2JqZWN0IHRoaXMgcGFyc2VyIHVzZXMuCisKKyAgIGh0dHA6Ly93d3cuY2NpbC5vcmcvfmNvd2FuL3RhZ3NvdXAvcHJvcGVydGllcy9zY2hlbWEKKyAgICAgICAgICBTcGVjaWZpZXMgdGhlIFNjaGVtYSBvYmplY3QgdGhpcyBwYXJzZXIgdXNlcy4KKworICAgaHR0cDovL3d3dy5jY2lsLm9yZy9+Y293YW4vdGFnc291cC9wcm9wZXJ0aWVzL2F1dG8tZGV0ZWN0b3IKKyAgICAgICAgICBTcGVjaWZpZXMgdGhlIEF1dG9EZXRlY3RvciAoZm9yIGVuY29kaW5nIGRldGVjdGlvbikgdGhpcyBwYXJzZXIKKyAgICAgICAgICB1c2VzLgorCisgIE1vcmUgaW5mb3JtYXRpb24KKworICAgSSBnYXZlIGEgcHJlc2VudGF0aW9uIChhIG5vY3R1cm5lLCBzbyBpdCdzIG5vdCBvbiB0aGUgc2NoZWR1bGUpIGF0CisgICBbMTVdRXh0cmVtZSBNYXJrdXAgTGFuZ3VhZ2VzIDIwMDQgYWJvdXQgVGFnU291cCwgdXBkYXRlZCBmcm9tIHRoZSBvbmUKKyAgIHByZXNlbnRlZCBpbiAyMDAyIGF0IHRoZSBOZXcgWW9yayBDaXR5IFhNTCBTSUcgYW5kIGF0IFhNTCAyMDAyLiBUaGlzIGlzCisgICB0aGUgbWFpbiBoaWdoLWxldmVsIGRvY3VtZW50YXRpb24gYWJvdXQgaG93IFRhZ1NvdXAgd29ya3MuIEZvcm1hdHM6CisgICBbMTZdT3BlbkRvY3VtZW50IFsxN11Qb3dlcnBvaW50IFsxOF1QREYuCisKKyAgIEkgYWxzbyBoYWQgcGVvcGxlIGFkZCBbMTldImV2aWwiIEhUTUwgdG8gYSBsYXJnZSBwb3N0ZXIgc28gdGhhdCBJIGNvdWxkCisgICBbMjBdY2xlYW4gaXQgdXA7IFZpZXcgU291cmNlIGlzIHByb2JhYmx5IG1vcmUgdXNlZnVsIHRoYW4gb3JkaW5hcnkKKyAgIGJyb3dzaW5nLiBUaGUgb3JpZ2luYWwgaW5zdHJ1Y3Rpb25zIHdlcmU6CisKKyAgICAgICAgICAgICAgICAgICAgICAgICBTT1VQRSBERSBCQUxJU0VTIChCRSBFVklMKSEKKyAgIEVjcml0ZXogdW5lIGJhbGlzZSBvdXZyYW50ZSAoc2FucyBhdHRyaWJ1dHMpCisgICBvdSBmZXJtYW50ZSBIVE1MIGljaSwgcy52LnAuCisKKyAgIFRoZXJlIGlzIGEgWzIxXXRhZ3NvdXAtZnJpZW5kcyBtYWlsaW5nIGxpc3QgaG9zdGVkIGF0IFsyMl1ZYWhvbyBHcm91cHMuCisgICBZb3UgY2FuIFsyM11qb2luIHZpYSB0aGUgV2ViLCBvciBieSBzZW5kaW5nIGEgYmxhbmsgZW1haWwgdG8KKyAgIFsyNF10YWdzb3VwLWZyaWVuZHMtc3Vic2NyaWJlQHlhaG9vZ3JvdXBzLmNvbS4gVGhlIFsyNV1hcmNoaXZlcyBhcmUKKyAgIG9wZW4gdG8gYWxsLgorCisgICBPbmxpbmUgVGFnU291cCBwcm9jZXNzaW5nIGZvciBwdWJsaWNseSBhY2Nlc3NpYmxlIEhUTUwgZG9jdW1lbnRzIGlzIG5vdworICAgWzI2XWF2YWlsYWJsZSBjb3VydGVzeSBvZiBMZWlnaCBEb2Rkcy4KKworUmVmZXJlbmNlcworCisgICAxLiBodHRwOi8vb3JlZ29uc3RhdGUuZWR1L2luc3RydWN0L3BobDMwMi90ZXh0cy9ob2JiZXMvbGV2aWF0aGFuLWMuaHRtbAorICAgMi4gaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2FwYWNoZTIuMC5waHAKKyAgIDMuIGh0dHA6Ly9wcmRvd25sb2Fkcy5zb3VyY2Vmb3JnZS5uZXQvc2F4b24vc2F4b242LTUtNS56aXAKKyAgIDQuIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDcvV0QteG1sLWVudGl0eS1uYW1lcy0yMDA3MTIxNAorICAgNS4gaHR0cDovL2hvbWUuY2NpbC5vcmcvfmNvd2FuL1hNTC90YWdzb3VwL3RhZ3NvdXAtMS4yLmphcgorICAgNi4gaHR0cDovL2hvbWUuY2NpbC5vcmcvfmNvd2FuL1hNTC90YWdzb3VwL3RhZ3NvdXAtMS4yLXNyYy56aXAKKyAgIDcuIGh0dHA6Ly9ob21lLmNjaWwub3JnL35jb3dhbi9YTUwvdGFnc291cC9DSEFOR0VTCisgICA4LiBodHRwOi8vdGlkeS5zZi5uZXQvCisgICA5LiBodHRwOi8vd3d3LmNydW1ibXVzZXVtLmNvbS90cnVja2luLmh0bWwKKyAgMTAuIGh0dHA6Ly93d3cuY2FmZWNvbmxlY2hlLm9yZy9YT00KKyAgMTEuIGh0dHA6Ly9nbm9zaXMuY3gvcHVibGlzaC9wcm9ncmFtbWluZy94bWxfbWF0dGVyc18xNy5odG1sCisgIDEyLiBodHRwOi8vamNoYXJkZXQuc291cmNlZm9yZ2UubmV0LworICAxMy4gaHR0cDovL3d3dy5jY2lsLm9yZy9+Y293YW4KKyAgMTQuIGh0dHA6Ly9ob21lLmNjaWwub3JnL35jb3dhbi9YTUwvdGFnc291cC90c2F4b24KKyAgMTUuIGh0dHA6Ly93d3cuZXh0cmVtZW1hcmt1cC5jb20vZXh0cmVtZS8yMDA0CisgIDE2LiBodHRwOi8vaG9tZS5jY2lsLm9yZy9+Y293YW4vWE1ML3RhZ3NvdXAvdGFnc291cC5vZHAKKyAgMTcuIGh0dHA6Ly9ob21lLmNjaWwub3JnL35jb3dhbi9YTUwvdGFnc291cC90YWdzb3VwLnBwdAorICAxOC4gaHR0cDovL2hvbWUuY2NpbC5vcmcvfmNvd2FuL1hNTC90YWdzb3VwL3RhZ3NvdXAucGRmCisgIDE5LiBodHRwOi8vaG9tZS5jY2lsLm9yZy9+Y293YW4vWE1ML3RhZ3NvdXAvZXh0cmVtZS5odG1sCisgIDIwLiBodHRwOi8vaG9tZS5jY2lsLm9yZy9+Y293YW4vWE1ML3RhZ3NvdXAvZXh0cmVtZS54aHRtbAorICAyMS4gaHR0cDovL2dyb3Vwcy55YWhvby5jb20vZ3JvdXAvdGFnc291cC1mcmllbmRzCisgIDIyLiBodHRwOi8vZ3JvdXBzLnlhaG9vLmNvbS8KKyAgMjMuIGh0dHA6Ly9ncm91cHMueWFob28uY29tL2dyb3VwL3RhZ3NvdXAtZnJpZW5kcy9qb2luCisgIDI0LiBtYWlsdG86dGFnc291cC1mcmllbmRzLXN1YnNjcmliZUB5YWhvb2dyb3Vwcy5jb20KKyAgMjUuIGh0dHA6Ly9ncm91cHMueWFob28uY29tL2dyb3VwL3RhZ3NvdXAtZnJpZW5kcy9tZXNzYWdlcworICAyNi4gaHR0cDovL3htbGFybXlrbmlmZS5vcmcvZG9jcy94aHRtbC90YWdzb3VwLwpkaWZmIC0tZ2l0IGEvVE9ETyBiL1RPRE8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2NiNTlmZAotLS0gL2Rldi9udWxsCisrKyBiL1RPRE8KQEAgLTAsMCArMSwxNCBAQAorTm90aWNlOiBJdCdzIHF1aXRlIHBvc3NpYmxlIHRoYXQgbm9uZSBvZiB0aGVzZSBmZWF0dXJlcyB3aWxsIGV2ZXIgYmUKK2ltcGxlbWVudGVkLiAgSWYgeW91J2QgbGlrZSB0byBpbXBsZW1lbnQgb25lIHlvdXJzZWxmLCBmZWVsIGZyZWUgdG8gc2VuZAorbWUgYSBwYXRjaC4KKworRmxhZyBhZGRlZCBwYXJlbnQgZWxlbWVudHMgd2l0aCBhIHNwZWNpYWwgYXR0cmlidXRlCitBbGxvdyBjYXNlIHNlbnNpdGl2aXR5IGFzIGEgc3RhbmRhcmQgZmVhdHVyZQorRG9uJ3Qgc2VlIDwvc2NyaXB0PiB0YWcgd2hlbiBpbiBwc2V1ZG8tY29tbWVudCBpbiBzY3JpcHQgZWxlbWVudAorRG9uJ3QganVzdCBjaHVjayBvdXQgbmFtZXNwYWNlIGRlY2xhcmF0aW9ucworQWxsb3cgaW5saW5lIGNydWZ0IGluIHRhYmxlIGJvZGllcyBhbmQgcm93cworCShEb24ndCBicmVhayB1cCB0YWJsZXMsIGV2ZXI/KQorCShEb24ndCBicmVhayB1cCBmb3JtcywgZXZlciwgZWl0aGVyPykKK1N1cHByZXNzIHN0YXJ0LXRhZ3MgZm9yIHJlc3RhcnRhYmxlIGVsZW1lbnRzIGlmIHRoZSBlbGVtZW50CisJaXMgYWxyZWFkeSBvbiB0aGUgc3RhY2sgKDxiPjxiPiBpcyB0aGUgc2FtZSBhcyA8Yj4pCitDb21iaW5lIGNvbnNlY3V0aXZlIGJvZHkgZWxlbWVudHMKZGlmZiAtLWdpdCBhL2J1aWxkLnhtbCBiL2J1aWxkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYWEyMWQ0Ci0tLSAvZGV2L251bGwKKysrIGIvYnVpbGQueG1sCkBAIC0wLDAgKzEsMTYwIEBACis8IS0tCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiBUYWdTb3VwIGFuZCBpcyBDb3B5cmlnaHQgMjAwMi0yMDA4IGJ5IEpvaG4gQ293YW4uCisvLworLy8gVGFnU291cCBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsCisvLyBWZXJzaW9uIDIuMC4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGlzIGxpY2Vuc2UgYXQKKy8vIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAuICBZb3UgbWF5IGFsc28gaGF2ZQorLy8gYWRkaXRpb25hbCBsZWdhbCByaWdodHMgbm90IGdyYW50ZWQgYnkgdGhpcyBsaWNlbnNlLgorLy8KKy8vIFRhZ1NvdXAgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyB1bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIFRhZ1NvdXAKKy8vIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TCisvLyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZDsgbm90IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkKKy8vIG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKy0tPgorCis8cHJvamVjdCBuYW1lPSJ0YWdzb3VwIiBkZWZhdWx0PSJkaXN0Ij4KKworICA8IS0tIGdlbmVyaWMgcHJvcGVydGllcyAtLT4KKyAgPHByb3BlcnR5IGZpbGU9ImV0Yy9idWlsZC9idWlsZC5wcm9wZXJ0aWVzIi8+CisgIDwhLS0gYWRkaXRpb25hbCB0YXNrcyAtLT4KKyAgPHRhc2tkZWYgZmlsZT0iZXRjL2J1aWxkL3Rhc2tkZWZzLnR4dCIgY2xhc3NwYXRoPSJiaW4iLz4KKworICA8YXZhaWxhYmxlIHByb3BlcnR5PSJ0cmFuc2Zvcm1lci5mYWN0b3J5IgorICAgICBjbGFzc25hbWU9ImNvbS5pY2wuc2F4b24uVHJhbnNmb3JtZXJGYWN0b3J5SW1wbCIKKyAgICAgdmFsdWU9ImNvbS5pY2wuc2F4b24uVHJhbnNmb3JtZXJGYWN0b3J5SW1wbCIvPgorICA8YXZhaWxhYmxlIHByb3BlcnR5PSJ0cmFuc2Zvcm1lci5mYWN0b3J5IgorICAgICBjbGFzc25hbWU9Im5ldC5zZi5zYXhvbi5UcmFuc2Zvcm1lckZhY3RvcnlJbXBsIgorICAgICB2YWx1ZT0ibmV0LnNmLnNheG9uLlRyYW5zZm9ybWVyRmFjdG9yeUltcGwiLz4KKyAgPGF2YWlsYWJsZSBwcm9wZXJ0eT0idHJhbnNmb3JtZXIuZmFjdG9yeSIKKyAgICAgY2xhc3NuYW1lPSJvcmcuYXBhY2hlLnhhbGFuLnByb2Nlc3Nvci5UcmFuc2Zvcm1lckZhY3RvcnlJbXBsIgorICAgICB2YWx1ZT0ib3JnLmFwYWNoZS54YWxhbi5wcm9jZXNzb3IuVHJhbnNmb3JtZXJGYWN0b3J5SW1wbCIvPgorICA8YXZhaWxhYmxlIHByb3BlcnR5PSJ0cmFuc2Zvcm1lci5mYWN0b3J5IgorICAgICBjbGFzc25hbWU9ImNvbS5zdW4ub3JnLmFwYWNoZS54YWxhbi5wcm9jZXNzb3IuVHJhbnNmb3JtZXJGYWN0b3J5SW1wbCIKKyAgICAgdmFsdWU9ImNvbS5zdW4ub3JnLmFwYWNoZS54YWxhbi5wcm9jZXNzb3IuVHJhbnNmb3JtZXJGYWN0b3J5SW1wbCIvPgorCisgIDwhLS0gc29tZSBmb2xkZXIgc2V0dGluZ3MgLS0+CisgIDxwcm9wZXJ0eSBuYW1lPSJiaW4iIHZhbHVlPSJiaW4iLz4KKyAgPHByb3BlcnR5IG5hbWU9InNyYyIgdmFsdWU9InNyYyIvPgorICA8cHJvcGVydHkgbmFtZT0iYnVpbGQiIHZhbHVlPSJidWlsZCIvPgorICA8cHJvcGVydHkgbmFtZT0iZGlzdCIgIHZhbHVlPSJkaXN0Ii8+CisgIDxwcm9wZXJ0eSBuYW1lPSJkb2NzIiB2YWx1ZT0iZG9jcyIvPgorICA8cHJvcGVydHkgbmFtZT0idG1wIiB2YWx1ZT0idG1wIi8+CisKKworICA8IS0tIGluaXRpYWxpemUgcHJvamVjdCAtLT4KKyAgPHRhcmdldCBuYW1lPSJpbml0IiBkZXNjcmlwdGlvbj0iSW5pdCBwcm9qZWN0LiI+CisgICAgPHRzdGFtcC8+CisgIDwvdGFyZ2V0PgorCisKKyAgPCEtLSBlbnN1cmUgbmVlZGVkIGZvbGRlcnMgYXJlIGF2YWlsYWJsZSAtLT4KKyAgPHRhcmdldCBuYW1lPSJwcmVwYXJlIiBkZXNjcmlwdGlvbj0iU2V0IHVwIGZvbGRlcnMuIj4KKyAgICA8bWtkaXIgZGlyPSIke2J1aWxkfSIvPgorICAgIDxta2RpciBkaXI9IiR7dG1wfSIvPgorICA8L3RhcmdldD4KKworICA8IS0tIEJ1aWxkIGEgZGlzdHJpYnV0aW9uIGphciBmaWxlIC0tPgorICA8dGFyZ2V0IG5hbWU9ImRpc3QiIGRlcGVuZHM9ImluaXQsY29tcGlsZSIKKwkgIGRlc2NyaXB0aW9uPSJCdWlsZCBhIGJpbmFyeSBkaXN0cmlidXRpb24gZmlsZS4iPgorICAgIDxhbnRjYWxsIHRhcmdldD0iamFyLXJlbGVhc2UiPgorICAgICAgPHBhcmFtIG5hbWU9ImJ1aWxkRGlyIiB2YWx1ZT0iYnVpbGQiLz4KKyAgICAgIDxwYXJhbSBuYW1lPSJ2ZXJzaW9uIiB2YWx1ZT0iJHt0YWdzb3VwLnZlcnNpb259Ii8+CisgICAgPC9hbnRjYWxsPgorICA8L3RhcmdldD4KKworCisJPHRhcmdldCBuYW1lPSJqYXItcmVsZWFzZSIgZGVwZW5kcz0iaW5pdCIKKwkJCWRlc2NyaXB0aW9uPSJCdWlsZCBhIHJlbGVhc2UgamFyIGZpbGUuIj4KKwkgIDxta2RpciBkaXI9IiR7ZGlzdH0vbGliIiAvPgorCSAgPGphciBqYXJmaWxlPSIke2Rpc3R9L2xpYi90YWdzb3VwLSR7dGFnc291cC52ZXJzaW9ufS5qYXIiIGJhc2VkaXI9IiR7YnVpbGREaXJ9Ij4KKyAgICAgIDxtYW5pZmVzdD4KKyAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJWZXJzaW9uIiB2YWx1ZT0iJHt0YWdzb3VwLnZlcnNpb259Ii8+CisgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iTWFpbi1DbGFzcyIgdmFsdWU9Im9yZy5jY2lsLmNvd2FuLnRhZ3NvdXAuQ29tbWFuZExpbmUiLz4KKyAgICAgIDwvbWFuaWZlc3Q+CisgICAgPC9qYXI+CisgIDwvdGFyZ2V0PgorCisKKyAgPCEtLSBjb21waWxlIGphdmEgc291cmNlcyAtLT4KKyAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJpbml0LHByZXBhcmUsYnVpbGQtcGFyc2VyIgorCSAgZGVzY3JpcHRpb249IkNvbXBpbGUgamF2YSBjbGFzc2VzLiI+CisgICAgPGphdmFjIHNvdXJjZT0iMS40IiB0YXJnZXQ9IjEuNCIgc3JjZGlyPSIke3NyY30vamF2YSIgZGVzdGRpcj0iJHtidWlsZH0iIGRlcHJlY2F0aW9uPSJvbiIgdmVyYm9zZT0ib2ZmIiBkZWJ1Zz0ib24iPgorICAgICAgPHNyYyBwYXRoPSIke3NyY30vamF2YSIvPgorCSAgPHNyYyBwYXRoPSIke3RtcH0vc3JjIi8+CisJPC9qYXZhYz4KKyAgPC90YXJnZXQ+CisKKzwhLS0gcHJlcGFyZSBnZW5lcmF0aW9uIG9mIHRoZSBwYXJzZXIgY2xhc3NlcyBiYXNlZCBvbiB0aGUgZGVmaW5pdGlvbiBmaWxlcyAtLT4KKyAgIDx0YXJnZXQgZGVwZW5kcz0iaW5pdCxwcmVwYXJlIiBkZXNjcmlwdGlvbj0iUHJlcGFyZSBnZW5lcmF0aW9uIG9mIHBhcnNlciBjbGFzc2VzLiIgbmFtZT0icHJlcGFyZS1wYXJzZXIiPiAKKworICAgICA8ZWNobz4KKyAgICAgICBVc2luZyAke3RyYW5zZm9ybWVyLmZhY3Rvcnl9IGFzIHRoZSBUcmFuc2Zvcm1lckZhY3RvcnkKKyAgICAgPC9lY2hvPgorCisgICAgIDx4c2x0IGluPSIke3NyY30vZGVmaW5pdGlvbnMvaHRtbC50c3NsIiBvdXQ9IiR7dG1wfS9IVE1MTW9kZWxzLmkiIAorc3R5bGU9InRzc2wvdHNzbC1tb2RlbHMueHNsdCI+CisgICAgICAgPGZhY3RvcnkgbmFtZT0iJHt0cmFuc2Zvcm1lci5mYWN0b3J5fSIvPgorICAgICA8L3hzbHQ+CisgICAgIDx4c2x0IGluPSIke3NyY30vZGVmaW5pdGlvbnMvaHRtbC50c3NsIiBvdXQ9IiR7dG1wfS9IVE1MU2NoZW1hLmkiIAorc3R5bGU9InRzc2wvdHNzbC54c2x0Ij4KKyAgICAgICA8ZmFjdG9yeSBuYW1lPSIke3RyYW5zZm9ybWVyLmZhY3Rvcnl9Ii8+CisgICAgIDwveHNsdD4KKyAgICAgPHhzbHQgaW49IiR7c3JjfS9kZWZpbml0aW9ucy9odG1sLnN0bWwiIG91dD0iJHt0bXB9L0hUTUxTY2FubmVyLmkiIAorc3R5bGU9InN0bWwvc3RtbC54c2x0Ij4KKyAgICAgICA8ZmFjdG9yeSBuYW1lPSIke3RyYW5zZm9ybWVyLmZhY3Rvcnl9Ii8+CisgICAgIDwveHNsdD4KKyAgIDwvdGFyZ2V0PgorCisKKworICA8IS0tIHBhdGNoIHRoZSBwYXJzZXIgY2xhc3MgZmlsZXMgLS0+CisgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcGFyc2VyIiBkZXBlbmRzPSJwcmVwYXJlLXBhcnNlciIKKwkgIGRlc2NyaXB0aW9uPSJHZW5lcmF0ZSBwYXJzZXIgY2xhc3MgZmlsZXMuIj4KKwk8cHJvcGVydHkgbmFtZT0icGFyc2VyLnBrZy1wYXRoIiB2YWx1ZT0ib3JnL2NjaWwvY293YW4vdGFnc291cCIvPgorCTxta2RpciBkaXI9IiR7dG1wfS9zcmMvJHtwYXJzZXIucGtnLXBhdGh9Ii8+CisJPGFudGNhbGwgdGFyZ2V0PSJwYXRjaC1maWxlIj4KKyAgICAgIDxwYXJhbSBuYW1lPSJmaWxlLXByZWYiIHZhbHVlPSJIVE1MTW9kZWxzIi8+CisgICAgICA8cGFyYW0gbmFtZT0idG9rZW4iIHZhbHVlPSJNT0RFTF9ERUZJTklUSU9OUyIvPgorCTwvYW50Y2FsbD4KKwk8YW50Y2FsbCB0YXJnZXQ9InBhdGNoLWZpbGUiPgorICAgICAgPHBhcmFtIG5hbWU9ImZpbGUtcHJlZiIgdmFsdWU9IkhUTUxTY2hlbWEiLz4KKyAgICAgIDxwYXJhbSBuYW1lPSJ0b2tlbiIgdmFsdWU9IlNDSEVNQV9DQUxMUyIvPgorCTwvYW50Y2FsbD4KKwk8YW50Y2FsbCB0YXJnZXQ9InBhdGNoLWZpbGUiPgorICAgICAgPHBhcmFtIG5hbWU9ImZpbGUtcHJlZiIgdmFsdWU9IkhUTUxTY2FubmVyIi8+CisgICAgICA8cGFyYW0gbmFtZT0idG9rZW4iIHZhbHVlPSJTVEFURV9UQUJMRSIvPgorCTwvYW50Y2FsbD4KKyAgPC90YXJnZXQ+CisKKworICA8IS0tIHBhdGNoIG9uZSBwYXJzZXIgY2xhc3MgZmlsZSAtLT4KKyAgPHRhcmdldCBuYW1lPSJwYXRjaC1maWxlIiBkZXBlbmRzPSIiIGRlc2NyaXB0aW9uPSJQYXRjaCBhIHBhcnNlciBjbGFzcyBmaWxlLiI+CisJPGNvcHkgZmlsZT0iJHtzcmN9L3RlbXBsYXRlcy8ke3BhcnNlci5wa2ctcGF0aH0vJHtmaWxlLXByZWZ9LmphdmEiIHRvRGlyPSIke3RtcH0vc3JjLyR7cGFyc2VyLnBrZy1wYXRofSIvPgorICAgIDxsb2FkZmlsZSBwcm9wZXJ0eT0icGF0Y2giIHNyY0ZpbGU9IiR7dG1wfS8ke2ZpbGUtcHJlZn0uaSIvPgorCTxyZXBsYWNlIGZpbGU9IiR7dG1wfS9zcmMvJHtwYXJzZXIucGtnLXBhdGh9LyR7ZmlsZS1wcmVmfS5qYXZhIiB0b2tlbj0iQEAke3Rva2VufUBAIiB2YWx1ZT0iJHtwYXRjaH0iLz4KKyAgPC90YXJnZXQ+CisKKyAgPCEtLSBjbGVhbiB1cCB0aGUgbWVzcyAtLT4KKyAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVzY3JpcHRpb249IkNsZWFuIHVwIGZvbGRlcnMuIj4KKyAgICA8ZGVsZXRlIGRpcj0iJHtidWlsZH0iLz4KKyAgICA8ZGVsZXRlIGRpcj0iJHt0bXB9Ii8+CisgICAgPGRlbGV0ZSBkaXI9IiR7ZG9jc30iLz4KKyAgICA8ZGVsZXRlIGRpcj0iJHtkaXN0fSIvPgorICA8L3RhcmdldD4KKworCisgIDwhLS0gZ2VuZXJhdGUgamF2YWRvYyBmb3IgdGhlIGphdmEgY2xhc3NlcyAtLT4KKyAgPHRhcmdldCBuYW1lPSJkb2NzLWFwaSIgZGVwZW5kcz0iaW5pdCIKKwkgIGRlc2NyaXB0aW9uPSJHZW5lcmF0ZSBqYXZhZG9jIGRvY3VtZW50YXRpb24uIj4KKwk8bWtkaXIgZGlyPSIke2RvY3N9L2FwaSIvPgorCTxqYXZhZG9jIHBhY2thZ2VuYW1lcz0ib3JnLioiCisJCXNvdXJjZXBhdGg9IiR7c3JjfS9qYXZhIiBkZXN0ZGlyPSIke2RvY3N9L2FwaSIKKwkJdXNlPSJ0cnVlIgorCQl3aW5kb3d0aXRsZT0iVGFnU291cCAke3RhZ3NvdXAudmVyc2lvbn0gQVBJIj4KKyAgICAgIDxkb2N0aXRsZT48IVtDREFUQVs8aDE+VGFnU291cCBQYWNrYWdlIERvY3VtZW50YXRpb248L2gxPl1dPjwvZG9jdGl0bGU+CisJICA8Ym90dG9tPjwhW0NEQVRBWzxlbT5MaWNlbmNlPC9lbT46IDxzdHJvbmc+QWNhZGVtaWMgRnJlZSBMaWNlbnNlIDMuMDwvc3Ryb25nPiBhbmQvb3IgPHN0cm9uZz5HUEwgMi4wPC9zdHJvbmc+XV0+PC9ib3R0b20+CisgICAgPC9qYXZhZG9jPgorICA8L3RhcmdldD4KKworPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvZXRjL2J1aWxkL2J1aWxkLnByb3BlcnRpZXMgYi9ldGMvYnVpbGQvYnVpbGQucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzcyMDkyCi0tLSAvZGV2L251bGwKKysrIGIvZXRjL2J1aWxkL2J1aWxkLnByb3BlcnRpZXMKQEAgLTAsMCArMSBAQAordGFnc291cC52ZXJzaW9uID0gMS4yCmRpZmYgLS1naXQgYS9ldGMvYnVpbGQvdGFza2RlZnMudHh0IGIvZXRjL2J1aWxkL3Rhc2tkZWZzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvZXRjL2J1aWxkL3Rhc2tkZWZzLnR4dApkaWZmIC0tZ2l0IGEvaW5kZXguaHRtbCBiL2luZGV4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTkzNmFjZQotLS0gL2Rldi9udWxsCisrKyBiL2luZGV4Lmh0bWwKQEAgLTAsMCArMSw0MDcgQEAKKzwhLS0KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFRhZ1NvdXAgYW5kIGlzIENvcHlyaWdodCAyMDAyLTIwMDggYnkgSm9obiBDb3dhbi4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiBUYWdTb3VwIGFuZCBpcyBDb3B5cmlnaHQgMjAwMi0yMDA4IGJ5IEpvaG4gQ293YW4uCisvLworLy8gVGFnU291cCBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsCisvLyBWZXJzaW9uIDIuMC4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGlzIGxpY2Vuc2UgYXQKKy8vIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAuICBZb3UgbWF5IGFsc28gaGF2ZQorLy8gYWRkaXRpb25hbCBsZWdhbCByaWdodHMgbm90IGdyYW50ZWQgYnkgdGhpcyBsaWNlbnNlLgorLy8KKy8vIFRhZ1NvdXAgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyB1bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIFRhZ1NvdXAKKy8vIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TCisvLyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZDsgbm90IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkKKy8vIG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKy0tPgorCis8aHRtbD48aGVhZD48dGl0bGU+VGFnU291cCBob21lIHBhZ2U8L3RpdGxlPjwvaGVhZD48Ym9keT4KKzxoMT5UYWdTb3VwIC0gSnVzdCBLZWVwIE9uIFRydWNraW4nPC9oMT4KKworPGgzPkludHJvZHVjdGlvbjwvaDM+Cis8cD5UaGlzIGlzIHRoZSBob21lIHBhZ2Ugb2YgVGFnU291cCwgYSBTQVgtY29tcGxpYW50IHBhcnNlciB3cml0dGVuIGluIEphdmEKK3RoYXQsIGluc3RlYWQgb2YgcGFyc2luZyB3ZWxsLWZvcm1lZCBvciB2YWxpZCBYTUwsIHBhcnNlcyBIVE1MIGFzIGl0IGlzCitmb3VuZCBpbiB0aGUgd2lsZDoKKzxhIGhyZWY9Imh0dHA6Ly9vcmVnb25zdGF0ZS5lZHUvaW5zdHJ1Y3QvcGhsMzAyL3RleHRzL2hvYmJlcy9sZXZpYXRoYW4tYy5odG1sIj4KK3Bvb3IsIG5hc3R5IGFuZCBicnV0aXNoPC9hPiwgdGhvdWdoIHF1aXRlIG9mdGVuIGZhciBmcm9tIHNob3J0LgorVGFnU291cCBpcyBkZXNpZ25lZCBmb3IgcGVvcGxlIHdobyBoYXZlIHRvIHByb2Nlc3MgdGhpcyBzdHVmZiB1c2luZyBzb21lCitzZW1ibGFuY2Ugb2YgYSByYXRpb25hbCBhcHBsaWNhdGlvbiBkZXNpZ24uICBCeSBwcm92aWRpbmcgYSBTQVggaW50ZXJmYWNlLAoraXQgYWxsb3dzIHN0YW5kYXJkIFhNTCB0b29scyB0byBiZSBhcHBsaWVkIHRvIGV2ZW4gdGhlIHdvcnN0IEhUTUwuCitUYWdTb3VwIGFsc28gaW5jbHVkZXMgYSBjb21tYW5kLWxpbmUgcHJvY2Vzc29yIHRoYXQgcmVhZHMgSFRNTCBmaWxlcworYW5kIGNhbiBnZW5lcmF0ZSBlaXRoZXIgY2xlYW4gSFRNTCBvciB3ZWxsLWZvcm1lZCBYTUwgdGhhdCBpcyBhCitjbG9zZSBhcHByb3hpbWF0aW9uIHRvIFhIVE1MLjwvcD4KKworPHA+VGhpcyBpcyBhbHNvIHRoZSBSRUFETUUgZmlsZSBwYWNrYWdlZCB3aXRoIFRhZ1NvdXAuPC9wPgorCis8cD5UYWdTb3VwIGlzIGZyZWUgYW5kIE9wZW4gU291cmNlIHNvZnR3YXJlLiAgQXMgb2YgdmVyc2lvbiAxLjIsIGl0CitpcyBsaWNlbnNlZCB1bmRlciB0aGUKKzxhIGhyZWY9Imh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9hcGFjaGUyLjAucGhwIj4KK0FwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMDwvYT4sIHdoaWNoIGFsbG93cyBwcm9wcmlldGFyeSByZS11c2UgYXMgd2VsbAorYXMgdXNlIHdpdGggR1BMIDMuMCBvciBHUEwgMi4wLW9yLWxhdGVyIHByb2plY3RzLiAgKElmIGFueW9uZSBuZWVkcyBhCitHUEwgMi4wIGxpY2Vuc2UgZm9yIGEgR1BMIDIuMC1vbmx5IHByb2plY3QsIGZlZWwgZnJlZSB0byBhc2suKQorCis8aDM+PGk+V2FybmluZzo8L2k+IFRhZ1NvdXAgd2lsbCBub3QgYnVpbGQgb24gc3RvY2sgSmF2YSA1Lnggb3IgNi54ITwvaDM+CisKKzxwPkR1ZSB0byBhIGJ1ZyBpbiB0aGUgdmVyc2lvbnMgb2YgWGFsYW4gc2hpcHBlZCB3aXRoIEphdmEgNS54IGFuZAorNi54LCBUYWdTb3VwIHdpbGwgbm90IGJ1aWxkIG91dCBvZiB0aGUgYm94LiAgWW91IG5lZWQgdG8gcmV0cmlldmUKKzxhIGhyZWY9Imh0dHA6Ly9wcmRvd25sb2Fkcy5zb3VyY2Vmb3JnZS5uZXQvc2F4b24vc2F4b242LTUtNS56aXAiPgorU2F4b24gNi41LjU8L2E+LCB3aGljaCBkb2VzIG5vdCBoYXZlIHRoZSBidWcuICBVbnBhY2sgdGhlCit6aXBmaWxlIGluIGFuIGVtcHR5IGRpcmVjdG9yeSBhbmQgY29weSB0aGUgPHR0PnNheG9uLmphcjwvdHQ+IGFuZAorPHR0PnNheG9uLXhtbC1hcGlzLmphcjwvdHQ+IGZpbGVzIHRvIDx0dD4kQU5UX0hPTUUvbGliPC90dD4uICBUaGUgQW50CitidWlsZCBwcm9jZXNzIGZvciBUYWdTb3VwIHdpbGwgdGhlbiBub3RpY2UgdGhhdCBTYXhvbiBpcyBhdmFpbGFibGUgYW5kCit1c2UgaXQgaW5zdGVhZC48L3A+CisKKzxoMz5UYWdTb3VwIDEuMiByZWxlYXNlZDwvaDM+CisKKzxwPlRoZXJlIGFyZSBhIGdyZWF0IG1hbnkgY2hhbmdlcywgbW9zdCBvZiB0aGVtIGZpeGVzIGZvciBsb25nLXN0YW5kaW5nCitidWdzLCBpbiB0aGlzIHJlbGVhc2UuICBPbmx5IHRoZSBtb3N0IGltcG9ydGFudCBhcmUgbGlzdGVkIGhlcmU7IGZvcgordGhlIHJlc3QsIHNlZSB0aGUgQ0hBTkdFUyBmaWxlIGluIHRoZSBzb3VyY2UgZGlzdHJpYnV0aW9uLiAgVmVyeSBzcGVjaWFsCit0aGFua3MgdG8gSm9qbyBEaWphbWNvLCB3aG9zZSBpbnRlbnNpdmUgZWZmb3J0cyBhdCBkZWJ1Z2dpbmcgbWFkZSB0aGlzCityZWxlYXNlIGEgdXNhYmxlIHVwZ3JhZGUgcmF0aGVyIHRoYW4gYSB1c2VsZXNzIG1hc3Mgb2YgdW5kZXRlY3RlZCBidWdzLjwvcD4KKworPHVsPgorCis8bGk+PHA+QXMgbm90ZWQgYWJvdmUsIEkgaGF2ZSBjaGFuZ2VkIHRoZSBsaWNlbnNlIHRvIEFwYWNoZSAyLjAuPC9wPjwvbGk+CisKKzxsaT48cD5UaGUgZGVmYXVsdCBjb250ZW50IG1vZGVsIGZvciBib2dvbnMgKHVua25vd24gZWxlbWVudHMpIGlzIG5vdworQU5ZIHJhdGhlciB0aGFuIEVNUFRZLiAgPGI+VGhpcyBpcyBhIGJyZWFraW5nIGNoYW5nZTwvYj4sIHdoaWNoIEkgaGF2ZQorZG9uZSBvbmx5IGJlY2F1c2UgdGhlcmUgd2FzIHNvIG11Y2ggZGVtYW5kIGZvciBpdC4gIEl0IGNhbiBiZSB1bmRvbmUKK29uIHRoZSBjb21tYW5kIGxpbmUgd2l0aCB0aGUgPGNvZGU+LS1lbXB0eWJvZ29uczwvY29kZT4gc3dpdGNoLCBvcgorcHJvZ3JhbW1hdGljYWxseSB3aXRoIDxjb2RlPnBhcnNlci5zZXRGZWF0dXJlKFBhcnNlci5lbXB0eUJvZ29uc0ZlYXR1cmUsCit0cnVlKTwvY29kZT4uPC9wPjwvbGk+CisKKzxsaT48cD5UaGUgcHJvY2Vzc2luZyBvZiBlbnRpdHkgcmVmZXJlbmNlcyBpbiBhdHRyaWJ1dGUgdmFsdWVzIGhhcworZmluYWxseSBiZWVuIGZpeGVkIHRvIGRvIHdoYXQgYnJvd3NlcnMgZG8uICBUaGF0IGlzLCBhIHJlZmVyZW5jZQoraXMgb25seSByZWNvZ25pemVkIGlmIGl0IGlzIHByb3Blcmx5IHRlcm1pbmF0ZWQgYnkgYSBzZW1pY29sb247CitvdGhlcndpc2UgaXQgaXMgdHJlYXRlZCBhcyBwbGFpbiB0ZXh0LiAgVGhpcyBtZWFucyB0aGF0IFVSSXMKK2xpa2UgPGNvZGU+Zm9vP2Nkb3duPTMyJmFtcDtjdXA9NDI8L2NvZGU+IGFyZSBubyBsb25nZXIgc2VlbiBhcworY29udGFpbmluZyBhbiBpbnN0YW5jZSBvZiB0aGUgJmN1cDsgY2hhcmFjdGVyICh3aG9zZSBuYW1lIGhhcHBlbnMgdG8KK2JlIDxjb2RlPmN1cDwvY29kZT4pLjwvcD48L2xpPgorCis8bGk+PHA+U2V2ZXJhbCBuZXcgc3dpdGNoZXMgaGF2ZSBiZWVuIGFkZGVkOgorCis8dWw+CisKKzxsaT48cD48Y29kZT4tLWRvY3R5cGUtc3lzdGVtPC9jb2RlPiBhbmQgPGNvZGU+LS1kb2N0eXBlLXB1YmxpYzwvY29kZT4KK2ZvcmNlIGEgPGNvZGU+RE9DVFlQRTwvY29kZT4gZGVjbGFyYXRpb24gdG8gYmUgb3V0cHV0IGFuZCBhbGxvdyBzZXR0aW5nCit0aGUgc3lzdGVtIGFuZCBwdWJsaWMgaWRlbnRpZmllcnMuPC9wPjwvbGk+CisKKzxsaT48cD48Y29kZT4tLXN0YW5kYWxvbmU8L2NvZGU+IGFuZCA8Y29kZT4tLXZlcnNpb248L2NvZGU+IGFsbG93IGNvbnRyb2wKK29mIHRoZSBYTUwgZGVjbGFyYXRpb24gdGhhdCBpcyBvdXRwdXQuICAoTm90ZSB0aGF0IFRhZ1NvdXAncyBYTUwgb3V0cHV0CitpcyBhbHdheXMgdmVyc2lvbiAxLjAsIGV2ZW4gaWYgeW91IHVzZSA8Y29kZT4tLXZlcnNpb249MS4xPC9jb2RlPi4pPC9wPjwvbGk+CisKKzxsaT48cD48Y29kZT4tLW5vcm9vdGJvZ29uczwvY29kZT4gY2F1c2VzIHVua25vd24gZWxlbWVudHMgbm90IHRvIGJlIGFsbG93ZWQKK2FzIHRoZSBkb2N1bWVudCByb290IGVsZW1lbnQuICBJbnN0ZWFkLCB0aGV5IGFyZSBtYWRlIGNoaWxkcmVuIG9mIHRoZQorZGVmYXVsdCByb290IGVsZW1lbnQgKHRoZSA8Y29kZT5odG1sPC9jb2RlPiBlbGVtZW50IGZvciBIVE1MKS48L3A+PC9saT4KKworPC91bD4KKzxsaT48cD5UaGUgVGFnU291cCBjb3JlIG5vdyBzdXBwb3J0cyBjaGFyYWN0ZXIgZW50aXRpZXMgd2l0aCB2YWx1ZXMKK2Fib3ZlIFUrRkZGRi4gIEFzIGEgY29uc2VxdWVuY2UsIHRoZSBIVE1MIHNjaGVtYSBub3cgc3VwcG9ydHMgYWxsCisyLDIxMCBzdGFuZGFyZCBjaGFyYWN0ZXIgZW50aXRpZXMgZnJvbSB0aGUgCis8YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi8yMDA3L1dELXhtbC1lbnRpdHktbmFtZXMtMjAwNzEyMTQiPgorMjAwNy0xMi0xNCBkcmFmdCBvZiBYTUwgRW50aXR5IERlZmluaXRpb25zIGZvciBDaGFyYWN0ZXJzPC9hPiwgZXhjZXB0IHRoZQorOTQgd2hpY2ggcmVxdWlyZSBtb3JlIHRoYW4gb25lIFVuaWNvZGUgY2hhcmFjdGVyIHRvIHJlcHJlc2VudC48L3A+PC9saT4KKworPGxpPlRoZSBTQVggZXZlbnRzIDxjb2RlPnN0YXJ0UHJlZml4TWFwcGluZzwvY29kZT4gYW5kCis8Y29kZT5lbmRQcmVmaXhNYXBwaW5nPC9jb2RlPiBhcmUgbm93IGJlaW5nIHJlcG9ydGVkIGZvciBhbGwgY2FzZXMgb2YKK2ZvcmVpZ24gZWxlbWVudHMgYW5kIGF0dHJpYnV0ZXMuPC9saT4KKworPGxpPjxwPkFsbCBidWdzIGFyb3VuZCBuZXdsaW5lIHByb2Nlc3Npbmcgb24gV2luZG93cyBzaG91bGQgbm93IGJlIGdvbmUuPC9wPjwvbGk+CisKKzxsaT5BIG51bWJlciBvZiBjb250ZW50IG1vZGVscyBoYXZlIGJlZW4gbG9vc2VuZWQgdG8gYWxsb3cgZWxlbWVudHMKK3RvIGFwcGVhciBpbiBuZXcgYW5kIG5vbi1zdGFuZGFyZCAoYnV0IGNvbW1vbmx5IGZvdW5kKSBwbGFjZXMuCitJbiBwYXJ0aWN1bGFyLCB0YWJsZXMgYXJlIG5vdyBhbGxvd2VkIGluc2lkZSBwYXJhZ3JhcGhzLCBhZ2FpbnN0IHRoZQorbGV0dGVyIG9mIHRoZSBXM0Mgc3BlY2lmaWNhdGlvbi48L3A+CisKKzxsaT48cD5TaW5jZSB0aGUgPGNvZGU+c3BhbjwvY29kZT4gZWxlbWVudCBpcyBpbnRlbmRlZCBmb3IgZmluZQorY29udHJvbCBvZiBhcHBlYXJhbmNlIHVzaW5nIENTUywgaXQgc2hvdWxkIG5ldmVyIGhhdmUgYmVlbiBhCityZXN0YXJ0YWJsZSBlbGVtZW50LiAgVGhpcyB2ZXJ5IGxvbmctc3RhbmRpbmcgYnVnIGhhcyBub3cgYmVlbgorZml4ZWQuPC9wPjwvbGk+CisKKzxsaT48cD5UaGUgZm9sbG93aW5nIG5vbi1zdGFuZGFyZCBlbGVtZW50cyBhcmUgbm93IGF0IGxlYXN0IHBhcnRseQorc3VwcG9ydGVkOiA8Y29kZT5iZ3NvdW5kPC9jb2RlPiwgPGNvZGU+Ymxpbms8L2NvZGU+LCA8Y29kZT5jYW52YXM8L2NvZGU+LAorPGNvZGU+Y29tbWVudDwvY29kZT4sIDxjb2RlPmxpc3Rpbmc8L2NvZGU+LCA8Y29kZT5tYXJxdWVlPC9jb2RlPiwKKzxjb2RlPm5vYnI8L2NvZGU+LCA8Y29kZT5yYmM8L2NvZGU+LCA8Y29kZT5yYjwvY29kZT4sIDxjb2RlPnJwPC9jb2RlPiwKKzxjb2RlPnJ0YzwvY29kZT4sIDxjb2RlPnJ0PC9jb2RlPiwgPGNvZGU+cnVieTwvY29kZT4sIDxjb2RlPndicjwvY29kZT4sCis8Y29kZT54bXA8L2NvZGU+LjwvcD48L2xpPgorCis8bGk+PHA+SW4gSFRNTCBvdXRwdXQgbW9kZSwgYm9vbGVhbiBhdHRyaWJ1dGVzIGxpa2UgPGNvZGU+Y2hlY2tlZDwvY29kZT4KK2FyZSBub3cgb3V0cHV0IGFzIHN1Y2gsIHJhdGhlciB0aGFuIGluIFhNTCBzdHlsZSBhcworPGNvZGU+Y2hlY2tlZD0iY2hlY2tlZCI8L2NvZGU+LjwvcD48L2xpPgorCis8bGk+PHA+UnVucyBvZiAmbHQ7IGNoYXJhY3RlcnMgc3VjaCBhcyAmbHQ7Jmx0OyBhbmQgJmx0OyZsdDsmbHQ7IGFyZSBub3cKK2hhbmRsZWQgY29ycmVjdGx5IGluIHRleHQgcmF0aGVyIHRoYW4gYmVpbmcgdHJhbnNmb3JtZWQgaW50byBleHRyZW1lbHkKK2JvZ3VzIHN0YXJ0LXRhZ3MuPC9wPjwvbGk+CisKKzwvdWw+CisKKzxwPjxhIGhyZWY9InRhZ3NvdXAtMS4yLmphciI+RG93bmxvYWQ8L2E+IHRoZSBUYWdTb3VwIDEuMiBqYXIKK2ZpbGUgaGVyZS4KK0l0J3MgYWJvdXQgODdLIGxvbmcuPGJyLz4KKzxhIGhyZWY9InRhZ3NvdXAtMS4yLXNyYy56aXAiPkRvd25sb2FkPC9hPiB0aGUgZnVsbCBUYWdTb3VwIDEuMiBzb3VyY2UKK2hlcmUuICBJZiB5b3UgZG9uJ3QgaGF2ZSB6aXAsIHlvdSBjYW4gdXNlIGphciB0byB1bnBhY2sgaXQuICA8YnIvPgorPGEgaHJlZj0iQ0hBTkdFUyI+RG93bmxvYWQ8L2E+IHRoZSBjdXJyZW50IENIQU5HRVMgZmlsZSBoZXJlLjwvcD4KKworPGgzPlRhZ1NvdXAgMS4xIHJlbGVhc2VkPC9oMz4KKworPHA+VGFnU291cCAxLjEgYWRkcyBUYXR1IFNhbG9yYW50YSdzIEpBWFAgc3VwcG9ydCBmb3IgVGFnU291cC4KK1RvIHVzZSBUYWdTb3VwIHdpdGhpbiB0aGUgSkFYUCBmcmFtZXdvcmsgKHdoaWNoIGlzIG5vdAorc29tZXRoaW5nIEkgbmVjZXNzYXJpbHkgcmVjb21tZW5kLCBidXQgaXQgaXMgcGFydCBvZiB0aGUgSmF2YQorWE1MIHBsYXRmb3JtKSwgeW91IGNhbiBjcmVhdGUgYSA8dHQ+U0FYUGFyc2VyPC90dD4gYnkgY2FsbGluZworPHR0Pm9yZy5jY2lsLmNvd2FuLnRhZ3NvdXAuamF4cC5TQVhQYXJzZXJJbXBsLm5ld0luc3RhbmNlKCk8L3R0Pi4gIFlvdSBjYW4KK2Fsc28gc2V0IHRoZSBzeXN0ZW0gcHJvcGVydHkgPHR0PmphdmF4LnhtbC5wYXJzZXJzLlNBWFBhcnNlckZhY3Rvcnk8L3R0PgordG8gPHR0Pm9yZy5jY2lsLmNvd2FuLnRhZ3NvdXAuamF4cC5TQVhGYWN0b3J5SW1wbDwvdHQ+LCBidXQgPGk+YmUKK2F3YXJlPC9pPiB0aGF0IGRvaW5nIHRoaXMgd2lsbCBjYXVzZSBhbGwgSkFYUC1iYXNlZCBYTUwgcGFyc2luZyB0byBnbwordGhyb3VnaCBUYWdTb3VwLCB3aGljaCBpcyBhIEJhZCBUaGluZyBpZiB5b3VyIGFwcGxpY2F0aW9uIGFsc28gcmVhZHMKK1hNTCBkb2N1bWVudHMuPC9wPgorCis8aDM+V2hhdCBUYWdTb3VwIGRvZXM8L2gzPgorPHA+VGFnU291cCBpcyBkZXNpZ25lZCBhcyBhIHBhcnNlciwgbm90IGEgd2hvbGUgYXBwbGljYXRpb247IGl0IGlzbid0CitpbnRlbmRlZCB0byBwZXJtYW5lbnRseSBjbGVhbiB1cCBiYWQgSFRNTCwgYXMgCis8YSBocmVmPSJodHRwOi8vdGlkeS5zZi5uZXQiPkhUTUwgVGlkeTwvYT4gZG9lcywgb25seSB0bworcGFyc2UgaXQgb24gdGhlIGZseS4gIFRoZXJlZm9yZSwgaXQgZG9lcyBub3QgY29udmVydCBwcmVzZW50YXRpb24gSFRNTAordG8gQ1NTIG9yIGFueXRoaW5nIHNpbWlsYXIuICBJdCBkb2VzIGd1YXJhbnRlZSB3ZWxsLXN0cnVjdHVyZWQgcmVzdWx0czoKK3RhZ3Mgd2lsbCB3aW5kIHVwIHByb3Blcmx5IG5lc3RlZCwgZGVmYXVsdCBhdHRyaWJ1dGVzIHdpbGwgYXBwZWFyCithcHByb3ByaWF0ZWx5LCBhbmQgc28gb24uPC9wPgorCis8cD5UaGUgc2VtYW50aWNzIG9mIFRhZ1NvdXAgYXJlIGFzIGZhciBhcyBwcmFjdGljYWwgdGhvc2Ugb2YgYWN0dWFsIEhUTUwKK2Jyb3dzZXJzLiAgSW4gcGFydGljdWxhciwgbmV2ZXIsIG5ldmVyIHdpbGwgaXQgdGhyb3cgYW55IHNvcnQgb2Ygc3ludGF4CitlcnJvcjogdGhlIFRhZ1NvdXAgbW90dG8gaXMKKzxhIGhyZWY9Imh0dHA6Ly93d3cuY3J1bWJtdXNldW0uY29tL3RydWNraW4uaHRtbCI+CisiSnVzdCBLZWVwIE9uIFRydWNraW4nIjwvYT4uICBCdXQgdGhlcmUncyBtdWNoLAorbXVjaCBtb3JlLiAgRm9yIGV4YW1wbGUsIGlmIHRoZSBmaXJzdCB0YWcgaXMgTEksIGl0IHdpbGwgc3VwcGx5IHRoZQorYXBwbGljYXRpb24gd2l0aCBlbmNsb3NpbmcgSFRNTCwgQk9EWSwgYW5kIFVMIHRhZ3MuICBXaHkgVUw/ICBCZWNhdXNlCit0aGF0J3Mgd2hhdCBicm93c2VycyBhc3N1bWUgaW4gdGhpcyBzaXR1YXRpb24uICBGb3IgdGhlIHNhbWUgcmVhc29uLAorb3ZlcmxhcHBpbmcgdGFncyBhcmUgY29ycmVjdGx5IHJlc3RhcnRlZCB3aGVuZXZlciBwb3NzaWJsZTogdGV4dCBsaWtlOjwvcD4KKworPHByZT5UaGlzIGlzICZsdDtCPmJvbGQsICZsdDtJPmJvbGQgaXRhbGljLCAmbHQ7L2I+aXRhbGljLCAmbHQ7L2k+bm9ybWFsIHRleHQKKzwvcHJlPgorCis8cD5nZXRzIGNvcnJlY3RseSByZXdyaXR0ZW4gYXM6PC9wPgorCis8cHJlPlRoaXMgaXMgJmx0O2I+Ym9sZCwgJmx0O2k+Ym9sZCBpdGFsaWMsICZsdDsvaT4mbHQ7L2I+Jmx0O2k+aXRhbGljLCAmbHQ7L2k+bm9ybWFsIHRleHQuCis8L3ByZT4KKworPHA+QnkgaW50ZW50aW9uLCBUYWdTb3VwIGlzIHNtYWxsIGFuZCBmYXN0LiAgSXQgZG9lcyBub3QKK2RlcGVuZCBvbiB0aGUgZXhpc3RlbmNlIG9mIGFueSBmcmFtZXdvcmsgb3RoZXIgdGhhbiBTQVgsIGFuZCBzaG91bGQgYmUKK2FibGUgdG8gd29yayB3aXRoIGFueSBmcmFtZXdvcmsgdGhhdCBjYW4gYWNjZXB0IFNBWCBwYXJzZXJzLgorSW4gcGFydGljdWxhciwgPGEgaHJlZj0iaHR0cDovL3d3dy5jYWZlY29ubGVjaGUub3JnL1hPTSI+WE9NPC9hPiAKK2lzIGtub3duIHRvIHdvcmsuCisKKzxwPllvdSBjYW4gcmVwbGFjZSB0aGUgbG93LWxldmVsIEhUTUwgc2Nhbm5lciB3aXRoIG9uZSBiYXNlZCBvbiBTZWFuIE1jR3JhdGgncworPGEgaHJlZj0iaHR0cDovL2dub3Npcy5jeC9wdWJsaXNoL3Byb2dyYW1taW5nL3htbF9tYXR0ZXJzXzE3Lmh0bWwiPlBZWDwvYT4KK2Zvcm1hdCAodmVyeSBjbG9zZSB0byBKYW1lcyBDbGFyaydzIEVTSVMgZm9ybWF0KS4gIFlvdSBjYW4gYWxzbyBzdXBwbHkKK2FuIEF1dG9EZXRlY3RvciB0aGF0IHBlZWtzIGF0IHRoZSBpbmNvbWluZyBieXRlIHN0cmVhbSBhbmQgZ3Vlc3NlcyBhCitjaGFyYWN0ZXIgZW5jb2RpbmcgZm9yIGl0LiAgT3RoZXJ3aXNlLCB0aGUgcGxhdGZvcm0gZGVmYXVsdCBpcyB1c2VkLiAKK0lmIHlvdSBuZWVkIGFuIGF1dG9kZXRlY3RvciBvZiBjaGFyYWN0ZXIgc2V0cywgY29uc2lkZXIgdHJ5aW5nIHRvCithZGFwdCB0aGUgPGEgaHJlZj0iaHR0cDovL2pjaGFyZGV0LnNvdXJjZWZvcmdlLm5ldC8iPk1vemlsbGEgb25lPC9hPjsKK2lmIHlvdSBzdWNjZWVkLCBsZXQgbWUga25vdy48L3A+CisKKzxoMz5Ob3RlOiBUYWdTb3VwIGluIEphdmEgMS4xPC9oMz4KKworPHA+SWYgeW91IGdvIHRocm91Z2ggdGhlIFRhZ1NvdXAgc291cmNlIGFuZCByZXBsYWNlIGFsbCByZWZlcmVuY2VzIHRvCis8Y29kZT5IYXNoTWFwPC9jb2RlPiB3aXRoIDxjb2RlPkhhc2h0YWJsZTwvY29kZT4gYW5kIHJlY29tcGlsZSwKK1RhZ1NvdXAgd2lsbCB3b3JrIGZpbmUgaW4gSmF2YSAxLjEgVk1zLiAgVGhhbmtzIHRvIFRob3JiaiZvc2xhc2g7cm4KK1Zpbm5lIGZvciB0aGlzIGRpc2NvdmVyeS48cD4KKworPGgzPlRoZSBUU2F4b24gWFNMVC1mb3ItSFRNTCBwcm9jZXNzb3I8L2gzPgorPHA+PGEgaHJlZj0iaHR0cDovL3d3dy5jY2lsLm9yZy9+Y293YW4iPkk8L2E+IGFtIGFsc28gZGlzdHJpYnV0aW5nCis8YSBocmVmPSJ0c2F4b24iPlRTYXhvbjwvYT4sIGEgcmVwYWNrYWdpbmcgb2YgdmVyc2lvbiA2LjUuNSBvZiBNaWNoYWVsCitLYXkncyBTYXhvbiBYU0xUIHZlcnNpb24gMS4wIGltcGxlbWVudGF0aW9uIHRoYXQgaW5jbHVkZXMgVGFnU291cC4KK1RTYXhvbiBpcyBhIGRyb3AtaW4gcmVwbGFjZW1lbnQgZm9yIFNheG9uLCBhbmQgY2FuIGJlIHVzZWQgdG8gcHJvY2VzcworZWl0aGVyIEhUTUwgb3IgWE1MIGRvY3VtZW50cyB3aXRoIFhTTFQgc3R5bGVzaGVldHMuCisKKworPGgzPlRhZ1NvdXAgYXMgYSBzdGFuZC1hbG9uZSBwcm9ncmFtPC9oMz4KKzxwPkl0IGlzIHBvc3NpYmxlIHRvIHJ1biBUYWdTb3VwIGFzIGEgcHJvZ3JhbSBieSBzYXlpbmcgPGNvZGU+amF2YQorLWphciB0YWdzb3VwLTEuMC4xIFs8aT5vcHRpb24gLi4uPC9pPl0gWzxpPmZpbGUgLi4uPC9pPl08L2NvZGU+LgorRmlsZXMgbWVudGlvbmVkIG9uIHRoZSBjb21tYW5kIGxpbmUgd2lsbCBiZSBwYXJzZWQgaW5kaXZpZHVhbGx5LiAgSWYgbm8KK2ZpbGVzIGFyZSBzcGVjaWZpZWQsIHRoZSBzdGFuZGFyZCBpbnB1dCBpcyByZWFkLjwvcD4KKworPHA+VGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSB1bmRlcnN0b29kOjwvcD4KKworPGRsPgorPGR0Pjxjb2RlPi0tZmlsZXM8L2NvZGU+PC9kdD4KKzxkZD5PdXRwdXQgaW50byBpbmRpdmlkdWFsIGZpbGVzLCB3aXRoIDxjb2RlPmh0bWw8L2NvZGU+IGV4dGVuc2lvbnMgY2hhbmdlZAordG8gPGNvZGU+eGh0bWw8L2NvZGU+LiAgT3RoZXJ3aXNlLCBhbGwgb3V0cHV0IGlzIHNlbnQgdG8gdGhlIHN0YW5kYXJkIG91dHB1dC48L2RkPgorCis8ZHQ+PGNvZGU+LS1odG1sPC9jb2RlPjwvZHQ+Cis8ZGQ+T3V0cHV0IGlzIGluIGNsZWFuIEhUTUw6IHRoZSBYTUwgZGVjbGFyYXRpb24gaXMgc3VwcHJlc3NlZCwgYXMgYXJlIGVuZC10YWdzCitmb3IgdGhlIGtub3duIGVtcHR5IGVsZW1lbnRzLjwvZGQ+CisKKzxkdD48Y29kZT4tLW9taXQteG1sLWRlY2xhcmF0aW9uPC9jb2RlPjwvZHQ+Cis8ZGQ+VGhlIFhNTCBkZWNsYXJhdGlvbiBpcyBzdXBwcmVzc2VkLjwvZGQ+CisKKzxkdD48Y29kZT4tLW1ldGhvZD1odG1sPC9jb2RlPjwvZHQ+Cis8ZGQ+RW5kLXRhZ3MgZm9yIHRoZSBrbm93biBlbXB0eSBIVE1MIGVsZW1lbnRzIGFyZSBzdXBwcmVzc2VkLjwvZGQ+CisKKzxkdD48Y29kZT4tLWRvY3R5cGUtc3lzdGVtPTxpPnN5c3RlbWlkPC9pPjwvY29kZT48L2R0PgorPGRkPkZvcmNlcyB0aGUgb3V0cHV0IG9mIGEgPGNvZGU+RE9DVFlQRTwvY29kZT4gZGVjbGFyYXRpb24gd2l0aCB0aGUgc3BlY2lmaWVkIHN5c3RlbWlkLjwvZGQ+CisKKzxkdD48Y29kZT4tLWRvY3R5cGUtcHVibGljPTxpPnB1YmxpY2lkPC9pPjwvY29kZT48L2R0PgorPGRkPkZvcmNlcyB0aGUgb3V0cHV0IG9mIGEgPGNvZGU+RE9DVFlQRTwvY29kZT4gZGVjbGFyYXRpb24gd2l0aCB0aGUgc3BlY2lmaWVkIHB1YmxpY2lkLjwvZGQ+CisKKzxkdD48Y29kZT4tLXZlcnNpb249PGk+dmVyc2lvbjwvaT48L2NvZGU+PC9kdD4KKzxkZD5TZXRzIHRoZSB2ZXJzaW9uIHN0cmluZyBpbiB0aGUgWE1MIGRlY2xhcmF0aW9uLjwvZGQ+CisKKzxkdD48Y29kZT4tLXN0YW5kYWxvbmU9PC9jb2RlPls8Y29kZT55ZXM8L2NvZGU+fDxjb2RlPm5vPC9jb2RlPl08L2R0PgorPGRkPlNldHMgdGhlIHN0YW5kYWxvbmUgZGVjbGFyYXRpb24gdG8geWVzIG9yIG5vLjwvZGQ+CisKKzxkdD48Y29kZT4tLXB5eDwvY29kZT48L2R0PgorPGRkPk91dHB1dCBpcyBpbiBQWVggZm9ybWF0LjwvZGQ+CisKKzxkdD48Y29kZT4tLXB5eGluPC9jb2RlPjwvZHQ+Cis8ZGQ+SW5wdXQgaXMgaW4gUFlYb2lkIGZvcm1hdCAobmVlZCBub3QgYmUgd2VsbC1mb3JtZWQpLjwvZGQ+CisKKzxkdD48Y29kZT4tLW5vbnM8L2NvZGU+PC9kdD4KKzxkZD5OYW1lc3BhY2VzIGFyZSBzdXBwcmVzc2VkLiAgTm9ybWFsbHksIGFsbCBlbGVtZW50cyBhcmUgaW4gdGhlIFhIVE1MIDEueAorbmFtZXNwYWNlLCBhbmQgYWxsIGF0dHJpYnV0ZXMgYXJlIGluIG5vIG5hbWVzcGFjZS48L2RkPgorCis8ZHQ+PGNvZGU+LS1ub2JvZ29uczwvY29kZT48L2R0PgorPGRkPkJvZ29ucyAodW5rbm93biBlbGVtZW50cykgYXJlIHN1cHByZXNzZWQuPC9kZD4KKworPGR0Pjxjb2RlPi0tbm9kZWZhdWx0czwvY29kZT48L2R0PgorPGRkPnN1cHByZXNzIGRlZmF1bHQgYXR0cmlidXRlIHZhbHVlczwvZGQ+CisKKzxkdD48Y29kZT4tLW5vY29sb25zPC9jb2RlPjwvZHQ+Cis8ZGQ+Y2hhbmdlICBleHBsaWNpdCBjb2xvbnMgaW4gZWxlbWVudCBhbmQgYXR0cmlidXRlIG5hbWVzIHRvIHVuZGVyc2NvcmVzPC9kZD4KKworPGR0Pjxjb2RlPi0tbm9yZXN0YXJ0PC9jb2RlPjwvZHQ+Cis8ZGQ+ZG9uJ3QgcmVzdGFydCBhbnkgbm9ybWFsbHkgcmVzdGFydGFibGUgZWxlbWVudHM8L2RkPgorCis8ZHQ+PGNvZGU+LS1pZ25vcmFibGU8L2NvZGU+PC9kdD4KKzxkZD5vdXRwdXQgd2hpdGVzcGFjZSBpbiBlbGVtZW50cyB3aXRoIGVsZW1lbnQtb25seSBjb250ZW50PC9kZD4KKworPGR0Pjxjb2RlPi0tZW1wdHlib2dvbnM8L2NvZGU+PC9kdD4KKzxkZD5Cb2dvbnMgYXJlIGdpdmVuIGEgY29udGVudCBtb2RlbCBvZiBFTVBUWSByYXRoZXIgdGhhbiBBTlkuPC9kZD4KKworPGR0Pjxjb2RlPi0tYW55PC9jb2RlPjwvZHQ+Cis8ZGQ+Qm9nb25zIGFyZSBnaXZlbiBhIGNvbnRlbnQgbW9kZWwgb2YgQU5ZIHJhdGhlciB0aGFuIEVNUFRZIChkZWZhdWx0KS48L2RkPgorCis8ZHQ+PGNvZGU+LS1ub3Jvb3Rib2dvbnM8L2NvZGU+PC9kdD4KKzxkZD5Eb24ndCBhbGxvdyBib2dvbnMgdG8gYmUgcm9vdCBlbGVtZW50czsgbWFrZSB0aGVtIHN1Ym9yZGluYXRlIHRvIHRoZSByb290LjwvZGQ+CisKKzxkdD48Y29kZT4tLWxleGljYWw8L2NvZGU+PC9kdD4KKzxkZD5QYXNzIHRocm91Z2ggSFRNTCBjb21tZW50cyBhbmQgRE9DVFlQRSBkZWNsYXJhdGlvbnMuICBIYXMgbm8gZWZmZWN0Cit3aGVuIG91dHB1dCBpcyBpbiBQWVggZm9ybWF0LjwvZGQ+CisKKzxkdD48Y29kZT4tLXJldXNlPC9jb2RlPjwvZHQ+Cis8ZGQ+UmV1c2UgYSBzaW5nbGUgaW5zdGFuY2Ugb2YgVGFnU291cCBwYXJzZXIgdGhyb3VnaG91dC4gIE5vcm1hbGx5LCBhIG5ldyBvbmUKK2lzIGluc3RhbnRpYXRlZCBmb3IgZWFjaCBpbnB1dCBmaWxlLjwvZGQ+CisKKzxkdD48Y29kZT4tLW5vY2RhdGE8L2NvZGU+PC9kdD4KKzxkZD5DaGFuZ2UgdGhlIGNvbnRlbnQgbW9kZWxzIG9mIHRoZSA8Y29kZT5zY3JpcHQ8L2NvZGU+IGFuZCA8Y29kZT5zdHlsZTwvY29kZT4gZWxlbWVudHMKK3RvIHRyZWF0IHRoZW0gYXMgb3JkaW5hcnkgI1BDREFUQSAodGV4dC1vbmx5KSBlbGVtZW50cywgYXMgaW4gWEhUTUwsIHJhdGhlciB0aGFuCit3aXRoIHRoZSBzcGVjaWFsIENEQVRBIGNvbnRlbnQgbW9kZWwuPC9kZD4KKworPGR0Pjxjb2RlPi0tZW5jb2Rpbmc9PC9jb2RlPjxpPmVuY29kaW5nPC9pPjwvZHQ+Cis8ZGQ+U3BlY2lmeSB0aGUgaW5wdXQgZW5jb2RpbmcuICBUaGUgZGVmYXVsdCBpcyB0aGUgSmF2YSBwbGF0Zm9ybSBkZWZhdWx0LjwvZGQ+CisKKzxkdD48Y29kZT4tLW91dHB1dC1lbmNvZGluZz08L2NvZGU+PGk+ZW5jb2Rpbmc8L2k+PC9kdD4KKzxkZD5TcGVjaWZ5IHRoZSBvdXRwdXQgZW5jb2RpbmcuICBUaGUgZGVmYXVsdCBpcyB0aGUgSmF2YSBwbGF0Zm9ybSBkZWZhdWx0LjwvZGQ+CisKKzxkdD48Y29kZT4tLWhlbHA8L2NvZGU+PC9kdD4KKzxkZD5QcmludCBoZWxwLjwvZGQ+CisKKzxkdD48Y29kZT4tLXZlcnNpb248L2NvZGU+PC9kdD4KKzxkZD5QcmludCB0aGUgdmVyc2lvbiBudW1iZXIuPC9kZD4KKworPC9kbD4KKworPGEgbmFtZT0icHJvcGVydGllcyI+PC9hPjxoMz5TQVggZmVhdHVyZXMgYW5kIHByb3BlcnRpZXM8L2gzPgorCis8cD5UYWdTb3VwIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgU0FYIGZlYXR1cmVzIGluIGFkZGl0aW9uIHRvIHRoZQorc3RhbmRhcmQgb25lczo8L3A+CisKKzxkbD4KKzxkdD48dHQ+aHR0cDovL3d3dy5jY2lsLm9yZy9+Y293YW4vdGFnc291cC9mZWF0dXJlcy9pZ25vcmUtYm9nb25zPC90dD48L2R0PgorPGRkPkEgdmFsdWUgb2YgInRydWUiIGluZGljYXRlcyB0aGF0IHRoZSBwYXJzZXIgd2lsbCBpZ25vcmUKK3Vua25vd24gZWxlbWVudHMuPC9kZD4KKworPGR0Pjx0dD5odHRwOi8vd3d3LmNjaWwub3JnL35jb3dhbi90YWdzb3VwL2ZlYXR1cmVzL2JvZ29ucy1lbXB0eTwvdHQ+PC9kdD4KKzxkZD5BIHZhbHVlIG9mICJ0cnVlIiBpbmRpY2F0ZXMgdGhhdCB0aGUgcGFyc2VyIHdpbGwgZ2l2ZSB1bmtub3duCitlbGVtZW50cyBhIGNvbnRlbnQgbW9kZWwgb2YgRU1QVFk7IGEgdmFsdWUgb2YgImZhbHNlIiwgYQorY29udGVudCBtb2RlbCBvZiBBTlkuPC9kZD4KKworPGR0Pjx0dD5odHRwOi8vd3d3LmNjaWwub3JnL35jb3dhbi90YWdzb3VwL2ZlYXR1cmVzL3Jvb3QtYm9nb25zPC90dD48L2R0PgorPGRkPkEgdmFsdWUgb2YgInRydWUiIGluZGljYXRlcyB0aGF0IHRoZSBwYXJzZXIgd2lsbCBhbGxvdyB1bmtub3duCitlbGVtZW50cyB0byBiZSB0aGUgcm9vdCBvZiB0aGUgb3V0cHV0IGRvY3VtZW50LjwvZGQ+CisKKworPGR0Pjx0dD5odHRwOi8vd3d3LmNjaWwub3JnL35jb3dhbi90YWdzb3VwL2ZlYXR1cmVzL2RlZmF1bHQtYXR0cmlidXRlczwvdHQ+PC9kdD4KKzxkZD5BIHZhbHVlIG9mICJ0cnVlIiBpbmRpY2F0ZXMgdGhhdCB0aGUgcGFyc2VyIHdpbGwgcmV0dXJuIGRlZmF1bHQKK2F0dHJpYnV0ZSB2YWx1ZXMgZm9yIG1pc3NpbmcgYXR0cmlidXRlcyB0aGF0IGhhdmUgZGVmYXVsdCB2YWx1ZXMuPC9kZD4KKworPGR0Pjx0dD5odHRwOi8vd3d3LmNjaWwub3JnL35jb3dhbi90YWdzb3VwL2ZlYXR1cmVzL3RyYW5zbGF0ZS1jb2xvbnM8L3R0PjwvZHQ+Cis8ZGQ+QSB2YWx1ZSBvZiAidHJ1ZSIgaW5kaWNhdGVzIHRoYXQgdGhlIHBhcnNlciB3aWxsIAordHJhbnNsYXRlIGNvbG9ucyBpbnRvIHVuZGVyc2NvcmVzIGluIG5hbWVzLjwvZGQ+CisKKzxkdD48dHQ+aHR0cDovL3d3dy5jY2lsLm9yZy9+Y293YW4vdGFnc291cC9mZWF0dXJlcy9yZXN0YXJ0LWVsZW1lbnRzPC90dD48L2R0PgorPGRkPkEgdmFsdWUgb2YgInRydWUiIGluZGljYXRlcyB0aGF0IHRoZSBwYXJzZXIgd2lsbCAKK2F0dGVtcHQgdG8gcmVzdGFydCB0aGUgcmVzdGFydGFibGUgZWxlbWVudHMuPC9kZD4KKworPGR0Pjx0dD5odHRwOi8vd3d3LmNjaWwub3JnL35jb3dhbi90YWdzb3VwL2ZlYXR1cmVzL2lnbm9yYWJsZS13aGl0ZXNwYWNlPC90dD48L2R0PgorPGRkPkEgdmFsdWUgb2YgInRydWUiIGluZGljYXRlcyB0aGF0IHRoZSBwYXJzZXIgd2lsbCAKK3RyYW5zbWl0IHdoaXRlc3BhY2UgaW4gZWxlbWVudC1vbmx5IGNvbnRlbnQgdmlhIHRoZSBTQVgKK2lnbm9yYWJsZVdoaXRlc3BhY2UgY2FsbGJhY2suICBOb3JtYWxseSB0aGlzIGlzIG5vdCBkb25lLAorYmVjYXVzZSBIVE1MIGlzIGFuIFNHTUwgYXBwbGljYXRpb24gYW5kIFNHTUwgc3VwcHJlc3Nlcworc3VjaCB3aGl0ZXNwYWNlLjwvZGQ+CisKKzxkdD48dHQ+aHR0cDovL3d3dy5jY2lsLm9yZy9+Y293YW4vdGFnc291cC9mZWF0dXJlcy9jZGF0YS1lbGVtZW50czwvdHQ+PC9kdD4KKzxkZD5BIHZhbHVlIG9mICJ0cnVlIiBpbmRpY2F0ZXMgdGhhdCB0aGUgcGFyc2VyIHdpbGwgCitwcm9jZXNzIHRoZSA8dHQ+c2NyaXB0PC90dD4gYW5kIDx0dD5zdHlsZTwvdHQ+IGVsZW1lbnRzCisob3IgYW55IGVsZW1lbnRzIHdpdGggPHR0PnR5cGU9J2NkYXRhJzwvdHQ+IGluIHRoZSBUU1NMIHNjaGVtYSkKK2FzIFNHTUwgQ0RBVEEgZWxlbWVudHMgKHRoYXQgaXMsIG5vIG1hcmt1cCBpcyByZWNvZ25pemVkIGV4Y2VwdAordGhlIG1hdGNoaW5nIGVuZC10YWcpLjwvZGQ+CisKKzwvZGw+CisKKzxwPlRhZ1NvdXAgc3VwcG9ydHMgdGhlIGZvbGxvd2luZyBTQVggcHJvcGVydGllcyBpbiBhZGRpdGlvbiB0bwordGhlIHN0YW5kYXJkIG9uZXM6PC9wPgorCis8ZGw+CisKKzxkdD48dHQ+aHR0cDovL3d3dy5jY2lsLm9yZy9+Y293YW4vdGFnc291cC9wcm9wZXJ0aWVzL3NjYW5uZXI8L3R0PjwvZHQ+Cis8ZGQ+U3BlY2lmaWVzIHRoZSBTY2FubmVyIG9iamVjdCB0aGlzIHBhcnNlciB1c2VzLjwvZGQ+CisKKzxkdD48dHQ+aHR0cDovL3d3dy5jY2lsLm9yZy9+Y293YW4vdGFnc291cC9wcm9wZXJ0aWVzL3NjaGVtYTwvdHQ+PC9kdD4KKzxkZD5TcGVjaWZpZXMgdGhlIFNjaGVtYSBvYmplY3QgdGhpcyBwYXJzZXIgdXNlcy48L2RkPgorCis8ZHQ+PHR0Pmh0dHA6Ly93d3cuY2NpbC5vcmcvfmNvd2FuL3RhZ3NvdXAvcHJvcGVydGllcy9hdXRvLWRldGVjdG9yPC90dD48L2R0PgorPGRkPlNwZWNpZmllcyB0aGUgQXV0b0RldGVjdG9yIChmb3IgZW5jb2RpbmcgZGV0ZWN0aW9uKSB0aGlzIHBhcnNlciB1c2VzLjwvZGQ+CisKKzwvZGw+CisgCis8aDM+TW9yZSBpbmZvcm1hdGlvbjwvaDM+Cis8cD5JIGdhdmUgYSBwcmVzZW50YXRpb24gKGEgbm9jdHVybmUsIHNvIGl0J3Mgbm90IG9uIHRoZSBzY2hlZHVsZSkgYXQKKzxhIGhyZWY9Imh0dHA6Ly93d3cuZXh0cmVtZW1hcmt1cC5jb20vZXh0cmVtZS8yMDA0Ij5FeHRyZW1lIE1hcmt1cCBMYW5ndWFnZXMgMjAwNDwvYT4KK2Fib3V0IFRhZ1NvdXAsIHVwZGF0ZWQgZnJvbSB0aGUgb25lCitwcmVzZW50ZWQgaW4gMjAwMiBhdCB0aGUgTmV3IFlvcmsgQ2l0eSBYTUwgU0lHIGFuZCBhdCBYTUwgMjAwMi4KK1RoaXMgaXMgdGhlIG1haW4gaGlnaC1sZXZlbCBkb2N1bWVudGF0aW9uIGFib3V0IGhvdyBUYWdTb3VwIHdvcmtzLgorRm9ybWF0czoKKzxhIGhyZWY9InRhZ3NvdXAub2RwIj5PcGVuRG9jdW1lbnQ8L2E+Cis8YSBocmVmPSJ0YWdzb3VwLnBwdCI+UG93ZXJwb2ludDwvYT4KKzxhIGhyZWY9InRhZ3NvdXAucGRmIj5QREY8L2E+LgorCis8cD5JIGFsc28gaGFkIHBlb3BsZSBhZGQgPGEgaHJlZj0iZXh0cmVtZS5odG1sIj4iZXZpbCIgSFRNTDwvYT4gdG8gYSBsYXJnZQorcG9zdGVyIHNvIHRoYXQgSSBjb3VsZCA8YSBocmVmPSJleHRyZW1lLnhodG1sIj5jbGVhbiBpdCB1cDwvYT47CitWaWV3IFNvdXJjZSBpcyBwcm9iYWJseSBtb3JlIHVzZWZ1bCB0aGFuIG9yZGluYXJ5IGJyb3dzaW5nLgorVGhlIG9yaWdpbmFsIGluc3RydWN0aW9ucyB3ZXJlOjwvcD4KKworPHAgYWxpZ249ImNlbnRlciI+U09VUEUgREUgQkFMSVNFUyAoQkUgRVZJTCkhPC9icj4KK0Vjcml0ZXogdW5lIGJhbGlzZSBvdXZyYW50ZSAoc2FucyBhdHRyaWJ1dHMpPGJyLz4gb3UgZmVybWFudGUgSFRNTCBpY2ksIHMudi5wLjxwLz4KKworCis8cD5UaGVyZSBpcyBhIDxhIGhyZWY9Imh0dHA6Ly9ncm91cHMueWFob28uY29tL2dyb3VwL3RhZ3NvdXAtZnJpZW5kcyI+Cit0YWdzb3VwLWZyaWVuZHM8L2E+IG1haWxpbmcgbGlzdCBob3N0ZWQgYXQgPGEgaHJlZj0iaHR0cDovL2dyb3Vwcy55YWhvby5jb20iPgorWWFob28gR3JvdXBzPC9hPi4gIFlvdSBjYW4KKzxhIGhyZWY9Imh0dHA6Ly9ncm91cHMueWFob28uY29tL2dyb3VwL3RhZ3NvdXAtZnJpZW5kcy9qb2luIj5qb2luPC9hPgordmlhIHRoZSBXZWIsIG9yIGJ5IHNlbmRpbmcgYSBibGFuayBlbWFpbCB0bworPGEgaHJlZj0ibWFpbHRvOnRhZ3NvdXAtZnJpZW5kcy1zdWJzY3JpYmVAeWFob29ncm91cHMuY29tIj48aT4KK3RhZ3NvdXAtZnJpZW5kcy1zdWJzY3JpYmVAeWFob29ncm91cHMuY29tPC9pPjwvYT4uCitUaGUgPGEgaHJlZj0iaHR0cDovL2dyb3Vwcy55YWhvby5jb20vZ3JvdXAvdGFnc291cC1mcmllbmRzL21lc3NhZ2VzIj4KK2FyY2hpdmVzPC9hPiBhcmUgb3BlbiB0byBhbGwuPC9wPgorCis8cD5PbmxpbmUgVGFnU291cCBwcm9jZXNzaW5nIGZvciBwdWJsaWNseSBhY2Nlc3NpYmxlIEhUTUwgZG9jdW1lbnRzCitpcyBub3cgPGEgaHJlZj0iaHR0cDovL3htbGFybXlrbmlmZS5vcmcvZG9jcy94aHRtbC90YWdzb3VwLyI+YXZhaWxhYmxlPC9hPgorY291cnRlc3kgb2YgTGVpZ2ggRG9kZHMuPC9wPgpkaWZmIC0tZ2l0IGEvc3JjL2RlZmluaXRpb25zL2h0bWwuc3RtbCBiL3NyYy9kZWZpbml0aW9ucy9odG1sLnN0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGNhYjk3MwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9kZWZpbml0aW9ucy9odG1sLnN0bWwKQEAgLTAsMCArMSwyNDkgQEAKKzwhLS0KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFRhZ1NvdXAgYW5kIGlzIENvcHlyaWdodCAyMDAyLTIwMDggYnkgSm9obiBDb3dhbi4KKy8vCisvLyBUYWdTb3VwIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwKKy8vIFZlcnNpb24gMi4wLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoaXMgbGljZW5zZSBhdAorLy8gaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIC4gIFlvdSBtYXkgYWxzbyBoYXZlCisvLyBhZGRpdGlvbmFsIGxlZ2FsIHJpZ2h0cyBub3QgZ3JhbnRlZCBieSB0aGlzIGxpY2Vuc2UuCisvLworLy8gVGFnU291cCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIHVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgVGFnU291cAorLy8gaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMKKy8vIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkOyBub3QgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eQorLy8gb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorLS0+CisKKzxzdGF0ZXRhYmxlIHhtbG5zPSdodHRwOi8vd3d3LmNjaWwub3JnL35jb3dhbi9YTUwvdGFnc291cC9zdG1sJworCQl2ZXJzaW9uPScxLjAnPgorCisJPHN5bWJvbCBpZD0nRU9GJy8+CisJPHN5bWJvbCBpZD0nUycvPgorCTxzeW1ib2wgaWQ9J2RlZmF1bHQnLz4KKworCTxhY3Rpb24gaWQ9J0FfQURVUCcvPgorCTxhY3Rpb24gaWQ9J0FfQURVUF9TQVZFJy8+CisJPGFjdGlvbiBpZD0nQV9BRFVQX1NUQUdDJy8+CisJPGFjdGlvbiBpZD0nQV9BTkFNRScvPgorCTxhY3Rpb24gaWQ9J0FfQU5BTUVfQURVUF9TVEFHQycvPgorCTxhY3Rpb24gaWQ9J0FfQVZBTCcvPgorCTxhY3Rpb24gaWQ9J0FfQVZBTF9TVEFHQycvPgorCTxhY3Rpb24gaWQ9J0FfQ0RBVEEnLz4KKwk8YWN0aW9uIGlkPSdBX0NNTlQnLz4KKwk8YWN0aW9uIGlkPSdBX0RFQ0wnLz4KKwk8YWN0aW9uIGlkPSdBX0VOVElUWScvPgorCTxhY3Rpb24gaWQ9J0FfRU5USVRZX1NUQVJUJy8+CisJPGFjdGlvbiBpZD0nQV9FVEFHJy8+CisJPGFjdGlvbiBpZD0nQV9FTVBUWVRBRycvPgorCTxhY3Rpb24gaWQ9J0FfQU5BTUVfQURVUCcvPgorCTxhY3Rpb24gaWQ9J0FfR0knLz4KKwk8YWN0aW9uIGlkPSdBX0dJX1NUQUdDJy8+CisJPGFjdGlvbiBpZD0nQV9MVCcvPgorCTxhY3Rpb24gaWQ9J0FfTFRfUENEQVRBJy8+CisJPGFjdGlvbiBpZD0nQV9NSU5VUycvPgorCTxhY3Rpb24gaWQ9J0FfTUlOVVMyJy8+CisJPGFjdGlvbiBpZD0nQV9NSU5VUzMnLz4KKwk8YWN0aW9uIGlkPSdBX1BDREFUQScvPgorCTxhY3Rpb24gaWQ9J0FfUEknLz4KKwk8YWN0aW9uIGlkPSdBX1BJVEFSR0VUJy8+CisJPGFjdGlvbiBpZD0nQV9QSVRBUkdFVF9QSScvPgorCTxhY3Rpb24gaWQ9J0FfU0FWRScvPgorCTxhY3Rpb24gaWQ9J0FfU0tJUCcvPgorCTxhY3Rpb24gaWQ9J0FfU1AnLz4KKwk8YWN0aW9uIGlkPSdBX1NUQUdDJy8+CisJPGFjdGlvbiBpZD0nQV9VTkdFVCcvPgorCTxhY3Rpb24gaWQ9J0FfVU5TQVZFX1BDREFUQScvPgorCisJPHN0YXRlIGlkPSdTX0FOQU1FJz4KKwkJPHRyIHN5bWJvbD0nZGVmYXVsdCcgYWN0aW9uPSdBX1NBVkUnIG5ld3N0YXRlPSdTX0FOQU1FJy8+CisJCTx0ciBjaGFyPSc9JyBhY3Rpb249J0FfQU5BTUUnIG5ld3N0YXRlPSdTX0FWQUwnLz4KKwkJPHRyIGNoYXI9Jz4nIGFjdGlvbj0nQV9BTkFNRV9BRFVQX1NUQUdDJyBuZXdzdGF0ZT0nU19QQ0RBVEEnLz4KKwkJPHRyIGNoYXI9Jy8nIGFjdGlvbj0nQV9BTkFNRV9BRFVQJyBuZXdzdGF0ZT0nU19FTVBUWVRBRycvPgorCQk8dHIgc3ltYm9sPSdFT0YnIGFjdGlvbj0nQV9BTkFNRV9BRFVQX1NUQUdDJyBuZXdzdGF0ZT0nU19ET05FJy8+CisJCTx0ciBzeW1ib2w9J1MnIGFjdGlvbj0nQV9BTkFNRScgbmV3c3RhdGU9J1NfRVEnLz4KKwk8L3N0YXRlPgorCTxzdGF0ZSBpZD0nU19BUE9TJz4KKwkJPHRyIHN5bWJvbD0nZGVmYXVsdCcgYWN0aW9uPSdBX1NBVkUnIG5ld3N0YXRlPSdTX0FQT1MnLz4KKwkJPHRyIGNoYXI9JyZhcG9zOycgYWN0aW9uPSdBX0FWQUwnIG5ld3N0YXRlPSdTX1RBR1dTJy8+CisJCTx0ciBzeW1ib2w9J0VPRicgYWN0aW9uPSdBX0FWQUxfU1RBR0MnIG5ld3N0YXRlPSdTX0RPTkUnLz4KKwkJPHRyIHN5bWJvbD0nUycgYWN0aW9uPSdBX1NQJyBuZXdzdGF0ZT0nU19BUE9TJy8+CisJPC9zdGF0ZT4KKwk8c3RhdGUgaWQ9J1NfQVZBTCc+CisJCTx0ciBzeW1ib2w9J2RlZmF1bHQnIGFjdGlvbj0nQV9TQVZFJyBuZXdzdGF0ZT0nU19TVEFHQycvPgorCQk8dHIgY2hhcj0nIicgYWN0aW9uPSdBX1NLSVAnIG5ld3N0YXRlPSdTX1FVT1QnLz4KKwkJPHRyIGNoYXI9JyZhcG9zOycgYWN0aW9uPSdBX1NLSVAnIG5ld3N0YXRlPSdTX0FQT1MnLz4KKwkJPHRyIGNoYXI9Jz4nIGFjdGlvbj0nQV9BVkFMX1NUQUdDJyBuZXdzdGF0ZT0nU19QQ0RBVEEnLz4KKwkJPHRyIHN5bWJvbD0nRU9GJyBhY3Rpb249J0FfQVZBTF9TVEFHQycgbmV3c3RhdGU9J1NfRE9ORScvPgorCQk8dHIgc3ltYm9sPSdTJyBhY3Rpb249J0FfU0tJUCcgbmV3c3RhdGU9J1NfQVZBTCcvPgorCTwvc3RhdGU+CisJPHN0YXRlIGlkPSdTX0NEQVRBJz4KKwkJPHRyIHN5bWJvbD0nZGVmYXVsdCcgYWN0aW9uPSdBX1NBVkUnIG5ld3N0YXRlPSdTX0NEQVRBJy8+CisJCTx0ciBjaGFyPScmbHQ7JyBhY3Rpb249J0FfU0FWRScgbmV3c3RhdGU9J1NfQ0RBVEEyJy8+CisJCTx0ciBzeW1ib2w9J0VPRicgYWN0aW9uPSdBX1BDREFUQScgbmV3c3RhdGU9J1NfRE9ORScvPgorCTwvc3RhdGU+CisJPHN0YXRlIGlkPSdTX0NEQVRBMic+CisJCTx0ciBzeW1ib2w9J2RlZmF1bHQnIGFjdGlvbj0nQV9TQVZFJyBuZXdzdGF0ZT0nU19DREFUQScvPgorCQk8dHIgY2hhcj0nLycgYWN0aW9uPSdBX1VOU0FWRV9QQ0RBVEEnIG5ld3N0YXRlPSdTX0VUQUcnLz4KKwkJPHRyIHN5bWJvbD0nRU9GJyBhY3Rpb249J0FfVU5TQVZFX1BDREFUQScgbmV3c3RhdGU9J1NfRE9ORScvPgorCTwvc3RhdGU+CisJPHN0YXRlIGlkPSdTX0NPTSc+CisJCTx0ciBzeW1ib2w9J2RlZmF1bHQnIGFjdGlvbj0nQV9TQVZFJyBuZXdzdGF0ZT0nU19DT00yJy8+CisJCTx0ciBjaGFyPSctJyBhY3Rpb249J0FfU0tJUCcgbmV3c3RhdGU9J1NfQ09NMicvPgorCQk8dHIgc3ltYm9sPSdFT0YnIGFjdGlvbj0nQV9DTU5UJyBuZXdzdGF0ZT0nU19ET05FJy8+CisJPC9zdGF0ZT4KKwk8c3RhdGUgaWQ9J1NfQ09NMic+CisJCTx0ciBzeW1ib2w9J2RlZmF1bHQnIGFjdGlvbj0nQV9TQVZFJyBuZXdzdGF0ZT0nU19DT00yJy8+CisJCTx0ciBjaGFyPSctJyBhY3Rpb249J0FfU0tJUCcgbmV3c3RhdGU9J1NfQ09NMycvPgorCQk8dHIgc3ltYm9sPSdFT0YnIGFjdGlvbj0nQV9DTU5UJyBuZXdzdGF0ZT0nU19ET05FJy8+CisJPC9zdGF0ZT4KKwk8c3RhdGUgaWQ9J1NfQ09NMyc+CisJCTx0ciBzeW1ib2w9J2RlZmF1bHQnIGFjdGlvbj0nQV9NSU5VUycgbmV3c3RhdGU9J1NfQ09NMicvPgorCQk8dHIgY2hhcj0nLScgYWN0aW9uPSdBX1NLSVAnIG5ld3N0YXRlPSdTX0NPTTQnLz4KKwkJPHRyIHN5bWJvbD0nRU9GJyBhY3Rpb249J0FfQ01OVCcgbmV3c3RhdGU9J1NfRE9ORScvPgorCTwvc3RhdGU+CisJPHN0YXRlIGlkPSdTX0NPTTQnPgorCQk8dHIgc3ltYm9sPSdkZWZhdWx0JyBhY3Rpb249J0FfTUlOVVMyJyBuZXdzdGF0ZT0nU19DT00yJy8+CisJCTx0ciBjaGFyPSctJyBhY3Rpb249J0FfTUlOVVMzJyBuZXdzdGF0ZT0nU19DT000Jy8+CisJCTx0ciBjaGFyPSc+JyBhY3Rpb249J0FfQ01OVCcgbmV3c3RhdGU9J1NfUENEQVRBJy8+CisJCTx0ciBzeW1ib2w9J0VPRicgYWN0aW9uPSdBX0NNTlQnIG5ld3N0YXRlPSdTX0RPTkUnLz4KKwk8L3N0YXRlPgorCTxzdGF0ZSBpZD0nU19ERUNMJz4KKwkJPHRyIHN5bWJvbD0nZGVmYXVsdCcgYWN0aW9uPSdBX1NBVkUnIG5ld3N0YXRlPSdTX0RFQ0wyJy8+CisJCTx0ciBjaGFyPSctJyBhY3Rpb249J0FfU0tJUCcgbmV3c3RhdGU9J1NfQ09NJy8+CisJCTx0ciBjaGFyPSdbJyBhY3Rpb249J0FfU0tJUCcgbmV3c3RhdGU9J1NfQkInLz4KKwkJPHRyIGNoYXI9Jz4nIGFjdGlvbj0nQV9TS0lQJyBuZXdzdGF0ZT0nU19QQ0RBVEEnLz4KKwkJPHRyIHN5bWJvbD0nRU9GJyBhY3Rpb249J0FfU0tJUCcgbmV3c3RhdGU9J1NfRE9ORScvPgorCTwvc3RhdGU+CisJPHN0YXRlIGlkPSdTX0RFQ0wyJz4KKwkJPHRyIHN5bWJvbD0nZGVmYXVsdCcgYWN0aW9uPSdBX1NBVkUnIG5ld3N0YXRlPSdTX0RFQ0wyJy8+CisJCTx0ciBjaGFyPSc+JyBhY3Rpb249J0FfREVDTCcgbmV3c3RhdGU9J1NfUENEQVRBJy8+CisJCTx0ciBzeW1ib2w9J0VPRicgYWN0aW9uPSdBX1NLSVAnIG5ld3N0YXRlPSdTX0RPTkUnLz4KKwk8L3N0YXRlPgorCTxzdGF0ZSBpZD0nU19FTlQnPgorCQk8dHIgc3ltYm9sPSdkZWZhdWx0JyBhY3Rpb249J0FfRU5USVRZJyBuZXdzdGF0ZT0nU19FTlQnLz4KKwkJPHRyIHN5bWJvbD0nRU9GJyBhY3Rpb249J0FfRU5USVRZJyBuZXdzdGF0ZT0nU19ET05FJy8+CisJPC9zdGF0ZT4KKwk8c3RhdGUgaWQ9J1NfRVEnPgorCQk8dHIgc3ltYm9sPSdkZWZhdWx0JyBhY3Rpb249J0FfQURVUF9TQVZFJyBuZXdzdGF0ZT0nU19BTkFNRScvPgorCQk8dHIgY2hhcj0nPScgYWN0aW9uPSdBX1NLSVAnIG5ld3N0YXRlPSdTX0FWQUwnLz4KKwkJPHRyIGNoYXI9Jz4nIGFjdGlvbj0nQV9BRFVQX1NUQUdDJyBuZXdzdGF0ZT0nU19QQ0RBVEEnLz4KKwkJPHRyIHN5bWJvbD0nRU9GJyBhY3Rpb249J0FfQURVUF9TVEFHQycgbmV3c3RhdGU9J1NfRE9ORScvPgorCQk8dHIgc3ltYm9sPSdTJyBhY3Rpb249J0FfU0tJUCcgbmV3c3RhdGU9J1NfRVEnLz4KKwk8L3N0YXRlPgorCTxzdGF0ZSBpZD0nU19FVEFHJz4KKwkJPHRyIHN5bWJvbD0nZGVmYXVsdCcgYWN0aW9uPSdBX1NBVkUnIG5ld3N0YXRlPSdTX0VUQUcnLz4KKwkJPHRyIGNoYXI9Jz4nIGFjdGlvbj0nQV9FVEFHJyBuZXdzdGF0ZT0nU19QQ0RBVEEnLz4KKwkJPHRyIHN5bWJvbD0nRU9GJyBhY3Rpb249J0FfRVRBRycgbmV3c3RhdGU9J1NfRE9ORScvPgorCQk8dHIgc3ltYm9sPSdTJyBhY3Rpb249J0FfU0tJUCcgbmV3c3RhdGU9J1NfRVRBRycvPgorCTwvc3RhdGU+CisJPHN0YXRlIGlkPSdTX0dJJz4KKwkJPHRyIHN5bWJvbD0nZGVmYXVsdCcgYWN0aW9uPSdBX1NBVkUnIG5ld3N0YXRlPSdTX0dJJy8+CisJCTx0ciBjaGFyPScvJyBhY3Rpb249J0FfU0tJUCcgbmV3c3RhdGU9J1NfRU1QVFlUQUcnLz4KKwkJPHRyIGNoYXI9Jz4nIGFjdGlvbj0nQV9HSV9TVEFHQycgbmV3c3RhdGU9J1NfUENEQVRBJy8+CisJCTx0ciBzeW1ib2w9J0VPRicgYWN0aW9uPSdBX1NLSVAnIG5ld3N0YXRlPSdTX0RPTkUnLz4KKwkJPHRyIHN5bWJvbD0nUycgYWN0aW9uPSdBX0dJJyBuZXdzdGF0ZT0nU19UQUdXUycvPgorCTwvc3RhdGU+CisJPHN0YXRlIGlkPSdTX05DUic+CisJCTx0ciBzeW1ib2w9J2RlZmF1bHQnIGFjdGlvbj0nQV9FTlRJVFknIG5ld3N0YXRlPSdTX05DUicvPgorCQk8dHIgc3ltYm9sPSdFT0YnIGFjdGlvbj0nQV9FTlRJVFknIG5ld3N0YXRlPSdTX0RPTkUnLz4KKwk8L3N0YXRlPgorCTxzdGF0ZSBpZD0nU19YTkNSJz4KKwkJPHRyIHN5bWJvbD0nZGVmYXVsdCcgYWN0aW9uPSdBX0VOVElUWScgbmV3c3RhdGU9J1NfWE5DUicvPgorCQk8dHIgc3ltYm9sPSdFT0YnIGFjdGlvbj0nQV9FTlRJVFknIG5ld3N0YXRlPSdTX0RPTkUnLz4KKwk8L3N0YXRlPgorCTxzdGF0ZSBpZD0nU19QQ0RBVEEnPgorCQk8dHIgc3ltYm9sPSdkZWZhdWx0JyBhY3Rpb249J0FfU0FWRScgbmV3c3RhdGU9J1NfUENEQVRBJy8+CisJCTx0ciBjaGFyPScmYW1wOycgYWN0aW9uPSdBX0VOVElUWV9TVEFSVCcgbmV3c3RhdGU9J1NfRU5UJy8+CisJCTx0ciBjaGFyPScmbHQ7JyBhY3Rpb249J0FfUENEQVRBJyBuZXdzdGF0ZT0nU19UQUcnLz4KKwkJPHRyIHN5bWJvbD0nRU9GJyBhY3Rpb249J0FfUENEQVRBJyBuZXdzdGF0ZT0nU19ET05FJy8+CisJPC9zdGF0ZT4KKwk8c3RhdGUgaWQ9J1NfUEknPgorCQk8dHIgc3ltYm9sPSdkZWZhdWx0JyBhY3Rpb249J0FfU0FWRScgbmV3c3RhdGU9J1NfUEknLz4KKwkJPHRyIGNoYXI9Jz4nIGFjdGlvbj0nQV9QSScgbmV3c3RhdGU9J1NfUENEQVRBJy8+CisJCTx0ciBzeW1ib2w9J0VPRicgYWN0aW9uPSdBX1BJJyBuZXdzdGF0ZT0nU19ET05FJy8+CisJPC9zdGF0ZT4KKwk8c3RhdGUgaWQ9J1NfUElUQVJHRVQnPgorCQk8dHIgc3ltYm9sPSdkZWZhdWx0JyBhY3Rpb249J0FfU0FWRScgbmV3c3RhdGU9J1NfUElUQVJHRVQnLz4KKwkJPHRyIGNoYXI9Jz4nIGFjdGlvbj0nQV9QSVRBUkdFVF9QSScgbmV3c3RhdGU9J1NfUENEQVRBJy8+CisJCTx0ciBzeW1ib2w9J0VPRicgYWN0aW9uPSdBX1BJVEFSR0VUX1BJJyBuZXdzdGF0ZT0nU19ET05FJy8+CisJCTx0ciBzeW1ib2w9J1MnIGFjdGlvbj0nQV9QSVRBUkdFVCcgbmV3c3RhdGU9J1NfUEknLz4KKwk8L3N0YXRlPgorCTxzdGF0ZSBpZD0nU19RVU9UJz4KKwkJPHRyIHN5bWJvbD0nZGVmYXVsdCcgYWN0aW9uPSdBX1NBVkUnIG5ld3N0YXRlPSdTX1FVT1QnLz4KKwkJPHRyIGNoYXI9JyInIGFjdGlvbj0nQV9BVkFMJyBuZXdzdGF0ZT0nU19UQUdXUycvPgorCQk8dHIgc3ltYm9sPSdFT0YnIGFjdGlvbj0nQV9BVkFMX1NUQUdDJyBuZXdzdGF0ZT0nU19ET05FJy8+CisJCTx0ciBzeW1ib2w9J1MnIGFjdGlvbj0nQV9TUCcgbmV3c3RhdGU9J1NfUVVPVCcvPgorCTwvc3RhdGU+CisJPHN0YXRlIGlkPSdTX1NUQUdDJz4KKwkJPHRyIHN5bWJvbD0nZGVmYXVsdCcgYWN0aW9uPSdBX1NBVkUnIG5ld3N0YXRlPSdTX1NUQUdDJy8+CisJCTx0ciBjaGFyPSc+JyBhY3Rpb249J0FfQVZBTF9TVEFHQycgbmV3c3RhdGU9J1NfUENEQVRBJy8+CisJCTx0ciBzeW1ib2w9J0VPRicgYWN0aW9uPSdBX0FWQUxfU1RBR0MnIG5ld3N0YXRlPSdTX0RPTkUnLz4KKwkJPHRyIHN5bWJvbD0nUycgYWN0aW9uPSdBX0FWQUwnIG5ld3N0YXRlPSdTX1RBR1dTJy8+CisJPC9zdGF0ZT4KKwk8c3RhdGUgaWQ9J1NfVEFHJz4KKwkJPHRyIHN5bWJvbD0nZGVmYXVsdCcgYWN0aW9uPSdBX1NBVkUnIG5ld3N0YXRlPSdTX0dJJy8+CisJCTx0ciBjaGFyPSchJyBhY3Rpb249J0FfU0tJUCcgbmV3c3RhdGU9J1NfREVDTCcvPgorCQk8dHIgY2hhcj0nLycgYWN0aW9uPSdBX1NLSVAnIG5ld3N0YXRlPSdTX0VUQUcnLz4KKwkJPHRyIGNoYXI9Jz8nIGFjdGlvbj0nQV9TS0lQJyBuZXdzdGF0ZT0nU19QSVRBUkdFVCcvPgorCQk8dHIgY2hhcj0nJmx0OycgYWN0aW9uPSdBX1NBVkUnIG5ld3N0YXRlPSdTX1RBRycvPgorCQk8dHIgc3ltYm9sPSdFT0YnIGFjdGlvbj0nQV9MVF9QQ0RBVEEnIG5ld3N0YXRlPSdTX0RPTkUnLz4KKwkJPHRyIHN5bWJvbD0nUycgYWN0aW9uPSdBX0xUJyBuZXdzdGF0ZT0nU19QQ0RBVEEnLz4KKwk8L3N0YXRlPgorCTxzdGF0ZSBpZD0nU19UQUdXUyc+CisJCTx0ciBzeW1ib2w9J2RlZmF1bHQnIGFjdGlvbj0nQV9TQVZFJyBuZXdzdGF0ZT0nU19BTkFNRScvPgorCQk8dHIgY2hhcj0nLycgYWN0aW9uPSdBX1NLSVAnIG5ld3N0YXRlPSdTX0VNUFRZVEFHJy8+CisJCTx0ciBjaGFyPSc+JyBhY3Rpb249J0FfU1RBR0MnIG5ld3N0YXRlPSdTX1BDREFUQScvPgorCQk8dHIgc3ltYm9sPSdFT0YnIGFjdGlvbj0nQV9TVEFHQycgbmV3c3RhdGU9J1NfRE9ORScvPgorCQk8dHIgc3ltYm9sPSdTJyBhY3Rpb249J0FfU0tJUCcgbmV3c3RhdGU9J1NfVEFHV1MnLz4KKwk8L3N0YXRlPgorCTxzdGF0ZSBpZD0nU19FTVBUWVRBRyc+CisJCTx0ciBzeW1ib2w9J1MnIGFjdGlvbj0nQV9TS0lQJyBuZXdzdGF0ZT0nU19UQUdXUycvPgorCQk8dHIgc3ltYm9sPSdkZWZhdWx0JyBhY3Rpb249J0FfU0FWRScgbmV3c3RhdGU9J1NfQU5BTUUnLz4KKwkJPHRyIGNoYXI9Jz4nIGFjdGlvbj0nQV9FTVBUWVRBRycgbmV3c3RhdGU9J1NfUENEQVRBJy8+CisJPC9zdGF0ZT4KKwk8c3RhdGUgaWQ9J1NfQkInPgorCQk8dHIgY2hhcj0nQycgYWN0aW9uPSdBX1NLSVAnIG5ld3N0YXRlPSdTX0JCQycvPgorCQk8dHIgc3ltYm9sPSdkZWZhdWx0JyBhY3Rpb249J0FfU0tJUCcgbmV3c3RhdGU9J1NfREVDTCcvPgorCQk8dHIgc3ltYm9sPSdFT0YnIGFjdGlvbj0nQV9TS0lQJyBuZXdzdGF0ZT0nU19ET05FJy8+CisJPC9zdGF0ZT4KKwk8c3RhdGUgaWQ9J1NfQkJDJz4KKwkJPHRyIGNoYXI9J0QnIGFjdGlvbj0nQV9TS0lQJyBuZXdzdGF0ZT0nU19CQkNEJy8+CisJCTx0ciBzeW1ib2w9J2RlZmF1bHQnIGFjdGlvbj0nQV9TS0lQJyBuZXdzdGF0ZT0nU19ERUNMJy8+CisJCTx0ciBzeW1ib2w9J0VPRicgYWN0aW9uPSdBX1NLSVAnIG5ld3N0YXRlPSdTX0RPTkUnLz4KKwk8L3N0YXRlPgorCTxzdGF0ZSBpZD0nU19CQkNEJz4KKwkJPHRyIGNoYXI9J0EnIGFjdGlvbj0nQV9TS0lQJyBuZXdzdGF0ZT0nU19CQkNEQScvPgorCQk8dHIgc3ltYm9sPSdkZWZhdWx0JyBhY3Rpb249J0FfU0tJUCcgbmV3c3RhdGU9J1NfREVDTCcvPgorCQk8dHIgc3ltYm9sPSdFT0YnIGFjdGlvbj0nQV9TS0lQJyBuZXdzdGF0ZT0nU19ET05FJy8+CisJPC9zdGF0ZT4KKwk8c3RhdGUgaWQ9J1NfQkJDREEnPgorCQk8dHIgY2hhcj0nVCcgYWN0aW9uPSdBX1NLSVAnIG5ld3N0YXRlPSdTX0JCQ0RBVCcvPgorCQk8dHIgc3ltYm9sPSdkZWZhdWx0JyBhY3Rpb249J0FfU0tJUCcgbmV3c3RhdGU9J1NfREVDTCcvPgorCQk8dHIgc3ltYm9sPSdFT0YnIGFjdGlvbj0nQV9TS0lQJyBuZXdzdGF0ZT0nU19ET05FJy8+CisJPC9zdGF0ZT4KKwk8c3RhdGUgaWQ9J1NfQkJDREFUJz4KKwkJPHRyIGNoYXI9J0EnIGFjdGlvbj0nQV9TS0lQJyBuZXdzdGF0ZT0nU19CQkNEQVRBJy8+CisJCTx0ciBzeW1ib2w9J2RlZmF1bHQnIGFjdGlvbj0nQV9TS0lQJyBuZXdzdGF0ZT0nU19ERUNMJy8+CisJCTx0ciBzeW1ib2w9J0VPRicgYWN0aW9uPSdBX1NLSVAnIG5ld3N0YXRlPSdTX0RPTkUnLz4KKwk8L3N0YXRlPgorCTxzdGF0ZSBpZD0nU19CQkNEQVRBJz4KKwkJPHRyIGNoYXI9J1snIGFjdGlvbj0nQV9TS0lQJyBuZXdzdGF0ZT0nU19DRFNFQ1QnLz4KKwkJPHRyIHN5bWJvbD0nZGVmYXVsdCcgYWN0aW9uPSdBX1NLSVAnIG5ld3N0YXRlPSdTX0RFQ0wnLz4KKwkJPHRyIHN5bWJvbD0nRU9GJyBhY3Rpb249J0FfU0tJUCcgbmV3c3RhdGU9J1NfRE9ORScvPgorCTwvc3RhdGU+CisJPHN0YXRlIGlkPSdTX0NEU0VDVCc+CisJCTx0ciBjaGFyPSddJyBhY3Rpb249J0FfU0FWRScgbmV3c3RhdGU9J1NfQ0RTRUNUMScvPgorCQk8dHIgc3ltYm9sPSdkZWZhdWx0JyBhY3Rpb249J0FfU0FWRScgbmV3c3RhdGU9J1NfQ0RTRUNUJy8+CisJCTx0ciBzeW1ib2w9J0VPRicgYWN0aW9uPSdBX1NLSVAnIG5ld3N0YXRlPSdTX0RPTkUnLz4KKwk8L3N0YXRlPgorCTxzdGF0ZSBpZD0nU19DRFNFQ1QxJz4KKwkJPHRyIGNoYXI9J10nIGFjdGlvbj0nQV9TQVZFJyBuZXdzdGF0ZT0nU19DRFNFQ1QyJy8+CisJCTx0ciBzeW1ib2w9J2RlZmF1bHQnIGFjdGlvbj0nQV9TQVZFJyBuZXdzdGF0ZT0nU19DRFNFQ1QnLz4KKwkJPHRyIHN5bWJvbD0nRU9GJyBhY3Rpb249J0FfU0tJUCcgbmV3c3RhdGU9J1NfRE9ORScvPgorCTwvc3RhdGU+CisJPHN0YXRlIGlkPSdTX0NEU0VDVDInPgorCQk8dHIgY2hhcj0nPicgYWN0aW9uPSdBX0NEQVRBJyBuZXdzdGF0ZT0nU19QQ0RBVEEnLz4KKwkJPHRyIHN5bWJvbD0nZGVmYXVsdCcgYWN0aW9uPSdBX1NBVkUnIG5ld3N0YXRlPSdTX0NEU0VDVCcvPgorCQk8dHIgc3ltYm9sPSdFT0YnIGFjdGlvbj0nQV9TS0lQJyBuZXdzdGF0ZT0nU19ET05FJy8+CisJPC9zdGF0ZT4KKwk8c3RhdGUgaWQ9J1NfRE9ORScvPgorPC9zdGF0ZXRhYmxlPgpkaWZmIC0tZ2l0IGEvc3JjL2RlZmluaXRpb25zL2h0bWwudHNzbCBiL3NyYy9kZWZpbml0aW9ucy9odG1sLnRzc2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzIwNzg2MgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9kZWZpbml0aW9ucy9odG1sLnRzc2wKQEAgLTAsMCArMSwyNzYyIEBACis8IS0tCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiBUYWdTb3VwIGFuZCBpcyBDb3B5cmlnaHQgMjAwMi0yMDA4IGJ5IEpvaG4gQ293YW4uCisvLworLy8gVGFnU291cCBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsCisvLyBWZXJzaW9uIDIuMC4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGlzIGxpY2Vuc2UgYXQKKy8vIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAuICBZb3UgbWF5IGFsc28gaGF2ZQorLy8gYWRkaXRpb25hbCBsZWdhbCByaWdodHMgbm90IGdyYW50ZWQgYnkgdGhpcyBsaWNlbnNlLgorLy8KKy8vIFRhZ1NvdXAgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyB1bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIFRhZ1NvdXAKKy8vIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TCisvLyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZDsgbm90IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkKKy8vIG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKy0tPgorCis8c2NoZW1hIHhtbG5zPSdodHRwOi8vd3d3LmNjaWwub3JnL35jb3dhbi9YTUwvdGFnc291cC90c3NsJworCQlucz0naHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCcgbmFtZT0naHRtbCcKKwkJcHJlZml4PSdodG1sJyB2ZXJzaW9uPScxLjAnPgorCisgIDxlbnRpdHkgbmFtZT0nQWFjZ3InIGNvZGVwb2ludD0nMDM4NicvPgorICA8ZW50aXR5IG5hbWU9J2FhY2dyJyBjb2RlcG9pbnQ9JzAzQUMnLz4KKyAgPGVudGl0eSBuYW1lPSdBYWN1dGUnIGNvZGVwb2ludD0nMDBDMScvPgorICA8ZW50aXR5IG5hbWU9J2FhY3V0ZScgY29kZXBvaW50PScwMEUxJy8+CisgIDxlbnRpdHkgbmFtZT0nQWJyZXZlJyBjb2RlcG9pbnQ9JzAxMDInLz4KKyAgPGVudGl0eSBuYW1lPSdhYnJldmUnIGNvZGVwb2ludD0nMDEwMycvPgorICA8ZW50aXR5IG5hbWU9J2FjJyBjb2RlcG9pbnQ9JzIyM0UnLz4KKyAgPGVudGl0eSBuYW1lPSdhY2QnIGNvZGVwb2ludD0nMjIzRicvPgorICA8ZW50aXR5IG5hbWU9J0FjaXJjJyBjb2RlcG9pbnQ9JzAwQzInLz4KKyAgPGVudGl0eSBuYW1lPSdhY2lyYycgY29kZXBvaW50PScwMEUyJy8+CisgIDxlbnRpdHkgbmFtZT0nYWN1dGUnIGNvZGVwb2ludD0nMDBCNCcvPgorICA8ZW50aXR5IG5hbWU9J0FjeScgY29kZXBvaW50PScwNDEwJy8+CisgIDxlbnRpdHkgbmFtZT0nYWN5JyBjb2RlcG9pbnQ9JzA0MzAnLz4KKyAgPGVudGl0eSBuYW1lPSdBRWxpZycgY29kZXBvaW50PScwMEM2Jy8+CisgIDxlbnRpdHkgbmFtZT0nYWVsaWcnIGNvZGVwb2ludD0nMDBFNicvPgorICA8ZW50aXR5IG5hbWU9J2FmJyBjb2RlcG9pbnQ9JzIwNjEnLz4KKyAgPGVudGl0eSBuYW1lPSdBZnInIGNvZGVwb2ludD0nMUQ1MDQnLz4KKyAgPGVudGl0eSBuYW1lPSdhZnInIGNvZGVwb2ludD0nMUQ1MUUnLz4KKyAgPGVudGl0eSBuYW1lPSdBZ3InIGNvZGVwb2ludD0nMDM5MScvPgorICA8ZW50aXR5IG5hbWU9J2FncicgY29kZXBvaW50PScwM0IxJy8+CisgIDxlbnRpdHkgbmFtZT0nQWdyYXZlJyBjb2RlcG9pbnQ9JzAwQzAnLz4KKyAgPGVudGl0eSBuYW1lPSdhZ3JhdmUnIGNvZGVwb2ludD0nMDBFMCcvPgorICA8ZW50aXR5IG5hbWU9J2FsZWZzeW0nIGNvZGVwb2ludD0nMjEzNScvPgorICA8ZW50aXR5IG5hbWU9J2FsZXBoJyBjb2RlcG9pbnQ9JzIxMzUnLz4KKyAgPGVudGl0eSBuYW1lPSdBbHBoYScgY29kZXBvaW50PScwMzkxJy8+CisgIDxlbnRpdHkgbmFtZT0nYWxwaGEnIGNvZGVwb2ludD0nMDNCMScvPgorICA8ZW50aXR5IG5hbWU9J0FtYWNyJyBjb2RlcG9pbnQ9JzAxMDAnLz4KKyAgPGVudGl0eSBuYW1lPSdhbWFjcicgY29kZXBvaW50PScwMTAxJy8+CisgIDxlbnRpdHkgbmFtZT0nYW1hbGcnIGNvZGVwb2ludD0nMkEzRicvPgorICA8ZW50aXR5IG5hbWU9J2FtcCcgY29kZXBvaW50PScwMDI2Jy8+CisgIDxlbnRpdHkgbmFtZT0nYW5kJyBjb2RlcG9pbnQ9JzIyMjcnLz4KKyAgPGVudGl0eSBuYW1lPSdBbmQnIGNvZGVwb2ludD0nMkE1MycvPgorICA8ZW50aXR5IG5hbWU9J2FuZGFuZCcgY29kZXBvaW50PScyQTU1Jy8+CisgIDxlbnRpdHkgbmFtZT0nYW5kZCcgY29kZXBvaW50PScyQTVDJy8+CisgIDxlbnRpdHkgbmFtZT0nYW5kc2xvcGUnIGNvZGVwb2ludD0nMkE1OCcvPgorICA8ZW50aXR5IG5hbWU9J2FuZHYnIGNvZGVwb2ludD0nMkE1QScvPgorICA8ZW50aXR5IG5hbWU9J2FuZycgY29kZXBvaW50PScyMjIwJy8+CisgIDxlbnRpdHkgbmFtZT0nYW5nZScgY29kZXBvaW50PScyOUE0Jy8+CisgIDxlbnRpdHkgbmFtZT0nYW5nbGUnIGNvZGVwb2ludD0nMjIyMCcvPgorICA8ZW50aXR5IG5hbWU9J2FuZ21zZCcgY29kZXBvaW50PScyMjIxJy8+CisgIDxlbnRpdHkgbmFtZT0nYW5nbXNkYWEnIGNvZGVwb2ludD0nMjlBOCcvPgorICA8ZW50aXR5IG5hbWU9J2FuZ21zZGFiJyBjb2RlcG9pbnQ9JzI5QTknLz4KKyAgPGVudGl0eSBuYW1lPSdhbmdtc2RhYycgY29kZXBvaW50PScyOUFBJy8+CisgIDxlbnRpdHkgbmFtZT0nYW5nbXNkYWQnIGNvZGVwb2ludD0nMjlBQicvPgorICA8ZW50aXR5IG5hbWU9J2FuZ21zZGFlJyBjb2RlcG9pbnQ9JzI5QUMnLz4KKyAgPGVudGl0eSBuYW1lPSdhbmdtc2RhZicgY29kZXBvaW50PScyOUFEJy8+CisgIDxlbnRpdHkgbmFtZT0nYW5nbXNkYWcnIGNvZGVwb2ludD0nMjlBRScvPgorICA8ZW50aXR5IG5hbWU9J2FuZ21zZGFoJyBjb2RlcG9pbnQ9JzI5QUYnLz4KKyAgPGVudGl0eSBuYW1lPSdhbmdydCcgY29kZXBvaW50PScyMjFGJy8+CisgIDxlbnRpdHkgbmFtZT0nYW5ncnR2YicgY29kZXBvaW50PScyMkJFJy8+CisgIDxlbnRpdHkgbmFtZT0nYW5ncnR2YmQnIGNvZGVwb2ludD0nMjk5RCcvPgorICA8ZW50aXR5IG5hbWU9J2FuZ3NwaCcgY29kZXBvaW50PScyMjIyJy8+CisgIDxlbnRpdHkgbmFtZT0nYW5nc3QnIGNvZGVwb2ludD0nMjEyQicvPgorICA8ZW50aXR5IG5hbWU9J2FuZ3phcnInIGNvZGVwb2ludD0nMjM3QycvPgorICA8ZW50aXR5IG5hbWU9J0FvZ29uJyBjb2RlcG9pbnQ9JzAxMDQnLz4KKyAgPGVudGl0eSBuYW1lPSdhb2dvbicgY29kZXBvaW50PScwMTA1Jy8+CisgIDxlbnRpdHkgbmFtZT0nQW9wZicgY29kZXBvaW50PScxRDUzOCcvPgorICA8ZW50aXR5IG5hbWU9J2FvcGYnIGNvZGVwb2ludD0nMUQ1NTInLz4KKyAgPGVudGl0eSBuYW1lPSdhcCcgY29kZXBvaW50PScyMjQ4Jy8+CisgIDxlbnRpdHkgbmFtZT0nYXBhY2lyJyBjb2RlcG9pbnQ9JzJBNkYnLz4KKyAgPGVudGl0eSBuYW1lPSdhcGUnIGNvZGVwb2ludD0nMjI0QScvPgorICA8ZW50aXR5IG5hbWU9J2FwRScgY29kZXBvaW50PScyQTcwJy8+CisgIDxlbnRpdHkgbmFtZT0nYXBpZCcgY29kZXBvaW50PScyMjRCJy8+CisgIDxlbnRpdHkgbmFtZT0nYXBvcycgY29kZXBvaW50PScwMDI3Jy8+CisgIDxlbnRpdHkgbmFtZT0nQXBwbHlGdW5jdGlvbicgY29kZXBvaW50PScyMDYxJy8+CisgIDxlbnRpdHkgbmFtZT0nYXBwcm94JyBjb2RlcG9pbnQ9JzIyNDgnLz4KKyAgPGVudGl0eSBuYW1lPSdhcHByb3hlcScgY29kZXBvaW50PScyMjRBJy8+CisgIDxlbnRpdHkgbmFtZT0nQXJpbmcnIGNvZGVwb2ludD0nMDBDNScvPgorICA8ZW50aXR5IG5hbWU9J2FyaW5nJyBjb2RlcG9pbnQ9JzAwRTUnLz4KKyAgPGVudGl0eSBuYW1lPSdBc2NyJyBjb2RlcG9pbnQ9JzFENDlDJy8+CisgIDxlbnRpdHkgbmFtZT0nYXNjcicgY29kZXBvaW50PScxRDRCNicvPgorICA8ZW50aXR5IG5hbWU9J0Fzc2lnbicgY29kZXBvaW50PScyMjU0Jy8+CisgIDxlbnRpdHkgbmFtZT0nYXN0JyBjb2RlcG9pbnQ9JzAwMkEnLz4KKyAgPGVudGl0eSBuYW1lPSdhc3ltcCcgY29kZXBvaW50PScyMjQ4Jy8+CisgIDxlbnRpdHkgbmFtZT0nYXN5bXBlcScgY29kZXBvaW50PScyMjREJy8+CisgIDxlbnRpdHkgbmFtZT0nQXRpbGRlJyBjb2RlcG9pbnQ9JzAwQzMnLz4KKyAgPGVudGl0eSBuYW1lPSdhdGlsZGUnIGNvZGVwb2ludD0nMDBFMycvPgorICA8ZW50aXR5IG5hbWU9J0F1bWwnIGNvZGVwb2ludD0nMDBDNCcvPgorICA8ZW50aXR5IG5hbWU9J2F1bWwnIGNvZGVwb2ludD0nMDBFNCcvPgorICA8ZW50aXR5IG5hbWU9J2F3Y29uaW50JyBjb2RlcG9pbnQ9JzIyMzMnLz4KKyAgPGVudGl0eSBuYW1lPSdhd2ludCcgY29kZXBvaW50PScyQTExJy8+CisgIDxlbnRpdHkgbmFtZT0nYi5hbHBoYScgY29kZXBvaW50PScxRDZDMicvPgorICA8ZW50aXR5IG5hbWU9J2IuYmV0YScgY29kZXBvaW50PScxRDZDMycvPgorICA8ZW50aXR5IG5hbWU9J2IuY2hpJyBjb2RlcG9pbnQ9JzFENkQ4Jy8+CisgIDxlbnRpdHkgbmFtZT0nYi5EZWx0YScgY29kZXBvaW50PScxRDZBQicvPgorICA8ZW50aXR5IG5hbWU9J2IuZGVsdGEnIGNvZGVwb2ludD0nMUQ2QzUnLz4KKyAgPGVudGl0eSBuYW1lPSdiLmVwc2knIGNvZGVwb2ludD0nMUQ2QzYnLz4KKyAgPGVudGl0eSBuYW1lPSdiLmVwc2l2JyBjb2RlcG9pbnQ9JzFENkRDJy8+CisgIDxlbnRpdHkgbmFtZT0nYi5ldGEnIGNvZGVwb2ludD0nMUQ2QzgnLz4KKyAgPGVudGl0eSBuYW1lPSdiLkdhbW1hJyBjb2RlcG9pbnQ9JzFENkFBJy8+CisgIDxlbnRpdHkgbmFtZT0nYi5nYW1tYScgY29kZXBvaW50PScxRDZDNCcvPgorICA8ZW50aXR5IG5hbWU9J2IuR2FtbWFkJyBjb2RlcG9pbnQ9JzFEN0NBJy8+CisgIDxlbnRpdHkgbmFtZT0nYi5nYW1tYWQnIGNvZGVwb2ludD0nMUQ3Q0InLz4KKyAgPGVudGl0eSBuYW1lPSdiLmlvdGEnIGNvZGVwb2ludD0nMUQ2Q0EnLz4KKyAgPGVudGl0eSBuYW1lPSdiLmthcHBhJyBjb2RlcG9pbnQ9JzFENkNCJy8+CisgIDxlbnRpdHkgbmFtZT0nYi5rYXBwYXYnIGNvZGVwb2ludD0nMUQ2REUnLz4KKyAgPGVudGl0eSBuYW1lPSdiLkxhbWJkYScgY29kZXBvaW50PScxRDZCMicvPgorICA8ZW50aXR5IG5hbWU9J2IubGFtYmRhJyBjb2RlcG9pbnQ9JzFENkNDJy8+CisgIDxlbnRpdHkgbmFtZT0nYi5tdScgY29kZXBvaW50PScxRDZDRCcvPgorICA8ZW50aXR5IG5hbWU9J2IubnUnIGNvZGVwb2ludD0nMUQ2Q0UnLz4KKyAgPGVudGl0eSBuYW1lPSdiLk9tZWdhJyBjb2RlcG9pbnQ9JzFENkMwJy8+CisgIDxlbnRpdHkgbmFtZT0nYi5vbWVnYScgY29kZXBvaW50PScxRDZEQScvPgorICA8ZW50aXR5IG5hbWU9J2IuUGhpJyBjb2RlcG9pbnQ9JzFENkJEJy8+CisgIDxlbnRpdHkgbmFtZT0nYi5waGknIGNvZGVwb2ludD0nMUQ2RDcnLz4KKyAgPGVudGl0eSBuYW1lPSdiLnBoaXYnIGNvZGVwb2ludD0nMUQ2REYnLz4KKyAgPGVudGl0eSBuYW1lPSdiLlBpJyBjb2RlcG9pbnQ9JzFENkI3Jy8+CisgIDxlbnRpdHkgbmFtZT0nYi5waScgY29kZXBvaW50PScxRDZEMScvPgorICA8ZW50aXR5IG5hbWU9J2IucGl2JyBjb2RlcG9pbnQ9JzFENkUxJy8+CisgIDxlbnRpdHkgbmFtZT0nYi5Qc2knIGNvZGVwb2ludD0nMUQ2QkYnLz4KKyAgPGVudGl0eSBuYW1lPSdiLnBzaScgY29kZXBvaW50PScxRDZEOScvPgorICA8ZW50aXR5IG5hbWU9J2IucmhvJyBjb2RlcG9pbnQ9JzFENkQyJy8+CisgIDxlbnRpdHkgbmFtZT0nYi5yaG92JyBjb2RlcG9pbnQ9JzFENkUwJy8+CisgIDxlbnRpdHkgbmFtZT0nYi5TaWdtYScgY29kZXBvaW50PScxRDZCQScvPgorICA8ZW50aXR5IG5hbWU9J2Iuc2lnbWEnIGNvZGVwb2ludD0nMUQ2RDQnLz4KKyAgPGVudGl0eSBuYW1lPSdiLnNpZ21hdicgY29kZXBvaW50PScxRDZEMycvPgorICA8ZW50aXR5IG5hbWU9J2IudGF1JyBjb2RlcG9pbnQ9JzFENkQ1Jy8+CisgIDxlbnRpdHkgbmFtZT0nYi5UaGV0YScgY29kZXBvaW50PScxRDZBRicvPgorICA8ZW50aXR5IG5hbWU9J2IudGhldGFzJyBjb2RlcG9pbnQ9JzFENkM5Jy8+CisgIDxlbnRpdHkgbmFtZT0nYi50aGV0YXYnIGNvZGVwb2ludD0nMUQ2REQnLz4KKyAgPGVudGl0eSBuYW1lPSdiLlVwc2knIGNvZGVwb2ludD0nMUQ2QkMnLz4KKyAgPGVudGl0eSBuYW1lPSdiLnVwc2knIGNvZGVwb2ludD0nMUQ2RDYnLz4KKyAgPGVudGl0eSBuYW1lPSdiLlhpJyBjb2RlcG9pbnQ9JzFENkI1Jy8+CisgIDxlbnRpdHkgbmFtZT0nYi54aScgY29kZXBvaW50PScxRDZDRicvPgorICA8ZW50aXR5IG5hbWU9J2IuemV0YScgY29kZXBvaW50PScxRDZDNycvPgorICA8ZW50aXR5IG5hbWU9J2JhY2tjb25nJyBjb2RlcG9pbnQ9JzIyNEMnLz4KKyAgPGVudGl0eSBuYW1lPSdiYWNrZXBzaWxvbicgY29kZXBvaW50PScwM0Y2Jy8+CisgIDxlbnRpdHkgbmFtZT0nYmFja3ByaW1lJyBjb2RlcG9pbnQ9JzIwMzUnLz4KKyAgPGVudGl0eSBuYW1lPSdiYWNrc2ltJyBjb2RlcG9pbnQ9JzIyM0QnLz4KKyAgPGVudGl0eSBuYW1lPSdiYWNrc2ltZXEnIGNvZGVwb2ludD0nMjJDRCcvPgorICA8ZW50aXR5IG5hbWU9J0JhY2tzbGFzaCcgY29kZXBvaW50PScyMjE2Jy8+CisgIDxlbnRpdHkgbmFtZT0nQmFydicgY29kZXBvaW50PScyQUU3Jy8+CisgIDxlbnRpdHkgbmFtZT0nYmFydmVlJyBjb2RlcG9pbnQ9JzIyQkQnLz4KKyAgPGVudGl0eSBuYW1lPSdiYXJ3ZWQnIGNvZGVwb2ludD0nMjMwNScvPgorICA8ZW50aXR5IG5hbWU9J0JhcndlZCcgY29kZXBvaW50PScyMzA2Jy8+CisgIDxlbnRpdHkgbmFtZT0nYmFyd2VkZ2UnIGNvZGVwb2ludD0nMjMwNScvPgorICA8ZW50aXR5IG5hbWU9J2JicmsnIGNvZGVwb2ludD0nMjNCNScvPgorICA8ZW50aXR5IG5hbWU9J2Jicmt0YnJrJyBjb2RlcG9pbnQ9JzIzQjYnLz4KKyAgPGVudGl0eSBuYW1lPSdiY29uZycgY29kZXBvaW50PScyMjRDJy8+CisgIDxlbnRpdHkgbmFtZT0nQmN5JyBjb2RlcG9pbnQ9JzA0MTEnLz4KKyAgPGVudGl0eSBuYW1lPSdiY3knIGNvZGVwb2ludD0nMDQzMScvPgorICA8ZW50aXR5IG5hbWU9J2JkcXVvJyBjb2RlcG9pbnQ9JzIwMUUnLz4KKyAgPGVudGl0eSBuYW1lPSdiZWNhdXMnIGNvZGVwb2ludD0nMjIzNScvPgorICA8ZW50aXR5IG5hbWU9J2JlY2F1c2UnIGNvZGVwb2ludD0nMjIzNScvPgorICA8ZW50aXR5IG5hbWU9J2JlbXB0eXYnIGNvZGVwb2ludD0nMjlCMCcvPgorICA8ZW50aXR5IG5hbWU9J2JlcHNpJyBjb2RlcG9pbnQ9JzAzRjYnLz4KKyAgPGVudGl0eSBuYW1lPSdiZXJub3UnIGNvZGVwb2ludD0nMjEyQycvPgorICA8ZW50aXR5IG5hbWU9J0Jlcm5vdWxsaXMnIGNvZGVwb2ludD0nMjEyQycvPgorICA8ZW50aXR5IG5hbWU9J0JldGEnIGNvZGVwb2ludD0nMDM5MicvPgorICA8ZW50aXR5IG5hbWU9J2JldGEnIGNvZGVwb2ludD0nMDNCMicvPgorICA8ZW50aXR5IG5hbWU9J2JldGgnIGNvZGVwb2ludD0nMjEzNicvPgorICA8ZW50aXR5IG5hbWU9J2JldHdlZW4nIGNvZGVwb2ludD0nMjI2QycvPgorICA8ZW50aXR5IG5hbWU9J0JmcicgY29kZXBvaW50PScxRDUwNScvPgorICA8ZW50aXR5IG5hbWU9J2JmcicgY29kZXBvaW50PScxRDUxRicvPgorICA8ZW50aXR5IG5hbWU9J0JncicgY29kZXBvaW50PScwMzkyJy8+CisgIDxlbnRpdHkgbmFtZT0nYmdyJyBjb2RlcG9pbnQ9JzAzQjInLz4KKyAgPGVudGl0eSBuYW1lPSdiaWdjYXAnIGNvZGVwb2ludD0nMjJDMicvPgorICA8ZW50aXR5IG5hbWU9J2JpZ2NpcmMnIGNvZGVwb2ludD0nMjVFRicvPgorICA8ZW50aXR5IG5hbWU9J2JpZ2N1cCcgY29kZXBvaW50PScyMkMzJy8+CisgIDxlbnRpdHkgbmFtZT0nYmlnb2RvdCcgY29kZXBvaW50PScyQTAwJy8+CisgIDxlbnRpdHkgbmFtZT0nYmlnb3BsdXMnIGNvZGVwb2ludD0nMkEwMScvPgorICA8ZW50aXR5IG5hbWU9J2JpZ290aW1lcycgY29kZXBvaW50PScyQTAyJy8+CisgIDxlbnRpdHkgbmFtZT0nYmlnc3FjdXAnIGNvZGVwb2ludD0nMkEwNicvPgorICA8ZW50aXR5IG5hbWU9J2JpZ3N0YXInIGNvZGVwb2ludD0nMjYwNScvPgorICA8ZW50aXR5IG5hbWU9J2JpZ3RyaWFuZ2xlZG93bicgY29kZXBvaW50PScyNUJEJy8+CisgIDxlbnRpdHkgbmFtZT0nYmlndHJpYW5nbGV1cCcgY29kZXBvaW50PScyNUIzJy8+CisgIDxlbnRpdHkgbmFtZT0nYmlndXBsdXMnIGNvZGVwb2ludD0nMkEwNCcvPgorICA8ZW50aXR5IG5hbWU9J2JpZ3ZlZScgY29kZXBvaW50PScyMkMxJy8+CisgIDxlbnRpdHkgbmFtZT0nYmlnd2VkZ2UnIGNvZGVwb2ludD0nMjJDMCcvPgorICA8ZW50aXR5IG5hbWU9J2JrYXJvdycgY29kZXBvaW50PScyOTBEJy8+CisgIDxlbnRpdHkgbmFtZT0nYmxhY2tsb3plbmdlJyBjb2RlcG9pbnQ9JzI5RUInLz4KKyAgPGVudGl0eSBuYW1lPSdibGFja3NxdWFyZScgY29kZXBvaW50PScyNUFBJy8+CisgIDxlbnRpdHkgbmFtZT0nYmxhY2t0cmlhbmdsZScgY29kZXBvaW50PScyNUI0Jy8+CisgIDxlbnRpdHkgbmFtZT0nYmxhY2t0cmlhbmdsZWRvd24nIGNvZGVwb2ludD0nMjVCRScvPgorICA8ZW50aXR5IG5hbWU9J2JsYWNrdHJpYW5nbGVsZWZ0JyBjb2RlcG9pbnQ9JzI1QzInLz4KKyAgPGVudGl0eSBuYW1lPSdibGFja3RyaWFuZ2xlcmlnaHQnIGNvZGVwb2ludD0nMjVCOCcvPgorICA8ZW50aXR5IG5hbWU9J2JsYW5rJyBjb2RlcG9pbnQ9JzI0MjMnLz4KKyAgPGVudGl0eSBuYW1lPSdibGsxMicgY29kZXBvaW50PScyNTkyJy8+CisgIDxlbnRpdHkgbmFtZT0nYmxrMTQnIGNvZGVwb2ludD0nMjU5MScvPgorICA8ZW50aXR5IG5hbWU9J2JsazM0JyBjb2RlcG9pbnQ9JzI1OTMnLz4KKyAgPGVudGl0eSBuYW1lPSdibG9jaycgY29kZXBvaW50PScyNTg4Jy8+CisgIDxlbnRpdHkgbmFtZT0nYm5vdCcgY29kZXBvaW50PScyMzEwJy8+CisgIDxlbnRpdHkgbmFtZT0nYk5vdCcgY29kZXBvaW50PScyQUVEJy8+CisgIDxlbnRpdHkgbmFtZT0nQm9wZicgY29kZXBvaW50PScxRDUzOScvPgorICA8ZW50aXR5IG5hbWU9J2JvcGYnIGNvZGVwb2ludD0nMUQ1NTMnLz4KKyAgPGVudGl0eSBuYW1lPSdib3QnIGNvZGVwb2ludD0nMjJBNScvPgorICA8ZW50aXR5IG5hbWU9J2JvdHRvbScgY29kZXBvaW50PScyMkE1Jy8+CisgIDxlbnRpdHkgbmFtZT0nYm93dGllJyBjb2RlcG9pbnQ9JzIyQzgnLz4KKyAgPGVudGl0eSBuYW1lPSdib3hib3gnIGNvZGVwb2ludD0nMjlDOScvPgorICA8ZW50aXR5IG5hbWU9J2JveGRsJyBjb2RlcG9pbnQ9JzI1MTAnLz4KKyAgPGVudGl0eSBuYW1lPSdib3hkTCcgY29kZXBvaW50PScyNTU1Jy8+CisgIDxlbnRpdHkgbmFtZT0nYm94RGwnIGNvZGVwb2ludD0nMjU1NicvPgorICA8ZW50aXR5IG5hbWU9J2JveERMJyBjb2RlcG9pbnQ9JzI1NTcnLz4KKyAgPGVudGl0eSBuYW1lPSdib3hkcicgY29kZXBvaW50PScyNTBDJy8+CisgIDxlbnRpdHkgbmFtZT0nYm94ZFInIGNvZGVwb2ludD0nMjU1MicvPgorICA8ZW50aXR5IG5hbWU9J2JveERyJyBjb2RlcG9pbnQ9JzI1NTMnLz4KKyAgPGVudGl0eSBuYW1lPSdib3hEUicgY29kZXBvaW50PScyNTU0Jy8+CisgIDxlbnRpdHkgbmFtZT0nYm94aCcgY29kZXBvaW50PScyNTAwJy8+CisgIDxlbnRpdHkgbmFtZT0nYm94SCcgY29kZXBvaW50PScyNTUwJy8+CisgIDxlbnRpdHkgbmFtZT0nYm94aGQnIGNvZGVwb2ludD0nMjUyQycvPgorICA8ZW50aXR5IG5hbWU9J2JveEhkJyBjb2RlcG9pbnQ9JzI1NjQnLz4KKyAgPGVudGl0eSBuYW1lPSdib3hoRCcgY29kZXBvaW50PScyNTY1Jy8+CisgIDxlbnRpdHkgbmFtZT0nYm94SEQnIGNvZGVwb2ludD0nMjU2NicvPgorICA8ZW50aXR5IG5hbWU9J2JveGh1JyBjb2RlcG9pbnQ9JzI1MzQnLz4KKyAgPGVudGl0eSBuYW1lPSdib3hIdScgY29kZXBvaW50PScyNTY3Jy8+CisgIDxlbnRpdHkgbmFtZT0nYm94aFUnIGNvZGVwb2ludD0nMjU2OCcvPgorICA8ZW50aXR5IG5hbWU9J2JveEhVJyBjb2RlcG9pbnQ9JzI1NjknLz4KKyAgPGVudGl0eSBuYW1lPSdib3htaW51cycgY29kZXBvaW50PScyMjlGJy8+CisgIDxlbnRpdHkgbmFtZT0nYm94cGx1cycgY29kZXBvaW50PScyMjlFJy8+CisgIDxlbnRpdHkgbmFtZT0nYm94dGltZXMnIGNvZGVwb2ludD0nMjJBMCcvPgorICA8ZW50aXR5IG5hbWU9J2JveHVsJyBjb2RlcG9pbnQ9JzI1MTgnLz4KKyAgPGVudGl0eSBuYW1lPSdib3h1TCcgY29kZXBvaW50PScyNTVCJy8+CisgIDxlbnRpdHkgbmFtZT0nYm94VWwnIGNvZGVwb2ludD0nMjU1QycvPgorICA8ZW50aXR5IG5hbWU9J2JveFVMJyBjb2RlcG9pbnQ9JzI1NUQnLz4KKyAgPGVudGl0eSBuYW1lPSdib3h1cicgY29kZXBvaW50PScyNTE0Jy8+CisgIDxlbnRpdHkgbmFtZT0nYm94dVInIGNvZGVwb2ludD0nMjU1OCcvPgorICA8ZW50aXR5IG5hbWU9J2JveFVyJyBjb2RlcG9pbnQ9JzI1NTknLz4KKyAgPGVudGl0eSBuYW1lPSdib3hVUicgY29kZXBvaW50PScyNTVBJy8+CisgIDxlbnRpdHkgbmFtZT0nYm94dicgY29kZXBvaW50PScyNTAyJy8+CisgIDxlbnRpdHkgbmFtZT0nYm94VicgY29kZXBvaW50PScyNTUxJy8+CisgIDxlbnRpdHkgbmFtZT0nYm94dmgnIGNvZGVwb2ludD0nMjUzQycvPgorICA8ZW50aXR5IG5hbWU9J2JveHZIJyBjb2RlcG9pbnQ9JzI1NkEnLz4KKyAgPGVudGl0eSBuYW1lPSdib3hWaCcgY29kZXBvaW50PScyNTZCJy8+CisgIDxlbnRpdHkgbmFtZT0nYm94VkgnIGNvZGVwb2ludD0nMjU2QycvPgorICA8ZW50aXR5IG5hbWU9J2JveHZsJyBjb2RlcG9pbnQ9JzI1MjQnLz4KKyAgPGVudGl0eSBuYW1lPSdib3h2TCcgY29kZXBvaW50PScyNTYxJy8+CisgIDxlbnRpdHkgbmFtZT0nYm94VmwnIGNvZGVwb2ludD0nMjU2MicvPgorICA8ZW50aXR5IG5hbWU9J2JveFZMJyBjb2RlcG9pbnQ9JzI1NjMnLz4KKyAgPGVudGl0eSBuYW1lPSdib3h2cicgY29kZXBvaW50PScyNTFDJy8+CisgIDxlbnRpdHkgbmFtZT0nYm94dlInIGNvZGVwb2ludD0nMjU1RScvPgorICA8ZW50aXR5IG5hbWU9J2JveFZyJyBjb2RlcG9pbnQ9JzI1NUYnLz4KKyAgPGVudGl0eSBuYW1lPSdib3hWUicgY29kZXBvaW50PScyNTYwJy8+CisgIDxlbnRpdHkgbmFtZT0nYnByaW1lJyBjb2RlcG9pbnQ9JzIwMzUnLz4KKyAgPGVudGl0eSBuYW1lPSdicmV2ZScgY29kZXBvaW50PScwMkQ4Jy8+CisgIDxlbnRpdHkgbmFtZT0nYnJ2YmFyJyBjb2RlcG9pbnQ9JzAwQTYnLz4KKyAgPGVudGl0eSBuYW1lPSdCc2NyJyBjb2RlcG9pbnQ9JzIxMkMnLz4KKyAgPGVudGl0eSBuYW1lPSdic2NyJyBjb2RlcG9pbnQ9JzFENEI3Jy8+CisgIDxlbnRpdHkgbmFtZT0nYnNlbWknIGNvZGVwb2ludD0nMjA0RicvPgorICA8ZW50aXR5IG5hbWU9J2JzaW0nIGNvZGVwb2ludD0nMjIzRCcvPgorICA8ZW50aXR5IG5hbWU9J2JzaW1lJyBjb2RlcG9pbnQ9JzIyQ0QnLz4KKyAgPGVudGl0eSBuYW1lPSdic29sJyBjb2RlcG9pbnQ9JzAwNUMnLz4KKyAgPGVudGl0eSBuYW1lPSdic29sYicgY29kZXBvaW50PScyOUM1Jy8+CisgIDxlbnRpdHkgbmFtZT0nYnVsbCcgY29kZXBvaW50PScyMDIyJy8+CisgIDxlbnRpdHkgbmFtZT0nYnVsbGV0JyBjb2RlcG9pbnQ9JzIwMjInLz4KKyAgPGVudGl0eSBuYW1lPSdidW1wJyBjb2RlcG9pbnQ9JzIyNEUnLz4KKyAgPGVudGl0eSBuYW1lPSdidW1wZScgY29kZXBvaW50PScyMjRGJy8+CisgIDxlbnRpdHkgbmFtZT0nYnVtcEUnIGNvZGVwb2ludD0nMkFBRScvPgorICA8ZW50aXR5IG5hbWU9J0J1bXBlcScgY29kZXBvaW50PScyMjRFJy8+CisgIDxlbnRpdHkgbmFtZT0nYnVtcGVxJyBjb2RlcG9pbnQ9JzIyNEYnLz4KKyAgPGVudGl0eSBuYW1lPSdDYWN1dGUnIGNvZGVwb2ludD0nMDEwNicvPgorICA8ZW50aXR5IG5hbWU9J2NhY3V0ZScgY29kZXBvaW50PScwMTA3Jy8+CisgIDxlbnRpdHkgbmFtZT0nY2FwJyBjb2RlcG9pbnQ9JzIyMjknLz4KKyAgPGVudGl0eSBuYW1lPSdDYXAnIGNvZGVwb2ludD0nMjJEMicvPgorICA8ZW50aXR5IG5hbWU9J2NhcGFuZCcgY29kZXBvaW50PScyQTQ0Jy8+CisgIDxlbnRpdHkgbmFtZT0nY2FwYnJjdXAnIGNvZGVwb2ludD0nMkE0OScvPgorICA8ZW50aXR5IG5hbWU9J2NhcGNhcCcgY29kZXBvaW50PScyQTRCJy8+CisgIDxlbnRpdHkgbmFtZT0nY2FwY3VwJyBjb2RlcG9pbnQ9JzJBNDcnLz4KKyAgPGVudGl0eSBuYW1lPSdjYXBkb3QnIGNvZGVwb2ludD0nMkE0MCcvPgorICA8ZW50aXR5IG5hbWU9J0NhcGl0YWxEaWZmZXJlbnRpYWxEJyBjb2RlcG9pbnQ9JzIxNDUnLz4KKyAgPGVudGl0eSBuYW1lPSdjYXJldCcgY29kZXBvaW50PScyMDQxJy8+CisgIDxlbnRpdHkgbmFtZT0nY2Fyb24nIGNvZGVwb2ludD0nMDJDNycvPgorICA8ZW50aXR5IG5hbWU9J0NheWxleXMnIGNvZGVwb2ludD0nMjEyRCcvPgorICA8ZW50aXR5IG5hbWU9J2NjYXBzJyBjb2RlcG9pbnQ9JzJBNEQnLz4KKyAgPGVudGl0eSBuYW1lPSdDY2Fyb24nIGNvZGVwb2ludD0nMDEwQycvPgorICA8ZW50aXR5IG5hbWU9J2NjYXJvbicgY29kZXBvaW50PScwMTBEJy8+CisgIDxlbnRpdHkgbmFtZT0nQ2NlZGlsJyBjb2RlcG9pbnQ9JzAwQzcnLz4KKyAgPGVudGl0eSBuYW1lPSdjY2VkaWwnIGNvZGVwb2ludD0nMDBFNycvPgorICA8ZW50aXR5IG5hbWU9J0NjaXJjJyBjb2RlcG9pbnQ9JzAxMDgnLz4KKyAgPGVudGl0eSBuYW1lPSdjY2lyYycgY29kZXBvaW50PScwMTA5Jy8+CisgIDxlbnRpdHkgbmFtZT0nQ2NvbmludCcgY29kZXBvaW50PScyMjMwJy8+CisgIDxlbnRpdHkgbmFtZT0nY2N1cHMnIGNvZGVwb2ludD0nMkE0QycvPgorICA8ZW50aXR5IG5hbWU9J2NjdXBzc20nIGNvZGVwb2ludD0nMkE1MCcvPgorICA8ZW50aXR5IG5hbWU9J0Nkb3QnIGNvZGVwb2ludD0nMDEwQScvPgorICA8ZW50aXR5IG5hbWU9J2Nkb3QnIGNvZGVwb2ludD0nMDEwQicvPgorICA8ZW50aXR5IG5hbWU9J2NlZGlsJyBjb2RlcG9pbnQ9JzAwQjgnLz4KKyAgPGVudGl0eSBuYW1lPSdDZWRpbGxhJyBjb2RlcG9pbnQ9JzAwQjgnLz4KKyAgPGVudGl0eSBuYW1lPSdjZW1wdHl2JyBjb2RlcG9pbnQ9JzI5QjInLz4KKyAgPGVudGl0eSBuYW1lPSdjZW50JyBjb2RlcG9pbnQ9JzAwQTInLz4KKyAgPGVudGl0eSBuYW1lPSdjZW50ZXJkb3QnIGNvZGVwb2ludD0nMDBCNycvPgorICA8ZW50aXR5IG5hbWU9J0NmcicgY29kZXBvaW50PScyMTJEJy8+CisgIDxlbnRpdHkgbmFtZT0nY2ZyJyBjb2RlcG9pbnQ9JzFENTIwJy8+CisgIDxlbnRpdHkgbmFtZT0nQ0hjeScgY29kZXBvaW50PScwNDI3Jy8+CisgIDxlbnRpdHkgbmFtZT0nY2hjeScgY29kZXBvaW50PScwNDQ3Jy8+CisgIDxlbnRpdHkgbmFtZT0nY2hlY2snIGNvZGVwb2ludD0nMjcxMycvPgorICA8ZW50aXR5IG5hbWU9J2NoZWNrbWFyaycgY29kZXBvaW50PScyNzEzJy8+CisgIDxlbnRpdHkgbmFtZT0nQ2hpJyBjb2RlcG9pbnQ9JzAzQTcnLz4KKyAgPGVudGl0eSBuYW1lPSdjaGknIGNvZGVwb2ludD0nMDNDNycvPgorICA8ZW50aXR5IG5hbWU9J2NpcicgY29kZXBvaW50PScyNUNCJy8+CisgIDxlbnRpdHkgbmFtZT0nY2lyYycgY29kZXBvaW50PScwMkM2Jy8+CisgIDxlbnRpdHkgbmFtZT0nY2lyY2VxJyBjb2RlcG9pbnQ9JzIyNTcnLz4KKyAgPGVudGl0eSBuYW1lPSdjaXJjbGVhcnJvd2xlZnQnIGNvZGVwb2ludD0nMjFCQScvPgorICA8ZW50aXR5IG5hbWU9J2NpcmNsZWFycm93cmlnaHQnIGNvZGVwb2ludD0nMjFCQicvPgorICA8ZW50aXR5IG5hbWU9J2NpcmNsZWRhc3QnIGNvZGVwb2ludD0nMjI5QicvPgorICA8ZW50aXR5IG5hbWU9J2NpcmNsZWRjaXJjJyBjb2RlcG9pbnQ9JzIyOUEnLz4KKyAgPGVudGl0eSBuYW1lPSdjaXJjbGVkZGFzaCcgY29kZXBvaW50PScyMjlEJy8+CisgIDxlbnRpdHkgbmFtZT0nQ2lyY2xlRG90JyBjb2RlcG9pbnQ9JzIyOTknLz4KKyAgPGVudGl0eSBuYW1lPSdjaXJjbGVkUicgY29kZXBvaW50PScwMEFFJy8+CisgIDxlbnRpdHkgbmFtZT0nY2lyY2xlZFMnIGNvZGVwb2ludD0nMjRDOCcvPgorICA8ZW50aXR5IG5hbWU9J0NpcmNsZU1pbnVzJyBjb2RlcG9pbnQ9JzIyOTYnLz4KKyAgPGVudGl0eSBuYW1lPSdDaXJjbGVQbHVzJyBjb2RlcG9pbnQ9JzIyOTUnLz4KKyAgPGVudGl0eSBuYW1lPSdDaXJjbGVUaW1lcycgY29kZXBvaW50PScyMjk3Jy8+CisgIDxlbnRpdHkgbmFtZT0nY2lyZScgY29kZXBvaW50PScyMjU3Jy8+CisgIDxlbnRpdHkgbmFtZT0nY2lyRScgY29kZXBvaW50PScyOUMzJy8+CisgIDxlbnRpdHkgbmFtZT0nY2lyZm5pbnQnIGNvZGVwb2ludD0nMkExMCcvPgorICA8ZW50aXR5IG5hbWU9J2Npcm1pZCcgY29kZXBvaW50PScyQUVGJy8+CisgIDxlbnRpdHkgbmFtZT0nY2lyc2NpcicgY29kZXBvaW50PScyOUMyJy8+CisgIDxlbnRpdHkgbmFtZT0nQ2xvY2t3aXNlQ29udG91ckludGVncmFsJyBjb2RlcG9pbnQ9JzIyMzInLz4KKyAgPGVudGl0eSBuYW1lPSdDbG9zZUN1cmx5RG91YmxlUXVvdGUnIGNvZGVwb2ludD0nMjAxRCcvPgorICA8ZW50aXR5IG5hbWU9J0Nsb3NlQ3VybHlRdW90ZScgY29kZXBvaW50PScyMDE5Jy8+CisgIDxlbnRpdHkgbmFtZT0nY2x1YnMnIGNvZGVwb2ludD0nMjY2MycvPgorICA8ZW50aXR5IG5hbWU9J2NsdWJzdWl0JyBjb2RlcG9pbnQ9JzI2NjMnLz4KKyAgPGVudGl0eSBuYW1lPSdjb2xvbicgY29kZXBvaW50PScwMDNBJy8+CisgIDxlbnRpdHkgbmFtZT0nQ29sb24nIGNvZGVwb2ludD0nMjIzNycvPgorICA8ZW50aXR5IG5hbWU9J2NvbG9uZScgY29kZXBvaW50PScyMjU0Jy8+CisgIDxlbnRpdHkgbmFtZT0nQ29sb25lJyBjb2RlcG9pbnQ9JzJBNzQnLz4KKyAgPGVudGl0eSBuYW1lPSdjb2xvbmVxJyBjb2RlcG9pbnQ9JzIyNTQnLz4KKyAgPGVudGl0eSBuYW1lPSdjb21tYScgY29kZXBvaW50PScwMDJDJy8+CisgIDxlbnRpdHkgbmFtZT0nY29tbWF0JyBjb2RlcG9pbnQ9JzAwNDAnLz4KKyAgPGVudGl0eSBuYW1lPSdjb21wJyBjb2RlcG9pbnQ9JzIyMDEnLz4KKyAgPGVudGl0eSBuYW1lPSdjb21wZm4nIGNvZGVwb2ludD0nMjIxOCcvPgorICA8ZW50aXR5IG5hbWU9J2NvbXBsZW1lbnQnIGNvZGVwb2ludD0nMjIwMScvPgorICA8ZW50aXR5IG5hbWU9J2NvbXBsZXhlcycgY29kZXBvaW50PScyMTAyJy8+CisgIDxlbnRpdHkgbmFtZT0nY29uZycgY29kZXBvaW50PScyMjQ1Jy8+CisgIDxlbnRpdHkgbmFtZT0nY29uZ2RvdCcgY29kZXBvaW50PScyQTZEJy8+CisgIDxlbnRpdHkgbmFtZT0nQ29uZ3J1ZW50JyBjb2RlcG9pbnQ9JzIyNjEnLz4KKyAgPGVudGl0eSBuYW1lPSdjb25pbnQnIGNvZGVwb2ludD0nMjIyRScvPgorICA8ZW50aXR5IG5hbWU9J0NvbmludCcgY29kZXBvaW50PScyMjJGJy8+CisgIDxlbnRpdHkgbmFtZT0nQ29udG91ckludGVncmFsJyBjb2RlcG9pbnQ9JzIyMkUnLz4KKyAgPGVudGl0eSBuYW1lPSdDb3BmJyBjb2RlcG9pbnQ9JzIxMDInLz4KKyAgPGVudGl0eSBuYW1lPSdjb3BmJyBjb2RlcG9pbnQ9JzFENTU0Jy8+CisgIDxlbnRpdHkgbmFtZT0nY29wcm9kJyBjb2RlcG9pbnQ9JzIyMTAnLz4KKyAgPGVudGl0eSBuYW1lPSdDb3Byb2R1Y3QnIGNvZGVwb2ludD0nMjIxMCcvPgorICA8ZW50aXR5IG5hbWU9J2NvcHknIGNvZGVwb2ludD0nMDBBOScvPgorICA8ZW50aXR5IG5hbWU9J2NvcHlzcicgY29kZXBvaW50PScyMTE3Jy8+CisgIDxlbnRpdHkgbmFtZT0nQ291bnRlckNsb2Nrd2lzZUNvbnRvdXJJbnRlZ3JhbCcgY29kZXBvaW50PScyMjMzJy8+CisgIDxlbnRpdHkgbmFtZT0nY3JhcnInIGNvZGVwb2ludD0nMjFCNScvPgorICA8ZW50aXR5IG5hbWU9J2Nyb3NzJyBjb2RlcG9pbnQ9JzI3MTcnLz4KKyAgPGVudGl0eSBuYW1lPSdDcm9zcycgY29kZXBvaW50PScyQTJGJy8+CisgIDxlbnRpdHkgbmFtZT0nQ3NjcicgY29kZXBvaW50PScxRDQ5RScvPgorICA8ZW50aXR5IG5hbWU9J2NzY3InIGNvZGVwb2ludD0nMUQ0QjgnLz4KKyAgPGVudGl0eSBuYW1lPSdjc3ViJyBjb2RlcG9pbnQ9JzJBQ0YnLz4KKyAgPGVudGl0eSBuYW1lPSdjc3ViZScgY29kZXBvaW50PScyQUQxJy8+CisgIDxlbnRpdHkgbmFtZT0nY3N1cCcgY29kZXBvaW50PScyQUQwJy8+CisgIDxlbnRpdHkgbmFtZT0nY3N1cGUnIGNvZGVwb2ludD0nMkFEMicvPgorICA8ZW50aXR5IG5hbWU9J2N0ZG90JyBjb2RlcG9pbnQ9JzIyRUYnLz4KKyAgPGVudGl0eSBuYW1lPSdjdWRhcnJsJyBjb2RlcG9pbnQ9JzI5MzgnLz4KKyAgPGVudGl0eSBuYW1lPSdjdWRhcnJyJyBjb2RlcG9pbnQ9JzI5MzUnLz4KKyAgPGVudGl0eSBuYW1lPSdjdWVwcicgY29kZXBvaW50PScyMkRFJy8+CisgIDxlbnRpdHkgbmFtZT0nY3Vlc2MnIGNvZGVwb2ludD0nMjJERicvPgorICA8ZW50aXR5IG5hbWU9J2N1bGFycicgY29kZXBvaW50PScyMUI2Jy8+CisgIDxlbnRpdHkgbmFtZT0nY3VsYXJycCcgY29kZXBvaW50PScyOTNEJy8+CisgIDxlbnRpdHkgbmFtZT0nY3VwJyBjb2RlcG9pbnQ9JzIyMkEnLz4KKyAgPGVudGl0eSBuYW1lPSdDdXAnIGNvZGVwb2ludD0nMjJEMycvPgorICA8ZW50aXR5IG5hbWU9J2N1cGJyY2FwJyBjb2RlcG9pbnQ9JzJBNDgnLz4KKyAgPGVudGl0eSBuYW1lPSdDdXBDYXAnIGNvZGVwb2ludD0nMjI0RCcvPgorICA8ZW50aXR5IG5hbWU9J2N1cGNhcCcgY29kZXBvaW50PScyQTQ2Jy8+CisgIDxlbnRpdHkgbmFtZT0nY3VwY3VwJyBjb2RlcG9pbnQ9JzJBNEEnLz4KKyAgPGVudGl0eSBuYW1lPSdjdXBkb3QnIGNvZGVwb2ludD0nMjI4RCcvPgorICA8ZW50aXR5IG5hbWU9J2N1cG9yJyBjb2RlcG9pbnQ9JzJBNDUnLz4KKyAgPGVudGl0eSBuYW1lPSdjdXJhcnInIGNvZGVwb2ludD0nMjFCNycvPgorICA8ZW50aXR5IG5hbWU9J2N1cmFycm0nIGNvZGVwb2ludD0nMjkzQycvPgorICA8ZW50aXR5IG5hbWU9J2N1cmx5ZXFwcmVjJyBjb2RlcG9pbnQ9JzIyREUnLz4KKyAgPGVudGl0eSBuYW1lPSdjdXJseWVxc3VjYycgY29kZXBvaW50PScyMkRGJy8+CisgIDxlbnRpdHkgbmFtZT0nY3VybHl2ZWUnIGNvZGVwb2ludD0nMjJDRScvPgorICA8ZW50aXR5IG5hbWU9J2N1cmx5d2VkZ2UnIGNvZGVwb2ludD0nMjJDRicvPgorICA8ZW50aXR5IG5hbWU9J2N1cnJlbicgY29kZXBvaW50PScwMEE0Jy8+CisgIDxlbnRpdHkgbmFtZT0nY3VydmVhcnJvd2xlZnQnIGNvZGVwb2ludD0nMjFCNicvPgorICA8ZW50aXR5IG5hbWU9J2N1cnZlYXJyb3dyaWdodCcgY29kZXBvaW50PScyMUI3Jy8+CisgIDxlbnRpdHkgbmFtZT0nY3V2ZWUnIGNvZGVwb2ludD0nMjJDRScvPgorICA8ZW50aXR5IG5hbWU9J2N1d2VkJyBjb2RlcG9pbnQ9JzIyQ0YnLz4KKyAgPGVudGl0eSBuYW1lPSdjd2NvbmludCcgY29kZXBvaW50PScyMjMyJy8+CisgIDxlbnRpdHkgbmFtZT0nY3dpbnQnIGNvZGVwb2ludD0nMjIzMScvPgorICA8ZW50aXR5IG5hbWU9J2N5bGN0eScgY29kZXBvaW50PScyMzJEJy8+CisgIDxlbnRpdHkgbmFtZT0nZGFnZ2VyJyBjb2RlcG9pbnQ9JzIwMjAnLz4KKyAgPGVudGl0eSBuYW1lPSdEYWdnZXInIGNvZGVwb2ludD0nMjAyMScvPgorICA8ZW50aXR5IG5hbWU9J2RhbGV0aCcgY29kZXBvaW50PScyMTM4Jy8+CisgIDxlbnRpdHkgbmFtZT0nZGFycicgY29kZXBvaW50PScyMTkzJy8+CisgIDxlbnRpdHkgbmFtZT0nRGFycicgY29kZXBvaW50PScyMUExJy8+CisgIDxlbnRpdHkgbmFtZT0nZEFycicgY29kZXBvaW50PScyMUQzJy8+CisgIDxlbnRpdHkgbmFtZT0nZGFzaCcgY29kZXBvaW50PScyMDEwJy8+CisgIDxlbnRpdHkgbmFtZT0nZGFzaHYnIGNvZGVwb2ludD0nMjJBMycvPgorICA8ZW50aXR5IG5hbWU9J0Rhc2h2JyBjb2RlcG9pbnQ9JzJBRTQnLz4KKyAgPGVudGl0eSBuYW1lPSdkYmthcm93JyBjb2RlcG9pbnQ9JzI5MEYnLz4KKyAgPGVudGl0eSBuYW1lPSdkYmxhYycgY29kZXBvaW50PScwMkREJy8+CisgIDxlbnRpdHkgbmFtZT0nRGNhcm9uJyBjb2RlcG9pbnQ9JzAxMEUnLz4KKyAgPGVudGl0eSBuYW1lPSdkY2Fyb24nIGNvZGVwb2ludD0nMDEwRicvPgorICA8ZW50aXR5IG5hbWU9J0RjeScgY29kZXBvaW50PScwNDE0Jy8+CisgIDxlbnRpdHkgbmFtZT0nZGN5JyBjb2RlcG9pbnQ9JzA0MzQnLz4KKyAgPGVudGl0eSBuYW1lPSdERCcgY29kZXBvaW50PScyMTQ1Jy8+CisgIDxlbnRpdHkgbmFtZT0nZGQnIGNvZGVwb2ludD0nMjE0NicvPgorICA8ZW50aXR5IG5hbWU9J2RkYWdnZXInIGNvZGVwb2ludD0nMjAyMScvPgorICA8ZW50aXR5IG5hbWU9J2RkYXJyJyBjb2RlcG9pbnQ9JzIxQ0EnLz4KKyAgPGVudGl0eSBuYW1lPSdERG90cmFoZCcgY29kZXBvaW50PScyOTExJy8+CisgIDxlbnRpdHkgbmFtZT0nZGRvdHNlcScgY29kZXBvaW50PScyQTc3Jy8+CisgIDxlbnRpdHkgbmFtZT0nZGVnJyBjb2RlcG9pbnQ9JzAwQjAnLz4KKyAgPGVudGl0eSBuYW1lPSdEZWwnIGNvZGVwb2ludD0nMjIwNycvPgorICA8ZW50aXR5IG5hbWU9J0RlbHRhJyBjb2RlcG9pbnQ9JzAzOTQnLz4KKyAgPGVudGl0eSBuYW1lPSdkZWx0YScgY29kZXBvaW50PScwM0I0Jy8+CisgIDxlbnRpdHkgbmFtZT0nZGVtcHR5dicgY29kZXBvaW50PScyOUIxJy8+CisgIDxlbnRpdHkgbmFtZT0nZGZpc2h0JyBjb2RlcG9pbnQ9JzI5N0YnLz4KKyAgPGVudGl0eSBuYW1lPSdEZnInIGNvZGVwb2ludD0nMUQ1MDcnLz4KKyAgPGVudGl0eSBuYW1lPSdkZnInIGNvZGVwb2ludD0nMUQ1MjEnLz4KKyAgPGVudGl0eSBuYW1lPSdEZ3InIGNvZGVwb2ludD0nMDM5NCcvPgorICA8ZW50aXR5IG5hbWU9J2RncicgY29kZXBvaW50PScwM0I0Jy8+CisgIDxlbnRpdHkgbmFtZT0nZEhhcicgY29kZXBvaW50PScyOTY1Jy8+CisgIDxlbnRpdHkgbmFtZT0nZGhhcmwnIGNvZGVwb2ludD0nMjFDMycvPgorICA8ZW50aXR5IG5hbWU9J2RoYXJyJyBjb2RlcG9pbnQ9JzIxQzInLz4KKyAgPGVudGl0eSBuYW1lPSdEaWFjcml0aWNhbEFjdXRlJyBjb2RlcG9pbnQ9JzAwQjQnLz4KKyAgPGVudGl0eSBuYW1lPSdEaWFjcml0aWNhbERvdCcgY29kZXBvaW50PScwMkQ5Jy8+CisgIDxlbnRpdHkgbmFtZT0nRGlhY3JpdGljYWxEb3VibGVBY3V0ZScgY29kZXBvaW50PScwMkREJy8+CisgIDxlbnRpdHkgbmFtZT0nRGlhY3JpdGljYWxHcmF2ZScgY29kZXBvaW50PScwMDYwJy8+CisgIDxlbnRpdHkgbmFtZT0nRGlhY3JpdGljYWxUaWxkZScgY29kZXBvaW50PScwMkRDJy8+CisgIDxlbnRpdHkgbmFtZT0nZGlhbScgY29kZXBvaW50PScyMkM0Jy8+CisgIDxlbnRpdHkgbmFtZT0nZGlhbW9uZCcgY29kZXBvaW50PScyMkM0Jy8+CisgIDxlbnRpdHkgbmFtZT0nZGlhbW9uZHN1aXQnIGNvZGVwb2ludD0nMjY2NicvPgorICA8ZW50aXR5IG5hbWU9J2RpYW1zJyBjb2RlcG9pbnQ9JzI2NjYnLz4KKyAgPGVudGl0eSBuYW1lPSdkaWUnIGNvZGVwb2ludD0nMDBBOCcvPgorICA8ZW50aXR5IG5hbWU9J0RpZmZlcmVudGlhbEQnIGNvZGVwb2ludD0nMjE0NicvPgorICA8ZW50aXR5IG5hbWU9J2RpZ2FtbWEnIGNvZGVwb2ludD0nMDNERCcvPgorICA8ZW50aXR5IG5hbWU9J2Rpc2luJyBjb2RlcG9pbnQ9JzIyRjInLz4KKyAgPGVudGl0eSBuYW1lPSdkaXYnIGNvZGVwb2ludD0nMDBGNycvPgorICA8ZW50aXR5IG5hbWU9J2RpdmlkZScgY29kZXBvaW50PScwMEY3Jy8+CisgIDxlbnRpdHkgbmFtZT0nZGl2aWRlb250aW1lcycgY29kZXBvaW50PScyMkM3Jy8+CisgIDxlbnRpdHkgbmFtZT0nZGl2b254JyBjb2RlcG9pbnQ9JzIyQzcnLz4KKyAgPGVudGl0eSBuYW1lPSdESmN5JyBjb2RlcG9pbnQ9JzA0MDInLz4KKyAgPGVudGl0eSBuYW1lPSdkamN5JyBjb2RlcG9pbnQ9JzA0NTInLz4KKyAgPGVudGl0eSBuYW1lPSdkbGNvcm4nIGNvZGVwb2ludD0nMjMxRScvPgorICA8ZW50aXR5IG5hbWU9J2RsY3JvcCcgY29kZXBvaW50PScyMzBEJy8+CisgIDxlbnRpdHkgbmFtZT0nZG9sbGFyJyBjb2RlcG9pbnQ9JzAwMjQnLz4KKyAgPGVudGl0eSBuYW1lPSdEb3BmJyBjb2RlcG9pbnQ9JzFENTNCJy8+CisgIDxlbnRpdHkgbmFtZT0nZG9wZicgY29kZXBvaW50PScxRDU1NScvPgorICA8ZW50aXR5IG5hbWU9J0RvdCcgY29kZXBvaW50PScwMEE4Jy8+CisgIDxlbnRpdHkgbmFtZT0nZG90JyBjb2RlcG9pbnQ9JzAyRDknLz4KKyAgPGVudGl0eSBuYW1lPSdkb3RlcScgY29kZXBvaW50PScyMjUwJy8+CisgIDxlbnRpdHkgbmFtZT0nZG90ZXFkb3QnIGNvZGVwb2ludD0nMjI1MScvPgorICA8ZW50aXR5IG5hbWU9J0RvdEVxdWFsJyBjb2RlcG9pbnQ9JzIyNTAnLz4KKyAgPGVudGl0eSBuYW1lPSdkb3RtaW51cycgY29kZXBvaW50PScyMjM4Jy8+CisgIDxlbnRpdHkgbmFtZT0nZG90cGx1cycgY29kZXBvaW50PScyMjE0Jy8+CisgIDxlbnRpdHkgbmFtZT0nZG90c3F1YXJlJyBjb2RlcG9pbnQ9JzIyQTEnLz4KKyAgPGVudGl0eSBuYW1lPSdkb3VibGViYXJ3ZWRnZScgY29kZXBvaW50PScyMzA2Jy8+CisgIDxlbnRpdHkgbmFtZT0nRG91YmxlQ29udG91ckludGVncmFsJyBjb2RlcG9pbnQ9JzIyMkYnLz4KKyAgPGVudGl0eSBuYW1lPSdEb3VibGVEb3QnIGNvZGVwb2ludD0nMDBBOCcvPgorICA8ZW50aXR5IG5hbWU9J0RvdWJsZURvd25BcnJvdycgY29kZXBvaW50PScyMUQzJy8+CisgIDxlbnRpdHkgbmFtZT0nRG91YmxlTGVmdEFycm93JyBjb2RlcG9pbnQ9JzIxRDAnLz4KKyAgPGVudGl0eSBuYW1lPSdEb3VibGVMZWZ0UmlnaHRBcnJvdycgY29kZXBvaW50PScyMUQ0Jy8+CisgIDxlbnRpdHkgbmFtZT0nRG91YmxlTGVmdFRlZScgY29kZXBvaW50PScyQUU0Jy8+CisgIDxlbnRpdHkgbmFtZT0nRG91YmxlTG9uZ0xlZnRBcnJvdycgY29kZXBvaW50PScyN0Y4Jy8+CisgIDxlbnRpdHkgbmFtZT0nRG91YmxlTG9uZ0xlZnRSaWdodEFycm93JyBjb2RlcG9pbnQ9JzI3RkEnLz4KKyAgPGVudGl0eSBuYW1lPSdEb3VibGVMb25nUmlnaHRBcnJvdycgY29kZXBvaW50PScyN0Y5Jy8+CisgIDxlbnRpdHkgbmFtZT0nRG91YmxlUmlnaHRBcnJvdycgY29kZXBvaW50PScyMUQyJy8+CisgIDxlbnRpdHkgbmFtZT0nRG91YmxlUmlnaHRUZWUnIGNvZGVwb2ludD0nMjJBOCcvPgorICA8ZW50aXR5IG5hbWU9J0RvdWJsZVVwQXJyb3cnIGNvZGVwb2ludD0nMjFEMScvPgorICA8ZW50aXR5IG5hbWU9J0RvdWJsZVVwRG93bkFycm93JyBjb2RlcG9pbnQ9JzIxRDUnLz4KKyAgPGVudGl0eSBuYW1lPSdEb3VibGVWZXJ0aWNhbEJhcicgY29kZXBvaW50PScyMjI1Jy8+CisgIDxlbnRpdHkgbmFtZT0nZG93bmFycm93JyBjb2RlcG9pbnQ9JzIxOTMnLz4KKyAgPGVudGl0eSBuYW1lPSdEb3duYXJyb3cnIGNvZGVwb2ludD0nMjFEMycvPgorICA8ZW50aXR5IG5hbWU9J0Rvd25BcnJvd0JhcicgY29kZXBvaW50PScyOTEzJy8+CisgIDxlbnRpdHkgbmFtZT0nRG93bkFycm93VXBBcnJvdycgY29kZXBvaW50PScyMUY1Jy8+CisgIDxlbnRpdHkgbmFtZT0nZG93bmRvd25hcnJvd3MnIGNvZGVwb2ludD0nMjFDQScvPgorICA8ZW50aXR5IG5hbWU9J2Rvd25oYXJwb29ubGVmdCcgY29kZXBvaW50PScyMUMzJy8+CisgIDxlbnRpdHkgbmFtZT0nZG93bmhhcnBvb25yaWdodCcgY29kZXBvaW50PScyMUMyJy8+CisgIDxlbnRpdHkgbmFtZT0nRG93bkxlZnRSaWdodFZlY3RvcicgY29kZXBvaW50PScyOTUwJy8+CisgIDxlbnRpdHkgbmFtZT0nRG93bkxlZnRUZWVWZWN0b3InIGNvZGVwb2ludD0nMjk1RScvPgorICA8ZW50aXR5IG5hbWU9J0Rvd25MZWZ0VmVjdG9yJyBjb2RlcG9pbnQ9JzIxQkQnLz4KKyAgPGVudGl0eSBuYW1lPSdEb3duTGVmdFZlY3RvckJhcicgY29kZXBvaW50PScyOTU2Jy8+CisgIDxlbnRpdHkgbmFtZT0nRG93blJpZ2h0VGVlVmVjdG9yJyBjb2RlcG9pbnQ9JzI5NUYnLz4KKyAgPGVudGl0eSBuYW1lPSdEb3duUmlnaHRWZWN0b3InIGNvZGVwb2ludD0nMjFDMScvPgorICA8ZW50aXR5IG5hbWU9J0Rvd25SaWdodFZlY3RvckJhcicgY29kZXBvaW50PScyOTU3Jy8+CisgIDxlbnRpdHkgbmFtZT0nRG93blRlZScgY29kZXBvaW50PScyMkE0Jy8+CisgIDxlbnRpdHkgbmFtZT0nRG93blRlZUFycm93JyBjb2RlcG9pbnQ9JzIxQTcnLz4KKyAgPGVudGl0eSBuYW1lPSdkcmJrYXJvdycgY29kZXBvaW50PScyOTEwJy8+CisgIDxlbnRpdHkgbmFtZT0nZHJjb3JuJyBjb2RlcG9pbnQ9JzIzMUYnLz4KKyAgPGVudGl0eSBuYW1lPSdkcmNyb3AnIGNvZGVwb2ludD0nMjMwQycvPgorICA8ZW50aXR5IG5hbWU9J0RzY3InIGNvZGVwb2ludD0nMUQ0OUYnLz4KKyAgPGVudGl0eSBuYW1lPSdkc2NyJyBjb2RlcG9pbnQ9JzFENEI5Jy8+CisgIDxlbnRpdHkgbmFtZT0nRFNjeScgY29kZXBvaW50PScwNDA1Jy8+CisgIDxlbnRpdHkgbmFtZT0nZHNjeScgY29kZXBvaW50PScwNDU1Jy8+CisgIDxlbnRpdHkgbmFtZT0nZHNvbCcgY29kZXBvaW50PScyOUY2Jy8+CisgIDxlbnRpdHkgbmFtZT0nRHN0cm9rJyBjb2RlcG9pbnQ9JzAxMTAnLz4KKyAgPGVudGl0eSBuYW1lPSdkc3Ryb2snIGNvZGVwb2ludD0nMDExMScvPgorICA8ZW50aXR5IG5hbWU9J2R0ZG90JyBjb2RlcG9pbnQ9JzIyRjEnLz4KKyAgPGVudGl0eSBuYW1lPSdkdHJpJyBjb2RlcG9pbnQ9JzI1QkYnLz4KKyAgPGVudGl0eSBuYW1lPSdkdHJpZicgY29kZXBvaW50PScyNUJFJy8+CisgIDxlbnRpdHkgbmFtZT0nZHVhcnInIGNvZGVwb2ludD0nMjFGNScvPgorICA8ZW50aXR5IG5hbWU9J2R1aGFyJyBjb2RlcG9pbnQ9JzI5NkYnLz4KKyAgPGVudGl0eSBuYW1lPSdkd2FuZ2xlJyBjb2RlcG9pbnQ9JzI5QTYnLz4KKyAgPGVudGl0eSBuYW1lPSdEWmN5JyBjb2RlcG9pbnQ9JzA0MEYnLz4KKyAgPGVudGl0eSBuYW1lPSdkemN5JyBjb2RlcG9pbnQ9JzA0NUYnLz4KKyAgPGVudGl0eSBuYW1lPSdkemlncmFycicgY29kZXBvaW50PScyN0ZGJy8+CisgIDxlbnRpdHkgbmFtZT0nRWFjZ3InIGNvZGVwb2ludD0nMDM4OCcvPgorICA8ZW50aXR5IG5hbWU9J2VhY2dyJyBjb2RlcG9pbnQ9JzAzQUQnLz4KKyAgPGVudGl0eSBuYW1lPSdFYWN1dGUnIGNvZGVwb2ludD0nMDBDOScvPgorICA8ZW50aXR5IG5hbWU9J2VhY3V0ZScgY29kZXBvaW50PScwMEU5Jy8+CisgIDxlbnRpdHkgbmFtZT0nZWFzdGVyJyBjb2RlcG9pbnQ9JzJBNkUnLz4KKyAgPGVudGl0eSBuYW1lPSdFY2Fyb24nIGNvZGVwb2ludD0nMDExQScvPgorICA8ZW50aXR5IG5hbWU9J2VjYXJvbicgY29kZXBvaW50PScwMTFCJy8+CisgIDxlbnRpdHkgbmFtZT0nZWNpcicgY29kZXBvaW50PScyMjU2Jy8+CisgIDxlbnRpdHkgbmFtZT0nRWNpcmMnIGNvZGVwb2ludD0nMDBDQScvPgorICA8ZW50aXR5IG5hbWU9J2VjaXJjJyBjb2RlcG9pbnQ9JzAwRUEnLz4KKyAgPGVudGl0eSBuYW1lPSdlY29sb24nIGNvZGVwb2ludD0nMjI1NScvPgorICA8ZW50aXR5IG5hbWU9J0VjeScgY29kZXBvaW50PScwNDJEJy8+CisgIDxlbnRpdHkgbmFtZT0nZWN5JyBjb2RlcG9pbnQ9JzA0NEQnLz4KKyAgPGVudGl0eSBuYW1lPSdlRERvdCcgY29kZXBvaW50PScyQTc3Jy8+CisgIDxlbnRpdHkgbmFtZT0nRWRvdCcgY29kZXBvaW50PScwMTE2Jy8+CisgIDxlbnRpdHkgbmFtZT0nZWRvdCcgY29kZXBvaW50PScwMTE3Jy8+CisgIDxlbnRpdHkgbmFtZT0nZURvdCcgY29kZXBvaW50PScyMjUxJy8+CisgIDxlbnRpdHkgbmFtZT0nZWUnIGNvZGVwb2ludD0nMjE0NycvPgorICA8ZW50aXR5IG5hbWU9J0VFYWNncicgY29kZXBvaW50PScwMzg5Jy8+CisgIDxlbnRpdHkgbmFtZT0nZWVhY2dyJyBjb2RlcG9pbnQ9JzAzQUUnLz4KKyAgPGVudGl0eSBuYW1lPSdFRWdyJyBjb2RlcG9pbnQ9JzAzOTcnLz4KKyAgPGVudGl0eSBuYW1lPSdlZWdyJyBjb2RlcG9pbnQ9JzAzQjcnLz4KKyAgPGVudGl0eSBuYW1lPSdlZkRvdCcgY29kZXBvaW50PScyMjUyJy8+CisgIDxlbnRpdHkgbmFtZT0nRWZyJyBjb2RlcG9pbnQ9JzFENTA4Jy8+CisgIDxlbnRpdHkgbmFtZT0nZWZyJyBjb2RlcG9pbnQ9JzFENTIyJy8+CisgIDxlbnRpdHkgbmFtZT0nZWcnIGNvZGVwb2ludD0nMkE5QScvPgorICA8ZW50aXR5IG5hbWU9J0VncicgY29kZXBvaW50PScwMzk1Jy8+CisgIDxlbnRpdHkgbmFtZT0nZWdyJyBjb2RlcG9pbnQ9JzAzQjUnLz4KKyAgPGVudGl0eSBuYW1lPSdFZ3JhdmUnIGNvZGVwb2ludD0nMDBDOCcvPgorICA8ZW50aXR5IG5hbWU9J2VncmF2ZScgY29kZXBvaW50PScwMEU4Jy8+CisgIDxlbnRpdHkgbmFtZT0nZWdzJyBjb2RlcG9pbnQ9JzJBOTYnLz4KKyAgPGVudGl0eSBuYW1lPSdlZ3Nkb3QnIGNvZGVwb2ludD0nMkE5OCcvPgorICA8ZW50aXR5IG5hbWU9J2VsJyBjb2RlcG9pbnQ9JzJBOTknLz4KKyAgPGVudGl0eSBuYW1lPSdFbGVtZW50JyBjb2RlcG9pbnQ9JzIyMDgnLz4KKyAgPGVudGl0eSBuYW1lPSdlbGludGVycycgY29kZXBvaW50PScyM0U3Jy8+CisgIDxlbnRpdHkgbmFtZT0nZWxsJyBjb2RlcG9pbnQ9JzIxMTMnLz4KKyAgPGVudGl0eSBuYW1lPSdlbHMnIGNvZGVwb2ludD0nMkE5NScvPgorICA8ZW50aXR5IG5hbWU9J2Vsc2RvdCcgY29kZXBvaW50PScyQTk3Jy8+CisgIDxlbnRpdHkgbmFtZT0nRW1hY3InIGNvZGVwb2ludD0nMDExMicvPgorICA8ZW50aXR5IG5hbWU9J2VtYWNyJyBjb2RlcG9pbnQ9JzAxMTMnLz4KKyAgPGVudGl0eSBuYW1lPSdlbXB0eScgY29kZXBvaW50PScyMjA1Jy8+CisgIDxlbnRpdHkgbmFtZT0nZW1wdHlzZXQnIGNvZGVwb2ludD0nMjIwNScvPgorICA8ZW50aXR5IG5hbWU9J0VtcHR5U21hbGxTcXVhcmUnIGNvZGVwb2ludD0nMjVGQicvPgorICA8ZW50aXR5IG5hbWU9J2VtcHR5dicgY29kZXBvaW50PScyMjA1Jy8+CisgIDxlbnRpdHkgbmFtZT0nRW1wdHlWZXJ5U21hbGxTcXVhcmUnIGNvZGVwb2ludD0nMjVBQicvPgorICA8ZW50aXR5IG5hbWU9J2Vtc3AnIGNvZGVwb2ludD0nMjAwMycvPgorICA8ZW50aXR5IG5hbWU9J2Vtc3AxMycgY29kZXBvaW50PScyMDA0Jy8+CisgIDxlbnRpdHkgbmFtZT0nZW1zcDE0JyBjb2RlcG9pbnQ9JzIwMDUnLz4KKyAgPGVudGl0eSBuYW1lPSdFTkcnIGNvZGVwb2ludD0nMDE0QScvPgorICA8ZW50aXR5IG5hbWU9J2VuZycgY29kZXBvaW50PScwMTRCJy8+CisgIDxlbnRpdHkgbmFtZT0nZW5zcCcgY29kZXBvaW50PScyMDAyJy8+CisgIDxlbnRpdHkgbmFtZT0nRW9nb24nIGNvZGVwb2ludD0nMDExOCcvPgorICA8ZW50aXR5IG5hbWU9J2VvZ29uJyBjb2RlcG9pbnQ9JzAxMTknLz4KKyAgPGVudGl0eSBuYW1lPSdFb3BmJyBjb2RlcG9pbnQ9JzFENTNDJy8+CisgIDxlbnRpdHkgbmFtZT0nZW9wZicgY29kZXBvaW50PScxRDU1NicvPgorICA8ZW50aXR5IG5hbWU9J2VwYXInIGNvZGVwb2ludD0nMjJENScvPgorICA8ZW50aXR5IG5hbWU9J2VwYXJzbCcgY29kZXBvaW50PScyOUUzJy8+CisgIDxlbnRpdHkgbmFtZT0nZXBsdXMnIGNvZGVwb2ludD0nMkE3MScvPgorICA8ZW50aXR5IG5hbWU9J2Vwc2knIGNvZGVwb2ludD0nMDNGNScvPgorICA8ZW50aXR5IG5hbWU9J0Vwc2lsb24nIGNvZGVwb2ludD0nMDM5NScvPgorICA8ZW50aXR5IG5hbWU9J2Vwc2lsb24nIGNvZGVwb2ludD0nMDNCNScvPgorICA8ZW50aXR5IG5hbWU9J2Vwc2l2JyBjb2RlcG9pbnQ9JzAzQjUnLz4KKyAgPGVudGl0eSBuYW1lPSdlcWNpcmMnIGNvZGVwb2ludD0nMjI1NicvPgorICA8ZW50aXR5IG5hbWU9J2VxY29sb24nIGNvZGVwb2ludD0nMjI1NScvPgorICA8ZW50aXR5IG5hbWU9J2Vxc2ltJyBjb2RlcG9pbnQ9JzIyNDInLz4KKyAgPGVudGl0eSBuYW1lPSdlcXNsYW50Z3RyJyBjb2RlcG9pbnQ9JzJBOTYnLz4KKyAgPGVudGl0eSBuYW1lPSdlcXNsYW50bGVzcycgY29kZXBvaW50PScyQTk1Jy8+CisgIDxlbnRpdHkgbmFtZT0nRXF1YWwnIGNvZGVwb2ludD0nMkE3NScvPgorICA8ZW50aXR5IG5hbWU9J2VxdWFscycgY29kZXBvaW50PScwMDNEJy8+CisgIDxlbnRpdHkgbmFtZT0nRXF1YWxUaWxkZScgY29kZXBvaW50PScyMjQyJy8+CisgIDxlbnRpdHkgbmFtZT0nZXF1ZXN0JyBjb2RlcG9pbnQ9JzIyNUYnLz4KKyAgPGVudGl0eSBuYW1lPSdFcXVpbGlicml1bScgY29kZXBvaW50PScyMUNDJy8+CisgIDxlbnRpdHkgbmFtZT0nZXF1aXYnIGNvZGVwb2ludD0nMjI2MScvPgorICA8ZW50aXR5IG5hbWU9J2VxdWl2REQnIGNvZGVwb2ludD0nMkE3OCcvPgorICA8ZW50aXR5IG5hbWU9J2VxdnBhcnNsJyBjb2RlcG9pbnQ9JzI5RTUnLz4KKyAgPGVudGl0eSBuYW1lPSdlcmFycicgY29kZXBvaW50PScyOTcxJy8+CisgIDxlbnRpdHkgbmFtZT0nZXJEb3QnIGNvZGVwb2ludD0nMjI1MycvPgorICA8ZW50aXR5IG5hbWU9J2VzY3InIGNvZGVwb2ludD0nMjEyRicvPgorICA8ZW50aXR5IG5hbWU9J0VzY3InIGNvZGVwb2ludD0nMjEzMCcvPgorICA8ZW50aXR5IG5hbWU9J2VzZG90JyBjb2RlcG9pbnQ9JzIyNTAnLz4KKyAgPGVudGl0eSBuYW1lPSdlc2ltJyBjb2RlcG9pbnQ9JzIyNDInLz4KKyAgPGVudGl0eSBuYW1lPSdFc2ltJyBjb2RlcG9pbnQ9JzJBNzMnLz4KKyAgPGVudGl0eSBuYW1lPSdFdGEnIGNvZGVwb2ludD0nMDM5NycvPgorICA8ZW50aXR5IG5hbWU9J2V0YScgY29kZXBvaW50PScwM0I3Jy8+CisgIDxlbnRpdHkgbmFtZT0nRVRIJyBjb2RlcG9pbnQ9JzAwRDAnLz4KKyAgPGVudGl0eSBuYW1lPSdldGgnIGNvZGVwb2ludD0nMDBGMCcvPgorICA8ZW50aXR5IG5hbWU9J0V1bWwnIGNvZGVwb2ludD0nMDBDQicvPgorICA8ZW50aXR5IG5hbWU9J2V1bWwnIGNvZGVwb2ludD0nMDBFQicvPgorICA8ZW50aXR5IG5hbWU9J2V1cm8nIGNvZGVwb2ludD0nMjBBQycvPgorICA8ZW50aXR5IG5hbWU9J2V4Y2wnIGNvZGVwb2ludD0nMDAyMScvPgorICA8ZW50aXR5IG5hbWU9J2V4aXN0JyBjb2RlcG9pbnQ9JzIyMDMnLz4KKyAgPGVudGl0eSBuYW1lPSdFeGlzdHMnIGNvZGVwb2ludD0nMjIwMycvPgorICA8ZW50aXR5IG5hbWU9J2V4cGVjdGF0aW9uJyBjb2RlcG9pbnQ9JzIxMzAnLz4KKyAgPGVudGl0eSBuYW1lPSdleHBvbmVudGlhbGUnIGNvZGVwb2ludD0nMjE0NycvPgorICA8ZW50aXR5IG5hbWU9J2ZhbGxpbmdkb3RzZXEnIGNvZGVwb2ludD0nMjI1MicvPgorICA8ZW50aXR5IG5hbWU9J0ZjeScgY29kZXBvaW50PScwNDI0Jy8+CisgIDxlbnRpdHkgbmFtZT0nZmN5JyBjb2RlcG9pbnQ9JzA0NDQnLz4KKyAgPGVudGl0eSBuYW1lPSdmZW1hbGUnIGNvZGVwb2ludD0nMjY0MCcvPgorICA8ZW50aXR5IG5hbWU9J2ZmaWxpZycgY29kZXBvaW50PSdGQjAzJy8+CisgIDxlbnRpdHkgbmFtZT0nZmZsaWcnIGNvZGVwb2ludD0nRkIwMCcvPgorICA8ZW50aXR5IG5hbWU9J2ZmbGxpZycgY29kZXBvaW50PSdGQjA0Jy8+CisgIDxlbnRpdHkgbmFtZT0nRmZyJyBjb2RlcG9pbnQ9JzFENTA5Jy8+CisgIDxlbnRpdHkgbmFtZT0nZmZyJyBjb2RlcG9pbnQ9JzFENTIzJy8+CisgIDxlbnRpdHkgbmFtZT0nZmlsaWcnIGNvZGVwb2ludD0nRkIwMScvPgorICA8ZW50aXR5IG5hbWU9J0ZpbGxlZFNtYWxsU3F1YXJlJyBjb2RlcG9pbnQ9JzI1RkMnLz4KKyAgPGVudGl0eSBuYW1lPSdGaWxsZWRWZXJ5U21hbGxTcXVhcmUnIGNvZGVwb2ludD0nMjVBQScvPgorICA8ZW50aXR5IG5hbWU9J2ZsYXQnIGNvZGVwb2ludD0nMjY2RCcvPgorICA8ZW50aXR5IG5hbWU9J2ZsbGlnJyBjb2RlcG9pbnQ9J0ZCMDInLz4KKyAgPGVudGl0eSBuYW1lPSdmbHRucycgY29kZXBvaW50PScyNUIxJy8+CisgIDxlbnRpdHkgbmFtZT0nZm5vZicgY29kZXBvaW50PScwMTkyJy8+CisgIDxlbnRpdHkgbmFtZT0nRm9wZicgY29kZXBvaW50PScxRDUzRCcvPgorICA8ZW50aXR5IG5hbWU9J2ZvcGYnIGNvZGVwb2ludD0nMUQ1NTcnLz4KKyAgPGVudGl0eSBuYW1lPSdmb3JhbGwnIGNvZGVwb2ludD0nMjIwMCcvPgorICA8ZW50aXR5IG5hbWU9J2ZvcmsnIGNvZGVwb2ludD0nMjJENCcvPgorICA8ZW50aXR5IG5hbWU9J2Zvcmt2JyBjb2RlcG9pbnQ9JzJBRDknLz4KKyAgPGVudGl0eSBuYW1lPSdGb3VyaWVydHJmJyBjb2RlcG9pbnQ9JzIxMzEnLz4KKyAgPGVudGl0eSBuYW1lPSdmcGFydGludCcgY29kZXBvaW50PScyQTBEJy8+CisgIDxlbnRpdHkgbmFtZT0nZnJhYzEyJyBjb2RlcG9pbnQ9JzAwQkQnLz4KKyAgPGVudGl0eSBuYW1lPSdmcmFjMTMnIGNvZGVwb2ludD0nMjE1MycvPgorICA8ZW50aXR5IG5hbWU9J2ZyYWMxNCcgY29kZXBvaW50PScwMEJDJy8+CisgIDxlbnRpdHkgbmFtZT0nZnJhYzE1JyBjb2RlcG9pbnQ9JzIxNTUnLz4KKyAgPGVudGl0eSBuYW1lPSdmcmFjMTYnIGNvZGVwb2ludD0nMjE1OScvPgorICA8ZW50aXR5IG5hbWU9J2ZyYWMxOCcgY29kZXBvaW50PScyMTVCJy8+CisgIDxlbnRpdHkgbmFtZT0nZnJhYzIzJyBjb2RlcG9pbnQ9JzIxNTQnLz4KKyAgPGVudGl0eSBuYW1lPSdmcmFjMjUnIGNvZGVwb2ludD0nMjE1NicvPgorICA8ZW50aXR5IG5hbWU9J2ZyYWMzNCcgY29kZXBvaW50PScwMEJFJy8+CisgIDxlbnRpdHkgbmFtZT0nZnJhYzM1JyBjb2RlcG9pbnQ9JzIxNTcnLz4KKyAgPGVudGl0eSBuYW1lPSdmcmFjMzgnIGNvZGVwb2ludD0nMjE1QycvPgorICA8ZW50aXR5IG5hbWU9J2ZyYWM0NScgY29kZXBvaW50PScyMTU4Jy8+CisgIDxlbnRpdHkgbmFtZT0nZnJhYzU2JyBjb2RlcG9pbnQ9JzIxNUEnLz4KKyAgPGVudGl0eSBuYW1lPSdmcmFjNTgnIGNvZGVwb2ludD0nMjE1RCcvPgorICA8ZW50aXR5IG5hbWU9J2ZyYWM3OCcgY29kZXBvaW50PScyMTVFJy8+CisgIDxlbnRpdHkgbmFtZT0nZnJhc2wnIGNvZGVwb2ludD0nMjA0NCcvPgorICA8ZW50aXR5IG5hbWU9J2Zyb3duJyBjb2RlcG9pbnQ9JzIzMjInLz4KKyAgPGVudGl0eSBuYW1lPSdGc2NyJyBjb2RlcG9pbnQ9JzIxMzEnLz4KKyAgPGVudGl0eSBuYW1lPSdmc2NyJyBjb2RlcG9pbnQ9JzFENEJCJy8+CisgIDxlbnRpdHkgbmFtZT0nZ2FjdXRlJyBjb2RlcG9pbnQ9JzAxRjUnLz4KKyAgPGVudGl0eSBuYW1lPSdHYW1tYScgY29kZXBvaW50PScwMzkzJy8+CisgIDxlbnRpdHkgbmFtZT0nZ2FtbWEnIGNvZGVwb2ludD0nMDNCMycvPgorICA8ZW50aXR5IG5hbWU9J0dhbW1hZCcgY29kZXBvaW50PScwM0RDJy8+CisgIDxlbnRpdHkgbmFtZT0nZ2FtbWFkJyBjb2RlcG9pbnQ9JzAzREQnLz4KKyAgPGVudGl0eSBuYW1lPSdnYXAnIGNvZGVwb2ludD0nMkE4NicvPgorICA8ZW50aXR5IG5hbWU9J0dicmV2ZScgY29kZXBvaW50PScwMTFFJy8+CisgIDxlbnRpdHkgbmFtZT0nZ2JyZXZlJyBjb2RlcG9pbnQ9JzAxMUYnLz4KKyAgPGVudGl0eSBuYW1lPSdHY2VkaWwnIGNvZGVwb2ludD0nMDEyMicvPgorICA8ZW50aXR5IG5hbWU9J0djaXJjJyBjb2RlcG9pbnQ9JzAxMUMnLz4KKyAgPGVudGl0eSBuYW1lPSdnY2lyYycgY29kZXBvaW50PScwMTFEJy8+CisgIDxlbnRpdHkgbmFtZT0nR2N5JyBjb2RlcG9pbnQ9JzA0MTMnLz4KKyAgPGVudGl0eSBuYW1lPSdnY3knIGNvZGVwb2ludD0nMDQzMycvPgorICA8ZW50aXR5IG5hbWU9J0dkb3QnIGNvZGVwb2ludD0nMDEyMCcvPgorICA8ZW50aXR5IG5hbWU9J2dkb3QnIGNvZGVwb2ludD0nMDEyMScvPgorICA8ZW50aXR5IG5hbWU9J2dlJyBjb2RlcG9pbnQ9JzIyNjUnLz4KKyAgPGVudGl0eSBuYW1lPSdnRScgY29kZXBvaW50PScyMjY3Jy8+CisgIDxlbnRpdHkgbmFtZT0nZ2VsJyBjb2RlcG9pbnQ9JzIyREInLz4KKyAgPGVudGl0eSBuYW1lPSdnRWwnIGNvZGVwb2ludD0nMkE4QycvPgorICA8ZW50aXR5IG5hbWU9J2dlcScgY29kZXBvaW50PScyMjY1Jy8+CisgIDxlbnRpdHkgbmFtZT0nZ2VxcScgY29kZXBvaW50PScyMjY3Jy8+CisgIDxlbnRpdHkgbmFtZT0nZ2Vxc2xhbnQnIGNvZGVwb2ludD0nMkE3RScvPgorICA8ZW50aXR5IG5hbWU9J2dlcycgY29kZXBvaW50PScyQTdFJy8+CisgIDxlbnRpdHkgbmFtZT0nZ2VzY2MnIGNvZGVwb2ludD0nMkFBOScvPgorICA8ZW50aXR5IG5hbWU9J2dlc2RvdCcgY29kZXBvaW50PScyQTgwJy8+CisgIDxlbnRpdHkgbmFtZT0nZ2VzZG90bycgY29kZXBvaW50PScyQTgyJy8+CisgIDxlbnRpdHkgbmFtZT0nZ2VzZG90b2wnIGNvZGVwb2ludD0nMkE4NCcvPgorICA8ZW50aXR5IG5hbWU9J2dlc2xlcycgY29kZXBvaW50PScyQTk0Jy8+CisgIDxlbnRpdHkgbmFtZT0nR2ZyJyBjb2RlcG9pbnQ9JzFENTBBJy8+CisgIDxlbnRpdHkgbmFtZT0nZ2ZyJyBjb2RlcG9pbnQ9JzFENTI0Jy8+CisgIDxlbnRpdHkgbmFtZT0nZ2cnIGNvZGVwb2ludD0nMjI2QicvPgorICA8ZW50aXR5IG5hbWU9J0dnJyBjb2RlcG9pbnQ9JzIyRDknLz4KKyAgPGVudGl0eSBuYW1lPSdnZ2cnIGNvZGVwb2ludD0nMjJEOScvPgorICA8ZW50aXR5IG5hbWU9J0dncicgY29kZXBvaW50PScwMzkzJy8+CisgIDxlbnRpdHkgbmFtZT0nZ2dyJyBjb2RlcG9pbnQ9JzAzQjMnLz4KKyAgPGVudGl0eSBuYW1lPSdnaW1lbCcgY29kZXBvaW50PScyMTM3Jy8+CisgIDxlbnRpdHkgbmFtZT0nR0pjeScgY29kZXBvaW50PScwNDAzJy8+CisgIDxlbnRpdHkgbmFtZT0nZ2pjeScgY29kZXBvaW50PScwNDUzJy8+CisgIDxlbnRpdHkgbmFtZT0nZ2wnIGNvZGVwb2ludD0nMjI3NycvPgorICA8ZW50aXR5IG5hbWU9J2dsYScgY29kZXBvaW50PScyQUE1Jy8+CisgIDxlbnRpdHkgbmFtZT0nZ2xFJyBjb2RlcG9pbnQ9JzJBOTInLz4KKyAgPGVudGl0eSBuYW1lPSdnbGonIGNvZGVwb2ludD0nMkFBNCcvPgorICA8ZW50aXR5IG5hbWU9J2duYXAnIGNvZGVwb2ludD0nMkE4QScvPgorICA8ZW50aXR5IG5hbWU9J2duYXBwcm94JyBjb2RlcG9pbnQ9JzJBOEEnLz4KKyAgPGVudGl0eSBuYW1lPSdnbkUnIGNvZGVwb2ludD0nMjI2OScvPgorICA8ZW50aXR5IG5hbWU9J2duZScgY29kZXBvaW50PScyQTg4Jy8+CisgIDxlbnRpdHkgbmFtZT0nZ25lcScgY29kZXBvaW50PScyQTg4Jy8+CisgIDxlbnRpdHkgbmFtZT0nZ25lcXEnIGNvZGVwb2ludD0nMjI2OScvPgorICA8ZW50aXR5IG5hbWU9J2duc2ltJyBjb2RlcG9pbnQ9JzIyRTcnLz4KKyAgPGVudGl0eSBuYW1lPSdHb3BmJyBjb2RlcG9pbnQ9JzFENTNFJy8+CisgIDxlbnRpdHkgbmFtZT0nZ29wZicgY29kZXBvaW50PScxRDU1OCcvPgorICA8ZW50aXR5IG5hbWU9J2dyYXZlJyBjb2RlcG9pbnQ9JzAwNjAnLz4KKyAgPGVudGl0eSBuYW1lPSdHcmVhdGVyRXF1YWwnIGNvZGVwb2ludD0nMjI2NScvPgorICA8ZW50aXR5IG5hbWU9J0dyZWF0ZXJFcXVhbExlc3MnIGNvZGVwb2ludD0nMjJEQicvPgorICA8ZW50aXR5IG5hbWU9J0dyZWF0ZXJGdWxsRXF1YWwnIGNvZGVwb2ludD0nMjI2NycvPgorICA8ZW50aXR5IG5hbWU9J0dyZWF0ZXJHcmVhdGVyJyBjb2RlcG9pbnQ9JzJBQTInLz4KKyAgPGVudGl0eSBuYW1lPSdHcmVhdGVyTGVzcycgY29kZXBvaW50PScyMjc3Jy8+CisgIDxlbnRpdHkgbmFtZT0nR3JlYXRlclNsYW50RXF1YWwnIGNvZGVwb2ludD0nMkE3RScvPgorICA8ZW50aXR5IG5hbWU9J0dyZWF0ZXJUaWxkZScgY29kZXBvaW50PScyMjczJy8+CisgIDxlbnRpdHkgbmFtZT0nZ3NjcicgY29kZXBvaW50PScyMTBBJy8+CisgIDxlbnRpdHkgbmFtZT0nR3NjcicgY29kZXBvaW50PScxRDRBMicvPgorICA8ZW50aXR5IG5hbWU9J2dzaW0nIGNvZGVwb2ludD0nMjI3MycvPgorICA8ZW50aXR5IG5hbWU9J2dzaW1lJyBjb2RlcG9pbnQ9JzJBOEUnLz4KKyAgPGVudGl0eSBuYW1lPSdnc2ltbCcgY29kZXBvaW50PScyQTkwJy8+CisgIDxlbnRpdHkgbmFtZT0nZ3QnIGNvZGVwb2ludD0nMDAzRScvPgorICA8ZW50aXR5IG5hbWU9J0d0JyBjb2RlcG9pbnQ9JzIyNkInLz4KKyAgPGVudGl0eSBuYW1lPSdndGNjJyBjb2RlcG9pbnQ9JzJBQTcnLz4KKyAgPGVudGl0eSBuYW1lPSdndGNpcicgY29kZXBvaW50PScyQTdBJy8+CisgIDxlbnRpdHkgbmFtZT0nZ3Rkb3QnIGNvZGVwb2ludD0nMjJENycvPgorICA8ZW50aXR5IG5hbWU9J2d0bFBhcicgY29kZXBvaW50PScyOTk1Jy8+CisgIDxlbnRpdHkgbmFtZT0nZ3RxdWVzdCcgY29kZXBvaW50PScyQTdDJy8+CisgIDxlbnRpdHkgbmFtZT0nZ3RyYXBwcm94JyBjb2RlcG9pbnQ9JzJBODYnLz4KKyAgPGVudGl0eSBuYW1lPSdndHJhcnInIGNvZGVwb2ludD0nMjk3OCcvPgorICA8ZW50aXR5IG5hbWU9J2d0cmRvdCcgY29kZXBvaW50PScyMkQ3Jy8+CisgIDxlbnRpdHkgbmFtZT0nZ3RyZXFsZXNzJyBjb2RlcG9pbnQ9JzIyREInLz4KKyAgPGVudGl0eSBuYW1lPSdndHJlcXFsZXNzJyBjb2RlcG9pbnQ9JzJBOEMnLz4KKyAgPGVudGl0eSBuYW1lPSdndHJsZXNzJyBjb2RlcG9pbnQ9JzIyNzcnLz4KKyAgPGVudGl0eSBuYW1lPSdndHJzaW0nIGNvZGVwb2ludD0nMjI3MycvPgorICA8ZW50aXR5IG5hbWU9J0hhY2VrJyBjb2RlcG9pbnQ9JzAyQzcnLz4KKyAgPGVudGl0eSBuYW1lPSdoYWlyc3AnIGNvZGVwb2ludD0nMjAwQScvPgorICA8ZW50aXR5IG5hbWU9J2hhbGYnIGNvZGVwb2ludD0nMDBCRCcvPgorICA8ZW50aXR5IG5hbWU9J2hhbWlsdCcgY29kZXBvaW50PScyMTBCJy8+CisgIDxlbnRpdHkgbmFtZT0nSEFSRGN5JyBjb2RlcG9pbnQ9JzA0MkEnLz4KKyAgPGVudGl0eSBuYW1lPSdoYXJkY3knIGNvZGVwb2ludD0nMDQ0QScvPgorICA8ZW50aXR5IG5hbWU9J2hhcnInIGNvZGVwb2ludD0nMjE5NCcvPgorICA8ZW50aXR5IG5hbWU9J2hBcnInIGNvZGVwb2ludD0nMjFENCcvPgorICA8ZW50aXR5IG5hbWU9J2hhcnJjaXInIGNvZGVwb2ludD0nMjk0OCcvPgorICA8ZW50aXR5IG5hbWU9J2hhcnJ3JyBjb2RlcG9pbnQ9JzIxQUQnLz4KKyAgPGVudGl0eSBuYW1lPSdIYXQnIGNvZGVwb2ludD0nMDA1RScvPgorICA8ZW50aXR5IG5hbWU9J2hiYXInIGNvZGVwb2ludD0nMjEwRicvPgorICA8ZW50aXR5IG5hbWU9J0hjaXJjJyBjb2RlcG9pbnQ9JzAxMjQnLz4KKyAgPGVudGl0eSBuYW1lPSdoY2lyYycgY29kZXBvaW50PScwMTI1Jy8+CisgIDxlbnRpdHkgbmFtZT0naGVhcnRzJyBjb2RlcG9pbnQ9JzI2NjUnLz4KKyAgPGVudGl0eSBuYW1lPSdoZWFydHN1aXQnIGNvZGVwb2ludD0nMjY2NScvPgorICA8ZW50aXR5IG5hbWU9J2hlbGxpcCcgY29kZXBvaW50PScyMDI2Jy8+CisgIDxlbnRpdHkgbmFtZT0naGVyY29uJyBjb2RlcG9pbnQ9JzIyQjknLz4KKyAgPGVudGl0eSBuYW1lPSdIZnInIGNvZGVwb2ludD0nMjEwQycvPgorICA8ZW50aXR5IG5hbWU9J2hmcicgY29kZXBvaW50PScxRDUyNScvPgorICA8ZW50aXR5IG5hbWU9J0hpbGJlcnRTcGFjZScgY29kZXBvaW50PScyMTBCJy8+CisgIDxlbnRpdHkgbmFtZT0naGtzZWFyb3cnIGNvZGVwb2ludD0nMjkyNScvPgorICA8ZW50aXR5IG5hbWU9J2hrc3dhcm93JyBjb2RlcG9pbnQ9JzI5MjYnLz4KKyAgPGVudGl0eSBuYW1lPSdob2FycicgY29kZXBvaW50PScyMUZGJy8+CisgIDxlbnRpdHkgbmFtZT0naG9tdGh0JyBjb2RlcG9pbnQ9JzIyM0InLz4KKyAgPGVudGl0eSBuYW1lPSdob29rbGVmdGFycm93JyBjb2RlcG9pbnQ9JzIxQTknLz4KKyAgPGVudGl0eSBuYW1lPSdob29rcmlnaHRhcnJvdycgY29kZXBvaW50PScyMUFBJy8+CisgIDxlbnRpdHkgbmFtZT0nSG9wZicgY29kZXBvaW50PScyMTBEJy8+CisgIDxlbnRpdHkgbmFtZT0naG9wZicgY29kZXBvaW50PScxRDU1OScvPgorICA8ZW50aXR5IG5hbWU9J2hvcmJhcicgY29kZXBvaW50PScyMDE1Jy8+CisgIDxlbnRpdHkgbmFtZT0nSG9yaXpvbnRhbExpbmUnIGNvZGVwb2ludD0nMjUwMCcvPgorICA8ZW50aXR5IG5hbWU9J0hzY3InIGNvZGVwb2ludD0nMjEwQicvPgorICA8ZW50aXR5IG5hbWU9J2hzY3InIGNvZGVwb2ludD0nMUQ0QkQnLz4KKyAgPGVudGl0eSBuYW1lPSdoc2xhc2gnIGNvZGVwb2ludD0nMjEwRicvPgorICA8ZW50aXR5IG5hbWU9J0hzdHJvaycgY29kZXBvaW50PScwMTI2Jy8+CisgIDxlbnRpdHkgbmFtZT0naHN0cm9rJyBjb2RlcG9pbnQ9JzAxMjcnLz4KKyAgPGVudGl0eSBuYW1lPSdIdW1wRG93bkh1bXAnIGNvZGVwb2ludD0nMjI0RScvPgorICA8ZW50aXR5IG5hbWU9J0h1bXBFcXVhbCcgY29kZXBvaW50PScyMjRGJy8+CisgIDxlbnRpdHkgbmFtZT0naHlidWxsJyBjb2RlcG9pbnQ9JzIwNDMnLz4KKyAgPGVudGl0eSBuYW1lPSdoeXBoZW4nIGNvZGVwb2ludD0nMjAxMCcvPgorICA8ZW50aXR5IG5hbWU9J0lhY2dyJyBjb2RlcG9pbnQ9JzAzOEEnLz4KKyAgPGVudGl0eSBuYW1lPSdpYWNncicgY29kZXBvaW50PScwM0FGJy8+CisgIDxlbnRpdHkgbmFtZT0nSWFjdXRlJyBjb2RlcG9pbnQ9JzAwQ0QnLz4KKyAgPGVudGl0eSBuYW1lPSdpYWN1dGUnIGNvZGVwb2ludD0nMDBFRCcvPgorICA8ZW50aXR5IG5hbWU9J2ljJyBjb2RlcG9pbnQ9JzIwNjMnLz4KKyAgPGVudGl0eSBuYW1lPSdJY2lyYycgY29kZXBvaW50PScwMENFJy8+CisgIDxlbnRpdHkgbmFtZT0naWNpcmMnIGNvZGVwb2ludD0nMDBFRScvPgorICA8ZW50aXR5IG5hbWU9J0ljeScgY29kZXBvaW50PScwNDE4Jy8+CisgIDxlbnRpdHkgbmFtZT0naWN5JyBjb2RlcG9pbnQ9JzA0MzgnLz4KKyAgPGVudGl0eSBuYW1lPSdpZGlhZ3InIGNvZGVwb2ludD0nMDM5MCcvPgorICA8ZW50aXR5IG5hbWU9J0lkaWdyJyBjb2RlcG9pbnQ9JzAzQUEnLz4KKyAgPGVudGl0eSBuYW1lPSdpZGlncicgY29kZXBvaW50PScwM0NBJy8+CisgIDxlbnRpdHkgbmFtZT0nSWRvdCcgY29kZXBvaW50PScwMTMwJy8+CisgIDxlbnRpdHkgbmFtZT0nSUVjeScgY29kZXBvaW50PScwNDE1Jy8+CisgIDxlbnRpdHkgbmFtZT0naWVjeScgY29kZXBvaW50PScwNDM1Jy8+CisgIDxlbnRpdHkgbmFtZT0naWV4Y2wnIGNvZGVwb2ludD0nMDBBMScvPgorICA8ZW50aXR5IG5hbWU9J2lmZicgY29kZXBvaW50PScyMUQ0Jy8+CisgIDxlbnRpdHkgbmFtZT0nSWZyJyBjb2RlcG9pbnQ9JzIxMTEnLz4KKyAgPGVudGl0eSBuYW1lPSdpZnInIGNvZGVwb2ludD0nMUQ1MjYnLz4KKyAgPGVudGl0eSBuYW1lPSdJZ3InIGNvZGVwb2ludD0nMDM5OScvPgorICA8ZW50aXR5IG5hbWU9J2lncicgY29kZXBvaW50PScwM0I5Jy8+CisgIDxlbnRpdHkgbmFtZT0nSWdyYXZlJyBjb2RlcG9pbnQ9JzAwQ0MnLz4KKyAgPGVudGl0eSBuYW1lPSdpZ3JhdmUnIGNvZGVwb2ludD0nMDBFQycvPgorICA8ZW50aXR5IG5hbWU9J2lpJyBjb2RlcG9pbnQ9JzIxNDgnLz4KKyAgPGVudGl0eSBuYW1lPSdpaWlpbnQnIGNvZGVwb2ludD0nMkEwQycvPgorICA8ZW50aXR5IG5hbWU9J2lpaW50JyBjb2RlcG9pbnQ9JzIyMkQnLz4KKyAgPGVudGl0eSBuYW1lPSdpaW5maW4nIGNvZGVwb2ludD0nMjlEQycvPgorICA8ZW50aXR5IG5hbWU9J2lpb3RhJyBjb2RlcG9pbnQ9JzIxMjknLz4KKyAgPGVudGl0eSBuYW1lPSdJSmxpZycgY29kZXBvaW50PScwMTMyJy8+CisgIDxlbnRpdHkgbmFtZT0naWpsaWcnIGNvZGVwb2ludD0nMDEzMycvPgorICA8ZW50aXR5IG5hbWU9J0ltJyBjb2RlcG9pbnQ9JzIxMTEnLz4KKyAgPGVudGl0eSBuYW1lPSdJbWFjcicgY29kZXBvaW50PScwMTJBJy8+CisgIDxlbnRpdHkgbmFtZT0naW1hY3InIGNvZGVwb2ludD0nMDEyQicvPgorICA8ZW50aXR5IG5hbWU9J2ltYWdlJyBjb2RlcG9pbnQ9JzIxMTEnLz4KKyAgPGVudGl0eSBuYW1lPSdJbWFnaW5hcnlJJyBjb2RlcG9pbnQ9JzIxNDgnLz4KKyAgPGVudGl0eSBuYW1lPSdpbWFnbGluZScgY29kZXBvaW50PScyMTEwJy8+CisgIDxlbnRpdHkgbmFtZT0naW1hZ3BhcnQnIGNvZGVwb2ludD0nMjExMScvPgorICA8ZW50aXR5IG5hbWU9J2ltYXRoJyBjb2RlcG9pbnQ9JzAxMzEnLz4KKyAgPGVudGl0eSBuYW1lPSdpbW9mJyBjb2RlcG9pbnQ9JzIyQjcnLz4KKyAgPGVudGl0eSBuYW1lPSdpbXBlZCcgY29kZXBvaW50PScwMUI1Jy8+CisgIDxlbnRpdHkgbmFtZT0nSW1wbGllcycgY29kZXBvaW50PScyMUQyJy8+CisgIDxlbnRpdHkgbmFtZT0naW4nIGNvZGVwb2ludD0nMjIwOCcvPgorICA8ZW50aXR5IG5hbWU9J2luY2FyZScgY29kZXBvaW50PScyMTA1Jy8+CisgIDxlbnRpdHkgbmFtZT0naW5maW4nIGNvZGVwb2ludD0nMjIxRScvPgorICA8ZW50aXR5IG5hbWU9J2luZmludGllJyBjb2RlcG9pbnQ9JzI5REQnLz4KKyAgPGVudGl0eSBuYW1lPSdpbm9kb3QnIGNvZGVwb2ludD0nMDEzMScvPgorICA8ZW50aXR5IG5hbWU9J2ludCcgY29kZXBvaW50PScyMjJCJy8+CisgIDxlbnRpdHkgbmFtZT0nSW50JyBjb2RlcG9pbnQ9JzIyMkMnLz4KKyAgPGVudGl0eSBuYW1lPSdpbnRjYWwnIGNvZGVwb2ludD0nMjJCQScvPgorICA8ZW50aXR5IG5hbWU9J2ludGVnZXJzJyBjb2RlcG9pbnQ9JzIxMjQnLz4KKyAgPGVudGl0eSBuYW1lPSdJbnRlZ3JhbCcgY29kZXBvaW50PScyMjJCJy8+CisgIDxlbnRpdHkgbmFtZT0naW50ZXJjYWwnIGNvZGVwb2ludD0nMjJCQScvPgorICA8ZW50aXR5IG5hbWU9J0ludGVyc2VjdGlvbicgY29kZXBvaW50PScyMkMyJy8+CisgIDxlbnRpdHkgbmFtZT0naW50bGFyaGsnIGNvZGVwb2ludD0nMkExNycvPgorICA8ZW50aXR5IG5hbWU9J2ludHByb2QnIGNvZGVwb2ludD0nMkEzQycvPgorICA8ZW50aXR5IG5hbWU9J0ludmlzaWJsZUNvbW1hJyBjb2RlcG9pbnQ9JzIwNjMnLz4KKyAgPGVudGl0eSBuYW1lPSdJbnZpc2libGVUaW1lcycgY29kZXBvaW50PScyMDYyJy8+CisgIDxlbnRpdHkgbmFtZT0nSU9jeScgY29kZXBvaW50PScwNDAxJy8+CisgIDxlbnRpdHkgbmFtZT0naW9jeScgY29kZXBvaW50PScwNDUxJy8+CisgIDxlbnRpdHkgbmFtZT0nSW9nb24nIGNvZGVwb2ludD0nMDEyRScvPgorICA8ZW50aXR5IG5hbWU9J2lvZ29uJyBjb2RlcG9pbnQ9JzAxMkYnLz4KKyAgPGVudGl0eSBuYW1lPSdJb3BmJyBjb2RlcG9pbnQ9JzFENTQwJy8+CisgIDxlbnRpdHkgbmFtZT0naW9wZicgY29kZXBvaW50PScxRDU1QScvPgorICA8ZW50aXR5IG5hbWU9J0lvdGEnIGNvZGVwb2ludD0nMDM5OScvPgorICA8ZW50aXR5IG5hbWU9J2lvdGEnIGNvZGVwb2ludD0nMDNCOScvPgorICA8ZW50aXR5IG5hbWU9J2lwcm9kJyBjb2RlcG9pbnQ9JzJBM0MnLz4KKyAgPGVudGl0eSBuYW1lPSdpcXVlc3QnIGNvZGVwb2ludD0nMDBCRicvPgorICA8ZW50aXR5IG5hbWU9J0lzY3InIGNvZGVwb2ludD0nMjExMCcvPgorICA8ZW50aXR5IG5hbWU9J2lzY3InIGNvZGVwb2ludD0nMUQ0QkUnLz4KKyAgPGVudGl0eSBuYW1lPSdpc2luJyBjb2RlcG9pbnQ9JzIyMDgnLz4KKyAgPGVudGl0eSBuYW1lPSdpc2luZG90JyBjb2RlcG9pbnQ9JzIyRjUnLz4KKyAgPGVudGl0eSBuYW1lPSdpc2luRScgY29kZXBvaW50PScyMkY5Jy8+CisgIDxlbnRpdHkgbmFtZT0naXNpbnMnIGNvZGVwb2ludD0nMjJGNCcvPgorICA8ZW50aXR5IG5hbWU9J2lzaW5zdicgY29kZXBvaW50PScyMkYzJy8+CisgIDxlbnRpdHkgbmFtZT0naXNpbnYnIGNvZGVwb2ludD0nMjIwOCcvPgorICA8ZW50aXR5IG5hbWU9J2l0JyBjb2RlcG9pbnQ9JzIwNjInLz4KKyAgPGVudGl0eSBuYW1lPSdJdGlsZGUnIGNvZGVwb2ludD0nMDEyOCcvPgorICA8ZW50aXR5IG5hbWU9J2l0aWxkZScgY29kZXBvaW50PScwMTI5Jy8+CisgIDxlbnRpdHkgbmFtZT0nSXVrY3knIGNvZGVwb2ludD0nMDQwNicvPgorICA8ZW50aXR5IG5hbWU9J2l1a2N5JyBjb2RlcG9pbnQ9JzA0NTYnLz4KKyAgPGVudGl0eSBuYW1lPSdJdW1sJyBjb2RlcG9pbnQ9JzAwQ0YnLz4KKyAgPGVudGl0eSBuYW1lPSdpdW1sJyBjb2RlcG9pbnQ9JzAwRUYnLz4KKyAgPGVudGl0eSBuYW1lPSdKY2lyYycgY29kZXBvaW50PScwMTM0Jy8+CisgIDxlbnRpdHkgbmFtZT0namNpcmMnIGNvZGVwb2ludD0nMDEzNScvPgorICA8ZW50aXR5IG5hbWU9J0pjeScgY29kZXBvaW50PScwNDE5Jy8+CisgIDxlbnRpdHkgbmFtZT0namN5JyBjb2RlcG9pbnQ9JzA0MzknLz4KKyAgPGVudGl0eSBuYW1lPSdKZnInIGNvZGVwb2ludD0nMUQ1MEQnLz4KKyAgPGVudGl0eSBuYW1lPSdqZnInIGNvZGVwb2ludD0nMUQ1MjcnLz4KKyAgPGVudGl0eSBuYW1lPSdqbWF0aCcgY29kZXBvaW50PScwMjM3Jy8+CisgIDxlbnRpdHkgbmFtZT0nSm9wZicgY29kZXBvaW50PScxRDU0MScvPgorICA8ZW50aXR5IG5hbWU9J2pvcGYnIGNvZGVwb2ludD0nMUQ1NUInLz4KKyAgPGVudGl0eSBuYW1lPSdKc2NyJyBjb2RlcG9pbnQ9JzFENEE1Jy8+CisgIDxlbnRpdHkgbmFtZT0nanNjcicgY29kZXBvaW50PScxRDRCRicvPgorICA8ZW50aXR5IG5hbWU9J0pzZXJjeScgY29kZXBvaW50PScwNDA4Jy8+CisgIDxlbnRpdHkgbmFtZT0nanNlcmN5JyBjb2RlcG9pbnQ9JzA0NTgnLz4KKyAgPGVudGl0eSBuYW1lPSdKdWtjeScgY29kZXBvaW50PScwNDA0Jy8+CisgIDxlbnRpdHkgbmFtZT0nanVrY3knIGNvZGVwb2ludD0nMDQ1NCcvPgorICA8ZW50aXR5IG5hbWU9J0thcHBhJyBjb2RlcG9pbnQ9JzAzOUEnLz4KKyAgPGVudGl0eSBuYW1lPSdrYXBwYScgY29kZXBvaW50PScwM0JBJy8+CisgIDxlbnRpdHkgbmFtZT0na2FwcGF2JyBjb2RlcG9pbnQ9JzAzRjAnLz4KKyAgPGVudGl0eSBuYW1lPSdLY2VkaWwnIGNvZGVwb2ludD0nMDEzNicvPgorICA8ZW50aXR5IG5hbWU9J2tjZWRpbCcgY29kZXBvaW50PScwMTM3Jy8+CisgIDxlbnRpdHkgbmFtZT0nS2N5JyBjb2RlcG9pbnQ9JzA0MUEnLz4KKyAgPGVudGl0eSBuYW1lPSdrY3knIGNvZGVwb2ludD0nMDQzQScvPgorICA8ZW50aXR5IG5hbWU9J0tmcicgY29kZXBvaW50PScxRDUwRScvPgorICA8ZW50aXR5IG5hbWU9J2tmcicgY29kZXBvaW50PScxRDUyOCcvPgorICA8ZW50aXR5IG5hbWU9J0tncicgY29kZXBvaW50PScwMzlBJy8+CisgIDxlbnRpdHkgbmFtZT0na2dyJyBjb2RlcG9pbnQ9JzAzQkEnLz4KKyAgPGVudGl0eSBuYW1lPSdrZ3JlZW4nIGNvZGVwb2ludD0nMDEzOCcvPgorICA8ZW50aXR5IG5hbWU9J0tIY3knIGNvZGVwb2ludD0nMDQyNScvPgorICA8ZW50aXR5IG5hbWU9J2toY3knIGNvZGVwb2ludD0nMDQ0NScvPgorICA8ZW50aXR5IG5hbWU9J0tIZ3InIGNvZGVwb2ludD0nMDNBNycvPgorICA8ZW50aXR5IG5hbWU9J2toZ3InIGNvZGVwb2ludD0nMDNDNycvPgorICA8ZW50aXR5IG5hbWU9J0tKY3knIGNvZGVwb2ludD0nMDQwQycvPgorICA8ZW50aXR5IG5hbWU9J2tqY3knIGNvZGVwb2ludD0nMDQ1QycvPgorICA8ZW50aXR5IG5hbWU9J0tvcGYnIGNvZGVwb2ludD0nMUQ1NDInLz4KKyAgPGVudGl0eSBuYW1lPSdrb3BmJyBjb2RlcG9pbnQ9JzFENTVDJy8+CisgIDxlbnRpdHkgbmFtZT0nS3NjcicgY29kZXBvaW50PScxRDRBNicvPgorICA8ZW50aXR5IG5hbWU9J2tzY3InIGNvZGVwb2ludD0nMUQ0QzAnLz4KKyAgPGVudGl0eSBuYW1lPSdsQWFycicgY29kZXBvaW50PScyMURBJy8+CisgIDxlbnRpdHkgbmFtZT0nTGFjdXRlJyBjb2RlcG9pbnQ9JzAxMzknLz4KKyAgPGVudGl0eSBuYW1lPSdsYWN1dGUnIGNvZGVwb2ludD0nMDEzQScvPgorICA8ZW50aXR5IG5hbWU9J2xhZW1wdHl2JyBjb2RlcG9pbnQ9JzI5QjQnLz4KKyAgPGVudGl0eSBuYW1lPSdsYWdyYW4nIGNvZGVwb2ludD0nMjExMicvPgorICA8ZW50aXR5IG5hbWU9J0xhbWJkYScgY29kZXBvaW50PScwMzlCJy8+CisgIDxlbnRpdHkgbmFtZT0nbGFtYmRhJyBjb2RlcG9pbnQ9JzAzQkInLz4KKyAgPGVudGl0eSBuYW1lPSdsYW5nJyBjb2RlcG9pbnQ9JzIzMjknLz4KKyAgPGVudGl0eSBuYW1lPSdMYW5nJyBjb2RlcG9pbnQ9JzI3RUEnLz4KKyAgPGVudGl0eSBuYW1lPSdsYW5nZCcgY29kZXBvaW50PScyOTkxJy8+CisgIDxlbnRpdHkgbmFtZT0nbGFuZ2xlJyBjb2RlcG9pbnQ9JzIzMjknLz4KKyAgPGVudGl0eSBuYW1lPSdsYXAnIGNvZGVwb2ludD0nMkE4NScvPgorICA8ZW50aXR5IG5hbWU9J0xhcGxhY2V0cmYnIGNvZGVwb2ludD0nMjExMicvPgorICA8ZW50aXR5IG5hbWU9J2xhcXVvJyBjb2RlcG9pbnQ9JzAwQUInLz4KKyAgPGVudGl0eSBuYW1lPSdsYXJyJyBjb2RlcG9pbnQ9JzIxOTAnLz4KKyAgPGVudGl0eSBuYW1lPSdMYXJyJyBjb2RlcG9pbnQ9JzIxOUUnLz4KKyAgPGVudGl0eSBuYW1lPSdsQXJyJyBjb2RlcG9pbnQ9JzIxRDAnLz4KKyAgPGVudGl0eSBuYW1lPSdsYXJyYicgY29kZXBvaW50PScyMUU0Jy8+CisgIDxlbnRpdHkgbmFtZT0nbGFycmJmcycgY29kZXBvaW50PScyOTFGJy8+CisgIDxlbnRpdHkgbmFtZT0nbGFycmZzJyBjb2RlcG9pbnQ9JzI5MUQnLz4KKyAgPGVudGl0eSBuYW1lPSdsYXJyaGsnIGNvZGVwb2ludD0nMjFBOScvPgorICA8ZW50aXR5IG5hbWU9J2xhcnJscCcgY29kZXBvaW50PScyMUFCJy8+CisgIDxlbnRpdHkgbmFtZT0nbGFycnBsJyBjb2RlcG9pbnQ9JzI5MzknLz4KKyAgPGVudGl0eSBuYW1lPSdsYXJyc2ltJyBjb2RlcG9pbnQ9JzI5NzMnLz4KKyAgPGVudGl0eSBuYW1lPSdsYXJydGwnIGNvZGVwb2ludD0nMjFBMicvPgorICA8ZW50aXR5IG5hbWU9J2xhdCcgY29kZXBvaW50PScyQUFCJy8+CisgIDxlbnRpdHkgbmFtZT0nbGF0YWlsJyBjb2RlcG9pbnQ9JzI5MTknLz4KKyAgPGVudGl0eSBuYW1lPSdsQXRhaWwnIGNvZGVwb2ludD0nMjkxQicvPgorICA8ZW50aXR5IG5hbWU9J2xhdGUnIGNvZGVwb2ludD0nMkFBRCcvPgorICA8ZW50aXR5IG5hbWU9J2xiYXJyJyBjb2RlcG9pbnQ9JzI5MEMnLz4KKyAgPGVudGl0eSBuYW1lPSdsQmFycicgY29kZXBvaW50PScyOTBFJy8+CisgIDxlbnRpdHkgbmFtZT0nbGJicmsnIGNvZGVwb2ludD0nMjk5NycvPgorICA8ZW50aXR5IG5hbWU9J2xicmFjZScgY29kZXBvaW50PScwMDdCJy8+CisgIDxlbnRpdHkgbmFtZT0nbGJyYWNrJyBjb2RlcG9pbnQ9JzAwNUInLz4KKyAgPGVudGl0eSBuYW1lPSdsYnJrZScgY29kZXBvaW50PScyOThCJy8+CisgIDxlbnRpdHkgbmFtZT0nbGJya3NsZCcgY29kZXBvaW50PScyOThGJy8+CisgIDxlbnRpdHkgbmFtZT0nbGJya3NsdScgY29kZXBvaW50PScyOThEJy8+CisgIDxlbnRpdHkgbmFtZT0nTGNhcm9uJyBjb2RlcG9pbnQ9JzAxM0QnLz4KKyAgPGVudGl0eSBuYW1lPSdsY2Fyb24nIGNvZGVwb2ludD0nMDEzRScvPgorICA8ZW50aXR5IG5hbWU9J0xjZWRpbCcgY29kZXBvaW50PScwMTNCJy8+CisgIDxlbnRpdHkgbmFtZT0nbGNlZGlsJyBjb2RlcG9pbnQ9JzAxM0MnLz4KKyAgPGVudGl0eSBuYW1lPSdsY2VpbCcgY29kZXBvaW50PScyMzA4Jy8+CisgIDxlbnRpdHkgbmFtZT0nbGN1YicgY29kZXBvaW50PScwMDdCJy8+CisgIDxlbnRpdHkgbmFtZT0nTGN5JyBjb2RlcG9pbnQ9JzA0MUInLz4KKyAgPGVudGl0eSBuYW1lPSdsY3knIGNvZGVwb2ludD0nMDQzQicvPgorICA8ZW50aXR5IG5hbWU9J2xkY2EnIGNvZGVwb2ludD0nMjkzNicvPgorICA8ZW50aXR5IG5hbWU9J2xkcXVvJyBjb2RlcG9pbnQ9JzIwMUMnLz4KKyAgPGVudGl0eSBuYW1lPSdsZHF1b3InIGNvZGVwb2ludD0nMjAxRScvPgorICA8ZW50aXR5IG5hbWU9J2xkcmRoYXInIGNvZGVwb2ludD0nMjk2NycvPgorICA8ZW50aXR5IG5hbWU9J2xkcnVzaGFyJyBjb2RlcG9pbnQ9JzI5NEInLz4KKyAgPGVudGl0eSBuYW1lPSdsZHNoJyBjb2RlcG9pbnQ9JzIxQjInLz4KKyAgPGVudGl0eSBuYW1lPSdsZScgY29kZXBvaW50PScyMjY0Jy8+CisgIDxlbnRpdHkgbmFtZT0nbEUnIGNvZGVwb2ludD0nMjI2NicvPgorICA8ZW50aXR5IG5hbWU9J0xlZnRBbmdsZUJyYWNrZXQnIGNvZGVwb2ludD0nMjMyOScvPgorICA8ZW50aXR5IG5hbWU9J2xlZnRhcnJvdycgY29kZXBvaW50PScyMTkwJy8+CisgIDxlbnRpdHkgbmFtZT0nTGVmdGFycm93JyBjb2RlcG9pbnQ9JzIxRDAnLz4KKyAgPGVudGl0eSBuYW1lPSdMZWZ0QXJyb3dCYXInIGNvZGVwb2ludD0nMjFFNCcvPgorICA8ZW50aXR5IG5hbWU9J0xlZnRBcnJvd1JpZ2h0QXJyb3cnIGNvZGVwb2ludD0nMjFDNicvPgorICA8ZW50aXR5IG5hbWU9J2xlZnRhcnJvd3RhaWwnIGNvZGVwb2ludD0nMjFBMicvPgorICA8ZW50aXR5IG5hbWU9J0xlZnRDZWlsaW5nJyBjb2RlcG9pbnQ9JzIzMDgnLz4KKyAgPGVudGl0eSBuYW1lPSdMZWZ0RG91YmxlQnJhY2tldCcgY29kZXBvaW50PScyN0U2Jy8+CisgIDxlbnRpdHkgbmFtZT0nTGVmdERvd25UZWVWZWN0b3InIGNvZGVwb2ludD0nMjk2MScvPgorICA8ZW50aXR5IG5hbWU9J0xlZnREb3duVmVjdG9yJyBjb2RlcG9pbnQ9JzIxQzMnLz4KKyAgPGVudGl0eSBuYW1lPSdMZWZ0RG93blZlY3RvckJhcicgY29kZXBvaW50PScyOTU5Jy8+CisgIDxlbnRpdHkgbmFtZT0nTGVmdEZsb29yJyBjb2RlcG9pbnQ9JzIzMEEnLz4KKyAgPGVudGl0eSBuYW1lPSdsZWZ0aGFycG9vbmRvd24nIGNvZGVwb2ludD0nMjFCRCcvPgorICA8ZW50aXR5IG5hbWU9J2xlZnRoYXJwb29udXAnIGNvZGVwb2ludD0nMjFCQycvPgorICA8ZW50aXR5IG5hbWU9J2xlZnRsZWZ0YXJyb3dzJyBjb2RlcG9pbnQ9JzIxQzcnLz4KKyAgPGVudGl0eSBuYW1lPSdsZWZ0cmlnaHRhcnJvdycgY29kZXBvaW50PScyMTk0Jy8+CisgIDxlbnRpdHkgbmFtZT0nTGVmdHJpZ2h0YXJyb3cnIGNvZGVwb2ludD0nMjFENCcvPgorICA8ZW50aXR5IG5hbWU9J2xlZnRyaWdodGFycm93cycgY29kZXBvaW50PScyMUM2Jy8+CisgIDxlbnRpdHkgbmFtZT0nbGVmdHJpZ2h0aGFycG9vbnMnIGNvZGVwb2ludD0nMjFDQicvPgorICA8ZW50aXR5IG5hbWU9J2xlZnRyaWdodHNxdWlnYXJyb3cnIGNvZGVwb2ludD0nMjFBRCcvPgorICA8ZW50aXR5IG5hbWU9J0xlZnRSaWdodFZlY3RvcicgY29kZXBvaW50PScyOTRFJy8+CisgIDxlbnRpdHkgbmFtZT0nTGVmdFRlZScgY29kZXBvaW50PScyMkEzJy8+CisgIDxlbnRpdHkgbmFtZT0nTGVmdFRlZUFycm93JyBjb2RlcG9pbnQ9JzIxQTQnLz4KKyAgPGVudGl0eSBuYW1lPSdMZWZ0VGVlVmVjdG9yJyBjb2RlcG9pbnQ9JzI5NUEnLz4KKyAgPGVudGl0eSBuYW1lPSdsZWZ0dGhyZWV0aW1lcycgY29kZXBvaW50PScyMkNCJy8+CisgIDxlbnRpdHkgbmFtZT0nTGVmdFRyaWFuZ2xlJyBjb2RlcG9pbnQ9JzIyQjInLz4KKyAgPGVudGl0eSBuYW1lPSdMZWZ0VHJpYW5nbGVCYXInIGNvZGVwb2ludD0nMjlDRicvPgorICA8ZW50aXR5IG5hbWU9J0xlZnRUcmlhbmdsZUVxdWFsJyBjb2RlcG9pbnQ9JzIyQjQnLz4KKyAgPGVudGl0eSBuYW1lPSdMZWZ0VXBEb3duVmVjdG9yJyBjb2RlcG9pbnQ9JzI5NTEnLz4KKyAgPGVudGl0eSBuYW1lPSdMZWZ0VXBUZWVWZWN0b3InIGNvZGVwb2ludD0nMjk2MCcvPgorICA8ZW50aXR5IG5hbWU9J0xlZnRVcFZlY3RvcicgY29kZXBvaW50PScyMUJGJy8+CisgIDxlbnRpdHkgbmFtZT0nTGVmdFVwVmVjdG9yQmFyJyBjb2RlcG9pbnQ9JzI5NTgnLz4KKyAgPGVudGl0eSBuYW1lPSdMZWZ0VmVjdG9yJyBjb2RlcG9pbnQ9JzIxQkMnLz4KKyAgPGVudGl0eSBuYW1lPSdMZWZ0VmVjdG9yQmFyJyBjb2RlcG9pbnQ9JzI5NTInLz4KKyAgPGVudGl0eSBuYW1lPSdsZWcnIGNvZGVwb2ludD0nMjJEQScvPgorICA8ZW50aXR5IG5hbWU9J2xFZycgY29kZXBvaW50PScyQThCJy8+CisgIDxlbnRpdHkgbmFtZT0nbGVxJyBjb2RlcG9pbnQ9JzIyNjQnLz4KKyAgPGVudGl0eSBuYW1lPSdsZXFxJyBjb2RlcG9pbnQ9JzIyNjYnLz4KKyAgPGVudGl0eSBuYW1lPSdsZXFzbGFudCcgY29kZXBvaW50PScyQTdEJy8+CisgIDxlbnRpdHkgbmFtZT0nbGVzJyBjb2RlcG9pbnQ9JzJBN0QnLz4KKyAgPGVudGl0eSBuYW1lPSdsZXNjYycgY29kZXBvaW50PScyQUE4Jy8+CisgIDxlbnRpdHkgbmFtZT0nbGVzZG90JyBjb2RlcG9pbnQ9JzJBN0YnLz4KKyAgPGVudGl0eSBuYW1lPSdsZXNkb3RvJyBjb2RlcG9pbnQ9JzJBODEnLz4KKyAgPGVudGl0eSBuYW1lPSdsZXNkb3RvcicgY29kZXBvaW50PScyQTgzJy8+CisgIDxlbnRpdHkgbmFtZT0nbGVzZ2VzJyBjb2RlcG9pbnQ9JzJBOTMnLz4KKyAgPGVudGl0eSBuYW1lPSdsZXNzYXBwcm94JyBjb2RlcG9pbnQ9JzJBODUnLz4KKyAgPGVudGl0eSBuYW1lPSdsZXNzZG90JyBjb2RlcG9pbnQ9JzIyRDYnLz4KKyAgPGVudGl0eSBuYW1lPSdsZXNzZXFndHInIGNvZGVwb2ludD0nMjJEQScvPgorICA8ZW50aXR5IG5hbWU9J2xlc3NlcXFndHInIGNvZGVwb2ludD0nMkE4QicvPgorICA8ZW50aXR5IG5hbWU9J0xlc3NFcXVhbEdyZWF0ZXInIGNvZGVwb2ludD0nMjJEQScvPgorICA8ZW50aXR5IG5hbWU9J0xlc3NGdWxsRXF1YWwnIGNvZGVwb2ludD0nMjI2NicvPgorICA8ZW50aXR5IG5hbWU9J0xlc3NHcmVhdGVyJyBjb2RlcG9pbnQ9JzIyNzYnLz4KKyAgPGVudGl0eSBuYW1lPSdsZXNzZ3RyJyBjb2RlcG9pbnQ9JzIyNzYnLz4KKyAgPGVudGl0eSBuYW1lPSdMZXNzTGVzcycgY29kZXBvaW50PScyQUExJy8+CisgIDxlbnRpdHkgbmFtZT0nbGVzc3NpbScgY29kZXBvaW50PScyMjcyJy8+CisgIDxlbnRpdHkgbmFtZT0nTGVzc1NsYW50RXF1YWwnIGNvZGVwb2ludD0nMkE3RCcvPgorICA8ZW50aXR5IG5hbWU9J0xlc3NUaWxkZScgY29kZXBvaW50PScyMjcyJy8+CisgIDxlbnRpdHkgbmFtZT0nbGZpc2h0JyBjb2RlcG9pbnQ9JzI5N0MnLz4KKyAgPGVudGl0eSBuYW1lPSdsZmxvb3InIGNvZGVwb2ludD0nMjMwQScvPgorICA8ZW50aXR5IG5hbWU9J0xmcicgY29kZXBvaW50PScxRDUwRicvPgorICA8ZW50aXR5IG5hbWU9J2xmcicgY29kZXBvaW50PScxRDUyOScvPgorICA8ZW50aXR5IG5hbWU9J2xnJyBjb2RlcG9pbnQ9JzIyNzYnLz4KKyAgPGVudGl0eSBuYW1lPSdsZ0UnIGNvZGVwb2ludD0nMkE5MScvPgorICA8ZW50aXR5IG5hbWU9J0xncicgY29kZXBvaW50PScwMzlCJy8+CisgIDxlbnRpdHkgbmFtZT0nbGdyJyBjb2RlcG9pbnQ9JzAzQkInLz4KKyAgPGVudGl0eSBuYW1lPSdsSGFyJyBjb2RlcG9pbnQ9JzI5NjInLz4KKyAgPGVudGl0eSBuYW1lPSdsaGFyZCcgY29kZXBvaW50PScyMUJEJy8+CisgIDxlbnRpdHkgbmFtZT0nbGhhcnUnIGNvZGVwb2ludD0nMjFCQycvPgorICA8ZW50aXR5IG5hbWU9J2xoYXJ1bCcgY29kZXBvaW50PScyOTZBJy8+CisgIDxlbnRpdHkgbmFtZT0nbGhibGsnIGNvZGVwb2ludD0nMjU4NCcvPgorICA8ZW50aXR5IG5hbWU9J0xKY3knIGNvZGVwb2ludD0nMDQwOScvPgorICA8ZW50aXR5IG5hbWU9J2xqY3knIGNvZGVwb2ludD0nMDQ1OScvPgorICA8ZW50aXR5IG5hbWU9J2xsJyBjb2RlcG9pbnQ9JzIyNkEnLz4KKyAgPGVudGl0eSBuYW1lPSdMbCcgY29kZXBvaW50PScyMkQ4Jy8+CisgIDxlbnRpdHkgbmFtZT0nbGxhcnInIGNvZGVwb2ludD0nMjFDNycvPgorICA8ZW50aXR5IG5hbWU9J2xsY29ybmVyJyBjb2RlcG9pbnQ9JzIzMUUnLz4KKyAgPGVudGl0eSBuYW1lPSdMbGVmdGFycm93JyBjb2RlcG9pbnQ9JzIxREEnLz4KKyAgPGVudGl0eSBuYW1lPSdsbGhhcmQnIGNvZGVwb2ludD0nMjk2QicvPgorICA8ZW50aXR5IG5hbWU9J2xsdHJpJyBjb2RlcG9pbnQ9JzI1RkEnLz4KKyAgPGVudGl0eSBuYW1lPSdMbWlkb3QnIGNvZGVwb2ludD0nMDEzRicvPgorICA8ZW50aXR5IG5hbWU9J2xtaWRvdCcgY29kZXBvaW50PScwMTQwJy8+CisgIDxlbnRpdHkgbmFtZT0nbG1vdXN0JyBjb2RlcG9pbnQ9JzIzQjAnLz4KKyAgPGVudGl0eSBuYW1lPSdsbW91c3RhY2hlJyBjb2RlcG9pbnQ9JzIzQjAnLz4KKyAgPGVudGl0eSBuYW1lPSdsbmFwJyBjb2RlcG9pbnQ9JzJBODknLz4KKyAgPGVudGl0eSBuYW1lPSdsbmFwcHJveCcgY29kZXBvaW50PScyQTg5Jy8+CisgIDxlbnRpdHkgbmFtZT0nbG5FJyBjb2RlcG9pbnQ9JzIyNjgnLz4KKyAgPGVudGl0eSBuYW1lPSdsbmUnIGNvZGVwb2ludD0nMkE4NycvPgorICA8ZW50aXR5IG5hbWU9J2xuZXEnIGNvZGVwb2ludD0nMkE4NycvPgorICA8ZW50aXR5IG5hbWU9J2xuZXFxJyBjb2RlcG9pbnQ9JzIyNjgnLz4KKyAgPGVudGl0eSBuYW1lPSdsbnNpbScgY29kZXBvaW50PScyMkU2Jy8+CisgIDxlbnRpdHkgbmFtZT0nbG9hbmcnIGNvZGVwb2ludD0nMjdFQycvPgorICA8ZW50aXR5IG5hbWU9J2xvYXJyJyBjb2RlcG9pbnQ9JzIxRkQnLz4KKyAgPGVudGl0eSBuYW1lPSdsb2JyaycgY29kZXBvaW50PScyN0U2Jy8+CisgIDxlbnRpdHkgbmFtZT0nbG9uZ2xlZnRhcnJvdycgY29kZXBvaW50PScyN0Y1Jy8+CisgIDxlbnRpdHkgbmFtZT0nTG9uZ2xlZnRhcnJvdycgY29kZXBvaW50PScyN0Y4Jy8+CisgIDxlbnRpdHkgbmFtZT0nbG9uZ2xlZnRyaWdodGFycm93JyBjb2RlcG9pbnQ9JzI3RjcnLz4KKyAgPGVudGl0eSBuYW1lPSdMb25nbGVmdHJpZ2h0YXJyb3cnIGNvZGVwb2ludD0nMjdGQScvPgorICA8ZW50aXR5IG5hbWU9J2xvbmdtYXBzdG8nIGNvZGVwb2ludD0nMjdGQycvPgorICA8ZW50aXR5IG5hbWU9J2xvbmdyaWdodGFycm93JyBjb2RlcG9pbnQ9JzI3RjYnLz4KKyAgPGVudGl0eSBuYW1lPSdMb25ncmlnaHRhcnJvdycgY29kZXBvaW50PScyN0Y5Jy8+CisgIDxlbnRpdHkgbmFtZT0nbG9vcGFycm93bGVmdCcgY29kZXBvaW50PScyMUFCJy8+CisgIDxlbnRpdHkgbmFtZT0nbG9vcGFycm93cmlnaHQnIGNvZGVwb2ludD0nMjFBQycvPgorICA8ZW50aXR5IG5hbWU9J2xvcGFyJyBjb2RlcG9pbnQ9JzI5ODUnLz4KKyAgPGVudGl0eSBuYW1lPSdMb3BmJyBjb2RlcG9pbnQ9JzFENTQzJy8+CisgIDxlbnRpdHkgbmFtZT0nbG9wZicgY29kZXBvaW50PScxRDU1RCcvPgorICA8ZW50aXR5IG5hbWU9J2xvcGx1cycgY29kZXBvaW50PScyQTJEJy8+CisgIDxlbnRpdHkgbmFtZT0nbG90aW1lcycgY29kZXBvaW50PScyQTM0Jy8+CisgIDxlbnRpdHkgbmFtZT0nbG93YXN0JyBjb2RlcG9pbnQ9JzIyMTcnLz4KKyAgPGVudGl0eSBuYW1lPSdsb3diYXInIGNvZGVwb2ludD0nMDA1RicvPgorICA8ZW50aXR5IG5hbWU9J0xvd2VyTGVmdEFycm93JyBjb2RlcG9pbnQ9JzIxOTknLz4KKyAgPGVudGl0eSBuYW1lPSdMb3dlclJpZ2h0QXJyb3cnIGNvZGVwb2ludD0nMjE5OCcvPgorICA8ZW50aXR5IG5hbWU9J2xveicgY29kZXBvaW50PScyNUNBJy8+CisgIDxlbnRpdHkgbmFtZT0nbG96ZW5nZScgY29kZXBvaW50PScyNUNBJy8+CisgIDxlbnRpdHkgbmFtZT0nbG96ZicgY29kZXBvaW50PScyOUVCJy8+CisgIDxlbnRpdHkgbmFtZT0nbHBhcicgY29kZXBvaW50PScwMDI4Jy8+CisgIDxlbnRpdHkgbmFtZT0nbHBhcmx0JyBjb2RlcG9pbnQ9JzI5OTMnLz4KKyAgPGVudGl0eSBuYW1lPSdscmFycicgY29kZXBvaW50PScyMUM2Jy8+CisgIDxlbnRpdHkgbmFtZT0nbHJjb3JuZXInIGNvZGVwb2ludD0nMjMxRicvPgorICA8ZW50aXR5IG5hbWU9J2xyaGFyJyBjb2RlcG9pbnQ9JzIxQ0InLz4KKyAgPGVudGl0eSBuYW1lPSdscmhhcmQnIGNvZGVwb2ludD0nMjk2RCcvPgorICA8ZW50aXR5IG5hbWU9J2xybScgY29kZXBvaW50PScyMDBFJy8+CisgIDxlbnRpdHkgbmFtZT0nbHJ0cmknIGNvZGVwb2ludD0nMjJCRicvPgorICA8ZW50aXR5IG5hbWU9J2xzYXF1bycgY29kZXBvaW50PScyMDM5Jy8+CisgIDxlbnRpdHkgbmFtZT0nTHNjcicgY29kZXBvaW50PScyMTEyJy8+CisgIDxlbnRpdHkgbmFtZT0nbHNjcicgY29kZXBvaW50PScxRDRDMScvPgorICA8ZW50aXR5IG5hbWU9J2xzaCcgY29kZXBvaW50PScyMUIwJy8+CisgIDxlbnRpdHkgbmFtZT0nbHNpbScgY29kZXBvaW50PScyMjcyJy8+CisgIDxlbnRpdHkgbmFtZT0nbHNpbWUnIGNvZGVwb2ludD0nMkE4RCcvPgorICA8ZW50aXR5IG5hbWU9J2xzaW1nJyBjb2RlcG9pbnQ9JzJBOEYnLz4KKyAgPGVudGl0eSBuYW1lPSdsc3FiJyBjb2RlcG9pbnQ9JzAwNUInLz4KKyAgPGVudGl0eSBuYW1lPSdsc3F1bycgY29kZXBvaW50PScyMDE4Jy8+CisgIDxlbnRpdHkgbmFtZT0nbHNxdW9yJyBjb2RlcG9pbnQ9JzIwMUEnLz4KKyAgPGVudGl0eSBuYW1lPSdMc3Ryb2snIGNvZGVwb2ludD0nMDE0MScvPgorICA8ZW50aXR5IG5hbWU9J2xzdHJvaycgY29kZXBvaW50PScwMTQyJy8+CisgIDxlbnRpdHkgbmFtZT0nbHQnIGNvZGVwb2ludD0nMDAzQycvPgorICA8ZW50aXR5IG5hbWU9J0x0JyBjb2RlcG9pbnQ9JzIyNkEnLz4KKyAgPGVudGl0eSBuYW1lPSdsdGNjJyBjb2RlcG9pbnQ9JzJBQTYnLz4KKyAgPGVudGl0eSBuYW1lPSdsdGNpcicgY29kZXBvaW50PScyQTc5Jy8+CisgIDxlbnRpdHkgbmFtZT0nbHRkb3QnIGNvZGVwb2ludD0nMjJENicvPgorICA8ZW50aXR5IG5hbWU9J2x0aHJlZScgY29kZXBvaW50PScyMkNCJy8+CisgIDxlbnRpdHkgbmFtZT0nbHRpbWVzJyBjb2RlcG9pbnQ9JzIyQzknLz4KKyAgPGVudGl0eSBuYW1lPSdsdGxhcnInIGNvZGVwb2ludD0nMjk3NicvPgorICA8ZW50aXR5IG5hbWU9J2x0cXVlc3QnIGNvZGVwb2ludD0nMkE3QicvPgorICA8ZW50aXR5IG5hbWU9J2x0cmknIGNvZGVwb2ludD0nMjVDMycvPgorICA8ZW50aXR5IG5hbWU9J2x0cmllJyBjb2RlcG9pbnQ9JzIyQjQnLz4KKyAgPGVudGl0eSBuYW1lPSdsdHJpZicgY29kZXBvaW50PScyNUMyJy8+CisgIDxlbnRpdHkgbmFtZT0nbHRyUGFyJyBjb2RlcG9pbnQ9JzI5OTYnLz4KKyAgPGVudGl0eSBuYW1lPSdsdXJkc2hhcicgY29kZXBvaW50PScyOTRBJy8+CisgIDxlbnRpdHkgbmFtZT0nbHVydWhhcicgY29kZXBvaW50PScyOTY2Jy8+CisgIDxlbnRpdHkgbmFtZT0nbWFjcicgY29kZXBvaW50PScwMEFGJy8+CisgIDxlbnRpdHkgbmFtZT0nbWFsZScgY29kZXBvaW50PScyNjQyJy8+CisgIDxlbnRpdHkgbmFtZT0nbWFsdCcgY29kZXBvaW50PScyNzIwJy8+CisgIDxlbnRpdHkgbmFtZT0nbWFsdGVzZScgY29kZXBvaW50PScyNzIwJy8+CisgIDxlbnRpdHkgbmFtZT0nbWFwJyBjb2RlcG9pbnQ9JzIxQTYnLz4KKyAgPGVudGl0eSBuYW1lPSdNYXAnIGNvZGVwb2ludD0nMjkwNScvPgorICA8ZW50aXR5IG5hbWU9J21hcHN0bycgY29kZXBvaW50PScyMUE2Jy8+CisgIDxlbnRpdHkgbmFtZT0nbWFwc3RvZG93bicgY29kZXBvaW50PScyMUE3Jy8+CisgIDxlbnRpdHkgbmFtZT0nbWFwc3RvbGVmdCcgY29kZXBvaW50PScyMUE0Jy8+CisgIDxlbnRpdHkgbmFtZT0nbWFwc3RvdXAnIGNvZGVwb2ludD0nMjFBNScvPgorICA8ZW50aXR5IG5hbWU9J21hcmtlcicgY29kZXBvaW50PScyNUFFJy8+CisgIDxlbnRpdHkgbmFtZT0nbWNvbW1hJyBjb2RlcG9pbnQ9JzJBMjknLz4KKyAgPGVudGl0eSBuYW1lPSdNY3knIGNvZGVwb2ludD0nMDQxQycvPgorICA8ZW50aXR5IG5hbWU9J21jeScgY29kZXBvaW50PScwNDNDJy8+CisgIDxlbnRpdHkgbmFtZT0nbWRhc2gnIGNvZGVwb2ludD0nMjAxNCcvPgorICA8ZW50aXR5IG5hbWU9J21ERG90JyBjb2RlcG9pbnQ9JzIyM0EnLz4KKyAgPGVudGl0eSBuYW1lPSdtZWFzdXJlZGFuZ2xlJyBjb2RlcG9pbnQ9JzIyMjEnLz4KKyAgPGVudGl0eSBuYW1lPSdNZWRpdW1TcGFjZScgY29kZXBvaW50PScyMDVGJy8+CisgIDxlbnRpdHkgbmFtZT0nTWVsbGludHJmJyBjb2RlcG9pbnQ9JzIxMzMnLz4KKyAgPGVudGl0eSBuYW1lPSdNZnInIGNvZGVwb2ludD0nMUQ1MTAnLz4KKyAgPGVudGl0eSBuYW1lPSdtZnInIGNvZGVwb2ludD0nMUQ1MkEnLz4KKyAgPGVudGl0eSBuYW1lPSdNZ3InIGNvZGVwb2ludD0nMDM5QycvPgorICA8ZW50aXR5IG5hbWU9J21ncicgY29kZXBvaW50PScwM0JDJy8+CisgIDxlbnRpdHkgbmFtZT0nbWhvJyBjb2RlcG9pbnQ9JzIxMjcnLz4KKyAgPGVudGl0eSBuYW1lPSdtaWNybycgY29kZXBvaW50PScwMEI1Jy8+CisgIDxlbnRpdHkgbmFtZT0nbWlkJyBjb2RlcG9pbnQ9JzIyMjMnLz4KKyAgPGVudGl0eSBuYW1lPSdtaWRhc3QnIGNvZGVwb2ludD0nMDAyQScvPgorICA8ZW50aXR5IG5hbWU9J21pZGNpcicgY29kZXBvaW50PScyQUYwJy8+CisgIDxlbnRpdHkgbmFtZT0nbWlkZG90JyBjb2RlcG9pbnQ9JzAwQjcnLz4KKyAgPGVudGl0eSBuYW1lPSdtaW51cycgY29kZXBvaW50PScyMjEyJy8+CisgIDxlbnRpdHkgbmFtZT0nbWludXNiJyBjb2RlcG9pbnQ9JzIyOUYnLz4KKyAgPGVudGl0eSBuYW1lPSdtaW51c2QnIGNvZGVwb2ludD0nMjIzOCcvPgorICA8ZW50aXR5IG5hbWU9J21pbnVzZHUnIGNvZGVwb2ludD0nMkEyQScvPgorICA8ZW50aXR5IG5hbWU9J01pbnVzUGx1cycgY29kZXBvaW50PScyMjEzJy8+CisgIDxlbnRpdHkgbmFtZT0nbWxjcCcgY29kZXBvaW50PScyQURCJy8+CisgIDxlbnRpdHkgbmFtZT0nbWxkcicgY29kZXBvaW50PScyMDI2Jy8+CisgIDxlbnRpdHkgbmFtZT0nbW5wbHVzJyBjb2RlcG9pbnQ9JzIyMTMnLz4KKyAgPGVudGl0eSBuYW1lPSdtb2RlbHMnIGNvZGVwb2ludD0nMjJBNycvPgorICA8ZW50aXR5IG5hbWU9J01vcGYnIGNvZGVwb2ludD0nMUQ1NDQnLz4KKyAgPGVudGl0eSBuYW1lPSdtb3BmJyBjb2RlcG9pbnQ9JzFENTVFJy8+CisgIDxlbnRpdHkgbmFtZT0nbXAnIGNvZGVwb2ludD0nMjIxMycvPgorICA8ZW50aXR5IG5hbWU9J01zY3InIGNvZGVwb2ludD0nMjEzMycvPgorICA8ZW50aXR5IG5hbWU9J21zY3InIGNvZGVwb2ludD0nMUQ0QzInLz4KKyAgPGVudGl0eSBuYW1lPSdtc3Rwb3MnIGNvZGVwb2ludD0nMjIzRScvPgorICA8ZW50aXR5IG5hbWU9J011JyBjb2RlcG9pbnQ9JzAzOUMnLz4KKyAgPGVudGl0eSBuYW1lPSdtdScgY29kZXBvaW50PScwM0JDJy8+CisgIDxlbnRpdHkgbmFtZT0nbXVsdGltYXAnIGNvZGVwb2ludD0nMjJCOCcvPgorICA8ZW50aXR5IG5hbWU9J211bWFwJyBjb2RlcG9pbnQ9JzIyQjgnLz4KKyAgPGVudGl0eSBuYW1lPSduYWJsYScgY29kZXBvaW50PScyMjA3Jy8+CisgIDxlbnRpdHkgbmFtZT0nTmFjdXRlJyBjb2RlcG9pbnQ9JzAxNDMnLz4KKyAgPGVudGl0eSBuYW1lPSduYWN1dGUnIGNvZGVwb2ludD0nMDE0NCcvPgorICA8ZW50aXR5IG5hbWU9J25hcCcgY29kZXBvaW50PScyMjQ5Jy8+CisgIDxlbnRpdHkgbmFtZT0nbmFwb3MnIGNvZGVwb2ludD0nMDE0OScvPgorICA8ZW50aXR5IG5hbWU9J25hcHByb3gnIGNvZGVwb2ludD0nMjI0OScvPgorICA8ZW50aXR5IG5hbWU9J25hdHVyJyBjb2RlcG9pbnQ9JzI2NkUnLz4KKyAgPGVudGl0eSBuYW1lPSduYXR1cmFsJyBjb2RlcG9pbnQ9JzI2NkUnLz4KKyAgPGVudGl0eSBuYW1lPSduYXR1cmFscycgY29kZXBvaW50PScyMTE1Jy8+CisgIDxlbnRpdHkgbmFtZT0nbmJzcCcgY29kZXBvaW50PScwMEEwJy8+CisgIDxlbnRpdHkgbmFtZT0nbmNhcCcgY29kZXBvaW50PScyQTQzJy8+CisgIDxlbnRpdHkgbmFtZT0nTmNhcm9uJyBjb2RlcG9pbnQ9JzAxNDcnLz4KKyAgPGVudGl0eSBuYW1lPSduY2Fyb24nIGNvZGVwb2ludD0nMDE0OCcvPgorICA8ZW50aXR5IG5hbWU9J05jZWRpbCcgY29kZXBvaW50PScwMTQ1Jy8+CisgIDxlbnRpdHkgbmFtZT0nbmNlZGlsJyBjb2RlcG9pbnQ9JzAxNDYnLz4KKyAgPGVudGl0eSBuYW1lPSduY29uZycgY29kZXBvaW50PScyMjQ3Jy8+CisgIDxlbnRpdHkgbmFtZT0nbmN1cCcgY29kZXBvaW50PScyQTQyJy8+CisgIDxlbnRpdHkgbmFtZT0nTmN5JyBjb2RlcG9pbnQ9JzA0MUQnLz4KKyAgPGVudGl0eSBuYW1lPSduY3knIGNvZGVwb2ludD0nMDQzRCcvPgorICA8ZW50aXR5IG5hbWU9J25kYXNoJyBjb2RlcG9pbnQ9JzIwMTMnLz4KKyAgPGVudGl0eSBuYW1lPSduZScgY29kZXBvaW50PScyMjYwJy8+CisgIDxlbnRpdHkgbmFtZT0nbmVhcmhrJyBjb2RlcG9pbnQ9JzI5MjQnLz4KKyAgPGVudGl0eSBuYW1lPSduZWFycicgY29kZXBvaW50PScyMTk3Jy8+CisgIDxlbnRpdHkgbmFtZT0nbmVBcnInIGNvZGVwb2ludD0nMjFENycvPgorICA8ZW50aXR5IG5hbWU9J25lYXJyb3cnIGNvZGVwb2ludD0nMjE5NycvPgorICA8ZW50aXR5IG5hbWU9J05lZ2F0aXZlTWVkaXVtU3BhY2UnIGNvZGVwb2ludD0nMjAwQicvPgorICA8ZW50aXR5IG5hbWU9J05lZ2F0aXZlVGhpY2tTcGFjZScgY29kZXBvaW50PScyMDBCJy8+CisgIDxlbnRpdHkgbmFtZT0nTmVnYXRpdmVUaGluU3BhY2UnIGNvZGVwb2ludD0nMjAwQicvPgorICA8ZW50aXR5IG5hbWU9J05lZ2F0aXZlVmVyeVRoaW5TcGFjZScgY29kZXBvaW50PScyMDBCJy8+CisgIDxlbnRpdHkgbmFtZT0nbmVxdWl2JyBjb2RlcG9pbnQ9JzIyNjInLz4KKyAgPGVudGl0eSBuYW1lPSduZXNlYXInIGNvZGVwb2ludD0nMjkyOCcvPgorICA8ZW50aXR5IG5hbWU9J05lc3RlZEdyZWF0ZXJHcmVhdGVyJyBjb2RlcG9pbnQ9JzIyNkInLz4KKyAgPGVudGl0eSBuYW1lPSdOZXN0ZWRMZXNzTGVzcycgY29kZXBvaW50PScyMjZBJy8+CisgIDxlbnRpdHkgbmFtZT0nTmV3TGluZScgY29kZXBvaW50PScwMDBBJy8+CisgIDxlbnRpdHkgbmFtZT0nbmV4aXN0JyBjb2RlcG9pbnQ9JzIyMDQnLz4KKyAgPGVudGl0eSBuYW1lPSduZXhpc3RzJyBjb2RlcG9pbnQ9JzIyMDQnLz4KKyAgPGVudGl0eSBuYW1lPSdOZnInIGNvZGVwb2ludD0nMUQ1MTEnLz4KKyAgPGVudGl0eSBuYW1lPSduZnInIGNvZGVwb2ludD0nMUQ1MkInLz4KKyAgPGVudGl0eSBuYW1lPSduZ2UnIGNvZGVwb2ludD0nMjI3MScvPgorICA8ZW50aXR5IG5hbWU9J25nZXEnIGNvZGVwb2ludD0nMjI3MScvPgorICA8ZW50aXR5IG5hbWU9J05ncicgY29kZXBvaW50PScwMzlEJy8+CisgIDxlbnRpdHkgbmFtZT0nbmdyJyBjb2RlcG9pbnQ9JzAzQkQnLz4KKyAgPGVudGl0eSBuYW1lPSduZ3NpbScgY29kZXBvaW50PScyMjc1Jy8+CisgIDxlbnRpdHkgbmFtZT0nbmd0JyBjb2RlcG9pbnQ9JzIyNkYnLz4KKyAgPGVudGl0eSBuYW1lPSduZ3RyJyBjb2RlcG9pbnQ9JzIyNkYnLz4KKyAgPGVudGl0eSBuYW1lPSduaGFycicgY29kZXBvaW50PScyMUFFJy8+CisgIDxlbnRpdHkgbmFtZT0nbmhBcnInIGNvZGVwb2ludD0nMjFDRScvPgorICA8ZW50aXR5IG5hbWU9J25ocGFyJyBjb2RlcG9pbnQ9JzJBRjInLz4KKyAgPGVudGl0eSBuYW1lPSduaScgY29kZXBvaW50PScyMjBCJy8+CisgIDxlbnRpdHkgbmFtZT0nbmlzJyBjb2RlcG9pbnQ9JzIyRkMnLz4KKyAgPGVudGl0eSBuYW1lPSduaXNkJyBjb2RlcG9pbnQ9JzIyRkEnLz4KKyAgPGVudGl0eSBuYW1lPSduaXYnIGNvZGVwb2ludD0nMjIwQicvPgorICA8ZW50aXR5IG5hbWU9J05KY3knIGNvZGVwb2ludD0nMDQwQScvPgorICA8ZW50aXR5IG5hbWU9J25qY3knIGNvZGVwb2ludD0nMDQ1QScvPgorICA8ZW50aXR5IG5hbWU9J25sYXJyJyBjb2RlcG9pbnQ9JzIxOUEnLz4KKyAgPGVudGl0eSBuYW1lPSdubEFycicgY29kZXBvaW50PScyMUNEJy8+CisgIDxlbnRpdHkgbmFtZT0nbmxkcicgY29kZXBvaW50PScyMDI1Jy8+CisgIDxlbnRpdHkgbmFtZT0nbmxlJyBjb2RlcG9pbnQ9JzIyNzAnLz4KKyAgPGVudGl0eSBuYW1lPSdubGVmdGFycm93JyBjb2RlcG9pbnQ9JzIxOUEnLz4KKyAgPGVudGl0eSBuYW1lPSduTGVmdGFycm93JyBjb2RlcG9pbnQ9JzIxQ0QnLz4KKyAgPGVudGl0eSBuYW1lPSdubGVmdHJpZ2h0YXJyb3cnIGNvZGVwb2ludD0nMjFBRScvPgorICA8ZW50aXR5IG5hbWU9J25MZWZ0cmlnaHRhcnJvdycgY29kZXBvaW50PScyMUNFJy8+CisgIDxlbnRpdHkgbmFtZT0nbmxlcScgY29kZXBvaW50PScyMjcwJy8+CisgIDxlbnRpdHkgbmFtZT0nbmxlc3MnIGNvZGVwb2ludD0nMjI2RScvPgorICA8ZW50aXR5IG5hbWU9J25sc2ltJyBjb2RlcG9pbnQ9JzIyNzQnLz4KKyAgPGVudGl0eSBuYW1lPSdubHQnIGNvZGVwb2ludD0nMjI2RScvPgorICA8ZW50aXR5IG5hbWU9J25sdHJpJyBjb2RlcG9pbnQ9JzIyRUEnLz4KKyAgPGVudGl0eSBuYW1lPSdubHRyaWUnIGNvZGVwb2ludD0nMjJFQycvPgorICA8ZW50aXR5IG5hbWU9J25taWQnIGNvZGVwb2ludD0nMjIyNCcvPgorICA8ZW50aXR5IG5hbWU9J05vQnJlYWsnIGNvZGVwb2ludD0nMjA2MCcvPgorICA8ZW50aXR5IG5hbWU9J05vbkJyZWFraW5nU3BhY2UnIGNvZGVwb2ludD0nMDBBMCcvPgorICA8ZW50aXR5IG5hbWU9J05vcGYnIGNvZGVwb2ludD0nMjExNScvPgorICA8ZW50aXR5IG5hbWU9J25vcGYnIGNvZGVwb2ludD0nMUQ1NUYnLz4KKyAgPGVudGl0eSBuYW1lPSdub3QnIGNvZGVwb2ludD0nMDBBQycvPgorICA8ZW50aXR5IG5hbWU9J05vdCcgY29kZXBvaW50PScyQUVDJy8+CisgIDxlbnRpdHkgbmFtZT0nTm90Q29uZ3J1ZW50JyBjb2RlcG9pbnQ9JzIyNjInLz4KKyAgPGVudGl0eSBuYW1lPSdOb3RDdXBDYXAnIGNvZGVwb2ludD0nMjI2RCcvPgorICA8ZW50aXR5IG5hbWU9J05vdERvdWJsZVZlcnRpY2FsQmFyJyBjb2RlcG9pbnQ9JzIyMjYnLz4KKyAgPGVudGl0eSBuYW1lPSdOb3RFbGVtZW50JyBjb2RlcG9pbnQ9JzIyMDknLz4KKyAgPGVudGl0eSBuYW1lPSdOb3RFcXVhbCcgY29kZXBvaW50PScyMjYwJy8+CisgIDxlbnRpdHkgbmFtZT0nTm90RXhpc3RzJyBjb2RlcG9pbnQ9JzIyMDQnLz4KKyAgPGVudGl0eSBuYW1lPSdOb3RHcmVhdGVyJyBjb2RlcG9pbnQ9JzIyNkYnLz4KKyAgPGVudGl0eSBuYW1lPSdOb3RHcmVhdGVyRXF1YWwnIGNvZGVwb2ludD0nMjI3MScvPgorICA8ZW50aXR5IG5hbWU9J05vdEdyZWF0ZXJMZXNzJyBjb2RlcG9pbnQ9JzIyNzknLz4KKyAgPGVudGl0eSBuYW1lPSdOb3RHcmVhdGVyVGlsZGUnIGNvZGVwb2ludD0nMjI3NScvPgorICA8ZW50aXR5IG5hbWU9J25vdGluJyBjb2RlcG9pbnQ9JzIyMDknLz4KKyAgPGVudGl0eSBuYW1lPSdub3RpbnZhJyBjb2RlcG9pbnQ9JzIyMDknLz4KKyAgPGVudGl0eSBuYW1lPSdub3RpbnZiJyBjb2RlcG9pbnQ9JzIyRjcnLz4KKyAgPGVudGl0eSBuYW1lPSdub3RpbnZjJyBjb2RlcG9pbnQ9JzIyRjYnLz4KKyAgPGVudGl0eSBuYW1lPSdOb3RMZWZ0VHJpYW5nbGUnIGNvZGVwb2ludD0nMjJFQScvPgorICA8ZW50aXR5IG5hbWU9J05vdExlZnRUcmlhbmdsZUVxdWFsJyBjb2RlcG9pbnQ9JzIyRUMnLz4KKyAgPGVudGl0eSBuYW1lPSdOb3RMZXNzJyBjb2RlcG9pbnQ9JzIyNkUnLz4KKyAgPGVudGl0eSBuYW1lPSdOb3RMZXNzRXF1YWwnIGNvZGVwb2ludD0nMjI3MCcvPgorICA8ZW50aXR5IG5hbWU9J05vdExlc3NHcmVhdGVyJyBjb2RlcG9pbnQ9JzIyNzgnLz4KKyAgPGVudGl0eSBuYW1lPSdOb3RMZXNzVGlsZGUnIGNvZGVwb2ludD0nMjI3NCcvPgorICA8ZW50aXR5IG5hbWU9J25vdG5pJyBjb2RlcG9pbnQ9JzIyMEMnLz4KKyAgPGVudGl0eSBuYW1lPSdub3RuaXZhJyBjb2RlcG9pbnQ9JzIyMEMnLz4KKyAgPGVudGl0eSBuYW1lPSdub3RuaXZiJyBjb2RlcG9pbnQ9JzIyRkUnLz4KKyAgPGVudGl0eSBuYW1lPSdub3RuaXZjJyBjb2RlcG9pbnQ9JzIyRkQnLz4KKyAgPGVudGl0eSBuYW1lPSdOb3RQcmVjZWRlcycgY29kZXBvaW50PScyMjgwJy8+CisgIDxlbnRpdHkgbmFtZT0nTm90UHJlY2VkZXNTbGFudEVxdWFsJyBjb2RlcG9pbnQ9JzIyRTAnLz4KKyAgPGVudGl0eSBuYW1lPSdOb3RSZXZlcnNlRWxlbWVudCcgY29kZXBvaW50PScyMjBDJy8+CisgIDxlbnRpdHkgbmFtZT0nTm90UmlnaHRUcmlhbmdsZScgY29kZXBvaW50PScyMkVCJy8+CisgIDxlbnRpdHkgbmFtZT0nTm90UmlnaHRUcmlhbmdsZUVxdWFsJyBjb2RlcG9pbnQ9JzIyRUQnLz4KKyAgPGVudGl0eSBuYW1lPSdOb3RTcXVhcmVTdWJzZXRFcXVhbCcgY29kZXBvaW50PScyMkUyJy8+CisgIDxlbnRpdHkgbmFtZT0nTm90U3F1YXJlU3VwZXJzZXRFcXVhbCcgY29kZXBvaW50PScyMkUzJy8+CisgIDxlbnRpdHkgbmFtZT0nTm90U3Vic2V0RXF1YWwnIGNvZGVwb2ludD0nMjI4OCcvPgorICA8ZW50aXR5IG5hbWU9J05vdFN1Y2NlZWRzJyBjb2RlcG9pbnQ9JzIyODEnLz4KKyAgPGVudGl0eSBuYW1lPSdOb3RTdWNjZWVkc1NsYW50RXF1YWwnIGNvZGVwb2ludD0nMjJFMScvPgorICA8ZW50aXR5IG5hbWU9J05vdFN1cGVyc2V0RXF1YWwnIGNvZGVwb2ludD0nMjI4OScvPgorICA8ZW50aXR5IG5hbWU9J05vdFRpbGRlJyBjb2RlcG9pbnQ9JzIyNDEnLz4KKyAgPGVudGl0eSBuYW1lPSdOb3RUaWxkZUVxdWFsJyBjb2RlcG9pbnQ9JzIyNDQnLz4KKyAgPGVudGl0eSBuYW1lPSdOb3RUaWxkZUZ1bGxFcXVhbCcgY29kZXBvaW50PScyMjQ3Jy8+CisgIDxlbnRpdHkgbmFtZT0nTm90VGlsZGVUaWxkZScgY29kZXBvaW50PScyMjQ5Jy8+CisgIDxlbnRpdHkgbmFtZT0nTm90VmVydGljYWxCYXInIGNvZGVwb2ludD0nMjIyNCcvPgorICA8ZW50aXR5IG5hbWU9J25wYXInIGNvZGVwb2ludD0nMjIyNicvPgorICA8ZW50aXR5IG5hbWU9J25wYXJhbGxlbCcgY29kZXBvaW50PScyMjI2Jy8+CisgIDxlbnRpdHkgbmFtZT0nbnBvbGludCcgY29kZXBvaW50PScyQTE0Jy8+CisgIDxlbnRpdHkgbmFtZT0nbnByJyBjb2RlcG9pbnQ9JzIyODAnLz4KKyAgPGVudGl0eSBuYW1lPSducHJjdWUnIGNvZGVwb2ludD0nMjJFMCcvPgorICA8ZW50aXR5IG5hbWU9J25wcmVjJyBjb2RlcG9pbnQ9JzIyODAnLz4KKyAgPGVudGl0eSBuYW1lPSducmFycicgY29kZXBvaW50PScyMTlCJy8+CisgIDxlbnRpdHkgbmFtZT0nbnJBcnInIGNvZGVwb2ludD0nMjFDRicvPgorICA8ZW50aXR5IG5hbWU9J25yaWdodGFycm93JyBjb2RlcG9pbnQ9JzIxOUInLz4KKyAgPGVudGl0eSBuYW1lPSduUmlnaHRhcnJvdycgY29kZXBvaW50PScyMUNGJy8+CisgIDxlbnRpdHkgbmFtZT0nbnJ0cmknIGNvZGVwb2ludD0nMjJFQicvPgorICA8ZW50aXR5IG5hbWU9J25ydHJpZScgY29kZXBvaW50PScyMkVEJy8+CisgIDxlbnRpdHkgbmFtZT0nbnNjJyBjb2RlcG9pbnQ9JzIyODEnLz4KKyAgPGVudGl0eSBuYW1lPSduc2NjdWUnIGNvZGVwb2ludD0nMjJFMScvPgorICA8ZW50aXR5IG5hbWU9J05zY3InIGNvZGVwb2ludD0nMUQ0QTknLz4KKyAgPGVudGl0eSBuYW1lPSduc2NyJyBjb2RlcG9pbnQ9JzFENEMzJy8+CisgIDxlbnRpdHkgbmFtZT0nbnNob3J0bWlkJyBjb2RlcG9pbnQ9JzIyMjQnLz4KKyAgPGVudGl0eSBuYW1lPSduc2hvcnRwYXJhbGxlbCcgY29kZXBvaW50PScyMjI2Jy8+CisgIDxlbnRpdHkgbmFtZT0nbnNpbScgY29kZXBvaW50PScyMjQxJy8+CisgIDxlbnRpdHkgbmFtZT0nbnNpbWUnIGNvZGVwb2ludD0nMjI0NCcvPgorICA8ZW50aXR5IG5hbWU9J25zaW1lcScgY29kZXBvaW50PScyMjQ0Jy8+CisgIDxlbnRpdHkgbmFtZT0nbnNtaWQnIGNvZGVwb2ludD0nMjIyNCcvPgorICA8ZW50aXR5IG5hbWU9J25zcGFyJyBjb2RlcG9pbnQ9JzIyMjYnLz4KKyAgPGVudGl0eSBuYW1lPSduc3FzdWJlJyBjb2RlcG9pbnQ9JzIyRTInLz4KKyAgPGVudGl0eSBuYW1lPSduc3FzdXBlJyBjb2RlcG9pbnQ9JzIyRTMnLz4KKyAgPGVudGl0eSBuYW1lPSduc3ViJyBjb2RlcG9pbnQ9JzIyODQnLz4KKyAgPGVudGl0eSBuYW1lPSduc3ViZScgY29kZXBvaW50PScyMjg4Jy8+CisgIDxlbnRpdHkgbmFtZT0nbnN1YnNldGVxJyBjb2RlcG9pbnQ9JzIyODgnLz4KKyAgPGVudGl0eSBuYW1lPSduc3VjYycgY29kZXBvaW50PScyMjgxJy8+CisgIDxlbnRpdHkgbmFtZT0nbnN1cCcgY29kZXBvaW50PScyMjg1Jy8+CisgIDxlbnRpdHkgbmFtZT0nbnN1cGUnIGNvZGVwb2ludD0nMjI4OScvPgorICA8ZW50aXR5IG5hbWU9J25zdXBzZXRlcScgY29kZXBvaW50PScyMjg5Jy8+CisgIDxlbnRpdHkgbmFtZT0nbnRnbCcgY29kZXBvaW50PScyMjc5Jy8+CisgIDxlbnRpdHkgbmFtZT0nTnRpbGRlJyBjb2RlcG9pbnQ9JzAwRDEnLz4KKyAgPGVudGl0eSBuYW1lPSdudGlsZGUnIGNvZGVwb2ludD0nMDBGMScvPgorICA8ZW50aXR5IG5hbWU9J250bGcnIGNvZGVwb2ludD0nMjI3OCcvPgorICA8ZW50aXR5IG5hbWU9J250cmlhbmdsZWxlZnQnIGNvZGVwb2ludD0nMjJFQScvPgorICA8ZW50aXR5IG5hbWU9J250cmlhbmdsZWxlZnRlcScgY29kZXBvaW50PScyMkVDJy8+CisgIDxlbnRpdHkgbmFtZT0nbnRyaWFuZ2xlcmlnaHQnIGNvZGVwb2ludD0nMjJFQicvPgorICA8ZW50aXR5IG5hbWU9J250cmlhbmdsZXJpZ2h0ZXEnIGNvZGVwb2ludD0nMjJFRCcvPgorICA8ZW50aXR5IG5hbWU9J051JyBjb2RlcG9pbnQ9JzAzOUQnLz4KKyAgPGVudGl0eSBuYW1lPSdudScgY29kZXBvaW50PScwM0JEJy8+CisgIDxlbnRpdHkgbmFtZT0nbnVtJyBjb2RlcG9pbnQ9JzAwMjMnLz4KKyAgPGVudGl0eSBuYW1lPSdudW1lcm8nIGNvZGVwb2ludD0nMjExNicvPgorICA8ZW50aXR5IG5hbWU9J251bXNwJyBjb2RlcG9pbnQ9JzIwMDcnLz4KKyAgPGVudGl0eSBuYW1lPSdudmRhc2gnIGNvZGVwb2ludD0nMjJBQycvPgorICA8ZW50aXR5IG5hbWU9J252RGFzaCcgY29kZXBvaW50PScyMkFEJy8+CisgIDxlbnRpdHkgbmFtZT0nblZkYXNoJyBjb2RlcG9pbnQ9JzIyQUUnLz4KKyAgPGVudGl0eSBuYW1lPSduVkRhc2gnIGNvZGVwb2ludD0nMjJBRicvPgorICA8ZW50aXR5IG5hbWU9J252SGFycicgY29kZXBvaW50PScyOTA0Jy8+CisgIDxlbnRpdHkgbmFtZT0nbnZpbmZpbicgY29kZXBvaW50PScyOURFJy8+CisgIDxlbnRpdHkgbmFtZT0nbnZsQXJyJyBjb2RlcG9pbnQ9JzI5MDInLz4KKyAgPGVudGl0eSBuYW1lPSdudnJBcnInIGNvZGVwb2ludD0nMjkwMycvPgorICA8ZW50aXR5IG5hbWU9J253YXJoaycgY29kZXBvaW50PScyOTIzJy8+CisgIDxlbnRpdHkgbmFtZT0nbndhcnInIGNvZGVwb2ludD0nMjE5NicvPgorICA8ZW50aXR5IG5hbWU9J253QXJyJyBjb2RlcG9pbnQ9JzIxRDYnLz4KKyAgPGVudGl0eSBuYW1lPSdud2Fycm93JyBjb2RlcG9pbnQ9JzIxOTYnLz4KKyAgPGVudGl0eSBuYW1lPSdud25lYXInIGNvZGVwb2ludD0nMjkyNycvPgorICA8ZW50aXR5IG5hbWU9J09hY2dyJyBjb2RlcG9pbnQ9JzAzOEMnLz4KKyAgPGVudGl0eSBuYW1lPSdvYWNncicgY29kZXBvaW50PScwM0NDJy8+CisgIDxlbnRpdHkgbmFtZT0nT2FjdXRlJyBjb2RlcG9pbnQ9JzAwRDMnLz4KKyAgPGVudGl0eSBuYW1lPSdvYWN1dGUnIGNvZGVwb2ludD0nMDBGMycvPgorICA8ZW50aXR5IG5hbWU9J29hc3QnIGNvZGVwb2ludD0nMjI5QicvPgorICA8ZW50aXR5IG5hbWU9J29jaXInIGNvZGVwb2ludD0nMjI5QScvPgorICA8ZW50aXR5IG5hbWU9J09jaXJjJyBjb2RlcG9pbnQ9JzAwRDQnLz4KKyAgPGVudGl0eSBuYW1lPSdvY2lyYycgY29kZXBvaW50PScwMEY0Jy8+CisgIDxlbnRpdHkgbmFtZT0nT2N5JyBjb2RlcG9pbnQ9JzA0MUUnLz4KKyAgPGVudGl0eSBuYW1lPSdvY3knIGNvZGVwb2ludD0nMDQzRScvPgorICA8ZW50aXR5IG5hbWU9J29kYXNoJyBjb2RlcG9pbnQ9JzIyOUQnLz4KKyAgPGVudGl0eSBuYW1lPSdPZGJsYWMnIGNvZGVwb2ludD0nMDE1MCcvPgorICA8ZW50aXR5IG5hbWU9J29kYmxhYycgY29kZXBvaW50PScwMTUxJy8+CisgIDxlbnRpdHkgbmFtZT0nb2RpdicgY29kZXBvaW50PScyQTM4Jy8+CisgIDxlbnRpdHkgbmFtZT0nb2RvdCcgY29kZXBvaW50PScyMjk5Jy8+CisgIDxlbnRpdHkgbmFtZT0nb2Rzb2xkJyBjb2RlcG9pbnQ9JzI5QkMnLz4KKyAgPGVudGl0eSBuYW1lPSdPRWxpZycgY29kZXBvaW50PScwMTUyJy8+CisgIDxlbnRpdHkgbmFtZT0nb2VsaWcnIGNvZGVwb2ludD0nMDE1MycvPgorICA8ZW50aXR5IG5hbWU9J29mY2lyJyBjb2RlcG9pbnQ9JzI5QkYnLz4KKyAgPGVudGl0eSBuYW1lPSdPZnInIGNvZGVwb2ludD0nMUQ1MTInLz4KKyAgPGVudGl0eSBuYW1lPSdvZnInIGNvZGVwb2ludD0nMUQ1MkMnLz4KKyAgPGVudGl0eSBuYW1lPSdvZ29uJyBjb2RlcG9pbnQ9JzAyREInLz4KKyAgPGVudGl0eSBuYW1lPSdPZ3InIGNvZGVwb2ludD0nMDM5RicvPgorICA8ZW50aXR5IG5hbWU9J29ncicgY29kZXBvaW50PScwM0JGJy8+CisgIDxlbnRpdHkgbmFtZT0nT2dyYXZlJyBjb2RlcG9pbnQ9JzAwRDInLz4KKyAgPGVudGl0eSBuYW1lPSdvZ3JhdmUnIGNvZGVwb2ludD0nMDBGMicvPgorICA8ZW50aXR5IG5hbWU9J29ndCcgY29kZXBvaW50PScyOUMxJy8+CisgIDxlbnRpdHkgbmFtZT0nT0hhY2dyJyBjb2RlcG9pbnQ9JzAzOEYnLz4KKyAgPGVudGl0eSBuYW1lPSdvaGFjZ3InIGNvZGVwb2ludD0nMDNDRScvPgorICA8ZW50aXR5IG5hbWU9J29oYmFyJyBjb2RlcG9pbnQ9JzI5QjUnLz4KKyAgPGVudGl0eSBuYW1lPSdPSGdyJyBjb2RlcG9pbnQ9JzAzQTknLz4KKyAgPGVudGl0eSBuYW1lPSdvaGdyJyBjb2RlcG9pbnQ9JzAzQzknLz4KKyAgPGVudGl0eSBuYW1lPSdvaG0nIGNvZGVwb2ludD0nMjEyNicvPgorICA8ZW50aXR5IG5hbWU9J29pbnQnIGNvZGVwb2ludD0nMjIyRScvPgorICA8ZW50aXR5IG5hbWU9J29sYXJyJyBjb2RlcG9pbnQ9JzIxQkEnLz4KKyAgPGVudGl0eSBuYW1lPSdvbGNpcicgY29kZXBvaW50PScyOUJFJy8+CisgIDxlbnRpdHkgbmFtZT0nb2xjcm9zcycgY29kZXBvaW50PScyOUJCJy8+CisgIDxlbnRpdHkgbmFtZT0nb2xpbmUnIGNvZGVwb2ludD0nMjAzRScvPgorICA8ZW50aXR5IG5hbWU9J29sdCcgY29kZXBvaW50PScyOUMwJy8+CisgIDxlbnRpdHkgbmFtZT0nT21hY3InIGNvZGVwb2ludD0nMDE0QycvPgorICA8ZW50aXR5IG5hbWU9J29tYWNyJyBjb2RlcG9pbnQ9JzAxNEQnLz4KKyAgPGVudGl0eSBuYW1lPSdPbWVnYScgY29kZXBvaW50PScwM0E5Jy8+CisgIDxlbnRpdHkgbmFtZT0nb21lZ2EnIGNvZGVwb2ludD0nMDNDOScvPgorICA8ZW50aXR5IG5hbWU9J09taWNyb24nIGNvZGVwb2ludD0nMDM5RicvPgorICA8ZW50aXR5IG5hbWU9J29taWNyb24nIGNvZGVwb2ludD0nMDNCRicvPgorICA8ZW50aXR5IG5hbWU9J29taWQnIGNvZGVwb2ludD0nMjlCNicvPgorICA8ZW50aXR5IG5hbWU9J29taW51cycgY29kZXBvaW50PScyMjk2Jy8+CisgIDxlbnRpdHkgbmFtZT0nT29wZicgY29kZXBvaW50PScxRDU0NicvPgorICA8ZW50aXR5IG5hbWU9J29vcGYnIGNvZGVwb2ludD0nMUQ1NjAnLz4KKyAgPGVudGl0eSBuYW1lPSdvcGFyJyBjb2RlcG9pbnQ9JzI5QjcnLz4KKyAgPGVudGl0eSBuYW1lPSdPcGVuQ3VybHlEb3VibGVRdW90ZScgY29kZXBvaW50PScyMDFDJy8+CisgIDxlbnRpdHkgbmFtZT0nT3BlbkN1cmx5UXVvdGUnIGNvZGVwb2ludD0nMjAxOCcvPgorICA8ZW50aXR5IG5hbWU9J29wZXJwJyBjb2RlcG9pbnQ9JzI5QjknLz4KKyAgPGVudGl0eSBuYW1lPSdvcGx1cycgY29kZXBvaW50PScyMjk1Jy8+CisgIDxlbnRpdHkgbmFtZT0nb3InIGNvZGVwb2ludD0nMjIyOCcvPgorICA8ZW50aXR5IG5hbWU9J09yJyBjb2RlcG9pbnQ9JzJBNTQnLz4KKyAgPGVudGl0eSBuYW1lPSdvcmFycicgY29kZXBvaW50PScyMUJCJy8+CisgIDxlbnRpdHkgbmFtZT0nb3JkJyBjb2RlcG9pbnQ9JzJBNUQnLz4KKyAgPGVudGl0eSBuYW1lPSdvcmRlcicgY29kZXBvaW50PScyMTM0Jy8+CisgIDxlbnRpdHkgbmFtZT0nb3JkZXJvZicgY29kZXBvaW50PScyMTM0Jy8+CisgIDxlbnRpdHkgbmFtZT0nb3JkZicgY29kZXBvaW50PScwMEFBJy8+CisgIDxlbnRpdHkgbmFtZT0nb3JkbScgY29kZXBvaW50PScwMEJBJy8+CisgIDxlbnRpdHkgbmFtZT0nb3JpZ29mJyBjb2RlcG9pbnQ9JzIyQjYnLz4KKyAgPGVudGl0eSBuYW1lPSdvcm9yJyBjb2RlcG9pbnQ9JzJBNTYnLz4KKyAgPGVudGl0eSBuYW1lPSdvcnNsb3BlJyBjb2RlcG9pbnQ9JzJBNTcnLz4KKyAgPGVudGl0eSBuYW1lPSdvcnYnIGNvZGVwb2ludD0nMkE1QicvPgorICA8ZW50aXR5IG5hbWU9J29TJyBjb2RlcG9pbnQ9JzI0QzgnLz4KKyAgPGVudGl0eSBuYW1lPSdvc2NyJyBjb2RlcG9pbnQ9JzIxMzQnLz4KKyAgPGVudGl0eSBuYW1lPSdPc2NyJyBjb2RlcG9pbnQ9JzFENEFBJy8+CisgIDxlbnRpdHkgbmFtZT0nT3NsYXNoJyBjb2RlcG9pbnQ9JzAwRDgnLz4KKyAgPGVudGl0eSBuYW1lPSdvc2xhc2gnIGNvZGVwb2ludD0nMDBGOCcvPgorICA8ZW50aXR5IG5hbWU9J29zb2wnIGNvZGVwb2ludD0nMjI5OCcvPgorICA8ZW50aXR5IG5hbWU9J090aWxkZScgY29kZXBvaW50PScwMEQ1Jy8+CisgIDxlbnRpdHkgbmFtZT0nb3RpbGRlJyBjb2RlcG9pbnQ9JzAwRjUnLz4KKyAgPGVudGl0eSBuYW1lPSdvdGltZXMnIGNvZGVwb2ludD0nMjI5NycvPgorICA8ZW50aXR5IG5hbWU9J090aW1lcycgY29kZXBvaW50PScyQTM3Jy8+CisgIDxlbnRpdHkgbmFtZT0nb3RpbWVzYXMnIGNvZGVwb2ludD0nMkEzNicvPgorICA8ZW50aXR5IG5hbWU9J091bWwnIGNvZGVwb2ludD0nMDBENicvPgorICA8ZW50aXR5IG5hbWU9J291bWwnIGNvZGVwb2ludD0nMDBGNicvPgorICA8ZW50aXR5IG5hbWU9J292YmFyJyBjb2RlcG9pbnQ9JzIzM0QnLz4KKyAgPGVudGl0eSBuYW1lPSdPdmVyQmFyJyBjb2RlcG9pbnQ9JzAwQUYnLz4KKyAgPGVudGl0eSBuYW1lPSdPdmVyQnJhY2UnIGNvZGVwb2ludD0nRkUzNycvPgorICA8ZW50aXR5IG5hbWU9J092ZXJCcmFja2V0JyBjb2RlcG9pbnQ9JzIzQjQnLz4KKyAgPGVudGl0eSBuYW1lPSdPdmVyUGFyZW50aGVzaXMnIGNvZGVwb2ludD0nRkUzNScvPgorICA8ZW50aXR5IG5hbWU9J3BhcicgY29kZXBvaW50PScyMjI1Jy8+CisgIDxlbnRpdHkgbmFtZT0ncGFyYScgY29kZXBvaW50PScwMEI2Jy8+CisgIDxlbnRpdHkgbmFtZT0ncGFyYWxsZWwnIGNvZGVwb2ludD0nMjIyNScvPgorICA8ZW50aXR5IG5hbWU9J3BhcnNpbScgY29kZXBvaW50PScyQUYzJy8+CisgIDxlbnRpdHkgbmFtZT0ncGFyc2wnIGNvZGVwb2ludD0nMkFGRCcvPgorICA8ZW50aXR5IG5hbWU9J3BhcnQnIGNvZGVwb2ludD0nMjIwMicvPgorICA8ZW50aXR5IG5hbWU9J1BhcnRpYWxEJyBjb2RlcG9pbnQ9JzIyMDInLz4KKyAgPGVudGl0eSBuYW1lPSdQY3knIGNvZGVwb2ludD0nMDQxRicvPgorICA8ZW50aXR5IG5hbWU9J3BjeScgY29kZXBvaW50PScwNDNGJy8+CisgIDxlbnRpdHkgbmFtZT0ncGVyY250JyBjb2RlcG9pbnQ9JzAwMjUnLz4KKyAgPGVudGl0eSBuYW1lPSdwZXJpb2QnIGNvZGVwb2ludD0nMDAyRScvPgorICA8ZW50aXR5IG5hbWU9J3Blcm1pbCcgY29kZXBvaW50PScyMDMwJy8+CisgIDxlbnRpdHkgbmFtZT0ncGVycCcgY29kZXBvaW50PScyMkE1Jy8+CisgIDxlbnRpdHkgbmFtZT0ncGVydGVuaycgY29kZXBvaW50PScyMDMxJy8+CisgIDxlbnRpdHkgbmFtZT0nUGZyJyBjb2RlcG9pbnQ9JzFENTEzJy8+CisgIDxlbnRpdHkgbmFtZT0ncGZyJyBjb2RlcG9pbnQ9JzFENTJEJy8+CisgIDxlbnRpdHkgbmFtZT0nUGdyJyBjb2RlcG9pbnQ9JzAzQTAnLz4KKyAgPGVudGl0eSBuYW1lPSdwZ3InIGNvZGVwb2ludD0nMDNDMCcvPgorICA8ZW50aXR5IG5hbWU9J1BIZ3InIGNvZGVwb2ludD0nMDNBNicvPgorICA8ZW50aXR5IG5hbWU9J3BoZ3InIGNvZGVwb2ludD0nMDNDNicvPgorICA8ZW50aXR5IG5hbWU9J1BoaScgY29kZXBvaW50PScwM0E2Jy8+CisgIDxlbnRpdHkgbmFtZT0ncGhpJyBjb2RlcG9pbnQ9JzAzRDUnLz4KKyAgPGVudGl0eSBuYW1lPSdwaGl2JyBjb2RlcG9pbnQ9JzAzQzYnLz4KKyAgPGVudGl0eSBuYW1lPSdwaG1tYXQnIGNvZGVwb2ludD0nMjEzMycvPgorICA8ZW50aXR5IG5hbWU9J3Bob25lJyBjb2RlcG9pbnQ9JzI2MEUnLz4KKyAgPGVudGl0eSBuYW1lPSdQaScgY29kZXBvaW50PScwM0EwJy8+CisgIDxlbnRpdHkgbmFtZT0ncGknIGNvZGVwb2ludD0nMDNDMCcvPgorICA8ZW50aXR5IG5hbWU9J3BpdGNoZm9yaycgY29kZXBvaW50PScyMkQ0Jy8+CisgIDxlbnRpdHkgbmFtZT0ncGl2JyBjb2RlcG9pbnQ9JzAzRDYnLz4KKyAgPGVudGl0eSBuYW1lPSdwbGFuY2snIGNvZGVwb2ludD0nMjEwRicvPgorICA8ZW50aXR5IG5hbWU9J3BsYW5ja2gnIGNvZGVwb2ludD0nMjEwRScvPgorICA8ZW50aXR5IG5hbWU9J3BsYW5rdicgY29kZXBvaW50PScyMTBGJy8+CisgIDxlbnRpdHkgbmFtZT0ncGx1cycgY29kZXBvaW50PScwMDJCJy8+CisgIDxlbnRpdHkgbmFtZT0ncGx1c2FjaXInIGNvZGVwb2ludD0nMkEyMycvPgorICA8ZW50aXR5IG5hbWU9J3BsdXNiJyBjb2RlcG9pbnQ9JzIyOUUnLz4KKyAgPGVudGl0eSBuYW1lPSdwbHVzY2lyJyBjb2RlcG9pbnQ9JzJBMjInLz4KKyAgPGVudGl0eSBuYW1lPSdwbHVzZG8nIGNvZGVwb2ludD0nMjIxNCcvPgorICA8ZW50aXR5IG5hbWU9J3BsdXNkdScgY29kZXBvaW50PScyQTI1Jy8+CisgIDxlbnRpdHkgbmFtZT0ncGx1c2UnIGNvZGVwb2ludD0nMkE3MicvPgorICA8ZW50aXR5IG5hbWU9J1BsdXNNaW51cycgY29kZXBvaW50PScwMEIxJy8+CisgIDxlbnRpdHkgbmFtZT0ncGx1c21uJyBjb2RlcG9pbnQ9JzAwQjEnLz4KKyAgPGVudGl0eSBuYW1lPSdwbHVzc2ltJyBjb2RlcG9pbnQ9JzJBMjYnLz4KKyAgPGVudGl0eSBuYW1lPSdwbHVzdHdvJyBjb2RlcG9pbnQ9JzJBMjcnLz4KKyAgPGVudGl0eSBuYW1lPSdwbScgY29kZXBvaW50PScwMEIxJy8+CisgIDxlbnRpdHkgbmFtZT0nUG9pbmNhcmVwbGFuZScgY29kZXBvaW50PScyMTBDJy8+CisgIDxlbnRpdHkgbmFtZT0ncG9pbnRpbnQnIGNvZGVwb2ludD0nMkExNScvPgorICA8ZW50aXR5IG5hbWU9J1BvcGYnIGNvZGVwb2ludD0nMjExOScvPgorICA8ZW50aXR5IG5hbWU9J3BvcGYnIGNvZGVwb2ludD0nMUQ1NjEnLz4KKyAgPGVudGl0eSBuYW1lPSdwb3VuZCcgY29kZXBvaW50PScwMEEzJy8+CisgIDxlbnRpdHkgbmFtZT0ncHInIGNvZGVwb2ludD0nMjI3QScvPgorICA8ZW50aXR5IG5hbWU9J1ByJyBjb2RlcG9pbnQ9JzJBQkInLz4KKyAgPGVudGl0eSBuYW1lPSdwcmFwJyBjb2RlcG9pbnQ9JzJBQjcnLz4KKyAgPGVudGl0eSBuYW1lPSdwcmN1ZScgY29kZXBvaW50PScyMjdDJy8+CisgIDxlbnRpdHkgbmFtZT0ncHJlJyBjb2RlcG9pbnQ9JzJBQUYnLz4KKyAgPGVudGl0eSBuYW1lPSdwckUnIGNvZGVwb2ludD0nMkFCMycvPgorICA8ZW50aXR5IG5hbWU9J3ByZWMnIGNvZGVwb2ludD0nMjI3QScvPgorICA8ZW50aXR5IG5hbWU9J3ByZWNhcHByb3gnIGNvZGVwb2ludD0nMkFCNycvPgorICA8ZW50aXR5IG5hbWU9J3ByZWNjdXJseWVxJyBjb2RlcG9pbnQ9JzIyN0MnLz4KKyAgPGVudGl0eSBuYW1lPSdQcmVjZWRlcycgY29kZXBvaW50PScyMjdBJy8+CisgIDxlbnRpdHkgbmFtZT0nUHJlY2VkZXNFcXVhbCcgY29kZXBvaW50PScyQUFGJy8+CisgIDxlbnRpdHkgbmFtZT0nUHJlY2VkZXNTbGFudEVxdWFsJyBjb2RlcG9pbnQ9JzIyN0MnLz4KKyAgPGVudGl0eSBuYW1lPSdQcmVjZWRlc1RpbGRlJyBjb2RlcG9pbnQ9JzIyN0UnLz4KKyAgPGVudGl0eSBuYW1lPSdwcmVjZXEnIGNvZGVwb2ludD0nMkFBRicvPgorICA8ZW50aXR5IG5hbWU9J3ByZWNuYXBwcm94JyBjb2RlcG9pbnQ9JzJBQjknLz4KKyAgPGVudGl0eSBuYW1lPSdwcmVjbmVxcScgY29kZXBvaW50PScyQUI1Jy8+CisgIDxlbnRpdHkgbmFtZT0ncHJlY25zaW0nIGNvZGVwb2ludD0nMjJFOCcvPgorICA8ZW50aXR5IG5hbWU9J3ByZWNzaW0nIGNvZGVwb2ludD0nMjI3RScvPgorICA8ZW50aXR5IG5hbWU9J3ByaW1lJyBjb2RlcG9pbnQ9JzIwMzInLz4KKyAgPGVudGl0eSBuYW1lPSdQcmltZScgY29kZXBvaW50PScyMDMzJy8+CisgIDxlbnRpdHkgbmFtZT0ncHJpbWVzJyBjb2RlcG9pbnQ9JzIxMTknLz4KKyAgPGVudGl0eSBuYW1lPSdwcm5hcCcgY29kZXBvaW50PScyQUI5Jy8+CisgIDxlbnRpdHkgbmFtZT0ncHJuRScgY29kZXBvaW50PScyQUI1Jy8+CisgIDxlbnRpdHkgbmFtZT0ncHJuc2ltJyBjb2RlcG9pbnQ9JzIyRTgnLz4KKyAgPGVudGl0eSBuYW1lPSdwcm9kJyBjb2RlcG9pbnQ9JzIyMEYnLz4KKyAgPGVudGl0eSBuYW1lPSdQcm9kdWN0JyBjb2RlcG9pbnQ9JzIyMEYnLz4KKyAgPGVudGl0eSBuYW1lPSdwcm9mYWxhcicgY29kZXBvaW50PScyMzJFJy8+CisgIDxlbnRpdHkgbmFtZT0ncHJvZmxpbmUnIGNvZGVwb2ludD0nMjMxMicvPgorICA8ZW50aXR5IG5hbWU9J3Byb2ZzdXJmJyBjb2RlcG9pbnQ9JzIzMTMnLz4KKyAgPGVudGl0eSBuYW1lPSdwcm9wJyBjb2RlcG9pbnQ9JzIyMUQnLz4KKyAgPGVudGl0eSBuYW1lPSdQcm9wb3J0aW9uJyBjb2RlcG9pbnQ9JzIyMzcnLz4KKyAgPGVudGl0eSBuYW1lPSdQcm9wb3J0aW9uYWwnIGNvZGVwb2ludD0nMjIxRCcvPgorICA8ZW50aXR5IG5hbWU9J3Byb3B0bycgY29kZXBvaW50PScyMjFEJy8+CisgIDxlbnRpdHkgbmFtZT0ncHJzaW0nIGNvZGVwb2ludD0nMjI3RScvPgorICA8ZW50aXR5IG5hbWU9J3BydXJlbCcgY29kZXBvaW50PScyMkIwJy8+CisgIDxlbnRpdHkgbmFtZT0nUHNjcicgY29kZXBvaW50PScxRDRBQicvPgorICA8ZW50aXR5IG5hbWU9J3BzY3InIGNvZGVwb2ludD0nMUQ0QzUnLz4KKyAgPGVudGl0eSBuYW1lPSdQU2dyJyBjb2RlcG9pbnQ9JzAzQTgnLz4KKyAgPGVudGl0eSBuYW1lPSdwc2dyJyBjb2RlcG9pbnQ9JzAzQzgnLz4KKyAgPGVudGl0eSBuYW1lPSdQc2knIGNvZGVwb2ludD0nMDNBOCcvPgorICA8ZW50aXR5IG5hbWU9J3BzaScgY29kZXBvaW50PScwM0M4Jy8+CisgIDxlbnRpdHkgbmFtZT0ncHVuY3NwJyBjb2RlcG9pbnQ9JzIwMDgnLz4KKyAgPGVudGl0eSBuYW1lPSdRZnInIGNvZGVwb2ludD0nMUQ1MTQnLz4KKyAgPGVudGl0eSBuYW1lPSdxZnInIGNvZGVwb2ludD0nMUQ1MkUnLz4KKyAgPGVudGl0eSBuYW1lPSdxaW50JyBjb2RlcG9pbnQ9JzJBMEMnLz4KKyAgPGVudGl0eSBuYW1lPSdRb3BmJyBjb2RlcG9pbnQ9JzIxMUEnLz4KKyAgPGVudGl0eSBuYW1lPSdxb3BmJyBjb2RlcG9pbnQ9JzFENTYyJy8+CisgIDxlbnRpdHkgbmFtZT0ncXByaW1lJyBjb2RlcG9pbnQ9JzIwNTcnLz4KKyAgPGVudGl0eSBuYW1lPSdRc2NyJyBjb2RlcG9pbnQ9JzFENEFDJy8+CisgIDxlbnRpdHkgbmFtZT0ncXNjcicgY29kZXBvaW50PScxRDRDNicvPgorICA8ZW50aXR5IG5hbWU9J3F1YXRlcm5pb25zJyBjb2RlcG9pbnQ9JzIxMEQnLz4KKyAgPGVudGl0eSBuYW1lPSdxdWF0aW50JyBjb2RlcG9pbnQ9JzJBMTYnLz4KKyAgPGVudGl0eSBuYW1lPSdxdWVzdCcgY29kZXBvaW50PScwMDNGJy8+CisgIDxlbnRpdHkgbmFtZT0ncXVlc3RlcScgY29kZXBvaW50PScyMjVGJy8+CisgIDxlbnRpdHkgbmFtZT0ncXVvdCcgY29kZXBvaW50PScwMDIyJy8+CisgIDxlbnRpdHkgbmFtZT0nckFhcnInIGNvZGVwb2ludD0nMjFEQicvPgorICA8ZW50aXR5IG5hbWU9J3JhY2UnIGNvZGVwb2ludD0nMjlEQScvPgorICA8ZW50aXR5IG5hbWU9J1JhY3V0ZScgY29kZXBvaW50PScwMTU0Jy8+CisgIDxlbnRpdHkgbmFtZT0ncmFjdXRlJyBjb2RlcG9pbnQ9JzAxNTUnLz4KKyAgPGVudGl0eSBuYW1lPSdyYWRpYycgY29kZXBvaW50PScyMjFBJy8+CisgIDxlbnRpdHkgbmFtZT0ncmFlbXB0eXYnIGNvZGVwb2ludD0nMjlCMycvPgorICA8ZW50aXR5IG5hbWU9J3JhbmcnIGNvZGVwb2ludD0nMjMyQScvPgorICA8ZW50aXR5IG5hbWU9J1JhbmcnIGNvZGVwb2ludD0nMjdFQicvPgorICA8ZW50aXR5IG5hbWU9J3JhbmdkJyBjb2RlcG9pbnQ9JzI5OTInLz4KKyAgPGVudGl0eSBuYW1lPSdyYW5nZScgY29kZXBvaW50PScyOUE1Jy8+CisgIDxlbnRpdHkgbmFtZT0ncmFuZ2xlJyBjb2RlcG9pbnQ9JzIzMkEnLz4KKyAgPGVudGl0eSBuYW1lPSdyYXF1bycgY29kZXBvaW50PScwMEJCJy8+CisgIDxlbnRpdHkgbmFtZT0ncmFycicgY29kZXBvaW50PScyMTkyJy8+CisgIDxlbnRpdHkgbmFtZT0nUmFycicgY29kZXBvaW50PScyMUEwJy8+CisgIDxlbnRpdHkgbmFtZT0nckFycicgY29kZXBvaW50PScyMUQyJy8+CisgIDxlbnRpdHkgbmFtZT0ncmFycmFwJyBjb2RlcG9pbnQ9JzI5NzUnLz4KKyAgPGVudGl0eSBuYW1lPSdyYXJyYicgY29kZXBvaW50PScyMUU1Jy8+CisgIDxlbnRpdHkgbmFtZT0ncmFycmJmcycgY29kZXBvaW50PScyOTIwJy8+CisgIDxlbnRpdHkgbmFtZT0ncmFycmMnIGNvZGVwb2ludD0nMjkzMycvPgorICA8ZW50aXR5IG5hbWU9J3JhcnJmcycgY29kZXBvaW50PScyOTFFJy8+CisgIDxlbnRpdHkgbmFtZT0ncmFycmhrJyBjb2RlcG9pbnQ9JzIxQUEnLz4KKyAgPGVudGl0eSBuYW1lPSdyYXJybHAnIGNvZGVwb2ludD0nMjFBQycvPgorICA8ZW50aXR5IG5hbWU9J3JhcnJwbCcgY29kZXBvaW50PScyOTQ1Jy8+CisgIDxlbnRpdHkgbmFtZT0ncmFycnNpbScgY29kZXBvaW50PScyOTc0Jy8+CisgIDxlbnRpdHkgbmFtZT0ncmFycnRsJyBjb2RlcG9pbnQ9JzIxQTMnLz4KKyAgPGVudGl0eSBuYW1lPSdSYXJydGwnIGNvZGVwb2ludD0nMjkxNicvPgorICA8ZW50aXR5IG5hbWU9J3JhcnJ3JyBjb2RlcG9pbnQ9JzIxOUQnLz4KKyAgPGVudGl0eSBuYW1lPSdyYXRhaWwnIGNvZGVwb2ludD0nMjkxQScvPgorICA8ZW50aXR5IG5hbWU9J3JBdGFpbCcgY29kZXBvaW50PScyOTFDJy8+CisgIDxlbnRpdHkgbmFtZT0ncmF0aW8nIGNvZGVwb2ludD0nMjIzNicvPgorICA8ZW50aXR5IG5hbWU9J3JhdGlvbmFscycgY29kZXBvaW50PScyMTFBJy8+CisgIDxlbnRpdHkgbmFtZT0ncmJhcnInIGNvZGVwb2ludD0nMjkwRCcvPgorICA8ZW50aXR5IG5hbWU9J3JCYXJyJyBjb2RlcG9pbnQ9JzI5MEYnLz4KKyAgPGVudGl0eSBuYW1lPSdSQmFycicgY29kZXBvaW50PScyOTEwJy8+CisgIDxlbnRpdHkgbmFtZT0ncmJicmsnIGNvZGVwb2ludD0nMjk5OCcvPgorICA8ZW50aXR5IG5hbWU9J3JicmFjZScgY29kZXBvaW50PScwMDdEJy8+CisgIDxlbnRpdHkgbmFtZT0ncmJyYWNrJyBjb2RlcG9pbnQ9JzAwNUQnLz4KKyAgPGVudGl0eSBuYW1lPSdyYnJrZScgY29kZXBvaW50PScyOThDJy8+CisgIDxlbnRpdHkgbmFtZT0ncmJya3NsZCcgY29kZXBvaW50PScyOThFJy8+CisgIDxlbnRpdHkgbmFtZT0ncmJya3NsdScgY29kZXBvaW50PScyOTkwJy8+CisgIDxlbnRpdHkgbmFtZT0nUmNhcm9uJyBjb2RlcG9pbnQ9JzAxNTgnLz4KKyAgPGVudGl0eSBuYW1lPSdyY2Fyb24nIGNvZGVwb2ludD0nMDE1OScvPgorICA8ZW50aXR5IG5hbWU9J1JjZWRpbCcgY29kZXBvaW50PScwMTU2Jy8+CisgIDxlbnRpdHkgbmFtZT0ncmNlZGlsJyBjb2RlcG9pbnQ9JzAxNTcnLz4KKyAgPGVudGl0eSBuYW1lPSdyY2VpbCcgY29kZXBvaW50PScyMzA5Jy8+CisgIDxlbnRpdHkgbmFtZT0ncmN1YicgY29kZXBvaW50PScwMDdEJy8+CisgIDxlbnRpdHkgbmFtZT0nUmN5JyBjb2RlcG9pbnQ9JzA0MjAnLz4KKyAgPGVudGl0eSBuYW1lPSdyY3knIGNvZGVwb2ludD0nMDQ0MCcvPgorICA8ZW50aXR5IG5hbWU9J3JkY2EnIGNvZGVwb2ludD0nMjkzNycvPgorICA8ZW50aXR5IG5hbWU9J3JkbGRoYXInIGNvZGVwb2ludD0nMjk2OScvPgorICA8ZW50aXR5IG5hbWU9J3JkcXVvJyBjb2RlcG9pbnQ9JzIwMUQnLz4KKyAgPGVudGl0eSBuYW1lPSdyZHF1b3InIGNvZGVwb2ludD0nMjAxRCcvPgorICA8ZW50aXR5IG5hbWU9J3Jkc2gnIGNvZGVwb2ludD0nMjFCMycvPgorICA8ZW50aXR5IG5hbWU9J1JlJyBjb2RlcG9pbnQ9JzIxMUMnLz4KKyAgPGVudGl0eSBuYW1lPSdyZWFsJyBjb2RlcG9pbnQ9JzIxMUMnLz4KKyAgPGVudGl0eSBuYW1lPSdyZWFsaW5lJyBjb2RlcG9pbnQ9JzIxMUInLz4KKyAgPGVudGl0eSBuYW1lPSdyZWFscGFydCcgY29kZXBvaW50PScyMTFDJy8+CisgIDxlbnRpdHkgbmFtZT0ncmVhbHMnIGNvZGVwb2ludD0nMjExRCcvPgorICA8ZW50aXR5IG5hbWU9J3JlY3QnIGNvZGVwb2ludD0nMjVBRCcvPgorICA8ZW50aXR5IG5hbWU9J3JlZycgY29kZXBvaW50PScwMEFFJy8+CisgIDxlbnRpdHkgbmFtZT0nUmV2ZXJzZUVsZW1lbnQnIGNvZGVwb2ludD0nMjIwQicvPgorICA8ZW50aXR5IG5hbWU9J1JldmVyc2VFcXVpbGlicml1bScgY29kZXBvaW50PScyMUNCJy8+CisgIDxlbnRpdHkgbmFtZT0nUmV2ZXJzZVVwRXF1aWxpYnJpdW0nIGNvZGVwb2ludD0nMjk2RicvPgorICA8ZW50aXR5IG5hbWU9J3JmaXNodCcgY29kZXBvaW50PScyOTdEJy8+CisgIDxlbnRpdHkgbmFtZT0ncmZsb29yJyBjb2RlcG9pbnQ9JzIzMEInLz4KKyAgPGVudGl0eSBuYW1lPSdSZnInIGNvZGVwb2ludD0nMjExQycvPgorICA8ZW50aXR5IG5hbWU9J3JmcicgY29kZXBvaW50PScxRDUyRicvPgorICA8ZW50aXR5IG5hbWU9J1JncicgY29kZXBvaW50PScwM0ExJy8+CisgIDxlbnRpdHkgbmFtZT0ncmdyJyBjb2RlcG9pbnQ9JzAzQzEnLz4KKyAgPGVudGl0eSBuYW1lPSdySGFyJyBjb2RlcG9pbnQ9JzI5NjQnLz4KKyAgPGVudGl0eSBuYW1lPSdyaGFyZCcgY29kZXBvaW50PScyMUMxJy8+CisgIDxlbnRpdHkgbmFtZT0ncmhhcnUnIGNvZGVwb2ludD0nMjFDMCcvPgorICA8ZW50aXR5IG5hbWU9J3JoYXJ1bCcgY29kZXBvaW50PScyOTZDJy8+CisgIDxlbnRpdHkgbmFtZT0nUmhvJyBjb2RlcG9pbnQ9JzAzQTEnLz4KKyAgPGVudGl0eSBuYW1lPSdyaG8nIGNvZGVwb2ludD0nMDNDMScvPgorICA8ZW50aXR5IG5hbWU9J3Job3YnIGNvZGVwb2ludD0nMDNGMScvPgorICA8ZW50aXR5IG5hbWU9J1JpZ2h0QW5nbGVCcmFja2V0JyBjb2RlcG9pbnQ9JzIzMkEnLz4KKyAgPGVudGl0eSBuYW1lPSdyaWdodGFycm93JyBjb2RlcG9pbnQ9JzIxOTInLz4KKyAgPGVudGl0eSBuYW1lPSdSaWdodGFycm93JyBjb2RlcG9pbnQ9JzIxRDInLz4KKyAgPGVudGl0eSBuYW1lPSdSaWdodEFycm93QmFyJyBjb2RlcG9pbnQ9JzIxRTUnLz4KKyAgPGVudGl0eSBuYW1lPSdSaWdodEFycm93TGVmdEFycm93JyBjb2RlcG9pbnQ9JzIxQzQnLz4KKyAgPGVudGl0eSBuYW1lPSdyaWdodGFycm93dGFpbCcgY29kZXBvaW50PScyMUEzJy8+CisgIDxlbnRpdHkgbmFtZT0nUmlnaHRDZWlsaW5nJyBjb2RlcG9pbnQ9JzIzMDknLz4KKyAgPGVudGl0eSBuYW1lPSdSaWdodERvdWJsZUJyYWNrZXQnIGNvZGVwb2ludD0nMjdFNycvPgorICA8ZW50aXR5IG5hbWU9J1JpZ2h0RG93blRlZVZlY3RvcicgY29kZXBvaW50PScyOTVEJy8+CisgIDxlbnRpdHkgbmFtZT0nUmlnaHREb3duVmVjdG9yJyBjb2RlcG9pbnQ9JzIxQzInLz4KKyAgPGVudGl0eSBuYW1lPSdSaWdodERvd25WZWN0b3JCYXInIGNvZGVwb2ludD0nMjk1NScvPgorICA8ZW50aXR5IG5hbWU9J1JpZ2h0Rmxvb3InIGNvZGVwb2ludD0nMjMwQicvPgorICA8ZW50aXR5IG5hbWU9J3JpZ2h0aGFycG9vbmRvd24nIGNvZGVwb2ludD0nMjFDMScvPgorICA8ZW50aXR5IG5hbWU9J3JpZ2h0aGFycG9vbnVwJyBjb2RlcG9pbnQ9JzIxQzAnLz4KKyAgPGVudGl0eSBuYW1lPSdyaWdodGxlZnRhcnJvd3MnIGNvZGVwb2ludD0nMjFDNCcvPgorICA8ZW50aXR5IG5hbWU9J3JpZ2h0bGVmdGhhcnBvb25zJyBjb2RlcG9pbnQ9JzIxQ0MnLz4KKyAgPGVudGl0eSBuYW1lPSdyaWdodHJpZ2h0YXJyb3dzJyBjb2RlcG9pbnQ9JzIxQzknLz4KKyAgPGVudGl0eSBuYW1lPSdyaWdodHNxdWlnYXJyb3cnIGNvZGVwb2ludD0nMjE5RCcvPgorICA8ZW50aXR5IG5hbWU9J1JpZ2h0VGVlJyBjb2RlcG9pbnQ9JzIyQTInLz4KKyAgPGVudGl0eSBuYW1lPSdSaWdodFRlZUFycm93JyBjb2RlcG9pbnQ9JzIxQTYnLz4KKyAgPGVudGl0eSBuYW1lPSdSaWdodFRlZVZlY3RvcicgY29kZXBvaW50PScyOTVCJy8+CisgIDxlbnRpdHkgbmFtZT0ncmlnaHR0aHJlZXRpbWVzJyBjb2RlcG9pbnQ9JzIyQ0MnLz4KKyAgPGVudGl0eSBuYW1lPSdSaWdodFRyaWFuZ2xlJyBjb2RlcG9pbnQ9JzIyQjMnLz4KKyAgPGVudGl0eSBuYW1lPSdSaWdodFRyaWFuZ2xlQmFyJyBjb2RlcG9pbnQ9JzI5RDAnLz4KKyAgPGVudGl0eSBuYW1lPSdSaWdodFRyaWFuZ2xlRXF1YWwnIGNvZGVwb2ludD0nMjJCNScvPgorICA8ZW50aXR5IG5hbWU9J1JpZ2h0VXBEb3duVmVjdG9yJyBjb2RlcG9pbnQ9JzI5NEYnLz4KKyAgPGVudGl0eSBuYW1lPSdSaWdodFVwVGVlVmVjdG9yJyBjb2RlcG9pbnQ9JzI5NUMnLz4KKyAgPGVudGl0eSBuYW1lPSdSaWdodFVwVmVjdG9yJyBjb2RlcG9pbnQ9JzIxQkUnLz4KKyAgPGVudGl0eSBuYW1lPSdSaWdodFVwVmVjdG9yQmFyJyBjb2RlcG9pbnQ9JzI5NTQnLz4KKyAgPGVudGl0eSBuYW1lPSdSaWdodFZlY3RvcicgY29kZXBvaW50PScyMUMwJy8+CisgIDxlbnRpdHkgbmFtZT0nUmlnaHRWZWN0b3JCYXInIGNvZGVwb2ludD0nMjk1MycvPgorICA8ZW50aXR5IG5hbWU9J3JpbmcnIGNvZGVwb2ludD0nMDJEQScvPgorICA8ZW50aXR5IG5hbWU9J3Jpc2luZ2RvdHNlcScgY29kZXBvaW50PScyMjUzJy8+CisgIDxlbnRpdHkgbmFtZT0ncmxhcnInIGNvZGVwb2ludD0nMjFDNCcvPgorICA8ZW50aXR5IG5hbWU9J3JsaGFyJyBjb2RlcG9pbnQ9JzIxQ0MnLz4KKyAgPGVudGl0eSBuYW1lPSdybG0nIGNvZGVwb2ludD0nMjAwRicvPgorICA8ZW50aXR5IG5hbWU9J3Jtb3VzdCcgY29kZXBvaW50PScyM0IxJy8+CisgIDxlbnRpdHkgbmFtZT0ncm1vdXN0YWNoZScgY29kZXBvaW50PScyM0IxJy8+CisgIDxlbnRpdHkgbmFtZT0ncm5taWQnIGNvZGVwb2ludD0nMkFFRScvPgorICA8ZW50aXR5IG5hbWU9J3JvYW5nJyBjb2RlcG9pbnQ9JzI3RUQnLz4KKyAgPGVudGl0eSBuYW1lPSdyb2FycicgY29kZXBvaW50PScyMUZFJy8+CisgIDxlbnRpdHkgbmFtZT0ncm9icmsnIGNvZGVwb2ludD0nMjdFNycvPgorICA8ZW50aXR5IG5hbWU9J3JvcGFyJyBjb2RlcG9pbnQ9JzI5ODYnLz4KKyAgPGVudGl0eSBuYW1lPSdSb3BmJyBjb2RlcG9pbnQ9JzIxMUQnLz4KKyAgPGVudGl0eSBuYW1lPSdyb3BmJyBjb2RlcG9pbnQ9JzFENTYzJy8+CisgIDxlbnRpdHkgbmFtZT0ncm9wbHVzJyBjb2RlcG9pbnQ9JzJBMkUnLz4KKyAgPGVudGl0eSBuYW1lPSdyb3RpbWVzJyBjb2RlcG9pbnQ9JzJBMzUnLz4KKyAgPGVudGl0eSBuYW1lPSdSb3VuZEltcGxpZXMnIGNvZGVwb2ludD0nMjk3MCcvPgorICA8ZW50aXR5IG5hbWU9J3JwYXInIGNvZGVwb2ludD0nMDAyOScvPgorICA8ZW50aXR5IG5hbWU9J3JwYXJndCcgY29kZXBvaW50PScyOTk0Jy8+CisgIDxlbnRpdHkgbmFtZT0ncnBwb2xpbnQnIGNvZGVwb2ludD0nMkExMicvPgorICA8ZW50aXR5IG5hbWU9J3JyYXJyJyBjb2RlcG9pbnQ9JzIxQzknLz4KKyAgPGVudGl0eSBuYW1lPSdScmlnaHRhcnJvdycgY29kZXBvaW50PScyMURCJy8+CisgIDxlbnRpdHkgbmFtZT0ncnNhcXVvJyBjb2RlcG9pbnQ9JzIwM0EnLz4KKyAgPGVudGl0eSBuYW1lPSdSc2NyJyBjb2RlcG9pbnQ9JzIxMUInLz4KKyAgPGVudGl0eSBuYW1lPSdyc2NyJyBjb2RlcG9pbnQ9JzFENEM3Jy8+CisgIDxlbnRpdHkgbmFtZT0ncnNoJyBjb2RlcG9pbnQ9JzIxQjEnLz4KKyAgPGVudGl0eSBuYW1lPSdyc3FiJyBjb2RlcG9pbnQ9JzAwNUQnLz4KKyAgPGVudGl0eSBuYW1lPSdyc3F1bycgY29kZXBvaW50PScyMDE5Jy8+CisgIDxlbnRpdHkgbmFtZT0ncnNxdW9yJyBjb2RlcG9pbnQ9JzIwMTknLz4KKyAgPGVudGl0eSBuYW1lPSdydGhyZWUnIGNvZGVwb2ludD0nMjJDQycvPgorICA8ZW50aXR5IG5hbWU9J3J0aW1lcycgY29kZXBvaW50PScyMkNBJy8+CisgIDxlbnRpdHkgbmFtZT0ncnRyaScgY29kZXBvaW50PScyNUI5Jy8+CisgIDxlbnRpdHkgbmFtZT0ncnRyaWUnIGNvZGVwb2ludD0nMjJCNScvPgorICA8ZW50aXR5IG5hbWU9J3J0cmlmJyBjb2RlcG9pbnQ9JzI1QjgnLz4KKyAgPGVudGl0eSBuYW1lPSdydHJpbHRyaScgY29kZXBvaW50PScyOUNFJy8+CisgIDxlbnRpdHkgbmFtZT0nUnVsZURlbGF5ZWQnIGNvZGVwb2ludD0nMjlGNCcvPgorICA8ZW50aXR5IG5hbWU9J3J1bHVoYXInIGNvZGVwb2ludD0nMjk2OCcvPgorICA8ZW50aXR5IG5hbWU9J3J4JyBjb2RlcG9pbnQ9JzIxMUUnLz4KKyAgPGVudGl0eSBuYW1lPSdTYWN1dGUnIGNvZGVwb2ludD0nMDE1QScvPgorICA8ZW50aXR5IG5hbWU9J3NhY3V0ZScgY29kZXBvaW50PScwMTVCJy8+CisgIDxlbnRpdHkgbmFtZT0nc2JxdW8nIGNvZGVwb2ludD0nMjAxQScvPgorICA8ZW50aXR5IG5hbWU9J3NjJyBjb2RlcG9pbnQ9JzIyN0InLz4KKyAgPGVudGl0eSBuYW1lPSdTYycgY29kZXBvaW50PScyQUJDJy8+CisgIDxlbnRpdHkgbmFtZT0nc2NhcCcgY29kZXBvaW50PScyQUI4Jy8+CisgIDxlbnRpdHkgbmFtZT0nU2Nhcm9uJyBjb2RlcG9pbnQ9JzAxNjAnLz4KKyAgPGVudGl0eSBuYW1lPSdzY2Fyb24nIGNvZGVwb2ludD0nMDE2MScvPgorICA8ZW50aXR5IG5hbWU9J3NjY3VlJyBjb2RlcG9pbnQ9JzIyN0QnLz4KKyAgPGVudGl0eSBuYW1lPSdzY2UnIGNvZGVwb2ludD0nMkFCMCcvPgorICA8ZW50aXR5IG5hbWU9J3NjRScgY29kZXBvaW50PScyQUI0Jy8+CisgIDxlbnRpdHkgbmFtZT0nU2NlZGlsJyBjb2RlcG9pbnQ9JzAxNUUnLz4KKyAgPGVudGl0eSBuYW1lPSdzY2VkaWwnIGNvZGVwb2ludD0nMDE1RicvPgorICA8ZW50aXR5IG5hbWU9J1NjaXJjJyBjb2RlcG9pbnQ9JzAxNUMnLz4KKyAgPGVudGl0eSBuYW1lPSdzY2lyYycgY29kZXBvaW50PScwMTVEJy8+CisgIDxlbnRpdHkgbmFtZT0nc2NuYXAnIGNvZGVwb2ludD0nMkFCQScvPgorICA8ZW50aXR5IG5hbWU9J3NjbkUnIGNvZGVwb2ludD0nMkFCNicvPgorICA8ZW50aXR5IG5hbWU9J3NjbnNpbScgY29kZXBvaW50PScyMkU5Jy8+CisgIDxlbnRpdHkgbmFtZT0nc2Nwb2xpbnQnIGNvZGVwb2ludD0nMkExMycvPgorICA8ZW50aXR5IG5hbWU9J3Njc2ltJyBjb2RlcG9pbnQ9JzIyN0YnLz4KKyAgPGVudGl0eSBuYW1lPSdTY3knIGNvZGVwb2ludD0nMDQyMScvPgorICA8ZW50aXR5IG5hbWU9J3NjeScgY29kZXBvaW50PScwNDQxJy8+CisgIDxlbnRpdHkgbmFtZT0nc2RvdCcgY29kZXBvaW50PScyMkM1Jy8+CisgIDxlbnRpdHkgbmFtZT0nc2RvdGInIGNvZGVwb2ludD0nMjJBMScvPgorICA8ZW50aXR5IG5hbWU9J3Nkb3RlJyBjb2RlcG9pbnQ9JzJBNjYnLz4KKyAgPGVudGl0eSBuYW1lPSdzZWFyaGsnIGNvZGVwb2ludD0nMjkyNScvPgorICA8ZW50aXR5IG5hbWU9J3NlYXJyJyBjb2RlcG9pbnQ9JzIxOTgnLz4KKyAgPGVudGl0eSBuYW1lPSdzZUFycicgY29kZXBvaW50PScyMUQ4Jy8+CisgIDxlbnRpdHkgbmFtZT0nc2VhcnJvdycgY29kZXBvaW50PScyMTk4Jy8+CisgIDxlbnRpdHkgbmFtZT0nc2VjdCcgY29kZXBvaW50PScwMEE3Jy8+CisgIDxlbnRpdHkgbmFtZT0nc2VtaScgY29kZXBvaW50PScwMDNCJy8+CisgIDxlbnRpdHkgbmFtZT0nc2Vzd2FyJyBjb2RlcG9pbnQ9JzI5MjknLz4KKyAgPGVudGl0eSBuYW1lPSdzZXRtaW51cycgY29kZXBvaW50PScyMjE2Jy8+CisgIDxlbnRpdHkgbmFtZT0nc2V0bW4nIGNvZGVwb2ludD0nMjIxNicvPgorICA8ZW50aXR5IG5hbWU9J3NleHQnIGNvZGVwb2ludD0nMjczNicvPgorICA8ZW50aXR5IG5hbWU9J3NmZ3InIGNvZGVwb2ludD0nMDNDMicvPgorICA8ZW50aXR5IG5hbWU9J1NmcicgY29kZXBvaW50PScxRDUxNicvPgorICA8ZW50aXR5IG5hbWU9J3NmcicgY29kZXBvaW50PScxRDUzMCcvPgorICA8ZW50aXR5IG5hbWU9J3Nmcm93bicgY29kZXBvaW50PScyMzIyJy8+CisgIDxlbnRpdHkgbmFtZT0nU2dyJyBjb2RlcG9pbnQ9JzAzQTMnLz4KKyAgPGVudGl0eSBuYW1lPSdzZ3InIGNvZGVwb2ludD0nMDNDMycvPgorICA8ZW50aXR5IG5hbWU9J3NoYXJwJyBjb2RlcG9pbnQ9JzI2NkYnLz4KKyAgPGVudGl0eSBuYW1lPSdTSENIY3knIGNvZGVwb2ludD0nMDQyOScvPgorICA8ZW50aXR5IG5hbWU9J3NoY2hjeScgY29kZXBvaW50PScwNDQ5Jy8+CisgIDxlbnRpdHkgbmFtZT0nU0hjeScgY29kZXBvaW50PScwNDI4Jy8+CisgIDxlbnRpdHkgbmFtZT0nc2hjeScgY29kZXBvaW50PScwNDQ4Jy8+CisgIDxlbnRpdHkgbmFtZT0nU2hvcnREb3duQXJyb3cnIGNvZGVwb2ludD0nMjE5MycvPgorICA8ZW50aXR5IG5hbWU9J1Nob3J0TGVmdEFycm93JyBjb2RlcG9pbnQ9JzIxOTAnLz4KKyAgPGVudGl0eSBuYW1lPSdzaG9ydG1pZCcgY29kZXBvaW50PScyMjIzJy8+CisgIDxlbnRpdHkgbmFtZT0nc2hvcnRwYXJhbGxlbCcgY29kZXBvaW50PScyMjI1Jy8+CisgIDxlbnRpdHkgbmFtZT0nU2hvcnRSaWdodEFycm93JyBjb2RlcG9pbnQ9JzIxOTInLz4KKyAgPGVudGl0eSBuYW1lPSdTaG9ydFVwQXJyb3cnIGNvZGVwb2ludD0nMjE5MScvPgorICA8ZW50aXR5IG5hbWU9J3NoeScgY29kZXBvaW50PScwMEFEJy8+CisgIDxlbnRpdHkgbmFtZT0nU2lnbWEnIGNvZGVwb2ludD0nMDNBMycvPgorICA8ZW50aXR5IG5hbWU9J3NpZ21hJyBjb2RlcG9pbnQ9JzAzQzMnLz4KKyAgPGVudGl0eSBuYW1lPSdzaWdtYWYnIGNvZGVwb2ludD0nMDNDMicvPgorICA8ZW50aXR5IG5hbWU9J3NpZ21hdicgY29kZXBvaW50PScwM0MyJy8+CisgIDxlbnRpdHkgbmFtZT0nc2ltJyBjb2RlcG9pbnQ9JzIyM0MnLz4KKyAgPGVudGl0eSBuYW1lPSdzaW1kb3QnIGNvZGVwb2ludD0nMkE2QScvPgorICA8ZW50aXR5IG5hbWU9J3NpbWUnIGNvZGVwb2ludD0nMjI0MycvPgorICA8ZW50aXR5IG5hbWU9J3NpbWVxJyBjb2RlcG9pbnQ9JzIyNDMnLz4KKyAgPGVudGl0eSBuYW1lPSdzaW1nJyBjb2RlcG9pbnQ9JzJBOUUnLz4KKyAgPGVudGl0eSBuYW1lPSdzaW1nRScgY29kZXBvaW50PScyQUEwJy8+CisgIDxlbnRpdHkgbmFtZT0nc2ltbCcgY29kZXBvaW50PScyQTlEJy8+CisgIDxlbnRpdHkgbmFtZT0nc2ltbEUnIGNvZGVwb2ludD0nMkE5RicvPgorICA8ZW50aXR5IG5hbWU9J3NpbW5lJyBjb2RlcG9pbnQ9JzIyNDYnLz4KKyAgPGVudGl0eSBuYW1lPSdzaW1wbHVzJyBjb2RlcG9pbnQ9JzJBMjQnLz4KKyAgPGVudGl0eSBuYW1lPSdzaW1yYXJyJyBjb2RlcG9pbnQ9JzI5NzInLz4KKyAgPGVudGl0eSBuYW1lPSdzbGFycicgY29kZXBvaW50PScyMTkwJy8+CisgIDxlbnRpdHkgbmFtZT0nU21hbGxDaXJjbGUnIGNvZGVwb2ludD0nMjIxOCcvPgorICA8ZW50aXR5IG5hbWU9J3NtYWxsc2V0bWludXMnIGNvZGVwb2ludD0nMjIxNicvPgorICA8ZW50aXR5IG5hbWU9J3NtYXNocCcgY29kZXBvaW50PScyQTMzJy8+CisgIDxlbnRpdHkgbmFtZT0nc21lcGFyc2wnIGNvZGVwb2ludD0nMjlFNCcvPgorICA8ZW50aXR5IG5hbWU9J3NtaWQnIGNvZGVwb2ludD0nMjIyMycvPgorICA8ZW50aXR5IG5hbWU9J3NtaWxlJyBjb2RlcG9pbnQ9JzIzMjMnLz4KKyAgPGVudGl0eSBuYW1lPSdzbXQnIGNvZGVwb2ludD0nMkFBQScvPgorICA8ZW50aXR5IG5hbWU9J3NtdGUnIGNvZGVwb2ludD0nMkFBQycvPgorICA8ZW50aXR5IG5hbWU9J1NPRlRjeScgY29kZXBvaW50PScwNDJDJy8+CisgIDxlbnRpdHkgbmFtZT0nc29mdGN5JyBjb2RlcG9pbnQ9JzA0NEMnLz4KKyAgPGVudGl0eSBuYW1lPSdzb2wnIGNvZGVwb2ludD0nMDAyRicvPgorICA8ZW50aXR5IG5hbWU9J3NvbGInIGNvZGVwb2ludD0nMjlDNCcvPgorICA8ZW50aXR5IG5hbWU9J3NvbGJhcicgY29kZXBvaW50PScyMzNGJy8+CisgIDxlbnRpdHkgbmFtZT0nU29wZicgY29kZXBvaW50PScxRDU0QScvPgorICA8ZW50aXR5IG5hbWU9J3NvcGYnIGNvZGVwb2ludD0nMUQ1NjQnLz4KKyAgPGVudGl0eSBuYW1lPSdzcGFkZXMnIGNvZGVwb2ludD0nMjY2MCcvPgorICA8ZW50aXR5IG5hbWU9J3NwYWRlc3VpdCcgY29kZXBvaW50PScyNjYwJy8+CisgIDxlbnRpdHkgbmFtZT0nc3BhcicgY29kZXBvaW50PScyMjI1Jy8+CisgIDxlbnRpdHkgbmFtZT0nc3FjYXAnIGNvZGVwb2ludD0nMjI5MycvPgorICA8ZW50aXR5IG5hbWU9J3NxY3VwJyBjb2RlcG9pbnQ9JzIyOTQnLz4KKyAgPGVudGl0eSBuYW1lPSdTcXJ0JyBjb2RlcG9pbnQ9JzIyMUEnLz4KKyAgPGVudGl0eSBuYW1lPSdzcXN1YicgY29kZXBvaW50PScyMjhGJy8+CisgIDxlbnRpdHkgbmFtZT0nc3FzdWJlJyBjb2RlcG9pbnQ9JzIyOTEnLz4KKyAgPGVudGl0eSBuYW1lPSdzcXN1YnNldCcgY29kZXBvaW50PScyMjhGJy8+CisgIDxlbnRpdHkgbmFtZT0nc3FzdWJzZXRlcScgY29kZXBvaW50PScyMjkxJy8+CisgIDxlbnRpdHkgbmFtZT0nc3FzdXAnIGNvZGVwb2ludD0nMjI5MCcvPgorICA8ZW50aXR5IG5hbWU9J3Nxc3VwZScgY29kZXBvaW50PScyMjkyJy8+CisgIDxlbnRpdHkgbmFtZT0nc3FzdXBzZXQnIGNvZGVwb2ludD0nMjI5MCcvPgorICA8ZW50aXR5IG5hbWU9J3Nxc3Vwc2V0ZXEnIGNvZGVwb2ludD0nMjI5MicvPgorICA8ZW50aXR5IG5hbWU9J3NxdScgY29kZXBvaW50PScyNUExJy8+CisgIDxlbnRpdHkgbmFtZT0nc3F1YXJlJyBjb2RlcG9pbnQ9JzI1QTEnLz4KKyAgPGVudGl0eSBuYW1lPSdTcXVhcmVJbnRlcnNlY3Rpb24nIGNvZGVwb2ludD0nMjI5MycvPgorICA8ZW50aXR5IG5hbWU9J1NxdWFyZVN1YnNldCcgY29kZXBvaW50PScyMjhGJy8+CisgIDxlbnRpdHkgbmFtZT0nU3F1YXJlU3Vic2V0RXF1YWwnIGNvZGVwb2ludD0nMjI5MScvPgorICA8ZW50aXR5IG5hbWU9J1NxdWFyZVN1cGVyc2V0JyBjb2RlcG9pbnQ9JzIyOTAnLz4KKyAgPGVudGl0eSBuYW1lPSdTcXVhcmVTdXBlcnNldEVxdWFsJyBjb2RlcG9pbnQ9JzIyOTInLz4KKyAgPGVudGl0eSBuYW1lPSdTcXVhcmVVbmlvbicgY29kZXBvaW50PScyMjk0Jy8+CisgIDxlbnRpdHkgbmFtZT0nc3F1YXJmJyBjb2RlcG9pbnQ9JzI1QUEnLz4KKyAgPGVudGl0eSBuYW1lPSdzcXVmJyBjb2RlcG9pbnQ9JzI1QUEnLz4KKyAgPGVudGl0eSBuYW1lPSdzcmFycicgY29kZXBvaW50PScyMTkyJy8+CisgIDxlbnRpdHkgbmFtZT0nU3NjcicgY29kZXBvaW50PScxRDRBRScvPgorICA8ZW50aXR5IG5hbWU9J3NzY3InIGNvZGVwb2ludD0nMUQ0QzgnLz4KKyAgPGVudGl0eSBuYW1lPSdzc2V0bW4nIGNvZGVwb2ludD0nMjIxNicvPgorICA8ZW50aXR5IG5hbWU9J3NzbWlsZScgY29kZXBvaW50PScyMzIzJy8+CisgIDxlbnRpdHkgbmFtZT0nc3N0YXJmJyBjb2RlcG9pbnQ9JzIyQzYnLz4KKyAgPGVudGl0eSBuYW1lPSdTdGFyJyBjb2RlcG9pbnQ9JzIyQzYnLz4KKyAgPGVudGl0eSBuYW1lPSdzdGFyJyBjb2RlcG9pbnQ9JzI2MDYnLz4KKyAgPGVudGl0eSBuYW1lPSdzdGFyZicgY29kZXBvaW50PScyNjA1Jy8+CisgIDxlbnRpdHkgbmFtZT0nc3RyYWlnaHRlcHNpbG9uJyBjb2RlcG9pbnQ9JzAzRjUnLz4KKyAgPGVudGl0eSBuYW1lPSdzdHJhaWdodHBoaScgY29kZXBvaW50PScwM0Q1Jy8+CisgIDxlbnRpdHkgbmFtZT0nc3RybnMnIGNvZGVwb2ludD0nMDBBRicvPgorICA8ZW50aXR5IG5hbWU9J3N1YicgY29kZXBvaW50PScyMjgyJy8+CisgIDxlbnRpdHkgbmFtZT0nU3ViJyBjb2RlcG9pbnQ9JzIyRDAnLz4KKyAgPGVudGl0eSBuYW1lPSdzdWJkb3QnIGNvZGVwb2ludD0nMkFCRCcvPgorICA8ZW50aXR5IG5hbWU9J3N1YmUnIGNvZGVwb2ludD0nMjI4NicvPgorICA8ZW50aXR5IG5hbWU9J3N1YkUnIGNvZGVwb2ludD0nMkFDNScvPgorICA8ZW50aXR5IG5hbWU9J3N1YmVkb3QnIGNvZGVwb2ludD0nMkFDMycvPgorICA8ZW50aXR5IG5hbWU9J3N1Ym11bHQnIGNvZGVwb2ludD0nMkFDMScvPgorICA8ZW50aXR5IG5hbWU9J3N1Ym5lJyBjb2RlcG9pbnQ9JzIyOEEnLz4KKyAgPGVudGl0eSBuYW1lPSdzdWJuRScgY29kZXBvaW50PScyQUNCJy8+CisgIDxlbnRpdHkgbmFtZT0nc3VicGx1cycgY29kZXBvaW50PScyQUJGJy8+CisgIDxlbnRpdHkgbmFtZT0nc3VicmFycicgY29kZXBvaW50PScyOTc5Jy8+CisgIDxlbnRpdHkgbmFtZT0nc3Vic2V0JyBjb2RlcG9pbnQ9JzIyODInLz4KKyAgPGVudGl0eSBuYW1lPSdTdWJzZXQnIGNvZGVwb2ludD0nMjJEMCcvPgorICA8ZW50aXR5IG5hbWU9J3N1YnNldGVxJyBjb2RlcG9pbnQ9JzIyODYnLz4KKyAgPGVudGl0eSBuYW1lPSdzdWJzZXRlcXEnIGNvZGVwb2ludD0nMkFDNScvPgorICA8ZW50aXR5IG5hbWU9J1N1YnNldEVxdWFsJyBjb2RlcG9pbnQ9JzIyODYnLz4KKyAgPGVudGl0eSBuYW1lPSdzdWJzZXRuZXEnIGNvZGVwb2ludD0nMjI4QScvPgorICA8ZW50aXR5IG5hbWU9J3N1YnNldG5lcXEnIGNvZGVwb2ludD0nMkFDQicvPgorICA8ZW50aXR5IG5hbWU9J3N1YnNpbScgY29kZXBvaW50PScyQUM3Jy8+CisgIDxlbnRpdHkgbmFtZT0nc3Vic3ViJyBjb2RlcG9pbnQ9JzJBRDUnLz4KKyAgPGVudGl0eSBuYW1lPSdzdWJzdXAnIGNvZGVwb2ludD0nMkFEMycvPgorICA8ZW50aXR5IG5hbWU9J3N1Y2MnIGNvZGVwb2ludD0nMjI3QicvPgorICA8ZW50aXR5IG5hbWU9J3N1Y2NhcHByb3gnIGNvZGVwb2ludD0nMkFCOCcvPgorICA8ZW50aXR5IG5hbWU9J3N1Y2NjdXJseWVxJyBjb2RlcG9pbnQ9JzIyN0QnLz4KKyAgPGVudGl0eSBuYW1lPSdTdWNjZWVkcycgY29kZXBvaW50PScyMjdCJy8+CisgIDxlbnRpdHkgbmFtZT0nU3VjY2VlZHNFcXVhbCcgY29kZXBvaW50PScyQUIwJy8+CisgIDxlbnRpdHkgbmFtZT0nU3VjY2VlZHNTbGFudEVxdWFsJyBjb2RlcG9pbnQ9JzIyN0QnLz4KKyAgPGVudGl0eSBuYW1lPSdTdWNjZWVkc1RpbGRlJyBjb2RlcG9pbnQ9JzIyN0YnLz4KKyAgPGVudGl0eSBuYW1lPSdzdWNjZXEnIGNvZGVwb2ludD0nMkFCMCcvPgorICA8ZW50aXR5IG5hbWU9J3N1Y2NuYXBwcm94JyBjb2RlcG9pbnQ9JzJBQkEnLz4KKyAgPGVudGl0eSBuYW1lPSdzdWNjbmVxcScgY29kZXBvaW50PScyQUI2Jy8+CisgIDxlbnRpdHkgbmFtZT0nc3VjY25zaW0nIGNvZGVwb2ludD0nMjJFOScvPgorICA8ZW50aXR5IG5hbWU9J3N1Y2NzaW0nIGNvZGVwb2ludD0nMjI3RicvPgorICA8ZW50aXR5IG5hbWU9J1N1Y2hUaGF0JyBjb2RlcG9pbnQ9JzIyMEInLz4KKyAgPGVudGl0eSBuYW1lPSdzdW0nIGNvZGVwb2ludD0nMjIxMScvPgorICA8ZW50aXR5IG5hbWU9J3N1bmcnIGNvZGVwb2ludD0nMjY2QScvPgorICA8ZW50aXR5IG5hbWU9J3N1cCcgY29kZXBvaW50PScyMjgzJy8+CisgIDxlbnRpdHkgbmFtZT0nU3VwJyBjb2RlcG9pbnQ9JzIyRDEnLz4KKyAgPGVudGl0eSBuYW1lPSdzdXAxJyBjb2RlcG9pbnQ9JzAwQjknLz4KKyAgPGVudGl0eSBuYW1lPSdzdXAyJyBjb2RlcG9pbnQ9JzAwQjInLz4KKyAgPGVudGl0eSBuYW1lPSdzdXAzJyBjb2RlcG9pbnQ9JzAwQjMnLz4KKyAgPGVudGl0eSBuYW1lPSdzdXBkb3QnIGNvZGVwb2ludD0nMkFCRScvPgorICA8ZW50aXR5IG5hbWU9J3N1cGRzdWInIGNvZGVwb2ludD0nMkFEOCcvPgorICA8ZW50aXR5IG5hbWU9J3N1cGUnIGNvZGVwb2ludD0nMjI4NycvPgorICA8ZW50aXR5IG5hbWU9J3N1cEUnIGNvZGVwb2ludD0nMkFDNicvPgorICA8ZW50aXR5IG5hbWU9J3N1cGVkb3QnIGNvZGVwb2ludD0nMkFDNCcvPgorICA8ZW50aXR5IG5hbWU9J1N1cGVyc2V0JyBjb2RlcG9pbnQ9JzIyODMnLz4KKyAgPGVudGl0eSBuYW1lPSdTdXBlcnNldEVxdWFsJyBjb2RlcG9pbnQ9JzIyODcnLz4KKyAgPGVudGl0eSBuYW1lPSdzdXBoc3ViJyBjb2RlcG9pbnQ9JzJBRDcnLz4KKyAgPGVudGl0eSBuYW1lPSdzdXBsYXJyJyBjb2RlcG9pbnQ9JzI5N0InLz4KKyAgPGVudGl0eSBuYW1lPSdzdXBtdWx0JyBjb2RlcG9pbnQ9JzJBQzInLz4KKyAgPGVudGl0eSBuYW1lPSdzdXBuZScgY29kZXBvaW50PScyMjhCJy8+CisgIDxlbnRpdHkgbmFtZT0nc3VwbkUnIGNvZGVwb2ludD0nMkFDQycvPgorICA8ZW50aXR5IG5hbWU9J3N1cHBsdXMnIGNvZGVwb2ludD0nMkFDMCcvPgorICA8ZW50aXR5IG5hbWU9J3N1cHNldCcgY29kZXBvaW50PScyMjgzJy8+CisgIDxlbnRpdHkgbmFtZT0nU3Vwc2V0JyBjb2RlcG9pbnQ9JzIyRDEnLz4KKyAgPGVudGl0eSBuYW1lPSdzdXBzZXRlcScgY29kZXBvaW50PScyMjg3Jy8+CisgIDxlbnRpdHkgbmFtZT0nc3Vwc2V0ZXFxJyBjb2RlcG9pbnQ9JzJBQzYnLz4KKyAgPGVudGl0eSBuYW1lPSdzdXBzZXRuZXEnIGNvZGVwb2ludD0nMjI4QicvPgorICA8ZW50aXR5IG5hbWU9J3N1cHNldG5lcXEnIGNvZGVwb2ludD0nMkFDQycvPgorICA8ZW50aXR5IG5hbWU9J3N1cHNpbScgY29kZXBvaW50PScyQUM4Jy8+CisgIDxlbnRpdHkgbmFtZT0nc3Vwc3ViJyBjb2RlcG9pbnQ9JzJBRDQnLz4KKyAgPGVudGl0eSBuYW1lPSdzdXBzdXAnIGNvZGVwb2ludD0nMkFENicvPgorICA8ZW50aXR5IG5hbWU9J3N3YXJoaycgY29kZXBvaW50PScyOTI2Jy8+CisgIDxlbnRpdHkgbmFtZT0nc3dhcnInIGNvZGVwb2ludD0nMjE5OScvPgorICA8ZW50aXR5IG5hbWU9J3N3QXJyJyBjb2RlcG9pbnQ9JzIxRDknLz4KKyAgPGVudGl0eSBuYW1lPSdzd2Fycm93JyBjb2RlcG9pbnQ9JzIxOTknLz4KKyAgPGVudGl0eSBuYW1lPSdzd253YXInIGNvZGVwb2ludD0nMjkyQScvPgorICA8ZW50aXR5IG5hbWU9J3N6bGlnJyBjb2RlcG9pbnQ9JzAwREYnLz4KKyAgPGVudGl0eSBuYW1lPSdUYWInIGNvZGVwb2ludD0nMDAwOScvPgorICA8ZW50aXR5IG5hbWU9J3RhcmdldCcgY29kZXBvaW50PScyMzE2Jy8+CisgIDxlbnRpdHkgbmFtZT0nVGF1JyBjb2RlcG9pbnQ9JzAzQTQnLz4KKyAgPGVudGl0eSBuYW1lPSd0YXUnIGNvZGVwb2ludD0nMDNDNCcvPgorICA8ZW50aXR5IG5hbWU9J3RicmsnIGNvZGVwb2ludD0nMjNCNCcvPgorICA8ZW50aXR5IG5hbWU9J1RjYXJvbicgY29kZXBvaW50PScwMTY0Jy8+CisgIDxlbnRpdHkgbmFtZT0ndGNhcm9uJyBjb2RlcG9pbnQ9JzAxNjUnLz4KKyAgPGVudGl0eSBuYW1lPSdUY2VkaWwnIGNvZGVwb2ludD0nMDE2MicvPgorICA8ZW50aXR5IG5hbWU9J3RjZWRpbCcgY29kZXBvaW50PScwMTYzJy8+CisgIDxlbnRpdHkgbmFtZT0nVGN5JyBjb2RlcG9pbnQ9JzA0MjInLz4KKyAgPGVudGl0eSBuYW1lPSd0Y3knIGNvZGVwb2ludD0nMDQ0MicvPgorICA8ZW50aXR5IG5hbWU9J3RlbHJlYycgY29kZXBvaW50PScyMzE1Jy8+CisgIDxlbnRpdHkgbmFtZT0nVGZyJyBjb2RlcG9pbnQ9JzFENTE3Jy8+CisgIDxlbnRpdHkgbmFtZT0ndGZyJyBjb2RlcG9pbnQ9JzFENTMxJy8+CisgIDxlbnRpdHkgbmFtZT0nVGdyJyBjb2RlcG9pbnQ9JzAzQTQnLz4KKyAgPGVudGl0eSBuYW1lPSd0Z3InIGNvZGVwb2ludD0nMDNDNCcvPgorICA8ZW50aXR5IG5hbWU9J3RoZXJlNCcgY29kZXBvaW50PScyMjM0Jy8+CisgIDxlbnRpdHkgbmFtZT0ndGhlcmVmb3JlJyBjb2RlcG9pbnQ9JzIyMzQnLz4KKyAgPGVudGl0eSBuYW1lPSdUaGV0YScgY29kZXBvaW50PScwMzk4Jy8+CisgIDxlbnRpdHkgbmFtZT0ndGhldGEnIGNvZGVwb2ludD0nMDNCOCcvPgorICA8ZW50aXR5IG5hbWU9J3RoZXRhc3ltJyBjb2RlcG9pbnQ9JzAzRDEnLz4KKyAgPGVudGl0eSBuYW1lPSd0aGV0YXYnIGNvZGVwb2ludD0nMDNEMScvPgorICA8ZW50aXR5IG5hbWU9J1RIZ3InIGNvZGVwb2ludD0nMDM5OCcvPgorICA8ZW50aXR5IG5hbWU9J3RoZ3InIGNvZGVwb2ludD0nMDNCOCcvPgorICA8ZW50aXR5IG5hbWU9J3RoaWNrYXBwcm94JyBjb2RlcG9pbnQ9JzIyNDgnLz4KKyAgPGVudGl0eSBuYW1lPSd0aGlja3NpbScgY29kZXBvaW50PScyMjNDJy8+CisgIDxlbnRpdHkgbmFtZT0ndGhpbnNwJyBjb2RlcG9pbnQ9JzIwMDknLz4KKyAgPGVudGl0eSBuYW1lPSdUaGluU3BhY2UnIGNvZGVwb2ludD0nMjAwOScvPgorICA8ZW50aXR5IG5hbWU9J3Roa2FwJyBjb2RlcG9pbnQ9JzIyNDgnLz4KKyAgPGVudGl0eSBuYW1lPSd0aGtzaW0nIGNvZGVwb2ludD0nMjIzQycvPgorICA8ZW50aXR5IG5hbWU9J1RIT1JOJyBjb2RlcG9pbnQ9JzAwREUnLz4KKyAgPGVudGl0eSBuYW1lPSd0aG9ybicgY29kZXBvaW50PScwMEZFJy8+CisgIDxlbnRpdHkgbmFtZT0ndGlsZGUnIGNvZGVwb2ludD0nMDJEQycvPgorICA8ZW50aXR5IG5hbWU9J1RpbGRlJyBjb2RlcG9pbnQ9JzIyM0MnLz4KKyAgPGVudGl0eSBuYW1lPSdUaWxkZUVxdWFsJyBjb2RlcG9pbnQ9JzIyNDMnLz4KKyAgPGVudGl0eSBuYW1lPSdUaWxkZUZ1bGxFcXVhbCcgY29kZXBvaW50PScyMjQ1Jy8+CisgIDxlbnRpdHkgbmFtZT0nVGlsZGVUaWxkZScgY29kZXBvaW50PScyMjQ4Jy8+CisgIDxlbnRpdHkgbmFtZT0ndGltZXMnIGNvZGVwb2ludD0nMDBENycvPgorICA8ZW50aXR5IG5hbWU9J3RpbWVzYicgY29kZXBvaW50PScyMkEwJy8+CisgIDxlbnRpdHkgbmFtZT0ndGltZXNiYXInIGNvZGVwb2ludD0nMkEzMScvPgorICA8ZW50aXR5IG5hbWU9J3RpbWVzZCcgY29kZXBvaW50PScyQTMwJy8+CisgIDxlbnRpdHkgbmFtZT0ndGludCcgY29kZXBvaW50PScyMjJEJy8+CisgIDxlbnRpdHkgbmFtZT0ndG9lYScgY29kZXBvaW50PScyOTI4Jy8+CisgIDxlbnRpdHkgbmFtZT0ndG9wJyBjb2RlcG9pbnQ9JzIyQTQnLz4KKyAgPGVudGl0eSBuYW1lPSd0b3Bib3QnIGNvZGVwb2ludD0nMjMzNicvPgorICA8ZW50aXR5IG5hbWU9J3RvcGNpcicgY29kZXBvaW50PScyQUYxJy8+CisgIDxlbnRpdHkgbmFtZT0nVG9wZicgY29kZXBvaW50PScxRDU0QicvPgorICA8ZW50aXR5IG5hbWU9J3RvcGYnIGNvZGVwb2ludD0nMUQ1NjUnLz4KKyAgPGVudGl0eSBuYW1lPSd0b3Bmb3JrJyBjb2RlcG9pbnQ9JzJBREEnLz4KKyAgPGVudGl0eSBuYW1lPSd0b3NhJyBjb2RlcG9pbnQ9JzI5MjknLz4KKyAgPGVudGl0eSBuYW1lPSd0cHJpbWUnIGNvZGVwb2ludD0nMjAzNCcvPgorICA8ZW50aXR5IG5hbWU9J3RyYWRlJyBjb2RlcG9pbnQ9JzIxMjInLz4KKyAgPGVudGl0eSBuYW1lPSd0cmlhbmdsZScgY29kZXBvaW50PScyNUI1Jy8+CisgIDxlbnRpdHkgbmFtZT0ndHJpYW5nbGVkb3duJyBjb2RlcG9pbnQ9JzI1QkYnLz4KKyAgPGVudGl0eSBuYW1lPSd0cmlhbmdsZWxlZnQnIGNvZGVwb2ludD0nMjVDMycvPgorICA8ZW50aXR5IG5hbWU9J3RyaWFuZ2xlbGVmdGVxJyBjb2RlcG9pbnQ9JzIyQjQnLz4KKyAgPGVudGl0eSBuYW1lPSd0cmlhbmdsZXEnIGNvZGVwb2ludD0nMjI1QycvPgorICA8ZW50aXR5IG5hbWU9J3RyaWFuZ2xlcmlnaHQnIGNvZGVwb2ludD0nMjVCOScvPgorICA8ZW50aXR5IG5hbWU9J3RyaWFuZ2xlcmlnaHRlcScgY29kZXBvaW50PScyMkI1Jy8+CisgIDxlbnRpdHkgbmFtZT0ndHJpZG90JyBjb2RlcG9pbnQ9JzI1RUMnLz4KKyAgPGVudGl0eSBuYW1lPSd0cmllJyBjb2RlcG9pbnQ9JzIyNUMnLz4KKyAgPGVudGl0eSBuYW1lPSd0cmltaW51cycgY29kZXBvaW50PScyQTNBJy8+CisgIDxlbnRpdHkgbmFtZT0ndHJpcGx1cycgY29kZXBvaW50PScyQTM5Jy8+CisgIDxlbnRpdHkgbmFtZT0ndHJpc2InIGNvZGVwb2ludD0nMjlDRCcvPgorICA8ZW50aXR5IG5hbWU9J3RyaXRpbWUnIGNvZGVwb2ludD0nMkEzQicvPgorICA8ZW50aXR5IG5hbWU9J3RycGV6aXVtJyBjb2RlcG9pbnQ9JzIzRTInLz4KKyAgPGVudGl0eSBuYW1lPSdUc2NyJyBjb2RlcG9pbnQ9JzFENEFGJy8+CisgIDxlbnRpdHkgbmFtZT0ndHNjcicgY29kZXBvaW50PScxRDRDOScvPgorICA8ZW50aXR5IG5hbWU9J1RTY3knIGNvZGVwb2ludD0nMDQyNicvPgorICA8ZW50aXR5IG5hbWU9J3RzY3knIGNvZGVwb2ludD0nMDQ0NicvPgorICA8ZW50aXR5IG5hbWU9J1RTSGN5JyBjb2RlcG9pbnQ9JzA0MEInLz4KKyAgPGVudGl0eSBuYW1lPSd0c2hjeScgY29kZXBvaW50PScwNDVCJy8+CisgIDxlbnRpdHkgbmFtZT0nVHN0cm9rJyBjb2RlcG9pbnQ9JzAxNjYnLz4KKyAgPGVudGl0eSBuYW1lPSd0c3Ryb2snIGNvZGVwb2ludD0nMDE2NycvPgorICA8ZW50aXR5IG5hbWU9J3R3aXh0JyBjb2RlcG9pbnQ9JzIyNkMnLz4KKyAgPGVudGl0eSBuYW1lPSd0d29oZWFkbGVmdGFycm93JyBjb2RlcG9pbnQ9JzIxOUUnLz4KKyAgPGVudGl0eSBuYW1lPSd0d29oZWFkcmlnaHRhcnJvdycgY29kZXBvaW50PScyMUEwJy8+CisgIDxlbnRpdHkgbmFtZT0nVWFjZ3InIGNvZGVwb2ludD0nMDM4RScvPgorICA8ZW50aXR5IG5hbWU9J3VhY2dyJyBjb2RlcG9pbnQ9JzAzQ0QnLz4KKyAgPGVudGl0eSBuYW1lPSdVYWN1dGUnIGNvZGVwb2ludD0nMDBEQScvPgorICA8ZW50aXR5IG5hbWU9J3VhY3V0ZScgY29kZXBvaW50PScwMEZBJy8+CisgIDxlbnRpdHkgbmFtZT0ndWFycicgY29kZXBvaW50PScyMTkxJy8+CisgIDxlbnRpdHkgbmFtZT0nVWFycicgY29kZXBvaW50PScyMTlGJy8+CisgIDxlbnRpdHkgbmFtZT0ndUFycicgY29kZXBvaW50PScyMUQxJy8+CisgIDxlbnRpdHkgbmFtZT0nVWFycm9jaXInIGNvZGVwb2ludD0nMjk0OScvPgorICA8ZW50aXR5IG5hbWU9J1VicmN5JyBjb2RlcG9pbnQ9JzA0MEUnLz4KKyAgPGVudGl0eSBuYW1lPSd1YnJjeScgY29kZXBvaW50PScwNDVFJy8+CisgIDxlbnRpdHkgbmFtZT0nVWJyZXZlJyBjb2RlcG9pbnQ9JzAxNkMnLz4KKyAgPGVudGl0eSBuYW1lPSd1YnJldmUnIGNvZGVwb2ludD0nMDE2RCcvPgorICA8ZW50aXR5IG5hbWU9J1VjaXJjJyBjb2RlcG9pbnQ9JzAwREInLz4KKyAgPGVudGl0eSBuYW1lPSd1Y2lyYycgY29kZXBvaW50PScwMEZCJy8+CisgIDxlbnRpdHkgbmFtZT0nVWN5JyBjb2RlcG9pbnQ9JzA0MjMnLz4KKyAgPGVudGl0eSBuYW1lPSd1Y3knIGNvZGVwb2ludD0nMDQ0MycvPgorICA8ZW50aXR5IG5hbWU9J3VkYXJyJyBjb2RlcG9pbnQ9JzIxQzUnLz4KKyAgPGVudGl0eSBuYW1lPSdVZGJsYWMnIGNvZGVwb2ludD0nMDE3MCcvPgorICA8ZW50aXR5IG5hbWU9J3VkYmxhYycgY29kZXBvaW50PScwMTcxJy8+CisgIDxlbnRpdHkgbmFtZT0ndWRoYXInIGNvZGVwb2ludD0nMjk2RScvPgorICA8ZW50aXR5IG5hbWU9J3VkaWFncicgY29kZXBvaW50PScwM0IwJy8+CisgIDxlbnRpdHkgbmFtZT0nVWRpZ3InIGNvZGVwb2ludD0nMDNBQicvPgorICA8ZW50aXR5IG5hbWU9J3VkaWdyJyBjb2RlcG9pbnQ9JzAzQ0InLz4KKyAgPGVudGl0eSBuYW1lPSd1ZmlzaHQnIGNvZGVwb2ludD0nMjk3RScvPgorICA8ZW50aXR5IG5hbWU9J1VmcicgY29kZXBvaW50PScxRDUxOCcvPgorICA8ZW50aXR5IG5hbWU9J3VmcicgY29kZXBvaW50PScxRDUzMicvPgorICA8ZW50aXR5IG5hbWU9J1VncicgY29kZXBvaW50PScwM0E1Jy8+CisgIDxlbnRpdHkgbmFtZT0ndWdyJyBjb2RlcG9pbnQ9JzAzQzUnLz4KKyAgPGVudGl0eSBuYW1lPSdVZ3JhdmUnIGNvZGVwb2ludD0nMDBEOScvPgorICA8ZW50aXR5IG5hbWU9J3VncmF2ZScgY29kZXBvaW50PScwMEY5Jy8+CisgIDxlbnRpdHkgbmFtZT0ndUhhcicgY29kZXBvaW50PScyOTYzJy8+CisgIDxlbnRpdHkgbmFtZT0ndWhhcmwnIGNvZGVwb2ludD0nMjFCRicvPgorICA8ZW50aXR5IG5hbWU9J3VoYXJyJyBjb2RlcG9pbnQ9JzIxQkUnLz4KKyAgPGVudGl0eSBuYW1lPSd1aGJsaycgY29kZXBvaW50PScyNTgwJy8+CisgIDxlbnRpdHkgbmFtZT0ndWxjb3JuJyBjb2RlcG9pbnQ9JzIzMUMnLz4KKyAgPGVudGl0eSBuYW1lPSd1bGNvcm5lcicgY29kZXBvaW50PScyMzFDJy8+CisgIDxlbnRpdHkgbmFtZT0ndWxjcm9wJyBjb2RlcG9pbnQ9JzIzMEYnLz4KKyAgPGVudGl0eSBuYW1lPSd1bHRyaScgY29kZXBvaW50PScyNUY4Jy8+CisgIDxlbnRpdHkgbmFtZT0nVW1hY3InIGNvZGVwb2ludD0nMDE2QScvPgorICA8ZW50aXR5IG5hbWU9J3VtYWNyJyBjb2RlcG9pbnQ9JzAxNkInLz4KKyAgPGVudGl0eSBuYW1lPSd1bWwnIGNvZGVwb2ludD0nMDBBOCcvPgorICA8ZW50aXR5IG5hbWU9J1VuZGVyQnJhY2UnIGNvZGVwb2ludD0nRkUzOCcvPgorICA8ZW50aXR5IG5hbWU9J1VuZGVyQnJhY2tldCcgY29kZXBvaW50PScyM0I1Jy8+CisgIDxlbnRpdHkgbmFtZT0nVW5kZXJQYXJlbnRoZXNpcycgY29kZXBvaW50PSdGRTM2Jy8+CisgIDxlbnRpdHkgbmFtZT0nVW5pb24nIGNvZGVwb2ludD0nMjJDMycvPgorICA8ZW50aXR5IG5hbWU9J1VuaW9uUGx1cycgY29kZXBvaW50PScyMjhFJy8+CisgIDxlbnRpdHkgbmFtZT0nVW9nb24nIGNvZGVwb2ludD0nMDE3MicvPgorICA8ZW50aXR5IG5hbWU9J3VvZ29uJyBjb2RlcG9pbnQ9JzAxNzMnLz4KKyAgPGVudGl0eSBuYW1lPSdVb3BmJyBjb2RlcG9pbnQ9JzFENTRDJy8+CisgIDxlbnRpdHkgbmFtZT0ndW9wZicgY29kZXBvaW50PScxRDU2NicvPgorICA8ZW50aXR5IG5hbWU9J3VwYXJyb3cnIGNvZGVwb2ludD0nMjE5MScvPgorICA8ZW50aXR5IG5hbWU9J1VwYXJyb3cnIGNvZGVwb2ludD0nMjFEMScvPgorICA8ZW50aXR5IG5hbWU9J1VwQXJyb3dCYXInIGNvZGVwb2ludD0nMjkxMicvPgorICA8ZW50aXR5IG5hbWU9J1VwQXJyb3dEb3duQXJyb3cnIGNvZGVwb2ludD0nMjFDNScvPgorICA8ZW50aXR5IG5hbWU9J3VwZG93bmFycm93JyBjb2RlcG9pbnQ9JzIxOTUnLz4KKyAgPGVudGl0eSBuYW1lPSdVcGRvd25hcnJvdycgY29kZXBvaW50PScyMUQ1Jy8+CisgIDxlbnRpdHkgbmFtZT0nVXBFcXVpbGlicml1bScgY29kZXBvaW50PScyOTZFJy8+CisgIDxlbnRpdHkgbmFtZT0ndXBoYXJwb29ubGVmdCcgY29kZXBvaW50PScyMUJGJy8+CisgIDxlbnRpdHkgbmFtZT0ndXBoYXJwb29ucmlnaHQnIGNvZGVwb2ludD0nMjFCRScvPgorICA8ZW50aXR5IG5hbWU9J3VwbHVzJyBjb2RlcG9pbnQ9JzIyOEUnLz4KKyAgPGVudGl0eSBuYW1lPSdVcHBlckxlZnRBcnJvdycgY29kZXBvaW50PScyMTk2Jy8+CisgIDxlbnRpdHkgbmFtZT0nVXBwZXJSaWdodEFycm93JyBjb2RlcG9pbnQ9JzIxOTcnLz4KKyAgPGVudGl0eSBuYW1lPSd1cHNpJyBjb2RlcG9pbnQ9JzAzQzUnLz4KKyAgPGVudGl0eSBuYW1lPSdVcHNpJyBjb2RlcG9pbnQ9JzAzRDInLz4KKyAgPGVudGl0eSBuYW1lPSd1cHNpaCcgY29kZXBvaW50PScwM0QyJy8+CisgIDxlbnRpdHkgbmFtZT0nVXBzaWxvbicgY29kZXBvaW50PScwM0E1Jy8+CisgIDxlbnRpdHkgbmFtZT0ndXBzaWxvbicgY29kZXBvaW50PScwM0M1Jy8+CisgIDxlbnRpdHkgbmFtZT0nVXBUZWUnIGNvZGVwb2ludD0nMjJBNScvPgorICA8ZW50aXR5IG5hbWU9J1VwVGVlQXJyb3cnIGNvZGVwb2ludD0nMjFBNScvPgorICA8ZW50aXR5IG5hbWU9J3VwdXBhcnJvd3MnIGNvZGVwb2ludD0nMjFDOCcvPgorICA8ZW50aXR5IG5hbWU9J3VyY29ybicgY29kZXBvaW50PScyMzFEJy8+CisgIDxlbnRpdHkgbmFtZT0ndXJjb3JuZXInIGNvZGVwb2ludD0nMjMxRCcvPgorICA8ZW50aXR5IG5hbWU9J3VyY3JvcCcgY29kZXBvaW50PScyMzBFJy8+CisgIDxlbnRpdHkgbmFtZT0nVXJpbmcnIGNvZGVwb2ludD0nMDE2RScvPgorICA8ZW50aXR5IG5hbWU9J3VyaW5nJyBjb2RlcG9pbnQ9JzAxNkYnLz4KKyAgPGVudGl0eSBuYW1lPSd1cnRyaScgY29kZXBvaW50PScyNUY5Jy8+CisgIDxlbnRpdHkgbmFtZT0nVXNjcicgY29kZXBvaW50PScxRDRCMCcvPgorICA8ZW50aXR5IG5hbWU9J3VzY3InIGNvZGVwb2ludD0nMUQ0Q0EnLz4KKyAgPGVudGl0eSBuYW1lPSd1dGRvdCcgY29kZXBvaW50PScyMkYwJy8+CisgIDxlbnRpdHkgbmFtZT0nVXRpbGRlJyBjb2RlcG9pbnQ9JzAxNjgnLz4KKyAgPGVudGl0eSBuYW1lPSd1dGlsZGUnIGNvZGVwb2ludD0nMDE2OScvPgorICA8ZW50aXR5IG5hbWU9J3V0cmknIGNvZGVwb2ludD0nMjVCNScvPgorICA8ZW50aXR5IG5hbWU9J3V0cmlmJyBjb2RlcG9pbnQ9JzI1QjQnLz4KKyAgPGVudGl0eSBuYW1lPSd1dWFycicgY29kZXBvaW50PScyMUM4Jy8+CisgIDxlbnRpdHkgbmFtZT0nVXVtbCcgY29kZXBvaW50PScwMERDJy8+CisgIDxlbnRpdHkgbmFtZT0ndXVtbCcgY29kZXBvaW50PScwMEZDJy8+CisgIDxlbnRpdHkgbmFtZT0ndXdhbmdsZScgY29kZXBvaW50PScyOUE3Jy8+CisgIDxlbnRpdHkgbmFtZT0ndmFuZ3J0JyBjb2RlcG9pbnQ9JzI5OUMnLz4KKyAgPGVudGl0eSBuYW1lPSd2YXJlcHNpbG9uJyBjb2RlcG9pbnQ9JzAzQjUnLz4KKyAgPGVudGl0eSBuYW1lPSd2YXJrYXBwYScgY29kZXBvaW50PScwM0YwJy8+CisgIDxlbnRpdHkgbmFtZT0ndmFybm90aGluZycgY29kZXBvaW50PScyMjA1Jy8+CisgIDxlbnRpdHkgbmFtZT0ndmFycGhpJyBjb2RlcG9pbnQ9JzAzQzYnLz4KKyAgPGVudGl0eSBuYW1lPSd2YXJwaScgY29kZXBvaW50PScwM0Q2Jy8+CisgIDxlbnRpdHkgbmFtZT0ndmFycHJvcHRvJyBjb2RlcG9pbnQ9JzIyMUQnLz4KKyAgPGVudGl0eSBuYW1lPSd2YXJyJyBjb2RlcG9pbnQ9JzIxOTUnLz4KKyAgPGVudGl0eSBuYW1lPSd2QXJyJyBjb2RlcG9pbnQ9JzIxRDUnLz4KKyAgPGVudGl0eSBuYW1lPSd2YXJyaG8nIGNvZGVwb2ludD0nMDNGMScvPgorICA8ZW50aXR5IG5hbWU9J3ZhcnNpZ21hJyBjb2RlcG9pbnQ9JzAzQzInLz4KKyAgPGVudGl0eSBuYW1lPSd2YXJ0aGV0YScgY29kZXBvaW50PScwM0QxJy8+CisgIDxlbnRpdHkgbmFtZT0ndmFydHJpYW5nbGVsZWZ0JyBjb2RlcG9pbnQ9JzIyQjInLz4KKyAgPGVudGl0eSBuYW1lPSd2YXJ0cmlhbmdsZXJpZ2h0JyBjb2RlcG9pbnQ9JzIyQjMnLz4KKyAgPGVudGl0eSBuYW1lPSd2QmFyJyBjb2RlcG9pbnQ9JzJBRTgnLz4KKyAgPGVudGl0eSBuYW1lPSdWYmFyJyBjb2RlcG9pbnQ9JzJBRUInLz4KKyAgPGVudGl0eSBuYW1lPSd2QmFydicgY29kZXBvaW50PScyQUU5Jy8+CisgIDxlbnRpdHkgbmFtZT0nVmN5JyBjb2RlcG9pbnQ9JzA0MTInLz4KKyAgPGVudGl0eSBuYW1lPSd2Y3knIGNvZGVwb2ludD0nMDQzMicvPgorICA8ZW50aXR5IG5hbWU9J3ZkYXNoJyBjb2RlcG9pbnQ9JzIyQTInLz4KKyAgPGVudGl0eSBuYW1lPSd2RGFzaCcgY29kZXBvaW50PScyMkE4Jy8+CisgIDxlbnRpdHkgbmFtZT0nVmRhc2gnIGNvZGVwb2ludD0nMjJBOScvPgorICA8ZW50aXR5IG5hbWU9J1ZEYXNoJyBjb2RlcG9pbnQ9JzIyQUInLz4KKyAgPGVudGl0eSBuYW1lPSdWZGFzaGwnIGNvZGVwb2ludD0nMkFFNicvPgorICA8ZW50aXR5IG5hbWU9J3ZlZScgY29kZXBvaW50PScyMjI4Jy8+CisgIDxlbnRpdHkgbmFtZT0nVmVlJyBjb2RlcG9pbnQ9JzIyQzEnLz4KKyAgPGVudGl0eSBuYW1lPSd2ZWViYXInIGNvZGVwb2ludD0nMjJCQicvPgorICA8ZW50aXR5IG5hbWU9J3ZlZWVxJyBjb2RlcG9pbnQ9JzIyNUEnLz4KKyAgPGVudGl0eSBuYW1lPSd2ZWxsaXAnIGNvZGVwb2ludD0nMjJFRScvPgorICA8ZW50aXR5IG5hbWU9J3ZlcmJhcicgY29kZXBvaW50PScwMDdDJy8+CisgIDxlbnRpdHkgbmFtZT0nVmVyYmFyJyBjb2RlcG9pbnQ9JzIwMTYnLz4KKyAgPGVudGl0eSBuYW1lPSd2ZXJ0JyBjb2RlcG9pbnQ9JzAwN0MnLz4KKyAgPGVudGl0eSBuYW1lPSdWZXJ0JyBjb2RlcG9pbnQ9JzIwMTYnLz4KKyAgPGVudGl0eSBuYW1lPSdWZXJ0aWNhbEJhcicgY29kZXBvaW50PScyMjIzJy8+CisgIDxlbnRpdHkgbmFtZT0nVmVydGljYWxMaW5lJyBjb2RlcG9pbnQ9JzAwN0MnLz4KKyAgPGVudGl0eSBuYW1lPSdWZXJ0aWNhbFNlcGFyYXRvcicgY29kZXBvaW50PScyNzU4Jy8+CisgIDxlbnRpdHkgbmFtZT0nVmVydGljYWxUaWxkZScgY29kZXBvaW50PScyMjQwJy8+CisgIDxlbnRpdHkgbmFtZT0nVmVyeVRoaW5TcGFjZScgY29kZXBvaW50PScyMDBBJy8+CisgIDxlbnRpdHkgbmFtZT0nVmZyJyBjb2RlcG9pbnQ9JzFENTE5Jy8+CisgIDxlbnRpdHkgbmFtZT0ndmZyJyBjb2RlcG9pbnQ9JzFENTMzJy8+CisgIDxlbnRpdHkgbmFtZT0ndmx0cmknIGNvZGVwb2ludD0nMjJCMicvPgorICA8ZW50aXR5IG5hbWU9J1ZvcGYnIGNvZGVwb2ludD0nMUQ1NEQnLz4KKyAgPGVudGl0eSBuYW1lPSd2b3BmJyBjb2RlcG9pbnQ9JzFENTY3Jy8+CisgIDxlbnRpdHkgbmFtZT0ndnByb3AnIGNvZGVwb2ludD0nMjIxRCcvPgorICA8ZW50aXR5IG5hbWU9J3ZydHJpJyBjb2RlcG9pbnQ9JzIyQjMnLz4KKyAgPGVudGl0eSBuYW1lPSdWc2NyJyBjb2RlcG9pbnQ9JzFENEIxJy8+CisgIDxlbnRpdHkgbmFtZT0ndnNjcicgY29kZXBvaW50PScxRDRDQicvPgorICA8ZW50aXR5IG5hbWU9J1Z2ZGFzaCcgY29kZXBvaW50PScyMkFBJy8+CisgIDxlbnRpdHkgbmFtZT0ndnppZ3phZycgY29kZXBvaW50PScyOTlBJy8+CisgIDxlbnRpdHkgbmFtZT0nV2NpcmMnIGNvZGVwb2ludD0nMDE3NCcvPgorICA8ZW50aXR5IG5hbWU9J3djaXJjJyBjb2RlcG9pbnQ9JzAxNzUnLz4KKyAgPGVudGl0eSBuYW1lPSd3ZWRiYXInIGNvZGVwb2ludD0nMkE1RicvPgorICA8ZW50aXR5IG5hbWU9J3dlZGdlJyBjb2RlcG9pbnQ9JzIyMjcnLz4KKyAgPGVudGl0eSBuYW1lPSdXZWRnZScgY29kZXBvaW50PScyMkMwJy8+CisgIDxlbnRpdHkgbmFtZT0nd2VkZ2VxJyBjb2RlcG9pbnQ9JzIyNTknLz4KKyAgPGVudGl0eSBuYW1lPSd3ZWllcnAnIGNvZGVwb2ludD0nMjExOCcvPgorICA8ZW50aXR5IG5hbWU9J1dmcicgY29kZXBvaW50PScxRDUxQScvPgorICA8ZW50aXR5IG5hbWU9J3dmcicgY29kZXBvaW50PScxRDUzNCcvPgorICA8ZW50aXR5IG5hbWU9J1dvcGYnIGNvZGVwb2ludD0nMUQ1NEUnLz4KKyAgPGVudGl0eSBuYW1lPSd3b3BmJyBjb2RlcG9pbnQ9JzFENTY4Jy8+CisgIDxlbnRpdHkgbmFtZT0nd3AnIGNvZGVwb2ludD0nMjExOCcvPgorICA8ZW50aXR5IG5hbWU9J3dyJyBjb2RlcG9pbnQ9JzIyNDAnLz4KKyAgPGVudGl0eSBuYW1lPSd3cmVhdGgnIGNvZGVwb2ludD0nMjI0MCcvPgorICA8ZW50aXR5IG5hbWU9J1dzY3InIGNvZGVwb2ludD0nMUQ0QjInLz4KKyAgPGVudGl0eSBuYW1lPSd3c2NyJyBjb2RlcG9pbnQ9JzFENENDJy8+CisgIDxlbnRpdHkgbmFtZT0neGNhcCcgY29kZXBvaW50PScyMkMyJy8+CisgIDxlbnRpdHkgbmFtZT0neGNpcmMnIGNvZGVwb2ludD0nMjVFRicvPgorICA8ZW50aXR5IG5hbWU9J3hjdXAnIGNvZGVwb2ludD0nMjJDMycvPgorICA8ZW50aXR5IG5hbWU9J3hkdHJpJyBjb2RlcG9pbnQ9JzI1QkQnLz4KKyAgPGVudGl0eSBuYW1lPSdYZnInIGNvZGVwb2ludD0nMUQ1MUInLz4KKyAgPGVudGl0eSBuYW1lPSd4ZnInIGNvZGVwb2ludD0nMUQ1MzUnLz4KKyAgPGVudGl0eSBuYW1lPSdYZ3InIGNvZGVwb2ludD0nMDM5RScvPgorICA8ZW50aXR5IG5hbWU9J3hncicgY29kZXBvaW50PScwM0JFJy8+CisgIDxlbnRpdHkgbmFtZT0neGhhcnInIGNvZGVwb2ludD0nMjdGNycvPgorICA8ZW50aXR5IG5hbWU9J3hoQXJyJyBjb2RlcG9pbnQ9JzI3RkEnLz4KKyAgPGVudGl0eSBuYW1lPSdYaScgY29kZXBvaW50PScwMzlFJy8+CisgIDxlbnRpdHkgbmFtZT0neGknIGNvZGVwb2ludD0nMDNCRScvPgorICA8ZW50aXR5IG5hbWU9J3hsYXJyJyBjb2RlcG9pbnQ9JzI3RjUnLz4KKyAgPGVudGl0eSBuYW1lPSd4bEFycicgY29kZXBvaW50PScyN0Y4Jy8+CisgIDxlbnRpdHkgbmFtZT0neG1hcCcgY29kZXBvaW50PScyN0ZDJy8+CisgIDxlbnRpdHkgbmFtZT0neG5pcycgY29kZXBvaW50PScyMkZCJy8+CisgIDxlbnRpdHkgbmFtZT0neG9kb3QnIGNvZGVwb2ludD0nMkEwMCcvPgorICA8ZW50aXR5IG5hbWU9J1hvcGYnIGNvZGVwb2ludD0nMUQ1NEYnLz4KKyAgPGVudGl0eSBuYW1lPSd4b3BmJyBjb2RlcG9pbnQ9JzFENTY5Jy8+CisgIDxlbnRpdHkgbmFtZT0neG9wbHVzJyBjb2RlcG9pbnQ9JzJBMDEnLz4KKyAgPGVudGl0eSBuYW1lPSd4b3RpbWUnIGNvZGVwb2ludD0nMkEwMicvPgorICA8ZW50aXR5IG5hbWU9J3hyYXJyJyBjb2RlcG9pbnQ9JzI3RjYnLz4KKyAgPGVudGl0eSBuYW1lPSd4ckFycicgY29kZXBvaW50PScyN0Y5Jy8+CisgIDxlbnRpdHkgbmFtZT0nWHNjcicgY29kZXBvaW50PScxRDRCMycvPgorICA8ZW50aXR5IG5hbWU9J3hzY3InIGNvZGVwb2ludD0nMUQ0Q0QnLz4KKyAgPGVudGl0eSBuYW1lPSd4c3FjdXAnIGNvZGVwb2ludD0nMkEwNicvPgorICA8ZW50aXR5IG5hbWU9J3h1cGx1cycgY29kZXBvaW50PScyQTA0Jy8+CisgIDxlbnRpdHkgbmFtZT0neHV0cmknIGNvZGVwb2ludD0nMjVCMycvPgorICA8ZW50aXR5IG5hbWU9J3h2ZWUnIGNvZGVwb2ludD0nMjJDMScvPgorICA8ZW50aXR5IG5hbWU9J3h3ZWRnZScgY29kZXBvaW50PScyMkMwJy8+CisgIDxlbnRpdHkgbmFtZT0nWWFjdXRlJyBjb2RlcG9pbnQ9JzAwREQnLz4KKyAgPGVudGl0eSBuYW1lPSd5YWN1dGUnIGNvZGVwb2ludD0nMDBGRCcvPgorICA8ZW50aXR5IG5hbWU9J1lBY3knIGNvZGVwb2ludD0nMDQyRicvPgorICA8ZW50aXR5IG5hbWU9J3lhY3knIGNvZGVwb2ludD0nMDQ0RicvPgorICA8ZW50aXR5IG5hbWU9J1ljaXJjJyBjb2RlcG9pbnQ9JzAxNzYnLz4KKyAgPGVudGl0eSBuYW1lPSd5Y2lyYycgY29kZXBvaW50PScwMTc3Jy8+CisgIDxlbnRpdHkgbmFtZT0nWWN5JyBjb2RlcG9pbnQ9JzA0MkInLz4KKyAgPGVudGl0eSBuYW1lPSd5Y3knIGNvZGVwb2ludD0nMDQ0QicvPgorICA8ZW50aXR5IG5hbWU9J3llbicgY29kZXBvaW50PScwMEE1Jy8+CisgIDxlbnRpdHkgbmFtZT0nWWZyJyBjb2RlcG9pbnQ9JzFENTFDJy8+CisgIDxlbnRpdHkgbmFtZT0neWZyJyBjb2RlcG9pbnQ9JzFENTM2Jy8+CisgIDxlbnRpdHkgbmFtZT0nWUljeScgY29kZXBvaW50PScwNDA3Jy8+CisgIDxlbnRpdHkgbmFtZT0neWljeScgY29kZXBvaW50PScwNDU3Jy8+CisgIDxlbnRpdHkgbmFtZT0nWW9wZicgY29kZXBvaW50PScxRDU1MCcvPgorICA8ZW50aXR5IG5hbWU9J3lvcGYnIGNvZGVwb2ludD0nMUQ1NkEnLz4KKyAgPGVudGl0eSBuYW1lPSdZc2NyJyBjb2RlcG9pbnQ9JzFENEI0Jy8+CisgIDxlbnRpdHkgbmFtZT0neXNjcicgY29kZXBvaW50PScxRDRDRScvPgorICA8ZW50aXR5IG5hbWU9J1lVY3knIGNvZGVwb2ludD0nMDQyRScvPgorICA8ZW50aXR5IG5hbWU9J3l1Y3knIGNvZGVwb2ludD0nMDQ0RScvPgorICA8ZW50aXR5IG5hbWU9J3l1bWwnIGNvZGVwb2ludD0nMDBGRicvPgorICA8ZW50aXR5IG5hbWU9J1l1bWwnIGNvZGVwb2ludD0nMDE3OCcvPgorICA8ZW50aXR5IG5hbWU9J1phY3V0ZScgY29kZXBvaW50PScwMTc5Jy8+CisgIDxlbnRpdHkgbmFtZT0nemFjdXRlJyBjb2RlcG9pbnQ9JzAxN0EnLz4KKyAgPGVudGl0eSBuYW1lPSdaY2Fyb24nIGNvZGVwb2ludD0nMDE3RCcvPgorICA8ZW50aXR5IG5hbWU9J3pjYXJvbicgY29kZXBvaW50PScwMTdFJy8+CisgIDxlbnRpdHkgbmFtZT0nWmN5JyBjb2RlcG9pbnQ9JzA0MTcnLz4KKyAgPGVudGl0eSBuYW1lPSd6Y3knIGNvZGVwb2ludD0nMDQzNycvPgorICA8ZW50aXR5IG5hbWU9J1pkb3QnIGNvZGVwb2ludD0nMDE3QicvPgorICA8ZW50aXR5IG5hbWU9J3pkb3QnIGNvZGVwb2ludD0nMDE3QycvPgorICA8ZW50aXR5IG5hbWU9J3plZXRyZicgY29kZXBvaW50PScyMTI4Jy8+CisgIDxlbnRpdHkgbmFtZT0nWmVyb1dpZHRoU3BhY2UnIGNvZGVwb2ludD0nMjAwQicvPgorICA8ZW50aXR5IG5hbWU9J1pldGEnIGNvZGVwb2ludD0nMDM5NicvPgorICA8ZW50aXR5IG5hbWU9J3pldGEnIGNvZGVwb2ludD0nMDNCNicvPgorICA8ZW50aXR5IG5hbWU9J1pmcicgY29kZXBvaW50PScyMTI4Jy8+CisgIDxlbnRpdHkgbmFtZT0nemZyJyBjb2RlcG9pbnQ9JzFENTM3Jy8+CisgIDxlbnRpdHkgbmFtZT0nWmdyJyBjb2RlcG9pbnQ9JzAzOTYnLz4KKyAgPGVudGl0eSBuYW1lPSd6Z3InIGNvZGVwb2ludD0nMDNCNicvPgorICA8ZW50aXR5IG5hbWU9J1pIY3knIGNvZGVwb2ludD0nMDQxNicvPgorICA8ZW50aXR5IG5hbWU9J3poY3knIGNvZGVwb2ludD0nMDQzNicvPgorICA8ZW50aXR5IG5hbWU9J3ppZ3JhcnInIGNvZGVwb2ludD0nMjFERCcvPgorICA8ZW50aXR5IG5hbWU9J1pvcGYnIGNvZGVwb2ludD0nMjEyNCcvPgorICA8ZW50aXR5IG5hbWU9J3pvcGYnIGNvZGVwb2ludD0nMUQ1NkInLz4KKyAgPGVudGl0eSBuYW1lPSdac2NyJyBjb2RlcG9pbnQ9JzFENEI1Jy8+CisgIDxlbnRpdHkgbmFtZT0nenNjcicgY29kZXBvaW50PScxRDRDRicvPgorICA8ZW50aXR5IG5hbWU9J3p3aicgY29kZXBvaW50PScyMDBEJy8+CisgIDxlbnRpdHkgbmFtZT0nenduaicgY29kZXBvaW50PScyMDBDJy8+CisKKyAgPGdyb3VwIGlkPSdNX0FSRUEnLz4KKyAgPGdyb3VwIGlkPSdNX0JMT0NLJy8+CisgIDxncm91cCBpZD0nTV9CTE9DS0lOTElORScvPgorICA8Z3JvdXAgaWQ9J01fQk9EWScvPgorICA8Z3JvdXAgaWQ9J01fQ0VMTCcvPgorICA8Z3JvdXAgaWQ9J01fQ09MJy8+CisgIDxncm91cCBpZD0nTV9ERUYnLz4KKyAgPGdyb3VwIGlkPSdNX0ZPUk0nLz4KKyAgPGdyb3VwIGlkPSdNX0ZSQU1FJy8+CisgIDxncm91cCBpZD0nTV9IRUFEJy8+CisgIDxncm91cCBpZD0nTV9IVE1MJy8+CisgIDxncm91cCBpZD0nTV9JTkxJTkUnLz4KKyAgPGdyb3VwIGlkPSdNX0xFR0VORCcvPgorICA8Z3JvdXAgaWQ9J01fTEknLz4KKyAgPGdyb3VwIGlkPSdNX05PTElOSycvPgorICA8Z3JvdXAgaWQ9J01fT1BUSU9OJy8+CisgIDxncm91cCBpZD0nTV9PUFRJT05TJy8+CisgIDxncm91cCBpZD0nTV9QJy8+CisgIDxncm91cCBpZD0nTV9QQVJBTScvPgorICA8Z3JvdXAgaWQ9J01fVEFCTEUnLz4KKyAgPGdyb3VwIGlkPSdNX1RBQlVMQVInLz4KKyAgPGdyb3VwIGlkPSdNX1RSJy8+CisgIDxlbGVtZW50IG5hbWU9J2h0bWwnIHR5cGU9J2VsZW1lbnQnPgorICAgIDxpc1Jvb3QvPgorICAgIDxjb250YWlucyBncm91cD0nTV9IVE1MJy8+CisgICAgPGVsZW1lbnQgbmFtZT0nYm9keScgdHlwZT0nbWl4ZWQnIHRleHQtcGFyZW50PSd0cnVlJz4KKyAgICAgIDxtZW1iZXJPZiBncm91cD0nTV9IVE1MJy8+CisgICAgICA8bWVtYmVyT2YgZ3JvdXA9J01fQk9EWScvPgorICAgICAgPGNvbnRhaW5zIGdyb3VwPSdNX0lOTElORScvPgorICAgICAgPGNvbnRhaW5zIGdyb3VwPSdNX0JMT0NLJy8+CisgICAgICA8ZWxlbWVudCBuYW1lPSdhJyB0eXBlPSdtaXhlZCc+CisgICAgICAgIDxtZW1iZXJPZiBncm91cD0nTV9JTkxJTkUnLz4KKyAgICAgICAgPGNvbnRhaW5zIGdyb3VwPSdNX05PTElOSycvPgorICAgICAgICA8YXR0cmlidXRlIG5hbWU9J2hyZWZsYW5nJyB0eXBlPSdOTVRPS0VOJyAvPgorICAgICAgICA8YXR0cmlidXRlIG5hbWU9J3NoYXBlJyBkZWZhdWx0PSdyZWN0Jy8+CisgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ndGFiaW5kZXgnIHR5cGU9J05NVE9LRU4nIC8+CisgICAgICA8L2VsZW1lbnQ+CisgICAgICA8ZWxlbWVudCBuYW1lPSdhYmJyJyBjbG9zZU1vZGU9J3Jlc3RhcnRhYmxlJyB0eXBlPSdtaXhlZCc+CisgICAgICAgIDxtZW1iZXJPZiBncm91cD0nTV9JTkxJTkUnLz4KKyAgICAgICAgPG1lbWJlck9mIGdyb3VwPSdNX05PTElOSycvPgorICAgICAgICA8Y29udGFpbnMgZ3JvdXA9J01fSU5MSU5FJy8+CisgICAgICA8L2VsZW1lbnQ+CisgICAgICA8ZWxlbWVudCBuYW1lPSdhY3JvbnltJyBjbG9zZU1vZGU9J3Jlc3RhcnRhYmxlJyB0eXBlPSdtaXhlZCc+CisgICAgICAgIDxtZW1iZXJPZiBncm91cD0nTV9JTkxJTkUnLz4KKyAgICAgICAgPG1lbWJlck9mIGdyb3VwPSdNX05PTElOSycvPgorICAgICAgICA8Y29udGFpbnMgZ3JvdXA9J01fSU5MSU5FJy8+CisgICAgICA8L2VsZW1lbnQ+CisgICAgICA8ZWxlbWVudCBuYW1lPSdhZGRyZXNzJyB0eXBlPSdtaXhlZCc+CisgICAgICAgIDxtZW1iZXJPZiBncm91cD0nTV9CTE9DSycvPgorICAgICAgICA8Y29udGFpbnMgZ3JvdXA9J01fSU5MSU5FJy8+CisgICAgICAgIDxjb250YWlucyBncm91cD0nTV9QJy8+CisgICAgICA8L2VsZW1lbnQ+CisgICAgICA8ZWxlbWVudCBuYW1lPSdhcHBsZXQnIHR5cGU9J21peGVkJz4KKyAgICAgICAgPG1lbWJlck9mIGdyb3VwPSdNX0lOTElORScvPgorICAgICAgICA8bWVtYmVyT2YgZ3JvdXA9J01fTk9MSU5LJy8+CisgICAgICAgIDxjb250YWlucyBncm91cD0nTV9QQVJBTScvPgorICAgICAgICA8Y29udGFpbnMgZ3JvdXA9J01fSU5MSU5FJy8+CisgICAgICAgIDxjb250YWlucyBncm91cD0nTV9CTE9DSycvPgorICAgICAgICA8YXR0cmlidXRlIG5hbWU9J2FsaWduJyB0eXBlPSdOTVRPS0VOJyAvPgorICAgICAgPC9lbGVtZW50PgorICAgICAgPGVsZW1lbnQgbmFtZT0nYicgY2xvc2VNb2RlPSdyZXN0YXJ0YWJsZScgdHlwZT0nbWl4ZWQnPgorICAgICAgICA8bWVtYmVyT2YgZ3JvdXA9J01fSU5MSU5FJy8+CisgICAgICAgIDxtZW1iZXJPZiBncm91cD0nTV9OT0xJTksnLz4KKyAgICAgICAgPGNvbnRhaW5zIGdyb3VwPSdNX0lOTElORScvPgorICAgICAgPC9lbGVtZW50PgorICAgICAgPGVsZW1lbnQgbmFtZT0nYmFzZWZvbnQnIHR5cGU9J2VtcHR5Jz4KKyAgICAgICAgPG1lbWJlck9mIGdyb3VwPSdNX0lOTElORScvPgorICAgICAgICA8bWVtYmVyT2YgZ3JvdXA9J01fTk9MSU5LJy8+CisgICAgICA8L2VsZW1lbnQ+CisgICAgICA8ZWxlbWVudCBuYW1lPSdiZG8nIGNsb3NlTW9kZT0ncmVzdGFydGFibGUnIHR5cGU9J21peGVkJz4KKyAgICAgICAgPG1lbWJlck9mIGdyb3VwPSdNX0lOTElORScvPgorICAgICAgICA8bWVtYmVyT2YgZ3JvdXA9J01fTk9MSU5LJy8+CisgICAgICAgIDxjb250YWlucyBncm91cD0nTV9JTkxJTkUnLz4KKyAgICAgIDwvZWxlbWVudD4KKyAgICAgIDxlbGVtZW50IG5hbWU9J2JpZycgY2xvc2VNb2RlPSdyZXN0YXJ0YWJsZScgdHlwZT0nbWl4ZWQnPgorICAgICAgICA8bWVtYmVyT2YgZ3JvdXA9J01fSU5MSU5FJy8+CisgICAgICAgIDxtZW1iZXJPZiBncm91cD0nTV9OT0xJTksnLz4KKyAgICAgICAgPGNvbnRhaW5zIGdyb3VwPSdNX0lOTElORScvPgorICAgICAgPC9lbGVtZW50PgorICAgICAgPGVsZW1lbnQgbmFtZT0nYmxpbmsnIGNsb3NlTW9kZT0ncmVzdGFydGFibGUnIHR5cGU9J21peGVkJz4KKyAgICAgICAgPG1lbWJlck9mIGdyb3VwPSdNX0lOTElORScvPgorICAgICAgICA8bWVtYmVyT2YgZ3JvdXA9J01fTk9MSU5LJy8+CisgICAgICAgIDxjb250YWlucyBncm91cD0nTV9JTkxJTkUnLz4KKyAgICAgIDwvZWxlbWVudD4KKyAgICAgIDxlbGVtZW50IG5hbWU9J2Jsb2NrcXVvdGUnIHR5cGU9J21peGVkJz4KKyAgICAgICAgPG1lbWJlck9mIGdyb3VwPSdNX0JMT0NLJy8+CisgICAgICAgIDxjb250YWlucyBncm91cD0nTV9JTkxJTkUnLz4KKyAgICAgICAgPGNvbnRhaW5zIGdyb3VwPSdNX0JMT0NLJy8+CisgICAgICA8L2VsZW1lbnQ+CisgICAgICA8ZWxlbWVudCBuYW1lPSdicicgdHlwZT0nZW1wdHknPgorICAgICAgICA8bWVtYmVyT2YgZ3JvdXA9J01fSU5MSU5FJy8+CisgICAgICAgIDxtZW1iZXJPZiBncm91cD0nTV9OT0xJTksnLz4KKyAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSdjbGVhcicgZGVmYXVsdD0nbm9uZScvPgorICAgICAgPC9lbGVtZW50PgorICAgICAgPGVsZW1lbnQgbmFtZT0nY2FudmFzJyB0eXBlPSdtaXhlZCc+CisgICAgICAgIDxtZW1iZXJPZiBncm91cD0nTV9JTkxJTkUnLz4KKyAgICAgICAgPG1lbWJlck9mIGdyb3VwPSdNX05PTElOSycvPgorICAgICAgICA8Y29udGFpbnMgZ3JvdXA9J01fSU5MSU5FJy8+CisgICAgICA8L2VsZW1lbnQ+CisgICAgICA8ZWxlbWVudCBuYW1lPSdjZW50ZXInIHR5cGU9J21peGVkJz4KKyAgICAgICAgPG1lbWJlck9mIGdyb3VwPSdNX0JMT0NLJy8+CisgICAgICAgIDxjb250YWlucyBncm91cD0nTV9JTkxJTkUnLz4KKyAgICAgICAgPGNvbnRhaW5zIGdyb3VwPSdNX0JMT0NLJy8+CisgICAgICA8L2VsZW1lbnQ+CisgICAgICA8ZWxlbWVudCBuYW1lPSdjaXRlJyBjbG9zZU1vZGU9J3Jlc3RhcnRhYmxlJyB0eXBlPSdtaXhlZCc+CisgICAgICAgIDxtZW1iZXJPZiBncm91cD0nTV9JTkxJTkUnLz4KKyAgICAgICAgPG1lbWJlck9mIGdyb3VwPSdNX05PTElOSycvPgorICAgICAgICA8Y29udGFpbnMgZ3JvdXA9J01fSU5MSU5FJy8+CisgICAgICA8L2VsZW1lbnQ+CisgICAgICA8ZWxlbWVudCBuYW1lPSdjb2RlJyBjbG9zZU1vZGU9J3Jlc3RhcnRhYmxlJyB0eXBlPSdtaXhlZCc+CisgICAgICAgIDxtZW1iZXJPZiBncm91cD0nTV9JTkxJTkUnLz4KKyAgICAgICAgPG1lbWJlck9mIGdyb3VwPSdNX05PTElOSycvPgorICAgICAgICA8Y29udGFpbnMgZ3JvdXA9J01fSU5MSU5FJy8+CisgICAgICA8L2VsZW1lbnQ+CisgICAgICA8ZWxlbWVudCBuYW1lPSdjb21tZW50JyB0eXBlPSdtaXhlZCc+CisgICAgICAgIDxtZW1iZXJPZiBncm91cD0nTV9JTkxJTkUnLz4KKyAgICAgICAgPG1lbWJlck9mIGdyb3VwPSdNX05PTElOSycvPgorICAgICAgICA8Y29udGFpbnMgZ3JvdXA9J01fSU5MSU5FJy8+CisgICAgICA8L2VsZW1lbnQ+CisgICAgICA8ZWxlbWVudCBuYW1lPSdkZWwnIGNsb3NlTW9kZT0ncmVzdGFydGFibGUnIHR5cGU9J21peGVkJz4KKyAgICAgICAgPG1lbWJlck9mIGdyb3VwPSdNX0lOTElORScvPgorICAgICAgICA8bWVtYmVyT2YgZ3JvdXA9J01fQkxPQ0tJTkxJTkUnLz4KKyAgICAgICAgPG1lbWJlck9mIGdyb3VwPSdNX0JMT0NLJy8+CisgICAgICAgIDxjb250YWlucyBncm91cD0nTV9JTkxJTkUnLz4KKyAgICAgICAgPGNvbnRhaW5zIGdyb3VwPSdNX0JMT0NLJy8+CisgICAgICA8L2VsZW1lbnQ+CisgICAgICA8ZWxlbWVudCBuYW1lPSdkZm4nIGNsb3NlTW9kZT0ncmVzdGFydGFibGUnIHR5cGU9J21peGVkJz4KKyAgICAgICAgPG1lbWJlck9mIGdyb3VwPSdNX0lOTElORScvPgorICAgICAgICA8bWVtYmVyT2YgZ3JvdXA9J01fTk9MSU5LJy8+CisgICAgICAgIDxjb250YWlucyBncm91cD0nTV9JTkxJTkUnLz4KKyAgICAgIDwvZWxlbWVudD4KKyAgICAgIDxlbGVtZW50IG5hbWU9J2RpcicgdHlwZT0nZWxlbWVudCc+CisgICAgICAgIDxtZW1iZXJPZiBncm91cD0nTV9CTE9DSycvPgorICAgICAgICA8Y29udGFpbnMgZ3JvdXA9J01fTEknLz4KKyAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSdjb21wYWN0JyB0eXBlPSdCT09MRUFOJyAvPgorICAgICAgPC9lbGVtZW50PgorICAgICAgPGVsZW1lbnQgbmFtZT0nZGl2JyB0eXBlPSdtaXhlZCc+CisgICAgICAgIDxtZW1iZXJPZiBncm91cD0nTV9CTE9DSycvPgorICAgICAgICA8Y29udGFpbnMgZ3JvdXA9J01fSU5MSU5FJy8+CisgICAgICAgIDxjb250YWlucyBncm91cD0nTV9CTE9DSycvPgorICAgICAgICA8YXR0cmlidXRlIG5hbWU9J2FsaWduJyB0eXBlPSdOTVRPS0VOJyAvPgorICAgICAgPC9lbGVtZW50PgorICAgICAgPGVsZW1lbnQgbmFtZT0nZGwnIHR5cGU9J2VsZW1lbnQnPgorICAgICAgICA8bWVtYmVyT2YgZ3JvdXA9J01fQkxPQ0snLz4KKyAgICAgICAgPGNvbnRhaW5zIGdyb3VwPSdNX0RFRicvPgorICAgICAgICA8YXR0cmlidXRlIG5hbWU9J2NvbXBhY3QnIHR5cGU9J0JPT0xFQU4nIC8+CisgICAgICAgIDxlbGVtZW50IG5hbWU9J2RkJyB0eXBlPSdtaXhlZCc+CisgICAgICAgICAgPG1lbWJlck9mIGdyb3VwPSdNX0RFRicvPgorICAgICAgICAgIDxjb250YWlucyBncm91cD0nTV9JTkxJTkUnLz4KKyAgICAgICAgICA8Y29udGFpbnMgZ3JvdXA9J01fQkxPQ0snLz4KKyAgICAgICAgPC9lbGVtZW50PgorICAgICAgICA8ZWxlbWVudCBuYW1lPSdkdCcgdHlwZT0nbWl4ZWQnPgorICAgICAgICAgIDxtZW1iZXJPZiBncm91cD0nTV9ERUYnLz4KKyAgICAgICAgICA8Y29udGFpbnMgZ3JvdXA9J01fSU5MSU5FJy8+CisgICAgICAgIDwvZWxlbWVudD4KKyAgICAgIDwvZWxlbWVudD4KKyAgICAgIDxlbGVtZW50IG5hbWU9J2VtJyBjbG9zZU1vZGU9J3Jlc3RhcnRhYmxlJyB0eXBlPSdtaXhlZCc+CisgICAgICAgIDxtZW1iZXJPZiBncm91cD0nTV9JTkxJTkUnLz4KKyAgICAgICAgPG1lbWJlck9mIGdyb3VwPSdNX05PTElOSycvPgorICAgICAgICA8Y29udGFpbnMgZ3JvdXA9J01fSU5MSU5FJy8+CisgICAgICA8L2VsZW1lbnQ+CisgICAgICA8ZWxlbWVudCBuYW1lPSdmb250JyB0eXBlPSdtaXhlZCc+CisgICAgICAgIDxtZW1iZXJPZiBncm91cD0nTV9JTkxJTkUnLz4KKyAgICAgICAgPG1lbWJlck9mIGdyb3VwPSdNX05PTElOSycvPgorICAgICAgICA8Y29udGFpbnMgZ3JvdXA9J01fSU5MSU5FJy8+CisgICAgICA8L2VsZW1lbnQ+CisgICAgICA8ZWxlbWVudCBuYW1lPSdmb3JtJyBjbG9zZU1vZGU9J3VuY2xvc2FibGUnIHR5cGU9J21peGVkJz4KKyAgICAgICAgPG1lbWJlck9mIGdyb3VwPSdNX0JMT0NLJy8+CisgICAgICAgIDxtZW1iZXJPZiBncm91cD0nTV9GT1JNJy8+CisgICAgICAgIDxjb250YWlucyBncm91cD0nTV9JTkxJTkUnLz4KKyAgICAgICAgPGNvbnRhaW5zIGdyb3VwPSdNX05PTElOSycvPgorICAgICAgICA8Y29udGFpbnMgZ3JvdXA9J01fQkxPQ0snLz4KKyAgICAgICAgPGNvbnRhaW5zIGdyb3VwPSdNX1RSJy8+CisgICAgICAgIDxjb250YWlucyBncm91cD0nTV9DRUxMJy8+CisgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0nZW5jdHlwZScgZGVmYXVsdD0nYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJy8+CisgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0nbWV0aG9kJyBkZWZhdWx0PSdnZXQnLz4KKyAgICAgICAgPGVsZW1lbnQgbmFtZT0nYnV0dG9uJyB0eXBlPSdtaXhlZCc+CisgICAgICAgICAgPG1lbWJlck9mIGdyb3VwPSdNX0lOTElORScvPgorICAgICAgICAgIDxtZW1iZXJPZiBncm91cD0nTV9OT0xJTksnLz4KKyAgICAgICAgICA8Y29udGFpbnMgZ3JvdXA9J01fSU5MSU5FJy8+CisgICAgICAgICAgPGNvbnRhaW5zIGdyb3VwPSdNX0JMT0NLJy8+CisgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSdkaXNhYmxlZCcgdHlwZT0nQk9PTEVBTicgLz4KKyAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9J3RhYmluZGV4JyB0eXBlPSdOTVRPS0VOJyAvPgorICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ndHlwZScgZGVmYXVsdD0nc3VibWl0Jy8+CisgICAgICAgIDwvZWxlbWVudD4KKyAgICAgICAgPGVsZW1lbnQgbmFtZT0nZmllbGRzZXQnIHR5cGU9J21peGVkJz4KKyAgICAgICAgICA8bWVtYmVyT2YgZ3JvdXA9J01fQkxPQ0snLz4KKyAgICAgICAgICA8Y29udGFpbnMgZ3JvdXA9J01fTEVHRU5EJy8+CisgICAgICAgICAgPGNvbnRhaW5zIGdyb3VwPSdNX0lOTElORScvPgorICAgICAgICAgIDxjb250YWlucyBncm91cD0nTV9CTE9DSycvPgorICAgICAgICAgIDxlbGVtZW50IG5hbWU9J2xlZ2VuZCcgdHlwZT0nbWl4ZWQnPgorICAgICAgICAgICAgPG1lbWJlck9mIGdyb3VwPSdNX0xFR0VORCcvPgorICAgICAgICAgICAgPGNvbnRhaW5zIGdyb3VwPSdNX0lOTElORScvPgorICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSdhbGlnbicgdHlwZT0nTk1UT0tFTicgLz4KKyAgICAgICAgICA8L2VsZW1lbnQ+CisgICAgICAgIDwvZWxlbWVudD4KKyAgICAgICAgPGVsZW1lbnQgbmFtZT0naW5wdXQnIHR5cGU9J2VtcHR5Jz4KKyAgICAgICAgICA8bWVtYmVyT2YgZ3JvdXA9J01fSU5MSU5FJy8+CisgICAgICAgICAgPG1lbWJlck9mIGdyb3VwPSdNX05PTElOSycvPgorICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0nYWxpZ24nIHR5cGU9J05NVE9LRU4nIC8+CisgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSdjaGVja2VkJyB0eXBlPSdCT09MRUFOJyAvPgorICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0nZGlzYWJsZWQnIHR5cGU9J0JPT0xFQU4nIC8+CisgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSdpc21hcCcgdHlwZT0nQk9PTEVBTicgLz4KKyAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9J21heGxlbmd0aCcgdHlwZT0nTk1UT0tFTicgLz4KKyAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9J3JlYWRvbmx5JyB0eXBlPSdCT09MRUFOJyAvPgorICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ndGFiaW5kZXgnIHR5cGU9J05NVE9LRU4nIC8+CisgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSd0eXBlJyBkZWZhdWx0PSd0ZXh0Jy8+CisgICAgICAgIDwvZWxlbWVudD4KKyAgICAgICAgPGVsZW1lbnQgbmFtZT0nbGFiZWwnIHR5cGU9J21peGVkJz4KKyAgICAgICAgICA8bWVtYmVyT2YgZ3JvdXA9J01fSU5MSU5FJy8+CisgICAgICAgICAgPG1lbWJlck9mIGdyb3VwPSdNX05PTElOSycvPgorICAgICAgICAgIDxjb250YWlucyBncm91cD0nTV9JTkxJTkUnLz4KKyAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9J2ZvcicgdHlwZT0nSURSRUYnIC8+CisgICAgICAgIDwvZWxlbWVudD4KKyAgICAgICAgPGVsZW1lbnQgbmFtZT0nc2VsZWN0JyB0eXBlPSdlbGVtZW50Jz4KKyAgICAgICAgICA8bWVtYmVyT2YgZ3JvdXA9J01fSU5MSU5FJy8+CisgICAgICAgICAgPGNvbnRhaW5zIGdyb3VwPSdNX09QVElPTlMnLz4KKyAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9J2Rpc2FibGVkJyB0eXBlPSdCT09MRUFOJyAvPgorICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0nbXVsdGlwbGUnIHR5cGU9J0JPT0xFQU4nIC8+CisgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSdzaXplJyB0eXBlPSdOTVRPS0VOJyAvPgorICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ndGFiaW5kZXgnIHR5cGU9J05NVE9LRU4nIC8+CisgICAgICAgICAgPGVsZW1lbnQgbmFtZT0nb3B0Z3JvdXAnIHR5cGU9J2VsZW1lbnQnPgorICAgICAgICAgICAgPG1lbWJlck9mIGdyb3VwPSdNX09QVElPTlMnLz4KKyAgICAgICAgICAgIDxjb250YWlucyBncm91cD0nTV9PUFRJT05TJy8+CisgICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9J2Rpc2FibGVkJyB0eXBlPSdCT09MRUFOJyAvPgorICAgICAgICAgIDwvZWxlbWVudD4KKyAgICAgICAgICA8ZWxlbWVudCBuYW1lPSdvcHRpb24nIHR5cGU9J3N0cmluZyc+CisgICAgICAgICAgICA8bWVtYmVyT2YgZ3JvdXA9J01fT1BUSU9OJy8+CisgICAgICAgICAgICA8bWVtYmVyT2YgZ3JvdXA9J01fT1BUSU9OUycvPgorICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSdkaXNhYmxlZCcgdHlwZT0nQk9PTEVBTicgLz4KKyAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0nc2VsZWN0ZWQnIHR5cGU9J0JPT0xFQU4nIC8+CisgICAgICAgICAgPC9lbGVtZW50PgorICAgICAgICA8L2VsZW1lbnQ+CisgICAgICAgIDxlbGVtZW50IG5hbWU9J3RleHRhcmVhJyB0eXBlPSdzdHJpbmcnPgorICAgICAgICAgIDxtZW1iZXJPZiBncm91cD0nTV9JTkxJTkUnLz4KKyAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9J2NvbHMnIHR5cGU9J05NVE9LRU4nIC8+CisgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSdkaXNhYmxlZCcgdHlwZT0nQk9PTEVBTicgLz4KKyAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9J3JlYWRvbmx5JyB0eXBlPSdCT09MRUFOJyAvPgorICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ncm93cycgdHlwZT0nTk1UT0tFTicgLz4KKyAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9J3RhYmluZGV4JyB0eXBlPSdOTVRPS0VOJyAvPgorICAgICAgICA8L2VsZW1lbnQ+CisgICAgICA8L2VsZW1lbnQ+CisgICAgICA8ZWxlbWVudCBuYW1lPSdoMScgdHlwZT0nbWl4ZWQnPgorICAgICAgICA8bWVtYmVyT2YgZ3JvdXA9J01fQkxPQ0snLz4KKyAgICAgICAgPGNvbnRhaW5zIGdyb3VwPSdNX0lOTElORScvPgorICAgICAgICA8YXR0cmlidXRlIG5hbWU9J2FsaWduJyB0eXBlPSdOTVRPS0VOJyAvPgorICAgICAgPC9lbGVtZW50PgorICAgICAgPGVsZW1lbnQgbmFtZT0naDInIHR5cGU9J21peGVkJz4KKyAgICAgICAgPG1lbWJlck9mIGdyb3VwPSdNX0JMT0NLJy8+CisgICAgICAgIDxjb250YWlucyBncm91cD0nTV9JTkxJTkUnLz4KKyAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSdhbGlnbicgdHlwZT0nTk1UT0tFTicgLz4KKyAgICAgIDwvZWxlbWVudD4KKyAgICAgIDxlbGVtZW50IG5hbWU9J2gzJyB0eXBlPSdtaXhlZCc+CisgICAgICAgIDxtZW1iZXJPZiBncm91cD0nTV9CTE9DSycvPgorICAgICAgICA8Y29udGFpbnMgZ3JvdXA9J01fSU5MSU5FJy8+CisgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0nYWxpZ24nIHR5cGU9J05NVE9LRU4nIC8+CisgICAgICA8L2VsZW1lbnQ+CisgICAgICA8ZWxlbWVudCBuYW1lPSdoNCcgdHlwZT0nbWl4ZWQnPgorICAgICAgICA8bWVtYmVyT2YgZ3JvdXA9J01fQkxPQ0snLz4KKyAgICAgICAgPGNvbnRhaW5zIGdyb3VwPSdNX0lOTElORScvPgorICAgICAgICA8YXR0cmlidXRlIG5hbWU9J2FsaWduJyB0eXBlPSdOTVRPS0VOJyAvPgorICAgICAgPC9lbGVtZW50PgorICAgICAgPGVsZW1lbnQgbmFtZT0naDUnIHR5cGU9J21peGVkJz4KKyAgICAgICAgPG1lbWJlck9mIGdyb3VwPSdNX0JMT0NLJy8+CisgICAgICAgIDxjb250YWlucyBncm91cD0nTV9JTkxJTkUnLz4KKyAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSdhbGlnbicgdHlwZT0nTk1UT0tFTicgLz4KKyAgICAgIDwvZWxlbWVudD4KKyAgICAgIDxlbGVtZW50IG5hbWU9J2g2JyB0eXBlPSdtaXhlZCc+CisgICAgICAgIDxtZW1iZXJPZiBncm91cD0nTV9CTE9DSycvPgorICAgICAgICA8Y29udGFpbnMgZ3JvdXA9J01fSU5MSU5FJy8+CisgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0nYWxpZ24nIHR5cGU9J05NVE9LRU4nIC8+CisgICAgICA8L2VsZW1lbnQ+CisgICAgICA8ZWxlbWVudCBuYW1lPSdocicgdHlwZT0nZW1wdHknPgorICAgICAgICA8bWVtYmVyT2YgZ3JvdXA9J01fQkxPQ0snLz4KKyAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSdhbGlnbicgdHlwZT0nTk1UT0tFTicgLz4KKyAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSdub3NoYWRlJyB0eXBlPSdCT09MRUFOJyAvPgorICAgICAgPC9lbGVtZW50PgorICAgICAgPGVsZW1lbnQgbmFtZT0naScgY2xvc2VNb2RlPSdyZXN0YXJ0YWJsZScgdHlwZT0nbWl4ZWQnPgorICAgICAgICA8bWVtYmVyT2YgZ3JvdXA9J01fSU5MSU5FJy8+CisgICAgICAgIDxtZW1iZXJPZiBncm91cD0nTV9OT0xJTksnLz4KKyAgICAgICAgPGNvbnRhaW5zIGdyb3VwPSdNX0lOTElORScvPgorICAgICAgPC9lbGVtZW50PgorICAgICAgPGVsZW1lbnQgbmFtZT0naWZyYW1lJyB0eXBlPSdtaXhlZCc+CisgICAgICAgIDxtZW1iZXJPZiBncm91cD0nTV9JTkxJTkUnLz4KKyAgICAgICAgPG1lbWJlck9mIGdyb3VwPSdNX05PTElOSycvPgorICAgICAgICA8Y29udGFpbnMgZ3JvdXA9J01fSU5MSU5FJy8+CisgICAgICAgIDxjb250YWlucyBncm91cD0nTV9CTE9DSycvPgorICAgICAgICA8YXR0cmlidXRlIG5hbWU9J2FsaWduJyB0eXBlPSdOTVRPS0VOJyAvPgorICAgICAgICA8YXR0cmlidXRlIG5hbWU9J2ZyYW1lYm9yZGVyJyBkZWZhdWx0PScxJy8+CisgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0nc2Nyb2xsaW5nJyBkZWZhdWx0PSdhdXRvJy8+CisgICAgICA8L2VsZW1lbnQ+CisgICAgICA8ZWxlbWVudCBuYW1lPSdpbWcnIHR5cGU9J2VtcHR5Jz4KKyAgICAgICAgPG1lbWJlck9mIGdyb3VwPSdNX0lOTElORScvPgorICAgICAgICA8bWVtYmVyT2YgZ3JvdXA9J01fTk9MSU5LJy8+CisgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0nYWxpZ24nIHR5cGU9J05NVE9LRU4nIC8+CisgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0naXNtYXAnIHR5cGU9J0JPT0xFQU4nIC8+CisgICAgICA8L2VsZW1lbnQ+CisgICAgICA8ZWxlbWVudCBuYW1lPSdpbnMnIGNsb3NlTW9kZT0ncmVzdGFydGFibGUnIHR5cGU9J21peGVkJz4KKyAgICAgICAgPG1lbWJlck9mIGdyb3VwPSdNX0lOTElORScvPgorICAgICAgICA8bWVtYmVyT2YgZ3JvdXA9J01fQkxPQ0snLz4KKyAgICAgICAgPGNvbnRhaW5zIGdyb3VwPSdNX0lOTElORScvPgorICAgICAgICA8Y29udGFpbnMgZ3JvdXA9J01fQkxPQ0snLz4KKyAgICAgIDwvZWxlbWVudD4KKyAgICAgIDxlbGVtZW50IG5hbWU9J2tiZCcgY2xvc2VNb2RlPSdyZXN0YXJ0YWJsZScgdHlwZT0nbWl4ZWQnPgorICAgICAgICA8bWVtYmVyT2YgZ3JvdXA9J01fSU5MSU5FJy8+CisgICAgICAgIDxtZW1iZXJPZiBncm91cD0nTV9OT0xJTksnLz4KKyAgICAgICAgPGNvbnRhaW5zIGdyb3VwPSdNX0lOTElORScvPgorICAgICAgPC9lbGVtZW50PgorICAgICAgPGVsZW1lbnQgbmFtZT0nbWFwJyB0eXBlPSdlbGVtZW50Jz4KKyAgICAgICAgPG1lbWJlck9mIGdyb3VwPSdNX0lOTElORScvPgorICAgICAgICA8Y29udGFpbnMgZ3JvdXA9J01fQkxPQ0snLz4KKyAgICAgICAgPGNvbnRhaW5zIGdyb3VwPSdNX0FSRUEnLz4KKyAgICAgICAgPGVsZW1lbnQgbmFtZT0nYXJlYScgdHlwZT0nZW1wdHknPgorICAgICAgICAgIDxtZW1iZXJPZiBncm91cD0nTV9BUkVBJy8+CisgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSdub2hyZWYnIHR5cGU9J0JPT0xFQU4nIC8+CisgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSdzaGFwZScgZGVmYXVsdD0ncmVjdCcvPgorICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ndGFiaW5kZXgnIHR5cGU9J05NVE9LRU4nIC8+CisgICAgICAgIDwvZWxlbWVudD4KKyAgICAgIDwvZWxlbWVudD4KKyAgICAgIDxlbGVtZW50IG5hbWU9J21lbnUnIHR5cGU9J2VsZW1lbnQnPgorICAgICAgICA8bWVtYmVyT2YgZ3JvdXA9J01fQkxPQ0snLz4KKyAgICAgICAgPGNvbnRhaW5zIGdyb3VwPSdNX0xJJy8+CisgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0nY29tcGFjdCcgdHlwZT0nQk9PTEVBTicgLz4KKyAgICAgIDwvZWxlbWVudD4KKyAgICAgIDxlbGVtZW50IG5hbWU9J21hcnF1ZWUnIHR5cGU9J21peGVkJz4KKyAgICAgICAgPG1lbWJlck9mIGdyb3VwPSdNX0lOTElORScvPgorICAgICAgICA8bWVtYmVyT2YgZ3JvdXA9J01fTk9MSU5LJy8+CisgICAgICAgIDxjb250YWlucyBncm91cD0nTV9JTkxJTkUnLz4KKyAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSd3aWR0aCcgdHlwZT0nTk1UT0tFTicgLz4KKyAgICAgIDwvZWxlbWVudD4KKyAgICAgIDxlbGVtZW50IG5hbWU9J25vYnInIHR5cGU9J21peGVkJz4KKyAgICAgICAgPG1lbWJlck9mIGdyb3VwPSdNX0lOTElORScvPgorICAgICAgICA8bWVtYmVyT2YgZ3JvdXA9J01fTk9MSU5LJy8+CisgICAgICAgIDxjb250YWlucyBncm91cD0nTV9JTkxJTkUnLz4KKyAgICAgIDwvZWxlbWVudD4KKyAgICAgIDxlbGVtZW50IG5hbWU9J3dicicgdHlwZT0nZW1wdHknPgorICAgICAgICA8bWVtYmVyT2YgZ3JvdXA9J01fSU5MSU5FJy8+CisgICAgICAgIDxtZW1iZXJPZiBncm91cD0nTV9OT0xJTksnLz4KKyAgICAgIDwvZWxlbWVudD4KKyAgICAgIDxlbGVtZW50IG5hbWU9J25vc2NyaXB0JyB0eXBlPSdtaXhlZCc+CisgICAgICAgIDxtZW1iZXJPZiBncm91cD0nTV9CTE9DSycvPgorICAgICAgICA8Y29udGFpbnMgZ3JvdXA9J01fSU5MSU5FJy8+CisgICAgICAgIDxjb250YWlucyBncm91cD0nTV9CTE9DSycvPgorICAgICAgPC9lbGVtZW50PgorICAgICAgPGVsZW1lbnQgbmFtZT0nb2JqZWN0JyB0eXBlPSdtaXhlZCc+CisgICAgICAgIDxtZW1iZXJPZiBncm91cD0nTV9IRUFEJy8+CisgICAgICAgIDxtZW1iZXJPZiBncm91cD0nTV9JTkxJTkUnLz4KKyAgICAgICAgPG1lbWJlck9mIGdyb3VwPSdNX05PTElOSycvPgorICAgICAgICA8Y29udGFpbnMgZ3JvdXA9J01fUEFSQU0nLz4KKyAgICAgICAgPGNvbnRhaW5zIGdyb3VwPSdNX0lOTElORScvPgorICAgICAgICA8Y29udGFpbnMgZ3JvdXA9J01fQkxPQ0snLz4KKyAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSdhbGlnbicgdHlwZT0nTk1UT0tFTicgLz4KKyAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSdkZWNsYXJlJyB0eXBlPSdCT09MRUFOJyAvPgorICAgICAgICA8YXR0cmlidXRlIG5hbWU9J3RhYmluZGV4JyB0eXBlPSdOTVRPS0VOJyAvPgorICAgICAgICA8ZWxlbWVudCBuYW1lPSdwYXJhbScgdHlwZT0nZW1wdHknPgorICAgICAgICAgIDxtZW1iZXJPZiBncm91cD0nTV9QQVJBTScvPgorICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ndmFsdWV0eXBlJyBkZWZhdWx0PSdkYXRhJy8+CisgICAgICAgIDwvZWxlbWVudD4KKyAgICAgIDwvZWxlbWVudD4KKyAgICAgIDxlbGVtZW50IG5hbWU9J29sJyB0eXBlPSdlbGVtZW50Jz4KKyAgICAgICAgPG1lbWJlck9mIGdyb3VwPSdNX0JMT0NLJy8+CisgICAgICAgIDxjb250YWlucyBncm91cD0nTV9MSScvPgorICAgICAgICA8YXR0cmlidXRlIG5hbWU9J2NvbXBhY3QnIHR5cGU9J0JPT0xFQU4nIC8+CisgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0nc3RhcnQnIHR5cGU9J05NVE9LRU4nIC8+CisgICAgICA8L2VsZW1lbnQ+CisgICAgICA8ZWxlbWVudCBuYW1lPSdwJyB0eXBlPSdtaXhlZCc+CisgICAgICAgIDxtZW1iZXJPZiBncm91cD0nTV9CTE9DSycvPgorICAgICAgICA8bWVtYmVyT2YgZ3JvdXA9J01fUCcvPgorICAgICAgICA8Y29udGFpbnMgZ3JvdXA9J01fSU5MSU5FJy8+CisgICAgICAgIDxjb250YWlucyBncm91cD0nTV9UQUJMRScvPgorICAgICAgICA8YXR0cmlidXRlIG5hbWU9J2FsaWduJyB0eXBlPSdOTVRPS0VOJyAvPgorICAgICAgPC9lbGVtZW50PgorICAgICAgPGVsZW1lbnQgbmFtZT0ncHJlJyB0eXBlPSdtaXhlZCc+CisgICAgICAgIDxtZW1iZXJPZiBncm91cD0nTV9CTE9DSycvPgorICAgICAgICA8Y29udGFpbnMgZ3JvdXA9J01fSU5MSU5FJy8+CisgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0nd2lkdGgnIHR5cGU9J05NVE9LRU4nIC8+CisgICAgICA8L2VsZW1lbnQ+CisgICAgICA8ZWxlbWVudCBuYW1lPSdsaXN0aW5nJyB0eXBlPSdtaXhlZCc+CisgICAgICAgIDxtZW1iZXJPZiBncm91cD0nTV9CTE9DSycvPgorICAgICAgICA8Y29udGFpbnMgZ3JvdXA9J01fSU5MSU5FJy8+CisgICAgICA8L2VsZW1lbnQ+CisgICAgICA8ZWxlbWVudCBuYW1lPSd4bXAnIHR5cGU9J21peGVkJz4KKyAgICAgICAgPG1lbWJlck9mIGdyb3VwPSdNX0JMT0NLJy8+CisgICAgICAgIDxjb250YWlucyBncm91cD0nTV9JTkxJTkUnLz4KKyAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSd3aWR0aCcgdHlwZT0nTk1UT0tFTicgLz4KKyAgICAgIDwvZWxlbWVudD4KKyAgICAgIDxlbGVtZW50IG5hbWU9J3EnIGNsb3NlTW9kZT0ncmVzdGFydGFibGUnIHR5cGU9J21peGVkJz4KKyAgICAgICAgPG1lbWJlck9mIGdyb3VwPSdNX0lOTElORScvPgorICAgICAgICA8bWVtYmVyT2YgZ3JvdXA9J01fTk9MSU5LJy8+CisgICAgICAgIDxjb250YWlucyBncm91cD0nTV9JTkxJTkUnLz4KKyAgICAgIDwvZWxlbWVudD4KKyAgICAgIDxlbGVtZW50IG5hbWU9J3J1YnknIGNsb3NlTW9kZT0ncmVzdGFydGFibGUnIHR5cGU9J21peGVkJz4KKyAgICAgICAgPG1lbWJlck9mIGdyb3VwPSdNX0lOTElORScvPgorICAgICAgICA8bWVtYmVyT2YgZ3JvdXA9J01fTk9MSU5LJy8+CisgICAgICAgIDxjb250YWlucyBncm91cD0nTV9JTkxJTkUnLz4KKyAgICAgIDwvZWxlbWVudD4KKyAgICAgIDxlbGVtZW50IG5hbWU9J3JiYycgY2xvc2VNb2RlPSdyZXN0YXJ0YWJsZScgdHlwZT0nbWl4ZWQnPgorICAgICAgICA8bWVtYmVyT2YgZ3JvdXA9J01fSU5MSU5FJy8+CisgICAgICAgIDxtZW1iZXJPZiBncm91cD0nTV9OT0xJTksnLz4KKyAgICAgICAgPGNvbnRhaW5zIGdyb3VwPSdNX0lOTElORScvPgorICAgICAgPC9lbGVtZW50PgorICAgICAgPGVsZW1lbnQgbmFtZT0ncnRjJyBjbG9zZU1vZGU9J3Jlc3RhcnRhYmxlJyB0eXBlPSdtaXhlZCc+CisgICAgICAgIDxtZW1iZXJPZiBncm91cD0nTV9JTkxJTkUnLz4KKyAgICAgICAgPG1lbWJlck9mIGdyb3VwPSdNX05PTElOSycvPgorICAgICAgICA8Y29udGFpbnMgZ3JvdXA9J01fSU5MSU5FJy8+CisgICAgICA8L2VsZW1lbnQ+CisgICAgICA8ZWxlbWVudCBuYW1lPSdyYicgY2xvc2VNb2RlPSdyZXN0YXJ0YWJsZScgdHlwZT0nbWl4ZWQnPgorICAgICAgICA8bWVtYmVyT2YgZ3JvdXA9J01fSU5MSU5FJy8+CisgICAgICAgIDxtZW1iZXJPZiBncm91cD0nTV9OT0xJTksnLz4KKyAgICAgICAgPGNvbnRhaW5zIGdyb3VwPSdNX0lOTElORScvPgorICAgICAgPC9lbGVtZW50PgorICAgICAgPGVsZW1lbnQgbmFtZT0ncnQnIGNsb3NlTW9kZT0ncmVzdGFydGFibGUnIHR5cGU9J21peGVkJz4KKyAgICAgICAgPG1lbWJlck9mIGdyb3VwPSdNX0lOTElORScvPgorICAgICAgICA8bWVtYmVyT2YgZ3JvdXA9J01fTk9MSU5LJy8+CisgICAgICAgIDxjb250YWlucyBncm91cD0nTV9JTkxJTkUnLz4KKwk8YXR0cmlidXRlIG5hbWU9J3Jic3BhbicgZGVmYXVsdD0nMScvPgorICAgICAgPC9lbGVtZW50PgorICAgICAgPGVsZW1lbnQgbmFtZT0ncnAnIGNsb3NlTW9kZT0ncmVzdGFydGFibGUnIHR5cGU9J21peGVkJz4KKyAgICAgICAgPG1lbWJlck9mIGdyb3VwPSdNX0lOTElORScvPgorICAgICAgICA8bWVtYmVyT2YgZ3JvdXA9J01fTk9MSU5LJy8+CisgICAgICAgIDxjb250YWlucyBncm91cD0nTV9JTkxJTkUnLz4KKyAgICAgIDwvZWxlbWVudD4KKyAgICAgIDxlbGVtZW50IG5hbWU9J3MnIGNsb3NlTW9kZT0ncmVzdGFydGFibGUnIHR5cGU9J21peGVkJz4KKyAgICAgICAgPG1lbWJlck9mIGdyb3VwPSdNX0lOTElORScvPgorICAgICAgICA8bWVtYmVyT2YgZ3JvdXA9J01fTk9MSU5LJy8+CisgICAgICAgIDxjb250YWlucyBncm91cD0nTV9JTkxJTkUnLz4KKyAgICAgIDwvZWxlbWVudD4KKyAgICAgIDxlbGVtZW50IG5hbWU9J3NhbXAnIGNsb3NlTW9kZT0ncmVzdGFydGFibGUnIHR5cGU9J21peGVkJz4KKyAgICAgICAgPG1lbWJlck9mIGdyb3VwPSdNX0lOTElORScvPgorICAgICAgICA8bWVtYmVyT2YgZ3JvdXA9J01fTk9MSU5LJy8+CisgICAgICAgIDxjb250YWlucyBncm91cD0nTV9JTkxJTkUnLz4KKyAgICAgIDwvZWxlbWVudD4KKyAgICAgIDxlbGVtZW50IG5hbWU9J3NtYWxsJyBjbG9zZU1vZGU9J3Jlc3RhcnRhYmxlJyB0eXBlPSdtaXhlZCc+CisgICAgICAgIDxtZW1iZXJPZiBncm91cD0nTV9JTkxJTkUnLz4KKyAgICAgICAgPG1lbWJlck9mIGdyb3VwPSdNX05PTElOSycvPgorICAgICAgICA8Y29udGFpbnMgZ3JvdXA9J01fSU5MSU5FJy8+CisgICAgICA8L2VsZW1lbnQ+CisgICAgICA8ZWxlbWVudCBuYW1lPSdzcGFuJyB0eXBlPSdtaXhlZCc+CisgICAgICAgIDxtZW1iZXJPZiBncm91cD0nTV9JTkxJTkUnLz4KKyAgICAgICAgPG1lbWJlck9mIGdyb3VwPSdNX05PTElOSycvPgorICAgICAgICA8Y29udGFpbnMgZ3JvdXA9J01fSU5MSU5FJy8+CisgICAgICA8L2VsZW1lbnQ+CisgICAgICA8ZWxlbWVudCBuYW1lPSdzdHJpa2UnIGNsb3NlTW9kZT0ncmVzdGFydGFibGUnIHR5cGU9J21peGVkJz4KKyAgICAgICAgPG1lbWJlck9mIGdyb3VwPSdNX0lOTElORScvPgorICAgICAgICA8bWVtYmVyT2YgZ3JvdXA9J01fTk9MSU5LJy8+CisgICAgICAgIDxjb250YWlucyBncm91cD0nTV9JTkxJTkUnLz4KKyAgICAgIDwvZWxlbWVudD4KKyAgICAgIDxlbGVtZW50IG5hbWU9J3N0cm9uZycgY2xvc2VNb2RlPSdyZXN0YXJ0YWJsZScgdHlwZT0nbWl4ZWQnPgorICAgICAgICA8bWVtYmVyT2YgZ3JvdXA9J01fSU5MSU5FJy8+CisgICAgICAgIDxtZW1iZXJPZiBncm91cD0nTV9OT0xJTksnLz4KKyAgICAgICAgPGNvbnRhaW5zIGdyb3VwPSdNX0lOTElORScvPgorICAgICAgPC9lbGVtZW50PgorICAgICAgPGVsZW1lbnQgbmFtZT0nc3ViJyBjbG9zZU1vZGU9J3Jlc3RhcnRhYmxlJyB0eXBlPSdtaXhlZCc+CisgICAgICAgIDxtZW1iZXJPZiBncm91cD0nTV9JTkxJTkUnLz4KKyAgICAgICAgPG1lbWJlck9mIGdyb3VwPSdNX05PTElOSycvPgorICAgICAgICA8Y29udGFpbnMgZ3JvdXA9J01fSU5MSU5FJy8+CisgICAgICA8L2VsZW1lbnQ+CisgICAgICA8ZWxlbWVudCBuYW1lPSdzdXAnIGNsb3NlTW9kZT0ncmVzdGFydGFibGUnIHR5cGU9J21peGVkJz4KKyAgICAgICAgPG1lbWJlck9mIGdyb3VwPSdNX0lOTElORScvPgorICAgICAgICA8bWVtYmVyT2YgZ3JvdXA9J01fTk9MSU5LJy8+CisgICAgICAgIDxjb250YWlucyBncm91cD0nTV9JTkxJTkUnLz4KKyAgICAgIDwvZWxlbWVudD4KKyAgICAgIDxlbGVtZW50IG5hbWU9J3RhYmxlJyBjbG9zZU1vZGU9J3VuY2xvc2FibGUnIHR5cGU9J2VsZW1lbnQnPgorICAgICAgICA8bWVtYmVyT2YgZ3JvdXA9J01fQkxPQ0snLz4KKyAgICAgICAgPG1lbWJlck9mIGdyb3VwPSdNX1RBQkxFJy8+CisgICAgICAgIDxjb250YWlucyBncm91cD0nTV9GT1JNJy8+CisgICAgICAgIDxjb250YWlucyBncm91cD0nTV9UQUJVTEFSJy8+CisgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0nYWxpZ24nIHR5cGU9J05NVE9LRU4nIC8+CisgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0nZnJhbWUnIHR5cGU9J05NVE9LRU4nIC8+CisgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ncnVsZXMnIHR5cGU9J05NVE9LRU4nIC8+CisgICAgICAgIDxlbGVtZW50IG5hbWU9J2NhcHRpb24nIHR5cGU9J21peGVkJz4KKyAgICAgICAgICA8bWVtYmVyT2YgZ3JvdXA9J01fVEFCVUxBUicvPgorICAgICAgICAgIDxjb250YWlucyBncm91cD0nTV9JTkxJTkUnLz4KKyAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9J2FsaWduJyB0eXBlPSdOTVRPS0VOJyAvPgorICAgICAgICA8L2VsZW1lbnQ+CisgICAgICAgIDxlbGVtZW50IG5hbWU9J2NvbCcgdHlwZT0nZW1wdHknPgorICAgICAgICAgIDxtZW1iZXJPZiBncm91cD0nTV9DT0wnLz4KKyAgICAgICAgICA8bWVtYmVyT2YgZ3JvdXA9J01fVEFCVUxBUicvPgorICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0nYWxpZ24nIHR5cGU9J05NVE9LRU4nIC8+CisgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSdzcGFuJyBkZWZhdWx0PScxJy8+CisgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSd2YWxpZ24nIHR5cGU9J05NVE9LRU4nIC8+CisgICAgICAgIDwvZWxlbWVudD4KKyAgICAgICAgPGVsZW1lbnQgbmFtZT0nY29sZ3JvdXAnIHR5cGU9J2VsZW1lbnQnPgorICAgICAgICAgIDxtZW1iZXJPZiBncm91cD0nTV9UQUJVTEFSJy8+CisgICAgICAgICAgPGNvbnRhaW5zIGdyb3VwPSdNX0NPTCcvPgorICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0nYWxpZ24nIHR5cGU9J05NVE9LRU4nIC8+CisgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSdzcGFuJyBkZWZhdWx0PScxJy8+CisgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSd2YWxpZ24nIHR5cGU9J05NVE9LRU4nIC8+CisgICAgICAgIDwvZWxlbWVudD4KKyAgICAgICAgPGVsZW1lbnQgbmFtZT0ndGJvZHknIHR5cGU9J2VsZW1lbnQnPgorICAgICAgICAgIDxtZW1iZXJPZiBncm91cD0nTV9UQUJVTEFSJy8+CisgICAgICAgICAgPGNvbnRhaW5zIGdyb3VwPSdNX1RSJy8+CisgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSdhbGlnbicgdHlwZT0nTk1UT0tFTicgLz4KKyAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9J3ZhbGlnbicgdHlwZT0nTk1UT0tFTicgLz4KKyAgICAgICAgICA8ZWxlbWVudCBuYW1lPSd0cicgdHlwZT0nZWxlbWVudCc+CisgICAgICAgICAgICA8bWVtYmVyT2YgZ3JvdXA9J01fVFInLz4KKyAgICAgICAgICAgIDxtZW1iZXJPZiBncm91cD0nTV9UQUJVTEFSJy8+CisgICAgICAgICAgICA8Y29udGFpbnMgZ3JvdXA9J01fRk9STScvPgorICAgICAgICAgICAgPGNvbnRhaW5zIGdyb3VwPSdNX0NFTEwnLz4KKyAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0nYWxpZ24nIHR5cGU9J05NVE9LRU4nIC8+CisgICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9J3ZhbGlnbicgdHlwZT0nTk1UT0tFTicgLz4KKyAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9J3RkJyB0eXBlPSdtaXhlZCc+CisgICAgICAgICAgICAgIDxtZW1iZXJPZiBncm91cD0nTV9DRUxMJy8+CisgICAgICAgICAgICAgIDxjb250YWlucyBncm91cD0nTV9JTkxJTkUnLz4KKyAgICAgICAgICAgICAgPGNvbnRhaW5zIGdyb3VwPSdNX0JMT0NLJy8+CisgICAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0nYWxpZ24nIHR5cGU9J05NVE9LRU4nIC8+CisgICAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0nY29sc3BhbicgZGVmYXVsdD0nMScvPgorICAgICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9J2hlYWRlcnMnIHR5cGU9J0lEUkVGUycgLz4KKyAgICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSdub3dyYXAnIHR5cGU9J0JPT0xFQU4nIC8+CisgICAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ncm93c3BhbicgZGVmYXVsdD0nMScvPgorICAgICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9J3Njb3BlJyB0eXBlPSdOTVRPS0VOJyAvPgorICAgICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9J3ZhbGlnbicgdHlwZT0nTk1UT0tFTicgLz4KKyAgICAgICAgICAgIDwvZWxlbWVudD4KKyAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9J3RoJyB0eXBlPSdtaXhlZCc+CisgICAgICAgICAgICAgIDxtZW1iZXJPZiBncm91cD0nTV9DRUxMJy8+CisgICAgICAgICAgICAgIDxjb250YWlucyBncm91cD0nTV9JTkxJTkUnLz4KKyAgICAgICAgICAgICAgPGNvbnRhaW5zIGdyb3VwPSdNX0JMT0NLJy8+CisgICAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0nYWxpZ24nIHR5cGU9J05NVE9LRU4nIC8+CisgICAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0nY29sc3BhbicgZGVmYXVsdD0nMScvPgorICAgICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9J2hlYWRlcnMnIHR5cGU9J0lEUkVGUycgLz4KKyAgICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSdub3dyYXAnIHR5cGU9J0JPT0xFQU4nIC8+CisgICAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ncm93c3BhbicgZGVmYXVsdD0nMScvPgorICAgICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9J3Njb3BlJyB0eXBlPSdOTVRPS0VOJyAvPgorICAgICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9J3ZhbGlnbicgdHlwZT0nTk1UT0tFTicgLz4KKyAgICAgICAgICAgIDwvZWxlbWVudD4KKyAgICAgICAgICA8L2VsZW1lbnQ+CisgICAgICAgIDwvZWxlbWVudD4KKyAgICAgICAgPGVsZW1lbnQgbmFtZT0ndGZvb3QnIHR5cGU9J2VsZW1lbnQnPgorICAgICAgICAgIDxtZW1iZXJPZiBncm91cD0nTV9UQUJVTEFSJy8+CisgICAgICAgICAgPGNvbnRhaW5zIGdyb3VwPSdNX1RSJy8+CisgICAgICAgICAgPGNvbnRhaW5zIGdyb3VwPSdNX0ZPUk0nLz4KKyAgICAgICAgICA8Y29udGFpbnMgZ3JvdXA9J01fQ0VMTCcvPgorICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0nYWxpZ24nIHR5cGU9J05NVE9LRU4nIC8+CisgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSd2YWxpZ24nIHR5cGU9J05NVE9LRU4nIC8+CisgICAgICAgIDwvZWxlbWVudD4KKyAgICAgICAgPGVsZW1lbnQgbmFtZT0ndGhlYWQnIHR5cGU9J2VsZW1lbnQnPgorICAgICAgICAgIDxtZW1iZXJPZiBncm91cD0nTV9UQUJVTEFSJy8+CisgICAgICAgICAgPGNvbnRhaW5zIGdyb3VwPSdNX1RSJy8+CisgICAgICAgICAgPGNvbnRhaW5zIGdyb3VwPSdNX0ZPUk0nLz4KKyAgICAgICAgICA8Y29udGFpbnMgZ3JvdXA9J01fQ0VMTCcvPgorICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0nYWxpZ24nIHR5cGU9J05NVE9LRU4nIC8+CisgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSd2YWxpZ24nIHR5cGU9J05NVE9LRU4nIC8+CisgICAgICAgIDwvZWxlbWVudD4KKyAgICAgIDwvZWxlbWVudD4KKyAgICAgIDxlbGVtZW50IG5hbWU9J3R0JyBjbG9zZU1vZGU9J3Jlc3RhcnRhYmxlJyB0eXBlPSdtaXhlZCc+CisgICAgICAgIDxtZW1iZXJPZiBncm91cD0nTV9JTkxJTkUnLz4KKyAgICAgICAgPG1lbWJlck9mIGdyb3VwPSdNX05PTElOSycvPgorICAgICAgICA8Y29udGFpbnMgZ3JvdXA9J01fSU5MSU5FJy8+CisgICAgICA8L2VsZW1lbnQ+CisgICAgICA8ZWxlbWVudCBuYW1lPSd1JyBjbG9zZU1vZGU9J3Jlc3RhcnRhYmxlJyB0eXBlPSdtaXhlZCc+CisgICAgICAgIDxtZW1iZXJPZiBncm91cD0nTV9JTkxJTkUnLz4KKyAgICAgICAgPG1lbWJlck9mIGdyb3VwPSdNX05PTElOSycvPgorICAgICAgICA8Y29udGFpbnMgZ3JvdXA9J01fSU5MSU5FJy8+CisgICAgICA8L2VsZW1lbnQ+CisgICAgICA8ZWxlbWVudCBuYW1lPSd1bCcgdHlwZT0nZWxlbWVudCc+CisgICAgICAgIDxtZW1iZXJPZiBncm91cD0nTV9CTE9DSycvPgorICAgICAgICA8Y29udGFpbnMgZ3JvdXA9J01fTEknLz4KKyAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSdjb21wYWN0JyB0eXBlPSdCT09MRUFOJyAvPgorICAgICAgICA8YXR0cmlidXRlIG5hbWU9J3R5cGUnIHR5cGU9J05NVE9LRU4nIC8+CisgICAgICAgIDxlbGVtZW50IG5hbWU9J2xpJyB0eXBlPSdtaXhlZCc+CisgICAgICAgICAgPG1lbWJlck9mIGdyb3VwPSdNX0xJJy8+CisgICAgICAgICAgPGNvbnRhaW5zIGdyb3VwPSdNX0lOTElORScvPgorICAgICAgICAgIDxjb250YWlucyBncm91cD0nTV9CTE9DSycvPgorICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ndmFsdWUnIHR5cGU9J05NVE9LRU4nIC8+CisgICAgICAgIDwvZWxlbWVudD4KKyAgICAgIDwvZWxlbWVudD4KKyAgICAgIDxlbGVtZW50IG5hbWU9J3ZhcicgdHlwZT0nbWl4ZWQnPgorICAgICAgICA8bWVtYmVyT2YgZ3JvdXA9J01fSU5MSU5FJy8+CisgICAgICAgIDxtZW1iZXJPZiBncm91cD0nTV9OT0xJTksnLz4KKyAgICAgICAgPGNvbnRhaW5zIGdyb3VwPSdNX0lOTElORScvPgorICAgICAgPC9lbGVtZW50PgorICAgIDwvZWxlbWVudD4KKyAgICA8ZWxlbWVudCBuYW1lPSdmcmFtZXNldCcgdHlwZT0nZWxlbWVudCc+CisgICAgICA8bWVtYmVyT2YgZ3JvdXA9J01fRlJBTUUnLz4KKyAgICAgIDxtZW1iZXJPZiBncm91cD0nTV9IVE1MJy8+CisgICAgICA8Y29udGFpbnMgZ3JvdXA9J01fRlJBTUUnLz4KKyAgICAgIDxlbGVtZW50IG5hbWU9J2ZyYW1lJyB0eXBlPSdlbXB0eSc+CisgICAgICAgIDxtZW1iZXJPZiBncm91cD0nTV9GUkFNRScvPgorICAgICAgICA8YXR0cmlidXRlIG5hbWU9J2ZyYW1lYm9yZGVyJyBkZWZhdWx0PScxJy8+CisgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0nbm9yZXNpemUnIHR5cGU9J0JPT0xFQU4nIC8+CisgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0nc2Nyb2xsaW5nJyBkZWZhdWx0PSdhdXRvJy8+CisgICAgICA8L2VsZW1lbnQ+CisgICAgPC9lbGVtZW50PgorICAgIDxlbGVtZW50IG5hbWU9J2hlYWQnIHR5cGU9J2VsZW1lbnQnPgorICAgICAgPG1lbWJlck9mIGdyb3VwPSdNX0hUTUwnLz4KKyAgICAgIDxjb250YWlucyBncm91cD0nTV9IRUFEJy8+CisgICAgICA8ZWxlbWVudCBuYW1lPSdiYXNlJyB0eXBlPSdlbXB0eSc+CisgICAgICAgIDxtZW1iZXJPZiBncm91cD0nTV9IRUFEJy8+CisgICAgICA8L2VsZW1lbnQ+CisgICAgICA8ZWxlbWVudCBuYW1lPSdpc2luZGV4JyB0eXBlPSdlbXB0eSc+CisgICAgICAgIDxtZW1iZXJPZiBncm91cD0nTV9IRUFEJy8+CisgICAgICA8L2VsZW1lbnQ+CisgICAgICA8ZWxlbWVudCBuYW1lPSdsaW5rJyB0eXBlPSdlbXB0eSc+CisgICAgICAgIDxtZW1iZXJPZiBncm91cD0nTV9IRUFEJy8+CisgICAgICAgIDxtZW1iZXJPZiBncm91cD0nTV9JTkxJTkUnLz4KKyAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSdocmVmbGFuZycgdHlwZT0nTk1UT0tFTicgLz4KKyAgICAgIDwvZWxlbWVudD4KKyAgICAgIDxlbGVtZW50IG5hbWU9J21ldGEnIHR5cGU9J2VtcHR5Jz4KKyAgICAgICAgPG1lbWJlck9mIGdyb3VwPSdNX0hFQUQnLz4KKyAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSdodHRwLWVxdWl2JyB0eXBlPSdOTVRPS0VOJyAvPgorICAgICAgICA8YXR0cmlidXRlIG5hbWU9J25hbWUnIHR5cGU9J05NVE9LRU4nIC8+CisgICAgICA8L2VsZW1lbnQ+CisgICAgICA8ZWxlbWVudCBuYW1lPSdzdHlsZScgdHlwZT0nY2RhdGEnPgorICAgICAgICA8bWVtYmVyT2YgZ3JvdXA9J01fSEVBRCcvPgorICAgICAgICA8bWVtYmVyT2YgZ3JvdXA9J01fSU5MSU5FJy8+CisgICAgICA8L2VsZW1lbnQ+CisgICAgICA8ZWxlbWVudCBuYW1lPSd0aXRsZScgdHlwZT0nc3RyaW5nJz4KKyAgICAgICAgPG1lbWJlck9mIGdyb3VwPSdNX0hFQUQnLz4KKyAgICAgIDwvZWxlbWVudD4KKyAgICAgIDxlbGVtZW50IG5hbWU9J2Jnc291bmQnIHR5cGU9J2VtcHR5Jz4KKyAgICAgICAgPG1lbWJlck9mIGdyb3VwPSdNX0hFQUQnLz4KKyAgICAgIDwvZWxlbWVudD4KKyAgICA8L2VsZW1lbnQ+CisgICAgPGVsZW1lbnQgbmFtZT0nbm9mcmFtZXMnIHR5cGU9J2VsZW1lbnQnPgorICAgICAgPG1lbWJlck9mIGdyb3VwPSdNX0JMT0NLJy8+CisgICAgICA8bWVtYmVyT2YgZ3JvdXA9J01fSFRNTCcvPgorICAgICAgPG1lbWJlck9mIGdyb3VwPSdNX0ZSQU1FJy8+CisgICAgICA8Y29udGFpbnMgZ3JvdXA9J01fQk9EWScvPgorICAgICAgPGNvbnRhaW5zIGdyb3VwPSdNX0JMT0NLJy8+CisgICAgICA8Y29udGFpbnMgZ3JvdXA9J01fSU5MSU5FJy8+CisgICAgPC9lbGVtZW50PgorICAgIDxlbGVtZW50IG5hbWU9J3NjcmlwdCcgdHlwZT0nY2RhdGEnPgorICAgICAgPG1lbWJlck9mQW55Lz4KKyAgICAgIDxhdHRyaWJ1dGUgbmFtZT0nZGVmZXInIHR5cGU9J0JPT0xFQU4nIC8+CisgICAgPC9lbGVtZW50PgorICA8L2VsZW1lbnQ+CisgIDxhdHRyaWJ1dGUgbmFtZT0nY2xhc3MnIHR5cGU9J05NVE9LRU4nIC8+CisgIDxhdHRyaWJ1dGUgbmFtZT0nZGlyJyB0eXBlPSdOTVRPS0VOJyAvPgorICA8YXR0cmlidXRlIG5hbWU9J2lkJyB0eXBlPSdJRCcgLz4KKyAgPGF0dHJpYnV0ZSBuYW1lPSdsYW5nJyB0eXBlPSdOTVRPS0VOJyAvPgorPC9zY2hlbWE+CmRpZmYgLS1naXQgYS9zcmMvamF2YS9vcmcvY2NpbC9jb3dhbi90YWdzb3VwL0F0dHJpYnV0ZXNJbXBsLmphdmEgYi9zcmMvamF2YS9vcmcvY2NpbC9jb3dhbi90YWdzb3VwL0F0dHJpYnV0ZXNJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODZmNzZmYwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9qYXZhL29yZy9jY2lsL2Nvd2FuL3RhZ3NvdXAvQXR0cmlidXRlc0ltcGwuamF2YQpAQCAtMCwwICsxLDYyNiBAQAorLy8gWE1MV3JpdGVyLmphdmEgLSBzZXJpYWxpemUgYW4gWE1MIGRvY3VtZW50LgorLy8gV3JpdHRlbiBieSBEYXZpZCBNZWdnaW5zb24sIGRhdmlkQG1lZ2dpbnNvbi5jb20KKy8vIGFuZCBwbGFjZWQgYnkgaGltIGludG8gdGhlIHB1YmxpYyBkb21haW4uCisvLyBFeHRlbnNpdmVseSBtb2RpZmllZCBieSBKb2huIENvd2FuIGZvciBUYWdTb3VwLgorLy8gVGFnU291cCBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsCisvLyBWZXJzaW9uIDIuMC4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGlzIGxpY2Vuc2UgYXQKKy8vIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAuICBZb3UgbWF5IGFsc28gaGF2ZQorLy8gYWRkaXRpb25hbCBsZWdhbCByaWdodHMgbm90IGdyYW50ZWQgYnkgdGhpcyBsaWNlbnNlLgorLy8KKy8vIFRhZ1NvdXAgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyB1bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIFRhZ1NvdXAKKy8vIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TCisvLyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZDsgbm90IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkKKy8vIG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworcGFja2FnZSBvcmcuY2NpbC5jb3dhbi50YWdzb3VwOworaW1wb3J0IG9yZy54bWwuc2F4LkF0dHJpYnV0ZXM7CisKKworLyoqCisgKiBEZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIHRoZSBBdHRyaWJ1dGVzIGludGVyZmFjZS4KKyAqCisgKiA8YmxvY2txdW90ZT4KKyAqIDxlbT5UaGlzIG1vZHVsZSwgYm90aCBzb3VyY2UgY29kZSBhbmQgZG9jdW1lbnRhdGlvbiwgaXMgaW4gdGhlCisgKiBQdWJsaWMgRG9tYWluLCBhbmQgY29tZXMgd2l0aCA8c3Ryb25nPk5PIFdBUlJBTlRZPC9zdHJvbmc+LjwvZW0+CisgKiBTZWUgPGEgaHJlZj0naHR0cDovL3d3dy5zYXhwcm9qZWN0Lm9yZyc+aHR0cDovL3d3dy5zYXhwcm9qZWN0Lm9yZzwvYT4KKyAqIGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uLgorICogPC9ibG9ja3F1b3RlPgorICoKKyAqIDxwPlRoaXMgY2xhc3MgcHJvdmlkZXMgYSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIHRoZSBTQVgyCisgKiB7QGxpbmsgb3JnLnhtbC5zYXguQXR0cmlidXRlcyBBdHRyaWJ1dGVzfSBpbnRlcmZhY2UsIHdpdGggdGhlIAorICogYWRkaXRpb24gb2YgbWFuaXB1bGF0b3JzIHNvIHRoYXQgdGhlIGxpc3QgY2FuIGJlIG1vZGlmaWVkIG9yIAorICogcmV1c2VkLjwvcD4KKyAqCisgKiA8cD5UaGVyZSBhcmUgdHdvIHR5cGljYWwgdXNlcyBvZiB0aGlzIGNsYXNzOjwvcD4KKyAqCisgKiA8b2w+CisgKiA8bGk+dG8gdGFrZSBhIHBlcnNpc3RlbnQgc25hcHNob3Qgb2YgYW4gQXR0cmlidXRlcyBvYmplY3QKKyAqICBpbiBhIHtAbGluayBvcmcueG1sLnNheC5Db250ZW50SGFuZGxlciNzdGFydEVsZW1lbnQgc3RhcnRFbGVtZW50fSBldmVudDsgb3I8L2xpPgorICogPGxpPnRvIGNvbnN0cnVjdCBvciBtb2RpZnkgYW4gQXR0cmlidXRlcyBvYmplY3QgaW4gYSBTQVgyIGRyaXZlciBvciBmaWx0ZXIuPC9saT4KKyAqIDwvb2w+CisgKgorICogPHA+VGhpcyBjbGFzcyByZXBsYWNlcyB0aGUgbm93LWRlcHJlY2F0ZWQgU0FYMSB7QGxpbmsgCisgKiBvcmcueG1sLnNheC5oZWxwZXJzLkF0dHJpYnV0ZUxpc3RJbXBsIEF0dHJpYnV0ZUxpc3RJbXBsfQorICogY2xhc3M7IGluIGFkZGl0aW9uIHRvIHN1cHBvcnRpbmcgdGhlIHVwZGF0ZWQgQXR0cmlidXRlcworICogaW50ZXJmYWNlIHJhdGhlciB0aGFuIHRoZSBkZXByZWNhdGVkIHtAbGluayBvcmcueG1sLnNheC5BdHRyaWJ1dGVMaXN0CisgKiBBdHRyaWJ1dGVMaXN0fSBpbnRlcmZhY2UsIGl0IGFsc28gaW5jbHVkZXMgYSBtdWNoIG1vcmUgZWZmaWNpZW50IAorICogaW1wbGVtZW50YXRpb24gdXNpbmcgYSBzaW5nbGUgYXJyYXkgcmF0aGVyIHRoYW4gYSBzZXQgb2YgVmVjdG9ycy48L3A+CisgKgorICogQHNpbmNlIFNBWCAyLjAKKyAqIEBhdXRob3IgRGF2aWQgTWVnZ2luc29uCisgKiBAdmVyc2lvbiAyLjAuMSAoc2F4MnIyKQorICovCitwdWJsaWMgY2xhc3MgQXR0cmlidXRlc0ltcGwgaW1wbGVtZW50cyBBdHRyaWJ1dGVzCit7CisKKwwKKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICAgIC8vIENvbnN0cnVjdG9ycy4KKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3QgYSBuZXcsIGVtcHR5IEF0dHJpYnV0ZXNJbXBsIG9iamVjdC4KKyAgICAgKi8KKyAgICBwdWJsaWMgQXR0cmlidXRlc0ltcGwgKCkKKyAgICB7CisJbGVuZ3RoID0gMDsKKwlkYXRhID0gbnVsbDsKKyAgICB9CisKKworICAgIC8qKgorICAgICAqIENvcHkgYW4gZXhpc3RpbmcgQXR0cmlidXRlcyBvYmplY3QuCisgICAgICoKKyAgICAgKiA8cD5UaGlzIGNvbnN0cnVjdG9yIGlzIGVzcGVjaWFsbHkgdXNlZnVsIGluc2lkZSBhCisgICAgICoge0BsaW5rIG9yZy54bWwuc2F4LkNvbnRlbnRIYW5kbGVyI3N0YXJ0RWxlbWVudCBzdGFydEVsZW1lbnR9IGV2ZW50LjwvcD4KKyAgICAgKgorICAgICAqIEBwYXJhbSBhdHRzIFRoZSBleGlzdGluZyBBdHRyaWJ1dGVzIG9iamVjdC4KKyAgICAgKi8KKyAgICBwdWJsaWMgQXR0cmlidXRlc0ltcGwgKEF0dHJpYnV0ZXMgYXR0cykKKyAgICB7CisJc2V0QXR0cmlidXRlcyhhdHRzKTsKKyAgICB9CisKKworDAorICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgICAgLy8gSW1wbGVtZW50YXRpb24gb2Ygb3JnLnhtbC5zYXguQXR0cmlidXRlcy4KKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBhdHRyaWJ1dGVzIGluIHRoZSBsaXN0LgorICAgICAqCisgICAgICogQHJldHVybiBUaGUgbnVtYmVyIG9mIGF0dHJpYnV0ZXMgaW4gdGhlIGxpc3QuCisgICAgICogQHNlZSBvcmcueG1sLnNheC5BdHRyaWJ1dGVzI2dldExlbmd0aAorICAgICAqLworICAgIHB1YmxpYyBpbnQgZ2V0TGVuZ3RoICgpCisgICAgeworCXJldHVybiBsZW5ndGg7CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gYW4gYXR0cmlidXRlJ3MgTmFtZXNwYWNlIFVSSS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBpbmRleCBUaGUgYXR0cmlidXRlJ3MgaW5kZXggKHplcm8tYmFzZWQpLgorICAgICAqIEByZXR1cm4gVGhlIE5hbWVzcGFjZSBVUkksIHRoZSBlbXB0eSBzdHJpbmcgaWYgbm9uZSBpcworICAgICAqICAgICAgICAgYXZhaWxhYmxlLCBvciBudWxsIGlmIHRoZSBpbmRleCBpcyBvdXQgb2YgcmFuZ2UuCisgICAgICogQHNlZSBvcmcueG1sLnNheC5BdHRyaWJ1dGVzI2dldFVSSQorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmcgZ2V0VVJJIChpbnQgaW5kZXgpCisgICAgeworCWlmIChpbmRleCA+PSAwICYmIGluZGV4IDwgbGVuZ3RoKSB7CisJICAgIHJldHVybiBkYXRhW2luZGV4KjVdOworCX0gZWxzZSB7CisJICAgIHJldHVybiBudWxsOworCX0KKyAgICB9CisKKworICAgIC8qKgorICAgICAqIFJldHVybiBhbiBhdHRyaWJ1dGUncyBsb2NhbCBuYW1lLgorICAgICAqCisgICAgICogQHBhcmFtIGluZGV4IFRoZSBhdHRyaWJ1dGUncyBpbmRleCAoemVyby1iYXNlZCkuCisgICAgICogQHJldHVybiBUaGUgYXR0cmlidXRlJ3MgbG9jYWwgbmFtZSwgdGhlIGVtcHR5IHN0cmluZyBpZiAKKyAgICAgKiAgICAgICAgIG5vbmUgaXMgYXZhaWxhYmxlLCBvciBudWxsIGlmIHRoZSBpbmRleCBpZiBvdXQgb2YgcmFuZ2UuCisgICAgICogQHNlZSBvcmcueG1sLnNheC5BdHRyaWJ1dGVzI2dldExvY2FsTmFtZQorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmcgZ2V0TG9jYWxOYW1lIChpbnQgaW5kZXgpCisgICAgeworCWlmIChpbmRleCA+PSAwICYmIGluZGV4IDwgbGVuZ3RoKSB7CisJICAgIHJldHVybiBkYXRhW2luZGV4KjUrMV07CisJfSBlbHNlIHsKKwkgICAgcmV0dXJuIG51bGw7CisJfQorICAgIH0KKworCisgICAgLyoqCisgICAgICogUmV0dXJuIGFuIGF0dHJpYnV0ZSdzIHF1YWxpZmllZCAocHJlZml4ZWQpIG5hbWUuCisgICAgICoKKyAgICAgKiBAcGFyYW0gaW5kZXggVGhlIGF0dHJpYnV0ZSdzIGluZGV4ICh6ZXJvLWJhc2VkKS4KKyAgICAgKiBAcmV0dXJuIFRoZSBhdHRyaWJ1dGUncyBxdWFsaWZpZWQgbmFtZSwgdGhlIGVtcHR5IHN0cmluZyBpZiAKKyAgICAgKiAgICAgICAgIG5vbmUgaXMgYXZhaWxhYmxlLCBvciBudWxsIGlmIHRoZSBpbmRleCBpcyBvdXQgb2YgYm91bmRzLgorICAgICAqIEBzZWUgb3JnLnhtbC5zYXguQXR0cmlidXRlcyNnZXRRTmFtZQorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmcgZ2V0UU5hbWUgKGludCBpbmRleCkKKyAgICB7CisJaWYgKGluZGV4ID49IDAgJiYgaW5kZXggPCBsZW5ndGgpIHsKKwkgICAgcmV0dXJuIGRhdGFbaW5kZXgqNSsyXTsKKwl9IGVsc2UgeworCSAgICByZXR1cm4gbnVsbDsKKwl9CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gYW4gYXR0cmlidXRlJ3MgdHlwZSBieSBpbmRleC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBpbmRleCBUaGUgYXR0cmlidXRlJ3MgaW5kZXggKHplcm8tYmFzZWQpLgorICAgICAqIEByZXR1cm4gVGhlIGF0dHJpYnV0ZSdzIHR5cGUsICJDREFUQSIgaWYgdGhlIHR5cGUgaXMgdW5rbm93biwgb3IgbnVsbAorICAgICAqICAgICAgICAgaWYgdGhlIGluZGV4IGlzIG91dCBvZiBib3VuZHMuCisgICAgICogQHNlZSBvcmcueG1sLnNheC5BdHRyaWJ1dGVzI2dldFR5cGUoaW50KQorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmcgZ2V0VHlwZSAoaW50IGluZGV4KQorICAgIHsKKwlpZiAoaW5kZXggPj0gMCAmJiBpbmRleCA8IGxlbmd0aCkgeworCSAgICByZXR1cm4gZGF0YVtpbmRleCo1KzNdOworCX0gZWxzZSB7CisJICAgIHJldHVybiBudWxsOworCX0KKyAgICB9CisKKworICAgIC8qKgorICAgICAqIFJldHVybiBhbiBhdHRyaWJ1dGUncyB2YWx1ZSBieSBpbmRleC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBpbmRleCBUaGUgYXR0cmlidXRlJ3MgaW5kZXggKHplcm8tYmFzZWQpLgorICAgICAqIEByZXR1cm4gVGhlIGF0dHJpYnV0ZSdzIHZhbHVlIG9yIG51bGwgaWYgdGhlIGluZGV4IGlzIG91dCBvZiBib3VuZHMuCisgICAgICogQHNlZSBvcmcueG1sLnNheC5BdHRyaWJ1dGVzI2dldFZhbHVlKGludCkKKyAgICAgKi8KKyAgICBwdWJsaWMgU3RyaW5nIGdldFZhbHVlIChpbnQgaW5kZXgpCisgICAgeworCWlmIChpbmRleCA+PSAwICYmIGluZGV4IDwgbGVuZ3RoKSB7CisJICAgIHJldHVybiBkYXRhW2luZGV4KjUrNF07CisJfSBlbHNlIHsKKwkgICAgcmV0dXJuIG51bGw7CisJfQorICAgIH0KKworCisgICAgLyoqCisgICAgICogTG9vayB1cCBhbiBhdHRyaWJ1dGUncyBpbmRleCBieSBOYW1lc3BhY2UgbmFtZS4KKyAgICAgKgorICAgICAqIDxwPkluIG1hbnkgY2FzZXMsIGl0IHdpbGwgYmUgbW9yZSBlZmZpY2llbnQgdG8gbG9vayB1cCB0aGUgbmFtZSBvbmNlIGFuZAorICAgICAqIHVzZSB0aGUgaW5kZXggcXVlcnkgbWV0aG9kcyByYXRoZXIgdGhhbiB1c2luZyB0aGUgbmFtZSBxdWVyeSBtZXRob2RzCisgICAgICogcmVwZWF0ZWRseS48L3A+CisgICAgICoKKyAgICAgKiBAcGFyYW0gdXJpIFRoZSBhdHRyaWJ1dGUncyBOYW1lc3BhY2UgVVJJLCBvciB0aGUgZW1wdHkKKyAgICAgKiAgICAgICAgc3RyaW5nIGlmIG5vbmUgaXMgYXZhaWxhYmxlLgorICAgICAqIEBwYXJhbSBsb2NhbE5hbWUgVGhlIGF0dHJpYnV0ZSdzIGxvY2FsIG5hbWUuCisgICAgICogQHJldHVybiBUaGUgYXR0cmlidXRlJ3MgaW5kZXgsIG9yIC0xIGlmIG5vbmUgbWF0Y2hlcy4KKyAgICAgKiBAc2VlIG9yZy54bWwuc2F4LkF0dHJpYnV0ZXMjZ2V0SW5kZXgoamF2YS5sYW5nLlN0cmluZyxqYXZhLmxhbmcuU3RyaW5nKQorICAgICAqLworICAgIHB1YmxpYyBpbnQgZ2V0SW5kZXggKFN0cmluZyB1cmksIFN0cmluZyBsb2NhbE5hbWUpCisgICAgeworCWludCBtYXggPSBsZW5ndGggKiA1OworCWZvciAoaW50IGkgPSAwOyBpIDwgbWF4OyBpICs9IDUpIHsKKwkgICAgaWYgKGRhdGFbaV0uZXF1YWxzKHVyaSkgJiYgZGF0YVtpKzFdLmVxdWFscyhsb2NhbE5hbWUpKSB7CisJCXJldHVybiBpIC8gNTsKKwkgICAgfQorCX0gCisJcmV0dXJuIC0xOworICAgIH0KKworCisgICAgLyoqCisgICAgICogTG9vayB1cCBhbiBhdHRyaWJ1dGUncyBpbmRleCBieSBxdWFsaWZpZWQgKHByZWZpeGVkKSBuYW1lLgorICAgICAqCisgICAgICogQHBhcmFtIHFOYW1lIFRoZSBxdWFsaWZpZWQgbmFtZS4KKyAgICAgKiBAcmV0dXJuIFRoZSBhdHRyaWJ1dGUncyBpbmRleCwgb3IgLTEgaWYgbm9uZSBtYXRjaGVzLgorICAgICAqIEBzZWUgb3JnLnhtbC5zYXguQXR0cmlidXRlcyNnZXRJbmRleChqYXZhLmxhbmcuU3RyaW5nKQorICAgICAqLworICAgIHB1YmxpYyBpbnQgZ2V0SW5kZXggKFN0cmluZyBxTmFtZSkKKyAgICB7CisJaW50IG1heCA9IGxlbmd0aCAqIDU7CisJZm9yIChpbnQgaSA9IDA7IGkgPCBtYXg7IGkgKz0gNSkgeworCSAgICBpZiAoZGF0YVtpKzJdLmVxdWFscyhxTmFtZSkpIHsKKwkJcmV0dXJuIGkgLyA1OworCSAgICB9CisJfSAKKwlyZXR1cm4gLTE7CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiBMb29rIHVwIGFuIGF0dHJpYnV0ZSdzIHR5cGUgYnkgTmFtZXNwYWNlLXF1YWxpZmllZCBuYW1lLgorICAgICAqCisgICAgICogQHBhcmFtIHVyaSBUaGUgTmFtZXNwYWNlIFVSSSwgb3IgdGhlIGVtcHR5IHN0cmluZyBmb3IgYSBuYW1lCisgICAgICogICAgICAgIHdpdGggbm8gZXhwbGljaXQgTmFtZXNwYWNlIFVSSS4KKyAgICAgKiBAcGFyYW0gbG9jYWxOYW1lIFRoZSBsb2NhbCBuYW1lLgorICAgICAqIEByZXR1cm4gVGhlIGF0dHJpYnV0ZSdzIHR5cGUsIG9yIG51bGwgaWYgdGhlcmUgaXMgbm8KKyAgICAgKiAgICAgICAgIG1hdGNoaW5nIGF0dHJpYnV0ZS4KKyAgICAgKiBAc2VlIG9yZy54bWwuc2F4LkF0dHJpYnV0ZXMjZ2V0VHlwZShqYXZhLmxhbmcuU3RyaW5nLGphdmEubGFuZy5TdHJpbmcpCisgICAgICovCisgICAgcHVibGljIFN0cmluZyBnZXRUeXBlIChTdHJpbmcgdXJpLCBTdHJpbmcgbG9jYWxOYW1lKQorICAgIHsKKwlpbnQgbWF4ID0gbGVuZ3RoICogNTsKKwlmb3IgKGludCBpID0gMDsgaSA8IG1heDsgaSArPSA1KSB7CisJICAgIGlmIChkYXRhW2ldLmVxdWFscyh1cmkpICYmIGRhdGFbaSsxXS5lcXVhbHMobG9jYWxOYW1lKSkgeworCQlyZXR1cm4gZGF0YVtpKzNdOworCSAgICB9CisJfSAKKwlyZXR1cm4gbnVsbDsKKyAgICB9CisKKworICAgIC8qKgorICAgICAqIExvb2sgdXAgYW4gYXR0cmlidXRlJ3MgdHlwZSBieSBxdWFsaWZpZWQgKHByZWZpeGVkKSBuYW1lLgorICAgICAqCisgICAgICogQHBhcmFtIHFOYW1lIFRoZSBxdWFsaWZpZWQgbmFtZS4KKyAgICAgKiBAcmV0dXJuIFRoZSBhdHRyaWJ1dGUncyB0eXBlLCBvciBudWxsIGlmIHRoZXJlIGlzIG5vCisgICAgICogICAgICAgICBtYXRjaGluZyBhdHRyaWJ1dGUuCisgICAgICogQHNlZSBvcmcueG1sLnNheC5BdHRyaWJ1dGVzI2dldFR5cGUoamF2YS5sYW5nLlN0cmluZykKKyAgICAgKi8KKyAgICBwdWJsaWMgU3RyaW5nIGdldFR5cGUgKFN0cmluZyBxTmFtZSkKKyAgICB7CisJaW50IG1heCA9IGxlbmd0aCAqIDU7CisJZm9yIChpbnQgaSA9IDA7IGkgPCBtYXg7IGkgKz0gNSkgeworCSAgICBpZiAoZGF0YVtpKzJdLmVxdWFscyhxTmFtZSkpIHsKKwkJcmV0dXJuIGRhdGFbaSszXTsKKwkgICAgfQorCX0KKwlyZXR1cm4gbnVsbDsKKyAgICB9CisKKworICAgIC8qKgorICAgICAqIExvb2sgdXAgYW4gYXR0cmlidXRlJ3MgdmFsdWUgYnkgTmFtZXNwYWNlLXF1YWxpZmllZCBuYW1lLgorICAgICAqCisgICAgICogQHBhcmFtIHVyaSBUaGUgTmFtZXNwYWNlIFVSSSwgb3IgdGhlIGVtcHR5IHN0cmluZyBmb3IgYSBuYW1lCisgICAgICogICAgICAgIHdpdGggbm8gZXhwbGljaXQgTmFtZXNwYWNlIFVSSS4KKyAgICAgKiBAcGFyYW0gbG9jYWxOYW1lIFRoZSBsb2NhbCBuYW1lLgorICAgICAqIEByZXR1cm4gVGhlIGF0dHJpYnV0ZSdzIHZhbHVlLCBvciBudWxsIGlmIHRoZXJlIGlzIG5vCisgICAgICogICAgICAgICBtYXRjaGluZyBhdHRyaWJ1dGUuCisgICAgICogQHNlZSBvcmcueG1sLnNheC5BdHRyaWJ1dGVzI2dldFZhbHVlKGphdmEubGFuZy5TdHJpbmcsamF2YS5sYW5nLlN0cmluZykKKyAgICAgKi8KKyAgICBwdWJsaWMgU3RyaW5nIGdldFZhbHVlIChTdHJpbmcgdXJpLCBTdHJpbmcgbG9jYWxOYW1lKQorICAgIHsKKwlpbnQgbWF4ID0gbGVuZ3RoICogNTsKKwlmb3IgKGludCBpID0gMDsgaSA8IG1heDsgaSArPSA1KSB7CisJICAgIGlmIChkYXRhW2ldLmVxdWFscyh1cmkpICYmIGRhdGFbaSsxXS5lcXVhbHMobG9jYWxOYW1lKSkgeworCQlyZXR1cm4gZGF0YVtpKzRdOworCSAgICB9CisJfQorCXJldHVybiBudWxsOworICAgIH0KKworCisgICAgLyoqCisgICAgICogTG9vayB1cCBhbiBhdHRyaWJ1dGUncyB2YWx1ZSBieSBxdWFsaWZpZWQgKHByZWZpeGVkKSBuYW1lLgorICAgICAqCisgICAgICogQHBhcmFtIHFOYW1lIFRoZSBxdWFsaWZpZWQgbmFtZS4KKyAgICAgKiBAcmV0dXJuIFRoZSBhdHRyaWJ1dGUncyB2YWx1ZSwgb3IgbnVsbCBpZiB0aGVyZSBpcyBubworICAgICAqICAgICAgICAgbWF0Y2hpbmcgYXR0cmlidXRlLgorICAgICAqIEBzZWUgb3JnLnhtbC5zYXguQXR0cmlidXRlcyNnZXRWYWx1ZShqYXZhLmxhbmcuU3RyaW5nKQorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmcgZ2V0VmFsdWUgKFN0cmluZyBxTmFtZSkKKyAgICB7CisJaW50IG1heCA9IGxlbmd0aCAqIDU7CisJZm9yIChpbnQgaSA9IDA7IGkgPCBtYXg7IGkgKz0gNSkgeworCSAgICBpZiAoZGF0YVtpKzJdLmVxdWFscyhxTmFtZSkpIHsKKwkJcmV0dXJuIGRhdGFbaSs0XTsKKwkgICAgfQorCX0KKwlyZXR1cm4gbnVsbDsKKyAgICB9CisKKworDAorICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgICAgLy8gTWFuaXB1bGF0b3JzLgorICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKworICAgIC8qKgorICAgICAqIENsZWFyIHRoZSBhdHRyaWJ1dGUgbGlzdCBmb3IgcmV1c2UuCisgICAgICoKKyAgICAgKiA8cD5Ob3RlIHRoYXQgbGl0dGxlIG1lbW9yeSBpcyBmcmVlZCBieSB0aGlzIGNhbGw6CisgICAgICogdGhlIGN1cnJlbnQgYXJyYXkgaXMga2VwdCBzbyBpdCBjYW4gYmUgCisgICAgICogcmV1c2VkLjwvcD4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBjbGVhciAoKQorICAgIHsKKwlpZiAoZGF0YSAhPSBudWxsKSB7CisJICAgIGZvciAoaW50IGkgPSAwOyBpIDwgKGxlbmd0aCAqIDUpOyBpKyspCisJCWRhdGEgW2ldID0gbnVsbDsKKwl9CisJbGVuZ3RoID0gMDsKKyAgICB9CisKKworICAgIC8qKgorICAgICAqIENvcHkgYW4gZW50aXJlIEF0dHJpYnV0ZXMgb2JqZWN0LgorICAgICAqCisgICAgICogPHA+SXQgbWF5IGJlIG1vcmUgZWZmaWNpZW50IHRvIHJldXNlIGFuIGV4aXN0aW5nIG9iamVjdAorICAgICAqIHJhdGhlciB0aGFuIGNvbnN0YW50bHkgYWxsb2NhdGluZyBuZXcgb25lcy48L3A+CisgICAgICogCisgICAgICogQHBhcmFtIGF0dHMgVGhlIGF0dHJpYnV0ZXMgdG8gY29weS4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRBdHRyaWJ1dGVzIChBdHRyaWJ1dGVzIGF0dHMpCisgICAgeworICAgICAgICBjbGVhcigpOworICAgICAgICBsZW5ndGggPSBhdHRzLmdldExlbmd0aCgpOworICAgICAgICBpZiAobGVuZ3RoID4gMCkgeworICAgICAgICAgICAgZGF0YSA9IG5ldyBTdHJpbmdbbGVuZ3RoKjVdOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIGRhdGFbaSo1XSA9IGF0dHMuZ2V0VVJJKGkpOworICAgICAgICAgICAgICAgIGRhdGFbaSo1KzFdID0gYXR0cy5nZXRMb2NhbE5hbWUoaSk7CisgICAgICAgICAgICAgICAgZGF0YVtpKjUrMl0gPSBhdHRzLmdldFFOYW1lKGkpOworICAgICAgICAgICAgICAgIGRhdGFbaSo1KzNdID0gYXR0cy5nZXRUeXBlKGkpOworICAgICAgICAgICAgICAgIGRhdGFbaSo1KzRdID0gYXR0cy5nZXRWYWx1ZShpKTsKKyAgICAgICAgICAgIH0KKwl9CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiBBZGQgYW4gYXR0cmlidXRlIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QuCisgICAgICoKKyAgICAgKiA8cD5Gb3IgdGhlIHNha2Ugb2Ygc3BlZWQsIHRoaXMgbWV0aG9kIGRvZXMgbm8gY2hlY2tpbmcKKyAgICAgKiB0byBzZWUgaWYgdGhlIGF0dHJpYnV0ZSBpcyBhbHJlYWR5IGluIHRoZSBsaXN0OiB0aGF0IGlzCisgICAgICogdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBhcHBsaWNhdGlvbi48L3A+CisgICAgICoKKyAgICAgKiBAcGFyYW0gdXJpIFRoZSBOYW1lc3BhY2UgVVJJLCBvciB0aGUgZW1wdHkgc3RyaW5nIGlmCisgICAgICogICAgICAgIG5vbmUgaXMgYXZhaWxhYmxlIG9yIE5hbWVzcGFjZSBwcm9jZXNzaW5nIGlzIG5vdAorICAgICAqICAgICAgICBiZWluZyBwZXJmb3JtZWQuCisgICAgICogQHBhcmFtIGxvY2FsTmFtZSBUaGUgbG9jYWwgbmFtZSwgb3IgdGhlIGVtcHR5IHN0cmluZyBpZgorICAgICAqICAgICAgICBOYW1lc3BhY2UgcHJvY2Vzc2luZyBpcyBub3QgYmVpbmcgcGVyZm9ybWVkLgorICAgICAqIEBwYXJhbSBxTmFtZSBUaGUgcXVhbGlmaWVkIChwcmVmaXhlZCkgbmFtZSwgb3IgdGhlIGVtcHR5IHN0cmluZworICAgICAqICAgICAgICBpZiBxdWFsaWZpZWQgbmFtZXMgYXJlIG5vdCBhdmFpbGFibGUuCisgICAgICogQHBhcmFtIHR5cGUgVGhlIGF0dHJpYnV0ZSB0eXBlIGFzIGEgc3RyaW5nLgorICAgICAqIEBwYXJhbSB2YWx1ZSBUaGUgYXR0cmlidXRlIHZhbHVlLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGFkZEF0dHJpYnV0ZSAoU3RyaW5nIHVyaSwgU3RyaW5nIGxvY2FsTmFtZSwgU3RyaW5nIHFOYW1lLAorCQkJICAgICAgU3RyaW5nIHR5cGUsIFN0cmluZyB2YWx1ZSkKKyAgICB7CisJZW5zdXJlQ2FwYWNpdHkobGVuZ3RoKzEpOworCWRhdGFbbGVuZ3RoKjVdID0gdXJpOworCWRhdGFbbGVuZ3RoKjUrMV0gPSBsb2NhbE5hbWU7CisJZGF0YVtsZW5ndGgqNSsyXSA9IHFOYW1lOworCWRhdGFbbGVuZ3RoKjUrM10gPSB0eXBlOworCWRhdGFbbGVuZ3RoKjUrNF0gPSB2YWx1ZTsKKwlsZW5ndGgrKzsKKyAgICB9CisKKworICAgIC8qKgorICAgICAqIFNldCBhbiBhdHRyaWJ1dGUgaW4gdGhlIGxpc3QuCisgICAgICoKKyAgICAgKiA8cD5Gb3IgdGhlIHNha2Ugb2Ygc3BlZWQsIHRoaXMgbWV0aG9kIGRvZXMgbm8gY2hlY2tpbmcKKyAgICAgKiBmb3IgbmFtZSBjb25mbGljdHMgb3Igd2VsbC1mb3JtZWRuZXNzOiBzdWNoIGNoZWNrcyBhcmUgdGhlCisgICAgICogcmVzcG9uc2liaWxpdHkgb2YgdGhlIGFwcGxpY2F0aW9uLjwvcD4KKyAgICAgKgorICAgICAqIEBwYXJhbSBpbmRleCBUaGUgaW5kZXggb2YgdGhlIGF0dHJpYnV0ZSAoemVyby1iYXNlZCkuCisgICAgICogQHBhcmFtIHVyaSBUaGUgTmFtZXNwYWNlIFVSSSwgb3IgdGhlIGVtcHR5IHN0cmluZyBpZgorICAgICAqICAgICAgICBub25lIGlzIGF2YWlsYWJsZSBvciBOYW1lc3BhY2UgcHJvY2Vzc2luZyBpcyBub3QKKyAgICAgKiAgICAgICAgYmVpbmcgcGVyZm9ybWVkLgorICAgICAqIEBwYXJhbSBsb2NhbE5hbWUgVGhlIGxvY2FsIG5hbWUsIG9yIHRoZSBlbXB0eSBzdHJpbmcgaWYKKyAgICAgKiAgICAgICAgTmFtZXNwYWNlIHByb2Nlc3NpbmcgaXMgbm90IGJlaW5nIHBlcmZvcm1lZC4KKyAgICAgKiBAcGFyYW0gcU5hbWUgVGhlIHF1YWxpZmllZCBuYW1lLCBvciB0aGUgZW1wdHkgc3RyaW5nCisgICAgICogICAgICAgIGlmIHF1YWxpZmllZCBuYW1lcyBhcmUgbm90IGF2YWlsYWJsZS4KKyAgICAgKiBAcGFyYW0gdHlwZSBUaGUgYXR0cmlidXRlIHR5cGUgYXMgYSBzdHJpbmcuCisgICAgICogQHBhcmFtIHZhbHVlIFRoZSBhdHRyaWJ1dGUgdmFsdWUuCisgICAgICogQGV4Y2VwdGlvbiBqYXZhLmxhbmcuQXJyYXlJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIFdoZW4gdGhlCisgICAgICogICAgICAgICAgICBzdXBwbGllZCBpbmRleCBkb2VzIG5vdCBwb2ludCB0byBhbiBhdHRyaWJ1dGUKKyAgICAgKiAgICAgICAgICAgIGluIHRoZSBsaXN0LgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldEF0dHJpYnV0ZSAoaW50IGluZGV4LCBTdHJpbmcgdXJpLCBTdHJpbmcgbG9jYWxOYW1lLAorCQkJICAgICAgU3RyaW5nIHFOYW1lLCBTdHJpbmcgdHlwZSwgU3RyaW5nIHZhbHVlKQorICAgIHsKKwlpZiAoaW5kZXggPj0gMCAmJiBpbmRleCA8IGxlbmd0aCkgeworCSAgICBkYXRhW2luZGV4KjVdID0gdXJpOworCSAgICBkYXRhW2luZGV4KjUrMV0gPSBsb2NhbE5hbWU7CisJICAgIGRhdGFbaW5kZXgqNSsyXSA9IHFOYW1lOworCSAgICBkYXRhW2luZGV4KjUrM10gPSB0eXBlOworCSAgICBkYXRhW2luZGV4KjUrNF0gPSB2YWx1ZTsKKwl9IGVsc2UgeworCSAgICBiYWRJbmRleChpbmRleCk7CisJfQorICAgIH0KKworCisgICAgLyoqCisgICAgICogUmVtb3ZlIGFuIGF0dHJpYnV0ZSBmcm9tIHRoZSBsaXN0LgorICAgICAqCisgICAgICogQHBhcmFtIGluZGV4IFRoZSBpbmRleCBvZiB0aGUgYXR0cmlidXRlICh6ZXJvLWJhc2VkKS4KKyAgICAgKiBAZXhjZXB0aW9uIGphdmEubGFuZy5BcnJheUluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gV2hlbiB0aGUKKyAgICAgKiAgICAgICAgICAgIHN1cHBsaWVkIGluZGV4IGRvZXMgbm90IHBvaW50IHRvIGFuIGF0dHJpYnV0ZQorICAgICAqICAgICAgICAgICAgaW4gdGhlIGxpc3QuCisgICAgICovCisgICAgcHVibGljIHZvaWQgcmVtb3ZlQXR0cmlidXRlIChpbnQgaW5kZXgpCisgICAgeworCWlmIChpbmRleCA+PSAwICYmIGluZGV4IDwgbGVuZ3RoKSB7CisJICAgIGlmIChpbmRleCA8IGxlbmd0aCAtIDEpIHsKKwkJU3lzdGVtLmFycmF5Y29weShkYXRhLCAoaW5kZXgrMSkqNSwgZGF0YSwgaW5kZXgqNSwKKwkJCQkgKGxlbmd0aC1pbmRleC0xKSo1KTsKKwkgICAgfQorCSAgICBpbmRleCA9IChsZW5ndGggLSAxKSAqIDU7CisJICAgIGRhdGEgW2luZGV4KytdID0gbnVsbDsKKwkgICAgZGF0YSBbaW5kZXgrK10gPSBudWxsOworCSAgICBkYXRhIFtpbmRleCsrXSA9IG51bGw7CisJICAgIGRhdGEgW2luZGV4KytdID0gbnVsbDsKKwkgICAgZGF0YSBbaW5kZXhdID0gbnVsbDsKKwkgICAgbGVuZ3RoLS07CisJfSBlbHNlIHsKKwkgICAgYmFkSW5kZXgoaW5kZXgpOworCX0KKyAgICB9CisKKworICAgIC8qKgorICAgICAqIFNldCB0aGUgTmFtZXNwYWNlIFVSSSBvZiBhIHNwZWNpZmljIGF0dHJpYnV0ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBpbmRleCBUaGUgaW5kZXggb2YgdGhlIGF0dHJpYnV0ZSAoemVyby1iYXNlZCkuCisgICAgICogQHBhcmFtIHVyaSBUaGUgYXR0cmlidXRlJ3MgTmFtZXNwYWNlIFVSSSwgb3IgdGhlIGVtcHR5CisgICAgICogICAgICAgIHN0cmluZyBmb3Igbm9uZS4KKyAgICAgKiBAZXhjZXB0aW9uIGphdmEubGFuZy5BcnJheUluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gV2hlbiB0aGUKKyAgICAgKiAgICAgICAgICAgIHN1cHBsaWVkIGluZGV4IGRvZXMgbm90IHBvaW50IHRvIGFuIGF0dHJpYnV0ZQorICAgICAqICAgICAgICAgICAgaW4gdGhlIGxpc3QuCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0VVJJIChpbnQgaW5kZXgsIFN0cmluZyB1cmkpCisgICAgeworCWlmIChpbmRleCA+PSAwICYmIGluZGV4IDwgbGVuZ3RoKSB7CisJICAgIGRhdGFbaW5kZXgqNV0gPSB1cmk7CisJfSBlbHNlIHsKKwkgICAgYmFkSW5kZXgoaW5kZXgpOworCX0KKyAgICB9CisKKworICAgIC8qKgorICAgICAqIFNldCB0aGUgbG9jYWwgbmFtZSBvZiBhIHNwZWNpZmljIGF0dHJpYnV0ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBpbmRleCBUaGUgaW5kZXggb2YgdGhlIGF0dHJpYnV0ZSAoemVyby1iYXNlZCkuCisgICAgICogQHBhcmFtIGxvY2FsTmFtZSBUaGUgYXR0cmlidXRlJ3MgbG9jYWwgbmFtZSwgb3IgdGhlIGVtcHR5CisgICAgICogICAgICAgIHN0cmluZyBmb3Igbm9uZS4KKyAgICAgKiBAZXhjZXB0aW9uIGphdmEubGFuZy5BcnJheUluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gV2hlbiB0aGUKKyAgICAgKiAgICAgICAgICAgIHN1cHBsaWVkIGluZGV4IGRvZXMgbm90IHBvaW50IHRvIGFuIGF0dHJpYnV0ZQorICAgICAqICAgICAgICAgICAgaW4gdGhlIGxpc3QuCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0TG9jYWxOYW1lIChpbnQgaW5kZXgsIFN0cmluZyBsb2NhbE5hbWUpCisgICAgeworCWlmIChpbmRleCA+PSAwICYmIGluZGV4IDwgbGVuZ3RoKSB7CisJICAgIGRhdGFbaW5kZXgqNSsxXSA9IGxvY2FsTmFtZTsKKwl9IGVsc2UgeworCSAgICBiYWRJbmRleChpbmRleCk7CisJfQorICAgIH0KKworCisgICAgLyoqCisgICAgICogU2V0IHRoZSBxdWFsaWZpZWQgbmFtZSBvZiBhIHNwZWNpZmljIGF0dHJpYnV0ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBpbmRleCBUaGUgaW5kZXggb2YgdGhlIGF0dHJpYnV0ZSAoemVyby1iYXNlZCkuCisgICAgICogQHBhcmFtIHFOYW1lIFRoZSBhdHRyaWJ1dGUncyBxdWFsaWZpZWQgbmFtZSwgb3IgdGhlIGVtcHR5CisgICAgICogICAgICAgIHN0cmluZyBmb3Igbm9uZS4KKyAgICAgKiBAZXhjZXB0aW9uIGphdmEubGFuZy5BcnJheUluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gV2hlbiB0aGUKKyAgICAgKiAgICAgICAgICAgIHN1cHBsaWVkIGluZGV4IGRvZXMgbm90IHBvaW50IHRvIGFuIGF0dHJpYnV0ZQorICAgICAqICAgICAgICAgICAgaW4gdGhlIGxpc3QuCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0UU5hbWUgKGludCBpbmRleCwgU3RyaW5nIHFOYW1lKQorICAgIHsKKwlpZiAoaW5kZXggPj0gMCAmJiBpbmRleCA8IGxlbmd0aCkgeworCSAgICBkYXRhW2luZGV4KjUrMl0gPSBxTmFtZTsKKwl9IGVsc2UgeworCSAgICBiYWRJbmRleChpbmRleCk7CisJfQorICAgIH0KKworCisgICAgLyoqCisgICAgICogU2V0IHRoZSB0eXBlIG9mIGEgc3BlY2lmaWMgYXR0cmlidXRlLgorICAgICAqCisgICAgICogQHBhcmFtIGluZGV4IFRoZSBpbmRleCBvZiB0aGUgYXR0cmlidXRlICh6ZXJvLWJhc2VkKS4KKyAgICAgKiBAcGFyYW0gdHlwZSBUaGUgYXR0cmlidXRlJ3MgdHlwZS4KKyAgICAgKiBAZXhjZXB0aW9uIGphdmEubGFuZy5BcnJheUluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gV2hlbiB0aGUKKyAgICAgKiAgICAgICAgICAgIHN1cHBsaWVkIGluZGV4IGRvZXMgbm90IHBvaW50IHRvIGFuIGF0dHJpYnV0ZQorICAgICAqICAgICAgICAgICAgaW4gdGhlIGxpc3QuCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0VHlwZSAoaW50IGluZGV4LCBTdHJpbmcgdHlwZSkKKyAgICB7CisJaWYgKGluZGV4ID49IDAgJiYgaW5kZXggPCBsZW5ndGgpIHsKKwkgICAgZGF0YVtpbmRleCo1KzNdID0gdHlwZTsKKwl9IGVsc2UgeworCSAgICBiYWRJbmRleChpbmRleCk7CisJfQorICAgIH0KKworCisgICAgLyoqCisgICAgICogU2V0IHRoZSB2YWx1ZSBvZiBhIHNwZWNpZmljIGF0dHJpYnV0ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBpbmRleCBUaGUgaW5kZXggb2YgdGhlIGF0dHJpYnV0ZSAoemVyby1iYXNlZCkuCisgICAgICogQHBhcmFtIHZhbHVlIFRoZSBhdHRyaWJ1dGUncyB2YWx1ZS4KKyAgICAgKiBAZXhjZXB0aW9uIGphdmEubGFuZy5BcnJheUluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gV2hlbiB0aGUKKyAgICAgKiAgICAgICAgICAgIHN1cHBsaWVkIGluZGV4IGRvZXMgbm90IHBvaW50IHRvIGFuIGF0dHJpYnV0ZQorICAgICAqICAgICAgICAgICAgaW4gdGhlIGxpc3QuCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0VmFsdWUgKGludCBpbmRleCwgU3RyaW5nIHZhbHVlKQorICAgIHsKKwlpZiAoaW5kZXggPj0gMCAmJiBpbmRleCA8IGxlbmd0aCkgeworCSAgICBkYXRhW2luZGV4KjUrNF0gPSB2YWx1ZTsKKwl9IGVsc2UgeworCSAgICBiYWRJbmRleChpbmRleCk7CisJfQorICAgIH0KKworCisMCisgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAgICAvLyBJbnRlcm5hbCBtZXRob2RzLgorICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKworICAgIC8qKgorICAgICAqIEVuc3VyZSB0aGUgaW50ZXJuYWwgYXJyYXkncyBjYXBhY2l0eS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBuIFRoZSBtaW5pbXVtIG51bWJlciBvZiBhdHRyaWJ1dGVzIHRoYXQgdGhlIGFycmF5IG11c3QKKyAgICAgKiAgICAgICAgYmUgYWJsZSB0byBob2xkLgorICAgICAqLworICAgIHByaXZhdGUgdm9pZCBlbnN1cmVDYXBhY2l0eSAoaW50IG4pICAgIHsKKyAgICAgICAgaWYgKG4gPD0gMCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGludCBtYXg7CisgICAgICAgIGlmIChkYXRhID09IG51bGwgfHwgZGF0YS5sZW5ndGggPT0gMCkgeworICAgICAgICAgICAgbWF4ID0gMjU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoZGF0YS5sZW5ndGggPj0gbiAqIDUpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG1heCA9IGRhdGEubGVuZ3RoOworICAgICAgICB9CisgICAgICAgIHdoaWxlIChtYXggPCBuICogNSkgeworICAgICAgICAgICAgbWF4ICo9IDI7CisgICAgICAgIH0KKworICAgICAgICBTdHJpbmcgbmV3RGF0YVtdID0gbmV3IFN0cmluZ1ttYXhdOworICAgICAgICBpZiAobGVuZ3RoID4gMCkgeworICAgICAgICAgICAgU3lzdGVtLmFycmF5Y29weShkYXRhLCAwLCBuZXdEYXRhLCAwLCBsZW5ndGgqNSk7CisgICAgICAgIH0KKyAgICAgICAgZGF0YSA9IG5ld0RhdGE7CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiBSZXBvcnQgYSBiYWQgYXJyYXkgaW5kZXggaW4gYSBtYW5pcHVsYXRvci4KKyAgICAgKgorICAgICAqIEBwYXJhbSBpbmRleCBUaGUgaW5kZXggdG8gcmVwb3J0LgorICAgICAqIEBleGNlcHRpb24gamF2YS5sYW5nLkFycmF5SW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiBBbHdheXMuCisgICAgICovCisgICAgcHJpdmF0ZSB2b2lkIGJhZEluZGV4IChpbnQgaW5kZXgpCisJdGhyb3dzIEFycmF5SW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbgorICAgIHsKKwlTdHJpbmcgbXNnID0KKwkgICAgIkF0dGVtcHQgdG8gbW9kaWZ5IGF0dHJpYnV0ZSBhdCBpbGxlZ2FsIGluZGV4OiAiICsgaW5kZXg7CisJdGhyb3cgbmV3IEFycmF5SW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbihtc2cpOworICAgIH0KKworCisMCisgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAgICAvLyBJbnRlcm5hbCBzdGF0ZS4KKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisgICAgaW50IGxlbmd0aDsKKyAgICBTdHJpbmcgZGF0YSBbXTsKKworfQorCisvLyBlbmQgb2YgQXR0cmlidXRlc0ltcGwuamF2YQorCmRpZmYgLS1naXQgYS9zcmMvamF2YS9vcmcvY2NpbC9jb3dhbi90YWdzb3VwL0F1dG9EZXRlY3Rvci5qYXZhIGIvc3JjL2phdmEvb3JnL2NjaWwvY293YW4vdGFnc291cC9BdXRvRGV0ZWN0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjg1ZDZmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2phdmEvb3JnL2NjaWwvY293YW4vdGFnc291cC9BdXRvRGV0ZWN0b3IuamF2YQpAQCAtMCwwICsxLDQzIEBACisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiBUYWdTb3VwIGFuZCBpcyBDb3B5cmlnaHQgMjAwMi0yMDA4IGJ5IEpvaG4gQ293YW4uCisvLworLy8gVGFnU291cCBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsCisvLyBWZXJzaW9uIDIuMC4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGlzIGxpY2Vuc2UgYXQKKy8vIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAuICBZb3UgbWF5IGFsc28gaGF2ZQorLy8gYWRkaXRpb25hbCBsZWdhbCByaWdodHMgbm90IGdyYW50ZWQgYnkgdGhpcyBsaWNlbnNlLgorLy8KKy8vIFRhZ1NvdXAgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyB1bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIFRhZ1NvdXAKKy8vIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TCisvLyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZDsgbm90IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkKKy8vIG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKy8vIAorLy8gCisvLyBJbnRlcmZhY2UgdG8gb2JqZWN0cyB0aGF0IHRyYW5zbGF0ZSBJbnB1dFN0cmVhbXMgdG8gUmVhZGVycyBieSBhdXRvLWRldGVjdGlvbgorCitwYWNrYWdlIG9yZy5jY2lsLmNvd2FuLnRhZ3NvdXA7CitpbXBvcnQgamF2YS5pby5SZWFkZXI7CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKKworLyoqCitDbGFzc2VzIHdoaWNoIGFjY2VwdCBhbiBJbnB1dFN0cmVhbSBhbmQgcHJvdmlkZSBhIFJlYWRlciB3aGljaCBmaWd1cmVzCitvdXQgdGhlIGVuY29kaW5nIG9mIHRoZSBJbnB1dFN0cmVhbSBhbmQgcmVhZHMgY2hhcmFjdGVycyBmcm9tIGl0IHNob3VsZAorY29uZm9ybSB0byB0aGlzIGludGVyZmFjZS4KK0BzZWUgamF2YS5pby5JbnB1dFN0cmVhbQorQHNlZSBqYXZhLmlvLlJlYWRlcgorKi8KKworcHVibGljIGludGVyZmFjZSBBdXRvRGV0ZWN0b3IgeworCisJLyoqCisJR2l2ZW4gYW4gSW5wdXRTdHJlYW0sIHJldHVybiBhIHN1aXRhYmxlIFJlYWRlciB0aGF0IHVuZGVyc3RhbmRzCisJdGhlIHByZXN1bWVkIGNoYXJhY3RlciBlbmNvZGluZyBvZiB0aGF0IElucHV0U3RyZWFtLgorCUlmIGJ5dGVzIGFyZSBjb25zdW1lZCBmcm9tIHRoZSBJbnB1dFN0cmVhbSBpbiB0aGUgcHJvY2VzcywgdGhleQorCTxpPm11c3Q8L2k+IGJlIHB1c2hlZCBiYWNrIG9udG8gdGhlIElucHV0U3RyZWFtIHNvIHRoYXQgdGhleSBjYW4gYmUKKwlyZWludGVycHJldGVkIGFzIGNoYXJhY3RlcnMuCisJQHBhcmFtIGkgVGhlIElucHV0U3RyZWFtCisJQHJldHVybiBBIFJlYWRlciB0aGF0IHJlYWRzIGZyb20gdGhlIElucHV0U3RyZWFtCisJKi8KKworCXB1YmxpYyBSZWFkZXIgYXV0b0RldGVjdGluZ1JlYWRlcihJbnB1dFN0cmVhbSBpKTsKKworCX0KZGlmZiAtLWdpdCBhL3NyYy9qYXZhL29yZy9jY2lsL2Nvd2FuL3RhZ3NvdXAvQ29tbWFuZExpbmUuamF2YSBiL3NyYy9qYXZhL29yZy9jY2lsL2Nvd2FuL3RhZ3NvdXAvQ29tbWFuZExpbmUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDBjMDIyCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2phdmEvb3JnL2NjaWwvY293YW4vdGFnc291cC9Db21tYW5kTGluZS5qYXZhCkBAIC0wLDAgKzEsMjg5IEBACisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiBUYWdTb3VwIGFuZCBpcyBDb3B5cmlnaHQgMjAwMi0yMDA4IGJ5IEpvaG4gQ293YW4uCisvLworLy8gVGFnU291cCBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsCisvLyBWZXJzaW9uIDIuMC4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGlzIGxpY2Vuc2UgYXQKKy8vIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAuICBZb3UgbWF5IGFsc28gaGF2ZQorLy8gYWRkaXRpb25hbCBsZWdhbCByaWdodHMgbm90IGdyYW50ZWQgYnkgdGhpcyBsaWNlbnNlLgorLy8KKy8vIFRhZ1NvdXAgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyB1bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIFRhZ1NvdXAKKy8vIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TCisvLyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZDsgbm90IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkKKy8vIG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKy8vIAorLy8gCisvLyBUaGUgVGFnU291cCBjb21tYW5kIGxpbmUgVUkKKworcGFja2FnZSBvcmcuY2NpbC5jb3dhbi50YWdzb3VwOworaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7CitpbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOworaW1wb3J0IGphdmEuaW8uKjsKK2ltcG9ydCBqYXZhLm5ldC5VUkw7CitpbXBvcnQgamF2YS5uZXQuVVJMQ29ubmVjdGlvbjsKK2ltcG9ydCBvcmcueG1sLnNheC4qOworaW1wb3J0IG9yZy54bWwuc2F4LmhlbHBlcnMuRGVmYXVsdEhhbmRsZXI7CitpbXBvcnQgb3JnLnhtbC5zYXguZXh0LkxleGljYWxIYW5kbGVyOworCisKKy8qKgorVGhlIHN0YW5kLWFsb25lIFRhZ1NvdXAgcHJvZ3JhbS4KKyoqLworcHVibGljIGNsYXNzIENvbW1hbmRMaW5lIHsKKworCXN0YXRpYyBIYXNodGFibGUgb3B0aW9ucyA9IG5ldyBIYXNodGFibGUoKTsgc3RhdGljIHsKKwkJb3B0aW9ucy5wdXQoIi0tbm9jZGF0YSIsIEJvb2xlYW4uRkFMU0UpOyAvLyBDREFUQSBlbGVtZW50cyBhcmUgbm9ybWFsCisJCW9wdGlvbnMucHV0KCItLWZpbGVzIiwgQm9vbGVhbi5GQUxTRSk7CS8vIHByb2Nlc3MgYXJndW1lbnRzIGFzIHNlcGFyYXRlIGZpbGVzCisJCW9wdGlvbnMucHV0KCItLXJldXNlIiwgQm9vbGVhbi5GQUxTRSk7CS8vIHJldXNlIGEgc2luZ2xlIFBhcnNlcgorCQlvcHRpb25zLnB1dCgiLS1ub25zIiwgQm9vbGVhbi5GQUxTRSk7CS8vIG5vIG5hbWVzcGFjZXMKKwkJb3B0aW9ucy5wdXQoIi0tbm9ib2dvbnMiLCBCb29sZWFuLkZBTFNFKTsgIC8vIHN1cHByZXNzIHVua25vd24gZWxlbWVudHMKKwkJb3B0aW9ucy5wdXQoIi0tYW55IiwgQm9vbGVhbi5GQUxTRSk7CS8vIHVua25vd25zIGhhdmUgQU5ZIGNvbnRlbnQgbW9kZWwKKwkJb3B0aW9ucy5wdXQoIi0tZW1wdHlib2dvbnMiLCBCb29sZWFuLkZBTFNFKTsJLy8gdW5rbm93bnMgaGF2ZSBFTVBUWSBjb250ZW50IG1vZGVsCisJCW9wdGlvbnMucHV0KCItLW5vcm9vdGJvZ29ucyIsIEJvb2xlYW4uRkFMU0UpOwkvLyB1bmtub3ducyBjYW4ndCBiZSB0aGUgcm9vdAorCQlvcHRpb25zLnB1dCgiLS1weXhpbiIsIEJvb2xlYW4uRkFMU0UpOwkvLyBpbnB1dCBpcyBQWVgKKwkJb3B0aW9ucy5wdXQoIi0tbGV4aWNhbCIsIEJvb2xlYW4uRkFMU0UpOyAvLyBvdXRwdXQgY29tbWVudHMKKwkJb3B0aW9ucy5wdXQoIi0tcHl4IiwgQm9vbGVhbi5GQUxTRSk7CS8vIG91dHB1dCBpcyBQWVgKKwkJb3B0aW9ucy5wdXQoIi0taHRtbCIsIEJvb2xlYW4uRkFMU0UpOwkvLyBvdXRwdXQgaXMgSFRNTAorCQlvcHRpb25zLnB1dCgiLS1tZXRob2Q9IiwgQm9vbGVhbi5GQUxTRSk7IC8vIG91dHB1dCBtZXRob2QKKwkJb3B0aW9ucy5wdXQoIi0tZG9jdHlwZS1wdWJsaWM9IiwgQm9vbGVhbi5GQUxTRSk7IC8vIG92ZXJyaWRlIHB1YmxpYyBpZAorCQlvcHRpb25zLnB1dCgiLS1kb2N0eXBlLXN5c3RlbT0iLCBCb29sZWFuLkZBTFNFKTsgLy8gb3ZlcnJpZGUgc3lzdGVtIGlkCisJCW9wdGlvbnMucHV0KCItLW91dHB1dC1lbmNvZGluZz0iLCBCb29sZWFuLkZBTFNFKTsgLy8gb3V0cHV0IGVuY29kaW5nCisJCW9wdGlvbnMucHV0KCItLW9taXQteG1sLWRlY2xhcmF0aW9uIiwgQm9vbGVhbi5GQUxTRSk7IC8vIG9taXQgWE1MIGRlY2wKKwkJb3B0aW9ucy5wdXQoIi0tZW5jb2Rpbmc9IiwgQm9vbGVhbi5GQUxTRSk7IC8vIHNwZWNpZnkgZW5jb2RpbmcKKwkJb3B0aW9ucy5wdXQoIi0taGVscCIsIEJvb2xlYW4uRkFMU0UpOyAJLy8gZGlzcGxheSBoZWxwCisJCW9wdGlvbnMucHV0KCItLXZlcnNpb24iLCBCb29sZWFuLkZBTFNFKTsJLy8gZGlzcGxheSB2ZXJzaW9uCisJCW9wdGlvbnMucHV0KCItLW5vZGVmYXVsdHMiLCBCb29sZWFuLkZBTFNFKTsgLy8gbm8gZGVmYXVsdCBhdHRycworCQlvcHRpb25zLnB1dCgiLS1ub2NvbG9ucyIsIEJvb2xlYW4uRkFMU0UpOyAvLyBjb2xvbiB0byB1bmRlcnNjb3JlCisJCW9wdGlvbnMucHV0KCItLW5vcmVzdGFydCIsIEJvb2xlYW4uRkFMU0UpOyAvLyBubyByZXN0YXJ0YWJsZSBlbGVtZW50cworCQlvcHRpb25zLnB1dCgiLS1pZ25vcmFibGUiLCBCb29sZWFuLkZBTFNFKTsgIC8vIHJldHVybiBpZ25vcmFibGUgd2hpdGVzcGFjZQorCQl9CisKKwkvKioKKwlNYWluIG1ldGhvZC4gIFByb2Nlc3NlcyBzcGVjaWZpZWQgZmlsZXMgb3Igc3RhbmRhcmQgaW5wdXQuCisJKiovCisKKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmd2KSB0aHJvd3MgSU9FeGNlcHRpb24sIFNBWEV4Y2VwdGlvbiB7CisJCWludCBvcHRpbmQgPSBnZXRvcHRzKG9wdGlvbnMsIGFyZ3YpOworCQlpZiAoaGFzT3B0aW9uKG9wdGlvbnMsICItLWhlbHAiKSkgeworCQkJZG9IZWxwKCk7CisJCQlyZXR1cm47CisJCQl9CisJCWlmIChoYXNPcHRpb24ob3B0aW9ucywgIi0tdmVyc2lvbiIpKSB7CisJCQlTeXN0ZW0uZXJyLnByaW50bG4oIlRhZ1NvdXAgdmVyc2lvbiAxLjIiKTsKKwkJCXJldHVybjsKKwkJCX0KKwkJaWYgKGFyZ3YubGVuZ3RoID09IG9wdGluZCkgeworCQkJcHJvY2VzcygiIiwgU3lzdGVtLm91dCk7CisJCQl9CisJCWVsc2UgaWYgKGhhc09wdGlvbihvcHRpb25zLCAiLS1maWxlcyIpKSB7CisJCQlmb3IgKGludCBpID0gb3B0aW5kOyBpIDwgYXJndi5sZW5ndGg7IGkrKykgeworCQkJCVN0cmluZyBzcmMgPSBhcmd2W2ldOworCQkJCVN0cmluZyBkc3Q7CisJCQkJaW50IGogPSBzcmMubGFzdEluZGV4T2YoJy4nKTsKKwkJCQlpZiAoaiA9PSAtMSkKKwkJCQkJZHN0ID0gc3JjICsgIi54aHRtbCI7CisJCQkJZWxzZSBpZiAoc3JjLmVuZHNXaXRoKCIueGh0bWwiKSkKKwkJCQkJZHN0ID0gc3JjICsgIl8iOworCQkJCWVsc2UKKwkJCQkJZHN0ID0gc3JjLnN1YnN0cmluZygwLCBqKSArICIueGh0bWwiOworCQkJCVN5c3RlbS5lcnIucHJpbnRsbigic3JjOiAiICsgc3JjICsgIiBkc3Q6ICIgKyBkc3QpOworCQkJCU91dHB1dFN0cmVhbSBvcyA9IG5ldyBGaWxlT3V0cHV0U3RyZWFtKGRzdCk7CisJCQkJcHJvY2VzcyhzcmMsIG9zKTsKKwkJCQl9CisJCQl9CisJCWVsc2UgeworCQkJZm9yIChpbnQgaSA9IG9wdGluZDsgaSA8IGFyZ3YubGVuZ3RoOyBpKyspIHsKKwkJCQlTeXN0ZW0uZXJyLnByaW50bG4oInNyYzogIiArIGFyZ3ZbaV0pOworCQkJCXByb2Nlc3MoYXJndltpXSwgU3lzdGVtLm91dCk7CisJCQkJfQorCQkJfQorCQl9CisKKwkvLyBQcmludCB0aGUgaGVscCBtZXNzYWdlCisKKwlwcml2YXRlIHN0YXRpYyB2b2lkIGRvSGVscCgpIHsKKwkJU3lzdGVtLmVyci5wcmludCgidXNhZ2U6IGphdmEgLWphciB0YWdzb3VwLSouamFyICIpOworCQlTeXN0ZW0uZXJyLnByaW50KCIgWyAiKTsKKwkJYm9vbGVhbiBmaXJzdCA9IHRydWU7CisJCWZvciAoRW51bWVyYXRpb24gZSA9IG9wdGlvbnMua2V5cygpOyBlLmhhc01vcmVFbGVtZW50cygpOyApIHsKKwkJCWlmICghZmlyc3QpIHsKKwkJCQlTeXN0ZW0uZXJyLnByaW50KCJ8ICIpOworCQkJCX0KKwkJCWZpcnN0ID0gZmFsc2U7CisJCQlTdHJpbmcga2V5ID0gKFN0cmluZykoZS5uZXh0RWxlbWVudCgpKTsKKwkJCVN5c3RlbS5lcnIucHJpbnQoa2V5KTsKKwkJCWlmIChrZXkuZW5kc1dpdGgoIj0iKSkKKwkJCQlTeXN0ZW0uZXJyLnByaW50KCI/Iik7CisJCQkJU3lzdGVtLmVyci5wcmludCgiICIpOworCQkJfQorCQlTeXN0ZW0uZXJyLnByaW50bG4oIl0qIik7CisJfQorCisJcHJpdmF0ZSBzdGF0aWMgUGFyc2VyIHRoZVBhcnNlciA9IG51bGw7CisJcHJpdmF0ZSBzdGF0aWMgSFRNTFNjaGVtYSB0aGVTY2hlbWEgPSBudWxsOworCXByaXZhdGUgc3RhdGljIFN0cmluZyB0aGVPdXRwdXRFbmNvZGluZyA9IG51bGw7CisKKwkvLyBQcm9jZXNzIG9uZSBzb3VyY2Ugb250byBhbiBvdXRwdXQgc3RyZWFtLgorCisJcHJpdmF0ZSBzdGF0aWMgdm9pZCBwcm9jZXNzKFN0cmluZyBzcmMsIE91dHB1dFN0cmVhbSBvcykKKwkJCXRocm93cyBJT0V4Y2VwdGlvbiwgU0FYRXhjZXB0aW9uIHsKKwkJWE1MUmVhZGVyIHI7CisJCWlmIChoYXNPcHRpb24ob3B0aW9ucywgIi0tcmV1c2UiKSkgeworCQkJaWYgKHRoZVBhcnNlciA9PSBudWxsKSB0aGVQYXJzZXIgPSBuZXcgUGFyc2VyKCk7CisJCQlyID0gdGhlUGFyc2VyOworCQkJfQorCQllbHNlIHsKKwkJCXIgPSBuZXcgUGFyc2VyKCk7CisJCQl9CisJCXRoZVNjaGVtYSA9IG5ldyBIVE1MU2NoZW1hKCk7CisJCXIuc2V0UHJvcGVydHkoUGFyc2VyLnNjaGVtYVByb3BlcnR5LCB0aGVTY2hlbWEpOworCisJCWlmIChoYXNPcHRpb24ob3B0aW9ucywgIi0tbm9jZGF0YSIpKSB7CisJCQlyLnNldEZlYXR1cmUoUGFyc2VyLkNEQVRBRWxlbWVudHNGZWF0dXJlLCBmYWxzZSk7CisJCQl9CisKKwkJaWYgKGhhc09wdGlvbihvcHRpb25zLCAiLS1ub25zIikgfHwgaGFzT3B0aW9uKG9wdGlvbnMsICItLWh0bWwiKSkgeworCQkJci5zZXRGZWF0dXJlKFBhcnNlci5uYW1lc3BhY2VzRmVhdHVyZSwgZmFsc2UpOworCQkJfQorCisJCWlmIChoYXNPcHRpb24ob3B0aW9ucywgIi0tbm9ib2dvbnMiKSkgeworCQkJci5zZXRGZWF0dXJlKFBhcnNlci5pZ25vcmVCb2dvbnNGZWF0dXJlLCB0cnVlKTsKKwkJCX0KKworCQlpZiAoaGFzT3B0aW9uKG9wdGlvbnMsICItLWFueSIpKSB7CisJCQlyLnNldEZlYXR1cmUoUGFyc2VyLmJvZ29uc0VtcHR5RmVhdHVyZSwgZmFsc2UpOworCQkJfQorCQllbHNlIGlmIChoYXNPcHRpb24ob3B0aW9ucywgIi0tZW1wdHlib2dvbnMiKSkgeworCQkJci5zZXRGZWF0dXJlKFBhcnNlci5ib2dvbnNFbXB0eUZlYXR1cmUsIHRydWUpOworCQkJfQorCisJCWlmIChoYXNPcHRpb24ob3B0aW9ucywgIi0tbm9yb290Ym9nb25zIikpIHsKKwkJCXIuc2V0RmVhdHVyZShQYXJzZXIucm9vdEJvZ29uc0ZlYXR1cmUsIGZhbHNlKTsKKwkJCX0KKworCQlpZiAoaGFzT3B0aW9uKG9wdGlvbnMsICItLW5vZGVmYXVsdHMiKSkgeworCQkJci5zZXRGZWF0dXJlKFBhcnNlci5kZWZhdWx0QXR0cmlidXRlc0ZlYXR1cmUsIGZhbHNlKTsKKwkJCX0KKwkJaWYgKGhhc09wdGlvbihvcHRpb25zLCAiLS1ub2NvbG9ucyIpKSB7CisJCQlyLnNldEZlYXR1cmUoUGFyc2VyLnRyYW5zbGF0ZUNvbG9uc0ZlYXR1cmUsIHRydWUpOworCQkJfQorCisJCWlmIChoYXNPcHRpb24ob3B0aW9ucywgIi0tbm9yZXN0YXJ0IikpIHsKKwkJCXIuc2V0RmVhdHVyZShQYXJzZXIucmVzdGFydEVsZW1lbnRzRmVhdHVyZSwgZmFsc2UpOworCQkJfQorCisJCWlmIChoYXNPcHRpb24ob3B0aW9ucywgIi0taWdub3JhYmxlIikpIHsKKwkJCXIuc2V0RmVhdHVyZShQYXJzZXIuaWdub3JhYmxlV2hpdGVzcGFjZUZlYXR1cmUsIHRydWUpOworCQkJfQorCisJCWlmIChoYXNPcHRpb24ob3B0aW9ucywgIi0tcHl4aW4iKSkgeworCQkJci5zZXRQcm9wZXJ0eShQYXJzZXIuc2Nhbm5lclByb3BlcnR5LCBuZXcgUFlYU2Nhbm5lcigpKTsKKwkJCX0KKworCQlXcml0ZXIgdzsKKwkJaWYgKHRoZU91dHB1dEVuY29kaW5nID09IG51bGwpIHsKKwkJCXcgPSBuZXcgT3V0cHV0U3RyZWFtV3JpdGVyKG9zKTsKKwkJCX0KKwkJZWxzZSB7CisJCQl3ID0gbmV3IE91dHB1dFN0cmVhbVdyaXRlcihvcywgdGhlT3V0cHV0RW5jb2RpbmcpOworCQkJfQorCQlDb250ZW50SGFuZGxlciBoID0gY2hvb3NlQ29udGVudEhhbmRsZXIodyk7CisJCXIuc2V0Q29udGVudEhhbmRsZXIoaCk7CisJCWlmIChoYXNPcHRpb24ob3B0aW9ucywgIi0tbGV4aWNhbCIpICYmIGggaW5zdGFuY2VvZiBMZXhpY2FsSGFuZGxlcikgeworCQkJci5zZXRQcm9wZXJ0eShQYXJzZXIubGV4aWNhbEhhbmRsZXJQcm9wZXJ0eSwgaCk7CisJCQl9CisJCUlucHV0U291cmNlIHMgPSBuZXcgSW5wdXRTb3VyY2UoKTsKKwkJaWYgKHNyYyAhPSAiIikgeworCQkJcy5zZXRTeXN0ZW1JZChzcmMpOworCQkJfQorCQllbHNlIHsKKwkJCXMuc2V0Qnl0ZVN0cmVhbShTeXN0ZW0uaW4pOworCQkJfQorCQlpZiAoaGFzT3B0aW9uKG9wdGlvbnMsICItLWVuY29kaW5nPSIpKSB7CisvLwkJCVN5c3RlbS5vdXQucHJpbnRsbigiJSUgRm91bmQgLS1lbmNvZGluZyIpOworCQkJU3RyaW5nIGVuY29kaW5nID0gKFN0cmluZylvcHRpb25zLmdldCgiLS1lbmNvZGluZz0iKTsKKwkJCWlmIChlbmNvZGluZyAhPSBudWxsKSBzLnNldEVuY29kaW5nKGVuY29kaW5nKTsKKwkJCX0KKwkJci5wYXJzZShzKTsKKwkJfQorCisJLy8gUGljayBhIGNvbnRlbnQgaGFuZGxlciB0byBnZW5lcmF0ZSB0aGUgZGVzaXJlZCBmb3JtYXQuCisKKwlwcml2YXRlIHN0YXRpYyBDb250ZW50SGFuZGxlciBjaG9vc2VDb250ZW50SGFuZGxlcihXcml0ZXIgdykgeworCQlYTUxXcml0ZXIgeDsKKwkJaWYgKGhhc09wdGlvbihvcHRpb25zLCAiLS1weXgiKSkgeworCQkJcmV0dXJuIG5ldyBQWVhXcml0ZXIodyk7CisJCQl9CisKKwkJeCA9IG5ldyBYTUxXcml0ZXIodyk7CisJCWlmIChoYXNPcHRpb24ob3B0aW9ucywgIi0taHRtbCIpKSB7CisJCQl4LnNldE91dHB1dFByb3BlcnR5KFhNTFdyaXRlci5NRVRIT0QsICJodG1sIik7CisJCQl4LnNldE91dHB1dFByb3BlcnR5KFhNTFdyaXRlci5PTUlUX1hNTF9ERUNMQVJBVElPTiwgInllcyIpOworCQkJfQorCQlpZiAoaGFzT3B0aW9uKG9wdGlvbnMsICItLW1ldGhvZD0iKSkgeworCQkJU3RyaW5nIG1ldGhvZCA9IChTdHJpbmcpb3B0aW9ucy5nZXQoIi0tbWV0aG9kPSIpOworCQkJaWYgKG1ldGhvZCAhPSBudWxsKSB7CisJCQkJeC5zZXRPdXRwdXRQcm9wZXJ0eShYTUxXcml0ZXIuTUVUSE9ELCBtZXRob2QpOworCQkJCX0KKwkJCX0KKwkJaWYgKGhhc09wdGlvbihvcHRpb25zLCAiLS1kb2N0eXBlLXB1YmxpYz0iKSkgeworCQkJU3RyaW5nIGRvY3R5cGVfcHVibGljID0gKFN0cmluZylvcHRpb25zLmdldCgiLS1kb2N0eXBlLXB1YmxpYz0iKTsKKwkJCWlmIChkb2N0eXBlX3B1YmxpYyAhPSBudWxsKSB7CisJCQkJeC5zZXRPdXRwdXRQcm9wZXJ0eShYTUxXcml0ZXIuRE9DVFlQRV9QVUJMSUMsIGRvY3R5cGVfcHVibGljKTsKKwkJCQl9CisJCQl9CisJCWlmIChoYXNPcHRpb24ob3B0aW9ucywgIi0tZG9jdHlwZS1zeXN0ZW09IikpIHsKKwkJCVN0cmluZyBkb2N0eXBlX3N5c3RlbSA9IChTdHJpbmcpb3B0aW9ucy5nZXQoIi0tZG9jdHlwZS1zeXN0ZW09Iik7CisJCQlpZiAoZG9jdHlwZV9zeXN0ZW0gIT0gbnVsbCkgeworCQkJCXguc2V0T3V0cHV0UHJvcGVydHkoWE1MV3JpdGVyLkRPQ1RZUEVfU1lTVEVNLCBkb2N0eXBlX3N5c3RlbSk7CisJCQkJfQorCQkJfQorCQlpZiAoaGFzT3B0aW9uKG9wdGlvbnMsICItLW91dHB1dC1lbmNvZGluZz0iKSkgeworCQkJdGhlT3V0cHV0RW5jb2RpbmcgPSAoU3RyaW5nKW9wdGlvbnMuZ2V0KCItLW91dHB1dC1lbmNvZGluZz0iKTsKKy8vCQkJU3lzdGVtLmVyci5wcmludGxuKCIlJSUlIE91dHB1dCBlbmNvZGluZyBpcyAiICsgdGhlT3V0cHV0RW5jb2RpbmcpOworCQkJaWYgKHRoZU91dHB1dEVuY29kaW5nICE9IG51bGwpIHsKKwkJCQl4LnNldE91dHB1dFByb3BlcnR5KFhNTFdyaXRlci5FTkNPRElORywgdGhlT3V0cHV0RW5jb2RpbmcpOworCQkJCX0KKwkJCX0KKwkJaWYgKGhhc09wdGlvbihvcHRpb25zLCAiLS1vbWl0LXhtbC1kZWNsYXJhdGlvbiIpKSB7CisJCQl4LnNldE91dHB1dFByb3BlcnR5KFhNTFdyaXRlci5PTUlUX1hNTF9ERUNMQVJBVElPTiwgInllcyIpOworCQkJfQorCQl4LnNldFByZWZpeCh0aGVTY2hlbWEuZ2V0VVJJKCksICIiKTsKKwkJcmV0dXJuIHg7CisJCX0KKworCS8vIE9wdGlvbnMgcHJvY2Vzc2luZworCisJcHJpdmF0ZSBzdGF0aWMgaW50IGdldG9wdHMoSGFzaHRhYmxlIG9wdGlvbnMsIFN0cmluZ1tdIGFyZ3YpIHsKKwkJaW50IG9wdGluZDsKKwkJZm9yIChvcHRpbmQgPSAwOyBvcHRpbmQgPCBhcmd2Lmxlbmd0aDsgb3B0aW5kKyspIHsKKwkJCVN0cmluZyBhcmcgPSBhcmd2W29wdGluZF07CisJCQlTdHJpbmcgdmFsdWUgPSBudWxsOworCQkJaWYgKGFyZy5jaGFyQXQoMCkgIT0gJy0nKSBicmVhazsKKwkJCWludCBlcXNpZ24gPSBhcmcuaW5kZXhPZignPScpOworCQkJaWYgKGVxc2lnbiAhPSAtMSkgeworCQkJCXZhbHVlID0gYXJnLnN1YnN0cmluZyhlcXNpZ24gKyAxLCBhcmcubGVuZ3RoKCkpOworCQkJCWFyZyA9IGFyZy5zdWJzdHJpbmcoMCwgZXFzaWduICsgMSk7CisJCQkJfQorCQkJaWYgKG9wdGlvbnMuY29udGFpbnNLZXkoYXJnKSkgeworCQkJCWlmICh2YWx1ZSA9PSBudWxsKSBvcHRpb25zLnB1dChhcmcsIEJvb2xlYW4uVFJVRSk7CisJCQkJZWxzZSBvcHRpb25zLnB1dChhcmcsIHZhbHVlKTsKKy8vCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiJSUgUGFyc2VkIFsiICsgYXJnICsgIl09WyIgKyB2YWx1ZSArICJdIik7CisJCQkJfQorCQkJZWxzZSB7CisJCQkJU3lzdGVtLmVyci5wcmludCgiVW5rbm93biBvcHRpb24gIik7CisJCQkJU3lzdGVtLmVyci5wcmludGxuKGFyZyk7CisJCQkJU3lzdGVtLmV4aXQoMSk7CisJCQkJfQorCQkJfQorCQlyZXR1cm4gb3B0aW5kOworCQl9CisKKwkvLyBSZXR1cm4gdHJ1ZSBpZiBhbiBvcHRpb24gZXhpc3RzLgorCisJcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBoYXNPcHRpb24oSGFzaHRhYmxlIG9wdGlvbnMsIFN0cmluZyBvcHRpb24pIHsKKwkJaWYgKEJvb2xlYW4uZ2V0Qm9vbGVhbihvcHRpb24pKSByZXR1cm4gdHJ1ZTsKKwkJZWxzZSBpZiAob3B0aW9ucy5nZXQob3B0aW9uKSAhPSBCb29sZWFuLkZBTFNFKSByZXR1cm4gdHJ1ZTsKKwkJcmV0dXJuIGZhbHNlOworCQl9CisKKwl9CmRpZmYgLS1naXQgYS9zcmMvamF2YS9vcmcvY2NpbC9jb3dhbi90YWdzb3VwL0VsZW1lbnQuamF2YSBiL3NyYy9qYXZhL29yZy9jY2lsL2Nvd2FuL3RhZ3NvdXAvRWxlbWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxYTlmYTcKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvamF2YS9vcmcvY2NpbC9jb3dhbi90YWdzb3VwL0VsZW1lbnQuamF2YQpAQCAtMCwwICsxLDIwMyBAQAorLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgVGFnU291cCBhbmQgaXMgQ29weXJpZ2h0IDIwMDItMjAwOCBieSBKb2huIENvd2FuLgorLy8KKy8vIFRhZ1NvdXAgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLAorLy8gVmVyc2lvbiAyLjAuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhpcyBsaWNlbnNlIGF0CisvLyBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAgLiAgWW91IG1heSBhbHNvIGhhdmUKKy8vIGFkZGl0aW9uYWwgbGVnYWwgcmlnaHRzIG5vdCBncmFudGVkIGJ5IHRoaXMgbGljZW5zZS4KKy8vCisvLyBUYWdTb3VwIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gdW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBUYWdTb3VwCisvLyBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUworLy8gT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQ7IG5vdCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5CisvLyBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisKK3BhY2thZ2Ugb3JnLmNjaWwuY293YW4udGFnc291cDsKKworLyoqCitUaGUgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gb2YgYW4gYWN0dWFsIGVsZW1lbnQgKG5vdCBhbiBlbGVtZW50IHR5cGUpLgorQW4gRWxlbWVudCBoYXMgYW4gZWxlbWVudCB0eXBlLCBhdHRyaWJ1dGVzLCBhbmQgYSBzdWNjZXNzb3IgRWxlbWVudAorZm9yIHVzZSBpbiBjb25zdHJ1Y3Rpbmcgc3RhY2tzIGFuZCBxdWV1ZXMgb2YgRWxlbWVudHMuCitAc2VlIEVsZW1lbnRUeXBlCitAc2VlIEF0dHJpYnV0ZXNJbXBsCisqLworcHVibGljIGNsYXNzIEVsZW1lbnQgeworCisKKwlwcml2YXRlIEVsZW1lbnRUeXBlIHRoZVR5cGU7CQkvLyB0eXBlIG9mIGVsZW1lbnQKKwlwcml2YXRlIEF0dHJpYnV0ZXNJbXBsIHRoZUF0dHM7CQkvLyBhdHRyaWJ1dGVzIG9mIGVsZW1lbnQKKwlwcml2YXRlIEVsZW1lbnQgdGhlTmV4dDsJCS8vIHN1Y2Nlc3NvciBvZiBlbGVtZW50CisJcHJpdmF0ZSBib29sZWFuIHByZWNsb3NlZDsJCS8vIHRoaXMgZWxlbWVudCBoYXMgYmVlbiBwcmVjbG9zZWQKKworCS8qKgorCVJldHVybiBhbiBFbGVtZW50IGZyb20gYSBzcGVjaWZpZWQgRWxlbWVudFR5cGUuCisJQHBhcmFtIHR5cGUgVGhlIGVsZW1lbnQgdHlwZSBvZiB0aGUgbmV3bHkgY29uc3RydWN0ZWQgZWxlbWVudAorCUBwYXJhbSBkZWZhdWx0QXR0cmlidXRlcyBUcnVlIGlmIGRlZmF1bHQgYXR0cmlidXRlcyBhcmUgd2FudGVkCisJKi8KKworCXB1YmxpYyBFbGVtZW50KEVsZW1lbnRUeXBlIHR5cGUsIGJvb2xlYW4gZGVmYXVsdEF0dHJpYnV0ZXMpIHsKKwkJdGhlVHlwZSA9IHR5cGU7CisJCWlmIChkZWZhdWx0QXR0cmlidXRlcykgdGhlQXR0cyA9IG5ldyBBdHRyaWJ1dGVzSW1wbCh0eXBlLmF0dHMoKSk7CisJCWVsc2UgdGhlQXR0cyA9IG5ldyBBdHRyaWJ1dGVzSW1wbCgpOworCQl0aGVOZXh0ID0gbnVsbDsKKwkJcHJlY2xvc2VkID0gZmFsc2U7CisJCX0KKworCS8qKgorCVJldHVybiB0aGUgZWxlbWVudCB0eXBlLgorCUByZXR1cm4gVGhlIGVsZW1lbnQgdHlwZS4KKwkqLworCisJcHVibGljIEVsZW1lbnRUeXBlIHR5cGUoKSB7IHJldHVybiB0aGVUeXBlOyB9CisKKwkvKioKKwlSZXR1cm4gdGhlIGF0dHJpYnV0ZXMgYXMgYW4gQXR0cmlidXRlc0ltcGwgb2JqZWN0LgorCVJldHVybmluZyBhbiBBdHRyaWJ1dGVzSW1wbCBtYWtlcyB0aGUgYXR0cmlidXRlcyBtdXRhYmxlLgorCUByZXR1cm4gVGhlIGF0dHJpYnV0ZXMKKwlAc2VlIEF0dHJpYnV0ZXNJbXBsCisJKi8KKwlwdWJsaWMgQXR0cmlidXRlc0ltcGwgYXR0cygpIHsgcmV0dXJuIHRoZUF0dHM7IH0KKworCS8qKgorCVJldHVybiB0aGUgbmV4dCBlbGVtZW50IGluIGFuIGVsZW1lbnQgc3RhY2sgb3IgcXVldWUuCisJQHJldHVybiBUaGUgbmV4dCBlbGVtZW50CisJKi8KKworCXB1YmxpYyBFbGVtZW50IG5leHQoKSB7IHJldHVybiB0aGVOZXh0OyB9CisKKwkvKioKKwlDaGFuZ2UgdGhlIG5leHQgZWxlbWVudCBpbiBhbiBlbGVtZW50IHN0YWNrIG9yIHF1ZXVlLgorCUBwYXJhbSBuZXh0IFRoZSBuZXcgbmV4dCBlbGVtZW50CisJKi8KKworCXB1YmxpYyB2b2lkIHNldE5leHQoRWxlbWVudCBuZXh0KSB7IHRoZU5leHQgPSBuZXh0OyB9CisKKwkvKioKKwlSZXR1cm4gdGhlIG5hbWUgb2YgdGhlIGVsZW1lbnQncyB0eXBlLgorCUNvbnZlbmllbmNlIG1ldGhvZC4KKwlAcmV0dXJuIFRoZSBlbGVtZW50IHR5cGUgbmFtZQorCSovCisKKwlwdWJsaWMgU3RyaW5nIG5hbWUoKSB7IHJldHVybiB0aGVUeXBlLm5hbWUoKTsgfQorCisJLyoqCisJUmV0dXJuIHRoZSBuYW1lc3BhY2UgbmFtZSBvZiB0aGUgZWxlbWVudCdzIHR5cGUuCisJQ29udmVuaWVuY2UgbWV0aG9kLgorCUByZXR1cm4gVGhlIGVsZW1lbnQgdHlwZSBuYW1lc3BhY2UgbmFtZQorCSovCisKKwlwdWJsaWMgU3RyaW5nIG5hbWVzcGFjZSgpIHsgcmV0dXJuIHRoZVR5cGUubmFtZXNwYWNlKCk7IH0KKworCS8qKgorCVJldHVybiB0aGUgbG9jYWwgbmFtZSBvZiB0aGUgZWxlbWVudCdzIHR5cGUuCisJQ29udmVuaWVuY2UgbWV0aG9kLgorCUByZXR1cm4gVGhlIGVsZW1lbnQgdHlwZSBsb2NhbCBuYW1lCisJKi8KKworCXB1YmxpYyBTdHJpbmcgbG9jYWxOYW1lKCkgeyByZXR1cm4gdGhlVHlwZS5sb2NhbE5hbWUoKTsgfQorCisJLyoqCisJUmV0dXJuIHRoZSBjb250ZW50IG1vZGVsIHZlY3RvciBvZiB0aGUgZWxlbWVudCdzIHR5cGUuCisJQ29udmVuaWVuY2UgbWV0aG9kLgorCUByZXR1cm4gVGhlIGNvbnRlbnQgbW9kZWwgdmVjdG9yCisJKi8KKworCXB1YmxpYyBpbnQgbW9kZWwoKSB7IHJldHVybiB0aGVUeXBlLm1vZGVsKCk7IH0KKworCS8qKgorCVJldHVybiB0aGUgbWVtYmVyLW9mIHZlY3RvciBvZiB0aGUgZWxlbWVudCdzIHR5cGUuCisJQ29udmVuaWVuY2UgbWV0aG9kLgorCUByZXR1cm4gVGhlIG1lbWJlci1vZiB2ZWN0b3IKKwkqLworCisJcHVibGljIGludCBtZW1iZXJPZigpIHsgcmV0dXJuIHRoZVR5cGUubWVtYmVyT2YoKTsgfQorCisJLyoqCisJUmV0dXJuIHRoZSBmbGFncyB2ZWN0b3Igb2YgdGhlIGVsZW1lbnQncyB0eXBlLgorCUNvbnZlbmllbmNlIG1ldGhvZC4KKwlAcmV0dXJuIFRoZSBmbGFncyB2ZWN0b3IKKwkqLworCisJcHVibGljIGludCBmbGFncygpIHsgcmV0dXJuIHRoZVR5cGUuZmxhZ3MoKTsgfQorCisJLyoqCisJUmV0dXJuIHRoZSBwYXJlbnQgZWxlbWVudCB0eXBlIG9mIHRoZSBlbGVtZW50J3MgdHlwZS4KKwlDb252ZW5pZW5jZSBtZXRob2QuCisJQHJldHVybiBUaGUgcGFyZW50IGVsZW1lbnQgdHlwZQorCSovCisKKwlwdWJsaWMgRWxlbWVudFR5cGUgcGFyZW50KCkgeyByZXR1cm4gdGhlVHlwZS5wYXJlbnQoKTsgfQorCisJLyoqCisJUmV0dXJuIHRydWUgaWYgdGhlIHR5cGUgb2YgdGhpcyBlbGVtZW50IGNhbiBjb250YWluIHRoZSB0eXBlIG9mCisJYW5vdGhlciBlbGVtZW50LgorCUNvbnZlbmllbmNlIG1ldGhvZC4KKwlAcGFyYW0gb3RoZXIgVGhlIG90aGVyIGVsZW1lbnQKKwkqLworCisJcHVibGljIGJvb2xlYW4gY2FuQ29udGFpbihFbGVtZW50IG90aGVyKSB7CisJCXJldHVybiB0aGVUeXBlLmNhbkNvbnRhaW4ob3RoZXIudGhlVHlwZSk7CisJCX0KKworCisJLyoqCisJU2V0IGFuIGF0dHJpYnV0ZSBhbmQgaXRzIHZhbHVlIGludG8gdGhpcyBlbGVtZW50LgorCUBwYXJhbSBuYW1lIFRoZSBhdHRyaWJ1dGUgbmFtZSAoUW5hbWUpCisJQHBhcmFtIHR5cGUgVGhlIGF0dHJpYnV0ZSB0eXBlCisJQHBhcmFtIHZhbHVlIFRoZSBhdHRyaWJ1dGUgdmFsdWUKKwkqLworCisJcHVibGljIHZvaWQgc2V0QXR0cmlidXRlKFN0cmluZyBuYW1lLCBTdHJpbmcgdHlwZSwgU3RyaW5nIHZhbHVlKSB7CisJCXRoZVR5cGUuc2V0QXR0cmlidXRlKHRoZUF0dHMsIG5hbWUsIHR5cGUsIHZhbHVlKTsKKwkJfQorCisJLyoqCisJTWFrZSB0aGlzIGVsZW1lbnQgYW5vbnltb3VzLgorCVJlbW92ZSBhbnkgPHR0PmlkPC90dD4gb3IgPHR0Pm5hbWU8L3R0PiBhdHRyaWJ1dGUgcHJlc2VudAorCWluIHRoZSBlbGVtZW50J3MgYXR0cmlidXRlcy4KKwkqLworCisJcHVibGljIHZvaWQgYW5vbnltaXplKCkgeworCQlmb3IgKGludCBpID0gdGhlQXR0cy5nZXRMZW5ndGgoKSAtIDE7IGkgPj0gMDsgaS0tKSB7CisJCQlpZiAodGhlQXR0cy5nZXRUeXBlKGkpLmVxdWFscygiSUQiKSB8fAorCQkJICAgIHRoZUF0dHMuZ2V0UU5hbWUoaSkuZXF1YWxzKCJuYW1lIikpIHsKKwkJCQl0aGVBdHRzLnJlbW92ZUF0dHJpYnV0ZShpKTsKKwkJCQl9CisJCQl9CisJCX0KKworCS8qKgorCUNsZWFuIHRoZSBhdHRyaWJ1dGVzIG9mIHRoaXMgZWxlbWVudC4KKwlBdHRyaWJ1dGVzIHdpdGggbnVsbCBuYW1lICh0aGUgbmFtZSB3YXMgaWxsLWZvcm1lZCkKKwlvciBudWxsIHZhbHVlICh0aGUgYXR0cmlidXRlIHdhcyBwcmVzZW50IGluIHRoZSBlbGVtZW50IHR5cGUgYnV0CisJbm90IGluIHRoaXMgYWN0dWFsIGVsZW1lbnQpIGFyZSByZW1vdmVkLgorCSovCisKKwlwdWJsaWMgdm9pZCBjbGVhbigpIHsKKwkJZm9yIChpbnQgaSA9IHRoZUF0dHMuZ2V0TGVuZ3RoKCkgLSAxOyBpID49IDA7IGktLSkgeworCQkJU3RyaW5nIG5hbWUgPSB0aGVBdHRzLmdldExvY2FsTmFtZShpKTsKKwkJCWlmICh0aGVBdHRzLmdldFZhbHVlKGkpID09IG51bGwgfHwgbmFtZSA9PSBudWxsIHx8CisJCQkJCW5hbWUubGVuZ3RoKCkgPT0gMCkgeworCQkJCXRoZUF0dHMucmVtb3ZlQXR0cmlidXRlKGkpOworCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCX0KKwkJfQorCisJLyoqCisJRm9yY2UgdGhpcyBlbGVtZW50IHRvIHByZWNsb3NlZCBzdGF0dXMsIG1lYW5pbmcgdGhhdCBhbiBlbmQtdGFnIGhhcworCWJlZW4gc2VlbiBidXQgdGhlIGVsZW1lbnQgY2Fubm90IHlldCBiZSBjbG9zZWQgZm9yIHN0cnVjdHVyYWwgcmVhc29ucy4KKwkqLworCisJcHVibGljIHZvaWQgcHJlY2xvc2UoKSB7CisJCXByZWNsb3NlZCA9IHRydWU7CisJCX0KKworCS8qKgorCVJldHVybiB0cnVlIGlmIHRoaXMgZWxlbWVudCBoYXMgYmVlbiBwcmVjbG9zZWQuCisJKi8KKworCXB1YmxpYyBib29sZWFuIGlzUHJlY2xvc2VkKCkgeworCQlyZXR1cm4gcHJlY2xvc2VkOworCQl9CisKKwl9CmRpZmYgLS1naXQgYS9zcmMvamF2YS9vcmcvY2NpbC9jb3dhbi90YWdzb3VwL0VsZW1lbnRUeXBlLmphdmEgYi9zcmMvamF2YS9vcmcvY2NpbC9jb3dhbi90YWdzb3VwL0VsZW1lbnRUeXBlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZhZTg4MwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9qYXZhL29yZy9jY2lsL2Nvd2FuL3RhZ3NvdXAvRWxlbWVudFR5cGUuamF2YQpAQCAtMCwwICsxLDI3NiBAQAorLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgVGFnU291cCBhbmQgaXMgQ29weXJpZ2h0IDIwMDItMjAwOCBieSBKb2huIENvd2FuLgorLy8KKy8vIFRhZ1NvdXAgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLAorLy8gVmVyc2lvbiAyLjAuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhpcyBsaWNlbnNlIGF0CisvLyBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAgLiAgWW91IG1heSBhbHNvIGhhdmUKKy8vIGFkZGl0aW9uYWwgbGVnYWwgcmlnaHRzIG5vdCBncmFudGVkIGJ5IHRoaXMgbGljZW5zZS4KKy8vCisvLyBUYWdTb3VwIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gdW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBUYWdTb3VwCisvLyBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUworLy8gT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQ7IG5vdCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5CisvLyBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisKK3BhY2thZ2Ugb3JnLmNjaWwuY293YW4udGFnc291cDsKKworLyoqCitUaGlzIGNsYXNzIHJlcHJlc2VudHMgYW4gZWxlbWVudCB0eXBlIGluIHRoZSBzY2hlbWEuCitBbiBlbGVtZW50IHR5cGUgaGFzIGEgbmFtZSwgYSBjb250ZW50IG1vZGVsIHZlY3RvciwgYSBtZW1iZXItb2YgdmVjdG9yLAorYSBmbGFncyB2ZWN0b3IsIGRlZmF1bHQgYXR0cmlidXRlcywgYW5kIGEgc2NoZW1hIHRvIHdoaWNoIGl0IGJlbG9uZ3MuCitAc2VlIFNjaGVtYQorKi8KKworcHVibGljIGNsYXNzIEVsZW1lbnRUeXBlIHsKKworCXByaXZhdGUgU3RyaW5nIHRoZU5hbWU7CQkvLyBlbGVtZW50IHR5cGUgbmFtZSAoUW5hbWUpCisJcHJpdmF0ZSBTdHJpbmcgdGhlTmFtZXNwYWNlOwkvLyBlbGVtZW50IHR5cGUgbmFtZXNwYWNlIG5hbWUKKwlwcml2YXRlIFN0cmluZyB0aGVMb2NhbE5hbWU7CS8vIGVsZW1lbnQgdHlwZSBsb2NhbCBuYW1lCisJcHJpdmF0ZSBpbnQgdGhlTW9kZWw7CQkvLyBiaXRtYXA6IHdoYXQgdGhlIGVsZW1lbnQgY29udGFpbnMKKwlwcml2YXRlIGludCB0aGVNZW1iZXJPZjsJLy8gYml0bWFwOiB3aGF0IGVsZW1lbnQgaXMgY29udGFpbmVkIGluCisJcHJpdmF0ZSBpbnQgdGhlRmxhZ3M7CQkvLyBiaXRtYXA6IGVsZW1lbnQgZmxhZ3MKKwlwcml2YXRlIEF0dHJpYnV0ZXNJbXBsIHRoZUF0dHM7CS8vIGRlZmF1bHQgYXR0cmlidXRlcworCXByaXZhdGUgRWxlbWVudFR5cGUgdGhlUGFyZW50OwkvLyBwYXJlbnQgb2YgdGhpcyBlbGVtZW50IHR5cGUKKwlwcml2YXRlIFNjaGVtYSB0aGVTY2hlbWE7CS8vIHNjaGVtYSB0byB3aGljaCB0aGlzIGJlbG9uZ3MKKworCS8qKgorCUNvbnN0cnVjdCBhbiBFbGVtZW50VHlwZToKKwlidXQgaXQncyBiZXR0ZXIgdG8gdXNlIFNjaGVtYS5lbGVtZW50KCkgaW5zdGVhZC4KKwlUaGUgY29udGVudCBtb2RlbCwgbWVtYmVyLW9mLCBhbmQgZmxhZ3MgdmVjdG9ycyBhcmUgc3BlY2lmaWVkIGFzIGludHMuCisJQHBhcmFtIG5hbWUgVGhlIGVsZW1lbnQgdHlwZSBuYW1lCisJQHBhcmFtIG1vZGVsIE9SZWQtdG9nZXRoZXIgYml0cyByZXByZXNlbnRpbmcgdGhlIGNvbnRlbnQgbW9kZWxzCisJICAgYWxsb3dlZCBpbiB0aGUgY29udGVudCBvZiB0aGlzIGVsZW1lbnQgdHlwZQorCUBwYXJhbSBtZW1iZXJPZiBPUmVkLXRvZ2V0aGVyIGJpdHMgcmVwcmVzZW50aW5nIHRoZSBjb250ZW50IG1vZGVscworCSAgIHRvIHdoaWNoIHRoaXMgZWxlbWVudCB0eXBlIGJlbG9uZ3MKKwlAcGFyYW0gZmxhZ3MgT1JlZC10b2dldGhlciBiaXRzIHJlcHJlc2VudGluZyB0aGUgZmxhZ3MgYXNzb2NpYXRlZAorCSAgIHdpdGggdGhpcyBlbGVtZW50IHR5cGUKKwlAcGFyYW0gc2NoZW1hIFRoZSBzY2hlbWEgd2l0aCB3aGljaCB0aGlzIGVsZW1lbnQgdHlwZSB3aWxsIGJlCisJYXNzb2NpYXRlZAorCSovCisKKwlwdWJsaWMgRWxlbWVudFR5cGUoU3RyaW5nIG5hbWUsIGludCBtb2RlbCwgaW50IG1lbWJlck9mLCBpbnQgZmxhZ3MsIFNjaGVtYSBzY2hlbWEpIHsKKwkJdGhlTmFtZSA9IG5hbWU7CisJCXRoZU1vZGVsID0gbW9kZWw7CisJCXRoZU1lbWJlck9mID0gbWVtYmVyT2Y7CisJCXRoZUZsYWdzID0gZmxhZ3M7CisJCXRoZUF0dHMgPSBuZXcgQXR0cmlidXRlc0ltcGwoKTsKKwkJdGhlU2NoZW1hID0gc2NoZW1hOworCQl0aGVOYW1lc3BhY2UgPSBuYW1lc3BhY2UobmFtZSwgZmFsc2UpOworCQl0aGVMb2NhbE5hbWUgPSBsb2NhbE5hbWUobmFtZSk7CisJCX0KKworCS8qKgorCVJldHVybiBhIG5hbWVzcGFjZSBuYW1lIGZyb20gYSBRbmFtZS4KKwlUaGUgYXR0cmlidXRlIGZsYWcgdGVsbHMgdXMgd2hldGhlciB0byByZXR1cm4gYW4gZW1wdHkgbmFtZXNwYWNlCisJbmFtZSBpZiB0aGVyZSBpcyBubyBwcmVmaXgsIG9yIHVzZSB0aGUgc2NoZW1hIGRlZmF1bHQgaW5zdGVhZC4KKwlAcGFyYW0gbmFtZSBUaGUgUW5hbWUKKwlAcGFyYW0gYXR0cmlidXRlIFRydWUgaWYgbmFtZSBpcyBhbiBhdHRyaWJ1dGUgbmFtZQorCUByZXR1cm4gVGhlIG5hbWVzcGFjZSBuYW1lCisJKiovCisJcHVibGljIFN0cmluZyBuYW1lc3BhY2UoU3RyaW5nIG5hbWUsIGJvb2xlYW4gYXR0cmlidXRlKSB7CisJCWludCBjb2xvbiA9IG5hbWUuaW5kZXhPZignOicpOworCQlpZiAoY29sb24gPT0gLTEpIHsKKwkJCXJldHVybiBhdHRyaWJ1dGUgPyAiIiA6IHRoZVNjaGVtYS5nZXRVUkkoKTsKKwkJCX0KKwkJU3RyaW5nIHByZWZpeCA9IG5hbWUuc3Vic3RyaW5nKDAsIGNvbG9uKTsKKwkJaWYgKHByZWZpeC5lcXVhbHMoInhtbCIpKSB7CisJCQlyZXR1cm4gImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSI7CisJCQl9CisJCWVsc2UgeworCQkJcmV0dXJuICgidXJuOngtcHJlZml4OiIgKyBwcmVmaXgpLmludGVybigpOworCQkJfQorCQl9CisKKwkvKioKKwlSZXR1cm4gYSBsb2NhbCBuYW1lIGZyb20gYSBRbmFtZS4KKwlAcGFyYW0gbmFtZSBUaGUgUW5hbWUKKwlAcmV0dXJuIFRoZSBsb2NhbCBuYW1lCisJKiovCisJcHVibGljIFN0cmluZyBsb2NhbE5hbWUoU3RyaW5nIG5hbWUpIHsKKwkJaW50IGNvbG9uID0gbmFtZS5pbmRleE9mKCc6Jyk7CisJCWlmIChjb2xvbiA9PSAtMSkgeworCQkJcmV0dXJuIG5hbWU7CisJCQl9CisJCWVsc2UgeworCQkJcmV0dXJuIG5hbWUuc3Vic3RyaW5nKGNvbG9uKzEpLmludGVybigpOworCQkJfQorCQl9CisKKwkvKioKKwlSZXR1cm5zIHRoZSBuYW1lIG9mIHRoaXMgZWxlbWVudCB0eXBlLgorCUByZXR1cm4gVGhlIG5hbWUgb2YgdGhlIGVsZW1lbnQgdHlwZQorCSovCisKKwlwdWJsaWMgU3RyaW5nIG5hbWUoKSB7IHJldHVybiB0aGVOYW1lOyB9CisKKwkvKioKKwlSZXR1cm5zIHRoZSBuYW1lc3BhY2UgbmFtZSBvZiB0aGlzIGVsZW1lbnQgdHlwZS4KKwlAcmV0dXJuIFRoZSBuYW1lc3BhY2UgbmFtZSBvZiB0aGUgZWxlbWVudCB0eXBlCisJKi8KKworCXB1YmxpYyBTdHJpbmcgbmFtZXNwYWNlKCkgeyByZXR1cm4gdGhlTmFtZXNwYWNlOyB9CisKKwkvKioKKwlSZXR1cm5zIHRoZSBsb2NhbCBuYW1lIG9mIHRoaXMgZWxlbWVudCB0eXBlLgorCUByZXR1cm4gVGhlIGxvY2FsIG5hbWUgb2YgdGhlIGVsZW1lbnQgdHlwZQorCSovCisKKwlwdWJsaWMgU3RyaW5nIGxvY2FsTmFtZSgpIHsgcmV0dXJuIHRoZUxvY2FsTmFtZTsgfQorCisJLyoqCisJUmV0dXJucyB0aGUgY29udGVudCBtb2RlbHMgb2YgdGhpcyBlbGVtZW50IHR5cGUuCisJQHJldHVybiBUaGUgY29udGVudCBtb2RlbHMgb2YgdGhpcyBlbGVtZW50IHR5cGUgYXMgYSB2ZWN0b3Igb2YgYml0cworCSovCisKKwlwdWJsaWMgaW50IG1vZGVsKCkgeyByZXR1cm4gdGhlTW9kZWw7IH0KKworCS8qKgorCVJldHVybnMgdGhlIGNvbnRlbnQgbW9kZWxzIHRvIHdoaWNoIHRoaXMgZWxlbWVudCB0eXBlIGJlbG9uZ3MuCisJQHJldHVybiBUaGUgY29udGVudCBtb2RlbHMgdG8gd2hpY2ggdGhpcyBlbGVtZW50IHR5cGUgYmVsb25ncyBhcyBhCisJICAgdmVjdG9yIG9mIGJpdHMKKwkqLworCisJcHVibGljIGludCBtZW1iZXJPZigpIHsgcmV0dXJuIHRoZU1lbWJlck9mOyB9CisKKwkvKioKKwlSZXR1cm5zIHRoZSBmbGFncyBhc3NvY2lhdGVkIHdpdGggdGhpcyBlbGVtZW50IHR5cGUuCisJQHJldHVybiBUaGUgZmxhZ3MgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZWxlbWVudCB0eXBlIGFzIGEgdmVjdG9yIG9mIGJpdHMKKwkqLworCisJcHVibGljIGludCBmbGFncygpIHsgcmV0dXJuIHRoZUZsYWdzOyB9CisKKwkvKioKKwlSZXR1cm5zIHRoZSBkZWZhdWx0IGF0dHJpYnV0ZXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZWxlbWVudCB0eXBlLgorCUF0dHJpYnV0ZXMgb2YgdHlwZSBDREFUQSB0aGF0IGRvbid0IGhhdmUgZGVmYXVsdCB2YWx1ZXMgYXJlCisJdHlwaWNhbGx5IG5vdCBpbmNsdWRlZC4gIE90aGVyIGF0dHJpYnV0ZXMgd2l0aG91dCBkZWZhdWx0IHZhbHVlcworCWhhdmUgYW4gaW50ZXJuYWwgdmFsdWUgb2YgPHR0Pm51bGw8L3R0Pi4KKwlUaGUgcmV0dXJuIHZhbHVlIGlzIGFuIEF0dHJpYnV0ZXNJbXBsIHRvIGFsbG93IHRoZSBjYWxsZXIgdG8gbXV0YXRlCisJdGhlIGF0dHJpYnV0ZXMuCisJKi8KKworCXB1YmxpYyBBdHRyaWJ1dGVzSW1wbCBhdHRzKCkge3JldHVybiB0aGVBdHRzO30KKworCS8qKgorCVJldHVybnMgdGhlIHBhcmVudCBlbGVtZW50IHR5cGUgb2YgdGhpcyBlbGVtZW50IHR5cGUuCisJQHJldHVybiBUaGUgcGFyZW50IGVsZW1lbnQgdHlwZQorCSovCisKKwlwdWJsaWMgRWxlbWVudFR5cGUgcGFyZW50KCkge3JldHVybiB0aGVQYXJlbnQ7fQorCisJLyoqCisJUmV0dXJucyB0aGUgc2NoZW1hIHdoaWNoIHRoaXMgZWxlbWVudCB0eXBlIGlzIGFzc29jaWF0ZWQgd2l0aC4KKwlAcmV0dXJuIFRoZSBzY2hlbWEKKwkqLworCisJcHVibGljIFNjaGVtYSBzY2hlbWEoKSB7cmV0dXJuIHRoZVNjaGVtYTt9CisKKworCS8qKgorCVJldHVybnMgdHJ1ZSBpZiB0aGlzIGVsZW1lbnQgdHlwZSBjYW4gY29udGFpbiBhbm90aGVyIGVsZW1lbnQgdHlwZS4KKwlUaGF0IGlzLCBpZiBhbnkgb2YgdGhlIG1vZGVscyBpbiB0aGlzIGVsZW1lbnQncyBtb2RlbCB2ZWN0b3IKKwltYXRjaCBhbnkgb2YgdGhlIG1vZGVscyBpbiB0aGUgb3RoZXIgZWxlbWVudCB0eXBlJ3MgbWVtYmVyLW9mCisJdmVjdG9yLgorCUBwYXJhbSBvdGhlciBUaGUgb3RoZXIgZWxlbWVudCB0eXBlCisJKi8KKworCXB1YmxpYyBib29sZWFuIGNhbkNvbnRhaW4oRWxlbWVudFR5cGUgb3RoZXIpIHsKKwkJcmV0dXJuICh0aGVNb2RlbCAmIG90aGVyLnRoZU1lbWJlck9mKSAhPSAwOworCQl9CisKKworCS8qKgorCVNldHMgYW4gYXR0cmlidXRlIGFuZCBpdHMgdmFsdWUgaW50byBhbiBBdHRyaWJ1dGVzSW1wbCBvYmplY3QuCisJQXR0ZW1wdHMgdG8gc2V0IGEgbmFtZXNwYWNlIGRlY2xhcmF0aW9uIGFyZSBpZ25vcmVkLgorCUBwYXJhbSBhdHRzIFRoZSBBdHRyaWJ1dGVzSW1wbCBvYmplY3QKKwlAcGFyYW0gbmFtZSBUaGUgbmFtZSAoUW5hbWUpIG9mIHRoZSBhdHRyaWJ1dGUKKwlAcGFyYW0gdHlwZSBUaGUgdHlwZSBvZiB0aGUgYXR0cmlidXRlCisJQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSBvZiB0aGUgYXR0cmlidXRlCisJKi8KKworCXB1YmxpYyB2b2lkIHNldEF0dHJpYnV0ZShBdHRyaWJ1dGVzSW1wbCBhdHRzLCBTdHJpbmcgbmFtZSwgU3RyaW5nIHR5cGUsIFN0cmluZyB2YWx1ZSkgeworCQlpZiAobmFtZS5lcXVhbHMoInhtbG5zIikgfHwgbmFtZS5zdGFydHNXaXRoKCJ4bWxuczoiKSkgeworCQkJcmV0dXJuOworCQkJfQorOworCQlTdHJpbmcgbmFtZXNwYWNlID0gbmFtZXNwYWNlKG5hbWUsIHRydWUpOworCQlTdHJpbmcgbG9jYWxOYW1lID0gbG9jYWxOYW1lKG5hbWUpOworCQlpbnQgaSA9IGF0dHMuZ2V0SW5kZXgobmFtZSk7CisJCWlmIChpID09IC0xKSB7CisJCQluYW1lID0gbmFtZS5pbnRlcm4oKTsKKwkJCWlmICh0eXBlID09IG51bGwpIHR5cGUgPSAiQ0RBVEEiOworCQkJaWYgKCF0eXBlLmVxdWFscygiQ0RBVEEiKSkgdmFsdWUgPSBub3JtYWxpemUodmFsdWUpOworCQkJYXR0cy5hZGRBdHRyaWJ1dGUobmFtZXNwYWNlLCBsb2NhbE5hbWUsIG5hbWUsIHR5cGUsIHZhbHVlKTsKKwkJCX0KKwkJZWxzZSB7CisJCQlpZiAodHlwZSA9PSBudWxsKSB0eXBlID0gYXR0cy5nZXRUeXBlKGkpOworCQkJaWYgKCF0eXBlLmVxdWFscygiQ0RBVEEiKSkgdmFsdWU9bm9ybWFsaXplKHZhbHVlKTsKKwkJCWF0dHMuc2V0QXR0cmlidXRlKGksIG5hbWVzcGFjZSwgbG9jYWxOYW1lLCBuYW1lLCB0eXBlLCB2YWx1ZSk7CisJCQl9CisJCX0KKworCS8qKgorCU5vcm1hbGl6ZSBhbiBhdHRyaWJ1dGUgdmFsdWUgKElELXN0eWxlKS4KKwlDREFUQS1zdHlsZSBhdHRyaWJ1dGUgbm9ybWFsaXphdGlvbiBpcyBhbHJlYWR5IGRvbmUuCisJQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSB0byBub3JtYWxpemUKKwlAcmV0dXJuIFRoZSBub3JtYWxpemVkIHZhbHVlCisJKiovCisJcHVibGljIHN0YXRpYyBTdHJpbmcgbm9ybWFsaXplKFN0cmluZyB2YWx1ZSkgeworCQlpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlOworCQl2YWx1ZSA9IHZhbHVlLnRyaW0oKTsKKwkJaWYgKHZhbHVlLmluZGV4T2YoIiAgIikgPT0gLTEpIHJldHVybiB2YWx1ZTsKKwkJYm9vbGVhbiBzcGFjZSA9IGZhbHNlOworCQlpbnQgbGVuID0gdmFsdWUubGVuZ3RoKCk7CisJCVN0cmluZ0J1ZmZlciBiID0gbmV3IFN0cmluZ0J1ZmZlcihsZW4pOworCQlmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCQljaGFyIHYgPSB2YWx1ZS5jaGFyQXQoaSk7CisJCQlpZiAodiA9PSAnICcpIHsKKwkJCQlpZiAoIXNwYWNlKSBiLmFwcGVuZCh2KTsKKwkJCQlzcGFjZSA9IHRydWU7CisJCQkJfQorCQkJZWxzZSB7CisJCQkJYi5hcHBlbmQodik7CisJCQkJc3BhY2UgPSBmYWxzZTsKKwkJCQl9CisJCQl9CisJCXJldHVybiBiLnRvU3RyaW5nKCk7CisJCX0KKworCS8qKgorCVNldHMgYW4gYXR0cmlidXRlIGFuZCBpdHMgdmFsdWUgaW50byB0aGlzIGVsZW1lbnQgdHlwZS4KKwlAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgYXR0cmlidXRlCisJQHBhcmFtIHR5cGUgVGhlIHR5cGUgb2YgdGhlIGF0dHJpYnV0ZQorCUBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgb2YgdGhlIGF0dHJpYnV0ZQorCSovCisKKwlwdWJsaWMgdm9pZCBzZXRBdHRyaWJ1dGUoU3RyaW5nIG5hbWUsIFN0cmluZyB0eXBlLCBTdHJpbmcgdmFsdWUpIHsKKwkJc2V0QXR0cmlidXRlKHRoZUF0dHMsIG5hbWUsIHR5cGUsIHZhbHVlKTsKKwkJfQorCisJLyoqCisJU2V0cyB0aGUgbW9kZWxzIG9mIHRoaXMgZWxlbWVudCB0eXBlLgorCUBwYXJhbSBtb2RlbCBUaGUgY29udGVudCBtb2RlbHMgb2YgdGhpcyBlbGVtZW50IHR5cGUgYXMgYSB2ZWN0b3Igb2YgYml0cworCSovCisKKwlwdWJsaWMgdm9pZCBzZXRNb2RlbChpbnQgbW9kZWwpIHsgdGhlTW9kZWwgPSBtb2RlbDsgfQorCisJLyoqCisJU2V0cyB0aGUgY29udGVudCBtb2RlbHMgdG8gd2hpY2ggdGhpcyBlbGVtZW50IHR5cGUgYmVsb25ncy4KKwlAcGFyYW0gbWVtYmVyT2YgVGhlIGNvbnRlbnQgbW9kZWxzIHRvIHdoaWNoIHRoaXMgZWxlbWVudCB0eXBlIGJlbG9uZ3MgYXMgYSB2ZWN0b3Igb2YgYml0cworCSovCisKKwlwdWJsaWMgdm9pZCBzZXRNZW1iZXJPZihpbnQgbWVtYmVyT2YpIHsgdGhlTWVtYmVyT2YgPSBtZW1iZXJPZjsgfQorCisJLyoqCisJU2V0cyB0aGUgZmxhZ3Mgb2YgdGhpcyBlbGVtZW50IHR5cGUuCisJQHBhcmFtIGZsYWdzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGVsZW1lbnQgdHlwZSBUaGUgZmxhZ3MgYXMgYSB2ZWN0b3Igb2YgYml0cworCSovCisKKwlwdWJsaWMgdm9pZCBzZXRGbGFncyhpbnQgZmxhZ3MpIHsgdGhlRmxhZ3MgPSBmbGFnczsgfQorCisJLyoqCisJU2V0cyB0aGUgcGFyZW50IGVsZW1lbnQgdHlwZSBvZiB0aGlzIGVsZW1lbnQgdHlwZS4KKwlAcGFyYW0gcGFyZW50IFRoZSBwYXJlbnQgZWxlbWVudCB0eXBlCisJKi8KKworCXB1YmxpYyB2b2lkIHNldFBhcmVudChFbGVtZW50VHlwZSBwYXJlbnQpIHsgdGhlUGFyZW50ID0gcGFyZW50OyB9CisKKwl9CmRpZmYgLS1naXQgYS9zcmMvamF2YS9vcmcvY2NpbC9jb3dhbi90YWdzb3VwL1BZWFNjYW5uZXIuamF2YSBiL3NyYy9qYXZhL29yZy9jY2lsL2Nvd2FuL3RhZ3NvdXAvUFlYU2Nhbm5lci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViZmJhMjYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvamF2YS9vcmcvY2NpbC9jb3dhbi90YWdzb3VwL1BZWFNjYW5uZXIuamF2YQpAQCAtMCwwICsxLDEyNCBAQAorLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgVGFnU291cCBhbmQgaXMgQ29weXJpZ2h0IDIwMDItMjAwOCBieSBKb2huIENvd2FuLgorLy8KKy8vIFRhZ1NvdXAgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLAorLy8gVmVyc2lvbiAyLjAuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhpcyBsaWNlbnNlIGF0CisvLyBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAgLiAgWW91IG1heSBhbHNvIGhhdmUKKy8vIGFkZGl0aW9uYWwgbGVnYWwgcmlnaHRzIG5vdCBncmFudGVkIGJ5IHRoaXMgbGljZW5zZS4KKy8vCisvLyBUYWdTb3VwIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gdW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBUYWdTb3VwCisvLyBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUworLy8gT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQ7IG5vdCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5CisvLyBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisvLyAKKy8vIAorLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgVGFnU291cC4KKy8vIAorLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKy8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisvLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorLy8gKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gIFlvdSBtYXkgYWxzbyBkaXN0cmlidXRlCisvLyBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHZlcnNpb24gMi4xIG9mIHRoZSBBY2FkZW1pYyBGcmVlIExpY2Vuc2UuCisvLyAKKy8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIAorLy8gCisvLyAKKy8vIFBZWCBTY2FubmVyCisKK3BhY2thZ2Ugb3JnLmNjaWwuY293YW4udGFnc291cDsKK2ltcG9ydCBqYXZhLmlvLio7CitpbXBvcnQgb3JnLnhtbC5zYXguU0FYRXhjZXB0aW9uOworCisvKioKK0EgU2Nhbm5lciB0aGF0IGFjY2VwdHMgUFlYIGZvcm1hdCBpbnN0ZWFkIG9mIEhUTUwuCitVc2VmdWwgcHJpbWFyaWx5IGZvciBkZWJ1Z2dpbmcuCisqKi8KK3B1YmxpYyBjbGFzcyBQWVhTY2FubmVyIGltcGxlbWVudHMgU2Nhbm5lciB7CisKKyAgICAgICAgcHVibGljIHZvaWQgcmVzZXREb2N1bWVudExvY2F0b3IoU3RyaW5nIHB1YmxpY2lkLCBTdHJpbmcgc3lzdGVtaWQpIHsKKwkvLyBOZWVkIHRoaXMgbWV0aG9kIGZvciBpbnRlcmZhY2UgY29tcGF0aWJpbGl0eSwgYnV0IG5vdGUKKwkvLyB0aGF0IFB5eFNjYW5uZXIgZG9lcyBub3QgaW1wbGVtZW50IExvY2F0b3IuCisgICAgICAgIH0KKworCXB1YmxpYyB2b2lkIHNjYW4oUmVhZGVyIHIsIFNjYW5IYW5kbGVyIGgpIHRocm93cyBJT0V4Y2VwdGlvbiwgU0FYRXhjZXB0aW9uIHsKKwkJQnVmZmVyZWRSZWFkZXIgYnIgPSBuZXcgQnVmZmVyZWRSZWFkZXIocik7CisJCVN0cmluZyBzOworCQljaGFyW10gYnVmZiA9IG51bGw7CisJCWJvb2xlYW4gaW5zdGFnID0gZmFsc2U7CisJCXdoaWxlICgocyA9IGJyLnJlYWRMaW5lKCkpICE9IG51bGwpIHsKKwkJCWludCBzaXplID0gcy5sZW5ndGgoKTsKKwkJCWlmIChidWZmID09IG51bGwgfHwgYnVmZi5sZW5ndGggPCBzaXplKSB7CisJCQkJYnVmZiA9IG5ldyBjaGFyW3NpemVdOworCQkJCX0KKwkJCXMuZ2V0Q2hhcnMoMCwgc2l6ZSwgYnVmZiwgMCk7CisJCQlzd2l0Y2ggKGJ1ZmZbMF0pIHsKKwkJCWNhc2UgJygnOgorCQkJCWlmIChpbnN0YWcpIHsKKwkJCQkJaC5zdGFnYyhidWZmLCAwLCAwKTsKKwkJCQkJaW5zdGFnID0gZmFsc2U7CisJCQkJCX0KKwkJCQloLmdpKGJ1ZmYsIDEsIHNpemUgLSAxKTsKKwkJCQlpbnN0YWcgPSB0cnVlOworCQkJCWJyZWFrOworCQkJY2FzZSAnKSc6CisJCQkJaWYgKGluc3RhZykgeworCQkJCQloLnN0YWdjKGJ1ZmYsIDAsIDApOworCQkJCQlpbnN0YWcgPSBmYWxzZTsKKwkJCQkJfQorCQkJCWguZXRhZyhidWZmLCAxLCBzaXplIC0gMSk7CisJCQkJYnJlYWs7CisJCQljYXNlICc/JzoKKwkJCQlpZiAoaW5zdGFnKSB7CisJCQkJCWguc3RhZ2MoYnVmZiwgMCwgMCk7CisJCQkJCWluc3RhZyA9IGZhbHNlOworCQkJCQl9CisJCQkJaC5waShidWZmLCAxLCBzaXplIC0gMSk7CisJCQkJYnJlYWs7CisJCQljYXNlICdBJzoKKwkJCQlpbnQgc3AgPSBzLmluZGV4T2YoJyAnKTsKKwkJCQloLmFuYW1lKGJ1ZmYsIDEsIHNwIC0gMSk7CisJCQkJaC5hdmFsKGJ1ZmYsIHNwICsgMSwgc2l6ZSAtIHNwIC0gMSk7CisJCQkJYnJlYWs7CisJCQljYXNlICctJzoKKwkJCQlpZiAoaW5zdGFnKSB7CisJCQkJCWguc3RhZ2MoYnVmZiwgMCwgMCk7CisJCQkJCWluc3RhZyA9IGZhbHNlOworCQkJCQl9CisJCQkJaWYgKHMuZXF1YWxzKCItXFxuIikpIHsKKwkJCQkJYnVmZlswXSA9ICdcbic7CisJCQkJCWgucGNkYXRhKGJ1ZmYsIDAsIDEpOworCQkJCQl9CisJCQkJZWxzZSB7CisJCQkJCS8vIEZJWE1FOgorCQkJCQkvLyBEb2VzIG5vdCBkZWNvZGUgXHQgYW5kIFxcIGluIGlucHV0CisJCQkJCWgucGNkYXRhKGJ1ZmYsIDEsIHNpemUgLSAxKTsKKwkJCQkJfQorCQkJCWJyZWFrOworCQkJY2FzZSAnRSc6CisJCQkJaWYgKGluc3RhZykgeworCQkJCQloLnN0YWdjKGJ1ZmYsIDAsIDApOworCQkJCQlpbnN0YWcgPSBmYWxzZTsKKwkJCQkJfQorCQkJCWguZW50aXR5KGJ1ZmYsIDEsIHNpemUgLSAxKTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisvLwkJCQlTeXN0ZW0uZXJyLnByaW50KCJHb3RjaGEgIik7CisvLwkJCQlTeXN0ZW0uZXJyLnByaW50KHMpOworLy8JCQkJU3lzdGVtLmVyci5wcmludCgnXG4nKTsKKwkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCWguZW9mKGJ1ZmYsIDAsIDApOworCQl9CisKKwlwdWJsaWMgdm9pZCBzdGFydENEQVRBKCkgeyB9CisKKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmd2KSB0aHJvd3MgSU9FeGNlcHRpb24sIFNBWEV4Y2VwdGlvbiB7CisJCVNjYW5uZXIgcyA9IG5ldyBQWVhTY2FubmVyKCk7CisJCVJlYWRlciByID0gbmV3IElucHV0U3RyZWFtUmVhZGVyKFN5c3RlbS5pbiwgIlVURi04Iik7CisJCVdyaXRlciB3ID0gbmV3IEJ1ZmZlcmVkV3JpdGVyKG5ldyBPdXRwdXRTdHJlYW1Xcml0ZXIoU3lzdGVtLm91dCwgIlVURi04IikpOworCQlzLnNjYW4ociwgbmV3IFBZWFdyaXRlcih3KSk7CisJCX0KKwl9CmRpZmYgLS1naXQgYS9zcmMvamF2YS9vcmcvY2NpbC9jb3dhbi90YWdzb3VwL1BZWFdyaXRlci5qYXZhIGIvc3JjL2phdmEvb3JnL2NjaWwvY293YW4vdGFnc291cC9QWVhXcml0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTkxN2RkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2phdmEvb3JnL2NjaWwvY293YW4vdGFnc291cC9QWVhXcml0ZXIuamF2YQpAQCAtMCwwICsxLDIxNyBAQAorLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgVGFnU291cCBhbmQgaXMgQ29weXJpZ2h0IDIwMDItMjAwOCBieSBKb2huIENvd2FuLgorLy8KKy8vIFRhZ1NvdXAgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLAorLy8gVmVyc2lvbiAyLjAuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhpcyBsaWNlbnNlIGF0CisvLyBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAgLiAgWW91IG1heSBhbHNvIGhhdmUKKy8vIGFkZGl0aW9uYWwgbGVnYWwgcmlnaHRzIG5vdCBncmFudGVkIGJ5IHRoaXMgbGljZW5zZS4KKy8vCisvLyBUYWdTb3VwIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gdW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBUYWdTb3VwCisvLyBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUworLy8gT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQ7IG5vdCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5CisvLyBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisvLyAKKy8vIAorLy8gUFlYIFdyaXRlcgorLy8gRklYTUU6IGRvZXMgbm90IGRvIGVzY2FwZXMgaW4gYXR0cmlidXRlIHZhbHVlcworLy8gRklYTUU6IG91dHB1dHMgZW50aXRpZXMgYXMgYmFyZSAnJicgY2hhcmFjdGVyCisKK3BhY2thZ2Ugb3JnLmNjaWwuY293YW4udGFnc291cDsKK2ltcG9ydCBqYXZhLmlvLio7CitpbXBvcnQgb3JnLnhtbC5zYXguKjsKK2ltcG9ydCBvcmcueG1sLnNheC5leHQuTGV4aWNhbEhhbmRsZXI7CisKKy8qKgorQSBDb250ZW50SGFuZGxlciB0aGF0IGdlbmVyYXRlcyBQWVggZm9ybWF0IGluc3RlYWQgb2YgWE1MLgorUHJpbWFyaWx5IHVzZWZ1bCBmb3IgZGVidWdnaW5nLgorKiovCitwdWJsaWMgY2xhc3MgUFlYV3JpdGVyCisJaW1wbGVtZW50cyBTY2FuSGFuZGxlciwgQ29udGVudEhhbmRsZXIsIExleGljYWxIYW5kbGVyIHsKKworCXByaXZhdGUgUHJpbnRXcml0ZXIgdGhlV3JpdGVyOwkJLy8gd2hlcmUgd2Ugd3JpdGUgdG8KKwlwcml2YXRlIHN0YXRpYyBjaGFyW10gZHVtbXkgPSBuZXcgY2hhclsxXTsKKwlwcml2YXRlIFN0cmluZyBhdHRyTmFtZTsJCS8vIHNhdmVkIGF0dHJpYnV0ZSBuYW1lCisKKwkvLyBTY2FuSGFuZGxlciBpbXBsZW1lbnRhdGlvbgorCisJcHVibGljIHZvaWQgYWR1cChjaGFyW10gYnVmZiwgaW50IG9mZnNldCwgaW50IGxlbmd0aCkgdGhyb3dzIFNBWEV4Y2VwdGlvbiB7CisJCXRoZVdyaXRlci5wcmludGxuKGF0dHJOYW1lKTsKKwkJYXR0ck5hbWUgPSBudWxsOworCQl9CisKKwlwdWJsaWMgdm9pZCBhbmFtZShjaGFyW10gYnVmZiwgaW50IG9mZnNldCwgaW50IGxlbmd0aCkgdGhyb3dzIFNBWEV4Y2VwdGlvbiB7CisJCXRoZVdyaXRlci5wcmludCgnQScpOworCQl0aGVXcml0ZXIud3JpdGUoYnVmZiwgb2Zmc2V0LCBsZW5ndGgpOworCQl0aGVXcml0ZXIucHJpbnQoJyAnKTsKKwkJYXR0ck5hbWUgPSBuZXcgU3RyaW5nKGJ1ZmYsIG9mZnNldCwgbGVuZ3RoKTsKKwkJfQorCisJcHVibGljIHZvaWQgYXZhbChjaGFyW10gYnVmZiwgaW50IG9mZnNldCwgaW50IGxlbmd0aCkgdGhyb3dzIFNBWEV4Y2VwdGlvbiB7CisJCXRoZVdyaXRlci53cml0ZShidWZmLCBvZmZzZXQsIGxlbmd0aCk7CisJCXRoZVdyaXRlci5wcmludGxuKCk7CisJCWF0dHJOYW1lID0gbnVsbDsKKwkJfQorCisJcHVibGljIHZvaWQgY21udChjaGFyIFtdIGJ1ZmYsIGludCBvZmZzZXQsIGludCBsZW5ndGgpIHRocm93cyBTQVhFeGNlcHRpb24geworLy8JCXRoZVdyaXRlci5wcmludCgnIScpOworLy8JCXRoZVdyaXRlci53cml0ZShidWZmLCBvZmZzZXQsIGxlbmd0aCk7CisvLwkJdGhlV3JpdGVyLnByaW50bG4oKTsKKwkJfQorCisJcHVibGljIHZvaWQgZW50aXR5KGNoYXJbXSBidWZmLCBpbnQgb2Zmc2V0LCBpbnQgbGVuZ3RoKSB0aHJvd3MgU0FYRXhjZXB0aW9uIHsgfQorCisJcHVibGljIGludCBnZXRFbnRpdHkoKSB7IHJldHVybiAwOyB9CisKKwlwdWJsaWMgdm9pZCBlb2YoY2hhcltdIGJ1ZmYsIGludCBvZmZzZXQsIGludCBsZW5ndGgpIHRocm93cyBTQVhFeGNlcHRpb24geworCQl0aGVXcml0ZXIuY2xvc2UoKTsKKwkJfQorCisJcHVibGljIHZvaWQgZXRhZyhjaGFyW10gYnVmZiwgaW50IG9mZnNldCwgaW50IGxlbmd0aCkgdGhyb3dzIFNBWEV4Y2VwdGlvbiB7CisJCXRoZVdyaXRlci5wcmludCgnKScpOworCQl0aGVXcml0ZXIud3JpdGUoYnVmZiwgb2Zmc2V0LCBsZW5ndGgpOworCQl0aGVXcml0ZXIucHJpbnRsbigpOworCQl9CisKKwlwdWJsaWMgdm9pZCBkZWNsKGNoYXJbXSBidWZmLCBpbnQgb2Zmc2V0LCBpbnQgbGVuZ3RoKSB0aHJvd3MgU0FYRXhjZXB0aW9uIHsKKyAgICAgICAgfQorCisJcHVibGljIHZvaWQgZ2koY2hhcltdIGJ1ZmYsIGludCBvZmZzZXQsIGludCBsZW5ndGgpIHRocm93cyBTQVhFeGNlcHRpb24geworCQl0aGVXcml0ZXIucHJpbnQoJygnKTsKKwkJdGhlV3JpdGVyLndyaXRlKGJ1ZmYsIG9mZnNldCwgbGVuZ3RoKTsKKwkJdGhlV3JpdGVyLnByaW50bG4oKTsKKwkJfQorCisJcHVibGljIHZvaWQgY2RzZWN0KGNoYXJbXSBidWZmLCBpbnQgb2Zmc2V0LCBpbnQgbGVuZ3RoKSB0aHJvd3MgU0FYRXhjZXB0aW9uIHsKKwkJcGNkYXRhKGJ1ZmYsIG9mZnNldCwgbGVuZ3RoKTsKKwkJfQorCisJcHVibGljIHZvaWQgcGNkYXRhKGNoYXJbXSBidWZmLCBpbnQgb2Zmc2V0LCBpbnQgbGVuZ3RoKSB0aHJvd3MgU0FYRXhjZXB0aW9uIHsKKwkJaWYgKGxlbmd0aCA9PSAwKSByZXR1cm47CS8vIG5vdGhpbmcgdG8gZG8KKwkJYm9vbGVhbiBpblByb2dyZXNzID0gZmFsc2U7CisJCWxlbmd0aCArPSBvZmZzZXQ7CisJCWZvciAoaW50IGkgPSBvZmZzZXQ7IGkgPCBsZW5ndGg7IGkrKykgeworCQkJaWYgKGJ1ZmZbaV0gPT0gJ1xuJykgeworCQkJCWlmIChpblByb2dyZXNzKSB7CisJCQkJCXRoZVdyaXRlci5wcmludGxuKCk7CisJCQkJCX0KKwkJCQl0aGVXcml0ZXIucHJpbnRsbigiLVxcbiIpOworCQkJCWluUHJvZ3Jlc3MgPSBmYWxzZTsKKwkJCQl9CisJCQllbHNlIHsKKwkJCQlpZiAoIWluUHJvZ3Jlc3MpIHsKKwkJCQkJdGhlV3JpdGVyLnByaW50KCctJyk7CisJCQkJCX0KKwkJCQlzd2l0Y2goYnVmZltpXSkgeworCQkJCWNhc2UgJ1x0JzoKKwkJCQkJdGhlV3JpdGVyLnByaW50KCJcXHQiKTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAnXFwnOgorCQkJCQl0aGVXcml0ZXIucHJpbnQoIlxcXFwiKTsKKwkJCQkJYnJlYWs7CisJCQkJZGVmYXVsdDoKKwkJCQkJdGhlV3JpdGVyLnByaW50KGJ1ZmZbaV0pOworCQkJCQl9CisJCQkJaW5Qcm9ncmVzcyA9IHRydWU7CisJCQkJfQorCQkJfQorCQlpZiAoaW5Qcm9ncmVzcykgeworCQkJdGhlV3JpdGVyLnByaW50bG4oKTsKKwkJCX0KKwkJfQorCisJcHVibGljIHZvaWQgcGl0YXJnZXQoY2hhcltdIGJ1ZmYsIGludCBvZmZzZXQsIGludCBsZW5ndGgpIHRocm93cyBTQVhFeGNlcHRpb24geworCQl0aGVXcml0ZXIucHJpbnQoJz8nKTsKKwkJdGhlV3JpdGVyLndyaXRlKGJ1ZmYsIG9mZnNldCwgbGVuZ3RoKTsKKwkJdGhlV3JpdGVyLndyaXRlKCcgJyk7CisJCX0KKworCXB1YmxpYyB2b2lkIHBpKGNoYXJbXSBidWZmLCBpbnQgb2Zmc2V0LCBpbnQgbGVuZ3RoKSB0aHJvd3MgU0FYRXhjZXB0aW9uIHsKKwkJdGhlV3JpdGVyLndyaXRlKGJ1ZmYsIG9mZnNldCwgbGVuZ3RoKTsKKwkJdGhlV3JpdGVyLnByaW50bG4oKTsKKwkJfQorCisJcHVibGljIHZvaWQgc3RhZ2MoY2hhcltdIGJ1ZmYsIGludCBvZmZzZXQsIGludCBsZW5ndGgpIHRocm93cyBTQVhFeGNlcHRpb24geworLy8JCXRoZVdyaXRlci5wcmludGxuKCIhIik7CQkJLy8gRklYTUUKKwkJfQorCisJcHVibGljIHZvaWQgc3RhZ2UoY2hhcltdIGJ1ZmYsIGludCBvZmZzZXQsIGludCBsZW5ndGgpIHRocm93cyBTQVhFeGNlcHRpb24geworCQl0aGVXcml0ZXIucHJpbnRsbigiISIpOwkJCS8vIEZJWE1FCisJCX0KKworCS8vIFNBWCBDb250ZW50SGFuZGxlciBpbXBsZW1lbnRhdGlvbgorCisJcHVibGljIHZvaWQgY2hhcmFjdGVycyhjaGFyW10gYnVmZiwgaW50IG9mZnNldCwgaW50IGxlbmd0aCkgdGhyb3dzIFNBWEV4Y2VwdGlvbiB7CisJCXBjZGF0YShidWZmLCBvZmZzZXQsIGxlbmd0aCk7CisJCX0KKworCXB1YmxpYyB2b2lkIGVuZERvY3VtZW50KCkgdGhyb3dzIFNBWEV4Y2VwdGlvbiB7CisJCXRoZVdyaXRlci5jbG9zZSgpOworCQl9CisKKwlwdWJsaWMgdm9pZCBlbmRFbGVtZW50KFN0cmluZyB1cmksIFN0cmluZyBsb2NhbG5hbWUsIFN0cmluZyBxbmFtZSkgdGhyb3dzIFNBWEV4Y2VwdGlvbiB7CisJCWlmIChxbmFtZS5sZW5ndGgoKSA9PSAwKSBxbmFtZSA9IGxvY2FsbmFtZTsKKwkJdGhlV3JpdGVyLnByaW50KCcpJyk7CisJCXRoZVdyaXRlci5wcmludGxuKHFuYW1lKTsKKwkJfQorCisJcHVibGljIHZvaWQgZW5kUHJlZml4TWFwcGluZyhTdHJpbmcgcHJlZml4KSB0aHJvd3MgU0FYRXhjZXB0aW9uIHsgfQorCisJcHVibGljIHZvaWQgaWdub3JhYmxlV2hpdGVzcGFjZShjaGFyW10gYnVmZiwgaW50IG9mZnNldCwgaW50IGxlbmd0aCkgdGhyb3dzIFNBWEV4Y2VwdGlvbiB7CisJCWNoYXJhY3RlcnMoYnVmZiwgb2Zmc2V0LCBsZW5ndGgpOworCQl9CisKKwlwdWJsaWMgdm9pZCBwcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oU3RyaW5nIHRhcmdldCwgU3RyaW5nIGRhdGEpIHRocm93cyBTQVhFeGNlcHRpb24geworCQl0aGVXcml0ZXIucHJpbnQoJz8nKTsKKwkJdGhlV3JpdGVyLnByaW50KHRhcmdldCk7CisJCXRoZVdyaXRlci5wcmludCgnICcpOworCQl0aGVXcml0ZXIucHJpbnRsbihkYXRhKTsKKwkJfQorCisJcHVibGljIHZvaWQgc2V0RG9jdW1lbnRMb2NhdG9yKExvY2F0b3IgbG9jYXRvcikgeyB9CisKKwlwdWJsaWMgdm9pZCBza2lwcGVkRW50aXR5KFN0cmluZyBuYW1lKSB0aHJvd3MgU0FYRXhjZXB0aW9uIHsgfQorCisJcHVibGljIHZvaWQgc3RhcnREb2N1bWVudCgpIHRocm93cyBTQVhFeGNlcHRpb24geyB9CisKKwlwdWJsaWMgdm9pZCBzdGFydEVsZW1lbnQoU3RyaW5nIHVyaSwgU3RyaW5nIGxvY2FsbmFtZSwgU3RyaW5nIHFuYW1lLAorCQkJQXR0cmlidXRlcyBhdHRzKSB0aHJvd3MgU0FYRXhjZXB0aW9uIHsKKwkJaWYgKHFuYW1lLmxlbmd0aCgpID09IDApIHFuYW1lPWxvY2FsbmFtZTsKKwkJdGhlV3JpdGVyLnByaW50KCcoJyk7CisJCXRoZVdyaXRlci5wcmludGxuKHFuYW1lKTsKKwkJaW50IGxlbmd0aCA9IGF0dHMuZ2V0TGVuZ3RoKCk7CisJCWZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKwkJCXFuYW1lID0gYXR0cy5nZXRRTmFtZShpKTsKKwkJCWlmIChxbmFtZS5sZW5ndGgoKSA9PSAwKSBxbmFtZSA9IGF0dHMuZ2V0TG9jYWxOYW1lKGkpOworCQkJdGhlV3JpdGVyLnByaW50KCdBJyk7CisvLwkJCXRoZVdyaXRlci5wcmludChhdHRzLmdldFR5cGUoaSkpOwkvLyBERUJVRworCQkJdGhlV3JpdGVyLnByaW50KHFuYW1lKTsKKwkJCXRoZVdyaXRlci5wcmludCgnICcpOworCQkJdGhlV3JpdGVyLnByaW50bG4oYXR0cy5nZXRWYWx1ZShpKSk7CisJCQl9CisJCX0KKworCXB1YmxpYyB2b2lkIHN0YXJ0UHJlZml4TWFwcGluZyhTdHJpbmcgcHJlZml4LCBTdHJpbmcgdXJpKSB0aHJvd3MgU0FYRXhjZXB0aW9uIHsgfQorCisJLy8gRGVmYXVsdCBMZXhpY2FsSGFuZGxlciBpbXBsZW1lbnRhdGlvbgorCisJcHVibGljIHZvaWQgY29tbWVudChjaGFyW10gY2gsIGludCBzdGFydCwgaW50IGxlbmd0aCkgdGhyb3dzIFNBWEV4Y2VwdGlvbiB7CisJCWNtbnQoY2gsIHN0YXJ0LCBsZW5ndGgpOworCQl9CisJcHVibGljIHZvaWQgZW5kQ0RBVEEoKSB0aHJvd3MgU0FYRXhjZXB0aW9uIHsgfQorCXB1YmxpYyB2b2lkIGVuZERURCgpIHRocm93cyBTQVhFeGNlcHRpb24geyB9CisJcHVibGljIHZvaWQgZW5kRW50aXR5KFN0cmluZyBuYW1lKSB0aHJvd3MgU0FYRXhjZXB0aW9uIHsgfQorCXB1YmxpYyB2b2lkIHN0YXJ0Q0RBVEEoKSB0aHJvd3MgU0FYRXhjZXB0aW9uIHsgfQorCXB1YmxpYyB2b2lkIHN0YXJ0RFREKFN0cmluZyBuYW1lLCBTdHJpbmcgcHVibGljSWQsIFN0cmluZyBzeXN0ZW1JZCkgdGhyb3dzIFNBWEV4Y2VwdGlvbiB7IH0KKwlwdWJsaWMgdm9pZCBzdGFydEVudGl0eShTdHJpbmcgbmFtZSkgdGhyb3dzIFNBWEV4Y2VwdGlvbiB7IH0KKworCS8vIENvbnN0cnVjdG9yCisKKwlwdWJsaWMgUFlYV3JpdGVyKFdyaXRlciB3KSB7CisJCWlmICh3IGluc3RhbmNlb2YgUHJpbnRXcml0ZXIpIHsKKwkJCXRoZVdyaXRlciA9IChQcmludFdyaXRlcil3OworCQkJfQorCQllbHNlIHsKKwkJCXRoZVdyaXRlciA9IG5ldyBQcmludFdyaXRlcih3KTsKKwkJCX0KKwkJfQorCX0KZGlmZiAtLWdpdCBhL3NyYy9qYXZhL29yZy9jY2lsL2Nvd2FuL3RhZ3NvdXAvUGFyc2VyLmphdmEgYi9zcmMvamF2YS9vcmcvY2NpbC9jb3dhbi90YWdzb3VwL1BhcnNlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5OTdmMjMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvamF2YS9vcmcvY2NpbC9jb3dhbi90YWdzb3VwL1BhcnNlci5qYXZhCkBAIC0wLDAgKzEsMTExNCBAQAorLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgVGFnU291cCBhbmQgaXMgQ29weXJpZ2h0IDIwMDItMjAwOCBieSBKb2huIENvd2FuLgorLy8KKy8vIFRhZ1NvdXAgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLAorLy8gVmVyc2lvbiAyLjAuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhpcyBsaWNlbnNlIGF0CisvLyBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAgLiAgWW91IG1heSBhbHNvIGhhdmUKKy8vIGFkZGl0aW9uYWwgbGVnYWwgcmlnaHRzIG5vdCBncmFudGVkIGJ5IHRoaXMgbGljZW5zZS4KKy8vCisvLyBUYWdTb3VwIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gdW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBUYWdTb3VwCisvLyBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUworLy8gT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQ7IG5vdCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5CisvLyBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisvLyAKKy8vIAorLy8gVGhlIFRhZ1NvdXAgcGFyc2VyCisKK3BhY2thZ2Ugb3JnLmNjaWwuY293YW4udGFnc291cDsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEuaW8uKjsKK2ltcG9ydCBqYXZhLm5ldC5VUkw7CitpbXBvcnQgamF2YS5uZXQuVVJMQ29ubmVjdGlvbjsKK2ltcG9ydCBvcmcueG1sLnNheC4qOworaW1wb3J0IG9yZy54bWwuc2F4LmhlbHBlcnMuRGVmYXVsdEhhbmRsZXI7CitpbXBvcnQgb3JnLnhtbC5zYXguZXh0LkxleGljYWxIYW5kbGVyOworCisKKy8qKgorVGhlIFNBWCBwYXJzZXIgY2xhc3MuCisqKi8KK3B1YmxpYyBjbGFzcyBQYXJzZXIgZXh0ZW5kcyBEZWZhdWx0SGFuZGxlciBpbXBsZW1lbnRzIFNjYW5IYW5kbGVyLCBYTUxSZWFkZXIsIExleGljYWxIYW5kbGVyIHsKKworCS8vIFhNTFJlYWRlciBpbXBsZW1lbnRhdGlvbgorCisJcHJpdmF0ZSBDb250ZW50SGFuZGxlciB0aGVDb250ZW50SGFuZGxlciA9IHRoaXM7CisJcHJpdmF0ZSBMZXhpY2FsSGFuZGxlciB0aGVMZXhpY2FsSGFuZGxlciA9IHRoaXM7CisJcHJpdmF0ZSBEVERIYW5kbGVyIHRoZURUREhhbmRsZXIgPSB0aGlzOworCXByaXZhdGUgRXJyb3JIYW5kbGVyIHRoZUVycm9ySGFuZGxlciA9IHRoaXM7CisJcHJpdmF0ZSBFbnRpdHlSZXNvbHZlciB0aGVFbnRpdHlSZXNvbHZlciA9IHRoaXM7CisJcHJpdmF0ZSBTY2hlbWEgdGhlU2NoZW1hOworCXByaXZhdGUgU2Nhbm5lciB0aGVTY2FubmVyOworCXByaXZhdGUgQXV0b0RldGVjdG9yIHRoZUF1dG9EZXRlY3RvcjsKKworCS8vIERlZmF1bHQgdmFsdWVzIGZvciBmZWF0dXJlIGZsYWdzCisKKwlwcml2YXRlIHN0YXRpYyBib29sZWFuIERFRkFVTFRfTkFNRVNQQUNFUyA9IHRydWU7CisJcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBERUZBVUxUX0lHTk9SRV9CT0dPTlMgPSBmYWxzZTsKKwlwcml2YXRlIHN0YXRpYyBib29sZWFuIERFRkFVTFRfQk9HT05TX0VNUFRZID0gZmFsc2U7CisgICAgICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gREVGQVVMVF9ST09UX0JPR09OUyA9IHRydWU7CisJcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBERUZBVUxUX0RFRkFVTFRfQVRUUklCVVRFUyA9IHRydWU7CisJcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBERUZBVUxUX1RSQU5TTEFURV9DT0xPTlMgPSBmYWxzZTsKKwlwcml2YXRlIHN0YXRpYyBib29sZWFuIERFRkFVTFRfUkVTVEFSVF9FTEVNRU5UUyA9IHRydWU7CisJcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBERUZBVUxUX0lHTk9SQUJMRV9XSElURVNQQUNFID0gZmFsc2U7CisJcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBERUZBVUxUX0NEQVRBX0VMRU1FTlRTID0gdHJ1ZTsKKworCS8vIEZlYXR1cmUgZmxhZ3MuICAKKworCXByaXZhdGUgYm9vbGVhbiBuYW1lc3BhY2VzID0gREVGQVVMVF9OQU1FU1BBQ0VTOworCXByaXZhdGUgYm9vbGVhbiBpZ25vcmVCb2dvbnMgPSBERUZBVUxUX0lHTk9SRV9CT0dPTlM7CisJcHJpdmF0ZSBib29sZWFuIGJvZ29uc0VtcHR5ID0gREVGQVVMVF9CT0dPTlNfRU1QVFk7CisgICAgICAgIHByaXZhdGUgYm9vbGVhbiByb290Qm9nb25zID0gREVGQVVMVF9ST09UX0JPR09OUzsKKwlwcml2YXRlIGJvb2xlYW4gZGVmYXVsdEF0dHJpYnV0ZXMgPSBERUZBVUxUX0RFRkFVTFRfQVRUUklCVVRFUzsKKwlwcml2YXRlIGJvb2xlYW4gdHJhbnNsYXRlQ29sb25zID0gREVGQVVMVF9UUkFOU0xBVEVfQ09MT05TOworCXByaXZhdGUgYm9vbGVhbiByZXN0YXJ0RWxlbWVudHMgPSBERUZBVUxUX1JFU1RBUlRfRUxFTUVOVFM7CisJcHJpdmF0ZSBib29sZWFuIGlnbm9yYWJsZVdoaXRlc3BhY2UgPSBERUZBVUxUX0lHTk9SQUJMRV9XSElURVNQQUNFOworCXByaXZhdGUgYm9vbGVhbiBDREFUQUVsZW1lbnRzID0gREVGQVVMVF9DREFUQV9FTEVNRU5UUzsKKworCS8qKgorCUEgdmFsdWUgb2YgInRydWUiIGluZGljYXRlcyBuYW1lc3BhY2UgVVJJcyBhbmQgdW5wcmVmaXhlZCBsb2NhbAorCW5hbWVzIGZvciBlbGVtZW50IGFuZCBhdHRyaWJ1dGUgbmFtZXMgd2lsbCBiZSBhdmFpbGFibGUuCisJKiovCisJcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgbmFtZXNwYWNlc0ZlYXR1cmUgPQorCQkiaHR0cDovL3htbC5vcmcvc2F4L2ZlYXR1cmVzL25hbWVzcGFjZXMiOworCisJLyoqCisJQSB2YWx1ZSBvZiAidHJ1ZSIgaW5kaWNhdGVzIHRoYXQgWE1MIHF1YWxpZmllZCBuYW1lcyAod2l0aCBwcmVmaXhlcykKKwlhbmQgYXR0cmlidXRlcyAoaW5jbHVkaW5nIHhtbG5zKiBhdHRyaWJ1dGVzKSB3aWxsIGJlIGF2YWlsYWJsZS4KKwlXZSBkb24ndCBzdXBwb3J0IHRoaXMgdmFsdWUuCisJKiovCisJcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgbmFtZXNwYWNlUHJlZml4ZXNGZWF0dXJlID0KKwkJImh0dHA6Ly94bWwub3JnL3NheC9mZWF0dXJlcy9uYW1lc3BhY2UtcHJlZml4ZXMiOworCisJLyoqCisJUmVwb3J0cyB3aGV0aGVyIHRoaXMgcGFyc2VyIHByb2Nlc3NlcyBleHRlcm5hbCBnZW5lcmFsIGVudGl0aWVzCisJKGl0IGRvZXNuJ3QpLgorCSoqLworCXB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIGV4dGVybmFsR2VuZXJhbEVudGl0aWVzRmVhdHVyZSA9CisJCSJodHRwOi8veG1sLm9yZy9zYXgvZmVhdHVyZXMvZXh0ZXJuYWwtZ2VuZXJhbC1lbnRpdGllcyI7CisKKwkvKioKKwlSZXBvcnRzIHdoZXRoZXIgdGhpcyBwYXJzZXIgcHJvY2Vzc2VzIGV4dGVybmFsIHBhcmFtZXRlciBlbnRpdGllcworCShpdCBkb2Vzbid0KS4KKwkqKi8KKwlwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBleHRlcm5hbFBhcmFtZXRlckVudGl0aWVzRmVhdHVyZSA9CisJCSJodHRwOi8veG1sLm9yZy9zYXgvZmVhdHVyZXMvZXh0ZXJuYWwtcGFyYW1ldGVyLWVudGl0aWVzIjsKKworCS8qKgorCU1heSBiZSBleGFtaW5lZCBvbmx5IGR1cmluZyBhIHBhcnNlLCBhZnRlciB0aGUgc3RhcnREb2N1bWVudCgpCisJY2FsbGJhY2sgaGFzIGJlZW4gY29tcGxldGVkOyByZWFkLW9ubHkuIFRoZSB2YWx1ZSBpcyB0cnVlIGlmCisJdGhlIGRvY3VtZW50IHNwZWNpZmllZCBzdGFuZGFsb25lPSJ5ZXMiIGluIGl0cyBYTUwgZGVjbGFyYXRpb24sCisJYW5kIG90aGVyd2lzZSBpcyBmYWxzZS4gIChJdCdzIGFsd2F5cyBmYWxzZS4pCisJKiovCisJcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgaXNTdGFuZGFsb25lRmVhdHVyZSA9CisJCSJodHRwOi8veG1sLm9yZy9zYXgvZmVhdHVyZXMvaXMtc3RhbmRhbG9uZSI7CisKKwkvKioKKwlBIHZhbHVlIG9mICJ0cnVlIiBpbmRpY2F0ZXMgdGhhdCB0aGUgTGV4aWNhbEhhbmRsZXIgd2lsbCByZXBvcnQKKwl0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgcGFyYW1ldGVyIGVudGl0aWVzIChpdCB3b24ndCkuCisJKiovCisJcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgbGV4aWNhbEhhbmRsZXJQYXJhbWV0ZXJFbnRpdGllc0ZlYXR1cmUgPQorCQkiaHR0cDovL3htbC5vcmcvc2F4L2ZlYXR1cmVzL2xleGljYWwtaGFuZGxlci9wYXJhbWV0ZXItZW50aXRpZXMiOworCisJLyoqCisJQSB2YWx1ZSBvZiAidHJ1ZSIgaW5kaWNhdGVzIHRoYXQgc3lzdGVtIElEcyBpbiBkZWNsYXJhdGlvbnMgd2lsbAorCWJlIGFic29sdXRpemVkIChyZWxhdGl2ZSB0byB0aGVpciBiYXNlIFVSSXMpIGJlZm9yZSByZXBvcnRpbmcuCisJKFRoaXMgcmV0dXJucyB0cnVlIGJ1dCBkb2Vzbid0IGFjdHVhbGx5IGRvIGFueXRoaW5nLikKKwkqKi8KKwlwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyByZXNvbHZlRFREVVJJc0ZlYXR1cmUgPQorCQkiaHR0cDovL3htbC5vcmcvc2F4L2ZlYXR1cmVzL3Jlc29sdmUtZHRkLXVyaXMiOworCisJLyoqCisJSGFzIGEgdmFsdWUgb2YgInRydWUiIGlmIGFsbCBYTUwgbmFtZXMgKGZvciBlbGVtZW50cywKKwlwcmVmaXhlcywgYXR0cmlidXRlcywgZW50aXRpZXMsIG5vdGF0aW9ucywgYW5kIGxvY2FsCisJbmFtZXMpLCBhcyB3ZWxsIGFzIE5hbWVzcGFjZSBVUklzLCB3aWxsIGhhdmUgYmVlbiBpbnRlcm5lZAorCXVzaW5nIGphdmEubGFuZy5TdHJpbmcuaW50ZXJuLiBUaGlzIHN1cHBvcnRzIGZhc3QgdGVzdGluZyBvZgorCWVxdWFsaXR5L2luZXF1YWxpdHkgYWdhaW5zdCBzdHJpbmcgY29uc3RhbnRzLCByYXRoZXIgdGhhbiBmb3JjaW5nCisJc2xvd2VyIGNhbGxzIHRvIFN0cmluZy5lcXVhbHMoKS4gIChXZSBhbHdheXMgaW50ZXJuLikKKwkqKi8KKwlwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBzdHJpbmdJbnRlcm5pbmdGZWF0dXJlID0KKwkJImh0dHA6Ly94bWwub3JnL3NheC9mZWF0dXJlcy9zdHJpbmctaW50ZXJuaW5nIjsKKworCS8qKgorCVJldHVybnMgInRydWUiIGlmIHRoZSBBdHRyaWJ1dGVzIG9iamVjdHMgcGFzc2VkIGJ5IHRoaXMKKwlwYXJzZXIgaW4gQ29udGVudEhhbmRsZXIuc3RhcnRFbGVtZW50KCkgaW1wbGVtZW50IHRoZQorCW9yZy54bWwuc2F4LmV4dC5BdHRyaWJ1dGVzMiBpbnRlcmZhY2UuCShUaGV5IGRvbid0LikKKwkqKi8KKworCXB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIHVzZUF0dHJpYnV0ZXMyRmVhdHVyZSA9CisJCSJodHRwOi8veG1sLm9yZy9zYXgvZmVhdHVyZXMvdXNlLWF0dHJpYnV0ZXMyIjsKKworCS8qKgorCVJldHVybnMgInRydWUiIGlmIHRoZSBMb2NhdG9yIG9iamVjdHMgcGFzc2VkIGJ5IHRoaXMgcGFyc2VyCisJaW4gQ29udGVudEhhbmRsZXIuc2V0RG9jdW1lbnRMb2NhdG9yKCkgaW1wbGVtZW50IHRoZQorCW9yZy54bWwuc2F4LmV4dC5Mb2NhdG9yMiBpbnRlcmZhY2UuICAoVGhleSBkb24ndC4pCisJKiovCisJcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgdXNlTG9jYXRvcjJGZWF0dXJlID0KKwkJImh0dHA6Ly94bWwub3JnL3NheC9mZWF0dXJlcy91c2UtbG9jYXRvcjIiOworCisJLyoqCisJUmV0dXJucyAidHJ1ZSIgaWYsIHdoZW4gc2V0RW50aXR5UmVzb2x2ZXIgaXMgZ2l2ZW4gYW4gb2JqZWN0CisJaW1wbGVtZW50aW5nIHRoZSBvcmcueG1sLnNheC5leHQuRW50aXR5UmVzb2x2ZXIyIGludGVyZmFjZSwKKwl0aG9zZSBuZXcgbWV0aG9kcyB3aWxsIGJlIHVzZWQuICAoVGhleSB3b24ndCBiZS4pCisJKiovCisJcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgdXNlRW50aXR5UmVzb2x2ZXIyRmVhdHVyZSA9CisJCSJodHRwOi8veG1sLm9yZy9zYXgvZmVhdHVyZXMvdXNlLWVudGl0eS1yZXNvbHZlcjIiOworCisJLyoqCisJQ29udHJvbHMgd2hldGhlciB0aGUgcGFyc2VyIGlzIHJlcG9ydGluZyBhbGwgdmFsaWRpdHkgZXJyb3JzCisJKFdlIGRvbid0IHJlcG9ydCBhbnkgdmFsaWRpdHkgZXJyb3JzLikKKwkqKi8KKwlwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyB2YWxpZGF0aW9uRmVhdHVyZSA9CisJCSJodHRwOi8veG1sLm9yZy9zYXgvZmVhdHVyZXMvdmFsaWRhdGlvbiI7CisKKwkvKioKKwlDb250cm9scyB3aGV0aGVyIHRoZSBwYXJzZXIgcmVwb3J0cyBVbmljb2RlIG5vcm1hbGl6YXRpb24KKwllcnJvcnMgYXMgZGVzY3JpYmVkIGluIHNlY3Rpb24gMi4xMyBhbmQgQXBwZW5kaXggQiBvZiB0aGUgWE1MCisJMS4xIFJlY29tbWVuZGF0aW9uLiAgKFdlIGRvbid0IG5vcm1hbGl6ZS4pCisJKiovCisJcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgdW5pY29kZU5vcm1hbGl6YXRpb25DaGVja2luZ0ZlYXR1cmUgPQorImh0dHA6Ly94bWwub3JnL3NheC9mZWF0dXJlcy91bmljb2RlLW5vcm1hbGl6YXRpb24tY2hlY2tpbmciOworCisJLyoqCisJQ29udHJvbHMgd2hldGhlciwgd2hlbiB0aGUgbmFtZXNwYWNlLXByZWZpeGVzIGZlYXR1cmUgaXMgc2V0LAorCXRoZSBwYXJzZXIgdHJlYXRzIG5hbWVzcGFjZSBkZWNsYXJhdGlvbiBhdHRyaWJ1dGVzIGFzIGJlaW5nIGluCisJdGhlIGh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIG5hbWVzcGFjZS4gIChJdCBkb2Vzbid0LikKKwkqKi8KKwlwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyB4bWxuc1VSSXNGZWF0dXJlID0KKwkJImh0dHA6Ly94bWwub3JnL3NheC9mZWF0dXJlcy94bWxucy11cmlzIjsKKworCS8qKgorCVJldHVybnMgInRydWUiIGlmIHRoZSBwYXJzZXIgc3VwcG9ydHMgYm90aCBYTUwgMS4xIGFuZCBYTUwgMS4wLgorCShBbHdheXMgZmFsc2UuKQorCSoqLworCXB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFhNTDExRmVhdHVyZSA9CisJCSJodHRwOi8veG1sLm9yZy9zYXgvZmVhdHVyZXMveG1sLTEuMSI7CisKKwkvKioKKwlBIHZhbHVlIG9mICJ0cnVlIiBpbmRpY2F0ZXMgdGhhdCB0aGUgcGFyc2VyIHdpbGwgaWdub3JlCisJdW5rbm93biBlbGVtZW50cy4KKwkqKi8KKwlwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBpZ25vcmVCb2dvbnNGZWF0dXJlID0KKwkJImh0dHA6Ly93d3cuY2NpbC5vcmcvfmNvd2FuL3RhZ3NvdXAvZmVhdHVyZXMvaWdub3JlLWJvZ29ucyI7CisKKwkvKioKKwlBIHZhbHVlIG9mICJ0cnVlIiBpbmRpY2F0ZXMgdGhhdCB0aGUgcGFyc2VyIHdpbGwgZ2l2ZSB1bmtub3duCisJZWxlbWVudHMgYSBjb250ZW50IG1vZGVsIG9mIEVNUFRZOyBhIHZhbHVlIG9mICJmYWxzZSIsIGEKKwljb250ZW50IG1vZGVsIG9mIEFOWS4KKwkqKi8KKwlwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBib2dvbnNFbXB0eUZlYXR1cmUgPQorCQkiaHR0cDovL3d3dy5jY2lsLm9yZy9+Y293YW4vdGFnc291cC9mZWF0dXJlcy9ib2dvbnMtZW1wdHkiOworCisJLyoqCisJQSB2YWx1ZSBvZiAidHJ1ZSIgaW5kaWNhdGVzIHRoYXQgdGhlIHBhcnNlciB3aWxsIGFsbG93IHVua25vd24KKwllbGVtZW50cyB0byBiZSB0aGUgcm9vdCBlbGVtZW50LgorCSoqLworCXB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIHJvb3RCb2dvbnNGZWF0dXJlID0KKwkJImh0dHA6Ly93d3cuY2NpbC5vcmcvfmNvd2FuL3RhZ3NvdXAvZmVhdHVyZXMvcm9vdC1ib2dvbnMiOworCisJLyoqCisJQSB2YWx1ZSBvZiAidHJ1ZSIgaW5kaWNhdGVzIHRoYXQgdGhlIHBhcnNlciB3aWxsIHJldHVybiBkZWZhdWx0CisJYXR0cmlidXRlIHZhbHVlcyBmb3IgbWlzc2luZyBhdHRyaWJ1dGVzIHRoYXQgaGF2ZSBkZWZhdWx0IHZhbHVlcy4KKwkqKi8KKwlwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBkZWZhdWx0QXR0cmlidXRlc0ZlYXR1cmUgPQorCQkiaHR0cDovL3d3dy5jY2lsLm9yZy9+Y293YW4vdGFnc291cC9mZWF0dXJlcy9kZWZhdWx0LWF0dHJpYnV0ZXMiOworCisJLyoqCisJQSB2YWx1ZSBvZiAidHJ1ZSIgaW5kaWNhdGVzIHRoYXQgdGhlIHBhcnNlciB3aWxsIAorCXRyYW5zbGF0ZSBjb2xvbnMgaW50byB1bmRlcnNjb3JlcyBpbiBuYW1lcy4KKwkqKi8KKwlwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyB0cmFuc2xhdGVDb2xvbnNGZWF0dXJlID0KKwkJImh0dHA6Ly93d3cuY2NpbC5vcmcvfmNvd2FuL3RhZ3NvdXAvZmVhdHVyZXMvdHJhbnNsYXRlLWNvbG9ucyI7CisKKwkvKioKKwlBIHZhbHVlIG9mICJ0cnVlIiBpbmRpY2F0ZXMgdGhhdCB0aGUgcGFyc2VyIHdpbGwgCisJYXR0ZW1wdCB0byByZXN0YXJ0IHRoZSByZXN0YXJ0YWJsZSBlbGVtZW50cy4KKwkqKi8KKwlwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyByZXN0YXJ0RWxlbWVudHNGZWF0dXJlID0KKwkJImh0dHA6Ly93d3cuY2NpbC5vcmcvfmNvd2FuL3RhZ3NvdXAvZmVhdHVyZXMvcmVzdGFydC1lbGVtZW50cyI7CisKKwkvKioKKwlBIHZhbHVlIG9mICJ0cnVlIiBpbmRpY2F0ZXMgdGhhdCB0aGUgcGFyc2VyIHdpbGwgCisJdHJhbnNtaXQgd2hpdGVzcGFjZSBpbiBlbGVtZW50LW9ubHkgY29udGVudCB2aWEgdGhlIFNBWAorCWlnbm9yYWJsZVdoaXRlc3BhY2UgY2FsbGJhY2suICBOb3JtYWxseSB0aGlzIGlzIG5vdCBkb25lLAorCWJlY2F1c2UgSFRNTCBpcyBhbiBTR01MIGFwcGxpY2F0aW9uIGFuZCBTR01MIHN1cHByZXNzZXMKKwlzdWNoIHdoaXRlc3BhY2UuCisJKiovCisJcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgaWdub3JhYmxlV2hpdGVzcGFjZUZlYXR1cmUgPQorCQkiaHR0cDovL3d3dy5jY2lsLm9yZy9+Y293YW4vdGFnc291cC9mZWF0dXJlcy9pZ25vcmFibGUtd2hpdGVzcGFjZSI7CisKKwkvKioKKwlBIHZhbHVlIG9mICJ0cnVlIiBpbmRpY2F0ZXMgdGhhdCB0aGUgcGFyc2VyIHdpbGwgdHJlYXQgQ0RBVEEKKwllbGVtZW50cyBzcGVjaWFsbHkuICBOb3JtYWxseSB0cnVlLCBzaW5jZSB0aGUgaW5wdXQgaXMgYnkKKwlkZWZhdWx0IEhUTUwuCisJKiovCisJcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgQ0RBVEFFbGVtZW50c0ZlYXR1cmUgPQorCQkiaHR0cDovL3d3dy5jY2lsLm9yZy9+Y293YW4vdGFnc291cC9mZWF0dXJlcy9jZGF0YS1lbGVtZW50cyI7CisKKwkvKioKKwlVc2VkIHRvIHNlZSBzb21lIHN5bnRheCBldmVudHMgdGhhdCBhcmUgZXNzZW50aWFsIGluIHNvbWUKKwlhcHBsaWNhdGlvbnM6IGNvbW1lbnRzLCBDREFUQSBkZWxpbWl0ZXJzLCBzZWxlY3RlZCBnZW5lcmFsCisJZW50aXR5IGluY2x1c2lvbnMsIGFuZCB0aGUgc3RhcnQgYW5kIGVuZCBvZiB0aGUgRFREIChhbmQKKwlkZWNsYXJhdGlvbiBvZiBkb2N1bWVudCBlbGVtZW50IG5hbWUpLiBUaGUgT2JqZWN0IG11c3QgaW1wbGVtZW50CisJb3JnLnhtbC5zYXguZXh0LkxleGljYWxIYW5kbGVyLgorCSoqLworCXB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIGxleGljYWxIYW5kbGVyUHJvcGVydHkgPQorCQkiaHR0cDovL3htbC5vcmcvc2F4L3Byb3BlcnRpZXMvbGV4aWNhbC1oYW5kbGVyIjsKKworCS8qKgorCVNwZWNpZmllcyB0aGUgU2Nhbm5lciBvYmplY3QgdGhpcyBQYXJzZXIgdXNlcy4KKwkqKi8KKwlwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBzY2FubmVyUHJvcGVydHkgPQorCQkiaHR0cDovL3d3dy5jY2lsLm9yZy9+Y293YW4vdGFnc291cC9wcm9wZXJ0aWVzL3NjYW5uZXIiOworCisJLyoqCisJU3BlY2lmaWVzIHRoZSBTY2hlbWEgb2JqZWN0IHRoaXMgUGFyc2VyIHVzZXMuCisJKiovCisJcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgc2NoZW1hUHJvcGVydHkgPQorCQkiaHR0cDovL3d3dy5jY2lsLm9yZy9+Y293YW4vdGFnc291cC9wcm9wZXJ0aWVzL3NjaGVtYSI7CisKKwkvKioKKwlTcGVjaWZpZXMgdGhlIEF1dG9EZXRlY3RvciAoZm9yIGVuY29kaW5nIGRldGVjdGlvbikgdGhpcyBQYXJzZXIgdXNlcy4KKwkqKi8KKwlwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBhdXRvRGV0ZWN0b3JQcm9wZXJ0eSA9CisJCSJodHRwOi8vd3d3LmNjaWwub3JnL35jb3dhbi90YWdzb3VwL3Byb3BlcnRpZXMvYXV0by1kZXRlY3RvciI7CisKKwkvLyBEdWUgdG8gc3Vja3kgSmF2YSBvcmRlciBvZiBpbml0aWFsaXphdGlvbiBpc3N1ZXMsIHRoZXNlCisJLy8gZW50cmllcyBhcmUgbWFpbnRhaW5lZCBzZXBhcmF0ZWx5IGZyb20gdGhlIGluaXRpYWwgdmFsdWVzIG9mCisJLy8gdGhlIGNvcnJlc3BvbmRpbmcgaW5zdGFuY2UgdmFyaWFibGVzLCBidXQgY2FyZSBtdXN0IGJlIHRha2VuCisJLy8gdG8ga2VlcCB0aGVtIGluIHN5bmMuCisKKwlwcml2YXRlIEhhc2hNYXAgdGhlRmVhdHVyZXMgPSBuZXcgSGFzaE1hcCgpOworCXsKKwkJdGhlRmVhdHVyZXMucHV0KG5hbWVzcGFjZXNGZWF0dXJlLCB0cnV0aFZhbHVlKERFRkFVTFRfTkFNRVNQQUNFUykpOworCQl0aGVGZWF0dXJlcy5wdXQobmFtZXNwYWNlUHJlZml4ZXNGZWF0dXJlLCBCb29sZWFuLkZBTFNFKTsKKwkJdGhlRmVhdHVyZXMucHV0KGV4dGVybmFsR2VuZXJhbEVudGl0aWVzRmVhdHVyZSwgQm9vbGVhbi5GQUxTRSk7CisJCXRoZUZlYXR1cmVzLnB1dChleHRlcm5hbFBhcmFtZXRlckVudGl0aWVzRmVhdHVyZSwgQm9vbGVhbi5GQUxTRSk7CisJCXRoZUZlYXR1cmVzLnB1dChpc1N0YW5kYWxvbmVGZWF0dXJlLCBCb29sZWFuLkZBTFNFKTsKKwkJdGhlRmVhdHVyZXMucHV0KGxleGljYWxIYW5kbGVyUGFyYW1ldGVyRW50aXRpZXNGZWF0dXJlLAorCQkJQm9vbGVhbi5GQUxTRSk7CisJCXRoZUZlYXR1cmVzLnB1dChyZXNvbHZlRFREVVJJc0ZlYXR1cmUsIEJvb2xlYW4uVFJVRSk7CisJCXRoZUZlYXR1cmVzLnB1dChzdHJpbmdJbnRlcm5pbmdGZWF0dXJlLCBCb29sZWFuLlRSVUUpOworCQl0aGVGZWF0dXJlcy5wdXQodXNlQXR0cmlidXRlczJGZWF0dXJlLCBCb29sZWFuLkZBTFNFKTsKKwkJdGhlRmVhdHVyZXMucHV0KHVzZUxvY2F0b3IyRmVhdHVyZSwgQm9vbGVhbi5GQUxTRSk7CisJCXRoZUZlYXR1cmVzLnB1dCh1c2VFbnRpdHlSZXNvbHZlcjJGZWF0dXJlLCBCb29sZWFuLkZBTFNFKTsKKwkJdGhlRmVhdHVyZXMucHV0KHZhbGlkYXRpb25GZWF0dXJlLCBCb29sZWFuLkZBTFNFKTsKKwkJdGhlRmVhdHVyZXMucHV0KHhtbG5zVVJJc0ZlYXR1cmUsIEJvb2xlYW4uRkFMU0UpOworCQl0aGVGZWF0dXJlcy5wdXQoeG1sbnNVUklzRmVhdHVyZSwgQm9vbGVhbi5GQUxTRSk7CisJCXRoZUZlYXR1cmVzLnB1dChYTUwxMUZlYXR1cmUsIEJvb2xlYW4uRkFMU0UpOworCQl0aGVGZWF0dXJlcy5wdXQoaWdub3JlQm9nb25zRmVhdHVyZSwgdHJ1dGhWYWx1ZShERUZBVUxUX0lHTk9SRV9CT0dPTlMpKTsKKwkJdGhlRmVhdHVyZXMucHV0KGJvZ29uc0VtcHR5RmVhdHVyZSwgdHJ1dGhWYWx1ZShERUZBVUxUX0JPR09OU19FTVBUWSkpOworCQl0aGVGZWF0dXJlcy5wdXQocm9vdEJvZ29uc0ZlYXR1cmUsIHRydXRoVmFsdWUoREVGQVVMVF9ST09UX0JPR09OUykpOworCQl0aGVGZWF0dXJlcy5wdXQoZGVmYXVsdEF0dHJpYnV0ZXNGZWF0dXJlLCB0cnV0aFZhbHVlKERFRkFVTFRfREVGQVVMVF9BVFRSSUJVVEVTKSk7CisJCXRoZUZlYXR1cmVzLnB1dCh0cmFuc2xhdGVDb2xvbnNGZWF0dXJlLCB0cnV0aFZhbHVlKERFRkFVTFRfVFJBTlNMQVRFX0NPTE9OUykpOworCQl0aGVGZWF0dXJlcy5wdXQocmVzdGFydEVsZW1lbnRzRmVhdHVyZSwgdHJ1dGhWYWx1ZShERUZBVUxUX1JFU1RBUlRfRUxFTUVOVFMpKTsKKwkJdGhlRmVhdHVyZXMucHV0KGlnbm9yYWJsZVdoaXRlc3BhY2VGZWF0dXJlLCB0cnV0aFZhbHVlKERFRkFVTFRfSUdOT1JBQkxFX1dISVRFU1BBQ0UpKTsKKwkJdGhlRmVhdHVyZXMucHV0KENEQVRBRWxlbWVudHNGZWF0dXJlLCB0cnV0aFZhbHVlKERFRkFVTFRfQ0RBVEFfRUxFTUVOVFMpKTsKKwkJfQorCisJLy8gUHJpdmF0ZSBjbG9uZSBvZiBCb29sZWFuLnZhbHVlT2YgdGhhdCBpcyBndWFyYW50ZWVkIHRvIHJldHVybgorCS8vIEJvb2xlYW4uVFJVRSBvciBCb29sZWFuLkZBTFNFCisJcHJpdmF0ZSBzdGF0aWMgQm9vbGVhbiB0cnV0aFZhbHVlKGJvb2xlYW4gYikgeworCQlyZXR1cm4gYiA/IEJvb2xlYW4uVFJVRSA6IEJvb2xlYW4uRkFMU0U7CisJCX0KKworCisJcHVibGljIGJvb2xlYW4gZ2V0RmVhdHVyZSAoU3RyaW5nIG5hbWUpCisJCXRocm93cyBTQVhOb3RSZWNvZ25pemVkRXhjZXB0aW9uLCBTQVhOb3RTdXBwb3J0ZWRFeGNlcHRpb24geworCQlCb29sZWFuIGIgPSAoQm9vbGVhbil0aGVGZWF0dXJlcy5nZXQobmFtZSk7CisJCWlmIChiID09IG51bGwpIHsKKwkJCXRocm93IG5ldyBTQVhOb3RSZWNvZ25pemVkRXhjZXB0aW9uKCJVbmtub3duIGZlYXR1cmUgIiArIG5hbWUpOworCQkJfQorCQlyZXR1cm4gYi5ib29sZWFuVmFsdWUoKTsKKwkJfQorCisJcHVibGljIHZvaWQgc2V0RmVhdHVyZSAoU3RyaW5nIG5hbWUsIGJvb2xlYW4gdmFsdWUpCisJdGhyb3dzIFNBWE5vdFJlY29nbml6ZWRFeGNlcHRpb24sIFNBWE5vdFN1cHBvcnRlZEV4Y2VwdGlvbiB7CisJCUJvb2xlYW4gYiA9IChCb29sZWFuKXRoZUZlYXR1cmVzLmdldChuYW1lKTsKKwkJaWYgKGIgPT0gbnVsbCkgeworCQkJdGhyb3cgbmV3IFNBWE5vdFJlY29nbml6ZWRFeGNlcHRpb24oIlVua25vd24gZmVhdHVyZSAiICsgbmFtZSk7CisJCQl9CisJCWlmICh2YWx1ZSkgdGhlRmVhdHVyZXMucHV0KG5hbWUsIEJvb2xlYW4uVFJVRSk7CisJCWVsc2UgdGhlRmVhdHVyZXMucHV0KG5hbWUsIEJvb2xlYW4uRkFMU0UpOworCisJCWlmIChuYW1lLmVxdWFscyhuYW1lc3BhY2VzRmVhdHVyZSkpIG5hbWVzcGFjZXMgPSB2YWx1ZTsKKwkJZWxzZSBpZiAobmFtZS5lcXVhbHMoaWdub3JlQm9nb25zRmVhdHVyZSkpIGlnbm9yZUJvZ29ucyA9IHZhbHVlOworCQllbHNlIGlmIChuYW1lLmVxdWFscyhib2dvbnNFbXB0eUZlYXR1cmUpKSBib2dvbnNFbXB0eSA9IHZhbHVlOworCQllbHNlIGlmIChuYW1lLmVxdWFscyhyb290Qm9nb25zRmVhdHVyZSkpIHJvb3RCb2dvbnMgPSB2YWx1ZTsKKwkJZWxzZSBpZiAobmFtZS5lcXVhbHMoZGVmYXVsdEF0dHJpYnV0ZXNGZWF0dXJlKSkgZGVmYXVsdEF0dHJpYnV0ZXMgPSB2YWx1ZTsKKwkJZWxzZSBpZiAobmFtZS5lcXVhbHModHJhbnNsYXRlQ29sb25zRmVhdHVyZSkpIHRyYW5zbGF0ZUNvbG9ucyA9IHZhbHVlOworCQllbHNlIGlmIChuYW1lLmVxdWFscyhyZXN0YXJ0RWxlbWVudHNGZWF0dXJlKSkgcmVzdGFydEVsZW1lbnRzID0gdmFsdWU7CisJCWVsc2UgaWYgKG5hbWUuZXF1YWxzKGlnbm9yYWJsZVdoaXRlc3BhY2VGZWF0dXJlKSkgaWdub3JhYmxlV2hpdGVzcGFjZSA9IHZhbHVlOworCQllbHNlIGlmIChuYW1lLmVxdWFscyhDREFUQUVsZW1lbnRzRmVhdHVyZSkpIENEQVRBRWxlbWVudHMgPSB2YWx1ZTsKKwkJfQorCisJcHVibGljIE9iamVjdCBnZXRQcm9wZXJ0eSAoU3RyaW5nIG5hbWUpCisJdGhyb3dzIFNBWE5vdFJlY29nbml6ZWRFeGNlcHRpb24sIFNBWE5vdFN1cHBvcnRlZEV4Y2VwdGlvbiB7CisJCWlmIChuYW1lLmVxdWFscyhsZXhpY2FsSGFuZGxlclByb3BlcnR5KSkgeworCQkJcmV0dXJuIHRoZUxleGljYWxIYW5kbGVyID09IHRoaXMgPyBudWxsIDogdGhlTGV4aWNhbEhhbmRsZXI7CisJCQl9CisJCWVsc2UgaWYgKG5hbWUuZXF1YWxzKHNjYW5uZXJQcm9wZXJ0eSkpIHsKKwkJCXJldHVybiB0aGVTY2FubmVyOworCQkJfQorCQllbHNlIGlmIChuYW1lLmVxdWFscyhzY2hlbWFQcm9wZXJ0eSkpIHsKKwkJCXJldHVybiB0aGVTY2hlbWE7CisJCQl9CisJCWVsc2UgaWYgKG5hbWUuZXF1YWxzKGF1dG9EZXRlY3RvclByb3BlcnR5KSkgeworCQkJcmV0dXJuIHRoZUF1dG9EZXRlY3RvcjsKKwkJCX0KKwkJZWxzZSB7CisJCQl0aHJvdyBuZXcgU0FYTm90UmVjb2duaXplZEV4Y2VwdGlvbigiVW5rbm93biBwcm9wZXJ0eSAiICsgbmFtZSk7CisJCQl9CisJCX0KKworCXB1YmxpYyB2b2lkIHNldFByb3BlcnR5IChTdHJpbmcgbmFtZSwgT2JqZWN0IHZhbHVlKQorCXRocm93cyBTQVhOb3RSZWNvZ25pemVkRXhjZXB0aW9uLCBTQVhOb3RTdXBwb3J0ZWRFeGNlcHRpb24geworCQlpZiAobmFtZS5lcXVhbHMobGV4aWNhbEhhbmRsZXJQcm9wZXJ0eSkpIHsKKwkJCWlmICh2YWx1ZSA9PSBudWxsKSB7CisJCQkJdGhlTGV4aWNhbEhhbmRsZXIgPSB0aGlzOworCQkJCX0KKwkJCWVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgTGV4aWNhbEhhbmRsZXIpIHsKKwkJCQl0aGVMZXhpY2FsSGFuZGxlciA9IChMZXhpY2FsSGFuZGxlcil2YWx1ZTsKKwkJCQl9CisJCQllbHNlIHsKKwkJCQl0aHJvdyBuZXcgU0FYTm90U3VwcG9ydGVkRXhjZXB0aW9uKCJZb3VyIGxleGljYWwgaGFuZGxlciBpcyBub3QgYSBMZXhpY2FsSGFuZGxlciIpOworCQkJCX0KKwkJCX0KKwkJZWxzZSBpZiAobmFtZS5lcXVhbHMoc2Nhbm5lclByb3BlcnR5KSkgeworCQkJaWYgKHZhbHVlIGluc3RhbmNlb2YgU2Nhbm5lcikgeworCQkJCXRoZVNjYW5uZXIgPSAoU2Nhbm5lcil2YWx1ZTsKKwkJCQl9CisJCQllbHNlIHsKKwkJCQl0aHJvdyBuZXcgU0FYTm90U3VwcG9ydGVkRXhjZXB0aW9uKCJZb3VyIHNjYW5uZXIgaXMgbm90IGEgU2Nhbm5lciIpOworCQkJCX0KKwkJCX0KKwkJZWxzZSBpZiAobmFtZS5lcXVhbHMoc2NoZW1hUHJvcGVydHkpKSB7CisJCQlpZiAodmFsdWUgaW5zdGFuY2VvZiBTY2hlbWEpIHsKKwkJCQl0aGVTY2hlbWEgPSAoU2NoZW1hKXZhbHVlOworCQkJCX0KKwkJCWVsc2UgeworCQkJCSB0aHJvdyBuZXcgU0FYTm90U3VwcG9ydGVkRXhjZXB0aW9uKCJZb3VyIHNjaGVtYSBpcyBub3QgYSBTY2hlbWEiKTsKKwkJCQl9CisJCQl9CisJCWVsc2UgaWYgKG5hbWUuZXF1YWxzKGF1dG9EZXRlY3RvclByb3BlcnR5KSkgeworCQkJaWYgKHZhbHVlIGluc3RhbmNlb2YgQXV0b0RldGVjdG9yKSB7CisJCQkJdGhlQXV0b0RldGVjdG9yID0gKEF1dG9EZXRlY3Rvcil2YWx1ZTsKKwkJCQl9CisJCQllbHNlIHsKKwkJCQl0aHJvdyBuZXcgU0FYTm90U3VwcG9ydGVkRXhjZXB0aW9uKCJZb3VyIGF1dG8tZGV0ZWN0b3IgaXMgbm90IGFuIEF1dG9EZXRlY3RvciIpOworCQkJCX0KKwkJCX0KKwkJZWxzZSB7CisJCQl0aHJvdyBuZXcgU0FYTm90UmVjb2duaXplZEV4Y2VwdGlvbigiVW5rbm93biBwcm9wZXJ0eSAiICsgbmFtZSk7CisJCQl9CisJCX0KKworCXB1YmxpYyB2b2lkIHNldEVudGl0eVJlc29sdmVyIChFbnRpdHlSZXNvbHZlciByZXNvbHZlcikgeworCQl0aGVFbnRpdHlSZXNvbHZlciA9IChyZXNvbHZlciA9PSBudWxsKSA/IHRoaXMgOiByZXNvbHZlcjsKKwkJfQorCisJcHVibGljIEVudGl0eVJlc29sdmVyIGdldEVudGl0eVJlc29sdmVyICgpIHsKKwkJcmV0dXJuICh0aGVFbnRpdHlSZXNvbHZlciA9PSB0aGlzKSA/IG51bGwgOiB0aGVFbnRpdHlSZXNvbHZlcjsKKwkJfQorCisJcHVibGljIHZvaWQgc2V0RFRESGFuZGxlciAoRFRESGFuZGxlciBoYW5kbGVyKSB7CisJCXRoZURUREhhbmRsZXIgPSAoaGFuZGxlciA9PSBudWxsKSA/IHRoaXMgOiBoYW5kbGVyOworCQl9CisKKwlwdWJsaWMgRFRESGFuZGxlciBnZXREVERIYW5kbGVyICgpIHsKKwkJcmV0dXJuICh0aGVEVERIYW5kbGVyID09IHRoaXMpID8gbnVsbCA6IHRoZURUREhhbmRsZXI7CisJCX0KKworCXB1YmxpYyB2b2lkIHNldENvbnRlbnRIYW5kbGVyIChDb250ZW50SGFuZGxlciBoYW5kbGVyKSB7CisJCXRoZUNvbnRlbnRIYW5kbGVyID0gKGhhbmRsZXIgPT0gbnVsbCkgPyB0aGlzIDogaGFuZGxlcjsKKwkJfQorCisJcHVibGljIENvbnRlbnRIYW5kbGVyIGdldENvbnRlbnRIYW5kbGVyICgpIHsKKwkJcmV0dXJuICh0aGVDb250ZW50SGFuZGxlciA9PSB0aGlzKSA/IG51bGwgOiB0aGVDb250ZW50SGFuZGxlcjsKKwkJfQorCisJcHVibGljIHZvaWQgc2V0RXJyb3JIYW5kbGVyIChFcnJvckhhbmRsZXIgaGFuZGxlcikgeworCQl0aGVFcnJvckhhbmRsZXIgPSAoaGFuZGxlciA9PSBudWxsKSA/IHRoaXMgOiBoYW5kbGVyOworCQl9CisKKwlwdWJsaWMgRXJyb3JIYW5kbGVyIGdldEVycm9ySGFuZGxlciAoKSB7CisJCXJldHVybiAodGhlRXJyb3JIYW5kbGVyID09IHRoaXMpID8gbnVsbCA6IHRoZUVycm9ySGFuZGxlcjsKKwkJfQorCisJcHVibGljIHZvaWQgcGFyc2UgKElucHV0U291cmNlIGlucHV0KSB0aHJvd3MgSU9FeGNlcHRpb24sIFNBWEV4Y2VwdGlvbiB7CisJCXNldHVwKCk7CisJCVJlYWRlciByID0gZ2V0UmVhZGVyKGlucHV0KTsKKwkJdGhlQ29udGVudEhhbmRsZXIuc3RhcnREb2N1bWVudCgpOworCQl0aGVTY2FubmVyLnJlc2V0RG9jdW1lbnRMb2NhdG9yKGlucHV0LmdldFB1YmxpY0lkKCksIGlucHV0LmdldFN5c3RlbUlkKCkpOworCQlpZiAodGhlU2Nhbm5lciBpbnN0YW5jZW9mIExvY2F0b3IpIHsKKwkJCXRoZUNvbnRlbnRIYW5kbGVyLnNldERvY3VtZW50TG9jYXRvcigoTG9jYXRvcil0aGVTY2FubmVyKTsKKwkJCX0KKwkJaWYgKCEodGhlU2NoZW1hLmdldFVSSSgpLmVxdWFscygiIikpKQorCQkJdGhlQ29udGVudEhhbmRsZXIuc3RhcnRQcmVmaXhNYXBwaW5nKHRoZVNjaGVtYS5nZXRQcmVmaXgoKSwKKwkJCQl0aGVTY2hlbWEuZ2V0VVJJKCkpOworCQl0aGVTY2FubmVyLnNjYW4ociwgdGhpcyk7CisJCX0KKworCXB1YmxpYyB2b2lkIHBhcnNlIChTdHJpbmcgc3lzdGVtaWQpIHRocm93cyBJT0V4Y2VwdGlvbiwgU0FYRXhjZXB0aW9uIHsKKwkJcGFyc2UobmV3IElucHV0U291cmNlKHN5c3RlbWlkKSk7CisJCX0KKworCS8vIFNldHMgdXAgaW5zdGFuY2UgdmFyaWFibGVzIHRoYXQgaGF2ZW4ndCBiZWVuIHNldCBieSBzZXRGZWF0dXJlCisJcHJpdmF0ZSB2b2lkIHNldHVwKCkgeworCQlpZiAodGhlU2NoZW1hID09IG51bGwpIHRoZVNjaGVtYSA9IG5ldyBIVE1MU2NoZW1hKCk7CisJCWlmICh0aGVTY2FubmVyID09IG51bGwpIHRoZVNjYW5uZXIgPSBuZXcgSFRNTFNjYW5uZXIoKTsKKwkJaWYgKHRoZUF1dG9EZXRlY3RvciA9PSBudWxsKSB7CisJCQl0aGVBdXRvRGV0ZWN0b3IgPSBuZXcgQXV0b0RldGVjdG9yKCkgeworCQkJCXB1YmxpYyBSZWFkZXIgYXV0b0RldGVjdGluZ1JlYWRlcihJbnB1dFN0cmVhbSBpKSB7CisJCQkJCXJldHVybiBuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaSk7CisJCQkJCX0KKwkJCQl9OworCQkJfQorCQl0aGVTdGFjayA9IG5ldyBFbGVtZW50KHRoZVNjaGVtYS5nZXRFbGVtZW50VHlwZSgiPHJvb3Q+IiksIGRlZmF1bHRBdHRyaWJ1dGVzKTsKKwkJdGhlUENEQVRBID0gbmV3IEVsZW1lbnQodGhlU2NoZW1hLmdldEVsZW1lbnRUeXBlKCI8cGNkYXRhPiIpLCBkZWZhdWx0QXR0cmlidXRlcyk7CisJCXRoZU5ld0VsZW1lbnQgPSBudWxsOworCQl0aGVBdHRyaWJ1dGVOYW1lID0gbnVsbDsKKwkJdGhlUElUYXJnZXQgPSBudWxsOworCQl0aGVTYXZlZCA9IG51bGw7CisJCXRoZUVudGl0eSA9IDA7CisJCXZpcmdpblN0YWNrID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB0aGVEb2N0eXBlTmFtZSA9IHRoZURvY3R5cGVQdWJsaWNJZCA9IHRoZURvY3R5cGVTeXN0ZW1JZCA9IG51bGw7CisJCX0KKworCS8vIFJldHVybiBhIFJlYWRlciBiYXNlZCBvbiB0aGUgY29udGVudHMgb2YgYW4gSW5wdXRTb3VyY2UKKwkvLyBCdWZmZXIgYm90aCB0aGUgSW5wdXRTdHJlYW0gYW5kIHRoZSBSZWFkZXIKKwlwcml2YXRlIFJlYWRlciBnZXRSZWFkZXIoSW5wdXRTb3VyY2UgcykgdGhyb3dzIFNBWEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geworCQlSZWFkZXIgciA9IHMuZ2V0Q2hhcmFjdGVyU3RyZWFtKCk7CisJCUlucHV0U3RyZWFtIGkgPSBzLmdldEJ5dGVTdHJlYW0oKTsKKwkJU3RyaW5nIGVuY29kaW5nID0gcy5nZXRFbmNvZGluZygpOworCQlTdHJpbmcgcHVibGljaWQgPSBzLmdldFB1YmxpY0lkKCk7CisJCVN0cmluZyBzeXN0ZW1pZCA9IHMuZ2V0U3lzdGVtSWQoKTsKKwkJaWYgKHIgPT0gbnVsbCkgeworCQkJaWYgKGkgPT0gbnVsbCkgaSA9IGdldElucHV0U3RyZWFtKHB1YmxpY2lkLCBzeXN0ZW1pZCk7CisvLwkJCWkgPSBuZXcgQnVmZmVyZWRJbnB1dFN0cmVhbShpKTsKKwkJCWlmIChlbmNvZGluZyA9PSBudWxsKSB7CisJCQkJciA9IHRoZUF1dG9EZXRlY3Rvci5hdXRvRGV0ZWN0aW5nUmVhZGVyKGkpOworCQkJCX0KKwkJCWVsc2UgeworCQkJCXRyeSB7CisJCQkJCXIgPSBuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaSwgZW5jb2RpbmcpOworCQkJCQl9CisJCQkJY2F0Y2ggKFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24gZSkgeworCQkJCQlyID0gbmV3IElucHV0U3RyZWFtUmVhZGVyKGkpOworCQkJCQl9CisJCQkJfQorCQkJfQorLy8JCXIgPSBuZXcgQnVmZmVyZWRSZWFkZXIocik7CisJCXJldHVybiByOworCQl9CisKKwkvLyBHZXQgYW4gSW5wdXRTdHJlYW0gYmFzZWQgb24gYSBwdWJsaWNpZCBhbmQgYSBzeXN0ZW1pZAorCXByaXZhdGUgSW5wdXRTdHJlYW0gZ2V0SW5wdXRTdHJlYW0oU3RyaW5nIHB1YmxpY2lkLCBTdHJpbmcgc3lzdGVtaWQpIHRocm93cyBJT0V4Y2VwdGlvbiwgU0FYRXhjZXB0aW9uIHsKKwkJVVJMIGJhc2lzID0gbmV3IFVSTCgiZmlsZSIsICIiLCBTeXN0ZW0uZ2V0UHJvcGVydHkoInVzZXIuZGlyIikgKyAiLy4iKTsKKwkJVVJMIHVybCA9IG5ldyBVUkwoYmFzaXMsIHN5c3RlbWlkKTsKKwkJVVJMQ29ubmVjdGlvbiBjID0gdXJsLm9wZW5Db25uZWN0aW9uKCk7CisJCXJldHVybiBjLmdldElucHV0U3RyZWFtKCk7CisJCX0KKwkJLy8gV2UgZG9uJ3QgcHJvY2VzcyBwdWJsaWNpZHMgKHdobyB1c2VzIHRoZW0gYW55aG93PykKKworCS8vIFNjYW5IYW5kbGVyIGltcGxlbWVudGF0aW9uCisKKwlwcml2YXRlIEVsZW1lbnQgdGhlTmV3RWxlbWVudCA9IG51bGw7CisJcHJpdmF0ZSBTdHJpbmcgdGhlQXR0cmlidXRlTmFtZSA9IG51bGw7CisJcHJpdmF0ZSBib29sZWFuIHRoZURvY3R5cGVJc1ByZXNlbnQgPSBmYWxzZTsKKwlwcml2YXRlIFN0cmluZyB0aGVEb2N0eXBlUHVibGljSWQgPSBudWxsOworCXByaXZhdGUgU3RyaW5nIHRoZURvY3R5cGVTeXN0ZW1JZCA9IG51bGw7CisJcHJpdmF0ZSBTdHJpbmcgdGhlRG9jdHlwZU5hbWUgPSBudWxsOworCXByaXZhdGUgU3RyaW5nIHRoZVBJVGFyZ2V0ID0gbnVsbDsKKwlwcml2YXRlIEVsZW1lbnQgdGhlU3RhY2sgPSBudWxsOworCXByaXZhdGUgRWxlbWVudCB0aGVTYXZlZCA9IG51bGw7CisJcHJpdmF0ZSBFbGVtZW50IHRoZVBDREFUQSA9IG51bGw7CisJcHJpdmF0ZSBpbnQgdGhlRW50aXR5ID0gMDsJLy8gbmVlZHMgdG8gc3VwcG9ydCBjaGFycyBwYXN0IFUrRkZGRgorCisJcHVibGljIHZvaWQgYWR1cChjaGFyW10gYnVmZiwgaW50IG9mZnNldCwgaW50IGxlbmd0aCkgdGhyb3dzIFNBWEV4Y2VwdGlvbiB7CisJCWlmICh0aGVOZXdFbGVtZW50ID09IG51bGwgfHwgdGhlQXR0cmlidXRlTmFtZSA9PSBudWxsKSByZXR1cm47CisJCXRoZU5ld0VsZW1lbnQuc2V0QXR0cmlidXRlKHRoZUF0dHJpYnV0ZU5hbWUsIG51bGwsIHRoZUF0dHJpYnV0ZU5hbWUpOworCQl0aGVBdHRyaWJ1dGVOYW1lID0gbnVsbDsKKwkJfQorCisJcHVibGljIHZvaWQgYW5hbWUoY2hhcltdIGJ1ZmYsIGludCBvZmZzZXQsIGludCBsZW5ndGgpIHRocm93cyBTQVhFeGNlcHRpb24geworCQlpZiAodGhlTmV3RWxlbWVudCA9PSBudWxsKSByZXR1cm47CisJCS8vIEN1cnJlbnRseSB3ZSBkb24ndCByZWx5IG9uIFNjaGVtYSB0byBjYW5vbmljYWxpemUKKwkJLy8gYXR0cmlidXRlIG5hbWVzLgorCQl0aGVBdHRyaWJ1dGVOYW1lID0gbWFrZU5hbWUoYnVmZiwgb2Zmc2V0LCBsZW5ndGgpLnRvTG93ZXJDYXNlKCk7CisvLwkJU3lzdGVtLmVyci5wcmludGxuKCIlJSBBdHRyaWJ1dGUgbmFtZSAiICsgdGhlQXR0cmlidXRlTmFtZSk7CisJCX0KKworCXB1YmxpYyB2b2lkIGF2YWwoY2hhcltdIGJ1ZmYsIGludCBvZmZzZXQsIGludCBsZW5ndGgpIHRocm93cyBTQVhFeGNlcHRpb24geworCQlpZiAodGhlTmV3RWxlbWVudCA9PSBudWxsIHx8IHRoZUF0dHJpYnV0ZU5hbWUgPT0gbnVsbCkgcmV0dXJuOworCQlTdHJpbmcgdmFsdWUgPSBuZXcgU3RyaW5nKGJ1ZmYsIG9mZnNldCwgbGVuZ3RoKTsKKy8vCQlTeXN0ZW0uZXJyLnByaW50bG4oIiUlIEF0dHJpYnV0ZSB2YWx1ZSBbIiArIHZhbHVlICsgIl0iKTsKKwkJdmFsdWUgPSBleHBhbmRFbnRpdGllcyh2YWx1ZSk7CisJCXRoZU5ld0VsZW1lbnQuc2V0QXR0cmlidXRlKHRoZUF0dHJpYnV0ZU5hbWUsIG51bGwsIHZhbHVlKTsKKwkJdGhlQXR0cmlidXRlTmFtZSA9IG51bGw7CisvLwkJU3lzdGVtLmVyci5wcmludGxuKCIlJSBBdmFsIGRvbmUiKTsKKwkJfQorCisJLy8gRXhwYW5kIGVudGl0eSByZWZlcmVuY2VzIGluIGF0dHJpYnV0ZSB2YWx1ZXMgc2VsZWN0aXZlbHkuCisJLy8gQ3VycmVudGx5IHdlIGV4cGFuZCBhIHJlZmVyZW5jZSBpZmYgaXQgaXMgcHJvcGVybHkgdGVybWluYXRlZAorCS8vIHdpdGggYSBzZW1pY29sb24uCisJcHJpdmF0ZSBTdHJpbmcgZXhwYW5kRW50aXRpZXMoU3RyaW5nIHNyYykgeworCQlpbnQgcmVmU3RhcnQgPSAtMTsKKwkJaW50IGxlbiA9IHNyYy5sZW5ndGgoKTsKKwkJY2hhcltdIGRzdCA9IG5ldyBjaGFyW2xlbl07CisJCWludCBkc3RsZW4gPSAwOworCQlmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCQljaGFyIGNoID0gc3JjLmNoYXJBdChpKTsKKwkJCWRzdFtkc3RsZW4rK10gPSBjaDsKKy8vCQkJU3lzdGVtLmVyci5wcmludCgiaSA9ICIgKyBpICsgIiwgZCA9ICIgKyBkc3RsZW4gKyAiLCBjaCA9IFsiICsgY2ggKyAiXSAiKTsKKwkJCWlmIChjaCA9PSAnJicgJiYgcmVmU3RhcnQgPT0gLTEpIHsKKwkJCQkvLyBzdGFydCBvZiBhIHJlZiBleGNsdWRpbmcgJgorCQkJCXJlZlN0YXJ0ID0gZHN0bGVuOworLy8JCQkJU3lzdGVtLmVyci5wcmludGxuKCJzdGFydCBvZiByZWYiKTsKKwkJCQl9CisJCQllbHNlIGlmIChyZWZTdGFydCA9PSAtMSkgeworCQkJCS8vIG5vdCBpbiBhIHJlZgorLy8JCQkJU3lzdGVtLmVyci5wcmludGxuKCJub3QgaW4gcmVmIik7CisJCQkJfQorCQkJZWxzZSBpZiAoQ2hhcmFjdGVyLmlzTGV0dGVyKGNoKSB8fAorCQkJCQlDaGFyYWN0ZXIuaXNEaWdpdChjaCkgfHwKKwkJCQkJY2ggPT0gJyMnKSB7CisJCQkJLy8gdmFsaWQgZW50aXR5IGNoYXIKKy8vCQkJCVN5c3RlbS5lcnIucHJpbnRsbigidmFsaWQiKTsKKwkJCQl9CisJCQllbHNlIGlmIChjaCA9PSAnOycpIHsKKwkJCQkvLyBwcm9wZXJseSB0ZXJtaW5hdGVkIHJlZgorLy8JCQkJU3lzdGVtLmVyci5wcmludCgiZ290IFsiICsgbmV3IFN0cmluZyhkc3QsIHJlZlN0YXJ0LCBkc3RsZW4tcmVmU3RhcnQtMSkgKyAiXSIpOworCQkJCWludCBlbnQgPSBsb29rdXBFbnRpdHkoZHN0LCByZWZTdGFydCwgZHN0bGVuIC0gcmVmU3RhcnQgLSAxKTsKKy8vCQkJCVN5c3RlbS5lcnIucHJpbnRsbigiID0gIiArIGVudCk7CisJCQkJaWYgKGVudCA+IDB4RkZGRikgeworCQkJCQllbnQgLT0gMHgxMDAwMDsKKwkJCQkJZHN0W3JlZlN0YXJ0IC0gMV0gPSAoY2hhcikoKGVudD4+MTApICsgMHhEODAwKTsKKwkJCQkJZHN0W3JlZlN0YXJ0XSA9IChjaGFyKSgoZW50JjB4M0ZGKSArIDB4REMwMCk7CisJCQkJCWRzdGxlbiA9IHJlZlN0YXJ0ICsgMTsKKwkJCQkJfQorCQkJCWVsc2UgaWYgKGVudCAhPSAwKSB7CisJCQkJCWRzdFtyZWZTdGFydCAtIDFdID0gKGNoYXIpZW50OworCQkJCQlkc3RsZW4gPSByZWZTdGFydDsKKwkJCQkJfQorCQkJCXJlZlN0YXJ0ID0gLTE7CisJCQkJfQorCQkJZWxzZSB7CisJCQkJLy8gaW1wcm9wZXJseSB0ZXJtaW5hdGVkIHJlZgorLy8JCQkJU3lzdGVtLmVyci5wcmludGxuKCJlbmQgb2YgcmVmIik7CisJCQkJcmVmU3RhcnQgPSAtMTsKKwkJCQl9CisJCQl9CisJCXJldHVybiBuZXcgU3RyaW5nKGRzdCwgMCwgZHN0bGVuKTsKKwkJfQorCisJcHVibGljIHZvaWQgZW50aXR5KGNoYXJbXSBidWZmLCBpbnQgb2Zmc2V0LCBpbnQgbGVuZ3RoKSB0aHJvd3MgU0FYRXhjZXB0aW9uIHsKKwkJdGhlRW50aXR5ID0gbG9va3VwRW50aXR5KGJ1ZmYsIG9mZnNldCwgbGVuZ3RoKTsKKwkJfQorCisJLy8gUHJvY2VzcyBudW1lcmljIGNoYXJhY3RlciByZWZlcmVuY2VzLAorCS8vIGRlZmVycmluZyB0byB0aGUgc2NoZW1hIGZvciBuYW1lZCBvbmVzLgorCXByaXZhdGUgaW50IGxvb2t1cEVudGl0eShjaGFyW10gYnVmZiwgaW50IG9mZnNldCwgaW50IGxlbmd0aCkgeworCQlpbnQgcmVzdWx0ID0gMDsKKwkJaWYgKGxlbmd0aCA8IDEpIHJldHVybiByZXN1bHQ7CisvLwkJU3lzdGVtLmVyci5wcmludGxuKCIlJSBFbnRpdHkgYXQgIiArIG9mZnNldCArICIgIiArIGxlbmd0aCk7CisvLwkJU3lzdGVtLmVyci5wcmludGxuKCIlJSBHb3QgZW50aXR5IFsiICsgbmV3IFN0cmluZyhidWZmLCBvZmZzZXQsIGxlbmd0aCkgKyAiXSIpOworCQlpZiAoYnVmZltvZmZzZXRdID09ICcjJykgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxlbmd0aCA+IDEgJiYgKGJ1ZmZbb2Zmc2V0KzFdID09ICd4JworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGJ1ZmZbb2Zmc2V0KzFdID09ICdYJykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW50ZWdlci5wYXJzZUludChuZXcgU3RyaW5nKGJ1ZmYsIG9mZnNldCArIDIsIGxlbmd0aCAtIDIpLCAxNik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsgcmV0dXJuIDA7IH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEludGVnZXIucGFyc2VJbnQobmV3IFN0cmluZyhidWZmLCBvZmZzZXQgKyAxLCBsZW5ndGggLSAxKSwgMTApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsgcmV0dXJuIDA7IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKwkJcmV0dXJuIHRoZVNjaGVtYS5nZXRFbnRpdHkobmV3IFN0cmluZyhidWZmLCBvZmZzZXQsIGxlbmd0aCkpOworCQl9CisKKwlwdWJsaWMgdm9pZCBlb2YoY2hhcltdIGJ1ZmYsIGludCBvZmZzZXQsIGludCBsZW5ndGgpIHRocm93cyBTQVhFeGNlcHRpb24geworCQlpZiAodmlyZ2luU3RhY2spIHJlY3RpZnkodGhlUENEQVRBKTsKKwkJd2hpbGUgKHRoZVN0YWNrLm5leHQoKSAhPSBudWxsKSB7CisJCQlwb3AoKTsKKwkJCX0KKwkJaWYgKCEodGhlU2NoZW1hLmdldFVSSSgpLmVxdWFscygiIikpKQorCQkJdGhlQ29udGVudEhhbmRsZXIuZW5kUHJlZml4TWFwcGluZyh0aGVTY2hlbWEuZ2V0UHJlZml4KCkpOworCQl0aGVDb250ZW50SGFuZGxlci5lbmREb2N1bWVudCgpOworCQl9CisKKwlwdWJsaWMgdm9pZCBldGFnKGNoYXJbXSBidWZmLCBpbnQgb2Zmc2V0LCBpbnQgbGVuZ3RoKSB0aHJvd3MgU0FYRXhjZXB0aW9uIHsKKwkJaWYgKGV0YWdfY2RhdGEoYnVmZiwgb2Zmc2V0LCBsZW5ndGgpKSByZXR1cm47CisJCWV0YWdfYmFzaWMoYnVmZiwgb2Zmc2V0LCBsZW5ndGgpOworCQl9CisKKwlwcml2YXRlIHN0YXRpYyBjaGFyW10gZXRhZ2NoYXJzID0geyc8JywgJy8nLCAnPid9OworCXB1YmxpYyBib29sZWFuIGV0YWdfY2RhdGEoY2hhcltdIGJ1ZmYsIGludCBvZmZzZXQsIGludCBsZW5ndGgpIHRocm93cyBTQVhFeGNlcHRpb24geworCQlTdHJpbmcgY3VycmVudE5hbWUgPSB0aGVTdGFjay5uYW1lKCk7CisJCS8vIElmIHRoaXMgaXMgYSBDREFUQSBlbGVtZW50IGFuZCB0aGUgdGFnIGRvZXNuJ3QgbWF0Y2gsCisJCS8vIG9yIGlzbid0IHByb3Blcmx5IGZvcm1lZCAoanVuayBhZnRlciB0aGUgbmFtZSksCisJCS8vIHJlc3RhcnQgQ0RBVEEgbW9kZSBhbmQgcHJvY2VzcyB0aGUgdGFnIGFzIGNoYXJhY3RlcnMuCisJCWlmIChDREFUQUVsZW1lbnRzICYmICh0aGVTdGFjay5mbGFncygpICYgU2NoZW1hLkZfQ0RBVEEpICE9IDApIHsKKwkJCWJvb2xlYW4gcmVhbFRhZyA9IChsZW5ndGggPT0gY3VycmVudE5hbWUubGVuZ3RoKCkpOworCQkJaWYgKHJlYWxUYWcpIHsKKwkJCQlmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisJCQkJCWlmIChDaGFyYWN0ZXIudG9Mb3dlckNhc2UoYnVmZltvZmZzZXQgKyBpXSkgIT0gQ2hhcmFjdGVyLnRvTG93ZXJDYXNlKGN1cnJlbnROYW1lLmNoYXJBdChpKSkpIHsKKwkJCQkJCXJlYWxUYWcgPSBmYWxzZTsKKwkJCQkJCWJyZWFrOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJaWYgKCFyZWFsVGFnKSB7CisJCQkJdGhlQ29udGVudEhhbmRsZXIuY2hhcmFjdGVycyhldGFnY2hhcnMsIDAsIDIpOworCQkJCXRoZUNvbnRlbnRIYW5kbGVyLmNoYXJhY3RlcnMoYnVmZiwgb2Zmc2V0LCBsZW5ndGgpOworCQkJCXRoZUNvbnRlbnRIYW5kbGVyLmNoYXJhY3RlcnMoZXRhZ2NoYXJzLCAyLCAxKTsKKwkJCQl0aGVTY2FubmVyLnN0YXJ0Q0RBVEEoKTsKKwkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQl9CisJCQl9CisJCXJldHVybiBmYWxzZTsKKwkJfQorCisJcHVibGljIHZvaWQgZXRhZ19iYXNpYyhjaGFyW10gYnVmZiwgaW50IG9mZnNldCwgaW50IGxlbmd0aCkgdGhyb3dzIFNBWEV4Y2VwdGlvbiB7CisJCXRoZU5ld0VsZW1lbnQgPSBudWxsOworCQlTdHJpbmcgbmFtZTsKKwkJaWYgKGxlbmd0aCAhPSAwKSB7CisJCQkvLyBDYW5vbmljYWxpemUgY2FzZSBvZiBuYW1lCisJCQluYW1lID0gbWFrZU5hbWUoYnVmZiwgb2Zmc2V0LCBsZW5ndGgpOworLy8JCQlTeXN0ZW0uZXJyLnByaW50bG4oImdvdCBldGFnIFsiICsgbmFtZSArICJdIik7CisJCQlFbGVtZW50VHlwZSB0eXBlID0gdGhlU2NoZW1hLmdldEVsZW1lbnRUeXBlKG5hbWUpOworCQkJaWYgKHR5cGUgPT0gbnVsbCkgcmV0dXJuOwkvLyBteXN0ZXJpb3VzIGVuZC10YWcKKwkJCW5hbWUgPSB0eXBlLm5hbWUoKTsKKwkJCX0KKwkJZWxzZSB7CisJCQluYW1lID0gdGhlU3RhY2submFtZSgpOworCQkJfQorLy8JCVN5c3RlbS5lcnIucHJpbnRsbigiJSUgR290IGVuZCBvZiAiICsgbmFtZSk7CisKKwkJRWxlbWVudCBzcDsKKwkJYm9vbGVhbiBpbk5vZm9yY2UgPSBmYWxzZTsKKwkJZm9yIChzcCA9IHRoZVN0YWNrOyBzcCAhPSBudWxsOyBzcCA9IHNwLm5leHQoKSkgeworCQkJaWYgKHNwLm5hbWUoKS5lcXVhbHMobmFtZSkpIGJyZWFrOworCQkJaWYgKChzcC5mbGFncygpICYgU2NoZW1hLkZfTk9GT1JDRSkgIT0gMCkgaW5Ob2ZvcmNlID0gdHJ1ZTsKKwkJCX0KKworCQlpZiAoc3AgPT0gbnVsbCkgcmV0dXJuOwkJLy8gSWdub3JlIHVua25vd24gZXRhZ3MKKwkJaWYgKHNwLm5leHQoKSA9PSBudWxsIHx8IHNwLm5leHQoKS5uZXh0KCkgPT0gbnVsbCkgcmV0dXJuOworCQlpZiAoaW5Ob2ZvcmNlKSB7CQkvLyBpbnNpZGUgYW4gRl9OT0ZPUkNFIGVsZW1lbnQ/CisJCQlzcC5wcmVjbG9zZSgpOwkJLy8gcHJlY2xvc2UgdGhlIG1hdGNoaW5nIGVsZW1lbnQKKwkJCX0KKwkJZWxzZSB7CQkJLy8gcmVzdGFydGFibHkgcG9wIGV2ZXJ5dGhpbmcgYWJvdmUgdXMKKwkJCXdoaWxlICh0aGVTdGFjayAhPSBzcCkgeworCQkJCXJlc3RhcnRhYmx5UG9wKCk7CisJCQkJfQorCQkJcG9wKCk7CisJCQl9CisJCS8vIHBvcCBhbnkgcHJlY2xvc2VkIGVsZW1lbnRzIG5vdyBhdCB0aGUgdG9wCisJCXdoaWxlICh0aGVTdGFjay5pc1ByZWNsb3NlZCgpKSB7CisJCQlwb3AoKTsKKwkJCX0KKwkJcmVzdGFydChudWxsKTsKKwkJfQorCisJLy8gUHVzaCByZXN0YXJ0YWJsZXMgb24gdGhlIHN0YWNrIGlmIHBvc3NpYmxlCisJLy8gZSBpcyB0aGUgbmV4dCBlbGVtZW50IHRvIGJlIHN0YXJ0ZWQsIGlmIHdlIGtub3cgd2hhdCBpdCBpcworCXByaXZhdGUgdm9pZCByZXN0YXJ0KEVsZW1lbnQgZSkgdGhyb3dzIFNBWEV4Y2VwdGlvbiB7CisJCXdoaWxlICh0aGVTYXZlZCAhPSBudWxsICYmIHRoZVN0YWNrLmNhbkNvbnRhaW4odGhlU2F2ZWQpICYmCisJCQkJKGUgPT0gbnVsbCB8fCB0aGVTYXZlZC5jYW5Db250YWluKGUpKSkgeworCQkJRWxlbWVudCBuZXh0ID0gdGhlU2F2ZWQubmV4dCgpOworCQkJcHVzaCh0aGVTYXZlZCk7CisJCQl0aGVTYXZlZCA9IG5leHQ7CisJCQl9CisJCX0KKworCS8vIFBvcCB0aGUgc3RhY2sgaXJyZXZvY2FibHkKKwlwcml2YXRlIHZvaWQgcG9wKCkgdGhyb3dzIFNBWEV4Y2VwdGlvbiB7CisJCWlmICh0aGVTdGFjayA9PSBudWxsKSByZXR1cm47CQkvLyBlbXB0eSBzdGFjaworCQlTdHJpbmcgbmFtZSA9IHRoZVN0YWNrLm5hbWUoKTsKKwkJU3RyaW5nIGxvY2FsTmFtZSA9IHRoZVN0YWNrLmxvY2FsTmFtZSgpOworCQlTdHJpbmcgbmFtZXNwYWNlID0gdGhlU3RhY2submFtZXNwYWNlKCk7CisJCVN0cmluZyBwcmVmaXggPSBwcmVmaXhPZihuYW1lKTsKKworLy8JCVN5c3RlbS5lcnIucHJpbnRsbigiJSUgUG9wcGluZyAiICsgbmFtZSk7CisJCWlmICghbmFtZXNwYWNlcykgbmFtZXNwYWNlID0gbG9jYWxOYW1lID0gIiI7CisJCXRoZUNvbnRlbnRIYW5kbGVyLmVuZEVsZW1lbnQobmFtZXNwYWNlLCBsb2NhbE5hbWUsIG5hbWUpOworCQlpZiAoZm9yZWlnbihwcmVmaXgsIG5hbWVzcGFjZSkpIHsKKwkJCXRoZUNvbnRlbnRIYW5kbGVyLmVuZFByZWZpeE1hcHBpbmcocHJlZml4KTsKKy8vCQkJU3lzdGVtLmVyci5wcmludGxuKCIlJSBVbm1hcHBpbmcgWyIgKyBwcmVmaXggKyAiXSBmb3IgZWxlbWVudHMgdG8gIiArIG5hbWVzcGFjZSk7CisJCQl9CisJCUF0dHJpYnV0ZXMgYXR0cyA9IHRoZVN0YWNrLmF0dHMoKTsKKwkJZm9yIChpbnQgaSA9IGF0dHMuZ2V0TGVuZ3RoKCkgLSAxOyBpID49IDA7IGktLSkgeworCQkJU3RyaW5nIGF0dE5hbWVzcGFjZSA9IGF0dHMuZ2V0VVJJKGkpOworCQkJU3RyaW5nIGF0dFByZWZpeCA9IHByZWZpeE9mKGF0dHMuZ2V0UU5hbWUoaSkpOworCQkJaWYgKGZvcmVpZ24oYXR0UHJlZml4LCBhdHROYW1lc3BhY2UpKSB7CisJCQkJdGhlQ29udGVudEhhbmRsZXIuZW5kUHJlZml4TWFwcGluZyhhdHRQcmVmaXgpOworLy8JCQlTeXN0ZW0uZXJyLnByaW50bG4oIiUlIFVubWFwcGluZyBbIiArIGF0dFByZWZpeCArICJdIGZvciBhdHRyaWJ1dGVzIHRvICIgKyBhdHROYW1lc3BhY2UpOworCQkJCX0KKwkJCX0KKwkJdGhlU3RhY2sgPSB0aGVTdGFjay5uZXh0KCk7CisJCX0KKworCS8vIFBvcCB0aGUgc3RhY2sgcmVzdGFydGFibHkKKwlwcml2YXRlIHZvaWQgcmVzdGFydGFibHlQb3AoKSB0aHJvd3MgU0FYRXhjZXB0aW9uIHsKKwkJRWxlbWVudCBwb3BwZWQgPSB0aGVTdGFjazsKKwkJcG9wKCk7CisJCWlmIChyZXN0YXJ0RWxlbWVudHMgJiYgKHBvcHBlZC5mbGFncygpICYgU2NoZW1hLkZfUkVTVEFSVCkgIT0gMCkgeworCQkJcG9wcGVkLmFub255bWl6ZSgpOworCQkJcG9wcGVkLnNldE5leHQodGhlU2F2ZWQpOworCQkJdGhlU2F2ZWQgPSBwb3BwZWQ7CisJCQl9CisJCX0KKworCS8vIFB1c2ggZWxlbWVudCBvbnRvIHN0YWNrCisJcHJpdmF0ZSBib29sZWFuIHZpcmdpblN0YWNrID0gdHJ1ZTsKKwlwcml2YXRlIHZvaWQgcHVzaChFbGVtZW50IGUpIHRocm93cyBTQVhFeGNlcHRpb24geworCQlTdHJpbmcgbmFtZSA9IGUubmFtZSgpOworCQlTdHJpbmcgbG9jYWxOYW1lID0gZS5sb2NhbE5hbWUoKTsKKwkJU3RyaW5nIG5hbWVzcGFjZSA9IGUubmFtZXNwYWNlKCk7CisJCVN0cmluZyBwcmVmaXggPSBwcmVmaXhPZihuYW1lKTsKKworLy8JCVN5c3RlbS5lcnIucHJpbnRsbigiJSUgUHVzaGluZyAiICsgbmFtZSk7CisJCWUuY2xlYW4oKTsKKwkJaWYgKCFuYW1lc3BhY2VzKSBuYW1lc3BhY2UgPSBsb2NhbE5hbWUgPSAiIjsKKyAgICAgICAgICAgICAgICBpZiAodmlyZ2luU3RhY2sgJiYgbG9jYWxOYW1lLmVxdWFsc0lnbm9yZUNhc2UodGhlRG9jdHlwZU5hbWUpKSB7CisgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGVFbnRpdHlSZXNvbHZlci5yZXNvbHZlRW50aXR5KHRoZURvY3R5cGVQdWJsaWNJZCwgdGhlRG9jdHlwZVN5c3RlbUlkKTsKKyAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZXcpIHsgfSAgIC8vIENhbid0IGJlIHRocm93biBmb3Igcm9vdCBJIGJlbGlldmUuCisgICAgICAgICAgICAgICAgfQorCQlpZiAoZm9yZWlnbihwcmVmaXgsIG5hbWVzcGFjZSkpIHsKKwkJCXRoZUNvbnRlbnRIYW5kbGVyLnN0YXJ0UHJlZml4TWFwcGluZyhwcmVmaXgsIG5hbWVzcGFjZSk7CisvLwkJCVN5c3RlbS5lcnIucHJpbnRsbigiJSUgTWFwcGluZyBbIiArIHByZWZpeCArICJdIGZvciBlbGVtZW50cyB0byAiICsgbmFtZXNwYWNlKTsKKwkJCX0KKwkJQXR0cmlidXRlcyBhdHRzID0gZS5hdHRzKCk7CisJCWludCBsZW4gPSBhdHRzLmdldExlbmd0aCgpOworCQlmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCQlTdHJpbmcgYXR0TmFtZXNwYWNlID0gYXR0cy5nZXRVUkkoaSk7CisJCQlTdHJpbmcgYXR0UHJlZml4ID0gcHJlZml4T2YoYXR0cy5nZXRRTmFtZShpKSk7CisJCQlpZiAoZm9yZWlnbihhdHRQcmVmaXgsIGF0dE5hbWVzcGFjZSkpIHsKKwkJCQl0aGVDb250ZW50SGFuZGxlci5zdGFydFByZWZpeE1hcHBpbmcoYXR0UHJlZml4LCBhdHROYW1lc3BhY2UpOworLy8JCQkJU3lzdGVtLmVyci5wcmludGxuKCIlJSBNYXBwaW5nIFsiICsgYXR0UHJlZml4ICsgIl0gZm9yIGF0dHJpYnV0ZXMgdG8gIiArIGF0dE5hbWVzcGFjZSk7CisJCQkJfQorCQkJfQorCQl0aGVDb250ZW50SGFuZGxlci5zdGFydEVsZW1lbnQobmFtZXNwYWNlLCBsb2NhbE5hbWUsIG5hbWUsIGUuYXR0cygpKTsKKwkJZS5zZXROZXh0KHRoZVN0YWNrKTsKKwkJdGhlU3RhY2sgPSBlOworCQl2aXJnaW5TdGFjayA9IGZhbHNlOworCQlpZiAoQ0RBVEFFbGVtZW50cyAmJiAodGhlU3RhY2suZmxhZ3MoKSAmIFNjaGVtYS5GX0NEQVRBKSAhPSAwKSB7CisJCQl0aGVTY2FubmVyLnN0YXJ0Q0RBVEEoKTsKKwkJCX0KKwkJfQorCisJLy8gR2V0IHRoZSBwcmVmaXggZnJvbSBhIFFOYW1lCisJcHJpdmF0ZSBTdHJpbmcgcHJlZml4T2YoU3RyaW5nIG5hbWUpIHsKKwkJaW50IGkgPSBuYW1lLmluZGV4T2YoJzonKTsKKwkJU3RyaW5nIHByZWZpeCA9ICIiOworCQlpZiAoaSAhPSAtMSkgcHJlZml4ID0gbmFtZS5zdWJzdHJpbmcoMCwgaSk7CisvLwkJU3lzdGVtLmVyci5wcmludGxuKCIlJSAiICsgcHJlZml4ICsgIiBpcyBwcmVmaXggb2YgIiArIG5hbWUpOworCQlyZXR1cm4gcHJlZml4OworCQl9CisKKwkvLyBSZXR1cm4gdHJ1ZSBpZiB3ZSBoYXZlIGEgZm9yZWlnbiBuYW1lCisJcHJpdmF0ZSBib29sZWFuIGZvcmVpZ24oU3RyaW5nIHByZWZpeCwgU3RyaW5nIG5hbWVzcGFjZSkgeworLy8JCVN5c3RlbS5lcnIucHJpbnQoIiUlIFRlc3RpbmcgIiArIHByZWZpeCArICIgYW5kICIgKyBuYW1lc3BhY2UgKyAiIGZvciBmb3JlaWdubmVzcyAtLSAiKTsKKwkJYm9vbGVhbiBmb3JlaWduID0gIShwcmVmaXguZXF1YWxzKCIiKSB8fCBuYW1lc3BhY2UuZXF1YWxzKCIiKSB8fAorCQkJbmFtZXNwYWNlLmVxdWFscyh0aGVTY2hlbWEuZ2V0VVJJKCkpKTsKKy8vCQlTeXN0ZW0uZXJyLnByaW50bG4oZm9yZWlnbik7CisJCXJldHVybiBmb3JlaWduOworCQl9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFBhcnNpbmcgdGhlIGNvbXBsZXRlIFhNTCBEb2N1bWVudCBUeXBlIERlZmluaXRpb24gaXMgd2F5IHRvbyBjb21wbGV4LAorICAgICAgICAgKiBidXQgZm9yIG1hbnkgc2ltcGxlIGNhc2VzIHdlIGNhbiBleHRyYWN0IHNvbWV0aGluZyB1c2VmdWwgZnJvbSBpdC4KKyAgICAgICAgICoKKyAgICAgICAgICogZG9jdHlwZWRlY2wgIDo6PSAnPCFET0NUWVBFJyBTIE5hbWUgKFMgRXh0ZXJuYWxJRCk/IFM/ICgnWycgaW50U3Vic2V0ICddJyBTPyk/ICc+JworICAgICAgICAgKiAgRGVjbFNlcCAgICAgOjo9IFBFUmVmZXJlbmNlIHwgUworICAgICAgICAgKiAgaW50U3Vic2V0ICAgOjo9IChtYXJrdXBkZWNsIHwgRGVjbFNlcCkqCisgICAgICAgICAqICBtYXJrdXBkZWNsICA6Oj0gZWxlbWVudGRlY2wgfCBBdHRsaXN0RGVjbCB8IEVudGl0eURlY2wgfCBOb3RhdGlvbkRlY2wgfCBQSSB8IENvbW1lbnQKKyAgICAgICAgICogIEV4dGVybmFsSUQgIDo6PSAnU1lTVEVNJyBTIFN5c3RlbUxpdGVyYWwgfCAnUFVCTElDJyBTIFB1YmlkTGl0ZXJhbCBTIFN5c3RlbUxpdGVyYWwKKyAgICAgICAgICovCisJcHVibGljIHZvaWQgZGVjbChjaGFyW10gYnVmZiwgaW50IG9mZnNldCwgaW50IGxlbmd0aCkgdGhyb3dzIFNBWEV4Y2VwdGlvbiB7CisJCVN0cmluZyBzID0gbmV3IFN0cmluZyhidWZmLCBvZmZzZXQsIGxlbmd0aCk7CisJCVN0cmluZyBuYW1lID0gbnVsbDsKKwkJU3RyaW5nIHN5c3RlbWlkID0gbnVsbDsKKwkJU3RyaW5nIHB1YmxpY2lkID0gbnVsbDsKKwkJU3RyaW5nW10gdiA9IHNwbGl0KHMpOworCQlpZiAodi5sZW5ndGggPiAwICYmICJET0NUWVBFIi5lcXVhbHModlswXSkpIHsKKwkJCWlmICh0aGVEb2N0eXBlSXNQcmVzZW50KSByZXR1cm47CQkvLyBvbmUgZG9jdHlwZSBvbmx5IQorCQkJdGhlRG9jdHlwZUlzUHJlc2VudCA9IHRydWU7CisJCQlpZiAodi5sZW5ndGggPiAxKSB7CisJCQkJbmFtZSA9IHZbMV07CisJCQkJaWYgKHYubGVuZ3RoPjMgJiYgIlNZU1RFTSIuZXF1YWxzKHZbMl0pKSB7CisJCQkJc3lzdGVtaWQgPSB2WzNdOworCQkJCX0KKwkJCWVsc2UgaWYgKHYubGVuZ3RoID4gMyAmJiAiUFVCTElDIi5lcXVhbHModlsyXSkpIHsKKwkJCQlwdWJsaWNpZCA9IHZbM107CisJCQkJaWYgKHYubGVuZ3RoID4gNCkgeworCQkJCQlzeXN0ZW1pZCA9IHZbNF07CisJCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJc3lzdGVtaWQgPSAiIjsKKwkJCQkJfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCQlwdWJsaWNpZCA9IHRyaW1xdW90ZXMocHVibGljaWQpOworCQlzeXN0ZW1pZCA9IHRyaW1xdW90ZXMoc3lzdGVtaWQpOworCQlpZiAobmFtZSAhPSBudWxsKSB7CisJCQlwdWJsaWNpZCA9IGNsZWFuUHVibGljaWQocHVibGljaWQpOworCQkJdGhlTGV4aWNhbEhhbmRsZXIuc3RhcnREVEQobmFtZSwgcHVibGljaWQsIHN5c3RlbWlkKTsKKwkJCXRoZUxleGljYWxIYW5kbGVyLmVuZERURCgpOworCQkJdGhlRG9jdHlwZU5hbWUgPSBuYW1lOworCQkJdGhlRG9jdHlwZVB1YmxpY0lkID0gcHVibGljaWQ7CisJCWlmICh0aGVTY2FubmVyIGluc3RhbmNlb2YgTG9jYXRvcikgeyAgICAvLyBNdXN0IHJlc29sdmUgc3lzdGVtaWQKKyAgICAgICAgICAgICAgICAgICAgdGhlRG9jdHlwZVN5c3RlbUlkICA9ICgoTG9jYXRvcil0aGVTY2FubmVyKS5nZXRTeXN0ZW1JZCgpOworICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgdGhlRG9jdHlwZVN5c3RlbUlkID0gbmV3IFVSTChuZXcgVVJMKHRoZURvY3R5cGVTeXN0ZW1JZCksIHN5c3RlbWlkKS50b1N0cmluZygpOworICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkge30KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworCS8vIElmIHRoZSBTdHJpbmcgaXMgcXVvdGVkLCB0cmltIHRoZSBxdW90ZXMuCisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHRyaW1xdW90ZXMoU3RyaW5nIGluKSB7CisJCWlmIChpbiA9PSBudWxsKSByZXR1cm4gaW47CisJCWludCBsZW5ndGggPSBpbi5sZW5ndGgoKTsKKwkJaWYgKGxlbmd0aCA9PSAwKSByZXR1cm4gaW47CisJCWNoYXIgcyA9IGluLmNoYXJBdCgwKTsKKwkJY2hhciBlID0gaW4uY2hhckF0KGxlbmd0aCAtIDEpOworCQlpZiAocyA9PSBlICYmIChzID09ICdcJycgfHwgcyA9PSAnIicpKSB7CisJCQlpbiA9IGluLnN1YnN0cmluZygxLCBpbi5sZW5ndGgoKSAtIDEpOworCQkJfQorCQlyZXR1cm4gaW47CisJCX0KKworCS8vIFNwbGl0IHRoZSBzdXBwbGllZCBTdHJpbmcgaW50byB3b3JkcyBvciBwaHJhc2VzIHNlcGVyYXRlZCBieSBzcGFjZXMuCisJLy8gUmVjb2duaXNlcyBxdW90ZXMgYXJvdW5kIGEgcGhyYXNlIGFuZCBkb2Vzbid0IHNwbGl0IGl0LgorCXByaXZhdGUgc3RhdGljIFN0cmluZ1tdIHNwbGl0KFN0cmluZyB2YWwpIHRocm93cyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24geworCQl2YWwgPSB2YWwudHJpbSgpOworCQlpZiAodmFsLmxlbmd0aCgpID09IDApIHsKKwkJCXJldHVybiBuZXcgU3RyaW5nWzBdOworCQkJfQorCQllbHNlIHsKKwkJCUFycmF5TGlzdCBsID0gbmV3IEFycmF5TGlzdCgpOworCQkJaW50IHMgPSAwOworCQkJaW50IGUgPSAwOworCQkJYm9vbGVhbiBzcSA9IGZhbHNlOwkvLyBzaW5nbGUgcXVvdGUKKwkJCWJvb2xlYW4gZHEgPSBmYWxzZTsJLy8gZG91YmxlIHF1b3RlCisJCQljaGFyIGxhc3RjID0gMDsKKwkJCWludCBsZW4gPSB2YWwubGVuZ3RoKCk7CisJCQlmb3IgKGU9MDsgZSA8IGxlbjsgZSsrKSB7CisJCQkJY2hhciBjID0gdmFsLmNoYXJBdChlKTsKKwkJCQlpZiAoIWRxICYmIGMgPT0gJ1wnJyAmJiBsYXN0YyAhPSAnXFwnKSB7CisJCQkJc3EgPSAhc3E7CisJCQkJaWYgKHMgPCAwKSBzID0gZTsKKwkJCQl9CisJCQllbHNlIGlmICghc3EgJiYgYyA9PSAnXCInICYmIGxhc3RjICE9ICdcXCcpIHsKKwkJCQlkcSA9ICFkcTsKKwkJCQlpZiAocyA8IDApIHMgPSBlOworCQkJCX0KKwkJCWVsc2UgaWYgKCFzcSAmJiAhZHEpIHsKKwkJCQlpZiAoQ2hhcmFjdGVyLmlzV2hpdGVzcGFjZShjKSkgeworCQkJCQlpZiAocyA+PSAwKSBsLmFkZCh2YWwuc3Vic3RyaW5nKHMsIGUpKTsKKwkJCQkJcyA9IC0xOworCQkJCQl9CisJCQkJZWxzZSBpZiAocyA8IDAgJiYgYyAhPSAnICcpIHsKKwkJCQkJcyA9IGU7CisJCQkJCX0KKwkJCQl9CisJCQlsYXN0YyA9IGM7CisJCQl9CisJCWwuYWRkKHZhbC5zdWJzdHJpbmcocywgZSkpOworCQlyZXR1cm4gKFN0cmluZ1tdKWwudG9BcnJheShuZXcgU3RyaW5nWzBdKTsKKwkJfQorICAgICAgICB9CisKKwkvLyBSZXBsYWNlIGp1bmsgaW4gcHVibGljaWRzIHdpdGggc3BhY2VzCisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGxlZ2FsID0KKwkJImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVowMTIzNDU2Nzg5LScoKSssLi86PT87ISojQCRfJSI7CisKKwlwcml2YXRlIFN0cmluZyBjbGVhblB1YmxpY2lkKFN0cmluZyBzcmMpIHsKKwkJaWYgKHNyYyA9PSBudWxsKSByZXR1cm4gbnVsbDsKKwkJaW50IGxlbiA9IHNyYy5sZW5ndGgoKTsKKwkJU3RyaW5nQnVmZmVyIGRzdCA9IG5ldyBTdHJpbmdCdWZmZXIobGVuKTsKKwkJYm9vbGVhbiBzdXBwcmVzc1NwYWNlID0gdHJ1ZTsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47IGkrKykgeworCQkJY2hhciBjaCA9IHNyYy5jaGFyQXQoaSk7CisJCQlpZiAobGVnYWwuaW5kZXhPZihjaCkgIT0gLTEpIHsgCS8vIGxlZ2FsIGJ1dCBub3Qgd2hpdGVzcGFjZQorCQkJCWRzdC5hcHBlbmQoY2gpOworCQkJCXN1cHByZXNzU3BhY2UgPSBmYWxzZTsKKwkJCQl9CisJCQllbHNlIGlmIChzdXBwcmVzc1NwYWNlKSB7CS8vIG5vcm1hbGl6YWJsZSB3aGl0ZXNwYWNlIG9yIGp1bmsKKwkJCQk7CisJCQkJfQorCQkJZWxzZSB7CisJCQkJZHN0LmFwcGVuZCgnICcpOworCQkJCXN1cHByZXNzU3BhY2UgPSB0cnVlOworCQkJCX0KKwkJCX0KKy8vCQlTeXN0ZW0uZXJyLnByaW50bG4oIiUlIFB1YmxpY2lkIFsiICsgZHN0LnRvU3RyaW5nKCkudHJpbSgpICsgIl0iKTsKKwkJcmV0dXJuIGRzdC50b1N0cmluZygpLnRyaW0oKTsJLy8gdHJpbSBhbnkgZmluYWwganVuayB3aGl0ZXNwYWNlCisJCX0KKworCisJcHVibGljIHZvaWQgZ2koY2hhcltdIGJ1ZmYsIGludCBvZmZzZXQsIGludCBsZW5ndGgpIHRocm93cyBTQVhFeGNlcHRpb24geworCQlpZiAodGhlTmV3RWxlbWVudCAhPSBudWxsKSByZXR1cm47CisJCVN0cmluZyBuYW1lID0gbWFrZU5hbWUoYnVmZiwgb2Zmc2V0LCBsZW5ndGgpOworCQlpZiAobmFtZSA9PSBudWxsKSByZXR1cm47CisJCUVsZW1lbnRUeXBlIHR5cGUgPSB0aGVTY2hlbWEuZ2V0RWxlbWVudFR5cGUobmFtZSk7CisJCWlmICh0eXBlID09IG51bGwpIHsKKwkJCS8vIFN1cHByZXNzIHVua25vd24gZWxlbWVudHMgaWYgaWdub3JlLWJvZ29ucyBpcyBvbgorCQkJaWYgKGlnbm9yZUJvZ29ucykgcmV0dXJuOworCQkJaW50IGJvZ29uTW9kZWwgPSBib2dvbnNFbXB0eSA/IFNjaGVtYS5NX0VNUFRZIDogU2NoZW1hLk1fQU5ZOworCQkJaW50IGJvZ29uTWVtYmVyT2YgPSByb290Qm9nb25zID8gU2NoZW1hLk1fQU5ZIDogKFNjaGVtYS5NX0FOWSAmIH4gU2NoZW1hLk1fUk9PVCk7CisJCQl0aGVTY2hlbWEuZWxlbWVudFR5cGUobmFtZSwgYm9nb25Nb2RlbCwgYm9nb25NZW1iZXJPZiwgMCk7CisJCQlpZiAoIXJvb3RCb2dvbnMpIHRoZVNjaGVtYS5wYXJlbnQobmFtZSwgdGhlU2NoZW1hLnJvb3RFbGVtZW50VHlwZSgpLm5hbWUoKSk7CisJCQl0eXBlID0gdGhlU2NoZW1hLmdldEVsZW1lbnRUeXBlKG5hbWUpOworCQkJfQorCisJCXRoZU5ld0VsZW1lbnQgPSBuZXcgRWxlbWVudCh0eXBlLCBkZWZhdWx0QXR0cmlidXRlcyk7CisvLwkJU3lzdGVtLmVyci5wcmludGxuKCIlJSBHb3QgR0kgIiArIHRoZU5ld0VsZW1lbnQubmFtZSgpKTsKKwkJfQorCisJcHVibGljIHZvaWQgY2RzZWN0KGNoYXJbXSBidWZmLCBpbnQgb2Zmc2V0LCBpbnQgbGVuZ3RoKSB0aHJvd3MgU0FYRXhjZXB0aW9uIHsKKwkJdGhlTGV4aWNhbEhhbmRsZXIuc3RhcnRDREFUQSgpOworCQlwY2RhdGEoYnVmZiwgb2Zmc2V0LCBsZW5ndGgpOworCQl0aGVMZXhpY2FsSGFuZGxlci5lbmRDREFUQSgpOworCQl9CisJcHVibGljIHZvaWQgcGNkYXRhKGNoYXJbXSBidWZmLCBpbnQgb2Zmc2V0LCBpbnQgbGVuZ3RoKSB0aHJvd3MgU0FYRXhjZXB0aW9uIHsKKwkJaWYgKGxlbmd0aCA9PSAwKSByZXR1cm47CisJCWJvb2xlYW4gYWxsV2hpdGUgPSB0cnVlOworCQlmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisJCQlpZiAoIUNoYXJhY3Rlci5pc1doaXRlc3BhY2UoYnVmZltvZmZzZXQraV0pKSB7CisJCQkJYWxsV2hpdGUgPSBmYWxzZTsKKwkJCQl9CisJCQl9CisJCWlmIChhbGxXaGl0ZSAmJiAhdGhlU3RhY2suY2FuQ29udGFpbih0aGVQQ0RBVEEpKSB7CisJCQlpZiAoaWdub3JhYmxlV2hpdGVzcGFjZSkgeworCQkJCXRoZUNvbnRlbnRIYW5kbGVyLmlnbm9yYWJsZVdoaXRlc3BhY2UoYnVmZiwgb2Zmc2V0LCBsZW5ndGgpOworCQkJCX0KKwkJCX0KKwkJZWxzZSB7CisJCQlyZWN0aWZ5KHRoZVBDREFUQSk7CisJCQl0aGVDb250ZW50SGFuZGxlci5jaGFyYWN0ZXJzKGJ1ZmYsIG9mZnNldCwgbGVuZ3RoKTsKKwkJCX0KKwkJfQorCisJcHVibGljIHZvaWQgcGl0YXJnZXQoY2hhcltdIGJ1ZmYsIGludCBvZmZzZXQsIGludCBsZW5ndGgpIHRocm93cyBTQVhFeGNlcHRpb24geworCQlpZiAodGhlTmV3RWxlbWVudCAhPSBudWxsKSByZXR1cm47CisJCXRoZVBJVGFyZ2V0ID0gbWFrZU5hbWUoYnVmZiwgb2Zmc2V0LCBsZW5ndGgpLnJlcGxhY2UoJzonLCAnXycpOworCQl9CisKKwlwdWJsaWMgdm9pZCBwaShjaGFyW10gYnVmZiwgaW50IG9mZnNldCwgaW50IGxlbmd0aCkgdGhyb3dzIFNBWEV4Y2VwdGlvbiB7CisJCWlmICh0aGVOZXdFbGVtZW50ICE9IG51bGwgfHwgdGhlUElUYXJnZXQgPT0gbnVsbCkgcmV0dXJuOworCQlpZiAoInhtbCIuZXF1YWxzSWdub3JlQ2FzZSh0aGVQSVRhcmdldCkpIHJldHVybjsKKy8vCQlpZiAobGVuZ3RoID4gMCAmJiBidWZmW2xlbmd0aCAtIDFdID09ICc/JykgU3lzdGVtLmVyci5wcmludGxuKCIlJSBSZW1vdmluZyA/IGZyb20gUEkiKTsKKwkJaWYgKGxlbmd0aCA+IDAgJiYgYnVmZltsZW5ndGggLSAxXSA9PSAnPycpIGxlbmd0aC0tOwkvLyByZW1vdmUgdHJhaWxpbmcgPworCQl0aGVDb250ZW50SGFuZGxlci5wcm9jZXNzaW5nSW5zdHJ1Y3Rpb24odGhlUElUYXJnZXQsCisJCQluZXcgU3RyaW5nKGJ1ZmYsIG9mZnNldCwgbGVuZ3RoKSk7CisJCXRoZVBJVGFyZ2V0ID0gbnVsbDsKKwkJfQorCisJcHVibGljIHZvaWQgc3RhZ2MoY2hhcltdIGJ1ZmYsIGludCBvZmZzZXQsIGludCBsZW5ndGgpIHRocm93cyBTQVhFeGNlcHRpb24geworLy8JCVN5c3RlbS5lcnIucHJpbnRsbigiJSUgU3RhcnQtdGFnIik7CisJCWlmICh0aGVOZXdFbGVtZW50ID09IG51bGwpIHJldHVybjsKKwkJcmVjdGlmeSh0aGVOZXdFbGVtZW50KTsKKwkJaWYgKHRoZVN0YWNrLm1vZGVsKCkgPT0gU2NoZW1hLk1fRU1QVFkpIHsKKwkJCS8vIEZvcmNlIGFuIGltbWVkaWF0ZSBlbmQgdGFnCisJCQlldGFnX2Jhc2ljKGJ1ZmYsIG9mZnNldCwgbGVuZ3RoKTsKKwkJCX0KKwkJfQorCisJcHVibGljIHZvaWQgc3RhZ2UoY2hhcltdIGJ1ZmYsIGludCBvZmZzZXQsIGludCBsZW5ndGgpIHRocm93cyBTQVhFeGNlcHRpb24geworLy8JCVN5c3RlbS5lcnIucHJpbnRsbigiJSUgRW1wdHktdGFnIik7CisJCWlmICh0aGVOZXdFbGVtZW50ID09IG51bGwpIHJldHVybjsKKwkJcmVjdGlmeSh0aGVOZXdFbGVtZW50KTsKKwkJLy8gRm9yY2UgYW4gaW1tZWRpYXRlIGVuZCB0YWcKKwkJZXRhZ19iYXNpYyhidWZmLCBvZmZzZXQsIGxlbmd0aCk7CisJCX0KKworCS8vIENvbW1lbnQgYnVmZmVyIGlzIHR3aWNlIHRoZSBzaXplIG9mIHRoZSBvdXRwdXQgYnVmZmVyCisJcHJpdmF0ZSBjaGFyW10gdGhlQ29tbWVudEJ1ZmZlciA9IG5ldyBjaGFyWzIwMDBdOworCXB1YmxpYyB2b2lkIGNtbnQoY2hhcltdIGJ1ZmYsIGludCBvZmZzZXQsIGludCBsZW5ndGgpIHRocm93cyBTQVhFeGNlcHRpb24geworCQl0aGVMZXhpY2FsSGFuZGxlci5jb21tZW50KGJ1ZmYsIG9mZnNldCwgbGVuZ3RoKTsKKwkJfQorCisJLy8gUmVjdGlmeSB0aGUgc3RhY2ssIHB1c2hpbmcgYW5kIHBvcHBpbmcgYXMgbmVlZGVkCisJLy8gc28gdGhhdCB0aGUgYXJndW1lbnQgY2FuIGJlIHNhZmVseSBwdXNoZWQKKwlwcml2YXRlIHZvaWQgcmVjdGlmeShFbGVtZW50IGUpIHRocm93cyBTQVhFeGNlcHRpb24geworCQlFbGVtZW50IHNwOworCQl3aGlsZSAodHJ1ZSkgeworCQkJZm9yIChzcCA9IHRoZVN0YWNrOyBzcCAhPSBudWxsOyBzcCA9IHNwLm5leHQoKSkgeworCQkJCWlmIChzcC5jYW5Db250YWluKGUpKSBicmVhazsKKwkJCQl9CisJCQlpZiAoc3AgIT0gbnVsbCkgYnJlYWs7CisJCQlFbGVtZW50VHlwZSBwYXJlbnRUeXBlID0gZS5wYXJlbnQoKTsKKwkJCWlmIChwYXJlbnRUeXBlID09IG51bGwpIGJyZWFrOworCQkJRWxlbWVudCBwYXJlbnQgPSBuZXcgRWxlbWVudChwYXJlbnRUeXBlLCBkZWZhdWx0QXR0cmlidXRlcyk7CisvLwkJCVN5c3RlbS5lcnIucHJpbnRsbigiJSUgQXNjZW5kaW5nIGZyb20gIiArIGUubmFtZSgpICsgIiB0byAiICsgcGFyZW50Lm5hbWUoKSk7CisJCQlwYXJlbnQuc2V0TmV4dChlKTsKKwkJCWUgPSBwYXJlbnQ7CisJCQl9CisJCWlmIChzcCA9PSBudWxsKSByZXR1cm47CQkvLyBkb24ndCBrbm93IHdoYXQgdG8gZG8KKwkJd2hpbGUgKHRoZVN0YWNrICE9IHNwKSB7CisJCQlpZiAodGhlU3RhY2sgPT0gbnVsbCB8fCB0aGVTdGFjay5uZXh0KCkgPT0gbnVsbCB8fAorCQkJCXRoZVN0YWNrLm5leHQoKS5uZXh0KCkgPT0gbnVsbCkgYnJlYWs7CisJCQlyZXN0YXJ0YWJseVBvcCgpOworCQkJfQorCQl3aGlsZSAoZSAhPSBudWxsKSB7CisJCQlFbGVtZW50IG5leHRlID0gZS5uZXh0KCk7CisJCQlpZiAoIWUubmFtZSgpLmVxdWFscygiPHBjZGF0YT4iKSkgcHVzaChlKTsKKwkJCWUgPSBuZXh0ZTsKKwkJCXJlc3RhcnQoZSk7CisJCQl9CisJCXRoZU5ld0VsZW1lbnQgPSBudWxsOworCQl9CisKKwlwdWJsaWMgaW50IGdldEVudGl0eSgpIHsKKwkJcmV0dXJuIHRoZUVudGl0eTsKKwkJfQorCisJLy8gUmV0dXJuIHRoZSBhcmd1bWVudCBhcyBhIHZhbGlkIFhNTCBuYW1lCisJLy8gVGhpcyBubyBsb25nZXIgbG93ZXJjYXNlcyB0aGUgcmVzdWx0OiB3ZSBkZXBlbmQgb24gU2NoZW1hIHRvCisJLy8gY2Fub25pY2FsaXplIGNhc2UuCisJcHJpdmF0ZSBTdHJpbmcgbWFrZU5hbWUoY2hhcltdIGJ1ZmYsIGludCBvZmZzZXQsIGludCBsZW5ndGgpIHsKKwkJU3RyaW5nQnVmZmVyIGRzdCA9IG5ldyBTdHJpbmdCdWZmZXIobGVuZ3RoICsgMik7CisJCWJvb2xlYW4gc2VlbkNvbG9uID0gZmFsc2U7CisJCWJvb2xlYW4gc3RhcnQgPSB0cnVlOworLy8JCVN0cmluZyBzcmMgPSBuZXcgU3RyaW5nKGJ1ZmYsIG9mZnNldCwgbGVuZ3RoKTsgLy8gREVCVUcKKwkJZm9yICg7IGxlbmd0aC0tID4gMDsgb2Zmc2V0KyspIHsKKwkJCWNoYXIgY2ggPSBidWZmW29mZnNldF07CisJCQlpZiAoQ2hhcmFjdGVyLmlzTGV0dGVyKGNoKSB8fCBjaCA9PSAnXycpIHsKKwkJCQlzdGFydCA9IGZhbHNlOworCQkJCWRzdC5hcHBlbmQoY2gpOworCQkJCX0KKwkJCWVsc2UgaWYgKENoYXJhY3Rlci5pc0RpZ2l0KGNoKSB8fCBjaCA9PSAnLScgfHwgY2ggPT0gJy4nKSB7CisJCQkJaWYgKHN0YXJ0KSBkc3QuYXBwZW5kKCdfJyk7CisJCQkJc3RhcnQgPSBmYWxzZTsKKwkJCQlkc3QuYXBwZW5kKGNoKTsKKwkJCQl9CisJCQllbHNlIGlmIChjaCA9PSAnOicgJiYgIXNlZW5Db2xvbikgeworCQkJCXNlZW5Db2xvbiA9IHRydWU7CisJCQkJaWYgKHN0YXJ0KSBkc3QuYXBwZW5kKCdfJyk7CisJCQkJc3RhcnQgPSB0cnVlOworCQkJCWRzdC5hcHBlbmQodHJhbnNsYXRlQ29sb25zID8gJ18nIDogY2gpOworCQkJCX0KKwkJCX0KKwkJaW50IGRzdExlbmd0aCA9IGRzdC5sZW5ndGgoKTsKKwkJaWYgKGRzdExlbmd0aCA9PSAwIHx8IGRzdC5jaGFyQXQoZHN0TGVuZ3RoIC0gMSkgPT0gJzonKSBkc3QuYXBwZW5kKCdfJyk7CisvLwkJU3lzdGVtLmVyci5wcmludGxuKCJNYWRlIG5hbWUgXCIiICsgZHN0ICsgIlwiIGZyb20gXCIiICsgc3JjICsgIlwiIik7CisJCXJldHVybiBkc3QudG9TdHJpbmcoKS5pbnRlcm4oKTsKKwkJfQorCisJLy8gRGVmYXVsdCBMZXhpY2FsSGFuZGxlciBpbXBsZW1lbnRhdGlvbgorCisJcHVibGljIHZvaWQgY29tbWVudChjaGFyW10gY2gsIGludCBzdGFydCwgaW50IGxlbmd0aCkgdGhyb3dzIFNBWEV4Y2VwdGlvbiB7IH0KKwlwdWJsaWMgdm9pZCBlbmRDREFUQSgpIHRocm93cyBTQVhFeGNlcHRpb24geyB9CisJcHVibGljIHZvaWQgZW5kRFREKCkgdGhyb3dzIFNBWEV4Y2VwdGlvbiB7IH0KKwlwdWJsaWMgdm9pZCBlbmRFbnRpdHkoU3RyaW5nIG5hbWUpIHRocm93cyBTQVhFeGNlcHRpb24geyB9CisJcHVibGljIHZvaWQgc3RhcnRDREFUQSgpIHRocm93cyBTQVhFeGNlcHRpb24geyB9CisJcHVibGljIHZvaWQgc3RhcnREVEQoU3RyaW5nIG5hbWUsIFN0cmluZyBwdWJsaWNpZCwgU3RyaW5nIHN5c3RlbWlkKSB0aHJvd3MgU0FYRXhjZXB0aW9uIHsgfQorCXB1YmxpYyB2b2lkIHN0YXJ0RW50aXR5KFN0cmluZyBuYW1lKSB0aHJvd3MgU0FYRXhjZXB0aW9uIHsgfQorCisJfQpkaWZmIC0tZ2l0IGEvc3JjL2phdmEvb3JnL2NjaWwvY293YW4vdGFnc291cC9TY2FuSGFuZGxlci5qYXZhIGIvc3JjL2phdmEvb3JnL2NjaWwvY293YW4vdGFnc291cC9TY2FuSGFuZGxlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2ODU2OWEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvamF2YS9vcmcvY2NpbC9jb3dhbi90YWdzb3VwL1NjYW5IYW5kbGVyLmphdmEKQEAgLTAsMCArMSwxMTkgQEAKKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFRhZ1NvdXAgYW5kIGlzIENvcHlyaWdodCAyMDAyLTIwMDggYnkgSm9obiBDb3dhbi4KKy8vCisvLyBUYWdTb3VwIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwKKy8vIFZlcnNpb24gMi4wLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoaXMgbGljZW5zZSBhdAorLy8gaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIC4gIFlvdSBtYXkgYWxzbyBoYXZlCisvLyBhZGRpdGlvbmFsIGxlZ2FsIHJpZ2h0cyBub3QgZ3JhbnRlZCBieSB0aGlzIGxpY2Vuc2UuCisvLworLy8gVGFnU291cCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIHVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgVGFnU291cAorLy8gaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMKKy8vIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkOyBub3QgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eQorLy8gb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorLy8gCisvLyAKKy8vIFNjYW5uZXIgaGFuZGxlcgorCitwYWNrYWdlIG9yZy5jY2lsLmNvd2FuLnRhZ3NvdXA7CitpbXBvcnQgb3JnLnhtbC5zYXguU0FYRXhjZXB0aW9uOworCisvKioKK0FuIGludGVyZmFjZSB0aGF0IFNjYW5uZXJzIHVzZSB0byByZXBvcnQgZXZlbnRzIGluIHRoZSBpbnB1dCBzdHJlYW0uCisqKi8KKworcHVibGljIGludGVyZmFjZSBTY2FuSGFuZGxlciB7CisJLyoqCisJUmVwb3J0cyBhbiBhdHRyaWJ1dGUgbmFtZSB3aXRob3V0IGEgdmFsdWUuCisJKiovCisKKwlwdWJsaWMgdm9pZCBhZHVwKGNoYXJbXSBidWZmLCBpbnQgb2Zmc2V0LCBpbnQgbGVuZ3RoKSB0aHJvd3MgU0FYRXhjZXB0aW9uOworCisJLyoqCisJUmVwb3J0cyBhbiBhdHRyaWJ1dGUgbmFtZTsgYSB2YWx1ZSB3aWxsIGZvbGxvdy4KKwkqKi8KKworCXB1YmxpYyB2b2lkIGFuYW1lKGNoYXJbXSBidWZmLCBpbnQgb2Zmc2V0LCBpbnQgbGVuZ3RoKSB0aHJvd3MgU0FYRXhjZXB0aW9uOworCisJLyoqCisJUmVwb3J0cyBhbiBhdHRyaWJ1dGUgdmFsdWUuCisJKiovCisKKwlwdWJsaWMgdm9pZCBhdmFsKGNoYXJbXSBidWZmLCBpbnQgb2Zmc2V0LCBpbnQgbGVuZ3RoKSB0aHJvd3MgU0FYRXhjZXB0aW9uOworCisJLyoqCisJICAqIFJlcG9ydHMgdGhlIGNvbnRlbnQgb2YgYSBDREFUQSBzZWN0aW9uIChub3QgYSBDREFUQSBlbGVtZW50KQorCSAgKi8KKwlwdWJsaWMgdm9pZCBjZHNlY3QoY2hhcltdIGJ1ZmYsIGludCBvZmZzZXQsIGludCBsZW5ndGgpIHRocm93cyBTQVhFeGNlcHRpb247CisKKwkvKioKKyAgICAgICAgICogUmVwb3J0cyBhIDwhLi4uLj4gZGVjbGFyYXRpb24gLSB0eXBpY2FsbHkgYSBET0NUWVBFCisgICAgICAgICAqLworCisJcHVibGljIHZvaWQgZGVjbChjaGFyW10gYnVmZiwgaW50IG9mZnNldCwgaW50IGxlbmd0aCkgdGhyb3dzIFNBWEV4Y2VwdGlvbjsKKworCS8qKgorCVJlcG9ydHMgYW4gZW50aXR5IHJlZmVyZW5jZSBvciBjaGFyYWN0ZXIgcmVmZXJlbmNlLgorCSoqLworCisJcHVibGljIHZvaWQgZW50aXR5KGNoYXJbXSBidWZmLCBpbnQgb2Zmc2V0LCBpbnQgbGVuZ3RoKSB0aHJvd3MgU0FYRXhjZXB0aW9uOworCisJLyoqCisJUmVwb3J0cyBFT0YuCisJKiovCisKKwlwdWJsaWMgdm9pZCBlb2YoY2hhcltdIGJ1ZmYsIGludCBvZmZzZXQsIGludCBsZW5ndGgpIHRocm93cyBTQVhFeGNlcHRpb247CisKKwkvKioKKwlSZXBvcnRzIGFuIGVuZC10YWcuCisJKiovCisKKwlwdWJsaWMgdm9pZCBldGFnKGNoYXJbXSBidWZmLCBpbnQgb2Zmc2V0LCBpbnQgbGVuZ3RoKSB0aHJvd3MgU0FYRXhjZXB0aW9uOworCisJLyoqCisJUmVwb3J0cyB0aGUgZ2VuZXJhbCBpZGVudGlmaWVyIChlbGVtZW50IHR5cGUgbmFtZSkgb2YgYSBzdGFydC10YWcuCisJKiovCisKKwlwdWJsaWMgdm9pZCBnaShjaGFyW10gYnVmZiwgaW50IG9mZnNldCwgaW50IGxlbmd0aCkgdGhyb3dzIFNBWEV4Y2VwdGlvbjsKKworCS8qKgorCVJlcG9ydHMgY2hhcmFjdGVyIGNvbnRlbnQuCisJKiovCisKKwlwdWJsaWMgdm9pZCBwY2RhdGEoY2hhcltdIGJ1ZmYsIGludCBvZmZzZXQsIGludCBsZW5ndGgpIHRocm93cyBTQVhFeGNlcHRpb247CisKKwkvKioKKwlSZXBvcnRzIHRoZSBkYXRhIHBhcnQgb2YgYSBwcm9jZXNzaW5nIGluc3RydWN0aW9uLgorCSoqLworCisJcHVibGljIHZvaWQgcGkoY2hhcltdIGJ1ZmYsIGludCBvZmZzZXQsIGludCBsZW5ndGgpIHRocm93cyBTQVhFeGNlcHRpb247CisKKwkvKioKKwlSZXBvcnRzIHRoZSB0YXJnZXQgcGFydCBvZiBhIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24uCisJKiovCisKKwlwdWJsaWMgdm9pZCBwaXRhcmdldChjaGFyW10gYnVmZiwgaW50IG9mZnNldCwgaW50IGxlbmd0aCkgdGhyb3dzIFNBWEV4Y2VwdGlvbjsKKworCS8qKgorCVJlcG9ydHMgdGhlIGNsb3NlIG9mIGEgc3RhcnQtdGFnLgorCSoqLworCisJcHVibGljIHZvaWQgc3RhZ2MoY2hhcltdIGJ1ZmYsIGludCBvZmZzZXQsIGludCBsZW5ndGgpIHRocm93cyBTQVhFeGNlcHRpb247CisKKwkvKioKKwlSZXBvcnRzIHRoZSBjbG9zZSBvZiBhbiBlbXB0eS10YWcuCisJKiovCisKKwlwdWJsaWMgdm9pZCBzdGFnZShjaGFyW10gYnVmZiwgaW50IG9mZnNldCwgaW50IGxlbmd0aCkgdGhyb3dzIFNBWEV4Y2VwdGlvbjsKKworCS8qKgorCVJlcG9ydHMgYSBjb21tZW50LgorCSoqLworCisJcHVibGljIHZvaWQgY21udChjaGFyW10gYnVmZiwgaW50IG9mZnNldCwgaW50IGxlbmd0aCkgdGhyb3dzIFNBWEV4Y2VwdGlvbjsKKworCS8qKgorCVJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBsYXN0IGVudGl0eSBvciBjaGFyYWN0ZXIgcmVmZXJlbmNlIHJlcG9ydGVkLgorCSoqLworCisJcHVibGljIGludCBnZXRFbnRpdHkoKTsKKwl9CmRpZmYgLS1naXQgYS9zcmMvamF2YS9vcmcvY2NpbC9jb3dhbi90YWdzb3VwL1NjYW5uZXIuamF2YSBiL3NyYy9qYXZhL29yZy9jY2lsL2Nvd2FuL3RhZ3NvdXAvU2Nhbm5lci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0YzhiOTcKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvamF2YS9vcmcvY2NpbC9jb3dhbi90YWdzb3VwL1NjYW5uZXIuamF2YQpAQCAtMCwwICsxLDUwIEBACisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiBUYWdTb3VwIGFuZCBpcyBDb3B5cmlnaHQgMjAwMi0yMDA4IGJ5IEpvaG4gQ293YW4uCisvLworLy8gVGFnU291cCBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsCisvLyBWZXJzaW9uIDIuMC4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGlzIGxpY2Vuc2UgYXQKKy8vIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAuICBZb3UgbWF5IGFsc28gaGF2ZQorLy8gYWRkaXRpb25hbCBsZWdhbCByaWdodHMgbm90IGdyYW50ZWQgYnkgdGhpcyBsaWNlbnNlLgorLy8KKy8vIFRhZ1NvdXAgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyB1bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIFRhZ1NvdXAKKy8vIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TCisvLyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZDsgbm90IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkKKy8vIG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKy8vIAorLy8gCisvLyBTY2FubmVyCisKK3BhY2thZ2Ugb3JnLmNjaWwuY293YW4udGFnc291cDsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uUmVhZGVyOworaW1wb3J0IG9yZy54bWwuc2F4LlNBWEV4Y2VwdGlvbjsKKworLyoqCitBbiBpbnRlcmZhY2UgYWxsb3dpbmcgUGFyc2VyIHRvIGludm9rZSBzY2FubmVycy4KKyoqLworCitwdWJsaWMgaW50ZXJmYWNlIFNjYW5uZXIgeworCisJLyoqCisJSW52b2tlIGEgc2Nhbm5lci4KKwlAcGFyYW0gciBBIHNvdXJjZSBvZiBjaGFyYWN0ZXJzIHRvIHNjYW4KKwlAcGFyYW0gaCBBIFNjYW5IYW5kbGVyIHRvIHJlcG9ydCBldmVudHMgdG8KKwkqKi8KKworCXB1YmxpYyB2b2lkIHNjYW4oUmVhZGVyIHIsIFNjYW5IYW5kbGVyIGgpIHRocm93cyBJT0V4Y2VwdGlvbiwgU0FYRXhjZXB0aW9uOworCisJLyoqCisJUmVzZXQgdGhlIGVtYmVkZGVkIGxvY2F0b3IuCisJQHBhcmFtIHB1YmxpY2lkIFRoZSBwdWJsaWNpZCBvZiB0aGUgc291cmNlCisJQHBhcmFtIHN5c3RlbWlkIFRoZSBzeXN0ZW1pZCBvZiB0aGUgc291cmNlCisJKiovCisKKwlwdWJsaWMgdm9pZCByZXNldERvY3VtZW50TG9jYXRvcihTdHJpbmcgcHVibGljaWQsIFN0cmluZyBzeXN0ZW1pZCk7CisKKwkvKioKKwlTaWduYWwgdG8gdGhlIHNjYW5uZXIgdG8gc3RhcnQgQ0RBVEEgY29udGVudCBtb2RlLgorCSoqLworCisJcHVibGljIHZvaWQgc3RhcnRDREFUQSgpOworCisJfQpkaWZmIC0tZ2l0IGEvc3JjL2phdmEvb3JnL2NjaWwvY293YW4vdGFnc291cC9TY2hlbWEuamF2YSBiL3NyYy9qYXZhL29yZy9jY2lsL2Nvd2FuL3RhZ3NvdXAvU2NoZW1hLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQ5OWEyMwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9qYXZhL29yZy9jY2lsL2Nvd2FuL3RhZ3NvdXAvU2NoZW1hLmphdmEKQEAgLTAsMCArMSwxNzAgQEAKKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFRhZ1NvdXAgYW5kIGlzIENvcHlyaWdodCAyMDAyLTIwMDggYnkgSm9obiBDb3dhbi4KKy8vCisvLyBUYWdTb3VwIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwKKy8vIFZlcnNpb24gMi4wLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoaXMgbGljZW5zZSBhdAorLy8gaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIC4gIFlvdSBtYXkgYWxzbyBoYXZlCisvLyBhZGRpdGlvbmFsIGxlZ2FsIHJpZ2h0cyBub3QgZ3JhbnRlZCBieSB0aGlzIGxpY2Vuc2UuCisvLworLy8gVGFnU291cCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIHVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgVGFnU291cAorLy8gaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMKKy8vIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkOyBub3QgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eQorLy8gb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorLy8gCisvLyAKKy8vIE1vZGVsIG9mIGRvY3VtZW50CisKK3BhY2thZ2Ugb3JnLmNjaWwuY293YW4udGFnc291cDsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKKworLyoqCitBYnN0cmFjdCBjbGFzcyByZXByZXNlbnRpbmcgYSBUU1NMIHNjaGVtYS4KK0FjdHVhbCBUU1NMIHNjaGVtYXMgYXJlIGNvbXBpbGVkIGludG8gY29uY3JldGUgc3ViY2xhc3NlcyBvZiB0aGlzIGNsYXNzLgorKiovCisKK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBTY2hlbWEgeworCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTV9BTlkgPSAweEZGRkZGRkZGOworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1fRU1QVFkgPSAwOworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1fUENEQVRBID0gMSA8PCAzMDsKKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNX1JPT1QgPSAxIDw8IDMxOworCisKKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGX1JFU1RBUlQgPSAxOworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZfQ0RBVEEgPSAyOworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZfTk9GT1JDRSA9IDQ7CisKKwlwcml2YXRlIEhhc2hNYXAgdGhlRW50aXRpZXMgPSAKKwkJbmV3IEhhc2hNYXAoKTsJCS8vIFN0cmluZyAtPiBDaGFyYWN0ZXIKKwlwcml2YXRlIEhhc2hNYXAgdGhlRWxlbWVudFR5cGVzID0gCisJCW5ldyBIYXNoTWFwKCk7CQkvLyBTdHJpbmcgLT4gRWxlbWVudFR5cGUKKworCXByaXZhdGUgU3RyaW5nIHRoZVVSSSA9ICIiOworCXByaXZhdGUgU3RyaW5nIHRoZVByZWZpeCA9ICIiOworCXByaXZhdGUgRWxlbWVudFR5cGUgdGhlUm9vdCA9IG51bGw7CisKKwkvKioKKwlBZGQgb3IgcmVwbGFjZSBhbiBlbGVtZW50IHR5cGUgZm9yIHRoaXMgc2NoZW1hLgorCUBwYXJhbSBuYW1lIE5hbWUgKFFuYW1lKSBvZiB0aGUgZWxlbWVudAorCUBwYXJhbSBtb2RlbCBNb2RlbHMgb2YgdGhlIGVsZW1lbnQncyBjb250ZW50IGFzIGEgdmVjdG9yIG9mIGJpdHMKKwlAcGFyYW0gbWVtYmVyT2YgTW9kZWxzIHRoZSBlbGVtZW50IGlzIGEgbWVtYmVyIG9mIGFzIGEgdmVjdG9yIG9mIGJpdHMKKwlAcGFyYW0gZmxhZ3MgRmxhZ3MgZm9yIHRoZSBlbGVtZW50CisJKiovCisKKwlwdWJsaWMgdm9pZCBlbGVtZW50VHlwZShTdHJpbmcgbmFtZSwgaW50IG1vZGVsLCBpbnQgbWVtYmVyT2YsIGludCBmbGFncykgeworCQlFbGVtZW50VHlwZSBlID0gbmV3IEVsZW1lbnRUeXBlKG5hbWUsIG1vZGVsLCBtZW1iZXJPZiwgZmxhZ3MsIHRoaXMpOworCQl0aGVFbGVtZW50VHlwZXMucHV0KG5hbWUudG9Mb3dlckNhc2UoKSwgZSk7CisJCWlmIChtZW1iZXJPZiA9PSBNX1JPT1QpIHRoZVJvb3QgPSBlOworCQl9CisKKwkvKioKKwlHZXQgdGhlIHJvb3QgZWxlbWVudCBvZiB0aGlzIHNjaGVtYQorCSoqLworCisJcHVibGljIEVsZW1lbnRUeXBlIHJvb3RFbGVtZW50VHlwZSgpIHsKKwkJcmV0dXJuIHRoZVJvb3Q7CisJCX0KKworCS8qKgorCUFkZCBvciByZXBsYWNlIGEgZGVmYXVsdCBhdHRyaWJ1dGUgZm9yIGFuIGVsZW1lbnQgdHlwZSBpbiB0aGlzIHNjaGVtYS4KKwlAcGFyYW0gZWxlbU5hbWUgTmFtZSAoUW5hbWUpIG9mIHRoZSBlbGVtZW50IHR5cGUKKwlAcGFyYW0gYXR0ck5hbWUgTmFtZSAoUW5hbWUpIG9mIHRoZSBhdHRyaWJ1dGUKKwlAcGFyYW0gdHlwZSBUeXBlIG9mIHRoZSBhdHRyaWJ1dGUKKwlAcGFyYW0gdmFsdWUgRGVmYXVsdCB2YWx1ZSBvZiB0aGUgYXR0cmlidXRlOyBudWxsIGlmIG5vIGRlZmF1bHQKKwkqKi8KKworCXB1YmxpYyB2b2lkIGF0dHJpYnV0ZShTdHJpbmcgZWxlbU5hbWUsIFN0cmluZyBhdHRyTmFtZSwKKwkJCQlTdHJpbmcgdHlwZSwgU3RyaW5nIHZhbHVlKSB7CisJCUVsZW1lbnRUeXBlIGUgPSBnZXRFbGVtZW50VHlwZShlbGVtTmFtZSk7CisJCWlmIChlID09IG51bGwpIHsKKwkJCXRocm93IG5ldyBFcnJvcigiQXR0cmlidXRlICIgKyBhdHRyTmFtZSArCisJCQkJIiBzcGVjaWZpZWQgZm9yIHVua25vd24gZWxlbWVudCB0eXBlICIgKworCQkJCWVsZW1OYW1lKTsKKwkJCX0KKwkJZS5zZXRBdHRyaWJ1dGUoYXR0ck5hbWUsIHR5cGUsIHZhbHVlKTsKKwkJfQorCisJLyoqCisJU3BlY2lmeSBuYXR1cmFsIHBhcmVudCBvZiBhbiBlbGVtZW50IGluIHRoaXMgc2NoZW1hLgorCUBwYXJhbSBuYW1lIE5hbWUgb2YgdGhlIGNoaWxkIGVsZW1lbnQKKwlAcGFyYW0gcGFyZW50TmFtZSBOYW1lIG9mIHRoZSBwYXJlbnQgZWxlbWVudAorCSoqLworCisJcHVibGljIHZvaWQgcGFyZW50KFN0cmluZyBuYW1lLCBTdHJpbmcgcGFyZW50TmFtZSkgeworCQlFbGVtZW50VHlwZSBjaGlsZCA9IGdldEVsZW1lbnRUeXBlKG5hbWUpOworCQlFbGVtZW50VHlwZSBwYXJlbnQgPSBnZXRFbGVtZW50VHlwZShwYXJlbnROYW1lKTsKKwkJaWYgKGNoaWxkID09IG51bGwpIHsKKwkJCXRocm93IG5ldyBFcnJvcigiTm8gY2hpbGQgIiArIG5hbWUgKyAiIGZvciBwYXJlbnQgIiArIHBhcmVudE5hbWUpOworCQkJfQorCQlpZiAocGFyZW50ID09IG51bGwpIHsKKwkJCXRocm93IG5ldyBFcnJvcigiTm8gcGFyZW50ICIgKyBwYXJlbnROYW1lICsgIiBmb3IgY2hpbGQgIiArIG5hbWUpOworCQkJfQorCQljaGlsZC5zZXRQYXJlbnQocGFyZW50KTsKKwkJfQorCisJLyoqCisJQWRkIHRvIG9yIHJlcGxhY2UgYSBjaGFyYWN0ZXIgZW50aXR5IGluIHRoaXMgc2NoZW1hLgorCUBwYXJhbSBuYW1lIE5hbWUgb2YgdGhlIGVudGl0eQorCUBwYXJhbSB2YWx1ZSBWYWx1ZSBvZiB0aGUgZW50aXR5CisJKiovCisKKwlwdWJsaWMgdm9pZCBlbnRpdHkoU3RyaW5nIG5hbWUsIGludCB2YWx1ZSkgeworCQl0aGVFbnRpdGllcy5wdXQobmFtZSwgbmV3IEludGVnZXIodmFsdWUpKTsKKwkJfQorCisJLyoqCisJR2V0IGFuIEVsZW1lbnRUeXBlIGJ5IG5hbWUuCisJQHBhcmFtIG5hbWUgTmFtZSAoUW5hbWUpIG9mIHRoZSBlbGVtZW50IHR5cGUKKwlAcmV0dXJuIFRoZSBjb3JyZXNwb25kaW5nIEVsZW1lbnRUeXBlCisJKiovCisKKwlwdWJsaWMgRWxlbWVudFR5cGUgZ2V0RWxlbWVudFR5cGUoU3RyaW5nIG5hbWUpIHsKKwkJcmV0dXJuIChFbGVtZW50VHlwZSkodGhlRWxlbWVudFR5cGVzLmdldChuYW1lLnRvTG93ZXJDYXNlKCkpKTsKKwkJfQorCisJLyoqCisJR2V0IGFuIGVudGl0eSB2YWx1ZSBieSBuYW1lLgorCUBwYXJhbSBuYW1lIE5hbWUgb2YgdGhlIGVudGl0eQorCUByZXR1cm4gVGhlIGNvcnJlc3BvbmRpbmcgY2hhcmFjdGVyLCBvciAwIGlmIG5vbmUKKwkqKi8KKworCXB1YmxpYyBpbnQgZ2V0RW50aXR5KFN0cmluZyBuYW1lKSB7CisvLwkJU3lzdGVtLmVyci5wcmludGxuKCIlJSBMb29raW5nIHVwIGVudGl0eSAiICsgbmFtZSk7CisJCUludGVnZXIgY2ggPSAoSW50ZWdlcil0aGVFbnRpdGllcy5nZXQobmFtZSk7CisJCWlmIChjaCA9PSBudWxsKSByZXR1cm4gMDsKKwkJcmV0dXJuIGNoLmludFZhbHVlKCk7CisJCX0KKworCS8qKgorCVJldHVybiB0aGUgVVJJIChuYW1lc3BhY2UgbmFtZSkgb2YgdGhpcyBzY2hlbWEuCisJKiovCisKKwlwdWJsaWMgU3RyaW5nIGdldFVSSSgpIHsKKwkJcmV0dXJuIHRoZVVSSTsKKwkJfQorCisJLyoqCisJUmV0dXJuIHRoZSBwcmVmaXggb2YgdGhpcyBzY2hlbWEuCisJKiovCisKKwlwdWJsaWMgU3RyaW5nIGdldFByZWZpeCgpIHsKKwkJcmV0dXJuIHRoZVByZWZpeDsKKwkJfQorCisJLyoqCisJQ2hhbmdlIHRoZSBVUkkgKG5hbWVzcGFjZSBuYW1lKSBvZiB0aGlzIHNjaGVtYS4KKwkqKi8KKworCXB1YmxpYyB2b2lkIHNldFVSSShTdHJpbmcgdXJpKSB7CisJCXRoZVVSSSA9IHVyaTsKKwkJfQorCisJLyoqCisJQ2hhbmdlIHRoZSBwcmVmaXggb2YgdGhpcyBzY2hlbWEuCisJKiovCisKKwlwdWJsaWMgdm9pZCBzZXRQcmVmaXgoU3RyaW5nIHByZWZpeCkgeworCQl0aGVQcmVmaXggPSBwcmVmaXg7CisJCX0KKworCX0KZGlmZiAtLWdpdCBhL3NyYy9qYXZhL29yZy9jY2lsL2Nvd2FuL3RhZ3NvdXAvWE1MV3JpdGVyLmphdmEgYi9zcmMvamF2YS9vcmcvY2NpbC9jb3dhbi90YWdzb3VwL1hNTFdyaXRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkYzdhMDMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvamF2YS9vcmcvY2NpbC9jb3dhbi90YWdzb3VwL1hNTFdyaXRlci5qYXZhCkBAIC0wLDAgKzEsMTQzNSBAQAorLy8gWE1MV3JpdGVyLmphdmEgLSBzZXJpYWxpemUgYW4gWE1MIGRvY3VtZW50LgorLy8gV3JpdHRlbiBieSBEYXZpZCBNZWdnaW5zb24sIGRhdmlkQG1lZ2dpbnNvbi5jb20KKy8vIGFuZCBwbGFjZWQgYnkgaGltIGludG8gdGhlIHB1YmxpYyBkb21haW4uCisvLyBFeHRlbnNpdmVseSBtb2RpZmllZCBieSBKb2huIENvd2FuIGZvciBUYWdTb3VwLgorLy8gVGFnU291cCBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsCisvLyBWZXJzaW9uIDIuMC4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGlzIGxpY2Vuc2UgYXQKKy8vIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAuICBZb3UgbWF5IGFsc28gaGF2ZQorLy8gYWRkaXRpb25hbCBsZWdhbCByaWdodHMgbm90IGdyYW50ZWQgYnkgdGhpcyBsaWNlbnNlLgorLy8KKy8vIFRhZ1NvdXAgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyB1bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIFRhZ1NvdXAKKy8vIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TCisvLyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZDsgbm90IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkKKy8vIG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworcGFja2FnZSBvcmcuY2NpbC5jb3dhbi50YWdzb3VwOworCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbVdyaXRlcjsKK2ltcG9ydCBqYXZhLmlvLldyaXRlcjsKK2ltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247CitpbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKK2ltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKKworaW1wb3J0IG9yZy54bWwuc2F4LkF0dHJpYnV0ZXM7CitpbXBvcnQgb3JnLnhtbC5zYXguU0FYRXhjZXB0aW9uOworaW1wb3J0IG9yZy54bWwuc2F4LlhNTFJlYWRlcjsKK2ltcG9ydCBvcmcueG1sLnNheC5oZWxwZXJzLkF0dHJpYnV0ZXNJbXBsOworaW1wb3J0IG9yZy54bWwuc2F4LmhlbHBlcnMuTmFtZXNwYWNlU3VwcG9ydDsKK2ltcG9ydCBvcmcueG1sLnNheC5oZWxwZXJzLlhNTEZpbHRlckltcGw7CitpbXBvcnQgb3JnLnhtbC5zYXguZXh0LkxleGljYWxIYW5kbGVyOworCisKKy8qKgorICogRmlsdGVyIHRvIHdyaXRlIGFuIFhNTCBkb2N1bWVudCBmcm9tIGEgU0FYIGV2ZW50IHN0cmVhbS4KKyAqCisgKiA8cD5UaGlzIGNsYXNzIGNhbiBiZSB1c2VkIGJ5IGl0c2VsZiBvciBhcyBwYXJ0IG9mIGEgU0FYIGV2ZW50CisgKiBzdHJlYW06IGl0IHRha2VzIGFzIGlucHV0IGEgc2VyaWVzIG9mIFNBWDIgQ29udGVudEhhbmRsZXIKKyAqIGV2ZW50cyBhbmQgdXNlcyB0aGUgaW5mb3JtYXRpb24gaW4gdGhvc2UgZXZlbnRzIHRvIHdyaXRlCisgKiBhbiBYTUwgZG9jdW1lbnQuICBTaW5jZSB0aGlzIGNsYXNzIGlzIGEgZmlsdGVyLCBpdCBjYW4gYWxzbworICogcGFzcyB0aGUgZXZlbnRzIG9uIGRvd24gYSBmaWx0ZXIgY2hhaW4gZm9yIGZ1cnRoZXIgcHJvY2Vzc2luZworICogKHlvdSBjYW4gdXNlIHRoZSBYTUxXcml0ZXIgdG8gdGFrZSBhIHNuYXBzaG90IG9mIHRoZSBjdXJyZW50CisgKiBzdGF0ZSBhdCBhbnkgcG9pbnQgaW4gYSBmaWx0ZXIgY2hhaW4pLCBhbmQgaXQgY2FuIGJlCisgKiB1c2VkIGRpcmVjdGx5IGFzIGEgQ29udGVudEhhbmRsZXIgZm9yIGEgU0FYMiBYTUxSZWFkZXIuPC9wPgorICoKKyAqIDxwPlRoZSBjbGllbnQgY3JlYXRlcyBhIGRvY3VtZW50IGJ5IGludm9raW5nIHRoZSBtZXRob2RzIGZvciAKKyAqIHN0YW5kYXJkIFNBWDIgZXZlbnRzLCBhbHdheXMgYmVnaW5uaW5nIHdpdGggdGhlCisgKiB7QGxpbmsgI3N0YXJ0RG9jdW1lbnQgc3RhcnREb2N1bWVudH0gbWV0aG9kIGFuZCBlbmRpbmcgd2l0aAorICogdGhlIHtAbGluayAjZW5kRG9jdW1lbnQgZW5kRG9jdW1lbnR9IG1ldGhvZC4gIFRoZXJlIGFyZSBjb252ZW5pZW5jZQorICogbWV0aG9kcyBwcm92aWRlZCBzbyB0aGF0IGNsaWVudHMgdG8gbm90IGhhdmUgdG8gY3JlYXRlIGVtcHR5CisgKiBhdHRyaWJ1dGUgbGlzdHMgb3IgcHJvdmlkZSBlbXB0eSBzdHJpbmdzIGFzIHBhcmFtZXRlcnM7IGZvcgorICogZXhhbXBsZSwgdGhlIG1ldGhvZCBpbnZvY2F0aW9uPC9wPgorICoKKyAqIDxwcmU+CisgKiB3LnN0YXJ0RWxlbWVudCgiZm9vIik7CisgKiA8L3ByZT4KKyAqCisgKiA8cD5pcyBlcXVpdmFsZW50IHRvIHRoZSByZWd1bGFyIFNBWDIgQ29udGVudEhhbmRsZXIgbWV0aG9kPC9wPgorICoKKyAqIDxwcmU+CisgKiB3LnN0YXJ0RWxlbWVudCgiIiwgImZvbyIsICIiLCBuZXcgQXR0cmlidXRlc0ltcGwoKSk7CisgKiA8L3ByZT4KKyAqCisgKiA8cD5FeGNlcHQgdGhhdCBpdCBpcyBtb3JlIGVmZmljaWVudCBiZWNhdXNlIGl0IGRvZXMgbm90IGFsbG9jYXRlCisgKiBhIG5ldyBlbXB0eSBhdHRyaWJ1dGUgbGlzdCBlYWNoIHRpbWUuICBUaGUgZm9sbG93aW5nIGNvZGUgd2lsbCBzZW5kIAorICogYSBzaW1wbGUgWE1MIGRvY3VtZW50IHRvIHN0YW5kYXJkIG91dHB1dDo8L3A+CisgKgorICogPHByZT4KKyAqIFhNTFdyaXRlciB3ID0gbmV3IFhNTFdyaXRlcigpOworICoKKyAqIHcuc3RhcnREb2N1bWVudCgpOworICogdy5zdGFydEVsZW1lbnQoImdyZWV0aW5nIik7CisgKiB3LmNoYXJhY3RlcnMoIkhlbGxvLCB3b3JsZCEiKTsKKyAqIHcuZW5kRWxlbWVudCgiZ3JlZXRpbmciKTsKKyAqIHcuZW5kRG9jdW1lbnQoKTsKKyAqIDwvcHJlPgorICoKKyAqIDxwPlRoZSByZXN1bHRpbmcgZG9jdW1lbnQgd2lsbCBsb29rIGxpa2UgdGhpczo8L3A+CisgKgorICogPHByZT4KKyAqICZsdDs/eG1sIHZlcnNpb249IjEuMCIgc3RhbmRhbG9uZT0ieWVzIj8+CisgKgorICogJmx0O2dyZWV0aW5nPkhlbGxvLCB3b3JsZCEmbHQ7L2dyZWV0aW5nPgorICogPC9wcmU+CisgKgorICogPHA+SW4gZmFjdCwgdGhlcmUgaXMgYW4gZXZlbiBzaW1wbGVyIGNvbnZlbmllbmNlIG1ldGhvZCwKKyAqIDx2YXI+ZGF0YUVsZW1lbnQ8L3Zhcj4sIGRlc2lnbmVkIGZvciB3cml0aW5nIGVsZW1lbnRzIHRoYXQKKyAqIGNvbnRhaW4gb25seSBjaGFyYWN0ZXIgZGF0YSwgc28gdGhlIGNvZGUgdG8gZ2VuZXJhdGUgdGhlCisgKiBkb2N1bWVudCBjb3VsZCBiZSBzaG9ydGVuZWQgdG88L3A+CisgKgorICogPHByZT4KKyAqIFhNTFdyaXRlciB3ID0gbmV3IFhNTFdyaXRlcigpOworICoKKyAqIHcuc3RhcnREb2N1bWVudCgpOworICogdy5kYXRhRWxlbWVudCgiZ3JlZXRpbmciLCAiSGVsbG8sIHdvcmxkISIpOworICogdy5lbmREb2N1bWVudCgpOworICogPC9wcmU+CisgKgorICogPGgyPldoaXRlc3BhY2U8L2gyPgorICoKKyAqIDxwPkFjY29yZGluZyB0byB0aGUgWE1MIFJlY29tbWVuZGF0aW9uLCA8ZW0+YWxsPC9lbT4gd2hpdGVzcGFjZQorICogaW4gYW4gWE1MIGRvY3VtZW50IGlzIHBvdGVudGlhbGx5IHNpZ25pZmljYW50IHRvIGFuIGFwcGxpY2F0aW9uLAorICogc28gdGhpcyBjbGFzcyBuZXZlciBhZGRzIG5ld2xpbmVzIG9yIGluZGVudGF0aW9uLiAgSWYgeW91CisgKiBpbnNlcnQgdGhyZWUgZWxlbWVudHMgaW4gYSByb3csIGFzIGluPC9wPgorICoKKyAqIDxwcmU+CisgKiB3LmRhdGFFbGVtZW50KCJpdGVtIiwgIjEiKTsKKyAqIHcuZGF0YUVsZW1lbnQoIml0ZW0iLCAiMiIpOworICogdy5kYXRhRWxlbWVudCgiaXRlbSIsICIzIik7CisgKiA8L3ByZT4KKyAqCisgKiA8cD55b3Ugd2lsbCBlbmQgdXAgd2l0aDwvcD4KKyAqCisgKiA8cHJlPgorICogJmx0O2l0ZW0+MSZsdDsvaXRlbT4mbHQ7aXRlbT4zJmx0Oy9pdGVtPiZsdDtpdGVtPjMmbHQ7L2l0ZW0+CisgKiA8L3ByZT4KKyAqCisgKiA8cD5Zb3UgbmVlZCB0byBpbnZva2Ugb25lIG9mIHRoZSA8dmFyPmNoYXJhY3RlcnM8L3Zhcj4gbWV0aG9kcworICogZXhwbGljaXRseSB0byBhZGQgbmV3bGluZXMgb3IgaW5kZW50YXRpb24uICBBbHRlcm5hdGl2ZWx5LCB5b3UKKyAqIGNhbiB1c2Uge0BsaW5rIGNvbS5tZWdnaW5zb24uc2F4LkRhdGFXcml0ZXIgRGF0YVdyaXRlcn0sIHdoaWNoCisgKiBpcyBkZXJpdmVkIGZyb20gdGhpcyBjbGFzcyAtLSBpdCBpcyBvcHRpbWl6ZWQgZm9yIHdyaXRpbmcKKyAqIHB1cmVseSBkYXRhLW9yaWVudGVkIChvciBmaWVsZC1vcmllbnRlZCkgWE1MLCBhbmQgZG9lcyBhdXRvbWF0aWMgCisgKiBsaW5lYnJlYWtzIGFuZCBpbmRlbnRhdGlvbiAoYnV0IGRvZXMgbm90IHN1cHBvcnQgbWl4ZWQgY29udGVudCAKKyAqIHByb3Blcmx5KS48L3A+CisgKgorICoKKyAqIDxoMj5OYW1lc3BhY2UgU3VwcG9ydDwvaDI+CisgKgorICogPHA+VGhlIHdyaXRlciBjb250YWlucyBleHRlbnNpdmUgc3VwcG9ydCBmb3IgWE1MIE5hbWVzcGFjZXMsIHNvIHRoYXQKKyAqIGEgY2xpZW50IGFwcGxpY2F0aW9uIGRvZXMgbm90IGhhdmUgdG8ga2VlcCB0cmFjayBvZiBwcmVmaXhlcyBhbmQKKyAqIHN1cHBseSA8dmFyPnhtbG5zPC92YXI+IGF0dHJpYnV0ZXMuICBCeSBkZWZhdWx0LCB0aGUgWE1MIHdyaXRlciB3aWxsIAorICogZ2VuZXJhdGUgTmFtZXNwYWNlIGRlY2xhcmF0aW9ucyBpbiB0aGUgZm9ybSBfTlMxLCBfTlMyLCBldGMuLCB3aGVyZXZlciAKKyAqIHRoZXkgYXJlIG5lZWRlZCwgYXMgaW4gdGhlIGZvbGxvd2luZyBleGFtcGxlOjwvcD4KKyAqCisgKiA8cHJlPgorICogdy5zdGFydERvY3VtZW50KCk7CisgKiB3LmVtcHR5RWxlbWVudCgiaHR0cDovL3d3dy5mb28uY29tL25zLyIsICJmb28iKTsKKyAqIHcuZW5kRG9jdW1lbnQoKTsKKyAqIDwvcHJlPgorICoKKyAqIDxwPlRoZSByZXN1bHRpbmcgZG9jdW1lbnQgd2lsbCBsb29rIGxpa2UgdGhpczo8L3A+CisgKgorICogPHByZT4KKyAqICZsdDs/eG1sIHZlcnNpb249IjEuMCIgc3RhbmRhbG9uZT0ieWVzIj8+CisgKgorICogJmx0O19OUzE6Zm9vIHhtbG5zOl9OUzE9Imh0dHA6Ly93d3cuZm9vLmNvbS9ucy8iLz4KKyAqIDwvcHJlPgorICoKKyAqIDxwPkluIG1hbnkgY2FzZXMsIGRvY3VtZW50IGF1dGhvcnMgd2lsbCBwcmVmZXIgdG8gY2hvb3NlIHRoZWlyCisgKiBvd24gcHJlZml4ZXMgcmF0aGVyIHRoYW4gdXNpbmcgdGhlICh1Z2x5KSBkZWZhdWx0IG5hbWVzLiAgVGhlCisgKiBYTUwgd3JpdGVyIGFsbG93cyB0d28gbWV0aG9kcyBmb3Igc2VsZWN0aW5nIHByZWZpeGVzOjwvcD4KKyAqCisgKiA8b2w+CisgKiA8bGk+dGhlIHF1YWxpZmllZCBuYW1lPC9saT4KKyAqIDxsaT50aGUge0BsaW5rICNzZXRQcmVmaXggc2V0UHJlZml4fSBtZXRob2QuPC9saT4KKyAqIDwvb2w+CisgKgorICogPHA+V2hlbmV2ZXIgdGhlIFhNTCB3cml0ZXIgZmluZHMgYSBuZXcgTmFtZXNwYWNlIFVSSSwgaXQgY2hlY2tzCisgKiB0byBzZWUgaWYgYSBxdWFsaWZpZWQgKHByZWZpeGVkKSBuYW1lIGlzIGFsc28gYXZhaWxhYmxlOyBpZiBzbworICogaXQgYXR0ZW1wdHMgdG8gdXNlIHRoZSBuYW1lJ3MgcHJlZml4IChhcyBsb25nIGFzIHRoZSBwcmVmaXggaXMKKyAqIG5vdCBhbHJlYWR5IGluIHVzZSBmb3IgYW5vdGhlciBOYW1lc3BhY2UgVVJJKS48L3A+CisgKgorICogPHA+QmVmb3JlIHdyaXRpbmcgYSBkb2N1bWVudCwgdGhlIGNsaWVudCBjYW4gYWxzbyBwcmUtbWFwIGEgcHJlZml4CisgKiB0byBhIE5hbWVzcGFjZSBVUkkgd2l0aCB0aGUgc2V0UHJlZml4IG1ldGhvZDo8L3A+CisgKgorICogPHByZT4KKyAqIHcuc2V0UHJlZml4KCJodHRwOi8vd3d3LmZvby5jb20vbnMvIiwgImZvbyIpOworICogdy5zdGFydERvY3VtZW50KCk7CisgKiB3LmVtcHR5RWxlbWVudCgiaHR0cDovL3d3dy5mb28uY29tL25zLyIsICJmb28iKTsKKyAqIHcuZW5kRG9jdW1lbnQoKTsKKyAqIDwvcHJlPgorICoKKyAqIDxwPlRoZSByZXN1bHRpbmcgZG9jdW1lbnQgd2lsbCBsb29rIGxpa2UgdGhpczo8L3A+CisgKgorICogPHByZT4KKyAqICZsdDs/eG1sIHZlcnNpb249IjEuMCIgc3RhbmRhbG9uZT0ieWVzIj8+CisgKgorICogJmx0O2Zvbzpmb28geG1sbnM6Zm9vPSJodHRwOi8vd3d3LmZvby5jb20vbnMvIi8+CisgKiA8L3ByZT4KKyAqCisgKiA8cD5UaGUgZGVmYXVsdCBOYW1lc3BhY2Ugc2ltcGx5IHVzZXMgYW4gZW1wdHkgc3RyaW5nIGFzIHRoZSBwcmVmaXg6PC9wPgorICoKKyAqIDxwcmU+CisgKiB3LnNldFByZWZpeCgiaHR0cDovL3d3dy5mb28uY29tL25zLyIsICIiKTsKKyAqIHcuc3RhcnREb2N1bWVudCgpOworICogdy5lbXB0eUVsZW1lbnQoImh0dHA6Ly93d3cuZm9vLmNvbS9ucy8iLCAiZm9vIik7CisgKiB3LmVuZERvY3VtZW50KCk7CisgKiA8L3ByZT4KKyAqCisgKiA8cD5UaGUgcmVzdWx0aW5nIGRvY3VtZW50IHdpbGwgbG9vayBsaWtlIHRoaXM6PC9wPgorICoKKyAqIDxwcmU+CisgKiAmbHQ7P3htbCB2ZXJzaW9uPSIxLjAiIHN0YW5kYWxvbmU9InllcyI/PgorICoKKyAqICZsdDtmb28geG1sbnM9Imh0dHA6Ly93d3cuZm9vLmNvbS9ucy8iLz4KKyAqIDwvcHJlPgorICoKKyAqIDxwPkJ5IGRlZmF1bHQsIHRoZSBYTUwgd3JpdGVyIHdpbGwgbm90IGRlY2xhcmUgYSBOYW1lc3BhY2UgdW50aWwKKyAqIGl0IGlzIGFjdHVhbGx5IHVzZWQuICBTb21ldGltZXMsIHRoaXMgYXBwcm9hY2ggd2lsbCBjcmVhdGUKKyAqIGEgbGFyZ2UgbnVtYmVyIG9mIE5hbWVzcGFjZSBkZWNsYXJhdGlvbnMsIGFzIGluIHRoZSBmb2xsb3dpbmcKKyAqIGV4YW1wbGU6PC9wPgorICoKKyAqIDxwcmU+CisgKiAmbHQ7eG1sIHZlcnNpb249IjEuMCIgc3RhbmRhbG9uZT0ieWVzIj8+CisgKgorICogJmx0O3JkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KKyAqICAmbHQ7cmRmOkRlc2NyaXB0aW9uIGFib3V0PSJodHRwOi8vd3d3LmZvby5jb20vaWRzL2Jvb2tzLzEyMzQ1Ij4KKyAqICAgJmx0O2RjOnRpdGxlIHhtbG5zOmRjPSJodHRwOi8vd3d3LnB1cmwub3JnL2RjLyI+QSBEYXJrIE5pZ2h0Jmx0Oy9kYzp0aXRsZT4KKyAqICAgJmx0O2RjOmNyZWF0b3IgeG1sbnM6ZGM9Imh0dHA6Ly93d3cucHVybC5vcmcvZGMvIj5KYW5lIFNtaXRoJmx0Oy9kYzp0aXRsZT4KKyAqICAgJmx0O2RjOmRhdGUgeG1sbnM6ZGM9Imh0dHA6Ly93d3cucHVybC5vcmcvZGMvIj4yMDAwLTA5LTA5Jmx0Oy9kYzp0aXRsZT4KKyAqICAmbHQ7L3JkZjpEZXNjcmlwdGlvbj4KKyAqICZsdDsvcmRmOlJERj4KKyAqIDwvcHJlPgorICoKKyAqIDxwPlRoZSAicmRmIiBwcmVmaXggaXMgZGVjbGFyZWQgb25seSBvbmNlLCBiZWNhdXNlIHRoZSBSREYgTmFtZXNwYWNlCisgKiBpcyB1c2VkIGJ5IHRoZSByb290IGVsZW1lbnQgYW5kIGNhbiBiZSBpbmhlcml0ZWQgYnkgYWxsIG9mIGl0cworICogZGVzY2VuZGFudHM7IHRoZSAiZGMiIHByZWZpeCwgb24gdGhlIG90aGVyIGhhbmQsIGlzIGRlY2xhcmVkIHRocmVlCisgKiB0aW1lcywgYmVjYXVzZSBubyBoaWdoZXIgZWxlbWVudCB1c2VzIHRoZSBOYW1lc3BhY2UuICBUbyBzb2x2ZSB0aGlzCisgKiBwcm9ibGVtLCB5b3UgY2FuIGluc3RydWN0IHRoZSBYTUwgd3JpdGVyIHRvIHByZWRlY2xhcmUgTmFtZXNwYWNlcworICogb24gdGhlIHJvb3QgZWxlbWVudCBldmVuIGlmIHRoZXkgYXJlIG5vdCB1c2VkIHRoZXJlOjwvcD4KKyAqCisgKiA8cHJlPgorICogdy5mb3JjZU5TRGVjbCgiaHR0cDovL3d3dy5wdXJsLm9yZy9kYy8iKTsKKyAqIDwvcHJlPgorICoKKyAqIDxwPk5vdywgdGhlICJkYyIgcHJlZml4IHdpbGwgYmUgZGVjbGFyZWQgb24gdGhlIHJvb3QgZWxlbWVudCBldmVuCisgKiB0aG91Z2ggaXQncyBub3QgbmVlZGVkIHRoZXJlLCBhbmQgY2FuIGJlIGluaGVyaXRlZCBieSBpdHMKKyAqIGRlc2NlbmRhbnRzOjwvcD4KKyAqCisgKiA8cHJlPgorICogJmx0O3htbCB2ZXJzaW9uPSIxLjAiIHN0YW5kYWxvbmU9InllcyI/PgorICoKKyAqICZsdDtyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKKyAqICAgICAgICAgICAgIHhtbG5zOmRjPSJodHRwOi8vd3d3LnB1cmwub3JnL2RjLyI+CisgKiAgJmx0O3JkZjpEZXNjcmlwdGlvbiBhYm91dD0iaHR0cDovL3d3dy5mb28uY29tL2lkcy9ib29rcy8xMjM0NSI+CisgKiAgICZsdDtkYzp0aXRsZT5BIERhcmsgTmlnaHQmbHQ7L2RjOnRpdGxlPgorICogICAmbHQ7ZGM6Y3JlYXRvcj5KYW5lIFNtaXRoJmx0Oy9kYzp0aXRsZT4KKyAqICAgJmx0O2RjOmRhdGU+MjAwMC0wOS0wOSZsdDsvZGM6dGl0bGU+CisgKiAgJmx0Oy9yZGY6RGVzY3JpcHRpb24+CisgKiAmbHQ7L3JkZjpSREY+CisgKiA8L3ByZT4KKyAqCisgKiA8cD5UaGlzIGFwcHJvYWNoIGlzIGFsc28gdXNlZnVsIGZvciBkZWNsYXJpbmcgTmFtZXNwYWNlIHByZWZpeGVzCisgKiB0aGF0IGJlIHVzZWQgYnkgcXVhbGlmaWVkIG5hbWVzIGFwcGVhcmluZyBpbiBhdHRyaWJ1dGUgdmFsdWVzIG9yIAorICogY2hhcmFjdGVyIGRhdGEuPC9wPgorICoKKyAqIEBhdXRob3IgRGF2aWQgTWVnZ2luc29uLCBkYXZpZEBtZWdnaW5zb24uY29tCisgKiBAdmVyc2lvbiAwLjIKKyAqIEBzZWUgb3JnLnhtbC5zYXguWE1MRmlsdGVyCisgKiBAc2VlIG9yZy54bWwuc2F4LkNvbnRlbnRIYW5kbGVyCisgKi8KK3B1YmxpYyBjbGFzcyBYTUxXcml0ZXIgZXh0ZW5kcyBYTUxGaWx0ZXJJbXBsIGltcGxlbWVudHMgTGV4aWNhbEhhbmRsZXIKK3sKKworDAorICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgICAgLy8gQ29uc3RydWN0b3JzLgorICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKworICAgIC8qKgorICAgICAqIENyZWF0ZSBhIG5ldyBYTUwgd3JpdGVyLgorICAgICAqCisgICAgICogPHA+V3JpdGUgdG8gc3RhbmRhcmQgb3V0cHV0LjwvcD4KKyAgICAgKi8KKyAgICBwdWJsaWMgWE1MV3JpdGVyICgpIAorICAgIHsKKyAgICAgICAgaW5pdChudWxsKTsKKyAgICB9CisgICAgCisKKyAgICAvKioKKyAgICAgKiBDcmVhdGUgYSBuZXcgWE1MIHdyaXRlci4KKyAgICAgKgorICAgICAqIDxwPldyaXRlIHRvIHRoZSB3cml0ZXIgcHJvdmlkZWQuPC9wPgorICAgICAqCisgICAgICogQHBhcmFtIHdyaXRlciBUaGUgb3V0cHV0IGRlc3RpbmF0aW9uLCBvciBudWxsIHRvIHVzZSBzdGFuZGFyZAorICAgICAqICAgICAgICBvdXRwdXQuCisgICAgICovCisgICAgcHVibGljIFhNTFdyaXRlciAoV3JpdGVyIHdyaXRlcikgCisgICAgeworICAgICAgICBpbml0KHdyaXRlcik7CisgICAgfQorICAgIAorCisgICAgLyoqCisgICAgICogQ3JlYXRlIGEgbmV3IFhNTCB3cml0ZXIuCisgICAgICoKKyAgICAgKiA8cD5Vc2UgdGhlIHNwZWNpZmllZCBYTUwgcmVhZGVyIGFzIHRoZSBwYXJlbnQuPC9wPgorICAgICAqCisgICAgICogQHBhcmFtIHhtbHJlYWRlciBUaGUgcGFyZW50IGluIHRoZSBmaWx0ZXIgY2hhaW4sIG9yIG51bGwKKyAgICAgKiAgICAgICAgZm9yIG5vIHBhcmVudC4KKyAgICAgKi8KKyAgICBwdWJsaWMgWE1MV3JpdGVyIChYTUxSZWFkZXIgeG1scmVhZGVyKSAKKyAgICB7CisgICAgICAgIHN1cGVyKHhtbHJlYWRlcik7CisgICAgICAgIGluaXQobnVsbCk7CisgICAgfQorICAgIAorCisgICAgLyoqCisgICAgICogQ3JlYXRlIGEgbmV3IFhNTCB3cml0ZXIuCisgICAgICoKKyAgICAgKiA8cD5Vc2UgdGhlIHNwZWNpZmllZCBYTUwgcmVhZGVyIGFzIHRoZSBwYXJlbnQsIGFuZCB3cml0ZQorICAgICAqIHRvIHRoZSBzcGVjaWZpZWQgd3JpdGVyLjwvcD4KKyAgICAgKgorICAgICAqIEBwYXJhbSB4bWxyZWFkZXIgVGhlIHBhcmVudCBpbiB0aGUgZmlsdGVyIGNoYWluLCBvciBudWxsCisgICAgICogICAgICAgIGZvciBubyBwYXJlbnQuCisgICAgICogQHBhcmFtIHdyaXRlciBUaGUgb3V0cHV0IGRlc3RpbmF0aW9uLCBvciBudWxsIHRvIHVzZSBzdGFuZGFyZAorICAgICAqICAgICAgICBvdXRwdXQuCisgICAgICovCisgICAgcHVibGljIFhNTFdyaXRlciAoWE1MUmVhZGVyIHhtbHJlYWRlciwgV3JpdGVyIHdyaXRlcikgCisgICAgeworICAgICAgICBzdXBlcih4bWxyZWFkZXIpOworICAgICAgICBpbml0KHdyaXRlcik7CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiBJbnRlcm5hbCBpbml0aWFsaXphdGlvbiBtZXRob2QuCisgICAgICoKKyAgICAgKiA8cD5BbGwgb2YgdGhlIHB1YmxpYyBjb25zdHJ1Y3RvcnMgaW52b2tlIHRoaXMgbWV0aG9kLgorICAgICAqCisgICAgICogQHBhcmFtIHdyaXRlciBUaGUgb3V0cHV0IGRlc3RpbmF0aW9uLCBvciBudWxsIHRvIHVzZQorICAgICAqICAgICAgICBzdGFuZGFyZCBvdXRwdXQuCisgICAgICovCisgICAgcHJpdmF0ZSB2b2lkIGluaXQgKFdyaXRlciB3cml0ZXIpCisgICAgeworICAgICAgICBzZXRPdXRwdXQod3JpdGVyKTsKKyAgICAgICAgbnNTdXBwb3J0ID0gbmV3IE5hbWVzcGFjZVN1cHBvcnQoKTsKKyAgICAgICAgcHJlZml4VGFibGUgPSBuZXcgSGFzaHRhYmxlKCk7CisgICAgICAgIGZvcmNlZERlY2xUYWJsZSA9IG5ldyBIYXNodGFibGUoKTsKKyAgICAgICAgZG9uZURlY2xUYWJsZSA9IG5ldyBIYXNodGFibGUoKTsKKyAgICAgICAgb3V0cHV0UHJvcGVydGllcyA9IG5ldyBQcm9wZXJ0aWVzKCk7CisgICAgfQorCisKKwwKKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICAgIC8vIFB1YmxpYyBtZXRob2RzLgorICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKworICAgIC8qKgorICAgICAqIFJlc2V0IHRoZSB3cml0ZXIuCisgICAgICoKKyAgICAgKiA8cD5UaGlzIG1ldGhvZCBpcyBlc3BlY2lhbGx5IHVzZWZ1bCBpZiB0aGUgd3JpdGVyIHRocm93cyBhbgorICAgICAqIGV4Y2VwdGlvbiBiZWZvcmUgaXQgaXMgZmluaXNoZWQsIGFuZCB5b3Ugd2FudCB0byByZXVzZSB0aGUKKyAgICAgKiB3cml0ZXIgZm9yIGEgbmV3IGRvY3VtZW50LiAgSXQgaXMgdXN1YWxseSBhIGdvb2QgaWRlYSB0bworICAgICAqIGludm9rZSB7QGxpbmsgI2ZsdXNoIGZsdXNofSBiZWZvcmUgcmVzZXR0aW5nIHRoZSB3cml0ZXIsCisgICAgICogdG8gbWFrZSBzdXJlIHRoYXQgbm8gb3V0cHV0IGlzIGxvc3QuPC9wPgorICAgICAqCisgICAgICogPHA+VGhpcyBtZXRob2QgaXMgaW52b2tlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZQorICAgICAqIHtAbGluayAjc3RhcnREb2N1bWVudCBzdGFydERvY3VtZW50fSBtZXRob2QgYmVmb3JlIHdyaXRpbmcKKyAgICAgKiBhIG5ldyBkb2N1bWVudC48L3A+CisgICAgICoKKyAgICAgKiA8cD48c3Ryb25nPk5vdGU6PC9zdHJvbmc+IHRoaXMgbWV0aG9kIHdpbGwgPGVtPm5vdDwvZW0+CisgICAgICogY2xlYXIgdGhlIHByZWZpeCBvciBVUkkgaW5mb3JtYXRpb24gaW4gdGhlIHdyaXRlciBvcgorICAgICAqIHRoZSBzZWxlY3RlZCBvdXRwdXQgd3JpdGVyLjwvcD4KKyAgICAgKgorICAgICAqIEBzZWUgI2ZsdXNoCisgICAgICovCisgICAgcHVibGljIHZvaWQgcmVzZXQgKCkKKyAgICB7CisgICAgICAgIGVsZW1lbnRMZXZlbCA9IDA7CisgICAgICAgIHByZWZpeENvdW50ZXIgPSAwOworICAgICAgICBuc1N1cHBvcnQucmVzZXQoKTsKKyAgICB9CisgICAgCisKKyAgICAvKioKKyAgICAgKiBGbHVzaCB0aGUgb3V0cHV0LgorICAgICAqCisgICAgICogPHA+VGhpcyBtZXRob2QgZmx1c2hlcyB0aGUgb3V0cHV0IHN0cmVhbS4gIEl0IGlzIGVzcGVjaWFsbHkgdXNlZnVsCisgICAgICogd2hlbiB5b3UgbmVlZCB0byBtYWtlIGNlcnRhaW4gdGhhdCB0aGUgZW50aXJlIGRvY3VtZW50IGhhcworICAgICAqIGJlZW4gd3JpdHRlbiB0byBvdXRwdXQgYnV0IGRvIG5vdCB3YW50IHRvIGNsb3NlIHRoZSBvdXRwdXQKKyAgICAgKiBzdHJlYW0uPC9wPgorICAgICAqCisgICAgICogPHA+VGhpcyBtZXRob2QgaXMgaW52b2tlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZQorICAgICAqIHtAbGluayAjZW5kRG9jdW1lbnQgZW5kRG9jdW1lbnR9IG1ldGhvZCBhZnRlciB3cml0aW5nIGEKKyAgICAgKiBkb2N1bWVudC48L3A+CisgICAgICoKKyAgICAgKiBAc2VlICNyZXNldAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGZsdXNoICgpCisgICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiAKKyAgICB7CisgICAgICAgIG91dHB1dC5mbHVzaCgpOworICAgIH0KKyAgICAKKworICAgIC8qKgorICAgICAqIFNldCBhIG5ldyBvdXRwdXQgZGVzdGluYXRpb24gZm9yIHRoZSBkb2N1bWVudC4KKyAgICAgKgorICAgICAqIEBwYXJhbSB3cml0ZXIgVGhlIG91dHB1dCBkZXN0aW5hdGlvbiwgb3IgbnVsbCB0byB1c2UKKyAgICAgKiAgICAgICAgc3RhbmRhcmQgb3V0cHV0LgorICAgICAqIEByZXR1cm4gVGhlIGN1cnJlbnQgb3V0cHV0IHdyaXRlci4KKyAgICAgKiBAc2VlICNmbHVzaAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldE91dHB1dCAoV3JpdGVyIHdyaXRlcikKKyAgICB7CisgICAgICAgIGlmICh3cml0ZXIgPT0gbnVsbCkgeworICAgICAgICAgICAgb3V0cHV0ID0gbmV3IE91dHB1dFN0cmVhbVdyaXRlcihTeXN0ZW0ub3V0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG91dHB1dCA9IHdyaXRlcjsKKyAgICAgICAgfQorICAgIH0KKworCisgICAgLyoqCisgICAgICogU3BlY2lmeSBhIHByZWZlcnJlZCBwcmVmaXggZm9yIGEgTmFtZXNwYWNlIFVSSS4KKyAgICAgKgorICAgICAqIDxwPk5vdGUgdGhhdCB0aGlzIG1ldGhvZCBkb2VzIG5vdCBhY3R1YWxseSBmb3JjZSB0aGUgTmFtZXNwYWNlCisgICAgICogdG8gYmUgZGVjbGFyZWQ7IHRvIGRvIHRoYXQsIHVzZSB0aGUge0BsaW5rIAorICAgICAqICNmb3JjZU5TRGVjbChqYXZhLmxhbmcuU3RyaW5nKSBmb3JjZU5TRGVjbH0gbWV0aG9kIGFzIHdlbGwuPC9wPgorICAgICAqCisgICAgICogQHBhcmFtIHVyaSBUaGUgTmFtZXNwYWNlIFVSSS4KKyAgICAgKiBAcGFyYW0gcHJlZml4IFRoZSBwcmVmZXJyZWQgcHJlZml4LCBvciAiIiB0byBzZWxlY3QKKyAgICAgKiAgICAgICAgdGhlIGRlZmF1bHQgTmFtZXNwYWNlLgorICAgICAqIEBzZWUgI2dldFByZWZpeAorICAgICAqIEBzZWUgI2ZvcmNlTlNEZWNsKGphdmEubGFuZy5TdHJpbmcpCisgICAgICogQHNlZSAjZm9yY2VOU0RlY2woamF2YS5sYW5nLlN0cmluZyxqYXZhLmxhbmcuU3RyaW5nKQorICAgICAqLyAgICAKKyAgICBwdWJsaWMgdm9pZCBzZXRQcmVmaXggKFN0cmluZyB1cmksIFN0cmluZyBwcmVmaXgpCisgICAgeworICAgICAgICBwcmVmaXhUYWJsZS5wdXQodXJpLCBwcmVmaXgpOworICAgIH0KKyAgICAKKworICAgIC8qKgorICAgICAqIEdldCB0aGUgY3VycmVudCBvciBwcmVmZXJyZWQgcHJlZml4IGZvciBhIE5hbWVzcGFjZSBVUkkuCisgICAgICoKKyAgICAgKiBAcGFyYW0gdXJpIFRoZSBOYW1lc3BhY2UgVVJJLgorICAgICAqIEByZXR1cm4gVGhlIHByZWZlcnJlZCBwcmVmaXgsIG9yICIiIGZvciB0aGUgZGVmYXVsdCBOYW1lc3BhY2UuCisgICAgICogQHNlZSAjc2V0UHJlZml4CisgICAgICovCisgICAgcHVibGljIFN0cmluZyBnZXRQcmVmaXggKFN0cmluZyB1cmkpCisgICAgeworICAgICAgICByZXR1cm4gKFN0cmluZylwcmVmaXhUYWJsZS5nZXQodXJpKTsKKyAgICB9CisgICAgCisKKyAgICAvKioKKyAgICAgKiBGb3JjZSBhIE5hbWVzcGFjZSB0byBiZSBkZWNsYXJlZCBvbiB0aGUgcm9vdCBlbGVtZW50LgorICAgICAqCisgICAgICogPHA+QnkgZGVmYXVsdCwgdGhlIFhNTFdyaXRlciB3aWxsIGRlY2xhcmUgb25seSB0aGUgTmFtZXNwYWNlcworICAgICAqIG5lZWRlZCBmb3IgYW4gZWxlbWVudDsgYXMgYSByZXN1bHQsIGEgTmFtZXNwYWNlIG1heSBiZQorICAgICAqIGRlY2xhcmVkIG1hbnkgcGxhY2VzIGluIGEgZG9jdW1lbnQgaWYgaXQgaXMgbm90IHVzZWQgb24gdGhlCisgICAgICogcm9vdCBlbGVtZW50LjwvcD4KKyAgICAgKgorICAgICAqIDxwPlRoaXMgbWV0aG9kIGZvcmNlcyBhIE5hbWVzcGFjZSB0byBiZSBkZWNsYXJlZCBvbiB0aGUgcm9vdAorICAgICAqIGVsZW1lbnQgZXZlbiBpZiBpdCBpcyBub3QgdXNlZCB0aGVyZSwgYW5kIHJlZHVjZXMgdGhlIG51bWJlcgorICAgICAqIG9mIHhtbG5zIGF0dHJpYnV0ZXMgaW4gdGhlIGRvY3VtZW50LjwvcD4KKyAgICAgKgorICAgICAqIEBwYXJhbSB1cmkgVGhlIE5hbWVzcGFjZSBVUkkgdG8gZGVjbGFyZS4KKyAgICAgKiBAc2VlICNmb3JjZU5TRGVjbChqYXZhLmxhbmcuU3RyaW5nLGphdmEubGFuZy5TdHJpbmcpCisgICAgICogQHNlZSAjc2V0UHJlZml4CisgICAgICovCisgICAgcHVibGljIHZvaWQgZm9yY2VOU0RlY2wgKFN0cmluZyB1cmkpCisgICAgeworICAgICAgICBmb3JjZWREZWNsVGFibGUucHV0KHVyaSwgQm9vbGVhbi5UUlVFKTsKKyAgICB9CisgICAgCisKKyAgICAvKioKKyAgICAgKiBGb3JjZSBhIE5hbWVzcGFjZSBkZWNsYXJhdGlvbiB3aXRoIGEgcHJlZmVycmVkIHByZWZpeC4KKyAgICAgKgorICAgICAqIDxwPlRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QgdGhhdCBpbnZva2VzIHtAbGluaworICAgICAqICNzZXRQcmVmaXggc2V0UHJlZml4fSB0aGVuIHtAbGluayAjZm9yY2VOU0RlY2woamF2YS5sYW5nLlN0cmluZykKKyAgICAgKiBmb3JjZU5TRGVjbH0uPC9wPgorICAgICAqCisgICAgICogQHBhcmFtIHVyaSBUaGUgTmFtZXNwYWNlIFVSSSB0byBkZWNsYXJlIG9uIHRoZSByb290IGVsZW1lbnQuCisgICAgICogQHBhcmFtIHByZWZpeCBUaGUgcHJlZmVycmVkIHByZWZpeCBmb3IgdGhlIE5hbWVzcGFjZSwgb3IgIiIKKyAgICAgKiAgICAgICAgZm9yIHRoZSBkZWZhdWx0IE5hbWVzcGFjZS4KKyAgICAgKiBAc2VlICNzZXRQcmVmaXgKKyAgICAgKiBAc2VlICNmb3JjZU5TRGVjbChqYXZhLmxhbmcuU3RyaW5nKQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGZvcmNlTlNEZWNsIChTdHJpbmcgdXJpLCBTdHJpbmcgcHJlZml4KQorICAgIHsKKyAgICAgICAgc2V0UHJlZml4KHVyaSwgcHJlZml4KTsKKyAgICAgICAgZm9yY2VOU0RlY2wodXJpKTsKKyAgICB9CisgICAgCisKKwwKKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICAgIC8vIE1ldGhvZHMgZnJvbSBvcmcueG1sLnNheC5Db250ZW50SGFuZGxlci4KKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisKKyAgICAvKioKKyAgICAgKiBXcml0ZSB0aGUgWE1MIGRlY2xhcmF0aW9uIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGRvY3VtZW50LgorICAgICAqCisgICAgICogUGFzcyB0aGUgZXZlbnQgb24gZG93biB0aGUgZmlsdGVyIGNoYWluIGZvciBmdXJ0aGVyIHByb2Nlc3NpbmcuCisgICAgICoKKyAgICAgKiBAZXhjZXB0aW9uIG9yZy54bWwuc2F4LlNBWEV4Y2VwdGlvbiBJZiB0aGVyZSBpcyBhbiBlcnJvcgorICAgICAqICAgICAgICAgICAgd3JpdGluZyB0aGUgWE1MIGRlY2xhcmF0aW9uLCBvciBpZiBhIGhhbmRsZXIgZnVydGhlciBkb3duCisgICAgICogICAgICAgICAgICB0aGUgZmlsdGVyIGNoYWluIHJhaXNlcyBhbiBleGNlcHRpb24uCisgICAgICogQHNlZSBvcmcueG1sLnNheC5Db250ZW50SGFuZGxlciNzdGFydERvY3VtZW50CisgICAgICovCisgICAgcHVibGljIHZvaWQgc3RhcnREb2N1bWVudCAoKQorICAgICAgICB0aHJvd3MgU0FYRXhjZXB0aW9uCisgICAgeworICAgICAgICByZXNldCgpOworICAgICAgICBpZiAoISgieWVzIi5lcXVhbHMob3V0cHV0UHJvcGVydGllcy5nZXRQcm9wZXJ0eShPTUlUX1hNTF9ERUNMQVJBVElPTiwgIm5vIikpKSkgeworICAgICAgICAgICAgd3JpdGUoIjw/eG1sIik7CisgICAgICAgICAgICBpZiAodmVyc2lvbiA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgd3JpdGUoIiB2ZXJzaW9uPVwiMS4wXCIiKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgd3JpdGUoIiB2ZXJzaW9uPVwiIik7CisgICAgICAgICAgICAgICAgd3JpdGUodmVyc2lvbik7CisgICAgICAgICAgICAgICAgd3JpdGUoIlwiIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAob3V0cHV0RW5jb2RpbmcgIT0gbnVsbCAmJiBvdXRwdXRFbmNvZGluZyAhPSAiIikgeworICAgICAgICAgICAgICAgIHdyaXRlKCIgZW5jb2Rpbmc9XCIiKTsKKyAgICAgICAgICAgICAgICB3cml0ZShvdXRwdXRFbmNvZGluZyk7CisgICAgICAgICAgICAgICAgd3JpdGUoIlwiIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoc3RhbmRhbG9uZSA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgd3JpdGUoIiBzdGFuZGFsb25lPVwieWVzXCI/PlxuIik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHdyaXRlKCIgc3RhbmRhbG9uZT1cIiIpOworICAgICAgICAgICAgICAgIHdyaXRlKHN0YW5kYWxvbmUpOworICAgICAgICAgICAgICAgIHdyaXRlKCJcIiIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHN1cGVyLnN0YXJ0RG9jdW1lbnQoKTsKKyAgICB9CisKKworICAgIC8qKgorICAgICAqIFdyaXRlIGEgbmV3bGluZSBhdCB0aGUgZW5kIG9mIHRoZSBkb2N1bWVudC4KKyAgICAgKgorICAgICAqIFBhc3MgdGhlIGV2ZW50IG9uIGRvd24gdGhlIGZpbHRlciBjaGFpbiBmb3IgZnVydGhlciBwcm9jZXNzaW5nLgorICAgICAqCisgICAgICogQGV4Y2VwdGlvbiBvcmcueG1sLnNheC5TQVhFeGNlcHRpb24gSWYgdGhlcmUgaXMgYW4gZXJyb3IKKyAgICAgKiAgICAgICAgICAgIHdyaXRpbmcgdGhlIG5ld2xpbmUsIG9yIGlmIGEgaGFuZGxlciBmdXJ0aGVyIGRvd24KKyAgICAgKiAgICAgICAgICAgIHRoZSBmaWx0ZXIgY2hhaW4gcmFpc2VzIGFuIGV4Y2VwdGlvbi4KKyAgICAgKiBAc2VlIG9yZy54bWwuc2F4LkNvbnRlbnRIYW5kbGVyI2VuZERvY3VtZW50CisgICAgICovCisgICAgcHVibGljIHZvaWQgZW5kRG9jdW1lbnQgKCkKKyAgICAgICAgdGhyb3dzIFNBWEV4Y2VwdGlvbgorICAgIHsKKyAgICAgICAgd3JpdGUoJ1xuJyk7CisgICAgICAgIHN1cGVyLmVuZERvY3VtZW50KCk7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBmbHVzaCgpOworICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgU0FYRXhjZXB0aW9uKGUpOworICAgICAgICB9CisgICAgfQorICAgIAorCisgICAgLyoqCisgICAgICogV3JpdGUgYSBzdGFydCB0YWcuCisgICAgICoKKyAgICAgKiBQYXNzIHRoZSBldmVudCBvbiBkb3duIHRoZSBmaWx0ZXIgY2hhaW4gZm9yIGZ1cnRoZXIgcHJvY2Vzc2luZy4KKyAgICAgKgorICAgICAqIEBwYXJhbSB1cmkgVGhlIE5hbWVzcGFjZSBVUkksIG9yIHRoZSBlbXB0eSBzdHJpbmcgaWYgbm9uZQorICAgICAqICAgICAgICBpcyBhdmFpbGFibGUuCisgICAgICogQHBhcmFtIGxvY2FsTmFtZSBUaGUgZWxlbWVudCdzIGxvY2FsICh1bnByZWZpeGVkKSBuYW1lIChyZXF1aXJlZCkuCisgICAgICogQHBhcmFtIHFOYW1lIFRoZSBlbGVtZW50J3MgcXVhbGlmaWVkIChwcmVmaXhlZCkgbmFtZSwgb3IgdGhlCisgICAgICogICAgICAgIGVtcHR5IHN0cmluZyBpcyBub25lIGlzIGF2YWlsYWJsZS4gIFRoaXMgbWV0aG9kIHdpbGwKKyAgICAgKiAgICAgICAgdXNlIHRoZSBxTmFtZSBhcyBhIHRlbXBsYXRlIGZvciBnZW5lcmF0aW5nIGEgcHJlZml4CisgICAgICogICAgICAgIGlmIG5lY2Vzc2FyeSwgYnV0IGl0IGlzIG5vdCBndWFyYW50ZWVkIHRvIHVzZSB0aGUKKyAgICAgKiAgICAgICAgc2FtZSBxTmFtZS4KKyAgICAgKiBAcGFyYW0gYXR0cyBUaGUgZWxlbWVudCdzIGF0dHJpYnV0ZSBsaXN0IChtdXN0IG5vdCBiZSBudWxsKS4KKyAgICAgKiBAZXhjZXB0aW9uIG9yZy54bWwuc2F4LlNBWEV4Y2VwdGlvbiBJZiB0aGVyZSBpcyBhbiBlcnJvcgorICAgICAqICAgICAgICAgICAgd3JpdGluZyB0aGUgc3RhcnQgdGFnLCBvciBpZiBhIGhhbmRsZXIgZnVydGhlciBkb3duCisgICAgICogICAgICAgICAgICB0aGUgZmlsdGVyIGNoYWluIHJhaXNlcyBhbiBleGNlcHRpb24uCisgICAgICogQHNlZSBvcmcueG1sLnNheC5Db250ZW50SGFuZGxlciNzdGFydEVsZW1lbnQKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzdGFydEVsZW1lbnQgKFN0cmluZyB1cmksIFN0cmluZyBsb2NhbE5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcU5hbWUsIEF0dHJpYnV0ZXMgYXR0cykKKyAgICAgICAgdGhyb3dzIFNBWEV4Y2VwdGlvbgorICAgIHsKKyAgICAgICAgZWxlbWVudExldmVsKys7CisgICAgICAgIG5zU3VwcG9ydC5wdXNoQ29udGV4dCgpOworCWlmIChmb3JjZURURCAmJiAhaGFzT3V0cHV0RFREKSBzdGFydERURChsb2NhbE5hbWUgPT0gbnVsbCA/IHFOYW1lIDogbG9jYWxOYW1lLCAiIiwgIiIpOworICAgICAgICB3cml0ZSgnPCcpOworICAgICAgICB3cml0ZU5hbWUodXJpLCBsb2NhbE5hbWUsIHFOYW1lLCB0cnVlKTsKKyAgICAgICAgd3JpdGVBdHRyaWJ1dGVzKGF0dHMpOworICAgICAgICBpZiAoZWxlbWVudExldmVsID09IDEpIHsKKyAgICAgICAgICAgIGZvcmNlTlNEZWNscygpOworICAgICAgICB9CisgICAgICAgIHdyaXRlTlNEZWNscygpOworICAgICAgICB3cml0ZSgnPicpOworLy8JU3lzdGVtLm91dC5wcmludGxuKCIlJSUlIHN0YXJ0RWxlbWVudCBbIiArIHFOYW1lICsgIl0gaHRtbE1vZGUgPSAiICsgaHRtbE1vZGUpOworCWlmIChodG1sTW9kZSAmJiAocU5hbWUuZXF1YWxzKCJzY3JpcHQiKSB8fCBxTmFtZS5lcXVhbHMoInN0eWxlIikpKSB7CisgICAgICAgICAgICAgICAgY2RhdGFFbGVtZW50ID0gdHJ1ZTsKKy8vCQlTeXN0ZW0ub3V0LnByaW50bG4oIiUlJSUgQ0RBVEEgZWxlbWVudCIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgc3VwZXIuc3RhcnRFbGVtZW50KHVyaSwgbG9jYWxOYW1lLCBxTmFtZSwgYXR0cyk7CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiBXcml0ZSBhbiBlbmQgdGFnLgorICAgICAqCisgICAgICogUGFzcyB0aGUgZXZlbnQgb24gZG93biB0aGUgZmlsdGVyIGNoYWluIGZvciBmdXJ0aGVyIHByb2Nlc3NpbmcuCisgICAgICoKKyAgICAgKiBAcGFyYW0gdXJpIFRoZSBOYW1lc3BhY2UgVVJJLCBvciB0aGUgZW1wdHkgc3RyaW5nIGlmIG5vbmUKKyAgICAgKiAgICAgICAgaXMgYXZhaWxhYmxlLgorICAgICAqIEBwYXJhbSBsb2NhbE5hbWUgVGhlIGVsZW1lbnQncyBsb2NhbCAodW5wcmVmaXhlZCkgbmFtZSAocmVxdWlyZWQpLgorICAgICAqIEBwYXJhbSBxTmFtZSBUaGUgZWxlbWVudCdzIHF1YWxpZmllZCAocHJlZml4ZWQpIG5hbWUsIG9yIHRoZQorICAgICAqICAgICAgICBlbXB0eSBzdHJpbmcgaXMgbm9uZSBpcyBhdmFpbGFibGUuICBUaGlzIG1ldGhvZCB3aWxsCisgICAgICogICAgICAgIHVzZSB0aGUgcU5hbWUgYXMgYSB0ZW1wbGF0ZSBmb3IgZ2VuZXJhdGluZyBhIHByZWZpeAorICAgICAqICAgICAgICBpZiBuZWNlc3NhcnksIGJ1dCBpdCBpcyBub3QgZ3VhcmFudGVlZCB0byB1c2UgdGhlCisgICAgICogICAgICAgIHNhbWUgcU5hbWUuCisgICAgICogQGV4Y2VwdGlvbiBvcmcueG1sLnNheC5TQVhFeGNlcHRpb24gSWYgdGhlcmUgaXMgYW4gZXJyb3IKKyAgICAgKiAgICAgICAgICAgIHdyaXRpbmcgdGhlIGVuZCB0YWcsIG9yIGlmIGEgaGFuZGxlciBmdXJ0aGVyIGRvd24KKyAgICAgKiAgICAgICAgICAgIHRoZSBmaWx0ZXIgY2hhaW4gcmFpc2VzIGFuIGV4Y2VwdGlvbi4KKyAgICAgKiBAc2VlIG9yZy54bWwuc2F4LkNvbnRlbnRIYW5kbGVyI2VuZEVsZW1lbnQKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBlbmRFbGVtZW50IChTdHJpbmcgdXJpLCBTdHJpbmcgbG9jYWxOYW1lLCBTdHJpbmcgcU5hbWUpCisgICAgICAgIHRocm93cyBTQVhFeGNlcHRpb24KKyAgICB7CisJaWYgKCEoaHRtbE1vZGUgJiYKKyAgICAgICAgICAgICh1cmkuZXF1YWxzKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIikgfHwKKwkJdXJpLmVxdWFscygiIikpICYmCisgICAgICAgICAgICAocU5hbWUuZXF1YWxzKCJhcmVhIikgfHwgcU5hbWUuZXF1YWxzKCJiYXNlIikgfHwKKyAgICAgICAgICAgIHFOYW1lLmVxdWFscygiYmFzZWZvbnQiKSB8fCBxTmFtZS5lcXVhbHMoImJyIikgfHwKKyAgICAgICAgICAgIHFOYW1lLmVxdWFscygiY29sIikgfHwgcU5hbWUuZXF1YWxzKCJmcmFtZSIpIHx8CisgICAgICAgICAgICBxTmFtZS5lcXVhbHMoImhyIikgfHwgcU5hbWUuZXF1YWxzKCJpbWciKSB8fAorICAgICAgICAgICAgcU5hbWUuZXF1YWxzKCJpbnB1dCIpIHx8IHFOYW1lLmVxdWFscygiaXNpbmRleCIpIHx8CisgICAgICAgICAgICBxTmFtZS5lcXVhbHMoImxpbmsiKSB8fCBxTmFtZS5lcXVhbHMoIm1ldGEiKSB8fAorICAgICAgICAgICAgcU5hbWUuZXF1YWxzKCJwYXJhbSIpKSkpIHsKKyAgICAgICAgICAgICAgICB3cml0ZSgiPC8iKTsKKyAgICAgICAgICAgICAgICB3cml0ZU5hbWUodXJpLCBsb2NhbE5hbWUsIHFOYW1lLCB0cnVlKTsKKyAgICAgICAgICAgICAgICB3cml0ZSgnPicpOworICAgICAgICAgICAgfQorICAgICAgICBpZiAoZWxlbWVudExldmVsID09IDEpIHsKKyAgICAgICAgICAgIHdyaXRlKCdcbicpOworICAgICAgICB9CisgICAgICAgIGNkYXRhRWxlbWVudCA9IGZhbHNlOworICAgICAgICBzdXBlci5lbmRFbGVtZW50KHVyaSwgbG9jYWxOYW1lLCBxTmFtZSk7CisgICAgICAgIG5zU3VwcG9ydC5wb3BDb250ZXh0KCk7CisgICAgICAgIGVsZW1lbnRMZXZlbC0tOworICAgIH0KKyAgICAKKworICAgIC8qKgorICAgICAqIFdyaXRlIGNoYXJhY3RlciBkYXRhLgorICAgICAqCisgICAgICogUGFzcyB0aGUgZXZlbnQgb24gZG93biB0aGUgZmlsdGVyIGNoYWluIGZvciBmdXJ0aGVyIHByb2Nlc3NpbmcuCisgICAgICoKKyAgICAgKiBAcGFyYW0gY2ggVGhlIGFycmF5IG9mIGNoYXJhY3RlcnMgdG8gd3JpdGUuCisgICAgICogQHBhcmFtIHN0YXJ0IFRoZSBzdGFydGluZyBwb3NpdGlvbiBpbiB0aGUgYXJyYXkuCisgICAgICogQHBhcmFtIGxlbmd0aCBUaGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gd3JpdGUuCisgICAgICogQGV4Y2VwdGlvbiBvcmcueG1sLnNheC5TQVhFeGNlcHRpb24gSWYgdGhlcmUgaXMgYW4gZXJyb3IKKyAgICAgKiAgICAgICAgICAgIHdyaXRpbmcgdGhlIGNoYXJhY3RlcnMsIG9yIGlmIGEgaGFuZGxlciBmdXJ0aGVyIGRvd24KKyAgICAgKiAgICAgICAgICAgIHRoZSBmaWx0ZXIgY2hhaW4gcmFpc2VzIGFuIGV4Y2VwdGlvbi4KKyAgICAgKiBAc2VlIG9yZy54bWwuc2F4LkNvbnRlbnRIYW5kbGVyI2NoYXJhY3RlcnMKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBjaGFyYWN0ZXJzIChjaGFyIGNoW10sIGludCBzdGFydCwgaW50IGxlbikKKyAgICAgICAgdGhyb3dzIFNBWEV4Y2VwdGlvbgorICAgIHsKKyAgICAgICAgaWYgKCFjZGF0YUVsZW1lbnQpIHsKKyAgICAgICAgICB3cml0ZUVzYyhjaCwgc3RhcnQsIGxlbiwgZmFsc2UpOworICAgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgZm9yIChpbnQgaSA9IHN0YXJ0OyBpIDwgc3RhcnQgKyBsZW47IGkrKykgeworICAgICAgICAgICAgd3JpdGUoY2hbaV0pOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgc3VwZXIuY2hhcmFjdGVycyhjaCwgc3RhcnQsIGxlbik7CisgICAgfQorICAgIAorCisgICAgLyoqCisgICAgICogV3JpdGUgaWdub3JhYmxlIHdoaXRlc3BhY2UuCisgICAgICoKKyAgICAgKiBQYXNzIHRoZSBldmVudCBvbiBkb3duIHRoZSBmaWx0ZXIgY2hhaW4gZm9yIGZ1cnRoZXIgcHJvY2Vzc2luZy4KKyAgICAgKgorICAgICAqIEBwYXJhbSBjaCBUaGUgYXJyYXkgb2YgY2hhcmFjdGVycyB0byB3cml0ZS4KKyAgICAgKiBAcGFyYW0gc3RhcnQgVGhlIHN0YXJ0aW5nIHBvc2l0aW9uIGluIHRoZSBhcnJheS4KKyAgICAgKiBAcGFyYW0gbGVuZ3RoIFRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB0byB3cml0ZS4KKyAgICAgKiBAZXhjZXB0aW9uIG9yZy54bWwuc2F4LlNBWEV4Y2VwdGlvbiBJZiB0aGVyZSBpcyBhbiBlcnJvcgorICAgICAqICAgICAgICAgICAgd3JpdGluZyB0aGUgd2hpdGVzcGFjZSwgb3IgaWYgYSBoYW5kbGVyIGZ1cnRoZXIgZG93bgorICAgICAqICAgICAgICAgICAgdGhlIGZpbHRlciBjaGFpbiByYWlzZXMgYW4gZXhjZXB0aW9uLgorICAgICAqIEBzZWUgb3JnLnhtbC5zYXguQ29udGVudEhhbmRsZXIjaWdub3JhYmxlV2hpdGVzcGFjZQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGlnbm9yYWJsZVdoaXRlc3BhY2UgKGNoYXIgY2hbXSwgaW50IHN0YXJ0LCBpbnQgbGVuZ3RoKQorICAgICAgICB0aHJvd3MgU0FYRXhjZXB0aW9uCisgICAgeworICAgICAgICB3cml0ZUVzYyhjaCwgc3RhcnQsIGxlbmd0aCwgZmFsc2UpOworICAgICAgICBzdXBlci5pZ25vcmFibGVXaGl0ZXNwYWNlKGNoLCBzdGFydCwgbGVuZ3RoKTsKKyAgICB9CisgICAgCisKKworICAgIC8qKgorICAgICAqIFdyaXRlIGEgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbi4KKyAgICAgKgorICAgICAqIFBhc3MgdGhlIGV2ZW50IG9uIGRvd24gdGhlIGZpbHRlciBjaGFpbiBmb3IgZnVydGhlciBwcm9jZXNzaW5nLgorICAgICAqCisgICAgICogQHBhcmFtIHRhcmdldCBUaGUgUEkgdGFyZ2V0LgorICAgICAqIEBwYXJhbSBkYXRhIFRoZSBQSSBkYXRhLgorICAgICAqIEBleGNlcHRpb24gb3JnLnhtbC5zYXguU0FYRXhjZXB0aW9uIElmIHRoZXJlIGlzIGFuIGVycm9yCisgICAgICogICAgICAgICAgICB3cml0aW5nIHRoZSBQSSwgb3IgaWYgYSBoYW5kbGVyIGZ1cnRoZXIgZG93bgorICAgICAqICAgICAgICAgICAgdGhlIGZpbHRlciBjaGFpbiByYWlzZXMgYW4gZXhjZXB0aW9uLgorICAgICAqIEBzZWUgb3JnLnhtbC5zYXguQ29udGVudEhhbmRsZXIjcHJvY2Vzc2luZ0luc3RydWN0aW9uCisgICAgICovCisgICAgcHVibGljIHZvaWQgcHJvY2Vzc2luZ0luc3RydWN0aW9uIChTdHJpbmcgdGFyZ2V0LCBTdHJpbmcgZGF0YSkKKyAgICAgICAgdGhyb3dzIFNBWEV4Y2VwdGlvbgorICAgIHsKKyAgICAgICAgd3JpdGUoIjw/Iik7CisgICAgICAgIHdyaXRlKHRhcmdldCk7CisgICAgICAgIHdyaXRlKCcgJyk7CisgICAgICAgIHdyaXRlKGRhdGEpOworICAgICAgICB3cml0ZSgiPz4iKTsKKyAgICAgICAgaWYgKGVsZW1lbnRMZXZlbCA8IDEpIHsKKyAgICAgICAgICAgIHdyaXRlKCdcbicpOworICAgICAgICB9CisgICAgICAgIHN1cGVyLnByb2Nlc3NpbmdJbnN0cnVjdGlvbih0YXJnZXQsIGRhdGEpOworICAgIH0KKyAgICAKKworDAorICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgICAgLy8gQWRkaXRpb25hbCBtYXJrdXAuCisgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworICAgIC8qKgorICAgICAqIFdyaXRlIGFuIGVtcHR5IGVsZW1lbnQuCisgICAgICoKKyAgICAgKiBUaGlzIG1ldGhvZCB3cml0ZXMgYW4gZW1wdHkgZWxlbWVudCB0YWcgcmF0aGVyIHRoYW4gYSBzdGFydCB0YWcKKyAgICAgKiBmb2xsb3dlZCBieSBhbiBlbmQgdGFnLiAgQm90aCBhIHtAbGluayAjc3RhcnRFbGVtZW50CisgICAgICogc3RhcnRFbGVtZW50fSBhbmQgYW4ge0BsaW5rICNlbmRFbGVtZW50IGVuZEVsZW1lbnR9IGV2ZW50IHdpbGwKKyAgICAgKiBiZSBwYXNzZWQgb24gZG93biB0aGUgZmlsdGVyIGNoYWluLgorICAgICAqCisgICAgICogQHBhcmFtIHVyaSBUaGUgZWxlbWVudCdzIE5hbWVzcGFjZSBVUkksIG9yIHRoZSBlbXB0eSBzdHJpbmcKKyAgICAgKiAgICAgICAgaWYgdGhlIGVsZW1lbnQgaGFzIG5vIE5hbWVzcGFjZSBvciBpZiBOYW1lc3BhY2UKKyAgICAgKiAgICAgICAgcHJvY2Vzc2luZyBpcyBub3QgYmVpbmcgcGVyZm9ybWVkLgorICAgICAqIEBwYXJhbSBsb2NhbE5hbWUgVGhlIGVsZW1lbnQncyBsb2NhbCBuYW1lICh3aXRob3V0IHByZWZpeCkuICBUaGlzCisgICAgICogICAgICAgIHBhcmFtZXRlciBtdXN0IGJlIHByb3ZpZGVkLgorICAgICAqIEBwYXJhbSBxTmFtZSBUaGUgZWxlbWVudCdzIHF1YWxpZmllZCBuYW1lICh3aXRoIHByZWZpeCksIG9yCisgICAgICogICAgICAgIHRoZSBlbXB0eSBzdHJpbmcgaWYgbm9uZSBpcyBhdmFpbGFibGUuICBUaGlzIHBhcmFtZXRlcgorICAgICAqICAgICAgICBpcyBzdHJpY3RseSBhZHZpc29yeTogdGhlIHdyaXRlciBtYXkgb3IgbWF5IG5vdCB1c2UKKyAgICAgKiAgICAgICAgdGhlIHByZWZpeCBhdHRhY2hlZC4KKyAgICAgKiBAcGFyYW0gYXR0cyBUaGUgZWxlbWVudCdzIGF0dHJpYnV0ZSBsaXN0LgorICAgICAqIEBleGNlcHRpb24gb3JnLnhtbC5zYXguU0FYRXhjZXB0aW9uIElmIHRoZXJlIGlzIGFuIGVycm9yCisgICAgICogICAgICAgICAgICB3cml0aW5nIHRoZSBlbXB0eSB0YWcsIG9yIGlmIGEgaGFuZGxlciBmdXJ0aGVyIGRvd24KKyAgICAgKiAgICAgICAgICAgIHRoZSBmaWx0ZXIgY2hhaW4gcmFpc2VzIGFuIGV4Y2VwdGlvbi4KKyAgICAgKiBAc2VlICNzdGFydEVsZW1lbnQKKyAgICAgKiBAc2VlICNlbmRFbGVtZW50IAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGVtcHR5RWxlbWVudCAoU3RyaW5nIHVyaSwgU3RyaW5nIGxvY2FsTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBxTmFtZSwgQXR0cmlidXRlcyBhdHRzKQorICAgICAgICB0aHJvd3MgU0FYRXhjZXB0aW9uCisgICAgeworICAgICAgICBuc1N1cHBvcnQucHVzaENvbnRleHQoKTsKKyAgICAgICAgd3JpdGUoJzwnKTsKKyAgICAgICAgd3JpdGVOYW1lKHVyaSwgbG9jYWxOYW1lLCBxTmFtZSwgdHJ1ZSk7CisgICAgICAgIHdyaXRlQXR0cmlidXRlcyhhdHRzKTsKKyAgICAgICAgaWYgKGVsZW1lbnRMZXZlbCA9PSAxKSB7CisgICAgICAgICAgICBmb3JjZU5TRGVjbHMoKTsKKyAgICAgICAgfQorICAgICAgICB3cml0ZU5TRGVjbHMoKTsKKyAgICAgICAgd3JpdGUoIi8+Iik7CisgICAgICAgIHN1cGVyLnN0YXJ0RWxlbWVudCh1cmksIGxvY2FsTmFtZSwgcU5hbWUsIGF0dHMpOworICAgICAgICBzdXBlci5lbmRFbGVtZW50KHVyaSwgbG9jYWxOYW1lLCBxTmFtZSk7CisgICAgfQorCisKKwwKKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICAgIC8vIENvbnZlbmllbmNlIG1ldGhvZHMuCisgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAgICAKKworCisgICAgLyoqCisgICAgICogU3RhcnQgYSBuZXcgZWxlbWVudCB3aXRob3V0IGEgcW5hbWUgb3IgYXR0cmlidXRlcy4KKyAgICAgKgorICAgICAqIDxwPlRoaXMgbWV0aG9kIHdpbGwgcHJvdmlkZSBhIGRlZmF1bHQgZW1wdHkgYXR0cmlidXRlCisgICAgICogbGlzdCBhbmQgYW4gZW1wdHkgc3RyaW5nIGZvciB0aGUgcXVhbGlmaWVkIG5hbWUuICAKKyAgICAgKiBJdCBpbnZva2VzIHtAbGluayAKKyAgICAgKiAjc3RhcnRFbGVtZW50KFN0cmluZywgU3RyaW5nLCBTdHJpbmcsIEF0dHJpYnV0ZXMpfQorICAgICAqIGRpcmVjdGx5LjwvcD4KKyAgICAgKgorICAgICAqIEBwYXJhbSB1cmkgVGhlIGVsZW1lbnQncyBOYW1lc3BhY2UgVVJJLgorICAgICAqIEBwYXJhbSBsb2NhbE5hbWUgVGhlIGVsZW1lbnQncyBsb2NhbCBuYW1lLgorICAgICAqIEBleGNlcHRpb24gb3JnLnhtbC5zYXguU0FYRXhjZXB0aW9uIElmIHRoZXJlIGlzIGFuIGVycm9yCisgICAgICogICAgICAgICAgICB3cml0aW5nIHRoZSBzdGFydCB0YWcsIG9yIGlmIGEgaGFuZGxlciBmdXJ0aGVyIGRvd24KKyAgICAgKiAgICAgICAgICAgIHRoZSBmaWx0ZXIgY2hhaW4gcmFpc2VzIGFuIGV4Y2VwdGlvbi4KKyAgICAgKiBAc2VlICNzdGFydEVsZW1lbnQoU3RyaW5nLCBTdHJpbmcsIFN0cmluZywgQXR0cmlidXRlcykKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzdGFydEVsZW1lbnQgKFN0cmluZyB1cmksIFN0cmluZyBsb2NhbE5hbWUpCisgICAgICAgIHRocm93cyBTQVhFeGNlcHRpb24KKyAgICB7CisgICAgICAgIHN0YXJ0RWxlbWVudCh1cmksIGxvY2FsTmFtZSwgIiIsIEVNUFRZX0FUVFMpOworICAgIH0KKworCisgICAgLyoqCisgICAgICogU3RhcnQgYSBuZXcgZWxlbWVudCB3aXRob3V0IGEgcW5hbWUsIGF0dHJpYnV0ZXMgb3IgYSBOYW1lc3BhY2UgVVJJLgorICAgICAqCisgICAgICogPHA+VGhpcyBtZXRob2Qgd2lsbCBwcm92aWRlIGFuIGVtcHR5IHN0cmluZyBmb3IgdGhlCisgICAgICogTmFtZXNwYWNlIFVSSSwgYW5kIGVtcHR5IHN0cmluZyBmb3IgdGhlIHF1YWxpZmllZCBuYW1lLAorICAgICAqIGFuZCBhIGRlZmF1bHQgZW1wdHkgYXR0cmlidXRlIGxpc3QuIEl0IGludm9rZXMKKyAgICAgKiAjc3RhcnRFbGVtZW50KFN0cmluZywgU3RyaW5nLCBTdHJpbmcsIEF0dHJpYnV0ZXMpfQorICAgICAqIGRpcmVjdGx5LjwvcD4KKyAgICAgKgorICAgICAqIEBwYXJhbSBsb2NhbE5hbWUgVGhlIGVsZW1lbnQncyBsb2NhbCBuYW1lLgorICAgICAqIEBleGNlcHRpb24gb3JnLnhtbC5zYXguU0FYRXhjZXB0aW9uIElmIHRoZXJlIGlzIGFuIGVycm9yCisgICAgICogICAgICAgICAgICB3cml0aW5nIHRoZSBzdGFydCB0YWcsIG9yIGlmIGEgaGFuZGxlciBmdXJ0aGVyIGRvd24KKyAgICAgKiAgICAgICAgICAgIHRoZSBmaWx0ZXIgY2hhaW4gcmFpc2VzIGFuIGV4Y2VwdGlvbi4KKyAgICAgKiBAc2VlICNzdGFydEVsZW1lbnQoU3RyaW5nLCBTdHJpbmcsIFN0cmluZywgQXR0cmlidXRlcykKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzdGFydEVsZW1lbnQgKFN0cmluZyBsb2NhbE5hbWUpCisgICAgICAgIHRocm93cyBTQVhFeGNlcHRpb24KKyAgICB7CisgICAgICAgIHN0YXJ0RWxlbWVudCgiIiwgbG9jYWxOYW1lLCAiIiwgRU1QVFlfQVRUUyk7CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiBFbmQgYW4gZWxlbWVudCB3aXRob3V0IGEgcW5hbWUuCisgICAgICoKKyAgICAgKiA8cD5UaGlzIG1ldGhvZCB3aWxsIHN1cHBseSBhbiBlbXB0eSBzdHJpbmcgZm9yIHRoZSBxTmFtZS4KKyAgICAgKiBJdCBpbnZva2VzIHtAbGluayAjZW5kRWxlbWVudChTdHJpbmcsIFN0cmluZywgU3RyaW5nKX0KKyAgICAgKiBkaXJlY3RseS48L3A+CisgICAgICoKKyAgICAgKiBAcGFyYW0gdXJpIFRoZSBlbGVtZW50J3MgTmFtZXNwYWNlIFVSSS4KKyAgICAgKiBAcGFyYW0gbG9jYWxOYW1lIFRoZSBlbGVtZW50J3MgbG9jYWwgbmFtZS4KKyAgICAgKiBAZXhjZXB0aW9uIG9yZy54bWwuc2F4LlNBWEV4Y2VwdGlvbiBJZiB0aGVyZSBpcyBhbiBlcnJvcgorICAgICAqICAgICAgICAgICAgd3JpdGluZyB0aGUgZW5kIHRhZywgb3IgaWYgYSBoYW5kbGVyIGZ1cnRoZXIgZG93bgorICAgICAqICAgICAgICAgICAgdGhlIGZpbHRlciBjaGFpbiByYWlzZXMgYW4gZXhjZXB0aW9uLgorICAgICAqIEBzZWUgI2VuZEVsZW1lbnQoU3RyaW5nLCBTdHJpbmcsIFN0cmluZykKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBlbmRFbGVtZW50IChTdHJpbmcgdXJpLCBTdHJpbmcgbG9jYWxOYW1lKQorICAgICAgICB0aHJvd3MgU0FYRXhjZXB0aW9uCisgICAgeworICAgICAgICBlbmRFbGVtZW50KHVyaSwgbG9jYWxOYW1lLCAiIik7CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiBFbmQgYW4gZWxlbWVudCB3aXRob3V0IGEgTmFtZXNwYWNlIFVSSSBvciBxbmFtZS4KKyAgICAgKgorICAgICAqIDxwPlRoaXMgbWV0aG9kIHdpbGwgc3VwcGx5IGFuIGVtcHR5IHN0cmluZyBmb3IgdGhlIHFOYW1lCisgICAgICogYW5kIGFuIGVtcHR5IHN0cmluZyBmb3IgdGhlIE5hbWVzcGFjZSBVUkkuCisgICAgICogSXQgaW52b2tlcyB7QGxpbmsgI2VuZEVsZW1lbnQoU3RyaW5nLCBTdHJpbmcsIFN0cmluZyl9CisgICAgICogZGlyZWN0bHkuPC9wPgorICAgICAqCisgICAgICogQHBhcmFtIGxvY2FsTmFtZSBUaGUgZWxlbWVudCdzIGxvY2FsIG5hbWUuCisgICAgICogQGV4Y2VwdGlvbiBvcmcueG1sLnNheC5TQVhFeGNlcHRpb24gSWYgdGhlcmUgaXMgYW4gZXJyb3IKKyAgICAgKiAgICAgICAgICAgIHdyaXRpbmcgdGhlIGVuZCB0YWcsIG9yIGlmIGEgaGFuZGxlciBmdXJ0aGVyIGRvd24KKyAgICAgKiAgICAgICAgICAgIHRoZSBmaWx0ZXIgY2hhaW4gcmFpc2VzIGFuIGV4Y2VwdGlvbi4KKyAgICAgKiBAc2VlICNlbmRFbGVtZW50KFN0cmluZywgU3RyaW5nLCBTdHJpbmcpCisgICAgICovCisgICAgcHVibGljIHZvaWQgZW5kRWxlbWVudCAoU3RyaW5nIGxvY2FsTmFtZSkKKyAgICAgICAgdGhyb3dzIFNBWEV4Y2VwdGlvbgorICAgIHsKKyAgICAgICAgZW5kRWxlbWVudCgiIiwgbG9jYWxOYW1lLCAiIik7CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiBBZGQgYW4gZW1wdHkgZWxlbWVudCB3aXRob3V0IGEgcW5hbWUgb3IgYXR0cmlidXRlcy4KKyAgICAgKgorICAgICAqIDxwPlRoaXMgbWV0aG9kIHdpbGwgc3VwcGx5IGFuIGVtcHR5IHN0cmluZyBmb3IgdGhlIHFuYW1lCisgICAgICogYW5kIGFuIGVtcHR5IGF0dHJpYnV0ZSBsaXN0LiAgSXQgaW52b2tlcworICAgICAqIHtAbGluayAjZW1wdHlFbGVtZW50KFN0cmluZywgU3RyaW5nLCBTdHJpbmcsIEF0dHJpYnV0ZXMpfSAKKyAgICAgKiBkaXJlY3RseS48L3A+CisgICAgICoKKyAgICAgKiBAcGFyYW0gdXJpIFRoZSBlbGVtZW50J3MgTmFtZXNwYWNlIFVSSS4KKyAgICAgKiBAcGFyYW0gbG9jYWxOYW1lIFRoZSBlbGVtZW50J3MgbG9jYWwgbmFtZS4KKyAgICAgKiBAZXhjZXB0aW9uIG9yZy54bWwuc2F4LlNBWEV4Y2VwdGlvbiBJZiB0aGVyZSBpcyBhbiBlcnJvcgorICAgICAqICAgICAgICAgICAgd3JpdGluZyB0aGUgZW1wdHkgdGFnLCBvciBpZiBhIGhhbmRsZXIgZnVydGhlciBkb3duCisgICAgICogICAgICAgICAgICB0aGUgZmlsdGVyIGNoYWluIHJhaXNlcyBhbiBleGNlcHRpb24uCisgICAgICogQHNlZSAjZW1wdHlFbGVtZW50KFN0cmluZywgU3RyaW5nLCBTdHJpbmcsIEF0dHJpYnV0ZXMpCisgICAgICovCisgICAgcHVibGljIHZvaWQgZW1wdHlFbGVtZW50IChTdHJpbmcgdXJpLCBTdHJpbmcgbG9jYWxOYW1lKQorICAgICAgICB0aHJvd3MgU0FYRXhjZXB0aW9uCisgICAgeworICAgICAgICBlbXB0eUVsZW1lbnQodXJpLCBsb2NhbE5hbWUsICIiLCBFTVBUWV9BVFRTKTsKKyAgICB9CisKKworICAgIC8qKgorICAgICAqIEFkZCBhbiBlbXB0eSBlbGVtZW50IHdpdGhvdXQgYSBOYW1lc3BhY2UgVVJJLCBxbmFtZSBvciBhdHRyaWJ1dGVzLgorICAgICAqCisgICAgICogPHA+VGhpcyBtZXRob2Qgd2lsbCBzdXBwbHkgYW4gZW1wdHkgc3RyaW5nIGZvciB0aGUgcW5hbWUsCisgICAgICogYW5kIGVtcHR5IHN0cmluZyBmb3IgdGhlIE5hbWVzcGFjZSBVUkksIGFuZCBhbiBlbXB0eQorICAgICAqIGF0dHJpYnV0ZSBsaXN0LiAgSXQgaW52b2tlcworICAgICAqIHtAbGluayAjZW1wdHlFbGVtZW50KFN0cmluZywgU3RyaW5nLCBTdHJpbmcsIEF0dHJpYnV0ZXMpfSAKKyAgICAgKiBkaXJlY3RseS48L3A+CisgICAgICoKKyAgICAgKiBAcGFyYW0gbG9jYWxOYW1lIFRoZSBlbGVtZW50J3MgbG9jYWwgbmFtZS4KKyAgICAgKiBAZXhjZXB0aW9uIG9yZy54bWwuc2F4LlNBWEV4Y2VwdGlvbiBJZiB0aGVyZSBpcyBhbiBlcnJvcgorICAgICAqICAgICAgICAgICAgd3JpdGluZyB0aGUgZW1wdHkgdGFnLCBvciBpZiBhIGhhbmRsZXIgZnVydGhlciBkb3duCisgICAgICogICAgICAgICAgICB0aGUgZmlsdGVyIGNoYWluIHJhaXNlcyBhbiBleGNlcHRpb24uCisgICAgICogQHNlZSAjZW1wdHlFbGVtZW50KFN0cmluZywgU3RyaW5nLCBTdHJpbmcsIEF0dHJpYnV0ZXMpCisgICAgICovCisgICAgcHVibGljIHZvaWQgZW1wdHlFbGVtZW50IChTdHJpbmcgbG9jYWxOYW1lKQorICAgICAgICB0aHJvd3MgU0FYRXhjZXB0aW9uCisgICAgeworICAgICAgICBlbXB0eUVsZW1lbnQoIiIsIGxvY2FsTmFtZSwgIiIsIEVNUFRZX0FUVFMpOworICAgIH0KKworCisgICAgLyoqCisgICAgICogV3JpdGUgYW4gZWxlbWVudCB3aXRoIGNoYXJhY3RlciBkYXRhIGNvbnRlbnQuCisgICAgICoKKyAgICAgKiA8cD5UaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHRvIHdyaXRlIGEgY29tcGxldGUgZWxlbWVudAorICAgICAqIHdpdGggY2hhcmFjdGVyIGRhdGEgY29udGVudCwgaW5jbHVkaW5nIHRoZSBzdGFydCB0YWcKKyAgICAgKiBhbmQgZW5kIHRhZy48L3A+CisgICAgICoKKyAgICAgKiA8cD5UaGlzIG1ldGhvZCBpbnZva2VzCisgICAgICoge0BsaW5rICNzdGFydEVsZW1lbnQoU3RyaW5nLCBTdHJpbmcsIFN0cmluZywgQXR0cmlidXRlcyl9LAorICAgICAqIGZvbGxvd2VkIGJ5CisgICAgICoge0BsaW5rICNjaGFyYWN0ZXJzKFN0cmluZyl9LCBmb2xsb3dlZCBieQorICAgICAqIHtAbGluayAjZW5kRWxlbWVudChTdHJpbmcsIFN0cmluZywgU3RyaW5nKX0uPC9wPgorICAgICAqCisgICAgICogQHBhcmFtIHVyaSBUaGUgZWxlbWVudCdzIE5hbWVzcGFjZSBVUkkuCisgICAgICogQHBhcmFtIGxvY2FsTmFtZSBUaGUgZWxlbWVudCdzIGxvY2FsIG5hbWUuCisgICAgICogQHBhcmFtIHFOYW1lIFRoZSBlbGVtZW50J3MgZGVmYXVsdCBxdWFsaWZpZWQgbmFtZS4KKyAgICAgKiBAcGFyYW0gYXR0cyBUaGUgZWxlbWVudCdzIGF0dHJpYnV0ZXMuCisgICAgICogQHBhcmFtIGNvbnRlbnQgVGhlIGNoYXJhY3RlciBkYXRhIGNvbnRlbnQuCisgICAgICogQGV4Y2VwdGlvbiBvcmcueG1sLnNheC5TQVhFeGNlcHRpb24gSWYgdGhlcmUgaXMgYW4gZXJyb3IKKyAgICAgKiAgICAgICAgICAgIHdyaXRpbmcgdGhlIGVtcHR5IHRhZywgb3IgaWYgYSBoYW5kbGVyIGZ1cnRoZXIgZG93bgorICAgICAqICAgICAgICAgICAgdGhlIGZpbHRlciBjaGFpbiByYWlzZXMgYW4gZXhjZXB0aW9uLgorICAgICAqIEBzZWUgI3N0YXJ0RWxlbWVudChTdHJpbmcsIFN0cmluZywgU3RyaW5nLCBBdHRyaWJ1dGVzKQorICAgICAqIEBzZWUgI2NoYXJhY3RlcnMoU3RyaW5nKQorICAgICAqIEBzZWUgI2VuZEVsZW1lbnQoU3RyaW5nLCBTdHJpbmcsIFN0cmluZykKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBkYXRhRWxlbWVudCAoU3RyaW5nIHVyaSwgU3RyaW5nIGxvY2FsTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHFOYW1lLCBBdHRyaWJ1dGVzIGF0dHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBjb250ZW50KQorICAgICAgICB0aHJvd3MgU0FYRXhjZXB0aW9uCisgICAgeworICAgICAgICBzdGFydEVsZW1lbnQodXJpLCBsb2NhbE5hbWUsIHFOYW1lLCBhdHRzKTsKKyAgICAgICAgY2hhcmFjdGVycyhjb250ZW50KTsKKyAgICAgICAgZW5kRWxlbWVudCh1cmksIGxvY2FsTmFtZSwgcU5hbWUpOworICAgIH0KKworCisgICAgLyoqCisgICAgICogV3JpdGUgYW4gZWxlbWVudCB3aXRoIGNoYXJhY3RlciBkYXRhIGNvbnRlbnQgYnV0IG5vIGF0dHJpYnV0ZXMuCisgICAgICoKKyAgICAgKiA8cD5UaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHRvIHdyaXRlIGEgY29tcGxldGUgZWxlbWVudAorICAgICAqIHdpdGggY2hhcmFjdGVyIGRhdGEgY29udGVudCwgaW5jbHVkaW5nIHRoZSBzdGFydCB0YWcKKyAgICAgKiBhbmQgZW5kIHRhZy4gIFRoaXMgbWV0aG9kIHByb3ZpZGVzIGFuIGVtcHR5IHN0cmluZworICAgICAqIGZvciB0aGUgcW5hbWUgYW5kIGFuIGVtcHR5IGF0dHJpYnV0ZSBsaXN0LjwvcD4KKyAgICAgKgorICAgICAqIDxwPlRoaXMgbWV0aG9kIGludm9rZXMKKyAgICAgKiB7QGxpbmsgI3N0YXJ0RWxlbWVudChTdHJpbmcsIFN0cmluZywgU3RyaW5nLCBBdHRyaWJ1dGVzKX0sCisgICAgICogZm9sbG93ZWQgYnkKKyAgICAgKiB7QGxpbmsgI2NoYXJhY3RlcnMoU3RyaW5nKX0sIGZvbGxvd2VkIGJ5CisgICAgICoge0BsaW5rICNlbmRFbGVtZW50KFN0cmluZywgU3RyaW5nLCBTdHJpbmcpfS48L3A+CisgICAgICoKKyAgICAgKiBAcGFyYW0gdXJpIFRoZSBlbGVtZW50J3MgTmFtZXNwYWNlIFVSSS4KKyAgICAgKiBAcGFyYW0gbG9jYWxOYW1lIFRoZSBlbGVtZW50J3MgbG9jYWwgbmFtZS4KKyAgICAgKiBAcGFyYW0gY29udGVudCBUaGUgY2hhcmFjdGVyIGRhdGEgY29udGVudC4KKyAgICAgKiBAZXhjZXB0aW9uIG9yZy54bWwuc2F4LlNBWEV4Y2VwdGlvbiBJZiB0aGVyZSBpcyBhbiBlcnJvcgorICAgICAqICAgICAgICAgICAgd3JpdGluZyB0aGUgZW1wdHkgdGFnLCBvciBpZiBhIGhhbmRsZXIgZnVydGhlciBkb3duCisgICAgICogICAgICAgICAgICB0aGUgZmlsdGVyIGNoYWluIHJhaXNlcyBhbiBleGNlcHRpb24uCisgICAgICogQHNlZSAjc3RhcnRFbGVtZW50KFN0cmluZywgU3RyaW5nLCBTdHJpbmcsIEF0dHJpYnV0ZXMpCisgICAgICogQHNlZSAjY2hhcmFjdGVycyhTdHJpbmcpCisgICAgICogQHNlZSAjZW5kRWxlbWVudChTdHJpbmcsIFN0cmluZywgU3RyaW5nKQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGRhdGFFbGVtZW50IChTdHJpbmcgdXJpLCBTdHJpbmcgbG9jYWxOYW1lLCBTdHJpbmcgY29udGVudCkKKyAgICAgICAgdGhyb3dzIFNBWEV4Y2VwdGlvbgorICAgIHsKKyAgICAgICAgZGF0YUVsZW1lbnQodXJpLCBsb2NhbE5hbWUsICIiLCBFTVBUWV9BVFRTLCBjb250ZW50KTsKKyAgICB9CisKKworICAgIC8qKgorICAgICAqIFdyaXRlIGFuIGVsZW1lbnQgd2l0aCBjaGFyYWN0ZXIgZGF0YSBjb250ZW50IGJ1dCBubyBhdHRyaWJ1dGVzIG9yIE5hbWVzcGFjZSBVUkkuCisgICAgICoKKyAgICAgKiA8cD5UaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHRvIHdyaXRlIGEgY29tcGxldGUgZWxlbWVudAorICAgICAqIHdpdGggY2hhcmFjdGVyIGRhdGEgY29udGVudCwgaW5jbHVkaW5nIHRoZSBzdGFydCB0YWcKKyAgICAgKiBhbmQgZW5kIHRhZy4gIFRoZSBtZXRob2QgcHJvdmlkZXMgYW4gZW1wdHkgc3RyaW5nIGZvciB0aGUKKyAgICAgKiBOYW1lc3BhY2UgVVJJLCBhbmQgZW1wdHkgc3RyaW5nIGZvciB0aGUgcXVhbGlmaWVkIG5hbWUsCisgICAgICogYW5kIGFuIGVtcHR5IGF0dHJpYnV0ZSBsaXN0LjwvcD4KKyAgICAgKgorICAgICAqIDxwPlRoaXMgbWV0aG9kIGludm9rZXMKKyAgICAgKiB7QGxpbmsgI3N0YXJ0RWxlbWVudChTdHJpbmcsIFN0cmluZywgU3RyaW5nLCBBdHRyaWJ1dGVzKX0sCisgICAgICogZm9sbG93ZWQgYnkKKyAgICAgKiB7QGxpbmsgI2NoYXJhY3RlcnMoU3RyaW5nKX0sIGZvbGxvd2VkIGJ5CisgICAgICoge0BsaW5rICNlbmRFbGVtZW50KFN0cmluZywgU3RyaW5nLCBTdHJpbmcpfS48L3A+CisgICAgICoKKyAgICAgKiBAcGFyYW0gbG9jYWxOYW1lIFRoZSBlbGVtZW50J3MgbG9jYWwgbmFtZS4KKyAgICAgKiBAcGFyYW0gY29udGVudCBUaGUgY2hhcmFjdGVyIGRhdGEgY29udGVudC4KKyAgICAgKiBAZXhjZXB0aW9uIG9yZy54bWwuc2F4LlNBWEV4Y2VwdGlvbiBJZiB0aGVyZSBpcyBhbiBlcnJvcgorICAgICAqICAgICAgICAgICAgd3JpdGluZyB0aGUgZW1wdHkgdGFnLCBvciBpZiBhIGhhbmRsZXIgZnVydGhlciBkb3duCisgICAgICogICAgICAgICAgICB0aGUgZmlsdGVyIGNoYWluIHJhaXNlcyBhbiBleGNlcHRpb24uCisgICAgICogQHNlZSAjc3RhcnRFbGVtZW50KFN0cmluZywgU3RyaW5nLCBTdHJpbmcsIEF0dHJpYnV0ZXMpCisgICAgICogQHNlZSAjY2hhcmFjdGVycyhTdHJpbmcpCisgICAgICogQHNlZSAjZW5kRWxlbWVudChTdHJpbmcsIFN0cmluZywgU3RyaW5nKQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGRhdGFFbGVtZW50IChTdHJpbmcgbG9jYWxOYW1lLCBTdHJpbmcgY29udGVudCkKKyAgICAgICAgdGhyb3dzIFNBWEV4Y2VwdGlvbgorICAgIHsKKyAgICAgICAgZGF0YUVsZW1lbnQoIiIsIGxvY2FsTmFtZSwgIiIsIEVNUFRZX0FUVFMsIGNvbnRlbnQpOworICAgIH0KKworCisgICAgLyoqCisgICAgICogV3JpdGUgYSBzdHJpbmcgb2YgY2hhcmFjdGVyIGRhdGEsIHdpdGggWE1MIGVzY2FwaW5nLgorICAgICAqCisgICAgICogPHA+VGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCB0aGF0IHRha2VzIGFuIFhNTAorICAgICAqIFN0cmluZywgY29udmVydHMgaXQgdG8gYSBjaGFyYWN0ZXIgYXJyYXksIHRoZW4gaW52b2tlcworICAgICAqIHtAbGluayAjY2hhcmFjdGVycyhjaGFyW10sIGludCwgaW50KX0uPC9wPgorICAgICAqCisgICAgICogQHBhcmFtIGRhdGEgVGhlIGNoYXJhY3RlciBkYXRhLgorICAgICAqIEBleGNlcHRpb24gb3JnLnhtbC5zYXguU0FYRXhjZXB0aW9uIElmIHRoZXJlIGlzIGFuIGVycm9yCisgICAgICogICAgICAgICAgICB3cml0aW5nIHRoZSBzdHJpbmcsIG9yIGlmIGEgaGFuZGxlciBmdXJ0aGVyIGRvd24KKyAgICAgKiAgICAgICAgICAgIHRoZSBmaWx0ZXIgY2hhaW4gcmFpc2VzIGFuIGV4Y2VwdGlvbi4KKyAgICAgKiBAc2VlICNjaGFyYWN0ZXJzKGNoYXJbXSwgaW50LCBpbnQpCisgICAgICovCisgICAgcHVibGljIHZvaWQgY2hhcmFjdGVycyAoU3RyaW5nIGRhdGEpCisgICAgICAgIHRocm93cyBTQVhFeGNlcHRpb24KKyAgICB7CisgICAgICAgIGNoYXIgY2hbXSA9IGRhdGEudG9DaGFyQXJyYXkoKTsKKyAgICAgICAgY2hhcmFjdGVycyhjaCwgMCwgY2gubGVuZ3RoKTsKKyAgICB9CisKKworDAorICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgICAgLy8gSW50ZXJuYWwgbWV0aG9kcy4KKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICAgIAorCisgICAgLyoqCisgICAgICogRm9yY2UgYWxsIE5hbWVzcGFjZXMgdG8gYmUgZGVjbGFyZWQuCisgICAgICoKKyAgICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIG9uIHRoZSByb290IGVsZW1lbnQgdG8gZW5zdXJlIHRoYXQKKyAgICAgKiB0aGUgcHJlZGVjbGFyZWQgTmFtZXNwYWNlcyBhbGwgYXBwZWFyLgorICAgICAqLworICAgIHByaXZhdGUgdm9pZCBmb3JjZU5TRGVjbHMgKCkKKyAgICB7CisgICAgICAgIEVudW1lcmF0aW9uIHByZWZpeGVzID0gZm9yY2VkRGVjbFRhYmxlLmtleXMoKTsKKyAgICAgICAgd2hpbGUgKHByZWZpeGVzLmhhc01vcmVFbGVtZW50cygpKSB7CisgICAgICAgICAgICBTdHJpbmcgcHJlZml4ID0gKFN0cmluZylwcmVmaXhlcy5uZXh0RWxlbWVudCgpOworICAgICAgICAgICAgZG9QcmVmaXgocHJlZml4LCBudWxsLCB0cnVlKTsKKyAgICAgICAgfQorICAgIH0KKworCisgICAgLyoqCisgICAgICogRGV0ZXJtaW5lIHRoZSBwcmVmaXggZm9yIGFuIGVsZW1lbnQgb3IgYXR0cmlidXRlIG5hbWUuCisgICAgICoKKyAgICAgKiBUT0RPOiB0aGlzIG1ldGhvZCBwcm9iYWJseSBuZWVkcyBzb21lIGNsZWFudXAuCisgICAgICoKKyAgICAgKiBAcGFyYW0gdXJpIFRoZSBOYW1lc3BhY2UgVVJJLgorICAgICAqIEBwYXJhbSBxTmFtZSBUaGUgcXVhbGlmaWVkIG5hbWUgKG9wdGlvbmFsKTsgdGhpcyB3aWxsIGJlIHVzZWQKKyAgICAgKiAgICAgICAgdG8gaW5kaWNhdGUgdGhlIHByZWZlcnJlZCBwcmVmaXggaWYgbm9uZSBpcyBjdXJyZW50bHkKKyAgICAgKiAgICAgICAgYm91bmQuCisgICAgICogQHBhcmFtIGlzRWxlbWVudCB0cnVlIGlmIHRoaXMgaXMgYW4gZWxlbWVudCBuYW1lLCBmYWxzZQorICAgICAqICAgICAgICBpZiBpdCBpcyBhbiBhdHRyaWJ1dGUgbmFtZSAod2hpY2ggY2Fubm90IHVzZSB0aGUKKyAgICAgKiAgICAgICAgZGVmYXVsdCBOYW1lc3BhY2UpLgorICAgICAqLworICAgIHByaXZhdGUgU3RyaW5nIGRvUHJlZml4IChTdHJpbmcgdXJpLCBTdHJpbmcgcU5hbWUsIGJvb2xlYW4gaXNFbGVtZW50KQorICAgIHsKKyAgICAgICAgU3RyaW5nIGRlZmF1bHROUyA9IG5zU3VwcG9ydC5nZXRVUkkoIiIpOworICAgICAgICBpZiAoIiIuZXF1YWxzKHVyaSkpIHsKKyAgICAgICAgICAgIGlmIChpc0VsZW1lbnQgJiYgZGVmYXVsdE5TICE9IG51bGwpCisgICAgICAgICAgICAgICAgbnNTdXBwb3J0LmRlY2xhcmVQcmVmaXgoIiIsICIiKTsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAgICAgIFN0cmluZyBwcmVmaXg7CisgICAgICAgIGlmIChpc0VsZW1lbnQgJiYgZGVmYXVsdE5TICE9IG51bGwgJiYgdXJpLmVxdWFscyhkZWZhdWx0TlMpKSB7CisgICAgICAgICAgICBwcmVmaXggPSAiIjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHByZWZpeCA9IG5zU3VwcG9ydC5nZXRQcmVmaXgodXJpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAocHJlZml4ICE9IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybiBwcmVmaXg7CisgICAgICAgIH0KKyAgICAgICAgcHJlZml4ID0gKFN0cmluZykgZG9uZURlY2xUYWJsZS5nZXQodXJpKTsKKyAgICAgICAgaWYgKHByZWZpeCAhPSBudWxsICYmCisgICAgICAgICAgICAoKCFpc0VsZW1lbnQgfHwgZGVmYXVsdE5TICE9IG51bGwpICYmCisgICAgICAgICAgICAgIiIuZXF1YWxzKHByZWZpeCkgfHwgbnNTdXBwb3J0LmdldFVSSShwcmVmaXgpICE9IG51bGwpKSB7CisgICAgICAgICAgICBwcmVmaXggPSBudWxsOworICAgICAgICB9CisgICAgICAgIGlmIChwcmVmaXggPT0gbnVsbCkgeworICAgICAgICAgICAgcHJlZml4ID0gKFN0cmluZykgcHJlZml4VGFibGUuZ2V0KHVyaSk7CisgICAgICAgICAgICBpZiAocHJlZml4ICE9IG51bGwgJiYKKyAgICAgICAgICAgICAgICAoKCFpc0VsZW1lbnQgfHwgZGVmYXVsdE5TICE9IG51bGwpICYmCisgICAgICAgICAgICAgICAgICIiLmVxdWFscyhwcmVmaXgpIHx8IG5zU3VwcG9ydC5nZXRVUkkocHJlZml4KSAhPSBudWxsKSkgeworICAgICAgICAgICAgICAgIHByZWZpeCA9IG51bGw7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHByZWZpeCA9PSBudWxsICYmIHFOYW1lICE9IG51bGwgJiYgISIiLmVxdWFscyhxTmFtZSkpIHsKKyAgICAgICAgICAgIGludCBpID0gcU5hbWUuaW5kZXhPZignOicpOworICAgICAgICAgICAgaWYgKGkgPT0gLTEpIHsKKyAgICAgICAgICAgICAgICBpZiAoaXNFbGVtZW50ICYmIGRlZmF1bHROUyA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIHByZWZpeCA9ICIiOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcHJlZml4ID0gcU5hbWUuc3Vic3RyaW5nKDAsIGkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGZvciAoOworICAgICAgICAgICAgIHByZWZpeCA9PSBudWxsIHx8IG5zU3VwcG9ydC5nZXRVUkkocHJlZml4KSAhPSBudWxsOworICAgICAgICAgICAgIHByZWZpeCA9ICJfX05TIiArICsrcHJlZml4Q291bnRlcikKKyAgICAgICAgICAgIDsKKyAgICAgICAgbnNTdXBwb3J0LmRlY2xhcmVQcmVmaXgocHJlZml4LCB1cmkpOworICAgICAgICBkb25lRGVjbFRhYmxlLnB1dCh1cmksIHByZWZpeCk7CisgICAgICAgIHJldHVybiBwcmVmaXg7CisgICAgfQorICAgIAorCisgICAgLyoqCisgICAgICogV3JpdGUgYSByYXcgY2hhcmFjdGVyLgorICAgICAqCisgICAgICogQHBhcmFtIGMgVGhlIGNoYXJhY3RlciB0byB3cml0ZS4KKyAgICAgKiBAZXhjZXB0aW9uIG9yZy54bWwuc2F4LlNBWEV4Y2VwdGlvbiBJZiB0aGVyZSBpcyBhbiBlcnJvciB3cml0aW5nCisgICAgICogICAgICAgICAgICB0aGUgY2hhcmFjdGVyLCB0aGlzIG1ldGhvZCB3aWxsIHRocm93IGFuIElPRXhjZXB0aW9uCisgICAgICogICAgICAgICAgICB3cmFwcGVkIGluIGEgU0FYRXhjZXB0aW9uLgorICAgICAqLworICAgIHByaXZhdGUgdm9pZCB3cml0ZSAoY2hhciBjKQorICAgICAgICB0aHJvd3MgU0FYRXhjZXB0aW9uCisgICAgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgb3V0cHV0LndyaXRlKGMpOworICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgU0FYRXhjZXB0aW9uKGUpOworICAgICAgICB9CisgICAgfQorICAgIAorCisgICAgLyoqCisgICAgICogV3JpdGUgYSByYXcgc3RyaW5nLgorICAgICAqCisgICAgICogQHBhcmFtIHMKKyAgICAgKiBAZXhjZXB0aW9uIG9yZy54bWwuc2F4LlNBWEV4Y2VwdGlvbiBJZiB0aGVyZSBpcyBhbiBlcnJvciB3cml0aW5nCisgICAgICogICAgICAgICAgICB0aGUgc3RyaW5nLCB0aGlzIG1ldGhvZCB3aWxsIHRocm93IGFuIElPRXhjZXB0aW9uCisgICAgICogICAgICAgICAgICB3cmFwcGVkIGluIGEgU0FYRXhjZXB0aW9uCisgICAgICovCisgICAgcHJpdmF0ZSB2b2lkIHdyaXRlIChTdHJpbmcgcykKKyAgICB0aHJvd3MgU0FYRXhjZXB0aW9uCisgICAgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgb3V0cHV0LndyaXRlKHMpOworICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgU0FYRXhjZXB0aW9uKGUpOworICAgICAgICB9CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiBXcml0ZSBvdXQgYW4gYXR0cmlidXRlIGxpc3QsIGVzY2FwaW5nIHZhbHVlcy4KKyAgICAgKgorICAgICAqIFRoZSBuYW1lcyB3aWxsIGhhdmUgcHJlZml4ZXMgYWRkZWQgdG8gdGhlbS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBhdHRzIFRoZSBhdHRyaWJ1dGUgbGlzdCB0byB3cml0ZS4KKyAgICAgKiBAZXhjZXB0aW9uIG9yZy54bWwuU0FYRXhjZXB0aW9uIElmIHRoZXJlIGlzIGFuIGVycm9yIHdyaXRpbmcKKyAgICAgKiAgICAgICAgICAgIHRoZSBhdHRyaWJ1dGUgbGlzdCwgdGhpcyBtZXRob2Qgd2lsbCB0aHJvdyBhbgorICAgICAqICAgICAgICAgICAgSU9FeGNlcHRpb24gd3JhcHBlZCBpbiBhIFNBWEV4Y2VwdGlvbi4KKyAgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgd3JpdGVBdHRyaWJ1dGVzIChBdHRyaWJ1dGVzIGF0dHMpCisgICAgICAgIHRocm93cyBTQVhFeGNlcHRpb24KKyAgICB7CisgICAgICAgIGludCBsZW4gPSBhdHRzLmdldExlbmd0aCgpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisgICAgICAgICAgICBjaGFyIGNoW10gPSBhdHRzLmdldFZhbHVlKGkpLnRvQ2hhckFycmF5KCk7CisgICAgICAgICAgICB3cml0ZSgnICcpOworICAgICAgICAgICAgd3JpdGVOYW1lKGF0dHMuZ2V0VVJJKGkpLCBhdHRzLmdldExvY2FsTmFtZShpKSwKKyAgICAgICAgICAgICAgICAgICAgICBhdHRzLmdldFFOYW1lKGkpLCBmYWxzZSk7CisgICAgICAgICAgICBpZiAoaHRtbE1vZGUgJiYKKyAgICAgICAgICAgICAgICBib29sZWFuQXR0cmlidXRlKGF0dHMuZ2V0TG9jYWxOYW1lKGkpLCBhdHRzLmdldFFOYW1lKGkpLCBhdHRzLmdldFZhbHVlKGkpKSkgYnJlYWs7CisgICAgICAgICAgICB3cml0ZSgiPVwiIik7CisgICAgICAgICAgICB3cml0ZUVzYyhjaCwgMCwgY2gubGVuZ3RoLCB0cnVlKTsKKyAgICAgICAgICAgIHdyaXRlKCciJyk7CisgICAgICAgIH0KKyAgICB9CisKKworICAgIHByaXZhdGUgU3RyaW5nW10gYm9vbGVhbnMgPSB7ImNoZWNrZWQiLCAiY29tcGFjdCIsICJkZWNsYXJlIiwgImRlZmVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkaXNhYmxlZCIsICJpc21hcCIsICJtdWx0aXBsZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibm9ocmVmIiwgIm5vcmVzaXplIiwgIm5vc2hhZGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vd3JhcCIsICJyZWFkb25seSIsICJzZWxlY3RlZCJ9OworCisgICAgLy8gUmV0dXJuIHRydWUgaWYgdGhlIGF0dHJpYnV0ZSBpcyBhbiBIVE1MIGJvb2xlYW4gZnJvbSB0aGUgYWJvdmUgbGlzdC4KKyAgICBwcml2YXRlIGJvb2xlYW4gYm9vbGVhbkF0dHJpYnV0ZSAoU3RyaW5nIGxvY2FsTmFtZSwgU3RyaW5nIHFOYW1lLCBTdHJpbmcgdmFsdWUpCisgICAgeworICAgICAgICBTdHJpbmcgbmFtZSA9IGxvY2FsTmFtZTsKKyAgICAgICAgaWYgKG5hbWUgPT0gbnVsbCkgeworICAgICAgICAgICAgaW50IGkgPSBxTmFtZS5pbmRleE9mKCc6Jyk7CisgICAgICAgICAgICBpZiAoaSAhPSAtMSkgbmFtZSA9IHFOYW1lLnN1YnN0cmluZyhpICsgMSwgcU5hbWUubGVuZ3RoKCkpOworICAgICAgICB9CisgICAgICAgIGlmICghbmFtZS5lcXVhbHModmFsdWUpKSByZXR1cm4gZmFsc2U7CisgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgYm9vbGVhbnMubGVuZ3RoOyBqKyspIHsKKyAgICAgICAgICAgIGlmIChuYW1lLmVxdWFscyhib29sZWFuc1tqXSkpIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLyoqCisgICAgICogV3JpdGUgYW4gYXJyYXkgb2YgZGF0YSBjaGFyYWN0ZXJzIHdpdGggZXNjYXBpbmcuCisgICAgICoKKyAgICAgKiBAcGFyYW0gY2ggVGhlIGFycmF5IG9mIGNoYXJhY3RlcnMuCisgICAgICogQHBhcmFtIHN0YXJ0IFRoZSBzdGFydGluZyBwb3NpdGlvbi4KKyAgICAgKiBAcGFyYW0gbGVuZ3RoIFRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB0byB1c2UuCisgICAgICogQHBhcmFtIGlzQXR0VmFsIHRydWUgaWYgdGhpcyBpcyBhbiBhdHRyaWJ1dGUgdmFsdWUgbGl0ZXJhbC4KKyAgICAgKiBAZXhjZXB0aW9uIG9yZy54bWwuU0FYRXhjZXB0aW9uIElmIHRoZXJlIGlzIGFuIGVycm9yIHdyaXRpbmcKKyAgICAgKiAgICAgICAgICAgIHRoZSBjaGFyYWN0ZXJzLCB0aGlzIG1ldGhvZCB3aWxsIHRocm93IGFuCisgICAgICogICAgICAgICAgICBJT0V4Y2VwdGlvbiB3cmFwcGVkIGluIGEgU0FYRXhjZXB0aW9uLgorICAgICAqLyAgICAKKyAgICBwcml2YXRlIHZvaWQgd3JpdGVFc2MgKGNoYXIgY2hbXSwgaW50IHN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGVuZ3RoLCBib29sZWFuIGlzQXR0VmFsKQorICAgICAgICB0aHJvd3MgU0FYRXhjZXB0aW9uCisgICAgeworICAgICAgICBmb3IgKGludCBpID0gc3RhcnQ7IGkgPCBzdGFydCArIGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBzd2l0Y2ggKGNoW2ldKSB7CisgICAgICAgICAgICBjYXNlICcmJzoKKyAgICAgICAgICAgICAgICB3cml0ZSgiJmFtcDsiKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJzwnOgorICAgICAgICAgICAgICAgIHdyaXRlKCImbHQ7Iik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICc+JzoKKyAgICAgICAgICAgICAgICB3cml0ZSgiJmd0OyIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAnXCInOgorICAgICAgICAgICAgICAgIGlmIChpc0F0dFZhbCkgeworICAgICAgICAgICAgICAgICAgICB3cml0ZSgiJnF1b3Q7Iik7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgd3JpdGUoJ1wiJyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBpZiAoIXVuaWNvZGVNb2RlICYmIGNoW2ldID4gJ1x1MDA3ZicpIHsKKyAgICAgICAgICAgICAgICAgICAgd3JpdGUoIiYjIik7CisgICAgICAgICAgICAgICAgICAgIHdyaXRlKEludGVnZXIudG9TdHJpbmcoY2hbaV0pKTsKKyAgICAgICAgICAgICAgICAgICAgd3JpdGUoJzsnKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICB3cml0ZShjaFtpXSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiBXcml0ZSBvdXQgdGhlIGxpc3Qgb2YgTmFtZXNwYWNlIGRlY2xhcmF0aW9ucy4KKyAgICAgKgorICAgICAqIEBleGNlcHRpb24gb3JnLnhtbC5zYXguU0FYRXhjZXB0aW9uIFRoaXMgbWV0aG9kIHdpbGwgdGhyb3cKKyAgICAgKiAgICAgICAgICAgIGFuIElPRXhjZXB0aW9uIHdyYXBwZWQgaW4gYSBTQVhFeGNlcHRpb24gaWYKKyAgICAgKiAgICAgICAgICAgIHRoZXJlIGlzIGFuIGVycm9yIHdyaXRpbmcgdGhlIE5hbWVzcGFjZQorICAgICAqICAgICAgICAgICAgZGVjbGFyYXRpb25zLgorICAgICAqLyAgICAKKyAgICBwcml2YXRlIHZvaWQgd3JpdGVOU0RlY2xzICgpCisgICAgICAgIHRocm93cyBTQVhFeGNlcHRpb24KKyAgICB7CisgICAgICAgIEVudW1lcmF0aW9uIHByZWZpeGVzID0gbnNTdXBwb3J0LmdldERlY2xhcmVkUHJlZml4ZXMoKTsKKyAgICAgICAgd2hpbGUgKHByZWZpeGVzLmhhc01vcmVFbGVtZW50cygpKSB7CisgICAgICAgICAgICBTdHJpbmcgcHJlZml4ID0gKFN0cmluZykgcHJlZml4ZXMubmV4dEVsZW1lbnQoKTsKKyAgICAgICAgICAgIFN0cmluZyB1cmkgPSBuc1N1cHBvcnQuZ2V0VVJJKHByZWZpeCk7CisgICAgICAgICAgICBpZiAodXJpID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICB1cmkgPSAiIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNoYXIgY2hbXSA9IHVyaS50b0NoYXJBcnJheSgpOworICAgICAgICAgICAgd3JpdGUoJyAnKTsKKyAgICAgICAgICAgIGlmICgiIi5lcXVhbHMocHJlZml4KSkgeworICAgICAgICAgICAgICAgIHdyaXRlKCJ4bWxucz1cIiIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB3cml0ZSgieG1sbnM6Iik7CisgICAgICAgICAgICAgICAgd3JpdGUocHJlZml4KTsKKyAgICAgICAgICAgICAgICB3cml0ZSgiPVwiIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3cml0ZUVzYyhjaCwgMCwgY2gubGVuZ3RoLCB0cnVlKTsKKyAgICAgICAgICAgIHdyaXRlKCdcIicpOworICAgICAgICB9CisgICAgfQorICAgIAorCisgICAgLyoqCisgICAgICogV3JpdGUgYW4gZWxlbWVudCBvciBhdHRyaWJ1dGUgbmFtZS4KKyAgICAgKgorICAgICAqIEBwYXJhbSB1cmkgVGhlIE5hbWVzcGFjZSBVUkkuCisgICAgICogQHBhcmFtIGxvY2FsTmFtZSBUaGUgbG9jYWwgbmFtZS4KKyAgICAgKiBAcGFyYW0gcU5hbWUgVGhlIHByZWZpeGVkIG5hbWUsIGlmIGF2YWlsYWJsZSwgb3IgdGhlIGVtcHR5IHN0cmluZy4KKyAgICAgKiBAcGFyYW0gaXNFbGVtZW50IHRydWUgaWYgdGhpcyBpcyBhbiBlbGVtZW50IG5hbWUsIGZhbHNlIGlmIGl0CisgICAgICogICAgICAgIGlzIGFuIGF0dHJpYnV0ZSBuYW1lLgorICAgICAqIEBleGNlcHRpb24gb3JnLnhtbC5zYXguU0FYRXhjZXB0aW9uIFRoaXMgbWV0aG9kIHdpbGwgdGhyb3cgYW4KKyAgICAgKiAgICAgICAgICAgIElPRXhjZXB0aW9uIHdyYXBwZWQgaW4gYSBTQVhFeGNlcHRpb24gaWYgdGhlcmUgaXMKKyAgICAgKiAgICAgICAgICAgIGFuIGVycm9yIHdyaXRpbmcgdGhlIG5hbWUuCisgICAgICovCisgICAgcHJpdmF0ZSB2b2lkIHdyaXRlTmFtZSAoU3RyaW5nIHVyaSwgU3RyaW5nIGxvY2FsTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBxTmFtZSwgYm9vbGVhbiBpc0VsZW1lbnQpCisgICAgICAgIHRocm93cyBTQVhFeGNlcHRpb24KKyAgICB7CisgICAgICAgIFN0cmluZyBwcmVmaXggPSBkb1ByZWZpeCh1cmksIHFOYW1lLCBpc0VsZW1lbnQpOworICAgICAgICBpZiAocHJlZml4ICE9IG51bGwgJiYgISIiLmVxdWFscyhwcmVmaXgpKSB7CisgICAgICAgICAgICB3cml0ZShwcmVmaXgpOworICAgICAgICAgICAgd3JpdGUoJzonKTsKKyAgICAgICAgfQorICAgICAgICBpZiAobG9jYWxOYW1lICE9IG51bGwgJiYgISIiLmVxdWFscyhsb2NhbE5hbWUpKSB7CisgICAgICAgICAgICB3cml0ZShsb2NhbE5hbWUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaW50IGkgPSBxTmFtZS5pbmRleE9mKCc6Jyk7CisgICAgICAgICAgICB3cml0ZShxTmFtZS5zdWJzdHJpbmcoaSArIDEsIHFOYW1lLmxlbmd0aCgpKSk7CisgICAgICAgIH0KKyAgICB9CisKKwwKKworICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgICAgLy8gRGVmYXVsdCBMZXhpY2FsSGFuZGxlciBpbXBsZW1lbnRhdGlvbgorICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgICAgCisgICAgcHVibGljIHZvaWQgY29tbWVudChjaGFyW10gY2gsIGludCBzdGFydCwgaW50IGxlbmd0aCkgdGhyb3dzIFNBWEV4Y2VwdGlvbgorICAgIHsKKyAgICAgICAgd3JpdGUoIjwhLS0iKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IHN0YXJ0OyBpIDwgc3RhcnQgKyBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIHdyaXRlKGNoW2ldKTsKKyAgICAgICAgICAgICAgICBpZiAoY2hbaV0gPT0gJy0nICYmIGkgKyAxIDw9IHN0YXJ0ICsgbGVuZ3RoICYmIGNoW2krMV0gPT0gJy0nKQorICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGUoJyAnKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIHdyaXRlKCItLT4iKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBlbmRDREFUQSgpIHRocm93cyBTQVhFeGNlcHRpb24geyB9CisgICAgcHVibGljIHZvaWQgZW5kRFREKCkgdGhyb3dzIFNBWEV4Y2VwdGlvbiB7IH0KKyAgICBwdWJsaWMgdm9pZCBlbmRFbnRpdHkoU3RyaW5nIG5hbWUpIHRocm93cyBTQVhFeGNlcHRpb24geyB9CisgICAgcHVibGljIHZvaWQgc3RhcnRDREFUQSgpIHRocm93cyBTQVhFeGNlcHRpb24geyB9CisgICAgcHVibGljIHZvaWQgc3RhcnREVEQoU3RyaW5nIG5hbWUsIFN0cmluZyBwdWJsaWNpZCwgU3RyaW5nIHN5c3RlbWlkKSB0aHJvd3MgU0FYRXhjZXB0aW9uIHsKKyAgICAgICAgaWYgKG5hbWUgPT0gbnVsbCkgcmV0dXJuOyAgICAgICAgICAgICAgIC8vIGNhbid0IGNvcGUKKwlpZiAoaGFzT3V0cHV0RFREKSByZXR1cm47CQkvLyBvbmx5IG9uZSBEVEQKKwloYXNPdXRwdXREVEQgPSB0cnVlOworICAgICAgICB3cml0ZSgiPCFET0NUWVBFICIpOworICAgICAgICB3cml0ZShuYW1lKTsKKyAgICAgICAgaWYgKHN5c3RlbWlkID09IG51bGwpIHN5c3RlbWlkID0gIiI7CisJaWYgKG92ZXJyaWRlU3lzdGVtICE9IG51bGwpIHN5c3RlbWlkID0gb3ZlcnJpZGVTeXN0ZW07CisgICAgICAgIGNoYXIgc3lzcXVvdGUgPSAoc3lzdGVtaWQuaW5kZXhPZignIicpICE9IC0xKSA/ICdcJyc6ICciJzsKKwlpZiAob3ZlcnJpZGVQdWJsaWMgIT0gbnVsbCkgcHVibGljaWQgPSBvdmVycmlkZVB1YmxpYzsKKyAgICAgICAgaWYgKCEocHVibGljaWQgPT0gbnVsbCB8fCAiIi5lcXVhbHMocHVibGljaWQpKSkgeworICAgICAgICAgICAgICAgIGNoYXIgcHVicXVvdGUgPSAocHVibGljaWQuaW5kZXhPZignIicpICE9IC0xKSA/ICdcJyc6ICciJzsKKyAgICAgICAgICAgICAgICB3cml0ZSgiIFBVQkxJQyAiKTsKKyAgICAgICAgICAgICAgICB3cml0ZShwdWJxdW90ZSk7CisgICAgICAgICAgICAgICAgd3JpdGUocHVibGljaWQpOworICAgICAgICAgICAgICAgIHdyaXRlKHB1YnF1b3RlKTsKKyAgICAgICAgICAgICAgICB3cml0ZSgnICcpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgd3JpdGUoIiBTWVNURU0gIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB3cml0ZShzeXNxdW90ZSk7CisgICAgICAgIHdyaXRlKHN5c3RlbWlkKTsKKyAgICAgICAgd3JpdGUoc3lzcXVvdGUpOworICAgICAgICB3cml0ZSgiPlxuIik7CisgICAgICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHN0YXJ0RW50aXR5KFN0cmluZyBuYW1lKSB0aHJvd3MgU0FYRXhjZXB0aW9uIHsgfQorCisKKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICAgIC8vIE91dHB1dCBwcm9wZXJ0aWVzCisgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworICAgIHB1YmxpYyBTdHJpbmcgZ2V0T3V0cHV0UHJvcGVydHkoU3RyaW5nIGtleSkgeworICAgICAgICByZXR1cm4gb3V0cHV0UHJvcGVydGllcy5nZXRQcm9wZXJ0eShrZXkpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldE91dHB1dFByb3BlcnR5KFN0cmluZyBrZXksIFN0cmluZyB2YWx1ZSkgeworICAgICAgICBvdXRwdXRQcm9wZXJ0aWVzLnNldFByb3BlcnR5KGtleSwgdmFsdWUpOworLy8JU3lzdGVtLm91dC5wcmludGxuKCIlJSUlIGtleSA9IFsiICsga2V5ICsgIl0gdmFsdWUgPSBbIiArIHZhbHVlICsiXSIpOworICAgICAgICBpZiAoa2V5LmVxdWFscyhFTkNPRElORykpIHsKKyAgICAgICAgICAgIG91dHB1dEVuY29kaW5nID0gdmFsdWU7CisgICAgICAgICAgICB1bmljb2RlTW9kZSA9IHZhbHVlLnN1YnN0cmluZygwLCAzKS5lcXVhbHNJZ25vcmVDYXNlKCJ1dGYiKTsKKy8vICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiJSUlJSB1bmljb2RlTW9kZSA9ICIgKyB1bmljb2RlTW9kZSk7CisJfQorCWVsc2UgaWYgKGtleS5lcXVhbHMoTUVUSE9EKSkgeworCQlodG1sTW9kZSA9IHZhbHVlLmVxdWFscygiaHRtbCIpOworCX0KKwllbHNlIGlmIChrZXkuZXF1YWxzKERPQ1RZUEVfUFVCTElDKSkgeworCQlvdmVycmlkZVB1YmxpYyA9IHZhbHVlOworCQlmb3JjZURURCA9IHRydWU7CisJCX0KKwllbHNlIGlmIChrZXkuZXF1YWxzKERPQ1RZUEVfU1lTVEVNKSkgeworCQlvdmVycmlkZVN5c3RlbSA9IHZhbHVlOworCQlmb3JjZURURCA9IHRydWU7CisJCX0KKwllbHNlIGlmIChrZXkuZXF1YWxzKFZFUlNJT04pKSB7CisJCXZlcnNpb24gPSB2YWx1ZTsKKwkJfQorCWVsc2UgaWYgKGtleS5lcXVhbHMoU1RBTkRBTE9ORSkpIHsKKwkJc3RhbmRhbG9uZSA9IHZhbHVlOworCQl9CisvLwlTeXN0ZW0ub3V0LnByaW50bG4oIiUlJSUgaHRtbE1vZGUgPSAiICsgaHRtbE1vZGUpOworICAgIH0KKyAgICAKKwwKKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICAgIC8vIENvbnN0YW50cy4KKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisgICAgcHJpdmF0ZSBmaW5hbCBBdHRyaWJ1dGVzIEVNUFRZX0FUVFMgPSBuZXcgQXR0cmlidXRlc0ltcGwoKTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDREFUQV9TRUNUSU9OX0VMRU1FTlRTID0KKyAgICAgICAgImNkYXRhLXNlY3Rpb24tZWxlbWVudHMiOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIERPQ1RZUEVfUFVCTElDID0gImRvY3R5cGUtcHVibGljIjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBET0NUWVBFX1NZU1RFTSA9ICJkb2N0eXBlLXN5c3RlbSI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRU5DT0RJTkcgPSAiZW5jb2RpbmciOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElOREVOVCA9ICJpbmRlbnQiOyAgLy8gY3VycmVudGx5IGlnbm9yZWQKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBNRURJQV9UWVBFID0gIm1lZGlhLXR5cGUiOyAgLy8gY3VycmVudGx5IGlnbm9yZWQKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBNRVRIT0QgPSAibWV0aG9kIjsgIC8vIGN1cnJlbnRseSBodG1sIG9yIHhtbAorICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE9NSVRfWE1MX0RFQ0xBUkFUSU9OID0gIm9taXQteG1sLWRlY2xhcmF0aW9uIjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTVEFOREFMT05FID0gInN0YW5kYWxvbmUiOyAgLy8gY3VycmVudGx5IGlnbm9yZWQKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBWRVJTSU9OID0gInZlcnNpb24iOworCisKKwwKKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICAgIC8vIEludGVybmFsIHN0YXRlLgorICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyAgICBwcml2YXRlIEhhc2h0YWJsZSBwcmVmaXhUYWJsZTsKKyAgICBwcml2YXRlIEhhc2h0YWJsZSBmb3JjZWREZWNsVGFibGU7CisgICAgcHJpdmF0ZSBIYXNodGFibGUgZG9uZURlY2xUYWJsZTsKKyAgICBwcml2YXRlIGludCBlbGVtZW50TGV2ZWwgPSAwOworICAgIHByaXZhdGUgV3JpdGVyIG91dHB1dDsKKyAgICBwcml2YXRlIE5hbWVzcGFjZVN1cHBvcnQgbnNTdXBwb3J0OworICAgIHByaXZhdGUgaW50IHByZWZpeENvdW50ZXIgPSAwOworICAgIHByaXZhdGUgUHJvcGVydGllcyBvdXRwdXRQcm9wZXJ0aWVzOworICAgIHByaXZhdGUgYm9vbGVhbiB1bmljb2RlTW9kZSA9IGZhbHNlOworICAgIHByaXZhdGUgU3RyaW5nIG91dHB1dEVuY29kaW5nID0gIiI7CisgICAgcHJpdmF0ZSBib29sZWFuIGh0bWxNb2RlID0gZmFsc2U7CisgICAgcHJpdmF0ZSBib29sZWFuIGZvcmNlRFREID0gZmFsc2U7CisgICAgcHJpdmF0ZSBib29sZWFuIGhhc091dHB1dERURCA9IGZhbHNlOworICAgIHByaXZhdGUgU3RyaW5nIG92ZXJyaWRlUHVibGljID0gbnVsbDsKKyAgICBwcml2YXRlIFN0cmluZyBvdmVycmlkZVN5c3RlbSA9IG51bGw7CisgICAgcHJpdmF0ZSBTdHJpbmcgdmVyc2lvbiA9IG51bGw7CisgICAgcHJpdmF0ZSBTdHJpbmcgc3RhbmRhbG9uZSA9IG51bGw7CisgICAgcHJpdmF0ZSBib29sZWFuIGNkYXRhRWxlbWVudCA9IGZhbHNlOworICAgIAorfQorCisvLyBlbmQgb2YgWE1MV3JpdGVyLmphdmEKZGlmZiAtLWdpdCBhL3NyYy9qYXZhL29yZy9jY2lsL2Nvd2FuL3RhZ3NvdXAvamF4cC9KQVhQVGVzdC5qYXZhIGIvc3JjL2phdmEvb3JnL2NjaWwvY293YW4vdGFnc291cC9qYXhwL0pBWFBUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjFmMjBhZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9qYXZhL29yZy9jY2lsL2Nvd2FuL3RhZ3NvdXAvamF4cC9KQVhQVGVzdC5qYXZhCkBAIC0wLDAgKzEsNTQgQEAKKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFRhZ1NvdXAgYW5kIGlzIENvcHlyaWdodCAyMDAyLTIwMDggYnkgSm9obiBDb3dhbi4KKy8vCisvLyBUYWdTb3VwIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwKKy8vIFZlcnNpb24gMi4wLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoaXMgbGljZW5zZSBhdAorLy8gaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIC4gIFlvdSBtYXkgYWxzbyBoYXZlCisvLyBhZGRpdGlvbmFsIGxlZ2FsIHJpZ2h0cyBub3QgZ3JhbnRlZCBieSB0aGlzIGxpY2Vuc2UuCisvLworLy8gVGFnU291cCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIHVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgVGFnU291cAorLy8gaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMKKy8vIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkOyBub3QgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eQorLy8gb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorCitwYWNrYWdlIG9yZy5jY2lsLmNvd2FuLnRhZ3NvdXAuamF4cDsKKworaW1wb3J0IGphdmEuaW8uKjsKKworaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLio7CitpbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7CisKKy8qKgorICogVHJpdmlhbCBub24tcm9idXN0IHRlc3QgY2xhc3MsIHRvIHNob3cgdGhhdCBUYWdTb3VwIGNhbiBiZSBhY2Nlc3NlZCB1c2luZworICogSkFYUCBpbnRlcmZhY2UuCisgKi8KK3B1YmxpYyBjbGFzcyBKQVhQVGVzdAoreworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpCisgICAgICAgIHRocm93cyBFeGNlcHRpb24KKyAgICB7CisgICAgICAgIG5ldyBKQVhQVGVzdCgpLnRlc3QoYXJncyk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHRlc3QoU3RyaW5nW10gYXJncykKKyAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbgorICAgIHsKKyAgICAgICAgaWYgKGFyZ3MubGVuZ3RoICE9IDEpIHsKKyAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiVXNhZ2U6IGphdmEgIitnZXRDbGFzcygpKyIgW2lucHV0LWZpbGVdIik7CisgICAgICAgICAgICBTeXN0ZW0uZXhpdCgxKTsKKyAgICAgICAgfQorICAgICAgICBGaWxlIGYgPSBuZXcgRmlsZShhcmdzWzBdKTsKKyAgICAgICAgLy9TeXN0ZW0uc2V0UHJvcGVydHkoImphdmF4LnhtbC5wYXJzZXJzLlNBWFBhcnNlckZhY3RvcnkiLCBTQVhGYWN0b3J5SW1wbC5jbGFzcy50b1N0cmluZygpKTsKKyAgICAgICAgU3lzdGVtLnNldFByb3BlcnR5KCJqYXZheC54bWwucGFyc2Vycy5TQVhQYXJzZXJGYWN0b3J5IiwgIm9yZy5jY2lsLmNvd2FuLnRhZ3NvdXAuamF4cC5TQVhGYWN0b3J5SW1wbCIpOworCisgICAgICAgIFNBWFBhcnNlckZhY3Rvcnkgc3BmID0gU0FYUGFyc2VyRmFjdG9yeS5uZXdJbnN0YW5jZSgpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk9rLCBTQVggZmFjdG9yeSBKQVhQIGNyZWF0ZXMgaXM6ICIrc3BmKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJMZXQncyBwYXJzZS4uLiIpOworICAgICAgICBzcGYubmV3U0FYUGFyc2VyKCkucGFyc2UoZiwgbmV3IG9yZy54bWwuc2F4LmhlbHBlcnMuRGVmYXVsdEhhbmRsZXIoKSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRG9uZS4gQW5kIHRoZW4gRE9NIGJ1aWxkOiIpOworCisgICAgICAgIERvY3VtZW50IGRvYyA9IERvY3VtZW50QnVpbGRlckZhY3RvcnkubmV3SW5zdGFuY2UoKS5uZXdEb2N1bWVudEJ1aWxkZXIoKS5wYXJzZShmKTsKKworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN1Y2Nlc2Z1bGx5IGJ1aWx0IERPTSB0cmVlIGZyb20gJyIrZisiJywgLT4gIitkb2MpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9qYXZhL29yZy9jY2lsL2Nvd2FuL3RhZ3NvdXAvamF4cC9TQVgxUGFyc2VyQWRhcHRlci5qYXZhIGIvc3JjL2phdmEvb3JnL2NjaWwvY293YW4vdGFnc291cC9qYXhwL1NBWDFQYXJzZXJBZGFwdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODgzYTNlNwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9qYXZhL29yZy9jY2lsL2Nvd2FuL3RhZ3NvdXAvamF4cC9TQVgxUGFyc2VyQWRhcHRlci5qYXZhCkBAIC0wLDAgKzEsMjMyIEBACisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiBUYWdTb3VwIGFuZCBpcyBDb3B5cmlnaHQgMjAwMi0yMDA4IGJ5IEpvaG4gQ293YW4uCisvLworLy8gVGFnU291cCBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsCisvLyBWZXJzaW9uIDIuMC4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGlzIGxpY2Vuc2UgYXQKKy8vIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAuICBZb3UgbWF5IGFsc28gaGF2ZQorLy8gYWRkaXRpb25hbCBsZWdhbCByaWdodHMgbm90IGdyYW50ZWQgYnkgdGhpcyBsaWNlbnNlLgorLy8KKy8vIFRhZ1NvdXAgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyB1bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIFRhZ1NvdXAKKy8vIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TCisvLyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZDsgbm90IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkKKy8vIG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworcGFja2FnZSBvcmcuY2NpbC5jb3dhbi50YWdzb3VwLmpheHA7CisKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLio7CisKK2ltcG9ydCBvcmcueG1sLnNheC4qOworCisvKioKKyAqIFRoaXMgaXMgYSBzaW1wbGVyIGFkYXB0ZXIgY2xhc3MgdGhhdCBhbGxvd3MgdXNpbmcgU0FYMSBpbnRlcmZhY2Ugb24gdG9wCisgKiBvZiBiYXNpYyBTQVgyIGltcGxlbWVudGF0aW9uLCBzdWNoIGFzIFRhZ1NvdXAuCisgKgorICogQGF1dGhvciBUYXR1IFNhbG9yYW50YSAoY293dG93bmNvZGVyQHlhaG9vLmNvbSkKKyAqIEBkZXByZWNhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTQVgxUGFyc2VyQWRhcHRlcgorICAgIGltcGxlbWVudHMgb3JnLnhtbC5zYXguUGFyc2VyCit7CisgICAgZmluYWwgWE1MUmVhZGVyIHhtbFJlYWRlcjsKKworICAgIHB1YmxpYyBTQVgxUGFyc2VyQWRhcHRlcihYTUxSZWFkZXIgeHIpCisgICAgeworICAgICAgICB4bWxSZWFkZXIgPSB4cjsKKyAgICB9CisKKyAgICAvLyBTYXgxIEFQSSBpbXBsCisKKyAgICBwdWJsaWMgdm9pZCBwYXJzZShJbnB1dFNvdXJjZSBzb3VyY2UpCisgICAgICAgIHRocm93cyBTQVhFeGNlcHRpb24KKyAgICB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICB4bWxSZWFkZXIucGFyc2Uoc291cmNlKTsKKyAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gaW9lKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgU0FYRXhjZXB0aW9uKGlvZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBwYXJzZShTdHJpbmcgc3lzdGVtSWQpCisgICAgICAgIHRocm93cyBTQVhFeGNlcHRpb24KKyAgICB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICB4bWxSZWFkZXIucGFyc2Uoc3lzdGVtSWQpOworICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBpb2UpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBTQVhFeGNlcHRpb24oaW9lKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIEBkZXByZWNhdGVkCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0RG9jdW1lbnRIYW5kbGVyKERvY3VtZW50SGFuZGxlciBoKQorICAgIHsKKyAgICAgICAgeG1sUmVhZGVyLnNldENvbnRlbnRIYW5kbGVyKG5ldyBEb2NIYW5kbGVyV3JhcHBlcihoKSk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0RFRESGFuZGxlcihEVERIYW5kbGVyIGgpCisgICAgeworICAgICAgICB4bWxSZWFkZXIuc2V0RFRESGFuZGxlcihoKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRFbnRpdHlSZXNvbHZlcihFbnRpdHlSZXNvbHZlciByKQorICAgIHsKKyAgICAgICAgeG1sUmVhZGVyLnNldEVudGl0eVJlc29sdmVyKHIpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldEVycm9ySGFuZGxlcihFcnJvckhhbmRsZXIgaCkKKyAgICB7CisgICAgICAgIHhtbFJlYWRlci5zZXRFcnJvckhhbmRsZXIoaCk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0TG9jYWxlKGphdmEudXRpbC5Mb2NhbGUgbG9jYWxlKSAKKyAgICAgICAgdGhyb3dzIFNBWEV4Y2VwdGlvbgorICAgIHsKKyAgICAgICAgLyogSSBoYXZlIG5vIGlkZWEgd2hhdCB0aGlzIGlzIHN1cHBvc2VkIHRvIGRvLi4uIHNvIGxldCdzCisgICAgICAgICAqIHRocm93IGFuIGV4Y2VwdGlvbgorICAgICAgICAgKi8KKyAgICAgICAgdGhyb3cgbmV3IFNBWE5vdFN1cHBvcnRlZEV4Y2VwdGlvbigiVGFnU291cCBkb2VzIG5vdCBpbXBsZW1lbnQgc2V0TG9jYWxlKCkgbWV0aG9kIik7CisgICAgfQorCisgICAgLy8gSGVscGVyIGNsYXNzZXM6CisKKyAgICAvKioKKyAgICAgKiBXZSBuZWVkIGFub3RoZXIgaGVscGVyIGNsYXNzIHRvIGRlYWwgd2l0aCBkaWZmZXJlbmNlcyBiZXR3ZWVuCisgICAgICogU2F4MiBoYW5kbGVyIChjb250ZW50IGhhbmRsZXIpLCBhbmQgU2F4MSBoYW5kbGVyIChkb2N1bWVudCBoYW5kbGVyKQorICAgICAqIEBkZXByZWNhdGVkCisgICAgICovCisgICAgZmluYWwgc3RhdGljIGNsYXNzIERvY0hhbmRsZXJXcmFwcGVyCisgICAgICAgIGltcGxlbWVudHMgQ29udGVudEhhbmRsZXIKKyAgICB7CisgICAgICAgIGZpbmFsIERvY3VtZW50SGFuZGxlciBkb2NIYW5kbGVyOworCisgICAgICAgIGZpbmFsIEF0dHJpYnV0ZXNXcmFwcGVyIG1BdHRyV3JhcHBlciA9IG5ldyBBdHRyaWJ1dGVzV3JhcHBlcigpOworCisgICAgICAgIC8qKgorICAgICAgICAgKiBAZGVwcmVjYXRlZAorICAgICAgICAgKi8KKyAgICAgICAgRG9jSGFuZGxlcldyYXBwZXIoRG9jdW1lbnRIYW5kbGVyIGgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRvY0hhbmRsZXIgPSBoOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgY2hhcmFjdGVycyhjaGFyW10gY2gsIGludCBzdGFydCwgaW50IGxlbmd0aCkKKyAgICAgICAgICAgIHRocm93cyBTQVhFeGNlcHRpb24KKyAgICAgICAgeworICAgICAgICAgICAgZG9jSGFuZGxlci5jaGFyYWN0ZXJzKGNoLCBzdGFydCwgbGVuZ3RoKTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIGVuZERvY3VtZW50KCkKKyAgICAgICAgICAgIHRocm93cyBTQVhFeGNlcHRpb24KKyAgICAgICAgeworICAgICAgICAgICAgZG9jSGFuZGxlci5lbmREb2N1bWVudCgpOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgZW5kRWxlbWVudChTdHJpbmcgdXJpLCBTdHJpbmcgbG9jYWxOYW1lLCBTdHJpbmcgcU5hbWUpCisgICAgICAgICAgICB0aHJvd3MgU0FYRXhjZXB0aW9uCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChxTmFtZSA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgcU5hbWUgPSBsb2NhbE5hbWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkb2NIYW5kbGVyLmVuZEVsZW1lbnQocU5hbWUpOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgZW5kUHJlZml4TWFwcGluZyhTdHJpbmcgcHJlZml4KQorICAgICAgICB7CisgICAgICAgICAgICAvLyBubyBlcXVpdmFsZW50IGluIFNBWDEsIGlnbm9yZQorICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgaWdub3JhYmxlV2hpdGVzcGFjZShjaGFyW10gY2gsIGludCBzdGFydCwgaW50IGxlbmd0aCkKKyAgICAgICAgICAgIHRocm93cyBTQVhFeGNlcHRpb24KKyAgICAgICAgeworICAgICAgICAgICAgZG9jSGFuZGxlci5pZ25vcmFibGVXaGl0ZXNwYWNlKGNoLCBzdGFydCwgbGVuZ3RoKTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIHByb2Nlc3NpbmdJbnN0cnVjdGlvbihTdHJpbmcgdGFyZ2V0LCBTdHJpbmcgZGF0YSkKKyAgICAgICAgICAgIHRocm93cyBTQVhFeGNlcHRpb24KKyAgICAgICAgeworICAgICAgICAgICAgZG9jSGFuZGxlci5wcm9jZXNzaW5nSW5zdHJ1Y3Rpb24odGFyZ2V0LCBkYXRhKTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIHNldERvY3VtZW50TG9jYXRvcihMb2NhdG9yIGxvY2F0b3IpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRvY0hhbmRsZXIuc2V0RG9jdW1lbnRMb2NhdG9yKGxvY2F0b3IpOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgc2tpcHBlZEVudGl0eShTdHJpbmcgbmFtZSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gbm8gZXF1aXZhbGVudCBpbiBTQVgxLCBpZ25vcmUKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIHN0YXJ0RG9jdW1lbnQoKQorICAgICAgICAgICAgdGhyb3dzIFNBWEV4Y2VwdGlvbgorICAgICAgICB7CisgICAgICAgICAgICBkb2NIYW5kbGVyLnN0YXJ0RG9jdW1lbnQoKTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIHN0YXJ0RWxlbWVudChTdHJpbmcgdXJpLCBTdHJpbmcgbG9jYWxOYW1lLCBTdHJpbmcgcU5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdHRyaWJ1dGVzIGF0dHJzKQorICAgICAgICAgICAgdGhyb3dzIFNBWEV4Y2VwdGlvbgorICAgICAgICB7CisgICAgICAgICAgICBpZiAocU5hbWUgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHFOYW1lID0gbG9jYWxOYW1lOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gQWxzbywgbmVlZCB0byB3cmFwIEF0dHJpYnV0ZXMgdG8gbG9vayBsaWtlIEF0dHJpYnV0ZUxvc3QKKyAgICAgICAgICAgIG1BdHRyV3JhcHBlci5zZXRBdHRyaWJ1dGVzKGF0dHJzKTsKKyAgICAgICAgICAgIGRvY0hhbmRsZXIuc3RhcnRFbGVtZW50KHFOYW1lLCBtQXR0cldyYXBwZXIpOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgc3RhcnRQcmVmaXhNYXBwaW5nKFN0cmluZyBwcmVmaXgsIFN0cmluZyB1cmkpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIG5vIGVxdWl2YWxlbnQgaW4gU0FYMSwgaWdub3JlCisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBBbmQgb25lIG1vcmUgaGVscGVyIHRvIGRlYWwgd2l0aCBhdHRyaWJ1dGUgYWNjZXNzIGRpZmZlcmVuY2VzCisgICAgICogQGRlcHJlY2F0ZWQKKyAgICAgKi8gCisgICAgZmluYWwgc3RhdGljIGNsYXNzIEF0dHJpYnV0ZXNXcmFwcGVyCisgICAgICAgIGltcGxlbWVudHMgQXR0cmlidXRlTGlzdAorICAgIHsKKyAgICAgICAgQXR0cmlidXRlcyBhdHRyczsKKworICAgICAgICBwdWJsaWMgQXR0cmlidXRlc1dyYXBwZXIoKSB7IH0KKworICAgICAgICBwdWJsaWMgdm9pZCBzZXRBdHRyaWJ1dGVzKEF0dHJpYnV0ZXMgYSkgeworICAgICAgICAgICAgYXR0cnMgPSBhOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIGludCBnZXRMZW5ndGgoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYXR0cnMuZ2V0TGVuZ3RoKCk7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoaW50IGkpCisgICAgICAgIHsKKyAgICAgICAgICAgIFN0cmluZyBuID0gYXR0cnMuZ2V0UU5hbWUoaSk7CisgICAgICAgICAgICByZXR1cm4gKG4gPT0gbnVsbCkgPyBhdHRycy5nZXRMb2NhbE5hbWUoaSkgOiBuOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIFN0cmluZyBnZXRUeXBlKGludCBpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYXR0cnMuZ2V0VHlwZShpKTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0VHlwZShTdHJpbmcgbmFtZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGF0dHJzLmdldFR5cGUobmFtZSk7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgU3RyaW5nIGdldFZhbHVlKGludCBpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYXR0cnMuZ2V0VmFsdWUoaSk7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgU3RyaW5nIGdldFZhbHVlKFN0cmluZyBuYW1lKSAgICAgCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhdHRycy5nZXRWYWx1ZShuYW1lKTsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9qYXZhL29yZy9jY2lsL2Nvd2FuL3RhZ3NvdXAvamF4cC9TQVhGYWN0b3J5SW1wbC5qYXZhIGIvc3JjL2phdmEvb3JnL2NjaWwvY293YW4vdGFnc291cC9qYXhwL1NBWEZhY3RvcnlJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzgwYWRmZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9qYXZhL29yZy9jY2lsL2Nvd2FuL3RhZ3NvdXAvamF4cC9TQVhGYWN0b3J5SW1wbC5qYXZhCkBAIC0wLDAgKzEsMTE0IEBACisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiBUYWdTb3VwIGFuZCBpcyBDb3B5cmlnaHQgMjAwMi0yMDA4IGJ5IEpvaG4gQ293YW4uCisvLworLy8gVGFnU291cCBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsCisvLyBWZXJzaW9uIDIuMC4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGlzIGxpY2Vuc2UgYXQKKy8vIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAuICBZb3UgbWF5IGFsc28gaGF2ZQorLy8gYWRkaXRpb25hbCBsZWdhbCByaWdodHMgbm90IGdyYW50ZWQgYnkgdGhpcyBsaWNlbnNlLgorLy8KKy8vIFRhZ1NvdXAgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyB1bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIFRhZ1NvdXAKKy8vIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TCisvLyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZDsgbm90IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkKKy8vIG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworcGFja2FnZSBvcmcuY2NpbC5jb3dhbi50YWdzb3VwLmpheHA7CisKK2ltcG9ydCBqYXZhLnV0aWwuKjsKK2ltcG9ydCBqYXZheC54bWwucGFyc2Vycy4qOworCitpbXBvcnQgb3JnLnhtbC5zYXguKjsKKworLyoqCisgKiBUaGlzIGlzIGEgc2ltcGxlIGltcGxlbWVudGF0aW9uIG9mIEpBWFAge0BsaW5rIFNBWFBhcnNlckZhY3Rvcnl9LAorICogdG8gYWxsb3cgZWFzaWVyIGludGVncmF0aW9uIG9mIFRhZ1NvdXAgd2l0aCB0aGUgZGVmYXVsdCBKREsgCisgKiB4bWwgcHJvY2Vzc2luZyBzdGFjay4KKyAqCisgKiBAYXV0aG9yIFRhdHUgU2Fsb3JhbnRhIChjb3d0b3duY29kZXJAeWFob28uY29tKQorICovCitwdWJsaWMgY2xhc3MgU0FYRmFjdG9yeUltcGwKKyAgICBleHRlbmRzIFNBWFBhcnNlckZhY3RvcnkKK3sKKyAgICAvKioKKyAgICAgKiBUaGUgZWFzaWVzdCB3YXkgdG8gdGVzdCB2YWxpZGl0eSBvZiBmZWF0dXJlcyB0byBzZXQgaXMgdG8gdXNlCisgICAgICogYSBwcm90b3R5cGUgb2JqZWN0LiBDdXJyZW50bHkgdGhpcyBpcyBhY3R1YWxseSBub3QgYSByZWFsIHByb3RvdHlwZSwKKyAgICAgKiBpbiB0aGUgc2Vuc2UgdGhhdCB0aGUgY29uZmlndXJhdGlvbiBpcyBhY3R1YWxseSBwYXNzZWQgc2VwYXJhdGVseQorICAgICAqIChhcyBvcHBvc2VkIHRvIGluc3RhbnRpYXRpbmcgbmV3IHJlYWRlcnMgZnJvbSB0aGlzIHByb3RvdHlwZSksIGJ1dAorICAgICAqIHRoaXMgY291bGQgYmUgY2hhbmdlZCBpbiBmdXR1cmUsIGlmIFRhZ1NvdXAgcGFyc2VyIG9iamVjdCBhbGxvd2VkCisgICAgICogY2xvbmluZy4KKyAgICAgKi8KKyAgICBwcml2YXRlIFNBWFBhcnNlckltcGwgcHJvdG90eXBlUGFyc2VyID0gbnVsbDsKKworICAgIC8qKgorICAgICAqIFRoaXMgTWFwIGNvbnRhaW5zIGV4cGxpY2l0bHkgc2V0IGZlYXR1cmVzIHRoYXQgY2FuIGJlIHN1Y2Nlc2Z1bGx5CisgICAgICogc2V0IGZvciBYTUxSZWFkZXIgaW5zdGFuY2VzLiBUZW1wb3Jhcnkgc3RvcmFnZSBpcyBuZWVkZWQgZHVlIHRvCisgICAgICogSkFYUCBkZXNpZ246IG11bHRpcGxlIHJlYWRlcnMgY2FuIGJlIGluc3RhbnRpYXRlZCBmcm9tIGEgc2luZ2xlCisgICAgICogZmFjdG9yeSwgYW5kIHNldHRpbmdzIGNhbiBiZSBjaGFuZ2VkIGJldHdlZW4gaW5zdGFudGlhdGlvbnMuCisgICAgICo8cD4KKyAgICAgKiBOb3RlIHRoYXQgd2Ugd291bGRuJ3QgbmVlZCB0aGlzIG1hcCBpZiB3ZSBjb3VsZCBjcmVhdGUgaW5zdGFuY2VzCisgICAgICogZGlyZWN0bHkgdXNpbmcgdGhlIHByb3RvdHlwZSBpbnN0YW5jZS4KKyAgICAgKi8KKyAgICBwcml2YXRlIEhhc2hNYXAgZmVhdHVyZXMgPSBudWxsOworCisgICAgcHVibGljIFNBWEZhY3RvcnlJbXBsKCkKKyAgICB7CisgICAgICAgIHN1cGVyKCk7CisgICAgfQorCisgICAgLy8gLy8gLy8gSkFYUCBBUEkgaW1wbGVtZW50YXRpb246CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIDxjb2RlPlNBWFBhcnNlcjwvY29kZT4gdXNpbmcgdGhlIGN1cnJlbnRseQorICAgICAqIGNvbmZpZ3VyZWQgZmFjdG9yeSBwYXJhbWV0ZXJzLgorICAgICAqLworICAgIHB1YmxpYyBTQVhQYXJzZXIgbmV3U0FYUGFyc2VyKCkKKyAgICAgICAgdGhyb3dzIFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24KKyAgICB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICByZXR1cm4gU0FYUGFyc2VySW1wbC5uZXdJbnN0YW5jZShmZWF0dXJlcyk7CisgICAgICAgIH0gY2F0Y2ggKFNBWEV4Y2VwdGlvbiBzZSkgeworICAgICAgICAgICAgLy8gVHJhbnNsYXRlIHRvIFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24KKyAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uKHNlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBEZWZpbmVzIHRoYXQgdGhlIHNwZWNpZmllZCBmZWF0dXJlIGlzIHRvIGVuYWJsZWQvZGlzYWJsZWQgKGFzCisgICAgICogcGVyIHNlY29uZCBhcmd1bWVudCkgb24gcmVhZGVyIGluc3RhbmNlcyBjcmVhdGVkIGJ5IHRoaXMgCisgICAgICogZmFjdG9yeS4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRGZWF0dXJlKFN0cmluZyBuYW1lLCBib29sZWFuIHZhbHVlKQorICAgICAgICB0aHJvd3MgUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiwgU0FYTm90UmVjb2duaXplZEV4Y2VwdGlvbiwgCisJCVNBWE5vdFN1cHBvcnRlZEV4Y2VwdGlvbgorICAgIHsKKyAgICAgICAgLy8gRmlyc3QsIGxldCdzIHNlZSBpZiBpdCdzIGEgdmFsaWQgY2FsbAorICAgICAgICBnZXRQcm90b3R5cGUoKS5zZXRGZWF0dXJlKG5hbWUsIHZhbHVlKTsKKworICAgICAgICAvLyBJZiBub3QsIGV4Y2VwdGlvbiB3YXMgdGhyb3duOiBzbyB3ZSBhcmUgZ29vZCBub3c6CisgICAgICAgIGlmIChmZWF0dXJlcyA9PSBudWxsKSB7CisgICAgICAgICAgICAvLyBMZXQncyByZXRhaW4gdGhlIG9yZGVyaW5nIGFzIHdlbGwKKyAgICAgICAgICAgIGZlYXR1cmVzID0gbmV3IExpbmtlZEhhc2hNYXAoKTsKKyAgICAgICAgfQorICAgICAgICBmZWF0dXJlcy5wdXQobmFtZSwgdmFsdWUgPyBCb29sZWFuLlRSVUUgOiBCb29sZWFuLkZBTFNFKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBwcm9wZXJ0eSB3aWxsIGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQKKyAgICAgKiBvbiByZWFkZXIgaW5zdGFuY2VzIGNvbnN0cnVjdGVkIGJ5IHRoaXMgZmFjdG9yeS4KKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBnZXRGZWF0dXJlKFN0cmluZyBuYW1lKQorICAgICAgICB0aHJvd3MgUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiwgU0FYTm90UmVjb2duaXplZEV4Y2VwdGlvbiwKKwkJU0FYTm90U3VwcG9ydGVkRXhjZXB0aW9uCisgICAgeworICAgICAgICByZXR1cm4gZ2V0UHJvdG90eXBlKCkuZ2V0RmVhdHVyZShuYW1lKTsKKyAgICB9CisKKyAgICAvLyAvLyAvLyBJbnRlcm5hbCBtZXRob2RzCisKKyAgICBwcml2YXRlIFNBWFBhcnNlckltcGwgZ2V0UHJvdG90eXBlKCkKKyAgICB7CisgICAgICAgIGlmIChwcm90b3R5cGVQYXJzZXIgPT0gbnVsbCkgeworICAgICAgICAgICAgcHJvdG90eXBlUGFyc2VyID0gbmV3IFNBWFBhcnNlckltcGwoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcHJvdG90eXBlUGFyc2VyOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9qYXZhL29yZy9jY2lsL2Nvd2FuL3RhZ3NvdXAvamF4cC9TQVhQYXJzZXJJbXBsLmphdmEgYi9zcmMvamF2YS9vcmcvY2NpbC9jb3dhbi90YWdzb3VwL2pheHAvU0FYUGFyc2VySW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1ZjNkZjQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvamF2YS9vcmcvY2NpbC9jb3dhbi90YWdzb3VwL2pheHAvU0FYUGFyc2VySW1wbC5qYXZhCkBAIC0wLDAgKzEsMTEzIEBACisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiBUYWdTb3VwIGFuZCBpcyBDb3B5cmlnaHQgMjAwMi0yMDA4IGJ5IEpvaG4gQ293YW4uCisvLworLy8gVGFnU291cCBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsCisvLyBWZXJzaW9uIDIuMC4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGlzIGxpY2Vuc2UgYXQKKy8vIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAuICBZb3UgbWF5IGFsc28gaGF2ZQorLy8gYWRkaXRpb25hbCBsZWdhbCByaWdodHMgbm90IGdyYW50ZWQgYnkgdGhpcyBsaWNlbnNlLgorLy8KKy8vIFRhZ1NvdXAgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyB1bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIFRhZ1NvdXAKKy8vIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TCisvLyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZDsgbm90IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkKKy8vIG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworcGFja2FnZSBvcmcuY2NpbC5jb3dhbi50YWdzb3VwLmpheHA7CisKK2ltcG9ydCBqYXZhLmlvLio7CitpbXBvcnQgamF2YS51dGlsLio7CitpbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuKjsKKworaW1wb3J0IG9yZy54bWwuc2F4Lio7CisKK2ltcG9ydCBvcmcuY2NpbC5jb3dhbi50YWdzb3VwLlBhcnNlcjsKKworLyoqCisgKiBUaGlzIGlzIGEgc2ltcGxlIGltcGxlbWVudGF0aW9uIG9mIEpBWFAge0BsaW5rIFNBWFBhcnNlcn0sCisgKiB0byBhbGxvdyBlYXNpZXIgaW50ZWdyYXRpb24gb2YgVGFnU291cCB3aXRoIHRoZSBkZWZhdWx0IEpESyAKKyAqIHhtbCBwcm9jZXNzaW5nIHN0YWNrLgorICoKKyAqIEBhdXRob3IgVGF0dSBTYWxvcmFudGEgKGNvd3Rvd25jb2RlckB5YWhvby5jb20pCisgKi8KK3B1YmxpYyBjbGFzcyBTQVhQYXJzZXJJbXBsCisgICAgZXh0ZW5kcyBTQVhQYXJzZXIKK3sKKyAgICBmaW5hbCBvcmcuY2NpbC5jb3dhbi50YWdzb3VwLlBhcnNlciBwYXJzZXI7CisKKyAgICBwcm90ZWN0ZWQgU0FYUGFyc2VySW1wbCgpIC8vIHVzZWQgYnkgZmFjdG9yeSwgZm9yIHByb3RvdHlwZXMKKyAgICB7CisgICAgICAgIHN1cGVyKCk7CisgICAgICAgIHBhcnNlciA9IG5ldyBvcmcuY2NpbC5jb3dhbi50YWdzb3VwLlBhcnNlcigpOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgU0FYUGFyc2VySW1wbCBuZXdJbnN0YW5jZShNYXAgZmVhdHVyZXMpCisgICAgICAgIHRocm93cyBTQVhFeGNlcHRpb24KKyAgICB7CisgICAgICAgIFNBWFBhcnNlckltcGwgcGFyc2VyID0gbmV3IFNBWFBhcnNlckltcGwoKTsKKyAgICAgICAgaWYgKGZlYXR1cmVzICE9IG51bGwpIHsKKyAgICAgICAgICAgIEl0ZXJhdG9yIGl0ID0gZmVhdHVyZXMuZW50cnlTZXQoKS5pdGVyYXRvcigpOworICAgICAgICAgICAgd2hpbGUgKGl0Lmhhc05leHQoKSkgeworICAgICAgICAgICAgICAgIE1hcC5FbnRyeSBlbnRyeSA9IChNYXAuRW50cnkpIGl0Lm5leHQoKTsKKyAgICAgICAgICAgICAgICBwYXJzZXIuc2V0RmVhdHVyZSgoU3RyaW5nKSBlbnRyeS5nZXRLZXkoKSwgKChCb29sZWFuKSBlbnRyeS5nZXRWYWx1ZSgpKS5ib29sZWFuVmFsdWUoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHBhcnNlcjsKKyAgICB9CisKKyAgICAvLyAvLyAvLyBKQVhQIEFQSSBpbXBsZW1lbnRhdGlvbjoKKworICAgIC8qKgorICAgICAqIFRvIHN1cHBvcnQgU0FYMSBpbnRlcmZhY2UsIHdlJ2xsIG5lZWQgdG8gdXNlIGFuIGFkYXB0ZXIuCisgICAgICogQGRlcHJlY2F0ZWQKKyAgICAgKi8KKyAgICBwdWJsaWMgb3JnLnhtbC5zYXguUGFyc2VyIGdldFBhcnNlcigpCisgICAgICAgIHRocm93cyBTQVhFeGNlcHRpb24KKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgU0FYMVBhcnNlckFkYXB0ZXIocGFyc2VyKTsKKyAgICB9CisKKyAgICBwdWJsaWMgWE1MUmVhZGVyIGdldFhNTFJlYWRlcigpIHsgcmV0dXJuIHBhcnNlcjsgfQorICAgIAorICAgIHB1YmxpYyBib29sZWFuIGlzTmFtZXNwYWNlQXdhcmUoKQorICAgIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHJldHVybiBwYXJzZXIuZ2V0RmVhdHVyZShQYXJzZXIubmFtZXNwYWNlc0ZlYXR1cmUpOworICAgICAgICB9IGNhdGNoIChTQVhFeGNlcHRpb24gc2V4KSB7IC8vIHNob3VsZCBuZXZlciBoYXBwZW4uLi4gc286CisgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihzZXguZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyBib29sZWFuIGlzVmFsaWRhdGluZygpCisgICAgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgcmV0dXJuIHBhcnNlci5nZXRGZWF0dXJlKFBhcnNlci52YWxpZGF0aW9uRmVhdHVyZSk7CisgICAgICAgIH0gY2F0Y2ggKFNBWEV4Y2VwdGlvbiBzZXgpIHsgLy8gc2hvdWxkIG5ldmVyIGhhcHBlbi4uLiBzbzoKKyAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKHNleC5nZXRNZXNzYWdlKCkpOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0UHJvcGVydHkoU3RyaW5nIG5hbWUsIE9iamVjdCB2YWx1ZSkKKyAgICAgICAgdGhyb3dzIFNBWE5vdFJlY29nbml6ZWRFeGNlcHRpb24sIFNBWE5vdFN1cHBvcnRlZEV4Y2VwdGlvbgorICAgIHsKKyAgICAgICAgcGFyc2VyLnNldFByb3BlcnR5KG5hbWUsIHZhbHVlKTsKKyAgICB9CisKKyAgICBwdWJsaWMgT2JqZWN0IGdldFByb3BlcnR5KFN0cmluZyBuYW1lKQorICAgICAgICB0aHJvd3MgU0FYTm90UmVjb2duaXplZEV4Y2VwdGlvbiwgU0FYTm90U3VwcG9ydGVkRXhjZXB0aW9uCisgICAgeworICAgICAgICByZXR1cm4gcGFyc2VyLmdldFByb3BlcnR5KG5hbWUpOworICAgIH0KKworICAgIC8vIC8vIC8vIEFkZGl0aW9uYWwgY29udmVuaWVuY2UgbWV0aG9kcworCisgICAgcHVibGljIHZvaWQgc2V0RmVhdHVyZShTdHJpbmcgbmFtZSwgYm9vbGVhbiB2YWx1ZSkKKyAgICAgICAgdGhyb3dzIFNBWE5vdFJlY29nbml6ZWRFeGNlcHRpb24sIFNBWE5vdFN1cHBvcnRlZEV4Y2VwdGlvbgorICAgIHsKKyAgICAgICAgcGFyc2VyLnNldEZlYXR1cmUobmFtZSwgdmFsdWUpOworICAgIH0KKworICAgIHB1YmxpYyBib29sZWFuIGdldEZlYXR1cmUoU3RyaW5nIG5hbWUpCisgICAgICAgIHRocm93cyBTQVhOb3RSZWNvZ25pemVkRXhjZXB0aW9uLCBTQVhOb3RTdXBwb3J0ZWRFeGNlcHRpb24KKyAgICB7CisgICAgICAgIHJldHVybiBwYXJzZXIuZ2V0RmVhdHVyZShuYW1lKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvdGVtcGxhdGVzL29yZy9jY2lsL2Nvd2FuL3RhZ3NvdXAvSFRNTE1vZGVscy5qYXZhIGIvc3JjL3RlbXBsYXRlcy9vcmcvY2NpbC9jb3dhbi90YWdzb3VwL0hUTUxNb2RlbHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTgyYmNmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RlbXBsYXRlcy9vcmcvY2NpbC9jb3dhbi90YWdzb3VwL0hUTUxNb2RlbHMuamF2YQpAQCAtMCwwICsxLDMxIEBACisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiBUYWdTb3VwIGFuZCBpcyBDb3B5cmlnaHQgMjAwMi0yMDA4IGJ5IEpvaG4gQ293YW4uCisvLworLy8gVGFnU291cCBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsCisvLyBWZXJzaW9uIDIuMC4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGlzIGxpY2Vuc2UgYXQKKy8vIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAuICBZb3UgbWF5IGFsc28gaGF2ZQorLy8gYWRkaXRpb25hbCBsZWdhbCByaWdodHMgbm90IGdyYW50ZWQgYnkgdGhpcyBsaWNlbnNlLgorLy8KKy8vIFRhZ1NvdXAgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyB1bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIFRhZ1NvdXAKKy8vIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TCisvLyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZDsgbm90IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkKKy8vIG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKy8vIAorLy8gCisvLyBEZWZpbmVzIG1vZGVscyBmb3IgSFRNTFNjaGVtYQorCisvKioKK1RoaXMgaW50ZXJmYWNlIGNvbnRhaW5zIGdlbmVyYXRlZCBjb25zdGFudHMgcmVwcmVzZW50aW5nIEhUTUwgY29udGVudAorbW9kZWxzLiAgTG9naWNhbGx5LCBpdCBpcyBwYXJ0IG9mIEhUTUxTY2hlbWEsIGJ1dCBpdCBpcyBtb3JlCitjb252ZW5pZW50IHRvIGdlbmVyYXRlIHRoZSBjb25zdGFudHMgaW50byBhIHNlcGFyYXRlIGludGVyZmFjZS4KKyovCisKK3BhY2thZ2Ugb3JnLmNjaWwuY293YW4udGFnc291cDsKK3B1YmxpYyBpbnRlcmZhY2UgSFRNTE1vZGVscyB7CisKKwkvLyBTdGFydCBvZiBtb2RlbCBkZWZpbml0aW9ucworCUBATU9ERUxfREVGSU5JVElPTlNAQAorCisJLy8gRW5kIG9mIG1vZGVsIGRlZmluaXRpb25zCisKKwl9CmRpZmYgLS1naXQgYS9zcmMvdGVtcGxhdGVzL29yZy9jY2lsL2Nvd2FuL3RhZ3NvdXAvSFRNTFNjYW5uZXIuamF2YSBiL3NyYy90ZW1wbGF0ZXMvb3JnL2NjaWwvY293YW4vdGFnc291cC9IVE1MU2Nhbm5lci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2ODQ5M2EKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVtcGxhdGVzL29yZy9jY2lsL2Nvd2FuL3RhZ3NvdXAvSFRNTFNjYW5uZXIuamF2YQpAQCAtMCwwICsxLDQyNyBAQAorLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgVGFnU291cCBhbmQgaXMgQ29weXJpZ2h0IDIwMDItMjAwOCBieSBKb2huIENvd2FuLgorLy8KKy8vIFRhZ1NvdXAgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLAorLy8gVmVyc2lvbiAyLjAuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhpcyBsaWNlbnNlIGF0CisvLyBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAgLiAgWW91IG1heSBhbHNvIGhhdmUKKy8vIGFkZGl0aW9uYWwgbGVnYWwgcmlnaHRzIG5vdCBncmFudGVkIGJ5IHRoaXMgbGljZW5zZS4KKy8vCisvLyBUYWdTb3VwIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gdW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBUYWdTb3VwCisvLyBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUworLy8gT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQ7IG5vdCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5CisvLyBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisvLyAKKy8vIAorcGFja2FnZSBvcmcuY2NpbC5jb3dhbi50YWdzb3VwOworaW1wb3J0IGphdmEuaW8uKjsKK2ltcG9ydCBvcmcueG1sLnNheC5TQVhFeGNlcHRpb247CitpbXBvcnQgb3JnLnhtbC5zYXguTG9jYXRvcjsKKworLyoqCitUaGlzIGNsYXNzIGltcGxlbWVudHMgYSB0YWJsZS1kcml2ZW4gc2Nhbm5lciBmb3IgSFRNTCwgYWxsb3dpbmcgZm9yIGxvdHMgb2YKK2RlZmVjdHMuICBJdCBpbXBsZW1lbnRzIHRoZSBTY2FubmVyIGludGVyZmFjZSwgd2hpY2ggYWNjZXB0cyBhIFJlYWRlcgorb2JqZWN0IHRvIGZldGNoIGNoYXJhY3RlcnMgZnJvbSBhbmQgYSBTY2FuSGFuZGxlciBvYmplY3QgdG8gcmVwb3J0IGxleGljYWwKK2V2ZW50cyB0by4KKyovCisKK3B1YmxpYyBjbGFzcyBIVE1MU2Nhbm5lciBpbXBsZW1lbnRzIFNjYW5uZXIsIExvY2F0b3IgeworCisJLy8gU3RhcnQgb2Ygc3RhdGUgdGFibGUKKwlAQFNUQVRFX1RBQkxFQEAKKwkvLyBFbmQgb2Ygc3RhdGUgdGFibGUKKworCXByaXZhdGUgU3RyaW5nIHRoZVB1YmxpY2lkOwkJCS8vIExvY2F0b3Igc3RhdGUKKwlwcml2YXRlIFN0cmluZyB0aGVTeXN0ZW1pZDsKKwlwcml2YXRlIGludCB0aGVMYXN0TGluZTsKKwlwcml2YXRlIGludCB0aGVMYXN0Q29sdW1uOworCXByaXZhdGUgaW50IHRoZUN1cnJlbnRMaW5lOworCXByaXZhdGUgaW50IHRoZUN1cnJlbnRDb2x1bW47CisKKwlpbnQgdGhlU3RhdGU7CQkJCQkvLyBDdXJyZW50IHN0YXRlCisJaW50IHRoZU5leHRTdGF0ZTsJCQkJLy8gTmV4dCBzdGF0ZQorCWNoYXJbXSB0aGVPdXRwdXRCdWZmZXIgPSBuZXcgY2hhclsyMDBdOwkvLyBPdXRwdXQgYnVmZmVyCisJaW50IHRoZVNpemU7CQkJCQkvLyBDdXJyZW50IGJ1ZmZlciBzaXplCisJaW50W10gdGhlV2luTWFwID0gewkJCQkvLyBXaW5kb3dzIGNoYXJzIG1hcAorCQkweDIwQUMsIDB4RkZGRCwgMHgyMDFBLCAweDAxOTIsIDB4MjAxRSwgMHgyMDI2LCAweDIwMjAsIDB4MjAyMSwKKwkJMHgwMkM2LCAweDIwMzAsIDB4MDE2MCwgMHgyMDM5LCAweDAxNTIsIDB4RkZGRCwgMHgwMTdELCAweEZGRkQsCisJCTB4RkZGRCwgMHgyMDE4LCAweDIwMTksIDB4MjAxQywgMHgyMDFELCAweDIwMjIsIDB4MjAxMywgMHgyMDE0LAorCQkweDAyREMsIDB4MjEyMiwgMHgwMTYxLCAweDIwM0EsIDB4MDE1MywgMHhGRkZELCAweDAxN0UsIDB4MDE3OH07CisKKwkvLyBDb21wZW5zYXRlIGZvciBidWcgaW4gUHVzaGJhY2tSZWFkZXIgdGhhdCBhbGxvd3MKKwkvLyBwdXNoaW5nIGJhY2sgRU9GLgorCXByaXZhdGUgdm9pZCB1bnJlYWQoUHVzaGJhY2tSZWFkZXIgciwgaW50IGMpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCWlmIChjICE9IC0xKSByLnVucmVhZChjKTsKKwkJfQorCisJLy8gTG9jYXRvciBpbXBsZW1lbnRhdGlvbgorCisJcHVibGljIGludCBnZXRMaW5lTnVtYmVyKCkgeworCQlyZXR1cm4gdGhlTGFzdExpbmU7CisJCX0KKwlwdWJsaWMgaW50IGdldENvbHVtbk51bWJlcigpIHsKKwkJcmV0dXJuIHRoZUxhc3RDb2x1bW47CisJCX0KKwlwdWJsaWMgU3RyaW5nIGdldFB1YmxpY0lkKCkgeworCQlyZXR1cm4gdGhlUHVibGljaWQ7CisJCX0KKwlwdWJsaWMgU3RyaW5nIGdldFN5c3RlbUlkKCkgeworCQlyZXR1cm4gdGhlU3lzdGVtaWQ7CisJCX0KKworCisJLy8gU2Nhbm5lciBpbXBsZW1lbnRhdGlvbgorCisJLyoqCisJUmVzZXQgZG9jdW1lbnQgbG9jYXRvciwgc3VwcGx5aW5nIHN5c3RlbWlkIGFuZCBwdWJsaWNpZC4KKwlAcGFyYW0gc3lzdGVtaWQgU3lzdGVtIGlkCisJQHBhcmFtIHB1YmxpY2lkIFB1YmxpYyBpZAorCSovCisKKwlwdWJsaWMgdm9pZCByZXNldERvY3VtZW50TG9jYXRvcihTdHJpbmcgcHVibGljaWQsIFN0cmluZyBzeXN0ZW1pZCkgeworCQl0aGVQdWJsaWNpZCA9IHB1YmxpY2lkOworCQl0aGVTeXN0ZW1pZCA9IHN5c3RlbWlkOworCQl0aGVMYXN0TGluZSA9IHRoZUxhc3RDb2x1bW4gPSB0aGVDdXJyZW50TGluZSA9IHRoZUN1cnJlbnRDb2x1bW4gPSAwOworCQl9CisKKwkvKioKKwlTY2FuIEhUTUwgc291cmNlLCByZXBvcnRpbmcgbGV4aWNhbCBldmVudHMuCisJQHBhcmFtIHIwIFJlYWRlciB0aGF0IHByb3ZpZGVzIGNoYXJhY3RlcnMKKwlAcGFyYW0gaCBTY2FuSGFuZGxlciB0aGF0IGFjY2VwdHMgbGV4aWNhbCBldmVudHMuCisJKi8KKworCXB1YmxpYyB2b2lkIHNjYW4oUmVhZGVyIHIwLCBTY2FuSGFuZGxlciBoKSB0aHJvd3MgSU9FeGNlcHRpb24sIFNBWEV4Y2VwdGlvbiB7CisJCXRoZVN0YXRlID0gU19QQ0RBVEE7CisJCVB1c2hiYWNrUmVhZGVyIHI7CisJCWlmIChyMCBpbnN0YW5jZW9mIFB1c2hiYWNrUmVhZGVyKSB7CisJCQlyID0gKFB1c2hiYWNrUmVhZGVyKXIwOworCQkJfQorCQllbHNlIGlmIChyMCBpbnN0YW5jZW9mIEJ1ZmZlcmVkUmVhZGVyKSB7CisJCQlyID0gbmV3IFB1c2hiYWNrUmVhZGVyKHIwKTsKKwkJCX0KKwkJZWxzZSB7CisJCQlyID0gbmV3IFB1c2hiYWNrUmVhZGVyKG5ldyBCdWZmZXJlZFJlYWRlcihyMCkpOworCQkJfQorCisJCWludCBmaXJzdENoYXIgPSByLnJlYWQoKTsJLy8gUmVtb3ZlIGFueSBsZWFkaW5nIEJPTQorCQlpZiAoZmlyc3RDaGFyICE9ICdcdUZFRkYnKSB1bnJlYWQociwgZmlyc3RDaGFyKTsKKworCQl3aGlsZSAodGhlU3RhdGUgIT0gU19ET05FKSB7CisJCQlpbnQgY2ggPSByLnJlYWQoKTsKKworCQkJLy8gUHJvY2VzcyBjb250cm9sIGNoYXJhY3RlcnMKKwkJCWlmIChjaCA+PSAweDgwICYmIGNoIDw9IDB4OUYpIGNoID0gdGhlV2luTWFwW2NoLTB4ODBdOworCisJCQlpZiAoY2ggPT0gJ1xyJykgeworCQkJCWNoID0gci5yZWFkKCk7CQkvLyBleHBlY3QgTEYgbmV4dAorCQkJCWlmIChjaCAhPSAnXG4nKSB7CisJCQkJCXVucmVhZChyLCBjaCk7CS8vIG5vcGUKKwkJCQkJY2ggPSAnXG4nOworCQkJCQl9CisJCQkJfQorCisJCQlpZiAoY2ggPT0gJ1xuJykgeworCQkJCXRoZUN1cnJlbnRMaW5lKys7CisJCQkJdGhlQ3VycmVudENvbHVtbiA9IDA7CisJCQkJfQorCQkJZWxzZSB7CisJCQkJdGhlQ3VycmVudENvbHVtbisrOworCQkJCX0KKworCQkJaWYgKCEoY2ggPj0gMHgyMCB8fCBjaCA9PSAnXG4nIHx8IGNoID09ICdcdCcgfHwgY2ggPT0gLTEpKSBjb250aW51ZTsKKworCQkJLy8gU2VhcmNoIHN0YXRlIHRhYmxlCisJCQlpbnQgYWN0aW9uID0gMDsKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgc3RhdGV0YWJsZS5sZW5ndGg7IGkgKz0gNCkgeworCQkJCWlmICh0aGVTdGF0ZSAhPSBzdGF0ZXRhYmxlW2ldKSB7CisJCQkJCWlmIChhY3Rpb24gIT0gMCkgYnJlYWs7CisJCQkJCWNvbnRpbnVlOworCQkJCQl9CisJCQkJaWYgKHN0YXRldGFibGVbaSsxXSA9PSAwKSB7CisJCQkJCWFjdGlvbiA9IHN0YXRldGFibGVbaSsyXTsKKwkJCQkJdGhlTmV4dFN0YXRlID0gc3RhdGV0YWJsZVtpKzNdOworCQkJCQl9CisJCQkJZWxzZSBpZiAoc3RhdGV0YWJsZVtpKzFdID09IGNoKSB7CisJCQkJCWFjdGlvbiA9IHN0YXRldGFibGVbaSsyXTsKKwkJCQkJdGhlTmV4dFN0YXRlID0gc3RhdGV0YWJsZVtpKzNdOworCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKy8vCQkJU3lzdGVtLmVyci5wcmludGxuKCJJbiAiICsgZGVidWdfc3RhdGVuYW1lc1t0aGVTdGF0ZV0gKyAiIGdvdCAiICsgbmljZWNoYXIoY2gpICsgIiBkb2luZyAiICsgZGVidWdfYWN0aW9ubmFtZXNbYWN0aW9uXSArICIgdGhlbiAiICsgZGVidWdfc3RhdGVuYW1lc1t0aGVOZXh0U3RhdGVdKTsKKwkJCXN3aXRjaCAoYWN0aW9uKSB7CisJCQljYXNlIDA6CisJCQkJdGhyb3cgbmV3IEVycm9yKAorIkhUTUxTY2FubmVyIGNhbid0IGNvcGUgd2l0aCAiICsgSW50ZWdlci50b1N0cmluZyhjaCkgKyAiIGluIHN0YXRlICIgKworSW50ZWdlci50b1N0cmluZyh0aGVTdGF0ZSkpOworICAgICAgICAJCWNhc2UgQV9BRFVQOgorCQkJCWguYWR1cCh0aGVPdXRwdXRCdWZmZXIsIDAsIHRoZVNpemUpOworCQkJCXRoZVNpemUgPSAwOworCQkJCWJyZWFrOworICAgICAgICAJCWNhc2UgQV9BRFVQX1NBVkU6CisJCQkJaC5hZHVwKHRoZU91dHB1dEJ1ZmZlciwgMCwgdGhlU2l6ZSk7CisJCQkJdGhlU2l6ZSA9IDA7CisJCQkJc2F2ZShjaCwgaCk7CisJCQkJYnJlYWs7CisgICAgICAgIAkJY2FzZSBBX0FEVVBfU1RBR0M6CisJCQkJaC5hZHVwKHRoZU91dHB1dEJ1ZmZlciwgMCwgdGhlU2l6ZSk7CisJCQkJdGhlU2l6ZSA9IDA7CisJCQkJaC5zdGFnYyh0aGVPdXRwdXRCdWZmZXIsIDAsIHRoZVNpemUpOworCQkJCWJyZWFrOworICAgICAgICAJCWNhc2UgQV9BTkFNRToKKwkJCQloLmFuYW1lKHRoZU91dHB1dEJ1ZmZlciwgMCwgdGhlU2l6ZSk7CisJCQkJdGhlU2l6ZSA9IDA7CisJCQkJYnJlYWs7CisgICAgICAgIAkJY2FzZSBBX0FOQU1FX0FEVVA6CisJCQkJaC5hbmFtZSh0aGVPdXRwdXRCdWZmZXIsIDAsIHRoZVNpemUpOworCQkJCXRoZVNpemUgPSAwOworCQkJCWguYWR1cCh0aGVPdXRwdXRCdWZmZXIsIDAsIHRoZVNpemUpOworCQkJCWJyZWFrOworICAgICAgICAJCWNhc2UgQV9BTkFNRV9BRFVQX1NUQUdDOgorCQkJCWguYW5hbWUodGhlT3V0cHV0QnVmZmVyLCAwLCB0aGVTaXplKTsKKwkJCQl0aGVTaXplID0gMDsKKwkJCQloLmFkdXAodGhlT3V0cHV0QnVmZmVyLCAwLCB0aGVTaXplKTsKKwkJCQloLnN0YWdjKHRoZU91dHB1dEJ1ZmZlciwgMCwgdGhlU2l6ZSk7CisJCQkJYnJlYWs7CisgICAgICAgIAkJY2FzZSBBX0FWQUw6CisJCQkJaC5hdmFsKHRoZU91dHB1dEJ1ZmZlciwgMCwgdGhlU2l6ZSk7CisJCQkJdGhlU2l6ZSA9IDA7CisJCQkJYnJlYWs7CisgICAgICAgIAkJY2FzZSBBX0FWQUxfU1RBR0M6CisJCQkJaC5hdmFsKHRoZU91dHB1dEJ1ZmZlciwgMCwgdGhlU2l6ZSk7CisJCQkJdGhlU2l6ZSA9IDA7CisJCQkJaC5zdGFnYyh0aGVPdXRwdXRCdWZmZXIsIDAsIHRoZVNpemUpOworCQkJCWJyZWFrOworCQkJY2FzZSBBX0NEQVRBOgorCQkJCW1hcmsoKTsKKwkJCQkvLyBzdXBwcmVzcyB0aGUgZmluYWwgIl1dIiBpbiB0aGUgYnVmZmVyCisJCQkJaWYgKHRoZVNpemUgPiAxKSB0aGVTaXplIC09IDI7CisJCQkJaC5wY2RhdGEodGhlT3V0cHV0QnVmZmVyLCAwLCB0aGVTaXplKTsKKwkJCQl0aGVTaXplID0gMDsKKwkJCQlicmVhazsKKwkJCWNhc2UgQV9FTlRJVFlfU1RBUlQ6CisJCQkJaC5wY2RhdGEodGhlT3V0cHV0QnVmZmVyLCAwLCB0aGVTaXplKTsKKwkJCQl0aGVTaXplID0gMDsKKwkJCQlzYXZlKGNoLCBoKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgQV9FTlRJVFk6CisJCQkJbWFyaygpOworCQkJCWNoYXIgY2gxID0gKGNoYXIpY2g7CisvLwkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIkdvdCAiICsgY2gxICsgIiBpbiBzdGF0ZSAiICsgKCh0aGVTdGF0ZSA9PSBTX0VOVCkgPyAiU19FTlQiIDogKCh0aGVTdGF0ZSA9PSBTX05DUikgPyAiU19OQ1IiIDogIlVOSyIpKSk7CisJCQkJaWYgKHRoZVN0YXRlID09IFNfRU5UICYmIGNoMSA9PSAnIycpIHsKKwkJCQkJdGhlTmV4dFN0YXRlID0gU19OQ1I7CisJCQkJCXNhdmUoY2gsIGgpOworCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCWVsc2UgaWYgKHRoZVN0YXRlID09IFNfTkNSICYmIChjaDEgPT0gJ3gnIHx8IGNoMSA9PSAnWCcpKSB7CisJCQkJCXRoZU5leHRTdGF0ZSA9IFNfWE5DUjsKKwkJCQkJc2F2ZShjaCwgaCk7CisJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJZWxzZSBpZiAodGhlU3RhdGUgPT0gU19FTlQgJiYgQ2hhcmFjdGVyLmlzTGV0dGVyT3JEaWdpdChjaDEpKSB7CisJCQkJCXNhdmUoY2gsIGgpOworCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCWVsc2UgaWYgKHRoZVN0YXRlID09IFNfTkNSICYmIENoYXJhY3Rlci5pc0RpZ2l0KGNoMSkpIHsKKwkJCQkJc2F2ZShjaCwgaCk7CisJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJZWxzZSBpZiAodGhlU3RhdGUgPT0gU19YTkNSICYmIChDaGFyYWN0ZXIuaXNEaWdpdChjaDEpIHx8ICJhYmNkZWZBQkNERUYiLmluZGV4T2YoY2gxKSAhPSAtMSkpIHsKKwkJCQkJc2F2ZShjaCwgaCk7CisJCQkJCWJyZWFrOworCQkJCQl9CisKKwkJCQkvLyBUaGUgd2hvbGUgZW50aXR5IHJlZmVyZW5jZSBoYXMgYmVlbiBjb2xsZWN0ZWQKKy8vCQkJCVN5c3RlbS5lcnIucHJpbnRsbigiJSUiICsgbmV3IFN0cmluZyh0aGVPdXRwdXRCdWZmZXIsIDAsIHRoZVNpemUpKTsKKwkJCQloLmVudGl0eSh0aGVPdXRwdXRCdWZmZXIsIDEsIHRoZVNpemUgLSAxKTsKKwkJCQlpbnQgZW50ID0gaC5nZXRFbnRpdHkoKTsKKy8vCQkJCVN5c3RlbS5lcnIucHJpbnRsbigiJSUgdmFsdWUgPSAiICsgZW50KTsKKwkJCQlpZiAoZW50ICE9IDApIHsKKwkJCQkJdGhlU2l6ZSA9IDA7CisJCQkJCWlmIChlbnQgPj0gMHg4MCAmJiBlbnQgPD0gMHg5RikgeworCQkJCQkJZW50ID0gdGhlV2luTWFwW2VudC0weDgwXTsKKwkJCQkJCX0KKwkJCQkJaWYgKGVudCA8IDB4MjApIHsKKwkJCQkJCS8vIENvbnRyb2wgYmVjb21lcyBzcGFjZQorCQkJCQkJZW50ID0gMHgyMDsKKwkJCQkJCX0KKwkJCQkJZWxzZSBpZiAoZW50ID49IDB4RDgwMCAmJiBlbnQgPD0gMHhERkZGKSB7CisJCQkJCQkvLyBTdXJyb2dhdGVzIGdldCBkcm9wcGVkCisJCQkJCQllbnQgPSAwOworCQkJCQkJfQorCQkJCQllbHNlIGlmIChlbnQgPD0gMHhGRkZGKSB7CisJCQkJCQkvLyBCTVAgY2hhcmFjdGVyCisJCQkJCQlzYXZlKGVudCwgaCk7CisJCQkJCQl9CisJCQkJCWVsc2UgeworCQkJCQkJLy8gQXN0cmFsIGNvbnZlcnRlZCB0byB0d28gc3Vycm9nYXRlcworCQkJCQkJZW50IC09IDB4MTAwMDA7CisJCQkJCQlzYXZlKChlbnQ+PjEwKSArIDB4RDgwMCwgaCk7CisJCQkJCQlzYXZlKChlbnQmMHgzRkYpICsgMHhEQzAwLCBoKTsKKwkJCQkJCX0KKwkJCQkJaWYgKGNoICE9ICc7JykgeworCQkJCQkJdW5yZWFkKHIsIGNoKTsKKwkJCQkJCXRoZUN1cnJlbnRDb2x1bW4tLTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCWVsc2UgeworCQkJCQl1bnJlYWQociwgY2gpOworCQkJCQl0aGVDdXJyZW50Q29sdW1uLS07CisJCQkJCX0KKwkJCQl0aGVOZXh0U3RhdGUgPSBTX1BDREFUQTsKKwkJCQlicmVhazsKKyAgICAgICAgCQljYXNlIEFfRVRBRzoKKwkJCQloLmV0YWcodGhlT3V0cHV0QnVmZmVyLCAwLCB0aGVTaXplKTsKKwkJCQl0aGVTaXplID0gMDsKKwkJCQlicmVhazsKKyAgICAgICAgCQljYXNlIEFfREVDTDoKKwkJCQloLmRlY2wodGhlT3V0cHV0QnVmZmVyLCAwLCB0aGVTaXplKTsKKwkJCQl0aGVTaXplID0gMDsKKwkJCQlicmVhazsKKyAgICAgICAgCQljYXNlIEFfR0k6CisJCQkJaC5naSh0aGVPdXRwdXRCdWZmZXIsIDAsIHRoZVNpemUpOworCQkJCXRoZVNpemUgPSAwOworCQkJCWJyZWFrOworCQkJY2FzZSBBX0dJX1NUQUdDOgorCQkJCWguZ2kodGhlT3V0cHV0QnVmZmVyLCAwLCB0aGVTaXplKTsKKwkJCQl0aGVTaXplID0gMDsKKwkJCQloLnN0YWdjKHRoZU91dHB1dEJ1ZmZlciwgMCwgdGhlU2l6ZSk7CisJCQkJYnJlYWs7CisgICAgICAgIAkJY2FzZSBBX0xUOgorCQkJCW1hcmsoKTsKKwkJCQlzYXZlKCc8JywgaCk7CisJCQkJc2F2ZShjaCwgaCk7CisJCQkJYnJlYWs7CisJCQljYXNlIEFfTFRfUENEQVRBOgorCQkJCW1hcmsoKTsKKwkJCQlzYXZlKCc8JywgaCk7CisJCQkJaC5wY2RhdGEodGhlT3V0cHV0QnVmZmVyLCAwLCB0aGVTaXplKTsKKwkJCQl0aGVTaXplID0gMDsKKwkJCQlicmVhazsKKyAgICAgICAgCQljYXNlIEFfUENEQVRBOgorCQkJCW1hcmsoKTsKKwkJCQloLnBjZGF0YSh0aGVPdXRwdXRCdWZmZXIsIDAsIHRoZVNpemUpOworCQkJCXRoZVNpemUgPSAwOworCQkJCWJyZWFrOworCQkJY2FzZSBBX0NNTlQ6CisJCQkJbWFyaygpOworCQkJCWguY21udCh0aGVPdXRwdXRCdWZmZXIsIDAsIHRoZVNpemUpOworCQkJCXRoZVNpemUgPSAwOworCQkJCWJyZWFrOworCQkJY2FzZSBBX01JTlVTMzoKKwkJCQlzYXZlKCctJywgaCk7CisJCQkJc2F2ZSgnICcsIGgpOworCQkJCWJyZWFrOworCQkJY2FzZSBBX01JTlVTMjoKKwkJCQlzYXZlKCctJywgaCk7CisJCQkJc2F2ZSgnICcsIGgpOworCQkJCS8vIGZhbGwgdGhyb3VnaCBpbnRvIEFfTUlOVVMKKwkJCWNhc2UgQV9NSU5VUzoKKwkJCQlzYXZlKCctJywgaCk7CisJCQkJc2F2ZShjaCwgaCk7CisJCQkJYnJlYWs7CisgICAgICAgIAkJY2FzZSBBX1BJOgorCQkJCW1hcmsoKTsKKwkJCQloLnBpKHRoZU91dHB1dEJ1ZmZlciwgMCwgdGhlU2l6ZSk7CisJCQkJdGhlU2l6ZSA9IDA7CisJCQkJYnJlYWs7CisgICAgICAgIAkJY2FzZSBBX1BJVEFSR0VUOgorCQkJCWgucGl0YXJnZXQodGhlT3V0cHV0QnVmZmVyLCAwLCB0aGVTaXplKTsKKwkJCQl0aGVTaXplID0gMDsKKwkJCQlicmVhazsKKyAgICAgICAgCQljYXNlIEFfUElUQVJHRVRfUEk6CisJCQkJaC5waXRhcmdldCh0aGVPdXRwdXRCdWZmZXIsIDAsIHRoZVNpemUpOworCQkJCXRoZVNpemUgPSAwOworCQkJCWgucGkodGhlT3V0cHV0QnVmZmVyLCAwLCB0aGVTaXplKTsKKwkJCQlicmVhazsKKyAgICAgICAgCQljYXNlIEFfU0FWRToKKwkJCQlzYXZlKGNoLCBoKTsKKwkJCQlicmVhazsKKyAgICAgICAgCQljYXNlIEFfU0tJUDoKKwkJCQlicmVhazsKKyAgICAgICAgCQljYXNlIEFfU1A6CisJCQkJc2F2ZSgnICcsIGgpOworCQkJCWJyZWFrOworICAgICAgICAJCWNhc2UgQV9TVEFHQzoKKwkJCQloLnN0YWdjKHRoZU91dHB1dEJ1ZmZlciwgMCwgdGhlU2l6ZSk7CisJCQkJdGhlU2l6ZSA9IDA7CisJCQkJYnJlYWs7CisJCQljYXNlIEFfRU1QVFlUQUc6CisJCQkJbWFyaygpOworLy8JCQkJU3lzdGVtLmVyci5wcmludGxuKCIlJSUgRW1wdHkgdGFnIHNlZW4iKTsKKwkJCQlpZiAodGhlU2l6ZSA+IDApIGguZ2kodGhlT3V0cHV0QnVmZmVyLCAwLCB0aGVTaXplKTsKKwkJCQl0aGVTaXplID0gMDsKKwkJCQloLnN0YWdlKHRoZU91dHB1dEJ1ZmZlciwgMCwgdGhlU2l6ZSk7CisJCQkJYnJlYWs7CisJCQljYXNlIEFfVU5HRVQ6CisJCQkJdW5yZWFkKHIsIGNoKTsKKwkJCQl0aGVDdXJyZW50Q29sdW1uLS07CisJCQkJYnJlYWs7CisgICAgICAgIAkJY2FzZSBBX1VOU0FWRV9QQ0RBVEE6CisJCQkJaWYgKHRoZVNpemUgPiAwKSB0aGVTaXplLS07CisJCQkJaC5wY2RhdGEodGhlT3V0cHV0QnVmZmVyLCAwLCB0aGVTaXplKTsKKwkJCQl0aGVTaXplID0gMDsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJdGhyb3cgbmV3IEVycm9yKCJDYW4ndCBwcm9jZXNzIHN0YXRlICIgKyBhY3Rpb24pOworCQkJCX0KKwkJCXRoZVN0YXRlID0gdGhlTmV4dFN0YXRlOworCQkJfQorCQloLmVvZih0aGVPdXRwdXRCdWZmZXIsIDAsIDApOworCQl9CisKKwkvKioKKwkqIE1hcmsgdGhlIGN1cnJlbnQgc2NhbiBwb3NpdGlvbiBhcyBhICJwb2ludCBvZiBpbnRlcmVzdCIgLSBzdGFydCBvZiBhIHRhZywKKwkqIGNkYXRhLCBwcm9jZXNzaW5nIGluc3RydWN0aW9uIGV0Yy4KKwkqLworCisJcHJpdmF0ZSB2b2lkIG1hcmsoKSB7CisJCXRoZUxhc3RDb2x1bW4gPSB0aGVDdXJyZW50Q29sdW1uOworCQl0aGVMYXN0TGluZSA9IHRoZUN1cnJlbnRMaW5lOworCQl9CisKKwkvKioKKwlBIGNhbGxiYWNrIGZvciB0aGUgU2NhbkhhbmRsZXIgdGhhdCBhbGxvd3MgaXQgdG8gZm9yY2UKKwl0aGUgbGV4ZXIgc3RhdGUgdG8gQ0RBVEEgY29udGVudCAobm8gbWFya3VwIGlzIHJlY29nbml6ZWQgZXhjZXB0CisJdGhlIGVuZCBvZiBlbGVtZW50LgorCSovCisKKwlwdWJsaWMgdm9pZCBzdGFydENEQVRBKCkgeyB0aGVOZXh0U3RhdGUgPSBTX0NEQVRBOyB9CisKKwlwcml2YXRlIHZvaWQgc2F2ZShpbnQgY2gsIFNjYW5IYW5kbGVyIGgpIHRocm93cyBJT0V4Y2VwdGlvbiwgU0FYRXhjZXB0aW9uIHsKKwkJaWYgKHRoZVNpemUgPj0gdGhlT3V0cHV0QnVmZmVyLmxlbmd0aCAtIDIwKSB7CisJCQlpZiAodGhlU3RhdGUgPT0gU19QQ0RBVEEgfHwgdGhlU3RhdGUgPT0gU19DREFUQSkgeworCQkJCS8vIFJldHVybiBhIGJ1ZmZlci1zaXplZCBjaHVuayBvZiBQQ0RBVEEKKwkJCQloLnBjZGF0YSh0aGVPdXRwdXRCdWZmZXIsIDAsIHRoZVNpemUpOworCQkJCXRoZVNpemUgPSAwOworCQkJCX0KKwkJCWVsc2UgeworCQkJCS8vIEdyb3cgdGhlIGJ1ZmZlciBzaXplCisJCQkJY2hhcltdIG5ld091dHB1dEJ1ZmZlciA9IG5ldyBjaGFyW3RoZU91dHB1dEJ1ZmZlci5sZW5ndGggKiAyXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmFycmF5Y29weSh0aGVPdXRwdXRCdWZmZXIsIDAsIG5ld091dHB1dEJ1ZmZlciwgMCwgdGhlU2l6ZSsxKTsKKwkJCQl0aGVPdXRwdXRCdWZmZXIgPSBuZXdPdXRwdXRCdWZmZXI7CisJCQkJfQorCQkJfQorCQl0aGVPdXRwdXRCdWZmZXJbdGhlU2l6ZSsrXSA9IChjaGFyKWNoOworCQl9CisKKwkvKioKKwlUZXN0IHByb2NlZHVyZS4gIFJlYWRzIEhUTUwgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQgYW5kIHdyaXRlcworCVBZWCB0byB0aGUgc3RhbmRhcmQgb3V0cHV0LgorCSovCisKKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmd2KSB0aHJvd3MgSU9FeGNlcHRpb24sIFNBWEV4Y2VwdGlvbiB7CisJCVNjYW5uZXIgcyA9IG5ldyBIVE1MU2Nhbm5lcigpOworCQlSZWFkZXIgciA9IG5ldyBJbnB1dFN0cmVhbVJlYWRlcihTeXN0ZW0uaW4sICJVVEYtOCIpOworCQlXcml0ZXIgdyA9IG5ldyBPdXRwdXRTdHJlYW1Xcml0ZXIoU3lzdGVtLm91dCwgIlVURi04Iik7CisJCVBZWFdyaXRlciBwdyA9IG5ldyBQWVhXcml0ZXIodyk7CisJCXMuc2NhbihyLCBwdyk7CisJCXcuY2xvc2UoKTsKKwkJfQorCisKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgbmljZWNoYXIoaW50IGluKSB7CisJCWlmIChpbiA9PSAnXG4nKSByZXR1cm4gIlxcbiI7CisJCWlmIChpbiA8IDMyKSByZXR1cm4gIjB4IitJbnRlZ2VyLnRvSGV4U3RyaW5nKGluKTsKKwkJcmV0dXJuICInIisoKGNoYXIpaW4pKyInIjsKKwkJfQorCisJfQpkaWZmIC0tZ2l0IGEvc3JjL3RlbXBsYXRlcy9vcmcvY2NpbC9jb3dhbi90YWdzb3VwL0hUTUxTY2hlbWEuamF2YSBiL3NyYy90ZW1wbGF0ZXMvb3JnL2NjaWwvY293YW4vdGFnc291cC9IVE1MU2NoZW1hLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRlZjY1NwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZW1wbGF0ZXMvb3JnL2NjaWwvY293YW4vdGFnc291cC9IVE1MU2NoZW1hLmphdmEKQEAgLTAsMCArMSwzOCBAQAorLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgVGFnU291cCBhbmQgaXMgQ29weXJpZ2h0IDIwMDItMjAwOCBieSBKb2huIENvd2FuLgorLy8KKy8vIFRhZ1NvdXAgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLAorLy8gVmVyc2lvbiAyLjAuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhpcyBsaWNlbnNlIGF0CisvLyBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAgLiAgWW91IG1heSBhbHNvIGhhdmUKKy8vIGFkZGl0aW9uYWwgbGVnYWwgcmlnaHRzIG5vdCBncmFudGVkIGJ5IHRoaXMgbGljZW5zZS4KKy8vCisvLyBUYWdTb3VwIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gdW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBUYWdTb3VwCisvLyBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUworLy8gT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQ7IG5vdCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5CisvLyBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisvLyAKKy8vIAorLyoqCitUaGlzIGNsYXNzIHByb3ZpZGVzIGEgU2NoZW1hIHRoYXQgaGFzIGJlZW4gcHJlaW5pdGlhbGl6ZWQgd2l0aCBIVE1MCitlbGVtZW50cywgYXR0cmlidXRlcywgYW5kIGNoYXJhY3RlciBlbnRpdHkgZGVjbGFyYXRpb25zLiAgQWxsIHRoZSBkZWNsYXJhdGlvbnMKK25vcm1hbGx5IHByb3ZpZGVkIHdpdGggSFRNTCA0LjAxIGFyZSBnaXZlbiwgcGx1cyBzb21lIHRoYXQgYXJlIElFLXNwZWNpZmljCithbmQgTlM0LXNwZWNpZmljLiAgQXR0cmlidXRlIGRlY2xhcmF0aW9ucyBvZiB0eXBlIENEQVRBIHdpdGggbm8gZGVmYXVsdAordmFsdWUgYXJlIG5vdCBpbmNsdWRlZC4KKyovCisKK3BhY2thZ2Ugb3JnLmNjaWwuY293YW4udGFnc291cDsKK3B1YmxpYyBjbGFzcyBIVE1MU2NoZW1hIGV4dGVuZHMgU2NoZW1hIGltcGxlbWVudHMgSFRNTE1vZGVscyB7CisKKwkvKioKKwlSZXR1cm5zIGEgbmV3bHkgY29uc3RydWN0ZWQgSFRNTFNjaGVtYSBvYmplY3QgaW5kZXBlbmRlbnQgb2YKKwlhbnkgZXhpc3Rpbmcgb25lcy4KKwkqLworCisJcHVibGljIEhUTUxTY2hlbWEoKSB7CisJCS8vIFN0YXJ0IG9mIFNjaGVtYSBjYWxscworCQlAQFNDSEVNQV9DQUxMU0BACisJCS8vIEVuZCBvZiBTY2hlbWEgY2FsbHMKKwkJfQorCisKKwl9CmRpZmYgLS1naXQgYS9zdG1sL3N0bWwucm5jIGIvc3RtbC9zdG1sLnJuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzY3NjQwCi0tLSAvZGV2L251bGwKKysrIGIvc3RtbC9zdG1sLnJuYwpAQCAtMCwwICsxLDQ5IEBACisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFRhZ1NvdXAgYW5kIGlzIENvcHlyaWdodCAyMDAyLTIwMDggYnkgSm9obiBDb3dhbi4KKyMKKyMgVGFnU291cCBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsCisjIFZlcnNpb24gMi4wLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoaXMgbGljZW5zZSBhdAorIyBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAgLiAgWW91IG1heSBhbHNvIGhhdmUKKyMgYWRkaXRpb25hbCBsZWdhbCByaWdodHMgbm90IGdyYW50ZWQgYnkgdGhpcyBsaWNlbnNlLgorIworIyBUYWdTb3VwIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorIyB1bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIFRhZ1NvdXAKKyMgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMKKyMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQ7IG5vdCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5CisjIG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworIyBTdGF0ZSBUYWJsZSBNYXJrdXAgTGFuZ3VhZ2UKK2RlZmF1bHQgbmFtZXNwYWNlID0gImh0dHA6Ly93d3cuY2NpbC5vcmcvfmNvd2FuL1hNTC90YWdzb3VwL3N0bWwiCitzdGFydCA9IHN0YXRldGFibGUKKworIyMgUm9vdCBlbGVtZW50CitzdGF0ZXRhYmxlID0gZWxlbWVudCBzdGF0ZXRhYmxlIHsKKwlhdHRyaWJ1dGUgdmVyc2lvbiB7IjEuMCJ9LAorCWF0dHJpYnV0ZSBpZCB7eHNkOklEfT8sCisJc3ltYm9sKiwKKwlhY3Rpb24rLAorCXN0YXRlKworCX0KKworIyMgQSBzeW1ib2wgc3BlY2lmaWVzIGEgbm9uLWNoYXJhY3RlciBpbnB1dCB0byB0aGUgc3RhdGUgbWFjaGluZQorc3ltYm9sID0gZWxlbWVudCBzeW1ib2wgeworCWF0dHJpYnV0ZSBpZCB7eHNkOklEfQorCX0KKworIyMgQW4gYWN0aW9uIGlzIHRoZSBuYW1lIGZvciB3aGF0IHRoZSBzdGF0ZSBtYWNoaW5lIGRvZXMKK2FjdGlvbiA9IGVsZW1lbnQgYWN0aW9uIHsKKwlhdHRyaWJ1dGUgaWQge3hzZDpJRH0KKwl9CisKKyMjIEEgc3RhdGUgc3BlY2lmaWVzIGFuIGludGVybmFsIHN0YXRlIG9mIHRoZSBtYWNoaW5lCitzdGF0ZSA9IGVsZW1lbnQgc3RhdGUgeworCWF0dHJpYnV0ZSBpZCB7eHNkOklEfSwKKwl0cioKKwl9CisKKyMjIEEgdHIgc3BlY2lmaWVzIGEgc3RhdGUgdHJhbnNpdGlvbgordHIgPSBlbGVtZW50IHRyIHsKKwkoYXR0cmlidXRlIHN5bWJvbCB7eHNkOklEUkVGfSB8CisJCWF0dHJpYnV0ZSBjaGFyIHt4c2Q6c3RyaW5nIHtsZW5ndGggPSAiMSJ9fSksCisJYXR0cmlidXRlIGFjdGlvbiB7eHNkOklEUkVGfSwKKwlhdHRyaWJ1dGUgbmV3c3RhdGUge3hzZDpJRFJFRn0KKwl9CmRpZmYgLS1naXQgYS9zdG1sL3N0bWwueHNsdCBiL3N0bWwvc3RtbC54c2x0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjYzZjOWQKLS0tIC9kZXYvbnVsbAorKysgYi9zdG1sL3N0bWwueHNsdApAQCAtMCwwICsxLDE1MCBAQAorPCEtLQorLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgVGFnU291cCBhbmQgaXMgQ29weXJpZ2h0IDIwMDItMjAwOCBieSBKb2huIENvd2FuLgorLy8gCisvLyBUYWdTb3VwIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwKKy8vIFZlcnNpb24gMi4wLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoaXMgbGljZW5zZSBhdAorLy8gaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIC4gIFlvdSBtYXkgYWxzbyBoYXZlCisvLyBhZGRpdGlvbmFsIGxlZ2FsIHJpZ2h0cyBub3QgZ3JhbnRlZCBieSB0aGlzIGxpY2Vuc2UuCisvLworLy8gVGFnU291cCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIHVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgVGFnU291cAorLy8gaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMKKy8vIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkOyBub3QgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eQorLy8gb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorLS0+CisKKzx4c2w6dHJhbnNmb3JtIHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIgorCXhtbG5zOnN0bWw9Imh0dHA6Ly93d3cuY2NpbC5vcmcvfmNvd2FuL1hNTC90YWdzb3VwL3N0bWwiCisJdmVyc2lvbj0iMS4wIj4KKworICA8eHNsOm91dHB1dCBtZXRob2Q9InRleHQiLz4KKworICA8eHNsOnN0cmlwLXNwYWNlIGVsZW1lbnRzPSIqIi8+CisKKyAgPCEtLSBUaGUgbWFpbiB0ZW1wbGF0ZS4gIEdlbmVyYXRlcyBkZWNsYXJhdGlvbnMgZm9yIHN0YXRlcyBhbmQKKyAgICAgICBhY3Rpb25zLCB0aGVuIHRoZSBzdGF0ZXRhYmxlIGl0c2VsZiwgYW5kIHRoZW4gYSBjb21tZW50ICh1c2VkIGZvcgorICAgICAgIG1hbnVhbCBjaGVja2luZykgbGlzdGluZyBhbGwgdGhlIGFjdGlvbnMgY29tcGFjdGx5LiAgLS0+CisgIDx4c2w6dGVtcGxhdGUgbWF0Y2g9InN0bWw6c3RhdGV0YWJsZSI+CisgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJzdG1sOnN0YXRlIj4KKyAgICAgIDx4c2w6c29ydCBzZWxlY3Q9IkBpZCIvPgorICAgIDwveHNsOmFwcGx5LXRlbXBsYXRlcz4KKworICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0ic3RtbDphY3Rpb24iPgorICAgICAgPHhzbDpzb3J0IHNlbGVjdD0iQGlkIi8+CisgICAgPC94c2w6YXBwbHktdGVtcGxhdGVzPgorCisgICAgPHhzbDp0ZXh0PiYjeDk7cHJpdmF0ZSBzdGF0aWMgaW50W10gc3RhdGV0YWJsZSA9IHsmI3hBOzwveHNsOnRleHQ+CisgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJzdG1sOnN0YXRlL3N0bWw6dHIiPgorICAgICAgPHhzbDpzb3J0IHNlbGVjdD0iLi4vQGlkIi8+CisgICAgICA8eHNsOnNvcnQgc2VsZWN0PSJAc3ltYm9sIi8+CisgICAgICA8eHNsOnNvcnQgc2VsZWN0PSJAY2hhciIvPgorICAgIDwveHNsOmFwcGx5LXRlbXBsYXRlcz4KKyAgICA8eHNsOnRleHQ+JiN4QTsmI3g5O307JiN4QTs8L3hzbDp0ZXh0PgorCisgICAgPHhzbDp0ZXh0PiYjeDk7cHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nW10gZGVidWdfYWN0aW9ubmFtZXMgPSB7ICIiPC94c2w6dGV4dD4KKyAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9InN0bWw6YWN0aW9uIiBtb2RlPSJkZWJ1ZyI+CisgICAgICA8eHNsOnNvcnQgc2VsZWN0PSJAaWQiLz4KKyAgICA8L3hzbDphcHBseS10ZW1wbGF0ZXM+CisgICAgPHhzbDp0ZXh0Pn07JiN4QTs8L3hzbDp0ZXh0PgorCisgICAgPHhzbDp0ZXh0PiYjeDk7cHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nW10gZGVidWdfc3RhdGVuYW1lcyA9IHsgIiI8L3hzbDp0ZXh0PgorICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0ic3RtbDpzdGF0ZSIgbW9kZT0iZGVidWciPgorICAgICAgPHhzbDpzb3J0IHNlbGVjdD0iQGlkIi8+CisgICAgPC94c2w6YXBwbHktdGVtcGxhdGVzPgorICAgIDx4c2w6dGV4dD59OyYjeEE7PC94c2w6dGV4dD4KKworICAgIDx4c2w6dGV4dD4mI3hBOzwveHNsOnRleHQ+CisgIDwveHNsOnRlbXBsYXRlPgorCisgIDwhLS0gR2VuZXJhdGUgYSBzaW5nbGUgc3RhdGUgZGVjbGFyYXRpb24uICAtLT4KKyAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ic3RtbDpzdGF0ZSI+CisgICAgPHhzbDp0ZXh0PiYjeDk7cHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IDwveHNsOnRleHQ+CisgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBpZCIvPgorICAgIDx4c2w6dGV4dD4gPSA8L3hzbDp0ZXh0PgorICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJwb3NpdGlvbigpIi8+CisgICAgPHhzbDp0ZXh0PjsmI3hBOzwveHNsOnRleHQ+CisgIDwveHNsOnRlbXBsYXRlPgorCisgIDwhLS0gR2VuZXJhdGUgYSBzaW5nbGUgYWN0aW9uIGRlY2xhcmF0aW9uLiAgLS0+CisgIDx4c2w6dGVtcGxhdGUgbWF0Y2g9InN0bWw6YWN0aW9uIj4KKyAgICA8eHNsOnRleHQ+JiN4OTtwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgPC94c2w6dGV4dD4KKyAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQGlkIi8+CisgICAgPHhzbDp0ZXh0PiA9IDwveHNsOnRleHQ+CisgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9InBvc2l0aW9uKCkiLz4KKyAgICA8eHNsOnRleHQ+OyYjeEE7PC94c2w6dGV4dD4KKyAgPC94c2w6dGVtcGxhdGU+CisKKyAgPCEtLSBHZW5lcmF0ZSBhIHNpbmdsZSByb3cgb2YgdGhlIHN0YXRldGFibGUuICAtLT4KKyAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ic3RtbDp0ciI+CisgICAgPHhzbDpjaG9vc2U+CisgICAgICA8eHNsOndoZW4gdGVzdD0iQHN5bWJvbCA9ICdFT0YnIj4KKyAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImR1bXAtdHIiPgorICAgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJjaGFyIiBzZWxlY3Q9IiZxdW90Oy0xJnF1b3Q7Ii8+CisgICAgICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+CisgICAgICA8L3hzbDp3aGVuPgorICAgICAgPHhzbDp3aGVuIHRlc3Q9IkBzeW1ib2wgPSAnTEYnIj4KKyAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImR1bXAtdHIiPgorICAgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJjaGFyIiBzZWxlY3Q9IiZxdW90OydcbicmcXVvdDsiLz4KKyAgICAgICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4KKyAgICAgIDwveHNsOndoZW4+CisgICAgICA8eHNsOndoZW4gdGVzdD0iQHN5bWJvbCA9ICdkZWZhdWx0JyI+CisgICAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJkdW1wLXRyIj4KKyAgICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0iY2hhciIgc2VsZWN0PSImcXVvdDswJnF1b3Q7Ii8+CisgICAgICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+CisgICAgICA8L3hzbDp3aGVuPgorICAgICAgPHhzbDp3aGVuIHRlc3Q9IkBjaGFyID0gJnF1b3Q7JmFwb3M7JnF1b3Q7Ij4KKyAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImR1bXAtdHIiPgorICAgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJjaGFyIiBzZWxlY3Q9IiZxdW90OydcJycmcXVvdDsiLz4KKyAgICAgICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4KKyAgICAgIDwveHNsOndoZW4+CisgICAgICA8eHNsOndoZW4gdGVzdD0iQHN5bWJvbCA9ICdTJyI+CisgICAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJkdW1wLXRyIj4KKyAgICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0iY2hhciIgc2VsZWN0PSImcXVvdDsnICcmcXVvdDsiLz4KKyAgICAgICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4KKyAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImR1bXAtdHIiPgorICAgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJjaGFyIiBzZWxlY3Q9IiZxdW90OydcbicmcXVvdDsiLz4KKyAgICAgICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4KKyAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImR1bXAtdHIiPgorICAgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJjaGFyIiBzZWxlY3Q9IiZxdW90OydcdCcmcXVvdDsiLz4KKyAgICAgICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4KKyAgICAgIDwveHNsOndoZW4+CisgICAgICA8eHNsOm90aGVyd2lzZT4KKyAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImR1bXAtdHIiPgorICAgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJjaGFyIgorCQlzZWxlY3Q9ImNvbmNhdCgmcXVvdDsnJnF1b3Q7LCBAY2hhciwgJnF1b3Q7JyZxdW90OykiLz4KKyAgICAgICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4KKyAgICAgIDwveHNsOm90aGVyd2lzZT4KKyAgICA8L3hzbDpjaG9vc2U+CisgIDwveHNsOnRlbXBsYXRlPgorCisgIDwhLS0gVGhpcyBpcyBhIHN1YnJvdXRpbmUgdXNlZCB0byBkbyB0aGUgYWN0dWFsIHByaW50aW5nLiAtLT4KKyAgPHhzbDp0ZW1wbGF0ZSBuYW1lPSJkdW1wLXRyIj4KKyAgICA8eHNsOnBhcmFtIG5hbWU9ImNoYXIiLz4KKyAgICA8eHNsOnRleHQ+JiN4OTsmI3g5OzwveHNsOnRleHQ+CisgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4uL0BpZCIvPgorICAgIDx4c2w6dGV4dD4sIDwveHNsOnRleHQ+CisgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRjaGFyIi8+CisgICAgPHhzbDp0ZXh0PiwgPC94c2w6dGV4dD4KKyAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQGFjdGlvbiIvPgorICAgIDx4c2w6dGV4dD4sIDwveHNsOnRleHQ+CisgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBuZXdzdGF0ZSIvPgorICAgIDx4c2w6dGV4dD4sJiN4QTs8L3hzbDp0ZXh0PgorICA8L3hzbDp0ZW1wbGF0ZT4KKworICA8IS0tIEdlbmVyYXRlIGEgc2luZ2xlIGFjdGlvbiBuYW1lIGluIHRoZSAiQWN0aW9uczoiIGNvbW1lbnQuCisgICAgICAgIFRoZSBtb2RlIGlzIHVzZWQgdG8ga2VlcCBYU0xUIGZyb20gY29uZnVzaW5nIHRoaXMgd2l0aCB0aGUKKyAgICAgICAgcmVndWxhciBhY3Rpb25zIHRlbXBsYXRlIHRoYXQgZG9lcyB0aGUgYWN0aW9uIGRlY2xhcmF0aW9ucy4gIC0tPgorICA8eHNsOnRlbXBsYXRlIG1hdGNoPSJzdG1sOmFjdGlvbiIgbW9kZT0iZGVidWciPgorICAgIDx4c2w6dGV4dD4sICI8L3hzbDp0ZXh0PgorICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAaWQiLz4KKyAgICA8eHNsOnRleHQ+IjwveHNsOnRleHQ+CisgIDwveHNsOnRlbXBsYXRlPgorCisgIDwhLS0gR2VuZXJhdGUgYSBzaW5nbGUgc3RhdCBkZWJ1ZyBuYW1lLiAgLS0+CisgIDx4c2w6dGVtcGxhdGUgbWF0Y2g9InN0bWw6c3RhdGUiIG1vZGU9ImRlYnVnIj4KKyAgICA8eHNsOnRleHQ+LCAiPC94c2w6dGV4dD4KKyAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQGlkIi8+CisgICAgPHhzbDp0ZXh0PiI8L3hzbDp0ZXh0PgorICA8L3hzbDp0ZW1wbGF0ZT4KKworPC94c2w6dHJhbnNmb3JtPgpkaWZmIC0tZ2l0IGEvdGFnc291cC4xIGIvdGFnc291cC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiYTZhZTQKLS0tIC9kZXYvbnVsbAorKysgYi90YWdzb3VwLjEKQEAgLTAsMCArMSwxODMgQEAKK1wnIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFRhZ1NvdXAgYW5kIGlzIENvcHlyaWdodCAyMDAyLTIwMDggYnkgSm9obiBDb3dhbi4KK1wnCitcJyBUYWdTb3VwIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwKK1wnIFZlcnNpb24gMi4wLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoaXMgbGljZW5zZSBhdAorXCcgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIC4gIFlvdSBtYXkgYWxzbyBoYXZlCitcJyBhZGRpdGlvbmFsIGxlZ2FsIHJpZ2h0cyBub3QgZ3JhbnRlZCBieSB0aGlzIGxpY2Vuc2UuCitcJworXCcgVGFnU291cCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK1wnIHVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgVGFnU291cAorXCcgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMKK1wnIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkOyBub3QgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eQorXCcgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorXCcKKy5USCBUQUdTT1VQICIxIiAiSmFudWFyeSAyMDA4IiAiVGFnU291cCAxLjIiICJVc2VyIENvbW1hbmRzIgorLlNIIE5BTUUKK3RhZ3NvdXAgXC0gY29udmVydCBuYXN0eSwgdWdseSBIVE1MIHRvIGNsZWFuIFhIVE1MCisuU0ggU1lOT1BTSVMKKy5CIGphdmEgLWphciB0YWdzb3VwLTEuMgorWworLkkgb3B0aW9ucworXSBbCisuSSBmaWxlcworXQorLlNIIERFU0NSSVBUSU9OCisuXCIgQWRkIGFueSBhZGRpdGlvbmFsIGRlc2NyaXB0aW9uIGhlcmUKKy5QUAorUmVjdGlmeSBhcmJpdHJhcnkgSFRNTCBpbnRvIGNsZWFuIFhIVE1MLAordXNpbmcgYSB0YWlsb3JlZCBkZXNjcmlwdGlvbiBvZiBIVE1MLgorVGhlIG91dHB1dCB3aWxsIGJlIHdlbGwtZm9ybWVkIFhNTCwgYnV0IG5vdCBuZWNlc3NhcmlseQorLkkgdmFsaWQKK1hIVE1MLgorLlBQCisuVFAKKy5CIC0tZmlsZXMKK211bHRpcGxlIGlucHV0CisuSSBmaWxlcworc2hvdWxkIGJlIHByb2Nlc3NlZCBpbnRvIGNvcnJlc3BvbmRpbmcgb3V0cHV0IGZpbGVzCisuVFAKKy5CSSAtLWVuY29kaW5nPSBlbmNvZGluZworc3BlY2lmaWVzIHRoZSBlbmNvZGluZyBvZiBpbnB1dCBmaWxlcworLlRQCisuQkkgLS1vdXRwdXQtZW5jb2Rpbmc9IGVuY29kaW5nCitzcGVjaWZpZXMgdGhlIGVuY29kaW5nIG9mIHRoZSBvdXRwdXQKKyhpZiB0aGUgZW5jb2RpbmcgbmFtZSBiZWdpbnMgd2l0aCBgYHV0ZicnLAordGhlIG91dHB1dCB3aWxsIG5vdCBjb250YWluIGNoYXJhY3RlciBlbnRpdGllczsKK290aGVyd2lzZSwgYWxsIG5vbi1BU0NJSSBjaGFyYWN0ZXJzIGFyZQorcmVwcmVzZW50ZWQgYXMgZW50aXRpZXMpCisuVFAKKy5CIC0taHRtbAorb3V0cHV0IHJlY3RpZmllZCBIVE1MIHJhdGhlciB0aGFuIFhNTCwKK29taXR0aW5nIHRoZSBYTUwgZGVjbGFyYXRpb24KK2FuZCBhbnkgbmFtZXNwYWNlIGRlY2xhcmF0aW9ucworLlRQCisuQiAtLW1ldGhvZD1odG1sCitvdXRwdXQgcmVjdGlmaWVkIEhUTUwgcmF0aGVyIHRoYW4gWE1MCisoZW5kLXRhZ3MgYXJlIG9taXR0ZWQgZm9yIGVtcHR5IGVsZW1lbnRzLAorYW5kIG5vIGNoYXJhY3RlciBlc2NhcGluZyBpcyBkb25lIGluCitzY3JpcHQgYW5kIHN0eWxlIGVsZW1lbnRzKQorLlRQCisuQiAtLW9taXQteG1sLWRlY2xhcmF0aW9uCitvbWl0IHRoZSBYTUwgZGVjbGFyYXRpb24KKy5UUAorLkIgLS1sZXhpY2FsCitvdXRwdXQgbGV4aWNhbCBmZWF0dXJlcyAoc3BlY2lmaWNhbGx5IGNvbW1lbnRzIGFuZCBhbnkgRE9DVFlQRSBkZWNsYXJhdGlvbikKKy5UUAorLkIgLS1ub25zCitzdXBwcmVzcyBuYW1lc3BhY2VzIGluIG91dHB1dAorLlRQCisuQiAtLW5vYm9nb25zCitzdXBwcmVzcyB1bmtub3duIG5vbi1IVE1MIGVsZW1lbnRzIGluIG91dHB1dAorLlRQCisuQiAtLW5vZGVmYXVsdHMKK3N1cHByZXNzIGRlZmF1bHQgYXR0cmlidXRlIHZhbHVlcworLlRQCisuQiAtLW5vY29sb25zCitjaGFuZ2UgZXhwbGljaXQgY29sb25zCitpbiBlbGVtZW50IGFuZCBhdHRyaWJ1dGUgbmFtZXMKK3RvIHVuZGVyc2NvcmVzCisuVFAKKy5CIC0tbm9yZXN0YXJ0Citkb24ndCByZXN0YXJ0IGFueSByZXN0YXJ0YWJsZSBlbGVtZW50cworLlRQCisuQiAtLWlnbm9yYWJsZQorcGFzcyB0aHJvdWdoIGlnbm9yYWJsZSB3aGl0ZXNwYWNlCisod2hpdGVzcGFjZSBpbiBlbGVtZW50LW9ubHkgY29udGVudCkKK3ZpYSBTQVggbWV0aG9kIGhhbmRsZXIgaWdub3JhYmxlV2hpdGVzcGFjZQorLlRQCisuQiAtLWFueQordHJlYXQgdW5rbm93biBub24tSFRNTCBlbGVtZW50cyBhcyBhbGxvd2luZyBhbnkgY29udGVudCAoZGVmYXVsdCkKKy5UUAorLkIgLS1lbXB0eWJvZ29ucwordHJlYXQgdW5rbm93biBub24tSFRNTCBlbGVtZW50cyBhcyBlbXB0eSBlbGVtZW50cworLlRQCisuQiAtLW5vcm9vdGJvZ29ucworZG9uJ3QgYWxsb3cgdW5rbm93biBub24tSFRNTCBlbGVtZW50cyB0byBiZSByb290IGVsZW1lbnRzCisuVFAKKy5CSSAtLWRvY3R5cGUtc3lzdGVtPSBzeXN0ZW0taWQKK2ZvcmNlIERPQ1RZUEUgZGVjbGFyYXRpb24gdG8gYmUgb3V0cHV0IHdpdGggc3BlY2lmaWVkIHN5c3RlbSBpZGVudGlmaWVyCisuVFAKKy5CSSAtLWRvY3R5cGUtcHVibGljPSBwdWJsaWMtaWQKK2ZvcmNlIERPQ1RZUEUgZGVjbGFyYXRpb24gdG8gYmUgb3V0cHV0IHdpdGggc3BlY2lmaWVkIHB1YmxpYyBpZGVudGlmaWVyCisuVFAKKy5CIC0tc3RhbmRhbG9uZT1beWVzfG5vXQorc3BlY2lmeSBzdGFuZGFsb25lIHBzZXVkby1hdHRyaWJ1dGUgaW4gb3V0cHV0IFhNTCBkZWNsYXJhdGlvbgorLlRQCisuQkkgLS12ZXJzaW9uPSB2ZXJzaW9uCitzcGVjaWZ5IHZlcnNpb24gcHNldWRvLWF0dHJpYnV0ZSBpbiBvdXRwdXQgWE1MIGRlY2xhcmF0aW9uCisoZG9lcyBub3QgYWZmZWN0IGFjdHVhbCB2ZXJzaW9uIG9mIFhNTCBvdXRwdXQpCisuVFAKKy5CIC0tbm9jZGF0YQordHJlYXQgdGhlIENEQVRBLWNvbnRlbnQgZWxlbWVudHMKKy5JIHNjcmlwdAorYW5kCisuSSBzdHlsZQorYXMgb3JkaW5hcnkgZWxlbWVudHMKKyhtb3N0bHkgZm9yIHRlc3RpbmcpCisuVFAKKy5CIC0tcHl4CitvdXRwdXQgUFlYIGZvcm1hdCByYXRoZXIgdGhhbiBYTUwKKyhtb3N0bHkgZm9yIHRlc3RpbmcpCisuVFAKKy5CIC0tcHl4aW4KK2lucHV0IGlzIFBZWC1mb3JtYXQgSFRNTAorKG1vc3RseSBmb3IgdGVzdGluZykKKy5UUAorLkIgLS1yZXVzZQorcmV1c2UgdGhlIHNhbWUgUGFyc2VyIG9iamVjdCBpbnRlcm5hbGx5CisoZm9yIHRlc3Rpbmcgb25seSkKKy5UUAorLkIgLS1oZWxwCitvdXRwdXQgYmFzaWMgaGVscAorLlRQCisuQiAtLXZlcnNpb24KK291dHB1dCB2ZXJzaW9uIG51bWJlcgorLlBQCisuQiBUYWdTb3VwCitpcyBhIHBhcnNlciBhbmQgcmVmb3JtYXR0ZXIgZm9yIG5hc3R5LCB1Z2x5IEhUTUwuCitJdHMgbm9ybWFsIHByb2Nlc3NpbmcgbW9kZSBpcyB0byBhY2NlcHQgSFRNTCBmaWxlcyBvbiB0aGUgY29tbWFuZCBsaW5lLAorb3IgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQgaWYgbm9uZSBhcmUgZ2l2ZW4sIGFuZCBvdXRwdXQgdGhlbQorYXMgY2xlYW4gWE1MCit0byB0aGUgc3RhbmRhcmQgb3V0cHV0LiAgVGhlIGVuY29kaW5nIGlzIGFzc3VtZWQgdG8gYmUgdGhlIHBsYXRmb3JtLWxvY2FsCitlbmNvZGluZyBvbiBpbnB1dCwgYW5kIGlzIGFsd2F5cyBVVEYtOCBvbiBvdXRwdXQuCisuUFAKK1doZW4gdGhlCisuQiAtLWZpbGVzCitvcHRpb24gaXMgZ2l2ZW4sIGVhY2ggaW5wdXQgZmlsZSBpcyBwcm9jZXNzZWQgaW50byBhbiBvdXRwdXQgZmlsZSBvZiB0aGUKK2NvcnJlc3BvbmRpbmcgbmFtZSwgd2l0aCB0aGUgZXh0ZW5zaW9uIGNoYW5nZWQgdG8KKy5JUiB4aHRtbCAuCitJZiB0aGUgZXh0ZW5zaW9uIGlzIGFscmVhZHkKKy5JUiB4aHRtbCAsCitpdCBpcyBjaGFuZ2VkIHRvCisuSVIgeGh0bWxfIC4KKy5QUAorVGFnU291cCB3aWxsIHJlcGFpciwgYnkgd2hhdGV2ZXIgbWVhbnMgbmVjZXNzYXJ5LAordmlvbGF0aW9ucyBvZiBYTUwgd2VsbC1mb3JtZWRuZXNzLiAgSW4gcGFydGljdWxhciwgaXQgd2lsbCBmaXggdXAKK21hbGZvcm1lZCBhdHRyaWJ1dGUgbmFtZXMgYW5kIHN1cHBseSBtaXNzaW5nIGF0dHJpYnV0ZS12YWx1ZSBxdW90YXRpb24gbWFya3MuCitNb3JlIHNpZ25pZmljYW50bHksIGl0IHN1cHBsaWVzIGVuZC10YWdzIHdoZXJlIEhUTUwgYWxsb3dzIHRoZW0KK3RvIGJlIG9taXR0ZWQsIGFuZCBzb21ldGltZXMgd2hlcmUgaXQgZG9lc24ndC4gIEl0IHdpbGwgZXZlbiBzdXBwbHkKK3N0YXJ0LXRhZ3Mgd2hlcmUgbmVjZXNzYXJ5OyBmb3IgZXhhbXBsZSwgaWYgYSBkb2N1bWVudCBiZWdpbnMgd2l0aCBhCis8bGk+IHRhZywgVGFnU291cCB3aWxsIGF1dG9tYXRpY2FsbHkgcHJlZml4IGl0IHdpdGggPGh0bWw+PGJvZHk+PHVsPi4KKy5QUAorLlNIIEJVR1MKK1RhZ1NvdXAgY2FuIGJlIGZvb2xlZCBieSBtaXNzaW5nIGNsb3NlIHF1b3RlcyBhZnRlciBhdHRyaWJ1dGUgdmFsdWVzLCBhbmQgYnkKK2luY29ycmVjdCBjaGFyYWN0ZXIgZW5jb2RpbmdzIChpdCBkb2VzIG5vdCBjb250YWluIGFuIGVuY29kaW5nIGd1ZXNzZXIpLgorLlBQCitUYWdTb3VwIGRvZXNuJ3QgdW5kZXJzdGFuZCBuYW1lc3BhY2UgZGVjbGFyYXRpb25zLCB3aGljaCBhcmUgbm90IHByb3Blcmx5CitwYXJ0IG9mIEhUTUwuICBJbnN0ZWFkLCBhbnkgZWxlbWVudCBvciBhdHRyaWJ1dGUgbmFtZSBiZWdpbm5pbmcKKy5JUiBmb28gOgord2lsbCBiZSBwdXQgaW50byB0aGUgYXJ0aWZpY2lhbCBuYW1lc3BhY2UKKy5SSSB1cm46eC1wcmVmaXg6IGZvbyAuCisuUFAKK0ZvciB0aGUgc2FtZSByZWFzb25zLCBuYW1lc3BhY2UtcXVhbGlmaWVkIGF0dHJpYnV0ZXMgbGlrZQoreG1sOnNwYWNlCitjYW4ndCBiZSByZXR1cm5lZCBhcyBkZWZhdWx0IHZhbHVlcywKK3Rob3VnaCBhbiBleHBsaWNpdCBhdHRyaWJ1dGUgaW4gdGhlIHhtbCBuYW1lc3BhY2UKK3dpbGwgYmUgcmV0dXJuZWQgd2l0aCB0aGUgcHJvcGVyIG5hbWVzcGFjZSBVUkkuCisuU0ggQVVUSE9SCitKb2huIENvd2FuIDxjb3dhbkBjY2lsLm9yZz4KKy5TSCBDT1BZUklHSFQKK0NvcHlyaWdodCBcKGNvIDIwMDItMjAwOCBKb2huIENvd2FuCisuYnIKK1RhZ1NvdXAgaXMgZnJlZSBzb2Z0d2FyZTsgc2VlIHRoZSBzb3VyY2UgZm9yIGNvcHlpbmcgY29uZGl0aW9ucy4gIFRoZXJlIGlzIE5PCit3YXJyYW50eTsgbm90IGV2ZW4gZm9yIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KZGlmZiAtLWdpdCBhL3RhZ3NvdXAudHh0IGIvdGFnc291cC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFiNTA5MAotLS0gL2Rldi9udWxsCisrKyBiL3RhZ3NvdXAudHh0CkBAIC0wLDAgKzEsMTYwIEBACivCtCBUaGlzIGZpbGUgaXMgcGFydCBvZiBUYWdTb3VwIGFuZCBpcyBDb3B5cmlnaHQgMjAwMuKAkDIwMDggYnkgSm9obgorQ293YW4uICDCtCDCtCBUYWdTb3VwIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgwrQgIFZlcuKAkAorc2lvbiAgIDIuMC4gICBZb3UgIG1heSAgb2J0YWluICBhICBjb3B5ICBvZiAgdGhpcyAgbGljZW5zZSAgYXQgIMK0CitodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TReKAkDIuMCAuICBZb3UgbWF5IGFsc28gaGF2ZSDCtAorYWRkaXRpb25hbCBsZWdhbCByaWdodHMgbm90IGdyYW50ZWQgYnkgdGhpcyBsaWNlbnNlLiAgwrQgwrQgVGFnU291cAoraXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0ICDCtCAgdW5sZXNzCityZXF1aXJlZCAgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIFRhZ1NvdXAgwrQgaXMKK2Rpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TCivCtCAgT0YgIEFOWSAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZDsgbm90IGV2ZW4gdGhlIGltcGxpZWQKK3dhcnJhbnR5IMK0IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiAgQSAgUEFSVElDVUxBUiAgUFVS4oCQCitUQUdTT1VQKDEpICAgICAgICAgICAgICAgICAgICAgICBVc2VyIENvbW1hbmRzICAgICAgICAgICAgICAgICAgICAgIFRBR1NPVVAoMSkKKworCisKK1BPU0UuICDCtAorCitOQU1FCisgICAgICAgdGFnc291cCAtIGNvbnZlcnQgbmFzdHksIHVnbHkgSFRNTCB0byBjbGVhbiBYSFRNTAorCitTWU5PUFNJUworICAgICAgIGphdmEgLWphciB0YWdzb3VwLTEuMiBbIG9wdGlvbnMgXSBbIGZpbGVzIF0KKworREVTQ1JJUFRJT04KKyAgICAgICBSZWN0aWZ5ICBhcmJpdHJhcnkgIEhUTUwgaW50byBjbGVhbiBYSFRNTCwgdXNpbmcgYSB0YWlsb3JlZCBkZXNjcmlwdGlvbgorICAgICAgIG9mIEhUTUwuICBUaGUgb3V0cHV0IHdpbGwgYmUgd2VsbC1mb3JtZWQgWE1MLCBidXQgbm90IG5lY2Vzc2FyaWx5IHZhbGlkCisgICAgICAgWEhUTUwuCisKKworICAgICAgIC0tZmlsZXMKKyAgICAgICAgICAgICAgbXVsdGlwbGUgaW5wdXQgZmlsZXMgc2hvdWxkIGJlIHByb2Nlc3NlZCBpbnRvIGNvcnJlc3BvbmRpbmcgb3V04oCQCisgICAgICAgICAgICAgIHB1dCBmaWxlcworCisgICAgICAgLS1lbmNvZGluZz1lbmNvZGluZworICAgICAgICAgICAgICBzcGVjaWZpZXMgdGhlIGVuY29kaW5nIG9mIGlucHV0IGZpbGVzCisKKyAgICAgICAtLW91dHB1dC1lbmNvZGluZz1lbmNvZGluZworICAgICAgICAgICAgICBzcGVjaWZpZXMgdGhlIGVuY29kaW5nIG9mICB0aGUgIG91dHB1dCAgKGlmICB0aGUgIGVuY29kaW5nICBuYW1lCisgICAgICAgICAgICAgIGJlZ2lucyB3aXRoIOKAmOKAmHV0ZuKAmeKAmSwgdGhlIG91dHB1dCB3aWxsIG5vdCBjb250YWluIGNoYXJhY3RlciBlbnRp4oCQCisgICAgICAgICAgICAgIHRpZXM7IG90aGVyd2lzZSwgYWxsIG5vbi1BU0NJSSAgY2hhcmFjdGVycyAgYXJlICByZXByZXNlbnRlZCAgYXMKKyAgICAgICAgICAgICAgZW50aXRpZXMpCisKKyAgICAgICAtLWh0bWwgb3V0cHV0IHJlY3RpZmllZCBIVE1MIHJhdGhlciB0aGFuIFhNTCwgb21pdHRpbmcgdGhlIFhNTCBkZWNsYXJh4oCQCisgICAgICAgICAgICAgIHRpb24gYW5kIGFueSBuYW1lc3BhY2UgZGVjbGFyYXRpb25zCisKKyAgICAgICAtLW1ldGhvZD1odG1sCisgICAgICAgICAgICAgIG91dHB1dCByZWN0aWZpZWQgSFRNTCByYXRoZXIgdGhhbiBYTUwgKGVuZC10YWdzIGFyZSBvbWl0dGVkICBmb3IKKyAgICAgICAgICAgICAgZW1wdHkgIGVsZW1lbnRzLCBhbmQgbm8gY2hhcmFjdGVyIGVzY2FwaW5nIGlzIGRvbmUgaW4gc2NyaXB0IGFuZAorICAgICAgICAgICAgICBzdHlsZSBlbGVtZW50cykKKworICAgICAgIC0tb21pdC14bWwtZGVjbGFyYXRpb24KKyAgICAgICAgICAgICAgb21pdCB0aGUgWE1MIGRlY2xhcmF0aW9uCisKKyAgICAgICAtLWxleGljYWwKKyAgICAgICAgICAgICAgb3V0cHV0IGxleGljYWwgZmVhdHVyZXMgKHNwZWNpZmljYWxseSBjb21tZW50cyBhbmQgIGFueSAgRE9DVFlQRQorICAgICAgICAgICAgICBkZWNsYXJhdGlvbikKKworICAgICAgIC0tbm9ucyBzdXBwcmVzcyBuYW1lc3BhY2VzIGluIG91dHB1dAorCisgICAgICAgLS1ub2JvZ29ucworICAgICAgICAgICAgICBzdXBwcmVzcyB1bmtub3duIG5vbi1IVE1MIGVsZW1lbnRzIGluIG91dHB1dAorCisgICAgICAgLS1ub2RlZmF1bHRzCisgICAgICAgICAgICAgIHN1cHByZXNzIGRlZmF1bHQgYXR0cmlidXRlIHZhbHVlcworCisgICAgICAgLS1ub2NvbG9ucworICAgICAgICAgICAgICBjaGFuZ2UgIGV4cGxpY2l0IGNvbG9ucyBpbiBlbGVtZW50IGFuZCBhdHRyaWJ1dGUgbmFtZXMgdG8gdW5kZXLigJAKKyAgICAgICAgICAgICAgc2NvcmVzCisKKyAgICAgICAtLW5vcmVzdGFydAorICAgICAgICAgICAgICBkb27igJl0IHJlc3RhcnQgYW55IHJlc3RhcnRhYmxlIGVsZW1lbnRzCisKKyAgICAgICAtLWlnbm9yYWJsZQorICAgICAgICAgICAgICBwYXNzIHRocm91Z2ggaWdub3JhYmxlIHdoaXRlc3BhY2UgICh3aGl0ZXNwYWNlICBpbiAgZWxlbWVudC1vbmx5CisgICAgICAgICAgICAgIGNvbnRlbnQpIHZpYSBTQVggbWV0aG9kIGhhbmRsZXIgaWdub3JhYmxlV2hpdGVzcGFjZQorCisgICAgICAgLS1hbnkgIHRyZWF0ICAgdW5rbm93biAgIG5vbi1IVE1MICBlbGVtZW50cyAgYXMgIGFsbG93aW5nICBhbnkgIGNvbnRlbnQKKyAgICAgICAgICAgICAgKGRlZmF1bHQpCisKKyAgICAgICAtLWVtcHR5Ym9nb25zCisgICAgICAgICAgICAgIHRyZWF0IHVua25vd24gbm9uLUhUTUwgZWxlbWVudHMgYXMgZW1wdHkgZWxlbWVudHMKKworICAgICAgIC0tbm9yb290Ym9nb25zCisgICAgICAgICAgICAgIGRvbuKAmXQgYWxsb3cgdW5rbm93biBub24tSFRNTCBlbGVtZW50cyB0byBiZSByb290IGVsZW1lbnRzCisKKyAgICAgICAtLWRvY3R5cGUtc3lzdGVtPXN5c3RlbS1pZAorICAgICAgICAgICAgICBmb3JjZSBET0NUWVBFIGRlY2xhcmF0aW9uIHRvIGJlICBvdXRwdXQgIHdpdGggIHNwZWNpZmllZCAgc3lzdGVtCisgICAgICAgICAgICAgIGlkZW50aWZpZXIKKworICAgICAgIC0tZG9jdHlwZS1wdWJsaWM9cHVibGljLWlkCisgICAgICAgICAgICAgIGZvcmNlICBET0NUWVBFICBkZWNsYXJhdGlvbiAgdG8gIGJlIG91dHB1dCB3aXRoIHNwZWNpZmllZCBwdWJsaWMKKyAgICAgICAgICAgICAgaWRlbnRpZmllcgorCisgICAgICAgLS1zdGFuZGFsb25lPVt5ZXN8bm9dCisgICAgICAgICAgICAgIHNwZWNpZnkgc3RhbmRhbG9uZSBwc2V1ZG8tYXR0cmlidXRlIGluIG91dHB1dCBYTUwgZGVjbGFyYXRpb24KKworICAgICAgIC0tdmVyc2lvbj12ZXJzaW9uCisgICAgICAgICAgICAgIHNwZWNpZnkgdmVyc2lvbiBwc2V1ZG8tYXR0cmlidXRlIGluIG91dHB1dCBYTUwgZGVjbGFyYXRpb24gKGRvZXMKKyAgICAgICAgICAgICAgbm90IGFmZmVjdCBhY3R1YWwgdmVyc2lvbiBvZiBYTUwgb3V0cHV0KQorCisgICAgICAgLS1ub2NkYXRhCisgICAgICAgICAgICAgIHRyZWF0ICB0aGUgIENEQVRBLWNvbnRlbnQgIGVsZW1lbnRzIHNjcmlwdCBhbmQgc3R5bGUgYXMgb3JkaW5hcnkKKyAgICAgICAgICAgICAgZWxlbWVudHMgKG1vc3RseSBmb3IgdGVzdGluZykKKworICAgICAgIC0tcHl4ICBvdXRwdXQgUFlYIGZvcm1hdCByYXRoZXIgdGhhbiBYTUwgKG1vc3RseSBmb3IgdGVzdGluZykKKworICAgICAgIC0tcHl4aW4KKyAgICAgICAgICAgICAgaW5wdXQgaXMgUFlYLWZvcm1hdCBIVE1MIChtb3N0bHkgZm9yIHRlc3RpbmcpCisKKyAgICAgICAtLXJldXNlCisgICAgICAgICAgICAgIHJldXNlIHRoZSBzYW1lIFBhcnNlciBvYmplY3QgaW50ZXJuYWxseSAoZm9yIHRlc3Rpbmcgb25seSkKKworICAgICAgIC0taGVscCBvdXRwdXQgYmFzaWMgaGVscAorCisgICAgICAgLS12ZXJzaW9uCisgICAgICAgICAgICAgIG91dHB1dCB2ZXJzaW9uIG51bWJlcgorCisgICAgICAgVGFnU291cCBpcyBhIHBhcnNlciBhbmQgcmVmb3JtYXR0ZXIgZm9yIG5hc3R5LCB1Z2x5IEhUTUwuICAgSXRzICBub3JtYWwKKyAgICAgICBwcm9jZXNzaW5nICBtb2RlICBpcyAgdG8gYWNjZXB0IEhUTUwgZmlsZXMgb24gdGhlIGNvbW1hbmQgbGluZSwgb3IgZnJvbQorICAgICAgIHRoZSBzdGFuZGFyZCBpbnB1dCBpZiBub25lIGFyZSBnaXZlbiwgYW5kIG91dHB1dCB0aGVtIGFzIGNsZWFuICBYTUwgIHRvCisgICAgICAgdGhlICBzdGFuZGFyZCBvdXRwdXQuICBUaGUgZW5jb2RpbmcgaXMgYXNzdW1lZCB0byBiZSB0aGUgcGxhdGZvcm0tbG9jYWwKKyAgICAgICBlbmNvZGluZyBvbiBpbnB1dCwgYW5kIGlzIGFsd2F5cyBVVEYtOCBvbiBvdXRwdXQuCisKKyAgICAgICBXaGVuIHRoZSAtLWZpbGVzIG9wdGlvbiBpcyBnaXZlbiwgZWFjaCBpbnB1dCBmaWxlIGlzIHByb2Nlc3NlZCBpbnRvICBhbgorICAgICAgIG91dHB1dCAgZmlsZSAgb2YgIHRoZSBjb3JyZXNwb25kaW5nIG5hbWUsIHdpdGggdGhlIGV4dGVuc2lvbiBjaGFuZ2VkIHRvCisgICAgICAgeGh0bWwuICBJZiB0aGUgZXh0ZW5zaW9uIGlzIGFscmVhZHkgeGh0bWwsIGl0IGlzIGNoYW5nZWQgdG8geGh0bWxfLgorCisgICAgICAgVGFnU291cCB3aWxsIHJlcGFpciwgYnkgd2hhdGV2ZXIgbWVhbnMgIG5lY2Vzc2FyeSwgIHZpb2xhdGlvbnMgIG9mICBYTUwKKyAgICAgICB3ZWxsLWZvcm1lZG5lc3MuICAgSW4gIHBhcnRpY3VsYXIsICBpdCAgd2lsbCBmaXggdXAgbWFsZm9ybWVkIGF0dHJpYnV0ZQorICAgICAgIG5hbWVzIGFuZCBzdXBwbHkgbWlzc2luZyBhdHRyaWJ1dGUtdmFsdWUgcXVvdGF0aW9uIG1hcmtzLiAgTW9yZSBzaWduaWbigJAKKyAgICAgICBpY2FudGx5LCBpdCBzdXBwbGllcyBlbmQtdGFncyB3aGVyZSBIVE1MIGFsbG93cyB0aGVtIHRvIGJlIG9taXR0ZWQsIGFuZAorICAgICAgIHNvbWV0aW1lcyB3aGVyZSBpdCBkb2VzbuKAmXQuICBJdCB3aWxsIGV2ZW4gc3VwcGx5IHN0YXJ0LXRhZ3Mgd2hlcmUgIG5lY+KAkAorICAgICAgIGVzc2FyeTsgZm9yIGV4YW1wbGUsIGlmIGEgZG9jdW1lbnQgYmVnaW5zIHdpdGggYSA8bGk+IHRhZywgVGFnU291cCB3aWxsCisgICAgICAgYXV0b21hdGljYWxseSBwcmVmaXggaXQgd2l0aCA8aHRtbD48Ym9keT48dWw+LgorCisKK0JVR1MKKyAgICAgICBUYWdTb3VwIGNhbiBiZSBmb29sZWQgYnkgbWlzc2luZyBjbG9zZSBxdW90ZXMgYWZ0ZXIgIGF0dHJpYnV0ZSAgdmFsdWVzLAorICAgICAgIGFuZCAgYnkgIGluY29ycmVjdCBjaGFyYWN0ZXIgZW5jb2RpbmdzIChpdCBkb2VzIG5vdCBjb250YWluIGFuIGVuY29kaW5nCisgICAgICAgZ3Vlc3NlcikuCisKKyAgICAgICBUYWdTb3VwIGRvZXNu4oCZdCB1bmRlcnN0YW5kIG5hbWVzcGFjZSBkZWNsYXJhdGlvbnMsIHdoaWNoIGFyZSBub3QgIHByb3DigJAKKyAgICAgICBlcmx5ICBwYXJ0ICBvZiAgSFRNTC4gIEluc3RlYWQsIGFueSBlbGVtZW50IG9yIGF0dHJpYnV0ZSBuYW1lIGJlZ2lubmluZworICAgICAgIGZvbzogd2lsbCBiZSBwdXQgaW50byB0aGUgYXJ0aWZpY2lhbCBuYW1lc3BhY2UgdXJuOngtcHJlZml4OmZvby4KKworICAgICAgIEZvciB0aGUgc2FtZSByZWFzb25zLCAgbmFtZXNwYWNlLXF1YWxpZmllZCAgYXR0cmlidXRlcyAgbGlrZSAgeG1sOnNwYWNlCisgICAgICAgY2Fu4oCZdCAgYmUgIHJldHVybmVkICBhcyBkZWZhdWx0IHZhbHVlcywgdGhvdWdoIGFuIGV4cGxpY2l0IGF0dHJpYnV0ZSBpbgorICAgICAgIHRoZSB4bWwgbmFtZXNwYWNlIHdpbGwgYmUgcmV0dXJuZWQgd2l0aCB0aGUgcHJvcGVyIG5hbWVzcGFjZSBVUkkuCisKK0FVVEhPUgorICAgICAgIEpvaG4gQ293YW4gPGNvd2FuQGNjaWwub3JnPgorCitDT1BZUklHSFQKKyAgICAgICBDb3B5cmlnaHQgwqkgMjAwMi0yMDA4IEpvaG4gQ293YW4KKyAgICAgICBUYWdTb3VwIGlzIGZyZWUgc29mdHdhcmU7IHNlZSB0aGUgc291cmNlIGZvciBjb3B5aW5nIGNvbmRpdGlvbnMuICBUaGVyZQorICAgICAgIGlzICBOTyB3YXJyYW50eTsgbm90IGV2ZW4gZm9yIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1XigJAKKyAgICAgICBMQVIgUFVSUE9TRS4KKworCisKK1RhZ1NvdXAgMS4yICAgICAgICAgICAgICAgICAgICAgIEphbnVhcnkgMjAwOCAgICAgICAgICAgICAgICAgICAgICAgVEFHU09VUCgxKQpkaWZmIC0tZ2l0IGEvdHNzbC90c3NsLW1vZGVscy54c2x0IGIvdHNzbC90c3NsLW1vZGVscy54c2x0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhOTgzYjQKLS0tIC9kZXYvbnVsbAorKysgYi90c3NsL3Rzc2wtbW9kZWxzLnhzbHQKQEAgLTAsMCArMSw0NyBAQAorPCEtLSBHZW5lcmF0ZSBKYXZhIGNvZGUgdG8gYmUgaW5zZXJ0ZWQgaW50byBIVE1MTW9kZWxzLmphdmEuICAtLT4KKworPCEtLQorLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgVGFnU291cCBhbmQgaXMgQ29weXJpZ2h0IDIwMDItMjAwOCBieSBKb2huIENvd2FuLgorLy8gCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiBUYWdTb3VwIGFuZCBpcyBDb3B5cmlnaHQgMjAwMi0yMDA4IGJ5IEpvaG4gQ293YW4uCisvLworLy8gVGFnU291cCBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsCisvLyBWZXJzaW9uIDIuMC4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGlzIGxpY2Vuc2UgYXQKKy8vIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAuICBZb3UgbWF5IGFsc28gaGF2ZQorLy8gYWRkaXRpb25hbCBsZWdhbCByaWdodHMgbm90IGdyYW50ZWQgYnkgdGhpcyBsaWNlbnNlLgorLy8KKy8vIFRhZ1NvdXAgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyB1bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIFRhZ1NvdXAKKy8vIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TCisvLyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZDsgbm90IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkKKy8vIG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKy0tPgorCis8eHNsOnRyYW5zZm9ybSB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIKKwl4bWxuczp0c3NsPSJodHRwOi8vd3d3LmNjaWwub3JnL35jb3dhbi9YTUwvdGFnc291cC90c3NsIgorCXZlcnNpb249IjEuMCI+CisKKyAgPHhzbDpvdXRwdXQgbWV0aG9kPSJ0ZXh0Ii8+CisKKyAgPHhzbDpzdHJpcC1zcGFjZSBlbGVtZW50cz0iKiIvPgorCisgIDwhLS0gVGhlIG1haW4gdGVtcGxhdGUuICBXZSBhcmUgZ29pbmcgdG8gZ2VuZXJhdGUgSmF2YSBjb25zdGFudAorICAgICAgIGRlZmluaXRpb25zIGZvciB0aGUgZ3JvdXBzIGluIHRoZSBmaWxlLiAgLS0+CisgIDx4c2w6dGVtcGxhdGUgbWF0Y2g9InRzc2w6c2NoZW1hIj4KKyAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9InRzc2w6Z3JvdXAiPgorICAgICAgPHhzbDpzb3J0IHNlbGVjdD0iQGlkIi8+CisgICAgPC94c2w6YXBwbHktdGVtcGxhdGVzPgorICA8L3hzbDp0ZW1wbGF0ZT4KKworICA8IS0tIEdlbmVyYXRlIGEgZGVjbGFyYXRpb24gZm9yIGEgc2luZ2xlIGdyb3VwLiAgLS0+CisgIDx4c2w6dGVtcGxhdGUgbWF0Y2g9InRzc2w6Z3JvdXAiIG5hbWU9InRzc2w6Z3JvdXAiPgorICAgIDx4c2w6cGFyYW0gbmFtZT0iaWQiIHNlbGVjdD0iQGlkIi8+CisgICAgPHhzbDpwYXJhbSBuYW1lPSJudW1iZXIiIHNlbGVjdD0icG9zaXRpb24oKSIvPgorICAgIDx4c2w6dGV4dD4mI3g5O3B1YmxpYyBzdGF0aWMgZmluYWwgaW50IDwveHNsOnRleHQ+CisgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRpZCIvPgorICAgIDx4c2w6dGV4dD4gPSAxICZsdDsmbHQ7IDwveHNsOnRleHQ+CisgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRudW1iZXIiLz4KKyAgICA8eHNsOnRleHQ+OyYjeEE7PC94c2w6dGV4dD4KKyAgPC94c2w6dGVtcGxhdGU+CisKKzwveHNsOnRyYW5zZm9ybT4KZGlmZiAtLWdpdCBhL3Rzc2wvdHNzbC12YWxpZGF0ZS54c2x0IGIvdHNzbC90c3NsLXZhbGlkYXRlLnhzbHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFmYWFiNQotLS0gL2Rldi9udWxsCisrKyBiL3Rzc2wvdHNzbC12YWxpZGF0ZS54c2x0CkBAIC0wLDAgKzEsNDAgQEAKKzwhLS0gR2VuZXJhdGUgY29tcGxhaW50cyBpZiB0aGUgc2NoZW1hIGlzIGludmFsaWQgaW4gc29tZSB3YXkuICAtLT4KKworPCEtLQorLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgVGFnU291cCBhbmQgaXMgQ29weXJpZ2h0IDIwMDItMjAwOCBieSBKb2huIENvd2FuLgorLy8gCisvLyBUYWdTb3VwIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwKKy8vIFZlcnNpb24gMi4wLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoaXMgbGljZW5zZSBhdAorLy8gaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIC4gIFlvdSBtYXkgYWxzbyBoYXZlCisvLyBhZGRpdGlvbmFsIGxlZ2FsIHJpZ2h0cyBub3QgZ3JhbnRlZCBieSB0aGlzIGxpY2Vuc2UuCisvLworLy8gVGFnU291cCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIHVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgVGFnU291cAorLy8gaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMKKy8vIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkOyBub3QgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eQorLy8gb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorLS0+CisKKzx4c2w6dHJhbnNmb3JtIHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIgorCXhtbG5zOnRzc2w9Imh0dHA6Ly93d3cuY2NpbC5vcmcvfmNvd2FuL1hNTC90YWdzb3VwL3Rzc2wiCisJdmVyc2lvbj0iMS4wIj4KKworICA8eHNsOm91dHB1dCBtZXRob2Q9InRleHQiLz4KKworICA8eHNsOnN0cmlwLXNwYWNlIGVsZW1lbnRzPSIqIi8+CisKKyAgPCEtLSBHZW5lcmF0ZXMgYSByZXBvcnQgaWYgYW4gZWxlbWVudCBkb2VzIG5vdCBiZWxvbmcgdG8gYXQgbGVhc3QKKyAgICAgICBvbmUgb2YgdGhlIGdyb3VwcyB0aGF0IGl0cyBwYXJlbnQgZWxlbWVudCBjb250YWlucy4gIC0tPgorICA8eHNsOnRlbXBsYXRlIG1hdGNoPSJ0c3NsOmVsZW1lbnQvdHNzbDplbGVtZW50Ij4KKyAgICA8eHNsOmlmIHRlc3Q9Im5vdCh0c3NsOm1lbWJlck9mQW55KSBhbmQgbm90KHRzc2w6bWVtYmVyT2YvQGdyb3VwID0gLi4vdHNzbDpjb250YWlucy9AZ3JvdXApIj4KKyAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAbmFtZSIvPgorICAgICAgPHhzbDp0ZXh0PiBpcyBub3QgaW4gdGhlIGNvbnRlbnQgbW9kZWwgb2YgPC94c2w6dGV4dD4KKyAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuLi9AbmFtZSIvPgorICAgICAgPHhzbDp0ZXh0PiYjeEE7PC94c2w6dGV4dD4KKyAgICA8L3hzbDppZj4KKyAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcy8+CisgIDwveHNsOnRlbXBsYXRlPgorCisKKworPC94c2w6dHJhbnNmb3JtPgpkaWZmIC0tZ2l0IGEvdHNzbC90c3NsLnJuYyBiL3Rzc2wvdHNzbC5ybmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ0MzA3MwotLS0gL2Rldi9udWxsCisrKyBiL3Rzc2wvdHNzbC5ybmMKQEAgLTAsMCArMSw3NSBAQAorIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBUYWdTb3VwIGFuZCBpcyBDb3B5cmlnaHQgMjAwMi0yMDA4IGJ5IEpvaG4gQ293YW4uCisjCisjIFRhZ1NvdXAgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLAorIyBWZXJzaW9uIDIuMC4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGlzIGxpY2Vuc2UgYXQKKyMgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIC4gIFlvdSBtYXkgYWxzbyBoYXZlCisjIGFkZGl0aW9uYWwgbGVnYWwgcmlnaHRzIG5vdCBncmFudGVkIGJ5IHRoaXMgbGljZW5zZS4KKyMKKyMgVGFnU291cCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyMgdW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBUYWdTb3VwCisjIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TCisjIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkOyBub3QgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eQorIyBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisKK2RlZmF1bHQgbmFtZXNwYWNlID0gImh0dHA6Ly93d3cuY2NpbC5vcmcvfmNvd2FuL1hNTC90YWdzb3VwL3Rzc2wiCisKK3N0YXJ0ID0gc2NoZW1hCisKKyMjIEEgVFNTTCBzY2hlbWEgaGFzIGEgbmFtZXNwYWNlLCB3aGljaCBpcyBhcHBsaWVkIHRvIHRoZSBlbGVtZW50cyBieSBkZWZhdWx0LAorIyMgYW5kIGEgbmFtZSwgd2hpY2ggaXMgdXNlZCBzb2xlbHkgZm9yIGRvY3VtZW50YXRpb24uICBJdCBjb250YWlucyBlbnRpdHkKKyMjIGRlZmluaXRpb25zLCBhIHJvb3QgZWxlbWVudCwgYW5kIGF0dHJpYnV0ZXMgdG8gYmUgYXBwbGllZCB0byBhbGwgZWxlbWVudHMuCitzY2hlbWEgPSBlbGVtZW50IHNjaGVtYSB7CisJCWF0dHJpYnV0ZSBucyB7eHNkOmFueVVSSX0sCisJCWF0dHJpYnV0ZSBwcmVmaXgge3hzZDpOQ05hbWV9LAorCQlhdHRyaWJ1dGUgbmFtZSB7eHNkOk5DTmFtZX0sCisJCWF0dHJpYnV0ZSB2ZXJzaW9uIHsiMS4wIn0sCisJCWVudGl0eSosCisJCWdyb3VwKywKKwkJXGVsZW1lbnQsCisJCVxhdHRyaWJ1dGUqCisJCX0KKworIyMgQW4gZW50aXR5IGhhcyBhIG5hbWUgYW5kIGEgVW5pY29kZSBjb2RlcG9pbnQgaW4gaGV4LgorZW50aXR5ID0gZWxlbWVudCBlbnRpdHkgeworCQlhdHRyaWJ1dGUgbmFtZSB7eHNkOk5DTmFtZX0sCisJCWF0dHJpYnV0ZSBjb2RlcG9pbnQge3hzZDpzdHJpbmd9CisJCX0KKworIyMgQSBncm91cCBpcyBhIG5hbWVkIGdyb3VwIG9mIGVsZW1lbnRzLiAgRXZlcnkgZWxlbWVudCBiZWxvbmdzIHRvIG9uZQorIyMgb3IgbW9yZSBncm91cHMgYW5kIGhhcyBhIGNvbnRlbnQgbW9kZWwgY29uc2lzdGluZyBvZiBvbmUgb3IgbW9yZSBncm91cHMuCitncm91cCA9IGVsZW1lbnQgZ3JvdXAgeworCWF0dHJpYnV0ZSBpZCB7eHNkOklEfQorCX0KKworIyMgQW4gZWxlbWVudCBoYXMgYSBuYW1lIGFuZCBhIG5hbWVzcGFjZSAoY3VycmVudGx5IGlnbm9yZWQpLgorIyMgSXQgY2FuIGhhdmUgYW55IG9mIHNldmVyYWwgdHlwZXMgb2YgY29udGVudCBhbmQgY2FuIGJlIHJlc3RhcnRhYmxlCisjIyBvciBub3QuICBUaGUgZWxlbWVudCBpcyBhbHNvIGEgbWVtYmVyIG9mIG9uZSBvciBtb3JlIG1vZGVsIGdyb3VwcworIyMgKHdpdGggYXJiaXRyYXJ5IG5hbWVzKSwgYW5kIGNhbiBjb250YWluIGFzIGNoaWxkcmVuIHplcm8gb3IgbW9yZQorIyMgbW9kZWwgZ3JvdXBzLiAgRWxlbWVudHMgYWxzbyBoYXZlIGF0dHJpYnV0ZXMgYW5kICJuYXR1cmFsIiBjaGlsZHJlbi4KK1xlbGVtZW50ID0gZWxlbWVudCBlbGVtZW50IHsKKwkJYXR0cmlidXRlIG5zIHt4c2Q6YW55VVJJfT8sCisJCWF0dHJpYnV0ZSBuYW1lIHt4c2Q6TkNOYW1lfSwKKwkJYXR0cmlidXRlIHR5cGUge3R5cGV9LAorCQlhdHRyaWJ1dGUgY2xvc2VNb2RlIHsgInVuY2xvc2FibGUiIHwgInJlc3RhcnRhYmxlIiB9PywKKwkJYXR0cmlidXRlIHRleHQtcGFyZW50IHsgInRydWUiIHwgImZhbHNlIiB9PywKKwkJKGVsZW1lbnQgbWVtYmVyT2YgeyBhdHRyaWJ1dGUgZ3JvdXAge3hzZDpJRFJFRn19KyB8CisJCSBlbGVtZW50IGlzUm9vdCB7IGVtcHR5fSB8CisJCSBlbGVtZW50IG1lbWJlck9mQW55IHsgZW1wdHkgfSksCisJCWVsZW1lbnQgY29udGFpbnMgeyBhdHRyaWJ1dGUgZ3JvdXAge3hzZDpJRFJFRn19KiwKKwkJXGF0dHJpYnV0ZSosCisJCVxlbGVtZW50KgorCQl9CisKKyMjIEhlcmUgYXJlIHRoZSBhdHRyaWJ1dGUgdHlwZXM6CisKK3R5cGUgPSAiZWxlbWVudCIgfCAiYW55IiB8ICJlbXB0eSIgfCAibWl4ZWQiIHwgInN0cmluZyIgfCAiY2RhdGEiCisKKyMjIEFuIGF0dHJpYnV0ZSBoYXMgYSBuYW1lIGFuZCBhIG5hbWVzcGFjZSAoY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQpLgorIyMgSXQgYWxzbyBoYXMgYW4gb3B0aW9uYWwgdHlwZSBhbmQgYW4gb3B0aW9uYWwgZGVmYXVsdCB2YWx1ZS4KK1xhdHRyaWJ1dGUgPSBlbGVtZW50IGF0dHJpYnV0ZSB7CisJYXR0cmlidXRlIG5zIHt4c2Q6YW55VVJJfT8sCisJYXR0cmlidXRlIG5hbWUge3hzZDpOQ05hbWV9LAorCWF0dHJpYnV0ZSB0eXBlIHsiSUQiIHwgIklEUkVGIiB8ICJJRFJFRlMiIHwgIk5NVE9LRU4iIHwgIkJPT0xFQU4ifT8sCisJYXR0cmlidXRlIGRlZmF1bHQge3hzZDpzdHJpbmd9PworCX0KKwpkaWZmIC0tZ2l0IGEvdHNzbC90c3NsLnhzbHQgYi90c3NsL3Rzc2wueHNsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjViZTEwCi0tLSAvZGV2L251bGwKKysrIGIvdHNzbC90c3NsLnhzbHQKQEAgLTAsMCArMSwyMjAgQEAKKzwhLS0gR2VuZXJhdGUgSmF2YSBjb2RlIHRvIGJlIGluc2VydGVkIGludG8gSFRNTFNjaGVtYS5qYXZhLiAgLS0+CisKKzwhLS0KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFRhZ1NvdXAgYW5kIGlzIENvcHlyaWdodCAyMDAyLTIwMDggYnkgSm9obiBDb3dhbi4KKy8vIAorLy8gVGFnU291cCBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsCisvLyBWZXJzaW9uIDIuMC4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGlzIGxpY2Vuc2UgYXQKKy8vIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAuICBZb3UgbWF5IGFsc28gaGF2ZQorLy8gYWRkaXRpb25hbCBsZWdhbCByaWdodHMgbm90IGdyYW50ZWQgYnkgdGhpcyBsaWNlbnNlLgorLy8KKy8vIFRhZ1NvdXAgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyB1bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIFRhZ1NvdXAKKy8vIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TCisvLyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZDsgbm90IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkKKy8vIG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKy0tPgorCis8eHNsOnRyYW5zZm9ybSB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIKKwl4bWxuczp0c3NsPSJodHRwOi8vd3d3LmNjaWwub3JnL35jb3dhbi9YTUwvdGFnc291cC90c3NsIgorCXZlcnNpb249IjEuMCI+CisKKyAgPHhzbDpvdXRwdXQgbWV0aG9kPSJ0ZXh0Ii8+CisKKyAgPHhzbDpzdHJpcC1zcGFjZSBlbGVtZW50cz0iKiIvPgorCisgIDwhLS0gVGhlIG1haW4gdGVtcGxhdGUuICBUaGlzIGdlbmVyYXRlcyBjYWxscyBvbiB0aGUgU2NoZW1hIHJvdXRpbmVzCisgICAgICAgc2V0VVJJKCksIHNldFByZWZpeCgpLCBlbGVtZW50VHlwZSgpLCBwYXJlbnQoKSwgYXR0cmlidXRlKCksCisgICAgICAgYW5kIGVudGl0eSgpIGluIHRoYXQgb3JkZXIuICBTZXZlcmFsIHNwZWNpYWwgY2FzZXMgYXJlCisgICAgICAgaGFuZGxlZCBieSB0ZW1wbGF0ZSBjYWxscy4gIC0tPgorICA8eHNsOnRlbXBsYXRlIG1hdGNoPSJ0c3NsOnNjaGVtYSI+CisgICAgPCEtLSBzZXRVUkkoKSAtLT4KKyAgICA8eHNsOnRleHQ+JiN4OTsmI3g5O3NldFVSSSgiPC94c2w6dGV4dD4KKyAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQG5zIi8+CisgICAgPHhzbDp0ZXh0PiIpOyYjeEE7PC94c2w6dGV4dD4KKyAgICA8IS0tIHNldFByZWZpeCgpIC0tPgorICAgIDx4c2w6dGV4dD4mI3g5OyYjeDk7c2V0UHJlZml4KCI8L3hzbDp0ZXh0PgorICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAcHJlZml4Ii8+CisgICAgPHhzbDp0ZXh0PiIpOyYjeEE7PC94c2w6dGV4dD4KKyAgICA8IS0tIGVsZW1lbnRUeXBlKCkgc3BlY2lhbCBjYXNlcyAtLT4KKyAgICA8eHNsOnRleHQ+JiN4OTsmI3g5O2VsZW1lbnRUeXBlKCImbHQ7cGNkYXRhPiIsIE1fRU1QVFksIE1fUENEQVRBLCAwKTsmI3hBOzwveHNsOnRleHQ+CisgICAgPHhzbDp0ZXh0PiYjeDk7JiN4OTtlbGVtZW50VHlwZSgiJmx0O3Jvb3Q+IiwgPC94c2w6dGV4dD4KKyAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9InRzc2w6ZWxlbWVudC90c3NsOmlzUm9vdCIvPgorICAgIDx4c2w6dGV4dD4sIE1fRU1QVFksIDApOyYjeEE7PC94c2w6dGV4dD4KKyAgICA8IS0tIGVsZW1lbnRUeXBlKCkgbWFpbiBsb29wIC0tPgorICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLy90c3NsOmVsZW1lbnQiPgorICAgICAgPHhzbDpzb3J0IHNlbGVjdD0iQG5hbWUiLz4KKyAgICA8L3hzbDphcHBseS10ZW1wbGF0ZXM+CisgICAgPCEtLSBwYXJlbnQoKSBzcGVjaWFsIGNhc2VzIC0tPgorICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJwYXJlbnQiPgorICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9ImVsZW0iIHNlbGVjdD0iJyZsdDtwY2RhdGE+JyIvPgorICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9InBhcmVudCIgc2VsZWN0PSIvL3Rzc2w6ZWxlbWVudFtAdGV4dC1wYXJlbnQ9J3RydWUnXS9AbmFtZSIvPgorICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+CisgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InBhcmVudCI+CisgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0iZWxlbSIgc2VsZWN0PSJ0c3NsOmVsZW1lbnQvQG5hbWUiLz4KKyAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJwYXJlbnQiIHNlbGVjdD0iJyZsdDtyb290PiciLz4KKyAgICA8L3hzbDpjYWxsLXRlbXBsYXRlPgorICAgIDwhLS0gcGFyZW50KCkgbWFpbiBsb29wIC0tPgorICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLy90c3NsOmVsZW1lbnQvdHNzbDplbGVtZW50IiBtb2RlPSJwYXJlbnQiPgorICAgICAgPHhzbDpzb3J0IHNlbGVjdD0iQG5hbWUiLz4KKyAgICA8L3hzbDphcHBseS10ZW1wbGF0ZXM+CisgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIvL3Rzc2w6ZWxlbWVudC90c3NsOmF0dHJpYnV0ZSI+CisgICAgICA8eHNsOnNvcnQgc2VsZWN0PSIuLi9AbmFtZSIvPgorICAgICAgPHhzbDpzb3J0IHNlbGVjdD0iQG5hbWUiLz4KKyAgICA8L3hzbDphcHBseS10ZW1wbGF0ZXM+CisgICAgPCEtLSBhdHRyaWJ1dGUoKSBtYWluIGxvb3AgLS0+CisgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJ0c3NsOmF0dHJpYnV0ZSI+CisgICAgICA8eHNsOnNvcnQgc2VsZWN0PSJAbmFtZSIvPgorICAgIDwveHNsOmFwcGx5LXRlbXBsYXRlcz4KKyAgICA8IS0tIGVudGl0eSgpIG1haW4gbG9vcCAtLT4KKyAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9InRzc2w6ZW50aXR5Ij4KKyAgICAgIDx4c2w6c29ydCBzZWxlY3Q9IkBuYW1lIi8+CisgICAgPC94c2w6YXBwbHktdGVtcGxhdGVzPgorICA8L3hzbDp0ZW1wbGF0ZT4KKworICA8IS0tIEdlbmVyYXRlcyBhIHNpbmdsZSBjYWxsIHRvIGVsZW1lbnRUeXBlKCkuICAtLT4KKyAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0idHNzbDplbGVtZW50Ij4KKyAgICA8eHNsOnRleHQ+JiN4OTsmI3g5O2VsZW1lbnRUeXBlKCI8L3hzbDp0ZXh0PgorICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAbmFtZSIvPgorICAgIDx4c2w6dGV4dD4iLCA8L3hzbDp0ZXh0PgorICAgIDx4c2w6Y2hvb3NlPgorICAgICAgPHhzbDp3aGVuIHRlc3Q9IkB0eXBlID0gJ2VsZW1lbnQnIj4KKyAgICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJ0c3NsOmNvbnRhaW5zIi8+CisgICAgICA8L3hzbDp3aGVuPgorICAgICAgPHhzbDp3aGVuIHRlc3Q9IkB0eXBlID0gJ3N0cmluZyciPgorICAgICAgICA8eHNsOnRleHQ+TV9QQ0RBVEE8L3hzbDp0ZXh0PgorICAgICAgPC94c2w6d2hlbj4KKyAgICAgIDx4c2w6d2hlbiB0ZXN0PSJAdHlwZSA9ICdtaXhlZCciPgorICAgICAgICA8eHNsOnRleHQ+TV9QQ0RBVEF8PC94c2w6dGV4dD4KKyAgICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJ0c3NsOmNvbnRhaW5zIi8+CisgICAgICA8L3hzbDp3aGVuPgorICAgICAgPHhzbDp3aGVuIHRlc3Q9IkB0eXBlID0gJ2VtcHR5JyI+CisgICAgICAgIDx4c2w6dGV4dD5NX0VNUFRZPC94c2w6dGV4dD4KKyAgICAgIDwveHNsOndoZW4+CisgICAgICA8eHNsOndoZW4gdGVzdD0iQHR5cGUgPSAnYW55JyI+CisgICAgICAgIDx4c2w6dGV4dD5NX0FOWTwveHNsOnRleHQ+CisgICAgICA8L3hzbDp3aGVuPgorICAgICAgPHhzbDp3aGVuIHRlc3Q9IkB0eXBlID0gJ2NkYXRhJyI+CisgICAgICAgIDx4c2w6dGV4dD5NX1BDREFUQTwveHNsOnRleHQ+CisgICAgICA8L3hzbDp3aGVuPgorICAgIDwveHNsOmNob29zZT4KKyAgICA8eHNsOnRleHQ+LCA8L3hzbDp0ZXh0PgorICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0idHNzbDptZW1iZXJPZiIvPgorICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0idHNzbDptZW1iZXJPZkFueSIvPgorICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0idHNzbDppc1Jvb3QiLz4KKyAgICA8eHNsOnRleHQ+LCA8L3hzbDp0ZXh0PgorICAgIDx4c2w6Y2hvb3NlPgorICAgICAgPHhzbDp3aGVuIHRlc3Q9IkB0eXBlID0gJ2NkYXRhJyI+CisgICAgICAgIDx4c2w6dGV4dD5GX0NEQVRBPC94c2w6dGV4dD4KKyAgICAgIDwveHNsOndoZW4+CisgICAgICA8eHNsOndoZW4gdGVzdD0iQGNsb3NlTW9kZSA9ICdyZXN0YXJ0YWJsZSciPgorICAgICAgICA8eHNsOnRleHQ+Rl9SRVNUQVJUPC94c2w6dGV4dD4KKyAgICAgIDwveHNsOndoZW4+CisgICAgICA8eHNsOndoZW4gdGVzdD0iQGNsb3NlTW9kZSA9ICd1bmNsb3NhYmxlJyI+CisgICAgICAgIDx4c2w6dGV4dD5GX05PRk9SQ0U8L3hzbDp0ZXh0PgorICAgICAgPC94c2w6d2hlbj4KKyAgICAgIDx4c2w6b3RoZXJ3aXNlPgorICAgICAgICA8eHNsOnRleHQ+MDwveHNsOnRleHQ+CisgICAgICA8L3hzbDpvdGhlcndpc2U+CisgICAgPC94c2w6Y2hvb3NlPgorICAgIDx4c2w6dGV4dD4pOyYjeEE7PC94c2w6dGV4dD4KKyAgPC94c2w6dGVtcGxhdGU+CisKKyAgPCEtLSBBcHBsaWVkIGZyb20gdHNzbDplbGVtZW50IHRvIGdlbmVyYXRlIHRoZSBjb250YWlucyBhcmd1bWVudC4gIC0tPgorICA8eHNsOnRlbXBsYXRlIG1hdGNoPSJ0c3NsOmNvbnRhaW5zIj4KKyAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQGdyb3VwIi8+CisgICAgPHhzbDppZiB0ZXN0PSJwb3NpdGlvbigpICE9IGxhc3QoKSI+CisgICAgICA8eHNsOnRleHQ+fDwveHNsOnRleHQ+CisgICAgPC94c2w6aWY+CisgIDwveHNsOnRlbXBsYXRlPgorCisgIDwhLS0gQXBwbGllZCBmcm9tIHRzc2w6ZWxlbWVudCB0byBnZW5lcmF0ZSB0aGUgbWVtYmVyT2YgYXJndW1lbnQuICAtLT4KKyAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0idHNzbDptZW1iZXJPZiI+CisgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBncm91cCIvPgorICAgIDx4c2w6aWYgdGVzdD0icG9zaXRpb24oKSAhPSBsYXN0KCkiPgorICAgICAgPHhzbDp0ZXh0Pnw8L3hzbDp0ZXh0PgorICAgIDwveHNsOmlmPgorICA8L3hzbDp0ZW1wbGF0ZT4KKworICA8IS0tIEFwcGxpZWQgZnJvbSB0c3NsOmVsZW1lbnQgdG8gaGFuZGxlIG1lbWJlck9mQW55LiAgLS0+CisgIDx4c2w6dGVtcGxhdGUgbWF0Y2g9InRzc2w6bWVtYmVyT2ZBbnkiPgorICAgIDx4c2w6dGV4dD5NX0FOWSAmYW1wOyB+TV9ST09UPC94c2w6dGV4dD4KKyAgPC94c2w6dGVtcGxhdGU+CisKKyAgPCEtLSBBcHBsaWVkIGZyb20gdHNzbDplbGVtZW50IHRvIGhhbmRsZSBpc1Jvb3QuICAtLT4KKyAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0idHNzbDppc1Jvb3QiPgorICAgIDx4c2w6dGV4dD5NX1JPT1Q8L3hzbDp0ZXh0PgorICA8L3hzbDp0ZW1wbGF0ZT4KKworICA8IS0tIEdlbmVyYXRlcyBhIHNpbmdsZSBjYWxsIHRvIHBhcmVudCgpLiAgVGhlIG1vZGUgaXMgdXNlZCB0byBwcmV2ZW50IFhTTFQKKyAgICAgICBmcm9tIGdldHRpbmcgY29uZnVzZWQgYW5kIGdlbmVyYXRpbmcgZWxlbWVudFR5cGUgY2FsbHMgaW5zdGVhZC4gIC0tPgorICA8eHNsOnRlbXBsYXRlIG1hdGNoPSJ0c3NsOmVsZW1lbnQvdHNzbDplbGVtZW50IiBuYW1lPSJwYXJlbnQiIG1vZGU9InBhcmVudCI+CisgICAgPHhzbDpwYXJhbSBuYW1lPSJlbGVtIiBzZWxlY3Q9IkBuYW1lIi8+CisgICAgPHhzbDpwYXJhbSBuYW1lPSJwYXJlbnQiIHNlbGVjdD0iLi4vQG5hbWUiLz4KKyAgICA8eHNsOnRleHQ+JiN4OTsmI3g5O3BhcmVudCgiPC94c2w6dGV4dD4KKyAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJGVsZW0iLz4KKyAgICA8eHNsOnRleHQ+IiwgIjwveHNsOnRleHQ+CisgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRwYXJlbnQiLz4KKyAgICA8eHNsOnRleHQ+Iik7JiN4QTs8L3hzbDp0ZXh0PgorICA8L3hzbDp0ZW1wbGF0ZT4KKworICA8IS0tIEdlbmVyYXRlcyBhIHNpbmdsZSBjYWxsIHRvIGF0dHJpYnV0ZSgpLiAgLS0+CisgIDx4c2w6dGVtcGxhdGUgbWF0Y2g9InRzc2w6ZWxlbWVudC90c3NsOmF0dHJpYnV0ZSIgbmFtZT0idHNzbDphdHRyaWJ1dGUiPgorICAgIDx4c2w6cGFyYW0gbmFtZT0iZWxlbSIgc2VsZWN0PSIuLi9AbmFtZSIvPgorICAgIDx4c2w6cGFyYW0gbmFtZT0iYXR0ciIgc2VsZWN0PSJAbmFtZSIvPgorICAgIDx4c2w6cGFyYW0gbmFtZT0idHlwZSIgc2VsZWN0PSJAdHlwZSIvPgorICAgIDx4c2w6cGFyYW0gbmFtZT0iZGVmYXVsdCIgc2VsZWN0PSJAZGVmYXVsdCIvPgorICAgIDx4c2w6dGV4dD4mI3g5OyYjeDk7YXR0cmlidXRlKCI8L3hzbDp0ZXh0PgorICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkZWxlbSIvPgorICAgIDx4c2w6dGV4dD4iLCAiPC94c2w6dGV4dD4KKyAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJGF0dHIiLz4KKyAgICA8eHNsOnRleHQ+IiwgIjwveHNsOnRleHQ+CisgICAgPHhzbDpjaG9vc2U+CisgICAgICA8eHNsOndoZW4gdGVzdD0iJHR5cGUiPgorICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJHR5cGUiLz4KKyAgICAgIDwveHNsOndoZW4+CisgICAgICA8eHNsOndoZW4gdGVzdD0ibm90KCR0eXBlKSI+CisgICAgICAgIDx4c2w6dGV4dD5DREFUQTwveHNsOnRleHQ+CisgICAgICA8L3hzbDp3aGVuPgorICAgIDwveHNsOmNob29zZT4KKyAgICA8eHNsOnRleHQ+IiwgPC94c2w6dGV4dD4KKyAgICA8eHNsOmNob29zZT4KKyAgICAgIDx4c2w6d2hlbiB0ZXN0PSIkZGVmYXVsdCI+CisgICAgICAgIDx4c2w6dGV4dD4iPC94c2w6dGV4dD4KKyAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRkZWZhdWx0Ii8+CisgICAgICAgIDx4c2w6dGV4dD4iPC94c2w6dGV4dD4KKyAgICAgIDwveHNsOndoZW4+CisgICAgICA8eHNsOndoZW4gdGVzdD0ibm90KCRkZWZhdWx0KSI+CisgICAgICAgIDx4c2w6dGV4dD5udWxsPC94c2w6dGV4dD4KKyAgICAgIDwveHNsOndoZW4+CisgICAgPC94c2w6Y2hvb3NlPgorICAgIDx4c2w6dGV4dD4pOyYjeEE7PC94c2w6dGV4dD4KKyAgPC94c2w6dGVtcGxhdGU+CisKKyAgPCEtLSBHZW5lcmF0ZXMgY2FsbHMgdG8gYXR0cmlidXRlKCkgKHVzaW5nIHRoZSBhYm92ZSB0ZW1wbGF0ZSkKKyAgICAgICBiYXNlZCBvbiB0aGUgZ2xvYmFsIGF0dHJpYnV0ZSBkZWZpbml0aW9ucy4gIC0tPgorICA8eHNsOnRlbXBsYXRlIG1hdGNoPSJ0c3NsOnNjaGVtYS90c3NsOmF0dHJpYnV0ZSI+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJhdHRyIiBzZWxlY3Q9IkBuYW1lIi8+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJ0eXBlIiBzZWxlY3Q9IkB0eXBlIi8+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJkZWZhdWx0IiBzZWxlY3Q9IkBkZWZhdWx0Ii8+CisgICAgPHhzbDpmb3ItZWFjaCBzZWxlY3Q9Ii8vdHNzbDplbGVtZW50Ij4KKyAgICAgIDx4c2w6c29ydCBzZWxlY3Q9IkBuYW1lIi8+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0idHNzbDphdHRyaWJ1dGUiPgorICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0iZWxlbSIgc2VsZWN0PSJAbmFtZSIvPgorICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0iYXR0ciIgc2VsZWN0PSIkYXR0ciIvPgorICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0idHlwZSIgc2VsZWN0PSIkdHlwZSIvPgorICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0iZGVmYXVsdCIgc2VsZWN0PSIkZGVmYXVsdCIvPgorICAgICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4KKyAgICA8L3hzbDpmb3ItZWFjaD4KKyAgPC94c2w6dGVtcGxhdGU+CisKKyAgPCEtLSBHZW5lcmF0ZXMgYSBzaW5nbGUgY2FsbCB0byBlbnRpdHkoKS4gIC0tPgorICA8eHNsOnRlbXBsYXRlIG1hdGNoPSJ0c3NsOmVudGl0eSI+CisgICAgPHhzbDp0ZXh0PiYjeDk7JiN4OTtlbnRpdHkoIjwveHNsOnRleHQ+CisgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBuYW1lIi8+CisgICAgPHhzbDp0ZXh0PiIsIDB4PC94c2w6dGV4dD4KKyAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQGNvZGVwb2ludCIvPgorICAgIDx4c2w6dGV4dD4pOyYjeEE7PC94c2w6dGV4dD4KKyAgPC94c2w6dGVtcGxhdGU+CisKKzwveHNsOnRyYW5zZm9ybT4K