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AHwAAF8DAGQAAHwAAF8EAGQAAAR8AABfBQB8AABfBgBnAAB8AABfBwBkAQB8AABfCABkAABTKAIAAABOcwoAAAB0ZXh0L3BsYWluKAkAAAB0CAAAAF9oZWFkZXJzUgcAAAB0CQAAAF91bml4ZnJvbXQIAAAAX3BheWxvYWR0CAAAAF9jaGFyc2V0dAgAAABwcmVhbWJsZXQIAAAAZXBpbG9ndWV0BwAAAGRlZmVjdHN0DQAAAF9kZWZhdWx0X3R5cGUoAQAAAHQEAAAAc2VsZigAAAAAKAAAAABzVQAAAC90bXAvbmRrLVVzZXIvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvZGFyd2luLXg4Nl82NC9saWIvcHl0aG9uMi43L2VtYWlsL21lc3NhZ2UucHl0CAAAAF9faW5pdF9fawAAAHMOAAAAAAEJAQkBCQEJAhABCQJjAQAAAAEAAAADAAAAQwAAAHMQAAAAfAAAagAAZAEAdAEAgwABUygCAAAAc3cAAABSZXR1cm4gdGhlIGVudGlyZSBmb3JtYXR0ZWQgbWVzc2FnZSBhcyBhIHN0cmluZy4KICAgICAgICBUaGlzIGluY2x1ZGVzIHRoZSBoZWFkZXJzLCBib2R5LCBhbmQgZW52ZWxvcGUgaGVhZGVyLgogICAgICAgIHQIAAAAdW5peGZyb20oAgAAAHQJAAAAYXNfc3RyaW5ndAQAAABUcnVlKAEAAABSLgAAACgAAAAAKAAAAABzVQAAAC90bXAvbmRrLVVzZXIvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvZGFyd2luLXg4Nl82NC9saWIvcHl0aG9uMi43L2VtYWlsL21lc3NhZ2UucHl0BwAAAF9fc3RyX192AAAAcwIAAAAABGMCAAAABQAAAAQAAABDAAAAc0IAAABkAQBkAgBsAABtAQB9AgABdAIAgwAAfQMAfAIAfAMAgwEAfQQAfAQAagMAfAAAZAMAfAEAgwEBAXwDAGoEAIMAAFMoBAAAAHORAQAAUmV0dXJuIHRoZSBlbnRpcmUgZm9ybWF0dGVkIG1lc3NhZ2UgYXMgYSBzdHJpbmcuCiAgICAgICAgT3B0aW9uYWwgYHVuaXhmcm9tJyB3aGVuIFRydWUsIG1lYW5zIGluY2x1ZGUgdGhlIFVuaXggRnJvbV8g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ICAgICAgIElmIGNoYXJzZXQgaXMgTm9uZSwgdGhlIGNoYXJzZXQgcGFyYW1ldGVyIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZQogICAgICAgIENvbnRlbnQtVHlwZSBmaWVsZC4gIEFueXRoaW5nIGVsc2Ugd2lsbCBnZW5lcmF0ZSBhIFR5cGVFcnJvci4KCiAgICAgICAgVGhlIG1lc3NhZ2Ugd2lsbCBiZSBhc3N1bWVkIHRvIGJlIG9mIHR5cGUgdGV4dC8qIGVuY29kZWQgd2l0aAogICAgICAgIGNoYXJzZXQuaW5wdXRfY2hhcnNldC4gIEl0IHdpbGwgYmUgY29udmVydGVkIHRvIGNoYXJzZXQub3V0cHV0X2NoYXJzZXQKICAgICAgICBhbmQgZW5jb2RlZCBwcm9wZXJseSwgaWYgbmVlZGVkLCB3aGVuIGdlbmVyYXRpbmcgdGhlIHBsYWluIHRleHQKICAgICAgICByZXByZXNlbnRhdGlvbiBvZiB0aGUgbWVzc2FnZS4gIE1JTUUgaGVhZGVycyAoTUlNRS1WZXJzaW9uLAogICAgICAgIENvbnRlbnQtVHlwZSwgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZykgd2lsbCBiZSBhZGRlZCBhcyBuZWVkZWQuCgogICAgICAgIFJSAAAATnMMAAAATUlNRS1WZXJzaW9ucwMAAAAxLjBzDAAAAENvbnRlbnQtVHlwZXMKAAAAdGV4dC9wbGFpbnMZAAAAQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZygTAAAAUgcAAAB0CQAAAGRlbF9wYXJhbVIpAAAAUg8AAAB0CgAAAGJhc2VzdHJpbmd0BQAAAGVtYWlsUlIAAAB0BwAAAENoYXJzZXRSRQAAAHQKAAAAYWRkX2hlYWRlcnQSAAAAZ2V0X291dHB1dF9jaGFyc2V0dAkAAABzZXRfcGFyYW1SKAAAAHQHAAAAdW5pY29kZXQGAAAAZW5jb2RldA4AAABvdXRwdXRfY2hhcnNldHQDAAAAc3RydAsAAABib2R5X2VuY29kZXQRAAAAZ2V0X2JvZHlfZW5jb2RpbmcoAwAAAFIuAAAAUlIAAABSTgAAACgAAAAAKAAAAABzVQAAAC90bXAvbmRrLVVzZXIvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvZGFyd2luLXg4Nl82NC9saWIvcHl0aG9uMi43L2VtYWlsL21lc3NhZ2UucHlSUQAAAOQAAABzNAAAAAAPDAENAQkBBAEPARUBFQEPAwkBDAETAQwBDwEQAhYBEgEbARgBGAEMAQwBAwEOAQ0BFQFjAQAAAAEAAAABAAAAQwAAAHMHAAAAfAAAagAAUygBAAAAc0sAAABSZXR1cm4gdGhlIENoYXJzZXQgaW5zdGFuY2UgYXNzb2NpYXRlZCB3aXRoIHRoZSBtZXNzYWdlJ3MgcGF5bG9hZC4KICAgICAgICAoAQAAAFIpAAAAKAEAAABSLgAAACgAAAAAKAAAAABzVQAAAC90bXAvbmRrLVVzZXIvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvZGFyd2luLXg4Nl82NC9saWIvcHl0aG9uMi43L2VtYWlsL21lc3NhZ2UucHl0CwAAAGdldF9jaGFyc2V0EQEAAHMCAAAAAANjAQAAAAEAAAACAAAAQwAAAHMNAAAAdAAAfAAAagEAgwEAUygBAAAAczkAAABSZXR1cm4gdGhlIHRvdGFsIG51bWJlciBvZiBoZWFkZXJzLCBpbmNsdWRpbmcgZHVwbGljYXRlcy4oAgAAAFIOAAAAUiYAAAAoAQAAAFIuAAAAKAAAAAAoAAAAAHNVAAAAL3RtcC9uZGstVXNlci9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9kYXJ3aW4teDg2XzY0L2xpYi9weXRob24yLjcvZW1haWwvbWVzc2FnZS5weXQHAAAAX19sZW5fXxkBAABzAgAAAAACYwIAAAACAAAAAgAAAEMAAABzDQAAAHwAAGoAAHwBAIMBAFMoAQAAAHMtAQAAR2V0IGEgaGVhZGVyIHZhbHVlLgoKICAgICAgICBSZXR1cm4gTm9uZSBpZiB0aGUgaGVhZGVyIGlzIG1pc3NpbmcgaW5zdGVhZCBvZiByYWlzaW5nIGFuIGV4Y2VwdGlvbi4KCiAgICAgICAgTm90ZSB0aGF0IGlmIHRoZSBoZWFkZXIgYXBwZWFyZWQgbXVsdGlwbGUgdGltZXMsIGV4YWN0bHkgd2hpY2gKICAgICAgICBvY2N1cnJlbmNlIGdldHMgcmV0dXJuZWQgaXMgdW5kZWZpbmVkLiAgVXNl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dGlvbmFsIHBhcmFtZXRlcnMgZm9yIHRoZSBoZWFkZXIgZmllbGQsIHdpdGggdW5kZXJzY29yZXMgY29udmVydGVkCiAgICAgICAgdG8gZGFzaGVzLiAgTm9ybWFsbHkgdGhlIHBhcmFtZXRlciB3aWxsIGJlIGFkZGVkIGFzIGtleT0idmFsdWUiIHVubGVzcwogICAgICAgIHZhbHVlIGlzIE5vbmUsIGluIHdoaWNoIGNhc2Ugb25seSB0aGUga2V5IHdpbGwgYmUgYWRkZWQuICBJZiBhCiAgICAgICAgcGFyYW1ldGVyIHZhbHVlIGNvbnRhaW5zIG5vbi1BU0NJSSBjaGFyYWN0ZXJzIGl0IG11c3QgYmUgc3BlY2lmaWVkIGFzIGEKICAgICAgICB0aHJlZS10dXBsZSBvZiAoY2hhcnNldCwgbGFuZ3VhZ2UsIHZhbHVlKSwgaW4gd2hpY2ggY2FzZSBpdCB3aWxsIGJlCiAgICAgICAgZW5jb2RlZCBhY2NvcmRpbmcgdG8gUkZDMjIzMSBydWxlcy4KCiAgICAgICAgRXhhbXBsZToKCiAgICAgICAgbXNnLmFkZF9oZWFkZXIoJ2NvbnRlbnQtZGlzcG9zaXRpb24nLCAnYXR0YWNobWVudCcsIGZpbGVuYW1lPSdidWQuZ2lmJykKICAgICAgICB0AQAAAF90AQAAAC1pAAAAAE4oCQAAAFJxAAAAUgcAAABSHQAAAHQHAAAAcmVwbGFjZVIWAAAAdAYAAABpbnNlcnRSJgAAAHQJAAAAU0VNSVNQQUNFdAQAAABqb2luKAcAAABSLgAAAHQFAAAAX25hbWV0BgAAAF92YWx1ZXQHAAAAX3BhcmFtc3QFAAAAcGFydHNSaAAAAFJpAAAAKAAAAAAoAAAAAHNVAAAAL3RtcC9uZGstVXNlci9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9kYXJ3aW4teDg2XzY0L2xpYi9weXRob24yLjcvZW1haWwvbWVzc2FnZS5weVJYAAAAhAEAAHMQAAAAAA8GARkBDAEcAiYBDAETAWMDAAAABgAAAAQAAABDAAAAc30AAAB8AQBqAACDAAB9AQB4agB0AQB0AgB0AwB8AABqBACDAQCDAQB8AABqBACDAgBEXTsAXAIAfQMAXAIAfQQAfQUAfAQAagAAgwAAfAEAawIAci4AfAQAfAIAZgIAfAAAagQAfAMAPFBxLgBxLgBXdAUAfAEAgwEAggEAZAEAUygCAAAAc8QAAABSZXBsYWNlIGEgaGVhZGVyLgoKICAgICAgICBSZXBsYWNlIHRoZSBmaXJzdCBtYXRjaGluZyBoZWFkZXIgZm91bmQgaW4gdGhlIG1lc3NhZ2UsIHJldGFpbmluZwogICAgICAgIGhlYWRlciBvcmRlciBhbmQgY2FzZS4gIElmIG5vIG1hdGNoaW5nIGhlYWRlciB3YXMgZm91bmQsIGEgS2V5RXJyb3IgaXMKICAgICAgICByYWlzZWQuCiAgICAgICAgTigGAAAAUhwAAAB0AwAAAHppcHQFAAAAcmFuZ2VSDgAAAFImAAAAdAgAAABLZXlFcnJvcigGAAAAUi4AAABSegAAAFJ7AAAAUiIAAABSaAAAAFJpAAAAKAAAAAAoAAAAAHNVAAAAL3RtcC9uZGstVXNlci9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9kYXJ3aW4teDg2XzY0L2xpYi9weXRob24yLjcvZW1haWwvbWVzc2FnZS5weXQOAAAAcmVwbGFjZV9oZWFkZXKdAQAAcwwAAAAABwwBNAESARMBCAJjAQAAAAQAAAADAAAAQwAAAHNkAAAAdAAAgwAAfQEAfAAAagEAZAEAfAEAgwIAfQIAfAIAfAEAawgAcjEAfAAAagIAgwAAU3QDAHwCAIMBAGQCABlqBACDAAB9AwB8AwBqBQBkAwCDAQBkBABrAwByYABkBQBTfAMAUygGAAAAczACAABSZXR1cm4gdGhlIG1lc3NhZ2UncyBjb250ZW50IHR5cGUuCgogICAgICAgIFRoZSByZXR1cm5lZCBzdHJpbmcgaXMgY29lcmNlZCB0byBsb3dlciBjYXNlIG9mIHRoZSBmb3JtCiAgICAgICAgYG1haW50eXBlL3N1YnR5cGUnLiAgSWYgdGhlcmUgd2FzIG5vIENvbnRlbnQtVHlwZSBoZWFkZXIgaW4gdGhlCiAgICAgICAgbWVzc2FnZSwgdGhlIGRlZmF1bHQgdHlwZSBhcyBnaXZlbiBieSBnZXRfZGVmYXVsdF90eXBlKCkgd2lsbCBiZQogICAgICAgIHJldHVybmVkLiAgU2luY2UgYWNjb3JkaW5nIHRvIFJGQyAyMDQ1LCBtZXNzYWdlcyBhbHdheXMgaGF2ZSBhIGRlZmF1bHQKICAgICAgICB0eXBlIHRoaXMgd2lsbCBhbHdheXMgcmV0dXJuIGEgdmFsdWUuCgogICAgICAgIFJGQyAyMDQ1IGRlZmluZXMgYSBtZXNzYWdlJ3MgZGVmYXVsdCB0eXBlIHRvIGJlIHRleHQvcGxhaW4gdW5sZXNzIGl0CiAgICAgICAgYXBwZWFycyBpbnNpZGUgYSBtdWx0aXBhcnQvZGlnZXN0IGNvbnRhaW5lciwgaW4gd2hpY2ggY2FzZSBpdCB3b3VsZCBiZQogICAgICAgIG1lc3NhZ2UvcmZjODIyLgogICAgICAgIHMMAAAAY29udGVudC10eXBlaQAAAAB0AQAAAC9pAQAAAHMKAAAAdGV4dC9wbGFpbigGAAAAUmwAAABSRwAAAHQQAAAAZ2V0X2RlZmF1bHRfdHlwZVIMAAAAUhwAAABSGgAAACgEAAAAUi4AAABSbQAAAFIVAAAAdAUAAABjdHlwZSgAAAAAKAAAAABzVQAAAC90bXAvbmRrLVVzZXIvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvZGFyd2luLXg4Nl82NC9saWIvcHl0aG9uMi43L2VtYWlsL21lc3NhZ2UucHl0EAAAAGdldF9jb250ZW50X3R5cGWwAQAAcxAAAAAADQkBEgEMAgoBFgIVAQQBYwEAAAACAAAAAgAAAEMAAABzHQAAAHwAAGoAAIMAAH0BAHwBAGoBAGQBAIMBAGQCABlTKAMAAABziwAAAFJldHVybiB0aGUgbWVzc2FnZSdzIG1haW4gY29udGVudCB0eXBlLgoKICAgICAgICBUaGlzIGlzIHRoZSBgbWFpbnR5cGUnIHBhcnQgb2YgdGhlIHN0cmluZyByZXR1cm5lZCBieQogICAgICAgIGdldF9jb250ZW50X3R5cGUoKS4KICAgICAgICBSggAAAGkAAAAAKAIAAABShQAAAHQFAAAAc3BsaXQoAgAAAFIuAAAAUoQAAAAoAAAAACgAAAAAc1UAAAAvdG1wL25kay1Vc2VyL2J1aWxkaG9zdC9pbnN0YWxsL3ByZWJ1aWx0L2Rhcndpbi14ODZfNjQvbGliL3B5dGhvbjIuNy9lbWFpbC9tZXNzYWdlLnB5dBQAAABnZXRfY29udGVudF9tYWludHlwZcgBAABzBAAAAAAGDAFjAQAAAAIAAAACAAAAQwAAAHMdAAAAfAAAagAAgwAAfQEAfAEAagEAZAEAgwEAZAIAGVMoAwAAAHOKAAAAUmV0dXJucyB0aGUgbWVzc2FnZSdzIHN1Yi1jb250ZW50IHR5cGUuCgogICAgICAgIFRoaXMgaXMgdGhlIGBzdWJ0eXBlJyBwYXJ0IG9mIHRoZSBzdHJpbmcgcmV0dXJuZWQgYnkKICAgICAgICBnZXRfY29udGVudF90eXBlKCkuCiAgICAgICAgUoIAAABpAQAAACgCAAAAUoUAAABShgAAACgCAAAAUi4AAABShAAAACgAAAAAKAAAAABzVQAAAC90bXAvbmRrLVVzZXIvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvZGFyd2luLXg4Nl82NC9saWIvcHl0aG9uMi43L2VtYWlsL21lc3NhZ2UucHl0EwAAAGdldF9jb250ZW50X3N1YnR5cGXRAQAAcwQAAAAABgwBYwEAAAABAAAAAQAAAEMAAABzBwAAAHwAAGoAAFMoAQAAAHMBAQAAUmV0dXJuIHRoZSBgZGVmYXVsdCcgY29udGVudCB0eXBlLgoKICAgICAgICBNb3N0IG1lc3NhZ2VzIGhhdmUgYSBkZWZhdWx0IGNvbnRlbnQgdHlwZSBvZiB0ZXh0L3BsYWluLCBleGNlcHQgZm9yCiAgICAgICAgbWVzc2FnZXMgdGhhdCBhcmUgc3VicGFydHMgb2YgbXVsdGlwYXJ0L2RpZ2VzdCBjb250YWluZXJzLiAgU3VjaAogICAgICAgIHN1YnBhcnRzIGhhdmUgYSBkZWZhdWx0IGNvbnRlbnQgdHlwZSBvZiBtZXNzYWdlL3JmYzgyMi4KICAgICAgICAoAQAAAFItAAAAKAEAAABSLgAAACgAAAAAKAAAAABzVQAAAC90bXAvbmRrLVVzZXIvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvZGFyd2luLXg4Nl82NC9saWIvcHl0aG9uMi43L2VtYWlsL21lc3NhZ2UucHlSgwAAANoBAABzAgAAAAAHYwIAAAACAAAAAgAAAEMAAABzDQAAAHwBAHwAAF8AAGQBAFMoAgAAAHPdAAAAU2V0IHRo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AXOyAHwHAHOOAHQFAHwBAHwCAHwEAIMDAH0HAHFKAXQGAGoHAHwHAHQFAHwBAHwCAHwEAIMDAGcCAIMBAH0HAG6YAGQEAH0HAHiPAHwAAGoIAGQDAHwDAGQFAHwEAIMAAkRddQBcAgB9CAB9CQBkBAB9CgB8CABqAgCDAAB8AQBqAgCDAABrAgByEAF0BQB8AQB8AgB8BACDAwB9CgBuEgB0BQB8CAB8CQB8BACDAwB9CgB8BwBzMQF8CgB9BwBx0QB0BgBqBwB8BwB8CgBnAgCDAQB9BwBx0QBXfAcAfAAAagMAfAMAgwEAawMAcnMBfAAAfAMAPXwHAHwAAHwDADxuAABkBgBTKAcAAABz4gIAAFNldCBhIHBhcmFtZXRlciBpbiB0aGUgQ29udGVudC1UeXBlIGhlYWRlci4KCiAgICAgICAgSWYgdGhlIHBhcmFtZXRlciBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgaGVhZGVyLCBpdHMgdmFsdWUgd2lsbCBiZQogICAgICAgIHJlcGxhY2VkIHdpdGggdGhlIG5ldyB2YWx1ZS4KCiAgICAgICAgSWYgaGVhZGVyIGlzIENvbnRlbnQtVHlwZSBhbmQgaGFzIG5vdCB5ZXQgYmVlbiBkZWZpbmVkIGZvciB0aGlzCiAgICAgICAgbWVzc2FnZSwgaXQgd2lsbCBiZSBzZXQgdG8gInRleHQvcGxhaW4iIGFuZCB0aGUgbmV3IHBhcmFtZXRlciBhbmQKICAgICAgICB2YWx1ZSB3aWxsIGJlIGFwcGVuZGVkIGFzIHBlciBSRkMgMjA0NS4KCiAgICAgICAgQW4gYWx0ZXJuYXRlIGhlYWRlciBjYW4gc3BlY2lmaWVkIGluIHRoZSBoZWFkZXIgYXJndW1lbnQsIGFuZCBhbGwKICAgICAgICBwYXJhbWV0ZXJzIHdpbGwgYmUgcXVvdGVkIGFzIG5lY2Vzc2FyeSB1bmxlc3MgcmVxdW90ZSBpcyBGYWxzZS4KCiAgICAgICAgSWYgY2hhcnNldCBpcyBzcGVjaWZpZWQsIHRoZSBwYXJhbWV0ZXIgd2lsbCBiZSBlbmNvZGVkIGFjY29yZGluZyB0byBSRkMKICAgICAgICAyMjMxLiAgT3B0aW9uYWwgbGFuZ3VhZ2Ugc3BlY2lmaWVzIHRoZSBSRkMgMjIzMSBsYW5ndWFnZSwgZGVmYXVsdGluZwogICAgICAgIHRvIHRoZSBlbXB0eSBzdHJpbmcuICBCb3RoIGNoYXJzZXQgYW5kIGxhbmd1YWdlIHNob3VsZCBiZSBzdHJpbmdzLgogICAgICAgIHMMAAAAY29udGVudC10eXBlcwoAAAB0ZXh0L3BsYWluUowAAABSQAAAAFIkAAAATigJAAAAUg8AAABSEAAAAFIcAAAAUkcAAABSkQAAAFIWAAAAUngAAABSeQAAAFKQAAAAKAsAAABSLgAAAFIIAAAAUhUAAABSjAAAAHQHAAAAcmVxdW90ZVJSAAAAdAgAAABsYW5ndWFnZVKEAAAAdAkAAABvbGRfcGFyYW10CQAAAG9sZF92YWx1ZXQMAAAAYXBwZW5kX3BhcmFtKAAAAAAoAAAAAHNVAAAAL3RtcC9uZGstVXNlci9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9kYXJ3aW4teDg2XzY0L2xpYi9weXRob24yLjcvZW1haWwvbWVzc2FnZS5weVJaAAAAOwIAAHMuAAAAABIWARICHgEJAg8BFQEGARUCBgEeAgYBEgETAQYBGAEVAhIBBgEJAhkBFQEHAWMEAAAABwAAAAcAAABDAAAAc8MAAAB8AgB8AABrBwByEABkAQBTZAIAfQQAeH0AfAAAagAAZAMAfAIAZAQAfAMAgwACRF1jAFwCAH0FAH0GAHwFAGoBAIMAAHwBAGoBAIMAAGsDAHIvAHwEAHNuAHQCAHwFAHwGAHwDAIMDAH0EAHGSAHQDAGoEAHwEAHQCAHwFAHwGAHwDAIMDAGcCAIMBAH0EAHEvAHEvAFd8BAB8AABqBQB8AgCDAQBrAwByvwB8AAB8AgA9fAQAfAAAfAIAPG4AAGQBAFMoBQAAAHM+AQAAUmVtb3ZlIHRoZSBnaXZlbiBwYXJhbWV0ZXIgY29tcGxldGVseSBmcm9tIHRoZSBDb250ZW50LVR5cGUgaGVhZGVyLgoKICAgICAgICBUaGUgaGVhZGVyIHdpbGwgYmUgcmUtd3JpdHRlbiBpbiBwbGFjZSB3aXRob3V0IHRoZSBwYXJhbWV0ZXIgb3IgaXRzCiAgICAgICAgdmFsdWUuIEFsbCB2YWx1ZXMgd2lsbCBiZSBxdW90ZWQgYXMgbmVjZXNzYXJ5IHVubGVzcyByZXF1b3RlIGlzCiAgICAgICAgRmFsc2UuICBPcHRpb25hbCBoZWFkZXIgc3BlY2lmaWVzIGFuIGFsdGVybmF0aXZlIHRvIHRoZSBDb250ZW50LVR5cGUKICAgICAgICBoZWFkZXIuCiAgICAgICAgTlJAAAAAUowAAABSJAAAACgGAAAAUpAAAABSHAAAAFIWAAAAUngAAABSeQAAAFJHAAAAKAcAAABSLgAAAFIIAAAAUowAAABSkgAAAHQJAAAAbmV3X2N0eXBlUo4AAABSaQAAACgAAAAAKAAAAABzVQAAAC90bXAvbmRrLVVzZXIvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvZGFyd2luLXg4Nl82NC9saWIvcHl0aG9uMi43L2VtYWlsL21lc3NhZ2UucHlSVAAAAGsCAABzGAAAAAAIDAEEAQYBJQEYAQYBFQIJAR8BFQEHAWMEAAAABwAAAAYAAABDAAAAc7wAAAB8AQBqAABkAQCDAQBkAgBrAgBzHgB0AQCCAQBuAAB8AgBqAgCDAABkAwBrAgByRAB8AABkBAA9ZAUAfAAAZAYAPG4AAHwCAHwAAGsHAHJeAHwBAHwAAHwCADxkBwBTfAAAagMAZAgAfAIAZAkAfAMAgwACfQQAfAAAfAIAPXwBAHwAAHwCADx4LgB8BABkAgAfRF0iAFwCAH0FAH0GAHwAAGoEAHwFAHwGAHwCAHwDAIMEAAFxkgBXZAcAUygKAAAAc0sCAABTZXQgdGhlIG1haW4gdHlwZSBhbmQgc3VidHlwZSBmb3IgdGhlIENvbnRlbnQtVHlwZSBoZWFkZXIuCgogICAgICAgIHR5cGUgbXVzdCBiZSBhIHN0cmluZyBpbiB0aGUgZm9ybSAibWFpbnR5cGUvc3VidHlwZSIsIG90aGVyd2lzZSBhCiAgICAgICAgVmFsdWVFcnJvciBpcyByYWlzZWQuCgogICAgICAgIFRoaXMgbWV0aG9kIHJlcGxhY2VzIHRoZSBDb250ZW50LVR5cGUgaGVhZGVyLCBrZWVwaW5nIGFsbCB0aGUKICAgICAgICBwYXJhbWV0ZXJzIGluIHBsYWNlLiAgSWYgcmVxdW90ZSBpcyBGYWxzZSwgdGhpcyBsZWF2ZXMgdGhlIGV4aXN0aW5nCiAgICAgICAgaGVhZGVyJ3MgcXVvdGluZyBhcyBpcy4gIE90aGVyd2lzZSwgdGhlIHBhcmFtZXRlcnMgd2lsbCBiZSBxdW90ZWQgKHRoZQogICAgICAgIGRlZmF1bHQpLgoKICAgICAgICBBbiBhbHRlcm5hdGl2ZSBoZWFkZXIgY2FuIGJlIHNwZWNpZmllZCBpbiB0aGUgaGVhZGVyIGFyZ3VtZW50LiAgV2hlbgogICAgICAgIHRoZSBDb250ZW50LVR5cGUgaGVhZGVyIGlzIHNldCwgd2UnbGwgYWx3YXlzIGFsc28gYWRkIGEgTUlNRS1WZXJzaW9uCiAgICAgICAgaGVhZGVyLgogICAgICAgIFKCAAAAaQEAAABzDAAAAGNvbnRlbnQtdHlwZXMMAAAAbWltZS12ZXJzaW9ucwMAAAAxLjBzDAAAAE1JTUUtVmVyc2lvbk5SjAAAAFIkAAAAKAUAAABSGgAAAFKKAAAAUhwAAABSkAAAAFJaAAAAKAcAAABSLgAAAFJGAAAAUowAAABSkgAAAFKNAAAAUo4AAABSaQAAACgAAAAAKAAAAABzVQAAAC90bXAvbmRrLVVzZXIvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvZGFyd2luLXg4Nl82NC9saWIvcHl0aG9uMi43L2VtYWlsL21lc3NhZ2UucHl0CAAAAHNldF90eXBlgQIAAHMaAAAAABAVAQkCEgEHAQ0BDAEKAQQBGAEHAQoCFwFjAgAAAAQAAAAEAAAAQwAAAHNlAAAAdAAAgwAAfQIAfAAAagEAZAEAfAIAZAIAgwMAfQMAfAMAfAIAawgAckIAfAAAagEAZAMAfAIAZAQAgwMAfQMAbgAAfAMAfAIAawgAclIAfAEAU3QCAGoDAHwDAIMBAGoEAIMAAFMoBQAAAHNAAQAAUmV0dXJuIHRoZSBmaWxlbmFtZSBhc3NvY2lhdGVkIHdpdGggdGhlIHBheWxvYWQgaWYgcHJlc2VudC4KCiAgICAgICAgVGhlIGZpbGVuYW1lIGlzIGV4dHJhY3RlZCBmcm9tIHRoZSBDb250ZW50LURpc3Bvc2l0aW9uIGhlYWRlcidzCiAgICAgICAgYGZpbGVuYW1lJyBwYXJhbWV0ZXIsIGFuZCBpdCBpcyB1bnF1b3RlZC4gIElmIHRoYXQgaGVhZGVyIGlzIG1pc3NpbmcKICAgICAgICB0aGUgYGZpbGVuYW1lJyBwYXJhbWV0ZXIsIHRoaXMgbWV0aG9kIGZhbGxzIGJhY2sgdG8gbG9va2luZyBmb3IgdGhlCiAgICAgICAgYG5hbWUnIHBhcmFtZXRlci4KICAgICAgICB0CAAAAGZpbGVuYW1lcxMAAABjb250ZW50LWRpc3Bvc2l0aW9uUmMAAABzDAAAAGNvbnRlbnQtdHlwZSgFAAAAUmwAAABSkQAAAFICAAAAdBYAAABjb2xsYXBzZV9yZmMyMjMxX3ZhbHVlUgYAAAAoBAAAAFIuAAAAUnIAAABSbQAAAFKZAAAAKAAAAAAoAAAAAHNVAAAAL3RtcC9uZGstVXNlci9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9kYXJ3aW4teDg2XzY0L2xpYi9weXRob24yLjcvZW1haWwvbWVzc2FnZS5weXQMAAAAZ2V0X2ZpbGVuYW1loQIAAHMOAAAAAAgJARUBDAEYAQwBBAFjAgAAAAQAAAADAAAAQwAAAHM+AAAAdAAAgwAAfQIAfAAAagEAZAEAfAIAgwIAfQMAfAMAfAIAawgAcisAfAEAU3QCAGoDAHwDAIMBAGoEAIMAAFMoAgAAAHO4AAAAUmV0dXJuIHRoZSBib3VuZGFyeSBhc3NvY2lhdGVkIHdpdGggdGhlIHBheWxvYWQgaWYgcHJlc2VudC4KCiAgICAgICAgVGhlIGJvdW5kYXJ5IGlzIGV4dHJhY3RlZCBmcm9tIHRoZSBDb250ZW50LVR5cGUgaGVhZGVyJ3MgYGJvdW5kYXJ5JwogICAgICAgIHBhcmFtZXRlciwgYW5kIGl0IGlzIHVucXVvdGVkLgogICAgICAgIHQIAAAAYm91bmRhcnkoBQAAAFJsAAAAUpEAAABSAgAAAFKaAAAAdAYAAAByc3RyaXAoBAAAAFIuAAAAUnIAAABSbQAAAFKcAAAAKAAAAAAoAAAAAHNVAAAAL3RtcC9uZGstVXNlci9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9kYXJ3aW4teDg2XzY0L2xpYi9weXRob24yLjcvZW1haWwvbWVzc2FnZS5weXQMAAAAZ2V0X2JvdW5kYXJ5sQIAAHMKAAAAAAYJARIBDAEEAmMCAAAADQAAAAYAAABDAAAAc4IBAAB0AACDAAB9AgB8AABqAQB8AgBkAQCDAgB9AwB8AwB8AgBrCAByOQB0AgBqAwBkAgCDAQCCAQBuAABnAAB9BAB0BAB9BQB4WQB8AwBEXVEAXAIAfQYAfQcAfAYAagUAgwAAZAMAawIAcooAfAQAagYAZAMAZAQAfAEAFmYCAIMBAAF0BwB9BQBxTAB8BABqBgB8BgB8BwBmAgCDAQABcUwAV3wFAHPBAHwEAGoGAGQDAGQEAHwBABZmAgCDAQABbgAAZwAAfQgAeKsAfAAAaggARF2gAFwCAH0JAH0KAHwJAGoFAIMAAGQBAGsCAHJeAWcAAH0LAHhHAHwEAERdPwBcAgB9DAB9CgB8CgBkBQBrAgByJAF8CwBqBgB8DACDAQABcfwAfAsAagYAZAYAfAwAfAoAZgIAFoMBAAFx/ABXfAgAagYAfAkAdAkAagoAfAsAgwEAZgIAgwEAAXHRAHwIAGoGAHwJAHwKAGYCAIMBAAFx0QBXfAgAfAAAXwgAZAcAUygIAAAAc7sBAABTZXQgdGhlIGJvdW5kYXJ5IHBhcmFtZXRlciBpbiBDb250ZW50LVR5cGUgdG8gJ2JvdW5kYXJ5Jy4KCiAgICAgICAgVGhpcyBpcyBzdWJ0bHkgZGlmZmVyZW50IHRoYW4gZGVsZXRpbmcgdGhlIENvbnRlbnQtVHlwZSBoZWFkZXIgYW5kCiAgICAgICAgYWRkaW5nIGEgbmV3IG9uZSB3aXRoIGEgbmV3IGJvdW5kYXJ5IHBhcmFtZXRlciB2aWEgYWRkX2hlYWRlcigpLiAgVGhlCiAgICAgICAgbWFpbiBkaWZmZXJlbmNlIGlzIHRoYXQgdXNpbmcgdGhlIHNldF9ib3VuZGFyeSgpIG1ldGhvZCBwcmVzZXJ2ZXMgdGhlCiAgICAgICAgb3JkZXIgb2YgdGhlIENvbnRlbnQtVHlwZSBoZWFkZXIgaW4gdGhlIG9yaWdpbmFsIG1lc3NhZ2UuCgogICAgICAgIEhlYWRlclBhcnNlRXJyb3IgaXMgcmFpc2VkIGlmIHRoZSBtZXNzYWdlIGhhcyBubyBDb250ZW50LVR5cGUgaGVhZGVyLgogICAgICAgIHMMAAAAY29udGVudC10eXBlcxwAAABObyBDb250ZW50LVR5cGUgaGVhZGVyIGZvdW5kUpwAAABzBAAAACIlcyJSQAAAAHMFAAAAJXM9JXNOKAsAAABSbAAAAFKPAAAAUgMAAAB0EAAAAEhlYWRlclBhcnNlRXJyb3J0BQAAAEZhbHNlUhwAAABSHQAAAFIyAAAAUiYAAABSeAAAAFJ5AAAAKA0AAABSLgAAAFKcAAAAUm0AAABSjQAAAHQJAAAAbmV3cGFyYW1zdAYAAABmb3VuZHB0AgAAAHBrdAIAAABwdlJnAAAAdAEAAABoUmkAAABSfQAAAFJoAAAAKAAAAAAoAAAAAHNVAAAAL3RtcC9uZGstVXNlci9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9kYXJ3aW4teDg2XzY0L2xpYi9weXRob24yLjcvZW1haWwvbWVzc2FnZS5weXQMAAAAc2V0X2JvdW5kYXJ5vgIAAHMwAAAAAAoJARIBDAMSAQYBBgETARIBFwEJAhcBBgQaAgYBFgESAQYBEwEMARACGwEfAxcBYwIAAAAFAAAABwAAAEMAAABz5AAAAHQAAIMAAH0CAHwAAGoBAGQBAHwCAIMCAH0DAHwDAHwCAGsIAHIrAHwBAFN0AgB8AwB0AwCDAgBykQB8AwBkAgAZcEcAZAMAfQQAeSAAdAQAfAMAZAQAGXwEAIMCAGoFAGQDAIMBAH0DAFdxkQAEdAYAdAcAZgIAawoAco0AAQEBfAMAZAQAGX0DAHGRAFhuAAB5NAB0AgB8AwB0CACDAgBytQB0BAB8AwBkAwCDAgB9AwBuAAB8AwBqBQBkAwCDAQB9AwBXbhIABHQHAGsKAHLZAAEBAXwBAFNYfAMAagkAgwAAUygFAAAAc/UAAABSZXR1cm4gdGhlIGNoYXJzZXQgcGFyYW1ldGVyIG9mIHRoZSBDb250ZW50LVR5cGUgaGVhZGVyLgoKICAgICAgICBUaGUgcmV0dXJuZWQgc3RyaW5nIGlzIGFsd2F5cyBjb2VyY2VkIHRvIGxvd2VyIGNhc2UuICBJZiB0aGVyZSBpcyBubwogICAgICAgIENvbnRlbnQtVHlwZSBoZWFkZXIsIG9yIGlmIHRoYXQgaGVhZGVyIGhhcyBubyBjaGFyc2V0IHBhcmFtZXRlciwKICAgICAgICBmYWlsb2JqIGlzIHJldHVybmVkLgogICAgICAgIFJSAAAAaQAAAABzCAAAAHVzLWFzY2lpaQIAAAAoCgAAAFJsAAAAUpEAAABSDwAAAFIQAAAAUlsAAABSXAAAAHQLAAAATG9va3VwRXJyb3J0DAAAAFVuaWNvZGVFcnJvclJeAAAAUhwAAAAoBQAAAFIuAAAAUnIAAABSbQAAAFJSAAAAdAgAAABwY2hhcnNldCgAAAAAKAAAAABzVQAAAC90bXAvbmRrLVVzZXIvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvZGFyd2luLXg4Nl82NC9saWIvcHl0aG9uMi43L2VtYWlsL21lc3NhZ2UucHl0EwAAAGdldF9jb250ZW50X2NoYXJzZXTrAgAAcyIAAAAABwkBEgEMAQQBDwIQAQMEIAETARECAwEPARIBEwENAQUCYwIAAAADAAAABAAAAEMAAABzJgAAAGcAAHwAAGoAAIMAAERdFQB9AgB8AgBqAQB8AQCDAQBeAgBxDQBTKAEAAABz1QIAAFJldHVybiBhIGxpc3QgY29udGFpbmluZyB0aGUgY2hhcnNldChzKSB1c2VkIGluIHRoaXMgbWVzc2FnZS4KCiAgICAgICAgVGhlIHJldHVybmVkIGxpc3Qgb2YgaXRlbXMgZGVzY3JpYmVzIHRoZSBDb250ZW50LVR5cGUgaGVhZGVycycKICAgICAgICBjaGFyc2V0IHBhcmFtZXRlciBmb3IgdGhpcyBtZXNzYWdlIGFuZCBhbGwgdGhlIHN1YnBhcnRzIGluIGl0cwogICAgICAgIHBheWxvYWQuCgogICAgICAgIEVhY2ggaXRlbSB3aWxsIGVpdGhlciBiZSBhIHN0cmluZyAodGhlIHZhbHVlIG9mIHRoZSBjaGFyc2V0IHBhcmFtZXRlcgogICAgICAgIGluIHRoZSBDb250ZW50LVR5cGUgaGVhZGVyIG9mIHRoYXQgcGFydCkgb3IgdGhlIHZhbHVlIG9mIHRoZQogICAgICAgICdmYWlsb2JqJyBwYXJhbWV0ZXIgKGRlZmF1bHRzIHRvIE5vbmUpLCBpZiB0aGUgcGFydCBkb2VzIG5vdCBoYXZlIGEKICAgICAgICBtYWluIE1JTUUgdHlwZSBvZiAidGV4dCIsIG9yIHRoZSBjaGFyc2V0IGlzIG5vdCBkZWZpbmVkLgoKICAgICAgICBUaGUgbGlzdCB3aWxsIGNvbnRhaW4gb25lIHN0cmluZyBmb3IgZWFjaCBwYXJ0IG9mIHRoZSBtZXNzYWdlLCBwbHVzCiAgICAgICAgb25lIGZvciB0aGUgY29udGFpbmVyIG1lc3NhZ2UgKGkuZS4gc2VsZiksIHNvIHRoYXQgYSBub24tbXVsdGlwYXJ0CiAgICAgICAgbWVzc2FnZSB3aWxsIHN0aWxsIHJldHVybiBhIGxpc3Qgb2YgbGVuZ3RoIDEuCiAgICAgICAgKAIAAAB0BAAAAHdhbGtSqgAAACgDAAAAUi4AAABScgAAAHQEAAAAcGFydCgAAAAAKAAAAABzVQAAAC90bXAvbmRrLVVzZXIvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvZGFyd2luLXg4Nl82NC9saWIvcHl0aG9uMi43L2VtYWlsL21lc3NhZ2UucHl0DAAAAGdldF9jaGFyc2V0cwoDAABzAgAAAAAQaf////8oAQAAAFKrAAAATigwAAAAdAgAAABfX25hbWVfX3QKAAAAX19tb2R1bGVfX3QHAAAAX19kb2NfX1IvAAAAUjMAAABSoAAAAFIxAAAAUjsAAABSPAAAAFI9AAAAUj8AAABSBwAAAFJQAAAAUlMAAABSUQAAAFJhAAAAUmIAAABSZAAAAFJmAAAAUmoAAABSawAAAFJuAAAAUm8AAABScAAAAFJxAAAAUkcAAABScwAAAFJYAAAAUoEAAABShQAAAFKHAAAAUogAAABSgwAAAFKJAAAAUo8AAABSMgAAAFKQAAAAUpEAAABSWgAAAFJUAAAAUpgAAABSmwAAAFKeAAAAUqYAAABSqgAAAFKtAAAAdA8AAABlbWFpbC5pdGVyYXRvcnNSqwAAACgAAAAAKAAAAAAoAAAAAHNVAAAAL3RtcC9uZGstVXNlci9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9kYXJ3aW4teDg2XzY0L2xpYi9weXRob24yLjcvZW1haWwvbWVzc2FnZS5weVIAAAAAXAAAAHNYAAAABg4GAQkLCQYMEAkHCQMJBgkMDzIMCgktCQgJBAkLCQgJDAkDCQUJCgkKCQoMEAwSCRkJEwkYCQkJCQkJCQkJFRIWBgEMIwYBDy8PFg8gDBAMDQktDB8MEygAAAAAKBYAAABSsAAAAHQHAAAAX19hbGxfX3QCAAAAcmVSTAAAAFJKAAAAdAgAAAB3YXJuaW5nc3QJAAAAY1N0cmluZ0lPUgEAAAB0DQAAAGVtYWlsLmNoYXJzZXRSVgAAAFICAAAAUgMAAABSeAAAAHQHAAAAY29tcGlsZVISAAAAUgwAAABSBwAAAFIyAAAAUhYAAABSIwAAAFIlAAAAUgAAAAAoAAAAACgAAAAAKAAAAABzVQAAAC90bXAvbmRrLVVzZXIvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvZGFyd2luLXg4Nl82NC9saWIvcHl0aG9uMi43L2VtYWlsL21lc3NhZ2UucHl0CAAAADxtb2R1bGU+BQAAAHMgAAAABgIJAgwBDAEMAQwBEAMMARABEAIGBA8ECQoPGAkSCQw=