8.6 KiB
IyBBbHBoYSBDYXNlIFN0dWR5IC0tIFNlYXJjaCBWZWxvY2l0eSBQaWxvdA0KDQotLS0NCg0KVGhpcyBkb2N1bWVudCBpcyBhIHNhbGVzIGFzc2V0LiBJdCBkZW1vbnN0cmF0ZXMgdGhlICJCZWZvcmUiIChwcmUtaW50ZXJ2ZW50aW9uKSwgdGhlICJQcm9wb3NlZCBJbnRlcnZlbnRpb24iLCBhbmQgdGhlICJQcm9qZWN0ZWQgQWZ0ZXIiIGZvciBhIHBpdm90IGNsaWVudC4gSXQgaXMgbm90IGEgcGVyZm9ybWFuY2UgcmVwb3J0IC0tIGl0IGlzIGEgdGVtcGxhdGUgZm9yIHByb3NwZWN0cyB0byB1bmRlcnN0YW5kIHRoZSBzeXN0ZW0ncyB2YWx1ZS4NCg0KLS0tDQoNCiMjIENsaWVudCBQcm9maWxlOiBQaG9lbml4IFNhbG9uICsgU3BhDQoNClwgRGV0YWlsIDx8fA0KfC0tLS0tfC0tLS0tLXwNCnwgQnVzaW5lc3MgfCBQaG9lbml4IFNhbG9uICsgU3BhIHwNCnwgTG9jYXRpb24gfCAzNDYwIFJvYmluIExuIFN0ZSA0LCBDYW1lcm9uIFBhcmssIENBIDk1NjgyIHwNCnwgT3duZXIgfCBBc2hsZXkgVGhvcm5oaWxsIChFc3RoZXRpY2lhbiBzaW5jZSAyMDA3KSB8DQp8IFllYXJzIGluIEJ1c2luZXNzIHwgMiAoc2luY2UgSnVuZSAyMDI0KSB8DQp8IFByaW1hcnkgU2VydmljZXMgfCBGYWNpYWxzLCBTcHJheSBUYW5zLCBXYXhpbmcsIExhc2gsIEhhaXIgfA0KfCBHQlAgUmF0aW5nIHwgNC45IOKYhSDigJQgdG9wIG9mIG1hcmtldCB8DQp8IEluc3RhZ3JhbSB8IDcwMSBmb2xsb3dlcnMsIDEzNCBwb3N0cyB8DQp8IFdlYnNpdGUgfCBwaG9lbml4Y2FtZXJvbnBhcmsuY29tIC0gTW9kZXJuIFNxdWFyZXNwYWNlIHNpdGUgfA0KfCBCb29raW5nIHwgVmFnYXJvIC0gQWN0aXZlIHwNCg0KLS0tDQoNCiMjIEJhc2VsaW5lIC0gIkJlZm9yZSIgKEp1bmUgMjAyNikNCg0KIyMjIE1ldHJpYyAxOiBMb2NhbCBTZWFyY2ggUG9zaXRpb24NCg0KfCBRdWVyeSB8IEN1cnJlbnQgUmFuayB8IE5vdGVzIHwNCnwtLS0tLS18LS0tLS0tLS0tLS18LS0tLS0tLS18DQp8ICJmYWNpYWxzIENhbWVyb24gUGFyayIgfCAjMTEgLSBQYWdlIDIgfCBOb3QgaW4gdG9wIDEwIHwNCnwgInNwcmF5IHRhbiBDYW1lcm9uIFBhcmsiIHwgIzggLSBQYWdlIDEgfCBHb29kIHBsYWNlbWVudCB8DQp8ICJoYWlyIHNhbG9uIENhbWVyb24gUGFyayIgfCAjMTYgLSBQYWdlIDIgfCBEYXNoZWQgYnkgY29tcGV0aXRvcnMgfA0KfCAiYmVhdXR5IHNhbG9uIENhbWVyb24gUGFyayIgfCAjMTQgLSBQYWdlIDIgfCBNb2RlcmF0ZSB8DQp8ICJsYXNoIGV4dGVuc2lvbnMgQ2FtZXJvbiBQYXJrIiB8ICMxMjMgLSBQYWdlIDMgfCBSYW5rcyBiZWhpbmQgTGFzaCBTdHVkaW9zIHwNCg0KIyMjIE1ldHJpYyAyOiBJbmRleGVkIFBhZ2UgQ291bnQNCg0KfCBTb3VyY2UgfCBDb3VudCB8IE5vdGVzIHwNCnwtLS0tLS18LS0tLS0tfC0tLS0tLS18DQp8IFdlYnNpdGUgU2l0ZS1pbmRleGVkIHBhZ2VzIHwgMTIgfCA4IGNvcmUgcGFnZXMsIDQgYmxvZy9wcm9tbyBwYWdlcyB8DQp8IEluc3RhZ3JhbSB8IDEzNCBwb3N0cyB8IFNwb3JhZGljYWxseSBpbmRleGVkIHwNCnwgWWVscCBwcm9maWxlIHwgMSB8IEVzdGFibGlzaGVkIHwNCnwgR0JQIHBvc3RzIHwgMCB8IE5vbmUgfA0KfCBGYWNlYm9vayB8IDEgfCBTaW5nbGUgcGFnZSB8DQp8ICoqVG90YWwgSW5kZXhlZCBBc3NldHM6KiogfCAqKjE0OCoqIHwgTW9zdGx5IHBhc3NpdmUgcGFnZXMgLSBubyBmcmVzaCBjb250ZW50IHwNCg0KIyMjIE1ldHJpYyAzOiBSZXZpZXcgU2lnbmFsIFZvbHVtZQ0KDQp8IFBsYXRmb3JtIHwgUmF0aW5nIHwgUmV2aWV3cyB8IFBob3RvcyB8DQp8LS0tLS0tLS0tfC0tLS0tLS0tfC0tLS0tLS0tLS0tfC0tLS0tLS0tLS18DQp8IFllbHAgfCA0Ljkg4piFIHwgMjYgfCAxNiB8DQp8IEdvb2dsZSBCdXNpbmVzcyB8IDQuOSDilIUgfCAzMiB8IDEyIHwNCnwgRmFjZWJvb2sgfCA0Ljgg4piFIHwgMTggfCAyMCB8DQp8IFZhZ2FybyB8IDUuMCDilIUgfCAxNSB8IDggfA0KfCAqKlRvdGFsOioqIHwgIngiIHwgKio5MSoqIHwgKio1NioqDQoNCi0tLQ0KDQojIyBUaGUgRGlhZ25vc2lzIC0gIlRoZSBHaXNwIg0KDQpQaG9lbml4IGhhcyB0aGUgcmF3IG1hdGVyaWFscyBvZiBhIHdpbm5pbmcgbG9jYWwgYnJhbmQ6DQoNCi0gNC45IOKUhSBHQlAgcmF0aW5nIChiZXN0IGluIHRvd24pDQotIE1vZGVybiwgd2VsbC1kZXNpZ25lZCB3ZWJzaXRlDQotIFF1YWxpdHkgc2VydmljZXMgd2l0aCBhIGNsZWFyIHBvaW50IG9mIGRpZmZlcmVuY2UgKG1lbWJlcnNoaXBzKQ0KLSBFbmdhZ2VkIG93bmVyIHdobyBjYXJlcyBhYm91dCBoZXIgb25saW5lIHJlcHV0YXRpb24NCg0KVGhlIHByb2JsZW06IHRoZSBzaWduYWxzIGRvbid0IG1hdGNoIHRoZSBzZXJ2aWNlLg0KDQpUaGUgYnVzaW5lc3MgaXMgb3BlcmF0aW5nIHdpdGggYSBzZXZlcmUgZGlzY29ubmVjdCBiZXR3ZWVuIGl0cyBvZmZsaW5lIHF1YWxpdHkgKDQuOeKUhSByYXRpbmcsIG1lbWJlcnNoaXBzLCByZXBlYXQgY2xpZW50cykgYW5kIGl0cyBvbmxpbmUgdmlzaWJpbGl0eSAobm8gR0JQIHBvc3RzLCBkZWFkIEluc3RhZ3JhbSBjYWRlbmNlLCB6ZXJvIGNvbnRlbnQgc3RyYXRlZ3kpLiBUaGUgMTQ4IGluZGV4ZWQgcGFnZXMgYXJlIGFsbW9zdCBlbnRpcmVseSBwYXNzaXZlIC0tIHRoZXkncmUgbm90IGJlaW5nIGZyZXNoZW5lZCBvciBwcm9tb3RlZC4gU29tZW9uZSBob3dzIHRoZWlyIG9mZmxpbmUgZXhwZXJpZW5jZSBpcyA0Ljkg4pSFLWxldmVsLCBidXQgdGhlaXIgb25saW5lIHByZXNlbmNlIGlzIHF1aWV0LiBUaGF0J3Mgbm90IGJlY2F1c2UgdGhleSdyZSBkb2luZyBhbnl0aGluZyB3cm9uZyAtLSBpdCdzIGJlY2F1c2UgdGhleSdyZSBub3QgZG9pbmcgYW55dGhpbmcgYXQgYWxsLiBUaGUgc3lzdGVtIGlzIGRhcmssIGFuZCB0aGUgZmlyc3Qgb25lIHRvIGZsaXAgdGhlIHN3aXRjaCB3aW5zIHRoZSBjYXRlZ29yeS4NCg0KLS0tDQoNCiMjIFByb3Bvc2VkIEludGVydmVudGlvbiAtLSAiVGhlIEhlYXJ0YmVhdCBQbGFuIg0KDQpBIHRocmVlLW1vbnRoIHByb2dyYW0gb2YgbWluaW11bSB2aWFibGUgYWN0aW9ucyBkZXNpZ25lZCB0byBidWlsZCBsb2NhbCBzZWFyY2ggdmVsb2NpdHkuIE5vIG92ZXJodWxseSBjb250ZW50IG92ZXJodWxseSBjb21taXRtZW50LiBKdXN0IGNvbnNpc3RlbnQgcHVsc2UuDQoNCiMjIyBNb250aCAxOiBGb3VuZGF0aW9uIChXZWVrcyAxLTQpDQoNCnwgQWN0aW9uIHwgVGltZSB8IFNFTyBJbXBhY3QgfA0KfC0tLS0tLS0tfC0tLS0tLXwtLS0tLS0tLS0tLXwNCnwgUG9zdCAzIEluc3RhZ3JhbSBwaG90b3Mvd2VlayB3aXRoIGxvY2F0aW9uIHRhZ3MgfCAxNSBtaW4vd2sgfCBDcmVhdGVzIGZyZXNoIGluZGV4YWJsZSBjb250ZW50IHwNCnwgQ2xhaW0gJiBvcHRpbWl6ZSBHQlAgY29tcGxldGVseSB8IDE1IG1pbiB8IEJvb3N0cyBsb2NhbCBwYWNrIHJhbmtpbmcgfA0KfCBSZXNwb25kIHRvIGFsbCBleGlzdGluZyByZXZpZXdzIHwgMzAgbWluIHwgU2lnbmFscyBhY3RpdmUgbWFuYWdlbWVudCB8DQp8IEFkZCA1IHBob3RvcyB0byBHQlAgfCAxMCBtaW4gfCBSZXZpZXcgc2lnbmFsIHZvbHVtZSB8DQp8IFdyaXRlIDMgc2VydmljZS1zcGVjaWZpYyBzZW8gcGFnZXMgZm9yIHdlYnNpdGUgfCAyIGhycyB8IFNpdGUgZGVwdGggYW5kIGluZGV4YXRpb24gfA0KDQojIyMgTW9udGggMjogTW9tZW50dW0gKFdlZWtzIDUtOCkNCg0KfCBBY3Rpb24gfCBUaW1lIHwgU0VPIEltcGFjdCB8DQp8LS0tLS0tLS18LS0tLS0tLXwtLS0tLS0tLS0tLXwNCnwgR0JQIHBvc3QgMXgvd2VlayAoY29uc2lzdGVudCkgeCA1IHdlZWtzIHwgMTUgbWluIHwgRnJlc2huZXNzIHNpZ25hbCB0byBHb29nbGUgfA0KfCBSZWVsczogMSBiZWZvcmUvYWZ0ZXIgcGVyIHdlZWsgfCAzMCBtaW4vd2sgfCBIaWdoLWVuZ2FnZW1lbnQgY29udGVudCAtIGJvb3N0cyBzbyVjaWFsIHNpZ25hbHMgfA0KfCBTdGFydCBlbWFpbCBjYXB0dXJlIChpbi1zYWxvbiArIHdlYnNpdGUpIHwgMSBociB8IFJldGVudGlvbiBhbmQgcmVwZWF0IHZpc2l0cyB8DQp8IFdyaXRlIDIgY2FzZSBzdHVkeSBwYWdlcyAoYmVmb3JlL2FmdGVyIHN0b3JpZXMpIHwgMiBocnMgfCBTb2NpYWwgcHJvb2YgYW5kIHNpdGUgZGVwdGggfA0KDQojIyMgTW9udGggMzogQ29tcG91bmQgKFdlZWtzIDktMTIpDQoNCnwgQWN0aW9uIHwgVGltZSB8IFNFTyBJbXBhY3QgfA0KfC0tLS0tLS0tfC0tLS0tLS18LS0tLS0tLS0tLS18DQp8IE1haW50YWluIDMvcG9zdHMgcGVyIHdlZWsgY2FkZW5jZSBmb3IgZnVsbCA5MCBkYXlzIHwgMTUgbWluL3drIHwgQ29uc2lzdGVuY3kgdHJpZ2dlcnMgZG9tYWluIGF1dGhvcml0eSB8DQp8IFNvbGljaXQgcmV2aWV3cyBmcm9tIGNsaWVudHMgKDErL3dlZWspIHwgNSBtaW4vd2sgfCBOZXcgcmV2aWV3cyBib29zdCBsb2NhbCBwYWNrIHJhbmtpbmcgfA0KfCBMb2NhbCBiYWNrbGluayBvdXRyZWFjaCAoY29tbXVuaXR5IGV2ZW50cywgcGFydG5lcnMpIHwgMSBociB8IE9mZi1wYWdlIGF1dGhvcml0eSB8DQp8IFJlZ3VsYXIgcGVyZm9ybWFuY2UgY2hlY2sgJiBpdGVyYXRlIHwgMTUgbWluL21vIHwgR3VhcmFudGVlcyBjb250ZW50IGlzIHdvcmtpbmcgfA0KDQotLS0NCg0KIyMgUHJvamVjdGVkICVBZnRlciIgLS0gOTAgRGF5cyBMYXRlcg0KDQojIyMgTWV0cmljIDE6IExvY2FsIFNlYXJjaCBQb3NpdGlvbiAoUHJvamVjdGVkKQ0KDQp8IFF1ZXJ5IHwgQmVmb3JlIHwgQWZ0ZXIgfCBJbXByb3ZlbWVudCB8DQp8LS0tLS0tfC0tLS0tLS0tfC0tLS0tLS18LS0tLS0tLS0tLS0tLXwNCnwgImZhY2lhbHMgQ2FtZXJvbiBQYXJrIiB8ICMxMSB8ICMzLTUgfCBFbnRlcnMgdG9wIDUgb2YgbG9jYWwgc2VhcmNoIHwNCnwgInNwcmF5IHRhbiBDYW1lcm9uIFBhcmsiIHwgIzggfCAjMS0yIHwgQ2xhaW1zIHRvcCBzcG90IHwNCnwgImhhaXIgc2Fsb24gQ2FtZXJvbiBQYXJrIiB8ICMxNiB8ICM1LTcgfCBSaXNlcyA5KyBwb3NpdGlvbnMgfA0KfCAiYmVhdXR5IHNhbG9uIENhbWVyb24gUGFyayIgfCAjMTQgfCAjNC02IHwgRW50ZXJzIHRvcCA1IHwNCnwgImxhc2ggZXh0ZW5zaW9ucyBDYW1lcm9uIFBhcmsiIHwgIzEyMyB8ICMxNS0zMCB8IE1hc3NpdmUgaW1wcm92ZW1lbnQgZnJvbSBuZWFyIGludmlzaWJpbGl0eSB8DQoNCiMjIyBNZXRyaWMgMjogSW5kZXhlZCBQYWdlIENvdW50IChQcm9qZWN0ZWQpDQoNCnwgU291cmNlIHwgQmVmb3JlIHwgQWZ0ZXIgfA0KfC0tLS0tLS18LS0tLS0tLS18LS0tLS0tLXwNCnwgV2Vic2l0ZSB8IDEyIHwgMjAgfA0KfCBJbnN0YWdyYW0gZm9sbG93ZXJzIHwgNzAxIHwgMSwwMDArICB8DQp8IEluc3RhZ3JhbSBwb3N0cyB8IDEzNCB8IDE3MCArIHwNCnwgR0JQIHBvc3RzIHwgMCB8IDEyIHwNCnwgVG90YWwgSW5kZXhlZCBBc3NldHMgfCAxNDggfCAyNTArIHwNCg0KIyMjIE1ldHJpYyAzOiBSZXZpZXcgU2lnbmFsIFZvbHVtZSAoUHJvamVjdGVkKQ0KDQp8IE1ldHJpYyB8IEJlZm9yZSB8IEFmdGVyIHwgfA0KfC0tLS0tLXwtLS0tLS0tLXwtLS0tLS0tfA0KfCBDb21iaW5lZCBSZXZpZXdzIHwgOTEgfCAxNTArICIffCINCnwgQ29tYmluZWQgUGhvdG9zIHwgNTYgfCAyMDArIHwNCnwgQXZnLiBSYXRpbmcgfCA0Ljgg4piFIHwgNC45IOKUhSB8IE1haW50YWlucyBleGNlbGxlbmNlIHwNCg0KLS0tDQoNCiMjIFN1bW1hcnkgLS0gIlRoZSBTdG9yeSBMaW5lIg0KDQoqKkJlZm9yZToqKiBBIGJ1c2luZXNzIHdpdGggNC45IOKUhSBxdWFsaXR5IGFuZCBhbG1vc3QgemVybyBvbmxpbmUgdmlzaWJpbGl0eS4gTW9zdCBxdWVyaWVzIHJhbmtlZCBiZWxvdyB0aGUgZm9sZC4gTm8gZnJlc2ggY29udGVudC4gTm8gcmV0ZW50aW9uIHN5c3RlbS4gTm8gYmFja2xpbmtzLiBUaGUgYnVzaW5lc3Mgd2FzIGV4Y2VsbGVudCBvZmZsaW5lIGFuZCBpbnZpc2libGUgb25saW5lLg0KDQoqKkludGVydmVudGlvbjoqKiBBIHRocmVlLW1vbnRoIGhlYXJ0YmVhdCBwcm9ncmFtIHRoYXQgdHJlYXRzIGV2ZXJ5IHBvc3QgYXMgYW4gaW5kZXhhYmxlIHBhZ2UsIGV2ZXJ5IHJldmlldyBhcyBhIHJhbmtpbmcgc2lnbmFsLCBhbmQgZXZlcnkgdXBkYXRlIGFzIGEgZnJlc2huZXNzIHNpZ25hbCB0byBHb29nbGUuIFRvdGFsIGVmZm9ydDogfiAzIGhvdXJzIHBlciBtb250aC4NCg0KKipBZnRlcjoqKiBUaGUgYnVzaW5lc3MgYXBwZWFycyBpbiB0aGUgdG9wIDUgZm9yIGl0cyBwcmltYXJ5IHNlcnZpY2VzLiBJbmRleGVkIGFzc2V0cyBncm93IGJ5IDcwJS4gUmV2aWV3IHZvbHVtZSBpbmNyZWFzZXMgYnkgNTAlLiBUaGUgb3duZXIgaGFzIHNwZW50IGxlc3MgdGhhbiBhbiBob3VyIGEgd2VlayBvbiB0aGUgZW50aXJlIHRoaW5nIC0gIHRoZSBzeXN0ZW0gZGlkIHRoZSB3b3JrLg0KDQoqKkNvc3Q6KiogJDMwMC9tbyBmb3IgdGhlIEhlYXJ0YmVhdCB0aWVyIC0gIGxlc3MgdGhhbiBvbmUgbmV3IGNsaWVudCBhIG1vbnRoLg0KDQoqKlJlc3VsdDoqKiBUaGUgYnVzaW5lc3MgaXMgdGhlIGZpcnN0IG5hbWUgcGVvcGxlIHNlZSB3aGVuIHRoZXkgc2VhcmNoLiBUaGF0J3MgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBiZWluZyB0aGUgYmVzdC1rZXB0IHNlY3JldCBhbmQgYmVpbmcgdGhlIG5hbWUgZXZlcnlvbmUga25vd3Mu