VGhpcyBpcyBnY2NpbnQuaW5mbywgcHJvZHVjZWQgYnkgbWFrZWluZm8gdmVyc2lvbiA1LjIgZnJvbSBnY2NpbnQudGV4aS4KCkNvcHlyaWdodCAoQykgMTk4OCwgMTk4OSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwKMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBGcmVlIFNvZnR3YXJlCkZvdW5kYXRpb24sIEluYy4KCiBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4yIG9yCmFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQpJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgIkdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIiBhbmQgIkZ1bmRpbmcgRnJlZQpTb2Z0d2FyZSIsIHRoZSBGcm9udC1Db3ZlciB0ZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZQpCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKSAoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcwppbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZCAiR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlIi4KCiAoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CgogQSBHTlUgTWFudWFsCgogKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CgogWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVSBzb2Z0d2FyZS4KQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlIGZ1bmRzIGZvciBHTlUKZGV2ZWxvcG1lbnQuCklORk8tRElSLVNFQ1RJT04gU29mdHdhcmUgZGV2ZWxvcG1lbnQKU1RBUlQtSU5GTy1ESVItRU5UUlkKKiBnY2NpbnQ6IChnY2NpbnQpLiAgICAgICAgICAgIEludGVybmFscyBvZiB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24uCkVORC1JTkZPLURJUi1FTlRSWQoKIFRoaXMgZmlsZSBkb2N1bWVudHMgdGhlIGludGVybmFscyBvZiB0aGUgR05VIGNvbXBpbGVycy4KCiBDb3B5cmlnaHQgKEMpIDE5ODgsIDE5ODksIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsCjE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgRnJlZSBTb2Z0d2FyZQpGb3VuZGF0aW9uLCBJbmMuCgogUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50CnVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMiBvcgphbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nICJHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSIgYW5kICJGdW5kaW5nIEZyZWUKU29mdHdhcmUiLCB0aGUgRnJvbnQtQ292ZXIgdGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUKQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikgKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMKaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQgIkdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSIuCgogKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgoKIEEgR05VIE1hbnVhbAoKIChiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgoKIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUgc29mdHdhcmUuCkNvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZSBmdW5kcyBmb3IgR05VCmRldmVsb3BtZW50LgoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IFRvcCwgIE5leHQ6IENvbnRyaWJ1dGluZywgIFVwOiAoRElSKQoKSW50cm9kdWN0aW9uCioqKioqKioqKioqKgoKVGhpcyBtYW51YWwgZG9jdW1lbnRzIHRoZSBpbnRlcm5hbHMgb2YgdGhlIEdOVSBjb21waWxlcnMsIGluY2x1ZGluZyBob3cKdG8gcG9ydCB0aGVtIHRvIG5ldyB0YXJnZXRzIGFuZCBzb21lIGluZm9ybWF0aW9uIGFib3V0IGhvdyB0byB3cml0ZQpmcm9udCBlbmRzIGZvciBuZXcgbGFuZ3VhZ2VzLiAgSXQgY29ycmVzcG9uZHMgdG8gdGhlIGNvbXBpbGVycyAoR0NDKQp2ZXJzaW9uIDQuMy4zLiAgVGhlIHVzZSBvZiB0aGUgR05VIGNvbXBpbGVycyBpcyBkb2N1bWVudGVkIGluIGEgc2VwYXJhdGUKbWFudWFsLiAgKk5vdGUgSW50cm9kdWN0aW9uOiAoZ2NjKVRvcC4KCiBUaGlzIG1hbnVhbCBpcyBtYWlubHkgYSByZWZlcmVuY2UgbWFudWFsIHJhdGhlciB0aGFuIGEgdHV0b3JpYWwuICBJdApkaXNjdXNzZXMgaG93IHRvIGNvbnRyaWJ1dGUgdG8gR0NDICgqbm90ZSBDb250cmlidXRpbmc6OiksIHRoZQpjaGFyYWN0ZXJpc3RpY3Mgb2YgdGhlIG1hY2hpbmVzIHN1cHBvcnRlZCBieSBHQ0MgYXMgaG9zdHMgYW5kIHRhcmdldHMKKCpub3RlIFBvcnRhYmlsaXR5OjopLCBob3cgR0NDIHJlbGF0ZXMgdG8gdGhlIEFCSXMgb24gc3VjaCBzeXN0ZW1zCigqbm90ZSBJbnRlcmZhY2U6OiksIGFuZCB0aGUgY2hhcmFjdGVyaXN0aWNzIG9mIHRoZSBsYW5ndWFnZXMgZm9yIHdoaWNoCkdDQyBmcm9udCBlbmRzIGFyZSB3cml0dGVuICgqbm90ZSBMYW5ndWFnZXM6OikuICBJdCB0aGVuIGRlc2NyaWJlcyB0aGUKR0NDIHNvdXJjZSB0cmVlIHN0cnVjdHVyZSBhbmQgYnVpbGQgc3lzdGVtLCBzb21lIG9mIHRoZSBpbnRlcmZhY2VzIHRvCkdDQyBmcm9udCBlbmRzLCBhbmQgaG93IHN1cHBvcnQgZm9yIGEgdGFyZ2V0IHN5c3RlbSBpcyBpbXBsZW1lbnRlZCBpbgpHQ0MuCgogQWRkaXRpb25hbCB0dXRvcmlhbCBpbmZvcm1hdGlvbiBpcyBsaW5rZWQgdG8gZnJvbQo8aHR0cDovL2djYy5nbnUub3JnL3JlYWRpbmdzLmh0bWw+LgoKKiBNZW51OgoKKiBDb250cmlidXRpbmc6OiAgICBIb3cgdG8gY29udHJpYnV0ZSB0byB0ZXN0aW5nIGFuZCBkZXZlbG9waW5nIEdDQy4KKiBQb3J0YWJpbGl0eTo6ICAgICBHb2FscyBvZiBHQ0MncyBwb3J0YWJpbGl0eSBmZWF0dXJlcy4KKiBJbnRlcmZhY2U6OiAgICAgICBGdW5jdGlvbi1jYWxsIGludGVyZmFjZSBvZiBHQ0Mgb3V0cHV0LgoqIExpYmdjYzo6ICAgICAgICAgIExvdy1sZXZlbCBydW50aW1lIGxpYnJhcnkgdXNlZCBieSBHQ0MuCiogTGFuZ3VhZ2VzOjogICAgICAgTGFuZ3VhZ2VzIGZvciB3aGljaCBHQ0MgZnJvbnQgZW5kcyBhcmUgd3JpdHRlbi4KKiBTb3VyY2UgVHJlZTo6ICAgICBHQ0Mgc291cmNlIHRyZWUgc3RydWN0dXJlIGFuZCBidWlsZCBzeXN0ZW0uCiogT3B0aW9uczo6ICAgICAgICAgT3B0aW9uIHNwZWNpZmljYXRpb24gZmlsZXMuCiogUGFzc2VzOjogICAgICAgICAgT3JkZXIgb2YgcGFzc2VzLCB3aGF0IHRoZXkgZG8sIGFuZCB3aGF0IGVhY2ggZmlsZSBpcyBmb3IuCiogVHJlZXM6OiAgICAgICAgICAgVGhlIHNvdXJjZSByZXByZXNlbnRhdGlvbiB1c2VkIGJ5IHRoZSBDIGFuZCBDKysgZnJvbnQgZW5kcy4KKiBSVEw6OiAgICAgICAgICAgICBUaGUgaW50ZXJtZWRpYXRlIHJlcHJlc2VudGF0aW9uIHRoYXQgbW9zdCBwYXNzZXMgd29yayBvbi4KKiBDb250cm9sIEZsb3c6OiAgICBNYWludGFpbmluZyBhbmQgbWFuaXB1bGF0aW5nIHRoZSBjb250cm9sIGZsb3cgZ3JhcGguCiogVHJlZSBTU0E6OiAgICAgICAgQW5hbHlzaXMgYW5kIG9wdGltaXphdGlvbiBvZiB0aGUgdHJlZSByZXByZXNlbnRhdGlvbi4KKiBMb29wIEFuYWx5c2lzIGFuZCBSZXByZXNlbnRhdGlvbjo6IEFuYWx5c2lzIGFuZCByZXByZXNlbnRhdGlvbiBvZiBsb29wcwoqIE1hY2hpbmUgRGVzYzo6ICAgIEhvdyB0byB3cml0ZSBtYWNoaW5lIGRlc2NyaXB0aW9uIGluc3RydWN0aW9uIHBhdHRlcm5zLgoqIFRhcmdldCBNYWNyb3M6OiAgIEhvdyB0byB3cml0ZSB0aGUgbWFjaGluZSBkZXNjcmlwdGlvbiBDIG1hY3JvcyBhbmQgZnVuY3Rpb25zLgoqIEhvc3QgQ29uZmlnOjogICAgIFdyaXRpbmcgdGhlICd4bS1NQUNISU5FLmgnIGZpbGUuCiogRnJhZ21lbnRzOjogICAgICAgV3JpdGluZyB0aGUgJ3QtVEFSR0VUJyBhbmQgJ3gtSE9TVCcgZmlsZXMuCiogQ29sbGVjdDI6OiAgICAgICAgSG93ICdjb2xsZWN0Micgd29ya3M7IGhvdyBpdCBmaW5kcyAnbGQnLgoqIEhlYWRlciBEaXJzOjogICAgIFVuZGVyc3RhbmRpbmcgdGhlIHN0YW5kYXJkIGhlYWRlciBmaWxlIGRpcmVjdG9yaWVzLgoqIFR5cGUgSW5mb3JtYXRpb246OiBHQ0MncyBtZW1vcnkgbWFuYWdlbWVudDsgZ2VuZXJhdGluZyB0eXBlIGluZm9ybWF0aW9uLgoKKiBGdW5kaW5nOjogICAgICAgICBIb3cgdG8gaGVscCBhc3N1cmUgZnVuZGluZyBmb3IgZnJlZSBzb2Z0d2FyZS4KKiBHTlUgUHJvamVjdDo6ICAgICBUaGUgR05VIFByb2plY3QgYW5kIEdOVS9MaW51eC4KCiogQ29weWluZzo6ICAgICAgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ugc2F5cwogICAgICAgICAgICAgICAgICAgICBob3cgeW91IGNhbiBjb3B5IGFuZCBzaGFyZSBHQ0MuCiogR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlOjogSG93IHlvdSBjYW4gY29weSBhbmQgc2hhcmUgdGhpcyBtYW51YWwuCiogQ29udHJpYnV0b3JzOjogICAgUGVvcGxlIHdobyBoYXZlIGNvbnRyaWJ1dGVkIHRvIEdDQy4KCiogT3B0aW9uIEluZGV4OjogICAgSW5kZXggdG8gY29tbWFuZCBsaW5lIG9wdGlvbnMuCiogQ29uY2VwdCBJbmRleDo6ICAgSW5kZXggb2YgY29uY2VwdHMgYW5kIHN5bWJvbCBuYW1lcy4KCh8KRmlsZTogZ2NjaW50LmluZm8sICBOb2RlOiBDb250cmlidXRpbmcsICBOZXh0OiBQb3J0YWJpbGl0eSwgIFVwOiBUb3AKCjEgQ29udHJpYnV0aW5nIHRvIEdDQyBEZXZlbG9wbWVudAoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKCklmIHlvdSB3b3VsZCBsaWtlIHRvIGhlbHAgcHJldGVzdCBHQ0MgcmVsZWFzZXMgdG8gYXNzdXJlIHRoZXkgd29yayB3ZWxsLApjdXJyZW50IGRldmVsb3BtZW50IHNvdXJjZXMgYXJlIGF2YWlsYWJsZSBieSBTVk4gKHNlZQo8aHR0cDovL2djYy5nbnUub3JnL3N2bi5odG1sPikuICBTb3VyY2UgYW5kIGJpbmFyeSBzbmFwc2hvdHMgYXJlIGFsc28KYXZhaWxhYmxlIGZvciBGVFA7IHNlZSA8aHR0cDovL2djYy5nbnUub3JnL3NuYXBzaG90cy5odG1sPi4KCiBJZiB5b3Ugd291bGQgbGlrZSB0byB3b3JrIG9uIGltcHJvdmVtZW50cyB0byBHQ0MsIHBsZWFzZSByZWFkIHRoZQphZHZpY2UgYXQgdGhlc2UgVVJMczoKCiAgICAgPGh0dHA6Ly9nY2MuZ251Lm9yZy9jb250cmlidXRlLmh0bWw+CiAgICAgPGh0dHA6Ly9nY2MuZ251Lm9yZy9jb250cmlidXRld2h5Lmh0bWw+Cgpmb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIG1ha2UgdXNlZnVsIGNvbnRyaWJ1dGlvbnMgYW5kIGF2b2lkCmR1cGxpY2F0aW9uIG9mIGVmZm9ydC4gIFN1Z2dlc3RlZCBwcm9qZWN0cyBhcmUgbGlzdGVkIGF0CjxodHRwOi8vZ2NjLmdudS5vcmcvcHJvamVjdHMvPi4KCh8KRmlsZTogZ2NjaW50LmluZm8sICBOb2RlOiBQb3J0YWJpbGl0eSwgIE5leHQ6IEludGVyZmFjZSwgIFByZXY6IENvbnRyaWJ1dGluZywgIFVwOiBUb3AKCjIgR0NDIGFuZCBQb3J0YWJpbGl0eQoqKioqKioqKioqKioqKioqKioqKioKCkdDQyBpdHNlbGYgYWltcyB0byBiZSBwb3J0YWJsZSB0byBhbnkgbWFjaGluZSB3aGVyZSAnaW50JyBpcyBhdCBsZWFzdCBhCjMyLWJpdCB0eXBlLiAgSXQgYWltcyB0byB0YXJnZXQgbWFjaGluZXMgd2l0aCBhIGZsYXQgKG5vbi1zZWdtZW50ZWQpCmJ5dGUgYWRkcmVzc2VkIGRhdGEgYWRkcmVzcyBzcGFjZSAodGhlIGNvZGUgYWRkcmVzcyBzcGFjZSBjYW4gYmUKc2VwYXJhdGUpLiAgVGFyZ2V0IEFCSXMgbWF5IGhhdmUgOCwgMTYsIDMyIG9yIDY0LWJpdCAnaW50JyB0eXBlLiAgJ2NoYXInCmNhbiBiZSB3aWRlciB0aGFuIDggYml0cy4KCiBHQ0MgZ2V0cyBtb3N0IG9mIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdGFyZ2V0IG1hY2hpbmUgZnJvbSBhCm1hY2hpbmUgZGVzY3JpcHRpb24gd2hpY2ggZ2l2ZXMgYW4gYWxnZWJyYWljIGZvcm11bGEgZm9yIGVhY2ggb2YgdGhlCm1hY2hpbmUncyBpbnN0cnVjdGlvbnMuICBUaGlzIGlzIGEgdmVyeSBjbGVhbiB3YXkgdG8gZGVzY3JpYmUgdGhlCnRhcmdldC4gIEJ1dCB3aGVuIHRoZSBjb21waWxlciBuZWVkcyBpbmZvcm1hdGlvbiB0aGF0IGlzIGRpZmZpY3VsdCB0bwpleHByZXNzIGluIHRoaXMgZmFzaGlvbiwgYWQtaG9jIHBhcmFtZXRlcnMgaGF2ZSBiZWVuIGRlZmluZWQgZm9yIG1hY2hpbmUKZGVzY3JpcHRpb25zLiAgVGhlIHB1cnBvc2Ugb2YgcG9ydGFiaWxpdHkgaXMgdG8gcmVkdWNlIHRoZSB0b3RhbCB3b3JrCm5lZWRlZCBvbiB0aGUgY29tcGlsZXI7IGl0IHdhcyBub3Qgb2YgaW50ZXJlc3QgZm9yIGl0cyBvd24gc2FrZS4KCiBHQ0MgZG9lcyBub3QgY29udGFpbiBtYWNoaW5lIGRlcGVuZGVudCBjb2RlLCBidXQgaXQgZG9lcyBjb250YWluIGNvZGUKdGhhdCBkZXBlbmRzIG9uIG1hY2hpbmUgcGFyYW1ldGVycyBzdWNoIGFzIGVuZGlhbm5lc3MgKHdoZXRoZXIgdGhlIG1vc3QKc2lnbmlmaWNhbnQgYnl0ZSBoYXMgdGhlIGhpZ2hlc3Qgb3IgbG93ZXN0IGFkZHJlc3Mgb2YgdGhlIGJ5dGVzIGluIGEKd29yZCkgYW5kIHRoZSBhdmFpbGFiaWxpdHkgb2YgYXV0b2luY3JlbWVudCBhZGRyZXNzaW5nLiAgSW4gdGhlClJUTC1nZW5lcmF0aW9uIHBhc3MsIGl0IGlzIG9mdGVuIG5lY2Vzc2FyeSB0byBoYXZlIG11bHRpcGxlIHN0cmF0ZWdpZXMKZm9yIGdlbmVyYXRpbmcgY29kZSBmb3IgYSBwYXJ0aWN1bGFyIGtpbmQgb2Ygc3ludGF4IHRyZWUsIHN0cmF0ZWdpZXMKdGhhdCBhcmUgdXNhYmxlIGZvciBkaWZmZXJlbnQgY29tYmluYXRpb25zIG9mIHBhcmFtZXRlcnMuICBPZnRlbiwgbm90CmFsbCBwb3NzaWJsZSBjYXNlcyBoYXZlIGJlZW4gYWRkcmVzc2VkLCBidXQgb25seSB0aGUgY29tbW9uIG9uZXMgb3Igb25seQp0aGUgb25lcyB0aGF0IGhhdmUgYmVlbiBlbmNvdW50ZXJlZC4gIEFzIGEgcmVzdWx0LCBhIG5ldyB0YXJnZXQgbWF5CnJlcXVpcmUgYWRkaXRpb25hbCBzdHJhdGVnaWVzLiAgWW91IHdpbGwga25vdyBpZiB0aGlzIGhhcHBlbnMgYmVjYXVzZQp0aGUgY29tcGlsZXIgd2lsbCBjYWxsICdhYm9ydCcuICBGb3J0dW5hdGVseSwgdGhlIG5ldyBzdHJhdGVnaWVzIGNhbiBiZQphZGRlZCBpbiBhIG1hY2hpbmUtaW5kZXBlbmRlbnQgZmFzaGlvbiwgYW5kIHdpbGwgYWZmZWN0IG9ubHkgdGhlIHRhcmdldAptYWNoaW5lcyB0aGF0IG5lZWQgdGhlbS4KCh8KRmlsZTogZ2NjaW50LmluZm8sICBOb2RlOiBJbnRlcmZhY2UsICBOZXh0OiBMaWJnY2MsICBQcmV2OiBQb3J0YWJpbGl0eSwgIFVwOiBUb3AKCjMgSW50ZXJmYWNpbmcgdG8gR0NDIE91dHB1dAoqKioqKioqKioqKioqKioqKioqKioqKioqKioKCkdDQyBpcyBub3JtYWxseSBjb25maWd1cmVkIHRvIHVzZSB0aGUgc2FtZSBmdW5jdGlvbiBjYWxsaW5nIGNvbnZlbnRpb24Kbm9ybWFsbHkgaW4gdXNlIG9uIHRoZSB0YXJnZXQgc3lzdGVtLiAgVGhpcyBpcyBkb25lIHdpdGggdGhlCm1hY2hpbmUtZGVzY3JpcHRpb24gbWFjcm9zIGRlc2NyaWJlZCAoKm5vdGUgVGFyZ2V0IE1hY3Jvczo6KS4KCiBIb3dldmVyLCByZXR1cm5pbmcgb2Ygc3RydWN0dXJlIGFuZCB1bmlvbiB2YWx1ZXMgaXMgZG9uZSBkaWZmZXJlbnRseSBvbgpzb21lIHRhcmdldCBtYWNoaW5lcy4gIEFzIGEgcmVzdWx0LCBmdW5jdGlvbnMgY29tcGlsZWQgd2l0aCBQQ0MKcmV0dXJuaW5nIHN1Y2ggdHlwZXMgY2Fubm90IGJlIGNhbGxlZCBmcm9tIGNvZGUgY29tcGlsZWQgd2l0aCBHQ0MsIGFuZAp2aWNlIHZlcnNhLiAgVGhpcyBkb2VzIG5vdCBjYXVzZSB0cm91YmxlIG9mdGVuIGJlY2F1c2UgZmV3IFVuaXggbGlicmFyeQpyb3V0aW5lcyByZXR1cm4gc3RydWN0dXJlcyBvciB1bmlvbnMuCgogR0NDIGNvZGUgcmV0dXJucyBzdHJ1Y3R1cmVzIGFuZCB1bmlvbnMgdGhhdCBhcmUgMSwgMiwgNCBvciA4IGJ5dGVzIGxvbmcKaW4gdGhlIHNhbWUgcmVnaXN0ZXJzIHVzZWQgZm9yICdpbnQnIG9yICdkb3VibGUnIHJldHVybiB2YWx1ZXMuICAoR0NDCnR5cGljYWxseSBhbGxvY2F0ZXMgdmFyaWFibGVzIG9mIHN1Y2ggdHlwZXMgaW4gcmVnaXN0ZXJzIGFsc28uKQpTdHJ1Y3R1cmVzIGFuZCB1bmlvbnMgb2Ygb3RoZXIgc2l6ZXMgYXJlIHJldHVybmVkIGJ5IHN0b3JpbmcgdGhlbSBpbnRvCmFuIGFkZHJlc3MgcGFzc2VkIGJ5IHRoZSBjYWxsZXIgKHVzdWFsbHkgaW4gYSByZWdpc3RlcikuICBUaGUgdGFyZ2V0Cmhvb2sgJ1RBUkdFVF9TVFJVQ1RfVkFMVUVfUlRYJyB0ZWxscyBHQ0Mgd2hlcmUgdG8gcGFzcyB0aGlzIGFkZHJlc3MuCgogQnkgY29udHJhc3QsIFBDQyBvbiBtb3N0IHRhcmdldCBtYWNoaW5lcyByZXR1cm5zIHN0cnVjdHVyZXMgYW5kIHVuaW9ucwpvZiBhbnkgc2l6ZSBieSBjb3B5aW5nIHRoZSBkYXRhIGludG8gYW4gYXJlYSBvZiBzdGF0aWMgc3RvcmFnZSwgYW5kIHRoZW4KcmV0dXJuaW5nIHRoZSBhZGRyZXNzIG9mIHRoYXQgc3RvcmFnZSBhcyBpZiBpdCB3ZXJlIGEgcG9pbnRlciB2YWx1ZS4KVGhlIGNhbGxlciBtdXN0IGNvcHkgdGhlIGRhdGEgZnJvbSB0aGF0IG1lbW9yeSBhcmVhIHRvIHRoZSBwbGFjZSB3aGVyZQp0aGUgdmFsdWUgaXMgd2FudGVkLiAgVGhpcyBpcyBzbG93ZXIgdGhhbiB0aGUgbWV0aG9kIHVzZWQgYnkgR0NDLCBhbmQKZmFpbHMgdG8gYmUgcmVlbnRyYW50LgoKIE9uIHNvbWUgdGFyZ2V0IG1hY2hpbmVzLCBzdWNoIGFzIFJJU0MgbWFjaGluZXMgYW5kIHRoZSA4MDM4NiwgdGhlCnN0YW5kYXJkIHN5c3RlbSBjb252ZW50aW9uIGlzIHRvIHBhc3MgdG8gdGhlIHN1YnJvdXRpbmUgdGhlIGFkZHJlc3Mgb2YKd2hlcmUgdG8gcmV0dXJuIHRoZSB2YWx1ZS4gIE9uIHRoZXNlIG1hY2hpbmVzLCBHQ0MgaGFzIGJlZW4gY29uZmlndXJlZAp0byBiZSBjb21wYXRpYmxlIHdpdGggdGhlIHN0YW5kYXJkIGNvbXBpbGVyLCB3aGVuIHRoaXMgbWV0aG9kIGlzIHVzZWQuCkl0IG1heSBub3QgYmUgY29tcGF0aWJsZSBmb3Igc3RydWN0dXJlcyBvZiAxLCAyLCA0IG9yIDggYnl0ZXMuCgogR0NDIHVzZXMgdGhlIHN5c3RlbSdzIHN0YW5kYXJkIGNvbnZlbnRpb24gZm9yIHBhc3NpbmcgYXJndW1lbnRzLiAgT24Kc29tZSBtYWNoaW5lcywgdGhlIGZpcnN0IGZldyBhcmd1bWVudHMgYXJlIHBhc3NlZCBpbiByZWdpc3RlcnM7IGluCm90aGVycywgYWxsIGFyZSBwYXNzZWQgb24gdGhlIHN0YWNrLiAgSXQgd291bGQgYmUgcG9zc2libGUgdG8gdXNlCnJlZ2lzdGVycyBmb3IgYXJndW1lbnQgcGFzc2luZyBvbiBhbnkgbWFjaGluZSwgYW5kIHRoaXMgd291bGQgcHJvYmFibHkKcmVzdWx0IGluIGEgc2lnbmlmaWNhbnQgc3BlZWR1cC4gIEJ1dCB0aGUgcmVzdWx0IHdvdWxkIGJlIGNvbXBsZXRlCmluY29tcGF0aWJpbGl0eSB3aXRoIGNvZGUgdGhhdCBmb2xsb3dzIHRoZSBzdGFuZGFyZCBjb252ZW50aW9uLiAgU28gdGhpcwpjaGFuZ2UgaXMgcHJhY3RpY2FsIG9ubHkgaWYgeW91IGFyZSBzd2l0Y2hpbmcgdG8gR0NDIGFzIHRoZSBzb2xlIEMKY29tcGlsZXIgZm9yIHRoZSBzeXN0ZW0uICBXZSBtYXkgaW1wbGVtZW50IHJlZ2lzdGVyIGFyZ3VtZW50IHBhc3Npbmcgb24KY2VydGFpbiBtYWNoaW5lcyBvbmNlIHdlIGhhdmUgYSBjb21wbGV0ZSBHTlUgc3lzdGVtIHNvIHRoYXQgd2UgY2FuCmNvbXBpbGUgdGhlIGxpYnJhcmllcyB3aXRoIEdDQy4KCiBPbiBzb21lIG1hY2hpbmVzIChwYXJ0aWN1bGFybHkgdGhlIFNQQVJDKSwgY2VydGFpbiB0eXBlcyBvZiBhcmd1bWVudHMKYXJlIHBhc3NlZCAiYnkgaW52aXNpYmxlIHJlZmVyZW5jZSIuICBUaGlzIG1lYW5zIHRoYXQgdGhlIHZhbHVlIGlzCnN0b3JlZCBpbiBtZW1vcnksIGFuZCB0aGUgYWRkcmVzcyBvZiB0aGUgbWVtb3J5IGxvY2F0aW9uIGlzIHBhc3NlZCB0bwp0aGUgc3Vicm91dGluZS4KCiBJZiB5b3UgdXNlICdsb25nam1wJywgYmV3YXJlIG9mIGF1dG9tYXRpYyB2YXJpYWJsZXMuICBJU08gQyBzYXlzIHRoYXQKYXV0b21hdGljIHZhcmlhYmxlcyB0aGF0IGFyZSBub3QgZGVjbGFyZWQgJ3ZvbGF0aWxlJyBoYXZlIHVuZGVmaW5lZAp2YWx1ZXMgYWZ0ZXIgYSAnbG9uZ2ptcCcuICBBbmQgdGhpcyBpcyBhbGwgR0NDIHByb21pc2VzIHRvIGRvLCBiZWNhdXNlCml0IGlzIHZlcnkgZGlmZmljdWx0IHRvIHJlc3RvcmUgcmVnaXN0ZXIgdmFyaWFibGVzIGNvcnJlY3RseSwgYW5kIG9uZSBvZgpHQ0MncyBmZWF0dXJlcyBpcyB0aGF0IGl0IGNhbiBwdXQgdmFyaWFibGVzIGluIHJlZ2lzdGVycyB3aXRob3V0IHlvdXIKYXNraW5nIGl0IHRvLgoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IExpYmdjYywgIE5leHQ6IExhbmd1YWdlcywgIFByZXY6IEludGVyZmFjZSwgIFVwOiBUb3AKCjQgVGhlIEdDQyBsb3ctbGV2ZWwgcnVudGltZSBsaWJyYXJ5CioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgpHQ0MgcHJvdmlkZXMgYSBsb3ctbGV2ZWwgcnVudGltZSBsaWJyYXJ5LCAnbGliZ2NjLmEnIG9yICdsaWJnY2Nfcy5zby4xJwpvbiBzb21lIHBsYXRmb3Jtcy4gIEdDQyBnZW5lcmF0ZXMgY2FsbHMgdG8gcm91dGluZXMgaW4gdGhpcyBsaWJyYXJ5CmF1dG9tYXRpY2FsbHksIHdoZW5ldmVyIGl0IG5lZWRzIHRvIHBlcmZvcm0gc29tZSBvcGVyYXRpb24gdGhhdCBpcyB0b28KY29tcGxpY2F0ZWQgdG8gZW1pdCBpbmxpbmUgY29kZSBmb3IuCgogTW9zdCBvZiB0aGUgcm91dGluZXMgaW4gJ2xpYmdjYycgaGFuZGxlIGFyaXRobWV0aWMgb3BlcmF0aW9ucyB0aGF0IHRoZQp0YXJnZXQgcHJvY2Vzc29yIGNhbm5vdCBwZXJmb3JtIGRpcmVjdGx5LiAgVGhpcyBpbmNsdWRlcyBpbnRlZ2VyCm11bHRpcGx5IGFuZCBkaXZpZGUgb24gc29tZSBtYWNoaW5lcywgYW5kIGFsbCBmbG9hdGluZy1wb2ludCBhbmQKZml4ZWQtcG9pbnQgb3BlcmF0aW9ucyBvbiBvdGhlciBtYWNoaW5lcy4gICdsaWJnY2MnIGFsc28gaW5jbHVkZXMKcm91dGluZXMgZm9yIGV4Y2VwdGlvbiBoYW5kbGluZywgYW5kIGEgaGFuZGZ1bCBvZiBtaXNjZWxsYW5lb3VzCm9wZXJhdGlvbnMuCgogU29tZSBvZiB0aGVzZSByb3V0aW5lcyBjYW4gYmUgZGVmaW5lZCBpbiBtb3N0bHkgbWFjaGluZS1pbmRlcGVuZGVudCBDLgpPdGhlcnMgbXVzdCBiZSBoYW5kLXdyaXR0ZW4gaW4gYXNzZW1ibHkgbGFuZ3VhZ2UgZm9yIGVhY2ggcHJvY2Vzc29yIHRoYXQKbmVlZHMgdGhlbS4KCiBHQ0Mgd2lsbCBhbHNvIGdlbmVyYXRlIGNhbGxzIHRvIEMgbGlicmFyeSByb3V0aW5lcywgc3VjaCBhcyAnbWVtY3B5JwphbmQgJ21lbXNldCcsIGluIHNvbWUgY2FzZXMuICBUaGUgc2V0IG9mIHJvdXRpbmVzIHRoYXQgR0NDIG1heSBwb3NzaWJseQp1c2UgaXMgZG9jdW1lbnRlZCBpbiAqbm90ZSAoZ2NjKU90aGVyIEJ1aWx0aW5zOjouCgogVGhlc2Ugcm91dGluZXMgdGFrZSBhcmd1bWVudHMgYW5kIHJldHVybiB2YWx1ZXMgb2YgYSBzcGVjaWZpYyBtYWNoaW5lCm1vZGUsIG5vdCBhIHNwZWNpZmljIEMgdHlwZS4gICpOb3RlIE1hY2hpbmUgTW9kZXM6OiwgZm9yIGFuIGV4cGxhbmF0aW9uCm9mIHRoaXMgY29uY2VwdC4gIEZvciBpbGx1c3RyYXRpdmUgcHVycG9zZXMsIGluIHRoaXMgY2hhcHRlciB0aGUKZmxvYXRpbmcgcG9pbnQgdHlwZSAnZmxvYXQnIGlzIGFzc3VtZWQgdG8gY29ycmVzcG9uZCB0byAnU0Ztb2RlJzsKJ2RvdWJsZScgdG8gJ0RGbW9kZSc7IGFuZCAnbG9uZyBkb3VibGUnIHRvIGJvdGggJ1RGbW9kZScgYW5kICdYRm1vZGUnLgpTaW1pbGFybHksIHRoZSBpbnRlZ2VyIHR5cGVzICdpbnQnIGFuZCAndW5zaWduZWQgaW50JyBjb3JyZXNwb25kIHRvCidTSW1vZGUnOyAnbG9uZycgYW5kICd1bnNpZ25lZCBsb25nJyB0byAnREltb2RlJzsgYW5kICdsb25nIGxvbmcnIGFuZAondW5zaWduZWQgbG9uZyBsb25nJyB0byAnVEltb2RlJy4KCiogTWVudToKCiogSW50ZWdlciBsaWJyYXJ5IHJvdXRpbmVzOjoKKiBTb2Z0IGZsb2F0IGxpYnJhcnkgcm91dGluZXM6OgoqIERlY2ltYWwgZmxvYXQgbGlicmFyeSByb3V0aW5lczo6CiogRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzOjoKKiBFeGNlcHRpb24gaGFuZGxpbmcgcm91dGluZXM6OgoqIE1pc2NlbGxhbmVvdXMgcm91dGluZXM6OgoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IEludGVnZXIgbGlicmFyeSByb3V0aW5lcywgIE5leHQ6IFNvZnQgZmxvYXQgbGlicmFyeSByb3V0aW5lcywgIFVwOiBMaWJnY2MKCjQuMSBSb3V0aW5lcyBmb3IgaW50ZWdlciBhcml0aG1ldGljCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpUaGUgaW50ZWdlciBhcml0aG1ldGljIHJvdXRpbmVzIGFyZSB1c2VkIG9uIHBsYXRmb3JtcyB0aGF0IGRvbid0IHByb3ZpZGUKaGFyZHdhcmUgc3VwcG9ydCBmb3IgYXJpdGhtZXRpYyBvcGVyYXRpb25zIG9uIHNvbWUgbW9kZXMuCgo0LjEuMSBBcml0aG1ldGljIGZ1bmN0aW9ucwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGludCBfX2FzaGxzaTMgKGludCBBLCBpbnQgQikKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgX19hc2hsZGkzIChsb25nIEEsIGludCBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBsb25nIF9fYXNobHRpMyAobG9uZyBsb25nIEEsIGludCBCKQogICAgIFRoZXNlIGZ1bmN0aW9ucyByZXR1cm4gdGhlIHJlc3VsdCBvZiBzaGlmdGluZyBBIGxlZnQgYnkgQiBiaXRzLgoKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGludCBfX2FzaHJzaTMgKGludCBBLCBpbnQgQikKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgX19hc2hyZGkzIChsb25nIEEsIGludCBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBsb25nIF9fYXNocnRpMyAobG9uZyBsb25nIEEsIGludCBCKQogICAgIFRoZXNlIGZ1bmN0aW9ucyByZXR1cm4gdGhlIHJlc3VsdCBvZiBhcml0aG1ldGljYWxseSBzaGlmdGluZyBBCiAgICAgcmlnaHQgYnkgQiBiaXRzLgoKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGludCBfX2RpdnNpMyAoaW50IEEsIGludCBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBfX2RpdmRpMyAobG9uZyBBLCBsb25nIEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGxvbmcgX19kaXZ0aTMgKGxvbmcgbG9uZyBBLCBsb25nIGxvbmcgQikKICAgICBUaGVzZSBmdW5jdGlvbnMgcmV0dXJuIHRoZSBxdW90aWVudCBvZiB0aGUgc2lnbmVkIGRpdmlzaW9uIG9mIEEgYW5kCiAgICAgQi4KCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBpbnQgX19sc2hyc2kzIChpbnQgQSwgaW50IEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIF9fbHNocmRpMyAobG9uZyBBLCBpbnQgQikKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgbG9uZyBfX2xzaHJ0aTMgKGxvbmcgbG9uZyBBLCBpbnQgQikKICAgICBUaGVzZSBmdW5jdGlvbnMgcmV0dXJuIHRoZSByZXN1bHQgb2YgbG9naWNhbGx5IHNoaWZ0aW5nIEEgcmlnaHQgYnkKICAgICBCIGJpdHMuCgogLS0gUnVudGltZSBGdW5jdGlvbjogaW50IF9fbW9kc2kzIChpbnQgQSwgaW50IEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIF9fbW9kZGkzIChsb25nIEEsIGxvbmcgQikKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgbG9uZyBfX21vZHRpMyAobG9uZyBsb25nIEEsIGxvbmcgbG9uZyBCKQogICAgIFRoZXNlIGZ1bmN0aW9ucyByZXR1cm4gdGhlIHJlbWFpbmRlciBvZiB0aGUgc2lnbmVkIGRpdmlzaW9uIG9mIEEKICAgICBhbmQgQi4KCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBpbnQgX19tdWxzaTMgKGludCBBLCBpbnQgQikKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgX19tdWxkaTMgKGxvbmcgQSwgbG9uZyBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBsb25nIF9fbXVsdGkzIChsb25nIGxvbmcgQSwgbG9uZyBsb25nIEIpCiAgICAgVGhlc2UgZnVuY3Rpb25zIHJldHVybiB0aGUgcHJvZHVjdCBvZiBBIGFuZCBCLgoKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgX19uZWdkaTIgKGxvbmcgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgbG9uZyBfX25lZ3RpMiAobG9uZyBsb25nIEEpCiAgICAgVGhlc2UgZnVuY3Rpb25zIHJldHVybiB0aGUgbmVnYXRpb24gb2YgQS4KCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBpbnQgX191ZGl2c2kzICh1bnNpZ25lZCBpbnQgQSwgdW5zaWduZWQKICAgICAgICAgIGludCBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBfX3VkaXZkaTMgKHVuc2lnbmVkIGxvbmcgQSwgdW5zaWduZWQKICAgICAgICAgIGxvbmcgQikKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGxvbmcgbG9uZyBfX3VkaXZ0aTMgKHVuc2lnbmVkIGxvbmcgbG9uZwogICAgICAgICAgQSwgdW5zaWduZWQgbG9uZyBsb25nIEIpCiAgICAgVGhlc2UgZnVuY3Rpb25zIHJldHVybiB0aGUgcXVvdGllbnQgb2YgdGhlIHVuc2lnbmVkIGRpdmlzaW9uIG9mIEEKICAgICBhbmQgQi4KCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIF9fdWRpdm1vZGRpMyAodW5zaWduZWQgbG9uZyBBLAogICAgICAgICAgdW5zaWduZWQgbG9uZyBCLCB1bnNpZ25lZCBsb25nICpDKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBsb25nIF9fdWRpdnRpMyAodW5zaWduZWQgbG9uZyBsb25nCiAgICAgICAgICBBLCB1bnNpZ25lZCBsb25nIGxvbmcgQiwgdW5zaWduZWQgbG9uZyBsb25nICpDKQogICAgIFRoZXNlIGZ1bmN0aW9ucyBjYWxjdWxhdGUgYm90aCB0aGUgcXVvdGllbnQgYW5kIHJlbWFpbmRlciBvZiB0aGUKICAgICB1bnNpZ25lZCBkaXZpc2lvbiBvZiBBIGFuZCBCLiAgVGhlIHJldHVybiB2YWx1ZSBpcyB0aGUgcXVvdGllbnQsCiAgICAgYW5kIHRoZSByZW1haW5kZXIgaXMgcGxhY2VkIGluIHZhcmlhYmxlIHBvaW50ZWQgdG8gYnkgQy4KCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBpbnQgX191bW9kc2kzICh1bnNpZ25lZCBpbnQgQSwgdW5zaWduZWQKICAgICAgICAgIGludCBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBfX3Vtb2RkaTMgKHVuc2lnbmVkIGxvbmcgQSwgdW5zaWduZWQKICAgICAgICAgIGxvbmcgQikKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGxvbmcgbG9uZyBfX3Vtb2R0aTMgKHVuc2lnbmVkIGxvbmcgbG9uZwogICAgICAgICAgQSwgdW5zaWduZWQgbG9uZyBsb25nIEIpCiAgICAgVGhlc2UgZnVuY3Rpb25zIHJldHVybiB0aGUgcmVtYWluZGVyIG9mIHRoZSB1bnNpZ25lZCBkaXZpc2lvbiBvZiBBCiAgICAgYW5kIEIuCgo0LjEuMiBDb21wYXJpc29uIGZ1bmN0aW9ucwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgaW1wbGVtZW50IGludGVncmFsIGNvbXBhcmlzb25zLiAgVGhlc2UgZnVuY3Rpb25zCmltcGxlbWVudCBhIGxvdy1sZXZlbCBjb21wYXJlLCB1cG9uIHdoaWNoIHRoZSBoaWdoZXIgbGV2ZWwgY29tcGFyaXNvbgpvcGVyYXRvcnMgKHN1Y2ggYXMgbGVzcyB0aGFuIGFuZCBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8pIGNhbiBiZQpjb25zdHJ1Y3RlZC4gIFRoZSByZXR1cm5lZCB2YWx1ZXMgbGllIGluIHRoZSByYW5nZSB6ZXJvIHRvIHR3bywgdG8gYWxsb3cKdGhlIGhpZ2gtbGV2ZWwgb3BlcmF0b3JzIHRvIGJlIGltcGxlbWVudGVkIGJ5IHRlc3RpbmcgdGhlIHJldHVybmVkCnJlc3VsdCB1c2luZyBlaXRoZXIgc2lnbmVkIG9yIHVuc2lnbmVkIGNvbXBhcmlzb24uCgogLS0gUnVudGltZSBGdW5jdGlvbjogaW50IF9fY21wZGkyIChsb25nIEEsIGxvbmcgQikKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGludCBfX2NtcHRpMiAobG9uZyBsb25nIEEsIGxvbmcgbG9uZyBCKQogICAgIFRoZXNlIGZ1bmN0aW9ucyBwZXJmb3JtIGEgc2lnbmVkIGNvbXBhcmlzb24gb2YgQSBhbmQgQi4gIElmIEEgaXMKICAgICBsZXNzIHRoYW4gQiwgdGhleSByZXR1cm4gMDsgaWYgQSBpcyBncmVhdGVyIHRoYW4gQiwgdGhleSByZXR1cm4gMjsKICAgICBhbmQgaWYgQSBhbmQgQiBhcmUgZXF1YWwgdGhleSByZXR1cm4gMS4KCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBpbnQgX191Y21wZGkyICh1bnNpZ25lZCBsb25nIEEsIHVuc2lnbmVkIGxvbmcgQikKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGludCBfX3VjbXB0aTIgKHVuc2lnbmVkIGxvbmcgbG9uZyBBLCB1bnNpZ25lZCBsb25nCiAgICAgICAgICBsb25nIEIpCiAgICAgVGhlc2UgZnVuY3Rpb25zIHBlcmZvcm0gYW4gdW5zaWduZWQgY29tcGFyaXNvbiBvZiBBIGFuZCBCLiAgSWYgQSBpcwogICAgIGxlc3MgdGhhbiBCLCB0aGV5IHJldHVybiAwOyBpZiBBIGlzIGdyZWF0ZXIgdGhhbiBCLCB0aGV5IHJldHVybiAyOwogICAgIGFuZCBpZiBBIGFuZCBCIGFyZSBlcXVhbCB0aGV5IHJldHVybiAxLgoKNC4xLjMgVHJhcHBpbmcgYXJpdGhtZXRpYyBmdW5jdGlvbnMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KClRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGltcGxlbWVudCB0cmFwcGluZyBhcml0aG1ldGljLiAgVGhlc2UgZnVuY3Rpb25zCmNhbGwgdGhlIGxpYmMgZnVuY3Rpb24gJ2Fib3J0JyB1cG9uIHNpZ25lZCBhcml0aG1ldGljIG92ZXJmbG93LgoKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGludCBfX2Fic3ZzaTIgKGludCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBfX2Fic3ZkaTIgKGxvbmcgQSkKICAgICBUaGVzZSBmdW5jdGlvbnMgcmV0dXJuIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiBBLgoKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGludCBfX2FkZHZzaTMgKGludCBBLCBpbnQgQikKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgX19hZGR2ZGkzIChsb25nIEEsIGxvbmcgQikKICAgICBUaGVzZSBmdW5jdGlvbnMgcmV0dXJuIHRoZSBzdW0gb2YgQSBhbmQgQjsgdGhhdCBpcyAnQSArIEInLgoKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGludCBfX211bHZzaTMgKGludCBBLCBpbnQgQikKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgX19tdWx2ZGkzIChsb25nIEEsIGxvbmcgQikKICAgICBUaGUgZnVuY3Rpb25zIHJldHVybiB0aGUgcHJvZHVjdCBvZiBBIGFuZCBCOyB0aGF0IGlzICdBICogQicuCgogLS0gUnVudGltZSBGdW5jdGlvbjogaW50IF9fbmVndnNpMiAoaW50IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIF9fbmVndmRpMiAobG9uZyBBKQogICAgIFRoZXNlIGZ1bmN0aW9ucyByZXR1cm4gdGhlIG5lZ2F0aW9uIG9mIEE7IHRoYXQgaXMgJy1BJy4KCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBpbnQgX19zdWJ2c2kzIChpbnQgQSwgaW50IEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIF9fc3VidmRpMyAobG9uZyBBLCBsb25nIEIpCiAgICAgVGhlc2UgZnVuY3Rpb25zIHJldHVybiB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIEIgYW5kIEE7IHRoYXQgaXMgJ0EgLQogICAgIEInLgoKNC4xLjQgQml0IG9wZXJhdGlvbnMKLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBpbnQgX19jbHpzaTIgKGludCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogaW50IF9fY2x6ZGkyIChsb25nIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBpbnQgX19jbHp0aTIgKGxvbmcgbG9uZyBBKQogICAgIFRoZXNlIGZ1bmN0aW9ucyByZXR1cm4gdGhlIG51bWJlciBvZiBsZWFkaW5nIDAtYml0cyBpbiBBLCBzdGFydGluZwogICAgIGF0IHRoZSBtb3N0IHNpZ25pZmljYW50IGJpdCBwb3NpdGlvbi4gIElmIEEgaXMgemVybywgdGhlIHJlc3VsdCBpcwogICAgIHVuZGVmaW5lZC4KCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBpbnQgX19jdHpzaTIgKGludCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogaW50IF9fY3R6ZGkyIChsb25nIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBpbnQgX19jdHp0aTIgKGxvbmcgbG9uZyBBKQogICAgIFRoZXNlIGZ1bmN0aW9ucyByZXR1cm4gdGhlIG51bWJlciBvZiB0cmFpbGluZyAwLWJpdHMgaW4gQSwgc3RhcnRpbmcKICAgICBhdCB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0IHBvc2l0aW9uLiAgSWYgQSBpcyB6ZXJvLCB0aGUgcmVzdWx0IGlzCiAgICAgdW5kZWZpbmVkLgoKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGludCBfX2Zmc2RpMiAobG9uZyBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogaW50IF9fZmZzdGkyIChsb25nIGxvbmcgQSkKICAgICBUaGVzZSBmdW5jdGlvbnMgcmV0dXJuIHRoZSBpbmRleCBvZiB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgMS1iaXQgaW4KICAgICBBLCBvciB0aGUgdmFsdWUgemVybyBpZiBBIGlzIHplcm8uICBUaGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0IGlzCiAgICAgaW5kZXggb25lLgoKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGludCBfX3Bhcml0eXNpMiAoaW50IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBpbnQgX19wYXJpdHlkaTIgKGxvbmcgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGludCBfX3Bhcml0eXRpMiAobG9uZyBsb25nIEEpCiAgICAgVGhlc2UgZnVuY3Rpb25zIHJldHVybiB0aGUgdmFsdWUgemVybyBpZiB0aGUgbnVtYmVyIG9mIGJpdHMgc2V0IGluCiAgICAgQSBpcyBldmVuLCBhbmQgdGhlIHZhbHVlIG9uZSBvdGhlcndpc2UuCgogLS0gUnVudGltZSBGdW5jdGlvbjogaW50IF9fcG9wY291bnRzaTIgKGludCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogaW50IF9fcG9wY291bnRkaTIgKGxvbmcgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGludCBfX3BvcGNvdW50dGkyIChsb25nIGxvbmcgQSkKICAgICBUaGVzZSBmdW5jdGlvbnMgcmV0dXJuIHRoZSBudW1iZXIgb2YgYml0cyBzZXQgaW4gQS4KCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBpbnQzMl90IF9fYnN3YXBzaTIgKGludDMyX3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGludDY0X3QgX19ic3dhcGRpMiAoaW50NjRfdCBBKQogICAgIFRoZXNlIGZ1bmN0aW9ucyByZXR1cm4gdGhlIEEgYnl0ZXN3YXBwZWQuCgofCkZpbGU6IGdjY2ludC5pbmZvLCAgTm9kZTogU29mdCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLCAgTmV4dDogRGVjaW1hbCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLCAgUHJldjogSW50ZWdlciBsaWJyYXJ5IHJvdXRpbmVzLCAgVXA6IExpYmdjYwoKNC4yIFJvdXRpbmVzIGZvciBmbG9hdGluZyBwb2ludCBlbXVsYXRpb24KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KClRoZSBzb2Z0d2FyZSBmbG9hdGluZyBwb2ludCBsaWJyYXJ5IGlzIHVzZWQgb24gbWFjaGluZXMgd2hpY2ggZG8gbm90CmhhdmUgaGFyZHdhcmUgc3VwcG9ydCBmb3IgZmxvYXRpbmcgcG9pbnQuICBJdCBpcyBhbHNvIHVzZWQgd2hlbmV2ZXIKJy1tc29mdC1mbG9hdCcgaXMgdXNlZCB0byBkaXNhYmxlIGdlbmVyYXRpb24gb2YgZmxvYXRpbmcgcG9pbnQKaW5zdHJ1Y3Rpb25zLiAgKE5vdCBhbGwgdGFyZ2V0cyBzdXBwb3J0IHRoaXMgc3dpdGNoLikKCiBGb3IgY29tcGF0aWJpbGl0eSB3aXRoIG90aGVyIGNvbXBpbGVycywgdGhlIGZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgpyb3V0aW5lcyBjYW4gYmUgcmVuYW1lZCB3aXRoIHRoZSAnREVDTEFSRV9MSUJSQVJZX1JFTkFNRVMnIG1hY3JvICgqbm90ZQpMaWJyYXJ5IENhbGxzOjopLiAgSW4gdGhpcyBzZWN0aW9uLCB0aGUgZGVmYXVsdCBuYW1lcyBhcmUgdXNlZC4KCiBQcmVzZW50bHkgdGhlIGxpYnJhcnkgZG9lcyBub3Qgc3VwcG9ydCAnWEZtb2RlJywgd2hpY2ggaXMgdXNlZCBmb3IKJ2xvbmcgZG91YmxlJyBvbiBzb21lIGFyY2hpdGVjdHVyZXMuCgo0LjIuMSBBcml0aG1ldGljIGZ1bmN0aW9ucwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGZsb2F0IF9fYWRkc2YzIChmbG9hdCBBLCBmbG9hdCBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogZG91YmxlIF9fYWRkZGYzIChkb3VibGUgQSwgZG91YmxlIEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGRvdWJsZSBfX2FkZHRmMyAobG9uZyBkb3VibGUgQSwgbG9uZyBkb3VibGUKICAgICAgICAgIEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGRvdWJsZSBfX2FkZHhmMyAobG9uZyBkb3VibGUgQSwgbG9uZyBkb3VibGUKICAgICAgICAgIEIpCiAgICAgVGhlc2UgZnVuY3Rpb25zIHJldHVybiB0aGUgc3VtIG9mIEEgYW5kIEIuCgogLS0gUnVudGltZSBGdW5jdGlvbjogZmxvYXQgX19zdWJzZjMgKGZsb2F0IEEsIGZsb2F0IEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBkb3VibGUgX19zdWJkZjMgKGRvdWJsZSBBLCBkb3VibGUgQikKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgZG91YmxlIF9fc3VidGYzIChsb25nIGRvdWJsZSBBLCBsb25nIGRvdWJsZQogICAgICAgICAgQikKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgZG91YmxlIF9fc3VieGYzIChsb25nIGRvdWJsZSBBLCBsb25nIGRvdWJsZQogICAgICAgICAgQikKICAgICBUaGVzZSBmdW5jdGlvbnMgcmV0dXJuIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gQiBhbmQgQTsgdGhhdCBpcywKICAgICBBIC0gQi4KCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBmbG9hdCBfX211bHNmMyAoZmxvYXQgQSwgZmxvYXQgQikKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGRvdWJsZSBfX211bGRmMyAoZG91YmxlIEEsIGRvdWJsZSBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBkb3VibGUgX19tdWx0ZjMgKGxvbmcgZG91YmxlIEEsIGxvbmcgZG91YmxlCiAgICAgICAgICBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBkb3VibGUgX19tdWx4ZjMgKGxvbmcgZG91YmxlIEEsIGxvbmcgZG91YmxlCiAgICAgICAgICBCKQogICAgIFRoZXNlIGZ1bmN0aW9ucyByZXR1cm4gdGhlIHByb2R1Y3Qgb2YgQSBhbmQgQi4KCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBmbG9hdCBfX2RpdnNmMyAoZmxvYXQgQSwgZmxvYXQgQikKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGRvdWJsZSBfX2RpdmRmMyAoZG91YmxlIEEsIGRvdWJsZSBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBkb3VibGUgX19kaXZ0ZjMgKGxvbmcgZG91YmxlIEEsIGxvbmcgZG91YmxlCiAgICAgICAgICBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBkb3VibGUgX19kaXZ4ZjMgKGxvbmcgZG91YmxlIEEsIGxvbmcgZG91YmxlCiAgICAgICAgICBCKQogICAgIFRoZXNlIGZ1bmN0aW9ucyByZXR1cm4gdGhlIHF1b3RpZW50IG9mIEEgYW5kIEI7IHRoYXQgaXMsIEEgLyBCLgoKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGZsb2F0IF9fbmVnc2YyIChmbG9hdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogZG91YmxlIF9fbmVnZGYyIChkb3VibGUgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgZG91YmxlIF9fbmVndGYyIChsb25nIGRvdWJsZSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBkb3VibGUgX19uZWd4ZjIgKGxvbmcgZG91YmxlIEEpCiAgICAgVGhlc2UgZnVuY3Rpb25zIHJldHVybiB0aGUgbmVnYXRpb24gb2YgQS4gIFRoZXkgc2ltcGx5IGZsaXAgdGhlCiAgICAgc2lnbiBiaXQsIHNvIHRoZXkgY2FuIHByb2R1Y2UgbmVnYXRpdmUgemVybyBhbmQgbmVnYXRpdmUgTmFOLgoKNC4yLjIgQ29udmVyc2lvbiBmdW5jdGlvbnMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBkb3VibGUgX19leHRlbmRzZmRmMiAoZmxvYXQgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgZG91YmxlIF9fZXh0ZW5kc2Z0ZjIgKGZsb2F0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGRvdWJsZSBfX2V4dGVuZHNmeGYyIChmbG9hdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBkb3VibGUgX19leHRlbmRkZnRmMiAoZG91YmxlIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGRvdWJsZSBfX2V4dGVuZGRmeGYyIChkb3VibGUgQSkKICAgICBUaGVzZSBmdW5jdGlvbnMgZXh0ZW5kIEEgdG8gdGhlIHdpZGVyIG1vZGUgb2YgdGhlaXIgcmV0dXJuIHR5cGUuCgogLS0gUnVudGltZSBGdW5jdGlvbjogZG91YmxlIF9fdHJ1bmN4ZmRmMiAobG9uZyBkb3VibGUgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGRvdWJsZSBfX3RydW5jdGZkZjIgKGxvbmcgZG91YmxlIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBmbG9hdCBfX3RydW5jeGZzZjIgKGxvbmcgZG91YmxlIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBmbG9hdCBfX3RydW5jdGZzZjIgKGxvbmcgZG91YmxlIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBmbG9hdCBfX3RydW5jZGZzZjIgKGRvdWJsZSBBKQogICAgIFRoZXNlIGZ1bmN0aW9ucyB0cnVuY2F0ZSBBIHRvIHRoZSBuYXJyb3dlciBtb2RlIG9mIHRoZWlyIHJldHVybgogICAgIHR5cGUsIHJvdW5kaW5nIHRvd2FyZCB6ZXJvLgoKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGludCBfX2ZpeHNmc2kgKGZsb2F0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBpbnQgX19maXhkZnNpIChkb3VibGUgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGludCBfX2ZpeHRmc2kgKGxvbmcgZG91YmxlIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBpbnQgX19maXh4ZnNpIChsb25nIGRvdWJsZSBBKQogICAgIFRoZXNlIGZ1bmN0aW9ucyBjb252ZXJ0IEEgdG8gYSBzaWduZWQgaW50ZWdlciwgcm91bmRpbmcgdG93YXJkCiAgICAgemVyby4KCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIF9fZml4c2ZkaSAoZmxvYXQgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgX19maXhkZmRpIChkb3VibGUgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgX19maXh0ZmRpIChsb25nIGRvdWJsZSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBfX2ZpeHhmZGkgKGxvbmcgZG91YmxlIEEpCiAgICAgVGhlc2UgZnVuY3Rpb25zIGNvbnZlcnQgQSB0byBhIHNpZ25lZCBsb25nLCByb3VuZGluZyB0b3dhcmQgemVyby4KCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGxvbmcgX19maXhzZnRpIChmbG9hdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBsb25nIF9fZml4ZGZ0aSAoZG91YmxlIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGxvbmcgX19maXh0ZnRpIChsb25nIGRvdWJsZSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBsb25nIF9fZml4eGZ0aSAobG9uZyBkb3VibGUgQSkKICAgICBUaGVzZSBmdW5jdGlvbnMgY29udmVydCBBIHRvIGEgc2lnbmVkIGxvbmcgbG9uZywgcm91bmRpbmcgdG93YXJkCiAgICAgemVyby4KCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBpbnQgX19maXh1bnNzZnNpIChmbG9hdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgaW50IF9fZml4dW5zZGZzaSAoZG91YmxlIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBpbnQgX19maXh1bnN0ZnNpIChsb25nIGRvdWJsZSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgaW50IF9fZml4dW5zeGZzaSAobG9uZyBkb3VibGUgQSkKICAgICBUaGVzZSBmdW5jdGlvbnMgY29udmVydCBBIHRvIGFuIHVuc2lnbmVkIGludGVnZXIsIHJvdW5kaW5nIHRvd2FyZAogICAgIHplcm8uICBOZWdhdGl2ZSB2YWx1ZXMgYWxsIGJlY29tZSB6ZXJvLgoKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGxvbmcgX19maXh1bnNzZmRpIChmbG9hdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBfX2ZpeHVuc2RmZGkgKGRvdWJsZSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBfX2ZpeHVuc3RmZGkgKGxvbmcgZG91YmxlIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIF9fZml4dW5zeGZkaSAobG9uZyBkb3VibGUgQSkKICAgICBUaGVzZSBmdW5jdGlvbnMgY29udmVydCBBIHRvIGFuIHVuc2lnbmVkIGxvbmcsIHJvdW5kaW5nIHRvd2FyZAogICAgIHplcm8uICBOZWdhdGl2ZSB2YWx1ZXMgYWxsIGJlY29tZSB6ZXJvLgoKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGxvbmcgbG9uZyBfX2ZpeHVuc3NmdGkgKGZsb2F0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGxvbmcgX19maXh1bnNkZnRpIChkb3VibGUgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGxvbmcgbG9uZyBfX2ZpeHVuc3RmdGkgKGxvbmcgZG91YmxlIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGxvbmcgX19maXh1bnN4ZnRpIChsb25nIGRvdWJsZSBBKQogICAgIFRoZXNlIGZ1bmN0aW9ucyBjb252ZXJ0IEEgdG8gYW4gdW5zaWduZWQgbG9uZyBsb25nLCByb3VuZGluZyB0b3dhcmQKICAgICB6ZXJvLiAgTmVnYXRpdmUgdmFsdWVzIGFsbCBiZWNvbWUgemVyby4KCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBmbG9hdCBfX2Zsb2F0c2lzZiAoaW50IEkpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBkb3VibGUgX19mbG9hdHNpZGYgKGludCBJKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBkb3VibGUgX19mbG9hdHNpdGYgKGludCBJKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBkb3VibGUgX19mbG9hdHNpeGYgKGludCBJKQogICAgIFRoZXNlIGZ1bmN0aW9ucyBjb252ZXJ0IEksIGEgc2lnbmVkIGludGVnZXIsIHRvIGZsb2F0aW5nIHBvaW50LgoKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGZsb2F0IF9fZmxvYXRkaXNmIChsb25nIEkpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBkb3VibGUgX19mbG9hdGRpZGYgKGxvbmcgSSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgZG91YmxlIF9fZmxvYXRkaXRmIChsb25nIEkpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGRvdWJsZSBfX2Zsb2F0ZGl4ZiAobG9uZyBJKQogICAgIFRoZXNlIGZ1bmN0aW9ucyBjb252ZXJ0IEksIGEgc2lnbmVkIGxvbmcsIHRvIGZsb2F0aW5nIHBvaW50LgoKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGZsb2F0IF9fZmxvYXR0aXNmIChsb25nIGxvbmcgSSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGRvdWJsZSBfX2Zsb2F0dGlkZiAobG9uZyBsb25nIEkpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGRvdWJsZSBfX2Zsb2F0dGl0ZiAobG9uZyBsb25nIEkpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGRvdWJsZSBfX2Zsb2F0dGl4ZiAobG9uZyBsb25nIEkpCiAgICAgVGhlc2UgZnVuY3Rpb25zIGNvbnZlcnQgSSwgYSBzaWduZWQgbG9uZyBsb25nLCB0byBmbG9hdGluZyBwb2ludC4KCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBmbG9hdCBfX2Zsb2F0dW5zaXNmICh1bnNpZ25lZCBpbnQgSSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGRvdWJsZSBfX2Zsb2F0dW5zaWRmICh1bnNpZ25lZCBpbnQgSSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgZG91YmxlIF9fZmxvYXR1bnNpdGYgKHVuc2lnbmVkIGludCBJKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBkb3VibGUgX19mbG9hdHVuc2l4ZiAodW5zaWduZWQgaW50IEkpCiAgICAgVGhlc2UgZnVuY3Rpb25zIGNvbnZlcnQgSSwgYW4gdW5zaWduZWQgaW50ZWdlciwgdG8gZmxvYXRpbmcgcG9pbnQuCgogLS0gUnVudGltZSBGdW5jdGlvbjogZmxvYXQgX19mbG9hdHVuZGlzZiAodW5zaWduZWQgbG9uZyBJKQogLS0gUnVudGltZSBGdW5jdGlvbjogZG91YmxlIF9fZmxvYXR1bmRpZGYgKHVuc2lnbmVkIGxvbmcgSSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgZG91YmxlIF9fZmxvYXR1bmRpdGYgKHVuc2lnbmVkIGxvbmcgSSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgZG91YmxlIF9fZmxvYXR1bmRpeGYgKHVuc2lnbmVkIGxvbmcgSSkKICAgICBUaGVzZSBmdW5jdGlvbnMgY29udmVydCBJLCBhbiB1bnNpZ25lZCBsb25nLCB0byBmbG9hdGluZyBwb2ludC4KCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBmbG9hdCBfX2Zsb2F0dW50aXNmICh1bnNpZ25lZCBsb25nIGxvbmcgSSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGRvdWJsZSBfX2Zsb2F0dW50aWRmICh1bnNpZ25lZCBsb25nIGxvbmcgSSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgZG91YmxlIF9fZmxvYXR1bnRpdGYgKHVuc2lnbmVkIGxvbmcgbG9uZyBJKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBkb3VibGUgX19mbG9hdHVudGl4ZiAodW5zaWduZWQgbG9uZyBsb25nIEkpCiAgICAgVGhlc2UgZnVuY3Rpb25zIGNvbnZlcnQgSSwgYW4gdW5zaWduZWQgbG9uZyBsb25nLCB0byBmbG9hdGluZwogICAgIHBvaW50LgoKNC4yLjMgQ29tcGFyaXNvbiBmdW5jdGlvbnMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KClRoZXJlIGFyZSB0d28gc2V0cyBvZiBiYXNpYyBjb21wYXJpc29uIGZ1bmN0aW9ucy4KCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBpbnQgX19jbXBzZjIgKGZsb2F0IEEsIGZsb2F0IEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBpbnQgX19jbXBkZjIgKGRvdWJsZSBBLCBkb3VibGUgQikKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGludCBfX2NtcHRmMiAobG9uZyBkb3VibGUgQSwgbG9uZyBkb3VibGUgQikKICAgICBUaGVzZSBmdW5jdGlvbnMgY2FsY3VsYXRlIGEgPD0+IGIuICBUaGF0IGlzLCBpZiBBIGlzIGxlc3MgdGhhbiBCLAogICAgIHRoZXkgcmV0dXJuIC0xOyBpZiBBIGlzIGdyZWF0ZXIgdGhhbiBCLCB0aGV5IHJldHVybiAxOyBhbmQgaWYgQSBhbmQKICAgICBCIGFyZSBlcXVhbCB0aGV5IHJldHVybiAwLiAgSWYgZWl0aGVyIGFyZ3VtZW50IGlzIE5hTiB0aGV5IHJldHVybgogICAgIDEsIGJ1dCB5b3Ugc2hvdWxkIG5vdCByZWx5IG9uIHRoaXM7IGlmIE5hTiBpcyBhIHBvc3NpYmlsaXR5LCB1c2UKICAgICBvbmUgb2YgdGhlIGhpZ2hlci1sZXZlbCBjb21wYXJpc29uIGZ1bmN0aW9ucy4KCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBpbnQgX191bm9yZHNmMiAoZmxvYXQgQSwgZmxvYXQgQikKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGludCBfX3Vub3JkZGYyIChkb3VibGUgQSwgZG91YmxlIEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBpbnQgX191bm9yZHRmMiAobG9uZyBkb3VibGUgQSwgbG9uZyBkb3VibGUgQikKICAgICBUaGVzZSBmdW5jdGlvbnMgcmV0dXJuIGEgbm9uemVybyB2YWx1ZSBpZiBlaXRoZXIgYXJndW1lbnQgaXMgTmFOLAogICAgIG90aGVyd2lzZSAwLgoKIFRoZXJlIGlzIGFsc28gYSBjb21wbGV0ZSBncm91cCBvZiBoaWdoZXIgbGV2ZWwgZnVuY3Rpb25zIHdoaWNoCmNvcnJlc3BvbmQgZGlyZWN0bHkgdG8gY29tcGFyaXNvbiBvcGVyYXRvcnMuICBUaGV5IGltcGxlbWVudCB0aGUgSVNPIEMKc2VtYW50aWNzIGZvciBmbG9hdGluZy1wb2ludCBjb21wYXJpc29ucywgdGFraW5nIE5hTiBpbnRvIGFjY291bnQuICBQYXkKY2FyZWZ1bCBhdHRlbnRpb24gdG8gdGhlIHJldHVybiB2YWx1ZXMgZGVmaW5lZCBmb3IgZWFjaCBzZXQuICBVbmRlciB0aGUKaG9vZCwgYWxsIG9mIHRoZXNlIHJvdXRpbmVzIGFyZSBpbXBsZW1lbnRlZCBhcwoKICAgICAgIGlmIChfX3Vub3JkWGYyIChhLCBiKSkKICAgICAgICAgcmV0dXJuIEU7CiAgICAgICByZXR1cm4gX19jbXBYZjIgKGEsIGIpOwoKd2hlcmUgRSBpcyBhIGNvbnN0YW50IGNob3NlbiB0byBnaXZlIHRoZSBwcm9wZXIgYmVoYXZpb3IgZm9yIE5hTi4gIFRodXMsCnRoZSBtZWFuaW5nIG9mIHRoZSByZXR1cm4gdmFsdWUgaXMgZGlmZmVyZW50IGZvciBlYWNoIHNldC4gIERvIG5vdCByZWx5Cm9uIHRoaXMgaW1wbGVtZW50YXRpb247IG9ubHkgdGhlIHNlbWFudGljcyBkb2N1bWVudGVkIGJlbG93IGFyZQpndWFyYW50ZWVkLgoKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGludCBfX2Vxc2YyIChmbG9hdCBBLCBmbG9hdCBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogaW50IF9fZXFkZjIgKGRvdWJsZSBBLCBkb3VibGUgQikKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGludCBfX2VxdGYyIChsb25nIGRvdWJsZSBBLCBsb25nIGRvdWJsZSBCKQogICAgIFRoZXNlIGZ1bmN0aW9ucyByZXR1cm4gemVybyBpZiBuZWl0aGVyIGFyZ3VtZW50IGlzIE5hTiwgYW5kIEEgYW5kIEIKICAgICBhcmUgZXF1YWwuCgogLS0gUnVudGltZSBGdW5jdGlvbjogaW50IF9fbmVzZjIgKGZsb2F0IEEsIGZsb2F0IEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBpbnQgX19uZWRmMiAoZG91YmxlIEEsIGRvdWJsZSBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogaW50IF9fbmV0ZjIgKGxvbmcgZG91YmxlIEEsIGxvbmcgZG91YmxlIEIpCiAgICAgVGhlc2UgZnVuY3Rpb25zIHJldHVybiBhIG5vbnplcm8gdmFsdWUgaWYgZWl0aGVyIGFyZ3VtZW50IGlzIE5hTiwKICAgICBvciBpZiBBIGFuZCBCIGFyZSB1bmVxdWFsLgoKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGludCBfX2dlc2YyIChmbG9hdCBBLCBmbG9hdCBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogaW50IF9fZ2VkZjIgKGRvdWJsZSBBLCBkb3VibGUgQikKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGludCBfX2dldGYyIChsb25nIGRvdWJsZSBBLCBsb25nIGRvdWJsZSBCKQogICAgIFRoZXNlIGZ1bmN0aW9ucyByZXR1cm4gYSB2YWx1ZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gemVybyBpZgogICAgIG5laXRoZXIgYXJndW1lbnQgaXMgTmFOLCBhbmQgQSBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gQi4KCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBpbnQgX19sdHNmMiAoZmxvYXQgQSwgZmxvYXQgQikKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGludCBfX2x0ZGYyIChkb3VibGUgQSwgZG91YmxlIEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBpbnQgX19sdHRmMiAobG9uZyBkb3VibGUgQSwgbG9uZyBkb3VibGUgQikKICAgICBUaGVzZSBmdW5jdGlvbnMgcmV0dXJuIGEgdmFsdWUgbGVzcyB0aGFuIHplcm8gaWYgbmVpdGhlciBhcmd1bWVudAogICAgIGlzIE5hTiwgYW5kIEEgaXMgc3RyaWN0bHkgbGVzcyB0aGFuIEIuCgogLS0gUnVudGltZSBGdW5jdGlvbjogaW50IF9fbGVzZjIgKGZsb2F0IEEsIGZsb2F0IEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBpbnQgX19sZWRmMiAoZG91YmxlIEEsIGRvdWJsZSBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogaW50IF9fbGV0ZjIgKGxvbmcgZG91YmxlIEEsIGxvbmcgZG91YmxlIEIpCiAgICAgVGhlc2UgZnVuY3Rpb25zIHJldHVybiBhIHZhbHVlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB6ZXJvIGlmCiAgICAgbmVpdGhlciBhcmd1bWVudCBpcyBOYU4sIGFuZCBBIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byBCLgoKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGludCBfX2d0c2YyIChmbG9hdCBBLCBmbG9hdCBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogaW50IF9fZ3RkZjIgKGRvdWJsZSBBLCBkb3VibGUgQikKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGludCBfX2d0dGYyIChsb25nIGRvdWJsZSBBLCBsb25nIGRvdWJsZSBCKQogICAgIFRoZXNlIGZ1bmN0aW9ucyByZXR1cm4gYSB2YWx1ZSBncmVhdGVyIHRoYW4gemVybyBpZiBuZWl0aGVyCiAgICAgYXJndW1lbnQgaXMgTmFOLCBhbmQgQSBpcyBzdHJpY3RseSBncmVhdGVyIHRoYW4gQi4KCjQuMi40IE90aGVyIGZsb2F0aW5nLXBvaW50IGZ1bmN0aW9ucwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBmbG9hdCBfX3Bvd2lzZjIgKGZsb2F0IEEsIGludCBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogZG91YmxlIF9fcG93aWRmMiAoZG91YmxlIEEsIGludCBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBkb3VibGUgX19wb3dpdGYyIChsb25nIGRvdWJsZSBBLCBpbnQgQikKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgZG91YmxlIF9fcG93aXhmMiAobG9uZyBkb3VibGUgQSwgaW50IEIpCiAgICAgVGhlc2UgZnVuY3Rpb25zIGNvbnZlcnQgcmFpc2UgQSB0byB0aGUgcG93ZXIgQi4KCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBjb21wbGV4IGZsb2F0IF9fbXVsc2MzIChmbG9hdCBBLCBmbG9hdCBCLCBmbG9hdCBDLAogICAgICAgICAgZmxvYXQgRCkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGNvbXBsZXggZG91YmxlIF9fbXVsZGMzIChkb3VibGUgQSwgZG91YmxlIEIsCiAgICAgICAgICBkb3VibGUgQywgZG91YmxlIEQpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBjb21wbGV4IGxvbmcgZG91YmxlIF9fbXVsdGMzIChsb25nIGRvdWJsZSBBLCBsb25nCiAgICAgICAgICBkb3VibGUgQiwgbG9uZyBkb3VibGUgQywgbG9uZyBkb3VibGUgRCkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGNvbXBsZXggbG9uZyBkb3VibGUgX19tdWx4YzMgKGxvbmcgZG91YmxlIEEsIGxvbmcKICAgICAgICAgIGRvdWJsZSBCLCBsb25nIGRvdWJsZSBDLCBsb25nIGRvdWJsZSBEKQogICAgIFRoZXNlIGZ1bmN0aW9ucyByZXR1cm4gdGhlIHByb2R1Y3Qgb2YgQSArIGlCIGFuZCBDICsgaUQsIGZvbGxvd2luZwogICAgIHRoZSBydWxlcyBvZiBDOTkgQW5uZXggRy4KCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBjb21wbGV4IGZsb2F0IF9fZGl2c2MzIChmbG9hdCBBLCBmbG9hdCBCLCBmbG9hdCBDLAogICAgICAgICAgZmxvYXQgRCkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGNvbXBsZXggZG91YmxlIF9fZGl2ZGMzIChkb3VibGUgQSwgZG91YmxlIEIsCiAgICAgICAgICBkb3VibGUgQywgZG91YmxlIEQpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBjb21wbGV4IGxvbmcgZG91YmxlIF9fZGl2dGMzIChsb25nIGRvdWJsZSBBLCBsb25nCiAgICAgICAgICBkb3VibGUgQiwgbG9uZyBkb3VibGUgQywgbG9uZyBkb3VibGUgRCkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGNvbXBsZXggbG9uZyBkb3VibGUgX19kaXZ4YzMgKGxvbmcgZG91YmxlIEEsIGxvbmcKICAgICAgICAgIGRvdWJsZSBCLCBsb25nIGRvdWJsZSBDLCBsb25nIGRvdWJsZSBEKQogICAgIFRoZXNlIGZ1bmN0aW9ucyByZXR1cm4gdGhlIHF1b3RpZW50IG9mIEEgKyBpQiBhbmQgQyArIGlEIChpLmUuLCAoQQogICAgICsgaUIpIC8gKEMgKyBpRCkpLCBmb2xsb3dpbmcgdGhlIHJ1bGVzIG9mIEM5OSBBbm5leCBHLgoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IERlY2ltYWwgZmxvYXQgbGlicmFyeSByb3V0aW5lcywgIE5leHQ6IEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcywgIFByZXY6IFNvZnQgZmxvYXQgbGlicmFyeSByb3V0aW5lcywgIFVwOiBMaWJnY2MKCjQuMyBSb3V0aW5lcyBmb3IgZGVjaW1hbCBmbG9hdGluZyBwb2ludCBlbXVsYXRpb24KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKVGhlIHNvZnR3YXJlIGRlY2ltYWwgZmxvYXRpbmcgcG9pbnQgbGlicmFyeSBpbXBsZW1lbnRzIElFRUUgNzU0UiBkZWNpbWFsCmZsb2F0aW5nIHBvaW50IGFyaXRobWV0aWMgYW5kIGlzIG9ubHkgYWN0aXZhdGVkIG9uIHNlbGVjdGVkIHRhcmdldHMuCgogVGhlIHNvZnR3YXJlIGRlY2ltYWwgZmxvYXRpbmcgcG9pbnQgbGlicmFyeSBzdXBwb3J0cyBlaXRoZXIgRFBECihEZW5zZWx5IFBhY2tlZCBEZWNpbWFsKSBvciBCSUQgKEJpbmFyeSBJbnRlZ2VyIERlY2ltYWwpIGVuY29kaW5nIGFzCnNlbGVjdGVkIGF0IGNvbmZpZ3VyZSB0aW1lLgoKNC4zLjEgQXJpdGhtZXRpYyBmdW5jdGlvbnMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBfRGVjaW1hbDMyIF9fZHBkX2FkZHNkMyAoX0RlY2ltYWwzMiBBLCBfRGVjaW1hbDMyCiAgICAgICAgICBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogX0RlY2ltYWwzMiBfX2JpZF9hZGRzZDMgKF9EZWNpbWFsMzIgQSwgX0RlY2ltYWwzMgogICAgICAgICAgQikKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IF9EZWNpbWFsNjQgX19kcGRfYWRkZGQzIChfRGVjaW1hbDY0IEEsIF9EZWNpbWFsNjQKICAgICAgICAgIEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBfRGVjaW1hbDY0IF9fYmlkX2FkZGRkMyAoX0RlY2ltYWw2NCBBLCBfRGVjaW1hbDY0CiAgICAgICAgICBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogX0RlY2ltYWwxMjggX19kcGRfYWRkdGQzIChfRGVjaW1hbDEyOCBBLAogICAgICAgICAgX0RlY2ltYWwxMjggQikKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IF9EZWNpbWFsMTI4IF9fYmlkX2FkZHRkMyAoX0RlY2ltYWwxMjggQSwKICAgICAgICAgIF9EZWNpbWFsMTI4IEIpCiAgICAgVGhlc2UgZnVuY3Rpb25zIHJldHVybiB0aGUgc3VtIG9mIEEgYW5kIEIuCgogLS0gUnVudGltZSBGdW5jdGlvbjogX0RlY2ltYWwzMiBfX2RwZF9zdWJzZDMgKF9EZWNpbWFsMzIgQSwgX0RlY2ltYWwzMgogICAgICAgICAgQikKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IF9EZWNpbWFsMzIgX19iaWRfc3Vic2QzIChfRGVjaW1hbDMyIEEsIF9EZWNpbWFsMzIKICAgICAgICAgIEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBfRGVjaW1hbDY0IF9fZHBkX3N1YmRkMyAoX0RlY2ltYWw2NCBBLCBfRGVjaW1hbDY0CiAgICAgICAgICBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogX0RlY2ltYWw2NCBfX2JpZF9zdWJkZDMgKF9EZWNpbWFsNjQgQSwgX0RlY2ltYWw2NAogICAgICAgICAgQikKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IF9EZWNpbWFsMTI4IF9fZHBkX3N1YnRkMyAoX0RlY2ltYWwxMjggQSwKICAgICAgICAgIF9EZWNpbWFsMTI4IEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBfRGVjaW1hbDEyOCBfX2JpZF9zdWJ0ZDMgKF9EZWNpbWFsMTI4IEEsCiAgICAgICAgICBfRGVjaW1hbDEyOCBCKQogICAgIFRoZXNlIGZ1bmN0aW9ucyByZXR1cm4gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBCIGFuZCBBOyB0aGF0IGlzLAogICAgIEEgLSBCLgoKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IF9EZWNpbWFsMzIgX19kcGRfbXVsc2QzIChfRGVjaW1hbDMyIEEsIF9EZWNpbWFsMzIKICAgICAgICAgIEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBfRGVjaW1hbDMyIF9fYmlkX211bHNkMyAoX0RlY2ltYWwzMiBBLCBfRGVjaW1hbDMyCiAgICAgICAgICBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogX0RlY2ltYWw2NCBfX2RwZF9tdWxkZDMgKF9EZWNpbWFsNjQgQSwgX0RlY2ltYWw2NAogICAgICAgICAgQikKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IF9EZWNpbWFsNjQgX19iaWRfbXVsZGQzIChfRGVjaW1hbDY0IEEsIF9EZWNpbWFsNjQKICAgICAgICAgIEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBfRGVjaW1hbDEyOCBfX2RwZF9tdWx0ZDMgKF9EZWNpbWFsMTI4IEEsCiAgICAgICAgICBfRGVjaW1hbDEyOCBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogX0RlY2ltYWwxMjggX19iaWRfbXVsdGQzIChfRGVjaW1hbDEyOCBBLAogICAgICAgICAgX0RlY2ltYWwxMjggQikKICAgICBUaGVzZSBmdW5jdGlvbnMgcmV0dXJuIHRoZSBwcm9kdWN0IG9mIEEgYW5kIEIuCgogLS0gUnVudGltZSBGdW5jdGlvbjogX0RlY2ltYWwzMiBfX2RwZF9kaXZzZDMgKF9EZWNpbWFsMzIgQSwgX0RlY2ltYWwzMgogICAgICAgICAgQikKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IF9EZWNpbWFsMzIgX19iaWRfZGl2c2QzIChfRGVjaW1hbDMyIEEsIF9EZWNpbWFsMzIKICAgICAgICAgIEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBfRGVjaW1hbDY0IF9fZHBkX2RpdmRkMyAoX0RlY2ltYWw2NCBBLCBfRGVjaW1hbDY0CiAgICAgICAgICBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogX0RlY2ltYWw2NCBfX2JpZF9kaXZkZDMgKF9EZWNpbWFsNjQgQSwgX0RlY2ltYWw2NAogICAgICAgICAgQikKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IF9EZWNpbWFsMTI4IF9fZHBkX2RpdnRkMyAoX0RlY2ltYWwxMjggQSwKICAgICAgICAgIF9EZWNpbWFsMTI4IEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBfRGVjaW1hbDEyOCBfX2JpZF9kaXZ0ZDMgKF9EZWNpbWFsMTI4IEEsCiAgICAgICAgICBfRGVjaW1hbDEyOCBCKQogICAgIFRoZXNlIGZ1bmN0aW9ucyByZXR1cm4gdGhlIHF1b3RpZW50IG9mIEEgYW5kIEI7IHRoYXQgaXMsIEEgLyBCLgoKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IF9EZWNpbWFsMzIgX19kcGRfbmVnc2QyIChfRGVjaW1hbDMyIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBfRGVjaW1hbDMyIF9fYmlkX25lZ3NkMiAoX0RlY2ltYWwzMiBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogX0RlY2ltYWw2NCBfX2RwZF9uZWdkZDIgKF9EZWNpbWFsNjQgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IF9EZWNpbWFsNjQgX19iaWRfbmVnZGQyIChfRGVjaW1hbDY0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBfRGVjaW1hbDEyOCBfX2RwZF9uZWd0ZDIgKF9EZWNpbWFsMTI4IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBfRGVjaW1hbDEyOCBfX2JpZF9uZWd0ZDIgKF9EZWNpbWFsMTI4IEEpCiAgICAgVGhlc2UgZnVuY3Rpb25zIHJldHVybiB0aGUgbmVnYXRpb24gb2YgQS4gIFRoZXkgc2ltcGx5IGZsaXAgdGhlCiAgICAgc2lnbiBiaXQsIHNvIHRoZXkgY2FuIHByb2R1Y2UgbmVnYXRpdmUgemVybyBhbmQgbmVnYXRpdmUgTmFOLgoKNC4zLjIgQ29udmVyc2lvbiBmdW5jdGlvbnMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBfRGVjaW1hbDY0IF9fZHBkX2V4dGVuZHNkZGQyIChfRGVjaW1hbDMyIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBfRGVjaW1hbDY0IF9fYmlkX2V4dGVuZHNkZGQyIChfRGVjaW1hbDMyIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBfRGVjaW1hbDEyOCBfX2RwZF9leHRlbmRzZHRkMiAoX0RlY2ltYWwzMiBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogX0RlY2ltYWwxMjggX19iaWRfZXh0ZW5kc2R0ZDIgKF9EZWNpbWFsMzIgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IF9EZWNpbWFsMTI4IF9fZHBkX2V4dGVuZGRkdGQyIChfRGVjaW1hbDY0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBfRGVjaW1hbDEyOCBfX2JpZF9leHRlbmRkZHRkMiAoX0RlY2ltYWw2NCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogX0RlY2ltYWwzMiBfX2RwZF90cnVuY2Rkc2QyIChfRGVjaW1hbDY0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBfRGVjaW1hbDMyIF9fYmlkX3RydW5jZGRzZDIgKF9EZWNpbWFsNjQgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IF9EZWNpbWFsMzIgX19kcGRfdHJ1bmN0ZHNkMiAoX0RlY2ltYWwxMjggQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IF9EZWNpbWFsMzIgX19iaWRfdHJ1bmN0ZHNkMiAoX0RlY2ltYWwxMjggQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IF9EZWNpbWFsNjQgX19kcGRfdHJ1bmN0ZGRkMiAoX0RlY2ltYWwxMjggQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IF9EZWNpbWFsNjQgX19iaWRfdHJ1bmN0ZGRkMiAoX0RlY2ltYWwxMjggQSkKICAgICBUaGVzZSBmdW5jdGlvbnMgY29udmVydCB0aGUgdmFsdWUgQSBmcm9tIG9uZSBkZWNpbWFsIGZsb2F0aW5nIHR5cGUKICAgICB0byBhbm90aGVyLgoKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IF9EZWNpbWFsNjQgX19kcGRfZXh0ZW5kc2ZkZCAoZmxvYXQgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IF9EZWNpbWFsNjQgX19iaWRfZXh0ZW5kc2ZkZCAoZmxvYXQgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IF9EZWNpbWFsMTI4IF9fZHBkX2V4dGVuZHNmdGQgKGZsb2F0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBfRGVjaW1hbDEyOCBfX2JpZF9leHRlbmRzZnRkIChmbG9hdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogX0RlY2ltYWwxMjggX19kcGRfZXh0ZW5kZGZ0ZCAoZG91YmxlIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBfRGVjaW1hbDEyOCBfX2JpZF9leHRlbmRkZnRkIChkb3VibGUgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IF9EZWNpbWFsMTI4IF9fZHBkX2V4dGVuZHhmdGQgKGxvbmcgZG91YmxlIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBfRGVjaW1hbDEyOCBfX2JpZF9leHRlbmR4ZnRkIChsb25nIGRvdWJsZSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogX0RlY2ltYWwzMiBfX2RwZF90cnVuY2Rmc2QgKGRvdWJsZSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogX0RlY2ltYWwzMiBfX2JpZF90cnVuY2Rmc2QgKGRvdWJsZSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogX0RlY2ltYWwzMiBfX2RwZF90cnVuY3hmc2QgKGxvbmcgZG91YmxlIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBfRGVjaW1hbDMyIF9fYmlkX3RydW5jeGZzZCAobG9uZyBkb3VibGUgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IF9EZWNpbWFsMzIgX19kcGRfdHJ1bmN0ZnNkIChsb25nIGRvdWJsZSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogX0RlY2ltYWwzMiBfX2JpZF90cnVuY3Rmc2QgKGxvbmcgZG91YmxlIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBfRGVjaW1hbDY0IF9fZHBkX3RydW5jeGZkZCAobG9uZyBkb3VibGUgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IF9EZWNpbWFsNjQgX19iaWRfdHJ1bmN4ZmRkIChsb25nIGRvdWJsZSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogX0RlY2ltYWw2NCBfX2RwZF90cnVuY3RmZGQgKGxvbmcgZG91YmxlIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBfRGVjaW1hbDY0IF9fYmlkX3RydW5jdGZkZCAobG9uZyBkb3VibGUgQSkKICAgICBUaGVzZSBmdW5jdGlvbnMgY29udmVydCB0aGUgdmFsdWUgb2YgQSBmcm9tIGEgYmluYXJ5IGZsb2F0aW5nIHR5cGUKICAgICB0byBhIGRlY2ltYWwgZmxvYXRpbmcgdHlwZSBvZiBhIGRpZmZlcmVudCBzaXplLgoKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGZsb2F0IF9fZHBkX3RydW5jZGRzZiAoX0RlY2ltYWw2NCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogZmxvYXQgX19iaWRfdHJ1bmNkZHNmIChfRGVjaW1hbDY0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBmbG9hdCBfX2RwZF90cnVuY3Rkc2YgKF9EZWNpbWFsMTI4IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBmbG9hdCBfX2JpZF90cnVuY3Rkc2YgKF9EZWNpbWFsMTI4IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBkb3VibGUgX19kcGRfZXh0ZW5kc2RkZiAoX0RlY2ltYWwzMiBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogZG91YmxlIF9fYmlkX2V4dGVuZHNkZGYgKF9EZWNpbWFsMzIgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGRvdWJsZSBfX2RwZF90cnVuY3RkZGYgKF9EZWNpbWFsMTI4IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBkb3VibGUgX19iaWRfdHJ1bmN0ZGRmIChfRGVjaW1hbDEyOCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBkb3VibGUgX19kcGRfZXh0ZW5kc2R4ZiAoX0RlY2ltYWwzMiBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBkb3VibGUgX19iaWRfZXh0ZW5kc2R4ZiAoX0RlY2ltYWwzMiBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBkb3VibGUgX19kcGRfZXh0ZW5kZGR4ZiAoX0RlY2ltYWw2NCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBkb3VibGUgX19iaWRfZXh0ZW5kZGR4ZiAoX0RlY2ltYWw2NCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBkb3VibGUgX19kcGRfdHJ1bmN0ZHhmIChfRGVjaW1hbDEyOCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBkb3VibGUgX19iaWRfdHJ1bmN0ZHhmIChfRGVjaW1hbDEyOCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBkb3VibGUgX19kcGRfZXh0ZW5kc2R0ZiAoX0RlY2ltYWwzMiBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBkb3VibGUgX19iaWRfZXh0ZW5kc2R0ZiAoX0RlY2ltYWwzMiBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBkb3VibGUgX19kcGRfZXh0ZW5kZGR0ZiAoX0RlY2ltYWw2NCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBkb3VibGUgX19iaWRfZXh0ZW5kZGR0ZiAoX0RlY2ltYWw2NCBBKQogICAgIFRoZXNlIGZ1bmN0aW9ucyBjb252ZXJ0IHRoZSB2YWx1ZSBvZiBBIGZyb20gYSBkZWNpbWFsIGZsb2F0aW5nIHR5cGUKICAgICB0byBhIGJpbmFyeSBmbG9hdGluZyB0eXBlIG9mIGEgZGlmZmVyZW50IHNpemUuCgogLS0gUnVudGltZSBGdW5jdGlvbjogX0RlY2ltYWwzMiBfX2RwZF9leHRlbmRzZnNkIChmbG9hdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogX0RlY2ltYWwzMiBfX2JpZF9leHRlbmRzZnNkIChmbG9hdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogX0RlY2ltYWw2NCBfX2RwZF9leHRlbmRkZmRkIChkb3VibGUgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IF9EZWNpbWFsNjQgX19iaWRfZXh0ZW5kZGZkZCAoZG91YmxlIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBfRGVjaW1hbDEyOCBfX2RwZF9leHRlbmR0ZnRkIChsb25nIGRvdWJsZSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogX0RlY2ltYWwxMjggX19iaWRfZXh0ZW5kdGZ0ZCAobG9uZyBkb3VibGUgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGZsb2F0IF9fZHBkX3RydW5jc2RzZiAoX0RlY2ltYWwzMiBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogZmxvYXQgX19iaWRfdHJ1bmNzZHNmIChfRGVjaW1hbDMyIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBkb3VibGUgX19kcGRfdHJ1bmNkZGRmIChfRGVjaW1hbDY0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBkb3VibGUgX19iaWRfdHJ1bmNkZGRmIChfRGVjaW1hbDY0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGRvdWJsZSBfX2RwZF90cnVuY3RkdGYgKF9EZWNpbWFsMTI4IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGRvdWJsZSBfX2JpZF90cnVuY3RkdGYgKF9EZWNpbWFsMTI4IEEpCiAgICAgVGhlc2UgZnVuY3Rpb25zIGNvbnZlcnQgdGhlIHZhbHVlIG9mIEEgYmV0d2VlbiBkZWNpbWFsIGFuZCBiaW5hcnkKICAgICBmbG9hdGluZyB0eXBlcyBvZiB0aGUgc2FtZSBzaXplLgoKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGludCBfX2RwZF9maXhzZHNpIChfRGVjaW1hbDMyIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBpbnQgX19iaWRfZml4c2RzaSAoX0RlY2ltYWwzMiBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogaW50IF9fZHBkX2ZpeGRkc2kgKF9EZWNpbWFsNjQgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGludCBfX2JpZF9maXhkZHNpIChfRGVjaW1hbDY0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBpbnQgX19kcGRfZml4dGRzaSAoX0RlY2ltYWwxMjggQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGludCBfX2JpZF9maXh0ZHNpIChfRGVjaW1hbDEyOCBBKQogICAgIFRoZXNlIGZ1bmN0aW9ucyBjb252ZXJ0IEEgdG8gYSBzaWduZWQgaW50ZWdlci4KCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIF9fZHBkX2ZpeHNkZGkgKF9EZWNpbWFsMzIgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgX19iaWRfZml4c2RkaSAoX0RlY2ltYWwzMiBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBfX2RwZF9maXhkZGRpIChfRGVjaW1hbDY0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIF9fYmlkX2ZpeGRkZGkgKF9EZWNpbWFsNjQgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgX19kcGRfZml4dGRkaSAoX0RlY2ltYWwxMjggQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgX19iaWRfZml4dGRkaSAoX0RlY2ltYWwxMjggQSkKICAgICBUaGVzZSBmdW5jdGlvbnMgY29udmVydCBBIHRvIGEgc2lnbmVkIGxvbmcuCgogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgaW50IF9fZHBkX2ZpeHVuc3Nkc2kgKF9EZWNpbWFsMzIgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGludCBfX2JpZF9maXh1bnNzZHNpIChfRGVjaW1hbDMyIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBpbnQgX19kcGRfZml4dW5zZGRzaSAoX0RlY2ltYWw2NCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgaW50IF9fYmlkX2ZpeHVuc2Rkc2kgKF9EZWNpbWFsNjQgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGludCBfX2RwZF9maXh1bnN0ZHNpIChfRGVjaW1hbDEyOCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgaW50IF9fYmlkX2ZpeHVuc3Rkc2kgKF9EZWNpbWFsMTI4IEEpCiAgICAgVGhlc2UgZnVuY3Rpb25zIGNvbnZlcnQgQSB0byBhbiB1bnNpZ25lZCBpbnRlZ2VyLiAgTmVnYXRpdmUgdmFsdWVzCiAgICAgYWxsIGJlY29tZSB6ZXJvLgoKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGxvbmcgX19kcGRfZml4dW5zc2RkaSAoX0RlY2ltYWwzMiBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBfX2JpZF9maXh1bnNzZGRpIChfRGVjaW1hbDMyIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIF9fZHBkX2ZpeHVuc2RkZGkgKF9EZWNpbWFsNjQgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGxvbmcgX19iaWRfZml4dW5zZGRkaSAoX0RlY2ltYWw2NCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBfX2RwZF9maXh1bnN0ZGRpIChfRGVjaW1hbDEyOCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBfX2JpZF9maXh1bnN0ZGRpIChfRGVjaW1hbDEyOCBBKQogICAgIFRoZXNlIGZ1bmN0aW9ucyBjb252ZXJ0IEEgdG8gYW4gdW5zaWduZWQgbG9uZy4gIE5lZ2F0aXZlIHZhbHVlcyBhbGwKICAgICBiZWNvbWUgemVyby4KCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBfRGVjaW1hbDMyIF9fZHBkX2Zsb2F0c2lzZCAoaW50IEkpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBfRGVjaW1hbDMyIF9fYmlkX2Zsb2F0c2lzZCAoaW50IEkpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBfRGVjaW1hbDY0IF9fZHBkX2Zsb2F0c2lkZCAoaW50IEkpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBfRGVjaW1hbDY0IF9fYmlkX2Zsb2F0c2lkZCAoaW50IEkpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBfRGVjaW1hbDEyOCBfX2RwZF9mbG9hdHNpdGQgKGludCBJKQogLS0gUnVudGltZSBGdW5jdGlvbjogX0RlY2ltYWwxMjggX19iaWRfZmxvYXRzaXRkIChpbnQgSSkKICAgICBUaGVzZSBmdW5jdGlvbnMgY29udmVydCBJLCBhIHNpZ25lZCBpbnRlZ2VyLCB0byBkZWNpbWFsIGZsb2F0aW5nCiAgICAgcG9pbnQuCgogLS0gUnVudGltZSBGdW5jdGlvbjogX0RlY2ltYWwzMiBfX2RwZF9mbG9hdGRpc2QgKGxvbmcgSSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IF9EZWNpbWFsMzIgX19iaWRfZmxvYXRkaXNkIChsb25nIEkpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBfRGVjaW1hbDY0IF9fZHBkX2Zsb2F0ZGlkZCAobG9uZyBJKQogLS0gUnVudGltZSBGdW5jdGlvbjogX0RlY2ltYWw2NCBfX2JpZF9mbG9hdGRpZGQgKGxvbmcgSSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IF9EZWNpbWFsMTI4IF9fZHBkX2Zsb2F0ZGl0ZCAobG9uZyBJKQogLS0gUnVudGltZSBGdW5jdGlvbjogX0RlY2ltYWwxMjggX19iaWRfZmxvYXRkaXRkIChsb25nIEkpCiAgICAgVGhlc2UgZnVuY3Rpb25zIGNvbnZlcnQgSSwgYSBzaWduZWQgbG9uZywgdG8gZGVjaW1hbCBmbG9hdGluZwogICAgIHBvaW50LgoKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IF9EZWNpbWFsMzIgX19kcGRfZmxvYXR1bnNzaXNkICh1bnNpZ25lZCBpbnQgSSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IF9EZWNpbWFsMzIgX19iaWRfZmxvYXR1bnNzaXNkICh1bnNpZ25lZCBpbnQgSSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IF9EZWNpbWFsNjQgX19kcGRfZmxvYXR1bnNzaWRkICh1bnNpZ25lZCBpbnQgSSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IF9EZWNpbWFsNjQgX19iaWRfZmxvYXR1bnNzaWRkICh1bnNpZ25lZCBpbnQgSSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IF9EZWNpbWFsMTI4IF9fZHBkX2Zsb2F0dW5zc2l0ZCAodW5zaWduZWQgaW50IEkpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBfRGVjaW1hbDEyOCBfX2JpZF9mbG9hdHVuc3NpdGQgKHVuc2lnbmVkIGludCBJKQogICAgIFRoZXNlIGZ1bmN0aW9ucyBjb252ZXJ0IEksIGFuIHVuc2lnbmVkIGludGVnZXIsIHRvIGRlY2ltYWwgZmxvYXRpbmcKICAgICBwb2ludC4KCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBfRGVjaW1hbDMyIF9fZHBkX2Zsb2F0dW5zZGlzZCAodW5zaWduZWQgbG9uZyBJKQogLS0gUnVudGltZSBGdW5jdGlvbjogX0RlY2ltYWwzMiBfX2JpZF9mbG9hdHVuc2Rpc2QgKHVuc2lnbmVkIGxvbmcgSSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IF9EZWNpbWFsNjQgX19kcGRfZmxvYXR1bnNkaWRkICh1bnNpZ25lZCBsb25nIEkpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBfRGVjaW1hbDY0IF9fYmlkX2Zsb2F0dW5zZGlkZCAodW5zaWduZWQgbG9uZyBJKQogLS0gUnVudGltZSBGdW5jdGlvbjogX0RlY2ltYWwxMjggX19kcGRfZmxvYXR1bnNkaXRkICh1bnNpZ25lZCBsb25nIEkpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBfRGVjaW1hbDEyOCBfX2JpZF9mbG9hdHVuc2RpdGQgKHVuc2lnbmVkIGxvbmcgSSkKICAgICBUaGVzZSBmdW5jdGlvbnMgY29udmVydCBJLCBhbiB1bnNpZ25lZCBsb25nLCB0byBkZWNpbWFsIGZsb2F0aW5nCiAgICAgcG9pbnQuCgo0LjMuMyBDb21wYXJpc29uIGZ1bmN0aW9ucwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGludCBfX2RwZF91bm9yZHNkMiAoX0RlY2ltYWwzMiBBLCBfRGVjaW1hbDMyIEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBpbnQgX19iaWRfdW5vcmRzZDIgKF9EZWNpbWFsMzIgQSwgX0RlY2ltYWwzMiBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogaW50IF9fZHBkX3Vub3JkZGQyIChfRGVjaW1hbDY0IEEsIF9EZWNpbWFsNjQgQikKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGludCBfX2JpZF91bm9yZGRkMiAoX0RlY2ltYWw2NCBBLCBfRGVjaW1hbDY0IEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBpbnQgX19kcGRfdW5vcmR0ZDIgKF9EZWNpbWFsMTI4IEEsIF9EZWNpbWFsMTI4IEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBpbnQgX19iaWRfdW5vcmR0ZDIgKF9EZWNpbWFsMTI4IEEsIF9EZWNpbWFsMTI4IEIpCiAgICAgVGhlc2UgZnVuY3Rpb25zIHJldHVybiBhIG5vbnplcm8gdmFsdWUgaWYgZWl0aGVyIGFyZ3VtZW50IGlzIE5hTiwKICAgICBvdGhlcndpc2UgMC4KCiBUaGVyZSBpcyBhbHNvIGEgY29tcGxldGUgZ3JvdXAgb2YgaGlnaGVyIGxldmVsIGZ1bmN0aW9ucyB3aGljaApjb3JyZXNwb25kIGRpcmVjdGx5IHRvIGNvbXBhcmlzb24gb3BlcmF0b3JzLiAgVGhleSBpbXBsZW1lbnQgdGhlIElTTyBDCnNlbWFudGljcyBmb3IgZmxvYXRpbmctcG9pbnQgY29tcGFyaXNvbnMsIHRha2luZyBOYU4gaW50byBhY2NvdW50LiAgUGF5CmNhcmVmdWwgYXR0ZW50aW9uIHRvIHRoZSByZXR1cm4gdmFsdWVzIGRlZmluZWQgZm9yIGVhY2ggc2V0LiAgVW5kZXIgdGhlCmhvb2QsIGFsbCBvZiB0aGVzZSByb3V0aW5lcyBhcmUgaW1wbGVtZW50ZWQgYXMKCiAgICAgICBpZiAoX19iaWRfdW5vcmRYZDIgKGEsIGIpKQogICAgICAgICByZXR1cm4gRTsKICAgICAgIHJldHVybiBfX2JpZF9jbXBYZDIgKGEsIGIpOwoKd2hlcmUgRSBpcyBhIGNvbnN0YW50IGNob3NlbiB0byBnaXZlIHRoZSBwcm9wZXIgYmVoYXZpb3IgZm9yIE5hTi4gIFRodXMsCnRoZSBtZWFuaW5nIG9mIHRoZSByZXR1cm4gdmFsdWUgaXMgZGlmZmVyZW50IGZvciBlYWNoIHNldC4gIERvIG5vdCByZWx5Cm9uIHRoaXMgaW1wbGVtZW50YXRpb247IG9ubHkgdGhlIHNlbWFudGljcyBkb2N1bWVudGVkIGJlbG93IGFyZQpndWFyYW50ZWVkLgoKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGludCBfX2RwZF9lcXNkMiAoX0RlY2ltYWwzMiBBLCBfRGVjaW1hbDMyIEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBpbnQgX19iaWRfZXFzZDIgKF9EZWNpbWFsMzIgQSwgX0RlY2ltYWwzMiBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogaW50IF9fZHBkX2VxZGQyIChfRGVjaW1hbDY0IEEsIF9EZWNpbWFsNjQgQikKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGludCBfX2JpZF9lcWRkMiAoX0RlY2ltYWw2NCBBLCBfRGVjaW1hbDY0IEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBpbnQgX19kcGRfZXF0ZDIgKF9EZWNpbWFsMTI4IEEsIF9EZWNpbWFsMTI4IEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBpbnQgX19iaWRfZXF0ZDIgKF9EZWNpbWFsMTI4IEEsIF9EZWNpbWFsMTI4IEIpCiAgICAgVGhlc2UgZnVuY3Rpb25zIHJldHVybiB6ZXJvIGlmIG5laXRoZXIgYXJndW1lbnQgaXMgTmFOLCBhbmQgQSBhbmQgQgogICAgIGFyZSBlcXVhbC4KCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBpbnQgX19kcGRfbmVzZDIgKF9EZWNpbWFsMzIgQSwgX0RlY2ltYWwzMiBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogaW50IF9fYmlkX25lc2QyIChfRGVjaW1hbDMyIEEsIF9EZWNpbWFsMzIgQikKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGludCBfX2RwZF9uZWRkMiAoX0RlY2ltYWw2NCBBLCBfRGVjaW1hbDY0IEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBpbnQgX19iaWRfbmVkZDIgKF9EZWNpbWFsNjQgQSwgX0RlY2ltYWw2NCBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogaW50IF9fZHBkX25ldGQyIChfRGVjaW1hbDEyOCBBLCBfRGVjaW1hbDEyOCBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogaW50IF9fYmlkX25ldGQyIChfRGVjaW1hbDEyOCBBLCBfRGVjaW1hbDEyOCBCKQogICAgIFRoZXNlIGZ1bmN0aW9ucyByZXR1cm4gYSBub256ZXJvIHZhbHVlIGlmIGVpdGhlciBhcmd1bWVudCBpcyBOYU4sCiAgICAgb3IgaWYgQSBhbmQgQiBhcmUgdW5lcXVhbC4KCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBpbnQgX19kcGRfZ2VzZDIgKF9EZWNpbWFsMzIgQSwgX0RlY2ltYWwzMiBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogaW50IF9fYmlkX2dlc2QyIChfRGVjaW1hbDMyIEEsIF9EZWNpbWFsMzIgQikKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGludCBfX2RwZF9nZWRkMiAoX0RlY2ltYWw2NCBBLCBfRGVjaW1hbDY0IEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBpbnQgX19iaWRfZ2VkZDIgKF9EZWNpbWFsNjQgQSwgX0RlY2ltYWw2NCBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogaW50IF9fZHBkX2dldGQyIChfRGVjaW1hbDEyOCBBLCBfRGVjaW1hbDEyOCBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogaW50IF9fYmlkX2dldGQyIChfRGVjaW1hbDEyOCBBLCBfRGVjaW1hbDEyOCBCKQogICAgIFRoZXNlIGZ1bmN0aW9ucyByZXR1cm4gYSB2YWx1ZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gemVybyBpZgogICAgIG5laXRoZXIgYXJndW1lbnQgaXMgTmFOLCBhbmQgQSBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gQi4KCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBpbnQgX19kcGRfbHRzZDIgKF9EZWNpbWFsMzIgQSwgX0RlY2ltYWwzMiBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogaW50IF9fYmlkX2x0c2QyIChfRGVjaW1hbDMyIEEsIF9EZWNpbWFsMzIgQikKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGludCBfX2RwZF9sdGRkMiAoX0RlY2ltYWw2NCBBLCBfRGVjaW1hbDY0IEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBpbnQgX19iaWRfbHRkZDIgKF9EZWNpbWFsNjQgQSwgX0RlY2ltYWw2NCBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogaW50IF9fZHBkX2x0dGQyIChfRGVjaW1hbDEyOCBBLCBfRGVjaW1hbDEyOCBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogaW50IF9fYmlkX2x0dGQyIChfRGVjaW1hbDEyOCBBLCBfRGVjaW1hbDEyOCBCKQogICAgIFRoZXNlIGZ1bmN0aW9ucyByZXR1cm4gYSB2YWx1ZSBsZXNzIHRoYW4gemVybyBpZiBuZWl0aGVyIGFyZ3VtZW50CiAgICAgaXMgTmFOLCBhbmQgQSBpcyBzdHJpY3RseSBsZXNzIHRoYW4gQi4KCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBpbnQgX19kcGRfbGVzZDIgKF9EZWNpbWFsMzIgQSwgX0RlY2ltYWwzMiBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogaW50IF9fYmlkX2xlc2QyIChfRGVjaW1hbDMyIEEsIF9EZWNpbWFsMzIgQikKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGludCBfX2RwZF9sZWRkMiAoX0RlY2ltYWw2NCBBLCBfRGVjaW1hbDY0IEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBpbnQgX19iaWRfbGVkZDIgKF9EZWNpbWFsNjQgQSwgX0RlY2ltYWw2NCBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogaW50IF9fZHBkX2xldGQyIChfRGVjaW1hbDEyOCBBLCBfRGVjaW1hbDEyOCBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogaW50IF9fYmlkX2xldGQyIChfRGVjaW1hbDEyOCBBLCBfRGVjaW1hbDEyOCBCKQogICAgIFRoZXNlIGZ1bmN0aW9ucyByZXR1cm4gYSB2YWx1ZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gemVybyBpZgogICAgIG5laXRoZXIgYXJndW1lbnQgaXMgTmFOLCBhbmQgQSBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gQi4KCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBpbnQgX19kcGRfZ3RzZDIgKF9EZWNpbWFsMzIgQSwgX0RlY2ltYWwzMiBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogaW50IF9fYmlkX2d0c2QyIChfRGVjaW1hbDMyIEEsIF9EZWNpbWFsMzIgQikKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGludCBfX2RwZF9ndGRkMiAoX0RlY2ltYWw2NCBBLCBfRGVjaW1hbDY0IEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBpbnQgX19iaWRfZ3RkZDIgKF9EZWNpbWFsNjQgQSwgX0RlY2ltYWw2NCBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogaW50IF9fZHBkX2d0dGQyIChfRGVjaW1hbDEyOCBBLCBfRGVjaW1hbDEyOCBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogaW50IF9fYmlkX2d0dGQyIChfRGVjaW1hbDEyOCBBLCBfRGVjaW1hbDEyOCBCKQogICAgIFRoZXNlIGZ1bmN0aW9ucyByZXR1cm4gYSB2YWx1ZSBncmVhdGVyIHRoYW4gemVybyBpZiBuZWl0aGVyCiAgICAgYXJndW1lbnQgaXMgTmFOLCBhbmQgQSBpcyBzdHJpY3RseSBncmVhdGVyIHRoYW4gQi4KCh8KRmlsZTogZ2NjaW50LmluZm8sICBOb2RlOiBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMsICBOZXh0OiBFeGNlcHRpb24gaGFuZGxpbmcgcm91dGluZXMsICBQcmV2OiBEZWNpbWFsIGZsb2F0IGxpYnJhcnkgcm91dGluZXMsICBVcDogTGliZ2NjCgo0LjQgUm91dGluZXMgZm9yIGZpeGVkLXBvaW50IGZyYWN0aW9uYWwgZW11bGF0aW9uCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KClRoZSBzb2Z0d2FyZSBmaXhlZC1wb2ludCBsaWJyYXJ5IGltcGxlbWVudHMgZml4ZWQtcG9pbnQgZnJhY3Rpb25hbAphcml0aG1ldGljLCBhbmQgaXMgb25seSBhY3RpdmF0ZWQgb24gc2VsZWN0ZWQgdGFyZ2V0cy4KCiBGb3IgZWFzZSBvZiBjb21wcmVoZW5zaW9uICdmcmFjdCcgaXMgYW4gYWxpYXMgZm9yIHRoZSAnX0ZyYWN0JyB0eXBlLAonYWNjdW0nIGFuIGFsaWFzIGZvciAnX0FjY3VtJywgYW5kICdzYXQnIGFuIGFsaWFzIGZvciAnX1NhdCcuCgogRm9yIGlsbHVzdHJhdGl2ZSBwdXJwb3NlcywgaW4gdGhpcyBzZWN0aW9uIHRoZSBmaXhlZC1wb2ludCBmcmFjdGlvbmFsCnR5cGUgJ3Nob3J0IGZyYWN0JyBpcyBhc3N1bWVkIHRvIGNvcnJlc3BvbmQgdG8gbWFjaGluZSBtb2RlICdRUW1vZGUnOwondW5zaWduZWQgc2hvcnQgZnJhY3QnIHRvICdVUVFtb2RlJzsgJ2ZyYWN0JyB0byAnSFFtb2RlJzsKJ3Vuc2lnbmVkIGZyYWN0JyB0byAnVUhRbW9kZSc7ICdsb25nIGZyYWN0JyB0byAnU1Ftb2RlJzsKJ3Vuc2lnbmVkIGxvbmcgZnJhY3QnIHRvICdVU1Ftb2RlJzsgJ2xvbmcgbG9uZyBmcmFjdCcgdG8gJ0RRbW9kZSc7IGFuZAondW5zaWduZWQgbG9uZyBsb25nIGZyYWN0JyB0byAnVURRbW9kZScuICBTaW1pbGFybHkgdGhlIGZpeGVkLXBvaW50CmFjY3VtdWxhdG9yIHR5cGUgJ3Nob3J0IGFjY3VtJyBjb3JyZXNwb25kcyB0byAnSEFtb2RlJzsKJ3Vuc2lnbmVkIHNob3J0IGFjY3VtJyB0byAnVUhBbW9kZSc7ICdhY2N1bScgdG8gJ1NBbW9kZSc7Cid1bnNpZ25lZCBhY2N1bScgdG8gJ1VTQW1vZGUnOyAnbG9uZyBhY2N1bScgdG8gJ0RBbW9kZSc7Cid1bnNpZ25lZCBsb25nIGFjY3VtJyB0byAnVURBbW9kZSc7ICdsb25nIGxvbmcgYWNjdW0nIHRvICdUQW1vZGUnOyBhbmQKJ3Vuc2lnbmVkIGxvbmcgbG9uZyBhY2N1bScgdG8gJ1VUQW1vZGUnLgoKNC40LjEgQXJpdGhtZXRpYyBmdW5jdGlvbnMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBzaG9ydCBmcmFjdCBfX2FkZHFxMyAoc2hvcnQgZnJhY3QgQSwgc2hvcnQgZnJhY3QKICAgICAgICAgIEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBmcmFjdCBfX2FkZGhxMyAoZnJhY3QgQSwgZnJhY3QgQikKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgZnJhY3QgX19hZGRzcTMgKGxvbmcgZnJhY3QgQSwgbG9uZyBmcmFjdCBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBsb25nIGZyYWN0IF9fYWRkZHEzIChsb25nIGxvbmcgZnJhY3QgQSwgbG9uZwogICAgICAgICAgbG9uZyBmcmFjdCBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgc2hvcnQgZnJhY3QgX19hZGR1cXEzICh1bnNpZ25lZCBzaG9ydAogICAgICAgICAgZnJhY3QgQSwgdW5zaWduZWQgc2hvcnQgZnJhY3QgQikKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGZyYWN0IF9fYWRkdWhxMyAodW5zaWduZWQgZnJhY3QgQSwKICAgICAgICAgIHVuc2lnbmVkIGZyYWN0IEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGZyYWN0IF9fYWRkdXNxMyAodW5zaWduZWQgbG9uZyBmcmFjdAogICAgICAgICAgQSwgdW5zaWduZWQgbG9uZyBmcmFjdCBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBsb25nIGZyYWN0IF9fYWRkdWRxMyAodW5zaWduZWQgbG9uZwogICAgICAgICAgbG9uZyBmcmFjdCBBLCB1bnNpZ25lZCBsb25nIGxvbmcgZnJhY3QgQikKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHNob3J0IGFjY3VtIF9fYWRkaGEzIChzaG9ydCBhY2N1bSBBLCBzaG9ydCBhY2N1bQogICAgICAgICAgQikKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGFjY3VtIF9fYWRkc2EzIChhY2N1bSBBLCBhY2N1bSBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBhY2N1bSBfX2FkZGRhMyAobG9uZyBhY2N1bSBBLCBsb25nIGFjY3VtIEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGxvbmcgYWNjdW0gX19hZGR0YTMgKGxvbmcgbG9uZyBhY2N1bSBBLCBsb25nCiAgICAgICAgICBsb25nIGFjY3VtIEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBzaG9ydCBhY2N1bSBfX2FkZHVoYTMgKHVuc2lnbmVkIHNob3J0CiAgICAgICAgICBhY2N1bSBBLCB1bnNpZ25lZCBzaG9ydCBhY2N1bSBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgYWNjdW0gX19hZGR1c2EzICh1bnNpZ25lZCBhY2N1bSBBLAogICAgICAgICAgdW5zaWduZWQgYWNjdW0gQikKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGxvbmcgYWNjdW0gX19hZGR1ZGEzICh1bnNpZ25lZCBsb25nIGFjY3VtCiAgICAgICAgICBBLCB1bnNpZ25lZCBsb25nIGFjY3VtIEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGxvbmcgYWNjdW0gX19hZGR1dGEzICh1bnNpZ25lZCBsb25nCiAgICAgICAgICBsb25nIGFjY3VtIEEsIHVuc2lnbmVkIGxvbmcgbG9uZyBhY2N1bSBCKQogICAgIFRoZXNlIGZ1bmN0aW9ucyByZXR1cm4gdGhlIHN1bSBvZiBBIGFuZCBCLgoKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHNob3J0IGZyYWN0IF9fc3NhZGRxcTMgKHNob3J0IGZyYWN0IEEsIHNob3J0IGZyYWN0CiAgICAgICAgICBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogZnJhY3QgX19zc2FkZGhxMyAoZnJhY3QgQSwgZnJhY3QgQikKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgZnJhY3QgX19zc2FkZHNxMyAobG9uZyBmcmFjdCBBLCBsb25nIGZyYWN0IEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGxvbmcgZnJhY3QgX19zc2FkZGRxMyAobG9uZyBsb25nIGZyYWN0IEEsCiAgICAgICAgICBsb25nIGxvbmcgZnJhY3QgQikKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHNob3J0IGFjY3VtIF9fc3NhZGRoYTMgKHNob3J0IGFjY3VtIEEsIHNob3J0IGFjY3VtCiAgICAgICAgICBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogYWNjdW0gX19zc2FkZHNhMyAoYWNjdW0gQSwgYWNjdW0gQikKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgYWNjdW0gX19zc2FkZGRhMyAobG9uZyBhY2N1bSBBLCBsb25nIGFjY3VtIEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGxvbmcgYWNjdW0gX19zc2FkZHRhMyAobG9uZyBsb25nIGFjY3VtIEEsCiAgICAgICAgICBsb25nIGxvbmcgYWNjdW0gQikKICAgICBUaGVzZSBmdW5jdGlvbnMgcmV0dXJuIHRoZSBzdW0gb2YgQSBhbmQgQiB3aXRoIHNpZ25lZCBzYXR1cmF0aW9uLgoKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIHNob3J0IGZyYWN0IF9fdXNhZGR1cXEzICh1bnNpZ25lZCBzaG9ydAogICAgICAgICAgZnJhY3QgQSwgdW5zaWduZWQgc2hvcnQgZnJhY3QgQikKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGZyYWN0IF9fdXNhZGR1aHEzICh1bnNpZ25lZCBmcmFjdCBBLAogICAgICAgICAgdW5zaWduZWQgZnJhY3QgQikKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGxvbmcgZnJhY3QgX191c2FkZHVzcTMgKHVuc2lnbmVkIGxvbmcKICAgICAgICAgIGZyYWN0IEEsIHVuc2lnbmVkIGxvbmcgZnJhY3QgQikKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGxvbmcgbG9uZyBmcmFjdCBfX3VzYWRkdWRxMyAodW5zaWduZWQKICAgICAgICAgIGxvbmcgbG9uZyBmcmFjdCBBLCB1bnNpZ25lZCBsb25nIGxvbmcgZnJhY3QgQikKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIHNob3J0IGFjY3VtIF9fdXNhZGR1aGEzICh1bnNpZ25lZCBzaG9ydAogICAgICAgICAgYWNjdW0gQSwgdW5zaWduZWQgc2hvcnQgYWNjdW0gQikKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGFjY3VtIF9fdXNhZGR1c2EzICh1bnNpZ25lZCBhY2N1bSBBLAogICAgICAgICAgdW5zaWduZWQgYWNjdW0gQikKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGxvbmcgYWNjdW0gX191c2FkZHVkYTMgKHVuc2lnbmVkIGxvbmcKICAgICAgICAgIGFjY3VtIEEsIHVuc2lnbmVkIGxvbmcgYWNjdW0gQikKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGxvbmcgbG9uZyBhY2N1bSBfX3VzYWRkdXRhMyAodW5zaWduZWQKICAgICAgICAgIGxvbmcgbG9uZyBhY2N1bSBBLCB1bnNpZ25lZCBsb25nIGxvbmcgYWNjdW0gQikKICAgICBUaGVzZSBmdW5jdGlvbnMgcmV0dXJuIHRoZSBzdW0gb2YgQSBhbmQgQiB3aXRoIHVuc2lnbmVkIHNhdHVyYXRpb24uCgogLS0gUnVudGltZSBGdW5jdGlvbjogc2hvcnQgZnJhY3QgX19zdWJxcTMgKHNob3J0IGZyYWN0IEEsIHNob3J0IGZyYWN0CiAgICAgICAgICBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogZnJhY3QgX19zdWJocTMgKGZyYWN0IEEsIGZyYWN0IEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGZyYWN0IF9fc3Vic3EzIChsb25nIGZyYWN0IEEsIGxvbmcgZnJhY3QgQikKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgbG9uZyBmcmFjdCBfX3N1YmRxMyAobG9uZyBsb25nIGZyYWN0IEEsIGxvbmcKICAgICAgICAgIGxvbmcgZnJhY3QgQikKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIHNob3J0IGZyYWN0IF9fc3VidXFxMyAodW5zaWduZWQgc2hvcnQKICAgICAgICAgIGZyYWN0IEEsIHVuc2lnbmVkIHNob3J0IGZyYWN0IEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBmcmFjdCBfX3N1YnVocTMgKHVuc2lnbmVkIGZyYWN0IEEsCiAgICAgICAgICB1bnNpZ25lZCBmcmFjdCBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBmcmFjdCBfX3N1YnVzcTMgKHVuc2lnbmVkIGxvbmcgZnJhY3QKICAgICAgICAgIEEsIHVuc2lnbmVkIGxvbmcgZnJhY3QgQikKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGxvbmcgbG9uZyBmcmFjdCBfX3N1YnVkcTMgKHVuc2lnbmVkIGxvbmcKICAgICAgICAgIGxvbmcgZnJhY3QgQSwgdW5zaWduZWQgbG9uZyBsb25nIGZyYWN0IEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBzaG9ydCBhY2N1bSBfX3N1YmhhMyAoc2hvcnQgYWNjdW0gQSwgc2hvcnQgYWNjdW0KICAgICAgICAgIEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBhY2N1bSBfX3N1YnNhMyAoYWNjdW0gQSwgYWNjdW0gQikKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgYWNjdW0gX19zdWJkYTMgKGxvbmcgYWNjdW0gQSwgbG9uZyBhY2N1bSBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBsb25nIGFjY3VtIF9fc3VidGEzIChsb25nIGxvbmcgYWNjdW0gQSwgbG9uZwogICAgICAgICAgbG9uZyBhY2N1bSBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgc2hvcnQgYWNjdW0gX19zdWJ1aGEzICh1bnNpZ25lZCBzaG9ydAogICAgICAgICAgYWNjdW0gQSwgdW5zaWduZWQgc2hvcnQgYWNjdW0gQikKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGFjY3VtIF9fc3VidXNhMyAodW5zaWduZWQgYWNjdW0gQSwKICAgICAgICAgIHVuc2lnbmVkIGFjY3VtIEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGFjY3VtIF9fc3VidWRhMyAodW5zaWduZWQgbG9uZyBhY2N1bQogICAgICAgICAgQSwgdW5zaWduZWQgbG9uZyBhY2N1bSBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBsb25nIGFjY3VtIF9fc3VidXRhMyAodW5zaWduZWQgbG9uZwogICAgICAgICAgbG9uZyBhY2N1bSBBLCB1bnNpZ25lZCBsb25nIGxvbmcgYWNjdW0gQikKICAgICBUaGVzZSBmdW5jdGlvbnMgcmV0dXJuIHRoZSBkaWZmZXJlbmNlIG9mIEEgYW5kIEI7IHRoYXQgaXMsICdBIC0gQicuCgogLS0gUnVudGltZSBGdW5jdGlvbjogc2hvcnQgZnJhY3QgX19zc3N1YnFxMyAoc2hvcnQgZnJhY3QgQSwgc2hvcnQgZnJhY3QKICAgICAgICAgIEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBmcmFjdCBfX3Nzc3ViaHEzIChmcmFjdCBBLCBmcmFjdCBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBmcmFjdCBfX3Nzc3Vic3EzIChsb25nIGZyYWN0IEEsIGxvbmcgZnJhY3QgQikKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgbG9uZyBmcmFjdCBfX3Nzc3ViZHEzIChsb25nIGxvbmcgZnJhY3QgQSwKICAgICAgICAgIGxvbmcgbG9uZyBmcmFjdCBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogc2hvcnQgYWNjdW0gX19zc3N1YmhhMyAoc2hvcnQgYWNjdW0gQSwgc2hvcnQgYWNjdW0KICAgICAgICAgIEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBhY2N1bSBfX3Nzc3Vic2EzIChhY2N1bSBBLCBhY2N1bSBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBhY2N1bSBfX3Nzc3ViZGEzIChsb25nIGFjY3VtIEEsIGxvbmcgYWNjdW0gQikKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgbG9uZyBhY2N1bSBfX3Nzc3VidGEzIChsb25nIGxvbmcgYWNjdW0gQSwKICAgICAgICAgIGxvbmcgbG9uZyBhY2N1bSBCKQogICAgIFRoZXNlIGZ1bmN0aW9ucyByZXR1cm4gdGhlIGRpZmZlcmVuY2Ugb2YgQSBhbmQgQiB3aXRoIHNpZ25lZAogICAgIHNhdHVyYXRpb247IHRoYXQgaXMsICdBIC0gQicuCgogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgc2hvcnQgZnJhY3QgX191c3N1YnVxcTMgKHVuc2lnbmVkIHNob3J0CiAgICAgICAgICBmcmFjdCBBLCB1bnNpZ25lZCBzaG9ydCBmcmFjdCBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgZnJhY3QgX191c3N1YnVocTMgKHVuc2lnbmVkIGZyYWN0IEEsCiAgICAgICAgICB1bnNpZ25lZCBmcmFjdCBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBmcmFjdCBfX3Vzc3VidXNxMyAodW5zaWduZWQgbG9uZwogICAgICAgICAgZnJhY3QgQSwgdW5zaWduZWQgbG9uZyBmcmFjdCBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBsb25nIGZyYWN0IF9fdXNzdWJ1ZHEzICh1bnNpZ25lZAogICAgICAgICAgbG9uZyBsb25nIGZyYWN0IEEsIHVuc2lnbmVkIGxvbmcgbG9uZyBmcmFjdCBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgc2hvcnQgYWNjdW0gX191c3N1YnVoYTMgKHVuc2lnbmVkIHNob3J0CiAgICAgICAgICBhY2N1bSBBLCB1bnNpZ25lZCBzaG9ydCBhY2N1bSBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgYWNjdW0gX191c3N1YnVzYTMgKHVuc2lnbmVkIGFjY3VtIEEsCiAgICAgICAgICB1bnNpZ25lZCBhY2N1bSBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBhY2N1bSBfX3Vzc3VidWRhMyAodW5zaWduZWQgbG9uZwogICAgICAgICAgYWNjdW0gQSwgdW5zaWduZWQgbG9uZyBhY2N1bSBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBsb25nIGFjY3VtIF9fdXNzdWJ1dGEzICh1bnNpZ25lZAogICAgICAgICAgbG9uZyBsb25nIGFjY3VtIEEsIHVuc2lnbmVkIGxvbmcgbG9uZyBhY2N1bSBCKQogICAgIFRoZXNlIGZ1bmN0aW9ucyByZXR1cm4gdGhlIGRpZmZlcmVuY2Ugb2YgQSBhbmQgQiB3aXRoIHVuc2lnbmVkCiAgICAgc2F0dXJhdGlvbjsgdGhhdCBpcywgJ0EgLSBCJy4KCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBzaG9ydCBmcmFjdCBfX211bHFxMyAoc2hvcnQgZnJhY3QgQSwgc2hvcnQgZnJhY3QKICAgICAgICAgIEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBmcmFjdCBfX211bGhxMyAoZnJhY3QgQSwgZnJhY3QgQikKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgZnJhY3QgX19tdWxzcTMgKGxvbmcgZnJhY3QgQSwgbG9uZyBmcmFjdCBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBsb25nIGZyYWN0IF9fbXVsZHEzIChsb25nIGxvbmcgZnJhY3QgQSwgbG9uZwogICAgICAgICAgbG9uZyBmcmFjdCBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgc2hvcnQgZnJhY3QgX19tdWx1cXEzICh1bnNpZ25lZCBzaG9ydAogICAgICAgICAgZnJhY3QgQSwgdW5zaWduZWQgc2hvcnQgZnJhY3QgQikKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGZyYWN0IF9fbXVsdWhxMyAodW5zaWduZWQgZnJhY3QgQSwKICAgICAgICAgIHVuc2lnbmVkIGZyYWN0IEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGZyYWN0IF9fbXVsdXNxMyAodW5zaWduZWQgbG9uZyBmcmFjdAogICAgICAgICAgQSwgdW5zaWduZWQgbG9uZyBmcmFjdCBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBsb25nIGZyYWN0IF9fbXVsdWRxMyAodW5zaWduZWQgbG9uZwogICAgICAgICAgbG9uZyBmcmFjdCBBLCB1bnNpZ25lZCBsb25nIGxvbmcgZnJhY3QgQikKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHNob3J0IGFjY3VtIF9fbXVsaGEzIChzaG9ydCBhY2N1bSBBLCBzaG9ydCBhY2N1bQogICAgICAgICAgQikKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGFjY3VtIF9fbXVsc2EzIChhY2N1bSBBLCBhY2N1bSBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBhY2N1bSBfX211bGRhMyAobG9uZyBhY2N1bSBBLCBsb25nIGFjY3VtIEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGxvbmcgYWNjdW0gX19tdWx0YTMgKGxvbmcgbG9uZyBhY2N1bSBBLCBsb25nCiAgICAgICAgICBsb25nIGFjY3VtIEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBzaG9ydCBhY2N1bSBfX211bHVoYTMgKHVuc2lnbmVkIHNob3J0CiAgICAgICAgICBhY2N1bSBBLCB1bnNpZ25lZCBzaG9ydCBhY2N1bSBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgYWNjdW0gX19tdWx1c2EzICh1bnNpZ25lZCBhY2N1bSBBLAogICAgICAgICAgdW5zaWduZWQgYWNjdW0gQikKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGxvbmcgYWNjdW0gX19tdWx1ZGEzICh1bnNpZ25lZCBsb25nIGFjY3VtCiAgICAgICAgICBBLCB1bnNpZ25lZCBsb25nIGFjY3VtIEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGxvbmcgYWNjdW0gX19tdWx1dGEzICh1bnNpZ25lZCBsb25nCiAgICAgICAgICBsb25nIGFjY3VtIEEsIHVuc2lnbmVkIGxvbmcgbG9uZyBhY2N1bSBCKQogICAgIFRoZXNlIGZ1bmN0aW9ucyByZXR1cm4gdGhlIHByb2R1Y3Qgb2YgQSBhbmQgQi4KCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBzaG9ydCBmcmFjdCBfX3NzbXVscXEzIChzaG9ydCBmcmFjdCBBLCBzaG9ydCBmcmFjdAogICAgICAgICAgQikKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGZyYWN0IF9fc3NtdWxocTMgKGZyYWN0IEEsIGZyYWN0IEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGZyYWN0IF9fc3NtdWxzcTMgKGxvbmcgZnJhY3QgQSwgbG9uZyBmcmFjdCBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBsb25nIGZyYWN0IF9fc3NtdWxkcTMgKGxvbmcgbG9uZyBmcmFjdCBBLAogICAgICAgICAgbG9uZyBsb25nIGZyYWN0IEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBzaG9ydCBhY2N1bSBfX3NzbXVsaGEzIChzaG9ydCBhY2N1bSBBLCBzaG9ydCBhY2N1bQogICAgICAgICAgQikKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGFjY3VtIF9fc3NtdWxzYTMgKGFjY3VtIEEsIGFjY3VtIEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGFjY3VtIF9fc3NtdWxkYTMgKGxvbmcgYWNjdW0gQSwgbG9uZyBhY2N1bSBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBsb25nIGFjY3VtIF9fc3NtdWx0YTMgKGxvbmcgbG9uZyBhY2N1bSBBLAogICAgICAgICAgbG9uZyBsb25nIGFjY3VtIEIpCiAgICAgVGhlc2UgZnVuY3Rpb25zIHJldHVybiB0aGUgcHJvZHVjdCBvZiBBIGFuZCBCIHdpdGggc2lnbmVkCiAgICAgc2F0dXJhdGlvbi4KCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBzaG9ydCBmcmFjdCBfX3VzbXVsdXFxMyAodW5zaWduZWQgc2hvcnQKICAgICAgICAgIGZyYWN0IEEsIHVuc2lnbmVkIHNob3J0IGZyYWN0IEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBmcmFjdCBfX3VzbXVsdWhxMyAodW5zaWduZWQgZnJhY3QgQSwKICAgICAgICAgIHVuc2lnbmVkIGZyYWN0IEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGZyYWN0IF9fdXNtdWx1c3EzICh1bnNpZ25lZCBsb25nCiAgICAgICAgICBmcmFjdCBBLCB1bnNpZ25lZCBsb25nIGZyYWN0IEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGxvbmcgZnJhY3QgX191c211bHVkcTMgKHVuc2lnbmVkCiAgICAgICAgICBsb25nIGxvbmcgZnJhY3QgQSwgdW5zaWduZWQgbG9uZyBsb25nIGZyYWN0IEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBzaG9ydCBhY2N1bSBfX3VzbXVsdWhhMyAodW5zaWduZWQgc2hvcnQKICAgICAgICAgIGFjY3VtIEEsIHVuc2lnbmVkIHNob3J0IGFjY3VtIEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBhY2N1bSBfX3VzbXVsdXNhMyAodW5zaWduZWQgYWNjdW0gQSwKICAgICAgICAgIHVuc2lnbmVkIGFjY3VtIEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGFjY3VtIF9fdXNtdWx1ZGEzICh1bnNpZ25lZCBsb25nCiAgICAgICAgICBhY2N1bSBBLCB1bnNpZ25lZCBsb25nIGFjY3VtIEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGxvbmcgYWNjdW0gX191c211bHV0YTMgKHVuc2lnbmVkCiAgICAgICAgICBsb25nIGxvbmcgYWNjdW0gQSwgdW5zaWduZWQgbG9uZyBsb25nIGFjY3VtIEIpCiAgICAgVGhlc2UgZnVuY3Rpb25zIHJldHVybiB0aGUgcHJvZHVjdCBvZiBBIGFuZCBCIHdpdGggdW5zaWduZWQKICAgICBzYXR1cmF0aW9uLgoKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHNob3J0IGZyYWN0IF9fZGl2cXEzIChzaG9ydCBmcmFjdCBBLCBzaG9ydCBmcmFjdAogICAgICAgICAgQikKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGZyYWN0IF9fZGl2aHEzIChmcmFjdCBBLCBmcmFjdCBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBmcmFjdCBfX2RpdnNxMyAobG9uZyBmcmFjdCBBLCBsb25nIGZyYWN0IEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGxvbmcgZnJhY3QgX19kaXZkcTMgKGxvbmcgbG9uZyBmcmFjdCBBLCBsb25nCiAgICAgICAgICBsb25nIGZyYWN0IEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBzaG9ydCBhY2N1bSBfX2RpdmhhMyAoc2hvcnQgYWNjdW0gQSwgc2hvcnQgYWNjdW0KICAgICAgICAgIEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBhY2N1bSBfX2RpdnNhMyAoYWNjdW0gQSwgYWNjdW0gQikKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgYWNjdW0gX19kaXZkYTMgKGxvbmcgYWNjdW0gQSwgbG9uZyBhY2N1bSBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBsb25nIGFjY3VtIF9fZGl2dGEzIChsb25nIGxvbmcgYWNjdW0gQSwgbG9uZwogICAgICAgICAgbG9uZyBhY2N1bSBCKQogICAgIFRoZXNlIGZ1bmN0aW9ucyByZXR1cm4gdGhlIHF1b3RpZW50IG9mIHRoZSBzaWduZWQgZGl2aXNpb24gb2YgQSBhbmQKICAgICBCLgoKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIHNob3J0IGZyYWN0IF9fdWRpdnVxcTMgKHVuc2lnbmVkIHNob3J0CiAgICAgICAgICBmcmFjdCBBLCB1bnNpZ25lZCBzaG9ydCBmcmFjdCBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgZnJhY3QgX191ZGl2dWhxMyAodW5zaWduZWQgZnJhY3QgQSwKICAgICAgICAgIHVuc2lnbmVkIGZyYWN0IEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGZyYWN0IF9fdWRpdnVzcTMgKHVuc2lnbmVkIGxvbmcKICAgICAgICAgIGZyYWN0IEEsIHVuc2lnbmVkIGxvbmcgZnJhY3QgQikKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGxvbmcgbG9uZyBmcmFjdCBfX3VkaXZ1ZHEzICh1bnNpZ25lZCBsb25nCiAgICAgICAgICBsb25nIGZyYWN0IEEsIHVuc2lnbmVkIGxvbmcgbG9uZyBmcmFjdCBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgc2hvcnQgYWNjdW0gX191ZGl2dWhhMyAodW5zaWduZWQgc2hvcnQKICAgICAgICAgIGFjY3VtIEEsIHVuc2lnbmVkIHNob3J0IGFjY3VtIEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBhY2N1bSBfX3VkaXZ1c2EzICh1bnNpZ25lZCBhY2N1bSBBLAogICAgICAgICAgdW5zaWduZWQgYWNjdW0gQikKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGxvbmcgYWNjdW0gX191ZGl2dWRhMyAodW5zaWduZWQgbG9uZwogICAgICAgICAgYWNjdW0gQSwgdW5zaWduZWQgbG9uZyBhY2N1bSBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBsb25nIGFjY3VtIF9fdWRpdnV0YTMgKHVuc2lnbmVkIGxvbmcKICAgICAgICAgIGxvbmcgYWNjdW0gQSwgdW5zaWduZWQgbG9uZyBsb25nIGFjY3VtIEIpCiAgICAgVGhlc2UgZnVuY3Rpb25zIHJldHVybiB0aGUgcXVvdGllbnQgb2YgdGhlIHVuc2lnbmVkIGRpdmlzaW9uIG9mIEEKICAgICBhbmQgQi4KCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBzaG9ydCBmcmFjdCBfX3NzZGl2cXEzIChzaG9ydCBmcmFjdCBBLCBzaG9ydCBmcmFjdAogICAgICAgICAgQikKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGZyYWN0IF9fc3NkaXZocTMgKGZyYWN0IEEsIGZyYWN0IEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGZyYWN0IF9fc3NkaXZzcTMgKGxvbmcgZnJhY3QgQSwgbG9uZyBmcmFjdCBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBsb25nIGZyYWN0IF9fc3NkaXZkcTMgKGxvbmcgbG9uZyBmcmFjdCBBLAogICAgICAgICAgbG9uZyBsb25nIGZyYWN0IEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBzaG9ydCBhY2N1bSBfX3NzZGl2aGEzIChzaG9ydCBhY2N1bSBBLCBzaG9ydCBhY2N1bQogICAgICAgICAgQikKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGFjY3VtIF9fc3NkaXZzYTMgKGFjY3VtIEEsIGFjY3VtIEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGFjY3VtIF9fc3NkaXZkYTMgKGxvbmcgYWNjdW0gQSwgbG9uZyBhY2N1bSBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBsb25nIGFjY3VtIF9fc3NkaXZ0YTMgKGxvbmcgbG9uZyBhY2N1bSBBLAogICAgICAgICAgbG9uZyBsb25nIGFjY3VtIEIpCiAgICAgVGhlc2UgZnVuY3Rpb25zIHJldHVybiB0aGUgcXVvdGllbnQgb2YgdGhlIHNpZ25lZCBkaXZpc2lvbiBvZiBBIGFuZAogICAgIEIgd2l0aCBzaWduZWQgc2F0dXJhdGlvbi4KCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBzaG9ydCBmcmFjdCBfX3VzZGl2dXFxMyAodW5zaWduZWQgc2hvcnQKICAgICAgICAgIGZyYWN0IEEsIHVuc2lnbmVkIHNob3J0IGZyYWN0IEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBmcmFjdCBfX3VzZGl2dWhxMyAodW5zaWduZWQgZnJhY3QgQSwKICAgICAgICAgIHVuc2lnbmVkIGZyYWN0IEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGZyYWN0IF9fdXNkaXZ1c3EzICh1bnNpZ25lZCBsb25nCiAgICAgICAgICBmcmFjdCBBLCB1bnNpZ25lZCBsb25nIGZyYWN0IEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGxvbmcgZnJhY3QgX191c2RpdnVkcTMgKHVuc2lnbmVkCiAgICAgICAgICBsb25nIGxvbmcgZnJhY3QgQSwgdW5zaWduZWQgbG9uZyBsb25nIGZyYWN0IEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBzaG9ydCBhY2N1bSBfX3VzZGl2dWhhMyAodW5zaWduZWQgc2hvcnQKICAgICAgICAgIGFjY3VtIEEsIHVuc2lnbmVkIHNob3J0IGFjY3VtIEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBhY2N1bSBfX3VzZGl2dXNhMyAodW5zaWduZWQgYWNjdW0gQSwKICAgICAgICAgIHVuc2lnbmVkIGFjY3VtIEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGFjY3VtIF9fdXNkaXZ1ZGEzICh1bnNpZ25lZCBsb25nCiAgICAgICAgICBhY2N1bSBBLCB1bnNpZ25lZCBsb25nIGFjY3VtIEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGxvbmcgYWNjdW0gX191c2RpdnV0YTMgKHVuc2lnbmVkCiAgICAgICAgICBsb25nIGxvbmcgYWNjdW0gQSwgdW5zaWduZWQgbG9uZyBsb25nIGFjY3VtIEIpCiAgICAgVGhlc2UgZnVuY3Rpb25zIHJldHVybiB0aGUgcXVvdGllbnQgb2YgdGhlIHVuc2lnbmVkIGRpdmlzaW9uIG9mIEEKICAgICBhbmQgQiB3aXRoIHVuc2lnbmVkIHNhdHVyYXRpb24uCgogLS0gUnVudGltZSBGdW5jdGlvbjogc2hvcnQgZnJhY3QgX19uZWdxcTIgKHNob3J0IGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBmcmFjdCBfX25lZ2hxMiAoZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgZnJhY3QgX19uZWdzcTIgKGxvbmcgZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgbG9uZyBmcmFjdCBfX25lZ2RxMiAobG9uZyBsb25nIGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBzaG9ydCBmcmFjdCBfX25lZ3VxcTIgKHVuc2lnbmVkIHNob3J0CiAgICAgICAgICBmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgZnJhY3QgX19uZWd1aHEyICh1bnNpZ25lZCBmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBmcmFjdCBfX25lZ3VzcTIgKHVuc2lnbmVkIGxvbmcgZnJhY3QKICAgICAgICAgIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGxvbmcgZnJhY3QgX19uZWd1ZHEyICh1bnNpZ25lZCBsb25nCiAgICAgICAgICBsb25nIGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBzaG9ydCBhY2N1bSBfX25lZ2hhMiAoc2hvcnQgYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGFjY3VtIF9fbmVnc2EyIChhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBhY2N1bSBfX25lZ2RhMiAobG9uZyBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBsb25nIGFjY3VtIF9fbmVndGEyIChsb25nIGxvbmcgYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIHNob3J0IGFjY3VtIF9fbmVndWhhMiAodW5zaWduZWQgc2hvcnQKICAgICAgICAgIGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBhY2N1bSBfX25lZ3VzYTIgKHVuc2lnbmVkIGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGFjY3VtIF9fbmVndWRhMiAodW5zaWduZWQgbG9uZyBhY2N1bQogICAgICAgICAgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGxvbmcgbG9uZyBhY2N1bSBfX25lZ3V0YTIgKHVuc2lnbmVkIGxvbmcKICAgICAgICAgIGxvbmcgYWNjdW0gQSkKICAgICBUaGVzZSBmdW5jdGlvbnMgcmV0dXJuIHRoZSBuZWdhdGlvbiBvZiBBLgoKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHNob3J0IGZyYWN0IF9fc3NuZWdxcTIgKHNob3J0IGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBmcmFjdCBfX3NzbmVnaHEyIChmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBmcmFjdCBfX3NzbmVnc3EyIChsb25nIGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGxvbmcgZnJhY3QgX19zc25lZ2RxMiAobG9uZyBsb25nIGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBzaG9ydCBhY2N1bSBfX3NzbmVnaGEyIChzaG9ydCBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogYWNjdW0gX19zc25lZ3NhMiAoYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgYWNjdW0gX19zc25lZ2RhMiAobG9uZyBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBsb25nIGFjY3VtIF9fc3NuZWd0YTIgKGxvbmcgbG9uZyBhY2N1bSBBKQogICAgIFRoZXNlIGZ1bmN0aW9ucyByZXR1cm4gdGhlIG5lZ2F0aW9uIG9mIEEgd2l0aCBzaWduZWQgc2F0dXJhdGlvbi4KCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBzaG9ydCBmcmFjdCBfX3VzbmVndXFxMiAodW5zaWduZWQgc2hvcnQKICAgICAgICAgIGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBmcmFjdCBfX3VzbmVndWhxMiAodW5zaWduZWQgZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGxvbmcgZnJhY3QgX191c25lZ3VzcTIgKHVuc2lnbmVkIGxvbmcKICAgICAgICAgIGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGxvbmcgZnJhY3QgX191c25lZ3VkcTIgKHVuc2lnbmVkCiAgICAgICAgICBsb25nIGxvbmcgZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIHNob3J0IGFjY3VtIF9fdXNuZWd1aGEyICh1bnNpZ25lZCBzaG9ydAogICAgICAgICAgYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGFjY3VtIF9fdXNuZWd1c2EyICh1bnNpZ25lZCBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBhY2N1bSBfX3VzbmVndWRhMiAodW5zaWduZWQgbG9uZwogICAgICAgICAgYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGxvbmcgbG9uZyBhY2N1bSBfX3VzbmVndXRhMiAodW5zaWduZWQKICAgICAgICAgIGxvbmcgbG9uZyBhY2N1bSBBKQogICAgIFRoZXNlIGZ1bmN0aW9ucyByZXR1cm4gdGhlIG5lZ2F0aW9uIG9mIEEgd2l0aCB1bnNpZ25lZCBzYXR1cmF0aW9uLgoKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHNob3J0IGZyYWN0IF9fYXNobHFxMyAoc2hvcnQgZnJhY3QgQSwgaW50IEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBmcmFjdCBfX2FzaGxocTMgKGZyYWN0IEEsIGludCBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBmcmFjdCBfX2FzaGxzcTMgKGxvbmcgZnJhY3QgQSwgaW50IEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGxvbmcgZnJhY3QgX19hc2hsZHEzIChsb25nIGxvbmcgZnJhY3QgQSwgaW50CiAgICAgICAgICBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgc2hvcnQgZnJhY3QgX19hc2hsdXFxMyAodW5zaWduZWQgc2hvcnQKICAgICAgICAgIGZyYWN0IEEsIGludCBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgZnJhY3QgX19hc2hsdWhxMyAodW5zaWduZWQgZnJhY3QgQSwgaW50CiAgICAgICAgICBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBmcmFjdCBfX2FzaGx1c3EzICh1bnNpZ25lZCBsb25nCiAgICAgICAgICBmcmFjdCBBLCBpbnQgQikKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGxvbmcgbG9uZyBmcmFjdCBfX2FzaGx1ZHEzICh1bnNpZ25lZCBsb25nCiAgICAgICAgICBsb25nIGZyYWN0IEEsIGludCBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogc2hvcnQgYWNjdW0gX19hc2hsaGEzIChzaG9ydCBhY2N1bSBBLCBpbnQgQikKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGFjY3VtIF9fYXNobHNhMyAoYWNjdW0gQSwgaW50IEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGFjY3VtIF9fYXNobGRhMyAobG9uZyBhY2N1bSBBLCBpbnQgQikKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgbG9uZyBhY2N1bSBfX2FzaGx0YTMgKGxvbmcgbG9uZyBhY2N1bSBBLCBpbnQKICAgICAgICAgIEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBzaG9ydCBhY2N1bSBfX2FzaGx1aGEzICh1bnNpZ25lZCBzaG9ydAogICAgICAgICAgYWNjdW0gQSwgaW50IEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBhY2N1bSBfX2FzaGx1c2EzICh1bnNpZ25lZCBhY2N1bSBBLCBpbnQKICAgICAgICAgIEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGFjY3VtIF9fYXNobHVkYTMgKHVuc2lnbmVkIGxvbmcKICAgICAgICAgIGFjY3VtIEEsIGludCBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBsb25nIGFjY3VtIF9fYXNobHV0YTMgKHVuc2lnbmVkIGxvbmcKICAgICAgICAgIGxvbmcgYWNjdW0gQSwgaW50IEIpCiAgICAgVGhlc2UgZnVuY3Rpb25zIHJldHVybiB0aGUgcmVzdWx0IG9mIHNoaWZ0aW5nIEEgbGVmdCBieSBCIGJpdHMuCgogLS0gUnVudGltZSBGdW5jdGlvbjogc2hvcnQgZnJhY3QgX19hc2hycXEzIChzaG9ydCBmcmFjdCBBLCBpbnQgQikKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGZyYWN0IF9fYXNocmhxMyAoZnJhY3QgQSwgaW50IEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGZyYWN0IF9fYXNocnNxMyAobG9uZyBmcmFjdCBBLCBpbnQgQikKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgbG9uZyBmcmFjdCBfX2FzaHJkcTMgKGxvbmcgbG9uZyBmcmFjdCBBLCBpbnQKICAgICAgICAgIEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBzaG9ydCBhY2N1bSBfX2FzaHJoYTMgKHNob3J0IGFjY3VtIEEsIGludCBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogYWNjdW0gX19hc2hyc2EzIChhY2N1bSBBLCBpbnQgQikKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgYWNjdW0gX19hc2hyZGEzIChsb25nIGFjY3VtIEEsIGludCBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBsb25nIGFjY3VtIF9fYXNocnRhMyAobG9uZyBsb25nIGFjY3VtIEEsIGludAogICAgICAgICAgQikKICAgICBUaGVzZSBmdW5jdGlvbnMgcmV0dXJuIHRoZSByZXN1bHQgb2YgYXJpdGhtZXRpY2FsbHkgc2hpZnRpbmcgQQogICAgIHJpZ2h0IGJ5IEIgYml0cy4KCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBzaG9ydCBmcmFjdCBfX2xzaHJ1cXEzICh1bnNpZ25lZCBzaG9ydAogICAgICAgICAgZnJhY3QgQSwgaW50IEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBmcmFjdCBfX2xzaHJ1aHEzICh1bnNpZ25lZCBmcmFjdCBBLCBpbnQKICAgICAgICAgIEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGZyYWN0IF9fbHNocnVzcTMgKHVuc2lnbmVkIGxvbmcKICAgICAgICAgIGZyYWN0IEEsIGludCBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBsb25nIGZyYWN0IF9fbHNocnVkcTMgKHVuc2lnbmVkIGxvbmcKICAgICAgICAgIGxvbmcgZnJhY3QgQSwgaW50IEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBzaG9ydCBhY2N1bSBfX2xzaHJ1aGEzICh1bnNpZ25lZCBzaG9ydAogICAgICAgICAgYWNjdW0gQSwgaW50IEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBhY2N1bSBfX2xzaHJ1c2EzICh1bnNpZ25lZCBhY2N1bSBBLCBpbnQKICAgICAgICAgIEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGFjY3VtIF9fbHNocnVkYTMgKHVuc2lnbmVkIGxvbmcKICAgICAgICAgIGFjY3VtIEEsIGludCBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBsb25nIGFjY3VtIF9fbHNocnV0YTMgKHVuc2lnbmVkIGxvbmcKICAgICAgICAgIGxvbmcgYWNjdW0gQSwgaW50IEIpCiAgICAgVGhlc2UgZnVuY3Rpb25zIHJldHVybiB0aGUgcmVzdWx0IG9mIGxvZ2ljYWxseSBzaGlmdGluZyBBIHJpZ2h0IGJ5CiAgICAgQiBiaXRzLgoKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGZyYWN0IF9fc3Nhc2hsaHEzIChmcmFjdCBBLCBpbnQgQikKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgZnJhY3QgX19zc2FzaGxzcTMgKGxvbmcgZnJhY3QgQSwgaW50IEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGxvbmcgZnJhY3QgX19zc2FzaGxkcTMgKGxvbmcgbG9uZyBmcmFjdCBBLAogICAgICAgICAgaW50IEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBzaG9ydCBhY2N1bSBfX3NzYXNobGhhMyAoc2hvcnQgYWNjdW0gQSwgaW50IEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBhY2N1bSBfX3NzYXNobHNhMyAoYWNjdW0gQSwgaW50IEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGFjY3VtIF9fc3Nhc2hsZGEzIChsb25nIGFjY3VtIEEsIGludCBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBsb25nIGFjY3VtIF9fc3Nhc2hsdGEzIChsb25nIGxvbmcgYWNjdW0gQSwKICAgICAgICAgIGludCBCKQogICAgIFRoZXNlIGZ1bmN0aW9ucyByZXR1cm4gdGhlIHJlc3VsdCBvZiBzaGlmdGluZyBBIGxlZnQgYnkgQiBiaXRzIHdpdGgKICAgICBzaWduZWQgc2F0dXJhdGlvbi4KCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBzaG9ydCBmcmFjdCBfX3VzYXNobHVxcTMgKHVuc2lnbmVkIHNob3J0CiAgICAgICAgICBmcmFjdCBBLCBpbnQgQikKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGZyYWN0IF9fdXNhc2hsdWhxMyAodW5zaWduZWQgZnJhY3QgQSwgaW50CiAgICAgICAgICBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBmcmFjdCBfX3VzYXNobHVzcTMgKHVuc2lnbmVkIGxvbmcKICAgICAgICAgIGZyYWN0IEEsIGludCBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBsb25nIGZyYWN0IF9fdXNhc2hsdWRxMyAodW5zaWduZWQKICAgICAgICAgIGxvbmcgbG9uZyBmcmFjdCBBLCBpbnQgQikKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIHNob3J0IGFjY3VtIF9fdXNhc2hsdWhhMyAodW5zaWduZWQgc2hvcnQKICAgICAgICAgIGFjY3VtIEEsIGludCBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgYWNjdW0gX191c2FzaGx1c2EzICh1bnNpZ25lZCBhY2N1bSBBLCBpbnQKICAgICAgICAgIEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGFjY3VtIF9fdXNhc2hsdWRhMyAodW5zaWduZWQgbG9uZwogICAgICAgICAgYWNjdW0gQSwgaW50IEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGxvbmcgYWNjdW0gX191c2FzaGx1dGEzICh1bnNpZ25lZAogICAgICAgICAgbG9uZyBsb25nIGFjY3VtIEEsIGludCBCKQogICAgIFRoZXNlIGZ1bmN0aW9ucyByZXR1cm4gdGhlIHJlc3VsdCBvZiBzaGlmdGluZyBBIGxlZnQgYnkgQiBiaXRzIHdpdGgKICAgICB1bnNpZ25lZCBzYXR1cmF0aW9uLgoKNC40LjIgQ29tcGFyaXNvbiBmdW5jdGlvbnMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KClRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGltcGxlbWVudCBmaXhlZC1wb2ludCBjb21wYXJpc29ucy4gIFRoZXNlCmZ1bmN0aW9ucyBpbXBsZW1lbnQgYSBsb3ctbGV2ZWwgY29tcGFyZSwgdXBvbiB3aGljaCB0aGUgaGlnaGVyIGxldmVsCmNvbXBhcmlzb24gb3BlcmF0b3JzIChzdWNoIGFzIGxlc3MgdGhhbiBhbmQgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvKQpjYW4gYmUgY29uc3RydWN0ZWQuICBUaGUgcmV0dXJuZWQgdmFsdWVzIGxpZSBpbiB0aGUgcmFuZ2UgemVybyB0byB0d28sCnRvIGFsbG93IHRoZSBoaWdoLWxldmVsIG9wZXJhdG9ycyB0byBiZSBpbXBsZW1lbnRlZCBieSB0ZXN0aW5nIHRoZQpyZXR1cm5lZCByZXN1bHQgdXNpbmcgZWl0aGVyIHNpZ25lZCBvciB1bnNpZ25lZCBjb21wYXJpc29uLgoKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGludCBfX2NtcHFxMiAoc2hvcnQgZnJhY3QgQSwgc2hvcnQgZnJhY3QgQikKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGludCBfX2NtcGhxMiAoZnJhY3QgQSwgZnJhY3QgQikKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGludCBfX2NtcHNxMiAobG9uZyBmcmFjdCBBLCBsb25nIGZyYWN0IEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBpbnQgX19jbXBkcTIgKGxvbmcgbG9uZyBmcmFjdCBBLCBsb25nIGxvbmcgZnJhY3QKICAgICAgICAgIEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBpbnQgX19jbXB1cXEyICh1bnNpZ25lZCBzaG9ydCBmcmFjdCBBLCB1bnNpZ25lZAogICAgICAgICAgc2hvcnQgZnJhY3QgQikKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGludCBfX2NtcHVocTIgKHVuc2lnbmVkIGZyYWN0IEEsIHVuc2lnbmVkIGZyYWN0IEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBpbnQgX19jbXB1c3EyICh1bnNpZ25lZCBsb25nIGZyYWN0IEEsIHVuc2lnbmVkCiAgICAgICAgICBsb25nIGZyYWN0IEIpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBpbnQgX19jbXB1ZHEyICh1bnNpZ25lZCBsb25nIGxvbmcgZnJhY3QgQSwKICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBmcmFjdCBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogaW50IF9fY21waGEyIChzaG9ydCBhY2N1bSBBLCBzaG9ydCBhY2N1bSBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogaW50IF9fY21wc2EyIChhY2N1bSBBLCBhY2N1bSBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogaW50IF9fY21wZGEyIChsb25nIGFjY3VtIEEsIGxvbmcgYWNjdW0gQikKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGludCBfX2NtcHRhMiAobG9uZyBsb25nIGFjY3VtIEEsIGxvbmcgbG9uZyBhY2N1bQogICAgICAgICAgQikKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGludCBfX2NtcHVoYTIgKHVuc2lnbmVkIHNob3J0IGFjY3VtIEEsIHVuc2lnbmVkCiAgICAgICAgICBzaG9ydCBhY2N1bSBCKQogLS0gUnVudGltZSBGdW5jdGlvbjogaW50IF9fY21wdXNhMiAodW5zaWduZWQgYWNjdW0gQSwgdW5zaWduZWQgYWNjdW0gQikKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGludCBfX2NtcHVkYTIgKHVuc2lnbmVkIGxvbmcgYWNjdW0gQSwgdW5zaWduZWQKICAgICAgICAgIGxvbmcgYWNjdW0gQikKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGludCBfX2NtcHV0YTIgKHVuc2lnbmVkIGxvbmcgbG9uZyBhY2N1bSBBLAogICAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIGFjY3VtIEIpCiAgICAgVGhlc2UgZnVuY3Rpb25zIHBlcmZvcm0gYSBzaWduZWQgb3IgdW5zaWduZWQgY29tcGFyaXNvbiBvZiBBIGFuZCBCCiAgICAgKGRlcGVuZGluZyBvbiB0aGUgc2VsZWN0ZWQgbWFjaGluZSBtb2RlKS4gIElmIEEgaXMgbGVzcyB0aGFuIEIsCiAgICAgdGhleSByZXR1cm4gMDsgaWYgQSBpcyBncmVhdGVyIHRoYW4gQiwgdGhleSByZXR1cm4gMjsgYW5kIGlmIEEgYW5kCiAgICAgQiBhcmUgZXF1YWwgdGhleSByZXR1cm4gMS4KCjQuNC4zIENvbnZlcnNpb24gZnVuY3Rpb25zCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogLS0gUnVudGltZSBGdW5jdGlvbjogZnJhY3QgX19mcmFjdHFxaHEyIChzaG9ydCBmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBmcmFjdCBfX2ZyYWN0cXFzcTIgKHNob3J0IGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGxvbmcgZnJhY3QgX19mcmFjdHFxZHEyIChzaG9ydCBmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogc2hvcnQgYWNjdW0gX19mcmFjdHFxaGEgKHNob3J0IGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBhY2N1bSBfX2ZyYWN0cXFzYSAoc2hvcnQgZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgYWNjdW0gX19mcmFjdHFxZGEgKHNob3J0IGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGxvbmcgYWNjdW0gX19mcmFjdHFxdGEgKHNob3J0IGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBzaG9ydCBmcmFjdCBfX2ZyYWN0cXF1cXEgKHNob3J0IGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBmcmFjdCBfX2ZyYWN0cXF1aHEgKHNob3J0IGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGZyYWN0IF9fZnJhY3RxcXVzcSAoc2hvcnQgZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGxvbmcgbG9uZyBmcmFjdCBfX2ZyYWN0cXF1ZHEgKHNob3J0IGZyYWN0CiAgICAgICAgICBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgc2hvcnQgYWNjdW0gX19mcmFjdHFxdWhhIChzaG9ydCBmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgYWNjdW0gX19mcmFjdHFxdXNhIChzaG9ydCBmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBhY2N1bSBfX2ZyYWN0cXF1ZGEgKHNob3J0IGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGxvbmcgYWNjdW0gX19mcmFjdHFxdXRhIChzaG9ydCBmcmFjdAogICAgICAgICAgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHNpZ25lZCBjaGFyIF9fZnJhY3RxcXFpIChzaG9ydCBmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogc2hvcnQgX19mcmFjdHFxaGkgKHNob3J0IGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBpbnQgX19mcmFjdHFxc2kgKHNob3J0IGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIF9fZnJhY3RxcWRpIChzaG9ydCBmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBsb25nIF9fZnJhY3RxcXRpIChzaG9ydCBmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogZmxvYXQgX19mcmFjdHFxc2YgKHNob3J0IGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBkb3VibGUgX19mcmFjdHFxZGYgKHNob3J0IGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBzaG9ydCBmcmFjdCBfX2ZyYWN0aHFxcTIgKGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGZyYWN0IF9fZnJhY3RocXNxMiAoZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgbG9uZyBmcmFjdCBfX2ZyYWN0aHFkcTIgKGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBzaG9ydCBhY2N1bSBfX2ZyYWN0aHFoYSAoZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGFjY3VtIF9fZnJhY3RocXNhIChmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBhY2N1bSBfX2ZyYWN0aHFkYSAoZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgbG9uZyBhY2N1bSBfX2ZyYWN0aHF0YSAoZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIHNob3J0IGZyYWN0IF9fZnJhY3RocXVxcSAoZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGZyYWN0IF9fZnJhY3RocXVocSAoZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGxvbmcgZnJhY3QgX19mcmFjdGhxdXNxIChmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBsb25nIGZyYWN0IF9fZnJhY3RocXVkcSAoZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIHNob3J0IGFjY3VtIF9fZnJhY3RocXVoYSAoZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGFjY3VtIF9fZnJhY3RocXVzYSAoZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGxvbmcgYWNjdW0gX19mcmFjdGhxdWRhIChmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBsb25nIGFjY3VtIF9fZnJhY3RocXV0YSAoZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHNpZ25lZCBjaGFyIF9fZnJhY3RocXFpIChmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogc2hvcnQgX19mcmFjdGhxaGkgKGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBpbnQgX19mcmFjdGhxc2kgKGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIF9fZnJhY3RocWRpIChmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBsb25nIF9fZnJhY3RocXRpIChmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogZmxvYXQgX19mcmFjdGhxc2YgKGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBkb3VibGUgX19mcmFjdGhxZGYgKGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBzaG9ydCBmcmFjdCBfX2ZyYWN0c3FxcTIgKGxvbmcgZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGZyYWN0IF9fZnJhY3RzcWhxMiAobG9uZyBmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBsb25nIGZyYWN0IF9fZnJhY3RzcWRxMiAobG9uZyBmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogc2hvcnQgYWNjdW0gX19mcmFjdHNxaGEgKGxvbmcgZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGFjY3VtIF9fZnJhY3RzcXNhIChsb25nIGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGFjY3VtIF9fZnJhY3RzcWRhIChsb25nIGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGxvbmcgYWNjdW0gX19mcmFjdHNxdGEgKGxvbmcgZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIHNob3J0IGZyYWN0IF9fZnJhY3RzcXVxcSAobG9uZyBmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgZnJhY3QgX19mcmFjdHNxdWhxIChsb25nIGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGZyYWN0IF9fZnJhY3RzcXVzcSAobG9uZyBmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBsb25nIGZyYWN0IF9fZnJhY3RzcXVkcSAobG9uZyBmcmFjdAogICAgICAgICAgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIHNob3J0IGFjY3VtIF9fZnJhY3RzcXVoYSAobG9uZyBmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgYWNjdW0gX19mcmFjdHNxdXNhIChsb25nIGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGFjY3VtIF9fZnJhY3RzcXVkYSAobG9uZyBmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBsb25nIGFjY3VtIF9fZnJhY3RzcXV0YSAobG9uZyBmcmFjdAogICAgICAgICAgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHNpZ25lZCBjaGFyIF9fZnJhY3RzcXFpIChsb25nIGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBzaG9ydCBfX2ZyYWN0c3FoaSAobG9uZyBmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogaW50IF9fZnJhY3RzcXNpIChsb25nIGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIF9fZnJhY3RzcWRpIChsb25nIGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGxvbmcgX19mcmFjdHNxdGkgKGxvbmcgZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGZsb2F0IF9fZnJhY3RzcXNmIChsb25nIGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBkb3VibGUgX19mcmFjdHNxZGYgKGxvbmcgZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHNob3J0IGZyYWN0IF9fZnJhY3RkcXFxMiAobG9uZyBsb25nIGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBmcmFjdCBfX2ZyYWN0ZHFocTIgKGxvbmcgbG9uZyBmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBmcmFjdCBfX2ZyYWN0ZHFzcTIgKGxvbmcgbG9uZyBmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogc2hvcnQgYWNjdW0gX19mcmFjdGRxaGEgKGxvbmcgbG9uZyBmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogYWNjdW0gX19mcmFjdGRxc2EgKGxvbmcgbG9uZyBmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBhY2N1bSBfX2ZyYWN0ZHFkYSAobG9uZyBsb25nIGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGxvbmcgYWNjdW0gX19mcmFjdGRxdGEgKGxvbmcgbG9uZyBmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgc2hvcnQgZnJhY3QgX19mcmFjdGRxdXFxIChsb25nIGxvbmcgZnJhY3QKICAgICAgICAgIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBmcmFjdCBfX2ZyYWN0ZHF1aHEgKGxvbmcgbG9uZyBmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBmcmFjdCBfX2ZyYWN0ZHF1c3EgKGxvbmcgbG9uZyBmcmFjdAogICAgICAgICAgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGxvbmcgbG9uZyBmcmFjdCBfX2ZyYWN0ZHF1ZHEgKGxvbmcgbG9uZwogICAgICAgICAgZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIHNob3J0IGFjY3VtIF9fZnJhY3RkcXVoYSAobG9uZyBsb25nIGZyYWN0CiAgICAgICAgICBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgYWNjdW0gX19mcmFjdGRxdXNhIChsb25nIGxvbmcgZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGxvbmcgYWNjdW0gX19mcmFjdGRxdWRhIChsb25nIGxvbmcgZnJhY3QKICAgICAgICAgIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGxvbmcgYWNjdW0gX19mcmFjdGRxdXRhIChsb25nIGxvbmcKICAgICAgICAgIGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBzaWduZWQgY2hhciBfX2ZyYWN0ZHFxaSAobG9uZyBsb25nIGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBzaG9ydCBfX2ZyYWN0ZHFoaSAobG9uZyBsb25nIGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBpbnQgX19mcmFjdGRxc2kgKGxvbmcgbG9uZyBmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBfX2ZyYWN0ZHFkaSAobG9uZyBsb25nIGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGxvbmcgX19mcmFjdGRxdGkgKGxvbmcgbG9uZyBmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogZmxvYXQgX19mcmFjdGRxc2YgKGxvbmcgbG9uZyBmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogZG91YmxlIF9fZnJhY3RkcWRmIChsb25nIGxvbmcgZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHNob3J0IGZyYWN0IF9fZnJhY3RoYXFxIChzaG9ydCBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogZnJhY3QgX19mcmFjdGhhaHEgKHNob3J0IGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGZyYWN0IF9fZnJhY3RoYXNxIChzaG9ydCBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBsb25nIGZyYWN0IF9fZnJhY3RoYWRxIChzaG9ydCBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogYWNjdW0gX19mcmFjdGhhc2EyIChzaG9ydCBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBhY2N1bSBfX2ZyYWN0aGFkYTIgKHNob3J0IGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGxvbmcgYWNjdW0gX19mcmFjdGhhdGEyIChzaG9ydCBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgc2hvcnQgZnJhY3QgX19mcmFjdGhhdXFxIChzaG9ydCBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgZnJhY3QgX19mcmFjdGhhdWhxIChzaG9ydCBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBmcmFjdCBfX2ZyYWN0aGF1c3EgKHNob3J0IGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGxvbmcgZnJhY3QgX19mcmFjdGhhdWRxIChzaG9ydCBhY2N1bQogICAgICAgICAgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIHNob3J0IGFjY3VtIF9fZnJhY3RoYXVoYSAoc2hvcnQgYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGFjY3VtIF9fZnJhY3RoYXVzYSAoc2hvcnQgYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGxvbmcgYWNjdW0gX19mcmFjdGhhdWRhIChzaG9ydCBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBsb25nIGFjY3VtIF9fZnJhY3RoYXV0YSAoc2hvcnQgYWNjdW0KICAgICAgICAgIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBzaWduZWQgY2hhciBfX2ZyYWN0aGFxaSAoc2hvcnQgYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHNob3J0IF9fZnJhY3RoYWhpIChzaG9ydCBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogaW50IF9fZnJhY3RoYXNpIChzaG9ydCBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBfX2ZyYWN0aGFkaSAoc2hvcnQgYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgbG9uZyBfX2ZyYWN0aGF0aSAoc2hvcnQgYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGZsb2F0IF9fZnJhY3RoYXNmIChzaG9ydCBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogZG91YmxlIF9fZnJhY3RoYWRmIChzaG9ydCBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogc2hvcnQgZnJhY3QgX19mcmFjdHNhcXEgKGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBmcmFjdCBfX2ZyYWN0c2FocSAoYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgZnJhY3QgX19mcmFjdHNhc3EgKGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGxvbmcgZnJhY3QgX19mcmFjdHNhZHEgKGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBzaG9ydCBhY2N1bSBfX2ZyYWN0c2FoYTIgKGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGFjY3VtIF9fZnJhY3RzYWRhMiAoYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgbG9uZyBhY2N1bSBfX2ZyYWN0c2F0YTIgKGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBzaG9ydCBmcmFjdCBfX2ZyYWN0c2F1cXEgKGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBmcmFjdCBfX2ZyYWN0c2F1aHEgKGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGZyYWN0IF9fZnJhY3RzYXVzcSAoYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGxvbmcgbG9uZyBmcmFjdCBfX2ZyYWN0c2F1ZHEgKGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBzaG9ydCBhY2N1bSBfX2ZyYWN0c2F1aGEgKGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBhY2N1bSBfX2ZyYWN0c2F1c2EgKGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGFjY3VtIF9fZnJhY3RzYXVkYSAoYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGxvbmcgbG9uZyBhY2N1bSBfX2ZyYWN0c2F1dGEgKGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBzaWduZWQgY2hhciBfX2ZyYWN0c2FxaSAoYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHNob3J0IF9fZnJhY3RzYWhpIChhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogaW50IF9fZnJhY3RzYXNpIChhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBfX2ZyYWN0c2FkaSAoYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgbG9uZyBfX2ZyYWN0c2F0aSAoYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGZsb2F0IF9fZnJhY3RzYXNmIChhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogZG91YmxlIF9fZnJhY3RzYWRmIChhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogc2hvcnQgZnJhY3QgX19mcmFjdGRhcXEgKGxvbmcgYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGZyYWN0IF9fZnJhY3RkYWhxIChsb25nIGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGZyYWN0IF9fZnJhY3RkYXNxIChsb25nIGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGxvbmcgZnJhY3QgX19mcmFjdGRhZHEgKGxvbmcgYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHNob3J0IGFjY3VtIF9fZnJhY3RkYWhhMiAobG9uZyBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogYWNjdW0gX19mcmFjdGRhc2EyIChsb25nIGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGxvbmcgYWNjdW0gX19mcmFjdGRhdGEyIChsb25nIGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBzaG9ydCBmcmFjdCBfX2ZyYWN0ZGF1cXEgKGxvbmcgYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGZyYWN0IF9fZnJhY3RkYXVocSAobG9uZyBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBmcmFjdCBfX2ZyYWN0ZGF1c3EgKGxvbmcgYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGxvbmcgbG9uZyBmcmFjdCBfX2ZyYWN0ZGF1ZHEgKGxvbmcgYWNjdW0KICAgICAgICAgIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBzaG9ydCBhY2N1bSBfX2ZyYWN0ZGF1aGEgKGxvbmcgYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGFjY3VtIF9fZnJhY3RkYXVzYSAobG9uZyBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBhY2N1bSBfX2ZyYWN0ZGF1ZGEgKGxvbmcgYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGxvbmcgbG9uZyBhY2N1bSBfX2ZyYWN0ZGF1dGEgKGxvbmcgYWNjdW0KICAgICAgICAgIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBzaWduZWQgY2hhciBfX2ZyYWN0ZGFxaSAobG9uZyBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogc2hvcnQgX19mcmFjdGRhaGkgKGxvbmcgYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGludCBfX2ZyYWN0ZGFzaSAobG9uZyBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBfX2ZyYWN0ZGFkaSAobG9uZyBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBsb25nIF9fZnJhY3RkYXRpIChsb25nIGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBmbG9hdCBfX2ZyYWN0ZGFzZiAobG9uZyBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogZG91YmxlIF9fZnJhY3RkYWRmIChsb25nIGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBzaG9ydCBmcmFjdCBfX2ZyYWN0dGFxcSAobG9uZyBsb25nIGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBmcmFjdCBfX2ZyYWN0dGFocSAobG9uZyBsb25nIGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGZyYWN0IF9fZnJhY3R0YXNxIChsb25nIGxvbmcgYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgbG9uZyBmcmFjdCBfX2ZyYWN0dGFkcSAobG9uZyBsb25nIGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBzaG9ydCBhY2N1bSBfX2ZyYWN0dGFoYTIgKGxvbmcgbG9uZyBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogYWNjdW0gX19mcmFjdHRhc2EyIChsb25nIGxvbmcgYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgYWNjdW0gX19mcmFjdHRhZGEyIChsb25nIGxvbmcgYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIHNob3J0IGZyYWN0IF9fZnJhY3R0YXVxcSAobG9uZyBsb25nIGFjY3VtCiAgICAgICAgICBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgZnJhY3QgX19mcmFjdHRhdWhxIChsb25nIGxvbmcgYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGxvbmcgZnJhY3QgX19mcmFjdHRhdXNxIChsb25nIGxvbmcgYWNjdW0KICAgICAgICAgIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGxvbmcgZnJhY3QgX19mcmFjdHRhdWRxIChsb25nIGxvbmcKICAgICAgICAgIGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBzaG9ydCBhY2N1bSBfX2ZyYWN0dGF1aGEgKGxvbmcgbG9uZyBhY2N1bQogICAgICAgICAgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGFjY3VtIF9fZnJhY3R0YXVzYSAobG9uZyBsb25nIGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGFjY3VtIF9fZnJhY3R0YXVkYSAobG9uZyBsb25nIGFjY3VtCiAgICAgICAgICBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBsb25nIGFjY3VtIF9fZnJhY3R0YXV0YSAobG9uZyBsb25nCiAgICAgICAgICBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogc2lnbmVkIGNoYXIgX19mcmFjdHRhcWkgKGxvbmcgbG9uZyBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogc2hvcnQgX19mcmFjdHRhaGkgKGxvbmcgbG9uZyBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogaW50IF9fZnJhY3R0YXNpIChsb25nIGxvbmcgYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgX19mcmFjdHRhZGkgKGxvbmcgbG9uZyBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBsb25nIF9fZnJhY3R0YXRpIChsb25nIGxvbmcgYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGZsb2F0IF9fZnJhY3R0YXNmIChsb25nIGxvbmcgYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGRvdWJsZSBfX2ZyYWN0dGFkZiAobG9uZyBsb25nIGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBzaG9ydCBmcmFjdCBfX2ZyYWN0dXFxcXEgKHVuc2lnbmVkIHNob3J0IGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBmcmFjdCBfX2ZyYWN0dXFxaHEgKHVuc2lnbmVkIHNob3J0IGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGZyYWN0IF9fZnJhY3R1cXFzcSAodW5zaWduZWQgc2hvcnQgZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgbG9uZyBmcmFjdCBfX2ZyYWN0dXFxZHEgKHVuc2lnbmVkIHNob3J0IGZyYWN0CiAgICAgICAgICBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogc2hvcnQgYWNjdW0gX19mcmFjdHVxcWhhICh1bnNpZ25lZCBzaG9ydCBmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogYWNjdW0gX19mcmFjdHVxcXNhICh1bnNpZ25lZCBzaG9ydCBmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBhY2N1bSBfX2ZyYWN0dXFxZGEgKHVuc2lnbmVkIHNob3J0IGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGxvbmcgYWNjdW0gX19mcmFjdHVxcXRhICh1bnNpZ25lZCBzaG9ydCBmcmFjdAogICAgICAgICAgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGZyYWN0IF9fZnJhY3R1cXF1aHEyICh1bnNpZ25lZCBzaG9ydAogICAgICAgICAgZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGxvbmcgZnJhY3QgX19mcmFjdHVxcXVzcTIgKHVuc2lnbmVkIHNob3J0CiAgICAgICAgICBmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBsb25nIGZyYWN0IF9fZnJhY3R1cXF1ZHEyICh1bnNpZ25lZAogICAgICAgICAgc2hvcnQgZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIHNob3J0IGFjY3VtIF9fZnJhY3R1cXF1aGEgKHVuc2lnbmVkIHNob3J0CiAgICAgICAgICBmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgYWNjdW0gX19mcmFjdHVxcXVzYSAodW5zaWduZWQgc2hvcnQgZnJhY3QKICAgICAgICAgIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGFjY3VtIF9fZnJhY3R1cXF1ZGEgKHVuc2lnbmVkIHNob3J0CiAgICAgICAgICBmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBsb25nIGFjY3VtIF9fZnJhY3R1cXF1dGEgKHVuc2lnbmVkCiAgICAgICAgICBzaG9ydCBmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogc2lnbmVkIGNoYXIgX19mcmFjdHVxcXFpICh1bnNpZ25lZCBzaG9ydCBmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogc2hvcnQgX19mcmFjdHVxcWhpICh1bnNpZ25lZCBzaG9ydCBmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogaW50IF9fZnJhY3R1cXFzaSAodW5zaWduZWQgc2hvcnQgZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgX19mcmFjdHVxcWRpICh1bnNpZ25lZCBzaG9ydCBmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBsb25nIF9fZnJhY3R1cXF0aSAodW5zaWduZWQgc2hvcnQgZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGZsb2F0IF9fZnJhY3R1cXFzZiAodW5zaWduZWQgc2hvcnQgZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGRvdWJsZSBfX2ZyYWN0dXFxZGYgKHVuc2lnbmVkIHNob3J0IGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBzaG9ydCBmcmFjdCBfX2ZyYWN0dWhxcXEgKHVuc2lnbmVkIGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBmcmFjdCBfX2ZyYWN0dWhxaHEgKHVuc2lnbmVkIGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGZyYWN0IF9fZnJhY3R1aHFzcSAodW5zaWduZWQgZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgbG9uZyBmcmFjdCBfX2ZyYWN0dWhxZHEgKHVuc2lnbmVkIGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBzaG9ydCBhY2N1bSBfX2ZyYWN0dWhxaGEgKHVuc2lnbmVkIGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBhY2N1bSBfX2ZyYWN0dWhxc2EgKHVuc2lnbmVkIGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGFjY3VtIF9fZnJhY3R1aHFkYSAodW5zaWduZWQgZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgbG9uZyBhY2N1bSBfX2ZyYWN0dWhxdGEgKHVuc2lnbmVkIGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBzaG9ydCBmcmFjdCBfX2ZyYWN0dWhxdXFxMiAodW5zaWduZWQKICAgICAgICAgIGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGZyYWN0IF9fZnJhY3R1aHF1c3EyICh1bnNpZ25lZCBmcmFjdAogICAgICAgICAgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGxvbmcgbG9uZyBmcmFjdCBfX2ZyYWN0dWhxdWRxMiAodW5zaWduZWQKICAgICAgICAgIGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBzaG9ydCBhY2N1bSBfX2ZyYWN0dWhxdWhhICh1bnNpZ25lZCBmcmFjdAogICAgICAgICAgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGFjY3VtIF9fZnJhY3R1aHF1c2EgKHVuc2lnbmVkIGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGFjY3VtIF9fZnJhY3R1aHF1ZGEgKHVuc2lnbmVkIGZyYWN0CiAgICAgICAgICBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBsb25nIGFjY3VtIF9fZnJhY3R1aHF1dGEgKHVuc2lnbmVkCiAgICAgICAgICBmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogc2lnbmVkIGNoYXIgX19mcmFjdHVocXFpICh1bnNpZ25lZCBmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogc2hvcnQgX19mcmFjdHVocWhpICh1bnNpZ25lZCBmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogaW50IF9fZnJhY3R1aHFzaSAodW5zaWduZWQgZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgX19mcmFjdHVocWRpICh1bnNpZ25lZCBmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBsb25nIF9fZnJhY3R1aHF0aSAodW5zaWduZWQgZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGZsb2F0IF9fZnJhY3R1aHFzZiAodW5zaWduZWQgZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGRvdWJsZSBfX2ZyYWN0dWhxZGYgKHVuc2lnbmVkIGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBzaG9ydCBmcmFjdCBfX2ZyYWN0dXNxcXEgKHVuc2lnbmVkIGxvbmcgZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGZyYWN0IF9fZnJhY3R1c3FocSAodW5zaWduZWQgbG9uZyBmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBmcmFjdCBfX2ZyYWN0dXNxc3EgKHVuc2lnbmVkIGxvbmcgZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgbG9uZyBmcmFjdCBfX2ZyYWN0dXNxZHEgKHVuc2lnbmVkIGxvbmcgZnJhY3QKICAgICAgICAgIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBzaG9ydCBhY2N1bSBfX2ZyYWN0dXNxaGEgKHVuc2lnbmVkIGxvbmcgZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGFjY3VtIF9fZnJhY3R1c3FzYSAodW5zaWduZWQgbG9uZyBmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBhY2N1bSBfX2ZyYWN0dXNxZGEgKHVuc2lnbmVkIGxvbmcgZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgbG9uZyBhY2N1bSBfX2ZyYWN0dXNxdGEgKHVuc2lnbmVkIGxvbmcgZnJhY3QKICAgICAgICAgIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBzaG9ydCBmcmFjdCBfX2ZyYWN0dXNxdXFxMiAodW5zaWduZWQgbG9uZwogICAgICAgICAgZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGZyYWN0IF9fZnJhY3R1c3F1aHEyICh1bnNpZ25lZCBsb25nIGZyYWN0CiAgICAgICAgICBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBsb25nIGZyYWN0IF9fZnJhY3R1c3F1ZHEyICh1bnNpZ25lZAogICAgICAgICAgbG9uZyBmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgc2hvcnQgYWNjdW0gX19mcmFjdHVzcXVoYSAodW5zaWduZWQgbG9uZwogICAgICAgICAgZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGFjY3VtIF9fZnJhY3R1c3F1c2EgKHVuc2lnbmVkIGxvbmcgZnJhY3QKICAgICAgICAgIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGFjY3VtIF9fZnJhY3R1c3F1ZGEgKHVuc2lnbmVkIGxvbmcKICAgICAgICAgIGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGxvbmcgYWNjdW0gX19mcmFjdHVzcXV0YSAodW5zaWduZWQKICAgICAgICAgIGxvbmcgZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHNpZ25lZCBjaGFyIF9fZnJhY3R1c3FxaSAodW5zaWduZWQgbG9uZyBmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogc2hvcnQgX19mcmFjdHVzcWhpICh1bnNpZ25lZCBsb25nIGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBpbnQgX19mcmFjdHVzcXNpICh1bnNpZ25lZCBsb25nIGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIF9fZnJhY3R1c3FkaSAodW5zaWduZWQgbG9uZyBmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBsb25nIF9fZnJhY3R1c3F0aSAodW5zaWduZWQgbG9uZyBmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogZmxvYXQgX19mcmFjdHVzcXNmICh1bnNpZ25lZCBsb25nIGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBkb3VibGUgX19mcmFjdHVzcWRmICh1bnNpZ25lZCBsb25nIGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBzaG9ydCBmcmFjdCBfX2ZyYWN0dWRxcXEgKHVuc2lnbmVkIGxvbmcgbG9uZyBmcmFjdAogICAgICAgICAgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGZyYWN0IF9fZnJhY3R1ZHFocSAodW5zaWduZWQgbG9uZyBsb25nIGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGZyYWN0IF9fZnJhY3R1ZHFzcSAodW5zaWduZWQgbG9uZyBsb25nIGZyYWN0CiAgICAgICAgICBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBsb25nIGZyYWN0IF9fZnJhY3R1ZHFkcSAodW5zaWduZWQgbG9uZyBsb25nCiAgICAgICAgICBmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogc2hvcnQgYWNjdW0gX19mcmFjdHVkcWhhICh1bnNpZ25lZCBsb25nIGxvbmcgZnJhY3QKICAgICAgICAgIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBhY2N1bSBfX2ZyYWN0dWRxc2EgKHVuc2lnbmVkIGxvbmcgbG9uZyBmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBhY2N1bSBfX2ZyYWN0dWRxZGEgKHVuc2lnbmVkIGxvbmcgbG9uZyBmcmFjdAogICAgICAgICAgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgbG9uZyBhY2N1bSBfX2ZyYWN0dWRxdGEgKHVuc2lnbmVkIGxvbmcgbG9uZwogICAgICAgICAgZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIHNob3J0IGZyYWN0IF9fZnJhY3R1ZHF1cXEyICh1bnNpZ25lZCBsb25nCiAgICAgICAgICBsb25nIGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBmcmFjdCBfX2ZyYWN0dWRxdWhxMiAodW5zaWduZWQgbG9uZyBsb25nCiAgICAgICAgICBmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBmcmFjdCBfX2ZyYWN0dWRxdXNxMiAodW5zaWduZWQgbG9uZwogICAgICAgICAgbG9uZyBmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgc2hvcnQgYWNjdW0gX19mcmFjdHVkcXVoYSAodW5zaWduZWQgbG9uZwogICAgICAgICAgbG9uZyBmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgYWNjdW0gX19mcmFjdHVkcXVzYSAodW5zaWduZWQgbG9uZyBsb25nCiAgICAgICAgICBmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBhY2N1bSBfX2ZyYWN0dWRxdWRhICh1bnNpZ25lZCBsb25nCiAgICAgICAgICBsb25nIGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGxvbmcgYWNjdW0gX19mcmFjdHVkcXV0YSAodW5zaWduZWQKICAgICAgICAgIGxvbmcgbG9uZyBmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogc2lnbmVkIGNoYXIgX19mcmFjdHVkcXFpICh1bnNpZ25lZCBsb25nIGxvbmcgZnJhY3QKICAgICAgICAgIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBzaG9ydCBfX2ZyYWN0dWRxaGkgKHVuc2lnbmVkIGxvbmcgbG9uZyBmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogaW50IF9fZnJhY3R1ZHFzaSAodW5zaWduZWQgbG9uZyBsb25nIGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIF9fZnJhY3R1ZHFkaSAodW5zaWduZWQgbG9uZyBsb25nIGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGxvbmcgX19mcmFjdHVkcXRpICh1bnNpZ25lZCBsb25nIGxvbmcgZnJhY3QKICAgICAgICAgIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBmbG9hdCBfX2ZyYWN0dWRxc2YgKHVuc2lnbmVkIGxvbmcgbG9uZyBmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogZG91YmxlIF9fZnJhY3R1ZHFkZiAodW5zaWduZWQgbG9uZyBsb25nIGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBzaG9ydCBmcmFjdCBfX2ZyYWN0dWhhcXEgKHVuc2lnbmVkIHNob3J0IGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBmcmFjdCBfX2ZyYWN0dWhhaHEgKHVuc2lnbmVkIHNob3J0IGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGZyYWN0IF9fZnJhY3R1aGFzcSAodW5zaWduZWQgc2hvcnQgYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgbG9uZyBmcmFjdCBfX2ZyYWN0dWhhZHEgKHVuc2lnbmVkIHNob3J0IGFjY3VtCiAgICAgICAgICBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogc2hvcnQgYWNjdW0gX19mcmFjdHVoYWhhICh1bnNpZ25lZCBzaG9ydCBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogYWNjdW0gX19mcmFjdHVoYXNhICh1bnNpZ25lZCBzaG9ydCBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBhY2N1bSBfX2ZyYWN0dWhhZGEgKHVuc2lnbmVkIHNob3J0IGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGxvbmcgYWNjdW0gX19mcmFjdHVoYXRhICh1bnNpZ25lZCBzaG9ydCBhY2N1bQogICAgICAgICAgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIHNob3J0IGZyYWN0IF9fZnJhY3R1aGF1cXEgKHVuc2lnbmVkIHNob3J0CiAgICAgICAgICBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgZnJhY3QgX19mcmFjdHVoYXVocSAodW5zaWduZWQgc2hvcnQgYWNjdW0KICAgICAgICAgIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGZyYWN0IF9fZnJhY3R1aGF1c3EgKHVuc2lnbmVkIHNob3J0CiAgICAgICAgICBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBsb25nIGZyYWN0IF9fZnJhY3R1aGF1ZHEgKHVuc2lnbmVkCiAgICAgICAgICBzaG9ydCBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgYWNjdW0gX19mcmFjdHVoYXVzYTIgKHVuc2lnbmVkIHNob3J0CiAgICAgICAgICBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBhY2N1bSBfX2ZyYWN0dWhhdWRhMiAodW5zaWduZWQgc2hvcnQKICAgICAgICAgIGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGxvbmcgYWNjdW0gX19mcmFjdHVoYXV0YTIgKHVuc2lnbmVkCiAgICAgICAgICBzaG9ydCBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogc2lnbmVkIGNoYXIgX19mcmFjdHVoYXFpICh1bnNpZ25lZCBzaG9ydCBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogc2hvcnQgX19mcmFjdHVoYWhpICh1bnNpZ25lZCBzaG9ydCBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogaW50IF9fZnJhY3R1aGFzaSAodW5zaWduZWQgc2hvcnQgYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgX19mcmFjdHVoYWRpICh1bnNpZ25lZCBzaG9ydCBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBsb25nIF9fZnJhY3R1aGF0aSAodW5zaWduZWQgc2hvcnQgYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGZsb2F0IF9fZnJhY3R1aGFzZiAodW5zaWduZWQgc2hvcnQgYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGRvdWJsZSBfX2ZyYWN0dWhhZGYgKHVuc2lnbmVkIHNob3J0IGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBzaG9ydCBmcmFjdCBfX2ZyYWN0dXNhcXEgKHVuc2lnbmVkIGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBmcmFjdCBfX2ZyYWN0dXNhaHEgKHVuc2lnbmVkIGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGZyYWN0IF9fZnJhY3R1c2FzcSAodW5zaWduZWQgYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgbG9uZyBmcmFjdCBfX2ZyYWN0dXNhZHEgKHVuc2lnbmVkIGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBzaG9ydCBhY2N1bSBfX2ZyYWN0dXNhaGEgKHVuc2lnbmVkIGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBhY2N1bSBfX2ZyYWN0dXNhc2EgKHVuc2lnbmVkIGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGFjY3VtIF9fZnJhY3R1c2FkYSAodW5zaWduZWQgYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgbG9uZyBhY2N1bSBfX2ZyYWN0dXNhdGEgKHVuc2lnbmVkIGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBzaG9ydCBmcmFjdCBfX2ZyYWN0dXNhdXFxICh1bnNpZ25lZCBhY2N1bQogICAgICAgICAgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGZyYWN0IF9fZnJhY3R1c2F1aHEgKHVuc2lnbmVkIGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGZyYWN0IF9fZnJhY3R1c2F1c3EgKHVuc2lnbmVkIGFjY3VtCiAgICAgICAgICBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBsb25nIGZyYWN0IF9fZnJhY3R1c2F1ZHEgKHVuc2lnbmVkCiAgICAgICAgICBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgc2hvcnQgYWNjdW0gX19mcmFjdHVzYXVoYTIgKHVuc2lnbmVkCiAgICAgICAgICBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBhY2N1bSBfX2ZyYWN0dXNhdWRhMiAodW5zaWduZWQgYWNjdW0KICAgICAgICAgIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGxvbmcgYWNjdW0gX19mcmFjdHVzYXV0YTIgKHVuc2lnbmVkCiAgICAgICAgICBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogc2lnbmVkIGNoYXIgX19mcmFjdHVzYXFpICh1bnNpZ25lZCBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogc2hvcnQgX19mcmFjdHVzYWhpICh1bnNpZ25lZCBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogaW50IF9fZnJhY3R1c2FzaSAodW5zaWduZWQgYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgX19mcmFjdHVzYWRpICh1bnNpZ25lZCBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBsb25nIF9fZnJhY3R1c2F0aSAodW5zaWduZWQgYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGZsb2F0IF9fZnJhY3R1c2FzZiAodW5zaWduZWQgYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGRvdWJsZSBfX2ZyYWN0dXNhZGYgKHVuc2lnbmVkIGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBzaG9ydCBmcmFjdCBfX2ZyYWN0dWRhcXEgKHVuc2lnbmVkIGxvbmcgYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGZyYWN0IF9fZnJhY3R1ZGFocSAodW5zaWduZWQgbG9uZyBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBmcmFjdCBfX2ZyYWN0dWRhc3EgKHVuc2lnbmVkIGxvbmcgYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgbG9uZyBmcmFjdCBfX2ZyYWN0dWRhZHEgKHVuc2lnbmVkIGxvbmcgYWNjdW0KICAgICAgICAgIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBzaG9ydCBhY2N1bSBfX2ZyYWN0dWRhaGEgKHVuc2lnbmVkIGxvbmcgYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGFjY3VtIF9fZnJhY3R1ZGFzYSAodW5zaWduZWQgbG9uZyBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBhY2N1bSBfX2ZyYWN0dWRhZGEgKHVuc2lnbmVkIGxvbmcgYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgbG9uZyBhY2N1bSBfX2ZyYWN0dWRhdGEgKHVuc2lnbmVkIGxvbmcgYWNjdW0KICAgICAgICAgIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBzaG9ydCBmcmFjdCBfX2ZyYWN0dWRhdXFxICh1bnNpZ25lZCBsb25nCiAgICAgICAgICBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgZnJhY3QgX19mcmFjdHVkYXVocSAodW5zaWduZWQgbG9uZyBhY2N1bQogICAgICAgICAgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGxvbmcgZnJhY3QgX19mcmFjdHVkYXVzcSAodW5zaWduZWQgbG9uZwogICAgICAgICAgYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGxvbmcgbG9uZyBmcmFjdCBfX2ZyYWN0dWRhdWRxICh1bnNpZ25lZAogICAgICAgICAgbG9uZyBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgc2hvcnQgYWNjdW0gX19mcmFjdHVkYXVoYTIgKHVuc2lnbmVkIGxvbmcKICAgICAgICAgIGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBhY2N1bSBfX2ZyYWN0dWRhdXNhMiAodW5zaWduZWQgbG9uZyBhY2N1bQogICAgICAgICAgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGxvbmcgbG9uZyBhY2N1bSBfX2ZyYWN0dWRhdXRhMiAodW5zaWduZWQKICAgICAgICAgIGxvbmcgYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHNpZ25lZCBjaGFyIF9fZnJhY3R1ZGFxaSAodW5zaWduZWQgbG9uZyBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogc2hvcnQgX19mcmFjdHVkYWhpICh1bnNpZ25lZCBsb25nIGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBpbnQgX19mcmFjdHVkYXNpICh1bnNpZ25lZCBsb25nIGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIF9fZnJhY3R1ZGFkaSAodW5zaWduZWQgbG9uZyBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBsb25nIF9fZnJhY3R1ZGF0aSAodW5zaWduZWQgbG9uZyBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogZmxvYXQgX19mcmFjdHVkYXNmICh1bnNpZ25lZCBsb25nIGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBkb3VibGUgX19mcmFjdHVkYWRmICh1bnNpZ25lZCBsb25nIGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBzaG9ydCBmcmFjdCBfX2ZyYWN0dXRhcXEgKHVuc2lnbmVkIGxvbmcgbG9uZyBhY2N1bQogICAgICAgICAgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGZyYWN0IF9fZnJhY3R1dGFocSAodW5zaWduZWQgbG9uZyBsb25nIGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGZyYWN0IF9fZnJhY3R1dGFzcSAodW5zaWduZWQgbG9uZyBsb25nIGFjY3VtCiAgICAgICAgICBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBsb25nIGZyYWN0IF9fZnJhY3R1dGFkcSAodW5zaWduZWQgbG9uZyBsb25nCiAgICAgICAgICBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogc2hvcnQgYWNjdW0gX19mcmFjdHV0YWhhICh1bnNpZ25lZCBsb25nIGxvbmcgYWNjdW0KICAgICAgICAgIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBhY2N1bSBfX2ZyYWN0dXRhc2EgKHVuc2lnbmVkIGxvbmcgbG9uZyBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBhY2N1bSBfX2ZyYWN0dXRhZGEgKHVuc2lnbmVkIGxvbmcgbG9uZyBhY2N1bQogICAgICAgICAgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgbG9uZyBhY2N1bSBfX2ZyYWN0dXRhdGEgKHVuc2lnbmVkIGxvbmcgbG9uZwogICAgICAgICAgYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIHNob3J0IGZyYWN0IF9fZnJhY3R1dGF1cXEgKHVuc2lnbmVkIGxvbmcKICAgICAgICAgIGxvbmcgYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGZyYWN0IF9fZnJhY3R1dGF1aHEgKHVuc2lnbmVkIGxvbmcgbG9uZwogICAgICAgICAgYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGxvbmcgZnJhY3QgX19mcmFjdHV0YXVzcSAodW5zaWduZWQgbG9uZwogICAgICAgICAgbG9uZyBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBsb25nIGZyYWN0IF9fZnJhY3R1dGF1ZHEgKHVuc2lnbmVkCiAgICAgICAgICBsb25nIGxvbmcgYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIHNob3J0IGFjY3VtIF9fZnJhY3R1dGF1aGEyICh1bnNpZ25lZCBsb25nCiAgICAgICAgICBsb25nIGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBhY2N1bSBfX2ZyYWN0dXRhdXNhMiAodW5zaWduZWQgbG9uZyBsb25nCiAgICAgICAgICBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBhY2N1bSBfX2ZyYWN0dXRhdWRhMiAodW5zaWduZWQgbG9uZwogICAgICAgICAgbG9uZyBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogc2lnbmVkIGNoYXIgX19mcmFjdHV0YXFpICh1bnNpZ25lZCBsb25nIGxvbmcgYWNjdW0KICAgICAgICAgIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBzaG9ydCBfX2ZyYWN0dXRhaGkgKHVuc2lnbmVkIGxvbmcgbG9uZyBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogaW50IF9fZnJhY3R1dGFzaSAodW5zaWduZWQgbG9uZyBsb25nIGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIF9fZnJhY3R1dGFkaSAodW5zaWduZWQgbG9uZyBsb25nIGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGxvbmcgX19mcmFjdHV0YXRpICh1bnNpZ25lZCBsb25nIGxvbmcgYWNjdW0KICAgICAgICAgIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBmbG9hdCBfX2ZyYWN0dXRhc2YgKHVuc2lnbmVkIGxvbmcgbG9uZyBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogZG91YmxlIF9fZnJhY3R1dGFkZiAodW5zaWduZWQgbG9uZyBsb25nIGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBzaG9ydCBmcmFjdCBfX2ZyYWN0cWlxcSAoc2lnbmVkIGNoYXIgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGZyYWN0IF9fZnJhY3RxaWhxIChzaWduZWQgY2hhciBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBmcmFjdCBfX2ZyYWN0cWlzcSAoc2lnbmVkIGNoYXIgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgbG9uZyBmcmFjdCBfX2ZyYWN0cWlkcSAoc2lnbmVkIGNoYXIgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHNob3J0IGFjY3VtIF9fZnJhY3RxaWhhIChzaWduZWQgY2hhciBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogYWNjdW0gX19mcmFjdHFpc2EgKHNpZ25lZCBjaGFyIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGFjY3VtIF9fZnJhY3RxaWRhIChzaWduZWQgY2hhciBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBsb25nIGFjY3VtIF9fZnJhY3RxaXRhIChzaWduZWQgY2hhciBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgc2hvcnQgZnJhY3QgX19mcmFjdHFpdXFxIChzaWduZWQgY2hhciBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgZnJhY3QgX19mcmFjdHFpdWhxIChzaWduZWQgY2hhciBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBmcmFjdCBfX2ZyYWN0cWl1c3EgKHNpZ25lZCBjaGFyIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGxvbmcgZnJhY3QgX19mcmFjdHFpdWRxIChzaWduZWQgY2hhcgogICAgICAgICAgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIHNob3J0IGFjY3VtIF9fZnJhY3RxaXVoYSAoc2lnbmVkIGNoYXIgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGFjY3VtIF9fZnJhY3RxaXVzYSAoc2lnbmVkIGNoYXIgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGxvbmcgYWNjdW0gX19mcmFjdHFpdWRhIChzaWduZWQgY2hhciBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBsb25nIGFjY3VtIF9fZnJhY3RxaXV0YSAoc2lnbmVkIGNoYXIKICAgICAgICAgIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBzaG9ydCBmcmFjdCBfX2ZyYWN0aGlxcSAoc2hvcnQgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGZyYWN0IF9fZnJhY3RoaWhxIChzaG9ydCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBmcmFjdCBfX2ZyYWN0aGlzcSAoc2hvcnQgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgbG9uZyBmcmFjdCBfX2ZyYWN0aGlkcSAoc2hvcnQgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHNob3J0IGFjY3VtIF9fZnJhY3RoaWhhIChzaG9ydCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogYWNjdW0gX19mcmFjdGhpc2EgKHNob3J0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGFjY3VtIF9fZnJhY3RoaWRhIChzaG9ydCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBsb25nIGFjY3VtIF9fZnJhY3RoaXRhIChzaG9ydCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgc2hvcnQgZnJhY3QgX19mcmFjdGhpdXFxIChzaG9ydCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgZnJhY3QgX19mcmFjdGhpdWhxIChzaG9ydCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBmcmFjdCBfX2ZyYWN0aGl1c3EgKHNob3J0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGxvbmcgZnJhY3QgX19mcmFjdGhpdWRxIChzaG9ydCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgc2hvcnQgYWNjdW0gX19mcmFjdGhpdWhhIChzaG9ydCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgYWNjdW0gX19mcmFjdGhpdXNhIChzaG9ydCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBhY2N1bSBfX2ZyYWN0aGl1ZGEgKHNob3J0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGxvbmcgYWNjdW0gX19mcmFjdGhpdXRhIChzaG9ydCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogc2hvcnQgZnJhY3QgX19mcmFjdHNpcXEgKGludCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogZnJhY3QgX19mcmFjdHNpaHEgKGludCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBmcmFjdCBfX2ZyYWN0c2lzcSAoaW50IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGxvbmcgZnJhY3QgX19mcmFjdHNpZHEgKGludCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogc2hvcnQgYWNjdW0gX19mcmFjdHNpaGEgKGludCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogYWNjdW0gX19mcmFjdHNpc2EgKGludCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBhY2N1bSBfX2ZyYWN0c2lkYSAoaW50IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGxvbmcgYWNjdW0gX19mcmFjdHNpdGEgKGludCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgc2hvcnQgZnJhY3QgX19mcmFjdHNpdXFxIChpbnQgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGZyYWN0IF9fZnJhY3RzaXVocSAoaW50IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGZyYWN0IF9fZnJhY3RzaXVzcSAoaW50IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGxvbmcgZnJhY3QgX19mcmFjdHNpdWRxIChpbnQgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIHNob3J0IGFjY3VtIF9fZnJhY3RzaXVoYSAoaW50IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBhY2N1bSBfX2ZyYWN0c2l1c2EgKGludCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBhY2N1bSBfX2ZyYWN0c2l1ZGEgKGludCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBsb25nIGFjY3VtIF9fZnJhY3RzaXV0YSAoaW50IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBzaG9ydCBmcmFjdCBfX2ZyYWN0ZGlxcSAobG9uZyBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogZnJhY3QgX19mcmFjdGRpaHEgKGxvbmcgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgZnJhY3QgX19mcmFjdGRpc3EgKGxvbmcgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgbG9uZyBmcmFjdCBfX2ZyYWN0ZGlkcSAobG9uZyBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogc2hvcnQgYWNjdW0gX19mcmFjdGRpaGEgKGxvbmcgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGFjY3VtIF9fZnJhY3RkaXNhIChsb25nIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGFjY3VtIF9fZnJhY3RkaWRhIChsb25nIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGxvbmcgYWNjdW0gX19mcmFjdGRpdGEgKGxvbmcgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIHNob3J0IGZyYWN0IF9fZnJhY3RkaXVxcSAobG9uZyBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgZnJhY3QgX19mcmFjdGRpdWhxIChsb25nIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGZyYWN0IF9fZnJhY3RkaXVzcSAobG9uZyBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBsb25nIGZyYWN0IF9fZnJhY3RkaXVkcSAobG9uZyBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgc2hvcnQgYWNjdW0gX19mcmFjdGRpdWhhIChsb25nIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBhY2N1bSBfX2ZyYWN0ZGl1c2EgKGxvbmcgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGxvbmcgYWNjdW0gX19mcmFjdGRpdWRhIChsb25nIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGxvbmcgYWNjdW0gX19mcmFjdGRpdXRhIChsb25nIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBzaG9ydCBmcmFjdCBfX2ZyYWN0dGlxcSAobG9uZyBsb25nIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBmcmFjdCBfX2ZyYWN0dGlocSAobG9uZyBsb25nIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGZyYWN0IF9fZnJhY3R0aXNxIChsb25nIGxvbmcgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgbG9uZyBmcmFjdCBfX2ZyYWN0dGlkcSAobG9uZyBsb25nIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBzaG9ydCBhY2N1bSBfX2ZyYWN0dGloYSAobG9uZyBsb25nIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBhY2N1bSBfX2ZyYWN0dGlzYSAobG9uZyBsb25nIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGFjY3VtIF9fZnJhY3R0aWRhIChsb25nIGxvbmcgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgbG9uZyBhY2N1bSBfX2ZyYWN0dGl0YSAobG9uZyBsb25nIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBzaG9ydCBmcmFjdCBfX2ZyYWN0dGl1cXEgKGxvbmcgbG9uZyBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgZnJhY3QgX19mcmFjdHRpdWhxIChsb25nIGxvbmcgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGxvbmcgZnJhY3QgX19mcmFjdHRpdXNxIChsb25nIGxvbmcgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGxvbmcgbG9uZyBmcmFjdCBfX2ZyYWN0dGl1ZHEgKGxvbmcgbG9uZwogICAgICAgICAgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIHNob3J0IGFjY3VtIF9fZnJhY3R0aXVoYSAobG9uZyBsb25nIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBhY2N1bSBfX2ZyYWN0dGl1c2EgKGxvbmcgbG9uZyBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBhY2N1bSBfX2ZyYWN0dGl1ZGEgKGxvbmcgbG9uZyBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBsb25nIGFjY3VtIF9fZnJhY3R0aXV0YSAobG9uZyBsb25nCiAgICAgICAgICBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogc2hvcnQgZnJhY3QgX19mcmFjdHNmcXEgKGZsb2F0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBmcmFjdCBfX2ZyYWN0c2ZocSAoZmxvYXQgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgZnJhY3QgX19mcmFjdHNmc3EgKGZsb2F0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGxvbmcgZnJhY3QgX19mcmFjdHNmZHEgKGZsb2F0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBzaG9ydCBhY2N1bSBfX2ZyYWN0c2ZoYSAoZmxvYXQgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGFjY3VtIF9fZnJhY3RzZnNhIChmbG9hdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBhY2N1bSBfX2ZyYWN0c2ZkYSAoZmxvYXQgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgbG9uZyBhY2N1bSBfX2ZyYWN0c2Z0YSAoZmxvYXQgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIHNob3J0IGZyYWN0IF9fZnJhY3RzZnVxcSAoZmxvYXQgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGZyYWN0IF9fZnJhY3RzZnVocSAoZmxvYXQgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGxvbmcgZnJhY3QgX19mcmFjdHNmdXNxIChmbG9hdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBsb25nIGZyYWN0IF9fZnJhY3RzZnVkcSAoZmxvYXQgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIHNob3J0IGFjY3VtIF9fZnJhY3RzZnVoYSAoZmxvYXQgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGFjY3VtIF9fZnJhY3RzZnVzYSAoZmxvYXQgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGxvbmcgYWNjdW0gX19mcmFjdHNmdWRhIChmbG9hdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBsb25nIGFjY3VtIF9fZnJhY3RzZnV0YSAoZmxvYXQgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHNob3J0IGZyYWN0IF9fZnJhY3RkZnFxIChkb3VibGUgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGZyYWN0IF9fZnJhY3RkZmhxIChkb3VibGUgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgZnJhY3QgX19mcmFjdGRmc3EgKGRvdWJsZSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBsb25nIGZyYWN0IF9fZnJhY3RkZmRxIChkb3VibGUgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHNob3J0IGFjY3VtIF9fZnJhY3RkZmhhIChkb3VibGUgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGFjY3VtIF9fZnJhY3RkZnNhIChkb3VibGUgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgYWNjdW0gX19mcmFjdGRmZGEgKGRvdWJsZSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBsb25nIGFjY3VtIF9fZnJhY3RkZnRhIChkb3VibGUgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIHNob3J0IGZyYWN0IF9fZnJhY3RkZnVxcSAoZG91YmxlIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBmcmFjdCBfX2ZyYWN0ZGZ1aHEgKGRvdWJsZSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBmcmFjdCBfX2ZyYWN0ZGZ1c3EgKGRvdWJsZSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBsb25nIGZyYWN0IF9fZnJhY3RkZnVkcSAoZG91YmxlIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBzaG9ydCBhY2N1bSBfX2ZyYWN0ZGZ1aGEgKGRvdWJsZSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgYWNjdW0gX19mcmFjdGRmdXNhIChkb3VibGUgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGxvbmcgYWNjdW0gX19mcmFjdGRmdWRhIChkb3VibGUgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGxvbmcgbG9uZyBhY2N1bSBfX2ZyYWN0ZGZ1dGEgKGRvdWJsZSBBKQogICAgIFRoZXNlIGZ1bmN0aW9ucyBjb252ZXJ0IGZyb20gZnJhY3Rpb25hbCBhbmQgc2lnbmVkIG5vbi1mcmFjdGlvbmFscwogICAgIHRvIGZyYWN0aW9uYWxzIGFuZCBzaWduZWQgbm9uLWZyYWN0aW9uYWxzLCB3aXRob3V0IHNhdHVyYXRpb24uCgogLS0gUnVudGltZSBGdW5jdGlvbjogZnJhY3QgX19zYXRmcmFjdHFxaHEyIChzaG9ydCBmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBmcmFjdCBfX3NhdGZyYWN0cXFzcTIgKHNob3J0IGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGxvbmcgZnJhY3QgX19zYXRmcmFjdHFxZHEyIChzaG9ydCBmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogc2hvcnQgYWNjdW0gX19zYXRmcmFjdHFxaGEgKHNob3J0IGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBhY2N1bSBfX3NhdGZyYWN0cXFzYSAoc2hvcnQgZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgYWNjdW0gX19zYXRmcmFjdHFxZGEgKHNob3J0IGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGxvbmcgYWNjdW0gX19zYXRmcmFjdHFxdGEgKHNob3J0IGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBzaG9ydCBmcmFjdCBfX3NhdGZyYWN0cXF1cXEgKHNob3J0IGZyYWN0CiAgICAgICAgICBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgZnJhY3QgX19zYXRmcmFjdHFxdWhxIChzaG9ydCBmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBmcmFjdCBfX3NhdGZyYWN0cXF1c3EgKHNob3J0IGZyYWN0CiAgICAgICAgICBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBsb25nIGZyYWN0IF9fc2F0ZnJhY3RxcXVkcSAoc2hvcnQKICAgICAgICAgIGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBzaG9ydCBhY2N1bSBfX3NhdGZyYWN0cXF1aGEgKHNob3J0IGZyYWN0CiAgICAgICAgICBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgYWNjdW0gX19zYXRmcmFjdHFxdXNhIChzaG9ydCBmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBhY2N1bSBfX3NhdGZyYWN0cXF1ZGEgKHNob3J0IGZyYWN0CiAgICAgICAgICBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBsb25nIGFjY3VtIF9fc2F0ZnJhY3RxcXV0YSAoc2hvcnQKICAgICAgICAgIGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBzaG9ydCBmcmFjdCBfX3NhdGZyYWN0aHFxcTIgKGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGZyYWN0IF9fc2F0ZnJhY3RocXNxMiAoZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgbG9uZyBmcmFjdCBfX3NhdGZyYWN0aHFkcTIgKGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBzaG9ydCBhY2N1bSBfX3NhdGZyYWN0aHFoYSAoZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGFjY3VtIF9fc2F0ZnJhY3RocXNhIChmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBhY2N1bSBfX3NhdGZyYWN0aHFkYSAoZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgbG9uZyBhY2N1bSBfX3NhdGZyYWN0aHF0YSAoZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIHNob3J0IGZyYWN0IF9fc2F0ZnJhY3RocXVxcSAoZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGZyYWN0IF9fc2F0ZnJhY3RocXVocSAoZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGxvbmcgZnJhY3QgX19zYXRmcmFjdGhxdXNxIChmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBsb25nIGZyYWN0IF9fc2F0ZnJhY3RocXVkcSAoZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIHNob3J0IGFjY3VtIF9fc2F0ZnJhY3RocXVoYSAoZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGFjY3VtIF9fc2F0ZnJhY3RocXVzYSAoZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGxvbmcgYWNjdW0gX19zYXRmcmFjdGhxdWRhIChmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBsb25nIGFjY3VtIF9fc2F0ZnJhY3RocXV0YSAoZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHNob3J0IGZyYWN0IF9fc2F0ZnJhY3RzcXFxMiAobG9uZyBmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogZnJhY3QgX19zYXRmcmFjdHNxaHEyIChsb25nIGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGxvbmcgZnJhY3QgX19zYXRmcmFjdHNxZHEyIChsb25nIGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBzaG9ydCBhY2N1bSBfX3NhdGZyYWN0c3FoYSAobG9uZyBmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogYWNjdW0gX19zYXRmcmFjdHNxc2EgKGxvbmcgZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgYWNjdW0gX19zYXRmcmFjdHNxZGEgKGxvbmcgZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgbG9uZyBhY2N1bSBfX3NhdGZyYWN0c3F0YSAobG9uZyBmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgc2hvcnQgZnJhY3QgX19zYXRmcmFjdHNxdXFxIChsb25nIGZyYWN0CiAgICAgICAgICBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgZnJhY3QgX19zYXRmcmFjdHNxdWhxIChsb25nIGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGZyYWN0IF9fc2F0ZnJhY3RzcXVzcSAobG9uZyBmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBsb25nIGZyYWN0IF9fc2F0ZnJhY3RzcXVkcSAobG9uZwogICAgICAgICAgZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIHNob3J0IGFjY3VtIF9fc2F0ZnJhY3RzcXVoYSAobG9uZyBmcmFjdAogICAgICAgICAgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGFjY3VtIF9fc2F0ZnJhY3RzcXVzYSAobG9uZyBmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBhY2N1bSBfX3NhdGZyYWN0c3F1ZGEgKGxvbmcgZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGxvbmcgbG9uZyBhY2N1bSBfX3NhdGZyYWN0c3F1dGEgKGxvbmcKICAgICAgICAgIGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBzaG9ydCBmcmFjdCBfX3NhdGZyYWN0ZHFxcTIgKGxvbmcgbG9uZyBmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogZnJhY3QgX19zYXRmcmFjdGRxaHEyIChsb25nIGxvbmcgZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgZnJhY3QgX19zYXRmcmFjdGRxc3EyIChsb25nIGxvbmcgZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHNob3J0IGFjY3VtIF9fc2F0ZnJhY3RkcWhhIChsb25nIGxvbmcgZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGFjY3VtIF9fc2F0ZnJhY3RkcXNhIChsb25nIGxvbmcgZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgYWNjdW0gX19zYXRmcmFjdGRxZGEgKGxvbmcgbG9uZyBmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBsb25nIGFjY3VtIF9fc2F0ZnJhY3RkcXRhIChsb25nIGxvbmcgZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIHNob3J0IGZyYWN0IF9fc2F0ZnJhY3RkcXVxcSAobG9uZyBsb25nCiAgICAgICAgICBmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgZnJhY3QgX19zYXRmcmFjdGRxdWhxIChsb25nIGxvbmcgZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGxvbmcgZnJhY3QgX19zYXRmcmFjdGRxdXNxIChsb25nIGxvbmcKICAgICAgICAgIGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGxvbmcgZnJhY3QgX19zYXRmcmFjdGRxdWRxIChsb25nCiAgICAgICAgICBsb25nIGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBzaG9ydCBhY2N1bSBfX3NhdGZyYWN0ZHF1aGEgKGxvbmcgbG9uZwogICAgICAgICAgZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGFjY3VtIF9fc2F0ZnJhY3RkcXVzYSAobG9uZyBsb25nIGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGFjY3VtIF9fc2F0ZnJhY3RkcXVkYSAobG9uZyBsb25nCiAgICAgICAgICBmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBsb25nIGFjY3VtIF9fc2F0ZnJhY3RkcXV0YSAobG9uZwogICAgICAgICAgbG9uZyBmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogc2hvcnQgZnJhY3QgX19zYXRmcmFjdGhhcXEgKHNob3J0IGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBmcmFjdCBfX3NhdGZyYWN0aGFocSAoc2hvcnQgYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgZnJhY3QgX19zYXRmcmFjdGhhc3EgKHNob3J0IGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGxvbmcgZnJhY3QgX19zYXRmcmFjdGhhZHEgKHNob3J0IGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBhY2N1bSBfX3NhdGZyYWN0aGFzYTIgKHNob3J0IGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGFjY3VtIF9fc2F0ZnJhY3RoYWRhMiAoc2hvcnQgYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgbG9uZyBhY2N1bSBfX3NhdGZyYWN0aGF0YTIgKHNob3J0IGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBzaG9ydCBmcmFjdCBfX3NhdGZyYWN0aGF1cXEgKHNob3J0IGFjY3VtCiAgICAgICAgICBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgZnJhY3QgX19zYXRmcmFjdGhhdWhxIChzaG9ydCBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBmcmFjdCBfX3NhdGZyYWN0aGF1c3EgKHNob3J0IGFjY3VtCiAgICAgICAgICBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBsb25nIGZyYWN0IF9fc2F0ZnJhY3RoYXVkcSAoc2hvcnQKICAgICAgICAgIGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBzaG9ydCBhY2N1bSBfX3NhdGZyYWN0aGF1aGEgKHNob3J0IGFjY3VtCiAgICAgICAgICBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgYWNjdW0gX19zYXRmcmFjdGhhdXNhIChzaG9ydCBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBhY2N1bSBfX3NhdGZyYWN0aGF1ZGEgKHNob3J0IGFjY3VtCiAgICAgICAgICBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBsb25nIGFjY3VtIF9fc2F0ZnJhY3RoYXV0YSAoc2hvcnQKICAgICAgICAgIGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBzaG9ydCBmcmFjdCBfX3NhdGZyYWN0c2FxcSAoYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGZyYWN0IF9fc2F0ZnJhY3RzYWhxIChhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBmcmFjdCBfX3NhdGZyYWN0c2FzcSAoYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgbG9uZyBmcmFjdCBfX3NhdGZyYWN0c2FkcSAoYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHNob3J0IGFjY3VtIF9fc2F0ZnJhY3RzYWhhMiAoYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgYWNjdW0gX19zYXRmcmFjdHNhZGEyIChhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBsb25nIGFjY3VtIF9fc2F0ZnJhY3RzYXRhMiAoYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIHNob3J0IGZyYWN0IF9fc2F0ZnJhY3RzYXVxcSAoYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGZyYWN0IF9fc2F0ZnJhY3RzYXVocSAoYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGxvbmcgZnJhY3QgX19zYXRmcmFjdHNhdXNxIChhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBsb25nIGZyYWN0IF9fc2F0ZnJhY3RzYXVkcSAoYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIHNob3J0IGFjY3VtIF9fc2F0ZnJhY3RzYXVoYSAoYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGFjY3VtIF9fc2F0ZnJhY3RzYXVzYSAoYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGxvbmcgYWNjdW0gX19zYXRmcmFjdHNhdWRhIChhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBsb25nIGFjY3VtIF9fc2F0ZnJhY3RzYXV0YSAoYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHNob3J0IGZyYWN0IF9fc2F0ZnJhY3RkYXFxIChsb25nIGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBmcmFjdCBfX3NhdGZyYWN0ZGFocSAobG9uZyBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBmcmFjdCBfX3NhdGZyYWN0ZGFzcSAobG9uZyBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBsb25nIGZyYWN0IF9fc2F0ZnJhY3RkYWRxIChsb25nIGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBzaG9ydCBhY2N1bSBfX3NhdGZyYWN0ZGFoYTIgKGxvbmcgYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGFjY3VtIF9fc2F0ZnJhY3RkYXNhMiAobG9uZyBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBsb25nIGFjY3VtIF9fc2F0ZnJhY3RkYXRhMiAobG9uZyBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgc2hvcnQgZnJhY3QgX19zYXRmcmFjdGRhdXFxIChsb25nIGFjY3VtCiAgICAgICAgICBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgZnJhY3QgX19zYXRmcmFjdGRhdWhxIChsb25nIGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGZyYWN0IF9fc2F0ZnJhY3RkYXVzcSAobG9uZyBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBsb25nIGZyYWN0IF9fc2F0ZnJhY3RkYXVkcSAobG9uZwogICAgICAgICAgYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIHNob3J0IGFjY3VtIF9fc2F0ZnJhY3RkYXVoYSAobG9uZyBhY2N1bQogICAgICAgICAgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGFjY3VtIF9fc2F0ZnJhY3RkYXVzYSAobG9uZyBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBhY2N1bSBfX3NhdGZyYWN0ZGF1ZGEgKGxvbmcgYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGxvbmcgbG9uZyBhY2N1bSBfX3NhdGZyYWN0ZGF1dGEgKGxvbmcKICAgICAgICAgIGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBzaG9ydCBmcmFjdCBfX3NhdGZyYWN0dGFxcSAobG9uZyBsb25nIGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBmcmFjdCBfX3NhdGZyYWN0dGFocSAobG9uZyBsb25nIGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGZyYWN0IF9fc2F0ZnJhY3R0YXNxIChsb25nIGxvbmcgYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgbG9uZyBmcmFjdCBfX3NhdGZyYWN0dGFkcSAobG9uZyBsb25nIGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBzaG9ydCBhY2N1bSBfX3NhdGZyYWN0dGFoYTIgKGxvbmcgbG9uZyBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogYWNjdW0gX19zYXRmcmFjdHRhc2EyIChsb25nIGxvbmcgYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgYWNjdW0gX19zYXRmcmFjdHRhZGEyIChsb25nIGxvbmcgYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIHNob3J0IGZyYWN0IF9fc2F0ZnJhY3R0YXVxcSAobG9uZyBsb25nCiAgICAgICAgICBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgZnJhY3QgX19zYXRmcmFjdHRhdWhxIChsb25nIGxvbmcgYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGxvbmcgZnJhY3QgX19zYXRmcmFjdHRhdXNxIChsb25nIGxvbmcKICAgICAgICAgIGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGxvbmcgZnJhY3QgX19zYXRmcmFjdHRhdWRxIChsb25nCiAgICAgICAgICBsb25nIGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBzaG9ydCBhY2N1bSBfX3NhdGZyYWN0dGF1aGEgKGxvbmcgbG9uZwogICAgICAgICAgYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGFjY3VtIF9fc2F0ZnJhY3R0YXVzYSAobG9uZyBsb25nIGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGFjY3VtIF9fc2F0ZnJhY3R0YXVkYSAobG9uZyBsb25nCiAgICAgICAgICBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBsb25nIGFjY3VtIF9fc2F0ZnJhY3R0YXV0YSAobG9uZwogICAgICAgICAgbG9uZyBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogc2hvcnQgZnJhY3QgX19zYXRmcmFjdHVxcXFxICh1bnNpZ25lZCBzaG9ydCBmcmFjdAogICAgICAgICAgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGZyYWN0IF9fc2F0ZnJhY3R1cXFocSAodW5zaWduZWQgc2hvcnQgZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgZnJhY3QgX19zYXRmcmFjdHVxcXNxICh1bnNpZ25lZCBzaG9ydCBmcmFjdAogICAgICAgICAgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgbG9uZyBmcmFjdCBfX3NhdGZyYWN0dXFxZHEgKHVuc2lnbmVkIHNob3J0CiAgICAgICAgICBmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogc2hvcnQgYWNjdW0gX19zYXRmcmFjdHVxcWhhICh1bnNpZ25lZCBzaG9ydCBmcmFjdAogICAgICAgICAgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGFjY3VtIF9fc2F0ZnJhY3R1cXFzYSAodW5zaWduZWQgc2hvcnQgZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgYWNjdW0gX19zYXRmcmFjdHVxcWRhICh1bnNpZ25lZCBzaG9ydCBmcmFjdAogICAgICAgICAgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgbG9uZyBhY2N1bSBfX3NhdGZyYWN0dXFxdGEgKHVuc2lnbmVkIHNob3J0CiAgICAgICAgICBmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgZnJhY3QgX19zYXRmcmFjdHVxcXVocTIgKHVuc2lnbmVkIHNob3J0CiAgICAgICAgICBmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBmcmFjdCBfX3NhdGZyYWN0dXFxdXNxMiAodW5zaWduZWQKICAgICAgICAgIHNob3J0IGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGxvbmcgZnJhY3QgX19zYXRmcmFjdHVxcXVkcTIKICAgICAgICAgICh1bnNpZ25lZCBzaG9ydCBmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgc2hvcnQgYWNjdW0gX19zYXRmcmFjdHVxcXVoYSAodW5zaWduZWQKICAgICAgICAgIHNob3J0IGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBhY2N1bSBfX3NhdGZyYWN0dXFxdXNhICh1bnNpZ25lZCBzaG9ydAogICAgICAgICAgZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGxvbmcgYWNjdW0gX19zYXRmcmFjdHVxcXVkYSAodW5zaWduZWQKICAgICAgICAgIHNob3J0IGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGxvbmcgYWNjdW0gX19zYXRmcmFjdHVxcXV0YQogICAgICAgICAgKHVuc2lnbmVkIHNob3J0IGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBzaG9ydCBmcmFjdCBfX3NhdGZyYWN0dWhxcXEgKHVuc2lnbmVkIGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBmcmFjdCBfX3NhdGZyYWN0dWhxaHEgKHVuc2lnbmVkIGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGZyYWN0IF9fc2F0ZnJhY3R1aHFzcSAodW5zaWduZWQgZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgbG9uZyBmcmFjdCBfX3NhdGZyYWN0dWhxZHEgKHVuc2lnbmVkIGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBzaG9ydCBhY2N1bSBfX3NhdGZyYWN0dWhxaGEgKHVuc2lnbmVkIGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBhY2N1bSBfX3NhdGZyYWN0dWhxc2EgKHVuc2lnbmVkIGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGFjY3VtIF9fc2F0ZnJhY3R1aHFkYSAodW5zaWduZWQgZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgbG9uZyBhY2N1bSBfX3NhdGZyYWN0dWhxdGEgKHVuc2lnbmVkIGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBzaG9ydCBmcmFjdCBfX3NhdGZyYWN0dWhxdXFxMiAodW5zaWduZWQKICAgICAgICAgIGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGZyYWN0IF9fc2F0ZnJhY3R1aHF1c3EyICh1bnNpZ25lZAogICAgICAgICAgZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGxvbmcgbG9uZyBmcmFjdCBfX3NhdGZyYWN0dWhxdWRxMgogICAgICAgICAgKHVuc2lnbmVkIGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBzaG9ydCBhY2N1bSBfX3NhdGZyYWN0dWhxdWhhICh1bnNpZ25lZAogICAgICAgICAgZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGFjY3VtIF9fc2F0ZnJhY3R1aHF1c2EgKHVuc2lnbmVkIGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGFjY3VtIF9fc2F0ZnJhY3R1aHF1ZGEgKHVuc2lnbmVkCiAgICAgICAgICBmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBsb25nIGFjY3VtIF9fc2F0ZnJhY3R1aHF1dGEKICAgICAgICAgICh1bnNpZ25lZCBmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogc2hvcnQgZnJhY3QgX19zYXRmcmFjdHVzcXFxICh1bnNpZ25lZCBsb25nIGZyYWN0CiAgICAgICAgICBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogZnJhY3QgX19zYXRmcmFjdHVzcWhxICh1bnNpZ25lZCBsb25nIGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGZyYWN0IF9fc2F0ZnJhY3R1c3FzcSAodW5zaWduZWQgbG9uZyBmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBsb25nIGZyYWN0IF9fc2F0ZnJhY3R1c3FkcSAodW5zaWduZWQgbG9uZwogICAgICAgICAgZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHNob3J0IGFjY3VtIF9fc2F0ZnJhY3R1c3FoYSAodW5zaWduZWQgbG9uZyBmcmFjdAogICAgICAgICAgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGFjY3VtIF9fc2F0ZnJhY3R1c3FzYSAodW5zaWduZWQgbG9uZyBmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBhY2N1bSBfX3NhdGZyYWN0dXNxZGEgKHVuc2lnbmVkIGxvbmcgZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgbG9uZyBhY2N1bSBfX3NhdGZyYWN0dXNxdGEgKHVuc2lnbmVkIGxvbmcKICAgICAgICAgIGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBzaG9ydCBmcmFjdCBfX3NhdGZyYWN0dXNxdXFxMiAodW5zaWduZWQKICAgICAgICAgIGxvbmcgZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGZyYWN0IF9fc2F0ZnJhY3R1c3F1aHEyICh1bnNpZ25lZCBsb25nCiAgICAgICAgICBmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBsb25nIGZyYWN0IF9fc2F0ZnJhY3R1c3F1ZHEyCiAgICAgICAgICAodW5zaWduZWQgbG9uZyBmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgc2hvcnQgYWNjdW0gX19zYXRmcmFjdHVzcXVoYSAodW5zaWduZWQKICAgICAgICAgIGxvbmcgZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGFjY3VtIF9fc2F0ZnJhY3R1c3F1c2EgKHVuc2lnbmVkIGxvbmcKICAgICAgICAgIGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGFjY3VtIF9fc2F0ZnJhY3R1c3F1ZGEgKHVuc2lnbmVkCiAgICAgICAgICBsb25nIGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGxvbmcgYWNjdW0gX19zYXRmcmFjdHVzcXV0YQogICAgICAgICAgKHVuc2lnbmVkIGxvbmcgZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHNob3J0IGZyYWN0IF9fc2F0ZnJhY3R1ZHFxcSAodW5zaWduZWQgbG9uZyBsb25nCiAgICAgICAgICBmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogZnJhY3QgX19zYXRmcmFjdHVkcWhxICh1bnNpZ25lZCBsb25nIGxvbmcgZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgZnJhY3QgX19zYXRmcmFjdHVkcXNxICh1bnNpZ25lZCBsb25nIGxvbmcKICAgICAgICAgIGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGxvbmcgZnJhY3QgX19zYXRmcmFjdHVkcWRxICh1bnNpZ25lZCBsb25nCiAgICAgICAgICBsb25nIGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBzaG9ydCBhY2N1bSBfX3NhdGZyYWN0dWRxaGEgKHVuc2lnbmVkIGxvbmcgbG9uZwogICAgICAgICAgZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGFjY3VtIF9fc2F0ZnJhY3R1ZHFzYSAodW5zaWduZWQgbG9uZyBsb25nIGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGFjY3VtIF9fc2F0ZnJhY3R1ZHFkYSAodW5zaWduZWQgbG9uZyBsb25nCiAgICAgICAgICBmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBsb25nIGFjY3VtIF9fc2F0ZnJhY3R1ZHF0YSAodW5zaWduZWQgbG9uZwogICAgICAgICAgbG9uZyBmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgc2hvcnQgZnJhY3QgX19zYXRmcmFjdHVkcXVxcTIgKHVuc2lnbmVkCiAgICAgICAgICBsb25nIGxvbmcgZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGZyYWN0IF9fc2F0ZnJhY3R1ZHF1aHEyICh1bnNpZ25lZCBsb25nCiAgICAgICAgICBsb25nIGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGZyYWN0IF9fc2F0ZnJhY3R1ZHF1c3EyICh1bnNpZ25lZAogICAgICAgICAgbG9uZyBsb25nIGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBzaG9ydCBhY2N1bSBfX3NhdGZyYWN0dWRxdWhhICh1bnNpZ25lZAogICAgICAgICAgbG9uZyBsb25nIGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBhY2N1bSBfX3NhdGZyYWN0dWRxdXNhICh1bnNpZ25lZCBsb25nCiAgICAgICAgICBsb25nIGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGFjY3VtIF9fc2F0ZnJhY3R1ZHF1ZGEgKHVuc2lnbmVkCiAgICAgICAgICBsb25nIGxvbmcgZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGxvbmcgbG9uZyBhY2N1bSBfX3NhdGZyYWN0dWRxdXRhCiAgICAgICAgICAodW5zaWduZWQgbG9uZyBsb25nIGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBzaG9ydCBmcmFjdCBfX3NhdGZyYWN0dWhhcXEgKHVuc2lnbmVkIHNob3J0IGFjY3VtCiAgICAgICAgICBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogZnJhY3QgX19zYXRmcmFjdHVoYWhxICh1bnNpZ25lZCBzaG9ydCBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBmcmFjdCBfX3NhdGZyYWN0dWhhc3EgKHVuc2lnbmVkIHNob3J0IGFjY3VtCiAgICAgICAgICBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBsb25nIGZyYWN0IF9fc2F0ZnJhY3R1aGFkcSAodW5zaWduZWQgc2hvcnQKICAgICAgICAgIGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBzaG9ydCBhY2N1bSBfX3NhdGZyYWN0dWhhaGEgKHVuc2lnbmVkIHNob3J0IGFjY3VtCiAgICAgICAgICBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogYWNjdW0gX19zYXRmcmFjdHVoYXNhICh1bnNpZ25lZCBzaG9ydCBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBhY2N1bSBfX3NhdGZyYWN0dWhhZGEgKHVuc2lnbmVkIHNob3J0IGFjY3VtCiAgICAgICAgICBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBsb25nIGFjY3VtIF9fc2F0ZnJhY3R1aGF0YSAodW5zaWduZWQgc2hvcnQKICAgICAgICAgIGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBzaG9ydCBmcmFjdCBfX3NhdGZyYWN0dWhhdXFxICh1bnNpZ25lZAogICAgICAgICAgc2hvcnQgYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGZyYWN0IF9fc2F0ZnJhY3R1aGF1aHEgKHVuc2lnbmVkIHNob3J0CiAgICAgICAgICBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBmcmFjdCBfX3NhdGZyYWN0dWhhdXNxICh1bnNpZ25lZAogICAgICAgICAgc2hvcnQgYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGxvbmcgbG9uZyBmcmFjdCBfX3NhdGZyYWN0dWhhdWRxCiAgICAgICAgICAodW5zaWduZWQgc2hvcnQgYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGFjY3VtIF9fc2F0ZnJhY3R1aGF1c2EyICh1bnNpZ25lZCBzaG9ydAogICAgICAgICAgYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGxvbmcgYWNjdW0gX19zYXRmcmFjdHVoYXVkYTIgKHVuc2lnbmVkCiAgICAgICAgICBzaG9ydCBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBsb25nIGFjY3VtIF9fc2F0ZnJhY3R1aGF1dGEyCiAgICAgICAgICAodW5zaWduZWQgc2hvcnQgYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHNob3J0IGZyYWN0IF9fc2F0ZnJhY3R1c2FxcSAodW5zaWduZWQgYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGZyYWN0IF9fc2F0ZnJhY3R1c2FocSAodW5zaWduZWQgYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgZnJhY3QgX19zYXRmcmFjdHVzYXNxICh1bnNpZ25lZCBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBsb25nIGZyYWN0IF9fc2F0ZnJhY3R1c2FkcSAodW5zaWduZWQgYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHNob3J0IGFjY3VtIF9fc2F0ZnJhY3R1c2FoYSAodW5zaWduZWQgYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGFjY3VtIF9fc2F0ZnJhY3R1c2FzYSAodW5zaWduZWQgYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgYWNjdW0gX19zYXRmcmFjdHVzYWRhICh1bnNpZ25lZCBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBsb25nIGFjY3VtIF9fc2F0ZnJhY3R1c2F0YSAodW5zaWduZWQgYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIHNob3J0IGZyYWN0IF9fc2F0ZnJhY3R1c2F1cXEgKHVuc2lnbmVkCiAgICAgICAgICBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgZnJhY3QgX19zYXRmcmFjdHVzYXVocSAodW5zaWduZWQgYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGxvbmcgZnJhY3QgX19zYXRmcmFjdHVzYXVzcSAodW5zaWduZWQKICAgICAgICAgIGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGxvbmcgZnJhY3QgX19zYXRmcmFjdHVzYXVkcQogICAgICAgICAgKHVuc2lnbmVkIGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBzaG9ydCBhY2N1bSBfX3NhdGZyYWN0dXNhdWhhMiAodW5zaWduZWQKICAgICAgICAgIGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGFjY3VtIF9fc2F0ZnJhY3R1c2F1ZGEyICh1bnNpZ25lZAogICAgICAgICAgYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGxvbmcgbG9uZyBhY2N1bSBfX3NhdGZyYWN0dXNhdXRhMgogICAgICAgICAgKHVuc2lnbmVkIGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBzaG9ydCBmcmFjdCBfX3NhdGZyYWN0dWRhcXEgKHVuc2lnbmVkIGxvbmcgYWNjdW0KICAgICAgICAgIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBmcmFjdCBfX3NhdGZyYWN0dWRhaHEgKHVuc2lnbmVkIGxvbmcgYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgZnJhY3QgX19zYXRmcmFjdHVkYXNxICh1bnNpZ25lZCBsb25nIGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGxvbmcgZnJhY3QgX19zYXRmcmFjdHVkYWRxICh1bnNpZ25lZCBsb25nCiAgICAgICAgICBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogc2hvcnQgYWNjdW0gX19zYXRmcmFjdHVkYWhhICh1bnNpZ25lZCBsb25nIGFjY3VtCiAgICAgICAgICBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogYWNjdW0gX19zYXRmcmFjdHVkYXNhICh1bnNpZ25lZCBsb25nIGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGFjY3VtIF9fc2F0ZnJhY3R1ZGFkYSAodW5zaWduZWQgbG9uZyBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBsb25nIGFjY3VtIF9fc2F0ZnJhY3R1ZGF0YSAodW5zaWduZWQgbG9uZwogICAgICAgICAgYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIHNob3J0IGZyYWN0IF9fc2F0ZnJhY3R1ZGF1cXEgKHVuc2lnbmVkCiAgICAgICAgICBsb25nIGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBmcmFjdCBfX3NhdGZyYWN0dWRhdWhxICh1bnNpZ25lZCBsb25nCiAgICAgICAgICBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBmcmFjdCBfX3NhdGZyYWN0dWRhdXNxICh1bnNpZ25lZAogICAgICAgICAgbG9uZyBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBsb25nIGZyYWN0IF9fc2F0ZnJhY3R1ZGF1ZHEKICAgICAgICAgICh1bnNpZ25lZCBsb25nIGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBzaG9ydCBhY2N1bSBfX3NhdGZyYWN0dWRhdWhhMiAodW5zaWduZWQKICAgICAgICAgIGxvbmcgYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGFjY3VtIF9fc2F0ZnJhY3R1ZGF1c2EyICh1bnNpZ25lZCBsb25nCiAgICAgICAgICBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBsb25nIGFjY3VtIF9fc2F0ZnJhY3R1ZGF1dGEyCiAgICAgICAgICAodW5zaWduZWQgbG9uZyBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogc2hvcnQgZnJhY3QgX19zYXRmcmFjdHV0YXFxICh1bnNpZ25lZCBsb25nIGxvbmcKICAgICAgICAgIGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBmcmFjdCBfX3NhdGZyYWN0dXRhaHEgKHVuc2lnbmVkIGxvbmcgbG9uZyBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBmcmFjdCBfX3NhdGZyYWN0dXRhc3EgKHVuc2lnbmVkIGxvbmcgbG9uZwogICAgICAgICAgYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgbG9uZyBmcmFjdCBfX3NhdGZyYWN0dXRhZHEgKHVuc2lnbmVkIGxvbmcKICAgICAgICAgIGxvbmcgYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHNob3J0IGFjY3VtIF9fc2F0ZnJhY3R1dGFoYSAodW5zaWduZWQgbG9uZyBsb25nCiAgICAgICAgICBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogYWNjdW0gX19zYXRmcmFjdHV0YXNhICh1bnNpZ25lZCBsb25nIGxvbmcgYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgYWNjdW0gX19zYXRmcmFjdHV0YWRhICh1bnNpZ25lZCBsb25nIGxvbmcKICAgICAgICAgIGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGxvbmcgYWNjdW0gX19zYXRmcmFjdHV0YXRhICh1bnNpZ25lZCBsb25nCiAgICAgICAgICBsb25nIGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBzaG9ydCBmcmFjdCBfX3NhdGZyYWN0dXRhdXFxICh1bnNpZ25lZAogICAgICAgICAgbG9uZyBsb25nIGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBmcmFjdCBfX3NhdGZyYWN0dXRhdWhxICh1bnNpZ25lZCBsb25nCiAgICAgICAgICBsb25nIGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGZyYWN0IF9fc2F0ZnJhY3R1dGF1c3EgKHVuc2lnbmVkCiAgICAgICAgICBsb25nIGxvbmcgYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGxvbmcgbG9uZyBmcmFjdCBfX3NhdGZyYWN0dXRhdWRxCiAgICAgICAgICAodW5zaWduZWQgbG9uZyBsb25nIGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBzaG9ydCBhY2N1bSBfX3NhdGZyYWN0dXRhdWhhMiAodW5zaWduZWQKICAgICAgICAgIGxvbmcgbG9uZyBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgYWNjdW0gX19zYXRmcmFjdHV0YXVzYTIgKHVuc2lnbmVkIGxvbmcKICAgICAgICAgIGxvbmcgYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGxvbmcgYWNjdW0gX19zYXRmcmFjdHV0YXVkYTIgKHVuc2lnbmVkCiAgICAgICAgICBsb25nIGxvbmcgYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHNob3J0IGZyYWN0IF9fc2F0ZnJhY3RxaXFxIChzaWduZWQgY2hhciBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogZnJhY3QgX19zYXRmcmFjdHFpaHEgKHNpZ25lZCBjaGFyIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGZyYWN0IF9fc2F0ZnJhY3RxaXNxIChzaWduZWQgY2hhciBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBsb25nIGZyYWN0IF9fc2F0ZnJhY3RxaWRxIChzaWduZWQgY2hhciBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogc2hvcnQgYWNjdW0gX19zYXRmcmFjdHFpaGEgKHNpZ25lZCBjaGFyIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBhY2N1bSBfX3NhdGZyYWN0cWlzYSAoc2lnbmVkIGNoYXIgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgYWNjdW0gX19zYXRmcmFjdHFpZGEgKHNpZ25lZCBjaGFyIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGxvbmcgYWNjdW0gX19zYXRmcmFjdHFpdGEgKHNpZ25lZCBjaGFyIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBzaG9ydCBmcmFjdCBfX3NhdGZyYWN0cWl1cXEgKHNpZ25lZCBjaGFyCiAgICAgICAgICBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgZnJhY3QgX19zYXRmcmFjdHFpdWhxIChzaWduZWQgY2hhciBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBmcmFjdCBfX3NhdGZyYWN0cWl1c3EgKHNpZ25lZCBjaGFyCiAgICAgICAgICBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBsb25nIGZyYWN0IF9fc2F0ZnJhY3RxaXVkcSAoc2lnbmVkCiAgICAgICAgICBjaGFyIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBzaG9ydCBhY2N1bSBfX3NhdGZyYWN0cWl1aGEgKHNpZ25lZCBjaGFyCiAgICAgICAgICBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgYWNjdW0gX19zYXRmcmFjdHFpdXNhIChzaWduZWQgY2hhciBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBhY2N1bSBfX3NhdGZyYWN0cWl1ZGEgKHNpZ25lZCBjaGFyCiAgICAgICAgICBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBsb25nIGFjY3VtIF9fc2F0ZnJhY3RxaXV0YSAoc2lnbmVkCiAgICAgICAgICBjaGFyIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBzaG9ydCBmcmFjdCBfX3NhdGZyYWN0aGlxcSAoc2hvcnQgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGZyYWN0IF9fc2F0ZnJhY3RoaWhxIChzaG9ydCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBmcmFjdCBfX3NhdGZyYWN0aGlzcSAoc2hvcnQgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgbG9uZyBmcmFjdCBfX3NhdGZyYWN0aGlkcSAoc2hvcnQgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHNob3J0IGFjY3VtIF9fc2F0ZnJhY3RoaWhhIChzaG9ydCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogYWNjdW0gX19zYXRmcmFjdGhpc2EgKHNob3J0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGFjY3VtIF9fc2F0ZnJhY3RoaWRhIChzaG9ydCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBsb25nIGFjY3VtIF9fc2F0ZnJhY3RoaXRhIChzaG9ydCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgc2hvcnQgZnJhY3QgX19zYXRmcmFjdGhpdXFxIChzaG9ydCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgZnJhY3QgX19zYXRmcmFjdGhpdWhxIChzaG9ydCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBmcmFjdCBfX3NhdGZyYWN0aGl1c3EgKHNob3J0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGxvbmcgZnJhY3QgX19zYXRmcmFjdGhpdWRxIChzaG9ydCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgc2hvcnQgYWNjdW0gX19zYXRmcmFjdGhpdWhhIChzaG9ydCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgYWNjdW0gX19zYXRmcmFjdGhpdXNhIChzaG9ydCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBhY2N1bSBfX3NhdGZyYWN0aGl1ZGEgKHNob3J0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGxvbmcgYWNjdW0gX19zYXRmcmFjdGhpdXRhIChzaG9ydCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogc2hvcnQgZnJhY3QgX19zYXRmcmFjdHNpcXEgKGludCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogZnJhY3QgX19zYXRmcmFjdHNpaHEgKGludCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBmcmFjdCBfX3NhdGZyYWN0c2lzcSAoaW50IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGxvbmcgZnJhY3QgX19zYXRmcmFjdHNpZHEgKGludCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogc2hvcnQgYWNjdW0gX19zYXRmcmFjdHNpaGEgKGludCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogYWNjdW0gX19zYXRmcmFjdHNpc2EgKGludCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBhY2N1bSBfX3NhdGZyYWN0c2lkYSAoaW50IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGxvbmcgYWNjdW0gX19zYXRmcmFjdHNpdGEgKGludCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgc2hvcnQgZnJhY3QgX19zYXRmcmFjdHNpdXFxIChpbnQgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGZyYWN0IF9fc2F0ZnJhY3RzaXVocSAoaW50IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGZyYWN0IF9fc2F0ZnJhY3RzaXVzcSAoaW50IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGxvbmcgZnJhY3QgX19zYXRmcmFjdHNpdWRxIChpbnQgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIHNob3J0IGFjY3VtIF9fc2F0ZnJhY3RzaXVoYSAoaW50IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBhY2N1bSBfX3NhdGZyYWN0c2l1c2EgKGludCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBhY2N1bSBfX3NhdGZyYWN0c2l1ZGEgKGludCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBsb25nIGFjY3VtIF9fc2F0ZnJhY3RzaXV0YSAoaW50IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBzaG9ydCBmcmFjdCBfX3NhdGZyYWN0ZGlxcSAobG9uZyBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogZnJhY3QgX19zYXRmcmFjdGRpaHEgKGxvbmcgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgZnJhY3QgX19zYXRmcmFjdGRpc3EgKGxvbmcgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgbG9uZyBmcmFjdCBfX3NhdGZyYWN0ZGlkcSAobG9uZyBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogc2hvcnQgYWNjdW0gX19zYXRmcmFjdGRpaGEgKGxvbmcgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGFjY3VtIF9fc2F0ZnJhY3RkaXNhIChsb25nIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGFjY3VtIF9fc2F0ZnJhY3RkaWRhIChsb25nIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGxvbmcgYWNjdW0gX19zYXRmcmFjdGRpdGEgKGxvbmcgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIHNob3J0IGZyYWN0IF9fc2F0ZnJhY3RkaXVxcSAobG9uZyBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgZnJhY3QgX19zYXRmcmFjdGRpdWhxIChsb25nIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGZyYWN0IF9fc2F0ZnJhY3RkaXVzcSAobG9uZyBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBsb25nIGZyYWN0IF9fc2F0ZnJhY3RkaXVkcSAobG9uZyBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgc2hvcnQgYWNjdW0gX19zYXRmcmFjdGRpdWhhIChsb25nIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBhY2N1bSBfX3NhdGZyYWN0ZGl1c2EgKGxvbmcgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGxvbmcgYWNjdW0gX19zYXRmcmFjdGRpdWRhIChsb25nIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGxvbmcgYWNjdW0gX19zYXRmcmFjdGRpdXRhIChsb25nIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBzaG9ydCBmcmFjdCBfX3NhdGZyYWN0dGlxcSAobG9uZyBsb25nIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBmcmFjdCBfX3NhdGZyYWN0dGlocSAobG9uZyBsb25nIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGZyYWN0IF9fc2F0ZnJhY3R0aXNxIChsb25nIGxvbmcgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgbG9uZyBmcmFjdCBfX3NhdGZyYWN0dGlkcSAobG9uZyBsb25nIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBzaG9ydCBhY2N1bSBfX3NhdGZyYWN0dGloYSAobG9uZyBsb25nIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBhY2N1bSBfX3NhdGZyYWN0dGlzYSAobG9uZyBsb25nIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGFjY3VtIF9fc2F0ZnJhY3R0aWRhIChsb25nIGxvbmcgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgbG9uZyBhY2N1bSBfX3NhdGZyYWN0dGl0YSAobG9uZyBsb25nIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBzaG9ydCBmcmFjdCBfX3NhdGZyYWN0dGl1cXEgKGxvbmcgbG9uZyBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgZnJhY3QgX19zYXRmcmFjdHRpdWhxIChsb25nIGxvbmcgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGxvbmcgZnJhY3QgX19zYXRmcmFjdHRpdXNxIChsb25nIGxvbmcgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGxvbmcgbG9uZyBmcmFjdCBfX3NhdGZyYWN0dGl1ZHEgKGxvbmcKICAgICAgICAgIGxvbmcgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIHNob3J0IGFjY3VtIF9fc2F0ZnJhY3R0aXVoYSAobG9uZyBsb25nIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBhY2N1bSBfX3NhdGZyYWN0dGl1c2EgKGxvbmcgbG9uZyBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBhY2N1bSBfX3NhdGZyYWN0dGl1ZGEgKGxvbmcgbG9uZyBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBsb25nIGFjY3VtIF9fc2F0ZnJhY3R0aXV0YSAobG9uZwogICAgICAgICAgbG9uZyBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogc2hvcnQgZnJhY3QgX19zYXRmcmFjdHNmcXEgKGZsb2F0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBmcmFjdCBfX3NhdGZyYWN0c2ZocSAoZmxvYXQgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgZnJhY3QgX19zYXRmcmFjdHNmc3EgKGZsb2F0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGxvbmcgZnJhY3QgX19zYXRmcmFjdHNmZHEgKGZsb2F0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBzaG9ydCBhY2N1bSBfX3NhdGZyYWN0c2ZoYSAoZmxvYXQgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGFjY3VtIF9fc2F0ZnJhY3RzZnNhIChmbG9hdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBhY2N1bSBfX3NhdGZyYWN0c2ZkYSAoZmxvYXQgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgbG9uZyBhY2N1bSBfX3NhdGZyYWN0c2Z0YSAoZmxvYXQgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIHNob3J0IGZyYWN0IF9fc2F0ZnJhY3RzZnVxcSAoZmxvYXQgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGZyYWN0IF9fc2F0ZnJhY3RzZnVocSAoZmxvYXQgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGxvbmcgZnJhY3QgX19zYXRmcmFjdHNmdXNxIChmbG9hdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBsb25nIGZyYWN0IF9fc2F0ZnJhY3RzZnVkcSAoZmxvYXQgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIHNob3J0IGFjY3VtIF9fc2F0ZnJhY3RzZnVoYSAoZmxvYXQgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGFjY3VtIF9fc2F0ZnJhY3RzZnVzYSAoZmxvYXQgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGxvbmcgYWNjdW0gX19zYXRmcmFjdHNmdWRhIChmbG9hdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBsb25nIGFjY3VtIF9fc2F0ZnJhY3RzZnV0YSAoZmxvYXQgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHNob3J0IGZyYWN0IF9fc2F0ZnJhY3RkZnFxIChkb3VibGUgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGZyYWN0IF9fc2F0ZnJhY3RkZmhxIChkb3VibGUgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgZnJhY3QgX19zYXRmcmFjdGRmc3EgKGRvdWJsZSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBsb25nIGZyYWN0IF9fc2F0ZnJhY3RkZmRxIChkb3VibGUgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHNob3J0IGFjY3VtIF9fc2F0ZnJhY3RkZmhhIChkb3VibGUgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGFjY3VtIF9fc2F0ZnJhY3RkZnNhIChkb3VibGUgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgYWNjdW0gX19zYXRmcmFjdGRmZGEgKGRvdWJsZSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBsb25nIGFjY3VtIF9fc2F0ZnJhY3RkZnRhIChkb3VibGUgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIHNob3J0IGZyYWN0IF9fc2F0ZnJhY3RkZnVxcSAoZG91YmxlIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBmcmFjdCBfX3NhdGZyYWN0ZGZ1aHEgKGRvdWJsZSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBmcmFjdCBfX3NhdGZyYWN0ZGZ1c3EgKGRvdWJsZSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBsb25nIGZyYWN0IF9fc2F0ZnJhY3RkZnVkcSAoZG91YmxlCiAgICAgICAgICBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgc2hvcnQgYWNjdW0gX19zYXRmcmFjdGRmdWhhIChkb3VibGUgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGFjY3VtIF9fc2F0ZnJhY3RkZnVzYSAoZG91YmxlIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGFjY3VtIF9fc2F0ZnJhY3RkZnVkYSAoZG91YmxlIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGxvbmcgYWNjdW0gX19zYXRmcmFjdGRmdXRhIChkb3VibGUKICAgICAgICAgIEEpCiAgICAgVGhlIGZ1bmN0aW9ucyBjb252ZXJ0IGZyb20gZnJhY3Rpb25hbCBhbmQgc2lnbmVkIG5vbi1mcmFjdGlvbmFscyB0bwogICAgIGZyYWN0aW9uYWxzLCB3aXRoIHNhdHVyYXRpb24uCgogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgY2hhciBfX2ZyYWN0dW5zcXFxaSAoc2hvcnQgZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIHNob3J0IF9fZnJhY3R1bnNxcWhpIChzaG9ydCBmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgaW50IF9fZnJhY3R1bnNxcXNpIChzaG9ydCBmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBfX2ZyYWN0dW5zcXFkaSAoc2hvcnQgZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGxvbmcgbG9uZyBfX2ZyYWN0dW5zcXF0aSAoc2hvcnQgZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGNoYXIgX19mcmFjdHVuc2hxcWkgKGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBzaG9ydCBfX2ZyYWN0dW5zaHFoaSAoZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGludCBfX2ZyYWN0dW5zaHFzaSAoZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGxvbmcgX19mcmFjdHVuc2hxZGkgKGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGxvbmcgX19mcmFjdHVuc2hxdGkgKGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBjaGFyIF9fZnJhY3R1bnNzcXFpIChsb25nIGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBzaG9ydCBfX2ZyYWN0dW5zc3FoaSAobG9uZyBmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgaW50IF9fZnJhY3R1bnNzcXNpIChsb25nIGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIF9fZnJhY3R1bnNzcWRpIChsb25nIGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGxvbmcgX19mcmFjdHVuc3NxdGkgKGxvbmcgZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGNoYXIgX19mcmFjdHVuc2RxcWkgKGxvbmcgbG9uZyBmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgc2hvcnQgX19mcmFjdHVuc2RxaGkgKGxvbmcgbG9uZyBmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgaW50IF9fZnJhY3R1bnNkcXNpIChsb25nIGxvbmcgZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGxvbmcgX19mcmFjdHVuc2RxZGkgKGxvbmcgbG9uZyBmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBsb25nIF9fZnJhY3R1bnNkcXRpIChsb25nIGxvbmcgZnJhY3QKICAgICAgICAgIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBjaGFyIF9fZnJhY3R1bnNoYXFpIChzaG9ydCBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgc2hvcnQgX19mcmFjdHVuc2hhaGkgKHNob3J0IGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBpbnQgX19mcmFjdHVuc2hhc2kgKHNob3J0IGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIF9fZnJhY3R1bnNoYWRpIChzaG9ydCBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBsb25nIF9fZnJhY3R1bnNoYXRpIChzaG9ydCBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgY2hhciBfX2ZyYWN0dW5zc2FxaSAoYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIHNob3J0IF9fZnJhY3R1bnNzYWhpIChhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgaW50IF9fZnJhY3R1bnNzYXNpIChhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBfX2ZyYWN0dW5zc2FkaSAoYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGxvbmcgbG9uZyBfX2ZyYWN0dW5zc2F0aSAoYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGNoYXIgX19mcmFjdHVuc2RhcWkgKGxvbmcgYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIHNob3J0IF9fZnJhY3R1bnNkYWhpIChsb25nIGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBpbnQgX19mcmFjdHVuc2Rhc2kgKGxvbmcgYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGxvbmcgX19mcmFjdHVuc2RhZGkgKGxvbmcgYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGxvbmcgbG9uZyBfX2ZyYWN0dW5zZGF0aSAobG9uZyBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgY2hhciBfX2ZyYWN0dW5zdGFxaSAobG9uZyBsb25nIGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBzaG9ydCBfX2ZyYWN0dW5zdGFoaSAobG9uZyBsb25nIGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBpbnQgX19mcmFjdHVuc3Rhc2kgKGxvbmcgbG9uZyBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBfX2ZyYWN0dW5zdGFkaSAobG9uZyBsb25nIGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGxvbmcgX19mcmFjdHVuc3RhdGkgKGxvbmcgbG9uZyBhY2N1bQogICAgICAgICAgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGNoYXIgX19mcmFjdHVuc3VxcXFpICh1bnNpZ25lZCBzaG9ydAogICAgICAgICAgZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIHNob3J0IF9fZnJhY3R1bnN1cXFoaSAodW5zaWduZWQgc2hvcnQKICAgICAgICAgIGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBpbnQgX19mcmFjdHVuc3VxcXNpICh1bnNpZ25lZCBzaG9ydCBmcmFjdAogICAgICAgICAgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGxvbmcgX19mcmFjdHVuc3VxcWRpICh1bnNpZ25lZCBzaG9ydAogICAgICAgICAgZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGxvbmcgbG9uZyBfX2ZyYWN0dW5zdXFxdGkgKHVuc2lnbmVkIHNob3J0CiAgICAgICAgICBmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgY2hhciBfX2ZyYWN0dW5zdWhxcWkgKHVuc2lnbmVkIGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBzaG9ydCBfX2ZyYWN0dW5zdWhxaGkgKHVuc2lnbmVkIGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBpbnQgX19mcmFjdHVuc3VocXNpICh1bnNpZ25lZCBmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBfX2ZyYWN0dW5zdWhxZGkgKHVuc2lnbmVkIGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGxvbmcgX19mcmFjdHVuc3VocXRpICh1bnNpZ25lZCBmcmFjdAogICAgICAgICAgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGNoYXIgX19mcmFjdHVuc3VzcXFpICh1bnNpZ25lZCBsb25nIGZyYWN0CiAgICAgICAgICBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgc2hvcnQgX19mcmFjdHVuc3VzcWhpICh1bnNpZ25lZCBsb25nCiAgICAgICAgICBmcmFjdCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgaW50IF9fZnJhY3R1bnN1c3FzaSAodW5zaWduZWQgbG9uZyBmcmFjdAogICAgICAgICAgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGxvbmcgX19mcmFjdHVuc3VzcWRpICh1bnNpZ25lZCBsb25nIGZyYWN0CiAgICAgICAgICBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBsb25nIF9fZnJhY3R1bnN1c3F0aSAodW5zaWduZWQgbG9uZwogICAgICAgICAgZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGNoYXIgX19mcmFjdHVuc3VkcXFpICh1bnNpZ25lZCBsb25nIGxvbmcKICAgICAgICAgIGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBzaG9ydCBfX2ZyYWN0dW5zdWRxaGkgKHVuc2lnbmVkIGxvbmcgbG9uZwogICAgICAgICAgZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGludCBfX2ZyYWN0dW5zdWRxc2kgKHVuc2lnbmVkIGxvbmcgbG9uZwogICAgICAgICAgZnJhY3QgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGxvbmcgX19mcmFjdHVuc3VkcWRpICh1bnNpZ25lZCBsb25nIGxvbmcKICAgICAgICAgIGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGxvbmcgX19mcmFjdHVuc3VkcXRpICh1bnNpZ25lZCBsb25nCiAgICAgICAgICBsb25nIGZyYWN0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBjaGFyIF9fZnJhY3R1bnN1aGFxaSAodW5zaWduZWQgc2hvcnQKICAgICAgICAgIGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBzaG9ydCBfX2ZyYWN0dW5zdWhhaGkgKHVuc2lnbmVkIHNob3J0CiAgICAgICAgICBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgaW50IF9fZnJhY3R1bnN1aGFzaSAodW5zaWduZWQgc2hvcnQgYWNjdW0KICAgICAgICAgIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIF9fZnJhY3R1bnN1aGFkaSAodW5zaWduZWQgc2hvcnQKICAgICAgICAgIGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGxvbmcgX19mcmFjdHVuc3VoYXRpICh1bnNpZ25lZCBzaG9ydAogICAgICAgICAgYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGNoYXIgX19mcmFjdHVuc3VzYXFpICh1bnNpZ25lZCBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgc2hvcnQgX19mcmFjdHVuc3VzYWhpICh1bnNpZ25lZCBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgaW50IF9fZnJhY3R1bnN1c2FzaSAodW5zaWduZWQgYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGxvbmcgX19mcmFjdHVuc3VzYWRpICh1bnNpZ25lZCBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBsb25nIF9fZnJhY3R1bnN1c2F0aSAodW5zaWduZWQgYWNjdW0KICAgICAgICAgIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBjaGFyIF9fZnJhY3R1bnN1ZGFxaSAodW5zaWduZWQgbG9uZyBhY2N1bQogICAgICAgICAgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIHNob3J0IF9fZnJhY3R1bnN1ZGFoaSAodW5zaWduZWQgbG9uZwogICAgICAgICAgYWNjdW0gQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGludCBfX2ZyYWN0dW5zdWRhc2kgKHVuc2lnbmVkIGxvbmcgYWNjdW0KICAgICAgICAgIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIF9fZnJhY3R1bnN1ZGFkaSAodW5zaWduZWQgbG9uZyBhY2N1bQogICAgICAgICAgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGxvbmcgbG9uZyBfX2ZyYWN0dW5zdWRhdGkgKHVuc2lnbmVkIGxvbmcKICAgICAgICAgIGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBjaGFyIF9fZnJhY3R1bnN1dGFxaSAodW5zaWduZWQgbG9uZyBsb25nCiAgICAgICAgICBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgc2hvcnQgX19mcmFjdHVuc3V0YWhpICh1bnNpZ25lZCBsb25nIGxvbmcKICAgICAgICAgIGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBpbnQgX19mcmFjdHVuc3V0YXNpICh1bnNpZ25lZCBsb25nIGxvbmcKICAgICAgICAgIGFjY3VtIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIF9fZnJhY3R1bnN1dGFkaSAodW5zaWduZWQgbG9uZyBsb25nCiAgICAgICAgICBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBsb25nIF9fZnJhY3R1bnN1dGF0aSAodW5zaWduZWQgbG9uZwogICAgICAgICAgbG9uZyBhY2N1bSBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogc2hvcnQgZnJhY3QgX19mcmFjdHVuc3FpcXEgKHVuc2lnbmVkIGNoYXIgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGZyYWN0IF9fZnJhY3R1bnNxaWhxICh1bnNpZ25lZCBjaGFyIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGZyYWN0IF9fZnJhY3R1bnNxaXNxICh1bnNpZ25lZCBjaGFyIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGxvbmcgZnJhY3QgX19mcmFjdHVuc3FpZHEgKHVuc2lnbmVkIGNoYXIgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHNob3J0IGFjY3VtIF9fZnJhY3R1bnNxaWhhICh1bnNpZ25lZCBjaGFyIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBhY2N1bSBfX2ZyYWN0dW5zcWlzYSAodW5zaWduZWQgY2hhciBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBhY2N1bSBfX2ZyYWN0dW5zcWlkYSAodW5zaWduZWQgY2hhciBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBsb25nIGFjY3VtIF9fZnJhY3R1bnNxaXRhICh1bnNpZ25lZCBjaGFyIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBzaG9ydCBmcmFjdCBfX2ZyYWN0dW5zcWl1cXEgKHVuc2lnbmVkCiAgICAgICAgICBjaGFyIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBmcmFjdCBfX2ZyYWN0dW5zcWl1aHEgKHVuc2lnbmVkIGNoYXIgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGxvbmcgZnJhY3QgX19mcmFjdHVuc3FpdXNxICh1bnNpZ25lZCBjaGFyCiAgICAgICAgICBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBsb25nIGZyYWN0IF9fZnJhY3R1bnNxaXVkcSAodW5zaWduZWQKICAgICAgICAgIGNoYXIgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIHNob3J0IGFjY3VtIF9fZnJhY3R1bnNxaXVoYSAodW5zaWduZWQKICAgICAgICAgIGNoYXIgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGFjY3VtIF9fZnJhY3R1bnNxaXVzYSAodW5zaWduZWQgY2hhciBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBhY2N1bSBfX2ZyYWN0dW5zcWl1ZGEgKHVuc2lnbmVkIGNoYXIKICAgICAgICAgIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGxvbmcgYWNjdW0gX19mcmFjdHVuc3FpdXRhICh1bnNpZ25lZAogICAgICAgICAgY2hhciBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogc2hvcnQgZnJhY3QgX19mcmFjdHVuc2hpcXEgKHVuc2lnbmVkIHNob3J0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBmcmFjdCBfX2ZyYWN0dW5zaGlocSAodW5zaWduZWQgc2hvcnQgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgZnJhY3QgX19mcmFjdHVuc2hpc3EgKHVuc2lnbmVkIHNob3J0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGxvbmcgZnJhY3QgX19mcmFjdHVuc2hpZHEgKHVuc2lnbmVkIHNob3J0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBzaG9ydCBhY2N1bSBfX2ZyYWN0dW5zaGloYSAodW5zaWduZWQgc2hvcnQgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGFjY3VtIF9fZnJhY3R1bnNoaXNhICh1bnNpZ25lZCBzaG9ydCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBhY2N1bSBfX2ZyYWN0dW5zaGlkYSAodW5zaWduZWQgc2hvcnQgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgbG9uZyBhY2N1bSBfX2ZyYWN0dW5zaGl0YSAodW5zaWduZWQgc2hvcnQgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIHNob3J0IGZyYWN0IF9fZnJhY3R1bnNoaXVxcSAodW5zaWduZWQKICAgICAgICAgIHNob3J0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBmcmFjdCBfX2ZyYWN0dW5zaGl1aHEgKHVuc2lnbmVkIHNob3J0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGZyYWN0IF9fZnJhY3R1bnNoaXVzcSAodW5zaWduZWQKICAgICAgICAgIHNob3J0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGxvbmcgZnJhY3QgX19mcmFjdHVuc2hpdWRxICh1bnNpZ25lZAogICAgICAgICAgc2hvcnQgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIHNob3J0IGFjY3VtIF9fZnJhY3R1bnNoaXVoYSAodW5zaWduZWQKICAgICAgICAgIHNob3J0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBhY2N1bSBfX2ZyYWN0dW5zaGl1c2EgKHVuc2lnbmVkIHNob3J0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGFjY3VtIF9fZnJhY3R1bnNoaXVkYSAodW5zaWduZWQKICAgICAgICAgIHNob3J0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGxvbmcgYWNjdW0gX19mcmFjdHVuc2hpdXRhICh1bnNpZ25lZAogICAgICAgICAgc2hvcnQgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHNob3J0IGZyYWN0IF9fZnJhY3R1bnNzaXFxICh1bnNpZ25lZCBpbnQgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGZyYWN0IF9fZnJhY3R1bnNzaWhxICh1bnNpZ25lZCBpbnQgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgZnJhY3QgX19mcmFjdHVuc3Npc3EgKHVuc2lnbmVkIGludCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBsb25nIGZyYWN0IF9fZnJhY3R1bnNzaWRxICh1bnNpZ25lZCBpbnQgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHNob3J0IGFjY3VtIF9fZnJhY3R1bnNzaWhhICh1bnNpZ25lZCBpbnQgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGFjY3VtIF9fZnJhY3R1bnNzaXNhICh1bnNpZ25lZCBpbnQgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgYWNjdW0gX19mcmFjdHVuc3NpZGEgKHVuc2lnbmVkIGludCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBsb25nIGFjY3VtIF9fZnJhY3R1bnNzaXRhICh1bnNpZ25lZCBpbnQgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIHNob3J0IGZyYWN0IF9fZnJhY3R1bnNzaXVxcSAodW5zaWduZWQgaW50CiAgICAgICAgICBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgZnJhY3QgX19mcmFjdHVuc3NpdWhxICh1bnNpZ25lZCBpbnQgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGxvbmcgZnJhY3QgX19mcmFjdHVuc3NpdXNxICh1bnNpZ25lZCBpbnQKICAgICAgICAgIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGxvbmcgZnJhY3QgX19mcmFjdHVuc3NpdWRxICh1bnNpZ25lZAogICAgICAgICAgaW50IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBzaG9ydCBhY2N1bSBfX2ZyYWN0dW5zc2l1aGEgKHVuc2lnbmVkIGludAogICAgICAgICAgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGFjY3VtIF9fZnJhY3R1bnNzaXVzYSAodW5zaWduZWQgaW50IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGFjY3VtIF9fZnJhY3R1bnNzaXVkYSAodW5zaWduZWQgaW50CiAgICAgICAgICBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBsb25nIGFjY3VtIF9fZnJhY3R1bnNzaXV0YSAodW5zaWduZWQKICAgICAgICAgIGludCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogc2hvcnQgZnJhY3QgX19mcmFjdHVuc2RpcXEgKHVuc2lnbmVkIGxvbmcgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGZyYWN0IF9fZnJhY3R1bnNkaWhxICh1bnNpZ25lZCBsb25nIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGZyYWN0IF9fZnJhY3R1bnNkaXNxICh1bnNpZ25lZCBsb25nIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGxvbmcgZnJhY3QgX19mcmFjdHVuc2RpZHEgKHVuc2lnbmVkIGxvbmcgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHNob3J0IGFjY3VtIF9fZnJhY3R1bnNkaWhhICh1bnNpZ25lZCBsb25nIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBhY2N1bSBfX2ZyYWN0dW5zZGlzYSAodW5zaWduZWQgbG9uZyBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBhY2N1bSBfX2ZyYWN0dW5zZGlkYSAodW5zaWduZWQgbG9uZyBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBsb25nIGFjY3VtIF9fZnJhY3R1bnNkaXRhICh1bnNpZ25lZCBsb25nIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBzaG9ydCBmcmFjdCBfX2ZyYWN0dW5zZGl1cXEgKHVuc2lnbmVkCiAgICAgICAgICBsb25nIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBmcmFjdCBfX2ZyYWN0dW5zZGl1aHEgKHVuc2lnbmVkIGxvbmcgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGxvbmcgZnJhY3QgX19mcmFjdHVuc2RpdXNxICh1bnNpZ25lZCBsb25nCiAgICAgICAgICBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBsb25nIGZyYWN0IF9fZnJhY3R1bnNkaXVkcSAodW5zaWduZWQKICAgICAgICAgIGxvbmcgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIHNob3J0IGFjY3VtIF9fZnJhY3R1bnNkaXVoYSAodW5zaWduZWQKICAgICAgICAgIGxvbmcgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGFjY3VtIF9fZnJhY3R1bnNkaXVzYSAodW5zaWduZWQgbG9uZyBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBhY2N1bSBfX2ZyYWN0dW5zZGl1ZGEgKHVuc2lnbmVkIGxvbmcKICAgICAgICAgIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGxvbmcgYWNjdW0gX19mcmFjdHVuc2RpdXRhICh1bnNpZ25lZAogICAgICAgICAgbG9uZyBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogc2hvcnQgZnJhY3QgX19mcmFjdHVuc3RpcXEgKHVuc2lnbmVkIGxvbmcgbG9uZyBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogZnJhY3QgX19mcmFjdHVuc3RpaHEgKHVuc2lnbmVkIGxvbmcgbG9uZyBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBmcmFjdCBfX2ZyYWN0dW5zdGlzcSAodW5zaWduZWQgbG9uZyBsb25nIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGxvbmcgZnJhY3QgX19mcmFjdHVuc3RpZHEgKHVuc2lnbmVkIGxvbmcgbG9uZwogICAgICAgICAgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHNob3J0IGFjY3VtIF9fZnJhY3R1bnN0aWhhICh1bnNpZ25lZCBsb25nIGxvbmcgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGFjY3VtIF9fZnJhY3R1bnN0aXNhICh1bnNpZ25lZCBsb25nIGxvbmcgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgYWNjdW0gX19mcmFjdHVuc3RpZGEgKHVuc2lnbmVkIGxvbmcgbG9uZyBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBsb25nIGFjY3VtIF9fZnJhY3R1bnN0aXRhICh1bnNpZ25lZCBsb25nIGxvbmcKICAgICAgICAgIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBzaG9ydCBmcmFjdCBfX2ZyYWN0dW5zdGl1cXEgKHVuc2lnbmVkCiAgICAgICAgICBsb25nIGxvbmcgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGZyYWN0IF9fZnJhY3R1bnN0aXVocSAodW5zaWduZWQgbG9uZyBsb25nCiAgICAgICAgICBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBmcmFjdCBfX2ZyYWN0dW5zdGl1c3EgKHVuc2lnbmVkIGxvbmcKICAgICAgICAgIGxvbmcgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGxvbmcgbG9uZyBmcmFjdCBfX2ZyYWN0dW5zdGl1ZHEgKHVuc2lnbmVkCiAgICAgICAgICBsb25nIGxvbmcgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIHNob3J0IGFjY3VtIF9fZnJhY3R1bnN0aXVoYSAodW5zaWduZWQKICAgICAgICAgIGxvbmcgbG9uZyBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgYWNjdW0gX19mcmFjdHVuc3RpdXNhICh1bnNpZ25lZCBsb25nIGxvbmcKICAgICAgICAgIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGFjY3VtIF9fZnJhY3R1bnN0aXVkYSAodW5zaWduZWQgbG9uZwogICAgICAgICAgbG9uZyBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBsb25nIGFjY3VtIF9fZnJhY3R1bnN0aXV0YSAodW5zaWduZWQKICAgICAgICAgIGxvbmcgbG9uZyBBKQogICAgIFRoZXNlIGZ1bmN0aW9ucyBjb252ZXJ0IGZyb20gZnJhY3Rpb25hbHMgdG8gdW5zaWduZWQKICAgICBub24tZnJhY3Rpb25hbHM7IGFuZCBmcm9tIHVuc2lnbmVkIG5vbi1mcmFjdGlvbmFscyB0byBmcmFjdGlvbmFscywKICAgICB3aXRob3V0IHNhdHVyYXRpb24uCgogLS0gUnVudGltZSBGdW5jdGlvbjogc2hvcnQgZnJhY3QgX19zYXRmcmFjdHVuc3FpcXEgKHVuc2lnbmVkIGNoYXIgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGZyYWN0IF9fc2F0ZnJhY3R1bnNxaWhxICh1bnNpZ25lZCBjaGFyIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGZyYWN0IF9fc2F0ZnJhY3R1bnNxaXNxICh1bnNpZ25lZCBjaGFyIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGxvbmcgZnJhY3QgX19zYXRmcmFjdHVuc3FpZHEgKHVuc2lnbmVkIGNoYXIKICAgICAgICAgIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBzaG9ydCBhY2N1bSBfX3NhdGZyYWN0dW5zcWloYSAodW5zaWduZWQgY2hhciBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogYWNjdW0gX19zYXRmcmFjdHVuc3Fpc2EgKHVuc2lnbmVkIGNoYXIgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgYWNjdW0gX19zYXRmcmFjdHVuc3FpZGEgKHVuc2lnbmVkIGNoYXIgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgbG9uZyBhY2N1bSBfX3NhdGZyYWN0dW5zcWl0YSAodW5zaWduZWQgY2hhcgogICAgICAgICAgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIHNob3J0IGZyYWN0IF9fc2F0ZnJhY3R1bnNxaXVxcSAodW5zaWduZWQKICAgICAgICAgIGNoYXIgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGZyYWN0IF9fc2F0ZnJhY3R1bnNxaXVocSAodW5zaWduZWQgY2hhcgogICAgICAgICAgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGxvbmcgZnJhY3QgX19zYXRmcmFjdHVuc3FpdXNxICh1bnNpZ25lZAogICAgICAgICAgY2hhciBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBsb25nIGZyYWN0IF9fc2F0ZnJhY3R1bnNxaXVkcQogICAgICAgICAgKHVuc2lnbmVkIGNoYXIgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIHNob3J0IGFjY3VtIF9fc2F0ZnJhY3R1bnNxaXVoYSAodW5zaWduZWQKICAgICAgICAgIGNoYXIgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGFjY3VtIF9fc2F0ZnJhY3R1bnNxaXVzYSAodW5zaWduZWQgY2hhcgogICAgICAgICAgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGxvbmcgYWNjdW0gX19zYXRmcmFjdHVuc3FpdWRhICh1bnNpZ25lZAogICAgICAgICAgY2hhciBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBsb25nIGFjY3VtIF9fc2F0ZnJhY3R1bnNxaXV0YQogICAgICAgICAgKHVuc2lnbmVkIGNoYXIgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHNob3J0IGZyYWN0IF9fc2F0ZnJhY3R1bnNoaXFxICh1bnNpZ25lZCBzaG9ydCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogZnJhY3QgX19zYXRmcmFjdHVuc2hpaHEgKHVuc2lnbmVkIHNob3J0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGZyYWN0IF9fc2F0ZnJhY3R1bnNoaXNxICh1bnNpZ25lZCBzaG9ydCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBsb25nIGZyYWN0IF9fc2F0ZnJhY3R1bnNoaWRxICh1bnNpZ25lZCBzaG9ydAogICAgICAgICAgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHNob3J0IGFjY3VtIF9fc2F0ZnJhY3R1bnNoaWhhICh1bnNpZ25lZCBzaG9ydCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogYWNjdW0gX19zYXRmcmFjdHVuc2hpc2EgKHVuc2lnbmVkIHNob3J0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGFjY3VtIF9fc2F0ZnJhY3R1bnNoaWRhICh1bnNpZ25lZCBzaG9ydCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBsb25nIGFjY3VtIF9fc2F0ZnJhY3R1bnNoaXRhICh1bnNpZ25lZCBzaG9ydAogICAgICAgICAgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIHNob3J0IGZyYWN0IF9fc2F0ZnJhY3R1bnNoaXVxcSAodW5zaWduZWQKICAgICAgICAgIHNob3J0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBmcmFjdCBfX3NhdGZyYWN0dW5zaGl1aHEgKHVuc2lnbmVkIHNob3J0CiAgICAgICAgICBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBmcmFjdCBfX3NhdGZyYWN0dW5zaGl1c3EgKHVuc2lnbmVkCiAgICAgICAgICBzaG9ydCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBsb25nIGZyYWN0IF9fc2F0ZnJhY3R1bnNoaXVkcQogICAgICAgICAgKHVuc2lnbmVkIHNob3J0IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBzaG9ydCBhY2N1bSBfX3NhdGZyYWN0dW5zaGl1aGEgKHVuc2lnbmVkCiAgICAgICAgICBzaG9ydCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgYWNjdW0gX19zYXRmcmFjdHVuc2hpdXNhICh1bnNpZ25lZCBzaG9ydAogICAgICAgICAgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGxvbmcgYWNjdW0gX19zYXRmcmFjdHVuc2hpdWRhICh1bnNpZ25lZAogICAgICAgICAgc2hvcnQgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGxvbmcgbG9uZyBhY2N1bSBfX3NhdGZyYWN0dW5zaGl1dGEKICAgICAgICAgICh1bnNpZ25lZCBzaG9ydCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogc2hvcnQgZnJhY3QgX19zYXRmcmFjdHVuc3NpcXEgKHVuc2lnbmVkIGludCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogZnJhY3QgX19zYXRmcmFjdHVuc3NpaHEgKHVuc2lnbmVkIGludCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBmcmFjdCBfX3NhdGZyYWN0dW5zc2lzcSAodW5zaWduZWQgaW50IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGxvbmcgZnJhY3QgX19zYXRmcmFjdHVuc3NpZHEgKHVuc2lnbmVkIGludCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogc2hvcnQgYWNjdW0gX19zYXRmcmFjdHVuc3NpaGEgKHVuc2lnbmVkIGludCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogYWNjdW0gX19zYXRmcmFjdHVuc3Npc2EgKHVuc2lnbmVkIGludCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBhY2N1bSBfX3NhdGZyYWN0dW5zc2lkYSAodW5zaWduZWQgaW50IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBsb25nIGxvbmcgYWNjdW0gX19zYXRmcmFjdHVuc3NpdGEgKHVuc2lnbmVkIGludCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgc2hvcnQgZnJhY3QgX19zYXRmcmFjdHVuc3NpdXFxICh1bnNpZ25lZAogICAgICAgICAgaW50IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBmcmFjdCBfX3NhdGZyYWN0dW5zc2l1aHEgKHVuc2lnbmVkIGludCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBmcmFjdCBfX3NhdGZyYWN0dW5zc2l1c3EgKHVuc2lnbmVkCiAgICAgICAgICBpbnQgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGxvbmcgbG9uZyBmcmFjdCBfX3NhdGZyYWN0dW5zc2l1ZHEKICAgICAgICAgICh1bnNpZ25lZCBpbnQgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIHNob3J0IGFjY3VtIF9fc2F0ZnJhY3R1bnNzaXVoYSAodW5zaWduZWQKICAgICAgICAgIGludCBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgYWNjdW0gX19zYXRmcmFjdHVuc3NpdXNhICh1bnNpZ25lZCBpbnQgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGxvbmcgYWNjdW0gX19zYXRmcmFjdHVuc3NpdWRhICh1bnNpZ25lZAogICAgICAgICAgaW50IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGxvbmcgYWNjdW0gX19zYXRmcmFjdHVuc3NpdXRhCiAgICAgICAgICAodW5zaWduZWQgaW50IEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBzaG9ydCBmcmFjdCBfX3NhdGZyYWN0dW5zZGlxcSAodW5zaWduZWQgbG9uZyBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogZnJhY3QgX19zYXRmcmFjdHVuc2RpaHEgKHVuc2lnbmVkIGxvbmcgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgZnJhY3QgX19zYXRmcmFjdHVuc2Rpc3EgKHVuc2lnbmVkIGxvbmcgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgbG9uZyBmcmFjdCBfX3NhdGZyYWN0dW5zZGlkcSAodW5zaWduZWQgbG9uZwogICAgICAgICAgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHNob3J0IGFjY3VtIF9fc2F0ZnJhY3R1bnNkaWhhICh1bnNpZ25lZCBsb25nIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiBhY2N1bSBfX3NhdGZyYWN0dW5zZGlzYSAodW5zaWduZWQgbG9uZyBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBhY2N1bSBfX3NhdGZyYWN0dW5zZGlkYSAodW5zaWduZWQgbG9uZyBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogbG9uZyBsb25nIGFjY3VtIF9fc2F0ZnJhY3R1bnNkaXRhICh1bnNpZ25lZCBsb25nCiAgICAgICAgICBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgc2hvcnQgZnJhY3QgX19zYXRmcmFjdHVuc2RpdXFxICh1bnNpZ25lZAogICAgICAgICAgbG9uZyBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgZnJhY3QgX19zYXRmcmFjdHVuc2RpdWhxICh1bnNpZ25lZCBsb25nCiAgICAgICAgICBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBmcmFjdCBfX3NhdGZyYWN0dW5zZGl1c3EgKHVuc2lnbmVkCiAgICAgICAgICBsb25nIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGxvbmcgZnJhY3QgX19zYXRmcmFjdHVuc2RpdWRxCiAgICAgICAgICAodW5zaWduZWQgbG9uZyBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgc2hvcnQgYWNjdW0gX19zYXRmcmFjdHVuc2RpdWhhICh1bnNpZ25lZAogICAgICAgICAgbG9uZyBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgYWNjdW0gX19zYXRmcmFjdHVuc2RpdXNhICh1bnNpZ25lZCBsb25nCiAgICAgICAgICBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBhY2N1bSBfX3NhdGZyYWN0dW5zZGl1ZGEgKHVuc2lnbmVkCiAgICAgICAgICBsb25nIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGxvbmcgYWNjdW0gX19zYXRmcmFjdHVuc2RpdXRhCiAgICAgICAgICAodW5zaWduZWQgbG9uZyBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogc2hvcnQgZnJhY3QgX19zYXRmcmFjdHVuc3RpcXEgKHVuc2lnbmVkIGxvbmcgbG9uZwogICAgICAgICAgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGZyYWN0IF9fc2F0ZnJhY3R1bnN0aWhxICh1bnNpZ25lZCBsb25nIGxvbmcgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgZnJhY3QgX19zYXRmcmFjdHVuc3Rpc3EgKHVuc2lnbmVkIGxvbmcgbG9uZwogICAgICAgICAgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgbG9uZyBmcmFjdCBfX3NhdGZyYWN0dW5zdGlkcSAodW5zaWduZWQgbG9uZwogICAgICAgICAgbG9uZyBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogc2hvcnQgYWNjdW0gX19zYXRmcmFjdHVuc3RpaGEgKHVuc2lnbmVkIGxvbmcgbG9uZwogICAgICAgICAgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGFjY3VtIF9fc2F0ZnJhY3R1bnN0aXNhICh1bnNpZ25lZCBsb25nIGxvbmcgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgYWNjdW0gX19zYXRmcmFjdHVuc3RpZGEgKHVuc2lnbmVkIGxvbmcgbG9uZwogICAgICAgICAgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IGxvbmcgbG9uZyBhY2N1bSBfX3NhdGZyYWN0dW5zdGl0YSAodW5zaWduZWQgbG9uZwogICAgICAgICAgbG9uZyBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgc2hvcnQgZnJhY3QgX19zYXRmcmFjdHVuc3RpdXFxICh1bnNpZ25lZAogICAgICAgICAgbG9uZyBsb25nIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBmcmFjdCBfX3NhdGZyYWN0dW5zdGl1aHEgKHVuc2lnbmVkIGxvbmcKICAgICAgICAgIGxvbmcgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGxvbmcgZnJhY3QgX19zYXRmcmFjdHVuc3RpdXNxICh1bnNpZ25lZAogICAgICAgICAgbG9uZyBsb25nIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBsb25nIGxvbmcgZnJhY3QgX19zYXRmcmFjdHVuc3RpdWRxCiAgICAgICAgICAodW5zaWduZWQgbG9uZyBsb25nIEEpCiAtLSBSdW50aW1lIEZ1bmN0aW9uOiB1bnNpZ25lZCBzaG9ydCBhY2N1bSBfX3NhdGZyYWN0dW5zdGl1aGEgKHVuc2lnbmVkCiAgICAgICAgICBsb25nIGxvbmcgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGFjY3VtIF9fc2F0ZnJhY3R1bnN0aXVzYSAodW5zaWduZWQgbG9uZwogICAgICAgICAgbG9uZyBBKQogLS0gUnVudGltZSBGdW5jdGlvbjogdW5zaWduZWQgbG9uZyBhY2N1bSBfX3NhdGZyYWN0dW5zdGl1ZGEgKHVuc2lnbmVkCiAgICAgICAgICBsb25nIGxvbmcgQSkKIC0tIFJ1bnRpbWUgRnVuY3Rpb246IHVuc2lnbmVkIGxvbmcgbG9uZyBhY2N1bSBfX3NhdGZyYWN0dW5zdGl1dGEKICAgICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcgQSkKICAgICBUaGVzZSBmdW5jdGlvbnMgY29udmVydCBmcm9tIHVuc2lnbmVkIG5vbi1mcmFjdGlvbmFscyB0bwogICAgIGZyYWN0aW9uYWxzLCB3aXRoIHNhdHVyYXRpb24uCgofCkZpbGU6IGdjY2ludC5pbmZvLCAgTm9kZTogRXhjZXB0aW9uIGhhbmRsaW5nIHJvdXRpbmVzLCAgTmV4dDogTWlzY2VsbGFuZW91cyByb3V0aW5lcywgIFByZXY6IEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcywgIFVwOiBMaWJnY2MKCjQuNSBMYW5ndWFnZS1pbmRlcGVuZGVudCByb3V0aW5lcyBmb3IgZXhjZXB0aW9uIGhhbmRsaW5nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cgpkb2N1bWVudCBtZSEKCiAgICAgICBfVW53aW5kX0RlbGV0ZUV4Y2VwdGlvbgogICAgICAgX1Vud2luZF9GaW5kX0ZERQogICAgICAgX1Vud2luZF9Gb3JjZWRVbndpbmQKICAgICAgIF9VbndpbmRfR2V0R1IKICAgICAgIF9VbndpbmRfR2V0SVAKICAgICAgIF9VbndpbmRfR2V0TGFuZ3VhZ2VTcGVjaWZpY0RhdGEKICAgICAgIF9VbndpbmRfR2V0UmVnaW9uU3RhcnQKICAgICAgIF9VbndpbmRfR2V0VGV4dFJlbEJhc2UKICAgICAgIF9VbndpbmRfR2V0RGF0YVJlbEJhc2UKICAgICAgIF9VbndpbmRfUmFpc2VFeGNlcHRpb24KICAgICAgIF9VbndpbmRfUmVzdW1lCiAgICAgICBfVW53aW5kX1NldEdSCiAgICAgICBfVW53aW5kX1NldElQCiAgICAgICBfVW53aW5kX0ZpbmRFbmNsb3NpbmdGdW5jdGlvbgogICAgICAgX1Vud2luZF9TakxqX1JlZ2lzdGVyCiAgICAgICBfVW53aW5kX1NqTGpfVW5yZWdpc3RlcgogICAgICAgX1Vud2luZF9TakxqX1JhaXNlRXhjZXB0aW9uCiAgICAgICBfVW53aW5kX1NqTGpfRm9yY2VkVW53aW5kCiAgICAgICBfVW53aW5kX1NqTGpfUmVzdW1lCiAgICAgICBfX2RlcmVnaXN0ZXJfZnJhbWUKICAgICAgIF9fZGVyZWdpc3Rlcl9mcmFtZV9pbmZvCiAgICAgICBfX2RlcmVnaXN0ZXJfZnJhbWVfaW5mb19iYXNlcwogICAgICAgX19yZWdpc3Rlcl9mcmFtZQogICAgICAgX19yZWdpc3Rlcl9mcmFtZV9pbmZvCiAgICAgICBfX3JlZ2lzdGVyX2ZyYW1lX2luZm9fYmFzZXMKICAgICAgIF9fcmVnaXN0ZXJfZnJhbWVfaW5mb190YWJsZQogICAgICAgX19yZWdpc3Rlcl9mcmFtZV9pbmZvX3RhYmxlX2Jhc2VzCiAgICAgICBfX3JlZ2lzdGVyX2ZyYW1lX3RhYmxlCgofCkZpbGU6IGdjY2ludC5pbmZvLCAgTm9kZTogTWlzY2VsbGFuZW91cyByb3V0aW5lcywgIFByZXY6IEV4Y2VwdGlvbiBoYW5kbGluZyByb3V0aW5lcywgIFVwOiBMaWJnY2MKCjQuNiBNaXNjZWxsYW5lb3VzIHJ1bnRpbWUgbGlicmFyeSByb3V0aW5lcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCjQuNi4xIENhY2hlIGNvbnRyb2wgZnVuY3Rpb25zCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogLS0gUnVudGltZSBGdW5jdGlvbjogdm9pZCBfX2NsZWFyX2NhY2hlIChjaGFyICpCRUcsIGNoYXIgKkVORCkKICAgICBUaGlzIGZ1bmN0aW9uIGNsZWFycyB0aGUgaW5zdHJ1Y3Rpb24gY2FjaGUgYmV0d2VlbiBCRUcgYW5kIEVORC4KCh8KRmlsZTogZ2NjaW50LmluZm8sICBOb2RlOiBMYW5ndWFnZXMsICBOZXh0OiBTb3VyY2UgVHJlZSwgIFByZXY6IExpYmdjYywgIFVwOiBUb3AKCjUgTGFuZ3VhZ2UgRnJvbnQgRW5kcyBpbiBHQ0MKKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoKVGhlIGludGVyZmFjZSB0byBmcm9udCBlbmRzIGZvciBsYW5ndWFnZXMgaW4gR0NDLCBhbmQgaW4gcGFydGljdWxhciB0aGUKJ3RyZWUnIHN0cnVjdHVyZSAoKm5vdGUgVHJlZXM6OiksIHdhcyBpbml0aWFsbHkgZGVzaWduZWQgZm9yIEMsIGFuZCBtYW55CmFzcGVjdHMgb2YgaXQgYXJlIHN0aWxsIHNvbWV3aGF0IGJpYXNlZCB0b3dhcmRzIEMgYW5kIEMtbGlrZSBsYW5ndWFnZXMuCkl0IGlzLCBob3dldmVyLCByZWFzb25hYmx5IHdlbGwgc3VpdGVkIHRvIG90aGVyIHByb2NlZHVyYWwgbGFuZ3VhZ2VzLAphbmQgZnJvbnQgZW5kcyBmb3IgbWFueSBzdWNoIGxhbmd1YWdlcyBoYXZlIGJlZW4gd3JpdHRlbiBmb3IgR0NDLgoKIFdyaXRpbmcgYSBjb21waWxlciBhcyBhIGZyb250IGVuZCBmb3IgR0NDLCByYXRoZXIgdGhhbiBjb21waWxpbmcKZGlyZWN0bHkgdG8gYXNzZW1ibGVyIG9yIGdlbmVyYXRpbmcgQyBjb2RlIHdoaWNoIGlzIHRoZW4gY29tcGlsZWQgYnkKR0NDLCBoYXMgc2V2ZXJhbCBhZHZhbnRhZ2VzOgoKICAgKiBHQ0MgZnJvbnQgZW5kcyBiZW5lZml0IGZyb20gdGhlIHN1cHBvcnQgZm9yIG1hbnkgZGlmZmVyZW50IHRhcmdldAogICAgIG1hY2hpbmVzIGFscmVhZHkgcHJlc2VudCBpbiBHQ0MuCiAgICogR0NDIGZyb250IGVuZHMgYmVuZWZpdCBmcm9tIGFsbCB0aGUgb3B0aW1pemF0aW9ucyBpbiBHQ0MuICBTb21lIG9mCiAgICAgdGhlc2UsIHN1Y2ggYXMgYWxpYXMgYW5hbHlzaXMsIG1heSB3b3JrIGJldHRlciB3aGVuIEdDQyBpcwogICAgIGNvbXBpbGluZyBkaXJlY3RseSBmcm9tIHNvdXJjZSBjb2RlIHRoZW4gd2hlbiBpdCBpcyBjb21waWxpbmcgZnJvbQogICAgIGdlbmVyYXRlZCBDIGNvZGUuCiAgICogQmV0dGVyIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBpcyBnZW5lcmF0ZWQgd2hlbiBjb21waWxpbmcgZGlyZWN0bHkKICAgICBmcm9tIHNvdXJjZSBjb2RlIHRoYW4gd2hlbiBnb2luZyB2aWEgaW50ZXJtZWRpYXRlIGdlbmVyYXRlZCBDIGNvZGUuCgogQmVjYXVzZSBvZiB0aGUgYWR2YW50YWdlcyBvZiB3cml0aW5nIGEgY29tcGlsZXIgYXMgYSBHQ0MgZnJvbnQgZW5kLCBHQ0MKZnJvbnQgZW5kcyBoYXZlIGFsc28gYmVlbiBjcmVhdGVkIGZvciBsYW5ndWFnZXMgdmVyeSBkaWZmZXJlbnQgZnJvbQp0aG9zZSBmb3Igd2hpY2ggR0NDIHdhcyBkZXNpZ25lZCwgc3VjaCBhcyB0aGUgZGVjbGFyYXRpdmUKbG9naWMvZnVuY3Rpb25hbCBsYW5ndWFnZSBNZXJjdXJ5LiAgRm9yIHRoZXNlIHJlYXNvbnMsIGl0IG1heSBhbHNvIGJlCnVzZWZ1bCB0byBpbXBsZW1lbnQgY29tcGlsZXJzIGNyZWF0ZWQgZm9yIHNwZWNpYWxpemVkIHB1cnBvc2VzIChmb3IKZXhhbXBsZSwgYXMgcGFydCBvZiBhIHJlc2VhcmNoIHByb2plY3QpIGFzIEdDQyBmcm9udCBlbmRzLgoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IFNvdXJjZSBUcmVlLCAgTmV4dDogT3B0aW9ucywgIFByZXY6IExhbmd1YWdlcywgIFVwOiBUb3AKCjYgU291cmNlIFRyZWUgU3RydWN0dXJlIGFuZCBCdWlsZCBTeXN0ZW0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoKVGhpcyBjaGFwdGVyIGRlc2NyaWJlcyB0aGUgc3RydWN0dXJlIG9mIHRoZSBHQ0Mgc291cmNlIHRyZWUsIGFuZCBob3cgR0NDCmlzIGJ1aWx0LiAgVGhlIHVzZXIgZG9jdW1lbnRhdGlvbiBmb3IgYnVpbGRpbmcgYW5kIGluc3RhbGxpbmcgR0NDIGlzIGluCmEgc2VwYXJhdGUgbWFudWFsICg8aHR0cDovL2djYy5nbnUub3JnL2luc3RhbGwvPiksIHdpdGggd2hpY2ggaXQgaXMKcHJlc3VtZWQgdGhhdCB5b3UgYXJlIGZhbWlsaWFyLgoKKiBNZW51OgoKKiBDb25maWd1cmUgVGVybXM6OiBDb25maWd1cmF0aW9uIHRlcm1pbm9sb2d5IGFuZCBoaXN0b3J5LgoqIFRvcCBMZXZlbDo6ICAgICAgIFRoZSB0b3AgbGV2ZWwgc291cmNlIGRpcmVjdG9yeS4KKiBnY2MgRGlyZWN0b3J5OjogICBUaGUgJ2djYycgc3ViZGlyZWN0b3J5LgoqIFRlc3RzdWl0ZXM6OiAgICAgIFRoZSBHQ0MgdGVzdHN1aXRlcy4KCh8KRmlsZTogZ2NjaW50LmluZm8sICBOb2RlOiBDb25maWd1cmUgVGVybXMsICBOZXh0OiBUb3AgTGV2ZWwsICBVcDogU291cmNlIFRyZWUKCjYuMSBDb25maWd1cmUgVGVybXMgYW5kIEhpc3RvcnkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKVGhlIGNvbmZpZ3VyZSBhbmQgYnVpbGQgcHJvY2VzcyBoYXMgYSBsb25nIGFuZCBjb2xvcmZ1bCBoaXN0b3J5LCBhbmQgY2FuCmJlIGNvbmZ1c2luZyB0byBhbnlvbmUgd2hvIGRvZXNuJ3Qga25vdyB3aHkgdGhpbmdzIGFyZSB0aGUgd2F5IHRoZXkgYXJlLgpXaGlsZSB0aGVyZSBhcmUgb3RoZXIgZG9jdW1lbnRzIHdoaWNoIGRlc2NyaWJlIHRoZSBjb25maWd1cmF0aW9uIHByb2Nlc3MKaW4gZGV0YWlsLCBoZXJlIGFyZSBhIGZldyB0aGluZ3MgdGhhdCBldmVyeW9uZSB3b3JraW5nIG9uIEdDQyBzaG91bGQKa25vdy4KCiBUaGVyZSBhcmUgdGhyZWUgc3lzdGVtIG5hbWVzIHRoYXQgdGhlIGJ1aWxkIGtub3dzIGFib3V0OiB0aGUgbWFjaGluZQp5b3UgYXJlIGJ1aWxkaW5nIG9uICgiYnVpbGQiKSwgdGhlIG1hY2hpbmUgdGhhdCB5b3UgYXJlIGJ1aWxkaW5nIGZvcgooImhvc3QiKSwgYW5kIHRoZSBtYWNoaW5lIHRoYXQgR0NDIHdpbGwgcHJvZHVjZSBjb2RlIGZvciAoInRhcmdldCIpLgpXaGVuIHlvdSBjb25maWd1cmUgR0NDLCB5b3Ugc3BlY2lmeSB0aGVzZSB3aXRoICctLWJ1aWxkPScsICctLWhvc3Q9JywKYW5kICctLXRhcmdldD0nLgoKIFNwZWNpZnlpbmcgdGhlIGhvc3Qgd2l0aG91dCBzcGVjaWZ5aW5nIHRoZSBidWlsZCBzaG91bGQgYmUgYXZvaWRlZCwgYXMKJ2NvbmZpZ3VyZScgbWF5IChhbmQgb25jZSBkaWQpIGFzc3VtZSB0aGF0IHRoZSBob3N0IHlvdSBzcGVjaWZ5IGlzIGFsc28KdGhlIGJ1aWxkLCB3aGljaCBtYXkgbm90IGJlIHRydWUuCgogSWYgYnVpbGQsIGhvc3QsIGFuZCB0YXJnZXQgYXJlIGFsbCB0aGUgc2FtZSwgdGhpcyBpcyBjYWxsZWQgYSAibmF0aXZlIi4KSWYgYnVpbGQgYW5kIGhvc3QgYXJlIHRoZSBzYW1lIGJ1dCB0YXJnZXQgaXMgZGlmZmVyZW50LCB0aGlzIGlzIGNhbGxlZCBhCiJjcm9zcyIuICBJZiBidWlsZCwgaG9zdCwgYW5kIHRhcmdldCBhcmUgYWxsIGRpZmZlcmVudCB0aGlzIGlzIGNhbGxlZCBhCiJjYW5hZGlhbiIgKGZvciBvYnNjdXJlIHJlYXNvbnMgZGVhbGluZyB3aXRoIENhbmFkYSdzIHBvbGl0aWNhbCBwYXJ0eQphbmQgdGhlIGJhY2tncm91bmQgb2YgdGhlIHBlcnNvbiB3b3JraW5nIG9uIHRoZSBidWlsZCBhdCB0aGF0IHRpbWUpLiAgSWYKaG9zdCBhbmQgdGFyZ2V0IGFyZSB0aGUgc2FtZSwgYnV0IGJ1aWxkIGlzIGRpZmZlcmVudCwgeW91IGFyZSB1c2luZyBhCmNyb3NzLWNvbXBpbGVyIHRvIGJ1aWxkIGEgbmF0aXZlIGZvciBhIGRpZmZlcmVudCBzeXN0ZW0uICBTb21lIHBlb3BsZQpjYWxsIHRoaXMgYSAiaG9zdC14LWhvc3QiLCAiY3Jvc3NlZCBuYXRpdmUiLCBvciAiY3Jvc3MtYnVpbHQgbmF0aXZlIi4KSWYgYnVpbGQgYW5kIHRhcmdldCBhcmUgdGhlIHNhbWUsIGJ1dCBob3N0IGlzIGRpZmZlcmVudCwgeW91IGFyZSB1c2luZyBhCmNyb3NzIGNvbXBpbGVyIHRvIGJ1aWxkIGEgY3Jvc3MgY29tcGlsZXIgdGhhdCBwcm9kdWNlcyBjb2RlIGZvciB0aGUKbWFjaGluZSB5b3UncmUgYnVpbGRpbmcgb24uICBUaGlzIGlzIHJhcmUsIHNvIHRoZXJlIGlzIG5vIGNvbW1vbiB3YXkgb2YKZGVzY3JpYmluZyBpdC4gIFRoZXJlIGlzIGEgcHJvcG9zYWwgdG8gY2FsbCB0aGlzIGEgImNyb3NzYmFjayIuCgogSWYgYnVpbGQgYW5kIGhvc3QgYXJlIHRoZSBzYW1lLCB0aGUgR0NDIHlvdSBhcmUgYnVpbGRpbmcgd2lsbCBhbHNvIGJlCnVzZWQgdG8gYnVpbGQgdGhlIHRhcmdldCBsaWJyYXJpZXMgKGxpa2UgJ2xpYnN0ZGMrKycpLiAgSWYgYnVpbGQgYW5kCmhvc3QgYXJlIGRpZmZlcmVudCwgeW91IG11c3QgaGF2ZSBhbHJlYWR5IGJ1aWx0IGFuZCBpbnN0YWxsZWQgYSBjcm9zcwpjb21waWxlciB0aGF0IHdpbGwgYmUgdXNlZCB0byBidWlsZCB0aGUgdGFyZ2V0IGxpYnJhcmllcyAoaWYgeW91CmNvbmZpZ3VyZWQgd2l0aCAnLS10YXJnZXQ9Zm9vLWJhcicsIHRoaXMgY29tcGlsZXIgd2lsbCBiZSBjYWxsZWQKJ2Zvby1iYXItZ2NjJykuCgogSW4gdGhlIGNhc2Ugb2YgdGFyZ2V0IGxpYnJhcmllcywgdGhlIG1hY2hpbmUgeW91J3JlIGJ1aWxkaW5nIGZvciBpcyB0aGUKbWFjaGluZSB5b3Ugc3BlY2lmaWVkIHdpdGggJy0tdGFyZ2V0Jy4gIFNvLCBidWlsZCBpcyB0aGUgbWFjaGluZSB5b3UncmUKYnVpbGRpbmcgb24gKG5vIGNoYW5nZSB0aGVyZSksIGhvc3QgaXMgdGhlIG1hY2hpbmUgeW91J3JlIGJ1aWxkaW5nIGZvcgoodGhlIHRhcmdldCBsaWJyYXJpZXMgYXJlIGJ1aWx0IGZvciB0aGUgdGFyZ2V0LCBzbyBob3N0IGlzIHRoZSB0YXJnZXQKeW91IHNwZWNpZmllZCksIGFuZCB0YXJnZXQgZG9lc24ndCBhcHBseSAoYmVjYXVzZSB5b3UncmUgbm90IGJ1aWxkaW5nIGEKY29tcGlsZXIsIHlvdSdyZSBidWlsZGluZyBsaWJyYXJpZXMpLiAgVGhlIGNvbmZpZ3VyZS9tYWtlIHByb2Nlc3Mgd2lsbAphZGp1c3QgdGhlc2UgdmFyaWFibGVzIGFzIG5lZWRlZC4gIEl0IGFsc28gc2V0cyAnJHdpdGhfY3Jvc3NfaG9zdCcgdG8KdGhlIG9yaWdpbmFsICctLWhvc3QnIHZhbHVlIGluIGNhc2UgeW91IG5lZWQgaXQuCgogVGhlICdsaWJpYmVydHknIHN1cHBvcnQgbGlicmFyeSBpcyBidWlsdCB1cCB0byB0aHJlZSB0aW1lczogb25jZSBmb3IKdGhlIGhvc3QsIG9uY2UgZm9yIHRoZSB0YXJnZXQgKGV2ZW4gaWYgdGhleSBhcmUgdGhlIHNhbWUpLCBhbmQgb25jZSBmb3IKdGhlIGJ1aWxkIGlmIGJ1aWxkIGFuZCBob3N0IGFyZSBkaWZmZXJlbnQuICBUaGlzIGFsbG93cyBpdCB0byBiZSB1c2VkIGJ5CmFsbCBwcm9ncmFtcyB3aGljaCBhcmUgZ2VuZXJhdGVkIGluIHRoZSBjb3Vyc2Ugb2YgdGhlIGJ1aWxkIHByb2Nlc3MuCgofCkZpbGU6IGdjY2ludC5pbmZvLCAgTm9kZTogVG9wIExldmVsLCAgTmV4dDogZ2NjIERpcmVjdG9yeSwgIFByZXY6IENvbmZpZ3VyZSBUZXJtcywgIFVwOiBTb3VyY2UgVHJlZQoKNi4yIFRvcCBMZXZlbCBTb3VyY2UgRGlyZWN0b3J5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKVGhlIHRvcCBsZXZlbCBzb3VyY2UgZGlyZWN0b3J5IGluIGEgR0NDIGRpc3RyaWJ1dGlvbiBjb250YWlucyBzZXZlcmFsCmZpbGVzIGFuZCBkaXJlY3RvcmllcyB0aGF0IGFyZSBzaGFyZWQgd2l0aCBvdGhlciBzb2Z0d2FyZSBkaXN0cmlidXRpb25zCnN1Y2ggYXMgdGhhdCBvZiBHTlUgQmludXRpbHMuICBJdCBhbHNvIGNvbnRhaW5zIHNldmVyYWwgc3ViZGlyZWN0b3JpZXMKdGhhdCBjb250YWluIHBhcnRzIG9mIEdDQyBhbmQgaXRzIHJ1bnRpbWUgbGlicmFyaWVzOgoKJ2JvZWhtLWdjJwogICAgIFRoZSBCb2VobSBjb25zZXJ2YXRpdmUgZ2FyYmFnZSBjb2xsZWN0b3IsIHVzZWQgYXMgcGFydCBvZiB0aGUgSmF2YQogICAgIHJ1bnRpbWUgbGlicmFyeS4KCidjb250cmliJwogICAgIENvbnRyaWJ1dGVkIHNjcmlwdHMgdGhhdCBtYXkgYmUgZm91bmQgdXNlZnVsIGluIGNvbmp1bmN0aW9uIHdpdGgKICAgICBHQ0MuICBPbmUgb2YgdGhlc2UsICdjb250cmliL3RleGkycG9kLnBsJywgaXMgdXNlZCB0byBnZW5lcmF0ZSBtYW4KICAgICBwYWdlcyBmcm9tIFRleGluZm8gbWFudWFscyBhcyBwYXJ0IG9mIHRoZSBHQ0MgYnVpbGQgcHJvY2Vzcy4KCidmYXN0amFyJwogICAgIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSAnamFyJyBjb21tYW5kLCB1c2VkIHdpdGggdGhlIEphdmEgZnJvbnQKICAgICBlbmQuCgonZ2NjJwogICAgIFRoZSBtYWluIHNvdXJjZXMgb2YgR0NDIGl0c2VsZiAoZXhjZXB0IGZvciBydW50aW1lIGxpYnJhcmllcyksCiAgICAgaW5jbHVkaW5nIG9wdGltaXplcnMsIHN1cHBvcnQgZm9yIGRpZmZlcmVudCB0YXJnZXQgYXJjaGl0ZWN0dXJlcywKICAgICBsYW5ndWFnZSBmcm9udCBlbmRzLCBhbmQgdGVzdHN1aXRlcy4gICpOb3RlIFRoZSAnZ2NjJyBTdWJkaXJlY3Rvcnk6CiAgICAgZ2NjIERpcmVjdG9yeSwgZm9yIGRldGFpbHMuCgonaW5jbHVkZScKICAgICBIZWFkZXJzIGZvciB0aGUgJ2xpYmliZXJ0eScgbGlicmFyeS4KCidsaWJhZGEnCiAgICAgVGhlIEFkYSBydW50aW1lIGxpYnJhcnkuCgonbGliY3BwJwogICAgIFRoZSBDIHByZXByb2Nlc3NvciBsaWJyYXJ5LgoKJ2xpYmdmb3J0cmFuJwogICAgIFRoZSBGb3J0cmFuIHJ1bnRpbWUgbGlicmFyeS4KCidsaWJmZmknCiAgICAgVGhlICdsaWJmZmknIGxpYnJhcnksIHVzZWQgYXMgcGFydCBvZiB0aGUgSmF2YSBydW50aW1lIGxpYnJhcnkuCgonbGliaWJlcnR5JwogICAgIFRoZSAnbGliaWJlcnR5JyBsaWJyYXJ5LCB1c2VkIGZvciBwb3J0YWJpbGl0eSBhbmQgZm9yIHNvbWUKICAgICBnZW5lcmFsbHkgdXNlZnVsIGRhdGEgc3RydWN0dXJlcyBhbmQgYWxnb3JpdGhtcy4gICpOb3RlCiAgICAgSW50cm9kdWN0aW9uOiAobGliaWJlcnR5KVRvcCwgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhpcwogICAgIGxpYnJhcnkuCgonbGliamF2YScKICAgICBUaGUgSmF2YSBydW50aW1lIGxpYnJhcnkuCgonbGlibXVkZmxhcCcKICAgICBUaGUgJ2xpYm11ZGZsYXAnIGxpYnJhcnksIHVzZWQgZm9yIGluc3RydW1lbnRpbmcgcG9pbnRlciBhbmQgYXJyYXkKICAgICBkZXJlZmVyZW5jaW5nIG9wZXJhdGlvbnMuCgonbGlib2JqYycKICAgICBUaGUgT2JqZWN0aXZlLUMgYW5kIE9iamVjdGl2ZS1DKysgcnVudGltZSBsaWJyYXJ5LgoKJ2xpYnN0ZGMrKy12MycKICAgICBUaGUgQysrIHJ1bnRpbWUgbGlicmFyeS4KCidtYWludGFpbmVyLXNjcmlwdHMnCiAgICAgU2NyaXB0cyB1c2VkIGJ5IHRoZSAnZ2NjYWRtaW4nIGFjY291bnQgb24gJ2djYy5nbnUub3JnJy4KCid6bGliJwogICAgIFRoZSAnemxpYicgY29tcHJlc3Npb24gbGlicmFyeSwgdXNlZCBieSB0aGUgSmF2YSBmcm9udCBlbmQgYW5kIGFzCiAgICAgcGFydCBvZiB0aGUgSmF2YSBydW50aW1lIGxpYnJhcnkuCgogVGhlIGJ1aWxkIHN5c3RlbSBpbiB0aGUgdG9wIGxldmVsIGRpcmVjdG9yeSwgaW5jbHVkaW5nIGhvdyByZWN1cnNpb24KaW50byBzdWJkaXJlY3RvcmllcyB3b3JrcyBhbmQgaG93IGJ1aWxkaW5nIHJ1bnRpbWUgbGlicmFyaWVzIGZvcgptdWx0aWxpYnMgaXMgaGFuZGxlZCwgaXMgZG9jdW1lbnRlZCBpbiBhIHNlcGFyYXRlIG1hbnVhbCwgaW5jbHVkZWQgd2l0aApHTlUgQmludXRpbHMuICAqTm90ZSBHTlUgY29uZmlndXJlIGFuZCBidWlsZCBzeXN0ZW06IChjb25maWd1cmUpVG9wLCBmb3IKZGV0YWlscy4KCh8KRmlsZTogZ2NjaW50LmluZm8sICBOb2RlOiBnY2MgRGlyZWN0b3J5LCAgTmV4dDogVGVzdHN1aXRlcywgIFByZXY6IFRvcCBMZXZlbCwgIFVwOiBTb3VyY2UgVHJlZQoKNi4zIFRoZSAnZ2NjJyBTdWJkaXJlY3RvcnkKPT09PT09PT09PT09PT09PT09PT09PT09PT0KClRoZSAnZ2NjJyBkaXJlY3RvcnkgY29udGFpbnMgbWFueSBmaWxlcyB0aGF0IGFyZSBwYXJ0IG9mIHRoZSBDIHNvdXJjZXMKb2YgR0NDLCBvdGhlciBmaWxlcyB1c2VkIGFzIHBhcnQgb2YgdGhlIGNvbmZpZ3VyYXRpb24gYW5kIGJ1aWxkIHByb2Nlc3MsCmFuZCBzdWJkaXJlY3RvcmllcyBpbmNsdWRpbmcgZG9jdW1lbnRhdGlvbiBhbmQgYSB0ZXN0c3VpdGUuICBUaGUgZmlsZXMKdGhhdCBhcmUgc291cmNlcyBvZiBHQ0MgYXJlIGRvY3VtZW50ZWQgaW4gYSBzZXBhcmF0ZSBjaGFwdGVyLiAgKk5vdGUKUGFzc2VzIGFuZCBGaWxlcyBvZiB0aGUgQ29tcGlsZXI6IFBhc3Nlcy4KCiogTWVudToKCiogU3ViZGlyZWN0b3JpZXM6OiBTdWJkaXJlY3RvcmllcyBvZiAnZ2NjJy4KKiBDb25maWd1cmF0aW9uOjogIFRoZSBjb25maWd1cmF0aW9uIHByb2Nlc3MsIGFuZCB0aGUgZmlsZXMgaXQgdXNlcy4KKiBCdWlsZDo6ICAgICAgICAgIFRoZSBidWlsZCBzeXN0ZW0gaW4gdGhlICdnY2MnIGRpcmVjdG9yeS4KKiBNYWtlZmlsZTo6ICAgICAgIFRhcmdldHMgaW4gJ2djYy9NYWtlZmlsZScuCiogTGlicmFyeSBGaWxlczo6ICBMaWJyYXJ5IHNvdXJjZSBmaWxlcyBhbmQgaGVhZGVycyB1bmRlciAnZ2NjLycuCiogSGVhZGVyczo6ICAgICAgICBIZWFkZXJzIGluc3RhbGxlZCBieSBHQ0MuCiogRG9jdW1lbnRhdGlvbjo6ICBCdWlsZGluZyBkb2N1bWVudGF0aW9uIGluIEdDQy4KKiBGcm9udCBFbmQ6OiAgICAgIEFuYXRvbXkgb2YgYSBsYW5ndWFnZSBmcm9udCBlbmQuCiogQmFjayBFbmQ6OiAgICAgICBBbmF0b215IG9mIGEgdGFyZ2V0IGJhY2sgZW5kLgoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IFN1YmRpcmVjdG9yaWVzLCAgTmV4dDogQ29uZmlndXJhdGlvbiwgIFVwOiBnY2MgRGlyZWN0b3J5Cgo2LjMuMSBTdWJkaXJlY3RvcmllcyBvZiAnZ2NjJwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKVGhlICdnY2MnIGRpcmVjdG9yeSBjb250YWlucyB0aGUgZm9sbG93aW5nIHN1YmRpcmVjdG9yaWVzOgoKJ0xBTkdVQUdFJwogICAgIFN1YmRpcmVjdG9yaWVzIGZvciB2YXJpb3VzIGxhbmd1YWdlcy4gIERpcmVjdG9yaWVzIGNvbnRhaW5pbmcgYQogICAgIGZpbGUgJ2NvbmZpZy1sYW5nLmluJyBhcmUgbGFuZ3VhZ2Ugc3ViZGlyZWN0b3JpZXMuICBUaGUgY29udGVudHMgb2YKICAgICB0aGUgc3ViZGlyZWN0b3JpZXMgJ2NwJyAoZm9yIEMrKyksICdvYmpjJyAoZm9yIE9iamVjdGl2ZS1DKSBhbmQKICAgICAnb2JqY3AnIChmb3IgT2JqZWN0aXZlLUMrKykgYXJlIGRvY3VtZW50ZWQgaW4gdGhpcyBtYW51YWwgKCpub3RlCiAgICAgUGFzc2VzIGFuZCBGaWxlcyBvZiB0aGUgQ29tcGlsZXI6IFBhc3Nlcy4pOyB0aG9zZSBmb3Igb3RoZXIKICAgICBsYW5ndWFnZXMgYXJlIG5vdC4gICpOb3RlIEFuYXRvbXkgb2YgYSBMYW5ndWFnZSBGcm9udCBFbmQ6IEZyb250CiAgICAgRW5kLCBmb3IgZGV0YWlscyBvZiB0aGUgZmlsZXMgaW4gdGhlc2UgZGlyZWN0b3JpZXMuCgonY29uZmlnJwogICAgIENvbmZpZ3VyYXRpb24gZmlsZXMgZm9yIHN1cHBvcnRlZCBhcmNoaXRlY3R1cmVzIGFuZCBvcGVyYXRpbmcKICAgICBzeXN0ZW1zLiAgKk5vdGUgQW5hdG9teSBvZiBhIFRhcmdldCBCYWNrIEVuZDogQmFjayBFbmQsIGZvciBkZXRhaWxzCiAgICAgb2YgdGhlIGZpbGVzIGluIHRoaXMgZGlyZWN0b3J5LgoKJ2RvYycKICAgICBUZXhpbmZvIGRvY3VtZW50YXRpb24gZm9yIEdDQywgdG9nZXRoZXIgd2l0aCBhdXRvbWF0aWNhbGx5CiAgICAgZ2VuZXJhdGVkIG1hbiBwYWdlcyBhbmQgc3VwcG9ydCBmb3IgY29udmVydGluZyB0aGUgaW5zdGFsbGF0aW9uCiAgICAgbWFudWFsIHRvIEhUTUwuICAqTm90ZSBEb2N1bWVudGF0aW9uOjouCgonZml4aW5jJwogICAgIFRoZSBzdXBwb3J0IGZvciBmaXhpbmcgc3lzdGVtIGhlYWRlcnMgdG8gd29yayB3aXRoIEdDQy4gIFNlZQogICAgICdmaXhpbmMvUkVBRE1FJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4gIFRoZSBoZWFkZXJzIGZpeGVkIGJ5IHRoaXMKICAgICBtZWNoYW5pc20gYXJlIGluc3RhbGxlZCBpbiAnTElCU1VCRElSL2luY2x1ZGUnLiAgQWxvbmcgd2l0aCB0aG9zZQogICAgIGhlYWRlcnMsICdSRUFETUUtZml4aW5jJyBpcyBhbHNvIGluc3RhbGxlZCwgYXMKICAgICAnTElCU1VCRElSL2luY2x1ZGUvUkVBRE1FJy4KCidnaW5jbHVkZScKICAgICBTeXN0ZW0gaGVhZGVycyBpbnN0YWxsZWQgYnkgR0NDLCBtYWlubHkgdGhvc2UgcmVxdWlyZWQgYnkgdGhlIEMKICAgICBzdGFuZGFyZCBvZiBmcmVlc3RhbmRpbmcgaW1wbGVtZW50YXRpb25zLiAgKk5vdGUgSGVhZGVycyBJbnN0YWxsZWQKICAgICBieSBHQ0M6IEhlYWRlcnMsIGZvciBkZXRhaWxzIG9mIHdoZW4gdGhlc2UgYW5kIG90aGVyIGhlYWRlcnMgYXJlCiAgICAgaW5zdGFsbGVkLgoKJ2ludGwnCiAgICAgR05VICdsaWJpbnRsJywgZnJvbSBHTlUgJ2dldHRleHQnLCBmb3Igc3lzdGVtcyB3aGljaCBkbyBub3QgaW5jbHVkZQogICAgIGl0IGluIGxpYmMuICBQcm9wZXJseSwgdGhpcyBkaXJlY3Rvcnkgc2hvdWxkIGJlIGF0IHRvcCBsZXZlbCwKICAgICBwYXJhbGxlbCB0byB0aGUgJ2djYycgZGlyZWN0b3J5LgoKJ3BvJwogICAgIE1lc3NhZ2UgY2F0YWxvZ3Mgd2l0aCB0cmFuc2xhdGlvbnMgb2YgbWVzc2FnZXMgcHJvZHVjZWQgYnkgR0NDIGludG8KICAgICB2YXJpb3VzIGxhbmd1YWdlcywgJ0xBTkdVQUdFLnBvJy4gIFRoaXMgZGlyZWN0b3J5IGFsc28gY29udGFpbnMKICAgICAnZ2NjLnBvdCcsIHRoZSB0ZW1wbGF0ZSBmb3IgdGhlc2UgbWVzc2FnZSBjYXRhbG9ndWVzLCAnZXhnZXR0ZXh0JywKICAgICBhIHdyYXBwZXIgYXJvdW5kICdnZXR0ZXh0JyB0byBleHRyYWN0IHRoZSBtZXNzYWdlcyBmcm9tIHRoZSBHQ0MKICAgICBzb3VyY2VzIGFuZCBjcmVhdGUgJ2djYy5wb3QnLCB3aGljaCBpcyBydW4gYnkgJ21ha2UgZ2NjLnBvdCcsIGFuZAogICAgICdFWENMVURFUycsIGEgbGlzdCBvZiBmaWxlcyBmcm9tIHdoaWNoIG1lc3NhZ2VzIHNob3VsZCBub3QgYmUKICAgICBleHRyYWN0ZWQuCgondGVzdHN1aXRlJwogICAgIFRoZSBHQ0MgdGVzdHN1aXRlcyAoZXhjZXB0IGZvciB0aG9zZSBmb3IgcnVudGltZSBsaWJyYXJpZXMpLiAgKk5vdGUKICAgICBUZXN0c3VpdGVzOjouCgofCkZpbGU6IGdjY2ludC5pbmZvLCAgTm9kZTogQ29uZmlndXJhdGlvbiwgIE5leHQ6IEJ1aWxkLCAgUHJldjogU3ViZGlyZWN0b3JpZXMsICBVcDogZ2NjIERpcmVjdG9yeQoKNi4zLjIgQ29uZmlndXJhdGlvbiBpbiB0aGUgJ2djYycgRGlyZWN0b3J5Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKVGhlICdnY2MnIGRpcmVjdG9yeSBpcyBjb25maWd1cmVkIHdpdGggYW4gQXV0b2NvbmYtZ2VuZXJhdGVkIHNjcmlwdAonY29uZmlndXJlJy4gIFRoZSAnY29uZmlndXJlJyBzY3JpcHQgaXMgZ2VuZXJhdGVkIGZyb20gJ2NvbmZpZ3VyZS5hYycKYW5kICdhY2xvY2FsLm00Jy4gIEZyb20gdGhlIGZpbGVzICdjb25maWd1cmUuYWMnIGFuZCAnYWNjb25maWcuaCcsCkF1dG9oZWFkZXIgZ2VuZXJhdGVzIHRoZSBmaWxlICdjb25maWcuaW4nLiAgVGhlIGZpbGUgJ2NzdGFtcC1oLmluJyBpcwp1c2VkIGFzIGEgdGltZXN0YW1wLgoKKiBNZW51OgoKKiBDb25maWcgRnJhZ21lbnRzOjogICAgIFNjcmlwdHMgdXNlZCBieSAnY29uZmlndXJlJy4KKiBTeXN0ZW0gQ29uZmlnOjogICAgICAgIFRoZSAnY29uZmlnLmJ1aWxkJywgJ2NvbmZpZy5ob3N0JywgYW5kCiAgICAgICAgICAgICAgICAgICAgICAgICAnY29uZmlnLmdjYycgZmlsZXMuCiogQ29uZmlndXJhdGlvbiBGaWxlczo6ICBGaWxlcyBjcmVhdGVkIGJ5IHJ1bm5pbmcgJ2NvbmZpZ3VyZScuCgofCkZpbGU6IGdjY2ludC5pbmZvLCAgTm9kZTogQ29uZmlnIEZyYWdtZW50cywgIE5leHQ6IFN5c3RlbSBDb25maWcsICBVcDogQ29uZmlndXJhdGlvbgoKNi4zLjIuMSBTY3JpcHRzIFVzZWQgYnkgJ2NvbmZpZ3VyZScKLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KCidjb25maWd1cmUnIHVzZXMgc29tZSBvdGhlciBzY3JpcHRzIHRvIGhlbHAgaW4gaXRzIHdvcms6CgogICAqIFRoZSBzdGFuZGFyZCBHTlUgJ2NvbmZpZy5zdWInIGFuZCAnY29uZmlnLmd1ZXNzJyBmaWxlcywga2VwdCBpbiB0aGUKICAgICB0b3AgbGV2ZWwgZGlyZWN0b3J5LCBhcmUgdXNlZC4gIEZJWE1FOiB3aGVuIGlzIHRoZSAnY29uZmlnLmd1ZXNzJwogICAgIGZpbGUgaW4gdGhlICdnY2MnIGRpcmVjdG9yeSAodGhhdCBqdXN0IGNhbGxzIHRoZSB0b3AgbGV2ZWwgb25lKQogICAgIHVzZWQ/CgogICAqIFRoZSBmaWxlICdjb25maWcuZ2NjJyBpcyB1c2VkIHRvIGhhbmRsZSBjb25maWd1cmF0aW9uIHNwZWNpZmljIHRvCiAgICAgdGhlIHBhcnRpY3VsYXIgdGFyZ2V0IG1hY2hpbmUuICBUaGUgZmlsZSAnY29uZmlnLmJ1aWxkJyBpcyB1c2VkIHRvCiAgICAgaGFuZGxlIGNvbmZpZ3VyYXRpb24gc3BlY2lmaWMgdG8gdGhlIHBhcnRpY3VsYXIgYnVpbGQgbWFjaGluZS4gIFRoZQogICAgIGZpbGUgJ2NvbmZpZy5ob3N0JyBpcyB1c2VkIHRvIGhhbmRsZSBjb25maWd1cmF0aW9uIHNwZWNpZmljIHRvIHRoZQogICAgIHBhcnRpY3VsYXIgaG9zdCBtYWNoaW5lLiAgKEluIGdlbmVyYWwsIHRoZXNlIHNob3VsZCBvbmx5IGJlIHVzZWQKICAgICBmb3IgZmVhdHVyZXMgdGhhdCBjYW5ub3QgcmVhc29uYWJseSBiZSB0ZXN0ZWQgaW4gQXV0b2NvbmYgZmVhdHVyZQogICAgIHRlc3RzLikgICpOb3RlIFRoZSAnY29uZmlnLmJ1aWxkJzsgJ2NvbmZpZy5ob3N0JzsgYW5kICdjb25maWcuZ2NjJwogICAgIEZpbGVzOiBTeXN0ZW0gQ29uZmlnLCBmb3IgZGV0YWlscyBvZiB0aGUgY29udGVudHMgb2YgdGhlc2UgZmlsZXMuCgogICAqIEVhY2ggbGFuZ3VhZ2Ugc3ViZGlyZWN0b3J5IGhhcyBhIGZpbGUgJ0xBTkdVQUdFL2NvbmZpZy1sYW5nLmluJwogICAgIHRoYXQgaXMgdXNlZCBmb3IgZnJvbnQtZW5kLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24uICAqTm90ZSBUaGUgRnJvbnQKICAgICBFbmQgJ2NvbmZpZy1sYW5nLmluJyBGaWxlOiBGcm9udCBFbmQgQ29uZmlnLCBmb3IgZGV0YWlscyBvZiB0aGlzCiAgICAgZmlsZS4KCiAgICogQSBoZWxwZXIgc2NyaXB0ICdjb25maWd1cmUuZnJhZycgaXMgdXNlZCBhcyBwYXJ0IG9mIGNyZWF0aW5nIHRoZQogICAgIG91dHB1dCBvZiAnY29uZmlndXJlJy4KCh8KRmlsZTogZ2NjaW50LmluZm8sICBOb2RlOiBTeXN0ZW0gQ29uZmlnLCAgTmV4dDogQ29uZmlndXJhdGlvbiBGaWxlcywgIFByZXY6IENvbmZpZyBGcmFnbWVudHMsICBVcDogQ29uZmlndXJhdGlvbgoKNi4zLjIuMiBUaGUgJ2NvbmZpZy5idWlsZCc7ICdjb25maWcuaG9zdCc7IGFuZCAnY29uZmlnLmdjYycgRmlsZXMKLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KClRoZSAnY29uZmlnLmJ1aWxkJyBmaWxlIGNvbnRhaW5zIHNwZWNpZmljIHJ1bGVzIGZvciBwYXJ0aWN1bGFyIHN5c3RlbXMKd2hpY2ggR0NDIGlzIGJ1aWx0IG9uLiAgVGhpcyBzaG91bGQgYmUgdXNlZCBhcyByYXJlbHkgYXMgcG9zc2libGUsIGFzCnRoZSBiZWhhdmlvciBvZiB0aGUgYnVpbGQgc3lzdGVtIGNhbiBhbHdheXMgYmUgZGV0ZWN0ZWQgYnkgYXV0b2NvbmYuCgogVGhlICdjb25maWcuaG9zdCcgZmlsZSBjb250YWlucyBzcGVjaWZpYyBydWxlcyBmb3IgcGFydGljdWxhciBzeXN0ZW1zCndoaWNoIEdDQyB3aWxsIHJ1biBvbi4gIFRoaXMgaXMgcmFyZWx5IG5lZWRlZC4KCiBUaGUgJ2NvbmZpZy5nY2MnIGZpbGUgY29udGFpbnMgc3BlY2lmaWMgcnVsZXMgZm9yIHBhcnRpY3VsYXIgc3lzdGVtcwp3aGljaCBHQ0Mgd2lsbCBnZW5lcmF0ZSBjb2RlIGZvci4gIFRoaXMgaXMgdXN1YWxseSBuZWVkZWQuCgogRWFjaCBmaWxlIGhhcyBhIGxpc3Qgb2YgdGhlIHNoZWxsIHZhcmlhYmxlcyBpdCBzZXRzLCB3aXRoIGRlc2NyaXB0aW9ucywKYXQgdGhlIHRvcCBvZiB0aGUgZmlsZS4KCiBGSVhNRTogZG9jdW1lbnQgdGhlIGNvbnRlbnRzIG9mIHRoZXNlIGZpbGVzLCBhbmQgd2hhdCB2YXJpYWJsZXMgc2hvdWxkCmJlIHNldCB0byBjb250cm9sIGJ1aWxkLCBob3N0IGFuZCB0YXJnZXQgY29uZmlndXJhdGlvbi4KCh8KRmlsZTogZ2NjaW50LmluZm8sICBOb2RlOiBDb25maWd1cmF0aW9uIEZpbGVzLCAgUHJldjogU3lzdGVtIENvbmZpZywgIFVwOiBDb25maWd1cmF0aW9uCgo2LjMuMi4zIEZpbGVzIENyZWF0ZWQgYnkgJ2NvbmZpZ3VyZScKLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCgpIZXJlIHdlIHNwZWxsIG91dCB3aGF0IGZpbGVzIHdpbGwgYmUgc2V0IHVwIGJ5ICdjb25maWd1cmUnIGluIHRoZSAnZ2NjJwpkaXJlY3RvcnkuICBTb21lIG90aGVyIGZpbGVzIGFyZSBjcmVhdGVkIGFzIHRlbXBvcmFyeSBmaWxlcyBpbiB0aGUKY29uZmlndXJhdGlvbiBwcm9jZXNzLCBhbmQgYXJlIG5vdCB1c2VkIGluIHRoZSBzdWJzZXF1ZW50IGJ1aWxkOyB0aGVzZQphcmUgbm90IGRvY3VtZW50ZWQuCgogICAqICdNYWtlZmlsZScgaXMgY29uc3RydWN0ZWQgZnJvbSAnTWFrZWZpbGUuaW4nLCB0b2dldGhlciB3aXRoIHRoZQogICAgIGhvc3QgYW5kIHRhcmdldCBmcmFnbWVudHMgKCpub3RlIE1ha2VmaWxlIEZyYWdtZW50czogRnJhZ21lbnRzLikKICAgICAndC1UQVJHRVQnIGFuZCAneC1IT1NUJyBmcm9tICdjb25maWcnLCBpZiBhbnksIGFuZCBsYW5ndWFnZQogICAgIE1ha2VmaWxlIGZyYWdtZW50cyAnTEFOR1VBR0UvTWFrZS1sYW5nLmluJy4KICAgKiAnYXV0by1ob3N0LmgnIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSBob3N0IG1hY2hpbmUKICAgICBkZXRlcm1pbmVkIGJ5ICdjb25maWd1cmUnLiAgSWYgdGhlIGhvc3QgbWFjaGluZSBpcyBkaWZmZXJlbnQgZnJvbQogICAgIHRoZSBidWlsZCBtYWNoaW5lLCB0aGVuICdhdXRvLWJ1aWxkLmgnIGlzIGFsc28gY3JlYXRlZCwgY29udGFpbmluZwogICAgIHN1Y2ggaW5mb3JtYXRpb24gYWJvdXQgdGhlIGJ1aWxkIG1hY2hpbmUuCiAgICogJ2NvbmZpZy5zdGF0dXMnIGlzIGEgc2NyaXB0IHRoYXQgbWF5IGJlIHJ1biB0byByZWNyZWF0ZSB0aGUgY3VycmVudAogICAgIGNvbmZpZ3VyYXRpb24uCiAgICogJ2NvbmZpZ2FyZ3MuaCcgaXMgYSBoZWFkZXIgY29udGFpbmluZyBkZXRhaWxzIG9mIHRoZSBhcmd1bWVudHMKICAgICBwYXNzZWQgdG8gJ2NvbmZpZ3VyZScgdG8gY29uZmlndXJlIEdDQywgYW5kIG9mIHRoZSB0aHJlYWQgbW9kZWwKICAgICB1c2VkLgogICAqICdjc3RhbXAtaCcgaXMgdXNlZCBhcyBhIHRpbWVzdGFtcC4KICAgKiAnZml4aW5jL01ha2VmaWxlJyBpcyBjb25zdHJ1Y3RlZCBmcm9tICdmaXhpbmMvTWFrZWZpbGUuaW4nLgogICAqICdnY2NidWcnLCBhIHNjcmlwdCBmb3IgcmVwb3J0aW5nIGJ1Z3MgaW4gR0NDLCBpcyBjb25zdHJ1Y3RlZCBmcm9tCiAgICAgJ2djY2J1Zy5pbicuCiAgICogJ2ludGwvTWFrZWZpbGUnIGlzIGNvbnN0cnVjdGVkIGZyb20gJ2ludGwvTWFrZWZpbGUuaW4nLgogICAqIElmIGEgbGFuZ3VhZ2UgJ2NvbmZpZy1sYW5nLmluJyBmaWxlICgqbm90ZSBUaGUgRnJvbnQgRW5kCiAgICAgJ2NvbmZpZy1sYW5nLmluJyBGaWxlOiBGcm9udCBFbmQgQ29uZmlnLikgc2V0cyAnb3V0cHV0cycsIHRoZW4gdGhlCiAgICAgZmlsZXMgbGlzdGVkIGluICdvdXRwdXRzJyB0aGVyZSBhcmUgYWxzbyBnZW5lcmF0ZWQuCgogVGhlIGZvbGxvd2luZyBjb25maWd1cmF0aW9uIGhlYWRlcnMgYXJlIGNyZWF0ZWQgZnJvbSB0aGUgTWFrZWZpbGUsCnVzaW5nICdta2NvbmZpZy5zaCcsIHJhdGhlciB0aGFuIGRpcmVjdGx5IGJ5ICdjb25maWd1cmUnLiAgJ2NvbmZpZy5oJywKJ2Jjb25maWcuaCcgYW5kICd0Y29uZmlnLmgnIGFsbCBjb250YWluIHRoZSAneG0tTUFDSElORS5oJyBoZWFkZXIsIGlmCmFueSwgYXBwcm9wcmlhdGUgdG8gdGhlIGhvc3QsIGJ1aWxkIGFuZCB0YXJnZXQgbWFjaGluZXMgcmVzcGVjdGl2ZWx5LAp0aGUgY29uZmlndXJhdGlvbiBoZWFkZXJzIGZvciB0aGUgdGFyZ2V0LCBhbmQgc29tZSBkZWZpbml0aW9uczsgZm9yIHRoZQpob3N0IGFuZCBidWlsZCBtYWNoaW5lcywgdGhlc2UgaW5jbHVkZSB0aGUgYXV0b2NvbmZpZ3VyZWQgaGVhZGVycwpnZW5lcmF0ZWQgYnkgJ2NvbmZpZ3VyZScuICBUaGUgb3RoZXIgY29uZmlndXJhdGlvbiBoZWFkZXJzIGFyZQpkZXRlcm1pbmVkIGJ5ICdjb25maWcuZ2NjJy4gIFRoZXkgYWxzbyBjb250YWluIHRoZSB0eXBlZGVmcyBmb3IgJ3J0eCcsCidydHZlYycgYW5kICd0cmVlJy4KCiAgICogJ2NvbmZpZy5oJywgZm9yIHVzZSBpbiBwcm9ncmFtcyB0aGF0IHJ1biBvbiB0aGUgaG9zdCBtYWNoaW5lLgogICAqICdiY29uZmlnLmgnLCBmb3IgdXNlIGluIHByb2dyYW1zIHRoYXQgcnVuIG9uIHRoZSBidWlsZCBtYWNoaW5lLgogICAqICd0Y29uZmlnLmgnLCBmb3IgdXNlIGluIHByb2dyYW1zIGFuZCBsaWJyYXJpZXMgZm9yIHRoZSB0YXJnZXQKICAgICBtYWNoaW5lLgogICAqICd0bV9wLmgnLCB3aGljaCBpbmNsdWRlcyB0aGUgaGVhZGVyICdNQUNISU5FLXByb3Rvcy5oJyB0aGF0CiAgICAgY29udGFpbnMgcHJvdG90eXBlcyBmb3IgZnVuY3Rpb25zIGluIHRoZSB0YXJnZXQgJy5jJyBmaWxlLiAgRklYTUU6CiAgICAgd2h5IGlzIHN1Y2ggYSBzZXBhcmF0ZSBoZWFkZXIgbmVjZXNzYXJ5PwoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IEJ1aWxkLCAgTmV4dDogTWFrZWZpbGUsICBQcmV2OiBDb25maWd1cmF0aW9uLCAgVXA6IGdjYyBEaXJlY3RvcnkKCjYuMy4zIEJ1aWxkIFN5c3RlbSBpbiB0aGUgJ2djYycgRGlyZWN0b3J5Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpGSVhNRTogZGVzY3JpYmUgdGhlIGJ1aWxkIHN5c3RlbSwgaW5jbHVkaW5nIHdoYXQgaXMgYnVpbHQgaW4gd2hhdApzdGFnZXMuICBBbHNvIGxpc3QgdGhlIHZhcmlvdXMgc291cmNlIGZpbGVzIHRoYXQgYXJlIHVzZWQgaW4gdGhlIGJ1aWxkCnByb2Nlc3MgYnV0IGFyZW4ndCBzb3VyY2UgZmlsZXMgb2YgR0NDIGl0c2VsZiBhbmQgc28gYXJlbid0IGRvY3VtZW50ZWQKYmVsb3cgKCpub3RlIFBhc3Nlczo6KS4KCh8KRmlsZTogZ2NjaW50LmluZm8sICBOb2RlOiBNYWtlZmlsZSwgIE5leHQ6IExpYnJhcnkgRmlsZXMsICBQcmV2OiBCdWlsZCwgIFVwOiBnY2MgRGlyZWN0b3J5Cgo2LjMuNCBNYWtlZmlsZSBUYXJnZXRzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KClRoZXNlIHRhcmdldHMgYXJlIGF2YWlsYWJsZSBmcm9tIHRoZSAnZ2NjJyBkaXJlY3Rvcnk6CgonYWxsJwogICAgIFRoaXMgaXMgdGhlIGRlZmF1bHQgdGFyZ2V0LiAgRGVwZW5kaW5nIG9uIHdoYXQgeW91cgogICAgIGJ1aWxkL2hvc3QvdGFyZ2V0IGNvbmZpZ3VyYXRpb24gaXMsIGl0IGNvb3JkaW5hdGVzIGFsbCB0aGUgdGhpbmdzCiAgICAgdGhhdCBuZWVkIHRvIGJlIGJ1aWx0LgoKJ2RvYycKICAgICBQcm9kdWNlIGluZm8tZm9ybWF0dGVkIGRvY3VtZW50YXRpb24gYW5kIG1hbiBwYWdlcy4gIEVzc2VudGlhbGx5IGl0CiAgICAgY2FsbHMgJ21ha2UgbWFuJyBhbmQgJ21ha2UgaW5mbycuCgonZHZpJwogICAgIFByb2R1Y2UgRFZJLWZvcm1hdHRlZCBkb2N1bWVudGF0aW9uLgoKJ3BkZicKICAgICBQcm9kdWNlIFBERi1mb3JtYXR0ZWQgZG9jdW1lbnRhdGlvbi4KCidodG1sJwogICAgIFByb2R1Y2UgSFRNTC1mb3JtYXR0ZWQgZG9jdW1lbnRhdGlvbi4KCidtYW4nCiAgICAgR2VuZXJhdGUgbWFuIHBhZ2VzLgoKJ2luZm8nCiAgICAgR2VuZXJhdGUgaW5mby1mb3JtYXR0ZWQgcGFnZXMuCgonbW9zdGx5Y2xlYW4nCiAgICAgRGVsZXRlIHRoZSBmaWxlcyBtYWRlIHdoaWxlIGJ1aWxkaW5nIHRoZSBjb21waWxlci4KCidjbGVhbicKICAgICBUaGF0LCBhbmQgYWxsIHRoZSBvdGhlciBmaWxlcyBidWlsdCBieSAnbWFrZSBhbGwnLgoKJ2Rpc3RjbGVhbicKICAgICBUaGF0LCBhbmQgYWxsIHRoZSBmaWxlcyBjcmVhdGVkIGJ5ICdjb25maWd1cmUnLgoKJ21haW50YWluZXItY2xlYW4nCiAgICAgRGlzdGNsZWFuIHBsdXMgYW55IGZpbGUgdGhhdCBjYW4gYmUgZ2VuZXJhdGVkIGZyb20gb3RoZXIgZmlsZXMuCiAgICAgTm90ZSB0aGF0IGFkZGl0aW9uYWwgdG9vbHMgbWF5IGJlIHJlcXVpcmVkIGJleW9uZCB3aGF0IGlzIG5vcm1hbGx5CiAgICAgbmVlZGVkIHRvIGJ1aWxkIGdjYy4KCidzcmNleHRyYScKICAgICBHZW5lcmF0ZXMgZmlsZXMgaW4gdGhlIHNvdXJjZSBkaXJlY3RvcnkgdGhhdCBkbyBub3QgZXhpc3QgaW4gQ1ZTCiAgICAgYnV0IHNob3VsZCBnbyBpbnRvIGEgcmVsZWFzZSB0YXJiYWxsLiAgT25lIGV4YW1wbGUgaXMKICAgICAnZ2NjL2phdmEvcGFyc2UuYycgd2hpY2ggaXMgZ2VuZXJhdGVkIGZyb20gdGhlIENWUyBzb3VyY2UgZmlsZQogICAgICdnY2MvamF2YS9wYXJzZS55Jy4KCidzcmNpbmZvJwonc3JjbWFuJwogICAgIENvcGllcyB0aGUgaW5mby1mb3JtYXR0ZWQgYW5kIG1hbnBhZ2UgZG9jdW1lbnRhdGlvbiBpbnRvIHRoZSBzb3VyY2UKICAgICBkaXJlY3RvcnkgdXN1YWxseSBmb3IgdGhlIHB1cnBvc2Ugb2YgZ2VuZXJhdGluZyBhIHJlbGVhc2UgdGFyYmFsbC4KCidpbnN0YWxsJwogICAgIEluc3RhbGxzIGdjYy4KCid1bmluc3RhbGwnCiAgICAgRGVsZXRlcyBpbnN0YWxsZWQgZmlsZXMuCgonY2hlY2snCiAgICAgUnVuIHRoZSB0ZXN0c3VpdGUuICBUaGlzIGNyZWF0ZXMgYSAndGVzdHN1aXRlJyBzdWJkaXJlY3RvcnkgdGhhdAogICAgIGhhcyB2YXJpb3VzICcuc3VtJyBhbmQgJy5sb2cnIGZpbGVzIGNvbnRhaW5pbmcgdGhlIHJlc3VsdHMgb2YgdGhlCiAgICAgdGVzdGluZy4gIFlvdSBjYW4gcnVuIHN1YnNldHMgd2l0aCwgZm9yIGV4YW1wbGUsICdtYWtlIGNoZWNrLWdjYycuCiAgICAgWW91IGNhbiBzcGVjaWZ5IHNwZWNpZmljIHRlc3RzIGJ5IHNldHRpbmcgUlVOVEVTVEZMQUdTIHRvIGJlIHRoZQogICAgIG5hbWUgb2YgdGhlICcuZXhwJyBmaWxlLCBvcHRpb25hbGx5IGZvbGxvd2VkIGJ5IChmb3Igc29tZSB0ZXN0cykgYW4KICAgICBlcXVhbHMgYW5kIGEgZmlsZSB3aWxkY2FyZCwgbGlrZToKCiAgICAgICAgICBtYWtlIGNoZWNrLWdjYyBSVU5URVNURkxBR1M9ImV4ZWN1dGUuZXhwPTE5OTgwNDEzLSoiCgogICAgIE5vdGUgdGhhdCBydW5uaW5nIHRoZSB0ZXN0c3VpdGUgbWF5IHJlcXVpcmUgYWRkaXRpb25hbCB0b29scyBiZQogICAgIGluc3RhbGxlZCwgc3VjaCBhcyBUQ0wgb3IgZGVqYWdudS4KCiBUaGUgdG9wbGV2ZWwgdHJlZSBmcm9tIHdoaWNoIHlvdSBzdGFydCBHQ0MgY29tcGlsYXRpb24gaXMgbm90IHRoZSBHQ0MKZGlyZWN0b3J5LCBidXQgcmF0aGVyIGEgY29tcGxleCBNYWtlZmlsZSB0aGF0IGNvb3JkaW5hdGVzIHRoZSB2YXJpb3VzCnN0ZXBzIG9mIHRoZSBidWlsZCwgaW5jbHVkaW5nIGJvb3RzdHJhcHBpbmcgdGhlIGNvbXBpbGVyIGFuZCB1c2luZyB0aGUKbmV3IGNvbXBpbGVyIHRvIGJ1aWxkIHRhcmdldCBsaWJyYXJpZXMuCgogV2hlbiBHQ0MgaXMgY29uZmlndXJlZCBmb3IgYSBuYXRpdmUgY29uZmlndXJhdGlvbiwgdGhlIGRlZmF1bHQgYWN0aW9uCmZvciAnbWFrZScgaXMgdG8gZG8gYSBmdWxsIHRocmVlLXN0YWdlIGJvb3RzdHJhcC4gIFRoaXMgbWVhbnMgdGhhdCBHQ0MKaXMgYnVpbHQgdGhyZWUgdGltZXMtLW9uY2Ugd2l0aCB0aGUgbmF0aXZlIGNvbXBpbGVyLCBvbmNlIHdpdGggdGhlCm5hdGl2ZS1idWlsdCBjb21waWxlciBpdCBqdXN0IGJ1aWx0LCBhbmQgb25jZSB3aXRoIHRoZSBjb21waWxlciBpdCBidWlsdAp0aGUgc2Vjb25kIHRpbWUuICBJbiB0aGVvcnksIHRoZSBsYXN0IHR3byBzaG91bGQgcHJvZHVjZSB0aGUgc2FtZQpyZXN1bHRzLCB3aGljaCAnbWFrZSBjb21wYXJlJyBjYW4gY2hlY2suICBFYWNoIHN0YWdlIGlzIGNvbmZpZ3VyZWQKc2VwYXJhdGVseSBhbmQgY29tcGlsZWQgaW50byBhIHNlcGFyYXRlIGRpcmVjdG9yeSwgdG8gbWluaW1pemUgcHJvYmxlbXMKZHVlIHRvIEFCSSBpbmNvbXBhdGliaWxpdGllcyBiZXR3ZWVuIHRoZSBuYXRpdmUgY29tcGlsZXIgYW5kIEdDQy4KCiBJZiB5b3UgZG8gYSBjaGFuZ2UsIHJlYnVpbGRpbmcgd2lsbCBhbHNvIHN0YXJ0IGZyb20gdGhlIGZpcnN0IHN0YWdlIGFuZAoiYnViYmxlIiB1cCB0aGUgY2hhbmdlIHRocm91Z2ggdGhlIHRocmVlIHN0YWdlcy4gIEVhY2ggc3RhZ2UgaXMgdGFrZW4KZnJvbSBpdHMgYnVpbGQgZGlyZWN0b3J5IChpZiBpdCBoYWQgYmVlbiBidWlsdCBwcmV2aW91c2x5KSwgcmVidWlsdCwgYW5kCmNvcGllZCB0byBpdHMgc3ViZGlyZWN0b3J5LiAgVGhpcyB3aWxsIGFsbG93IHlvdSB0bywgZm9yIGV4YW1wbGUsCmNvbnRpbnVlIGEgYm9vdHN0cmFwIGFmdGVyIGZpeGluZyBhIGJ1ZyB3aGljaCBjYXVzZXMgdGhlIHN0YWdlMiBidWlsZCB0bwpjcmFzaC4gIEl0IGRvZXMgbm90IHByb3ZpZGUgYXMgZ29vZCBjb3ZlcmFnZSBvZiB0aGUgY29tcGlsZXIgYXMKYm9vdHN0cmFwcGluZyBmcm9tIHNjcmF0Y2gsIGJ1dCBpdCBlbnN1cmVzIHRoYXQgdGhlIG5ldyBjb2RlIGlzCnN5bnRhY3RpY2FsbHkgY29ycmVjdCAoZS5nLiwgdGhhdCB5b3UgZGlkIG5vdCB1c2UgR0NDIGV4dGVuc2lvbnMgYnkKbWlzdGFrZSksIGFuZCBhdm9pZHMgc3B1cmlvdXMgYm9vdHN0cmFwIGNvbXBhcmlzb24gZmFpbHVyZXMoMSkuCgogT3RoZXIgdGFyZ2V0cyBhdmFpbGFibGUgZnJvbSB0aGUgdG9wIGxldmVsIGluY2x1ZGU6CgonYm9vdHN0cmFwLWxlYW4nCiAgICAgTGlrZSAnYm9vdHN0cmFwJywgZXhjZXB0IHRoYXQgdGhlIHZhcmlvdXMgc3RhZ2VzIGFyZSByZW1vdmVkIG9uY2UKICAgICB0aGV5J3JlIG5vIGxvbmdlciBuZWVkZWQuICBUaGlzIHNhdmVzIGRpc2sgc3BhY2UuCgonYm9vdHN0cmFwMicKJ2Jvb3RzdHJhcDItbGVhbicKICAgICBQZXJmb3JtcyBvbmx5IHRoZSBmaXJzdCB0d28gc3RhZ2VzIG9mIGJvb3RzdHJhcC4gIFVubGlrZSBhCiAgICAgdGhyZWUtc3RhZ2UgYm9vdHN0cmFwLCB0aGlzIGRvZXMgbm90IHBlcmZvcm0gYSBjb21wYXJpc29uIHRvIHRlc3QKICAgICB0aGF0IHRoZSBjb21waWxlciBpcyBydW5uaW5nIHByb3Blcmx5LiAgTm90ZSB0aGF0IHRoZSBkaXNrIHNwYWNlCiAgICAgcmVxdWlyZWQgYnkgYSAibGVhbiIgYm9vdHN0cmFwIGlzIGFwcHJveGltYXRlbHkgaW5kZXBlbmRlbnQgb2YgdGhlCiAgICAgbnVtYmVyIG9mIHN0YWdlcy4KCidzdGFnZU4tYnViYmxlIChOID0gMS4uLjQpJwogICAgIFJlYnVpbGQgYWxsIHRoZSBzdGFnZXMgdXAgdG8gTiwgd2l0aCB0aGUgYXBwcm9wcmlhdGUgZmxhZ3MsCiAgICAgImJ1YmJsaW5nIiB0aGUgY2hhbmdlcyBhcyBkZXNjcmliZWQgYWJvdmUuCgonYWxsLXN0YWdlTiAoTiA9IDEuLi40KScKICAgICBBc3N1bWluZyB0aGF0IHN0YWdlIE4gaGFzIGFscmVhZHkgYmVlbiBidWlsdCwgcmVidWlsZCBpdCB3aXRoIHRoZQogICAgIGFwcHJvcHJpYXRlIGZsYWdzLiAgVGhpcyBpcyByYXJlbHkgbmVlZGVkLgoKJ2NsZWFuc3RyYXAnCiAgICAgUmVtb3ZlIGV2ZXJ5dGhpbmcgKCdtYWtlIGNsZWFuJykgYW5kIHJlYnVpbGRzICgnbWFrZSBib290c3RyYXAnKS4KCidjb21wYXJlJwogICAgIENvbXBhcmVzIHRoZSByZXN1bHRzIG9mIHN0YWdlcyAyIGFuZCAzLiAgVGhpcyBlbnN1cmVzIHRoYXQgdGhlCiAgICAgY29tcGlsZXIgaXMgcnVubmluZyBwcm9wZXJseSwgc2luY2UgaXQgc2hvdWxkIHByb2R1Y2UgdGhlIHNhbWUKICAgICBvYmplY3QgZmlsZXMgcmVnYXJkbGVzcyBvZiBob3cgaXQgaXRzZWxmIHdhcyBjb21waWxlZC4KCidwcm9maWxlZGJvb3RzdHJhcCcKICAgICBCdWlsZHMgYSBjb21waWxlciB3aXRoIHByb2ZpbGluZyBmZWVkYmFjayBpbmZvcm1hdGlvbi4gIEZvciBtb3JlCiAgICAgaW5mb3JtYXRpb24sIHNlZSAqbm90ZSBCdWlsZGluZyB3aXRoIHByb2ZpbGUgZmVlZGJhY2s6CiAgICAgKGdjY2luc3RhbGwpQnVpbGRpbmcuCgoncmVzdHJhcCcKICAgICBSZXN0YXJ0IGEgYm9vdHN0cmFwLCBzbyB0aGF0IGV2ZXJ5dGhpbmcgdGhhdCB3YXMgbm90IGJ1aWx0IHdpdGggdGhlCiAgICAgc3lzdGVtIGNvbXBpbGVyIGlzIHJlYnVpbHQuCgonc3RhZ2VOLXN0YXJ0IChOID0gMS4uLjQpJwogICAgIEZvciBlYWNoIHBhY2thZ2UgdGhhdCBpcyBib290c3RyYXBwZWQsIHJlbmFtZSBkaXJlY3RvcmllcyBzbyB0aGF0LAogICAgIGZvciBleGFtcGxlLCAnZ2NjJyBwb2ludHMgdG8gdGhlIHN0YWdlTiBHQ0MsIGNvbXBpbGVkIHdpdGggdGhlCiAgICAgc3RhZ2VOLTEgR0NDKDIpLgoKICAgICBZb3Ugd2lsbCBpbnZva2UgdGhpcyB0YXJnZXQgaWYgeW91IG5lZWQgdG8gdGVzdCBvciBkZWJ1ZyB0aGUgc3RhZ2VOCiAgICAgR0NDLiAgSWYgeW91IG9ubHkgbmVlZCB0byBleGVjdXRlIEdDQyAoYnV0IHlvdSBuZWVkIG5vdCBydW4gJ21ha2UnCiAgICAgZWl0aGVyIHRvIHJlYnVpbGQgaXQgb3IgdG8gcnVuIHRlc3Qgc3VpdGVzKSwgeW91IHNob3VsZCBiZSBhYmxlIHRvCiAgICAgd29yayBkaXJlY3RseSBpbiB0aGUgJ3N0YWdlTi1nY2MnIGRpcmVjdG9yeS4gIFRoaXMgbWFrZXMgaXQgZWFzaWVyCiAgICAgdG8gZGVidWcgbXVsdGlwbGUgc3RhZ2VzIGluIHBhcmFsbGVsLgoKJ3N0YWdlJwogICAgIEZvciBlYWNoIHBhY2thZ2UgdGhhdCBpcyBib290c3RyYXBwZWQsIHJlbG9jYXRlIGl0cyBidWlsZCBkaXJlY3RvcnkKICAgICB0byBpbmRpY2F0ZSBpdHMgc3RhZ2UuICBGb3IgZXhhbXBsZSwgaWYgdGhlICdnY2MnIGRpcmVjdG9yeSBwb2ludHMKICAgICB0byB0aGUgc3RhZ2UyIEdDQywgYWZ0ZXIgaW52b2tpbmcgdGhpcyB0YXJnZXQgaXQgd2lsbCBiZSByZW5hbWVkIHRvCiAgICAgJ3N0YWdlMi1nY2MnLgoKIElmIHlvdSB3aXNoIHRvIHVzZSBub24tZGVmYXVsdCBHQ0MgZmxhZ3Mgd2hlbiBjb21waWxpbmcgdGhlIHN0YWdlMiBhbmQKc3RhZ2UzIGNvbXBpbGVycywgc2V0ICdCT09UX0NGTEFHUycgb24gdGhlIGNvbW1hbmQgbGluZSB3aGVuIGRvaW5nCidtYWtlJy4KCiBVc3VhbGx5LCB0aGUgZmlyc3Qgc3RhZ2Ugb25seSBidWlsZHMgdGhlIGxhbmd1YWdlcyB0aGF0IHRoZSBjb21waWxlciBpcwp3cml0dGVuIGluOiB0eXBpY2FsbHksIEMgYW5kIG1heWJlIEFkYS4gIElmIHlvdSBhcmUgZGVidWdnaW5nIGEKbWlzY29tcGlsYXRpb24gb2YgYSBkaWZmZXJlbnQgc3RhZ2UyIGZyb250LWVuZCAoZm9yIGV4YW1wbGUsIG9mIHRoZQpGb3J0cmFuIGZyb250LWVuZCksIHlvdSBtYXkgd2FudCB0byBoYXZlIGZyb250LWVuZHMgZm9yIG90aGVyIGxhbmd1YWdlcwppbiB0aGUgZmlyc3Qgc3RhZ2UgYXMgd2VsbC4gIFRvIGRvIHNvLCBzZXQgJ1NUQUdFMV9MQU5HVUFHRVMnIG9uIHRoZQpjb21tYW5kIGxpbmUgd2hlbiBkb2luZyAnbWFrZScuCgogRm9yIGV4YW1wbGUsIGluIHRoZSBhZm9yZW1lbnRpb25lZCBzY2VuYXJpbyBvZiBkZWJ1Z2dpbmcgYSBGb3J0cmFuCmZyb250LWVuZCBtaXNjb21waWxhdGlvbiBjYXVzZWQgYnkgdGhlIHN0YWdlMSBjb21waWxlciwgeW91IG1heSBuZWVkIGEKY29tbWFuZCBsaWtlCgogICAgIG1ha2Ugc3RhZ2UyLWJ1YmJsZSBTVEFHRTFfTEFOR1VBR0VTPWMsZm9ydHJhbgoKIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gdXNlIHBlci1sYW5ndWFnZSB0YXJnZXRzIHRvIGJ1aWxkIGFuZCB0ZXN0Cmxhbmd1YWdlcyB0aGF0IGFyZSBub3QgZW5hYmxlZCBieSBkZWZhdWx0IGluIHN0YWdlMS4gIEZvciBleGFtcGxlLCAnbWFrZQpmOTUxJyB3aWxsIGJ1aWxkIGEgRm9ydHJhbiBjb21waWxlciBldmVuIGluIHRoZSBzdGFnZTEgYnVpbGQgZGlyZWN0b3J5LgoKICAgLS0tLS0tLS0tLSBGb290bm90ZXMgLS0tLS0tLS0tLQoKICAgKDEpIEV4Y2VwdCBpZiB0aGUgY29tcGlsZXIgd2FzIGJ1Z2d5IGFuZCBtaXNjb21waWxlZCBzb21lIG9mIHRoZQpmaWxlcyB0aGF0IHdlcmUgbm90IG1vZGlmaWVkLiAgSW4gdGhpcyBjYXNlLCBpdCdzIGJlc3QgdG8gdXNlICdtYWtlCnJlc3RyYXAnLgoKICAgKDIpIEN1c3RvbWFyaWx5LCB0aGUgc3lzdGVtIGNvbXBpbGVyIGlzIGFsc28gdGVybWVkIHRoZSAnc3RhZ2UwJyBHQ0MuCgofCkZpbGU6IGdjY2ludC5pbmZvLCAgTm9kZTogTGlicmFyeSBGaWxlcywgIE5leHQ6IEhlYWRlcnMsICBQcmV2OiBNYWtlZmlsZSwgIFVwOiBnY2MgRGlyZWN0b3J5Cgo2LjMuNSBMaWJyYXJ5IFNvdXJjZSBGaWxlcyBhbmQgSGVhZGVycyB1bmRlciB0aGUgJ2djYycgRGlyZWN0b3J5Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCkZJWE1FOiBsaXN0IGhlcmUsIHdpdGggZXhwbGFuYXRpb24sIGFsbCB0aGUgQyBzb3VyY2UgZmlsZXMgYW5kIGhlYWRlcnMKdW5kZXIgdGhlICdnY2MnIGRpcmVjdG9yeSB0aGF0IGFyZW4ndCBidWlsdCBpbnRvIHRoZSBHQ0MgZXhlY3V0YWJsZSBidXQKcmF0aGVyIGFyZSBwYXJ0IG9mIHJ1bnRpbWUgbGlicmFyaWVzIGFuZCBvYmplY3QgZmlsZXMsIHN1Y2ggYXMKJ2NydHN0dWZmLmMnIGFuZCAndW53aW5kLWR3Mi5jJy4gICpOb3RlIEhlYWRlcnMgSW5zdGFsbGVkIGJ5IEdDQzoKSGVhZGVycywgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlICdnaW5jbHVkZScgZGlyZWN0b3J5LgoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IEhlYWRlcnMsICBOZXh0OiBEb2N1bWVudGF0aW9uLCAgUHJldjogTGlicmFyeSBGaWxlcywgIFVwOiBnY2MgRGlyZWN0b3J5Cgo2LjMuNiBIZWFkZXJzIEluc3RhbGxlZCBieSBHQ0MKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpJbiBnZW5lcmFsLCBHQ0MgZXhwZWN0cyB0aGUgc3lzdGVtIEMgbGlicmFyeSB0byBwcm92aWRlIG1vc3Qgb2YgdGhlCmhlYWRlcnMgdG8gYmUgdXNlZCB3aXRoIGl0LiAgSG93ZXZlciwgR0NDIHdpbGwgZml4IHRob3NlIGhlYWRlcnMgaWYKbmVjZXNzYXJ5IHRvIG1ha2UgdGhlbSB3b3JrIHdpdGggR0NDLCBhbmQgd2lsbCBpbnN0YWxsIHNvbWUgaGVhZGVycwpyZXF1aXJlZCBvZiBmcmVlc3RhbmRpbmcgaW1wbGVtZW50YXRpb25zLiAgVGhlc2UgaGVhZGVycyBhcmUgaW5zdGFsbGVkCmluICdMSUJTVUJESVIvaW5jbHVkZScuICBIZWFkZXJzIGZvciBub24tQyBydW50aW1lIGxpYnJhcmllcyBhcmUgYWxzbwppbnN0YWxsZWQgYnkgR0NDOyB0aGVzZSBhcmUgbm90IGRvY3VtZW50ZWQgaGVyZS4gIChGSVhNRTogZG9jdW1lbnQgdGhlbQpzb21ld2hlcmUuKQoKIFNldmVyYWwgb2YgdGhlIGhlYWRlcnMgR0NDIGluc3RhbGxzIGFyZSBpbiB0aGUgJ2dpbmNsdWRlJyBkaXJlY3RvcnkuClRoZXNlIGhlYWRlcnMsICdpc282NDYuaCcsICdzdGRhcmcuaCcsICdzdGRib29sLmgnLCBhbmQgJ3N0ZGRlZi5oJywgYXJlCmluc3RhbGxlZCBpbiAnTElCU1VCRElSL2luY2x1ZGUnLCB1bmxlc3MgdGhlIHRhcmdldCBNYWtlZmlsZSBmcmFnbWVudAooKm5vdGUgVGFyZ2V0IEZyYWdtZW50OjopIG92ZXJyaWRlcyB0aGlzIGJ5IHNldHRpbmcgJ1VTRVJfSCcuCgogSW4gYWRkaXRpb24gdG8gdGhlc2UgaGVhZGVycyBhbmQgdGhvc2UgZ2VuZXJhdGVkIGJ5IGZpeGluZyBzeXN0ZW0KaGVhZGVycyB0byB3b3JrIHdpdGggR0NDLCBzb21lIG90aGVyIGhlYWRlcnMgbWF5IGFsc28gYmUgaW5zdGFsbGVkIGluCidMSUJTVUJESVIvaW5jbHVkZScuICAnY29uZmlnLmdjYycgbWF5IHNldCAnZXh0cmFfaGVhZGVycyc7IHRoaXMKc3BlY2lmaWVzIGFkZGl0aW9uYWwgaGVhZGVycyB1bmRlciAnY29uZmlnJyB0byBiZSBpbnN0YWxsZWQgb24gc29tZQpzeXN0ZW1zLgoKIEdDQyBpbnN0YWxscyBpdHMgb3duIHZlcnNpb24gb2YgJzxmbG9hdC5oPicsIGZyb20gJ2dpbmNsdWRlL2Zsb2F0LmgnLgpUaGlzIGlzIGRvbmUgdG8gY29wZSB3aXRoIGNvbW1hbmQtbGluZSBvcHRpb25zIHRoYXQgY2hhbmdlIHRoZQpyZXByZXNlbnRhdGlvbiBvZiBmbG9hdGluZyBwb2ludCBudW1iZXJzLgoKIEdDQyBhbHNvIGluc3RhbGxzIGl0cyBvd24gdmVyc2lvbiBvZiAnPGxpbWl0cy5oPic7IHRoaXMgaXMgZ2VuZXJhdGVkCmZyb20gJ2dsaW1pdHMuaCcsIHRvZ2V0aGVyIHdpdGggJ2xpbWl0eC5oJyBhbmQgJ2xpbWl0eS5oJyBpZiB0aGUgc3lzdGVtCmFsc28gaGFzIGl0cyBvd24gdmVyc2lvbiBvZiAnPGxpbWl0cy5oPicuICAoR0NDIHByb3ZpZGVzIGl0cyBvd24gaGVhZGVyCmJlY2F1c2UgaXQgaXMgcmVxdWlyZWQgb2YgSVNPIEMgZnJlZXN0YW5kaW5nIGltcGxlbWVudGF0aW9ucywgYnV0IG5lZWRzCnRvIGluY2x1ZGUgdGhlIHN5c3RlbSBoZWFkZXIgZnJvbSBpdHMgb3duIGhlYWRlciBhcyB3ZWxsIGJlY2F1c2Ugb3RoZXIKc3RhbmRhcmRzIHN1Y2ggYXMgUE9TSVggc3BlY2lmeSBhZGRpdGlvbmFsIHZhbHVlcyB0byBiZSBkZWZpbmVkIGluCic8bGltaXRzLmg+Jy4pICBUaGUgc3lzdGVtJ3MgJzxsaW1pdHMuaD4nIGhlYWRlciBpcyB1c2VkIHZpYQonTElCU1VCRElSL2luY2x1ZGUvc3lzbGltaXRzLmgnLCB3aGljaCBpcyBjb3BpZWQgZnJvbSAnZ3N5c2xpbWl0cy5oJyBpZgppdCBkb2VzIG5vdCBuZWVkIGZpeGluZyB0byB3b3JrIHdpdGggR0NDOyBpZiBpdCBuZWVkcyBmaXhpbmcsCidzeXNsaW1pdHMuaCcgaXMgdGhlIGZpeGVkIGNvcHkuCgogR0NDIGNhbiBhbHNvIGluc3RhbGwgJzx0Z21hdGguaD4nLiAgSXQgd2lsbCBkbyB0aGlzIHdoZW4gJ2NvbmZpZy5nY2MnCnNldHMgJ3VzZV9nY2NfdGdtYXRoJyB0byAneWVzJy4KCh8KRmlsZTogZ2NjaW50LmluZm8sICBOb2RlOiBEb2N1bWVudGF0aW9uLCAgTmV4dDogRnJvbnQgRW5kLCAgUHJldjogSGVhZGVycywgIFVwOiBnY2MgRGlyZWN0b3J5Cgo2LjMuNyBCdWlsZGluZyBEb2N1bWVudGF0aW9uCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KClRoZSBtYWluIEdDQyBkb2N1bWVudGF0aW9uIGlzIGluIHRoZSBmb3JtIG9mIG1hbnVhbHMgaW4gVGV4aW5mbyBmb3JtYXQuClRoZXNlIGFyZSBpbnN0YWxsZWQgaW4gSW5mbyBmb3JtYXQ7IERWSSB2ZXJzaW9ucyBtYXkgYmUgZ2VuZXJhdGVkIGJ5CidtYWtlIGR2aScsIFBERiB2ZXJzaW9ucyBieSAnbWFrZSBwZGYnLCBhbmQgSFRNTCB2ZXJzaW9ucyBieSAnbWFrZQpodG1sJy4gIEluIGFkZGl0aW9uLCBzb21lIG1hbiBwYWdlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFRleGluZm8KbWFudWFscywgdGhlcmUgYXJlIHNvbWUgb3RoZXIgdGV4dCBmaWxlcyB3aXRoIG1pc2NlbGxhbmVvdXMKZG9jdW1lbnRhdGlvbiwgYW5kIHJ1bnRpbWUgbGlicmFyaWVzIGhhdmUgdGhlaXIgb3duIGRvY3VtZW50YXRpb24Kb3V0c2lkZSB0aGUgJ2djYycgZGlyZWN0b3J5LiAgRklYTUU6IGRvY3VtZW50IHRoZSBkb2N1bWVudGF0aW9uIGZvcgpydW50aW1lIGxpYnJhcmllcyBzb21ld2hlcmUuCgoqIE1lbnU6CgoqIFRleGluZm8gTWFudWFsczo6ICAgICAgR0NDIG1hbnVhbHMgaW4gVGV4aW5mbyBmb3JtYXQuCiogTWFuIFBhZ2UgR2VuZXJhdGlvbjo6ICBHZW5lcmF0aW5nIG1hbiBwYWdlcyBmcm9tIFRleGluZm8gbWFudWFscy4KKiBNaXNjZWxsYW5lb3VzIERvY3M6OiAgIE1pc2NlbGxhbmVvdXMgdGV4dCBmaWxlcyB3aXRoIGRvY3VtZW50YXRpb24uCgofCkZpbGU6IGdjY2ludC5pbmZvLCAgTm9kZTogVGV4aW5mbyBNYW51YWxzLCAgTmV4dDogTWFuIFBhZ2UgR2VuZXJhdGlvbiwgIFVwOiBEb2N1bWVudGF0aW9uCgo2LjMuNy4xIFRleGluZm8gTWFudWFscwouLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgoKVGhlIG1hbnVhbHMgZm9yIEdDQyBhcyBhIHdob2xlLCBhbmQgdGhlIEMgYW5kIEMrKyBmcm9udCBlbmRzLCBhcmUgaW4KZmlsZXMgJ2RvYy8qLnRleGknLiAgT3RoZXIgZnJvbnQgZW5kcyBoYXZlIHRoZWlyIG93biBtYW51YWxzIGluIGZpbGVzCidMQU5HVUFHRS8qLnRleGknLiAgQ29tbW9uIGZpbGVzICdkb2MvaW5jbHVkZS8qLnRleGknIGFyZSBwcm92aWRlZCB3aGljaAptYXkgYmUgaW5jbHVkZWQgaW4gbXVsdGlwbGUgbWFudWFsczsgdGhlIGZvbGxvd2luZyBmaWxlcyBhcmUgaW4KJ2RvYy9pbmNsdWRlJzoKCidmZGwudGV4aScKICAgICBUaGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLgonZnVuZGluZy50ZXhpJwogICAgIFRoZSBzZWN0aW9uICJGdW5kaW5nIEZyZWUgU29mdHdhcmUiLgonZ2NjLWNvbW1vbi50ZXhpJwogICAgIENvbW1vbiBkZWZpbml0aW9ucyBmb3IgbWFudWFscy4KJ2dwbC50ZXhpJwonZ3BsX3YzLnRleGknCiAgICAgVGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgondGV4aW5mby50ZXgnCiAgICAgQSBjb3B5IG9mICd0ZXhpbmZvLnRleCcga25vd24gdG8gd29yayB3aXRoIHRoZSBHQ0MgbWFudWFscy4KCiBEVkktZm9ybWF0dGVkIG1hbnVhbHMgYXJlIGdlbmVyYXRlZCBieSAnbWFrZSBkdmknLCB3aGljaCB1c2VzCid0ZXhpMmR2aScgKHZpYSB0aGUgTWFrZWZpbGUgbWFjcm8gJyQoVEVYSTJEVkkpJykuICBQREYtZm9ybWF0dGVkCm1hbnVhbHMgYXJlIGdlbmVyYXRlZCBieSAnbWFrZSBwZGYnLCB3aGljaCB1c2VzICd0ZXhpMnBkZicgKHZpYSB0aGUKTWFrZWZpbGUgbWFjcm8gJyQoVEVYSTJQREYpJykuICBIVE1MIGZvcm1hdHRlZCBtYW51YWxzIGFyZSBnZW5lcmF0ZWQgYnkKJ21ha2UgaHRtbCcuICBJbmZvIG1hbnVhbHMgYXJlIGdlbmVyYXRlZCBieSAnbWFrZSBpbmZvJyAod2hpY2ggaXMgcnVuIGFzCnBhcnQgb2YgYSBib290c3RyYXApOyB0aGlzIGdlbmVyYXRlcyB0aGUgbWFudWFscyBpbiB0aGUgc291cmNlCmRpcmVjdG9yeSwgdXNpbmcgJ21ha2VpbmZvJyB2aWEgdGhlIE1ha2VmaWxlIG1hY3JvICckKE1BS0VJTkZPKScsIGFuZAp0aGV5IGFyZSBpbmNsdWRlZCBpbiByZWxlYXNlIGRpc3RyaWJ1dGlvbnMuCgogTWFudWFscyBhcmUgYWxzbyBwcm92aWRlZCBvbiB0aGUgR0NDIHdlYiBzaXRlLCBpbiBib3RoIEhUTUwgYW5kClBvc3RTY3JpcHQgZm9ybXMuICBUaGlzIGlzIGRvbmUgdmlhIHRoZSBzY3JpcHQKJ21haW50YWluZXItc2NyaXB0cy91cGRhdGVfd2ViX2RvY3MnLiAgRWFjaCBtYW51YWwgdG8gYmUgcHJvdmlkZWQgb25saW5lCm11c3QgYmUgbGlzdGVkIGluIHRoZSBkZWZpbml0aW9uIG9mICdNQU5VQUxTJyBpbiB0aGF0IGZpbGU7IGEgZmlsZQonTkFNRS50ZXhpJyBtdXN0IG9ubHkgYXBwZWFyIG9uY2UgaW4gdGhlIHNvdXJjZSB0cmVlLCBhbmQgdGhlIG91dHB1dAptYW51YWwgbXVzdCBoYXZlIHRoZSBzYW1lIG5hbWUgYXMgdGhlIHNvdXJjZSBmaWxlLiAgKEhvd2V2ZXIsIG90aGVyClRleGluZm8gZmlsZXMsIGluY2x1ZGVkIGluIG1hbnVhbHMgYnV0IG5vdCB0aGVtc2VsdmVzIHRoZSByb290IGZpbGVzIG9mCm1hbnVhbHMsIG1heSBoYXZlIG5hbWVzIHRoYXQgYXBwZWFyIG1vcmUgdGhhbiBvbmNlIGluIHRoZSBzb3VyY2UgdHJlZS4pClRoZSBtYW51YWwgZmlsZSAnTkFNRS50ZXhpJyBzaG91bGQgb25seSBpbmNsdWRlIG90aGVyIGZpbGVzIGluIGl0cyBvd24KZGlyZWN0b3J5IG9yIGluICdkb2MvaW5jbHVkZScuICBIVE1MIG1hbnVhbHMgd2lsbCBiZSBnZW5lcmF0ZWQgYnkKJ21ha2VpbmZvIC0taHRtbCcsIFBvc3RTY3JpcHQgbWFudWFscyBieSAndGV4aTJkdmknIGFuZCAnZHZpcHMnLCBhbmQgUERGCm1hbnVhbHMgYnkgJ3RleGkycGRmJy4gIEFsbCBUZXhpbmZvIGZpbGVzIHRoYXQgYXJlIHBhcnRzIG9mIG1hbnVhbHMgbXVzdApiZSBjaGVja2VkIGludG8gU1ZOLCBldmVuIGlmIHRoZXkgYXJlIGdlbmVyYXRlZCBmaWxlcywgZm9yIHRoZQpnZW5lcmF0aW9uIG9mIG9ubGluZSBtYW51YWxzIHRvIHdvcmsuCgogVGhlIGluc3RhbGxhdGlvbiBtYW51YWwsICdkb2MvaW5zdGFsbC50ZXhpJywgaXMgYWxzbyBwcm92aWRlZCBvbiB0aGUKR0NDIHdlYiBzaXRlLiAgVGhlIEhUTUwgdmVyc2lvbiBpcyBnZW5lcmF0ZWQgYnkgdGhlIHNjcmlwdAonZG9jL2luc3RhbGwudGV4aTJodG1sJy4KCh8KRmlsZTogZ2NjaW50LmluZm8sICBOb2RlOiBNYW4gUGFnZSBHZW5lcmF0aW9uLCAgTmV4dDogTWlzY2VsbGFuZW91cyBEb2NzLCAgUHJldjogVGV4aW5mbyBNYW51YWxzLCAgVXA6IERvY3VtZW50YXRpb24KCjYuMy43LjIgTWFuIFBhZ2UgR2VuZXJhdGlvbgouLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KCkJlY2F1c2Ugb2YgdXNlciBkZW1hbmQsIGluIGFkZGl0aW9uIHRvIGZ1bGwgVGV4aW5mbyBtYW51YWxzLCBtYW4gcGFnZXMKYXJlIHByb3ZpZGVkIHdoaWNoIGNvbnRhaW4gZXh0cmFjdHMgZnJvbSB0aG9zZSBtYW51YWxzLiAgVGhlc2UgbWFuIHBhZ2VzCmFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVGV4aW5mbyBtYW51YWxzIHVzaW5nICdjb250cmliL3RleGkycG9kLnBsJyBhbmQKJ3BvZDJtYW4nLiAgKFRoZSBtYW4gcGFnZSBmb3IgJ2crKycsICdjcC9nKysuMScsIGp1c3QgY29udGFpbnMgYSAnLnNvJwpyZWZlcmVuY2UgdG8gJ2djYy4xJywgYnV0IGFsbCB0aGUgb3RoZXIgbWFuIHBhZ2VzIGFyZSBnZW5lcmF0ZWQgZnJvbQpUZXhpbmZvIG1hbnVhbHMuKQoKIEJlY2F1c2UgbWFueSBzeXN0ZW1zIG1heSBub3QgaGF2ZSB0aGUgbmVjZXNzYXJ5IHRvb2xzIGluc3RhbGxlZCB0bwpnZW5lcmF0ZSB0aGUgbWFuIHBhZ2VzLCB0aGV5IGFyZSBvbmx5IGdlbmVyYXRlZCBpZiB0aGUgJ2NvbmZpZ3VyZScKc2NyaXB0IGRldGVjdHMgdGhhdCByZWNlbnQgZW5vdWdoIHRvb2xzIGFyZSBpbnN0YWxsZWQsIGFuZCB0aGUgTWFrZWZpbGVzCmFsbG93IGdlbmVyYXRpbmcgbWFuIHBhZ2VzIHRvIGZhaWwgd2l0aG91dCBhYm9ydGluZyB0aGUgYnVpbGQuICBNYW4KcGFnZXMgYXJlIGFsc28gaW5jbHVkZWQgaW4gcmVsZWFzZSBkaXN0cmlidXRpb25zLiAgVGhleSBhcmUgZ2VuZXJhdGVkIGluCnRoZSBzb3VyY2UgZGlyZWN0b3J5LgoKIE1hZ2ljIGNvbW1lbnRzIGluIFRleGluZm8gZmlsZXMgc3RhcnRpbmcgJ0BjIG1hbicgY29udHJvbCB3aGF0IHBhcnRzIG9mCmEgVGV4aW5mbyBmaWxlIGdvIGludG8gYSBtYW4gcGFnZS4gIE9ubHkgYSBzdWJzZXQgb2YgVGV4aW5mbyBpcwpzdXBwb3J0ZWQgYnkgJ3RleGkycG9kLnBsJywgYW5kIGl0IG1heSBiZSBuZWNlc3NhcnkgdG8gYWRkIHN1cHBvcnQgZm9yCm1vcmUgVGV4aW5mbyBmZWF0dXJlcyB0byB0aGlzIHNjcmlwdCB3aGVuIGdlbmVyYXRpbmcgbmV3IG1hbiBwYWdlcy4gIFRvCmltcHJvdmUgdGhlIG1hbiBwYWdlIG91dHB1dCwgc29tZSBzcGVjaWFsIFRleGluZm8gbWFjcm9zIGFyZSBwcm92aWRlZCBpbgonZG9jL2luY2x1ZGUvZ2NjLWNvbW1vbi50ZXhpJyB3aGljaCAndGV4aTJwb2QucGwnIHVuZGVyc3RhbmRzOgoKJ0BnY2N0YWJvcHQnCiAgICAgVXNlIGluIHRoZSBmb3JtICdAdGFibGUgQGdjY3RhYm9wdCcgZm9yIHRhYmxlcyBvZiBvcHRpb25zLCB3aGVyZQogICAgIGZvciBwcmludGVkIG91dHB1dCB0aGUgZWZmZWN0IG9mICdAY29kZScgaXMgYmV0dGVyIHRoYW4gdGhhdCBvZgogICAgICdAb3B0aW9uJyBidXQgZm9yIG1hbiBwYWdlIG91dHB1dCBhIGRpZmZlcmVudCBlZmZlY3QgaXMgd2FudGVkLgonQGdjY29wdGxpc3QnCiAgICAgVXNlIGZvciBzdW1tYXJ5IGxpc3RzIG9mIG9wdGlvbnMgaW4gbWFudWFscy4KJ0Bnb2wnCiAgICAgVXNlIGF0IHRoZSBlbmQgb2YgZWFjaCBsaW5lIGluc2lkZSAnQGdjY29wdGxpc3QnLiAgVGhpcyBpcwogICAgIG5lY2Vzc2FyeSB0byBhdm9pZCBwcm9ibGVtcyB3aXRoIGRpZmZlcmVuY2VzIGluIGhvdyB0aGUKICAgICAnQGdjY29wdGxpc3QnIG1hY3JvIGlzIGhhbmRsZWQgYnkgZGlmZmVyZW50IFRleGluZm8gZm9ybWF0dGVycy4KCiBGSVhNRTogZGVzY3JpYmUgdGhlICd0ZXhpMnBvZC5wbCcgaW5wdXQgbGFuZ3VhZ2UgYW5kIG1hZ2ljIGNvbW1lbnRzIGluCm1vcmUgZGV0YWlsLgoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IE1pc2NlbGxhbmVvdXMgRG9jcywgIFByZXY6IE1hbiBQYWdlIEdlbmVyYXRpb24sICBVcDogRG9jdW1lbnRhdGlvbgoKNi4zLjcuMyBNaXNjZWxsYW5lb3VzIERvY3VtZW50YXRpb24KLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KCkluIGFkZGl0aW9uIHRvIHRoZSBmb3JtYWwgZG9jdW1lbnRhdGlvbiB0aGF0IGlzIGluc3RhbGxlZCBieSBHQ0MsIHRoZXJlCmFyZSBzZXZlcmFsIG90aGVyIHRleHQgZmlsZXMgd2l0aCBtaXNjZWxsYW5lb3VzIGRvY3VtZW50YXRpb246CgonQUJPVVQtR0NDLU5MUycKICAgICBOb3RlcyBvbiBHQ0MncyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydC4gIEZJWE1FOiB0aGlzIHNob3VsZCBiZSBwYXJ0CiAgICAgb2YgdGhpcyBtYW51YWwgcmF0aGVyIHRoYW4gYSBzZXBhcmF0ZSBmaWxlLgonQUJPVVQtTkxTJwogICAgIE5vdGVzIG9uIHRoZSBGcmVlIFRyYW5zbGF0aW9uIFByb2plY3QuCidDT1BZSU5HJwogICAgIFRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KJ0NPUFlJTkcuTElCJwogICAgIFRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCicqQ2hhbmdlTG9nKicKJyovQ2hhbmdlTG9nKicKICAgICBDaGFuZ2UgbG9nIGZpbGVzIGZvciB2YXJpb3VzIHBhcnRzIG9mIEdDQy4KJ0xBTkdVQUdFUycKICAgICBEZXRhaWxzIG9mIGEgZmV3IGNoYW5nZXMgdG8gdGhlIEdDQyBmcm9udC1lbmQgaW50ZXJmYWNlLiAgRklYTUU6CiAgICAgdGhlIGluZm9ybWF0aW9uIGluIHRoaXMgZmlsZSBzaG91bGQgYmUgcGFydCBvZiBnZW5lcmFsCiAgICAgZG9jdW1lbnRhdGlvbiBvZiB0aGUgZnJvbnQtZW5kIGludGVyZmFjZSBpbiB0aGlzIG1hbnVhbC4KJ09ORVdTJwogICAgIEluZm9ybWF0aW9uIGFib3V0IG5ldyBmZWF0dXJlcyBpbiBvbGQgdmVyc2lvbnMgb2YgR0NDLiAgKEZvciByZWNlbnQKICAgICB2ZXJzaW9ucywgdGhlIGluZm9ybWF0aW9uIGlzIG9uIHRoZSBHQ0Mgd2ViIHNpdGUuKQonUkVBRE1FLlBvcnRhYmlsaXR5JwogICAgIEluZm9ybWF0aW9uIGFib3V0IHBvcnRhYmlsaXR5IGlzc3VlcyB3aGVuIHdyaXRpbmcgY29kZSBpbiBHQ0MuCiAgICAgRklYTUU6IHdoeSBpc24ndCB0aGlzIHBhcnQgb2YgdGhpcyBtYW51YWwgb3Igb2YgdGhlIEdDQyBDb2RpbmcKICAgICBDb252ZW50aW9ucz8KCiBGSVhNRTogZG9jdW1lbnQgc3VjaCBmaWxlcyBpbiBzdWJkaXJlY3RvcmllcywgYXQgbGVhc3QgJ2NvbmZpZycsICdjcCcsCidvYmpjJywgJ3Rlc3RzdWl0ZScuCgofCkZpbGU6IGdjY2ludC5pbmZvLCAgTm9kZTogRnJvbnQgRW5kLCAgTmV4dDogQmFjayBFbmQsICBQcmV2OiBEb2N1bWVudGF0aW9uLCAgVXA6IGdjYyBEaXJlY3RvcnkKCjYuMy44IEFuYXRvbXkgb2YgYSBMYW5ndWFnZSBGcm9udCBFbmQKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKQSBmcm9udCBlbmQgZm9yIGEgbGFuZ3VhZ2UgaW4gR0NDIGhhcyB0aGUgZm9sbG93aW5nIHBhcnRzOgoKICAgKiBBIGRpcmVjdG9yeSAnTEFOR1VBR0UnIHVuZGVyICdnY2MnIGNvbnRhaW5pbmcgc291cmNlIGZpbGVzIGZvciB0aGF0CiAgICAgZnJvbnQgZW5kLiAgKk5vdGUgVGhlIEZyb250IEVuZCAnTEFOR1VBR0UnIERpcmVjdG9yeTogRnJvbnQgRW5kCiAgICAgRGlyZWN0b3J5LCBmb3IgZGV0YWlscy4KICAgKiBBIG1lbnRpb24gb2YgdGhlIGxhbmd1YWdlIGluIHRoZSBsaXN0IG9mIHN1cHBvcnRlZCBsYW5ndWFnZXMgaW4KICAgICAnZ2NjL2RvYy9pbnN0YWxsLnRleGknLgogICAqIEEgbWVudGlvbiBvZiB0aGUgbmFtZSB1bmRlciB3aGljaCB0aGUgbGFuZ3VhZ2UncyBydW50aW1lIGxpYnJhcnkgaXMKICAgICByZWNvZ25pemVkIGJ5ICctLWVuYWJsZS1zaGFyZWQ9UEFDS0FHRScgaW4gdGhlIGRvY3VtZW50YXRpb24gb2YKICAgICB0aGF0IG9wdGlvbiBpbiAnZ2NjL2RvYy9pbnN0YWxsLnRleGknLgogICAqIEEgbWVudGlvbiBvZiBhbnkgc3BlY2lhbCBwcmVyZXF1aXNpdGVzIGZvciBidWlsZGluZyB0aGUgZnJvbnQgZW5kCiAgICAgaW4gdGhlIGRvY3VtZW50YXRpb24gb2YgcHJlcmVxdWlzaXRlcyBpbiAnZ2NjL2RvYy9pbnN0YWxsLnRleGknLgogICAqIERldGFpbHMgb2YgY29udHJpYnV0b3JzIHRvIHRoYXQgZnJvbnQgZW5kIGluCiAgICAgJ2djYy9kb2MvY29udHJpYi50ZXhpJy4gIElmIHRoZSBkZXRhaWxzIGFyZSBpbiB0aGF0IGZyb250IGVuZCdzIG93bgogICAgIG1hbnVhbCB0aGVuIHRoZXJlIHNob3VsZCBiZSBhIGxpbmsgdG8gdGhhdCBtYW51YWwncyBsaXN0IGluCiAgICAgJ2NvbnRyaWIudGV4aScuCiAgICogSW5mb3JtYXRpb24gYWJvdXQgc3VwcG9ydCBmb3IgdGhhdCBsYW5ndWFnZSBpbgogICAgICdnY2MvZG9jL2Zyb250ZW5kcy50ZXhpJy4KICAgKiBJbmZvcm1hdGlvbiBhYm91dCBzdGFuZGFyZHMgZm9yIHRoYXQgbGFuZ3VhZ2UsIGFuZCB0aGUgZnJvbnQgZW5kJ3MKICAgICBzdXBwb3J0IGZvciB0aGVtLCBpbiAnZ2NjL2RvYy9zdGFuZGFyZHMudGV4aScuICBUaGlzIG1heSBiZSBhIGxpbmsKICAgICB0byBzdWNoIGluZm9ybWF0aW9uIGluIHRoZSBmcm9udCBlbmQncyBvd24gbWFudWFsLgogICAqIERldGFpbHMgb2Ygc291cmNlIGZpbGUgc3VmZml4ZXMgZm9yIHRoYXQgbGFuZ3VhZ2UgYW5kICcteCBMQU5HJwogICAgIG9wdGlvbnMgc3VwcG9ydGVkLCBpbiAnZ2NjL2RvYy9pbnZva2UudGV4aScuCiAgICogRW50cmllcyBpbiAnZGVmYXVsdF9jb21waWxlcnMnIGluICdnY2MuYycgZm9yIHNvdXJjZSBmaWxlIHN1ZmZpeGVzCiAgICAgZm9yIHRoYXQgbGFuZ3VhZ2UuCiAgICogUHJlZmVyYWJseSB0ZXN0c3VpdGVzLCB3aGljaCBtYXkgYmUgdW5kZXIgJ2djYy90ZXN0c3VpdGUnIG9yCiAgICAgcnVudGltZSBsaWJyYXJ5IGRpcmVjdG9yaWVzLiAgRklYTUU6IGRvY3VtZW50IHNvbWV3aGVyZSBob3cgdG8KICAgICB3cml0ZSB0ZXN0c3VpdGUgaGFybmVzc2VzLgogICAqIFByb2JhYmx5IGEgcnVudGltZSBsaWJyYXJ5IGZvciB0aGUgbGFuZ3VhZ2UsIG91dHNpZGUgdGhlICdnY2MnCiAgICAgZGlyZWN0b3J5LiAgRklYTUU6IGRvY3VtZW50IHRoaXMgZnVydGhlci4KICAgKiBEZXRhaWxzIG9mIHRoZSBkaXJlY3RvcmllcyBvZiBhbnkgcnVudGltZSBsaWJyYXJpZXMgaW4KICAgICAnZ2NjL2RvYy9zb3VyY2VidWlsZC50ZXhpJy4KCiBJZiB0aGUgZnJvbnQgZW5kIGlzIGFkZGVkIHRvIHRoZSBvZmZpY2lhbCBHQ0Mgc291cmNlIHJlcG9zaXRvcnksIHRoZQpmb2xsb3dpbmcgYXJlIGFsc28gbmVjZXNzYXJ5OgoKICAgKiBBdCBsZWFzdCBvbmUgQnVnemlsbGEgY29tcG9uZW50IGZvciBidWdzIGluIHRoYXQgZnJvbnQgZW5kIGFuZAogICAgIHJ1bnRpbWUgbGlicmFyaWVzLiAgVGhpcyBjYXRlZ29yeSBuZWVkcyB0byBiZSBtZW50aW9uZWQgaW4KICAgICAnZ2NjL2djY2J1Zy5pbicsIGFzIHdlbGwgYXMgYmVpbmcgYWRkZWQgdG8gdGhlIEJ1Z3ppbGxhIGRhdGFiYXNlLgogICAqIE5vcm1hbGx5LCBvbmUgb3IgbW9yZSBtYWludGFpbmVycyBvZiB0aGF0IGZyb250IGVuZCBsaXN0ZWQgaW4KICAgICAnTUFJTlRBSU5FUlMnLgogICAqIE1lbnRpb25zIG9uIHRoZSBHQ0Mgd2ViIHNpdGUgaW4gJ2luZGV4Lmh0bWwnIGFuZCAnZnJvbnRlbmRzLmh0bWwnLAogICAgIHdpdGggYW55IHJlbGV2YW50IGxpbmtzIG9uICdyZWFkaW5ncy5odG1sJy4gIChGcm9udCBlbmRzIHRoYXQgYXJlCiAgICAgbm90IGFuIG9mZmljaWFsIHBhcnQgb2YgR0NDIG1heSBhbHNvIGJlIGxpc3RlZCBvbiAnZnJvbnRlbmRzLmh0bWwnLAogICAgIHdpdGggcmVsZXZhbnQgbGlua3MuKQogICAqIEEgbmV3cyBpdGVtIG9uICdpbmRleC5odG1sJywgYW5kIHBvc3NpYmx5IGFuIGFubm91bmNlbWVudCBvbiB0aGUKICAgICA8Z2NjLWFubm91bmNlQGdjYy5nbnUub3JnPiBtYWlsaW5nIGxpc3QuCiAgICogVGhlIGZyb250IGVuZCdzIG1hbnVhbHMgc2hvdWxkIGJlIG1lbnRpb25lZCBpbgogICAgICdtYWludGFpbmVyLXNjcmlwdHMvdXBkYXRlX3dlYl9kb2NzJyAoKm5vdGUgVGV4aW5mbyBNYW51YWxzOjopIGFuZAogICAgIHRoZSBvbmxpbmUgbWFudWFscyBzaG91bGQgYmUgbGlua2VkIHRvIGZyb20KICAgICAnb25saW5lZG9jcy9pbmRleC5odG1sJy4KICAgKiBBbnkgb2xkIHJlbGVhc2VzIG9yIENWUyByZXBvc2l0b3JpZXMgb2YgdGhlIGZyb250IGVuZCwgYmVmb3JlIGl0cwogICAgIGluY2x1c2lvbiBpbiBHQ0MsIHNob3VsZCBiZSBtYWRlIGF2YWlsYWJsZSBvbiB0aGUgR0NDIEZUUCBzaXRlCiAgICAgPGZ0cDovL2djYy5nbnUub3JnL3B1Yi9nY2Mvb2xkLXJlbGVhc2VzLz4uCiAgICogVGhlIHJlbGVhc2UgYW5kIHNuYXBzaG90IHNjcmlwdCAnbWFpbnRhaW5lci1zY3JpcHRzL2djY19yZWxlYXNlJwogICAgIHNob3VsZCBiZSB1cGRhdGVkIHRvIGdlbmVyYXRlIGFwcHJvcHJpYXRlIHRhcmJhbGxzIGZvciB0aGlzIGZyb250CiAgICAgZW5kLiAgVGhlIGFzc29jaWF0ZWQgJ21haW50YWluZXItc2NyaXB0cy9zbmFwc2hvdC1SRUFETUUnIGFuZAogICAgICdtYWludGFpbmVyLXNjcmlwdHMvc25hcHNob3QtaW5kZXguaHRtbCcgZmlsZXMgc2hvdWxkIGJlIHVwZGF0ZWQgdG8KICAgICBsaXN0IHRoZSB0YXJiYWxscyBhbmQgZGlmZnMgZm9yIHRoaXMgZnJvbnQgZW5kLgogICAqIElmIHRoaXMgZnJvbnQgZW5kIGluY2x1ZGVzIGl0cyBvd24gdmVyc2lvbiBmaWxlcyB0aGF0IGluY2x1ZGUgdGhlCiAgICAgY3VycmVudCBkYXRlLCAnbWFpbnRhaW5lci1zY3JpcHRzL3VwZGF0ZV92ZXJzaW9uJyBzaG91bGQgYmUgdXBkYXRlZAogICAgIGFjY29yZGluZ2x5LgoKKiBNZW51OgoKKiBGcm9udCBFbmQgRGlyZWN0b3J5OjogIFRoZSBmcm9udCBlbmQgJ0xBTkdVQUdFJyBkaXJlY3RvcnkuCiogRnJvbnQgRW5kIENvbmZpZzo6ICAgICBUaGUgZnJvbnQgZW5kICdjb25maWctbGFuZy5pbicgZmlsZS4KCh8KRmlsZTogZ2NjaW50LmluZm8sICBOb2RlOiBGcm9udCBFbmQgRGlyZWN0b3J5LCAgTmV4dDogRnJvbnQgRW5kIENvbmZpZywgIFVwOiBGcm9udCBFbmQKCjYuMy44LjEgVGhlIEZyb250IEVuZCAnTEFOR1VBR0UnIERpcmVjdG9yeQouLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KCkEgZnJvbnQgZW5kICdMQU5HVUFHRScgZGlyZWN0b3J5IGNvbnRhaW5zIHRoZSBzb3VyY2UgZmlsZXMgb2YgdGhhdCBmcm9udAplbmQgKGJ1dCBub3Qgb2YgYW55IHJ1bnRpbWUgbGlicmFyaWVzLCB3aGljaCBzaG91bGQgYmUgb3V0c2lkZSB0aGUgJ2djYycKZGlyZWN0b3J5KS4gIFRoaXMgaW5jbHVkZXMgZG9jdW1lbnRhdGlvbiwgYW5kIHBvc3NpYmx5IHNvbWUgc3Vic2lkaWFyeQpwcm9ncmFtcyBidWlsZCBhbG9uZ3NpZGUgdGhlIGZyb250IGVuZC4gIENlcnRhaW4gZmlsZXMgYXJlIHNwZWNpYWwgYW5kCm90aGVyIHBhcnRzIG9mIHRoZSBjb21waWxlciBkZXBlbmQgb24gdGhlaXIgbmFtZXM6CgonY29uZmlnLWxhbmcuaW4nCiAgICAgVGhpcyBmaWxlIGlzIHJlcXVpcmVkIGluIGFsbCBsYW5ndWFnZSBzdWJkaXJlY3Rvcmllcy4gICpOb3RlIFRoZQogICAgIEZyb250IEVuZCAnY29uZmlnLWxhbmcuaW4nIEZpbGU6IEZyb250IEVuZCBDb25maWcsIGZvciBkZXRhaWxzIG9mCiAgICAgaXRzIGNvbnRlbnRzCidNYWtlLWxhbmcuaW4nCiAgICAgVGhpcyBmaWxlIGlzIHJlcXVpcmVkIGluIGFsbCBsYW5ndWFnZSBzdWJkaXJlY3Rvcmllcy4gIEl0IGNvbnRhaW5zCiAgICAgdGFyZ2V0cyAnTEFORy5IT09LJyAod2hlcmUgJ0xBTkcnIGlzIHRoZSBzZXR0aW5nIG9mICdsYW5ndWFnZScgaW4KICAgICAnY29uZmlnLWxhbmcuaW4nKSBmb3IgdGhlIGZvbGxvd2luZyB2YWx1ZXMgb2YgJ0hPT0snLCBhbmQgYW55IG90aGVyCiAgICAgTWFrZWZpbGUgcnVsZXMgcmVxdWlyZWQgdG8gYnVpbGQgdGhvc2UgdGFyZ2V0cyAod2hpY2ggbWF5IGlmCiAgICAgbmVjZXNzYXJ5IHVzZSBvdGhlciBNYWtlZmlsZXMgc3BlY2lmaWVkIGluICdvdXRwdXRzJyBpbgogICAgICdjb25maWctbGFuZy5pbicsIGFsdGhvdWdoIHRoaXMgaXMgZGVwcmVjYXRlZCkuICBJdCBhbHNvIGFkZHMgYW55CiAgICAgdGVzdHN1aXRlIHRhcmdldHMgdGhhdCBjYW4gdXNlIHRoZSBzdGFuZGFyZCBydWxlIGluCiAgICAgJ2djYy9NYWtlZmlsZS5pbicgdG8gdGhlIHZhcmlhYmxlICdsYW5nX2NoZWNrcycuCgogICAgICdhbGwuY3Jvc3MnCiAgICAgJ3N0YXJ0LmVuY2FwJwogICAgICdyZXN0LmVuY2FwJwogICAgICAgICAgRklYTUU6IGV4YWN0bHkgd2hhdCBnb2VzIGluIGVhY2ggb2YgdGhlc2UgdGFyZ2V0cz8KICAgICAndGFncycKICAgICAgICAgIEJ1aWxkIGFuICdldGFncycgJ1RBR1MnIGZpbGUgaW4gdGhlIGxhbmd1YWdlIHN1YmRpcmVjdG9yeSBpbgogICAgICAgICAgdGhlIHNvdXJjZSB0cmVlLgogICAgICdpbmZvJwogICAgICAgICAgQnVpbGQgaW5mbyBkb2N1bWVudGF0aW9uIGZvciB0aGUgZnJvbnQgZW5kLCBpbiB0aGUgYnVpbGQKICAgICAgICAgIGRpcmVjdG9yeS4gIFRoaXMgdGFyZ2V0IGlzIG9ubHkgY2FsbGVkIGJ5ICdtYWtlIGJvb3RzdHJhcCcgaWYKICAgICAgICAgIGEgc3VpdGFibGUgdmVyc2lvbiBvZiAnbWFrZWluZm8nIGlzIGF2YWlsYWJsZSwgc28gZG9lcyBub3QKICAgICAgICAgIG5lZWQgdG8gY2hlY2sgZm9yIHRoaXMsIGFuZCBzaG91bGQgZmFpbCBpZiBhbiBlcnJvciBvY2N1cnMuCiAgICAgJ2R2aScKICAgICAgICAgIEJ1aWxkIERWSSBkb2N1bWVudGF0aW9uIGZvciB0aGUgZnJvbnQgZW5kLCBpbiB0aGUgYnVpbGQKICAgICAgICAgIGRpcmVjdG9yeS4gIFRoaXMgc2hvdWxkIGJlIGRvbmUgdXNpbmcgJyQoVEVYSTJEVkkpJywgd2l0aAogICAgICAgICAgYXBwcm9wcmlhdGUgJy1JJyBhcmd1bWVudHMgcG9pbnRpbmcgdG8gZGlyZWN0b3JpZXMgb2YgaW5jbHVkZWQKICAgICAgICAgIGZpbGVzLgogICAgICdwZGYnCiAgICAgICAgICBCdWlsZCBQREYgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIGZyb250IGVuZCwgaW4gdGhlIGJ1aWxkCiAgICAgICAgICBkaXJlY3RvcnkuICBUaGlzIHNob3VsZCBiZSBkb25lIHVzaW5nICckKFRFWEkyUERGKScsIHdpdGgKICAgICAgICAgIGFwcHJvcHJpYXRlICctSScgYXJndW1lbnRzIHBvaW50aW5nIHRvIGRpcmVjdG9yaWVzIG9mIGluY2x1ZGVkCiAgICAgICAgICBmaWxlcy4KICAgICAnaHRtbCcKICAgICAgICAgIEJ1aWxkIEhUTUwgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIGZyb250IGVuZCwgaW4gdGhlIGJ1aWxkCiAgICAgICAgICBkaXJlY3RvcnkuCiAgICAgJ21hbicKICAgICAgICAgIEJ1aWxkIGdlbmVyYXRlZCBtYW4gcGFnZXMgZm9yIHRoZSBmcm9udCBlbmQgZnJvbSBUZXhpbmZvCiAgICAgICAgICBtYW51YWxzICgqbm90ZSBNYW4gUGFnZSBHZW5lcmF0aW9uOjopLCBpbiB0aGUgYnVpbGQgZGlyZWN0b3J5LgogICAgICAgICAgVGhpcyB0YXJnZXQgaXMgb25seSBjYWxsZWQgaWYgdGhlIG5lY2Vzc2FyeSB0b29scyBhcmUKICAgICAgICAgIGF2YWlsYWJsZSwgYnV0IHNob3VsZCBpZ25vcmUgZXJyb3JzIHNvIGFzIG5vdCB0byBzdG9wIHRoZQogICAgICAgICAgYnVpbGQgaWYgZXJyb3JzIG9jY3VyOyBtYW4gcGFnZXMgYXJlIG9wdGlvbmFsIGFuZCB0aGUgdG9vbHMKICAgICAgICAgIGludm9sdmVkIG1heSBiZSBpbnN0YWxsZWQgaW4gYSBicm9rZW4gd2F5LgogICAgICdpbnN0YWxsLWNvbW1vbicKICAgICAgICAgIEluc3RhbGwgZXZlcnl0aGluZyB0aGF0IGlzIHBhcnQgb2YgdGhlIGZyb250IGVuZCwgYXBhcnQgZnJvbQogICAgICAgICAgdGhlIGNvbXBpbGVyIGV4ZWN1dGFibGVzIGxpc3RlZCBpbiAnY29tcGlsZXJzJyBpbgogICAgICAgICAgJ2NvbmZpZy1sYW5nLmluJy4KICAgICAnaW5zdGFsbC1pbmZvJwogICAgICAgICAgSW5zdGFsbCBpbmZvIGRvY3VtZW50YXRpb24gZm9yIHRoZSBmcm9udCBlbmQsIGlmIGl0IGlzIHByZXNlbnQKICAgICAgICAgIGluIHRoZSBzb3VyY2UgZGlyZWN0b3J5LiAgVGhpcyB0YXJnZXQgc2hvdWxkIGhhdmUgZGVwZW5kZW5jaWVzCiAgICAgICAgICBvbiBpbmZvIGZpbGVzIHRoYXQgc2hvdWxkIGJlIGluc3RhbGxlZC4KICAgICAnaW5zdGFsbC1tYW4nCiAgICAgICAgICBJbnN0YWxsIG1hbiBwYWdlcyBmb3IgdGhlIGZyb250IGVuZC4gIFRoaXMgdGFyZ2V0IHNob3VsZAogICAgICAgICAgaWdub3JlIGVycm9ycy4KICAgICAnc3JjZXh0cmEnCiAgICAgICAgICBDb3BpZXMgaXRzIGRlcGVuZGVuY2llcyBpbnRvIHRoZSBzb3VyY2UgZGlyZWN0b3J5LiAgVGhpcwogICAgICAgICAgZ2VuZXJhbGx5IHNob3VsZCBiZSB1c2VkIGZvciBnZW5lcmF0ZWQgZmlsZXMgc3VjaCBhcyBCaXNvbgogICAgICAgICAgb3V0cHV0IGZpbGVzIHdoaWNoIGFyZSBub3QgcHJlc2VudCBpbiBDVlMsIGJ1dCBzaG91bGQgYmUKICAgICAgICAgIGluY2x1ZGVkIGluIGFueSByZWxlYXNlIHRhcmJhbGxzLiAgVGhpcyB0YXJnZXQgd2lsbCBiZQogICAgICAgICAgZXhlY3V0ZWQgZHVyaW5nIGEgYm9vdHN0cmFwIGlmCiAgICAgICAgICAnLS1lbmFibGUtZ2VuZXJhdGVkLWZpbGVzLWluLXNyY2Rpcicgd2FzIHNwZWNpZmllZCBhcyBhCiAgICAgICAgICAnY29uZmlndXJlJyBvcHRpb24uCiAgICAgJ3NyY2luZm8nCiAgICAgJ3NyY21hbicKICAgICAgICAgIENvcGllcyBpdHMgZGVwZW5kZW5jaWVzIGludG8gdGhlIHNvdXJjZSBkaXJlY3RvcnkuICBUaGVzZQogICAgICAgICAgdGFyZ2V0cyB3aWxsIGJlIGV4ZWN1dGVkIGR1cmluZyBhIGJvb3RzdHJhcCBpZgogICAgICAgICAgJy0tZW5hYmxlLWdlbmVyYXRlZC1maWxlcy1pbi1zcmNkaXInIHdhcyBzcGVjaWZpZWQgYXMgYQogICAgICAgICAgJ2NvbmZpZ3VyZScgb3B0aW9uLgogICAgICd1bmluc3RhbGwnCiAgICAgICAgICBVbmluc3RhbGwgZmlsZXMgaW5zdGFsbGVkIGJ5IGluc3RhbGxpbmcgdGhlIGNvbXBpbGVyLiAgVGhpcyBpcwogICAgICAgICAgY3VycmVudGx5IGRvY3VtZW50ZWQgbm90IHRvIGJlIHN1cHBvcnRlZCwgc28gdGhlIGhvb2sgbmVlZCBub3QKICAgICAgICAgIGRvIGFueXRoaW5nLgogICAgICdtb3N0bHljbGVhbicKICAgICAnY2xlYW4nCiAgICAgJ2Rpc3RjbGVhbicKICAgICAnbWFpbnRhaW5lci1jbGVhbicKICAgICAgICAgIFRoZSBsYW5ndWFnZSBwYXJ0cyBvZiB0aGUgc3RhbmRhcmQgR05VICcqY2xlYW4nIHRhcmdldHMuCiAgICAgICAgICAqTm90ZSBTdGFuZGFyZCBUYXJnZXRzIGZvciBVc2VyczogKHN0YW5kYXJkcylTdGFuZGFyZCBUYXJnZXRzLAogICAgICAgICAgZm9yIGRldGFpbHMgb2YgdGhlIHN0YW5kYXJkIHRhcmdldHMuICBGb3IgR0NDLAogICAgICAgICAgJ21haW50YWluZXItY2xlYW4nIHNob3VsZCBkZWxldGUgYWxsIGdlbmVyYXRlZCBmaWxlcyBpbiB0aGUKICAgICAgICAgIHNvdXJjZSBkaXJlY3RvcnkgdGhhdCBhcmUgbm90IGNoZWNrZWQgaW50byBDVlMsIGJ1dCBzaG91bGQgbm90CiAgICAgICAgICBkZWxldGUgYW55dGhpbmcgY2hlY2tlZCBpbnRvIENWUy4KCidsYW5nLm9wdCcKICAgICBUaGlzIGZpbGUgcmVnaXN0ZXJzIHRoZSBzZXQgb2Ygc3dpdGNoZXMgdGhhdCB0aGUgZnJvbnQgZW5kIGFjY2VwdHMKICAgICBvbiB0aGUgY29tbWFuZCBsaW5lLCBhbmQgdGhlaXIgJy0taGVscCcgdGV4dC4gICpOb3RlIE9wdGlvbnM6Oi4KJ2xhbmctc3BlY3MuaCcKICAgICBUaGlzIGZpbGUgcHJvdmlkZXMgZW50cmllcyBmb3IgJ2RlZmF1bHRfY29tcGlsZXJzJyBpbiAnZ2NjLmMnIHdoaWNoCiAgICAgb3ZlcnJpZGUgdGhlIGRlZmF1bHQgb2YgZ2l2aW5nIGFuIGVycm9yIHRoYXQgYSBjb21waWxlciBmb3IgdGhhdAogICAgIGxhbmd1YWdlIGlzIG5vdCBpbnN0YWxsZWQuCidMQU5HVUFHRS10cmVlLmRlZicKICAgICBUaGlzIGZpbGUsIHdoaWNoIG5lZWQgbm90IGV4aXN0LCBkZWZpbmVzIGFueSBsYW5ndWFnZS1zcGVjaWZpYyB0cmVlCiAgICAgY29kZXMuCgofCkZpbGU6IGdjY2ludC5pbmZvLCAgTm9kZTogRnJvbnQgRW5kIENvbmZpZywgIFByZXY6IEZyb250IEVuZCBEaXJlY3RvcnksICBVcDogRnJvbnQgRW5kCgo2LjMuOC4yIFRoZSBGcm9udCBFbmQgJ2NvbmZpZy1sYW5nLmluJyBGaWxlCi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KCkVhY2ggbGFuZ3VhZ2Ugc3ViZGlyZWN0b3J5IGNvbnRhaW5zIGEgJ2NvbmZpZy1sYW5nLmluJyBmaWxlLiAgSW4KYWRkaXRpb24gdGhlIG1haW4gZGlyZWN0b3J5IGNvbnRhaW5zICdjLWNvbmZpZy1sYW5nLmluJywgd2hpY2ggY29udGFpbnMKbGltaXRlZCBpbmZvcm1hdGlvbiBmb3IgdGhlIEMgbGFuZ3VhZ2UuICBUaGlzIGZpbGUgaXMgYSBzaGVsbCBzY3JpcHQKdGhhdCBtYXkgZGVmaW5lIHNvbWUgdmFyaWFibGVzIGRlc2NyaWJpbmcgdGhlIGxhbmd1YWdlOgoKJ2xhbmd1YWdlJwogICAgIFRoaXMgZGVmaW5pdGlvbiBtdXN0IGJlIHByZXNlbnQsIGFuZCBnaXZlcyB0aGUgbmFtZSBvZiB0aGUgbGFuZ3VhZ2UKICAgICBmb3Igc29tZSBwdXJwb3NlcyBzdWNoIGFzIGFyZ3VtZW50cyB0byAnLS1lbmFibGUtbGFuZ3VhZ2VzJy4KJ2xhbmdfcmVxdWlyZXMnCiAgICAgSWYgZGVmaW5lZCwgdGhpcyB2YXJpYWJsZSBsaXN0cyAoc3BhY2Utc2VwYXJhdGVkKSBsYW5ndWFnZSBmcm9udAogICAgIGVuZHMgb3RoZXIgdGhhbiBDIHRoYXQgdGhpcyBmcm9udCBlbmQgcmVxdWlyZXMgdG8gYmUgZW5hYmxlZCAod2l0aAogICAgIHRoZSBuYW1lcyBnaXZlbiBiZWluZyB0aGVpciAnbGFuZ3VhZ2UnIHNldHRpbmdzKS4gIEZvciBleGFtcGxlLCB0aGUKICAgICBKYXZhIGZyb250IGVuZCBkZXBlbmRzIG9uIHRoZSBDKysgZnJvbnQgZW5kLCBzbyBzZXRzCiAgICAgJ2xhbmdfcmVxdWlyZXM9YysrJy4KJ3N1YmRpcl9yZXF1aXJlcycKICAgICBJZiBkZWZpbmVkLCB0aGlzIHZhcmlhYmxlIGxpc3RzIChzcGFjZS1zZXBhcmF0ZWQpIGZyb250IGVuZAogICAgIGRpcmVjdG9yaWVzIG90aGVyIHRoYW4gQyB0aGF0IHRoaXMgZnJvbnQgZW5kIHJlcXVpcmVzIHRvIGJlCiAgICAgcHJlc2VudC4gIEZvciBleGFtcGxlLCB0aGUgT2JqZWN0aXZlLUMrKyBmcm9udCBlbmQgdXNlcyBzb3VyY2UKICAgICBmaWxlcyBmcm9tIHRoZSBDKysgYW5kIE9iamVjdGl2ZS1DIGZyb250IGVuZHMsIHNvIHNldHMKICAgICAnc3ViZGlyX3JlcXVpcmVzPSJjcCBvYmpjIicuCid0YXJnZXRfbGlicycKICAgICBJZiBkZWZpbmVkLCB0aGlzIHZhcmlhYmxlIGxpc3RzIChzcGFjZS1zZXBhcmF0ZWQpIHRhcmdldHMgaW4gdGhlCiAgICAgdG9wIGxldmVsICdNYWtlZmlsZScgdG8gYnVpbGQgdGhlIHJ1bnRpbWUgbGlicmFyaWVzIGZvciB0aGlzCiAgICAgbGFuZ3VhZ2UsIHN1Y2ggYXMgJ3RhcmdldC1saWJvYmpjJy4KJ2xhbmdfZGlycycKICAgICBJZiBkZWZpbmVkLCB0aGlzIHZhcmlhYmxlIGxpc3RzIChzcGFjZS1zZXBhcmF0ZWQpIHRvcCBsZXZlbAogICAgIGRpcmVjdG9yaWVzIChwYXJhbGxlbCB0byAnZ2NjJyksIGFwYXJ0IGZyb20gdGhlIHJ1bnRpbWUgbGlicmFyaWVzLAogICAgIHRoYXQgc2hvdWxkIG5vdCBiZSBjb25maWd1cmVkIGlmIHRoaXMgZnJvbnQgZW5kIGlzIG5vdCBidWlsdC4KJ2J1aWxkX2J5X2RlZmF1bHQnCiAgICAgSWYgZGVmaW5lZCB0byAnbm8nLCB0aGlzIGxhbmd1YWdlIGZyb250IGVuZCBpcyBub3QgYnVpbHQgdW5sZXNzCiAgICAgZW5hYmxlZCBpbiBhICctLWVuYWJsZS1sYW5ndWFnZXMnIGFyZ3VtZW50LiAgT3RoZXJ3aXNlLCBmcm9udCBlbmRzCiAgICAgYXJlIGJ1aWx0IGJ5IGRlZmF1bHQsIHN1YmplY3QgdG8gYW55IHNwZWNpYWwgbG9naWMgaW4KICAgICAnY29uZmlndXJlLmFjJyAoYXMgaXMgcHJlc2VudCB0byBkaXNhYmxlIHRoZSBBZGEgZnJvbnQgZW5kIGlmIHRoZQogICAgIEFkYSBjb21waWxlciBpcyBub3QgYWxyZWFkeSBpbnN0YWxsZWQpLgonYm9vdF9sYW5ndWFnZScKICAgICBJZiBkZWZpbmVkIHRvICd5ZXMnLCB0aGlzIGZyb250IGVuZCBpcyBidWlsdCBpbiBzdGFnZSAxIG9mIHRoZQogICAgIGJvb3RzdHJhcC4gIFRoaXMgaXMgb25seSByZWxldmFudCB0byBmcm9udCBlbmRzIHdyaXR0ZW4gaW4gdGhlaXIKICAgICBvd24gbGFuZ3VhZ2VzLgonY29tcGlsZXJzJwogICAgIElmIGRlZmluZWQsIGEgc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgY29tcGlsZXIgZXhlY3V0YWJsZXMgdGhhdAogICAgIHdpbGwgYmUgcnVuIGJ5IHRoZSBkcml2ZXIuICBUaGUgbmFtZXMgaGVyZSB3aWxsIGVhY2ggZW5kIHdpdGgKICAgICAnXCQoZXhlZXh0KScuCidvdXRwdXRzJwogICAgIElmIGRlZmluZWQsIGEgc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgZmlsZXMgdGhhdCBzaG91bGQgYmUKICAgICBnZW5lcmF0ZWQgYnkgJ2NvbmZpZ3VyZScgc3Vic3RpdHV0aW5nIHZhbHVlcyBpbiB0aGVtLiAgVGhpcwogICAgIG1lY2hhbmlzbSBjYW4gYmUgdXNlZCB0byBjcmVhdGUgYSBmaWxlICdMQU5HVUFHRS9NYWtlZmlsZScgZnJvbQogICAgICdMQU5HVUFHRS9NYWtlZmlsZS5pbicsIGJ1dCB0aGlzIGlzIGRlcHJlY2F0ZWQsIGJ1aWxkaW5nIGV2ZXJ5dGhpbmcKICAgICBmcm9tIHRoZSBzaW5nbGUgJ2djYy9NYWtlZmlsZScgaXMgcHJlZmVycmVkLgonZ3RmaWxlcycKICAgICBJZiBkZWZpbmVkLCBhIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIGZpbGVzIHRoYXQgc2hvdWxkIGJlIHNjYW5uZWQKICAgICBieSBnZW5ndHlwZS5jIHRvIGdlbmVyYXRlIHRoZSBnYXJiYWdlIGNvbGxlY3Rpb24gdGFibGVzIGFuZAogICAgIHJvdXRpbmVzIGZvciB0aGlzIGxhbmd1YWdlLiAgVGhpcyBleGNsdWRlcyB0aGUgZmlsZXMgdGhhdCBhcmUKICAgICBjb21tb24gdG8gYWxsIGZyb250IGVuZHMuICAqTm90ZSBUeXBlIEluZm9ybWF0aW9uOjouCgofCkZpbGU6IGdjY2ludC5pbmZvLCAgTm9kZTogQmFjayBFbmQsICBQcmV2OiBGcm9udCBFbmQsICBVcDogZ2NjIERpcmVjdG9yeQoKNi4zLjkgQW5hdG9teSBvZiBhIFRhcmdldCBCYWNrIEVuZAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpBIGJhY2sgZW5kIGZvciBhIHRhcmdldCBhcmNoaXRlY3R1cmUgaW4gR0NDIGhhcyB0aGUgZm9sbG93aW5nIHBhcnRzOgoKICAgKiBBIGRpcmVjdG9yeSAnTUFDSElORScgdW5kZXIgJ2djYy9jb25maWcnLCBjb250YWluaW5nIGEgbWFjaGluZQogICAgIGRlc2NyaXB0aW9uICdNQUNISU5FLm1kJyBmaWxlICgqbm90ZSBNYWNoaW5lIERlc2NyaXB0aW9uczogTWFjaGluZQogICAgIERlc2MuKSwgaGVhZGVyIGZpbGVzICdNQUNISU5FLmgnIGFuZCAnTUFDSElORS1wcm90b3MuaCcgYW5kIGEKICAgICBzb3VyY2UgZmlsZSAnTUFDSElORS5jJyAoKm5vdGUgVGFyZ2V0IERlc2NyaXB0aW9uIE1hY3JvcyBhbmQKICAgICBGdW5jdGlvbnM6IFRhcmdldCBNYWNyb3MuKSwgcG9zc2libHkgYSB0YXJnZXQgTWFrZWZpbGUgZnJhZ21lbnQKICAgICAndC1NQUNISU5FJyAoKm5vdGUgVGhlIFRhcmdldCBNYWtlZmlsZSBGcmFnbWVudDogVGFyZ2V0IEZyYWdtZW50LiksCiAgICAgYW5kIG1heWJlIHNvbWUgb3RoZXIgZmlsZXMuICBUaGUgbmFtZXMgb2YgdGhlc2UgZmlsZXMgbWF5IGJlCiAgICAgY2hhbmdlZCBmcm9tIHRoZSBkZWZhdWx0cyBnaXZlbiBieSBleHBsaWNpdCBzcGVjaWZpY2F0aW9ucyBpbgogICAgICdjb25maWcuZ2NjJy4KICAgKiBJZiBuZWNlc3NhcnksIGEgZmlsZSAnTUFDSElORS1tb2Rlcy5kZWYnIGluIHRoZSAnTUFDSElORScKICAgICBkaXJlY3RvcnksIGNvbnRhaW5pbmcgYWRkaXRpb25hbCBtYWNoaW5lIG1vZGVzIHRvIHJlcHJlc2VudAogICAgIGNvbmRpdGlvbiBjb2Rlcy4gICpOb3RlIENvbmRpdGlvbiBDb2RlOjosIGZvciBmdXJ0aGVyIGRldGFpbHMuCiAgICogQW4gb3B0aW9uYWwgJ01BQ0hJTkUub3B0JyBmaWxlIGluIHRoZSAnTUFDSElORScgZGlyZWN0b3J5LAogICAgIGNvbnRhaW5pbmcgYSBsaXN0IG9mIHRhcmdldC1zcGVjaWZpYyBvcHRpb25zLiAgWW91IGNhbiBhbHNvIGFkZAogICAgIG90aGVyIG9wdGlvbiBmaWxlcyB1c2luZyB0aGUgJ2V4dHJhX29wdGlvbnMnIHZhcmlhYmxlIGluCiAgICAgJ2NvbmZpZy5nY2MnLiAgKk5vdGUgT3B0aW9uczo6LgogICAqIEVudHJpZXMgaW4gJ2NvbmZpZy5nY2MnICgqbm90ZSBUaGUgJ2NvbmZpZy5nY2MnIEZpbGU6IFN5c3RlbQogICAgIENvbmZpZy4pIGZvciB0aGUgc3lzdGVtcyB3aXRoIHRoaXMgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KICAgKiBEb2N1bWVudGF0aW9uIGluICdnY2MvZG9jL2ludm9rZS50ZXhpJyBmb3IgYW55IGNvbW1hbmQtbGluZSBvcHRpb25zCiAgICAgc3VwcG9ydGVkIGJ5IHRoaXMgdGFyZ2V0ICgqbm90ZSBSdW4tdGltZSBUYXJnZXQgU3BlY2lmaWNhdGlvbjoKICAgICBSdW4tdGltZSBUYXJnZXQuKS4gIFRoaXMgbWVhbnMgYm90aCBlbnRyaWVzIGluIHRoZSBzdW1tYXJ5IHRhYmxlIG9mCiAgICAgb3B0aW9ucyBhbmQgZGV0YWlscyBvZiB0aGUgaW5kaXZpZHVhbCBvcHRpb25zLgogICAqIERvY3VtZW50YXRpb24gaW4gJ2djYy9kb2MvZXh0ZW5kLnRleGknIGZvciBhbnkgdGFyZ2V0LXNwZWNpZmljCiAgICAgYXR0cmlidXRlcyBzdXBwb3J0ZWQgKCpub3RlIERlZmluaW5nIHRhcmdldC1zcGVjaWZpYyB1c2VzIG9mCiAgICAgJ19fYXR0cmlidXRlX18nOiBUYXJnZXQgQXR0cmlidXRlcy4pLCBpbmNsdWRpbmcgd2hlcmUgdGhlIHNhbWUKICAgICBhdHRyaWJ1dGUgaXMgYWxyZWFkeSBzdXBwb3J0ZWQgb24gc29tZSB0YXJnZXRzLCB3aGljaCBhcmUKICAgICBlbnVtZXJhdGVkIGluIHRoZSBtYW51YWwuCiAgICogRG9jdW1lbnRhdGlvbiBpbiAnZ2NjL2RvYy9leHRlbmQudGV4aScgZm9yIGFueSB0YXJnZXQtc3BlY2lmaWMKICAgICBwcmFnbWFzIHN1cHBvcnRlZC4KICAgKiBEb2N1bWVudGF0aW9uIGluICdnY2MvZG9jL2V4dGVuZC50ZXhpJyBvZiBhbnkgdGFyZ2V0LXNwZWNpZmljCiAgICAgYnVpbHQtaW4gZnVuY3Rpb25zIHN1cHBvcnRlZC4KICAgKiBEb2N1bWVudGF0aW9uIGluICdnY2MvZG9jL2V4dGVuZC50ZXhpJyBvZiBhbnkgdGFyZ2V0LXNwZWNpZmljCiAgICAgZm9ybWF0IGNoZWNraW5nIHN0eWxlcyBzdXBwb3J0ZWQuCiAgICogRG9jdW1lbnRhdGlvbiBpbiAnZ2NjL2RvYy9tZC50ZXhpJyBvZiBhbnkgdGFyZ2V0LXNwZWNpZmljCiAgICAgY29uc3RyYWludCBsZXR0ZXJzICgqbm90ZSBDb25zdHJhaW50cyBmb3IgUGFydGljdWxhciBNYWNoaW5lczoKICAgICBNYWNoaW5lIENvbnN0cmFpbnRzLikuCiAgICogQSBub3RlIGluICdnY2MvZG9jL2NvbnRyaWIudGV4aScgdW5kZXIgdGhlIHBlcnNvbiBvciBwZW9wbGUgd2hvCiAgICAgY29udHJpYnV0ZWQgdGhlIHRhcmdldCBzdXBwb3J0LgogICAqIEVudHJpZXMgaW4gJ2djYy9kb2MvaW5zdGFsbC50ZXhpJyBmb3IgYWxsIHRhcmdldCB0cmlwbGV0cyBzdXBwb3J0ZWQKICAgICB3aXRoIHRoaXMgdGFyZ2V0IGFyY2hpdGVjdHVyZSwgZ2l2aW5nIGRldGFpbHMgb2YgYW55IHNwZWNpYWwgbm90ZXMKICAgICBhYm91dCBpbnN0YWxsYXRpb24gZm9yIHRoaXMgdGFyZ2V0LCBvciBzYXlpbmcgdGhhdCB0aGVyZSBhcmUgbm8KICAgICBzcGVjaWFsIG5vdGVzIGlmIHRoZXJlIGFyZSBub25lLgogICAqIFBvc3NpYmx5IG90aGVyIHN1cHBvcnQgb3V0c2lkZSB0aGUgJ2djYycgZGlyZWN0b3J5IGZvciBydW50aW1lCiAgICAgbGlicmFyaWVzLiAgRklYTUU6IHJlZmVyZW5jZSBkb2NzIGZvciB0aGlzLiAgVGhlIGxpYnN0ZGMrKyBwb3J0aW5nCiAgICAgbWFudWFsIG5lZWRzIHRvIGJlIGluc3RhbGxlZCBhcyBpbmZvIGZvciB0aGlzIHRvIHdvcmssIG9yIHRvIGJlIGEKICAgICBjaGFwdGVyIG9mIHRoaXMgbWFudWFsLgoKIElmIHRoZSBiYWNrIGVuZCBpcyBhZGRlZCB0byB0aGUgb2ZmaWNpYWwgR0NDIHNvdXJjZSByZXBvc2l0b3J5LCB0aGUKZm9sbG93aW5nIGFyZSBhbHNvIG5lY2Vzc2FyeToKCiAgICogQW4gZW50cnkgZm9yIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIGluICdyZWFkaW5ncy5odG1sJyBvbiB0aGUgR0NDCiAgICAgd2ViIHNpdGUsIHdpdGggYW55IHJlbGV2YW50IGxpbmtzLgogICAqIERldGFpbHMgb2YgdGhlIHByb3BlcnRpZXMgb2YgdGhlIGJhY2sgZW5kIGFuZCB0YXJnZXQgYXJjaGl0ZWN0dXJlCiAgICAgaW4gJ2JhY2tlbmRzLmh0bWwnIG9uIHRoZSBHQ0Mgd2ViIHNpdGUuCiAgICogQSBuZXdzIGl0ZW0gYWJvdXQgdGhlIGNvbnRyaWJ1dGlvbiBvZiBzdXBwb3J0IGZvciB0aGF0IHRhcmdldAogICAgIGFyY2hpdGVjdHVyZSwgaW4gJ2luZGV4Lmh0bWwnIG9uIHRoZSBHQ0Mgd2ViIHNpdGUuCiAgICogTm9ybWFsbHksIG9uZSBvciBtb3JlIG1haW50YWluZXJzIG9mIHRoYXQgdGFyZ2V0IGxpc3RlZCBpbgogICAgICdNQUlOVEFJTkVSUycuICBTb21lIGV4aXN0aW5nIGFyY2hpdGVjdHVyZXMgbWF5IGJlIHVubWFpbnRhaW5lZCwKICAgICBidXQgaXQgd291bGQgYmUgdW51c3VhbCB0byBhZGQgc3VwcG9ydCBmb3IgYSB0YXJnZXQgdGhhdCBkb2VzIG5vdAogICAgIGhhdmUgYSBtYWludGFpbmVyIHdoZW4gc3VwcG9ydCBpcyBhZGRlZC4KCh8KRmlsZTogZ2NjaW50LmluZm8sICBOb2RlOiBUZXN0c3VpdGVzLCAgUHJldjogZ2NjIERpcmVjdG9yeSwgIFVwOiBTb3VyY2UgVHJlZQoKNi40IFRlc3RzdWl0ZXMKPT09PT09PT09PT09PT0KCkdDQyBjb250YWlucyBzZXZlcmFsIHRlc3RzdWl0ZXMgdG8gaGVscCBtYWludGFpbiBjb21waWxlciBxdWFsaXR5LiAgTW9zdApvZiB0aGUgcnVudGltZSBsaWJyYXJpZXMgYW5kIGxhbmd1YWdlIGZyb250IGVuZHMgaW4gR0NDIGhhdmUgdGVzdHN1aXRlcy4KQ3VycmVudGx5IG9ubHkgdGhlIEMgbGFuZ3VhZ2UgdGVzdHN1aXRlcyBhcmUgZG9jdW1lbnRlZCBoZXJlOyBGSVhNRToKZG9jdW1lbnQgdGhlIG90aGVycy4KCiogTWVudToKCiogVGVzdCBJZGlvbXM6OiAgICAgSWRpb21zIHVzZWQgaW4gdGVzdHN1aXRlIGNvZGUuCiogVGVzdCBEaXJlY3RpdmVzOjogRGlyZWN0aXZlcyB1c2VkIHdpdGhpbiBEZWphR251IHRlc3RzLgoqIEFkYSBUZXN0czo6ICAgICAgIFRoZSBBZGEgbGFuZ3VhZ2UgdGVzdHN1aXRlcy4KKiBDIFRlc3RzOjogICAgICAgICBUaGUgQyBsYW5ndWFnZSB0ZXN0c3VpdGVzLgoqIGxpYmdjaiBUZXN0czo6ICAgIFRoZSBKYXZhIGxpYnJhcnkgdGVzdHN1aXRlcy4KKiBnY292IFRlc3Rpbmc6OiAgICBTdXBwb3J0IGZvciB0ZXN0aW5nIGdjb3YuCiogcHJvZm9wdCBUZXN0aW5nOjogU3VwcG9ydCBmb3IgdGVzdGluZyBwcm9maWxlLWRpcmVjdGVkIG9wdGltaXphdGlvbnMuCiogY29tcGF0IFRlc3Rpbmc6OiAgU3VwcG9ydCBmb3IgdGVzdGluZyBiaW5hcnkgY29tcGF0aWJpbGl0eS4KKiBUb3J0dXJlIFRlc3RzOjogICBTdXBwb3J0IGZvciB0b3J0dXJlIHRlc3RpbmcgdXNpbmcgbXVsdGlwbGUgb3B0aW9ucy4KCh8KRmlsZTogZ2NjaW50LmluZm8sICBOb2RlOiBUZXN0IElkaW9tcywgIE5leHQ6IFRlc3QgRGlyZWN0aXZlcywgIFVwOiBUZXN0c3VpdGVzCgo2LjQuMSBJZGlvbXMgVXNlZCBpbiBUZXN0c3VpdGUgQ29kZQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKSW4gZ2VuZXJhbCwgQyB0ZXN0Y2FzZXMgaGF2ZSBhIHRyYWlsaW5nICctTi5jJywgc3RhcnRpbmcgd2l0aCAnLTEuYycsIGluCmNhc2Ugb3RoZXIgdGVzdGNhc2VzIHdpdGggc2ltaWxhciBuYW1lcyBhcmUgYWRkZWQgbGF0ZXIuICBJZiB0aGUgdGVzdCBpcwphIHRlc3Qgb2Ygc29tZSB3ZWxsLWRlZmluZWQgZmVhdHVyZSwgaXQgc2hvdWxkIGhhdmUgYSBuYW1lIHJlZmVycmluZyB0bwp0aGF0IGZlYXR1cmUgc3VjaCBhcyAnRkVBVFVSRS0xLmMnLiAgSWYgaXQgZG9lcyBub3QgdGVzdCBhIHdlbGwtZGVmaW5lZApmZWF0dXJlIGJ1dCBqdXN0IGhhcHBlbnMgdG8gZXhlcmNpc2UgYSBidWcgc29tZXdoZXJlIGluIHRoZSBjb21waWxlciwKYW5kIGEgYnVnIHJlcG9ydCBoYXMgYmVlbiBmaWxlZCBmb3IgdGhpcyBidWcgaW4gdGhlIEdDQyBidWcgZGF0YWJhc2UsCidwckJVRy1OVU1CRVItMS5jJyBpcyB0aGUgYXBwcm9wcmlhdGUgZm9ybSBvZiBuYW1lLiAgT3RoZXJ3aXNlIChmb3IKbWlzY2VsbGFuZW91cyBidWdzIG5vdCBmaWxlZCBpbiB0aGUgR0NDIGJ1ZyBkYXRhYmFzZSksIGFuZCBwcmV2aW91c2x5Cm1vcmUgZ2VuZXJhbGx5LCB0ZXN0IGNhc2VzIGFyZSBuYW1lZCBhZnRlciB0aGUgZGF0ZSBvbiB3aGljaCB0aGV5IHdlcmUKYWRkZWQuICBUaGlzIGFsbG93cyBwZW9wbGUgdG8gdGVsbCBhdCBhIGdsYW5jZSB3aGV0aGVyIGEgdGVzdCBmYWlsdXJlIGlzCmJlY2F1c2Ugb2YgYSByZWNlbnRseSBmb3VuZCBidWcgdGhhdCBoYXMgbm90IHlldCBiZWVuIGZpeGVkLCBvciB3aGV0aGVyCml0IG1heSBiZSBhIHJlZ3Jlc3Npb24sIGJ1dCBkb2VzIG5vdCBnaXZlIGFueSBvdGhlciBpbmZvcm1hdGlvbiBhYm91dAp0aGUgYnVnIG9yIHdoZXJlIGRpc2N1c3Npb24gb2YgaXQgbWF5IGJlIGZvdW5kLiAgU29tZSBvdGhlciBsYW5ndWFnZQp0ZXN0c3VpdGVzIGZvbGxvdyBzaW1pbGFyIGNvbnZlbnRpb25zLgoKIEluIHRoZSAnZ2NjLmRnJyB0ZXN0c3VpdGUsIGl0IGlzIG9mdGVuIG5lY2Vzc2FyeSB0byB0ZXN0IHRoYXQgYW4gZXJyb3IKaXMgaW5kZWVkIGEgaGFyZCBlcnJvciBhbmQgbm90IGp1c3QgYSB3YXJuaW5nLS1mb3IgZXhhbXBsZSwgd2hlcmUgaXQgaXMKYSBjb25zdHJhaW50IHZpb2xhdGlvbiBpbiB0aGUgQyBzdGFuZGFyZCwgd2hpY2ggbXVzdCBiZWNvbWUgYW4gZXJyb3IKd2l0aCAnLXBlZGFudGljLWVycm9ycycuICBUaGUgZm9sbG93aW5nIGlkaW9tLCB3aGVyZSB0aGUgZmlyc3QgbGluZQpzaG93biBpcyBsaW5lIExJTkUgb2YgdGhlIGZpbGUgYW5kIHRoZSBsaW5lIHRoYXQgZ2VuZXJhdGVzIHRoZSBlcnJvciwgaXMKdXNlZCBmb3IgdGhpczoKCiAgICAgLyogeyBkZy1ib2d1cyAid2FybmluZyIgIndhcm5pbmcgaW4gcGxhY2Ugb2YgZXJyb3IiIH0gKi8KICAgICAvKiB7IGRnLWVycm9yICJSRUdFWFAiICJNRVNTQUdFIiB7IHRhcmdldCAqLSotKiB9IExJTkUgfSAqLwoKIEl0IG1heSBiZSBuZWNlc3NhcnkgdG8gY2hlY2sgdGhhdCBhbiBleHByZXNzaW9uIGlzIGFuIGludGVnZXIgY29uc3RhbnQKZXhwcmVzc2lvbiBhbmQgaGFzIGEgY2VydGFpbiB2YWx1ZS4gIFRvIGNoZWNrIHRoYXQgJ0UnIGhhcyB2YWx1ZSAnVicsIGFuCmlkaW9tIHNpbWlsYXIgdG8gdGhlIGZvbGxvd2luZyBpcyB1c2VkOgoKICAgICBjaGFyIHhbKChFKSA9PSAoVikgPyAxIDogLTEpXTsKCiBJbiAnZ2NjLmRnJyB0ZXN0cywgJ19fdHlwZW9mX18nIGlzIHNvbWV0aW1lcyB1c2VkIHRvIG1ha2UgYXNzZXJ0aW9ucwphYm91dCB0aGUgdHlwZXMgb2YgZXhwcmVzc2lvbnMuICBTZWUsIGZvciBleGFtcGxlLAonZ2NjLmRnL2M5OS1jb25kZXhwci0xLmMnLiAgVGhlIG1vcmUgc3VidGxlIHVzZXMgZGVwZW5kIG9uIHRoZSBleGFjdApydWxlcyBmb3IgdGhlIHR5cGVzIG9mIGNvbmRpdGlvbmFsIGV4cHJlc3Npb25zIGluIHRoZSBDIHN0YW5kYXJkOyBzZWUsCmZvciBleGFtcGxlLCAnZ2NjLmRnL2M5OS1pbnRjb25zdC0xLmMnLgoKIEl0IGlzIHVzZWZ1bCB0byBiZSBhYmxlIHRvIHRlc3QgdGhhdCBvcHRpbWl6YXRpb25zIGFyZSBiZWluZyBtYWRlCnByb3Blcmx5LiAgVGhpcyBjYW5ub3QgYmUgZG9uZSBpbiBhbGwgY2FzZXMsIGJ1dCBpdCBjYW4gYmUgZG9uZSB3aGVyZQp0aGUgb3B0aW1pemF0aW9uIHdpbGwgbGVhZCB0byBjb2RlIGJlaW5nIG9wdGltaXplZCBhd2F5IChmb3IgZXhhbXBsZSwKd2hlcmUgZmxvdyBhbmFseXNpcyBvciBhbGlhcyBhbmFseXNpcyBzaG91bGQgc2hvdyB0aGF0IGNlcnRhaW4gY29kZQpjYW5ub3QgYmUgY2FsbGVkKSBvciB0byBmdW5jdGlvbnMgbm90IGJlaW5nIGNhbGxlZCBiZWNhdXNlIHRoZXkgaGF2ZQpiZWVuIGV4cGFuZGVkIGFzIGJ1aWx0LWluIGZ1bmN0aW9ucy4gIFN1Y2ggdGVzdHMgZ28gaW4KJ2djYy5jLXRvcnR1cmUvZXhlY3V0ZScuICBXaGVyZSBjb2RlIHNob3VsZCBiZSBvcHRpbWl6ZWQgYXdheSwgYSBjYWxsIHRvCmEgbm9uZXhpc3RlbnQgZnVuY3Rpb24gc3VjaCBhcyAnbGlua19mYWlsdXJlICgpJyBtYXkgYmUgaW5zZXJ0ZWQ7IGEKZGVmaW5pdGlvbgoKICAgICAjaWZuZGVmIF9fT1BUSU1JWkVfXwogICAgIHZvaWQKICAgICBsaW5rX2ZhaWx1cmUgKHZvaWQpCiAgICAgewogICAgICAgYWJvcnQgKCk7CiAgICAgfQogICAgICNlbmRpZgoKd2lsbCBhbHNvIGJlIG5lZWRlZCBzbyB0aGF0IGxpbmtpbmcgc3RpbGwgc3VjY2VlZHMgd2hlbiB0aGUgdGVzdCBpcyBydW4Kd2l0aG91dCBvcHRpbWl6YXRpb24uICBXaGVuIGFsbCBjYWxscyB0byBhIGJ1aWx0LWluIGZ1bmN0aW9uIHNob3VsZCBoYXZlCmJlZW4gb3B0aW1pemVkIGFuZCBubyBjYWxscyB0byB0aGUgbm9uLWJ1aWx0LWluIHZlcnNpb24gb2YgdGhlIGZ1bmN0aW9uCnNob3VsZCByZW1haW4sIHRoYXQgZnVuY3Rpb24gbWF5IGJlIGRlZmluZWQgYXMgJ3N0YXRpYycgdG8gY2FsbCAnYWJvcnQKKCknIChhbHRob3VnaCByZWRlY2xhcmluZyBhIGZ1bmN0aW9uIGFzIHN0YXRpYyBtYXkgbm90IHdvcmsgb24gYWxsCnRhcmdldHMpLgoKIEFsbCB0ZXN0Y2FzZXMgbXVzdCBiZSBwb3J0YWJsZS4gIFRhcmdldC1zcGVjaWZpYyB0ZXN0Y2FzZXMgbXVzdCBoYXZlCmFwcHJvcHJpYXRlIGNvZGUgdG8gYXZvaWQgY2F1c2luZyBmYWlsdXJlcyBvbiB1bnN1cHBvcnRlZCBzeXN0ZW1zOwp1bmZvcnR1bmF0ZWx5LCB0aGUgbWVjaGFuaXNtcyBmb3IgdGhpcyBkaWZmZXIgYnkgZGlyZWN0b3J5LgoKIEZJWE1FOiBkaXNjdXNzIG5vbi1DIHRlc3RzdWl0ZXMgaGVyZS4KCh8KRmlsZTogZ2NjaW50LmluZm8sICBOb2RlOiBUZXN0IERpcmVjdGl2ZXMsICBOZXh0OiBBZGEgVGVzdHMsICBQcmV2OiBUZXN0IElkaW9tcywgIFVwOiBUZXN0c3VpdGVzCgo2LjQuMiBEaXJlY3RpdmVzIHVzZWQgd2l0aGluIERlamFHbnUgdGVzdHMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpUZXN0IGRpcmVjdGl2ZXMgYXBwZWFyIHdpdGhpbiBjb21tZW50cyBpbiBhIHRlc3Qgc291cmNlIGZpbGUgYW5kIGJlZ2luCndpdGggJ2RnLScuICBTb21lIG9mIHRoZXNlIGFyZSBkZWZpbmVkIHdpdGhpbiBEZWphR251IGFuZCBvdGhlcnMgYXJlCmxvY2FsIHRvIHRoZSBHQ0MgdGVzdHN1aXRlLgoKIFRoZSBvcmRlciBpbiB3aGljaCB0ZXN0IGRpcmVjdGl2ZXMgYXBwZWFyIGluIGEgdGVzdCBjYW4gYmUgaW1wb3J0YW50OgpkaXJlY3RpdmVzIGxvY2FsIHRvIEdDQyBzb21ldGltZXMgb3ZlcnJpZGUgaW5mb3JtYXRpb24gdXNlZCBieSB0aGUKRGVqYUdudSBkaXJlY3RpdmVzLCB3aGljaCBrbm93IG5vdGhpbmcgYWJvdXQgdGhlIEdDQyBkaXJlY3RpdmVzLCBzbyB0aGUKRGVqYUdudSBkaXJlY3RpdmVzIG11c3QgcHJlY2VkZSBHQ0MgZGlyZWN0aXZlcy4KCiBTZXZlcmFsIHRlc3QgZGlyZWN0aXZlcyBpbmNsdWRlIHNlbGVjdG9ycyB3aGljaCBhcmUgdXN1YWxseSBwcmVjZWRlZCBieQp0aGUga2V5d29yZCAndGFyZ2V0JyBvciAneGZhaWwnLiAgQSBzZWxlY3RvciBpczogb25lIG9yIG1vcmUgdGFyZ2V0CnRyaXBsZXRzLCBwb3NzaWJseSBpbmNsdWRpbmcgd2lsZGNhcmQgY2hhcmFjdGVyczsgYSBzaW5nbGUKZWZmZWN0aXZlLXRhcmdldCBrZXl3b3JkOyBvciBhIGxvZ2ljYWwgZXhwcmVzc2lvbi4gIERlcGVuZGluZyBvbiB0aGUKY29udGV4dCwgdGhlIHNlbGVjdG9yIHNwZWNpZmllcyB3aGV0aGVyIGEgdGVzdCBpcyBza2lwcGVkIGFuZCByZXBvcnRlZAphcyB1bnN1cHBvcnRlZCBvciBpcyBleHBlY3RlZCB0byBmYWlsLiAgVXNlICcqLSotKicgdG8gbWF0Y2ggYW55IHRhcmdldC4KRWZmZWN0aXZlLXRhcmdldCBrZXl3b3JkcyBhcmUgZGVmaW5lZCBpbiAndGFyZ2V0LXN1cHBvcnRzLmV4cCcgaW4gdGhlCkdDQyB0ZXN0c3VpdGUuCgogQSBzZWxlY3RvciBleHByZXNzaW9uIGFwcGVhcnMgd2l0aGluIGN1cmx5IGJyYWNlcyBhbmQgdXNlcyBhIHNpbmdsZQpsb2dpY2FsIG9wZXJhdG9yOiBvbmUgb2YgJyEnLCAnJiYnLCBvciAnfHwnLiAgQW4gb3BlcmFuZCBpcyBhbm90aGVyCnNlbGVjdG9yIGV4cHJlc3Npb24sIGFuIGVmZmVjdGl2ZS10YXJnZXQga2V5d29yZCwgYSBzaW5nbGUgdGFyZ2V0CnRyaXBsZXQsIG9yIGEgbGlzdCBvZiB0YXJnZXQgdHJpcGxldHMgd2l0aGluIHF1b3RlcyBvciBjdXJseSBicmFjZXMuCkZvciBleGFtcGxlOgoKICAgICB7IHRhcmdldCB7ICEgImhwcGEqLSotKiBpYTY0Ki0qLSoiIH0gfQogICAgIHsgdGFyZ2V0IHsgcG93ZXJwYyotKi0qICYmIGxwNjQgfSB9CiAgICAgeyB4ZmFpbCB7IGxwNjQgfHwgdmVjdF9ub19hbGlnbiB9IH0KCid7IGRnLWRvIERPLVdIQVQtS0VZV09SRCBbeyB0YXJnZXQveGZhaWwgU0VMRUNUT1IgfV0gfScKICAgICBETy1XSEFULUtFWVdPUkQgc3BlY2lmaWVzIGhvdyB0aGUgdGVzdCBpcyBjb21waWxlZCBhbmQgd2hldGhlciBpdAogICAgIGlzIGV4ZWN1dGVkLiAgSXQgaXMgb25lIG9mOgoKICAgICAncHJlcHJvY2VzcycKICAgICAgICAgIENvbXBpbGUgd2l0aCAnLUUnIHRvIHJ1biBvbmx5IHRoZSBwcmVwcm9jZXNzb3IuCiAgICAgJ2NvbXBpbGUnCiAgICAgICAgICBDb21waWxlIHdpdGggJy1TJyB0byBwcm9kdWNlIGFuIGFzc2VtYmx5IGNvZGUgZmlsZS4KICAgICAnYXNzZW1ibGUnCiAgICAgICAgICBDb21waWxlIHdpdGggJy1jJyB0byBwcm9kdWNlIGEgcmVsb2NhdGFibGUgb2JqZWN0IGZpbGUuCiAgICAgJ2xpbmsnCiAgICAgICAgICBDb21waWxlLCBhc3NlbWJsZSwgYW5kIGxpbmsgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlIGZpbGUuCiAgICAgJ3J1bicKICAgICAgICAgIFByb2R1Y2UgYW5kIHJ1biBhbiBleGVjdXRhYmxlIGZpbGUsIHdoaWNoIGlzIGV4cGVjdGVkIHRvCiAgICAgICAgICByZXR1cm4gYW4gZXhpdCBjb2RlIG9mIDAuCgogICAgIFRoZSBkZWZhdWx0IGlzICdjb21waWxlJy4gIFRoYXQgY2FuIGJlIG92ZXJyaWRkZW4gZm9yIGEgc2V0IG9mCiAgICAgdGVzdHMgYnkgcmVkZWZpbmluZyAnZGctZG8td2hhdC1kZWZhdWx0JyB3aXRoaW4gdGhlICcuZXhwJyBmaWxlIGZvcgogICAgIHRob3NlIHRlc3RzLgoKICAgICBJZiB0aGUgZGlyZWN0aXZlIGluY2x1ZGVzIHRoZSBvcHRpb25hbCAneyB0YXJnZXQgU0VMRUNUT1IgfScgdGhlbgogICAgIHRoZSB0ZXN0IGlzIHNraXBwZWQgdW5sZXNzIHRoZSB0YXJnZXQgc3lzdGVtIGlzIGluY2x1ZGVkIGluIHRoZQogICAgIGxpc3Qgb2YgdGFyZ2V0IHRyaXBsZXRzIG9yIG1hdGNoZXMgdGhlIGVmZmVjdGl2ZS10YXJnZXQga2V5d29yZC4KCiAgICAgSWYgJ2RvLXdoYXQta2V5d29yZCcgaXMgJ3J1bicgYW5kIHRoZSBkaXJlY3RpdmUgaW5jbHVkZXMgdGhlCiAgICAgb3B0aW9uYWwgJ3sgeGZhaWwgU0VMRUNUT1IgfScgYW5kIHRoZSBzZWxlY3RvciBpcyBtZXQgdGhlbiB0aGUgdGVzdAogICAgIGlzIGV4cGVjdGVkIHRvIGZhaWwuICBUaGUgJ3hmYWlsJyBjbGF1c2UgaXMgaWdub3JlZCBmb3Igb3RoZXIKICAgICB2YWx1ZXMgb2YgJ2RvLXdoYXQta2V5d29yZCc7IHRob3NlIHRlc3RzIGNhbiB1c2UgZGlyZWN0aXZlCiAgICAgJ2RnLXhmYWlsLWlmJy4KCid7IGRnLW9wdGlvbnMgT1BUSU9OUyBbeyB0YXJnZXQgU0VMRUNUT1IgfV0gfScKICAgICBUaGlzIERlamFHbnUgZGlyZWN0aXZlIHByb3ZpZGVzIGEgbGlzdCBvZiBjb21waWxlciBvcHRpb25zLCB0byBiZQogICAgIHVzZWQgaWYgdGhlIHRhcmdldCBzeXN0ZW0gbWF0Y2hlcyBTRUxFQ1RPUiwgdGhhdCByZXBsYWNlIHRoZQogICAgIGRlZmF1bHQgb3B0aW9ucyB1c2VkIGZvciB0aGlzIHNldCBvZiB0ZXN0cy4KCid7IGRnLWFkZC1vcHRpb25zIEZFQVRVUkUgLi4uIH0nCiAgICAgQWRkIGFueSBjb21waWxlciBvcHRpb25zIHRoYXQgYXJlIG5lZWRlZCB0byBhY2Nlc3MgY2VydGFpbgogICAgIGZlYXR1cmVzLiAgVGhpcyBkaXJlY3RpdmUgZG9lcyBub3RoaW5nIG9uIHRhcmdldHMgdGhhdCBlbmFibGUgdGhlCiAgICAgZmVhdHVyZXMgYnkgZGVmYXVsdCwgb3IgdGhhdCBkb24ndCBwcm92aWRlIHRoZW0gYXQgYWxsLiAgSXQgbXVzdAogICAgIGNvbWUgYWZ0ZXIgYWxsICdkZy1vcHRpb25zJyBkaXJlY3RpdmVzLgoKICAgICBUaGUgc3VwcG9ydGVkIHZhbHVlcyBvZiBGRUFUVVJFIGFyZToKICAgICAnYzk5X3J1bnRpbWUnCiAgICAgICAgICBUaGUgdGFyZ2V0J3MgQzk5IHJ1bnRpbWUgKGJvdGggaGVhZGVycyBhbmQgbGlicmFyaWVzKS4KCiAgICAgJ21pcHMxNl9hdHRyaWJ1dGUnCiAgICAgICAgICAnbWlwczE2JyBmdW5jdGlvbiBhdHRyaWJ1dGVzLiAgT25seSBNSVBTIHRhcmdldHMgc3VwcG9ydCB0aGlzCiAgICAgICAgICBmZWF0dXJlLCBhbmQgb25seSB0aGVuIGluIGNlcnRhaW4gbW9kZXMuCgoneyBkZy10aW1lb3V0IE4gW3t0YXJnZXQgU0VMRUNUT1IgfV0gfScKICAgICBTZXQgdGhlIHRpbWUgbGltaXQgZm9yIHRoZSBjb21waWxhdGlvbiBhbmQgZm9yIHRoZSBleGVjdXRpb24gb2YgdGhlCiAgICAgdGVzdCB0byB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBzZWNvbmRzLgoKJ3sgZGctdGltZW91dC1mYWN0b3IgWCBbeyB0YXJnZXQgU0VMRUNUT1IgfV0gfScKICAgICBNdWx0aXBseSB0aGUgbm9ybWFsIHRpbWUgbGltaXQgZm9yIGNvbXBpbGF0aW9uIGFuZCBleGVjdXRpb24gb2YgdGhlCiAgICAgdGVzdCBieSB0aGUgc3BlY2lmaWVkIGZsb2F0aW5nLXBvaW50IGZhY3Rvci4gIFRoZSBub3JtYWwgdGltZW91dAogICAgIGxpbWl0LCBpbiBzZWNvbmRzLCBpcyBmb3VuZCBieSBzZWFyY2hpbmcgdGhlIGZvbGxvd2luZyBpbiBvcmRlcjoKCiAgICAgICAgKiB0aGUgdmFsdWUgZGVmaW5lZCBieSBhbiBlYXJsaWVyICdkZy10aW1lb3V0JyBkaXJlY3RpdmUgaW4gdGhlCiAgICAgICAgICB0ZXN0CgogICAgICAgICogdmFyaWFibGUgVE9PTF9USU1FT1VUIGRlZmluZWQgYnkgdGhlIHNldCBvZiB0ZXN0cwoKICAgICAgICAqIEdDQyxUSU1FT1VUIHNldCBpbiB0aGUgdGFyZ2V0IGJvYXJkCgogICAgICAgICogMzAwCgoneyBkZy1za2lwLWlmIENPTU1FTlQgeyBTRUxFQ1RPUiB9IHsgSU5DTFVERS1PUFRTIH0geyBFWENMVURFLU9QVFMgfSB9JwogICAgIFNraXAgdGhlIHRlc3QgaWYgdGhlIHRlc3Qgc3lzdGVtIGlzIGluY2x1ZGVkIGluIFNFTEVDVE9SIGFuZCBpZgogICAgIGVhY2ggb2YgdGhlIG9wdGlvbnMgaW4gSU5DTFVERS1PUFRTIGlzIGluIHRoZSBzZXQgb2Ygb3B0aW9ucyB3aXRoCiAgICAgd2hpY2ggdGhlIHRlc3Qgd291bGQgYmUgY29tcGlsZWQgYW5kIGlmIG5vbmUgb2YgdGhlIG9wdGlvbnMgaW4KICAgICBFWENMVURFLU9QVFMgaXMgaW4gdGhlIHNldCBvZiBvcHRpb25zIHdpdGggd2hpY2ggdGhlIHRlc3Qgd291bGQgYmUKICAgICBjb21waWxlZC4KCiAgICAgVXNlICciKiInIGZvciBhbiBlbXB0eSBJTkNMVURFLU9QVFMgbGlzdCBhbmQgJyIiJyBmb3IgYW4gZW1wdHkKICAgICBFWENMVURFLU9QVFMgbGlzdC4KCid7IGRnLXhmYWlsLWlmIENPTU1FTlQgeyBTRUxFQ1RPUiB9IHsgSU5DTFVERS1PUFRTIH0geyBFWENMVURFLU9QVFMgfSB9JwogICAgIEV4cGVjdCB0aGUgdGVzdCB0byBmYWlsIGlmIHRoZSBjb25kaXRpb25zICh3aGljaCBhcmUgdGhlIHNhbWUgYXMKICAgICBmb3IgJ2RnLXNraXAtaWYnKSBhcmUgbWV0LgoKJ3sgZGctcmVxdWlyZS1TVVBQT1JUIGFyZ3MgfScKICAgICBTa2lwIHRoZSB0ZXN0IGlmIHRoZSB0YXJnZXQgZG9lcyBub3QgcHJvdmlkZSB0aGUgcmVxdWlyZWQgc3VwcG9ydDsKICAgICBzZWUgJ2djYy1kZy5leHAnIGluIHRoZSBHQ0MgdGVzdHN1aXRlIGZvciB0aGUgYWN0dWFsIGRpcmVjdGl2ZXMuCiAgICAgVGhlc2UgZGlyZWN0aXZlcyBtdXN0IGFwcGVhciBhZnRlciBhbnkgJ2RnLWRvJyBkaXJlY3RpdmUgaW4gdGhlCiAgICAgdGVzdCBhbmQgYmVmb3JlIGFueSAnZGctYWRkaXRpb25hbC1zb3VyY2VzJyBkaXJlY3RpdmUuICBUaGV5CiAgICAgcmVxdWlyZSBhdCBsZWFzdCBvbmUgYXJndW1lbnQsIHdoaWNoIGNhbiBiZSBhbiBlbXB0eSBzdHJpbmcgaWYgdGhlCiAgICAgc3BlY2lmaWMgcHJvY2VkdXJlIGRvZXMgbm90IGV4YW1pbmUgdGhlIGFyZ3VtZW50LgoKJ3sgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IEtFWVdPUkQgfScKICAgICBTa2lwIHRoZSB0ZXN0IGlmIHRoZSB0ZXN0IHRhcmdldCwgaW5jbHVkaW5nIGN1cnJlbnQgbXVsdGlsaWIgZmxhZ3MsCiAgICAgaXMgbm90IGNvdmVyZWQgYnkgdGhlIGVmZmVjdGl2ZS10YXJnZXQga2V5d29yZC4gIFRoaXMgZGlyZWN0aXZlCiAgICAgbXVzdCBhcHBlYXIgYWZ0ZXIgYW55ICdkZy1kbycgZGlyZWN0aXZlIGluIHRoZSB0ZXN0IGFuZCBiZWZvcmUgYW55CiAgICAgJ2RnLWFkZGl0aW9uYWwtc291cmNlcycgZGlyZWN0aXZlLgoKJ3sgZGctc2hvdWxkZmFpbCBDT01NRU5UIHsgU0VMRUNUT1IgfSB7IElOQ0xVREUtT1BUUyB9IHsgRVhDTFVERS1PUFRTIH0gfScKICAgICBFeHBlY3QgdGhlIHRlc3QgZXhlY3V0YWJsZSB0byByZXR1cm4gYSBub256ZXJvIGV4aXQgc3RhdHVzIGlmIHRoZQogICAgIGNvbmRpdGlvbnMgKHdoaWNoIGFyZSB0aGUgc2FtZSBhcyBmb3IgJ2RnLXNraXAtaWYnKSBhcmUgbWV0LgoKJ3sgZGctZXJyb3IgUkVHRVhQIFtDT01NRU5UIFt7IHRhcmdldC94ZmFpbCBTRUxFQ1RPUiB9IFtMSU5FXSB9XV0gfScKICAgICBUaGlzIERlamFHbnUgZGlyZWN0aXZlIGFwcGVhcnMgb24gYSBzb3VyY2UgbGluZSB0aGF0IGlzIGV4cGVjdGVkIHRvCiAgICAgZ2V0IGFuIGVycm9yIG1lc3NhZ2UsIG9yIGVsc2Ugc3BlY2lmaWVzIHRoZSBzb3VyY2UgbGluZSBhc3NvY2lhdGVkCiAgICAgd2l0aCB0aGUgbWVzc2FnZS4gIElmIHRoZXJlIGlzIG5vIG1lc3NhZ2UgZm9yIHRoYXQgbGluZSBvciBpZiB0aGUKICAgICB0ZXh0IG9mIHRoYXQgbWVzc2FnZSBpcyBub3QgbWF0Y2hlZCBieSBSRUdFWFAgdGhlbiB0aGUgY2hlY2sgZmFpbHMKICAgICBhbmQgQ09NTUVOVCBpcyBpbmNsdWRlZCBpbiB0aGUgJ0ZBSUwnIG1lc3NhZ2UuICBUaGUgY2hlY2sgZG9lcyBub3QKICAgICBsb29rIGZvciB0aGUgc3RyaW5nICciZXJyb3IiJyB1bmxlc3MgaXQgaXMgcGFydCBvZiBSRUdFWFAuCgoneyBkZy13YXJuaW5nIFJFR0VYUCBbQ09NTUVOVCBbeyB0YXJnZXQveGZhaWwgU0VMRUNUT1IgfSBbTElORV0gfV1dIH0nCiAgICAgVGhpcyBEZWphR251IGRpcmVjdGl2ZSBhcHBlYXJzIG9uIGEgc291cmNlIGxpbmUgdGhhdCBpcyBleHBlY3RlZCB0bwogICAgIGdldCBhIHdhcm5pbmcgbWVzc2FnZSwgb3IgZWxzZSBzcGVjaWZpZXMgdGhlIHNvdXJjZSBsaW5lIGFzc29jaWF0ZWQKICAgICB3aXRoIHRoZSBtZXNzYWdlLiAgSWYgdGhlcmUgaXMgbm8gbWVzc2FnZSBmb3IgdGhhdCBsaW5lIG9yIGlmIHRoZQogICAgIHRleHQgb2YgdGhhdCBtZXNzYWdlIGlzIG5vdCBtYXRjaGVkIGJ5IFJFR0VYUCB0aGVuIHRoZSBjaGVjayBmYWlscwogICAgIGFuZCBDT01NRU5UIGlzIGluY2x1ZGVkIGluIHRoZSAnRkFJTCcgbWVzc2FnZS4gIFRoZSBjaGVjayBkb2VzIG5vdAogICAgIGxvb2sgZm9yIHRoZSBzdHJpbmcgJyJ3YXJuaW5nIicgdW5sZXNzIGl0IGlzIHBhcnQgb2YgUkVHRVhQLgoKJ3sgZGctbWVzc2FnZSBSRUdFWFAgW0NPTU1FTlQgW3sgdGFyZ2V0L3hmYWlsIFNFTEVDVE9SIH0gW0xJTkVdIH1dXSB9JwogICAgIFRoZSBsaW5lIGlzIGV4cGVjdGVkIHRvIGdldCBhIG1lc3NhZ2Ugb3RoZXIgdGhhbiBhbiBlcnJvciBvcgogICAgIHdhcm5pbmcuICBJZiB0aGVyZSBpcyBubyBtZXNzYWdlIGZvciB0aGF0IGxpbmUgb3IgaWYgdGhlIHRleHQgb2YKICAgICB0aGF0IG1lc3NhZ2UgaXMgbm90IG1hdGNoZWQgYnkgUkVHRVhQIHRoZW4gdGhlIGNoZWNrIGZhaWxzIGFuZAogICAgIENPTU1FTlQgaXMgaW5jbHVkZWQgaW4gdGhlICdGQUlMJyBtZXNzYWdlLgoKJ3sgZGctYm9ndXMgUkVHRVhQIFtDT01NRU5UIFt7IHRhcmdldC94ZmFpbCBTRUxFQ1RPUiB9IFtMSU5FXSB9XV0gfScKICAgICBUaGlzIERlamFHbnUgZGlyZWN0aXZlIGFwcGVhcnMgb24gYSBzb3VyY2UgbGluZSB0aGF0IHNob3VsZCBub3QgZ2V0CiAgICAgYSBtZXNzYWdlIG1hdGNoaW5nIFJFR0VYUCwgb3IgZWxzZSBzcGVjaWZpZXMgdGhlIHNvdXJjZSBsaW5lCiAgICAgYXNzb2NpYXRlZCB3aXRoIHRoZSBib2d1cyBtZXNzYWdlLiAgSXQgaXMgdXN1YWxseSB1c2VkIHdpdGggJ3hmYWlsJwogICAgIHRvIGluZGljYXRlIHRoYXQgdGhlIG1lc3NhZ2UgaXMgYSBrbm93biBwcm9ibGVtIGZvciBhIHBhcnRpY3VsYXIKICAgICBzZXQgb2YgdGFyZ2V0cy4KCid7IGRnLWV4Y2Vzcy1lcnJvcnMgQ09NTUVOVCBbeyB0YXJnZXQveGZhaWwgU0VMRUNUT1IgfV0gfScKICAgICBUaGlzIERlamFHbnUgZGlyZWN0aXZlIGluZGljYXRlcyB0aGF0IHRoZSB0ZXN0IGlzIGV4cGVjdGVkIHRvIGZhaWwKICAgICBkdWUgdG8gY29tcGlsZXIgbWVzc2FnZXMgdGhhdCBhcmUgbm90IGhhbmRsZWQgYnkgJ2RnLWVycm9yJywKICAgICAnZGctd2FybmluZycgb3IgJ2RnLWJvZ3VzJy4gIEZvciB0aGlzIGRpcmVjdGl2ZSAneGZhaWwnIGhhcyB0aGUKICAgICBzYW1lIGVmZmVjdCBhcyAndGFyZ2V0Jy4KCid7IGRnLW91dHB1dCBSRUdFWFAgW3sgdGFyZ2V0L3hmYWlsIFNFTEVDVE9SIH1dIH0nCiAgICAgVGhpcyBEZWphR251IGRpcmVjdGl2ZSBjb21wYXJlcyBSRUdFWFAgdG8gdGhlIGNvbWJpbmVkIG91dHB1dCB0aGF0CiAgICAgdGhlIHRlc3QgZXhlY3V0YWJsZSB3cml0ZXMgdG8gJ3N0ZG91dCcgYW5kICdzdGRlcnInLgoKJ3sgZGctcHJ1bmUtb3V0cHV0IFJFR0VYUCB9JwogICAgIFBydW5lIG1lc3NhZ2VzIG1hdGNoaW5nIFJFR0VYUCBmcm9tIHRlc3Qgb3V0cHV0LgoKJ3sgZGctYWRkaXRpb25hbC1maWxlcyAiRklMRUxJU1QiIH0nCiAgICAgU3BlY2lmeSBhZGRpdGlvbmFsIGZpbGVzLCBvdGhlciB0aGFuIHNvdXJjZSBmaWxlcywgdGhhdCBtdXN0IGJlCiAgICAgY29waWVkIHRvIHRoZSBzeXN0ZW0gd2hlcmUgdGhlIGNvbXBpbGVyIHJ1bnMuCgoneyBkZy1hZGRpdGlvbmFsLXNvdXJjZXMgIkZJTEVMSVNUIiB9JwogICAgIFNwZWNpZnkgYWRkaXRpb25hbCBzb3VyY2UgZmlsZXMgdG8gYXBwZWFyIGluIHRoZSBjb21waWxlIGxpbmUKICAgICBmb2xsb3dpbmcgdGhlIG1haW4gdGVzdCBmaWxlLgoKJ3sgZGctZmluYWwgeyBMT0NBTC1ESVJFQ1RJVkUgfSB9JwogICAgIFRoaXMgRGVqYUdudSBkaXJlY3RpdmUgaXMgcGxhY2VkIHdpdGhpbiBhIGNvbW1lbnQgYW55d2hlcmUgaW4gdGhlCiAgICAgc291cmNlIGZpbGUgYW5kIGlzIHByb2Nlc3NlZCBhZnRlciB0aGUgdGVzdCBoYXMgYmVlbiBjb21waWxlZCBhbmQKICAgICBydW4uICBNdWx0aXBsZSAnZGctZmluYWwnIGNvbW1hbmRzIGFyZSBwcm9jZXNzZWQgaW4gdGhlIG9yZGVyIGluCiAgICAgd2hpY2ggdGhleSBhcHBlYXIgaW4gdGhlIHNvdXJjZSBmaWxlLgoKICAgICBUaGUgR0NDIHRlc3RzdWl0ZSBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgZGlyZWN0aXZlcyB0byBiZSB1c2VkCiAgICAgd2l0aGluICdkZy1maW5hbCcuCgogICAgICdjbGVhbnVwLWNvdmVyYWdlLWZpbGVzJwogICAgICAgICAgUmVtb3ZlcyBjb3ZlcmFnZSBkYXRhIGZpbGVzIGdlbmVyYXRlZCBmb3IgdGhpcyB0ZXN0LgoKICAgICAnY2xlYW51cC1yZXBvLWZpbGVzJwogICAgICAgICAgUmVtb3ZlcyBmaWxlcyBnZW5lcmF0ZWQgZm9yIHRoaXMgdGVzdCBmb3IgJy1mcmVwbycuCgogICAgICdjbGVhbnVwLXJ0bC1kdW1wIFNVRkZJWCcKICAgICAgICAgIFJlbW92ZXMgUlRMIGR1bXAgZmlsZXMgZ2VuZXJhdGVkIGZvciB0aGlzIHRlc3QuCgogICAgICdjbGVhbnVwLXRyZWUtZHVtcCBTVUZGSVgnCiAgICAgICAgICBSZW1vdmVzIHRyZWUgZHVtcCBmaWxlcyBtYXRjaGluZyBTVUZGSVggd2hpY2ggd2VyZSBnZW5lcmF0ZWQKICAgICAgICAgIGZvciB0aGlzIHRlc3QuCgogICAgICdjbGVhbnVwLXNhdmVkLXRlbXBzJwogICAgICAgICAgUmVtb3ZlcyBmaWxlcyBmb3IgdGhlIGN1cnJlbnQgdGVzdCB3aGljaCB3ZXJlIGtlcHQgZm9yCiAgICAgICAgICAnLS1zYXZlLXRlbXBzJy4KCiAgICAgJ3NjYW4tZmlsZSBGSUxFTkFNRSBSRUdFWFAgW3sgdGFyZ2V0L3hmYWlsIFNFTEVDVE9SIH1dJwogICAgICAgICAgUGFzc2VzIGlmIFJFR0VYUCBtYXRjaGVzIHRleHQgaW4gRklMRU5BTUUuCgogICAgICdzY2FuLWZpbGUtbm90IEZJTEVOQU1FIFJFR0VYUCBbeyB0YXJnZXQveGZhaWwgU0VMRUNUT1IgfV0nCiAgICAgICAgICBQYXNzZXMgaWYgUkVHRVhQIGRvZXMgbm90IG1hdGNoIHRleHQgaW4gRklMRU5BTUUuCgogICAgICdzY2FuLWhpZGRlbiBTWU1CT0wgW3sgdGFyZ2V0L3hmYWlsIFNFTEVDVE9SIH1dJwogICAgICAgICAgUGFzc2VzIGlmIFNZTUJPTCBpcyBkZWZpbmVkIGFzIGEgaGlkZGVuIHN5bWJvbCBpbiB0aGUgdGVzdCdzCiAgICAgICAgICBhc3NlbWJseSBvdXRwdXQuCgogICAgICdzY2FuLW5vdC1oaWRkZW4gU1lNQk9MIFt7IHRhcmdldC94ZmFpbCBTRUxFQ1RPUiB9XScKICAgICAgICAgIFBhc3NlcyBpZiBTWU1CT0wgaXMgbm90IGRlZmluZWQgYXMgYSBoaWRkZW4gc3ltYm9sIGluIHRoZQogICAgICAgICAgdGVzdCdzIGFzc2VtYmx5IG91dHB1dC4KCiAgICAgJ3NjYW4tYXNzZW1ibGVyLXRpbWVzIFJFR0VYIE5VTSBbeyB0YXJnZXQveGZhaWwgU0VMRUNUT1IgfV0nCiAgICAgICAgICBQYXNzZXMgaWYgUkVHRVggaXMgbWF0Y2hlZCBleGFjdGx5IE5VTSB0aW1lcyBpbiB0aGUgdGVzdCdzCiAgICAgICAgICBhc3NlbWJsZXIgb3V0cHV0LgoKICAgICAnc2Nhbi1hc3NlbWJsZXIgUkVHRVggW3sgdGFyZ2V0L3hmYWlsIFNFTEVDVE9SIH1dJwogICAgICAgICAgUGFzc2VzIGlmIFJFR0VYIG1hdGNoZXMgdGV4dCBpbiB0aGUgdGVzdCdzIGFzc2VtYmxlciBvdXRwdXQuCgogICAgICdzY2FuLWFzc2VtYmxlci1ub3QgUkVHRVggW3sgdGFyZ2V0L3hmYWlsIFNFTEVDVE9SIH1dJwogICAgICAgICAgUGFzc2VzIGlmIFJFR0VYIGRvZXMgbm90IG1hdGNoIHRleHQgaW4gdGhlIHRlc3QncyBhc3NlbWJsZXIKICAgICAgICAgIG91dHB1dC4KCiAgICAgJ3NjYW4tYXNzZW1ibGVyLWRlbSBSRUdFWCBbeyB0YXJnZXQveGZhaWwgU0VMRUNUT1IgfV0nCiAgICAgICAgICBQYXNzZXMgaWYgUkVHRVggbWF0Y2hlcyB0ZXh0IGluIHRoZSB0ZXN0J3MgZGVtYW5nbGVkIGFzc2VtYmxlcgogICAgICAgICAgb3V0cHV0LgoKICAgICAnc2Nhbi1hc3NlbWJsZXItZGVtLW5vdCBSRUdFWCBbeyB0YXJnZXQveGZhaWwgU0VMRUNUT1IgfV0nCiAgICAgICAgICBQYXNzZXMgaWYgUkVHRVggZG9lcyBub3QgbWF0Y2ggdGV4dCBpbiB0aGUgdGVzdCdzIGRlbWFuZ2xlZAogICAgICAgICAgYXNzZW1ibGVyIG91dHB1dC4KCiAgICAgJ3NjYW4tdHJlZS1kdW1wLXRpbWVzIFJFR0VYIE5VTSBTVUZGSVggW3sgdGFyZ2V0L3hmYWlsIFNFTEVDVE9SIH1dJwogICAgICAgICAgUGFzc2VzIGlmIFJFR0VYIGlzIGZvdW5kIGV4YWN0bHkgTlVNIHRpbWVzIGluIHRoZSBkdW1wIGZpbGUKICAgICAgICAgIHdpdGggc3VmZml4IFNVRkZJWC4KCiAgICAgJ3NjYW4tdHJlZS1kdW1wIFJFR0VYIFNVRkZJWCBbeyB0YXJnZXQveGZhaWwgU0VMRUNUT1IgfV0nCiAgICAgICAgICBQYXNzZXMgaWYgUkVHRVggbWF0Y2hlcyB0ZXh0IGluIHRoZSBkdW1wIGZpbGUgd2l0aCBzdWZmaXgKICAgICAgICAgIFNVRkZJWC4KCiAgICAgJ3NjYW4tdHJlZS1kdW1wLW5vdCBSRUdFWCBTVUZGSVggW3sgdGFyZ2V0L3hmYWlsIFNFTEVDVE9SIH1dJwogICAgICAgICAgUGFzc2VzIGlmIFJFR0VYIGRvZXMgbm90IG1hdGNoIHRleHQgaW4gdGhlIGR1bXAgZmlsZSB3aXRoCiAgICAgICAgICBzdWZmaXggU1VGRklYLgoKICAgICAnc2Nhbi10cmVlLWR1bXAtZGVtIFJFR0VYIFNVRkZJWCBbeyB0YXJnZXQveGZhaWwgU0VMRUNUT1IgfV0nCiAgICAgICAgICBQYXNzZXMgaWYgUkVHRVggbWF0Y2hlcyBkZW1hbmdsZWQgdGV4dCBpbiB0aGUgZHVtcCBmaWxlIHdpdGgKICAgICAgICAgIHN1ZmZpeCBTVUZGSVguCgogICAgICdzY2FuLXRyZWUtZHVtcC1kZW0tbm90IFJFR0VYIFNVRkZJWCBbeyB0YXJnZXQveGZhaWwgU0VMRUNUT1IgfV0nCiAgICAgICAgICBQYXNzZXMgaWYgUkVHRVggZG9lcyBub3QgbWF0Y2ggZGVtYW5nbGVkIHRleHQgaW4gdGhlIGR1bXAgZmlsZQogICAgICAgICAgd2l0aCBzdWZmaXggU1VGRklYLgoKICAgICAnb3V0cHV0LWV4aXN0cyBbeyB0YXJnZXQveGZhaWwgU0VMRUNUT1IgfV0nCiAgICAgICAgICBQYXNzZXMgaWYgY29tcGlsZXIgb3V0cHV0IGZpbGUgZXhpc3RzLgoKICAgICAnb3V0cHV0LWV4aXN0cy1ub3QgW3sgdGFyZ2V0L3hmYWlsIFNFTEVDVE9SIH1dJwogICAgICAgICAgUGFzc2VzIGlmIGNvbXBpbGVyIG91dHB1dCBmaWxlIGRvZXMgbm90IGV4aXN0LgoKICAgICAncnVuLWdjb3YgU09VUkNFRklMRScKICAgICAgICAgIENoZWNrIGxpbmUgY291bnRzIGluICdnY292JyB0ZXN0cy4KCiAgICAgJ3J1bi1nY292IFticmFuY2hlc10gW2NhbGxzXSB7IE9QVFMgU09VUkNFRklMRSB9JwogICAgICAgICAgQ2hlY2sgYnJhbmNoIGFuZC9vciBjYWxsIGNvdW50cywgaW4gYWRkaXRpb24gdG8gbGluZSBjb3VudHMsCiAgICAgICAgICBpbiAnZ2NvdicgdGVzdHMuCgofCkZpbGU6IGdjY2ludC5pbmZvLCAgTm9kZTogQWRhIFRlc3RzLCAgTmV4dDogQyBUZXN0cywgIFByZXY6IFRlc3QgRGlyZWN0aXZlcywgIFVwOiBUZXN0c3VpdGVzCgo2LjQuMyBBZGEgTGFuZ3VhZ2UgVGVzdHN1aXRlcwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKVGhlIEFkYSB0ZXN0c3VpdGUgaW5jbHVkZXMgZXhlY3V0YWJsZSB0ZXN0cyBmcm9tIHRoZSBBQ0FUUyAyLjUKdGVzdHN1aXRlLCBwdWJsaWNseSBhdmFpbGFibGUgYXQKPGh0dHA6Ly93d3cuYWRhaWMub3JnL2NvbXBpbGVycy9hY2F0cy8yLjU+CgogVGhlc2UgdGVzdHMgYXJlIGludGVncmF0ZWQgaW4gdGhlIEdDQyB0ZXN0c3VpdGUgaW4gdGhlCidnY2MvdGVzdHN1aXRlL2FkYS9hY2F0cycgZGlyZWN0b3J5LCBhbmQgZW5hYmxlZCBhdXRvbWF0aWNhbGx5IHdoZW4KcnVubmluZyAnbWFrZSBjaGVjaycsIGFzc3VtaW5nIHRoZSBBZGEgbGFuZ3VhZ2UgaGFzIGJlZW4gZW5hYmxlZCB3aGVuCmNvbmZpZ3VyaW5nIEdDQy4KCiBZb3UgY2FuIGFsc28gcnVuIHRoZSBBZGEgdGVzdHN1aXRlIGluZGVwZW5kZW50bHksIHVzaW5nICdtYWtlCmNoZWNrLWFkYScsIG9yIHJ1biBhIHN1YnNldCBvZiB0aGUgdGVzdHMgYnkgc3BlY2lmeWluZyB3aGljaCBjaGFwdGVyIHRvCnJ1biwgZS5nLjoKCiAgICAgJCBtYWtlIGNoZWNrLWFkYSBDSEFQVEVSUz0iYzMgYzkiCgogVGhlIHRlc3RzIGFyZSBvcmdhbml6ZWQgYnkgZGlyZWN0b3J5LCBlYWNoIGRpcmVjdG9yeSBjb3JyZXNwb25kaW5nIHRvIGEKY2hhcHRlciBvZiB0aGUgQWRhIFJlZmVyZW5jZSBNYW51YWwuICBTbyBmb3IgZXhhbXBsZSwgYzkgY29ycmVzcG9uZHMgdG8KY2hhcHRlciA5LCB3aGljaCBkZWFscyB3aXRoIHRhc2tpbmcgZmVhdHVyZXMgb2YgdGhlIGxhbmd1YWdlLgoKIFRoZXJlIGlzIGFsc28gYW4gZXh0cmEgY2hhcHRlciBjYWxsZWQgJ2djYycgY29udGFpbmluZyBhIHRlbXBsYXRlIGZvcgpjcmVhdGluZyBuZXcgZXhlY3V0YWJsZSB0ZXN0cy4KCiBUaGUgdGVzdHMgYXJlIHJ1biB1c2luZyB0d28gJ3NoJyBzY3JpcHRzOiAncnVuX2FjYXRzJyBhbmQgJ3J1bl9hbGwuc2gnLgpUbyBydW4gdGhlIHRlc3RzIHVzaW5nIGEgc2ltdWxhdG9yIG9yIGEgY3Jvc3MgdGFyZ2V0LCBzZWUgdGhlIHNtYWxsCmN1c3RvbWl6YXRpb24gc2VjdGlvbiBhdCB0aGUgdG9wIG9mICdydW5fYWxsLnNoJy4KCiBUaGVzZSB0ZXN0cyBhcmUgcnVuIHVzaW5nIHRoZSBidWlsZCB0cmVlOiB0aGV5IGNhbiBiZSBydW4gd2l0aG91dCBkb2luZwphICdtYWtlIGluc3RhbGwnLgoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IEMgVGVzdHMsICBOZXh0OiBsaWJnY2ogVGVzdHMsICBQcmV2OiBBZGEgVGVzdHMsICBVcDogVGVzdHN1aXRlcwoKNi40LjQgQyBMYW5ndWFnZSBUZXN0c3VpdGVzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKR0NDIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgQyBsYW5ndWFnZSB0ZXN0c3VpdGVzLCBpbiB0aGUgJ2djYy90ZXN0c3VpdGUnCmRpcmVjdG9yeToKCidnY2MuZGcnCiAgICAgVGhpcyBjb250YWlucyB0ZXN0cyBvZiBwYXJ0aWN1bGFyIGZlYXR1cmVzIG9mIHRoZSBDIGNvbXBpbGVyLCB1c2luZwogICAgIHRoZSBtb3JlIG1vZGVybiAnZGcnIGhhcm5lc3MuICBDb3JyZWN0bmVzcyB0ZXN0cyBmb3IgdmFyaW91cwogICAgIGNvbXBpbGVyIGZlYXR1cmVzIHNob3VsZCBnbyBoZXJlIGlmIHBvc3NpYmxlLgoKICAgICBNYWdpYyBjb21tZW50cyBkZXRlcm1pbmUgd2hldGhlciB0aGUgZmlsZSBpcyBwcmVwcm9jZXNzZWQsCiAgICAgY29tcGlsZWQsIGxpbmtlZCBvciBydW4uICBJbiB0aGVzZSB0ZXN0cywgZXJyb3IgYW5kIHdhcm5pbmcgbWVzc2FnZQogICAgIHRleHRzIGFyZSBjb21wYXJlZCBhZ2FpbnN0IGV4cGVjdGVkIHRleHRzIG9yIHJlZ3VsYXIgZXhwcmVzc2lvbnMKICAgICBnaXZlbiBpbiBjb21tZW50cy4gIFRoZXNlIHRlc3RzIGFyZSBydW4gd2l0aCB0aGUgb3B0aW9ucyAnLWFuc2kKICAgICAtcGVkYW50aWMnIHVubGVzcyBvdGhlciBvcHRpb25zIGFyZSBnaXZlbiBpbiB0aGUgdGVzdC4gIEV4Y2VwdCBhcwogICAgIG5vdGVkIGJlbG93IHRoZXkgYXJlIG5vdCBydW4gd2l0aCBtdWx0aXBsZSBvcHRpbWl6YXRpb24gb3B0aW9ucy4KJ2djYy5kZy9jb21wYXQnCiAgICAgVGhpcyBzdWJkaXJlY3RvcnkgY29udGFpbnMgdGVzdHMgZm9yIGJpbmFyeSBjb21wYXRpYmlsaXR5IHVzaW5nCiAgICAgJ2NvbXBhdC5leHAnLCB3aGljaCBpbiB0dXJuIHVzZXMgdGhlIGxhbmd1YWdlLWluZGVwZW5kZW50IHN1cHBvcnQKICAgICAoKm5vdGUgU3VwcG9ydCBmb3IgdGVzdGluZyBiaW5hcnkgY29tcGF0aWJpbGl0eTogY29tcGF0IFRlc3RpbmcuKS4KJ2djYy5kZy9jcHAnCiAgICAgVGhpcyBzdWJkaXJlY3RvcnkgY29udGFpbnMgdGVzdHMgb2YgdGhlIHByZXByb2Nlc3Nvci4KJ2djYy5kZy9kZWJ1ZycKICAgICBUaGlzIHN1YmRpcmVjdG9yeSBjb250YWlucyB0ZXN0cyBmb3IgZGVidWcgZm9ybWF0cy4gIFRlc3RzIGluIHRoaXMKICAgICBzdWJkaXJlY3RvcnkgYXJlIHJ1biBmb3IgZWFjaCBkZWJ1ZyBmb3JtYXQgdGhhdCB0aGUgY29tcGlsZXIKICAgICBzdXBwb3J0cy4KJ2djYy5kZy9mb3JtYXQnCiAgICAgVGhpcyBzdWJkaXJlY3RvcnkgY29udGFpbnMgdGVzdHMgb2YgdGhlICctV2Zvcm1hdCcgZm9ybWF0IGNoZWNraW5nLgogICAgIFRlc3RzIGluIHRoaXMgZGlyZWN0b3J5IGFyZSBydW4gd2l0aCBhbmQgd2l0aG91dCAnLURXSURFJy4KJ2djYy5kZy9ub25jb21waWxlJwogICAgIFRoaXMgc3ViZGlyZWN0b3J5IGNvbnRhaW5zIHRlc3RzIG9mIGNvZGUgdGhhdCBzaG91bGQgbm90IGNvbXBpbGUKICAgICBhbmQgZG9lcyBub3QgbmVlZCBhbnkgc3BlY2lhbCBjb21waWxhdGlvbiBvcHRpb25zLiAgVGhleSBhcmUgcnVuCiAgICAgd2l0aCBtdWx0aXBsZSBvcHRpbWl6YXRpb24gb3B0aW9ucywgc2luY2Ugc29tZXRpbWVzIGludmFsaWQgY29kZQogICAgIGNyYXNoZXMgdGhlIGNvbXBpbGVyIHdpdGggb3B0aW1pemF0aW9uLgonZ2NjLmRnL3NwZWNpYWwnCiAgICAgRklYTUU6IGRlc2NyaWJlIHRoaXMuCgonZ2NjLmMtdG9ydHVyZScKICAgICBUaGlzIGNvbnRhaW5zIHBhcnRpY3VsYXIgY29kZSBmcmFnbWVudHMgd2hpY2ggaGF2ZSBoaXN0b3JpY2FsbHkKICAgICBicm9rZW4gZWFzaWx5LiAgVGhlc2UgdGVzdHMgYXJlIHJ1biB3aXRoIG11bHRpcGxlIG9wdGltaXphdGlvbgogICAgIG9wdGlvbnMsIHNvIHRlc3RzIGZvciBmZWF0dXJlcyB3aGljaCBvbmx5IGJyZWFrIGF0IHNvbWUKICAgICBvcHRpbWl6YXRpb24gbGV2ZWxzIGJlbG9uZyBoZXJlLiAgVGhpcyBhbHNvIGNvbnRhaW5zIHRlc3RzIHRvIGNoZWNrCiAgICAgdGhhdCBjZXJ0YWluIG9wdGltaXphdGlvbnMgb2NjdXIuICBJdCBtaWdodCBiZSB3b3J0aHdoaWxlIHRvCiAgICAgc2VwYXJhdGUgdGhlIGNvcnJlY3RuZXNzIHRlc3RzIGNsZWFubHkgZnJvbSB0aGUgY29kZSBxdWFsaXR5IHRlc3RzLAogICAgIGJ1dCBpdCBoYXNuJ3QgYmVlbiBkb25lIHlldC4KCidnY2MuYy10b3J0dXJlL2NvbXBhdCcKICAgICBGSVhNRTogZGVzY3JpYmUgdGhpcy4KCiAgICAgVGhpcyBkaXJlY3Rvcnkgc2hvdWxkIHByb2JhYmx5IG5vdCBiZSB1c2VkIGZvciBuZXcgdGVzdHMuCidnY2MuYy10b3J0dXJlL2NvbXBpbGUnCiAgICAgVGhpcyB0ZXN0c3VpdGUgY29udGFpbnMgdGVzdCBjYXNlcyB0aGF0IHNob3VsZCBjb21waWxlLCBidXQgZG8gbm90CiAgICAgbmVlZCB0byBsaW5rIG9yIHJ1bi4gIFRoZXNlIHRlc3QgY2FzZXMgYXJlIGNvbXBpbGVkIHdpdGggc2V2ZXJhbAogICAgIGRpZmZlcmVudCBjb21iaW5hdGlvbnMgb2Ygb3B0aW1pemF0aW9uIG9wdGlvbnMuICBBbGwgd2FybmluZ3MgYXJlCiAgICAgZGlzYWJsZWQgZm9yIHRoZXNlIHRlc3QgY2FzZXMsIHNvIHRoaXMgZGlyZWN0b3J5IGlzIG5vdCBzdWl0YWJsZSBpZgogICAgIHlvdSB3aXNoIHRvIHRlc3QgZm9yIHRoZSBwcmVzZW5jZSBvciBhYnNlbmNlIG9mIGNvbXBpbGVyIHdhcm5pbmdzLgogICAgIFdoaWxlIHNwZWNpYWwgb3B0aW9ucyBjYW4gYmUgc2V0LCBhbmQgdGVzdHMgZGlzYWJsZWQgb24gc3BlY2lmaWMKICAgICBwbGF0Zm9ybXMsIGJ5IHRoZSB1c2Ugb2YgJy54JyBmaWxlcywgbW9zdGx5IHRoZXNlIHRlc3QgY2FzZXMgc2hvdWxkCiAgICAgbm90IGNvbnRhaW4gcGxhdGZvcm0gZGVwZW5kZW5jaWVzLiAgRklYTUU6IGRpc2N1c3MgaG93IGRlZmluZXMgc3VjaAogICAgIGFzICdOT19MQUJFTF9WQUxVRVMnIGFuZCAnU1RBQ0tfU0laRScgYXJlIHVzZWQuCidnY2MuYy10b3J0dXJlL2V4ZWN1dGUnCiAgICAgVGhpcyB0ZXN0c3VpdGUgY29udGFpbnMgdGVzdCBjYXNlcyB0aGF0IHNob3VsZCBjb21waWxlLCBsaW5rIGFuZAogICAgIHJ1bjsgb3RoZXJ3aXNlIHRoZSBzYW1lIGNvbW1lbnRzIGFzIGZvciAnZ2NjLmMtdG9ydHVyZS9jb21waWxlJwogICAgIGFwcGx5LgonZ2NjLmMtdG9ydHVyZS9leGVjdXRlL2llZWUnCiAgICAgVGhpcyBjb250YWlucyB0ZXN0cyB3aGljaCBhcmUgc3BlY2lmaWMgdG8gSUVFRSBmbG9hdGluZyBwb2ludC4KJ2djYy5jLXRvcnR1cmUvdW5zb3J0ZWQnCiAgICAgRklYTUU6IGRlc2NyaWJlIHRoaXMuCgogICAgIFRoaXMgZGlyZWN0b3J5IHNob3VsZCBwcm9iYWJseSBub3QgYmUgdXNlZCBmb3IgbmV3IHRlc3RzLgonZ2NjLmMtdG9ydHVyZS9taXNjLXRlc3RzJwogICAgIFRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIEMgdGVzdHMgdGhhdCByZXF1aXJlIHNwZWNpYWwgaGFuZGxpbmcuCiAgICAgU29tZSBvZiB0aGVzZSB0ZXN0cyBoYXZlIGluZGl2aWR1YWwgZXhwZWN0IGZpbGVzLCBhbmQgb3RoZXJzIHNoYXJlCiAgICAgc3BlY2lhbC1wdXJwb3NlIGV4cGVjdCBmaWxlczoKCiAgICAgJ2Jwcm9iKi5jJwogICAgICAgICAgVGVzdCAnLWZicmFuY2gtcHJvYmFiaWxpdGllcycgdXNpbmcgJ2Jwcm9iLmV4cCcsIHdoaWNoIGluIHR1cm4KICAgICAgICAgIHVzZXMgdGhlIGdlbmVyaWMsIGxhbmd1YWdlLWluZGVwZW5kZW50IGZyYW1ld29yayAoKm5vdGUKICAgICAgICAgIFN1cHBvcnQgZm9yIHRlc3RpbmcgcHJvZmlsZS1kaXJlY3RlZCBvcHRpbWl6YXRpb25zOiBwcm9mb3B0CiAgICAgICAgICBUZXN0aW5nLikuCgogICAgICdkZy0qLmMnCiAgICAgICAgICBUZXN0IHRoZSB0ZXN0c3VpdGUgaXRzZWxmIHVzaW5nICdkZy10ZXN0LmV4cCcuCgogICAgICdnY292Ki5jJwogICAgICAgICAgVGVzdCAnZ2Nvdicgb3V0cHV0IHVzaW5nICdnY292LmV4cCcsIHdoaWNoIGluIHR1cm4gdXNlcyB0aGUKICAgICAgICAgIGxhbmd1YWdlLWluZGVwZW5kZW50IHN1cHBvcnQgKCpub3RlIFN1cHBvcnQgZm9yIHRlc3RpbmcgZ2NvdjoKICAgICAgICAgIGdjb3YgVGVzdGluZy4pLgoKICAgICAnaTM4Ni1wZi0qLmMnCiAgICAgICAgICBUZXN0IGkzODYtc3BlY2lmaWMgc3VwcG9ydCBmb3IgZGF0YSBwcmVmZXRjaCB1c2luZwogICAgICAgICAgJ2kzODYtcHJlZmV0Y2guZXhwJy4KCiBGSVhNRTogbWVyZ2UgaW4gJ3Rlc3RzdWl0ZS9SRUFETUUuZ2NjJyBhbmQgZGlzY3VzcyB0aGUgZm9ybWF0IG9mIHRlc3QKY2FzZXMgYW5kIG1hZ2ljIGNvbW1lbnRzIG1vcmUuCgofCkZpbGU6IGdjY2ludC5pbmZvLCAgTm9kZTogbGliZ2NqIFRlc3RzLCAgTmV4dDogZ2NvdiBUZXN0aW5nLCAgUHJldjogQyBUZXN0cywgIFVwOiBUZXN0c3VpdGVzCgo2LjQuNSBUaGUgSmF2YSBsaWJyYXJ5IHRlc3RzdWl0ZXMuCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KClJ1bnRpbWUgdGVzdHMgYXJlIGV4ZWN1dGVkIHZpYSAnbWFrZSBjaGVjaycgaW4gdGhlCidUQVJHRVQvbGliamF2YS90ZXN0c3VpdGUnIGRpcmVjdG9yeSBpbiB0aGUgYnVpbGQgdHJlZS4gIEFkZGl0aW9uYWwKcnVudGltZSB0ZXN0cyBjYW4gYmUgY2hlY2tlZCBpbnRvIHRoaXMgdGVzdHN1aXRlLgoKIFJlZ3Jlc3Npb24gdGVzdGluZyBvZiB0aGUgY29yZSBwYWNrYWdlcyBpbiBsaWJnY2ogaXMgYWxzbyBjb3ZlcmVkIGJ5CnRoZSBNYXV2ZSB0ZXN0c3VpdGUuICBUaGUgTWF1dmUgUHJvamVjdCBkZXZlbG9wcyB0ZXN0cyBmb3IgdGhlIEphdmEKQ2xhc3MgTGlicmFyaWVzLiAgVGhlc2UgdGVzdHMgYXJlIHJ1biBhcyBwYXJ0IG9mIGxpYmdjaiB0ZXN0aW5nIGJ5CnBsYWNpbmcgdGhlIE1hdXZlIHRyZWUgd2l0aGluIHRoZSBsaWJqYXZhIHRlc3RzdWl0ZSBzb3VyY2VzIGF0CidsaWJqYXZhL3Rlc3RzdWl0ZS9saWJqYXZhLm1hdXZlL21hdXZlJywgb3IgYnkgc3BlY2lmeWluZyB0aGUgbG9jYXRpb24Kb2YgdGhhdCB0cmVlIHdoZW4gaW52b2tpbmcgJ21ha2UnLCBhcyBpbiAnbWFrZSBNQVVWRURJUj1+L21hdXZlIGNoZWNrJy4KCiBUbyBkZXRlY3QgcmVncmVzc2lvbnMsIGEgbWVjaGFuaXNtIGluICdtYXV2ZS5leHAnIGNvbXBhcmVzIHRoZSBmYWlsdXJlcwpmb3IgYSB0ZXN0IHJ1biBhZ2FpbnN0IHRoZSBsaXN0IG9mIGV4cGVjdGVkIGZhaWx1cmVzIGluCidsaWJqYXZhL3Rlc3RzdWl0ZS9saWJqYXZhLm1hdXZlL3hmYWlscycgZnJvbSB0aGUgc291cmNlIGhpZXJhcmNoeS4KVXBkYXRlIHRoaXMgZmlsZSB3aGVuIGFkZGluZyBuZXcgZmFpbGluZyB0ZXN0cyB0byBNYXV2ZSwgb3Igd2hlbiBmaXhpbmcKYnVncyBpbiBsaWJnY2ogdGhhdCBoYWQgY2F1c2VkIE1hdXZlIHRlc3QgZmFpbHVyZXMuCgogV2UgZW5jb3VyYWdlIGRldmVsb3BlcnMgdG8gY29udHJpYnV0ZSB0ZXN0IGNhc2VzIHRvIE1hdXZlLgoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IGdjb3YgVGVzdGluZywgIE5leHQ6IHByb2ZvcHQgVGVzdGluZywgIFByZXY6IGxpYmdjaiBUZXN0cywgIFVwOiBUZXN0c3VpdGVzCgo2LjQuNiBTdXBwb3J0IGZvciB0ZXN0aW5nICdnY292JwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKTGFuZ3VhZ2UtaW5kZXBlbmRlbnQgc3VwcG9ydCBmb3IgdGVzdGluZyAnZ2NvdicsIGFuZCBmb3IgY2hlY2tpbmcgdGhhdApicmFuY2ggcHJvZmlsaW5nIHByb2R1Y2VzIGV4cGVjdGVkIHZhbHVlcywgaXMgcHJvdmlkZWQgYnkgdGhlIGV4cGVjdApmaWxlICdnY292LmV4cCcuICAnZ2NvdicgdGVzdHMgYWxzbyByZWx5IG9uIHByb2NlZHVyZXMgaW4gJ2djYy5kZy5leHAnCnRvIGNvbXBpbGUgYW5kIHJ1biB0aGUgdGVzdCBwcm9ncmFtLiAgQSB0eXBpY2FsICdnY292JyB0ZXN0IGNvbnRhaW5zIHRoZQpmb2xsb3dpbmcgRGVqYUdudSBjb21tYW5kcyB3aXRoaW4gY29tbWVudHM6CgogICAgIHsgZGctb3B0aW9ucyAiLWZwcm9maWxlLWFyY3MgLWZ0ZXN0LWNvdmVyYWdlIiB9CiAgICAgeyBkZy1kbyBydW4geyB0YXJnZXQgbmF0aXZlIH0gfQogICAgIHsgZGctZmluYWwgeyBydW4tZ2NvdiBzb3VyY2VmaWxlIH0gfQoKIENoZWNrcyBvZiAnZ2Nvdicgb3V0cHV0IGNhbiBpbmNsdWRlIGxpbmUgY291bnRzLCBicmFuY2ggcGVyY2VudGFnZXMsCmFuZCBjYWxsIHJldHVybiBwZXJjZW50YWdlcy4gIEFsbCBvZiB0aGVzZSBjaGVja3MgYXJlIHJlcXVlc3RlZCB2aWEKY29tbWFuZHMgdGhhdCBhcHBlYXIgaW4gY29tbWVudHMgaW4gdGhlIHRlc3QncyBzb3VyY2UgZmlsZS4gIENvbW1hbmRzIHRvCmNoZWNrIGxpbmUgY291bnRzIGFyZSBwcm9jZXNzZWQgYnkgZGVmYXVsdC4gIENvbW1hbmRzIHRvIGNoZWNrIGJyYW5jaApwZXJjZW50YWdlcyBhbmQgY2FsbCByZXR1cm4gcGVyY2VudGFnZXMgYXJlIHByb2Nlc3NlZCBpZiB0aGUgJ3J1bi1nY292Jwpjb21tYW5kIGhhcyBhcmd1bWVudHMgJ2JyYW5jaGVzJyBvciAnY2FsbHMnLCByZXNwZWN0aXZlbHkuICBGb3IgZXhhbXBsZSwKdGhlIGZvbGxvd2luZyBzcGVjaWZpZXMgY2hlY2tpbmcgYm90aCwgYXMgd2VsbCBhcyBwYXNzaW5nICctYicgdG8KJ2djb3YnOgoKICAgICB7IGRnLWZpbmFsIHsgcnVuLWdjb3YgYnJhbmNoZXMgY2FsbHMgeyAtYiBzb3VyY2VmaWxlIH0gfSB9CgogQSBsaW5lIGNvdW50IGNvbW1hbmQgYXBwZWFycyB3aXRoaW4gYSBjb21tZW50IG9uIHRoZSBzb3VyY2UgbGluZSB0aGF0CmlzIGV4cGVjdGVkIHRvIGdldCB0aGUgc3BlY2lmaWVkIGNvdW50IGFuZCBoYXMgdGhlIGZvcm0gJ2NvdW50KENOVCknLiAgQQp0ZXN0IHNob3VsZCBvbmx5IGNoZWNrIGxpbmUgY291bnRzIGZvciBsaW5lcyB0aGF0IHdpbGwgZ2V0IHRoZSBzYW1lCmNvdW50IGZvciBhbnkgYXJjaGl0ZWN0dXJlLgoKIENvbW1hbmRzIHRvIGNoZWNrIGJyYW5jaCBwZXJjZW50YWdlcyAoJ2JyYW5jaCcpIGFuZCBjYWxsIHJldHVybgpwZXJjZW50YWdlcyAoJ3JldHVybnMnKSBhcmUgdmVyeSBzaW1pbGFyIHRvIGVhY2ggb3RoZXIuICBBIGJlZ2lubmluZwpjb21tYW5kIGFwcGVhcnMgb24gb3IgYmVmb3JlIHRoZSBmaXJzdCBvZiBhIHJhbmdlIG9mIGxpbmVzIHRoYXQgd2lsbApyZXBvcnQgdGhlIHBlcmNlbnRhZ2UsIGFuZCB0aGUgZW5kaW5nIGNvbW1hbmQgZm9sbG93cyB0aGF0IHJhbmdlIG9mCmxpbmVzLiAgVGhlIGJlZ2lubmluZyBjb21tYW5kIGNhbiBpbmNsdWRlIGEgbGlzdCBvZiBwZXJjZW50YWdlcywgYWxsIG9mCndoaWNoIGFyZSBleHBlY3RlZCB0byBiZSBmb3VuZCB3aXRoaW4gdGhlIHJhbmdlLiAgQSByYW5nZSBpcyB0ZXJtaW5hdGVkCmJ5IHRoZSBuZXh0IGNvbW1hbmQgb2YgdGhlIHNhbWUga2luZC4gIEEgY29tbWFuZCAnYnJhbmNoKGVuZCknIG9yCidyZXR1cm5zKGVuZCknIG1hcmtzIHRoZSBlbmQgb2YgYSByYW5nZSB3aXRob3V0IHN0YXJ0aW5nIGEgbmV3IG9uZS4gIEZvcgpleGFtcGxlOgoKICAgICBpZiAoaSA+IDEwICYmIGogPiBpICYmIGogPCAyMCkgIC8qIGJyYW5jaCgyNyA1MCA3NSkgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGJyYW5jaChlbmQpICovCiAgICAgICBmb28gKGksIGopOwoKIEZvciBhIGNhbGwgcmV0dXJuIHBlcmNlbnRhZ2UsIHRoZSB2YWx1ZSBzcGVjaWZpZWQgaXMgdGhlIHBlcmNlbnRhZ2Ugb2YKY2FsbHMgcmVwb3J0ZWQgdG8gcmV0dXJuLiAgRm9yIGEgYnJhbmNoIHBlcmNlbnRhZ2UsIHRoZSB2YWx1ZSBpcyBlaXRoZXIKdGhlIGV4cGVjdGVkIHBlcmNlbnRhZ2Ugb3IgMTAwIG1pbnVzIHRoYXQgdmFsdWUsIHNpbmNlIHRoZSBkaXJlY3Rpb24gb2YKYSBicmFuY2ggY2FuIGRpZmZlciBkZXBlbmRpbmcgb24gdGhlIHRhcmdldCBvciB0aGUgb3B0aW1pemF0aW9uIGxldmVsLgoKIE5vdCBhbGwgYnJhbmNoZXMgYW5kIGNhbGxzIG5lZWQgdG8gYmUgY2hlY2tlZC4gIEEgdGVzdCBzaG91bGQgbm90IGNoZWNrCmZvciBicmFuY2hlcyB0aGF0IG1pZ2h0IGJlIG9wdGltaXplZCBhd2F5IG9yIHJlcGxhY2VkIHdpdGggcHJlZGljYXRlZAppbnN0cnVjdGlvbnMuICBEb24ndCBjaGVjayBmb3IgY2FsbHMgaW5zZXJ0ZWQgYnkgdGhlIGNvbXBpbGVyIG9yIG9uZXMKdGhhdCBtaWdodCBiZSBpbmxpbmVkIG9yIG9wdGltaXplZCBhd2F5LgoKIEEgc2luZ2xlIHRlc3QgY2FuIGNoZWNrIGZvciBjb21iaW5hdGlvbnMgb2YgbGluZSBjb3VudHMsIGJyYW5jaApwZXJjZW50YWdlcywgYW5kIGNhbGwgcmV0dXJuIHBlcmNlbnRhZ2VzLiAgVGhlIGNvbW1hbmQgdG8gY2hlY2sgYSBsaW5lCmNvdW50IG11c3QgYXBwZWFyIG9uIHRoZSBsaW5lIHRoYXQgd2lsbCByZXBvcnQgdGhhdCBjb3VudCwgYnV0IGNvbW1hbmRzCnRvIGNoZWNrIGJyYW5jaCBwZXJjZW50YWdlcyBhbmQgY2FsbCByZXR1cm4gcGVyY2VudGFnZXMgY2FuIGJyYWNrZXQgdGhlCmxpbmVzIHRoYXQgcmVwb3J0IHRoZW0uCgofCkZpbGU6IGdjY2ludC5pbmZvLCAgTm9kZTogcHJvZm9wdCBUZXN0aW5nLCAgTmV4dDogY29tcGF0IFRlc3RpbmcsICBQcmV2OiBnY292IFRlc3RpbmcsICBVcDogVGVzdHN1aXRlcwoKNi40LjcgU3VwcG9ydCBmb3IgdGVzdGluZyBwcm9maWxlLWRpcmVjdGVkIG9wdGltaXphdGlvbnMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KClRoZSBmaWxlICdwcm9mb3B0LmV4cCcgcHJvdmlkZXMgbGFuZ3VhZ2UtaW5kZXBlbmRlbnQgc3VwcG9ydCBmb3IKY2hlY2tpbmcgY29ycmVjdCBleGVjdXRpb24gb2YgYSB0ZXN0IGJ1aWx0IHdpdGggcHJvZmlsZS1kaXJlY3RlZApvcHRpbWl6YXRpb24uICBUaGlzIHRlc3RpbmcgcmVxdWlyZXMgdGhhdCBhIHRlc3QgcHJvZ3JhbSBiZSBidWlsdCBhbmQKZXhlY3V0ZWQgdHdpY2UuICBUaGUgZmlyc3QgdGltZSBpdCBpcyBjb21waWxlZCB0byBnZW5lcmF0ZSBwcm9maWxlIGRhdGEsCmFuZCB0aGUgc2Vjb25kIHRpbWUgaXQgaXMgY29tcGlsZWQgdG8gdXNlIHRoZSBkYXRhIHRoYXQgd2FzIGdlbmVyYXRlZApkdXJpbmcgdGhlIGZpcnN0IGV4ZWN1dGlvbi4gIFRoZSBzZWNvbmQgZXhlY3V0aW9uIGlzIHRvIHZlcmlmeSB0aGF0IHRoZQp0ZXN0IHByb2R1Y2VzIHRoZSBleHBlY3RlZCByZXN1bHRzLgoKIFRvIGNoZWNrIHRoYXQgdGhlIG9wdGltaXphdGlvbiBhY3R1YWxseSBnZW5lcmF0ZWQgYmV0dGVyIGNvZGUsIGEgdGVzdApjYW4gYmUgYnVpbHQgYW5kIHJ1biBhIHRoaXJkIHRpbWUgd2l0aCBub3JtYWwgb3B0aW1pemF0aW9ucyB0byB2ZXJpZnkKdGhhdCB0aGUgcGVyZm9ybWFuY2UgaXMgYmV0dGVyIHdpdGggdGhlIHByb2ZpbGUtZGlyZWN0ZWQgb3B0aW1pemF0aW9ucy4KJ3Byb2ZvcHQuZXhwJyBoYXMgdGhlIGJlZ2lubmluZ3Mgb2YgdGhpcyBraW5kIG9mIHN1cHBvcnQuCgogJ3Byb2ZvcHQuZXhwJyBwcm92aWRlcyBnZW5lcmljIHN1cHBvcnQgZm9yIHByb2ZpbGUtZGlyZWN0ZWQKb3B0aW1pemF0aW9ucy4gIEVhY2ggc2V0IG9mIHRlc3RzIHRoYXQgdXNlcyBpdCBwcm92aWRlcyBpbmZvcm1hdGlvbgphYm91dCBhIHNwZWNpZmljIG9wdGltaXphdGlvbjoKCid0b29sJwogICAgIHRvb2wgYmVpbmcgdGVzdGVkLCBlLmcuLCAnZ2NjJwoKJ3Byb2ZpbGVfb3B0aW9uJwogICAgIG9wdGlvbnMgdXNlZCB0byBnZW5lcmF0ZSBwcm9maWxlIGRhdGEKCidmZWVkYmFja19vcHRpb24nCiAgICAgb3B0aW9ucyB1c2VkIHRvIG9wdGltaXplIHVzaW5nIHRoYXQgcHJvZmlsZSBkYXRhCgoncHJvZl9leHQnCiAgICAgc3VmZml4IG9mIHByb2ZpbGUgZGF0YSBmaWxlcwoKJ1BST0ZPUFRfT1BUSU9OUycKICAgICBsaXN0IG9mIG9wdGlvbnMgd2l0aCB3aGljaCB0byBydW4gZWFjaCB0ZXN0LCBzaW1pbGFyIHRvIHRoZSBsaXN0cwogICAgIGZvciB0b3J0dXJlIHRlc3RzCgofCkZpbGU6IGdjY2ludC5pbmZvLCAgTm9kZTogY29tcGF0IFRlc3RpbmcsICBOZXh0OiBUb3J0dXJlIFRlc3RzLCAgUHJldjogcHJvZm9wdCBUZXN0aW5nLCAgVXA6IFRlc3RzdWl0ZXMKCjYuNC44IFN1cHBvcnQgZm9yIHRlc3RpbmcgYmluYXJ5IGNvbXBhdGliaWxpdHkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKVGhlIGZpbGUgJ2NvbXBhdC5leHAnIHByb3ZpZGVzIGxhbmd1YWdlLWluZGVwZW5kZW50IHN1cHBvcnQgZm9yIGJpbmFyeQpjb21wYXRpYmlsaXR5IHRlc3RpbmcuICBJdCBzdXBwb3J0cyB0ZXN0aW5nIGludGVyb3BlcmFiaWxpdHkgb2YgdHdvCmNvbXBpbGVycyB0aGF0IGZvbGxvdyB0aGUgc2FtZSBBQkksIG9yIG9mIG11bHRpcGxlIHNldHMgb2YgY29tcGlsZXIKb3B0aW9ucyB0aGF0IHNob3VsZCBub3QgYWZmZWN0IGJpbmFyeSBjb21wYXRpYmlsaXR5LiAgSXQgaXMgaW50ZW5kZWQgdG8KYmUgdXNlZCBmb3IgdGVzdHN1aXRlcyB0aGF0IGNvbXBsZW1lbnQgQUJJIHRlc3RzdWl0ZXMuCgogQSB0ZXN0IHN1cHBvcnRlZCBieSB0aGlzIGZyYW1ld29yayBoYXMgdGhyZWUgcGFydHMsIGVhY2ggaW4gYSBzZXBhcmF0ZQpzb3VyY2UgZmlsZTogYSBtYWluIHByb2dyYW0gYW5kIHR3byBwaWVjZXMgdGhhdCBpbnRlcmFjdCB3aXRoIGVhY2ggb3RoZXIKdG8gc3BsaXQgdXAgdGhlIGZ1bmN0aW9uYWxpdHkgYmVpbmcgdGVzdGVkLgoKJ1RFU1ROQU1FX21haW4uU1VGRklYJwogICAgIENvbnRhaW5zIHRoZSBtYWluIHByb2dyYW0sIHdoaWNoIGNhbGxzIGEgZnVuY3Rpb24gaW4gZmlsZQogICAgICdURVNUTkFNRV94LlNVRkZJWCcuCgonVEVTVE5BTUVfeC5TVUZGSVgnCiAgICAgQ29udGFpbnMgYXQgbGVhc3Qgb25lIGNhbGwgdG8gYSBmdW5jdGlvbiBpbiAnVEVTVE5BTUVfeS5TVUZGSVgnLgoKJ1RFU1ROQU1FX3kuU1VGRklYJwogICAgIFNoYXJlcyBkYXRhIHdpdGgsIG9yIGdldHMgYXJndW1lbnRzIGZyb20sICdURVNUTkFNRV94LlNVRkZJWCcuCgogV2l0aGluIGVhY2ggdGVzdCwgdGhlIG1haW4gcHJvZ3JhbSBhbmQgb25lIGZ1bmN0aW9uYWwgcGllY2UgYXJlCmNvbXBpbGVkIGJ5IHRoZSBHQ0MgdW5kZXIgdGVzdC4gIFRoZSBvdGhlciBwaWVjZSBjYW4gYmUgY29tcGlsZWQgYnkgYW4KYWx0ZXJuYXRlIGNvbXBpbGVyLiAgSWYgbm8gYWx0ZXJuYXRlIGNvbXBpbGVyIGlzIHNwZWNpZmllZCwgdGhlbiBhbGwKdGhyZWUgc291cmNlIGZpbGVzIGFyZSBhbGwgY29tcGlsZWQgYnkgdGhlIEdDQyB1bmRlciB0ZXN0LiAgWW91IGNhbgpzcGVjaWZ5IHBhaXJzIG9mIHNldHMgb2YgY29tcGlsZXIgb3B0aW9ucy4gIFRoZSBmaXJzdCBlbGVtZW50IG9mIHN1Y2ggYQpwYWlyIHNwZWNpZmllcyBvcHRpb25zIHVzZWQgd2l0aCB0aGUgR0NDIHVuZGVyIHRlc3QsIGFuZCB0aGUgc2Vjb25kCmVsZW1lbnQgb2YgdGhlIHBhaXIgc3BlY2lmaWVzIG9wdGlvbnMgdXNlZCB3aXRoIHRoZSBhbHRlcm5hdGUgY29tcGlsZXIuCkVhY2ggdGVzdCBpcyBjb21waWxlZCB3aXRoIGVhY2ggcGFpciBvZiBvcHRpb25zLgoKICdjb21wYXQuZXhwJyBkZWZpbmVzIGRlZmF1bHQgcGFpcnMgb2YgY29tcGlsZXIgb3B0aW9ucy4gIFRoZXNlIGNhbiBiZQpvdmVycmlkZGVuIGJ5IGRlZmluaW5nIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSAnQ09NUEFUX09QVElPTlMnIGFzOgoKICAgICBDT01QQVRfT1BUSU9OUz0iW2xpc3QgW2xpc3Qge1RTVDF9IHtBTFQxfV0KICAgICAgIC4uLltsaXN0IHtUU1ROfSB7QUxUTn1dXSIKCiB3aGVyZSBUU1RJIGFuZCBBTFRJIGFyZSBsaXN0cyBvZiBvcHRpb25zLCB3aXRoIFRTVEkgdXNlZCBieSB0aGUKY29tcGlsZXIgdW5kZXIgdGVzdCBhbmQgQUxUSSB1c2VkIGJ5IHRoZSBhbHRlcm5hdGUgY29tcGlsZXIuICBGb3IKZXhhbXBsZSwgd2l0aCAnW2xpc3QgW2xpc3Qgey1nIC1PMH0gey1PM31dIFtsaXN0IHstZnBpY30gey1mUElDIC1PMn1dXScsCnRoZSB0ZXN0IGlzIGZpcnN0IGJ1aWx0IHdpdGggJy1nIC1PMCcgYnkgdGhlIGNvbXBpbGVyIHVuZGVyIHRlc3QgYW5kCndpdGggJy1PMycgYnkgdGhlIGFsdGVybmF0ZSBjb21waWxlci4gIFRoZSB0ZXN0IGlzIGJ1aWx0IGEgc2Vjb25kIHRpbWUKdXNpbmcgJy1mcGljJyBieSB0aGUgY29tcGlsZXIgdW5kZXIgdGVzdCBhbmQgJy1mUElDIC1PMicgYnkgdGhlCmFsdGVybmF0ZSBjb21waWxlci4KCiBBbiBhbHRlcm5hdGUgY29tcGlsZXIgaXMgc3BlY2lmaWVkIGJ5IGRlZmluaW5nIGFuIGVudmlyb25tZW50IHZhcmlhYmxlCnRvIGJlIHRoZSBmdWxsIHBhdGhuYW1lIG9mIGFuIGluc3RhbGxlZCBjb21waWxlcjsgZm9yIEMgZGVmaW5lCidBTFRfQ0NfVU5ERVJfVEVTVCcsIGFuZCBmb3IgQysrIGRlZmluZSAnQUxUX0NYWF9VTkRFUl9URVNUJy4gIFRoZXNlCndpbGwgYmUgd3JpdHRlbiB0byB0aGUgJ3NpdGUuZXhwJyBmaWxlIHVzZWQgYnkgRGVqYUdudS4gIFRoZSBkZWZhdWx0IGlzCnRvIGJ1aWxkIGVhY2ggdGVzdCB3aXRoIHRoZSBjb21waWxlciB1bmRlciB0ZXN0IHVzaW5nIHRoZSBmaXJzdCBvZiBlYWNoCnBhaXIgb2YgY29tcGlsZXIgb3B0aW9ucyBmcm9tICdDT01QQVRfT1BUSU9OUycuICBXaGVuCidBTFRfQ0NfVU5ERVJfVEVTVCcgb3IgJ0FMVF9DWFhfVU5ERVJfVEVTVCcgaXMgJ3NhbWUnLCBlYWNoIHRlc3QgaXMKYnVpbHQgdXNpbmcgdGhlIGNvbXBpbGVyIHVuZGVyIHRlc3QgYnV0IHdpdGggY29tYmluYXRpb25zIG9mIHRoZSBvcHRpb25zCmZyb20gJ0NPTVBBVF9PUFRJT05TJy4KCiBUbyBydW4gb25seSB0aGUgQysrIGNvbXBhdGliaWxpdHkgc3VpdGUgdXNpbmcgdGhlIGNvbXBpbGVyIHVuZGVyIHRlc3QKYW5kIGFub3RoZXIgdmVyc2lvbiBvZiBHQ0MgdXNpbmcgc3BlY2lmaWMgY29tcGlsZXIgb3B0aW9ucywgZG8gdGhlCmZvbGxvd2luZyBmcm9tICdPQkpESVIvZ2NjJzoKCiAgICAgcm0gc2l0ZS5leHAKICAgICBtYWtlIC1rIFwKICAgICAgIEFMVF9DWFhfVU5ERVJfVEVTVD0ke2FsdF9wcmVmaXh9L2Jpbi9nKysgXAogICAgICAgQ09NUEFUX09QVElPTlM9Imxpc3RzIGFzIHNob3duIGFib3ZlIiBcCiAgICAgICBjaGVjay1jKysgXAogICAgICAgUlVOVEVTVEZMQUdTPSJjb21wYXQuZXhwIgoKIEEgdGVzdCB0aGF0IGZhaWxzIHdoZW4gdGhlIHNvdXJjZSBmaWxlcyBhcmUgY29tcGlsZWQgd2l0aCBkaWZmZXJlbnQKY29tcGlsZXJzLCBidXQgcGFzc2VzIHdoZW4gdGhlIGZpbGVzIGFyZSBjb21waWxlZCB3aXRoIHRoZSBzYW1lCmNvbXBpbGVyLCBkZW1vbnN0cmF0ZXMgaW5jb21wYXRpYmlsaXR5IG9mIHRoZSBnZW5lcmF0ZWQgY29kZSBvciBydW50aW1lCnN1cHBvcnQuICBBIHRlc3QgdGhhdCBmYWlscyBmb3IgdGhlIGFsdGVybmF0ZSBjb21waWxlciBidXQgcGFzc2VzIGZvcgp0aGUgY29tcGlsZXIgdW5kZXIgdGVzdCBwcm9iYWJseSB0ZXN0cyBmb3IgYSBidWcgdGhhdCB3YXMgZml4ZWQgaW4gdGhlCmNvbXBpbGVyIHVuZGVyIHRlc3QgYnV0IGlzIHByZXNlbnQgaW4gdGhlIGFsdGVybmF0ZSBjb21waWxlci4KCiBUaGUgYmluYXJ5IGNvbXBhdGliaWxpdHkgdGVzdHMgc3VwcG9ydCBhIHNtYWxsIG51bWJlciBvZiB0ZXN0IGZyYW1ld29yawpjb21tYW5kcyB0aGF0IGFwcGVhciB3aXRoaW4gY29tbWVudHMgaW4gYSB0ZXN0IGZpbGUuCgonZGctcmVxdWlyZS0qJwogICAgIFRoZXNlIGNvbW1hbmRzIGNhbiBiZSB1c2VkIGluICdURVNUTkFNRV9tYWluLlNVRkZJWCcgdG8gc2tpcCB0aGUKICAgICB0ZXN0IGlmIHNwZWNpZmljIHN1cHBvcnQgaXMgbm90IGF2YWlsYWJsZSBvbiB0aGUgdGFyZ2V0LgoKJ2RnLW9wdGlvbnMnCiAgICAgVGhlIHNwZWNpZmllZCBvcHRpb25zIGFyZSB1c2VkIGZvciBjb21waWxpbmcgdGhpcyBwYXJ0aWN1bGFyIHNvdXJjZQogICAgIGZpbGUsIGFwcGVuZGVkIHRvIHRoZSBvcHRpb25zIGZyb20gJ0NPTVBBVF9PUFRJT05TJy4gIFdoZW4gdGhpcwogICAgIGNvbW1hbmQgYXBwZWFycyBpbiAnVEVTVE5BTUVfbWFpbi5TVUZGSVgnIHRoZSBvcHRpb25zIGFyZSBhbHNvIHVzZWQKICAgICB0byBsaW5rIHRoZSB0ZXN0IHByb2dyYW0uCgonZGcteGZhaWwtaWYnCiAgICAgVGhpcyBjb21tYW5kIGNhbiBiZSB1c2VkIGluIGEgc2Vjb25kYXJ5IHNvdXJjZSBmaWxlIHRvIHNwZWNpZnkgdGhhdAogICAgIGNvbXBpbGF0aW9uIGlzIGV4cGVjdGVkIHRvIGZhaWwgZm9yIHBhcnRpY3VsYXIgb3B0aW9ucyBvbgogICAgIHBhcnRpY3VsYXIgdGFyZ2V0cy4KCh8KRmlsZTogZ2NjaW50LmluZm8sICBOb2RlOiBUb3J0dXJlIFRlc3RzLCAgUHJldjogY29tcGF0IFRlc3RpbmcsICBVcDogVGVzdHN1aXRlcwoKNi40LjkgU3VwcG9ydCBmb3IgdG9ydHVyZSB0ZXN0aW5nIHVzaW5nIG11bHRpcGxlIG9wdGlvbnMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KClRocm91Z2hvdXQgdGhlIGNvbXBpbGVyIHRlc3RzdWl0ZSB0aGVyZSBhcmUgc2V2ZXJhbCBkaXJlY3RvcmllcyB3aG9zZQp0ZXN0cyBhcmUgcnVuIG11bHRpcGxlIHRpbWVzLCBlYWNoIHdpdGggYSBkaWZmZXJlbnQgc2V0IG9mIG9wdGlvbnMuClRoZXNlIGFyZSBrbm93biBhcyB0b3J0dXJlIHRlc3RzLgonZ2NjL3Rlc3RzdWl0ZS9saWIvdG9ydHVyZS1vcHRpb25zLmV4cCcgZGVmaW5lcyBwcm9jZWR1cmVzIHRvIHNldCB1cAp0aGVzZSBsaXN0czoKCid0b3J0dXJlLWluaXQnCiAgICAgSW5pdGlhbGl6ZSB1c2Ugb2YgdG9ydHVyZSBsaXN0cy4KJ3NldC10b3J0dXJlLW9wdGlvbnMnCiAgICAgU2V0IGxpc3RzIG9mIHRvcnR1cmUgb3B0aW9ucyB0byB1c2UgZm9yIHRlc3RzIHdpdGggYW5kIHdpdGhvdXQKICAgICBsb29wcy4gIE9wdGlvbmFsbHkgY29tYmluZSBhIHNldCBvZiB0b3J0dXJlIG9wdGlvbnMgd2l0aCBhIHNldCBvZgogICAgIG90aGVyIG9wdGlvbnMsIGFzIGlzIGRvbmUgd2l0aCBPYmplY3RpdmUtQyBydW50aW1lIG9wdGlvbnMuCid0b3J0dXJlLWZpbmlzaCcKICAgICBGaW5hbGl6ZSB1c2Ugb2YgdG9ydHVyZSBsaXN0cy4KCiBUaGUgJy5leHAnIGZpbGUgZm9yIGEgc2V0IG9mIHRlc3RzIHRoYXQgdXNlIHRvcnR1cmUgb3B0aW9ucyBtdXN0CmluY2x1ZGUgY2FsbHMgdG8gdGhlc2UgdGhyZWUgcHJvY2VjdXJlcyBpZjoKCiAgICogSXQgY2FsbHMgJ2djYy1kZy1ydW50ZXN0JyBhbmQgb3ZlcnJpZGVzIERHX1RPUlRVUkVfT1BUSU9OUy4KCiAgICogSXQgY2FsbHMgJHtUT09MfSctdG9ydHVyZScgb3IgJHtUT09MfSctdG9ydHVyZS1leGVjdXRlJywgd2hlcmUgVE9PTAogICAgIGlzICdjJywgJ2ZvcnRyYW4nLCBvciAnb2JqYycuCgogICAqIEl0IGNhbGxzICdkZy1wY2gnLgoKIEl0IGlzIG5vdCBuZWNlc3NhcnkgZm9yIGEgJy5leHAnIGZpbGUgdGhhdCBjYWxscyAnZ2NjLWRnLXJ1bnRlc3QnIHRvCmNhbGwgdGhlIHRvcnR1cmUgcHJvY2VkdXJlcyBpZiB0aGUgdGVzdHMgc2hvdWxkIHVzZSB0aGUgbGlzdCBpbgpER19UT1JUVVJFX09QVElPTlMgZGVmaW5lZCBpbiAnZ2NjLWRnLmV4cCcuCgogTW9zdCB1c2VzIG9mIHRvcnR1cmUgb3B0aW9ucyBjYW4gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgbGlzdHMgYnkgZGVmaW5pbmcKVE9SVFVSRV9PUFRJT05TIGluIGEgJy5kZWphZ251cmMnIGZpbGUuCgofCkZpbGU6IGdjY2ludC5pbmZvLCAgTm9kZTogT3B0aW9ucywgIE5leHQ6IFBhc3NlcywgIFByZXY6IFNvdXJjZSBUcmVlLCAgVXA6IFRvcAoKNyBPcHRpb24gc3BlY2lmaWNhdGlvbiBmaWxlcwoqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgpNb3N0IEdDQyBjb21tYW5kLWxpbmUgb3B0aW9ucyBhcmUgZGVzY3JpYmVkIGJ5IHNwZWNpYWwgb3B0aW9uIGRlZmluaXRpb24KZmlsZXMsIHRoZSBuYW1lcyBvZiB3aGljaCBjb252ZW50aW9uYWxseSBlbmQgaW4gJy5vcHQnLiAgVGhpcyBjaGFwdGVyCmRlc2NyaWJlcyB0aGUgZm9ybWF0IG9mIHRoZXNlIGZpbGVzLgoKKiBNZW51OgoKKiBPcHRpb24gZmlsZSBmb3JtYXQ6OiAgIFRoZSBnZW5lcmFsIGxheW91dCBvZiB0aGUgZmlsZXMKKiBPcHRpb24gcHJvcGVydGllczo6ICAgIFN1cHBvcnRlZCBvcHRpb24gcHJvcGVydGllcwoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IE9wdGlvbiBmaWxlIGZvcm1hdCwgIE5leHQ6IE9wdGlvbiBwcm9wZXJ0aWVzLCAgVXA6IE9wdGlvbnMKCjcuMSBPcHRpb24gZmlsZSBmb3JtYXQKPT09PT09PT09PT09PT09PT09PT09PQoKT3B0aW9uIGZpbGVzIGFyZSBhIHNpbXBsZSBsaXN0IG9mIHJlY29yZHMgaW4gd2hpY2ggZWFjaCBmaWVsZCBvY2N1cGllcwppdHMgb3duIGxpbmUgYW5kIGluIHdoaWNoIHRoZSByZWNvcmRzIHRoZW1zZWx2ZXMgYXJlIHNlcGFyYXRlZCBieSBibGFuawpsaW5lcy4gIENvbW1lbnRzIG1heSBhcHBlYXIgb24gdGhlaXIgb3duIGxpbmUgYW55d2hlcmUgd2l0aGluIHRoZSBmaWxlCmFuZCBhcmUgcHJlY2VkZWQgYnkgc2VtaWNvbG9ucy4gIFdoaXRlc3BhY2UgaXMgYWxsb3dlZCBiZWZvcmUgdGhlCnNlbWljb2xvbi4KCiBUaGUgZmlsZXMgY2FuIGNvbnRhaW4gdGhlIGZvbGxvd2luZyB0eXBlcyBvZiByZWNvcmQ6CgogICAqIEEgbGFuZ3VhZ2UgZGVmaW5pdGlvbiByZWNvcmQuICCgVGhlc2UgcmVjb3JkcyBoYXZlIHR3byBmaWVsZHM6IHRoZQogICAgIHN0cmluZyAnTGFuZ3VhZ2UnIGFuZCB0aGUgbmFtZSBvZiB0aGUgbGFuZ3VhZ2UuICCgT25jZSBhIGxhbmd1YWdlCiAgICAgaGFzIGJlZW4gZGVjbGFyZWQgaW4gdGhpcyB3YXksIGl0IGNhbiBiZSB1c2VkIGFzIGFuIG9wdGlvbgogICAgIHByb3BlcnR5LiAgKk5vdGUgT3B0aW9uIHByb3BlcnRpZXM6Oi4KCiAgICogQW4gb3B0aW9uIGRlZmluaXRpb24gcmVjb3JkLiAgoFRoZXNlIHJlY29yZHMgaGF2ZSB0aGUgZm9sbG93aW5nCiAgICAgZmllbGRzOgoKICAgICAgIDEuIHRoZSBuYW1lIG9mIHRoZSBvcHRpb24sIHdpdGggdGhlIGxlYWRpbmcgIi0iIHJlbW92ZWQKICAgICAgIDIuIGEgc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2Ygb3B0aW9uIHByb3BlcnRpZXMgKCpub3RlIE9wdGlvbgogICAgICAgICAgcHJvcGVydGllczo6KQogICAgICAgMy4gdGhlIGhlbHAgdGV4dCB0byB1c2UgZm9yICctLWhlbHAnIChvbWl0dGVkIGlmIHRoZSBzZWNvbmQgZmllbGQKICAgICAgICAgIGNvbnRhaW5zIHRoZSAnVW5kb2N1bWVudGVkJyBwcm9wZXJ0eSkuCgogICAgIEJ5IGRlZmF1bHQsIGFsbCBvcHRpb25zIGJlZ2lubmluZyB3aXRoICJmIiwgIlciIG9yICJtIiBhcmUKICAgICBpbXBsaWNpdGx5IGFzc3VtZWQgdG8gdGFrZSBhICJuby0iIGZvcm0uICBUaGlzIGZvcm0gc2hvdWxkIG5vdCBiZQogICAgIGxpc3RlZCBzZXBhcmF0ZWx5LiAgSWYgYW4gb3B0aW9uIGJlZ2lubmluZyB3aXRoIG9uZSBvZiB0aGVzZQogICAgIGxldHRlcnMgZG9lcyBub3QgaGF2ZSBhICJuby0iIGZvcm0sIHlvdSBjYW4gdXNlIHRoZQogICAgICdSZWplY3ROZWdhdGl2ZScgcHJvcGVydHkgdG8gcmVqZWN0IGl0LgoKICAgICBUaGUgaGVscCB0ZXh0IGlzIGF1dG9tYXRpY2FsbHkgbGluZS13cmFwcGVkIGJlZm9yZSBiZWluZyBkaXNwbGF5ZWQuCiAgICAgTm9ybWFsbHkgdGhlIG5hbWUgb2YgdGhlIG9wdGlvbiBpcyBwcmludGVkIG9uIHRoZSBsZWZ0LWhhbmQgc2lkZSBvZgogICAgIHRoZSBvdXRwdXQgYW5kIHRoZSBoZWxwIHRleHQgaXMgcHJpbnRlZCBvbiB0aGUgcmlnaHQuICBIb3dldmVyLCBpZgogICAgIHRoZSBoZWxwIHRleHQgY29udGFpbnMgYSB0YWIgY2hhcmFjdGVyLCB0aGUgdGV4dCB0byB0aGUgbGVmdCBvZiB0aGUKICAgICB0YWIgaXMgdXNlZCBpbnN0ZWFkIG9mIHRoZSBvcHRpb24ncyBuYW1lIGFuZCB0aGUgdGV4dCB0byB0aGUgcmlnaHQKICAgICBvZiB0aGUgdGFiIGZvcm1zIHRoZSBoZWxwIHRleHQuICBUaGlzIGFsbG93cyB5b3UgdG8gZWxhYm9yYXRlIG9uCiAgICAgd2hhdCB0eXBlIG9mIGFyZ3VtZW50IHRoZSBvcHRpb24gdGFrZXMuCgogICAqIEEgdGFyZ2V0IG1hc2sgcmVjb3JkLiAgoFRoZXNlIHJlY29yZHMgaGF2ZSBvbmUgZmllbGQgb2YgdGhlIGZvcm0KICAgICAnTWFzayhYKScuICCgVGhlIG9wdGlvbnMtcHJvY2Vzc2luZyBzY3JpcHQgd2lsbCBhdXRvbWF0aWNhbGx5CiAgICAgYWxsb2NhdGUgYSBiaXQgaW4gJ3RhcmdldF9mbGFncycgKCpub3RlIFJ1bi10aW1lIFRhcmdldDo6KSBmb3IgZWFjaAogICAgIG1hc2sgbmFtZSBYIGFuZCBzZXQgdGhlIG1hY3JvICdNQVNLX1gnIHRvIHRoZSBhcHByb3ByaWF0ZSBiaXRtYXNrLgogICAgIKBJdCB3aWxsIGFsc28gZGVjbGFyZSBhICdUQVJHRVRfWCcgbWFjcm8gdGhhdCBoYXMgdGhlIHZhbHVlIDEgd2hlbgogICAgIGJpdCAnTUFTS19YJyBpcyBzZXQgYW5kIDAgb3RoZXJ3aXNlLgoKICAgICBUaGV5IGFyZSBwcmltYXJpbHkgaW50ZW5kZWQgdG8gZGVjbGFyZSB0YXJnZXQgbWFza3MgdGhhdCBhcmUgbm90CiAgICAgYXNzb2NpYXRlZCB3aXRoIHVzZXIgb3B0aW9ucywgZWl0aGVyIGJlY2F1c2UgdGhlc2UgbWFza3MgcmVwcmVzZW50CiAgICAgaW50ZXJuYWwgc3dpdGNoZXMgb3IgYmVjYXVzZSB0aGUgb3B0aW9ucyBhcmUgbm90IGF2YWlsYWJsZSBvbiBhbGwKICAgICBjb25maWd1cmF0aW9ucyBhbmQgeWV0IHRoZSBtYXNrcyBhbHdheXMgbmVlZCB0byBiZSBkZWZpbmVkLgoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IE9wdGlvbiBwcm9wZXJ0aWVzLCAgUHJldjogT3B0aW9uIGZpbGUgZm9ybWF0LCAgVXA6IE9wdGlvbnMKCjcuMiBPcHRpb24gcHJvcGVydGllcwo9PT09PT09PT09PT09PT09PT09PT0KClRoZSBzZWNvbmQgZmllbGQgb2YgYW4gb3B0aW9uIHJlY29yZCBjYW4gc3BlY2lmeSB0aGUgZm9sbG93aW5nCnByb3BlcnRpZXM6CgonQ29tbW9uJwogICAgIFRoZSBvcHRpb24gaXMgYXZhaWxhYmxlIGZvciBhbGwgbGFuZ3VhZ2VzIGFuZCB0YXJnZXRzLgoKJ1RhcmdldCcKICAgICBUaGUgb3B0aW9uIGlzIGF2YWlsYWJsZSBmb3IgYWxsIGxhbmd1YWdlcyBidXQgaXMgdGFyZ2V0LXNwZWNpZmljLgoKJ0xBTkdVQUdFJwogICAgIFRoZSBvcHRpb24gaXMgYXZhaWxhYmxlIHdoZW4gY29tcGlsaW5nIGZvciB0aGUgZ2l2ZW4gbGFuZ3VhZ2UuCgogICAgIEl0IGlzIHBvc3NpYmxlIHRvIHNwZWNpZnkgc2V2ZXJhbCBkaWZmZXJlbnQgbGFuZ3VhZ2VzIGZvciB0aGUgc2FtZQogICAgIG9wdGlvbi4gIEVhY2ggTEFOR1VBR0UgbXVzdCBoYXZlIGJlZW4gZGVjbGFyZWQgYnkgYW4gZWFybGllcgogICAgICdMYW5ndWFnZScgcmVjb3JkLiAgKk5vdGUgT3B0aW9uIGZpbGUgZm9ybWF0OjouCgonUmVqZWN0TmVnYXRpdmUnCiAgICAgVGhlIG9wdGlvbiBkb2VzIG5vdCBoYXZlIGEgIm5vLSIgZm9ybS4gIEFsbCBvcHRpb25zIGJlZ2lubmluZyB3aXRoCiAgICAgImYiLCAiVyIgb3IgIm0iIGFyZSBhc3N1bWVkIHRvIGhhdmUgYSAibm8tIiBmb3JtIHVubGVzcyB0aGlzCiAgICAgcHJvcGVydHkgaXMgdXNlZC4KCidOZWdhdGl2ZShPVEhFUk5BTUUpJwogICAgIFRoZSBvcHRpb24gd2lsbCB0dXJuIG9mZiBhbm90aGVyIG9wdGlvbiBPVEhFUk5BTUUsIHdoaWNoIGlzIHRoZSB0aGUKICAgICBvcHRpb24gbmFtZSB3aXRoIHRoZSBsZWFkaW5nICItIiByZW1vdmVkLiAgVGhpcyBjaGFpbiBhY3Rpb24gd2lsbAogICAgIHByb3BhZ2F0ZSB0aHJvdWdoIHRoZSAnTmVnYXRpdmUnIHByb3BlcnR5IG9mIHRoZSBvcHRpb24gdG8gYmUKICAgICB0dXJuZWQgb2ZmLgoKJ0pvaW5lZCcKJ1NlcGFyYXRlJwogICAgIFRoZSBvcHRpb24gdGFrZXMgYSBtYW5kYXRvcnkgYXJndW1lbnQuICAnSm9pbmVkJyBpbmRpY2F0ZXMgdGhhdCB0aGUKICAgICBvcHRpb24gYW5kIGFyZ3VtZW50IGNhbiBiZSBpbmNsdWRlZCBpbiB0aGUgc2FtZSAnYXJndicgZW50cnkgKGFzCiAgICAgd2l0aCAnLW1mbHVzaC1mdW5jPU5BTUUnLCBmb3IgZXhhbXBsZSkuICAnU2VwYXJhdGUnIGluZGljYXRlcyB0aGF0CiAgICAgdGhlIG9wdGlvbiBhbmQgYXJndW1lbnQgY2FuIGJlIHNlcGFyYXRlICdhcmd2JyBlbnRyaWVzIChhcyB3aXRoCiAgICAgJy1vJykuICBBbiBvcHRpb24gaXMgYWxsb3dlZCB0byBoYXZlIGJvdGggb2YgdGhlc2UgcHJvcGVydGllcy4KCidKb2luZWRPck1pc3NpbmcnCiAgICAgVGhlIG9wdGlvbiB0YWtlcyBhbiBvcHRpb25hbCBhcmd1bWVudC4gIElmIHRoZSBhcmd1bWVudCBpcyBnaXZlbiwKICAgICBpdCB3aWxsIGJlIHBhcnQgb2YgdGhlIHNhbWUgJ2FyZ3YnIGVudHJ5IGFzIHRoZSBvcHRpb24gaXRzZWxmLgoKICAgICBUaGlzIHByb3BlcnR5IGNhbm5vdCBiZSB1c2VkIGFsb25nc2lkZSAnSm9pbmVkJyBvciAnU2VwYXJhdGUnLgoKJ1VJbnRlZ2VyJwogICAgIFRoZSBvcHRpb24ncyBhcmd1bWVudCBpcyBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyLiAgVGhlIG9wdGlvbiBwYXJzZXIKICAgICB3aWxsIGNoZWNrIGFuZCBjb252ZXJ0IHRoZSBhcmd1bWVudCBiZWZvcmUgcGFzc2luZyBpdCB0byB0aGUKICAgICByZWxldmFudCBvcHRpb24gaGFuZGxlci4KCidWYXIoVkFSKScKICAgICBUaGUgc3RhdGUgb2YgdGhpcyBvcHRpb24gc2hvdWxkIGJlIHN0b3JlZCBpbiB2YXJpYWJsZSBWQVIuICBUaGUgd2F5CiAgICAgdGhhdCB0aGUgc3RhdGUgaXMgc3RvcmVkIGRlcGVuZHMgb24gdGhlIHR5cGUgb2Ygb3B0aW9uOgoKICAgICAgICAqIElmIHRoZSBvcHRpb24gdXNlcyB0aGUgJ01hc2snIG9yICdJbnZlcnNlTWFzaycgcHJvcGVydGllcywgVkFSCiAgICAgICAgICBpcyB0aGUgaW50ZWdlciB2YXJpYWJsZSB0aGF0IGNvbnRhaW5zIHRoZSBtYXNrLgoKICAgICAgICAqIElmIHRoZSBvcHRpb24gaXMgYSBub3JtYWwgb24vb2ZmIHN3aXRjaCwgVkFSIGlzIGFuIGludGVnZXIKICAgICAgICAgIHZhcmlhYmxlIHRoYXQgaXMgbm9uemVybyB3aGVuIHRoZSBvcHRpb24gaXMgZW5hYmxlZC4gIFRoZQogICAgICAgICAgb3B0aW9ucyBwYXJzZXIgd2lsbCBzZXQgdGhlIHZhcmlhYmxlIHRvIDEgd2hlbiB0aGUgcG9zaXRpdmUKICAgICAgICAgIGZvcm0gb2YgdGhlIG9wdGlvbiBpcyB1c2VkIGFuZCAwIHdoZW4gdGhlICJuby0iIGZvcm0gaXMgdXNlZC4KCiAgICAgICAgKiBJZiB0aGUgb3B0aW9uIHRha2VzIGFuIGFyZ3VtZW50IGFuZCBoYXMgdGhlICdVSW50ZWdlcicKICAgICAgICAgIHByb3BlcnR5LCBWQVIgaXMgYW4gaW50ZWdlciB2YXJpYWJsZSB0aGF0IHN0b3JlcyB0aGUgdmFsdWUgb2YKICAgICAgICAgIHRoZSBhcmd1bWVudC4KCiAgICAgICAgKiBPdGhlcndpc2UsIGlmIHRoZSBvcHRpb24gdGFrZXMgYW4gYXJndW1lbnQsIFZBUiBpcyBhIHBvaW50ZXIKICAgICAgICAgIHRvIHRoZSBhcmd1bWVudCBzdHJpbmcuICBUaGUgcG9pbnRlciB3aWxsIGJlIG51bGwgaWYgdGhlCiAgICAgICAgICBhcmd1bWVudCBpcyBvcHRpb25hbCBhbmQgd2Fzbid0IGdpdmVuLgoKICAgICBUaGUgb3B0aW9uLXByb2Nlc3Npbmcgc2NyaXB0IHdpbGwgdXN1YWxseSBkZWNsYXJlIFZBUiBpbgogICAgICdvcHRpb25zLmMnIGFuZCBsZWF2ZSBpdCB0byBiZSB6ZXJvLWluaXRpYWxpemVkIGF0IHN0YXJ0LXVwIHRpbWUuCiAgICAgWW91IGNhbiBtb2RpZnkgdGhpcyBiZWhhdmlvciB1c2luZyAnVmFyRXhpc3RzJyBhbmQgJ0luaXQnLgoKJ1ZhcihWQVIsIFNFVCknCiAgICAgVGhlIG9wdGlvbiBjb250cm9scyBhbiBpbnRlZ2VyIHZhcmlhYmxlIFZBUiBhbmQgaXMgYWN0aXZlIHdoZW4gVkFSCiAgICAgZXF1YWxzIFNFVC4gIFRoZSBvcHRpb24gcGFyc2VyIHdpbGwgc2V0IFZBUiB0byBTRVQgd2hlbiB0aGUKICAgICBwb3NpdGl2ZSBmb3JtIG9mIHRoZSBvcHRpb24gaXMgdXNlZCBhbmQgJyFTRVQnIHdoZW4gdGhlICJuby0iIGZvcm0KICAgICBpcyB1c2VkLgoKICAgICBWQVIgaXMgZGVjbGFyZWQgaW4gdGhlIHNhbWUgd2F5IGFzIGZvciB0aGUgc2luZ2xlLWFyZ3VtZW50IGZvcm0KICAgICBkZXNjcmliZWQgYWJvdmUuCgonVmFyRXhpc3RzJwogICAgIFRoZSB2YXJpYWJsZSBzcGVjaWZpZWQgYnkgdGhlICdWYXInIHByb3BlcnR5IGFscmVhZHkgZXhpc3RzLiAgTm8KICAgICBkZWZpbml0aW9uIHNob3VsZCBiZSBhZGRlZCB0byAnb3B0aW9ucy5jJyBpbiByZXNwb25zZSB0byB0aGlzCiAgICAgb3B0aW9uIHJlY29yZC4KCiAgICAgWW91IHNob3VsZCB1c2UgdGhpcyBwcm9wZXJ0eSBvbmx5IGlmIHRoZSB2YXJpYWJsZSBpcyBkZWNsYXJlZAogICAgIG91dHNpZGUgJ29wdGlvbnMuYycuCgonSW5pdChWQUxVRSknCiAgICAgVGhlIHZhcmlhYmxlIHNwZWNpZmllZCBieSB0aGUgJ1ZhcicgcHJvcGVydHkgc2hvdWxkIGJlIHN0YXRpY2FsbHkKICAgICBpbml0aWFsaXplZCB0byBWQUxVRS4KCidNYXNrKE5BTUUpJwogICAgIFRoZSBvcHRpb24gaXMgYXNzb2NpYXRlZCB3aXRoIGEgYml0IGluIHRoZSAndGFyZ2V0X2ZsYWdzJyB2YXJpYWJsZQogICAgICgqbm90ZSBSdW4tdGltZSBUYXJnZXQ6OikgYW5kIGlzIGFjdGl2ZSB3aGVuIHRoYXQgYml0IGlzIHNldC4gIFlvdQogICAgIG1heSBhbHNvIHNwZWNpZnkgJ1ZhcicgdG8gc2VsZWN0IGEgdmFyaWFibGUgb3RoZXIgdGhhbgogICAgICd0YXJnZXRfZmxhZ3MnLgoKICAgICBUaGUgb3B0aW9ucy1wcm9jZXNzaW5nIHNjcmlwdCB3aWxsIGF1dG9tYXRpY2FsbHkgYWxsb2NhdGUgYSB1bmlxdWUKICAgICBiaXQgZm9yIHRoZSBvcHRpb24uICBJZiB0aGUgb3B0aW9uIGlzIGF0dGFjaGVkIHRvICd0YXJnZXRfZmxhZ3MnLAogICAgIHRoZSBzY3JpcHQgd2lsbCBzZXQgdGhlIG1hY3JvICdNQVNLX05BTUUnIHRvIHRoZSBhcHByb3ByaWF0ZQogICAgIGJpdG1hc2suICBJdCB3aWxsIGFsc28gZGVjbGFyZSBhICdUQVJHRVRfTkFNRScgbWFjcm8gdGhhdCBoYXMgdGhlCiAgICAgdmFsdWUgMSB3aGVuIHRoZSBvcHRpb24gaXMgYWN0aXZlIGFuZCAwIG90aGVyd2lzZS4gIElmIHlvdSB1c2UKICAgICAnVmFyJyB0byBhdHRhY2ggdGhlIG9wdGlvbiB0byBhIGRpZmZlcmVudCB2YXJpYWJsZSwgdGhlIGFzc29jaWF0ZWQKICAgICBtYWNyb3MgYXJlIGNhbGxlZCAnT1BUSU9OX01BU0tfTkFNRScgYW5kICdPUFRJT05fTkFNRScKICAgICByZXNwZWN0aXZlbHkuCgogICAgIFlvdSBjYW4gZGlzYWJsZSBhdXRvbWF0aWMgYml0IGFsbG9jYXRpb24gdXNpbmcgJ01hc2tFeGlzdHMnLgoKJ0ludmVyc2VNYXNrKE9USEVSTkFNRSknCidJbnZlcnNlTWFzayhPVEhFUk5BTUUsIFRISVNOQU1FKScKICAgICBUaGUgb3B0aW9uIGlzIHRoZSBpbnZlcnNlIG9mIGFub3RoZXIgb3B0aW9uIHRoYXQgaGFzIHRoZQogICAgICdNYXNrKE9USEVSTkFNRSknIHByb3BlcnR5LiAgSWYgVEhJU05BTUUgaXMgZ2l2ZW4sIHRoZQogICAgIG9wdGlvbnMtcHJvY2Vzc2luZyBzY3JpcHQgd2lsbCBkZWNsYXJlIGEgJ1RBUkdFVF9USElTTkFNRScgbWFjcm8KICAgICB0aGF0IGlzIDEgd2hlbiB0aGUgb3B0aW9uIGlzIGFjdGl2ZSBhbmQgMCBvdGhlcndpc2UuCgonTWFza0V4aXN0cycKICAgICBUaGUgbWFzayBzcGVjaWZpZWQgYnkgdGhlICdNYXNrJyBwcm9wZXJ0eSBhbHJlYWR5IGV4aXN0cy4gIE5vCiAgICAgJ01BU0snIG9yICdUQVJHRVQnIGRlZmluaXRpb25zIHNob3VsZCBiZSBhZGRlZCB0byAnb3B0aW9ucy5oJyBpbgogICAgIHJlc3BvbnNlIHRvIHRoaXMgb3B0aW9uIHJlY29yZC4KCiAgICAgVGhlIG1haW4gcHVycG9zZSBvZiB0aGlzIHByb3BlcnR5IGlzIHRvIHN1cHBvcnQgc3lub255bW91cyBvcHRpb25zLgogICAgIFRoZSBmaXJzdCBvcHRpb24gc2hvdWxkIHVzZSAnTWFzayhOQU1FKScgYW5kIHRoZSBvdGhlcnMgc2hvdWxkIHVzZQogICAgICdNYXNrKE5BTUUpIE1hc2tFeGlzdHMnLgoKJ1JlcG9ydCcKICAgICBUaGUgc3RhdGUgb2YgdGhlIG9wdGlvbiBzaG91bGQgYmUgcHJpbnRlZCBieSAnLWZ2ZXJib3NlLWFzbScuCgonVW5kb2N1bWVudGVkJwogICAgIFRoZSBvcHRpb24gaXMgZGVsaWJlcmF0ZWx5IG1pc3NpbmcgZG9jdW1lbnRhdGlvbiBhbmQgc2hvdWxkIG5vdCBiZQogICAgIGluY2x1ZGVkIGluIHRoZSAnLS1oZWxwJyBvdXRwdXQuCgonQ29uZGl0aW9uKENPTkQpJwogICAgIFRoZSBvcHRpb24gc2hvdWxkIG9ubHkgYmUgYWNjZXB0ZWQgaWYgcHJlcHJvY2Vzc29yIGNvbmRpdGlvbiBDT05ECiAgICAgaXMgdHJ1ZS4gIE5vdGUgdGhhdCBhbnkgQyBkZWNsYXJhdGlvbnMgYXNzb2NpYXRlZCB3aXRoIHRoZSBvcHRpb24KICAgICB3aWxsIGJlIHByZXNlbnQgZXZlbiBpZiBDT05EIGlzIGZhbHNlOyBDT05EIHNpbXBseSBjb250cm9scyB3aGV0aGVyCiAgICAgdGhlIG9wdGlvbiBpcyBhY2NlcHRlZCBhbmQgd2hldGhlciBpdCBpcyBwcmludGVkIGluIHRoZSAnLS1oZWxwJwogICAgIG91dHB1dC4KCh8KRmlsZTogZ2NjaW50LmluZm8sICBOb2RlOiBQYXNzZXMsICBOZXh0OiBUcmVlcywgIFByZXY6IE9wdGlvbnMsICBVcDogVG9wCgo4IFBhc3NlcyBhbmQgRmlsZXMgb2YgdGhlIENvbXBpbGVyCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKClRoaXMgY2hhcHRlciBpcyBkZWRpY2F0ZWQgdG8gZ2l2aW5nIGFuIG92ZXJ2aWV3IG9mIHRoZSBvcHRpbWl6YXRpb24gYW5kCmNvZGUgZ2VuZXJhdGlvbiBwYXNzZXMgb2YgdGhlIGNvbXBpbGVyLiAgSW4gdGhlIHByb2Nlc3MsIGl0IGRlc2NyaWJlcwpzb21lIG9mIHRoZSBsYW5ndWFnZSBmcm9udCBlbmQgaW50ZXJmYWNlLCB0aG91Z2ggdGhpcyBkZXNjcmlwdGlvbiBpcyBubwp3aGVyZSBuZWFyIGNvbXBsZXRlLgoKKiBNZW51OgoKKiBQYXJzaW5nIHBhc3M6OiAgICAgICAgIFRoZSBsYW5ndWFnZSBmcm9udCBlbmQgdHVybnMgdGV4dCBpbnRvIGJpdHMuCiogR2ltcGxpZmljYXRpb24gcGFzczo6ICBUaGUgYml0cyBhcmUgdHVybmVkIGludG8gc29tZXRoaW5nIHdlIGNhbiBvcHRpbWl6ZS4KKiBQYXNzIG1hbmFnZXI6OgkgU2VxdWVuY2luZyB0aGUgb3B0aW1pemF0aW9uIHBhc3Nlcy4KKiBUcmVlLVNTQSBwYXNzZXM6OiAgICAgIE9wdGltaXphdGlvbnMgb24gYSBoaWdoLWxldmVsIHJlcHJlc2VudGF0aW9uLgoqIFJUTCBwYXNzZXM6OiAgICAgICAgICAgT3B0aW1pemF0aW9ucyBvbiBhIGxvdy1sZXZlbCByZXByZXNlbnRhdGlvbi4KCh8KRmlsZTogZ2NjaW50LmluZm8sICBOb2RlOiBQYXJzaW5nIHBhc3MsICBOZXh0OiBHaW1wbGlmaWNhdGlvbiBwYXNzLCAgVXA6IFBhc3NlcwoKOC4xIFBhcnNpbmcgcGFzcwo9PT09PT09PT09PT09PT09CgpUaGUgbGFuZ3VhZ2UgZnJvbnQgZW5kIGlzIGludm9rZWQgb25seSBvbmNlLCB2aWEKJ2xhbmdfaG9va3MucGFyc2VfZmlsZScsIHRvIHBhcnNlIHRoZSBlbnRpcmUgaW5wdXQuICBUaGUgbGFuZ3VhZ2UgZnJvbnQKZW5kIG1heSB1c2UgYW55IGludGVybWVkaWF0ZSBsYW5ndWFnZSByZXByZXNlbnRhdGlvbiBkZWVtZWQgYXBwcm9wcmlhdGUuClRoZSBDIGZyb250IGVuZCB1c2VzIEdFTkVSSUMgdHJlZXMgKENST1NTUkVGKSwgcGx1cyBhIGRvdWJsZSBoYW5kZnVsIG9mCmxhbmd1YWdlIHNwZWNpZmljIHRyZWUgY29kZXMgZGVmaW5lZCBpbiAnYy1jb21tb24uZGVmJy4gIFRoZSBGb3J0cmFuCmZyb250IGVuZCB1c2VzIGEgY29tcGxldGVseSBkaWZmZXJlbnQgcHJpdmF0ZSByZXByZXNlbnRhdGlvbi4KCiBBdCBzb21lIHBvaW50IHRoZSBmcm9udCBlbmQgbXVzdCB0cmFuc2xhdGUgdGhlIHJlcHJlc2VudGF0aW9uIHVzZWQgaW4KdGhlIGZyb250IGVuZCB0byBhIHJlcHJlc2VudGF0aW9uIHVuZGVyc3Rvb2QgYnkgdGhlIGxhbmd1YWdlLWluZGVwZW5kZW50CnBvcnRpb25zIG9mIHRoZSBjb21waWxlci4gIEN1cnJlbnQgcHJhY3RpY2UgdGFrZXMgb25lIG9mIHR3byBmb3Jtcy4gIFRoZQpDIGZyb250IGVuZCBtYW51YWxseSBpbnZva2VzIHRoZSBnaW1wbGlmaWVyIChDUk9TU1JFRikgb24gZWFjaCBmdW5jdGlvbiwKYW5kIHVzZXMgdGhlIGdpbXBsaWZpZXIgY2FsbGJhY2tzIHRvIGNvbnZlcnQgdGhlIGxhbmd1YWdlLXNwZWNpZmljIHRyZWUKbm9kZXMgZGlyZWN0bHkgdG8gR0lNUExFIChDUk9TU1JFRikgYmVmb3JlIHBhc3NpbmcgdGhlIGZ1bmN0aW9uIG9mZiB0bwpiZSBjb21waWxlZC4gIFRoZSBGb3J0cmFuIGZyb250IGVuZCBjb252ZXJ0cyBmcm9tIGEgcHJpdmF0ZQpyZXByZXNlbnRhdGlvbiB0byBHRU5FUklDLCB3aGljaCBpcyBsYXRlciBsb3dlcmVkIHRvIEdJTVBMRSB3aGVuIHRoZQpmdW5jdGlvbiBpcyBjb21waWxlZC4gIFdoaWNoIHJvdXRlIHRvIGNob29zZSBwcm9iYWJseSBkZXBlbmRzIG9uIGhvdwp3ZWxsIEdFTkVSSUMgKHBsdXMgZXh0ZW5zaW9ucykgY2FuIGJlIG1hZGUgdG8gbWF0Y2ggdXAgd2l0aCB0aGUgc291cmNlCmxhbmd1YWdlIGFuZCBuZWNlc3NhcnkgcGFyc2luZyBkYXRhIHN0cnVjdHVyZXMuCgogQlVHOiBHaW1wbGlmaWNhdGlvbiBtdXN0IG9jY3VyIGJlZm9yZSBuZXN0ZWQgZnVuY3Rpb24gbG93ZXJpbmcsIGFuZApuZXN0ZWQgZnVuY3Rpb24gbG93ZXJpbmcgbXVzdCBiZSBkb25lIGJ5IHRoZSBmcm9udCBlbmQgYmVmb3JlIHBhc3NpbmcKdGhlIGRhdGEgb2ZmIHRvIGNncmFwaC4KCiBUT0RPOiBDZ3JhcGggc2hvdWxkIGNvbnRyb2wgbmVzdGVkIGZ1bmN0aW9uIGxvd2VyaW5nLiAgSXQgd291bGQgb25seSBiZQppbnZva2VkIHdoZW4gaXQgaXMgY2VydGFpbiB0aGF0IHRoZSBvdXRlci1tb3N0IGZ1bmN0aW9uIGlzIHVzZWQuCgogVE9ETzogQ2dyYXBoIG5lZWRzIGEgZ2ltcGxpZnlfZnVuY3Rpb24gY2FsbGJhY2suICBJdCBzaG91bGQgYmUgaW52b2tlZAp3aGVuICgxKSBpdCBpcyBjZXJ0YWluIHRoYXQgdGhlIGZ1bmN0aW9uIGlzIHVzZWQsICgyKSB3YXJuaW5nIGZsYWdzCnNwZWNpZmllZCBieSB0aGUgdXNlciByZXF1aXJlIHNvbWUgYW1vdW50IG9mIGNvbXBpbGF0aW9uIGluIG9yZGVyIHRvCmhvbm9yLCAoMykgdGhlIGxhbmd1YWdlIGluZGljYXRlcyB0aGF0IHNlbWFudGljIGFuYWx5c2lzIGlzIG5vdCBjb21wbGV0ZQp1bnRpbCBnaW1wbGlmaWNhdGlvbiBvY2N1cnMuICBIdW0uLi4gdGhpcyBzb3VuZHMgb3Zlcmx5IGNvbXBsaWNhdGVkLgpQZXJoYXBzIHdlIHNob3VsZCBqdXN0IGhhdmUgdGhlIGZyb250IGVuZCBnaW1wbGlmeSBhbHdheXM7IGluIG1vc3QgY2FzZXMKaXQncyBvbmx5IG9uZSBmdW5jdGlvbiBjYWxsLgoKIFRoZSBmcm9udCBlbmQgbmVlZHMgdG8gcGFzcyBhbGwgZnVuY3Rpb24gZGVmaW5pdGlvbnMgYW5kIHRvcCBsZXZlbApkZWNsYXJhdGlvbnMgb2ZmIHRvIHRoZSBtaWRkbGUtZW5kIHNvIHRoYXQgdGhleSBjYW4gYmUgY29tcGlsZWQgYW5kCmVtaXR0ZWQgdG8gdGhlIG9iamVjdCBmaWxlLiAgRm9yIGEgc2ltcGxlIHByb2NlZHVyYWwgbGFuZ3VhZ2UsIGl0IGlzCnVzdWFsbHkgbW9zdCBjb252ZW5pZW50IHRvIGRvIHRoaXMgYXMgZWFjaCB0b3AgbGV2ZWwgZGVjbGFyYXRpb24gb3IKZGVmaW5pdGlvbiBpcyBzZWVuLiAgVGhlcmUgaXMgYWxzbyBhIGRpc3RpbmN0aW9uIHRvIGJlIG1hZGUgYmV0d2VlbgpnZW5lcmF0aW5nIGZ1bmN0aW9uYWwgY29kZSBhbmQgZ2VuZXJhdGluZyBjb21wbGV0ZSBkZWJ1ZyBpbmZvcm1hdGlvbi4KVGhlIG9ubHkgdGhpbmcgdGhhdCBpcyBhYnNvbHV0ZWx5IHJlcXVpcmVkIGZvciBmdW5jdGlvbmFsIGNvZGUgaXMgdGhhdApmdW5jdGlvbiBhbmQgZGF0YSBfZGVmaW5pdGlvbnNfIGJlIHBhc3NlZCB0byB0aGUgbWlkZGxlLWVuZC4gIEZvcgpjb21wbGV0ZSBkZWJ1ZyBpbmZvcm1hdGlvbiwgZnVuY3Rpb24sIGRhdGEgYW5kIHR5cGUgZGVjbGFyYXRpb25zIHNob3VsZAphbGwgYmUgcGFzc2VkIGFzIHdlbGwuCgogSW4gYW55IGNhc2UsIHRoZSBmcm9udCBlbmQgbmVlZHMgZWFjaCBjb21wbGV0ZSB0b3AtbGV2ZWwgZnVuY3Rpb24gb3IKZGF0YSBkZWNsYXJhdGlvbiwgYW5kIGVhY2ggZGF0YSBkZWZpbml0aW9uIHNob3VsZCBiZSBwYXNzZWQgdG8KJ3Jlc3Rfb2ZfZGVjbF9jb21waWxhdGlvbicuICBFYWNoIGNvbXBsZXRlIHR5cGUgZGVmaW5pdGlvbiBzaG91bGQgYmUKcGFzc2VkIHRvICdyZXN0X29mX3R5cGVfY29tcGlsYXRpb24nLiAgRWFjaCBmdW5jdGlvbiBkZWZpbml0aW9uIHNob3VsZApiZSBwYXNzZWQgdG8gJ2NncmFwaF9maW5hbGl6ZV9mdW5jdGlvbicuCgogVE9ETzogSSBrbm93IHJlc3Rfb2ZfY29tcGlsYXRpb24gY3VycmVudGx5IGhhcyBhbGwgc29ydHMgb2YKcnRsLWdlbmVyYXRpb24gc2VtYW50aWNzLiAgSSBwbGFuIHRvIG1vdmUgYWxsIGNvZGUgZ2VuZXJhdGlvbiBiaXRzIChib3RoCnRyZWUgYW5kIHJ0bCkgdG8gY29tcGlsZV9mdW5jdGlvbi4gIFNob3VsZCB3ZSBoaWRlIGNncmFwaCBmcm9tIHRoZSBmcm9udAplbmRzIGFuZCBtb3ZlIGJhY2sgdG8gcmVzdF9vZl9jb21waWxhdGlvbiBhcyB0aGUgb2ZmaWNpYWwgaW50ZXJmYWNlPwpQb3NzaWJseSB3ZSBzaG91bGQgcmVuYW1lIGFsbCB0aHJlZSBpbnRlcmZhY2VzIHN1Y2ggdGhhdCB0aGUgbmFtZXMgbWF0Y2gKaW4gc29tZSBtZWFuaW5nZnVsIHdheSBhbmQgdGhhdCBpcyBtb3JlIGRlc2NyaXB0aXZlIHRoYW4gInJlc3Rfb2YiLgoKIFRoZSBtaWRkbGUtZW5kIHdpbGwsIGF0IGl0cyBvcHRpb24sIGVtaXQgdGhlIGZ1bmN0aW9uIGFuZCBkYXRhCmRlZmluaXRpb25zIGltbWVkaWF0ZWx5IG9yIHF1ZXVlIHRoZW0gZm9yIGxhdGVyIHByb2Nlc3NpbmcuCgofCkZpbGU6IGdjY2ludC5pbmZvLCAgTm9kZTogR2ltcGxpZmljYXRpb24gcGFzcywgIE5leHQ6IFBhc3MgbWFuYWdlciwgIFByZXY6IFBhcnNpbmcgcGFzcywgIFVwOiBQYXNzZXMKCjguMiBHaW1wbGlmaWNhdGlvbiBwYXNzCj09PT09PT09PT09PT09PT09PT09PT09CgoiR2ltcGxpZmljYXRpb24iIGlzIGEgd2hpbXNpY2FsIHRlcm0gZm9yIHRoZSBwcm9jZXNzIG9mIGNvbnZlcnRpbmcgdGhlCmludGVybWVkaWF0ZSByZXByZXNlbnRhdGlvbiBvZiBhIGZ1bmN0aW9uIGludG8gdGhlIEdJTVBMRSBsYW5ndWFnZQooQ1JPU1NSRUYpLiBUaGUgdGVybSBzdHVjaywgYW5kIHNvIHdvcmRzIGxpa2UgImdpbXBsaWZpY2F0aW9uIiwKImdpbXBsaWZ5IiwgImdpbXBsaWZpZXIiIGFuZCB0aGUgbGlrZSBhcmUgc3ByaW5rbGVkIHRocm91Z2hvdXQgdGhpcwpzZWN0aW9uIG9mIGNvZGUuCgogV2hpbGUgYSBmcm9udCBlbmQgbWF5IGNlcnRhaW5seSBjaG9vc2UgdG8gZ2VuZXJhdGUgR0lNUExFIGRpcmVjdGx5IGlmCml0IGNob29zZXMsIHRoaXMgY2FuIGJlIGEgbW9kZXJhdGVseSBjb21wbGV4IHByb2Nlc3MgdW5sZXNzIHRoZQppbnRlcm1lZGlhdGUgbGFuZ3VhZ2UgdXNlZCBieSB0aGUgZnJvbnQgZW5kIGlzIGFscmVhZHkgZmFpcmx5IHNpbXBsZS4KVXN1YWxseSBpdCBpcyBlYXNpZXIgdG8gZ2VuZXJhdGUgR0VORVJJQyB0cmVlcyBwbHVzIGV4dGVuc2lvbnMgYW5kIGxldAp0aGUgbGFuZ3VhZ2UtaW5kZXBlbmRlbnQgZ2ltcGxpZmllciBkbyBtb3N0IG9mIHRoZSB3b3JrLgoKIFRoZSBtYWluIGVudHJ5IHBvaW50IHRvIHRoaXMgcGFzcyBpcyAnZ2ltcGxpZnlfZnVuY3Rpb25fdHJlZScgbG9jYXRlZAppbiAnZ2ltcGxpZnkuYycuICBGcm9tIGhlcmUgd2UgcHJvY2VzcyB0aGUgZW50aXJlIGZ1bmN0aW9uIGdpbXBsaWZ5aW5nCmVhY2ggc3RhdGVtZW50IGluIHR1cm4uICBUaGUgbWFpbiB3b3JraG9yc2UgZm9yIHRoaXMgcGFzcyBpcwonZ2ltcGxpZnlfZXhwcicuICBBcHByb3hpbWF0ZWx5IGV2ZXJ5dGhpbmcgcGFzc2VzIHRocm91Z2ggaGVyZSBhdCBsZWFzdApvbmNlLCBhbmQgaXQgaXMgZnJvbSBoZXJlIHRoYXQgd2UgaW52b2tlIHRoZSAnbGFuZ19ob29rcy5naW1wbGlmeV9leHByJwpjYWxsYmFjay4KCiBUaGUgY2FsbGJhY2sgc2hvdWxkIGV4YW1pbmUgdGhlIGV4cHJlc3Npb24gaW4gcXVlc3Rpb24gYW5kIHJldHVybgonR1NfVU5IQU5ETEVEJyBpZiB0aGUgZXhwcmVzc2lvbiBpcyBub3QgYSBsYW5ndWFnZSBzcGVjaWZpYyBjb25zdHJ1Y3QKdGhhdCByZXF1aXJlcyBhdHRlbnRpb24uICBPdGhlcndpc2UgaXQgc2hvdWxkIGFsdGVyIHRoZSBleHByZXNzaW9uIGluCnNvbWUgd2F5IHRvIHN1Y2ggdGhhdCBmb3J3YXJkIHByb2dyZXNzIGlzIG1hZGUgdG93YXJkIHByb2R1Y2luZyB2YWxpZApHSU1QTEUuICBJZiB0aGUgY2FsbGJhY2sgaXMgY2VydGFpbiB0aGF0IHRoZSB0cmFuc2Zvcm1hdGlvbiBpcyBjb21wbGV0ZQphbmQgdGhlIGV4cHJlc3Npb24gaXMgdmFsaWQgR0lNUExFLCBpdCBzaG91bGQgcmV0dXJuICdHU19BTExfRE9ORScuCk90aGVyd2lzZSBpdCBzaG91bGQgcmV0dXJuICdHU19PSycsIHdoaWNoIHdpbGwgY2F1c2UgdGhlIGV4cHJlc3Npb24gdG8KYmUgcHJvY2Vzc2VkIGFnYWluLiAgSWYgdGhlIGNhbGxiYWNrIGVuY291bnRlcnMgYW4gZXJyb3IgZHVyaW5nIHRoZQp0cmFuc2Zvcm1hdGlvbiAoYmVjYXVzZSB0aGUgZnJvbnQgZW5kIGlzIHJlbHlpbmcgb24gdGhlIGdpbXBsaWZpY2F0aW9uCnByb2Nlc3MgdG8gZmluaXNoIHNlbWFudGljIGNoZWNrcyksIGl0IHNob3VsZCByZXR1cm4gJ0dTX0VSUk9SJy4KCh8KRmlsZTogZ2NjaW50LmluZm8sICBOb2RlOiBQYXNzIG1hbmFnZXIsICBOZXh0OiBUcmVlLVNTQSBwYXNzZXMsICBQcmV2OiBHaW1wbGlmaWNhdGlvbiBwYXNzLCAgVXA6IFBhc3NlcwoKOC4zIFBhc3MgbWFuYWdlcgo9PT09PT09PT09PT09PT09CgpUaGUgcGFzcyBtYW5hZ2VyIGlzIGxvY2F0ZWQgaW4gJ3Bhc3Nlcy5jJywgJ3RyZWUtb3B0aW1pemUuYycgYW5kCid0cmVlLXBhc3MuaCcuICBJdHMgam9iIGlzIHRvIHJ1biBhbGwgb2YgdGhlIGluZGl2aWR1YWwgcGFzc2VzIGluIHRoZQpjb3JyZWN0IG9yZGVyLCBhbmQgdGFrZSBjYXJlIG9mIHN0YW5kYXJkIGJvb2trZWVwaW5nIHRoYXQgYXBwbGllcyB0bwpldmVyeSBwYXNzLgoKIFRoZSB0aGVvcnkgb2Ygb3BlcmF0aW9uIGlzIHRoYXQgZWFjaCBwYXNzIGRlZmluZXMgYSBzdHJ1Y3R1cmUgdGhhdApyZXByZXNlbnRzIGV2ZXJ5dGhpbmcgd2UgbmVlZCB0byBrbm93IGFib3V0IHRoYXQgcGFzcy0td2hlbiBpdCBzaG91bGQgYmUKcnVuLCBob3cgaXQgc2hvdWxkIGJlIHJ1biwgd2hhdCBpbnRlcm1lZGlhdGUgbGFuZ3VhZ2UgZm9ybSBvcgpvbi10aGUtc2lkZSBkYXRhIHN0cnVjdHVyZXMgaXQgbmVlZHMuICBXZSByZWdpc3RlciB0aGUgcGFzcyB0byBiZSBydW4gaW4Kc29tZSBwYXJ0aWN1bGFyIG9yZGVyLCBhbmQgdGhlIHBhc3MgbWFuYWdlciBhcnJhbmdlcyBmb3IgZXZlcnl0aGluZyB0bwpoYXBwZW4gaW4gdGhlIGNvcnJlY3Qgb3JkZXIuCgogVGhlIGFjdHVhbGl0eSBkb2Vzbid0IGNvbXBsZXRlbHkgbGl2ZSB1cCB0byB0aGUgdGhlb3J5IGF0IHByZXNlbnQuCkNvbW1hbmQtbGluZSBzd2l0Y2hlcyBhbmQgJ3RpbWV2YXJfaWRfdCcgZW51bWVyYXRpb25zIG11c3Qgc3RpbGwgYmUKZGVmaW5lZCBlbHNld2hlcmUuICBUaGUgcGFzcyBtYW5hZ2VyIHZhbGlkYXRlcyBjb25zdHJhaW50cyBidXQgZG9lcyBub3QKYXR0ZW1wdCB0byAocmUtKWdlbmVyYXRlIGRhdGEgc3RydWN0dXJlcyBvciBsb3dlciBpbnRlcm1lZGlhdGUgbGFuZ3VhZ2UKZm9ybSBiYXNlZCBvbiB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoZSBuZXh0IHBhc3MuICBOZXZlcnRoZWxlc3MsIHdoYXQgaXMKcHJlc2VudCBpcyB1c2VmdWwsIGFuZCBhIGZhciBzaWdodCBiZXR0ZXIgdGhhbiBub3RoaW5nIGF0IGFsbC4KCiBUT0RPOiBkZXNjcmliZSB0aGUgZ2xvYmFsIHZhcmlhYmxlcyBzZXQgdXAgYnkgdGhlIHBhc3MgbWFuYWdlciwgYW5kIGEKYnJpZWYgZGVzY3JpcHRpb24gb2YgaG93IGEgbmV3IHBhc3Mgc2hvdWxkIHVzZSBpdC4gIEkgbmVlZCB0byBsb29rIGF0CndoYXQgaW5mbyBydGwgcGFzc2VzIHVzZSBmaXJzdC4uLgoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IFRyZWUtU1NBIHBhc3NlcywgIE5leHQ6IFJUTCBwYXNzZXMsICBQcmV2OiBQYXNzIG1hbmFnZXIsICBVcDogUGFzc2VzCgo4LjQgVHJlZS1TU0EgcGFzc2VzCj09PT09PT09PT09PT09PT09PT0KClRoZSBmb2xsb3dpbmcgYnJpZWZseSBkZXNjcmliZXMgdGhlIHRyZWUgb3B0aW1pemF0aW9uIHBhc3NlcyB0aGF0IGFyZQpydW4gYWZ0ZXIgZ2ltcGxpZmljYXRpb24gYW5kIHdoYXQgc291cmNlIGZpbGVzIHRoZXkgYXJlIGxvY2F0ZWQgaW4uCgogICAqIFJlbW92ZSB1c2VsZXNzIHN0YXRlbWVudHMKCiAgICAgVGhpcyBwYXNzIGlzIGFuIGV4dHJlbWVseSBzaW1wbGUgc3dlZXAgYWNyb3NzIHRoZSBnaW1wbGUgY29kZSBpbgogICAgIHdoaWNoIHdlIGlkZW50aWZ5IG9idmlvdXNseSBkZWFkIGNvZGUgYW5kIHJlbW92ZSBpdC4gIEhlcmUgd2UgZG8KICAgICB0aGluZ3MgbGlrZSBzaW1wbGlmeSAnaWYnIHN0YXRlbWVudHMgd2l0aCBjb25zdGFudCBjb25kaXRpb25zLAogICAgIHJlbW92ZSBleGNlcHRpb24gaGFuZGxpbmcgY29uc3RydWN0cyBzdXJyb3VuZGluZyBjb2RlIHRoYXQKICAgICBvYnZpb3VzbHkgY2Fubm90IHRocm93LCByZW1vdmUgbGV4aWNhbCBiaW5kaW5ncyB0aGF0IGNvbnRhaW4gbm8KICAgICB2YXJpYWJsZXMsIGFuZCBvdGhlciBhc3NvcnRlZCBzaW1wbGlzdGljIGNsZWFudXBzLiAgVGhlIGlkZWEgaXMgdG8KICAgICBnZXQgcmlkIG9mIHRoZSBvYnZpb3VzIHN0dWZmIHF1aWNrbHkgcmF0aGVyIHRoYW4gd2FpdCB1bnRpbCBsYXRlcgogICAgIHdoZW4gaXQncyBtb3JlIHdvcmsgdG8gZ2V0IHJpZCBvZiBpdC4gIFRoaXMgcGFzcyBpcyBsb2NhdGVkIGluCiAgICAgJ3RyZWUtY2ZnLmMnIGFuZCBkZXNjcmliZWQgYnkgJ3Bhc3NfcmVtb3ZlX3VzZWxlc3Nfc3RtdHMnLgoKICAgKiBNdWRmbGFwIGRlY2xhcmF0aW9uIHJlZ2lzdHJhdGlvbgoKICAgICBJZiBtdWRmbGFwICgqbm90ZSAtZm11ZGZsYXAgLWZtdWRmbGFwdGggLWZtdWRmbGFwaXI6IChnY2MpT3B0aW1pemUKICAgICBPcHRpb25zLikgaXMgZW5hYmxlZCwgd2UgZ2VuZXJhdGUgY29kZSB0byByZWdpc3RlciBzb21lIHZhcmlhYmxlCiAgICAgZGVjbGFyYXRpb25zIHdpdGggdGhlIG11ZGZsYXAgcnVudGltZS4gIFNwZWNpZmljYWxseSwgdGhlIHJ1bnRpbWUKICAgICB0cmFja3MgdGhlIGxpZmV0aW1lcyBvZiB0aG9zZSB2YXJpYWJsZSBkZWNsYXJhdGlvbnMgdGhhdCBoYXZlIHRoZWlyCiAgICAgYWRkcmVzc2VzIHRha2VuLCBvciB3aG9zZSBib3VuZHMgYXJlIHVua25vd24gYXQgY29tcGlsZSB0aW1lCiAgICAgKCdleHRlcm4nKS4gIFRoaXMgcGFzcyBnZW5lcmF0ZXMgbmV3IGV4Y2VwdGlvbiBoYW5kbGluZyBjb25zdHJ1Y3RzCiAgICAgKCd0cnknLydmaW5hbGx5JyksIGFuZCBzbyBtdXN0IHJ1biBiZWZvcmUgdGhvc2UgYXJlIGxvd2VyZWQuICBJbgogICAgIGFkZGl0aW9uLCB0aGUgcGFzcyBlbnF1ZXVlcyBkZWNsYXJhdGlvbnMgb2Ygc3RhdGljIHZhcmlhYmxlcyB3aG9zZQogICAgIGxpZmV0aW1lcyBleHRlbmQgdG8gdGhlIGVudGlyZSBwcm9ncmFtLiAgVGhlIHBhc3MgaXMgbG9jYXRlZCBpbgogICAgICd0cmVlLW11ZGZsYXAuYycgYW5kIGlzIGRlc2NyaWJlZCBieSAncGFzc19tdWRmbGFwXzEnLgoKICAgKiBPcGVuTVAgbG93ZXJpbmcKCiAgICAgSWYgT3Blbk1QIGdlbmVyYXRpb24gKCctZm9wZW5tcCcpIGlzIGVuYWJsZWQsIHRoaXMgcGFzcyBsb3dlcnMKICAgICBPcGVuTVAgY29uc3RydWN0cyBpbnRvIEdJTVBMRS4KCiAgICAgTG93ZXJpbmcgb2YgT3Blbk1QIGNvbnN0cnVjdHMgaW52b2x2ZXMgY3JlYXRpbmcgcmVwbGFjZW1lbnQKICAgICBleHByZXNzaW9ucyBmb3IgbG9jYWwgdmFyaWFibGVzIHRoYXQgaGF2ZSBiZWVuIG1hcHBlZCB1c2luZyBkYXRhCiAgICAgc2hhcmluZyBjbGF1c2VzLCBleHBvc2luZyB0aGUgY29udHJvbCBmbG93IG9mIG1vc3Qgc3luY2hyb25pemF0aW9uCiAgICAgZGlyZWN0aXZlcyBhbmQgYWRkaW5nIHJlZ2lvbiBtYXJrZXJzIHRvIGZhY2lsaXRhdGUgdGhlIGNyZWF0aW9uIG9mCiAgICAgdGhlIGNvbnRyb2wgZmxvdyBncmFwaC4gIFRoZSBwYXNzIGlzIGxvY2F0ZWQgaW4gJ29tcC1sb3cuYycgYW5kIGlzCiAgICAgZGVzY3JpYmVkIGJ5ICdwYXNzX2xvd2VyX29tcCcuCgogICAqIE9wZW5NUCBleHBhbnNpb24KCiAgICAgSWYgT3Blbk1QIGdlbmVyYXRpb24gKCctZm9wZW5tcCcpIGlzIGVuYWJsZWQsIHRoaXMgcGFzcyBleHBhbmRzCiAgICAgcGFyYWxsZWwgcmVnaW9ucyBpbnRvIHRoZWlyIG93biBmdW5jdGlvbnMgdG8gYmUgaW52b2tlZCBieSB0aGUKICAgICB0aHJlYWQgbGlicmFyeS4gIFRoZSBwYXNzIGlzIGxvY2F0ZWQgaW4gJ29tcC1sb3cuYycgYW5kIGlzCiAgICAgZGVzY3JpYmVkIGJ5ICdwYXNzX2V4cGFuZF9vbXAnLgoKICAgKiBMb3dlciBjb250cm9sIGZsb3cKCiAgICAgVGhpcyBwYXNzIGZsYXR0ZW5zICdpZicgc3RhdGVtZW50cyAoJ0NPTkRfRVhQUicpIGFuZCBtb3ZlcyBsZXhpY2FsCiAgICAgYmluZGluZ3MgKCdCSU5EX0VYUFInKSBvdXQgb2YgbGluZS4gIEFmdGVyIHRoaXMgcGFzcywgYWxsICdpZicKICAgICBzdGF0ZW1lbnRzIHdpbGwgaGF2ZSBleGFjdGx5IHR3byAnZ290bycgc3RhdGVtZW50cyBpbiBpdHMgJ3RoZW4nCiAgICAgYW5kICdlbHNlJyBhcm1zLiAgTGV4aWNhbCBiaW5kaW5nIGluZm9ybWF0aW9uIGZvciBlYWNoIHN0YXRlbWVudAogICAgIHdpbGwgYmUgZm91bmQgaW4gJ1RSRUVfQkxPQ0snIHJhdGhlciB0aGFuIGJlaW5nIGluZmVycmVkIGZyb20gaXRzCiAgICAgcG9zaXRpb24gdW5kZXIgYSAnQklORF9FWFBSJy4gIFRoaXMgcGFzcyBpcyBmb3VuZCBpbiAnZ2ltcGxlLWxvdy5jJwogICAgIGFuZCBpcyBkZXNjcmliZWQgYnkgJ3Bhc3NfbG93ZXJfY2YnLgoKICAgKiBMb3dlciBleGNlcHRpb24gaGFuZGxpbmcgY29udHJvbCBmbG93CgogICAgIFRoaXMgcGFzcyBkZWNvbXBvc2VzIGhpZ2gtbGV2ZWwgZXhjZXB0aW9uIGhhbmRsaW5nIGNvbnN0cnVjdHMKICAgICAoJ1RSWV9GSU5BTExZX0VYUFInIGFuZCAnVFJZX0NBVENIX0VYUFInKSBpbnRvIGEgZm9ybSB0aGF0CiAgICAgZXhwbGljaXRseSByZXByZXNlbnRzIHRoZSBjb250cm9sIGZsb3cgaW52b2x2ZWQuICBBZnRlciB0aGlzIHBhc3MsCiAgICAgJ2xvb2t1cF9zdG10X2VoX3JlZ2lvbicgd2lsbCByZXR1cm4gYSBub24tbmVnYXRpdmUgbnVtYmVyIGZvciBhbnkKICAgICBzdGF0ZW1lbnQgdGhhdCBtYXkgaGF2ZSBFSCBjb250cm9sIGZsb3cgc2VtYW50aWNzOyBleGFtaW5lCiAgICAgJ3RyZWVfY2FuX3Rocm93X2ludGVybmFsJyBvciAndHJlZV9jYW5fdGhyb3dfZXh0ZXJuYWwnIGZvciBleGFjdAogICAgIHNlbWFudGljcy4gIEV4YWN0IGNvbnRyb2wgZmxvdyBtYXkgYmUgZXh0cmFjdGVkIGZyb20KICAgICAnZm9yZWFjaF9yZWFjaGFibGVfaGFuZGxlcicuICBUaGUgRUggcmVnaW9uIG5lc3RpbmcgdHJlZSBpcyBkZWZpbmVkCiAgICAgaW4gJ2V4Y2VwdC5oJyBhbmQgYnVpbHQgaW4gJ2V4Y2VwdC5jJy4gIFRoZSBsb3dlcmluZyBwYXNzIGl0c2VsZiBpcwogICAgIGluICd0cmVlLWVoLmMnIGFuZCBpcyBkZXNjcmliZWQgYnkgJ3Bhc3NfbG93ZXJfZWgnLgoKICAgKiBCdWlsZCB0aGUgY29udHJvbCBmbG93IGdyYXBoCgogICAgIFRoaXMgcGFzcyBkZWNvbXBvc2VzIGEgZnVuY3Rpb24gaW50byBiYXNpYyBibG9ja3MgYW5kIGNyZWF0ZXMgYWxsCiAgICAgb2YgdGhlIGVkZ2VzIHRoYXQgY29ubmVjdCB0aGVtLiAgSXQgaXMgbG9jYXRlZCBpbiAndHJlZS1jZmcuYycgYW5kCiAgICAgaXMgZGVzY3JpYmVkIGJ5ICdwYXNzX2J1aWxkX2NmZycuCgogICAqIEZpbmQgYWxsIHJlZmVyZW5jZWQgdmFyaWFibGVzCgogICAgIFRoaXMgcGFzcyB3YWxrcyB0aGUgZW50aXJlIGZ1bmN0aW9uIGFuZCBjb2xsZWN0cyBhbiBhcnJheSBvZiBhbGwKICAgICB2YXJpYWJsZXMgcmVmZXJlbmNlZCBpbiB0aGUgZnVuY3Rpb24sICdyZWZlcmVuY2VkX3ZhcnMnLiAgVGhlIGluZGV4CiAgICAgYXQgd2hpY2ggYSB2YXJpYWJsZSBpcyBmb3VuZCBpbiB0aGUgYXJyYXkgaXMgdXNlZCBhcyBhIFVJRCBmb3IgdGhlCiAgICAgdmFyaWFibGUgd2l0aGluIHRoaXMgZnVuY3Rpb24uICBUaGlzIGRhdGEgaXMgbmVlZGVkIGJ5IHRoZSBTU0EKICAgICByZXdyaXRpbmcgcm91dGluZXMuICBUaGUgcGFzcyBpcyBsb2NhdGVkIGluICd0cmVlLWRmYS5jJyBhbmQgaXMKICAgICBkZXNjcmliZWQgYnkgJ3Bhc3NfcmVmZXJlbmNlZF92YXJzJy4KCiAgICogRW50ZXIgc3RhdGljIHNpbmdsZSBhc3NpZ25tZW50IGZvcm0KCiAgICAgVGhpcyBwYXNzIHJld3JpdGVzIHRoZSBmdW5jdGlvbiBzdWNoIHRoYXQgaXQgaXMgaW4gU1NBIGZvcm0uICBBZnRlcgogICAgIHRoaXMgcGFzcywgYWxsICdpc19naW1wbGVfcmVnJyB2YXJpYWJsZXMgd2lsbCBiZSByZWZlcmVuY2VkIGJ5CiAgICAgJ1NTQV9OQU1FJywgYW5kIGFsbCBvY2N1cnJlbmNlcyBvZiBvdGhlciB2YXJpYWJsZXMgd2lsbCBiZQogICAgIGFubm90YXRlZCB3aXRoICdWREVGUycgYW5kICdWVVNFUyc7IFBISSBub2RlcyB3aWxsIGhhdmUgYmVlbgogICAgIGluc2VydGVkIGFzIG5lY2Vzc2FyeSBmb3IgZWFjaCBiYXNpYyBibG9jay4gIFRoaXMgcGFzcyBpcyBsb2NhdGVkCiAgICAgaW4gJ3RyZWUtc3NhLmMnIGFuZCBpcyBkZXNjcmliZWQgYnkgJ3Bhc3NfYnVpbGRfc3NhJy4KCiAgICogV2FybiBmb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKCiAgICAgVGhpcyBwYXNzIHNjYW5zIHRoZSBmdW5jdGlvbiBmb3IgdXNlcyBvZiAnU1NBX05BTUUncyB0aGF0IGFyZSBmZWQKICAgICBieSBkZWZhdWx0IGRlZmluaXRpb24uICBGb3Igbm9uLXBhcmFtZXRlciB2YXJpYWJsZXMsIHN1Y2ggdXNlcyBhcmUKICAgICB1bmluaXRpYWxpemVkLiAgVGhlIHBhc3MgaXMgcnVuIHR3aWNlLCBiZWZvcmUgYW5kIGFmdGVyCiAgICAgb3B0aW1pemF0aW9uLiAgSW4gdGhlIGZpcnN0IHBhc3Mgd2Ugb25seSB3YXJuIGZvciB1c2VzIHRoYXQgYXJlCiAgICAgcG9zaXRpdmVseSB1bmluaXRpYWxpemVkOyBpbiB0aGUgc2Vjb25kIHBhc3Mgd2Ugd2FybiBmb3IgdXNlcyB0aGF0CiAgICAgYXJlIHBvc3NpYmx5IHVuaW5pdGlhbGl6ZWQuICBUaGUgcGFzcyBpcyBsb2NhdGVkIGluICd0cmVlLXNzYS5jJwogICAgIGFuZCBpcyBkZWZpbmVkIGJ5ICdwYXNzX2Vhcmx5X3dhcm5fdW5pbml0aWFsaXplZCcgYW5kCiAgICAgJ3Bhc3NfbGF0ZV93YXJuX3VuaW5pdGlhbGl6ZWQnLgoKICAgKiBEZWFkIGNvZGUgZWxpbWluYXRpb24KCiAgICAgVGhpcyBwYXNzIHNjYW5zIHRoZSBmdW5jdGlvbiBmb3Igc3RhdGVtZW50cyB3aXRob3V0IHNpZGUgZWZmZWN0cwogICAgIHdob3NlIHJlc3VsdCBpcyB1bnVzZWQuICBJdCBkb2VzIG5vdCBkbyBtZW1vcnkgbGlmZSBhbmFseXNpcywgc28KICAgICBhbnkgdmFsdWUgdGhhdCBpcyBzdG9yZWQgaW4gbWVtb3J5IGlzIGNvbnNpZGVyZWQgdXNlZC4gIFRoZSBwYXNzIGlzCiAgICAgcnVuIG11bHRpcGxlIHRpbWVzIHRocm91Z2hvdXQgdGhlIG9wdGltaXphdGlvbiBwcm9jZXNzLiAgSXQgaXMKICAgICBsb2NhdGVkIGluICd0cmVlLXNzYS1kY2UuYycgYW5kIGlzIGRlc2NyaWJlZCBieSAncGFzc19kY2UnLgoKICAgKiBEb21pbmF0b3Igb3B0aW1pemF0aW9ucwoKICAgICBUaGlzIHBhc3MgcGVyZm9ybXMgdHJpdmlhbCBkb21pbmF0b3ItYmFzZWQgY29weSBhbmQgY29uc3RhbnQKICAgICBwcm9wYWdhdGlvbiwgZXhwcmVzc2lvbiBzaW1wbGlmaWNhdGlvbiwgYW5kIGp1bXAgdGhyZWFkaW5nLiAgSXQgaXMKICAgICBydW4gbXVsdGlwbGUgdGltZXMgdGhyb3VnaG91dCB0aGUgb3B0aW1pemF0aW9uIHByb2Nlc3MuICBJdCBpdAogICAgIGxvY2F0ZWQgaW4gJ3RyZWUtc3NhLWRvbS5jJyBhbmQgaXMgZGVzY3JpYmVkIGJ5ICdwYXNzX2RvbWluYXRvcicuCgogICAqIEZvcndhcmQgcHJvcGFnYXRpb24gb2Ygc2luZ2xlLXVzZSB2YXJpYWJsZXMKCiAgICAgVGhpcyBwYXNzIGF0dGVtcHRzIHRvIHJlbW92ZSByZWR1bmRhbnQgY29tcHV0YXRpb24gYnkgc3Vic3RpdHV0aW5nCiAgICAgdmFyaWFibGVzIHRoYXQgYXJlIHVzZWQgb25jZSBpbnRvIHRoZSBleHByZXNzaW9uIHRoYXQgdXNlcyB0aGVtIGFuZAogICAgIHNlZWluZyBpZiB0aGUgcmVzdWx0IGNhbiBiZSBzaW1wbGlmaWVkLiAgSXQgaXMgbG9jYXRlZCBpbgogICAgICd0cmVlLXNzYS1mb3J3cHJvcC5jJyBhbmQgaXMgZGVzY3JpYmVkIGJ5ICdwYXNzX2Zvcndwcm9wJy4KCiAgICogQ29weSBSZW5hbWluZwoKICAgICBUaGlzIHBhc3MgYXR0ZW1wdHMgdG8gY2hhbmdlIHRoZSBuYW1lIG9mIGNvbXBpbGVyIHRlbXBvcmFyaWVzCiAgICAgaW52b2x2ZWQgaW4gY29weSBvcGVyYXRpb25zIHN1Y2ggdGhhdCBTU0EtPm5vcm1hbCBjYW4gY29hbGVzY2UgdGhlCiAgICAgY29weSBhd2F5LiAgV2hlbiBjb21waWxlciB0ZW1wb3JhcmllcyBhcmUgY29waWVzIG9mIHVzZXIgdmFyaWFibGVzLAogICAgIGl0IGFsc28gcmVuYW1lcyB0aGUgY29tcGlsZXIgdGVtcG9yYXJ5IHRvIHRoZSB1c2VyIHZhcmlhYmxlCiAgICAgcmVzdWx0aW5nIGluIGJldHRlciB1c2Ugb2YgdXNlciBzeW1ib2xzLiAgSXQgaXMgbG9jYXRlZCBpbgogICAgICd0cmVlLXNzYS1jb3B5cmVuYW1lLmMnIGFuZCBpcyBkZXNjcmliZWQgYnkgJ3Bhc3NfY29weXJlbmFtZScuCgogICAqIFBISSBub2RlIG9wdGltaXphdGlvbnMKCiAgICAgVGhpcyBwYXNzIHJlY29nbml6ZXMgZm9ybXMgb2YgUEhJIGlucHV0cyB0aGF0IGNhbiBiZSByZXByZXNlbnRlZCBhcwogICAgIGNvbmRpdGlvbmFsIGV4cHJlc3Npb25zIGFuZCByZXdyaXRlcyB0aGVtIGludG8gc3RyYWlnaHQgbGluZSBjb2RlLgogICAgIEl0IGlzIGxvY2F0ZWQgaW4gJ3RyZWUtc3NhLXBoaW9wdC5jJyBhbmQgaXMgZGVzY3JpYmVkIGJ5CiAgICAgJ3Bhc3NfcGhpb3B0Jy4KCiAgICogTWF5LWFsaWFzIG9wdGltaXphdGlvbgoKICAgICBUaGlzIHBhc3MgcGVyZm9ybXMgYSBmbG93IHNlbnNpdGl2ZSBTU0EtYmFzZWQgcG9pbnRzLXRvIGFuYWx5c2lzLgogICAgIFRoZSByZXN1bHRpbmcgbWF5LWFsaWFzLCBtdXN0LWFsaWFzLCBhbmQgZXNjYXBlIGFuYWx5c2lzCiAgICAgaW5mb3JtYXRpb24gaXMgdXNlZCB0byBwcm9tb3RlIHZhcmlhYmxlcyBmcm9tIGluLW1lbW9yeSBhZGRyZXNzYWJsZQogICAgIG9iamVjdHMgdG8gbm9uLWFsaWFzZWQgdmFyaWFibGVzIHRoYXQgY2FuIGJlIHJlbmFtZWQgaW50byBTU0EgZm9ybS4KICAgICBXZSBhbHNvIHVwZGF0ZSB0aGUgJ1ZERUYnLydWVVNFJyBtZW1vcnkgdGFncyBmb3Igbm9uLXJlbmFtZWFibGUKICAgICBhZ2dyZWdhdGVzIHNvIHRoYXQgd2UgZ2V0IGZld2VyIGZhbHNlIGtpbGxzLiAgVGhlIHBhc3MgaXMgbG9jYXRlZAogICAgIGluICd0cmVlLXNzYS1hbGlhcy5jJyBhbmQgaXMgZGVzY3JpYmVkIGJ5ICdwYXNzX21heV9hbGlhcycuCgogICAgIEludGVycHJvY2VkdXJhbCBwb2ludHMtdG8gaW5mb3JtYXRpb24gaXMgbG9jYXRlZCBpbgogICAgICd0cmVlLXNzYS1zdHJ1Y3RhbGlhcy5jJyBhbmQgZGVzY3JpYmVkIGJ5ICdwYXNzX2lwYV9wdGEnLgoKICAgKiBQcm9maWxpbmcKCiAgICAgVGhpcyBwYXNzIHJld3JpdGVzIHRoZSBmdW5jdGlvbiBpbiBvcmRlciB0byBjb2xsZWN0IHJ1bnRpbWUgYmxvY2sKICAgICBhbmQgdmFsdWUgcHJvZmlsaW5nIGRhdGEuICBTdWNoIGRhdGEgbWF5IGJlIGZlZCBiYWNrIGludG8gdGhlCiAgICAgY29tcGlsZXIgb24gYSBzdWJzZXF1ZW50IHJ1biBzbyBhcyB0byBhbGxvdyBvcHRpbWl6YXRpb24gYmFzZWQgb24KICAgICBleHBlY3RlZCBleGVjdXRpb24gZnJlcXVlbmNpZXMuICBUaGUgcGFzcyBpcyBsb2NhdGVkIGluICdwcmVkaWN0LmMnCiAgICAgYW5kIGlzIGRlc2NyaWJlZCBieSAncGFzc19wcm9maWxlJy4KCiAgICogTG93ZXIgY29tcGxleCBhcml0aG1ldGljCgogICAgIFRoaXMgcGFzcyByZXdyaXRlcyBjb21wbGV4IGFyaXRobWV0aWMgb3BlcmF0aW9ucyBpbnRvIHRoZWlyCiAgICAgY29tcG9uZW50IHNjYWxhciBhcml0aG1ldGljIG9wZXJhdGlvbnMuICBUaGUgcGFzcyBpcyBsb2NhdGVkIGluCiAgICAgJ3RyZWUtY29tcGxleC5jJyBhbmQgaXMgZGVzY3JpYmVkIGJ5ICdwYXNzX2xvd2VyX2NvbXBsZXgnLgoKICAgKiBTY2FsYXIgcmVwbGFjZW1lbnQgb2YgYWdncmVnYXRlcwoKICAgICBUaGlzIHBhc3MgcmV3cml0ZXMgc3VpdGFibGUgbm9uLWFsaWFzZWQgbG9jYWwgYWdncmVnYXRlIHZhcmlhYmxlcwogICAgIGludG8gYSBzZXQgb2Ygc2NhbGFyIHZhcmlhYmxlcy4gIFRoZSByZXN1bHRpbmcgc2NhbGFyIHZhcmlhYmxlcyBhcmUKICAgICByZXdyaXR0ZW4gaW50byBTU0EgZm9ybSwgd2hpY2ggYWxsb3dzIHN1YnNlcXVlbnQgb3B0aW1pemF0aW9uCiAgICAgcGFzc2VzIHRvIGRvIGEgc2lnbmlmaWNhbnRseSBiZXR0ZXIgam9iIHdpdGggdGhlbS4gIFRoZSBwYXNzIGlzCiAgICAgbG9jYXRlZCBpbiAndHJlZS1zcmEuYycgYW5kIGlzIGRlc2NyaWJlZCBieSAncGFzc19zcmEnLgoKICAgKiBEZWFkIHN0b3JlIGVsaW1pbmF0aW9uCgogICAgIFRoaXMgcGFzcyBlbGltaW5hdGVzIHN0b3JlcyB0byBtZW1vcnkgdGhhdCBhcmUgc3Vic2VxdWVudGx5CiAgICAgb3ZlcndyaXR0ZW4gYnkgYW5vdGhlciBzdG9yZSwgd2l0aG91dCBhbnkgaW50ZXJ2ZW5pbmcgbG9hZHMuICBUaGUKICAgICBwYXNzIGlzIGxvY2F0ZWQgaW4gJ3RyZWUtc3NhLWRzZS5jJyBhbmQgaXMgZGVzY3JpYmVkIGJ5ICdwYXNzX2RzZScuCgogICAqIFRhaWwgcmVjdXJzaW9uIGVsaW1pbmF0aW9uCgogICAgIFRoaXMgcGFzcyB0cmFuc2Zvcm1zIHRhaWwgcmVjdXJzaW9uIGludG8gYSBsb29wLiAgSXQgaXMgbG9jYXRlZCBpbgogICAgICd0cmVlLXRhaWxjYWxsLmMnIGFuZCBpcyBkZXNjcmliZWQgYnkgJ3Bhc3NfdGFpbF9yZWN1cnNpb24nLgoKICAgKiBGb3J3YXJkIHN0b3JlIG1vdGlvbgoKICAgICBUaGlzIHBhc3Mgc2lua3Mgc3RvcmVzIGFuZCBhc3NpZ25tZW50cyBkb3duIHRoZSBmbG93Z3JhcGggY2xvc2VyIHRvCiAgICAgdGhlaXIgdXNlIHBvaW50LiAgVGhlIHBhc3MgaXMgbG9jYXRlZCBpbiAndHJlZS1zc2Etc2luay5jJyBhbmQgaXMKICAgICBkZXNjcmliZWQgYnkgJ3Bhc3Nfc2lua19jb2RlJy4KCiAgICogUGFydGlhbCByZWR1bmRhbmN5IGVsaW1pbmF0aW9uCgogICAgIFRoaXMgcGFzcyBlbGltaW5hdGVzIHBhcnRpYWxseSByZWR1bmRhbnQgY29tcHV0YXRpb25zLCBhcyB3ZWxsIGFzCiAgICAgcGVyZm9ybWluZyBsb2FkIG1vdGlvbi4gIFRoZSBwYXNzIGlzIGxvY2F0ZWQgaW4gJ3RyZWUtc3NhLXByZS5jJwogICAgIGFuZCBpcyBkZXNjcmliZWQgYnkgJ3Bhc3NfcHJlJy4KCiAgICAgSnVzdCBiZWZvcmUgcGFydGlhbCByZWR1bmRhbmN5IGVsaW1pbmF0aW9uLCBpZgogICAgICctZnVuc2FmZS1tYXRoLW9wdGltaXphdGlvbnMnIGlzIG9uLCBHQ0MgdHJpZXMgdG8gY29udmVydCBkaXZpc2lvbnMKICAgICB0byBtdWx0aXBsaWNhdGlvbnMgYnkgdGhlIHJlY2lwcm9jYWwuICBUaGUgcGFzcyBpcyBsb2NhdGVkIGluCiAgICAgJ3RyZWUtc3NhLW1hdGgtb3B0cy5jJyBhbmQgaXMgZGVzY3JpYmVkIGJ5ICdwYXNzX2NzZV9yZWNpcHJvY2FsJy4KCiAgICogRnVsbCByZWR1bmRhbmN5IGVsaW1pbmF0aW9uCgogICAgIFRoaXMgaXMgYSBzaW1wbGVyIGZvcm0gb2YgUFJFIHRoYXQgb25seSBlbGltaW5hdGVzIHJlZHVuZGFuY2llcwogICAgIHRoYXQgb2NjdXIgYW4gYWxsIHBhdGhzLiAgSXQgaXMgbG9jYXRlZCBpbiAndHJlZS1zc2EtcHJlLmMnIGFuZAogICAgIGRlc2NyaWJlZCBieSAncGFzc19mcmUnLgoKICAgKiBMb29wIG9wdGltaXphdGlvbgoKICAgICBUaGUgbWFpbiBkcml2ZXIgb2YgdGhlIHBhc3MgaXMgcGxhY2VkIGluICd0cmVlLXNzYS1sb29wLmMnIGFuZAogICAgIGRlc2NyaWJlZCBieSAncGFzc19sb29wJy4KCiAgICAgVGhlIG9wdGltaXphdGlvbnMgcGVyZm9ybWVkIGJ5IHRoaXMgcGFzcyBhcmU6CgogICAgIExvb3AgaW52YXJpYW50IG1vdGlvbi4gIFRoaXMgcGFzcyBtb3ZlcyBvbmx5IGludmFyaWFudHMgdGhhdCB3b3VsZAogICAgIGJlIGhhcmQgdG8gaGFuZGxlIG9uIHJ0bCBsZXZlbCAoZnVuY3Rpb24gY2FsbHMsIG9wZXJhdGlvbnMgdGhhdAogICAgIGV4cGFuZCB0byBub250cml2aWFsIHNlcXVlbmNlcyBvZiBpbnNucykuICBXaXRoICctZnVuc3dpdGNoLWxvb3BzJwogICAgIGl0IGFsc28gbW92ZXMgb3BlcmFuZHMgb2YgY29uZGl0aW9ucyB0aGF0IGFyZSBpbnZhcmlhbnQgb3V0IG9mIHRoZQogICAgIGxvb3AsIHNvIHRoYXQgd2UgY2FuIHVzZSBqdXN0IHRyaXZpYWwgaW52YXJpYW50bmVzcyBhbmFseXNpcyBpbgogICAgIGxvb3AgdW5zd2l0Y2hpbmcuICBUaGUgcGFzcyBhbHNvIGluY2x1ZGVzIHN0b3JlIG1vdGlvbi4gIFRoZSBwYXNzCiAgICAgaXMgaW1wbGVtZW50ZWQgaW4gJ3RyZWUtc3NhLWxvb3AtaW0uYycuCgogICAgIENhbm9uaWNhbCBpbmR1Y3Rpb24gdmFyaWFibGUgY3JlYXRpb24uICBUaGlzIHBhc3MgY3JlYXRlcyBhIHNpbXBsZQogICAgIGNvdW50ZXIgZm9yIG51bWJlciBvZiBpdGVyYXRpb25zIG9mIHRoZSBsb29wIGFuZCByZXBsYWNlcyB0aGUgZXhpdAogICAgIGNvbmRpdGlvbiBvZiB0aGUgbG9vcCB1c2luZyBpdCwgaW4gY2FzZSB3aGVuIGEgY29tcGxpY2F0ZWQgYW5hbHlzaXMKICAgICBpcyBuZWNlc3NhcnkgdG8gZGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgaXRlcmF0aW9ucy4gIExhdGVyCiAgICAgb3B0aW1pemF0aW9ucyB0aGVuIG1heSBkZXRlcm1pbmUgdGhlIG51bWJlciBlYXNpbHkuICBUaGUgcGFzcyBpcwogICAgIGltcGxlbWVudGVkIGluICd0cmVlLXNzYS1sb29wLWl2Y2Fub24uYycuCgogICAgIEluZHVjdGlvbiB2YXJpYWJsZSBvcHRpbWl6YXRpb25zLiAgVGhpcyBwYXNzIHBlcmZvcm1zIHN0YW5kYXJkCiAgICAgaW5kdWN0aW9uIHZhcmlhYmxlIG9wdGltaXphdGlvbnMsIGluY2x1ZGluZyBzdHJlbmd0aCByZWR1Y3Rpb24sCiAgICAgaW5kdWN0aW9uIHZhcmlhYmxlIG1lcmdpbmcgYW5kIGluZHVjdGlvbiB2YXJpYWJsZSBlbGltaW5hdGlvbi4gIFRoZQogICAgIHBhc3MgaXMgaW1wbGVtZW50ZWQgaW4gJ3RyZWUtc3NhLWxvb3AtaXZvcHRzLmMnLgoKICAgICBMb29wIHVuc3dpdGNoaW5nLiAgVGhpcyBwYXNzIG1vdmVzIHRoZSBjb25kaXRpb25hbCBqdW1wcyB0aGF0IGFyZQogICAgIGludmFyaWFudCBvdXQgb2YgdGhlIGxvb3BzLiAgVG8gYWNoaWV2ZSB0aGlzLCBhIGR1cGxpY2F0ZSBvZiB0aGUKICAgICBsb29wIGlzIGNyZWF0ZWQgZm9yIGVhY2ggcG9zc2libGUgb3V0Y29tZSBvZiBjb25kaXRpb25hbCBqdW1wKHMpLgogICAgIFRoZSBwYXNzIGlzIGltcGxlbWVudGVkIGluICd0cmVlLXNzYS1sb29wLXVuc3dpdGNoLmMnLiAgVGhpcyBwYXNzCiAgICAgc2hvdWxkIGV2ZW50dWFsbHkgcmVwbGFjZSB0aGUgcnRsLWxldmVsIGxvb3AgdW5zd2l0Y2hpbmcgaW4KICAgICAnbG9vcC11bnN3aXRjaC5jJywgYnV0IGN1cnJlbnRseSB0aGUgcnRsLWxldmVsIHBhc3MgaXMgbm90CiAgICAgY29tcGxldGVseSByZWR1bmRhbnQgeWV0IGR1ZSB0byBkZWZpY2llbmNpZXMgaW4gdHJlZSBsZXZlbCBhbGlhcwogICAgIGFuYWx5c2lzLgoKICAgICBUaGUgb3B0aW1pemF0aW9ucyBhbHNvIHVzZSB2YXJpb3VzIHV0aWxpdHkgZnVuY3Rpb25zIGNvbnRhaW5lZCBpbgogICAgICd0cmVlLXNzYS1sb29wLW1hbmlwLmMnLCAnY2ZnbG9vcC5jJywgJ2NmZ2xvb3BhbmFsLmMnIGFuZAogICAgICdjZmdsb29wbWFuaXAuYycuCgogICAgIFZlY3Rvcml6YXRpb24uICBUaGlzIHBhc3MgdHJhbnNmb3JtcyBsb29wcyB0byBvcGVyYXRlIG9uIHZlY3RvcgogICAgIHR5cGVzIGluc3RlYWQgb2Ygc2NhbGFyIHR5cGVzLiAgRGF0YSBwYXJhbGxlbGlzbSBhY3Jvc3MgbG9vcAogICAgIGl0ZXJhdGlvbnMgaXMgZXhwbG9pdGVkIHRvIGdyb3VwIGRhdGEgZWxlbWVudHMgZnJvbSBjb25zZWN1dGl2ZQogICAgIGl0ZXJhdGlvbnMgaW50byBhIHZlY3RvciBhbmQgb3BlcmF0ZSBvbiB0aGVtIGluIHBhcmFsbGVsLgogICAgIERlcGVuZGluZyBvbiBhdmFpbGFibGUgdGFyZ2V0IHN1cHBvcnQgdGhlIGxvb3AgaXMgY29uY2VwdHVhbGx5CiAgICAgdW5yb2xsZWQgYnkgYSBmYWN0b3IgJ1ZGJyAodmVjdG9yaXphdGlvbiBmYWN0b3IpLCB3aGljaCBpcyB0aGUKICAgICBudW1iZXIgb2YgZWxlbWVudHMgb3BlcmF0ZWQgdXBvbiBpbiBwYXJhbGxlbCBpbiBlYWNoIGl0ZXJhdGlvbiwgYW5kCiAgICAgdGhlICdWRicgY29waWVzIG9mIGVhY2ggc2NhbGFyIG9wZXJhdGlvbiBhcmUgZnVzZWQgdG8gZm9ybSBhIHZlY3RvcgogICAgIG9wZXJhdGlvbi4gIEFkZGl0aW9uYWwgbG9vcCB0cmFuc2Zvcm1hdGlvbnMgc3VjaCBhcyBwZWVsaW5nIGFuZAogICAgIHZlcnNpb25pbmcgbWF5IHRha2UgcGxhY2UgdG8gYWxpZ24gdGhlIG51bWJlciBvZiBpdGVyYXRpb25zLCBhbmQgdG8KICAgICBhbGlnbiB0aGUgbWVtb3J5IGFjY2Vzc2VzIGluIHRoZSBsb29wLiAgVGhlIHBhc3MgaXMgaW1wbGVtZW50ZWQgaW4KICAgICAndHJlZS12ZWN0b3JpemVyLmMnICh0aGUgbWFpbiBkcml2ZXIgYW5kIGdlbmVyYWwgdXRpbGl0aWVzKSwKICAgICAndHJlZS12ZWN0LWFuYWx5emUuYycgYW5kICd0cmVlLXZlY3QtdHJhbnNmb3JtLmMnLiAgQW5hbHlzaXMgb2YKICAgICBkYXRhIHJlZmVyZW5jZXMgaXMgaW4gJ3RyZWUtZGF0YS1yZWYuYycuCgogICAgIEF1dG9wYXJhbGxlbGl6YXRpb24uICBUaGlzIHBhc3Mgc3BsaXRzIHRoZSBsb29wIGl0ZXJhdGlvbiBzcGFjZSB0bwogICAgIHJ1biBpbnRvIHNldmVyYWwgdGhyZWFkcy4gIFRoZSBwYXNzIGlzIGltcGxlbWVudGVkIGluCiAgICAgJ3RyZWUtcGFybG9vcHMuYycuCgogICAqIFRyZWUgbGV2ZWwgaWYtY29udmVyc2lvbiBmb3IgdmVjdG9yaXplcgoKICAgICBUaGlzIHBhc3MgYXBwbGllcyBpZi1jb252ZXJzaW9uIHRvIHNpbXBsZSBsb29wcyB0byBoZWxwIHZlY3Rvcml6ZXIuCiAgICAgV2UgaWRlbnRpZnkgaWYgY29udmVydGlibGUgbG9vcHMsIGlmLWNvbnZlcnQgc3RhdGVtZW50cyBhbmQgbWVyZ2UKICAgICBiYXNpYyBibG9ja3MgaW4gb25lIGJpZyBibG9jay4gIFRoZSBpZGVhIGlzIHRvIHByZXNlbnQgbG9vcCBpbiBzdWNoCiAgICAgZm9ybSBzbyB0aGF0IHZlY3Rvcml6ZXIgY2FuIGhhdmUgb25lIHRvIG9uZSBtYXBwaW5nIGJldHdlZW4KICAgICBzdGF0ZW1lbnRzIGFuZCBhdmFpbGFibGUgdmVjdG9yIG9wZXJhdGlvbnMuICBUaGlzIHBhdGNoCiAgICAgcmUtaW50cm9kdWNlcyBDT05EX0VYUFIgYXQgR0lNUExFIGxldmVsLiAgVGhpcyBwYXNzIGlzIGxvY2F0ZWQgaW4KICAgICAndHJlZS1pZi1jb252LmMnIGFuZCBpcyBkZXNjcmliZWQgYnkgJ3Bhc3NfaWZfY29udmVyc2lvbicuCgogICAqIENvbmRpdGlvbmFsIGNvbnN0YW50IHByb3BhZ2F0aW9uCgogICAgIFRoaXMgcGFzcyByZWxheGVzIGEgbGF0dGljZSBvZiB2YWx1ZXMgaW4gb3JkZXIgdG8gaWRlbnRpZnkgdGhvc2UKICAgICB0aGF0IG11c3QgYmUgY29uc3RhbnQgZXZlbiBpbiB0aGUgcHJlc2VuY2Ugb2YgY29uZGl0aW9uYWwgYnJhbmNoZXMuCiAgICAgVGhlIHBhc3MgaXMgbG9jYXRlZCBpbiAndHJlZS1zc2EtY2NwLmMnIGFuZCBpcyBkZXNjcmliZWQgYnkKICAgICAncGFzc19jY3AnLgoKICAgICBBIHJlbGF0ZWQgcGFzcyB0aGF0IHdvcmtzIG9uIG1lbW9yeSBsb2FkcyBhbmQgc3RvcmVzLCBhbmQgbm90IGp1c3QKICAgICByZWdpc3RlciB2YWx1ZXMsIGlzIGxvY2F0ZWQgaW4gJ3RyZWUtc3NhLWNjcC5jJyBhbmQgZGVzY3JpYmVkIGJ5CiAgICAgJ3Bhc3Nfc3RvcmVfY2NwJy4KCiAgICogQ29uZGl0aW9uYWwgY29weSBwcm9wYWdhdGlvbgoKICAgICBUaGlzIGlzIHNpbWlsYXIgdG8gY29uc3RhbnQgcHJvcGFnYXRpb24gYnV0IHRoZSBsYXR0aWNlIG9mIHZhbHVlcwogICAgIGlzIHRoZSAiY29weS1vZiIgcmVsYXRpb24uICBJdCBlbGltaW5hdGVzIHJlZHVuZGFudCBjb3BpZXMgZnJvbSB0aGUKICAgICBjb2RlLiAgVGhlIHBhc3MgaXMgbG9jYXRlZCBpbiAndHJlZS1zc2EtY29weS5jJyBhbmQgZGVzY3JpYmVkIGJ5CiAgICAgJ3Bhc3NfY29weV9wcm9wJy4KCiAgICAgQSByZWxhdGVkIHBhc3MgdGhhdCB3b3JrcyBvbiBtZW1vcnkgY29waWVzLCBhbmQgbm90IGp1c3QgcmVnaXN0ZXIKICAgICBjb3BpZXMsIGlzIGxvY2F0ZWQgaW4gJ3RyZWUtc3NhLWNvcHkuYycgYW5kIGRlc2NyaWJlZCBieQogICAgICdwYXNzX3N0b3JlX2NvcHlfcHJvcCcuCgogICAqIFZhbHVlIHJhbmdlIHByb3BhZ2F0aW9uCgogICAgIFRoaXMgdHJhbnNmb3JtYXRpb24gaXMgc2ltaWxhciB0byBjb25zdGFudCBwcm9wYWdhdGlvbiBidXQgaW5zdGVhZAogICAgIG9mIHByb3BhZ2F0aW5nIHNpbmdsZSBjb25zdGFudCB2YWx1ZXMsIGl0IHByb3BhZ2F0ZXMga25vd24gdmFsdWUKICAgICByYW5nZXMuICBUaGUgaW1wbGVtZW50YXRpb24gaXMgYmFzZWQgb24gUGF0dGVyc29uJ3MgcmFuZ2UKICAgICBwcm9wYWdhdGlvbiBhbGdvcml0aG0gKEFjY3VyYXRlIFN0YXRpYyBCcmFuY2ggUHJlZGljdGlvbiBieSBWYWx1ZQogICAgIFJhbmdlIFByb3BhZ2F0aW9uLCBKLiBSLiBDLiBQYXR0ZXJzb24sIFBMREkgJzk1KS4gIEluIGNvbnRyYXN0IHRvCiAgICAgUGF0dGVyc29uJ3MgYWxnb3JpdGhtLCB0aGlzIGltcGxlbWVudGF0aW9uIGRvZXMgbm90IHByb3BhZ2F0ZQogICAgIGJyYW5jaCBwcm9iYWJpbGl0aWVzIG5vciBpdCB1c2VzIG1vcmUgdGhhbiBhIHNpbmdsZSByYW5nZSBwZXIgU1NBCiAgICAgbmFtZS4gIFRoaXMgbWVhbnMgdGhhdCB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBjYW5ub3QgYmUgdXNlZAogICAgIGZvciBicmFuY2ggcHJlZGljdGlvbiAodGhvdWdoIGFkYXB0aW5nIGl0IHdvdWxkIG5vdCBiZSBkaWZmaWN1bHQpLgogICAgIFRoZSBwYXNzIGlzIGxvY2F0ZWQgaW4gJ3RyZWUtdnJwLmMnIGFuZCBpcyBkZXNjcmliZWQgYnkgJ3Bhc3NfdnJwJy4KCiAgICogRm9sZGluZyBidWlsdC1pbiBmdW5jdGlvbnMKCiAgICAgVGhpcyBwYXNzIHNpbXBsaWZpZXMgYnVpbHQtaW4gZnVuY3Rpb25zLCBhcyBhcHBsaWNhYmxlLCB3aXRoCiAgICAgY29uc3RhbnQgYXJndW1lbnRzIG9yIHdpdGggaW5mZXJhYmxlIHN0cmluZyBsZW5ndGhzLiAgSXQgaXMgbG9jYXRlZAogICAgIGluICd0cmVlLXNzYS1jY3AuYycgYW5kIGlzIGRlc2NyaWJlZCBieSAncGFzc19mb2xkX2J1aWx0aW5zJy4KCiAgICogU3BsaXQgY3JpdGljYWwgZWRnZXMKCiAgICAgVGhpcyBwYXNzIGlkZW50aWZpZXMgY3JpdGljYWwgZWRnZXMgYW5kIGluc2VydHMgZW1wdHkgYmFzaWMgYmxvY2tzCiAgICAgc3VjaCB0aGF0IHRoZSBlZGdlIGlzIG5vIGxvbmdlciBjcml0aWNhbC4gIFRoZSBwYXNzIGlzIGxvY2F0ZWQgaW4KICAgICAndHJlZS1jZmcuYycgYW5kIGlzIGRlc2NyaWJlZCBieSAncGFzc19zcGxpdF9jcml0X2VkZ2VzJy4KCiAgICogQ29udHJvbCBkZXBlbmRlbmNlIGRlYWQgY29kZSBlbGltaW5hdGlvbgoKICAgICBUaGlzIHBhc3MgaXMgYSBzdHJvbmdlciBmb3JtIG9mIGRlYWQgY29kZSBlbGltaW5hdGlvbiB0aGF0IGNhbgogICAgIGVsaW1pbmF0ZSB1bm5lY2Vzc2FyeSBjb250cm9sIGZsb3cgc3RhdGVtZW50cy4gIEl0IGlzIGxvY2F0ZWQgaW4KICAgICAndHJlZS1zc2EtZGNlLmMnIGFuZCBpcyBkZXNjcmliZWQgYnkgJ3Bhc3NfY2RfZGNlJy4KCiAgICogVGFpbCBjYWxsIGVsaW1pbmF0aW9uCgogICAgIFRoaXMgcGFzcyBpZGVudGlmaWVzIGZ1bmN0aW9uIGNhbGxzIHRoYXQgbWF5IGJlIHJld3JpdHRlbiBpbnRvCiAgICAganVtcHMuICBObyBjb2RlIHRyYW5zZm9ybWF0aW9uIGlzIGFjdHVhbGx5IGFwcGxpZWQgaGVyZSwgYnV0IHRoZQogICAgIGRhdGEgYW5kIGNvbnRyb2wgZmxvdyBwcm9ibGVtIGlzIHNvbHZlZC4gIFRoZSBjb2RlIHRyYW5zZm9ybWF0aW9uCiAgICAgcmVxdWlyZXMgdGFyZ2V0IHN1cHBvcnQsIGFuZCBzbyBpcyBkZWxheWVkIHVudGlsIFJUTC4gIEluIHRoZQogICAgIG1lYW50aW1lICdDQUxMX0VYUFJfVEFJTENBTEwnIGlzIHNldCBpbmRpY2F0aW5nIHRoZSBwb3NzaWJpbGl0eS4KICAgICBUaGUgcGFzcyBpcyBsb2NhdGVkIGluICd0cmVlLXRhaWxjYWxsLmMnIGFuZCBpcyBkZXNjcmliZWQgYnkKICAgICAncGFzc190YWlsX2NhbGxzJy4gIFRoZSBSVEwgdHJhbnNmb3JtYXRpb24gaXMgaGFuZGxlZCBieQogICAgICdmaXh1cF90YWlsX2NhbGxzJyBpbiAnY2FsbHMuYycuCgogICAqIFdhcm4gZm9yIGZ1bmN0aW9uIHJldHVybiB3aXRob3V0IHZhbHVlCgogICAgIEZvciBub24tdm9pZCBmdW5jdGlvbnMsIHRoaXMgcGFzcyBsb2NhdGVzIHJldHVybiBzdGF0ZW1lbnRzIHRoYXQgZG8KICAgICBub3Qgc3BlY2lmeSBhIHZhbHVlIGFuZCBpc3N1ZXMgYSB3YXJuaW5nLiAgU3VjaCBhIHN0YXRlbWVudCBtYXkKICAgICBoYXZlIGJlZW4gaW5qZWN0ZWQgYnkgZmFsbGluZyBvZmYgdGhlIGVuZCBvZiB0aGUgZnVuY3Rpb24uICBUaGlzCiAgICAgcGFzcyBpcyBydW4gbGFzdCBzbyB0aGF0IHdlIGhhdmUgYXMgbXVjaCB0aW1lIGFzIHBvc3NpYmxlIHRvIHByb3ZlCiAgICAgdGhhdCB0aGUgc3RhdGVtZW50IGlzIG5vdCByZWFjaGFibGUuICBJdCBpcyBsb2NhdGVkIGluICd0cmVlLWNmZy5jJwogICAgIGFuZCBpcyBkZXNjcmliZWQgYnkgJ3Bhc3Nfd2Fybl9mdW5jdGlvbl9yZXR1cm4nLgoKICAgKiBNdWRmbGFwIHN0YXRlbWVudCBhbm5vdGF0aW9uCgogICAgIElmIG11ZGZsYXAgaXMgZW5hYmxlZCwgd2UgcmV3cml0ZSBzb21lIG1lbW9yeSBhY2Nlc3NlcyB3aXRoIGNvZGUgdG8KICAgICB2YWxpZGF0ZSB0aGF0IHRoZSBtZW1vcnkgYWNjZXNzIGlzIGNvcnJlY3QuICBJbiBwYXJ0aWN1bGFyLAogICAgIGV4cHJlc3Npb25zIGludm9sdmluZyBwb2ludGVyIGRlcmVmZXJlbmNlcyAoJ0lORElSRUNUX1JFRicsCiAgICAgJ0FSUkFZX1JFRicsIGV0Yy4pICBhcmUgcmVwbGFjZWQgYnkgY29kZSB0aGF0IGNoZWNrcyB0aGUgc2VsZWN0ZWQKICAgICBhZGRyZXNzIHJhbmdlIGFnYWluc3QgdGhlIG11ZGZsYXAgcnVudGltZSdzIGRhdGFiYXNlIG9mIHZhbGlkCiAgICAgcmVnaW9ucy4gIFRoaXMgY2hlY2sgaW5jbHVkZXMgYW4gaW5saW5lIGxvb2t1cCBpbnRvIGEgZGlyZWN0LW1hcHBlZAogICAgIGNhY2hlLCBiYXNlZCBvbiBzaGlmdC9tYXNrIG9wZXJhdGlvbnMgb2YgdGhlIHBvaW50ZXIgdmFsdWUsIHdpdGggYQogICAgIGZhbGxiYWNrIGZ1bmN0aW9uIGNhbGwgaW50byB0aGUgcnVudGltZS4gIFRoZSBwYXNzIGlzIGxvY2F0ZWQgaW4KICAgICAndHJlZS1tdWRmbGFwLmMnIGFuZCBpcyBkZXNjcmliZWQgYnkgJ3Bhc3NfbXVkZmxhcF8yJy4KCiAgICogTGVhdmUgc3RhdGljIHNpbmdsZSBhc3NpZ25tZW50IGZvcm0KCiAgICAgVGhpcyBwYXNzIHJld3JpdGVzIHRoZSBmdW5jdGlvbiBzdWNoIHRoYXQgaXQgaXMgaW4gbm9ybWFsIGZvcm0uICBBdAogICAgIHRoZSBzYW1lIHRpbWUsIHdlIGVsaW1pbmF0ZSBhcyBtYW55IHNpbmdsZS11c2UgdGVtcG9yYXJpZXMgYXMKICAgICBwb3NzaWJsZSwgc28gdGhlIGludGVybWVkaWF0ZSBsYW5ndWFnZSBpcyBubyBsb25nZXIgR0lNUExFLCBidXQKICAgICBHRU5FUklDLiAgVGhlIHBhc3MgaXMgbG9jYXRlZCBpbiAndHJlZS1vdXRvZi1zc2EuYycgYW5kIGlzCiAgICAgZGVzY3JpYmVkIGJ5ICdwYXNzX2RlbF9zc2EnLgoKICAgKiBNZXJnZSBQSEkgbm9kZXMgdGhhdCBmZWVkIGludG8gb25lIGFub3RoZXIKCiAgICAgVGhpcyBpcyBwYXJ0IG9mIHRoZSBDRkcgY2xlYW51cCBwYXNzZXMuICBJdCBhdHRlbXB0cyB0byBqb2luIFBISQogICAgIG5vZGVzIGZyb20gYSBmb3J3YXJkZXIgQ0ZHIGJsb2NrIGludG8gYW5vdGhlciBibG9jayB3aXRoIFBISSBub2Rlcy4KICAgICBUaGUgcGFzcyBpcyBsb2NhdGVkIGluICd0cmVlLWNmZ2NsZWFudXAuYycgYW5kIGlzIGRlc2NyaWJlZCBieQogICAgICdwYXNzX21lcmdlX3BoaScuCgogICAqIFJldHVybiB2YWx1ZSBvcHRpbWl6YXRpb24KCiAgICAgSWYgYSBmdW5jdGlvbiBhbHdheXMgcmV0dXJucyB0aGUgc2FtZSBsb2NhbCB2YXJpYWJsZSwgYW5kIHRoYXQKICAgICBsb2NhbCB2YXJpYWJsZSBpcyBhbiBhZ2dyZWdhdGUgdHlwZSwgdGhlbiB0aGUgdmFyaWFibGUgaXMgcmVwbGFjZWQKICAgICB3aXRoIHRoZSByZXR1cm4gdmFsdWUgZm9yIHRoZSBmdW5jdGlvbiAoaS5lLiwgdGhlIGZ1bmN0aW9uJ3MKICAgICBERUNMX1JFU1VMVCkuIFRoaXMgaXMgZXF1aXZhbGVudCB0byB0aGUgQysrIG5hbWVkIHJldHVybiB2YWx1ZQogICAgIG9wdGltaXphdGlvbiBhcHBsaWVkIHRvIEdJTVBMRS4gIFRoZSBwYXNzIGlzIGxvY2F0ZWQgaW4KICAgICAndHJlZS1ucnYuYycgYW5kIGlzIGRlc2NyaWJlZCBieSAncGFzc19ucnYnLgoKICAgKiBSZXR1cm4gc2xvdCBvcHRpbWl6YXRpb24KCiAgICAgSWYgYSBmdW5jdGlvbiByZXR1cm5zIGEgbWVtb3J5IG9iamVjdCBhbmQgaXMgY2FsbGVkIGFzICd2YXIgPQogICAgIGZvbygpJywgdGhpcyBwYXNzIHRyaWVzIHRvIGNoYW5nZSB0aGUgY2FsbCBzbyB0aGF0IHRoZSBhZGRyZXNzIG9mCiAgICAgJ3ZhcicgaXMgc2VudCB0byB0aGUgY2FsbGVyIHRvIGF2b2lkIGFuIGV4dHJhIG1lbW9yeSBjb3B5LiAgVGhpcwogICAgIHBhc3MgaXMgbG9jYXRlZCBpbiAndHJlZS1ucnYuYycgYW5kIGlzIGRlc2NyaWJlZCBieQogICAgICdwYXNzX3JldHVybl9zbG90Jy4KCiAgICogT3B0aW1pemUgY2FsbHMgdG8gJ19fYnVpbHRpbl9vYmplY3Rfc2l6ZScKCiAgICAgVGhpcyBpcyBhIHByb3BhZ2F0aW9uIHBhc3Mgc2ltaWxhciB0byBDQ1AgdGhhdCB0cmllcyB0byByZW1vdmUKICAgICBjYWxscyB0byAnX19idWlsdGluX29iamVjdF9zaXplJyB3aGVuIHRoZSBzaXplIG9mIHRoZSBvYmplY3QgY2FuIGJlCiAgICAgY29tcHV0ZWQgYXQgY29tcGlsZS10aW1lLiAgVGhpcyBwYXNzIGlzIGxvY2F0ZWQgaW4KICAgICAndHJlZS1vYmplY3Qtc2l6ZS5jJyBhbmQgaXMgZGVzY3JpYmVkIGJ5ICdwYXNzX29iamVjdF9zaXplcycuCgogICAqIExvb3AgaW52YXJpYW50IG1vdGlvbgoKICAgICBUaGlzIHBhc3MgcmVtb3ZlcyBleHBlbnNpdmUgbG9vcC1pbnZhcmlhbnQgY29tcHV0YXRpb25zIG91dCBvZgogICAgIGxvb3BzLiAgVGhlIHBhc3MgaXMgbG9jYXRlZCBpbiAndHJlZS1zc2EtbG9vcC5jJyBhbmQgZGVzY3JpYmVkIGJ5CiAgICAgJ3Bhc3NfbGltJy4KCiAgICogTG9vcCBuZXN0IG9wdGltaXphdGlvbnMKCiAgICAgVGhpcyBpcyBhIGZhbWlseSBvZiBsb29wIHRyYW5zZm9ybWF0aW9ucyB0aGF0IHdvcmtzIG9uIGxvb3AgbmVzdHMuCiAgICAgSXQgaW5jbHVkZXMgbG9vcCBpbnRlcmNoYW5nZSwgc2NhbGluZywgc2tld2luZyBhbmQgcmV2ZXJzYWwgYW5kCiAgICAgdGhleSBhcmUgYWxsIGdlYXJlZCB0byB0aGUgb3B0aW1pemF0aW9uIG9mIGRhdGEgbG9jYWxpdHkgaW4gYXJyYXkKICAgICB0cmF2ZXJzYWxzIGFuZCB0aGUgcmVtb3ZhbCBvZiBkZXBlbmRlbmNpZXMgdGhhdCBoYW1wZXIKICAgICBvcHRpbWl6YXRpb25zIHN1Y2ggYXMgbG9vcCBwYXJhbGxlbGl6YXRpb24gYW5kIHZlY3Rvcml6YXRpb24uICBUaGUKICAgICBwYXNzIGlzIGxvY2F0ZWQgaW4gJ3RyZWUtbG9vcC1saW5lYXIuYycgYW5kIGRlc2NyaWJlZCBieQogICAgICdwYXNzX2xpbmVhcl90cmFuc2Zvcm0nLgoKICAgKiBSZW1vdmFsIG9mIGVtcHR5IGxvb3BzCgogICAgIFRoaXMgcGFzcyByZW1vdmVzIGxvb3BzIHdpdGggbm8gY29kZSBpbiB0aGVtLiAgVGhlIHBhc3MgaXMgbG9jYXRlZAogICAgIGluICd0cmVlLXNzYS1sb29wLWl2Y2Fub24uYycgYW5kIGRlc2NyaWJlZCBieSAncGFzc19lbXB0eV9sb29wJy4KCiAgICogVW5yb2xsaW5nIG9mIHNtYWxsIGxvb3BzCgogICAgIFRoaXMgcGFzcyBjb21wbGV0ZWx5IHVucm9sbHMgbG9vcHMgd2l0aCBmZXcgaXRlcmF0aW9ucy4gIFRoZSBwYXNzCiAgICAgaXMgbG9jYXRlZCBpbiAndHJlZS1zc2EtbG9vcC1pdmNhbm9uLmMnIGFuZCBkZXNjcmliZWQgYnkKICAgICAncGFzc19jb21wbGV0ZV91bnJvbGwnLgoKICAgKiBQcmVkaWN0aXZlIGNvbW1vbmluZwoKICAgICBUaGlzIHBhc3MgbWFrZXMgdGhlIGNvZGUgcmV1c2UgdGhlIGNvbXB1dGF0aW9ucyBmcm9tIHRoZSBwcmV2aW91cwogICAgIGl0ZXJhdGlvbnMgb2YgdGhlIGxvb3BzLCBlc3BlY2lhbGx5IGxvYWRzIGFuZCBzdG9yZXMgdG8gbWVtb3J5LiAgSXQKICAgICBkb2VzIHNvIGJ5IHN0b3JpbmcgdGhlIHZhbHVlcyBvZiB0aGVzZSBjb21wdXRhdGlvbnMgdG8gYSBiYW5rIG9mCiAgICAgdGVtcG9yYXJ5IHZhcmlhYmxlcyB0aGF0IGFyZSByb3RhdGVkIGF0IHRoZSBlbmQgb2YgbG9vcC4gIFRvIGF2b2lkCiAgICAgdGhlIG5lZWQgZm9yIHRoaXMgcm90YXRpb24sIHRoZSBsb29wIGlzIHRoZW4gdW5yb2xsZWQgYW5kIHRoZQogICAgIGNvcGllcyBvZiB0aGUgbG9vcCBib2R5IGFyZSByZXdyaXR0ZW4gdG8gdXNlIHRoZSBhcHByb3ByaWF0ZQogICAgIHZlcnNpb24gb2YgdGhlIHRlbXBvcmFyeSB2YXJpYWJsZS4gIFRoaXMgcGFzcyBpcyBsb2NhdGVkIGluCiAgICAgJ3RyZWUtcHJlZGNvbS5jJyBhbmQgZGVzY3JpYmVkIGJ5ICdwYXNzX3ByZWRjb20nLgoKICAgKiBBcnJheSBwcmVmZXRjaGluZwoKICAgICBUaGlzIHBhc3MgaXNzdWVzIHByZWZldGNoIGluc3RydWN0aW9ucyBmb3IgYXJyYXkgcmVmZXJlbmNlcyBpbnNpZGUKICAgICBsb29wcy4gIFRoZSBwYXNzIGlzIGxvY2F0ZWQgaW4gJ3RyZWUtc3NhLWxvb3AtcHJlZmV0Y2guYycgYW5kCiAgICAgZGVzY3JpYmVkIGJ5ICdwYXNzX2xvb3BfcHJlZmV0Y2gnLgoKICAgKiBSZWFzc29jaWF0aW9uCgogICAgIFRoaXMgcGFzcyByZXdyaXRlcyBhcml0aG1ldGljIGV4cHJlc3Npb25zIHRvIGVuYWJsZSBvcHRpbWl6YXRpb25zCiAgICAgdGhhdCBvcGVyYXRlIG9uIHRoZW0sIGxpa2UgcmVkdW5kYW5jeSBlbGltaW5hdGlvbiBhbmQKICAgICB2ZWN0b3JpemF0aW9uLiAgVGhlIHBhc3MgaXMgbG9jYXRlZCBpbiAndHJlZS1zc2EtcmVhc3NvYy5jJyBhbmQKICAgICBkZXNjcmliZWQgYnkgJ3Bhc3NfcmVhc3NvYycuCgogICAqIE9wdGltaXphdGlvbiBvZiAnc3RkYXJnJyBmdW5jdGlvbnMKCiAgICAgVGhpcyBwYXNzIHRyaWVzIHRvIGF2b2lkIHRoZSBzYXZpbmcgb2YgcmVnaXN0ZXIgYXJndW1lbnRzIGludG8gdGhlCiAgICAgc3RhY2sgb24gZW50cnkgdG8gJ3N0ZGFyZycgZnVuY3Rpb25zLiAgSWYgdGhlIGZ1bmN0aW9uIGRvZXNuJ3QgdXNlCiAgICAgYW55ICd2YV9zdGFydCcgbWFjcm9zLCBubyByZWdpc3RlcnMgbmVlZCB0byBiZSBzYXZlZC4gIElmCiAgICAgJ3ZhX3N0YXJ0JyBtYWNyb3MgYXJlIHVzZWQsIHRoZSAndmFfbGlzdCcgdmFyaWFibGVzIGRvbid0IGVzY2FwZQogICAgIHRoZSBmdW5jdGlvbiwgaXQgaXMgb25seSBuZWNlc3NhcnkgdG8gc2F2ZSByZWdpc3RlcnMgdGhhdCB3aWxsIGJlCiAgICAgdXNlZCBpbiAndmFfYXJnJyBtYWNyb3MuICBGb3IgaW5zdGFuY2UsIGlmICd2YV9hcmcnIGlzIG9ubHkgdXNlZAogICAgIHdpdGggaW50ZWdyYWwgdHlwZXMgaW4gdGhlIGZ1bmN0aW9uLCBmbG9hdGluZyBwb2ludCByZWdpc3RlcnMgZG9uJ3QKICAgICBuZWVkIHRvIGJlIHNhdmVkLiAgVGhpcyBwYXNzIGlzIGxvY2F0ZWQgaW4gJ3RyZWUtc3RkYXJnLmMnIGFuZAogICAgIGRlc2NyaWJlZCBieSAncGFzc19zdGRhcmcnLgoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IFJUTCBwYXNzZXMsICBQcmV2OiBUcmVlLVNTQSBwYXNzZXMsICBVcDogUGFzc2VzCgo4LjUgUlRMIHBhc3Nlcwo9PT09PT09PT09PT09PQoKVGhlIGZvbGxvd2luZyBicmllZmx5IGRlc2NyaWJlcyB0aGUgcnRsIGdlbmVyYXRpb24gYW5kIG9wdGltaXphdGlvbgpwYXNzZXMgdGhhdCBhcmUgcnVuIGFmdGVyIHRyZWUgb3B0aW1pemF0aW9uLgoKICAgKiBSVEwgZ2VuZXJhdGlvbgoKICAgICBUaGUgc291cmNlIGZpbGVzIGZvciBSVEwgZ2VuZXJhdGlvbiBpbmNsdWRlICdzdG10LmMnLCAnY2FsbHMuYycsCiAgICAgJ2V4cHIuYycsICdleHBsb3cuYycsICdleHBtZWQuYycsICdmdW5jdGlvbi5jJywgJ29wdGFicy5jJyBhbmQKICAgICAnZW1pdC1ydGwuYycuICBBbHNvLCB0aGUgZmlsZSAnaW5zbi1lbWl0LmMnLCBnZW5lcmF0ZWQgZnJvbSB0aGUKICAgICBtYWNoaW5lIGRlc2NyaXB0aW9uIGJ5IHRoZSBwcm9ncmFtICdnZW5lbWl0JywgaXMgdXNlZCBpbiB0aGlzIHBhc3MuCiAgICAgVGhlIGhlYWRlciBmaWxlICdleHByLmgnIGlzIHVzZWQgZm9yIGNvbW11bmljYXRpb24gd2l0aGluIHRoaXMKICAgICBwYXNzLgoKICAgICBUaGUgaGVhZGVyIGZpbGVzICdpbnNuLWZsYWdzLmgnIGFuZCAnaW5zbi1jb2Rlcy5oJywgZ2VuZXJhdGVkIGZyb20KICAgICB0aGUgbWFjaGluZSBkZXNjcmlwdGlvbiBieSB0aGUgcHJvZ3JhbXMgJ2dlbmZsYWdzJyBhbmQgJ2dlbmNvZGVzJywKICAgICB0ZWxsIHRoaXMgcGFzcyB3aGljaCBzdGFuZGFyZCBuYW1lcyBhcmUgYXZhaWxhYmxlIGZvciB1c2UgYW5kIHdoaWNoCiAgICAgcGF0dGVybnMgY29ycmVzcG9uZCB0byB0aGVtLgoKICAgKiBHZW5lcmF0ZSBleGNlcHRpb24gaGFuZGxpbmcgbGFuZGluZyBwYWRzCgogICAgIFRoaXMgcGFzcyBnZW5lcmF0ZXMgdGhlIGdsdWUgdGhhdCBoYW5kbGVzIGNvbW11bmljYXRpb24gYmV0d2VlbiB0aGUKICAgICBleGNlcHRpb24gaGFuZGxpbmcgbGlicmFyeSByb3V0aW5lcyBhbmQgdGhlIGV4Y2VwdGlvbiBoYW5kbGVycwogICAgIHdpdGhpbiB0aGUgZnVuY3Rpb24uICBFbnRyeSBwb2ludHMgaW4gdGhlIGZ1bmN0aW9uIHRoYXQgYXJlIGludm9rZWQKICAgICBieSB0aGUgZXhjZXB0aW9uIGhhbmRsaW5nIGxpYnJhcnkgYXJlIGNhbGxlZCAibGFuZGluZyBwYWRzIi4gIFRoZQogICAgIGNvZGUgZm9yIHRoaXMgcGFzcyBpcyBsb2NhdGVkIHdpdGhpbiAnZXhjZXB0LmMnLgoKICAgKiBDbGVhbnVwIGNvbnRyb2wgZmxvdyBncmFwaAoKICAgICBUaGlzIHBhc3MgcmVtb3ZlcyB1bnJlYWNoYWJsZSBjb2RlLCBzaW1wbGlmaWVzIGp1bXBzIHRvIG5leHQsIGp1bXBzCiAgICAgdG8ganVtcCwganVtcHMgYWNyb3NzIGp1bXBzLCBldGMuICBUaGUgcGFzcyBpcyBydW4gbXVsdGlwbGUgdGltZXMuCiAgICAgRm9yIGhpc3RvcmljYWwgcmVhc29ucywgaXQgaXMgb2NjYXNpb25hbGx5IHJlZmVycmVkIHRvIGFzIHRoZSAianVtcAogICAgIG9wdGltaXphdGlvbiBwYXNzIi4gIFRoZSBidWxrIG9mIHRoZSBjb2RlIGZvciB0aGlzIHBhc3MgaXMgaW4KICAgICAnY2ZnY2xlYW51cC5jJywgYW5kIHRoZXJlIGFyZSBzdXBwb3J0IHJvdXRpbmVzIGluICdjZmdydGwuYycgYW5kCiAgICAgJ2p1bXAuYycuCgogICAqIEZvcndhcmQgcHJvcGFnYXRpb24gb2Ygc2luZ2xlLWRlZiB2YWx1ZXMKCiAgICAgVGhpcyBwYXNzIGF0dGVtcHRzIHRvIHJlbW92ZSByZWR1bmRhbnQgY29tcHV0YXRpb24gYnkgc3Vic3RpdHV0aW5nCiAgICAgdmFyaWFibGVzIHRoYXQgY29tZSBmcm9tIGEgc2luZ2xlIGRlZmluaXRpb24sIGFuZCBzZWVpbmcgaWYgdGhlCiAgICAgcmVzdWx0IGNhbiBiZSBzaW1wbGlmaWVkLiAgSXQgcGVyZm9ybXMgY29weSBwcm9wYWdhdGlvbiBhbmQKICAgICBhZGRyZXNzaW5nIG1vZGUgc2VsZWN0aW9uLiAgVGhlIHBhc3MgaXMgcnVuIHR3aWNlLCB3aXRoIHZhbHVlcwogICAgIGJlaW5nIHByb3BhZ2F0ZWQgaW50byBsb29wcyBvbmx5IG9uIHRoZSBzZWNvbmQgcnVuLiAgSXQgaXMgbG9jYXRlZAogICAgIGluICdmd3Byb3AuYycuCgogICAqIENvbW1vbiBzdWJleHByZXNzaW9uIGVsaW1pbmF0aW9uCgogICAgIFRoaXMgcGFzcyByZW1vdmVzIHJlZHVuZGFudCBjb21wdXRhdGlvbiB3aXRoaW4gYmFzaWMgYmxvY2tzLCBhbmQKICAgICBvcHRpbWl6ZXMgYWRkcmVzc2luZyBtb2RlcyBiYXNlZCBvbiBjb3N0LiAgVGhlIHBhc3MgaXMgcnVuIHR3aWNlLgogICAgIFRoZSBzb3VyY2UgaXMgbG9jYXRlZCBpbiAnY3NlLmMnLgoKICAgKiBHbG9iYWwgY29tbW9uIHN1YmV4cHJlc3Npb24gZWxpbWluYXRpb24uCgogICAgIFRoaXMgcGFzcyBwZXJmb3JtcyB0d28gZGlmZmVyZW50IHR5cGVzIG9mIEdDU0UgZGVwZW5kaW5nIG9uIHdoZXRoZXIKICAgICB5b3UgYXJlIG9wdGltaXppbmcgZm9yIHNpemUgb3Igbm90IChMQ00gYmFzZWQgR0NTRSB0ZW5kcyB0bwogICAgIGluY3JlYXNlIGNvZGUgc2l6ZSBmb3IgYSBnYWluIGluIHNwZWVkLCB3aGlsZSBNb3JlbC1SZW52b2lzZSBiYXNlZAogICAgIEdDU0UgZG9lcyBub3QpLiAgV2hlbiBvcHRpbWl6aW5nIGZvciBzaXplLCBHQ1NFIGlzIGRvbmUgdXNpbmcKICAgICBNb3JlbC1SZW52b2lzZSBQYXJ0aWFsIFJlZHVuZGFuY3kgRWxpbWluYXRpb24sIHdpdGggdGhlIGV4Y2VwdGlvbgogICAgIHRoYXQgaXQgZG9lcyBub3QgdHJ5IHRvIG1vdmUgaW52YXJpYW50cyBvdXQgb2YgbG9vcHMtLXRoYXQgaXMgbGVmdAogICAgIHRvIHRoZSBsb29wIG9wdGltaXphdGlvbiBwYXNzLiAgSWYgTVIgUFJFIEdDU0UgaXMgZG9uZSwgY29kZQogICAgIGhvaXN0aW5nIChha2EgdW5pZmljYXRpb24pIGlzIGFsc28gZG9uZSwgYXMgd2VsbCBhcyBsb2FkIG1vdGlvbi4KICAgICBJZiB5b3UgYXJlIG9wdGltaXppbmcgZm9yIHNwZWVkLCBMQ00gKGxhenkgY29kZSBtb3Rpb24pIGJhc2VkIEdDU0UKICAgICBpcyBkb25lLiAgTENNIGlzIGJhc2VkIG9uIHRoZSB3b3JrIG9mIEtub29wLCBSdXRoaW5nLCBhbmQgU3RlZmZlbi4KICAgICBMQ00gYmFzZWQgR0NTRSBhbHNvIGRvZXMgbG9vcCBpbnZhcmlhbnQgY29kZSBtb3Rpb24uICBXZSBhbHNvCiAgICAgcGVyZm9ybSBsb2FkIGFuZCBzdG9yZSBtb3Rpb24gd2hlbiBvcHRpbWl6aW5nIGZvciBzcGVlZC4KICAgICBSZWdhcmRsZXNzIG9mIHdoaWNoIHR5cGUgb2YgR0NTRSBpcyB1c2VkLCB0aGUgR0NTRSBwYXNzIGFsc28KICAgICBwZXJmb3JtcyBnbG9iYWwgY29uc3RhbnQgYW5kIGNvcHkgcHJvcGFnYXRpb24uICBUaGUgc291cmNlIGZpbGUgZm9yCiAgICAgdGhpcyBwYXNzIGlzICdnY3NlLmMnLCBhbmQgdGhlIExDTSByb3V0aW5lcyBhcmUgaW4gJ2xjbS5jJy4KCiAgICogTG9vcCBvcHRpbWl6YXRpb24KCiAgICAgVGhpcyBwYXNzIHBlcmZvcm1zIHNldmVyYWwgbG9vcCByZWxhdGVkIG9wdGltaXphdGlvbnMuICBUaGUgc291cmNlCiAgICAgZmlsZXMgJ2NmZ2xvb3BhbmFsLmMnIGFuZCAnY2ZnbG9vcG1hbmlwLmMnIGNvbnRhaW4gZ2VuZXJpYyBsb29wCiAgICAgYW5hbHlzaXMgYW5kIG1hbmlwdWxhdGlvbiBjb2RlLiAgSW5pdGlhbGl6YXRpb24gYW5kIGZpbmFsaXphdGlvbiBvZgogICAgIGxvb3Agc3RydWN0dXJlcyBpcyBoYW5kbGVkIGJ5ICdsb29wLWluaXQuYycuICBBIGxvb3AgaW52YXJpYW50CiAgICAgbW90aW9uIHBhc3MgaXMgaW1wbGVtZW50ZWQgaW4gJ2xvb3AtaW52YXJpYW50LmMnLiAgQmFzaWMgYmxvY2sKICAgICBsZXZlbCBvcHRpbWl6YXRpb25zLS11bnJvbGxpbmcsIHBlZWxpbmcgYW5kIHVuc3dpdGNoaW5nIGxvb3BzLS0gYXJlCiAgICAgaW1wbGVtZW50ZWQgaW4gJ2xvb3AtdW5zd2l0Y2guYycgYW5kICdsb29wLXVucm9sbC5jJy4gIFJlcGxhY2luZyBvZgogICAgIHRoZSBleGl0IGNvbmRpdGlvbiBvZiBsb29wcyBieSBzcGVjaWFsIG1hY2hpbmUtZGVwZW5kZW50CiAgICAgaW5zdHJ1Y3Rpb25zIGlzIGhhbmRsZWQgYnkgJ2xvb3AtZG9sb29wLmMnLgoKICAgKiBKdW1wIGJ5cGFzc2luZwoKICAgICBUaGlzIHBhc3MgaXMgYW4gYWdncmVzc2l2ZSBmb3JtIG9mIEdDU0UgdGhhdCB0cmFuc2Zvcm1zIHRoZSBjb250cm9sCiAgICAgZmxvdyBncmFwaCBvZiBhIGZ1bmN0aW9uIGJ5IHByb3BhZ2F0aW5nIGNvbnN0YW50cyBpbnRvIGNvbmRpdGlvbmFsCiAgICAgYnJhbmNoIGluc3RydWN0aW9ucy4gIFRoZSBzb3VyY2UgZmlsZSBmb3IgdGhpcyBwYXNzIGlzICdnY3NlLmMnLgoKICAgKiBJZiBjb252ZXJzaW9uCgogICAgIFRoaXMgcGFzcyBhdHRlbXB0cyB0byByZXBsYWNlIGNvbmRpdGlvbmFsIGJyYW5jaGVzIGFuZCBzdXJyb3VuZGluZwogICAgIGFzc2lnbm1lbnRzIHdpdGggYXJpdGhtZXRpYywgYm9vbGVhbiB2YWx1ZSBwcm9kdWNpbmcgY29tcGFyaXNvbgogICAgIGluc3RydWN0aW9ucywgYW5kIGNvbmRpdGlvbmFsIG1vdmUgaW5zdHJ1Y3Rpb25zLiAgSW4gdGhlIHZlcnkgbGFzdAogICAgIGludm9jYXRpb24gYWZ0ZXIgcmVsb2FkLCBpdCB3aWxsIGdlbmVyYXRlIHByZWRpY2F0ZWQgaW5zdHJ1Y3Rpb25zCiAgICAgd2hlbiBzdXBwb3J0ZWQgYnkgdGhlIHRhcmdldC4gIFRoZSBwYXNzIGlzIGxvY2F0ZWQgaW4gJ2lmY3Z0LmMnLgoKICAgKiBXZWIgY29uc3RydWN0aW9uCgogICAgIFRoaXMgcGFzcyBzcGxpdHMgaW5kZXBlbmRlbnQgdXNlcyBvZiBlYWNoIHBzZXVkby1yZWdpc3Rlci4gIFRoaXMKICAgICBjYW4gaW1wcm92ZSBlZmZlY3Qgb2YgdGhlIG90aGVyIHRyYW5zZm9ybWF0aW9uLCBzdWNoIGFzIENTRSBvcgogICAgIHJlZ2lzdGVyIGFsbG9jYXRpb24uICBJdHMgc291cmNlIGZpbGVzIGFyZSAnd2ViLmMnLgoKICAgKiBMaWZlIGFuYWx5c2lzCgogICAgIFRoaXMgcGFzcyBjb21wdXRlcyB3aGljaCBwc2V1ZG8tcmVnaXN0ZXJzIGFyZSBsaXZlIGF0IGVhY2ggcG9pbnQgaW4KICAgICB0aGUgcHJvZ3JhbSwgYW5kIG1ha2VzIHRoZSBmaXJzdCBpbnN0cnVjdGlvbiB0aGF0IHVzZXMgYSB2YWx1ZQogICAgIHBvaW50IGF0IHRoZSBpbnN0cnVjdGlvbiB0aGF0IGNvbXB1dGVkIHRoZSB2YWx1ZS4gIEl0IHRoZW4gZGVsZXRlcwogICAgIGNvbXB1dGF0aW9ucyB3aG9zZSByZXN1bHRzIGFyZSBuZXZlciB1c2VkLCBhbmQgY29tYmluZXMgbWVtb3J5CiAgICAgcmVmZXJlbmNlcyB3aXRoIGFkZCBvciBzdWJ0cmFjdCBpbnN0cnVjdGlvbnMgdG8gbWFrZSBhdXRvaW5jcmVtZW50CiAgICAgb3IgYXV0b2RlY3JlbWVudCBhZGRyZXNzaW5nLiAgVGhlIHBhc3MgaXMgbG9jYXRlZCBpbiAnZmxvdy5jJy4KCiAgICogSW5zdHJ1Y3Rpb24gY29tYmluYXRpb24KCiAgICAgVGhpcyBwYXNzIGF0dGVtcHRzIHRvIGNvbWJpbmUgZ3JvdXBzIG9mIHR3byBvciB0aHJlZSBpbnN0cnVjdGlvbnMKICAgICB0aGF0IGFyZSByZWxhdGVkIGJ5IGRhdGEgZmxvdyBpbnRvIHNpbmdsZSBpbnN0cnVjdGlvbnMuICBJdAogICAgIGNvbWJpbmVzIHRoZSBSVEwgZXhwcmVzc2lvbnMgZm9yIHRoZSBpbnN0cnVjdGlvbnMgYnkgc3Vic3RpdHV0aW9uLAogICAgIHNpbXBsaWZpZXMgdGhlIHJlc3VsdCB1c2luZyBhbGdlYnJhLCBhbmQgdGhlbiBhdHRlbXB0cyB0byBtYXRjaCB0aGUKICAgICByZXN1bHQgYWdhaW5zdCB0aGUgbWFjaGluZSBkZXNjcmlwdGlvbi4gIFRoZSBwYXNzIGlzIGxvY2F0ZWQgaW4KICAgICAnY29tYmluZS5jJy4KCiAgICogUmVnaXN0ZXIgbW92ZW1lbnQKCiAgICAgVGhpcyBwYXNzIGxvb2tzIGZvciBjYXNlcyB3aGVyZSBtYXRjaGluZyBjb25zdHJhaW50cyB3b3VsZCBmb3JjZSBhbgogICAgIGluc3RydWN0aW9uIHRvIG5lZWQgYSByZWxvYWQsIGFuZCB0aGlzIHJlbG9hZCB3b3VsZCBiZSBhCiAgICAgcmVnaXN0ZXItdG8tcmVnaXN0ZXIgbW92ZS4gIEl0IHRoZW4gYXR0ZW1wdHMgdG8gY2hhbmdlIHRoZQogICAgIHJlZ2lzdGVycyB1c2VkIGJ5IHRoZSBpbnN0cnVjdGlvbiB0byBhdm9pZCB0aGUgbW92ZSBpbnN0cnVjdGlvbi4KICAgICBUaGUgcGFzcyBpcyBsb2NhdGVkIGluICdyZWdtb3ZlLmMnLgoKICAgKiBPcHRpbWl6ZSBtb2RlIHN3aXRjaGluZwoKICAgICBUaGlzIHBhc3MgbG9va3MgZm9yIGluc3RydWN0aW9ucyB0aGF0IHJlcXVpcmUgdGhlIHByb2Nlc3NvciB0byBiZQogICAgIGluIGEgc3BlY2lmaWMgIm1vZGUiIGFuZCBtaW5pbWl6ZXMgdGhlIG51bWJlciBvZiBtb2RlIGNoYW5nZXMKICAgICByZXF1aXJlZCB0byBzYXRpc2Z5IGFsbCB1c2Vycy4gIFdoYXQgdGhlc2UgbW9kZXMgYXJlLCBhbmQgd2hhdCB0aGV5CiAgICAgYXBwbHkgdG8gYXJlIGNvbXBsZXRlbHkgdGFyZ2V0LXNwZWNpZmljLiAgVGhlIHNvdXJjZSBpcyBsb2NhdGVkIGluCiAgICAgJ21vZGUtc3dpdGNoaW5nLmMnLgoKICAgKiBNb2R1bG8gc2NoZWR1bGluZwoKICAgICBUaGlzIHBhc3MgbG9va3MgYXQgaW5uZXJtb3N0IGxvb3BzIGFuZCByZW9yZGVycyB0aGVpciBpbnN0cnVjdGlvbnMKICAgICBieSBvdmVybGFwcGluZyBkaWZmZXJlbnQgaXRlcmF0aW9ucy4gIE1vZHVsbyBzY2hlZHVsaW5nIGlzCiAgICAgcGVyZm9ybWVkIGltbWVkaWF0ZWx5IGJlZm9yZSBpbnN0cnVjdGlvbiBzY2hlZHVsaW5nLiAgVGhlIHBhc3MgaXMKICAgICBsb2NhdGVkIGluICgnbW9kdWxvLXNjaGVkLmMnKS4KCiAgICogSW5zdHJ1Y3Rpb24gc2NoZWR1bGluZwoKICAgICBUaGlzIHBhc3MgbG9va3MgZm9yIGluc3RydWN0aW9ucyB3aG9zZSBvdXRwdXQgd2lsbCBub3QgYmUgYXZhaWxhYmxlCiAgICAgYnkgdGhlIHRpbWUgdGhhdCBpdCBpcyB1c2VkIGluIHN1YnNlcXVlbnQgaW5zdHJ1Y3Rpb25zLiAgTWVtb3J5CiAgICAgbG9hZHMgYW5kIGZsb2F0aW5nIHBvaW50IGluc3RydWN0aW9ucyBvZnRlbiBoYXZlIHRoaXMgYmVoYXZpb3Igb24KICAgICBSSVNDIG1hY2hpbmVzLiAgSXQgcmUtb3JkZXJzIGluc3RydWN0aW9ucyB3aXRoaW4gYSBiYXNpYyBibG9jayB0bwogICAgIHRyeSB0byBzZXBhcmF0ZSB0aGUgZGVmaW5pdGlvbiBhbmQgdXNlIG9mIGl0ZW1zIHRoYXQgb3RoZXJ3aXNlCiAgICAgd291bGQgY2F1c2UgcGlwZWxpbmUgc3RhbGxzLiAgVGhpcyBwYXNzIGlzIHBlcmZvcm1lZCB0d2ljZSwgYmVmb3JlCiAgICAgYW5kIGFmdGVyIHJlZ2lzdGVyIGFsbG9jYXRpb24uICBUaGUgcGFzcyBpcyBsb2NhdGVkIGluCiAgICAgJ2hhaWZhLXNjaGVkLmMnLCAnc2NoZWQtZGVwcy5jJywgJ3NjaGVkLWViYi5jJywgJ3NjaGVkLXJnbi5jJyBhbmQKICAgICAnc2NoZWQtdmlzLmMnLgoKICAgKiBSZWdpc3RlciBhbGxvY2F0aW9uCgogICAgIFRoZXNlIHBhc3NlcyBtYWtlIHN1cmUgdGhhdCBhbGwgb2NjdXJyZW5jZXMgb2YgcHNldWRvIHJlZ2lzdGVycyBhcmUKICAgICBlbGltaW5hdGVkLCBlaXRoZXIgYnkgYWxsb2NhdGluZyB0aGVtIHRvIGEgaGFyZCByZWdpc3RlciwgcmVwbGFjaW5nCiAgICAgdGhlbSBieSBhbiBlcXVpdmFsZW50IGV4cHJlc3Npb24gKGUuZy4gYSBjb25zdGFudCkgb3IgYnkgcGxhY2luZwogICAgIHRoZW0gb24gdGhlIHN0YWNrLiAgVGhpcyBpcyBkb25lIGluIHNldmVyYWwgc3VicGFzc2VzOgoKICAgICAgICAqIFJlZ2lzdGVyIGNsYXNzIHByZWZlcmVuY2luZy4gIFRoZSBSVEwgY29kZSBpcyBzY2FubmVkIHRvIGZpbmQKICAgICAgICAgIG91dCB3aGljaCByZWdpc3RlciBjbGFzcyBpcyBiZXN0IGZvciBlYWNoIHBzZXVkbyByZWdpc3Rlci4KICAgICAgICAgIFRoZSBzb3VyY2UgZmlsZSBpcyAncmVnY2xhc3MuYycuCgogICAgICAgICogTG9jYWwgcmVnaXN0ZXIgYWxsb2NhdGlvbi4gIFRoaXMgcGFzcyBhbGxvY2F0ZXMgaGFyZCByZWdpc3RlcnMKICAgICAgICAgIHRvIHBzZXVkbyByZWdpc3RlcnMgdGhhdCBhcmUgdXNlZCBvbmx5IHdpdGhpbiBvbmUgYmFzaWMgYmxvY2suCiAgICAgICAgICBCZWNhdXNlIHRoZSBiYXNpYyBibG9jayBpcyBsaW5lYXIsIGl0IGNhbiB1c2UgZmFzdCBhbmQKICAgICAgICAgIHBvd2VyZnVsIHRlY2huaXF1ZXMgdG8gZG8gYSBkZWNlbnQgam9iLiAgVGhlIHNvdXJjZSBpcyBsb2NhdGVkCiAgICAgICAgICBpbiAnbG9jYWwtYWxsb2MuYycuCgogICAgICAgICogR2xvYmFsIHJlZ2lzdGVyIGFsbG9jYXRpb24uICBUaGlzIHBhc3MgYWxsb2NhdGVzIGhhcmQKICAgICAgICAgIHJlZ2lzdGVycyBmb3IgdGhlIHJlbWFpbmluZyBwc2V1ZG8gcmVnaXN0ZXJzICh0aG9zZSB3aG9zZSBsaWZlCiAgICAgICAgICBzcGFucyBhcmUgbm90IGNvbnRhaW5lZCBpbiBvbmUgYmFzaWMgYmxvY2spLiAgVGhlIHBhc3MgaXMKICAgICAgICAgIGxvY2F0ZWQgaW4gJ2dsb2JhbC5jJy4KCiAgICAgICAgKiBSZWxvYWRpbmcuICBUaGlzIHBhc3MgcmVudW1iZXJzIHBzZXVkbyByZWdpc3RlcnMgd2l0aCB0aGUKICAgICAgICAgIGhhcmR3YXJlIHJlZ2lzdGVycyBudW1iZXJzIHRoZXkgd2VyZSBhbGxvY2F0ZWQuICBQc2V1ZG8KICAgICAgICAgIHJlZ2lzdGVycyB0aGF0IGRpZCBub3QgZ2V0IGhhcmQgcmVnaXN0ZXJzIGFyZSByZXBsYWNlZCB3aXRoCiAgICAgICAgICBzdGFjayBzbG90cy4gIFRoZW4gaXQgZmluZHMgaW5zdHJ1Y3Rpb25zIHRoYXQgYXJlIGludmFsaWQKICAgICAgICAgIGJlY2F1c2UgYSB2YWx1ZSBoYXMgZmFpbGVkIHRvIGVuZCB1cCBpbiBhIHJlZ2lzdGVyLCBvciBoYXMKICAgICAgICAgIGVuZGVkIHVwIGluIGEgcmVnaXN0ZXIgb2YgdGhlIHdyb25nIGtpbmQuICBJdCBmaXhlcyB1cCB0aGVzZQogICAgICAgICAgaW5zdHJ1Y3Rpb25zIGJ5IHJlbG9hZGluZyB0aGUgcHJvYmxlbWF0aWNhbCB2YWx1ZXMgdGVtcG9yYXJpbHkKICAgICAgICAgIGludG8gcmVnaXN0ZXJzLiAgQWRkaXRpb25hbCBpbnN0cnVjdGlvbnMgYXJlIGdlbmVyYXRlZCB0byBkbwogICAgICAgICAgdGhlIGNvcHlpbmcuCgogICAgICAgICAgVGhlIHJlbG9hZCBwYXNzIGFsc28gb3B0aW9uYWxseSBlbGltaW5hdGVzIHRoZSBmcmFtZSBwb2ludGVyCiAgICAgICAgICBhbmQgaW5zZXJ0cyBpbnN0cnVjdGlvbnMgdG8gc2F2ZSBhbmQgcmVzdG9yZSBjYWxsLWNsb2JiZXJlZAogICAgICAgICAgcmVnaXN0ZXJzIGFyb3VuZCBjYWxscy4KCiAgICAgICAgICBTb3VyY2UgZmlsZXMgYXJlICdyZWxvYWQuYycgYW5kICdyZWxvYWQxLmMnLCBwbHVzIHRoZSBoZWFkZXIKICAgICAgICAgICdyZWxvYWQuaCcgdXNlZCBmb3IgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIHRoZW0uCgogICAqIEJhc2ljIGJsb2NrIHJlb3JkZXJpbmcKCiAgICAgVGhpcyBwYXNzIGltcGxlbWVudHMgcHJvZmlsZSBndWlkZWQgY29kZSBwb3NpdGlvbmluZy4gIElmIHByb2ZpbGUKICAgICBpbmZvcm1hdGlvbiBpcyBub3QgYXZhaWxhYmxlLCB2YXJpb3VzIHR5cGVzIG9mIHN0YXRpYyBhbmFseXNpcyBhcmUKICAgICBwZXJmb3JtZWQgdG8gbWFrZSB0aGUgcHJlZGljdGlvbnMgbm9ybWFsbHkgY29taW5nIGZyb20gdGhlIHByb2ZpbGUKICAgICBmZWVkYmFjayAoSUUgZXhlY3V0aW9uIGZyZXF1ZW5jeSwgYnJhbmNoIHByb2JhYmlsaXR5LCBldGMpLiAgSXQgaXMKICAgICBpbXBsZW1lbnRlZCBpbiB0aGUgZmlsZSAnYmItcmVvcmRlci5jJywgYW5kIHRoZSB2YXJpb3VzIHByZWRpY3Rpb24KICAgICByb3V0aW5lcyBhcmUgaW4gJ3ByZWRpY3QuYycuCgogICAqIFZhcmlhYmxlIHRyYWNraW5nCgogICAgIFRoaXMgcGFzcyBjb21wdXRlcyB3aGVyZSB0aGUgdmFyaWFibGVzIGFyZSBzdG9yZWQgYXQgZWFjaCBwb3NpdGlvbgogICAgIGluIGNvZGUgYW5kIGdlbmVyYXRlcyBub3RlcyBkZXNjcmliaW5nIHRoZSB2YXJpYWJsZSBsb2NhdGlvbnMgdG8KICAgICBSVEwgY29kZS4gIFRoZSBsb2NhdGlvbiBsaXN0cyBhcmUgdGhlbiBnZW5lcmF0ZWQgYWNjb3JkaW5nIHRvIHRoZXNlCiAgICAgbm90ZXMgdG8gZGVidWcgaW5mb3JtYXRpb24gaWYgdGhlIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBmb3JtYXQKICAgICBzdXBwb3J0cyBsb2NhdGlvbiBsaXN0cy4KCiAgICogRGVsYXllZCBicmFuY2ggc2NoZWR1bGluZwoKICAgICBUaGlzIG9wdGlvbmFsIHBhc3MgYXR0ZW1wdHMgdG8gZmluZCBpbnN0cnVjdGlvbnMgdGhhdCBjYW4gZ28gaW50bwogICAgIHRoZSBkZWxheSBzbG90cyBvZiBvdGhlciBpbnN0cnVjdGlvbnMsIHVzdWFsbHkganVtcHMgYW5kIGNhbGxzLgogICAgIFRoZSBzb3VyY2UgZmlsZSBuYW1lIGlzICdyZW9yZy5jJy4KCiAgICogQnJhbmNoIHNob3J0ZW5pbmcKCiAgICAgT24gbWFueSBSSVNDIG1hY2hpbmVzLCBicmFuY2ggaW5zdHJ1Y3Rpb25zIGhhdmUgYSBsaW1pdGVkIHJhbmdlLgogICAgIFRodXMsIGxvbmdlciBzZXF1ZW5jZXMgb2YgaW5zdHJ1Y3Rpb25zIG11c3QgYmUgdXNlZCBmb3IgbG9uZwogICAgIGJyYW5jaGVzLiAgSW4gdGhpcyBwYXNzLCB0aGUgY29tcGlsZXIgZmlndXJlcyBvdXQgd2hhdCBob3cgZmFyIGVhY2gKICAgICBpbnN0cnVjdGlvbiB3aWxsIGJlIGZyb20gZWFjaCBvdGhlciBpbnN0cnVjdGlvbiwgYW5kIHRoZXJlZm9yZQogICAgIHdoZXRoZXIgdGhlIHVzdWFsIGluc3RydWN0aW9ucywgb3IgdGhlIGxvbmdlciBzZXF1ZW5jZXMsIG11c3QgYmUKICAgICB1c2VkIGZvciBlYWNoIGJyYW5jaC4KCiAgICogUmVnaXN0ZXItdG8tc3RhY2sgY29udmVyc2lvbgoKICAgICBDb252ZXJzaW9uIGZyb20gdXNhZ2Ugb2Ygc29tZSBoYXJkIHJlZ2lzdGVycyB0byB1c2FnZSBvZiBhIHJlZ2lzdGVyCiAgICAgc3RhY2sgbWF5IGJlIGRvbmUgYXQgdGhpcyBwb2ludC4gIEN1cnJlbnRseSwgdGhpcyBpcyBzdXBwb3J0ZWQgb25seQogICAgIGZvciB0aGUgZmxvYXRpbmctcG9pbnQgcmVnaXN0ZXJzIG9mIHRoZSBJbnRlbCA4MDM4NyBjb3Byb2Nlc3Nvci4KICAgICBUaGUgc291cmNlIGZpbGUgbmFtZSBpcyAncmVnLXN0YWNrLmMnLgoKICAgKiBGaW5hbAoKICAgICBUaGlzIHBhc3Mgb3V0cHV0cyB0aGUgYXNzZW1ibGVyIGNvZGUgZm9yIHRoZSBmdW5jdGlvbi4gIFRoZSBzb3VyY2UKICAgICBmaWxlcyBhcmUgJ2ZpbmFsLmMnIHBsdXMgJ2luc24tb3V0cHV0LmMnOyB0aGUgbGF0dGVyIGlzIGdlbmVyYXRlZAogICAgIGF1dG9tYXRpY2FsbHkgZnJvbSB0aGUgbWFjaGluZSBkZXNjcmlwdGlvbiBieSB0aGUgdG9vbCAnZ2Vub3V0cHV0Jy4KICAgICBUaGUgaGVhZGVyIGZpbGUgJ2NvbmRpdGlvbnMuaCcgaXMgdXNlZCBmb3IgY29tbXVuaWNhdGlvbiBiZXR3ZWVuCiAgICAgdGhlc2UgZmlsZXMuICBJZiBtdWRmbGFwIGlzIGVuYWJsZWQsIHRoZSBxdWV1ZSBvZiBkZWZlcnJlZAogICAgIGRlY2xhcmF0aW9ucyBhbmQgYW55IGFkZHJlc3NlZCBjb25zdGFudHMgKGUuZy4sIHN0cmluZyBsaXRlcmFscykgaXMKICAgICBwcm9jZXNzZWQgYnkgJ211ZGZsYXBfZmluaXNoX2ZpbGUnIGludG8gYSBzeW50aGV0aWMgY29uc3RydWN0b3IKICAgICBmdW5jdGlvbiBjb250YWluaW5nIGNhbGxzIGludG8gdGhlIG11ZGZsYXAgcnVudGltZS4KCiAgICogRGVidWdnaW5nIGluZm9ybWF0aW9uIG91dHB1dAoKICAgICBUaGlzIGlzIHJ1biBhZnRlciBmaW5hbCBiZWNhdXNlIGl0IG11c3Qgb3V0cHV0IHRoZSBzdGFjayBzbG90CiAgICAgb2Zmc2V0cyBmb3IgcHNldWRvIHJlZ2lzdGVycyB0aGF0IGRpZCBub3QgZ2V0IGhhcmQgcmVnaXN0ZXJzLgogICAgIFNvdXJjZSBmaWxlcyBhcmUgJ2RieG91dC5jJyBmb3IgREJYIHN5bWJvbCB0YWJsZSBmb3JtYXQsICdzZGJvdXQuYycKICAgICBmb3IgU0RCIHN5bWJvbCB0YWJsZSBmb3JtYXQsICdkd2FyZm91dC5jJyBmb3IgRFdBUkYgc3ltYm9sIHRhYmxlCiAgICAgZm9ybWF0LCBmaWxlcyAnZHdhcmYyb3V0LmMnIGFuZCAnZHdhcmYyYXNtLmMnIGZvciBEV0FSRjIgc3ltYm9sCiAgICAgdGFibGUgZm9ybWF0LCBhbmQgJ3Ztc2RiZ291dC5jJyBmb3IgVk1TIGRlYnVnIHN5bWJvbCB0YWJsZSBmb3JtYXQuCgofCkZpbGU6IGdjY2ludC5pbmZvLCAgTm9kZTogVHJlZXMsICBOZXh0OiBUcmVlIFNTQSwgIFByZXY6IFBhc3NlcywgIFVwOiBUb3AKCjkgVHJlZXM6IFRoZSBpbnRlcm1lZGlhdGUgcmVwcmVzZW50YXRpb24gdXNlZCBieSB0aGUgQyBhbmQgQysrIGZyb250IGVuZHMKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoKVGhpcyBjaGFwdGVyIGRvY3VtZW50cyB0aGUgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gdXNlZCBieSBHQ0MgdG8KcmVwcmVzZW50IEMgYW5kIEMrKyBzb3VyY2UgcHJvZ3JhbXMuICBXaGVuIHByZXNlbnRlZCB3aXRoIGEgQyBvciBDKysKc291cmNlIHByb2dyYW0sIEdDQyBwYXJzZXMgdGhlIHByb2dyYW0sIHBlcmZvcm1zIHNlbWFudGljIGFuYWx5c2lzCihpbmNsdWRpbmcgdGhlIGdlbmVyYXRpb24gb2YgZXJyb3IgbWVzc2FnZXMpLCBhbmQgdGhlbiBwcm9kdWNlcyB0aGUKaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gZGVzY3JpYmVkIGhlcmUuICBUaGlzIHJlcHJlc2VudGF0aW9uIGNvbnRhaW5zIGEKY29tcGxldGUgcmVwcmVzZW50YXRpb24gZm9yIHRoZSBlbnRpcmUgdHJhbnNsYXRpb24gdW5pdCBwcm92aWRlZCBhcwppbnB1dCB0byB0aGUgZnJvbnQgZW5kLiAgVGhpcyByZXByZXNlbnRhdGlvbiBpcyB0aGVuIHR5cGljYWxseSBwcm9jZXNzZWQKYnkgYSBjb2RlLWdlbmVyYXRvciBpbiBvcmRlciB0byBwcm9kdWNlIG1hY2hpbmUgY29kZSwgYnV0IGNvdWxkIGFsc28gYmUKdXNlZCBpbiB0aGUgY3JlYXRpb24gb2Ygc291cmNlIGJyb3dzZXJzLCBpbnRlbGxpZ2VudCBlZGl0b3JzLCBhdXRvbWF0aWMKZG9jdW1lbnRhdGlvbiBnZW5lcmF0b3JzLCBpbnRlcnByZXRlcnMsIGFuZCBhbnkgb3RoZXIgcHJvZ3JhbXMgbmVlZGluZwp0aGUgYWJpbGl0eSB0byBwcm9jZXNzIEMgb3IgQysrIGNvZGUuCgogVGhpcyBjaGFwdGVyIGV4cGxhaW5zIHRoZSBpbnRlcm5hbCByZXByZXNlbnRhdGlvbi4gIEluIHBhcnRpY3VsYXIsIGl0CmRvY3VtZW50cyB0aGUgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gZm9yIEMgYW5kIEMrKyBzb3VyY2UgY29uc3RydWN0cywKYW5kIHRoZSBtYWNyb3MsIGZ1bmN0aW9ucywgYW5kIHZhcmlhYmxlcyB0aGF0IGNhbiBiZSB1c2VkIHRvIGFjY2Vzcwp0aGVzZSBjb25zdHJ1Y3RzLiAgVGhlIEMrKyByZXByZXNlbnRhdGlvbiBpcyBsYXJnZWx5IGEgc3VwZXJzZXQgb2YgdGhlCnJlcHJlc2VudGF0aW9uIHVzZWQgaW4gdGhlIEMgZnJvbnQgZW5kLiAgVGhlcmUgaXMgb25seSBvbmUgY29uc3RydWN0CnVzZWQgaW4gQyB0aGF0IGRvZXMgbm90IGFwcGVhciBpbiB0aGUgQysrIGZyb250IGVuZCBhbmQgdGhhdCBpcyB0aGUgR05VCiJuZXN0ZWQgZnVuY3Rpb24iIGV4dGVuc2lvbi4gIE1hbnkgb2YgdGhlIG1hY3JvcyBkb2N1bWVudGVkIGhlcmUgZG8gbm90CmFwcGx5IGluIEMgYmVjYXVzZSB0aGUgY29ycmVzcG9uZGluZyBsYW5ndWFnZSBjb25zdHJ1Y3RzIGRvIG5vdCBhcHBlYXIKaW4gQy4KCiBJZiB5b3UgYXJlIGRldmVsb3BpbmcgYSAiYmFjayBlbmQiLCBiZSBpdCBpcyBhIGNvZGUtZ2VuZXJhdG9yIG9yIHNvbWUKb3RoZXIgdG9vbCwgdGhhdCB1c2VzIHRoaXMgcmVwcmVzZW50YXRpb24sIHlvdSBtYXkgb2NjYXNpb25hbGx5IGZpbmQKdGhhdCB5b3UgbmVlZCB0byBhc2sgcXVlc3Rpb25zIG5vdCBlYXNpbHkgYW5zd2VyZWQgYnkgdGhlIGZ1bmN0aW9ucyBhbmQKbWFjcm9zIGF2YWlsYWJsZSBoZXJlLiAgSWYgdGhhdCBzaXR1YXRpb24gb2NjdXJzLCBpdCBpcyBxdWl0ZSBsaWtlbHkKdGhhdCBHQ0MgYWxyZWFkeSBzdXBwb3J0cyB0aGUgZnVuY3Rpb25hbGl0eSB5b3UgZGVzaXJlLCBidXQgdGhhdCB0aGUKaW50ZXJmYWNlIGlzIHNpbXBseSBub3QgZG9jdW1lbnRlZCBoZXJlLiAgSW4gdGhhdCBjYXNlLCB5b3Ugc2hvdWxkIGFzawp0aGUgR0NDIG1haW50YWluZXJzICh2aWEgbWFpbCB0byA8Z2NjQGdjYy5nbnUub3JnPikgYWJvdXQgZG9jdW1lbnRpbmcKdGhlIGZ1bmN0aW9uYWxpdHkgeW91IHJlcXVpcmUuICBTaW1pbGFybHksIGlmIHlvdSBmaW5kIHlvdXJzZWxmIHdyaXRpbmcKZnVuY3Rpb25zIHRoYXQgZG8gbm90IGRlYWwgZGlyZWN0bHkgd2l0aCB5b3VyIGJhY2sgZW5kLCBidXQgaW5zdGVhZAptaWdodCBiZSB1c2VmdWwgdG8gb3RoZXIgcGVvcGxlIHVzaW5nIHRoZSBHQ0MgZnJvbnQgZW5kLCB5b3Ugc2hvdWxkCnN1Ym1pdCB5b3VyIHBhdGNoZXMgZm9yIGluY2x1c2lvbiBpbiBHQ0MuCgoqIE1lbnU6CgoqIERlZmljaWVuY2llczo6ICAgICAgICBUb3BpY3MgbmV0IHlldCBjb3ZlcmVkIGluIHRoaXMgZG9jdW1lbnQuCiogVHJlZSBvdmVydmlldzo6ICAgICAgIEFsbCBhYm91dCAndHJlZSdzLgoqIFR5cGVzOjogICAgICAgICAgICAgICBGdW5kYW1lbnRhbCBhbmQgYWdncmVnYXRlIHR5cGVzLgoqIFNjb3Blczo6ICAgICAgICAgICAgICBOYW1lc3BhY2VzIGFuZCBjbGFzc2VzLgoqIEZ1bmN0aW9uczo6ICAgICAgICAgICBPdmVybG9hZGluZywgZnVuY3Rpb24gYm9kaWVzLCBhbmQgbGlua2FnZS4KKiBEZWNsYXJhdGlvbnM6OiAgICAgICAgVHlwZSBkZWNsYXJhdGlvbnMgYW5kIHZhcmlhYmxlcy4KKiBBdHRyaWJ1dGVzOjogICAgICAgICAgRGVjbGFyYXRpb24gYW5kIHR5cGUgYXR0cmlidXRlcy4KKiBFeHByZXNzaW9uIHRyZWVzOjogICAgRnJvbSAndHlwZWlkJyB0byAndGhyb3cnLgoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IERlZmljaWVuY2llcywgIE5leHQ6IFRyZWUgb3ZlcnZpZXcsICBVcDogVHJlZXMKCjkuMSBEZWZpY2llbmNpZXMKPT09PT09PT09PT09PT09PQoKVGhlcmUgYXJlIG1hbnkgcGxhY2VzIGluIHdoaWNoIHRoaXMgZG9jdW1lbnQgaXMgaW5jb21wbGV0IGFuZCBpbmNvcnJla3QuCkl0IGlzLCBhcyBvZiB5ZXQsIG9ubHkgX3ByZWxpbWluYXJ5XyBkb2N1bWVudGF0aW9uLgoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IFRyZWUgb3ZlcnZpZXcsICBOZXh0OiBUeXBlcywgIFByZXY6IERlZmljaWVuY2llcywgIFVwOiBUcmVlcwoKOS4yIE92ZXJ2aWV3Cj09PT09PT09PT09PQoKVGhlIGNlbnRyYWwgZGF0YSBzdHJ1Y3R1cmUgdXNlZCBieSB0aGUgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gaXMgdGhlCid0cmVlJy4gIFRoZXNlIG5vZGVzLCB3aGlsZSBhbGwgb2YgdGhlIEMgdHlwZSAndHJlZScsIGFyZSBvZiBtYW55CnZhcmlldGllcy4gIEEgJ3RyZWUnIGlzIGEgcG9pbnRlciB0eXBlLCBidXQgdGhlIG9iamVjdCB0byB3aGljaCBpdApwb2ludHMgbWF5IGJlIG9mIGEgdmFyaWV0eSBvZiB0eXBlcy4gIEZyb20gdGhpcyBwb2ludCBmb3J3YXJkLCB3ZSB3aWxsCnJlZmVyIHRvIHRyZWVzIGluIG9yZGluYXJ5IHR5cGUsIHJhdGhlciB0aGFuIGluICd0aGlzIGZvbnQnLCBleGNlcHQgd2hlbgp0YWxraW5nIGFib3V0IHRoZSBhY3R1YWwgQyB0eXBlICd0cmVlJy4KCiBZb3UgY2FuIHRlbGwgd2hhdCBraW5kIG9mIG5vZGUgYSBwYXJ0aWN1bGFyIHRyZWUgaXMgYnkgdXNpbmcgdGhlCidUUkVFX0NPREUnIG1hY3JvLiAgTWFueSwgbWFueSBtYWNyb3MgdGFrZSB0cmVlcyBhcyBpbnB1dCBhbmQgcmV0dXJuCnRyZWVzIGFzIG91dHB1dC4gIEhvd2V2ZXIsIG1vc3QgbWFjcm9zIHJlcXVpcmUgYSBjZXJ0YWluIGtpbmQgb2YgdHJlZQpub2RlIGFzIGlucHV0LiAgSW4gb3RoZXIgd29yZHMsIHRoZXJlIGlzIGEgdHlwZS1zeXN0ZW0gZm9yIHRyZWVzLCBidXQgaXQKaXMgbm90IHJlZmxlY3RlZCBpbiB0aGUgQyB0eXBlLXN5c3RlbS4KCiBGb3Igc2FmZXR5LCBpdCBpcyB1c2VmdWwgdG8gY29uZmlndXJlIEdDQyB3aXRoICctLWVuYWJsZS1jaGVja2luZycuCkFsdGhvdWdoIHRoaXMgcmVzdWx0cyBpbiBhIHNpZ25pZmljYW50IHBlcmZvcm1hbmNlIHBlbmFsdHkgKHNpbmNlIGFsbAp0cmVlIHR5cGVzIGFyZSBjaGVja2VkIGF0IHJ1bi10aW1lKSwgYW5kIGlzIHRoZXJlZm9yZSBpbmFwcHJvcHJpYXRlIGluIGEKcmVsZWFzZSB2ZXJzaW9uLCBpdCBpcyBleHRyZW1lbHkgaGVscGZ1bCBkdXJpbmcgdGhlIGRldmVsb3BtZW50IHByb2Nlc3MuCgogTWFueSBtYWNyb3MgYmVoYXZlIGFzIHByZWRpY2F0ZXMuICBNYW55LCBhbHRob3VnaCBub3QgYWxsLCBvZiB0aGVzZQpwcmVkaWNhdGVzIGVuZCBpbiAnX1AnLiAgRG8gbm90IHJlbHkgb24gdGhlIHJlc3VsdCB0eXBlIG9mIHRoZXNlIG1hY3JvcwpiZWluZyBvZiBhbnkgcGFydGljdWxhciB0eXBlLiAgWW91IG1heSwgaG93ZXZlciwgcmVseSBvbiB0aGUgZmFjdCB0aGF0CnRoZSB0eXBlIGNhbiBiZSBjb21wYXJlZCB0byAnMCcsIHNvIHRoYXQgc3RhdGVtZW50cyBsaWtlCiAgICAgaWYgKFRFU1RfUCAodCkgJiYgIVRFU1RfUCAoeSkpCiAgICAgICB4ID0gMTsKYW5kCiAgICAgaW50IGkgPSAoVEVTVF9QICh0KSAhPSAwKTsKYXJlIGxlZ2FsLiAgTWFjcm9zIHRoYXQgcmV0dXJuICdpbnQnIHZhbHVlcyBub3cgbWF5IGJlIGNoYW5nZWQgdG8gcmV0dXJuCid0cmVlJyB2YWx1ZXMsIG9yIG90aGVyIHBvaW50ZXJzIGluIHRoZSBmdXR1cmUuICBFdmVuIHRob3NlIHRoYXQKY29udGludWUgdG8gcmV0dXJuICdpbnQnIG1heSByZXR1cm4gbXVsdGlwbGUgbm9uemVybyBjb2RlcyB3aGVyZQpwcmV2aW91c2x5IHRoZXkgcmV0dXJuZWQgb25seSB6ZXJvIGFuZCBvbmUuICBUaGVyZWZvcmUsIHlvdSBzaG91bGQgbm90CndyaXRlIGNvZGUgbGlrZQogICAgIGlmIChURVNUX1AgKHQpID09IDEpCmFzIHRoaXMgY29kZSBpcyBub3QgZ3VhcmFudGVlZCB0byB3b3JrIGNvcnJlY3RseSBpbiB0aGUgZnV0dXJlLgoKIFlvdSBzaG91bGQgbm90IHRha2UgdGhlIGFkZHJlc3Mgb2YgdmFsdWVzIHJldHVybmVkIGJ5IHRoZSBtYWNyb3Mgb3IKZnVuY3Rpb25zIGRlc2NyaWJlZCBoZXJlLiAgSW4gcGFydGljdWxhciwgbm8gZ3VhcmFudGVlIGlzIGdpdmVuIHRoYXQgdGhlCnZhbHVlcyBhcmUgbHZhbHVlcy4KCiBJbiBnZW5lcmFsLCB0aGUgbmFtZXMgb2YgbWFjcm9zIGFyZSBhbGwgaW4gdXBwZXJjYXNlLCB3aGlsZSB0aGUgbmFtZXMKb2YgZnVuY3Rpb25zIGFyZSBlbnRpcmVseSBpbiBsb3dlcmNhc2UuICBUaGVyZSBhcmUgcmFyZSBleGNlcHRpb25zIHRvCnRoaXMgcnVsZS4gIFlvdSBzaG91bGQgYXNzdW1lIHRoYXQgYW55IG1hY3JvIG9yIGZ1bmN0aW9uIHdob3NlIG5hbWUgaXMKbWFkZSB1cCBlbnRpcmVseSBvZiB1cHBlcmNhc2UgbGV0dGVycyBtYXkgZXZhbHVhdGUgaXRzIGFyZ3VtZW50cyBtb3JlCnRoYW4gb25jZS4gIFlvdSBtYXkgYXNzdW1lIHRoYXQgYSBtYWNybyBvciBmdW5jdGlvbiB3aG9zZSBuYW1lIGlzIG1hZGUKdXAgZW50aXJlbHkgb2YgbG93ZXJjYXNlIGxldHRlcnMgd2lsbCBldmFsdWF0ZSBpdHMgYXJndW1lbnRzIG9ubHkgb25jZS4KCiBUaGUgJ2Vycm9yX21hcmtfbm9kZScgaXMgYSBzcGVjaWFsIHRyZWUuICBJdHMgdHJlZSBjb2RlIGlzCidFUlJPUl9NQVJLJywgYnV0IHNpbmNlIHRoZXJlIGlzIG9ubHkgZXZlciBvbmUgbm9kZSB3aXRoIHRoYXQgY29kZSwgdGhlCnVzdWFsIHByYWN0aWNlIGlzIHRvIGNvbXBhcmUgdGhlIHRyZWUgYWdhaW5zdCAnZXJyb3JfbWFya19ub2RlJy4gIChUaGlzCnRlc3QgaXMganVzdCBhIHRlc3QgZm9yIHBvaW50ZXIgZXF1YWxpdHkuKSAgSWYgYW4gZXJyb3IgaGFzIG9jY3VycmVkCmR1cmluZyBmcm9udC1lbmQgcHJvY2Vzc2luZyB0aGUgZmxhZyAnZXJyb3Jjb3VudCcgd2lsbCBiZSBzZXQuICBJZiB0aGUKZnJvbnQgZW5kIGhhcyBlbmNvdW50ZXJlZCBjb2RlIGl0IGNhbm5vdCBoYW5kbGUsIGl0IHdpbGwgaXNzdWUgYSBtZXNzYWdlCnRvIHRoZSB1c2VyIGFuZCBzZXQgJ3NvcnJ5Y291bnQnLiAgV2hlbiB0aGVzZSBmbGFncyBhcmUgc2V0LCBhbnkgbWFjcm8Kb3IgZnVuY3Rpb24gd2hpY2ggbm9ybWFsbHkgcmV0dXJucyBhIHRyZWUgb2YgYSBwYXJ0aWN1bGFyIGtpbmQgbWF5Cmluc3RlYWQgcmV0dXJuIHRoZSAnZXJyb3JfbWFya19ub2RlJy4gIFRodXMsIGlmIHlvdSBpbnRlbmQgdG8gZG8gYW55CnByb2Nlc3Npbmcgb2YgZXJyb25lb3VzIGNvZGUsIHlvdSBtdXN0IGJlIHByZXBhcmVkIHRvIGRlYWwgd2l0aCB0aGUKJ2Vycm9yX21hcmtfbm9kZScuCgogT2NjYXNpb25hbGx5LCBhIHBhcnRpY3VsYXIgdHJlZSBzbG90IChsaWtlIGFuIG9wZXJhbmQgdG8gYW4gZXhwcmVzc2lvbiwKb3IgYSBwYXJ0aWN1bGFyIGZpZWxkIGluIGEgZGVjbGFyYXRpb24pIHdpbGwgYmUgcmVmZXJyZWQgdG8gYXMgInJlc2VydmVkCmZvciB0aGUgYmFjayBlbmQiLiAgVGhlc2Ugc2xvdHMgYXJlIHVzZWQgdG8gc3RvcmUgUlRMIHdoZW4gdGhlIHRyZWUgaXMKY29udmVydGVkIHRvIFJUTCBmb3IgdXNlIGJ5IHRoZSBHQ0MgYmFjayBlbmQuICBIb3dldmVyLCBpZiB0aGF0IHByb2Nlc3MKaXMgbm90IHRha2luZyBwbGFjZSAoZS5nLiwgaWYgdGhlIGZyb250IGVuZCBpcyBiZWluZyBob29rZWQgdXAgdG8gYW4KaW50ZWxsaWdlbnQgZWRpdG9yKSwgdGhlbiB0aG9zZSBzbG90cyBtYXkgYmUgdXNlZCBieSB0aGUgYmFjayBlbmQKcHJlc2VudGx5IGluIHVzZS4KCiBJZiB5b3UgZW5jb3VudGVyIHNpdHVhdGlvbnMgdGhhdCBkbyBub3QgbWF0Y2ggdGhpcyBkb2N1bWVudGF0aW9uLCBzdWNoCmFzIHRyZWUgbm9kZXMgb2YgdHlwZXMgbm90IG1lbnRpb25lZCBoZXJlLCBvciBtYWNyb3MgZG9jdW1lbnRlZCB0bwpyZXR1cm4gZW50aXRpZXMgb2YgYSBwYXJ0aWN1bGFyIGtpbmQgdGhhdCBpbnN0ZWFkIHJldHVybiBlbnRpdGllcyBvZgpzb21lIGRpZmZlcmVudCBraW5kLCB5b3UgaGF2ZSBmb3VuZCBhIGJ1ZywgZWl0aGVyIGluIHRoZSBmcm9udCBlbmQgb3IgaW4KdGhlIGRvY3VtZW50YXRpb24uICBQbGVhc2UgcmVwb3J0IHRoZXNlIGJ1Z3MgYXMgeW91IHdvdWxkIGFueSBvdGhlciBidWcuCgoqIE1lbnU6CgoqIE1hY3JvcyBhbmQgRnVuY3Rpb25zOjpNYWNyb3MgYW5kIGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSB1c2VkIHdpdGggYWxsIHRyZWVzLgoqIElkZW50aWZpZXJzOjogICAgICAgICBUaGUgbmFtZXMgb2YgdGhpbmdzLgoqIENvbnRhaW5lcnM6OiAgICAgICAgICBMaXN0cyBhbmQgdmVjdG9ycy4KCh8KRmlsZTogZ2NjaW50LmluZm8sICBOb2RlOiBNYWNyb3MgYW5kIEZ1bmN0aW9ucywgIE5leHQ6IElkZW50aWZpZXJzLCAgVXA6IFRyZWUgb3ZlcnZpZXcKCjkuMi4xIFRyZWVzCi0tLS0tLS0tLS0tCgpUaGlzIHNlY3Rpb24gaXMgbm90IGhlcmUgeWV0LgoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IElkZW50aWZpZXJzLCAgTmV4dDogQ29udGFpbmVycywgIFByZXY6IE1hY3JvcyBhbmQgRnVuY3Rpb25zLCAgVXA6IFRyZWUgb3ZlcnZpZXcKCjkuMi4yIElkZW50aWZpZXJzCi0tLS0tLS0tLS0tLS0tLS0tCgpBbiAnSURFTlRJRklFUl9OT0RFJyByZXByZXNlbnRzIGEgc2xpZ2h0bHkgbW9yZSBnZW5lcmFsIGNvbmNlcHQgdGhhdCB0aGUKc3RhbmRhcmQgQyBvciBDKysgY29uY2VwdCBvZiBpZGVudGlmaWVyLiAgSW4gcGFydGljdWxhciwgYW4KJ0lERU5USUZJRVJfTk9ERScgbWF5IGNvbnRhaW4gYSAnJCcsIG9yIG90aGVyIGV4dHJhb3JkaW5hcnkgY2hhcmFjdGVycy4KCiBUaGVyZSBhcmUgbmV2ZXIgdHdvIGRpc3RpbmN0ICdJREVOVElGSUVSX05PREUncyByZXByZXNlbnRpbmcgdGhlIHNhbWUKaWRlbnRpZmllci4gIFRoZXJlZm9yZSwgeW91IG1heSB1c2UgcG9pbnRlciBlcXVhbGl0eSB0byBjb21wYXJlCidJREVOVElGSUVSX05PREUncywgcmF0aGVyIHRoYW4gdXNpbmcgYSByb3V0aW5lIGxpa2UgJ3N0cmNtcCcuCgogWW91IGNhbiB1c2UgdGhlIGZvbGxvd2luZyBtYWNyb3MgdG8gYWNjZXNzIGlkZW50aWZpZXJzOgonSURFTlRJRklFUl9QT0lOVEVSJwogICAgIFRoZSBzdHJpbmcgcmVwcmVzZW50ZWQgYnkgdGhlIGlkZW50aWZpZXIsIHJlcHJlc2VudGVkIGFzIGEgJ2NoYXIqJy4KICAgICBUaGlzIHN0cmluZyBpcyBhbHdheXMgJ05VTCctdGVybWluYXRlZCwgYW5kIGNvbnRhaW5zIG5vIGVtYmVkZGVkCiAgICAgJ05VTCcgY2hhcmFjdGVycy4KCidJREVOVElGSUVSX0xFTkdUSCcKICAgICBUaGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcgcmV0dXJuZWQgYnkgJ0lERU5USUZJRVJfUE9JTlRFUicsIG5vdAogICAgIGluY2x1ZGluZyB0aGUgdHJhaWxpbmcgJ05VTCcuICBUaGlzIHZhbHVlIG9mICdJREVOVElGSUVSX0xFTkdUSAogICAgICh4KScgaXMgYWx3YXlzIHRoZSBzYW1lIGFzICdzdHJsZW4gKElERU5USUZJRVJfUE9JTlRFUiAoeCkpJy4KCidJREVOVElGSUVSX09QTkFNRV9QJwogICAgIFRoaXMgcHJlZGljYXRlIGhvbGRzIGlmIHRoZSBpZGVudGlmaWVyIHJlcHJlc2VudHMgdGhlIG5hbWUgb2YgYW4KICAgICBvdmVybG9hZGVkIG9wZXJhdG9yLiAgSW4gdGhpcyBjYXNlLCB5b3Ugc2hvdWxkIG5vdCBkZXBlbmQgb24gdGhlCiAgICAgY29udGVudHMgb2YgZWl0aGVyIHRoZSAnSURFTlRJRklFUl9QT0lOVEVSJyBvciB0aGUKICAgICAnSURFTlRJRklFUl9MRU5HVEgnLgoKJ0lERU5USUZJRVJfVFlQRU5BTUVfUCcKICAgICBUaGlzIHByZWRpY2F0ZSBob2xkcyBpZiB0aGUgaWRlbnRpZmllciByZXByZXNlbnRzIHRoZSBuYW1lIG9mIGEKICAgICB1c2VyLWRlZmluZWQgY29udmVyc2lvbiBvcGVyYXRvci4gIEluIHRoaXMgY2FzZSwgdGhlICdUUkVFX1RZUEUnIG9mCiAgICAgdGhlICdJREVOVElGSUVSX05PREUnIGhvbGRzIHRoZSB0eXBlIHRvIHdoaWNoIHRoZSBjb252ZXJzaW9uCiAgICAgb3BlcmF0b3IgY29udmVydHMuCgofCkZpbGU6IGdjY2ludC5pbmZvLCAgTm9kZTogQ29udGFpbmVycywgIFByZXY6IElkZW50aWZpZXJzLCAgVXA6IFRyZWUgb3ZlcnZpZXcKCjkuMi4zIENvbnRhaW5lcnMKLS0tLS0tLS0tLS0tLS0tLQoKVHdvIGNvbW1vbiBjb250YWluZXIgZGF0YSBzdHJ1Y3R1cmVzIGNhbiBiZSByZXByZXNlbnRlZCBkaXJlY3RseSB3aXRoCnRyZWUgbm9kZXMuICBBICdUUkVFX0xJU1QnIGlzIGEgc2luZ2x5IGxpbmtlZCBsaXN0IGNvbnRhaW5pbmcgdHdvIHRyZWVzCnBlciBub2RlLiAgVGhlc2UgYXJlIHRoZSAnVFJFRV9QVVJQT1NFJyBhbmQgJ1RSRUVfVkFMVUUnIG9mIGVhY2ggbm9kZS4KKE9mdGVuLCB0aGUgJ1RSRUVfUFVSUE9TRScgY29udGFpbnMgc29tZSBraW5kIG9mIHRhZywgb3IgYWRkaXRpb25hbAppbmZvcm1hdGlvbiwgd2hpbGUgdGhlICdUUkVFX1ZBTFVFJyBjb250YWlucyB0aGUgbWFqb3JpdHkgb2YgdGhlCnBheWxvYWQuICBJbiBvdGhlciBjYXNlcywgdGhlICdUUkVFX1BVUlBPU0UnIGlzIHNpbXBseSAnTlVMTF9UUkVFJywKd2hpbGUgaW4gc3RpbGwgb3RoZXJzIGJvdGggdGhlICdUUkVFX1BVUlBPU0UnIGFuZCAnVFJFRV9WQUxVRScgYXJlIG9mCmVxdWFsIHN0YXR1cmUuKSAgR2l2ZW4gb25lICdUUkVFX0xJU1QnIG5vZGUsIHRoZSBuZXh0IG5vZGUgaXMgZm91bmQgYnkKZm9sbG93aW5nIHRoZSAnVFJFRV9DSEFJTicuICBJZiB0aGUgJ1RSRUVfQ0hBSU4nIGlzICdOVUxMX1RSRUUnLCB0aGVuCnlvdSBoYXZlIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgbGlzdC4KCiBBICdUUkVFX1ZFQycgaXMgYSBzaW1wbGUgdmVjdG9yLiAgVGhlICdUUkVFX1ZFQ19MRU5HVEgnIGlzIGFuIGludGVnZXIKKG5vdCBhIHRyZWUpIGdpdmluZyB0aGUgbnVtYmVyIG9mIG5vZGVzIGluIHRoZSB2ZWN0b3IuICBUaGUgbm9kZXMKdGhlbXNlbHZlcyBhcmUgYWNjZXNzZWQgdXNpbmcgdGhlICdUUkVFX1ZFQ19FTFQnIG1hY3JvLCB3aGljaCB0YWtlcyB0d28KYXJndW1lbnRzLiAgVGhlIGZpcnN0IGlzIHRoZSAnVFJFRV9WRUMnIGluIHF1ZXN0aW9uOyB0aGUgc2Vjb25kIGlzIGFuCmludGVnZXIgaW5kaWNhdGluZyB3aGljaCBlbGVtZW50IGluIHRoZSB2ZWN0b3IgaXMgZGVzaXJlZC4gIFRoZSBlbGVtZW50cwphcmUgaW5kZXhlZCBmcm9tIHplcm8uCgofCkZpbGU6IGdjY2ludC5pbmZvLCAgTm9kZTogVHlwZXMsICBOZXh0OiBTY29wZXMsICBQcmV2OiBUcmVlIG92ZXJ2aWV3LCAgVXA6IFRyZWVzCgo5LjMgVHlwZXMKPT09PT09PT09CgpBbGwgdHlwZXMgaGF2ZSBjb3JyZXNwb25kaW5nIHRyZWUgbm9kZXMuICBIb3dldmVyLCB5b3Ugc2hvdWxkIG5vdCBhc3N1bWUKdGhhdCB0aGVyZSBpcyBleGFjdGx5IG9uZSB0cmVlIG5vZGUgY29ycmVzcG9uZGluZyB0byBlYWNoIHR5cGUuICBUaGVyZQphcmUgb2Z0ZW4gbXVsdGlwbGUgbm9kZXMgY29ycmVzcG9uZGluZyB0byB0aGUgc2FtZSB0eXBlLgoKIEZvciB0aGUgbW9zdCBwYXJ0LCBkaWZmZXJlbnQga2luZHMgb2YgdHlwZXMgaGF2ZSBkaWZmZXJlbnQgdHJlZSBjb2Rlcy4KKEZvciBleGFtcGxlLCBwb2ludGVyIHR5cGVzIHVzZSBhICdQT0lOVEVSX1RZUEUnIGNvZGUgd2hpbGUgYXJyYXlzIHVzZQphbiAnQVJSQVlfVFlQRScgY29kZS4pICBIb3dldmVyLCBwb2ludGVycyB0byBtZW1iZXIgZnVuY3Rpb25zIHVzZSB0aGUKJ1JFQ09SRF9UWVBFJyBjb2RlLiAgVGhlcmVmb3JlLCB3aGVuIHdyaXRpbmcgYSAnc3dpdGNoJyBzdGF0ZW1lbnQgdGhhdApkZXBlbmRzIG9uIHRoZSBjb2RlIGFzc29jaWF0ZWQgd2l0aCBhIHBhcnRpY3VsYXIgdHlwZSwgeW91IHNob3VsZCB0YWtlCmNhcmUgdG8gaGFuZGxlIHBvaW50ZXJzIHRvIG1lbWJlciBmdW5jdGlvbnMgdW5kZXIgdGhlICdSRUNPUkRfVFlQRScgY2FzZQpsYWJlbC4KCiBJbiBDKyssIGFuIGFycmF5IHR5cGUgaXMgbm90IHF1YWxpZmllZDsgcmF0aGVyIHRoZSB0eXBlIG9mIHRoZSBhcnJheQplbGVtZW50cyBpcyBxdWFsaWZpZWQuICBUaGlzIHNpdHVhdGlvbiBpcyByZWZsZWN0ZWQgaW4gdGhlIGludGVybWVkaWF0ZQpyZXByZXNlbnRhdGlvbi4gIFRoZSBtYWNyb3MgZGVzY3JpYmVkIGhlcmUgd2lsbCBhbHdheXMgZXhhbWluZSB0aGUKcXVhbGlmaWNhdGlvbiBvZiB0aGUgdW5kZXJseWluZyBlbGVtZW50IHR5cGUgd2hlbiBhcHBsaWVkIHRvIGFuIGFycmF5CnR5cGUuICAoSWYgdGhlIGVsZW1lbnQgdHlwZSBpcyBpdHNlbGYgYW4gYXJyYXksIHRoZW4gdGhlIHJlY3Vyc2lvbgpjb250aW51ZXMgdW50aWwgYSBub24tYXJyYXkgdHlwZSBpcyBmb3VuZCwgYW5kIHRoZSBxdWFsaWZpY2F0aW9uIG9mIHRoaXMKdHlwZSBpcyBleGFtaW5lZC4pICBTbywgZm9yIGV4YW1wbGUsICdDUF9UWVBFX0NPTlNUX1AnIHdpbGwgaG9sZCBvZiB0aGUKdHlwZSAnY29uc3QgaW50ICgpWzddJywgZGVub3RpbmcgYW4gYXJyYXkgb2Ygc2V2ZW4gJ2ludCdzLgoKIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFuZCBtYWNyb3MgZGVhbCB3aXRoIGN2LXF1YWxpZmljYXRpb24gb2YgdHlwZXM6CidDUF9UWVBFX1FVQUxTJwogICAgIFRoaXMgbWFjcm8gcmV0dXJucyB0aGUgc2V0IG9mIHR5cGUgcXVhbGlmaWVycyBhcHBsaWVkIHRvIHRoaXMgdHlwZS4KICAgICBUaGlzIHZhbHVlIGlzICdUWVBFX1VOUVVBTElGSUVEJyBpZiBubyBxdWFsaWZpZXJzIGhhdmUgYmVlbgogICAgIGFwcGxpZWQuICBUaGUgJ1RZUEVfUVVBTF9DT05TVCcgYml0IGlzIHNldCBpZiB0aGUgdHlwZSBpcwogICAgICdjb25zdCctcXVhbGlmaWVkLiAgVGhlICdUWVBFX1FVQUxfVk9MQVRJTEUnIGJpdCBpcyBzZXQgaWYgdGhlIHR5cGUKICAgICBpcyAndm9sYXRpbGUnLXF1YWxpZmllZC4gIFRoZSAnVFlQRV9RVUFMX1JFU1RSSUNUJyBiaXQgaXMgc2V0IGlmCiAgICAgdGhlIHR5cGUgaXMgJ3Jlc3RyaWN0Jy1xdWFsaWZpZWQuCgonQ1BfVFlQRV9DT05TVF9QJwogICAgIFRoaXMgbWFjcm8gaG9sZHMgaWYgdGhlIHR5cGUgaXMgJ2NvbnN0Jy1xdWFsaWZpZWQuCgonQ1BfVFlQRV9WT0xBVElMRV9QJwogICAgIFRoaXMgbWFjcm8gaG9sZHMgaWYgdGhlIHR5cGUgaXMgJ3ZvbGF0aWxlJy1xdWFsaWZpZWQuCgonQ1BfVFlQRV9SRVNUUklDVF9QJwogICAgIFRoaXMgbWFjcm8gaG9sZHMgaWYgdGhlIHR5cGUgaXMgJ3Jlc3RyaWN0Jy1xdWFsaWZpZWQuCgonQ1BfVFlQRV9DT05TVF9OT05fVk9MQVRJTEVfUCcKICAgICBUaGlzIHByZWRpY2F0ZSBob2xkcyBmb3IgYSB0eXBlIHRoYXQgaXMgJ2NvbnN0Jy1xdWFsaWZpZWQsIGJ1dAogICAgIF9ub3RfICd2b2xhdGlsZSctcXVhbGlmaWVkOyBvdGhlciBjdi1xdWFsaWZpZXJzIGFyZSBpZ25vcmVkIGFzCiAgICAgd2VsbDogb25seSB0aGUgJ2NvbnN0Jy1uZXNzIGlzIHRlc3RlZC4KCidUWVBFX01BSU5fVkFSSUFOVCcKICAgICBUaGlzIG1hY3JvIHJldHVybnMgdGhlIHVucXVhbGlmaWVkIHZlcnNpb24gb2YgYSB0eXBlLiAgSXQgbWF5IGJlCiAgICAgYXBwbGllZCB0byBhbiB1bnF1YWxpZmllZCB0eXBlLCBidXQgaXQgaXMgbm90IGFsd2F5cyB0aGUgaWRlbnRpdHkKICAgICBmdW5jdGlvbiBpbiB0aGF0IGNhc2UuCgogQSBmZXcgb3RoZXIgbWFjcm9zIGFuZCBmdW5jdGlvbnMgYXJlIHVzYWJsZSB3aXRoIGFsbCB0eXBlczoKJ1RZUEVfU0laRScKICAgICBUaGUgbnVtYmVyIG9mIGJpdHMgcmVxdWlyZWQgdG8gcmVwcmVzZW50IHRoZSB0eXBlLCByZXByZXNlbnRlZCBhcwogICAgIGFuICdJTlRFR0VSX0NTVCcuICBGb3IgYW4gaW5jb21wbGV0ZSB0eXBlLCAnVFlQRV9TSVpFJyB3aWxsIGJlCiAgICAgJ05VTExfVFJFRScuCgonVFlQRV9BTElHTicKICAgICBUaGUgYWxpZ25tZW50IG9mIHRoZSB0eXBlLCBpbiBiaXRzLCByZXByZXNlbnRlZCBhcyBhbiAnaW50Jy4KCidUWVBFX05BTUUnCiAgICAgVGhpcyBtYWNybyByZXR1cm5zIGEgZGVjbGFyYXRpb24gKGluIHRoZSBmb3JtIG9mIGEgJ1RZUEVfREVDTCcpIGZvcgogICAgIHRoZSB0eXBlLiAgKE5vdGUgdGhpcyBtYWNybyBkb2VzIF9ub3RfIHJldHVybiBhICdJREVOVElGSUVSX05PREUnLAogICAgIGFzIHlvdSBtaWdodCBleHBlY3QsIGdpdmVuIGl0cyBuYW1lISkgIFlvdSBjYW4gbG9vayBhdCB0aGUKICAgICAnREVDTF9OQU1FJyBvZiB0aGUgJ1RZUEVfREVDTCcgdG8gb2J0YWluIHRoZSBhY3R1YWwgbmFtZSBvZiB0aGUKICAgICB0eXBlLiAgVGhlICdUWVBFX05BTUUnIHdpbGwgYmUgJ05VTExfVFJFRScgZm9yIGEgdHlwZSB0aGF0IGlzIG5vdCBhCiAgICAgYnVpbHQtaW4gdHlwZSwgdGhlIHJlc3VsdCBvZiBhIHR5cGVkZWYsIG9yIGEgbmFtZWQgY2xhc3MgdHlwZS4KCidDUF9JTlRFR1JBTF9UWVBFJwogICAgIFRoaXMgcHJlZGljYXRlIGhvbGRzIGlmIHRoZSB0eXBlIGlzIGFuIGludGVncmFsIHR5cGUuICBOb3RpY2UgdGhhdAogICAgIGluIEMrKywgZW51bWVyYXRpb25zIGFyZSBfbm90XyBpbnRlZ3JhbCB0eXBlcy4KCidBUklUSE1FVElDX1RZUEVfUCcKICAgICBUaGlzIHByZWRpY2F0ZSBob2xkcyBpZiB0aGUgdHlwZSBpcyBhbiBpbnRlZ3JhbCB0eXBlIChpbiB0aGUgQysrCiAgICAgc2Vuc2UpIG9yIGEgZmxvYXRpbmcgcG9pbnQgdHlwZS4KCidDTEFTU19UWVBFX1AnCiAgICAgVGhpcyBwcmVkaWNhdGUgaG9sZHMgZm9yIGEgY2xhc3MtdHlwZS4KCidUWVBFX0JVSUxUX0lOJwogICAgIFRoaXMgcHJlZGljYXRlIGhvbGRzIGZvciBhIGJ1aWx0LWluIHR5cGUuCgonVFlQRV9QVFJNRU1fUCcKICAgICBUaGlzIHByZWRpY2F0ZSBob2xkcyBpZiB0aGUgdHlwZSBpcyBhIHBvaW50ZXIgdG8gZGF0YSBtZW1iZXIuCgonVFlQRV9QVFJfUCcKICAgICBUaGlzIHByZWRpY2F0ZSBob2xkcyBpZiB0aGUgdHlwZSBpcyBhIHBvaW50ZXIgdHlwZSwgYW5kIHRoZSBwb2ludGVlCiAgICAgaXMgbm90IGEgZGF0YSBtZW1iZXIuCgonVFlQRV9QVFJGTl9QJwogICAgIFRoaXMgcHJlZGljYXRlIGhvbGRzIGZvciBhIHBvaW50ZXIgdG8gZnVuY3Rpb24gdHlwZS4KCidUWVBFX1BUUk9CX1AnCiAgICAgVGhpcyBwcmVkaWNhdGUgaG9sZHMgZm9yIGEgcG9pbnRlciB0byBvYmplY3QgdHlwZS4gIE5vdGUgaG93ZXZlcgogICAgIHRoYXQgaXQgZG9lcyBub3QgaG9sZCBmb3IgdGhlIGdlbmVyaWMgcG9pbnRlciB0byBvYmplY3QgdHlwZSAndm9pZAogICAgIConLiAgWW91IG1heSB1c2UgJ1RZUEVfUFRST0JWX1AnIHRvIHRlc3QgZm9yIGEgcG9pbnRlciB0byBvYmplY3QKICAgICB0eXBlIGFzIHdlbGwgYXMgJ3ZvaWQgKicuCgonVFlQRV9DQU5PTklDQUwnCiAgICAgVGhpcyBtYWNybyByZXR1cm5zIHRoZSAiY2Fub25pY2FsIiB0eXBlIGZvciB0aGUgZ2l2ZW4gdHlwZSBub2RlLgogICAgIENhbm9uaWNhbCB0eXBlcyBhcmUgdXNlZCB0byBpbXByb3ZlIHBlcmZvcm1hbmNlIGluIHRoZSBDKysgYW5kCiAgICAgT2JqZWN0aXZlLUMrKyBmcm9udCBlbmRzIGJ5IGFsbG93aW5nIGVmZmljaWVudCBjb21wYXJpc29uIGJldHdlZW4KICAgICB0d28gdHlwZSBub2RlcyBpbiAnc2FtZV90eXBlX3AnOiBpZiB0aGUgJ1RZUEVfQ0FOT05JQ0FMJyB2YWx1ZXMgb2YKICAgICB0aGUgdHlwZXMgYXJlIGVxdWFsLCB0aGUgdHlwZXMgYXJlIGVxdWl2YWxlbnQ7IG90aGVyd2lzZSwgdGhlIHR5cGVzCiAgICAgYXJlIG5vdCBlcXVpdmFsZW50LiAgVGhlIG5vdGlvbiBvZiBlcXVpdmFsZW5jZSBmb3IgY2Fub25pY2FsIHR5cGVzCiAgICAgaXMgdGhlIHNhbWUgYXMgdGhlIG5vdGlvbiBvZiB0eXBlIGVxdWl2YWxlbmNlIGluIHRoZSBsYW5ndWFnZQogICAgIGl0c2VsZi4gIEZvciBpbnN0YW5jZSwKCiAgICAgV2hlbiAnVFlQRV9DQU5PTklDQUwnIGlzICdOVUxMX1RSRUUnLCB0aGVyZSBpcyBubyBjYW5vbmljYWwgdHlwZQogICAgIGZvciB0aGUgZ2l2ZW4gdHlwZSBub2RlLiAgSW4gdGhpcyBjYXNlLCBjb21wYXJpc29uIGJldHdlZW4gdGhpcwogICAgIHR5cGUgYW5kIGFueSBvdGhlciB0eXBlIHJlcXVpcmVzIHRoZSBjb21waWxlciB0byBwZXJmb3JtIGEgZGVlcCwKICAgICAic3RydWN0dXJhbCIgY29tcGFyaXNvbiB0byBzZWUgaWYgdGhlIHR3byB0eXBlIG5vZGVzIGhhdmUgdGhlIHNhbWUKICAgICBmb3JtIGFuZCBwcm9wZXJ0aWVzLgoKICAgICBUaGUgY2Fub25pY2FsIHR5cGUgZm9yIGEgbm9kZSBpcyBhbHdheXMgdGhlIG1vc3QgZnVuZGFtZW50YWwgdHlwZQogICAgIGluIHRoZSBlcXVpdmFsZW5jZSBjbGFzcyBvZiB0eXBlcy4gIEZvciBpbnN0YW5jZSwgJ2ludCcgaXMgaXRzIG93bgogICAgIGNhbm9uaWNhbCB0eXBlLiAgQSB0eXBlZGVmICdJJyBvZiAnaW50JyB3aWxsIGhhdmUgJ2ludCcgYXMgaXRzCiAgICAgY2Fub25pY2FsIHR5cGUuICBTaW1pbGFybHksICdJKicgYW5kIGEgdHlwZWRlZiAnSVAnIChkZWZpbmVkIHRvCiAgICAgJ0kqJykgd2lsbCBoYXMgJ2ludConIGFzIHRoZWlyIGNhbm9uaWNhbCB0eXBlLiAgV2hlbiBidWlsZGluZyBhIG5ldwogICAgIHR5cGUgbm9kZSwgYmUgc3VyZSB0byBzZXQgJ1RZUEVfQ0FOT05JQ0FMJyB0byB0aGUgYXBwcm9wcmlhdGUKICAgICBjYW5vbmljYWwgdHlwZS4gIElmIHRoZSBuZXcgdHlwZSBpcyBhIGNvbXBvdW5kIHR5cGUgKGJ1aWx0IGZyb20KICAgICBvdGhlciB0eXBlcyksIGFuZCBhbnkgb2YgdGhvc2Ugb3RoZXIgdHlwZXMgcmVxdWlyZSBzdHJ1Y3R1cmFsCiAgICAgZXF1YWxpdHksIHVzZSAnU0VUX1RZUEVfU1RSVUNUVVJBTF9FUVVBTElUWScgdG8gZW5zdXJlIHRoYXQgdGhlIG5ldwogICAgIHR5cGUgYWxzbyByZXF1aXJlcyBzdHJ1Y3R1cmFsIGVxdWFsaXR5LiAgRmluYWxseSwgaWYgZm9yIHNvbWUKICAgICByZWFzb24geW91IGNhbm5vdCBndWFyYW50ZWUgdGhhdCAnVFlQRV9DQU5PTklDQUwnIHdpbGwgcG9pbnQgdG8gdGhlCiAgICAgY2Fub25pY2FsIHR5cGUsIHVzZSAnU0VUX1RZUEVfU1RSVUNUVVJBTF9FUVVBTElUWScgdG8gbWFrZSBzdXJlCiAgICAgdGhhdCB0aGUgbmV3IHR5cGUtYW5kIGFueSB0eXBlIGNvbnN0cnVjdGVkIGJhc2VkIG9uIGl0LXJlcXVpcmVzCiAgICAgc3RydWN0dXJhbCBlcXVhbGl0eS4gIElmIHlvdSBzdXNwZWN0IHRoYXQgdGhlIGNhbm9uaWNhbCB0eXBlIHN5c3RlbQogICAgIGlzIG1pc2NvbXBhcmluZyB0eXBlcywgcGFzcyAnLS1wYXJhbSB2ZXJpZnktY2Fub25pY2FsLXR5cGVzPTEnIHRvCiAgICAgdGhlIGNvbXBpbGVyIG9yIGNvbmZpZ3VyZSB3aXRoICctLWVuYWJsZS1jaGVja2luZycgdG8gZm9yY2UgdGhlCiAgICAgY29tcGlsZXIgdG8gdmVyaWZ5IGl0cyBjYW5vbmljYWwtdHlwZSBjb21wYXJpc29ucyBhZ2FpbnN0IHRoZQogICAgIHN0cnVjdHVyYWwgY29tcGFyaXNvbnM7IHRoZSBjb21waWxlciB3aWxsIHRoZW4gcHJpbnQgYW55IHdhcm5pbmdzCiAgICAgaWYgdGhlIGNhbm9uaWNhbCB0eXBlcyBtaXNjb21wYXJlLgoKJ1RZUEVfU1RSVUNUVVJBTF9FUVVBTElUWV9QJwogICAgIFRoaXMgcHJlZGljYXRlIGhvbGRzIHdoZW4gdGhlIG5vZGUgcmVxdWlyZXMgc3RydWN0dXJhbCBlcXVhbGl0eQogICAgIGNoZWNrcywgZS5nLiwgd2hlbiAnVFlQRV9DQU5PTklDQUwnIGlzICdOVUxMX1RSRUUnLgoKJ1NFVF9UWVBFX1NUUlVDVFVSQUxfRVFVQUxJVFknCiAgICAgVGhpcyBtYWNybyBzdGF0ZXMgdGhhdCB0aGUgdHlwZSBub2RlIGl0IGlzIGdpdmVuIHJlcXVpcmVzCiAgICAgc3RydWN0dXJhbCBlcXVhbGl0eSBjaGVja3MsIGUuZy4sIGl0IHNldHMgJ1RZUEVfQ0FOT05JQ0FMJyB0bwogICAgICdOVUxMX1RSRUUnLgoKJ3NhbWVfdHlwZV9wJwogICAgIFRoaXMgcHJlZGljYXRlIHRha2VzIHR3byB0eXBlcyBhcyBpbnB1dCwgYW5kIGhvbGRzIGlmIHRoZXkgYXJlIHRoZQogICAgIHNhbWUgdHlwZS4gIEZvciBleGFtcGxlLCBpZiBvbmUgdHlwZSBpcyBhICd0eXBlZGVmJyBmb3IgdGhlIG90aGVyLAogICAgIG9yIGJvdGggYXJlICd0eXBlZGVmJ3MgZm9yIHRoZSBzYW1lIHR5cGUuICBUaGlzIHByZWRpY2F0ZSBhbHNvCiAgICAgaG9sZHMgaWYgdGhlIHR3byB0cmVlcyBnaXZlbiBhcyBpbnB1dCBhcmUgc2ltcGx5IGNvcGllcyBvZiBvbmUKICAgICBhbm90aGVyOyBpLmUuLCB0aGVyZSBpcyBubyBkaWZmZXJlbmNlIGJldHdlZW4gdGhlbSBhdCB0aGUgc291cmNlCiAgICAgbGV2ZWwsIGJ1dCwgZm9yIHdoYXRldmVyIHJlYXNvbiwgYSBkdXBsaWNhdGUgaGFzIGJlZW4gbWFkZSBpbiB0aGUKICAgICByZXByZXNlbnRhdGlvbi4gIFlvdSBzaG91bGQgbmV2ZXIgdXNlICc9PScgKHBvaW50ZXIgZXF1YWxpdHkpIHRvCiAgICAgY29tcGFyZSB0eXBlczsgYWx3YXlzIHVzZSAnc2FtZV90eXBlX3AnIGluc3RlYWQuCgogRGV0YWlsZWQgYmVsb3cgYXJlIHRoZSB2YXJpb3VzIGtpbmRzIG9mIHR5cGVzLCBhbmQgdGhlIG1hY3JvcyB0aGF0IGNhbgpiZSB1c2VkIHRvIGFjY2VzcyB0aGVtLiAgQWx0aG91Z2ggb3RoZXIga2luZHMgb2YgdHlwZXMgYXJlIHVzZWQKZWxzZXdoZXJlIGluIEcrKywgdGhlIHR5cGVzIGRlc2NyaWJlZCBoZXJlIGFyZSB0aGUgb25seSBvbmVzIHRoYXQgeW91CndpbGwgZW5jb3VudGVyIHdoaWxlIGV4YW1pbmluZyB0aGUgaW50ZXJtZWRpYXRlIHJlcHJlc2VudGF0aW9uLgoKJ1ZPSURfVFlQRScKICAgICBVc2VkIHRvIHJlcHJlc2VudCB0aGUgJ3ZvaWQnIHR5cGUuCgonSU5URUdFUl9UWVBFJwogICAgIFVzZWQgdG8gcmVwcmVzZW50IHRoZSB2YXJpb3VzIGludGVncmFsIHR5cGVzLCBpbmNsdWRpbmcgJ2NoYXInLAogICAgICdzaG9ydCcsICdpbnQnLCAnbG9uZycsIGFuZCAnbG9uZyBsb25nJy4gIFRoaXMgY29kZSBpcyBub3QgdXNlZCBmb3IKICAgICBlbnVtZXJhdGlvbiB0eXBlcywgbm9yIGZvciB0aGUgJ2Jvb2wnIHR5cGUuICBUaGUgJ1RZUEVfUFJFQ0lTSU9OJwogICAgIGlzIHRoZSBudW1iZXIgb2YgYml0cyB1c2VkIGluIHRoZSByZXByZXNlbnRhdGlvbiwgcmVwcmVzZW50ZWQgYXMgYW4KICAgICAndW5zaWduZWQgaW50Jy4gIChOb3RlIHRoYXQgaW4gdGhlIGdlbmVyYWwgY2FzZSB0aGlzIGlzIG5vdCB0aGUKICAgICBzYW1lIHZhbHVlIGFzICdUWVBFX1NJWkUnOyBzdXBwb3NlIHRoYXQgdGhlcmUgd2VyZSBhIDI0LWJpdCBpbnRlZ2VyCiAgICAgdHlwZSwgYnV0IHRoYXQgYWxpZ25tZW50IHJlcXVpcmVtZW50cyBmb3IgdGhlIEFCSSByZXF1aXJlZCAzMi1iaXQKICAgICBhbGlnbm1lbnQuICBUaGVuLCAnVFlQRV9TSVpFJyB3b3VsZCBiZSBhbiAnSU5URUdFUl9DU1QnIGZvciAzMiwKICAgICB3aGlsZSAnVFlQRV9QUkVDSVNJT04nIHdvdWxkIGJlIDI0LikgIFRoZSBpbnRlZ2VyIHR5cGUgaXMgdW5zaWduZWQKICAgICBpZiAnVFlQRV9VTlNJR05FRCcgaG9sZHM7IG90aGVyd2lzZSwgaXQgaXMgc2lnbmVkLgoKICAgICBUaGUgJ1RZUEVfTUlOX1ZBTFVFJyBpcyBhbiAnSU5URUdFUl9DU1QnIGZvciB0aGUgc21hbGxlc3QgaW50ZWdlcgogICAgIHRoYXQgbWF5IGJlIHJlcHJlc2VudGVkIGJ5IHRoaXMgdHlwZS4gIFNpbWlsYXJseSwgdGhlCiAgICAgJ1RZUEVfTUFYX1ZBTFVFJyBpcyBhbiAnSU5URUdFUl9DU1QnIGZvciB0aGUgbGFyZ2VzdCBpbnRlZ2VyIHRoYXQKICAgICBtYXkgYmUgcmVwcmVzZW50ZWQgYnkgdGhpcyB0eXBlLgoKJ1JFQUxfVFlQRScKICAgICBVc2VkIHRvIHJlcHJlc2VudCB0aGUgJ2Zsb2F0JywgJ2RvdWJsZScsIGFuZCAnbG9uZyBkb3VibGUnIHR5cGVzLgogICAgIFRoZSBudW1iZXIgb2YgYml0cyBpbiB0aGUgZmxvYXRpbmctcG9pbnQgcmVwcmVzZW50YXRpb24gaXMgZ2l2ZW4gYnkKICAgICAnVFlQRV9QUkVDSVNJT04nLCBhcyBpbiB0aGUgJ0lOVEVHRVJfVFlQRScgY2FzZS4KCidGSVhFRF9QT0lOVF9UWVBFJwogICAgIFVzZWQgdG8gcmVwcmVzZW50IHRoZSAnc2hvcnQgX0ZyYWN0JywgJ19GcmFjdCcsICdsb25nIF9GcmFjdCcsCiAgICAgJ2xvbmcgbG9uZyBfRnJhY3QnLCAnc2hvcnQgX0FjY3VtJywgJ19BY2N1bScsICdsb25nIF9BY2N1bScsIGFuZAogICAgICdsb25nIGxvbmcgX0FjY3VtJyB0eXBlcy4gIFRoZSBudW1iZXIgb2YgYml0cyBpbiB0aGUgZml4ZWQtcG9pbnQKICAgICByZXByZXNlbnRhdGlvbiBpcyBnaXZlbiBieSAnVFlQRV9QUkVDSVNJT04nLCBhcyBpbiB0aGUKICAgICAnSU5URUdFUl9UWVBFJyBjYXNlLiAgVGhlcmUgbWF5IGJlIHBhZGRpbmcgYml0cywgZnJhY3Rpb25hbCBiaXRzCiAgICAgYW5kIGludGVncmFsIGJpdHMuICBUaGUgbnVtYmVyIG9mIGZyYWN0aW9uYWwgYml0cyBpcyBnaXZlbiBieQogICAgICdUWVBFX0ZCSVQnLCBhbmQgdGhlIG51bWJlciBvZiBpbnRlZ3JhbCBiaXRzIGlzIGdpdmVuIGJ5CiAgICAgJ1RZUEVfSUJJVCcuICBUaGUgZml4ZWQtcG9pbnQgdHlwZSBpcyB1bnNpZ25lZCBpZiAnVFlQRV9VTlNJR05FRCcKICAgICBob2xkczsgb3RoZXJ3aXNlLCBpdCBpcyBzaWduZWQuICBUaGUgZml4ZWQtcG9pbnQgdHlwZSBpcyBzYXR1cmF0aW5nCiAgICAgaWYgJ1RZUEVfU0FUVVJBVElORycgaG9sZHM7IG90aGVyd2lzZSwgaXQgaXMgbm90IHNhdHVyYXRpbmcuCgonQ09NUExFWF9UWVBFJwogICAgIFVzZWQgdG8gcmVwcmVzZW50IEdDQyBidWlsdC1pbiAnX19jb21wbGV4X18nIGRhdGEgdHlwZXMuICBUaGUKICAgICAnVFJFRV9UWVBFJyBpcyB0aGUgdHlwZSBvZiB0aGUgcmVhbCBhbmQgaW1hZ2luYXJ5IHBhcnRzLgoKJ0VOVU1FUkFMX1RZUEUnCiAgICAgVXNlZCB0byByZXByZXNlbnQgYW4gZW51bWVyYXRpb24gdHlwZS4gIFRoZSAnVFlQRV9QUkVDSVNJT04nIGdpdmVzCiAgICAgKGFzIGFuICdpbnQnKSwgdGhlIG51bWJlciBvZiBiaXRzIHVzZWQgdG8gcmVwcmVzZW50IHRoZSB0eXBlLiAgSWYKICAgICB0aGVyZSBhcmUgbm8gbmVnYXRpdmUgZW51bWVyYXRpb24gY29uc3RhbnRzLCAnVFlQRV9VTlNJR05FRCcgd2lsbAogICAgIGhvbGQuICBUaGUgbWluaW11bSBhbmQgbWF4aW11bSBlbnVtZXJhdGlvbiBjb25zdGFudHMgbWF5IGJlCiAgICAgb2J0YWluZWQgd2l0aCAnVFlQRV9NSU5fVkFMVUUnIGFuZCAnVFlQRV9NQVhfVkFMVUUnLCByZXNwZWN0aXZlbHk7CiAgICAgZWFjaCBvZiB0aGVzZSBtYWNyb3MgcmV0dXJucyBhbiAnSU5URUdFUl9DU1QnLgoKICAgICBUaGUgYWN0dWFsIGVudW1lcmF0aW9uIGNvbnN0YW50cyB0aGVtc2VsdmVzIG1heSBiZSBvYnRhaW5lZCBieQogICAgIGxvb2tpbmcgYXQgdGhlICdUWVBFX1ZBTFVFUycuICBUaGlzIG1hY3JvIHdpbGwgcmV0dXJuIGEKICAgICAnVFJFRV9MSVNUJywgY29udGFpbmluZyB0aGUgY29uc3RhbnRzLiAgVGhlICdUUkVFX1BVUlBPU0UnIG9mIGVhY2gKICAgICBub2RlIHdpbGwgYmUgYW4gJ0lERU5USUZJRVJfTk9ERScgZ2l2aW5nIHRoZSBuYW1lIG9mIHRoZSBjb25zdGFudDsKICAgICB0aGUgJ1RSRUVfVkFMVUUnIHdpbGwgYmUgYW4gJ0lOVEVHRVJfQ1NUJyBnaXZpbmcgdGhlIHZhbHVlIGFzc2lnbmVkCiAgICAgdG8gdGhhdCBjb25zdGFudC4gIFRoZXNlIGNvbnN0YW50cyB3aWxsIGFwcGVhciBpbiB0aGUgb3JkZXIgaW4KICAgICB3aGljaCB0aGV5IHdlcmUgZGVjbGFyZWQuICBUaGUgJ1RSRUVfVFlQRScgb2YgZWFjaCBvZiB0aGVzZQogICAgIGNvbnN0YW50cyB3aWxsIGJlIHRoZSB0eXBlIG9mIGVudW1lcmF0aW9uIHR5cGUgaXRzZWxmLgoKJ0JPT0xFQU5fVFlQRScKICAgICBVc2VkIHRvIHJlcHJlc2VudCB0aGUgJ2Jvb2wnIHR5cGUuCgonUE9JTlRFUl9UWVBFJwogICAgIFVzZWQgdG8gcmVwcmVzZW50IHBvaW50ZXIgdHlwZXMsIGFuZCBwb2ludGVyIHRvIGRhdGEgbWVtYmVyIHR5cGVzLgogICAgIFRoZSAnVFJFRV9UWVBFJyBnaXZlcyB0aGUgdHlwZSB0byB3aGljaCB0aGlzIHR5cGUgcG9pbnRzLiAgSWYgdGhlCiAgICAgdHlwZSBpcyBhIHBvaW50ZXIgdG8gZGF0YSBtZW1iZXIgdHlwZSwgdGhlbiAnVFlQRV9QVFJNRU1fUCcgd2lsbAogICAgIGhvbGQuICBGb3IgYSBwb2ludGVyIHRvIGRhdGEgbWVtYmVyIHR5cGUgb2YgdGhlIGZvcm0gJ1QgWDo6KicsCiAgICAgJ1RZUEVfUFRSTUVNX0NMQVNTX1RZUEUnIHdpbGwgYmUgdGhlIHR5cGUgJ1gnLCB3aGlsZQogICAgICdUWVBFX1BUUk1FTV9QT0lOVEVEX1RPX1RZUEUnIHdpbGwgYmUgdGhlIHR5cGUgJ1QnLgoKJ1JFRkVSRU5DRV9UWVBFJwogICAgIFVzZWQgdG8gcmVwcmVzZW50IHJlZmVyZW5jZSB0eXBlcy4gIFRoZSAnVFJFRV9UWVBFJyBnaXZlcyB0aGUgdHlwZQogICAgIHRvIHdoaWNoIHRoaXMgdHlwZSByZWZlcnMuCgonRlVOQ1RJT05fVFlQRScKICAgICBVc2VkIHRvIHJlcHJlc2VudCB0aGUgdHlwZSBvZiBub24tbWVtYmVyIGZ1bmN0aW9ucyBhbmQgb2Ygc3RhdGljCiAgICAgbWVtYmVyIGZ1bmN0aW9ucy4gIFRoZSAnVFJFRV9UWVBFJyBnaXZlcyB0aGUgcmV0dXJuIHR5cGUgb2YgdGhlCiAgICAgZnVuY3Rpb24uICBUaGUgJ1RZUEVfQVJHX1RZUEVTJyBhcmUgYSAnVFJFRV9MSVNUJyBvZiB0aGUgYXJndW1lbnQKICAgICB0eXBlcy4gIFRoZSAnVFJFRV9WQUxVRScgb2YgZWFjaCBub2RlIGluIHRoaXMgbGlzdCBpcyB0aGUgdHlwZSBvZgogICAgIHRoZSBjb3JyZXNwb25kaW5nIGFyZ3VtZW50OyB0aGUgJ1RSRUVfUFVSUE9TRScgaXMgYW4gZXhwcmVzc2lvbiBmb3IKICAgICB0aGUgZGVmYXVsdCBhcmd1bWVudCB2YWx1ZSwgaWYgYW55LiAgSWYgdGhlIGxhc3Qgbm9kZSBpbiB0aGUgbGlzdAogICAgIGlzICd2b2lkX2xpc3Rfbm9kZScgKGEgJ1RSRUVfTElTVCcgbm9kZSB3aG9zZSAnVFJFRV9WQUxVRScgaXMgdGhlCiAgICAgJ3ZvaWRfdHlwZV9ub2RlJyksIHRoZW4gZnVuY3Rpb25zIG9mIHRoaXMgdHlwZSBkbyBub3QgdGFrZSB2YXJpYWJsZQogICAgIGFyZ3VtZW50cy4gIE90aGVyd2lzZSwgdGhleSBkbyB0YWtlIGEgdmFyaWFibGUgbnVtYmVyIG9mIGFyZ3VtZW50cy4KCiAgICAgTm90ZSB0aGF0IGluIEMgKGJ1dCBub3QgaW4gQysrKSBhIGZ1bmN0aW9uIGRlY2xhcmVkIGxpa2UgJ3ZvaWQgZigpJwogICAgIGlzIGFuIHVucHJvdG90eXBlZCBmdW5jdGlvbiB0YWtpbmcgYSB2YXJpYWJsZSBudW1iZXIgb2YgYXJndW1lbnRzOwogICAgIHRoZSAnVFlQRV9BUkdfVFlQRVMnIG9mIHN1Y2ggYSBmdW5jdGlvbiB3aWxsIGJlICdOVUxMJy4KCidNRVRIT0RfVFlQRScKICAgICBVc2VkIHRvIHJlcHJlc2VudCB0aGUgdHlwZSBvZiBhIG5vbi1zdGF0aWMgbWVtYmVyIGZ1bmN0aW9uLiAgTGlrZSBhCiAgICAgJ0ZVTkNUSU9OX1RZUEUnLCB0aGUgcmV0dXJuIHR5cGUgaXMgZ2l2ZW4gYnkgdGhlICdUUkVFX1RZUEUnLiAgVGhlCiAgICAgdHlwZSBvZiAnKnRoaXMnLCBpLmUuLCB0aGUgY2xhc3Mgb2Ygd2hpY2ggZnVuY3Rpb25zIG9mIHRoaXMgdHlwZQogICAgIGFyZSBhIG1lbWJlciwgaXMgZ2l2ZW4gYnkgdGhlICdUWVBFX01FVEhPRF9CQVNFVFlQRScuICBUaGUKICAgICAnVFlQRV9BUkdfVFlQRVMnIGlzIHRoZSBwYXJhbWV0ZXIgbGlzdCwgYXMgZm9yIGEgJ0ZVTkNUSU9OX1RZUEUnLAogICAgIGFuZCBpbmNsdWRlcyB0aGUgJ3RoaXMnIGFyZ3VtZW50LgoKJ0FSUkFZX1RZUEUnCiAgICAgVXNlZCB0byByZXByZXNlbnQgYXJyYXkgdHlwZXMuICBUaGUgJ1RSRUVfVFlQRScgZ2l2ZXMgdGhlIHR5cGUgb2YKICAgICB0aGUgZWxlbWVudHMgaW4gdGhlIGFycmF5LiAgSWYgdGhlIGFycmF5LWJvdW5kIGlzIHByZXNlbnQgaW4gdGhlCiAgICAgdHlwZSwgdGhlICdUWVBFX0RPTUFJTicgaXMgYW4gJ0lOVEVHRVJfVFlQRScgd2hvc2UgJ1RZUEVfTUlOX1ZBTFVFJwogICAgIGFuZCAnVFlQRV9NQVhfVkFMVUUnIHdpbGwgYmUgdGhlIGxvd2VyIGFuZCB1cHBlciBib3VuZHMgb2YgdGhlCiAgICAgYXJyYXksIHJlc3BlY3RpdmVseS4gIFRoZSAnVFlQRV9NSU5fVkFMVUUnIHdpbGwgYWx3YXlzIGJlIGFuCiAgICAgJ0lOVEVHRVJfQ1NUJyBmb3IgemVybywgd2hpbGUgdGhlICdUWVBFX01BWF9WQUxVRScgd2lsbCBiZSBvbmUgbGVzcwogICAgIHRoYW4gdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgYXJyYXksIGkuZS4sIHRoZSBoaWdoZXN0IHZhbHVlCiAgICAgd2hpY2ggbWF5IGJlIHVzZWQgdG8gaW5kZXggYW4gZWxlbWVudCBpbiB0aGUgYXJyYXkuCgonUkVDT1JEX1RZUEUnCiAgICAgVXNlZCB0byByZXByZXNlbnQgJ3N0cnVjdCcgYW5kICdjbGFzcycgdHlwZXMsIGFzIHdlbGwgYXMgcG9pbnRlcnMKICAgICB0byBtZW1iZXIgZnVuY3Rpb25zIGFuZCBzaW1pbGFyIGNvbnN0cnVjdHMgaW4gb3RoZXIgbGFuZ3VhZ2VzLgogICAgICdUWVBFX0ZJRUxEUycgY29udGFpbnMgdGhlIGl0ZW1zIGNvbnRhaW5lZCBpbiB0aGlzIHR5cGUsIGVhY2ggb2YKICAgICB3aGljaCBjYW4gYmUgYSAnRklFTERfREVDTCcsICdWQVJfREVDTCcsICdDT05TVF9ERUNMJywgb3IKICAgICAnVFlQRV9ERUNMJy4gIFlvdSBtYXkgbm90IG1ha2UgYW55IGFzc3VtcHRpb25zIGFib3V0IHRoZSBvcmRlcmluZwogICAgIG9mIHRoZSBmaWVsZHMgaW4gdGhlIHR5cGUgb3Igd2hldGhlciBvbmUgb3IgbW9yZSBvZiB0aGVtIG92ZXJsYXAuCiAgICAgSWYgJ1RZUEVfUFRSTUVNRlVOQ19QJyBob2xkcywgdGhlbiB0aGlzIHR5cGUgaXMgYSBwb2ludGVyLXRvLW1lbWJlcgogICAgIHR5cGUuICBJbiB0aGF0IGNhc2UsIHRoZSAnVFlQRV9QVFJNRU1GVU5DX0ZOX1RZUEUnIGlzIGEKICAgICAnUE9JTlRFUl9UWVBFJyBwb2ludGluZyB0byBhICdNRVRIT0RfVFlQRScuICBUaGUgJ01FVEhPRF9UWVBFJyBpcwogICAgIHRoZSB0eXBlIG9mIGEgZnVuY3Rpb24gcG9pbnRlZCB0byBieSB0aGUgcG9pbnRlci10by1tZW1iZXIKICAgICBmdW5jdGlvbi4gIElmICdUWVBFX1BUUk1FTUZVTkNfUCcgZG9lcyBub3QgaG9sZCwgdGhpcyB0eXBlIGlzIGEKICAgICBjbGFzcyB0eXBlLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSAqbm90ZSBDbGFzc2VzOjouCgonVU5JT05fVFlQRScKICAgICBVc2VkIHRvIHJlcHJlc2VudCAndW5pb24nIHR5cGVzLiAgU2ltaWxhciB0byAnUkVDT1JEX1RZUEUnIGV4Y2VwdAogICAgIHRoYXQgYWxsICdGSUVMRF9ERUNMJyBub2RlcyBpbiAnVFlQRV9GSUVMRCcgc3RhcnQgYXQgYml0IHBvc2l0aW9uCiAgICAgemVyby4KCidRVUFMX1VOSU9OX1RZUEUnCiAgICAgVXNlZCB0byByZXByZXNlbnQgcGFydCBvZiBhIHZhcmlhbnQgcmVjb3JkIGluIEFkYS4gIFNpbWlsYXIgdG8KICAgICAnVU5JT05fVFlQRScgZXhjZXB0IHRoYXQgZWFjaCAnRklFTERfREVDTCcgaGFzIGEgJ0RFQ0xfUVVBTElGSUVSJwogICAgIGZpZWxkLCB3aGljaCBjb250YWlucyBhIGJvb2xlYW4gZXhwcmVzc2lvbiB0aGF0IGluZGljYXRlcyB3aGV0aGVyCiAgICAgdGhlIGZpZWxkIGlzIHByZXNlbnQgaW4gdGhlIG9iamVjdC4gIFRoZSB0eXBlIHdpbGwgb25seSBoYXZlIG9uZQogICAgIGZpZWxkLCBzbyBlYWNoIGZpZWxkJ3MgJ0RFQ0xfUVVBTElGSUVSJyBpcyBvbmx5IGV2YWx1YXRlZCBpZiBub25lCiAgICAgb2YgdGhlIGV4cHJlc3Npb25zIGluIHRoZSBwcmV2aW91cyBmaWVsZHMgaW4gJ1RZUEVfRklFTERTJyBhcmUKICAgICBub256ZXJvLiAgTm9ybWFsbHkgdGhlc2UgZXhwcmVzc2lvbnMgd2lsbCByZWZlcmVuY2UgYSBmaWVsZCBpbiB0aGUKICAgICBvdXRlciBvYmplY3QgdXNpbmcgYSAnUExBQ0VIT0xERVJfRVhQUicuCgonVU5LTk9XTl9UWVBFJwogICAgIFRoaXMgbm9kZSBpcyB1c2VkIHRvIHJlcHJlc2VudCBhIHR5cGUgdGhlIGtub3dsZWRnZSBvZiB3aGljaCBpcwogICAgIGluc3VmZmljaWVudCBmb3IgYSBzb3VuZCBwcm9jZXNzaW5nLgoKJ09GRlNFVF9UWVBFJwogICAgIFRoaXMgbm9kZSBpcyB1c2VkIHRvIHJlcHJlc2VudCBhIHBvaW50ZXItdG8tZGF0YSBtZW1iZXIuICBGb3IgYQogICAgIGRhdGEgbWVtYmVyICdYOjptJyB0aGUgJ1RZUEVfT0ZGU0VUX0JBU0VUWVBFJyBpcyAnWCcgYW5kIHRoZQogICAgICdUUkVFX1RZUEUnIGlzIHRoZSB0eXBlIG9mICdtJy4KCidUWVBFTkFNRV9UWVBFJwogICAgIFVzZWQgdG8gcmVwcmVzZW50IGEgY29uc3RydWN0IG9mIHRoZSBmb3JtICd0eXBlbmFtZSBUOjpBJy4gIFRoZQogICAgICdUWVBFX0NPTlRFWFQnIGlzICdUJzsgdGhlICdUWVBFX05BTUUnIGlzIGFuICdJREVOVElGSUVSX05PREUnIGZvcgogICAgICdBJy4gIElmIHRoZSB0eXBlIGlzIHNwZWNpZmllZCB2aWEgYSB0ZW1wbGF0ZS1pZCwgdGhlbgogICAgICdUWVBFTkFNRV9UWVBFX0ZVTExOQU1FJyB5aWVsZHMgYSAnVEVNUExBVEVfSURfRVhQUicuICBUaGUKICAgICAnVFJFRV9UWVBFJyBpcyBub24tJ05VTEwnIGlmIHRoZSBub2RlIGlzIGltcGxpY2l0bHkgZ2VuZXJhdGVkIGluCiAgICAgc3VwcG9ydCBmb3IgdGhlIGltcGxpY2l0IHR5cGVuYW1lIGV4dGVuc2lvbjsgaW4gd2hpY2ggY2FzZSB0aGUKICAgICAnVFJFRV9UWVBFJyBpcyBhIHR5cGUgbm9kZSBmb3IgdGhlIGJhc2UtY2xhc3MuCgonVFlQRU9GX1RZUEUnCiAgICAgVXNlZCB0byByZXByZXNlbnQgdGhlICdfX3R5cGVvZl9fJyBleHRlbnNpb24uICBUaGUgJ1RZUEVfRklFTERTJyBpcwogICAgIHRoZSBleHByZXNzaW9uIHRoZSB0eXBlIG9mIHdoaWNoIGlzIGJlaW5nIHJlcHJlc2VudGVkLgoKIFRoZXJlIGFyZSB2YXJpYWJsZXMgd2hvc2UgdmFsdWVzIHJlcHJlc2VudCBzb21lIG9mIHRoZSBiYXNpYyB0eXBlcy4KVGhlc2UgaW5jbHVkZToKJ3ZvaWRfdHlwZV9ub2RlJwogICAgIEEgbm9kZSBmb3IgJ3ZvaWQnLgoKJ2ludGVnZXJfdHlwZV9ub2RlJwogICAgIEEgbm9kZSBmb3IgJ2ludCcuCgondW5zaWduZWRfdHlwZV9ub2RlLicKICAgICBBIG5vZGUgZm9yICd1bnNpZ25lZCBpbnQnLgoKJ2NoYXJfdHlwZV9ub2RlLicKICAgICBBIG5vZGUgZm9yICdjaGFyJy4KSXQgbWF5IHNvbWV0aW1lcyBiZSB1c2VmdWwgdG8gY29tcGFyZSBvbmUgb2YgdGhlc2UgdmFyaWFibGVzIHdpdGggYSB0eXBlCmluIGhhbmQsIHVzaW5nICdzYW1lX3R5cGVfcCcuCgofCkZpbGU6IGdjY2ludC5pbmZvLCAgTm9kZTogU2NvcGVzLCAgTmV4dDogRGVjbGFyYXRpb25zLCAgUHJldjogVHlwZXMsICBVcDogVHJlZXMKCjkuNCBTY29wZXMKPT09PT09PT09PQoKVGhlIHJvb3Qgb2YgdGhlIGVudGlyZSBpbnRlcm1lZGlhdGUgcmVwcmVzZW50YXRpb24gaXMgdGhlIHZhcmlhYmxlCidnbG9iYWxfbmFtZXNwYWNlJy4gIFRoaXMgaXMgdGhlIG5hbWVzcGFjZSBzcGVjaWZpZWQgd2l0aCAnOjonIGluIEMrKwpzb3VyY2UgY29kZS4gIEFsbCBvdGhlciBuYW1lc3BhY2VzLCB0eXBlcywgdmFyaWFibGVzLCBmdW5jdGlvbnMsIGFuZCBzbwpmb3J0aCBjYW4gYmUgZm91bmQgc3RhcnRpbmcgd2l0aCB0aGlzIG5hbWVzcGFjZS4KCiBCZXNpZGVzIG5hbWVzcGFjZXMsIHRoZSBvdGhlciBoaWdoLWxldmVsIHNjb3BpbmcgY29uc3RydWN0IGluIEMrKyBpcwp0aGUgY2xhc3MuICAoVGhyb3VnaG91dCB0aGlzIG1hbnVhbCB0aGUgdGVybSAiY2xhc3MiIGlzIHVzZWQgdG8gbWVhbiB0aGUKdHlwZXMgcmVmZXJyZWQgdG8gaW4gdGhlIEFOU0kvSVNPIEMrKyBTdGFuZGFyZCBhcyBjbGFzc2VzOyB0aGVzZSBpbmNsdWRlCnR5cGVzIGRlZmluZWQgd2l0aCB0aGUgJ2NsYXNzJywgJ3N0cnVjdCcsIGFuZCAndW5pb24nIGtleXdvcmRzLikKCiogTWVudToKCiogTmFtZXNwYWNlczo6ICAgICAgICAgIE1lbWJlciBmdW5jdGlvbnMsIHR5cGVzLCBldGMuCiogQ2xhc3Nlczo6ICAgICAgICAgICAgIE1lbWJlcnMsIGJhc2VzLCBmcmllbmRzLCBldGMuCgofCkZpbGU6IGdjY2ludC5pbmZvLCAgTm9kZTogTmFtZXNwYWNlcywgIE5leHQ6IENsYXNzZXMsICBVcDogU2NvcGVzCgo5LjQuMSBOYW1lc3BhY2VzCi0tLS0tLS0tLS0tLS0tLS0KCkEgbmFtZXNwYWNlIGlzIHJlcHJlc2VudGVkIGJ5IGEgJ05BTUVTUEFDRV9ERUNMJyBub2RlLgoKIEhvd2V2ZXIsIGV4Y2VwdCBmb3IgdGhlIGZhY3QgdGhhdCBpdCBpcyBkaXN0aW5ndWlzaGVkIGFzIHRoZSByb290IG9mCnRoZSByZXByZXNlbnRhdGlvbiwgdGhlIGdsb2JhbCBuYW1lc3BhY2UgaXMgbm8gZGlmZmVyZW50IGZyb20gYW55IG90aGVyCm5hbWVzcGFjZS4gIFRodXMsIGluIHdoYXQgZm9sbG93cywgd2UgZGVzY3JpYmUgbmFtZXNwYWNlcyBnZW5lcmFsbHksCnJhdGhlciB0aGFuIHRoZSBnbG9iYWwgbmFtZXNwYWNlIGluIHBhcnRpY3VsYXIuCgogVGhlIGZvbGxvd2luZyBtYWNyb3MgYW5kIGZ1bmN0aW9ucyBjYW4gYmUgdXNlZCBvbiBhICdOQU1FU1BBQ0VfREVDTCc6CgonREVDTF9OQU1FJwogICAgIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBvYnRhaW4gdGhlICdJREVOVElGSUVSX05PREUnIGNvcnJlc3BvbmRpbmcgdG8KICAgICB0aGUgdW5xdWFsaWZpZWQgbmFtZSBvZiB0aGUgbmFtZSBvZiB0aGUgbmFtZXNwYWNlICgqbm90ZQogICAgIElkZW50aWZpZXJzOjopLiAgVGhlIG5hbWUgb2YgdGhlIGdsb2JhbCBuYW1lc3BhY2UgaXMgJzo6JywgZXZlbgogICAgIHRob3VnaCBpbiBDKysgdGhlIGdsb2JhbCBuYW1lc3BhY2UgaXMgdW5uYW1lZC4gIEhvd2V2ZXIsIHlvdSBzaG91bGQKICAgICB1c2UgY29tcGFyaXNvbiB3aXRoICdnbG9iYWxfbmFtZXNwYWNlJywgcmF0aGVyIHRoYW4gJ0RFQ0xfTkFNRScgdG8KICAgICBkZXRlcm1pbmUgd2hldGhlciBvciBub3QgYSBuYW1lc3BhY2UgaXMgdGhlIGdsb2JhbCBvbmUuICBBbiB1bm5hbWVkCiAgICAgbmFtZXNwYWNlIHdpbGwgaGF2ZSBhICdERUNMX05BTUUnIGVxdWFsIHRvCiAgICAgJ2Fub255bW91c19uYW1lc3BhY2VfbmFtZScuICBXaXRoaW4gYSBzaW5nbGUgdHJhbnNsYXRpb24gdW5pdCwgYWxsCiAgICAgdW5uYW1lZCBuYW1lc3BhY2VzIHdpbGwgaGF2ZSB0aGUgc2FtZSBuYW1lLgoKJ0RFQ0xfQ09OVEVYVCcKICAgICBUaGlzIG1hY3JvIHJldHVybnMgdGhlIGVuY2xvc2luZyBuYW1lc3BhY2UuICBUaGUgJ0RFQ0xfQ09OVEVYVCcgZm9yCiAgICAgdGhlICdnbG9iYWxfbmFtZXNwYWNlJyBpcyAnTlVMTF9UUkVFJy4KCidERUNMX05BTUVTUEFDRV9BTElBUycKICAgICBJZiB0aGlzIGRlY2xhcmF0aW9uIGlzIGZvciBhIG5hbWVzcGFjZSBhbGlhcywgdGhlbgogICAgICdERUNMX05BTUVTUEFDRV9BTElBUycgaXMgdGhlIG5hbWVzcGFjZSBmb3Igd2hpY2ggdGhpcyBvbmUgaXMgYW4KICAgICBhbGlhcy4KCiAgICAgRG8gbm90IGF0dGVtcHQgdG8gdXNlICdjcF9uYW1lc3BhY2VfZGVjbHMnIGZvciBhIG5hbWVzcGFjZSB3aGljaCBpcwogICAgIGFuIGFsaWFzLiAgSW5zdGVhZCwgZm9sbG93ICdERUNMX05BTUVTUEFDRV9BTElBUycgbGlua3MgdW50aWwgeW91CiAgICAgcmVhY2ggYW4gb3JkaW5hcnksIG5vbi1hbGlhcywgbmFtZXNwYWNlLCBhbmQgY2FsbAogICAgICdjcF9uYW1lc3BhY2VfZGVjbHMnIHRoZXJlLgoKJ0RFQ0xfTkFNRVNQQUNFX1NURF9QJwogICAgIFRoaXMgcHJlZGljYXRlIGhvbGRzIGlmIHRoZSBuYW1lc3BhY2UgaXMgdGhlIHNwZWNpYWwgJzo6c3RkJwogICAgIG5hbWVzcGFjZS4KCidjcF9uYW1lc3BhY2VfZGVjbHMnCiAgICAgVGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiB0aGUgZGVjbGFyYXRpb25zIGNvbnRhaW5lZCBpbiB0aGUKICAgICBuYW1lc3BhY2UsIGluY2x1ZGluZyB0eXBlcywgb3ZlcmxvYWRlZCBmdW5jdGlvbnMsIG90aGVyIG5hbWVzcGFjZXMsCiAgICAgYW5kIHNvIGZvcnRoLiAgSWYgdGhlcmUgYXJlIG5vIGRlY2xhcmF0aW9ucywgdGhpcyBmdW5jdGlvbiB3aWxsCiAgICAgcmV0dXJuICdOVUxMX1RSRUUnLiAgVGhlIGRlY2xhcmF0aW9ucyBhcmUgY29ubmVjdGVkIHRocm91Z2ggdGhlaXIKICAgICAnVFJFRV9DSEFJTicgZmllbGRzLgoKICAgICBBbHRob3VnaCBtb3N0IGVudHJpZXMgb24gdGhpcyBsaXN0IHdpbGwgYmUgZGVjbGFyYXRpb25zLAogICAgICdUUkVFX0xJU1QnIG5vZGVzIG1heSBhbHNvIGFwcGVhci4gIEluIHRoaXMgY2FzZSwgdGhlICdUUkVFX1ZBTFVFJwogICAgIHdpbGwgYmUgYW4gJ09WRVJMT0FEJy4gIFRoZSB2YWx1ZSBvZiB0aGUgJ1RSRUVfUFVSUE9TRScgaXMKICAgICB1bnNwZWNpZmllZDsgYmFjayBlbmRzIHNob3VsZCBpZ25vcmUgdGhpcyB2YWx1ZS4gIEFzIHdpdGggdGhlIG90aGVyCiAgICAga2luZHMgb2YgZGVjbGFyYXRpb25zIHJldHVybmVkIGJ5ICdjcF9uYW1lc3BhY2VfZGVjbHMnLCB0aGUKICAgICAnVFJFRV9DSEFJTicgd2lsbCBwb2ludCB0byB0aGUgbmV4dCBkZWNsYXJhdGlvbiBpbiB0aGlzIGxpc3QuCgogICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBraW5kcyBvZiBkZWNsYXJhdGlvbnMgdGhhdCBjYW4gb2NjdXIgb24KICAgICB0aGlzIGxpc3QsICpOb3RlIERlY2xhcmF0aW9uczo6LiAgU29tZSBkZWNsYXJhdGlvbnMgd2lsbCBub3QgYXBwZWFyCiAgICAgb24gdGhpcyBsaXN0LiAgSW4gcGFydGljdWxhciwgbm8gJ0ZJRUxEX0RFQ0wnLCAnTEFCRUxfREVDTCcsIG9yCiAgICAgJ1BBUk1fREVDTCcgbm9kZXMgd2lsbCBhcHBlYXIgaGVyZS4KCiAgICAgVGhpcyBmdW5jdGlvbiBjYW5ub3QgYmUgdXNlZCB3aXRoIG5hbWVzcGFjZXMgdGhhdCBoYXZlCiAgICAgJ0RFQ0xfTkFNRVNQQUNFX0FMSUFTJyBzZXQuCgofCkZpbGU6IGdjY2ludC5pbmZvLCAgTm9kZTogQ2xhc3NlcywgIFByZXY6IE5hbWVzcGFjZXMsICBVcDogU2NvcGVzCgo5LjQuMiBDbGFzc2VzCi0tLS0tLS0tLS0tLS0KCkEgY2xhc3MgdHlwZSBpcyByZXByZXNlbnRlZCBieSBlaXRoZXIgYSAnUkVDT1JEX1RZUEUnIG9yIGEgJ1VOSU9OX1RZUEUnLgpBIGNsYXNzIGRlY2xhcmVkIHdpdGggdGhlICd1bmlvbicgdGFnIGlzIHJlcHJlc2VudGVkIGJ5IGEgJ1VOSU9OX1RZUEUnLAp3aGlsZSBjbGFzc2VzIGRlY2xhcmVkIHdpdGggZWl0aGVyIHRoZSAnc3RydWN0JyBvciB0aGUgJ2NsYXNzJyB0YWcgYXJlCnJlcHJlc2VudGVkIGJ5ICdSRUNPUkRfVFlQRSdzLiAgWW91IGNhbiB1c2UgdGhlCidDTEFTU1RZUEVfREVDTEFSRURfQ0xBU1MnIG1hY3JvIHRvIGRpc2Nlcm4gd2hldGhlciBvciBub3QgYSBwYXJ0aWN1bGFyCnR5cGUgaXMgYSAnY2xhc3MnIGFzIG9wcG9zZWQgdG8gYSAnc3RydWN0Jy4gIFRoaXMgbWFjcm8gd2lsbCBiZSB0cnVlCm9ubHkgZm9yIGNsYXNzZXMgZGVjbGFyZWQgd2l0aCB0aGUgJ2NsYXNzJyB0YWcuCgogQWxtb3N0IGFsbCBub24tZnVuY3Rpb24gbWVtYmVycyBhcmUgYXZhaWxhYmxlIG9uIHRoZSAnVFlQRV9GSUVMRFMnCmxpc3QuICBHaXZlbiBvbmUgbWVtYmVyLCB0aGUgbmV4dCBjYW4gYmUgZm91bmQgYnkgZm9sbG93aW5nIHRoZQonVFJFRV9DSEFJTicuICBZb3Ugc2hvdWxkIG5vdCBkZXBlbmQgaW4gYW55IHdheSBvbiB0aGUgb3JkZXIgaW4gd2hpY2gKZmllbGRzIGFwcGVhciBvbiB0aGlzIGxpc3QuICBBbGwgbm9kZXMgb24gdGhpcyBsaXN0IHdpbGwgYmUgJ0RFQ0wnCm5vZGVzLiAgQSAnRklFTERfREVDTCcgaXMgdXNlZCB0byByZXByZXNlbnQgYSBub24tc3RhdGljIGRhdGEgbWVtYmVyLCBhCidWQVJfREVDTCcgaXMgdXNlZCB0byByZXByZXNlbnQgYSBzdGF0aWMgZGF0YSBtZW1iZXIsIGFuZCBhICdUWVBFX0RFQ0wnCmlzIHVzZWQgdG8gcmVwcmVzZW50IGEgdHlwZS4gIE5vdGUgdGhhdCB0aGUgJ0NPTlNUX0RFQ0wnIGZvciBhbgplbnVtZXJhdGlvbiBjb25zdGFudCB3aWxsIGFwcGVhciBvbiB0aGlzIGxpc3QsIGlmIHRoZSBlbnVtZXJhdGlvbiB0eXBlCndhcyBkZWNsYXJlZCBpbiB0aGUgY2xhc3MuICAoT2YgY291cnNlLCB0aGUgJ1RZUEVfREVDTCcgZm9yIHRoZQplbnVtZXJhdGlvbiB0eXBlIHdpbGwgYXBwZWFyIGhlcmUgYXMgd2VsbC4pICBUaGVyZSBhcmUgbm8gZW50cmllcyBmb3IKYmFzZSBjbGFzc2VzIG9uIHRoaXMgbGlzdC4gIEluIHBhcnRpY3VsYXIsIHRoZXJlIGlzIG5vICdGSUVMRF9ERUNMJyBmb3IKdGhlICJiYXNlLWNsYXNzIHBvcnRpb24iIG9mIGFuIG9iamVjdC4KCiBUaGUgJ1RZUEVfVkZJRUxEJyBpcyBhIGNvbXBpbGVyLWdlbmVyYXRlZCBmaWVsZCB1c2VkIHRvIHBvaW50IHRvCnZpcnR1YWwgZnVuY3Rpb24gdGFibGVzLiAgSXQgbWF5IG9yIG1heSBub3QgYXBwZWFyIG9uIHRoZSAnVFlQRV9GSUVMRFMnCmxpc3QuICBIb3dldmVyLCBiYWNrIGVuZHMgc2hvdWxkIGhhbmRsZSB0aGUgJ1RZUEVfVkZJRUxEJyBqdXN0IGxpa2UgYWxsCnRoZSBlbnRyaWVzIG9uIHRoZSAnVFlQRV9GSUVMRFMnIGxpc3QuCgogVGhlIGZ1bmN0aW9uIG1lbWJlcnMgYXJlIGF2YWlsYWJsZSBvbiB0aGUgJ1RZUEVfTUVUSE9EUycgbGlzdC4gIEFnYWluLApzdWJzZXF1ZW50IG1lbWJlcnMgYXJlIGZvdW5kIGJ5IGZvbGxvd2luZyB0aGUgJ1RSRUVfQ0hBSU4nIGZpZWxkLiAgSWYgYQpmdW5jdGlvbiBpcyBvdmVybG9hZGVkLCBlYWNoIG9mIHRoZSBvdmVybG9hZGVkIGZ1bmN0aW9ucyBhcHBlYXJzOyBubwonT1ZFUkxPQUQnIG5vZGVzIGFwcGVhciBvbiB0aGUgJ1RZUEVfTUVUSE9EUycgbGlzdC4gIEltcGxpY2l0bHkgZGVjbGFyZWQKZnVuY3Rpb25zIChpbmNsdWRpbmcgZGVmYXVsdCBjb25zdHJ1Y3RvcnMsIGNvcHkgY29uc3RydWN0b3JzLCBhc3NpZ25tZW50Cm9wZXJhdG9ycywgYW5kIGRlc3RydWN0b3JzKSB3aWxsIGFwcGVhciBvbiB0aGlzIGxpc3QgYXMgd2VsbC4KCiBFdmVyeSBjbGFzcyBoYXMgYW4gYXNzb2NpYXRlZCAiYmluZm8iLCB3aGljaCBjYW4gYmUgb2J0YWluZWQgd2l0aAonVFlQRV9CSU5GTycuICBCaW5mb3MgYXJlIHVzZWQgdG8gcmVwcmVzZW50IGJhc2UtY2xhc3Nlcy4gIFRoZSBiaW5mbwpnaXZlbiBieSAnVFlQRV9CSU5GTycgaXMgdGhlIGRlZ2VuZXJhdGUgY2FzZSwgd2hlcmVieSBldmVyeSBjbGFzcyBpcwpjb25zaWRlcmVkIHRvIGJlIGl0cyBvd24gYmFzZS1jbGFzcy4gIFRoZSBiYXNlIGJpbmZvcyBmb3IgYSBwYXJ0aWN1bGFyCmJpbmZvIGFyZSBoZWxkIGluIGEgdmVjdG9yLCB3aG9zZSBsZW5ndGggaXMgb2J0YWluZWQgd2l0aAonQklORk9fTl9CQVNFX0JJTkZPUycuICBUaGUgYmFzZSBiaW5mb3MgdGhlbXNlbHZlcyBhcmUgb2J0YWluZWQgd2l0aAonQklORk9fQkFTRV9CSU5GTycgYW5kICdCSU5GT19CQVNFX0lURVJBVEUnLiAgVG8gYWRkIGEgbmV3IGJpbmZvLCB1c2UKJ0JJTkZPX0JBU0VfQVBQRU5EJy4gIFRoZSB2ZWN0b3Igb2YgYmFzZSBiaW5mb3MgY2FuIGJlIG9idGFpbmVkIHdpdGgKJ0JJTkZPX0JBU0VfQklORk9TJywgYnV0IG5vcm1hbGx5IHlvdSBkbyBub3QgbmVlZCB0byB1c2UgdGhhdC4gIFRoZQpjbGFzcyB0eXBlIGFzc29jaWF0ZWQgd2l0aCBhIGJpbmZvIGlzIGdpdmVuIGJ5ICdCSU5GT19UWVBFJy4gIEl0IGlzIG5vdAphbHdheXMgdGhlIGNhc2UgdGhhdCAnQklORk9fVFlQRSAoVFlQRV9CSU5GTyAoeCkpJywgYmVjYXVzZSBvZiB0eXBlZGVmcwphbmQgcXVhbGlmaWVkIHR5cGVzLiAgTmVpdGhlciBpcyBpdCB0aGUgY2FzZSB0aGF0ICdUWVBFX0JJTkZPCihCSU5GT19UWVBFICh5KSknIGlzIHRoZSBzYW1lIGJpbmZvIGFzICd5Jy4gIFRoZSByZWFzb24gaXMgdGhhdCBpZiAneScKaXMgYSBiaW5mbyByZXByZXNlbnRpbmcgYSBiYXNlLWNsYXNzICdCJyBvZiBhIGRlcml2ZWQgY2xhc3MgJ0QnLCB0aGVuCidCSU5GT19UWVBFICh5KScgd2lsbCBiZSAnQicsIGFuZCAnVFlQRV9CSU5GTyAoQklORk9fVFlQRSAoeSkpJyB3aWxsIGJlCidCJyBhcyBpdHMgb3duIGJhc2UtY2xhc3MsIHJhdGhlciB0aGFuIGFzIGEgYmFzZS1jbGFzcyBvZiAnRCcuCgogVGhlIGFjY2VzcyB0byBhIGJhc2UgdHlwZSBjYW4gYmUgZm91bmQgd2l0aCAnQklORk9fQkFTRV9BQ0NFU1MnLiAgVGhpcwp3aWxsIHByb2R1Y2UgJ2FjY2Vzc19wdWJsaWNfbm9kZScsICdhY2Nlc3NfcHJpdmF0ZV9ub2RlJyBvcgonYWNjZXNzX3Byb3RlY3RlZF9ub2RlJy4gIElmIGJhc2VzIGFyZSBhbHdheXMgcHVibGljLAonQklORk9fQkFTRV9BQ0NFU1NFUycgbWF5IGJlICdOVUxMJy4KCiAnQklORk9fVklSVFVBTF9QJyBpcyB1c2VkIHRvIHNwZWNpZnkgd2hldGhlciB0aGUgYmluZm8gaXMgaW5oZXJpdGVkCnZpcnR1YWxseSBvciBub3QuICBUaGUgb3RoZXIgZmxhZ3MsICdCSU5GT19NQVJLRURfUCcgYW5kICdCSU5GT19GTEFHXzEnCnRvICdCSU5GT19GTEFHXzYnIGNhbiBiZSB1c2VkIGZvciBsYW5ndWFnZSBzcGVjaWZpYyB1c2UuCgogVGhlIGZvbGxvd2luZyBtYWNyb3MgY2FuIGJlIHVzZWQgb24gYSB0cmVlIG5vZGUgcmVwcmVzZW50aW5nIGEKY2xhc3MtdHlwZS4KCidMT0NBTF9DTEFTU19QJwogICAgIFRoaXMgcHJlZGljYXRlIGhvbGRzIGlmIHRoZSBjbGFzcyBpcyBsb2NhbCBjbGFzcyBfaS5lLl8gZGVjbGFyZWQKICAgICBpbnNpZGUgYSBmdW5jdGlvbiBib2R5LgoKJ1RZUEVfUE9MWU1PUlBISUNfUCcKICAgICBUaGlzIHByZWRpY2F0ZSBob2xkcyBpZiB0aGUgY2xhc3MgaGFzIGF0IGxlYXN0IG9uZSB2aXJ0dWFsIGZ1bmN0aW9uCiAgICAgKGRlY2xhcmVkIG9yIGluaGVyaXRlZCkuCgonVFlQRV9IQVNfREVGQVVMVF9DT05TVFJVQ1RPUicKICAgICBUaGlzIHByZWRpY2F0ZSBob2xkcyB3aGVuZXZlciBpdHMgYXJndW1lbnQgcmVwcmVzZW50cyBhIGNsYXNzLXR5cGUKICAgICB3aXRoIGRlZmF1bHQgY29uc3RydWN0b3IuCgonQ0xBU1NUWVBFX0hBU19NVVRBQkxFJwonVFlQRV9IQVNfTVVUQUJMRV9QJwogICAgIFRoZXNlIHByZWRpY2F0ZXMgaG9sZCBmb3IgYSBjbGFzcy10eXBlIGhhdmluZyBhIG11dGFibGUgZGF0YQogICAgIG1lbWJlci4KCidDTEFTU1RZUEVfTk9OX1BPRF9QJwogICAgIFRoaXMgcHJlZGljYXRlIGhvbGRzIG9ubHkgZm9yIGNsYXNzLXR5cGVzIHRoYXQgYXJlIG5vdCBQT0RzLgoKJ1RZUEVfSEFTX05FV19PUEVSQVRPUicKICAgICBUaGlzIHByZWRpY2F0ZSBob2xkcyBmb3IgYSBjbGFzcy10eXBlIHRoYXQgZGVmaW5lcyAnb3BlcmF0b3IgbmV3Jy4KCidUWVBFX0hBU19BUlJBWV9ORVdfT1BFUkFUT1InCiAgICAgVGhpcyBwcmVkaWNhdGUgaG9sZHMgZm9yIGEgY2xhc3MtdHlwZSBmb3Igd2hpY2ggJ29wZXJhdG9yIG5ld1tdJyBpcwogICAgIGRlZmluZWQuCgonVFlQRV9PVkVSTE9BRFNfQ0FMTF9FWFBSJwogICAgIFRoaXMgcHJlZGljYXRlIGhvbGRzIGZvciBjbGFzcy10eXBlIGZvciB3aGljaCB0aGUgZnVuY3Rpb24gY2FsbAogICAgICdvcGVyYXRvcigpJyBpcyBvdmVybG9hZGVkLgoKJ1RZUEVfT1ZFUkxPQURTX0FSUkFZX1JFRicKICAgICBUaGlzIHByZWRpY2F0ZSBob2xkcyBmb3IgYSBjbGFzcy10eXBlIHRoYXQgb3ZlcmxvYWRzICdvcGVyYXRvcltdJwoKJ1RZUEVfT1ZFUkxPQURTX0FSUk9XJwogICAgIFRoaXMgcHJlZGljYXRlIGhvbGRzIGZvciBhIGNsYXNzLXR5cGUgZm9yIHdoaWNoICdvcGVyYXRvci0+JyBpcwogICAgIG92ZXJsb2FkZWQuCgofCkZpbGU6IGdjY2ludC5pbmZvLCAgTm9kZTogRGVjbGFyYXRpb25zLCAgTmV4dDogRnVuY3Rpb25zLCAgUHJldjogU2NvcGVzLCAgVXA6IFRyZWVzCgo5LjUgRGVjbGFyYXRpb25zCj09PT09PT09PT09PT09PT0KClRoaXMgc2VjdGlvbiBjb3ZlcnMgdGhlIHZhcmlvdXMga2luZHMgb2YgZGVjbGFyYXRpb25zIHRoYXQgYXBwZWFyIGluIHRoZQppbnRlcm5hbCByZXByZXNlbnRhdGlvbiwgZXhjZXB0IGZvciBkZWNsYXJhdGlvbnMgb2YgZnVuY3Rpb25zCihyZXByZXNlbnRlZCBieSAnRlVOQ1RJT05fREVDTCcgbm9kZXMpLCB3aGljaCBhcmUgZGVzY3JpYmVkIGluICpub3RlCkZ1bmN0aW9uczo6LgoKKiBNZW51OgoKKiBXb3JraW5nIHdpdGggZGVjbGFyYXRpb25zOjogIE1hY3JvcyBhbmQgZnVuY3Rpb25zIHRoYXQgd29yayBvbgpkZWNsYXJhdGlvbnMuCiogSW50ZXJuYWwgc3RydWN0dXJlOjogSG93IGRlY2xhcmF0aW9uIG5vZGVzIGFyZSByZXByZXNlbnRlZC4KCh8KRmlsZTogZ2NjaW50LmluZm8sICBOb2RlOiBXb3JraW5nIHdpdGggZGVjbGFyYXRpb25zLCAgTmV4dDogSW50ZXJuYWwgc3RydWN0dXJlLCAgVXA6IERlY2xhcmF0aW9ucwoKOS41LjEgV29ya2luZyB3aXRoIGRlY2xhcmF0aW9ucwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpTb21lIG1hY3JvcyBjYW4gYmUgdXNlZCB3aXRoIGFueSBraW5kIG9mIGRlY2xhcmF0aW9uLiAgVGhlc2UgaW5jbHVkZToKJ0RFQ0xfTkFNRScKICAgICBUaGlzIG1hY3JvIHJldHVybnMgYW4gJ0lERU5USUZJRVJfTk9ERScgZ2l2aW5nIHRoZSBuYW1lIG9mIHRoZQogICAgIGVudGl0eS4KCidUUkVFX1RZUEUnCiAgICAgVGhpcyBtYWNybyByZXR1cm5zIHRoZSB0eXBlIG9mIHRoZSBlbnRpdHkgZGVjbGFyZWQuCgonVFJFRV9GSUxFTkFNRScKICAgICBUaGlzIG1hY3JvIHJldHVybnMgdGhlIG5hbWUgb2YgdGhlIGZpbGUgaW4gd2hpY2ggdGhlIGVudGl0eSB3YXMKICAgICBkZWNsYXJlZCwgYXMgYSAnY2hhcionLiAgRm9yIGFuIGVudGl0eSBkZWNsYXJlZCBpbXBsaWNpdGx5IGJ5IHRoZQogICAgIGNvbXBpbGVyIChsaWtlICdfX2J1aWx0aW5fbWVtY3B5JyksIHRoaXMgd2lsbCBiZSB0aGUgc3RyaW5nCiAgICAgJyI8aW50ZXJuYWw+IicuCgonVFJFRV9MSU5FTk8nCiAgICAgVGhpcyBtYWNybyByZXR1cm5zIHRoZSBsaW5lIG51bWJlciBhdCB3aGljaCB0aGUgZW50aXR5IHdhcwogICAgIGRlY2xhcmVkLCBhcyBhbiAnaW50Jy4KCidERUNMX0FSVElGSUNJQUwnCiAgICAgVGhpcyBwcmVkaWNhdGUgaG9sZHMgaWYgdGhlIGRlY2xhcmF0aW9uIHdhcyBpbXBsaWNpdGx5IGdlbmVyYXRlZCBieQogICAgIHRoZSBjb21waWxlci4gIEZvciBleGFtcGxlLCB0aGlzIHByZWRpY2F0ZSB3aWxsIGhvbGQgb2YgYW4KICAgICBpbXBsaWNpdGx5IGRlY2xhcmVkIG1lbWJlciBmdW5jdGlvbiwgb3Igb2YgdGhlICdUWVBFX0RFQ0wnCiAgICAgaW1wbGljaXRseSBnZW5lcmF0ZWQgZm9yIGEgY2xhc3MgdHlwZS4gIFJlY2FsbCB0aGF0IGluIEMrKyBjb2RlCiAgICAgbGlrZToKICAgICAgICAgIHN0cnVjdCBTIHt9OwogICAgIGlzIHJvdWdobHkgZXF1aXZhbGVudCB0byBDIGNvZGUgbGlrZToKICAgICAgICAgIHN0cnVjdCBTIHt9OwogICAgICAgICAgdHlwZWRlZiBzdHJ1Y3QgUyBTOwogICAgIFRoZSBpbXBsaWNpdGx5IGdlbmVyYXRlZCAndHlwZWRlZicgZGVjbGFyYXRpb24gaXMgcmVwcmVzZW50ZWQgYnkgYQogICAgICdUWVBFX0RFQ0wnIGZvciB3aGljaCAnREVDTF9BUlRJRklDSUFMJyBob2xkcy4KCidERUNMX05BTUVTUEFDRV9TQ09QRV9QJwogICAgIFRoaXMgcHJlZGljYXRlIGhvbGRzIGlmIHRoZSBlbnRpdHkgd2FzIGRlY2xhcmVkIGF0IGEgbmFtZXNwYWNlCiAgICAgc2NvcGUuCgonREVDTF9DTEFTU19TQ09QRV9QJwogICAgIFRoaXMgcHJlZGljYXRlIGhvbGRzIGlmIHRoZSBlbnRpdHkgd2FzIGRlY2xhcmVkIGF0IGEgY2xhc3Mgc2NvcGUuCgonREVDTF9GVU5DVElPTl9TQ09QRV9QJwogICAgIFRoaXMgcHJlZGljYXRlIGhvbGRzIGlmIHRoZSBlbnRpdHkgd2FzIGRlY2xhcmVkIGluc2lkZSBhIGZ1bmN0aW9uCiAgICAgYm9keS4KCiBUaGUgdmFyaW91cyBraW5kcyBvZiBkZWNsYXJhdGlvbnMgaW5jbHVkZToKJ0xBQkVMX0RFQ0wnCiAgICAgVGhlc2Ugbm9kZXMgYXJlIHVzZWQgdG8gcmVwcmVzZW50IGxhYmVscyBpbiBmdW5jdGlvbiBib2RpZXMuICBGb3IKICAgICBtb3JlIGluZm9ybWF0aW9uLCBzZWUgKm5vdGUgRnVuY3Rpb25zOjouICBUaGVzZSBub2RlcyBvbmx5IGFwcGVhcgogICAgIGluIGJsb2NrIHNjb3Blcy4KCidDT05TVF9ERUNMJwogICAgIFRoZXNlIG5vZGVzIGFyZSB1c2VkIHRvIHJlcHJlc2VudCBlbnVtZXJhdGlvbiBjb25zdGFudHMuICBUaGUgdmFsdWUKICAgICBvZiB0aGUgY29uc3RhbnQgaXMgZ2l2ZW4gYnkgJ0RFQ0xfSU5JVElBTCcgd2hpY2ggd2lsbCBiZSBhbgogICAgICdJTlRFR0VSX0NTVCcgd2l0aCB0aGUgc2FtZSB0eXBlIGFzIHRoZSAnVFJFRV9UWVBFJyBvZiB0aGUKICAgICAnQ09OU1RfREVDTCcsIGkuZS4sIGFuICdFTlVNRVJBTF9UWVBFJy4KCidSRVNVTFRfREVDTCcKICAgICBUaGVzZSBub2RlcyByZXByZXNlbnQgdGhlIHZhbHVlIHJldHVybmVkIGJ5IGEgZnVuY3Rpb24uICBXaGVuIGEKICAgICB2YWx1ZSBpcyBhc3NpZ25lZCB0byBhICdSRVNVTFRfREVDTCcsIHRoYXQgaW5kaWNhdGVzIHRoYXQgdGhlIHZhbHVlCiAgICAgc2hvdWxkIGJlIHJldHVybmVkLCB2aWEgYml0d2lzZSBjb3B5LCBieSB0aGUgZnVuY3Rpb24uICBZb3UgY2FuIHVzZQogICAgICdERUNMX1NJWkUnIGFuZCAnREVDTF9BTElHTicgb24gYSAnUkVTVUxUX0RFQ0wnLCBqdXN0IGFzIHdpdGggYQogICAgICdWQVJfREVDTCcuCgonVFlQRV9ERUNMJwogICAgIFRoZXNlIG5vZGVzIHJlcHJlc2VudCAndHlwZWRlZicgZGVjbGFyYXRpb25zLiAgVGhlICdUUkVFX1RZUEUnIGlzCiAgICAgdGhlIHR5cGUgZGVjbGFyZWQgdG8gaGF2ZSB0aGUgbmFtZSBnaXZlbiBieSAnREVDTF9OQU1FJy4gIEluIHNvbWUKICAgICBjYXNlcywgdGhlcmUgaXMgbm8gYXNzb2NpYXRlZCBuYW1lLgoKJ1ZBUl9ERUNMJwogICAgIFRoZXNlIG5vZGVzIHJlcHJlc2VudCB2YXJpYWJsZXMgd2l0aCBuYW1lc3BhY2Ugb3IgYmxvY2sgc2NvcGUsIGFzCiAgICAgd2VsbCBhcyBzdGF0aWMgZGF0YSBtZW1iZXJzLiAgVGhlICdERUNMX1NJWkUnIGFuZCAnREVDTF9BTElHTicgYXJlCiAgICAgYW5hbG9nb3VzIHRvICdUWVBFX1NJWkUnIGFuZCAnVFlQRV9BTElHTicuICBGb3IgYSBkZWNsYXJhdGlvbiwgeW91CiAgICAgc2hvdWxkIGFsd2F5cyB1c2UgdGhlICdERUNMX1NJWkUnIGFuZCAnREVDTF9BTElHTicgcmF0aGVyIHRoYW4gdGhlCiAgICAgJ1RZUEVfU0laRScgYW5kICdUWVBFX0FMSUdOJyBnaXZlbiBieSB0aGUgJ1RSRUVfVFlQRScsIHNpbmNlCiAgICAgc3BlY2lhbCBhdHRyaWJ1dGVzIG1heSBoYXZlIGJlZW4gYXBwbGllZCB0byB0aGUgdmFyaWFibGUgdG8gZ2l2ZSBpdAogICAgIGEgcGFydGljdWxhciBzaXplIGFuZCBhbGlnbm1lbnQuICBZb3UgbWF5IHVzZSB0aGUgcHJlZGljYXRlcwogICAgICdERUNMX1RISVNfU1RBVElDJyBvciAnREVDTF9USElTX0VYVEVSTicgdG8gdGVzdCB3aGV0aGVyIHRoZQogICAgIHN0b3JhZ2UgY2xhc3Mgc3BlY2lmaWVycyAnc3RhdGljJyBvciAnZXh0ZXJuJyB3ZXJlIHVzZWQgdG8gZGVjbGFyZQogICAgIGEgdmFyaWFibGUuCgogICAgIElmIHRoaXMgdmFyaWFibGUgaXMgaW5pdGlhbGl6ZWQgKGJ1dCBkb2VzIG5vdCByZXF1aXJlIGEKICAgICBjb25zdHJ1Y3RvciksIHRoZSAnREVDTF9JTklUSUFMJyB3aWxsIGJlIGFuIGV4cHJlc3Npb24gZm9yIHRoZQogICAgIGluaXRpYWxpemVyLiAgVGhlIGluaXRpYWxpemVyIHNob3VsZCBiZSBldmFsdWF0ZWQsIGFuZCBhIGJpdHdpc2UKICAgICBjb3B5IGludG8gdGhlIHZhcmlhYmxlIHBlcmZvcm1lZC4gIElmIHRoZSAnREVDTF9JTklUSUFMJyBpcyB0aGUKICAgICAnZXJyb3JfbWFya19ub2RlJywgdGhlcmUgaXMgYW4gaW5pdGlhbGl6ZXIsIGJ1dCBpdCBpcyBnaXZlbiBieSBhbgogICAgIGV4cGxpY2l0IHN0YXRlbWVudCBsYXRlciBpbiB0aGUgY29kZTsgbm8gYml0d2lzZSBjb3B5IGlzIHJlcXVpcmVkLgoKICAgICBHQ0MgcHJvdmlkZXMgYW4gZXh0ZW5zaW9uIHRoYXQgYWxsb3dzIGVpdGhlciBhdXRvbWF0aWMgdmFyaWFibGVzLAogICAgIG9yIGdsb2JhbCB2YXJpYWJsZXMsIHRvIGJlIHBsYWNlZCBpbiBwYXJ0aWN1bGFyIHJlZ2lzdGVycy4gIFRoaXMKICAgICBleHRlbnNpb24gaXMgYmVpbmcgdXNlZCBmb3IgYSBwYXJ0aWN1bGFyICdWQVJfREVDTCcgaWYKICAgICAnREVDTF9SRUdJU1RFUicgaG9sZHMgZm9yIHRoZSAnVkFSX0RFQ0wnLCBhbmQgaWYKICAgICAnREVDTF9BU1NFTUJMRVJfTkFNRScgaXMgbm90IGVxdWFsIHRvICdERUNMX05BTUUnLiAgSW4gdGhhdCBjYXNlLAogICAgICdERUNMX0FTU0VNQkxFUl9OQU1FJyBpcyB0aGUgbmFtZSBvZiB0aGUgcmVnaXN0ZXIgaW50byB3aGljaCB0aGUKICAgICB2YXJpYWJsZSB3aWxsIGJlIHBsYWNlZC4KCidQQVJNX0RFQ0wnCiAgICAgVXNlZCB0byByZXByZXNlbnQgYSBwYXJhbWV0ZXIgdG8gYSBmdW5jdGlvbi4gIFRyZWF0IHRoZXNlIG5vZGVzCiAgICAgc2ltaWxhcmx5IHRvICdWQVJfREVDTCcgbm9kZXMuICBUaGVzZSBub2RlcyBvbmx5IGFwcGVhciBpbiB0aGUKICAgICAnREVDTF9BUkdVTUVOVFMnIGZvciBhICdGVU5DVElPTl9ERUNMJy4KCiAgICAgVGhlICdERUNMX0FSR19UWVBFJyBmb3IgYSAnUEFSTV9ERUNMJyBpcyB0aGUgdHlwZSB0aGF0IHdpbGwKICAgICBhY3R1YWxseSBiZSB1c2VkIHdoZW4gYSB2YWx1ZSBpcyBwYXNzZWQgdG8gdGhpcyBmdW5jdGlvbi4gIEl0IG1heQogICAgIGJlIGEgd2lkZXIgdHlwZSB0aGFuIHRoZSAnVFJFRV9UWVBFJyBvZiB0aGUgcGFyYW1ldGVyOyBmb3IgZXhhbXBsZSwKICAgICB0aGUgb3JkaW5hcnkgdHlwZSBtaWdodCBiZSAnc2hvcnQnIHdoaWxlIHRoZSAnREVDTF9BUkdfVFlQRScgaXMKICAgICAnaW50Jy4KCidGSUVMRF9ERUNMJwogICAgIFRoZXNlIG5vZGVzIHJlcHJlc2VudCBub24tc3RhdGljIGRhdGEgbWVtYmVycy4gIFRoZSAnREVDTF9TSVpFJyBhbmQKICAgICAnREVDTF9BTElHTicgYmVoYXZlIGFzIGZvciAnVkFSX0RFQ0wnIG5vZGVzLiAgVGhlIHBvc2l0aW9uIG9mIHRoZQogICAgIGZpZWxkIHdpdGhpbiB0aGUgcGFyZW50IHJlY29yZCBpcyBzcGVjaWZpZWQgYnkgYSBjb21iaW5hdGlvbiBvZgogICAgIHRocmVlIGF0dHJpYnV0ZXMuICAnREVDTF9GSUVMRF9PRkZTRVQnIGlzIHRoZSBwb3NpdGlvbiwgY291bnRpbmcgaW4KICAgICBieXRlcywgb2YgdGhlICdERUNMX09GRlNFVF9BTElHTictYml0IHNpemVkIHdvcmQgY29udGFpbmluZyB0aGUgYml0CiAgICAgb2YgdGhlIGZpZWxkIGNsb3Nlc3QgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgc3RydWN0dXJlLgogICAgICdERUNMX0ZJRUxEX0JJVF9PRkZTRVQnIGlzIHRoZSBiaXQgb2Zmc2V0IG9mIHRoZSBmaXJzdCBiaXQgb2YgdGhlCiAgICAgZmllbGQgd2l0aGluIHRoaXMgd29yZDsgdGhpcyBtYXkgYmUgbm9uemVybyBldmVuIGZvciBmaWVsZHMgdGhhdAogICAgIGFyZSBub3QgYml0LWZpZWxkcywgc2luY2UgJ0RFQ0xfT0ZGU0VUX0FMSUdOJyBtYXkgYmUgZ3JlYXRlciB0aGFuCiAgICAgdGhlIG5hdHVyYWwgYWxpZ25tZW50IG9mIHRoZSBmaWVsZCdzIHR5cGUuCgogICAgIElmICdERUNMX0NfQklUX0ZJRUxEJyBob2xkcywgdGhpcyBmaWVsZCBpcyBhIGJpdC1maWVsZC4gIEluIGEKICAgICBiaXQtZmllbGQsICdERUNMX0JJVF9GSUVMRF9UWVBFJyBhbHNvIGNvbnRhaW5zIHRoZSB0eXBlIHRoYXQgd2FzCiAgICAgb3JpZ2luYWxseSBzcGVjaWZpZWQgZm9yIGl0LCB3aGlsZSBERUNMX1RZUEUgbWF5IGJlIGEgbW9kaWZpZWQgdHlwZQogICAgIHdpdGggbGVzc2VyIHByZWNpc2lvbiwgYWNjb3JkaW5nIHRvIHRoZSBzaXplIG9mIHRoZSBiaXQgZmllbGQuCgonTkFNRVNQQUNFX0RFQ0wnCiAgICAgKk5vdGUgTmFtZXNwYWNlczo6LgoKJ1RFTVBMQVRFX0RFQ0wnCgogICAgIFRoZXNlIG5vZGVzIGFyZSB1c2VkIHRvIHJlcHJlc2VudCBjbGFzcywgZnVuY3Rpb24sIGFuZCB2YXJpYWJsZQogICAgIChzdGF0aWMgZGF0YSBtZW1iZXIpIHRlbXBsYXRlcy4gIFRoZQogICAgICdERUNMX1RFTVBMQVRFX1NQRUNJQUxJWkFUSU9OUycgYXJlIGEgJ1RSRUVfTElTVCcuICBUaGUKICAgICAnVFJFRV9WQUxVRScgb2YgZWFjaCBub2RlIGluIHRoZSBsaXN0IGlzIGEgJ1RFTVBMQVRFX0RFQ0wncyBvcgogICAgICdGVU5DVElPTl9ERUNMJ3MgcmVwcmVzZW50aW5nIHNwZWNpYWxpemF0aW9ucyAoaW5jbHVkaW5nCiAgICAgaW5zdGFudGlhdGlvbnMpIG9mIHRoaXMgdGVtcGxhdGUuICBCYWNrIGVuZHMgY2FuIHNhZmVseSBpZ25vcmUKICAgICAnVEVNUExBVEVfREVDTCdzLCBidXQgc2hvdWxkIGV4YW1pbmUgJ0ZVTkNUSU9OX0RFQ0wnIG5vZGVzIG9uIHRoZQogICAgIHNwZWNpYWxpemF0aW9ucyBsaXN0IGp1c3QgYXMgdGhleSB3b3VsZCBvcmRpbmFyeSAnRlVOQ1RJT05fREVDTCcKICAgICBub2Rlcy4KCiAgICAgRm9yIGEgY2xhc3MgdGVtcGxhdGUsIHRoZSAnREVDTF9URU1QTEFURV9JTlNUQU5USUFUSU9OUycgbGlzdAogICAgIGNvbnRhaW5zIHRoZSBpbnN0YW50aWF0aW9ucy4gIFRoZSAnVFJFRV9WQUxVRScgb2YgZWFjaCBub2RlIGlzIGFuCiAgICAgaW5zdGFudGlhdGlvbiBvZiB0aGUgY2xhc3MuICBUaGUgJ0RFQ0xfVEVNUExBVEVfU1BFQ0lBTElaQVRJT05TJwogICAgIGNvbnRhaW5zIHBhcnRpYWwgc3BlY2lhbGl6YXRpb25zIG9mIHRoZSBjbGFzcy4KCidVU0lOR19ERUNMJwoKICAgICBCYWNrIGVuZHMgY2FuIHNhZmVseSBpZ25vcmUgdGhlc2Ugbm9kZXMuCgofCkZpbGU6IGdjY2ludC5pbmZvLCAgTm9kZTogSW50ZXJuYWwgc3RydWN0dXJlLCAgUHJldjogV29ya2luZyB3aXRoIGRlY2xhcmF0aW9ucywgIFVwOiBEZWNsYXJhdGlvbnMKCjkuNS4yIEludGVybmFsIHN0cnVjdHVyZQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCidERUNMJyBub2RlcyBhcmUgcmVwcmVzZW50ZWQgaW50ZXJuYWxseSBhcyBhIGhpZXJhcmNoeSBvZiBzdHJ1Y3R1cmVzLgoKKiBNZW51OgoKKiBDdXJyZW50IHN0cnVjdHVyZSBoaWVyYXJjaHk6OiAgVGhlIGN1cnJlbnQgREVDTCBub2RlIHN0cnVjdHVyZQpoaWVyYXJjaHkuCiogQWRkaW5nIG5ldyBERUNMIG5vZGUgdHlwZXM6OiBIb3cgdG8gYWRkIGEgbmV3IERFQ0wgbm9kZSB0byBhCmZyb250ZW5kLgoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IEN1cnJlbnQgc3RydWN0dXJlIGhpZXJhcmNoeSwgIE5leHQ6IEFkZGluZyBuZXcgREVDTCBub2RlIHR5cGVzLCAgVXA6IEludGVybmFsIHN0cnVjdHVyZQoKOS41LjIuMSBDdXJyZW50IHN0cnVjdHVyZSBoaWVyYXJjaHkKLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KCidzdHJ1Y3QgdHJlZV9kZWNsX21pbmltYWwnCiAgICAgVGhpcyBpcyB0aGUgbWluaW1hbCBzdHJ1Y3R1cmUgdG8gaW5oZXJpdCBmcm9tIGluIG9yZGVyIGZvciBjb21tb24KICAgICAnREVDTCcgbWFjcm9zIHRvIHdvcmsuICBUaGUgZmllbGRzIGl0IGNvbnRhaW5zIGFyZSBhIHVuaXF1ZSBJRCwKICAgICBzb3VyY2UgbG9jYXRpb24sIGNvbnRleHQsIGFuZCBuYW1lLgoKJ3N0cnVjdCB0cmVlX2RlY2xfY29tbW9uJwogICAgIFRoaXMgc3RydWN0dXJlIGluaGVyaXRzIGZyb20gJ3N0cnVjdCB0cmVlX2RlY2xfbWluaW1hbCcuICBJdAogICAgIGNvbnRhaW5zIGZpZWxkcyB0aGF0IG1vc3QgJ0RFQ0wnIG5vZGVzIG5lZWQsIHN1Y2ggYXMgYSBmaWVsZCB0bwogICAgIHN0b3JlIGFsaWdubWVudCwgbWFjaGluZSBtb2RlLCBzaXplLCBhbmQgYXR0cmlidXRlcy4KCidzdHJ1Y3QgdHJlZV9maWVsZF9kZWNsJwogICAgIFRoaXMgc3RydWN0dXJlIGluaGVyaXRzIGZyb20gJ3N0cnVjdCB0cmVlX2RlY2xfY29tbW9uJy4gIEl0IGlzIHVzZWQKICAgICB0byByZXByZXNlbnQgJ0ZJRUxEX0RFQ0wnLgoKJ3N0cnVjdCB0cmVlX2xhYmVsX2RlY2wnCiAgICAgVGhpcyBzdHJ1Y3R1cmUgaW5oZXJpdHMgZnJvbSAnc3RydWN0IHRyZWVfZGVjbF9jb21tb24nLiAgSXQgaXMgdXNlZAogICAgIHRvIHJlcHJlc2VudCAnTEFCRUxfREVDTCcuCgonc3RydWN0IHRyZWVfdHJhbnNsYXRpb25fdW5pdF9kZWNsJwogICAgIFRoaXMgc3RydWN0dXJlIGluaGVyaXRzIGZyb20gJ3N0cnVjdCB0cmVlX2RlY2xfY29tbW9uJy4gIEl0IGlzIHVzZWQKICAgICB0byByZXByZXNlbnQgJ1RSQU5TTEFUSU9OX1VOSVRfREVDTCcuCgonc3RydWN0IHRyZWVfZGVjbF93aXRoX3J0bCcKICAgICBUaGlzIHN0cnVjdHVyZSBpbmhlcml0cyBmcm9tICdzdHJ1Y3QgdHJlZV9kZWNsX2NvbW1vbicuICBJdAogICAgIGNvbnRhaW5zIGEgZmllbGQgdG8gc3RvcmUgdGhlIGxvdy1sZXZlbCBSVEwgYXNzb2NpYXRlZCB3aXRoIGEKICAgICAnREVDTCcgbm9kZS4KCidzdHJ1Y3QgdHJlZV9yZXN1bHRfZGVjbCcKICAgICBUaGlzIHN0cnVjdHVyZSBpbmhlcml0cyBmcm9tICdzdHJ1Y3QgdHJlZV9kZWNsX3dpdGhfcnRsJy4gIEl0IGlzCiAgICAgdXNlZCB0byByZXByZXNlbnQgJ1JFU1VMVF9ERUNMJy4KCidzdHJ1Y3QgdHJlZV9jb25zdF9kZWNsJwogICAgIFRoaXMgc3RydWN0dXJlIGluaGVyaXRzIGZyb20gJ3N0cnVjdCB0cmVlX2RlY2xfd2l0aF9ydGwnLiAgSXQgaXMKICAgICB1c2VkIHRvIHJlcHJlc2VudCAnQ09OU1RfREVDTCcuCgonc3RydWN0IHRyZWVfcGFybV9kZWNsJwogICAgIFRoaXMgc3RydWN0dXJlIGluaGVyaXRzIGZyb20gJ3N0cnVjdCB0cmVlX2RlY2xfd2l0aF9ydGwnLiAgSXQgaXMKICAgICB1c2VkIHRvIHJlcHJlc2VudCAnUEFSTV9ERUNMJy4KCidzdHJ1Y3QgdHJlZV9kZWNsX3dpdGhfdmlzJwogICAgIFRoaXMgc3RydWN0dXJlIGluaGVyaXRzIGZyb20gJ3N0cnVjdCB0cmVlX2RlY2xfd2l0aF9ydGwnLiAgSXQKICAgICBjb250YWlucyBmaWVsZHMgbmVjZXNzYXJ5IHRvIHN0b3JlIHZpc2liaWxpdHkgaW5mb3JtYXRpb24sIGFzIHdlbGwKICAgICBhcyBhIHNlY3Rpb24gbmFtZSBhbmQgYXNzZW1ibGVyIG5hbWUuCgonc3RydWN0IHRyZWVfdmFyX2RlY2wnCiAgICAgVGhpcyBzdHJ1Y3R1cmUgaW5oZXJpdHMgZnJvbSAnc3RydWN0IHRyZWVfZGVjbF93aXRoX3ZpcycuICBJdCBpcwogICAgIHVzZWQgdG8gcmVwcmVzZW50ICdWQVJfREVDTCcuCgonc3RydWN0IHRyZWVfZnVuY3Rpb25fZGVjbCcKICAgICBUaGlzIHN0cnVjdHVyZSBpbmhlcml0cyBmcm9tICdzdHJ1Y3QgdHJlZV9kZWNsX3dpdGhfdmlzJy4gIEl0IGlzCiAgICAgdXNlZCB0byByZXByZXNlbnQgJ0ZVTkNUSU9OX0RFQ0wnLgoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IEFkZGluZyBuZXcgREVDTCBub2RlIHR5cGVzLCAgUHJldjogQ3VycmVudCBzdHJ1Y3R1cmUgaGllcmFyY2h5LCAgVXA6IEludGVybmFsIHN0cnVjdHVyZQoKOS41LjIuMiBBZGRpbmcgbmV3IERFQ0wgbm9kZSB0eXBlcwouLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCgpBZGRpbmcgYSBuZXcgJ0RFQ0wnIHRyZWUgY29uc2lzdHMgb2YgdGhlIGZvbGxvd2luZyBzdGVwcwoKQWRkIGEgbmV3IHRyZWUgY29kZSBmb3IgdGhlICdERUNMJyBub2RlCiAgICAgRm9yIGxhbmd1YWdlIHNwZWNpZmljICdERUNMJyBub2RlcywgdGhlcmUgaXMgYSAnLmRlZicgZmlsZSBpbiBlYWNoCiAgICAgZnJvbnRlbmQgZGlyZWN0b3J5IHdoZXJlIHRoZSB0cmVlIGNvZGUgc2hvdWxkIGJlIGFkZGVkLiAgRm9yICdERUNMJwogICAgIG5vZGVzIHRoYXQgYXJlIHBhcnQgb2YgdGhlIG1pZGRsZS1lbmQsIHRoZSBjb2RlIHNob3VsZCBiZSBhZGRlZCB0bwogICAgICd0cmVlLmRlZicuCgpDcmVhdGUgYSBuZXcgc3RydWN0dXJlIHR5cGUgZm9yIHRoZSAnREVDTCcgbm9kZQogICAgIFRoZXNlIHN0cnVjdHVyZXMgc2hvdWxkIGluaGVyaXQgZnJvbSBvbmUgb2YgdGhlIGV4aXN0aW5nIHN0cnVjdHVyZXMKICAgICBpbiB0aGUgbGFuZ3VhZ2UgaGllcmFyY2h5IGJ5IHVzaW5nIHRoYXQgc3RydWN0dXJlIGFzIHRoZSBmaXJzdAogICAgIG1lbWJlci4KCiAgICAgICAgICBzdHJ1Y3QgdHJlZV9mb29fZGVjbAogICAgICAgICAgewogICAgICAgICAgICAgc3RydWN0IHRyZWVfZGVjbF93aXRoX3ZpcyBjb21tb247CiAgICAgICAgICB9CgogICAgIFdvdWxkIGNyZWF0ZSBhIHN0cnVjdHVyZSBuYW1lICd0cmVlX2Zvb19kZWNsJyB0aGF0IGluaGVyaXRzIGZyb20KICAgICAnc3RydWN0IHRyZWVfZGVjbF93aXRoX3ZpcycuCgogICAgIEZvciBsYW5ndWFnZSBzcGVjaWZpYyAnREVDTCcgbm9kZXMsIHRoaXMgbmV3IHN0cnVjdHVyZSB0eXBlIHNob3VsZAogICAgIGdvIGluIHRoZSBhcHByb3ByaWF0ZSAnLmgnIGZpbGUuICBGb3IgJ0RFQ0wnIG5vZGVzIHRoYXQgYXJlIHBhcnQgb2YKICAgICB0aGUgbWlkZGxlLWVuZCwgdGhlIHN0cnVjdHVyZSB0eXBlIHNob3VsZCBnbyBpbiAndHJlZS5oJy4KCkFkZCBhIG1lbWJlciB0byB0aGUgdHJlZSBzdHJ1Y3R1cmUgZW51bWVyYXRvciBmb3IgdGhlIG5vZGUKICAgICBGb3IgZ2FyYmFnZSBjb2xsZWN0aW9uIGFuZCBkeW5hbWljIGNoZWNraW5nIHB1cnBvc2VzLCBlYWNoICdERUNMJwogICAgIG5vZGUgc3RydWN0dXJlIHR5cGUgaXMgcmVxdWlyZWQgdG8gaGF2ZSBhIHVuaXF1ZSBlbnVtZXJhdG9yIHZhbHVlCiAgICAgc3BlY2lmaWVkIHdpdGggaXQuICBGb3IgbGFuZ3VhZ2Ugc3BlY2lmaWMgJ0RFQ0wnIG5vZGVzLCB0aGlzIG5ldwogICAgIGVudW1lcmF0b3IgdmFsdWUgc2hvdWxkIGdvIGluIHRoZSBhcHByb3ByaWF0ZSAnLmRlZicgZmlsZS4gIEZvcgogICAgICdERUNMJyBub2RlcyB0aGF0IGFyZSBwYXJ0IG9mIHRoZSBtaWRkbGUtZW5kLCB0aGUgZW51bWVyYXRvciB2YWx1ZXMKICAgICBhcmUgc3BlY2lmaWVkIGluICd0cmVlc3RydWN0LmRlZicuCgpVcGRhdGUgJ3VuaW9uIHRyZWVfbm9kZScKICAgICBJbiBvcmRlciB0byBtYWtlIHlvdXIgbmV3IHN0cnVjdHVyZSB0eXBlIHVzYWJsZSwgaXQgbXVzdCBiZSBhZGRlZAogICAgIHRvICd1bmlvbiB0cmVlX25vZGUnLiAgRm9yIGxhbmd1YWdlIHNwZWNpZmljICdERUNMJyBub2RlcywgYSBuZXcKICAgICBlbnRyeSBzaG91bGQgYmUgYWRkZWQgdG8gdGhlIGFwcHJvcHJpYXRlICcuaCcgZmlsZSBvZiB0aGUgZm9ybQogICAgICAgICAgICBzdHJ1Y3QgdHJlZV9mb29fZGVjbCBHVFkgKCh0YWcgKCJUU19WQVJfREVDTCIpKSkgZm9vX2RlY2w7CiAgICAgRm9yICdERUNMJyBub2RlcyB0aGF0IGFyZSBwYXJ0IG9mIHRoZSBtaWRkbGUtZW5kLCB0aGUgYWRkaXRpb25hbAogICAgIG1lbWJlciBnb2VzIGRpcmVjdGx5IGludG8gJ3VuaW9uIHRyZWVfbm9kZScgaW4gJ3RyZWUuaCcuCgpVcGRhdGUgZHluYW1pYyBjaGVja2luZyBpbmZvCiAgICAgSW4gb3JkZXIgdG8gYmUgYWJsZSB0byBjaGVjayB3aGV0aGVyIGFjY2Vzc2luZyBhIG5hbWVkIHBvcnRpb24gb2YKICAgICAndW5pb24gdHJlZV9ub2RlJyBpcyBsZWdhbCwgYW5kIHdoZXRoZXIgYSBjZXJ0YWluICdERUNMJyBub2RlCiAgICAgY29udGFpbnMgb25lIG9mIHRoZSBlbnVtZXJhdGVkICdERUNMJyBub2RlIHN0cnVjdHVyZXMgaW4gdGhlCiAgICAgaGllcmFyY2h5LCBhIHNpbXBsZSBsb29rdXAgdGFibGUgaXMgdXNlZC4gIFRoaXMgbG9va3VwIHRhYmxlIG5lZWRzCiAgICAgdG8gYmUga2VwdCB1cCB0byBkYXRlIHdpdGggdGhlIHRyZWUgc3RydWN0dXJlIGhpZXJhcmNoeSwgb3IgZWxzZQogICAgIGNoZWNraW5nIGFuZCBjb250YWlubWVudCBtYWNyb3Mgd2lsbCBmYWlsIGluYXBwcm9wcmlhdGVseS4KCiAgICAgRm9yIGxhbmd1YWdlIHNwZWNpZmljICdERUNMJyBub2RlcywgdGhlaXIgaXMgYW4gJ2luaXRfdHMnIGZ1bmN0aW9uCiAgICAgaW4gYW4gYXBwcm9wcmlhdGUgJy5jJyBmaWxlLCB3aGljaCBpbml0aWFsaXplcyB0aGUgbG9va3VwIHRhYmxlLgogICAgIENvZGUgc2V0dGluZyB1cCB0aGUgdGFibGUgZm9yIG5ldyAnREVDTCcgbm9kZXMgc2hvdWxkIGJlIGFkZGVkCiAgICAgdGhlcmUuICBGb3IgZWFjaCAnREVDTCcgdHJlZSBjb2RlIGFuZCBlbnVtZXJhdG9yIHZhbHVlIHJlcHJlc2VudGluZwogICAgIGEgbWVtYmVyIG9mIHRoZSBpbmhlcml0YW5jZSBoaWVyYXJjaHksIHRoZSB0YWJsZSBzaG91bGQgY29udGFpbiAxCiAgICAgaWYgdGhhdCB0cmVlIGNvZGUgaW5oZXJpdHMgKGRpcmVjdGx5IG9yIGluZGlyZWN0bHkpIGZyb20gdGhhdAogICAgIG1lbWJlci4gIFRodXMsIGEgJ0ZPT19ERUNMJyBub2RlIGRlcml2ZWQgZnJvbSAnc3RydWN0CiAgICAgZGVjbF93aXRoX3J0bCcsIGFuZCBlbnVtZXJhdG9yIHZhbHVlICdUU19GT09fREVDTCcsIHdvdWxkIGJlIHNldCB1cAogICAgIGFzIGZvbGxvd3MKICAgICAgICAgIHRyZWVfY29udGFpbnNfc3RydWN0W0ZPT19ERUNMXVtUU19GT09fREVDTF0gPSAxOwogICAgICAgICAgdHJlZV9jb250YWluc19zdHJ1Y3RbRk9PX0RFQ0xdW1RTX0RFQ0xfV1JUTF0gPSAxOwogICAgICAgICAgdHJlZV9jb250YWluc19zdHJ1Y3RbRk9PX0RFQ0xdW1RTX0RFQ0xfQ09NTU9OXSA9IDE7CiAgICAgICAgICB0cmVlX2NvbnRhaW5zX3N0cnVjdFtGT09fREVDTF1bVFNfREVDTF9NSU5JTUFMXSA9IDE7CgogICAgIEZvciAnREVDTCcgbm9kZXMgdGhhdCBhcmUgcGFydCBvZiB0aGUgbWlkZGxlLWVuZCwgdGhlIHNldHVwIGNvZGUKICAgICBnb2VzIGludG8gJ3RyZWUuYycuCgpBZGQgbWFjcm9zIHRvIGFjY2VzcyBhbnkgbmV3IGZpZWxkcyBhbmQgZmxhZ3MKCiAgICAgRWFjaCBhZGRlZCBmaWVsZCBvciBmbGFnIHNob3VsZCBoYXZlIGEgbWFjcm8gdGhhdCBpcyB1c2VkIHRvIGFjY2VzcwogICAgIGl0LCB0aGF0IHBlcmZvcm1zIGFwcHJvcHJpYXRlIGNoZWNraW5nIHRvIGVuc3VyZSBvbmx5IHRoZSByaWdodAogICAgIHR5cGUgb2YgJ0RFQ0wnIG5vZGVzIGFjY2VzcyB0aGUgZmllbGQuCgogICAgIFRoZXNlIG1hY3JvcyBnZW5lcmFsbHkgdGFrZSB0aGUgZm9sbG93aW5nIGZvcm0KICAgICAgICAgICNkZWZpbmUgRk9PX0RFQ0xfRklFTEROQU1FKE5PREUpIEZPT19ERUNMX0NIRUNLKE5PREUpLT5mb29fZGVjbC5maWVsZG5hbWUKICAgICBIb3dldmVyLCBpZiB0aGUgc3RydWN0dXJlIGlzIHNpbXBseSBhIGJhc2UgY2xhc3MgZm9yIGZ1cnRoZXIKICAgICBzdHJ1Y3R1cmVzLCBzb21ldGhpbmcgbGlrZSB0aGUgZm9sbG93aW5nIHNob3VsZCBiZSB1c2VkCiAgICAgICAgICAjZGVmaW5lIEJBU0VfU1RSVUNUX0NIRUNLKFQpIENPTlRBSU5TX1NUUlVDVF9DSEVDSyhULCBUU19CQVNFX1NUUlVDVCkKICAgICAgICAgICNkZWZpbmUgQkFTRV9TVFJVQ1RfRklFTEROQU1FKE5PREUpIFwKICAgICAgICAgICAgIChCQVNFX1NUUlVDVF9DSEVDSyhOT0RFKS0+YmFzZV9zdHJ1Y3QuZmllbGRuYW1lCgofCkZpbGU6IGdjY2ludC5pbmZvLCAgTm9kZTogRnVuY3Rpb25zLCAgTmV4dDogQXR0cmlidXRlcywgIFByZXY6IERlY2xhcmF0aW9ucywgIFVwOiBUcmVlcwoKOS42IEZ1bmN0aW9ucwo9PT09PT09PT09PT09CgpBIGZ1bmN0aW9uIGlzIHJlcHJlc2VudGVkIGJ5IGEgJ0ZVTkNUSU9OX0RFQ0wnIG5vZGUuICBBIHNldCBvZgpvdmVybG9hZGVkIGZ1bmN0aW9ucyBpcyBzb21ldGltZXMgcmVwcmVzZW50ZWQgYnkgYSAnT1ZFUkxPQUQnIG5vZGUuCgogQW4gJ09WRVJMT0FEJyBub2RlIGlzIG5vdCBhIGRlY2xhcmF0aW9uLCBzbyBub25lIG9mIHRoZSAnREVDTF8nIG1hY3JvcwpzaG91bGQgYmUgdXNlZCBvbiBhbiAnT1ZFUkxPQUQnLiAgQW4gJ09WRVJMT0FEJyBub2RlIGlzIHNpbWlsYXIgdG8gYQonVFJFRV9MSVNUJy4gIFVzZSAnT1ZMX0NVUlJFTlQnIHRvIGdldCB0aGUgZnVuY3Rpb24gYXNzb2NpYXRlZCB3aXRoIGFuCidPVkVSTE9BRCcgbm9kZTsgdXNlICdPVkxfTkVYVCcgdG8gZ2V0IHRoZSBuZXh0ICdPVkVSTE9BRCcgbm9kZSBpbiB0aGUKbGlzdCBvZiBvdmVybG9hZGVkIGZ1bmN0aW9ucy4gIFRoZSBtYWNyb3MgJ09WTF9DVVJSRU5UJyBhbmQgJ09WTF9ORVhUJwphcmUgYWN0dWFsbHkgcG9seW1vcnBoaWM7IHlvdSBjYW4gdXNlIHRoZW0gdG8gd29yayB3aXRoICdGVU5DVElPTl9ERUNMJwpub2RlcyBhcyB3ZWxsIGFzIHdpdGggb3ZlcmxvYWRzLiAgSW4gdGhlIGNhc2Ugb2YgYSAnRlVOQ1RJT05fREVDTCcsCidPVkxfQ1VSUkVOVCcgd2lsbCBhbHdheXMgcmV0dXJuIHRoZSBmdW5jdGlvbiBpdHNlbGYsIGFuZCAnT1ZMX05FWFQnCndpbGwgYWx3YXlzIGJlICdOVUxMX1RSRUUnLgoKIFRvIGRldGVybWluZSB0aGUgc2NvcGUgb2YgYSBmdW5jdGlvbiwgeW91IGNhbiB1c2UgdGhlICdERUNMX0NPTlRFWFQnCm1hY3JvLiAgVGhpcyBtYWNybyB3aWxsIHJldHVybiB0aGUgY2xhc3MgKGVpdGhlciBhICdSRUNPUkRfVFlQRScgb3IgYQonVU5JT05fVFlQRScpIG9yIG5hbWVzcGFjZSAoYSAnTkFNRVNQQUNFX0RFQ0wnKSBvZiB3aGljaCB0aGUgZnVuY3Rpb24gaXMKYSBtZW1iZXIuICBGb3IgYSB2aXJ0dWFsIGZ1bmN0aW9uLCB0aGlzIG1hY3JvIHJldHVybnMgdGhlIGNsYXNzIGluIHdoaWNoCnRoZSBmdW5jdGlvbiB3YXMgYWN0dWFsbHkgZGVmaW5lZCwgbm90IHRoZSBiYXNlIGNsYXNzIGluIHdoaWNoIHRoZQp2aXJ0dWFsIGRlY2xhcmF0aW9uIG9jY3VycmVkLgoKIElmIGEgZnJpZW5kIGZ1bmN0aW9uIGlzIGRlZmluZWQgaW4gYSBjbGFzcyBzY29wZSwgdGhlCidERUNMX0ZSSUVORF9DT05URVhUJyBtYWNybyBjYW4gYmUgdXNlZCB0byBkZXRlcm1pbmUgdGhlIGNsYXNzIGluIHdoaWNoCml0IHdhcyBkZWZpbmVkLiAgRm9yIGV4YW1wbGUsIGluCiAgICAgY2xhc3MgQyB7IGZyaWVuZCB2b2lkIGYoKSB7fSB9Owp0aGUgJ0RFQ0xfQ09OVEVYVCcgZm9yICdmJyB3aWxsIGJlIHRoZSAnZ2xvYmFsX25hbWVzcGFjZScsIGJ1dCB0aGUKJ0RFQ0xfRlJJRU5EX0NPTlRFWFQnIHdpbGwgYmUgdGhlICdSRUNPUkRfVFlQRScgZm9yICdDJy4KCiBJbiBDLCB0aGUgJ0RFQ0xfQ09OVEVYVCcgZm9yIGEgZnVuY3Rpb24gbWF5YmUgYW5vdGhlciBmdW5jdGlvbi4gIFRoaXMKcmVwcmVzZW50YXRpb24gaW5kaWNhdGVzIHRoYXQgdGhlIEdOVSBuZXN0ZWQgZnVuY3Rpb24gZXh0ZW5zaW9uIGlzIGluCnVzZS4gIEZvciBkZXRhaWxzIG9uIHRoZSBzZW1hbnRpY3Mgb2YgbmVzdGVkIGZ1bmN0aW9ucywgc2VlIHRoZSBHQ0MKTWFudWFsLiAgVGhlIG5lc3RlZCBmdW5jdGlvbiBjYW4gcmVmZXIgdG8gbG9jYWwgdmFyaWFibGVzIGluIGl0cwpjb250YWluaW5nIGZ1bmN0aW9uLiAgU3VjaCByZWZlcmVuY2VzIGFyZSBub3QgZXhwbGljaXRseSBtYXJrZWQgaW4gdGhlCnRyZWUgc3RydWN0dXJlOyBiYWNrIGVuZHMgbXVzdCBsb29rIGF0IHRoZSAnREVDTF9DT05URVhUJyBmb3IgdGhlCnJlZmVyZW5jZWQgJ1ZBUl9ERUNMJy4gIElmIHRoZSAnREVDTF9DT05URVhUJyBmb3IgdGhlIHJlZmVyZW5jZWQKJ1ZBUl9ERUNMJyBpcyBub3QgdGhlIHNhbWUgYXMgdGhlIGZ1bmN0aW9uIGN1cnJlbnRseSBiZWluZyBwcm9jZXNzZWQsCmFuZCBuZWl0aGVyICdERUNMX0VYVEVSTkFMJyBub3IgJ0RFQ0xfU1RBVElDJyBob2xkLCB0aGVuIHRoZSByZWZlcmVuY2UKaXMgdG8gYSBsb2NhbCB2YXJpYWJsZSBpbiBhIGNvbnRhaW5pbmcgZnVuY3Rpb24sIGFuZCB0aGUgYmFjayBlbmQgbXVzdAp0YWtlIGFwcHJvcHJpYXRlIGFjdGlvbi4KCiogTWVudToKCiogRnVuY3Rpb24gQmFzaWNzOjogICAgIEZ1bmN0aW9uIG5hbWVzLCBsaW5rYWdlLCBhbmQgc28gZm9ydGguCiogRnVuY3Rpb24gQm9kaWVzOjogICAgIFRoZSBzdGF0ZW1lbnRzIHRoYXQgbWFrZSB1cCBhIGZ1bmN0aW9uIGJvZHkuCgofCkZpbGU6IGdjY2ludC5pbmZvLCAgTm9kZTogRnVuY3Rpb24gQmFzaWNzLCAgTmV4dDogRnVuY3Rpb24gQm9kaWVzLCAgVXA6IEZ1bmN0aW9ucwoKOS42LjEgRnVuY3Rpb24gQmFzaWNzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKVGhlIGZvbGxvd2luZyBtYWNyb3MgYW5kIGZ1bmN0aW9ucyBjYW4gYmUgdXNlZCBvbiBhICdGVU5DVElPTl9ERUNMJzoKJ0RFQ0xfTUFJTl9QJwogICAgIFRoaXMgcHJlZGljYXRlIGhvbGRzIGZvciBhIGZ1bmN0aW9uIHRoYXQgaXMgdGhlIHByb2dyYW0gZW50cnkgcG9pbnQKICAgICAnOjpjb2RlJy4KCidERUNMX05BTUUnCiAgICAgVGhpcyBtYWNybyByZXR1cm5zIHRoZSB1bnF1YWxpZmllZCBuYW1lIG9mIHRoZSBmdW5jdGlvbiwgYXMgYW4KICAgICAnSURFTlRJRklFUl9OT0RFJy4gIEZvciBhbiBpbnN0YW50aWF0aW9uIG9mIGEgZnVuY3Rpb24gdGVtcGxhdGUsCiAgICAgdGhlICdERUNMX05BTUUnIGlzIHRoZSB1bnF1YWxpZmllZCBuYW1lIG9mIHRoZSB0ZW1wbGF0ZSwgbm90CiAgICAgc29tZXRoaW5nIGxpa2UgJ2Y8aW50PicuICBUaGUgdmFsdWUgb2YgJ0RFQ0xfTkFNRScgaXMgdW5kZWZpbmVkCiAgICAgd2hlbiB1c2VkIG9uIGEgY29uc3RydWN0b3IsIGRlc3RydWN0b3IsIG92ZXJsb2FkZWQgb3BlcmF0b3IsIG9yCiAgICAgdHlwZS1jb252ZXJzaW9uIG9wZXJhdG9yLCBvciBhbnkgZnVuY3Rpb24gdGhhdCBpcyBpbXBsaWNpdGx5CiAgICAgZ2VuZXJhdGVkIGJ5IHRoZSBjb21waWxlci4gIFNlZSBiZWxvdyBmb3IgbWFjcm9zIHRoYXQgY2FuIGJlIHVzZWQKICAgICB0byBkaXN0aW5ndWlzaCB0aGVzZSBjYXNlcy4KCidERUNMX0FTU0VNQkxFUl9OQU1FJwogICAgIFRoaXMgbWFjcm8gcmV0dXJucyB0aGUgbWFuZ2xlZCBuYW1lIG9mIHRoZSBmdW5jdGlvbiwgYWxzbyBhbgogICAgICdJREVOVElGSUVSX05PREUnLiAgVGhpcyBuYW1lIGRvZXMgbm90IGNvbnRhaW4gbGVhZGluZyB1bmRlcnNjb3JlcwogICAgIG9uIHN5c3RlbXMgdGhhdCBwcmVmaXggYWxsIGlkZW50aWZpZXJzIHdpdGggdW5kZXJzY29yZXMuICBUaGUKICAgICBtYW5nbGVkIG5hbWUgaXMgY29tcHV0ZWQgaW4gdGhlIHNhbWUgd2F5IG9uIGFsbCBwbGF0Zm9ybXM7IGlmCiAgICAgc3BlY2lhbCBwcm9jZXNzaW5nIGlzIHJlcXVpcmVkIHRvIGRlYWwgd2l0aCB0aGUgb2JqZWN0IGZpbGUgZm9ybWF0CiAgICAgdXNlZCBvbiBhIHBhcnRpY3VsYXIgcGxhdGZvcm0sIGl0IGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgYmFjawogICAgIGVuZCB0byBwZXJmb3JtIHRob3NlIG1vZGlmaWNhdGlvbnMuICAoT2YgY291cnNlLCB0aGUgYmFjayBlbmQKICAgICBzaG91bGQgbm90IG1vZGlmeSAnREVDTF9BU1NFTUJMRVJfTkFNRScgaXRzZWxmLikKCiAgICAgVXNpbmcgJ0RFQ0xfQVNTRU1CTEVSX05BTUUnIHdpbGwgY2F1c2UgYWRkaXRpb25hbCBtZW1vcnkgdG8gYmUKICAgICBhbGxvY2F0ZWQgKGZvciB0aGUgbWFuZ2xlZCBuYW1lIG9mIHRoZSBlbnRpdHkpIHNvIGl0IHNob3VsZCBiZSB1c2VkCiAgICAgb25seSB3aGVuIGVtaXR0aW5nIGFzc2VtYmx5IGNvZGUuICBJdCBzaG91bGQgbm90IGJlIHVzZWQgd2l0aGluIHRoZQogICAgIG9wdGltaXplcnMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IHR3byBkZWNsYXJhdGlvbnMgYXJlIHRoZQogICAgIHNhbWUsIGV2ZW4gdGhvdWdoIHNvbWUgb2YgdGhlIGV4aXN0aW5nIG9wdGltaXplcnMgZG8gdXNlIGl0IGluIHRoYXQKICAgICB3YXkuICBUaGVzZSB1c2VzIHdpbGwgYmUgcmVtb3ZlZCBvdmVyIHRpbWUuCgonREVDTF9FWFRFUk5BTCcKICAgICBUaGlzIHByZWRpY2F0ZSBob2xkcyBpZiB0aGUgZnVuY3Rpb24gaXMgdW5kZWZpbmVkLgoKJ1RSRUVfUFVCTElDJwogICAgIFRoaXMgcHJlZGljYXRlIGhvbGRzIGlmIHRoZSBmdW5jdGlvbiBoYXMgZXh0ZXJuYWwgbGlua2FnZS4KCidERUNMX0xPQ0FMX0ZVTkNUSU9OX1AnCiAgICAgVGhpcyBwcmVkaWNhdGUgaG9sZHMgaWYgdGhlIGZ1bmN0aW9uIHdhcyBkZWNsYXJlZCBhdCBibG9jayBzY29wZSwKICAgICBldmVuIHRob3VnaCBpdCBoYXMgYSBnbG9iYWwgc2NvcGUuCgonREVDTF9BTlRJQ0lQQVRFRCcKICAgICBUaGlzIHByZWRpY2F0ZSBob2xkcyBpZiB0aGUgZnVuY3Rpb24gaXMgYSBidWlsdC1pbiBmdW5jdGlvbiBidXQgaXRzCiAgICAgcHJvdG90eXBlIGlzIG5vdCB5ZXQgZXhwbGljaXRseSBkZWNsYXJlZC4KCidERUNMX0VYVEVSTl9DX0ZVTkNUSU9OX1AnCiAgICAgVGhpcyBwcmVkaWNhdGUgaG9sZHMgaWYgdGhlIGZ1bmN0aW9uIGlzIGRlY2xhcmVkIGFzIGFuICcnZXh0ZXJuCiAgICAgIkMiJycgZnVuY3Rpb24uCgonREVDTF9MSU5LT05DRV9QJwogICAgIFRoaXMgbWFjcm8gaG9sZHMgaWYgbXVsdGlwbGUgY29waWVzIG9mIHRoaXMgZnVuY3Rpb24gbWF5IGJlIGVtaXR0ZWQKICAgICBpbiB2YXJpb3VzIHRyYW5zbGF0aW9uIHVuaXRzLiAgSXQgaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZQogICAgIGxpbmtlciB0byBtZXJnZSB0aGUgdmFyaW91cyBjb3BpZXMuICBUZW1wbGF0ZSBpbnN0YW50aWF0aW9ucyBhcmUKICAgICB0aGUgbW9zdCBjb21tb24gZXhhbXBsZSBvZiBmdW5jdGlvbnMgZm9yIHdoaWNoICdERUNMX0xJTktPTkNFX1AnCiAgICAgaG9sZHM7IEcrKyBpbnN0YW50aWF0ZXMgbmVlZGVkIHRlbXBsYXRlcyBpbiBhbGwgdHJhbnNsYXRpb24gdW5pdHMKICAgICB3aGljaCByZXF1aXJlIHRoZW0sIGFuZCB0aGVuIHJlbGllcyBvbiB0aGUgbGlua2VyIHRvIHJlbW92ZQogICAgIGR1cGxpY2F0ZSBpbnN0YW50aWF0aW9ucy4KCiAgICAgRklYTUU6IFRoaXMgbWFjcm8gaXMgbm90IHlldCBpbXBsZW1lbnRlZC4KCidERUNMX0ZVTkNUSU9OX01FTUJFUl9QJwogICAgIFRoaXMgbWFjcm8gaG9sZHMgaWYgdGhlIGZ1bmN0aW9uIGlzIGEgbWVtYmVyIG9mIGEgY2xhc3MsIHJhdGhlcgogICAgIHRoYW4gYSBtZW1iZXIgb2YgYSBuYW1lc3BhY2UuCgonREVDTF9TVEFUSUNfRlVOQ1RJT05fUCcKICAgICBUaGlzIHByZWRpY2F0ZSBob2xkcyBpZiB0aGUgZnVuY3Rpb24gYSBzdGF0aWMgbWVtYmVyIGZ1bmN0aW9uLgoKJ0RFQ0xfTk9OU1RBVElDX01FTUJFUl9GVU5DVElPTl9QJwogICAgIFRoaXMgbWFjcm8gaG9sZHMgZm9yIGEgbm9uLXN0YXRpYyBtZW1iZXIgZnVuY3Rpb24uCgonREVDTF9DT05TVF9NRU1GVU5DX1AnCiAgICAgVGhpcyBwcmVkaWNhdGUgaG9sZHMgZm9yIGEgJ2NvbnN0Jy1tZW1iZXIgZnVuY3Rpb24uCgonREVDTF9WT0xBVElMRV9NRU1GVU5DX1AnCiAgICAgVGhpcyBwcmVkaWNhdGUgaG9sZHMgZm9yIGEgJ3ZvbGF0aWxlJy1tZW1iZXIgZnVuY3Rpb24uCgonREVDTF9DT05TVFJVQ1RPUl9QJwogICAgIFRoaXMgbWFjcm8gaG9sZHMgaWYgdGhlIGZ1bmN0aW9uIGlzIGEgY29uc3RydWN0b3IuCgonREVDTF9OT05DT05WRVJUSU5HX1AnCiAgICAgVGhpcyBwcmVkaWNhdGUgaG9sZHMgaWYgdGhlIGNvbnN0cnVjdG9yIGlzIGEgbm9uLWNvbnZlcnRpbmcKICAgICBjb25zdHJ1Y3Rvci4KCidERUNMX0NPTVBMRVRFX0NPTlNUUlVDVE9SX1AnCiAgICAgVGhpcyBwcmVkaWNhdGUgaG9sZHMgZm9yIGEgZnVuY3Rpb24gd2hpY2ggaXMgYSBjb25zdHJ1Y3RvciBmb3IgYW4KICAgICBvYmplY3Qgb2YgYSBjb21wbGV0ZSB0eXBlLgoKJ0RFQ0xfQkFTRV9DT05TVFJVQ1RPUl9QJwogICAgIFRoaXMgcHJlZGljYXRlIGhvbGRzIGZvciBhIGZ1bmN0aW9uIHdoaWNoIGlzIGEgY29uc3RydWN0b3IgZm9yIGEKICAgICBiYXNlIGNsYXNzIHN1Yi1vYmplY3QuCgonREVDTF9DT1BZX0NPTlNUUlVDVE9SX1AnCiAgICAgVGhpcyBwcmVkaWNhdGUgaG9sZHMgZm9yIGEgZnVuY3Rpb24gd2hpY2ggaXMgYSBjb3B5LWNvbnN0cnVjdG9yLgoKJ0RFQ0xfREVTVFJVQ1RPUl9QJwogICAgIFRoaXMgbWFjcm8gaG9sZHMgaWYgdGhlIGZ1bmN0aW9uIGlzIGEgZGVzdHJ1Y3Rvci4KCidERUNMX0NPTVBMRVRFX0RFU1RSVUNUT1JfUCcKICAgICBUaGlzIHByZWRpY2F0ZSBob2xkcyBpZiB0aGUgZnVuY3Rpb24gaXMgdGhlIGRlc3RydWN0b3IgZm9yIGFuCiAgICAgb2JqZWN0IGEgY29tcGxldGUgdHlwZS4KCidERUNMX09WRVJMT0FERURfT1BFUkFUT1JfUCcKICAgICBUaGlzIG1hY3JvIGhvbGRzIGlmIHRoZSBmdW5jdGlvbiBpcyBhbiBvdmVybG9hZGVkIG9wZXJhdG9yLgoKJ0RFQ0xfQ09OVl9GTl9QJwogICAgIFRoaXMgbWFjcm8gaG9sZHMgaWYgdGhlIGZ1bmN0aW9uIGlzIGEgdHlwZS1jb252ZXJzaW9uIG9wZXJhdG9yLgoKJ0RFQ0xfR0xPQkFMX0NUT1JfUCcKICAgICBUaGlzIHByZWRpY2F0ZSBob2xkcyBpZiB0aGUgZnVuY3Rpb24gaXMgYSBmaWxlLXNjb3BlIGluaXRpYWxpemF0aW9uCiAgICAgZnVuY3Rpb24uCgonREVDTF9HTE9CQUxfRFRPUl9QJwogICAgIFRoaXMgcHJlZGljYXRlIGhvbGRzIGlmIHRoZSBmdW5jdGlvbiBpcyBhIGZpbGUtc2NvcGUgZmluYWxpemF0aW9uCiAgICAgZnVuY3Rpb24uCgonREVDTF9USFVOS19QJwogICAgIFRoaXMgcHJlZGljYXRlIGhvbGRzIGlmIHRoZSBmdW5jdGlvbiBpcyBhIHRodW5rLgoKICAgICBUaGVzZSBmdW5jdGlvbnMgcmVwcmVzZW50IHN0dWIgY29kZSB0aGF0IGFkanVzdHMgdGhlICd0aGlzJyBwb2ludGVyCiAgICAgYW5kIHRoZW4ganVtcHMgdG8gYW5vdGhlciBmdW5jdGlvbi4gIFdoZW4gdGhlIGp1bXBlZC10byBmdW5jdGlvbgogICAgIHJldHVybnMsIGNvbnRyb2wgaXMgdHJhbnNmZXJyZWQgZGlyZWN0bHkgdG8gdGhlIGNhbGxlciwgd2l0aG91dAogICAgIHJldHVybmluZyB0byB0aGUgdGh1bmsuICBUaGUgZmlyc3QgcGFyYW1ldGVyIHRvIHRoZSB0aHVuayBpcyBhbHdheXMKICAgICB0aGUgJ3RoaXMnIHBvaW50ZXI7IHRoZSB0aHVuayBzaG91bGQgYWRkICdUSFVOS19ERUxUQScgdG8gdGhpcwogICAgIHZhbHVlLiAgKFRoZSAnVEhVTktfREVMVEEnIGlzIGFuICdpbnQnLCBub3QgYW4gJ0lOVEVHRVJfQ1NUJy4pCgogICAgIFRoZW4sIGlmICdUSFVOS19WQ0FMTF9PRkZTRVQnIChhbiAnSU5URUdFUl9DU1QnKSBpcyBub256ZXJvIHRoZQogICAgIGFkanVzdGVkICd0aGlzJyBwb2ludGVyIG11c3QgYmUgYWRqdXN0ZWQgYWdhaW4uICBUaGUgY29tcGxldGUKICAgICBjYWxjdWxhdGlvbiBpcyBnaXZlbiBieSB0aGUgZm9sbG93aW5nIHBzZXVkby1jb2RlOgoKICAgICAgICAgIHRoaXMgKz0gVEhVTktfREVMVEEKICAgICAgICAgIGlmIChUSFVOS19WQ0FMTF9PRkZTRVQpCiAgICAgICAgICAgIHRoaXMgKz0gKCooKHB0cmRpZmZfdCAqKikgdGhpcykpW1RIVU5LX1ZDQUxMX09GRlNFVF0KCiAgICAgRmluYWxseSwgdGhlIHRodW5rIHNob3VsZCBqdW1wIHRvIHRoZSBsb2NhdGlvbiBnaXZlbiBieQogICAgICdERUNMX0lOSVRJQUwnOyB0aGlzIHdpbGwgYWx3YXlzIGJlIGFuIGV4cHJlc3Npb24gZm9yIHRoZSBhZGRyZXNzCiAgICAgb2YgYSBmdW5jdGlvbi4KCidERUNMX05PTl9USFVOS19GVU5DVElPTl9QJwogICAgIFRoaXMgcHJlZGljYXRlIGhvbGRzIGlmIHRoZSBmdW5jdGlvbiBpcyBfbm90XyBhIHRodW5rIGZ1bmN0aW9uLgoKJ0dMT0JBTF9JTklUX1BSSU9SSVRZJwogICAgIElmIGVpdGhlciAnREVDTF9HTE9CQUxfQ1RPUl9QJyBvciAnREVDTF9HTE9CQUxfRFRPUl9QJyBob2xkcywgdGhlbgogICAgIHRoaXMgZ2l2ZXMgdGhlIGluaXRpYWxpemF0aW9uIHByaW9yaXR5IGZvciB0aGUgZnVuY3Rpb24uICBUaGUKICAgICBsaW5rZXIgd2lsbCBhcnJhbmdlIHRoYXQgYWxsIGZ1bmN0aW9ucyBmb3Igd2hpY2gKICAgICAnREVDTF9HTE9CQUxfQ1RPUl9QJyBob2xkcyBhcmUgcnVuIGluIGluY3JlYXNpbmcgb3JkZXIgb2YgcHJpb3JpdHkKICAgICBiZWZvcmUgJ21haW4nIGlzIGNhbGxlZC4gIFdoZW4gdGhlIHByb2dyYW0gZXhpdHMsIGFsbCBmdW5jdGlvbnMgZm9yCiAgICAgd2hpY2ggJ0RFQ0xfR0xPQkFMX0RUT1JfUCcgaG9sZHMgYXJlIHJ1biBpbiB0aGUgcmV2ZXJzZSBvcmRlci4KCidERUNMX0FSVElGSUNJQUwnCiAgICAgVGhpcyBtYWNybyBob2xkcyBpZiB0aGUgZnVuY3Rpb24gd2FzIGltcGxpY2l0bHkgZ2VuZXJhdGVkIGJ5IHRoZQogICAgIGNvbXBpbGVyLCByYXRoZXIgdGhhbiBleHBsaWNpdGx5IGRlY2xhcmVkLiAgSW4gYWRkaXRpb24gdG8KICAgICBpbXBsaWNpdGx5IGdlbmVyYXRlZCBjbGFzcyBtZW1iZXIgZnVuY3Rpb25zLCB0aGlzIG1hY3JvIGhvbGRzIGZvcgogICAgIHRoZSBzcGVjaWFsIGZ1bmN0aW9ucyBjcmVhdGVkIHRvIGltcGxlbWVudCBzdGF0aWMgaW5pdGlhbGl6YXRpb24KICAgICBhbmQgZGVzdHJ1Y3Rpb24sIHRvIGNvbXB1dGUgcnVuLXRpbWUgdHlwZSBpbmZvcm1hdGlvbiwgYW5kIHNvCiAgICAgZm9ydGguCgonREVDTF9BUkdVTUVOVFMnCiAgICAgVGhpcyBtYWNybyByZXR1cm5zIHRoZSAnUEFSTV9ERUNMJyBmb3IgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoZQogICAgIGZ1bmN0aW9uLiAgU3Vic2VxdWVudCAnUEFSTV9ERUNMJyBub2RlcyBjYW4gYmUgb2J0YWluZWQgYnkKICAgICBmb2xsb3dpbmcgdGhlICdUUkVFX0NIQUlOJyBsaW5rcy4KCidERUNMX1JFU1VMVCcKICAgICBUaGlzIG1hY3JvIHJldHVybnMgdGhlICdSRVNVTFRfREVDTCcgZm9yIHRoZSBmdW5jdGlvbi4KCidUUkVFX1RZUEUnCiAgICAgVGhpcyBtYWNybyByZXR1cm5zIHRoZSAnRlVOQ1RJT05fVFlQRScgb3IgJ01FVEhPRF9UWVBFJyBmb3IgdGhlCiAgICAgZnVuY3Rpb24uCgonVFlQRV9SQUlTRVNfRVhDRVBUSU9OUycKICAgICBUaGlzIG1hY3JvIHJldHVybnMgdGhlIGxpc3Qgb2YgZXhjZXB0aW9ucyB0aGF0IGEgKG1lbWJlci0pZnVuY3Rpb24KICAgICBjYW4gcmFpc2UuICBUaGUgcmV0dXJuZWQgbGlzdCwgaWYgbm9uICdOVUxMJywgaXMgY29tcHJpc2VkIG9mIG5vZGVzCiAgICAgd2hvc2UgJ1RSRUVfVkFMVUUnIHJlcHJlc2VudHMgYSB0eXBlLgoKJ1RZUEVfTk9USFJPV19QJwogICAgIFRoaXMgcHJlZGljYXRlIGhvbGRzIHdoZW4gdGhlIGV4Y2VwdGlvbi1zcGVjaWZpY2F0aW9uIG9mIGl0cwogICAgIGFyZ3VtZW50cyBpZiBvZiB0aGUgZm9ybSAnJygpJycuCgonREVDTF9BUlJBWV9ERUxFVEVfT1BFUkFUT1JfUCcKICAgICBUaGlzIHByZWRpY2F0ZSBob2xkcyBpZiB0aGUgZnVuY3Rpb24gYW4gb3ZlcmxvYWRlZCAnb3BlcmF0b3IKICAgICBkZWxldGVbXScuCgofCkZpbGU6IGdjY2ludC5pbmZvLCAgTm9kZTogRnVuY3Rpb24gQm9kaWVzLCAgUHJldjogRnVuY3Rpb24gQmFzaWNzLCAgVXA6IEZ1bmN0aW9ucwoKOS42LjIgRnVuY3Rpb24gQm9kaWVzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKQSBmdW5jdGlvbiB0aGF0IGhhcyBhIGRlZmluaXRpb24gaW4gdGhlIGN1cnJlbnQgdHJhbnNsYXRpb24gdW5pdCB3aWxsCmhhdmUgYSBub24tJ05VTEwnICdERUNMX0lOSVRJQUwnLiAgSG93ZXZlciwgYmFjayBlbmRzIHNob3VsZCBub3QgbWFrZQp1c2Ugb2YgdGhlIHBhcnRpY3VsYXIgdmFsdWUgZ2l2ZW4gYnkgJ0RFQ0xfSU5JVElBTCcuCgogVGhlICdERUNMX1NBVkVEX1RSRUUnIG1hY3JvIHdpbGwgZ2l2ZSB0aGUgY29tcGxldGUgYm9keSBvZiB0aGUKZnVuY3Rpb24uCgo5LjYuMi4xIFN0YXRlbWVudHMKLi4uLi4uLi4uLi4uLi4uLi4uCgpUaGVyZSBhcmUgdHJlZSBub2RlcyBjb3JyZXNwb25kaW5nIHRvIGFsbCBvZiB0aGUgc291cmNlLWxldmVsIHN0YXRlbWVudApjb25zdHJ1Y3RzLCB1c2VkIHdpdGhpbiB0aGUgQyBhbmQgQysrIGZyb250ZW5kcy4gIFRoZXNlIGFyZSBlbnVtZXJhdGVkCmhlcmUsIHRvZ2V0aGVyIHdpdGggYSBsaXN0IG9mIHRoZSB2YXJpb3VzIG1hY3JvcyB0aGF0IGNhbiBiZSB1c2VkIHRvCm9idGFpbiBpbmZvcm1hdGlvbiBhYm91dCB0aGVtLiAgVGhlcmUgYXJlIGEgZmV3IG1hY3JvcyB0aGF0IGNhbiBiZSB1c2VkCndpdGggYWxsIHN0YXRlbWVudHM6CgonU1RNVF9JU19GVUxMX0VYUFJfUCcKICAgICBJbiBDKyssIHN0YXRlbWVudHMgbm9ybWFsbHkgY29uc3RpdHV0ZSAiZnVsbCBleHByZXNzaW9ucyI7CiAgICAgdGVtcG9yYXJpZXMgY3JlYXRlZCBkdXJpbmcgYSBzdGF0ZW1lbnQgYXJlIGRlc3Ryb3llZCB3aGVuIHRoZQogICAgIHN0YXRlbWVudCBpcyBjb21wbGV0ZS4gIEhvd2V2ZXIsIEcrKyBzb21ldGltZXMgcmVwcmVzZW50cwogICAgIGV4cHJlc3Npb25zIGJ5IHN0YXRlbWVudHM7IHRoZXNlIHN0YXRlbWVudHMgd2lsbCBub3QgaGF2ZQogICAgICdTVE1UX0lTX0ZVTExfRVhQUl9QJyBzZXQuICBUZW1wb3JhcmllcyBjcmVhdGVkIGR1cmluZyBzdWNoCiAgICAgc3RhdGVtZW50cyBzaG91bGQgYmUgZGVzdHJveWVkIHdoZW4gdGhlIGlubmVybW9zdCBlbmNsb3NpbmcKICAgICBzdGF0ZW1lbnQgd2l0aCAnU1RNVF9JU19GVUxMX0VYUFJfUCcgc2V0IGlzIGV4aXRlZC4KCiBIZXJlIGlzIHRoZSBsaXN0IG9mIHRoZSB2YXJpb3VzIHN0YXRlbWVudCBub2RlcywgYW5kIHRoZSBtYWNyb3MgdXNlZCB0bwphY2Nlc3MgdGhlbS4gIFRoaXMgZG9jdW1lbnRhdGlvbiBkZXNjcmliZXMgdGhlIHVzZSBvZiB0aGVzZSBub2RlcyBpbgpub24tdGVtcGxhdGUgZnVuY3Rpb25zIChpbmNsdWRpbmcgaW5zdGFudGlhdGlvbnMgb2YgdGVtcGxhdGUgZnVuY3Rpb25zKS4KSW4gdGVtcGxhdGUgZnVuY3Rpb25zLCB0aGUgc2FtZSBub2RlcyBhcmUgdXNlZCwgYnV0IHNvbWV0aW1lcyBpbgpzbGlnaHRseSBkaWZmZXJlbnQgd2F5cy4KCiBNYW55IG9mIHRoZSBzdGF0ZW1lbnRzIGhhdmUgc3Vic3RhdGVtZW50cy4gIEZvciBleGFtcGxlLCBhICd3aGlsZScgbG9vcAp3aWxsIGhhdmUgYSBib2R5LCB3aGljaCBpcyBpdHNlbGYgYSBzdGF0ZW1lbnQuICBJZiB0aGUgc3Vic3RhdGVtZW50IGlzCidOVUxMX1RSRUUnLCBpdCBpcyBjb25zaWRlcmVkIGVxdWl2YWxlbnQgdG8gYSBzdGF0ZW1lbnQgY29uc2lzdGluZyBvZiBhCnNpbmdsZSAnOycsIGkuZS4sIGFuIGV4cHJlc3Npb24gc3RhdGVtZW50IGluIHdoaWNoIHRoZSBleHByZXNzaW9uIGhhcwpiZWVuIG9taXR0ZWQuICBBIHN1YnN0YXRlbWVudCBtYXkgaW4gZmFjdCBiZSBhIGxpc3Qgb2Ygc3RhdGVtZW50cywKY29ubmVjdGVkIHZpYSB0aGVpciAnVFJFRV9DSEFJTidzLiAgU28sIHlvdSBzaG91bGQgYWx3YXlzIHByb2Nlc3MgdGhlCnN0YXRlbWVudCB0cmVlIGJ5IGxvb3Bpbmcgb3ZlciBzdWJzdGF0ZW1lbnRzLCBsaWtlIHRoaXM6CiAgICAgdm9pZCBwcm9jZXNzX3N0bXQgKHN0bXQpCiAgICAgICAgICB0cmVlIHN0bXQ7CiAgICAgewogICAgICAgd2hpbGUgKHN0bXQpCiAgICAgICAgIHsKICAgICAgICAgICBzd2l0Y2ggKFRSRUVfQ09ERSAoc3RtdCkpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICBjYXNlIElGX1NUTVQ6CiAgICAgICAgICAgICAgIHByb2Nlc3Nfc3RtdCAoVEhFTl9DTEFVU0UgKHN0bXQpKTsKICAgICAgICAgICAgICAgLyogTW9yZSBwcm9jZXNzaW5nIGhlcmUuICAqLwogICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAuLi4KICAgICAgICAgICAgIH0KCiAgICAgICAgICAgc3RtdCA9IFRSRUVfQ0hBSU4gKHN0bXQpOwogICAgICAgICB9CiAgICAgfQogSW4gb3RoZXIgd29yZHMsIHdoaWxlIHRoZSAndGhlbicgY2xhdXNlIG9mIGFuICdpZicgc3RhdGVtZW50IGluIEMrKyBjYW4KYmUgb25seSBvbmUgc3RhdGVtZW50IChhbHRob3VnaCB0aGF0IG9uZSBzdGF0ZW1lbnQgbWF5IGJlIGEgY29tcG91bmQKc3RhdGVtZW50KSwgdGhlIGludGVybWVkaWF0ZSByZXByZXNlbnRhdGlvbiB3aWxsIHNvbWV0aW1lcyB1c2Ugc2V2ZXJhbApzdGF0ZW1lbnRzIGNoYWluZWQgdG9nZXRoZXIuCgonQVNNX0VYUFInCgogICAgIFVzZWQgdG8gcmVwcmVzZW50IGFuIGlubGluZSBhc3NlbWJseSBzdGF0ZW1lbnQuICBGb3IgYW4gaW5saW5lCiAgICAgYXNzZW1ibHkgc3RhdGVtZW50IGxpa2U6CiAgICAgICAgICBhc20gKCJtb3YgeCwgeSIpOwogICAgIFRoZSAnQVNNX1NUUklORycgbWFjcm8gd2lsbCByZXR1cm4gYSAnU1RSSU5HX0NTVCcgbm9kZSBmb3IgJyJtb3YgeCwKICAgICB5IicuICBJZiB0aGUgb3JpZ2luYWwgc3RhdGVtZW50IG1hZGUgdXNlIG9mIHRoZSBleHRlbmRlZC1hc3NlbWJseQogICAgIHN5bnRheCwgdGhlbiAnQVNNX09VVFBVVFMnLCAnQVNNX0lOUFVUUycsIGFuZCAnQVNNX0NMT0JCRVJTJyB3aWxsCiAgICAgYmUgdGhlIG91dHB1dHMsIGlucHV0cywgYW5kIGNsb2JiZXJzIGZvciB0aGUgc3RhdGVtZW50LCByZXByZXNlbnRlZAogICAgIGFzICdTVFJJTkdfQ1NUJyBub2Rlcy4gIFRoZSBleHRlbmRlZC1hc3NlbWJseSBzeW50YXggbG9va3MgbGlrZToKICAgICAgICAgIGFzbSAoImZzaW54ICUxLCUwIiA6ICI9ZiIgKHJlc3VsdCkgOiAiZiIgKGFuZ2xlKSk7CiAgICAgVGhlIGZpcnN0IHN0cmluZyBpcyB0aGUgJ0FTTV9TVFJJTkcnLCBjb250YWluaW5nIHRoZSBpbnN0cnVjdGlvbgogICAgIHRlbXBsYXRlLiAgVGhlIG5leHQgdHdvIHN0cmluZ3MgYXJlIHRoZSBvdXRwdXQgYW5kIGlucHV0cywKICAgICByZXNwZWN0aXZlbHk7IHRoaXMgc3RhdGVtZW50IGhhcyBubyBjbG9iYmVycy4gIEFzIHRoaXMgZXhhbXBsZQogICAgIGluZGljYXRlcywgInBsYWluIiBhc3NlbWJseSBzdGF0ZW1lbnRzIGFyZSBtZXJlbHkgYSBzcGVjaWFsIGNhc2Ugb2YKICAgICBleHRlbmRlZCBhc3NlbWJseSBzdGF0ZW1lbnRzOyB0aGV5IGhhdmUgbm8gY3YtcXVhbGlmaWVycywgb3V0cHV0cywKICAgICBpbnB1dHMsIG9yIGNsb2JiZXJzLiAgQWxsIG9mIHRoZSBzdHJpbmdzIHdpbGwgYmUgJ05VTCctdGVybWluYXRlZCwKICAgICBhbmQgd2lsbCBjb250YWluIG5vIGVtYmVkZGVkICdOVUwnLWNoYXJhY3RlcnMuCgogICAgIElmIHRoZSBhc3NlbWJseSBzdGF0ZW1lbnQgaXMgZGVjbGFyZWQgJ3ZvbGF0aWxlJywgb3IgaWYgdGhlCiAgICAgc3RhdGVtZW50IHdhcyBub3QgYW4gZXh0ZW5kZWQgYXNzZW1ibHkgc3RhdGVtZW50LCBhbmQgaXMgdGhlcmVmb3JlCiAgICAgaW1wbGljaXRseSB2b2xhdGlsZSwgdGhlbiB0aGUgcHJlZGljYXRlICdBU01fVk9MQVRJTEVfUCcgd2lsbCBob2xkCiAgICAgb2YgdGhlICdBU01fRVhQUicuCgonQlJFQUtfU1RNVCcKCiAgICAgVXNlZCB0byByZXByZXNlbnQgYSAnYnJlYWsnIHN0YXRlbWVudC4gIFRoZXJlIGFyZSBubyBhZGRpdGlvbmFsCiAgICAgZmllbGRzLgoKJ0NBU0VfTEFCRUxfRVhQUicKCiAgICAgVXNlIHRvIHJlcHJlc2VudCBhICdjYXNlJyBsYWJlbCwgcmFuZ2Ugb2YgJ2Nhc2UnIGxhYmVscywgb3IgYQogICAgICdkZWZhdWx0JyBsYWJlbC4gIElmICdDQVNFX0xPVycgaXMgJ05VTExfVFJFRScsIHRoZW4gdGhpcyBpcyBhCiAgICAgJ2RlZmF1bHQnIGxhYmVsLiAgT3RoZXJ3aXNlLCBpZiAnQ0FTRV9ISUdIJyBpcyAnTlVMTF9UUkVFJywgdGhlbgogICAgIHRoaXMgaXMgYW4gb3JkaW5hcnkgJ2Nhc2UnIGxhYmVsLiAgSW4gdGhpcyBjYXNlLCAnQ0FTRV9MT1cnIGlzIGFuCiAgICAgZXhwcmVzc2lvbiBnaXZpbmcgdGhlIHZhbHVlIG9mIHRoZSBsYWJlbC4gIEJvdGggJ0NBU0VfTE9XJyBhbmQKICAgICAnQ0FTRV9ISUdIJyBhcmUgJ0lOVEVHRVJfQ1NUJyBub2Rlcy4gIFRoZXNlIHZhbHVlcyB3aWxsIGhhdmUgdGhlCiAgICAgc2FtZSB0eXBlIGFzIHRoZSBjb25kaXRpb24gZXhwcmVzc2lvbiBpbiB0aGUgc3dpdGNoIHN0YXRlbWVudC4KCiAgICAgT3RoZXJ3aXNlLCBpZiBib3RoICdDQVNFX0xPVycgYW5kICdDQVNFX0hJR0gnIGFyZSBkZWZpbmVkLCB0aGUKICAgICBzdGF0ZW1lbnQgaXMgYSByYW5nZSBvZiBjYXNlIGxhYmVscy4gIFN1Y2ggc3RhdGVtZW50cyBvcmlnaW5hdGUKICAgICB3aXRoIHRoZSBleHRlbnNpb24gdGhhdCBhbGxvd3MgdXNlcnMgdG8gd3JpdGUgdGhpbmdzIG9mIHRoZSBmb3JtOgogICAgICAgICAgY2FzZSAyIC4uLiA1OgogICAgIFRoZSBmaXJzdCB2YWx1ZSB3aWxsIGJlICdDQVNFX0xPVycsIHdoaWxlIHRoZSBzZWNvbmQgd2lsbCBiZQogICAgICdDQVNFX0hJR0gnLgoKJ0NMRUFOVVBfU1RNVCcKCiAgICAgVXNlZCB0byByZXByZXNlbnQgYW4gYWN0aW9uIHRoYXQgc2hvdWxkIHRha2UgcGxhY2UgdXBvbiBleGl0IGZyb20KICAgICB0aGUgZW5jbG9zaW5nIHNjb3BlLiAgVHlwaWNhbGx5LCB0aGVzZSBhY3Rpb25zIGFyZSBjYWxscyB0bwogICAgIGRlc3RydWN0b3JzIGZvciBsb2NhbCBvYmplY3RzLCBidXQgYmFjayBlbmRzIGNhbm5vdCByZWx5IG9uIHRoaXMKICAgICBmYWN0LiAgSWYgdGhlc2Ugbm9kZXMgYXJlIGluIGZhY3QgcmVwcmVzZW50aW5nIHN1Y2ggZGVzdHJ1Y3RvcnMsCiAgICAgJ0NMRUFOVVBfREVDTCcgd2lsbCBiZSB0aGUgJ1ZBUl9ERUNMJyBkZXN0cm95ZWQuICBPdGhlcndpc2UsCiAgICAgJ0NMRUFOVVBfREVDTCcgd2lsbCBiZSAnTlVMTF9UUkVFJy4gIEluIGFueSBjYXNlLCB0aGUKICAgICAnQ0xFQU5VUF9FWFBSJyBpcyB0aGUgZXhwcmVzc2lvbiB0byBleGVjdXRlLiAgVGhlIGNsZWFudXBzIGV4ZWN1dGVkCiAgICAgb24gZXhpdCBmcm9tIGEgc2NvcGUgc2hvdWxkIGJlIHJ1biBpbiB0aGUgcmV2ZXJzZSBvcmRlciBvZiB0aGUKICAgICBvcmRlciBpbiB3aGljaCB0aGUgYXNzb2NpYXRlZCAnQ0xFQU5VUF9TVE1UJ3Mgd2VyZSBlbmNvdW50ZXJlZC4KCidDT05USU5VRV9TVE1UJwoKICAgICBVc2VkIHRvIHJlcHJlc2VudCBhICdjb250aW51ZScgc3RhdGVtZW50LiAgVGhlcmUgYXJlIG5vIGFkZGl0aW9uYWwKICAgICBmaWVsZHMuCgonQ1RPUl9TVE1UJwoKICAgICBVc2VkIHRvIG1hcmsgdGhlIGJlZ2lubmluZyAoaWYgJ0NUT1JfQkVHSU5fUCcgaG9sZHMpIG9yIGVuZCAoaWYKICAgICAnQ1RPUl9FTkRfUCcgaG9sZHMgb2YgdGhlIG1haW4gYm9keSBvZiBhIGNvbnN0cnVjdG9yLiAgU2VlIGFsc28KICAgICAnU1VCT0JKRUNUJyBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlIHRoZXNlIG5vZGVzLgoKJ0RFQ0xfU1RNVCcKCiAgICAgVXNlZCB0byByZXByZXNlbnQgYSBsb2NhbCBkZWNsYXJhdGlvbi4gIFRoZSAnREVDTF9TVE1UX0RFQ0wnIG1hY3JvCiAgICAgY2FuIGJlIHVzZWQgdG8gb2J0YWluIHRoZSBlbnRpdHkgZGVjbGFyZWQuICBUaGlzIGRlY2xhcmF0aW9uIG1heSBiZQogICAgIGEgJ0xBQkVMX0RFQ0wnLCBpbmRpY2F0aW5nIHRoYXQgdGhlIGxhYmVsIGRlY2xhcmVkIGlzIGEgbG9jYWwKICAgICBsYWJlbC4gIChBcyBhbiBleHRlbnNpb24sIEdDQyBhbGxvd3MgdGhlIGRlY2xhcmF0aW9uIG9mIGxhYmVscyB3aXRoCiAgICAgc2NvcGUuKSAgSW4gQywgdGhpcyBkZWNsYXJhdGlvbiBtYXkgYmUgYSAnRlVOQ1RJT05fREVDTCcsCiAgICAgaW5kaWNhdGluZyB0aGUgdXNlIG9mIHRoZSBHQ0MgbmVzdGVkIGZ1bmN0aW9uIGV4dGVuc2lvbi4gIEZvciBtb3JlCiAgICAgaW5mb3JtYXRpb24sICpub3RlIEZ1bmN0aW9uczo6LgoKJ0RPX1NUTVQnCgogICAgIFVzZWQgdG8gcmVwcmVzZW50IGEgJ2RvJyBsb29wLiAgVGhlIGJvZHkgb2YgdGhlIGxvb3AgaXMgZ2l2ZW4gYnkKICAgICAnRE9fQk9EWScgd2hpbGUgdGhlIHRlcm1pbmF0aW9uIGNvbmRpdGlvbiBmb3IgdGhlIGxvb3AgaXMgZ2l2ZW4gYnkKICAgICAnRE9fQ09ORCcuICBUaGUgY29uZGl0aW9uIGZvciBhICdkbyctc3RhdGVtZW50IGlzIGFsd2F5cyBhbgogICAgIGV4cHJlc3Npb24uCgonRU1QVFlfQ0xBU1NfRVhQUicKCiAgICAgVXNlZCB0byByZXByZXNlbnQgYSB0ZW1wb3Jhcnkgb2JqZWN0IG9mIGEgY2xhc3Mgd2l0aCBubyBkYXRhIHdob3NlCiAgICAgYWRkcmVzcyBpcyBuZXZlciB0YWtlbi4gIChBbGwgc3VjaCBvYmplY3RzIGFyZSBpbnRlcmNoYW5nZWFibGUuKQogICAgIFRoZSAnVFJFRV9UWVBFJyByZXByZXNlbnRzIHRoZSB0eXBlIG9mIHRoZSBvYmplY3QuCgonRVhQUl9TVE1UJwoKICAgICBVc2VkIHRvIHJlcHJlc2VudCBhbiBleHByZXNzaW9uIHN0YXRlbWVudC4gIFVzZSAnRVhQUl9TVE1UX0VYUFInIHRvCiAgICAgb2J0YWluIHRoZSBleHByZXNzaW9uLgoKJ0ZPUl9TVE1UJwoKICAgICBVc2VkIHRvIHJlcHJlc2VudCBhICdmb3InIHN0YXRlbWVudC4gIFRoZSAnRk9SX0lOSVRfU1RNVCcgaXMgdGhlCiAgICAgaW5pdGlhbGl6YXRpb24gc3RhdGVtZW50IGZvciB0aGUgbG9vcC4gIFRoZSAnRk9SX0NPTkQnIGlzIHRoZQogICAgIHRlcm1pbmF0aW9uIGNvbmRpdGlvbi4gIFRoZSAnRk9SX0VYUFInIGlzIHRoZSBleHByZXNzaW9uIGV4ZWN1dGVkCiAgICAgcmlnaHQgYmVmb3JlIHRoZSAnRk9SX0NPTkQnIG9uIGVhY2ggbG9vcCBpdGVyYXRpb247IG9mdGVuLCB0aGlzCiAgICAgZXhwcmVzc2lvbiBpbmNyZW1lbnRzIGEgY291bnRlci4gIFRoZSBib2R5IG9mIHRoZSBsb29wIGlzIGdpdmVuIGJ5CiAgICAgJ0ZPUl9CT0RZJy4gIE5vdGUgdGhhdCAnRk9SX0lOSVRfU1RNVCcgYW5kICdGT1JfQk9EWScgcmV0dXJuCiAgICAgc3RhdGVtZW50cywgd2hpbGUgJ0ZPUl9DT05EJyBhbmQgJ0ZPUl9FWFBSJyByZXR1cm4gZXhwcmVzc2lvbnMuCgonR09UT19FWFBSJwoKICAgICBVc2VkIHRvIHJlcHJlc2VudCBhICdnb3RvJyBzdGF0ZW1lbnQuICBUaGUgJ0dPVE9fREVTVElOQVRJT04nIHdpbGwKICAgICB1c3VhbGx5IGJlIGEgJ0xBQkVMX0RFQ0wnLiAgSG93ZXZlciwgaWYgdGhlICJjb21wdXRlZCBnb3RvIgogICAgIGV4dGVuc2lvbiBoYXMgYmVlbiB1c2VkLCB0aGUgJ0dPVE9fREVTVElOQVRJT04nIHdpbGwgYmUgYW4KICAgICBhcmJpdHJhcnkgZXhwcmVzc2lvbiBpbmRpY2F0aW5nIHRoZSBkZXN0aW5hdGlvbi4gIFRoaXMgZXhwcmVzc2lvbgogICAgIHdpbGwgYWx3YXlzIGhhdmUgcG9pbnRlciB0eXBlLgoKJ0hBTkRMRVInCgogICAgIFVzZWQgdG8gcmVwcmVzZW50IGEgQysrICdjYXRjaCcgYmxvY2suICBUaGUgJ0hBTkRMRVJfVFlQRScgaXMgdGhlCiAgICAgdHlwZSBvZiBleGNlcHRpb24gdGhhdCB3aWxsIGJlIGNhdWdodCBieSB0aGlzIGhhbmRsZXI7IGl0IGlzIGVxdWFsCiAgICAgKGJ5IHBvaW50ZXIgZXF1YWxpdHkpIHRvICdOVUxMJyBpZiB0aGlzIGhhbmRsZXIgaXMgZm9yIGFsbCB0eXBlcy4KICAgICAnSEFORExFUl9QQVJNUycgaXMgdGhlICdERUNMX1NUTVQnIGZvciB0aGUgY2F0Y2ggcGFyYW1ldGVyLCBhbmQKICAgICAnSEFORExFUl9CT0RZJyBpcyB0aGUgY29kZSBmb3IgdGhlIGJsb2NrIGl0c2VsZi4KCidJRl9TVE1UJwoKICAgICBVc2VkIHRvIHJlcHJlc2VudCBhbiAnaWYnIHN0YXRlbWVudC4gIFRoZSAnSUZfQ09ORCcgaXMgdGhlCiAgICAgZXhwcmVzc2lvbi4KCiAgICAgSWYgdGhlIGNvbmRpdGlvbiBpcyBhICdUUkVFX0xJU1QnLCB0aGVuIHRoZSAnVFJFRV9QVVJQT1NFJyBpcyBhCiAgICAgc3RhdGVtZW50ICh1c3VhbGx5IGEgJ0RFQ0xfU1RNVCcpLiAgRWFjaCB0aW1lIHRoZSBjb25kaXRpb24gaXMKICAgICBldmFsdWF0ZWQsIHRoZSBzdGF0ZW1lbnQgc2hvdWxkIGJlIGV4ZWN1dGVkLiAgVGhlbiwgdGhlCiAgICAgJ1RSRUVfVkFMVUUnIHNob3VsZCBiZSB1c2VkIGFzIHRoZSBjb25kaXRpb25hbCBleHByZXNzaW9uIGl0c2VsZi4KICAgICBUaGlzIHJlcHJlc2VudGF0aW9uIGlzIHVzZWQgdG8gaGFuZGxlIEMrKyBjb2RlIGxpa2UgdGhpczoKCiAgICAgICAgICBpZiAoaW50IGkgPSA3KSAuLi4KCiAgICAgd2hlcmUgdGhlcmUgaXMgYSBuZXcgbG9jYWwgdmFyaWFibGUgKG9yIHZhcmlhYmxlcykgZGVjbGFyZWQgd2l0aGluCiAgICAgdGhlIGNvbmRpdGlvbi4KCiAgICAgVGhlICdUSEVOX0NMQVVTRScgcmVwcmVzZW50cyB0aGUgc3RhdGVtZW50IGdpdmVuIGJ5IHRoZSAndGhlbicKICAgICBjb25kaXRpb24sIHdoaWxlIHRoZSAnRUxTRV9DTEFVU0UnIHJlcHJlc2VudHMgdGhlIHN0YXRlbWVudCBnaXZlbgogICAgIGJ5IHRoZSAnZWxzZScgY29uZGl0aW9uLgoKJ0xBQkVMX0VYUFInCgogICAgIFVzZWQgdG8gcmVwcmVzZW50IGEgbGFiZWwuICBUaGUgJ0xBQkVMX0RFQ0wnIGRlY2xhcmVkIGJ5IHRoaXMKICAgICBzdGF0ZW1lbnQgY2FuIGJlIG9idGFpbmVkIHdpdGggdGhlICdMQUJFTF9FWFBSX0xBQkVMJyBtYWNyby4gIFRoZQogICAgICdJREVOVElGSUVSX05PREUnIGdpdmluZyB0aGUgbmFtZSBvZiB0aGUgbGFiZWwgY2FuIGJlIG9idGFpbmVkIGZyb20KICAgICB0aGUgJ0xBQkVMX0RFQ0wnIHdpdGggJ0RFQ0xfTkFNRScuCgonUkVUVVJOX1NUTVQnCgogICAgIFVzZWQgdG8gcmVwcmVzZW50IGEgJ3JldHVybicgc3RhdGVtZW50LiAgVGhlICdSRVRVUk5fRVhQUicgaXMgdGhlCiAgICAgZXhwcmVzc2lvbiByZXR1cm5lZDsgaXQgd2lsbCBiZSAnTlVMTF9UUkVFJyBpZiB0aGUgc3RhdGVtZW50IHdhcwogICAgIGp1c3QKICAgICAgICAgIHJldHVybjsKCidTVUJPQkpFQ1QnCgogICAgIEluIGEgY29uc3RydWN0b3IsIHRoZXNlIG5vZGVzIGFyZSB1c2VkIHRvIG1hcmsgdGhlIHBvaW50IGF0IHdoaWNoIGEKICAgICBzdWJvYmplY3Qgb2YgJ3RoaXMnIGlzIGZ1bGx5IGNvbnN0cnVjdGVkLiAgSWYsIGFmdGVyIHRoaXMgcG9pbnQsIGFuCiAgICAgZXhjZXB0aW9uIGlzIHRocm93biBiZWZvcmUgYSAnQ1RPUl9TVE1UJyB3aXRoICdDVE9SX0VORF9QJyBzZXQgaXMKICAgICBlbmNvdW50ZXJlZCwgdGhlICdTVUJPQkpFQ1RfQ0xFQU5VUCcgbXVzdCBiZSBleGVjdXRlZC4gIFRoZQogICAgIGNsZWFudXBzIG11c3QgYmUgZXhlY3V0ZWQgaW4gdGhlIHJldmVyc2Ugb3JkZXIgaW4gd2hpY2ggdGhleQogICAgIGFwcGVhci4KCidTV0lUQ0hfU1RNVCcKCiAgICAgVXNlZCB0byByZXByZXNlbnQgYSAnc3dpdGNoJyBzdGF0ZW1lbnQuICBUaGUgJ1NXSVRDSF9TVE1UX0NPTkQnIGlzCiAgICAgdGhlIGV4cHJlc3Npb24gb24gd2hpY2ggdGhlIHN3aXRjaCBpcyBvY2N1cnJpbmcuICBTZWUgdGhlCiAgICAgZG9jdW1lbnRhdGlvbiBmb3IgYW4gJ0lGX1NUTVQnIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZQogICAgIHJlcHJlc2VudGF0aW9uIHVzZWQgZm9yIHRoZSBjb25kaXRpb24uICBUaGUgJ1NXSVRDSF9TVE1UX0JPRFknIGlzCiAgICAgdGhlIGJvZHkgb2YgdGhlIHN3aXRjaCBzdGF0ZW1lbnQuICBUaGUgJ1NXSVRDSF9TVE1UX1RZUEUnIGlzIHRoZQogICAgIG9yaWdpbmFsIHR5cGUgb2Ygc3dpdGNoIGV4cHJlc3Npb24gYXMgZ2l2ZW4gaW4gdGhlIHNvdXJjZSwgYmVmb3JlCiAgICAgYW55IGNvbXBpbGVyIGNvbnZlcnNpb25zLgoKJ1RSWV9CTE9DSycKICAgICBVc2VkIHRvIHJlcHJlc2VudCBhICd0cnknIGJsb2NrLiAgVGhlIGJvZHkgb2YgdGhlIHRyeSBibG9jayBpcwogICAgIGdpdmVuIGJ5ICdUUllfU1RNVFMnLiAgRWFjaCBvZiB0aGUgY2F0Y2ggYmxvY2tzIGlzIGEgJ0hBTkRMRVInCiAgICAgbm9kZS4gIFRoZSBmaXJzdCBoYW5kbGVyIGlzIGdpdmVuIGJ5ICdUUllfSEFORExFUlMnLiAgU3Vic2VxdWVudAogICAgIGhhbmRsZXJzIGFyZSBvYnRhaW5lZCBieSBmb2xsb3dpbmcgdGhlICdUUkVFX0NIQUlOJyBsaW5rIGZyb20gb25lCiAgICAgaGFuZGxlciB0byB0aGUgbmV4dC4gIFRoZSBib2R5IG9mIHRoZSBoYW5kbGVyIGlzIGdpdmVuIGJ5CiAgICAgJ0hBTkRMRVJfQk9EWScuCgogICAgIElmICdDTEVBTlVQX1AnIGhvbGRzIG9mIHRoZSAnVFJZX0JMT0NLJywgdGhlbiB0aGUgJ1RSWV9IQU5ETEVSUycKICAgICB3aWxsIG5vdCBiZSBhICdIQU5ETEVSJyBub2RlLiAgSW5zdGVhZCwgaXQgd2lsbCBiZSBhbiBleHByZXNzaW9uCiAgICAgdGhhdCBzaG91bGQgYmUgZXhlY3V0ZWQgaWYgYW4gZXhjZXB0aW9uIGlzIHRocm93biBpbiB0aGUgdHJ5IGJsb2NrLgogICAgIEl0IG11c3QgcmV0aHJvdyB0aGUgZXhjZXB0aW9uIGFmdGVyIGV4ZWN1dGluZyB0aGF0IGNvZGUuICBBbmQsIGlmCiAgICAgYW4gZXhjZXB0aW9uIGlzIHRocm93biB3aGlsZSB0aGUgZXhwcmVzc2lvbiBpcyBleGVjdXRpbmcsCiAgICAgJ3Rlcm1pbmF0ZScgbXVzdCBiZSBjYWxsZWQuCgonVVNJTkdfU1RNVCcKICAgICBVc2VkIHRvIHJlcHJlc2VudCBhICd1c2luZycgZGlyZWN0aXZlLiAgVGhlIG5hbWVzcGFjZSBpcyBnaXZlbiBieQogICAgICdVU0lOR19TVE1UX05BTUVTUEFDRScsIHdoaWNoIHdpbGwgYmUgYSBOQU1FU1BBQ0VfREVDTC4gIFRoaXMgbm9kZQogICAgIGlzIG5lZWRlZCBpbnNpZGUgdGVtcGxhdGUgZnVuY3Rpb25zLCB0byBpbXBsZW1lbnQgdXNpbmcgZGlyZWN0aXZlcwogICAgIGR1cmluZyBpbnN0YW50aWF0aW9uLgoKJ1dISUxFX1NUTVQnCgogICAgIFVzZWQgdG8gcmVwcmVzZW50IGEgJ3doaWxlJyBsb29wLiAgVGhlICdXSElMRV9DT05EJyBpcyB0aGUKICAgICB0ZXJtaW5hdGlvbiBjb25kaXRpb24gZm9yIHRoZSBsb29wLiAgU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciBhbgogICAgICdJRl9TVE1UJyBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgcmVwcmVzZW50YXRpb24gdXNlZCBmb3IgdGhlCiAgICAgY29uZGl0aW9uLgoKICAgICBUaGUgJ1dISUxFX0JPRFknIGlzIHRoZSBib2R5IG9mIHRoZSBsb29wLgoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IEF0dHJpYnV0ZXMsICBOZXh0OiBFeHByZXNzaW9uIHRyZWVzLCAgUHJldjogRnVuY3Rpb25zLCAgVXA6IFRyZWVzCgo5LjcgQXR0cmlidXRlcyBpbiB0cmVlcwo9PT09PT09PT09PT09PT09PT09PT09PQoKQXR0cmlidXRlcywgYXMgc3BlY2lmaWVkIHVzaW5nIHRoZSAnX19hdHRyaWJ1dGVfXycga2V5d29yZCwgYXJlCnJlcHJlc2VudGVkIGludGVybmFsbHkgYXMgYSAnVFJFRV9MSVNUJy4gIFRoZSAnVFJFRV9QVVJQT1NFJyBpcyB0aGUgbmFtZQpvZiB0aGUgYXR0cmlidXRlLCBhcyBhbiAnSURFTlRJRklFUl9OT0RFJy4gIFRoZSAnVFJFRV9WQUxVRScgaXMgYQonVFJFRV9MSVNUJyBvZiB0aGUgYXJndW1lbnRzIG9mIHRoZSBhdHRyaWJ1dGUsIGlmIGFueSwgb3IgJ05VTExfVFJFRScgaWYKdGhlcmUgYXJlIG5vIGFyZ3VtZW50czsgdGhlIGFyZ3VtZW50cyBhcmUgc3RvcmVkIGFzIHRoZSAnVFJFRV9WQUxVRScgb2YKc3VjY2Vzc2l2ZSBlbnRyaWVzIGluIHRoZSBsaXN0LCBhbmQgbWF5IGJlIGlkZW50aWZpZXJzIG9yIGV4cHJlc3Npb25zLgpUaGUgJ1RSRUVfQ0hBSU4nIG9mIHRoZSBhdHRyaWJ1dGUgaXMgdGhlIG5leHQgYXR0cmlidXRlIGluIGEgbGlzdCBvZgphdHRyaWJ1dGVzIGFwcGx5aW5nIHRvIHRoZSBzYW1lIGRlY2xhcmF0aW9uIG9yIHR5cGUsIG9yICdOVUxMX1RSRUUnIGlmCnRoZXJlIGFyZSBubyBmdXJ0aGVyIGF0dHJpYnV0ZXMgaW4gdGhlIGxpc3QuCgogQXR0cmlidXRlcyBtYXkgYmUgYXR0YWNoZWQgdG8gZGVjbGFyYXRpb25zIGFuZCB0byB0eXBlczsgdGhlc2UKYXR0cmlidXRlcyBtYXkgYmUgYWNjZXNzZWQgd2l0aCB0aGUgZm9sbG93aW5nIG1hY3Jvcy4gIEFsbCBhdHRyaWJ1dGVzCmFyZSBzdG9yZWQgaW4gdGhpcyB3YXksIGFuZCBtYW55IGFsc28gY2F1c2Ugb3RoZXIgY2hhbmdlcyB0byB0aGUKZGVjbGFyYXRpb24gb3IgdHlwZSBvciB0byBvdGhlciBpbnRlcm5hbCBjb21waWxlciBkYXRhIHN0cnVjdHVyZXMuCgogLS0gVHJlZSBNYWNybzogdHJlZSBERUNMX0FUVFJJQlVURVMgKHRyZWUgREVDTCkKICAgICBUaGlzIG1hY3JvIHJldHVybnMgdGhlIGF0dHJpYnV0ZXMgb24gdGhlIGRlY2xhcmF0aW9uIERFQ0wuCgogLS0gVHJlZSBNYWNybzogdHJlZSBUWVBFX0FUVFJJQlVURVMgKHRyZWUgVFlQRSkKICAgICBUaGlzIG1hY3JvIHJldHVybnMgdGhlIGF0dHJpYnV0ZXMgb24gdGhlIHR5cGUgVFlQRS4KCh8KRmlsZTogZ2NjaW50LmluZm8sICBOb2RlOiBFeHByZXNzaW9uIHRyZWVzLCAgUHJldjogQXR0cmlidXRlcywgIFVwOiBUcmVlcwoKOS44IEV4cHJlc3Npb25zCj09PT09PT09PT09PT09PQoKVGhlIGludGVybmFsIHJlcHJlc2VudGF0aW9uIGZvciBleHByZXNzaW9ucyBpcyBmb3IgdGhlIG1vc3QgcGFydCBxdWl0ZQpzdHJhaWdodGZvcndhcmQuICBIb3dldmVyLCB0aGVyZSBhcmUgYSBmZXcgZmFjdHMgdGhhdCBvbmUgbXVzdCBiZWFyIGluCm1pbmQuICBJbiBwYXJ0aWN1bGFyLCB0aGUgZXhwcmVzc2lvbiAidHJlZSIgaXMgYWN0dWFsbHkgYSBkaXJlY3RlZAphY3ljbGljIGdyYXBoLiAgKEZvciBleGFtcGxlIHRoZXJlIG1heSBiZSBtYW55IHJlZmVyZW5jZXMgdG8gdGhlIGludGVnZXIKY29uc3RhbnQgemVybyB0aHJvdWdob3V0IHRoZSBzb3VyY2UgcHJvZ3JhbTsgbWFueSBvZiB0aGVzZSB3aWxsIGJlCnJlcHJlc2VudGVkIGJ5IHRoZSBzYW1lIGV4cHJlc3Npb24gbm9kZS4pICBZb3Ugc2hvdWxkIG5vdCByZWx5IG9uCmNlcnRhaW4ga2luZHMgb2Ygbm9kZSBiZWluZyBzaGFyZWQsIG5vciBzaG91bGQgeW91IHJlbHkgb24gY2VydGFpbiBraW5kcwpvZiBub2RlcyBiZWluZyB1bnNoYXJlZC4KCiBUaGUgZm9sbG93aW5nIG1hY3JvcyBjYW4gYmUgdXNlZCB3aXRoIGFsbCBleHByZXNzaW9uIG5vZGVzOgoKJ1RSRUVfVFlQRScKICAgICBSZXR1cm5zIHRoZSB0eXBlIG9mIHRoZSBleHByZXNzaW9uLiAgVGhpcyB2YWx1ZSBtYXkgbm90IGJlCiAgICAgcHJlY2lzZWx5IHRoZSBzYW1lIHR5cGUgdGhhdCB3b3VsZCBiZSBnaXZlbiB0aGUgZXhwcmVzc2lvbiBpbiB0aGUKICAgICBvcmlnaW5hbCBwcm9ncmFtLgoKIEluIHdoYXQgZm9sbG93cywgc29tZSBub2RlcyB0aGF0IG9uZSBtaWdodCBleHBlY3QgdG8gYWx3YXlzIGhhdmUgdHlwZQonYm9vbCcgYXJlIGRvY3VtZW50ZWQgdG8gaGF2ZSBlaXRoZXIgaW50ZWdyYWwgb3IgYm9vbGVhbiB0eXBlLiAgQXQgc29tZQpwb2ludCBpbiB0aGUgZnV0dXJlLCB0aGUgQyBmcm9udCBlbmQgbWF5IGFsc28gbWFrZSB1c2Ugb2YgdGhpcyBzYW1lCmludGVybWVkaWF0ZSByZXByZXNlbnRhdGlvbiwgYW5kIGF0IHRoaXMgcG9pbnQgdGhlc2Ugbm9kZXMgd2lsbApjZXJ0YWlubHkgaGF2ZSBpbnRlZ3JhbCB0eXBlLiAgVGhlIHByZXZpb3VzIHNlbnRlbmNlIGlzIG5vdCBtZWFudCB0bwppbXBseSB0aGF0IHRoZSBDKysgZnJvbnQgZW5kIGRvZXMgbm90IG9yIHdpbGwgbm90IGdpdmUgdGhlc2Ugbm9kZXMKaW50ZWdyYWwgdHlwZS4KCiBCZWxvdywgd2UgbGlzdCB0aGUgdmFyaW91cyBraW5kcyBvZiBleHByZXNzaW9uIG5vZGVzLiAgRXhjZXB0IHdoZXJlCm5vdGVkIG90aGVyd2lzZSwgdGhlIG9wZXJhbmRzIHRvIGFuIGV4cHJlc3Npb24gYXJlIGFjY2Vzc2VkIHVzaW5nIHRoZQonVFJFRV9PUEVSQU5EJyBtYWNyby4gIEZvciBleGFtcGxlLCB0byBhY2Nlc3MgdGhlIGZpcnN0IG9wZXJhbmQgdG8gYQpiaW5hcnkgcGx1cyBleHByZXNzaW9uICdleHByJywgdXNlOgoKICAgICBUUkVFX09QRVJBTkQgKGV4cHIsIDApCkFzIHRoaXMgZXhhbXBsZSBpbmRpY2F0ZXMsIHRoZSBvcGVyYW5kcyBhcmUgemVyby1pbmRleGVkLgoKIEFsbCB0aGUgZXhwcmVzc2lvbnMgc3RhcnRpbmcgd2l0aCAnT01QXycgcmVwcmVzZW50IGRpcmVjdGl2ZXMgYW5kCmNsYXVzZXMgdXNlZCBieSB0aGUgT3Blbk1QIEFQSSA8aHR0cDovL3d3dy5vcGVubXAub3JnLz4uCgogVGhlIHRhYmxlIGJlbG93IGJlZ2lucyB3aXRoIGNvbnN0YW50cywgbW92ZXMgb24gdG8gdW5hcnkgZXhwcmVzc2lvbnMsCnRoZW4gcHJvY2VlZHMgdG8gYmluYXJ5IGV4cHJlc3Npb25zLCBhbmQgY29uY2x1ZGVzIHdpdGggdmFyaW91cyBvdGhlcgpraW5kcyBvZiBleHByZXNzaW9uczoKCidJTlRFR0VSX0NTVCcKICAgICBUaGVzZSBub2RlcyByZXByZXNlbnQgaW50ZWdlciBjb25zdGFudHMuICBOb3RlIHRoYXQgdGhlIHR5cGUgb2YKICAgICB0aGVzZSBjb25zdGFudHMgaXMgb2J0YWluZWQgd2l0aCAnVFJFRV9UWVBFJzsgdGhleSBhcmUgbm90IGFsd2F5cwogICAgIG9mIHR5cGUgJ2ludCcuICBJbiBwYXJ0aWN1bGFyLCAnY2hhcicgY29uc3RhbnRzIGFyZSByZXByZXNlbnRlZAogICAgIHdpdGggJ0lOVEVHRVJfQ1NUJyBub2Rlcy4gIFRoZSB2YWx1ZSBvZiB0aGUgaW50ZWdlciBjb25zdGFudCAnZScgaXMKICAgICBnaXZlbiBieQogICAgICAgICAgKChUUkVFX0lOVF9DU1RfSElHSCAoZSkgPDwgSE9TVF9CSVRTX1BFUl9XSURFX0lOVCkKICAgICAgICAgICsgVFJFRV9JTlNUX0NTVF9MT1cgKGUpKQogICAgIEhPU1RfQklUU19QRVJfV0lERV9JTlQgaXMgYXQgbGVhc3QgdGhpcnR5LXR3byBvbiBhbGwgcGxhdGZvcm1zLgogICAgIEJvdGggJ1RSRUVfSU5UX0NTVF9ISUdIJyBhbmQgJ1RSRUVfSU5UX0NTVF9MT1cnIHJldHVybiBhCiAgICAgJ0hPU1RfV0lERV9JTlQnLiAgVGhlIHZhbHVlIG9mIGFuICdJTlRFR0VSX0NTVCcgaXMgaW50ZXJwcmV0ZWQgYXMgYQogICAgIHNpZ25lZCBvciB1bnNpZ25lZCBxdWFudGl0eSBkZXBlbmRpbmcgb24gdGhlIHR5cGUgb2YgdGhlIGNvbnN0YW50LgogICAgIEluIGdlbmVyYWwsIHRoZSBleHByZXNzaW9uIGdpdmVuIGFib3ZlIHdpbGwgb3ZlcmZsb3csIHNvIGl0IHNob3VsZAogICAgIG5vdCBiZSB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgdmFsdWUgb2YgdGhlIGNvbnN0YW50LgoKICAgICBUaGUgdmFyaWFibGUgJ2ludGVnZXJfemVyb19ub2RlJyBpcyBhbiBpbnRlZ2VyIGNvbnN0YW50IHdpdGggdmFsdWUKICAgICB6ZXJvLiAgU2ltaWxhcmx5LCAnaW50ZWdlcl9vbmVfbm9kZScgaXMgYW4gaW50ZWdlciBjb25zdGFudCB3aXRoCiAgICAgdmFsdWUgb25lLiAgVGhlICdzaXplX3plcm9fbm9kZScgYW5kICdzaXplX29uZV9ub2RlJyB2YXJpYWJsZXMgYXJlCiAgICAgYW5hbG9nb3VzLCBidXQgaGF2ZSB0eXBlICdzaXplX3QnIHJhdGhlciB0aGFuICdpbnQnLgoKICAgICBUaGUgZnVuY3Rpb24gJ3RyZWVfaW50X2NzdF9sdCcgaXMgYSBwcmVkaWNhdGUgd2hpY2ggaG9sZHMgaWYgaXRzCiAgICAgZmlyc3QgYXJndW1lbnQgaXMgbGVzcyB0aGFuIGl0cyBzZWNvbmQuICBCb3RoIGNvbnN0YW50cyBhcmUgYXNzdW1lZAogICAgIHRvIGhhdmUgdGhlIHNhbWUgc2lnbmVkbmVzcyAoaS5lLiwgZWl0aGVyIGJvdGggc2hvdWxkIGJlIHNpZ25lZCBvcgogICAgIGJvdGggc2hvdWxkIGJlIHVuc2lnbmVkLikgIFRoZSBmdWxsIHdpZHRoIG9mIHRoZSBjb25zdGFudCBpcyB1c2VkCiAgICAgd2hlbiBkb2luZyB0aGUgY29tcGFyaXNvbjsgdGhlIHVzdWFsIHJ1bGVzIGFib3V0IHByb21vdGlvbnMgYW5kCiAgICAgY29udmVyc2lvbnMgYXJlIGlnbm9yZWQuICBTaW1pbGFybHksICd0cmVlX2ludF9jc3RfZXF1YWwnIGhvbGRzIGlmCiAgICAgdGhlIHR3byBjb25zdGFudHMgYXJlIGVxdWFsLiAgVGhlICd0cmVlX2ludF9jc3Rfc2duJyBmdW5jdGlvbgogICAgIHJldHVybnMgdGhlIHNpZ24gb2YgYSBjb25zdGFudC4gIFRoZSB2YWx1ZSBpcyAnMScsICcwJywgb3IgJy0xJwogICAgIGFjY29yZGluZyBvbiB3aGV0aGVyIHRoZSBjb25zdGFudCBpcyBncmVhdGVyIHRoYW4sIGVxdWFsIHRvLCBvcgogICAgIGxlc3MgdGhhbiB6ZXJvLiAgQWdhaW4sIHRoZSBzaWduZWRuZXNzIG9mIHRoZSBjb25zdGFudCdzIHR5cGUgaXMKICAgICB0YWtlbiBpbnRvIGFjY291bnQ7IGFuIHVuc2lnbmVkIGNvbnN0YW50IGlzIG5ldmVyIGxlc3MgdGhhbiB6ZXJvLAogICAgIG5vIG1hdHRlciB3aGF0IGl0cyBiaXQtcGF0dGVybi4KCidSRUFMX0NTVCcKCiAgICAgRklYTUU6IFRhbGsgYWJvdXQgaG93IHRvIG9idGFpbiByZXByZXNlbnRhdGlvbnMgb2YgdGhpcyBjb25zdGFudCwKICAgICBkbyBjb21wYXJpc29ucywgYW5kIHNvIGZvcnRoLgoKJ0ZJWEVEX0NTVCcKCiAgICAgVGhlc2Ugbm9kZXMgcmVwcmVzZW50IGZpeGVkLXBvaW50IGNvbnN0YW50cy4gIFRoZSB0eXBlIG9mIHRoZXNlCiAgICAgY29uc3RhbnRzIGlzIG9idGFpbmVkIHdpdGggJ1RSRUVfVFlQRScuICAnVFJFRV9GSVhFRF9DU1RfUFRSJwogICAgIHBvaW50cyB0byB0byBzdHJ1Y3QgZml4ZWRfdmFsdWU7ICdUUkVFX0ZJWEVEX0NTVCcgcmV0dXJucyB0aGUKICAgICBzdHJ1Y3R1cmUgaXRzZWxmLiAgU3RydWN0IGZpeGVkX3ZhbHVlIGNvbnRhaW5zICdkYXRhJyB3aXRoIHRoZSBzaXplCiAgICAgb2YgdHdvIEhPU1RfQklUU19QRVJfV0lERV9JTlQgYW5kICdtb2RlJyBhcyB0aGUgYXNzb2NpYXRlZAogICAgIGZpeGVkLXBvaW50IG1hY2hpbmUgbW9kZSBmb3IgJ2RhdGEnLgoKJ0NPTVBMRVhfQ1NUJwogICAgIFRoZXNlIG5vZGVzIGFyZSB1c2VkIHRvIHJlcHJlc2VudCBjb21wbGV4IG51bWJlciBjb25zdGFudHMsIHRoYXQgaXMKICAgICBhICdfX2NvbXBsZXhfXycgd2hvc2UgcGFydHMgYXJlIGNvbnN0YW50IG5vZGVzLiAgVGhlCiAgICAgJ1RSRUVfUkVBTFBBUlQnIGFuZCAnVFJFRV9JTUFHUEFSVCcgcmV0dXJuIHRoZSByZWFsIGFuZCB0aGUKICAgICBpbWFnaW5hcnkgcGFydHMgcmVzcGVjdGl2ZWx5LgoKJ1ZFQ1RPUl9DU1QnCiAgICAgVGhlc2Ugbm9kZXMgYXJlIHVzZWQgdG8gcmVwcmVzZW50IHZlY3RvciBjb25zdGFudHMsIHdob3NlIHBhcnRzIGFyZQogICAgIGNvbnN0YW50IG5vZGVzLiAgRWFjaCBpbmRpdmlkdWFsIGNvbnN0YW50IG5vZGUgaXMgZWl0aGVyIGFuIGludGVnZXIKICAgICBvciBhIGRvdWJsZSBjb25zdGFudCBub2RlLiAgVGhlIGZpcnN0IG9wZXJhbmQgaXMgYSAnVFJFRV9MSVNUJyBvZgogICAgIHRoZSBjb25zdGFudCBub2RlcyBhbmQgaXMgYWNjZXNzZWQgdGhyb3VnaCAnVFJFRV9WRUNUT1JfQ1NUX0VMVFMnLgoKJ1NUUklOR19DU1QnCiAgICAgVGhlc2Ugbm9kZXMgcmVwcmVzZW50IHN0cmluZy1jb25zdGFudHMuICBUaGUgJ1RSRUVfU1RSSU5HX0xFTkdUSCcKICAgICByZXR1cm5zIHRoZSBsZW5ndGggb2YgdGhlIHN0cmluZywgYXMgYW4gJ2ludCcuICBUaGUKICAgICAnVFJFRV9TVFJJTkdfUE9JTlRFUicgaXMgYSAnY2hhcionIGNvbnRhaW5pbmcgdGhlIHN0cmluZyBpdHNlbGYuCiAgICAgVGhlIHN0cmluZyBtYXkgbm90IGJlICdOVUwnLXRlcm1pbmF0ZWQsIGFuZCBpdCBtYXkgY29udGFpbiBlbWJlZGRlZAogICAgICdOVUwnIGNoYXJhY3RlcnMuICBUaGVyZWZvcmUsIHRoZSAnVFJFRV9TVFJJTkdfTEVOR1RIJyBpbmNsdWRlcyB0aGUKICAgICB0cmFpbGluZyAnTlVMJyBpZiBpdCBpcyBwcmVzZW50LgoKICAgICBGb3Igd2lkZSBzdHJpbmcgY29uc3RhbnRzLCB0aGUgJ1RSRUVfU1RSSU5HX0xFTkdUSCcgaXMgdGhlIG51bWJlcgogICAgIG9mIGJ5dGVzIGluIHRoZSBzdHJpbmcsIGFuZCB0aGUgJ1RSRUVfU1RSSU5HX1BPSU5URVInIHBvaW50cyB0byBhbgogICAgIGFycmF5IG9mIHRoZSBieXRlcyBvZiB0aGUgc3RyaW5nLCBhcyByZXByZXNlbnRlZCBvbiB0aGUgdGFyZ2V0CiAgICAgc3lzdGVtICh0aGF0IGlzLCBhcyBpbnRlZ2VycyBpbiB0aGUgdGFyZ2V0IGVuZGlhbm5lc3MpLiAgV2lkZSBhbmQKICAgICBub24td2lkZSBzdHJpbmcgY29uc3RhbnRzIGFyZSBkaXN0aW5ndWlzaGVkIG9ubHkgYnkgdGhlICdUUkVFX1RZUEUnCiAgICAgb2YgdGhlICdTVFJJTkdfQ1NUJy4KCiAgICAgRklYTUU6IFRoZSBmb3JtYXRzIG9mIHN0cmluZyBjb25zdGFudHMgYXJlIG5vdCB3ZWxsLWRlZmluZWQgd2hlbgogICAgIHRoZSB0YXJnZXQgc3lzdGVtIGJ5dGVzIGFyZSBub3QgdGhlIHNhbWUgd2lkdGggYXMgaG9zdCBzeXN0ZW0KICAgICBieXRlcy4KCidQVFJNRU1fQ1NUJwogICAgIFRoZXNlIG5vZGVzIGFyZSB1c2VkIHRvIHJlcHJlc2VudCBwb2ludGVyLXRvLW1lbWJlciBjb25zdGFudHMuICBUaGUKICAgICAnUFRSTUVNX0NTVF9DTEFTUycgaXMgdGhlIGNsYXNzIHR5cGUgKGVpdGhlciBhICdSRUNPUkRfVFlQRScgb3IKICAgICAnVU5JT05fVFlQRScgd2l0aGluIHdoaWNoIHRoZSBwb2ludGVyIHBvaW50cyksIGFuZCB0aGUKICAgICAnUFRSTUVNX0NTVF9NRU1CRVInIGlzIHRoZSBkZWNsYXJhdGlvbiBmb3IgdGhlIHBvaW50ZWQgdG8gb2JqZWN0LgogICAgIE5vdGUgdGhhdCB0aGUgJ0RFQ0xfQ09OVEVYVCcgZm9yIHRoZSAnUFRSTUVNX0NTVF9NRU1CRVInIGlzIGluCiAgICAgZ2VuZXJhbCBkaWZmZXJlbnQgZnJvbSB0aGUgJ1BUUk1FTV9DU1RfQ0xBU1MnLiAgRm9yIGV4YW1wbGUsIGdpdmVuOgogICAgICAgICAgc3RydWN0IEIgeyBpbnQgaTsgfTsKICAgICAgICAgIHN0cnVjdCBEIDogcHVibGljIEIge307CiAgICAgICAgICBpbnQgRDo6KmRwID0gJkQ6Omk7CiAgICAgVGhlICdQVFJNRU1fQ1NUX0NMQVNTJyBmb3IgJyZEOjppJyBpcyAnRCcsIGV2ZW4gdGhvdWdoIHRoZQogICAgICdERUNMX0NPTlRFWFQnIGZvciB0aGUgJ1BUUk1FTV9DU1RfTUVNQkVSJyBpcyAnQicsIHNpbmNlICdCOjppJyBpcwogICAgIGEgbWVtYmVyIG9mICdCJywgbm90ICdEJy4KCidWQVJfREVDTCcKCiAgICAgVGhlc2Ugbm9kZXMgcmVwcmVzZW50IHZhcmlhYmxlcywgaW5jbHVkaW5nIHN0YXRpYyBkYXRhIG1lbWJlcnMuCiAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24sICpub3RlIERlY2xhcmF0aW9uczo6LgoKJ05FR0FURV9FWFBSJwogICAgIFRoZXNlIG5vZGVzIHJlcHJlc2VudCB1bmFyeSBuZWdhdGlvbiBvZiB0aGUgc2luZ2xlIG9wZXJhbmQsIGZvcgogICAgIGJvdGggaW50ZWdlciBhbmQgZmxvYXRpbmctcG9pbnQgdHlwZXMuICBUaGUgdHlwZSBvZiBuZWdhdGlvbiBjYW4gYmUKICAgICBkZXRlcm1pbmVkIGJ5IGxvb2tpbmcgYXQgdGhlIHR5cGUgb2YgdGhlIGV4cHJlc3Npb24uCgogICAgIFRoZSBiZWhhdmlvciBvZiB0aGlzIG9wZXJhdGlvbiBvbiBzaWduZWQgYXJpdGhtZXRpYyBvdmVyZmxvdyBpcwogICAgIGNvbnRyb2xsZWQgYnkgdGhlICdmbGFnX3dyYXB2JyBhbmQgJ2ZsYWdfdHJhcHYnIHZhcmlhYmxlcy4KCidBQlNfRVhQUicKICAgICBUaGVzZSBub2RlcyByZXByZXNlbnQgdGhlIGFic29sdXRlIHZhbHVlIG9mIHRoZSBzaW5nbGUgb3BlcmFuZCwgZm9yCiAgICAgYm90aCBpbnRlZ2VyIGFuZCBmbG9hdGluZy1wb2ludCB0eXBlcy4gIFRoaXMgaXMgdHlwaWNhbGx5IHVzZWQgdG8KICAgICBpbXBsZW1lbnQgdGhlICdhYnMnLCAnbGFicycgYW5kICdsbGFicycgYnVpbHRpbnMgZm9yIGludGVnZXIgdHlwZXMsCiAgICAgYW5kIHRoZSAnZmFicycsICdmYWJzZicgYW5kICdmYWJzbCcgYnVpbHRpbnMgZm9yIGZsb2F0aW5nIHBvaW50CiAgICAgdHlwZXMuICBUaGUgdHlwZSBvZiBhYnMgb3BlcmF0aW9uIGNhbiBiZSBkZXRlcm1pbmVkIGJ5IGxvb2tpbmcgYXQKICAgICB0aGUgdHlwZSBvZiB0aGUgZXhwcmVzc2lvbi4KCiAgICAgVGhpcyBub2RlIGlzIG5vdCB1c2VkIGZvciBjb21wbGV4IHR5cGVzLiAgVG8gcmVwcmVzZW50IHRoZSBtb2R1bHVzCiAgICAgb3IgY29tcGxleCBhYnMgb2YgYSBjb21wbGV4IHZhbHVlLCB1c2UgdGhlICdCVUlMVF9JTl9DQUJTJywKICAgICAnQlVJTFRfSU5fQ0FCU0YnIG9yICdCVUlMVF9JTl9DQUJTTCcgYnVpbHRpbnMsIGFzIHVzZWQgdG8gaW1wbGVtZW50CiAgICAgdGhlIEM5OSAnY2FicycsICdjYWJzZicgYW5kICdjYWJzbCcgYnVpbHQtaW4gZnVuY3Rpb25zLgoKJ0JJVF9OT1RfRVhQUicKICAgICBUaGVzZSBub2RlcyByZXByZXNlbnQgYml0d2lzZSBjb21wbGVtZW50LCBhbmQgd2lsbCBhbHdheXMgaGF2ZQogICAgIGludGVncmFsIHR5cGUuICBUaGUgb25seSBvcGVyYW5kIGlzIHRoZSB2YWx1ZSB0byBiZSBjb21wbGVtZW50ZWQuCgonVFJVVEhfTk9UX0VYUFInCiAgICAgVGhlc2Ugbm9kZXMgcmVwcmVzZW50IGxvZ2ljYWwgbmVnYXRpb24sIGFuZCB3aWxsIGFsd2F5cyBoYXZlCiAgICAgaW50ZWdyYWwgKG9yIGJvb2xlYW4pIHR5cGUuICBUaGUgb3BlcmFuZCBpcyB0aGUgdmFsdWUgYmVpbmcKICAgICBuZWdhdGVkLiAgVGhlIHR5cGUgb2YgdGhlIG9wZXJhbmQgYW5kIHRoYXQgb2YgdGhlIHJlc3VsdCBhcmUgYWx3YXlzCiAgICAgb2YgJ0JPT0xFQU5fVFlQRScgb3IgJ0lOVEVHRVJfVFlQRScuCgonUFJFREVDUkVNRU5UX0VYUFInCidQUkVJTkNSRU1FTlRfRVhQUicKJ1BPU1RERUNSRU1FTlRfRVhQUicKJ1BPU1RJTkNSRU1FTlRfRVhQUicKICAgICBUaGVzZSBub2RlcyByZXByZXNlbnQgaW5jcmVtZW50IGFuZCBkZWNyZW1lbnQgZXhwcmVzc2lvbnMuICBUaGUKICAgICB2YWx1ZSBvZiB0aGUgc2luZ2xlIG9wZXJhbmQgaXMgY29tcHV0ZWQsIGFuZCB0aGUgb3BlcmFuZAogICAgIGluY3JlbWVudGVkIG9yIGRlY3JlbWVudGVkLiAgSW4gdGhlIGNhc2Ugb2YgJ1BSRURFQ1JFTUVOVF9FWFBSJyBhbmQKICAgICAnUFJFSU5DUkVNRU5UX0VYUFInLCB0aGUgdmFsdWUgb2YgdGhlIGV4cHJlc3Npb24gaXMgdGhlIHZhbHVlCiAgICAgcmVzdWx0aW5nIGFmdGVyIHRoZSBpbmNyZW1lbnQgb3IgZGVjcmVtZW50OyBpbiB0aGUgY2FzZSBvZgogICAgICdQT1NUREVDUkVNRU5UX0VYUFInIGFuZCAnUE9TVElOQ1JFTUVOVF9FWFBSJyBpcyB0aGUgdmFsdWUgYmVmb3JlCiAgICAgdGhlIGluY3JlbWVudCBvciBkZWNyZW1lbnQgb2NjdXJzLiAgVGhlIHR5cGUgb2YgdGhlIG9wZXJhbmQsIGxpa2UKICAgICB0aGF0IG9mIHRoZSByZXN1bHQsIHdpbGwgYmUgZWl0aGVyIGludGVncmFsLCBib29sZWFuLCBvcgogICAgIGZsb2F0aW5nLXBvaW50LgoKJ0FERFJfRVhQUicKICAgICBUaGVzZSBub2RlcyBhcmUgdXNlZCB0byByZXByZXNlbnQgdGhlIGFkZHJlc3Mgb2YgYW4gb2JqZWN0LiAgKFRoZXNlCiAgICAgZXhwcmVzc2lvbnMgd2lsbCBhbHdheXMgaGF2ZSBwb2ludGVyIG9yIHJlZmVyZW5jZSB0eXBlLikgIFRoZQogICAgIG9wZXJhbmQgbWF5IGJlIGFub3RoZXIgZXhwcmVzc2lvbiwgb3IgaXQgbWF5IGJlIGEgZGVjbGFyYXRpb24uCgogICAgIEFzIGFuIGV4dGVuc2lvbiwgR0NDIGFsbG93cyB1c2VycyB0byB0YWtlIHRoZSBhZGRyZXNzIG9mIGEgbGFiZWwuCiAgICAgSW4gdGhpcyBjYXNlLCB0aGUgb3BlcmFuZCBvZiB0aGUgJ0FERFJfRVhQUicgd2lsbCBiZSBhCiAgICAgJ0xBQkVMX0RFQ0wnLiAgVGhlIHR5cGUgb2Ygc3VjaCBhbiBleHByZXNzaW9uIGlzICd2b2lkKicuCgogICAgIElmIHRoZSBvYmplY3QgYWRkcmVzc2VkIGlzIG5vdCBhbiBsdmFsdWUsIGEgdGVtcG9yYXJ5IGlzIGNyZWF0ZWQsCiAgICAgYW5kIHRoZSBhZGRyZXNzIG9mIHRoZSB0ZW1wb3JhcnkgaXMgdXNlZC4KCidJTkRJUkVDVF9SRUYnCiAgICAgVGhlc2Ugbm9kZXMgYXJlIHVzZWQgdG8gcmVwcmVzZW50IHRoZSBvYmplY3QgcG9pbnRlZCB0byBieSBhCiAgICAgcG9pbnRlci4gIFRoZSBvcGVyYW5kIGlzIHRoZSBwb2ludGVyIGJlaW5nIGRlcmVmZXJlbmNlZDsgaXQgd2lsbAogICAgIGFsd2F5cyBoYXZlIHBvaW50ZXIgb3IgcmVmZXJlbmNlIHR5cGUuCgonRklYX1RSVU5DX0VYUFInCiAgICAgVGhlc2Ugbm9kZXMgcmVwcmVzZW50IGNvbnZlcnNpb24gb2YgYSBmbG9hdGluZy1wb2ludCB2YWx1ZSB0byBhbgogICAgIGludGVnZXIuICBUaGUgc2luZ2xlIG9wZXJhbmQgd2lsbCBoYXZlIGEgZmxvYXRpbmctcG9pbnQgdHlwZSwgd2hpbGUKICAgICB0aGUgY29tcGxldGUgZXhwcmVzc2lvbiB3aWxsIGhhdmUgYW4gaW50ZWdyYWwgKG9yIGJvb2xlYW4pIHR5cGUuCiAgICAgVGhlIG9wZXJhbmQgaXMgcm91bmRlZCB0b3dhcmRzIHplcm8uCgonRkxPQVRfRVhQUicKICAgICBUaGVzZSBub2RlcyByZXByZXNlbnQgY29udmVyc2lvbiBvZiBhbiBpbnRlZ3JhbCAob3IgYm9vbGVhbikgdmFsdWUKICAgICB0byBhIGZsb2F0aW5nLXBvaW50IHZhbHVlLiAgVGhlIHNpbmdsZSBvcGVyYW5kIHdpbGwgaGF2ZSBpbnRlZ3JhbAogICAgIHR5cGUsIHdoaWxlIHRoZSBjb21wbGV0ZSBleHByZXNzaW9uIHdpbGwgaGF2ZSBhIGZsb2F0aW5nLXBvaW50CiAgICAgdHlwZS4KCiAgICAgRklYTUU6IEhvdyBpcyB0aGUgb3BlcmFuZCBzdXBwb3NlZCB0byBiZSByb3VuZGVkPyAgSXMgdGhpcwogICAgIGRlcGVuZGVudCBvbiAnLW1pZWVlJz8KCidDT01QTEVYX0VYUFInCiAgICAgVGhlc2Ugbm9kZXMgYXJlIHVzZWQgdG8gcmVwcmVzZW50IGNvbXBsZXggbnVtYmVycyBjb25zdHJ1Y3RlZCBmcm9tCiAgICAgdHdvIGV4cHJlc3Npb25zIG9mIHRoZSBzYW1lIChpbnRlZ2VyIG9yIHJlYWwpIHR5cGUuICBUaGUgZmlyc3QKICAgICBvcGVyYW5kIGlzIHRoZSByZWFsIHBhcnQgYW5kIHRoZSBzZWNvbmQgb3BlcmFuZCBpcyB0aGUgaW1hZ2luYXJ5CiAgICAgcGFydC4KCidDT05KX0VYUFInCiAgICAgVGhlc2Ugbm9kZXMgcmVwcmVzZW50IHRoZSBjb25qdWdhdGUgb2YgdGhlaXIgb3BlcmFuZC4KCidSRUFMUEFSVF9FWFBSJwonSU1BR1BBUlRfRVhQUicKICAgICBUaGVzZSBub2RlcyByZXByZXNlbnQgcmVzcGVjdGl2ZWx5IHRoZSByZWFsIGFuZCB0aGUgaW1hZ2luYXJ5IHBhcnRzCiAgICAgb2YgY29tcGxleCBudW1iZXJzICh0aGVpciBzb2xlIGFyZ3VtZW50KS4KCidOT05fTFZBTFVFX0VYUFInCiAgICAgVGhlc2Ugbm9kZXMgaW5kaWNhdGUgdGhhdCB0aGVpciBvbmUgYW5kIG9ubHkgb3BlcmFuZCBpcyBub3QgYW4KICAgICBsdmFsdWUuICBBIGJhY2sgZW5kIGNhbiB0cmVhdCB0aGVzZSBpZGVudGljYWxseSB0byB0aGUgc2luZ2xlCiAgICAgb3BlcmFuZC4KCidOT1BfRVhQUicKICAgICBUaGVzZSBub2RlcyBhcmUgdXNlZCB0byByZXByZXNlbnQgY29udmVyc2lvbnMgdGhhdCBkbyBub3QgcmVxdWlyZQogICAgIGFueSBjb2RlLWdlbmVyYXRpb24uICBGb3IgZXhhbXBsZSwgY29udmVyc2lvbiBvZiBhICdjaGFyKicgdG8gYW4KICAgICAnaW50KicgZG9lcyBub3QgcmVxdWlyZSBhbnkgY29kZSBiZSBnZW5lcmF0ZWQ7IHN1Y2ggYSBjb252ZXJzaW9uIGlzCiAgICAgcmVwcmVzZW50ZWQgYnkgYSAnTk9QX0VYUFInLiAgVGhlIHNpbmdsZSBvcGVyYW5kIGlzIHRoZSBleHByZXNzaW9uCiAgICAgdG8gYmUgY29udmVydGVkLiAgVGhlIGNvbnZlcnNpb24gZnJvbSBhIHBvaW50ZXIgdG8gYSByZWZlcmVuY2UgaXMKICAgICBhbHNvIHJlcHJlc2VudGVkIHdpdGggYSAnTk9QX0VYUFInLgoKJ0NPTlZFUlRfRVhQUicKICAgICBUaGVzZSBub2RlcyBhcmUgc2ltaWxhciB0byAnTk9QX0VYUFIncywgYnV0IGFyZSB1c2VkIGluIHRob3NlCiAgICAgc2l0dWF0aW9ucyB3aGVyZSBjb2RlIG1heSBuZWVkIHRvIGJlIGdlbmVyYXRlZC4gIEZvciBleGFtcGxlLCBpZiBhbgogICAgICdpbnQqJyBpcyBjb252ZXJ0ZWQgdG8gYW4gJ2ludCcgY29kZSBtYXkgbmVlZCB0byBiZSBnZW5lcmF0ZWQgb24KICAgICBzb21lIHBsYXRmb3Jtcy4gIFRoZXNlIG5vZGVzIGFyZSBuZXZlciB1c2VkIGZvciBDKystc3BlY2lmaWMKICAgICBjb252ZXJzaW9ucywgbGlrZSBjb252ZXJzaW9ucyBiZXR3ZWVuIHBvaW50ZXJzIHRvIGRpZmZlcmVudCBjbGFzc2VzCiAgICAgaW4gYW4gaW5oZXJpdGFuY2UgaGllcmFyY2h5LiAgQW55IGFkanVzdG1lbnRzIHRoYXQgbmVlZCB0byBiZSBtYWRlCiAgICAgaW4gc3VjaCBjYXNlcyBhcmUgYWx3YXlzIGluZGljYXRlZCBleHBsaWNpdGx5LiAgU2ltaWxhcmx5LCBhCiAgICAgdXNlci1kZWZpbmVkIGNvbnZlcnNpb24gaXMgbmV2ZXIgcmVwcmVzZW50ZWQgYnkgYSAnQ09OVkVSVF9FWFBSJzsKICAgICBpbnN0ZWFkLCB0aGUgZnVuY3Rpb24gY2FsbHMgYXJlIG1hZGUgZXhwbGljaXQuCgonRklYRURfQ09OVkVSVF9FWFBSJwogICAgIFRoZXNlIG5vZGVzIGFyZSB1c2VkIHRvIHJlcHJlc2VudCBjb252ZXJzaW9ucyB0aGF0IGludm9sdmUKICAgICBmaXhlZC1wb2ludCB2YWx1ZXMuICBGb3IgZXhhbXBsZSwgZnJvbSBhIGZpeGVkLXBvaW50IHZhbHVlIHRvCiAgICAgYW5vdGhlciBmaXhlZC1wb2ludCB2YWx1ZSwgZnJvbSBhbiBpbnRlZ2VyIHRvIGEgZml4ZWQtcG9pbnQgdmFsdWUsCiAgICAgZnJvbSBhIGZpeGVkLXBvaW50IHZhbHVlIHRvIGFuIGludGVnZXIsIGZyb20gYSBmbG9hdGluZy1wb2ludCB2YWx1ZQogICAgIHRvIGEgZml4ZWQtcG9pbnQgdmFsdWUsIG9yIGZyb20gYSBmaXhlZC1wb2ludCB2YWx1ZSB0byBhCiAgICAgZmxvYXRpbmctcG9pbnQgdmFsdWUuCgonVEhST1dfRVhQUicKICAgICBUaGVzZSBub2RlcyByZXByZXNlbnQgJ3Rocm93JyBleHByZXNzaW9ucy4gIFRoZSBzaW5nbGUgb3BlcmFuZCBpcwogICAgIGFuIGV4cHJlc3Npb24gZm9yIHRoZSBjb2RlIHRoYXQgc2hvdWxkIGJlIGV4ZWN1dGVkIHRvIHRocm93IHRoZQogICAgIGV4Y2VwdGlvbi4gIEhvd2V2ZXIsIHRoZXJlIGlzIG9uZSBpbXBsaWNpdCBhY3Rpb24gbm90IHJlcHJlc2VudGVkCiAgICAgaW4gdGhhdCBleHByZXNzaW9uOyBuYW1lbHkgdGhlIGNhbGwgdG8gJ19fdGhyb3cnLiAgVGhpcyBmdW5jdGlvbgogICAgIHRha2VzIG5vIGFyZ3VtZW50cy4gIElmICdzZXRqbXAnLydsb25nam1wJyBleGNlcHRpb25zIGFyZSB1c2VkLCB0aGUKICAgICBmdW5jdGlvbiAnX19zanRocm93JyBpcyBjYWxsZWQgaW5zdGVhZC4gIFRoZSBub3JtYWwgR0NDIGJhY2sgZW5kCiAgICAgdXNlcyB0aGUgZnVuY3Rpb24gJ2VtaXRfdGhyb3cnIHRvIGdlbmVyYXRlIHRoaXMgY29kZTsgeW91IGNhbgogICAgIGV4YW1pbmUgdGhpcyBmdW5jdGlvbiB0byBzZWUgd2hhdCBuZWVkcyB0byBiZSBkb25lLgoKJ0xTSElGVF9FWFBSJwonUlNISUZUX0VYUFInCiAgICAgVGhlc2Ugbm9kZXMgcmVwcmVzZW50IGxlZnQgYW5kIHJpZ2h0IHNoaWZ0cywgcmVzcGVjdGl2ZWx5LiAgVGhlCiAgICAgZmlyc3Qgb3BlcmFuZCBpcyB0aGUgdmFsdWUgdG8gc2hpZnQ7IGl0IHdpbGwgYWx3YXlzIGJlIG9mIGludGVncmFsCiAgICAgdHlwZS4gIFRoZSBzZWNvbmQgb3BlcmFuZCBpcyBhbiBleHByZXNzaW9uIGZvciB0aGUgbnVtYmVyIG9mIGJpdHMKICAgICBieSB3aGljaCB0byBzaGlmdC4gIFJpZ2h0IHNoaWZ0IHNob3VsZCBiZSB0cmVhdGVkIGFzIGFyaXRobWV0aWMsCiAgICAgaS5lLiwgdGhlIGhpZ2gtb3JkZXIgYml0cyBzaG91bGQgYmUgemVyby1maWxsZWQgd2hlbiB0aGUgZXhwcmVzc2lvbgogICAgIGhhcyB1bnNpZ25lZCB0eXBlIGFuZCBmaWxsZWQgd2l0aCB0aGUgc2lnbiBiaXQgd2hlbiB0aGUgZXhwcmVzc2lvbgogICAgIGhhcyBzaWduZWQgdHlwZS4gIE5vdGUgdGhhdCB0aGUgcmVzdWx0IGlzIHVuZGVmaW5lZCBpZiB0aGUgc2Vjb25kCiAgICAgb3BlcmFuZCBpcyBsYXJnZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgZmlyc3Qgb3BlcmFuZCdzIHR5cGUgc2l6ZS4KCidCSVRfSU9SX0VYUFInCidCSVRfWE9SX0VYUFInCidCSVRfQU5EX0VYUFInCiAgICAgVGhlc2Ugbm9kZXMgcmVwcmVzZW50IGJpdHdpc2UgaW5jbHVzaXZlIG9yLCBiaXR3aXNlIGV4Y2x1c2l2ZSBvciwKICAgICBhbmQgYml0d2lzZSBhbmQsIHJlc3BlY3RpdmVseS4gIEJvdGggb3BlcmFuZHMgd2lsbCBhbHdheXMgaGF2ZQogICAgIGludGVncmFsIHR5cGUuCgonVFJVVEhfQU5ESUZfRVhQUicKJ1RSVVRIX09SSUZfRVhQUicKICAgICBUaGVzZSBub2RlcyByZXByZXNlbnQgbG9naWNhbCAiYW5kIiBhbmQgbG9naWNhbCAib3IiLCByZXNwZWN0aXZlbHkuCiAgICAgVGhlc2Ugb3BlcmF0b3JzIGFyZSBub3Qgc3RyaWN0OyBpLmUuLCB0aGUgc2Vjb25kIG9wZXJhbmQgaXMKICAgICBldmFsdWF0ZWQgb25seSBpZiB0aGUgdmFsdWUgb2YgdGhlIGV4cHJlc3Npb24gaXMgbm90IGRldGVybWluZWQgYnkKICAgICBldmFsdWF0aW9uIG9mIHRoZSBmaXJzdCBvcGVyYW5kLiAgVGhlIHR5cGUgb2YgdGhlIG9wZXJhbmRzIGFuZCB0aGF0CiAgICAgb2YgdGhlIHJlc3VsdCBhcmUgYWx3YXlzIG9mICdCT09MRUFOX1RZUEUnIG9yICdJTlRFR0VSX1RZUEUnLgoKJ1RSVVRIX0FORF9FWFBSJwonVFJVVEhfT1JfRVhQUicKJ1RSVVRIX1hPUl9FWFBSJwogICAgIFRoZXNlIG5vZGVzIHJlcHJlc2VudCBsb2dpY2FsIGFuZCwgbG9naWNhbCBvciwgYW5kIGxvZ2ljYWwKICAgICBleGNsdXNpdmUgb3IuICBUaGV5IGFyZSBzdHJpY3Q7IGJvdGggYXJndW1lbnRzIGFyZSBhbHdheXMKICAgICBldmFsdWF0ZWQuICBUaGVyZSBhcmUgbm8gY29ycmVzcG9uZGluZyBvcGVyYXRvcnMgaW4gQyBvciBDKyssIGJ1dAogICAgIHRoZSBmcm9udCBlbmQgd2lsbCBzb21ldGltZXMgZ2VuZXJhdGUgdGhlc2UgZXhwcmVzc2lvbnMgYW55aG93LCBpZgogICAgIGl0IGNhbiB0ZWxsIHRoYXQgc3RyaWN0bmVzcyBkb2VzIG5vdCBtYXR0ZXIuICBUaGUgdHlwZSBvZiB0aGUKICAgICBvcGVyYW5kcyBhbmQgdGhhdCBvZiB0aGUgcmVzdWx0IGFyZSBhbHdheXMgb2YgJ0JPT0xFQU5fVFlQRScgb3IKICAgICAnSU5URUdFUl9UWVBFJy4KCidQT0lOVEVSX1BMVVNfRVhQUicKJ1BPSU5URVJfUExVU19FWFBSJwogICAgIFRoaXMgbm9kZSByZXByZXNlbnRzIHBvaW50ZXIgYXJpdGhtZXRpYy4gIFRoZSBmaXJzdCBvcGVyYW5kIGlzCiAgICAgYWx3YXlzIGEgcG9pbnRlci9yZWZlcmVuY2UgdHlwZS4gIFRoZSBzZWNvbmQgb3BlcmFuZCBpcyBhbHdheXMgYW4KICAgICB1bnNpZ25lZCBpbnRlZ2VyIHR5cGUgY29tcGF0aWJsZSB3aXRoIHNpemV0eXBlLiAgVGhpcyBpcyB0aGUgb25seQogICAgIGJpbmFyeSBhcml0aG1ldGljIG9wZXJhbmQgdGhhdCBjYW4gb3BlcmF0ZSBvbiBwb2ludGVyIHR5cGVzLgoKJ1BMVVNfRVhQUicKJ1BMVVNfRVhQUicKJ01JTlVTX0VYUFInCidNSU5VU19FWFBSJwonTVVMVF9FWFBSJwonTVVMVF9FWFBSJwogICAgIFRoZXNlIG5vZGVzIHJlcHJlc2VudCB2YXJpb3VzIGJpbmFyeSBhcml0aG1ldGljIG9wZXJhdGlvbnMuCiAgICAgUmVzcGVjdGl2ZWx5LCB0aGVzZSBvcGVyYXRpb25zIGFyZSBhZGRpdGlvbiwgc3VidHJhY3Rpb24gKG9mIHRoZQogICAgIHNlY29uZCBvcGVyYW5kIGZyb20gdGhlIGZpcnN0KSBhbmQgbXVsdGlwbGljYXRpb24uICBUaGVpciBvcGVyYW5kcwogICAgIG1heSBoYXZlIGVpdGhlciBpbnRlZ3JhbCBvciBmbG9hdGluZyB0eXBlLCBidXQgdGhlcmUgd2lsbCBuZXZlciBiZQogICAgIGNhc2UgaW4gd2hpY2ggb25lIG9wZXJhbmQgaXMgb2YgZmxvYXRpbmcgdHlwZSBhbmQgdGhlIG90aGVyIGlzIG9mCiAgICAgaW50ZWdyYWwgdHlwZS4KCiAgICAgVGhlIGJlaGF2aW9yIG9mIHRoZXNlIG9wZXJhdGlvbnMgb24gc2lnbmVkIGFyaXRobWV0aWMgb3ZlcmZsb3cgaXMKICAgICBjb250cm9sbGVkIGJ5IHRoZSAnZmxhZ193cmFwdicgYW5kICdmbGFnX3RyYXB2JyB2YXJpYWJsZXMuCgonUkRJVl9FWFBSJwogICAgIFRoaXMgbm9kZSByZXByZXNlbnRzIGEgZmxvYXRpbmcgcG9pbnQgZGl2aXNpb24gb3BlcmF0aW9uLgoKJ1RSVU5DX0RJVl9FWFBSJwonRkxPT1JfRElWX0VYUFInCidDRUlMX0RJVl9FWFBSJwonUk9VTkRfRElWX0VYUFInCiAgICAgVGhlc2Ugbm9kZXMgcmVwcmVzZW50IGludGVnZXIgZGl2aXNpb24gb3BlcmF0aW9ucyB0aGF0IHJldHVybiBhbgogICAgIGludGVnZXIgcmVzdWx0LiAgJ1RSVU5DX0RJVl9FWFBSJyByb3VuZHMgdG93YXJkcyB6ZXJvLAogICAgICdGTE9PUl9ESVZfRVhQUicgcm91bmRzIHRvd2FyZHMgbmVnYXRpdmUgaW5maW5pdHksICdDRUlMX0RJVl9FWFBSJwogICAgIHJvdW5kcyB0b3dhcmRzIHBvc2l0aXZlIGluZmluaXR5IGFuZCAnUk9VTkRfRElWX0VYUFInIHJvdW5kcyB0byB0aGUKICAgICBjbG9zZXN0IGludGVnZXIuICBJbnRlZ2VyIGRpdmlzaW9uIGluIEMgYW5kIEMrKyBpcyB0cnVuY2F0aW5nLCBpLmUuCiAgICAgJ1RSVU5DX0RJVl9FWFBSJy4KCiAgICAgVGhlIGJlaGF2aW9yIG9mIHRoZXNlIG9wZXJhdGlvbnMgb24gc2lnbmVkIGFyaXRobWV0aWMgb3ZlcmZsb3csCiAgICAgd2hlbiBkaXZpZGluZyB0aGUgbWluaW11bSBzaWduZWQgaW50ZWdlciBieSBtaW51cyBvbmUsIGlzCiAgICAgY29udHJvbGxlZCBieSB0aGUgJ2ZsYWdfd3JhcHYnIGFuZCAnZmxhZ190cmFwdicgdmFyaWFibGVzLgoKJ1RSVU5DX01PRF9FWFBSJwonRkxPT1JfTU9EX0VYUFInCidDRUlMX01PRF9FWFBSJwonUk9VTkRfTU9EX0VYUFInCiAgICAgVGhlc2Ugbm9kZXMgcmVwcmVzZW50IHRoZSBpbnRlZ2VyIHJlbWFpbmRlciBvciBtb2R1bHVzIG9wZXJhdGlvbi4KICAgICBUaGUgaW50ZWdlciBtb2R1bHVzIG9mIHR3byBvcGVyYW5kcyAnYScgYW5kICdiJyBpcyBkZWZpbmVkIGFzICdhIC0KICAgICAoYS9iKSpiJyB3aGVyZSB0aGUgZGl2aXNpb24gY2FsY3VsYXRlZCB1c2luZyB0aGUgY29ycmVzcG9uZGluZwogICAgIGRpdmlzaW9uIG9wZXJhdG9yLiAgSGVuY2UgZm9yICdUUlVOQ19NT0RfRVhQUicgdGhpcyBkZWZpbml0aW9uCiAgICAgYXNzdW1lcyBkaXZpc2lvbiB1c2luZyB0cnVuY2F0aW9uIHRvd2FyZHMgemVybywgaS5lLgogICAgICdUUlVOQ19ESVZfRVhQUicuICBJbnRlZ2VyIHJlbWFpbmRlciBpbiBDIGFuZCBDKysgdXNlcyB0cnVuY2F0aW5nCiAgICAgZGl2aXNpb24sIGkuZS4gJ1RSVU5DX01PRF9FWFBSJy4KCidFWEFDVF9ESVZfRVhQUicKICAgICBUaGUgJ0VYQUNUX0RJVl9FWFBSJyBjb2RlIGlzIHVzZWQgdG8gcmVwcmVzZW50IGludGVnZXIgZGl2aXNpb25zCiAgICAgd2hlcmUgdGhlIG51bWVyYXRvciBpcyBrbm93biB0byBiZSBhbiBleGFjdCBtdWx0aXBsZSBvZiB0aGUKICAgICBkZW5vbWluYXRvci4gIFRoaXMgYWxsb3dzIHRoZSBiYWNrZW5kIHRvIGNob29zZSBiZXR3ZWVuIHRoZSBmYXN0ZXIKICAgICBvZiAnVFJVTkNfRElWX0VYUFInLCAnQ0VJTF9ESVZfRVhQUicgYW5kICdGTE9PUl9ESVZfRVhQUicgZm9yIHRoZQogICAgIGN1cnJlbnQgdGFyZ2V0LgoKJ0FSUkFZX1JFRicKICAgICBUaGVzZSBub2RlcyByZXByZXNlbnQgYXJyYXkgYWNjZXNzZXMuICBUaGUgZmlyc3Qgb3BlcmFuZCBpcyB0aGUKICAgICBhcnJheTsgdGhlIHNlY29uZCBpcyB0aGUgaW5kZXguICBUbyBjYWxjdWxhdGUgdGhlIGFkZHJlc3Mgb2YgdGhlCiAgICAgbWVtb3J5IGFjY2Vzc2VkLCB5b3UgbXVzdCBzY2FsZSB0aGUgaW5kZXggYnkgdGhlIHNpemUgb2YgdGhlIHR5cGUKICAgICBvZiB0aGUgYXJyYXkgZWxlbWVudHMuICBUaGUgdHlwZSBvZiB0aGVzZSBleHByZXNzaW9ucyBtdXN0IGJlIHRoZQogICAgIHR5cGUgb2YgYSBjb21wb25lbnQgb2YgdGhlIGFycmF5LiAgVGhlIHRoaXJkIGFuZCBmb3VydGggb3BlcmFuZHMKICAgICBhcmUgdXNlZCBhZnRlciBnaW1wbGlmaWNhdGlvbiB0byByZXByZXNlbnQgdGhlIGxvd2VyIGJvdW5kIGFuZAogICAgIGNvbXBvbmVudCBzaXplIGJ1dCBzaG91bGQgbm90IGJlIHVzZWQgZGlyZWN0bHk7IGNhbGwKICAgICAnYXJyYXlfcmVmX2xvd19ib3VuZCcgYW5kICdhcnJheV9yZWZfZWxlbWVudF9zaXplJyBpbnN0ZWFkLgoKJ0FSUkFZX1JBTkdFX1JFRicKICAgICBUaGVzZSBub2RlcyByZXByZXNlbnQgYWNjZXNzIHRvIGEgcmFuZ2UgKG9yICJzbGljZSIpIG9mIGFuIGFycmF5LgogICAgIFRoZSBvcGVyYW5kcyBhcmUgdGhlIHNhbWUgYXMgdGhhdCBmb3IgJ0FSUkFZX1JFRicgYW5kIGhhdmUgdGhlIHNhbWUKICAgICBtZWFuaW5ncy4gIFRoZSB0eXBlIG9mIHRoZXNlIGV4cHJlc3Npb25zIG11c3QgYmUgYW4gYXJyYXkgd2hvc2UKICAgICBjb21wb25lbnQgdHlwZSBpcyB0aGUgc2FtZSBhcyB0aGF0IG9mIHRoZSBmaXJzdCBvcGVyYW5kLiAgVGhlIHJhbmdlCiAgICAgb2YgdGhhdCBhcnJheSB0eXBlIGRldGVybWluZXMgdGhlIGFtb3VudCBvZiBkYXRhIHRoZXNlIGV4cHJlc3Npb25zCiAgICAgYWNjZXNzLgoKJ1RBUkdFVF9NRU1fUkVGJwogICAgIFRoZXNlIG5vZGVzIHJlcHJlc2VudCBtZW1vcnkgYWNjZXNzZXMgd2hvc2UgYWRkcmVzcyBkaXJlY3RseSBtYXAgdG8KICAgICBhbiBhZGRyZXNzaW5nIG1vZGUgb2YgdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuICBUaGUgZmlyc3QgYXJndW1lbnQKICAgICBpcyAnVE1SX1NZTUJPTCcgYW5kIG11c3QgYmUgYSAnVkFSX0RFQ0wnIG9mIGFuIG9iamVjdCB3aXRoIGEgZml4ZWQKICAgICBhZGRyZXNzLiAgVGhlIHNlY29uZCBhcmd1bWVudCBpcyAnVE1SX0JBU0UnIGFuZCB0aGUgdGhpcmQgb25lIGlzCiAgICAgJ1RNUl9JTkRFWCcuICBUaGUgZm91cnRoIGFyZ3VtZW50IGlzICdUTVJfU1RFUCcgYW5kIG11c3QgYmUgYW4KICAgICAnSU5URUdFUl9DU1QnLiAgVGhlIGZpZnRoIGFyZ3VtZW50IGlzICdUTVJfT0ZGU0VUJyBhbmQgbXVzdCBiZSBhbgogICAgICdJTlRFR0VSX0NTVCcuICBBbnkgb2YgdGhlIGFyZ3VtZW50cyBtYXkgYmUgTlVMTCBpZiB0aGUgYXBwcm9wcmlhdGUKICAgICBjb21wb25lbnQgZG9lcyBub3QgYXBwZWFyIGluIHRoZSBhZGRyZXNzLiAgQWRkcmVzcyBvZiB0aGUKICAgICAnVEFSR0VUX01FTV9SRUYnIGlzIGRldGVybWluZWQgaW4gdGhlIGZvbGxvd2luZyB3YXkuCgogICAgICAgICAgJlRNUl9TWU1CT0wgKyBUTVJfQkFTRSArIFRNUl9JTkRFWCAqIFRNUl9TVEVQICsgVE1SX09GRlNFVAoKICAgICBUaGUgc2l4dGggYXJndW1lbnQgaXMgdGhlIHJlZmVyZW5jZSB0byB0aGUgb3JpZ2luYWwgbWVtb3J5IGFjY2VzcywKICAgICB3aGljaCBpcyBwcmVzZXJ2ZWQgZm9yIHRoZSBwdXJwb3NlcyBvZiB0aGUgUlRMIGFsaWFzIGFuYWx5c2lzLiAgVGhlCiAgICAgc2V2ZW50aCBhcmd1bWVudCBpcyBhIHRhZyByZXByZXNlbnRpbmcgdGhlIHJlc3VsdHMgb2YgdHJlZSBsZXZlbAogICAgIGFsaWFzIGFuYWx5c2lzLgoKJ0xUX0VYUFInCidMRV9FWFBSJwonR1RfRVhQUicKJ0dFX0VYUFInCidFUV9FWFBSJwonTkVfRVhQUicKICAgICBUaGVzZSBub2RlcyByZXByZXNlbnQgdGhlIGxlc3MgdGhhbiwgbGVzcyB0aGFuIG9yIGVxdWFsIHRvLCBncmVhdGVyCiAgICAgdGhhbiwgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvLCBlcXVhbCwgYW5kIG5vdCBlcXVhbCBjb21wYXJpc29uCiAgICAgb3BlcmF0b3JzLiAgVGhlIGZpcnN0IGFuZCBzZWNvbmQgb3BlcmFuZCB3aXRoIGVpdGhlciBiZSBib3RoIG9mCiAgICAgaW50ZWdyYWwgdHlwZSBvciBib3RoIG9mIGZsb2F0aW5nIHR5cGUuICBUaGUgcmVzdWx0IHR5cGUgb2YgdGhlc2UKICAgICBleHByZXNzaW9ucyB3aWxsIGFsd2F5cyBiZSBvZiBpbnRlZ3JhbCBvciBib29sZWFuIHR5cGUuICBUaGVzZQogICAgIG9wZXJhdGlvbnMgcmV0dXJuIHRoZSByZXN1bHQgdHlwZSdzIHplcm8gdmFsdWUgZm9yIGZhbHNlLCBhbmQgdGhlCiAgICAgcmVzdWx0IHR5cGUncyBvbmUgdmFsdWUgZm9yIHRydWUuCgogICAgIEZvciBmbG9hdGluZyBwb2ludCBjb21wYXJpc29ucywgaWYgd2UgaG9ub3IgSUVFRSBOYU5zIGFuZCBlaXRoZXIKICAgICBvcGVyYW5kIGlzIE5hTiwgdGhlbiAnTkVfRVhQUicgYWx3YXlzIHJldHVybnMgdHJ1ZSBhbmQgdGhlCiAgICAgcmVtYWluaW5nIG9wZXJhdG9ycyBhbHdheXMgcmV0dXJuIGZhbHNlLiAgT24gc29tZSB0YXJnZXRzLAogICAgIGNvbXBhcmlzb25zIGFnYWluc3QgYW4gSUVFRSBOYU4sIG90aGVyIHRoYW4gZXF1YWxpdHkgYW5kCiAgICAgaW5lcXVhbGl0eSwgbWF5IGdlbmVyYXRlIGEgZmxvYXRpbmcgcG9pbnQgZXhjZXB0aW9uLgoKJ09SREVSRURfRVhQUicKJ1VOT1JERVJFRF9FWFBSJwogICAgIFRoZXNlIG5vZGVzIHJlcHJlc2VudCBub24tdHJhcHBpbmcgb3JkZXJlZCBhbmQgdW5vcmRlcmVkIGNvbXBhcmlzb24KICAgICBvcGVyYXRvcnMuICBUaGVzZSBvcGVyYXRpb25zIHRha2UgdHdvIGZsb2F0aW5nIHBvaW50IG9wZXJhbmRzIGFuZAogICAgIGRldGVybWluZSB3aGV0aGVyIHRoZXkgYXJlIG9yZGVyZWQgb3IgdW5vcmRlcmVkIHJlbGF0aXZlIHRvIGVhY2gKICAgICBvdGhlci4gIElmIGVpdGhlciBvcGVyYW5kIGlzIGFuIElFRUUgTmFOLCB0aGVpciBjb21wYXJpc29uIGlzCiAgICAgZGVmaW5lZCB0byBiZSB1bm9yZGVyZWQsIG90aGVyd2lzZSB0aGUgY29tcGFyaXNvbiBpcyBkZWZpbmVkIHRvIGJlCiAgICAgb3JkZXJlZC4gIFRoZSByZXN1bHQgdHlwZSBvZiB0aGVzZSBleHByZXNzaW9ucyB3aWxsIGFsd2F5cyBiZSBvZgogICAgIGludGVncmFsIG9yIGJvb2xlYW4gdHlwZS4gIFRoZXNlIG9wZXJhdGlvbnMgcmV0dXJuIHRoZSByZXN1bHQKICAgICB0eXBlJ3MgemVybyB2YWx1ZSBmb3IgZmFsc2UsIGFuZCB0aGUgcmVzdWx0IHR5cGUncyBvbmUgdmFsdWUgZm9yCiAgICAgdHJ1ZS4KCidVTkxUX0VYUFInCidVTkxFX0VYUFInCidVTkdUX0VYUFInCidVTkdFX0VYUFInCidVTkVRX0VYUFInCidMVEdUX0VYUFInCiAgICAgVGhlc2Ugbm9kZXMgcmVwcmVzZW50IHRoZSB1bm9yZGVyZWQgY29tcGFyaXNvbiBvcGVyYXRvcnMuICBUaGVzZQogICAgIG9wZXJhdGlvbnMgdGFrZSB0d28gZmxvYXRpbmcgcG9pbnQgb3BlcmFuZHMgYW5kIGRldGVybWluZSB3aGV0aGVyCiAgICAgdGhlIG9wZXJhbmRzIGFyZSB1bm9yZGVyZWQgb3IgYXJlIGxlc3MgdGhhbiwgbGVzcyB0aGFuIG9yIGVxdWFsIHRvLAogICAgIGdyZWF0ZXIgdGhhbiwgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvLCBvciBlcXVhbCByZXNwZWN0aXZlbHkuICBGb3IKICAgICBleGFtcGxlLCAnVU5MVF9FWFBSJyByZXR1cm5zIHRydWUgaWYgZWl0aGVyIG9wZXJhbmQgaXMgYW4gSUVFRSBOYU4KICAgICBvciB0aGUgZmlyc3Qgb3BlcmFuZCBpcyBsZXNzIHRoYW4gdGhlIHNlY29uZC4gIFdpdGggdGhlIHBvc3NpYmxlCiAgICAgZXhjZXB0aW9uIG9mICdMVEdUX0VYUFInLCBhbGwgb2YgdGhlc2Ugb3BlcmF0aW9ucyBhcmUgZ3VhcmFudGVlZAogICAgIG5vdCB0byBnZW5lcmF0ZSBhIGZsb2F0aW5nIHBvaW50IGV4Y2VwdGlvbi4gIFRoZSByZXN1bHQgdHlwZSBvZgogICAgIHRoZXNlIGV4cHJlc3Npb25zIHdpbGwgYWx3YXlzIGJlIG9mIGludGVncmFsIG9yIGJvb2xlYW4gdHlwZS4KICAgICBUaGVzZSBvcGVyYXRpb25zIHJldHVybiB0aGUgcmVzdWx0IHR5cGUncyB6ZXJvIHZhbHVlIGZvciBmYWxzZSwgYW5kCiAgICAgdGhlIHJlc3VsdCB0eXBlJ3Mgb25lIHZhbHVlIGZvciB0cnVlLgoKJ01PRElGWV9FWFBSJwogICAgIFRoZXNlIG5vZGVzIHJlcHJlc2VudCBhc3NpZ25tZW50LiAgVGhlIGxlZnQtaGFuZCBzaWRlIGlzIHRoZSBmaXJzdAogICAgIG9wZXJhbmQ7IHRoZSByaWdodC1oYW5kIHNpZGUgaXMgdGhlIHNlY29uZCBvcGVyYW5kLiAgVGhlIGxlZnQtaGFuZAogICAgIHNpZGUgd2lsbCBiZSBhICdWQVJfREVDTCcsICdJTkRJUkVDVF9SRUYnLCAnQ09NUE9ORU5UX1JFRicsIG9yCiAgICAgb3RoZXIgbHZhbHVlLgoKICAgICBUaGVzZSBub2RlcyBhcmUgdXNlZCB0byByZXByZXNlbnQgbm90IG9ubHkgYXNzaWdubWVudCB3aXRoICc9JyBidXQKICAgICBhbHNvIGNvbXBvdW5kIGFzc2lnbm1lbnRzIChsaWtlICcrPScpLCBieSByZWR1Y3Rpb24gdG8gJz0nCiAgICAgYXNzaWdubWVudC4gIEluIG90aGVyIHdvcmRzLCB0aGUgcmVwcmVzZW50YXRpb24gZm9yICdpICs9IDMnIGxvb2tzCiAgICAganVzdCBsaWtlIHRoYXQgZm9yICdpID0gaSArIDMnLgoKJ0lOSVRfRVhQUicKICAgICBUaGVzZSBub2RlcyBhcmUganVzdCBsaWtlICdNT0RJRllfRVhQUicsIGJ1dCBhcmUgdXNlZCBvbmx5IHdoZW4gYQogICAgIHZhcmlhYmxlIGlzIGluaXRpYWxpemVkLCByYXRoZXIgdGhhbiBhc3NpZ25lZCB0byBzdWJzZXF1ZW50bHkuCiAgICAgVGhpcyBtZWFucyB0aGF0IHdlIGNhbiBhc3N1bWUgdGhhdCB0aGUgdGFyZ2V0IG9mIHRoZSBpbml0aWFsaXphdGlvbgogICAgIGlzIG5vdCB1c2VkIGluIGNvbXB1dGluZyBpdHMgb3duIHZhbHVlOyBhbnkgcmVmZXJlbmNlIHRvIHRoZSBsaHMgaW4KICAgICBjb21wdXRpbmcgdGhlIHJocyBpcyB1bmRlZmluZWQuCgonQ09NUE9ORU5UX1JFRicKICAgICBUaGVzZSBub2RlcyByZXByZXNlbnQgbm9uLXN0YXRpYyBkYXRhIG1lbWJlciBhY2Nlc3Nlcy4gIFRoZSBmaXJzdAogICAgIG9wZXJhbmQgaXMgdGhlIG9iamVjdCAocmF0aGVyIHRoYW4gYSBwb2ludGVyIHRvIGl0KTsgdGhlIHNlY29uZAogICAgIG9wZXJhbmQgaXMgdGhlICdGSUVMRF9ERUNMJyBmb3IgdGhlIGRhdGEgbWVtYmVyLiAgVGhlIHRoaXJkIG9wZXJhbmQKICAgICByZXByZXNlbnRzIHRoZSBieXRlIG9mZnNldCBvZiB0aGUgZmllbGQsIGJ1dCBzaG91bGQgbm90IGJlIHVzZWQKICAgICBkaXJlY3RseTsgY2FsbCAnY29tcG9uZW50X3JlZl9maWVsZF9vZmZzZXQnIGluc3RlYWQuCgonQ09NUE9VTkRfRVhQUicKICAgICBUaGVzZSBub2RlcyByZXByZXNlbnQgY29tbWEtZXhwcmVzc2lvbnMuICBUaGUgZmlyc3Qgb3BlcmFuZCBpcyBhbgogICAgIGV4cHJlc3Npb24gd2hvc2UgdmFsdWUgaXMgY29tcHV0ZWQgYW5kIHRocm93biBhd2F5IHByaW9yIHRvIHRoZQogICAgIGV2YWx1YXRpb24gb2YgdGhlIHNlY29uZCBvcGVyYW5kLiAgVGhlIHZhbHVlIG9mIHRoZSBlbnRpcmUKICAgICBleHByZXNzaW9uIGlzIHRoZSB2YWx1ZSBvZiB0aGUgc2Vjb25kIG9wZXJhbmQuCgonQ09ORF9FWFBSJwogICAgIFRoZXNlIG5vZGVzIHJlcHJlc2VudCAnPzonIGV4cHJlc3Npb25zLiAgVGhlIGZpcnN0IG9wZXJhbmQgaXMgb2YKICAgICBib29sZWFuIG9yIGludGVncmFsIHR5cGUuICBJZiBpdCBldmFsdWF0ZXMgdG8gYSBub256ZXJvIHZhbHVlLCB0aGUKICAgICBzZWNvbmQgb3BlcmFuZCBzaG91bGQgYmUgZXZhbHVhdGVkLCBhbmQgcmV0dXJuZWQgYXMgdGhlIHZhbHVlIG9mCiAgICAgdGhlIGV4cHJlc3Npb24uICBPdGhlcndpc2UsIHRoZSB0aGlyZCBvcGVyYW5kIGlzIGV2YWx1YXRlZCwgYW5kCiAgICAgcmV0dXJuZWQgYXMgdGhlIHZhbHVlIG9mIHRoZSBleHByZXNzaW9uLgoKICAgICBUaGUgc2Vjb25kIG9wZXJhbmQgbXVzdCBoYXZlIHRoZSBzYW1lIHR5cGUgYXMgdGhlIGVudGlyZQogICAgIGV4cHJlc3Npb24sIHVubGVzcyBpdCB1bmNvbmRpdGlvbmFsbHkgdGhyb3dzIGFuIGV4Y2VwdGlvbiBvciBjYWxscwogICAgIGEgbm9yZXR1cm4gZnVuY3Rpb24sIGluIHdoaWNoIGNhc2UgaXQgc2hvdWxkIGhhdmUgdm9pZCB0eXBlLiAgVGhlCiAgICAgc2FtZSBjb25zdHJhaW50cyBhcHBseSB0byB0aGUgdGhpcmQgb3BlcmFuZC4gIFRoaXMgYWxsb3dzIGFycmF5CiAgICAgYm91bmRzIGNoZWNrcyB0byBiZSByZXByZXNlbnRlZCBjb252ZW5pZW50bHkgYXMgJyhpID49IDAgJiYgaSA8IDEwKQogICAgID8gaSA6IGFib3J0KCknLgoKICAgICBBcyBhIEdOVSBleHRlbnNpb24sIHRoZSBDIGxhbmd1YWdlIGZyb250LWVuZHMgYWxsb3cgdGhlIHNlY29uZAogICAgIG9wZXJhbmQgb2YgdGhlICc/Oicgb3BlcmF0b3IgbWF5IGJlIG9taXR0ZWQgaW4gdGhlIHNvdXJjZS4gIEZvcgogICAgIGV4YW1wbGUsICd4ID8gOiAzJyBpcyBlcXVpdmFsZW50IHRvICd4ID8geCA6IDMnLCBhc3N1bWluZyB0aGF0ICd4JwogICAgIGlzIGFuIGV4cHJlc3Npb24gd2l0aG91dCBzaWRlLWVmZmVjdHMuICBJbiB0aGUgdHJlZSByZXByZXNlbnRhdGlvbiwKICAgICBob3dldmVyLCB0aGUgc2Vjb25kIG9wZXJhbmQgaXMgYWx3YXlzIHByZXNlbnQsIHBvc3NpYmx5IHByb3RlY3RlZAogICAgIGJ5ICdTQVZFX0VYUFInIGlmIHRoZSBmaXJzdCBhcmd1bWVudCBkb2VzIGNhdXNlIHNpZGUtZWZmZWN0cy4KCidDQUxMX0VYUFInCiAgICAgVGhlc2Ugbm9kZXMgYXJlIHVzZWQgdG8gcmVwcmVzZW50IGNhbGxzIHRvIGZ1bmN0aW9ucywgaW5jbHVkaW5nCiAgICAgbm9uLXN0YXRpYyBtZW1iZXIgZnVuY3Rpb25zLiAgJ0NBTExfRVhQUidzIGFyZSBpbXBsZW1lbnRlZCBhcwogICAgIGV4cHJlc3Npb24gbm9kZXMgd2l0aCBhIHZhcmlhYmxlIG51bWJlciBvZiBvcGVyYW5kcy4gIFJhdGhlciB0aGFuCiAgICAgdXNpbmcgJ1RSRUVfT1BFUkFORCcgdG8gZXh0cmFjdCB0aGVtLCBpdCBpcyBwcmVmZXJhYmxlIHRvIHVzZSB0aGUKICAgICBzcGVjaWFsaXplZCBhY2Nlc3NvciBtYWNyb3MgYW5kIGZ1bmN0aW9ucyB0aGF0IG9wZXJhdGUgc3BlY2lmaWNhbGx5CiAgICAgb24gJ0NBTExfRVhQUicgbm9kZXMuCgogICAgICdDQUxMX0VYUFJfRk4nIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBmdW5jdGlvbiB0byBjYWxsOyBpdCBpcwogICAgIGFsd2F5cyBhbiBleHByZXNzaW9uIHdob3NlIHR5cGUgaXMgYSAnUE9JTlRFUl9UWVBFJy4KCiAgICAgVGhlIG51bWJlciBvZiBhcmd1bWVudHMgdG8gdGhlIGNhbGwgaXMgcmV0dXJuZWQgYnkKICAgICAnY2FsbF9leHByX25hcmdzJywgd2hpbGUgdGhlIGFyZ3VtZW50cyB0aGVtc2VsdmVzIGNhbiBiZSBhY2Nlc3NlZAogICAgIHdpdGggdGhlICdDQUxMX0VYUFJfQVJHJyBtYWNyby4gIFRoZSBhcmd1bWVudHMgYXJlIHplcm8taW5kZXhlZCBhbmQKICAgICBudW1iZXJlZCBsZWZ0LXRvLXJpZ2h0LiAgWW91IGNhbiBpdGVyYXRlIG92ZXIgdGhlIGFyZ3VtZW50cyB1c2luZwogICAgICdGT1JfRUFDSF9DQUxMX0VYUFJfQVJHJywgYXMgaW46CgogICAgICAgICAgdHJlZSBjYWxsLCBhcmc7CiAgICAgICAgICBjYWxsX2V4cHJfYXJnX2l0ZXJhdG9yIGl0ZXI7CiAgICAgICAgICBGT1JfRUFDSF9DQUxMX0VYUFJfQVJHIChhcmcsIGl0ZXIsIGNhbGwpCiAgICAgICAgICAgIC8qIGFyZyBpcyBib3VuZCB0byBzdWNjZXNzaXZlIGFyZ3VtZW50cyBvZiBjYWxsLiAgKi8KICAgICAgICAgICAgLi4uOwoKICAgICBGb3Igbm9uLXN0YXRpYyBtZW1iZXIgZnVuY3Rpb25zLCB0aGVyZSB3aWxsIGJlIGFuIG9wZXJhbmQKICAgICBjb3JyZXNwb25kaW5nIHRvIHRoZSAndGhpcycgcG9pbnRlci4gIFRoZXJlIHdpbGwgYWx3YXlzIGJlCiAgICAgZXhwcmVzc2lvbnMgY29ycmVzcG9uZGluZyB0byBhbGwgb2YgdGhlIGFyZ3VtZW50cywgZXZlbiBpZiB0aGUKICAgICBmdW5jdGlvbiBpcyBkZWNsYXJlZCB3aXRoIGRlZmF1bHQgYXJndW1lbnRzIGFuZCBzb21lIGFyZ3VtZW50cyBhcmUKICAgICBub3QgZXhwbGljaXRseSBwcm92aWRlZCBhdCB0aGUgY2FsbCBzaXRlcy4KCiAgICAgJ0NBTExfRVhQUidzIGFsc28gaGF2ZSBhICdDQUxMX0VYUFJfU1RBVElDX0NIQUlOJyBvcGVyYW5kIHRoYXQgaXMKICAgICB1c2VkIHRvIGltcGxlbWVudCBuZXN0ZWQgZnVuY3Rpb25zLiAgVGhpcyBvcGVyYW5kIGlzIG90aGVyd2lzZQogICAgIG51bGwuCgonU1RNVF9FWFBSJwogICAgIFRoZXNlIG5vZGVzIGFyZSB1c2VkIHRvIHJlcHJlc2VudCBHQ0MncyBzdGF0ZW1lbnQtZXhwcmVzc2lvbgogICAgIGV4dGVuc2lvbi4gIFRoZSBzdGF0ZW1lbnQtZXhwcmVzc2lvbiBleHRlbnNpb24gYWxsb3dzIGNvZGUgbGlrZQogICAgIHRoaXM6CiAgICAgICAgICBpbnQgZigpIHsgcmV0dXJuICh7IGludCBqOyBqID0gMzsgaiArIDc7IH0pOyB9CiAgICAgSW4gb3RoZXIgd29yZHMsIGFuIHNlcXVlbmNlIG9mIHN0YXRlbWVudHMgbWF5IG9jY3VyIHdoZXJlIGEgc2luZ2xlCiAgICAgZXhwcmVzc2lvbiB3b3VsZCBub3JtYWxseSBhcHBlYXIuICBUaGUgJ1NUTVRfRVhQUicgbm9kZSByZXByZXNlbnRzCiAgICAgc3VjaCBhbiBleHByZXNzaW9uLiAgVGhlICdTVE1UX0VYUFJfU1RNVCcgZ2l2ZXMgdGhlIHN0YXRlbWVudAogICAgIGNvbnRhaW5lZCBpbiB0aGUgZXhwcmVzc2lvbi4gIFRoZSB2YWx1ZSBvZiB0aGUgZXhwcmVzc2lvbiBpcyB0aGUKICAgICB2YWx1ZSBvZiB0aGUgbGFzdCBzdWItc3RhdGVtZW50IGluIHRoZSBib2R5LiAgTW9yZSBwcmVjaXNlbHksIHRoZQogICAgIHZhbHVlIGlzIHRoZSB2YWx1ZSBjb21wdXRlZCBieSB0aGUgbGFzdCBzdGF0ZW1lbnQgbmVzdGVkIGluc2lkZQogICAgICdCSU5EX0VYUFInLCAnVFJZX0ZJTkFMTFlfRVhQUicsIG9yICdUUllfQ0FUQ0hfRVhQUicuICBGb3IgZXhhbXBsZSwKICAgICBpbjoKICAgICAgICAgICh7IDM7IH0pCiAgICAgdGhlIHZhbHVlIGlzICczJyB3aGlsZSBpbjoKICAgICAgICAgICh7IGlmICh4KSB7IDM7IH0gfSkKICAgICB0aGVyZSBpcyBubyB2YWx1ZS4gIElmIHRoZSAnU1RNVF9FWFBSJyBkb2VzIG5vdCB5aWVsZCBhIHZhbHVlLCBpdCdzCiAgICAgdHlwZSB3aWxsIGJlICd2b2lkJy4KCidCSU5EX0VYUFInCiAgICAgVGhlc2Ugbm9kZXMgcmVwcmVzZW50IGxvY2FsIGJsb2Nrcy4gIFRoZSBmaXJzdCBvcGVyYW5kIGlzIGEgbGlzdCBvZgogICAgIHZhcmlhYmxlcywgY29ubmVjdGVkIHZpYSB0aGVpciAnVFJFRV9DSEFJTicgZmllbGQuICBUaGVzZSB3aWxsCiAgICAgbmV2ZXIgcmVxdWlyZSBjbGVhbnVwcy4gIFRoZSBzY29wZSBvZiB0aGVzZSB2YXJpYWJsZXMgaXMganVzdCB0aGUKICAgICBib2R5IG9mIHRoZSAnQklORF9FWFBSJy4gIFRoZSBib2R5IG9mIHRoZSAnQklORF9FWFBSJyBpcyB0aGUgc2Vjb25kCiAgICAgb3BlcmFuZC4KCidMT09QX0VYUFInCiAgICAgVGhlc2Ugbm9kZXMgcmVwcmVzZW50ICJpbmZpbml0ZSIgbG9vcHMuICBUaGUgJ0xPT1BfRVhQUl9CT0RZJwogICAgIHJlcHJlc2VudHMgdGhlIGJvZHkgb2YgdGhlIGxvb3AuICBJdCBzaG91bGQgYmUgZXhlY3V0ZWQgZm9yZXZlciwKICAgICB1bmxlc3MgYW4gJ0VYSVRfRVhQUicgaXMgZW5jb3VudGVyZWQuCgonRVhJVF9FWFBSJwogICAgIFRoZXNlIG5vZGVzIHJlcHJlc2VudCBjb25kaXRpb25hbCBleGl0cyBmcm9tIHRoZSBuZWFyZXN0IGVuY2xvc2luZwogICAgICdMT09QX0VYUFInLiAgVGhlIHNpbmdsZSBvcGVyYW5kIGlzIHRoZSBjb25kaXRpb247IGlmIGl0IGlzCiAgICAgbm9uemVybywgdGhlbiB0aGUgbG9vcCBzaG91bGQgYmUgZXhpdGVkLiAgQW4gJ0VYSVRfRVhQUicgd2lsbCBvbmx5CiAgICAgYXBwZWFyIHdpdGhpbiBhICdMT09QX0VYUFInLgoKJ0NMRUFOVVBfUE9JTlRfRVhQUicKICAgICBUaGVzZSBub2RlcyByZXByZXNlbnQgZnVsbC1leHByZXNzaW9ucy4gIFRoZSBzaW5nbGUgb3BlcmFuZCBpcyBhbgogICAgIGV4cHJlc3Npb24gdG8gZXZhbHVhdGUuICBBbnkgZGVzdHJ1Y3RvciBjYWxscyBlbmdlbmRlcmVkIGJ5IHRoZQogICAgIGNyZWF0aW9uIG9mIHRlbXBvcmFyaWVzIGR1cmluZyB0aGUgZXZhbHVhdGlvbiBvZiB0aGF0IGV4cHJlc3Npb24KICAgICBzaG91bGQgYmUgcGVyZm9ybWVkIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBleHByZXNzaW9uIGlzIGV2YWx1YXRlZC4KCidDT05TVFJVQ1RPUicKICAgICBUaGVzZSBub2RlcyByZXByZXNlbnQgdGhlIGJyYWNlLWVuY2xvc2VkIGluaXRpYWxpemVycyBmb3IgYQogICAgIHN0cnVjdHVyZSBvciBhcnJheS4gIFRoZSBmaXJzdCBvcGVyYW5kIGlzIHJlc2VydmVkIGZvciB1c2UgYnkgdGhlCiAgICAgYmFjayBlbmQuICBUaGUgc2Vjb25kIG9wZXJhbmQgaXMgYSAnVFJFRV9MSVNUJy4gIElmIHRoZSAnVFJFRV9UWVBFJwogICAgIG9mIHRoZSAnQ09OU1RSVUNUT1InIGlzIGEgJ1JFQ09SRF9UWVBFJyBvciAnVU5JT05fVFlQRScsIHRoZW4gdGhlCiAgICAgJ1RSRUVfUFVSUE9TRScgb2YgZWFjaCBub2RlIGluIHRoZSAnVFJFRV9MSVNUJyB3aWxsIGJlIGEKICAgICAnRklFTERfREVDTCcgYW5kIHRoZSAnVFJFRV9WQUxVRScgb2YgZWFjaCBub2RlIHdpbGwgYmUgdGhlCiAgICAgZXhwcmVzc2lvbiB1c2VkIHRvIGluaXRpYWxpemUgdGhhdCBmaWVsZC4KCiAgICAgSWYgdGhlICdUUkVFX1RZUEUnIG9mIHRoZSAnQ09OU1RSVUNUT1InIGlzIGFuICdBUlJBWV9UWVBFJywgdGhlbgogICAgIHRoZSAnVFJFRV9QVVJQT1NFJyBvZiBlYWNoIGVsZW1lbnQgaW4gdGhlICdUUkVFX0xJU1QnIHdpbGwgYmUgYW4KICAgICAnSU5URUdFUl9DU1QnIG9yIGEgJ1JBTkdFX0VYUFInIG9mIHR3byAnSU5URUdFUl9DU1Qncy4gIEEgc2luZ2xlCiAgICAgJ0lOVEVHRVJfQ1NUJyBpbmRpY2F0ZXMgd2hpY2ggZWxlbWVudCBvZiB0aGUgYXJyYXkgKGluZGV4ZWQgZnJvbQogICAgIHplcm8pIGlzIGJlaW5nIGFzc2lnbmVkIHRvLiAgQSAnUkFOR0VfRVhQUicgaW5kaWNhdGVzIGFuIGluY2x1c2l2ZQogICAgIHJhbmdlIG9mIGVsZW1lbnRzIHRvIGluaXRpYWxpemUuICBJbiBib3RoIGNhc2VzIHRoZSAnVFJFRV9WQUxVRScgaXMKICAgICB0aGUgY29ycmVzcG9uZGluZyBpbml0aWFsaXplci4gIEl0IGlzIHJlLWV2YWx1YXRlZCBmb3IgZWFjaCBlbGVtZW50CiAgICAgb2YgYSAnUkFOR0VfRVhQUicuICBJZiB0aGUgJ1RSRUVfUFVSUE9TRScgaXMgJ05VTExfVFJFRScsIHRoZW4gdGhlCiAgICAgaW5pdGlhbGl6ZXIgaXMgZm9yIHRoZSBuZXh0IGF2YWlsYWJsZSBhcnJheSBlbGVtZW50LgoKICAgICBJbiB0aGUgZnJvbnQgZW5kLCB5b3Ugc2hvdWxkIG5vdCBkZXBlbmQgb24gdGhlIGZpZWxkcyBhcHBlYXJpbmcgaW4KICAgICBhbnkgcGFydGljdWxhciBvcmRlci4gIEhvd2V2ZXIsIGluIHRoZSBtaWRkbGUgZW5kLCBmaWVsZHMgbXVzdAogICAgIGFwcGVhciBpbiBkZWNsYXJhdGlvbiBvcmRlci4gIFlvdSBzaG91bGQgbm90IGFzc3VtZSB0aGF0IGFsbCBmaWVsZHMKICAgICB3aWxsIGJlIHJlcHJlc2VudGVkLiAgVW5yZXByZXNlbnRlZCBmaWVsZHMgd2lsbCBiZSBzZXQgdG8gemVyby4KCidDT01QT1VORF9MSVRFUkFMX0VYUFInCiAgICAgVGhlc2Ugbm9kZXMgcmVwcmVzZW50IElTTyBDOTkgY29tcG91bmQgbGl0ZXJhbHMuICBUaGUKICAgICAnQ09NUE9VTkRfTElURVJBTF9FWFBSX0RFQ0xfU1RNVCcgaXMgYSAnREVDTF9TVE1UJyBjb250YWluaW5nIGFuCiAgICAgYW5vbnltb3VzICdWQVJfREVDTCcgZm9yIHRoZSB1bm5hbWVkIG9iamVjdCByZXByZXNlbnRlZCBieSB0aGUKICAgICBjb21wb3VuZCBsaXRlcmFsOyB0aGUgJ0RFQ0xfSU5JVElBTCcgb2YgdGhhdCAnVkFSX0RFQ0wnIGlzIGEKICAgICAnQ09OU1RSVUNUT1InIHJlcHJlc2VudGluZyB0aGUgYnJhY2UtZW5jbG9zZWQgbGlzdCBvZiBpbml0aWFsaXplcnMKICAgICBpbiB0aGUgY29tcG91bmQgbGl0ZXJhbC4gIFRoYXQgYW5vbnltb3VzICdWQVJfREVDTCcgY2FuIGFsc28gYmUKICAgICBhY2Nlc3NlZCBkaXJlY3RseSBieSB0aGUgJ0NPTVBPVU5EX0xJVEVSQUxfRVhQUl9ERUNMJyBtYWNyby4KCidTQVZFX0VYUFInCgogICAgIEEgJ1NBVkVfRVhQUicgcmVwcmVzZW50cyBhbiBleHByZXNzaW9uIChwb3NzaWJseSBpbnZvbHZpbmcKICAgICBzaWRlLWVmZmVjdHMpIHRoYXQgaXMgdXNlZCBtb3JlIHRoYW4gb25jZS4gIFRoZSBzaWRlLWVmZmVjdHMgc2hvdWxkCiAgICAgb2NjdXIgb25seSB0aGUgZmlyc3QgdGltZSB0aGUgZXhwcmVzc2lvbiBpcyBldmFsdWF0ZWQuICBTdWJzZXF1ZW50CiAgICAgdXNlcyBzaG91bGQganVzdCByZXVzZSB0aGUgY29tcHV0ZWQgdmFsdWUuICBUaGUgZmlyc3Qgb3BlcmFuZCB0bwogICAgIHRoZSAnU0FWRV9FWFBSJyBpcyB0aGUgZXhwcmVzc2lvbiB0byBldmFsdWF0ZS4gIFRoZSBzaWRlLWVmZmVjdHMKICAgICBzaG91bGQgYmUgZXhlY3V0ZWQgd2hlcmUgdGhlICdTQVZFX0VYUFInIGlzIGZpcnN0IGVuY291bnRlcmVkIGluIGEKICAgICBkZXB0aC1maXJzdCBwcmVvcmRlciB0cmF2ZXJzYWwgb2YgdGhlIGV4cHJlc3Npb24gdHJlZS4KCidUQVJHRVRfRVhQUicKICAgICBBICdUQVJHRVRfRVhQUicgcmVwcmVzZW50cyBhIHRlbXBvcmFyeSBvYmplY3QuICBUaGUgZmlyc3Qgb3BlcmFuZAogICAgIGlzIGEgJ1ZBUl9ERUNMJyBmb3IgdGhlIHRlbXBvcmFyeSB2YXJpYWJsZS4gIFRoZSBzZWNvbmQgb3BlcmFuZCBpcwogICAgIHRoZSBpbml0aWFsaXplciBmb3IgdGhlIHRlbXBvcmFyeS4gIFRoZSBpbml0aWFsaXplciBpcyBldmFsdWF0ZWQKICAgICBhbmQsIGlmIG5vbi12b2lkLCBjb3BpZWQgKGJpdHdpc2UpIGludG8gdGhlIHRlbXBvcmFyeS4gIElmIHRoZQogICAgIGluaXRpYWxpemVyIGlzIHZvaWQsIHRoYXQgbWVhbnMgdGhhdCBpdCB3aWxsIHBlcmZvcm0gdGhlCiAgICAgaW5pdGlhbGl6YXRpb24gaXRzZWxmLgoKICAgICBPZnRlbiwgYSAnVEFSR0VUX0VYUFInIG9jY3VycyBvbiB0aGUgcmlnaHQtaGFuZCBzaWRlIG9mIGFuCiAgICAgYXNzaWdubWVudCwgb3IgYXMgdGhlIHNlY29uZCBvcGVyYW5kIHRvIGEgY29tbWEtZXhwcmVzc2lvbiB3aGljaCBpcwogICAgIGl0c2VsZiB0aGUgcmlnaHQtaGFuZCBzaWRlIG9mIGFuIGFzc2lnbm1lbnQsIGV0Yy4gIEluIHRoaXMgY2FzZSwgd2UKICAgICBzYXkgdGhhdCB0aGUgJ1RBUkdFVF9FWFBSJyBpcyAibm9ybWFsIjsgb3RoZXJ3aXNlLCB3ZSBzYXkgaXQgaXMKICAgICAib3JwaGFuZWQiLiAgRm9yIGEgbm9ybWFsICdUQVJHRVRfRVhQUicgdGhlIHRlbXBvcmFyeSB2YXJpYWJsZQogICAgIHNob3VsZCBiZSB0cmVhdGVkIGFzIGFuIGFsaWFzIGZvciB0aGUgbGVmdC1oYW5kIHNpZGUgb2YgdGhlCiAgICAgYXNzaWdubWVudCwgcmF0aGVyIHRoYW4gYXMgYSBuZXcgdGVtcG9yYXJ5IHZhcmlhYmxlLgoKICAgICBUaGUgdGhpcmQgb3BlcmFuZCB0byB0aGUgJ1RBUkdFVF9FWFBSJywgaWYgcHJlc2VudCwgaXMgYQogICAgIGNsZWFudXAtZXhwcmVzc2lvbiAoaS5lLiwgZGVzdHJ1Y3RvciBjYWxsKSBmb3IgdGhlIHRlbXBvcmFyeS4gIElmCiAgICAgdGhpcyBleHByZXNzaW9uIGlzIG9ycGhhbmVkLCB0aGVuIHRoaXMgZXhwcmVzc2lvbiBtdXN0IGJlIGV4ZWN1dGVkCiAgICAgd2hlbiB0aGUgc3RhdGVtZW50IGNvbnRhaW5pbmcgdGhpcyBleHByZXNzaW9uIGlzIGNvbXBsZXRlLiAgVGhlc2UKICAgICBjbGVhbnVwcyBtdXN0IGFsd2F5cyBiZSBleGVjdXRlZCBpbiB0aGUgb3JkZXIgb3Bwb3NpdGUgdG8gdGhhdCBpbgogICAgIHdoaWNoIHRoZXkgd2VyZSBlbmNvdW50ZXJlZC4gIE5vdGUgdGhhdCBpZiBhIHRlbXBvcmFyeSBpcyBjcmVhdGVkCiAgICAgb24gb25lIGJyYW5jaCBvZiBhIGNvbmRpdGlvbmFsIG9wZXJhdG9yIChpLmUuLCBpbiB0aGUgc2Vjb25kIG9yCiAgICAgdGhpcmQgb3BlcmFuZCB0byBhICdDT05EX0VYUFInKSwgdGhlIGNsZWFudXAgbXVzdCBiZSBydW4gb25seSBpZgogICAgIHRoYXQgYnJhbmNoIGlzIGFjdHVhbGx5IGV4ZWN1dGVkLgoKICAgICBTZWUgJ1NUTVRfSVNfRlVMTF9FWFBSX1AnIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHJ1bm5pbmcgdGhlc2UKICAgICBjbGVhbnVwcy4KCidBR0dSX0lOSVRfRVhQUicKICAgICBBbiAnQUdHUl9JTklUX0VYUFInIHJlcHJlc2VudHMgdGhlIGluaXRpYWxpemF0aW9uIGFzIHRoZSByZXR1cm4KICAgICB2YWx1ZSBvZiBhIGZ1bmN0aW9uIGNhbGwsIG9yIGFzIHRoZSByZXN1bHQgb2YgYSBjb25zdHJ1Y3Rvci4gIEFuCiAgICAgJ0FHR1JfSU5JVF9FWFBSJyB3aWxsIG9ubHkgYXBwZWFyIGFzIGEgZnVsbC1leHByZXNzaW9uLCBvciBhcyB0aGUKICAgICBzZWNvbmQgb3BlcmFuZCBvZiBhICdUQVJHRVRfRVhQUicuICAnQUdHUl9JTklUX0VYUFIncyBoYXZlIGEKICAgICByZXByZXNlbnRhdGlvbiBzaW1pbGFyIHRvIHRoYXQgb2YgJ0NBTExfRVhQUidzLiAgWW91IGNhbiB1c2UgdGhlCiAgICAgJ0FHR1JfSU5JVF9FWFBSX0ZOJyBhbmQgJ0FHR1JfSU5JVF9FWFBSX0FSRycgbWFjcm9zIHRvIGFjY2VzcyB0aGUKICAgICBmdW5jdGlvbiB0byBjYWxsIGFuZCB0aGUgYXJndW1lbnRzIHRvIHBhc3MuCgogICAgIElmICdBR0dSX0lOSVRfVklBX0NUT1JfUCcgaG9sZHMgb2YgdGhlICdBR0dSX0lOSVRfRVhQUicsIHRoZW4gdGhlCiAgICAgaW5pdGlhbGl6YXRpb24gaXMgdmlhIGEgY29uc3RydWN0b3IgY2FsbC4gIFRoZSBhZGRyZXNzIG9mIHRoZQogICAgICdBR0dSX0lOSVRfRVhQUl9TTE9UJyBvcGVyYW5kLCB3aGljaCBpcyBhbHdheXMgYSAnVkFSX0RFQ0wnLCBpcwogICAgIHRha2VuLCBhbmQgdGhpcyB2YWx1ZSByZXBsYWNlcyB0aGUgZmlyc3QgYXJndW1lbnQgaW4gdGhlIGFyZ3VtZW50CiAgICAgbGlzdC4KCiAgICAgSW4gZWl0aGVyIGNhc2UsIHRoZSBleHByZXNzaW9uIGlzIHZvaWQuCgonVkFfQVJHX0VYUFInCiAgICAgVGhpcyBub2RlIGlzIHVzZWQgdG8gaW1wbGVtZW50IHN1cHBvcnQgZm9yIHRoZSBDL0MrKyB2YXJpYWJsZQogICAgIGFyZ3VtZW50LWxpc3QgbWVjaGFuaXNtLiAgSXQgcmVwcmVzZW50cyBleHByZXNzaW9ucyBsaWtlICd2YV9hcmcKICAgICAoYXAsIHR5cGUpJy4gIEl0cyAnVFJFRV9UWVBFJyB5aWVsZHMgdGhlIHRyZWUgcmVwcmVzZW50YXRpb24gZm9yCiAgICAgJ3R5cGUnIGFuZCBpdHMgc29sZSBhcmd1bWVudCB5aWVsZHMgdGhlIHJlcHJlc2VudGF0aW9uIGZvciAnYXAnLgoKJ0NIQU5HRV9EWU5BTUlDX1RZUEVfRVhQUicKICAgICBJbmRpY2F0ZXMgdGhlIHNwZWNpYWwgYWxpYXNpbmcgcmVxdWlyZWQgYnkgQysrIHBsYWNlbWVudCBuZXcuICBJdAogICAgIGhhcyB0d28gb3BlcmFuZHM6IGEgdHlwZSBhbmQgYSBsb2NhdGlvbi4gIEl0IG1lYW5zIHRoYXQgdGhlIGR5bmFtaWMKICAgICB0eXBlIG9mIHRoZSBsb2NhdGlvbiBpcyBjaGFuZ2luZyB0byBiZSB0aGUgc3BlY2lmaWVkIHR5cGUuICBUaGUKICAgICBhbGlhcyBhbmFseXNpcyBjb2RlIHRha2VzIHRoaXMgaW50byBhY2NvdW50IHdoZW4gZG9pbmcgdHlwZSBiYXNlZAogICAgIGFsaWFzIGFuYWx5c2lzLgoKJ09NUF9QQVJBTExFTCcKCiAgICAgUmVwcmVzZW50cyAnI3ByYWdtYSBvbXAgcGFyYWxsZWwgW2NsYXVzZTEgLi4uIGNsYXVzZU5dJy4gIEl0IGhhcwogICAgIGZvdXIgb3BlcmFuZHM6CgogICAgIE9wZXJhbmQgJ09NUF9QQVJBTExFTF9CT0RZJyBpcyB2YWxpZCB3aGlsZSBpbiBHRU5FUklDIGFuZCBIaWdoCiAgICAgR0lNUExFIGZvcm1zLiAgSXQgY29udGFpbnMgdGhlIGJvZHkgb2YgY29kZSB0byBiZSBleGVjdXRlZCBieSBhbGwKICAgICB0aGUgdGhyZWFkcy4gIER1cmluZyBHSU1QTEUgbG93ZXJpbmcsIHRoaXMgb3BlcmFuZCBiZWNvbWVzICdOVUxMJwogICAgIGFuZCB0aGUgYm9keSBpcyBlbWl0dGVkIGxpbmVhcmx5IGFmdGVyICdPTVBfUEFSQUxMRUwnLgoKICAgICBPcGVyYW5kICdPTVBfUEFSQUxMRUxfQ0xBVVNFUycgaXMgdGhlIGxpc3Qgb2YgY2xhdXNlcyBhc3NvY2lhdGVkCiAgICAgd2l0aCB0aGUgZGlyZWN0aXZlLgoKICAgICBPcGVyYW5kICdPTVBfUEFSQUxMRUxfRk4nIGlzIGNyZWF0ZWQgYnkgJ3Bhc3NfbG93ZXJfb21wJywgaXQKICAgICBjb250YWlucyB0aGUgJ0ZVTkNUSU9OX0RFQ0wnIGZvciB0aGUgZnVuY3Rpb24gdGhhdCB3aWxsIGNvbnRhaW4gdGhlCiAgICAgYm9keSBvZiB0aGUgcGFyYWxsZWwgcmVnaW9uLgoKICAgICBPcGVyYW5kICdPTVBfUEFSQUxMRUxfREFUQV9BUkcnIGlzIGFsc28gY3JlYXRlZCBieQogICAgICdwYXNzX2xvd2VyX29tcCcuICBJZiB0aGVyZSBhcmUgc2hhcmVkIHZhcmlhYmxlcyB0byBiZSBjb21tdW5pY2F0ZWQKICAgICB0byB0aGUgY2hpbGRyZW4gdGhyZWFkcywgdGhpcyBvcGVyYW5kIHdpbGwgY29udGFpbiB0aGUgJ1ZBUl9ERUNMJwogICAgIHRoYXQgY29udGFpbnMgYWxsIHRoZSBzaGFyZWQgdmFsdWVzIGFuZCB2YXJpYWJsZXMuCgonT01QX0ZPUicKCiAgICAgUmVwcmVzZW50cyAnI3ByYWdtYSBvbXAgZm9yIFtjbGF1c2UxIC4uLiBjbGF1c2VOXScuICBJdCBoYXMgNQogICAgIG9wZXJhbmRzOgoKICAgICBPcGVyYW5kICdPTVBfRk9SX0JPRFknIGNvbnRhaW5zIHRoZSBsb29wIGJvZHkuCgogICAgIE9wZXJhbmQgJ09NUF9GT1JfQ0xBVVNFUycgaXMgdGhlIGxpc3Qgb2YgY2xhdXNlcyBhc3NvY2lhdGVkIHdpdGgKICAgICB0aGUgZGlyZWN0aXZlLgoKICAgICBPcGVyYW5kICdPTVBfRk9SX0lOSVQnIGlzIHRoZSBsb29wIGluaXRpYWxpemF0aW9uIGNvZGUgb2YgdGhlIGZvcm0KICAgICAnVkFSID0gTjEnLgoKICAgICBPcGVyYW5kICdPTVBfRk9SX0NPTkQnIGlzIHRoZSBsb29wIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24gb2YgdGhlCiAgICAgZm9ybSAnVkFSIHs8LD4sPD0sPj19IE4yJy4KCiAgICAgT3BlcmFuZCAnT01QX0ZPUl9JTkNSJyBpcyB0aGUgbG9vcCBpbmRleCBpbmNyZW1lbnQgb2YgdGhlIGZvcm0gJ1ZBUgogICAgIHsrPSwtPX0gSU5DUicuCgogICAgIE9wZXJhbmQgJ09NUF9GT1JfUFJFX0JPRFknIGNvbnRhaW5zIHNpZGUtZWZmZWN0IGNvZGUgZnJvbSBvcGVyYW5kcwogICAgICdPTVBfRk9SX0lOSVQnLCAnT01QX0ZPUl9DT05EJyBhbmQgJ09NUF9GT1JfSU5DJy4gIFRoZXNlCiAgICAgc2lkZS1lZmZlY3RzIGFyZSBwYXJ0IG9mIHRoZSAnT01QX0ZPUicgYmxvY2sgYnV0IG11c3QgYmUgZXZhbHVhdGVkCiAgICAgYmVmb3JlIHRoZSBzdGFydCBvZiBsb29wIGJvZHkuCgogICAgIFRoZSBsb29wIGluZGV4IHZhcmlhYmxlICdWQVInIG11c3QgYmUgYSBzaWduZWQgaW50ZWdlciB2YXJpYWJsZSwKICAgICB3aGljaCBpcyBpbXBsaWNpdGx5IHByaXZhdGUgdG8gZWFjaCB0aHJlYWQuICBCb3VuZHMgJ04xJyBhbmQgJ04yJwogICAgIGFuZCB0aGUgaW5jcmVtZW50IGV4cHJlc3Npb24gJ0lOQ1InIGFyZSByZXF1aXJlZCB0byBiZSBsb29wCiAgICAgaW52YXJpYW50IGludGVnZXIgZXhwcmVzc2lvbnMgdGhhdCBhcmUgZXZhbHVhdGVkIHdpdGhvdXQgYW55CiAgICAgc3luY2hyb25pemF0aW9uLiAgVGhlIGV2YWx1YXRpb24gb3JkZXIsIGZyZXF1ZW5jeSBvZiBldmFsdWF0aW9uIGFuZAogICAgIHNpZGUtZWZmZWN0cyBhcmUgdW5zcGVjaWZpZWQgYnkgdGhlIHN0YW5kYXJkLgoKJ09NUF9TRUNUSU9OUycKCiAgICAgUmVwcmVzZW50cyAnI3ByYWdtYSBvbXAgc2VjdGlvbnMgW2NsYXVzZTEgLi4uIGNsYXVzZU5dJy4KCiAgICAgT3BlcmFuZCAnT01QX1NFQ1RJT05TX0JPRFknIGNvbnRhaW5zIHRoZSBzZWN0aW9ucyBib2R5LCB3aGljaCBpbgogICAgIHR1cm4gY29udGFpbnMgYSBzZXQgb2YgJ09NUF9TRUNUSU9OJyBub2RlcyBmb3IgZWFjaCBvZiB0aGUKICAgICBjb25jdXJyZW50IHNlY3Rpb25zIGRlbGltaXRlZCBieSAnI3ByYWdtYSBvbXAgc2VjdGlvbicuCgogICAgIE9wZXJhbmQgJ09NUF9TRUNUSU9OU19DTEFVU0VTJyBpcyB0aGUgbGlzdCBvZiBjbGF1c2VzIGFzc29jaWF0ZWQKICAgICB3aXRoIHRoZSBkaXJlY3RpdmUuCgonT01QX1NFQ1RJT04nCgogICAgIFNlY3Rpb24gZGVsaW1pdGVyIGZvciAnT01QX1NFQ1RJT05TJy4KCidPTVBfU0lOR0xFJwoKICAgICBSZXByZXNlbnRzICcjcHJhZ21hIG9tcCBzaW5nbGUnLgoKICAgICBPcGVyYW5kICdPTVBfU0lOR0xFX0JPRFknIGNvbnRhaW5zIHRoZSBib2R5IG9mIGNvZGUgdG8gYmUgZXhlY3V0ZWQKICAgICBieSBhIHNpbmdsZSB0aHJlYWQuCgogICAgIE9wZXJhbmQgJ09NUF9TSU5HTEVfQ0xBVVNFUycgaXMgdGhlIGxpc3Qgb2YgY2xhdXNlcyBhc3NvY2lhdGVkIHdpdGgKICAgICB0aGUgZGlyZWN0aXZlLgoKJ09NUF9NQVNURVInCgogICAgIFJlcHJlc2VudHMgJyNwcmFnbWEgb21wIG1hc3RlcicuCgogICAgIE9wZXJhbmQgJ09NUF9NQVNURVJfQk9EWScgY29udGFpbnMgdGhlIGJvZHkgb2YgY29kZSB0byBiZSBleGVjdXRlZAogICAgIGJ5IHRoZSBtYXN0ZXIgdGhyZWFkLgoKJ09NUF9PUkRFUkVEJwoKICAgICBSZXByZXNlbnRzICcjcHJhZ21hIG9tcCBvcmRlcmVkJy4KCiAgICAgT3BlcmFuZCAnT01QX09SREVSRURfQk9EWScgY29udGFpbnMgdGhlIGJvZHkgb2YgY29kZSB0byBiZSBleGVjdXRlZAogICAgIGluIHRoZSBzZXF1ZW50aWFsIG9yZGVyIGRpY3RhdGVkIGJ5IHRoZSBsb29wIGluZGV4IHZhcmlhYmxlLgoKJ09NUF9DUklUSUNBTCcKCiAgICAgUmVwcmVzZW50cyAnI3ByYWdtYSBvbXAgY3JpdGljYWwgW25hbWVdJy4KCiAgICAgT3BlcmFuZCAnT01QX0NSSVRJQ0FMX0JPRFknIGlzIHRoZSBjcml0aWNhbCBzZWN0aW9uLgoKICAgICBPcGVyYW5kICdPTVBfQ1JJVElDQUxfTkFNRScgaXMgYW4gb3B0aW9uYWwgaWRlbnRpZmllciB0byBsYWJlbCB0aGUKICAgICBjcml0aWNhbCBzZWN0aW9uLgoKJ09NUF9SRVRVUk4nCgogICAgIFRoaXMgZG9lcyBub3QgcmVwcmVzZW50IGFueSBPcGVuTVAgZGlyZWN0aXZlLCBpdCBpcyBhbiBhcnRpZmljaWFsCiAgICAgbWFya2VyIHRvIGluZGljYXRlIHRoZSBlbmQgb2YgdGhlIGJvZHkgb2YgYW4gT3Blbk1QLiAgSXQgaXMgdXNlZCBieQogICAgIHRoZSBmbG93IGdyYXBoICgndHJlZS1jZmcuYycpIGFuZCBPcGVuTVAgcmVnaW9uIGJ1aWxkaW5nIGNvZGUKICAgICAoJ29tcC1sb3cuYycpLgoKJ09NUF9DT05USU5VRScKCiAgICAgU2ltaWxhcmx5LCB0aGlzIGluc3RydWN0aW9uIGRvZXMgbm90IHJlcHJlc2VudCBhbiBPcGVuTVAgZGlyZWN0aXZlLAogICAgIGl0IGlzIHVzZWQgYnkgJ09NUF9GT1InIGFuZCAnT01QX1NFQ1RJT05TJyB0byBtYXJrIHRoZSBwbGFjZSB3aGVyZQogICAgIHRoZSBjb2RlIG5lZWRzIHRvIGxvb3AgdG8gdGhlIG5leHQgaXRlcmF0aW9uIChpbiB0aGUgY2FzZSBvZgogICAgICdPTVBfRk9SJykgb3IgdGhlIG5leHQgc2VjdGlvbiAoaW4gdGhlIGNhc2Ugb2YgJ09NUF9TRUNUSU9OUycpLgoKICAgICBJbiBzb21lIGNhc2VzLCAnT01QX0NPTlRJTlVFJyBpcyBwbGFjZWQgcmlnaHQgYmVmb3JlICdPTVBfUkVUVVJOJy4KICAgICBCdXQgaWYgdGhlcmUgYXJlIGNsZWFudXBzIHRoYXQgbmVlZCB0byBvY2N1ciByaWdodCBhZnRlciB0aGUKICAgICBsb29waW5nIGJvZHksIGl0IHdpbGwgYmUgZW1pdHRlZCBiZXR3ZWVuICdPTVBfQ09OVElOVUUnIGFuZAogICAgICdPTVBfUkVUVVJOJy4KCidPTVBfQVRPTUlDJwoKICAgICBSZXByZXNlbnRzICcjcHJhZ21hIG9tcCBhdG9taWMnLgoKICAgICBPcGVyYW5kIDAgaXMgdGhlIGFkZHJlc3MgYXQgd2hpY2ggdGhlIGF0b21pYyBvcGVyYXRpb24gaXMgdG8gYmUKICAgICBwZXJmb3JtZWQuCgogICAgIE9wZXJhbmQgMSBpcyB0aGUgZXhwcmVzc2lvbiB0byBldmFsdWF0ZS4gIFRoZSBnaW1wbGlmaWVyIHRyaWVzCiAgICAgdGhyZWUgYWx0ZXJuYXRpdmUgY29kZSBnZW5lcmF0aW9uIHN0cmF0ZWdpZXMuICBXaGVuZXZlciBwb3NzaWJsZSwKICAgICBhbiBhdG9taWMgdXBkYXRlIGJ1aWx0LWluIGlzIHVzZWQuICBJZiB0aGF0IGZhaWxzLCBhCiAgICAgY29tcGFyZS1hbmQtc3dhcCBsb29wIGlzIGF0dGVtcHRlZC4gIElmIHRoYXQgYWxzbyBmYWlscywgYSByZWd1bGFyCiAgICAgY3JpdGljYWwgc2VjdGlvbiBhcm91bmQgdGhlIGV4cHJlc3Npb24gaXMgdXNlZC4KCidPTVBfQ0xBVVNFJwoKICAgICBSZXByZXNlbnRzIGNsYXVzZXMgYXNzb2NpYXRlZCB3aXRoIG9uZSBvZiB0aGUgJ09NUF8nIGRpcmVjdGl2ZXMuCiAgICAgQ2xhdXNlcyBhcmUgcmVwcmVzZW50ZWQgYnkgc2VwYXJhdGUgc3ViLWNvZGVzIGRlZmluZWQgaW4gJ3RyZWUuaCcuCiAgICAgQ2xhdXNlcyBjb2RlcyBjYW4gYmUgb25lIG9mOiAnT01QX0NMQVVTRV9QUklWQVRFJywKICAgICAnT01QX0NMQVVTRV9TSEFSRUQnLCAnT01QX0NMQVVTRV9GSVJTVFBSSVZBVEUnLAogICAgICdPTVBfQ0xBVVNFX0xBU1RQUklWQVRFJywgJ09NUF9DTEFVU0VfQ09QWUlOJywKICAgICAnT01QX0NMQVVTRV9DT1BZUFJJVkFURScsICdPTVBfQ0xBVVNFX0lGJywKICAgICAnT01QX0NMQVVTRV9OVU1fVEhSRUFEUycsICdPTVBfQ0xBVVNFX1NDSEVEVUxFJywKICAgICAnT01QX0NMQVVTRV9OT1dBSVQnLCAnT01QX0NMQVVTRV9PUkRFUkVEJywgJ09NUF9DTEFVU0VfREVGQVVMVCcsCiAgICAgYW5kICdPTVBfQ0xBVVNFX1JFRFVDVElPTicuICBFYWNoIGNvZGUgcmVwcmVzZW50cyB0aGUgY29ycmVzcG9uZGluZwogICAgIE9wZW5NUCBjbGF1c2UuCgogICAgIENsYXVzZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBzYW1lIGRpcmVjdGl2ZSBhcmUgY2hhaW5lZCB0b2dldGhlciB2aWEKICAgICAnT01QX0NMQVVTRV9DSEFJTicuICBUaG9zZSBjbGF1c2VzIHRoYXQgYWNjZXB0IGEgbGlzdCBvZiB2YXJpYWJsZXMKICAgICBhcmUgcmVzdHJpY3RlZCB0byBleGFjdGx5IG9uZSwgYWNjZXNzZWQgd2l0aCAnT01QX0NMQVVTRV9WQVInLgogICAgIFRoZXJlZm9yZSwgbXVsdGlwbGUgdmFyaWFibGVzIHVuZGVyIHRoZSBzYW1lIGNsYXVzZSAnQycgbmVlZCB0byBiZQogICAgIHJlcHJlc2VudGVkIGFzIG11bHRpcGxlICdDJyBjbGF1c2VzIGNoYWluZWQgdG9nZXRoZXIuICBUaGlzCiAgICAgZmFjaWxpdGF0ZXMgYWRkaW5nIG5ldyBjbGF1c2VzIGR1cmluZyBjb21waWxhdGlvbi4KCidWRUNfTFNISUZUX0VYUFInCidWRUNfUlNISUZUX0VYUFInCiAgICAgVGhlc2Ugbm9kZXMgcmVwcmVzZW50IHdob2xlIHZlY3RvciBsZWZ0IGFuZCByaWdodCBzaGlmdHMsCiAgICAgcmVzcGVjdGl2ZWx5LiAgVGhlIGZpcnN0IG9wZXJhbmQgaXMgdGhlIHZlY3RvciB0byBzaGlmdDsgaXQgd2lsbAogICAgIGFsd2F5cyBiZSBvZiB2ZWN0b3IgdHlwZS4gIFRoZSBzZWNvbmQgb3BlcmFuZCBpcyBhbiBleHByZXNzaW9uIGZvcgogICAgIHRoZSBudW1iZXIgb2YgYml0cyBieSB3aGljaCB0byBzaGlmdC4gIE5vdGUgdGhhdCB0aGUgcmVzdWx0IGlzCiAgICAgdW5kZWZpbmVkIGlmIHRoZSBzZWNvbmQgb3BlcmFuZCBpcyBsYXJnZXIgdGhhbiBvciBlcXVhbCB0byB0aGUKICAgICBmaXJzdCBvcGVyYW5kJ3MgdHlwZSBzaXplLgoKJ1ZFQ19XSURFTl9NVUxUX0hJX0VYUFInCidWRUNfV0lERU5fTVVMVF9MT19FWFBSJwogICAgIFRoZXNlIG5vZGVzIHJlcHJlc2VudCB3aWRlbmluZyB2ZWN0b3IgbXVsdGlwbGljYXRpb24gb2YgdGhlIGhpZ2gKICAgICBhbmQgbG93IHBhcnRzIG9mIHRoZSB0d28gaW5wdXQgdmVjdG9ycywgcmVzcGVjdGl2ZWx5LiAgVGhlaXIKICAgICBvcGVyYW5kcyBhcmUgdmVjdG9ycyB0aGF0IGNvbnRhaW4gdGhlIHNhbWUgbnVtYmVyIG9mIGVsZW1lbnRzICgnTicpCiAgICAgb2YgdGhlIHNhbWUgaW50ZWdyYWwgdHlwZS4gIFRoZSByZXN1bHQgaXMgYSB2ZWN0b3IgdGhhdCBjb250YWlucwogICAgIGhhbGYgYXMgbWFueSBlbGVtZW50cywgb2YgYW4gaW50ZWdyYWwgdHlwZSB3aG9zZSBzaXplIGlzIHR3aWNlIGFzCiAgICAgd2lkZS4gIEluIHRoZSBjYXNlIG9mICdWRUNfV0lERU5fTVVMVF9ISV9FWFBSJyB0aGUgaGlnaCAnTi8yJwogICAgIGVsZW1lbnRzIG9mIHRoZSB0d28gdmVjdG9yIGFyZSBtdWx0aXBsaWVkIHRvIHByb2R1Y2UgdGhlIHZlY3RvciBvZgogICAgICdOLzInIHByb2R1Y3RzLiAgSW4gdGhlIGNhc2Ugb2YgJ1ZFQ19XSURFTl9NVUxUX0xPX0VYUFInIHRoZSBsb3cKICAgICAnTi8yJyBlbGVtZW50cyBvZiB0aGUgdHdvIHZlY3RvciBhcmUgbXVsdGlwbGllZCB0byBwcm9kdWNlIHRoZQogICAgIHZlY3RvciBvZiAnTi8yJyBwcm9kdWN0cy4KCidWRUNfVU5QQUNLX0hJX0VYUFInCidWRUNfVU5QQUNLX0xPX0VYUFInCiAgICAgVGhlc2Ugbm9kZXMgcmVwcmVzZW50IHVucGFja2luZyBvZiB0aGUgaGlnaCBhbmQgbG93IHBhcnRzIG9mIHRoZQogICAgIGlucHV0IHZlY3RvciwgcmVzcGVjdGl2ZWx5LiAgVGhlIHNpbmdsZSBvcGVyYW5kIGlzIGEgdmVjdG9yIHRoYXQKICAgICBjb250YWlucyAnTicgZWxlbWVudHMgb2YgdGhlIHNhbWUgaW50ZWdyYWwgb3IgZmxvYXRpbmcgcG9pbnQgdHlwZS4KICAgICBUaGUgcmVzdWx0IGlzIGEgdmVjdG9yIHRoYXQgY29udGFpbnMgaGFsZiBhcyBtYW55IGVsZW1lbnRzLCBvZiBhbgogICAgIGludGVncmFsIG9yIGZsb2F0aW5nIHBvaW50IHR5cGUgd2hvc2Ugc2l6ZSBpcyB0d2ljZSBhcyB3aWRlLiAgSW4KICAgICB0aGUgY2FzZSBvZiAnVkVDX1VOUEFDS19ISV9FWFBSJyB0aGUgaGlnaCAnTi8yJyBlbGVtZW50cyBvZiB0aGUKICAgICB2ZWN0b3IgYXJlIGV4dHJhY3RlZCBhbmQgd2lkZW5lZCAocHJvbW90ZWQpLiAgSW4gdGhlIGNhc2Ugb2YKICAgICAnVkVDX1VOUEFDS19MT19FWFBSJyB0aGUgbG93ICdOLzInIGVsZW1lbnRzIG9mIHRoZSB2ZWN0b3IgYXJlCiAgICAgZXh0cmFjdGVkIGFuZCB3aWRlbmVkIChwcm9tb3RlZCkuCgonVkVDX1VOUEFDS19GTE9BVF9ISV9FWFBSJwonVkVDX1VOUEFDS19GTE9BVF9MT19FWFBSJwogICAgIFRoZXNlIG5vZGVzIHJlcHJlc2VudCB1bnBhY2tpbmcgb2YgdGhlIGhpZ2ggYW5kIGxvdyBwYXJ0cyBvZiB0aGUKICAgICBpbnB1dCB2ZWN0b3IsIHdoZXJlIHRoZSB2YWx1ZXMgYXJlIGNvbnZlcnRlZCBmcm9tIGZpeGVkIHBvaW50IHRvCiAgICAgZmxvYXRpbmcgcG9pbnQuICBUaGUgc2luZ2xlIG9wZXJhbmQgaXMgYSB2ZWN0b3IgdGhhdCBjb250YWlucyAnTicKICAgICBlbGVtZW50cyBvZiB0aGUgc2FtZSBpbnRlZ3JhbCB0eXBlLiAgVGhlIHJlc3VsdCBpcyBhIHZlY3RvciB0aGF0CiAgICAgY29udGFpbnMgaGFsZiBhcyBtYW55IGVsZW1lbnRzIG9mIGEgZmxvYXRpbmcgcG9pbnQgdHlwZSB3aG9zZSBzaXplCiAgICAgaXMgdHdpY2UgYXMgd2lkZS4gIEluIHRoZSBjYXNlIG9mICdWRUNfVU5QQUNLX0hJX0VYUFInIHRoZSBoaWdoCiAgICAgJ04vMicgZWxlbWVudHMgb2YgdGhlIHZlY3RvciBhcmUgZXh0cmFjdGVkLCBjb252ZXJ0ZWQgYW5kIHdpZGVuZWQuCiAgICAgSW4gdGhlIGNhc2Ugb2YgJ1ZFQ19VTlBBQ0tfTE9fRVhQUicgdGhlIGxvdyAnTi8yJyBlbGVtZW50cyBvZiB0aGUKICAgICB2ZWN0b3IgYXJlIGV4dHJhY3RlZCwgY29udmVydGVkIGFuZCB3aWRlbmVkLgoKJ1ZFQ19QQUNLX1RSVU5DX0VYUFInCiAgICAgVGhpcyBub2RlIHJlcHJlc2VudHMgcGFja2luZyBvZiB0cnVuY2F0ZWQgZWxlbWVudHMgb2YgdGhlIHR3byBpbnB1dAogICAgIHZlY3RvcnMgaW50byB0aGUgb3V0cHV0IHZlY3Rvci4gIElucHV0IG9wZXJhbmRzIGFyZSB2ZWN0b3JzIHRoYXQKICAgICBjb250YWluIHRoZSBzYW1lIG51bWJlciBvZiBlbGVtZW50cyBvZiB0aGUgc2FtZSBpbnRlZ3JhbCBvcgogICAgIGZsb2F0aW5nIHBvaW50IHR5cGUuICBUaGUgcmVzdWx0IGlzIGEgdmVjdG9yIHRoYXQgY29udGFpbnMgdHdpY2UgYXMKICAgICBtYW55IGVsZW1lbnRzIG9mIGFuIGludGVncmFsIG9yIGZsb2F0aW5nIHBvaW50IHR5cGUgd2hvc2Ugc2l6ZSBpcwogICAgIGhhbGYgYXMgd2lkZS4gIFRoZSBlbGVtZW50cyBvZiB0aGUgdHdvIHZlY3RvcnMgYXJlIGRlbW90ZWQgYW5kCiAgICAgbWVyZ2VkIChjb25jYXRlbmF0ZWQpIHRvIGZvcm0gdGhlIG91dHB1dCB2ZWN0b3IuCgonVkVDX1BBQ0tfU0FUX0VYUFInCiAgICAgVGhpcyBub2RlIHJlcHJlc2VudHMgcGFja2luZyBvZiBlbGVtZW50cyBvZiB0aGUgdHdvIGlucHV0IHZlY3RvcnMKICAgICBpbnRvIHRoZSBvdXRwdXQgdmVjdG9yIHVzaW5nIHNhdHVyYXRpb24uICBJbnB1dCBvcGVyYW5kcyBhcmUKICAgICB2ZWN0b3JzIHRoYXQgY29udGFpbiB0aGUgc2FtZSBudW1iZXIgb2YgZWxlbWVudHMgb2YgdGhlIHNhbWUKICAgICBpbnRlZ3JhbCB0eXBlLiAgVGhlIHJlc3VsdCBpcyBhIHZlY3RvciB0aGF0IGNvbnRhaW5zIHR3aWNlIGFzIG1hbnkKICAgICBlbGVtZW50cyBvZiBhbiBpbnRlZ3JhbCB0eXBlIHdob3NlIHNpemUgaXMgaGFsZiBhcyB3aWRlLiAgVGhlCiAgICAgZWxlbWVudHMgb2YgdGhlIHR3byB2ZWN0b3JzIGFyZSBkZW1vdGVkIGFuZCBtZXJnZWQgKGNvbmNhdGVuYXRlZCkKICAgICB0byBmb3JtIHRoZSBvdXRwdXQgdmVjdG9yLgoKJ1ZFQ19QQUNLX0ZJWF9UUlVOQ19FWFBSJwogICAgIFRoaXMgbm9kZSByZXByZXNlbnRzIHBhY2tpbmcgb2YgZWxlbWVudHMgb2YgdGhlIHR3byBpbnB1dCB2ZWN0b3JzCiAgICAgaW50byB0aGUgb3V0cHV0IHZlY3Rvciwgd2hlcmUgdGhlIHZhbHVlcyBhcmUgY29udmVydGVkIGZyb20KICAgICBmbG9hdGluZyBwb2ludCB0byBmaXhlZCBwb2ludC4gIElucHV0IG9wZXJhbmRzIGFyZSB2ZWN0b3JzIHRoYXQKICAgICBjb250YWluIHRoZSBzYW1lIG51bWJlciBvZiBlbGVtZW50cyBvZiBhIGZsb2F0aW5nIHBvaW50IHR5cGUuICBUaGUKICAgICByZXN1bHQgaXMgYSB2ZWN0b3IgdGhhdCBjb250YWlucyB0d2ljZSBhcyBtYW55IGVsZW1lbnRzIG9mIGFuCiAgICAgaW50ZWdyYWwgdHlwZSB3aG9zZSBzaXplIGlzIGhhbGYgYXMgd2lkZS4gIFRoZSBlbGVtZW50cyBvZiB0aGUgdHdvCiAgICAgdmVjdG9ycyBhcmUgbWVyZ2VkIChjb25jYXRlbmF0ZWQpIHRvIGZvcm0gdGhlIG91dHB1dCB2ZWN0b3IuCgonVkVDX0VYVFJBQ1RfRVZFTl9FWFBSJwonVkVDX0VYVFJBQ1RfT0REX0VYUFInCiAgICAgVGhlc2Ugbm9kZXMgcmVwcmVzZW50IGV4dHJhY3Rpbmcgb2YgdGhlIGV2ZW4vb2RkIGVsZW1lbnRzIG9mIHRoZQogICAgIHR3byBpbnB1dCB2ZWN0b3JzLCByZXNwZWN0aXZlbHkuICBUaGVpciBvcGVyYW5kcyBhbmQgcmVzdWx0IGFyZQogICAgIHZlY3RvcnMgdGhhdCBjb250YWluIHRoZSBzYW1lIG51bWJlciBvZiBlbGVtZW50cyBvZiB0aGUgc2FtZSB0eXBlLgoKJ1ZFQ19JTlRFUkxFQVZFX0hJR0hfRVhQUicKJ1ZFQ19JTlRFUkxFQVZFX0xPV19FWFBSJwogICAgIFRoZXNlIG5vZGVzIHJlcHJlc2VudCBtZXJnaW5nIGFuZCBpbnRlcmxlYXZpbmcgb2YgdGhlIGhpZ2gvbG93CiAgICAgZWxlbWVudHMgb2YgdGhlIHR3byBpbnB1dCB2ZWN0b3JzLCByZXNwZWN0aXZlbHkuICBUaGUgb3BlcmFuZHMgYW5kCiAgICAgdGhlIHJlc3VsdCBhcmUgdmVjdG9ycyB0aGF0IGNvbnRhaW4gdGhlIHNhbWUgbnVtYmVyIG9mIGVsZW1lbnRzCiAgICAgKCdOJykgb2YgdGhlIHNhbWUgdHlwZS4gIEluIHRoZSBjYXNlIG9mICdWRUNfSU5URVJMRUFWRV9ISUdIX0VYUFInLAogICAgIHRoZSBoaWdoICdOLzInIGVsZW1lbnRzIG9mIHRoZSBmaXJzdCBpbnB1dCB2ZWN0b3IgYXJlIGludGVybGVhdmVkCiAgICAgd2l0aCB0aGUgaGlnaCAnTi8yJyBlbGVtZW50cyBvZiB0aGUgc2Vjb25kIGlucHV0IHZlY3Rvci4gIEluIHRoZQogICAgIGNhc2Ugb2YgJ1ZFQ19JTlRFUkxFQVZFX0xPV19FWFBSJywgdGhlIGxvdyAnTi8yJyBlbGVtZW50cyBvZiB0aGUKICAgICBmaXJzdCBpbnB1dCB2ZWN0b3IgYXJlIGludGVybGVhdmVkIHdpdGggdGhlIGxvdyAnTi8yJyBlbGVtZW50cyBvZgogICAgIHRoZSBzZWNvbmQgaW5wdXQgdmVjdG9yLgoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IFRyZWUgU1NBLCAgTmV4dDogTG9vcCBBbmFseXNpcyBhbmQgUmVwcmVzZW50YXRpb24sICBQcmV2OiBUcmVlcywgIFVwOiBUb3AKCjEwIEFuYWx5c2lzIGFuZCBPcHRpbWl6YXRpb24gb2YgR0lNUExFIFRyZWVzCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgpHQ0MgdXNlcyB0aHJlZSBtYWluIGludGVybWVkaWF0ZSBsYW5ndWFnZXMgdG8gcmVwcmVzZW50IHRoZSBwcm9ncmFtCmR1cmluZyBjb21waWxhdGlvbjogR0VORVJJQywgR0lNUExFIGFuZCBSVEwuICBHRU5FUklDIGlzIGEKbGFuZ3VhZ2UtaW5kZXBlbmRlbnQgcmVwcmVzZW50YXRpb24gZ2VuZXJhdGVkIGJ5IGVhY2ggZnJvbnQgZW5kLiAgSXQgaXMKdXNlZCB0byBzZXJ2ZSBhcyBhbiBpbnRlcmZhY2UgYmV0d2VlbiB0aGUgcGFyc2VyIGFuZCBvcHRpbWl6ZXIuICBHRU5FUklDCmlzIGEgY29tbW9uIHJlcHJlc2VudGF0aW9uIHRoYXQgaXMgYWJsZSB0byByZXByZXNlbnQgcHJvZ3JhbXMgd3JpdHRlbiBpbgphbGwgdGhlIGxhbmd1YWdlcyBzdXBwb3J0ZWQgYnkgR0NDLgoKIEdJTVBMRSBhbmQgUlRMIGFyZSB1c2VkIHRvIG9wdGltaXplIHRoZSBwcm9ncmFtLiAgR0lNUExFIGlzIHVzZWQgZm9yCnRhcmdldCBhbmQgbGFuZ3VhZ2UgaW5kZXBlbmRlbnQgb3B0aW1pemF0aW9ucyAoZS5nLiwgaW5saW5pbmcsIGNvbnN0YW50CnByb3BhZ2F0aW9uLCB0YWlsIGNhbGwgZWxpbWluYXRpb24sIHJlZHVuZGFuY3kgZWxpbWluYXRpb24sIGV0YykuICBNdWNoCmxpa2UgR0VORVJJQywgR0lNUExFIGlzIGEgbGFuZ3VhZ2UgaW5kZXBlbmRlbnQsIHRyZWUgYmFzZWQKcmVwcmVzZW50YXRpb24uICBIb3dldmVyLCBpdCBkaWZmZXJzIGZyb20gR0VORVJJQyBpbiB0aGF0IHRoZSBHSU1QTEUKZ3JhbW1hciBpcyBtb3JlIHJlc3RyaWN0aXZlOiBleHByZXNzaW9ucyBjb250YWluIG5vIG1vcmUgdGhhbiAzIG9wZXJhbmRzCihleGNlcHQgZnVuY3Rpb24gY2FsbHMpLCBpdCBoYXMgbm8gY29udHJvbCBmbG93IHN0cnVjdHVyZXMgYW5kCmV4cHJlc3Npb25zIHdpdGggc2lkZS1lZmZlY3RzIGFyZSBvbmx5IGFsbG93ZWQgb24gdGhlIHJpZ2h0IGhhbmQgc2lkZSBvZgphc3NpZ25tZW50cy4gIFNlZSB0aGUgY2hhcHRlciBkZXNjcmliaW5nIEdFTkVSSUMgYW5kIEdJTVBMRSBmb3IgbW9yZQpkZXRhaWxzLgoKIFRoaXMgY2hhcHRlciBkZXNjcmliZXMgdGhlIGRhdGEgc3RydWN0dXJlcyBhbmQgZnVuY3Rpb25zIHVzZWQgaW4gdGhlCkdJTVBMRSBvcHRpbWl6ZXJzIChhbHNvIGtub3duIGFzICJ0cmVlIG9wdGltaXplcnMiIG9yICJtaWRkbGUgZW5kIikuICBJbgpwYXJ0aWN1bGFyLCBpdCBmb2N1c2VzIG9uIGFsbCB0aGUgbWFjcm9zLCBkYXRhIHN0cnVjdHVyZXMsIGZ1bmN0aW9ucyBhbmQKcHJvZ3JhbW1pbmcgY29uc3RydWN0cyBuZWVkZWQgdG8gaW1wbGVtZW50IG9wdGltaXphdGlvbiBwYXNzZXMgZm9yCkdJTVBMRS4KCiogTWVudToKCiogR0VORVJJQzo6CQlBIGhpZ2gtbGV2ZWwgbGFuZ3VhZ2UtaW5kZXBlbmRlbnQgcmVwcmVzZW50YXRpb24uCiogR0lNUExFOjogICAgICAgICAgICAgIEEgbG93ZXItbGV2ZWwgZmFjdG9yZWQgdHJlZSByZXByZXNlbnRhdGlvbi4KKiBBbm5vdGF0aW9uczo6CQlBdHRyaWJ1dGVzIGZvciBzdGF0ZW1lbnRzIGFuZCB2YXJpYWJsZXMuCiogU3RhdGVtZW50IE9wZXJhbmRzOjoJVmFyaWFibGVzIHJlZmVyZW5jZWQgYnkgR0lNUExFIHN0YXRlbWVudHMuCiogU1NBOjoJCQlTdGF0aWMgU2luZ2xlIEFzc2lnbm1lbnQgcmVwcmVzZW50YXRpb24uCiogQWxpYXMgYW5hbHlzaXM6OglSZXByZXNlbnRpbmcgYWxpYXNlZCBsb2FkcyBhbmQgc3RvcmVzLgoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IEdFTkVSSUMsICBOZXh0OiBHSU1QTEUsICBVcDogVHJlZSBTU0EKCjEwLjEgR0VORVJJQwo9PT09PT09PT09PT0KClRoZSBwdXJwb3NlIG9mIEdFTkVSSUMgaXMgc2ltcGx5IHRvIHByb3ZpZGUgYSBsYW5ndWFnZS1pbmRlcGVuZGVudCB3YXkKb2YgcmVwcmVzZW50aW5nIGFuIGVudGlyZSBmdW5jdGlvbiBpbiB0cmVlcy4gIFRvIHRoaXMgZW5kLCBpdCB3YXMKbmVjZXNzYXJ5IHRvIGFkZCBhIGZldyBuZXcgdHJlZSBjb2RlcyB0byB0aGUgYmFjayBlbmQsIGJ1dCBtb3N0CmV2ZXJ5dGhpbmcgd2FzIGFscmVhZHkgdGhlcmUuICBJZiB5b3UgY2FuIGV4cHJlc3MgaXQgd2l0aCB0aGUgY29kZXMgaW4KJ2djYy90cmVlLmRlZicsIGl0J3MgR0VORVJJQy4KCiBFYXJseSBvbiwgdGhlcmUgd2FzIGEgZ3JlYXQgZGVhbCBvZiBkZWJhdGUgYWJvdXQgaG93IHRvIHRoaW5rIGFib3V0CnN0YXRlbWVudHMgaW4gYSB0cmVlIElMLiAgSW4gR0VORVJJQywgYSBzdGF0ZW1lbnQgaXMgZGVmaW5lZCBhcyBhbnkKZXhwcmVzc2lvbiB3aG9zZSB2YWx1ZSwgaWYgYW55LCBpcyBpZ25vcmVkLiAgQSBzdGF0ZW1lbnQgd2lsbCBhbHdheXMKaGF2ZSAnVFJFRV9TSURFX0VGRkVDVFMnIHNldCAob3IgaXQgd2lsbCBiZSBkaXNjYXJkZWQpLCBidXQgYQpub24tc3RhdGVtZW50IGV4cHJlc3Npb24gbWF5IGFsc28gaGF2ZSBzaWRlIGVmZmVjdHMuICBBICdDQUxMX0VYUFInLCBmb3IKaW5zdGFuY2UuCgogSXQgd291bGQgYmUgcG9zc2libGUgZm9yIHNvbWUgbG9jYWwgb3B0aW1pemF0aW9ucyB0byB3b3JrIG9uIHRoZQpHRU5FUklDIGZvcm0gb2YgYSBmdW5jdGlvbjsgaW5kZWVkLCB0aGUgYWRhcHRlZCB0cmVlIGlubGluZXIgd29ya3MgZmluZQpvbiBHRU5FUklDLCBidXQgdGhlIGN1cnJlbnQgY29tcGlsZXIgcGVyZm9ybXMgaW5saW5pbmcgYWZ0ZXIgbG93ZXJpbmcgdG8KR0lNUExFIChhIHJlc3RyaWN0ZWQgZm9ybSBkZXNjcmliZWQgaW4gdGhlIG5leHQgc2VjdGlvbikuICBJbmRlZWQsCmN1cnJlbnRseSB0aGUgZnJvbnRlbmRzIHBlcmZvcm0gdGhpcyBsb3dlcmluZyBiZWZvcmUgaGFuZGluZyBvZmYgdG8KJ3RyZWVfcmVzdF9vZl9jb21waWxhdGlvbicsIGJ1dCB0aGlzIHNlZW1zIGluZWxlZ2FudC4KCiBJZiBuZWNlc3NhcnksIGEgZnJvbnQgZW5kIGNhbiB1c2Ugc29tZSBsYW5ndWFnZS1kZXBlbmRlbnQgdHJlZSBjb2RlcyBpbgppdHMgR0VORVJJQyByZXByZXNlbnRhdGlvbiwgc28gbG9uZyBhcyBpdCBwcm92aWRlcyBhIGhvb2sgZm9yIGNvbnZlcnRpbmcKdGhlbSB0byBHSU1QTEUgYW5kIGRvZXNuJ3QgZXhwZWN0IHRoZW0gdG8gd29yayB3aXRoIGFueSAoaHlwb3RoZXRpY2FsKQpvcHRpbWl6ZXJzIHRoYXQgcnVuIGJlZm9yZSB0aGUgY29udmVyc2lvbiB0byBHSU1QTEUuICBUaGUgaW50ZXJtZWRpYXRlCnJlcHJlc2VudGF0aW9uIHVzZWQgd2hpbGUgcGFyc2luZyBDIGFuZCBDKysgbG9va3MgdmVyeSBsaXR0bGUgbGlrZQpHRU5FUklDLCBidXQgdGhlIEMgYW5kIEMrKyBnaW1wbGlmaWVyIGhvb2tzIGFyZSBwZXJmZWN0bHkgaGFwcHkgdG8gdGFrZQppdCBhcyBpbnB1dCBhbmQgc3BpdCBvdXQgR0lNUExFLgoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IEdJTVBMRSwgIE5leHQ6IEFubm90YXRpb25zLCAgUHJldjogR0VORVJJQywgIFVwOiBUcmVlIFNTQQoKMTAuMiBHSU1QTEUKPT09PT09PT09PT0KCkdJTVBMRSBpcyBhIHNpbXBsaWZpZWQgc3Vic2V0IG9mIEdFTkVSSUMgZm9yIHVzZSBpbiBvcHRpbWl6YXRpb24uICBUaGUKcGFydGljdWxhciBzdWJzZXQgY2hvc2VuIChhbmQgdGhlIG5hbWUpIHdhcyBoZWF2aWx5IGluZmx1ZW5jZWQgYnkgdGhlClNJTVBMRSBJTCB1c2VkIGJ5IHRoZSBNY0NBVCBjb21waWxlciBwcm9qZWN0IGF0IE1jR2lsbCBVbml2ZXJzaXR5LAp0aG91Z2ggd2UgaGF2ZSBtYWRlIHNvbWUgZGlmZmVyZW50IGNob2ljZXMuICBGb3Igb25lIHRoaW5nLCBTSU1QTEUKZG9lc24ndCBzdXBwb3J0ICdnb3RvJzsgYSBwcm9kdWN0aW9uIGNvbXBpbGVyIGNhbid0IGFmZm9yZCB0aGF0IGtpbmQgb2YKcmVzdHJpY3Rpb24uCgogR0lNUExFIHJldGFpbnMgbXVjaCBvZiB0aGUgc3RydWN0dXJlIG9mIHRoZSBwYXJzZSB0cmVlczogbGV4aWNhbCBzY29wZXMKYXJlIHJlcHJlc2VudGVkIGFzIGNvbnRhaW5lcnMsIHJhdGhlciB0aGFuIG1hcmtlcnMuICBIb3dldmVyLApleHByZXNzaW9ucyBhcmUgYnJva2VuIGRvd24gaW50byBhIDMtYWRkcmVzcyBmb3JtLCB1c2luZyB0ZW1wb3JhcnkKdmFyaWFibGVzIHRvIGhvbGQgaW50ZXJtZWRpYXRlIHZhbHVlcy4gIEFsc28sIGNvbnRyb2wgc3RydWN0dXJlcyBhcmUKbG93ZXJlZCB0byBnb3Rvcy4KCiBJbiBHSU1QTEUgbm8gY29udGFpbmVyIG5vZGUgaXMgZXZlciB1c2VkIGZvciBpdHMgdmFsdWU7IGlmIGEKJ0NPTkRfRVhQUicgb3IgJ0JJTkRfRVhQUicgaGFzIGEgdmFsdWUsIGl0IGlzIHN0b3JlZCBpbnRvIGEgdGVtcG9yYXJ5CndpdGhpbiB0aGUgY29udHJvbGxlZCBibG9ja3MsIGFuZCB0aGF0IHRlbXBvcmFyeSBpcyB1c2VkIGluIHBsYWNlIG9mIHRoZQpjb250YWluZXIuCgogVGhlIGNvbXBpbGVyIHBhc3Mgd2hpY2ggbG93ZXJzIEdFTkVSSUMgdG8gR0lNUExFIGlzIHJlZmVycmVkIHRvIGFzIHRoZQonZ2ltcGxpZmllcicuICBUaGUgZ2ltcGxpZmllciB3b3JrcyByZWN1cnNpdmVseSwgcmVwbGFjaW5nIGNvbXBsZXgKc3RhdGVtZW50cyB3aXRoIHNlcXVlbmNlcyBvZiBzaW1wbGUgc3RhdGVtZW50cy4KCiogTWVudToKCiogSW50ZXJmYWNlczo6CiogVGVtcG9yYXJpZXM6OgoqIEdJTVBMRSBFeHByZXNzaW9uczo6CiogU3RhdGVtZW50czo6CiogR0lNUExFIEV4YW1wbGU6OgoqIFJvdWdoIEdJTVBMRSBHcmFtbWFyOjoKCh8KRmlsZTogZ2NjaW50LmluZm8sICBOb2RlOiBJbnRlcmZhY2VzLCAgTmV4dDogVGVtcG9yYXJpZXMsICBVcDogR0lNUExFCgoxMC4yLjEgSW50ZXJmYWNlcwotLS0tLS0tLS0tLS0tLS0tLQoKVGhlIHRyZWUgcmVwcmVzZW50YXRpb24gb2YgYSBmdW5jdGlvbiBpcyBzdG9yZWQgaW4gJ0RFQ0xfU0FWRURfVFJFRScuCkl0IGlzIGxvd2VyZWQgdG8gR0lNUExFIGJ5IGEgY2FsbCB0byAnZ2ltcGxpZnlfZnVuY3Rpb25fdHJlZScuCgogSWYgYSBmcm9udCBlbmQgd2FudHMgdG8gaW5jbHVkZSBsYW5ndWFnZS1zcGVjaWZpYyB0cmVlIGNvZGVzIGluIHRoZQp0cmVlIHJlcHJlc2VudGF0aW9uIHdoaWNoIGl0IHByb3ZpZGVzIHRvIHRoZSBiYWNrIGVuZCwgaXQgbXVzdCBwcm92aWRlIGEKZGVmaW5pdGlvbiBvZiAnTEFOR19IT09LU19HSU1QTElGWV9FWFBSJyB3aGljaCBrbm93cyBob3cgdG8gY29udmVydCB0aGUKZnJvbnQgZW5kIHRyZWVzIHRvIEdJTVBMRS4gIFVzdWFsbHkgc3VjaCBhIGhvb2sgd2lsbCBpbnZvbHZlIG11Y2ggb2YgdGhlCnNhbWUgY29kZSBmb3IgZXhwYW5kaW5nIGZyb250IGVuZCB0cmVlcyB0byBSVEwuICBUaGlzIGZ1bmN0aW9uIGNhbgpyZXR1cm4gZnVsbHkgbG93ZXJlZCBHSU1QTEUsIG9yIGl0IGNhbiByZXR1cm4gR0VORVJJQyB0cmVlcyBhbmQgbGV0IHRoZQptYWluIGdpbXBsaWZpZXIgbG93ZXIgdGhlbSB0aGUgcmVzdCBvZiB0aGUgd2F5OyB0aGlzIGlzIG9mdGVuIHNpbXBsZXIuCkdJTVBMRSB0aGF0IGlzIG5vdCBmdWxseSBsb3dlcmVkIGlzIGtub3duIGFzICJoaWdoIEdJTVBMRSIgYW5kIGNvbnNpc3RzCm9mIHRoZSBJTCBiZWZvcmUgdGhlIHBhc3MgJ3Bhc3NfbG93ZXJfY2YnLiAgSGlnaCBHSU1QTEUgc3RpbGwgY29udGFpbnMKbGV4aWNhbCBzY29wZXMgYW5kIG5lc3RlZCBleHByZXNzaW9ucywgd2hpbGUgbG93IEdJTVBMRSBleHBvc2VzIGFsbCBvZgp0aGUgaW1wbGljaXQganVtcHMgZm9yIGNvbnRyb2wgZXhwcmVzc2lvbnMgbGlrZSAnQ09ORF9FWFBSJy4KCiBUaGUgQyBhbmQgQysrIGZyb250IGVuZHMgY3VycmVudGx5IGNvbnZlcnQgZGlyZWN0bHkgZnJvbSBmcm9udCBlbmQKdHJlZXMgdG8gR0lNUExFLCBhbmQgaGFuZCB0aGF0IG9mZiB0byB0aGUgYmFjayBlbmQgcmF0aGVyIHRoYW4gZmlyc3QKY29udmVydGluZyB0byBHRU5FUklDLiAgVGhlaXIgZ2ltcGxpZmllciBob29rcyBrbm93IGFib3V0IGFsbCB0aGUKJ19TVE1UJyBub2RlcyBhbmQgaG93IHRvIGNvbnZlcnQgdGhlbSB0byBHRU5FUklDIGZvcm1zLiAgVGhlcmUgd2FzIHNvbWUKd29yayBkb25lIG9uIGEgZ2VuZXJpY2l6YXRpb24gcGFzcyB3aGljaCB3b3VsZCBydW4gZmlyc3QsIGJ1dCB0aGUKZXhpc3RlbmNlIG9mICdTVE1UX0VYUFInIG1lYW50IHRoYXQgaW4gb3JkZXIgdG8gY29udmVydCBhbGwgb2YgdGhlIEMKc3RhdGVtZW50cyBpbnRvIEdFTkVSSUMgZXF1aXZhbGVudHMgd291bGQgaW52b2x2ZSB3YWxraW5nIHRoZSBlbnRpcmUKdHJlZSBhbnl3YXksIHNvIGl0IHdhcyBzaW1wbGVyIHRvIGxvd2VyIGFsbCB0aGUgd2F5LiAgVGhpcyBtaWdodCBjaGFuZ2UKaW4gdGhlIGZ1dHVyZSBpZiBzb21lb25lIHdyaXRlcyBhbiBvcHRpbWl6YXRpb24gcGFzcyB3aGljaCB3b3VsZCB3b3JrCmJldHRlciB3aXRoIGhpZ2hlci1sZXZlbCB0cmVlcywgYnV0IGN1cnJlbnRseSB0aGUgb3B0aW1pemVycyBhbGwgZXhwZWN0CkdJTVBMRS4KCiBBIGZyb250IGVuZCB3aGljaCB3YW50cyB0byB1c2UgdGhlIHRyZWUgb3B0aW1pemVycyAoYW5kIGFscmVhZHkgaGFzCnNvbWUgc29ydCBvZiB3aG9sZS1mdW5jdGlvbiB0cmVlIHJlcHJlc2VudGF0aW9uKSBvbmx5IG5lZWRzIHRvIHByb3ZpZGUgYQpkZWZpbml0aW9uIG9mICdMQU5HX0hPT0tTX0dJTVBMSUZZX0VYUFInLCBjYWxsICdnaW1wbGlmeV9mdW5jdGlvbl90cmVlJwp0byBsb3dlciB0byBHSU1QTEUsIGFuZCB0aGVuIGhhbmQgb2ZmIHRvICd0cmVlX3Jlc3Rfb2ZfY29tcGlsYXRpb24nIHRvCmNvbXBpbGUgYW5kIG91dHB1dCB0aGUgZnVuY3Rpb24uCgogWW91IGNhbiB0ZWxsIHRoZSBjb21waWxlciB0byBkdW1wIGEgQy1saWtlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBHSU1QTEUKZm9ybSB3aXRoIHRoZSBmbGFnICctZmR1bXAtdHJlZS1naW1wbGUnLgoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IFRlbXBvcmFyaWVzLCAgTmV4dDogR0lNUExFIEV4cHJlc3Npb25zLCAgUHJldjogSW50ZXJmYWNlcywgIFVwOiBHSU1QTEUKCjEwLjIuMiBUZW1wb3JhcmllcwotLS0tLS0tLS0tLS0tLS0tLS0KCldoZW4gZ2ltcGxpZmljYXRpb24gZW5jb3VudGVycyBhIHN1YmV4cHJlc3Npb24gd2hpY2ggaXMgdG9vIGNvbXBsZXgsIGl0CmNyZWF0ZXMgYSBuZXcgdGVtcG9yYXJ5IHZhcmlhYmxlIHRvIGhvbGQgdGhlIHZhbHVlIG9mIHRoZSBzdWJleHByZXNzaW9uLAphbmQgYWRkcyBhIG5ldyBzdGF0ZW1lbnQgdG8gaW5pdGlhbGl6ZSBpdCBiZWZvcmUgdGhlIGN1cnJlbnQgc3RhdGVtZW50LgpUaGVzZSBzcGVjaWFsIHRlbXBvcmFyaWVzIGFyZSBrbm93biBhcyAnZXhwcmVzc2lvbiB0ZW1wb3JhcmllcycsIGFuZCBhcmUKYWxsb2NhdGVkIHVzaW5nICdnZXRfZm9ybWFsX3RtcF92YXInLiAgVGhlIGNvbXBpbGVyIHRyaWVzIHRvIGFsd2F5cwpldmFsdWF0ZSBpZGVudGljYWwgZXhwcmVzc2lvbnMgaW50byB0aGUgc2FtZSB0ZW1wb3JhcnksIHRvIHNpbXBsaWZ5CmVsaW1pbmF0aW9uIG9mIHJlZHVuZGFudCBjYWxjdWxhdGlvbnMuCgogV2UgY2FuIG9ubHkgdXNlIGV4cHJlc3Npb24gdGVtcG9yYXJpZXMgd2hlbiB3ZSBrbm93IHRoYXQgaXQgd2lsbCBub3QgYmUKcmVldmFsdWF0ZWQgYmVmb3JlIGl0cyB2YWx1ZSBpcyB1c2VkLCBhbmQgdGhhdCBpdCB3aWxsIG5vdCBiZSBvdGhlcndpc2UKbW9kaWZpZWQoMSkuICBPdGhlciB0ZW1wb3JhcmllcyBjYW4gYmUgYWxsb2NhdGVkIHVzaW5nCidnZXRfaW5pdGlhbGl6ZWRfdG1wX3Zhcicgb3IgJ2NyZWF0ZV90bXBfdmFyJy4KCiBDdXJyZW50bHksIGFuIGV4cHJlc3Npb24gbGlrZSAnYSA9IGIgKyA1JyBpcyBub3QgcmVkdWNlZCBhbnkgZnVydGhlci4KV2UgdHJpZWQgY29udmVydGluZyBpdCB0byBzb21ldGhpbmcgbGlrZQogICAgICAgVDEgPSBiICsgNTsKICAgICAgIGEgPSBUMTsKIGJ1dCB0aGlzIGJsb2F0ZWQgdGhlIHJlcHJlc2VudGF0aW9uIGZvciBtaW5pbWFsIGJlbmVmaXQuICBIb3dldmVyLCBhCnZhcmlhYmxlIHdoaWNoIG11c3QgbGl2ZSBpbiBtZW1vcnkgY2Fubm90IGFwcGVhciBpbiBhbiBleHByZXNzaW9uOyBpdHMKdmFsdWUgaXMgZXhwbGljaXRseSBsb2FkZWQgaW50byBhIHRlbXBvcmFyeSBmaXJzdC4gIFNpbWlsYXJseSwgc3RvcmluZwp0aGUgdmFsdWUgb2YgYW4gZXhwcmVzc2lvbiB0byBhIG1lbW9yeSB2YXJpYWJsZSBnb2VzIHRocm91Z2ggYQp0ZW1wb3JhcnkuCgogICAtLS0tLS0tLS0tIEZvb3Rub3RlcyAtLS0tLS0tLS0tCgogICAoMSkgVGhlc2UgcmVzdHJpY3Rpb25zIGFyZSBkZXJpdmVkIGZyb20gdGhvc2UgaW4gTW9yZ2FuIDQuOC4KCh8KRmlsZTogZ2NjaW50LmluZm8sICBOb2RlOiBHSU1QTEUgRXhwcmVzc2lvbnMsICBOZXh0OiBTdGF0ZW1lbnRzLCAgUHJldjogVGVtcG9yYXJpZXMsICBVcDogR0lNUExFCgoxMC4yLjMgRXhwcmVzc2lvbnMKLS0tLS0tLS0tLS0tLS0tLS0tCgpJbiBnZW5lcmFsLCBleHByZXNzaW9ucyBpbiBHSU1QTEUgY29uc2lzdCBvZiBhbiBvcGVyYXRpb24gYW5kIHRoZQphcHByb3ByaWF0ZSBudW1iZXIgb2Ygc2ltcGxlIG9wZXJhbmRzOyB0aGVzZSBvcGVyYW5kcyBtdXN0IGVpdGhlciBiZSBhCkdJTVBMRSBydmFsdWUgKCdpc19naW1wbGVfdmFsJyksIGkuZS4gYSBjb25zdGFudCBvciBhIHJlZ2lzdGVyIHZhcmlhYmxlLgpNb3JlIGNvbXBsZXggb3BlcmFuZHMgYXJlIGZhY3RvcmVkIG91dCBpbnRvIHRlbXBvcmFyaWVzLCBzbyB0aGF0CiAgICAgICBhID0gYiArIGMgKyBkCiBiZWNvbWVzCiAgICAgICBUMSA9IGIgKyBjOwogICAgICAgYSA9IFQxICsgZDsKCiBUaGUgc2FtZSBydWxlIGhvbGRzIGZvciBhcmd1bWVudHMgdG8gYSAnQ0FMTF9FWFBSJy4KCiBUaGUgdGFyZ2V0IG9mIGFuIGFzc2lnbm1lbnQgaXMgdXN1YWxseSBhIHZhcmlhYmxlLCBidXQgY2FuIGFsc28gYmUgYW4KJ0lORElSRUNUX1JFRicgb3IgYSBjb21wb3VuZCBsdmFsdWUgYXMgZGVzY3JpYmVkIGJlbG93LgoKKiBNZW51OgoKKiBDb21wb3VuZCBFeHByZXNzaW9uczo6CiogQ29tcG91bmQgTHZhbHVlczo6CiogQ29uZGl0aW9uYWwgRXhwcmVzc2lvbnM6OgoqIExvZ2ljYWwgT3BlcmF0b3JzOjoKCh8KRmlsZTogZ2NjaW50LmluZm8sICBOb2RlOiBDb21wb3VuZCBFeHByZXNzaW9ucywgIE5leHQ6IENvbXBvdW5kIEx2YWx1ZXMsICBVcDogR0lNUExFIEV4cHJlc3Npb25zCgoxMC4yLjMuMSBDb21wb3VuZCBFeHByZXNzaW9ucwouLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgoKVGhlIGxlZnQtaGFuZCBzaWRlIG9mIGEgQyBjb21tYSBleHByZXNzaW9uIGlzIHNpbXBseSBtb3ZlZCBpbnRvIGEKc2VwYXJhdGUgc3RhdGVtZW50LgoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IENvbXBvdW5kIEx2YWx1ZXMsICBOZXh0OiBDb25kaXRpb25hbCBFeHByZXNzaW9ucywgIFByZXY6IENvbXBvdW5kIEV4cHJlc3Npb25zLCAgVXA6IEdJTVBMRSBFeHByZXNzaW9ucwoKMTAuMi4zLjIgQ29tcG91bmQgTHZhbHVlcwouLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCgpDdXJyZW50bHkgY29tcG91bmQgbHZhbHVlcyBpbnZvbHZpbmcgYXJyYXkgYW5kIHN0cnVjdHVyZSBmaWVsZApyZWZlcmVuY2VzIGFyZSBub3QgYnJva2VuIGRvd247IGFuIGV4cHJlc3Npb24gbGlrZSAnYS5iWzJdID0gNDInIGlzIG5vdApyZWR1Y2VkIGFueSBmdXJ0aGVyICh0aG91Z2ggY29tcGxleCBhcnJheSBzdWJzY3JpcHRzIGFyZSkuICBUaGlzCnJlc3RyaWN0aW9uIGlzIGEgd29ya2Fyb3VuZCBmb3IgbGltaXRhdGlvbnMgaW4gbGF0ZXIgb3B0aW1pemVyczsgaWYgd2UKd2VyZSB0byBjb252ZXJ0IHRoaXMgdG8KCiAgICAgICBUMSA9ICZhLmI7CiAgICAgICBUMVsyXSA9IDQyOwoKIGFsaWFzIGFuYWx5c2lzIHdvdWxkIG5vdCByZW1lbWJlciB0aGF0IHRoZSByZWZlcmVuY2UgdG8gJ1QxWzJdJyBjYW1lIGJ5CndheSBvZiAnYS5iJywgc28gaXQgd291bGQgdGhpbmsgdGhhdCB0aGUgYXNzaWdubWVudCBjb3VsZCBhbGlhcyBhbm90aGVyCm1lbWJlciBvZiAnYSc7IHRoaXMgYnJva2UgJ3N0cnVjdC1hbGlhcy0xLmMnLiAgRnV0dXJlIG9wdGltaXplcgppbXByb3ZlbWVudHMgbWF5IG1ha2UgdGhpcyBsaW1pdGF0aW9uIHVubmVjZXNzYXJ5LgoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IENvbmRpdGlvbmFsIEV4cHJlc3Npb25zLCAgTmV4dDogTG9naWNhbCBPcGVyYXRvcnMsICBQcmV2OiBDb21wb3VuZCBMdmFsdWVzLCAgVXA6IEdJTVBMRSBFeHByZXNzaW9ucwoKMTAuMi4zLjMgQ29uZGl0aW9uYWwgRXhwcmVzc2lvbnMKLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KCkEgQyAnPzonIGV4cHJlc3Npb24gaXMgY29udmVydGVkIGludG8gYW4gJ2lmJyBzdGF0ZW1lbnQgd2l0aCBlYWNoIGJyYW5jaAphc3NpZ25pbmcgdG8gdGhlIHNhbWUgdGVtcG9yYXJ5LiAgU28sCgogICAgICAgYSA9IGIgPyBjIDogZDsKIGJlY29tZXMKICAgICAgIGlmIChiKQogICAgICAgICBUMSA9IGM7CiAgICAgICBlbHNlCiAgICAgICAgIFQxID0gZDsKICAgICAgIGEgPSBUMTsKCiBUcmVlIGxldmVsIGlmLWNvbnZlcnNpb24gcGFzcyByZS1pbnRyb2R1Y2VzICc/OicgZXhwcmVzc2lvbiwgaWYKYXBwcm9wcmlhdGUuICBJdCBpcyB1c2VkIHRvIHZlY3Rvcml6ZSBsb29wcyB3aXRoIGNvbmRpdGlvbnMgdXNpbmcgdmVjdG9yCmNvbmRpdGlvbmFsIG9wZXJhdGlvbnMuCgogTm90ZSB0aGF0IGluIEdJTVBMRSwgJ2lmJyBzdGF0ZW1lbnRzIGFyZSBhbHNvIHJlcHJlc2VudGVkIHVzaW5nCidDT05EX0VYUFInLCBhcyBkZXNjcmliZWQgYmVsb3cuCgofCkZpbGU6IGdjY2ludC5pbmZvLCAgTm9kZTogTG9naWNhbCBPcGVyYXRvcnMsICBQcmV2OiBDb25kaXRpb25hbCBFeHByZXNzaW9ucywgIFVwOiBHSU1QTEUgRXhwcmVzc2lvbnMKCjEwLjIuMy40IExvZ2ljYWwgT3BlcmF0b3JzCi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCgpFeGNlcHQgd2hlbiB0aGV5IGFwcGVhciBpbiB0aGUgY29uZGl0aW9uIG9wZXJhbmQgb2YgYSAnQ09ORF9FWFBSJywKbG9naWNhbCAnYW5kJyBhbmQgJ29yJyBvcGVyYXRvcnMgYXJlIHNpbXBsaWZpZWQgYXMgZm9sbG93czogJ2EgPSBiICYmIGMnCmJlY29tZXMKCiAgICAgICBUMSA9IChib29sKWI7CiAgICAgICBpZiAoVDEpCiAgICAgICAgIFQxID0gKGJvb2wpYzsKICAgICAgIGEgPSBUMTsKCiBOb3RlIHRoYXQgJ1QxJyBpbiB0aGlzIGV4YW1wbGUgY2Fubm90IGJlIGFuIGV4cHJlc3Npb24gdGVtcG9yYXJ5LApiZWNhdXNlIGl0IGhhcyB0d28gZGlmZmVyZW50IGFzc2lnbm1lbnRzLgoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IFN0YXRlbWVudHMsICBOZXh0OiBHSU1QTEUgRXhhbXBsZSwgIFByZXY6IEdJTVBMRSBFeHByZXNzaW9ucywgIFVwOiBHSU1QTEUKCjEwLjIuNCBTdGF0ZW1lbnRzCi0tLS0tLS0tLS0tLS0tLS0tCgpNb3N0IHN0YXRlbWVudHMgd2lsbCBiZSBhc3NpZ25tZW50IHN0YXRlbWVudHMsIHJlcHJlc2VudGVkIGJ5CidNT0RJRllfRVhQUicuICBBICdDQUxMX0VYUFInIHdob3NlIHZhbHVlIGlzIGlnbm9yZWQgY2FuIGFsc28gYmUgYQpzdGF0ZW1lbnQuICBObyBvdGhlciBDIGV4cHJlc3Npb25zIGNhbiBhcHBlYXIgYXQgc3RhdGVtZW50IGxldmVsOyBhCnJlZmVyZW5jZSB0byBhIHZvbGF0aWxlIG9iamVjdCBpcyBjb252ZXJ0ZWQgaW50byBhICdNT0RJRllfRVhQUicuICBJbgpHSU1QTEUgZm9ybSwgdHlwZSBvZiAnTU9ESUZZX0VYUFInIGlzIG5vdCBtZWFuaW5nZnVsLiAgSW5zdGVhZCwgdXNlIHR5cGUKb2YgTEhTIG9yIFJIUy4KCiBUaGVyZSBhcmUgYWxzbyBzZXZlcmFsIHZhcmlldGllcyBvZiBjb21wbGV4IHN0YXRlbWVudHMuCgoqIE1lbnU6CgoqIEJsb2Nrczo6CiogU3RhdGVtZW50IFNlcXVlbmNlczo6CiogRW1wdHkgU3RhdGVtZW50czo6CiogTG9vcHM6OgoqIFNlbGVjdGlvbiBTdGF0ZW1lbnRzOjoKKiBKdW1wczo6CiogQ2xlYW51cHM6OgoqIEdJTVBMRSBFeGNlcHRpb24gSGFuZGxpbmc6OgoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IEJsb2NrcywgIE5leHQ6IFN0YXRlbWVudCBTZXF1ZW5jZXMsICBVcDogU3RhdGVtZW50cwoKMTAuMi40LjEgQmxvY2tzCi4uLi4uLi4uLi4uLi4uLgoKQmxvY2sgc2NvcGVzIGFuZCB0aGUgdmFyaWFibGVzIHRoZXkgZGVjbGFyZSBpbiBHRU5FUklDIGFuZCBHSU1QTEUgYXJlCmV4cHJlc3NlZCB1c2luZyB0aGUgJ0JJTkRfRVhQUicgY29kZSwgd2hpY2ggaW4gcHJldmlvdXMgdmVyc2lvbnMgb2YgR0NDCndhcyBwcmltYXJpbHkgdXNlZCBmb3IgdGhlIEMgc3RhdGVtZW50LWV4cHJlc3Npb24gZXh0ZW5zaW9uLgoKIFZhcmlhYmxlcyBpbiBhIGJsb2NrIGFyZSBjb2xsZWN0ZWQgaW50byAnQklORF9FWFBSX1ZBUlMnIGluIGRlY2xhcmF0aW9uCm9yZGVyLiAgQW55IHJ1bnRpbWUgaW5pdGlhbGl6YXRpb24gaXMgbW92ZWQgb3V0IG9mICdERUNMX0lOSVRJQUwnIGFuZAppbnRvIGEgc3RhdGVtZW50IGluIHRoZSBjb250cm9sbGVkIGJsb2NrLiAgV2hlbiBnaW1wbGlmeWluZyBmcm9tIEMgb3IKQysrLCB0aGlzIGluaXRpYWxpemF0aW9uIHJlcGxhY2VzIHRoZSAnREVDTF9TVE1UJy4KCiBWYXJpYWJsZS1sZW5ndGggYXJyYXlzIChWTEFzKSBjb21wbGljYXRlIHRoaXMgcHJvY2VzcywgYXMgdGhlaXIgc2l6ZQpvZnRlbiByZWZlcnMgdG8gdmFyaWFibGVzIGluaXRpYWxpemVkIGVhcmxpZXIgaW4gdGhlIGJsb2NrLiAgVG8gaGFuZGxlCnRoaXMsIHdlIGN1cnJlbnRseSBzcGxpdCB0aGUgYmxvY2sgYXQgdGhhdCBwb2ludCwgYW5kIG1vdmUgdGhlIFZMQSBpbnRvCmEgbmV3LCBpbm5lciAnQklORF9FWFBSJy4gIFRoaXMgc3RyYXRlZ3kgbWF5IGNoYW5nZSBpbiB0aGUgZnV0dXJlLgoKICdERUNMX1NBVkVEX1RSRUUnIGZvciBhIEdJTVBMRSBmdW5jdGlvbiB3aWxsIGFsd2F5cyBiZSBhICdCSU5EX0VYUFInCndoaWNoIGNvbnRhaW5zIGRlY2xhcmF0aW9ucyBmb3IgdGhlIHRlbXBvcmFyeSB2YXJpYWJsZXMgdXNlZCBpbiB0aGUKZnVuY3Rpb24uCgogQSBDKysgcHJvZ3JhbSB3aWxsIHVzdWFsbHkgY29udGFpbiBtb3JlICdCSU5EX0VYUFIncyB0aGFuIHRoZXJlIGFyZQpzeW50YWN0aWMgYmxvY2tzIGluIHRoZSBzb3VyY2UgY29kZSwgc2luY2Ugc2V2ZXJhbCBDKysgY29uc3RydWN0cyBoYXZlCmltcGxpY2l0IHNjb3BlcyBhc3NvY2lhdGVkIHdpdGggdGhlbS4gIE9uIHRoZSBvdGhlciBoYW5kLCBhbHRob3VnaCB0aGUKQysrIGZyb250IGVuZCB1c2VzIHBzZXVkby1zY29wZXMgdG8gaGFuZGxlIGNsZWFudXBzIGZvciBvYmplY3RzIHdpdGgKZGVzdHJ1Y3RvcnMsIHRoZXNlIGRvbid0IHRyYW5zbGF0ZSBpbnRvIHRoZSBHSU1QTEUgZm9ybTsgbXVsdGlwbGUKZGVjbGFyYXRpb25zIGF0IHRoZSBzYW1lIGxldmVsIHVzZSB0aGUgc2FtZSAnQklORF9FWFBSJy4KCh8KRmlsZTogZ2NjaW50LmluZm8sICBOb2RlOiBTdGF0ZW1lbnQgU2VxdWVuY2VzLCAgTmV4dDogRW1wdHkgU3RhdGVtZW50cywgIFByZXY6IEJsb2NrcywgIFVwOiBTdGF0ZW1lbnRzCgoxMC4yLjQuMiBTdGF0ZW1lbnQgU2VxdWVuY2VzCi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KCk11bHRpcGxlIHN0YXRlbWVudHMgYXQgdGhlIHNhbWUgbmVzdGluZyBsZXZlbCBhcmUgY29sbGVjdGVkIGludG8gYQonU1RBVEVNRU5UX0xJU1QnLiAgU3RhdGVtZW50IGxpc3RzIGFyZSBtb2RpZmllZCBhbmQgdHJhdmVyc2VkIHVzaW5nIHRoZQppbnRlcmZhY2UgaW4gJ3RyZWUtaXRlcmF0b3IuaCcuCgofCkZpbGU6IGdjY2ludC5pbmZvLCAgTm9kZTogRW1wdHkgU3RhdGVtZW50cywgIE5leHQ6IExvb3BzLCAgUHJldjogU3RhdGVtZW50IFNlcXVlbmNlcywgIFVwOiBTdGF0ZW1lbnRzCgoxMC4yLjQuMyBFbXB0eSBTdGF0ZW1lbnRzCi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KCldoZW5ldmVyIHBvc3NpYmxlLCBzdGF0ZW1lbnRzIHdpdGggbm8gZWZmZWN0IGFyZSBkaXNjYXJkZWQuICBCdXQgaWYgdGhleQphcmUgbmVzdGVkIHdpdGhpbiBhbm90aGVyIGNvbnN0cnVjdCB3aGljaCBjYW5ub3QgYmUgZGlzY2FyZGVkIGZvciBzb21lCnJlYXNvbiwgdGhleSBhcmUgaW5zdGVhZCByZXBsYWNlZCB3aXRoIGFuIGVtcHR5IHN0YXRlbWVudCwgZ2VuZXJhdGVkIGJ5CididWlsZF9lbXB0eV9zdG10Jy4gIEluaXRpYWxseSwgYWxsIGVtcHR5IHN0YXRlbWVudHMgd2VyZSBzaGFyZWQsIGFmdGVyCnRoZSBwYXR0ZXJuIG9mIHRoZSBKYXZhIGZyb250IGVuZCwgYnV0IHRoaXMgY2F1c2VkIGEgbG90IG9mIHRyb3VibGUgaW4KcHJhY3RpY2UuCgogQW4gZW1wdHkgc3RhdGVtZW50IGlzIHJlcHJlc2VudGVkIGFzICcodm9pZCkwJy4KCh8KRmlsZTogZ2NjaW50LmluZm8sICBOb2RlOiBMb29wcywgIE5leHQ6IFNlbGVjdGlvbiBTdGF0ZW1lbnRzLCAgUHJldjogRW1wdHkgU3RhdGVtZW50cywgIFVwOiBTdGF0ZW1lbnRzCgoxMC4yLjQuNCBMb29wcwouLi4uLi4uLi4uLi4uLgoKQXQgb25lIHRpbWUgbG9vcHMgd2VyZSBleHByZXNzZWQgaW4gR0lNUExFIHVzaW5nICdMT09QX0VYUFInLCBidXQgbm93CnRoZXkgYXJlIGxvd2VyZWQgdG8gZXhwbGljaXQgZ290b3MuCgofCkZpbGU6IGdjY2ludC5pbmZvLCAgTm9kZTogU2VsZWN0aW9uIFN0YXRlbWVudHMsICBOZXh0OiBKdW1wcywgIFByZXY6IExvb3BzLCAgVXA6IFN0YXRlbWVudHMKCjEwLjIuNC41IFNlbGVjdGlvbiBTdGF0ZW1lbnRzCi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCgpBIHNpbXBsZSBzZWxlY3Rpb24gc3RhdGVtZW50LCBzdWNoIGFzIHRoZSBDICdpZicgc3RhdGVtZW50LCBpcyBleHByZXNzZWQKaW4gR0lNUExFIHVzaW5nIGEgdm9pZCAnQ09ORF9FWFBSJy4gIElmIG9ubHkgb25lIGJyYW5jaCBpcyB1c2VkLCB0aGUKb3RoZXIgaXMgZmlsbGVkIHdpdGggYW4gZW1wdHkgc3RhdGVtZW50LgoKIE5vcm1hbGx5LCB0aGUgY29uZGl0aW9uIGV4cHJlc3Npb24gaXMgcmVkdWNlZCB0byBhIHNpbXBsZSBjb21wYXJpc29uLgpJZiBpdCBpcyBhIHNob3J0Y3V0ICgnJiYnIG9yICd8fCcpIGV4cHJlc3Npb24sIGhvd2V2ZXIsIHdlIHRyeSB0byBicmVhawp1cCB0aGUgJ2lmJyBpbnRvIG11bHRpcGxlICdpZidzIHNvIHRoYXQgdGhlIGltcGxpZWQgc2hvcnRjdXQgaXMgdGFrZW4KZGlyZWN0bHksIG11Y2ggbGlrZSB0aGUgdHJhbnNmb3JtYXRpb24gZG9uZSBieSAnZG9fanVtcCcgaW4gdGhlIFJUTApleHBhbmRlci4KCiBBICdTV0lUQ0hfRVhQUicgaW4gR0lNUExFIGNvbnRhaW5zIHRoZSBjb25kaXRpb24gYW5kIGEgJ1RSRUVfVkVDJyBvZgonQ0FTRV9MQUJFTF9FWFBSJ3MgZGVzY3JpYmluZyB0aGUgY2FzZSB2YWx1ZXMgYW5kIGNvcnJlc3BvbmRpbmcKJ0xBQkVMX0RFQ0wncyB0byBqdW1wIHRvLiAgVGhlIGJvZHkgb2YgdGhlICdzd2l0Y2gnIGlzIG1vdmVkIGFmdGVyIHRoZQonU1dJVENIX0VYUFInLgoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IEp1bXBzLCAgTmV4dDogQ2xlYW51cHMsICBQcmV2OiBTZWxlY3Rpb24gU3RhdGVtZW50cywgIFVwOiBTdGF0ZW1lbnRzCgoxMC4yLjQuNiBKdW1wcwouLi4uLi4uLi4uLi4uLgoKT3RoZXIganVtcHMgYXJlIGV4cHJlc3NlZCBieSBlaXRoZXIgJ0dPVE9fRVhQUicgb3IgJ1JFVFVSTl9FWFBSJy4KCiBUaGUgb3BlcmFuZCBvZiBhICdHT1RPX0VYUFInIG11c3QgYmUgZWl0aGVyIGEgbGFiZWwgb3IgYSB2YXJpYWJsZQpjb250YWluaW5nIHRoZSBhZGRyZXNzIHRvIGp1bXAgdG8uCgogVGhlIG9wZXJhbmQgb2YgYSAnUkVUVVJOX0VYUFInIGlzIGVpdGhlciAnTlVMTF9UUkVFJywgJ1JFU1VMVF9ERUNMJywgb3IKYSAnTU9ESUZZX0VYUFInIHdoaWNoIHNldHMgdGhlIHJldHVybiB2YWx1ZS4gIEl0IHdvdWxkIGJlIG5pY2UgdG8gbW92ZQp0aGUgJ01PRElGWV9FWFBSJyBpbnRvIGEgc2VwYXJhdGUgc3RhdGVtZW50LCBidXQgdGhlIHNwZWNpYWwgcmV0dXJuCnNlbWFudGljcyBpbiAnZXhwYW5kX3JldHVybicgbWFrZSB0aGF0IGRpZmZpY3VsdC4gIEl0IG1heSBzdGlsbCBoYXBwZW4KaW4gdGhlIGZ1dHVyZSwgcGVyaGFwcyBieSBtb3ZpbmcgbW9zdCBvZiB0aGF0IGxvZ2ljIGludG8KJ2V4cGFuZF9hc3NpZ25tZW50Jy4KCh8KRmlsZTogZ2NjaW50LmluZm8sICBOb2RlOiBDbGVhbnVwcywgIE5leHQ6IEdJTVBMRSBFeGNlcHRpb24gSGFuZGxpbmcsICBQcmV2OiBKdW1wcywgIFVwOiBTdGF0ZW1lbnRzCgoxMC4yLjQuNyBDbGVhbnVwcwouLi4uLi4uLi4uLi4uLi4uLgoKRGVzdHJ1Y3RvcnMgZm9yIGxvY2FsIEMrKyBvYmplY3RzIGFuZCBzaW1pbGFyIGR5bmFtaWMgY2xlYW51cHMgYXJlCnJlcHJlc2VudGVkIGluIEdJTVBMRSBieSBhICdUUllfRklOQUxMWV9FWFBSJy4gICdUUllfRklOQUxMWV9FWFBSJyBoYXMKdHdvIG9wZXJhbmRzLCBib3RoIG9mIHdoaWNoIGFyZSBhIHNlcXVlbmNlIG9mIHN0YXRlbWVudHMgdG8gZXhlY3V0ZS4KVGhlIGZpcnN0IHNlcXVlbmNlIGlzIGV4ZWN1dGVkLiAgV2hlbiBpdCBjb21wbGV0ZXMgdGhlIHNlY29uZCBzZXF1ZW5jZQppcyBleGVjdXRlZC4KCiBUaGUgZmlyc3Qgc2VxdWVuY2UgbWF5IGNvbXBsZXRlIGluIHRoZSBmb2xsb3dpbmcgd2F5czoKCiAgMS4gRXhlY3V0ZSB0aGUgbGFzdCBzdGF0ZW1lbnQgaW4gdGhlIHNlcXVlbmNlIGFuZCBmYWxsIG9mZiB0aGUgZW5kLgoKICAyLiBFeGVjdXRlIGEgZ290byBzdGF0ZW1lbnQgKCdHT1RPX0VYUFInKSB0byBhbiBvcmRpbmFyeSBsYWJlbCBvdXRzaWRlCiAgICAgdGhlIHNlcXVlbmNlLgoKICAzLiBFeGVjdXRlIGEgcmV0dXJuIHN0YXRlbWVudCAoJ1JFVFVSTl9FWFBSJykuCgogIDQuIFRocm93IGFuIGV4Y2VwdGlvbi4gIFRoaXMgaXMgY3VycmVudGx5IG5vdCBleHBsaWNpdGx5IHJlcHJlc2VudGVkCiAgICAgaW4gR0lNUExFLgoKIFRoZSBzZWNvbmQgc2VxdWVuY2UgaXMgbm90IGV4ZWN1dGVkIGlmIHRoZSBmaXJzdCBzZXF1ZW5jZSBjb21wbGV0ZXMgYnkKY2FsbGluZyAnc2V0am1wJyBvciAnZXhpdCcgb3IgYW55IG90aGVyIGZ1bmN0aW9uIHRoYXQgZG9lcyBub3QgcmV0dXJuLgpUaGUgc2Vjb25kIHNlcXVlbmNlIGlzIGFsc28gbm90IGV4ZWN1dGVkIGlmIHRoZSBmaXJzdCBzZXF1ZW5jZSBjb21wbGV0ZXMKdmlhIGEgbm9uLWxvY2FsIGdvdG8gb3IgYSBjb21wdXRlZCBnb3RvIChpbiBnZW5lcmFsIHRoZSBjb21waWxlciBkb2VzCm5vdCBrbm93IHdoZXRoZXIgc3VjaCBhIGdvdG8gc3RhdGVtZW50IGV4aXRzIHRoZSBmaXJzdCBzZXF1ZW5jZSBvciBub3QsCnNvIHdlIGFzc3VtZSB0aGF0IGl0IGRvZXNuJ3QpLgoKIEFmdGVyIHRoZSBzZWNvbmQgc2VxdWVuY2UgaXMgZXhlY3V0ZWQsIGlmIGl0IGNvbXBsZXRlcyBub3JtYWxseSBieQpmYWxsaW5nIG9mZiB0aGUgZW5kLCBleGVjdXRpb24gY29udGludWVzIHdoZXJldmVyIHRoZSBmaXJzdCBzZXF1ZW5jZQp3b3VsZCBoYXZlIGNvbnRpbnVlZCwgYnkgZmFsbGluZyBvZmYgdGhlIGVuZCwgb3IgZG9pbmcgYSBnb3RvLCBldGMuCgogJ1RSWV9GSU5BTExZX0VYUFInIGNvbXBsaWNhdGVzIHRoZSBmbG93IGdyYXBoLCBzaW5jZSB0aGUgY2xlYW51cCBuZWVkcwp0byBhcHBlYXIgb24gZXZlcnkgZWRnZSBvdXQgb2YgdGhlIGNvbnRyb2xsZWQgYmxvY2s7IHRoaXMgcmVkdWNlcyB0aGUKZnJlZWRvbSB0byBtb3ZlIGNvZGUgYWNyb3NzIHRoZXNlIGVkZ2VzLiAgVGhlcmVmb3JlLCB0aGUgRUggbG93ZXJpbmcKcGFzcyB3aGljaCBydW5zIGJlZm9yZSBtb3N0IG9mIHRoZSBvcHRpbWl6YXRpb24gcGFzc2VzIGVsaW1pbmF0ZXMgdGhlc2UKZXhwcmVzc2lvbnMgYnkgZXhwbGljaXRseSBhZGRpbmcgdGhlIGNsZWFudXAgdG8gZWFjaCBlZGdlLiAgUmV0aHJvd2luZwp0aGUgZXhjZXB0aW9uIGlzIHJlcHJlc2VudGVkIHVzaW5nICdSRVNYX0VYUFInLgoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IEdJTVBMRSBFeGNlcHRpb24gSGFuZGxpbmcsICBQcmV2OiBDbGVhbnVwcywgIFVwOiBTdGF0ZW1lbnRzCgoxMC4yLjQuOCBFeGNlcHRpb24gSGFuZGxpbmcKLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCgpPdGhlciBleGNlcHRpb24gaGFuZGxpbmcgY29uc3RydWN0cyBhcmUgcmVwcmVzZW50ZWQgdXNpbmcKJ1RSWV9DQVRDSF9FWFBSJy4gICdUUllfQ0FUQ0hfRVhQUicgaGFzIHR3byBvcGVyYW5kcy4gIFRoZSBmaXJzdCBvcGVyYW5kCmlzIGEgc2VxdWVuY2Ugb2Ygc3RhdGVtZW50cyB0byBleGVjdXRlLiAgSWYgZXhlY3V0aW5nIHRoZXNlIHN0YXRlbWVudHMKZG9lcyBub3QgdGhyb3cgYW4gZXhjZXB0aW9uLCB0aGVuIHRoZSBzZWNvbmQgb3BlcmFuZCBpcyBpZ25vcmVkLgpPdGhlcndpc2UsIGlmIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24sIHRoZW4gdGhlIHNlY29uZCBvcGVyYW5kIG9mIHRoZQonVFJZX0NBVENIX0VYUFInIGlzIGNoZWNrZWQuICBUaGUgc2Vjb25kIG9wZXJhbmQgbWF5IGhhdmUgdGhlIGZvbGxvd2luZwpmb3JtczoKCiAgMS4gQSBzZXF1ZW5jZSBvZiBzdGF0ZW1lbnRzIHRvIGV4ZWN1dGUuICBXaGVuIGFuIGV4Y2VwdGlvbiBvY2N1cnMsCiAgICAgdGhlc2Ugc3RhdGVtZW50cyBhcmUgZXhlY3V0ZWQsIGFuZCB0aGVuIHRoZSBleGNlcHRpb24gaXMgcmV0aHJvd24uCgogIDIuIEEgc2VxdWVuY2Ugb2YgJ0NBVENIX0VYUFInIGV4cHJlc3Npb25zLiAgRWFjaCAnQ0FUQ0hfRVhQUicgaGFzIGEKICAgICBsaXN0IG9mIGFwcGxpY2FibGUgZXhjZXB0aW9uIHR5cGVzIGFuZCBoYW5kbGVyIGNvZGUuICBJZiB0aGUgdGhyb3duCiAgICAgZXhjZXB0aW9uIG1hdGNoZXMgb25lIG9mIHRoZSBjYXVnaHQgdHlwZXMsIHRoZSBhc3NvY2lhdGVkIGhhbmRsZXIKICAgICBjb2RlIGlzIGV4ZWN1dGVkLiAgSWYgdGhlIGhhbmRsZXIgY29kZSBmYWxscyBvZmYgdGhlIGJvdHRvbSwKICAgICBleGVjdXRpb24gY29udGludWVzIGFmdGVyIHRoZSBvcmlnaW5hbCAnVFJZX0NBVENIX0VYUFInLgoKICAzLiBBbiAnRUhfRklMVEVSX0VYUFInIGV4cHJlc3Npb24uICBUaGlzIGhhcyBhIGxpc3Qgb2YgcGVybWl0dGVkCiAgICAgZXhjZXB0aW9uIHR5cGVzLCBhbmQgY29kZSB0byBoYW5kbGUgYSBtYXRjaCBmYWlsdXJlLiAgSWYgdGhlIHRocm93bgogICAgIGV4Y2VwdGlvbiBkb2VzIG5vdCBtYXRjaCBvbmUgb2YgdGhlIGFsbG93ZWQgdHlwZXMsIHRoZSBhc3NvY2lhdGVkCiAgICAgbWF0Y2ggZmFpbHVyZSBjb2RlIGlzIGV4ZWN1dGVkLiAgSWYgdGhlIHRocm93biBleGNlcHRpb24gZG9lcwogICAgIG1hdGNoLCBpdCBjb250aW51ZXMgdW53aW5kaW5nIHRoZSBzdGFjayBsb29raW5nIGZvciB0aGUgbmV4dAogICAgIGhhbmRsZXIuCgogQ3VycmVudGx5IHRocm93aW5nIGFuIGV4Y2VwdGlvbiBpcyBub3QgZGlyZWN0bHkgcmVwcmVzZW50ZWQgaW4gR0lNUExFLApzaW5jZSBpdCBpcyBpbXBsZW1lbnRlZCBieSBjYWxsaW5nIGEgZnVuY3Rpb24uICBBdCBzb21lIHBvaW50IGluIHRoZQpmdXR1cmUgd2Ugd2lsbCB3YW50IHRvIGFkZCBzb21lIHdheSB0byBleHByZXNzIHRoYXQgdGhlIGNhbGwgd2lsbCB0aHJvdwphbiBleGNlcHRpb24gb2YgYSBrbm93biB0eXBlLgoKIEp1c3QgYmVmb3JlIHJ1bm5pbmcgdGhlIG9wdGltaXplcnMsIHRoZSBjb21waWxlciBsb3dlcnMgdGhlIGhpZ2gtbGV2ZWwKRUggY29uc3RydWN0cyBhYm92ZSBpbnRvIGEgc2V0IG9mICdnb3RvJ3MsIG1hZ2ljIGxhYmVscywgYW5kIEVIIHJlZ2lvbnMuCkNvbnRpbnVpbmcgdG8gdW53aW5kIGF0IHRoZSBlbmQgb2YgYSBjbGVhbnVwIGlzIHJlcHJlc2VudGVkIHdpdGggYQonUkVTWF9FWFBSJy4KCh8KRmlsZTogZ2NjaW50LmluZm8sICBOb2RlOiBHSU1QTEUgRXhhbXBsZSwgIE5leHQ6IFJvdWdoIEdJTVBMRSBHcmFtbWFyLCAgUHJldjogU3RhdGVtZW50cywgIFVwOiBHSU1QTEUKCjEwLjIuNSBHSU1QTEUgRXhhbXBsZQotLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICAgc3RydWN0IEEgeyBBKCk7IH5BKCk7IH07CgogICAgIGludCBpOwogICAgIGludCBnKCk7CiAgICAgdm9pZCBmKCkKICAgICB7CiAgICAgICBBIGE7CiAgICAgICBpbnQgaiA9ICgtLWksIGkgPyAwIDogMSk7CgogICAgICAgZm9yIChpbnQgeCA9IDQyOyB4ID4gMDsgLS14KQogICAgICAgICB7CiAgICAgICAgICAgaSArPSBnKCkqNCArIDMyOwogICAgICAgICB9CiAgICAgfQoKIGJlY29tZXMKCiAgICAgdm9pZCBmKCkKICAgICB7CiAgICAgICBpbnQgaS4wOwogICAgICAgaW50IFQuMTsKICAgICAgIGludCBpZnRtcC4yOwogICAgICAgaW50IFQuMzsKICAgICAgIGludCBULjQ7CiAgICAgICBpbnQgVC41OwogICAgICAgaW50IFQuNjsKCiAgICAgICB7CiAgICAgICAgIHN0cnVjdCBBIGE7CiAgICAgICAgIGludCBqOwoKICAgICAgICAgX19jb21wX2N0b3IgKCZhKTsKICAgICAgICAgdHJ5CiAgICAgICAgICAgewogICAgICAgICAgICAgaS4wID0gaTsKICAgICAgICAgICAgIFQuMSA9IGkuMCAtIDE7CiAgICAgICAgICAgICBpID0gVC4xOwogICAgICAgICAgICAgaS4wID0gaTsKICAgICAgICAgICAgIGlmIChpLjAgPT0gMCkKICAgICAgICAgICAgICAgaWZ0bXAuMiA9IDE7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgIGlmdG1wLjIgPSAwOwogICAgICAgICAgICAgaiA9IGlmdG1wLjI7CiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgIGludCB4OwoKICAgICAgICAgICAgICAgeCA9IDQyOwogICAgICAgICAgICAgICBnb3RvIHRlc3Q7CiAgICAgICAgICAgICAgIGxvb3A6OwoKICAgICAgICAgICAgICAgVC4zID0gZyAoKTsKICAgICAgICAgICAgICAgVC40ID0gVC4zICogNDsKICAgICAgICAgICAgICAgaS4wID0gaTsKICAgICAgICAgICAgICAgVC41ID0gVC40ICsgaS4wOwogICAgICAgICAgICAgICBULjYgPSBULjUgKyAzMjsKICAgICAgICAgICAgICAgaSA9IFQuNjsKICAgICAgICAgICAgICAgeCA9IHggLSAxOwoKICAgICAgICAgICAgICAgdGVzdDo7CiAgICAgICAgICAgICAgIGlmICh4ID4gMCkKICAgICAgICAgICAgICAgICBnb3RvIGxvb3A7CiAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBnb3RvIGJyZWFrXzsKICAgICAgICAgICAgICAgYnJlYWtfOjsKICAgICAgICAgICAgIH0KICAgICAgICAgICB9CiAgICAgICAgIGZpbmFsbHkKICAgICAgICAgICB7CiAgICAgICAgICAgICBfX2NvbXBfZHRvciAoJmEpOwogICAgICAgICAgIH0KICAgICAgIH0KICAgICB9CgofCkZpbGU6IGdjY2ludC5pbmZvLCAgTm9kZTogUm91Z2ggR0lNUExFIEdyYW1tYXIsICBQcmV2OiBHSU1QTEUgRXhhbXBsZSwgIFVwOiBHSU1QTEUKCjEwLjIuNiBSb3VnaCBHSU1QTEUgR3JhbW1hcgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICAgICAgZnVuY3Rpb24gICAgIDogRlVOQ1RJT05fREVDTAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFQ0xfU0FWRURfVFJFRSAtPiBjb21wb3VuZC1zdG10CgogICAgICAgIGNvbXBvdW5kLXN0bXQ6IFNUQVRFTUVOVF9MSVNUCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtYmVycyAtPiBzdG10CgogICAgICAgIHN0bXQgICAgICAgICA6IGJsb2NrCiAgICAgICAgICAgICAgICAgICAgIHwgaWYtc3RtdAogICAgICAgICAgICAgICAgICAgICB8IHN3aXRjaC1zdG10CiAgICAgICAgICAgICAgICAgICAgIHwgZ290by1zdG10CiAgICAgICAgICAgICAgICAgICAgIHwgcmV0dXJuLXN0bXQKICAgICAgICAgICAgICAgICAgICAgfCByZXN4LXN0bXQKICAgICAgICAgICAgICAgICAgICAgfCBsYWJlbC1zdG10CiAgICAgICAgICAgICAgICAgICAgIHwgdHJ5LXN0bXQKICAgICAgICAgICAgICAgICAgICAgfCBtb2RpZnktc3RtdAogICAgICAgICAgICAgICAgICAgICB8IGNhbGwtc3RtdAoKICAgICAgICBibG9jayAgICAgICAgOiBCSU5EX0VYUFIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCSU5EX0VYUFJfVkFSUyAtPiBjaGFpbiBvZiBERUNMcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJJTkRfRVhQUl9CTE9DSyAtPiBCTE9DSwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJJTkRfRVhQUl9CT0RZIC0+IGNvbXBvdW5kLXN0bXQKCiAgICAgICAgaWYtc3RtdCAgICAgIDogQ09ORF9FWFBSCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3AwIC0+IGNvbmRpdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wMSAtPiBjb21wb3VuZC1zdG10CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3AyIC0+IGNvbXBvdW5kLXN0bXQKCiAgICAgICAgc3dpdGNoLXN0bXQgIDogU1dJVENIX0VYUFIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcDAgLT4gdmFsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3AxIC0+IE5VTEwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcDIgLT4gVFJFRV9WRUMgb2YgQ0FTRV9MQUJFTF9FWFBScwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgQ0FTRV9MQUJFTF9FWFBScyBhcmUgc29ydGVkIGJ5IENBU0VfTE9XLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgZGVmYXVsdCBpcyBsYXN0LgoKICAgICAgICBnb3RvLXN0bXQgICAgOiBHT1RPX0VYUFIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcDAgLT4gTEFCRUxfREVDTCB8IHZhbAoKICAgICAgICByZXR1cm4tc3RtdCAgOiBSRVRVUk5fRVhQUgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wMCAtPiByZXR1cm4tdmFsdWUKCiAgICAgICAgcmV0dXJuLXZhbHVlIDogTlVMTAogICAgICAgICAgICAgICAgICAgICB8IFJFU1VMVF9ERUNMCiAgICAgICAgICAgICAgICAgICAgIHwgTU9ESUZZX0VYUFIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcDAgLT4gUkVTVUxUX0RFQ0wKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcDEgLT4gbGhzCgogICAgICAgIHJlc3gtc3RtdCAgICA6IFJFU1hfRVhQUgoKICAgICAgICBsYWJlbC1zdG10ICAgOiBMQUJFTF9FWFBSCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3AwIC0+IExBQkVMX0RFQ0wKCiAgICAgICAgdHJ5LXN0bXQgICAgIDogVFJZX0NBVENIX0VYUFIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcDAgLT4gY29tcG91bmQtc3RtdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wMSAtPiBoYW5kbGVyCiAgICAgICAgICAgICAgICAgICAgIHwgVFJZX0ZJTkFMTFlfRVhQUgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wMCAtPiBjb21wb3VuZC1zdG10CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3AxIC0+IGNvbXBvdW5kLXN0bXQKCiAgICAgICAgaGFuZGxlciAgICAgIDogY2F0Y2gtc2VxCiAgICAgICAgICAgICAgICAgICAgIHwgRUhfRklMVEVSX0VYUFIKICAgICAgICAgICAgICAgICAgICAgfCBjb21wb3VuZC1zdG10CgogICAgICAgIGNhdGNoLXNlcSAgICA6IFNUQVRFTUVOVF9MSVNUCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtYmVycyAtPiBDQVRDSF9FWFBSCgogICAgICAgIG1vZGlmeS1zdG10ICA6IE1PRElGWV9FWFBSCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3AwIC0+IGxocwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wMSAtPiByaHMKCiAgICAgICAgY2FsbC1zdG10ICAgIDogQ0FMTF9FWFBSCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3AwIC0+IHZhbCB8IE9CSl9UWVBFX1JFRgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wMSAtPiBjYWxsLWFyZy1saXN0CgogICAgICAgIGNhbGwtYXJnLWxpc3Q6IFRSRUVfTElTVAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbWJlcnMgLT4gbGhzIHwgQ09OU1QKCiAgICAgICAgYWRkci1leHByLWFyZzogSUQKICAgICAgICAgICAgICAgICAgICAgfCBjb21wcmVmCgogICAgICAgIGFkZHJlc3NhYmxlICA6IGFkZHItZXhwci1hcmcKICAgICAgICAgICAgICAgICAgICAgfCBpbmRpcmVjdHJlZgoKICAgICAgICB3aXRoLXNpemUtYXJnOiBhZGRyZXNzYWJsZQogICAgICAgICAgICAgICAgICAgICB8IGNhbGwtc3RtdAoKICAgICAgICBpbmRpcmVjdHJlZiAgOiBJTkRJUkVDVF9SRUYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcDAgLT4gdmFsCgogICAgICAgIGxocyAgICAgICAgICA6IGFkZHJlc3NhYmxlCiAgICAgICAgICAgICAgICAgICAgIHwgYml0ZmllbGRyZWYKICAgICAgICAgICAgICAgICAgICAgfCBXSVRIX1NJWkVfRVhQUgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wMCAtPiB3aXRoLXNpemUtYXJnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3AxIC0+IHZhbAoKICAgICAgICBtaW4tbHZhbCAgICAgOiBJRAogICAgICAgICAgICAgICAgICAgICB8IGluZGlyZWN0cmVmCgogICAgICAgIGJpdGZpZWxkcmVmICA6IEJJVF9GSUVMRF9SRUYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcDAgLT4gaW5uZXItY29tcHJlZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wMSAtPiBDT05TVAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wMiAtPiB2YWwKCiAgICAgICAgY29tcHJlZiAgICAgIDogaW5uZXItY29tcHJlZgogICAgICAgICAgICAgICAgICAgICB8IFRBUkdFVF9NRU1fUkVGCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3AwIC0+IElECiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3AxIC0+IHZhbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wMiAtPiB2YWwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcDMgLT4gQ09OU1QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcDQgLT4gQ09OU1QKICAgICAgICAgICAgICAgICAgICAgfCBSRUFMUEFSVF9FWFBSCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3AwIC0+IGlubmVyLWNvbXByZWYKICAgICAgICAgICAgICAgICAgICAgfCBJTUFHUEFSVF9FWFBSCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3AwIC0+IGlubmVyLWNvbXByZWYKCiAgICAgICAgaW5uZXItY29tcHJlZjogbWluLWx2YWwKICAgICAgICAgICAgICAgICAgICAgfCBDT01QT05FTlRfUkVGCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3AwIC0+IGlubmVyLWNvbXByZWYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcDEgLT4gRklFTERfREVDTAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wMiAtPiB2YWwKICAgICAgICAgICAgICAgICAgICAgfCBBUlJBWV9SRUYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcDAgLT4gaW5uZXItY29tcHJlZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wMSAtPiB2YWwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcDIgLT4gdmFsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3AzIC0+IHZhbAogICAgICAgICAgICAgICAgICAgICB8IEFSUkFZX1JBTkdFX1JFRgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wMCAtPiBpbm5lci1jb21wcmVmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3AxIC0+IHZhbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wMiAtPiB2YWwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcDMgLT4gdmFsCiAgICAgICAgICAgICAgICAgICAgIHwgVklFV19DT05WRVJUX0VYUFIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcDAgLT4gaW5uZXItY29tcHJlZgoKICAgICAgICBjb25kaXRpb24gICAgOiB2YWwKICAgICAgICAgICAgICAgICAgICAgfCBSRUxPUAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wMCAtPiB2YWwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcDEgLT4gdmFsCgogICAgICAgIHZhbCAgICAgICAgICA6IElECiAgICAgICAgICAgICAgICAgICAgIHwgaW52YXJpYW50IEFERFJfRVhQUgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wMCAtPiBhZGRyLWV4cHItYXJnCiAgICAgICAgICAgICAgICAgICAgIHwgQ09OU1QKCiAgICAgICAgcmhzICAgICAgICAgIDogbGhzCiAgICAgICAgICAgICAgICAgICAgIHwgQ09OU1QKICAgICAgICAgICAgICAgICAgICAgfCBjYWxsLXN0bXQKICAgICAgICAgICAgICAgICAgICAgfCBBRERSX0VYUFIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcDAgLT4gYWRkci1leHByLWFyZwogICAgICAgICAgICAgICAgICAgICB8IFVOT1AKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcDAgLT4gdmFsCiAgICAgICAgICAgICAgICAgICAgIHwgQklOT1AKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcDAgLT4gdmFsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3AxIC0+IHZhbAogICAgICAgICAgICAgICAgICAgICB8IFJFTE9QCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3AwIC0+IHZhbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wMSAtPiB2YWwKICAgICAJCXwgQ09ORF9FWFBSCiAgICAgCQkJb3AwIC0+IGNvbmRpdGlvbgogICAgIAkJCW9wMSAtPiB2YWwKICAgICAJCQlvcDIgLT4gdmFsCgofCkZpbGU6IGdjY2ludC5pbmZvLCAgTm9kZTogQW5ub3RhdGlvbnMsICBOZXh0OiBTdGF0ZW1lbnQgT3BlcmFuZHMsICBQcmV2OiBHSU1QTEUsICBVcDogVHJlZSBTU0EKCjEwLjMgQW5ub3RhdGlvbnMKPT09PT09PT09PT09PT09PQoKVGhlIG9wdGltaXplcnMgbmVlZCB0byBhc3NvY2lhdGUgYXR0cmlidXRlcyB3aXRoIHN0YXRlbWVudHMgYW5kCnZhcmlhYmxlcyBkdXJpbmcgdGhlIG9wdGltaXphdGlvbiBwcm9jZXNzLiAgRm9yIGluc3RhbmNlLCB3ZSBuZWVkIHRvCmtub3cgd2hhdCBiYXNpYyBibG9jayBhIHN0YXRlbWVudCBiZWxvbmdzIHRvIG9yIHdoZXRoZXIgYSB2YXJpYWJsZSBoYXMKYWxpYXNlcy4gIEFsbCB0aGVzZSBhdHRyaWJ1dGVzIGFyZSBzdG9yZWQgaW4gZGF0YSBzdHJ1Y3R1cmVzIGNhbGxlZAphbm5vdGF0aW9ucyB3aGljaCBhcmUgdGhlbiBsaW5rZWQgdG8gdGhlIGZpZWxkICdhbm4nIGluICdzdHJ1Y3QKdHJlZV9jb21tb24nLgoKIFByZXNlbnRseSwgd2UgZGVmaW5lIGFubm90YXRpb25zIGZvciBzdGF0ZW1lbnRzICgnc3RtdF9hbm5fdCcpLAp2YXJpYWJsZXMgKCd2YXJfYW5uX3QnKSBhbmQgU1NBIG5hbWVzICgnc3NhX25hbWVfYW5uX3QnKS4gIEFubm90YXRpb25zCmFyZSBkZWZpbmVkIGFuZCBkb2N1bWVudGVkIGluICd0cmVlLWZsb3cuaCcuCgofCkZpbGU6IGdjY2ludC5pbmZvLCAgTm9kZTogU3RhdGVtZW50IE9wZXJhbmRzLCAgTmV4dDogU1NBLCAgUHJldjogQW5ub3RhdGlvbnMsICBVcDogVHJlZSBTU0EKCjEwLjQgU3RhdGVtZW50IE9wZXJhbmRzCj09PT09PT09PT09PT09PT09PT09PT09CgpBbG1vc3QgZXZlcnkgR0lNUExFIHN0YXRlbWVudCB3aWxsIGNvbnRhaW4gYSByZWZlcmVuY2UgdG8gYSB2YXJpYWJsZSBvcgptZW1vcnkgbG9jYXRpb24uICBTaW5jZSBzdGF0ZW1lbnRzIGNvbWUgaW4gZGlmZmVyZW50IHNoYXBlcyBhbmQgc2l6ZXMsCnRoZWlyIG9wZXJhbmRzIGFyZSBnb2luZyB0byBiZSBsb2NhdGVkIGF0IHZhcmlvdXMgc3BvdHMgaW5zaWRlIHRoZQpzdGF0ZW1lbnQncyB0cmVlLiAgVG8gZmFjaWxpdGF0ZSBhY2Nlc3MgdG8gdGhlIHN0YXRlbWVudCdzIG9wZXJhbmRzLAp0aGV5IGFyZSBvcmdhbml6ZWQgaW50byBsaXN0cyBhc3NvY2lhdGVkIGluc2lkZSBlYWNoIHN0YXRlbWVudCdzCmFubm90YXRpb24uICBFYWNoIGVsZW1lbnQgaW4gYW4gb3BlcmFuZCBsaXN0IGlzIGEgcG9pbnRlciB0byBhCidWQVJfREVDTCcsICdQQVJNX0RFQ0wnIG9yICdTU0FfTkFNRScgdHJlZSBub2RlLiAgVGhpcyBwcm92aWRlcyBhIHZlcnkKY29udmVuaWVudCB3YXkgb2YgZXhhbWluaW5nIGFuZCByZXBsYWNpbmcgb3BlcmFuZHMuCgogRGF0YSBmbG93IGFuYWx5c2lzIGFuZCBvcHRpbWl6YXRpb24gaXMgZG9uZSBvbiBhbGwgdHJlZSBub2RlcwpyZXByZXNlbnRpbmcgdmFyaWFibGVzLiAgQW55IG5vZGUgZm9yIHdoaWNoICdTU0FfVkFSX1AnIHJldHVybnMgbm9uemVybwppcyBjb25zaWRlcmVkIHdoZW4gc2Nhbm5pbmcgc3RhdGVtZW50IG9wZXJhbmRzLiAgSG93ZXZlciwgbm90IGFsbAonU1NBX1ZBUl9QJyB2YXJpYWJsZXMgYXJlIHByb2Nlc3NlZCBpbiB0aGUgc2FtZSB3YXkuICBGb3IgdGhlIHB1cnBvc2VzCm9mIG9wdGltaXphdGlvbiwgd2UgbmVlZCB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIHJlZmVyZW5jZXMgdG8gbG9jYWwKc2NhbGFyIHZhcmlhYmxlcyBhbmQgcmVmZXJlbmNlcyB0byBnbG9iYWxzLCBzdGF0aWNzLCBzdHJ1Y3R1cmVzLCBhcnJheXMsCmFsaWFzZWQgdmFyaWFibGVzLCBldGMuICBUaGUgcmVhc29uIGlzIHNpbXBsZSwgdGhlIGNvbXBpbGVyIGNhbiBnYXRoZXIKY29tcGxldGUgZGF0YSBmbG93IGluZm9ybWF0aW9uIGZvciBhIGxvY2FsIHNjYWxhci4gIE9uIHRoZSBvdGhlciBoYW5kLCBhCmdsb2JhbCB2YXJpYWJsZSBtYXkgYmUgbW9kaWZpZWQgYnkgYSBmdW5jdGlvbiBjYWxsLCBpdCBtYXkgbm90IGJlCnBvc3NpYmxlIHRvIGtlZXAgdHJhY2sgb2YgYWxsIHRoZSBlbGVtZW50cyBvZiBhbiBhcnJheSBvciB0aGUgZmllbGRzIG9mCmEgc3RydWN0dXJlLCBldGMuCgogVGhlIG9wZXJhbmQgc2Nhbm5lciBnYXRoZXJzIHR3byBraW5kcyBvZiBvcGVyYW5kczogInJlYWwiIGFuZAoidmlydHVhbCIuICBBbiBvcGVyYW5kIGZvciB3aGljaCAnaXNfZ2ltcGxlX3JlZycgcmV0dXJucyB0cnVlIGlzCmNvbnNpZGVyZWQgcmVhbCwgb3RoZXJ3aXNlIGl0IGlzIGEgdmlydHVhbCBvcGVyYW5kLiAgV2UgYWxzbyBkaXN0aW5ndWlzaApiZXR3ZWVuIHVzZXMgYW5kIGRlZmluaXRpb25zLiAgQW4gb3BlcmFuZCBpcyB1c2VkIGlmIGl0cyB2YWx1ZSBpcyBsb2FkZWQKYnkgdGhlIHN0YXRlbWVudCAoZS5nLiwgdGhlIG9wZXJhbmQgYXQgdGhlIFJIUyBvZiBhbiBhc3NpZ25tZW50KS4gIElmCnRoZSBzdGF0ZW1lbnQgYXNzaWducyBhIG5ldyB2YWx1ZSB0byB0aGUgb3BlcmFuZCwgdGhlIG9wZXJhbmQgaXMKY29uc2lkZXJlZCBhIGRlZmluaXRpb24gKGUuZy4sIHRoZSBvcGVyYW5kIGF0IHRoZSBMSFMgb2YgYW4gYXNzaWdubWVudCkuCgogVmlydHVhbCBhbmQgcmVhbCBvcGVyYW5kcyBhbHNvIGhhdmUgdmVyeSBkaWZmZXJlbnQgZGF0YSBmbG93CnByb3BlcnRpZXMuICBSZWFsIG9wZXJhbmRzIGFyZSB1bmFtYmlndW91cyByZWZlcmVuY2VzIHRvIHRoZSBmdWxsIG9iamVjdAp0aGF0IHRoZXkgcmVwcmVzZW50LiAgRm9yIGluc3RhbmNlLCBnaXZlbgoKICAgICB7CiAgICAgICBpbnQgYSwgYjsKICAgICAgIGEgPSBiCiAgICAgfQoKIFNpbmNlICdhJyBhbmQgJ2InIGFyZSBub24tYWxpYXNlZCBsb2NhbHMsIHRoZSBzdGF0ZW1lbnQgJ2EgPSBiJyB3aWxsCmhhdmUgb25lIHJlYWwgZGVmaW5pdGlvbiBhbmQgb25lIHJlYWwgdXNlIGJlY2F1c2UgdmFyaWFibGUgJ2InIGlzCmNvbXBsZXRlbHkgbW9kaWZpZWQgd2l0aCB0aGUgY29udGVudHMgb2YgdmFyaWFibGUgJ2EnLiAgUmVhbCBkZWZpbml0aW9uCmFyZSBhbHNvIGtub3duIGFzICJraWxsaW5nIGRlZmluaXRpb25zIi4gIFNpbWlsYXJseSwgdGhlIHVzZSBvZiAnYScKcmVhZHMgYWxsIGl0cyBiaXRzLgoKIEluIGNvbnRyYXN0LCB2aXJ0dWFsIG9wZXJhbmRzIGFyZSB1c2VkIHdpdGggdmFyaWFibGVzIHRoYXQgY2FuIGhhdmUgYQpwYXJ0aWFsIG9yIGFtYmlndW91cyByZWZlcmVuY2UuICBUaGlzIGluY2x1ZGVzIHN0cnVjdHVyZXMsIGFycmF5cywKZ2xvYmFscywgYW5kIGFsaWFzZWQgdmFyaWFibGVzLiAgSW4gdGhlc2UgY2FzZXMsIHdlIGhhdmUgdHdvIHR5cGVzIG9mCmRlZmluaXRpb25zLiAgRm9yIGdsb2JhbHMsIHN0cnVjdHVyZXMsIGFuZCBhcnJheXMsIHdlIGNhbiBkZXRlcm1pbmUgZnJvbQphIHN0YXRlbWVudCB3aGV0aGVyIGEgdmFyaWFibGUgb2YgdGhlc2UgdHlwZXMgaGFzIGEga2lsbGluZyBkZWZpbml0aW9uLgpJZiB0aGUgdmFyaWFibGUgZG9lcywgdGhlbiB0aGUgc3RhdGVtZW50IGlzIG1hcmtlZCBhcyBoYXZpbmcgYSAibXVzdApkZWZpbml0aW9uIiBvZiB0aGF0IHZhcmlhYmxlLiAgSG93ZXZlciwgaWYgYSBzdGF0ZW1lbnQgaXMgb25seSBkZWZpbmluZwphIHBhcnQgb2YgdGhlIHZhcmlhYmxlIChpLmUuIGEgZmllbGQgaW4gYSBzdHJ1Y3R1cmUpLCBvciBpZiB3ZSBrbm93IHRoYXQKYSBzdGF0ZW1lbnQgbWlnaHQgZGVmaW5lIHRoZSB2YXJpYWJsZSBidXQgd2UgY2Fubm90IHNheSBmb3Igc3VyZSwgdGhlbgp3ZSBtYXJrIHRoYXQgc3RhdGVtZW50IGFzIGhhdmluZyBhICJtYXkgZGVmaW5pdGlvbiIuICBGb3IgaW5zdGFuY2UsCmdpdmVuCgogICAgIHsKICAgICAgIGludCBhLCBiLCAqcDsKCiAgICAgICBpZiAoLi4uKQogICAgICAgICBwID0gJmE7CiAgICAgICBlbHNlCiAgICAgICAgIHAgPSAmYjsKICAgICAgICpwID0gNTsKICAgICAgIHJldHVybiAqcDsKICAgICB9CgogVGhlIGFzc2lnbm1lbnQgJypwID0gNScgbWF5IGJlIGEgZGVmaW5pdGlvbiBvZiAnYScgb3IgJ2InLiAgSWYgd2UKY2Fubm90IGRldGVybWluZSBzdGF0aWNhbGx5IHdoZXJlICdwJyBpcyBwb2ludGluZyB0byBhdCB0aGUgdGltZSBvZiB0aGUKc3RvcmUgb3BlcmF0aW9uLCB3ZSBjcmVhdGUgdmlydHVhbCBkZWZpbml0aW9ucyB0byBtYXJrIHRoYXQgc3RhdGVtZW50IGFzCmEgcG90ZW50aWFsIGRlZmluaXRpb24gc2l0ZSBmb3IgJ2EnIGFuZCAnYicuICBNZW1vcnkgbG9hZHMgYXJlIHNpbWlsYXJseQptYXJrZWQgd2l0aCB2aXJ0dWFsIHVzZSBvcGVyYW5kcy4gIFZpcnR1YWwgb3BlcmFuZHMgYXJlIHNob3duIGluIHRyZWUKZHVtcHMgcmlnaHQgYmVmb3JlIHRoZSBzdGF0ZW1lbnQgdGhhdCBjb250YWlucyB0aGVtLiAgVG8gcmVxdWVzdCBhIHRyZWUKZHVtcCB3aXRoIHZpcnR1YWwgb3BlcmFuZHMsIHVzZSB0aGUgJy12b3BzJyBvcHRpb24gdG8gJy1mZHVtcC10cmVlJzoKCiAgICAgewogICAgICAgaW50IGEsIGIsICpwOwoKICAgICAgIGlmICguLi4pCiAgICAgICAgIHAgPSAmYTsKICAgICAgIGVsc2UKICAgICAgICAgcCA9ICZiOwogICAgICAgIyBhID0gVkRFRiA8YT4KICAgICAgICMgYiA9IFZERUYgPGI+CiAgICAgICAqcCA9IDU7CgogICAgICAgIyBWVVNFIDxhPgogICAgICAgIyBWVVNFIDxiPgogICAgICAgcmV0dXJuICpwOwogICAgIH0KCiBOb3RpY2UgdGhhdCAnVkRFRicgb3BlcmFuZHMgaGF2ZSB0d28gY29waWVzIG9mIHRoZSByZWZlcmVuY2VkIHZhcmlhYmxlLgpUaGlzIGluZGljYXRlcyB0aGF0IHRoaXMgaXMgbm90IGEga2lsbGluZyBkZWZpbml0aW9uIG9mIHRoYXQgdmFyaWFibGUuCkluIHRoaXMgY2FzZSB3ZSByZWZlciB0byBpdCBhcyBhICJtYXkgZGVmaW5pdGlvbiIgb3IgImFsaWFzZWQgc3RvcmUiLgpUaGUgcHJlc2VuY2Ugb2YgdGhlIHNlY29uZCBjb3B5IG9mIHRoZSB2YXJpYWJsZSBpbiB0aGUgJ1ZERUYnIG9wZXJhbmQKd2lsbCBiZWNvbWUgaW1wb3J0YW50IHdoZW4gdGhlIGZ1bmN0aW9uIGlzIGNvbnZlcnRlZCBpbnRvIFNTQSBmb3JtLgpUaGlzIHdpbGwgYmUgdXNlZCB0byBsaW5rIGFsbCB0aGUgbm9uLWtpbGxpbmcgZGVmaW5pdGlvbnMgdG8gcHJldmVudApvcHRpbWl6YXRpb25zIGZyb20gbWFraW5nIGluY29ycmVjdCBhc3N1bXB0aW9ucyBhYm91dCB0aGVtLgoKIE9wZXJhbmRzIGFyZSB1cGRhdGVkIGFzIHNvb24gYXMgdGhlIHN0YXRlbWVudCBpcyBmaW5pc2hlZCB2aWEgYSBjYWxsIHRvCid1cGRhdGVfc3RtdCcuICBJZiBzdGF0ZW1lbnQgZWxlbWVudHMgYXJlIGNoYW5nZWQgdmlhICdTRVRfVVNFJyBvcgonU0VUX0RFRicsIHRoZW4gbm8gZnVydGhlciBhY3Rpb24gaXMgcmVxdWlyZWQgKGkuZS4sIHRob3NlIG1hY3JvcyB0YWtlCmNhcmUgb2YgdXBkYXRpbmcgdGhlIHN0YXRlbWVudCkuICBJZiBjaGFuZ2VzIGFyZSBtYWRlIGJ5IG1hbmlwdWxhdGluZwp0aGUgc3RhdGVtZW50J3MgdHJlZSBkaXJlY3RseSwgdGhlbiBhIGNhbGwgbXVzdCBiZSBtYWRlIHRvICd1cGRhdGVfc3RtdCcKd2hlbiBjb21wbGV0ZS4gIENhbGxpbmcgb25lIG9mIHRoZSAnYnNpX2luc2VydCcgcm91dGluZXMgb3IKJ2JzaV9yZXBsYWNlJyBwZXJmb3JtcyBhbiBpbXBsaWNpdCBjYWxsIHRvICd1cGRhdGVfc3RtdCcuCgoxMC40LjEgT3BlcmFuZCBJdGVyYXRvcnMgQW5kIEFjY2VzcyBSb3V0aW5lcwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKT3BlcmFuZHMgYXJlIGNvbGxlY3RlZCBieSAndHJlZS1zc2Etb3BlcmFuZHMuYycuICBUaGV5IGFyZSBzdG9yZWQgaW5zaWRlCmVhY2ggc3RhdGVtZW50J3MgYW5ub3RhdGlvbiBhbmQgY2FuIGJlIGFjY2Vzc2VkIHRocm91Z2ggZWl0aGVyIHRoZQpvcGVyYW5kIGl0ZXJhdG9ycyBvciBhbiBhY2Nlc3Mgcm91dGluZS4KCiBUaGUgZm9sbG93aW5nIGFjY2VzcyByb3V0aW5lcyBhcmUgYXZhaWxhYmxlIGZvciBleGFtaW5pbmcgb3BlcmFuZHM6CgogIDEuICdTSU5HTEVfU1NBX3tVU0UsREVGLFRSRUV9X09QRVJBTkQnOiBUaGVzZSBhY2Nlc3NvcnMgd2lsbCByZXR1cm4KICAgICBOVUxMIHVubGVzcyB0aGVyZSBpcyBleGFjdGx5IG9uZSBvcGVyYW5kIG1hdGNoaW5nIHRoZSBzcGVjaWZpZWQKICAgICBmbGFncy4gIElmIHRoZXJlIGlzIGV4YWN0bHkgb25lIG9wZXJhbmQsIHRoZSBvcGVyYW5kIGlzIHJldHVybmVkIGFzCiAgICAgZWl0aGVyIGEgJ3RyZWUnLCAnZGVmX29wZXJhbmRfcCcsIG9yICd1c2Vfb3BlcmFuZF9wJy4KCiAgICAgICAgICB0cmVlIHQgPSBTSU5HTEVfU1NBX1RSRUVfT1BFUkFORCAoc3RtdCwgZmxhZ3MpOwogICAgICAgICAgdXNlX29wZXJhbmRfcCB1ID0gU0lOR0xFX1NTQV9VU0VfT1BFUkFORCAoc3RtdCwgU1NBX0FMTF9WSVJUVUFMX1VTRVMpOwogICAgICAgICAgZGVmX29wZXJhbmRfcCBkID0gU0lOR0xFX1NTQV9ERUZfT1BFUkFORCAoc3RtdCwgU1NBX09QX0FMTF9ERUZTKTsKCiAgMi4gJ1pFUk9fU1NBX09QRVJBTkRTJzogVGhpcyBtYWNybyByZXR1cm5zIHRydWUgaWYgdGhlcmUgYXJlIG5vCiAgICAgb3BlcmFuZHMgbWF0Y2hpbmcgdGhlIHNwZWNpZmllZCBmbGFncy4KCiAgICAgICAgICBpZiAoWkVST19TU0FfT1BFUkFORFMgKHN0bXQsIFNTQV9PUF9BTExfVklSVFVBTFMpKQogICAgICAgICAgICByZXR1cm47CgogIDMuICdOVU1fU1NBX09QRVJBTkRTJzogVGhpcyBtYWNybyBSZXR1cm5zIHRoZSBudW1iZXIgb2Ygb3BlcmFuZHMKICAgICBtYXRjaGluZyAnZmxhZ3MnLiAgVGhpcyBhY3R1YWxseSBleGVjdXRlcyBhIGxvb3AgdG8gcGVyZm9ybSB0aGUKICAgICBjb3VudCwgc28gb25seSB1c2UgdGhpcyBpZiBpdCBpcyByZWFsbHkgbmVlZGVkLgoKICAgICAgICAgIGludCBjb3VudCA9IE5VTV9TU0FfT1BFUkFORFMgKHN0bXQsIGZsYWdzKQoKIElmIHlvdSB3aXNoIHRvIGl0ZXJhdGUgb3ZlciBzb21lIG9yIGFsbCBvcGVyYW5kcywgdXNlIHRoZQonRk9SX0VBQ0hfU1NBX3tVU0UsREVGLFRSRUV9X09QRVJBTkQnIGl0ZXJhdG9yLiAgRm9yIGV4YW1wbGUsIHRvIHByaW50CmFsbCB0aGUgb3BlcmFuZHMgZm9yIGEgc3RhdGVtZW50OgoKICAgICB2b2lkCiAgICAgcHJpbnRfb3BzICh0cmVlIHN0bXQpCiAgICAgewogICAgICAgc3NhX29wX2l0ZXI7CiAgICAgICB0cmVlIHZhcjsKCiAgICAgICBGT1JfRUFDSF9TU0FfVFJFRV9PUEVSQU5EICh2YXIsIHN0bXQsIGl0ZXIsIFNTQV9PUF9BTExfT1BFUkFORFMpCiAgICAgICAgIHByaW50X2dlbmVyaWNfZXhwciAoc3RkZXJyLCB2YXIsIFRERl9TTElNKTsKICAgICB9CgogSG93IHRvIGNob29zZSB0aGUgYXBwcm9wcmlhdGUgaXRlcmF0b3I6CgogIDEuIERldGVybWluZSB3aGV0aGVyIHlvdSBhcmUgbmVlZCB0byBzZWUgdGhlIG9wZXJhbmQgcG9pbnRlcnMsIG9yIGp1c3QKICAgICB0aGUgdHJlZXMsIGFuZCBjaG9vc2UgdGhlIGFwcHJvcHJpYXRlIG1hY3JvOgoKICAgICAgICAgIE5lZWQgICAgICAgICAgICBNYWNybzoKICAgICAgICAgIC0tLS0gICAgICAgICAgICAtLS0tLS0tCiAgICAgICAgICB1c2Vfb3BlcmFuZF9wICAgRk9SX0VBQ0hfU1NBX1VTRV9PUEVSQU5ECiAgICAgICAgICBkZWZfb3BlcmFuZF9wICAgRk9SX0VBQ0hfU1NBX0RFRl9PUEVSQU5ECiAgICAgICAgICB0cmVlICAgICAgICAgICAgRk9SX0VBQ0hfU1NBX1RSRUVfT1BFUkFORAoKICAyLiBZb3UgbmVlZCB0byBkZWNsYXJlIGEgdmFyaWFibGUgb2YgdGhlIHR5cGUgeW91IGFyZSBpbnRlcmVzdGVkIGluLAogICAgIGFuZCBhbiBzc2Ffb3BfaXRlciBzdHJ1Y3R1cmUgd2hpY2ggc2VydmVzIGFzIHRoZSBsb29wIGNvbnRyb2xsaW5nCiAgICAgdmFyaWFibGUuCgogIDMuIERldGVybWluZSB3aGljaCBvcGVyYW5kcyB5b3Ugd2lzaCB0byB1c2UsIGFuZCBzcGVjaWZ5IHRoZSBmbGFncyBvZgogICAgIHRob3NlIHlvdSBhcmUgaW50ZXJlc3RlZCBpbi4gIFRoZXkgYXJlIGRvY3VtZW50ZWQgaW4KICAgICAndHJlZS1zc2Etb3BlcmFuZHMuaCc6CgogICAgICAgICAgI2RlZmluZSBTU0FfT1BfVVNFICAgICAgICAgICAgICAweDAxICAgIC8qIFJlYWwgVVNFIG9wZXJhbmRzLiAgKi8KICAgICAgICAgICNkZWZpbmUgU1NBX09QX0RFRiAgICAgICAgICAgICAgMHgwMiAgICAvKiBSZWFsIERFRiBvcGVyYW5kcy4gICovCiAgICAgICAgICAjZGVmaW5lIFNTQV9PUF9WVVNFICAgICAgICAgICAgIDB4MDQgICAgLyogVlVTRSBvcGVyYW5kcy4gICovCiAgICAgICAgICAjZGVmaW5lIFNTQV9PUF9WTUFZVVNFICAgICAgICAgIDB4MDggICAgLyogVVNFIHBvcnRpb24gb2YgVkRFRlMuICAqLwogICAgICAgICAgI2RlZmluZSBTU0FfT1BfVkRFRiAgICAgICAgICAgICAweDEwICAgIC8qIERFRiBwb3J0aW9uIG9mIFZERUZTLiAgKi8KCiAgICAgICAgICAvKiBUaGVzZSBhcmUgY29tbW9ubHkgZ3JvdXBlZCBvcGVyYW5kIGZsYWdzLiAgKi8KICAgICAgICAgICNkZWZpbmUgU1NBX09QX1ZJUlRVQUxfVVNFUyAgICAgKFNTQV9PUF9WVVNFIHwgU1NBX09QX1ZNQVlVU0UpCiAgICAgICAgICAjZGVmaW5lIFNTQV9PUF9WSVJUVUFMX0RFRlMgICAgIChTU0FfT1BfVkRFRikKICAgICAgICAgICNkZWZpbmUgU1NBX09QX0FMTF9VU0VTICAgICAgICAgKFNTQV9PUF9WSVJUVUFMX1VTRVMgfCBTU0FfT1BfVVNFKQogICAgICAgICAgI2RlZmluZSBTU0FfT1BfQUxMX0RFRlMgICAgICAgICAoU1NBX09QX1ZJUlRVQUxfREVGUyB8IFNTQV9PUF9ERUYpCiAgICAgICAgICAjZGVmaW5lIFNTQV9PUF9BTExfT1BFUkFORFMgICAgIChTU0FfT1BfQUxMX1VTRVMgfCBTU0FfT1BfQUxMX0RFRlMpCgogU28gaWYgeW91IHdhbnQgdG8gbG9vayBhdCB0aGUgdXNlIHBvaW50ZXJzIGZvciBhbGwgdGhlICdVU0UnIGFuZCAnVlVTRScKb3BlcmFuZHMsIHlvdSB3b3VsZCBkbyBzb21ldGhpbmcgbGlrZToKCiAgICAgICB1c2Vfb3BlcmFuZF9wIHVzZV9wOwogICAgICAgc3NhX29wX2l0ZXIgaXRlcjsKCiAgICAgICBGT1JfRUFDSF9TU0FfVVNFX09QRVJBTkQgKHVzZV9wLCBzdG10LCBpdGVyLCAoU1NBX09QX1VTRSB8IFNTQV9PUF9WVVNFKSkKICAgICAgICAgewogICAgICAgICAgIHByb2Nlc3NfdXNlX3B0ciAodXNlX3ApOwogICAgICAgICB9CgogVGhlICdUUkVFJyBtYWNybyBpcyBiYXNpY2FsbHkgdGhlIHNhbWUgYXMgdGhlICdVU0UnIGFuZCAnREVGJyBtYWNyb3MsCm9ubHkgd2l0aCB0aGUgdXNlIG9yIGRlZiBkZXJlZmVyZW5jZWQgdmlhICdVU0VfRlJPTV9QVFIgKHVzZV9wKScgYW5kCidERUZfRlJPTV9QVFIgKGRlZl9wKScuICBTaW5jZSB3ZSBhcmVuJ3QgdXNpbmcgb3BlcmFuZCBwb2ludGVycywgdXNlIGFuZApkZWZzIGZsYWdzIGNhbiBiZSBtaXhlZC4KCiAgICAgICB0cmVlIHZhcjsKICAgICAgIHNzYV9vcF9pdGVyIGl0ZXI7CgogICAgICAgRk9SX0VBQ0hfU1NBX1RSRUVfT1BFUkFORCAodmFyLCBzdG10LCBpdGVyLCBTU0FfT1BfVlVTRSkKICAgICAgICAgewogICAgICAgICAgICBwcmludF9nZW5lcmljX2V4cHIgKHN0ZGVyciwgdmFyLCBUREZfU0xJTSk7CiAgICAgICAgIH0KCiAnVkRFRidzIGFyZSBicm9rZW4gaW50byB0d28gZmxhZ3MsIG9uZSBmb3IgdGhlICdERUYnIHBvcnRpb24KKCdTU0FfT1BfVkRFRicpIGFuZCBvbmUgZm9yIHRoZSBVU0UgcG9ydGlvbiAoJ1NTQV9PUF9WTUFZVVNFJykuICBJZiBhbGwKeW91IHdhbnQgdG8gbG9vayBhdCBhcmUgdGhlICdWREVGJ3MgdG9nZXRoZXIsIHRoZXJlIGlzIGEgZm91cnRoIGl0ZXJhdG9yCm1hY3JvIGZvciB0aGlzLCB3aGljaCByZXR1cm5zIGJvdGggYSBkZWZfb3BlcmFuZF9wIGFuZCBhIHVzZV9vcGVyYW5kX3AKZm9yIGVhY2ggJ1ZERUYnIGluIHRoZSBzdGF0ZW1lbnQuICBOb3RlIHRoYXQgeW91IGRvbid0IG5lZWQgYW55IGZsYWdzCmZvciB0aGlzIG9uZS4KCiAgICAgICB1c2Vfb3BlcmFuZF9wIHVzZV9wOwogICAgICAgZGVmX29wZXJhbmRfcCBkZWZfcDsKICAgICAgIHNzYV9vcF9pdGVyIGl0ZXI7CgogICAgICAgRk9SX0VBQ0hfU1NBX01BWURFRl9PUEVSQU5EIChkZWZfcCwgdXNlX3AsIHN0bXQsIGl0ZXIpCiAgICAgICAgIHsKICAgICAgICAgICBteV9jb2RlOwogICAgICAgICB9CgogVGhlcmUgYXJlIG1hbnkgZXhhbXBsZXMgaW4gdGhlIGNvZGUgYXMgd2VsbCwgYXMgd2VsbCBhcyB0aGUKZG9jdW1lbnRhdGlvbiBpbiAndHJlZS1zc2Etb3BlcmFuZHMuaCcuCgogVGhlcmUgYXJlIGFsc28gYSBjb3VwbGUgb2YgdmFyaWFudHMgb24gdGhlIHN0bXQgaXRlcmF0b3JzIHJlZ2FyZGluZyBQSEkKbm9kZXMuCgogJ0ZPUl9FQUNIX1BISV9BUkcnIFdvcmtzIGV4YWN0bHkgbGlrZSAnRk9SX0VBQ0hfU1NBX1VTRV9PUEVSQU5EJywKZXhjZXB0IGl0IHdvcmtzIG92ZXIgJ1BISScgYXJndW1lbnRzIGluc3RlYWQgb2Ygc3RhdGVtZW50IG9wZXJhbmRzLgoKICAgICAvKiBMb29rIGF0IGV2ZXJ5IHZpcnR1YWwgUEhJIHVzZS4gICovCiAgICAgRk9SX0VBQ0hfUEhJX0FSRyAodXNlX3AsIHBoaV9zdG10LCBpdGVyLCBTU0FfT1BfVklSVFVBTF9VU0VTKQogICAgIHsKICAgICAgICBteV9jb2RlOwogICAgIH0KCiAgICAgLyogTG9vayBhdCBldmVyeSByZWFsIFBISSB1c2UuICAqLwogICAgIEZPUl9FQUNIX1BISV9BUkcgKHVzZV9wLCBwaGlfc3RtdCwgaXRlciwgU1NBX09QX1VTRVMpCiAgICAgICBteV9jb2RlOwoKICAgICAvKiBMb29rIGF0IGV2ZXJ5IGV2ZXJ5IFBISSB1c2UuICAqLwogICAgIEZPUl9FQUNIX1BISV9BUkcgKHVzZV9wLCBwaGlfc3RtdCwgaXRlciwgU1NBX09QX0FMTF9VU0VTKQogICAgICAgbXlfY29kZTsKCiAnRk9SX0VBQ0hfUEhJX09SX1NUTVRfe1VTRSxERUZ9JyB3b3JrcyBleGFjdGx5IGxpa2UKJ0ZPUl9FQUNIX1NTQV97VVNFLERFRn1fT1BFUkFORCcsIGV4Y2VwdCBpdCB3aWxsIGZ1bmN0aW9uIG9uIGVpdGhlciBhCnN0YXRlbWVudCBvciBhICdQSEknIG5vZGUuICBUaGVzZSBzaG91bGQgYmUgdXNlZCB3aGVuIGl0IGlzIGFwcHJvcHJpYXRlCmJ1dCB0aGV5IGFyZSBub3QgcXVpdGUgYXMgZWZmaWNpZW50IGFzIHRoZSBpbmRpdmlkdWFsICdGT1JfRUFDSF9QSEknIGFuZAonRk9SX0VBQ0hfU1NBJyByb3V0aW5lcy4KCiAgICAgRk9SX0VBQ0hfUEhJX09SX1NUTVRfVVNFICh1c2Vfb3BlcmFuZF9wLCBzdG10LCBpdGVyLCBmbGFncykKICAgICAgIHsKICAgICAgICAgIG15X2NvZGU7CiAgICAgICB9CgogICAgIEZPUl9FQUNIX1BISV9PUl9TVE1UX0RFRiAoZGVmX29wZXJhbmRfcCwgcGhpLCBpdGVyLCBmbGFncykKICAgICAgIHsKICAgICAgICAgIG15X2NvZGU7CiAgICAgICB9CgoxMC40LjIgSW1tZWRpYXRlIFVzZXMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpJbW1lZGlhdGUgdXNlIGluZm9ybWF0aW9uIGlzIG5vdyBhbHdheXMgYXZhaWxhYmxlLiAgVXNpbmcgdGhlIGltbWVkaWF0ZQp1c2UgaXRlcmF0b3JzLCB5b3UgbWF5IGV4YW1pbmUgZXZlcnkgdXNlIG9mIGFueSAnU1NBX05BTUUnLiAgRm9yCmluc3RhbmNlLCB0byBjaGFuZ2UgZWFjaCB1c2Ugb2YgJ3NzYV92YXInIHRvICdzc2FfdmFyMicgYW5kIGNhbGwKZm9sZF9zdG10IG9uIGVhY2ggc3RtdCBhZnRlciB0aGF0IGlzIGRvbmU6CgogICAgICAgdXNlX29wZXJhbmRfcCBpbW1fdXNlX3A7CiAgICAgICBpbW1fdXNlX2l0ZXJhdG9yIGl0ZXJhdG9yOwogICAgICAgdHJlZSBzc2FfdmFyLCBzdG10OwoKCiAgICAgICBGT1JfRUFDSF9JTU1fVVNFX1NUTVQgKHN0bXQsIGl0ZXJhdG9yLCBzc2FfdmFyKQogICAgICAgICB7CiAgICAgICAgICAgRk9SX0VBQ0hfSU1NX1VTRV9PTl9TVE1UIChpbW1fdXNlX3AsIGl0ZXJhdG9yKQogICAgICAgICAgICAgU0VUX1VTRSAoaW1tX3VzZV9wLCBzc2FfdmFyXzIpOwogICAgICAgICAgIGZvbGRfc3RtdCAoc3RtdCk7CiAgICAgICAgIH0KCiBUaGVyZSBhcmUgMiBpdGVyYXRvcnMgd2hpY2ggY2FuIGJlIHVzZWQuICAnRk9SX0VBQ0hfSU1NX1VTRV9GQVNUJyBpcwp1c2VkIHdoZW4gdGhlIGltbWVkaWF0ZSB1c2VzIGFyZSBub3QgY2hhbmdlZCwgaS5lLiwgeW91IGFyZSBsb29raW5nIGF0CnRoZSB1c2VzLCBidXQgbm90IHNldHRpbmcgdGhlbS4KCiBJZiB0aGV5IGRvIGdldCBjaGFuZ2VkLCB0aGVuIGNhcmUgbXVzdCBiZSB0YWtlbiB0aGF0IHRoaW5ncyBhcmUgbm90CmNoYW5nZWQgdW5kZXIgdGhlIGl0ZXJhdG9ycywgc28gdXNlIHRoZSAnRk9SX0VBQ0hfSU1NX1VTRV9TVE1UJyBhbmQKJ0ZPUl9FQUNIX0lNTV9VU0VfT05fU1RNVCcgaXRlcmF0b3JzLiAgVGhleSBhdHRlbXB0IHRvIHByZXNlcnZlIHRoZQpzYW5pdHkgb2YgdGhlIHVzZSBsaXN0IGJ5IG1vdmluZyBhbGwgdGhlIHVzZXMgZm9yIGEgc3RhdGVtZW50IGludG8gYQpjb250cm9sbGVkIHBvc2l0aW9uLCBhbmQgdGhlbiBpdGVyYXRpbmcgb3ZlciB0aG9zZSB1c2VzLiAgVGhlbiB0aGUKb3B0aW1pemF0aW9uIGNhbiBtYW5pcHVsYXRlIHRoZSBzdG10IHdoZW4gYWxsIHRoZSB1c2VzIGhhdmUgYmVlbgpwcm9jZXNzZWQuICBUaGlzIGlzIGEgbGl0dGxlIHNsb3dlciB0aGFuIHRoZSBGQVNUIHZlcnNpb24gc2luY2UgaXQgYWRkcwphIHBsYWNlaG9sZGVyIGVsZW1lbnQgYW5kIG11c3Qgc29ydCB0aHJvdWdoIHRoZSBsaXN0IGEgYml0IGZvciBlYWNoCnN0YXRlbWVudC4gIFRoaXMgcGxhY2Vob2xkZXIgZWxlbWVudCBtdXN0IGJlIGFsc28gYmUgcmVtb3ZlZCBpZiB0aGUgbG9vcAppcyB0ZXJtaW5hdGVkIGVhcmx5LiAgVGhlIG1hY3JvICdCUkVBS19GUk9NX0lNTV9VU0VfU0FGRScgaXMgcHJvdmlkZWQgdG8KZG8gdGhpcyA6CgogICAgICAgRk9SX0VBQ0hfSU1NX1VTRV9TVE1UIChzdG10LCBpdGVyYXRvciwgc3NhX3ZhcikKICAgICAgICAgewogICAgICAgICAgIGlmIChzdG10ID09IGxhc3Rfc3RtdCkKICAgICAgICAgICAgIEJSRUFLX0ZST01fU0FGRV9JTU1fVVNFIChpdGVyKTsKCiAgICAgICAgICAgRk9SX0VBQ0hfSU1NX1VTRV9PTl9TVE1UIChpbW1fdXNlX3AsIGl0ZXJhdG9yKQogICAgICAgICAgICAgU0VUX1VTRSAoaW1tX3VzZV9wLCBzc2FfdmFyXzIpOwogICAgICAgICAgIGZvbGRfc3RtdCAoc3RtdCk7CiAgICAgICAgIH0KCiBUaGVyZSBhcmUgY2hlY2tzIGluICd2ZXJpZnlfc3NhJyB3aGljaCB2ZXJpZnkgdGhhdCB0aGUgaW1tZWRpYXRlIHVzZQpsaXN0IGlzIHVwIHRvIGRhdGUsIGFzIHdlbGwgYXMgY2hlY2tpbmcgdGhhdCBhbiBvcHRpbWl6YXRpb24gZGlkbid0CmJyZWFrIGZyb20gdGhlIGxvb3Agd2l0aG91dCB1c2luZyB0aGlzIG1hY3JvLiAgSXQgaXMgc2FmZSB0byBzaW1wbHkKJ2JyZWFrJzsgZnJvbSBhICdGT1JfRUFDSF9JTU1fVVNFX0ZBU1QnIHRyYXZlcnNlLgoKIFNvbWUgdXNlZnVsIGZ1bmN0aW9ucyBhbmQgbWFjcm9zOgogIDEuICdoYXNfemVyb191c2VzIChzc2FfdmFyKScgOiBSZXR1cm5zIHRydWUgaWYgdGhlcmUgYXJlIG5vIHVzZXMgb2YKICAgICAnc3NhX3ZhcicuCiAgMi4gJ2hhc19zaW5nbGVfdXNlIChzc2FfdmFyKScgOiBSZXR1cm5zIHRydWUgaWYgdGhlcmUgaXMgb25seSBhIHNpbmdsZQogICAgIHVzZSBvZiAnc3NhX3ZhcicuCiAgMy4gJ3NpbmdsZV9pbW1fdXNlIChzc2FfdmFyLCB1c2Vfb3BlcmFuZF9wICpwdHIsIHRyZWUgKnN0bXQpJyA6CiAgICAgUmV0dXJucyB0cnVlIGlmIHRoZXJlIGlzIG9ubHkgYSBzaW5nbGUgdXNlIG9mICdzc2FfdmFyJywgYW5kIGFsc28KICAgICByZXR1cm5zIHRoZSB1c2UgcG9pbnRlciBhbmQgc3RhdGVtZW50IGl0IG9jY3VycyBpbiBpbiB0aGUgc2Vjb25kCiAgICAgYW5kIHRoaXJkIHBhcmFtZXRlcnMuCiAgNC4gJ251bV9pbW1fdXNlcyAoc3NhX3ZhciknIDogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGltbWVkaWF0ZSB1c2VzIG9mCiAgICAgJ3NzYV92YXInLiAgSXQgaXMgYmV0dGVyIG5vdCB0byB1c2UgdGhpcyBpZiBwb3NzaWJsZSBzaW5jZSBpdAogICAgIHNpbXBseSB1dGlsaXplcyBhIGxvb3AgdG8gY291bnQgdGhlIHVzZXMuCiAgNS4gJ1BISV9BUkdfSU5ERVhfRlJPTV9VU0UgKHVzZV9wKScgOiBHaXZlbiBhIHVzZSB3aXRoaW4gYSAnUEhJJyBub2RlLAogICAgIHJldHVybiB0aGUgaW5kZXggbnVtYmVyIGZvciB0aGUgdXNlLiAgQW4gYXNzZXJ0IGlzIHRyaWdnZXJlZCBpZiB0aGUKICAgICB1c2UgaXNuJ3QgbG9jYXRlZCBpbiBhICdQSEknIG5vZGUuCiAgNi4gJ1VTRV9TVE1UICh1c2VfcCknIDogUmV0dXJuIHRoZSBzdGF0ZW1lbnQgYSB1c2Ugb2NjdXJzIGluLgoKIE5vdGUgdGhhdCB1c2VzIGFyZSBub3QgcHV0IGludG8gYW4gaW1tZWRpYXRlIHVzZSBsaXN0IHVudGlsIHRoZWlyCnN0YXRlbWVudCBpcyBhY3R1YWxseSBpbnNlcnRlZCBpbnRvIHRoZSBpbnN0cnVjdGlvbiBzdHJlYW0gdmlhIGEgJ2JzaV8qJwpyb3V0aW5lLgoKIEl0IGlzIGFsc28gc3RpbGwgcG9zc2libGUgdG8gdXRpbGl6ZSBsYXp5IHVwZGF0aW5nIG9mIHN0YXRlbWVudHMsIGJ1dAp0aGlzIHNob3VsZCBiZSB1c2VkIG9ubHkgd2hlbiBhYnNvbHV0ZWx5IHJlcXVpcmVkLiAgQm90aCBhbGlhcyBhbmFseXNpcwphbmQgdGhlIGRvbWluYXRvciBvcHRpbWl6YXRpb25zIGN1cnJlbnRseSBkbyB0aGlzLgoKIFdoZW4gbGF6eSB1cGRhdGluZyBpcyBiZWluZyB1c2VkLCB0aGUgaW1tZWRpYXRlIHVzZSBpbmZvcm1hdGlvbiBpcyBvdXQKb2YgZGF0ZSBhbmQgY2Fubm90IGJlIHVzZWQgcmVsaWFibHkuICBMYXp5IHVwZGF0aW5nIGlzIGFjaGlldmVkIGJ5CnNpbXBseSBtYXJraW5nIHN0YXRlbWVudHMgbW9kaWZpZWQgdmlhIGNhbGxzIHRvICdtYXJrX3N0bXRfbW9kaWZpZWQnCmluc3RlYWQgb2YgJ3VwZGF0ZV9zdG10Jy4gIFdoZW4gbGF6eSB1cGRhdGluZyBpcyBubyBsb25nZXIgcmVxdWlyZWQsIGFsbAp0aGUgbW9kaWZpZWQgc3RhdGVtZW50cyBtdXN0IGhhdmUgJ3VwZGF0ZV9zdG10JyBjYWxsZWQgaW4gb3JkZXIgdG8gYnJpbmcKdGhlbSB1cCB0byBkYXRlLiAgVGhpcyBtdXN0IGJlIGRvbmUgYmVmb3JlIHRoZSBvcHRpbWl6YXRpb24gaXMgZmluaXNoZWQsCm9yICd2ZXJpZnlfc3NhJyB3aWxsIHRyaWdnZXIgYW4gYWJvcnQuCgogVGhpcyBpcyBkb25lIHdpdGggYSBzaW1wbGUgbG9vcCBvdmVyIHRoZSBpbnN0cnVjdGlvbiBzdHJlYW06CiAgICAgICBibG9ja19zdG10X2l0ZXJhdG9yIGJzaTsKICAgICAgIGJhc2ljX2Jsb2NrIGJiOwogICAgICAgRk9SX0VBQ0hfQkIgKGJiKQogICAgICAgICB7CiAgICAgICAgICAgZm9yIChic2kgPSBic2lfc3RhcnQgKGJiKTsgIWJzaV9lbmRfcCAoYnNpKTsgYnNpX25leHQgKCZic2kpKQogICAgICAgICAgICAgdXBkYXRlX3N0bXRfaWZfbW9kaWZpZWQgKGJzaV9zdG10IChic2kpKTsKICAgICAgICAgfQoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IFNTQSwgIE5leHQ6IEFsaWFzIGFuYWx5c2lzLCAgUHJldjogU3RhdGVtZW50IE9wZXJhbmRzLCAgVXA6IFRyZWUgU1NBCgoxMC41IFN0YXRpYyBTaW5nbGUgQXNzaWdubWVudAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKTW9zdCBvZiB0aGUgdHJlZSBvcHRpbWl6ZXJzIHJlbHkgb24gdGhlIGRhdGEgZmxvdyBpbmZvcm1hdGlvbiBwcm92aWRlZApieSB0aGUgU3RhdGljIFNpbmdsZSBBc3NpZ25tZW50IChTU0EpIGZvcm0uICBXZSBpbXBsZW1lbnQgdGhlIFNTQSBmb3JtCmFzIGRlc2NyaWJlZCBpbiAnUi4gQ3l0cm9uLCBKLiBGZXJyYW50ZSwgQi4gUm9zZW4sIE0uIFdlZ21hbiwgYW5kIEsuClphZGVjay4gRWZmaWNpZW50bHkgQ29tcHV0aW5nIFN0YXRpYyBTaW5nbGUgQXNzaWdubWVudCBGb3JtIGFuZCB0aGUKQ29udHJvbCBEZXBlbmRlbmNlIEdyYXBoLiBBQ00gVHJhbnNhY3Rpb25zIG9uIFByb2dyYW1taW5nIExhbmd1YWdlcyBhbmQKU3lzdGVtcywgMTMoNCk6NDUxLTQ5MCwgT2N0b2JlciAxOTkxJy4KCiBUaGUgU1NBIGZvcm0gaXMgYmFzZWQgb24gdGhlIHByZW1pc2UgdGhhdCBwcm9ncmFtIHZhcmlhYmxlcyBhcmUKYXNzaWduZWQgaW4gZXhhY3RseSBvbmUgbG9jYXRpb24gaW4gdGhlIHByb2dyYW0uICBNdWx0aXBsZSBhc3NpZ25tZW50cwp0byB0aGUgc2FtZSB2YXJpYWJsZSBjcmVhdGUgbmV3IHZlcnNpb25zIG9mIHRoYXQgdmFyaWFibGUuICBOYXR1cmFsbHksCmFjdHVhbCBwcm9ncmFtcyBhcmUgc2VsZG9tIGluIFNTQSBmb3JtIGluaXRpYWxseSBiZWNhdXNlIHZhcmlhYmxlcyB0ZW5kCnRvIGJlIGFzc2lnbmVkIG11bHRpcGxlIHRpbWVzLiAgVGhlIGNvbXBpbGVyIG1vZGlmaWVzIHRoZSBwcm9ncmFtCnJlcHJlc2VudGF0aW9uIHNvIHRoYXQgZXZlcnkgdGltZSBhIHZhcmlhYmxlIGlzIGFzc2lnbmVkIGluIHRoZSBjb2RlLCBhCm5ldyB2ZXJzaW9uIG9mIHRoZSB2YXJpYWJsZSBpcyBjcmVhdGVkLiAgRGlmZmVyZW50IHZlcnNpb25zIG9mIHRoZSBzYW1lCnZhcmlhYmxlIGFyZSBkaXN0aW5ndWlzaGVkIGJ5IHN1YnNjcmlwdGluZyB0aGUgdmFyaWFibGUgbmFtZSB3aXRoIGl0cwp2ZXJzaW9uIG51bWJlci4gIFZhcmlhYmxlcyB1c2VkIGluIHRoZSByaWdodC1oYW5kIHNpZGUgb2YgZXhwcmVzc2lvbnMKYXJlIHJlbmFtZWQgc28gdGhhdCB0aGVpciB2ZXJzaW9uIG51bWJlciBtYXRjaGVzIHRoYXQgb2YgdGhlIG1vc3QgcmVjZW50CmFzc2lnbm1lbnQuCgogV2UgcmVwcmVzZW50IHZhcmlhYmxlIHZlcnNpb25zIHVzaW5nICdTU0FfTkFNRScgbm9kZXMuICBUaGUgcmVuYW1pbmcKcHJvY2VzcyBpbiAndHJlZS1zc2EuYycgd3JhcHMgZXZlcnkgcmVhbCBhbmQgdmlydHVhbCBvcGVyYW5kIHdpdGggYW4KJ1NTQV9OQU1FJyBub2RlIHdoaWNoIGNvbnRhaW5zIHRoZSB2ZXJzaW9uIG51bWJlciBhbmQgdGhlIHN0YXRlbWVudCB0aGF0CmNyZWF0ZWQgdGhlICdTU0FfTkFNRScuICBPbmx5IGRlZmluaXRpb25zIGFuZCB2aXJ0dWFsIGRlZmluaXRpb25zIG1heQpjcmVhdGUgbmV3ICdTU0FfTkFNRScgbm9kZXMuCgogU29tZXRpbWVzLCBmbG93IG9mIGNvbnRyb2wgbWFrZXMgaXQgaW1wb3NzaWJsZSB0byBkZXRlcm1pbmUgdGhlIG1vc3QKcmVjZW50IHZlcnNpb24gb2YgYSB2YXJpYWJsZS4gIEluIHRoZXNlIGNhc2VzLCB0aGUgY29tcGlsZXIgaW5zZXJ0cyBhbgphcnRpZmljaWFsIGRlZmluaXRpb24gZm9yIHRoYXQgdmFyaWFibGUgY2FsbGVkICJQSEkgZnVuY3Rpb24iIG9yICJQSEkKbm9kZSIuICBUaGlzIG5ldyBkZWZpbml0aW9uIG1lcmdlcyBhbGwgdGhlIGluY29taW5nIHZlcnNpb25zIG9mIHRoZQp2YXJpYWJsZSB0byBjcmVhdGUgYSBuZXcgbmFtZSBmb3IgaXQuICBGb3IgaW5zdGFuY2UsCgogICAgIGlmICguLi4pCiAgICAgICBhXzEgPSA1OwogICAgIGVsc2UgaWYgKC4uLikKICAgICAgIGFfMiA9IDI7CiAgICAgZWxzZQogICAgICAgYV8zID0gMTM7CgogICAgICMgYV80ID0gUEhJIDxhXzEsIGFfMiwgYV8zPgogICAgIHJldHVybiBhXzQ7CgogU2luY2UgaXQgaXMgbm90IHBvc3NpYmxlIHRvIGRldGVybWluZSB3aGljaCBvZiB0aGUgdGhyZWUgYnJhbmNoZXMgd2lsbApiZSB0YWtlbiBhdCBydW50aW1lLCB3ZSBkb24ndCBrbm93IHdoaWNoIG9mICdhXzEnLCAnYV8yJyBvciAnYV8zJyB0byB1c2UKYXQgdGhlIHJldHVybiBzdGF0ZW1lbnQuICBTbywgdGhlIFNTQSByZW5hbWVyIGNyZWF0ZXMgYSBuZXcgdmVyc2lvbgonYV80JyB3aGljaCBpcyBhc3NpZ25lZCB0aGUgcmVzdWx0IG9mICJtZXJnaW5nIiAnYV8xJywgJ2FfMicgYW5kICdhXzMnLgpIZW5jZSwgUEhJIG5vZGVzIG1lYW4gIm9uZSBvZiB0aGVzZSBvcGVyYW5kcy4gIEkgZG9uJ3Qga25vdyB3aGljaCIuCgogVGhlIGZvbGxvd2luZyBtYWNyb3MgY2FuIGJlIHVzZWQgdG8gZXhhbWluZSBQSEkgbm9kZXMKCiAtLSBNYWNybzogUEhJX1JFU1VMVCAoUEhJKQogICAgIFJldHVybnMgdGhlICdTU0FfTkFNRScgY3JlYXRlZCBieSBQSEkgbm9kZSBQSEkgKGkuZS4sIFBISSdzIExIUykuCgogLS0gTWFjcm86IFBISV9OVU1fQVJHUyAoUEhJKQogICAgIFJldHVybnMgdGhlIG51bWJlciBvZiBhcmd1bWVudHMgaW4gUEhJLiAgVGhpcyBudW1iZXIgaXMgZXhhY3RseSB0aGUKICAgICBudW1iZXIgb2YgaW5jb21pbmcgZWRnZXMgdG8gdGhlIGJhc2ljIGJsb2NrIGhvbGRpbmcgUEhJLgoKIC0tIE1hY3JvOiBQSElfQVJHX0VMVCAoUEhJLCBJKQogICAgIFJldHVybnMgYSB0dXBsZSByZXByZXNlbnRpbmcgdGhlIEl0aCBhcmd1bWVudCBvZiBQSEkuICBFYWNoIGVsZW1lbnQKICAgICBvZiB0aGlzIHR1cGxlIGNvbnRhaW5zIGFuICdTU0FfTkFNRScgVkFSIGFuZCB0aGUgaW5jb21pbmcgZWRnZQogICAgIHRocm91Z2ggd2hpY2ggVkFSIGZsb3dzLgoKIC0tIE1hY3JvOiBQSElfQVJHX0VER0UgKFBISSwgSSkKICAgICBSZXR1cm5zIHRoZSBpbmNvbWluZyBlZGdlIGZvciB0aGUgSXRoIGFyZ3VtZW50IG9mIFBISS4KCiAtLSBNYWNybzogUEhJX0FSR19ERUYgKFBISSwgSSkKICAgICBSZXR1cm5zIHRoZSAnU1NBX05BTUUnIGZvciB0aGUgSXRoIGFyZ3VtZW50IG9mIFBISS4KCjEwLjUuMSBQcmVzZXJ2aW5nIHRoZSBTU0EgZm9ybQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KClNvbWUgb3B0aW1pemF0aW9uIHBhc3NlcyBtYWtlIGNoYW5nZXMgdG8gdGhlIGZ1bmN0aW9uIHRoYXQgaW52YWxpZGF0ZQp0aGUgU1NBIHByb3BlcnR5LiAgVGhpcyBjYW4gaGFwcGVuIHdoZW4gYSBwYXNzIGhhcyBhZGRlZCBuZXcgc3ltYm9scyBvcgpjaGFuZ2VkIHRoZSBwcm9ncmFtIHNvIHRoYXQgdmFyaWFibGVzIHRoYXQgd2VyZSBwcmV2aW91c2x5IGFsaWFzZWQKYXJlbid0IGFueW1vcmUuICBXaGVuZXZlciBzb21ldGhpbmcgbGlrZSB0aGlzIGhhcHBlbnMsIHRoZSBhZmZlY3RlZApzeW1ib2xzIG11c3QgYmUgcmVuYW1lZCBpbnRvIFNTQSBmb3JtIGFnYWluLiAgVHJhbnNmb3JtYXRpb25zIHRoYXQgZW1pdApuZXcgY29kZSBvciByZXBsaWNhdGUgZXhpc3Rpbmcgc3RhdGVtZW50cyB3aWxsIGFsc28gbmVlZCB0byB1cGRhdGUgdGhlClNTQSBmb3JtLgoKIFNpbmNlIEdDQyBpbXBsZW1lbnRzIHR3byBkaWZmZXJlbnQgU1NBIGZvcm1zIGZvciByZWdpc3RlciBhbmQgdmlydHVhbAp2YXJpYWJsZXMsIGtlZXBpbmcgdGhlIFNTQSBmb3JtIHVwIHRvIGRhdGUgZGVwZW5kcyBvbiB3aGV0aGVyIHlvdSBhcmUKdXBkYXRpbmcgcmVnaXN0ZXIgb3IgdmlydHVhbCBuYW1lcy4gIEluIGJvdGggY2FzZXMsIHRoZSBnZW5lcmFsIGlkZWEKYmVoaW5kIGluY3JlbWVudGFsIFNTQSB1cGRhdGVzIGlzIHNpbWlsYXI6IHdoZW4gbmV3IFNTQSBuYW1lcyBhcmUKY3JlYXRlZCwgdGhleSB0eXBpY2FsbHkgYXJlIG1lYW50IHRvIHJlcGxhY2Ugb3RoZXIgZXhpc3RpbmcgbmFtZXMgaW4gdGhlCnByb2dyYW0uCgogRm9yIGluc3RhbmNlLCBnaXZlbiB0aGUgZm9sbG93aW5nIGNvZGU6CgogICAgICAgICAgMQlMMDoKICAgICAgICAgIDIJeF8xID0gUEhJICgwLCB4XzUpCiAgICAgICAgICAzCWlmICh4XzEgPCAxMCkKICAgICAgICAgIDQJICBpZiAoeF8xID4gNykKICAgICAgICAgIDUJICAgIHlfMiA9IDAKICAgICAgICAgIDYJICBlbHNlCiAgICAgICAgICA3CSAgICB5XzMgPSB4XzEgKyB4XzcKICAgICAgICAgIDgJICBlbmRpZgogICAgICAgICAgOQkgIHhfNSA9IHhfMSArIDEKICAgICAgICAgIDEwICAgZ290byBMMDsKICAgICAgICAgIDExCWVuZGlmCgogU3VwcG9zZSB0aGF0IHdlIGluc2VydCBuZXcgbmFtZXMgJ3hfMTAnIGFuZCAneF8xMScgKGxpbmVzICc0JyBhbmQgJzgnKS4KCiAgICAgICAgICAxCUwwOgogICAgICAgICAgMgl4XzEgPSBQSEkgKDAsIHhfNSkKICAgICAgICAgIDMJaWYgKHhfMSA8IDEwKQogICAgICAgICAgNAkgIHhfMTAgPSAuLi4KICAgICAgICAgIDUJICBpZiAoeF8xID4gNykKICAgICAgICAgIDYJICAgIHlfMiA9IDAKICAgICAgICAgIDcJICBlbHNlCiAgICAgICAgICA4CSAgICB4XzExID0gLi4uCiAgICAgICAgICA5CSAgICB5XzMgPSB4XzEgKyB4XzcKICAgICAgICAgIDEwCSAgZW5kaWYKICAgICAgICAgIDExCSAgeF81ID0geF8xICsgMQogICAgICAgICAgMTIJICBnb3RvIEwwOwogICAgICAgICAgMTMJZW5kaWYKCiBXZSB3YW50IHRvIHJlcGxhY2UgYWxsIHRoZSB1c2VzIG9mICd4XzEnIHdpdGggdGhlIG5ldyBkZWZpbml0aW9ucyBvZgoneF8xMCcgYW5kICd4XzExJy4gIE5vdGUgdGhhdCB0aGUgb25seSB1c2VzIHRoYXQgc2hvdWxkIGJlIHJlcGxhY2VkIGFyZQp0aG9zZSBhdCBsaW5lcyAnNScsICc5JyBhbmQgJzExJy4gIEFsc28sIHRoZSB1c2Ugb2YgJ3hfNycgYXQgbGluZSAnOScKc2hvdWxkIF9ub3RfIGJlIHJlcGxhY2VkICh0aGlzIGlzIHdoeSB3ZSBjYW5ub3QganVzdCBtYXJrIHN5bWJvbCAneCcgZm9yCnJlbmFtaW5nKS4KCiBBZGRpdGlvbmFsbHksIHdlIG1heSBuZWVkIHRvIGluc2VydCBhIFBISSBub2RlIGF0IGxpbmUgJzExJyBiZWNhdXNlCnRoYXQgaXMgYSBtZXJnZSBwb2ludCBmb3IgJ3hfMTAnIGFuZCAneF8xMScuICBTbyB0aGUgdXNlIG9mICd4XzEnIGF0CmxpbmUgJzExJyB3aWxsIGJlIHJlcGxhY2VkIHdpdGggdGhlIG5ldyBQSEkgbm9kZS4gIFRoZSBpbnNlcnRpb24gb2YgUEhJCm5vZGVzIGlzIG9wdGlvbmFsLiAgVGhleSBhcmUgbm90IHN0cmljdGx5IG5lY2Vzc2FyeSB0byBwcmVzZXJ2ZSB0aGUgU1NBCmZvcm0sIGFuZCBkZXBlbmRpbmcgb24gd2hhdCB0aGUgY2FsbGVyIGluc2VydGVkLCB0aGV5IG1heSBub3QgZXZlbiBiZQp1c2VmdWwgZm9yIHRoZSBvcHRpbWl6ZXJzLgoKIFVwZGF0aW5nIHRoZSBTU0EgZm9ybSBpcyBhIHR3byBzdGVwIHByb2Nlc3MuICBGaXJzdCwgdGhlIHBhc3MgaGFzIHRvCmlkZW50aWZ5IHdoaWNoIG5hbWVzIG5lZWQgdG8gYmUgdXBkYXRlZCBhbmQvb3Igd2hpY2ggc3ltYm9scyBuZWVkIHRvIGJlCnJlbmFtZWQgaW50byBTU0EgZm9ybSBmb3IgdGhlIGZpcnN0IHRpbWUuICBXaGVuIG5ldyBuYW1lcyBhcmUgaW50cm9kdWNlZAp0byByZXBsYWNlIGV4aXN0aW5nIG5hbWVzIGluIHRoZSBwcm9ncmFtLCB0aGUgbWFwcGluZyBiZXR3ZWVuIHRoZSBvbGQKYW5kIHRoZSBuZXcgbmFtZXMgYXJlIHJlZ2lzdGVyZWQgYnkgY2FsbGluZyAncmVnaXN0ZXJfbmV3X25hbWVfbWFwcGluZycKKG5vdGUgdGhhdCBpZiB5b3VyIHBhc3MgY3JlYXRlcyBuZXcgY29kZSBieSBkdXBsaWNhdGluZyBiYXNpYyBibG9ja3MsCnRoZSBjYWxsIHRvICd0cmVlX2R1cGxpY2F0ZV9iYicgd2lsbCBzZXQgdXAgdGhlIG5lY2Vzc2FyeSBtYXBwaW5ncwphdXRvbWF0aWNhbGx5KS4gIE9uIHRoZSBvdGhlciBoYW5kLCBpZiB5b3VyIHBhc3MgZXhwb3NlcyBhIG5ldyBzeW1ib2wKdGhhdCBzaG91bGQgYmUgcHV0IGluIFNTQSBmb3JtIGZvciB0aGUgZmlyc3QgdGltZSwgdGhlIG5ldyBzeW1ib2wgc2hvdWxkCmJlIHJlZ2lzdGVyZWQgd2l0aCAnbWFya19zeW1fZm9yX3JlbmFtaW5nJy4KCiBBZnRlciB0aGUgcmVwbGFjZW1lbnQgbWFwcGluZ3MgaGF2ZSBiZWVuIHJlZ2lzdGVyZWQgYW5kIG5ldyBzeW1ib2xzCm1hcmtlZCBmb3IgcmVuYW1pbmcsIGEgY2FsbCB0byAndXBkYXRlX3NzYScgbWFrZXMgdGhlIHJlZ2lzdGVyZWQKY2hhbmdlcy4gIFRoaXMgY2FuIGJlIGRvbmUgd2l0aCBhbiBleHBsaWNpdCBjYWxsIG9yIGJ5IGNyZWF0aW5nICdUT0RPJwpmbGFncyBpbiB0aGUgJ3RyZWVfb3B0X3Bhc3MnIHN0cnVjdHVyZSBmb3IgeW91ciBwYXNzLiAgVGhlcmUgYXJlIHNldmVyYWwKJ1RPRE8nIGZsYWdzIHRoYXQgY29udHJvbCB0aGUgYmVoYXZpb3Igb2YgJ3VwZGF0ZV9zc2EnOgoKICAgKiAnVE9ET191cGRhdGVfc3NhJy4gIFVwZGF0ZSB0aGUgU1NBIGZvcm0gaW5zZXJ0aW5nIFBISSBub2RlcyBmb3IKICAgICBuZXdseSBleHBvc2VkIHN5bWJvbHMgYW5kIHZpcnR1YWwgbmFtZXMgbWFya2VkIGZvciB1cGRhdGluZy4gIFdoZW4KICAgICB1cGRhdGluZyByZWFsIG5hbWVzLCBvbmx5IGluc2VydCBQSEkgbm9kZXMgZm9yIGEgcmVhbCBuYW1lICdPX2onIGluCiAgICAgYmxvY2tzIHJlYWNoZWQgYnkgYWxsIHRoZSBuZXcgYW5kIG9sZCBkZWZpbml0aW9ucyBmb3IgJ09faicuICBJZgogICAgIHRoZSBpdGVyYXRlZCBkb21pbmFuY2UgZnJvbnRpZXIgZm9yICdPX2onIGlzIG5vdCBwcnVuZWQsIHdlIG1heSBlbmQKICAgICB1cCBpbnNlcnRpbmcgUEhJIG5vZGVzIGluIGJsb2NrcyB0aGF0IGhhdmUgb25lIG9yIG1vcmUgZWRnZXMgd2l0aAogICAgIG5vIGluY29taW5nIGRlZmluaXRpb24gZm9yICdPX2onLiAgVGhpcyB3b3VsZCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQKICAgICB3YXJuaW5ncyBmb3IgJ09faicncyBzeW1ib2wuCgogICAqICdUT0RPX3VwZGF0ZV9zc2Ffbm9fcGhpJy4gIFVwZGF0ZSB0aGUgU1NBIGZvcm0gd2l0aG91dCBpbnNlcnRpbmcKICAgICBhbnkgbmV3IFBISSBub2RlcyBhdCBhbGwuICBUaGlzIGlzIHVzZWQgYnkgcGFzc2VzIHRoYXQgaGF2ZSBlaXRoZXIKICAgICBpbnNlcnRlZCBhbGwgdGhlIFBISSBub2RlcyB0aGVtc2VsdmVzIG9yIHBhc3NlcyB0aGF0IG5lZWQgb25seSB0bwogICAgIHBhdGNoIHVzZS1kZWYgYW5kIGRlZi1kZWYgY2hhaW5zIGZvciB2aXJ0dWFscyAoZS5nLiwgRENFKS4KCiAgICogJ1RPRE9fdXBkYXRlX3NzYV9mdWxsX3BoaScuICBJbnNlcnQgUEhJIG5vZGVzIGV2ZXJ5d2hlcmUgdGhleSBhcmUKICAgICBuZWVkZWQuICBObyBwcnVuaW5nIG9mIHRoZSBJREYgaXMgZG9uZS4gIFRoaXMgaXMgdXNlZCBieSBwYXNzZXMKICAgICB0aGF0IG5lZWQgdGhlIFBISSBub2RlcyBmb3IgJ09faicgZXZlbiBpZiBpdCBtZWFucyB0aGF0IHNvbWUKICAgICBhcmd1bWVudHMgd2lsbCBjb21lIGZyb20gdGhlIGRlZmF1bHQgZGVmaW5pdGlvbiBvZiAnT19qJydzIHN5bWJvbAogICAgIChlLmcuLCAncGFzc19saW5lYXJfdHJhbnNmb3JtJykuCgogICAgIFdBUk5JTkc6IElmIHlvdSBuZWVkIHRvIHVzZSB0aGlzIGZsYWcsIGNoYW5jZXMgYXJlIHRoYXQgeW91ciBwYXNzCiAgICAgbWF5IGJlIGRvaW5nIHNvbWV0aGluZyB3cm9uZy4gIEluc2VydGluZyBQSEkgbm9kZXMgZm9yIGFuIG9sZCBuYW1lCiAgICAgd2hlcmUgbm90IGFsbCBlZGdlcyBjYXJyeSBhIG5ldyByZXBsYWNlbWVudCBtYXkgbGVhZCB0byBzaWxlbnQKICAgICBjb2RlZ2VuIGVycm9ycyBvciBzcHVyaW91cyB1bmluaXRpYWxpemVkIHdhcm5pbmdzLgoKICAgKiAnVE9ET191cGRhdGVfc3NhX29ubHlfdmlydHVhbHMnLiAgUGFzc2VzIHRoYXQgdXBkYXRlIHRoZSBTU0EgZm9ybQogICAgIG9uIHRoZWlyIG93biBtYXkgd2FudCB0byBkZWxlZ2F0ZSB0aGUgdXBkYXRpbmcgb2YgdmlydHVhbCBuYW1lcyB0bwogICAgIHRoZSBnZW5lcmljIHVwZGF0ZXIuICBTaW5jZSBGVUQgY2hhaW5zIGFyZSBlYXNpZXIgdG8gbWFpbnRhaW4sIHRoaXMKICAgICBzaW1wbGlmaWVzIHRoZSB3b3JrIHRoZXkgbmVlZCB0byBkby4gIE5PVEU6IElmIHRoaXMgZmxhZyBpcyB1c2VkLAogICAgIGFueSBPTEQtPk5FVyBtYXBwaW5ncyBmb3IgcmVhbCBuYW1lcyBhcmUgZXhwbGljaXRseSBkZXN0cm95ZWQgYW5kCiAgICAgb25seSB0aGUgc3ltYm9scyBtYXJrZWQgZm9yIHJlbmFtaW5nIGFyZSBwcm9jZXNzZWQuCgoxMC41LjIgUHJlc2VydmluZyB0aGUgdmlydHVhbCBTU0EgZm9ybQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKVGhlIHZpcnR1YWwgU1NBIGZvcm0gaXMgaGFyZGVyIHRvIHByZXNlcnZlIHRoYW4gdGhlIG5vbi12aXJ0dWFsIFNTQSBmb3JtCm1haW5seSBiZWNhdXNlIHRoZSBzZXQgb2YgdmlydHVhbCBvcGVyYW5kcyBmb3IgYSBzdGF0ZW1lbnQgbWF5IGNoYW5nZSBhdAp3aGF0IHNvbWUgd291bGQgY29uc2lkZXIgdW5leHBlY3RlZCB0aW1lcy4gIEluIGdlbmVyYWwsIHN0YXRlbWVudAptb2RpZmljYXRpb25zIHNob3VsZCBiZSBicmFja2V0ZWQgYmV0d2VlbiBjYWxscyB0byAncHVzaF9zdG10X2NoYW5nZXMnCmFuZCAncG9wX3N0bXRfY2hhbmdlcycuICBGb3IgZXhhbXBsZSwKCiAgICAgICAgIG11bmdlX3N0bXQgKHRyZWUgc3RtdCkKICAgICAgICAgewogICAgICAgICAgICBwdXNoX3N0bXRfY2hhbmdlcyAoJnN0bXQpOwogICAgICAgICAgICAuLi4gcmV3cml0ZSBTVE1UIC4uLgogICAgICAgICAgICBwb3Bfc3RtdF9jaGFuZ2VzICgmc3RtdCk7CiAgICAgICAgIH0KCiBUaGUgY2FsbCB0byAncHVzaF9zdG10X2NoYW5nZXMnIHNhdmVzIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZQpzdGF0ZW1lbnQgb3BlcmFuZHMgYW5kIHRoZSBjYWxsIHRvICdwb3Bfc3RtdF9jaGFuZ2VzJyBjb21wYXJlcyB0aGUgc2F2ZWQKc3RhdGUgd2l0aCB0aGUgY3VycmVudCBvbmUgYW5kIGRvZXMgdGhlIGFwcHJvcHJpYXRlIHN5bWJvbCBtYXJraW5nIGZvcgp0aGUgU1NBIHJlbmFtZXIuCgogSXQgaXMgcG9zc2libGUgdG8gbW9kaWZ5IHNldmVyYWwgc3RhdGVtZW50cyBhdCBhIHRpbWUsIHByb3ZpZGVkIHRoYXQKJ3B1c2hfc3RtdF9jaGFuZ2VzJyBhbmQgJ3BvcF9zdG10X2NoYW5nZXMnIGFyZSBjYWxsZWQgaW4gTElGTyBvcmRlciwgYXMKd2hlbiBwcm9jZXNzaW5nIGEgc3RhY2sgb2Ygc3RhdGVtZW50cy4KCiBBZGRpdGlvbmFsbHksIGlmIHRoZSBwYXNzIGRpc2NvdmVycyB0aGF0IGl0IGRpZCBub3QgbmVlZCB0byBtYWtlCmNoYW5nZXMgdG8gdGhlIHN0YXRlbWVudCBhZnRlciBjYWxsaW5nICdwdXNoX3N0bXRfY2hhbmdlcycsIGl0IGNhbgpzaW1wbHkgZGlzY2FyZCB0aGUgdG9wbW9zdCBjaGFuZ2UgYnVmZmVyIGJ5IGNhbGxpbmcKJ2Rpc2NhcmRfc3RtdF9jaGFuZ2VzJy4gIFRoaXMgd2lsbCBhdm9pZCB0aGUgZXhwZW5zaXZlIG9wZXJhbmQgcmUtc2NhbgpvcGVyYXRpb24gYW5kIHRoZSBidWZmZXIgY29tcGFyaXNvbiB0aGF0IGRldGVybWluZXMgaWYgc3ltYm9scyBuZWVkIHRvCmJlIG1hcmtlZCBmb3IgcmVuYW1pbmcuCgoxMC41LjMgRXhhbWluaW5nICdTU0FfTkFNRScgbm9kZXMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpUaGUgZm9sbG93aW5nIG1hY3JvcyBjYW4gYmUgdXNlZCB0byBleGFtaW5lICdTU0FfTkFNRScgbm9kZXMKCiAtLSBNYWNybzogU1NBX05BTUVfREVGX1NUTVQgKFZBUikKICAgICBSZXR1cm5zIHRoZSBzdGF0ZW1lbnQgUyB0aGF0IGNyZWF0ZXMgdGhlICdTU0FfTkFNRScgVkFSLiAgSWYgUyBpcwogICAgIGFuIGVtcHR5IHN0YXRlbWVudCAoaS5lLiwgJ0lTX0VNUFRZX1NUTVQgKFMpJyByZXR1cm5zICd0cnVlJyksIGl0CiAgICAgbWVhbnMgdGhhdCB0aGUgZmlyc3QgcmVmZXJlbmNlIHRvIHRoaXMgdmFyaWFibGUgaXMgYSBVU0Ugb3IgYSBWVVNFLgoKIC0tIE1hY3JvOiBTU0FfTkFNRV9WRVJTSU9OIChWQVIpCiAgICAgUmV0dXJucyB0aGUgdmVyc2lvbiBudW1iZXIgb2YgdGhlICdTU0FfTkFNRScgb2JqZWN0IFZBUi4KCjEwLjUuNCBXYWxraW5nIHVzZS1kZWYgY2hhaW5zCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogLS0gVHJlZSBTU0EgZnVuY3Rpb246IHZvaWQgd2Fsa191c2VfZGVmX2NoYWlucyAoVkFSLCBGTiwgREFUQSkKCiAgICAgV2Fsa3MgdXNlLWRlZiBjaGFpbnMgc3RhcnRpbmcgYXQgdGhlICdTU0FfTkFNRScgbm9kZSBWQVIuICBDYWxscwogICAgIGZ1bmN0aW9uIEZOIGF0IGVhY2ggcmVhY2hpbmcgZGVmaW5pdGlvbiBmb3VuZC4gIEZ1bmN0aW9uIEZOIHRha2VzCiAgICAgdGhyZWUgYXJndW1lbnRzOiBWQVIsIGl0cyBkZWZpbmluZyBzdGF0ZW1lbnQgKERFRl9TVE1UKSBhbmQgYQogICAgIGdlbmVyaWMgcG9pbnRlciB0byB3aGF0ZXZlciBzdGF0ZSBpbmZvcm1hdGlvbiB0aGF0IEZOIG1heSB3YW50IHRvCiAgICAgbWFpbnRhaW4gKERBVEEpLiAgRnVuY3Rpb24gRk4gaXMgYWJsZSB0byBzdG9wIHRoZSB3YWxrIGJ5IHJldHVybmluZwogICAgICd0cnVlJywgb3RoZXJ3aXNlIGluIG9yZGVyIHRvIGNvbnRpbnVlIHRoZSB3YWxrLCBGTiBzaG91bGQgcmV0dXJuCiAgICAgJ2ZhbHNlJy4KCiAgICAgTm90ZSwgdGhhdCBpZiBERUZfU1RNVCBpcyBhICdQSEknIG5vZGUsIHRoZSBzZW1hbnRpY3MgYXJlIHNsaWdodGx5CiAgICAgZGlmZmVyZW50LiAgRm9yIGVhY2ggYXJndW1lbnQgQVJHIG9mIHRoZSBQSEkgbm9kZSwgdGhpcyBmdW5jdGlvbgogICAgIHdpbGw6CgogICAgICAgMS4gV2FsayB0aGUgdXNlLWRlZiBjaGFpbnMgZm9yIEFSRy4KICAgICAgIDIuIENhbGwgJ0ZOIChBUkcsIFBISSwgREFUQSknLgoKICAgICBOb3RlIGhvdyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gRk4gaXMgbm8gbG9uZ2VyIHRoZSBvcmlnaW5hbAogICAgIHZhcmlhYmxlIFZBUiwgYnV0IHRoZSBQSEkgYXJndW1lbnQgY3VycmVudGx5IGJlaW5nIGV4YW1pbmVkLiAgSWYgRk4KICAgICB3YW50cyB0byBnZXQgYXQgVkFSLCBpdCBzaG91bGQgY2FsbCAnUEhJX1JFU1VMVCcgKFBISSkuCgoxMC41LjUgV2Fsa2luZyB0aGUgZG9taW5hdG9yIHRyZWUKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogLS0gVHJlZSBTU0EgZnVuY3Rpb246IHZvaWQgd2Fsa19kb21pbmF0b3JfdHJlZSAoV0FMS19EQVRBLCBCQikKCiAgICAgVGhpcyBmdW5jdGlvbiB3YWxrcyB0aGUgZG9taW5hdG9yIHRyZWUgZm9yIHRoZSBjdXJyZW50IENGRyBjYWxsaW5nCiAgICAgYSBzZXQgb2YgY2FsbGJhY2sgZnVuY3Rpb25zIGRlZmluZWQgaW4gU1RSVUNUIERPTV9XQUxLX0RBVEEgaW4KICAgICAnZG9td2Fsay5oJy4gIFRoZSBjYWxsIGJhY2sgZnVuY3Rpb25zIHlvdSBuZWVkIHRvIGRlZmluZSBnaXZlIHlvdQogICAgIGhvb2tzIHRvIGV4ZWN1dGUgY3VzdG9tIGNvZGUgYXQgdmFyaW91cyBwb2ludHMgZHVyaW5nIHRyYXZlcnNhbDoKCiAgICAgICAxLiBPbmNlIHRvIGluaXRpYWxpemUgYW55IGxvY2FsIGRhdGEgbmVlZGVkIHdoaWxlIHByb2Nlc3NpbmcgQkIKICAgICAgICAgIGFuZCBpdHMgY2hpbGRyZW4uICBUaGlzIGxvY2FsIGRhdGEgaXMgcHVzaGVkIGludG8gYW4gaW50ZXJuYWwKICAgICAgICAgIHN0YWNrIHdoaWNoIGlzIGF1dG9tYXRpY2FsbHkgcHVzaGVkIGFuZCBwb3BwZWQgYXMgdGhlIHdhbGtlcgogICAgICAgICAgdHJhdmVyc2VzIHRoZSBkb21pbmF0b3IgdHJlZS4KCiAgICAgICAyLiBPbmNlIGJlZm9yZSB0cmF2ZXJzaW5nIGFsbCB0aGUgc3RhdGVtZW50cyBpbiB0aGUgQkIuCgogICAgICAgMy4gT25jZSBmb3IgZXZlcnkgc3RhdGVtZW50IGluc2lkZSBCQi4KCiAgICAgICA0LiBPbmNlIGFmdGVyIHRyYXZlcnNpbmcgYWxsIHRoZSBzdGF0ZW1lbnRzIGFuZCBiZWZvcmUgcmVjdXJzaW5nCiAgICAgICAgICBpbnRvIEJCJ3MgZG9taW5hdG9yIGNoaWxkcmVuLgoKICAgICAgIDUuIEl0IHRoZW4gcmVjdXJzZXMgaW50byBhbGwgdGhlIGRvbWluYXRvciBjaGlsZHJlbiBvZiBCQi4KCiAgICAgICA2LiBBZnRlciByZWN1cnNpbmcgaW50byBhbGwgdGhlIGRvbWluYXRvciBjaGlsZHJlbiBvZiBCQiBpdCBjYW4sCiAgICAgICAgICBvcHRpb25hbGx5LCB0cmF2ZXJzZSBldmVyeSBzdGF0ZW1lbnQgaW4gQkIgYWdhaW4gKGkuZS4sCiAgICAgICAgICByZXBlYXRpbmcgc3RlcHMgMiBhbmQgMykuCgogICAgICAgNy4gT25jZSBhZnRlciB3YWxraW5nIHRoZSBzdGF0ZW1lbnRzIGluIEJCIGFuZCBCQidzIGRvbWluYXRvcgogICAgICAgICAgY2hpbGRyZW4uICBBdCB0aGlzIHN0YWdlLCB0aGUgYmxvY2sgbG9jYWwgZGF0YSBzdGFjayBpcwogICAgICAgICAgcG9wcGVkLgoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IEFsaWFzIGFuYWx5c2lzLCAgUHJldjogU1NBLCAgVXA6IFRyZWUgU1NBCgoxMC42IEFsaWFzIGFuYWx5c2lzCj09PT09PT09PT09PT09PT09PT0KCkFsaWFzIGFuYWx5c2lzIHByb2NlZWRzIGluIDQgbWFpbiBwaGFzZXM6CgogIDEuIFN0cnVjdHVyYWwgYWxpYXMgYW5hbHlzaXMuCgogICAgIFRoaXMgcGhhc2Ugd2Fsa3MgdGhlIHR5cGVzIGZvciBzdHJ1Y3R1cmUgdmFyaWFibGVzLCBhbmQgZGV0ZXJtaW5lcwogICAgIHdoaWNoIG9mIHRoZSBmaWVsZHMgY2FuIG92ZXJsYXAgdXNpbmcgb2Zmc2V0IGFuZCBzaXplIG9mIGVhY2gKICAgICBmaWVsZC4gIEZvciBlYWNoIGZpZWxkLCBhICJzdWJ2YXJpYWJsZSIgY2FsbGVkIGEgIlN0cnVjdHVyZSBmaWVsZAogICAgIHRhZyIgKFNGVCkgaXMgY3JlYXRlZCwgd2hpY2ggcmVwcmVzZW50cyB0aGF0IGZpZWxkIGFzIGEgc2VwYXJhdGUKICAgICB2YXJpYWJsZS4gIEFsbCBhY2Nlc3NlcyB0aGF0IGNvdWxkIHBvc3NpYmx5IG92ZXJsYXAgd2l0aCBhIGdpdmVuCiAgICAgZmllbGQgd2lsbCBoYXZlIHZpcnR1YWwgb3BlcmFuZHMgZm9yIHRoZSBTRlQgb2YgdGhhdCBmaWVsZC4KCiAgICAgICAgICBzdHJ1Y3QgZm9vCiAgICAgICAgICB7CiAgICAgICAgICAgIGludCBhOwogICAgICAgICAgICBpbnQgYjsKICAgICAgICAgIH0KICAgICAgICAgIHN0cnVjdCBmb28gdGVtcDsKICAgICAgICAgIGludCBiYXIgKHZvaWQpCiAgICAgICAgICB7CiAgICAgICAgICAgIGludCB0bXAxLCB0bXAyLCB0bXAzOwogICAgICAgICAgICBTRlQuMF8yID0gVkRFRiA8U0ZULjBfMT4KICAgICAgICAgICAgdGVtcC5hID0gNTsKICAgICAgICAgICAgU0ZULjFfNCA9IFZERUYgPFNGVC4xXzM+CiAgICAgICAgICAgIHRlbXAuYiA9IDY7CgogICAgICAgICAgICBWVVNFIDxTRlQuMV80PgogICAgICAgICAgICB0bXAxXzUgPSB0ZW1wLmI7CiAgICAgICAgICAgIFZVU0UgPFNGVC4wXzI+CiAgICAgICAgICAgIHRtcDJfNiA9IHRlbXAuYTsKCiAgICAgICAgICAgIHRtcDNfNyA9IHRtcDFfNSArIHRtcDJfNjsKICAgICAgICAgICAgcmV0dXJuIHRtcDNfNzsKICAgICAgICAgIH0KCiAgICAgSWYgeW91IGNvcHkgdGhlIHN5bWJvbCB0YWcgZm9yIGEgdmFyaWFibGUgZm9yIHNvbWUgcmVhc29uLCB5b3UKICAgICBwcm9iYWJseSBhbHNvIHdhbnQgdG8gY29weSB0aGUgc3VidmFyaWFibGVzIGZvciB0aGF0IHZhcmlhYmxlLgoKICAyLiBQb2ludHMtdG8gYW5kIGVzY2FwZSBhbmFseXNpcy4KCiAgICAgVGhpcyBwaGFzZSB3YWxrcyB0aGUgdXNlLWRlZiBjaGFpbnMgaW4gdGhlIFNTQSB3ZWIgbG9va2luZyBmb3IKICAgICB0aHJlZSB0aGluZ3M6CgogICAgICAgICogQXNzaWdubWVudHMgb2YgdGhlIGZvcm0gJ1BfaSA9ICZWQVInCiAgICAgICAgKiBBc3NpZ25tZW50cyBvZiB0aGUgZm9ybSBQX2kgPSBtYWxsb2MoKQogICAgICAgICogUG9pbnRlcnMgYW5kIEFERFJfRVhQUiB0aGF0IGVzY2FwZSB0aGUgY3VycmVudCBmdW5jdGlvbi4KCiAgICAgVGhlIGNvbmNlcHQgb2YgJ2VzY2FwaW5nJyBpcyB0aGUgc2FtZSBvbmUgdXNlZCBpbiB0aGUgSmF2YSB3b3JsZC4KICAgICBXaGVuIGEgcG9pbnRlciBvciBhbiBBRERSX0VYUFIgZXNjYXBlcywgaXQgbWVhbnMgdGhhdCBpdCBoYXMgYmVlbgogICAgIGV4cG9zZWQgb3V0c2lkZSBvZiB0aGUgY3VycmVudCBmdW5jdGlvbi4gIFNvLCBhc3NpZ25tZW50IHRvIGdsb2JhbAogICAgIHZhcmlhYmxlcywgZnVuY3Rpb24gYXJndW1lbnRzIGFuZCByZXR1cm5pbmcgYSBwb2ludGVyIGFyZSBhbGwKICAgICBlc2NhcGUgc2l0ZXMuCgogICAgIFRoaXMgaXMgd2hlcmUgd2UgYXJlIGN1cnJlbnRseSBsaW1pdGVkLiAgU2luY2Ugbm90IGV2ZXJ5dGhpbmcgaXMKICAgICByZW5hbWVkIGludG8gU1NBLCB3ZSBsb3NlIHRyYWNrIG9mIGVzY2FwZSBwcm9wZXJ0aWVzIHdoZW4gYSBwb2ludGVyCiAgICAgaXMgc3Rhc2hlZCBpbnNpZGUgYSBmaWVsZCBpbiBhIHN0cnVjdHVyZSwgZm9yIGluc3RhbmNlLiAgSW4gdGhvc2UKICAgICBjYXNlcywgd2UgYXJlIGFzc3VtaW5nIHRoYXQgdGhlIHBvaW50ZXIgZG9lcyBlc2NhcGUuCgogICAgIFdlIHVzZSBlc2NhcGUgYW5hbHlzaXMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYSB2YXJpYWJsZSBpcwogICAgIGNhbGwtY2xvYmJlcmVkLiAgU2ltcGx5IHB1dCwgaWYgYW4gQUREUl9FWFBSIGVzY2FwZXMsIHRoZW4gdGhlCiAgICAgdmFyaWFibGUgaXMgY2FsbC1jbG9iYmVyZWQuICBJZiBhIHBvaW50ZXIgUF9pIGVzY2FwZXMsIHRoZW4gYWxsIHRoZQogICAgIHZhcmlhYmxlcyBwb2ludGVkLXRvIGJ5IFBfaSAoYW5kIGl0cyBtZW1vcnkgdGFnKSBhbHNvIGVzY2FwZS4KCiAgMy4gQ29tcHV0ZSBmbG93LXNlbnNpdGl2ZSBhbGlhc2VzCgogICAgIFdlIGhhdmUgdHdvIGNsYXNzZXMgb2YgbWVtb3J5IHRhZ3MuICBNZW1vcnkgdGFncyBhc3NvY2lhdGVkIHdpdGgKICAgICB0aGUgcG9pbnRlZC10byBkYXRhIHR5cGUgb2YgdGhlIHBvaW50ZXJzIGluIHRoZSBwcm9ncmFtLiAgVGhlc2UKICAgICB0YWdzIGFyZSBjYWxsZWQgInN5bWJvbCBtZW1vcnkgdGFnIiAoU01UKS4gIFRoZSBvdGhlciBjbGFzcyBhcmUKICAgICB0aG9zZSBhc3NvY2lhdGVkIHdpdGggU1NBX05BTUVzLCBjYWxsZWQgIm5hbWUgbWVtb3J5IHRhZyIgKE5NVCkuCiAgICAgVGhlIGJhc2ljIGlkZWEgaXMgdGhhdCB3aGVuIGFkZGluZyBvcGVyYW5kcyBmb3IgYW4gSU5ESVJFQ1RfUkVGCiAgICAgKlBfaSwgd2Ugd2lsbCBmaXJzdCBjaGVjayB3aGV0aGVyIFBfaSBoYXMgYSBuYW1lIHRhZywgaWYgaXQgZG9lcyB3ZQogICAgIHVzZSBpdCwgYmVjYXVzZSB0aGF0IHdpbGwgaGF2ZSBtb3JlIHByZWNpc2UgYWxpYXNpbmcgaW5mb3JtYXRpb24uCiAgICAgT3RoZXJ3aXNlLCB3ZSB1c2UgdGhlIHN0YW5kYXJkIHN5bWJvbCB0YWcuCgogICAgIEluIHRoaXMgcGhhc2UsIHdlIGdvIHRocm91Z2ggYWxsIHRoZSBwb2ludGVycyB3ZSBmb3VuZCBpbiBwb2ludHMtdG8KICAgICBhbmFseXNpcyBhbmQgY3JlYXRlIGFsaWFzIHNldHMgZm9yIHRoZSBuYW1lIG1lbW9yeSB0YWdzIGFzc29jaWF0ZWQKICAgICB3aXRoIGVhY2ggcG9pbnRlciBQX2kuICBJZiBQX2kgZXNjYXBlcywgd2UgbWFyayBjYWxsLWNsb2JiZXJlZCB0aGUKICAgICB2YXJpYWJsZXMgaXQgcG9pbnRzIHRvIGFuZCBpdHMgdGFnLgoKICA0LiBDb21wdXRlIGZsb3ctaW5zZW5zaXRpdmUgYWxpYXNlcwoKICAgICBUaGlzIHBhc3Mgd2lsbCBjb21wYXJlIHRoZSBhbGlhcyBzZXQgb2YgZXZlcnkgc3ltYm9sIG1lbW9yeSB0YWcgYW5kCiAgICAgZXZlcnkgYWRkcmVzc2FibGUgdmFyaWFibGUgZm91bmQgaW4gdGhlIHByb2dyYW0uICBHaXZlbiBhIHN5bWJvbAogICAgIG1lbW9yeSB0YWcgU01UIGFuZCBhbiBhZGRyZXNzYWJsZSB2YXJpYWJsZSBWLiAgSWYgdGhlIGFsaWFzIHNldHMgb2YKICAgICBTTVQgYW5kIFYgY29uZmxpY3QgKGFzIGNvbXB1dGVkIGJ5IG1heV9hbGlhc19wKSwgdGhlbiBWIGlzIG1hcmtlZAogICAgIGFzIGFuIGFsaWFzIHRhZyBhbmQgYWRkZWQgdG8gdGhlIGFsaWFzIHNldCBvZiBTTVQuCgogICAgIEV2ZXJ5IGxhbmd1YWdlIHRoYXQgd2lzaGVzIHRvIHBlcmZvcm0gbGFuZ3VhZ2Utc3BlY2lmaWMgYWxpYXMKICAgICBhbmFseXNpcyBzaG91bGQgZGVmaW5lIGEgZnVuY3Rpb24gdGhhdCBjb21wdXRlcywgZ2l2ZW4gYSAndHJlZScKICAgICBub2RlLCBhbiBhbGlhcyBzZXQgZm9yIHRoZSBub2RlLiAgTm9kZXMgaW4gZGlmZmVyZW50IGFsaWFzIHNldHMgYXJlCiAgICAgbm90IGFsbG93ZWQgdG8gYWxpYXMuICBGb3IgYW4gZXhhbXBsZSwgc2VlIHRoZSBDIGZyb250LWVuZCBmdW5jdGlvbgogICAgICdjX2dldF9hbGlhc19zZXQnLgoKIEZvciBpbnN0YW5jZSwgY29uc2lkZXIgdGhlIGZvbGxvd2luZyBmdW5jdGlvbjoKCiAgICAgZm9vIChpbnQgaSkKICAgICB7CiAgICAgICBpbnQgKnAsICpxLCBhLCBiOwoKICAgICAgIGlmIChpID4gMTApCiAgICAgICAgIHAgPSAmYTsKICAgICAgIGVsc2UKICAgICAgICAgcSA9ICZiOwoKICAgICAgICpwID0gMzsKICAgICAgICpxID0gNTsKICAgICAgIGEgPSBiICsgMjsKICAgICAgIHJldHVybiAqcDsKICAgICB9CgogQWZ0ZXIgYWxpYXNpbmcgYW5hbHlzaXMgaGFzIGZpbmlzaGVkLCB0aGUgc3ltYm9sIG1lbW9yeSB0YWcgZm9yIHBvaW50ZXIKJ3AnIHdpbGwgaGF2ZSB0d28gYWxpYXNlcywgbmFtZWx5IHZhcmlhYmxlcyAnYScgYW5kICdiJy4gIEV2ZXJ5IHRpbWUKcG9pbnRlciAncCcgaXMgZGVyZWZlcmVuY2VkLCB3ZSB3YW50IHRvIG1hcmsgdGhlIG9wZXJhdGlvbiBhcyBhCnBvdGVudGlhbCByZWZlcmVuY2UgdG8gJ2EnIGFuZCAnYicuCgogICAgIGZvbyAoaW50IGkpCiAgICAgewogICAgICAgaW50ICpwLCBhLCBiOwoKICAgICAgIGlmIChpXzIgPiAxMCkKICAgICAgICAgcF80ID0gJmE7CiAgICAgICBlbHNlCiAgICAgICAgIHBfNiA9ICZiOwogICAgICAgIyBwXzEgPSBQSEkgPHBfNCgxKSwgcF82KDIpPjsKCiAgICAgICAjIGFfNyA9IFZERUYgPGFfMz47CiAgICAgICAjIGJfOCA9IFZERUYgPGJfNT47CiAgICAgICAqcF8xID0gMzsKCiAgICAgICAjIGFfOSA9IFZERUYgPGFfNz4KICAgICAgICMgVlVTRSA8Yl84PgogICAgICAgYV85ID0gYl84ICsgMjsKCiAgICAgICAjIFZVU0UgPGFfOT47CiAgICAgICAjIFZVU0UgPGJfOD47CiAgICAgICByZXR1cm4gKnBfMTsKICAgICB9CgogSW4gY2VydGFpbiBjYXNlcywgdGhlIGxpc3Qgb2YgbWF5IGFsaWFzZXMgZm9yIGEgcG9pbnRlciBtYXkgZ3JvdyB0b28KbGFyZ2UuICBUaGlzIG1heSBjYXVzZSBhbiBleHBsb3Npb24gaW4gdGhlIG51bWJlciBvZiB2aXJ0dWFsIG9wZXJhbmRzCmluc2VydGVkIGluIHRoZSBjb2RlLiAgUmVzdWx0aW5nIGluIGluY3JlYXNlZCBtZW1vcnkgY29uc3VtcHRpb24gYW5kCmNvbXBpbGF0aW9uIHRpbWUuCgogV2hlbiB0aGUgbnVtYmVyIG9mIHZpcnR1YWwgb3BlcmFuZHMgbmVlZGVkIHRvIHJlcHJlc2VudCBhbGlhc2VkIGxvYWRzCmFuZCBzdG9yZXMgZ3Jvd3MgdG9vIGxhcmdlIChjb25maWd1cmFibGUgd2l0aCAnLS1wYXJhbQptYXgtYWxpYXNlZC12b3BzJyksIGFsaWFzIHNldHMgYXJlIGdyb3VwZWQgdG8gYXZvaWQgc2V2ZXJlIGNvbXBpbGUtdGltZQpzbG93IGRvd25zIGFuZCBtZW1vcnkgY29uc3VtcHRpb24uICBUaGUgYWxpYXMgZ3JvdXBpbmcgaGV1cmlzdGljCnByb2NlZWRzIGFzIGZvbGxvd3M6CgogIDEuIFNvcnQgdGhlIGxpc3Qgb2YgcG9pbnRlcnMgaW4gZGVjcmVhc2luZyBudW1iZXIgb2YgY29udHJpYnV0ZWQKICAgICB2aXJ0dWFsIG9wZXJhbmRzLgoKICAyLiBUYWtlIHRoZSBmaXJzdCBwb2ludGVyIGZyb20gdGhlIGxpc3QgYW5kIHJldmVyc2UgdGhlIHJvbGUgb2YgdGhlCiAgICAgbWVtb3J5IHRhZyBhbmQgaXRzIGFsaWFzZXMuICBVc3VhbGx5LCB3aGVuZXZlciBhbiBhbGlhc2VkIHZhcmlhYmxlCiAgICAgVmkgaXMgZm91bmQgdG8gYWxpYXMgd2l0aCBhIG1lbW9yeSB0YWcgVCwgd2UgYWRkIFZpIHRvIHRoZQogICAgIG1heS1hbGlhc2VzIHNldCBmb3IgVC4gIE1lYW5pbmcgdGhhdCBhZnRlciBhbGlhcyBhbmFseXNpcywgd2Ugd2lsbAogICAgIGhhdmU6CgogICAgICAgICAgbWF5LWFsaWFzZXMoVCkgPSB7IFYxLCBWMiwgVjMsIC4uLiwgVm4gfQoKICAgICBUaGlzIG1lYW5zIHRoYXQgZXZlcnkgc3RhdGVtZW50IHRoYXQgcmVmZXJlbmNlcyBULCB3aWxsIGdldCAnbicKICAgICB2aXJ0dWFsIG9wZXJhbmRzIGZvciBlYWNoIG9mIHRoZSBWaSB0YWdzLiAgQnV0LCB3aGVuIGFsaWFzIGdyb3VwaW5nCiAgICAgaXMgZW5hYmxlZCwgd2UgbWFrZSBUIGFuIGFsaWFzIHRhZyBhbmQgYWRkIGl0IHRvIHRoZSBhbGlhcyBzZXQgb2YKICAgICBhbGwgdGhlIFZpIHZhcmlhYmxlczoKCiAgICAgICAgICBtYXktYWxpYXNlcyhWMSkgPSB7IFQgfQogICAgICAgICAgbWF5LWFsaWFzZXMoVjIpID0geyBUIH0KICAgICAgICAgIC4uLgogICAgICAgICAgbWF5LWFsaWFzZXMoVm4pID0geyBUIH0KCiAgICAgVGhpcyBoYXMgdHdvIGVmZmVjdHM6IChhKSBzdGF0ZW1lbnRzIHJlZmVyZW5jaW5nIFQgd2lsbCBvbmx5IGdldCBhCiAgICAgc2luZ2xlIHZpcnR1YWwgb3BlcmFuZCwgYW5kLCAoYikgYWxsIHRoZSB2YXJpYWJsZXMgVmkgd2lsbCBub3cKICAgICBhcHBlYXIgdG8gYWxpYXMgZWFjaCBvdGhlci4gIFNvLCB3ZSBsb3NlIGFsaWFzIHByZWNpc2lvbiB0byBpbXByb3ZlCiAgICAgY29tcGlsZSB0aW1lLiAgQnV0LCBpbiB0aGVvcnksIGEgcHJvZ3JhbSB3aXRoIHN1Y2ggYSBoaWdoIGxldmVsIG9mCiAgICAgYWxpYXNpbmcgc2hvdWxkIG5vdCBiZSB2ZXJ5IG9wdGltaXphYmxlIGluIHRoZSBmaXJzdCBwbGFjZS4KCiAgMy4gU2luY2UgdmFyaWFibGVzIG1heSBiZSBpbiB0aGUgYWxpYXMgc2V0IG9mIG1vcmUgdGhhbiBvbmUgbWVtb3J5CiAgICAgdGFnLCB0aGUgZ3JvdXBpbmcgZG9uZSBpbiBzdGVwICgyKSBuZWVkcyB0byBiZSBleHRlbmRlZCB0byBhbGwgdGhlCiAgICAgbWVtb3J5IHRhZ3MgdGhhdCBoYXZlIGEgbm9uLWVtcHR5IGludGVyc2VjdGlvbiB3aXRoIHRoZSBtYXktYWxpYXNlcwogICAgIHNldCBvZiB0YWcgVC4gIEZvciBpbnN0YW5jZSwgaWYgd2Ugb3JpZ2luYWxseSBoYWQgdGhlc2UgbWF5LWFsaWFzZXMKICAgICBzZXRzOgoKICAgICAgICAgIG1heS1hbGlhc2VzKFQpID0geyBWMSwgVjIsIFYzIH0KICAgICAgICAgIG1heS1hbGlhc2VzKFIpID0geyBWMiwgVjQgfQoKICAgICBJbiBzdGVwICgyKSB3ZSB3b3VsZCBoYXZlIHJldmVydGVkIHRoZSBhbGlhc2VzIGZvciBUIGFzOgoKICAgICAgICAgIG1heS1hbGlhc2VzKFYxKSA9IHsgVCB9CiAgICAgICAgICBtYXktYWxpYXNlcyhWMikgPSB7IFQgfQogICAgICAgICAgbWF5LWFsaWFzZXMoVjMpID0geyBUIH0KCiAgICAgQnV0IG5vdGUgdGhhdCBub3cgVjIgaXMgbm8gbG9uZ2VyIGFsaWFzZWQgd2l0aCBSLiAgV2UgY291bGQgYWRkIFIKICAgICB0byBtYXktYWxpYXNlcyhWMiksIGJ1dCB3ZSBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgZ3JvdXBpbmcgYWxpYXNlcwogICAgIHRvIHJlZHVjZSB2aXJ0dWFsIG9wZXJhbmRzIHNvIHdoYXQgd2UgZG8gaXMgYWRkIFY0IHRvIHRoZSBncm91cGluZwogICAgIHRvIG9idGFpbjoKCiAgICAgICAgICBtYXktYWxpYXNlcyhWMSkgPSB7IFQgfQogICAgICAgICAgbWF5LWFsaWFzZXMoVjIpID0geyBUIH0KICAgICAgICAgIG1heS1hbGlhc2VzKFYzKSA9IHsgVCB9CiAgICAgICAgICBtYXktYWxpYXNlcyhWNCkgPSB7IFQgfQoKICA0LiBJZiB0aGUgdG90YWwgbnVtYmVyIG9mIHZpcnR1YWwgb3BlcmFuZHMgZHVlIHRvIGFsaWFzaW5nIGlzIHN0aWxsCiAgICAgYWJvdmUgdGhlIHRocmVzaG9sZCBzZXQgYnkgbWF4LWFsaWFzLXZvcHMsIGdvIGJhY2sgdG8gKDIpLgoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IExvb3AgQW5hbHlzaXMgYW5kIFJlcHJlc2VudGF0aW9uLCAgTmV4dDogUlRMLCAgUHJldjogVHJlZSBTU0EsICBVcDogVG9wCgoxMSBBbmFseXNpcyBhbmQgUmVwcmVzZW50YXRpb24gb2YgTG9vcHMKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgpHQ0MgcHJvdmlkZXMgZXh0ZW5zaXZlIGluZnJhc3RydWN0dXJlIGZvciB3b3JrIHdpdGggbmF0dXJhbCBsb29wcywgaS5lLiwKc3Ryb25nbHkgY29ubmVjdGVkIGNvbXBvbmVudHMgb2YgQ0ZHIHdpdGggb25seSBvbmUgZW50cnkgYmxvY2suICBUaGlzCmNoYXB0ZXIgZGVzY3JpYmVzIHJlcHJlc2VudGF0aW9uIG9mIGxvb3BzIGluIEdDQywgYm90aCBvbiBHSU1QTEUgYW5kIGluClJUTCwgYXMgd2VsbCBhcyB0aGUgaW50ZXJmYWNlcyB0byBsb29wLXJlbGF0ZWQgYW5hbHlzZXMgKGluZHVjdGlvbgp2YXJpYWJsZSBhbmFseXNpcyBhbmQgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgYW5hbHlzaXMpLgoKKiBNZW51OgoKKiBMb29wIHJlcHJlc2VudGF0aW9uOjoJCVJlcHJlc2VudGF0aW9uIGFuZCBhbmFseXNpcyBvZiBsb29wcy4KKiBMb29wIHF1ZXJ5aW5nOjoJCUdldHRpbmcgaW5mb3JtYXRpb24gYWJvdXQgbG9vcHMuCiogTG9vcCBtYW5pcHVsYXRpb246OgkJTG9vcCBtYW5pcHVsYXRpb24gZnVuY3Rpb25zLgoqIExDU1NBOjoJCQlMb29wLWNsb3NlZCBTU0EgZm9ybS4KKiBTY2FsYXIgZXZvbHV0aW9uczo6ICAgCUluZHVjdGlvbiB2YXJpYWJsZXMgb24gR0lNUExFLgoqIGxvb3AtaXY6OgkJCUluZHVjdGlvbiB2YXJpYWJsZXMgb24gUlRMLgoqIE51bWJlciBvZiBpdGVyYXRpb25zOjoJTnVtYmVyIG9mIGl0ZXJhdGlvbnMgYW5hbHlzaXMuCiogRGVwZW5kZW5jeSBhbmFseXNpczo6CQlEYXRhIGRlcGVuZGVuY3kgYW5hbHlzaXMuCiogTGFtYmRhOjoJCQlMaW5lYXIgbG9vcCB0cmFuc2Zvcm1hdGlvbnMgZnJhbWV3b3JrLgoqIE9tZWdhOjoJCQlBIHNvbHZlciBmb3IgbGluZWFyIHByb2dyYW1taW5nIHByb2JsZW1zLgoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IExvb3AgcmVwcmVzZW50YXRpb24sICBOZXh0OiBMb29wIHF1ZXJ5aW5nLCAgVXA6IExvb3AgQW5hbHlzaXMgYW5kIFJlcHJlc2VudGF0aW9uCgoxMS4xIExvb3AgcmVwcmVzZW50YXRpb24KPT09PT09PT09PT09PT09PT09PT09PT09CgpUaGlzIGNoYXB0ZXIgZGVzY3JpYmVzIHRoZSByZXByZXNlbnRhdGlvbiBvZiBsb29wcyBpbiBHQ0MsIGFuZCBmdW5jdGlvbnMKdGhhdCBjYW4gYmUgdXNlZCB0byBidWlsZCwgbW9kaWZ5IGFuZCBhbmFseXplIHRoaXMgcmVwcmVzZW50YXRpb24uICBNb3N0Cm9mIHRoZSBpbnRlcmZhY2VzIGFuZCBkYXRhIHN0cnVjdHVyZXMgYXJlIGRlY2xhcmVkIGluICdjZmdsb29wLmgnLiAgQXQKdGhlIG1vbWVudCwgbG9vcCBzdHJ1Y3R1cmVzIGFyZSBhbmFseXplZCBhbmQgdGhpcyBpbmZvcm1hdGlvbiBpcyB1cGRhdGVkCm9ubHkgYnkgdGhlIG9wdGltaXphdGlvbiBwYXNzZXMgdGhhdCBkZWFsIHdpdGggbG9vcHMsIGJ1dCBzb21lIGVmZm9ydHMKYXJlIGJlaW5nIG1hZGUgdG8gbWFrZSBpdCBhdmFpbGFibGUgdGhyb3VnaG91dCBtb3N0IG9mIHRoZSBvcHRpbWl6YXRpb24KcGFzc2VzLgoKIEluIGdlbmVyYWwsIGEgbmF0dXJhbCBsb29wIGhhcyBvbmUgZW50cnkgYmxvY2sgKGhlYWRlcikgYW5kIHBvc3NpYmx5CnNldmVyYWwgYmFjayBlZGdlcyAobGF0Y2hlcykgbGVhZGluZyB0byB0aGUgaGVhZGVyIGZyb20gdGhlIGluc2lkZSBvZgp0aGUgbG9vcC4gIExvb3BzIHdpdGggc2V2ZXJhbCBsYXRjaGVzIG1heSBhcHBlYXIgaWYgc2V2ZXJhbCBsb29wcyBzaGFyZQphIHNpbmdsZSBoZWFkZXIsIG9yIGlmIHRoZXJlIGlzIGEgYnJhbmNoaW5nIGluIHRoZSBtaWRkbGUgb2YgdGhlIGxvb3AuClRoZSByZXByZXNlbnRhdGlvbiBvZiBsb29wcyBpbiBHQ0MgaG93ZXZlciBhbGxvd3Mgb25seSBsb29wcyB3aXRoIGEKc2luZ2xlIGxhdGNoLiAgRHVyaW5nIGxvb3AgYW5hbHlzaXMsIGhlYWRlcnMgb2Ygc3VjaCBsb29wcyBhcmUgc3BsaXQgYW5kCmZvcndhcmRlciBibG9ja3MgYXJlIGNyZWF0ZWQgaW4gb3JkZXIgdG8gZGlzYW1iaWd1YXRlIHRoZWlyIHN0cnVjdHVyZXMuCkhldXJpc3RpYyBiYXNlZCBvbiBwcm9maWxlIGluZm9ybWF0aW9uIGFuZCBzdHJ1Y3R1cmUgb2YgdGhlIGluZHVjdGlvbgp2YXJpYWJsZXMgaW4gdGhlIGxvb3BzIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGxhdGNoZXMKY29ycmVzcG9uZCB0byBzdWItbG9vcHMgb3IgdG8gY29udHJvbCBmbG93IGluIGEgc2luZ2xlIGxvb3AuICBUaGlzIG1lYW5zCnRoYXQgdGhlIGFuYWx5c2lzIHNvbWV0aW1lcyBjaGFuZ2VzIHRoZSBDRkcsIGFuZCBpZiB5b3UgcnVuIGl0IGluIHRoZQptaWRkbGUgb2YgYW4gb3B0aW1pemF0aW9uIHBhc3MsIHlvdSBtdXN0IGJlIGFibGUgdG8gZGVhbCB3aXRoIHRoZSBuZXcKYmxvY2tzLiAgWW91IG1heSBhdm9pZCBDRkcgY2hhbmdlcyBieSBwYXNzaW5nCidMT09QU19NQVlfSEFWRV9NVUxUSVBMRV9MQVRDSEVTJyBmbGFnIHRvIHRoZSBsb29wIGRpc2NvdmVyeSwgbm90ZQpob3dldmVyIHRoYXQgbW9zdCBvdGhlciBsb29wIG1hbmlwdWxhdGlvbiBmdW5jdGlvbnMgd2lsbCBub3Qgd29yawpjb3JyZWN0bHkgZm9yIGxvb3BzIHdpdGggbXVsdGlwbGUgbGF0Y2ggZWRnZXMgKHRoZSBmdW5jdGlvbnMgdGhhdCBvbmx5CnF1ZXJ5IG1lbWJlcnNoaXAgb2YgYmxvY2tzIHRvIGxvb3BzIGFuZCBzdWJsb29wIHJlbGF0aW9uc2hpcHMsIG9yCmVudW1lcmF0ZSBhbmQgdGVzdCBsb29wIGV4aXRzLCBjYW4gYmUgZXhwZWN0ZWQgdG8gd29yaykuCgogQm9keSBvZiB0aGUgbG9vcCBpcyB0aGUgc2V0IG9mIGJsb2NrcyB0aGF0IGFyZSBkb21pbmF0ZWQgYnkgaXRzIGhlYWRlciwKYW5kIHJlYWNoYWJsZSBmcm9tIGl0cyBsYXRjaCBhZ2FpbnN0IHRoZSBkaXJlY3Rpb24gb2YgZWRnZXMgaW4gQ0ZHLiAgVGhlCmxvb3BzIGFyZSBvcmdhbml6ZWQgaW4gYSBjb250YWlubWVudCBoaWVyYXJjaHkgKHRyZWUpIHN1Y2ggdGhhdCBhbGwgdGhlCmxvb3BzIGltbWVkaWF0ZWx5IGNvbnRhaW5lZCBpbnNpZGUgbG9vcCBMIGFyZSB0aGUgY2hpbGRyZW4gb2YgTCBpbiB0aGUKdHJlZS4gIFRoaXMgdHJlZSBpcyByZXByZXNlbnRlZCBieSB0aGUgJ3N0cnVjdCBsb29wcycgc3RydWN0dXJlLiAgVGhlCnJvb3Qgb2YgdGhpcyB0cmVlIGlzIGEgZmFrZSBsb29wIHRoYXQgY29udGFpbnMgYWxsIGJsb2NrcyBpbiB0aGUKZnVuY3Rpb24uICBFYWNoIG9mIHRoZSBsb29wcyBpcyByZXByZXNlbnRlZCBpbiBhICdzdHJ1Y3QgbG9vcCcKc3RydWN0dXJlLiAgRWFjaCBsb29wIGlzIGFzc2lnbmVkIGFuIGluZGV4ICgnbnVtJyBmaWVsZCBvZiB0aGUgJ3N0cnVjdApsb29wJyBzdHJ1Y3R1cmUpLCBhbmQgdGhlIHBvaW50ZXIgdG8gdGhlIGxvb3AgaXMgc3RvcmVkIGluIHRoZQpjb3JyZXNwb25kaW5nIGZpZWxkIG9mIHRoZSAnbGFycmF5JyB2ZWN0b3IgaW4gdGhlIGxvb3BzIHN0cnVjdHVyZS4gIFRoZQppbmRpY2VzIGRvIG5vdCBoYXZlIHRvIGJlIGNvbnRpbnVvdXMsIHRoZXJlIG1heSBiZSBlbXB0eSAoJ05VTEwnKQplbnRyaWVzIGluIHRoZSAnbGFycmF5JyBjcmVhdGVkIGJ5IGRlbGV0aW5nIGxvb3BzLiAgQWxzbywgdGhlcmUgaXMgbm8KZ3VhcmFudGVlIG9uIHRoZSByZWxhdGl2ZSBvcmRlciBvZiBhIGxvb3AgYW5kIGl0cyBzdWJsb29wcyBpbiB0aGUKbnVtYmVyaW5nLiAgVGhlIGluZGV4IG9mIGEgbG9vcCBuZXZlciBjaGFuZ2VzLgoKIFRoZSBlbnRyaWVzIG9mIHRoZSAnbGFycmF5JyBmaWVsZCBzaG91bGQgbm90IGJlIGFjY2Vzc2VkIGRpcmVjdGx5LiAgVGhlCmZ1bmN0aW9uICdnZXRfbG9vcCcgcmV0dXJucyB0aGUgbG9vcCBkZXNjcmlwdGlvbiBmb3IgYSBsb29wIHdpdGggdGhlCmdpdmVuIGluZGV4LiAgJ251bWJlcl9vZl9sb29wcycgZnVuY3Rpb24gcmV0dXJucyBudW1iZXIgb2YgbG9vcHMgaW4gdGhlCmZ1bmN0aW9uLiAgVG8gdHJhdmVyc2UgYWxsIGxvb3BzLCB1c2UgJ0ZPUl9FQUNIX0xPT1AnIG1hY3JvLiAgVGhlCidmbGFncycgYXJndW1lbnQgb2YgdGhlIG1hY3JvIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSBkaXJlY3Rpb24gb2YKdHJhdmVyc2FsIGFuZCB0aGUgc2V0IG9mIGxvb3BzIHZpc2l0ZWQuICBFYWNoIGxvb3AgaXMgZ3VhcmFudGVlZCB0byBiZQp2aXNpdGVkIGV4YWN0bHkgb25jZSwgcmVnYXJkbGVzcyBvZiB0aGUgY2hhbmdlcyB0byB0aGUgbG9vcCB0cmVlLCBhbmQKdGhlIGxvb3BzIG1heSBiZSByZW1vdmVkIGR1cmluZyB0aGUgdHJhdmVyc2FsLiAgVGhlIG5ld2x5IGNyZWF0ZWQgbG9vcHMKYXJlIG5ldmVyIHRyYXZlcnNlZCwgaWYgdGhleSBuZWVkIHRvIGJlIHZpc2l0ZWQsIHRoaXMgbXVzdCBiZSBkb25lCnNlcGFyYXRlbHkgYWZ0ZXIgdGhlaXIgY3JlYXRpb24uICBUaGUgJ0ZPUl9FQUNIX0xPT1AnIG1hY3JvIGFsbG9jYXRlcwp0ZW1wb3JhcnkgdmFyaWFibGVzLiAgSWYgdGhlICdGT1JfRUFDSF9MT09QJyBsb29wIHdlcmUgZW5kZWQgdXNpbmcgYnJlYWsKb3IgZ290bywgdGhleSB3b3VsZCBub3QgYmUgcmVsZWFzZWQ7ICdGT1JfRUFDSF9MT09QX0JSRUFLJyBtYWNybyBtdXN0IGJlCnVzZWQgaW5zdGVhZC4KCiBFYWNoIGJhc2ljIGJsb2NrIGNvbnRhaW5zIHRoZSByZWZlcmVuY2UgdG8gdGhlIGlubmVybW9zdCBsb29wIGl0CmJlbG9uZ3MgdG8gKCdsb29wX2ZhdGhlcicpLiAgRm9yIHRoaXMgcmVhc29uLCBpdCBpcyBvbmx5IHBvc3NpYmxlIHRvCmhhdmUgb25lICdzdHJ1Y3QgbG9vcHMnIHN0cnVjdHVyZSBpbml0aWFsaXplZCBhdCB0aGUgc2FtZSB0aW1lIGZvciBlYWNoCkNGRy4gIFRoZSBnbG9iYWwgdmFyaWFibGUgJ2N1cnJlbnRfbG9vcHMnIGNvbnRhaW5zIHRoZSAnc3RydWN0IGxvb3BzJwpzdHJ1Y3R1cmUuICBNYW55IG9mIHRoZSBsb29wIG1hbmlwdWxhdGlvbiBmdW5jdGlvbnMgYXNzdW1lIHRoYXQKZG9taW5hbmNlIGluZm9ybWF0aW9uIGlzIHVwLXRvLWRhdGUuCgogVGhlIGxvb3BzIGFyZSBhbmFseXplZCB0aHJvdWdoICdsb29wX29wdGltaXplcl9pbml0JyBmdW5jdGlvbi4gIFRoZQphcmd1bWVudCBvZiB0aGlzIGZ1bmN0aW9uIGlzIGEgc2V0IG9mIGZsYWdzIHJlcHJlc2VudGVkIGluIGFuIGludGVnZXIKYml0bWFzay4gIFRoZXNlIGZsYWdzIHNwZWNpZnkgd2hhdCBvdGhlciBwcm9wZXJ0aWVzIG9mIHRoZSBsb29wCnN0cnVjdHVyZXMgc2hvdWxkIGJlIGNhbGN1bGF0ZWQvZW5mb3JjZWQgYW5kIHByZXNlcnZlZCBsYXRlcjoKCiAgICogJ0xPT1BTX01BWV9IQVZFX01VTFRJUExFX0xBVENIRVMnOiBJZiB0aGlzIGZsYWcgaXMgc2V0LCBubyBjaGFuZ2VzCiAgICAgdG8gQ0ZHIHdpbGwgYmUgcGVyZm9ybWVkIGluIHRoZSBsb29wIGFuYWx5c2lzLCBpbiBwYXJ0aWN1bGFyLCBsb29wcwogICAgIHdpdGggbXVsdGlwbGUgbGF0Y2ggZWRnZXMgd2lsbCBub3QgYmUgZGlzYW1iaWd1YXRlZC4gIElmIGEgbG9vcCBoYXMKICAgICBtdWx0aXBsZSBsYXRjaGVzLCBpdHMgbGF0Y2ggYmxvY2sgaXMgc2V0IHRvIE5VTEwuICBNb3N0IG9mIHRoZSBsb29wCiAgICAgbWFuaXB1bGF0aW9uIGZ1bmN0aW9ucyB3aWxsIG5vdCB3b3JrIGZvciBsb29wcyBpbiB0aGlzIHNoYXBlLiAgTm8KICAgICBvdGhlciBmbGFncyB0aGF0IHJlcXVpcmUgQ0ZHIGNoYW5nZXMgY2FuIGJlIHBhc3NlZCB0bwogICAgIGxvb3Bfb3B0aW1pemVyX2luaXQuCiAgICogJ0xPT1BTX0hBVkVfUFJFSEVBREVSUyc6IEZvcndhcmRlciBibG9ja3MgYXJlIGNyZWF0ZWQgaW4gc3VjaCBhIHdheQogICAgIHRoYXQgZWFjaCBsb29wIGhhcyBvbmx5IG9uZSBlbnRyeSBlZGdlLCBhbmQgYWRkaXRpb25hbGx5LCB0aGUKICAgICBzb3VyY2UgYmxvY2sgb2YgdGhpcyBlbnRyeSBlZGdlIGhhcyBvbmx5IG9uZSBzdWNjZXNzb3IuICBUaGlzCiAgICAgY3JlYXRlcyBhIG5hdHVyYWwgcGxhY2Ugd2hlcmUgdGhlIGNvZGUgY2FuIGJlIG1vdmVkIG91dCBvZiB0aGUKICAgICBsb29wLCBhbmQgZW5zdXJlcyB0aGF0IHRoZSBlbnRyeSBlZGdlIG9mIHRoZSBsb29wIGxlYWRzIGZyb20gaXRzCiAgICAgaW1tZWRpYXRlIHN1cGVyLWxvb3AuCiAgICogJ0xPT1BTX0hBVkVfU0lNUExFX0xBVENIRVMnOiBGb3J3YXJkZXIgYmxvY2tzIGFyZSBjcmVhdGVkIHRvIGZvcmNlCiAgICAgdGhlIGxhdGNoIGJsb2NrIG9mIGVhY2ggbG9vcCB0byBoYXZlIG9ubHkgb25lIHN1Y2Nlc3Nvci4gIFRoaXMKICAgICBlbnN1cmVzIHRoYXQgdGhlIGxhdGNoIG9mIHRoZSBsb29wIGRvZXMgbm90IGJlbG9uZyB0byBhbnkgb2YgaXRzCiAgICAgc3ViLWxvb3BzLCBhbmQgbWFrZXMgbWFuaXB1bGF0aW9uIHdpdGggdGhlIGxvb3BzIHNpZ25pZmljYW50bHkKICAgICBlYXNpZXIuICBNb3N0IG9mIHRoZSBsb29wIG1hbmlwdWxhdGlvbiBmdW5jdGlvbnMgYXNzdW1lIHRoYXQgdGhlCiAgICAgbG9vcHMgYXJlIGluIHRoaXMgc2hhcGUuICBOb3RlIHRoYXQgd2l0aCB0aGlzIGZsYWcsIHRoZSAibm9ybWFsIgogICAgIGxvb3Agd2l0aG91dCBhbnkgY29udHJvbCBmbG93IGluc2lkZSBhbmQgd2l0aCBvbmUgZXhpdCBjb25zaXN0cyBvZgogICAgIHR3byBiYXNpYyBibG9ja3MuCiAgICogJ0xPT1BTX0hBVkVfTUFSS0VEX0lSUkVEVUNJQkxFX1JFR0lPTlMnOiBCYXNpYyBibG9ja3MgYW5kIGVkZ2VzIGluCiAgICAgdGhlIHN0cm9uZ2x5IGNvbm5lY3RlZCBjb21wb25lbnRzIHRoYXQgYXJlIG5vdCBuYXR1cmFsIGxvb3BzIChoYXZlCiAgICAgbW9yZSB0aGFuIG9uZSBlbnRyeSBibG9jaykgYXJlIG1hcmtlZCB3aXRoICdCQl9JUlJFRFVDSUJMRV9MT09QJwogICAgIGFuZCAnRURHRV9JUlJFRFVDSUJMRV9MT09QJyBmbGFncy4gIFRoZSBmbGFnIGlzIG5vdCBzZXQgZm9yIGJsb2NrcwogICAgIGFuZCBlZGdlcyB0aGF0IGJlbG9uZyB0byBuYXR1cmFsIGxvb3BzIHRoYXQgYXJlIGluIHN1Y2ggYW4KICAgICBpcnJlZHVjaWJsZSByZWdpb24gKGJ1dCBpdCBpcyBzZXQgZm9yIHRoZSBlbnRyeSBhbmQgZXhpdCBlZGdlcyBvZgogICAgIHN1Y2ggYSBsb29wLCBpZiB0aGV5IGxlYWQgdG8vZnJvbSB0aGlzIHJlZ2lvbikuCiAgICogJ0xPT1BTX0hBVkVfUkVDT1JERURfRVhJVFMnOiBUaGUgbGlzdHMgb2YgZXhpdHMgYXJlIHJlY29yZGVkIGFuZAogICAgIHVwZGF0ZWQgZm9yIGVhY2ggbG9vcC4gIFRoaXMgbWFrZXMgc29tZSBmdW5jdGlvbnMgKGUuZy4sCiAgICAgJ2dldF9sb29wX2V4aXRfZWRnZXMnKSBtb3JlIGVmZmljaWVudC4gIFNvbWUgZnVuY3Rpb25zIChlLmcuLAogICAgICdzaW5nbGVfZXhpdCcpIGNhbiBiZSB1c2VkIG9ubHkgaWYgdGhlIGxpc3RzIG9mIGV4aXRzIGFyZSByZWNvcmRlZC4KCiBUaGVzZSBwcm9wZXJ0aWVzIG1heSBhbHNvIGJlIGNvbXB1dGVkL2VuZm9yY2VkIGxhdGVyLCB1c2luZyBmdW5jdGlvbnMKJ2NyZWF0ZV9wcmVoZWFkZXJzJywgJ2ZvcmNlX3NpbmdsZV9zdWNjX2xhdGNoZXMnLAonbWFya19pcnJlZHVjaWJsZV9sb29wcycgYW5kICdyZWNvcmRfbG9vcF9leGl0cycuCgogVGhlIG1lbW9yeSBvY2N1cGllZCBieSB0aGUgbG9vcHMgc3RydWN0dXJlcyBzaG91bGQgYmUgZnJlZWQgd2l0aAonbG9vcF9vcHRpbWl6ZXJfZmluYWxpemUnIGZ1bmN0aW9uLgoKIFRoZSBDRkcgbWFuaXB1bGF0aW9uIGZ1bmN0aW9ucyBpbiBnZW5lcmFsIGRvIG5vdCB1cGRhdGUgbG9vcApzdHJ1Y3R1cmVzLiAgU3BlY2lhbGl6ZWQgdmVyc2lvbnMgdGhhdCBhZGRpdGlvbmFsbHkgZG8gc28gYXJlIHByb3ZpZGVkCmZvciB0aGUgbW9zdCBjb21tb24gdGFza3MuICBPbiBHSU1QTEUsICdjbGVhbnVwX3RyZWVfY2ZnX2xvb3AnIGZ1bmN0aW9uCmNhbiBiZSB1c2VkIHRvIGNsZWFudXAgQ0ZHIHdoaWxlIHVwZGF0aW5nIHRoZSBsb29wcyBzdHJ1Y3R1cmVzIGlmCidjdXJyZW50X2xvb3BzJyBpcyBzZXQuCgofCkZpbGU6IGdjY2ludC5pbmZvLCAgTm9kZTogTG9vcCBxdWVyeWluZywgIE5leHQ6IExvb3AgbWFuaXB1bGF0aW9uLCAgUHJldjogTG9vcCByZXByZXNlbnRhdGlvbiwgIFVwOiBMb29wIEFuYWx5c2lzIGFuZCBSZXByZXNlbnRhdGlvbgoKMTEuMiBMb29wIHF1ZXJ5aW5nCj09PT09PT09PT09PT09PT09PQoKVGhlIGZ1bmN0aW9ucyB0byBxdWVyeSB0aGUgaW5mb3JtYXRpb24gYWJvdXQgbG9vcHMgYXJlIGRlY2xhcmVkIGluCidjZmdsb29wLmgnLiAgU29tZSBvZiB0aGUgaW5mb3JtYXRpb24gY2FuIGJlIHRha2VuIGRpcmVjdGx5IGZyb20gdGhlCnN0cnVjdHVyZXMuICAnbG9vcF9mYXRoZXInIGZpZWxkIG9mIGVhY2ggYmFzaWMgYmxvY2sgY29udGFpbnMgdGhlCmlubmVybW9zdCBsb29wIHRvIHRoYXQgdGhlIGJsb2NrIGJlbG9uZ3MuICBUaGUgbW9zdCB1c2VmdWwgZmllbGRzIG9mCmxvb3Agc3RydWN0dXJlICh0aGF0IGFyZSBrZXB0IHVwLXRvLWRhdGUgYXQgYWxsIHRpbWVzKSBhcmU6CgogICAqICdoZWFkZXInLCAnbGF0Y2gnOiBIZWFkZXIgYW5kIGxhdGNoIGJhc2ljIGJsb2NrcyBvZiB0aGUgbG9vcC4KICAgKiAnbnVtX25vZGVzJzogTnVtYmVyIG9mIGJhc2ljIGJsb2NrcyBpbiB0aGUgbG9vcCAoaW5jbHVkaW5nIHRoZQogICAgIGJhc2ljIGJsb2NrcyBvZiB0aGUgc3ViLWxvb3BzKS4KICAgKiAnZGVwdGgnOiBUaGUgZGVwdGggb2YgdGhlIGxvb3AgaW4gdGhlIGxvb3BzIHRyZWUsIGkuZS4sIHRoZSBudW1iZXIKICAgICBvZiBzdXBlci1sb29wcyBvZiB0aGUgbG9vcC4KICAgKiAnb3V0ZXInLCAnaW5uZXInLCAnbmV4dCc6IFRoZSBzdXBlci1sb29wLCB0aGUgZmlyc3Qgc3ViLWxvb3AsIGFuZAogICAgIHRoZSBzaWJsaW5nIG9mIHRoZSBsb29wIGluIHRoZSBsb29wcyB0cmVlLgoKIFRoZXJlIGFyZSBvdGhlciBmaWVsZHMgaW4gdGhlIGxvb3Agc3RydWN0dXJlcywgbWFueSBvZiB0aGVtIHVzZWQgb25seQpieSBzb21lIG9mIHRoZSBwYXNzZXMsIG9yIG5vdCB1cGRhdGVkIGR1cmluZyBDRkcgY2hhbmdlczsgaW4gZ2VuZXJhbCwKdGhleSBzaG91bGQgbm90IGJlIGFjY2Vzc2VkIGRpcmVjdGx5LgoKIFRoZSBtb3N0IGltcG9ydGFudCBmdW5jdGlvbnMgdG8gcXVlcnkgbG9vcCBzdHJ1Y3R1cmVzIGFyZToKCiAgICogJ2Zsb3dfbG9vcHNfZHVtcCc6IER1bXBzIHRoZSBpbmZvcm1hdGlvbiBhYm91dCBsb29wcyB0byBhIGZpbGUuCiAgICogJ3ZlcmlmeV9sb29wX3N0cnVjdHVyZSc6IENoZWNrcyBjb25zaXN0ZW5jeSBvZiB0aGUgbG9vcCBzdHJ1Y3R1cmVzLgogICAqICdsb29wX2xhdGNoX2VkZ2UnOiBSZXR1cm5zIHRoZSBsYXRjaCBlZGdlIG9mIGEgbG9vcC4KICAgKiAnbG9vcF9wcmVoZWFkZXJfZWRnZSc6IElmIGxvb3BzIGhhdmUgcHJlaGVhZGVycywgcmV0dXJucyB0aGUKICAgICBwcmVoZWFkZXIgZWRnZSBvZiBhIGxvb3AuCiAgICogJ2Zsb3dfbG9vcF9uZXN0ZWRfcCc6IFRlc3RzIHdoZXRoZXIgbG9vcCBpcyBhIHN1Yi1sb29wIG9mIGFub3RoZXIKICAgICBsb29wLgogICAqICdmbG93X2JiX2luc2lkZV9sb29wX3AnOiBUZXN0cyB3aGV0aGVyIGEgYmFzaWMgYmxvY2sgYmVsb25ncyB0byBhCiAgICAgbG9vcCAoaW5jbHVkaW5nIGl0cyBzdWItbG9vcHMpLgogICAqICdmaW5kX2NvbW1vbl9sb29wJzogRmluZHMgdGhlIGNvbW1vbiBzdXBlci1sb29wIG9mIHR3byBsb29wcy4KICAgKiAnc3VwZXJsb29wX2F0X2RlcHRoJzogUmV0dXJucyB0aGUgc3VwZXItbG9vcCBvZiBhIGxvb3Agd2l0aCB0aGUKICAgICBnaXZlbiBkZXB0aC4KICAgKiAndHJlZV9udW1fbG9vcF9pbnNucycsICdudW1fbG9vcF9pbnNucyc6IEVzdGltYXRlcyB0aGUgbnVtYmVyIG9mCiAgICAgaW5zbnMgaW4gdGhlIGxvb3AsIG9uIEdJTVBMRSBhbmQgb24gUlRMLgogICAqICdsb29wX2V4aXRfZWRnZV9wJzogVGVzdHMgd2hldGhlciBlZGdlIGlzIGFuIGV4aXQgZnJvbSBhIGxvb3AuCiAgICogJ21hcmtfbG9vcF9leGl0X2VkZ2VzJzogTWFya3MgYWxsIGV4aXQgZWRnZXMgb2YgYWxsIGxvb3BzIHdpdGgKICAgICAnRURHRV9MT09QX0VYSVQnIGZsYWcuCiAgICogJ2dldF9sb29wX2JvZHknLCAnZ2V0X2xvb3BfYm9keV9pbl9kb21fb3JkZXInLAogICAgICdnZXRfbG9vcF9ib2R5X2luX2Jmc19vcmRlcic6IEVudW1lcmF0ZXMgdGhlIGJhc2ljIGJsb2NrcyBpbiB0aGUKICAgICBsb29wIGluIGRlcHRoLWZpcnN0IHNlYXJjaCBvcmRlciBpbiByZXZlcnNlZCBDRkcsIG9yZGVyZWQgYnkKICAgICBkb21pbmFuY2UgcmVsYXRpb24sIGFuZCBicmVhdGgtZmlyc3Qgc2VhcmNoIG9yZGVyLCByZXNwZWN0aXZlbHkuCiAgICogJ3NpbmdsZV9leGl0JzogUmV0dXJucyB0aGUgc2luZ2xlIGV4aXQgZWRnZSBvZiB0aGUgbG9vcCwgb3IgJ05VTEwnCiAgICAgaWYgdGhlIGxvb3AgaGFzIG1vcmUgdGhhbiBvbmUgZXhpdC4gIFlvdSBjYW4gb25seSB1c2UgdGhpcyBmdW5jdGlvbgogICAgIGlmIExPT1BTX0hBVkVfTUFSS0VEX1NJTkdMRV9FWElUUyBwcm9wZXJ0eSBpcyB1c2VkLgogICAqICdnZXRfbG9vcF9leGl0X2VkZ2VzJzogRW51bWVyYXRlcyB0aGUgZXhpdCBlZGdlcyBvZiBhIGxvb3AuCiAgICogJ2p1c3Rfb25jZV9lYWNoX2l0ZXJhdGlvbl9wJzogUmV0dXJucyB0cnVlIGlmIHRoZSBiYXNpYyBibG9jayBpcwogICAgIGV4ZWN1dGVkIGV4YWN0bHkgb25jZSBkdXJpbmcgZWFjaCBpdGVyYXRpb24gb2YgYSBsb29wICh0aGF0IGlzLCBpdAogICAgIGRvZXMgbm90IGJlbG9uZyB0byBhIHN1Yi1sb29wLCBhbmQgaXQgZG9taW5hdGVzIHRoZSBsYXRjaCBvZiB0aGUKICAgICBsb29wKS4KCh8KRmlsZTogZ2NjaW50LmluZm8sICBOb2RlOiBMb29wIG1hbmlwdWxhdGlvbiwgIE5leHQ6IExDU1NBLCAgUHJldjogTG9vcCBxdWVyeWluZywgIFVwOiBMb29wIEFuYWx5c2lzIGFuZCBSZXByZXNlbnRhdGlvbgoKMTEuMyBMb29wIG1hbmlwdWxhdGlvbgo9PT09PT09PT09PT09PT09PT09PT09CgpUaGUgbG9vcHMgdHJlZSBjYW4gYmUgbWFuaXB1bGF0ZWQgdXNpbmcgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6CgogICAqICdmbG93X2xvb3BfdHJlZV9ub2RlX2FkZCc6IEFkZHMgYSBub2RlIHRvIHRoZSB0cmVlLgogICAqICdmbG93X2xvb3BfdHJlZV9ub2RlX3JlbW92ZSc6IFJlbW92ZXMgYSBub2RlIGZyb20gdGhlIHRyZWUuCiAgICogJ2FkZF9iYl90b19sb29wJzogQWRkcyBhIGJhc2ljIGJsb2NrIHRvIGEgbG9vcC4KICAgKiAncmVtb3ZlX2JiX2Zyb21fbG9vcHMnOiBSZW1vdmVzIGEgYmFzaWMgYmxvY2sgZnJvbSBsb29wcy4KCiBNb3N0IGxvdy1sZXZlbCBDRkcgZnVuY3Rpb25zIHVwZGF0ZSBsb29wcyBhdXRvbWF0aWNhbGx5LiAgVGhlIGZvbGxvd2luZwpmdW5jdGlvbnMgaGFuZGxlIHNvbWUgbW9yZSBjb21wbGljYXRlZCBjYXNlcyBvZiBDRkcgbWFuaXB1bGF0aW9uczoKCiAgICogJ3JlbW92ZV9wYXRoJzogUmVtb3ZlcyBhbiBlZGdlIGFuZCBhbGwgYmxvY2tzIGl0IGRvbWluYXRlcy4KICAgKiAnc3BsaXRfbG9vcF9leGl0X2VkZ2UnOiBTcGxpdHMgZXhpdCBlZGdlIG9mIHRoZSBsb29wLCBlbnN1cmluZyB0aGF0CiAgICAgUEhJIG5vZGUgYXJndW1lbnRzIHJlbWFpbiBpbiB0aGUgbG9vcCAodGhpcyBlbnN1cmVzIHRoYXQKICAgICBsb29wLWNsb3NlZCBTU0EgZm9ybSBpcyBwcmVzZXJ2ZWQpLiAgT25seSB1c2VmdWwgb24gR0lNUExFLgoKIEZpbmFsbHksIHRoZXJlIGFyZSBzb21lIGhpZ2hlci1sZXZlbCBsb29wIHRyYW5zZm9ybWF0aW9ucyBpbXBsZW1lbnRlZC4KV2hpbGUgc29tZSBvZiB0aGVtIGFyZSB3cml0dGVuIHNvIHRoYXQgdGhleSBzaG91bGQgd29yayBvbiBub24taW5uZXJtb3N0Cmxvb3BzLCB0aGV5IGFyZSBtb3N0bHkgdW50ZXN0ZWQgaW4gdGhhdCBjYXNlLCBhbmQgYXQgdGhlIG1vbWVudCwgdGhleQphcmUgb25seSByZWxpYWJsZSBmb3IgdGhlIGlubmVybW9zdCBsb29wczoKCiAgICogJ2NyZWF0ZV9pdic6IENyZWF0ZXMgYSBuZXcgaW5kdWN0aW9uIHZhcmlhYmxlLiAgT25seSB3b3JrcyBvbgogICAgIEdJTVBMRS4gICdzdGFuZGFyZF9pdl9pbmNyZW1lbnRfcG9zaXRpb24nIGNhbiBiZSB1c2VkIHRvIGZpbmQgYQogICAgIHN1aXRhYmxlIHBsYWNlIGZvciB0aGUgaXYgaW5jcmVtZW50LgogICAqICdkdXBsaWNhdGVfbG9vcF90b19oZWFkZXJfZWRnZScsCiAgICAgJ3RyZWVfZHVwbGljYXRlX2xvb3BfdG9faGVhZGVyX2VkZ2UnOiBUaGVzZSBmdW5jdGlvbnMgKG9uIFJUTCBhbmQKICAgICBvbiBHSU1QTEUpIGR1cGxpY2F0ZSB0aGUgYm9keSBvZiB0aGUgbG9vcCBwcmVzY3JpYmVkIG51bWJlciBvZgogICAgIHRpbWVzIG9uIG9uZSBvZiB0aGUgZWRnZXMgZW50ZXJpbmcgbG9vcCBoZWFkZXIsIHRodXMgcGVyZm9ybWluZwogICAgIGVpdGhlciBsb29wIHVucm9sbGluZyBvciBsb29wIHBlZWxpbmcuICAnY2FuX2R1cGxpY2F0ZV9sb29wX3AnCiAgICAgKCdjYW5fdW5yb2xsX2xvb3BfcCcgb24gR0lNUExFKSBtdXN0IGJlIHRydWUgZm9yIHRoZSBkdXBsaWNhdGVkCiAgICAgbG9vcC4KICAgKiAnbG9vcF92ZXJzaW9uJywgJ3RyZWVfc3NhX2xvb3BfdmVyc2lvbic6IFRoZXNlIGZ1bmN0aW9uIGNyZWF0ZSBhCiAgICAgY29weSBvZiBhIGxvb3AsIGFuZCBhIGJyYW5jaCBiZWZvcmUgdGhlbSB0aGF0IHNlbGVjdHMgb25lIG9mIHRoZW0KICAgICBkZXBlbmRpbmcgb24gdGhlIHByZXNjcmliZWQgY29uZGl0aW9uLiAgVGhpcyBpcyB1c2VmdWwgZm9yCiAgICAgb3B0aW1pemF0aW9ucyB0aGF0IG5lZWQgdG8gdmVyaWZ5IHNvbWUgYXNzdW1wdGlvbnMgaW4gcnVudGltZSAob25lCiAgICAgb2YgdGhlIGNvcGllcyBvZiB0aGUgbG9vcCBpcyB1c3VhbGx5IGxlZnQgdW5jaGFuZ2VkLCB3aGlsZSB0aGUKICAgICBvdGhlciBvbmUgaXMgdHJhbnNmb3JtZWQgaW4gc29tZSB3YXkpLgogICAqICd0cmVlX3Vucm9sbF9sb29wJzogVW5yb2xscyB0aGUgbG9vcCwgaW5jbHVkaW5nIHBlZWxpbmcgdGhlIGV4dHJhCiAgICAgaXRlcmF0aW9ucyB0byBtYWtlIHRoZSBudW1iZXIgb2YgaXRlcmF0aW9ucyBkaXZpc2libGUgYnkgdW5yb2xsCiAgICAgZmFjdG9yLCB1cGRhdGluZyB0aGUgZXhpdCBjb25kaXRpb24sIGFuZCByZW1vdmluZyB0aGUgZXhpdHMgdGhhdAogICAgIG5vdyBjYW5ub3QgYmUgdGFrZW4uICBXb3JrcyBvbmx5IG9uIEdJTVBMRS4KCh8KRmlsZTogZ2NjaW50LmluZm8sICBOb2RlOiBMQ1NTQSwgIE5leHQ6IFNjYWxhciBldm9sdXRpb25zLCAgUHJldjogTG9vcCBtYW5pcHVsYXRpb24sICBVcDogTG9vcCBBbmFseXNpcyBhbmQgUmVwcmVzZW50YXRpb24KCjExLjQgTG9vcC1jbG9zZWQgU1NBIGZvcm0KPT09PT09PT09PT09PT09PT09PT09PT09PQoKVGhyb3VnaG91dCB0aGUgbG9vcCBvcHRpbWl6YXRpb25zIG9uIHRyZWUgbGV2ZWwsIG9uZSBleHRyYSBjb25kaXRpb24gaXMKZW5mb3JjZWQgb24gdGhlIFNTQSBmb3JtOiBObyBTU0EgbmFtZSBpcyB1c2VkIG91dHNpZGUgb2YgdGhlIGxvb3AgaW4KdGhhdCBpdCBpcyBkZWZpbmVkLiAgVGhlIFNTQSBmb3JtIHNhdGlzZnlpbmcgdGhpcyBjb25kaXRpb24gaXMgY2FsbGVkCiJsb29wLWNsb3NlZCBTU0EgZm9ybSIgLSBMQ1NTQS4gIFRvIGVuZm9yY2UgTENTU0EsIFBISSBub2RlcyBtdXN0IGJlCmNyZWF0ZWQgYXQgdGhlIGV4aXRzIG9mIHRoZSBsb29wcyBmb3IgdGhlIFNTQSBuYW1lcyB0aGF0IGFyZSB1c2VkCm91dHNpZGUgb2YgdGhlbS4gIE9ubHkgdGhlIHJlYWwgb3BlcmFuZHMgKG5vdCB2aXJ0dWFsIFNTQSBuYW1lcykgYXJlCmhlbGQgaW4gTENTU0EsIGluIG9yZGVyIHRvIHNhdmUgbWVtb3J5LgoKIFRoZXJlIGFyZSB2YXJpb3VzIGJlbmVmaXRzIG9mIExDU1NBOgoKICAgKiBNYW55IG9wdGltaXphdGlvbnMgKHZhbHVlIHJhbmdlIGFuYWx5c2lzLCBmaW5hbCB2YWx1ZSByZXBsYWNlbWVudCkKICAgICBhcmUgaW50ZXJlc3RlZCBpbiB0aGUgdmFsdWVzIHRoYXQgYXJlIGRlZmluZWQgaW4gdGhlIGxvb3AgYW5kIHVzZWQKICAgICBvdXRzaWRlIG9mIGl0LCBpLmUuLCBleGFjdGx5IHRob3NlIGZvciB0aGF0IHdlIGNyZWF0ZSBuZXcgUEhJCiAgICAgbm9kZXMuCiAgICogSW4gaW5kdWN0aW9uIHZhcmlhYmxlIGFuYWx5c2lzLCBpdCBpcyBub3QgbmVjZXNzYXJ5IHRvIHNwZWNpZnkgdGhlCiAgICAgbG9vcCBpbiB0aGF0IHRoZSBhbmFseXNpcyBzaG91bGQgYmUgcGVyZm9ybWVkIC0gdGhlIHNjYWxhcgogICAgIGV2b2x1dGlvbiBhbmFseXNpcyBhbHdheXMgcmV0dXJucyB0aGUgcmVzdWx0cyB3aXRoIHJlc3BlY3QgdG8gdGhlCiAgICAgbG9vcCBpbiB0aGF0IHRoZSBTU0EgbmFtZSBpcyBkZWZpbmVkLgogICAqIEl0IG1ha2VzIHVwZGF0aW5nIG9mIFNTQSBmb3JtIGR1cmluZyBsb29wIHRyYW5zZm9ybWF0aW9ucyBzaW1wbGVyLgogICAgIFdpdGhvdXQgTENTU0EsIG9wZXJhdGlvbnMgbGlrZSBsb29wIHVucm9sbGluZyBtYXkgZm9yY2UgY3JlYXRpb24gb2YKICAgICBQSEkgbm9kZXMgYXJiaXRyYXJpbHkgZmFyIGZyb20gdGhlIGxvb3AsIHdoaWxlIGluIExDU1NBLCB0aGUgU1NBCiAgICAgZm9ybSBjYW4gYmUgdXBkYXRlZCBsb2NhbGx5LiAgSG93ZXZlciwgc2luY2Ugd2Ugb25seSBrZWVwIHJlYWwKICAgICBvcGVyYW5kcyBpbiBMQ1NTQSwgd2UgY2Fubm90IHVzZSB0aGlzIGFkdmFudGFnZSAod2UgY291bGQgaGF2ZQogICAgIGxvY2FsIHVwZGF0aW5nIG9mIHJlYWwgb3BlcmFuZHMsIGJ1dCBpdCBpcyBub3QgbXVjaCBtb3JlIGVmZmljaWVudAogICAgIHRoYW4gdG8gdXNlIGdlbmVyaWMgU1NBIGZvcm0gdXBkYXRpbmcgZm9yIGl0IGFzIHdlbGw7IHRoZSBhbW91bnQgb2YKICAgICBjaGFuZ2VzIHRvIFNTQSBpcyB0aGUgc2FtZSkuCgogSG93ZXZlciwgaXQgYWxzbyBtZWFucyBMQ1NTQSBtdXN0IGJlIHVwZGF0ZWQuICBUaGlzIGlzIHVzdWFsbHkKc3RyYWlnaHRmb3J3YXJkLCB1bmxlc3MgeW91IGNyZWF0ZSBhIG5ldyB2YWx1ZSBpbiBsb29wIGFuZCB1c2UgaXQKb3V0c2lkZSwgb3IgdW5sZXNzIHlvdSBtYW5pcHVsYXRlIGxvb3AgZXhpdCBlZGdlcyAoZnVuY3Rpb25zIGFyZQpwcm92aWRlZCB0byBtYWtlIHRoZXNlIG1hbmlwdWxhdGlvbnMgc2ltcGxlKS4KJ3Jld3JpdGVfaW50b19sb29wX2Nsb3NlZF9zc2EnIGlzIHVzZWQgdG8gcmV3cml0ZSBTU0EgZm9ybSB0byBMQ1NTQSwgYW5kCid2ZXJpZnlfbG9vcF9jbG9zZWRfc3NhJyB0byBjaGVjayB0aGF0IHRoZSBpbnZhcmlhbnQgb2YgTENTU0EgaXMKcHJlc2VydmVkLgoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IFNjYWxhciBldm9sdXRpb25zLCAgTmV4dDogbG9vcC1pdiwgIFByZXY6IExDU1NBLCAgVXA6IExvb3AgQW5hbHlzaXMgYW5kIFJlcHJlc2VudGF0aW9uCgoxMS41IFNjYWxhciBldm9sdXRpb25zCj09PT09PT09PT09PT09PT09PT09PT0KClNjYWxhciBldm9sdXRpb25zIChTQ0VWKSBhcmUgdXNlZCB0byByZXByZXNlbnQgcmVzdWx0cyBvZiBpbmR1Y3Rpb24KdmFyaWFibGUgYW5hbHlzaXMgb24gR0lNUExFLiAgVGhleSBlbmFibGUgdXMgdG8gcmVwcmVzZW50IHZhcmlhYmxlcyB3aXRoCmNvbXBsaWNhdGVkIGJlaGF2aW9yIGluIGEgc2ltcGxlIGFuZCBjb25zaXN0ZW50IHdheSAod2Ugb25seSB1c2UgaXQgdG8KZXhwcmVzcyB2YWx1ZXMgb2YgcG9seW5vbWlhbCBpbmR1Y3Rpb24gdmFyaWFibGVzLCBidXQgaXQgaXMgcG9zc2libGUgdG8KZXh0ZW5kIGl0KS4gIFRoZSBpbnRlcmZhY2VzIHRvIFNDRVYgYW5hbHlzaXMgYXJlIGRlY2xhcmVkIGluCid0cmVlLXNjYWxhci1ldm9sdXRpb24uaCcuICBUbyB1c2Ugc2NhbGFyIGV2b2x1dGlvbnMgYW5hbHlzaXMsCidzY2V2X2luaXRpYWxpemUnIG11c3QgYmUgdXNlZC4gIFRvIHN0b3AgdXNpbmcgU0NFViwgJ3NjZXZfZmluYWxpemUnCnNob3VsZCBiZSB1c2VkLiAgU0NFViBhbmFseXNpcyBjYWNoZXMgcmVzdWx0cyBpbiBvcmRlciB0byBzYXZlIHRpbWUgYW5kCm1lbW9yeS4gIFRoaXMgY2FjaGUgaG93ZXZlciBpcyBtYWRlIGludmFsaWQgYnkgbW9zdCBvZiB0aGUgbG9vcAp0cmFuc2Zvcm1hdGlvbnMsIGluY2x1ZGluZyByZW1vdmFsIG9mIGNvZGUuICBJZiBzdWNoIGEgdHJhbnNmb3JtYXRpb24gaXMKcGVyZm9ybWVkLCAnc2Nldl9yZXNldCcgbXVzdCBiZSBjYWxsZWQgdG8gY2xlYW4gdGhlIGNhY2hlcy4KCiBHaXZlbiBhbiBTU0EgbmFtZSwgaXRzIGJlaGF2aW9yIGluIGxvb3BzIGNhbiBiZSBhbmFseXplZCB1c2luZyB0aGUKJ2FuYWx5emVfc2NhbGFyX2V2b2x1dGlvbicgZnVuY3Rpb24uICBUaGUgcmV0dXJuZWQgU0NFViBob3dldmVyIGRvZXMgbm90CmhhdmUgdG8gYmUgZnVsbHkgYW5hbHl6ZWQgYW5kIGl0IG1heSBjb250YWluIHJlZmVyZW5jZXMgdG8gb3RoZXIgU1NBCm5hbWVzIGRlZmluZWQgaW4gdGhlIGxvb3AuICBUbyByZXNvbHZlIHRoZXNlIChwb3RlbnRpYWxseSByZWN1cnNpdmUpCnJlZmVyZW5jZXMsICdpbnN0YW50aWF0ZV9wYXJhbWV0ZXJzJyBvciAncmVzb2x2ZV9taXhlcnMnIGZ1bmN0aW9ucyBtdXN0CmJlIHVzZWQuICAnaW5zdGFudGlhdGVfcGFyYW1ldGVycycgaXMgdXNlZnVsIHdoZW4geW91IHVzZSB0aGUgcmVzdWx0cyBvZgpTQ0VWIG9ubHkgZm9yIHNvbWUgYW5hbHlzaXMsIGFuZCB3aGVuIHlvdSB3b3JrIHdpdGggd2hvbGUgbmVzdCBvZiBsb29wcwphdCBvbmNlLiAgSXQgd2lsbCB0cnkgcmVwbGFjaW5nIGFsbCBTU0EgbmFtZXMgYnkgdGhlaXIgU0NFViBpbiBhbGwKbG9vcHMsIGluY2x1ZGluZyB0aGUgc3VwZXItbG9vcHMgb2YgdGhlIGN1cnJlbnQgbG9vcCwgdGh1cyBwcm92aWRpbmcgYQpjb21wbGV0ZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYmVoYXZpb3Igb2YgdGhlIHZhcmlhYmxlIGluIHRoZSBsb29wCm5lc3QuICAncmVzb2x2ZV9taXhlcnMnIGlzIHVzZWZ1bCBpZiB5b3Ugd29yayB3aXRoIG9ubHkgb25lIGxvb3AgYXQgYQp0aW1lLCBhbmQgaWYgeW91IHBvc3NpYmx5IG5lZWQgdG8gY3JlYXRlIGNvZGUgYmFzZWQgb24gdGhlIHZhbHVlIG9mIHRoZQppbmR1Y3Rpb24gdmFyaWFibGUuICBJdCB3aWxsIG9ubHkgcmVzb2x2ZSB0aGUgU1NBIG5hbWVzIGRlZmluZWQgaW4gdGhlCmN1cnJlbnQgbG9vcCwgbGVhdmluZyB0aGUgU1NBIG5hbWVzIGRlZmluZWQgb3V0c2lkZSB1bmNoYW5nZWQsIGV2ZW4gaWYKdGhlaXIgZXZvbHV0aW9uIGluIHRoZSBvdXRlciBsb29wcyBpcyBrbm93bi4KCiBUaGUgU0NFViBpcyBhIG5vcm1hbCB0cmVlIGV4cHJlc3Npb24sIGV4Y2VwdCBmb3IgdGhlIGZhY3QgdGhhdCBpdCBtYXkKY29udGFpbiBzZXZlcmFsIHNwZWNpYWwgdHJlZSBub2Rlcy4gIE9uZSBvZiB0aGVtIGlzICdTQ0VWX05PVF9LTk9XTicsCnVzZWQgZm9yIFNTQSBuYW1lcyB3aG9zZSB2YWx1ZSBjYW5ub3QgYmUgZXhwcmVzc2VkLiAgVGhlIG90aGVyIG9uZSBpcwonUE9MWU5PTUlBTF9DSFJFQycuICBQb2x5bm9taWFsIGNocmVjIGhhcyB0aHJlZSBhcmd1bWVudHMgLSBiYXNlLCBzdGVwCmFuZCBsb29wIChib3RoIGJhc2UgYW5kIHN0ZXAgbWF5IGNvbnRhaW4gZnVydGhlciBwb2x5bm9taWFsIGNocmVjcykuClR5cGUgb2YgdGhlIGV4cHJlc3Npb24gYW5kIG9mIGJhc2UgYW5kIHN0ZXAgbXVzdCBiZSB0aGUgc2FtZS4gIEEKdmFyaWFibGUgaGFzIGV2b2x1dGlvbiAnUE9MWU5PTUlBTF9DSFJFQyhiYXNlLCBzdGVwLCBsb29wKScgaWYgaXQgaXMgKGluCnRoZSBzcGVjaWZpZWQgbG9vcCkgZXF1aXZhbGVudCB0byAneF8xJyBpbiB0aGUgZm9sbG93aW5nIGV4YW1wbGUKCiAgICAgd2hpbGUgKC4uLikKICAgICAgIHsKICAgICAgICAgeF8xID0gcGhpIChiYXNlLCB4XzIpOwogICAgICAgICB4XzIgPSB4XzEgKyBzdGVwOwogICAgICAgfQoKIE5vdGUgdGhhdCB0aGlzIGluY2x1ZGVzIHRoZSBsYW5ndWFnZSByZXN0cmljdGlvbnMgb24gdGhlIG9wZXJhdGlvbnMuCkZvciBleGFtcGxlLCBpZiB3ZSBjb21waWxlIEMgY29kZSBhbmQgJ3gnIGhhcyBzaWduZWQgdHlwZSwgdGhlbiB0aGUKb3ZlcmZsb3cgaW4gYWRkaXRpb24gd291bGQgY2F1c2UgdW5kZWZpbmVkIGJlaGF2aW9yLCBhbmQgd2UgbWF5IGFzc3VtZQp0aGF0IHRoaXMgZG9lcyBub3QgaGFwcGVuLiAgSGVuY2UsIHRoZSB2YWx1ZSB3aXRoIHRoaXMgU0NFViBjYW5ub3QKb3ZlcmZsb3cgKHdoaWNoIHJlc3RyaWN0cyB0aGUgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgb2Ygc3VjaCBhIGxvb3ApLgoKIEluIG1hbnkgY2FzZXMsIG9uZSB3YW50cyB0byByZXN0cmljdCB0aGUgYXR0ZW50aW9uIGp1c3QgdG8gYWZmaW5lCmluZHVjdGlvbiB2YXJpYWJsZXMuICBJbiB0aGlzIGNhc2UsIHRoZSBleHRyYSBleHByZXNzaXZlIHBvd2VyIG9mIFNDRVYKaXMgbm90IHVzZWZ1bCwgYW5kIG1heSBjb21wbGljYXRlIHRoZSBvcHRpbWl6YXRpb25zLiAgSW4gdGhpcyBjYXNlLAonc2ltcGxlX2l2JyBmdW5jdGlvbiBtYXkgYmUgdXNlZCB0byBhbmFseXplIGEgdmFsdWUgLSB0aGUgcmVzdWx0IGlzIGEKbG9vcC1pbnZhcmlhbnQgYmFzZSBhbmQgc3RlcC4KCh8KRmlsZTogZ2NjaW50LmluZm8sICBOb2RlOiBsb29wLWl2LCAgTmV4dDogTnVtYmVyIG9mIGl0ZXJhdGlvbnMsICBQcmV2OiBTY2FsYXIgZXZvbHV0aW9ucywgIFVwOiBMb29wIEFuYWx5c2lzIGFuZCBSZXByZXNlbnRhdGlvbgoKMTEuNiBJViBhbmFseXNpcyBvbiBSVEwKPT09PT09PT09PT09PT09PT09PT09PT0KClRoZSBpbmR1Y3Rpb24gdmFyaWFibGUgb24gUlRMIGlzIHNpbXBsZSBhbmQgb25seSBhbGxvd3MgYW5hbHlzaXMgb2YKYWZmaW5lIGluZHVjdGlvbiB2YXJpYWJsZXMsIGFuZCBvbmx5IGluIG9uZSBsb29wIGF0IG9uY2UuICBUaGUgaW50ZXJmYWNlCmlzIGRlY2xhcmVkIGluICdjZmdsb29wLmgnLiAgQmVmb3JlIGFuYWx5emluZyBpbmR1Y3Rpb24gdmFyaWFibGVzIGluIGEKbG9vcCBMLCAnaXZfYW5hbHlzaXNfbG9vcF9pbml0JyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBvbiBMLiBBZnRlciB0aGUKYW5hbHlzaXMgKHBvc3NpYmx5IGNhbGxpbmcgJ2l2X2FuYWx5c2lzX2xvb3BfaW5pdCcgZm9yIHNldmVyYWwgbG9vcHMpIGlzCmZpbmlzaGVkLCAnaXZfYW5hbHlzaXNfZG9uZScgc2hvdWxkIGJlIGNhbGxlZC4gIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zCmNhbiBiZSB1c2VkIHRvIGFjY2VzcyB0aGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXM6CgogICAqICdpdl9hbmFseXplJzogQW5hbHl6ZXMgYSBzaW5nbGUgcmVnaXN0ZXIgdXNlZCBpbiB0aGUgZ2l2ZW4gaW5zbi4KICAgICBJZiBubyB1c2Ugb2YgdGhlIHJlZ2lzdGVyIGluIHRoaXMgaW5zbiBpcyBmb3VuZCwgdGhlIGZvbGxvd2luZwogICAgIGluc25zIGFyZSBzY2FubmVkLCBzbyB0aGF0IHRoaXMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCBvbiB0aGUgaW5zbgogICAgIHJldHVybmVkIGJ5IGdldF9jb25kaXRpb24uCiAgICogJ2l2X2FuYWx5emVfcmVzdWx0JzogQW5hbHl6ZXMgcmVzdWx0IG9mIHRoZSBhc3NpZ25tZW50IGluIHRoZSBnaXZlbgogICAgIGluc24uCiAgICogJ2l2X2FuYWx5emVfZXhwcic6IEFuYWx5emVzIGEgbW9yZSBjb21wbGljYXRlZCBleHByZXNzaW9uLiAgQWxsIGl0cwogICAgIG9wZXJhbmRzIGFyZSBhbmFseXplZCBieSAnaXZfYW5hbHl6ZScsIGFuZCBoZW5jZSB0aGV5IG11c3QgYmUgdXNlZAogICAgIGluIHRoZSBzcGVjaWZpZWQgaW5zbiBvciBvbmUgb2YgdGhlIGZvbGxvd2luZyBpbnNucy4KCiBUaGUgZGVzY3JpcHRpb24gb2YgdGhlIGluZHVjdGlvbiB2YXJpYWJsZSBpcyBwcm92aWRlZCBpbiAnc3RydWN0CnJ0eF9pdicuICBJbiBvcmRlciB0byBoYW5kbGUgc3VicmVncywgdGhlIHJlcHJlc2VudGF0aW9uIGlzIGEgYml0CmNvbXBsaWNhdGVkOyBpZiB0aGUgdmFsdWUgb2YgdGhlICdleHRlbmQnIGZpZWxkIGlzIG5vdCAnVU5LTk9XTicsIHRoZQp2YWx1ZSBvZiB0aGUgaW5kdWN0aW9uIHZhcmlhYmxlIGluIHRoZSBpLXRoIGl0ZXJhdGlvbiBpcwoKICAgICBkZWx0YSArIG11bHQgKiBleHRlbmRfe2V4dGVuZF9tb2RlfSAoc3VicmVnX3ttb2RlfSAoYmFzZSArIGkgKiBzdGVwKSksCgogd2l0aCB0aGUgZm9sbG93aW5nIGV4Y2VwdGlvbjogaWYgJ2ZpcnN0X3NwZWNpYWwnIGlzIHRydWUsIHRoZW4gdGhlCnZhbHVlIGluIHRoZSBmaXJzdCBpdGVyYXRpb24gKHdoZW4gJ2knIGlzIHplcm8pIGlzICdkZWx0YSArIG11bHQgKgpiYXNlJy4gIEhvd2V2ZXIsIGlmICdleHRlbmQnIGlzIGVxdWFsIHRvICdVTktOT1dOJywgdGhlbiAnZmlyc3Rfc3BlY2lhbCcKbXVzdCBiZSBmYWxzZSwgJ2RlbHRhJyAwLCAnbXVsdCcgMSBhbmQgdGhlIHZhbHVlIGluIHRoZSBpLXRoIGl0ZXJhdGlvbgppcwoKICAgICBzdWJyZWdfe21vZGV9IChiYXNlICsgaSAqIHN0ZXApCgogVGhlIGZ1bmN0aW9uICdnZXRfaXZfdmFsdWUnIGNhbiBiZSB1c2VkIHRvIHBlcmZvcm0gdGhlc2UgY2FsY3VsYXRpb25zLgoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IE51bWJlciBvZiBpdGVyYXRpb25zLCAgTmV4dDogRGVwZW5kZW5jeSBhbmFseXNpcywgIFByZXY6IGxvb3AtaXYsICBVcDogTG9vcCBBbmFseXNpcyBhbmQgUmVwcmVzZW50YXRpb24KCjExLjcgTnVtYmVyIG9mIGl0ZXJhdGlvbnMgYW5hbHlzaXMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKQm90aCBvbiBHSU1QTEUgYW5kIG9uIFJUTCwgdGhlcmUgYXJlIGZ1bmN0aW9ucyBhdmFpbGFibGUgdG8gZGV0ZXJtaW5lCnRoZSBudW1iZXIgb2YgaXRlcmF0aW9ucyBvZiBhIGxvb3AsIHdpdGggYSBzaW1pbGFyIGludGVyZmFjZS4gIFRoZQpudW1iZXIgb2YgaXRlcmF0aW9ucyBvZiBhIGxvb3AgaW4gR0NDIGlzIGRlZmluZWQgYXMgdGhlIG51bWJlciBvZgpleGVjdXRpb25zIG9mIHRoZSBsb29wIGxhdGNoLiAgSW4gbWFueSBjYXNlcywgaXQgaXMgbm90IHBvc3NpYmxlIHRvCmRldGVybWluZSB0aGUgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgdW5jb25kaXRpb25hbGx5IC0gdGhlIGRldGVybWluZWQKbnVtYmVyIGlzIGNvcnJlY3Qgb25seSBpZiBzb21lIGFzc3VtcHRpb25zIGFyZSBzYXRpc2ZpZWQuICBUaGUgYW5hbHlzaXMKdHJpZXMgdG8gdmVyaWZ5IHRoZXNlIGNvbmRpdGlvbnMgdXNpbmcgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZCBpbiB0aGUKcHJvZ3JhbTsgaWYgaXQgZmFpbHMsIHRoZSBjb25kaXRpb25zIGFyZSByZXR1cm5lZCB0b2dldGhlciB3aXRoIHRoZQpyZXN1bHQuICBUaGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGFuZCBjb25kaXRpb25zIGFyZSBwcm92aWRlZCBieSB0aGUKYW5hbHlzaXM6CgogICAqICdhc3N1bXB0aW9ucyc6IElmIHRoaXMgY29uZGl0aW9uIGlzIGZhbHNlLCB0aGUgcmVzdCBvZiB0aGUKICAgICBpbmZvcm1hdGlvbiBpcyBpbnZhbGlkLgogICAqICdub2xvb3BfYXNzdW1wdGlvbnMnIG9uIFJUTCwgJ21heV9iZV96ZXJvJyBvbiBHSU1QTEU6IElmIHRoaXMKICAgICBjb25kaXRpb24gaXMgdHJ1ZSwgdGhlIGxvb3AgZXhpdHMgaW4gdGhlIGZpcnN0IGl0ZXJhdGlvbi4KICAgKiAnaW5maW5pdGUnOiBJZiB0aGlzIGNvbmRpdGlvbiBpcyB0cnVlLCB0aGUgbG9vcCBpcyBpbmZpbml0ZS4gIFRoaXMKICAgICBjb25kaXRpb24gaXMgb25seSBhdmFpbGFibGUgb24gUlRMLiAgT24gR0lNUExFLCBjb25kaXRpb25zIGZvcgogICAgIGZpbml0ZW5lc3Mgb2YgdGhlIGxvb3AgYXJlIGluY2x1ZGVkIGluICdhc3N1bXB0aW9ucycuCiAgICogJ25pdGVyX2V4cHInIG9uIFJUTCwgJ25pdGVyJyBvbiBHSU1QTEU6IFRoZSBleHByZXNzaW9uIHRoYXQgZ2l2ZXMKICAgICBudW1iZXIgb2YgaXRlcmF0aW9ucy4gIFRoZSBudW1iZXIgb2YgaXRlcmF0aW9ucyBpcyBkZWZpbmVkIGFzIHRoZQogICAgIG51bWJlciBvZiBleGVjdXRpb25zIG9mIHRoZSBsb29wIGxhdGNoLgoKIEJvdGggb24gR0lNUExFIGFuZCBvbiBSVEwsIGl0IG5lY2Vzc2FyeSBmb3IgdGhlIGluZHVjdGlvbiB2YXJpYWJsZQphbmFseXNpcyBmcmFtZXdvcmsgdG8gYmUgaW5pdGlhbGl6ZWQgKFNDRVYgb24gR0lNUExFLCBsb29wLWl2IG9uIFJUTCkuCk9uIEdJTVBMRSwgdGhlIHJlc3VsdHMgYXJlIHN0b3JlZCB0byAnc3RydWN0IHRyZWVfbml0ZXJfZGVzYycgc3RydWN0dXJlLgpOdW1iZXIgb2YgaXRlcmF0aW9ucyBiZWZvcmUgdGhlIGxvb3AgaXMgZXhpdGVkIHRocm91Z2ggYSBnaXZlbiBleGl0IGNhbgpiZSBkZXRlcm1pbmVkIHVzaW5nICdudW1iZXJfb2ZfaXRlcmF0aW9uc19leGl0JyBmdW5jdGlvbi4gIE9uIFJUTCwgdGhlCnJlc3VsdHMgYXJlIHJldHVybmVkIGluICdzdHJ1Y3Qgbml0ZXJfZGVzYycgc3RydWN0dXJlLiAgVGhlCmNvcnJlc3BvbmRpbmcgZnVuY3Rpb24gaXMgbmFtZWQgJ2NoZWNrX3NpbXBsZV9leGl0Jy4gIFRoZXJlIGFyZSBhbHNvCmZ1bmN0aW9ucyB0aGF0IHBhc3MgdGhyb3VnaCBhbGwgdGhlIGV4aXRzIG9mIGEgbG9vcCBhbmQgdHJ5IHRvIGZpbmQgb25lCndpdGggZWFzeSB0byBkZXRlcm1pbmUgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgLSAnZmluZF9sb29wX25pdGVyJyBvbgpHSU1QTEUgYW5kICdmaW5kX3NpbXBsZV9leGl0JyBvbiBSVEwuICBGaW5hbGx5LCB0aGVyZSBhcmUgZnVuY3Rpb25zIHRoYXQKcHJvdmlkZSB0aGUgc2FtZSBpbmZvcm1hdGlvbiwgYnV0IGFkZGl0aW9uYWxseSBjYWNoZSBpdCwgc28gdGhhdApyZXBlYXRlZCBjYWxscyB0byBudW1iZXIgb2YgaXRlcmF0aW9ucyBhcmUgbm90IHNvIGNvc3RseSAtCidudW1iZXJfb2ZfbGF0Y2hfZXhlY3V0aW9ucycgb24gR0lNUExFIGFuZCAnZ2V0X3NpbXBsZV9sb29wX2Rlc2MnIG9uClJUTC4KCiBOb3RlIHRoYXQgc29tZSBvZiB0aGVzZSBmdW5jdGlvbnMgbWF5IGJlaGF2ZSBzbGlnaHRseSBkaWZmZXJlbnRseSB0aGFuCm90aGVycyAtIHNvbWUgb2YgdGhlbSByZXR1cm4gb25seSB0aGUgZXhwcmVzc2lvbiBmb3IgdGhlIG51bWJlciBvZgppdGVyYXRpb25zLCBhbmQgZmFpbCBpZiB0aGVyZSBhcmUgc29tZSBhc3N1bXB0aW9ucy4gIFRoZSBmdW5jdGlvbgonbnVtYmVyX29mX2xhdGNoX2V4ZWN1dGlvbnMnIHdvcmtzIG9ubHkgZm9yIHNpbmdsZS1leGl0IGxvb3BzLiAgVGhlCmZ1bmN0aW9uICdudW1iZXJfb2ZfY29uZF9leGl0X2V4ZWN1dGlvbnMnIGNhbiBiZSB1c2VkIHRvIGRldGVybWluZQpudW1iZXIgb2YgZXhlY3V0aW9ucyBvZiB0aGUgZXhpdCBjb25kaXRpb24gb2YgYSBzaW5nbGUtZXhpdCBsb29wIChpLmUuLAp0aGUgJ251bWJlcl9vZl9sYXRjaF9leGVjdXRpb25zJyBpbmNyZWFzZWQgYnkgb25lKS4KCh8KRmlsZTogZ2NjaW50LmluZm8sICBOb2RlOiBEZXBlbmRlbmN5IGFuYWx5c2lzLCAgTmV4dDogTGFtYmRhLCAgUHJldjogTnVtYmVyIG9mIGl0ZXJhdGlvbnMsICBVcDogTG9vcCBBbmFseXNpcyBhbmQgUmVwcmVzZW50YXRpb24KCjExLjggRGF0YSBEZXBlbmRlbmN5IEFuYWx5c2lzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpUaGUgY29kZSBmb3IgdGhlIGRhdGEgZGVwZW5kZW5jZSBhbmFseXNpcyBjYW4gYmUgZm91bmQgaW4KJ3RyZWUtZGF0YS1yZWYuYycgYW5kIGl0cyBpbnRlcmZhY2UgYW5kIGRhdGEgc3RydWN0dXJlcyBhcmUgZGVzY3JpYmVkIGluCid0cmVlLWRhdGEtcmVmLmgnLiAgVGhlIGZ1bmN0aW9uIHRoYXQgY29tcHV0ZXMgdGhlIGRhdGEgZGVwZW5kZW5jZXMgZm9yCmFsbCB0aGUgYXJyYXkgYW5kIHBvaW50ZXIgcmVmZXJlbmNlcyBmb3IgYSBnaXZlbiBsb29wIGlzCidjb21wdXRlX2RhdGFfZGVwZW5kZW5jZXNfZm9yX2xvb3AnLiAgVGhpcyBmdW5jdGlvbiBpcyBjdXJyZW50bHkgdXNlZCBieQp0aGUgbGluZWFyIGxvb3AgdHJhbnNmb3JtIGFuZCB0aGUgdmVjdG9yaXphdGlvbiBwYXNzZXMuICBCZWZvcmUgY2FsbGluZwp0aGlzIGZ1bmN0aW9uLCBvbmUgaGFzIHRvIGFsbG9jYXRlIHR3byB2ZWN0b3JzOiBhIGZpcnN0IHZlY3RvciB3aWxsCmNvbnRhaW4gdGhlIHNldCBvZiBkYXRhIHJlZmVyZW5jZXMgdGhhdCBhcmUgY29udGFpbmVkIGluIHRoZSBhbmFseXplZApsb29wIGJvZHksIGFuZCB0aGUgc2Vjb25kIHZlY3RvciB3aWxsIGNvbnRhaW4gdGhlIGRlcGVuZGVuY2UgcmVsYXRpb25zCmJldHdlZW4gdGhlIGRhdGEgcmVmZXJlbmNlcy4gIFRodXMgaWYgdGhlIHZlY3RvciBvZiBkYXRhIHJlZmVyZW5jZXMgaXMKb2Ygc2l6ZSAnbicsIHRoZSB2ZWN0b3IgY29udGFpbmluZyB0aGUgZGVwZW5kZW5jZSByZWxhdGlvbnMgd2lsbCBjb250YWluCiduKm4nIGVsZW1lbnRzLiAgSG93ZXZlciBpZiB0aGUgYW5hbHl6ZWQgbG9vcCBjb250YWlucyBzaWRlIGVmZmVjdHMsCnN1Y2ggYXMgY2FsbHMgdGhhdCBwb3RlbnRpYWxseSBjYW4gaW50ZXJmZXJlIHdpdGggdGhlIGRhdGEgcmVmZXJlbmNlcyBpbgp0aGUgY3VycmVudCBhbmFseXplZCBsb29wLCB0aGUgYW5hbHlzaXMgc3RvcHMgd2hpbGUgc2Nhbm5pbmcgdGhlIGxvb3AKYm9keSBmb3IgZGF0YSByZWZlcmVuY2VzLCBhbmQgaW5zZXJ0cyBhIHNpbmdsZSAnY2hyZWNfZG9udF9rbm93JyBpbiB0aGUKZGVwZW5kZW5jZSByZWxhdGlvbiBhcnJheS4KCiBUaGUgZGF0YSByZWZlcmVuY2VzIGFyZSBkaXNjb3ZlcmVkIGluIGEgcGFydGljdWxhciBvcmRlciBkdXJpbmcgdGhlCnNjYW5uaW5nIG9mIHRoZSBsb29wIGJvZHk6IHRoZSBsb29wIGJvZHkgaXMgYW5hbHl6ZWQgaW4gZXhlY3V0aW9uIG9yZGVyLAphbmQgdGhlIGRhdGEgcmVmZXJlbmNlcyBvZiBlYWNoIHN0YXRlbWVudCBhcmUgcHVzaGVkIGF0IHRoZSBlbmQgb2YgdGhlCmRhdGEgcmVmZXJlbmNlIGFycmF5LiAgVHdvIGRhdGEgcmVmZXJlbmNlcyBzeW50YWN0aWNhbGx5IG9jY3VyIGluIHRoZQpwcm9ncmFtIGluIHRoZSBzYW1lIG9yZGVyIGFzIGluIHRoZSBhcnJheSBvZiBkYXRhIHJlZmVyZW5jZXMuICBUaGlzCnN5bnRhY3RpYyBvcmRlciBpcyBpbXBvcnRhbnQgaW4gc29tZSBjbGFzc2ljYWwgZGF0YSBkZXBlbmRlbmNlIHRlc3RzLAphbmQgbWFwcGluZyB0aGlzIG9yZGVyIHRvIHRoZSBlbGVtZW50cyBvZiB0aGlzIGFycmF5IGF2b2lkcyBjb3N0bHkKcXVlcmllcyB0byB0aGUgbG9vcCBib2R5IHJlcHJlc2VudGF0aW9uLgoKIFRocmVlIHR5cGVzIG9mIGRhdGEgcmVmZXJlbmNlcyBhcmUgY3VycmVudGx5IGhhbmRsZWQ6IEFSUkFZX1JFRiwKSU5ESVJFQ1RfUkVGIGFuZCBDT01QT05FTlRfUkVGLiAgVGhlIGRhdGEgc3RydWN0dXJlIGZvciB0aGUgZGF0YQpyZWZlcmVuY2UgaXMgJ2RhdGFfcmVmZXJlbmNlJywgd2hlcmUgJ2RhdGFfcmVmZXJlbmNlX3AnIGlzIGEgbmFtZSBvZiBhCnBvaW50ZXIgdG8gdGhlIGRhdGEgcmVmZXJlbmNlIHN0cnVjdHVyZS4gIFRoZSBzdHJ1Y3R1cmUgY29udGFpbnMgdGhlCmZvbGxvd2luZyBlbGVtZW50czoKCiAgICogJ2Jhc2Vfb2JqZWN0X2luZm8nOiBQcm92aWRlcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYmFzZSBvYmplY3Qgb2YKICAgICB0aGUgZGF0YSByZWZlcmVuY2UgYW5kIGl0cyBhY2Nlc3MgZnVuY3Rpb25zLiAgVGhlc2UgYWNjZXNzCiAgICAgZnVuY3Rpb25zIHJlcHJlc2VudCB0aGUgZXZvbHV0aW9uIG9mIHRoZSBkYXRhIHJlZmVyZW5jZSBpbiB0aGUgbG9vcAogICAgIHJlbGF0aXZlIHRvIGl0cyBiYXNlLCBpbiBrZWVwaW5nIHdpdGggdGhlIGNsYXNzaWNhbCBtZWFuaW5nIG9mIHRoZQogICAgIGRhdGEgcmVmZXJlbmNlIGFjY2VzcyBmdW5jdGlvbiBmb3IgdGhlIHN1cHBvcnQgb2YgYXJyYXlzLiAgRm9yCiAgICAgZXhhbXBsZSwgZm9yIGEgcmVmZXJlbmNlICdhLmJbaV1bal0nLCB0aGUgYmFzZSBvYmplY3QgaXMgJ2EuYicgYW5kCiAgICAgdGhlIGFjY2VzcyBmdW5jdGlvbnMsIG9uZSBmb3IgZWFjaCBhcnJheSBzdWJzY3JpcHQsIGFyZTogJ3tpX2luaXQsCiAgICAgKyBpX3N0ZXB9XzEsIHtqX2luaXQsICssIGpfc3RlcH1fMicuCgogICAqICdmaXJzdF9sb2NhdGlvbl9pbl9sb29wJzogUHJvdmlkZXMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGZpcnN0CiAgICAgbG9jYXRpb24gYWNjZXNzZWQgYnkgdGhlIGRhdGEgcmVmZXJlbmNlIGluIHRoZSBsb29wIGFuZCBhYm91dCB0aGUKICAgICBhY2Nlc3MgZnVuY3Rpb24gdXNlZCB0byByZXByZXNlbnQgZXZvbHV0aW9uIHJlbGF0aXZlIHRvIHRoaXMKICAgICBsb2NhdGlvbi4gIFRoaXMgZGF0YSBpcyB1c2VkIHRvIHN1cHBvcnQgcG9pbnRlcnMsIGFuZCBpcyBub3QgdXNlZAogICAgIGZvciBhcnJheXMgKGZvciB3aGljaCB3ZSBoYXZlIGJhc2Ugb2JqZWN0cykuICBQb2ludGVyIGFjY2Vzc2VzIGFyZQogICAgIHJlcHJlc2VudGVkIGFzIGEgb25lLWRpbWVuc2lvbmFsIGFjY2VzcyB0aGF0IHN0YXJ0cyBmcm9tIHRoZSBmaXJzdAogICAgIGxvY2F0aW9uIGFjY2Vzc2VkIGluIHRoZSBsb29wLiAgRm9yIGV4YW1wbGU6CgogICAgICAgICAgICAgICAgZm9yMSBpCiAgICAgICAgICAgICAgICAgICBmb3IyIGoKICAgICAgICAgICAgICAgICAgICAqKChpbnQgKilwICsgaSArIGopID0gYVtpXVtqXTsKCiAgICAgVGhlIGFjY2VzcyBmdW5jdGlvbiBvZiB0aGUgcG9pbnRlciBhY2Nlc3MgaXMgJ3swLCArIDRCfV9mb3IyJwogICAgIHJlbGF0aXZlIHRvICdwICsgaScuICBUaGUgYWNjZXNzIGZ1bmN0aW9ucyBvZiB0aGUgYXJyYXkgYXJlCiAgICAgJ3tpX2luaXQsICsgaV9zdGVwfV9mb3IxJyBhbmQgJ3tqX2luaXQsICssIGpfc3RlcH1fZm9yMicgcmVsYXRpdmUKICAgICB0byAnYScuCgogICAgIFVzdWFsbHksIHRoZSBvYmplY3QgdGhlIHBvaW50ZXIgcmVmZXJzIHRvIGlzIGVpdGhlciB1bmtub3duLCBvciB3ZQogICAgIGNhbid0IHByb3ZlIHRoYXQgdGhlIGFjY2VzcyBpcyBjb25maW5lZCB0byB0aGUgYm91bmRhcmllcyBvZiBhCiAgICAgY2VydGFpbiBvYmplY3QuCgogICAgIFR3byBkYXRhIHJlZmVyZW5jZXMgY2FuIGJlIGNvbXBhcmVkIG9ubHkgaWYgYXQgbGVhc3Qgb25lIG9mIHRoZXNlCiAgICAgdHdvIHJlcHJlc2VudGF0aW9ucyBoYXMgYWxsIGl0cyBmaWVsZHMgZmlsbGVkIGZvciBib3RoIGRhdGEKICAgICByZWZlcmVuY2VzLgoKICAgICBUaGUgY3VycmVudCBzdHJhdGVneSBmb3IgZGF0YSBkZXBlbmRlbmNlIHRlc3RzIGlzIGFzIGZvbGxvd3M6IElmCiAgICAgYm90aCAnYScgYW5kICdiJyBhcmUgcmVwcmVzZW50ZWQgYXMgYXJyYXlzLCBjb21wYXJlICdhLmJhc2Vfb2JqZWN0JwogICAgIGFuZCAnYi5iYXNlX29iamVjdCc7IGlmIHRoZXkgYXJlIGVxdWFsLCBhcHBseSBkZXBlbmRlbmNlIHRlc3RzICh1c2UKICAgICBhY2Nlc3MgZnVuY3Rpb25zIGJhc2VkIG9uIGJhc2Vfb2JqZWN0cykuICBFbHNlIGlmIGJvdGggJ2EnIGFuZCAnYicKICAgICBhcmUgcmVwcmVzZW50ZWQgYXMgcG9pbnRlcnMsIGNvbXBhcmUgJ2EuZmlyc3RfbG9jYXRpb24nIGFuZAogICAgICdiLmZpcnN0X2xvY2F0aW9uJzsgaWYgdGhleSBhcmUgZXF1YWwsIGFwcGx5IGRlcGVuZGVuY2UgdGVzdHMgKHVzZQogICAgIGFjY2VzcyBmdW5jdGlvbnMgYmFzZWQgb24gZmlyc3QgbG9jYXRpb24pLiAgSG93ZXZlciwgaWYgJ2EnIGFuZCAnYicKICAgICBhcmUgcmVwcmVzZW50ZWQgZGlmZmVyZW50bHksIG9ubHkgdHJ5IHRvIHByb3ZlIHRoYXQgdGhlIGJhc2VzIGFyZQogICAgIGRlZmluaXRlbHkgZGlmZmVyZW50LgoKICAgKiBBbGlhc2luZyBpbmZvcm1hdGlvbi4KICAgKiBBbGlnbm1lbnQgaW5mb3JtYXRpb24uCgogVGhlIHN0cnVjdHVyZSBkZXNjcmliaW5nIHRoZSByZWxhdGlvbiBiZXR3ZWVuIHR3byBkYXRhIHJlZmVyZW5jZXMgaXMKJ2RhdGFfZGVwZW5kZW5jZV9yZWxhdGlvbicgYW5kIHRoZSBzaG9ydGVyIG5hbWUgZm9yIGEgcG9pbnRlciB0byBzdWNoIGEKc3RydWN0dXJlIGlzICdkZHJfcCcuICBUaGlzIHN0cnVjdHVyZSBjb250YWluczoKCiAgICogYSBwb2ludGVyIHRvIGVhY2ggZGF0YSByZWZlcmVuY2UsCiAgICogYSB0cmVlIG5vZGUgJ2FyZV9kZXBlbmRlbnQnIHRoYXQgaXMgc2V0IHRvICdjaHJlY19rbm93bicgaWYgdGhlCiAgICAgYW5hbHlzaXMgaGFzIHByb3ZlZCB0aGF0IHRoZXJlIGlzIG5vIGRlcGVuZGVuY2UgYmV0d2VlbiB0aGVzZSB0d28KICAgICBkYXRhIHJlZmVyZW5jZXMsICdjaHJlY19kb250X2tub3cnIGlmIHRoZSBhbmFseXNpcyB3YXMgbm90IGFibGUgdG8KICAgICBkZXRlcm1pbmUgYW55IHVzZWZ1bCByZXN1bHQgYW5kIHBvdGVudGlhbGx5IHRoZXJlIGNvdWxkIGV4aXN0IGEKICAgICBkZXBlbmRlbmNlIGJldHdlZW4gdGhlc2UgZGF0YSByZWZlcmVuY2VzLCBhbmQgJ2FyZV9kZXBlbmRlbnQnIGlzCiAgICAgc2V0IHRvICdOVUxMX1RSRUUnIGlmIHRoZXJlIGV4aXN0IGEgZGVwZW5kZW5jZSByZWxhdGlvbiBiZXR3ZWVuIHRoZQogICAgIGRhdGEgcmVmZXJlbmNlcywgYW5kIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGlzIGRlcGVuZGVuY2UgcmVsYXRpb24gaXMKICAgICBnaXZlbiBpbiB0aGUgJ3N1YnNjcmlwdHMnLCAnZGlyX3ZlY3RzJywgYW5kICdkaXN0X3ZlY3RzJyBhcnJheXMsCiAgICogYSBib29sZWFuIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBkZXBlbmRlbmNlIHJlbGF0aW9uIGNhbiBiZQogICAgIHJlcHJlc2VudGVkIGJ5IGEgY2xhc3NpY2FsIGRpc3RhbmNlIHZlY3RvciwKICAgKiBhbiBhcnJheSAnc3Vic2NyaXB0cycgdGhhdCBjb250YWlucyBhIGRlc2NyaXB0aW9uIG9mIGVhY2ggc3Vic2NyaXB0CiAgICAgb2YgdGhlIGRhdGEgcmVmZXJlbmNlcy4gIEdpdmVuIHR3byBhcnJheSBhY2Nlc3NlcyBhIHN1YnNjcmlwdCBpcwogICAgIHRoZSB0dXBsZSBjb21wb3NlZCBvZiB0aGUgYWNjZXNzIGZ1bmN0aW9ucyBmb3IgYSBnaXZlbiBkaW1lbnNpb24uCiAgICAgRm9yIGV4YW1wbGUsIGdpdmVuICdBW2YxXVtmMl1bZjNdJyBhbmQgJ0JbZzFdW2cyXVtnM10nLCB0aGVyZSBhcmUKICAgICB0aHJlZSBzdWJzY3JpcHRzOiAnKGYxLCBnMSksIChmMiwgZzIpLCAoZjMsIGczKScuCiAgICogdHdvIGFycmF5cyAnZGlyX3ZlY3RzJyBhbmQgJ2Rpc3RfdmVjdHMnIHRoYXQgY29udGFpbiBjbGFzc2ljYWwKICAgICByZXByZXNlbnRhdGlvbnMgb2YgdGhlIGRhdGEgZGVwZW5kZW5jZXMgdW5kZXIgdGhlIGZvcm0gb2YgZGlyZWN0aW9uCiAgICAgYW5kIGRpc3RhbmNlIGRlcGVuZGVuY2UgdmVjdG9ycywKICAgKiBhbiBhcnJheSBvZiBsb29wcyAnbG9vcF9uZXN0JyB0aGF0IGNvbnRhaW5zIHRoZSBsb29wcyB0byB3aGljaCB0aGUKICAgICBkaXN0YW5jZSBhbmQgZGlyZWN0aW9uIHZlY3RvcnMgcmVmZXIgdG8uCgogU2V2ZXJhbCBmdW5jdGlvbnMgZm9yIHByZXR0eSBwcmludGluZyB0aGUgaW5mb3JtYXRpb24gZXh0cmFjdGVkIGJ5IHRoZQpkYXRhIGRlcGVuZGVuY2UgYW5hbHlzaXMgYXJlIGF2YWlsYWJsZTogJ2R1bXBfZGRycycgcHJpbnRzIHdpdGggYQptYXhpbXVtIHZlcmJvc2l0eSB0aGUgZGV0YWlscyBvZiBhIGRhdGEgZGVwZW5kZW5jZSByZWxhdGlvbnMgYXJyYXksCidkdW1wX2Rpc3RfZGlyX3ZlY3RvcnMnIHByaW50cyBvbmx5IHRoZSBjbGFzc2ljYWwgZGlzdGFuY2UgYW5kIGRpcmVjdGlvbgp2ZWN0b3JzIGZvciBhIGRhdGEgZGVwZW5kZW5jZSByZWxhdGlvbnMgYXJyYXksIGFuZAonZHVtcF9kYXRhX3JlZmVyZW5jZXMnIHByaW50cyB0aGUgZGV0YWlscyBvZiB0aGUgZGF0YSByZWZlcmVuY2VzCmNvbnRhaW5lZCBpbiBhIGRhdGEgcmVmZXJlbmNlIGFycmF5LgoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IExhbWJkYSwgIE5leHQ6IE9tZWdhLCAgUHJldjogRGVwZW5kZW5jeSBhbmFseXNpcywgIFVwOiBMb29wIEFuYWx5c2lzIGFuZCBSZXByZXNlbnRhdGlvbgoKMTEuOSBMaW5lYXIgbG9vcCB0cmFuc2Zvcm1hdGlvbnMgZnJhbWV3b3JrCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKTGFtYmRhIGlzIGEgZnJhbWV3b3JrIHRoYXQgYWxsb3dzIHRyYW5zZm9ybWF0aW9ucyBvZiBsb29wcyB1c2luZwpub24tc2luZ3VsYXIgbWF0cml4IGJhc2VkIHRyYW5zZm9ybWF0aW9ucyBvZiB0aGUgaXRlcmF0aW9uIHNwYWNlIGFuZApsb29wIGJvdW5kcy4gIFRoaXMgYWxsb3dzIGNvbXBvc2l0aW9ucyBvZiBza2V3aW5nLCBzY2FsaW5nLCBpbnRlcmNoYW5nZSwKYW5kIHJldmVyc2FsIHRyYW5zZm9ybWF0aW9ucy4gIFRoZXNlIHRyYW5zZm9ybWF0aW9ucyBhcmUgb2Z0ZW4gdXNlZCB0bwppbXByb3ZlIGNhY2hlIGJlaGF2aW9yIG9yIHJlbW92ZSBpbm5lciBsb29wIGRlcGVuZGVuY2llcyB0byBhbGxvdwpwYXJhbGxlbGl6YXRpb24gYW5kIHZlY3Rvcml6YXRpb24gdG8gdGFrZSBwbGFjZS4KCiBUbyBwZXJmb3JtIHRoZXNlIHRyYW5zZm9ybWF0aW9ucywgTGFtYmRhIHJlcXVpcmVzIHRoYXQgdGhlIGxvb3BuZXN0IGJlCmNvbnZlcnRlZCBpbnRvIGEgaW50ZXJuYWwgZm9ybSB0aGF0IGNhbiBiZSBtYXRyaXggdHJhbnNmb3JtZWQgZWFzaWx5LgpUbyBkbyB0aGlzIGNvbnZlcnNpb24sIHRoZSBmdW5jdGlvbiAnZ2NjX2xvb3BuZXN0X3RvX2xhbWJkYV9sb29wbmVzdCcgaXMKcHJvdmlkZWQuICBJZiB0aGUgbG9vcCBjYW5ub3QgYmUgdHJhbnNmb3JtZWQgdXNpbmcgbGFtYmRhLCB0aGlzIGZ1bmN0aW9uCndpbGwgcmV0dXJuIE5VTEwuCgogT25jZSBhICdsYW1iZGFfbG9vcG5lc3QnIGlzIG9idGFpbmVkIGZyb20gdGhlIGNvbnZlcnNpb24gZnVuY3Rpb24sIGl0CmNhbiBiZSB0cmFuc2Zvcm1lZCBieSB1c2luZyAnbGFtYmRhX2xvb3BuZXN0X3RyYW5zZm9ybScsIHdoaWNoIHRha2VzIGEKdHJhbnNmb3JtYXRpb24gbWF0cml4IHRvIGFwcGx5LiAgTm90ZSB0aGF0IGl0IGlzIHVwIHRvIHRoZSBjYWxsZXIgdG8KdmVyaWZ5IHRoYXQgdGhlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCBpcyBsZWdhbCB0byBhcHBseSB0byB0aGUgbG9vcAooZGVwZW5kZW5jZSByZXNwZWN0aW5nLCBldGMpLiAgTGFtYmRhIHNpbXBseSBhcHBsaWVzIHdoYXRldmVyIG1hdHJpeCBpdAppcyB0b2xkIHRvIHByb3ZpZGUuICBJdCBjYW4gYmUgZXh0ZW5kZWQgdG8gbWFrZSBsZWdhbCBtYXRyaWNlcyBvdXQgb2YKYW55IG5vbi1zaW5ndWxhciBtYXRyaXgsIGJ1dCB0aGlzIGlzIG5vdCBjdXJyZW50bHkgaW1wbGVtZW50ZWQuCkxlZ2FsaXR5IG9mIGEgbWF0cml4IGZvciBhIGdpdmVuIGxvb3BuZXN0IGNhbiBiZSB2ZXJpZmllZCB1c2luZwonbGFtYmRhX3RyYW5zZm9ybV9sZWdhbF9wJy4KCiBHaXZlbiBhIHRyYW5zZm9ybWVkIGxvb3BuZXN0LCBjb252ZXJzaW9uIGJhY2sgaW50byBnY2MgSVIgaXMgZG9uZSBieQonbGFtYmRhX2xvb3BuZXN0X3RvX2djY19sb29wbmVzdCcuICBUaGlzIGZ1bmN0aW9uIHdpbGwgbW9kaWZ5IHRoZSBsb29wcwpzbyB0aGF0IHRoZXkgbWF0Y2ggdGhlIHRyYW5zZm9ybWVkIGxvb3BuZXN0LgoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IE9tZWdhLCAgUHJldjogTGFtYmRhLCAgVXA6IExvb3AgQW5hbHlzaXMgYW5kIFJlcHJlc2VudGF0aW9uCgoxMS4xMCBPbWVnYSBhIHNvbHZlciBmb3IgbGluZWFyIHByb2dyYW1taW5nIHByb2JsZW1zCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KClRoZSBkYXRhIGRlcGVuZGVuY2UgYW5hbHlzaXMgY29udGFpbnMgc2V2ZXJhbCBzb2x2ZXJzIHRyaWdnZXJlZApzZXF1ZW50aWFsbHkgZnJvbSB0aGUgbGVzcyBjb21wbGV4IG9uZXMgdG8gdGhlIG1vcmUgc29waGlzdGljYXRlZC4gIEZvcgplbnN1cmluZyB0aGUgY29uc2lzdGVuY3kgb2YgdGhlIHJlc3VsdHMgb2YgdGhlc2Ugc29sdmVycywgYSBkYXRhCmRlcGVuZGVuY2UgY2hlY2sgcGFzcyBoYXMgYmVlbiBpbXBsZW1lbnRlZCBiYXNlZCBvbiB0d28gZGlmZmVyZW50CnNvbHZlcnMuICBUaGUgc2Vjb25kIG1ldGhvZCB0aGF0IGhhcyBiZWVuIGludGVncmF0ZWQgdG8gR0NDIGlzIGJhc2VkIG9uCnRoZSBPbWVnYSBkZXBlbmRlbmNlIHNvbHZlciwgd3JpdHRlbiBpbiB0aGUgMTk5MCdzIGJ5IFdpbGxpYW0gUHVnaCBhbmQKRGF2aWQgV29ubmFjb3R0LiAgRGF0YSBkZXBlbmRlbmNlIHRlc3RzIGNhbiBiZSBmb3JtdWxhdGVkIHVzaW5nIGEgc3Vic2V0Cm9mIHRoZSBQcmVzYnVyZ2VyIGFyaXRobWV0aWNzIHRoYXQgY2FuIGJlIHRyYW5zbGF0ZWQgdG8gbGluZWFyCmNvbnN0cmFpbnQgc3lzdGVtcy4gIFRoZXNlIGxpbmVhciBjb25zdHJhaW50IHN5c3RlbXMgY2FuIHRoZW4gYmUgc29sdmVkCnVzaW5nIHRoZSBPbWVnYSBzb2x2ZXIuCgogVGhlIE9tZWdhIHNvbHZlciBpcyB1c2luZyBGb3VyaWVyLU1vdHpraW4ncyBhbGdvcml0aG0gZm9yIHZhcmlhYmxlCmVsaW1pbmF0aW9uOiBhIGxpbmVhciBjb25zdHJhaW50IHN5c3RlbSBjb250YWluaW5nICduJyB2YXJpYWJsZXMgaXMKcmVkdWNlZCB0byBhIGxpbmVhciBjb25zdHJhaW50IHN5c3RlbSB3aXRoICduLTEnIHZhcmlhYmxlcy4gIFRoZSBPbWVnYQpzb2x2ZXIgY2FuIGFsc28gYmUgdXNlZCBmb3Igc29sdmluZyBvdGhlciBwcm9ibGVtcyB0aGF0IGNhbiBiZSBleHByZXNzZWQKdW5kZXIgdGhlIGZvcm0gb2YgYSBzeXN0ZW0gb2YgbGluZWFyIGVxdWFsaXRpZXMgYW5kIGluZXF1YWxpdGllcy4gIFRoZQpPbWVnYSBzb2x2ZXIgaXMga25vd24gdG8gaGF2ZSBhbiBleHBvbmVudGlhbCB3b3JzdCBjYXNlLCBhbHNvIGtub3duCnVuZGVyIHRoZSBuYW1lIG9mICJvbWVnYSBuaWdodG1hcmUiIGluIHRoZSBsaXRlcmF0dXJlLCBidXQgaW4gcHJhY3RpY2UsCnRoZSBvbWVnYSB0ZXN0IGlzIGtub3duIHRvIGJlIGVmZmljaWVudCBmb3IgdGhlIGNvbW1vbiBkYXRhIGRlcGVuZGVuY2UKdGVzdHMuCgogVGhlIGludGVyZmFjZSB1c2VkIGJ5IHRoZSBPbWVnYSBzb2x2ZXIgZm9yIGRlc2NyaWJpbmcgdGhlIGxpbmVhcgpwcm9ncmFtbWluZyBwcm9ibGVtcyBpcyBkZXNjcmliZWQgaW4gJ29tZWdhLmgnLCBhbmQgdGhlIHNvbHZlciBpcwonb21lZ2Ffc29sdmVfcHJvYmxlbScuCgofCkZpbGU6IGdjY2ludC5pbmZvLCAgTm9kZTogUlRMLCAgTmV4dDogQ29udHJvbCBGbG93LCAgUHJldjogTG9vcCBBbmFseXNpcyBhbmQgUmVwcmVzZW50YXRpb24sICBVcDogVG9wCgoxMiBSVEwgUmVwcmVzZW50YXRpb24KKioqKioqKioqKioqKioqKioqKioqCgpNb3N0IG9mIHRoZSB3b3JrIG9mIHRoZSBjb21waWxlciBpcyBkb25lIG9uIGFuIGludGVybWVkaWF0ZQpyZXByZXNlbnRhdGlvbiBjYWxsZWQgcmVnaXN0ZXIgdHJhbnNmZXIgbGFuZ3VhZ2UuICBJbiB0aGlzIGxhbmd1YWdlLCB0aGUKaW5zdHJ1Y3Rpb25zIHRvIGJlIG91dHB1dCBhcmUgZGVzY3JpYmVkLCBwcmV0dHkgbXVjaCBvbmUgYnkgb25lLCBpbiBhbgphbGdlYnJhaWMgZm9ybSB0aGF0IGRlc2NyaWJlcyB3aGF0IHRoZSBpbnN0cnVjdGlvbiBkb2VzLgoKIFJUTCBpcyBpbnNwaXJlZCBieSBMaXNwIGxpc3RzLiAgSXQgaGFzIGJvdGggYW4gaW50ZXJuYWwgZm9ybSwgbWFkZSB1cApvZiBzdHJ1Y3R1cmVzIHRoYXQgcG9pbnQgYXQgb3RoZXIgc3RydWN0dXJlcywgYW5kIGEgdGV4dHVhbCBmb3JtIHRoYXQgaXMKdXNlZCBpbiB0aGUgbWFjaGluZSBkZXNjcmlwdGlvbiBhbmQgaW4gcHJpbnRlZCBkZWJ1Z2dpbmcgZHVtcHMuICBUaGUKdGV4dHVhbCBmb3JtIHVzZXMgbmVzdGVkIHBhcmVudGhlc2VzIHRvIGluZGljYXRlIHRoZSBwb2ludGVycyBpbiB0aGUKaW50ZXJuYWwgZm9ybS4KCiogTWVudToKCiogUlRMIE9iamVjdHM6OiAgICAgICBFeHByZXNzaW9ucyB2cyB2ZWN0b3JzIHZzIHN0cmluZ3MgdnMgaW50ZWdlcnMuCiogUlRMIENsYXNzZXM6OiAgICAgICBDYXRlZ29yaWVzIG9mIFJUTCBleHByZXNzaW9uIG9iamVjdHMsIGFuZCB0aGVpciBzdHJ1Y3R1cmUuCiogQWNjZXNzb3JzOjogICAgICAgICBNYWNyb3MgdG8gYWNjZXNzIGV4cHJlc3Npb24gb3BlcmFuZHMgb3IgdmVjdG9yIGVsdHMuCiogU3BlY2lhbCBBY2Nlc3NvcnM6OiBNYWNyb3MgdG8gYWNjZXNzIHNwZWNpZmljIGFubm90YXRpb25zIG9uIFJUTC4KKiBGbGFnczo6ICAgICAgICAgICAgIE90aGVyIGZsYWdzIGluIGFuIFJUTCBleHByZXNzaW9uLgoqIE1hY2hpbmUgTW9kZXM6OiAgICAgRGVzY3JpYmluZyB0aGUgc2l6ZSBhbmQgZm9ybWF0IG9mIGEgZGF0dW0uCiogQ29uc3RhbnRzOjogICAgICAgICBFeHByZXNzaW9ucyB3aXRoIGNvbnN0YW50IHZhbHVlcy4KKiBSZWdzIGFuZCBNZW1vcnk6OiAgIEV4cHJlc3Npb25zIHJlcHJlc2VudGluZyByZWdpc3RlciBjb250ZW50cyBvciBtZW1vcnkuCiogQXJpdGhtZXRpYzo6ICAgICAgICBFeHByZXNzaW9ucyByZXByZXNlbnRpbmcgYXJpdGhtZXRpYyBvbiBvdGhlciBleHByZXNzaW9ucy4KKiBDb21wYXJpc29uczo6ICAgICAgIEV4cHJlc3Npb25zIHJlcHJlc2VudGluZyBjb21wYXJpc29uIG9mIGV4cHJlc3Npb25zLgoqIEJpdC1GaWVsZHM6OiAgICAgICAgRXhwcmVzc2lvbnMgcmVwcmVzZW50aW5nIGJpdC1maWVsZHMgaW4gbWVtb3J5IG9yIHJlZy4KKiBWZWN0b3IgT3BlcmF0aW9uczo6IEV4cHJlc3Npb25zIGludm9sdmluZyB2ZWN0b3IgZGF0YXR5cGVzLgoqIENvbnZlcnNpb25zOjogICAgICAgRXh0ZW5kaW5nLCB0cnVuY2F0aW5nLCBmbG9hdGluZyBvciBmaXhpbmcuCiogUlRMIERlY2xhcmF0aW9uczo6ICBEZWNsYXJpbmcgdm9sYXRpbGl0eSwgY29uc3RhbmN5LCBldGMuCiogU2lkZSBFZmZlY3RzOjogICAgICBFeHByZXNzaW9ucyBmb3Igc3RvcmluZyBpbiByZWdpc3RlcnMsIGV0Yy4KKiBJbmNkZWM6OiAgICAgICAgICAgIEVtYmVkZGVkIHNpZGUtZWZmZWN0cyBmb3IgYXV0b2luY3JlbWVudCBhZGRyZXNzaW5nLgoqIEFzc2VtYmxlcjo6ICAgICAgICAgUmVwcmVzZW50aW5nICdhc20nIHdpdGggb3BlcmFuZHMuCiogSW5zbnM6OiAgICAgICAgICAgICBFeHByZXNzaW9uIHR5cGVzIGZvciBlbnRpcmUgaW5zbnMuCiogQ2FsbHM6OiAgICAgICAgICAgICBSVEwgcmVwcmVzZW50YXRpb24gb2YgZnVuY3Rpb24gY2FsbCBpbnNucy4KKiBTaGFyaW5nOjogICAgICAgICAgIFNvbWUgZXhwcmVzc2lvbnMgYXJlIHVuaXF1ZTsgb3RoZXJzICptdXN0KiBiZSBjb3BpZWQuCiogUmVhZGluZyBSVEw6OiAgICAgICBSZWFkaW5nIHRleHR1YWwgUlRMIGZyb20gYSBmaWxlLgoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IFJUTCBPYmplY3RzLCAgTmV4dDogUlRMIENsYXNzZXMsICBVcDogUlRMCgoxMi4xIFJUTCBPYmplY3QgVHlwZXMKPT09PT09PT09PT09PT09PT09PT09CgpSVEwgdXNlcyBmaXZlIGtpbmRzIG9mIG9iamVjdHM6IGV4cHJlc3Npb25zLCBpbnRlZ2Vycywgd2lkZSBpbnRlZ2VycywKc3RyaW5ncyBhbmQgdmVjdG9ycy4gIEV4cHJlc3Npb25zIGFyZSB0aGUgbW9zdCBpbXBvcnRhbnQgb25lcy4gIEFuIFJUTApleHByZXNzaW9uICgiUlRYIiwgZm9yIHNob3J0KSBpcyBhIEMgc3RydWN0dXJlLCBidXQgaXQgaXMgdXN1YWxseQpyZWZlcnJlZCB0byB3aXRoIGEgcG9pbnRlcjsgYSB0eXBlIHRoYXQgaXMgZ2l2ZW4gdGhlIHR5cGVkZWYgbmFtZSAncnR4Jy4KCiBBbiBpbnRlZ2VyIGlzIHNpbXBseSBhbiAnaW50JzsgdGhlaXIgd3JpdHRlbiBmb3JtIHVzZXMgZGVjaW1hbCBkaWdpdHMuCkEgd2lkZSBpbnRlZ2VyIGlzIGFuIGludGVncmFsIG9iamVjdCB3aG9zZSB0eXBlIGlzICdIT1NUX1dJREVfSU5UJzsKdGhlaXIgd3JpdHRlbiBmb3JtIHVzZXMgZGVjaW1hbCBkaWdpdHMuCgogQSBzdHJpbmcgaXMgYSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzLiAgSW4gY29yZSBpdCBpcyByZXByZXNlbnRlZCBhcyBhCidjaGFyIConIGluIHVzdWFsIEMgZmFzaGlvbiwgYW5kIGl0IGlzIHdyaXR0ZW4gaW4gQyBzeW50YXggYXMgd2VsbC4KSG93ZXZlciwgc3RyaW5ncyBpbiBSVEwgbWF5IG5ldmVyIGJlIG51bGwuICBJZiB5b3Ugd3JpdGUgYW4gZW1wdHkgc3RyaW5nCmluIGEgbWFjaGluZSBkZXNjcmlwdGlvbiwgaXQgaXMgcmVwcmVzZW50ZWQgaW4gY29yZSBhcyBhIG51bGwgcG9pbnRlcgpyYXRoZXIgdGhhbiBhcyBhIHBvaW50ZXIgdG8gYSBudWxsIGNoYXJhY3Rlci4gIEluIGNlcnRhaW4gY29udGV4dHMsCnRoZXNlIG51bGwgcG9pbnRlcnMgaW5zdGVhZCBvZiBzdHJpbmdzIGFyZSB2YWxpZC4gIFdpdGhpbiBSVEwgY29kZSwKc3RyaW5ncyBhcmUgbW9zdCBjb21tb25seSBmb3VuZCBpbnNpZGUgJ3N5bWJvbF9yZWYnIGV4cHJlc3Npb25zLCBidXQKdGhleSBhcHBlYXIgaW4gb3RoZXIgY29udGV4dHMgaW4gdGhlIFJUTCBleHByZXNzaW9ucyB0aGF0IG1ha2UgdXAKbWFjaGluZSBkZXNjcmlwdGlvbnMuCgogSW4gYSBtYWNoaW5lIGRlc2NyaXB0aW9uLCBzdHJpbmdzIGFyZSBub3JtYWxseSB3cml0dGVuIHdpdGggZG91YmxlCnF1b3RlcywgYXMgeW91IHdvdWxkIGluIEMuICBIb3dldmVyLCBzdHJpbmdzIGluIG1hY2hpbmUgZGVzY3JpcHRpb25zIG1heQpleHRlbmQgb3ZlciBtYW55IGxpbmVzLCB3aGljaCBpcyBpbnZhbGlkIEMsIGFuZCBhZGphY2VudCBzdHJpbmcKY29uc3RhbnRzIGFyZSBub3QgY29uY2F0ZW5hdGVkIGFzIHRoZXkgYXJlIGluIEMuICBBbnkgc3RyaW5nIGNvbnN0YW50Cm1heSBiZSBzdXJyb3VuZGVkIHdpdGggYSBzaW5nbGUgc2V0IG9mIHBhcmVudGhlc2VzLiAgU29tZXRpbWVzIHRoaXMKbWFrZXMgdGhlIG1hY2hpbmUgZGVzY3JpcHRpb24gZWFzaWVyIHRvIHJlYWQuCgogVGhlcmUgaXMgYWxzbyBhIHNwZWNpYWwgc3ludGF4IGZvciBzdHJpbmdzLCB3aGljaCBjYW4gYmUgdXNlZnVsIHdoZW4gQwpjb2RlIGlzIGVtYmVkZGVkIGluIGEgbWFjaGluZSBkZXNjcmlwdGlvbi4gIFdoZXJldmVyIGEgc3RyaW5nIGNhbgphcHBlYXIsIGl0IGlzIGFsc28gdmFsaWQgdG8gd3JpdGUgYSBDLXN0eWxlIGJyYWNlIGJsb2NrLiAgVGhlIGVudGlyZQpicmFjZSBibG9jaywgaW5jbHVkaW5nIHRoZSBvdXRlcm1vc3QgcGFpciBvZiBicmFjZXMsIGlzIGNvbnNpZGVyZWQgdG8gYmUKdGhlIHN0cmluZyBjb25zdGFudC4gIERvdWJsZSBxdW90ZSBjaGFyYWN0ZXJzIGluc2lkZSB0aGUgYnJhY2VzIGFyZSBub3QKc3BlY2lhbC4gIFRoZXJlZm9yZSwgaWYgeW91IHdyaXRlIHN0cmluZyBjb25zdGFudHMgaW4gdGhlIEMgY29kZSwgeW91Cm5lZWQgbm90IGVzY2FwZSBlYWNoIHF1b3RlIGNoYXJhY3RlciB3aXRoIGEgYmFja3NsYXNoLgoKIEEgdmVjdG9yIGNvbnRhaW5zIGFuIGFyYml0cmFyeSBudW1iZXIgb2YgcG9pbnRlcnMgdG8gZXhwcmVzc2lvbnMuICBUaGUKbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSB2ZWN0b3IgaXMgZXhwbGljaXRseSBwcmVzZW50IGluIHRoZSB2ZWN0b3IuClRoZSB3cml0dGVuIGZvcm0gb2YgYSB2ZWN0b3IgY29uc2lzdHMgb2Ygc3F1YXJlIGJyYWNrZXRzICgnWy4uLl0nKQpzdXJyb3VuZGluZyB0aGUgZWxlbWVudHMsIGluIHNlcXVlbmNlIGFuZCB3aXRoIHdoaXRlc3BhY2Ugc2VwYXJhdGluZwp0aGVtLiAgVmVjdG9ycyBvZiBsZW5ndGggemVybyBhcmUgbm90IGNyZWF0ZWQ7IG51bGwgcG9pbnRlcnMgYXJlIHVzZWQKaW5zdGVhZC4KCiBFeHByZXNzaW9ucyBhcmUgY2xhc3NpZmllZCBieSAiZXhwcmVzc2lvbiBjb2RlcyIgKGFsc28gY2FsbGVkIFJUWApjb2RlcykuICBUaGUgZXhwcmVzc2lvbiBjb2RlIGlzIGEgbmFtZSBkZWZpbmVkIGluICdydGwuZGVmJywgd2hpY2ggaXMKYWxzbyAoaW4gdXBwZXJjYXNlKSBhIEMgZW51bWVyYXRpb24gY29uc3RhbnQuICBUaGUgcG9zc2libGUgZXhwcmVzc2lvbgpjb2RlcyBhbmQgdGhlaXIgbWVhbmluZ3MgYXJlIG1hY2hpbmUtaW5kZXBlbmRlbnQuICBUaGUgY29kZSBvZiBhbiBSVFgKY2FuIGJlIGV4dHJhY3RlZCB3aXRoIHRoZSBtYWNybyAnR0VUX0NPREUgKFgpJyBhbmQgYWx0ZXJlZCB3aXRoCidQVVRfQ09ERSAoWCwgTkVXQ09ERSknLgoKIFRoZSBleHByZXNzaW9uIGNvZGUgZGV0ZXJtaW5lcyBob3cgbWFueSBvcGVyYW5kcyB0aGUgZXhwcmVzc2lvbgpjb250YWlucywgYW5kIHdoYXQga2luZHMgb2Ygb2JqZWN0cyB0aGV5IGFyZS4gIEluIFJUTCwgdW5saWtlIExpc3AsIHlvdQpjYW5ub3QgdGVsbCBieSBsb29raW5nIGF0IGFuIG9wZXJhbmQgd2hhdCBraW5kIG9mIG9iamVjdCBpdCBpcy4KSW5zdGVhZCwgeW91IG11c3Qga25vdyBmcm9tIGl0cyBjb250ZXh0LS1mcm9tIHRoZSBleHByZXNzaW9uIGNvZGUgb2YgdGhlCmNvbnRhaW5pbmcgZXhwcmVzc2lvbi4gIEZvciBleGFtcGxlLCBpbiBhbiBleHByZXNzaW9uIG9mIGNvZGUgJ3N1YnJlZycsCnRoZSBmaXJzdCBvcGVyYW5kIGlzIHRvIGJlIHJlZ2FyZGVkIGFzIGFuIGV4cHJlc3Npb24gYW5kIHRoZSBzZWNvbmQKb3BlcmFuZCBhcyBhbiBpbnRlZ2VyLiAgSW4gYW4gZXhwcmVzc2lvbiBvZiBjb2RlICdwbHVzJywgdGhlcmUgYXJlIHR3bwpvcGVyYW5kcywgYm90aCBvZiB3aGljaCBhcmUgdG8gYmUgcmVnYXJkZWQgYXMgZXhwcmVzc2lvbnMuICBJbiBhCidzeW1ib2xfcmVmJyBleHByZXNzaW9uLCB0aGVyZSBpcyBvbmUgb3BlcmFuZCwgd2hpY2ggaXMgdG8gYmUgcmVnYXJkZWQKYXMgYSBzdHJpbmcuCgogRXhwcmVzc2lvbnMgYXJlIHdyaXR0ZW4gYXMgcGFyZW50aGVzZXMgY29udGFpbmluZyB0aGUgbmFtZSBvZiB0aGUKZXhwcmVzc2lvbiB0eXBlLCBpdHMgZmxhZ3MgYW5kIG1hY2hpbmUgbW9kZSBpZiBhbnksIGFuZCB0aGVuIHRoZQpvcGVyYW5kcyBvZiB0aGUgZXhwcmVzc2lvbiAoc2VwYXJhdGVkIGJ5IHNwYWNlcykuCgogRXhwcmVzc2lvbiBjb2RlIG5hbWVzIGluIHRoZSAnbWQnIGZpbGUgYXJlIHdyaXR0ZW4gaW4gbG93ZXJjYXNlLCBidXQKd2hlbiB0aGV5IGFwcGVhciBpbiBDIGNvZGUgdGhleSBhcmUgd3JpdHRlbiBpbiB1cHBlcmNhc2UuICBJbiB0aGlzCm1hbnVhbCwgdGhleSBhcmUgc2hvd24gYXMgZm9sbG93czogJ2NvbnN0X2ludCcuCgogSW4gYSBmZXcgY29udGV4dHMgYSBudWxsIHBvaW50ZXIgaXMgdmFsaWQgd2hlcmUgYW4gZXhwcmVzc2lvbiBpcwpub3JtYWxseSB3YW50ZWQuICBUaGUgd3JpdHRlbiBmb3JtIG9mIHRoaXMgaXMgJyhuaWwpJy4KCh8KRmlsZTogZ2NjaW50LmluZm8sICBOb2RlOiBSVEwgQ2xhc3NlcywgIE5leHQ6IEFjY2Vzc29ycywgIFByZXY6IFJUTCBPYmplY3RzLCAgVXA6IFJUTAoKMTIuMiBSVEwgQ2xhc3NlcyBhbmQgRm9ybWF0cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpUaGUgdmFyaW91cyBleHByZXNzaW9uIGNvZGVzIGFyZSBkaXZpZGVkIGludG8gc2V2ZXJhbCAiY2xhc3NlcyIsIHdoaWNoCmFyZSByZXByZXNlbnRlZCBieSBzaW5nbGUgY2hhcmFjdGVycy4gIFlvdSBjYW4gZGV0ZXJtaW5lIHRoZSBjbGFzcyBvZiBhbgpSVFggY29kZSB3aXRoIHRoZSBtYWNybyAnR0VUX1JUWF9DTEFTUyAoQ09ERSknLiAgQ3VycmVudGx5LCAncnRsLmRlZicKZGVmaW5lcyB0aGVzZSBjbGFzc2VzOgoKJ1JUWF9PQkonCiAgICAgQW4gUlRYIGNvZGUgdGhhdCByZXByZXNlbnRzIGFuIGFjdHVhbCBvYmplY3QsIHN1Y2ggYXMgYSByZWdpc3RlcgogICAgICgnUkVHJykgb3IgYSBtZW1vcnkgbG9jYXRpb24gKCdNRU0nLCAnU1lNQk9MX1JFRicpLiAgJ0xPX1NVTScpIGlzCiAgICAgYWxzbyBpbmNsdWRlZDsgaW5zdGVhZCwgJ1NVQlJFRycgYW5kICdTVFJJQ1RfTE9XX1BBUlQnIGFyZSBub3QgaW4KICAgICB0aGlzIGNsYXNzLCBidXQgaW4gY2xhc3MgJ3gnLgoKJ1JUWF9DT05TVF9PQkonCiAgICAgQW4gUlRYIGNvZGUgdGhhdCByZXByZXNlbnRzIGEgY29uc3RhbnQgb2JqZWN0LiAgJ0hJR0gnIGlzIGFsc28KICAgICBpbmNsdWRlZCBpbiB0aGlzIGNsYXNzLgoKJ1JUWF9DT01QQVJFJwogICAgIEFuIFJUWCBjb2RlIGZvciBhIG5vbi1zeW1tZXRyaWMgY29tcGFyaXNvbiwgc3VjaCBhcyAnR0VVJyBvciAnTFQnLgoKJ1JUWF9DT01NX0NPTVBBUkUnCiAgICAgQW4gUlRYIGNvZGUgZm9yIGEgc3ltbWV0cmljIChjb21tdXRhdGl2ZSkgY29tcGFyaXNvbiwgc3VjaCBhcyAnRVEnCiAgICAgb3IgJ09SREVSRUQnLgoKJ1JUWF9VTkFSWScKICAgICBBbiBSVFggY29kZSBmb3IgYSB1bmFyeSBhcml0aG1ldGljIG9wZXJhdGlvbiwgc3VjaCBhcyAnTkVHJywgJ05PVCcsCiAgICAgb3IgJ0FCUycuICBUaGlzIGNhdGVnb3J5IGFsc28gaW5jbHVkZXMgdmFsdWUgZXh0ZW5zaW9uIChzaWduIG9yCiAgICAgemVybykgYW5kIGNvbnZlcnNpb25zIGJldHdlZW4gaW50ZWdlciBhbmQgZmxvYXRpbmcgcG9pbnQuCgonUlRYX0NPTU1fQVJJVEgnCiAgICAgQW4gUlRYIGNvZGUgZm9yIGEgY29tbXV0YXRpdmUgYmluYXJ5IG9wZXJhdGlvbiwgc3VjaCBhcyAnUExVUycgb3IKICAgICAnQU5EJy4gICdORScgYW5kICdFUScgYXJlIGNvbXBhcmlzb25zLCBzbyB0aGV5IGhhdmUgY2xhc3MgJzwnLgoKJ1JUWF9CSU5fQVJJVEgnCiAgICAgQW4gUlRYIGNvZGUgZm9yIGEgbm9uLWNvbW11dGF0aXZlIGJpbmFyeSBvcGVyYXRpb24sIHN1Y2ggYXMKICAgICAnTUlOVVMnLCAnRElWJywgb3IgJ0FTSElGVFJUJy4KCidSVFhfQklURklFTERfT1BTJwogICAgIEFuIFJUWCBjb2RlIGZvciBhIGJpdC1maWVsZCBvcGVyYXRpb24uICBDdXJyZW50bHkgb25seQogICAgICdaRVJPX0VYVFJBQ1QnIGFuZCAnU0lHTl9FWFRSQUNUJy4gIFRoZXNlIGhhdmUgdGhyZWUgaW5wdXRzIGFuZCBhcmUKICAgICBsdmFsdWVzIChzbyB0aGV5IGNhbiBiZSB1c2VkIGZvciBpbnNlcnRpb24gYXMgd2VsbCkuICAqTm90ZQogICAgIEJpdC1GaWVsZHM6Oi4KCidSVFhfVEVSTkFSWScKICAgICBBbiBSVFggY29kZSBmb3Igb3RoZXIgdGhyZWUgaW5wdXQgb3BlcmF0aW9ucy4gIEN1cnJlbnRseSBvbmx5CiAgICAgJ0lGX1RIRU5fRUxTRScgYW5kICdWRUNfTUVSR0UnLgoKJ1JUWF9JTlNOJwogICAgIEFuIFJUWCBjb2RlIGZvciBhbiBlbnRpcmUgaW5zdHJ1Y3Rpb246ICdJTlNOJywgJ0pVTVBfSU5TTicsIGFuZAogICAgICdDQUxMX0lOU04nLiAgKk5vdGUgSW5zbnM6Oi4KCidSVFhfTUFUQ0gnCiAgICAgQW4gUlRYIGNvZGUgZm9yIHNvbWV0aGluZyB0aGF0IG1hdGNoZXMgaW4gaW5zbnMsIHN1Y2ggYXMKICAgICAnTUFUQ0hfRFVQJy4gIFRoZXNlIG9ubHkgb2NjdXIgaW4gbWFjaGluZSBkZXNjcmlwdGlvbnMuCgonUlRYX0FVVE9JTkMnCiAgICAgQW4gUlRYIGNvZGUgZm9yIGFuIGF1dG8taW5jcmVtZW50IGFkZHJlc3NpbmcgbW9kZSwgc3VjaCBhcwogICAgICdQT1NUX0lOQycuCgonUlRYX0VYVFJBJwogICAgIEFsbCBvdGhlciBSVFggY29kZXMuICBUaGlzIGNhdGVnb3J5IGluY2x1ZGVzIHRoZSByZW1haW5pbmcgY29kZXMKICAgICB1c2VkIG9ubHkgaW4gbWFjaGluZSBkZXNjcmlwdGlvbnMgKCdERUZJTkVfKicsIGV0Yy4pLiAgSXQgYWxzbwogICAgIGluY2x1ZGVzIGFsbCB0aGUgY29kZXMgZGVzY3JpYmluZyBzaWRlIGVmZmVjdHMgKCdTRVQnLCAnVVNFJywKICAgICAnQ0xPQkJFUicsIGV0Yy4pICBhbmQgdGhlIG5vbi1pbnNucyB0aGF0IG1heSBhcHBlYXIgb24gYW4gaW5zbgogICAgIGNoYWluLCBzdWNoIGFzICdOT1RFJywgJ0JBUlJJRVInLCBhbmQgJ0NPREVfTEFCRUwnLiAgJ1NVQlJFRycgaXMKICAgICBhbHNvIHBhcnQgb2YgdGhpcyBjbGFzcy4KCiBGb3IgZWFjaCBleHByZXNzaW9uIGNvZGUsICdydGwuZGVmJyBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiBjb250YWluZWQKb2JqZWN0cyBhbmQgdGhlaXIga2luZHMgdXNpbmcgYSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIGNhbGxlZCB0aGUKImZvcm1hdCIgb2YgdGhlIGV4cHJlc3Npb24gY29kZS4gIEZvciBleGFtcGxlLCB0aGUgZm9ybWF0IG9mICdzdWJyZWcnIGlzCidlaScuCgogVGhlc2UgYXJlIHRoZSBtb3N0IGNvbW1vbmx5IHVzZWQgZm9ybWF0IGNoYXJhY3RlcnM6CgonZScKICAgICBBbiBleHByZXNzaW9uIChhY3R1YWxseSBhIHBvaW50ZXIgdG8gYW4gZXhwcmVzc2lvbikuCgonaScKICAgICBBbiBpbnRlZ2VyLgoKJ3cnCiAgICAgQSB3aWRlIGludGVnZXIuCgoncycKICAgICBBIHN0cmluZy4KCidFJwogICAgIEEgdmVjdG9yIG9mIGV4cHJlc3Npb25zLgoKIEEgZmV3IG90aGVyIGZvcm1hdCBjaGFyYWN0ZXJzIGFyZSB1c2VkIG9jY2FzaW9uYWxseToKCid1JwogICAgICd1JyBpcyBlcXVpdmFsZW50IHRvICdlJyBleGNlcHQgdGhhdCBpdCBpcyBwcmludGVkIGRpZmZlcmVudGx5IGluCiAgICAgZGVidWdnaW5nIGR1bXBzLiAgSXQgaXMgdXNlZCBmb3IgcG9pbnRlcnMgdG8gaW5zbnMuCgonbicKICAgICAnbicgaXMgZXF1aXZhbGVudCB0byAnaScgZXhjZXB0IHRoYXQgaXQgaXMgcHJpbnRlZCBkaWZmZXJlbnRseSBpbgogICAgIGRlYnVnZ2luZyBkdW1wcy4gIEl0IGlzIHVzZWQgZm9yIHRoZSBsaW5lIG51bWJlciBvciBjb2RlIG51bWJlciBvZgogICAgIGEgJ25vdGUnIGluc24uCgonUycKICAgICAnUycgaW5kaWNhdGVzIGEgc3RyaW5nIHdoaWNoIGlzIG9wdGlvbmFsLiAgSW4gdGhlIFJUTCBvYmplY3RzIGluCiAgICAgY29yZSwgJ1MnIGlzIGVxdWl2YWxlbnQgdG8gJ3MnLCBidXQgd2hlbiB0aGUgb2JqZWN0IGlzIHJlYWQsIGZyb20KICAgICBhbiAnbWQnIGZpbGUsIHRoZSBzdHJpbmcgdmFsdWUgb2YgdGhpcyBvcGVyYW5kIG1heSBiZSBvbWl0dGVkLiAgQW4KICAgICBvbWl0dGVkIHN0cmluZyBpcyB0YWtlbiB0byBiZSB0aGUgbnVsbCBzdHJpbmcuCgonVicKICAgICAnVicgaW5kaWNhdGVzIGEgdmVjdG9yIHdoaWNoIGlzIG9wdGlvbmFsLiAgSW4gdGhlIFJUTCBvYmplY3RzIGluCiAgICAgY29yZSwgJ1YnIGlzIGVxdWl2YWxlbnQgdG8gJ0UnLCBidXQgd2hlbiB0aGUgb2JqZWN0IGlzIHJlYWQgZnJvbSBhbgogICAgICdtZCcgZmlsZSwgdGhlIHZlY3RvciB2YWx1ZSBvZiB0aGlzIG9wZXJhbmQgbWF5IGJlIG9taXR0ZWQuICBBbgogICAgIG9taXR0ZWQgdmVjdG9yIGlzIGVmZmVjdGl2ZWx5IHRoZSBzYW1lIGFzIGEgdmVjdG9yIG9mIG5vIGVsZW1lbnRzLgoKJ0InCiAgICAgJ0InIGluZGljYXRlcyBhIHBvaW50ZXIgdG8gYmFzaWMgYmxvY2sgc3RydWN0dXJlLgoKJzAnCiAgICAgJzAnIG1lYW5zIGEgc2xvdCB3aG9zZSBjb250ZW50cyBkbyBub3QgZml0IGFueSBub3JtYWwgY2F0ZWdvcnkuCiAgICAgJzAnIHNsb3RzIGFyZSBub3QgcHJpbnRlZCBhdCBhbGwgaW4gZHVtcHMsIGFuZCBhcmUgb2Z0ZW4gdXNlZCBpbgogICAgIHNwZWNpYWwgd2F5cyBieSBzbWFsbCBwYXJ0cyBvZiB0aGUgY29tcGlsZXIuCgogVGhlcmUgYXJlIG1hY3JvcyB0byBnZXQgdGhlIG51bWJlciBvZiBvcGVyYW5kcyBhbmQgdGhlIGZvcm1hdCBvZiBhbgpleHByZXNzaW9uIGNvZGU6CgonR0VUX1JUWF9MRU5HVEggKENPREUpJwogICAgIE51bWJlciBvZiBvcGVyYW5kcyBvZiBhbiBSVFggb2YgY29kZSBDT0RFLgoKJ0dFVF9SVFhfRk9STUFUIChDT0RFKScKICAgICBUaGUgZm9ybWF0IG9mIGFuIFJUWCBvZiBjb2RlIENPREUsIGFzIGEgQyBzdHJpbmcuCgogU29tZSBjbGFzc2VzIG9mIFJUWCBjb2RlcyBhbHdheXMgaGF2ZSB0aGUgc2FtZSBmb3JtYXQuICBGb3IgZXhhbXBsZSwgaXQKaXMgc2FmZSB0byBhc3N1bWUgdGhhdCBhbGwgY29tcGFyaXNvbiBvcGVyYXRpb25zIGhhdmUgZm9ybWF0ICdlZScuCgonMScKICAgICBBbGwgY29kZXMgb2YgdGhpcyBjbGFzcyBoYXZlIGZvcm1hdCAnZScuCgonPCcKJ2MnCicyJwogICAgIEFsbCBjb2RlcyBvZiB0aGVzZSBjbGFzc2VzIGhhdmUgZm9ybWF0ICdlZScuCgonYicKJzMnCiAgICAgQWxsIGNvZGVzIG9mIHRoZXNlIGNsYXNzZXMgaGF2ZSBmb3JtYXQgJ2VlZScuCgonaScKICAgICBBbGwgY29kZXMgb2YgdGhpcyBjbGFzcyBoYXZlIGZvcm1hdHMgdGhhdCBiZWdpbiB3aXRoICdpdXVlaWVlJy4KICAgICAqTm90ZSBJbnNuczo6LiAgTm90ZSB0aGF0IG5vdCBhbGwgUlRMIG9iamVjdHMgbGlua2VkIG9udG8gYW4gaW5zbgogICAgIGNoYWluIGFyZSBvZiBjbGFzcyAnaScuCgonbycKJ20nCid4JwogICAgIFlvdSBjYW4gbWFrZSBubyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgZm9ybWF0IG9mIHRoZXNlIGNvZGVzLgoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IEFjY2Vzc29ycywgIE5leHQ6IFNwZWNpYWwgQWNjZXNzb3JzLCAgUHJldjogUlRMIENsYXNzZXMsICBVcDogUlRMCgoxMi4zIEFjY2VzcyB0byBPcGVyYW5kcwo9PT09PT09PT09PT09PT09PT09PT09PQoKT3BlcmFuZHMgb2YgZXhwcmVzc2lvbnMgYXJlIGFjY2Vzc2VkIHVzaW5nIHRoZSBtYWNyb3MgJ1hFWFAnLCAnWElOVCcsCidYV0lOVCcgYW5kICdYU1RSJy4gIEVhY2ggb2YgdGhlc2UgbWFjcm9zIHRha2VzIHR3byBhcmd1bWVudHM6IGFuCmV4cHJlc3Npb24tcG9pbnRlciAoUlRYKSBhbmQgYW4gb3BlcmFuZCBudW1iZXIgKGNvdW50aW5nIGZyb20gemVybykuClRodXMsCgogICAgIFhFWFAgKFgsIDIpCgphY2Nlc3NlcyBvcGVyYW5kIDIgb2YgZXhwcmVzc2lvbiBYLCBhcyBhbiBleHByZXNzaW9uLgoKICAgICBYSU5UIChYLCAyKQoKYWNjZXNzZXMgdGhlIHNhbWUgb3BlcmFuZCBhcyBhbiBpbnRlZ2VyLiAgJ1hTVFInLCB1c2VkIGluIHRoZSBzYW1lCmZhc2hpb24sIHdvdWxkIGFjY2VzcyBpdCBhcyBhIHN0cmluZy4KCiBBbnkgb3BlcmFuZCBjYW4gYmUgYWNjZXNzZWQgYXMgYW4gaW50ZWdlciwgYXMgYW4gZXhwcmVzc2lvbiBvciBhcyBhCnN0cmluZy4gIFlvdSBtdXN0IGNob29zZSB0aGUgY29ycmVjdCBtZXRob2Qgb2YgYWNjZXNzIGZvciB0aGUga2luZCBvZgp2YWx1ZSBhY3R1YWxseSBzdG9yZWQgaW4gdGhlIG9wZXJhbmQuICBZb3Ugd291bGQgZG8gdGhpcyBiYXNlZCBvbiB0aGUKZXhwcmVzc2lvbiBjb2RlIG9mIHRoZSBjb250YWluaW5nIGV4cHJlc3Npb24uICBUaGF0IGlzIGFsc28gaG93IHlvdQp3b3VsZCBrbm93IGhvdyBtYW55IG9wZXJhbmRzIHRoZXJlIGFyZS4KCiBGb3IgZXhhbXBsZSwgaWYgWCBpcyBhICdzdWJyZWcnIGV4cHJlc3Npb24sIHlvdSBrbm93IHRoYXQgaXQgaGFzIHR3bwpvcGVyYW5kcyB3aGljaCBjYW4gYmUgY29ycmVjdGx5IGFjY2Vzc2VkIGFzICdYRVhQIChYLCAwKScgYW5kICdYSU5UIChYLAoxKScuICBJZiB5b3UgZGlkICdYSU5UIChYLCAwKScsIHlvdSB3b3VsZCBnZXQgdGhlIGFkZHJlc3Mgb2YgdGhlCmV4cHJlc3Npb24gb3BlcmFuZCBidXQgY2FzdCBhcyBhbiBpbnRlZ2VyOyB0aGF0IG1pZ2h0IG9jY2FzaW9uYWxseSBiZQp1c2VmdWwsIGJ1dCBpdCB3b3VsZCBiZSBjbGVhbmVyIHRvIHdyaXRlICcoaW50KSBYRVhQIChYLCAwKScuICAnWEVYUCAoWCwKMSknIHdvdWxkIGFsc28gY29tcGlsZSB3aXRob3V0IGVycm9yLCBhbmQgd291bGQgcmV0dXJuIHRoZSBzZWNvbmQsCmludGVnZXIgb3BlcmFuZCBjYXN0IGFzIGFuIGV4cHJlc3Npb24gcG9pbnRlciwgd2hpY2ggd291bGQgcHJvYmFibHkKcmVzdWx0IGluIGEgY3Jhc2ggd2hlbiBhY2Nlc3NlZC4gIE5vdGhpbmcgc3RvcHMgeW91IGZyb20gd3JpdGluZyAnWEVYUAooWCwgMjgpJyBlaXRoZXIsIGJ1dCB0aGlzIHdpbGwgYWNjZXNzIG1lbW9yeSBwYXN0IHRoZSBlbmQgb2YgdGhlCmV4cHJlc3Npb24gd2l0aCB1bnByZWRpY3RhYmxlIHJlc3VsdHMuCgogQWNjZXNzIHRvIG9wZXJhbmRzIHdoaWNoIGFyZSB2ZWN0b3JzIGlzIG1vcmUgY29tcGxpY2F0ZWQuICBZb3UgY2FuIHVzZQp0aGUgbWFjcm8gJ1hWRUMnIHRvIGdldCB0aGUgdmVjdG9yLXBvaW50ZXIgaXRzZWxmLCBvciB0aGUgbWFjcm9zCidYVkVDRVhQJyBhbmQgJ1hWRUNMRU4nIHRvIGFjY2VzcyB0aGUgZWxlbWVudHMgYW5kIGxlbmd0aCBvZiBhIHZlY3Rvci4KCidYVkVDIChFWFAsIElEWCknCiAgICAgQWNjZXNzIHRoZSB2ZWN0b3ItcG9pbnRlciB3aGljaCBpcyBvcGVyYW5kIG51bWJlciBJRFggaW4gRVhQLgoKJ1hWRUNMRU4gKEVYUCwgSURYKScKICAgICBBY2Nlc3MgdGhlIGxlbmd0aCAobnVtYmVyIG9mIGVsZW1lbnRzKSBpbiB0aGUgdmVjdG9yIHdoaWNoIGlzIGluCiAgICAgb3BlcmFuZCBudW1iZXIgSURYIGluIEVYUC4gIFRoaXMgdmFsdWUgaXMgYW4gJ2ludCcuCgonWFZFQ0VYUCAoRVhQLCBJRFgsIEVMVE5VTSknCiAgICAgQWNjZXNzIGVsZW1lbnQgbnVtYmVyIEVMVE5VTSBpbiB0aGUgdmVjdG9yIHdoaWNoIGlzIGluIG9wZXJhbmQKICAgICBudW1iZXIgSURYIGluIEVYUC4gIFRoaXMgdmFsdWUgaXMgYW4gUlRYLgoKICAgICBJdCBpcyB1cCB0byB5b3UgdG8gbWFrZSBzdXJlIHRoYXQgRUxUTlVNIGlzIG5vdCBuZWdhdGl2ZSBhbmQgaXMKICAgICBsZXNzIHRoYW4gJ1hWRUNMRU4gKEVYUCwgSURYKScuCgogQWxsIHRoZSBtYWNyb3MgZGVmaW5lZCBpbiB0aGlzIHNlY3Rpb24gZXhwYW5kIGludG8gbHZhbHVlcyBhbmQKdGhlcmVmb3JlIGNhbiBiZSB1c2VkIHRvIGFzc2lnbiB0aGUgb3BlcmFuZHMsIGxlbmd0aHMgYW5kIHZlY3RvcgplbGVtZW50cyBhcyB3ZWxsIGFzIHRvIGFjY2VzcyB0aGVtLgoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IFNwZWNpYWwgQWNjZXNzb3JzLCAgTmV4dDogRmxhZ3MsICBQcmV2OiBBY2Nlc3NvcnMsICBVcDogUlRMCgoxMi40IEFjY2VzcyB0byBTcGVjaWFsIE9wZXJhbmRzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KClNvbWUgUlRMIG5vZGVzIGhhdmUgc3BlY2lhbCBhbm5vdGF0aW9ucyBhc3NvY2lhdGVkIHdpdGggdGhlbS4KCidNRU0nCiAgICAgJ01FTV9BTElBU19TRVQgKFgpJwogICAgICAgICAgSWYgMCwgWCBpcyBub3QgaW4gYW55IGFsaWFzIHNldCwgYW5kIG1heSBhbGlhcyBhbnl0aGluZy4KICAgICAgICAgIE90aGVyd2lzZSwgWCBjYW4gb25seSBhbGlhcyAnTUVNJ3MgaW4gYSBjb25mbGljdGluZyBhbGlhcyBzZXQuCiAgICAgICAgICBUaGlzIHZhbHVlIGlzIHNldCBpbiBhIGxhbmd1YWdlLWRlcGVuZGVudCBtYW5uZXIgaW4gdGhlCiAgICAgICAgICBmcm9udC1lbmQsIGFuZCBzaG91bGQgbm90IGJlIGFsdGVyZWQgaW4gdGhlIGJhY2stZW5kLiAgSW4gc29tZQogICAgICAgICAgZnJvbnQtZW5kcywgdGhlc2UgbnVtYmVycyBtYXkgY29ycmVzcG9uZCBpbiBzb21lIHdheSB0byB0eXBlcywKICAgICAgICAgIG9yIG90aGVyIGxhbmd1YWdlLWxldmVsIGVudGl0aWVzLCBidXQgdGhleSBuZWVkIG5vdCwgYW5kIHRoZQogICAgICAgICAgYmFjay1lbmQgbWFrZXMgbm8gc3VjaCBhc3N1bXB0aW9ucy4gIFRoZXNlIHNldCBudW1iZXJzIGFyZQogICAgICAgICAgdGVzdGVkIHdpdGggJ2FsaWFzX3NldHNfY29uZmxpY3RfcCcuCgogICAgICdNRU1fRVhQUiAoWCknCiAgICAgICAgICBJZiB0aGlzIHJlZ2lzdGVyIGlzIGtub3duIHRvIGhvbGQgdGhlIHZhbHVlIG9mIHNvbWUgdXNlci1sZXZlbAogICAgICAgICAgZGVjbGFyYXRpb24sIHRoaXMgaXMgdGhhdCB0cmVlIG5vZGUuICBJdCBtYXkgYWxzbyBiZSBhCiAgICAgICAgICAnQ09NUE9ORU5UX1JFRicsIGluIHdoaWNoIGNhc2UgdGhpcyBpcyBzb21lIGZpZWxkIHJlZmVyZW5jZSwKICAgICAgICAgIGFuZCAnVFJFRV9PUEVSQU5EIChYLCAwKScgY29udGFpbnMgdGhlIGRlY2xhcmF0aW9uLCBvciBhbm90aGVyCiAgICAgICAgICAnQ09NUE9ORU5UX1JFRicsIG9yIG51bGwgaWYgdGhlcmUgaXMgbm8gY29tcGlsZS10aW1lIG9iamVjdAogICAgICAgICAgYXNzb2NpYXRlZCB3aXRoIHRoZSByZWZlcmVuY2UuCgogICAgICdNRU1fT0ZGU0VUIChYKScKICAgICAgICAgIFRoZSBvZmZzZXQgZnJvbSB0aGUgc3RhcnQgb2YgJ01FTV9FWFBSJyBhcyBhICdDT05TVF9JTlQnIHJ0eC4KCiAgICAgJ01FTV9TSVpFIChYKScKICAgICAgICAgIFRoZSBzaXplIGluIGJ5dGVzIG9mIHRoZSBtZW1vcnkgcmVmZXJlbmNlIGFzIGEgJ0NPTlNUX0lOVCcKICAgICAgICAgIHJ0eC4gIFRoaXMgaXMgbW9zdGx5IHJlbGV2YW50IGZvciAnQkxLbW9kZScgcmVmZXJlbmNlcyBhcwogICAgICAgICAgb3RoZXJ3aXNlIHRoZSBzaXplIGlzIGltcGxpZWQgYnkgdGhlIG1vZGUuCgogICAgICdNRU1fQUxJR04gKFgpJwogICAgICAgICAgVGhlIGtub3duIGFsaWdubWVudCBpbiBiaXRzIG9mIHRoZSBtZW1vcnkgcmVmZXJlbmNlLgoKJ1JFRycKICAgICAnT1JJR0lOQUxfUkVHTk8gKFgpJwogICAgICAgICAgVGhpcyBmaWVsZCBob2xkcyB0aGUgbnVtYmVyIHRoZSByZWdpc3RlciAib3JpZ2luYWxseSIgaGFkOyBmb3IKICAgICAgICAgIGEgcHNldWRvIHJlZ2lzdGVyIHR1cm5lZCBpbnRvIGEgaGFyZCByZWcgdGhpcyB3aWxsIGhvbGQgdGhlCiAgICAgICAgICBvbGQgcHNldWRvIHJlZ2lzdGVyIG51bWJlci4KCiAgICAgJ1JFR19FWFBSIChYKScKICAgICAgICAgIElmIHRoaXMgcmVnaXN0ZXIgaXMga25vd24gdG8gaG9sZCB0aGUgdmFsdWUgb2Ygc29tZSB1c2VyLWxldmVsCiAgICAgICAgICBkZWNsYXJhdGlvbiwgdGhpcyBpcyB0aGF0IHRyZWUgbm9kZS4KCiAgICAgJ1JFR19PRkZTRVQgKFgpJwogICAgICAgICAgSWYgdGhpcyByZWdpc3RlciBpcyBrbm93biB0byBob2xkIHRoZSB2YWx1ZSBvZiBzb21lIHVzZXItbGV2ZWwKICAgICAgICAgIGRlY2xhcmF0aW9uLCB0aGlzIGlzIHRoZSBvZmZzZXQgaW50byB0aGF0IGxvZ2ljYWwgc3RvcmFnZS4KCidTWU1CT0xfUkVGJwogICAgICdTWU1CT0xfUkVGX0RFQ0wgKFgpJwogICAgICAgICAgSWYgdGhlICdzeW1ib2xfcmVmJyBYIHdhcyBjcmVhdGVkIGZvciBhICdWQVJfREVDTCcgb3IgYQogICAgICAgICAgJ0ZVTkNUSU9OX0RFQ0wnLCB0aGF0IHRyZWUgaXMgcmVjb3JkZWQgaGVyZS4gIElmIHRoaXMgdmFsdWUgaXMKICAgICAgICAgIG51bGwsIHRoZW4gWCB3YXMgY3JlYXRlZCBieSBiYWNrIGVuZCBjb2RlIGdlbmVyYXRpb24gcm91dGluZXMsCiAgICAgICAgICBhbmQgdGhlcmUgaXMgbm8gYXNzb2NpYXRlZCBmcm9udCBlbmQgc3ltYm9sIHRhYmxlIGVudHJ5LgoKICAgICAgICAgICdTWU1CT0xfUkVGX0RFQ0wnIG1heSBhbHNvIHBvaW50IHRvIGEgdHJlZSBvZiBjbGFzcyAnJ2MnJywKICAgICAgICAgIHRoYXQgaXMsIHNvbWUgc29ydCBvZiBjb25zdGFudC4gIEluIHRoaXMgY2FzZSwgdGhlCiAgICAgICAgICAnc3ltYm9sX3JlZicgaXMgYW4gZW50cnkgaW4gdGhlIHBlci1maWxlIGNvbnN0YW50IHBvb2w7IGFnYWluLAogICAgICAgICAgdGhlcmUgaXMgbm8gYXNzb2NpYXRlZCBmcm9udCBlbmQgc3ltYm9sIHRhYmxlIGVudHJ5LgoKICAgICAnU1lNQk9MX1JFRl9DT05TVEFOVCAoWCknCiAgICAgICAgICBJZiAnQ09OU1RBTlRfUE9PTF9BRERSRVNTX1AgKFgpJyBpcyB0cnVlLCB0aGlzIGlzIHRoZSBjb25zdGFudAogICAgICAgICAgcG9vbCBlbnRyeSBmb3IgWC4gIEl0IGlzIG51bGwgb3RoZXJ3aXNlLgoKICAgICAnU1lNQk9MX1JFRl9EQVRBIChYKScKICAgICAgICAgIEEgZmllbGQgb2Ygb3BhcXVlIHR5cGUgdXNlZCB0byBzdG9yZSAnU1lNQk9MX1JFRl9ERUNMJyBvcgogICAgICAgICAgJ1NZTUJPTF9SRUZfQ09OU1RBTlQnLgoKICAgICAnU1lNQk9MX1JFRl9GTEFHUyAoWCknCiAgICAgICAgICBJbiBhICdzeW1ib2xfcmVmJywgdGhpcyBpcyB1c2VkIHRvIGNvbW11bmljYXRlIHZhcmlvdXMKICAgICAgICAgIHByZWRpY2F0ZXMgYWJvdXQgdGhlIHN5bWJvbC4gIFNvbWUgb2YgdGhlc2UgYXJlIGNvbW1vbiBlbm91Z2gKICAgICAgICAgIHRvIGJlIGNvbXB1dGVkIGJ5IGNvbW1vbiBjb2RlLCBzb21lIGFyZSBzcGVjaWZpYyB0byB0aGUKICAgICAgICAgIHRhcmdldC4gIFRoZSBjb21tb24gYml0cyBhcmU6CgogICAgICAgICAgJ1NZTUJPTF9GTEFHX0ZVTkNUSU9OJwogICAgICAgICAgICAgICBTZXQgaWYgdGhlIHN5bWJvbCByZWZlcnMgdG8gYSBmdW5jdGlvbi4KCiAgICAgICAgICAnU1lNQk9MX0ZMQUdfTE9DQUwnCiAgICAgICAgICAgICAgIFNldCBpZiB0aGUgc3ltYm9sIGlzIGxvY2FsIHRvIHRoaXMgIm1vZHVsZSIuICBTZWUKICAgICAgICAgICAgICAgJ1RBUkdFVF9CSU5EU19MT0NBTF9QJy4KCiAgICAgICAgICAnU1lNQk9MX0ZMQUdfRVhURVJOQUwnCiAgICAgICAgICAgICAgIFNldCBpZiB0aGlzIHN5bWJvbCBpcyBub3QgZGVmaW5lZCBpbiB0aGlzIHRyYW5zbGF0aW9uCiAgICAgICAgICAgICAgIHVuaXQuICBOb3RlIHRoYXQgdGhpcyBpcyBub3QgdGhlIGludmVyc2Ugb2YKICAgICAgICAgICAgICAgJ1NZTUJPTF9GTEFHX0xPQ0FMJy4KCiAgICAgICAgICAnU1lNQk9MX0ZMQUdfU01BTEwnCiAgICAgICAgICAgICAgIFNldCBpZiB0aGUgc3ltYm9sIGlzIGxvY2F0ZWQgaW4gdGhlIHNtYWxsIGRhdGEgc2VjdGlvbi4KICAgICAgICAgICAgICAgU2VlICdUQVJHRVRfSU5fU01BTExfREFUQV9QJy4KCiAgICAgICAgICAnU1lNQk9MX1JFRl9UTFNfTU9ERUwgKFgpJwogICAgICAgICAgICAgICBUaGlzIGlzIGEgbXVsdGktYml0IGZpZWxkIGFjY2Vzc29yIHRoYXQgcmV0dXJucyB0aGUKICAgICAgICAgICAgICAgJ3Rsc19tb2RlbCcgdG8gYmUgdXNlZCBmb3IgYSB0aHJlYWQtbG9jYWwgc3RvcmFnZSBzeW1ib2wuCiAgICAgICAgICAgICAgIEl0IHJldHVybnMgemVybyBmb3Igbm9uLXRocmVhZC1sb2NhbCBzeW1ib2xzLgoKICAgICAgICAgICdTWU1CT0xfRkxBR19IQVNfQkxPQ0tfSU5GTycKICAgICAgICAgICAgICAgU2V0IGlmIHRoZSBzeW1ib2wgaGFzICdTWU1CT0xfUkVGX0JMT0NLJyBhbmQKICAgICAgICAgICAgICAgJ1NZTUJPTF9SRUZfQkxPQ0tfT0ZGU0VUJyBmaWVsZHMuCgogICAgICAgICAgJ1NZTUJPTF9GTEFHX0FOQ0hPUicKICAgICAgICAgICAgICAgU2V0IGlmIHRoZSBzeW1ib2wgaXMgdXNlZCBhcyBhIHNlY3Rpb24gYW5jaG9yLiAgIlNlY3Rpb24KICAgICAgICAgICAgICAgYW5jaG9ycyIgYXJlIHN5bWJvbHMgdGhhdCBoYXZlIGEga25vd24gcG9zaXRpb24gd2l0aGluIGFuCiAgICAgICAgICAgICAgICdvYmplY3RfYmxvY2snIGFuZCB0aGF0IGNhbiBiZSB1c2VkIHRvIGFjY2VzcyBuZWFyYnkKICAgICAgICAgICAgICAgbWVtYmVycyBvZiB0aGF0IGJsb2NrLiAgVGhleSBhcmUgdXNlZCB0byBpbXBsZW1lbnQKICAgICAgICAgICAgICAgJy1mc2VjdGlvbi1hbmNob3JzJy4KCiAgICAgICAgICAgICAgIElmIHRoaXMgZmxhZyBpcyBzZXQsIHRoZW4gJ1NZTUJPTF9GTEFHX0hBU19CTE9DS19JTkZPJwogICAgICAgICAgICAgICB3aWxsIGJlIHRvby4KCiAgICAgICAgICBCaXRzIGJlZ2lubmluZyB3aXRoICdTWU1CT0xfRkxBR19NQUNIX0RFUCcgYXJlIGF2YWlsYWJsZSBmb3IKICAgICAgICAgIHRoZSB0YXJnZXQncyB1c2UuCgonU1lNQk9MX1JFRl9CTE9DSyAoWCknCiAgICAgSWYgJ1NZTUJPTF9SRUZfSEFTX0JMT0NLX0lORk9fUCAoWCknLCB0aGlzIGlzIHRoZSAnb2JqZWN0X2Jsb2NrJwogICAgIHN0cnVjdHVyZSB0byB3aGljaCB0aGUgc3ltYm9sIGJlbG9uZ3MsIG9yICdOVUxMJyBpZiBpdCBoYXMgbm90IGJlZW4KICAgICBhc3NpZ25lZCBhIGJsb2NrLgoKJ1NZTUJPTF9SRUZfQkxPQ0tfT0ZGU0VUIChYKScKICAgICBJZiAnU1lNQk9MX1JFRl9IQVNfQkxPQ0tfSU5GT19QIChYKScsIHRoaXMgaXMgdGhlIG9mZnNldCBvZiBYIGZyb20KICAgICB0aGUgZmlyc3Qgb2JqZWN0IGluICdTWU1CT0xfUkVGX0JMT0NLIChYKScuICBUaGUgdmFsdWUgaXMgbmVnYXRpdmUKICAgICBpZiBYIGhhcyBub3QgeWV0IGJlZW4gYXNzaWduZWQgdG8gYSBibG9jaywgb3IgaXQgaGFzIG5vdCBiZWVuIGdpdmVuCiAgICAgYW4gb2Zmc2V0IHdpdGhpbiB0aGF0IGJsb2NrLgoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IEZsYWdzLCAgTmV4dDogTWFjaGluZSBNb2RlcywgIFByZXY6IFNwZWNpYWwgQWNjZXNzb3JzLCAgVXA6IFJUTAoKMTIuNSBGbGFncyBpbiBhbiBSVEwgRXhwcmVzc2lvbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpSVEwgZXhwcmVzc2lvbnMgY29udGFpbiBzZXZlcmFsIGZsYWdzIChvbmUtYml0IGJpdC1maWVsZHMpIHRoYXQgYXJlIHVzZWQKaW4gY2VydGFpbiB0eXBlcyBvZiBleHByZXNzaW9uLiAgTW9zdCBvZnRlbiB0aGV5IGFyZSBhY2Nlc3NlZCB3aXRoIHRoZQpmb2xsb3dpbmcgbWFjcm9zLCB3aGljaCBleHBhbmQgaW50byBsdmFsdWVzLgoKJ0NPTlNUQU5UX1BPT0xfQUREUkVTU19QIChYKScKICAgICBOb256ZXJvIGluIGEgJ3N5bWJvbF9yZWYnIGlmIGl0IHJlZmVycyB0byBwYXJ0IG9mIHRoZSBjdXJyZW50CiAgICAgZnVuY3Rpb24ncyBjb25zdGFudCBwb29sLiAgRm9yIG1vc3QgdGFyZ2V0cyB0aGVzZSBhZGRyZXNzZXMgYXJlIGluCiAgICAgYSAnLnJvZGF0YScgc2VjdGlvbiBlbnRpcmVseSBzZXBhcmF0ZSBmcm9tIHRoZSBmdW5jdGlvbiwgYnV0IGZvcgogICAgIHNvbWUgdGFyZ2V0cyB0aGUgYWRkcmVzc2VzIGFyZSBjbG9zZSB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZQogICAgIGZ1bmN0aW9uLiAgSW4gZWl0aGVyIGNhc2UgR0NDIGFzc3VtZXMgdGhlc2UgYWRkcmVzc2VzIGNhbiBiZQogICAgIGFkZHJlc3NlZCBkaXJlY3RseSwgcGVyaGFwcyB3aXRoIHRoZSBoZWxwIG9mIGJhc2UgcmVnaXN0ZXJzLgogICAgIFN0b3JlZCBpbiB0aGUgJ3VuY2hhbmdpbmcnIGZpZWxkIGFuZCBwcmludGVkIGFzICcvdScuCgonQ09OU1RfT1JfUFVSRV9DQUxMX1AgKFgpJwogICAgIEluIGEgJ2NhbGxfaW5zbicsICdub3RlJywgb3IgYW4gJ2V4cHJfbGlzdCcgZm9yIG5vdGVzLCBpbmRpY2F0ZXMKICAgICB0aGF0IHRoZSBpbnNuIHJlcHJlc2VudHMgYSBjYWxsIHRvIGEgY29uc3Qgb3IgcHVyZSBmdW5jdGlvbi4KICAgICBTdG9yZWQgaW4gdGhlICd1bmNoYW5naW5nJyBmaWVsZCBhbmQgcHJpbnRlZCBhcyAnL3UnLgoKJ0lOU05fQU5OVUxMRURfQlJBTkNIX1AgKFgpJwogICAgIEluIGEgJ2p1bXBfaW5zbicsICdjYWxsX2luc24nLCBvciAnaW5zbicgaW5kaWNhdGVzIHRoYXQgdGhlIGJyYW5jaAogICAgIGlzIGFuIGFubnVsbGluZyBvbmUuICBTZWUgdGhlIGRpc2N1c3Npb24gdW5kZXIgJ3NlcXVlbmNlJyBiZWxvdy4KICAgICBTdG9yZWQgaW4gdGhlICd1bmNoYW5naW5nJyBmaWVsZCBhbmQgcHJpbnRlZCBhcyAnL3UnLgoKJ0lOU05fREVMRVRFRF9QIChYKScKICAgICBJbiBhbiAnaW5zbicsICdjYWxsX2luc24nLCAnanVtcF9pbnNuJywgJ2NvZGVfbGFiZWwnLCAnYmFycmllcicsIG9yCiAgICAgJ25vdGUnLCBub256ZXJvIGlmIHRoZSBpbnNuIGhhcyBiZWVuIGRlbGV0ZWQuICBTdG9yZWQgaW4gdGhlCiAgICAgJ3ZvbGF0aWwnIGZpZWxkIGFuZCBwcmludGVkIGFzICcvdicuCgonSU5TTl9GUk9NX1RBUkdFVF9QIChYKScKICAgICBJbiBhbiAnaW5zbicgb3IgJ2p1bXBfaW5zbicgb3IgJ2NhbGxfaW5zbicgaW4gYSBkZWxheSBzbG90IG9mIGEKICAgICBicmFuY2gsIGluZGljYXRlcyB0aGF0IHRoZSBpbnNuIGlzIGZyb20gdGhlIHRhcmdldCBvZiB0aGUgYnJhbmNoLgogICAgIElmIHRoZSBicmFuY2ggaW5zbiBoYXMgJ0lOU05fQU5OVUxMRURfQlJBTkNIX1AnIHNldCwgdGhpcyBpbnNuIHdpbGwKICAgICBvbmx5IGJlIGV4ZWN1dGVkIGlmIHRoZSBicmFuY2ggaXMgdGFrZW4uICBGb3IgYW5udWxsZWQgYnJhbmNoZXMKICAgICB3aXRoICdJTlNOX0ZST01fVEFSR0VUX1AnIGNsZWFyLCB0aGUgaW5zbiB3aWxsIGJlIGV4ZWN1dGVkIG9ubHkgaWYKICAgICB0aGUgYnJhbmNoIGlzIG5vdCB0YWtlbi4gIFdoZW4gJ0lOU05fQU5OVUxMRURfQlJBTkNIX1AnIGlzIG5vdCBzZXQsCiAgICAgdGhpcyBpbnNuIHdpbGwgYWx3YXlzIGJlIGV4ZWN1dGVkLiAgU3RvcmVkIGluIHRoZSAnaW5fc3RydWN0JyBmaWVsZAogICAgIGFuZCBwcmludGVkIGFzICcvcycuCgonTEFCRUxfUFJFU0VSVkVfUCAoWCknCiAgICAgSW4gYSAnY29kZV9sYWJlbCcgb3IgJ25vdGUnLCBpbmRpY2F0ZXMgdGhhdCB0aGUgbGFiZWwgaXMgcmVmZXJlbmNlZAogICAgIGJ5IGNvZGUgb3IgZGF0YSBub3QgdmlzaWJsZSB0byB0aGUgUlRMIG9mIGEgZ2l2ZW4gZnVuY3Rpb24uICBMYWJlbHMKICAgICByZWZlcmVuY2VkIGJ5IGEgbm9uLWxvY2FsIGdvdG8gd2lsbCBoYXZlIHRoaXMgYml0IHNldC4gIFN0b3JlZCBpbgogICAgIHRoZSAnaW5fc3RydWN0JyBmaWVsZCBhbmQgcHJpbnRlZCBhcyAnL3MnLgoKJ0xBQkVMX1JFRl9OT05MT0NBTF9QIChYKScKICAgICBJbiAnbGFiZWxfcmVmJyBhbmQgJ3JlZ19sYWJlbCcgZXhwcmVzc2lvbnMsIG5vbnplcm8gaWYgdGhpcyBpcyBhCiAgICAgcmVmZXJlbmNlIHRvIGEgbm9uLWxvY2FsIGxhYmVsLiAgU3RvcmVkIGluIHRoZSAndm9sYXRpbCcgZmllbGQgYW5kCiAgICAgcHJpbnRlZCBhcyAnL3YnLgoKJ01FTV9JTl9TVFJVQ1RfUCAoWCknCiAgICAgSW4gJ21lbScgZXhwcmVzc2lvbnMsIG5vbnplcm8gZm9yIHJlZmVyZW5jZSB0byBhbiBlbnRpcmUgc3RydWN0dXJlLAogICAgIHVuaW9uIG9yIGFycmF5LCBvciB0byBhIGNvbXBvbmVudCBvZiBvbmUuICBaZXJvIGZvciByZWZlcmVuY2VzIHRvIGEKICAgICBzY2FsYXIgdmFyaWFibGUgb3IgdGhyb3VnaCBhIHBvaW50ZXIgdG8gYSBzY2FsYXIuICBJZiBib3RoIHRoaXMKICAgICBmbGFnIGFuZCAnTUVNX1NDQUxBUl9QJyBhcmUgY2xlYXIsIHRoZW4gd2UgZG9uJ3Qga25vdyB3aGV0aGVyIHRoaXMKICAgICAnbWVtJyBpcyBpbiBhIHN0cnVjdHVyZSBvciBub3QuICBCb3RoIGZsYWdzIHNob3VsZCBuZXZlciBiZQogICAgIHNpbXVsdGFuZW91c2x5IHNldC4gIFN0b3JlZCBpbiB0aGUgJ2luX3N0cnVjdCcgZmllbGQgYW5kIHByaW50ZWQgYXMKICAgICAnL3MnLgoKJ01FTV9LRUVQX0FMSUFTX1NFVF9QIChYKScKICAgICBJbiAnbWVtJyBleHByZXNzaW9ucywgMSBpZiB3ZSBzaG91bGQga2VlcCB0aGUgYWxpYXMgc2V0IGZvciB0aGlzCiAgICAgbWVtIHVuY2hhbmdlZCB3aGVuIHdlIGFjY2VzcyBhIGNvbXBvbmVudC4gIFNldCB0byAxLCBmb3IgZXhhbXBsZSwKICAgICB3aGVuIHdlIGFyZSBhbHJlYWR5IGluIGEgbm9uLWFkZHJlc3NhYmxlIGNvbXBvbmVudCBvZiBhbiBhZ2dyZWdhdGUuCiAgICAgU3RvcmVkIGluIHRoZSAnanVtcCcgZmllbGQgYW5kIHByaW50ZWQgYXMgJy9qJy4KCidNRU1fU0NBTEFSX1AgKFgpJwogICAgIEluICdtZW0nIGV4cHJlc3Npb25zLCBub256ZXJvIGZvciByZWZlcmVuY2UgdG8gYSBzY2FsYXIga25vd24gbm90CiAgICAgdG8gYmUgYSBtZW1iZXIgb2YgYSBzdHJ1Y3R1cmUsIHVuaW9uLCBvciBhcnJheS4gIFplcm8gZm9yIHN1Y2gKICAgICByZWZlcmVuY2VzIGFuZCBmb3IgaW5kaXJlY3Rpb25zIHRocm91Z2ggcG9pbnRlcnMsIGV2ZW4gcG9pbnRlcnMKICAgICBwb2ludGluZyB0byBzY2FsYXIgdHlwZXMuICBJZiBib3RoIHRoaXMgZmxhZyBhbmQgJ01FTV9JTl9TVFJVQ1RfUCcKICAgICBhcmUgY2xlYXIsIHRoZW4gd2UgZG9uJ3Qga25vdyB3aGV0aGVyIHRoaXMgJ21lbScgaXMgaW4gYSBzdHJ1Y3R1cmUKICAgICBvciBub3QuICBCb3RoIGZsYWdzIHNob3VsZCBuZXZlciBiZSBzaW11bHRhbmVvdXNseSBzZXQuICBTdG9yZWQgaW4KICAgICB0aGUgJ3JldHVybl92YWwnIGZpZWxkIGFuZCBwcmludGVkIGFzICcvaScuCgonTUVNX1ZPTEFUSUxFX1AgKFgpJwogICAgIEluICdtZW0nLCAnYXNtX29wZXJhbmRzJywgYW5kICdhc21faW5wdXQnIGV4cHJlc3Npb25zLCBub256ZXJvIGZvcgogICAgIHZvbGF0aWxlIG1lbW9yeSByZWZlcmVuY2VzLiAgU3RvcmVkIGluIHRoZSAndm9sYXRpbCcgZmllbGQgYW5kCiAgICAgcHJpbnRlZCBhcyAnL3YnLgoKJ01FTV9OT1RSQVBfUCAoWCknCiAgICAgSW4gJ21lbScsIG5vbnplcm8gZm9yIG1lbW9yeSByZWZlcmVuY2VzIHRoYXQgd2lsbCBub3QgdHJhcC4gIFN0b3JlZAogICAgIGluIHRoZSAnY2FsbCcgZmllbGQgYW5kIHByaW50ZWQgYXMgJy9jJy4KCidNRU1fUE9JTlRFUiAoWCknCiAgICAgTm9uemVybyBpbiBhICdtZW0nIGlmIHRoZSBtZW1vcnkgcmVmZXJlbmNlIGhvbGRzIGEgcG9pbnRlci4gIFN0b3JlZAogICAgIGluIHRoZSAnZnJhbWVfcmVsYXRlZCcgZmllbGQgYW5kIHByaW50ZWQgYXMgJy9mJy4KCidSRUdfRlVOQ1RJT05fVkFMVUVfUCAoWCknCiAgICAgTm9uemVybyBpbiBhICdyZWcnIGlmIGl0IGlzIHRoZSBwbGFjZSBpbiB3aGljaCB0aGlzIGZ1bmN0aW9uJ3MKICAgICB2YWx1ZSBpcyBnb2luZyB0byBiZSByZXR1cm5lZC4gIChUaGlzIGhhcHBlbnMgb25seSBpbiBhIGhhcmQKICAgICByZWdpc3Rlci4pICBTdG9yZWQgaW4gdGhlICdyZXR1cm5fdmFsJyBmaWVsZCBhbmQgcHJpbnRlZCBhcyAnL2knLgoKJ1JFR19QT0lOVEVSIChYKScKICAgICBOb256ZXJvIGluIGEgJ3JlZycgaWYgdGhlIHJlZ2lzdGVyIGhvbGRzIGEgcG9pbnRlci4gIFN0b3JlZCBpbiB0aGUKICAgICAnZnJhbWVfcmVsYXRlZCcgZmllbGQgYW5kIHByaW50ZWQgYXMgJy9mJy4KCidSRUdfVVNFUlZBUl9QIChYKScKICAgICBJbiBhICdyZWcnLCBub256ZXJvIGlmIGl0IGNvcnJlc3BvbmRzIHRvIGEgdmFyaWFibGUgcHJlc2VudCBpbiB0aGUKICAgICB1c2VyJ3Mgc291cmNlIGNvZGUuICBaZXJvIGZvciB0ZW1wb3JhcmllcyBnZW5lcmF0ZWQgaW50ZXJuYWxseSBieQogICAgIHRoZSBjb21waWxlci4gIFN0b3JlZCBpbiB0aGUgJ3ZvbGF0aWwnIGZpZWxkIGFuZCBwcmludGVkIGFzICcvdicuCgogICAgIFRoZSBzYW1lIGhhcmQgcmVnaXN0ZXIgbWF5IGJlIHVzZWQgYWxzbyBmb3IgY29sbGVjdGluZyB0aGUgdmFsdWVzCiAgICAgb2YgZnVuY3Rpb25zIGNhbGxlZCBieSB0aGlzIG9uZSwgYnV0ICdSRUdfRlVOQ1RJT05fVkFMVUVfUCcgaXMgemVybwogICAgIGluIHRoaXMga2luZCBvZiB1c2UuCgonUlRYX0ZSQU1FX1JFTEFURURfUCAoWCknCiAgICAgTm9uemVybyBpbiBhbiAnaW5zbicsICdjYWxsX2luc24nLCAnanVtcF9pbnNuJywgJ2JhcnJpZXInLCBvciAnc2V0JwogICAgIHdoaWNoIGlzIHBhcnQgb2YgYSBmdW5jdGlvbiBwcm9sb2d1ZSBhbmQgc2V0cyB0aGUgc3RhY2sgcG9pbnRlciwKICAgICBzZXRzIHRoZSBmcmFtZSBwb2ludGVyLCBvciBzYXZlcyBhIHJlZ2lzdGVyLiAgVGhpcyBmbGFnIHNob3VsZCBhbHNvCiAgICAgYmUgc2V0IG9uIGFuIGluc3RydWN0aW9uIHRoYXQgc2V0cyB1cCBhIHRlbXBvcmFyeSByZWdpc3RlciB0byB1c2UKICAgICBpbiBwbGFjZSBvZiB0aGUgZnJhbWUgcG9pbnRlci4gIFN0b3JlZCBpbiB0aGUgJ2ZyYW1lX3JlbGF0ZWQnIGZpZWxkCiAgICAgYW5kIHByaW50ZWQgYXMgJy9mJy4KCiAgICAgSW4gcGFydGljdWxhciwgb24gUklTQyB0YXJnZXRzIHdoZXJlIHRoZXJlIGFyZSBsaW1pdHMgb24gdGhlIHNpemVzCiAgICAgb2YgaW1tZWRpYXRlIGNvbnN0YW50cywgaXQgaXMgc29tZXRpbWVzIGltcG9zc2libGUgdG8gcmVhY2ggdGhlCiAgICAgcmVnaXN0ZXIgc2F2ZSBhcmVhIGRpcmVjdGx5IGZyb20gdGhlIHN0YWNrIHBvaW50ZXIuICBJbiB0aGF0IGNhc2UsCiAgICAgYSB0ZW1wb3JhcnkgcmVnaXN0ZXIgaXMgdXNlZCB0aGF0IGlzIG5lYXIgZW5vdWdoIHRvIHRoZSByZWdpc3RlcgogICAgIHNhdmUgYXJlYSwgYW5kIHRoZSBDYW5vbmljYWwgRnJhbWUgQWRkcmVzcywgaS5lLiwgRFdBUkYyJ3MgbG9naWNhbAogICAgIGZyYW1lIHBvaW50ZXIsIHJlZ2lzdGVyIG11c3QgKHRlbXBvcmFyaWx5KSBiZSBjaGFuZ2VkIHRvIGJlIHRoaXMKICAgICB0ZW1wb3JhcnkgcmVnaXN0ZXIuICBTbywgdGhlIGluc3RydWN0aW9uIHRoYXQgc2V0cyB0aGlzIHRlbXBvcmFyeQogICAgIHJlZ2lzdGVyIG11c3QgYmUgbWFya2VkIGFzICdSVFhfRlJBTUVfUkVMQVRFRF9QJy4KCiAgICAgSWYgdGhlIG1hcmtlZCBpbnN0cnVjdGlvbiBpcyBvdmVybHkgY29tcGxleCAoZGVmaW5lZCBpbiB0ZXJtcyBvZgogICAgIHdoYXQgJ2R3YXJmMm91dF9mcmFtZV9kZWJ1Z19leHByJyBjYW4gaGFuZGxlKSwgeW91IHdpbGwgYWxzbyBoYXZlCiAgICAgdG8gY3JlYXRlIGEgJ1JFR19GUkFNRV9SRUxBVEVEX0VYUFInIG5vdGUgYW5kIGF0dGFjaCBpdCB0byB0aGUKICAgICBpbnN0cnVjdGlvbi4gIFRoaXMgbm90ZSBzaG91bGQgY29udGFpbiBhIHNpbXBsZSBleHByZXNzaW9uIG9mIHRoZQogICAgIGNvbXB1dGF0aW9uIHBlcmZvcm1lZCBieSB0aGlzIGluc3RydWN0aW9uLCBpLmUuLCBvbmUgdGhhdAogICAgICdkd2FyZjJvdXRfZnJhbWVfZGVidWdfZXhwcicgY2FuIGhhbmRsZS4KCiAgICAgVGhpcyBmbGFnIGlzIHJlcXVpcmVkIGZvciBleGNlcHRpb24gaGFuZGxpbmcgc3VwcG9ydCBvbiB0YXJnZXRzCiAgICAgd2l0aCBSVEwgcHJvbG9ndWVzLgoKJ01FTV9SRUFET05MWV9QIChYKScKICAgICBOb256ZXJvIGluIGEgJ21lbScsIGlmIHRoZSBtZW1vcnkgaXMgc3RhdGljYWxseSBhbGxvY2F0ZWQgYW5kCiAgICAgcmVhZC1vbmx5LgoKICAgICBSZWFkLW9ubHkgaW4gdGhpcyBjb250ZXh0IG1lYW5zIG5ldmVyIG1vZGlmaWVkIGR1cmluZyB0aGUgbGlmZXRpbWUKICAgICBvZiB0aGUgcHJvZ3JhbSwgbm90IG5lY2Vzc2FyaWx5IGluIFJPTSBvciBpbiB3cml0ZS1kaXNhYmxlZCBwYWdlcy4KICAgICBBIGNvbW1vbiBleGFtcGxlIG9mIHRoZSBsYXRlciBpcyBhIHNoYXJlZCBsaWJyYXJ5J3MgZ2xvYmFsIG9mZnNldAogICAgIHRhYmxlLiAgVGhpcyB0YWJsZSBpcyBpbml0aWFsaXplZCBieSB0aGUgcnVudGltZSBsb2FkZXIsIHNvIHRoZQogICAgIG1lbW9yeSBpcyB0ZWNobmljYWxseSB3cml0YWJsZSwgYnV0IGFmdGVyIGNvbnRyb2wgaXMgdHJhbnNmZXJlZAogICAgIGZyb20gdGhlIHJ1bnRpbWUgbG9hZGVyIHRvIHRoZSBhcHBsaWNhdGlvbiwgdGhpcyBtZW1vcnkgd2lsbCBuZXZlcgogICAgIGJlIHN1YnNlcXVlbnRseSBtb2RpZmllZC4KCiAgICAgU3RvcmVkIGluIHRoZSAndW5jaGFuZ2luZycgZmllbGQgYW5kIHByaW50ZWQgYXMgJy91Jy4KCidTQ0hFRF9HUk9VUF9QIChYKScKICAgICBEdXJpbmcgaW5zdHJ1Y3Rpb24gc2NoZWR1bGluZywgaW4gYW4gJ2luc24nLCAnY2FsbF9pbnNuJyBvcgogICAgICdqdW1wX2luc24nLCBpbmRpY2F0ZXMgdGhhdCB0aGUgcHJldmlvdXMgaW5zbiBtdXN0IGJlIHNjaGVkdWxlZAogICAgIHRvZ2V0aGVyIHdpdGggdGhpcyBpbnNuLiAgVGhpcyBpcyB1c2VkIHRvIGVuc3VyZSB0aGF0IGNlcnRhaW4KICAgICBncm91cHMgb2YgaW5zdHJ1Y3Rpb25zIHdpbGwgbm90IGJlIHNwbGl0IHVwIGJ5IHRoZSBpbnN0cnVjdGlvbgogICAgIHNjaGVkdWxpbmcgcGFzcywgZm9yIGV4YW1wbGUsICd1c2UnIGluc25zIGJlZm9yZSBhICdjYWxsX2luc24nIG1heQogICAgIG5vdCBiZSBzZXBhcmF0ZWQgZnJvbSB0aGUgJ2NhbGxfaW5zbicuICBTdG9yZWQgaW4gdGhlICdpbl9zdHJ1Y3QnCiAgICAgZmllbGQgYW5kIHByaW50ZWQgYXMgJy9zJy4KCidTRVRfSVNfUkVUVVJOX1AgKFgpJwogICAgIEZvciBhICdzZXQnLCBub256ZXJvIGlmIGl0IGlzIGZvciBhIHJldHVybi4gIFN0b3JlZCBpbiB0aGUgJ2p1bXAnCiAgICAgZmllbGQgYW5kIHByaW50ZWQgYXMgJy9qJy4KCidTSUJMSU5HX0NBTExfUCAoWCknCiAgICAgRm9yIGEgJ2NhbGxfaW5zbicsIG5vbnplcm8gaWYgdGhlIGluc24gaXMgYSBzaWJsaW5nIGNhbGwuICBTdG9yZWQKICAgICBpbiB0aGUgJ2p1bXAnIGZpZWxkIGFuZCBwcmludGVkIGFzICcvaicuCgonU1RSSU5HX1BPT0xfQUREUkVTU19QIChYKScKICAgICBGb3IgYSAnc3ltYm9sX3JlZicgZXhwcmVzc2lvbiwgbm9uemVybyBpZiBpdCBhZGRyZXNzZXMgdGhpcwogICAgIGZ1bmN0aW9uJ3Mgc3RyaW5nIGNvbnN0YW50IHBvb2wuICBTdG9yZWQgaW4gdGhlICdmcmFtZV9yZWxhdGVkJwogICAgIGZpZWxkIGFuZCBwcmludGVkIGFzICcvZicuCgonU1VCUkVHX1BST01PVEVEX1VOU0lHTkVEX1AgKFgpJwogICAgIFJldHVybnMgYSB2YWx1ZSBncmVhdGVyIHRoZW4gemVybyBmb3IgYSAnc3VicmVnJyB0aGF0IGhhcwogICAgICdTVUJSRUdfUFJPTU9URURfVkFSX1AnIG5vbnplcm8gaWYgdGhlIG9iamVjdCBiZWluZyByZWZlcmVuY2VkIGlzCiAgICAga2VwdCB6ZXJvLWV4dGVuZGVkLCB6ZXJvIGlmIGl0IGlzIGtlcHQgc2lnbi1leHRlbmRlZCwgYW5kIGxlc3MgdGhlbgogICAgIHplcm8gaWYgaXQgaXMgZXh0ZW5kZWQgc29tZSBvdGhlciB3YXkgdmlhIHRoZSAncHRyX2V4dGVuZCcKICAgICBpbnN0cnVjdGlvbi4gIFN0b3JlZCBpbiB0aGUgJ3VuY2hhbmdpbmcnIGZpZWxkIGFuZCAndm9sYXRpbCcgZmllbGQsCiAgICAgcHJpbnRlZCBhcyAnL3UnIGFuZCAnL3YnLiAgVGhpcyBtYWNybyBtYXkgb25seSBiZSB1c2VkIHRvIGdldCB0aGUKICAgICB2YWx1ZSBpdCBtYXkgbm90IGJlIHVzZWQgdG8gY2hhbmdlIHRoZSB2YWx1ZS4gIFVzZQogICAgICdTVUJSRUdfUFJPTU9URURfVU5TSUdORURfU0VUJyB0byBjaGFuZ2UgdGhlIHZhbHVlLgoKJ1NVQlJFR19QUk9NT1RFRF9VTlNJR05FRF9TRVQgKFgpJwogICAgIFNldCB0aGUgJ3VuY2hhbmdpbmcnIGFuZCAndm9sYXRpbCcgZmllbGRzIGluIGEgJ3N1YnJlZycgdG8gcmVmbGVjdAogICAgIHplcm8sIHNpZ24sIG9yIG90aGVyIGV4dGVuc2lvbi4gIElmICd2b2xhdGlsJyBpcyB6ZXJvLCB0aGVuCiAgICAgJ3VuY2hhbmdpbmcnIGFzIG5vbnplcm8gbWVhbnMgemVybyBleHRlbnNpb24gYW5kIGFzIHplcm8gbWVhbnMgc2lnbgogICAgIGV4dGVuc2lvbi4gIElmICd2b2xhdGlsJyBpcyBub256ZXJvIHRoZW4gc29tZSBvdGhlciB0eXBlIG9mCiAgICAgZXh0ZW5zaW9uIHdhcyBkb25lIHZpYSB0aGUgJ3B0cl9leHRlbmQnIGluc3RydWN0aW9uLgoKJ1NVQlJFR19QUk9NT1RFRF9WQVJfUCAoWCknCiAgICAgTm9uemVybyBpbiBhICdzdWJyZWcnIGlmIGl0IHdhcyBtYWRlIHdoZW4gYWNjZXNzaW5nIGFuIG9iamVjdCB0aGF0CiAgICAgd2FzIHByb21vdGVkIHRvIGEgd2lkZXIgbW9kZSBpbiBhY2NvcmQgd2l0aCB0aGUgJ1BST01PVEVEX01PREUnCiAgICAgbWFjaGluZSBkZXNjcmlwdGlvbiBtYWNybyAoKm5vdGUgU3RvcmFnZSBMYXlvdXQ6OikuICBJbiB0aGlzIGNhc2UsCiAgICAgdGhlIG1vZGUgb2YgdGhlICdzdWJyZWcnIGlzIHRoZSBkZWNsYXJlZCBtb2RlIG9mIHRoZSBvYmplY3QgYW5kIHRoZQogICAgIG1vZGUgb2YgJ1NVQlJFR19SRUcnIGlzIHRoZSBtb2RlIG9mIHRoZSByZWdpc3RlciB0aGF0IGhvbGRzIHRoZQogICAgIG9iamVjdC4gIFByb21vdGVkIHZhcmlhYmxlcyBhcmUgYWx3YXlzIGVpdGhlciBzaWduLSBvcgogICAgIHplcm8tZXh0ZW5kZWQgdG8gdGhlIHdpZGVyIG1vZGUgb24gZXZlcnkgYXNzaWdubWVudC4gIFN0b3JlZCBpbiB0aGUKICAgICAnaW5fc3RydWN0JyBmaWVsZCBhbmQgcHJpbnRlZCBhcyAnL3MnLgoKJ1NZTUJPTF9SRUZfVVNFRCAoWCknCiAgICAgSW4gYSAnc3ltYm9sX3JlZicsIGluZGljYXRlcyB0aGF0IFggaGFzIGJlZW4gdXNlZC4gIFRoaXMgaXMKICAgICBub3JtYWxseSBvbmx5IHVzZWQgdG8gZW5zdXJlIHRoYXQgWCBpcyBvbmx5IGRlY2xhcmVkIGV4dGVybmFsIG9uY2UuCiAgICAgU3RvcmVkIGluIHRoZSAndXNlZCcgZmllbGQuCgonU1lNQk9MX1JFRl9XRUFLIChYKScKICAgICBJbiBhICdzeW1ib2xfcmVmJywgaW5kaWNhdGVzIHRoYXQgWCBoYXMgYmVlbiBkZWNsYXJlZCB3ZWFrLiAgU3RvcmVkCiAgICAgaW4gdGhlICdyZXR1cm5fdmFsJyBmaWVsZCBhbmQgcHJpbnRlZCBhcyAnL2knLgoKJ1NZTUJPTF9SRUZfRkxBRyAoWCknCiAgICAgSW4gYSAnc3ltYm9sX3JlZicsIHRoaXMgaXMgdXNlZCBhcyBhIGZsYWcgZm9yIG1hY2hpbmUtc3BlY2lmaWMKICAgICBwdXJwb3Nlcy4gIFN0b3JlZCBpbiB0aGUgJ3ZvbGF0aWwnIGZpZWxkIGFuZCBwcmludGVkIGFzICcvdicuCgogICAgIE1vc3QgdXNlcyBvZiAnU1lNQk9MX1JFRl9GTEFHJyBhcmUgaGlzdG9yaWMgYW5kIG1heSBiZSBzdWJzdW1lZCBieQogICAgICdTWU1CT0xfUkVGX0ZMQUdTJy4gIENlcnRhaW5seSB1c2Ugb2YgJ1NZTUJPTF9SRUZfRkxBR1MnIGlzCiAgICAgbWFuZGF0b3J5IGlmIHRoZSB0YXJnZXQgcmVxdWlyZXMgbW9yZSB0aGFuIG9uZSBiaXQgb2Ygc3RvcmFnZS4KCiBUaGVzZSBhcmUgdGhlIGZpZWxkcyB0byB3aGljaCB0aGUgYWJvdmUgbWFjcm9zIHJlZmVyOgoKJ2NhbGwnCiAgICAgSW4gYSAnbWVtJywgMSBtZWFucyB0aGF0IHRoZSBtZW1vcnkgcmVmZXJlbmNlIHdpbGwgbm90IHRyYXAuCgogICAgIEluIGFuIFJUTCBkdW1wLCB0aGlzIGZsYWcgaXMgcmVwcmVzZW50ZWQgYXMgJy9jJy4KCidmcmFtZV9yZWxhdGVkJwogICAgIEluIGFuICdpbnNuJyBvciAnc2V0JyBleHByZXNzaW9uLCAxIG1lYW5zIHRoYXQgaXQgaXMgcGFydCBvZiBhCiAgICAgZnVuY3Rpb24gcHJvbG9ndWUgYW5kIHNldHMgdGhlIHN0YWNrIHBvaW50ZXIsIHNldHMgdGhlIGZyYW1lCiAgICAgcG9pbnRlciwgc2F2ZXMgYSByZWdpc3Rlciwgb3Igc2V0cyB1cCBhIHRlbXBvcmFyeSByZWdpc3RlciB0byB1c2UKICAgICBpbiBwbGFjZSBvZiB0aGUgZnJhbWUgcG9pbnRlci4KCiAgICAgSW4gJ3JlZycgZXhwcmVzc2lvbnMsIDEgbWVhbnMgdGhhdCB0aGUgcmVnaXN0ZXIgaG9sZHMgYSBwb2ludGVyLgoKICAgICBJbiAnbWVtJyBleHByZXNzaW9ucywgMSBtZWFucyB0aGF0IHRoZSBtZW1vcnkgcmVmZXJlbmNlIGhvbGRzIGEKICAgICBwb2ludGVyLgoKICAgICBJbiAnc3ltYm9sX3JlZicgZXhwcmVzc2lvbnMsIDEgbWVhbnMgdGhhdCB0aGUgcmVmZXJlbmNlIGFkZHJlc3NlcwogICAgIHRoaXMgZnVuY3Rpb24ncyBzdHJpbmcgY29uc3RhbnQgcG9vbC4KCiAgICAgSW4gYW4gUlRMIGR1bXAsIHRoaXMgZmxhZyBpcyByZXByZXNlbnRlZCBhcyAnL2YnLgoKJ2luX3N0cnVjdCcKICAgICBJbiAnbWVtJyBleHByZXNzaW9ucywgaXQgaXMgMSBpZiB0aGUgbWVtb3J5IGRhdHVtIHJlZmVycmVkIHRvIGlzCiAgICAgYWxsIG9yIHBhcnQgb2YgYSBzdHJ1Y3R1cmUgb3IgYXJyYXk7IDAgaWYgaXQgaXMgKG9yIG1pZ2h0IGJlKSBhCiAgICAgc2NhbGFyIHZhcmlhYmxlLiAgQSByZWZlcmVuY2UgdGhyb3VnaCBhIEMgcG9pbnRlciBoYXMgMCBiZWNhdXNlIHRoZQogICAgIHBvaW50ZXIgbWlnaHQgcG9pbnQgdG8gYSBzY2FsYXIgdmFyaWFibGUuICBUaGlzIGluZm9ybWF0aW9uIGFsbG93cwogICAgIHRoZSBjb21waWxlciB0byBkZXRlcm1pbmUgc29tZXRoaW5nIGFib3V0IHBvc3NpYmxlIGNhc2VzIG9mCiAgICAgYWxpYXNpbmcuCgogICAgIEluICdyZWcnIGV4cHJlc3Npb25zLCBpdCBpcyAxIGlmIHRoZSByZWdpc3RlciBoYXMgaXRzIGVudGlyZSBsaWZlCiAgICAgY29udGFpbmVkIHdpdGhpbiB0aGUgdGVzdCBleHByZXNzaW9uIG9mIHNvbWUgbG9vcC4KCiAgICAgSW4gJ3N1YnJlZycgZXhwcmVzc2lvbnMsIDEgbWVhbnMgdGhhdCB0aGUgJ3N1YnJlZycgaXMgYWNjZXNzaW5nIGFuCiAgICAgb2JqZWN0IHRoYXQgaGFzIGhhZCBpdHMgbW9kZSBwcm9tb3RlZCBmcm9tIGEgd2lkZXIgbW9kZS4KCiAgICAgSW4gJ2xhYmVsX3JlZicgZXhwcmVzc2lvbnMsIDEgbWVhbnMgdGhhdCB0aGUgcmVmZXJlbmNlZCBsYWJlbCBpcwogICAgIG91dHNpZGUgdGhlIGlubmVybW9zdCBsb29wIGNvbnRhaW5pbmcgdGhlIGluc24gaW4gd2hpY2ggdGhlCiAgICAgJ2xhYmVsX3JlZicgd2FzIGZvdW5kLgoKICAgICBJbiAnY29kZV9sYWJlbCcgZXhwcmVzc2lvbnMsIGl0IGlzIDEgaWYgdGhlIGxhYmVsIG1heSBuZXZlciBiZQogICAgIGRlbGV0ZWQuICBUaGlzIGlzIHVzZWQgZm9yIGxhYmVscyB3aGljaCBhcmUgdGhlIHRhcmdldCBvZiBub24tbG9jYWwKICAgICBnb3Rvcy4gIFN1Y2ggYSBsYWJlbCB0aGF0IHdvdWxkIGhhdmUgYmVlbiBkZWxldGVkIGlzIHJlcGxhY2VkIHdpdGgKICAgICBhICdub3RlJyBvZiB0eXBlICdOT1RFX0lOU05fREVMRVRFRF9MQUJFTCcuCgogICAgIEluIGFuICdpbnNuJyBkdXJpbmcgZGVhZC1jb2RlIGVsaW1pbmF0aW9uLCAxIG1lYW5zIHRoYXQgdGhlIGluc24gaXMKICAgICBkZWFkIGNvZGUuCgogICAgIEluIGFuICdpbnNuJyBvciAnanVtcF9pbnNuJyBkdXJpbmcgcmVvcmcgZm9yIGFuIGluc24gaW4gdGhlIGRlbGF5CiAgICAgc2xvdCBvZiBhIGJyYW5jaCwgMSBtZWFucyB0aGF0IHRoaXMgaW5zbiBpcyBmcm9tIHRoZSB0YXJnZXQgb2YgdGhlCiAgICAgYnJhbmNoLgoKICAgICBJbiBhbiAnaW5zbicgZHVyaW5nIGluc3RydWN0aW9uIHNjaGVkdWxpbmcsIDEgbWVhbnMgdGhhdCB0aGlzIGluc24KICAgICBtdXN0IGJlIHNjaGVkdWxlZCBhcyBwYXJ0IG9mIGEgZ3JvdXAgdG9nZXRoZXIgd2l0aCB0aGUgcHJldmlvdXMKICAgICBpbnNuLgoKICAgICBJbiBhbiBSVEwgZHVtcCwgdGhpcyBmbGFnIGlzIHJlcHJlc2VudGVkIGFzICcvcycuCgoncmV0dXJuX3ZhbCcKICAgICBJbiAncmVnJyBleHByZXNzaW9ucywgMSBtZWFucyB0aGUgcmVnaXN0ZXIgY29udGFpbnMgdGhlIHZhbHVlIHRvIGJlCiAgICAgcmV0dXJuZWQgYnkgdGhlIGN1cnJlbnQgZnVuY3Rpb24uICBPbiBtYWNoaW5lcyB0aGF0IHBhc3MgcGFyYW1ldGVycwogICAgIGluIHJlZ2lzdGVycywgdGhlIHNhbWUgcmVnaXN0ZXIgbnVtYmVyIG1heSBiZSB1c2VkIGZvciBwYXJhbWV0ZXJzCiAgICAgYXMgd2VsbCwgYnV0IHRoaXMgZmxhZyBpcyBub3Qgc2V0IG9uIHN1Y2ggdXNlcy4KCiAgICAgSW4gJ21lbScgZXhwcmVzc2lvbnMsIDEgbWVhbnMgdGhlIG1lbW9yeSByZWZlcmVuY2UgaXMgdG8gYSBzY2FsYXIKICAgICBrbm93biBub3QgdG8gYmUgYSBtZW1iZXIgb2YgYSBzdHJ1Y3R1cmUsIHVuaW9uLCBvciBhcnJheS4KCiAgICAgSW4gJ3N5bWJvbF9yZWYnIGV4cHJlc3Npb25zLCAxIG1lYW5zIHRoZSByZWZlcmVuY2VkIHN5bWJvbCBpcyB3ZWFrLgoKICAgICBJbiBhbiBSVEwgZHVtcCwgdGhpcyBmbGFnIGlzIHJlcHJlc2VudGVkIGFzICcvaScuCgonanVtcCcKICAgICBJbiBhICdtZW0nIGV4cHJlc3Npb24sIDEgbWVhbnMgd2Ugc2hvdWxkIGtlZXAgdGhlIGFsaWFzIHNldCBmb3IKICAgICB0aGlzIG1lbSB1bmNoYW5nZWQgd2hlbiB3ZSBhY2Nlc3MgYSBjb21wb25lbnQuCgogICAgIEluIGEgJ3NldCcsIDEgbWVhbnMgaXQgaXMgZm9yIGEgcmV0dXJuLgoKICAgICBJbiBhICdjYWxsX2luc24nLCAxIG1lYW5zIGl0IGlzIGEgc2libGluZyBjYWxsLgoKICAgICBJbiBhbiBSVEwgZHVtcCwgdGhpcyBmbGFnIGlzIHJlcHJlc2VudGVkIGFzICcvaicuCgondW5jaGFuZ2luZycKICAgICBJbiAncmVnJyBhbmQgJ21lbScgZXhwcmVzc2lvbnMsIDEgbWVhbnMgdGhhdCB0aGUgdmFsdWUgb2YgdGhlCiAgICAgZXhwcmVzc2lvbiBuZXZlciBjaGFuZ2VzLgoKICAgICBJbiAnc3VicmVnJyBleHByZXNzaW9ucywgaXQgaXMgMSBpZiB0aGUgJ3N1YnJlZycgcmVmZXJlbmNlcyBhbgogICAgIHVuc2lnbmVkIG9iamVjdCB3aG9zZSBtb2RlIGhhcyBiZWVuIHByb21vdGVkIHRvIGEgd2lkZXIgbW9kZS4KCiAgICAgSW4gYW4gJ2luc24nIG9yICdqdW1wX2luc24nIGluIHRoZSBkZWxheSBzbG90IG9mIGEgYnJhbmNoCiAgICAgaW5zdHJ1Y3Rpb24sIDEgbWVhbnMgYW4gYW5udWxsaW5nIGJyYW5jaCBzaG91bGQgYmUgdXNlZC4KCiAgICAgSW4gYSAnc3ltYm9sX3JlZicgZXhwcmVzc2lvbiwgMSBtZWFucyB0aGF0IHRoaXMgc3ltYm9sIGFkZHJlc3NlcwogICAgIHNvbWV0aGluZyBpbiB0aGUgcGVyLWZ1bmN0aW9uIGNvbnN0YW50IHBvb2wuCgogICAgIEluIGEgJ2NhbGxfaW5zbicsICdub3RlJywgb3IgYW4gJ2V4cHJfbGlzdCcgb2Ygbm90ZXMsIDEgbWVhbnMgdGhhdAogICAgIHRoaXMgaW5zdHJ1Y3Rpb24gaXMgYSBjYWxsIHRvIGEgY29uc3Qgb3IgcHVyZSBmdW5jdGlvbi4KCiAgICAgSW4gYW4gUlRMIGR1bXAsIHRoaXMgZmxhZyBpcyByZXByZXNlbnRlZCBhcyAnL3UnLgoKJ3VzZWQnCiAgICAgVGhpcyBmbGFnIGlzIHVzZWQgZGlyZWN0bHkgKHdpdGhvdXQgYW4gYWNjZXNzIG1hY3JvKSBhdCB0aGUgZW5kIG9mCiAgICAgUlRMIGdlbmVyYXRpb24gZm9yIGEgZnVuY3Rpb24sIHRvIGNvdW50IHRoZSBudW1iZXIgb2YgdGltZXMgYW4KICAgICBleHByZXNzaW9uIGFwcGVhcnMgaW4gaW5zbnMuICBFeHByZXNzaW9ucyB0aGF0IGFwcGVhciBtb3JlIHRoYW4KICAgICBvbmNlIGFyZSBjb3BpZWQsIGFjY29yZGluZyB0byB0aGUgcnVsZXMgZm9yIHNoYXJlZCBzdHJ1Y3R1cmUgKCpub3RlCiAgICAgU2hhcmluZzo6KS4KCiAgICAgRm9yIGEgJ3JlZycsIGl0IGlzIHVzZWQgZGlyZWN0bHkgKHdpdGhvdXQgYW4gYWNjZXNzIG1hY3JvKSBieSB0aGUKICAgICBsZWFmIHJlZ2lzdGVyIHJlbnVtYmVyaW5nIGNvZGUgdG8gZW5zdXJlIHRoYXQgZWFjaCByZWdpc3RlciBpcyBvbmx5CiAgICAgcmVudW1iZXJlZCBvbmNlLgoKICAgICBJbiBhICdzeW1ib2xfcmVmJywgaXQgaW5kaWNhdGVzIHRoYXQgYW4gZXh0ZXJuYWwgZGVjbGFyYXRpb24gZm9yCiAgICAgdGhlIHN5bWJvbCBoYXMgYWxyZWFkeSBiZWVuIHdyaXR0ZW4uCgondm9sYXRpbCcKICAgICBJbiBhICdtZW0nLCAnYXNtX29wZXJhbmRzJywgb3IgJ2FzbV9pbnB1dCcgZXhwcmVzc2lvbiwgaXQgaXMgMSBpZgogICAgIHRoZSBtZW1vcnkgcmVmZXJlbmNlIGlzIHZvbGF0aWxlLiAgVm9sYXRpbGUgbWVtb3J5IHJlZmVyZW5jZXMgbWF5CiAgICAgbm90IGJlIGRlbGV0ZWQsIHJlb3JkZXJlZCBvciBjb21iaW5lZC4KCiAgICAgSW4gYSAnc3ltYm9sX3JlZicgZXhwcmVzc2lvbiwgaXQgaXMgdXNlZCBmb3IgbWFjaGluZS1zcGVjaWZpYwogICAgIHB1cnBvc2VzLgoKICAgICBJbiBhICdyZWcnIGV4cHJlc3Npb24sIGl0IGlzIDEgaWYgdGhlIHZhbHVlIGlzIGEgdXNlci1sZXZlbAogICAgIHZhcmlhYmxlLiAgMCBpbmRpY2F0ZXMgYW4gaW50ZXJuYWwgY29tcGlsZXIgdGVtcG9yYXJ5LgoKICAgICBJbiBhbiAnaW5zbicsIDEgbWVhbnMgdGhlIGluc24gaGFzIGJlZW4gZGVsZXRlZC4KCiAgICAgSW4gJ2xhYmVsX3JlZicgYW5kICdyZWdfbGFiZWwnIGV4cHJlc3Npb25zLCAxIG1lYW5zIGEgcmVmZXJlbmNlIHRvCiAgICAgYSBub24tbG9jYWwgbGFiZWwuCgogICAgIEluIGFuIFJUTCBkdW1wLCB0aGlzIGZsYWcgaXMgcmVwcmVzZW50ZWQgYXMgJy92Jy4KCh8KRmlsZTogZ2NjaW50LmluZm8sICBOb2RlOiBNYWNoaW5lIE1vZGVzLCAgTmV4dDogQ29uc3RhbnRzLCAgUHJldjogRmxhZ3MsICBVcDogUlRMCgoxMi42IE1hY2hpbmUgTW9kZXMKPT09PT09PT09PT09PT09PT09CgpBIG1hY2hpbmUgbW9kZSBkZXNjcmliZXMgYSBzaXplIG9mIGRhdGEgb2JqZWN0IGFuZCB0aGUgcmVwcmVzZW50YXRpb24KdXNlZCBmb3IgaXQuICBJbiB0aGUgQyBjb2RlLCBtYWNoaW5lIG1vZGVzIGFyZSByZXByZXNlbnRlZCBieSBhbgplbnVtZXJhdGlvbiB0eXBlLCAnZW51bSBtYWNoaW5lX21vZGUnLCBkZWZpbmVkIGluICdtYWNobW9kZS5kZWYnLiAgRWFjaApSVEwgZXhwcmVzc2lvbiBoYXMgcm9vbSBmb3IgYSBtYWNoaW5lIG1vZGUgYW5kIHNvIGRvIGNlcnRhaW4ga2luZHMgb2YKdHJlZSBleHByZXNzaW9ucyAoZGVjbGFyYXRpb25zIGFuZCB0eXBlcywgdG8gYmUgcHJlY2lzZSkuCgogSW4gZGVidWdnaW5nIGR1bXBzIGFuZCBtYWNoaW5lIGRlc2NyaXB0aW9ucywgdGhlIG1hY2hpbmUgbW9kZSBvZiBhbiBSVEwKZXhwcmVzc2lvbiBpcyB3cml0dGVuIGFmdGVyIHRoZSBleHByZXNzaW9uIGNvZGUgd2l0aCBhIGNvbG9uIHRvIHNlcGFyYXRlCnRoZW0uICBUaGUgbGV0dGVycyAnbW9kZScgd2hpY2ggYXBwZWFyIGF0IHRoZSBlbmQgb2YgZWFjaCBtYWNoaW5lIG1vZGUKbmFtZSBhcmUgb21pdHRlZC4gIEZvciBleGFtcGxlLCAnKHJlZzpTSSAzOCknIGlzIGEgJ3JlZycgZXhwcmVzc2lvbiB3aXRoCm1hY2hpbmUgbW9kZSAnU0ltb2RlJy4gIElmIHRoZSBtb2RlIGlzICdWT0lEbW9kZScsIGl0IGlzIG5vdCB3cml0dGVuIGF0CmFsbC4KCiBIZXJlIGlzIGEgdGFibGUgb2YgbWFjaGluZSBtb2Rlcy4gIFRoZSB0ZXJtICJieXRlIiBiZWxvdyByZWZlcnMgdG8gYW4Kb2JqZWN0IG9mICdCSVRTX1BFUl9VTklUJyBiaXRzICgqbm90ZSBTdG9yYWdlIExheW91dDo6KS4KCidCSW1vZGUnCiAgICAgIkJpdCIgbW9kZSByZXByZXNlbnRzIGEgc2luZ2xlIGJpdCwgZm9yIHByZWRpY2F0ZSByZWdpc3RlcnMuCgonUUltb2RlJwogICAgICJRdWFydGVyLUludGVnZXIiIG1vZGUgcmVwcmVzZW50cyBhIHNpbmdsZSBieXRlIHRyZWF0ZWQgYXMgYW4KICAgICBpbnRlZ2VyLgoKJ0hJbW9kZScKICAgICAiSGFsZi1JbnRlZ2VyIiBtb2RlIHJlcHJlc2VudHMgYSB0d28tYnl0ZSBpbnRlZ2VyLgoKJ1BTSW1vZGUnCiAgICAgIlBhcnRpYWwgU2luZ2xlIEludGVnZXIiIG1vZGUgcmVwcmVzZW50cyBhbiBpbnRlZ2VyIHdoaWNoIG9jY3VwaWVzCiAgICAgZm91ciBieXRlcyBidXQgd2hpY2ggZG9lc24ndCByZWFsbHkgdXNlIGFsbCBmb3VyLiAgT24gc29tZQogICAgIG1hY2hpbmVzLCB0aGlzIGlzIHRoZSByaWdodCBtb2RlIHRvIHVzZSBmb3IgcG9pbnRlcnMuCgonU0ltb2RlJwogICAgICJTaW5nbGUgSW50ZWdlciIgbW9kZSByZXByZXNlbnRzIGEgZm91ci1ieXRlIGludGVnZXIuCgonUERJbW9kZScKICAgICAiUGFydGlhbCBEb3VibGUgSW50ZWdlciIgbW9kZSByZXByZXNlbnRzIGFuIGludGVnZXIgd2hpY2ggb2NjdXBpZXMKICAgICBlaWdodCBieXRlcyBidXQgd2hpY2ggZG9lc24ndCByZWFsbHkgdXNlIGFsbCBlaWdodC4gIE9uIHNvbWUKICAgICBtYWNoaW5lcywgdGhpcyBpcyB0aGUgcmlnaHQgbW9kZSB0byB1c2UgZm9yIGNlcnRhaW4gcG9pbnRlcnMuCgonREltb2RlJwogICAgICJEb3VibGUgSW50ZWdlciIgbW9kZSByZXByZXNlbnRzIGFuIGVpZ2h0LWJ5dGUgaW50ZWdlci4KCidUSW1vZGUnCiAgICAgIlRldHJhIEludGVnZXIiICg/KSAgbW9kZSByZXByZXNlbnRzIGEgc2l4dGVlbi1ieXRlIGludGVnZXIuCgonT0ltb2RlJwogICAgICJPY3RhIEludGVnZXIiICg/KSAgbW9kZSByZXByZXNlbnRzIGEgdGhpcnR5LXR3by1ieXRlIGludGVnZXIuCgonUUZtb2RlJwogICAgICJRdWFydGVyLUZsb2F0aW5nIiBtb2RlIHJlcHJlc2VudHMgYSBxdWFydGVyLXByZWNpc2lvbiAoc2luZ2xlCiAgICAgYnl0ZSkgZmxvYXRpbmcgcG9pbnQgbnVtYmVyLgoKJ0hGbW9kZScKICAgICAiSGFsZi1GbG9hdGluZyIgbW9kZSByZXByZXNlbnRzIGEgaGFsZi1wcmVjaXNpb24gKHR3byBieXRlKQogICAgIGZsb2F0aW5nIHBvaW50IG51bWJlci4KCidUUUZtb2RlJwogICAgICJUaHJlZS1RdWFydGVyLUZsb2F0aW5nIiAoPykgIG1vZGUgcmVwcmVzZW50cyBhCiAgICAgdGhyZWUtcXVhcnRlci1wcmVjaXNpb24gKHRocmVlIGJ5dGUpIGZsb2F0aW5nIHBvaW50IG51bWJlci4KCidTRm1vZGUnCiAgICAgIlNpbmdsZSBGbG9hdGluZyIgbW9kZSByZXByZXNlbnRzIGEgZm91ciBieXRlIGZsb2F0aW5nIHBvaW50CiAgICAgbnVtYmVyLiAgSW4gdGhlIGNvbW1vbiBjYXNlLCBvZiBhIHByb2Nlc3NvciB3aXRoIElFRUUgYXJpdGhtZXRpYwogICAgIGFuZCA4LWJpdCBieXRlcywgdGhpcyBpcyBhIHNpbmdsZS1wcmVjaXNpb24gSUVFRSBmbG9hdGluZyBwb2ludAogICAgIG51bWJlcjsgaXQgY2FuIGFsc28gYmUgdXNlZCBmb3IgZG91YmxlLXByZWNpc2lvbiAob24gcHJvY2Vzc29ycwogICAgIHdpdGggMTYtYml0IGJ5dGVzKSBhbmQgc2luZ2xlLXByZWNpc2lvbiBWQVggYW5kIElCTSB0eXBlcy4KCidERm1vZGUnCiAgICAgIkRvdWJsZSBGbG9hdGluZyIgbW9kZSByZXByZXNlbnRzIGFuIGVpZ2h0IGJ5dGUgZmxvYXRpbmcgcG9pbnQKICAgICBudW1iZXIuICBJbiB0aGUgY29tbW9uIGNhc2UsIG9mIGEgcHJvY2Vzc29yIHdpdGggSUVFRSBhcml0aG1ldGljCiAgICAgYW5kIDgtYml0IGJ5dGVzLCB0aGlzIGlzIGEgZG91YmxlLXByZWNpc2lvbiBJRUVFIGZsb2F0aW5nIHBvaW50CiAgICAgbnVtYmVyLgoKJ1hGbW9kZScKICAgICAiRXh0ZW5kZWQgRmxvYXRpbmciIG1vZGUgcmVwcmVzZW50cyBhbiBJRUVFIGV4dGVuZGVkIGZsb2F0aW5nIHBvaW50CiAgICAgbnVtYmVyLiAgVGhpcyBtb2RlIG9ubHkgaGFzIDgwIG1lYW5pbmdmdWwgYml0cyAodGVuIGJ5dGVzKS4gIFNvbWUKICAgICBwcm9jZXNzb3JzIHJlcXVpcmUgc3VjaCBudW1iZXJzIHRvIGJlIHBhZGRlZCB0byB0d2VsdmUgYnl0ZXMsCiAgICAgb3RoZXJzIHRvIHNpeHRlZW47IHRoaXMgbW9kZSBpcyB1c2VkIGZvciBlaXRoZXIuCgonU0Rtb2RlJwogICAgICJTaW5nbGUgRGVjaW1hbCBGbG9hdGluZyIgbW9kZSByZXByZXNlbnRzIGEgZm91ciBieXRlIGRlY2ltYWwKICAgICBmbG9hdGluZyBwb2ludCBudW1iZXIgKGFzIGRpc3RpbmN0IGZyb20gY29udmVudGlvbmFsIGJpbmFyeQogICAgIGZsb2F0aW5nIHBvaW50KS4KCidERG1vZGUnCiAgICAgIkRvdWJsZSBEZWNpbWFsIEZsb2F0aW5nIiBtb2RlIHJlcHJlc2VudHMgYW4gZWlnaHQgYnl0ZSBkZWNpbWFsCiAgICAgZmxvYXRpbmcgcG9pbnQgbnVtYmVyLgoKJ1REbW9kZScKICAgICAiVGV0cmEgRGVjaW1hbCBGbG9hdGluZyIgbW9kZSByZXByZXNlbnRzIGEgc2l4dGVlbiBieXRlIGRlY2ltYWwKICAgICBmbG9hdGluZyBwb2ludCBudW1iZXIgYWxsIDEyOCBvZiB3aG9zZSBiaXRzIGFyZSBtZWFuaW5nZnVsLgoKJ1RGbW9kZScKICAgICAiVGV0cmEgRmxvYXRpbmciIG1vZGUgcmVwcmVzZW50cyBhIHNpeHRlZW4gYnl0ZSBmbG9hdGluZyBwb2ludAogICAgIG51bWJlciBhbGwgMTI4IG9mIHdob3NlIGJpdHMgYXJlIG1lYW5pbmdmdWwuICBPbmUgY29tbW9uIHVzZSBpcyB0aGUKICAgICBJRUVFIHF1YWQtcHJlY2lzaW9uIGZvcm1hdC4KCidRUW1vZGUnCiAgICAgIlF1YXJ0ZXItRnJhY3Rpb25hbCIgbW9kZSByZXByZXNlbnRzIGEgc2luZ2xlIGJ5dGUgdHJlYXRlZCBhcyBhCiAgICAgc2lnbmVkIGZyYWN0aW9uYWwgbnVtYmVyLiAgVGhlIGRlZmF1bHQgZm9ybWF0IGlzICJzLjciLgoKJ0hRbW9kZScKICAgICAiSGFsZi1GcmFjdGlvbmFsIiBtb2RlIHJlcHJlc2VudHMgYSB0d28tYnl0ZSBzaWduZWQgZnJhY3Rpb25hbAogICAgIG51bWJlci4gIFRoZSBkZWZhdWx0IGZvcm1hdCBpcyAicy4xNSIuCgonU1Ftb2RlJwogICAgICJTaW5nbGUgRnJhY3Rpb25hbCIgbW9kZSByZXByZXNlbnRzIGEgZm91ci1ieXRlIHNpZ25lZCBmcmFjdGlvbmFsCiAgICAgbnVtYmVyLiAgVGhlIGRlZmF1bHQgZm9ybWF0IGlzICJzLjMxIi4KCidEUW1vZGUnCiAgICAgIkRvdWJsZSBGcmFjdGlvbmFsIiBtb2RlIHJlcHJlc2VudHMgYW4gZWlnaHQtYnl0ZSBzaWduZWQgZnJhY3Rpb25hbAogICAgIG51bWJlci4gIFRoZSBkZWZhdWx0IGZvcm1hdCBpcyAicy42MyIuCgonVFFtb2RlJwogICAgICJUZXRyYSBGcmFjdGlvbmFsIiBtb2RlIHJlcHJlc2VudHMgYSBzaXh0ZWVuLWJ5dGUgc2lnbmVkIGZyYWN0aW9uYWwKICAgICBudW1iZXIuICBUaGUgZGVmYXVsdCBmb3JtYXQgaXMgInMuMTI3Ii4KCidVUVFtb2RlJwogICAgICJVbnNpZ25lZCBRdWFydGVyLUZyYWN0aW9uYWwiIG1vZGUgcmVwcmVzZW50cyBhIHNpbmdsZSBieXRlIHRyZWF0ZWQKICAgICBhcyBhbiB1bnNpZ25lZCBmcmFjdGlvbmFsIG51bWJlci4gIFRoZSBkZWZhdWx0IGZvcm1hdCBpcyAiLjgiLgoKJ1VIUW1vZGUnCiAgICAgIlVuc2lnbmVkIEhhbGYtRnJhY3Rpb25hbCIgbW9kZSByZXByZXNlbnRzIGEgdHdvLWJ5dGUgdW5zaWduZWQKICAgICBmcmFjdGlvbmFsIG51bWJlci4gIFRoZSBkZWZhdWx0IGZvcm1hdCBpcyAiLjE2Ii4KCidVU1Ftb2RlJwogICAgICJVbnNpZ25lZCBTaW5nbGUgRnJhY3Rpb25hbCIgbW9kZSByZXByZXNlbnRzIGEgZm91ci1ieXRlIHVuc2lnbmVkCiAgICAgZnJhY3Rpb25hbCBudW1iZXIuICBUaGUgZGVmYXVsdCBmb3JtYXQgaXMgIi4zMiIuCgonVURRbW9kZScKICAgICAiVW5zaWduZWQgRG91YmxlIEZyYWN0aW9uYWwiIG1vZGUgcmVwcmVzZW50cyBhbiBlaWdodC1ieXRlIHVuc2lnbmVkCiAgICAgZnJhY3Rpb25hbCBudW1iZXIuICBUaGUgZGVmYXVsdCBmb3JtYXQgaXMgIi42NCIuCgonVVRRbW9kZScKICAgICAiVW5zaWduZWQgVGV0cmEgRnJhY3Rpb25hbCIgbW9kZSByZXByZXNlbnRzIGEgc2l4dGVlbi1ieXRlIHVuc2lnbmVkCiAgICAgZnJhY3Rpb25hbCBudW1iZXIuICBUaGUgZGVmYXVsdCBmb3JtYXQgaXMgIi4xMjgiLgoKJ0hBbW9kZScKICAgICAiSGFsZi1BY2N1bXVsYXRvciIgbW9kZSByZXByZXNlbnRzIGEgdHdvLWJ5dGUgc2lnbmVkIGFjY3VtdWxhdG9yLgogICAgIFRoZSBkZWZhdWx0IGZvcm1hdCBpcyAiczguNyIuCgonU0Ftb2RlJwogICAgICJTaW5nbGUgQWNjdW11bGF0b3IiIG1vZGUgcmVwcmVzZW50cyBhIGZvdXItYnl0ZSBzaWduZWQKICAgICBhY2N1bXVsYXRvci4gIFRoZSBkZWZhdWx0IGZvcm1hdCBpcyAiczE2LjE1Ii4KCidEQW1vZGUnCiAgICAgIkRvdWJsZSBBY2N1bXVsYXRvciIgbW9kZSByZXByZXNlbnRzIGFuIGVpZ2h0LWJ5dGUgc2lnbmVkCiAgICAgYWNjdW11bGF0b3IuICBUaGUgZGVmYXVsdCBmb3JtYXQgaXMgInMzMi4zMSIuCgonVEFtb2RlJwogICAgICJUZXRyYSBBY2N1bXVsYXRvciIgbW9kZSByZXByZXNlbnRzIGEgc2l4dGVlbi1ieXRlIHNpZ25lZAogICAgIGFjY3VtdWxhdG9yLiAgVGhlIGRlZmF1bHQgZm9ybWF0IGlzICJzNjQuNjMiLgoKJ1VIQW1vZGUnCiAgICAgIlVuc2lnbmVkIEhhbGYtQWNjdW11bGF0b3IiIG1vZGUgcmVwcmVzZW50cyBhIHR3by1ieXRlIHVuc2lnbmVkCiAgICAgYWNjdW11bGF0b3IuICBUaGUgZGVmYXVsdCBmb3JtYXQgaXMgIjguOCIuCgonVVNBbW9kZScKICAgICAiVW5zaWduZWQgU2luZ2xlIEFjY3VtdWxhdG9yIiBtb2RlIHJlcHJlc2VudHMgYSBmb3VyLWJ5dGUgdW5zaWduZWQKICAgICBhY2N1bXVsYXRvci4gIFRoZSBkZWZhdWx0IGZvcm1hdCBpcyAiMTYuMTYiLgoKJ1VEQW1vZGUnCiAgICAgIlVuc2lnbmVkIERvdWJsZSBBY2N1bXVsYXRvciIgbW9kZSByZXByZXNlbnRzIGFuIGVpZ2h0LWJ5dGUKICAgICB1bnNpZ25lZCBhY2N1bXVsYXRvci4gIFRoZSBkZWZhdWx0IGZvcm1hdCBpcyAiMzIuMzIiLgoKJ1VUQW1vZGUnCiAgICAgIlVuc2lnbmVkIFRldHJhIEFjY3VtdWxhdG9yIiBtb2RlIHJlcHJlc2VudHMgYSBzaXh0ZWVuLWJ5dGUKICAgICB1bnNpZ25lZCBhY2N1bXVsYXRvci4gIFRoZSBkZWZhdWx0IGZvcm1hdCBpcyAiNjQuNjQiLgoKJ0NDbW9kZScKICAgICAiQ29uZGl0aW9uIENvZGUiIG1vZGUgcmVwcmVzZW50cyB0aGUgdmFsdWUgb2YgYSBjb25kaXRpb24gY29kZSwKICAgICB3aGljaCBpcyBhIG1hY2hpbmUtc3BlY2lmaWMgc2V0IG9mIGJpdHMgdXNlZCB0byByZXByZXNlbnQgdGhlCiAgICAgcmVzdWx0IG9mIGEgY29tcGFyaXNvbiBvcGVyYXRpb24uICBPdGhlciBtYWNoaW5lLXNwZWNpZmljIG1vZGVzIG1heQogICAgIGFsc28gYmUgdXNlZCBmb3IgdGhlIGNvbmRpdGlvbiBjb2RlLiAgVGhlc2UgbW9kZXMgYXJlIG5vdCB1c2VkIG9uCiAgICAgbWFjaGluZXMgdGhhdCB1c2UgJ2NjMCcgKHNlZSAqbm90ZSBDb25kaXRpb24gQ29kZTo6KS4KCidCTEttb2RlJwogICAgICJCbG9jayIgbW9kZSByZXByZXNlbnRzIHZhbHVlcyB0aGF0IGFyZSBhZ2dyZWdhdGVzIHRvIHdoaWNoIG5vbmUgb2YKICAgICB0aGUgb3RoZXIgbW9kZXMgYXBwbHkuICBJbiBSVEwsIG9ubHkgbWVtb3J5IHJlZmVyZW5jZXMgY2FuIGhhdmUKICAgICB0aGlzIG1vZGUsIGFuZCBvbmx5IGlmIHRoZXkgYXBwZWFyIGluIHN0cmluZy1tb3ZlIG9yIHZlY3RvcgogICAgIGluc3RydWN0aW9ucy4gIE9uIG1hY2hpbmVzIHdoaWNoIGhhdmUgbm8gc3VjaCBpbnN0cnVjdGlvbnMsCiAgICAgJ0JMS21vZGUnIHdpbGwgbm90IGFwcGVhciBpbiBSVEwuCgonVk9JRG1vZGUnCiAgICAgVm9pZCBtb2RlIG1lYW5zIHRoZSBhYnNlbmNlIG9mIGEgbW9kZSBvciBhbiB1bnNwZWNpZmllZCBtb2RlLiAgRm9yCiAgICAgZXhhbXBsZSwgUlRMIGV4cHJlc3Npb25zIG9mIGNvZGUgJ2NvbnN0X2ludCcgaGF2ZSBtb2RlICdWT0lEbW9kZScKICAgICBiZWNhdXNlIHRoZXkgY2FuIGJlIHRha2VuIHRvIGhhdmUgd2hhdGV2ZXIgbW9kZSB0aGUgY29udGV4dAogICAgIHJlcXVpcmVzLiAgSW4gZGVidWdnaW5nIGR1bXBzIG9mIFJUTCwgJ1ZPSURtb2RlJyBpcyBleHByZXNzZWQgYnkKICAgICB0aGUgYWJzZW5jZSBvZiBhbnkgbW9kZS4KCidRQ21vZGUsIEhDbW9kZSwgU0Ntb2RlLCBEQ21vZGUsIFhDbW9kZSwgVENtb2RlJwogICAgIFRoZXNlIG1vZGVzIHN0YW5kIGZvciBhIGNvbXBsZXggbnVtYmVyIHJlcHJlc2VudGVkIGFzIGEgcGFpciBvZgogICAgIGZsb2F0aW5nIHBvaW50IHZhbHVlcy4gIFRoZSBmbG9hdGluZyBwb2ludCB2YWx1ZXMgYXJlIGluICdRRm1vZGUnLAogICAgICdIRm1vZGUnLCAnU0Ztb2RlJywgJ0RGbW9kZScsICdYRm1vZGUnLCBhbmQgJ1RGbW9kZScsIHJlc3BlY3RpdmVseS4KCidDUUltb2RlLCBDSEltb2RlLCBDU0ltb2RlLCBDREltb2RlLCBDVEltb2RlLCBDT0ltb2RlJwogICAgIFRoZXNlIG1vZGVzIHN0YW5kIGZvciBhIGNvbXBsZXggbnVtYmVyIHJlcHJlc2VudGVkIGFzIGEgcGFpciBvZgogICAgIGludGVnZXIgdmFsdWVzLiAgVGhlIGludGVnZXIgdmFsdWVzIGFyZSBpbiAnUUltb2RlJywgJ0hJbW9kZScsCiAgICAgJ1NJbW9kZScsICdESW1vZGUnLCAnVEltb2RlJywgYW5kICdPSW1vZGUnLCByZXNwZWN0aXZlbHkuCgogVGhlIG1hY2hpbmUgZGVzY3JpcHRpb24gZGVmaW5lcyAnUG1vZGUnIGFzIGEgQyBtYWNybyB3aGljaCBleHBhbmRzIGludG8KdGhlIG1hY2hpbmUgbW9kZSB1c2VkIGZvciBhZGRyZXNzZXMuICBOb3JtYWxseSB0aGlzIGlzIHRoZSBtb2RlIHdob3NlCnNpemUgaXMgJ0JJVFNfUEVSX1dPUkQnLCAnU0ltb2RlJyBvbiAzMi1iaXQgbWFjaGluZXMuCgogVGhlIG9ubHkgbW9kZXMgd2hpY2ggYSBtYWNoaW5lIGRlc2NyaXB0aW9uIG11c3Qgc3VwcG9ydCBhcmUgJ1FJbW9kZScsCmFuZCB0aGUgbW9kZXMgY29ycmVzcG9uZGluZyB0byAnQklUU19QRVJfV09SRCcsICdGTE9BVF9UWVBFX1NJWkUnIGFuZAonRE9VQkxFX1RZUEVfU0laRScuICBUaGUgY29tcGlsZXIgd2lsbCBhdHRlbXB0IHRvIHVzZSAnREltb2RlJyBmb3IKOC1ieXRlIHN0cnVjdHVyZXMgYW5kIHVuaW9ucywgYnV0IHRoaXMgY2FuIGJlIHByZXZlbnRlZCBieSBvdmVycmlkaW5nCnRoZSBkZWZpbml0aW9uIG9mICdNQVhfRklYRURfTU9ERV9TSVpFJy4gIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gaGF2ZQp0aGUgY29tcGlsZXIgdXNlICdUSW1vZGUnIGZvciAxNi1ieXRlIHN0cnVjdHVyZXMgYW5kIHVuaW9ucy4gIExpa2V3aXNlLAp5b3UgY2FuIGFycmFuZ2UgZm9yIHRoZSBDIHR5cGUgJ3Nob3J0IGludCcgdG8gYXZvaWQgdXNpbmcgJ0hJbW9kZScuCgogVmVyeSBmZXcgZXhwbGljaXQgcmVmZXJlbmNlcyB0byBtYWNoaW5lIG1vZGVzIHJlbWFpbiBpbiB0aGUgY29tcGlsZXIKYW5kIHRoZXNlIGZldyByZWZlcmVuY2VzIHdpbGwgc29vbiBiZSByZW1vdmVkLiAgSW5zdGVhZCwgdGhlIG1hY2hpbmUKbW9kZXMgYXJlIGRpdmlkZWQgaW50byBtb2RlIGNsYXNzZXMuICBUaGVzZSBhcmUgcmVwcmVzZW50ZWQgYnkgdGhlCmVudW1lcmF0aW9uIHR5cGUgJ2VudW0gbW9kZV9jbGFzcycgZGVmaW5lZCBpbiAnbWFjaG1vZGUuaCcuICBUaGUKcG9zc2libGUgbW9kZSBjbGFzc2VzIGFyZToKCidNT0RFX0lOVCcKICAgICBJbnRlZ2VyIG1vZGVzLiAgQnkgZGVmYXVsdCB0aGVzZSBhcmUgJ0JJbW9kZScsICdRSW1vZGUnLCAnSEltb2RlJywKICAgICAnU0ltb2RlJywgJ0RJbW9kZScsICdUSW1vZGUnLCBhbmQgJ09JbW9kZScuCgonTU9ERV9QQVJUSUFMX0lOVCcKICAgICBUaGUgInBhcnRpYWwgaW50ZWdlciIgbW9kZXMsICdQUUltb2RlJywgJ1BISW1vZGUnLCAnUFNJbW9kZScgYW5kCiAgICAgJ1BESW1vZGUnLgoKJ01PREVfRkxPQVQnCiAgICAgRmxvYXRpbmcgcG9pbnQgbW9kZXMuICBCeSBkZWZhdWx0IHRoZXNlIGFyZSAnUUZtb2RlJywgJ0hGbW9kZScsCiAgICAgJ1RRRm1vZGUnLCAnU0Ztb2RlJywgJ0RGbW9kZScsICdYRm1vZGUnIGFuZCAnVEZtb2RlJy4KCidNT0RFX0RFQ0lNQUxfRkxPQVQnCiAgICAgRGVjaW1hbCBmbG9hdGluZyBwb2ludCBtb2Rlcy4gIEJ5IGRlZmF1bHQgdGhlc2UgYXJlICdTRG1vZGUnLAogICAgICdERG1vZGUnIGFuZCAnVERtb2RlJy4KCidNT0RFX0ZSQUNUJwogICAgIFNpZ25lZCBmcmFjdGlvbmFsIG1vZGVzLiAgQnkgZGVmYXVsdCB0aGVzZSBhcmUgJ1FRbW9kZScsICdIUW1vZGUnLAogICAgICdTUW1vZGUnLCAnRFFtb2RlJyBhbmQgJ1RRbW9kZScuCgonTU9ERV9VRlJBQ1QnCiAgICAgVW5zaWduZWQgZnJhY3Rpb25hbCBtb2Rlcy4gIEJ5IGRlZmF1bHQgdGhlc2UgYXJlICdVUVFtb2RlJywKICAgICAnVUhRbW9kZScsICdVU1Ftb2RlJywgJ1VEUW1vZGUnIGFuZCAnVVRRbW9kZScuCgonTU9ERV9BQ0NVTScKICAgICBTaWduZWQgYWNjdW11bGF0b3IgbW9kZXMuICBCeSBkZWZhdWx0IHRoZXNlIGFyZSAnSEFtb2RlJywgJ1NBbW9kZScsCiAgICAgJ0RBbW9kZScgYW5kICdUQW1vZGUnLgoKJ01PREVfVUFDQ1VNJwogICAgIFVuc2lnbmVkIGFjY3VtdWxhdG9yIG1vZGVzLiAgQnkgZGVmYXVsdCB0aGVzZSBhcmUgJ1VIQW1vZGUnLAogICAgICdVU0Ftb2RlJywgJ1VEQW1vZGUnIGFuZCAnVVRBbW9kZScuCgonTU9ERV9DT01QTEVYX0lOVCcKICAgICBDb21wbGV4IGludGVnZXIgbW9kZXMuICAoVGhlc2UgYXJlIG5vdCBjdXJyZW50bHkgaW1wbGVtZW50ZWQpLgoKJ01PREVfQ09NUExFWF9GTE9BVCcKICAgICBDb21wbGV4IGZsb2F0aW5nIHBvaW50IG1vZGVzLiAgQnkgZGVmYXVsdCB0aGVzZSBhcmUgJ1FDbW9kZScsCiAgICAgJ0hDbW9kZScsICdTQ21vZGUnLCAnRENtb2RlJywgJ1hDbW9kZScsIGFuZCAnVENtb2RlJy4KCidNT0RFX0ZVTkNUSU9OJwogICAgIEFsZ29sIG9yIFBhc2NhbCBmdW5jdGlvbiB2YXJpYWJsZXMgaW5jbHVkaW5nIGEgc3RhdGljIGNoYWluLgogICAgIChUaGVzZSBhcmUgbm90IGN1cnJlbnRseSBpbXBsZW1lbnRlZCkuCgonTU9ERV9DQycKICAgICBNb2RlcyByZXByZXNlbnRpbmcgY29uZGl0aW9uIGNvZGUgdmFsdWVzLiAgVGhlc2UgYXJlICdDQ21vZGUnIHBsdXMKICAgICBhbnkgJ0NDX01PREUnIG1vZGVzIGxpc3RlZCBpbiB0aGUgJ01BQ0hJTkUtbW9kZXMuZGVmJy4gICpOb3RlIEp1bXAKICAgICBQYXR0ZXJuczo6LCBhbHNvIHNlZSAqbm90ZSBDb25kaXRpb24gQ29kZTo6LgoKJ01PREVfUkFORE9NJwogICAgIFRoaXMgaXMgYSBjYXRjaGFsbCBtb2RlIGNsYXNzIGZvciBtb2RlcyB3aGljaCBkb24ndCBmaXQgaW50byB0aGUKICAgICBhYm92ZSBjbGFzc2VzLiAgQ3VycmVudGx5ICdWT0lEbW9kZScgYW5kICdCTEttb2RlJyBhcmUgaW4KICAgICAnTU9ERV9SQU5ET00nLgoKIEhlcmUgYXJlIHNvbWUgQyBtYWNyb3MgdGhhdCByZWxhdGUgdG8gbWFjaGluZSBtb2RlczoKCidHRVRfTU9ERSAoWCknCiAgICAgUmV0dXJucyB0aGUgbWFjaGluZSBtb2RlIG9mIHRoZSBSVFggWC4KCidQVVRfTU9ERSAoWCwgTkVXTU9ERSknCiAgICAgQWx0ZXJzIHRoZSBtYWNoaW5lIG1vZGUgb2YgdGhlIFJUWCBYIHRvIGJlIE5FV01PREUuCgonTlVNX01BQ0hJTkVfTU9ERVMnCiAgICAgU3RhbmRzIGZvciB0aGUgbnVtYmVyIG9mIG1hY2hpbmUgbW9kZXMgYXZhaWxhYmxlIG9uIHRoZSB0YXJnZXQKICAgICBtYWNoaW5lLiAgVGhpcyBpcyBvbmUgZ3JlYXRlciB0aGFuIHRoZSBsYXJnZXN0IG51bWVyaWMgdmFsdWUgb2YgYW55CiAgICAgbWFjaGluZSBtb2RlLgoKJ0dFVF9NT0RFX05BTUUgKE0pJwogICAgIFJldHVybnMgdGhlIG5hbWUgb2YgbW9kZSBNIGFzIGEgc3RyaW5nLgoKJ0dFVF9NT0RFX0NMQVNTIChNKScKICAgICBSZXR1cm5zIHRoZSBtb2RlIGNsYXNzIG9mIG1vZGUgTS4KCidHRVRfTU9ERV9XSURFUl9NT0RFIChNKScKICAgICBSZXR1cm5zIHRoZSBuZXh0IHdpZGVyIG5hdHVyYWwgbW9kZS4gIEZvciBleGFtcGxlLCB0aGUgZXhwcmVzc2lvbgogICAgICdHRVRfTU9ERV9XSURFUl9NT0RFIChRSW1vZGUpJyByZXR1cm5zICdISW1vZGUnLgoKJ0dFVF9NT0RFX1NJWkUgKE0pJwogICAgIFJldHVybnMgdGhlIHNpemUgaW4gYnl0ZXMgb2YgYSBkYXR1bSBvZiBtb2RlIE0uCgonR0VUX01PREVfQklUU0laRSAoTSknCiAgICAgUmV0dXJucyB0aGUgc2l6ZSBpbiBiaXRzIG9mIGEgZGF0dW0gb2YgbW9kZSBNLgoKJ0dFVF9NT0RFX0lCSVQgKE0pJwogICAgIFJldHVybnMgdGhlIG51bWJlciBvZiBpbnRlZ3JhbCBiaXRzIG9mIGEgZGF0dW0gb2YgZml4ZWQtcG9pbnQgbW9kZQogICAgIE0uCgonR0VUX01PREVfRkJJVCAoTSknCiAgICAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGZyYWN0aW9uYWwgYml0cyBvZiBhIGRhdHVtIG9mIGZpeGVkLXBvaW50CiAgICAgbW9kZSBNLgoKJ0dFVF9NT0RFX01BU0sgKE0pJwogICAgIFJldHVybnMgYSBiaXRtYXNrIGNvbnRhaW5pbmcgMSBmb3IgYWxsIGJpdHMgaW4gYSB3b3JkIHRoYXQgZml0CiAgICAgd2l0aGluIG1vZGUgTS4gIFRoaXMgbWFjcm8gY2FuIG9ubHkgYmUgdXNlZCBmb3IgbW9kZXMgd2hvc2UgYml0c2l6ZQogICAgIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byAnSE9TVF9CSVRTX1BFUl9JTlQnLgoKJ0dFVF9NT0RFX0FMSUdOTUVOVCAoTSknCiAgICAgUmV0dXJuIHRoZSByZXF1aXJlZCBhbGlnbm1lbnQsIGluIGJpdHMsIGZvciBhbiBvYmplY3Qgb2YgbW9kZSBNLgoKJ0dFVF9NT0RFX1VOSVRfU0laRSAoTSknCiAgICAgUmV0dXJucyB0aGUgc2l6ZSBpbiBieXRlcyBvZiB0aGUgc3VidW5pdHMgb2YgYSBkYXR1bSBvZiBtb2RlIE0uCiAgICAgVGhpcyBpcyB0aGUgc2FtZSBhcyAnR0VUX01PREVfU0laRScgZXhjZXB0IGluIHRoZSBjYXNlIG9mIGNvbXBsZXgKICAgICBtb2Rlcy4gIEZvciB0aGVtLCB0aGUgdW5pdCBzaXplIGlzIHRoZSBzaXplIG9mIHRoZSByZWFsIG9yCiAgICAgaW1hZ2luYXJ5IHBhcnQuCgonR0VUX01PREVfTlVOSVRTIChNKScKICAgICBSZXR1cm5zIHRoZSBudW1iZXIgb2YgdW5pdHMgY29udGFpbmVkIGluIGEgbW9kZSwgaS5lLiwKICAgICAnR0VUX01PREVfU0laRScgZGl2aWRlZCBieSAnR0VUX01PREVfVU5JVF9TSVpFJy4KCidHRVRfQ0xBU1NfTkFSUk9XRVNUX01PREUgKEMpJwogICAgIFJldHVybnMgdGhlIG5hcnJvd2VzdCBtb2RlIGluIG1vZGUgY2xhc3MgQy4KCiBUaGUgZ2xvYmFsIHZhcmlhYmxlcyAnYnl0ZV9tb2RlJyBhbmQgJ3dvcmRfbW9kZScgY29udGFpbiBtb2RlcyB3aG9zZQpjbGFzc2VzIGFyZSAnTU9ERV9JTlQnIGFuZCB3aG9zZSBiaXRzaXplcyBhcmUgZWl0aGVyICdCSVRTX1BFUl9VTklUJyBvcgonQklUU19QRVJfV09SRCcsIHJlc3BlY3RpdmVseS4gIE9uIDMyLWJpdCBtYWNoaW5lcywgdGhlc2UgYXJlICdRSW1vZGUnCmFuZCAnU0ltb2RlJywgcmVzcGVjdGl2ZWx5LgoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IENvbnN0YW50cywgIE5leHQ6IFJlZ3MgYW5kIE1lbW9yeSwgIFByZXY6IE1hY2hpbmUgTW9kZXMsICBVcDogUlRMCgoxMi43IENvbnN0YW50IEV4cHJlc3Npb24gVHlwZXMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpUaGUgc2ltcGxlc3QgUlRMIGV4cHJlc3Npb25zIGFyZSB0aG9zZSB0aGF0IHJlcHJlc2VudCBjb25zdGFudCB2YWx1ZXMuCgonKGNvbnN0X2ludCBJKScKICAgICBUaGlzIHR5cGUgb2YgZXhwcmVzc2lvbiByZXByZXNlbnRzIHRoZSBpbnRlZ2VyIHZhbHVlIEkuICBJIGlzCiAgICAgY3VzdG9tYXJpbHkgYWNjZXNzZWQgd2l0aCB0aGUgbWFjcm8gJ0lOVFZBTCcgYXMgaW4gJ0lOVFZBTCAoRVhQKScsCiAgICAgd2hpY2ggaXMgZXF1aXZhbGVudCB0byAnWFdJTlQgKEVYUCwgMCknLgoKICAgICBDb25zdGFudHMgZ2VuZXJhdGVkIGZvciBtb2RlcyB3aXRoIGZld2VyIGJpdHMgdGhhbiAnSE9TVF9XSURFX0lOVCcKICAgICBtdXN0IGJlIHNpZ24gZXh0ZW5kZWQgdG8gZnVsbCB3aWR0aCAoZS5nLiwgd2l0aCAnZ2VuX2ludF9tb2RlJykuCgogICAgIFRoZXJlIGlzIG9ubHkgb25lIGV4cHJlc3Npb24gb2JqZWN0IGZvciB0aGUgaW50ZWdlciB2YWx1ZSB6ZXJvOyBpdAogICAgIGlzIHRoZSB2YWx1ZSBvZiB0aGUgdmFyaWFibGUgJ2NvbnN0MF9ydHgnLiAgTGlrZXdpc2UsIHRoZSBvbmx5CiAgICAgZXhwcmVzc2lvbiBmb3IgaW50ZWdlciB2YWx1ZSBvbmUgaXMgZm91bmQgaW4gJ2NvbnN0MV9ydHgnLCB0aGUgb25seQogICAgIGV4cHJlc3Npb24gZm9yIGludGVnZXIgdmFsdWUgdHdvIGlzIGZvdW5kIGluICdjb25zdDJfcnR4JywgYW5kIHRoZQogICAgIG9ubHkgZXhwcmVzc2lvbiBmb3IgaW50ZWdlciB2YWx1ZSBuZWdhdGl2ZSBvbmUgaXMgZm91bmQgaW4KICAgICAnY29uc3RtMV9ydHgnLiAgQW55IGF0dGVtcHQgdG8gY3JlYXRlIGFuIGV4cHJlc3Npb24gb2YgY29kZQogICAgICdjb25zdF9pbnQnIGFuZCB2YWx1ZSB6ZXJvLCBvbmUsIHR3byBvciBuZWdhdGl2ZSBvbmUgd2lsbCByZXR1cm4KICAgICAnY29uc3QwX3J0eCcsICdjb25zdDFfcnR4JywgJ2NvbnN0Ml9ydHgnIG9yICdjb25zdG0xX3J0eCcgYXMKICAgICBhcHByb3ByaWF0ZS4KCiAgICAgU2ltaWxhcmx5LCB0aGVyZSBpcyBvbmx5IG9uZSBvYmplY3QgZm9yIHRoZSBpbnRlZ2VyIHdob3NlIHZhbHVlIGlzCiAgICAgJ1NUT1JFX0ZMQUdfVkFMVUUnLiAgSXQgaXMgZm91bmQgaW4gJ2NvbnN0X3RydWVfcnR4Jy4gIElmCiAgICAgJ1NUT1JFX0ZMQUdfVkFMVUUnIGlzIG9uZSwgJ2NvbnN0X3RydWVfcnR4JyBhbmQgJ2NvbnN0MV9ydHgnIHdpbGwKICAgICBwb2ludCB0byB0aGUgc2FtZSBvYmplY3QuICBJZiAnU1RPUkVfRkxBR19WQUxVRScgaXMgLTEsCiAgICAgJ2NvbnN0X3RydWVfcnR4JyBhbmQgJ2NvbnN0bTFfcnR4JyB3aWxsIHBvaW50IHRvIHRoZSBzYW1lIG9iamVjdC4KCicoY29uc3RfZG91YmxlOk0gQUREUiBJMCBJMSAuLi4pJwogICAgIFJlcHJlc2VudHMgZWl0aGVyIGEgZmxvYXRpbmctcG9pbnQgY29uc3RhbnQgb2YgbW9kZSBNIG9yIGFuIGludGVnZXIKICAgICBjb25zdGFudCB0b28gbGFyZ2UgdG8gZml0IGludG8gJ0hPU1RfQklUU19QRVJfV0lERV9JTlQnIGJpdHMgYnV0CiAgICAgc21hbGwgZW5vdWdoIHRvIGZpdCB3aXRoaW4gdHdpY2UgdGhhdCBudW1iZXIgb2YgYml0cyAoR0NDIGRvZXMgbm90CiAgICAgcHJvdmlkZSBhIG1lY2hhbmlzbSB0byByZXByZXNlbnQgZXZlbiBsYXJnZXIgY29uc3RhbnRzKS4gIEluIHRoZQogICAgIGxhdHRlciBjYXNlLCBNIHdpbGwgYmUgJ1ZPSURtb2RlJy4KCicoY29uc3RfZml4ZWQ6TSBBRERSKScKICAgICBSZXByZXNlbnRzIGEgZml4ZWQtcG9pbnQgY29uc3RhbnQgb2YgbW9kZSBNLiAgVGhlIGRhdGEgc3RydWN0dXJlLAogICAgIHdoaWNoIGNvbnRhaW5zIGRhdGEgd2l0aCB0aGUgc2l6ZSBvZiB0d28gJ0hPU1RfQklUU19QRVJfV0lERV9JTlQnCiAgICAgYW5kIHRoZSBhc3NvY2lhdGVkIGZpeGVkLXBvaW50IG1vZGUsIGlzIGFjY2VzcyB3aXRoIHRoZSBtYWNybwogICAgICdDT05TVF9GSVhFRF9WQUxVRScuICBUaGUgaGlnaCBwYXJ0IG9mIGRhdGEgaXMgYWNjZXNzZWQgd2l0aAogICAgICdDT05TVF9GSVhFRF9WQUxVRV9ISUdIJzsgdGhlIGxvdyBwYXJ0IGlzIGFjY2Vzc2VkIHdpdGgKICAgICAnQ09OU1RfRklYRURfVkFMVUVfTE9XJy4KCicoY29uc3RfdmVjdG9yOk0gW1gwIFgxIC4uLl0pJwogICAgIFJlcHJlc2VudHMgYSB2ZWN0b3IgY29uc3RhbnQuICBUaGUgc3F1YXJlIGJyYWNrZXRzIHN0YW5kIGZvciB0aGUKICAgICB2ZWN0b3IgY29udGFpbmluZyB0aGUgY29uc3RhbnQgZWxlbWVudHMuICBYMCwgWDEgYW5kIHNvIG9uIGFyZSB0aGUKICAgICAnY29uc3RfaW50JyBvciAnY29uc3RfZG91YmxlJyBlbGVtZW50cy4KCiAgICAgVGhlIG51bWJlciBvZiB1bml0cyBpbiBhICdjb25zdF92ZWN0b3InIGlzIG9idGFpbmVkIHdpdGggdGhlIG1hY3JvCiAgICAgJ0NPTlNUX1ZFQ1RPUl9OVU5JVFMnIGFzIGluICdDT05TVF9WRUNUT1JfTlVOSVRTIChWKScuCgogICAgIEluZGl2aWR1YWwgZWxlbWVudHMgaW4gYSB2ZWN0b3IgY29uc3RhbnQgYXJlIGFjY2Vzc2VkIHdpdGggdGhlCiAgICAgbWFjcm8gJ0NPTlNUX1ZFQ1RPUl9FTFQnIGFzIGluICdDT05TVF9WRUNUT1JfRUxUIChWLCBOKScgd2hlcmUgViBpcwogICAgIHRoZSB2ZWN0b3IgY29uc3RhbnQgYW5kIE4gaXMgdGhlIGVsZW1lbnQgZGVzaXJlZC4KCiAgICAgQUREUiBpcyB1c2VkIHRvIGNvbnRhaW4gdGhlICdtZW0nIGV4cHJlc3Npb24gdGhhdCBjb3JyZXNwb25kcyB0bwogICAgIHRoZSBsb2NhdGlvbiBpbiBtZW1vcnkgdGhhdCBhdCB3aGljaCB0aGUgY29uc3RhbnQgY2FuIGJlIGZvdW5kLiAgSWYKICAgICBpdCBoYXMgbm90IGJlZW4gYWxsb2NhdGVkIGEgbWVtb3J5IGxvY2F0aW9uLCBidXQgaXMgb24gdGhlIGNoYWluIG9mCiAgICAgYWxsICdjb25zdF9kb3VibGUnIGV4cHJlc3Npb25zIGluIHRoaXMgY29tcGlsYXRpb24gKG1haW50YWluZWQKICAgICB1c2luZyBhbiB1bmRpc3BsYXllZCBmaWVsZCksIEFERFIgY29udGFpbnMgJ2NvbnN0MF9ydHgnLiAgSWYgaXQgaXMKICAgICBub3Qgb24gdGhlIGNoYWluLCBBRERSIGNvbnRhaW5zICdjYzBfcnR4Jy4gIEFERFIgaXMgY3VzdG9tYXJpbHkKICAgICBhY2Nlc3NlZCB3aXRoIHRoZSBtYWNybyAnQ09OU1RfRE9VQkxFX01FTScgYW5kIHRoZSBjaGFpbiBmaWVsZCB2aWEKICAgICAnQ09OU1RfRE9VQkxFX0NIQUlOJy4KCiAgICAgSWYgTSBpcyAnVk9JRG1vZGUnLCB0aGUgYml0cyBvZiB0aGUgdmFsdWUgYXJlIHN0b3JlZCBpbiBJMCBhbmQgSTEuCiAgICAgSTAgaXMgY3VzdG9tYXJpbHkgYWNjZXNzZWQgd2l0aCB0aGUgbWFjcm8gJ0NPTlNUX0RPVUJMRV9MT1cnIGFuZCBJMQogICAgIHdpdGggJ0NPTlNUX0RPVUJMRV9ISUdIJy4KCiAgICAgSWYgdGhlIGNvbnN0YW50IGlzIGZsb2F0aW5nIHBvaW50IChyZWdhcmRsZXNzIG9mIGl0cyBwcmVjaXNpb24pLAogICAgIHRoZW4gdGhlIG51bWJlciBvZiBpbnRlZ2VycyB1c2VkIHRvIHN0b3JlIHRoZSB2YWx1ZSBkZXBlbmRzIG9uIHRoZQogICAgIHNpemUgb2YgJ1JFQUxfVkFMVUVfVFlQRScgKCpub3RlIEZsb2F0aW5nIFBvaW50OjopLiAgVGhlIGludGVnZXJzCiAgICAgcmVwcmVzZW50IGEgZmxvYXRpbmcgcG9pbnQgbnVtYmVyLCBidXQgbm90IHByZWNpc2VseSBpbiB0aGUgdGFyZ2V0CiAgICAgbWFjaGluZSdzIG9yIGhvc3QgbWFjaGluZSdzIGZsb2F0aW5nIHBvaW50IGZvcm1hdC4gIFRvIGNvbnZlcnQgdGhlbQogICAgIHRvIHRoZSBwcmVjaXNlIGJpdCBwYXR0ZXJuIHVzZWQgYnkgdGhlIHRhcmdldCBtYWNoaW5lLCB1c2UgdGhlCiAgICAgbWFjcm8gJ1JFQUxfVkFMVUVfVE9fVEFSR0VUX0RPVUJMRScgYW5kIGZyaWVuZHMgKCpub3RlIERhdGEKICAgICBPdXRwdXQ6OikuCgogICAgIFRoZSBtYWNybyAnQ09OU1QwX1JUWCAoTU9ERSknIHJlZmVycyB0byBhbiBleHByZXNzaW9uIHdpdGggdmFsdWUgMAogICAgIGluIG1vZGUgTU9ERS4gIElmIG1vZGUgTU9ERSBpcyBvZiBtb2RlIGNsYXNzICdNT0RFX0lOVCcsIGl0IHJldHVybnMKICAgICAnY29uc3QwX3J0eCcuICBJZiBtb2RlIE1PREUgaXMgb2YgbW9kZSBjbGFzcyAnTU9ERV9GTE9BVCcsIGl0CiAgICAgcmV0dXJucyBhICdDT05TVF9ET1VCTEUnIGV4cHJlc3Npb24gaW4gbW9kZSBNT0RFLiAgT3RoZXJ3aXNlLCBpdAogICAgIHJldHVybnMgYSAnQ09OU1RfVkVDVE9SJyBleHByZXNzaW9uIGluIG1vZGUgTU9ERS4gIFNpbWlsYXJseSwgdGhlCiAgICAgbWFjcm8gJ0NPTlNUMV9SVFggKE1PREUpJyByZWZlcnMgdG8gYW4gZXhwcmVzc2lvbiB3aXRoIHZhbHVlIDEgaW4KICAgICBtb2RlIE1PREUgYW5kIHNpbWlsYXJseSBmb3IgJ0NPTlNUMl9SVFgnLiAgVGhlICdDT05TVDFfUlRYJyBhbmQKICAgICAnQ09OU1QyX1JUWCcgbWFjcm9zIGFyZSB1bmRlZmluZWQgZm9yIHZlY3RvciBtb2Rlcy4KCicoY29uc3Rfc3RyaW5nIFNUUiknCiAgICAgUmVwcmVzZW50cyBhIGNvbnN0YW50IHN0cmluZyB3aXRoIHZhbHVlIFNUUi4gIEN1cnJlbnRseSB0aGlzIGlzCiAgICAgdXNlZCBvbmx5IGZvciBpbnNuIGF0dHJpYnV0ZXMgKCpub3RlIEluc24gQXR0cmlidXRlczo6KSBzaW5jZQogICAgIGNvbnN0YW50IHN0cmluZ3MgaW4gQyBhcmUgcGxhY2VkIGluIG1lbW9yeS4KCicoc3ltYm9sX3JlZjpNT0RFIFNZTUJPTCknCiAgICAgUmVwcmVzZW50cyB0aGUgdmFsdWUgb2YgYW4gYXNzZW1ibGVyIGxhYmVsIGZvciBkYXRhLiAgU1lNQk9MIGlzIGEKICAgICBzdHJpbmcgdGhhdCBkZXNjcmliZXMgdGhlIG5hbWUgb2YgdGhlIGFzc2VtYmxlciBsYWJlbC4gIElmIGl0CiAgICAgc3RhcnRzIHdpdGggYSAnKicsIHRoZSBsYWJlbCBpcyB0aGUgcmVzdCBvZiBTWU1CT0wgbm90IGluY2x1ZGluZwogICAgIHRoZSAnKicuICBPdGhlcndpc2UsIHRoZSBsYWJlbCBpcyBTWU1CT0wsIHVzdWFsbHkgcHJlZml4ZWQgd2l0aAogICAgICdfJy4KCiAgICAgVGhlICdzeW1ib2xfcmVmJyBjb250YWlucyBhIG1vZGUsIHdoaWNoIGlzIHVzdWFsbHkgJ1Btb2RlJy4KICAgICBVc3VhbGx5IHRoYXQgaXMgdGhlIG9ubHkgbW9kZSBmb3Igd2hpY2ggYSBzeW1ib2wgaXMgZGlyZWN0bHkgdmFsaWQuCgonKGxhYmVsX3JlZjpNT0RFIExBQkVMKScKICAgICBSZXByZXNlbnRzIHRoZSB2YWx1ZSBvZiBhbiBhc3NlbWJsZXIgbGFiZWwgZm9yIGNvZGUuICBJdCBjb250YWlucwogICAgIG9uZSBvcGVyYW5kLCBhbiBleHByZXNzaW9uLCB3aGljaCBtdXN0IGJlIGEgJ2NvZGVfbGFiZWwnIG9yIGEKICAgICAnbm90ZScgb2YgdHlwZSAnTk9URV9JTlNOX0RFTEVURURfTEFCRUwnIHRoYXQgYXBwZWFycyBpbiB0aGUKICAgICBpbnN0cnVjdGlvbiBzZXF1ZW5jZSB0byBpZGVudGlmeSB0aGUgcGxhY2Ugd2hlcmUgdGhlIGxhYmVsIHNob3VsZAogICAgIGdvLgoKICAgICBUaGUgcmVhc29uIGZvciB1c2luZyBhIGRpc3RpbmN0IGV4cHJlc3Npb24gdHlwZSBmb3IgY29kZSBsYWJlbAogICAgIHJlZmVyZW5jZXMgaXMgc28gdGhhdCBqdW1wIG9wdGltaXphdGlvbiBjYW4gZGlzdGluZ3Vpc2ggdGhlbS4KCiAgICAgVGhlICdsYWJlbF9yZWYnIGNvbnRhaW5zIGEgbW9kZSwgd2hpY2ggaXMgdXN1YWxseSAnUG1vZGUnLiAgVXN1YWxseQogICAgIHRoYXQgaXMgdGhlIG9ubHkgbW9kZSBmb3Igd2hpY2ggYSBsYWJlbCBpcyBkaXJlY3RseSB2YWxpZC4KCicoY29uc3Q6TSBFWFApJwogICAgIFJlcHJlc2VudHMgYSBjb25zdGFudCB0aGF0IGlzIHRoZSByZXN1bHQgb2YgYW4gYXNzZW1ibHktdGltZQogICAgIGFyaXRobWV0aWMgY29tcHV0YXRpb24uICBUaGUgb3BlcmFuZCwgRVhQLCBpcyBhbiBleHByZXNzaW9uIHRoYXQKICAgICBjb250YWlucyBvbmx5IGNvbnN0YW50cyAoJ2NvbnN0X2ludCcsICdzeW1ib2xfcmVmJyBhbmQgJ2xhYmVsX3JlZicKICAgICBleHByZXNzaW9ucykgY29tYmluZWQgd2l0aCAncGx1cycgYW5kICdtaW51cycuICBIb3dldmVyLCBub3QgYWxsCiAgICAgY29tYmluYXRpb25zIGFyZSB2YWxpZCwgc2luY2UgdGhlIGFzc2VtYmxlciBjYW5ub3QgZG8gYXJiaXRyYXJ5CiAgICAgYXJpdGhtZXRpYyBvbiByZWxvY2F0YWJsZSBzeW1ib2xzLgoKICAgICBNIHNob3VsZCBiZSAnUG1vZGUnLgoKJyhoaWdoOk0gRVhQKScKICAgICBSZXByZXNlbnRzIHRoZSBoaWdoLW9yZGVyIGJpdHMgb2YgRVhQLCB1c3VhbGx5IGEgJ3N5bWJvbF9yZWYnLiAgVGhlCiAgICAgbnVtYmVyIG9mIGJpdHMgaXMgbWFjaGluZS1kZXBlbmRlbnQgYW5kIGlzIG5vcm1hbGx5IHRoZSBudW1iZXIgb2YKICAgICBiaXRzIHNwZWNpZmllZCBpbiBhbiBpbnN0cnVjdGlvbiB0aGF0IGluaXRpYWxpemVzIHRoZSBoaWdoIG9yZGVyCiAgICAgYml0cyBvZiBhIHJlZ2lzdGVyLiAgSXQgaXMgdXNlZCB3aXRoICdsb19zdW0nIHRvIHJlcHJlc2VudCB0aGUKICAgICB0eXBpY2FsIHR3by1pbnN0cnVjdGlvbiBzZXF1ZW5jZSB1c2VkIGluIFJJU0MgbWFjaGluZXMgdG8gcmVmZXJlbmNlCiAgICAgYSBnbG9iYWwgbWVtb3J5IGxvY2F0aW9uLgoKICAgICBNIHNob3VsZCBiZSAnUG1vZGUnLgoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IFJlZ3MgYW5kIE1lbW9yeSwgIE5leHQ6IEFyaXRobWV0aWMsICBQcmV2OiBDb25zdGFudHMsICBVcDogUlRMCgoxMi44IFJlZ2lzdGVycyBhbmQgTWVtb3J5Cj09PT09PT09PT09PT09PT09PT09PT09PT0KCkhlcmUgYXJlIHRoZSBSVEwgZXhwcmVzc2lvbiB0eXBlcyBmb3IgZGVzY3JpYmluZyBhY2Nlc3MgdG8gbWFjaGluZQpyZWdpc3RlcnMgYW5kIHRvIG1haW4gbWVtb3J5LgoKJyhyZWc6TSBOKScKICAgICBGb3Igc21hbGwgdmFsdWVzIG9mIHRoZSBpbnRlZ2VyIE4gKHRob3NlIHRoYXQgYXJlIGxlc3MgdGhhbgogICAgICdGSVJTVF9QU0VVRE9fUkVHSVNURVInKSwgdGhpcyBzdGFuZHMgZm9yIGEgcmVmZXJlbmNlIHRvIG1hY2hpbmUKICAgICByZWdpc3RlciBudW1iZXIgTjogYSAiaGFyZCByZWdpc3RlciIuICBGb3IgbGFyZ2VyIHZhbHVlcyBvZiBOLCBpdAogICAgIHN0YW5kcyBmb3IgYSB0ZW1wb3JhcnkgdmFsdWUgb3IgInBzZXVkbyByZWdpc3RlciIuICBUaGUgY29tcGlsZXIncwogICAgIHN0cmF0ZWd5IGlzIHRvIGdlbmVyYXRlIGNvZGUgYXNzdW1pbmcgYW4gdW5saW1pdGVkIG51bWJlciBvZiBzdWNoCiAgICAgcHNldWRvIHJlZ2lzdGVycywgYW5kIGxhdGVyIGNvbnZlcnQgdGhlbSBpbnRvIGhhcmQgcmVnaXN0ZXJzIG9yCiAgICAgaW50byBtZW1vcnkgcmVmZXJlbmNlcy4KCiAgICAgTSBpcyB0aGUgbWFjaGluZSBtb2RlIG9mIHRoZSByZWZlcmVuY2UuICBJdCBpcyBuZWNlc3NhcnkgYmVjYXVzZQogICAgIG1hY2hpbmVzIGNhbiBnZW5lcmFsbHkgcmVmZXIgdG8gZWFjaCByZWdpc3RlciBpbiBtb3JlIHRoYW4gb25lCiAgICAgbW9kZS4gIEZvciBleGFtcGxlLCBhIHJlZ2lzdGVyIG1heSBjb250YWluIGEgZnVsbCB3b3JkIGJ1dCB0aGVyZQogICAgIG1heSBiZSBpbnN0cnVjdGlvbnMgdG8gcmVmZXIgdG8gaXQgYXMgYSBoYWxmIHdvcmQgb3IgYXMgYSBzaW5nbGUKICAgICBieXRlLCBhcyB3ZWxsIGFzIGluc3RydWN0aW9ucyB0byByZWZlciB0byBpdCBhcyBhIGZsb2F0aW5nIHBvaW50CiAgICAgbnVtYmVyIG9mIHZhcmlvdXMgcHJlY2lzaW9ucy4KCiAgICAgRXZlbiBmb3IgYSByZWdpc3RlciB0aGF0IHRoZSBtYWNoaW5lIGNhbiBhY2Nlc3MgaW4gb25seSBvbmUgbW9kZSwKICAgICB0aGUgbW9kZSBtdXN0IGFsd2F5cyBiZSBzcGVjaWZpZWQuCgogICAgIFRoZSBzeW1ib2wgJ0ZJUlNUX1BTRVVET19SRUdJU1RFUicgaXMgZGVmaW5lZCBieSB0aGUgbWFjaGluZQogICAgIGRlc2NyaXB0aW9uLCBzaW5jZSB0aGUgbnVtYmVyIG9mIGhhcmQgcmVnaXN0ZXJzIG9uIHRoZSBtYWNoaW5lIGlzCiAgICAgYW4gaW52YXJpYW50IGNoYXJhY3RlcmlzdGljIG9mIHRoZSBtYWNoaW5lLiAgTm90ZSwgaG93ZXZlciwgdGhhdAogICAgIG5vdCBhbGwgb2YgdGhlIG1hY2hpbmUgcmVnaXN0ZXJzIG11c3QgYmUgZ2VuZXJhbCByZWdpc3RlcnMuICBBbGwKICAgICB0aGUgbWFjaGluZSByZWdpc3RlcnMgdGhhdCBjYW4gYmUgdXNlZCBmb3Igc3RvcmFnZSBvZiBkYXRhIGFyZQogICAgIGdpdmVuIGhhcmQgcmVnaXN0ZXIgbnVtYmVycywgZXZlbiB0aG9zZSB0aGF0IGNhbiBiZSB1c2VkIG9ubHkgaW4KICAgICBjZXJ0YWluIGluc3RydWN0aW9ucyBvciBjYW4gaG9sZCBvbmx5IGNlcnRhaW4gdHlwZXMgb2YgZGF0YS4KCiAgICAgQSBoYXJkIHJlZ2lzdGVyIG1heSBiZSBhY2Nlc3NlZCBpbiB2YXJpb3VzIG1vZGVzIHRocm91Z2hvdXQgb25lCiAgICAgZnVuY3Rpb24sIGJ1dCBlYWNoIHBzZXVkbyByZWdpc3RlciBpcyBnaXZlbiBhIG5hdHVyYWwgbW9kZSBhbmQgaXMKICAgICBhY2Nlc3NlZCBvbmx5IGluIHRoYXQgbW9kZS4gIFdoZW4gaXQgaXMgbmVjZXNzYXJ5IHRvIGRlc2NyaWJlIGFuCiAgICAgYWNjZXNzIHRvIGEgcHNldWRvIHJlZ2lzdGVyIHVzaW5nIGEgbm9ubmF0dXJhbCBtb2RlLCBhICdzdWJyZWcnCiAgICAgZXhwcmVzc2lvbiBpcyB1c2VkLgoKICAgICBBICdyZWcnIGV4cHJlc3Npb24gd2l0aCBhIG1hY2hpbmUgbW9kZSB0aGF0IHNwZWNpZmllcyBtb3JlIHRoYW4gb25lCiAgICAgd29yZCBvZiBkYXRhIG1heSBhY3R1YWxseSBzdGFuZCBmb3Igc2V2ZXJhbCBjb25zZWN1dGl2ZSByZWdpc3RlcnMuCiAgICAgSWYgaW4gYWRkaXRpb24gdGhlIHJlZ2lzdGVyIG51bWJlciBzcGVjaWZpZXMgYSBoYXJkd2FyZSByZWdpc3RlciwKICAgICB0aGVuIGl0IGFjdHVhbGx5IHJlcHJlc2VudHMgc2V2ZXJhbCBjb25zZWN1dGl2ZSBoYXJkd2FyZSByZWdpc3RlcnMKICAgICBzdGFydGluZyB3aXRoIHRoZSBzcGVjaWZpZWQgb25lLgoKICAgICBFYWNoIHBzZXVkbyByZWdpc3RlciBudW1iZXIgdXNlZCBpbiBhIGZ1bmN0aW9uJ3MgUlRMIGNvZGUgaXMKICAgICByZXByZXNlbnRlZCBieSBhIHVuaXF1ZSAncmVnJyBleHByZXNzaW9uLgoKICAgICBTb21lIHBzZXVkbyByZWdpc3RlciBudW1iZXJzLCB0aG9zZSB3aXRoaW4gdGhlIHJhbmdlIG9mCiAgICAgJ0ZJUlNUX1ZJUlRVQUxfUkVHSVNURVInIHRvICdMQVNUX1ZJUlRVQUxfUkVHSVNURVInIG9ubHkgYXBwZWFyCiAgICAgZHVyaW5nIHRoZSBSVEwgZ2VuZXJhdGlvbiBwaGFzZSBhbmQgYXJlIGVsaW1pbmF0ZWQgYmVmb3JlIHRoZQogICAgIG9wdGltaXphdGlvbiBwaGFzZXMuICBUaGVzZSByZXByZXNlbnQgbG9jYXRpb25zIGluIHRoZSBzdGFjayBmcmFtZQogICAgIHRoYXQgY2Fubm90IGJlIGRldGVybWluZWQgdW50aWwgUlRMIGdlbmVyYXRpb24gZm9yIHRoZSBmdW5jdGlvbiBoYXMKICAgICBiZWVuIGNvbXBsZXRlZC4gIFRoZSBmb2xsb3dpbmcgdmlydHVhbCByZWdpc3RlciBudW1iZXJzIGFyZQogICAgIGRlZmluZWQ6CgogICAgICdWSVJUVUFMX0lOQ09NSU5HX0FSR1NfUkVHTlVNJwogICAgICAgICAgVGhpcyBwb2ludHMgdG8gdGhlIGZpcnN0IHdvcmQgb2YgdGhlIGluY29taW5nIGFyZ3VtZW50cyBwYXNzZWQKICAgICAgICAgIG9uIHRoZSBzdGFjay4gIE5vcm1hbGx5IHRoZXNlIGFyZ3VtZW50cyBhcmUgcGxhY2VkIHRoZXJlIGJ5CiAgICAgICAgICB0aGUgY2FsbGVyLCBidXQgdGhlIGNhbGxlZSBtYXkgaGF2ZSBwdXNoZWQgc29tZSBhcmd1bWVudHMgdGhhdAogICAgICAgICAgd2VyZSBwcmV2aW91c2x5IHBhc3NlZCBpbiByZWdpc3RlcnMuCgogICAgICAgICAgV2hlbiBSVEwgZ2VuZXJhdGlvbiBpcyBjb21wbGV0ZSwgdGhpcyB2aXJ0dWFsIHJlZ2lzdGVyIGlzCiAgICAgICAgICByZXBsYWNlZCBieSB0aGUgc3VtIG9mIHRoZSByZWdpc3RlciBnaXZlbiBieQogICAgICAgICAgJ0FSR19QT0lOVEVSX1JFR05VTScgYW5kIHRoZSB2YWx1ZSBvZiAnRklSU1RfUEFSTV9PRkZTRVQnLgoKICAgICAnVklSVFVBTF9TVEFDS19WQVJTX1JFR05VTScKICAgICAgICAgIElmICdGUkFNRV9HUk9XU19ET1dOV0FSRCcgaXMgZGVmaW5lZCB0byBhIG5vbnplcm8gdmFsdWUsIHRoaXMKICAgICAgICAgIHBvaW50cyB0byBpbW1lZGlhdGVseSBhYm92ZSB0aGUgZmlyc3QgdmFyaWFibGUgb24gdGhlIHN0YWNrLgogICAgICAgICAgT3RoZXJ3aXNlLCBpdCBwb2ludHMgdG8gdGhlIGZpcnN0IHZhcmlhYmxlIG9uIHRoZSBzdGFjay4KCiAgICAgICAgICAnVklSVFVBTF9TVEFDS19WQVJTX1JFR05VTScgaXMgcmVwbGFjZWQgd2l0aCB0aGUgc3VtIG9mIHRoZQogICAgICAgICAgcmVnaXN0ZXIgZ2l2ZW4gYnkgJ0ZSQU1FX1BPSU5URVJfUkVHTlVNJyBhbmQgdGhlIHZhbHVlCiAgICAgICAgICAnU1RBUlRJTkdfRlJBTUVfT0ZGU0VUJy4KCiAgICAgJ1ZJUlRVQUxfU1RBQ0tfRFlOQU1JQ19SRUdOVU0nCiAgICAgICAgICBUaGlzIHBvaW50cyB0byB0aGUgbG9jYXRpb24gb2YgZHluYW1pY2FsbHkgYWxsb2NhdGVkIG1lbW9yeSBvbgogICAgICAgICAgdGhlIHN0YWNrIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBzdGFjayBwb2ludGVyIGhhcyBiZWVuCiAgICAgICAgICBhZGp1c3RlZCBieSB0aGUgYW1vdW50IG9mIG1lbW9yeSBkZXNpcmVkLgoKICAgICAgICAgIFRoaXMgdmlydHVhbCByZWdpc3RlciBpcyByZXBsYWNlZCBieSB0aGUgc3VtIG9mIHRoZSByZWdpc3RlcgogICAgICAgICAgZ2l2ZW4gYnkgJ1NUQUNLX1BPSU5URVJfUkVHTlVNJyBhbmQgdGhlIHZhbHVlCiAgICAgICAgICAnU1RBQ0tfRFlOQU1JQ19PRkZTRVQnLgoKICAgICAnVklSVFVBTF9PVVRHT0lOR19BUkdTX1JFR05VTScKICAgICAgICAgIFRoaXMgcG9pbnRzIHRvIHRoZSBsb2NhdGlvbiBpbiB0aGUgc3RhY2sgYXQgd2hpY2ggb3V0Z29pbmcKICAgICAgICAgIGFyZ3VtZW50cyBzaG91bGQgYmUgd3JpdHRlbiB3aGVuIHRoZSBzdGFjayBpcyBwcmUtcHVzaGVkCiAgICAgICAgICAoYXJndW1lbnRzIHB1c2hlZCB1c2luZyBwdXNoIGluc25zIHNob3VsZCBhbHdheXMgdXNlCiAgICAgICAgICAnU1RBQ0tfUE9JTlRFUl9SRUdOVU0nKS4KCiAgICAgICAgICBUaGlzIHZpcnR1YWwgcmVnaXN0ZXIgaXMgcmVwbGFjZWQgYnkgdGhlIHN1bSBvZiB0aGUgcmVnaXN0ZXIKICAgICAgICAgIGdpdmVuIGJ5ICdTVEFDS19QT0lOVEVSX1JFR05VTScgYW5kIHRoZSB2YWx1ZQogICAgICAgICAgJ1NUQUNLX1BPSU5URVJfT0ZGU0VUJy4KCicoc3VicmVnOk0gUkVHIEJZVEVOVU0pJwogICAgICdzdWJyZWcnIGV4cHJlc3Npb25zIGFyZSB1c2VkIHRvIHJlZmVyIHRvIGEgcmVnaXN0ZXIgaW4gYSBtYWNoaW5lCiAgICAgbW9kZSBvdGhlciB0aGFuIGl0cyBuYXR1cmFsIG9uZSwgb3IgdG8gcmVmZXIgdG8gb25lIHJlZ2lzdGVyIG9mIGEKICAgICBtdWx0aS1wYXJ0ICdyZWcnIHRoYXQgYWN0dWFsbHkgcmVmZXJzIHRvIHNldmVyYWwgcmVnaXN0ZXJzLgoKICAgICBFYWNoIHBzZXVkby1yZWdpc3RlciBoYXMgYSBuYXR1cmFsIG1vZGUuICBJZiBpdCBpcyBuZWNlc3NhcnkgdG8KICAgICBvcGVyYXRlIG9uIGl0IGluIGEgZGlmZmVyZW50IG1vZGUtLWZvciBleGFtcGxlLCB0byBwZXJmb3JtIGEKICAgICBmdWxsd29yZCBtb3ZlIGluc3RydWN0aW9uIG9uIGEgcHNldWRvLXJlZ2lzdGVyIHRoYXQgY29udGFpbnMgYQogICAgIHNpbmdsZSBieXRlLS10aGUgcHNldWRvLXJlZ2lzdGVyIG11c3QgYmUgZW5jbG9zZWQgaW4gYSAnc3VicmVnJy4KICAgICBJbiBzdWNoIGEgY2FzZSwgQllURU5VTSBpcyB6ZXJvLgoKICAgICBVc3VhbGx5IE0gaXMgYXQgbGVhc3QgYXMgbmFycm93IGFzIHRoZSBtb2RlIG9mIFJFRywgaW4gd2hpY2ggY2FzZQogICAgIGl0IGlzIHJlc3RyaWN0aW5nIGNvbnNpZGVyYXRpb24gdG8gb25seSB0aGUgYml0cyBvZiBSRUcgdGhhdCBhcmUgaW4KICAgICBNLgoKICAgICBTb21ldGltZXMgTSBpcyB3aWRlciB0aGFuIHRoZSBtb2RlIG9mIFJFRy4gIFRoZXNlICdzdWJyZWcnCiAgICAgZXhwcmVzc2lvbnMgYXJlIG9mdGVuIGNhbGxlZCAicGFyYWRveGljYWwiLiAgVGhleSBhcmUgdXNlZCBpbiBjYXNlcwogICAgIHdoZXJlIHdlIHdhbnQgdG8gcmVmZXIgdG8gYW4gb2JqZWN0IGluIGEgd2lkZXIgbW9kZSBidXQgZG8gbm90IGNhcmUKICAgICB3aGF0IHZhbHVlIHRoZSBhZGRpdGlvbmFsIGJpdHMgaGF2ZS4gIFRoZSByZWxvYWQgcGFzcyBlbnN1cmVzIHRoYXQKICAgICBwYXJhZG94aWNhbCByZWZlcmVuY2VzIGFyZSBvbmx5IG1hZGUgdG8gaGFyZCByZWdpc3RlcnMuCgogICAgIFRoZSBvdGhlciB1c2Ugb2YgJ3N1YnJlZycgaXMgdG8gZXh0cmFjdCB0aGUgaW5kaXZpZHVhbCByZWdpc3RlcnMgb2YKICAgICBhIG11bHRpLXJlZ2lzdGVyIHZhbHVlLiAgTWFjaGluZSBtb2RlcyBzdWNoIGFzICdESW1vZGUnIGFuZAogICAgICdUSW1vZGUnIGNhbiBpbmRpY2F0ZSB2YWx1ZXMgbG9uZ2VyIHRoYW4gYSB3b3JkLCB2YWx1ZXMgd2hpY2gKICAgICB1c3VhbGx5IHJlcXVpcmUgdHdvIG9yIG1vcmUgY29uc2VjdXRpdmUgcmVnaXN0ZXJzLiAgVG8gYWNjZXNzIG9uZQogICAgIG9mIHRoZSByZWdpc3RlcnMsIHVzZSBhICdzdWJyZWcnIHdpdGggbW9kZSAnU0ltb2RlJyBhbmQgYSBCWVRFTlVNCiAgICAgb2Zmc2V0IHRoYXQgc2F5cyB3aGljaCByZWdpc3Rlci4KCiAgICAgU3RvcmluZyBpbiBhIG5vbi1wYXJhZG94aWNhbCAnc3VicmVnJyBoYXMgdW5kZWZpbmVkIHJlc3VsdHMgZm9yCiAgICAgYml0cyBiZWxvbmdpbmcgdG8gdGhlIHNhbWUgd29yZCBhcyB0aGUgJ3N1YnJlZycuICBUaGlzIGxheGl0eSBtYWtlcwogICAgIGl0IGVhc2llciB0byBnZW5lcmF0ZSBlZmZpY2llbnQgY29kZSBmb3Igc3VjaCBpbnN0cnVjdGlvbnMuICBUbwogICAgIHJlcHJlc2VudCBhbiBpbnN0cnVjdGlvbiB0aGF0IHByZXNlcnZlcyBhbGwgdGhlIGJpdHMgb3V0c2lkZSBvZgogICAgIHRob3NlIGluIHRoZSAnc3VicmVnJywgdXNlICdzdHJpY3RfbG93X3BhcnQnIGFyb3VuZCB0aGUgJ3N1YnJlZycuCgogICAgIFRoZSBjb21waWxhdGlvbiBwYXJhbWV0ZXIgJ1dPUkRTX0JJR19FTkRJQU4nLCBpZiBzZXQgdG8gMSwgc2F5cwogICAgIHRoYXQgYnl0ZSBudW1iZXIgemVybyBpcyBwYXJ0IG9mIHRoZSBtb3N0IHNpZ25pZmljYW50IHdvcmQ7CiAgICAgb3RoZXJ3aXNlLCBpdCBpcyBwYXJ0IG9mIHRoZSBsZWFzdCBzaWduaWZpY2FudCB3b3JkLgoKICAgICBUaGUgY29tcGlsYXRpb24gcGFyYW1ldGVyICdCWVRFU19CSUdfRU5ESUFOJywgaWYgc2V0IHRvIDEsIHNheXMKICAgICB0aGF0IGJ5dGUgbnVtYmVyIHplcm8gaXMgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYnl0ZSB3aXRoaW4gYSB3b3JkOwogICAgIG90aGVyd2lzZSwgaXQgaXMgdGhlIGxlYXN0IHNpZ25pZmljYW50IGJ5dGUgd2l0aGluIGEgd29yZC4KCiAgICAgT24gYSBmZXcgdGFyZ2V0cywgJ0ZMT0FUX1dPUkRTX0JJR19FTkRJQU4nIGRpc2FncmVlcyB3aXRoCiAgICAgJ1dPUkRTX0JJR19FTkRJQU4nLiAgSG93ZXZlciwgbW9zdCBwYXJ0cyBvZiB0aGUgY29tcGlsZXIgdHJlYXQKICAgICBmbG9hdGluZyBwb2ludCB2YWx1ZXMgYXMgaWYgdGhleSBoYWQgdGhlIHNhbWUgZW5kaWFubmVzcyBhcyBpbnRlZ2VyCiAgICAgdmFsdWVzLiAgVGhpcyB3b3JrcyBiZWNhdXNlIHRoZXkgaGFuZGxlIHRoZW0gc29sZWx5IGFzIGEgY29sbGVjdGlvbgogICAgIG9mIGludGVnZXIgdmFsdWVzLCB3aXRoIG5vIHBhcnRpY3VsYXIgbnVtZXJpY2FsIHZhbHVlLiAgT25seSByZWFsLmMKICAgICBhbmQgdGhlIHJ1bnRpbWUgbGlicmFyaWVzIGNhcmUgYWJvdXQgJ0ZMT0FUX1dPUkRTX0JJR19FTkRJQU4nLgoKICAgICBCZXR3ZWVuIHRoZSBjb21iaW5lciBwYXNzIGFuZCB0aGUgcmVsb2FkIHBhc3MsIGl0IGlzIHBvc3NpYmxlIHRvCiAgICAgaGF2ZSBhIHBhcmFkb3hpY2FsICdzdWJyZWcnIHdoaWNoIGNvbnRhaW5zIGEgJ21lbScgaW5zdGVhZCBvZiBhCiAgICAgJ3JlZycgYXMgaXRzIGZpcnN0IG9wZXJhbmQuICBBZnRlciB0aGUgcmVsb2FkIHBhc3MsIGl0IGlzIGFsc28KICAgICBwb3NzaWJsZSB0byBoYXZlIGEgbm9uLXBhcmFkb3hpY2FsICdzdWJyZWcnIHdoaWNoIGNvbnRhaW5zIGEgJ21lbSc7CiAgICAgdGhpcyB1c3VhbGx5IG9jY3VycyB3aGVuIHRoZSAnbWVtJyBpcyBhIHN0YWNrIHNsb3Qgd2hpY2ggcmVwbGFjZWQgYQogICAgIHBzZXVkbyByZWdpc3Rlci4KCiAgICAgTm90ZSB0aGF0IGl0IGlzIG5vdCB2YWxpZCB0byBhY2Nlc3MgYSAnREZtb2RlJyB2YWx1ZSBpbiAnU0Ztb2RlJwogICAgIHVzaW5nIGEgJ3N1YnJlZycuICBPbiBzb21lIG1hY2hpbmVzIHRoZSBtb3N0IHNpZ25pZmljYW50IHBhcnQgb2YgYQogICAgICdERm1vZGUnIHZhbHVlIGRvZXMgbm90IGhhdmUgdGhlIHNhbWUgZm9ybWF0IGFzIGEgc2luZ2xlLXByZWNpc2lvbgogICAgIGZsb2F0aW5nIHZhbHVlLgoKICAgICBJdCBpcyBhbHNvIG5vdCB2YWxpZCB0byBhY2Nlc3MgYSBzaW5nbGUgd29yZCBvZiBhIG11bHRpLXdvcmQgdmFsdWUKICAgICBpbiBhIGhhcmQgcmVnaXN0ZXIgd2hlbiBsZXNzIHJlZ2lzdGVycyBjYW4gaG9sZCB0aGUgdmFsdWUgdGhhbgogICAgIHdvdWxkIGJlIGV4cGVjdGVkIGZyb20gaXRzIHNpemUuICBGb3IgZXhhbXBsZSwgc29tZSAzMi1iaXQgbWFjaGluZXMKICAgICBoYXZlIGZsb2F0aW5nLXBvaW50IHJlZ2lzdGVycyB0aGF0IGNhbiBob2xkIGFuIGVudGlyZSAnREZtb2RlJwogICAgIHZhbHVlLiAgSWYgcmVnaXN0ZXIgMTAgd2VyZSBzdWNoIGEgcmVnaXN0ZXIgJyhzdWJyZWc6U0kgKHJlZzpERiAxMCkKICAgICA0KScgd291bGQgYmUgaW52YWxpZCBiZWNhdXNlIHRoZXJlIGlzIG5vIHdheSB0byBjb252ZXJ0IHRoYXQKICAgICByZWZlcmVuY2UgdG8gYSBzaW5nbGUgbWFjaGluZSByZWdpc3Rlci4gIFRoZSByZWxvYWQgcGFzcyBwcmV2ZW50cwogICAgICdzdWJyZWcnIGV4cHJlc3Npb25zIHN1Y2ggYXMgdGhlc2UgZnJvbSBiZWluZyBmb3JtZWQuCgogICAgIFRoZSBmaXJzdCBvcGVyYW5kIG9mIGEgJ3N1YnJlZycgZXhwcmVzc2lvbiBpcyBjdXN0b21hcmlseSBhY2Nlc3NlZAogICAgIHdpdGggdGhlICdTVUJSRUdfUkVHJyBtYWNybyBhbmQgdGhlIHNlY29uZCBvcGVyYW5kIGlzIGN1c3RvbWFyaWx5CiAgICAgYWNjZXNzZWQgd2l0aCB0aGUgJ1NVQlJFR19CWVRFJyBtYWNyby4KCicoc2NyYXRjaDpNKScKICAgICBUaGlzIHJlcHJlc2VudHMgYSBzY3JhdGNoIHJlZ2lzdGVyIHRoYXQgd2lsbCBiZSByZXF1aXJlZCBmb3IgdGhlCiAgICAgZXhlY3V0aW9uIG9mIGEgc2luZ2xlIGluc3RydWN0aW9uIGFuZCBub3QgdXNlZCBzdWJzZXF1ZW50bHkuICBJdCBpcwogICAgIGNvbnZlcnRlZCBpbnRvIGEgJ3JlZycgYnkgZWl0aGVyIHRoZSBsb2NhbCByZWdpc3RlciBhbGxvY2F0b3Igb3IKICAgICB0aGUgcmVsb2FkIHBhc3MuCgogICAgICdzY3JhdGNoJyBpcyB1c3VhbGx5IHByZXNlbnQgaW5zaWRlIGEgJ2Nsb2JiZXInIG9wZXJhdGlvbiAoKm5vdGUKICAgICBTaWRlIEVmZmVjdHM6OikuCgonKGNjMCknCiAgICAgVGhpcyByZWZlcnMgdG8gdGhlIG1hY2hpbmUncyBjb25kaXRpb24gY29kZSByZWdpc3Rlci4gIEl0IGhhcyBubwogICAgIG9wZXJhbmRzIGFuZCBtYXkgbm90IGhhdmUgYSBtYWNoaW5lIG1vZGUuICBUaGVyZSBhcmUgdHdvIHdheXMgdG8KICAgICB1c2UgaXQ6CgogICAgICAgICogVG8gc3RhbmQgZm9yIGEgY29tcGxldGUgc2V0IG9mIGNvbmRpdGlvbiBjb2RlIGZsYWdzLiAgVGhpcyBpcwogICAgICAgICAgYmVzdCBvbiBtb3N0IG1hY2hpbmVzLCB3aGVyZSBlYWNoIGNvbXBhcmlzb24gc2V0cyB0aGUgZW50aXJlCiAgICAgICAgICBzZXJpZXMgb2YgZmxhZ3MuCgogICAgICAgICAgV2l0aCB0aGlzIHRlY2huaXF1ZSwgJyhjYzApJyBtYXkgYmUgdmFsaWRseSB1c2VkIGluIG9ubHkgdHdvCiAgICAgICAgICBjb250ZXh0czogYXMgdGhlIGRlc3RpbmF0aW9uIG9mIGFuIGFzc2lnbm1lbnQgKGluIHRlc3QgYW5kCiAgICAgICAgICBjb21wYXJlIGluc3RydWN0aW9ucykgYW5kIGluIGNvbXBhcmlzb24gb3BlcmF0b3JzIGNvbXBhcmluZwogICAgICAgICAgYWdhaW5zdCB6ZXJvICgnY29uc3RfaW50JyB3aXRoIHZhbHVlIHplcm87IHRoYXQgaXMgdG8gc2F5LAogICAgICAgICAgJ2NvbnN0MF9ydHgnKS4KCiAgICAgICAgKiBUbyBzdGFuZCBmb3IgYSBzaW5nbGUgZmxhZyB0aGF0IGlzIHRoZSByZXN1bHQgb2YgYSBzaW5nbGUKICAgICAgICAgIGNvbmRpdGlvbi4gIFRoaXMgaXMgdXNlZnVsIG9uIG1hY2hpbmVzIHRoYXQgaGF2ZSBvbmx5IGEgc2luZ2xlCiAgICAgICAgICBmbGFnIGJpdCwgYW5kIGluIHdoaWNoIGNvbXBhcmlzb24gaW5zdHJ1Y3Rpb25zIG11c3Qgc3BlY2lmeQogICAgICAgICAgdGhlIGNvbmRpdGlvbiB0byB0ZXN0LgoKICAgICAgICAgIFdpdGggdGhpcyB0ZWNobmlxdWUsICcoY2MwKScgbWF5IGJlIHZhbGlkbHkgdXNlZCBpbiBvbmx5IHR3bwogICAgICAgICAgY29udGV4dHM6IGFzIHRoZSBkZXN0aW5hdGlvbiBvZiBhbiBhc3NpZ25tZW50IChpbiB0ZXN0IGFuZAogICAgICAgICAgY29tcGFyZSBpbnN0cnVjdGlvbnMpIHdoZXJlIHRoZSBzb3VyY2UgaXMgYSBjb21wYXJpc29uCiAgICAgICAgICBvcGVyYXRvciwgYW5kIGFzIHRoZSBmaXJzdCBvcGVyYW5kIG9mICdpZl90aGVuX2Vsc2UnIChpbiBhCiAgICAgICAgICBjb25kaXRpb25hbCBicmFuY2gpLgoKICAgICBUaGVyZSBpcyBvbmx5IG9uZSBleHByZXNzaW9uIG9iamVjdCBvZiBjb2RlICdjYzAnOyBpdCBpcyB0aGUgdmFsdWUKICAgICBvZiB0aGUgdmFyaWFibGUgJ2NjMF9ydHgnLiAgQW55IGF0dGVtcHQgdG8gY3JlYXRlIGFuIGV4cHJlc3Npb24gb2YKICAgICBjb2RlICdjYzAnIHdpbGwgcmV0dXJuICdjYzBfcnR4Jy4KCiAgICAgSW5zdHJ1Y3Rpb25zIGNhbiBzZXQgdGhlIGNvbmRpdGlvbiBjb2RlIGltcGxpY2l0bHkuICBPbiBtYW55CiAgICAgbWFjaGluZXMsIG5lYXJseSBhbGwgaW5zdHJ1Y3Rpb25zIHNldCB0aGUgY29uZGl0aW9uIGNvZGUgYmFzZWQgb24KICAgICB0aGUgdmFsdWUgdGhhdCB0aGV5IGNvbXB1dGUgb3Igc3RvcmUuICBJdCBpcyBub3QgbmVjZXNzYXJ5IHRvCiAgICAgcmVjb3JkIHRoZXNlIGFjdGlvbnMgZXhwbGljaXRseSBpbiB0aGUgUlRMIGJlY2F1c2UgdGhlIG1hY2hpbmUKICAgICBkZXNjcmlwdGlvbiBpbmNsdWRlcyBhIHByZXNjcmlwdGlvbiBmb3IgcmVjb2duaXppbmcgdGhlCiAgICAgaW5zdHJ1Y3Rpb25zIHRoYXQgZG8gc28gKGJ5IG1lYW5zIG9mIHRoZSBtYWNybyAnTk9USUNFX1VQREFURV9DQycpLgogICAgICpOb3RlIENvbmRpdGlvbiBDb2RlOjouICBPbmx5IGluc3RydWN0aW9ucyB3aG9zZSBzb2xlIHB1cnBvc2UgaXMgdG8KICAgICBzZXQgdGhlIGNvbmRpdGlvbiBjb2RlLCBhbmQgaW5zdHJ1Y3Rpb25zIHRoYXQgdXNlIHRoZSBjb25kaXRpb24KICAgICBjb2RlLCBuZWVkIG1lbnRpb24gJyhjYzApJy4KCiAgICAgT24gc29tZSBtYWNoaW5lcywgdGhlIGNvbmRpdGlvbiBjb2RlIHJlZ2lzdGVyIGlzIGdpdmVuIGEgcmVnaXN0ZXIKICAgICBudW1iZXIgYW5kIGEgJ3JlZycgaXMgdXNlZCBpbnN0ZWFkIG9mICcoY2MwKScuICBUaGlzIGlzIHVzdWFsbHkgdGhlCiAgICAgcHJlZmVyYWJsZSBhcHByb2FjaCBpZiBvbmx5IGEgc21hbGwgc3Vic2V0IG9mIGluc3RydWN0aW9ucyBtb2RpZnkKICAgICB0aGUgY29uZGl0aW9uIGNvZGUuICBPdGhlciBtYWNoaW5lcyBzdG9yZSBjb25kaXRpb24gY29kZXMgaW4KICAgICBnZW5lcmFsIHJlZ2lzdGVyczsgaW4gc3VjaCBjYXNlcyBhIHBzZXVkbyByZWdpc3RlciBzaG91bGQgYmUgdXNlZC4KCiAgICAgU29tZSBtYWNoaW5lcywgc3VjaCBhcyB0aGUgU1BBUkMgYW5kIFJTLzYwMDAsIGhhdmUgdHdvIHNldHMgb2YKICAgICBhcml0aG1ldGljIGluc3RydWN0aW9ucywgb25lIHRoYXQgc2V0cyBhbmQgb25lIHRoYXQgZG9lcyBub3Qgc2V0CiAgICAgdGhlIGNvbmRpdGlvbiBjb2RlLiAgVGhpcyBpcyBiZXN0IGhhbmRsZWQgYnkgbm9ybWFsbHkgZ2VuZXJhdGluZwogICAgIHRoZSBpbnN0cnVjdGlvbiB0aGF0IGRvZXMgbm90IHNldCB0aGUgY29uZGl0aW9uIGNvZGUsIGFuZCBtYWtpbmcgYQogICAgIHBhdHRlcm4gdGhhdCBib3RoIHBlcmZvcm1zIHRoZSBhcml0aG1ldGljIGFuZCBzZXRzIHRoZSBjb25kaXRpb24KICAgICBjb2RlIHJlZ2lzdGVyICh3aGljaCB3b3VsZCBub3QgYmUgJyhjYzApJyBpbiB0aGlzIGNhc2UpLiAgRm9yCiAgICAgZXhhbXBsZXMsIHNlYXJjaCBmb3IgJ2FkZGNjJyBhbmQgJ2FuZGNjJyBpbiAnc3BhcmMubWQnLgoKJyhwYyknCiAgICAgVGhpcyByZXByZXNlbnRzIHRoZSBtYWNoaW5lJ3MgcHJvZ3JhbSBjb3VudGVyLiAgSXQgaGFzIG5vIG9wZXJhbmRzCiAgICAgYW5kIG1heSBub3QgaGF2ZSBhIG1hY2hpbmUgbW9kZS4gICcocGMpJyBtYXkgYmUgdmFsaWRseSB1c2VkIG9ubHkKICAgICBpbiBjZXJ0YWluIHNwZWNpZmljIGNvbnRleHRzIGluIGp1bXAgaW5zdHJ1Y3Rpb25zLgoKICAgICBUaGVyZSBpcyBvbmx5IG9uZSBleHByZXNzaW9uIG9iamVjdCBvZiBjb2RlICdwYyc7IGl0IGlzIHRoZSB2YWx1ZQogICAgIG9mIHRoZSB2YXJpYWJsZSAncGNfcnR4Jy4gIEFueSBhdHRlbXB0IHRvIGNyZWF0ZSBhbiBleHByZXNzaW9uIG9mCiAgICAgY29kZSAncGMnIHdpbGwgcmV0dXJuICdwY19ydHgnLgoKICAgICBBbGwgaW5zdHJ1Y3Rpb25zIHRoYXQgZG8gbm90IGp1bXAgYWx0ZXIgdGhlIHByb2dyYW0gY291bnRlcgogICAgIGltcGxpY2l0bHkgYnkgaW5jcmVtZW50aW5nIGl0LCBidXQgdGhlcmUgaXMgbm8gbmVlZCB0byBtZW50aW9uIHRoaXMKICAgICBpbiB0aGUgUlRMLgoKJyhtZW06TSBBRERSIEFMSUFTKScKICAgICBUaGlzIFJUWCByZXByZXNlbnRzIGEgcmVmZXJlbmNlIHRvIG1haW4gbWVtb3J5IGF0IGFuIGFkZHJlc3MKICAgICByZXByZXNlbnRlZCBieSB0aGUgZXhwcmVzc2lvbiBBRERSLiAgTSBzcGVjaWZpZXMgaG93IGxhcmdlIGEgdW5pdAogICAgIG9mIG1lbW9yeSBpcyBhY2Nlc3NlZC4gIEFMSUFTIHNwZWNpZmllcyBhbiBhbGlhcyBzZXQgZm9yIHRoZQogICAgIHJlZmVyZW5jZS4gIEluIGdlbmVyYWwgdHdvIGl0ZW1zIGFyZSBpbiBkaWZmZXJlbnQgYWxpYXMgc2V0cyBpZgogICAgIHRoZXkgY2Fubm90IHJlZmVyZW5jZSB0aGUgc2FtZSBtZW1vcnkgYWRkcmVzcy4KCiAgICAgVGhlIGNvbnN0cnVjdCAnKG1lbTpCTEsgKHNjcmF0Y2gpKScgaXMgY29uc2lkZXJlZCB0byBhbGlhcyBhbGwKICAgICBvdGhlciBtZW1vcmllcy4gIFRodXMgaXQgbWF5IGJlIHVzZWQgYXMgYSBtZW1vcnkgYmFycmllciBpbgogICAgIGVwaWxvZ3VlIHN0YWNrIGRlYWxsb2NhdGlvbiBwYXR0ZXJucy4KCicoYWRkcmVzc29mOk0gUkVHKScKICAgICBUaGlzIFJUWCByZXByZXNlbnRzIGEgcmVxdWVzdCBmb3IgdGhlIGFkZHJlc3Mgb2YgcmVnaXN0ZXIgUkVHLiAgSXRzCiAgICAgbW9kZSBpcyBhbHdheXMgJ1Btb2RlJy4gIElmIHRoZXJlIGFyZSBhbnkgJ2FkZHJlc3NvZicgZXhwcmVzc2lvbnMKICAgICBsZWZ0IGluIHRoZSBmdW5jdGlvbiBhZnRlciBDU0UsIFJFRyBpcyBmb3JjZWQgaW50byB0aGUgc3RhY2sgYW5kCiAgICAgdGhlICdhZGRyZXNzb2YnIGV4cHJlc3Npb24gaXMgcmVwbGFjZWQgd2l0aCBhICdwbHVzJyBleHByZXNzaW9uIGZvcgogICAgIHRoZSBhZGRyZXNzIG9mIGl0cyBzdGFjayBzbG90LgoKJyhjb25jYXRNIFJUWCBSVFgpJwogICAgIFRoaXMgUlRYIHJlcHJlc2VudHMgdGhlIGNvbmNhdGVuYXRpb24gb2YgdHdvIG90aGVyIFJUWHMuICBUaGlzIGlzCiAgICAgdXNlZCBmb3IgY29tcGxleCB2YWx1ZXMuICBJdCBzaG91bGQgb25seSBhcHBlYXIgaW4gdGhlIFJUTCBhdHRhY2hlZAogICAgIHRvIGRlY2xhcmF0aW9ucyBhbmQgZHVyaW5nIFJUTCBnZW5lcmF0aW9uLiAgSXQgc2hvdWxkIG5vdCBhcHBlYXIgaW4KICAgICB0aGUgb3JkaW5hcnkgaW5zbiBjaGFpbi4KCicoY29uY2F0bk0gW1JUWCAuLi5dKScKICAgICBUaGlzIFJUWCByZXByZXNlbnRzIHRoZSBjb25jYXRlbmF0aW9uIG9mIGFsbCB0aGUgUlRYIHRvIG1ha2UgYQogICAgIHNpbmdsZSB2YWx1ZS4gIExpa2UgJ2NvbmNhdCcsIHRoaXMgc2hvdWxkIG9ubHkgYXBwZWFyIGluCiAgICAgZGVjbGFyYXRpb25zLCBhbmQgbm90IGluIHRoZSBpbnNuIGNoYWluLgoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IEFyaXRobWV0aWMsICBOZXh0OiBDb21wYXJpc29ucywgIFByZXY6IFJlZ3MgYW5kIE1lbW9yeSwgIFVwOiBSVEwKCjEyLjkgUlRMIEV4cHJlc3Npb25zIGZvciBBcml0aG1ldGljCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpVbmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCwgYWxsIHRoZSBvcGVyYW5kcyBvZiBhcml0aG1ldGljIGV4cHJlc3Npb25zCm11c3QgYmUgdmFsaWQgZm9yIG1vZGUgTS4gIEFuIG9wZXJhbmQgaXMgdmFsaWQgZm9yIG1vZGUgTSBpZiBpdCBoYXMgbW9kZQpNLCBvciBpZiBpdCBpcyBhICdjb25zdF9pbnQnIG9yICdjb25zdF9kb3VibGUnIGFuZCBNIGlzIGEgbW9kZSBvZiBjbGFzcwonTU9ERV9JTlQnLgoKIEZvciBjb21tdXRhdGl2ZSBiaW5hcnkgb3BlcmF0aW9ucywgY29uc3RhbnRzIHNob3VsZCBiZSBwbGFjZWQgaW4gdGhlCnNlY29uZCBvcGVyYW5kLgoKJyhwbHVzOk0gWCBZKScKJyhzc19wbHVzOk0gWCBZKScKJyh1c19wbHVzOk0gWCBZKScKCiAgICAgVGhlc2UgdGhyZWUgZXhwcmVzc2lvbnMgYWxsIHJlcHJlc2VudCB0aGUgc3VtIG9mIHRoZSB2YWx1ZXMKICAgICByZXByZXNlbnRlZCBieSBYIGFuZCBZIGNhcnJpZWQgb3V0IGluIG1hY2hpbmUgbW9kZSBNLiAgVGhleSBkaWZmZXIKICAgICBpbiB0aGVpciBiZWhhdmlvciBvbiBvdmVyZmxvdyBvZiBpbnRlZ2VyIG1vZGVzLiAgJ3BsdXMnIHdyYXBzIHJvdW5kCiAgICAgbW9kdWxvIHRoZSB3aWR0aCBvZiBNOyAnc3NfcGx1cycgc2F0dXJhdGVzIGF0IHRoZSBtYXhpbXVtIHNpZ25lZAogICAgIHZhbHVlIHJlcHJlc2VudGFibGUgaW4gTTsgJ3VzX3BsdXMnIHNhdHVyYXRlcyBhdCB0aGUgbWF4aW11bQogICAgIHVuc2lnbmVkIHZhbHVlLgoKJyhsb19zdW06TSBYIFkpJwoKICAgICBUaGlzIGV4cHJlc3Npb24gcmVwcmVzZW50cyB0aGUgc3VtIG9mIFggYW5kIHRoZSBsb3ctb3JkZXIgYml0cyBvZgogICAgIFkuICBJdCBpcyB1c2VkIHdpdGggJ2hpZ2gnICgqbm90ZSBDb25zdGFudHM6OikgdG8gcmVwcmVzZW50IHRoZQogICAgIHR5cGljYWwgdHdvLWluc3RydWN0aW9uIHNlcXVlbmNlIHVzZWQgaW4gUklTQyBtYWNoaW5lcyB0byByZWZlcmVuY2UKICAgICBhIGdsb2JhbCBtZW1vcnkgbG9jYXRpb24uCgogICAgIFRoZSBudW1iZXIgb2YgbG93IG9yZGVyIGJpdHMgaXMgbWFjaGluZS1kZXBlbmRlbnQgYnV0IGlzIG5vcm1hbGx5CiAgICAgdGhlIG51bWJlciBvZiBiaXRzIGluIGEgJ1Btb2RlJyBpdGVtIG1pbnVzIHRoZSBudW1iZXIgb2YgYml0cyBzZXQKICAgICBieSAnaGlnaCcuCgogICAgIE0gc2hvdWxkIGJlICdQbW9kZScuCgonKG1pbnVzOk0gWCBZKScKJyhzc19taW51czpNIFggWSknCicodXNfbWludXM6TSBYIFkpJwoKICAgICBUaGVzZSB0aHJlZSBleHByZXNzaW9ucyByZXByZXNlbnQgdGhlIHJlc3VsdCBvZiBzdWJ0cmFjdGluZyBZIGZyb20KICAgICBYLCBjYXJyaWVkIG91dCBpbiBtb2RlIE0uICBCZWhhdmlvciBvbiBvdmVyZmxvdyBpcyB0aGUgc2FtZSBhcyBmb3IKICAgICB0aGUgdGhyZWUgdmFyaWFudHMgb2YgJ3BsdXMnIChzZWUgYWJvdmUpLgoKJyhjb21wYXJlOk0gWCBZKScKICAgICBSZXByZXNlbnRzIHRoZSByZXN1bHQgb2Ygc3VidHJhY3RpbmcgWSBmcm9tIFggZm9yIHB1cnBvc2VzIG9mCiAgICAgY29tcGFyaXNvbi4gIFRoZSByZXN1bHQgaXMgY29tcHV0ZWQgd2l0aG91dCBvdmVyZmxvdywgYXMgaWYgd2l0aAogICAgIGluZmluaXRlIHByZWNpc2lvbi4KCiAgICAgT2YgY291cnNlLCBtYWNoaW5lcyBjYW4ndCByZWFsbHkgc3VidHJhY3Qgd2l0aCBpbmZpbml0ZSBwcmVjaXNpb24uCiAgICAgSG93ZXZlciwgdGhleSBjYW4gcHJldGVuZCB0byBkbyBzbyB3aGVuIG9ubHkgdGhlIHNpZ24gb2YgdGhlIHJlc3VsdAogICAgIHdpbGwgYmUgdXNlZCwgd2hpY2ggaXMgdGhlIGNhc2Ugd2hlbiB0aGUgcmVzdWx0IGlzIHN0b3JlZCBpbiB0aGUKICAgICBjb25kaXRpb24gY29kZS4gIEFuZCB0aGF0IGlzIHRoZSBfb25seV8gd2F5IHRoaXMga2luZCBvZiBleHByZXNzaW9uCiAgICAgbWF5IHZhbGlkbHkgYmUgdXNlZDogYXMgYSB2YWx1ZSB0byBiZSBzdG9yZWQgaW4gdGhlIGNvbmRpdGlvbgogICAgIGNvZGVzLCBlaXRoZXIgJyhjYzApJyBvciBhIHJlZ2lzdGVyLiAgKk5vdGUgQ29tcGFyaXNvbnM6Oi4KCiAgICAgVGhlIG1vZGUgTSBpcyBub3QgcmVsYXRlZCB0byB0aGUgbW9kZXMgb2YgWCBhbmQgWSwgYnV0IGluc3RlYWQgaXMKICAgICB0aGUgbW9kZSBvZiB0aGUgY29uZGl0aW9uIGNvZGUgdmFsdWUuICBJZiAnKGNjMCknIGlzIHVzZWQsIGl0IGlzCiAgICAgJ1ZPSURtb2RlJy4gIE90aGVyd2lzZSBpdCBpcyBzb21lIG1vZGUgaW4gY2xhc3MgJ01PREVfQ0MnLCBvZnRlbgogICAgICdDQ21vZGUnLiAgKk5vdGUgQ29uZGl0aW9uIENvZGU6Oi4gIElmIE0gaXMgJ1ZPSURtb2RlJyBvciAnQ0Ntb2RlJywKICAgICB0aGUgb3BlcmF0aW9uIHJldHVybnMgc3VmZmljaWVudCBpbmZvcm1hdGlvbiAoaW4gYW4gdW5zcGVjaWZpZWQKICAgICBmb3JtYXQpIHNvIHRoYXQgYW55IGNvbXBhcmlzb24gb3BlcmF0b3IgY2FuIGJlIGFwcGxpZWQgdG8gdGhlCiAgICAgcmVzdWx0IG9mIHRoZSAnQ09NUEFSRScgb3BlcmF0aW9uLiAgRm9yIG90aGVyIG1vZGVzIGluIGNsYXNzCiAgICAgJ01PREVfQ0MnLCB0aGUgb3BlcmF0aW9uIG9ubHkgcmV0dXJucyBhIHN1YnNldCBvZiB0aGlzIGluZm9ybWF0aW9uLgoKICAgICBOb3JtYWxseSwgWCBhbmQgWSBtdXN0IGhhdmUgdGhlIHNhbWUgbW9kZS4gIE90aGVyd2lzZSwgJ2NvbXBhcmUnIGlzCiAgICAgdmFsaWQgb25seSBpZiB0aGUgbW9kZSBvZiBYIGlzIGluIGNsYXNzICdNT0RFX0lOVCcgYW5kIFkgaXMgYQogICAgICdjb25zdF9pbnQnIG9yICdjb25zdF9kb3VibGUnIHdpdGggbW9kZSAnVk9JRG1vZGUnLiAgVGhlIG1vZGUgb2YgWAogICAgIGRldGVybWluZXMgd2hhdCBtb2RlIHRoZSBjb21wYXJpc29uIGlzIHRvIGJlIGRvbmUgaW47IHRodXMgaXQgbXVzdAogICAgIG5vdCBiZSAnVk9JRG1vZGUnLgoKICAgICBJZiBvbmUgb2YgdGhlIG9wZXJhbmRzIGlzIGEgY29uc3RhbnQsIGl0IHNob3VsZCBiZSBwbGFjZWQgaW4gdGhlCiAgICAgc2Vjb25kIG9wZXJhbmQgYW5kIHRoZSBjb21wYXJpc29uIGNvZGUgYWRqdXN0ZWQgYXMgYXBwcm9wcmlhdGUuCgogICAgIEEgJ2NvbXBhcmUnIHNwZWNpZnlpbmcgdHdvICdWT0lEbW9kZScgY29uc3RhbnRzIGlzIG5vdCB2YWxpZCBzaW5jZQogICAgIHRoZXJlIGlzIG5vIHdheSB0byBrbm93IGluIHdoYXQgbW9kZSB0aGUgY29tcGFyaXNvbiBpcyB0byBiZQogICAgIHBlcmZvcm1lZDsgdGhlIGNvbXBhcmlzb24gbXVzdCBlaXRoZXIgYmUgZm9sZGVkIGR1cmluZyB0aGUKICAgICBjb21waWxhdGlvbiBvciB0aGUgZmlyc3Qgb3BlcmFuZCBtdXN0IGJlIGxvYWRlZCBpbnRvIGEgcmVnaXN0ZXIKICAgICB3aGlsZSBpdHMgbW9kZSBpcyBzdGlsbCBrbm93bi4KCicobmVnOk0gWCknCicoc3NfbmVnOk0gWCknCicodXNfbmVnOk0gWCknCiAgICAgVGhlc2UgdHdvIGV4cHJlc3Npb25zIHJlcHJlc2VudCB0aGUgbmVnYXRpb24gKHN1YnRyYWN0aW9uIGZyb20KICAgICB6ZXJvKSBvZiB0aGUgdmFsdWUgcmVwcmVzZW50ZWQgYnkgWCwgY2FycmllZCBvdXQgaW4gbW9kZSBNLiAgVGhleQogICAgIGRpZmZlciBpbiB0aGUgYmVoYXZpb3Igb24gb3ZlcmZsb3cgb2YgaW50ZWdlciBtb2Rlcy4gIEluIHRoZSBjYXNlCiAgICAgb2YgJ25lZycsIHRoZSBuZWdhdGlvbiBvZiB0aGUgb3BlcmFuZCBtYXkgYmUgYSBudW1iZXIgbm90CiAgICAgcmVwcmVzZW50YWJsZSBpbiBtb2RlIE0sIGluIHdoaWNoIGNhc2UgaXQgaXMgdHJ1bmNhdGVkIHRvIE0uCiAgICAgJ3NzX25lZycgYW5kICd1c19uZWcnIGVuc3VyZSB0aGF0IGFuIG91dC1vZi1ib3VuZHMgcmVzdWx0IHNhdHVyYXRlcwogICAgIHRvIHRoZSBtYXhpbXVtIG9yIG1pbmltdW0gc2lnbmVkIG9yIHVuc2lnbmVkIHZhbHVlLgoKJyhtdWx0Ok0gWCBZKScKJyhzc19tdWx0Ok0gWCBZKScKJyh1c19tdWx0Ok0gWCBZKScKICAgICBSZXByZXNlbnRzIHRoZSBzaWduZWQgcHJvZHVjdCBvZiB0aGUgdmFsdWVzIHJlcHJlc2VudGVkIGJ5IFggYW5kIFkKICAgICBjYXJyaWVkIG91dCBpbiBtYWNoaW5lIG1vZGUgTS4gICdzc19tdWx0JyBhbmQgJ3VzX211bHQnIGVuc3VyZSB0aGF0CiAgICAgYW4gb3V0LW9mLWJvdW5kcyByZXN1bHQgc2F0dXJhdGVzIHRvIHRoZSBtYXhpbXVtIG9yIG1pbmltdW0gc2lnbmVkCiAgICAgb3IgdW5zaWduZWQgdmFsdWUuCgogICAgIFNvbWUgbWFjaGluZXMgc3VwcG9ydCBhIG11bHRpcGxpY2F0aW9uIHRoYXQgZ2VuZXJhdGVzIGEgcHJvZHVjdAogICAgIHdpZGVyIHRoYW4gdGhlIG9wZXJhbmRzLiAgV3JpdGUgdGhlIHBhdHRlcm4gZm9yIHRoaXMgYXMKCiAgICAgICAgICAobXVsdDpNIChzaWduX2V4dGVuZDpNIFgpIChzaWduX2V4dGVuZDpNIFkpKQoKICAgICB3aGVyZSBNIGlzIHdpZGVyIHRoYW4gdGhlIG1vZGVzIG9mIFggYW5kIFksIHdoaWNoIG5lZWQgbm90IGJlIHRoZQogICAgIHNhbWUuCgogICAgIEZvciB1bnNpZ25lZCB3aWRlbmluZyBtdWx0aXBsaWNhdGlvbiwgdXNlIHRoZSBzYW1lIGlkaW9tLCBidXQgd2l0aAogICAgICd6ZXJvX2V4dGVuZCcgaW5zdGVhZCBvZiAnc2lnbl9leHRlbmQnLgoKJyhkaXY6TSBYIFkpJwonKHNzX2RpdjpNIFggWSknCiAgICAgUmVwcmVzZW50cyB0aGUgcXVvdGllbnQgaW4gc2lnbmVkIGRpdmlzaW9uIG9mIFggYnkgWSwgY2FycmllZCBvdXQKICAgICBpbiBtYWNoaW5lIG1vZGUgTS4gIElmIE0gaXMgYSBmbG9hdGluZyBwb2ludCBtb2RlLCBpdCByZXByZXNlbnRzCiAgICAgdGhlIGV4YWN0IHF1b3RpZW50OyBvdGhlcndpc2UsIHRoZSBpbnRlZ2VyaXplZCBxdW90aWVudC4gICdzc19kaXYnCiAgICAgZW5zdXJlcyB0aGF0IGFuIG91dC1vZi1ib3VuZHMgcmVzdWx0IHNhdHVyYXRlcyB0byB0aGUgbWF4aW11bSBvcgogICAgIG1pbmltdW0gc2lnbmVkIHZhbHVlLgoKICAgICBTb21lIG1hY2hpbmVzIGhhdmUgZGl2aXNpb24gaW5zdHJ1Y3Rpb25zIGluIHdoaWNoIHRoZSBvcGVyYW5kcyBhbmQKICAgICBxdW90aWVudCB3aWR0aHMgYXJlIG5vdCBhbGwgdGhlIHNhbWU7IHlvdSBzaG91bGQgcmVwcmVzZW50IHN1Y2gKICAgICBpbnN0cnVjdGlvbnMgdXNpbmcgJ3RydW5jYXRlJyBhbmQgJ3NpZ25fZXh0ZW5kJyBhcyBpbiwKCiAgICAgICAgICAodHJ1bmNhdGU6TTEgKGRpdjpNMiBYIChzaWduX2V4dGVuZDpNMiBZKSkpCgonKHVkaXY6TSBYIFkpJwonKHVzX2RpdjpNIFggWSknCiAgICAgTGlrZSAnZGl2JyBidXQgcmVwcmVzZW50cyB1bnNpZ25lZCBkaXZpc2lvbi4gICd1c19kaXYnIGVuc3VyZXMgdGhhdAogICAgIGFuIG91dC1vZi1ib3VuZHMgcmVzdWx0IHNhdHVyYXRlcyB0byB0aGUgbWF4aW11bSBvciBtaW5pbXVtCiAgICAgdW5zaWduZWQgdmFsdWUuCgonKG1vZDpNIFggWSknCicodW1vZDpNIFggWSknCiAgICAgTGlrZSAnZGl2JyBhbmQgJ3VkaXYnIGJ1dCByZXByZXNlbnQgdGhlIHJlbWFpbmRlciBpbnN0ZWFkIG9mIHRoZQogICAgIHF1b3RpZW50LgoKJyhzbWluOk0gWCBZKScKJyhzbWF4Ok0gWCBZKScKICAgICBSZXByZXNlbnRzIHRoZSBzbWFsbGVyIChmb3IgJ3NtaW4nKSBvciBsYXJnZXIgKGZvciAnc21heCcpIG9mIFggYW5kCiAgICAgWSwgaW50ZXJwcmV0ZWQgYXMgc2lnbmVkIHZhbHVlcyBpbiBtb2RlIE0uICBXaGVuIHVzZWQgd2l0aCBmbG9hdGluZwogICAgIHBvaW50LCBpZiBib3RoIG9wZXJhbmRzIGFyZSB6ZXJvcywgb3IgaWYgZWl0aGVyIG9wZXJhbmQgaXMgJ05hTicsCiAgICAgdGhlbiBpdCBpcyB1bnNwZWNpZmllZCB3aGljaCBvZiB0aGUgdHdvIG9wZXJhbmRzIGlzIHJldHVybmVkIGFzIHRoZQogICAgIHJlc3VsdC4KCicodW1pbjpNIFggWSknCicodW1heDpNIFggWSknCiAgICAgTGlrZSAnc21pbicgYW5kICdzbWF4JywgYnV0IHRoZSB2YWx1ZXMgYXJlIGludGVycHJldGVkIGFzIHVuc2lnbmVkCiAgICAgaW50ZWdlcnMuCgonKG5vdDpNIFgpJwogICAgIFJlcHJlc2VudHMgdGhlIGJpdHdpc2UgY29tcGxlbWVudCBvZiB0aGUgdmFsdWUgcmVwcmVzZW50ZWQgYnkgWCwKICAgICBjYXJyaWVkIG91dCBpbiBtb2RlIE0sIHdoaWNoIG11c3QgYmUgYSBmaXhlZC1wb2ludCBtYWNoaW5lIG1vZGUuCgonKGFuZDpNIFggWSknCiAgICAgUmVwcmVzZW50cyB0aGUgYml0d2lzZSBsb2dpY2FsLWFuZCBvZiB0aGUgdmFsdWVzIHJlcHJlc2VudGVkIGJ5IFgKICAgICBhbmQgWSwgY2FycmllZCBvdXQgaW4gbWFjaGluZSBtb2RlIE0sIHdoaWNoIG11c3QgYmUgYSBmaXhlZC1wb2ludAogICAgIG1hY2hpbmUgbW9kZS4KCicoaW9yOk0gWCBZKScKICAgICBSZXByZXNlbnRzIHRoZSBiaXR3aXNlIGluY2x1c2l2ZS1vciBvZiB0aGUgdmFsdWVzIHJlcHJlc2VudGVkIGJ5IFgKICAgICBhbmQgWSwgY2FycmllZCBvdXQgaW4gbWFjaGluZSBtb2RlIE0sIHdoaWNoIG11c3QgYmUgYSBmaXhlZC1wb2ludAogICAgIG1vZGUuCgonKHhvcjpNIFggWSknCiAgICAgUmVwcmVzZW50cyB0aGUgYml0d2lzZSBleGNsdXNpdmUtb3Igb2YgdGhlIHZhbHVlcyByZXByZXNlbnRlZCBieSBYCiAgICAgYW5kIFksIGNhcnJpZWQgb3V0IGluIG1hY2hpbmUgbW9kZSBNLCB3aGljaCBtdXN0IGJlIGEgZml4ZWQtcG9pbnQKICAgICBtb2RlLgoKJyhhc2hpZnQ6TSBYIEMpJwonKHNzX2FzaGlmdDpNIFggQyknCicodXNfYXNoaWZ0Ok0gWCBDKScKICAgICBUaGVzZSB0aHJlZSBleHByZXNzaW9ucyByZXByZXNlbnQgdGhlIHJlc3VsdCBvZiBhcml0aG1ldGljYWxseQogICAgIHNoaWZ0aW5nIFggbGVmdCBieSBDIHBsYWNlcy4gIFRoZXkgZGlmZmVyIGluIHRoZWlyIGJlaGF2aW9yIG9uCiAgICAgb3ZlcmZsb3cgb2YgaW50ZWdlciBtb2Rlcy4gIEFuICdhc2hpZnQnIG9wZXJhdGlvbiBpcyBhIHBsYWluIHNoaWZ0CiAgICAgd2l0aCBubyBzcGVjaWFsIGJlaGF2aW9yIGluIGNhc2Ugb2YgYSBjaGFuZ2UgaW4gdGhlIHNpZ24gYml0OwogICAgICdzc19hc2hpZnQnIGFuZCAndXNfYXNoaWZ0JyBzYXR1cmF0ZXMgdG8gdGhlIG1pbmltdW0gb3IgbWF4aW11bQogICAgIHJlcHJlc2VudGFibGUgdmFsdWUgaWYgYW55IG9mIHRoZSBiaXRzIHNoaWZ0ZWQgb3V0IGRpZmZlcnMgZnJvbSB0aGUKICAgICBmaW5hbCBzaWduIGJpdC4KCiAgICAgWCBoYXZlIG1vZGUgTSwgYSBmaXhlZC1wb2ludCBtYWNoaW5lIG1vZGUuICBDIGJlIGEgZml4ZWQtcG9pbnQgbW9kZQogICAgIG9yIGJlIGEgY29uc3RhbnQgd2l0aCBtb2RlICdWT0lEbW9kZSc7IHdoaWNoIG1vZGUgaXMgZGV0ZXJtaW5lZCBieQogICAgIHRoZSBtb2RlIGNhbGxlZCBmb3IgaW4gdGhlIG1hY2hpbmUgZGVzY3JpcHRpb24gZW50cnkgZm9yIHRoZQogICAgIGxlZnQtc2hpZnQgaW5zdHJ1Y3Rpb24uICBGb3IgZXhhbXBsZSwgb24gdGhlIFZBWCwgdGhlIG1vZGUgb2YgQyBpcwogICAgICdRSW1vZGUnIHJlZ2FyZGxlc3Mgb2YgTS4KCicobHNoaWZ0cnQ6TSBYIEMpJwonKGFzaGlmdHJ0Ok0gWCBDKScKICAgICBMaWtlICdhc2hpZnQnIGJ1dCBmb3IgcmlnaHQgc2hpZnQuICBVbmxpa2UgdGhlIGNhc2UgZm9yIGxlZnQgc2hpZnQsCiAgICAgdGhlc2UgdHdvIG9wZXJhdGlvbnMgYXJlIGRpc3RpbmN0LgoKJyhyb3RhdGU6TSBYIEMpJwonKHJvdGF0ZXJ0Ok0gWCBDKScKICAgICBTaW1pbGFyIGJ1dCByZXByZXNlbnQgbGVmdCBhbmQgcmlnaHQgcm90YXRlLiAgSWYgQyBpcyBhIGNvbnN0YW50LAogICAgIHVzZSAncm90YXRlJy4KCicoYWJzOk0gWCknCiAgICAgUmVwcmVzZW50cyB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgWCwgY29tcHV0ZWQgaW4gbW9kZSBNLgoKJyhzcXJ0Ok0gWCknCiAgICAgUmVwcmVzZW50cyB0aGUgc3F1YXJlIHJvb3Qgb2YgWCwgY29tcHV0ZWQgaW4gbW9kZSBNLiAgTW9zdCBvZnRlbiBNCiAgICAgd2lsbCBiZSBhIGZsb2F0aW5nIHBvaW50IG1vZGUuCgonKGZmczpNIFgpJwogICAgIFJlcHJlc2VudHMgb25lIHBsdXMgdGhlIGluZGV4IG9mIHRoZSBsZWFzdCBzaWduaWZpY2FudCAxLWJpdCBpbiBYLAogICAgIHJlcHJlc2VudGVkIGFzIGFuIGludGVnZXIgb2YgbW9kZSBNLiAgKFRoZSB2YWx1ZSBpcyB6ZXJvIGlmIFggaXMKICAgICB6ZXJvLikgIFRoZSBtb2RlIG9mIFggbmVlZCBub3QgYmUgTTsgZGVwZW5kaW5nIG9uIHRoZSB0YXJnZXQKICAgICBtYWNoaW5lLCB2YXJpb3VzIG1vZGUgY29tYmluYXRpb25zIG1heSBiZSB2YWxpZC4KCicoY2x6Ok0gWCknCiAgICAgUmVwcmVzZW50cyB0aGUgbnVtYmVyIG9mIGxlYWRpbmcgMC1iaXRzIGluIFgsIHJlcHJlc2VudGVkIGFzIGFuCiAgICAgaW50ZWdlciBvZiBtb2RlIE0sIHN0YXJ0aW5nIGF0IHRoZSBtb3N0IHNpZ25pZmljYW50IGJpdCBwb3NpdGlvbi4KICAgICBJZiBYIGlzIHplcm8sIHRoZSB2YWx1ZSBpcyBkZXRlcm1pbmVkIGJ5CiAgICAgJ0NMWl9ERUZJTkVEX1ZBTFVFX0FUX1pFUk8nICgqbm90ZSBNaXNjOjopLiAgTm90ZSB0aGF0IHRoaXMgaXMgb25lCiAgICAgb2YgdGhlIGZldyBleHByZXNzaW9ucyB0aGF0IGlzIG5vdCBpbnZhcmlhbnQgdW5kZXIgd2lkZW5pbmcuICBUaGUKICAgICBtb2RlIG9mIFggd2lsbCB1c3VhbGx5IGJlIGFuIGludGVnZXIgbW9kZS4KCicoY3R6Ok0gWCknCiAgICAgUmVwcmVzZW50cyB0aGUgbnVtYmVyIG9mIHRyYWlsaW5nIDAtYml0cyBpbiBYLCByZXByZXNlbnRlZCBhcyBhbgogICAgIGludGVnZXIgb2YgbW9kZSBNLCBzdGFydGluZyBhdCB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0IHBvc2l0aW9uLgogICAgIElmIFggaXMgemVybywgdGhlIHZhbHVlIGlzIGRldGVybWluZWQgYnkKICAgICAnQ1RaX0RFRklORURfVkFMVUVfQVRfWkVSTycgKCpub3RlIE1pc2M6OikuICBFeGNlcHQgZm9yIHRoaXMgY2FzZSwKICAgICAnY3R6KHgpJyBpcyBlcXVpdmFsZW50IHRvICdmZnMoWCkgLSAxJy4gIFRoZSBtb2RlIG9mIFggd2lsbCB1c3VhbGx5CiAgICAgYmUgYW4gaW50ZWdlciBtb2RlLgoKJyhwb3Bjb3VudDpNIFgpJwogICAgIFJlcHJlc2VudHMgdGhlIG51bWJlciBvZiAxLWJpdHMgaW4gWCwgcmVwcmVzZW50ZWQgYXMgYW4gaW50ZWdlciBvZgogICAgIG1vZGUgTS4gIFRoZSBtb2RlIG9mIFggd2lsbCB1c3VhbGx5IGJlIGFuIGludGVnZXIgbW9kZS4KCicocGFyaXR5Ok0gWCknCiAgICAgUmVwcmVzZW50cyB0aGUgbnVtYmVyIG9mIDEtYml0cyBtb2R1bG8gMiBpbiBYLCByZXByZXNlbnRlZCBhcyBhbgogICAgIGludGVnZXIgb2YgbW9kZSBNLiAgVGhlIG1vZGUgb2YgWCB3aWxsIHVzdWFsbHkgYmUgYW4gaW50ZWdlciBtb2RlLgoKJyhic3dhcDpNIFgpJwogICAgIFJlcHJlc2VudHMgdGhlIHZhbHVlIFggd2l0aCB0aGUgb3JkZXIgb2YgYnl0ZXMgcmV2ZXJzZWQsIGNhcnJpZWQKICAgICBvdXQgaW4gbW9kZSBNLCB3aGljaCBtdXN0IGJlIGEgZml4ZWQtcG9pbnQgbWFjaGluZSBtb2RlLgoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IENvbXBhcmlzb25zLCAgTmV4dDogQml0LUZpZWxkcywgIFByZXY6IEFyaXRobWV0aWMsICBVcDogUlRMCgoxMi4xMCBDb21wYXJpc29uIE9wZXJhdGlvbnMKPT09PT09PT09PT09PT09PT09PT09PT09PT09CgpDb21wYXJpc29uIG9wZXJhdG9ycyB0ZXN0IGEgcmVsYXRpb24gb24gdHdvIG9wZXJhbmRzIGFuZCBhcmUgY29uc2lkZXJlZAp0byByZXByZXNlbnQgYSBtYWNoaW5lLWRlcGVuZGVudCBub256ZXJvIHZhbHVlIGRlc2NyaWJlZCBieSwgYnV0IG5vdApuZWNlc3NhcmlseSBlcXVhbCB0bywgJ1NUT1JFX0ZMQUdfVkFMVUUnICgqbm90ZSBNaXNjOjopIGlmIHRoZSByZWxhdGlvbgpob2xkcywgb3IgemVybyBpZiBpdCBkb2VzIG5vdCwgZm9yIGNvbXBhcmlzb24gb3BlcmF0b3JzIHdob3NlIHJlc3VsdHMKaGF2ZSBhICdNT0RFX0lOVCcgbW9kZSwgJ0ZMT0FUX1NUT1JFX0ZMQUdfVkFMVUUnICgqbm90ZSBNaXNjOjopIGlmIHRoZQpyZWxhdGlvbiBob2xkcywgb3IgemVybyBpZiBpdCBkb2VzIG5vdCwgZm9yIGNvbXBhcmlzb24gb3BlcmF0b3JzIHRoYXQKcmV0dXJuIGZsb2F0aW5nLXBvaW50IHZhbHVlcywgYW5kIGEgdmVjdG9yIG9mIGVpdGhlcgonVkVDVE9SX1NUT1JFX0ZMQUdfVkFMVUUnICgqbm90ZSBNaXNjOjopIGlmIHRoZSByZWxhdGlvbiBob2xkcywgb3Igb2YKemVyb3MgaWYgaXQgZG9lcyBub3QsIGZvciBjb21wYXJpc29uIG9wZXJhdG9ycyB0aGF0IHJldHVybiB2ZWN0b3IKcmVzdWx0cy4gIFRoZSBtb2RlIG9mIHRoZSBjb21wYXJpc29uIG9wZXJhdGlvbiBpcyBpbmRlcGVuZGVudCBvZiB0aGUKbW9kZSBvZiB0aGUgZGF0YSBiZWluZyBjb21wYXJlZC4gIElmIHRoZSBjb21wYXJpc29uIG9wZXJhdGlvbiBpcyBiZWluZwp0ZXN0ZWQgKGUuZy4sIHRoZSBmaXJzdCBvcGVyYW5kIG9mIGFuICdpZl90aGVuX2Vsc2UnKSwgdGhlIG1vZGUgbXVzdCBiZQonVk9JRG1vZGUnLgoKIFRoZXJlIGFyZSB0d28gd2F5cyB0aGF0IGNvbXBhcmlzb24gb3BlcmF0aW9ucyBtYXkgYmUgdXNlZC4gIFRoZQpjb21wYXJpc29uIG9wZXJhdG9ycyBtYXkgYmUgdXNlZCB0byBjb21wYXJlIHRoZSBjb25kaXRpb24gY29kZXMgJyhjYzApJwphZ2FpbnN0IHplcm8sIGFzIGluICcoZXEgKGNjMCkgKGNvbnN0X2ludCAwKSknLiAgU3VjaCBhIGNvbnN0cnVjdAphY3R1YWxseSByZWZlcnMgdG8gdGhlIHJlc3VsdCBvZiB0aGUgcHJlY2VkaW5nIGluc3RydWN0aW9uIGluIHdoaWNoIHRoZQpjb25kaXRpb24gY29kZXMgd2VyZSBzZXQuICBUaGUgaW5zdHJ1Y3Rpb24gc2V0dGluZyB0aGUgY29uZGl0aW9uIGNvZGUKbXVzdCBiZSBhZGphY2VudCB0byB0aGUgaW5zdHJ1Y3Rpb24gdXNpbmcgdGhlIGNvbmRpdGlvbiBjb2RlOyBvbmx5Cidub3RlJyBpbnNucyBtYXkgc2VwYXJhdGUgdGhlbS4KCiBBbHRlcm5hdGl2ZWx5LCBhIGNvbXBhcmlzb24gb3BlcmF0aW9uIG1heSBkaXJlY3RseSBjb21wYXJlIHR3byBkYXRhCm9iamVjdHMuICBUaGUgbW9kZSBvZiB0aGUgY29tcGFyaXNvbiBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBvcGVyYW5kczsgdGhleQptdXN0IGJvdGggYmUgdmFsaWQgZm9yIGEgY29tbW9uIG1hY2hpbmUgbW9kZS4gIEEgY29tcGFyaXNvbiB3aXRoIGJvdGgKb3BlcmFuZHMgY29uc3RhbnQgd291bGQgYmUgaW52YWxpZCBhcyB0aGUgbWFjaGluZSBtb2RlIGNvdWxkIG5vdCBiZQpkZWR1Y2VkIGZyb20gaXQsIGJ1dCBzdWNoIGEgY29tcGFyaXNvbiBzaG91bGQgbmV2ZXIgZXhpc3QgaW4gUlRMIGR1ZSB0bwpjb25zdGFudCBmb2xkaW5nLgoKIEluIHRoZSBleGFtcGxlIGFib3ZlLCBpZiAnKGNjMCknIHdlcmUgbGFzdCBzZXQgdG8gJyhjb21wYXJlIFggWSknLCB0aGUKY29tcGFyaXNvbiBvcGVyYXRpb24gaXMgaWRlbnRpY2FsIHRvICcoZXEgWCBZKScuICBVc3VhbGx5IG9ubHkgb25lIHN0eWxlCm9mIGNvbXBhcmlzb25zIGlzIHN1cHBvcnRlZCBvbiBhIHBhcnRpY3VsYXIgbWFjaGluZSwgYnV0IHRoZSBjb21iaW5lCnBhc3Mgd2lsbCB0cnkgdG8gbWVyZ2UgdGhlIG9wZXJhdGlvbnMgdG8gcHJvZHVjZSB0aGUgJ2VxJyBzaG93biBpbiBjYXNlCml0IGV4aXN0cyBpbiB0aGUgY29udGV4dCBvZiB0aGUgcGFydGljdWxhciBpbnNuIGludm9sdmVkLgoKIEluZXF1YWxpdHkgY29tcGFyaXNvbnMgY29tZSBpbiB0d28gZmxhdm9ycywgc2lnbmVkIGFuZCB1bnNpZ25lZC4gIFRodXMsCnRoZXJlIGFyZSBkaXN0aW5jdCBleHByZXNzaW9uIGNvZGVzICdndCcgYW5kICdndHUnIGZvciBzaWduZWQgYW5kCnVuc2lnbmVkIGdyZWF0ZXItdGhhbi4gIFRoZXNlIGNhbiBwcm9kdWNlIGRpZmZlcmVudCByZXN1bHRzIGZvciB0aGUgc2FtZQpwYWlyIG9mIGludGVnZXIgdmFsdWVzOiBmb3IgZXhhbXBsZSwgMSBpcyBzaWduZWQgZ3JlYXRlci10aGFuIC0xIGJ1dCBub3QKdW5zaWduZWQgZ3JlYXRlci10aGFuLCBiZWNhdXNlIC0xIHdoZW4gcmVnYXJkZWQgYXMgdW5zaWduZWQgaXMgYWN0dWFsbHkKJzB4ZmZmZmZmZmYnIHdoaWNoIGlzIGdyZWF0ZXIgdGhhbiAxLgoKIFRoZSBzaWduZWQgY29tcGFyaXNvbnMgYXJlIGFsc28gdXNlZCBmb3IgZmxvYXRpbmcgcG9pbnQgdmFsdWVzLgpGbG9hdGluZyBwb2ludCBjb21wYXJpc29ucyBhcmUgZGlzdGluZ3Vpc2hlZCBieSB0aGUgbWFjaGluZSBtb2RlcyBvZiB0aGUKb3BlcmFuZHMuCgonKGVxOk0gWCBZKScKICAgICAnU1RPUkVfRkxBR19WQUxVRScgaWYgdGhlIHZhbHVlcyByZXByZXNlbnRlZCBieSBYIGFuZCBZIGFyZSBlcXVhbCwKICAgICBvdGhlcndpc2UgMC4KCicobmU6TSBYIFkpJwogICAgICdTVE9SRV9GTEFHX1ZBTFVFJyBpZiB0aGUgdmFsdWVzIHJlcHJlc2VudGVkIGJ5IFggYW5kIFkgYXJlIG5vdAogICAgIGVxdWFsLCBvdGhlcndpc2UgMC4KCicoZ3Q6TSBYIFkpJwogICAgICdTVE9SRV9GTEFHX1ZBTFVFJyBpZiB0aGUgWCBpcyBncmVhdGVyIHRoYW4gWS4gIElmIHRoZXkgYXJlCiAgICAgZml4ZWQtcG9pbnQsIHRoZSBjb21wYXJpc29uIGlzIGRvbmUgaW4gYSBzaWduZWQgc2Vuc2UuCgonKGd0dTpNIFggWSknCiAgICAgTGlrZSAnZ3QnIGJ1dCBkb2VzIHVuc2lnbmVkIGNvbXBhcmlzb24sIG9uIGZpeGVkLXBvaW50IG51bWJlcnMKICAgICBvbmx5LgoKJyhsdDpNIFggWSknCicobHR1Ok0gWCBZKScKICAgICBMaWtlICdndCcgYW5kICdndHUnIGJ1dCB0ZXN0IGZvciAibGVzcyB0aGFuIi4KCicoZ2U6TSBYIFkpJwonKGdldTpNIFggWSknCiAgICAgTGlrZSAnZ3QnIGFuZCAnZ3R1JyBidXQgdGVzdCBmb3IgImdyZWF0ZXIgdGhhbiBvciBlcXVhbCIuCgonKGxlOk0gWCBZKScKJyhsZXU6TSBYIFkpJwogICAgIExpa2UgJ2d0JyBhbmQgJ2d0dScgYnV0IHRlc3QgZm9yICJsZXNzIHRoYW4gb3IgZXF1YWwiLgoKJyhpZl90aGVuX2Vsc2UgQ09ORCBUSEVOIEVMU0UpJwogICAgIFRoaXMgaXMgbm90IGEgY29tcGFyaXNvbiBvcGVyYXRpb24gYnV0IGlzIGxpc3RlZCBoZXJlIGJlY2F1c2UgaXQgaXMKICAgICBhbHdheXMgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGEgY29tcGFyaXNvbiBvcGVyYXRpb24uICBUbyBiZQogICAgIHByZWNpc2UsIENPTkQgaXMgYSBjb21wYXJpc29uIGV4cHJlc3Npb24uICBUaGlzIGV4cHJlc3Npb24KICAgICByZXByZXNlbnRzIGEgY2hvaWNlLCBhY2NvcmRpbmcgdG8gQ09ORCwgYmV0d2VlbiB0aGUgdmFsdWUKICAgICByZXByZXNlbnRlZCBieSBUSEVOIGFuZCB0aGUgb25lIHJlcHJlc2VudGVkIGJ5IEVMU0UuCgogICAgIE9uIG1vc3QgbWFjaGluZXMsICdpZl90aGVuX2Vsc2UnIGV4cHJlc3Npb25zIGFyZSB2YWxpZCBvbmx5IHRvCiAgICAgZXhwcmVzcyBjb25kaXRpb25hbCBqdW1wcy4KCicoY29uZCBbVEVTVDEgVkFMVUUxIFRFU1QyIFZBTFVFMiAuLi5dIERFRkFVTFQpJwogICAgIFNpbWlsYXIgdG8gJ2lmX3RoZW5fZWxzZScsIGJ1dCBtb3JlIGdlbmVyYWwuICBFYWNoIG9mIFRFU1QxLCBURVNUMiwKICAgICAuLi4gaXMgcGVyZm9ybWVkIGluIHR1cm4uICBUaGUgcmVzdWx0IG9mIHRoaXMgZXhwcmVzc2lvbiBpcyB0aGUKICAgICBWQUxVRSBjb3JyZXNwb25kaW5nIHRvIHRoZSBmaXJzdCBub256ZXJvIHRlc3QsIG9yIERFRkFVTFQgaWYgbm9uZQogICAgIG9mIHRoZSB0ZXN0cyBhcmUgbm9uemVybyBleHByZXNzaW9ucy4KCiAgICAgVGhpcyBpcyBjdXJyZW50bHkgbm90IHZhbGlkIGZvciBpbnN0cnVjdGlvbiBwYXR0ZXJucyBhbmQgaXMKICAgICBzdXBwb3J0ZWQgb25seSBmb3IgaW5zbiBhdHRyaWJ1dGVzLiAgKk5vdGUgSW5zbiBBdHRyaWJ1dGVzOjouCgofCkZpbGU6IGdjY2ludC5pbmZvLCAgTm9kZTogQml0LUZpZWxkcywgIE5leHQ6IFZlY3RvciBPcGVyYXRpb25zLCAgUHJldjogQ29tcGFyaXNvbnMsICBVcDogUlRMCgoxMi4xMSBCaXQtRmllbGRzCj09PT09PT09PT09PT09PT0KClNwZWNpYWwgZXhwcmVzc2lvbiBjb2RlcyBleGlzdCB0byByZXByZXNlbnQgYml0LWZpZWxkIGluc3RydWN0aW9ucy4KCicoc2lnbl9leHRyYWN0Ok0gTE9DIFNJWkUgUE9TKScKICAgICBUaGlzIHJlcHJlc2VudHMgYSByZWZlcmVuY2UgdG8gYSBzaWduLWV4dGVuZGVkIGJpdC1maWVsZCBjb250YWluZWQKICAgICBvciBzdGFydGluZyBpbiBMT0MgKGEgbWVtb3J5IG9yIHJlZ2lzdGVyIHJlZmVyZW5jZSkuICBUaGUgYml0LWZpZWxkCiAgICAgaXMgU0laRSBiaXRzIHdpZGUgYW5kIHN0YXJ0cyBhdCBiaXQgUE9TLiAgVGhlIGNvbXBpbGF0aW9uIG9wdGlvbgogICAgICdCSVRTX0JJR19FTkRJQU4nIHNheXMgd2hpY2ggZW5kIG9mIHRoZSBtZW1vcnkgdW5pdCBQT1MgY291bnRzCiAgICAgZnJvbS4KCiAgICAgSWYgTE9DIGlzIGluIG1lbW9yeSwgaXRzIG1vZGUgbXVzdCBiZSBhIHNpbmdsZS1ieXRlIGludGVnZXIgbW9kZS4KICAgICBJZiBMT0MgaXMgaW4gYSByZWdpc3RlciwgdGhlIG1vZGUgdG8gdXNlIGlzIHNwZWNpZmllZCBieSB0aGUKICAgICBvcGVyYW5kIG9mIHRoZSAnaW5zdicgb3IgJ2V4dHYnIHBhdHRlcm4gKCpub3RlIFN0YW5kYXJkIE5hbWVzOjopCiAgICAgYW5kIGlzIHVzdWFsbHkgYSBmdWxsLXdvcmQgaW50ZWdlciBtb2RlLCB3aGljaCBpcyB0aGUgZGVmYXVsdCBpZgogICAgIG5vbmUgaXMgc3BlY2lmaWVkLgoKICAgICBUaGUgbW9kZSBvZiBQT1MgaXMgbWFjaGluZS1zcGVjaWZpYyBhbmQgaXMgYWxzbyBzcGVjaWZpZWQgaW4gdGhlCiAgICAgJ2luc3YnIG9yICdleHR2JyBwYXR0ZXJuLgoKICAgICBUaGUgbW9kZSBNIGlzIHRoZSBzYW1lIGFzIHRoZSBtb2RlIHRoYXQgd291bGQgYmUgdXNlZCBmb3IgTE9DIGlmIGl0CiAgICAgd2VyZSBhIHJlZ2lzdGVyLgoKICAgICBBICdzaWduX2V4dHJhY3QnIGNhbiBub3QgYXBwZWFyIGFzIGFuIGx2YWx1ZSwgb3IgcGFydCB0aGVyZW9mLCBpbgogICAgIFJUTC4KCicoemVyb19leHRyYWN0Ok0gTE9DIFNJWkUgUE9TKScKICAgICBMaWtlICdzaWduX2V4dHJhY3QnIGJ1dCByZWZlcnMgdG8gYW4gdW5zaWduZWQgb3IgemVyby1leHRlbmRlZAogICAgIGJpdC1maWVsZC4gIFRoZSBzYW1lIHNlcXVlbmNlIG9mIGJpdHMgYXJlIGV4dHJhY3RlZCwgYnV0IHRoZXkgYXJlCiAgICAgZmlsbGVkIHRvIGFuIGVudGlyZSB3b3JkIHdpdGggemVyb3MgaW5zdGVhZCBvZiBieSBzaWduLWV4dGVuc2lvbi4KCiAgICAgVW5saWtlICdzaWduX2V4dHJhY3QnLCB0aGlzIHR5cGUgb2YgZXhwcmVzc2lvbnMgY2FuIGJlIGx2YWx1ZXMgaW4KICAgICBSVEw7IHRoZXkgbWF5IGFwcGVhciBvbiB0aGUgbGVmdCBzaWRlIG9mIGFuIGFzc2lnbm1lbnQsIGluZGljYXRpbmcKICAgICBpbnNlcnRpb24gb2YgYSB2YWx1ZSBpbnRvIHRoZSBzcGVjaWZpZWQgYml0LWZpZWxkLgoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IFZlY3RvciBPcGVyYXRpb25zLCAgTmV4dDogQ29udmVyc2lvbnMsICBQcmV2OiBCaXQtRmllbGRzLCAgVXA6IFJUTAoKMTIuMTIgVmVjdG9yIE9wZXJhdGlvbnMKPT09PT09PT09PT09PT09PT09PT09PT0KCkFsbCBub3JtYWwgUlRMIGV4cHJlc3Npb25zIGNhbiBiZSB1c2VkIHdpdGggdmVjdG9yIG1vZGVzOyB0aGV5IGFyZQppbnRlcnByZXRlZCBhcyBvcGVyYXRpbmcgb24gZWFjaCBwYXJ0IG9mIHRoZSB2ZWN0b3IgaW5kZXBlbmRlbnRseS4KQWRkaXRpb25hbGx5LCB0aGVyZSBhcmUgYSBmZXcgbmV3IGV4cHJlc3Npb25zIHRvIGRlc2NyaWJlIHNwZWNpZmljCnZlY3RvciBvcGVyYXRpb25zLgoKJyh2ZWNfbWVyZ2U6TSBWRUMxIFZFQzIgSVRFTVMpJwogICAgIFRoaXMgZGVzY3JpYmVzIGEgbWVyZ2Ugb3BlcmF0aW9uIGJldHdlZW4gdHdvIHZlY3RvcnMuICBUaGUgcmVzdWx0CiAgICAgaXMgYSB2ZWN0b3Igb2YgbW9kZSBNOyBpdHMgZWxlbWVudHMgYXJlIHNlbGVjdGVkIGZyb20gZWl0aGVyIFZFQzEKICAgICBvciBWRUMyLiAgV2hpY2ggZWxlbWVudHMgYXJlIHNlbGVjdGVkIGlzIGRlc2NyaWJlZCBieSBJVEVNUywgd2hpY2gKICAgICBpcyBhIGJpdCBtYXNrIHJlcHJlc2VudGVkIGJ5IGEgJ2NvbnN0X2ludCc7IGEgemVybyBiaXQgaW5kaWNhdGVzCiAgICAgdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudCBpbiB0aGUgcmVzdWx0IHZlY3RvciBpcyB0YWtlbiBmcm9tIFZFQzIKICAgICB3aGlsZSBhIHNldCBiaXQgaW5kaWNhdGVzIGl0IGlzIHRha2VuIGZyb20gVkVDMS4KCicodmVjX3NlbGVjdDpNIFZFQzEgU0VMRUNUSU9OKScKICAgICBUaGlzIGRlc2NyaWJlcyBhbiBvcGVyYXRpb24gdGhhdCBzZWxlY3RzIHBhcnRzIG9mIGEgdmVjdG9yLiAgVkVDMQogICAgIGlzIHRoZSBzb3VyY2UgdmVjdG9yLCBTRUxFQ1RJT04gaXMgYSAncGFyYWxsZWwnIHRoYXQgY29udGFpbnMgYQogICAgICdjb25zdF9pbnQnIGZvciBlYWNoIG9mIHRoZSBzdWJwYXJ0cyBvZiB0aGUgcmVzdWx0IHZlY3RvciwgZ2l2aW5nCiAgICAgdGhlIG51bWJlciBvZiB0aGUgc291cmNlIHN1YnBhcnQgdGhhdCBzaG91bGQgYmUgc3RvcmVkIGludG8gaXQuCgonKHZlY19jb25jYXQ6TSBWRUMxIFZFQzIpJwogICAgIERlc2NyaWJlcyBhIHZlY3RvciBjb25jYXQgb3BlcmF0aW9uLiAgVGhlIHJlc3VsdCBpcyBhIGNvbmNhdGVuYXRpb24KICAgICBvZiB0aGUgdmVjdG9ycyBWRUMxIGFuZCBWRUMyOyBpdHMgbGVuZ3RoIGlzIHRoZSBzdW0gb2YgdGhlIGxlbmd0aHMKICAgICBvZiB0aGUgdHdvIGlucHV0cy4KCicodmVjX2R1cGxpY2F0ZTpNIFZFQyknCiAgICAgVGhpcyBvcGVyYXRpb24gY29udmVydHMgYSBzbWFsbCB2ZWN0b3IgaW50byBhIGxhcmdlciBvbmUgYnkKICAgICBkdXBsaWNhdGluZyB0aGUgaW5wdXQgdmFsdWVzLiAgVGhlIG91dHB1dCB2ZWN0b3IgbW9kZSBtdXN0IGhhdmUgdGhlCiAgICAgc2FtZSBzdWJtb2RlcyBhcyB0aGUgaW5wdXQgdmVjdG9yIG1vZGUsIGFuZCB0aGUgbnVtYmVyIG9mIG91dHB1dAogICAgIHBhcnRzIG11c3QgYmUgYW4gaW50ZWdlciBtdWx0aXBsZSBvZiB0aGUgbnVtYmVyIG9mIGlucHV0IHBhcnRzLgoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IENvbnZlcnNpb25zLCAgTmV4dDogUlRMIERlY2xhcmF0aW9ucywgIFByZXY6IFZlY3RvciBPcGVyYXRpb25zLCAgVXA6IFJUTAoKMTIuMTMgQ29udmVyc2lvbnMKPT09PT09PT09PT09PT09PT0KCkFsbCBjb252ZXJzaW9ucyBiZXR3ZWVuIG1hY2hpbmUgbW9kZXMgbXVzdCBiZSByZXByZXNlbnRlZCBieSBleHBsaWNpdApjb252ZXJzaW9uIG9wZXJhdGlvbnMuICBGb3IgZXhhbXBsZSwgYW4gZXhwcmVzc2lvbiB3aGljaCBpcyB0aGUgc3VtIG9mIGEKYnl0ZSBhbmQgYSBmdWxsIHdvcmQgY2Fubm90IGJlIHdyaXR0ZW4gYXMgJyhwbHVzOlNJIChyZWc6UUkgMzQpIChyZWc6U0kKODApKScgYmVjYXVzZSB0aGUgJ3BsdXMnIG9wZXJhdGlvbiByZXF1aXJlcyB0d28gb3BlcmFuZHMgb2YgdGhlIHNhbWUKbWFjaGluZSBtb2RlLiAgVGhlcmVmb3JlLCB0aGUgYnl0ZS1zaXplZCBvcGVyYW5kIGlzIGVuY2xvc2VkIGluIGEKY29udmVyc2lvbiBvcGVyYXRpb24sIGFzIGluCgogICAgIChwbHVzOlNJIChzaWduX2V4dGVuZDpTSSAocmVnOlFJIDM0KSkgKHJlZzpTSSA4MCkpCgogVGhlIGNvbnZlcnNpb24gb3BlcmF0aW9uIGlzIG5vdCBhIG1lcmUgcGxhY2Vob2xkZXIsIGJlY2F1c2UgdGhlcmUgbWF5CmJlIG1vcmUgdGhhbiBvbmUgd2F5IG9mIGNvbnZlcnRpbmcgZnJvbSBhIGdpdmVuIHN0YXJ0aW5nIG1vZGUgdG8gdGhlCmRlc2lyZWQgZmluYWwgbW9kZS4gIFRoZSBjb252ZXJzaW9uIG9wZXJhdGlvbiBjb2RlIHNheXMgaG93IHRvIGRvIGl0LgoKIEZvciBhbGwgY29udmVyc2lvbiBvcGVyYXRpb25zLCBYIG11c3Qgbm90IGJlICdWT0lEbW9kZScgYmVjYXVzZSB0aGUKbW9kZSBpbiB3aGljaCB0byBkbyB0aGUgY29udmVyc2lvbiB3b3VsZCBub3QgYmUga25vd24uICBUaGUgY29udmVyc2lvbgptdXN0IGVpdGhlciBiZSBkb25lIGF0IGNvbXBpbGUtdGltZSBvciBYIG11c3QgYmUgcGxhY2VkIGludG8gYSByZWdpc3Rlci4KCicoc2lnbl9leHRlbmQ6TSBYKScKICAgICBSZXByZXNlbnRzIHRoZSByZXN1bHQgb2Ygc2lnbi1leHRlbmRpbmcgdGhlIHZhbHVlIFggdG8gbWFjaGluZSBtb2RlCiAgICAgTS4gIE0gbXVzdCBiZSBhIGZpeGVkLXBvaW50IG1vZGUgYW5kIFggYSBmaXhlZC1wb2ludCB2YWx1ZSBvZiBhCiAgICAgbW9kZSBuYXJyb3dlciB0aGFuIE0uCgonKHplcm9fZXh0ZW5kOk0gWCknCiAgICAgUmVwcmVzZW50cyB0aGUgcmVzdWx0IG9mIHplcm8tZXh0ZW5kaW5nIHRoZSB2YWx1ZSBYIHRvIG1hY2hpbmUgbW9kZQogICAgIE0uICBNIG11c3QgYmUgYSBmaXhlZC1wb2ludCBtb2RlIGFuZCBYIGEgZml4ZWQtcG9pbnQgdmFsdWUgb2YgYQogICAgIG1vZGUgbmFycm93ZXIgdGhhbiBNLgoKJyhmbG9hdF9leHRlbmQ6TSBYKScKICAgICBSZXByZXNlbnRzIHRoZSByZXN1bHQgb2YgZXh0ZW5kaW5nIHRoZSB2YWx1ZSBYIHRvIG1hY2hpbmUgbW9kZSBNLgogICAgIE0gbXVzdCBiZSBhIGZsb2F0aW5nIHBvaW50IG1vZGUgYW5kIFggYSBmbG9hdGluZyBwb2ludCB2YWx1ZSBvZiBhCiAgICAgbW9kZSBuYXJyb3dlciB0aGFuIE0uCgonKHRydW5jYXRlOk0gWCknCiAgICAgUmVwcmVzZW50cyB0aGUgcmVzdWx0IG9mIHRydW5jYXRpbmcgdGhlIHZhbHVlIFggdG8gbWFjaGluZSBtb2RlIE0uCiAgICAgTSBtdXN0IGJlIGEgZml4ZWQtcG9pbnQgbW9kZSBhbmQgWCBhIGZpeGVkLXBvaW50IHZhbHVlIG9mIGEgbW9kZQogICAgIHdpZGVyIHRoYW4gTS4KCicoc3NfdHJ1bmNhdGU6TSBYKScKICAgICBSZXByZXNlbnRzIHRoZSByZXN1bHQgb2YgdHJ1bmNhdGluZyB0aGUgdmFsdWUgWCB0byBtYWNoaW5lIG1vZGUgTSwKICAgICB1c2luZyBzaWduZWQgc2F0dXJhdGlvbiBpbiB0aGUgY2FzZSBvZiBvdmVyZmxvdy4gIEJvdGggTSBhbmQgdGhlCiAgICAgbW9kZSBvZiBYIG11c3QgYmUgZml4ZWQtcG9pbnQgbW9kZXMuCgonKHVzX3RydW5jYXRlOk0gWCknCiAgICAgUmVwcmVzZW50cyB0aGUgcmVzdWx0IG9mIHRydW5jYXRpbmcgdGhlIHZhbHVlIFggdG8gbWFjaGluZSBtb2RlIE0sCiAgICAgdXNpbmcgdW5zaWduZWQgc2F0dXJhdGlvbiBpbiB0aGUgY2FzZSBvZiBvdmVyZmxvdy4gIEJvdGggTSBhbmQgdGhlCiAgICAgbW9kZSBvZiBYIG11c3QgYmUgZml4ZWQtcG9pbnQgbW9kZXMuCgonKGZsb2F0X3RydW5jYXRlOk0gWCknCiAgICAgUmVwcmVzZW50cyB0aGUgcmVzdWx0IG9mIHRydW5jYXRpbmcgdGhlIHZhbHVlIFggdG8gbWFjaGluZSBtb2RlIE0uCiAgICAgTSBtdXN0IGJlIGEgZmxvYXRpbmcgcG9pbnQgbW9kZSBhbmQgWCBhIGZsb2F0aW5nIHBvaW50IHZhbHVlIG9mIGEKICAgICBtb2RlIHdpZGVyIHRoYW4gTS4KCicoZmxvYXQ6TSBYKScKICAgICBSZXByZXNlbnRzIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBmaXhlZCBwb2ludCB2YWx1ZSBYLCByZWdhcmRlZAogICAgIGFzIHNpZ25lZCwgdG8gZmxvYXRpbmcgcG9pbnQgbW9kZSBNLgoKJyh1bnNpZ25lZF9mbG9hdDpNIFgpJwogICAgIFJlcHJlc2VudHMgdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIGZpeGVkIHBvaW50IHZhbHVlIFgsIHJlZ2FyZGVkCiAgICAgYXMgdW5zaWduZWQsIHRvIGZsb2F0aW5nIHBvaW50IG1vZGUgTS4KCicoZml4Ok0gWCknCiAgICAgV2hlbiBNIGlzIGEgZml4ZWQgcG9pbnQgbW9kZSwgcmVwcmVzZW50cyB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcKICAgICBmbG9hdGluZyBwb2ludCB2YWx1ZSBYIHRvIG1vZGUgTSwgcmVnYXJkZWQgYXMgc2lnbmVkLiAgSG93IHJvdW5kaW5nCiAgICAgaXMgZG9uZSBpcyBub3Qgc3BlY2lmaWVkLCBzbyB0aGlzIG9wZXJhdGlvbiBtYXkgYmUgdXNlZCB2YWxpZGx5IGluCiAgICAgY29tcGlsaW5nIEMgY29kZSBvbmx5IGZvciBpbnRlZ2VyLXZhbHVlZCBvcGVyYW5kcy4KCicodW5zaWduZWRfZml4Ok0gWCknCiAgICAgUmVwcmVzZW50cyB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgZmxvYXRpbmcgcG9pbnQgdmFsdWUgWCB0byBmaXhlZAogICAgIHBvaW50IG1vZGUgTSwgcmVnYXJkZWQgYXMgdW5zaWduZWQuICBIb3cgcm91bmRpbmcgaXMgZG9uZSBpcyBub3QKICAgICBzcGVjaWZpZWQuCgonKGZpeDpNIFgpJwogICAgIFdoZW4gTSBpcyBhIGZsb2F0aW5nIHBvaW50IG1vZGUsIHJlcHJlc2VudHMgdGhlIHJlc3VsdCBvZgogICAgIGNvbnZlcnRpbmcgZmxvYXRpbmcgcG9pbnQgdmFsdWUgWCAodmFsaWQgZm9yIG1vZGUgTSkgdG8gYW4gaW50ZWdlciwKICAgICBzdGlsbCByZXByZXNlbnRlZCBpbiBmbG9hdGluZyBwb2ludCBtb2RlIE0sIGJ5IHJvdW5kaW5nIHRvd2FyZHMKICAgICB6ZXJvLgoKJyhmcmFjdF9jb252ZXJ0Ok0gWCknCiAgICAgUmVwcmVzZW50cyB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgZml4ZWQtcG9pbnQgdmFsdWUgWCB0bwogICAgIGZpeGVkLXBvaW50IG1vZGUgTSwgc2lnbmVkIGludGVnZXIgdmFsdWUgWCB0byBmaXhlZC1wb2ludCBtb2RlIE0sCiAgICAgZmxvYXRpbmctcG9pbnQgdmFsdWUgWCB0byBmaXhlZC1wb2ludCBtb2RlIE0sIGZpeGVkLXBvaW50IHZhbHVlIFgKICAgICB0byBpbnRlZ2VyIG1vZGUgTSByZWdhcmRlZCBhcyBzaWduZWQsIG9yIGZpeGVkLXBvaW50IHZhbHVlIFggdG8KICAgICBmbG9hdGluZy1wb2ludCBtb2RlIE0uICBXaGVuIG92ZXJmbG93cyBvciB1bmRlcmZsb3dzIGhhcHBlbiwgdGhlCiAgICAgcmVzdWx0cyBhcmUgdW5kZWZpbmVkLgoKJyhzYXRfZnJhY3Q6TSBYKScKICAgICBSZXByZXNlbnRzIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBmaXhlZC1wb2ludCB2YWx1ZSBYIHRvCiAgICAgZml4ZWQtcG9pbnQgbW9kZSBNLCBzaWduZWQgaW50ZWdlciB2YWx1ZSBYIHRvIGZpeGVkLXBvaW50IG1vZGUgTSwKICAgICBvciBmbG9hdGluZy1wb2ludCB2YWx1ZSBYIHRvIGZpeGVkLXBvaW50IG1vZGUgTS4gIFdoZW4gb3ZlcmZsb3dzIG9yCiAgICAgdW5kZXJmbG93cyBoYXBwZW4sIHRoZSByZXN1bHRzIGFyZSBzYXR1cmF0ZWQgdG8gdGhlIG1heGltdW0gb3IgdGhlCiAgICAgbWluaW11bS4KCicodW5zaWduZWRfZnJhY3RfY29udmVydDpNIFgpJwogICAgIFJlcHJlc2VudHMgdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIGZpeGVkLXBvaW50IHZhbHVlIFggdG8gaW50ZWdlcgogICAgIG1vZGUgTSByZWdhcmRlZCBhcyB1bnNpZ25lZCwgb3IgdW5zaWduZWQgaW50ZWdlciB2YWx1ZSBYIHRvCiAgICAgZml4ZWQtcG9pbnQgbW9kZSBNLiAgV2hlbiBvdmVyZmxvd3Mgb3IgdW5kZXJmbG93cyBoYXBwZW4sIHRoZQogICAgIHJlc3VsdHMgYXJlIHVuZGVmaW5lZC4KCicodW5zaWduZWRfc2F0X2ZyYWN0Ok0gWCknCiAgICAgUmVwcmVzZW50cyB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgdW5zaWduZWQgaW50ZWdlciB2YWx1ZSBYIHRvCiAgICAgZml4ZWQtcG9pbnQgbW9kZSBNLiAgV2hlbiBvdmVyZmxvd3Mgb3IgdW5kZXJmbG93cyBoYXBwZW4sIHRoZQogICAgIHJlc3VsdHMgYXJlIHNhdHVyYXRlZCB0byB0aGUgbWF4aW11bSBvciB0aGUgbWluaW11bS4KCh8KRmlsZTogZ2NjaW50LmluZm8sICBOb2RlOiBSVEwgRGVjbGFyYXRpb25zLCAgTmV4dDogU2lkZSBFZmZlY3RzLCAgUHJldjogQ29udmVyc2lvbnMsICBVcDogUlRMCgoxMi4xNCBEZWNsYXJhdGlvbnMKPT09PT09PT09PT09PT09PT09CgpEZWNsYXJhdGlvbiBleHByZXNzaW9uIGNvZGVzIGRvIG5vdCByZXByZXNlbnQgYXJpdGhtZXRpYyBvcGVyYXRpb25zIGJ1dApyYXRoZXIgc3RhdGUgYXNzZXJ0aW9ucyBhYm91dCB0aGVpciBvcGVyYW5kcy4KCicoc3RyaWN0X2xvd19wYXJ0IChzdWJyZWc6TSAocmVnOk4gUikgMCkpJwogICAgIFRoaXMgZXhwcmVzc2lvbiBjb2RlIGlzIHVzZWQgaW4gb25seSBvbmUgY29udGV4dDogYXMgdGhlCiAgICAgZGVzdGluYXRpb24gb3BlcmFuZCBvZiBhICdzZXQnIGV4cHJlc3Npb24uICBJbiBhZGRpdGlvbiwgdGhlCiAgICAgb3BlcmFuZCBvZiB0aGlzIGV4cHJlc3Npb24gbXVzdCBiZSBhIG5vbi1wYXJhZG94aWNhbCAnc3VicmVnJwogICAgIGV4cHJlc3Npb24uCgogICAgIFRoZSBwcmVzZW5jZSBvZiAnc3RyaWN0X2xvd19wYXJ0JyBzYXlzIHRoYXQgdGhlIHBhcnQgb2YgdGhlCiAgICAgcmVnaXN0ZXIgd2hpY2ggaXMgbWVhbmluZ2Z1bCBpbiBtb2RlIE4sIGJ1dCBpcyBub3QgcGFydCBvZiBtb2RlIE0sCiAgICAgaXMgbm90IHRvIGJlIGFsdGVyZWQuICBOb3JtYWxseSwgYW4gYXNzaWdubWVudCB0byBzdWNoIGEgc3VicmVnIGlzCiAgICAgYWxsb3dlZCB0byBoYXZlIHVuZGVmaW5lZCBlZmZlY3RzIG9uIHRoZSByZXN0IG9mIHRoZSByZWdpc3RlciB3aGVuCiAgICAgTSBpcyBsZXNzIHRoYW4gYSB3b3JkLgoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IFNpZGUgRWZmZWN0cywgIE5leHQ6IEluY2RlYywgIFByZXY6IFJUTCBEZWNsYXJhdGlvbnMsICBVcDogUlRMCgoxMi4xNSBTaWRlIEVmZmVjdCBFeHByZXNzaW9ucwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKVGhlIGV4cHJlc3Npb24gY29kZXMgZGVzY3JpYmVkIHNvIGZhciByZXByZXNlbnQgdmFsdWVzLCBub3QgYWN0aW9ucy4KQnV0IG1hY2hpbmUgaW5zdHJ1Y3Rpb25zIG5ldmVyIHByb2R1Y2UgdmFsdWVzOyB0aGV5IGFyZSBtZWFuaW5nZnVsIG9ubHkKZm9yIHRoZWlyIHNpZGUgZWZmZWN0cyBvbiB0aGUgc3RhdGUgb2YgdGhlIG1hY2hpbmUuICBTcGVjaWFsIGV4cHJlc3Npb24KY29kZXMgYXJlIHVzZWQgdG8gcmVwcmVzZW50IHNpZGUgZWZmZWN0cy4KCiBUaGUgYm9keSBvZiBhbiBpbnN0cnVjdGlvbiBpcyBhbHdheXMgb25lIG9mIHRoZXNlIHNpZGUgZWZmZWN0IGNvZGVzOwp0aGUgY29kZXMgZGVzY3JpYmVkIGFib3ZlLCB3aGljaCByZXByZXNlbnQgdmFsdWVzLCBhcHBlYXIgb25seSBhcyB0aGUKb3BlcmFuZHMgb2YgdGhlc2UuCgonKHNldCBMVkFMIFgpJwogICAgIFJlcHJlc2VudHMgdGhlIGFjdGlvbiBvZiBzdG9yaW5nIHRoZSB2YWx1ZSBvZiBYIGludG8gdGhlIHBsYWNlCiAgICAgcmVwcmVzZW50ZWQgYnkgTFZBTC4gIExWQUwgbXVzdCBiZSBhbiBleHByZXNzaW9uIHJlcHJlc2VudGluZyBhCiAgICAgcGxhY2UgdGhhdCBjYW4gYmUgc3RvcmVkIGluOiAncmVnJyAob3IgJ3N1YnJlZycsICdzdHJpY3RfbG93X3BhcnQnCiAgICAgb3IgJ3plcm9fZXh0cmFjdCcpLCAnbWVtJywgJ3BjJywgJ3BhcmFsbGVsJywgb3IgJ2NjMCcuCgogICAgIElmIExWQUwgaXMgYSAncmVnJywgJ3N1YnJlZycgb3IgJ21lbScsIGl0IGhhcyBhIG1hY2hpbmUgbW9kZTsgdGhlbgogICAgIFggbXVzdCBiZSB2YWxpZCBmb3IgdGhhdCBtb2RlLgoKICAgICBJZiBMVkFMIGlzIGEgJ3JlZycgd2hvc2UgbWFjaGluZSBtb2RlIGlzIGxlc3MgdGhhbiB0aGUgZnVsbCB3aWR0aAogICAgIG9mIHRoZSByZWdpc3RlciwgdGhlbiBpdCBtZWFucyB0aGF0IHRoZSBwYXJ0IG9mIHRoZSByZWdpc3RlcgogICAgIHNwZWNpZmllZCBieSB0aGUgbWFjaGluZSBtb2RlIGlzIGdpdmVuIHRoZSBzcGVjaWZpZWQgdmFsdWUgYW5kIHRoZQogICAgIHJlc3Qgb2YgdGhlIHJlZ2lzdGVyIHJlY2VpdmVzIGFuIHVuZGVmaW5lZCB2YWx1ZS4gIExpa2V3aXNlLCBpZgogICAgIExWQUwgaXMgYSAnc3VicmVnJyB3aG9zZSBtYWNoaW5lIG1vZGUgaXMgbmFycm93ZXIgdGhhbiB0aGUgbW9kZSBvZgogICAgIHRoZSByZWdpc3RlciwgdGhlIHJlc3Qgb2YgdGhlIHJlZ2lzdGVyIGNhbiBiZSBjaGFuZ2VkIGluIGFuCiAgICAgdW5kZWZpbmVkIHdheS4KCiAgICAgSWYgTFZBTCBpcyBhICdzdHJpY3RfbG93X3BhcnQnIG9mIGEgc3VicmVnLCB0aGVuIHRoZSBwYXJ0IG9mIHRoZQogICAgIHJlZ2lzdGVyIHNwZWNpZmllZCBieSB0aGUgbWFjaGluZSBtb2RlIG9mIHRoZSAnc3VicmVnJyBpcyBnaXZlbiB0aGUKICAgICB2YWx1ZSBYIGFuZCB0aGUgcmVzdCBvZiB0aGUgcmVnaXN0ZXIgaXMgbm90IGNoYW5nZWQuCgogICAgIElmIExWQUwgaXMgYSAnemVyb19leHRyYWN0JywgdGhlbiB0aGUgcmVmZXJlbmNlZCBwYXJ0IG9mIHRoZQogICAgIGJpdC1maWVsZCAoYSBtZW1vcnkgb3IgcmVnaXN0ZXIgcmVmZXJlbmNlKSBzcGVjaWZpZWQgYnkgdGhlCiAgICAgJ3plcm9fZXh0cmFjdCcgaXMgZ2l2ZW4gdGhlIHZhbHVlIFggYW5kIHRoZSByZXN0IG9mIHRoZSBiaXQtZmllbGQKICAgICBpcyBub3QgY2hhbmdlZC4gIE5vdGUgdGhhdCAnc2lnbl9leHRyYWN0JyBjYW4gbm90IGFwcGVhciBpbiBMVkFMLgoKICAgICBJZiBMVkFMIGlzICcoY2MwKScsIGl0IGhhcyBubyBtYWNoaW5lIG1vZGUsIGFuZCBYIG1heSBiZSBlaXRoZXIgYQogICAgICdjb21wYXJlJyBleHByZXNzaW9uIG9yIGEgdmFsdWUgdGhhdCBtYXkgaGF2ZSBhbnkgbW9kZS4gIFRoZSBsYXR0ZXIKICAgICBjYXNlIHJlcHJlc2VudHMgYSAidGVzdCIgaW5zdHJ1Y3Rpb24uICBUaGUgZXhwcmVzc2lvbiAnKHNldCAoY2MwKQogICAgIChyZWc6TSBOKSknIGlzIGVxdWl2YWxlbnQgdG8gJyhzZXQgKGNjMCkgKGNvbXBhcmUgKHJlZzpNIE4pCiAgICAgKGNvbnN0X2ludCAwKSkpJy4gIFVzZSB0aGUgZm9ybWVyIGV4cHJlc3Npb24gdG8gc2F2ZSBzcGFjZSBkdXJpbmcKICAgICB0aGUgY29tcGlsYXRpb24uCgogICAgIElmIExWQUwgaXMgYSAncGFyYWxsZWwnLCBpdCBpcyB1c2VkIHRvIHJlcHJlc2VudCB0aGUgY2FzZSBvZiBhCiAgICAgZnVuY3Rpb24gcmV0dXJuaW5nIGEgc3RydWN0dXJlIGluIG11bHRpcGxlIHJlZ2lzdGVycy4gIEVhY2ggZWxlbWVudAogICAgIG9mIHRoZSAncGFyYWxsZWwnIGlzIGFuICdleHByX2xpc3QnIHdob3NlIGZpcnN0IG9wZXJhbmQgaXMgYSAncmVnJwogICAgIGFuZCB3aG9zZSBzZWNvbmQgb3BlcmFuZCBpcyBhICdjb25zdF9pbnQnIHJlcHJlc2VudGluZyB0aGUgb2Zmc2V0CiAgICAgKGluIGJ5dGVzKSBpbnRvIHRoZSBzdHJ1Y3R1cmUgYXQgd2hpY2ggdGhlIGRhdGEgaW4gdGhhdCByZWdpc3RlcgogICAgIGNvcnJlc3BvbmRzLiAgVGhlIGZpcnN0IGVsZW1lbnQgbWF5IGJlIG51bGwgdG8gaW5kaWNhdGUgdGhhdCB0aGUKICAgICBzdHJ1Y3R1cmUgaXMgYWxzbyBwYXNzZWQgcGFydGx5IGluIG1lbW9yeS4KCiAgICAgSWYgTFZBTCBpcyAnKHBjKScsIHdlIGhhdmUgYSBqdW1wIGluc3RydWN0aW9uLCBhbmQgdGhlCiAgICAgcG9zc2liaWxpdGllcyBmb3IgWCBhcmUgdmVyeSBsaW1pdGVkLiAgSXQgbWF5IGJlIGEgJ2xhYmVsX3JlZicKICAgICBleHByZXNzaW9uICh1bmNvbmRpdGlvbmFsIGp1bXApLiAgSXQgbWF5IGJlIGFuICdpZl90aGVuX2Vsc2UnCiAgICAgKGNvbmRpdGlvbmFsIGp1bXApLCBpbiB3aGljaCBjYXNlIGVpdGhlciB0aGUgc2Vjb25kIG9yIHRoZSB0aGlyZAogICAgIG9wZXJhbmQgbXVzdCBiZSAnKHBjKScgKGZvciB0aGUgY2FzZSB3aGljaCBkb2VzIG5vdCBqdW1wKSBhbmQgdGhlCiAgICAgb3RoZXIgb2YgdGhlIHR3byBtdXN0IGJlIGEgJ2xhYmVsX3JlZicgKGZvciB0aGUgY2FzZSB3aGljaCBkb2VzCiAgICAganVtcCkuICBYIG1heSBhbHNvIGJlIGEgJ21lbScgb3IgJyhwbHVzOlNJIChwYykgWSknLCB3aGVyZSBZIG1heSBiZQogICAgIGEgJ3JlZycgb3IgYSAnbWVtJzsgdGhlc2UgdW51c3VhbCBwYXR0ZXJucyBhcmUgdXNlZCB0byByZXByZXNlbnQKICAgICBqdW1wcyB0aHJvdWdoIGJyYW5jaCB0YWJsZXMuCgogICAgIElmIExWQUwgaXMgbmVpdGhlciAnKGNjMCknIG5vciAnKHBjKScsIHRoZSBtb2RlIG9mIExWQUwgbXVzdCBub3QgYmUKICAgICAnVk9JRG1vZGUnIGFuZCB0aGUgbW9kZSBvZiBYIG11c3QgYmUgdmFsaWQgZm9yIHRoZSBtb2RlIG9mIExWQUwuCgogICAgIExWQUwgaXMgY3VzdG9tYXJpbHkgYWNjZXNzZWQgd2l0aCB0aGUgJ1NFVF9ERVNUJyBtYWNybyBhbmQgWCB3aXRoCiAgICAgdGhlICdTRVRfU1JDJyBtYWNyby4KCicocmV0dXJuKScKICAgICBBcyB0aGUgc29sZSBleHByZXNzaW9uIGluIGEgcGF0dGVybiwgcmVwcmVzZW50cyBhIHJldHVybiBmcm9tIHRoZQogICAgIGN1cnJlbnQgZnVuY3Rpb24sIG9uIG1hY2hpbmVzIHdoZXJlIHRoaXMgY2FuIGJlIGRvbmUgd2l0aCBvbmUKICAgICBpbnN0cnVjdGlvbiwgc3VjaCBhcyBWQVhlbi4gIE9uIG1hY2hpbmVzIHdoZXJlIGEgbXVsdGktaW5zdHJ1Y3Rpb24KICAgICAiZXBpbG9ndWUiIG11c3QgYmUgZXhlY3V0ZWQgaW4gb3JkZXIgdG8gcmV0dXJuIGZyb20gdGhlIGZ1bmN0aW9uLAogICAgIHJldHVybmluZyBpcyBkb25lIGJ5IGp1bXBpbmcgdG8gYSBsYWJlbCB3aGljaCBwcmVjZWRlcyB0aGUKICAgICBlcGlsb2d1ZSwgYW5kIHRoZSAncmV0dXJuJyBleHByZXNzaW9uIGNvZGUgaXMgbmV2ZXIgdXNlZC4KCiAgICAgSW5zaWRlIGFuICdpZl90aGVuX2Vsc2UnIGV4cHJlc3Npb24sIHJlcHJlc2VudHMgdGhlIHZhbHVlIHRvIGJlCiAgICAgcGxhY2VkIGluICdwYycgdG8gcmV0dXJuIHRvIHRoZSBjYWxsZXIuCgogICAgIE5vdGUgdGhhdCBhbiBpbnNuIHBhdHRlcm4gb2YgJyhyZXR1cm4pJyBpcyBsb2dpY2FsbHkgZXF1aXZhbGVudCB0bwogICAgICcoc2V0IChwYykgKHJldHVybikpJywgYnV0IHRoZSBsYXR0ZXIgZm9ybSBpcyBuZXZlciB1c2VkLgoKJyhjYWxsIEZVTkNUSU9OIE5BUkdTKScKICAgICBSZXByZXNlbnRzIGEgZnVuY3Rpb24gY2FsbC4gIEZVTkNUSU9OIGlzIGEgJ21lbScgZXhwcmVzc2lvbiB3aG9zZQogICAgIGFkZHJlc3MgaXMgdGhlIGFkZHJlc3Mgb2YgdGhlIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZC4gIE5BUkdTIGlzIGFuCiAgICAgZXhwcmVzc2lvbiB3aGljaCBjYW4gYmUgdXNlZCBmb3IgdHdvIHB1cnBvc2VzOiBvbiBzb21lIG1hY2hpbmVzIGl0CiAgICAgcmVwcmVzZW50cyB0aGUgbnVtYmVyIG9mIGJ5dGVzIG9mIHN0YWNrIGFyZ3VtZW50OyBvbiBvdGhlcnMsIGl0CiAgICAgcmVwcmVzZW50cyB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50IHJlZ2lzdGVycy4KCiAgICAgRWFjaCBtYWNoaW5lIGhhcyBhIHN0YW5kYXJkIG1hY2hpbmUgbW9kZSB3aGljaCBGVU5DVElPTiBtdXN0IGhhdmUuCiAgICAgVGhlIG1hY2hpbmUgZGVzY3JpcHRpb24gZGVmaW5lcyBtYWNybyAnRlVOQ1RJT05fTU9ERScgdG8gZXhwYW5kCiAgICAgaW50byB0aGUgcmVxdWlzaXRlIG1vZGUgbmFtZS4gIFRoZSBwdXJwb3NlIG9mIHRoaXMgbW9kZSBpcyB0bwogICAgIHNwZWNpZnkgd2hhdCBraW5kIG9mIGFkZHJlc3NpbmcgaXMgYWxsb3dlZCwgb24gbWFjaGluZXMgd2hlcmUgdGhlCiAgICAgYWxsb3dlZCBraW5kcyBvZiBhZGRyZXNzaW5nIGRlcGVuZCBvbiB0aGUgbWFjaGluZSBtb2RlIGJlaW5nCiAgICAgYWRkcmVzc2VkLgoKJyhjbG9iYmVyIFgpJwogICAgIFJlcHJlc2VudHMgdGhlIHN0b3Jpbmcgb3IgcG9zc2libGUgc3RvcmluZyBvZiBhbiB1bnByZWRpY3RhYmxlLAogICAgIHVuZGVzY3JpYmVkIHZhbHVlIGludG8gWCwgd2hpY2ggbXVzdCBiZSBhICdyZWcnLCAnc2NyYXRjaCcsCiAgICAgJ3BhcmFsbGVsJyBvciAnbWVtJyBleHByZXNzaW9uLgoKICAgICBPbmUgcGxhY2UgdGhpcyBpcyB1c2VkIGlzIGluIHN0cmluZyBpbnN0cnVjdGlvbnMgdGhhdCBzdG9yZQogICAgIHN0YW5kYXJkIHZhbHVlcyBpbnRvIHBhcnRpY3VsYXIgaGFyZCByZWdpc3RlcnMuICBJdCBtYXkgbm90IGJlCiAgICAgd29ydGggdGhlIHRyb3VibGUgdG8gZGVzY3JpYmUgdGhlIHZhbHVlcyB0aGF0IGFyZSBzdG9yZWQsIGJ1dCBpdCBpcwogICAgIGVzc2VudGlhbCB0byBpbmZvcm0gdGhlIGNvbXBpbGVyIHRoYXQgdGhlIHJlZ2lzdGVycyB3aWxsIGJlCiAgICAgYWx0ZXJlZCwgbGVzdCBpdCBhdHRlbXB0IHRvIGtlZXAgZGF0YSBpbiB0aGVtIGFjcm9zcyB0aGUgc3RyaW5nCiAgICAgaW5zdHJ1Y3Rpb24uCgogICAgIElmIFggaXMgJyhtZW06QkxLIChjb25zdF9pbnQgMCkpJyBvciAnKG1lbTpCTEsgKHNjcmF0Y2gpKScsIGl0CiAgICAgbWVhbnMgdGhhdCBhbGwgbWVtb3J5IGxvY2F0aW9ucyBtdXN0IGJlIHByZXN1bWVkIGNsb2JiZXJlZC4gIElmIFgKICAgICBpcyBhICdwYXJhbGxlbCcsIGl0IGhhcyB0aGUgc2FtZSBtZWFuaW5nIGFzIGEgJ3BhcmFsbGVsJyBpbiBhICdzZXQnCiAgICAgZXhwcmVzc2lvbi4KCiAgICAgTm90ZSB0aGF0IHRoZSBtYWNoaW5lIGRlc2NyaXB0aW9uIGNsYXNzaWZpZXMgY2VydGFpbiBoYXJkIHJlZ2lzdGVycwogICAgIGFzICJjYWxsLWNsb2JiZXJlZCIuICBBbGwgZnVuY3Rpb24gY2FsbCBpbnN0cnVjdGlvbnMgYXJlIGFzc3VtZWQgYnkKICAgICBkZWZhdWx0IHRvIGNsb2JiZXIgdGhlc2UgcmVnaXN0ZXJzLCBzbyB0aGVyZSBpcyBubyBuZWVkIHRvIHVzZQogICAgICdjbG9iYmVyJyBleHByZXNzaW9ucyB0byBpbmRpY2F0ZSB0aGlzIGZhY3QuICBBbHNvLCBlYWNoIGZ1bmN0aW9uCiAgICAgY2FsbCBpcyBhc3N1bWVkIHRvIGhhdmUgdGhlIHBvdGVudGlhbCB0byBhbHRlciBhbnkgbWVtb3J5IGxvY2F0aW9uLAogICAgIHVubGVzcyB0aGUgZnVuY3Rpb24gaXMgZGVjbGFyZWQgJ2NvbnN0Jy4KCiAgICAgSWYgdGhlIGxhc3QgZ3JvdXAgb2YgZXhwcmVzc2lvbnMgaW4gYSAncGFyYWxsZWwnIGFyZSBlYWNoIGEKICAgICAnY2xvYmJlcicgZXhwcmVzc2lvbiB3aG9zZSBhcmd1bWVudHMgYXJlICdyZWcnIG9yICdtYXRjaF9zY3JhdGNoJwogICAgICgqbm90ZSBSVEwgVGVtcGxhdGU6OikgZXhwcmVzc2lvbnMsIHRoZSBjb21iaW5lciBwaGFzZSBjYW4gYWRkIHRoZQogICAgIGFwcHJvcHJpYXRlICdjbG9iYmVyJyBleHByZXNzaW9ucyB0byBhbiBpbnNuIGl0IGhhcyBjb25zdHJ1Y3RlZAogICAgIHdoZW4gZG9pbmcgc28gd2lsbCBjYXVzZSBhIHBhdHRlcm4gdG8gYmUgbWF0Y2hlZC4KCiAgICAgVGhpcyBmZWF0dXJlIGNhbiBiZSB1c2VkLCBmb3IgZXhhbXBsZSwgb24gYSBtYWNoaW5lIHRoYXQgd2hvc2UKICAgICBtdWx0aXBseSBhbmQgYWRkIGluc3RydWN0aW9ucyBkb24ndCB1c2UgYW4gTVEgcmVnaXN0ZXIgYnV0IHdoaWNoCiAgICAgaGFzIGFuIGFkZC1hY2N1bXVsYXRlIGluc3RydWN0aW9uIHRoYXQgZG9lcyBjbG9iYmVyIHRoZSBNUQogICAgIHJlZ2lzdGVyLiAgU2ltaWxhcmx5LCBhIGNvbWJpbmVkIGluc3RydWN0aW9uIG1pZ2h0IHJlcXVpcmUgYQogICAgIHRlbXBvcmFyeSByZWdpc3RlciB3aGlsZSB0aGUgY29uc3RpdHVlbnQgaW5zdHJ1Y3Rpb25zIG1pZ2h0IG5vdC4KCiAgICAgV2hlbiBhICdjbG9iYmVyJyBleHByZXNzaW9uIGZvciBhIHJlZ2lzdGVyIGFwcGVhcnMgaW5zaWRlIGEKICAgICAncGFyYWxsZWwnIHdpdGggb3RoZXIgc2lkZSBlZmZlY3RzLCB0aGUgcmVnaXN0ZXIgYWxsb2NhdG9yCiAgICAgZ3VhcmFudGVlcyB0aGF0IHRoZSByZWdpc3RlciBpcyB1bm9jY3VwaWVkIGJvdGggYmVmb3JlIGFuZCBhZnRlcgogICAgIHRoYXQgaW5zbi4gIEhvd2V2ZXIsIHRoZSByZWxvYWQgcGhhc2UgbWF5IGFsbG9jYXRlIGEgcmVnaXN0ZXIgdXNlZAogICAgIGZvciBvbmUgb2YgdGhlIGlucHV0cyB1bmxlc3MgdGhlICcmJyBjb25zdHJhaW50IGlzIHNwZWNpZmllZCBmb3IKICAgICB0aGUgc2VsZWN0ZWQgYWx0ZXJuYXRpdmUgKCpub3RlIE1vZGlmaWVyczo6KS4gIFlvdSBjYW4gY2xvYmJlcgogICAgIGVpdGhlciBhIHNwZWNpZmljIGhhcmQgcmVnaXN0ZXIsIGEgcHNldWRvIHJlZ2lzdGVyLCBvciBhICdzY3JhdGNoJwogICAgIGV4cHJlc3Npb247IGluIHRoZSBsYXR0ZXIgdHdvIGNhc2VzLCBHQ0Mgd2lsbCBhbGxvY2F0ZSBhIGhhcmQKICAgICByZWdpc3RlciB0aGF0IGlzIGF2YWlsYWJsZSB0aGVyZSBmb3IgdXNlIGFzIGEgdGVtcG9yYXJ5LgoKICAgICBGb3IgaW5zdHJ1Y3Rpb25zIHRoYXQgcmVxdWlyZSBhIHRlbXBvcmFyeSByZWdpc3RlciwgeW91IHNob3VsZCB1c2UKICAgICAnc2NyYXRjaCcgaW5zdGVhZCBvZiBhIHBzZXVkby1yZWdpc3RlciBiZWNhdXNlIHRoaXMgd2lsbCBhbGxvdyB0aGUKICAgICBjb21iaW5lciBwaGFzZSB0byBhZGQgdGhlICdjbG9iYmVyJyB3aGVuIHJlcXVpcmVkLiAgWW91IGRvIHRoaXMgYnkKICAgICBjb2RpbmcgKCdjbG9iYmVyJyAoJ21hdGNoX3NjcmF0Y2gnIC4uLikpLiAgSWYgeW91IGRvIGNsb2JiZXIgYQogICAgIHBzZXVkbyByZWdpc3RlciwgdXNlIG9uZSB3aGljaCBhcHBlYXJzIG5vd2hlcmUgZWxzZS0tZ2VuZXJhdGUgYSBuZXcKICAgICBvbmUgZWFjaCB0aW1lLiAgT3RoZXJ3aXNlLCB5b3UgbWF5IGNvbmZ1c2UgQ1NFLgoKICAgICBUaGVyZSBpcyBvbmUgb3RoZXIga25vd24gdXNlIGZvciBjbG9iYmVyaW5nIGEgcHNldWRvIHJlZ2lzdGVyIGluIGEKICAgICAncGFyYWxsZWwnOiB3aGVuIG9uZSBvZiB0aGUgaW5wdXQgb3BlcmFuZHMgb2YgdGhlIGluc24gaXMgYWxzbwogICAgIGNsb2JiZXJlZCBieSB0aGUgaW5zbi4gIEluIHRoaXMgY2FzZSwgdXNpbmcgdGhlIHNhbWUgcHNldWRvCiAgICAgcmVnaXN0ZXIgaW4gdGhlIGNsb2JiZXIgYW5kIGVsc2V3aGVyZSBpbiB0aGUgaW5zbiBwcm9kdWNlcyB0aGUKICAgICBleHBlY3RlZCByZXN1bHRzLgoKJyh1c2UgWCknCiAgICAgUmVwcmVzZW50cyB0aGUgdXNlIG9mIHRoZSB2YWx1ZSBvZiBYLiAgSXQgaW5kaWNhdGVzIHRoYXQgdGhlIHZhbHVlCiAgICAgaW4gWCBhdCB0aGlzIHBvaW50IGluIHRoZSBwcm9ncmFtIGlzIG5lZWRlZCwgZXZlbiB0aG91Z2ggaXQgbWF5IG5vdAogICAgIGJlIGFwcGFyZW50IHdoeSB0aGlzIGlzIHNvLiAgVGhlcmVmb3JlLCB0aGUgY29tcGlsZXIgd2lsbCBub3QKICAgICBhdHRlbXB0IHRvIGRlbGV0ZSBwcmV2aW91cyBpbnN0cnVjdGlvbnMgd2hvc2Ugb25seSBlZmZlY3QgaXMgdG8KICAgICBzdG9yZSBhIHZhbHVlIGluIFguICBYIG11c3QgYmUgYSAncmVnJyBleHByZXNzaW9uLgoKICAgICBJbiBzb21lIHNpdHVhdGlvbnMsIGl0IG1heSBiZSB0ZW1wdGluZyB0byBhZGQgYSAndXNlJyBvZiBhIHJlZ2lzdGVyCiAgICAgaW4gYSAncGFyYWxsZWwnIHRvIGRlc2NyaWJlIGEgc2l0dWF0aW9uIHdoZXJlIHRoZSB2YWx1ZSBvZiBhCiAgICAgc3BlY2lhbCByZWdpc3RlciB3aWxsIG1vZGlmeSB0aGUgYmVoYXZpb3Igb2YgdGhlIGluc3RydWN0aW9uLiAgQW4KICAgICBoeXBvdGhldGljYWwgZXhhbXBsZSBtaWdodCBiZSBhIHBhdHRlcm4gZm9yIGFuIGFkZGl0aW9uIHRoYXQgY2FuCiAgICAgZWl0aGVyIHdyYXAgYXJvdW5kIG9yIHVzZSBzYXR1cmF0aW5nIGFkZGl0aW9uIGRlcGVuZGluZyBvbiB0aGUKICAgICB2YWx1ZSBvZiBhIHNwZWNpYWwgY29udHJvbCByZWdpc3RlcjoKCiAgICAgICAgICAocGFyYWxsZWwgWyhzZXQgKHJlZzpTSSAyKSAodW5zcGVjOlNJIFsocmVnOlNJIDMpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmVnOlNJIDQpXSAwKSkKICAgICAgICAgICAgICAgICAgICAgKHVzZSAocmVnOlNJIDEpKV0pCgogICAgIFRoaXMgd2lsbCBub3Qgd29yaywgc2V2ZXJhbCBvZiB0aGUgb3B0aW1pemVycyBvbmx5IGxvb2sgYXQKICAgICBleHByZXNzaW9ucyBsb2NhbGx5OyBpdCBpcyB2ZXJ5IGxpa2VseSB0aGF0IGlmIHlvdSBoYXZlIG11bHRpcGxlCiAgICAgaW5zbnMgd2l0aCBpZGVudGljYWwgaW5wdXRzIHRvIHRoZSAndW5zcGVjJywgdGhleSB3aWxsIGJlIG9wdGltaXplZAogICAgIGF3YXkgZXZlbiBpZiByZWdpc3RlciAxIGNoYW5nZXMgaW4gYmV0d2Vlbi4KCiAgICAgVGhpcyBtZWFucyB0aGF0ICd1c2UnIGNhbiBfb25seV8gYmUgdXNlZCB0byBkZXNjcmliZSB0aGF0IHRoZQogICAgIHJlZ2lzdGVyIGlzIGxpdmUuICBZb3Ugc2hvdWxkIHRoaW5rIHR3aWNlIGJlZm9yZSBhZGRpbmcgJ3VzZScKICAgICBzdGF0ZW1lbnRzLCBtb3JlIG9mdGVuIHlvdSB3aWxsIHdhbnQgdG8gdXNlICd1bnNwZWMnIGluc3RlYWQuICBUaGUKICAgICAndXNlJyBSVFggaXMgbW9zdCBjb21tb25seSB1c2VmdWwgdG8gZGVzY3JpYmUgdGhhdCBhIGZpeGVkIHJlZ2lzdGVyCiAgICAgaXMgaW1wbGljaXRseSB1c2VkIGluIGFuIGluc24uICBJdCBpcyBhbHNvIHNhZmUgdG8gdXNlIGluIHBhdHRlcm5zCiAgICAgd2hlcmUgdGhlIGNvbXBpbGVyIGtub3dzIGZvciBvdGhlciByZWFzb25zIHRoYXQgdGhlIHJlc3VsdCBvZiB0aGUKICAgICB3aG9sZSBwYXR0ZXJuIGlzIHZhcmlhYmxlLCBzdWNoIGFzICdtb3ZtZW1NJyBvciAnY2FsbCcgcGF0dGVybnMuCgogICAgIER1cmluZyB0aGUgcmVsb2FkIHBoYXNlLCBhbiBpbnNuIHRoYXQgaGFzIGEgJ3VzZScgYXMgcGF0dGVybiBjYW4KICAgICBjYXJyeSBhIHJlZ19lcXVhbCBub3RlLiAgVGhlc2UgJ3VzZScgaW5zbnMgd2lsbCBiZSBkZWxldGVkIGJlZm9yZQogICAgIHRoZSByZWxvYWQgcGhhc2UgZXhpdHMuCgogICAgIER1cmluZyB0aGUgZGVsYXllZCBicmFuY2ggc2NoZWR1bGluZyBwaGFzZSwgWCBtYXkgYmUgYW4gaW5zbi4gIFRoaXMKICAgICBpbmRpY2F0ZXMgdGhhdCBYIHByZXZpb3VzbHkgd2FzIGxvY2F0ZWQgYXQgdGhpcyBwbGFjZSBpbiB0aGUgY29kZQogICAgIGFuZCBpdHMgZGF0YSBkZXBlbmRlbmNpZXMgbmVlZCB0byBiZSB0YWtlbiBpbnRvIGFjY291bnQuICBUaGVzZQogICAgICd1c2UnIGluc25zIHdpbGwgYmUgZGVsZXRlZCBiZWZvcmUgdGhlIGRlbGF5ZWQgYnJhbmNoIHNjaGVkdWxpbmcKICAgICBwaGFzZSBleGl0cy4KCicocGFyYWxsZWwgW1gwIFgxIC4uLl0pJwogICAgIFJlcHJlc2VudHMgc2V2ZXJhbCBzaWRlIGVmZmVjdHMgcGVyZm9ybWVkIGluIHBhcmFsbGVsLiAgVGhlIHNxdWFyZQogICAgIGJyYWNrZXRzIHN0YW5kIGZvciBhIHZlY3RvcjsgdGhlIG9wZXJhbmQgb2YgJ3BhcmFsbGVsJyBpcyBhIHZlY3RvcgogICAgIG9mIGV4cHJlc3Npb25zLiAgWDAsIFgxIGFuZCBzbyBvbiBhcmUgaW5kaXZpZHVhbCBzaWRlIGVmZmVjdAogICAgIGV4cHJlc3Npb25zLS1leHByZXNzaW9ucyBvZiBjb2RlICdzZXQnLCAnY2FsbCcsICdyZXR1cm4nLCAnY2xvYmJlcicKICAgICBvciAndXNlJy4KCiAgICAgIkluIHBhcmFsbGVsIiBtZWFucyB0aGF0IGZpcnN0IGFsbCB0aGUgdmFsdWVzIHVzZWQgaW4gdGhlCiAgICAgaW5kaXZpZHVhbCBzaWRlLWVmZmVjdHMgYXJlIGNvbXB1dGVkLCBhbmQgc2Vjb25kIGFsbCB0aGUgYWN0dWFsCiAgICAgc2lkZS1lZmZlY3RzIGFyZSBwZXJmb3JtZWQuICBGb3IgZXhhbXBsZSwKCiAgICAgICAgICAocGFyYWxsZWwgWyhzZXQgKHJlZzpTSSAxKSAobWVtOlNJIChyZWc6U0kgMSkpKQogICAgICAgICAgICAgICAgICAgICAoc2V0IChtZW06U0kgKHJlZzpTSSAxKSkgKHJlZzpTSSAxKSldKQoKICAgICBzYXlzIHVuYW1iaWd1b3VzbHkgdGhhdCB0aGUgdmFsdWVzIG9mIGhhcmQgcmVnaXN0ZXIgMSBhbmQgdGhlCiAgICAgbWVtb3J5IGxvY2F0aW9uIGFkZHJlc3NlZCBieSBpdCBhcmUgaW50ZXJjaGFuZ2VkLiAgSW4gYm90aCBwbGFjZXMKICAgICB3aGVyZSAnKHJlZzpTSSAxKScgYXBwZWFycyBhcyBhIG1lbW9yeSBhZGRyZXNzIGl0IHJlZmVycyB0byB0aGUKICAgICB2YWx1ZSBpbiByZWdpc3RlciAxIF9iZWZvcmVfIHRoZSBleGVjdXRpb24gb2YgdGhlIGluc24uCgogICAgIEl0IGZvbGxvd3MgdGhhdCBpdCBpcyBfaW5jb3JyZWN0XyB0byB1c2UgJ3BhcmFsbGVsJyBhbmQgZXhwZWN0IHRoZQogICAgIHJlc3VsdCBvZiBvbmUgJ3NldCcgdG8gYmUgYXZhaWxhYmxlIGZvciB0aGUgbmV4dCBvbmUuICBGb3IgZXhhbXBsZSwKICAgICBwZW9wbGUgc29tZXRpbWVzIGF0dGVtcHQgdG8gcmVwcmVzZW50IGEganVtcC1pZi16ZXJvIGluc3RydWN0aW9uCiAgICAgdGhpcyB3YXk6CgogICAgICAgICAgKHBhcmFsbGVsIFsoc2V0IChjYzApIChyZWc6U0kgMzQpKQogICAgICAgICAgICAgICAgICAgICAoc2V0IChwYykgKGlmX3RoZW5fZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVxIChjYzApIChjb25zdF9pbnQgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGFiZWxfcmVmIC4uLikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYykpKV0pCgogICAgIEJ1dCB0aGlzIGlzIGluY29ycmVjdCwgYmVjYXVzZSBpdCBzYXlzIHRoYXQgdGhlIGp1bXAgY29uZGl0aW9uCiAgICAgZGVwZW5kcyBvbiB0aGUgY29uZGl0aW9uIGNvZGUgdmFsdWUgX2JlZm9yZV8gdGhpcyBpbnN0cnVjdGlvbiwgbm90CiAgICAgb24gdGhlIG5ldyB2YWx1ZSB0aGF0IGlzIHNldCBieSB0aGlzIGluc3RydWN0aW9uLgoKICAgICBQZWVwaG9sZSBvcHRpbWl6YXRpb24sIHdoaWNoIHRha2VzIHBsYWNlIHRvZ2V0aGVyIHdpdGggZmluYWwKICAgICBhc3NlbWJseSBjb2RlIG91dHB1dCwgY2FuIHByb2R1Y2UgaW5zbnMgd2hvc2UgcGF0dGVybnMgY29uc2lzdCBvZiBhCiAgICAgJ3BhcmFsbGVsJyB3aG9zZSBlbGVtZW50cyBhcmUgdGhlIG9wZXJhbmRzIG5lZWRlZCB0byBvdXRwdXQgdGhlCiAgICAgcmVzdWx0aW5nIGFzc2VtYmxlciBjb2RlLS1vZnRlbiAncmVnJywgJ21lbScgb3IgY29uc3RhbnQKICAgICBleHByZXNzaW9ucy4gIFRoaXMgd291bGQgbm90IGJlIHdlbGwtZm9ybWVkIFJUTCBhdCBhbnkgb3RoZXIgc3RhZ2UKICAgICBpbiBjb21waWxhdGlvbiwgYnV0IGl0IGlzIG9rIHRoZW4gYmVjYXVzZSBubyBmdXJ0aGVyIG9wdGltaXphdGlvbgogICAgIHJlbWFpbnMgdG8gYmUgZG9uZS4gIEhvd2V2ZXIsIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBtYWNybwogICAgICdOT1RJQ0VfVVBEQVRFX0NDJywgaWYgYW55LCBtdXN0IGRlYWwgd2l0aCBzdWNoIGluc25zIGlmIHlvdSBkZWZpbmUKICAgICBhbnkgcGVlcGhvbGUgb3B0aW1pemF0aW9ucy4KCicoY29uZF9leGVjIFtDT05EIEVYUFJdKScKICAgICBSZXByZXNlbnRzIGEgY29uZGl0aW9uYWxseSBleGVjdXRlZCBleHByZXNzaW9uLiAgVGhlIEVYUFIgaXMKICAgICBleGVjdXRlZCBvbmx5IGlmIHRoZSBDT05EIGlzIG5vbnplcm8uICBUaGUgQ09ORCBleHByZXNzaW9uIG11c3Qgbm90CiAgICAgaGF2ZSBzaWRlLWVmZmVjdHMsIGJ1dCB0aGUgRVhQUiBtYXkgdmVyeSB3ZWxsIGhhdmUgc2lkZS1lZmZlY3RzLgoKJyhzZXF1ZW5jZSBbSU5TTlMgLi4uXSknCiAgICAgUmVwcmVzZW50cyBhIHNlcXVlbmNlIG9mIGluc25zLiAgRWFjaCBvZiB0aGUgSU5TTlMgdGhhdCBhcHBlYXJzIGluCiAgICAgdGhlIHZlY3RvciBpcyBzdWl0YWJsZSBmb3IgYXBwZWFyaW5nIGluIHRoZSBjaGFpbiBvZiBpbnNucywgc28gaXQKICAgICBtdXN0IGJlIGFuICdpbnNuJywgJ2p1bXBfaW5zbicsICdjYWxsX2luc24nLCAnY29kZV9sYWJlbCcsCiAgICAgJ2JhcnJpZXInIG9yICdub3RlJy4KCiAgICAgQSAnc2VxdWVuY2UnIFJUWCBpcyBuZXZlciBwbGFjZWQgaW4gYW4gYWN0dWFsIGluc24gZHVyaW5nIFJUTAogICAgIGdlbmVyYXRpb24uICBJdCByZXByZXNlbnRzIHRoZSBzZXF1ZW5jZSBvZiBpbnNucyB0aGF0IHJlc3VsdCBmcm9tIGEKICAgICAnZGVmaW5lX2V4cGFuZCcgX2JlZm9yZV8gdGhvc2UgaW5zbnMgYXJlIHBhc3NlZCB0byAnZW1pdF9pbnNuJyB0bwogICAgIGluc2VydCB0aGVtIGluIHRoZSBjaGFpbiBvZiBpbnNucy4gIFdoZW4gYWN0dWFsbHkgaW5zZXJ0ZWQsIHRoZQogICAgIGluZGl2aWR1YWwgc3ViLWluc25zIGFyZSBzZXBhcmF0ZWQgb3V0IGFuZCB0aGUgJ3NlcXVlbmNlJyBpcwogICAgIGZvcmdvdHRlbi4KCiAgICAgQWZ0ZXIgZGVsYXktc2xvdCBzY2hlZHVsaW5nIGlzIGNvbXBsZXRlZCwgYW4gaW5zbiBhbmQgYWxsIHRoZSBpbnNucwogICAgIHRoYXQgcmVzaWRlIGluIGl0cyBkZWxheSBzbG90cyBhcmUgZ3JvdXBlZCB0b2dldGhlciBpbnRvIGEKICAgICAnc2VxdWVuY2UnLiAgVGhlIGluc24gcmVxdWlyaW5nIHRoZSBkZWxheSBzbG90IGlzIHRoZSBmaXJzdCBpbnNuIGluCiAgICAgdGhlIHZlY3Rvcjsgc3Vic2VxdWVudCBpbnNucyBhcmUgdG8gYmUgcGxhY2VkIGluIHRoZSBkZWxheSBzbG90LgoKICAgICAnSU5TTl9BTk5VTExFRF9CUkFOQ0hfUCcgaXMgc2V0IG9uIGFuIGluc24gaW4gYSBkZWxheSBzbG90IHRvCiAgICAgaW5kaWNhdGUgdGhhdCBhIGJyYW5jaCBpbnNuIHNob3VsZCBiZSB1c2VkIHRoYXQgd2lsbCBjb25kaXRpb25hbGx5CiAgICAgYW5udWwgdGhlIGVmZmVjdCBvZiB0aGUgaW5zbnMgaW4gdGhlIGRlbGF5IHNsb3RzLiAgSW4gc3VjaCBhIGNhc2UsCiAgICAgJ0lOU05fRlJPTV9UQVJHRVRfUCcgaW5kaWNhdGVzIHRoYXQgdGhlIGluc24gaXMgZnJvbSB0aGUgdGFyZ2V0IG9mCiAgICAgdGhlIGJyYW5jaCBhbmQgc2hvdWxkIGJlIGV4ZWN1dGVkIG9ubHkgaWYgdGhlIGJyYW5jaCBpcyB0YWtlbjsKICAgICBvdGhlcndpc2UgdGhlIGluc24gc2hvdWxkIGJlIGV4ZWN1dGVkIG9ubHkgaWYgdGhlIGJyYW5jaCBpcyBub3QKICAgICB0YWtlbi4gICpOb3RlIERlbGF5IFNsb3RzOjouCgogVGhlc2UgZXhwcmVzc2lvbiBjb2RlcyBhcHBlYXIgaW4gcGxhY2Ugb2YgYSBzaWRlIGVmZmVjdCwgYXMgdGhlIGJvZHkgb2YKYW4gaW5zbiwgdGhvdWdoIHN0cmljdGx5IHNwZWFraW5nIHRoZXkgZG8gbm90IGFsd2F5cyBkZXNjcmliZSBzaWRlCmVmZmVjdHMgYXMgc3VjaDoKCicoYXNtX2lucHV0IFMpJwogICAgIFJlcHJlc2VudHMgbGl0ZXJhbCBhc3NlbWJsZXIgY29kZSBhcyBkZXNjcmliZWQgYnkgdGhlIHN0cmluZyBTLgoKJyh1bnNwZWMgW09QRVJBTkRTIC4uLl0gSU5ERVgpJwonKHVuc3BlY192b2xhdGlsZSBbT1BFUkFORFMgLi4uXSBJTkRFWCknCiAgICAgUmVwcmVzZW50cyBhIG1hY2hpbmUtc3BlY2lmaWMgb3BlcmF0aW9uIG9uIE9QRVJBTkRTLiAgSU5ERVggc2VsZWN0cwogICAgIGJldHdlZW4gbXVsdGlwbGUgbWFjaGluZS1zcGVjaWZpYyBvcGVyYXRpb25zLiAgJ3Vuc3BlY192b2xhdGlsZScgaXMKICAgICB1c2VkIGZvciB2b2xhdGlsZSBvcGVyYXRpb25zIGFuZCBvcGVyYXRpb25zIHRoYXQgbWF5IHRyYXA7ICd1bnNwZWMnCiAgICAgaXMgdXNlZCBmb3Igb3RoZXIgb3BlcmF0aW9ucy4KCiAgICAgVGhlc2UgY29kZXMgbWF5IGFwcGVhciBpbnNpZGUgYSAncGF0dGVybicgb2YgYW4gaW5zbiwgaW5zaWRlIGEKICAgICAncGFyYWxsZWwnLCBvciBpbnNpZGUgYW4gZXhwcmVzc2lvbi4KCicoYWRkcl92ZWM6TSBbTFIwIExSMSAuLi5dKScKICAgICBSZXByZXNlbnRzIGEgdGFibGUgb2YganVtcCBhZGRyZXNzZXMuICBUaGUgdmVjdG9yIGVsZW1lbnRzIExSMCwKICAgICBldGMuLCBhcmUgJ2xhYmVsX3JlZicgZXhwcmVzc2lvbnMuICBUaGUgbW9kZSBNIHNwZWNpZmllcyBob3cgbXVjaAogICAgIHNwYWNlIGlzIGdpdmVuIHRvIGVhY2ggYWRkcmVzczsgbm9ybWFsbHkgTSB3b3VsZCBiZSAnUG1vZGUnLgoKJyhhZGRyX2RpZmZfdmVjOk0gQkFTRSBbTFIwIExSMSAuLi5dIE1JTiBNQVggRkxBR1MpJwogICAgIFJlcHJlc2VudHMgYSB0YWJsZSBvZiBqdW1wIGFkZHJlc3NlcyBleHByZXNzZWQgYXMgb2Zmc2V0cyBmcm9tCiAgICAgQkFTRS4gIFRoZSB2ZWN0b3IgZWxlbWVudHMgTFIwLCBldGMuLCBhcmUgJ2xhYmVsX3JlZicgZXhwcmVzc2lvbnMKICAgICBhbmQgc28gaXMgQkFTRS4gIFRoZSBtb2RlIE0gc3BlY2lmaWVzIGhvdyBtdWNoIHNwYWNlIGlzIGdpdmVuIHRvCiAgICAgZWFjaCBhZGRyZXNzLWRpZmZlcmVuY2UuICBNSU4gYW5kIE1BWCBhcmUgc2V0IHVwIGJ5IGJyYW5jaAogICAgIHNob3J0ZW5pbmcgYW5kIGhvbGQgYSBsYWJlbCB3aXRoIGEgbWluaW11bSBhbmQgYSBtYXhpbXVtIGFkZHJlc3MsCiAgICAgcmVzcGVjdGl2ZWx5LiAgRkxBR1MgaW5kaWNhdGVzIHRoZSByZWxhdGl2ZSBwb3NpdGlvbiBvZiBCQVNFLCBNSU4KICAgICBhbmQgTUFYIHRvIHRoZSBjb250YWluaW5nIGluc24gYW5kIG9mIE1JTiBhbmQgTUFYIHRvIEJBU0UuICBTZWUKICAgICBydGwuZGVmIGZvciBkZXRhaWxzLgoKJyhwcmVmZXRjaDpNIEFERFIgUlcgTE9DQUxJVFkpJwogICAgIFJlcHJlc2VudHMgcHJlZmV0Y2ggb2YgbWVtb3J5IGF0IGFkZHJlc3MgQUREUi4gIE9wZXJhbmQgUlcgaXMgMSBpZgogICAgIHRoZSBwcmVmZXRjaCBpcyBmb3IgZGF0YSB0byBiZSB3cml0dGVuLCAwIG90aGVyd2lzZTsgdGFyZ2V0cyB0aGF0CiAgICAgZG8gbm90IHN1cHBvcnQgd3JpdGUgcHJlZmV0Y2hlcyBzaG91bGQgdHJlYXQgdGhpcyBhcyBhIG5vcm1hbAogICAgIHByZWZldGNoLiAgT3BlcmFuZCBMT0NBTElUWSBzcGVjaWZpZXMgdGhlIGFtb3VudCBvZiB0ZW1wb3JhbAogICAgIGxvY2FsaXR5OyAwIGlmIHRoZXJlIGlzIG5vbmUgb3IgMSwgMiwgb3IgMyBmb3IgaW5jcmVhc2luZyBsZXZlbHMgb2YKICAgICB0ZW1wb3JhbCBsb2NhbGl0eTsgdGFyZ2V0cyB0aGF0IGRvIG5vdCBzdXBwb3J0IGxvY2FsaXR5IGhpbnRzCiAgICAgc2hvdWxkIGlnbm9yZSB0aGlzLgoKICAgICBUaGlzIGluc24gaXMgdXNlZCB0byBtaW5pbWl6ZSBjYWNoZS1taXNzIGxhdGVuY3kgYnkgbW92aW5nIGRhdGEKICAgICBpbnRvIGEgY2FjaGUgYmVmb3JlIGl0IGlzIGFjY2Vzc2VkLiAgSXQgc2hvdWxkIHVzZSBvbmx5CiAgICAgbm9uLWZhdWx0aW5nIGRhdGEgcHJlZmV0Y2ggaW5zdHJ1Y3Rpb25zLgoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IEluY2RlYywgIE5leHQ6IEFzc2VtYmxlciwgIFByZXY6IFNpZGUgRWZmZWN0cywgIFVwOiBSVEwKCjEyLjE2IEVtYmVkZGVkIFNpZGUtRWZmZWN0cyBvbiBBZGRyZXNzZXMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKU2l4IHNwZWNpYWwgc2lkZS1lZmZlY3QgZXhwcmVzc2lvbiBjb2RlcyBhcHBlYXIgYXMgbWVtb3J5IGFkZHJlc3Nlcy4KCicocHJlX2RlYzpNIFgpJwogICAgIFJlcHJlc2VudHMgdGhlIHNpZGUgZWZmZWN0IG9mIGRlY3JlbWVudGluZyBYIGJ5IGEgc3RhbmRhcmQgYW1vdW50CiAgICAgYW5kIHJlcHJlc2VudHMgYWxzbyB0aGUgdmFsdWUgdGhhdCBYIGhhcyBhZnRlciBiZWluZyBkZWNyZW1lbnRlZC4KICAgICBYIG11c3QgYmUgYSAncmVnJyBvciAnbWVtJywgYnV0IG1vc3QgbWFjaGluZXMgYWxsb3cgb25seSBhICdyZWcnLgogICAgIE0gbXVzdCBiZSB0aGUgbWFjaGluZSBtb2RlIGZvciBwb2ludGVycyBvbiB0aGUgbWFjaGluZSBpbiB1c2UuICBUaGUKICAgICBhbW91bnQgWCBpcyBkZWNyZW1lbnRlZCBieSBpcyB0aGUgbGVuZ3RoIGluIGJ5dGVzIG9mIHRoZSBtYWNoaW5lCiAgICAgbW9kZSBvZiB0aGUgY29udGFpbmluZyBtZW1vcnkgcmVmZXJlbmNlIG9mIHdoaWNoIHRoaXMgZXhwcmVzc2lvbgogICAgIHNlcnZlcyBhcyB0aGUgYWRkcmVzcy4gIEhlcmUgaXMgYW4gZXhhbXBsZSBvZiBpdHMgdXNlOgoKICAgICAgICAgIChtZW06REYgKHByZV9kZWM6U0kgKHJlZzpTSSAzOSkpKQoKICAgICBUaGlzIHNheXMgdG8gZGVjcmVtZW50IHBzZXVkbyByZWdpc3RlciAzOSBieSB0aGUgbGVuZ3RoIG9mIGEKICAgICAnREZtb2RlJyB2YWx1ZSBhbmQgdXNlIHRoZSByZXN1bHQgdG8gYWRkcmVzcyBhICdERm1vZGUnIHZhbHVlLgoKJyhwcmVfaW5jOk0gWCknCiAgICAgU2ltaWxhciwgYnV0IHNwZWNpZmllcyBpbmNyZW1lbnRpbmcgWCBpbnN0ZWFkIG9mIGRlY3JlbWVudGluZyBpdC4KCicocG9zdF9kZWM6TSBYKScKICAgICBSZXByZXNlbnRzIHRoZSBzYW1lIHNpZGUgZWZmZWN0IGFzICdwcmVfZGVjJyBidXQgYSBkaWZmZXJlbnQgdmFsdWUuCiAgICAgVGhlIHZhbHVlIHJlcHJlc2VudGVkIGhlcmUgaXMgdGhlIHZhbHVlIFggaGFzIGJlZm9yZSBiZWluZwogICAgIGRlY3JlbWVudGVkLgoKJyhwb3N0X2luYzpNIFgpJwogICAgIFNpbWlsYXIsIGJ1dCBzcGVjaWZpZXMgaW5jcmVtZW50aW5nIFggaW5zdGVhZCBvZiBkZWNyZW1lbnRpbmcgaXQuCgonKHBvc3RfbW9kaWZ5Ok0gWCBZKScKCiAgICAgUmVwcmVzZW50cyB0aGUgc2lkZSBlZmZlY3Qgb2Ygc2V0dGluZyBYIHRvIFkgYW5kIHJlcHJlc2VudHMgWAogICAgIGJlZm9yZSBYIGlzIG1vZGlmaWVkLiAgWCBtdXN0IGJlIGEgJ3JlZycgb3IgJ21lbScsIGJ1dCBtb3N0CiAgICAgbWFjaGluZXMgYWxsb3cgb25seSBhICdyZWcnLiAgTSBtdXN0IGJlIHRoZSBtYWNoaW5lIG1vZGUgZm9yCiAgICAgcG9pbnRlcnMgb24gdGhlIG1hY2hpbmUgaW4gdXNlLgoKICAgICBUaGUgZXhwcmVzc2lvbiBZIG11c3QgYmUgb25lIG9mIHRocmVlIGZvcm1zOgogICAgICAgICAgJyhwbHVzOk0gWCBaKScsICcobWludXM6TSBYIFopJywgb3IgJyhwbHVzOk0gWCBJKScsCiAgICAgd2hlcmUgWiBpcyBhbiBpbmRleCByZWdpc3RlciBhbmQgSSBpcyBhIGNvbnN0YW50LgoKICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgb2YgaXRzIHVzZToKCiAgICAgICAgICAobWVtOlNGIChwb3N0X21vZGlmeTpTSSAocmVnOlNJIDQyKSAocGx1cyAocmVnOlNJIDQyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlZzpTSSA0OCkpKSkKCiAgICAgVGhpcyBzYXlzIHRvIG1vZGlmeSBwc2V1ZG8gcmVnaXN0ZXIgNDIgYnkgYWRkaW5nIHRoZSBjb250ZW50cyBvZgogICAgIHBzZXVkbyByZWdpc3RlciA0OCB0byBpdCwgYWZ0ZXIgdGhlIHVzZSBvZiB3aGF0IGV2ZXIgNDIgcG9pbnRzIHRvLgoKJyhwcmVfbW9kaWZ5Ok0gWCBFWFBSKScKICAgICBTaW1pbGFyIGV4Y2VwdCBzaWRlIGVmZmVjdHMgaGFwcGVuIGJlZm9yZSB0aGUgdXNlLgoKIFRoZXNlIGVtYmVkZGVkIHNpZGUgZWZmZWN0IGV4cHJlc3Npb25zIG11c3QgYmUgdXNlZCB3aXRoIGNhcmUuCkluc3RydWN0aW9uIHBhdHRlcm5zIG1heSBub3QgdXNlIHRoZW0uICBVbnRpbCB0aGUgJ2Zsb3cnIHBhc3Mgb2YgdGhlCmNvbXBpbGVyLCB0aGV5IG1heSBvY2N1ciBvbmx5IHRvIHJlcHJlc2VudCBwdXNoZXMgb250byB0aGUgc3RhY2suICBUaGUKJ2Zsb3cnIHBhc3MgZmluZHMgY2FzZXMgd2hlcmUgcmVnaXN0ZXJzIGFyZSBpbmNyZW1lbnRlZCBvciBkZWNyZW1lbnRlZAppbiBvbmUgaW5zdHJ1Y3Rpb24gYW5kIHVzZWQgYXMgYW4gYWRkcmVzcyBzaG9ydGx5IGJlZm9yZSBvciBhZnRlcjsgdGhlc2UKY2FzZXMgYXJlIHRoZW4gdHJhbnNmb3JtZWQgdG8gdXNlIHByZS0gb3IgcG9zdC1pbmNyZW1lbnQgb3IgLWRlY3JlbWVudC4KCiBJZiBhIHJlZ2lzdGVyIHVzZWQgYXMgdGhlIG9wZXJhbmQgb2YgdGhlc2UgZXhwcmVzc2lvbnMgaXMgdXNlZCBpbgphbm90aGVyIGFkZHJlc3MgaW4gYW4gaW5zbiwgdGhlIG9yaWdpbmFsIHZhbHVlIG9mIHRoZSByZWdpc3RlciBpcyB1c2VkLgpVc2VzIG9mIHRoZSByZWdpc3RlciBvdXRzaWRlIG9mIGFuIGFkZHJlc3MgYXJlIG5vdCBwZXJtaXR0ZWQgd2l0aGluIHRoZQpzYW1lIGluc24gYXMgYSB1c2UgaW4gYW4gZW1iZWRkZWQgc2lkZSBlZmZlY3QgZXhwcmVzc2lvbiBiZWNhdXNlIHN1Y2gKaW5zbnMgYmVoYXZlIGRpZmZlcmVudGx5IG9uIGRpZmZlcmVudCBtYWNoaW5lcyBhbmQgaGVuY2UgbXVzdCBiZSB0cmVhdGVkCmFzIGFtYmlndW91cyBhbmQgZGlzYWxsb3dlZC4KCiBBbiBpbnN0cnVjdGlvbiB0aGF0IGNhbiBiZSByZXByZXNlbnRlZCB3aXRoIGFuIGVtYmVkZGVkIHNpZGUgZWZmZWN0CmNvdWxkIGFsc28gYmUgcmVwcmVzZW50ZWQgdXNpbmcgJ3BhcmFsbGVsJyBjb250YWluaW5nIGFuIGFkZGl0aW9uYWwKJ3NldCcgdG8gZGVzY3JpYmUgaG93IHRoZSBhZGRyZXNzIHJlZ2lzdGVyIGlzIGFsdGVyZWQuICBUaGlzIGlzIG5vdCBkb25lCmJlY2F1c2UgbWFjaGluZXMgdGhhdCBhbGxvdyB0aGVzZSBvcGVyYXRpb25zIGF0IGFsbCB0eXBpY2FsbHkgYWxsb3cgdGhlbQp3aGVyZXZlciBhIG1lbW9yeSBhZGRyZXNzIGlzIGNhbGxlZCBmb3IuICBEZXNjcmliaW5nIHRoZW0gYXMgYWRkaXRpb25hbApwYXJhbGxlbCBzdG9yZXMgd291bGQgcmVxdWlyZSBkb3VibGluZyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlCm1hY2hpbmUgZGVzY3JpcHRpb24uCgofCkZpbGU6IGdjY2ludC5pbmZvLCAgTm9kZTogQXNzZW1ibGVyLCAgTmV4dDogSW5zbnMsICBQcmV2OiBJbmNkZWMsICBVcDogUlRMCgoxMi4xNyBBc3NlbWJsZXIgSW5zdHJ1Y3Rpb25zIGFzIEV4cHJlc3Npb25zCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KClRoZSBSVFggY29kZSAnYXNtX29wZXJhbmRzJyByZXByZXNlbnRzIGEgdmFsdWUgcHJvZHVjZWQgYnkgYQp1c2VyLXNwZWNpZmllZCBhc3NlbWJsZXIgaW5zdHJ1Y3Rpb24uICBJdCBpcyB1c2VkIHRvIHJlcHJlc2VudCBhbiAnYXNtJwpzdGF0ZW1lbnQgd2l0aCBhcmd1bWVudHMuICBBbiAnYXNtJyBzdGF0ZW1lbnQgd2l0aCBhIHNpbmdsZSBvdXRwdXQKb3BlcmFuZCwgbGlrZSB0aGlzOgoKICAgICBhc20gKCJmb28gJTEsJTIsJTAiIDogIj1hIiAob3V0cHV0dmFyKSA6ICJnIiAoeCArIHkpLCAiZGkiICgqeikpOwoKaXMgcmVwcmVzZW50ZWQgdXNpbmcgYSBzaW5nbGUgJ2FzbV9vcGVyYW5kcycgUlRYIHdoaWNoIHJlcHJlc2VudHMgdGhlCnZhbHVlIHRoYXQgaXMgc3RvcmVkIGluICdvdXRwdXR2YXInOgoKICAgICAoc2V0IFJUWC1GT1ItT1VUUFVUVkFSCiAgICAgICAgICAoYXNtX29wZXJhbmRzICJmb28gJTEsJTIsJTAiICJhIiAwCiAgICAgICAgICAgICAgICAgICAgICAgIFtSVFgtRk9SLUFERElUSU9OLVJFU1VMVCBSVFgtRk9SLSpaXQogICAgICAgICAgICAgICAgICAgICAgICBbKGFzbV9pbnB1dDpNMSAiZyIpCiAgICAgICAgICAgICAgICAgICAgICAgICAoYXNtX2lucHV0Ok0yICJkaSIpXSkpCgpIZXJlIHRoZSBvcGVyYW5kcyBvZiB0aGUgJ2FzbV9vcGVyYW5kcycgUlRYIGFyZSB0aGUgYXNzZW1ibGVyIHRlbXBsYXRlCnN0cmluZywgdGhlIG91dHB1dC1vcGVyYW5kJ3MgY29uc3RyYWludCwgdGhlIGluZGV4LW51bWJlciBvZiB0aGUgb3V0cHV0Cm9wZXJhbmQgYW1vbmcgdGhlIG91dHB1dCBvcGVyYW5kcyBzcGVjaWZpZWQsIGEgdmVjdG9yIG9mIGlucHV0IG9wZXJhbmQKUlRYJ3MsIGFuZCBhIHZlY3RvciBvZiBpbnB1dC1vcGVyYW5kIG1vZGVzIGFuZCBjb25zdHJhaW50cy4gIFRoZSBtb2RlIE0xCmlzIHRoZSBtb2RlIG9mIHRoZSBzdW0gJ3greSc7IE0yIGlzIHRoYXQgb2YgJyp6Jy4KCiBXaGVuIGFuICdhc20nIHN0YXRlbWVudCBoYXMgbXVsdGlwbGUgb3V0cHV0IHZhbHVlcywgaXRzIGluc24gaGFzCnNldmVyYWwgc3VjaCAnc2V0JyBSVFgncyBpbnNpZGUgb2YgYSAncGFyYWxsZWwnLiAgRWFjaCAnc2V0JyBjb250YWlucyBhCidhc21fb3BlcmFuZHMnOyBhbGwgb2YgdGhlc2Ugc2hhcmUgdGhlIHNhbWUgYXNzZW1ibGVyIHRlbXBsYXRlIGFuZAp2ZWN0b3JzLCBidXQgZWFjaCBjb250YWlucyB0aGUgY29uc3RyYWludCBmb3IgdGhlIHJlc3BlY3RpdmUgb3V0cHV0Cm9wZXJhbmQuICBUaGV5IGFyZSBhbHNvIGRpc3Rpbmd1aXNoZWQgYnkgdGhlIG91dHB1dC1vcGVyYW5kIGluZGV4Cm51bWJlciwgd2hpY2ggaXMgMCwgMSwgLi4uIGZvciBzdWNjZXNzaXZlIG91dHB1dCBvcGVyYW5kcy4KCh8KRmlsZTogZ2NjaW50LmluZm8sICBOb2RlOiBJbnNucywgIE5leHQ6IENhbGxzLCAgUHJldjogQXNzZW1ibGVyLCAgVXA6IFJUTAoKMTIuMTggSW5zbnMKPT09PT09PT09PT0KClRoZSBSVEwgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNvZGUgZm9yIGEgZnVuY3Rpb24gaXMgYSBkb3VibHktbGlua2VkCmNoYWluIG9mIG9iamVjdHMgY2FsbGVkICJpbnNucyIuICBJbnNucyBhcmUgZXhwcmVzc2lvbnMgd2l0aCBzcGVjaWFsCmNvZGVzIHRoYXQgYXJlIHVzZWQgZm9yIG5vIG90aGVyIHB1cnBvc2UuICBTb21lIGluc25zIGFyZSBhY3R1YWwKaW5zdHJ1Y3Rpb25zOyBvdGhlcnMgcmVwcmVzZW50IGRpc3BhdGNoIHRhYmxlcyBmb3IgJ3N3aXRjaCcgc3RhdGVtZW50czsKb3RoZXJzIHJlcHJlc2VudCBsYWJlbHMgdG8ganVtcCB0byBvciB2YXJpb3VzIHNvcnRzIG9mIGRlY2xhcmF0aXZlCmluZm9ybWF0aW9uLgoKIEluIGFkZGl0aW9uIHRvIGl0cyBvd24gc3BlY2lmaWMgZGF0YSwgZWFjaCBpbnNuIG11c3QgaGF2ZSBhIHVuaXF1ZQppZC1udW1iZXIgdGhhdCBkaXN0aW5ndWlzaGVzIGl0IGZyb20gYWxsIG90aGVyIGluc25zIGluIHRoZSBjdXJyZW50CmZ1bmN0aW9uIChhZnRlciBkZWxheWVkIGJyYW5jaCBzY2hlZHVsaW5nLCBjb3BpZXMgb2YgYW4gaW5zbiB3aXRoIHRoZQpzYW1lIGlkLW51bWJlciBtYXkgYmUgcHJlc2VudCBpbiBtdWx0aXBsZSBwbGFjZXMgaW4gYSBmdW5jdGlvbiwgYnV0CnRoZXNlIGNvcGllcyB3aWxsIGFsd2F5cyBiZSBpZGVudGljYWwgYW5kIHdpbGwgb25seSBhcHBlYXIgaW5zaWRlIGEKJ3NlcXVlbmNlJyksIGFuZCBjaGFpbiBwb2ludGVycyB0byB0aGUgcHJlY2VkaW5nIGFuZCBmb2xsb3dpbmcgaW5zbnMuClRoZXNlIHRocmVlIGZpZWxkcyBvY2N1cHkgdGhlIHNhbWUgcG9zaXRpb24gaW4gZXZlcnkgaW5zbiwgaW5kZXBlbmRlbnQKb2YgdGhlIGV4cHJlc3Npb24gY29kZSBvZiB0aGUgaW5zbi4gIFRoZXkgY291bGQgYmUgYWNjZXNzZWQgd2l0aCAnWEVYUCcKYW5kICdYSU5UJywgYnV0IGluc3RlYWQgdGhyZWUgc3BlY2lhbCBtYWNyb3MgYXJlIGFsd2F5cyB1c2VkOgoKJ0lOU05fVUlEIChJKScKICAgICBBY2Nlc3NlcyB0aGUgdW5pcXVlIGlkIG9mIGluc24gSS4KCidQUkVWX0lOU04gKEkpJwogICAgIEFjY2Vzc2VzIHRoZSBjaGFpbiBwb2ludGVyIHRvIHRoZSBpbnNuIHByZWNlZGluZyBJLiAgSWYgSSBpcyB0aGUKICAgICBmaXJzdCBpbnNuLCB0aGlzIGlzIGEgbnVsbCBwb2ludGVyLgoKJ05FWFRfSU5TTiAoSSknCiAgICAgQWNjZXNzZXMgdGhlIGNoYWluIHBvaW50ZXIgdG8gdGhlIGluc24gZm9sbG93aW5nIEkuICBJZiBJIGlzIHRoZQogICAgIGxhc3QgaW5zbiwgdGhpcyBpcyBhIG51bGwgcG9pbnRlci4KCiBUaGUgZmlyc3QgaW5zbiBpbiB0aGUgY2hhaW4gaXMgb2J0YWluZWQgYnkgY2FsbGluZyAnZ2V0X2luc25zJzsgdGhlCmxhc3QgaW5zbiBpcyB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgJ2dldF9sYXN0X2luc24nLiAgV2l0aGluIHRoZSBjaGFpbgpkZWxpbWl0ZWQgYnkgdGhlc2UgaW5zbnMsIHRoZSAnTkVYVF9JTlNOJyBhbmQgJ1BSRVZfSU5TTicgcG9pbnRlcnMgbXVzdAphbHdheXMgY29ycmVzcG9uZDogaWYgSU5TTiBpcyBub3QgdGhlIGZpcnN0IGluc24sCgogICAgIE5FWFRfSU5TTiAoUFJFVl9JTlNOIChJTlNOKSkgPT0gSU5TTgoKaXMgYWx3YXlzIHRydWUgYW5kIGlmIElOU04gaXMgbm90IHRoZSBsYXN0IGluc24sCgogICAgIFBSRVZfSU5TTiAoTkVYVF9JTlNOIChJTlNOKSkgPT0gSU5TTgoKaXMgYWx3YXlzIHRydWUuCgogQWZ0ZXIgZGVsYXkgc2xvdCBzY2hlZHVsaW5nLCBzb21lIG9mIHRoZSBpbnNucyBpbiB0aGUgY2hhaW4gbWlnaHQgYmUKJ3NlcXVlbmNlJyBleHByZXNzaW9ucywgd2hpY2ggY29udGFpbiBhIHZlY3RvciBvZiBpbnNucy4gIFRoZSB2YWx1ZSBvZgonTkVYVF9JTlNOJyBpbiBhbGwgYnV0IHRoZSBsYXN0IG9mIHRoZXNlIGluc25zIGlzIHRoZSBuZXh0IGluc24gaW4gdGhlCnZlY3RvcjsgdGhlIHZhbHVlIG9mICdORVhUX0lOU04nIG9mIHRoZSBsYXN0IGluc24gaW4gdGhlIHZlY3RvciBpcyB0aGUKc2FtZSBhcyB0aGUgdmFsdWUgb2YgJ05FWFRfSU5TTicgZm9yIHRoZSAnc2VxdWVuY2UnIGluIHdoaWNoIGl0IGlzCmNvbnRhaW5lZC4gIFNpbWlsYXIgcnVsZXMgYXBwbHkgZm9yICdQUkVWX0lOU04nLgoKIFRoaXMgbWVhbnMgdGhhdCB0aGUgYWJvdmUgaW52YXJpYW50cyBhcmUgbm90IG5lY2Vzc2FyaWx5IHRydWUgZm9yIGluc25zCmluc2lkZSAnc2VxdWVuY2UnIGV4cHJlc3Npb25zLiAgU3BlY2lmaWNhbGx5LCBpZiBJTlNOIGlzIHRoZSBmaXJzdCBpbnNuCmluIGEgJ3NlcXVlbmNlJywgJ05FWFRfSU5TTiAoUFJFVl9JTlNOIChJTlNOKSknIGlzIHRoZSBpbnNuIGNvbnRhaW5pbmcKdGhlICdzZXF1ZW5jZScgZXhwcmVzc2lvbiwgYXMgaXMgdGhlIHZhbHVlIG9mICdQUkVWX0lOU04gKE5FWFRfSU5TTgooSU5TTikpJyBpZiBJTlNOIGlzIHRoZSBsYXN0IGluc24gaW4gdGhlICdzZXF1ZW5jZScgZXhwcmVzc2lvbi4gIFlvdSBjYW4KdXNlIHRoZXNlIGV4cHJlc3Npb25zIHRvIGZpbmQgdGhlIGNvbnRhaW5pbmcgJ3NlcXVlbmNlJyBleHByZXNzaW9uLgoKIEV2ZXJ5IGluc24gaGFzIG9uZSBvZiB0aGUgZm9sbG93aW5nIHNpeCBleHByZXNzaW9uIGNvZGVzOgoKJ2luc24nCiAgICAgVGhlIGV4cHJlc3Npb24gY29kZSAnaW5zbicgaXMgdXNlZCBmb3IgaW5zdHJ1Y3Rpb25zIHRoYXQgZG8gbm90CiAgICAganVtcCBhbmQgZG8gbm90IGRvIGZ1bmN0aW9uIGNhbGxzLiAgJ3NlcXVlbmNlJyBleHByZXNzaW9ucyBhcmUKICAgICBhbHdheXMgY29udGFpbmVkIGluIGluc25zIHdpdGggY29kZSAnaW5zbicgZXZlbiBpZiBvbmUgb2YgdGhvc2UKICAgICBpbnNucyBzaG91bGQganVtcCBvciBkbyBmdW5jdGlvbiBjYWxscy4KCiAgICAgSW5zbnMgd2l0aCBjb2RlICdpbnNuJyBoYXZlIGZvdXIgYWRkaXRpb25hbCBmaWVsZHMgYmV5b25kIHRoZSB0aHJlZQogICAgIG1hbmRhdG9yeSBvbmVzIGxpc3RlZCBhYm92ZS4gIFRoZXNlIGZvdXIgYXJlIGRlc2NyaWJlZCBpbiBhIHRhYmxlCiAgICAgYmVsb3cuCgonanVtcF9pbnNuJwogICAgIFRoZSBleHByZXNzaW9uIGNvZGUgJ2p1bXBfaW5zbicgaXMgdXNlZCBmb3IgaW5zdHJ1Y3Rpb25zIHRoYXQgbWF5CiAgICAganVtcCAob3IsIG1vcmUgZ2VuZXJhbGx5LCBtYXkgY29udGFpbiAnbGFiZWxfcmVmJyBleHByZXNzaW9ucyB0bwogICAgIHdoaWNoICdwYycgY2FuIGJlIHNldCBpbiB0aGF0IGluc3RydWN0aW9uKS4gIElmIHRoZXJlIGlzIGFuCiAgICAgaW5zdHJ1Y3Rpb24gdG8gcmV0dXJuIGZyb20gdGhlIGN1cnJlbnQgZnVuY3Rpb24sIGl0IGlzIHJlY29yZGVkIGFzCiAgICAgYSAnanVtcF9pbnNuJy4KCiAgICAgJ2p1bXBfaW5zbicgaW5zbnMgaGF2ZSB0aGUgc2FtZSBleHRyYSBmaWVsZHMgYXMgJ2luc24nIGluc25zLAogICAgIGFjY2Vzc2VkIGluIHRoZSBzYW1lIHdheSBhbmQgaW4gYWRkaXRpb24gY29udGFpbiBhIGZpZWxkCiAgICAgJ0pVTVBfTEFCRUwnIHdoaWNoIGlzIGRlZmluZWQgb25jZSBqdW1wIG9wdGltaXphdGlvbiBoYXMgY29tcGxldGVkLgoKICAgICBGb3Igc2ltcGxlIGNvbmRpdGlvbmFsIGFuZCB1bmNvbmRpdGlvbmFsIGp1bXBzLCB0aGlzIGZpZWxkIGNvbnRhaW5zCiAgICAgdGhlICdjb2RlX2xhYmVsJyB0byB3aGljaCB0aGlzIGluc24gd2lsbCAocG9zc2libHkgY29uZGl0aW9uYWxseSkKICAgICBicmFuY2guICBJbiBhIG1vcmUgY29tcGxleCBqdW1wLCAnSlVNUF9MQUJFTCcgcmVjb3JkcyBvbmUgb2YgdGhlCiAgICAgbGFiZWxzIHRoYXQgdGhlIGluc24gcmVmZXJzIHRvOyBvdGhlciBqdW1wIHRhcmdldCBsYWJlbHMgYXJlCiAgICAgcmVjb3JkZWQgYXMgJ1JFR19MQUJFTF9UQVJHRVQnIG5vdGVzLiAgVGhlIGV4Y2VwdGlvbiBpcyAnYWRkcl92ZWMnCiAgICAgYW5kICdhZGRyX2RpZmZfdmVjJywgd2hlcmUgJ0pVTVBfTEFCRUwnIGlzICdOVUxMX1JUWCcgYW5kIHRoZSBvbmx5CiAgICAgd2F5IHRvIGZpbmQgdGhlIGxhYmVscyBpcyB0byBzY2FuIHRoZSBlbnRpcmUgYm9keSBvZiB0aGUgaW5zbi4KCiAgICAgUmV0dXJuIGluc25zIGNvdW50IGFzIGp1bXBzLCBidXQgc2luY2UgdGhleSBkbyBub3QgcmVmZXIgdG8gYW55CiAgICAgbGFiZWxzLCB0aGVpciAnSlVNUF9MQUJFTCcgaXMgJ05VTExfUlRYJy4KCidjYWxsX2luc24nCiAgICAgVGhlIGV4cHJlc3Npb24gY29kZSAnY2FsbF9pbnNuJyBpcyB1c2VkIGZvciBpbnN0cnVjdGlvbnMgdGhhdCBtYXkKICAgICBkbyBmdW5jdGlvbiBjYWxscy4gIEl0IGlzIGltcG9ydGFudCB0byBkaXN0aW5ndWlzaCB0aGVzZQogICAgIGluc3RydWN0aW9ucyBiZWNhdXNlIHRoZXkgaW1wbHkgdGhhdCBjZXJ0YWluIHJlZ2lzdGVycyBhbmQgbWVtb3J5CiAgICAgbG9jYXRpb25zIG1heSBiZSBhbHRlcmVkIHVucHJlZGljdGFibHkuCgogICAgICdjYWxsX2luc24nIGluc25zIGhhdmUgdGhlIHNhbWUgZXh0cmEgZmllbGRzIGFzICdpbnNuJyBpbnNucywKICAgICBhY2Nlc3NlZCBpbiB0aGUgc2FtZSB3YXkgYW5kIGluIGFkZGl0aW9uIGNvbnRhaW4gYSBmaWVsZAogICAgICdDQUxMX0lOU05fRlVOQ1RJT05fVVNBR0UnLCB3aGljaCBjb250YWlucyBhIGxpc3QgKGNoYWluIG9mCiAgICAgJ2V4cHJfbGlzdCcgZXhwcmVzc2lvbnMpIGNvbnRhaW5pbmcgJ3VzZScgYW5kICdjbG9iYmVyJyBleHByZXNzaW9ucwogICAgIHRoYXQgZGVub3RlIGhhcmQgcmVnaXN0ZXJzIGFuZCAnTUVNJ3MgdXNlZCBvciBjbG9iYmVyZWQgYnkgdGhlCiAgICAgY2FsbGVkIGZ1bmN0aW9uLgoKICAgICBBICdNRU0nIGdlbmVyYWxseSBwb2ludHMgdG8gYSBzdGFjayBzbG90cyBpbiB3aGljaCBhcmd1bWVudHMgcGFzc2VkCiAgICAgdG8gdGhlIGxpYmNhbGwgYnkgcmVmZXJlbmNlICgqbm90ZSBUQVJHRVRfUEFTU19CWV9SRUZFUkVOQ0U6CiAgICAgUmVnaXN0ZXIgQXJndW1lbnRzLikgYXJlIHN0b3JlZC4gIElmIHRoZSBhcmd1bWVudCBpcyBjYWxsZXItY29waWVkCiAgICAgKCpub3RlIFRBUkdFVF9DQUxMRUVfQ09QSUVTOiBSZWdpc3RlciBBcmd1bWVudHMuKSwgdGhlIHN0YWNrIHNsb3QKICAgICB3aWxsIGJlIG1lbnRpb25lZCBpbiAnQ0xPQkJFUicgYW5kICdVU0UnIGVudHJpZXM7IGlmIGl0J3MKICAgICBjYWxsZWUtY29waWVkLCBvbmx5IGEgJ1VTRScgd2lsbCBhcHBlYXIsIGFuZCB0aGUgJ01FTScgbWF5IHBvaW50IHRvCiAgICAgYWRkcmVzc2VzIHRoYXQgYXJlIG5vdCBzdGFjayBzbG90cy4KCiAgICAgJ0NMT0JCRVInZWQgcmVnaXN0ZXJzIGluIHRoaXMgbGlzdCBhdWdtZW50IHJlZ2lzdGVycyBzcGVjaWZpZWQgaW4KICAgICAnQ0FMTF9VU0VEX1JFR0lTVEVSUycgKCpub3RlIFJlZ2lzdGVyIEJhc2ljczo6KS4KCidjb2RlX2xhYmVsJwogICAgIEEgJ2NvZGVfbGFiZWwnIGluc24gcmVwcmVzZW50cyBhIGxhYmVsIHRoYXQgYSBqdW1wIGluc24gY2FuIGp1bXAKICAgICB0by4gIEl0IGNvbnRhaW5zIHR3byBzcGVjaWFsIGZpZWxkcyBvZiBkYXRhIGluIGFkZGl0aW9uIHRvIHRoZQogICAgIHRocmVlIHN0YW5kYXJkIG9uZXMuICAnQ09ERV9MQUJFTF9OVU1CRVInIGlzIHVzZWQgdG8gaG9sZCB0aGUKICAgICAibGFiZWwgbnVtYmVyIiwgYSBudW1iZXIgdGhhdCBpZGVudGlmaWVzIHRoaXMgbGFiZWwgdW5pcXVlbHkgYW1vbmcKICAgICBhbGwgdGhlIGxhYmVscyBpbiB0aGUgY29tcGlsYXRpb24gKG5vdCBqdXN0IGluIHRoZSBjdXJyZW50CiAgICAgZnVuY3Rpb24pLiAgVWx0aW1hdGVseSwgdGhlIGxhYmVsIGlzIHJlcHJlc2VudGVkIGluIHRoZSBhc3NlbWJsZXIKICAgICBvdXRwdXQgYXMgYW4gYXNzZW1ibGVyIGxhYmVsLCB1c3VhbGx5IG9mIHRoZSBmb3JtICdMTicgd2hlcmUgTiBpcwogICAgIHRoZSBsYWJlbCBudW1iZXIuCgogICAgIFdoZW4gYSAnY29kZV9sYWJlbCcgYXBwZWFycyBpbiBhbiBSVEwgZXhwcmVzc2lvbiwgaXQgbm9ybWFsbHkKICAgICBhcHBlYXJzIHdpdGhpbiBhICdsYWJlbF9yZWYnIHdoaWNoIHJlcHJlc2VudHMgdGhlIGFkZHJlc3Mgb2YgdGhlCiAgICAgbGFiZWwsIGFzIGEgbnVtYmVyLgoKICAgICBCZXNpZGVzIGFzIGEgJ2NvZGVfbGFiZWwnLCBhIGxhYmVsIGNhbiBhbHNvIGJlIHJlcHJlc2VudGVkIGFzIGEKICAgICAnbm90ZScgb2YgdHlwZSAnTk9URV9JTlNOX0RFTEVURURfTEFCRUwnLgoKICAgICBUaGUgZmllbGQgJ0xBQkVMX05VU0VTJyBpcyBvbmx5IGRlZmluZWQgb25jZSB0aGUganVtcCBvcHRpbWl6YXRpb24KICAgICBwaGFzZSBpcyBjb21wbGV0ZWQuICBJdCBjb250YWlucyB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoaXMgbGFiZWwgaXMKICAgICByZWZlcmVuY2VkIGluIHRoZSBjdXJyZW50IGZ1bmN0aW9uLgoKICAgICBUaGUgZmllbGQgJ0xBQkVMX0tJTkQnIGRpZmZlcmVudGlhdGVzIGZvdXIgZGlmZmVyZW50IHR5cGVzIG9mCiAgICAgbGFiZWxzOiAnTEFCRUxfTk9STUFMJywgJ0xBQkVMX1NUQVRJQ19FTlRSWScsICdMQUJFTF9HTE9CQUxfRU5UUlknLAogICAgIGFuZCAnTEFCRUxfV0VBS19FTlRSWScuICBUaGUgb25seSBsYWJlbHMgdGhhdCBkbyBub3QgaGF2ZSB0eXBlCiAgICAgJ0xBQkVMX05PUk1BTCcgYXJlICJhbHRlcm5hdGUgZW50cnkgcG9pbnRzIiB0byB0aGUgY3VycmVudAogICAgIGZ1bmN0aW9uLiAgVGhlc2UgbWF5IGJlIHN0YXRpYyAodmlzaWJsZSBvbmx5IGluIHRoZSBjb250YWluaW5nCiAgICAgdHJhbnNsYXRpb24gdW5pdCksIGdsb2JhbCAoZXhwb3NlZCB0byBhbGwgdHJhbnNsYXRpb24gdW5pdHMpLCBvcgogICAgIHdlYWsgKGdsb2JhbCwgYnV0IGNhbiBiZSBvdmVycmlkZGVuIGJ5IGFub3RoZXIgc3ltYm9sIHdpdGggdGhlIHNhbWUKICAgICBuYW1lKS4KCiAgICAgTXVjaCBvZiB0aGUgY29tcGlsZXIgdHJlYXRzIGFsbCBmb3VyIGtpbmRzIG9mIGxhYmVsIGlkZW50aWNhbGx5LgogICAgIFNvbWUgb2YgaXQgbmVlZHMgdG8ga25vdyB3aGV0aGVyIG9yIG5vdCBhIGxhYmVsIGlzIGFuIGFsdGVybmF0ZQogICAgIGVudHJ5IHBvaW50OyBmb3IgdGhpcyBwdXJwb3NlLCB0aGUgbWFjcm8gJ0xBQkVMX0FMVF9FTlRSWV9QJyBpcwogICAgIHByb3ZpZGVkLiAgSXQgaXMgZXF1aXZhbGVudCB0byB0ZXN0aW5nIHdoZXRoZXIgJ0xBQkVMX0tJTkQgKGxhYmVsKQogICAgID09IExBQkVMX05PUk1BTCcuICBUaGUgb25seSBwbGFjZSB0aGF0IGNhcmVzIGFib3V0IHRoZSBkaXN0aW5jdGlvbgogICAgIGJldHdlZW4gc3RhdGljLCBnbG9iYWwsIGFuZCB3ZWFrIGFsdGVybmF0ZSBlbnRyeSBwb2ludHMsIGJlc2lkZXMKICAgICB0aGUgZnJvbnQtZW5kIGNvZGUgdGhhdCBjcmVhdGVzIHRoZW0sIGlzIHRoZSBmdW5jdGlvbgogICAgICdvdXRwdXRfYWx0ZXJuYXRlX2VudHJ5X3BvaW50JywgaW4gJ2ZpbmFsLmMnLgoKICAgICBUbyBzZXQgdGhlIGtpbmQgb2YgYSBsYWJlbCwgdXNlIHRoZSAnU0VUX0xBQkVMX0tJTkQnIG1hY3JvLgoKJ2JhcnJpZXInCiAgICAgQmFycmllcnMgYXJlIHBsYWNlZCBpbiB0aGUgaW5zdHJ1Y3Rpb24gc3RyZWFtIHdoZW4gY29udHJvbCBjYW5ub3QKICAgICBmbG93IHBhc3QgdGhlbS4gIFRoZXkgYXJlIHBsYWNlZCBhZnRlciB1bmNvbmRpdGlvbmFsIGp1bXAKICAgICBpbnN0cnVjdGlvbnMgdG8gaW5kaWNhdGUgdGhhdCB0aGUganVtcHMgYXJlIHVuY29uZGl0aW9uYWwgYW5kIGFmdGVyCiAgICAgY2FsbHMgdG8gJ3ZvbGF0aWxlJyBmdW5jdGlvbnMsIHdoaWNoIGRvIG5vdCByZXR1cm4gKGUuZy4sICdleGl0JykuCiAgICAgVGhleSBjb250YWluIG5vIGluZm9ybWF0aW9uIGJleW9uZCB0aGUgdGhyZWUgc3RhbmRhcmQgZmllbGRzLgoKJ25vdGUnCiAgICAgJ25vdGUnIGluc25zIGFyZSB1c2VkIHRvIHJlcHJlc2VudCBhZGRpdGlvbmFsIGRlYnVnZ2luZyBhbmQKICAgICBkZWNsYXJhdGl2ZSBpbmZvcm1hdGlvbi4gIFRoZXkgY29udGFpbiB0d28gbm9uc3RhbmRhcmQgZmllbGRzLCBhbgogICAgIGludGVnZXIgd2hpY2ggaXMgYWNjZXNzZWQgd2l0aCB0aGUgbWFjcm8gJ05PVEVfTElORV9OVU1CRVInIGFuZCBhCiAgICAgc3RyaW5nIGFjY2Vzc2VkIHdpdGggJ05PVEVfU09VUkNFX0ZJTEUnLgoKICAgICBJZiAnTk9URV9MSU5FX05VTUJFUicgaXMgcG9zaXRpdmUsIHRoZSBub3RlIHJlcHJlc2VudHMgdGhlIHBvc2l0aW9uCiAgICAgb2YgYSBzb3VyY2UgbGluZSBhbmQgJ05PVEVfU09VUkNFX0ZJTEUnIGlzIHRoZSBzb3VyY2UgZmlsZSBuYW1lCiAgICAgdGhhdCB0aGUgbGluZSBjYW1lIGZyb20uICBUaGVzZSBub3RlcyBjb250cm9sIGdlbmVyYXRpb24gb2YgbGluZQogICAgIG51bWJlciBkYXRhIGluIHRoZSBhc3NlbWJsZXIgb3V0cHV0LgoKICAgICBPdGhlcndpc2UsICdOT1RFX0xJTkVfTlVNQkVSJyBpcyBub3QgcmVhbGx5IGEgbGluZSBudW1iZXIgYnV0IGEKICAgICBjb2RlIHdpdGggb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzIChhbmQgJ05PVEVfU09VUkNFX0ZJTEUnIG11c3QKICAgICBjb250YWluIGEgbnVsbCBwb2ludGVyKToKCiAgICAgJ05PVEVfSU5TTl9ERUxFVEVEJwogICAgICAgICAgU3VjaCBhIG5vdGUgaXMgY29tcGxldGVseSBpZ25vcmFibGUuICBTb21lIHBhc3NlcyBvZiB0aGUKICAgICAgICAgIGNvbXBpbGVyIGRlbGV0ZSBpbnNucyBieSBhbHRlcmluZyB0aGVtIGludG8gbm90ZXMgb2YgdGhpcwogICAgICAgICAga2luZC4KCiAgICAgJ05PVEVfSU5TTl9ERUxFVEVEX0xBQkVMJwogICAgICAgICAgVGhpcyBtYXJrcyB3aGF0IHVzZWQgdG8gYmUgYSAnY29kZV9sYWJlbCcsIGJ1dCB3YXMgbm90IHVzZWQKICAgICAgICAgIGZvciBvdGhlciBwdXJwb3NlcyB0aGFuIHRha2luZyBpdHMgYWRkcmVzcyBhbmQgd2FzIHRyYW5zZm9ybWVkCiAgICAgICAgICB0byBtYXJrIHRoYXQgbm8gY29kZSBqdW1wcyB0byBpdC4KCiAgICAgJ05PVEVfSU5TTl9CTE9DS19CRUcnCiAgICAgJ05PVEVfSU5TTl9CTE9DS19FTkQnCiAgICAgICAgICBUaGVzZSB0eXBlcyBvZiBub3RlcyBpbmRpY2F0ZSB0aGUgcG9zaXRpb24gb2YgdGhlIGJlZ2lubmluZwogICAgICAgICAgYW5kIGVuZCBvZiBhIGxldmVsIG9mIHNjb3Bpbmcgb2YgdmFyaWFibGUgbmFtZXMuICBUaGV5IGNvbnRyb2wKICAgICAgICAgIHRoZSBvdXRwdXQgb2YgZGVidWdnaW5nIGluZm9ybWF0aW9uLgoKICAgICAnTk9URV9JTlNOX0VIX1JFR0lPTl9CRUcnCiAgICAgJ05PVEVfSU5TTl9FSF9SRUdJT05fRU5EJwogICAgICAgICAgVGhlc2UgdHlwZXMgb2Ygbm90ZXMgaW5kaWNhdGUgdGhlIHBvc2l0aW9uIG9mIHRoZSBiZWdpbm5pbmcKICAgICAgICAgIGFuZCBlbmQgb2YgYSBsZXZlbCBvZiBzY29waW5nIGZvciBleGNlcHRpb24gaGFuZGxpbmcuCiAgICAgICAgICAnTk9URV9CTE9DS19OVU1CRVInIGlkZW50aWZpZXMgd2hpY2ggJ0NPREVfTEFCRUwnIG9yICdub3RlJyBvZgogICAgICAgICAgdHlwZSAnTk9URV9JTlNOX0RFTEVURURfTEFCRUwnIGlzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4KICAgICAgICAgIHJlZ2lvbi4KCiAgICAgJ05PVEVfSU5TTl9MT09QX0JFRycKICAgICAnTk9URV9JTlNOX0xPT1BfRU5EJwogICAgICAgICAgVGhlc2UgdHlwZXMgb2Ygbm90ZXMgaW5kaWNhdGUgdGhlIHBvc2l0aW9uIG9mIHRoZSBiZWdpbm5pbmcKICAgICAgICAgIGFuZCBlbmQgb2YgYSAnd2hpbGUnIG9yICdmb3InIGxvb3AuICBUaGV5IGVuYWJsZSB0aGUgbG9vcAogICAgICAgICAgb3B0aW1pemVyIHRvIGZpbmQgbG9vcHMgcXVpY2tseS4KCiAgICAgJ05PVEVfSU5TTl9MT09QX0NPTlQnCiAgICAgICAgICBBcHBlYXJzIGF0IHRoZSBwbGFjZSBpbiBhIGxvb3AgdGhhdCAnY29udGludWUnIHN0YXRlbWVudHMganVtcAogICAgICAgICAgdG8uCgogICAgICdOT1RFX0lOU05fTE9PUF9WVE9QJwogICAgICAgICAgVGhpcyBub3RlIGluZGljYXRlcyB0aGUgcGxhY2UgaW4gYSBsb29wIHdoZXJlIHRoZSBleGl0IHRlc3QKICAgICAgICAgIGJlZ2lucyBmb3IgdGhvc2UgbG9vcHMgaW4gd2hpY2ggdGhlIGV4aXQgdGVzdCBoYXMgYmVlbgogICAgICAgICAgZHVwbGljYXRlZC4gIFRoaXMgcG9zaXRpb24gYmVjb21lcyBhbm90aGVyIHZpcnR1YWwgc3RhcnQgb2YKICAgICAgICAgIHRoZSBsb29wIHdoZW4gY29uc2lkZXJpbmcgbG9vcCBpbnZhcmlhbnRzLgoKICAgICAnTk9URV9JTlNOX0ZVTkNUSU9OX0JFRycKICAgICAgICAgIEFwcGVhcnMgYXQgdGhlIHN0YXJ0IG9mIHRoZSBmdW5jdGlvbiBib2R5LCBhZnRlciB0aGUgZnVuY3Rpb24KICAgICAgICAgIHByb2xvZ3VlLgoKICAgICBUaGVzZSBjb2RlcyBhcmUgcHJpbnRlZCBzeW1ib2xpY2FsbHkgd2hlbiB0aGV5IGFwcGVhciBpbiBkZWJ1Z2dpbmcKICAgICBkdW1wcy4KCiBUaGUgbWFjaGluZSBtb2RlIG9mIGFuIGluc24gaXMgbm9ybWFsbHkgJ1ZPSURtb2RlJywgYnV0IHNvbWUgcGhhc2VzIHVzZQp0aGUgbW9kZSBmb3IgdmFyaW91cyBwdXJwb3Nlcy4KCiBUaGUgY29tbW9uIHN1YmV4cHJlc3Npb24gZWxpbWluYXRpb24gcGFzcyBzZXRzIHRoZSBtb2RlIG9mIGFuIGluc24gdG8KJ1FJbW9kZScgd2hlbiBpdCBpcyB0aGUgZmlyc3QgaW5zbiBpbiBhIGJsb2NrIHRoYXQgaGFzIGFscmVhZHkgYmVlbgpwcm9jZXNzZWQuCgogVGhlIHNlY29uZCBIYWlmYSBzY2hlZHVsaW5nIHBhc3MsIGZvciB0YXJnZXRzIHRoYXQgY2FuIG11bHRpcGxlIGlzc3VlLApzZXRzIHRoZSBtb2RlIG9mIGFuIGluc24gdG8gJ1RJbW9kZScgd2hlbiBpdCBpcyBiZWxpZXZlZCB0aGF0IHRoZQppbnN0cnVjdGlvbiBiZWdpbnMgYW4gaXNzdWUgZ3JvdXAuICBUaGF0IGlzLCB3aGVuIHRoZSBpbnN0cnVjdGlvbiBjYW5ub3QKaXNzdWUgc2ltdWx0YW5lb3VzbHkgd2l0aCB0aGUgcHJldmlvdXMuICBUaGlzIG1heSBiZSByZWxpZWQgb24gYnkgbGF0ZXIKcGFzc2VzLCBpbiBwYXJ0aWN1bGFyIG1hY2hpbmUtZGVwZW5kZW50IHJlb3JnLgoKIEhlcmUgaXMgYSB0YWJsZSBvZiB0aGUgZXh0cmEgZmllbGRzIG9mICdpbnNuJywgJ2p1bXBfaW5zbicgYW5kCidjYWxsX2luc24nIGluc25zOgoKJ1BBVFRFUk4gKEkpJwogICAgIEFuIGV4cHJlc3Npb24gZm9yIHRoZSBzaWRlIGVmZmVjdCBwZXJmb3JtZWQgYnkgdGhpcyBpbnNuLiAgVGhpcwogICAgIG11c3QgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgY29kZXM6ICdzZXQnLCAnY2FsbCcsICd1c2UnLAogICAgICdjbG9iYmVyJywgJ3JldHVybicsICdhc21faW5wdXQnLCAnYXNtX291dHB1dCcsICdhZGRyX3ZlYycsCiAgICAgJ2FkZHJfZGlmZl92ZWMnLCAndHJhcF9pZicsICd1bnNwZWMnLCAndW5zcGVjX3ZvbGF0aWxlJywKICAgICAncGFyYWxsZWwnLCAnY29uZF9leGVjJywgb3IgJ3NlcXVlbmNlJy4gIElmIGl0IGlzIGEgJ3BhcmFsbGVsJywKICAgICBlYWNoIGVsZW1lbnQgb2YgdGhlICdwYXJhbGxlbCcgbXVzdCBiZSBvbmUgdGhlc2UgY29kZXMsIGV4Y2VwdCB0aGF0CiAgICAgJ3BhcmFsbGVsJyBleHByZXNzaW9ucyBjYW5ub3QgYmUgbmVzdGVkIGFuZCAnYWRkcl92ZWMnIGFuZAogICAgICdhZGRyX2RpZmZfdmVjJyBhcmUgbm90IHBlcm1pdHRlZCBpbnNpZGUgYSAncGFyYWxsZWwnIGV4cHJlc3Npb24uCgonSU5TTl9DT0RFIChJKScKICAgICBBbiBpbnRlZ2VyIHRoYXQgc2F5cyB3aGljaCBwYXR0ZXJuIGluIHRoZSBtYWNoaW5lIGRlc2NyaXB0aW9uCiAgICAgbWF0Y2hlcyB0aGlzIGluc24sIG9yIC0xIGlmIHRoZSBtYXRjaGluZyBoYXMgbm90IHlldCBiZWVuCiAgICAgYXR0ZW1wdGVkLgoKICAgICBTdWNoIG1hdGNoaW5nIGlzIG5ldmVyIGF0dGVtcHRlZCBhbmQgdGhpcyBmaWVsZCByZW1haW5zIC0xIG9uIGFuCiAgICAgaW5zbiB3aG9zZSBwYXR0ZXJuIGNvbnNpc3RzIG9mIGEgc2luZ2xlICd1c2UnLCAnY2xvYmJlcicsCiAgICAgJ2FzbV9pbnB1dCcsICdhZGRyX3ZlYycgb3IgJ2FkZHJfZGlmZl92ZWMnIGV4cHJlc3Npb24uCgogICAgIE1hdGNoaW5nIGlzIGFsc28gbmV2ZXIgYXR0ZW1wdGVkIG9uIGluc25zIHRoYXQgcmVzdWx0IGZyb20gYW4gJ2FzbScKICAgICBzdGF0ZW1lbnQuICBUaGVzZSBjb250YWluIGF0IGxlYXN0IG9uZSAnYXNtX29wZXJhbmRzJyBleHByZXNzaW9uLgogICAgIFRoZSBmdW5jdGlvbiAnYXNtX25vcGVyYW5kcycgcmV0dXJucyBhIG5vbi1uZWdhdGl2ZSB2YWx1ZSBmb3Igc3VjaAogICAgIGluc25zLgoKICAgICBJbiB0aGUgZGVidWdnaW5nIG91dHB1dCwgdGhpcyBmaWVsZCBpcyBwcmludGVkIGFzIGEgbnVtYmVyIGZvbGxvd2VkCiAgICAgYnkgYSBzeW1ib2xpYyByZXByZXNlbnRhdGlvbiB0aGF0IGxvY2F0ZXMgdGhlIHBhdHRlcm4gaW4gdGhlICdtZCcKICAgICBmaWxlIGFzIHNvbWUgc21hbGwgcG9zaXRpdmUgb3IgbmVnYXRpdmUgb2Zmc2V0IGZyb20gYSBuYW1lZAogICAgIHBhdHRlcm4uCgonTE9HX0xJTktTIChJKScKICAgICBBIGxpc3QgKGNoYWluIG9mICdpbnNuX2xpc3QnIGV4cHJlc3Npb25zKSBnaXZpbmcgaW5mb3JtYXRpb24gYWJvdXQKICAgICBkZXBlbmRlbmNpZXMgYmV0d2VlbiBpbnN0cnVjdGlvbnMgd2l0aGluIGEgYmFzaWMgYmxvY2suICBOZWl0aGVyIGEKICAgICBqdW1wIG5vciBhIGxhYmVsIG1heSBjb21lIGJldHdlZW4gdGhlIHJlbGF0ZWQgaW5zbnMuICBUaGVzZSBhcmUKICAgICBvbmx5IHVzZWQgYnkgdGhlIHNjaGVkdWxlcnMgYW5kIGJ5IGNvbWJpbmUuICBUaGlzIGlzIGEgZGVwcmVjYXRlZAogICAgIGRhdGEgc3RydWN0dXJlLiAgRGVmLXVzZSBhbmQgdXNlLWRlZiBjaGFpbnMgYXJlIG5vdyBwcmVmZXJyZWQuCgonUkVHX05PVEVTIChJKScKICAgICBBIGxpc3QgKGNoYWluIG9mICdleHByX2xpc3QnIGFuZCAnaW5zbl9saXN0JyBleHByZXNzaW9ucykgZ2l2aW5nCiAgICAgbWlzY2VsbGFuZW91cyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgaW5zbi4gIEl0IGlzIG9mdGVuIGluZm9ybWF0aW9uCiAgICAgcGVydGFpbmluZyB0byB0aGUgcmVnaXN0ZXJzIHVzZWQgaW4gdGhpcyBpbnNuLgoKIFRoZSAnTE9HX0xJTktTJyBmaWVsZCBvZiBhbiBpbnNuIGlzIGEgY2hhaW4gb2YgJ2luc25fbGlzdCcgZXhwcmVzc2lvbnMuCkVhY2ggb2YgdGhlc2UgaGFzIHR3byBvcGVyYW5kczogdGhlIGZpcnN0IGlzIGFuIGluc24sIGFuZCB0aGUgc2Vjb25kIGlzCmFub3RoZXIgJ2luc25fbGlzdCcgZXhwcmVzc2lvbiAodGhlIG5leHQgb25lIGluIHRoZSBjaGFpbikuICBUaGUgbGFzdAonaW5zbl9saXN0JyBpbiB0aGUgY2hhaW4gaGFzIGEgbnVsbCBwb2ludGVyIGFzIHNlY29uZCBvcGVyYW5kLiAgVGhlCnNpZ25pZmljYW50IHRoaW5nIGFib3V0IHRoZSBjaGFpbiBpcyB3aGljaCBpbnNucyBhcHBlYXIgaW4gaXQgKGFzIGZpcnN0Cm9wZXJhbmRzIG9mICdpbnNuX2xpc3QnIGV4cHJlc3Npb25zKS4gIFRoZWlyIG9yZGVyIGlzIG5vdCBzaWduaWZpY2FudC4KCiBUaGlzIGxpc3QgaXMgb3JpZ2luYWxseSBzZXQgdXAgYnkgdGhlIGZsb3cgYW5hbHlzaXMgcGFzczsgaXQgaXMgYSBudWxsCnBvaW50ZXIgdW50aWwgdGhlbi4gIEZsb3cgb25seSBhZGRzIGxpbmtzIGZvciB0aG9zZSBkYXRhIGRlcGVuZGVuY2llcwp3aGljaCBjYW4gYmUgdXNlZCBmb3IgaW5zdHJ1Y3Rpb24gY29tYmluYXRpb24uICBGb3IgZWFjaCBpbnNuLCB0aGUgZmxvdwphbmFseXNpcyBwYXNzIGFkZHMgYSBsaW5rIHRvIGluc25zIHdoaWNoIHN0b3JlIGludG8gcmVnaXN0ZXJzIHZhbHVlcwp0aGF0IGFyZSB1c2VkIGZvciB0aGUgZmlyc3QgdGltZSBpbiB0aGlzIGluc24uCgogVGhlICdSRUdfTk9URVMnIGZpZWxkIG9mIGFuIGluc24gaXMgYSBjaGFpbiBzaW1pbGFyIHRvIHRoZSAnTE9HX0xJTktTJwpmaWVsZCBidXQgaXQgaW5jbHVkZXMgJ2V4cHJfbGlzdCcgZXhwcmVzc2lvbnMgaW4gYWRkaXRpb24gdG8gJ2luc25fbGlzdCcKZXhwcmVzc2lvbnMuICBUaGVyZSBhcmUgc2V2ZXJhbCBraW5kcyBvZiByZWdpc3RlciBub3Rlcywgd2hpY2ggYXJlCmRpc3Rpbmd1aXNoZWQgYnkgdGhlIG1hY2hpbmUgbW9kZSwgd2hpY2ggaW4gYSByZWdpc3RlciBub3RlIGlzIHJlYWxseQp1bmRlcnN0b29kIGFzIGJlaW5nIGFuICdlbnVtIHJlZ19ub3RlJy4gIFRoZSBmaXJzdCBvcGVyYW5kIE9QIG9mIHRoZQpub3RlIGlzIGRhdGEgd2hvc2UgbWVhbmluZyBkZXBlbmRzIG9uIHRoZSBraW5kIG9mIG5vdGUuCgogVGhlIG1hY3JvICdSRUdfTk9URV9LSU5EIChYKScgcmV0dXJucyB0aGUga2luZCBvZiByZWdpc3RlciBub3RlLiAgSXRzCmNvdW50ZXJwYXJ0LCB0aGUgbWFjcm8gJ1BVVF9SRUdfTk9URV9LSU5EIChYLCBORVdLSU5EKScgc2V0cyB0aGUKcmVnaXN0ZXIgbm90ZSB0eXBlIG9mIFggdG8gYmUgTkVXS0lORC4KCiBSZWdpc3RlciBub3RlcyBhcmUgb2YgdGhyZWUgY2xhc3NlczogVGhleSBtYXkgc2F5IHNvbWV0aGluZyBhYm91dCBhbgppbnB1dCB0byBhbiBpbnNuLCB0aGV5IG1heSBzYXkgc29tZXRoaW5nIGFib3V0IGFuIG91dHB1dCBvZiBhbiBpbnNuLCBvcgp0aGV5IG1heSBjcmVhdGUgYSBsaW5rYWdlIGJldHdlZW4gdHdvIGluc25zLiAgVGhlcmUgYXJlIGFsc28gYSBzZXQgb2YKdmFsdWVzIHRoYXQgYXJlIG9ubHkgdXNlZCBpbiAnTE9HX0xJTktTJy4KCiBUaGVzZSByZWdpc3RlciBub3RlcyBhbm5vdGF0ZSBpbnB1dHMgdG8gYW4gaW5zbjoKCidSRUdfREVBRCcKICAgICBUaGUgdmFsdWUgaW4gT1AgZGllcyBpbiB0aGlzIGluc247IHRoYXQgaXMgdG8gc2F5LCBhbHRlcmluZyB0aGUKICAgICB2YWx1ZSBpbW1lZGlhdGVseSBhZnRlciB0aGlzIGluc24gd291bGQgbm90IGFmZmVjdCB0aGUgZnV0dXJlCiAgICAgYmVoYXZpb3Igb2YgdGhlIHByb2dyYW0uCgogICAgIEl0IGRvZXMgbm90IGZvbGxvdyB0aGF0IHRoZSByZWdpc3RlciBPUCBoYXMgbm8gdXNlZnVsIHZhbHVlIGFmdGVyCiAgICAgdGhpcyBpbnNuIHNpbmNlIE9QIGlzIG5vdCBuZWNlc3NhcmlseSBtb2RpZmllZCBieSB0aGlzIGluc24uCiAgICAgUmF0aGVyLCBubyBzdWJzZXF1ZW50IGluc3RydWN0aW9uIHVzZXMgdGhlIGNvbnRlbnRzIG9mIE9QLgoKJ1JFR19VTlVTRUQnCiAgICAgVGhlIHJlZ2lzdGVyIE9QIGJlaW5nIHNldCBieSB0aGlzIGluc24gd2lsbCBub3QgYmUgdXNlZCBpbiBhCiAgICAgc3Vic2VxdWVudCBpbnNuLiAgVGhpcyBkaWZmZXJzIGZyb20gYSAnUkVHX0RFQUQnIG5vdGUsIHdoaWNoCiAgICAgaW5kaWNhdGVzIHRoYXQgdGhlIHZhbHVlIGluIGFuIGlucHV0IHdpbGwgbm90IGJlIHVzZWQgc3Vic2VxdWVudGx5LgogICAgIFRoZXNlIHR3byBub3RlcyBhcmUgaW5kZXBlbmRlbnQ7IGJvdGggbWF5IGJlIHByZXNlbnQgZm9yIHRoZSBzYW1lCiAgICAgcmVnaXN0ZXIuCgonUkVHX0lOQycKICAgICBUaGUgcmVnaXN0ZXIgT1AgaXMgaW5jcmVtZW50ZWQgKG9yIGRlY3JlbWVudGVkOyBhdCB0aGlzIGxldmVsIHRoZXJlCiAgICAgaXMgbm8gZGlzdGluY3Rpb24pIGJ5IGFuIGVtYmVkZGVkIHNpZGUgZWZmZWN0IGluc2lkZSB0aGlzIGluc24uCiAgICAgVGhpcyBtZWFucyBpdCBhcHBlYXJzIGluIGEgJ3Bvc3RfaW5jJywgJ3ByZV9pbmMnLCAncG9zdF9kZWMnIG9yCiAgICAgJ3ByZV9kZWMnIGV4cHJlc3Npb24uCgonUkVHX05PTk5FRycKICAgICBUaGUgcmVnaXN0ZXIgT1AgaXMga25vd24gdG8gaGF2ZSBhIG5vbm5lZ2F0aXZlIHZhbHVlIHdoZW4gdGhpcyBpbnNuCiAgICAgaXMgcmVhY2hlZC4gIFRoaXMgaXMgdXNlZCBzbyB0aGF0IGRlY3JlbWVudCBhbmQgYnJhbmNoIHVudGlsIHplcm8KICAgICBpbnN0cnVjdGlvbnMsIHN1Y2ggYXMgdGhlIG02OGsgZGJyYSwgY2FuIGJlIG1hdGNoZWQuCgogICAgIFRoZSAnUkVHX05PTk5FRycgbm90ZSBpcyBhZGRlZCB0byBpbnNucyBvbmx5IGlmIHRoZSBtYWNoaW5lCiAgICAgZGVzY3JpcHRpb24gaGFzIGEgJ2RlY3JlbWVudF9hbmRfYnJhbmNoX3VudGlsX3plcm8nIHBhdHRlcm4uCgonUkVHX05PX0NPTkZMSUNUJwogICAgIFRoaXMgaW5zbiBkb2VzIG5vdCBjYXVzZSBhIGNvbmZsaWN0IGJldHdlZW4gT1AgYW5kIHRoZSBpdGVtIGJlaW5nCiAgICAgc2V0IGJ5IHRoaXMgaW5zbiBldmVuIHRob3VnaCBpdCBtaWdodCBhcHBlYXIgdGhhdCBpdCBkb2VzLiAgSW4KICAgICBvdGhlciB3b3JkcywgaWYgdGhlIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIGFuZCBPUCBjb3VsZCBvdGhlcndpc2UgYmUKICAgICBhc3NpZ25lZCB0aGUgc2FtZSByZWdpc3RlciwgdGhpcyBpbnNuIGRvZXMgbm90IHByZXZlbnQgdGhhdAogICAgIGFzc2lnbm1lbnQuCgogICAgIEluc25zIHdpdGggdGhpcyBub3RlIGFyZSB1c3VhbGx5IHBhcnQgb2YgYSBibG9jayB0aGF0IGJlZ2lucyB3aXRoIGEKICAgICAnY2xvYmJlcicgaW5zbiBzcGVjaWZ5aW5nIGEgbXVsdGktd29yZCBwc2V1ZG8gcmVnaXN0ZXIgKHdoaWNoIHdpbGwKICAgICBiZSB0aGUgb3V0cHV0IG9mIHRoZSBibG9jayksIGEgZ3JvdXAgb2YgaW5zbnMgdGhhdCBlYWNoIHNldCBvbmUKICAgICB3b3JkIG9mIHRoZSB2YWx1ZSBhbmQgaGF2ZSB0aGUgJ1JFR19OT19DT05GTElDVCcgbm90ZSBhdHRhY2hlZCwgYW5kCiAgICAgYSBmaW5hbCBpbnNuIHRoYXQgY29waWVzIHRoZSBvdXRwdXQgdG8gaXRzZWxmIHdpdGggYW4gYXR0YWNoZWQKICAgICAnUkVHX0VRVUFMJyBub3RlIGdpdmluZyB0aGUgZXhwcmVzc2lvbiBiZWluZyBjb21wdXRlZC4gIFRoaXMgYmxvY2sKICAgICBpcyBlbmNhcHN1bGF0ZWQgd2l0aCAnUkVHX0xJQkNBTEwnIGFuZCAnUkVHX1JFVFZBTCcgbm90ZXMgb24gdGhlCiAgICAgZmlyc3QgYW5kIGxhc3QgaW5zbnMsIHJlc3BlY3RpdmVseS4KCidSRUdfTEFCRUxfT1BFUkFORCcKICAgICBUaGlzIGluc24gdXNlcyBPUCwgYSAnY29kZV9sYWJlbCcgb3IgYSAnbm90ZScgb2YgdHlwZQogICAgICdOT1RFX0lOU05fREVMRVRFRF9MQUJFTCcsIGJ1dCBpcyBub3QgYSAnanVtcF9pbnNuJywgb3IgaXQgaXMgYQogICAgICdqdW1wX2luc24nIHRoYXQgcmVmZXJzIHRvIHRoZSBvcGVyYW5kIGFzIGFuIG9yZGluYXJ5IG9wZXJhbmQuICBUaGUKICAgICBsYWJlbCBtYXkgc3RpbGwgZXZlbnR1YWxseSBiZSBhIGp1bXAgdGFyZ2V0LCBidXQgaWYgc28gaW4gYW4KICAgICBpbmRpcmVjdCBqdW1wIGluIGEgc3Vic2VxdWVudCBpbnNuLiAgVGhlIHByZXNlbmNlIG9mIHRoaXMgbm90ZQogICAgIGFsbG93cyBqdW1wIG9wdGltaXphdGlvbiB0byBiZSBhd2FyZSB0aGF0IE9QIGlzLCBpbiBmYWN0LCBiZWluZwogICAgIHVzZWQsIGFuZCBmbG93IG9wdGltaXphdGlvbiB0byBidWlsZCBhbiBhY2N1cmF0ZSBmbG93IGdyYXBoLgoKJ1JFR19MQUJFTF9UQVJHRVQnCiAgICAgVGhpcyBpbnNuIGlzIGEgJ2p1bXBfaW5zbicgYnV0IG5vdCBhICdhZGRyX3ZlYycgb3IgJ2FkZHJfZGlmZl92ZWMnLgogICAgIEl0IHVzZXMgT1AsIGEgJ2NvZGVfbGFiZWwnIGFzIGEgZGlyZWN0IG9yIGluZGlyZWN0IGp1bXAgdGFyZ2V0LgogICAgIEl0cyBwdXJwb3NlIGlzIHNpbWlsYXIgdG8gdGhhdCBvZiAnUkVHX0xBQkVMX09QRVJBTkQnLiAgVGhpcyBub3RlCiAgICAgaXMgb25seSBwcmVzZW50IGlmIHRoZSBpbnNuIGhhcyBtdWx0aXBsZSB0YXJnZXRzOyB0aGUgbGFzdCBsYWJlbCBpbgogICAgIHRoZSBpbnNuIChpbiB0aGUgaGlnaGVzdCBudW1iZXJlZCBpbnNuLWZpZWxkKSBnb2VzIGludG8gdGhlCiAgICAgJ0pVTVBfTEFCRUwnIGZpZWxkIGFuZCBkb2VzIG5vdCBoYXZlIGEgJ1JFR19MQUJFTF9UQVJHRVQnIG5vdGUuCiAgICAgKk5vdGUgSlVNUF9MQUJFTDogSW5zbnMuCgonUkVHX0NST1NTSU5HX0pVTVAnCiAgICAgVGhpcyBpbnNuIGlzIGFuIGJyYW5jaGluZyBpbnN0cnVjdGlvbiAoZWl0aGVyIGFuIHVuY29uZGl0aW9uYWwganVtcAogICAgIG9yIGFuIGluZGlyZWN0IGp1bXApIHdoaWNoIGNyb3NzZXMgYmV0d2VlbiBob3QgYW5kIGNvbGQgc2VjdGlvbnMsCiAgICAgd2hpY2ggY291bGQgcG90ZW50aWFsbHkgYmUgdmVyeSBmYXIgYXBhcnQgaW4gdGhlIGV4ZWN1dGFibGUuICBUaGUKICAgICBwcmVzZW5jZSBvZiB0aGlzIG5vdGUgaW5kaWNhdGVzIHRvIG90aGVyIG9wdGltaXphdGlvbnMgdGhhdCB0aGlzCiAgICAgdGhpcyBicmFuY2hpbmcgaW5zdHJ1Y3Rpb24gc2hvdWxkIG5vdCBiZSAiY29sbGFwc2VkIiBpbnRvIGEgc2ltcGxlcgogICAgIGJyYW5jaGluZyBjb25zdHJ1Y3QuICBJdCBpcyB1c2VkIHdoZW4gdGhlIG9wdGltaXphdGlvbiB0byBwYXJ0aXRpb24KICAgICBiYXNpYyBibG9ja3MgaW50byBob3QgYW5kIGNvbGQgc2VjdGlvbnMgaXMgdHVybmVkIG9uLgoKJ1JFR19TRVRKTVAnCiAgICAgQXBwZWFycyBhdHRhY2hlZCB0byBlYWNoICdDQUxMX0lOU04nIHRvICdzZXRqbXAnIG9yIGEgcmVsYXRlZAogICAgIGZ1bmN0aW9uLgoKIFRoZSBmb2xsb3dpbmcgbm90ZXMgZGVzY3JpYmUgYXR0cmlidXRlcyBvZiBvdXRwdXRzIG9mIGFuIGluc246CgonUkVHX0VRVUlWJwonUkVHX0VRVUFMJwogICAgIFRoaXMgbm90ZSBpcyBvbmx5IHZhbGlkIG9uIGFuIGluc24gdGhhdCBzZXRzIG9ubHkgb25lIHJlZ2lzdGVyIGFuZAogICAgIGluZGljYXRlcyB0aGF0IHRoYXQgcmVnaXN0ZXIgd2lsbCBiZSBlcXVhbCB0byBPUCBhdCBydW4gdGltZTsgdGhlCiAgICAgc2NvcGUgb2YgdGhpcyBlcXVpdmFsZW5jZSBkaWZmZXJzIGJldHdlZW4gdGhlIHR3byB0eXBlcyBvZiBub3Rlcy4KICAgICBUaGUgdmFsdWUgd2hpY2ggdGhlIGluc24gZXhwbGljaXRseSBjb3BpZXMgaW50byB0aGUgcmVnaXN0ZXIgbWF5CiAgICAgbG9vayBkaWZmZXJlbnQgZnJvbSBPUCwgYnV0IHRoZXkgd2lsbCBiZSBlcXVhbCBhdCBydW4gdGltZS4gIElmIHRoZQogICAgIG91dHB1dCBvZiB0aGUgc2luZ2xlICdzZXQnIGlzIGEgJ3N0cmljdF9sb3dfcGFydCcgZXhwcmVzc2lvbiwgdGhlCiAgICAgbm90ZSByZWZlcnMgdG8gdGhlIHJlZ2lzdGVyIHRoYXQgaXMgY29udGFpbmVkIGluICdTVUJSRUdfUkVHJyBvZgogICAgIHRoZSAnc3VicmVnJyBleHByZXNzaW9uLgoKICAgICBGb3IgJ1JFR19FUVVJVicsIHRoZSByZWdpc3RlciBpcyBlcXVpdmFsZW50IHRvIE9QIHRocm91Z2hvdXQgdGhlCiAgICAgZW50aXJlIGZ1bmN0aW9uLCBhbmQgY291bGQgdmFsaWRseSBiZSByZXBsYWNlZCBpbiBhbGwgaXRzCiAgICAgb2NjdXJyZW5jZXMgYnkgT1AuICAoIlZhbGlkbHkiIGhlcmUgcmVmZXJzIHRvIHRoZSBkYXRhIGZsb3cgb2YgdGhlCiAgICAgcHJvZ3JhbTsgc2ltcGxlIHJlcGxhY2VtZW50IG1heSBtYWtlIHNvbWUgaW5zbnMgaW52YWxpZC4pICBGb3IKICAgICBleGFtcGxlLCB3aGVuIGEgY29uc3RhbnQgaXMgbG9hZGVkIGludG8gYSByZWdpc3RlciB0aGF0IGlzIG5ldmVyCiAgICAgYXNzaWduZWQgYW55IG90aGVyIHZhbHVlLCB0aGlzIGtpbmQgb2Ygbm90ZSBpcyB1c2VkLgoKICAgICBXaGVuIGEgcGFyYW1ldGVyIGlzIGNvcGllZCBpbnRvIGEgcHNldWRvLXJlZ2lzdGVyIGF0IGVudHJ5IHRvIGEKICAgICBmdW5jdGlvbiwgYSBub3RlIG9mIHRoaXMga2luZCByZWNvcmRzIHRoYXQgdGhlIHJlZ2lzdGVyIGlzCiAgICAgZXF1aXZhbGVudCB0byB0aGUgc3RhY2sgc2xvdCB3aGVyZSB0aGUgcGFyYW1ldGVyIHdhcyBwYXNzZWQuCiAgICAgQWx0aG91Z2ggaW4gdGhpcyBjYXNlIHRoZSByZWdpc3RlciBtYXkgYmUgc2V0IGJ5IG90aGVyIGluc25zLCBpdCBpcwogICAgIHN0aWxsIHZhbGlkIHRvIHJlcGxhY2UgdGhlIHJlZ2lzdGVyIGJ5IHRoZSBzdGFjayBzbG90IHRocm91Z2hvdXQKICAgICB0aGUgZnVuY3Rpb24uCgogICAgIEEgJ1JFR19FUVVJVicgbm90ZSBpcyBhbHNvIHVzZWQgb24gYW4gaW5zdHJ1Y3Rpb24gd2hpY2ggY29waWVzIGEKICAgICByZWdpc3RlciBwYXJhbWV0ZXIgaW50byBhIHBzZXVkby1yZWdpc3RlciBhdCBlbnRyeSB0byBhIGZ1bmN0aW9uLAogICAgIGlmIHRoZXJlIGlzIGEgc3RhY2sgc2xvdCB3aGVyZSB0aGF0IHBhcmFtZXRlciBjb3VsZCBiZSBzdG9yZWQuCiAgICAgQWx0aG91Z2ggb3RoZXIgaW5zbnMgbWF5IHNldCB0aGUgcHNldWRvLXJlZ2lzdGVyLCBpdCBpcyB2YWxpZCBmb3IKICAgICB0aGUgY29tcGlsZXIgdG8gcmVwbGFjZSB0aGUgcHNldWRvLXJlZ2lzdGVyIGJ5IHN0YWNrIHNsb3QKICAgICB0aHJvdWdob3V0IHRoZSBmdW5jdGlvbiwgcHJvdmlkZWQgdGhlIGNvbXBpbGVyIGVuc3VyZXMgdGhhdCB0aGUKICAgICBzdGFjayBzbG90IGlzIHByb3Blcmx5IGluaXRpYWxpemVkIGJ5IG1ha2luZyB0aGUgcmVwbGFjZW1lbnQgaW4gdGhlCiAgICAgaW5pdGlhbCBjb3B5IGluc3RydWN0aW9uIGFzIHdlbGwuICBUaGlzIGlzIHVzZWQgb24gbWFjaGluZXMgZm9yCiAgICAgd2hpY2ggdGhlIGNhbGxpbmcgY29udmVudGlvbiBhbGxvY2F0ZXMgc3RhY2sgc3BhY2UgZm9yIHJlZ2lzdGVyCiAgICAgcGFyYW1ldGVycy4gIFNlZSAnUkVHX1BBUk1fU1RBQ0tfU1BBQ0UnIGluICpub3RlIFN0YWNrIEFyZ3VtZW50czo6LgoKICAgICBJbiB0aGUgY2FzZSBvZiAnUkVHX0VRVUFMJywgdGhlIHJlZ2lzdGVyIHRoYXQgaXMgc2V0IGJ5IHRoaXMgaW5zbgogICAgIHdpbGwgYmUgZXF1YWwgdG8gT1AgYXQgcnVuIHRpbWUgYXQgdGhlIGVuZCBvZiB0aGlzIGluc24gYnV0IG5vdAogICAgIG5lY2Vzc2FyaWx5IGVsc2V3aGVyZSBpbiB0aGUgZnVuY3Rpb24uICBJbiB0aGlzIGNhc2UsIE9QIGlzCiAgICAgdHlwaWNhbGx5IGFuIGFyaXRobWV0aWMgZXhwcmVzc2lvbi4gIEZvciBleGFtcGxlLCB3aGVuIGEgc2VxdWVuY2UKICAgICBvZiBpbnNucyBzdWNoIGFzIGEgbGlicmFyeSBjYWxsIGlzIHVzZWQgdG8gcGVyZm9ybSBhbiBhcml0aG1ldGljCiAgICAgb3BlcmF0aW9uLCB0aGlzIGtpbmQgb2Ygbm90ZSBpcyBhdHRhY2hlZCB0byB0aGUgaW5zbiB0aGF0IHByb2R1Y2VzCiAgICAgb3IgY29waWVzIHRoZSBmaW5hbCB2YWx1ZS4KCiAgICAgVGhlc2UgdHdvIG5vdGVzIGFyZSB1c2VkIGluIGRpZmZlcmVudCB3YXlzIGJ5IHRoZSBjb21waWxlciBwYXNzZXMuCiAgICAgJ1JFR19FUVVBTCcgaXMgdXNlZCBieSBwYXNzZXMgcHJpb3IgdG8gcmVnaXN0ZXIgYWxsb2NhdGlvbiAoc3VjaCBhcwogICAgIGNvbW1vbiBzdWJleHByZXNzaW9uIGVsaW1pbmF0aW9uIGFuZCBsb29wIG9wdGltaXphdGlvbikgdG8gdGVsbAogICAgIHRoZW0gaG93IHRvIHRoaW5rIG9mIHRoYXQgdmFsdWUuICAnUkVHX0VRVUlWJyBub3RlcyBhcmUgdXNlZCBieQogICAgIHJlZ2lzdGVyIGFsbG9jYXRpb24gdG8gaW5kaWNhdGUgdGhhdCB0aGVyZSBpcyBhbiBhdmFpbGFibGUKICAgICBzdWJzdGl0dXRlIGV4cHJlc3Npb24gKGVpdGhlciBhIGNvbnN0YW50IG9yIGEgJ21lbScgZXhwcmVzc2lvbiBmb3IKICAgICB0aGUgbG9jYXRpb24gb2YgYSBwYXJhbWV0ZXIgb24gdGhlIHN0YWNrKSB0aGF0IG1heSBiZSB1c2VkIGluIHBsYWNlCiAgICAgb2YgYSByZWdpc3RlciBpZiBpbnN1ZmZpY2llbnQgcmVnaXN0ZXJzIGFyZSBhdmFpbGFibGUuCgogICAgIEV4Y2VwdCBmb3Igc3RhY2sgaG9tZXMgZm9yIHBhcmFtZXRlcnMsIHdoaWNoIGFyZSBpbmRpY2F0ZWQgYnkgYQogICAgICdSRUdfRVFVSVYnIG5vdGUgYW5kIGFyZSBub3QgdXNlZnVsIHRvIHRoZSBlYXJseSBvcHRpbWl6YXRpb24KICAgICBwYXNzZXMgYW5kIHBzZXVkbyByZWdpc3RlcnMgdGhhdCBhcmUgZXF1aXZhbGVudCB0byBhIG1lbW9yeQogICAgIGxvY2F0aW9uIHRocm91Z2hvdXQgdGhlaXIgZW50aXJlIGxpZmUsIHdoaWNoIGlzIG5vdCBkZXRlY3RlZCB1bnRpbAogICAgIGxhdGVyIGluIHRoZSBjb21waWxhdGlvbiwgYWxsIGVxdWl2YWxlbmNlcyBhcmUgaW5pdGlhbGx5IGluZGljYXRlZAogICAgIGJ5IGFuIGF0dGFjaGVkICdSRUdfRVFVQUwnIG5vdGUuICBJbiB0aGUgZWFybHkgc3RhZ2VzIG9mIHJlZ2lzdGVyCiAgICAgYWxsb2NhdGlvbiwgYSAnUkVHX0VRVUFMJyBub3RlIGlzIGNoYW5nZWQgaW50byBhICdSRUdfRVFVSVYnIG5vdGUKICAgICBpZiBPUCBpcyBhIGNvbnN0YW50IGFuZCB0aGUgaW5zbiByZXByZXNlbnRzIHRoZSBvbmx5IHNldCBvZiBpdHMKICAgICBkZXN0aW5hdGlvbiByZWdpc3Rlci4KCiAgICAgVGh1cywgY29tcGlsZXIgcGFzc2VzIHByaW9yIHRvIHJlZ2lzdGVyIGFsbG9jYXRpb24gbmVlZCBvbmx5IGNoZWNrCiAgICAgZm9yICdSRUdfRVFVQUwnIG5vdGVzIGFuZCBwYXNzZXMgc3Vic2VxdWVudCB0byByZWdpc3RlciBhbGxvY2F0aW9uCiAgICAgbmVlZCBvbmx5IGNoZWNrIGZvciAnUkVHX0VRVUlWJyBub3Rlcy4KCiBUaGVzZSBub3RlcyBkZXNjcmliZSBsaW5rYWdlcyBiZXR3ZWVuIGluc25zLiAgVGhleSBvY2N1ciBpbiBwYWlyczogb25lCmluc24gaGFzIG9uZSBvZiBhIHBhaXIgb2Ygbm90ZXMgdGhhdCBwb2ludHMgdG8gYSBzZWNvbmQgaW5zbiwgd2hpY2ggaGFzCnRoZSBpbnZlcnNlIG5vdGUgcG9pbnRpbmcgYmFjayB0byB0aGUgZmlyc3QgaW5zbi4KCidSRUdfUkVUVkFMJwogICAgIFRoaXMgaW5zbiBjb3BpZXMgdGhlIHZhbHVlIG9mIGEgbXVsdGktaW5zbiBzZXF1ZW5jZSAoZm9yIGV4YW1wbGUsIGEKICAgICBsaWJyYXJ5IGNhbGwpLCBhbmQgT1AgaXMgdGhlIGZpcnN0IGluc24gb2YgdGhlIHNlcXVlbmNlIChmb3IgYQogICAgIGxpYnJhcnkgY2FsbCwgdGhlIGZpcnN0IGluc24gdGhhdCB3YXMgZ2VuZXJhdGVkIHRvIHNldCB1cCB0aGUKICAgICBhcmd1bWVudHMgZm9yIHRoZSBsaWJyYXJ5IGNhbGwpLgoKICAgICBMb29wIG9wdGltaXphdGlvbiB1c2VzIHRoaXMgbm90ZSB0byB0cmVhdCBzdWNoIGEgc2VxdWVuY2UgYXMgYQogICAgIHNpbmdsZSBvcGVyYXRpb24gZm9yIGNvZGUgbW90aW9uIHB1cnBvc2VzIGFuZCBmbG93IGFuYWx5c2lzIHVzZXMKICAgICB0aGlzIG5vdGUgdG8gZGVsZXRlIHN1Y2ggc2VxdWVuY2VzIHdob3NlIHJlc3VsdHMgYXJlIGRlYWQuCgogICAgIEEgJ1JFR19FUVVBTCcgbm90ZSB3aWxsIGFsc28gdXN1YWxseSBiZSBhdHRhY2hlZCB0byB0aGlzIGluc24gdG8KICAgICBwcm92aWRlIHRoZSBleHByZXNzaW9uIGJlaW5nIGNvbXB1dGVkIGJ5IHRoZSBzZXF1ZW5jZS4KCiAgICAgVGhlc2Ugbm90ZXMgd2lsbCBiZSBkZWxldGVkIGFmdGVyIHJlbG9hZCwgc2luY2UgdGhleSBhcmUgbm8gbG9uZ2VyCiAgICAgYWNjdXJhdGUgb3IgdXNlZnVsLgoKJ1JFR19MSUJDQUxMJwogICAgIFRoaXMgaXMgdGhlIGludmVyc2Ugb2YgJ1JFR19SRVRWQUwnOiBpdCBpcyBwbGFjZWQgb24gdGhlIGZpcnN0IGluc24KICAgICBvZiBhIG11bHRpLWluc24gc2VxdWVuY2UsIGFuZCBpdCBwb2ludHMgdG8gdGhlIGxhc3Qgb25lLgoKICAgICBUaGVzZSBub3RlcyBhcmUgZGVsZXRlZCBhZnRlciByZWxvYWQsIHNpbmNlIHRoZXkgYXJlIG5vIGxvbmdlcgogICAgIHVzZWZ1bCBvciBhY2N1cmF0ZS4KCidSRUdfQ0NfU0VUVEVSJwonUkVHX0NDX1VTRVInCiAgICAgT24gbWFjaGluZXMgdGhhdCB1c2UgJ2NjMCcsIHRoZSBpbnNucyB3aGljaCBzZXQgYW5kIHVzZSAnY2MwJyBzZXQKICAgICBhbmQgdXNlICdjYzAnIGFyZSBhZGphY2VudC4gIEhvd2V2ZXIsIHdoZW4gYnJhbmNoIGRlbGF5IHNsb3QKICAgICBmaWxsaW5nIGlzIGRvbmUsIHRoaXMgbWF5IG5vIGxvbmdlciBiZSB0cnVlLiAgSW4gdGhpcyBjYXNlIGEKICAgICAnUkVHX0NDX1VTRVInIG5vdGUgd2lsbCBiZSBwbGFjZWQgb24gdGhlIGluc24gc2V0dGluZyAnY2MwJyB0bwogICAgIHBvaW50IHRvIHRoZSBpbnNuIHVzaW5nICdjYzAnIGFuZCBhICdSRUdfQ0NfU0VUVEVSJyBub3RlIHdpbGwgYmUKICAgICBwbGFjZWQgb24gdGhlIGluc24gdXNpbmcgJ2NjMCcgdG8gcG9pbnQgdG8gdGhlIGluc24gc2V0dGluZyAnY2MwJy4KCiBUaGVzZSB2YWx1ZXMgYXJlIG9ubHkgdXNlZCBpbiB0aGUgJ0xPR19MSU5LUycgZmllbGQsIGFuZCBpbmRpY2F0ZSB0aGUKdHlwZSBvZiBkZXBlbmRlbmN5IHRoYXQgZWFjaCBsaW5rIHJlcHJlc2VudHMuICBMaW5rcyB3aGljaCBpbmRpY2F0ZSBhCmRhdGEgZGVwZW5kZW5jZSAoYSByZWFkIGFmdGVyIHdyaXRlIGRlcGVuZGVuY2UpIGRvIG5vdCB1c2UgYW55IGNvZGUsCnRoZXkgc2ltcGx5IGhhdmUgbW9kZSAnVk9JRG1vZGUnLCBhbmQgYXJlIHByaW50ZWQgd2l0aG91dCBhbnkKZGVzY3JpcHRpdmUgdGV4dC4KCidSRUdfREVQX1RSVUUnCiAgICAgVGhpcyBpbmRpY2F0ZXMgYSB0cnVlIGRlcGVuZGVuY2UgKGEgcmVhZCBhZnRlciB3cml0ZSBkZXBlbmRlbmNlKS4KCidSRUdfREVQX09VVFBVVCcKICAgICBUaGlzIGluZGljYXRlcyBhbiBvdXRwdXQgZGVwZW5kZW5jZSAoYSB3cml0ZSBhZnRlciB3cml0ZQogICAgIGRlcGVuZGVuY2UpLgoKJ1JFR19ERVBfQU5USScKICAgICBUaGlzIGluZGljYXRlcyBhbiBhbnRpIGRlcGVuZGVuY2UgKGEgd3JpdGUgYWZ0ZXIgcmVhZCBkZXBlbmRlbmNlKS4KCiBUaGVzZSBub3RlcyBkZXNjcmliZSBpbmZvcm1hdGlvbiBnYXRoZXJlZCBmcm9tIGdjb3YgcHJvZmlsZSBkYXRhLiAgVGhleQphcmUgc3RvcmVkIGluIHRoZSAnUkVHX05PVEVTJyBmaWVsZCBvZiBhbiBpbnNuIGFzIGFuICdleHByX2xpc3QnLgoKJ1JFR19CUl9QUk9CJwogICAgIFRoaXMgaXMgdXNlZCB0byBzcGVjaWZ5IHRoZSByYXRpbyBvZiBicmFuY2hlcyB0byBub24tYnJhbmNoZXMgb2YgYQogICAgIGJyYW5jaCBpbnNuIGFjY29yZGluZyB0byB0aGUgcHJvZmlsZSBkYXRhLiAgVGhlIHZhbHVlIGlzIHN0b3JlZCBhcwogICAgIGEgdmFsdWUgYmV0d2VlbiAwIGFuZCBSRUdfQlJfUFJPQl9CQVNFOyBsYXJnZXIgdmFsdWVzIGluZGljYXRlIGEKICAgICBoaWdoZXIgcHJvYmFiaWxpdHkgdGhhdCB0aGUgYnJhbmNoIHdpbGwgYmUgdGFrZW4uCgonUkVHX0JSX1BSRUQnCiAgICAgVGhlc2Ugbm90ZXMgYXJlIGZvdW5kIGluIEpVTVAgaW5zbnMgYWZ0ZXIgZGVsYXllZCBicmFuY2ggc2NoZWR1bGluZwogICAgIGhhcyB0YWtlbiBwbGFjZS4gIFRoZXkgaW5kaWNhdGUgYm90aCB0aGUgZGlyZWN0aW9uIGFuZCB0aGUKICAgICBsaWtlbGlob29kIG9mIHRoZSBKVU1QLiAgVGhlIGZvcm1hdCBpcyBhIGJpdG1hc2sgb2YgQVRUUl9GTEFHXyoKICAgICB2YWx1ZXMuCgonUkVHX0ZSQU1FX1JFTEFURURfRVhQUicKICAgICBUaGlzIGlzIHVzZWQgb24gYW4gUlRYX0ZSQU1FX1JFTEFURURfUCBpbnNuIHdoZXJlaW4gdGhlIGF0dGFjaGVkCiAgICAgZXhwcmVzc2lvbiBpcyB1c2VkIGluIHBsYWNlIG9mIHRoZSBhY3R1YWwgaW5zbiBwYXR0ZXJuLiAgVGhpcyBpcwogICAgIGRvbmUgaW4gY2FzZXMgd2hlcmUgdGhlIHBhdHRlcm4gaXMgZWl0aGVyIGNvbXBsZXggb3IgbWlzbGVhZGluZy4KCidSRUdfTElCQ0FMTF9JRCcKICAgICBUaGlzIGlzIHVzZWQgdG8gc3BlY2lmeSB0aGF0IGFuIGluc24gaXMgcGFydCBvZiBhIGxpYmNhbGwuICBFYWNoCiAgICAgbGliY2FsbCBpbiBhIGZ1bmN0aW9uIGhhcyBhIHVuaXF1ZSBpZCwgYW5kIGFsbCB0aGUgaW5zbnMgdGhhdCBhcmUKICAgICBwYXJ0IG9mIHRoYXQgbGliY2FsbCB3aWxsIGhhdmUgYSBSRUdfTElCQ0FMTF9JRCBub3RlIGF0dGFjaGVkIHdpdGgKICAgICB0aGUgc2FtZSBJRC4KCiBGb3IgY29udmVuaWVuY2UsIHRoZSBtYWNoaW5lIG1vZGUgaW4gYW4gJ2luc25fbGlzdCcgb3IgJ2V4cHJfbGlzdCcgaXMKcHJpbnRlZCB1c2luZyB0aGVzZSBzeW1ib2xpYyBjb2RlcyBpbiBkZWJ1Z2dpbmcgZHVtcHMuCgogVGhlIG9ubHkgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBleHByZXNzaW9uIGNvZGVzICdpbnNuX2xpc3QnIGFuZAonZXhwcl9saXN0JyBpcyB0aGF0IHRoZSBmaXJzdCBvcGVyYW5kIG9mIGFuICdpbnNuX2xpc3QnIGlzIGFzc3VtZWQgdG8gYmUKYW4gaW5zbiBhbmQgaXMgcHJpbnRlZCBpbiBkZWJ1Z2dpbmcgZHVtcHMgYXMgdGhlIGluc24ncyB1bmlxdWUgaWQ7IHRoZQpmaXJzdCBvcGVyYW5kIG9mIGFuICdleHByX2xpc3QnIGlzIHByaW50ZWQgaW4gdGhlIG9yZGluYXJ5IHdheSBhcyBhbgpleHByZXNzaW9uLgoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IENhbGxzLCAgTmV4dDogU2hhcmluZywgIFByZXY6IEluc25zLCAgVXA6IFJUTAoKMTIuMTkgUlRMIFJlcHJlc2VudGF0aW9uIG9mIEZ1bmN0aW9uLUNhbGwgSW5zbnMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCkluc25zIHRoYXQgY2FsbCBzdWJyb3V0aW5lcyBoYXZlIHRoZSBSVEwgZXhwcmVzc2lvbiBjb2RlICdjYWxsX2luc24nLgpUaGVzZSBpbnNucyBtdXN0IHNhdGlzZnkgc3BlY2lhbCBydWxlcywgYW5kIHRoZWlyIGJvZGllcyBtdXN0IHVzZSBhCnNwZWNpYWwgUlRMIGV4cHJlc3Npb24gY29kZSwgJ2NhbGwnLgoKIEEgJ2NhbGwnIGV4cHJlc3Npb24gaGFzIHR3byBvcGVyYW5kcywgYXMgZm9sbG93czoKCiAgICAgKGNhbGwgKG1lbTpGTSBBRERSKSBOQllURVMpCgpIZXJlIE5CWVRFUyBpcyBhbiBvcGVyYW5kIHRoYXQgcmVwcmVzZW50cyB0aGUgbnVtYmVyIG9mIGJ5dGVzIG9mCmFyZ3VtZW50IGRhdGEgYmVpbmcgcGFzc2VkIHRvIHRoZSBzdWJyb3V0aW5lLCBGTSBpcyBhIG1hY2hpbmUgbW9kZQood2hpY2ggbXVzdCBlcXVhbCBhcyB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgJ0ZVTkNUSU9OX01PREUnIG1hY3JvIGluIHRoZQptYWNoaW5lIGRlc2NyaXB0aW9uKSBhbmQgQUREUiByZXByZXNlbnRzIHRoZSBhZGRyZXNzIG9mIHRoZSBzdWJyb3V0aW5lLgoKIEZvciBhIHN1YnJvdXRpbmUgdGhhdCByZXR1cm5zIG5vIHZhbHVlLCB0aGUgJ2NhbGwnIGV4cHJlc3Npb24gYXMgc2hvd24KYWJvdmUgaXMgdGhlIGVudGlyZSBib2R5IG9mIHRoZSBpbnNuLCBleGNlcHQgdGhhdCB0aGUgaW5zbiBtaWdodCBhbHNvCmNvbnRhaW4gJ3VzZScgb3IgJ2Nsb2JiZXInIGV4cHJlc3Npb25zLgoKIEZvciBhIHN1YnJvdXRpbmUgdGhhdCByZXR1cm5zIGEgdmFsdWUgd2hvc2UgbW9kZSBpcyBub3QgJ0JMS21vZGUnLCB0aGUKdmFsdWUgaXMgcmV0dXJuZWQgaW4gYSBoYXJkIHJlZ2lzdGVyLiAgSWYgdGhpcyByZWdpc3RlcidzIG51bWJlciBpcyBSLAp0aGVuIHRoZSBib2R5IG9mIHRoZSBjYWxsIGluc24gbG9va3MgbGlrZSB0aGlzOgoKICAgICAoc2V0IChyZWc6TSBSKQogICAgICAgICAgKGNhbGwgKG1lbTpGTSBBRERSKSBOQllURVMpKQoKVGhpcyBSVEwgZXhwcmVzc2lvbiBtYWtlcyBpdCBjbGVhciAodG8gdGhlIG9wdGltaXplciBwYXNzZXMpIHRoYXQgdGhlCmFwcHJvcHJpYXRlIHJlZ2lzdGVyIHJlY2VpdmVzIGEgdXNlZnVsIHZhbHVlIGluIHRoaXMgaW5zbi4KCiBXaGVuIGEgc3Vicm91dGluZSByZXR1cm5zIGEgJ0JMS21vZGUnIHZhbHVlLCBpdCBpcyBoYW5kbGVkIGJ5IHBhc3NpbmcKdG8gdGhlIHN1YnJvdXRpbmUgdGhlIGFkZHJlc3Mgb2YgYSBwbGFjZSB0byBzdG9yZSB0aGUgdmFsdWUuICBTbyB0aGUKY2FsbCBpbnNuIGl0c2VsZiBkb2VzIG5vdCAicmV0dXJuIiBhbnkgdmFsdWUsIGFuZCBpdCBoYXMgdGhlIHNhbWUgUlRMCmZvcm0gYXMgYSBjYWxsIHRoYXQgcmV0dXJucyBub3RoaW5nLgoKIE9uIHNvbWUgbWFjaGluZXMsIHRoZSBjYWxsIGluc3RydWN0aW9uIGl0c2VsZiBjbG9iYmVycyBzb21lIHJlZ2lzdGVyLApmb3IgZXhhbXBsZSB0byBjb250YWluIHRoZSByZXR1cm4gYWRkcmVzcy4gICdjYWxsX2luc24nIGluc25zIG9uIHRoZXNlCm1hY2hpbmVzIHNob3VsZCBoYXZlIGEgYm9keSB3aGljaCBpcyBhICdwYXJhbGxlbCcgdGhhdCBjb250YWlucyBib3RoIHRoZQonY2FsbCcgZXhwcmVzc2lvbiBhbmQgJ2Nsb2JiZXInIGV4cHJlc3Npb25zIHRoYXQgaW5kaWNhdGUgd2hpY2gKcmVnaXN0ZXJzIGFyZSBkZXN0cm95ZWQuICBTaW1pbGFybHksIGlmIHRoZSBjYWxsIGluc3RydWN0aW9uIHJlcXVpcmVzCnNvbWUgcmVnaXN0ZXIgb3RoZXIgdGhhbiB0aGUgc3RhY2sgcG9pbnRlciB0aGF0IGlzIG5vdCBleHBsaWNpdGx5Cm1lbnRpb25lZCBpbiBpdHMgUlRMLCBhICd1c2UnIHN1YmV4cHJlc3Npb24gc2hvdWxkIG1lbnRpb24gdGhhdApyZWdpc3Rlci4KCiBGdW5jdGlvbnMgdGhhdCBhcmUgY2FsbGVkIGFyZSBhc3N1bWVkIHRvIG1vZGlmeSBhbGwgcmVnaXN0ZXJzIGxpc3RlZCBpbgp0aGUgY29uZmlndXJhdGlvbiBtYWNybyAnQ0FMTF9VU0VEX1JFR0lTVEVSUycgKCpub3RlIFJlZ2lzdGVyIEJhc2ljczo6KQphbmQsIHdpdGggdGhlIGV4Y2VwdGlvbiBvZiAnY29uc3QnIGZ1bmN0aW9ucyBhbmQgbGlicmFyeSBjYWxscywgdG8KbW9kaWZ5IGFsbCBvZiBtZW1vcnkuCgogSW5zbnMgY29udGFpbmluZyBqdXN0ICd1c2UnIGV4cHJlc3Npb25zIGRpcmVjdGx5IHByZWNlZGUgdGhlCidjYWxsX2luc24nIGluc24gdG8gaW5kaWNhdGUgd2hpY2ggcmVnaXN0ZXJzIGNvbnRhaW4gaW5wdXRzIHRvIHRoZQpmdW5jdGlvbi4gIFNpbWlsYXJseSwgaWYgcmVnaXN0ZXJzIG90aGVyIHRoYW4gdGhvc2UgaW4KJ0NBTExfVVNFRF9SRUdJU1RFUlMnIGFyZSBjbG9iYmVyZWQgYnkgdGhlIGNhbGxlZCBmdW5jdGlvbiwgaW5zbnMKY29udGFpbmluZyBhIHNpbmdsZSAnY2xvYmJlcicgZm9sbG93IGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBjYWxsIHRvCmluZGljYXRlIHdoaWNoIHJlZ2lzdGVycy4KCh8KRmlsZTogZ2NjaW50LmluZm8sICBOb2RlOiBTaGFyaW5nLCAgTmV4dDogUmVhZGluZyBSVEwsICBQcmV2OiBDYWxscywgIFVwOiBSVEwKCjEyLjIwIFN0cnVjdHVyZSBTaGFyaW5nIEFzc3VtcHRpb25zCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpUaGUgY29tcGlsZXIgYXNzdW1lcyB0aGF0IGNlcnRhaW4ga2luZHMgb2YgUlRMIGV4cHJlc3Npb25zIGFyZSB1bmlxdWU7CnRoZXJlIGRvIG5vdCBleGlzdCB0d28gZGlzdGluY3Qgb2JqZWN0cyByZXByZXNlbnRpbmcgdGhlIHNhbWUgdmFsdWUuICBJbgpvdGhlciBjYXNlcywgaXQgbWFrZXMgYW4gb3Bwb3NpdGUgYXNzdW1wdGlvbjogdGhhdCBubyBSVEwgZXhwcmVzc2lvbgpvYmplY3Qgb2YgYSBjZXJ0YWluIGtpbmQgYXBwZWFycyBpbiBtb3JlIHRoYW4gb25lIHBsYWNlIGluIHRoZQpjb250YWluaW5nIHN0cnVjdHVyZS4KCiBUaGVzZSBhc3N1bXB0aW9ucyByZWZlciB0byBhIHNpbmdsZSBmdW5jdGlvbjsgZXhjZXB0IGZvciB0aGUgUlRMCm9iamVjdHMgdGhhdCBkZXNjcmliZSBnbG9iYWwgdmFyaWFibGVzIGFuZCBleHRlcm5hbCBmdW5jdGlvbnMsIGFuZCBhIGZldwpzdGFuZGFyZCBvYmplY3RzIHN1Y2ggYXMgc21hbGwgaW50ZWdlciBjb25zdGFudHMsIG5vIFJUTCBvYmplY3RzIGFyZQpjb21tb24gdG8gdHdvIGZ1bmN0aW9ucy4KCiAgICogRWFjaCBwc2V1ZG8tcmVnaXN0ZXIgaGFzIG9ubHkgYSBzaW5nbGUgJ3JlZycgb2JqZWN0IHRvIHJlcHJlc2VudAogICAgIGl0LCBhbmQgdGhlcmVmb3JlIG9ubHkgYSBzaW5nbGUgbWFjaGluZSBtb2RlLgoKICAgKiBGb3IgYW55IHN5bWJvbGljIGxhYmVsLCB0aGVyZSBpcyBvbmx5IG9uZSAnc3ltYm9sX3JlZicgb2JqZWN0CiAgICAgcmVmZXJyaW5nIHRvIGl0LgoKICAgKiBBbGwgJ2NvbnN0X2ludCcgZXhwcmVzc2lvbnMgd2l0aCBlcXVhbCB2YWx1ZXMgYXJlIHNoYXJlZC4KCiAgICogVGhlcmUgaXMgb25seSBvbmUgJ3BjJyBleHByZXNzaW9uLgoKICAgKiBUaGVyZSBpcyBvbmx5IG9uZSAnY2MwJyBleHByZXNzaW9uLgoKICAgKiBUaGVyZSBpcyBvbmx5IG9uZSAnY29uc3RfZG91YmxlJyBleHByZXNzaW9uIHdpdGggdmFsdWUgMCBmb3IgZWFjaAogICAgIGZsb2F0aW5nIHBvaW50IG1vZGUuICBMaWtld2lzZSBmb3IgdmFsdWVzIDEgYW5kIDIuCgogICAqIFRoZXJlIGlzIG9ubHkgb25lICdjb25zdF92ZWN0b3InIGV4cHJlc3Npb24gd2l0aCB2YWx1ZSAwIGZvciBlYWNoCiAgICAgdmVjdG9yIG1vZGUsIGJlIGl0IGFuIGludGVnZXIgb3IgYSBkb3VibGUgY29uc3RhbnQgdmVjdG9yLgoKICAgKiBObyAnbGFiZWxfcmVmJyBvciAnc2NyYXRjaCcgYXBwZWFycyBpbiBtb3JlIHRoYW4gb25lIHBsYWNlIGluIHRoZQogICAgIFJUTCBzdHJ1Y3R1cmU7IGluIG90aGVyIHdvcmRzLCBpdCBpcyBzYWZlIHRvIGRvIGEgdHJlZS13YWxrIG9mIGFsbAogICAgIHRoZSBpbnNucyBpbiB0aGUgZnVuY3Rpb24gYW5kIGFzc3VtZSB0aGF0IGVhY2ggdGltZSBhICdsYWJlbF9yZWYnCiAgICAgb3IgJ3NjcmF0Y2gnIGlzIHNlZW4gaXQgaXMgZGlzdGluY3QgZnJvbSBhbGwgb3RoZXJzIHRoYXQgYXJlIHNlZW4uCgogICAqIE9ubHkgb25lICdtZW0nIG9iamVjdCBpcyBub3JtYWxseSBjcmVhdGVkIGZvciBlYWNoIHN0YXRpYyB2YXJpYWJsZQogICAgIG9yIHN0YWNrIHNsb3QsIHNvIHRoZXNlIG9iamVjdHMgYXJlIGZyZXF1ZW50bHkgc2hhcmVkIGluIGFsbCB0aGUKICAgICBwbGFjZXMgdGhleSBhcHBlYXIuICBIb3dldmVyLCBzZXBhcmF0ZSBidXQgZXF1YWwgb2JqZWN0cyBmb3IgdGhlc2UKICAgICB2YXJpYWJsZXMgYXJlIG9jY2FzaW9uYWxseSBtYWRlLgoKICAgKiBXaGVuIGEgc2luZ2xlICdhc20nIHN0YXRlbWVudCBoYXMgbXVsdGlwbGUgb3V0cHV0IG9wZXJhbmRzLCBhCiAgICAgZGlzdGluY3QgJ2FzbV9vcGVyYW5kcycgZXhwcmVzc2lvbiBpcyBtYWRlIGZvciBlYWNoIG91dHB1dCBvcGVyYW5kLgogICAgIEhvd2V2ZXIsIHRoZXNlIGFsbCBzaGFyZSB0aGUgdmVjdG9yIHdoaWNoIGNvbnRhaW5zIHRoZSBzZXF1ZW5jZSBvZgogICAgIGlucHV0IG9wZXJhbmRzLiAgVGhpcyBzaGFyaW5nIGlzIHVzZWQgbGF0ZXIgb24gdG8gdGVzdCB3aGV0aGVyIHR3bwogICAgICdhc21fb3BlcmFuZHMnIGV4cHJlc3Npb25zIGNvbWUgZnJvbSB0aGUgc2FtZSBzdGF0ZW1lbnQsIHNvIGFsbAogICAgIG9wdGltaXphdGlvbnMgbXVzdCBjYXJlZnVsbHkgcHJlc2VydmUgdGhlIHNoYXJpbmcgaWYgdGhleSBjb3B5IHRoZQogICAgIHZlY3RvciBhdCBhbGwuCgogICAqIE5vIFJUTCBvYmplY3QgYXBwZWFycyBpbiBtb3JlIHRoYW4gb25lIHBsYWNlIGluIHRoZSBSVEwgc3RydWN0dXJlCiAgICAgZXhjZXB0IGFzIGRlc2NyaWJlZCBhYm92ZS4gIE1hbnkgcGFzc2VzIG9mIHRoZSBjb21waWxlciByZWx5IG9uCiAgICAgdGhpcyBieSBhc3N1bWluZyB0aGF0IHRoZXkgY2FuIG1vZGlmeSBSVEwgb2JqZWN0cyBpbiBwbGFjZSB3aXRob3V0CiAgICAgdW53YW50ZWQgc2lkZS1lZmZlY3RzIG9uIG90aGVyIGluc25zLgoKICAgKiBEdXJpbmcgaW5pdGlhbCBSVEwgZ2VuZXJhdGlvbiwgc2hhcmVkIHN0cnVjdHVyZSBpcyBmcmVlbHkKICAgICBpbnRyb2R1Y2VkLiAgQWZ0ZXIgYWxsIHRoZSBSVEwgZm9yIGEgZnVuY3Rpb24gaGFzIGJlZW4gZ2VuZXJhdGVkLAogICAgIGFsbCBzaGFyZWQgc3RydWN0dXJlIGlzIGNvcGllZCBieSAndW5zaGFyZV9hbGxfcnRsJyBpbgogICAgICdlbWl0LXJ0bC5jJywgYWZ0ZXIgd2hpY2ggdGhlIGFib3ZlIHJ1bGVzIGFyZSBndWFyYW50ZWVkIHRvIGJlCiAgICAgZm9sbG93ZWQuCgogICAqIER1cmluZyB0aGUgY29tYmluZXIgcGFzcywgc2hhcmVkIHN0cnVjdHVyZSB3aXRoaW4gYW4gaW5zbiBjYW4gZXhpc3QKICAgICB0ZW1wb3JhcmlseS4gIEhvd2V2ZXIsIHRoZSBzaGFyZWQgc3RydWN0dXJlIGlzIGNvcGllZCBiZWZvcmUgdGhlCiAgICAgY29tYmluZXIgaXMgZmluaXNoZWQgd2l0aCB0aGUgaW5zbi4gIFRoaXMgaXMgZG9uZSBieSBjYWxsaW5nCiAgICAgJ2NvcHlfcnR4X2lmX3NoYXJlZCcsIHdoaWNoIGlzIGEgc3Vicm91dGluZSBvZiAndW5zaGFyZV9hbGxfcnRsJy4KCh8KRmlsZTogZ2NjaW50LmluZm8sICBOb2RlOiBSZWFkaW5nIFJUTCwgIFByZXY6IFNoYXJpbmcsICBVcDogUlRMCgoxMi4yMSBSZWFkaW5nIFJUTAo9PT09PT09PT09PT09PT09PQoKVG8gcmVhZCBhbiBSVEwgb2JqZWN0IGZyb20gYSBmaWxlLCBjYWxsICdyZWFkX3J0eCcuICBJdCB0YWtlcyBvbmUKYXJndW1lbnQsIGEgc3RkaW8gc3RyZWFtLCBhbmQgcmV0dXJucyBhIHNpbmdsZSBSVEwgb2JqZWN0LiAgVGhpcyByb3V0aW5lCmlzIGRlZmluZWQgaW4gJ3JlYWQtcnRsLmMnLiAgSXQgaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgY29tcGlsZXIgaXRzZWxmLApvbmx5IHRoZSB2YXJpb3VzIHByb2dyYW1zIHRoYXQgZ2VuZXJhdGUgdGhlIGNvbXBpbGVyIGJhY2sgZW5kIGZyb20gdGhlCm1hY2hpbmUgZGVzY3JpcHRpb24uCgogUGVvcGxlIGZyZXF1ZW50bHkgaGF2ZSB0aGUgaWRlYSBvZiB1c2luZyBSVEwgc3RvcmVkIGFzIHRleHQgaW4gYSBmaWxlCmFzIGFuIGludGVyZmFjZSBiZXR3ZWVuIGEgbGFuZ3VhZ2UgZnJvbnQgZW5kIGFuZCB0aGUgYnVsayBvZiBHQ0MuICBUaGlzCmlkZWEgaXMgbm90IGZlYXNpYmxlLgoKIEdDQyB3YXMgZGVzaWduZWQgdG8gdXNlIFJUTCBpbnRlcm5hbGx5IG9ubHkuICBDb3JyZWN0IFJUTCBmb3IgYSBnaXZlbgpwcm9ncmFtIGlzIHZlcnkgZGVwZW5kZW50IG9uIHRoZSBwYXJ0aWN1bGFyIHRhcmdldCBtYWNoaW5lLiAgQW5kIHRoZSBSVEwKZG9lcyBub3QgY29udGFpbiBhbGwgdGhlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwcm9ncmFtLgoKIFRoZSBwcm9wZXIgd2F5IHRvIGludGVyZmFjZSBHQ0MgdG8gYSBuZXcgbGFuZ3VhZ2UgZnJvbnQgZW5kIGlzIHdpdGggdGhlCiJ0cmVlIiBkYXRhIHN0cnVjdHVyZSwgZGVzY3JpYmVkIGluIHRoZSBmaWxlcyAndHJlZS5oJyBhbmQgJ3RyZWUuZGVmJy4KVGhlIGRvY3VtZW50YXRpb24gZm9yIHRoaXMgc3RydWN0dXJlICgqbm90ZSBUcmVlczo6KSBpcyBpbmNvbXBsZXRlLgoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IENvbnRyb2wgRmxvdywgIE5leHQ6IE1hY2hpbmUgRGVzYywgIFByZXY6IFJUTCwgIFVwOiBUb3AKCjEzIENvbnRyb2wgRmxvdyBHcmFwaAoqKioqKioqKioqKioqKioqKioqKioKCkEgY29udHJvbCBmbG93IGdyYXBoIChDRkcpIGlzIGEgZGF0YSBzdHJ1Y3R1cmUgYnVpbHQgb24gdG9wIG9mIHRoZQppbnRlcm1lZGlhdGUgY29kZSByZXByZXNlbnRhdGlvbiAodGhlIFJUTCBvciAndHJlZScgaW5zdHJ1Y3Rpb24gc3RyZWFtKQphYnN0cmFjdGluZyB0aGUgY29udHJvbCBmbG93IGJlaGF2aW9yIG9mIGEgZnVuY3Rpb24gdGhhdCBpcyBiZWluZwpjb21waWxlZC4gIFRoZSBDRkcgaXMgYSBkaXJlY3RlZCBncmFwaCB3aGVyZSB0aGUgdmVydGljZXMgcmVwcmVzZW50CmJhc2ljIGJsb2NrcyBhbmQgZWRnZXMgcmVwcmVzZW50IHBvc3NpYmxlIHRyYW5zZmVyIG9mIGNvbnRyb2wgZmxvdyBmcm9tCm9uZSBiYXNpYyBibG9jayB0byBhbm90aGVyLiAgVGhlIGRhdGEgc3RydWN0dXJlcyB1c2VkIHRvIHJlcHJlc2VudCB0aGUKY29udHJvbCBmbG93IGdyYXBoIGFyZSBkZWZpbmVkIGluICdiYXNpYy1ibG9jay5oJy4KCiogTWVudToKCiogQmFzaWMgQmxvY2tzOjogICAgICAgICAgIFRoZSBkZWZpbml0aW9uIGFuZCByZXByZXNlbnRhdGlvbiBvZiBiYXNpYyBibG9ja3MuCiogRWRnZXM6OiAgICAgICAgICAgICAgICAgIFR5cGVzIG9mIGVkZ2VzIGFuZCB0aGVpciByZXByZXNlbnRhdGlvbi4KKiBQcm9maWxlIGluZm9ybWF0aW9uOjogICAgUmVwcmVzZW50YXRpb24gb2YgZnJlcXVlbmNpZXMgYW5kIHByb2JhYmlsaXRpZXMuCiogTWFpbnRhaW5pbmcgdGhlIENGRzo6ICAgIEtlZXBpbmcgdGhlIGNvbnRyb2wgZmxvdyBncmFwaCBhbmQgdXAgdG8gZGF0ZS4KKiBMaXZlbmVzcyBpbmZvcm1hdGlvbjo6ICAgVXNpbmcgYW5kIG1haW50YWluaW5nIGxpdmVuZXNzIGluZm9ybWF0aW9uLgoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IEJhc2ljIEJsb2NrcywgIE5leHQ6IEVkZ2VzLCAgVXA6IENvbnRyb2wgRmxvdwoKMTMuMSBCYXNpYyBCbG9ja3MKPT09PT09PT09PT09PT09PT0KCkEgYmFzaWMgYmxvY2sgaXMgYSBzdHJhaWdodC1saW5lIHNlcXVlbmNlIG9mIGNvZGUgd2l0aCBvbmx5IG9uZSBlbnRyeQpwb2ludCBhbmQgb25seSBvbmUgZXhpdC4gIEluIEdDQywgYmFzaWMgYmxvY2tzIGFyZSByZXByZXNlbnRlZCB1c2luZyB0aGUKJ2Jhc2ljX2Jsb2NrJyBkYXRhIHR5cGUuCgogVHdvIHBvaW50ZXIgbWVtYmVycyBvZiB0aGUgJ2Jhc2ljX2Jsb2NrJyBzdHJ1Y3R1cmUgYXJlIHRoZSBwb2ludGVycwonbmV4dF9iYicgYW5kICdwcmV2X2JiJy4gIFRoZXNlIGFyZSB1c2VkIHRvIGtlZXAgZG91Ymx5IGxpbmtlZCBjaGFpbiBvZgpiYXNpYyBibG9ja3MgaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhlIHVuZGVybHlpbmcgaW5zdHJ1Y3Rpb24gc3RyZWFtLgpUaGUgY2hhaW4gb2YgYmFzaWMgYmxvY2tzIGlzIHVwZGF0ZWQgdHJhbnNwYXJlbnRseSBieSB0aGUgcHJvdmlkZWQgQVBJCmZvciBtYW5pcHVsYXRpbmcgdGhlIENGRy4gIFRoZSBtYWNybyAnRk9SX0VBQ0hfQkInIGNhbiBiZSB1c2VkIHRvIHZpc2l0CmFsbCB0aGUgYmFzaWMgYmxvY2tzIGluIGxleGljb2dyYXBoaWNhbCBvcmRlci4gIERvbWluYXRvciB0cmF2ZXJzYWxzIGFyZQphbHNvIHBvc3NpYmxlIHVzaW5nICd3YWxrX2RvbWluYXRvcl90cmVlJy4gIEdpdmVuIHR3byBiYXNpYyBibG9ja3MgQSBhbmQKQiwgYmxvY2sgQSBkb21pbmF0ZXMgYmxvY2sgQiBpZiBBIGlzIF9hbHdheXNfIGV4ZWN1dGVkIGJlZm9yZSBCLgoKIFRoZSAnQkFTSUNfQkxPQ0snIGFycmF5IGNvbnRhaW5zIGFsbCBiYXNpYyBibG9ja3MgaW4gYW4gdW5zcGVjaWZpZWQKb3JkZXIuICBFYWNoICdiYXNpY19ibG9jaycgc3RydWN0dXJlIGhhcyBhIGZpZWxkIHRoYXQgaG9sZHMgYSB1bmlxdWUKaW50ZWdlciBpZGVudGlmaWVyICdpbmRleCcgdGhhdCBpcyB0aGUgaW5kZXggb2YgdGhlIGJsb2NrIGluIHRoZQonQkFTSUNfQkxPQ0snIGFycmF5LiAgVGhlIHRvdGFsIG51bWJlciBvZiBiYXNpYyBibG9ja3MgaW4gdGhlIGZ1bmN0aW9uCmlzICduX2Jhc2ljX2Jsb2NrcycuICBCb3RoIHRoZSBiYXNpYyBibG9jayBpbmRpY2VzIGFuZCB0aGUgdG90YWwgbnVtYmVyCm9mIGJhc2ljIGJsb2NrcyBtYXkgdmFyeSBkdXJpbmcgdGhlIGNvbXBpbGF0aW9uIHByb2Nlc3MsIGFzIHBhc3NlcwpyZW9yZGVyLCBjcmVhdGUsIGR1cGxpY2F0ZSwgYW5kIGRlc3Ryb3kgYmFzaWMgYmxvY2tzLiAgVGhlIGluZGV4IGZvciBhbnkKYmxvY2sgc2hvdWxkIG5ldmVyIGJlIGdyZWF0ZXIgdGhhbiAnbGFzdF9iYXNpY19ibG9jaycuCgogU3BlY2lhbCBiYXNpYyBibG9ja3MgcmVwcmVzZW50IHBvc3NpYmxlIGVudHJ5IGFuZCBleGl0IHBvaW50cyBvZiBhCmZ1bmN0aW9uLiAgVGhlc2UgYmxvY2tzIGFyZSBjYWxsZWQgJ0VOVFJZX0JMT0NLX1BUUicgYW5kCidFWElUX0JMT0NLX1BUUicuICBUaGVzZSBibG9ja3MgZG8gbm90IGNvbnRhaW4gYW55IGNvZGUsIGFuZCBhcmUgbm90CmVsZW1lbnRzIG9mIHRoZSAnQkFTSUNfQkxPQ0snIGFycmF5LiAgVGhlcmVmb3JlIHRoZXkgaGF2ZSBiZWVuIGFzc2lnbmVkCnVuaXF1ZSwgbmVnYXRpdmUgaW5kZXggbnVtYmVycy4KCiBFYWNoICdiYXNpY19ibG9jaycgYWxzbyBjb250YWlucyBwb2ludGVycyB0byB0aGUgZmlyc3QgaW5zdHJ1Y3Rpb24gKHRoZQoiaGVhZCIpIGFuZCB0aGUgbGFzdCBpbnN0cnVjdGlvbiAodGhlICJ0YWlsIikgb3IgImVuZCIgb2YgdGhlCmluc3RydWN0aW9uIHN0cmVhbSBjb250YWluZWQgaW4gYSBiYXNpYyBibG9jay4gIEluIGZhY3QsIHNpbmNlIHRoZQonYmFzaWNfYmxvY2snIGRhdGEgdHlwZSBpcyB1c2VkIHRvIHJlcHJlc2VudCBibG9ja3MgaW4gYm90aCBtYWpvcgppbnRlcm1lZGlhdGUgcmVwcmVzZW50YXRpb25zIG9mIEdDQyAoJ3RyZWUnIGFuZCBSVEwpLCB0aGVyZSBhcmUgcG9pbnRlcnMKdG8gdGhlIGhlYWQgYW5kIGVuZCBvZiBhIGJhc2ljIGJsb2NrIGZvciBib3RoIHJlcHJlc2VudGF0aW9ucy4KCiBGb3IgUlRMLCB0aGVzZSBwb2ludGVycyBhcmUgJ3J0eCBoZWFkLCBlbmQnLiAgSW4gdGhlIFJUTCBmdW5jdGlvbgpyZXByZXNlbnRhdGlvbiwgdGhlIGhlYWQgcG9pbnRlciBhbHdheXMgcG9pbnRzIGVpdGhlciB0byBhCidOT1RFX0lOU05fQkFTSUNfQkxPQ0snIG9yIHRvIGEgJ0NPREVfTEFCRUwnLCBpZiBwcmVzZW50LiAgSW4gdGhlIFJUTApyZXByZXNlbnRhdGlvbiBvZiBhIGZ1bmN0aW9uLCB0aGUgaW5zdHJ1Y3Rpb24gc3RyZWFtIGNvbnRhaW5zIG5vdCBvbmx5CnRoZSAicmVhbCIgaW5zdHJ1Y3Rpb25zLCBidXQgYWxzbyAibm90ZXMiLiAgQW55IGZ1bmN0aW9uIHRoYXQgbW92ZXMgb3IKZHVwbGljYXRlcyB0aGUgYmFzaWMgYmxvY2tzIG5lZWRzIHRvIHRha2UgY2FyZSBvZiB1cGRhdGluZyBvZiB0aGVzZQpub3Rlcy4gIE1hbnkgb2YgdGhlc2Ugbm90ZXMgZXhwZWN0IHRoYXQgdGhlIGluc3RydWN0aW9uIHN0cmVhbSBjb25zaXN0cwpvZiBsaW5lYXIgcmVnaW9ucywgbWFraW5nIHN1Y2ggdXBkYXRlcyBkaWZmaWN1bHQuICBUaGUKJ05PVEVfSU5TTl9CQVNJQ19CTE9DSycgbm90ZSBpcyB0aGUgb25seSBraW5kIG9mIG5vdGUgdGhhdCBtYXkgYXBwZWFyIGluCnRoZSBpbnN0cnVjdGlvbiBzdHJlYW0gY29udGFpbmVkIGluIGEgYmFzaWMgYmxvY2suICBUaGUgaW5zdHJ1Y3Rpb24Kc3RyZWFtIG9mIGEgYmFzaWMgYmxvY2sgYWx3YXlzIGZvbGxvd3MgYSAnTk9URV9JTlNOX0JBU0lDX0JMT0NLJywgYnV0Cnplcm8gb3IgbW9yZSAnQ09ERV9MQUJFTCcgbm9kZXMgY2FuIHByZWNlZGUgdGhlIGJsb2NrIG5vdGUuICBBIGJhc2ljCmJsb2NrIGVuZHMgYnkgY29udHJvbCBmbG93IGluc3RydWN0aW9uIG9yIGxhc3QgaW5zdHJ1Y3Rpb24gYmVmb3JlCmZvbGxvd2luZyAnQ09ERV9MQUJFTCcgb3IgJ05PVEVfSU5TTl9CQVNJQ19CTE9DSycuICBBICdDT0RFX0xBQkVMJwpjYW5ub3QgYXBwZWFyIGluIHRoZSBpbnN0cnVjdGlvbiBzdHJlYW0gb2YgYSBiYXNpYyBibG9jay4KCiBJbiBhZGRpdGlvbiB0byBub3RlcywgdGhlIGp1bXAgdGFibGUgdmVjdG9ycyBhcmUgYWxzbyByZXByZXNlbnRlZCBhcwoicHNldWRvLWluc3RydWN0aW9ucyIgaW5zaWRlIHRoZSBpbnNuIHN0cmVhbS4gIFRoZXNlIHZlY3RvcnMgbmV2ZXIKYXBwZWFyIGluIHRoZSBiYXNpYyBibG9jayBhbmQgc2hvdWxkIGFsd2F5cyBiZSBwbGFjZWQganVzdCBhZnRlciB0aGUKdGFibGUganVtcCBpbnN0cnVjdGlvbnMgcmVmZXJlbmNpbmcgdGhlbS4gIEFmdGVyIHJlbW92aW5nIHRoZSB0YWJsZS1qdW1wCml0IGlzIG9mdGVuIGRpZmZpY3VsdCB0byBlbGltaW5hdGUgdGhlIGNvZGUgY29tcHV0aW5nIHRoZSBhZGRyZXNzIGFuZApyZWZlcmVuY2luZyB0aGUgdmVjdG9yLCBzbyBjbGVhbmluZyB1cCB0aGVzZSB2ZWN0b3JzIGlzIHBvc3Rwb25lZCB1bnRpbAphZnRlciBsaXZlbmVzcyBhbmFseXNpcy4gIFRodXMgdGhlIGp1bXAgdGFibGUgdmVjdG9ycyBtYXkgYXBwZWFyIGluIHRoZQppbnNuIHN0cmVhbSB1bnJlZmVyZW5jZWQgYW5kIHdpdGhvdXQgYW55IHB1cnBvc2UuICBCZWZvcmUgYW55IGVkZ2UgaXMKbWFkZSAiZmFsbC10aHJ1IiwgdGhlIGV4aXN0ZW5jZSBvZiBzdWNoIGNvbnN0cnVjdCBpbiB0aGUgd2F5IG5lZWRzIHRvIGJlCmNoZWNrZWQgYnkgY2FsbGluZyAnY2FuX2ZhbGx0aHJ1JyBmdW5jdGlvbi4KCiBGb3IgdGhlICd0cmVlJyByZXByZXNlbnRhdGlvbiwgdGhlIGhlYWQgYW5kIGVuZCBvZiB0aGUgYmFzaWMgYmxvY2sgYXJlCmJlaW5nIHBvaW50ZWQgdG8gYnkgdGhlICdzdG10X2xpc3QnIGZpZWxkLCBidXQgdGhpcyBzcGVjaWFsICd0cmVlJwpzaG91bGQgbmV2ZXIgYmUgcmVmZXJlbmNlZCBkaXJlY3RseS4gIEluc3RlYWQsIGF0IHRoZSB0cmVlIGxldmVsCmFic3RyYWN0IGNvbnRhaW5lcnMgYW5kIGl0ZXJhdG9ycyBhcmUgdXNlZCB0byBhY2Nlc3Mgc3RhdGVtZW50cyBhbmQKZXhwcmVzc2lvbnMgaW4gYmFzaWMgYmxvY2tzLiAgVGhlc2UgaXRlcmF0b3JzIGFyZSBjYWxsZWQgImJsb2NrCnN0YXRlbWVudCBpdGVyYXRvcnMiIChCU0lzKS4gIEdyZXAgZm9yICdeYnNpJyBpbiB0aGUgdmFyaW91cyAndHJlZS0qJwpmaWxlcy4gIFRoZSBmb2xsb3dpbmcgc25pcHBldCB3aWxsIHByZXR0eS1wcmludCBhbGwgdGhlIHN0YXRlbWVudHMgb2YKdGhlIHByb2dyYW0gaW4gdGhlIEdJTVBMRSByZXByZXNlbnRhdGlvbi4KCiAgICAgRk9SX0VBQ0hfQkIgKGJiKQogICAgICAgewogICAgICAgICAgYmxvY2tfc3RtdF9pdGVyYXRvciBzaTsKCiAgICAgICAgICBmb3IgKHNpID0gYnNpX3N0YXJ0IChiYik7ICFic2lfZW5kX3AgKHNpKTsgYnNpX25leHQgKCZzaSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgdHJlZSBzdG10ID0gYnNpX3N0bXQgKHNpKTsKICAgICAgICAgICAgICAgcHJpbnRfZ2VuZXJpY19zdG10IChzdGRlcnIsIHN0bXQsIDApOwogICAgICAgICAgICB9CiAgICAgICB9CgofCkZpbGU6IGdjY2ludC5pbmZvLCAgTm9kZTogRWRnZXMsICBOZXh0OiBQcm9maWxlIGluZm9ybWF0aW9uLCAgUHJldjogQmFzaWMgQmxvY2tzLCAgVXA6IENvbnRyb2wgRmxvdwoKMTMuMiBFZGdlcwo9PT09PT09PT09CgpFZGdlcyByZXByZXNlbnQgcG9zc2libGUgY29udHJvbCBmbG93IHRyYW5zZmVycyBmcm9tIHRoZSBlbmQgb2Ygc29tZQpiYXNpYyBibG9jayBBIHRvIHRoZSBoZWFkIG9mIGFub3RoZXIgYmFzaWMgYmxvY2sgQi4gIFdlIHNheSB0aGF0IEEgaXMgYQpwcmVkZWNlc3NvciBvZiBCLCBhbmQgQiBpcyBhIHN1Y2Nlc3NvciBvZiBBLiAgRWRnZXMgYXJlIHJlcHJlc2VudGVkIGluCkdDQyB3aXRoIHRoZSAnZWRnZScgZGF0YSB0eXBlLiAgRWFjaCAnZWRnZScgYWN0cyBhcyBhIGxpbmsgYmV0d2VlbiB0d28KYmFzaWMgYmxvY2tzOiB0aGUgJ3NyYycgbWVtYmVyIG9mIGFuIGVkZ2UgcG9pbnRzIHRvIHRoZSBwcmVkZWNlc3NvcgpiYXNpYyBibG9jayBvZiB0aGUgJ2Rlc3QnIGJhc2ljIGJsb2NrLiAgVGhlIG1lbWJlcnMgJ3ByZWRzJyBhbmQgJ3N1Y2NzJwpvZiB0aGUgJ2Jhc2ljX2Jsb2NrJyBkYXRhIHR5cGUgcG9pbnQgdG8gdHlwZS1zYWZlIHZlY3RvcnMgb2YgZWRnZXMgdG8KdGhlIHByZWRlY2Vzc29ycyBhbmQgc3VjY2Vzc29ycyBvZiB0aGUgYmxvY2suCgogV2hlbiB3YWxraW5nIHRoZSBlZGdlcyBpbiBhbiBlZGdlIHZlY3RvciwgImVkZ2UgaXRlcmF0b3JzIiBzaG91bGQgYmUKdXNlZC4gIEVkZ2UgaXRlcmF0b3JzIGFyZSBjb25zdHJ1Y3RlZCB1c2luZyB0aGUgJ2VkZ2VfaXRlcmF0b3InIGRhdGEKc3RydWN0dXJlIGFuZCBzZXZlcmFsIG1ldGhvZHMgYXJlIGF2YWlsYWJsZSB0byBvcGVyYXRlIG9uIHRoZW06CgonZWlfc3RhcnQnCiAgICAgVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyBhbiAnZWRnZV9pdGVyYXRvcicgdGhhdCBwb2ludHMgdG8gdGhlCiAgICAgZmlyc3QgZWRnZSBpbiBhIHZlY3RvciBvZiBlZGdlcy4KCidlaV9sYXN0JwogICAgIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgYW4gJ2VkZ2VfaXRlcmF0b3InIHRoYXQgcG9pbnRzIHRvIHRoZQogICAgIGxhc3QgZWRnZSBpbiBhIHZlY3RvciBvZiBlZGdlcy4KCidlaV9lbmRfcCcKICAgICBUaGlzIHByZWRpY2F0ZSBpcyAndHJ1ZScgaWYgYW4gJ2VkZ2VfaXRlcmF0b3InIHJlcHJlc2VudHMgdGhlIGxhc3QKICAgICBlZGdlIGluIGFuIGVkZ2UgdmVjdG9yLgoKJ2VpX29uZV9iZWZvcmVfZW5kX3AnCiAgICAgVGhpcyBwcmVkaWNhdGUgaXMgJ3RydWUnIGlmIGFuICdlZGdlX2l0ZXJhdG9yJyByZXByZXNlbnRzIHRoZQogICAgIHNlY29uZCBsYXN0IGVkZ2UgaW4gYW4gZWRnZSB2ZWN0b3IuCgonZWlfbmV4dCcKICAgICBUaGlzIGZ1bmN0aW9uIHRha2VzIGEgcG9pbnRlciB0byBhbiAnZWRnZV9pdGVyYXRvcicgYW5kIG1ha2VzIGl0CiAgICAgcG9pbnQgdG8gdGhlIG5leHQgZWRnZSBpbiB0aGUgc2VxdWVuY2UuCgonZWlfcHJldicKICAgICBUaGlzIGZ1bmN0aW9uIHRha2VzIGEgcG9pbnRlciB0byBhbiAnZWRnZV9pdGVyYXRvcicgYW5kIG1ha2VzIGl0CiAgICAgcG9pbnQgdG8gdGhlIHByZXZpb3VzIGVkZ2UgaW4gdGhlIHNlcXVlbmNlLgoKJ2VpX2VkZ2UnCiAgICAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSAnZWRnZScgY3VycmVudGx5IHBvaW50ZWQgdG8gYnkgYW4KICAgICAnZWRnZV9pdGVyYXRvcicuCgonZWlfc2FmZV9zYWZlJwogICAgIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgJ2VkZ2UnIGN1cnJlbnRseSBwb2ludGVkIHRvIGJ5IGFuCiAgICAgJ2VkZ2VfaXRlcmF0b3InLCBidXQgcmV0dXJucyAnTlVMTCcgaWYgdGhlIGl0ZXJhdG9yIGlzIHBvaW50aW5nIGF0CiAgICAgdGhlIGVuZCBvZiB0aGUgc2VxdWVuY2UuICBUaGlzIGZ1bmN0aW9uIGhhcyBiZWVuIHByb3ZpZGVkIGZvcgogICAgIGV4aXN0aW5nIGNvZGUgbWFrZXMgdGhlIGFzc3VtcHRpb24gdGhhdCBhICdOVUxMJyBlZGdlIGluZGljYXRlcyB0aGUKICAgICBlbmQgb2YgdGhlIHNlcXVlbmNlLgoKIFRoZSBjb252ZW5pZW5jZSBtYWNybyAnRk9SX0VBQ0hfRURHRScgY2FuIGJlIHVzZWQgdG8gdmlzaXQgYWxsIG9mIHRoZQplZGdlcyBpbiBhIHNlcXVlbmNlIG9mIHByZWRlY2Vzc29yIG9yIHN1Y2Nlc3NvciBlZGdlcy4gIEl0IG11c3Qgbm90IGJlCnVzZWQgd2hlbiBhbiBlbGVtZW50IG1pZ2h0IGJlIHJlbW92ZWQgZHVyaW5nIHRoZSB0cmF2ZXJzYWwsIG90aGVyd2lzZQplbGVtZW50cyB3aWxsIGJlIG1pc3NlZC4gIEhlcmUgaXMgYW4gZXhhbXBsZSBvZiBob3cgdG8gdXNlIHRoZSBtYWNybzoKCiAgICAgZWRnZSBlOwogICAgIGVkZ2VfaXRlcmF0b3IgZWk7CgogICAgIEZPUl9FQUNIX0VER0UgKGUsIGVpLCBiYi0+c3VjY3MpCiAgICAgICB7CiAgICAgICAgICBpZiAoZS0+ZmxhZ3MgJiBFREdFX0ZBTExUSFJVKQogICAgICAgICAgICBicmVhazsKICAgICAgIH0KCiBUaGVyZSBhcmUgdmFyaW91cyByZWFzb25zIHdoeSBjb250cm9sIGZsb3cgbWF5IHRyYW5zZmVyIGZyb20gb25lIGJsb2NrCnRvIGFub3RoZXIuICBPbmUgcG9zc2liaWxpdHkgaXMgdGhhdCBzb21lIGluc3RydWN0aW9uLCBmb3IgZXhhbXBsZSBhCidDT0RFX0xBQkVMJywgaW4gYSBsaW5lYXJpemVkIGluc3RydWN0aW9uIHN0cmVhbSBqdXN0IGFsd2F5cyBzdGFydHMgYQpuZXcgYmFzaWMgYmxvY2suICBJbiB0aGlzIGNhc2UgYSAiZmFsbC10aHJ1IiBlZGdlIGxpbmtzIHRoZSBiYXNpYyBibG9jawp0byB0aGUgZmlyc3QgZm9sbG93aW5nIGJhc2ljIGJsb2NrLiAgQnV0IHRoZXJlIGFyZSBzZXZlcmFsIG90aGVyIHJlYXNvbnMKd2h5IGVkZ2VzIG1heSBiZSBjcmVhdGVkLiAgVGhlICdmbGFncycgZmllbGQgb2YgdGhlICdlZGdlJyBkYXRhIHR5cGUgaXMKdXNlZCB0byBzdG9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdHlwZSBvZiBlZGdlIHdlIGFyZSBkZWFsaW5nIHdpdGguCkVhY2ggZWRnZSBpcyBvZiBvbmUgb2YgdGhlIGZvbGxvd2luZyB0eXBlczoKCl9qdW1wXwogICAgIE5vIHR5cGUgZmxhZ3MgYXJlIHNldCBmb3IgZWRnZXMgY29ycmVzcG9uZGluZyB0byBqdW1wIGluc3RydWN0aW9ucy4KICAgICBUaGVzZSBlZGdlcyBhcmUgdXNlZCBmb3IgdW5jb25kaXRpb25hbCBvciBjb25kaXRpb25hbCBqdW1wcyBhbmQgaW4KICAgICBSVEwgYWxzbyBmb3IgdGFibGUganVtcHMuICBUaGV5IGFyZSB0aGUgZWFzaWVzdCB0byBtYW5pcHVsYXRlIGFzCiAgICAgdGhleSBtYXkgYmUgZnJlZWx5IHJlZGlyZWN0ZWQgd2hlbiB0aGUgZmxvdyBncmFwaCBpcyBub3QgaW4gU1NBCiAgICAgZm9ybS4KCl9mYWxsLXRocnVfCiAgICAgRmFsbC10aHJ1IGVkZ2VzIGFyZSBwcmVzZW50IGluIGNhc2Ugd2hlcmUgdGhlIGJhc2ljIGJsb2NrIG1heQogICAgIGNvbnRpbnVlIGV4ZWN1dGlvbiB0byB0aGUgZm9sbG93aW5nIG9uZSB3aXRob3V0IGJyYW5jaGluZy4gIFRoZXNlCiAgICAgZWRnZXMgaGF2ZSB0aGUgJ0VER0VfRkFMTFRIUlUnIGZsYWcgc2V0LiAgVW5saWtlIG90aGVyIHR5cGVzIG9mCiAgICAgZWRnZXMsIHRoZXNlIGVkZ2VzIG11c3QgY29tZSBpbnRvIHRoZSBiYXNpYyBibG9jayBpbW1lZGlhdGVseQogICAgIGZvbGxvd2luZyBpbiB0aGUgaW5zdHJ1Y3Rpb24gc3RyZWFtLiAgVGhlIGZ1bmN0aW9uCiAgICAgJ2ZvcmNlX25vbmZhbGx0aHJ1JyBpcyBhdmFpbGFibGUgdG8gaW5zZXJ0IGFuIHVuY29uZGl0aW9uYWwganVtcCBpbgogICAgIHRoZSBjYXNlIHRoYXQgcmVkaXJlY3Rpb24gaXMgbmVlZGVkLiAgTm90ZSB0aGF0IHRoaXMgbWF5IHJlcXVpcmUKICAgICBjcmVhdGlvbiBvZiBhIG5ldyBiYXNpYyBibG9jay4KCl9leGNlcHRpb24gaGFuZGxpbmdfCiAgICAgRXhjZXB0aW9uIGhhbmRsaW5nIGVkZ2VzIHJlcHJlc2VudCBwb3NzaWJsZSBjb250cm9sIHRyYW5zZmVycyBmcm9tCiAgICAgYSB0cmFwcGluZyBpbnN0cnVjdGlvbiB0byBhbiBleGNlcHRpb24gaGFuZGxlci4gIFRoZSBkZWZpbml0aW9uIG9mCiAgICAgInRyYXBwaW5nIiB2YXJpZXMuICBJbiBDKyssIG9ubHkgZnVuY3Rpb24gY2FsbHMgY2FuIHRocm93LCBidXQgZm9yCiAgICAgSmF2YSwgZXhjZXB0aW9ucyBsaWtlIGRpdmlzaW9uIGJ5IHplcm8gb3Igc2VnbWVudGF0aW9uIGZhdWx0IGFyZQogICAgIGRlZmluZWQgYW5kIHRodXMgZWFjaCBpbnN0cnVjdGlvbiBwb3NzaWJseSB0aHJvd2luZyB0aGlzIGtpbmQgb2YKICAgICBleGNlcHRpb24gbmVlZHMgdG8gYmUgaGFuZGxlZCBhcyBjb250cm9sIGZsb3cgaW5zdHJ1Y3Rpb24uCiAgICAgRXhjZXB0aW9uIGVkZ2VzIGhhdmUgdGhlICdFREdFX0FCTk9STUFMJyBhbmQgJ0VER0VfRUgnIGZsYWdzIHNldC4KCiAgICAgV2hlbiB1cGRhdGluZyB0aGUgaW5zdHJ1Y3Rpb24gc3RyZWFtIGl0IGlzIGVhc3kgdG8gY2hhbmdlIHBvc3NpYmx5CiAgICAgdHJhcHBpbmcgaW5zdHJ1Y3Rpb24gdG8gbm9uLXRyYXBwaW5nLCBieSBzaW1wbHkgcmVtb3ZpbmcgdGhlCiAgICAgZXhjZXB0aW9uIGVkZ2UuICBUaGUgb3Bwb3NpdGUgY29udmVyc2lvbiBpcyBkaWZmaWN1bHQsIGJ1dCBzaG91bGQKICAgICBub3QgaGFwcGVuIGFueXdheS4gIFRoZSBlZGdlcyBjYW4gYmUgZWxpbWluYXRlZCB2aWEKICAgICAncHVyZ2VfZGVhZF9lZGdlcycgY2FsbC4KCiAgICAgSW4gdGhlIFJUTCByZXByZXNlbnRhdGlvbiwgdGhlIGRlc3RpbmF0aW9uIG9mIGFuIGV4Y2VwdGlvbiBlZGdlIGlzCiAgICAgc3BlY2lmaWVkIGJ5ICdSRUdfRUhfUkVHSU9OJyBub3RlIGF0dGFjaGVkIHRvIHRoZSBpbnNuLiAgSW4gY2FzZSBvZgogICAgIGEgdHJhcHBpbmcgY2FsbCB0aGUgJ0VER0VfQUJOT1JNQUxfQ0FMTCcgZmxhZyBpcyBzZXQgdG9vLiAgSW4gdGhlCiAgICAgJ3RyZWUnIHJlcHJlc2VudGF0aW9uLCB0aGlzIGV4dHJhIGZsYWcgaXMgbm90IHNldC4KCiAgICAgSW4gdGhlIFJUTCByZXByZXNlbnRhdGlvbiwgdGhlIHByZWRpY2F0ZSAnbWF5X3RyYXBfcCcgbWF5IGJlIHVzZWQKICAgICB0byBjaGVjayB3aGV0aGVyIGluc3RydWN0aW9uIHN0aWxsIG1heSB0cmFwIG9yIG5vdC4gIEZvciB0aGUgdHJlZQogICAgIHJlcHJlc2VudGF0aW9uLCB0aGUgJ3RyZWVfY291bGRfdHJhcF9wJyBwcmVkaWNhdGUgaXMgYXZhaWxhYmxlLCBidXQKICAgICB0aGlzIHByZWRpY2F0ZSBvbmx5IGNoZWNrcyBmb3IgcG9zc2libGUgbWVtb3J5IHRyYXBzLCBhcyBpbgogICAgIGRlcmVmZXJlbmNpbmcgYW4gaW52YWxpZCBwb2ludGVyIGxvY2F0aW9uLgoKX3NpYmxpbmcgY2FsbHNfCiAgICAgU2libGluZyBjYWxscyBvciB0YWlsIGNhbGxzIHRlcm1pbmF0ZSB0aGUgZnVuY3Rpb24gaW4gYQogICAgIG5vbi1zdGFuZGFyZCB3YXkgYW5kIHRodXMgYW4gZWRnZSB0byB0aGUgZXhpdCBtdXN0IGJlIHByZXNlbnQuCiAgICAgJ0VER0VfU0lCQ0FMTCcgYW5kICdFREdFX0FCTk9STUFMJyBhcmUgc2V0IGluIHN1Y2ggY2FzZS4gIFRoZXNlCiAgICAgZWRnZXMgb25seSBleGlzdCBpbiB0aGUgUlRMIHJlcHJlc2VudGF0aW9uLgoKX2NvbXB1dGVkIGp1bXBzXwogICAgIENvbXB1dGVkIGp1bXBzIGNvbnRhaW4gZWRnZXMgdG8gYWxsIGxhYmVscyBpbiB0aGUgZnVuY3Rpb24KICAgICByZWZlcmVuY2VkIGZyb20gdGhlIGNvZGUuICBBbGwgdGhvc2UgZWRnZXMgaGF2ZSAnRURHRV9BQk5PUk1BTCcKICAgICBmbGFnIHNldC4gIFRoZSBlZGdlcyB1c2VkIHRvIHJlcHJlc2VudCBjb21wdXRlZCBqdW1wcyBvZnRlbiBjYXVzZQogICAgIGNvbXBpbGUgdGltZSBwZXJmb3JtYW5jZSBwcm9ibGVtcywgc2luY2UgZnVuY3Rpb25zIGNvbnNpc3Rpbmcgb2YKICAgICBtYW55IHRha2VuIGxhYmVscyBhbmQgbWFueSBjb21wdXRlZCBqdW1wcyBtYXkgaGF2ZSBfdmVyeV8gZGVuc2UKICAgICBmbG93IGdyYXBocywgc28gdGhlc2UgZWRnZXMgbmVlZCB0byBiZSBoYW5kbGVkIHdpdGggc3BlY2lhbCBjYXJlLgogICAgIER1cmluZyB0aGUgZWFybGllciBzdGFnZXMgb2YgdGhlIGNvbXBpbGF0aW9uIHByb2Nlc3MsIEdDQyB0cmllcyB0bwogICAgIGF2b2lkIHN1Y2ggZGVuc2UgZmxvdyBncmFwaHMgYnkgZmFjdG9yaW5nIGNvbXB1dGVkIGp1bXBzLiAgRm9yCiAgICAgZXhhbXBsZSwgZ2l2ZW4gdGhlIGZvbGxvd2luZyBzZXJpZXMgb2YganVtcHMsCgogICAgICAgICAgICBnb3RvICp4OwogICAgICAgICAgICBbIC4uLiBdCgogICAgICAgICAgICBnb3RvICp4OwogICAgICAgICAgICBbIC4uLiBdCgogICAgICAgICAgICBnb3RvICp4OwogICAgICAgICAgICBbIC4uLiBdCgogICAgIGZhY3RvcmluZyB0aGUgY29tcHV0ZWQganVtcHMgcmVzdWx0cyBpbiB0aGUgZm9sbG93aW5nIGNvZGUgc2VxdWVuY2UKICAgICB3aGljaCBoYXMgYSBtdWNoIHNpbXBsZXIgZmxvdyBncmFwaDoKCiAgICAgICAgICAgIGdvdG8geTsKICAgICAgICAgICAgWyAuLi4gXQoKICAgICAgICAgICAgZ290byB5OwogICAgICAgICAgICBbIC4uLiBdCgogICAgICAgICAgICBnb3RvIHk7CiAgICAgICAgICAgIFsgLi4uIF0KCiAgICAgICAgICB5OgogICAgICAgICAgICBnb3RvICp4OwoKICAgICBIb3dldmVyLCB0aGUgY2xhc3NpYyBwcm9ibGVtIHdpdGggdGhpcyB0cmFuc2Zvcm1hdGlvbiBpcyB0aGF0IGl0CiAgICAgaGFzIGEgcnVudGltZSBjb3N0IGluIHRoZXJlIHJlc3VsdGluZyBjb2RlOiBBbiBleHRyYSBqdW1wLgogICAgIFRoZXJlZm9yZSwgdGhlIGNvbXB1dGVkIGp1bXBzIGFyZSB1bi1mYWN0b3JlZCBpbiB0aGUgbGF0ZXIgcGFzc2VzCiAgICAgb2YgdGhlIGNvbXBpbGVyLiAgQmUgYXdhcmUgb2YgdGhhdCB3aGVuIHlvdSB3b3JrIG9uIHBhc3NlcyBpbiB0aGF0CiAgICAgYXJlYS4gIFRoZXJlIGhhdmUgYmVlbiBudW1lcm91cyBleGFtcGxlcyBhbHJlYWR5IHdoZXJlIHRoZSBjb21waWxlCiAgICAgdGltZSBmb3IgY29kZSB3aXRoIHVuZmFjdG9yZWQgY29tcHV0ZWQganVtcHMgY2F1c2VkIHNvbWUgc2VyaW91cwogICAgIGhlYWRhY2hlcy4KCl9ub25sb2NhbCBnb3RvIGhhbmRsZXJzXwogICAgIEdDQyBhbGxvd3MgbmVzdGVkIGZ1bmN0aW9ucyB0byByZXR1cm4gaW50byBjYWxsZXIgdXNpbmcgYSAnZ290bycgdG8KICAgICBhIGxhYmVsIHBhc3NlZCB0byBhcyBhbiBhcmd1bWVudCB0byB0aGUgY2FsbGVlLiAgVGhlIGxhYmVscyBwYXNzZWQKICAgICB0byBuZXN0ZWQgZnVuY3Rpb25zIGNvbnRhaW4gc3BlY2lhbCBjb2RlIHRvIGNsZWFudXAgYWZ0ZXIgZnVuY3Rpb24KICAgICBjYWxsLiAgU3VjaCBzZWN0aW9ucyBvZiBjb2RlIGFyZSByZWZlcnJlZCB0byBhcyAibm9ubG9jYWwgZ290bwogICAgIHJlY2VpdmVycyIuICBJZiBhIGZ1bmN0aW9uIGNvbnRhaW5zIHN1Y2ggbm9ubG9jYWwgZ290byByZWNlaXZlcnMsCiAgICAgYW4gZWRnZSBmcm9tIHRoZSBjYWxsIHRvIHRoZSBsYWJlbCBpcyBjcmVhdGVkIHdpdGggdGhlCiAgICAgJ0VER0VfQUJOT1JNQUwnIGFuZCAnRURHRV9BQk5PUk1BTF9DQUxMJyBmbGFncyBzZXQuCgpfZnVuY3Rpb24gZW50cnkgcG9pbnRzXwogICAgIEJ5IGRlZmluaXRpb24sIGV4ZWN1dGlvbiBvZiBmdW5jdGlvbiBzdGFydHMgYXQgYmFzaWMgYmxvY2sgMCwgc28KICAgICB0aGVyZSBpcyBhbHdheXMgYW4gZWRnZSBmcm9tIHRoZSAnRU5UUllfQkxPQ0tfUFRSJyB0byBiYXNpYyBibG9jawogICAgIDAuICBUaGVyZSBpcyBubyAndHJlZScgcmVwcmVzZW50YXRpb24gZm9yIGFsdGVybmF0ZSBlbnRyeSBwb2ludHMgYXQKICAgICB0aGlzIG1vbWVudC4gIEluIFJUTCwgYWx0ZXJuYXRlIGVudHJ5IHBvaW50cyBhcmUgc3BlY2lmaWVkIGJ5CiAgICAgJ0NPREVfTEFCRUwnIHdpdGggJ0xBQkVMX0FMVEVSTkFURV9OQU1FJyBkZWZpbmVkLiAgVGhpcyBmZWF0dXJlIGlzCiAgICAgY3VycmVudGx5IHVzZWQgZm9yIG11bHRpcGxlIGVudHJ5IHBvaW50IHByb2xvZ3VlcyBhbmQgaXMgbGltaXRlZCB0bwogICAgIHBvc3QtcmVsb2FkIHBhc3NlcyBvbmx5LiAgVGhpcyBjYW4gYmUgdXNlZCBieSBiYWNrLWVuZHMgdG8gZW1pdAogICAgIGFsdGVybmF0ZSBwcm9sb2d1ZXMgZm9yIGZ1bmN0aW9ucyBjYWxsZWQgZnJvbSBkaWZmZXJlbnQgY29udGV4dHMuCiAgICAgSW4gZnV0dXJlIGZ1bGwgc3VwcG9ydCBmb3IgbXVsdGlwbGUgZW50cnkgZnVuY3Rpb25zIGRlZmluZWQgYnkKICAgICBGb3J0cmFuIDkwIG5lZWRzIHRvIGJlIGltcGxlbWVudGVkLgoKX2Z1bmN0aW9uIGV4aXRzXwogICAgIEluIHRoZSBwcmUtcmVsb2FkIHJlcHJlc2VudGF0aW9uIGEgZnVuY3Rpb24gdGVybWluYXRlcyBhZnRlciB0aGUKICAgICBsYXN0IGluc3RydWN0aW9uIGluIHRoZSBpbnNuIGNoYWluIGFuZCBubyBleHBsaWNpdCByZXR1cm4KICAgICBpbnN0cnVjdGlvbnMgYXJlIHVzZWQuICBUaGlzIGNvcnJlc3BvbmRzIHRvIHRoZSBmYWxsLXRocnUgZWRnZSBpbnRvCiAgICAgZXhpdCBibG9jay4gIEFmdGVyIHJlbG9hZCwgb3B0aW1hbCBSVEwgZXBpbG9ndWVzIGFyZSB1c2VkIHRoYXQgdXNlCiAgICAgZXhwbGljaXQgKGNvbmRpdGlvbmFsKSByZXR1cm4gaW5zdHJ1Y3Rpb25zIHRoYXQgYXJlIHJlcHJlc2VudGVkIGJ5CiAgICAgZWRnZXMgd2l0aCBubyBmbGFncyBzZXQuCgofCkZpbGU6IGdjY2ludC5pbmZvLCAgTm9kZTogUHJvZmlsZSBpbmZvcm1hdGlvbiwgIE5leHQ6IE1haW50YWluaW5nIHRoZSBDRkcsICBQcmV2OiBFZGdlcywgIFVwOiBDb250cm9sIEZsb3cKCjEzLjMgUHJvZmlsZSBpbmZvcm1hdGlvbgo9PT09PT09PT09PT09PT09PT09PT09PT0KCkluIG1hbnkgY2FzZXMgYSBjb21waWxlciBtdXN0IG1ha2UgYSBjaG9pY2Ugd2hldGhlciB0byB0cmFkZSBzcGVlZCBpbgpvbmUgcGFydCBvZiBjb2RlIGZvciBzcGVlZCBpbiBhbm90aGVyLCBvciB0byB0cmFkZSBjb2RlIHNpemUgZm9yIGNvZGUKc3BlZWQuICBJbiBzdWNoIGNhc2VzIGl0IGlzIHVzZWZ1bCB0byBrbm93IGluZm9ybWF0aW9uIGFib3V0IGhvdyBvZnRlbgpzb21lIGdpdmVuIGJsb2NrIHdpbGwgYmUgZXhlY3V0ZWQuICBUaGF0IGlzIHRoZSBwdXJwb3NlIGZvciBtYWludGFpbmluZwpwcm9maWxlIHdpdGhpbiB0aGUgZmxvdyBncmFwaC4gIEdDQyBjYW4gaGFuZGxlIHByb2ZpbGUgaW5mb3JtYXRpb24Kb2J0YWluZWQgdGhyb3VnaCAicHJvZmlsZSBmZWVkYmFjayIsIGJ1dCBpdCBjYW4gYWxzbyBlc3RpbWF0ZSBicmFuY2gKcHJvYmFiaWxpdGllcyBiYXNlZCBvbiBzdGF0aWNzIGFuZCBoZXVyaXN0aWNzLgoKIFRoZSBmZWVkYmFjayBiYXNlZCBwcm9maWxlIGlzIHByb2R1Y2VkIGJ5IGNvbXBpbGluZyB0aGUgcHJvZ3JhbSB3aXRoCmluc3RydW1lbnRhdGlvbiwgZXhlY3V0aW5nIGl0IG9uIGEgdHJhaW4gcnVuIGFuZCByZWFkaW5nIHRoZSBudW1iZXJzIG9mCmV4ZWN1dGlvbnMgb2YgYmFzaWMgYmxvY2tzIGFuZCBlZGdlcyBiYWNrIHRvIHRoZSBjb21waWxlciB3aGlsZQpyZS1jb21waWxpbmcgdGhlIHByb2dyYW0gdG8gcHJvZHVjZSB0aGUgZmluYWwgZXhlY3V0YWJsZS4gIFRoaXMgbWV0aG9kCnByb3ZpZGVzIHZlcnkgYWNjdXJhdGUgaW5mb3JtYXRpb24gYWJvdXQgd2hlcmUgYSBwcm9ncmFtIHNwZW5kcyBtb3N0IG9mCml0cyB0aW1lIG9uIHRoZSB0cmFpbiBydW4uICBXaGV0aGVyIGl0IG1hdGNoZXMgdGhlIGF2ZXJhZ2UgcnVuIG9mIGNvdXJzZQpkZXBlbmRzIG9uIHRoZSBjaG9pY2Ugb2YgdHJhaW4gZGF0YSBzZXQsIGJ1dCBzZXZlcmFsIHN0dWRpZXMgaGF2ZSBzaG93bgp0aGF0IHRoZSBiZWhhdmlvciBvZiBhIHByb2dyYW0gdXN1YWxseSBjaGFuZ2VzIGp1c3QgbWFyZ2luYWxseSBvdmVyCmRpZmZlcmVudCBkYXRhIHNldHMuCgogV2hlbiBwcm9maWxlIGZlZWRiYWNrIGlzIG5vdCBhdmFpbGFibGUsIHRoZSBjb21waWxlciBtYXkgYmUgYXNrZWQgdG8KYXR0ZW1wdCB0byBwcmVkaWN0IHRoZSBiZWhhdmlvciBvZiBlYWNoIGJyYW5jaCBpbiB0aGUgcHJvZ3JhbSB1c2luZyBhCnNldCBvZiBoZXVyaXN0aWNzIChzZWUgJ3ByZWRpY3QuZGVmJyBmb3IgZGV0YWlscykgYW5kIGNvbXB1dGUgZXN0aW1hdGVkCmZyZXF1ZW5jaWVzIG9mIGVhY2ggYmFzaWMgYmxvY2sgYnkgcHJvcGFnYXRpbmcgdGhlIHByb2JhYmlsaXRpZXMgb3Zlcgp0aGUgZ3JhcGguCgogRWFjaCAnYmFzaWNfYmxvY2snIGNvbnRhaW5zIHR3byBpbnRlZ2VyIGZpZWxkcyB0byByZXByZXNlbnQgcHJvZmlsZQppbmZvcm1hdGlvbjogJ2ZyZXF1ZW5jeScgYW5kICdjb3VudCcuICBUaGUgJ2ZyZXF1ZW5jeScgaXMgYW4gZXN0aW1hdGlvbgpob3cgb2Z0ZW4gaXMgYmFzaWMgYmxvY2sgZXhlY3V0ZWQgd2l0aGluIGEgZnVuY3Rpb24uICBJdCBpcyByZXByZXNlbnRlZAphcyBhbiBpbnRlZ2VyIHNjYWxlZCBpbiB0aGUgcmFuZ2UgZnJvbSAwIHRvICdCQl9GUkVRX0JBU0UnLiAgVGhlIG1vc3QKZnJlcXVlbnRseSBleGVjdXRlZCBiYXNpYyBibG9jayBpbiBmdW5jdGlvbiBpcyBpbml0aWFsbHkgc2V0IHRvCidCQl9GUkVRX0JBU0UnIGFuZCB0aGUgcmVzdCBvZiBmcmVxdWVuY2llcyBhcmUgc2NhbGVkIGFjY29yZGluZ2x5LgpEdXJpbmcgb3B0aW1pemF0aW9uLCB0aGUgZnJlcXVlbmN5IG9mIHRoZSBtb3N0IGZyZXF1ZW50IGJhc2ljIGJsb2NrIGNhbgpib3RoIGRlY3JlYXNlIChmb3IgaW5zdGFuY2UgYnkgbG9vcCB1bnJvbGxpbmcpIG9yIGdyb3cgKGZvciBpbnN0YW5jZSBieQpjcm9zcy1qdW1waW5nIG9wdGltaXphdGlvbiksIHNvIHNjYWxpbmcgc29tZXRpbWVzIGhhcyB0byBiZSBwZXJmb3JtZWQKbXVsdGlwbGUgdGltZXMuCgogVGhlICdjb3VudCcgY29udGFpbnMgaGFyZC1jb3VudGVkIG51bWJlcnMgb2YgZXhlY3V0aW9uIG1lYXN1cmVkIGR1cmluZwp0cmFpbmluZyBydW5zIGFuZCBpcyBub256ZXJvIG9ubHkgd2hlbiBwcm9maWxlIGZlZWRiYWNrIGlzIGF2YWlsYWJsZS4KVGhpcyB2YWx1ZSBpcyByZXByZXNlbnRlZCBhcyB0aGUgaG9zdCdzIHdpZGVzdCBpbnRlZ2VyICh0eXBpY2FsbHkgYSA2NApiaXQgaW50ZWdlcikgb2YgdGhlIHNwZWNpYWwgdHlwZSAnZ2Nvdl90eXBlJy4KCiBNb3N0IG9wdGltaXphdGlvbiBwYXNzZXMgY2FuIHVzZSBvbmx5IHRoZSBmcmVxdWVuY3kgaW5mb3JtYXRpb24gb2YgYQpiYXNpYyBibG9jaywgYnV0IGEgZmV3IHBhc3NlcyBtYXkgd2FudCB0byBrbm93IGhhcmQgZXhlY3V0aW9uIGNvdW50cy4KVGhlIGZyZXF1ZW5jaWVzIHNob3VsZCBhbHdheXMgbWF0Y2ggdGhlIGNvdW50cyBhZnRlciBzY2FsaW5nLCBob3dldmVyCmR1cmluZyB1cGRhdGluZyBvZiB0aGUgcHJvZmlsZSBpbmZvcm1hdGlvbiBudW1lcmljYWwgZXJyb3IgbWF5CmFjY3VtdWxhdGUgaW50byBxdWl0ZSBsYXJnZSBlcnJvcnMuCgogRWFjaCBlZGdlIGFsc28gY29udGFpbnMgYSBicmFuY2ggcHJvYmFiaWxpdHkgZmllbGQ6IGFuIGludGVnZXIgaW4gdGhlCnJhbmdlIGZyb20gMCB0byAnUkVHX0JSX1BST0JfQkFTRScuICBJdCByZXByZXNlbnRzIHByb2JhYmlsaXR5IG9mCnBhc3NpbmcgY29udHJvbCBmcm9tIHRoZSBlbmQgb2YgdGhlICdzcmMnIGJhc2ljIGJsb2NrIHRvIHRoZSAnZGVzdCcKYmFzaWMgYmxvY2ssIGkuZS4gdGhlIHByb2JhYmlsaXR5IHRoYXQgY29udHJvbCB3aWxsIGZsb3cgYWxvbmcgdGhpcwplZGdlLiAgVGhlICdFREdFX0ZSRVFVRU5DWScgbWFjcm8gaXMgYXZhaWxhYmxlIHRvIGNvbXB1dGUgaG93IGZyZXF1ZW50bHkKYSBnaXZlbiBlZGdlIGlzIHRha2VuLiAgVGhlcmUgaXMgYSAnY291bnQnIGZpZWxkIGZvciBlYWNoIGVkZ2UgYXMgd2VsbCwKcmVwcmVzZW50aW5nIHNhbWUgaW5mb3JtYXRpb24gYXMgZm9yIGEgYmFzaWMgYmxvY2suCgogVGhlIGJhc2ljIGJsb2NrIGZyZXF1ZW5jaWVzIGFyZSBub3QgcmVwcmVzZW50ZWQgaW4gdGhlIGluc3RydWN0aW9uCnN0cmVhbSwgYnV0IGluIHRoZSBSVEwgcmVwcmVzZW50YXRpb24gdGhlIGVkZ2UgZnJlcXVlbmNpZXMgYXJlCnJlcHJlc2VudGVkIGZvciBjb25kaXRpb25hbCBqdW1wcyAodmlhIHRoZSAnUkVHX0JSX1BST0InIG1hY3JvKSBzaW5jZQp0aGV5IGFyZSB1c2VkIHdoZW4gaW5zdHJ1Y3Rpb25zIGFyZSBvdXRwdXQgdG8gdGhlIGFzc2VtYmx5IGZpbGUgYW5kIHRoZQpmbG93IGdyYXBoIGlzIG5vIGxvbmdlciBtYWludGFpbmVkLgoKIFRoZSBwcm9iYWJpbGl0eSB0aGF0IGNvbnRyb2wgZmxvdyBhcnJpdmVzIHZpYSBhIGdpdmVuIGVkZ2UgdG8gaXRzCmRlc3RpbmF0aW9uIGJhc2ljIGJsb2NrIGlzIGNhbGxlZCAicmV2ZXJzZSBwcm9iYWJpbGl0eSIgYW5kIGlzIG5vdApkaXJlY3RseSByZXByZXNlbnRlZCwgYnV0IGl0IG1heSBiZSBlYXNpbHkgY29tcHV0ZWQgZnJvbSBmcmVxdWVuY2llcyBvZgpiYXNpYyBibG9ja3MuCgogVXBkYXRpbmcgcHJvZmlsZSBpbmZvcm1hdGlvbiBpcyBhIGRlbGljYXRlIHRhc2sgdGhhdCBjYW4gdW5mb3J0dW5hdGVseQpub3QgYmUgZWFzaWx5IGludGVncmF0ZWQgd2l0aCB0aGUgQ0ZHIG1hbmlwdWxhdGlvbiBBUEkuICBNYW55IG9mIHRoZQpmdW5jdGlvbnMgYW5kIGhvb2tzIHRvIG1vZGlmeSB0aGUgQ0ZHLCBzdWNoIGFzCidyZWRpcmVjdF9lZGdlX2FuZF9icmFuY2gnLCBkbyBub3QgaGF2ZSBlbm91Z2ggaW5mb3JtYXRpb24gdG8gZWFzaWx5CnVwZGF0ZSB0aGUgcHJvZmlsZSwgc28gdXBkYXRpbmcgaXQgaXMgaW4gdGhlIG1ham9yaXR5IG9mIGNhc2VzIGxlZnQgdXAKdG8gdGhlIGNhbGxlci4gIEl0IGlzIGRpZmZpY3VsdCB0byB1bmNvdmVyIGJ1Z3MgaW4gdGhlIHByb2ZpbGUgdXBkYXRpbmcKY29kZSwgYmVjYXVzZSB0aGV5IG1hbmlmZXN0IHRoZW1zZWx2ZXMgb25seSBieSBwcm9kdWNpbmcgd29yc2UgY29kZSwgYW5kCmNoZWNraW5nIHByb2ZpbGUgY29uc2lzdGVuY3kgaXMgbm90IHBvc3NpYmxlIGJlY2F1c2Ugb2YgbnVtZXJpYyBlcnJvcgphY2N1bXVsYXRpb24uICBIZW5jZSBzcGVjaWFsIGF0dGVudGlvbiBuZWVkcyB0byBiZSBnaXZlbiB0byB0aGlzIGlzc3VlCmluIGVhY2ggcGFzcyB0aGF0IG1vZGlmaWVzIHRoZSBDRkcuCgogSXQgaXMgaW1wb3J0YW50IHRvIHBvaW50IG91dCB0aGF0ICdSRUdfQlJfUFJPQl9CQVNFJyBhbmQgJ0JCX0ZSRVFfQkFTRScKYXJlIGJvdGggc2V0IGxvdyBlbm91Z2ggdG8gYmUgcG9zc2libGUgdG8gY29tcHV0ZSBzZWNvbmQgcG93ZXIgb2YgYW55CmZyZXF1ZW5jeSBvciBwcm9iYWJpbGl0eSBpbiB0aGUgZmxvdyBncmFwaCwgaXQgaXMgbm90IHBvc3NpYmxlIHRvIGV2ZW4Kc3F1YXJlIHRoZSAnY291bnQnIGZpZWxkLCBhcyBtb2Rlcm4gQ1BVcyBhcmUgZmFzdCBlbm91Z2ggdG8gZXhlY3V0ZQokMl4zMiQgb3BlcmF0aW9ucyBxdWlja2x5LgoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IE1haW50YWluaW5nIHRoZSBDRkcsICBOZXh0OiBMaXZlbmVzcyBpbmZvcm1hdGlvbiwgIFByZXY6IFByb2ZpbGUgaW5mb3JtYXRpb24sICBVcDogQ29udHJvbCBGbG93CgoxMy40IE1haW50YWluaW5nIHRoZSBDRkcKPT09PT09PT09PT09PT09PT09PT09PT09CgpBbiBpbXBvcnRhbnQgdGFzayBvZiBlYWNoIGNvbXBpbGVyIHBhc3MgaXMgdG8ga2VlcCBib3RoIHRoZSBjb250cm9sIGZsb3cKZ3JhcGggYW5kIGFsbCBwcm9maWxlIGluZm9ybWF0aW9uIHVwLXRvLWRhdGUuICBSZWNvbnN0cnVjdGlvbiBvZiB0aGUKY29udHJvbCBmbG93IGdyYXBoIGFmdGVyIGVhY2ggcGFzcyBpcyBub3QgYW4gb3B0aW9uLCBzaW5jZSBpdCBtYXkgYmUKdmVyeSBleHBlbnNpdmUgYW5kIGxvc3QgcHJvZmlsZSBpbmZvcm1hdGlvbiBjYW5ub3QgYmUgcmVjb25zdHJ1Y3RlZCBhdAphbGwuCgogR0NDIGhhcyB0d28gbWFqb3IgaW50ZXJtZWRpYXRlIHJlcHJlc2VudGF0aW9ucywgYW5kIGJvdGggdXNlIHRoZQonYmFzaWNfYmxvY2snIGFuZCAnZWRnZScgZGF0YSB0eXBlcyB0byByZXByZXNlbnQgY29udHJvbCBmbG93LiAgQm90aApyZXByZXNlbnRhdGlvbnMgc2hhcmUgYXMgbXVjaCBvZiB0aGUgQ0ZHIG1haW50ZW5hbmNlIGNvZGUgYXMgcG9zc2libGUuCkZvciBlYWNoIHJlcHJlc2VudGF0aW9uLCBhIHNldCBvZiAiaG9va3MiIGlzIGRlZmluZWQgc28gdGhhdCBlYWNoCnJlcHJlc2VudGF0aW9uIGNhbiBwcm92aWRlIGl0cyBvd24gaW1wbGVtZW50YXRpb24gb2YgQ0ZHIG1hbmlwdWxhdGlvbgpyb3V0aW5lcyB3aGVuIG5lY2Vzc2FyeS4gIFRoZXNlIGhvb2tzIGFyZSBkZWZpbmVkIGluICdjZmdob29rcy5oJy4KVGhlcmUgYXJlIGhvb2tzIGZvciBhbG1vc3QgYWxsIGNvbW1vbiBDRkcgbWFuaXB1bGF0aW9ucywgaW5jbHVkaW5nIGJsb2NrCnNwbGl0dGluZyBhbmQgbWVyZ2luZywgZWRnZSByZWRpcmVjdGlvbiBhbmQgY3JlYXRpbmcgYW5kIGRlbGV0aW5nIGJhc2ljCmJsb2Nrcy4gIFRoZXNlIGhvb2tzIHNob3VsZCBwcm92aWRlIGV2ZXJ5dGhpbmcgeW91IG5lZWQgdG8gbWFpbnRhaW4gYW5kCm1hbmlwdWxhdGUgdGhlIENGRyBpbiBib3RoIHRoZSBSVEwgYW5kICd0cmVlJyByZXByZXNlbnRhdGlvbi4KCiBBdCB0aGUgbW9tZW50LCB0aGUgYmFzaWMgYmxvY2sgYm91bmRhcmllcyBhcmUgbWFpbnRhaW5lZCB0cmFuc3BhcmVudGx5CndoZW4gbW9kaWZ5aW5nIGluc3RydWN0aW9ucywgc28gdGhlcmUgcmFyZWx5IGlzIGEgbmVlZCB0byBtb3ZlIHRoZW0KbWFudWFsbHkgKHN1Y2ggYXMgaW4gY2FzZSBzb21lb25lIHdhbnRzIHRvIG91dHB1dCBpbnN0cnVjdGlvbiBvdXRzaWRlCmJhc2ljIGJsb2NrIGV4cGxpY2l0bHkpLiAgT2Z0ZW4gdGhlIENGRyBtYXkgYmUgYmV0dGVyIHZpZXdlZCBhcyBpbnRlZ3JhbApwYXJ0IG9mIGluc3RydWN0aW9uIGNoYWluLCB0aGFuIHN0cnVjdHVyZSBidWlsdCBvbiB0aGUgdG9wIG9mIGl0LgpIb3dldmVyLCBpbiBwcmluY2lwbGUgdGhlIGNvbnRyb2wgZmxvdyBncmFwaCBmb3IgdGhlICd0cmVlJwpyZXByZXNlbnRhdGlvbiBpcyBfbm90XyBhbiBpbnRlZ3JhbCBwYXJ0IG9mIHRoZSByZXByZXNlbnRhdGlvbiwgaW4gdGhhdAphIGZ1bmN0aW9uIHRyZWUgbWF5IGJlIGV4cGFuZGVkIHdpdGhvdXQgZmlyc3QgYnVpbGRpbmcgYSBmbG93IGdyYXBoIGZvcgp0aGUgJ3RyZWUnIHJlcHJlc2VudGF0aW9uIGF0IGFsbC4gIFRoaXMgaGFwcGVucyB3aGVuIGNvbXBpbGluZyB3aXRob3V0CmFueSAndHJlZScgb3B0aW1pemF0aW9uIGVuYWJsZWQuICBXaGVuIHRoZSAndHJlZScgb3B0aW1pemF0aW9ucyBhcmUKZW5hYmxlZCBhbmQgdGhlIGluc3RydWN0aW9uIHN0cmVhbSBpcyByZXdyaXR0ZW4gaW4gU1NBIGZvcm0sIHRoZSBDRkcgaXMKdmVyeSB0aWdodGx5IGNvdXBsZWQgd2l0aCB0aGUgaW5zdHJ1Y3Rpb24gc3RyZWFtLiAgSW4gcGFydGljdWxhciwKc3RhdGVtZW50IGluc2VydGlvbiBhbmQgcmVtb3ZhbCBoYXMgdG8gYmUgZG9uZSB3aXRoIGNhcmUuICBJbiBmYWN0LCB0aGUKd2hvbGUgJ3RyZWUnIHJlcHJlc2VudGF0aW9uIGNhbiBub3QgYmUgZWFzaWx5IHVzZWQgb3IgbWFpbnRhaW5lZCB3aXRob3V0CnByb3BlciBtYWludGVuYW5jZSBvZiB0aGUgQ0ZHIHNpbXVsdGFuZW91c2x5LgoKIEluIHRoZSBSVEwgcmVwcmVzZW50YXRpb24sIGVhY2ggaW5zdHJ1Y3Rpb24gaGFzIGEgJ0JMT0NLX0ZPUl9JTlNOJwp2YWx1ZSB0aGF0IHJlcHJlc2VudHMgcG9pbnRlciB0byB0aGUgYmFzaWMgYmxvY2sgdGhhdCBjb250YWlucyB0aGUKaW5zdHJ1Y3Rpb24uICBJbiB0aGUgJ3RyZWUnIHJlcHJlc2VudGF0aW9uLCB0aGUgZnVuY3Rpb24gJ2JiX2Zvcl9zdG10JwpyZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgYmFzaWMgYmxvY2sgY29udGFpbmluZyB0aGUgcXVlcmllZCBzdGF0ZW1lbnQuCgogV2hlbiBjaGFuZ2VzIG5lZWQgdG8gYmUgYXBwbGllZCB0byBhIGZ1bmN0aW9uIGluIGl0cyAndHJlZScKcmVwcmVzZW50YXRpb24sICJibG9jayBzdGF0ZW1lbnQgaXRlcmF0b3JzIiBzaG91bGQgYmUgdXNlZC4gIFRoZXNlCml0ZXJhdG9ycyBwcm92aWRlIGFuIGludGVncmF0ZWQgYWJzdHJhY3Rpb24gb2YgdGhlIGZsb3cgZ3JhcGggYW5kIHRoZQppbnN0cnVjdGlvbiBzdHJlYW0uICBCbG9jayBzdGF0ZW1lbnQgaXRlcmF0b3JzIGl0ZXJhdG9ycyBhcmUgY29uc3RydWN0ZWQKdXNpbmcgdGhlICdibG9ja19zdG10X2l0ZXJhdG9yJyBkYXRhIHN0cnVjdHVyZSBhbmQgc2V2ZXJhbCBtb2RpZmllciBhcmUKYXZhaWxhYmxlLCBpbmNsdWRpbmcgdGhlIGZvbGxvd2luZzoKCidic2lfc3RhcnQnCiAgICAgVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyBhICdibG9ja19zdG10X2l0ZXJhdG9yJyB0aGF0IHBvaW50cyB0bwogICAgIHRoZSBmaXJzdCBub24tZW1wdHkgc3RhdGVtZW50IGluIGEgYmFzaWMgYmxvY2suCgonYnNpX2xhc3QnCiAgICAgVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyBhICdibG9ja19zdG10X2l0ZXJhdG9yJyB0aGF0IHBvaW50cyB0bwogICAgIHRoZSBsYXN0IHN0YXRlbWVudCBpbiBhIGJhc2ljIGJsb2NrLgoKJ2JzaV9lbmRfcCcKICAgICBUaGlzIHByZWRpY2F0ZSBpcyAndHJ1ZScgaWYgYSAnYmxvY2tfc3RtdF9pdGVyYXRvcicgcmVwcmVzZW50cyB0aGUKICAgICBlbmQgb2YgYSBiYXNpYyBibG9jay4KCidic2lfbmV4dCcKICAgICBUaGlzIGZ1bmN0aW9uIHRha2VzIGEgJ2Jsb2NrX3N0bXRfaXRlcmF0b3InIGFuZCBtYWtlcyBpdCBwb2ludCB0bwogICAgIGl0cyBzdWNjZXNzb3IuCgonYnNpX3ByZXYnCiAgICAgVGhpcyBmdW5jdGlvbiB0YWtlcyBhICdibG9ja19zdG10X2l0ZXJhdG9yJyBhbmQgbWFrZXMgaXQgcG9pbnQgdG8KICAgICBpdHMgcHJlZGVjZXNzb3IuCgonYnNpX2luc2VydF9hZnRlcicKICAgICBUaGlzIGZ1bmN0aW9uIGluc2VydHMgYSBzdGF0ZW1lbnQgYWZ0ZXIgdGhlICdibG9ja19zdG10X2l0ZXJhdG9yJwogICAgIHBhc3NlZCBpbi4gIFRoZSBmaW5hbCBwYXJhbWV0ZXIgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBzdGF0ZW1lbnQKICAgICBpdGVyYXRvciBpcyB1cGRhdGVkIHRvIHBvaW50IHRvIHRoZSBuZXdseSBpbnNlcnRlZCBzdGF0ZW1lbnQsIG9yCiAgICAgbGVmdCBwb2ludGluZyB0byB0aGUgb3JpZ2luYWwgc3RhdGVtZW50LgoKJ2JzaV9pbnNlcnRfYmVmb3JlJwogICAgIFRoaXMgZnVuY3Rpb24gaW5zZXJ0cyBhIHN0YXRlbWVudCBiZWZvcmUgdGhlICdibG9ja19zdG10X2l0ZXJhdG9yJwogICAgIHBhc3NlZCBpbi4gIFRoZSBmaW5hbCBwYXJhbWV0ZXIgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBzdGF0ZW1lbnQKICAgICBpdGVyYXRvciBpcyB1cGRhdGVkIHRvIHBvaW50IHRvIHRoZSBuZXdseSBpbnNlcnRlZCBzdGF0ZW1lbnQsIG9yCiAgICAgbGVmdCBwb2ludGluZyB0byB0aGUgb3JpZ2luYWwgc3RhdGVtZW50LgoKJ2JzaV9yZW1vdmUnCiAgICAgVGhpcyBmdW5jdGlvbiByZW1vdmVzIHRoZSAnYmxvY2tfc3RtdF9pdGVyYXRvcicgcGFzc2VkIGluIGFuZAogICAgIHJlY2hhaW5zIHRoZSByZW1haW5pbmcgc3RhdGVtZW50cyBpbiBhIGJhc2ljIGJsb2NrLCBpZiBhbnkuCgogSW4gdGhlIFJUTCByZXByZXNlbnRhdGlvbiwgdGhlIG1hY3JvcyAnQkJfSEVBRCcgYW5kICdCQl9FTkQnIG1heSBiZQp1c2VkIHRvIGdldCB0aGUgaGVhZCBhbmQgZW5kICdydHgnIG9mIGEgYmFzaWMgYmxvY2suICBObyBhYnN0cmFjdAppdGVyYXRvcnMgYXJlIGRlZmluZWQgZm9yIHRyYXZlcnNpbmcgdGhlIGluc24gY2hhaW4sIGJ1dCB5b3UgY2FuIGp1c3QKdXNlICdORVhUX0lOU04nIGFuZCAnUFJFVl9JTlNOJyBpbnN0ZWFkLiAgU2VlICpOb3RlIEluc25zOjouCgogVXN1YWxseSBhIGNvZGUgbWFuaXB1bGF0aW5nIHBhc3Mgc2ltcGxpZmllcyB0aGUgaW5zdHJ1Y3Rpb24gc3RyZWFtIGFuZAp0aGUgZmxvdyBvZiBjb250cm9sLCBwb3NzaWJseSBlbGltaW5hdGluZyBzb21lIGVkZ2VzLiAgVGhpcyBtYXkgZm9yCmV4YW1wbGUgaGFwcGVuIHdoZW4gYSBjb25kaXRpb25hbCBqdW1wIGlzIHJlcGxhY2VkIHdpdGggYW4gdW5jb25kaXRpb25hbApqdW1wLCBidXQgYWxzbyB3aGVuIHNpbXBsaWZ5aW5nIHBvc3NpYmx5IHRyYXBwaW5nIGluc3RydWN0aW9uIHRvCm5vbi10cmFwcGluZyB3aGlsZSBjb21waWxpbmcgSmF2YS4gIFVwZGF0aW5nIG9mIGVkZ2VzIGlzIG5vdCB0cmFuc3BhcmVudAphbmQgZWFjaCBvcHRpbWl6YXRpb24gcGFzcyBpcyByZXF1aXJlZCB0byBkbyBzbyBtYW51YWxseS4gIEhvd2V2ZXIgb25seQpmZXcgY2FzZXMgb2NjdXIgaW4gcHJhY3RpY2UuICBUaGUgcGFzcyBtYXkgY2FsbCAncHVyZ2VfZGVhZF9lZGdlcycgb24gYQpnaXZlbiBiYXNpYyBibG9jayB0byByZW1vdmUgc3VwZXJmbHVvdXMgZWRnZXMsIGlmIGFueS4KCiBBbm90aGVyIGNvbW1vbiBzY2VuYXJpbyBpcyByZWRpcmVjdGlvbiBvZiBicmFuY2ggaW5zdHJ1Y3Rpb25zLCBidXQgdGhpcwppcyBiZXN0IG1vZGVsZWQgYXMgcmVkaXJlY3Rpb24gb2YgZWRnZXMgaW4gdGhlIGNvbnRyb2wgZmxvdyBncmFwaCBhbmQKdGh1cyB1c2Ugb2YgJ3JlZGlyZWN0X2VkZ2VfYW5kX2JyYW5jaCcgaXMgcHJlZmVycmVkIG92ZXIgbW9yZSBsb3cgbGV2ZWwKZnVuY3Rpb25zLCBzdWNoIGFzICdyZWRpcmVjdF9qdW1wJyB0aGF0IG9wZXJhdGUgb24gUlRMIGNoYWluIG9ubHkuICBUaGUKQ0ZHIGhvb2tzIGRlZmluZWQgaW4gJ2NmZ2hvb2tzLmgnIHNob3VsZCBwcm92aWRlIHRoZSBjb21wbGV0ZSBBUEkKcmVxdWlyZWQgZm9yIG1hbmlwdWxhdGluZyBhbmQgbWFpbnRhaW5pbmcgdGhlIENGRy4KCiBJdCBpcyBhbHNvIHBvc3NpYmxlIHRoYXQgYSBwYXNzIGhhcyB0byBpbnNlcnQgY29udHJvbCBmbG93IGluc3RydWN0aW9uCmludG8gdGhlIG1pZGRsZSBvZiBhIGJhc2ljIGJsb2NrLCB0aHVzIGNyZWF0aW5nIGFuIGVudHJ5IHBvaW50IGluIHRoZQptaWRkbGUgb2YgdGhlIGJhc2ljIGJsb2NrLCB3aGljaCBpcyBpbXBvc3NpYmxlIGJ5IGRlZmluaXRpb246IFRoZSBibG9jawptdXN0IGJlIHNwbGl0IHRvIG1ha2Ugc3VyZSBpdCBvbmx5IGhhcyBvbmUgZW50cnkgcG9pbnQsIGkuZS4gdGhlIGhlYWQgb2YKdGhlIGJhc2ljIGJsb2NrLiAgVGhlIENGRyBob29rICdzcGxpdF9ibG9jaycgbWF5IGJlIHVzZWQgd2hlbiBhbgppbnN0cnVjdGlvbiBpbiB0aGUgbWlkZGxlIG9mIGEgYmFzaWMgYmxvY2sgaGFzIHRvIGJlY29tZSB0aGUgdGFyZ2V0IG9mIGEKanVtcCBvciBicmFuY2ggaW5zdHJ1Y3Rpb24uCgogRm9yIGEgZ2xvYmFsIG9wdGltaXplciwgYSBjb21tb24gb3BlcmF0aW9uIGlzIHRvIHNwbGl0IGVkZ2VzIGluIHRoZQpmbG93IGdyYXBoIGFuZCBpbnNlcnQgaW5zdHJ1Y3Rpb25zIG9uIHRoZW0uICBJbiB0aGUgUlRMIHJlcHJlc2VudGF0aW9uLAp0aGlzIGNhbiBiZSBlYXNpbHkgZG9uZSB1c2luZyB0aGUgJ2luc2VydF9pbnNuX29uX2VkZ2UnIGZ1bmN0aW9uIHRoYXQKZW1pdHMgYW4gaW5zdHJ1Y3Rpb24gIm9uIHRoZSBlZGdlIiwgY2FjaGluZyBpdCBmb3IgYSBsYXRlcgonY29tbWl0X2VkZ2VfaW5zZXJ0aW9ucycgY2FsbCB0aGF0IHdpbGwgdGFrZSBjYXJlIG9mIG1vdmluZyB0aGUgaW5zZXJ0ZWQKaW5zdHJ1Y3Rpb25zIG9mZiB0aGUgZWRnZSBpbnRvIHRoZSBpbnN0cnVjdGlvbiBzdHJlYW0gY29udGFpbmVkIGluIGEKYmFzaWMgYmxvY2suICBUaGlzIGluY2x1ZGVzIHRoZSBjcmVhdGlvbiBvZiBuZXcgYmFzaWMgYmxvY2tzIHdoZXJlCm5lZWRlZC4gIEluIHRoZSAndHJlZScgcmVwcmVzZW50YXRpb24sIHRoZSBlcXVpdmFsZW50IGZ1bmN0aW9ucyBhcmUKJ2JzaV9pbnNlcnRfb25fZWRnZScgd2hpY2ggaW5zZXJ0cyBhIGJsb2NrIHN0YXRlbWVudCBpdGVyYXRvciBvbiBhbgplZGdlLCBhbmQgJ2JzaV9jb21taXRfZWRnZV9pbnNlcnRzJyB3aGljaCBmbHVzaGVzIHRoZSBpbnN0cnVjdGlvbiB0bwphY3R1YWwgaW5zdHJ1Y3Rpb24gc3RyZWFtLgoKIFdoaWxlIGRlYnVnZ2luZyB0aGUgb3B0aW1pemF0aW9uIHBhc3MsIGFuICd2ZXJpZnlfZmxvd19pbmZvJyBmdW5jdGlvbgptYXkgYmUgdXNlZnVsIHRvIGZpbmQgYnVncyBpbiB0aGUgY29udHJvbCBmbG93IGdyYXBoIHVwZGF0aW5nIGNvZGUuCgogTm90ZSB0aGF0IGF0IHByZXNlbnQsIHRoZSByZXByZXNlbnRhdGlvbiBvZiBjb250cm9sIGZsb3cgaW4gdGhlICd0cmVlJwpyZXByZXNlbnRhdGlvbiBpcyBkaXNjYXJkZWQgYmVmb3JlIGV4cGFuZGluZyB0byBSVEwuICBMb25nIHRlcm0gdGhlIENGRwpzaG91bGQgYmUgbWFpbnRhaW5lZCBhbmQgImV4cGFuZGVkIiB0byB0aGUgUlRMIHJlcHJlc2VudGF0aW9uIGFsb25nIHdpdGgKdGhlIGZ1bmN0aW9uICd0cmVlJyBpdHNlbGYuCgofCkZpbGU6IGdjY2ludC5pbmZvLCAgTm9kZTogTGl2ZW5lc3MgaW5mb3JtYXRpb24sICBQcmV2OiBNYWludGFpbmluZyB0aGUgQ0ZHLCAgVXA6IENvbnRyb2wgRmxvdwoKMTMuNSBMaXZlbmVzcyBpbmZvcm1hdGlvbgo9PT09PT09PT09PT09PT09PT09PT09PT09CgpMaXZlbmVzcyBpbmZvcm1hdGlvbiBpcyB1c2VmdWwgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgc29tZSByZWdpc3RlciBpcwoibGl2ZSIgYXQgZ2l2ZW4gcG9pbnQgb2YgcHJvZ3JhbSwgaS5lLiB0aGF0IGl0IGNvbnRhaW5zIGEgdmFsdWUgdGhhdCBtYXkKYmUgdXNlZCBhdCBhIGxhdGVyIHBvaW50IGluIHRoZSBwcm9ncmFtLiAgVGhpcyBpbmZvcm1hdGlvbiBpcyB1c2VkLCBmb3IKaW5zdGFuY2UsIGR1cmluZyByZWdpc3RlciBhbGxvY2F0aW9uLCBhcyB0aGUgcHNldWRvIHJlZ2lzdGVycyBvbmx5IG5lZWQKdG8gYmUgYXNzaWduZWQgdG8gYSB1bmlxdWUgaGFyZCByZWdpc3RlciBvciB0byBhIHN0YWNrIHNsb3QgaWYgdGhleSBhcmUKbGl2ZS4gIFRoZSBoYXJkIHJlZ2lzdGVycyBhbmQgc3RhY2sgc2xvdHMgbWF5IGJlIGZyZWVseSByZXVzZWQgZm9yIG90aGVyCnZhbHVlcyB3aGVuIGEgcmVnaXN0ZXIgaXMgZGVhZC4KCiBMaXZlbmVzcyBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUgaW4gdGhlIGJhY2sgZW5kIHN0YXJ0aW5nIHdpdGgKJ3Bhc3NfZGZfaW5pdGlhbGl6ZScgYW5kIGVuZGluZyB3aXRoICdwYXNzX2RmX2ZpbmlzaCcuICBUaHJlZSBmbGF2b3JzIG9mCmxpdmUgYW5hbHlzaXMgYXJlIGF2YWlsYWJsZTogV2l0aCAnTFInLCBpdCBpcyBwb3NzaWJsZSB0byBkZXRlcm1pbmUgYXQKYW55IHBvaW50ICdQJyBpbiB0aGUgZnVuY3Rpb24gaWYgdGhlIHJlZ2lzdGVyIG1heSBiZSB1c2VkIG9uIHNvbWUgcGF0aApmcm9tICdQJyB0byB0aGUgZW5kIG9mIHRoZSBmdW5jdGlvbi4gIFdpdGggJ1VSJywgaXQgaXMgcG9zc2libGUgdG8KZGV0ZXJtaW5lIGlmIHRoZXJlIGlzIGEgcGF0aCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZ1bmN0aW9uIHRvICdQJwp0aGF0IGRlZmluZXMgdGhlIHZhcmlhYmxlLiAgJ0xJVkUnIGlzIHRoZSBpbnRlcnNlY3Rpb24gb2YgdGhlICdMUicgYW5kCidVUicgYW5kIGEgdmFyaWFibGUgaXMgbGl2ZSBhdCAnUCcgaWYgdGhlcmUgaXMgYm90aCBhbiBhc3NpZ25tZW50IHRoYXQKcmVhY2hlcyBpdCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZ1bmN0aW9uIGFuZCBhIHVzZXMgdGhhdCBjYW4gYmUKcmVhY2hlZCBvbiBzb21lIHBhdGggZnJvbSAnUCcgdG8gdGhlIGVuZCBvZiB0aGUgZnVuY3Rpb24uCgogSW4gZ2VuZXJhbCAnTElWRScgaXMgdGhlIG1vc3QgdXNlZnVsIG9mIHRoZSB0aHJlZS4gIFRoZSBtYWNyb3MKJ0RGX1tMUixVUixMSVZFXV9bSU4sT1VUXScgY2FuIGJlIHVzZWQgdG8gYWNjZXNzIHRoaXMgaW5mb3JtYXRpb24uICBUaGUKbWFjcm9zIHRha2UgYSBiYXNpYyBibG9jayBudW1iZXIgYW5kIHJldHVybiBhIGJpdG1hcCB0aGF0IGlzIGluZGV4ZWQgYnkKdGhlIHJlZ2lzdGVyIG51bWJlci4gIFRoaXMgaW5mb3JtYXRpb24gaXMgb25seSBndWFyYW50ZWVkIHRvIGJlIHVwIHRvCmRhdGUgYWZ0ZXIgY2FsbHMgYXJlIG1hZGUgdG8gJ2RmX2FuYWx5emUnLiAgU2VlIHRoZSBmaWxlICdkZi1jb3JlLmMnIGZvcgpkZXRhaWxzIG9uIHVzaW5nIHRoZSBkYXRhZmxvdy4KCiBUaGUgbGl2ZW5lc3MgaW5mb3JtYXRpb24gaXMgc3RvcmVkIHBhcnRseSBpbiB0aGUgUlRMIGluc3RydWN0aW9uIHN0cmVhbQphbmQgcGFydGx5IGluIHRoZSBmbG93IGdyYXBoLiAgTG9jYWwgaW5mb3JtYXRpb24gaXMgc3RvcmVkIGluIHRoZQppbnN0cnVjdGlvbiBzdHJlYW06IEVhY2ggaW5zdHJ1Y3Rpb24gbWF5IGNvbnRhaW4gJ1JFR19ERUFEJyBub3RlcwpyZXByZXNlbnRpbmcgdGhhdCB0aGUgdmFsdWUgb2YgYSBnaXZlbiByZWdpc3RlciBpcyBubyBsb25nZXIgbmVlZGVkLCBvcgonUkVHX1VOVVNFRCcgbm90ZXMgcmVwcmVzZW50aW5nIHRoYXQgdGhlIHZhbHVlIGNvbXB1dGVkIGJ5IHRoZQppbnN0cnVjdGlvbiBpcyBuZXZlciB1c2VkLiAgVGhlIHNlY29uZCBpcyB1c2VmdWwgZm9yIGluc3RydWN0aW9ucwpjb21wdXRpbmcgbXVsdGlwbGUgdmFsdWVzIGF0IG9uY2UuCgofCkZpbGU6IGdjY2ludC5pbmZvLCAgTm9kZTogTWFjaGluZSBEZXNjLCAgTmV4dDogVGFyZ2V0IE1hY3JvcywgIFByZXY6IENvbnRyb2wgRmxvdywgIFVwOiBUb3AKCjE0IE1hY2hpbmUgRGVzY3JpcHRpb25zCioqKioqKioqKioqKioqKioqKioqKioqCgpBIG1hY2hpbmUgZGVzY3JpcHRpb24gaGFzIHR3byBwYXJ0czogYSBmaWxlIG9mIGluc3RydWN0aW9uIHBhdHRlcm5zCignLm1kJyBmaWxlKSBhbmQgYSBDIGhlYWRlciBmaWxlIG9mIG1hY3JvIGRlZmluaXRpb25zLgoKIFRoZSAnLm1kJyBmaWxlIGZvciBhIHRhcmdldCBtYWNoaW5lIGNvbnRhaW5zIGEgcGF0dGVybiBmb3IgZWFjaAppbnN0cnVjdGlvbiB0aGF0IHRoZSB0YXJnZXQgbWFjaGluZSBzdXBwb3J0cyAob3IgYXQgbGVhc3QgZWFjaAppbnN0cnVjdGlvbiB0aGF0IGlzIHdvcnRoIHRlbGxpbmcgdGhlIGNvbXBpbGVyIGFib3V0KS4gIEl0IG1heSBhbHNvCmNvbnRhaW4gY29tbWVudHMuICBBIHNlbWljb2xvbiBjYXVzZXMgdGhlIHJlc3Qgb2YgdGhlIGxpbmUgdG8gYmUgYQpjb21tZW50LCB1bmxlc3MgdGhlIHNlbWljb2xvbiBpcyBpbnNpZGUgYSBxdW90ZWQgc3RyaW5nLgoKIFNlZSB0aGUgbmV4dCBjaGFwdGVyIGZvciBpbmZvcm1hdGlvbiBvbiB0aGUgQyBoZWFkZXIgZmlsZS4KCiogTWVudToKCiogT3ZlcnZpZXc6OiAgICAgICAgICAgIEhvdyB0aGUgbWFjaGluZSBkZXNjcmlwdGlvbiBpcyB1c2VkLgoqIFBhdHRlcm5zOjogICAgICAgICAgICBIb3cgdG8gd3JpdGUgaW5zdHJ1Y3Rpb24gcGF0dGVybnMuCiogRXhhbXBsZTo6ICAgICAgICAgICAgIEFuIGV4cGxhaW5lZCBleGFtcGxlIG9mIGEgJ2RlZmluZV9pbnNuJyBwYXR0ZXJuLgoqIFJUTCBUZW1wbGF0ZTo6ICAgICAgICBUaGUgUlRMIHRlbXBsYXRlIGRlZmluZXMgd2hhdCBpbnNucyBtYXRjaCBhIHBhdHRlcm4uCiogT3V0cHV0IFRlbXBsYXRlOjogICAgIFRoZSBvdXRwdXQgdGVtcGxhdGUgc2F5cyBob3cgdG8gbWFrZSBhc3NlbWJsZXIgY29kZQogICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gc3VjaCBhbiBpbnNuLgoqIE91dHB1dCBTdGF0ZW1lbnQ6OiAgICBGb3IgbW9yZSBnZW5lcmFsaXR5LCB3cml0ZSBDIGNvZGUgdG8gb3V0cHV0CiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGFzc2VtYmxlciBjb2RlLgoqIFByZWRpY2F0ZXM6OiAgICAgICAgICBDb250cm9sbGluZyB3aGF0IGtpbmRzIG9mIG9wZXJhbmRzIGNhbiBiZSB1c2VkCiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGFuIGluc24uCiogQ29uc3RyYWludHM6OiAgICAgICAgIEZpbmUtdHVuaW5nIG9wZXJhbmQgc2VsZWN0aW9uLgoqIFN0YW5kYXJkIE5hbWVzOjogICAgICBOYW1lcyBtYXJrIHBhdHRlcm5zIHRvIHVzZSBmb3IgY29kZSBnZW5lcmF0aW9uLgoqIFBhdHRlcm4gT3JkZXJpbmc6OiAgICBXaGVuIHRoZSBvcmRlciBvZiBwYXR0ZXJucyBtYWtlcyBhIGRpZmZlcmVuY2UuCiogRGVwZW5kZW50IFBhdHRlcm5zOjogIEhhdmluZyBvbmUgcGF0dGVybiBtYXkgbWFrZSB5b3UgbmVlZCBhbm90aGVyLgoqIEp1bXAgUGF0dGVybnM6OiAgICAgICBTcGVjaWFsIGNvbnNpZGVyYXRpb25zIGZvciBwYXR0ZXJucyBmb3IganVtcCBpbnNucy4KKiBMb29waW5nIFBhdHRlcm5zOjogICAgSG93IHRvIGRlZmluZSBwYXR0ZXJucyBmb3Igc3BlY2lhbCBsb29waW5nIGluc25zLgoqIEluc24gQ2Fub25pY2FsaXphdGlvbnM6OkNhbm9uaWNhbGl6YXRpb24gb2YgSW5zdHJ1Y3Rpb25zCiogRXhwYW5kZXIgRGVmaW5pdGlvbnM6OkdlbmVyYXRpbmcgYSBzZXF1ZW5jZSBvZiBzZXZlcmFsIFJUTCBpbnNucwogICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhIHN0YW5kYXJkIG9wZXJhdGlvbi4KKiBJbnNuIFNwbGl0dGluZzo6ICAgICAgU3BsaXR0aW5nIEluc3RydWN0aW9ucyBpbnRvIE11bHRpcGxlIEluc3RydWN0aW9ucy4KKiBJbmNsdWRpbmcgUGF0dGVybnM6OiAgICAgIEluY2x1ZGluZyBQYXR0ZXJucyBpbiBNYWNoaW5lIERlc2NyaXB0aW9ucy4KKiBQZWVwaG9sZSBEZWZpbml0aW9uczo6RGVmaW5pbmcgbWFjaGluZS1zcGVjaWZpYyBwZWVwaG9sZSBvcHRpbWl6YXRpb25zLgoqIEluc24gQXR0cmlidXRlczo6ICAgICBTcGVjaWZ5aW5nIHRoZSB2YWx1ZSBvZiBhdHRyaWJ1dGVzIGZvciBnZW5lcmF0ZWQgaW5zbnMuCiogQ29uZGl0aW9uYWwgRXhlY3V0aW9uOjpHZW5lcmF0aW5nICdkZWZpbmVfaW5zbicgcGF0dGVybnMgZm9yCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWRpY2F0aW9uLgoqIENvbnN0YW50IERlZmluaXRpb25zOjpEZWZpbmluZyBzeW1ib2xpYyBjb25zdGFudHMgdGhhdCBjYW4gYmUgdXNlZCBpbiB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgbWQgZmlsZS4KKiBJdGVyYXRvcnM6OiAgICAgICAgICAgVXNpbmcgaXRlcmF0b3JzIHRvIGdlbmVyYXRlIHBhdHRlcm5zIGZyb20gYSB0ZW1wbGF0ZS4KCh8KRmlsZTogZ2NjaW50LmluZm8sICBOb2RlOiBPdmVydmlldywgIE5leHQ6IFBhdHRlcm5zLCAgVXA6IE1hY2hpbmUgRGVzYwoKMTQuMSBPdmVydmlldyBvZiBIb3cgdGhlIE1hY2hpbmUgRGVzY3JpcHRpb24gaXMgVXNlZAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpUaGVyZSBhcmUgdGhyZWUgbWFpbiBjb252ZXJzaW9ucyB0aGF0IGhhcHBlbiBpbiB0aGUgY29tcGlsZXI6CgogIDEuIFRoZSBmcm9udCBlbmQgcmVhZHMgdGhlIHNvdXJjZSBjb2RlIGFuZCBidWlsZHMgYSBwYXJzZSB0cmVlLgoKICAyLiBUaGUgcGFyc2UgdHJlZSBpcyB1c2VkIHRvIGdlbmVyYXRlIGFuIFJUTCBpbnNuIGxpc3QgYmFzZWQgb24gbmFtZWQKICAgICBpbnN0cnVjdGlvbiBwYXR0ZXJucy4KCiAgMy4gVGhlIGluc24gbGlzdCBpcyBtYXRjaGVkIGFnYWluc3QgdGhlIFJUTCB0ZW1wbGF0ZXMgdG8gcHJvZHVjZQogICAgIGFzc2VtYmxlciBjb2RlLgoKIEZvciB0aGUgZ2VuZXJhdGUgcGFzcywgb25seSB0aGUgbmFtZXMgb2YgdGhlIGluc25zIG1hdHRlciwgZnJvbSBlaXRoZXIKYSBuYW1lZCAnZGVmaW5lX2luc24nIG9yIGEgJ2RlZmluZV9leHBhbmQnLiAgVGhlIGNvbXBpbGVyIHdpbGwgY2hvb3NlCnRoZSBwYXR0ZXJuIHdpdGggdGhlIHJpZ2h0IG5hbWUgYW5kIGFwcGx5IHRoZSBvcGVyYW5kcyBhY2NvcmRpbmcgdG8gdGhlCmRvY3VtZW50YXRpb24gbGF0ZXIgaW4gdGhpcyBjaGFwdGVyLCB3aXRob3V0IHJlZ2FyZCBmb3IgdGhlIFJUTCB0ZW1wbGF0ZQpvciBvcGVyYW5kIGNvbnN0cmFpbnRzLiAgTm90ZSB0aGF0IHRoZSBuYW1lcyB0aGUgY29tcGlsZXIgbG9va3MgZm9yIGFyZQpoYXJkLWNvZGVkIGluIHRoZSBjb21waWxlci0taXQgd2lsbCBpZ25vcmUgdW5uYW1lZCBwYXR0ZXJucyBhbmQgcGF0dGVybnMKd2l0aCBuYW1lcyBpdCBkb2Vzbid0IGtub3cgYWJvdXQsIGJ1dCBpZiB5b3UgZG9uJ3QgcHJvdmlkZSBhIG5hbWVkCnBhdHRlcm4gaXQgbmVlZHMsIGl0IHdpbGwgYWJvcnQuCgogSWYgYSAnZGVmaW5lX2luc24nIGlzIHVzZWQsIHRoZSB0ZW1wbGF0ZSBnaXZlbiBpcyBpbnNlcnRlZCBpbnRvIHRoZQppbnNuIGxpc3QuICBJZiBhICdkZWZpbmVfZXhwYW5kJyBpcyB1c2VkLCBvbmUgb2YgdGhyZWUgdGhpbmdzIGhhcHBlbnMsCmJhc2VkIG9uIHRoZSBjb25kaXRpb24gbG9naWMuICBUaGUgY29uZGl0aW9uIGxvZ2ljIG1heSBtYW51YWxseSBjcmVhdGUKbmV3IGluc25zIGZvciB0aGUgaW5zbiBsaXN0LCBzYXkgdmlhICdlbWl0X2luc24oKScsIGFuZCBpbnZva2UgJ0RPTkUnLgpGb3IgY2VydGFpbiBuYW1lZCBwYXR0ZXJucywgaXQgbWF5IGludm9rZSAnRkFJTCcgdG8gdGVsbCB0aGUgY29tcGlsZXIgdG8KdXNlIGFuIGFsdGVybmF0ZSB3YXkgb2YgcGVyZm9ybWluZyB0aGF0IHRhc2suICBJZiBpdCBpbnZva2VzIG5laXRoZXIKJ0RPTkUnIG5vciAnRkFJTCcsIHRoZSB0ZW1wbGF0ZSBnaXZlbiBpbiB0aGUgcGF0dGVybiBpcyBpbnNlcnRlZCwgYXMgaWYKdGhlICdkZWZpbmVfZXhwYW5kJyB3ZXJlIGEgJ2RlZmluZV9pbnNuJy4KCiBPbmNlIHRoZSBpbnNuIGxpc3QgaXMgZ2VuZXJhdGVkLCB2YXJpb3VzIG9wdGltaXphdGlvbiBwYXNzZXMgY29udmVydCwKcmVwbGFjZSwgYW5kIHJlYXJyYW5nZSB0aGUgaW5zbnMgaW4gdGhlIGluc24gbGlzdC4gIFRoaXMgaXMgd2hlcmUgdGhlCidkZWZpbmVfc3BsaXQnIGFuZCAnZGVmaW5lX3BlZXBob2xlJyBwYXR0ZXJucyBnZXQgdXNlZCwgZm9yIGV4YW1wbGUuCgogRmluYWxseSwgdGhlIGluc24gbGlzdCdzIFJUTCBpcyBtYXRjaGVkIHVwIHdpdGggdGhlIFJUTCB0ZW1wbGF0ZXMgaW4KdGhlICdkZWZpbmVfaW5zbicgcGF0dGVybnMsIGFuZCB0aG9zZSBwYXR0ZXJucyBhcmUgdXNlZCB0byBlbWl0IHRoZQpmaW5hbCBhc3NlbWJseSBjb2RlLiAgRm9yIHRoaXMgcHVycG9zZSwgZWFjaCBuYW1lZCAnZGVmaW5lX2luc24nIGFjdHMKbGlrZSBpdCdzIHVubmFtZWQsIHNpbmNlIHRoZSBuYW1lcyBhcmUgaWdub3JlZC4KCh8KRmlsZTogZ2NjaW50LmluZm8sICBOb2RlOiBQYXR0ZXJucywgIE5leHQ6IEV4YW1wbGUsICBQcmV2OiBPdmVydmlldywgIFVwOiBNYWNoaW5lIERlc2MKCjE0LjIgRXZlcnl0aGluZyBhYm91dCBJbnN0cnVjdGlvbiBQYXR0ZXJucwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCkVhY2ggaW5zdHJ1Y3Rpb24gcGF0dGVybiBjb250YWlucyBhbiBpbmNvbXBsZXRlIFJUTCBleHByZXNzaW9uLCB3aXRoCnBpZWNlcyB0byBiZSBmaWxsZWQgaW4gbGF0ZXIsIG9wZXJhbmQgY29uc3RyYWludHMgdGhhdCByZXN0cmljdCBob3cgdGhlCnBpZWNlcyBjYW4gYmUgZmlsbGVkIGluLCBhbmQgYW4gb3V0cHV0IHBhdHRlcm4gb3IgQyBjb2RlIHRvIGdlbmVyYXRlIHRoZQphc3NlbWJsZXIgb3V0cHV0LCBhbGwgd3JhcHBlZCB1cCBpbiBhICdkZWZpbmVfaW5zbicgZXhwcmVzc2lvbi4KCiBBICdkZWZpbmVfaW5zbicgaXMgYW4gUlRMIGV4cHJlc3Npb24gY29udGFpbmluZyBmb3VyIG9yIGZpdmUgb3BlcmFuZHM6CgogIDEuIEFuIG9wdGlvbmFsIG5hbWUuICBUaGUgcHJlc2VuY2Ugb2YgYSBuYW1lIGluZGljYXRlIHRoYXQgdGhpcwogICAgIGluc3RydWN0aW9uIHBhdHRlcm4gY2FuIHBlcmZvcm0gYSBjZXJ0YWluIHN0YW5kYXJkIGpvYiBmb3IgdGhlCiAgICAgUlRMLWdlbmVyYXRpb24gcGFzcyBvZiB0aGUgY29tcGlsZXIuICBUaGlzIHBhc3Mga25vd3MgY2VydGFpbiBuYW1lcwogICAgIGFuZCB3aWxsIHVzZSB0aGUgaW5zdHJ1Y3Rpb24gcGF0dGVybnMgd2l0aCB0aG9zZSBuYW1lcywgaWYgdGhlCiAgICAgbmFtZXMgYXJlIGRlZmluZWQgaW4gdGhlIG1hY2hpbmUgZGVzY3JpcHRpb24uCgogICAgIFRoZSBhYnNlbmNlIG9mIGEgbmFtZSBpcyBpbmRpY2F0ZWQgYnkgd3JpdGluZyBhbiBlbXB0eSBzdHJpbmcgd2hlcmUKICAgICB0aGUgbmFtZSBzaG91bGQgZ28uICBOYW1lbGVzcyBpbnN0cnVjdGlvbiBwYXR0ZXJucyBhcmUgbmV2ZXIgdXNlZAogICAgIGZvciBnZW5lcmF0aW5nIFJUTCBjb2RlLCBidXQgdGhleSBtYXkgcGVybWl0IHNldmVyYWwgc2ltcGxlciBpbnNucwogICAgIHRvIGJlIGNvbWJpbmVkIGxhdGVyIG9uLgoKICAgICBOYW1lcyB0aGF0IGFyZSBub3QgdGh1cyBrbm93biBhbmQgdXNlZCBpbiBSVEwtZ2VuZXJhdGlvbiBoYXZlIG5vCiAgICAgZWZmZWN0OyB0aGV5IGFyZSBlcXVpdmFsZW50IHRvIG5vIG5hbWUgYXQgYWxsLgoKICAgICBGb3IgdGhlIHB1cnBvc2Ugb2YgZGVidWdnaW5nIHRoZSBjb21waWxlciwgeW91IG1heSBhbHNvIHNwZWNpZnkgYQogICAgIG5hbWUgYmVnaW5uaW5nIHdpdGggdGhlICcqJyBjaGFyYWN0ZXIuICBTdWNoIGEgbmFtZSBpcyB1c2VkIG9ubHkKICAgICBmb3IgaWRlbnRpZnlpbmcgdGhlIGluc3RydWN0aW9uIGluIFJUTCBkdW1wczsgaXQgaXMgZW50aXJlbHkKICAgICBlcXVpdmFsZW50IHRvIGhhdmluZyBhIG5hbWVsZXNzIHBhdHRlcm4gZm9yIGFsbCBvdGhlciBwdXJwb3Nlcy4KCiAgMi4gVGhlICJSVEwgdGVtcGxhdGUiICgqbm90ZSBSVEwgVGVtcGxhdGU6OikgaXMgYSB2ZWN0b3Igb2YgaW5jb21wbGV0ZQogICAgIFJUTCBleHByZXNzaW9ucyB3aGljaCBzaG93IHdoYXQgdGhlIGluc3RydWN0aW9uIHNob3VsZCBsb29rIGxpa2UuCiAgICAgSXQgaXMgaW5jb21wbGV0ZSBiZWNhdXNlIGl0IG1heSBjb250YWluICdtYXRjaF9vcGVyYW5kJywKICAgICAnbWF0Y2hfb3BlcmF0b3InLCBhbmQgJ21hdGNoX2R1cCcgZXhwcmVzc2lvbnMgdGhhdCBzdGFuZCBmb3IKICAgICBvcGVyYW5kcyBvZiB0aGUgaW5zdHJ1Y3Rpb24uCgogICAgIElmIHRoZSB2ZWN0b3IgaGFzIG9ubHkgb25lIGVsZW1lbnQsIHRoYXQgZWxlbWVudCBpcyB0aGUgdGVtcGxhdGUKICAgICBmb3IgdGhlIGluc3RydWN0aW9uIHBhdHRlcm4uICBJZiB0aGUgdmVjdG9yIGhhcyBtdWx0aXBsZSBlbGVtZW50cywKICAgICB0aGVuIHRoZSBpbnN0cnVjdGlvbiBwYXR0ZXJuIGlzIGEgJ3BhcmFsbGVsJyBleHByZXNzaW9uIGNvbnRhaW5pbmcKICAgICB0aGUgZWxlbWVudHMgZGVzY3JpYmVkLgoKICAzLiBBIGNvbmRpdGlvbi4gIFRoaXMgaXMgYSBzdHJpbmcgd2hpY2ggY29udGFpbnMgYSBDIGV4cHJlc3Npb24gdGhhdAogICAgIGlzIHRoZSBmaW5hbCB0ZXN0IHRvIGRlY2lkZSB3aGV0aGVyIGFuIGluc24gYm9keSBtYXRjaGVzIHRoaXMKICAgICBwYXR0ZXJuLgoKICAgICBGb3IgYSBuYW1lZCBwYXR0ZXJuLCB0aGUgY29uZGl0aW9uIChpZiBwcmVzZW50KSBtYXkgbm90IGRlcGVuZCBvbgogICAgIHRoZSBkYXRhIGluIHRoZSBpbnNuIGJlaW5nIG1hdGNoZWQsIGJ1dCBvbmx5IHRoZQogICAgIHRhcmdldC1tYWNoaW5lLXR5cGUgZmxhZ3MuICBUaGUgY29tcGlsZXIgbmVlZHMgdG8gdGVzdCB0aGVzZQogICAgIGNvbmRpdGlvbnMgZHVyaW5nIGluaXRpYWxpemF0aW9uIGluIG9yZGVyIHRvIGxlYXJuIGV4YWN0bHkgd2hpY2gKICAgICBuYW1lZCBpbnN0cnVjdGlvbnMgYXJlIGF2YWlsYWJsZSBpbiBhIHBhcnRpY3VsYXIgcnVuLgoKICAgICBGb3IgbmFtZWxlc3MgcGF0dGVybnMsIHRoZSBjb25kaXRpb24gaXMgYXBwbGllZCBvbmx5IHdoZW4gbWF0Y2hpbmcKICAgICBhbiBpbmRpdmlkdWFsIGluc24sIGFuZCBvbmx5IGFmdGVyIHRoZSBpbnNuIGhhcyBtYXRjaGVkIHRoZQogICAgIHBhdHRlcm4ncyByZWNvZ25pdGlvbiB0ZW1wbGF0ZS4gIFRoZSBpbnNuJ3Mgb3BlcmFuZHMgbWF5IGJlIGZvdW5kCiAgICAgaW4gdGhlIHZlY3RvciAnb3BlcmFuZHMnLiAgRm9yIGFuIGluc24gd2hlcmUgdGhlIGNvbmRpdGlvbiBoYXMgb25jZQogICAgIG1hdGNoZWQsIGl0IGNhbid0IGJlIHVzZWQgdG8gY29udHJvbCByZWdpc3RlciBhbGxvY2F0aW9uLCBmb3IKICAgICBleGFtcGxlIGJ5IGV4Y2x1ZGluZyBjZXJ0YWluIGhhcmQgcmVnaXN0ZXJzIG9yIGhhcmQgcmVnaXN0ZXIKICAgICBjb21iaW5hdGlvbnMuCgogIDQuIFRoZSAib3V0cHV0IHRlbXBsYXRlIjogYSBzdHJpbmcgdGhhdCBzYXlzIGhvdyB0byBvdXRwdXQgbWF0Y2hpbmcKICAgICBpbnNucyBhcyBhc3NlbWJsZXIgY29kZS4gICclJyBpbiB0aGlzIHN0cmluZyBzcGVjaWZpZXMgd2hlcmUgdG8KICAgICBzdWJzdGl0dXRlIHRoZSB2YWx1ZSBvZiBhbiBvcGVyYW5kLiAgKk5vdGUgT3V0cHV0IFRlbXBsYXRlOjouCgogICAgIFdoZW4gc2ltcGxlIHN1YnN0aXR1dGlvbiBpc24ndCBnZW5lcmFsIGVub3VnaCwgeW91IGNhbiBzcGVjaWZ5IGEKICAgICBwaWVjZSBvZiBDIGNvZGUgdG8gY29tcHV0ZSB0aGUgb3V0cHV0LiAgKk5vdGUgT3V0cHV0IFN0YXRlbWVudDo6LgoKICA1LiBPcHRpb25hbGx5LCBhIHZlY3RvciBjb250YWluaW5nIHRoZSB2YWx1ZXMgb2YgYXR0cmlidXRlcyBmb3IgaW5zbnMKICAgICBtYXRjaGluZyB0aGlzIHBhdHRlcm4uICAqTm90ZSBJbnNuIEF0dHJpYnV0ZXM6Oi4KCh8KRmlsZTogZ2NjaW50LmluZm8sICBOb2RlOiBFeGFtcGxlLCAgTmV4dDogUlRMIFRlbXBsYXRlLCAgUHJldjogUGF0dGVybnMsICBVcDogTWFjaGluZSBEZXNjCgoxNC4zIEV4YW1wbGUgb2YgJ2RlZmluZV9pbnNuJwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKSGVyZSBpcyBhbiBhY3R1YWwgZXhhbXBsZSBvZiBhbiBpbnN0cnVjdGlvbiBwYXR0ZXJuLCBmb3IgdGhlCjY4MDAwLzY4MDIwLgoKICAgICAoZGVmaW5lX2luc24gInRzdHNpIgogICAgICAgWyhzZXQgKGNjMCkKICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOlNJIDAgImdlbmVyYWxfb3BlcmFuZCIgInJtIikpXQogICAgICAgIiIKICAgICAgICIqCiAgICAgewogICAgICAgaWYgKFRBUkdFVF82ODAyMCB8fCAhIEFERFJFU1NfUkVHX1AgKG9wZXJhbmRzWzBdKSkKICAgICAgICAgcmV0dXJuIFwidHN0bCAlMFwiOwogICAgICAgcmV0dXJuIFwiY21wbCAjMCwlMFwiOwogICAgIH0iKQoKVGhpcyBjYW4gYWxzbyBiZSB3cml0dGVuIHVzaW5nIGJyYWNlZCBzdHJpbmdzOgoKICAgICAoZGVmaW5lX2luc24gInRzdHNpIgogICAgICAgWyhzZXQgKGNjMCkKICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOlNJIDAgImdlbmVyYWxfb3BlcmFuZCIgInJtIikpXQogICAgICAgIiIKICAgICB7CiAgICAgICBpZiAoVEFSR0VUXzY4MDIwIHx8ICEgQUREUkVTU19SRUdfUCAob3BlcmFuZHNbMF0pKQogICAgICAgICByZXR1cm4gInRzdGwgJTAiOwogICAgICAgcmV0dXJuICJjbXBsICMwLCUwIjsKICAgICB9KQoKIFRoaXMgaXMgYW4gaW5zdHJ1Y3Rpb24gdGhhdCBzZXRzIHRoZSBjb25kaXRpb24gY29kZXMgYmFzZWQgb24gdGhlIHZhbHVlCm9mIGEgZ2VuZXJhbCBvcGVyYW5kLiAgSXQgaGFzIG5vIGNvbmRpdGlvbiwgc28gYW55IGluc24gd2hvc2UgUlRMCmRlc2NyaXB0aW9uIGhhcyB0aGUgZm9ybSBzaG93biBtYXkgYmUgaGFuZGxlZCBhY2NvcmRpbmcgdG8gdGhpcyBwYXR0ZXJuLgpUaGUgbmFtZSAndHN0c2knIG1lYW5zICJ0ZXN0IGEgJ1NJbW9kZScgdmFsdWUiIGFuZCB0ZWxscyB0aGUgUlRMCmdlbmVyYXRpb24gcGFzcyB0aGF0LCB3aGVuIGl0IGlzIG5lY2Vzc2FyeSB0byB0ZXN0IHN1Y2ggYSB2YWx1ZSwgYW4gaW5zbgp0byBkbyBzbyBjYW4gYmUgY29uc3RydWN0ZWQgdXNpbmcgdGhpcyBwYXR0ZXJuLgoKIFRoZSBvdXRwdXQgY29udHJvbCBzdHJpbmcgaXMgYSBwaWVjZSBvZiBDIGNvZGUgd2hpY2ggY2hvb3NlcyB3aGljaApvdXRwdXQgdGVtcGxhdGUgdG8gcmV0dXJuIGJhc2VkIG9uIHRoZSBraW5kIG9mIG9wZXJhbmQgYW5kIHRoZSBzcGVjaWZpYwp0eXBlIG9mIENQVSBmb3Igd2hpY2ggY29kZSBpcyBiZWluZyBnZW5lcmF0ZWQuCgogJyJybSInIGlzIGFuIG9wZXJhbmQgY29uc3RyYWludC4gIEl0cyBtZWFuaW5nIGlzIGV4cGxhaW5lZCBiZWxvdy4KCh8KRmlsZTogZ2NjaW50LmluZm8sICBOb2RlOiBSVEwgVGVtcGxhdGUsICBOZXh0OiBPdXRwdXQgVGVtcGxhdGUsICBQcmV2OiBFeGFtcGxlLCAgVXA6IE1hY2hpbmUgRGVzYwoKMTQuNCBSVEwgVGVtcGxhdGUKPT09PT09PT09PT09PT09PT0KClRoZSBSVEwgdGVtcGxhdGUgaXMgdXNlZCB0byBkZWZpbmUgd2hpY2ggaW5zbnMgbWF0Y2ggdGhlIHBhcnRpY3VsYXIKcGF0dGVybiBhbmQgaG93IHRvIGZpbmQgdGhlaXIgb3BlcmFuZHMuICBGb3IgbmFtZWQgcGF0dGVybnMsIHRoZSBSVEwKdGVtcGxhdGUgYWxzbyBzYXlzIGhvdyB0byBjb25zdHJ1Y3QgYW4gaW5zbiBmcm9tIHNwZWNpZmllZCBvcGVyYW5kcy4KCiBDb25zdHJ1Y3Rpb24gaW52b2x2ZXMgc3Vic3RpdHV0aW5nIHNwZWNpZmllZCBvcGVyYW5kcyBpbnRvIGEgY29weSBvZgp0aGUgdGVtcGxhdGUuICBNYXRjaGluZyBpbnZvbHZlcyBkZXRlcm1pbmluZyB0aGUgdmFsdWVzIHRoYXQgc2VydmUgYXMKdGhlIG9wZXJhbmRzIGluIHRoZSBpbnNuIGJlaW5nIG1hdGNoZWQuICBCb3RoIG9mIHRoZXNlIGFjdGl2aXRpZXMgYXJlCmNvbnRyb2xsZWQgYnkgc3BlY2lhbCBleHByZXNzaW9uIHR5cGVzIHRoYXQgZGlyZWN0IG1hdGNoaW5nIGFuZApzdWJzdGl0dXRpb24gb2YgdGhlIG9wZXJhbmRzLgoKJyhtYXRjaF9vcGVyYW5kOk0gTiBQUkVESUNBVEUgQ09OU1RSQUlOVCknCiAgICAgVGhpcyBleHByZXNzaW9uIGlzIGEgcGxhY2Vob2xkZXIgZm9yIG9wZXJhbmQgbnVtYmVyIE4gb2YgdGhlIGluc24uCiAgICAgV2hlbiBjb25zdHJ1Y3RpbmcgYW4gaW5zbiwgb3BlcmFuZCBudW1iZXIgTiB3aWxsIGJlIHN1YnN0aXR1dGVkIGF0CiAgICAgdGhpcyBwb2ludC4gIFdoZW4gbWF0Y2hpbmcgYW4gaW5zbiwgd2hhdGV2ZXIgYXBwZWFycyBhdCB0aGlzCiAgICAgcG9zaXRpb24gaW4gdGhlIGluc24gd2lsbCBiZSB0YWtlbiBhcyBvcGVyYW5kIG51bWJlciBOOyBidXQgaXQgbXVzdAogICAgIHNhdGlzZnkgUFJFRElDQVRFIG9yIHRoaXMgaW5zdHJ1Y3Rpb24gcGF0dGVybiB3aWxsIG5vdCBtYXRjaCBhdAogICAgIGFsbC4KCiAgICAgT3BlcmFuZCBudW1iZXJzIG11c3QgYmUgY2hvc2VuIGNvbnNlY3V0aXZlbHkgY291bnRpbmcgZnJvbSB6ZXJvIGluCiAgICAgZWFjaCBpbnN0cnVjdGlvbiBwYXR0ZXJuLiAgVGhlcmUgbWF5IGJlIG9ubHkgb25lICdtYXRjaF9vcGVyYW5kJwogICAgIGV4cHJlc3Npb24gaW4gdGhlIHBhdHRlcm4gZm9yIGVhY2ggb3BlcmFuZCBudW1iZXIuICBVc3VhbGx5CiAgICAgb3BlcmFuZHMgYXJlIG51bWJlcmVkIGluIHRoZSBvcmRlciBvZiBhcHBlYXJhbmNlIGluICdtYXRjaF9vcGVyYW5kJwogICAgIGV4cHJlc3Npb25zLiAgSW4gdGhlIGNhc2Ugb2YgYSAnZGVmaW5lX2V4cGFuZCcsIGFueSBvcGVyYW5kIG51bWJlcnMKICAgICB1c2VkIG9ubHkgaW4gJ21hdGNoX2R1cCcgZXhwcmVzc2lvbnMgaGF2ZSBoaWdoZXIgdmFsdWVzIHRoYW4gYWxsCiAgICAgb3RoZXIgb3BlcmFuZCBudW1iZXJzLgoKICAgICBQUkVESUNBVEUgaXMgYSBzdHJpbmcgdGhhdCBpcyB0aGUgbmFtZSBvZiBhIGZ1bmN0aW9uIHRoYXQgYWNjZXB0cwogICAgIHR3byBhcmd1bWVudHMsIGFuIGV4cHJlc3Npb24gYW5kIGEgbWFjaGluZSBtb2RlLiAgKk5vdGUKICAgICBQcmVkaWNhdGVzOjouICBEdXJpbmcgbWF0Y2hpbmcsIHRoZSBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCB3aXRoCiAgICAgdGhlIHB1dGF0aXZlIG9wZXJhbmQgYXMgdGhlIGV4cHJlc3Npb24gYW5kIE0gYXMgdGhlIG1vZGUgYXJndW1lbnQKICAgICAoaWYgTSBpcyBub3Qgc3BlY2lmaWVkLCAnVk9JRG1vZGUnIHdpbGwgYmUgdXNlZCwgd2hpY2ggbm9ybWFsbHkKICAgICBjYXVzZXMgUFJFRElDQVRFIHRvIGFjY2VwdCBhbnkgbW9kZSkuICBJZiBpdCByZXR1cm5zIHplcm8sIHRoaXMKICAgICBpbnN0cnVjdGlvbiBwYXR0ZXJuIGZhaWxzIHRvIG1hdGNoLiAgUFJFRElDQVRFIG1heSBiZSBhbiBlbXB0eQogICAgIHN0cmluZzsgdGhlbiBpdCBtZWFucyBubyB0ZXN0IGlzIHRvIGJlIGRvbmUgb24gdGhlIG9wZXJhbmQsIHNvCiAgICAgYW55dGhpbmcgd2hpY2ggb2NjdXJzIGluIHRoaXMgcG9zaXRpb24gaXMgdmFsaWQuCgogICAgIE1vc3Qgb2YgdGhlIHRpbWUsIFBSRURJQ0FURSB3aWxsIHJlamVjdCBtb2RlcyBvdGhlciB0aGFuIE0tLWJ1dCBub3QKICAgICBhbHdheXMuICBGb3IgZXhhbXBsZSwgdGhlIHByZWRpY2F0ZSAnYWRkcmVzc19vcGVyYW5kJyB1c2VzIE0gYXMgdGhlCiAgICAgbW9kZSBvZiBtZW1vcnkgcmVmIHRoYXQgdGhlIGFkZHJlc3Mgc2hvdWxkIGJlIHZhbGlkIGZvci4gIE1hbnkKICAgICBwcmVkaWNhdGVzIGFjY2VwdCAnY29uc3RfaW50JyBub2RlcyBldmVuIHRob3VnaCB0aGVpciBtb2RlIGlzCiAgICAgJ1ZPSURtb2RlJy4KCiAgICAgQ09OU1RSQUlOVCBjb250cm9scyByZWxvYWRpbmcgYW5kIHRoZSBjaG9pY2Ugb2YgdGhlIGJlc3QgcmVnaXN0ZXIKICAgICBjbGFzcyB0byB1c2UgZm9yIGEgdmFsdWUsIGFzIGV4cGxhaW5lZCBsYXRlciAoKm5vdGUgQ29uc3RyYWludHM6OikuCiAgICAgSWYgdGhlIGNvbnN0cmFpbnQgd291bGQgYmUgYW4gZW1wdHkgc3RyaW5nLCBpdCBjYW4gYmUgb21pdHRlZC4KCiAgICAgUGVvcGxlIGFyZSBvZnRlbiB1bmNsZWFyIG9uIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGNvbnN0cmFpbnQKICAgICBhbmQgdGhlIHByZWRpY2F0ZS4gIFRoZSBwcmVkaWNhdGUgaGVscHMgZGVjaWRlIHdoZXRoZXIgYSBnaXZlbiBpbnNuCiAgICAgbWF0Y2hlcyB0aGUgcGF0dGVybi4gIFRoZSBjb25zdHJhaW50IHBsYXlzIG5vIHJvbGUgaW4gdGhpcwogICAgIGRlY2lzaW9uOyBpbnN0ZWFkLCBpdCBjb250cm9scyB2YXJpb3VzIGRlY2lzaW9ucyBpbiB0aGUgY2FzZSBvZiBhbgogICAgIGluc24gd2hpY2ggZG9lcyBtYXRjaC4KCicobWF0Y2hfc2NyYXRjaDpNIE4gQ09OU1RSQUlOVCknCiAgICAgVGhpcyBleHByZXNzaW9uIGlzIGFsc28gYSBwbGFjZWhvbGRlciBmb3Igb3BlcmFuZCBudW1iZXIgTiBhbmQKICAgICBpbmRpY2F0ZXMgdGhhdCBvcGVyYW5kIG11c3QgYmUgYSAnc2NyYXRjaCcgb3IgJ3JlZycgZXhwcmVzc2lvbi4KCiAgICAgV2hlbiBtYXRjaGluZyBwYXR0ZXJucywgdGhpcyBpcyBlcXVpdmFsZW50IHRvCgogICAgICAgICAgKG1hdGNoX29wZXJhbmQ6TSBOICJzY3JhdGNoX29wZXJhbmQiIFBSRUQpCgogICAgIGJ1dCwgd2hlbiBnZW5lcmF0aW5nIFJUTCwgaXQgcHJvZHVjZXMgYSAoJ3NjcmF0Y2gnOk0pIGV4cHJlc3Npb24uCgogICAgIElmIHRoZSBsYXN0IGZldyBleHByZXNzaW9ucyBpbiBhICdwYXJhbGxlbCcgYXJlICdjbG9iYmVyJwogICAgIGV4cHJlc3Npb25zIHdob3NlIG9wZXJhbmRzIGFyZSBlaXRoZXIgYSBoYXJkIHJlZ2lzdGVyIG9yCiAgICAgJ21hdGNoX3NjcmF0Y2gnLCB0aGUgY29tYmluZXIgY2FuIGFkZCBvciBkZWxldGUgdGhlbSB3aGVuCiAgICAgbmVjZXNzYXJ5LiAgKk5vdGUgU2lkZSBFZmZlY3RzOjouCgonKG1hdGNoX2R1cCBOKScKICAgICBUaGlzIGV4cHJlc3Npb24gaXMgYWxzbyBhIHBsYWNlaG9sZGVyIGZvciBvcGVyYW5kIG51bWJlciBOLiAgSXQgaXMKICAgICB1c2VkIHdoZW4gdGhlIG9wZXJhbmQgbmVlZHMgdG8gYXBwZWFyIG1vcmUgdGhhbiBvbmNlIGluIHRoZSBpbnNuLgoKICAgICBJbiBjb25zdHJ1Y3Rpb24sICdtYXRjaF9kdXAnIGFjdHMganVzdCBsaWtlICdtYXRjaF9vcGVyYW5kJzogdGhlCiAgICAgb3BlcmFuZCBpcyBzdWJzdGl0dXRlZCBpbnRvIHRoZSBpbnNuIGJlaW5nIGNvbnN0cnVjdGVkLiAgQnV0IGluCiAgICAgbWF0Y2hpbmcsICdtYXRjaF9kdXAnIGJlaGF2ZXMgZGlmZmVyZW50bHkuICBJdCBhc3N1bWVzIHRoYXQgb3BlcmFuZAogICAgIG51bWJlciBOIGhhcyBhbHJlYWR5IGJlZW4gZGV0ZXJtaW5lZCBieSBhICdtYXRjaF9vcGVyYW5kJyBhcHBlYXJpbmcKICAgICBlYXJsaWVyIGluIHRoZSByZWNvZ25pdGlvbiB0ZW1wbGF0ZSwgYW5kIGl0IG1hdGNoZXMgb25seSBhbgogICAgIGlkZW50aWNhbC1sb29raW5nIGV4cHJlc3Npb24uCgogICAgIE5vdGUgdGhhdCAnbWF0Y2hfZHVwJyBzaG91bGQgbm90IGJlIHVzZWQgdG8gdGVsbCB0aGUgY29tcGlsZXIgdGhhdAogICAgIGEgcGFydGljdWxhciByZWdpc3RlciBpcyBiZWluZyB1c2VkIGZvciB0d28gb3BlcmFuZHMgKGV4YW1wbGU6CiAgICAgJ2FkZCcgdGhhdCBhZGRzIG9uZSByZWdpc3RlciB0byBhbm90aGVyOyB0aGUgc2Vjb25kIHJlZ2lzdGVyIGlzCiAgICAgYm90aCBhbiBpbnB1dCBvcGVyYW5kIGFuZCB0aGUgb3V0cHV0IG9wZXJhbmQpLiAgVXNlIGEgbWF0Y2hpbmcKICAgICBjb25zdHJhaW50ICgqbm90ZSBTaW1wbGUgQ29uc3RyYWludHM6OikgZm9yIHRob3NlLiAgJ21hdGNoX2R1cCcgaXMKICAgICBmb3IgdGhlIGNhc2VzIHdoZXJlIG9uZSBvcGVyYW5kIGlzIHVzZWQgaW4gdHdvIHBsYWNlcyBpbiB0aGUKICAgICB0ZW1wbGF0ZSwgc3VjaCBhcyBhbiBpbnN0cnVjdGlvbiB0aGF0IGNvbXB1dGVzIGJvdGggYSBxdW90aWVudCBhbmQKICAgICBhIHJlbWFpbmRlciwgd2hlcmUgdGhlIG9wY29kZSB0YWtlcyB0d28gaW5wdXQgb3BlcmFuZHMgYnV0IHRoZSBSVEwKICAgICB0ZW1wbGF0ZSBoYXMgdG8gcmVmZXIgdG8gZWFjaCBvZiB0aG9zZSB0d2ljZTsgb25jZSBmb3IgdGhlIHF1b3RpZW50CiAgICAgcGF0dGVybiBhbmQgb25jZSBmb3IgdGhlIHJlbWFpbmRlciBwYXR0ZXJuLgoKJyhtYXRjaF9vcGVyYXRvcjpNIE4gUFJFRElDQVRFIFtPUEVSQU5EUy4uLl0pJwogICAgIFRoaXMgcGF0dGVybiBpcyBhIGtpbmQgb2YgcGxhY2Vob2xkZXIgZm9yIGEgdmFyaWFibGUgUlRMIGV4cHJlc3Npb24KICAgICBjb2RlLgoKICAgICBXaGVuIGNvbnN0cnVjdGluZyBhbiBpbnNuLCBpdCBzdGFuZHMgZm9yIGFuIFJUTCBleHByZXNzaW9uIHdob3NlCiAgICAgZXhwcmVzc2lvbiBjb2RlIGlzIHRha2VuIGZyb20gdGhhdCBvZiBvcGVyYW5kIE4sIGFuZCB3aG9zZSBvcGVyYW5kcwogICAgIGFyZSBjb25zdHJ1Y3RlZCBmcm9tIHRoZSBwYXR0ZXJucyBPUEVSQU5EUy4KCiAgICAgV2hlbiBtYXRjaGluZyBhbiBleHByZXNzaW9uLCBpdCBtYXRjaGVzIGFuIGV4cHJlc3Npb24gaWYgdGhlCiAgICAgZnVuY3Rpb24gUFJFRElDQVRFIHJldHVybnMgbm9uemVybyBvbiB0aGF0IGV4cHJlc3Npb24gX2FuZF8gdGhlCiAgICAgcGF0dGVybnMgT1BFUkFORFMgbWF0Y2ggdGhlIG9wZXJhbmRzIG9mIHRoZSBleHByZXNzaW9uLgoKICAgICBTdXBwb3NlIHRoYXQgdGhlIGZ1bmN0aW9uICdjb21tdXRhdGl2ZV9vcGVyYXRvcicgaXMgZGVmaW5lZCBhcwogICAgIGZvbGxvd3MsIHRvIG1hdGNoIGFueSBleHByZXNzaW9uIHdob3NlIG9wZXJhdG9yIGlzIG9uZSBvZiB0aGUKICAgICBjb21tdXRhdGl2ZSBhcml0aG1ldGljIG9wZXJhdG9ycyBvZiBSVEwgYW5kIHdob3NlIG1vZGUgaXMgTU9ERToKCiAgICAgICAgICBpbnQKICAgICAgICAgIGNvbW11dGF0aXZlX2ludGVnZXJfb3BlcmF0b3IgKHgsIG1vZGUpCiAgICAgICAgICAgICAgIHJ0eCB4OwogICAgICAgICAgICAgICBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlOwogICAgICAgICAgewogICAgICAgICAgICBlbnVtIHJ0eF9jb2RlIGNvZGUgPSBHRVRfQ09ERSAoeCk7CiAgICAgICAgICAgIGlmIChHRVRfTU9ERSAoeCkgIT0gbW9kZSkKICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgcmV0dXJuIChHRVRfUlRYX0NMQVNTIChjb2RlKSA9PSBSVFhfQ09NTV9BUklUSAogICAgICAgICAgICAgICAgICAgIHx8IGNvZGUgPT0gRVEgfHwgY29kZSA9PSBORSk7CiAgICAgICAgICB9CgogICAgIFRoZW4gdGhlIGZvbGxvd2luZyBwYXR0ZXJuIHdpbGwgbWF0Y2ggYW55IFJUTCBleHByZXNzaW9uIGNvbnNpc3RpbmcKICAgICBvZiBhIGNvbW11dGF0aXZlIG9wZXJhdG9yIGFwcGxpZWQgdG8gdHdvIGdlbmVyYWwgb3BlcmFuZHM6CgogICAgICAgICAgKG1hdGNoX29wZXJhdG9yOlNJIDMgImNvbW11dGF0aXZlX29wZXJhdG9yIgogICAgICAgICAgICBbKG1hdGNoX29wZXJhbmQ6U0kgMSAiZ2VuZXJhbF9vcGVyYW5kIiAiZyIpCiAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpTSSAyICJnZW5lcmFsX29wZXJhbmQiICJnIildKQoKICAgICBIZXJlIHRoZSB2ZWN0b3IgJ1tPUEVSQU5EUy4uLl0nIGNvbnRhaW5zIHR3byBwYXR0ZXJucyBiZWNhdXNlIHRoZQogICAgIGV4cHJlc3Npb25zIHRvIGJlIG1hdGNoZWQgYWxsIGNvbnRhaW4gdHdvIG9wZXJhbmRzLgoKICAgICBXaGVuIHRoaXMgcGF0dGVybiBkb2VzIG1hdGNoLCB0aGUgdHdvIG9wZXJhbmRzIG9mIHRoZSBjb21tdXRhdGl2ZQogICAgIG9wZXJhdG9yIGFyZSByZWNvcmRlZCBhcyBvcGVyYW5kcyAxIGFuZCAyIG9mIHRoZSBpbnNuLiAgKFRoaXMgaXMKICAgICBkb25lIGJ5IHRoZSB0d28gaW5zdGFuY2VzIG9mICdtYXRjaF9vcGVyYW5kJy4pICBPcGVyYW5kIDMgb2YgdGhlCiAgICAgaW5zbiB3aWxsIGJlIHRoZSBlbnRpcmUgY29tbXV0YXRpdmUgZXhwcmVzc2lvbjogdXNlICdHRVRfQ09ERQogICAgIChvcGVyYW5kc1szXSknIHRvIHNlZSB3aGljaCBjb21tdXRhdGl2ZSBvcGVyYXRvciB3YXMgdXNlZC4KCiAgICAgVGhlIG1hY2hpbmUgbW9kZSBNIG9mICdtYXRjaF9vcGVyYXRvcicgd29ya3MgbGlrZSB0aGF0IG9mCiAgICAgJ21hdGNoX29wZXJhbmQnOiBpdCBpcyBwYXNzZWQgYXMgdGhlIHNlY29uZCBhcmd1bWVudCB0byB0aGUKICAgICBwcmVkaWNhdGUgZnVuY3Rpb24sIGFuZCB0aGF0IGZ1bmN0aW9uIGlzIHNvbGVseSByZXNwb25zaWJsZSBmb3IKICAgICBkZWNpZGluZyB3aGV0aGVyIHRoZSBleHByZXNzaW9uIHRvIGJlIG1hdGNoZWQgImhhcyIgdGhhdCBtb2RlLgoKICAgICBXaGVuIGNvbnN0cnVjdGluZyBhbiBpbnNuLCBhcmd1bWVudCAzIG9mIHRoZSBnZW4tZnVuY3Rpb24gd2lsbAogICAgIHNwZWNpZnkgdGhlIG9wZXJhdGlvbiAoaS5lLiB0aGUgZXhwcmVzc2lvbiBjb2RlKSBmb3IgdGhlIGV4cHJlc3Npb24KICAgICB0byBiZSBtYWRlLiAgSXQgc2hvdWxkIGJlIGFuIFJUTCBleHByZXNzaW9uLCB3aG9zZSBleHByZXNzaW9uIGNvZGUKICAgICBpcyBjb3BpZWQgaW50byBhIG5ldyBleHByZXNzaW9uIHdob3NlIG9wZXJhbmRzIGFyZSBhcmd1bWVudHMgMSBhbmQKICAgICAyIG9mIHRoZSBnZW4tZnVuY3Rpb24uICBUaGUgc3ViZXhwcmVzc2lvbnMgb2YgYXJndW1lbnQgMyBhcmUgbm90CiAgICAgdXNlZDsgb25seSBpdHMgZXhwcmVzc2lvbiBjb2RlIG1hdHRlcnMuCgogICAgIFdoZW4gJ21hdGNoX29wZXJhdG9yJyBpcyB1c2VkIGluIGEgcGF0dGVybiBmb3IgbWF0Y2hpbmcgYW4gaW5zbiwgaXQKICAgICB1c3VhbGx5IGJlc3QgaWYgdGhlIG9wZXJhbmQgbnVtYmVyIG9mIHRoZSAnbWF0Y2hfb3BlcmF0b3InIGlzCiAgICAgaGlnaGVyIHRoYW4gdGhhdCBvZiB0aGUgYWN0dWFsIG9wZXJhbmRzIG9mIHRoZSBpbnNuLiAgVGhpcyBpbXByb3ZlcwogICAgIHJlZ2lzdGVyIGFsbG9jYXRpb24gYmVjYXVzZSB0aGUgcmVnaXN0ZXIgYWxsb2NhdG9yIG9mdGVuIGxvb2tzIGF0CiAgICAgb3BlcmFuZHMgMSBhbmQgMiBvZiBpbnNucyB0byBzZWUgaWYgaXQgY2FuIGRvIHJlZ2lzdGVyIHR5aW5nLgoKICAgICBUaGVyZSBpcyBubyB3YXkgdG8gc3BlY2lmeSBjb25zdHJhaW50cyBpbiAnbWF0Y2hfb3BlcmF0b3InLiAgVGhlCiAgICAgb3BlcmFuZCBvZiB0aGUgaW5zbiB3aGljaCBjb3JyZXNwb25kcyB0byB0aGUgJ21hdGNoX29wZXJhdG9yJyBuZXZlcgogICAgIGhhcyBhbnkgY29uc3RyYWludHMgYmVjYXVzZSBpdCBpcyBuZXZlciByZWxvYWRlZCBhcyBhIHdob2xlLgogICAgIEhvd2V2ZXIsIGlmIHBhcnRzIG9mIGl0cyBPUEVSQU5EUyBhcmUgbWF0Y2hlZCBieSAnbWF0Y2hfb3BlcmFuZCcKICAgICBwYXR0ZXJucywgdGhvc2UgcGFydHMgbWF5IGhhdmUgY29uc3RyYWludHMgb2YgdGhlaXIgb3duLgoKJyhtYXRjaF9vcF9kdXA6TSBOW09QRVJBTkRTLi4uXSknCiAgICAgTGlrZSAnbWF0Y2hfZHVwJywgZXhjZXB0IHRoYXQgaXQgYXBwbGllcyB0byBvcGVyYXRvcnMgaW5zdGVhZCBvZgogICAgIG9wZXJhbmRzLiAgV2hlbiBjb25zdHJ1Y3RpbmcgYW4gaW5zbiwgb3BlcmFuZCBudW1iZXIgTiB3aWxsIGJlCiAgICAgc3Vic3RpdHV0ZWQgYXQgdGhpcyBwb2ludC4gIEJ1dCBpbiBtYXRjaGluZywgJ21hdGNoX29wX2R1cCcgYmVoYXZlcwogICAgIGRpZmZlcmVudGx5LiAgSXQgYXNzdW1lcyB0aGF0IG9wZXJhbmQgbnVtYmVyIE4gaGFzIGFscmVhZHkgYmVlbgogICAgIGRldGVybWluZWQgYnkgYSAnbWF0Y2hfb3BlcmF0b3InIGFwcGVhcmluZyBlYXJsaWVyIGluIHRoZQogICAgIHJlY29nbml0aW9uIHRlbXBsYXRlLCBhbmQgaXQgbWF0Y2hlcyBvbmx5IGFuIGlkZW50aWNhbC1sb29raW5nCiAgICAgZXhwcmVzc2lvbi4KCicobWF0Y2hfcGFyYWxsZWwgTiBQUkVESUNBVEUgW1NVQlBBVC4uLl0pJwogICAgIFRoaXMgcGF0dGVybiBpcyBhIHBsYWNlaG9sZGVyIGZvciBhbiBpbnNuIHRoYXQgY29uc2lzdHMgb2YgYQogICAgICdwYXJhbGxlbCcgZXhwcmVzc2lvbiB3aXRoIGEgdmFyaWFibGUgbnVtYmVyIG9mIGVsZW1lbnRzLiAgVGhpcwogICAgIGV4cHJlc3Npb24gc2hvdWxkIG9ubHkgYXBwZWFyIGF0IHRoZSB0b3AgbGV2ZWwgb2YgYW4gaW5zbiBwYXR0ZXJuLgoKICAgICBXaGVuIGNvbnN0cnVjdGluZyBhbiBpbnNuLCBvcGVyYW5kIG51bWJlciBOIHdpbGwgYmUgc3Vic3RpdHV0ZWQgYXQKICAgICB0aGlzIHBvaW50LiAgV2hlbiBtYXRjaGluZyBhbiBpbnNuLCBpdCBtYXRjaGVzIGlmIHRoZSBib2R5IG9mIHRoZQogICAgIGluc24gaXMgYSAncGFyYWxsZWwnIGV4cHJlc3Npb24gd2l0aCBhdCBsZWFzdCBhcyBtYW55IGVsZW1lbnRzIGFzCiAgICAgdGhlIHZlY3RvciBvZiBTVUJQQVQgZXhwcmVzc2lvbnMgaW4gdGhlICdtYXRjaF9wYXJhbGxlbCcsIGlmIGVhY2gKICAgICBTVUJQQVQgbWF0Y2hlcyB0aGUgY29ycmVzcG9uZGluZyBlbGVtZW50IG9mIHRoZSAncGFyYWxsZWwnLCBfYW5kXwogICAgIHRoZSBmdW5jdGlvbiBQUkVESUNBVEUgcmV0dXJucyBub256ZXJvIG9uIHRoZSAncGFyYWxsZWwnIHRoYXQgaXMKICAgICB0aGUgYm9keSBvZiB0aGUgaW5zbi4gIEl0IGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgcHJlZGljYXRlIHRvCiAgICAgdmFsaWRhdGUgZWxlbWVudHMgb2YgdGhlICdwYXJhbGxlbCcgYmV5b25kIHRob3NlIGxpc3RlZCBpbiB0aGUKICAgICAnbWF0Y2hfcGFyYWxsZWwnLgoKICAgICBBIHR5cGljYWwgdXNlIG9mICdtYXRjaF9wYXJhbGxlbCcgaXMgdG8gbWF0Y2ggbG9hZCBhbmQgc3RvcmUKICAgICBtdWx0aXBsZSBleHByZXNzaW9ucywgd2hpY2ggY2FuIGNvbnRhaW4gYSB2YXJpYWJsZSBudW1iZXIgb2YKICAgICBlbGVtZW50cyBpbiBhICdwYXJhbGxlbCcuICBGb3IgZXhhbXBsZSwKCiAgICAgICAgICAoZGVmaW5lX2luc24gIiIKICAgICAgICAgICAgWyhtYXRjaF9wYXJhbGxlbCAwICJsb2FkX211bHRpcGxlX29wZXJhdGlvbiIKICAgICAgICAgICAgICAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMSAiZ3BjX3JlZ19vcGVyYW5kIiAiPXIiKQogICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpTSSAyICJtZW1vcnlfb3BlcmFuZCIgIm0iKSkKICAgICAgICAgICAgICAgICh1c2UgKHJlZzpTSSAxNzkpKQogICAgICAgICAgICAgICAgKGNsb2JiZXIgKHJlZzpTSSAxNzkpKV0pXQogICAgICAgICAgICAiIgogICAgICAgICAgICAibG9hZG0gMCwwLCUxLCUyIikKCiAgICAgVGhpcyBleGFtcGxlIGNvbWVzIGZyb20gJ2EyOWsubWQnLiAgVGhlIGZ1bmN0aW9uCiAgICAgJ2xvYWRfbXVsdGlwbGVfb3BlcmF0aW9uJyBpcyBkZWZpbmVkIGluICdhMjlrLmMnIGFuZCBjaGVja3MgdGhhdAogICAgIHN1YnNlcXVlbnQgZWxlbWVudHMgaW4gdGhlICdwYXJhbGxlbCcgYXJlIHRoZSBzYW1lIGFzIHRoZSAnc2V0JyBpbgogICAgIHRoZSBwYXR0ZXJuLCBleGNlcHQgdGhhdCB0aGV5IGFyZSByZWZlcmVuY2luZyBzdWJzZXF1ZW50IHJlZ2lzdGVycwogICAgIGFuZCBtZW1vcnkgbG9jYXRpb25zLgoKICAgICBBbiBpbnNuIHRoYXQgbWF0Y2hlcyB0aGlzIHBhdHRlcm4gbWlnaHQgbG9vayBsaWtlOgoKICAgICAgICAgIChwYXJhbGxlbAogICAgICAgICAgIFsoc2V0IChyZWc6U0kgMjApIChtZW06U0kgKHJlZzpTSSAxMDApKSkKICAgICAgICAgICAgKHVzZSAocmVnOlNJIDE3OSkpCiAgICAgICAgICAgIChjbG9iYmVyIChyZWc6U0kgMTc5KSkKICAgICAgICAgICAgKHNldCAocmVnOlNJIDIxKQogICAgICAgICAgICAgICAgIChtZW06U0kgKHBsdXM6U0kgKHJlZzpTSSAxMDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3RfaW50IDQpKSkpCiAgICAgICAgICAgIChzZXQgKHJlZzpTSSAyMikKICAgICAgICAgICAgICAgICAobWVtOlNJIChwbHVzOlNJIChyZWc6U0kgMTAwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0X2ludCA4KSkpKV0pCgonKG1hdGNoX3Bhcl9kdXAgTiBbU1VCUEFULi4uXSknCiAgICAgTGlrZSAnbWF0Y2hfb3BfZHVwJywgYnV0IGZvciAnbWF0Y2hfcGFyYWxsZWwnIGluc3RlYWQgb2YKICAgICAnbWF0Y2hfb3BlcmF0b3InLgoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IE91dHB1dCBUZW1wbGF0ZSwgIE5leHQ6IE91dHB1dCBTdGF0ZW1lbnQsICBQcmV2OiBSVEwgVGVtcGxhdGUsICBVcDogTWFjaGluZSBEZXNjCgoxNC41IE91dHB1dCBUZW1wbGF0ZXMgYW5kIE9wZXJhbmQgU3Vic3RpdHV0aW9uCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KClRoZSAib3V0cHV0IHRlbXBsYXRlIiBpcyBhIHN0cmluZyB3aGljaCBzcGVjaWZpZXMgaG93IHRvIG91dHB1dCB0aGUKYXNzZW1ibGVyIGNvZGUgZm9yIGFuIGluc3RydWN0aW9uIHBhdHRlcm4uICBNb3N0IG9mIHRoZSB0ZW1wbGF0ZSBpcyBhCmZpeGVkIHN0cmluZyB3aGljaCBpcyBvdXRwdXQgbGl0ZXJhbGx5LiAgVGhlIGNoYXJhY3RlciAnJScgaXMgdXNlZCB0bwpzcGVjaWZ5IHdoZXJlIHRvIHN1YnN0aXR1dGUgYW4gb3BlcmFuZDsgaXQgY2FuIGFsc28gYmUgdXNlZCB0byBpZGVudGlmeQpwbGFjZXMgd2hlcmUgZGlmZmVyZW50IHZhcmlhbnRzIG9mIHRoZSBhc3NlbWJsZXIgcmVxdWlyZSBkaWZmZXJlbnQKc3ludGF4LgoKIEluIHRoZSBzaW1wbGVzdCBjYXNlLCBhICclJyBmb2xsb3dlZCBieSBhIGRpZ2l0IE4gc2F5cyB0byBvdXRwdXQKb3BlcmFuZCBOIGF0IHRoYXQgcG9pbnQgaW4gdGhlIHN0cmluZy4KCiAnJScgZm9sbG93ZWQgYnkgYSBsZXR0ZXIgYW5kIGEgZGlnaXQgc2F5cyB0byBvdXRwdXQgYW4gb3BlcmFuZCBpbiBhbgphbHRlcm5hdGUgZmFzaGlvbi4gIEZvdXIgbGV0dGVycyBoYXZlIHN0YW5kYXJkLCBidWlsdC1pbiBtZWFuaW5ncwpkZXNjcmliZWQgYmVsb3cuICBUaGUgbWFjaGluZSBkZXNjcmlwdGlvbiBtYWNybyAnUFJJTlRfT1BFUkFORCcgY2FuCmRlZmluZSBhZGRpdGlvbmFsIGxldHRlcnMgd2l0aCBub25zdGFuZGFyZCBtZWFuaW5ncy4KCiAnJWNESUdJVCcgY2FuIGJlIHVzZWQgdG8gc3Vic3RpdHV0ZSBhbiBvcGVyYW5kIHRoYXQgaXMgYSBjb25zdGFudCB2YWx1ZQp3aXRob3V0IHRoZSBzeW50YXggdGhhdCBub3JtYWxseSBpbmRpY2F0ZXMgYW4gaW1tZWRpYXRlIG9wZXJhbmQuCgogJyVuRElHSVQnIGlzIGxpa2UgJyVjRElHSVQnIGV4Y2VwdCB0aGF0IHRoZSB2YWx1ZSBvZiB0aGUgY29uc3RhbnQgaXMKbmVnYXRlZCBiZWZvcmUgcHJpbnRpbmcuCgogJyVhRElHSVQnIGNhbiBiZSB1c2VkIHRvIHN1YnN0aXR1dGUgYW4gb3BlcmFuZCBhcyBpZiBpdCB3ZXJlIGEgbWVtb3J5CnJlZmVyZW5jZSwgd2l0aCB0aGUgYWN0dWFsIG9wZXJhbmQgdHJlYXRlZCBhcyB0aGUgYWRkcmVzcy4gIFRoaXMgbWF5IGJlCnVzZWZ1bCB3aGVuIG91dHB1dHRpbmcgYSAibG9hZCBhZGRyZXNzIiBpbnN0cnVjdGlvbiwgYmVjYXVzZSBvZnRlbiB0aGUKYXNzZW1ibGVyIHN5bnRheCBmb3Igc3VjaCBhbiBpbnN0cnVjdGlvbiByZXF1aXJlcyB5b3UgdG8gd3JpdGUgdGhlCm9wZXJhbmQgYXMgaWYgaXQgd2VyZSBhIG1lbW9yeSByZWZlcmVuY2UuCgogJyVsRElHSVQnIGlzIHVzZWQgdG8gc3Vic3RpdHV0ZSBhICdsYWJlbF9yZWYnIGludG8gYSBqdW1wIGluc3RydWN0aW9uLgoKICclPScgb3V0cHV0cyBhIG51bWJlciB3aGljaCBpcyB1bmlxdWUgdG8gZWFjaCBpbnN0cnVjdGlvbiBpbiB0aGUgZW50aXJlCmNvbXBpbGF0aW9uLiAgVGhpcyBpcyB1c2VmdWwgZm9yIG1ha2luZyBsb2NhbCBsYWJlbHMgdG8gYmUgcmVmZXJyZWQgdG8KbW9yZSB0aGFuIG9uY2UgaW4gYSBzaW5nbGUgdGVtcGxhdGUgdGhhdCBnZW5lcmF0ZXMgbXVsdGlwbGUgYXNzZW1ibGVyCmluc3RydWN0aW9ucy4KCiAnJScgZm9sbG93ZWQgYnkgYSBwdW5jdHVhdGlvbiBjaGFyYWN0ZXIgc3BlY2lmaWVzIGEgc3Vic3RpdHV0aW9uIHRoYXQKZG9lcyBub3QgdXNlIGFuIG9wZXJhbmQuICBPbmx5IG9uZSBjYXNlIGlzIHN0YW5kYXJkOiAnJSUnIG91dHB1dHMgYSAnJScKaW50byB0aGUgYXNzZW1ibGVyIGNvZGUuICBPdGhlciBub25zdGFuZGFyZCBjYXNlcyBjYW4gYmUgZGVmaW5lZCBpbiB0aGUKJ1BSSU5UX09QRVJBTkQnIG1hY3JvLiAgWW91IG11c3QgYWxzbyBkZWZpbmUgd2hpY2ggcHVuY3R1YXRpb24KY2hhcmFjdGVycyBhcmUgdmFsaWQgd2l0aCB0aGUgJ1BSSU5UX09QRVJBTkRfUFVOQ1RfVkFMSURfUCcgbWFjcm8uCgogVGhlIHRlbXBsYXRlIG1heSBnZW5lcmF0ZSBtdWx0aXBsZSBhc3NlbWJsZXIgaW5zdHJ1Y3Rpb25zLiAgV3JpdGUgdGhlCnRleHQgZm9yIHRoZSBpbnN0cnVjdGlvbnMsIHdpdGggJ1w7JyBiZXR3ZWVuIHRoZW0uCgogV2hlbiB0aGUgUlRMIGNvbnRhaW5zIHR3byBvcGVyYW5kcyB3aGljaCBhcmUgcmVxdWlyZWQgYnkgY29uc3RyYWludCB0bwptYXRjaCBlYWNoIG90aGVyLCB0aGUgb3V0cHV0IHRlbXBsYXRlIG11c3QgcmVmZXIgb25seSB0byB0aGUKbG93ZXItbnVtYmVyZWQgb3BlcmFuZC4gIE1hdGNoaW5nIG9wZXJhbmRzIGFyZSBub3QgYWx3YXlzIGlkZW50aWNhbCwgYW5kCnRoZSByZXN0IG9mIHRoZSBjb21waWxlciBhcnJhbmdlcyB0byBwdXQgdGhlIHByb3BlciBSVEwgZXhwcmVzc2lvbiBmb3IKcHJpbnRpbmcgaW50byB0aGUgbG93ZXItbnVtYmVyZWQgb3BlcmFuZC4KCiBPbmUgdXNlIG9mIG5vbnN0YW5kYXJkIGxldHRlcnMgb3IgcHVuY3R1YXRpb24gZm9sbG93aW5nICclJyBpcyB0bwpkaXN0aW5ndWlzaCBiZXR3ZWVuIGRpZmZlcmVudCBhc3NlbWJsZXIgbGFuZ3VhZ2VzIGZvciB0aGUgc2FtZSBtYWNoaW5lOwpmb3IgZXhhbXBsZSwgTW90b3JvbGEgc3ludGF4IHZlcnN1cyBNSVQgc3ludGF4IGZvciB0aGUgNjgwMDAuICBNb3Rvcm9sYQpzeW50YXggcmVxdWlyZXMgcGVyaW9kcyBpbiBtb3N0IG9wY29kZSBuYW1lcywgd2hpbGUgTUlUIHN5bnRheCBkb2VzIG5vdC4KRm9yIGV4YW1wbGUsIHRoZSBvcGNvZGUgJ21vdmVsJyBpbiBNSVQgc3ludGF4IGlzICdtb3ZlLmwnIGluIE1vdG9yb2xhCnN5bnRheC4gIFRoZSBzYW1lIGZpbGUgb2YgcGF0dGVybnMgaXMgdXNlZCBmb3IgYm90aCBraW5kcyBvZiBvdXRwdXQKc3ludGF4LCBidXQgdGhlIGNoYXJhY3RlciBzZXF1ZW5jZSAnJS4nIGlzIHVzZWQgaW4gZWFjaCBwbGFjZSB3aGVyZQpNb3Rvcm9sYSBzeW50YXggd2FudHMgYSBwZXJpb2QuICBUaGUgJ1BSSU5UX09QRVJBTkQnIG1hY3JvIGZvciBNb3Rvcm9sYQpzeW50YXggZGVmaW5lcyB0aGUgc2VxdWVuY2UgdG8gb3V0cHV0IGEgcGVyaW9kOyB0aGUgbWFjcm8gZm9yIE1JVCBzeW50YXgKZGVmaW5lcyBpdCB0byBkbyBub3RoaW5nLgoKIEFzIGEgc3BlY2lhbCBjYXNlLCBhIHRlbXBsYXRlIGNvbnNpc3Rpbmcgb2YgdGhlIHNpbmdsZSBjaGFyYWN0ZXIgJyMnCmluc3RydWN0cyB0aGUgY29tcGlsZXIgdG8gZmlyc3Qgc3BsaXQgdGhlIGluc24sIGFuZCB0aGVuIG91dHB1dCB0aGUKcmVzdWx0aW5nIGluc3RydWN0aW9ucyBzZXBhcmF0ZWx5LiAgVGhpcyBoZWxwcyBlbGltaW5hdGUgcmVkdW5kYW5jeSBpbgp0aGUgb3V0cHV0IHRlbXBsYXRlcy4gIElmIHlvdSBoYXZlIGEgJ2RlZmluZV9pbnNuJyB0aGF0IG5lZWRzIHRvIGVtaXQKbXVsdGlwbGUgYXNzZW1ibGVyIGluc3RydWN0aW9ucywgYW5kIHRoZXJlIGlzIGFuIG1hdGNoaW5nICdkZWZpbmVfc3BsaXQnCmFscmVhZHkgZGVmaW5lZCwgdGhlbiB5b3UgY2FuIHNpbXBseSB1c2UgJyMnIGFzIHRoZSBvdXRwdXQgdGVtcGxhdGUKaW5zdGVhZCBvZiB3cml0aW5nIGFuIG91dHB1dCB0ZW1wbGF0ZSB0aGF0IGVtaXRzIHRoZSBtdWx0aXBsZSBhc3NlbWJsZXIKaW5zdHJ1Y3Rpb25zLgoKIElmIHRoZSBtYWNybyAnQVNTRU1CTEVSX0RJQUxFQ1QnIGlzIGRlZmluZWQsIHlvdSBjYW4gdXNlIGNvbnN0cnVjdCBvZgp0aGUgZm9ybSAne29wdGlvbjB8b3B0aW9uMXxvcHRpb24yfScgaW4gdGhlIHRlbXBsYXRlcy4gIFRoZXNlIGRlc2NyaWJlCm11bHRpcGxlIHZhcmlhbnRzIG9mIGFzc2VtYmxlciBsYW5ndWFnZSBzeW50YXguICAqTm90ZSBJbnN0cnVjdGlvbgpPdXRwdXQ6Oi4KCh8KRmlsZTogZ2NjaW50LmluZm8sICBOb2RlOiBPdXRwdXQgU3RhdGVtZW50LCAgTmV4dDogUHJlZGljYXRlcywgIFByZXY6IE91dHB1dCBUZW1wbGF0ZSwgIFVwOiBNYWNoaW5lIERlc2MKCjE0LjYgQyBTdGF0ZW1lbnRzIGZvciBBc3NlbWJsZXIgT3V0cHV0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpPZnRlbiBhIHNpbmdsZSBmaXhlZCB0ZW1wbGF0ZSBzdHJpbmcgY2Fubm90IHByb2R1Y2UgY29ycmVjdCBhbmQKZWZmaWNpZW50IGFzc2VtYmxlciBjb2RlIGZvciBhbGwgdGhlIGNhc2VzIHRoYXQgYXJlIHJlY29nbml6ZWQgYnkgYQpzaW5nbGUgaW5zdHJ1Y3Rpb24gcGF0dGVybi4gIEZvciBleGFtcGxlLCB0aGUgb3Bjb2RlcyBtYXkgZGVwZW5kIG9uIHRoZQpraW5kcyBvZiBvcGVyYW5kczsgb3Igc29tZSB1bmZvcnR1bmF0ZSBjb21iaW5hdGlvbnMgb2Ygb3BlcmFuZHMgbWF5CnJlcXVpcmUgZXh0cmEgbWFjaGluZSBpbnN0cnVjdGlvbnMuCgogSWYgdGhlIG91dHB1dCBjb250cm9sIHN0cmluZyBzdGFydHMgd2l0aCBhICdAJywgdGhlbiBpdCBpcyBhY3R1YWxseSBhCnNlcmllcyBvZiB0ZW1wbGF0ZXMsIGVhY2ggb24gYSBzZXBhcmF0ZSBsaW5lLiAgKEJsYW5rIGxpbmVzIGFuZCBsZWFkaW5nCnNwYWNlcyBhbmQgdGFicyBhcmUgaWdub3JlZC4pICBUaGUgdGVtcGxhdGVzIGNvcnJlc3BvbmQgdG8gdGhlIHBhdHRlcm4ncwpjb25zdHJhaW50IGFsdGVybmF0aXZlcyAoKm5vdGUgTXVsdGktQWx0ZXJuYXRpdmU6OikuICBGb3IgZXhhbXBsZSwgaWYgYQp0YXJnZXQgbWFjaGluZSBoYXMgYSB0d28tYWRkcmVzcyBhZGQgaW5zdHJ1Y3Rpb24gJ2FkZHInIHRvIGFkZCBpbnRvIGEKcmVnaXN0ZXIgYW5kIGFub3RoZXIgJ2FkZG0nIHRvIGFkZCBhIHJlZ2lzdGVyIHRvIG1lbW9yeSwgeW91IG1pZ2h0IHdyaXRlCnRoaXMgcGF0dGVybjoKCiAgICAgKGRlZmluZV9pbnNuICJhZGRzaTMiCiAgICAgICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJnZW5lcmFsX29wZXJhbmQiICI9cixtIikKICAgICAgICAgICAgIChwbHVzOlNJIChtYXRjaF9vcGVyYW5kOlNJIDEgImdlbmVyYWxfb3BlcmFuZCIgIjAsMCIpCiAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpTSSAyICJnZW5lcmFsX29wZXJhbmQiICJnLHIiKSkpXQogICAgICAgIiIKICAgICAgICJACiAgICAgICAgYWRkciAlMiwlMAogICAgICAgIGFkZG0gJTIsJTAiKQoKIElmIHRoZSBvdXRwdXQgY29udHJvbCBzdHJpbmcgc3RhcnRzIHdpdGggYSAnKicsIHRoZW4gaXQgaXMgbm90IGFuCm91dHB1dCB0ZW1wbGF0ZSBidXQgcmF0aGVyIGEgcGllY2Ugb2YgQyBwcm9ncmFtIHRoYXQgc2hvdWxkIGNvbXB1dGUgYQp0ZW1wbGF0ZS4gIEl0IHNob3VsZCBleGVjdXRlIGEgJ3JldHVybicgc3RhdGVtZW50IHRvIHJldHVybiB0aGUKdGVtcGxhdGUtc3RyaW5nIHlvdSB3YW50LiAgTW9zdCBzdWNoIHRlbXBsYXRlcyB1c2UgQyBzdHJpbmcgbGl0ZXJhbHMsCndoaWNoIHJlcXVpcmUgZG91YmxlcXVvdGUgY2hhcmFjdGVycyB0byBkZWxpbWl0IHRoZW0uICBUbyBpbmNsdWRlIHRoZXNlCmRvdWJsZXF1b3RlIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZywgcHJlZml4IGVhY2ggb25lIHdpdGggJ1wnLgoKIElmIHRoZSBvdXRwdXQgY29udHJvbCBzdHJpbmcgaXMgd3JpdHRlbiBhcyBhIGJyYWNlIGJsb2NrIGluc3RlYWQgb2YgYQpkb3VibGUtcXVvdGVkIHN0cmluZywgaXQgaXMgYXV0b21hdGljYWxseSBhc3N1bWVkIHRvIGJlIEMgY29kZS4gIEluIHRoYXQKY2FzZSwgaXQgaXMgbm90IG5lY2Vzc2FyeSB0byBwdXQgaW4gYSBsZWFkaW5nIGFzdGVyaXNrLCBvciB0byBlc2NhcGUgdGhlCmRvdWJsZXF1b3RlcyBzdXJyb3VuZGluZyBDIHN0cmluZyBsaXRlcmFscy4KCiBUaGUgb3BlcmFuZHMgbWF5IGJlIGZvdW5kIGluIHRoZSBhcnJheSAnb3BlcmFuZHMnLCB3aG9zZSBDIGRhdGEgdHlwZSBpcwoncnR4IFtdJy4KCiBJdCBpcyB2ZXJ5IGNvbW1vbiB0byBzZWxlY3QgZGlmZmVyZW50IHdheXMgb2YgZ2VuZXJhdGluZyBhc3NlbWJsZXIgY29kZQpiYXNlZCBvbiB3aGV0aGVyIGFuIGltbWVkaWF0ZSBvcGVyYW5kIGlzIHdpdGhpbiBhIGNlcnRhaW4gcmFuZ2UuICBCZQpjYXJlZnVsIHdoZW4gZG9pbmcgdGhpcywgYmVjYXVzZSB0aGUgcmVzdWx0IG9mICdJTlRWQUwnIGlzIGFuIGludGVnZXIgb24KdGhlIGhvc3QgbWFjaGluZS4gIElmIHRoZSBob3N0IG1hY2hpbmUgaGFzIG1vcmUgYml0cyBpbiBhbiAnaW50JyB0aGFuCnRoZSB0YXJnZXQgbWFjaGluZSBoYXMgaW4gdGhlIG1vZGUgaW4gd2hpY2ggdGhlIGNvbnN0YW50IHdpbGwgYmUgdXNlZCwKdGhlbiBzb21lIG9mIHRoZSBiaXRzIHlvdSBnZXQgZnJvbSAnSU5UVkFMJyB3aWxsIGJlIHN1cGVyZmx1b3VzLiAgRm9yCnByb3BlciByZXN1bHRzLCB5b3UgbXVzdCBjYXJlZnVsbHkgZGlzcmVnYXJkIHRoZSB2YWx1ZXMgb2YgdGhvc2UgYml0cy4KCiBJdCBpcyBwb3NzaWJsZSB0byBvdXRwdXQgYW4gYXNzZW1ibGVyIGluc3RydWN0aW9uIGFuZCB0aGVuIGdvIG9uIHRvCm91dHB1dCBvciBjb21wdXRlIG1vcmUgb2YgdGhlbSwgdXNpbmcgdGhlIHN1YnJvdXRpbmUgJ291dHB1dF9hc21faW5zbicuClRoaXMgcmVjZWl2ZXMgdHdvIGFyZ3VtZW50czogYSB0ZW1wbGF0ZS1zdHJpbmcgYW5kIGEgdmVjdG9yIG9mIG9wZXJhbmRzLgpUaGUgdmVjdG9yIG1heSBiZSAnb3BlcmFuZHMnLCBvciBpdCBtYXkgYmUgYW5vdGhlciBhcnJheSBvZiAncnR4JyB0aGF0CnlvdSBkZWNsYXJlIGxvY2FsbHkgYW5kIGluaXRpYWxpemUgeW91cnNlbGYuCgogV2hlbiBhbiBpbnNuIHBhdHRlcm4gaGFzIG11bHRpcGxlIGFsdGVybmF0aXZlcyBpbiBpdHMgY29uc3RyYWludHMsCm9mdGVuIHRoZSBhcHBlYXJhbmNlIG9mIHRoZSBhc3NlbWJsZXIgY29kZSBpcyBkZXRlcm1pbmVkIG1vc3RseSBieSB3aGljaAphbHRlcm5hdGl2ZSB3YXMgbWF0Y2hlZC4gIFdoZW4gdGhpcyBpcyBzbywgdGhlIEMgY29kZSBjYW4gdGVzdCB0aGUKdmFyaWFibGUgJ3doaWNoX2FsdGVybmF0aXZlJywgd2hpY2ggaXMgdGhlIG9yZGluYWwgbnVtYmVyIG9mIHRoZQphbHRlcm5hdGl2ZSB0aGF0IHdhcyBhY3R1YWxseSBzYXRpc2ZpZWQgKDAgZm9yIHRoZSBmaXJzdCwgMSBmb3IgdGhlCnNlY29uZCBhbHRlcm5hdGl2ZSwgZXRjLikuCgogRm9yIGV4YW1wbGUsIHN1cHBvc2UgdGhlcmUgYXJlIHR3byBvcGNvZGVzIGZvciBzdG9yaW5nIHplcm8sICdjbHJyZWcnCmZvciByZWdpc3RlcnMgYW5kICdjbHJtZW0nIGZvciBtZW1vcnkgbG9jYXRpb25zLiAgSGVyZSBpcyBob3cgYSBwYXR0ZXJuCmNvdWxkIHVzZSAnd2hpY2hfYWx0ZXJuYXRpdmUnIHRvIGNob29zZSBiZXR3ZWVuIHRoZW06CgogICAgIChkZWZpbmVfaW5zbiAiIgogICAgICAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAiZ2VuZXJhbF9vcGVyYW5kIiAiPXIsbSIpCiAgICAgICAgICAgICAoY29uc3RfaW50IDApKV0KICAgICAgICIiCiAgICAgICB7CiAgICAgICByZXR1cm4gKHdoaWNoX2FsdGVybmF0aXZlID09IDAKICAgICAgICAgICAgICAgPyAiY2xycmVnICUwIiA6ICJjbHJtZW0gJTAiKTsKICAgICAgIH0pCgogVGhlIGV4YW1wbGUgYWJvdmUsIHdoZXJlIHRoZSBhc3NlbWJsZXIgY29kZSB0byBnZW5lcmF0ZSB3YXMgX3NvbGVseV8KZGV0ZXJtaW5lZCBieSB0aGUgYWx0ZXJuYXRpdmUsIGNvdWxkIGFsc28gaGF2ZSBiZWVuIHNwZWNpZmllZCBhcwpmb2xsb3dzLCBoYXZpbmcgdGhlIG91dHB1dCBjb250cm9sIHN0cmluZyBzdGFydCB3aXRoIGEgJ0AnOgoKICAgICAoZGVmaW5lX2luc24gIiIKICAgICAgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgImdlbmVyYWxfb3BlcmFuZCIgIj1yLG0iKQogICAgICAgICAgICAgKGNvbnN0X2ludCAwKSldCiAgICAgICAiIgogICAgICAgIkAKICAgICAgICBjbHJyZWcgJTAKICAgICAgICBjbHJtZW0gJTAiKQoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IFByZWRpY2F0ZXMsICBOZXh0OiBDb25zdHJhaW50cywgIFByZXY6IE91dHB1dCBTdGF0ZW1lbnQsICBVcDogTWFjaGluZSBEZXNjCgoxNC43IFByZWRpY2F0ZXMKPT09PT09PT09PT09PT09CgpBIHByZWRpY2F0ZSBkZXRlcm1pbmVzIHdoZXRoZXIgYSAnbWF0Y2hfb3BlcmFuZCcgb3IgJ21hdGNoX29wZXJhdG9yJwpleHByZXNzaW9uIG1hdGNoZXMsIGFuZCB0aGVyZWZvcmUgd2hldGhlciB0aGUgc3Vycm91bmRpbmcgaW5zdHJ1Y3Rpb24KcGF0dGVybiB3aWxsIGJlIHVzZWQgZm9yIHRoYXQgY29tYmluYXRpb24gb2Ygb3BlcmFuZHMuICBHQ0MgaGFzIGEgbnVtYmVyCm9mIG1hY2hpbmUtaW5kZXBlbmRlbnQgcHJlZGljYXRlcywgYW5kIHlvdSBjYW4gZGVmaW5lIG1hY2hpbmUtc3BlY2lmaWMKcHJlZGljYXRlcyBhcyBuZWVkZWQuICBCeSBjb252ZW50aW9uLCBwcmVkaWNhdGVzIHVzZWQgd2l0aAonbWF0Y2hfb3BlcmFuZCcgaGF2ZSBuYW1lcyB0aGF0IGVuZCBpbiAnX29wZXJhbmQnLCBhbmQgdGhvc2UgdXNlZCB3aXRoCidtYXRjaF9vcGVyYXRvcicgaGF2ZSBuYW1lcyB0aGF0IGVuZCBpbiAnX29wZXJhdG9yJy4KCiBBbGwgcHJlZGljYXRlcyBhcmUgQm9vbGVhbiBmdW5jdGlvbnMgKGluIHRoZSBtYXRoZW1hdGljYWwgc2Vuc2UpIG9mIHR3bwphcmd1bWVudHM6IHRoZSBSVEwgZXhwcmVzc2lvbiB0aGF0IGlzIGJlaW5nIGNvbnNpZGVyZWQgYXQgdGhhdCBwb3NpdGlvbgppbiB0aGUgaW5zdHJ1Y3Rpb24gcGF0dGVybiwgYW5kIHRoZSBtYWNoaW5lIG1vZGUgdGhhdCB0aGUKJ21hdGNoX29wZXJhbmQnIG9yICdtYXRjaF9vcGVyYXRvcicgc3BlY2lmaWVzLiAgSW4gdGhpcyBzZWN0aW9uLCB0aGUKZmlyc3QgYXJndW1lbnQgaXMgY2FsbGVkIE9QIGFuZCB0aGUgc2Vjb25kIGFyZ3VtZW50IE1PREUuICBQcmVkaWNhdGVzCmNhbiBiZSBjYWxsZWQgZnJvbSBDIGFzIG9yZGluYXJ5IHR3by1hcmd1bWVudCBmdW5jdGlvbnM7IHRoaXMgY2FuIGJlCnVzZWZ1bCBpbiBvdXRwdXQgdGVtcGxhdGVzIG9yIG90aGVyIG1hY2hpbmUtc3BlY2lmaWMgY29kZS4KCiBPcGVyYW5kIHByZWRpY2F0ZXMgY2FuIGFsbG93IG9wZXJhbmRzIHRoYXQgYXJlIG5vdCBhY3R1YWxseSBhY2NlcHRhYmxlCnRvIHRoZSBoYXJkd2FyZSwgYXMgbG9uZyBhcyB0aGUgY29uc3RyYWludHMgZ2l2ZSByZWxvYWQgdGhlIGFiaWxpdHkgdG8KZml4IHRoZW0gdXAgKCpub3RlIENvbnN0cmFpbnRzOjopLiAgSG93ZXZlciwgR0NDIHdpbGwgdXN1YWxseSBnZW5lcmF0ZQpiZXR0ZXIgY29kZSBpZiB0aGUgcHJlZGljYXRlcyBzcGVjaWZ5IHRoZSByZXF1aXJlbWVudHMgb2YgdGhlIG1hY2hpbmUKaW5zdHJ1Y3Rpb25zIGFzIGNsb3NlbHkgYXMgcG9zc2libGUuICBSZWxvYWQgY2Fubm90IGZpeCB1cCBvcGVyYW5kcyB0aGF0Cm11c3QgYmUgY29uc3RhbnRzICgiaW1tZWRpYXRlIG9wZXJhbmRzIik7IHlvdSBtdXN0IHVzZSBhIHByZWRpY2F0ZSB0aGF0CmFsbG93cyBvbmx5IGNvbnN0YW50cywgb3IgZWxzZSBlbmZvcmNlIHRoZSByZXF1aXJlbWVudCBpbiB0aGUgZXh0cmEKY29uZGl0aW9uLgoKIE1vc3QgcHJlZGljYXRlcyBoYW5kbGUgdGhlaXIgTU9ERSBhcmd1bWVudCBpbiBhIHVuaWZvcm0gbWFubmVyLiAgSWYKTU9ERSBpcyAnVk9JRG1vZGUnICh1bnNwZWNpZmllZCksIHRoZW4gT1AgY2FuIGhhdmUgYW55IG1vZGUuICBJZiBNT0RFIGlzCmFueXRoaW5nIGVsc2UsIHRoZW4gT1AgbXVzdCBoYXZlIHRoZSBzYW1lIG1vZGUsIHVubGVzcyBPUCBpcyBhCidDT05TVF9JTlQnIG9yIGludGVnZXIgJ0NPTlNUX0RPVUJMRScuICBUaGVzZSBSVEwgZXhwcmVzc2lvbnMgYWx3YXlzCmhhdmUgJ1ZPSURtb2RlJywgc28gaXQgd291bGQgYmUgY291bnRlcnByb2R1Y3RpdmUgdG8gY2hlY2sgdGhhdCB0aGVpcgptb2RlIG1hdGNoZXMuICBJbnN0ZWFkLCBwcmVkaWNhdGVzIHRoYXQgYWNjZXB0ICdDT05TVF9JTlQnIGFuZC9vcgppbnRlZ2VyICdDT05TVF9ET1VCTEUnIGNoZWNrIHRoYXQgdGhlIHZhbHVlIHN0b3JlZCBpbiB0aGUgY29uc3RhbnQgd2lsbApmaXQgaW4gdGhlIHJlcXVlc3RlZCBtb2RlLgoKIFByZWRpY2F0ZXMgd2l0aCB0aGlzIGJlaGF2aW9yIGFyZSBjYWxsZWQgIm5vcm1hbCIuICAnZ2VucmVjb2cnIGNhbgpvcHRpbWl6ZSB0aGUgaW5zdHJ1Y3Rpb24gcmVjb2duaXplciBiYXNlZCBvbiBrbm93bGVkZ2Ugb2YgaG93IG5vcm1hbApwcmVkaWNhdGVzIHRyZWF0IG1vZGVzLiAgSXQgY2FuIGFsc28gZGlhZ25vc2UgY2VydGFpbiBraW5kcyBvZiBjb21tb24KZXJyb3JzIGluIHRoZSB1c2Ugb2Ygbm9ybWFsIHByZWRpY2F0ZXM7IGZvciBpbnN0YW5jZSwgaXQgaXMgYWxtb3N0CmFsd2F5cyBhbiBlcnJvciB0byB1c2UgYSBub3JtYWwgcHJlZGljYXRlIHdpdGhvdXQgc3BlY2lmeWluZyBhIG1vZGUuCgogUHJlZGljYXRlcyB0aGF0IGRvIHNvbWV0aGluZyBkaWZmZXJlbnQgd2l0aCB0aGVpciBNT0RFIGFyZ3VtZW50IGFyZQpjYWxsZWQgInNwZWNpYWwiLiAgVGhlIGdlbmVyaWMgcHJlZGljYXRlcyAnYWRkcmVzc19vcGVyYW5kJyBhbmQKJ3Btb2RlX3JlZ2lzdGVyX29wZXJhbmQnIGFyZSBzcGVjaWFsIHByZWRpY2F0ZXMuICAnZ2VucmVjb2cnIGRvZXMgbm90IGRvCmFueSBvcHRpbWl6YXRpb25zIG9yIGRpYWdub3NpcyB3aGVuIHNwZWNpYWwgcHJlZGljYXRlcyBhcmUgdXNlZC4KCiogTWVudToKCiogTWFjaGluZS1JbmRlcGVuZGVudCBQcmVkaWNhdGVzOjogIFByZWRpY2F0ZXMgYXZhaWxhYmxlIHRvIGFsbCBiYWNrIGVuZHMuCiogRGVmaW5pbmcgUHJlZGljYXRlczo6ICAgICAgICAgICAgIEhvdyB0byB3cml0ZSBtYWNoaW5lLXNwZWNpZmljIHByZWRpY2F0ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbnMuCgofCkZpbGU6IGdjY2ludC5pbmZvLCAgTm9kZTogTWFjaGluZS1JbmRlcGVuZGVudCBQcmVkaWNhdGVzLCAgTmV4dDogRGVmaW5pbmcgUHJlZGljYXRlcywgIFVwOiBQcmVkaWNhdGVzCgoxNC43LjEgTWFjaGluZS1JbmRlcGVuZGVudCBQcmVkaWNhdGVzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KClRoZXNlIGFyZSB0aGUgZ2VuZXJpYyBwcmVkaWNhdGVzIGF2YWlsYWJsZSB0byBhbGwgYmFjayBlbmRzLiAgVGhleSBhcmUKZGVmaW5lZCBpbiAncmVjb2cuYycuICBUaGUgZmlyc3QgY2F0ZWdvcnkgb2YgcHJlZGljYXRlcyBhbGxvdyBvbmx5CmNvbnN0YW50LCBvciAiaW1tZWRpYXRlIiwgb3BlcmFuZHMuCgogLS0gRnVuY3Rpb246IGltbWVkaWF0ZV9vcGVyYW5kCiAgICAgVGhpcyBwcmVkaWNhdGUgYWxsb3dzIGFueSBzb3J0IG9mIGNvbnN0YW50IHRoYXQgZml0cyBpbiBNT0RFLiAgSXQKICAgICBpcyBhbiBhcHByb3ByaWF0ZSBjaG9pY2UgZm9yIGluc3RydWN0aW9ucyB0aGF0IHRha2Ugb3BlcmFuZHMgdGhhdAogICAgIG11c3QgYmUgY29uc3RhbnQuCgogLS0gRnVuY3Rpb246IGNvbnN0X2ludF9vcGVyYW5kCiAgICAgVGhpcyBwcmVkaWNhdGUgYWxsb3dzIGFueSAnQ09OU1RfSU5UJyBleHByZXNzaW9uIHRoYXQgZml0cyBpbiBNT0RFLgogICAgIEl0IGlzIGFuIGFwcHJvcHJpYXRlIGNob2ljZSBmb3IgYW4gaW1tZWRpYXRlIG9wZXJhbmQgdGhhdCBkb2VzIG5vdAogICAgIGFsbG93IGEgc3ltYm9sIG9yIGxhYmVsLgoKIC0tIEZ1bmN0aW9uOiBjb25zdF9kb3VibGVfb3BlcmFuZAogICAgIFRoaXMgcHJlZGljYXRlIGFjY2VwdHMgYW55ICdDT05TVF9ET1VCTEUnIGV4cHJlc3Npb24gdGhhdCBoYXMKICAgICBleGFjdGx5IE1PREUuICBJZiBNT0RFIGlzICdWT0lEbW9kZScsIGl0IHdpbGwgYWxzbyBhY2NlcHQKICAgICAnQ09OU1RfSU5UJy4gIEl0IGlzIGludGVuZGVkIGZvciBpbW1lZGlhdGUgZmxvYXRpbmcgcG9pbnQKICAgICBjb25zdGFudHMuCgpUaGUgc2Vjb25kIGNhdGVnb3J5IG9mIHByZWRpY2F0ZXMgYWxsb3cgb25seSBzb21lIGtpbmQgb2YgbWFjaGluZQpyZWdpc3Rlci4KCiAtLSBGdW5jdGlvbjogcmVnaXN0ZXJfb3BlcmFuZAogICAgIFRoaXMgcHJlZGljYXRlIGFsbG93cyBhbnkgJ1JFRycgb3IgJ1NVQlJFRycgZXhwcmVzc2lvbiB0aGF0IGlzCiAgICAgdmFsaWQgZm9yIE1PREUuICBJdCBpcyBvZnRlbiBzdWl0YWJsZSBmb3IgYXJpdGhtZXRpYyBpbnN0cnVjdGlvbgogICAgIG9wZXJhbmRzIG9uIGEgUklTQyBtYWNoaW5lLgoKIC0tIEZ1bmN0aW9uOiBwbW9kZV9yZWdpc3Rlcl9vcGVyYW5kCiAgICAgVGhpcyBpcyBhIHNsaWdodCB2YXJpYW50IG9uICdyZWdpc3Rlcl9vcGVyYW5kJyB3aGljaCB3b3JrcyBhcm91bmQgYQogICAgIGxpbWl0YXRpb24gaW4gdGhlIG1hY2hpbmUtZGVzY3JpcHRpb24gcmVhZGVyLgoKICAgICAgICAgIChtYXRjaF9vcGVyYW5kIE4gInBtb2RlX3JlZ2lzdGVyX29wZXJhbmQiIENPTlNUUkFJTlQpCgogICAgIG1lYW5zIGV4YWN0bHkgd2hhdAoKICAgICAgICAgIChtYXRjaF9vcGVyYW5kOlAgTiAicmVnaXN0ZXJfb3BlcmFuZCIgQ09OU1RSQUlOVCkKCiAgICAgd291bGQgbWVhbiwgaWYgdGhlIG1hY2hpbmUtZGVzY3JpcHRpb24gcmVhZGVyIGFjY2VwdGVkICc6UCcgbW9kZQogICAgIHN1ZmZpeGVzLiAgVW5mb3J0dW5hdGVseSwgaXQgY2Fubm90LCBiZWNhdXNlICdQbW9kZScgaXMgYW4gYWxpYXMKICAgICBmb3Igc29tZSBvdGhlciBtb2RlLCBhbmQgbWlnaHQgdmFyeSB3aXRoIG1hY2hpbmUtc3BlY2lmaWMgb3B0aW9ucy4KICAgICAqTm90ZSBNaXNjOjouCgogLS0gRnVuY3Rpb246IHNjcmF0Y2hfb3BlcmFuZAogICAgIFRoaXMgcHJlZGljYXRlIGFsbG93cyBoYXJkIHJlZ2lzdGVycyBhbmQgJ1NDUkFUQ0gnIGV4cHJlc3Npb25zLCBidXQKICAgICBub3QgcHNldWRvLXJlZ2lzdGVycy4gIEl0IGlzIHVzZWQgaW50ZXJuYWxseSBieSAnbWF0Y2hfc2NyYXRjaCc7IGl0CiAgICAgc2hvdWxkIG5vdCBiZSB1c2VkIGRpcmVjdGx5LgoKVGhlIHRoaXJkIGNhdGVnb3J5IG9mIHByZWRpY2F0ZXMgYWxsb3cgb25seSBzb21lIGtpbmQgb2YgbWVtb3J5CnJlZmVyZW5jZS4KCiAtLSBGdW5jdGlvbjogbWVtb3J5X29wZXJhbmQKICAgICBUaGlzIHByZWRpY2F0ZSBhbGxvd3MgYW55IHZhbGlkIHJlZmVyZW5jZSB0byBhIHF1YW50aXR5IG9mIG1vZGUKICAgICBNT0RFIGluIG1lbW9yeSwgYXMgZGV0ZXJtaW5lZCBieSB0aGUgd2VhayBmb3JtIG9mCiAgICAgJ0dPX0lGX0xFR0lUSU1BVEVfQUREUkVTUycgKCpub3RlIEFkZHJlc3NpbmcgTW9kZXM6OikuCgogLS0gRnVuY3Rpb246IGFkZHJlc3Nfb3BlcmFuZAogICAgIFRoaXMgcHJlZGljYXRlIGlzIGEgbGl0dGxlIHVudXN1YWw7IGl0IGFsbG93cyBhbnkgb3BlcmFuZCB0aGF0IGlzIGEKICAgICB2YWxpZCBleHByZXNzaW9uIGZvciB0aGUgX2FkZHJlc3NfIG9mIGEgcXVhbnRpdHkgb2YgbW9kZSBNT0RFLAogICAgIGFnYWluIGRldGVybWluZWQgYnkgdGhlIHdlYWsgZm9ybSBvZiAnR09fSUZfTEVHSVRJTUFURV9BRERSRVNTJy4KICAgICBUbyBmaXJzdCBvcmRlciwgaWYgJyhtZW06TU9ERSAoRVhQKSknIGlzIGFjY2VwdGFibGUgdG8KICAgICAnbWVtb3J5X29wZXJhbmQnLCB0aGVuIEVYUCBpcyBhY2NlcHRhYmxlIHRvICdhZGRyZXNzX29wZXJhbmQnLgogICAgIE5vdGUgdGhhdCBFWFAgZG9lcyBub3QgbmVjZXNzYXJpbHkgaGF2ZSB0aGUgbW9kZSBNT0RFLgoKIC0tIEZ1bmN0aW9uOiBpbmRpcmVjdF9vcGVyYW5kCiAgICAgVGhpcyBpcyBhIHN0cmljdGVyIGZvcm0gb2YgJ21lbW9yeV9vcGVyYW5kJyB3aGljaCBhbGxvd3Mgb25seQogICAgIG1lbW9yeSByZWZlcmVuY2VzIHdpdGggYSAnZ2VuZXJhbF9vcGVyYW5kJyBhcyB0aGUgYWRkcmVzcwogICAgIGV4cHJlc3Npb24uICBOZXcgdXNlcyBvZiB0aGlzIHByZWRpY2F0ZSBhcmUgZGlzY291cmFnZWQsIGJlY2F1c2UKICAgICAnZ2VuZXJhbF9vcGVyYW5kJyBpcyB2ZXJ5IHBlcm1pc3NpdmUsIHNvIGl0J3MgaGFyZCB0byB0ZWxsIHdoYXQgYW4KICAgICAnaW5kaXJlY3Rfb3BlcmFuZCcgZG9lcyBvciBkb2VzIG5vdCBhbGxvdy4gIElmIGEgdGFyZ2V0IGhhcwogICAgIGRpZmZlcmVudCByZXF1aXJlbWVudHMgZm9yIG1lbW9yeSBvcGVyYW5kcyBmb3IgZGlmZmVyZW50CiAgICAgaW5zdHJ1Y3Rpb25zLCBpdCBpcyBiZXR0ZXIgdG8gZGVmaW5lIHRhcmdldC1zcGVjaWZpYyBwcmVkaWNhdGVzCiAgICAgd2hpY2ggZW5mb3JjZSB0aGUgaGFyZHdhcmUncyByZXF1aXJlbWVudHMgZXhwbGljaXRseS4KCiAtLSBGdW5jdGlvbjogcHVzaF9vcGVyYW5kCiAgICAgVGhpcyBwcmVkaWNhdGUgYWxsb3dzIGEgbWVtb3J5IHJlZmVyZW5jZSBzdWl0YWJsZSBmb3IgcHVzaGluZyBhCiAgICAgdmFsdWUgb250byB0aGUgc3RhY2suICBUaGlzIHdpbGwgYmUgYSAnTUVNJyB3aGljaCByZWZlcnMgdG8KICAgICAnc3RhY2tfcG9pbnRlcl9ydHgnLCB3aXRoIGEgc2lkZS1lZmZlY3QgaW4gaXRzIGFkZHJlc3MgZXhwcmVzc2lvbgogICAgICgqbm90ZSBJbmNkZWM6Oik7IHdoaWNoIG9uZSBpcyBkZXRlcm1pbmVkIGJ5IHRoZSAnU1RBQ0tfUFVTSF9DT0RFJwogICAgIG1hY3JvICgqbm90ZSBGcmFtZSBMYXlvdXQ6OikuCgogLS0gRnVuY3Rpb246IHBvcF9vcGVyYW5kCiAgICAgVGhpcyBwcmVkaWNhdGUgYWxsb3dzIGEgbWVtb3J5IHJlZmVyZW5jZSBzdWl0YWJsZSBmb3IgcG9wcGluZyBhCiAgICAgdmFsdWUgb2ZmIHRoZSBzdGFjay4gIEFnYWluLCB0aGlzIHdpbGwgYmUgYSAnTUVNJyByZWZlcnJpbmcgdG8KICAgICAnc3RhY2tfcG9pbnRlcl9ydHgnLCB3aXRoIGEgc2lkZS1lZmZlY3QgaW4gaXRzIGFkZHJlc3MgZXhwcmVzc2lvbi4KICAgICBIb3dldmVyLCB0aGlzIHRpbWUgJ1NUQUNLX1BPUF9DT0RFJyBpcyBleHBlY3RlZC4KClRoZSBmb3VydGggY2F0ZWdvcnkgb2YgcHJlZGljYXRlcyBhbGxvdyBzb21lIGNvbWJpbmF0aW9uIG9mIHRoZSBhYm92ZQpvcGVyYW5kcy4KCiAtLSBGdW5jdGlvbjogbm9ubWVtb3J5X29wZXJhbmQKICAgICBUaGlzIHByZWRpY2F0ZSBhbGxvd3MgYW55IGltbWVkaWF0ZSBvciByZWdpc3RlciBvcGVyYW5kIHZhbGlkIGZvcgogICAgIE1PREUuCgogLS0gRnVuY3Rpb246IG5vbmltbWVkaWF0ZV9vcGVyYW5kCiAgICAgVGhpcyBwcmVkaWNhdGUgYWxsb3dzIGFueSByZWdpc3RlciBvciBtZW1vcnkgb3BlcmFuZCB2YWxpZCBmb3IKICAgICBNT0RFLgoKIC0tIEZ1bmN0aW9uOiBnZW5lcmFsX29wZXJhbmQKICAgICBUaGlzIHByZWRpY2F0ZSBhbGxvd3MgYW55IGltbWVkaWF0ZSwgcmVnaXN0ZXIsIG9yIG1lbW9yeSBvcGVyYW5kCiAgICAgdmFsaWQgZm9yIE1PREUuCgpGaW5hbGx5LCB0aGVyZSBpcyBvbmUgZ2VuZXJpYyBvcGVyYXRvciBwcmVkaWNhdGUuCgogLS0gRnVuY3Rpb246IGNvbXBhcmlzb25fb3BlcmF0b3IKICAgICBUaGlzIHByZWRpY2F0ZSBtYXRjaGVzIGFueSBleHByZXNzaW9uIHdoaWNoIHBlcmZvcm1zIGFuIGFyaXRobWV0aWMKICAgICBjb21wYXJpc29uIGluIE1PREU7IHRoYXQgaXMsICdDT01QQVJJU09OX1AnIGlzIHRydWUgZm9yIHRoZQogICAgIGV4cHJlc3Npb24gY29kZS4KCh8KRmlsZTogZ2NjaW50LmluZm8sICBOb2RlOiBEZWZpbmluZyBQcmVkaWNhdGVzLCAgUHJldjogTWFjaGluZS1JbmRlcGVuZGVudCBQcmVkaWNhdGVzLCAgVXA6IFByZWRpY2F0ZXMKCjE0LjcuMiBEZWZpbmluZyBNYWNoaW5lLVNwZWNpZmljIFByZWRpY2F0ZXMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKTWFueSBtYWNoaW5lcyBoYXZlIHJlcXVpcmVtZW50cyBmb3IgdGhlaXIgb3BlcmFuZHMgdGhhdCBjYW5ub3QgYmUKZXhwcmVzc2VkIHByZWNpc2VseSB1c2luZyB0aGUgZ2VuZXJpYyBwcmVkaWNhdGVzLiAgWW91IGNhbiBkZWZpbmUKYWRkaXRpb25hbCBwcmVkaWNhdGVzIHVzaW5nICdkZWZpbmVfcHJlZGljYXRlJyBhbmQKJ2RlZmluZV9zcGVjaWFsX3ByZWRpY2F0ZScgZXhwcmVzc2lvbnMuICBUaGVzZSBleHByZXNzaW9ucyBoYXZlIHRocmVlCm9wZXJhbmRzOgoKICAgKiBUaGUgbmFtZSBvZiB0aGUgcHJlZGljYXRlLCBhcyBpdCB3aWxsIGJlIHJlZmVycmVkIHRvIGluCiAgICAgJ21hdGNoX29wZXJhbmQnIG9yICdtYXRjaF9vcGVyYXRvcicgZXhwcmVzc2lvbnMuCgogICAqIEFuIFJUTCBleHByZXNzaW9uIHdoaWNoIGV2YWx1YXRlcyB0byB0cnVlIGlmIHRoZSBwcmVkaWNhdGUgYWxsb3dzCiAgICAgdGhlIG9wZXJhbmQgT1AsIGZhbHNlIGlmIGl0IGRvZXMgbm90LiAgVGhpcyBleHByZXNzaW9uIGNhbiBvbmx5IHVzZQogICAgIHRoZSBmb2xsb3dpbmcgUlRMIGNvZGVzOgoKICAgICAnTUFUQ0hfT1BFUkFORCcKICAgICAgICAgIFdoZW4gd3JpdHRlbiBpbnNpZGUgYSBwcmVkaWNhdGUgZXhwcmVzc2lvbiwgYSAnTUFUQ0hfT1BFUkFORCcKICAgICAgICAgIGV4cHJlc3Npb24gZXZhbHVhdGVzIHRvIHRydWUgaWYgdGhlIHByZWRpY2F0ZSBpdCBuYW1lcyB3b3VsZAogICAgICAgICAgYWxsb3cgT1AuICBUaGUgb3BlcmFuZCBudW1iZXIgYW5kIGNvbnN0cmFpbnQgYXJlIGlnbm9yZWQuICBEdWUKICAgICAgICAgIHRvIGxpbWl0YXRpb25zIGluICdnZW5yZWNvZycsIHlvdSBjYW4gb25seSByZWZlciB0byBnZW5lcmljCiAgICAgICAgICBwcmVkaWNhdGVzIGFuZCBwcmVkaWNhdGVzIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4gZGVmaW5lZC4KCiAgICAgJ01BVENIX0NPREUnCiAgICAgICAgICBUaGlzIGV4cHJlc3Npb24gZXZhbHVhdGVzIHRvIHRydWUgaWYgT1Agb3IgYSBzcGVjaWZpZWQKICAgICAgICAgIHN1YmV4cHJlc3Npb24gb2YgT1AgaGFzIG9uZSBvZiBhIGdpdmVuIGxpc3Qgb2YgUlRYIGNvZGVzLgoKICAgICAgICAgIFRoZSBmaXJzdCBvcGVyYW5kIG9mIHRoaXMgZXhwcmVzc2lvbiBpcyBhIHN0cmluZyBjb25zdGFudAogICAgICAgICAgY29udGFpbmluZyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIFJUWCBjb2RlIG5hbWVzIChpbiBsb3dlcgogICAgICAgICAgY2FzZSkuICBUaGVzZSBhcmUgdGhlIGNvZGVzIGZvciB3aGljaCB0aGUgJ01BVENIX0NPREUnIHdpbGwgYmUKICAgICAgICAgIHRydWUuCgogICAgICAgICAgVGhlIHNlY29uZCBvcGVyYW5kIGlzIGEgc3RyaW5nIGNvbnN0YW50IHdoaWNoIGluZGljYXRlcyB3aGF0CiAgICAgICAgICBzdWJleHByZXNzaW9uIG9mIE9QIHRvIGV4YW1pbmUuICBJZiBpdCBpcyBhYnNlbnQgb3IgdGhlIGVtcHR5CiAgICAgICAgICBzdHJpbmcsIE9QIGl0c2VsZiBpcyBleGFtaW5lZC4gIE90aGVyd2lzZSwgdGhlIHN0cmluZyBjb25zdGFudAogICAgICAgICAgbXVzdCBiZSBhIHNlcXVlbmNlIG9mIGRpZ2l0cyBhbmQvb3IgbG93ZXJjYXNlIGxldHRlcnMuICBFYWNoCiAgICAgICAgICBjaGFyYWN0ZXIgaW5kaWNhdGVzIGEgc3ViZXhwcmVzc2lvbiB0byBleHRyYWN0IGZyb20gdGhlCiAgICAgICAgICBjdXJyZW50IGV4cHJlc3Npb247IGZvciB0aGUgZmlyc3QgY2hhcmFjdGVyIHRoaXMgaXMgT1AsIGZvcgogICAgICAgICAgdGhlIHNlY29uZCBhbmQgc3Vic2VxdWVudCBjaGFyYWN0ZXJzIGl0IGlzIHRoZSByZXN1bHQgb2YgdGhlCiAgICAgICAgICBwcmV2aW91cyBjaGFyYWN0ZXIuICBBIGRpZ2l0IE4gZXh0cmFjdHMgJ1hFWFAgKEUsIE4pJzsgYQogICAgICAgICAgbGV0dGVyIEwgZXh0cmFjdHMgJ1hWRUNFWFAgKEUsIDAsIE4pJyB3aGVyZSBOIGlzIHRoZQogICAgICAgICAgYWxwaGFiZXRpYyBvcmRpbmFsIG9mIEwgKDAgZm9yICdhJywgMSBmb3IgJ2InLCBhbmQgc28gb24pLgogICAgICAgICAgVGhlICdNQVRDSF9DT0RFJyB0aGVuIGV4YW1pbmVzIHRoZSBSVFggY29kZSBvZiB0aGUKICAgICAgICAgIHN1YmV4cHJlc3Npb24gZXh0cmFjdGVkIGJ5IHRoZSBjb21wbGV0ZSBzdHJpbmcuICBJdCBpcyBub3QKICAgICAgICAgIHBvc3NpYmxlIHRvIGV4dHJhY3QgY29tcG9uZW50cyBvZiBhbiAncnR2ZWMnIHRoYXQgaXMgbm90IGF0CiAgICAgICAgICBwb3NpdGlvbiAwIHdpdGhpbiBpdHMgUlRYIG9iamVjdC4KCiAgICAgJ01BVENIX1RFU1QnCiAgICAgICAgICBUaGlzIGV4cHJlc3Npb24gaGFzIG9uZSBvcGVyYW5kLCBhIHN0cmluZyBjb25zdGFudCBjb250YWluaW5nCiAgICAgICAgICBhIEMgZXhwcmVzc2lvbi4gIFRoZSBwcmVkaWNhdGUncyBhcmd1bWVudHMsIE9QIGFuZCBNT0RFLCBhcmUKICAgICAgICAgIGF2YWlsYWJsZSB3aXRoIHRob3NlIG5hbWVzIGluIHRoZSBDIGV4cHJlc3Npb24uICBUaGUKICAgICAgICAgICdNQVRDSF9URVNUJyBldmFsdWF0ZXMgdG8gdHJ1ZSBpZiB0aGUgQyBleHByZXNzaW9uIGV2YWx1YXRlcwogICAgICAgICAgdG8gYSBub256ZXJvIHZhbHVlLiAgJ01BVENIX1RFU1QnIGV4cHJlc3Npb25zIG11c3Qgbm90IGhhdmUKICAgICAgICAgIHNpZGUgZWZmZWN0cy4KCiAgICAgJ0FORCcKICAgICAnSU9SJwogICAgICdOT1QnCiAgICAgJ0lGX1RIRU5fRUxTRScKICAgICAgICAgIFRoZSBiYXNpYyAnTUFUQ0hfJyBleHByZXNzaW9ucyBjYW4gYmUgY29tYmluZWQgdXNpbmcgdGhlc2UKICAgICAgICAgIGxvZ2ljYWwgb3BlcmF0b3JzLCB3aGljaCBoYXZlIHRoZSBzZW1hbnRpY3Mgb2YgdGhlIEMgb3BlcmF0b3JzCiAgICAgICAgICAnJiYnLCAnfHwnLCAnIScsIGFuZCAnPyA6JyByZXNwZWN0aXZlbHkuICBBcyBpbiBDb21tb24gTGlzcCwKICAgICAgICAgIHlvdSBtYXkgZ2l2ZSBhbiAnQU5EJyBvciAnSU9SJyBleHByZXNzaW9uIGFuIGFyYml0cmFyeSBudW1iZXIKICAgICAgICAgIG9mIGFyZ3VtZW50czsgdGhpcyBoYXMgZXhhY3RseSB0aGUgc2FtZSBlZmZlY3QgYXMgd3JpdGluZyBhCiAgICAgICAgICBjaGFpbiBvZiB0d28tYXJndW1lbnQgJ0FORCcgb3IgJ0lPUicgZXhwcmVzc2lvbnMuCgogICAqIEFuIG9wdGlvbmFsIGJsb2NrIG9mIEMgY29kZSwgd2hpY2ggc2hvdWxkIGV4ZWN1dGUgJ3JldHVybiB0cnVlJyBpZgogICAgIHRoZSBwcmVkaWNhdGUgaXMgZm91bmQgdG8gbWF0Y2ggYW5kICdyZXR1cm4gZmFsc2UnIGlmIGl0IGRvZXMgbm90LgogICAgIEl0IG11c3Qgbm90IGhhdmUgYW55IHNpZGUgZWZmZWN0cy4gIFRoZSBwcmVkaWNhdGUgYXJndW1lbnRzLCBPUCBhbmQKICAgICBNT0RFLCBhcmUgYXZhaWxhYmxlIHdpdGggdGhvc2UgbmFtZXMuCgogICAgIElmIGEgY29kZSBibG9jayBpcyBwcmVzZW50IGluIGEgcHJlZGljYXRlIGRlZmluaXRpb24sIHRoZW4gdGhlIFJUTAogICAgIGV4cHJlc3Npb24gbXVzdCBldmFsdWF0ZSB0byB0cnVlIF9hbmRfIHRoZSBjb2RlIGJsb2NrIG11c3QgZXhlY3V0ZQogICAgICdyZXR1cm4gdHJ1ZScgZm9yIHRoZSBwcmVkaWNhdGUgdG8gYWxsb3cgdGhlIG9wZXJhbmQuICBUaGUgUlRMCiAgICAgZXhwcmVzc2lvbiBpcyBldmFsdWF0ZWQgZmlyc3Q7IGRvIG5vdCByZS1jaGVjayBhbnl0aGluZyBpbiB0aGUgY29kZQogICAgIGJsb2NrIHRoYXQgd2FzIGNoZWNrZWQgaW4gdGhlIFJUTCBleHByZXNzaW9uLgoKIFRoZSBwcm9ncmFtICdnZW5yZWNvZycgc2NhbnMgJ2RlZmluZV9wcmVkaWNhdGUnIGFuZAonZGVmaW5lX3NwZWNpYWxfcHJlZGljYXRlJyBleHByZXNzaW9ucyB0byBkZXRlcm1pbmUgd2hpY2ggUlRYIGNvZGVzIGFyZQpwb3NzaWJseSBhbGxvd2VkLiAgWW91IHNob3VsZCBhbHdheXMgbWFrZSB0aGlzIGV4cGxpY2l0IGluIHRoZSBSVEwKcHJlZGljYXRlIGV4cHJlc3Npb24sIHVzaW5nICdNQVRDSF9PUEVSQU5EJyBhbmQgJ01BVENIX0NPREUnLgoKIEhlcmUgaXMgYW4gZXhhbXBsZSBvZiBhIHNpbXBsZSBwcmVkaWNhdGUgZGVmaW5pdGlvbiwgZnJvbSB0aGUgSUE2NAptYWNoaW5lIGRlc2NyaXB0aW9uOgoKICAgICA7OyBUcnVlIGlmIE9QIGlzIGEgJ1NZTUJPTF9SRUYnIHdoaWNoIHJlZmVycyB0byB0aGUgc2RhdGEgc2VjdGlvbi4KICAgICAoZGVmaW5lX3ByZWRpY2F0ZSAic21hbGxfYWRkcl9zeW1ib2xpY19vcGVyYW5kIgogICAgICAgKGFuZCAobWF0Y2hfY29kZSAic3ltYm9sX3JlZiIpCiAgICAgICAgICAgIChtYXRjaF90ZXN0ICJTWU1CT0xfUkVGX1NNQUxMX0FERFJfUCAob3ApIikpKQoKQW5kIGhlcmUgaXMgYW5vdGhlciwgc2hvd2luZyB0aGUgdXNlIG9mIHRoZSBDIGJsb2NrLgoKICAgICA7OyBUcnVlIGlmIE9QIGlzIGEgcmVnaXN0ZXIgb3BlcmFuZCB0aGF0IGlzIChvciBjb3VsZCBiZSkgYSBHUiByZWcuCiAgICAgKGRlZmluZV9wcmVkaWNhdGUgImdyX3JlZ2lzdGVyX29wZXJhbmQiCiAgICAgICAobWF0Y2hfb3BlcmFuZCAwICJyZWdpc3Rlcl9vcGVyYW5kIikKICAgICB7CiAgICAgICB1bnNpZ25lZCBpbnQgcmVnbm87CiAgICAgICBpZiAoR0VUX0NPREUgKG9wKSA9PSBTVUJSRUcpCiAgICAgICAgIG9wID0gU1VCUkVHX1JFRyAob3ApOwoKICAgICAgIHJlZ25vID0gUkVHTk8gKG9wKTsKICAgICAgIHJldHVybiAocmVnbm8gPj0gRklSU1RfUFNFVURPX1JFR0lTVEVSIHx8IEdFTkVSQUxfUkVHTk9fUCAocmVnbm8pKTsKICAgICB9KQoKIFByZWRpY2F0ZXMgd3JpdHRlbiB3aXRoICdkZWZpbmVfcHJlZGljYXRlJyBhdXRvbWF0aWNhbGx5IGluY2x1ZGUgYSB0ZXN0CnRoYXQgTU9ERSBpcyAnVk9JRG1vZGUnLCBvciBPUCBoYXMgdGhlIHNhbWUgbW9kZSBhcyBNT0RFLCBvciBPUCBpcyBhCidDT05TVF9JTlQnIG9yICdDT05TVF9ET1VCTEUnLiAgVGhleSBkbyBfbm90XyBjaGVjayBzcGVjaWZpY2FsbHkgZm9yCmludGVnZXIgJ0NPTlNUX0RPVUJMRScsIG5vciBkbyB0aGV5IHRlc3QgdGhhdCB0aGUgdmFsdWUgb2YgZWl0aGVyIGtpbmQKb2YgY29uc3RhbnQgZml0cyBpbiB0aGUgcmVxdWVzdGVkIG1vZGUuICBUaGlzIGlzIGJlY2F1c2UgdGFyZ2V0LXNwZWNpZmljCnByZWRpY2F0ZXMgdGhhdCB0YWtlIGNvbnN0YW50cyB1c3VhbGx5IGhhdmUgdG8gZG8gbW9yZSBzdHJpbmdlbnQgdmFsdWUKY2hlY2tzIGFueXdheS4gIElmIHlvdSBuZWVkIHRoZSBleGFjdCBzYW1lIHRyZWF0bWVudCBvZiAnQ09OU1RfSU5UJyBvcgonQ09OU1RfRE9VQkxFJyB0aGF0IHRoZSBnZW5lcmljIHByZWRpY2F0ZXMgcHJvdmlkZSwgdXNlIGEKJ01BVENIX09QRVJBTkQnIHN1YmV4cHJlc3Npb24gdG8gY2FsbCAnY29uc3RfaW50X29wZXJhbmQnLAonY29uc3RfZG91YmxlX29wZXJhbmQnLCBvciAnaW1tZWRpYXRlX29wZXJhbmQnLgoKIFByZWRpY2F0ZXMgd3JpdHRlbiB3aXRoICdkZWZpbmVfc3BlY2lhbF9wcmVkaWNhdGUnIGRvIG5vdCBnZXQgYW55CmF1dG9tYXRpYyBtb2RlIGNoZWNrcywgYW5kIGFyZSB0cmVhdGVkIGFzIGhhdmluZyBzcGVjaWFsIG1vZGUgaGFuZGxpbmcKYnkgJ2dlbnJlY29nJy4KCiBUaGUgcHJvZ3JhbSAnZ2VucHJlZHMnIGlzIHJlc3BvbnNpYmxlIGZvciBnZW5lcmF0aW5nIGNvZGUgdG8gdGVzdApwcmVkaWNhdGVzLiAgSXQgYWxzbyB3cml0ZXMgYSBoZWFkZXIgZmlsZSBjb250YWluaW5nIGZ1bmN0aW9uCmRlY2xhcmF0aW9ucyBmb3IgYWxsIG1hY2hpbmUtc3BlY2lmaWMgcHJlZGljYXRlcy4gIEl0IGlzIG5vdCBuZWNlc3NhcnkKdG8gZGVjbGFyZSB0aGVzZSBwcmVkaWNhdGVzIGluICdDUFUtcHJvdG9zLmgnLgoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IENvbnN0cmFpbnRzLCAgTmV4dDogU3RhbmRhcmQgTmFtZXMsICBQcmV2OiBQcmVkaWNhdGVzLCAgVXA6IE1hY2hpbmUgRGVzYwoKMTQuOCBPcGVyYW5kIENvbnN0cmFpbnRzCj09PT09PT09PT09PT09PT09PT09PT09PQoKRWFjaCAnbWF0Y2hfb3BlcmFuZCcgaW4gYW4gaW5zdHJ1Y3Rpb24gcGF0dGVybiBjYW4gc3BlY2lmeSBjb25zdHJhaW50cwpmb3IgdGhlIG9wZXJhbmRzIGFsbG93ZWQuICBUaGUgY29uc3RyYWludHMgYWxsb3cgeW91IHRvIGZpbmUtdHVuZQptYXRjaGluZyB3aXRoaW4gdGhlIHNldCBvZiBvcGVyYW5kcyBhbGxvd2VkIGJ5IHRoZSBwcmVkaWNhdGUuCgogQ29uc3RyYWludHMgY2FuIHNheSB3aGV0aGVyIGFuIG9wZXJhbmQgbWF5IGJlIGluIGEgcmVnaXN0ZXIsIGFuZCB3aGljaApraW5kcyBvZiByZWdpc3Rlcjsgd2hldGhlciB0aGUgb3BlcmFuZCBjYW4gYmUgYSBtZW1vcnkgcmVmZXJlbmNlLCBhbmQKd2hpY2gga2luZHMgb2YgYWRkcmVzczsgd2hldGhlciB0aGUgb3BlcmFuZCBtYXkgYmUgYW4gaW1tZWRpYXRlCmNvbnN0YW50LCBhbmQgd2hpY2ggcG9zc2libGUgdmFsdWVzIGl0IG1heSBoYXZlLiAgQ29uc3RyYWludHMgY2FuIGFsc28KcmVxdWlyZSB0d28gb3BlcmFuZHMgdG8gbWF0Y2guCgoqIE1lbnU6CgoqIFNpbXBsZSBDb25zdHJhaW50czo6ICBCYXNpYyB1c2Ugb2YgY29uc3RyYWludHMuCiogTXVsdGktQWx0ZXJuYXRpdmU6OiAgIFdoZW4gYW4gaW5zbiBoYXMgdHdvIGFsdGVybmF0aXZlIGNvbnN0cmFpbnQtcGF0dGVybnMuCiogQ2xhc3MgUHJlZmVyZW5jZXM6OiAgIENvbnN0cmFpbnRzIGd1aWRlIHdoaWNoIGhhcmQgcmVnaXN0ZXIgdG8gcHV0IHRoaW5ncyBpbi4KKiBNb2RpZmllcnM6OiAgICAgICAgICAgTW9yZSBwcmVjaXNlIGNvbnRyb2wgb3ZlciBlZmZlY3RzIG9mIGNvbnN0cmFpbnRzLgoqIE1hY2hpbmUgQ29uc3RyYWludHM6OiBFeGlzdGluZyBjb25zdHJhaW50cyBmb3Igc29tZSBwYXJ0aWN1bGFyIG1hY2hpbmVzLgoqIERlZmluZSBDb25zdHJhaW50czo6ICBIb3cgdG8gZGVmaW5lIG1hY2hpbmUtc3BlY2lmaWMgY29uc3RyYWludHMuCiogQyBDb25zdHJhaW50IEludGVyZmFjZTo6IEhvdyB0byB0ZXN0IGNvbnN0cmFpbnRzIGZyb20gQyBjb2RlLgoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IFNpbXBsZSBDb25zdHJhaW50cywgIE5leHQ6IE11bHRpLUFsdGVybmF0aXZlLCAgVXA6IENvbnN0cmFpbnRzCgoxNC44LjEgU2ltcGxlIENvbnN0cmFpbnRzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KClRoZSBzaW1wbGVzdCBraW5kIG9mIGNvbnN0cmFpbnQgaXMgYSBzdHJpbmcgZnVsbCBvZiBsZXR0ZXJzLCBlYWNoIG9mCndoaWNoIGRlc2NyaWJlcyBvbmUga2luZCBvZiBvcGVyYW5kIHRoYXQgaXMgcGVybWl0dGVkLiAgSGVyZSBhcmUgdGhlCmxldHRlcnMgdGhhdCBhcmUgYWxsb3dlZDoKCndoaXRlc3BhY2UKICAgICBXaGl0ZXNwYWNlIGNoYXJhY3RlcnMgYXJlIGlnbm9yZWQgYW5kIGNhbiBiZSBpbnNlcnRlZCBhdCBhbnkKICAgICBwb3NpdGlvbiBleGNlcHQgdGhlIGZpcnN0LiAgVGhpcyBlbmFibGVzIGVhY2ggYWx0ZXJuYXRpdmUgZm9yCiAgICAgZGlmZmVyZW50IG9wZXJhbmRzIHRvIGJlIHZpc3VhbGx5IGFsaWduZWQgaW4gdGhlIG1hY2hpbmUKICAgICBkZXNjcmlwdGlvbiBldmVuIGlmIHRoZXkgaGF2ZSBkaWZmZXJlbnQgbnVtYmVyIG9mIGNvbnN0cmFpbnRzIGFuZAogICAgIG1vZGlmaWVycy4KCidtJwogICAgIEEgbWVtb3J5IG9wZXJhbmQgaXMgYWxsb3dlZCwgd2l0aCBhbnkga2luZCBvZiBhZGRyZXNzIHRoYXQgdGhlCiAgICAgbWFjaGluZSBzdXBwb3J0cyBpbiBnZW5lcmFsLgoKJ28nCiAgICAgQSBtZW1vcnkgb3BlcmFuZCBpcyBhbGxvd2VkLCBidXQgb25seSBpZiB0aGUgYWRkcmVzcyBpcwogICAgICJvZmZzZXR0YWJsZSIuICBUaGlzIG1lYW5zIHRoYXQgYWRkaW5nIGEgc21hbGwgaW50ZWdlciAoYWN0dWFsbHksCiAgICAgdGhlIHdpZHRoIGluIGJ5dGVzIG9mIHRoZSBvcGVyYW5kLCBhcyBkZXRlcm1pbmVkIGJ5IGl0cyBtYWNoaW5lCiAgICAgbW9kZSkgbWF5IGJlIGFkZGVkIHRvIHRoZSBhZGRyZXNzIGFuZCB0aGUgcmVzdWx0IGlzIGFsc28gYSB2YWxpZAogICAgIG1lbW9yeSBhZGRyZXNzLgoKICAgICBGb3IgZXhhbXBsZSwgYW4gYWRkcmVzcyB3aGljaCBpcyBjb25zdGFudCBpcyBvZmZzZXR0YWJsZTsgc28gaXMgYW4KICAgICBhZGRyZXNzIHRoYXQgaXMgdGhlIHN1bSBvZiBhIHJlZ2lzdGVyIGFuZCBhIGNvbnN0YW50IChhcyBsb25nIGFzIGEKICAgICBzbGlnaHRseSBsYXJnZXIgY29uc3RhbnQgaXMgYWxzbyB3aXRoaW4gdGhlIHJhbmdlIG9mCiAgICAgYWRkcmVzcy1vZmZzZXRzIHN1cHBvcnRlZCBieSB0aGUgbWFjaGluZSk7IGJ1dCBhbiBhdXRvaW5jcmVtZW50IG9yCiAgICAgYXV0b2RlY3JlbWVudCBhZGRyZXNzIGlzIG5vdCBvZmZzZXR0YWJsZS4gIE1vcmUgY29tcGxpY2F0ZWQKICAgICBpbmRpcmVjdC9pbmRleGVkIGFkZHJlc3NlcyBtYXkgb3IgbWF5IG5vdCBiZSBvZmZzZXR0YWJsZSBkZXBlbmRpbmcKICAgICBvbiB0aGUgb3RoZXIgYWRkcmVzc2luZyBtb2RlcyB0aGF0IHRoZSBtYWNoaW5lIHN1cHBvcnRzLgoKICAgICBOb3RlIHRoYXQgaW4gYW4gb3V0cHV0IG9wZXJhbmQgd2hpY2ggY2FuIGJlIG1hdGNoZWQgYnkgYW5vdGhlcgogICAgIG9wZXJhbmQsIHRoZSBjb25zdHJhaW50IGxldHRlciAnbycgaXMgdmFsaWQgb25seSB3aGVuIGFjY29tcGFuaWVkCiAgICAgYnkgYm90aCAnPCcgKGlmIHRoZSB0YXJnZXQgbWFjaGluZSBoYXMgcHJlZGVjcmVtZW50IGFkZHJlc3NpbmcpIGFuZAogICAgICc+JyAoaWYgdGhlIHRhcmdldCBtYWNoaW5lIGhhcyBwcmVpbmNyZW1lbnQgYWRkcmVzc2luZykuCgonVicKICAgICBBIG1lbW9yeSBvcGVyYW5kIHRoYXQgaXMgbm90IG9mZnNldHRhYmxlLiAgSW4gb3RoZXIgd29yZHMsIGFueXRoaW5nCiAgICAgdGhhdCB3b3VsZCBmaXQgdGhlICdtJyBjb25zdHJhaW50IGJ1dCBub3QgdGhlICdvJyBjb25zdHJhaW50LgoKJzwnCiAgICAgQSBtZW1vcnkgb3BlcmFuZCB3aXRoIGF1dG9kZWNyZW1lbnQgYWRkcmVzc2luZyAoZWl0aGVyIHByZWRlY3JlbWVudAogICAgIG9yIHBvc3RkZWNyZW1lbnQpIGlzIGFsbG93ZWQuCgonPicKICAgICBBIG1lbW9yeSBvcGVyYW5kIHdpdGggYXV0b2luY3JlbWVudCBhZGRyZXNzaW5nIChlaXRoZXIgcHJlaW5jcmVtZW50CiAgICAgb3IgcG9zdGluY3JlbWVudCkgaXMgYWxsb3dlZC4KCidyJwogICAgIEEgcmVnaXN0ZXIgb3BlcmFuZCBpcyBhbGxvd2VkIHByb3ZpZGVkIHRoYXQgaXQgaXMgaW4gYSBnZW5lcmFsCiAgICAgcmVnaXN0ZXIuCgonaScKICAgICBBbiBpbW1lZGlhdGUgaW50ZWdlciBvcGVyYW5kIChvbmUgd2l0aCBjb25zdGFudCB2YWx1ZSkgaXMgYWxsb3dlZC4KICAgICBUaGlzIGluY2x1ZGVzIHN5bWJvbGljIGNvbnN0YW50cyB3aG9zZSB2YWx1ZXMgd2lsbCBiZSBrbm93biBvbmx5IGF0CiAgICAgYXNzZW1ibHkgdGltZSBvciBsYXRlci4KCiduJwogICAgIEFuIGltbWVkaWF0ZSBpbnRlZ2VyIG9wZXJhbmQgd2l0aCBhIGtub3duIG51bWVyaWMgdmFsdWUgaXMgYWxsb3dlZC4KICAgICBNYW55IHN5c3RlbXMgY2Fubm90IHN1cHBvcnQgYXNzZW1ibHktdGltZSBjb25zdGFudHMgZm9yIG9wZXJhbmRzCiAgICAgbGVzcyB0aGFuIGEgd29yZCB3aWRlLiAgQ29uc3RyYWludHMgZm9yIHRoZXNlIG9wZXJhbmRzIHNob3VsZCB1c2UKICAgICAnbicgcmF0aGVyIHRoYW4gJ2knLgoKJ0knLCAnSicsICdLJywgLi4uICdQJwogICAgIE90aGVyIGxldHRlcnMgaW4gdGhlIHJhbmdlICdJJyB0aHJvdWdoICdQJyBtYXkgYmUgZGVmaW5lZCBpbiBhCiAgICAgbWFjaGluZS1kZXBlbmRlbnQgZmFzaGlvbiB0byBwZXJtaXQgaW1tZWRpYXRlIGludGVnZXIgb3BlcmFuZHMgd2l0aAogICAgIGV4cGxpY2l0IGludGVnZXIgdmFsdWVzIGluIHNwZWNpZmllZCByYW5nZXMuICBGb3IgZXhhbXBsZSwgb24gdGhlCiAgICAgNjgwMDAsICdJJyBpcyBkZWZpbmVkIHRvIHN0YW5kIGZvciB0aGUgcmFuZ2Ugb2YgdmFsdWVzIDEgdG8gOC4KICAgICBUaGlzIGlzIHRoZSByYW5nZSBwZXJtaXR0ZWQgYXMgYSBzaGlmdCBjb3VudCBpbiB0aGUgc2hpZnQKICAgICBpbnN0cnVjdGlvbnMuCgonRScKICAgICBBbiBpbW1lZGlhdGUgZmxvYXRpbmcgb3BlcmFuZCAoZXhwcmVzc2lvbiBjb2RlICdjb25zdF9kb3VibGUnKSBpcwogICAgIGFsbG93ZWQsIGJ1dCBvbmx5IGlmIHRoZSB0YXJnZXQgZmxvYXRpbmcgcG9pbnQgZm9ybWF0IGlzIHRoZSBzYW1lCiAgICAgYXMgdGhhdCBvZiB0aGUgaG9zdCBtYWNoaW5lIChvbiB3aGljaCB0aGUgY29tcGlsZXIgaXMgcnVubmluZykuCgonRicKICAgICBBbiBpbW1lZGlhdGUgZmxvYXRpbmcgb3BlcmFuZCAoZXhwcmVzc2lvbiBjb2RlICdjb25zdF9kb3VibGUnIG9yCiAgICAgJ2NvbnN0X3ZlY3RvcicpIGlzIGFsbG93ZWQuCgonRycsICdIJwogICAgICdHJyBhbmQgJ0gnIG1heSBiZSBkZWZpbmVkIGluIGEgbWFjaGluZS1kZXBlbmRlbnQgZmFzaGlvbiB0byBwZXJtaXQKICAgICBpbW1lZGlhdGUgZmxvYXRpbmcgb3BlcmFuZHMgaW4gcGFydGljdWxhciByYW5nZXMgb2YgdmFsdWVzLgoKJ3MnCiAgICAgQW4gaW1tZWRpYXRlIGludGVnZXIgb3BlcmFuZCB3aG9zZSB2YWx1ZSBpcyBub3QgYW4gZXhwbGljaXQgaW50ZWdlcgogICAgIGlzIGFsbG93ZWQuCgogICAgIFRoaXMgbWlnaHQgYXBwZWFyIHN0cmFuZ2U7IGlmIGFuIGluc24gYWxsb3dzIGEgY29uc3RhbnQgb3BlcmFuZAogICAgIHdpdGggYSB2YWx1ZSBub3Qga25vd24gYXQgY29tcGlsZSB0aW1lLCBpdCBjZXJ0YWlubHkgbXVzdCBhbGxvdyBhbnkKICAgICBrbm93biB2YWx1ZS4gIFNvIHdoeSB1c2UgJ3MnIGluc3RlYWQgb2YgJ2knPyAgU29tZXRpbWVzIGl0IGFsbG93cwogICAgIGJldHRlciBjb2RlIHRvIGJlIGdlbmVyYXRlZC4KCiAgICAgRm9yIGV4YW1wbGUsIG9uIHRoZSA2ODAwMCBpbiBhIGZ1bGx3b3JkIGluc3RydWN0aW9uIGl0IGlzIHBvc3NpYmxlCiAgICAgdG8gdXNlIGFuIGltbWVkaWF0ZSBvcGVyYW5kOyBidXQgaWYgdGhlIGltbWVkaWF0ZSB2YWx1ZSBpcyBiZXR3ZWVuCiAgICAgLTEyOCBhbmQgMTI3LCBiZXR0ZXIgY29kZSByZXN1bHRzIGZyb20gbG9hZGluZyB0aGUgdmFsdWUgaW50byBhCiAgICAgcmVnaXN0ZXIgYW5kIHVzaW5nIHRoZSByZWdpc3Rlci4gIFRoaXMgaXMgYmVjYXVzZSB0aGUgbG9hZCBpbnRvIHRoZQogICAgIHJlZ2lzdGVyIGNhbiBiZSBkb25lIHdpdGggYSAnbW92ZXEnIGluc3RydWN0aW9uLiAgV2UgYXJyYW5nZSBmb3IKICAgICB0aGlzIHRvIGhhcHBlbiBieSBkZWZpbmluZyB0aGUgbGV0dGVyICdLJyB0byBtZWFuICJhbnkgaW50ZWdlcgogICAgIG91dHNpZGUgdGhlIHJhbmdlIC0xMjggdG8gMTI3IiwgYW5kIHRoZW4gc3BlY2lmeWluZyAnS3MnIGluIHRoZQogICAgIG9wZXJhbmQgY29uc3RyYWludHMuCgonZycKICAgICBBbnkgcmVnaXN0ZXIsIG1lbW9yeSBvciBpbW1lZGlhdGUgaW50ZWdlciBvcGVyYW5kIGlzIGFsbG93ZWQsCiAgICAgZXhjZXB0IGZvciByZWdpc3RlcnMgdGhhdCBhcmUgbm90IGdlbmVyYWwgcmVnaXN0ZXJzLgoKJ1gnCiAgICAgQW55IG9wZXJhbmQgd2hhdHNvZXZlciBpcyBhbGxvd2VkLCBldmVuIGlmIGl0IGRvZXMgbm90IHNhdGlzZnkKICAgICAnZ2VuZXJhbF9vcGVyYW5kJy4gIFRoaXMgaXMgbm9ybWFsbHkgdXNlZCBpbiB0aGUgY29uc3RyYWludCBvZiBhCiAgICAgJ21hdGNoX3NjcmF0Y2gnIHdoZW4gY2VydGFpbiBhbHRlcm5hdGl2ZXMgd2lsbCBub3QgYWN0dWFsbHkgcmVxdWlyZQogICAgIGEgc2NyYXRjaCByZWdpc3Rlci4KCicwJywgJzEnLCAnMicsIC4uLiAnOScKICAgICBBbiBvcGVyYW5kIHRoYXQgbWF0Y2hlcyB0aGUgc3BlY2lmaWVkIG9wZXJhbmQgbnVtYmVyIGlzIGFsbG93ZWQuCiAgICAgSWYgYSBkaWdpdCBpcyB1c2VkIHRvZ2V0aGVyIHdpdGggbGV0dGVycyB3aXRoaW4gdGhlIHNhbWUKICAgICBhbHRlcm5hdGl2ZSwgdGhlIGRpZ2l0IHNob3VsZCBjb21lIGxhc3QuCgogICAgIFRoaXMgbnVtYmVyIGlzIGFsbG93ZWQgdG8gYmUgbW9yZSB0aGFuIGEgc2luZ2xlIGRpZ2l0LiAgSWYgbXVsdGlwbGUKICAgICBkaWdpdHMgYXJlIGVuY291bnRlcmVkIGNvbnNlY3V0aXZlbHksIHRoZXkgYXJlIGludGVycHJldGVkIGFzIGEKICAgICBzaW5nbGUgZGVjaW1hbCBpbnRlZ2VyLiAgVGhlcmUgaXMgc2NhbnQgY2hhbmNlIGZvciBhbWJpZ3VpdHksIHNpbmNlCiAgICAgdG8tZGF0ZSBpdCBoYXMgbmV2ZXIgYmVlbiBkZXNpcmFibGUgdGhhdCAnMTAnIGJlIGludGVycHJldGVkIGFzCiAgICAgbWF0Y2hpbmcgZWl0aGVyIG9wZXJhbmQgMSBfb3JfIG9wZXJhbmQgMC4gIFNob3VsZCB0aGlzIGJlIGRlc2lyZWQsCiAgICAgb25lIGNhbiB1c2UgbXVsdGlwbGUgYWx0ZXJuYXRpdmVzIGluc3RlYWQuCgogICAgIFRoaXMgaXMgY2FsbGVkIGEgIm1hdGNoaW5nIGNvbnN0cmFpbnQiIGFuZCB3aGF0IGl0IHJlYWxseSBtZWFucyBpcwogICAgIHRoYXQgdGhlIGFzc2VtYmxlciBoYXMgb25seSBhIHNpbmdsZSBvcGVyYW5kIHRoYXQgZmlsbHMgdHdvIHJvbGVzCiAgICAgY29uc2lkZXJlZCBzZXBhcmF0ZSBpbiB0aGUgUlRMIGluc24uICBGb3IgZXhhbXBsZSwgYW4gYWRkIGluc24gaGFzCiAgICAgdHdvIGlucHV0IG9wZXJhbmRzIGFuZCBvbmUgb3V0cHV0IG9wZXJhbmQgaW4gdGhlIFJUTCwgYnV0IG9uIG1vc3QKICAgICBDSVNDIG1hY2hpbmVzIGFuIGFkZCBpbnN0cnVjdGlvbiByZWFsbHkgaGFzIG9ubHkgdHdvIG9wZXJhbmRzLCBvbmUKICAgICBvZiB0aGVtIGFuIGlucHV0LW91dHB1dCBvcGVyYW5kOgoKICAgICAgICAgIGFkZGwgIzM1LHIxMgoKICAgICBNYXRjaGluZyBjb25zdHJhaW50cyBhcmUgdXNlZCBpbiB0aGVzZSBjaXJjdW1zdGFuY2VzLiAgTW9yZQogICAgIHByZWNpc2VseSwgdGhlIHR3byBvcGVyYW5kcyB0aGF0IG1hdGNoIG11c3QgaW5jbHVkZSBvbmUgaW5wdXQtb25seQogICAgIG9wZXJhbmQgYW5kIG9uZSBvdXRwdXQtb25seSBvcGVyYW5kLiAgTW9yZW92ZXIsIHRoZSBkaWdpdCBtdXN0IGJlIGEKICAgICBzbWFsbGVyIG51bWJlciB0aGFuIHRoZSBudW1iZXIgb2YgdGhlIG9wZXJhbmQgdGhhdCB1c2VzIGl0IGluIHRoZQogICAgIGNvbnN0cmFpbnQuCgogICAgIEZvciBvcGVyYW5kcyB0byBtYXRjaCBpbiBhIHBhcnRpY3VsYXIgY2FzZSB1c3VhbGx5IG1lYW5zIHRoYXQgdGhleQogICAgIGFyZSBpZGVudGljYWwtbG9va2luZyBSVEwgZXhwcmVzc2lvbnMuICBCdXQgaW4gYSBmZXcgc3BlY2lhbCBjYXNlcwogICAgIHNwZWNpZmljIGtpbmRzIG9mIGRpc3NpbWlsYXJpdHkgYXJlIGFsbG93ZWQuICBGb3IgZXhhbXBsZSwgJyp4JyBhcwogICAgIGFuIGlucHV0IG9wZXJhbmQgd2lsbCBtYXRjaCAnKngrKycgYXMgYW4gb3V0cHV0IG9wZXJhbmQuICBGb3IKICAgICBwcm9wZXIgcmVzdWx0cyBpbiBzdWNoIGNhc2VzLCB0aGUgb3V0cHV0IHRlbXBsYXRlIHNob3VsZCBhbHdheXMgdXNlCiAgICAgdGhlIG91dHB1dC1vcGVyYW5kJ3MgbnVtYmVyIHdoZW4gcHJpbnRpbmcgdGhlIG9wZXJhbmQuCgoncCcKICAgICBBbiBvcGVyYW5kIHRoYXQgaXMgYSB2YWxpZCBtZW1vcnkgYWRkcmVzcyBpcyBhbGxvd2VkLiAgVGhpcyBpcyBmb3IKICAgICAibG9hZCBhZGRyZXNzIiBhbmQgInB1c2ggYWRkcmVzcyIgaW5zdHJ1Y3Rpb25zLgoKICAgICAncCcgaW4gdGhlIGNvbnN0cmFpbnQgbXVzdCBiZSBhY2NvbXBhbmllZCBieSAnYWRkcmVzc19vcGVyYW5kJyBhcwogICAgIHRoZSBwcmVkaWNhdGUgaW4gdGhlICdtYXRjaF9vcGVyYW5kJy4gIFRoaXMgcHJlZGljYXRlIGludGVycHJldHMKICAgICB0aGUgbW9kZSBzcGVjaWZpZWQgaW4gdGhlICdtYXRjaF9vcGVyYW5kJyBhcyB0aGUgbW9kZSBvZiB0aGUgbWVtb3J5CiAgICAgcmVmZXJlbmNlIGZvciB3aGljaCB0aGUgYWRkcmVzcyB3b3VsZCBiZSB2YWxpZC4KCk9USEVSLUxFVFRFUlMKICAgICBPdGhlciBsZXR0ZXJzIGNhbiBiZSBkZWZpbmVkIGluIG1hY2hpbmUtZGVwZW5kZW50IGZhc2hpb24gdG8gc3RhbmQKICAgICBmb3IgcGFydGljdWxhciBjbGFzc2VzIG9mIHJlZ2lzdGVycyBvciBvdGhlciBhcmJpdHJhcnkgb3BlcmFuZAogICAgIHR5cGVzLiAgJ2QnLCAnYScgYW5kICdmJyBhcmUgZGVmaW5lZCBvbiB0aGUgNjgwMDAvNjgwMjAgdG8gc3RhbmQKICAgICBmb3IgZGF0YSwgYWRkcmVzcyBhbmQgZmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXJzLgoKIEluIG9yZGVyIHRvIGhhdmUgdmFsaWQgYXNzZW1ibGVyIGNvZGUsIGVhY2ggb3BlcmFuZCBtdXN0IHNhdGlzZnkgaXRzCmNvbnN0cmFpbnQuICBCdXQgYSBmYWlsdXJlIHRvIGRvIHNvIGRvZXMgbm90IHByZXZlbnQgdGhlIHBhdHRlcm4gZnJvbQphcHBseWluZyB0byBhbiBpbnNuLiAgSW5zdGVhZCwgaXQgZGlyZWN0cyB0aGUgY29tcGlsZXIgdG8gbW9kaWZ5IHRoZQpjb2RlIHNvIHRoYXQgdGhlIGNvbnN0cmFpbnQgd2lsbCBiZSBzYXRpc2ZpZWQuICBVc3VhbGx5IHRoaXMgaXMgZG9uZSBieQpjb3B5aW5nIGFuIG9wZXJhbmQgaW50byBhIHJlZ2lzdGVyLgoKIENvbnRyYXN0LCB0aGVyZWZvcmUsIHRoZSB0d28gaW5zdHJ1Y3Rpb24gcGF0dGVybnMgdGhhdCBmb2xsb3c6CgogICAgIChkZWZpbmVfaW5zbiAiIgogICAgICAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAiZ2VuZXJhbF9vcGVyYW5kIiAiPXIiKQogICAgICAgICAgICAgKHBsdXM6U0kgKG1hdGNoX2R1cCAwKQogICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6U0kgMSAiZ2VuZXJhbF9vcGVyYW5kIiAiciIpKSldCiAgICAgICAiIgogICAgICAgIi4uLiIpCgp3aGljaCBoYXMgdHdvIG9wZXJhbmRzLCBvbmUgb2Ygd2hpY2ggbXVzdCBhcHBlYXIgaW4gdHdvIHBsYWNlcywgYW5kCgogICAgIChkZWZpbmVfaW5zbiAiIgogICAgICAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAiZ2VuZXJhbF9vcGVyYW5kIiAiPXIiKQogICAgICAgICAgICAgKHBsdXM6U0kgKG1hdGNoX29wZXJhbmQ6U0kgMSAiZ2VuZXJhbF9vcGVyYW5kIiAiMCIpCiAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpTSSAyICJnZW5lcmFsX29wZXJhbmQiICJyIikpKV0KICAgICAgICIiCiAgICAgICAiLi4uIikKCndoaWNoIGhhcyB0aHJlZSBvcGVyYW5kcywgdHdvIG9mIHdoaWNoIGFyZSByZXF1aXJlZCBieSBhIGNvbnN0cmFpbnQgdG8KYmUgaWRlbnRpY2FsLiAgSWYgd2UgYXJlIGNvbnNpZGVyaW5nIGFuIGluc24gb2YgdGhlIGZvcm0KCiAgICAgKGluc24gTiBQUkVWIE5FWFQKICAgICAgIChzZXQgKHJlZzpTSSAzKQogICAgICAgICAgICAocGx1czpTSSAocmVnOlNJIDYpIChyZWc6U0kgMTA5KSkpCiAgICAgICAuLi4pCgp0aGUgZmlyc3QgcGF0dGVybiB3b3VsZCBub3QgYXBwbHkgYXQgYWxsLCBiZWNhdXNlIHRoaXMgaW5zbiBkb2VzIG5vdApjb250YWluIHR3byBpZGVudGljYWwgc3ViZXhwcmVzc2lvbnMgaW4gdGhlIHJpZ2h0IHBsYWNlLiAgVGhlIHBhdHRlcm4Kd291bGQgc2F5LCAiVGhhdCBkb2VzIG5vdCBsb29rIGxpa2UgYW4gYWRkIGluc3RydWN0aW9uOyB0cnkgb3RoZXIKcGF0dGVybnMiLiAgVGhlIHNlY29uZCBwYXR0ZXJuIHdvdWxkIHNheSwgIlllcywgdGhhdCdzIGFuIGFkZAppbnN0cnVjdGlvbiwgYnV0IHRoZXJlIGlzIHNvbWV0aGluZyB3cm9uZyB3aXRoIGl0Ii4gIEl0IHdvdWxkIGRpcmVjdCB0aGUKcmVsb2FkIHBhc3Mgb2YgdGhlIGNvbXBpbGVyIHRvIGdlbmVyYXRlIGFkZGl0aW9uYWwgaW5zbnMgdG8gbWFrZSB0aGUKY29uc3RyYWludCB0cnVlLiAgVGhlIHJlc3VsdHMgbWlnaHQgbG9vayBsaWtlIHRoaXM6CgogICAgIChpbnNuIE4yIFBSRVYgTgogICAgICAgKHNldCAocmVnOlNJIDMpIChyZWc6U0kgNikpCiAgICAgICAuLi4pCgogICAgIChpbnNuIE4gTjIgTkVYVAogICAgICAgKHNldCAocmVnOlNJIDMpCiAgICAgICAgICAgIChwbHVzOlNJIChyZWc6U0kgMykgKHJlZzpTSSAxMDkpKSkKICAgICAgIC4uLikKCiBJdCBpcyB1cCB0byB5b3UgdG8gbWFrZSBzdXJlIHRoYXQgZWFjaCBvcGVyYW5kLCBpbiBlYWNoIHBhdHRlcm4sIGhhcwpjb25zdHJhaW50cyB0aGF0IGNhbiBoYW5kbGUgYW55IFJUTCBleHByZXNzaW9uIHRoYXQgY291bGQgYmUgcHJlc2VudCBmb3IKdGhhdCBvcGVyYW5kLiAgKFdoZW4gbXVsdGlwbGUgYWx0ZXJuYXRpdmVzIGFyZSBpbiB1c2UsIGVhY2ggcGF0dGVybgptdXN0LCBmb3IgZWFjaCBwb3NzaWJsZSBjb21iaW5hdGlvbiBvZiBvcGVyYW5kIGV4cHJlc3Npb25zLCBoYXZlIGF0CmxlYXN0IG9uZSBhbHRlcm5hdGl2ZSB3aGljaCBjYW4gaGFuZGxlIHRoYXQgY29tYmluYXRpb24gb2Ygb3BlcmFuZHMuKQpUaGUgY29uc3RyYWludHMgZG9uJ3QgbmVlZCB0byBfYWxsb3dfIGFueSBwb3NzaWJsZSBvcGVyYW5kLS13aGVuIHRoaXMgaXMKdGhlIGNhc2UsIHRoZXkgZG8gbm90IGNvbnN0cmFpbi0tYnV0IHRoZXkgbXVzdCBhdCBsZWFzdCBwb2ludCB0aGUgd2F5IHRvCnJlbG9hZGluZyBhbnkgcG9zc2libGUgb3BlcmFuZCBzbyB0aGF0IGl0IHdpbGwgZml0LgoKICAgKiBJZiB0aGUgY29uc3RyYWludCBhY2NlcHRzIHdoYXRldmVyIG9wZXJhbmRzIHRoZSBwcmVkaWNhdGUgcGVybWl0cywKICAgICB0aGVyZSBpcyBubyBwcm9ibGVtOiByZWxvYWRpbmcgaXMgbmV2ZXIgbmVjZXNzYXJ5IGZvciB0aGlzIG9wZXJhbmQuCgogICAgIEZvciBleGFtcGxlLCBhbiBvcGVyYW5kIHdob3NlIGNvbnN0cmFpbnRzIHBlcm1pdCBldmVyeXRoaW5nIGV4Y2VwdAogICAgIHJlZ2lzdGVycyBpcyBzYWZlIHByb3ZpZGVkIGl0cyBwcmVkaWNhdGUgcmVqZWN0cyByZWdpc3RlcnMuCgogICAgIEFuIG9wZXJhbmQgd2hvc2UgcHJlZGljYXRlIGFjY2VwdHMgb25seSBjb25zdGFudCB2YWx1ZXMgaXMgc2FmZQogICAgIHByb3ZpZGVkIGl0cyBjb25zdHJhaW50cyBpbmNsdWRlIHRoZSBsZXR0ZXIgJ2knLiAgSWYgYW55IHBvc3NpYmxlCiAgICAgY29uc3RhbnQgdmFsdWUgaXMgYWNjZXB0ZWQsIHRoZW4gbm90aGluZyBsZXNzIHRoYW4gJ2knIHdpbGwgZG87IGlmCiAgICAgdGhlIHByZWRpY2F0ZSBpcyBtb3JlIHNlbGVjdGl2ZSwgdGhlbiB0aGUgY29uc3RyYWludHMgbWF5IGFsc28gYmUKICAgICBtb3JlIHNlbGVjdGl2ZS4KCiAgICogQW55IG9wZXJhbmQgZXhwcmVzc2lvbiBjYW4gYmUgcmVsb2FkZWQgYnkgY29weWluZyBpdCBpbnRvIGEKICAgICByZWdpc3Rlci4gIFNvIGlmIGFuIG9wZXJhbmQncyBjb25zdHJhaW50cyBhbGxvdyBzb21lIGtpbmQgb2YKICAgICByZWdpc3RlciwgaXQgaXMgY2VydGFpbiB0byBiZSBzYWZlLiAgSXQgbmVlZCBub3QgcGVybWl0IGFsbCBjbGFzc2VzCiAgICAgb2YgcmVnaXN0ZXJzOyB0aGUgY29tcGlsZXIga25vd3MgaG93IHRvIGNvcHkgYSByZWdpc3RlciBpbnRvCiAgICAgYW5vdGhlciByZWdpc3RlciBvZiB0aGUgcHJvcGVyIGNsYXNzIGluIG9yZGVyIHRvIG1ha2UgYW4KICAgICBpbnN0cnVjdGlvbiB2YWxpZC4KCiAgICogQSBub25vZmZzZXR0YWJsZSBtZW1vcnkgcmVmZXJlbmNlIGNhbiBiZSByZWxvYWRlZCBieSBjb3B5aW5nIHRoZQogICAgIGFkZHJlc3MgaW50byBhIHJlZ2lzdGVyLiAgU28gaWYgdGhlIGNvbnN0cmFpbnQgdXNlcyB0aGUgbGV0dGVyICdvJywKICAgICBhbGwgbWVtb3J5IHJlZmVyZW5jZXMgYXJlIHRha2VuIGNhcmUgb2YuCgogICAqIEEgY29uc3RhbnQgb3BlcmFuZCBjYW4gYmUgcmVsb2FkZWQgYnkgYWxsb2NhdGluZyBzcGFjZSBpbiBtZW1vcnkgdG8KICAgICBob2xkIGl0IGFzIHByZWluaXRpYWxpemVkIGRhdGEuICBUaGVuIHRoZSBtZW1vcnkgcmVmZXJlbmNlIGNhbiBiZQogICAgIHVzZWQgaW4gcGxhY2Ugb2YgdGhlIGNvbnN0YW50LiAgU28gaWYgdGhlIGNvbnN0cmFpbnQgdXNlcyB0aGUKICAgICBsZXR0ZXJzICdvJyBvciAnbScsIGNvbnN0YW50IG9wZXJhbmRzIGFyZSBub3QgYSBwcm9ibGVtLgoKICAgKiBJZiB0aGUgY29uc3RyYWludCBwZXJtaXRzIGEgY29uc3RhbnQgYW5kIGEgcHNldWRvIHJlZ2lzdGVyIHVzZWQgaW4KICAgICBhbiBpbnNuIHdhcyBub3QgYWxsb2NhdGVkIHRvIGEgaGFyZCByZWdpc3RlciBhbmQgaXMgZXF1aXZhbGVudCB0byBhCiAgICAgY29uc3RhbnQsIHRoZSByZWdpc3RlciB3aWxsIGJlIHJlcGxhY2VkIHdpdGggdGhlIGNvbnN0YW50LiAgSWYgdGhlCiAgICAgcHJlZGljYXRlIGRvZXMgbm90IHBlcm1pdCBhIGNvbnN0YW50IGFuZCB0aGUgaW5zbiBpcyByZS1yZWNvZ25pemVkCiAgICAgZm9yIHNvbWUgcmVhc29uLCB0aGUgY29tcGlsZXIgd2lsbCBjcmFzaC4gIFRodXMgdGhlIHByZWRpY2F0ZSBtdXN0CiAgICAgYWx3YXlzIHJlY29nbml6ZSBhbnkgb2JqZWN0cyBhbGxvd2VkIGJ5IHRoZSBjb25zdHJhaW50LgoKIElmIHRoZSBvcGVyYW5kJ3MgcHJlZGljYXRlIGNhbiByZWNvZ25pemUgcmVnaXN0ZXJzLCBidXQgdGhlIGNvbnN0cmFpbnQKZG9lcyBub3QgcGVybWl0IHRoZW0sIGl0IGNhbiBtYWtlIHRoZSBjb21waWxlciBjcmFzaC4gIFdoZW4gdGhpcyBvcGVyYW5kCmhhcHBlbnMgdG8gYmUgYSByZWdpc3RlciwgdGhlIHJlbG9hZCBwYXNzIHdpbGwgYmUgc3R5bWllZCwgYmVjYXVzZSBpdApkb2VzIG5vdCBrbm93IGhvdyB0byBjb3B5IGEgcmVnaXN0ZXIgdGVtcG9yYXJpbHkgaW50byBtZW1vcnkuCgogSWYgdGhlIHByZWRpY2F0ZSBhY2NlcHRzIGEgdW5hcnkgb3BlcmF0b3IsIHRoZSBjb25zdHJhaW50IGFwcGxpZXMgdG8KdGhlIG9wZXJhbmQuICBGb3IgZXhhbXBsZSwgdGhlIE1JUFMgcHJvY2Vzc29yIGF0IElTQSBsZXZlbCAzIHN1cHBvcnRzIGFuCmluc3RydWN0aW9uIHdoaWNoIGFkZHMgdHdvIHJlZ2lzdGVycyBpbiAnU0ltb2RlJyB0byBwcm9kdWNlIGEgJ0RJbW9kZScKcmVzdWx0LCBidXQgb25seSBpZiB0aGUgcmVnaXN0ZXJzIGFyZSBjb3JyZWN0bHkgc2lnbiBleHRlbmRlZC4gIFRoaXMKcHJlZGljYXRlIGZvciB0aGUgaW5wdXQgb3BlcmFuZHMgYWNjZXB0cyBhICdzaWduX2V4dGVuZCcgb2YgYW4gJ1NJbW9kZScKcmVnaXN0ZXIuICBXcml0ZSB0aGUgY29uc3RyYWludCB0byBpbmRpY2F0ZSB0aGUgdHlwZSBvZiByZWdpc3RlciB0aGF0IGlzCnJlcXVpcmVkIGZvciB0aGUgb3BlcmFuZCBvZiB0aGUgJ3NpZ25fZXh0ZW5kJy4KCh8KRmlsZTogZ2NjaW50LmluZm8sICBOb2RlOiBNdWx0aS1BbHRlcm5hdGl2ZSwgIE5leHQ6IENsYXNzIFByZWZlcmVuY2VzLCAgUHJldjogU2ltcGxlIENvbnN0cmFpbnRzLCAgVXA6IENvbnN0cmFpbnRzCgoxNC44LjIgTXVsdGlwbGUgQWx0ZXJuYXRpdmUgQ29uc3RyYWludHMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpTb21ldGltZXMgYSBzaW5nbGUgaW5zdHJ1Y3Rpb24gaGFzIG11bHRpcGxlIGFsdGVybmF0aXZlIHNldHMgb2YgcG9zc2libGUKb3BlcmFuZHMuICBGb3IgZXhhbXBsZSwgb24gdGhlIDY4MDAwLCBhIGxvZ2ljYWwtb3IgaW5zdHJ1Y3Rpb24gY2FuCmNvbWJpbmUgcmVnaXN0ZXIgb3IgYW4gaW1tZWRpYXRlIHZhbHVlIGludG8gbWVtb3J5LCBvciBpdCBjYW4gY29tYmluZQphbnkga2luZCBvZiBvcGVyYW5kIGludG8gYSByZWdpc3RlcjsgYnV0IGl0IGNhbm5vdCBjb21iaW5lIG9uZSBtZW1vcnkKbG9jYXRpb24gaW50byBhbm90aGVyLgoKIFRoZXNlIGNvbnN0cmFpbnRzIGFyZSByZXByZXNlbnRlZCBhcyBtdWx0aXBsZSBhbHRlcm5hdGl2ZXMuICBBbgphbHRlcm5hdGl2ZSBjYW4gYmUgZGVzY3JpYmVkIGJ5IGEgc2VyaWVzIG9mIGxldHRlcnMgZm9yIGVhY2ggb3BlcmFuZC4KVGhlIG92ZXJhbGwgY29uc3RyYWludCBmb3IgYW4gb3BlcmFuZCBpcyBtYWRlIGZyb20gdGhlIGxldHRlcnMgZm9yIHRoaXMKb3BlcmFuZCBmcm9tIHRoZSBmaXJzdCBhbHRlcm5hdGl2ZSwgYSBjb21tYSwgdGhlIGxldHRlcnMgZm9yIHRoaXMKb3BlcmFuZCBmcm9tIHRoZSBzZWNvbmQgYWx0ZXJuYXRpdmUsIGEgY29tbWEsIGFuZCBzbyBvbiB1bnRpbCB0aGUgbGFzdAphbHRlcm5hdGl2ZS4gIEhlcmUgaXMgaG93IGl0IGlzIGRvbmUgZm9yIGZ1bGx3b3JkIGxvZ2ljYWwtb3Igb24gdGhlCjY4MDAwOgoKICAgICAoZGVmaW5lX2luc24gImlvcnNpMyIKICAgICAgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgImdlbmVyYWxfb3BlcmFuZCIgIj1tLGQiKQogICAgICAgICAgICAgKGlvcjpTSSAobWF0Y2hfb3BlcmFuZDpTSSAxICJnZW5lcmFsX29wZXJhbmQiICIlMCwwIikKICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6U0kgMiAiZ2VuZXJhbF9vcGVyYW5kIiAiZEtzLGRtS3MiKSkpXQogICAgICAgLi4uKQoKIFRoZSBmaXJzdCBhbHRlcm5hdGl2ZSBoYXMgJ20nIChtZW1vcnkpIGZvciBvcGVyYW5kIDAsICcwJyBmb3Igb3BlcmFuZCAxCihtZWFuaW5nIGl0IG11c3QgbWF0Y2ggb3BlcmFuZCAwKSwgYW5kICdkS3MnIGZvciBvcGVyYW5kIDIuICBUaGUgc2Vjb25kCmFsdGVybmF0aXZlIGhhcyAnZCcgKGRhdGEgcmVnaXN0ZXIpIGZvciBvcGVyYW5kIDAsICcwJyBmb3Igb3BlcmFuZCAxLAphbmQgJ2RtS3MnIGZvciBvcGVyYW5kIDIuICBUaGUgJz0nIGFuZCAnJScgaW4gdGhlIGNvbnN0cmFpbnRzIGFwcGx5IHRvCmFsbCB0aGUgYWx0ZXJuYXRpdmVzOyB0aGVpciBtZWFuaW5nIGlzIGV4cGxhaW5lZCBpbiB0aGUgbmV4dCBzZWN0aW9uCigqbm90ZSBDbGFzcyBQcmVmZXJlbmNlczo6KS4KCiBJZiBhbGwgdGhlIG9wZXJhbmRzIGZpdCBhbnkgb25lIGFsdGVybmF0aXZlLCB0aGUgaW5zdHJ1Y3Rpb24gaXMgdmFsaWQuCk90aGVyd2lzZSwgZm9yIGVhY2ggYWx0ZXJuYXRpdmUsIHRoZSBjb21waWxlciBjb3VudHMgaG93IG1hbnkKaW5zdHJ1Y3Rpb25zIG11c3QgYmUgYWRkZWQgdG8gY29weSB0aGUgb3BlcmFuZHMgc28gdGhhdCB0aGF0IGFsdGVybmF0aXZlCmFwcGxpZXMuICBUaGUgYWx0ZXJuYXRpdmUgcmVxdWlyaW5nIHRoZSBsZWFzdCBjb3B5aW5nIGlzIGNob3Nlbi4gIElmIHR3bwphbHRlcm5hdGl2ZXMgbmVlZCB0aGUgc2FtZSBhbW91bnQgb2YgY29weWluZywgdGhlIG9uZSB0aGF0IGNvbWVzIGZpcnN0CmlzIGNob3Nlbi4gIFRoZXNlIGNob2ljZXMgY2FuIGJlIGFsdGVyZWQgd2l0aCB0aGUgJz8nIGFuZCAnIScKY2hhcmFjdGVyczoKCic/JwogICAgIERpc3BhcmFnZSBzbGlnaHRseSB0aGUgYWx0ZXJuYXRpdmUgdGhhdCB0aGUgJz8nIGFwcGVhcnMgaW4sIGFzIGEKICAgICBjaG9pY2Ugd2hlbiBubyBhbHRlcm5hdGl2ZSBhcHBsaWVzIGV4YWN0bHkuICBUaGUgY29tcGlsZXIgcmVnYXJkcwogICAgIHRoaXMgYWx0ZXJuYXRpdmUgYXMgb25lIHVuaXQgbW9yZSBjb3N0bHkgZm9yIGVhY2ggJz8nIHRoYXQgYXBwZWFycwogICAgIGluIGl0LgoKJyEnCiAgICAgRGlzcGFyYWdlIHNldmVyZWx5IHRoZSBhbHRlcm5hdGl2ZSB0aGF0IHRoZSAnIScgYXBwZWFycyBpbi4gIFRoaXMKICAgICBhbHRlcm5hdGl2ZSBjYW4gc3RpbGwgYmUgdXNlZCBpZiBpdCBmaXRzIHdpdGhvdXQgcmVsb2FkaW5nLCBidXQgaWYKICAgICByZWxvYWRpbmcgaXMgbmVlZGVkLCBzb21lIG90aGVyIGFsdGVybmF0aXZlIHdpbGwgYmUgdXNlZC4KCiBXaGVuIGFuIGluc24gcGF0dGVybiBoYXMgbXVsdGlwbGUgYWx0ZXJuYXRpdmVzIGluIGl0cyBjb25zdHJhaW50cywKb2Z0ZW4gdGhlIGFwcGVhcmFuY2Ugb2YgdGhlIGFzc2VtYmxlciBjb2RlIGlzIGRldGVybWluZWQgbW9zdGx5IGJ5IHdoaWNoCmFsdGVybmF0aXZlIHdhcyBtYXRjaGVkLiAgV2hlbiB0aGlzIGlzIHNvLCB0aGUgQyBjb2RlIGZvciB3cml0aW5nIHRoZQphc3NlbWJsZXIgY29kZSBjYW4gdXNlIHRoZSB2YXJpYWJsZSAnd2hpY2hfYWx0ZXJuYXRpdmUnLCB3aGljaCBpcyB0aGUKb3JkaW5hbCBudW1iZXIgb2YgdGhlIGFsdGVybmF0aXZlIHRoYXQgd2FzIGFjdHVhbGx5IHNhdGlzZmllZCAoMCBmb3IgdGhlCmZpcnN0LCAxIGZvciB0aGUgc2Vjb25kIGFsdGVybmF0aXZlLCBldGMuKS4gICpOb3RlIE91dHB1dCBTdGF0ZW1lbnQ6Oi4KCh8KRmlsZTogZ2NjaW50LmluZm8sICBOb2RlOiBDbGFzcyBQcmVmZXJlbmNlcywgIE5leHQ6IE1vZGlmaWVycywgIFByZXY6IE11bHRpLUFsdGVybmF0aXZlLCAgVXA6IENvbnN0cmFpbnRzCgoxNC44LjMgUmVnaXN0ZXIgQ2xhc3MgUHJlZmVyZW5jZXMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpUaGUgb3BlcmFuZCBjb25zdHJhaW50cyBoYXZlIGFub3RoZXIgZnVuY3Rpb246IHRoZXkgZW5hYmxlIHRoZSBjb21waWxlcgp0byBkZWNpZGUgd2hpY2gga2luZCBvZiBoYXJkd2FyZSByZWdpc3RlciBhIHBzZXVkbyByZWdpc3RlciBpcyBiZXN0CmFsbG9jYXRlZCB0by4gIFRoZSBjb21waWxlciBleGFtaW5lcyB0aGUgY29uc3RyYWludHMgdGhhdCBhcHBseSB0byB0aGUKaW5zbnMgdGhhdCB1c2UgdGhlIHBzZXVkbyByZWdpc3RlciwgbG9va2luZyBmb3IgdGhlIG1hY2hpbmUtZGVwZW5kZW50CmxldHRlcnMgc3VjaCBhcyAnZCcgYW5kICdhJyB0aGF0IHNwZWNpZnkgY2xhc3NlcyBvZiByZWdpc3RlcnMuICBUaGUKcHNldWRvIHJlZ2lzdGVyIGlzIHB1dCBpbiB3aGljaGV2ZXIgY2xhc3MgZ2V0cyB0aGUgbW9zdCAidm90ZXMiLiAgVGhlCmNvbnN0cmFpbnQgbGV0dGVycyAnZycgYW5kICdyJyBhbHNvIHZvdGU6IHRoZXkgdm90ZSBpbiBmYXZvciBvZiBhCmdlbmVyYWwgcmVnaXN0ZXIuICBUaGUgbWFjaGluZSBkZXNjcmlwdGlvbiBzYXlzIHdoaWNoIHJlZ2lzdGVycyBhcmUKY29uc2lkZXJlZCBnZW5lcmFsLgoKIE9mIGNvdXJzZSwgb24gc29tZSBtYWNoaW5lcyBhbGwgcmVnaXN0ZXJzIGFyZSBlcXVpdmFsZW50LCBhbmQgbm8KcmVnaXN0ZXIgY2xhc3NlcyBhcmUgZGVmaW5lZC4gIFRoZW4gbm9uZSBvZiB0aGlzIGNvbXBsZXhpdHkgaXMgcmVsZXZhbnQuCgofCkZpbGU6IGdjY2ludC5pbmZvLCAgTm9kZTogTW9kaWZpZXJzLCAgTmV4dDogTWFjaGluZSBDb25zdHJhaW50cywgIFByZXY6IENsYXNzIFByZWZlcmVuY2VzLCAgVXA6IENvbnN0cmFpbnRzCgoxNC44LjQgQ29uc3RyYWludCBNb2RpZmllciBDaGFyYWN0ZXJzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCkhlcmUgYXJlIGNvbnN0cmFpbnQgbW9kaWZpZXIgY2hhcmFjdGVycy4KCic9JwogICAgIE1lYW5zIHRoYXQgdGhpcyBvcGVyYW5kIGlzIHdyaXRlLW9ubHkgZm9yIHRoaXMgaW5zdHJ1Y3Rpb246IHRoZQogICAgIHByZXZpb3VzIHZhbHVlIGlzIGRpc2NhcmRlZCBhbmQgcmVwbGFjZWQgYnkgb3V0cHV0IGRhdGEuCgonKycKICAgICBNZWFucyB0aGF0IHRoaXMgb3BlcmFuZCBpcyBib3RoIHJlYWQgYW5kIHdyaXR0ZW4gYnkgdGhlCiAgICAgaW5zdHJ1Y3Rpb24uCgogICAgIFdoZW4gdGhlIGNvbXBpbGVyIGZpeGVzIHVwIHRoZSBvcGVyYW5kcyB0byBzYXRpc2Z5IHRoZSBjb25zdHJhaW50cywKICAgICBpdCBuZWVkcyB0byBrbm93IHdoaWNoIG9wZXJhbmRzIGFyZSBpbnB1dHMgdG8gdGhlIGluc3RydWN0aW9uIGFuZAogICAgIHdoaWNoIGFyZSBvdXRwdXRzIGZyb20gaXQuICAnPScgaWRlbnRpZmllcyBhbiBvdXRwdXQ7ICcrJwogICAgIGlkZW50aWZpZXMgYW4gb3BlcmFuZCB0aGF0IGlzIGJvdGggaW5wdXQgYW5kIG91dHB1dDsgYWxsIG90aGVyCiAgICAgb3BlcmFuZHMgYXJlIGFzc3VtZWQgdG8gYmUgaW5wdXQgb25seS4KCiAgICAgSWYgeW91IHNwZWNpZnkgJz0nIG9yICcrJyBpbiBhIGNvbnN0cmFpbnQsIHlvdSBwdXQgaXQgaW4gdGhlIGZpcnN0CiAgICAgY2hhcmFjdGVyIG9mIHRoZSBjb25zdHJhaW50IHN0cmluZy4KCicmJwogICAgIE1lYW5zIChpbiBhIHBhcnRpY3VsYXIgYWx0ZXJuYXRpdmUpIHRoYXQgdGhpcyBvcGVyYW5kIGlzIGFuCiAgICAgImVhcmx5Y2xvYmJlciIgb3BlcmFuZCwgd2hpY2ggaXMgbW9kaWZpZWQgYmVmb3JlIHRoZSBpbnN0cnVjdGlvbiBpcwogICAgIGZpbmlzaGVkIHVzaW5nIHRoZSBpbnB1dCBvcGVyYW5kcy4gIFRoZXJlZm9yZSwgdGhpcyBvcGVyYW5kIG1heSBub3QKICAgICBsaWUgaW4gYSByZWdpc3RlciB0aGF0IGlzIHVzZWQgYXMgYW4gaW5wdXQgb3BlcmFuZCBvciBhcyBwYXJ0IG9mCiAgICAgYW55IG1lbW9yeSBhZGRyZXNzLgoKICAgICAnJicgYXBwbGllcyBvbmx5IHRvIHRoZSBhbHRlcm5hdGl2ZSBpbiB3aGljaCBpdCBpcyB3cml0dGVuLiAgSW4KICAgICBjb25zdHJhaW50cyB3aXRoIG11bHRpcGxlIGFsdGVybmF0aXZlcywgc29tZXRpbWVzIG9uZSBhbHRlcm5hdGl2ZQogICAgIHJlcXVpcmVzICcmJyB3aGlsZSBvdGhlcnMgZG8gbm90LiAgU2VlLCBmb3IgZXhhbXBsZSwgdGhlICdtb3ZkZicKICAgICBpbnNuIG9mIHRoZSA2ODAwMC4KCiAgICAgQW4gaW5wdXQgb3BlcmFuZCBjYW4gYmUgdGllZCB0byBhbiBlYXJseWNsb2JiZXIgb3BlcmFuZCBpZiBpdHMgb25seQogICAgIHVzZSBhcyBhbiBpbnB1dCBvY2N1cnMgYmVmb3JlIHRoZSBlYXJseSByZXN1bHQgaXMgd3JpdHRlbi4gIEFkZGluZwogICAgIGFsdGVybmF0aXZlcyBvZiB0aGlzIGZvcm0gb2Z0ZW4gYWxsb3dzIEdDQyB0byBwcm9kdWNlIGJldHRlciBjb2RlCiAgICAgd2hlbiBvbmx5IHNvbWUgb2YgdGhlIGlucHV0cyBjYW4gYmUgYWZmZWN0ZWQgYnkgdGhlIGVhcmx5Y2xvYmJlci4KICAgICBTZWUsIGZvciBleGFtcGxlLCB0aGUgJ211bHNpMycgaW5zbiBvZiB0aGUgQVJNLgoKICAgICAnJicgZG9lcyBub3Qgb2J2aWF0ZSB0aGUgbmVlZCB0byB3cml0ZSAnPScuCgonJScKICAgICBEZWNsYXJlcyB0aGUgaW5zdHJ1Y3Rpb24gdG8gYmUgY29tbXV0YXRpdmUgZm9yIHRoaXMgb3BlcmFuZCBhbmQgdGhlCiAgICAgZm9sbG93aW5nIG9wZXJhbmQuICBUaGlzIG1lYW5zIHRoYXQgdGhlIGNvbXBpbGVyIG1heSBpbnRlcmNoYW5nZQogICAgIHRoZSB0d28gb3BlcmFuZHMgaWYgdGhhdCBpcyB0aGUgY2hlYXBlc3Qgd2F5IHRvIG1ha2UgYWxsIG9wZXJhbmRzCiAgICAgZml0IHRoZSBjb25zdHJhaW50cy4gIFRoaXMgaXMgb2Z0ZW4gdXNlZCBpbiBwYXR0ZXJucyBmb3IgYWRkaXRpb24KICAgICBpbnN0cnVjdGlvbnMgdGhhdCByZWFsbHkgaGF2ZSBvbmx5IHR3byBvcGVyYW5kczogdGhlIHJlc3VsdCBtdXN0IGdvCiAgICAgaW4gb25lIG9mIHRoZSBhcmd1bWVudHMuICBIZXJlIGZvciBleGFtcGxlLCBpcyBob3cgdGhlIDY4MDAwCiAgICAgaGFsZndvcmQtYWRkIGluc3RydWN0aW9uIGlzIGRlZmluZWQ6CgogICAgICAgICAgKGRlZmluZV9pbnNuICJhZGRoaTMiCiAgICAgICAgICAgIFsoc2V0IChtYXRjaF9vcGVyYW5kOkhJIDAgImdlbmVyYWxfb3BlcmFuZCIgIj1tLHIiKQogICAgICAgICAgICAgICAocGx1czpISSAobWF0Y2hfb3BlcmFuZDpISSAxICJnZW5lcmFsX29wZXJhbmQiICIlMCwwIikKICAgICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6SEkgMiAiZ2VuZXJhbF9vcGVyYW5kIiAiZGksZyIpKSldCiAgICAgICAgICAgIC4uLikKICAgICBHQ0MgY2FuIG9ubHkgaGFuZGxlIG9uZSBjb21tdXRhdGl2ZSBwYWlyIGluIGFuIGFzbTsgaWYgeW91IHVzZQogICAgIG1vcmUsIHRoZSBjb21waWxlciBtYXkgZmFpbC4gIE5vdGUgdGhhdCB5b3UgbmVlZCBub3QgdXNlIHRoZQogICAgIG1vZGlmaWVyIGlmIHRoZSB0d28gYWx0ZXJuYXRpdmVzIGFyZSBzdHJpY3RseSBpZGVudGljYWw7IHRoaXMgd291bGQKICAgICBvbmx5IHdhc3RlIHRpbWUgaW4gdGhlIHJlbG9hZCBwYXNzLiAgVGhlIG1vZGlmaWVyIGlzIG5vdAogICAgIG9wZXJhdGlvbmFsIGFmdGVyIHJlZ2lzdGVyIGFsbG9jYXRpb24sIHNvIHRoZSByZXN1bHQgb2YKICAgICAnZGVmaW5lX3BlZXBob2xlMicgYW5kICdkZWZpbmVfc3BsaXQncyBwZXJmb3JtZWQgYWZ0ZXIgcmVsb2FkCiAgICAgY2Fubm90IHJlbHkgb24gJyUnIHRvIG1ha2UgdGhlIGludGVuZGVkIGluc24gbWF0Y2guCgonIycKICAgICBTYXlzIHRoYXQgYWxsIGZvbGxvd2luZyBjaGFyYWN0ZXJzLCB1cCB0byB0aGUgbmV4dCBjb21tYSwgYXJlIHRvIGJlCiAgICAgaWdub3JlZCBhcyBhIGNvbnN0cmFpbnQuICBUaGV5IGFyZSBzaWduaWZpY2FudCBvbmx5IGZvciBjaG9vc2luZwogICAgIHJlZ2lzdGVyIHByZWZlcmVuY2VzLgoKJyonCiAgICAgU2F5cyB0aGF0IHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVyIHNob3VsZCBiZSBpZ25vcmVkIHdoZW4gY2hvb3NpbmcKICAgICByZWdpc3RlciBwcmVmZXJlbmNlcy4gICcqJyBoYXMgbm8gZWZmZWN0IG9uIHRoZSBtZWFuaW5nIG9mIHRoZQogICAgIGNvbnN0cmFpbnQgYXMgYSBjb25zdHJhaW50LCBhbmQgbm8gZWZmZWN0IG9uIHJlbG9hZGluZy4KCiAgICAgSGVyZSBpcyBhbiBleGFtcGxlOiB0aGUgNjgwMDAgaGFzIGFuIGluc3RydWN0aW9uIHRvIHNpZ24tZXh0ZW5kIGEKICAgICBoYWxmd29yZCBpbiBhIGRhdGEgcmVnaXN0ZXIsIGFuZCBjYW4gYWxzbyBzaWduLWV4dGVuZCBhIHZhbHVlIGJ5CiAgICAgY29weWluZyBpdCBpbnRvIGFuIGFkZHJlc3MgcmVnaXN0ZXIuICBXaGlsZSBlaXRoZXIga2luZCBvZiByZWdpc3RlcgogICAgIGlzIGFjY2VwdGFibGUsIHRoZSBjb25zdHJhaW50cyBvbiBhbiBhZGRyZXNzLXJlZ2lzdGVyIGRlc3RpbmF0aW9uCiAgICAgYXJlIGxlc3Mgc3RyaWN0LCBzbyBpdCBpcyBiZXN0IGlmIHJlZ2lzdGVyIGFsbG9jYXRpb24gbWFrZXMgYW4KICAgICBhZGRyZXNzIHJlZ2lzdGVyIGl0cyBnb2FsLiAgVGhlcmVmb3JlLCAnKicgaXMgdXNlZCBzbyB0aGF0IHRoZSAnZCcKICAgICBjb25zdHJhaW50IGxldHRlciAoZm9yIGRhdGEgcmVnaXN0ZXIpIGlzIGlnbm9yZWQgd2hlbiBjb21wdXRpbmcKICAgICByZWdpc3RlciBwcmVmZXJlbmNlcy4KCiAgICAgICAgICAoZGVmaW5lX2luc24gImV4dGVuZGhpc2kyIgogICAgICAgICAgICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJnZW5lcmFsX29wZXJhbmQiICI9KmQsYSIpCiAgICAgICAgICAgICAgICAgIChzaWduX2V4dGVuZDpTSQogICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6SEkgMSAiZ2VuZXJhbF9vcGVyYW5kIiAiMCxnIikpKV0KICAgICAgICAgICAgLi4uKQoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IE1hY2hpbmUgQ29uc3RyYWludHMsICBOZXh0OiBEZWZpbmUgQ29uc3RyYWludHMsICBQcmV2OiBNb2RpZmllcnMsICBVcDogQ29uc3RyYWludHMKCjE0LjguNSBDb25zdHJhaW50cyBmb3IgUGFydGljdWxhciBNYWNoaW5lcwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCldoZW5ldmVyIHBvc3NpYmxlLCB5b3Ugc2hvdWxkIHVzZSB0aGUgZ2VuZXJhbC1wdXJwb3NlIGNvbnN0cmFpbnQgbGV0dGVycwppbiAnYXNtJyBhcmd1bWVudHMsIHNpbmNlIHRoZXkgd2lsbCBjb252ZXkgbWVhbmluZyBtb3JlIHJlYWRpbHkgdG8KcGVvcGxlIHJlYWRpbmcgeW91ciBjb2RlLiAgRmFpbGluZyB0aGF0LCB1c2UgdGhlIGNvbnN0cmFpbnQgbGV0dGVycyB0aGF0CnVzdWFsbHkgaGF2ZSB2ZXJ5IHNpbWlsYXIgbWVhbmluZ3MgYWNyb3NzIGFyY2hpdGVjdHVyZXMuICBUaGUgbW9zdApjb21tb25seSB1c2VkIGNvbnN0cmFpbnRzIGFyZSAnbScgYW5kICdyJyAoZm9yIG1lbW9yeSBhbmQKZ2VuZXJhbC1wdXJwb3NlIHJlZ2lzdGVycyByZXNwZWN0aXZlbHk7ICpub3RlIFNpbXBsZSBDb25zdHJhaW50czo6KSwgYW5kCidJJywgdXN1YWxseSB0aGUgbGV0dGVyIGluZGljYXRpbmcgdGhlIG1vc3QgY29tbW9uIGltbWVkaWF0ZS1jb25zdGFudApmb3JtYXQuCgogRWFjaCBhcmNoaXRlY3R1cmUgZGVmaW5lcyBhZGRpdGlvbmFsIGNvbnN0cmFpbnRzLiAgVGhlc2UgY29uc3RyYWludHMKYXJlIHVzZWQgYnkgdGhlIGNvbXBpbGVyIGl0c2VsZiBmb3IgaW5zdHJ1Y3Rpb24gZ2VuZXJhdGlvbiwgYXMgd2VsbCBhcwpmb3IgJ2FzbScgc3RhdGVtZW50czsgdGhlcmVmb3JlLCBzb21lIG9mIHRoZSBjb25zdHJhaW50cyBhcmUgbm90CnBhcnRpY3VsYXJseSB1c2VmdWwgZm9yICdhc20nLiAgSGVyZSBpcyBhIHN1bW1hcnkgb2Ygc29tZSBvZiB0aGUKbWFjaGluZS1kZXBlbmRlbnQgY29uc3RyYWludHMgYXZhaWxhYmxlIG9uIHNvbWUgcGFydGljdWxhciBtYWNoaW5lczsgaXQKaW5jbHVkZXMgYm90aCBjb25zdHJhaW50cyB0aGF0IGFyZSB1c2VmdWwgZm9yICdhc20nIGFuZCBjb25zdHJhaW50cyB0aGF0CmFyZW4ndC4gIFRoZSBjb21waWxlciBzb3VyY2UgZmlsZSBtZW50aW9uZWQgaW4gdGhlIHRhYmxlIGhlYWRpbmcgZm9yCmVhY2ggYXJjaGl0ZWN0dXJlIGlzIHRoZSBkZWZpbml0aXZlIHJlZmVyZW5jZSBmb3IgdGhlIG1lYW5pbmdzIG9mIHRoYXQKYXJjaGl0ZWN0dXJlJ3MgY29uc3RyYWludHMuCgpfQVJNIGZhbWlseS0tJ2NvbmZpZy9hcm0vYXJtLmgnXwogICAgICdmJwogICAgICAgICAgRmxvYXRpbmctcG9pbnQgcmVnaXN0ZXIKCiAgICAgJ3cnCiAgICAgICAgICBWRlAgZmxvYXRpbmctcG9pbnQgcmVnaXN0ZXIKCiAgICAgJ0YnCiAgICAgICAgICBPbmUgb2YgdGhlIGZsb2F0aW5nLXBvaW50IGNvbnN0YW50cyAwLjAsIDAuNSwgMS4wLCAyLjAsIDMuMCwKICAgICAgICAgIDQuMCwgNS4wIG9yIDEwLjAKCiAgICAgJ0cnCiAgICAgICAgICBGbG9hdGluZy1wb2ludCBjb25zdGFudCB0aGF0IHdvdWxkIHNhdGlzZnkgdGhlIGNvbnN0cmFpbnQgJ0YnCiAgICAgICAgICBpZiBpdCB3ZXJlIG5lZ2F0ZWQKCiAgICAgJ0knCiAgICAgICAgICBJbnRlZ2VyIHRoYXQgaXMgdmFsaWQgYXMgYW4gaW1tZWRpYXRlIG9wZXJhbmQgaW4gYSBkYXRhCiAgICAgICAgICBwcm9jZXNzaW5nIGluc3RydWN0aW9uLiAgVGhhdCBpcywgYW4gaW50ZWdlciBpbiB0aGUgcmFuZ2UgMCB0bwogICAgICAgICAgMjU1IHJvdGF0ZWQgYnkgYSBtdWx0aXBsZSBvZiAyCgogICAgICdKJwogICAgICAgICAgSW50ZWdlciBpbiB0aGUgcmFuZ2UgLTQwOTUgdG8gNDA5NQoKICAgICAnSycKICAgICAgICAgIEludGVnZXIgdGhhdCBzYXRpc2ZpZXMgY29uc3RyYWludCAnSScgd2hlbiBpbnZlcnRlZCAob25lcwogICAgICAgICAgY29tcGxlbWVudCkKCiAgICAgJ0wnCiAgICAgICAgICBJbnRlZ2VyIHRoYXQgc2F0aXNmaWVzIGNvbnN0cmFpbnQgJ0knIHdoZW4gbmVnYXRlZCAodHdvcwogICAgICAgICAgY29tcGxlbWVudCkKCiAgICAgJ00nCiAgICAgICAgICBJbnRlZ2VyIGluIHRoZSByYW5nZSAwIHRvIDMyCgogICAgICdRJwogICAgICAgICAgQSBtZW1vcnkgcmVmZXJlbmNlIHdoZXJlIHRoZSBleGFjdCBhZGRyZXNzIGlzIGluIGEgc2luZ2xlCiAgICAgICAgICByZWdpc3RlciAoJydtJycgaXMgcHJlZmVyYWJsZSBmb3IgJ2FzbScgc3RhdGVtZW50cykKCiAgICAgJ1InCiAgICAgICAgICBBbiBpdGVtIGluIHRoZSBjb25zdGFudCBwb29sCgogICAgICdTJwogICAgICAgICAgQSBzeW1ib2wgaW4gdGhlIHRleHQgc2VnbWVudCBvZiB0aGUgY3VycmVudCBmaWxlCgogICAgICdVdicKICAgICAgICAgIEEgbWVtb3J5IHJlZmVyZW5jZSBzdWl0YWJsZSBmb3IgVkZQIGxvYWQvc3RvcmUgaW5zbnMKICAgICAgICAgIChyZWcrY29uc3RhbnQgb2Zmc2V0KQoKICAgICAnVXknCiAgICAgICAgICBBIG1lbW9yeSByZWZlcmVuY2Ugc3VpdGFibGUgZm9yIGlXTU1YdCBsb2FkL3N0b3JlCiAgICAgICAgICBpbnN0cnVjdGlvbnMuCgogICAgICdVcScKICAgICAgICAgIEEgbWVtb3J5IHJlZmVyZW5jZSBzdWl0YWJsZSBmb3IgdGhlIEFSTXY0IGxkcnNiIGluc3RydWN0aW9uLgoKX0FWUiBmYW1pbHktLSdjb25maWcvYXZyL2NvbnN0cmFpbnRzLm1kJ18KICAgICAnbCcKICAgICAgICAgIFJlZ2lzdGVycyBmcm9tIHIwIHRvIHIxNQoKICAgICAnYScKICAgICAgICAgIFJlZ2lzdGVycyBmcm9tIHIxNiB0byByMjMKCiAgICAgJ2QnCiAgICAgICAgICBSZWdpc3RlcnMgZnJvbSByMTYgdG8gcjMxCgogICAgICd3JwogICAgICAgICAgUmVnaXN0ZXJzIGZyb20gcjI0IHRvIHIzMS4gIFRoZXNlIHJlZ2lzdGVycyBjYW4gYmUgdXNlZCBpbgogICAgICAgICAgJ2FkaXcnIGNvbW1hbmQKCiAgICAgJ2UnCiAgICAgICAgICBQb2ludGVyIHJlZ2lzdGVyIChyMjYtcjMxKQoKICAgICAnYicKICAgICAgICAgIEJhc2UgcG9pbnRlciByZWdpc3RlciAocjI4LXIzMSkKCiAgICAgJ3EnCiAgICAgICAgICBTdGFjayBwb2ludGVyIHJlZ2lzdGVyIChTUEg6U1BMKQoKICAgICAndCcKICAgICAgICAgIFRlbXBvcmFyeSByZWdpc3RlciByMAoKICAgICAneCcKICAgICAgICAgIFJlZ2lzdGVyIHBhaXIgWCAocjI3OnIyNikKCiAgICAgJ3knCiAgICAgICAgICBSZWdpc3RlciBwYWlyIFkgKHIyOTpyMjgpCgogICAgICd6JwogICAgICAgICAgUmVnaXN0ZXIgcGFpciBaIChyMzE6cjMwKQoKICAgICAnSScKICAgICAgICAgIENvbnN0YW50IGdyZWF0ZXIgdGhhbiAtMSwgbGVzcyB0aGFuIDY0CgogICAgICdKJwogICAgICAgICAgQ29uc3RhbnQgZ3JlYXRlciB0aGFuIC02NCwgbGVzcyB0aGFuIDEKCiAgICAgJ0snCiAgICAgICAgICBDb25zdGFudCBpbnRlZ2VyIDIKCiAgICAgJ0wnCiAgICAgICAgICBDb25zdGFudCBpbnRlZ2VyIDAKCiAgICAgJ00nCiAgICAgICAgICBDb25zdGFudCB0aGF0IGZpdHMgaW4gOCBiaXRzCgogICAgICdOJwogICAgICAgICAgQ29uc3RhbnQgaW50ZWdlciAtMQoKICAgICAnTycKICAgICAgICAgIENvbnN0YW50IGludGVnZXIgOCwgMTYsIG9yIDI0CgogICAgICdQJwogICAgICAgICAgQ29uc3RhbnQgaW50ZWdlciAxCgogICAgICdHJwogICAgICAgICAgQSBmbG9hdGluZyBwb2ludCBjb25zdGFudCAwLjAKCiAgICAgJ1InCiAgICAgICAgICBJbnRlZ2VyIGNvbnN0YW50IGluIHRoZSByYW5nZSAtNiAuLi4gNS4KCiAgICAgJ1EnCiAgICAgICAgICBBIG1lbW9yeSBhZGRyZXNzIGJhc2VkIG9uIFkgb3IgWiBwb2ludGVyIHdpdGggZGlzcGxhY2VtZW50LgoKX0NSWCBBcmNoaXRlY3R1cmUtLSdjb25maWcvY3J4L2NyeC5oJ18KCiAgICAgJ2InCiAgICAgICAgICBSZWdpc3RlcnMgZnJvbSByMCB0byByMTQgKHJlZ2lzdGVycyB3aXRob3V0IHN0YWNrIHBvaW50ZXIpCgogICAgICdsJwogICAgICAgICAgUmVnaXN0ZXIgcjE2ICg2NC1iaXQgYWNjdW11bGF0b3IgbG8gcmVnaXN0ZXIpCgogICAgICdoJwogICAgICAgICAgUmVnaXN0ZXIgcjE3ICg2NC1iaXQgYWNjdW11bGF0b3IgaGkgcmVnaXN0ZXIpCgogICAgICdrJwogICAgICAgICAgUmVnaXN0ZXIgcGFpciByMTYtcjE3LiAgKDY0LWJpdCBhY2N1bXVsYXRvciBsby1oaSBwYWlyKQoKICAgICAnSScKICAgICAgICAgIENvbnN0YW50IHRoYXQgZml0cyBpbiAzIGJpdHMKCiAgICAgJ0onCiAgICAgICAgICBDb25zdGFudCB0aGF0IGZpdHMgaW4gNCBiaXRzCgogICAgICdLJwogICAgICAgICAgQ29uc3RhbnQgdGhhdCBmaXRzIGluIDUgYml0cwoKICAgICAnTCcKICAgICAgICAgIENvbnN0YW50IHRoYXQgaXMgb25lIG9mIC0xLCA0LCAtNCwgNywgOCwgMTIsIDE2LCAyMCwgMzIsIDQ4CgogICAgICdHJwogICAgICAgICAgRmxvYXRpbmcgcG9pbnQgY29uc3RhbnQgdGhhdCBpcyBsZWdhbCBmb3Igc3RvcmUgaW1tZWRpYXRlCgpfSGV3bGV0dC1QYWNrYXJkIFBBLVJJU0MtLSdjb25maWcvcGEvcGEuaCdfCiAgICAgJ2EnCiAgICAgICAgICBHZW5lcmFsIHJlZ2lzdGVyIDEKCiAgICAgJ2YnCiAgICAgICAgICBGbG9hdGluZyBwb2ludCByZWdpc3RlcgoKICAgICAncScKICAgICAgICAgIFNoaWZ0IGFtb3VudCByZWdpc3RlcgoKICAgICAneCcKICAgICAgICAgIEZsb2F0aW5nIHBvaW50IHJlZ2lzdGVyIChkZXByZWNhdGVkKQoKICAgICAneScKICAgICAgICAgIFVwcGVyIGZsb2F0aW5nIHBvaW50IHJlZ2lzdGVyICgzMi1iaXQpLCBmbG9hdGluZyBwb2ludAogICAgICAgICAgcmVnaXN0ZXIgKDY0LWJpdCkKCiAgICAgJ1onCiAgICAgICAgICBBbnkgcmVnaXN0ZXIKCiAgICAgJ0knCiAgICAgICAgICBTaWduZWQgMTEtYml0IGludGVnZXIgY29uc3RhbnQKCiAgICAgJ0onCiAgICAgICAgICBTaWduZWQgMTQtYml0IGludGVnZXIgY29uc3RhbnQKCiAgICAgJ0snCiAgICAgICAgICBJbnRlZ2VyIGNvbnN0YW50IHRoYXQgY2FuIGJlIGRlcG9zaXRlZCB3aXRoIGEgJ3pkZXBpJwogICAgICAgICAgaW5zdHJ1Y3Rpb24KCiAgICAgJ0wnCiAgICAgICAgICBTaWduZWQgNS1iaXQgaW50ZWdlciBjb25zdGFudAoKICAgICAnTScKICAgICAgICAgIEludGVnZXIgY29uc3RhbnQgMAoKICAgICAnTicKICAgICAgICAgIEludGVnZXIgY29uc3RhbnQgdGhhdCBjYW4gYmUgbG9hZGVkIHdpdGggYSAnbGRpbCcgaW5zdHJ1Y3Rpb24KCiAgICAgJ08nCiAgICAgICAgICBJbnRlZ2VyIGNvbnN0YW50IHdob3NlIHZhbHVlIHBsdXMgb25lIGlzIGEgcG93ZXIgb2YgMgoKICAgICAnUCcKICAgICAgICAgIEludGVnZXIgY29uc3RhbnQgdGhhdCBjYW4gYmUgdXNlZCBmb3IgJ2FuZCcgb3BlcmF0aW9ucyBpbgogICAgICAgICAgJ2RlcGknIGFuZCAnZXh0cnUnIGluc3RydWN0aW9ucwoKICAgICAnUycKICAgICAgICAgIEludGVnZXIgY29uc3RhbnQgMzEKCiAgICAgJ1UnCiAgICAgICAgICBJbnRlZ2VyIGNvbnN0YW50IDYzCgogICAgICdHJwogICAgICAgICAgRmxvYXRpbmctcG9pbnQgY29uc3RhbnQgMC4wCgogICAgICdBJwogICAgICAgICAgQSAnbG9fc3VtJyBkYXRhLWxpbmthZ2UtdGFibGUgbWVtb3J5IG9wZXJhbmQKCiAgICAgJ1EnCiAgICAgICAgICBBIG1lbW9yeSBvcGVyYW5kIHRoYXQgY2FuIGJlIHVzZWQgYXMgdGhlIGRlc3RpbmF0aW9uIG9wZXJhbmQKICAgICAgICAgIG9mIGFuIGludGVnZXIgc3RvcmUgaW5zdHJ1Y3Rpb24KCiAgICAgJ1InCiAgICAgICAgICBBIHNjYWxlZCBvciB1bnNjYWxlZCBpbmRleGVkIG1lbW9yeSBvcGVyYW5kCgogICAgICdUJwogICAgICAgICAgQSBtZW1vcnkgb3BlcmFuZCBmb3IgZmxvYXRpbmctcG9pbnQgbG9hZHMgYW5kIHN0b3JlcwoKICAgICAnVycKICAgICAgICAgIEEgcmVnaXN0ZXIgaW5kaXJlY3QgbWVtb3J5IG9wZXJhbmQKCl9Qb3dlclBDIGFuZCBJQk0gUlM2MDAwLS0nY29uZmlnL3JzNjAwMC9yczYwMDAuaCdfCiAgICAgJ2InCiAgICAgICAgICBBZGRyZXNzIGJhc2UgcmVnaXN0ZXIKCiAgICAgJ2YnCiAgICAgICAgICBGbG9hdGluZyBwb2ludCByZWdpc3RlcgoKICAgICAndicKICAgICAgICAgIFZlY3RvciByZWdpc3RlcgoKICAgICAnaCcKICAgICAgICAgICdNUScsICdDVFInLCBvciAnTElOSycgcmVnaXN0ZXIKCiAgICAgJ3EnCiAgICAgICAgICAnTVEnIHJlZ2lzdGVyCgogICAgICdjJwogICAgICAgICAgJ0NUUicgcmVnaXN0ZXIKCiAgICAgJ2wnCiAgICAgICAgICAnTElOSycgcmVnaXN0ZXIKCiAgICAgJ3gnCiAgICAgICAgICAnQ1InIHJlZ2lzdGVyIChjb25kaXRpb24gcmVnaXN0ZXIpIG51bWJlciAwCgogICAgICd5JwogICAgICAgICAgJ0NSJyByZWdpc3RlciAoY29uZGl0aW9uIHJlZ2lzdGVyKQoKICAgICAneicKICAgICAgICAgICdGUE1FTScgc3RhY2sgbWVtb3J5IGZvciBGUFItR1BSIHRyYW5zZmVycwoKICAgICAnSScKICAgICAgICAgIFNpZ25lZCAxNi1iaXQgY29uc3RhbnQKCiAgICAgJ0onCiAgICAgICAgICBVbnNpZ25lZCAxNi1iaXQgY29uc3RhbnQgc2hpZnRlZCBsZWZ0IDE2IGJpdHMgKHVzZSAnTCcgaW5zdGVhZAogICAgICAgICAgZm9yICdTSW1vZGUnIGNvbnN0YW50cykKCiAgICAgJ0snCiAgICAgICAgICBVbnNpZ25lZCAxNi1iaXQgY29uc3RhbnQKCiAgICAgJ0wnCiAgICAgICAgICBTaWduZWQgMTYtYml0IGNvbnN0YW50IHNoaWZ0ZWQgbGVmdCAxNiBiaXRzCgogICAgICdNJwogICAgICAgICAgQ29uc3RhbnQgbGFyZ2VyIHRoYW4gMzEKCiAgICAgJ04nCiAgICAgICAgICBFeGFjdCBwb3dlciBvZiAyCgogICAgICdPJwogICAgICAgICAgWmVybwoKICAgICAnUCcKICAgICAgICAgIENvbnN0YW50IHdob3NlIG5lZ2F0aW9uIGlzIGEgc2lnbmVkIDE2LWJpdCBjb25zdGFudAoKICAgICAnRycKICAgICAgICAgIEZsb2F0aW5nIHBvaW50IGNvbnN0YW50IHRoYXQgY2FuIGJlIGxvYWRlZCBpbnRvIGEgcmVnaXN0ZXIKICAgICAgICAgIHdpdGggb25lIGluc3RydWN0aW9uIHBlciB3b3JkCgogICAgICdIJwogICAgICAgICAgSW50ZWdlci9GbG9hdGluZyBwb2ludCBjb25zdGFudCB0aGF0IGNhbiBiZSBsb2FkZWQgaW50byBhCiAgICAgICAgICByZWdpc3RlciB1c2luZyB0aHJlZSBpbnN0cnVjdGlvbnMKCiAgICAgJ1EnCiAgICAgICAgICBNZW1vcnkgb3BlcmFuZCB0aGF0IGlzIGFuIG9mZnNldCBmcm9tIGEgcmVnaXN0ZXIgKCdtJyBpcwogICAgICAgICAgcHJlZmVyYWJsZSBmb3IgJ2FzbScgc3RhdGVtZW50cykKCiAgICAgJ1onCiAgICAgICAgICBNZW1vcnkgb3BlcmFuZCB0aGF0IGlzIGFuIGluZGV4ZWQgb3IgaW5kaXJlY3QgZnJvbSBhIHJlZ2lzdGVyCiAgICAgICAgICAoJ20nIGlzIHByZWZlcmFibGUgZm9yICdhc20nIHN0YXRlbWVudHMpCgogICAgICdSJwogICAgICAgICAgQUlYIFRPQyBlbnRyeQoKICAgICAnYScKICAgICAgICAgIEFkZHJlc3Mgb3BlcmFuZCB0aGF0IGlzIGFuIGluZGV4ZWQgb3IgaW5kaXJlY3QgZnJvbSBhIHJlZ2lzdGVyCiAgICAgICAgICAoJ3AnIGlzIHByZWZlcmFibGUgZm9yICdhc20nIHN0YXRlbWVudHMpCgogICAgICdTJwogICAgICAgICAgQ29uc3RhbnQgc3VpdGFibGUgYXMgYSA2NC1iaXQgbWFzayBvcGVyYW5kCgogICAgICdUJwogICAgICAgICAgQ29uc3RhbnQgc3VpdGFibGUgYXMgYSAzMi1iaXQgbWFzayBvcGVyYW5kCgogICAgICdVJwogICAgICAgICAgU3lzdGVtIFYgUmVsZWFzZSA0IHNtYWxsIGRhdGEgYXJlYSByZWZlcmVuY2UKCiAgICAgJ3QnCiAgICAgICAgICBBTkQgbWFza3MgdGhhdCBjYW4gYmUgcGVyZm9ybWVkIGJ5IHR3byBybGRpY3tsLCByfQogICAgICAgICAgaW5zdHJ1Y3Rpb25zCgogICAgICdXJwogICAgICAgICAgVmVjdG9yIGNvbnN0YW50IHRoYXQgZG9lcyBub3QgcmVxdWlyZSBtZW1vcnkKCl9Nb3JwaG9UZWNoIGZhbWlseS0tJ2NvbmZpZy9tdC9tdC5oJ18KICAgICAnSScKICAgICAgICAgIENvbnN0YW50IGZvciBhbiBhcml0aG1ldGljIGluc24gKDE2LWJpdCBzaWduZWQgaW50ZWdlcikuCgogICAgICdKJwogICAgICAgICAgVGhlIGNvbnN0YW50IDAuCgogICAgICdLJwogICAgICAgICAgQ29uc3RhbnQgZm9yIGEgbG9naWNhbCBpbnNuICgxNi1iaXQgemVyby1leHRlbmRlZCBpbnRlZ2VyKS4KCiAgICAgJ0wnCiAgICAgICAgICBBIGNvbnN0YW50IHRoYXQgY2FuIGJlIGxvYWRlZCB3aXRoICdsdWknIChpLmUuIHRoZSBib3R0b20gMTYKICAgICAgICAgIGJpdHMgYXJlIHplcm8pLgoKICAgICAnTScKICAgICAgICAgIEEgY29uc3RhbnQgdGhhdCB0YWtlcyB0d28gd29yZHMgdG8gbG9hZCAoaS5lLiBub3QgbWF0Y2hlZCBieQogICAgICAgICAgJ0knLCAnSycsIG9yICdMJykuCgogICAgICdOJwogICAgICAgICAgTmVnYXRpdmUgMTYtYml0IGNvbnN0YW50cyBvdGhlciB0aGFuIC02NTUzNi4KCiAgICAgJ08nCiAgICAgICAgICBBIDE1LWJpdCBzaWduZWQgaW50ZWdlciBjb25zdGFudC4KCiAgICAgJ1AnCiAgICAgICAgICBBIHBvc2l0aXZlIDE2LWJpdCBjb25zdGFudC4KCl9JbnRlbCAzODYtLSdjb25maWcvaTM4Ni9jb25zdHJhaW50cy5tZCdfCiAgICAgJ1InCiAgICAgICAgICBMZWdhY3kgcmVnaXN0ZXItLXRoZSBlaWdodCBpbnRlZ2VyIHJlZ2lzdGVycyBhdmFpbGFibGUgb24gYWxsCiAgICAgICAgICBpMzg2IHByb2Nlc3NvcnMgKCdhJywgJ2InLCAnYycsICdkJywgJ3NpJywgJ2RpJywgJ2JwJywgJ3NwJykuCgogICAgICdxJwogICAgICAgICAgQW55IHJlZ2lzdGVyIGFjY2Vzc2libGUgYXMgJ1JsJy4gIEluIDMyLWJpdCBtb2RlLCAnYScsICdiJywKICAgICAgICAgICdjJywgYW5kICdkJzsgaW4gNjQtYml0IG1vZGUsIGFueSBpbnRlZ2VyIHJlZ2lzdGVyLgoKICAgICAnUScKICAgICAgICAgIEFueSByZWdpc3RlciBhY2Nlc3NpYmxlIGFzICdSaCc6ICdhJywgJ2InLCAnYycsIGFuZCAnZCcuCgogICAgICdsJwogICAgICAgICAgQW55IHJlZ2lzdGVyIHRoYXQgY2FuIGJlIHVzZWQgYXMgdGhlIGluZGV4IGluIGEgYmFzZStpbmRleAogICAgICAgICAgbWVtb3J5IGFjY2VzczogdGhhdCBpcywgYW55IGdlbmVyYWwgcmVnaXN0ZXIgZXhjZXB0IHRoZSBzdGFjawogICAgICAgICAgcG9pbnRlci4KCiAgICAgJ2EnCiAgICAgICAgICBUaGUgJ2EnIHJlZ2lzdGVyLgoKICAgICAnYicKICAgICAgICAgIFRoZSAnYicgcmVnaXN0ZXIuCgogICAgICdjJwogICAgICAgICAgVGhlICdjJyByZWdpc3Rlci4KCiAgICAgJ2QnCiAgICAgICAgICBUaGUgJ2QnIHJlZ2lzdGVyLgoKICAgICAnUycKICAgICAgICAgIFRoZSAnc2knIHJlZ2lzdGVyLgoKICAgICAnRCcKICAgICAgICAgIFRoZSAnZGknIHJlZ2lzdGVyLgoKICAgICAnQScKICAgICAgICAgIFRoZSAnYScgYW5kICdkJyByZWdpc3RlcnMsIGFzIGEgcGFpciAoZm9yIGluc3RydWN0aW9ucyB0aGF0CiAgICAgICAgICByZXR1cm4gaGFsZiB0aGUgcmVzdWx0IGluIG9uZSBhbmQgaGFsZiBpbiB0aGUgb3RoZXIpLgoKICAgICAnZicKICAgICAgICAgIEFueSA4MDM4NyBmbG9hdGluZy1wb2ludCAoc3RhY2spIHJlZ2lzdGVyLgoKICAgICAndCcKICAgICAgICAgIFRvcCBvZiA4MDM4NyBmbG9hdGluZy1wb2ludCBzdGFjayAoJyVzdCgwKScpLgoKICAgICAndScKICAgICAgICAgIFNlY29uZCBmcm9tIHRvcCBvZiA4MDM4NyBmbG9hdGluZy1wb2ludCBzdGFjayAoJyVzdCgxKScpLgoKICAgICAneScKICAgICAgICAgIEFueSBNTVggcmVnaXN0ZXIuCgogICAgICd4JwogICAgICAgICAgQW55IFNTRSByZWdpc3Rlci4KCiAgICAgJ1l6JwogICAgICAgICAgRmlyc3QgU1NFIHJlZ2lzdGVyICgnJXhtbTAnKS4KCiAgICAgJ1kyJwogICAgICAgICAgQW55IFNTRSByZWdpc3Rlciwgd2hlbiBTU0UyIGlzIGVuYWJsZWQuCgogICAgICdZaScKICAgICAgICAgIEFueSBTU0UgcmVnaXN0ZXIsIHdoZW4gU1NFMiBhbmQgaW50ZXItdW5pdCBtb3ZlcyBhcmUgZW5hYmxlZC4KCiAgICAgJ1ltJwogICAgICAgICAgQW55IE1NWCByZWdpc3Rlciwgd2hlbiBpbnRlci11bml0IG1vdmVzIGFyZSBlbmFibGVkLgoKICAgICAnSScKICAgICAgICAgIEludGVnZXIgY29uc3RhbnQgaW4gdGhlIHJhbmdlIDAgLi4uIDMxLCBmb3IgMzItYml0IHNoaWZ0cy4KCiAgICAgJ0onCiAgICAgICAgICBJbnRlZ2VyIGNvbnN0YW50IGluIHRoZSByYW5nZSAwIC4uLiA2MywgZm9yIDY0LWJpdCBzaGlmdHMuCgogICAgICdLJwogICAgICAgICAgU2lnbmVkIDgtYml0IGludGVnZXIgY29uc3RhbnQuCgogICAgICdMJwogICAgICAgICAgJzB4RkYnIG9yICcweEZGRkYnLCBmb3IgYW5kc2kgYXMgYSB6ZXJvLWV4dGVuZGluZyBtb3ZlLgoKICAgICAnTScKICAgICAgICAgIDAsIDEsIDIsIG9yIDMgKHNoaWZ0cyBmb3IgdGhlICdsZWEnIGluc3RydWN0aW9uKS4KCiAgICAgJ04nCiAgICAgICAgICBVbnNpZ25lZCA4LWJpdCBpbnRlZ2VyIGNvbnN0YW50IChmb3IgJ2luJyBhbmQgJ291dCcKICAgICAgICAgIGluc3RydWN0aW9ucykuCgogICAgICdPJwogICAgICAgICAgSW50ZWdlciBjb25zdGFudCBpbiB0aGUgcmFuZ2UgMCAuLi4gMTI3LCBmb3IgMTI4LWJpdCBzaGlmdHMuCgogICAgICdHJwogICAgICAgICAgU3RhbmRhcmQgODAzODcgZmxvYXRpbmcgcG9pbnQgY29uc3RhbnQuCgogICAgICdDJwogICAgICAgICAgU3RhbmRhcmQgU1NFIGZsb2F0aW5nIHBvaW50IGNvbnN0YW50LgoKICAgICAnZScKICAgICAgICAgIDMyLWJpdCBzaWduZWQgaW50ZWdlciBjb25zdGFudCwgb3IgYSBzeW1ib2xpYyByZWZlcmVuY2Uga25vd24KICAgICAgICAgIHRvIGZpdCB0aGF0IHJhbmdlIChmb3IgaW1tZWRpYXRlIG9wZXJhbmRzIGluIHNpZ24tZXh0ZW5kaW5nCiAgICAgICAgICB4ODYtNjQgaW5zdHJ1Y3Rpb25zKS4KCiAgICAgJ1onCiAgICAgICAgICAzMi1iaXQgdW5zaWduZWQgaW50ZWdlciBjb25zdGFudCwgb3IgYSBzeW1ib2xpYyByZWZlcmVuY2UKICAgICAgICAgIGtub3duIHRvIGZpdCB0aGF0IHJhbmdlIChmb3IgaW1tZWRpYXRlIG9wZXJhbmRzIGluCiAgICAgICAgICB6ZXJvLWV4dGVuZGluZyB4ODYtNjQgaW5zdHJ1Y3Rpb25zKS4KCl9JbnRlbCBJQS02NC0tJ2NvbmZpZy9pYTY0L2lhNjQuaCdfCiAgICAgJ2EnCiAgICAgICAgICBHZW5lcmFsIHJlZ2lzdGVyICdyMCcgdG8gJ3IzJyBmb3IgJ2FkZGwnIGluc3RydWN0aW9uCgogICAgICdiJwogICAgICAgICAgQnJhbmNoIHJlZ2lzdGVyCgogICAgICdjJwogICAgICAgICAgUHJlZGljYXRlIHJlZ2lzdGVyICgnYycgYXMgaW4gImNvbmRpdGlvbmFsIikKCiAgICAgJ2QnCiAgICAgICAgICBBcHBsaWNhdGlvbiByZWdpc3RlciByZXNpZGluZyBpbiBNLXVuaXQKCiAgICAgJ2UnCiAgICAgICAgICBBcHBsaWNhdGlvbiByZWdpc3RlciByZXNpZGluZyBpbiBJLXVuaXQKCiAgICAgJ2YnCiAgICAgICAgICBGbG9hdGluZy1wb2ludCByZWdpc3RlcgoKICAgICAnbScKICAgICAgICAgIE1lbW9yeSBvcGVyYW5kLiAgUmVtZW1iZXIgdGhhdCAnbScgYWxsb3dzIHBvc3RpbmNyZW1lbnQgYW5kCiAgICAgICAgICBwb3N0ZGVjcmVtZW50IHdoaWNoIHJlcXVpcmUgcHJpbnRpbmcgd2l0aCAnJVBuJyBvbiBJQS02NC4gIFVzZQogICAgICAgICAgJ1MnIHRvIGRpc2FsbG93IHBvc3RpbmNyZW1lbnQgYW5kIHBvc3RkZWNyZW1lbnQuCgogICAgICdHJwogICAgICAgICAgRmxvYXRpbmctcG9pbnQgY29uc3RhbnQgMC4wIG9yIDEuMAoKICAgICAnSScKICAgICAgICAgIDE0LWJpdCBzaWduZWQgaW50ZWdlciBjb25zdGFudAoKICAgICAnSicKICAgICAgICAgIDIyLWJpdCBzaWduZWQgaW50ZWdlciBjb25zdGFudAoKICAgICAnSycKICAgICAgICAgIDgtYml0IHNpZ25lZCBpbnRlZ2VyIGNvbnN0YW50IGZvciBsb2dpY2FsIGluc3RydWN0aW9ucwoKICAgICAnTCcKICAgICAgICAgIDgtYml0IGFkanVzdGVkIHNpZ25lZCBpbnRlZ2VyIGNvbnN0YW50IGZvciBjb21wYXJlIHBzZXVkby1vcHMKCiAgICAgJ00nCiAgICAgICAgICA2LWJpdCB1bnNpZ25lZCBpbnRlZ2VyIGNvbnN0YW50IGZvciBzaGlmdCBjb3VudHMKCiAgICAgJ04nCiAgICAgICAgICA5LWJpdCBzaWduZWQgaW50ZWdlciBjb25zdGFudCBmb3IgbG9hZCBhbmQgc3RvcmUKICAgICAgICAgIHBvc3RpbmNyZW1lbnRzCgogICAgICdPJwogICAgICAgICAgVGhlIGNvbnN0YW50IHplcm8KCiAgICAgJ1AnCiAgICAgICAgICAwIG9yIC0xIGZvciAnZGVwJyBpbnN0cnVjdGlvbgoKICAgICAnUScKICAgICAgICAgIE5vbi12b2xhdGlsZSBtZW1vcnkgZm9yIGZsb2F0aW5nLXBvaW50IGxvYWRzIGFuZCBzdG9yZXMKCiAgICAgJ1InCiAgICAgICAgICBJbnRlZ2VyIGNvbnN0YW50IGluIHRoZSByYW5nZSAxIHRvIDQgZm9yICdzaGxhZGQnIGluc3RydWN0aW9uCgogICAgICdTJwogICAgICAgICAgTWVtb3J5IG9wZXJhbmQgZXhjZXB0IHBvc3RpbmNyZW1lbnQgYW5kIHBvc3RkZWNyZW1lbnQKCl9GUlYtLSdjb25maWcvZnJ2L2Zydi5oJ18KICAgICAnYScKICAgICAgICAgIFJlZ2lzdGVyIGluIHRoZSBjbGFzcyAnQUNDX1JFR1MnICgnYWNjMCcgdG8gJ2FjYzcnKS4KCiAgICAgJ2InCiAgICAgICAgICBSZWdpc3RlciBpbiB0aGUgY2xhc3MgJ0VWRU5fQUNDX1JFR1MnICgnYWNjMCcgdG8gJ2FjYzcnKS4KCiAgICAgJ2MnCiAgICAgICAgICBSZWdpc3RlciBpbiB0aGUgY2xhc3MgJ0NDX1JFR1MnICgnZmNjMCcgdG8gJ2ZjYzMnIGFuZCAnaWNjMCcKICAgICAgICAgIHRvICdpY2MzJykuCgogICAgICdkJwogICAgICAgICAgUmVnaXN0ZXIgaW4gdGhlIGNsYXNzICdHUFJfUkVHUycgKCdncjAnIHRvICdncjYzJykuCgogICAgICdlJwogICAgICAgICAgUmVnaXN0ZXIgaW4gdGhlIGNsYXNzICdFVkVOX1JFR1MnICgnZ3IwJyB0byAnZ3I2MycpLiAgT2RkCiAgICAgICAgICByZWdpc3RlcnMgYXJlIGV4Y2x1ZGVkIG5vdCBpbiB0aGUgY2xhc3MgYnV0IHRocm91Z2ggdGhlIHVzZSBvZgogICAgICAgICAgYSBtYWNoaW5lIG1vZGUgbGFyZ2VyIHRoYW4gNCBieXRlcy4KCiAgICAgJ2YnCiAgICAgICAgICBSZWdpc3RlciBpbiB0aGUgY2xhc3MgJ0ZQUl9SRUdTJyAoJ2ZyMCcgdG8gJ2ZyNjMnKS4KCiAgICAgJ2gnCiAgICAgICAgICBSZWdpc3RlciBpbiB0aGUgY2xhc3MgJ0ZFVkVOX1JFR1MnICgnZnIwJyB0byAnZnI2MycpLiAgT2RkCiAgICAgICAgICByZWdpc3RlcnMgYXJlIGV4Y2x1ZGVkIG5vdCBpbiB0aGUgY2xhc3MgYnV0IHRocm91Z2ggdGhlIHVzZSBvZgogICAgICAgICAgYSBtYWNoaW5lIG1vZGUgbGFyZ2VyIHRoYW4gNCBieXRlcy4KCiAgICAgJ2wnCiAgICAgICAgICBSZWdpc3RlciBpbiB0aGUgY2xhc3MgJ0xSX1JFRycgKHRoZSAnbHInIHJlZ2lzdGVyKS4KCiAgICAgJ3EnCiAgICAgICAgICBSZWdpc3RlciBpbiB0aGUgY2xhc3MgJ1FVQURfUkVHUycgKCdncjInIHRvICdncjYzJykuICBSZWdpc3RlcgogICAgICAgICAgbnVtYmVycyBub3QgZGl2aXNpYmxlIGJ5IDQgYXJlIGV4Y2x1ZGVkIG5vdCBpbiB0aGUgY2xhc3MgYnV0CiAgICAgICAgICB0aHJvdWdoIHRoZSB1c2Ugb2YgYSBtYWNoaW5lIG1vZGUgbGFyZ2VyIHRoYW4gOCBieXRlcy4KCiAgICAgJ3QnCiAgICAgICAgICBSZWdpc3RlciBpbiB0aGUgY2xhc3MgJ0lDQ19SRUdTJyAoJ2ljYzAnIHRvICdpY2MzJykuCgogICAgICd1JwogICAgICAgICAgUmVnaXN0ZXIgaW4gdGhlIGNsYXNzICdGQ0NfUkVHUycgKCdmY2MwJyB0byAnZmNjMycpLgoKICAgICAndicKICAgICAgICAgIFJlZ2lzdGVyIGluIHRoZSBjbGFzcyAnSUNSX1JFR1MnICgnY2M0JyB0byAnY2M3JykuCgogICAgICd3JwogICAgICAgICAgUmVnaXN0ZXIgaW4gdGhlIGNsYXNzICdGQ1JfUkVHUycgKCdjYzAnIHRvICdjYzMnKS4KCiAgICAgJ3gnCiAgICAgICAgICBSZWdpc3RlciBpbiB0aGUgY2xhc3MgJ1FVQURfRlBSX1JFR1MnICgnZnIwJyB0byAnZnI2MycpLgogICAgICAgICAgUmVnaXN0ZXIgbnVtYmVycyBub3QgZGl2aXNpYmxlIGJ5IDQgYXJlIGV4Y2x1ZGVkIG5vdCBpbiB0aGUKICAgICAgICAgIGNsYXNzIGJ1dCB0aHJvdWdoIHRoZSB1c2Ugb2YgYSBtYWNoaW5lIG1vZGUgbGFyZ2VyIHRoYW4gOAogICAgICAgICAgYnl0ZXMuCgogICAgICd6JwogICAgICAgICAgUmVnaXN0ZXIgaW4gdGhlIGNsYXNzICdTUFJfUkVHUycgKCdsY3InIGFuZCAnbHInKS4KCiAgICAgJ0EnCiAgICAgICAgICBSZWdpc3RlciBpbiB0aGUgY2xhc3MgJ1FVQURfQUNDX1JFR1MnICgnYWNjMCcgdG8gJ2FjYzcnKS4KCiAgICAgJ0InCiAgICAgICAgICBSZWdpc3RlciBpbiB0aGUgY2xhc3MgJ0FDQ0dfUkVHUycgKCdhY2NnMCcgdG8gJ2FjY2c3JykuCgogICAgICdDJwogICAgICAgICAgUmVnaXN0ZXIgaW4gdGhlIGNsYXNzICdDUl9SRUdTJyAoJ2NjMCcgdG8gJ2NjNycpLgoKICAgICAnRycKICAgICAgICAgIEZsb2F0aW5nIHBvaW50IGNvbnN0YW50IHplcm8KCiAgICAgJ0knCiAgICAgICAgICA2LWJpdCBzaWduZWQgaW50ZWdlciBjb25zdGFudAoKICAgICAnSicKICAgICAgICAgIDEwLWJpdCBzaWduZWQgaW50ZWdlciBjb25zdGFudAoKICAgICAnTCcKICAgICAgICAgIDE2LWJpdCBzaWduZWQgaW50ZWdlciBjb25zdGFudAoKICAgICAnTScKICAgICAgICAgIDE2LWJpdCB1bnNpZ25lZCBpbnRlZ2VyIGNvbnN0YW50CgogICAgICdOJwogICAgICAgICAgMTItYml0IHNpZ25lZCBpbnRlZ2VyIGNvbnN0YW50IHRoYXQgaXMgbmVnYXRpdmUtLWkuZS4gaW4gdGhlCiAgICAgICAgICByYW5nZSBvZiAtMjA0OCB0byAtMQoKICAgICAnTycKICAgICAgICAgIENvbnN0YW50IHplcm8KCiAgICAgJ1AnCiAgICAgICAgICAxMi1iaXQgc2lnbmVkIGludGVnZXIgY29uc3RhbnQgdGhhdCBpcyBncmVhdGVyIHRoYW4gemVyby0taS5lLgogICAgICAgICAgaW4gdGhlIHJhbmdlIG9mIDEgdG8gMjA0Ny4KCl9CbGFja2ZpbiBmYW1pbHktLSdjb25maWcvYmZpbi9iZmluLmgnXwogICAgICdhJwogICAgICAgICAgUCByZWdpc3RlcgoKICAgICAnZCcKICAgICAgICAgIEQgcmVnaXN0ZXIKCiAgICAgJ3onCiAgICAgICAgICBBIGNhbGwgY2xvYmJlcmVkIFAgcmVnaXN0ZXIuCgogICAgICdxTicKICAgICAgICAgIEEgc2luZ2xlIHJlZ2lzdGVyLiAgSWYgTiBpcyBpbiB0aGUgcmFuZ2UgMCB0byA3LCB0aGUKICAgICAgICAgIGNvcnJlc3BvbmRpbmcgRCByZWdpc3Rlci4gIElmIGl0IGlzICdBJywgdGhlbiB0aGUgcmVnaXN0ZXIgUDAuCgogICAgICdEJwogICAgICAgICAgRXZlbi1udW1iZXJlZCBEIHJlZ2lzdGVyCgogICAgICdXJwogICAgICAgICAgT2RkLW51bWJlcmVkIEQgcmVnaXN0ZXIKCiAgICAgJ2UnCiAgICAgICAgICBBY2N1bXVsYXRvciByZWdpc3Rlci4KCiAgICAgJ0EnCiAgICAgICAgICBFdmVuLW51bWJlcmVkIGFjY3VtdWxhdG9yIHJlZ2lzdGVyLgoKICAgICAnQicKICAgICAgICAgIE9kZC1udW1iZXJlZCBhY2N1bXVsYXRvciByZWdpc3Rlci4KCiAgICAgJ2InCiAgICAgICAgICBJIHJlZ2lzdGVyCgogICAgICd2JwogICAgICAgICAgQiByZWdpc3RlcgoKICAgICAnZicKICAgICAgICAgIE0gcmVnaXN0ZXIKCiAgICAgJ2MnCiAgICAgICAgICBSZWdpc3RlcnMgdXNlZCBmb3IgY2lyY3VsYXIgYnVmZmVyaW5nLCBpLmUuICBJLCBCLCBvciBMCiAgICAgICAgICByZWdpc3RlcnMuCgogICAgICdDJwogICAgICAgICAgVGhlIENDIHJlZ2lzdGVyLgoKICAgICAndCcKICAgICAgICAgIExUMCBvciBMVDEuCgogICAgICdrJwogICAgICAgICAgTEMwIG9yIExDMS4KCiAgICAgJ3UnCiAgICAgICAgICBMQjAgb3IgTEIxLgoKICAgICAneCcKICAgICAgICAgIEFueSBELCBQLCBCLCBNLCBJIG9yIEwgcmVnaXN0ZXIuCgogICAgICd5JwogICAgICAgICAgQWRkaXRpb25hbCByZWdpc3RlcnMgdHlwaWNhbGx5IHVzZWQgb25seSBpbiBwcm9sb2d1ZXMgYW5kCiAgICAgICAgICBlcGlsb2d1ZXM6IFJFVFMsIFJFVE4sIFJFVEksIFJFVFgsIFJFVEUsIEFTVEFULCBTRVFTVEFUIGFuZAogICAgICAgICAgVVNQLgoKICAgICAndycKICAgICAgICAgIEFueSByZWdpc3RlciBleGNlcHQgYWNjdW11bGF0b3JzIG9yIENDLgoKICAgICAnS3NoJwogICAgICAgICAgU2lnbmVkIDE2IGJpdCBpbnRlZ2VyIChpbiB0aGUgcmFuZ2UgLTMyNzY4IHRvIDMyNzY3KQoKICAgICAnS3VoJwogICAgICAgICAgVW5zaWduZWQgMTYgYml0IGludGVnZXIgKGluIHRoZSByYW5nZSAwIHRvIDY1NTM1KQoKICAgICAnS3M3JwogICAgICAgICAgU2lnbmVkIDcgYml0IGludGVnZXIgKGluIHRoZSByYW5nZSAtNjQgdG8gNjMpCgogICAgICdLdTcnCiAgICAgICAgICBVbnNpZ25lZCA3IGJpdCBpbnRlZ2VyIChpbiB0aGUgcmFuZ2UgMCB0byAxMjcpCgogICAgICdLdTUnCiAgICAgICAgICBVbnNpZ25lZCA1IGJpdCBpbnRlZ2VyIChpbiB0aGUgcmFuZ2UgMCB0byAzMSkKCiAgICAgJ0tzNCcKICAgICAgICAgIFNpZ25lZCA0IGJpdCBpbnRlZ2VyIChpbiB0aGUgcmFuZ2UgLTggdG8gNykKCiAgICAgJ0tzMycKICAgICAgICAgIFNpZ25lZCAzIGJpdCBpbnRlZ2VyIChpbiB0aGUgcmFuZ2UgLTMgdG8gNCkKCiAgICAgJ0t1MycKICAgICAgICAgIFVuc2lnbmVkIDMgYml0IGludGVnZXIgKGluIHRoZSByYW5nZSAwIHRvIDcpCgogICAgICdQTicKICAgICAgICAgIENvbnN0YW50IE4sIHdoZXJlIE4gaXMgYSBzaW5nbGUtZGlnaXQgY29uc3RhbnQgaW4gdGhlIHJhbmdlIDAKICAgICAgICAgIHRvIDQuCgogICAgICdQQScKICAgICAgICAgIEFuIGludGVnZXIgZXF1YWwgdG8gb25lIG9mIHRoZSBNQUNGTEFHX1hYWCBjb25zdGFudHMgdGhhdCBpcwogICAgICAgICAgc3VpdGFibGUgZm9yIHVzZSB3aXRoIGVpdGhlciBhY2N1bXVsYXRvci4KCiAgICAgJ1BCJwogICAgICAgICAgQW4gaW50ZWdlciBlcXVhbCB0byBvbmUgb2YgdGhlIE1BQ0ZMQUdfWFhYIGNvbnN0YW50cyB0aGF0IGlzCiAgICAgICAgICBzdWl0YWJsZSBmb3IgdXNlIG9ubHkgd2l0aCBhY2N1bXVsYXRvciBBMS4KCiAgICAgJ00xJwogICAgICAgICAgQ29uc3RhbnQgMjU1LgoKICAgICAnTTInCiAgICAgICAgICBDb25zdGFudCA2NTUzNS4KCiAgICAgJ0onCiAgICAgICAgICBBbiBpbnRlZ2VyIGNvbnN0YW50IHdpdGggZXhhY3RseSBhIHNpbmdsZSBiaXQgc2V0LgoKICAgICAnTCcKICAgICAgICAgIEFuIGludGVnZXIgY29uc3RhbnQgd2l0aCBhbGwgYml0cyBzZXQgZXhjZXB0IGV4YWN0bHkgb25lLgoKICAgICAnSCcKCiAgICAgJ1EnCiAgICAgICAgICBBbnkgU1lNQk9MX1JFRi4KCl9NMzJDLS0nY29uZmlnL20zMmMvbTMyYy5jJ18KICAgICAnUnNwJwogICAgICdSZmInCiAgICAgJ1JzYicKICAgICAgICAgICckc3AnLCAnJGZiJywgJyRzYicuCgogICAgICdSY3InCiAgICAgICAgICBBbnkgY29udHJvbCByZWdpc3Rlciwgd2hlbiB0aGV5J3JlIDE2IGJpdHMgd2lkZSAobm90aGluZyBpZgogICAgICAgICAgY29udHJvbCByZWdpc3RlcnMgYXJlIDI0IGJpdHMgd2lkZSkKCiAgICAgJ1JjbCcKICAgICAgICAgIEFueSBjb250cm9sIHJlZ2lzdGVyLCB3aGVuIHRoZXkncmUgMjQgYml0cyB3aWRlLgoKICAgICAnUjB3JwogICAgICdSMXcnCiAgICAgJ1IydycKICAgICAnUjN3JwogICAgICAgICAgJHIwLCAkcjEsICRyMiwgJHIzLgoKICAgICAnUjAyJwogICAgICAgICAgJHIwIG9yICRyMiwgb3IgJHIycjAgZm9yIDMyIGJpdCB2YWx1ZXMuCgogICAgICdSMTMnCiAgICAgICAgICAkcjEgb3IgJHIzLCBvciAkcjNyMSBmb3IgMzIgYml0IHZhbHVlcy4KCiAgICAgJ1JkaScKICAgICAgICAgIEEgcmVnaXN0ZXIgdGhhdCBjYW4gaG9sZCBhIDY0IGJpdCB2YWx1ZS4KCiAgICAgJ1JobCcKICAgICAgICAgICRyMCBvciAkcjEgKHJlZ2lzdGVycyB3aXRoIGFkZHJlc3NhYmxlIGhpZ2gvbG93IGJ5dGVzKQoKICAgICAnUjIzJwogICAgICAgICAgJHIyIG9yICRyMwoKICAgICAnUmFhJwogICAgICAgICAgQWRkcmVzcyByZWdpc3RlcnMKCiAgICAgJ1JhdycKICAgICAgICAgIEFkZHJlc3MgcmVnaXN0ZXJzIHdoZW4gdGhleSdyZSAxNiBiaXRzIHdpZGUuCgogICAgICdSYWwnCiAgICAgICAgICBBZGRyZXNzIHJlZ2lzdGVycyB3aGVuIHRoZXkncmUgMjQgYml0cyB3aWRlLgoKICAgICAnUnFpJwogICAgICAgICAgUmVnaXN0ZXJzIHRoYXQgY2FuIGhvbGQgUUkgdmFsdWVzLgoKICAgICAnUmFkJwogICAgICAgICAgUmVnaXN0ZXJzIHRoYXQgY2FuIGJlIHVzZWQgd2l0aCBkaXNwbGFjZW1lbnRzICgkYTAsICRhMSwgJHNiKS4KCiAgICAgJ1JzaScKICAgICAgICAgIFJlZ2lzdGVycyB0aGF0IGNhbiBob2xkIDMyIGJpdCB2YWx1ZXMuCgogICAgICdSaGknCiAgICAgICAgICBSZWdpc3RlcnMgdGhhdCBjYW4gaG9sZCAxNiBiaXQgdmFsdWVzLgoKICAgICAnUmhjJwogICAgICAgICAgUmVnaXN0ZXJzIGNoYXQgY2FuIGhvbGQgMTYgYml0IHZhbHVlcywgaW5jbHVkaW5nIGFsbCBjb250cm9sCiAgICAgICAgICByZWdpc3RlcnMuCgogICAgICdScmEnCiAgICAgICAgICAkcjAgdGhyb3VnaCBSMSwgcGx1cyAkYTAgYW5kICRhMS4KCiAgICAgJ1JmbCcKICAgICAgICAgIFRoZSBmbGFncyByZWdpc3Rlci4KCiAgICAgJ1JtbScKICAgICAgICAgIFRoZSBtZW1vcnktYmFzZWQgcHNldWRvLXJlZ2lzdGVycyAkbWVtMCB0aHJvdWdoICRtZW0xNS4KCiAgICAgJ1JwaScKICAgICAgICAgIFJlZ2lzdGVycyB0aGF0IGNhbiBob2xkIHBvaW50ZXJzICgxNiBiaXQgcmVnaXN0ZXJzIGZvciByOGMsCiAgICAgICAgICBtMTZjOyAyNCBiaXQgcmVnaXN0ZXJzIGZvciBtMzJjbSwgbTMyYykuCgogICAgICdScGEnCiAgICAgICAgICBNYXRjaGVzIG11bHRpcGxlIHJlZ2lzdGVycyBpbiBhIFBBUkFMTEVMIHRvIGZvcm0gYSBsYXJnZXIKICAgICAgICAgIHJlZ2lzdGVyLiAgVXNlZCB0byBtYXRjaCBmdW5jdGlvbiByZXR1cm4gdmFsdWVzLgoKICAgICAnSXMzJwogICAgICAgICAgLTggLi4uIDcKCiAgICAgJ0lTMScKICAgICAgICAgIC0xMjggLi4uIDEyNwoKICAgICAnSVMyJwogICAgICAgICAgLTMyNzY4IC4uLiAzMjc2NwoKICAgICAnSVUyJwogICAgICAgICAgMCAuLi4gNjU1MzUKCiAgICAgJ0luNCcKICAgICAgICAgIC04IC4uLiAtMSBvciAxIC4uLiA4CgogICAgICdJbjUnCiAgICAgICAgICAtMTYgLi4uIC0xIG9yIDEgLi4uIDE2CgogICAgICdJbjYnCiAgICAgICAgICAtMzIgLi4uIC0xIG9yIDEgLi4uIDMyCgogICAgICdJTTInCiAgICAgICAgICAtNjU1MzYgLi4uIC0xCgogICAgICdJbGInCiAgICAgICAgICBBbiA4IGJpdCB2YWx1ZSB3aXRoIGV4YWN0bHkgb25lIGJpdCBzZXQuCgogICAgICdJbHcnCiAgICAgICAgICBBIDE2IGJpdCB2YWx1ZSB3aXRoIGV4YWN0bHkgb25lIGJpdCBzZXQuCgogICAgICdTZCcKICAgICAgICAgIFRoZSBjb21tb24gc3JjL2Rlc3QgbWVtb3J5IGFkZHJlc3NpbmcgbW9kZXMuCgogICAgICdTYScKICAgICAgICAgIE1lbW9yeSBhZGRyZXNzZWQgdXNpbmcgJGEwIG9yICRhMS4KCiAgICAgJ1NpJwogICAgICAgICAgTWVtb3J5IGFkZHJlc3NlZCB3aXRoIGltbWVkaWF0ZSBhZGRyZXNzZXMuCgogICAgICdTcycKICAgICAgICAgIE1lbW9yeSBhZGRyZXNzZWQgdXNpbmcgdGhlIHN0YWNrIHBvaW50ZXIgKCRzcCkuCgogICAgICdTZicKICAgICAgICAgIE1lbW9yeSBhZGRyZXNzZWQgdXNpbmcgdGhlIGZyYW1lIGJhc2UgcmVnaXN0ZXIgKCRmYikuCgogICAgICdTcycKICAgICAgICAgIE1lbW9yeSBhZGRyZXNzZWQgdXNpbmcgdGhlIHNtYWxsIGJhc2UgcmVnaXN0ZXIgKCRzYikuCgogICAgICdTMScKICAgICAgICAgICRyMWgKCl9NSVBTLS0nY29uZmlnL21pcHMvY29uc3RyYWludHMubWQnXwogICAgICdkJwogICAgICAgICAgQW4gYWRkcmVzcyByZWdpc3Rlci4gIFRoaXMgaXMgZXF1aXZhbGVudCB0byAncicgdW5sZXNzCiAgICAgICAgICBnZW5lcmF0aW5nIE1JUFMxNiBjb2RlLgoKICAgICAnZicKICAgICAgICAgIEEgZmxvYXRpbmctcG9pbnQgcmVnaXN0ZXIgKGlmIGF2YWlsYWJsZSkuCgogICAgICdoJwogICAgICAgICAgVGhlICdoaScgcmVnaXN0ZXIuCgogICAgICdsJwogICAgICAgICAgVGhlICdsbycgcmVnaXN0ZXIuCgogICAgICd4JwogICAgICAgICAgVGhlICdoaScgYW5kICdsbycgcmVnaXN0ZXJzLgoKICAgICAnYycKICAgICAgICAgIEEgcmVnaXN0ZXIgc3VpdGFibGUgZm9yIHVzZSBpbiBhbiBpbmRpcmVjdCBqdW1wLiAgVGhpcyB3aWxsCiAgICAgICAgICBhbHdheXMgYmUgJyQyNScgZm9yICctbWFiaWNhbGxzJy4KCiAgICAgJ3YnCiAgICAgICAgICBSZWdpc3RlciAnJDMnLiAgRG8gbm90IHVzZSB0aGlzIGNvbnN0cmFpbnQgaW4gbmV3IGNvZGU7IGl0IGlzCiAgICAgICAgICByZXRhaW5lZCBvbmx5IGZvciBjb21wYXRpYmlsaXR5IHdpdGggZ2xpYmMuCgogICAgICd5JwogICAgICAgICAgRXF1aXZhbGVudCB0byAncic7IHJldGFpbmVkIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4KCiAgICAgJ3onCiAgICAgICAgICBBIGZsb2F0aW5nLXBvaW50IGNvbmRpdGlvbiBjb2RlIHJlZ2lzdGVyLgoKICAgICAnSScKICAgICAgICAgIEEgc2lnbmVkIDE2LWJpdCBjb25zdGFudCAoZm9yIGFyaXRobWV0aWMgaW5zdHJ1Y3Rpb25zKS4KCiAgICAgJ0onCiAgICAgICAgICBJbnRlZ2VyIHplcm8uCgogICAgICdLJwogICAgICAgICAgQW4gdW5zaWduZWQgMTYtYml0IGNvbnN0YW50IChmb3IgbG9naWMgaW5zdHJ1Y3Rpb25zKS4KCiAgICAgJ0wnCiAgICAgICAgICBBIHNpZ25lZCAzMi1iaXQgY29uc3RhbnQgaW4gd2hpY2ggdGhlIGxvd2VyIDE2IGJpdHMgYXJlIHplcm8uCiAgICAgICAgICBTdWNoIGNvbnN0YW50cyBjYW4gYmUgbG9hZGVkIHVzaW5nICdsdWknLgoKICAgICAnTScKICAgICAgICAgIEEgY29uc3RhbnQgdGhhdCBjYW5ub3QgYmUgbG9hZGVkIHVzaW5nICdsdWknLCAnYWRkaXUnIG9yCiAgICAgICAgICAnb3JpJy4KCiAgICAgJ04nCiAgICAgICAgICBBIGNvbnN0YW50IGluIHRoZSByYW5nZSAtNjU1MzUgdG8gLTEgKGluY2x1c2l2ZSkuCgogICAgICdPJwogICAgICAgICAgQSBzaWduZWQgMTUtYml0IGNvbnN0YW50LgoKICAgICAnUCcKICAgICAgICAgIEEgY29uc3RhbnQgaW4gdGhlIHJhbmdlIDEgdG8gNjU1MzUgKGluY2x1c2l2ZSkuCgogICAgICdHJwogICAgICAgICAgRmxvYXRpbmctcG9pbnQgemVyby4KCiAgICAgJ1InCiAgICAgICAgICBBbiBhZGRyZXNzIHRoYXQgY2FuIGJlIHVzZWQgaW4gYSBub24tbWFjcm8gbG9hZCBvciBzdG9yZS4KCl9Nb3Rvcm9sYSA2ODB4MC0tJ2NvbmZpZy9tNjhrL2NvbnN0cmFpbnRzLm1kJ18KICAgICAnYScKICAgICAgICAgIEFkZHJlc3MgcmVnaXN0ZXIKCiAgICAgJ2QnCiAgICAgICAgICBEYXRhIHJlZ2lzdGVyCgogICAgICdmJwogICAgICAgICAgNjg4ODEgZmxvYXRpbmctcG9pbnQgcmVnaXN0ZXIsIGlmIGF2YWlsYWJsZQoKICAgICAnSScKICAgICAgICAgIEludGVnZXIgaW4gdGhlIHJhbmdlIDEgdG8gOAoKICAgICAnSicKICAgICAgICAgIDE2LWJpdCBzaWduZWQgbnVtYmVyCgogICAgICdLJwogICAgICAgICAgU2lnbmVkIG51bWJlciB3aG9zZSBtYWduaXR1ZGUgaXMgZ3JlYXRlciB0aGFuIDB4ODAKCiAgICAgJ0wnCiAgICAgICAgICBJbnRlZ2VyIGluIHRoZSByYW5nZSAtOCB0byAtMQoKICAgICAnTScKICAgICAgICAgIFNpZ25lZCBudW1iZXIgd2hvc2UgbWFnbml0dWRlIGlzIGdyZWF0ZXIgdGhhbiAweDEwMAoKICAgICAnTicKICAgICAgICAgIFJhbmdlIDI0IHRvIDMxLCByb3RhdGVydDpTSSA4IHRvIDEgZXhwcmVzc2VkIGFzIHJvdGF0ZQoKICAgICAnTycKICAgICAgICAgIDE2IChmb3Igcm90YXRlIHVzaW5nIHN3YXApCgogICAgICdQJwogICAgICAgICAgUmFuZ2UgOCB0byAxNSwgcm90YXRlcnQ6SEkgOCB0byAxIGV4cHJlc3NlZCBhcyByb3RhdGUKCiAgICAgJ1InCiAgICAgICAgICBOdW1iZXJzIHRoYXQgbW92M3EgY2FuIGhhbmRsZQoKICAgICAnRycKICAgICAgICAgIEZsb2F0aW5nIHBvaW50IGNvbnN0YW50IHRoYXQgaXMgbm90IGEgNjg4ODEgY29uc3RhbnQKCiAgICAgJ1MnCiAgICAgICAgICBPcGVyYW5kcyB0aGF0IHNhdGlzZnkgJ20nIHdoZW4gLW1wY3JlbCBpcyBpbiBlZmZlY3QKCiAgICAgJ1QnCiAgICAgICAgICBPcGVyYW5kcyB0aGF0IHNhdGlzZnkgJ3MnIHdoZW4gLW1wY3JlbCBpcyBub3QgaW4gZWZmZWN0CgogICAgICdRJwogICAgICAgICAgQWRkcmVzcyByZWdpc3RlciBpbmRpcmVjdCBhZGRyZXNzaW5nIG1vZGUKCiAgICAgJ1UnCiAgICAgICAgICBSZWdpc3RlciBvZmZzZXQgYWRkcmVzc2luZwoKICAgICAnVycKICAgICAgICAgIGNvbnN0X2NhbGxfb3BlcmFuZAoKICAgICAnQ3MnCiAgICAgICAgICBzeW1ib2xfcmVmIG9yIGNvbnN0CgogICAgICdDaScKICAgICAgICAgIGNvbnN0X2ludAoKICAgICAnQzAnCiAgICAgICAgICBjb25zdF9pbnQgMAoKICAgICAnQ2onCiAgICAgICAgICBSYW5nZSBvZiBzaWduZWQgbnVtYmVycyB0aGF0IGRvbid0IGZpdCBpbiAxNiBiaXRzCgogICAgICdDbXZxJwogICAgICAgICAgSW50ZWdlcnMgdmFsaWQgZm9yIG12cQoKICAgICAnQ2Fwc3cnCiAgICAgICAgICBJbnRlZ2VycyB2YWxpZCBmb3IgYSBtb3ZlcSBmb2xsb3dlZCBieSBhIHN3YXAKCiAgICAgJ0NtdnonCiAgICAgICAgICBJbnRlZ2VycyB2YWxpZCBmb3IgbXZ6CgogICAgICdDbXZzJwogICAgICAgICAgSW50ZWdlcnMgdmFsaWQgZm9yIG12cwoKICAgICAnQXAnCiAgICAgICAgICBwdXNoX29wZXJhbmQKCiAgICAgJ0FjJwogICAgICAgICAgTm9uLXJlZ2lzdGVyIG9wZXJhbmRzIGFsbG93ZWQgaW4gY2xyCgpfTW90b3JvbGEgNjhIQzExICYgNjhIQzEyIGZhbWlsaWVzLS0nY29uZmlnL202OGhjMTEvbTY4aGMxMS5oJ18KICAgICAnYScKICAgICAgICAgIFJlZ2lzdGVyICdhJwoKICAgICAnYicKICAgICAgICAgIFJlZ2lzdGVyICdiJwoKICAgICAnZCcKICAgICAgICAgIFJlZ2lzdGVyICdkJwoKICAgICAncScKICAgICAgICAgIEFuIDgtYml0IHJlZ2lzdGVyCgogICAgICd0JwogICAgICAgICAgVGVtcG9yYXJ5IHNvZnQgcmVnaXN0ZXIgXy50bXAKCiAgICAgJ3UnCiAgICAgICAgICBBIHNvZnQgcmVnaXN0ZXIgXy5kMSB0byBfLmQzMQoKICAgICAndycKICAgICAgICAgIFN0YWNrIHBvaW50ZXIgcmVnaXN0ZXIKCiAgICAgJ3gnCiAgICAgICAgICBSZWdpc3RlciAneCcKCiAgICAgJ3knCiAgICAgICAgICBSZWdpc3RlciAneScKCiAgICAgJ3onCiAgICAgICAgICBQc2V1ZG8gcmVnaXN0ZXIgJ3onIChyZXBsYWNlZCBieSAneCcgb3IgJ3knIGF0IHRoZSBlbmQpCgogICAgICdBJwogICAgICAgICAgQW4gYWRkcmVzcyByZWdpc3RlcjogeCwgeSBvciB6CgogICAgICdCJwogICAgICAgICAgQW4gYWRkcmVzcyByZWdpc3RlcjogeCBvciB5CgogICAgICdEJwogICAgICAgICAgUmVnaXN0ZXIgcGFpciAoeDpkKSB0byBmb3JtIGEgMzItYml0IHZhbHVlCgogICAgICdMJwogICAgICAgICAgQ29uc3RhbnRzIGluIHRoZSByYW5nZSAtNjU1MzYgdG8gNjU1MzUKCiAgICAgJ00nCiAgICAgICAgICBDb25zdGFudHMgd2hvc2UgMTYtYml0IGxvdyBwYXJ0IGlzIHplcm8KCiAgICAgJ04nCiAgICAgICAgICBDb25zdGFudCBpbnRlZ2VyIDEgb3IgLTEKCiAgICAgJ08nCiAgICAgICAgICBDb25zdGFudCBpbnRlZ2VyIDE2CgogICAgICdQJwogICAgICAgICAgQ29uc3RhbnRzIGluIHRoZSByYW5nZSAtOCB0byAyCgpfU1BBUkMtLSdjb25maWcvc3BhcmMvc3BhcmMuaCdfCiAgICAgJ2YnCiAgICAgICAgICBGbG9hdGluZy1wb2ludCByZWdpc3RlciBvbiB0aGUgU1BBUkMtVjggYXJjaGl0ZWN0dXJlIGFuZCBsb3dlcgogICAgICAgICAgZmxvYXRpbmctcG9pbnQgcmVnaXN0ZXIgb24gdGhlIFNQQVJDLVY5IGFyY2hpdGVjdHVyZS4KCiAgICAgJ2UnCiAgICAgICAgICBGbG9hdGluZy1wb2ludCByZWdpc3Rlci4gIEl0IGlzIGVxdWl2YWxlbnQgdG8gJ2YnIG9uIHRoZQogICAgICAgICAgU1BBUkMtVjggYXJjaGl0ZWN0dXJlIGFuZCBjb250YWlucyBib3RoIGxvd2VyIGFuZCB1cHBlcgogICAgICAgICAgZmxvYXRpbmctcG9pbnQgcmVnaXN0ZXJzIG9uIHRoZSBTUEFSQy1WOSBhcmNoaXRlY3R1cmUuCgogICAgICdjJwogICAgICAgICAgRmxvYXRpbmctcG9pbnQgY29uZGl0aW9uIGNvZGUgcmVnaXN0ZXIuCgogICAgICdkJwogICAgICAgICAgTG93ZXIgZmxvYXRpbmctcG9pbnQgcmVnaXN0ZXIuICBJdCBpcyBvbmx5IHZhbGlkIG9uIHRoZQogICAgICAgICAgU1BBUkMtVjkgYXJjaGl0ZWN0dXJlIHdoZW4gdGhlIFZpc3VhbCBJbnN0cnVjdGlvbiBTZXQgaXMKICAgICAgICAgIGF2YWlsYWJsZS4KCiAgICAgJ2InCiAgICAgICAgICBGbG9hdGluZy1wb2ludCByZWdpc3Rlci4gIEl0IGlzIG9ubHkgdmFsaWQgb24gdGhlIFNQQVJDLVY5CiAgICAgICAgICBhcmNoaXRlY3R1cmUgd2hlbiB0aGUgVmlzdWFsIEluc3RydWN0aW9uIFNldCBpcyBhdmFpbGFibGUuCgogICAgICdoJwogICAgICAgICAgNjQtYml0IGdsb2JhbCBvciBvdXQgcmVnaXN0ZXIgZm9yIHRoZSBTUEFSQy1WOCsgYXJjaGl0ZWN0dXJlLgoKICAgICAnRCcKICAgICAgICAgIEEgdmVjdG9yIGNvbnN0YW50CgogICAgICdJJwogICAgICAgICAgU2lnbmVkIDEzLWJpdCBjb25zdGFudAoKICAgICAnSicKICAgICAgICAgIFplcm8KCiAgICAgJ0snCiAgICAgICAgICAzMi1iaXQgY29uc3RhbnQgd2l0aCB0aGUgbG93IDEyIGJpdHMgY2xlYXIgKGEgY29uc3RhbnQgdGhhdAogICAgICAgICAgY2FuIGJlIGxvYWRlZCB3aXRoIHRoZSAnc2V0aGknIGluc3RydWN0aW9uKQoKICAgICAnTCcKICAgICAgICAgIEEgY29uc3RhbnQgaW4gdGhlIHJhbmdlIHN1cHBvcnRlZCBieSAnbW92Y2MnIGluc3RydWN0aW9ucwoKICAgICAnTScKICAgICAgICAgIEEgY29uc3RhbnQgaW4gdGhlIHJhbmdlIHN1cHBvcnRlZCBieSAnbW92cmNjJyBpbnN0cnVjdGlvbnMKCiAgICAgJ04nCiAgICAgICAgICBTYW1lIGFzICdLJywgZXhjZXB0IHRoYXQgaXQgdmVyaWZpZXMgdGhhdCBiaXRzIHRoYXQgYXJlIG5vdCBpbgogICAgICAgICAgdGhlIGxvd2VyIDMyLWJpdCByYW5nZSBhcmUgYWxsIHplcm8uICBNdXN0IGJlIHVzZWQgaW5zdGVhZCBvZgogICAgICAgICAgJ0snIGZvciBtb2RlcyB3aWRlciB0aGFuICdTSW1vZGUnCgogICAgICdPJwogICAgICAgICAgVGhlIGNvbnN0YW50IDQwOTYKCiAgICAgJ0cnCiAgICAgICAgICBGbG9hdGluZy1wb2ludCB6ZXJvCgogICAgICdIJwogICAgICAgICAgU2lnbmVkIDEzLWJpdCBjb25zdGFudCwgc2lnbi1leHRlbmRlZCB0byAzMiBvciA2NCBiaXRzCgogICAgICdRJwogICAgICAgICAgRmxvYXRpbmctcG9pbnQgY29uc3RhbnQgd2hvc2UgaW50ZWdyYWwgcmVwcmVzZW50YXRpb24gY2FuIGJlCiAgICAgICAgICBtb3ZlZCBpbnRvIGFuIGludGVnZXIgcmVnaXN0ZXIgdXNpbmcgYSBzaW5nbGUgc2V0aGkKICAgICAgICAgIGluc3RydWN0aW9uCgogICAgICdSJwogICAgICAgICAgRmxvYXRpbmctcG9pbnQgY29uc3RhbnQgd2hvc2UgaW50ZWdyYWwgcmVwcmVzZW50YXRpb24gY2FuIGJlCiAgICAgICAgICBtb3ZlZCBpbnRvIGFuIGludGVnZXIgcmVnaXN0ZXIgdXNpbmcgYSBzaW5nbGUgbW92IGluc3RydWN0aW9uCgogICAgICdTJwogICAgICAgICAgRmxvYXRpbmctcG9pbnQgY29uc3RhbnQgd2hvc2UgaW50ZWdyYWwgcmVwcmVzZW50YXRpb24gY2FuIGJlCiAgICAgICAgICBtb3ZlZCBpbnRvIGFuIGludGVnZXIgcmVnaXN0ZXIgdXNpbmcgYSBoaWdoL2xvX3N1bSBpbnN0cnVjdGlvbgogICAgICAgICAgc2VxdWVuY2UKCiAgICAgJ1QnCiAgICAgICAgICBNZW1vcnkgYWRkcmVzcyBhbGlnbmVkIHRvIGFuIDgtYnl0ZSBib3VuZGFyeQoKICAgICAnVScKICAgICAgICAgIEV2ZW4gcmVnaXN0ZXIKCiAgICAgJ1cnCiAgICAgICAgICBNZW1vcnkgYWRkcmVzcyBmb3IgJ2UnIGNvbnN0cmFpbnQgcmVnaXN0ZXJzCgogICAgICdZJwogICAgICAgICAgVmVjdG9yIHplcm8KCl9TUFUtLSdjb25maWcvc3B1L3NwdS5oJ18KICAgICAnYScKICAgICAgICAgIEFuIGltbWVkaWF0ZSB3aGljaCBjYW4gYmUgbG9hZGVkIHdpdGggdGhlIGlsL2lsYS9pbGgvaWxodQogICAgICAgICAgaW5zdHJ1Y3Rpb25zLiAgY29uc3RfaW50IGlzIHRyZWF0ZWQgYXMgYSA2NCBiaXQgdmFsdWUuCgogICAgICdjJwogICAgICAgICAgQW4gaW1tZWRpYXRlIGZvciBhbmQveG9yL29yIGluc3RydWN0aW9ucy4gIGNvbnN0X2ludCBpcwogICAgICAgICAgdHJlYXRlZCBhcyBhIDY0IGJpdCB2YWx1ZS4KCiAgICAgJ2QnCiAgICAgICAgICBBbiBpbW1lZGlhdGUgZm9yIHRoZSAnaW9obCcgaW5zdHJ1Y3Rpb24uICBjb25zdF9pbnQgaXMgdHJlYXRlZAogICAgICAgICAgYXMgYSA2NCBiaXQgdmFsdWUuCgogICAgICdmJwogICAgICAgICAgQW4gaW1tZWRpYXRlIHdoaWNoIGNhbiBiZSBsb2FkZWQgd2l0aCAnZnNtYmknLgoKICAgICAnQScKICAgICAgICAgIEFuIGltbWVkaWF0ZSB3aGljaCBjYW4gYmUgbG9hZGVkIHdpdGggdGhlIGlsL2lsYS9pbGgvaWxodQogICAgICAgICAgaW5zdHJ1Y3Rpb25zLiAgY29uc3RfaW50IGlzIHRyZWF0ZWQgYXMgYSAzMiBiaXQgdmFsdWUuCgogICAgICdCJwogICAgICAgICAgQW4gaW1tZWRpYXRlIGZvciBtb3N0IGFyaXRobWV0aWMgaW5zdHJ1Y3Rpb25zLiAgY29uc3RfaW50IGlzCiAgICAgICAgICB0cmVhdGVkIGFzIGEgMzIgYml0IHZhbHVlLgoKICAgICAnQycKICAgICAgICAgIEFuIGltbWVkaWF0ZSBmb3IgYW5kL3hvci9vciBpbnN0cnVjdGlvbnMuICBjb25zdF9pbnQgaXMKICAgICAgICAgIHRyZWF0ZWQgYXMgYSAzMiBiaXQgdmFsdWUuCgogICAgICdEJwogICAgICAgICAgQW4gaW1tZWRpYXRlIGZvciB0aGUgJ2lvaGwnIGluc3RydWN0aW9uLiAgY29uc3RfaW50IGlzIHRyZWF0ZWQKICAgICAgICAgIGFzIGEgMzIgYml0IHZhbHVlLgoKICAgICAnSScKICAgICAgICAgIEEgY29uc3RhbnQgaW4gdGhlIHJhbmdlIFstNjQsIDYzXSBmb3Igc2hpZnQvcm90YXRlCiAgICAgICAgICBpbnN0cnVjdGlvbnMuCgogICAgICdKJwogICAgICAgICAgQW4gdW5zaWduZWQgNy1iaXQgY29uc3RhbnQgZm9yIGNvbnZlcnNpb24vbm9wL2NoYW5uZWwKICAgICAgICAgIGluc3RydWN0aW9ucy4KCiAgICAgJ0snCiAgICAgICAgICBBIHNpZ25lZCAxMC1iaXQgY29uc3RhbnQgZm9yIG1vc3QgYXJpdGhtZXRpYyBpbnN0cnVjdGlvbnMuCgogICAgICdNJwogICAgICAgICAgQSBzaWduZWQgMTYgYml0IGltbWVkaWF0ZSBmb3IgJ3N0b3AnLgoKICAgICAnTicKICAgICAgICAgIEFuIHVuc2lnbmVkIDE2LWJpdCBjb25zdGFudCBmb3IgJ2lvaGwnIGFuZCAnZnNtYmknLgoKICAgICAnTycKICAgICAgICAgIEFuIHVuc2lnbmVkIDctYml0IGNvbnN0YW50IHdob3NlIDMgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBhcmUKICAgICAgICAgIDAuCgogICAgICdQJwogICAgICAgICAgQW4gdW5zaWduZWQgMy1iaXQgY29uc3RhbnQgZm9yIDE2LWJ5dGUgcm90YXRlcyBhbmQgc2hpZnRzCgogICAgICdSJwogICAgICAgICAgQ2FsbCBvcGVyYW5kLCByZWcsIGZvciBpbmRpcmVjdCBjYWxscwoKICAgICAnUycKICAgICAgICAgIENhbGwgb3BlcmFuZCwgc3ltYm9sLCBmb3IgcmVsYXRpdmUgY2FsbHMuCgogICAgICdUJwogICAgICAgICAgQ2FsbCBvcGVyYW5kLCBjb25zdF9pbnQsIGZvciBhYnNvbHV0ZSBjYWxscy4KCiAgICAgJ1UnCiAgICAgICAgICBBbiBpbW1lZGlhdGUgd2hpY2ggY2FuIGJlIGxvYWRlZCB3aXRoIHRoZSBpbC9pbGEvaWxoL2lsaHUKICAgICAgICAgIGluc3RydWN0aW9ucy4gIGNvbnN0X2ludCBpcyBzaWduIGV4dGVuZGVkIHRvIDEyOCBiaXQuCgogICAgICdXJwogICAgICAgICAgQW4gaW1tZWRpYXRlIGZvciBzaGlmdCBhbmQgcm90YXRlIGluc3RydWN0aW9ucy4gIGNvbnN0X2ludCBpcwogICAgICAgICAgdHJlYXRlZCBhcyBhIDMyIGJpdCB2YWx1ZS4KCiAgICAgJ1knCiAgICAgICAgICBBbiBpbW1lZGlhdGUgZm9yIGFuZC94b3Ivb3IgaW5zdHJ1Y3Rpb25zLiAgY29uc3RfaW50IGlzIHNpZ24KICAgICAgICAgIGV4dGVuZGVkIGFzIGEgMTI4IGJpdC4KCiAgICAgJ1onCiAgICAgICAgICBBbiBpbW1lZGlhdGUgZm9yIHRoZSAnaW9obCcgaW5zdHJ1Y3Rpb24uICBjb25zdF9pbnQgaXMgc2lnbgogICAgICAgICAgZXh0ZW5kZWQgdG8gMTI4IGJpdC4KCl9TLzM5MCBhbmQgelNlcmllcy0tJ2NvbmZpZy9zMzkwL3MzOTAuaCdfCiAgICAgJ2EnCiAgICAgICAgICBBZGRyZXNzIHJlZ2lzdGVyIChnZW5lcmFsIHB1cnBvc2UgcmVnaXN0ZXIgZXhjZXB0IHIwKQoKICAgICAnYycKICAgICAgICAgIENvbmRpdGlvbiBjb2RlIHJlZ2lzdGVyCgogICAgICdkJwogICAgICAgICAgRGF0YSByZWdpc3RlciAoYXJiaXRyYXJ5IGdlbmVyYWwgcHVycG9zZSByZWdpc3RlcikKCiAgICAgJ2YnCiAgICAgICAgICBGbG9hdGluZy1wb2ludCByZWdpc3RlcgoKICAgICAnSScKICAgICAgICAgIFVuc2lnbmVkIDgtYml0IGNvbnN0YW50ICgwLTI1NSkKCiAgICAgJ0onCiAgICAgICAgICBVbnNpZ25lZCAxMi1iaXQgY29uc3RhbnQgKDAtNDA5NSkKCiAgICAgJ0snCiAgICAgICAgICBTaWduZWQgMTYtYml0IGNvbnN0YW50ICgtMzI3NjgtMzI3NjcpCgogICAgICdMJwogICAgICAgICAgVmFsdWUgYXBwcm9wcmlhdGUgYXMgZGlzcGxhY2VtZW50LgogICAgICAgICAgJygwLi40MDk1KScKICAgICAgICAgICAgICAgZm9yIHNob3J0IGRpc3BsYWNlbWVudAogICAgICAgICAgJygtNTI0Mjg4Li41MjQyODcpJwogICAgICAgICAgICAgICBmb3IgbG9uZyBkaXNwbGFjZW1lbnQKCiAgICAgJ00nCiAgICAgICAgICBDb25zdGFudCBpbnRlZ2VyIHdpdGggYSB2YWx1ZSBvZiAweDdmZmZmZmZmLgoKICAgICAnTicKICAgICAgICAgIE11bHRpcGxlIGxldHRlciBjb25zdHJhaW50IGZvbGxvd2VkIGJ5IDQgcGFyYW1ldGVyIGxldHRlcnMuCiAgICAgICAgICAnMC4uOTonCiAgICAgICAgICAgICAgIG51bWJlciBvZiB0aGUgcGFydCBjb3VudGluZyBmcm9tIG1vc3QgdG8gbGVhc3QKICAgICAgICAgICAgICAgc2lnbmlmaWNhbnQKICAgICAgICAgICdILFE6JwogICAgICAgICAgICAgICBtb2RlIG9mIHRoZSBwYXJ0CiAgICAgICAgICAnRCxTLEg6JwogICAgICAgICAgICAgICBtb2RlIG9mIHRoZSBjb250YWluaW5nIG9wZXJhbmQKICAgICAgICAgICcwLEY6JwogICAgICAgICAgICAgICB2YWx1ZSBvZiB0aGUgb3RoZXIgcGFydHMgKEYtLWFsbCBiaXRzIHNldCkKICAgICAgICAgIFRoZSBjb25zdHJhaW50IG1hdGNoZXMgaWYgdGhlIHNwZWNpZmllZCBwYXJ0IG9mIGEgY29uc3RhbnQgaGFzCiAgICAgICAgICBhIHZhbHVlIGRpZmZlcmVudCBmcm9tIGl0cyBvdGhlciBwYXJ0cy4KCiAgICAgJ1EnCiAgICAgICAgICBNZW1vcnkgcmVmZXJlbmNlIHdpdGhvdXQgaW5kZXggcmVnaXN0ZXIgYW5kIHdpdGggc2hvcnQKICAgICAgICAgIGRpc3BsYWNlbWVudC4KCiAgICAgJ1InCiAgICAgICAgICBNZW1vcnkgcmVmZXJlbmNlIHdpdGggaW5kZXggcmVnaXN0ZXIgYW5kIHNob3J0IGRpc3BsYWNlbWVudC4KCiAgICAgJ1MnCiAgICAgICAgICBNZW1vcnkgcmVmZXJlbmNlIHdpdGhvdXQgaW5kZXggcmVnaXN0ZXIgYnV0IHdpdGggbG9uZwogICAgICAgICAgZGlzcGxhY2VtZW50LgoKICAgICAnVCcKICAgICAgICAgIE1lbW9yeSByZWZlcmVuY2Ugd2l0aCBpbmRleCByZWdpc3RlciBhbmQgbG9uZyBkaXNwbGFjZW1lbnQuCgogICAgICdVJwogICAgICAgICAgUG9pbnRlciB3aXRoIHNob3J0IGRpc3BsYWNlbWVudC4KCiAgICAgJ1cnCiAgICAgICAgICBQb2ludGVyIHdpdGggbG9uZyBkaXNwbGFjZW1lbnQuCgogICAgICdZJwogICAgICAgICAgU2hpZnQgY291bnQgb3BlcmFuZC4KCl9TY29yZSBmYW1pbHktLSdjb25maWcvc2NvcmUvc2NvcmUuaCdfCiAgICAgJ2QnCiAgICAgICAgICBSZWdpc3RlcnMgZnJvbSByMCB0byByMzIuCgogICAgICdlJwogICAgICAgICAgUmVnaXN0ZXJzIGZyb20gcjAgdG8gcjE2LgoKICAgICAndCcKICAgICAgICAgIHI4LS1yMTEgb3IgcjIyLS1yMjcgcmVnaXN0ZXJzLgoKICAgICAnaCcKICAgICAgICAgIGhpIHJlZ2lzdGVyLgoKICAgICAnbCcKICAgICAgICAgIGxvIHJlZ2lzdGVyLgoKICAgICAneCcKICAgICAgICAgIGhpICsgbG8gcmVnaXN0ZXIuCgogICAgICdxJwogICAgICAgICAgY250IHJlZ2lzdGVyLgoKICAgICAneScKICAgICAgICAgIGxjYiByZWdpc3Rlci4KCiAgICAgJ3onCiAgICAgICAgICBzY2IgcmVnaXN0ZXIuCgogICAgICdhJwogICAgICAgICAgY250ICsgbGNiICsgc2NiIHJlZ2lzdGVyLgoKICAgICAnYycKICAgICAgICAgIGNyMC0tY3IxNSByZWdpc3Rlci4KCiAgICAgJ2InCiAgICAgICAgICBjcDEgcmVnaXN0ZXJzLgoKICAgICAnZicKICAgICAgICAgIGNwMiByZWdpc3RlcnMuCgogICAgICdpJwogICAgICAgICAgY3AzIHJlZ2lzdGVycy4KCiAgICAgJ2onCiAgICAgICAgICBjcDEgKyBjcDIgKyBjcDMgcmVnaXN0ZXJzLgoKICAgICAnSScKICAgICAgICAgIEhpZ2ggMTYtYml0IGNvbnN0YW50ICgzMi1iaXQgY29uc3RhbnQgd2l0aCAxNiBMU0JzIHplcm8pLgoKICAgICAnSicKICAgICAgICAgIFVuc2lnbmVkIDUgYml0IGludGVnZXIgKGluIHRoZSByYW5nZSAwIHRvIDMxKS4KCiAgICAgJ0snCiAgICAgICAgICBVbnNpZ25lZCAxNiBiaXQgaW50ZWdlciAoaW4gdGhlIHJhbmdlIDAgdG8gNjU1MzUpLgoKICAgICAnTCcKICAgICAgICAgIFNpZ25lZCAxNiBiaXQgaW50ZWdlciAoaW4gdGhlIHJhbmdlIC0zMjc2OCB0byAzMjc2NykuCgogICAgICdNJwogICAgICAgICAgVW5zaWduZWQgMTQgYml0IGludGVnZXIgKGluIHRoZSByYW5nZSAwIHRvIDE2MzgzKS4KCiAgICAgJ04nCiAgICAgICAgICBTaWduZWQgMTQgYml0IGludGVnZXIgKGluIHRoZSByYW5nZSAtODE5MiB0byA4MTkxKS4KCiAgICAgJ1onCiAgICAgICAgICBBbnkgU1lNQk9MX1JFRi4KCl9Yc3Rvcm15MTYtLSdjb25maWcvc3Rvcm15MTYvc3Rvcm15MTYuaCdfCiAgICAgJ2EnCiAgICAgICAgICBSZWdpc3RlciByMC4KCiAgICAgJ2InCiAgICAgICAgICBSZWdpc3RlciByMS4KCiAgICAgJ2MnCiAgICAgICAgICBSZWdpc3RlciByMi4KCiAgICAgJ2QnCiAgICAgICAgICBSZWdpc3RlciByOC4KCiAgICAgJ2UnCiAgICAgICAgICBSZWdpc3RlcnMgcjAgdGhyb3VnaCByNy4KCiAgICAgJ3QnCiAgICAgICAgICBSZWdpc3RlcnMgcjAgYW5kIHIxLgoKICAgICAneScKICAgICAgICAgIFRoZSBjYXJyeSByZWdpc3Rlci4KCiAgICAgJ3onCiAgICAgICAgICBSZWdpc3RlcnMgcjggYW5kIHI5LgoKICAgICAnSScKICAgICAgICAgIEEgY29uc3RhbnQgYmV0d2VlbiAwIGFuZCAzIGluY2x1c2l2ZS4KCiAgICAgJ0onCiAgICAgICAgICBBIGNvbnN0YW50IHRoYXQgaGFzIGV4YWN0bHkgb25lIGJpdCBzZXQuCgogICAgICdLJwogICAgICAgICAgQSBjb25zdGFudCB0aGF0IGhhcyBleGFjdGx5IG9uZSBiaXQgY2xlYXIuCgogICAgICdMJwogICAgICAgICAgQSBjb25zdGFudCBiZXR3ZWVuIDAgYW5kIDI1NSBpbmNsdXNpdmUuCgogICAgICdNJwogICAgICAgICAgQSBjb25zdGFudCBiZXR3ZWVuIC0yNTUgYW5kIDAgaW5jbHVzaXZlLgoKICAgICAnTicKICAgICAgICAgIEEgY29uc3RhbnQgYmV0d2VlbiAtMyBhbmQgMCBpbmNsdXNpdmUuCgogICAgICdPJwogICAgICAgICAgQSBjb25zdGFudCBiZXR3ZWVuIDEgYW5kIDQgaW5jbHVzaXZlLgoKICAgICAnUCcKICAgICAgICAgIEEgY29uc3RhbnQgYmV0d2VlbiAtNCBhbmQgLTEgaW5jbHVzaXZlLgoKICAgICAnUScKICAgICAgICAgIEEgbWVtb3J5IHJlZmVyZW5jZSB0aGF0IGlzIGEgc3RhY2sgcHVzaC4KCiAgICAgJ1InCiAgICAgICAgICBBIG1lbW9yeSByZWZlcmVuY2UgdGhhdCBpcyBhIHN0YWNrIHBvcC4KCiAgICAgJ1MnCiAgICAgICAgICBBIG1lbW9yeSByZWZlcmVuY2UgdGhhdCByZWZlcnMgdG8gYSBjb25zdGFudCBhZGRyZXNzIG9mIGtub3duCiAgICAgICAgICB2YWx1ZS4KCiAgICAgJ1QnCiAgICAgICAgICBUaGUgcmVnaXN0ZXIgaW5kaWNhdGVkIGJ5IFJ4IChub3QgaW1wbGVtZW50ZWQgeWV0KS4KCiAgICAgJ1UnCiAgICAgICAgICBBIGNvbnN0YW50IHRoYXQgaXMgbm90IGJldHdlZW4gMiBhbmQgMTUgaW5jbHVzaXZlLgoKICAgICAnWicKICAgICAgICAgIFRoZSBjb25zdGFudCAwLgoKX1h0ZW5zYS0tJ2NvbmZpZy94dGVuc2EvY29uc3RyYWludHMubWQnXwogICAgICdhJwogICAgICAgICAgR2VuZXJhbC1wdXJwb3NlIDMyLWJpdCByZWdpc3RlcgoKICAgICAnYicKICAgICAgICAgIE9uZS1iaXQgYm9vbGVhbiByZWdpc3RlcgoKICAgICAnQScKICAgICAgICAgIE1BQzE2IDQwLWJpdCBhY2N1bXVsYXRvciByZWdpc3RlcgoKICAgICAnSScKICAgICAgICAgIFNpZ25lZCAxMi1iaXQgaW50ZWdlciBjb25zdGFudCwgZm9yIHVzZSBpbiBNT1ZJIGluc3RydWN0aW9ucwoKICAgICAnSicKICAgICAgICAgIFNpZ25lZCA4LWJpdCBpbnRlZ2VyIGNvbnN0YW50LCBmb3IgdXNlIGluIEFEREkgaW5zdHJ1Y3Rpb25zCgogICAgICdLJwogICAgICAgICAgSW50ZWdlciBjb25zdGFudCB2YWxpZCBmb3IgQmNjSSBpbnN0cnVjdGlvbnMKCiAgICAgJ0wnCiAgICAgICAgICBVbnNpZ25lZCBjb25zdGFudCB2YWxpZCBmb3IgQmNjVUkgaW5zdHJ1Y3Rpb25zCgofCkZpbGU6IGdjY2ludC5pbmZvLCAgTm9kZTogRGVmaW5lIENvbnN0cmFpbnRzLCAgTmV4dDogQyBDb25zdHJhaW50IEludGVyZmFjZSwgIFByZXY6IE1hY2hpbmUgQ29uc3RyYWludHMsICBVcDogQ29uc3RyYWludHMKCjE0LjguNiBEZWZpbmluZyBNYWNoaW5lLVNwZWNpZmljIENvbnN0cmFpbnRzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpNYWNoaW5lLXNwZWNpZmljIGNvbnN0cmFpbnRzIGZhbGwgaW50byB0d28gY2F0ZWdvcmllczogcmVnaXN0ZXIgYW5kCm5vbi1yZWdpc3RlciBjb25zdHJhaW50cy4gIFdpdGhpbiB0aGUgbGF0dGVyIGNhdGVnb3J5LCBjb25zdHJhaW50cyB3aGljaAphbGxvdyBzdWJzZXRzIG9mIGFsbCBwb3NzaWJsZSBtZW1vcnkgb3IgYWRkcmVzcyBvcGVyYW5kcyBzaG91bGQgYmUKc3BlY2lhbGx5IG1hcmtlZCwgdG8gZ2l2ZSAncmVsb2FkJyBtb3JlIGluZm9ybWF0aW9uLgoKIE1hY2hpbmUtc3BlY2lmaWMgY29uc3RyYWludHMgY2FuIGJlIGdpdmVuIG5hbWVzIG9mIGFyYml0cmFyeSBsZW5ndGgsCmJ1dCB0aGV5IG11c3QgYmUgZW50aXJlbHkgY29tcG9zZWQgb2YgbGV0dGVycywgZGlnaXRzLCB1bmRlcnNjb3JlcwooJ18nKSwgYW5kIGFuZ2xlIGJyYWNrZXRzICgnPCA+JykuICBMaWtlIEMgaWRlbnRpZmllcnMsIHRoZXkgbXVzdCBiZWdpbgp3aXRoIGEgbGV0dGVyIG9yIHVuZGVyc2NvcmUuCgogSW4gb3JkZXIgdG8gYXZvaWQgYW1iaWd1aXR5IGluIG9wZXJhbmQgY29uc3RyYWludCBzdHJpbmdzLCBubwpjb25zdHJhaW50IGNhbiBoYXZlIGEgbmFtZSB0aGF0IGJlZ2lucyB3aXRoIGFueSBvdGhlciBjb25zdHJhaW50J3MgbmFtZS4KRm9yIGV4YW1wbGUsIGlmICd4JyBpcyBkZWZpbmVkIGFzIGEgY29uc3RyYWludCBuYW1lLCAneHknIG1heSBub3QgYmUsCmFuZCB2aWNlIHZlcnNhLiAgQXMgYSBjb25zZXF1ZW5jZSBvZiB0aGlzIHJ1bGUsIG5vIGNvbnN0cmFpbnQgbWF5IGJlZ2luCndpdGggb25lIG9mIHRoZSBnZW5lcmljIGNvbnN0cmFpbnQgbGV0dGVyczogJ0UgRiBWIFggZyBpIG0gbiBvIHAgciBzJy4KCiBSZWdpc3RlciBjb25zdHJhaW50cyBjb3JyZXNwb25kIGRpcmVjdGx5IHRvIHJlZ2lzdGVyIGNsYXNzZXMuICAqTm90ZQpSZWdpc3RlciBDbGFzc2VzOjouICBUaGVyZSBpcyB0aHVzIG5vdCBtdWNoIGZsZXhpYmlsaXR5IGluIHRoZWlyCmRlZmluaXRpb25zLgoKIC0tIE1EIEV4cHJlc3Npb246IGRlZmluZV9yZWdpc3Rlcl9jb25zdHJhaW50IG5hbWUgcmVnY2xhc3MgZG9jc3RyaW5nCiAgICAgQWxsIHRocmVlIGFyZ3VtZW50cyBhcmUgc3RyaW5nIGNvbnN0YW50cy4gIE5BTUUgaXMgdGhlIG5hbWUgb2YgdGhlCiAgICAgY29uc3RyYWludCwgYXMgaXQgd2lsbCBhcHBlYXIgaW4gJ21hdGNoX29wZXJhbmQnIGV4cHJlc3Npb25zLiAgSWYKICAgICBOQU1FIGlzIGEgbXVsdGktbGV0dGVyIGNvbnN0cmFpbnQgaXRzIGxlbmd0aCBzaGFsbCBiZSB0aGUgc2FtZSBmb3IKICAgICBhbGwgY29uc3RyYWludHMgc3RhcnRpbmcgd2l0aCB0aGUgc2FtZSBsZXR0ZXIuICBSRUdDTEFTUyBjYW4gYmUKICAgICBlaXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcnJlc3BvbmRpbmcgcmVnaXN0ZXIgY2xhc3MgKCpub3RlIFJlZ2lzdGVyCiAgICAgQ2xhc3Nlczo6KSwgb3IgYSBDIGV4cHJlc3Npb24gd2hpY2ggZXZhbHVhdGVzIHRvIHRoZSBhcHByb3ByaWF0ZQogICAgIHJlZ2lzdGVyIGNsYXNzLiAgSWYgaXQgaXMgYW4gZXhwcmVzc2lvbiwgaXQgbXVzdCBoYXZlIG5vIHNpZGUKICAgICBlZmZlY3RzLCBhbmQgaXQgY2Fubm90IGxvb2sgYXQgdGhlIG9wZXJhbmQuICBUaGUgdXN1YWwgdXNlIG9mCiAgICAgZXhwcmVzc2lvbnMgaXMgdG8gbWFwIHNvbWUgcmVnaXN0ZXIgY29uc3RyYWludHMgdG8gJ05PX1JFR1MnIHdoZW4KICAgICB0aGUgcmVnaXN0ZXIgY2xhc3MgaXMgbm90IGF2YWlsYWJsZSBvbiBhIGdpdmVuIHN1YmFyY2hpdGVjdHVyZS4KCiAgICAgRE9DU1RSSU5HIGlzIGEgc2VudGVuY2UgZG9jdW1lbnRpbmcgdGhlIG1lYW5pbmcgb2YgdGhlIGNvbnN0cmFpbnQuCiAgICAgRG9jc3RyaW5ncyBhcmUgZXhwbGFpbmVkIGZ1cnRoZXIgYmVsb3cuCgogTm9uLXJlZ2lzdGVyIGNvbnN0cmFpbnRzIGFyZSBtb3JlIGxpa2UgcHJlZGljYXRlczogdGhlIGNvbnN0cmFpbnQKZGVmaW5pdGlvbiBnaXZlcyBhIEJvb2xlYW4gZXhwcmVzc2lvbiB3aGljaCBpbmRpY2F0ZXMgd2hldGhlciB0aGUKY29uc3RyYWludCBtYXRjaGVzLgoKIC0tIE1EIEV4cHJlc3Npb246IGRlZmluZV9jb25zdHJhaW50IG5hbWUgZG9jc3RyaW5nIGV4cAogICAgIFRoZSBOQU1FIGFuZCBET0NTVFJJTkcgYXJndW1lbnRzIGFyZSB0aGUgc2FtZSBhcyBmb3IKICAgICAnZGVmaW5lX3JlZ2lzdGVyX2NvbnN0cmFpbnQnLCBidXQgbm90ZSB0aGF0IHRoZSBkb2NzdHJpbmcgY29tZXMKICAgICBpbW1lZGlhdGVseSBhZnRlciB0aGUgbmFtZSBmb3IgdGhlc2UgZXhwcmVzc2lvbnMuICBFWFAgaXMgYW4gUlRMCiAgICAgZXhwcmVzc2lvbiwgb2JleWluZyB0aGUgc2FtZSBydWxlcyBhcyB0aGUgUlRMIGV4cHJlc3Npb25zIGluCiAgICAgcHJlZGljYXRlIGRlZmluaXRpb25zLiAgKk5vdGUgRGVmaW5pbmcgUHJlZGljYXRlczo6LCBmb3IgZGV0YWlscy4KICAgICBJZiBpdCBldmFsdWF0ZXMgdHJ1ZSwgdGhlIGNvbnN0cmFpbnQgbWF0Y2hlczsgaWYgaXQgZXZhbHVhdGVzCiAgICAgZmFsc2UsIGl0IGRvZXNuJ3QuICBDb25zdHJhaW50IGV4cHJlc3Npb25zIHNob3VsZCBpbmRpY2F0ZSB3aGljaAogICAgIFJUTCBjb2RlcyB0aGV5IG1pZ2h0IG1hdGNoLCBqdXN0IGxpa2UgcHJlZGljYXRlIGV4cHJlc3Npb25zLgoKICAgICAnbWF0Y2hfdGVzdCcgQyBleHByZXNzaW9ucyBoYXZlIGFjY2VzcyB0byB0aGUgZm9sbG93aW5nIHZhcmlhYmxlczoKCiAgICAgT1AKICAgICAgICAgIFRoZSBSVEwgb2JqZWN0IGRlZmluaW5nIHRoZSBvcGVyYW5kLgogICAgIE1PREUKICAgICAgICAgIFRoZSBtYWNoaW5lIG1vZGUgb2YgT1AuCiAgICAgSVZBTAogICAgICAgICAgJ0lOVFZBTCAoT1ApJywgaWYgT1AgaXMgYSAnY29uc3RfaW50Jy4KICAgICBIVkFMCiAgICAgICAgICAnQ09OU1RfRE9VQkxFX0hJR0ggKE9QKScsIGlmIE9QIGlzIGFuIGludGVnZXIgJ2NvbnN0X2RvdWJsZScuCiAgICAgTFZBTAogICAgICAgICAgJ0NPTlNUX0RPVUJMRV9MT1cgKE9QKScsIGlmIE9QIGlzIGFuIGludGVnZXIgJ2NvbnN0X2RvdWJsZScuCiAgICAgUlZBTAogICAgICAgICAgJ0NPTlNUX0RPVUJMRV9SRUFMX1ZBTFVFIChPUCknLCBpZiBPUCBpcyBhIGZsb2F0aW5nLXBvaW50CiAgICAgICAgICAnY29uc3RfZG91YmxlJy4KCiAgICAgVGhlICpWQUwgdmFyaWFibGVzIHNob3VsZCBvbmx5IGJlIHVzZWQgb25jZSBhbm90aGVyIHBpZWNlIG9mIHRoZQogICAgIGV4cHJlc3Npb24gaGFzIHZlcmlmaWVkIHRoYXQgT1AgaXMgdGhlIGFwcHJvcHJpYXRlIGtpbmQgb2YgUlRMCiAgICAgb2JqZWN0LgoKIE1vc3Qgbm9uLXJlZ2lzdGVyIGNvbnN0cmFpbnRzIHNob3VsZCBiZSBkZWZpbmVkIHdpdGgKJ2RlZmluZV9jb25zdHJhaW50Jy4gIFRoZSByZW1haW5pbmcgdHdvIGRlZmluaXRpb24gZXhwcmVzc2lvbnMgYXJlIG9ubHkKYXBwcm9wcmlhdGUgZm9yIGNvbnN0cmFpbnRzIHRoYXQgc2hvdWxkIGJlIGhhbmRsZWQgc3BlY2lhbGx5IGJ5ICdyZWxvYWQnCmlmIHRoZXkgZmFpbCB0byBtYXRjaC4KCiAtLSBNRCBFeHByZXNzaW9uOiBkZWZpbmVfbWVtb3J5X2NvbnN0cmFpbnQgbmFtZSBkb2NzdHJpbmcgZXhwCiAgICAgVXNlIHRoaXMgZXhwcmVzc2lvbiBmb3IgY29uc3RyYWludHMgdGhhdCBtYXRjaCBhIHN1YnNldCBvZiBhbGwKICAgICBtZW1vcnkgb3BlcmFuZHM6IHRoYXQgaXMsICdyZWxvYWQnIGNhbiBtYWtlIHRoZW0gbWF0Y2ggYnkKICAgICBjb252ZXJ0aW5nIHRoZSBvcGVyYW5kIHRvIHRoZSBmb3JtICcobWVtIChyZWcgWCkpJywgd2hlcmUgWCBpcyBhCiAgICAgYmFzZSByZWdpc3RlciAoZnJvbSB0aGUgcmVnaXN0ZXIgY2xhc3Mgc3BlY2lmaWVkIGJ5CiAgICAgJ0JBU0VfUkVHX0NMQVNTJywgKm5vdGUgUmVnaXN0ZXIgQ2xhc3Nlczo6KS4KCiAgICAgRm9yIGV4YW1wbGUsIG9uIHRoZSBTLzM5MCwgc29tZSBpbnN0cnVjdGlvbnMgZG8gbm90IGFjY2VwdAogICAgIGFyYml0cmFyeSBtZW1vcnkgcmVmZXJlbmNlcywgYnV0IG9ubHkgdGhvc2UgdGhhdCBkbyBub3QgbWFrZSB1c2Ugb2YKICAgICBhbiBpbmRleCByZWdpc3Rlci4gIFRoZSBjb25zdHJhaW50IGxldHRlciAnUScgaXMgZGVmaW5lZCB0bwogICAgIHJlcHJlc2VudCBhIG1lbW9yeSBhZGRyZXNzIG9mIHRoaXMgdHlwZS4gIElmICdRJyBpcyBkZWZpbmVkIHdpdGgKICAgICAnZGVmaW5lX21lbW9yeV9jb25zdHJhaW50JywgYSAnUScgY29uc3RyYWludCBjYW4gaGFuZGxlIGFueSBtZW1vcnkKICAgICBvcGVyYW5kLCBiZWNhdXNlICdyZWxvYWQnIGtub3dzIGl0IGNhbiBzaW1wbHkgY29weSB0aGUgbWVtb3J5CiAgICAgYWRkcmVzcyBpbnRvIGEgYmFzZSByZWdpc3RlciBpZiByZXF1aXJlZC4gIFRoaXMgaXMgYW5hbG9nb3VzIHRvIHRoZQogICAgIHdheSBhICdvJyBjb25zdHJhaW50IGNhbiBoYW5kbGUgYW55IG1lbW9yeSBvcGVyYW5kLgoKICAgICBUaGUgc3ludGF4IGFuZCBzZW1hbnRpY3MgYXJlIG90aGVyd2lzZSBpZGVudGljYWwgdG8KICAgICAnZGVmaW5lX2NvbnN0cmFpbnQnLgoKIC0tIE1EIEV4cHJlc3Npb246IGRlZmluZV9hZGRyZXNzX2NvbnN0cmFpbnQgbmFtZSBkb2NzdHJpbmcgZXhwCiAgICAgVXNlIHRoaXMgZXhwcmVzc2lvbiBmb3IgY29uc3RyYWludHMgdGhhdCBtYXRjaCBhIHN1YnNldCBvZiBhbGwKICAgICBhZGRyZXNzIG9wZXJhbmRzOiB0aGF0IGlzLCAncmVsb2FkJyBjYW4gbWFrZSB0aGUgY29uc3RyYWludCBtYXRjaAogICAgIGJ5IGNvbnZlcnRpbmcgdGhlIG9wZXJhbmQgdG8gdGhlIGZvcm0gJyhyZWcgWCknLCBhZ2FpbiB3aXRoIFggYQogICAgIGJhc2UgcmVnaXN0ZXIuCgogICAgIENvbnN0cmFpbnRzIGRlZmluZWQgd2l0aCAnZGVmaW5lX2FkZHJlc3NfY29uc3RyYWludCcgY2FuIG9ubHkgYmUKICAgICB1c2VkIHdpdGggdGhlICdhZGRyZXNzX29wZXJhbmQnIHByZWRpY2F0ZSwgb3IgbWFjaGluZS1zcGVjaWZpYwogICAgIHByZWRpY2F0ZXMgdGhhdCB3b3JrIHRoZSBzYW1lIHdheS4gIFRoZXkgYXJlIHRyZWF0ZWQgYW5hbG9nb3VzbHkgdG8KICAgICB0aGUgZ2VuZXJpYyAncCcgY29uc3RyYWludC4KCiAgICAgVGhlIHN5bnRheCBhbmQgc2VtYW50aWNzIGFyZSBvdGhlcndpc2UgaWRlbnRpY2FsIHRvCiAgICAgJ2RlZmluZV9jb25zdHJhaW50Jy4KCiBGb3IgaGlzdG9yaWNhbCByZWFzb25zLCBuYW1lcyBiZWdpbm5pbmcgd2l0aCB0aGUgbGV0dGVycyAnRyBIJyBhcmUKcmVzZXJ2ZWQgZm9yIGNvbnN0cmFpbnRzIHRoYXQgbWF0Y2ggb25seSAnY29uc3RfZG91YmxlJ3MsIGFuZCBuYW1lcwpiZWdpbm5pbmcgd2l0aCB0aGUgbGV0dGVycyAnSSBKIEsgTCBNIE4gTyBQJyBhcmUgcmVzZXJ2ZWQgZm9yCmNvbnN0cmFpbnRzIHRoYXQgbWF0Y2ggb25seSAnY29uc3RfaW50J3MuICBUaGlzIG1heSBjaGFuZ2UgaW4gdGhlCmZ1dHVyZS4gIEZvciB0aGUgdGltZSBiZWluZywgY29uc3RyYWludHMgd2l0aCB0aGVzZSBuYW1lcyBtdXN0IGJlCndyaXR0ZW4gaW4gYSBzdHlsaXplZCBmb3JtLCBzbyB0aGF0ICdnZW5wcmVkcycgY2FuIHRlbGwgeW91IGRpZCBpdApjb3JyZWN0bHk6CgogICAgIChkZWZpbmVfY29uc3RyYWludCAiW0dISUpLTE1OT1BdLi4uIgogICAgICAgIkRPQy4uLiIKICAgICAgIChhbmQgKG1hdGNoX2NvZGUgImNvbnN0X2ludCIpICA7ICdjb25zdF9kb3VibGUnIGZvciBHL0gKICAgICAgICAgICAgQ09ORElUSU9OLi4uKSkgICAgICAgICAgICA7IHVzdWFsbHkgYSAnbWF0Y2hfdGVzdCcKCiBJdCBpcyBmaW5lIHRvIHVzZSBuYW1lcyBiZWdpbm5pbmcgd2l0aCBvdGhlciBsZXR0ZXJzIGZvciBjb25zdHJhaW50cwp0aGF0IG1hdGNoICdjb25zdF9kb3VibGUncyBvciAnY29uc3RfaW50J3MuCgogRWFjaCBkb2NzdHJpbmcgaW4gYSBjb25zdHJhaW50IGRlZmluaXRpb24gc2hvdWxkIGJlIG9uZSBvciBtb3JlCmNvbXBsZXRlIHNlbnRlbmNlcywgbWFya2VkIHVwIGluIFRleGluZm8gZm9ybWF0LiAgX1RoZXkgYXJlIGN1cnJlbnRseQp1bnVzZWQuXyAgSW4gdGhlIGZ1dHVyZSB0aGV5IHdpbGwgYmUgY29waWVkIGludG8gdGhlIEdDQyBtYW51YWwsIGluCipub3RlIE1hY2hpbmUgQ29uc3RyYWludHM6OiwgcmVwbGFjaW5nIHRoZSBoYW5kLW1haW50YWluZWQgdGFibGVzCmN1cnJlbnRseSBmb3VuZCBpbiB0aGF0IHNlY3Rpb24uICBBbHNvLCBpbiB0aGUgZnV0dXJlIHRoZSBjb21waWxlciBtYXkKdXNlIHRoaXMgdG8gZ2l2ZSBtb3JlIGhlbHBmdWwgZGlhZ25vc3RpY3Mgd2hlbiBwb29yIGNob2ljZSBvZiAnYXNtJwpjb25zdHJhaW50cyBjYXVzZXMgYSByZWxvYWQgZmFpbHVyZS4KCiBJZiB5b3UgcHV0IHRoZSBwc2V1ZG8tVGV4aW5mbyBkaXJlY3RpdmUgJ0BpbnRlcm5hbCcgYXQgdGhlIGJlZ2lubmluZyBvZgphIGRvY3N0cmluZywgdGhlbiAoaW4gdGhlIGZ1dHVyZSkgaXQgd2lsbCBhcHBlYXIgb25seSBpbiB0aGUgaW50ZXJuYWxzCm1hbnVhbCdzIHZlcnNpb24gb2YgdGhlIG1hY2hpbmUtc3BlY2lmaWMgY29uc3RyYWludCB0YWJsZXMuICBVc2UgdGhpcwpmb3IgY29uc3RyYWludHMgdGhhdCBzaG91bGQgbm90IGFwcGVhciBpbiAnYXNtJyBzdGF0ZW1lbnRzLgoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IEMgQ29uc3RyYWludCBJbnRlcmZhY2UsICBQcmV2OiBEZWZpbmUgQ29uc3RyYWludHMsICBVcDogQ29uc3RyYWludHMKCjE0LjguNyBUZXN0aW5nIGNvbnN0cmFpbnRzIGZyb20gQwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCkl0IGlzIG9jY2FzaW9uYWxseSB1c2VmdWwgdG8gdGVzdCBhIGNvbnN0cmFpbnQgZnJvbSBDIGNvZGUgcmF0aGVyIHRoYW4KaW1wbGljaXRseSB2aWEgdGhlIGNvbnN0cmFpbnQgc3RyaW5nIGluIGEgJ21hdGNoX29wZXJhbmQnLiAgVGhlCmdlbmVyYXRlZCBmaWxlICd0bV9wLmgnIGRlY2xhcmVzIGEgZmV3IGludGVyZmFjZXMgZm9yIHdvcmtpbmcgd2l0aAptYWNoaW5lLXNwZWNpZmljIGNvbnN0cmFpbnRzLiAgTm9uZSBvZiB0aGVzZSBpbnRlcmZhY2VzIHdvcmsgd2l0aCB0aGUKZ2VuZXJpYyBjb25zdHJhaW50cyBkZXNjcmliZWQgaW4gKm5vdGUgU2ltcGxlIENvbnN0cmFpbnRzOjouICBUaGlzIG1heQpjaGFuZ2UgaW4gdGhlIGZ1dHVyZS4KCiAqV2FybmluZzoqICd0bV9wLmgnIG1heSBkZWNsYXJlIG90aGVyIGZ1bmN0aW9ucyB0aGF0IG9wZXJhdGUgb24KY29uc3RyYWludHMsIGJlc2lkZXMgdGhlIG9uZXMgZG9jdW1lbnRlZCBoZXJlLiAgRG8gbm90IHVzZSB0aG9zZQpmdW5jdGlvbnMgZnJvbSBtYWNoaW5lLWRlcGVuZGVudCBjb2RlLiAgVGhleSBleGlzdCB0byBpbXBsZW1lbnQgdGhlIG9sZApjb25zdHJhaW50IGludGVyZmFjZSB0aGF0IG1hY2hpbmUtaW5kZXBlbmRlbnQgY29tcG9uZW50cyBvZiB0aGUgY29tcGlsZXIKc3RpbGwgZXhwZWN0LiAgVGhleSB3aWxsIGNoYW5nZSBvciBkaXNhcHBlYXIgaW4gdGhlIGZ1dHVyZS4KCiBTb21lIHZhbGlkIGNvbnN0cmFpbnQgbmFtZXMgYXJlIG5vdCB2YWxpZCBDIGlkZW50aWZpZXJzLCBzbyB0aGVyZSBpcyBhCm1hbmdsaW5nIHNjaGVtZSBmb3IgcmVmZXJyaW5nIHRvIHRoZW0gZnJvbSBDLiAgQ29uc3RyYWludCBuYW1lcyB0aGF0IGRvCm5vdCBjb250YWluIGFuZ2xlIGJyYWNrZXRzIG9yIHVuZGVyc2NvcmVzIGFyZSBsZWZ0IHVuY2hhbmdlZC4KVW5kZXJzY29yZXMgYXJlIGRvdWJsZWQsIGVhY2ggJzwnIGlzIHJlcGxhY2VkIHdpdGggJ19sJywgYW5kIGVhY2ggJz4nCndpdGggJ19nJy4gIEhlcmUgYXJlIHNvbWUgZXhhbXBsZXM6CgogICAgICpPcmlnaW5hbCogKk1hbmdsZWQqICAKICAgICB4ICAgICAgICAgIHggICAgICAgCiAgICAgUDQyeCAgICAgICBQNDJ4ICAgIAogICAgIFA0X3ggICAgICAgUDRfX3ggICAKICAgICBQND54ICAgICAgIFA0X2d4ICAgCiAgICAgUDQ+PiAgICAgICBQNF9nX2cgIAogICAgIFA0X2c+ICAgICAgUDRfX2dfZyAKCiBUaHJvdWdob3V0IHRoaXMgc2VjdGlvbiwgdGhlIHZhcmlhYmxlIEMgaXMgZWl0aGVyIGEgY29uc3RyYWludCBpbiB0aGUKYWJzdHJhY3Qgc2Vuc2UsIG9yIGEgY29uc3RhbnQgZnJvbSAnZW51bSBjb25zdHJhaW50X251bSc7IHRoZSB2YXJpYWJsZSBNCmlzIGEgbWFuZ2xlZCBjb25zdHJhaW50IG5hbWUgKHVzdWFsbHkgYXMgcGFydCBvZiBhIGxhcmdlciBpZGVudGlmaWVyKS4KCiAtLSBFbnVtOiBjb25zdHJhaW50X251bQogICAgIEZvciBlYWNoIG1hY2hpbmUtc3BlY2lmaWMgY29uc3RyYWludCwgdGhlcmUgaXMgYSBjb3JyZXNwb25kaW5nCiAgICAgZW51bWVyYXRpb24gY29uc3RhbnQ6ICdDT05TVFJBSU5UXycgcGx1cyB0aGUgbWFuZ2xlZCBuYW1lIG9mIHRoZQogICAgIGNvbnN0cmFpbnQuICBGdW5jdGlvbnMgdGhhdCB0YWtlIGFuICdlbnVtIGNvbnN0cmFpbnRfbnVtJyBhcyBhbgogICAgIGFyZ3VtZW50IGV4cGVjdCBvbmUgb2YgdGhlc2UgY29uc3RhbnRzLgoKICAgICBNYWNoaW5lLWluZGVwZW5kZW50IGNvbnN0cmFpbnRzIGRvIG5vdCBoYXZlIGFzc29jaWF0ZWQgY29uc3RhbnRzLgogICAgIFRoaXMgbWF5IGNoYW5nZSBpbiB0aGUgZnV0dXJlLgoKIC0tIEZ1bmN0aW9uOiBpbmxpbmUgYm9vbCBzYXRpc2ZpZXNfY29uc3RyYWludF8gTSAocnR4IEVYUCkKICAgICBGb3IgZWFjaCBtYWNoaW5lLXNwZWNpZmljLCBub24tcmVnaXN0ZXIgY29uc3RyYWludCBNLCB0aGVyZSBpcyBvbmUKICAgICBvZiB0aGVzZSBmdW5jdGlvbnM7IGl0IHJldHVybnMgJ3RydWUnIGlmIEVYUCBzYXRpc2ZpZXMgdGhlCiAgICAgY29uc3RyYWludC4gIFRoZXNlIGZ1bmN0aW9ucyBhcmUgb25seSB2aXNpYmxlIGlmICdydGwuaCcgd2FzCiAgICAgaW5jbHVkZWQgYmVmb3JlICd0bV9wLmgnLgoKIC0tIEZ1bmN0aW9uOiBib29sIGNvbnN0cmFpbnRfc2F0aXNmaWVkX3AgKHJ0eCBFWFAsIGVudW0gY29uc3RyYWludF9udW0KICAgICAgICAgIEMpCiAgICAgTGlrZSB0aGUgJ3NhdGlzZmllc19jb25zdHJhaW50X00nIGZ1bmN0aW9ucywgYnV0IHRoZSBjb25zdHJhaW50IHRvCiAgICAgdGVzdCBpcyBnaXZlbiBhcyBhbiBhcmd1bWVudCwgQy4gIElmIEMgc3BlY2lmaWVzIGEgcmVnaXN0ZXIKICAgICBjb25zdHJhaW50LCB0aGlzIGZ1bmN0aW9uIHdpbGwgYWx3YXlzIHJldHVybiAnZmFsc2UnLgoKIC0tIEZ1bmN0aW9uOiBlbnVtIHJlZ19jbGFzcyByZWdjbGFzc19mb3JfY29uc3RyYWludCAoZW51bQogICAgICAgICAgY29uc3RyYWludF9udW0gQykKICAgICBSZXR1cm5zIHRoZSByZWdpc3RlciBjbGFzcyBhc3NvY2lhdGVkIHdpdGggQy4gIElmIEMgaXMgbm90IGEKICAgICByZWdpc3RlciBjb25zdHJhaW50LCBvciB0aG9zZSByZWdpc3RlcnMgYXJlIG5vdCBhdmFpbGFibGUgZm9yIHRoZQogICAgIGN1cnJlbnRseSBzZWxlY3RlZCBzdWJ0YXJnZXQsIHJldHVybnMgJ05PX1JFR1MnLgoKIEhlcmUgaXMgYW4gZXhhbXBsZSB1c2Ugb2YgJ3NhdGlzZmllc19jb25zdHJhaW50X00nLiAgSW4gcGVlcGhvbGUKb3B0aW1pemF0aW9ucyAoKm5vdGUgUGVlcGhvbGUgRGVmaW5pdGlvbnM6OiksIG9wZXJhbmQgY29uc3RyYWludCBzdHJpbmdzCmFyZSBpZ25vcmVkLCBzbyBpZiB0aGVyZSBhcmUgcmVsZXZhbnQgY29uc3RyYWludHMsIHRoZXkgbXVzdCBiZSB0ZXN0ZWQKaW4gdGhlIEMgY29uZGl0aW9uLiAgSW4gdGhlIGV4YW1wbGUsIHRoZSBvcHRpbWl6YXRpb24gaXMgYXBwbGllZCBpZgpvcGVyYW5kIDIgZG9lcyBfbm90XyBzYXRpc2Z5IHRoZSAnSycgY29uc3RyYWludC4gIChUaGlzIGlzIGEgc2ltcGxpZmllZAp2ZXJzaW9uIG9mIGEgcGVlcGhvbGUgZGVmaW5pdGlvbiBmcm9tIHRoZSBpMzg2IG1hY2hpbmUgZGVzY3JpcHRpb24uKQoKICAgICAoZGVmaW5lX3BlZXBob2xlMgogICAgICAgWyhtYXRjaF9zY3JhdGNoOlNJIDMgInIiKQogICAgICAgIChzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIiIpCiAgICAgCShtdWx0OlNJIChtYXRjaF9vcGVyYW5kOlNJIDEgIm1lbW9yeV9vcGVyYW5kIiAiIikKICAgICAJCSAobWF0Y2hfb3BlcmFuZDpTSSAyICJpbW1lZGlhdGVfb3BlcmFuZCIgIiIpKSldCgogICAgICAgIiFzYXRpc2ZpZXNfY29uc3RyYWludF9LIChvcGVyYW5kc1syXSkiCgogICAgICAgWyhzZXQgKG1hdGNoX2R1cCAzKSAobWF0Y2hfZHVwIDEpKQogICAgICAgIChzZXQgKG1hdGNoX2R1cCAwKSAobXVsdDpTSSAobWF0Y2hfZHVwIDMpIChtYXRjaF9kdXAgMikpKV0KCiAgICAgICAiIikKCh8KRmlsZTogZ2NjaW50LmluZm8sICBOb2RlOiBTdGFuZGFyZCBOYW1lcywgIE5leHQ6IFBhdHRlcm4gT3JkZXJpbmcsICBQcmV2OiBDb25zdHJhaW50cywgIFVwOiBNYWNoaW5lIERlc2MKCjE0LjkgU3RhbmRhcmQgUGF0dGVybiBOYW1lcyBGb3IgR2VuZXJhdGlvbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCkhlcmUgaXMgYSB0YWJsZSBvZiB0aGUgaW5zdHJ1Y3Rpb24gbmFtZXMgdGhhdCBhcmUgbWVhbmluZ2Z1bCBpbiB0aGUgUlRMCmdlbmVyYXRpb24gcGFzcyBvZiB0aGUgY29tcGlsZXIuICBHaXZpbmcgb25lIG9mIHRoZXNlIG5hbWVzIHRvIGFuCmluc3RydWN0aW9uIHBhdHRlcm4gdGVsbHMgdGhlIFJUTCBnZW5lcmF0aW9uIHBhc3MgdGhhdCBpdCBjYW4gdXNlIHRoZQpwYXR0ZXJuIHRvIGFjY29tcGxpc2ggYSBjZXJ0YWluIHRhc2suCgonbW92TScKICAgICBIZXJlIE0gc3RhbmRzIGZvciBhIHR3by1sZXR0ZXIgbWFjaGluZSBtb2RlIG5hbWUsIGluIGxvd2VyY2FzZS4KICAgICBUaGlzIGluc3RydWN0aW9uIHBhdHRlcm4gbW92ZXMgZGF0YSB3aXRoIHRoYXQgbWFjaGluZSBtb2RlIGZyb20KICAgICBvcGVyYW5kIDEgdG8gb3BlcmFuZCAwLiAgRm9yIGV4YW1wbGUsICdtb3ZzaScgbW92ZXMgZnVsbC13b3JkIGRhdGEuCgogICAgIElmIG9wZXJhbmQgMCBpcyBhICdzdWJyZWcnIHdpdGggbW9kZSBNIG9mIGEgcmVnaXN0ZXIgd2hvc2Ugb3duIG1vZGUKICAgICBpcyB3aWRlciB0aGFuIE0sIHRoZSBlZmZlY3Qgb2YgdGhpcyBpbnN0cnVjdGlvbiBpcyB0byBzdG9yZSB0aGUKICAgICBzcGVjaWZpZWQgdmFsdWUgaW4gdGhlIHBhcnQgb2YgdGhlIHJlZ2lzdGVyIHRoYXQgY29ycmVzcG9uZHMgdG8KICAgICBtb2RlIE0uICBCaXRzIG91dHNpZGUgb2YgTSwgYnV0IHdoaWNoIGFyZSB3aXRoaW4gdGhlIHNhbWUgdGFyZ2V0CiAgICAgd29yZCBhcyB0aGUgJ3N1YnJlZycgYXJlIHVuZGVmaW5lZC4gIEJpdHMgd2hpY2ggYXJlIG91dHNpZGUgdGhlCiAgICAgdGFyZ2V0IHdvcmQgYXJlIGxlZnQgdW5jaGFuZ2VkLgoKICAgICBUaGlzIGNsYXNzIG9mIHBhdHRlcm5zIGlzIHNwZWNpYWwgaW4gc2V2ZXJhbCB3YXlzLiAgRmlyc3Qgb2YgYWxsLAogICAgIGVhY2ggb2YgdGhlc2UgbmFtZXMgdXAgdG8gYW5kIGluY2x1ZGluZyBmdWxsIHdvcmQgc2l6ZSBfbXVzdF8gYmUKICAgICBkZWZpbmVkLCBiZWNhdXNlIHRoZXJlIGlzIG5vIG90aGVyIHdheSB0byBjb3B5IGEgZGF0dW0gZnJvbSBvbmUKICAgICBwbGFjZSB0byBhbm90aGVyLiAgSWYgdGhlcmUgYXJlIHBhdHRlcm5zIGFjY2VwdGluZyBvcGVyYW5kcyBpbgogICAgIGxhcmdlciBtb2RlcywgJ21vdk0nIG11c3QgYmUgZGVmaW5lZCBmb3IgaW50ZWdlciBtb2RlcyBvZiB0aG9zZQogICAgIHNpemVzLgoKICAgICBTZWNvbmQsIHRoZXNlIHBhdHRlcm5zIGFyZSBub3QgdXNlZCBzb2xlbHkgaW4gdGhlIFJUTCBnZW5lcmF0aW9uCiAgICAgcGFzcy4gIEV2ZW4gdGhlIHJlbG9hZCBwYXNzIGNhbiBnZW5lcmF0ZSBtb3ZlIGluc25zIHRvIGNvcHkgdmFsdWVzCiAgICAgZnJvbSBzdGFjayBzbG90cyBpbnRvIHRlbXBvcmFyeSByZWdpc3RlcnMuICBXaGVuIGl0IGRvZXMgc28sIG9uZSBvZgogICAgIHRoZSBvcGVyYW5kcyBpcyBhIGhhcmQgcmVnaXN0ZXIgYW5kIHRoZSBvdGhlciBpcyBhbiBvcGVyYW5kIHRoYXQKICAgICBjYW4gbmVlZCB0byBiZSByZWxvYWRlZCBpbnRvIGEgcmVnaXN0ZXIuCgogICAgIFRoZXJlZm9yZSwgd2hlbiBnaXZlbiBzdWNoIGEgcGFpciBvZiBvcGVyYW5kcywgdGhlIHBhdHRlcm4gbXVzdAogICAgIGdlbmVyYXRlIFJUTCB3aGljaCBuZWVkcyBubyByZWxvYWRpbmcgYW5kIG5lZWRzIG5vIHRlbXBvcmFyeQogICAgIHJlZ2lzdGVycy0tbm8gcmVnaXN0ZXJzIG90aGVyIHRoYW4gdGhlIG9wZXJhbmRzLiAgRm9yIGV4YW1wbGUsIGlmCiAgICAgeW91IHN1cHBvcnQgdGhlIHBhdHRlcm4gd2l0aCBhICdkZWZpbmVfZXhwYW5kJywgdGhlbiBpbiBzdWNoIGEgY2FzZQogICAgIHRoZSAnZGVmaW5lX2V4cGFuZCcgbXVzdG4ndCBjYWxsICdmb3JjZV9yZWcnIG9yIGFueSBvdGhlciBzdWNoCiAgICAgZnVuY3Rpb24gd2hpY2ggbWlnaHQgZ2VuZXJhdGUgbmV3IHBzZXVkbyByZWdpc3RlcnMuCgogICAgIFRoaXMgcmVxdWlyZW1lbnQgZXhpc3RzIGV2ZW4gZm9yIHN1YndvcmQgbW9kZXMgb24gYSBSSVNDIG1hY2hpbmUKICAgICB3aGVyZSBmZXRjaGluZyB0aG9zZSBtb2RlcyBmcm9tIG1lbW9yeSBub3JtYWxseSByZXF1aXJlcyBzZXZlcmFsCiAgICAgaW5zbnMgYW5kIHNvbWUgdGVtcG9yYXJ5IHJlZ2lzdGVycy4KCiAgICAgRHVyaW5nIHJlbG9hZCBhIG1lbW9yeSByZWZlcmVuY2Ugd2l0aCBhbiBpbnZhbGlkIGFkZHJlc3MgbWF5IGJlCiAgICAgcGFzc2VkIGFzIGFuIG9wZXJhbmQuICBTdWNoIGFuIGFkZHJlc3Mgd2lsbCBiZSByZXBsYWNlZCB3aXRoIGEKICAgICB2YWxpZCBhZGRyZXNzIGxhdGVyIGluIHRoZSByZWxvYWQgcGFzcy4gIEluIHRoaXMgY2FzZSwgbm90aGluZyBtYXkKICAgICBiZSBkb25lIHdpdGggdGhlIGFkZHJlc3MgZXhjZXB0IHRvIHVzZSBpdCBhcyBpdCBzdGFuZHMuICBJZiBpdCBpcwogICAgIGNvcGllZCwgaXQgd2lsbCBub3QgYmUgcmVwbGFjZWQgd2l0aCBhIHZhbGlkIGFkZHJlc3MuICBObyBhdHRlbXB0CiAgICAgc2hvdWxkIGJlIG1hZGUgdG8gbWFrZSBzdWNoIGFuIGFkZHJlc3MgaW50byBhIHZhbGlkIGFkZHJlc3MgYW5kIG5vCiAgICAgcm91dGluZSAoc3VjaCBhcyAnY2hhbmdlX2FkZHJlc3MnKSB0aGF0IHdpbGwgZG8gc28gbWF5IGJlIGNhbGxlZC4KICAgICBOb3RlIHRoYXQgJ2dlbmVyYWxfb3BlcmFuZCcgd2lsbCBmYWlsIHdoZW4gYXBwbGllZCB0byBzdWNoIGFuCiAgICAgYWRkcmVzcy4KCiAgICAgVGhlIGdsb2JhbCB2YXJpYWJsZSAncmVsb2FkX2luX3Byb2dyZXNzJyAod2hpY2ggbXVzdCBiZSBleHBsaWNpdGx5CiAgICAgZGVjbGFyZWQgaWYgcmVxdWlyZWQpIGNhbiBiZSB1c2VkIHRvIGRldGVybWluZSB3aGV0aGVyIHN1Y2ggc3BlY2lhbAogICAgIGhhbmRsaW5nIGlzIHJlcXVpcmVkLgoKICAgICBUaGUgdmFyaWV0eSBvZiBvcGVyYW5kcyB0aGF0IGhhdmUgcmVsb2FkcyBkZXBlbmRzIG9uIHRoZSByZXN0IG9mCiAgICAgdGhlIG1hY2hpbmUgZGVzY3JpcHRpb24sIGJ1dCB0eXBpY2FsbHkgb24gYSBSSVNDIG1hY2hpbmUgdGhlc2UgY2FuCiAgICAgb25seSBiZSBwc2V1ZG8gcmVnaXN0ZXJzIHRoYXQgZGlkIG5vdCBnZXQgaGFyZCByZWdpc3RlcnMsIHdoaWxlIG9uCiAgICAgb3RoZXIgbWFjaGluZXMgZXhwbGljaXQgbWVtb3J5IHJlZmVyZW5jZXMgd2lsbCBnZXQgb3B0aW9uYWwKICAgICByZWxvYWRzLgoKICAgICBJZiBhIHNjcmF0Y2ggcmVnaXN0ZXIgaXMgcmVxdWlyZWQgdG8gbW92ZSBhbiBvYmplY3QgdG8gb3IgZnJvbQogICAgIG1lbW9yeSwgaXQgY2FuIGJlIGFsbG9jYXRlZCB1c2luZyAnZ2VuX3JlZ19ydHgnIHByaW9yIHRvIGxpZmUKICAgICBhbmFseXNpcy4KCiAgICAgSWYgdGhlcmUgYXJlIGNhc2VzIHdoaWNoIG5lZWQgc2NyYXRjaCByZWdpc3RlcnMgZHVyaW5nIG9yIGFmdGVyCiAgICAgcmVsb2FkLCB5b3UgbXVzdCBwcm92aWRlIGFuIGFwcHJvcHJpYXRlIHNlY29uZGFyeV9yZWxvYWQgdGFyZ2V0CiAgICAgaG9vay4KCiAgICAgVGhlIG1hY3JvICdjYW5fY3JlYXRlX3BzZXVkb19wJyBjYW4gYmUgdXNlZCB0byBkZXRlcm1pbmUgaWYgaXQgaXMKICAgICB1bnNhZmUgdG8gY3JlYXRlIG5ldyBwc2V1ZG8gcmVnaXN0ZXJzLiAgSWYgdGhpcyB2YXJpYWJsZSBpcwogICAgIG5vbnplcm8sIHRoZW4gaXQgaXMgdW5zYWZlIHRvIGNhbGwgJ2dlbl9yZWdfcnR4JyB0byBhbGxvY2F0ZSBhIG5ldwogICAgIHBzZXVkby4KCiAgICAgVGhlIGNvbnN0cmFpbnRzIG9uIGEgJ21vdk0nIG11c3QgcGVybWl0IG1vdmluZyBhbnkgaGFyZCByZWdpc3RlciB0bwogICAgIGFueSBvdGhlciBoYXJkIHJlZ2lzdGVyIHByb3ZpZGVkIHRoYXQgJ0hBUkRfUkVHTk9fTU9ERV9PSycgcGVybWl0cwogICAgIG1vZGUgTSBpbiBib3RoIHJlZ2lzdGVycyBhbmQgJ1JFR0lTVEVSX01PVkVfQ09TVCcgYXBwbGllZCB0byB0aGVpcgogICAgIGNsYXNzZXMgcmV0dXJucyBhIHZhbHVlIG9mIDIuCgogICAgIEl0IGlzIG9ibGlnYXRvcnkgdG8gc3VwcG9ydCBmbG9hdGluZyBwb2ludCAnbW92TScgaW5zdHJ1Y3Rpb25zIGludG8KICAgICBhbmQgb3V0IG9mIGFueSByZWdpc3RlcnMgdGhhdCBjYW4gaG9sZCBmaXhlZCBwb2ludCB2YWx1ZXMsIGJlY2F1c2UKICAgICB1bmlvbnMgYW5kIHN0cnVjdHVyZXMgKHdoaWNoIGhhdmUgbW9kZXMgJ1NJbW9kZScgb3IgJ0RJbW9kZScpIGNhbgogICAgIGJlIGluIHRob3NlIHJlZ2lzdGVycyBhbmQgdGhleSBtYXkgaGF2ZSBmbG9hdGluZyBwb2ludCBtZW1iZXJzLgoKICAgICBUaGVyZSBtYXkgYWxzbyBiZSBhIG5lZWQgdG8gc3VwcG9ydCBmaXhlZCBwb2ludCAnbW92TScgaW5zdHJ1Y3Rpb25zCiAgICAgaW4gYW5kIG91dCBvZiBmbG9hdGluZyBwb2ludCByZWdpc3RlcnMuICBVbmZvcnR1bmF0ZWx5LCBJIGhhdmUKICAgICBmb3Jnb3R0ZW4gd2h5IHRoaXMgd2FzIHNvLCBhbmQgSSBkb24ndCBrbm93IHdoZXRoZXIgaXQgaXMgc3RpbGwKICAgICB0cnVlLiAgSWYgJ0hBUkRfUkVHTk9fTU9ERV9PSycgcmVqZWN0cyBmaXhlZCBwb2ludCB2YWx1ZXMgaW4KICAgICBmbG9hdGluZyBwb2ludCByZWdpc3RlcnMsIHRoZW4gdGhlIGNvbnN0cmFpbnRzIG9mIHRoZSBmaXhlZCBwb2ludAogICAgICdtb3ZNJyBpbnN0cnVjdGlvbnMgbXVzdCBiZSBkZXNpZ25lZCB0byBhdm9pZCBldmVyIHRyeWluZyB0byByZWxvYWQKICAgICBpbnRvIGEgZmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXIuCgoncmVsb2FkX2luTScKJ3JlbG9hZF9vdXRNJwogICAgIFRoZXNlIG5hbWVkIHBhdHRlcm5zIGhhdmUgYmVlbiBvYnNvbGV0ZWQgYnkgdGhlIHRhcmdldCBob29rCiAgICAgJ3NlY29uZGFyeV9yZWxvYWQnLgoKICAgICBMaWtlICdtb3ZNJywgYnV0IHVzZWQgd2hlbiBhIHNjcmF0Y2ggcmVnaXN0ZXIgaXMgcmVxdWlyZWQgdG8gbW92ZQogICAgIGJldHdlZW4gb3BlcmFuZCAwIGFuZCBvcGVyYW5kIDEuICBPcGVyYW5kIDIgZGVzY3JpYmVzIHRoZSBzY3JhdGNoCiAgICAgcmVnaXN0ZXIuICBTZWUgdGhlIGRpc2N1c3Npb24gb2YgdGhlICdTRUNPTkRBUllfUkVMT0FEX0NMQVNTJyBtYWNybwogICAgIGluICpub3RlIFJlZ2lzdGVyIENsYXNzZXM6Oi4KCiAgICAgVGhlcmUgYXJlIHNwZWNpYWwgcmVzdHJpY3Rpb25zIG9uIHRoZSBmb3JtIG9mIHRoZSAnbWF0Y2hfb3BlcmFuZCdzCiAgICAgdXNlZCBpbiB0aGVzZSBwYXR0ZXJucy4gIEZpcnN0LCBvbmx5IHRoZSBwcmVkaWNhdGUgZm9yIHRoZSByZWxvYWQKICAgICBvcGVyYW5kIGlzIGV4YW1pbmVkLCBpLmUuLCAncmVsb2FkX2luJyBleGFtaW5lcyBvcGVyYW5kIDEsIGJ1dCBub3QKICAgICB0aGUgcHJlZGljYXRlcyBmb3Igb3BlcmFuZCAwIG9yIDIuICBTZWNvbmQsIHRoZXJlIG1heSBiZSBvbmx5IG9uZQogICAgIGFsdGVybmF0aXZlIGluIHRoZSBjb25zdHJhaW50cy4gIFRoaXJkLCBvbmx5IGEgc2luZ2xlIHJlZ2lzdGVyCiAgICAgY2xhc3MgbGV0dGVyIG1heSBiZSB1c2VkIGZvciB0aGUgY29uc3RyYWludDsgc3Vic2VxdWVudCBjb25zdHJhaW50CiAgICAgbGV0dGVycyBhcmUgaWdub3JlZC4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIGFuIGVtcHR5IGNvbnN0cmFpbnQKICAgICBzdHJpbmcgbWF0Y2hlcyB0aGUgJ0FMTF9SRUdTJyByZWdpc3RlciBjbGFzcy4gIFRoaXMgbWF5IHJlbGlldmUKICAgICBwb3J0cyBvZiB0aGUgYnVyZGVuIG9mIGRlZmluaW5nIGFuICdBTExfUkVHUycgY29uc3RyYWludCBsZXR0ZXIKICAgICBqdXN0IGZvciB0aGVzZSBwYXR0ZXJucy4KCidtb3ZzdHJpY3RNJwogICAgIExpa2UgJ21vdk0nIGV4Y2VwdCB0aGF0IGlmIG9wZXJhbmQgMCBpcyBhICdzdWJyZWcnIHdpdGggbW9kZSBNIG9mIGEKICAgICByZWdpc3RlciB3aG9zZSBuYXR1cmFsIG1vZGUgaXMgd2lkZXIsIHRoZSAnbW92c3RyaWN0TScgaW5zdHJ1Y3Rpb24KICAgICBpcyBndWFyYW50ZWVkIG5vdCB0byBhbHRlciBhbnkgb2YgdGhlIHJlZ2lzdGVyIGV4Y2VwdCB0aGUgcGFydAogICAgIHdoaWNoIGJlbG9uZ3MgdG8gbW9kZSBNLgoKJ21vdm1pc2FsaWduTScKICAgICBUaGlzIHZhcmlhbnQgb2YgYSBtb3ZlIHBhdHRlcm4gaXMgZGVzaWduZWQgdG8gbG9hZCBvciBzdG9yZSBhIHZhbHVlCiAgICAgZnJvbSBhIG1lbW9yeSBhZGRyZXNzIHRoYXQgaXMgbm90IG5hdHVyYWxseSBhbGlnbmVkIGZvciBpdHMgbW9kZS4KICAgICBGb3IgYSBzdG9yZSwgdGhlIG1lbW9yeSB3aWxsIGJlIGluIG9wZXJhbmQgMDsgZm9yIGEgbG9hZCwgdGhlCiAgICAgbWVtb3J5IHdpbGwgYmUgaW4gb3BlcmFuZCAxLiAgVGhlIG90aGVyIG9wZXJhbmQgaXMgZ3VhcmFudGVlZCBub3QKICAgICB0byBiZSBhIG1lbW9yeSwgc28gdGhhdCBpdCdzIGVhc3kgdG8gdGVsbCB3aGV0aGVyIHRoaXMgaXMgYSBsb2FkIG9yCiAgICAgc3RvcmUuCgogICAgIFRoaXMgcGF0dGVybiBpcyB1c2VkIGJ5IHRoZSBhdXRvdmVjdG9yaXplciwgYW5kIHdoZW4gZXhwYW5kaW5nIGEKICAgICAnTUlTQUxJR05FRF9JTkRJUkVDVF9SRUYnIGV4cHJlc3Npb24uCgonbG9hZF9tdWx0aXBsZScKICAgICBMb2FkIHNldmVyYWwgY29uc2VjdXRpdmUgbWVtb3J5IGxvY2F0aW9ucyBpbnRvIGNvbnNlY3V0aXZlCiAgICAgcmVnaXN0ZXJzLiAgT3BlcmFuZCAwIGlzIHRoZSBmaXJzdCBvZiB0aGUgY29uc2VjdXRpdmUgcmVnaXN0ZXJzLAogICAgIG9wZXJhbmQgMSBpcyB0aGUgZmlyc3QgbWVtb3J5IGxvY2F0aW9uLCBhbmQgb3BlcmFuZCAyIGlzIGEKICAgICBjb25zdGFudDogdGhlIG51bWJlciBvZiBjb25zZWN1dGl2ZSByZWdpc3RlcnMuCgogICAgIERlZmluZSB0aGlzIG9ubHkgaWYgdGhlIHRhcmdldCBtYWNoaW5lIHJlYWxseSBoYXMgc3VjaCBhbgogICAgIGluc3RydWN0aW9uOyBkbyBub3QgZGVmaW5lIHRoaXMgaWYgdGhlIG1vc3QgZWZmaWNpZW50IHdheSBvZgogICAgIGxvYWRpbmcgY29uc2VjdXRpdmUgcmVnaXN0ZXJzIGZyb20gbWVtb3J5IGlzIHRvIGRvIHRoZW0gb25lIGF0IGEKICAgICB0aW1lLgoKICAgICBPbiBzb21lIG1hY2hpbmVzLCB0aGVyZSBhcmUgcmVzdHJpY3Rpb25zIGFzIHRvIHdoaWNoIGNvbnNlY3V0aXZlCiAgICAgcmVnaXN0ZXJzIGNhbiBiZSBzdG9yZWQgaW50byBtZW1vcnksIHN1Y2ggYXMgcGFydGljdWxhciBzdGFydGluZyBvcgogICAgIGVuZGluZyByZWdpc3RlciBudW1iZXJzIG9yIG9ubHkgYSByYW5nZSBvZiB2YWxpZCBjb3VudHMuICBGb3IgdGhvc2UKICAgICBtYWNoaW5lcywgdXNlIGEgJ2RlZmluZV9leHBhbmQnICgqbm90ZSBFeHBhbmRlciBEZWZpbml0aW9uczo6KSBhbmQKICAgICBtYWtlIHRoZSBwYXR0ZXJuIGZhaWwgaWYgdGhlIHJlc3RyaWN0aW9ucyBhcmUgbm90IG1ldC4KCiAgICAgV3JpdGUgdGhlIGdlbmVyYXRlZCBpbnNuIGFzIGEgJ3BhcmFsbGVsJyB3aXRoIGVsZW1lbnRzIGJlaW5nIGEKICAgICAnc2V0JyBvZiBvbmUgcmVnaXN0ZXIgZnJvbSB0aGUgYXBwcm9wcmlhdGUgbWVtb3J5IGxvY2F0aW9uICh5b3UgbWF5CiAgICAgYWxzbyBuZWVkICd1c2UnIG9yICdjbG9iYmVyJyBlbGVtZW50cykuICBVc2UgYSAnbWF0Y2hfcGFyYWxsZWwnCiAgICAgKCpub3RlIFJUTCBUZW1wbGF0ZTo6KSB0byByZWNvZ25pemUgdGhlIGluc24uICBTZWUgJ3JzNjAwMC5tZCcgZm9yCiAgICAgZXhhbXBsZXMgb2YgdGhlIHVzZSBvZiB0aGlzIGluc24gcGF0dGVybi4KCidzdG9yZV9tdWx0aXBsZScKICAgICBTaW1pbGFyIHRvICdsb2FkX211bHRpcGxlJywgYnV0IHN0b3JlIHNldmVyYWwgY29uc2VjdXRpdmUgcmVnaXN0ZXJzCiAgICAgaW50byBjb25zZWN1dGl2ZSBtZW1vcnkgbG9jYXRpb25zLiAgT3BlcmFuZCAwIGlzIHRoZSBmaXJzdCBvZiB0aGUKICAgICBjb25zZWN1dGl2ZSBtZW1vcnkgbG9jYXRpb25zLCBvcGVyYW5kIDEgaXMgdGhlIGZpcnN0IHJlZ2lzdGVyLCBhbmQKICAgICBvcGVyYW5kIDIgaXMgYSBjb25zdGFudDogdGhlIG51bWJlciBvZiBjb25zZWN1dGl2ZSByZWdpc3RlcnMuCgondmVjX3NldE0nCiAgICAgU2V0IGdpdmVuIGZpZWxkIGluIHRoZSB2ZWN0b3IgdmFsdWUuICBPcGVyYW5kIDAgaXMgdGhlIHZlY3RvciB0bwogICAgIG1vZGlmeSwgb3BlcmFuZCAxIGlzIG5ldyB2YWx1ZSBvZiBmaWVsZCBhbmQgb3BlcmFuZCAyIHNwZWNpZnkgdGhlCiAgICAgZmllbGQgaW5kZXguCgondmVjX2V4dHJhY3RNJwogICAgIEV4dHJhY3QgZ2l2ZW4gZmllbGQgZnJvbSB0aGUgdmVjdG9yIHZhbHVlLiAgT3BlcmFuZCAxIGlzIHRoZQogICAgIHZlY3Rvciwgb3BlcmFuZCAyIHNwZWNpZnkgZmllbGQgaW5kZXggYW5kIG9wZXJhbmQgMCBwbGFjZSB0byBzdG9yZQogICAgIHZhbHVlIGludG8uCgondmVjX2V4dHJhY3RfZXZlbk0nCiAgICAgRXh0cmFjdCBldmVuIGVsZW1lbnRzIGZyb20gdGhlIGlucHV0IHZlY3RvcnMgKG9wZXJhbmQgMSBhbmQgb3BlcmFuZAogICAgIDIpLiAgVGhlIGV2ZW4gZWxlbWVudHMgb2Ygb3BlcmFuZCAyIGFyZSBjb25jYXRlbmF0ZWQgdG8gdGhlIGV2ZW4KICAgICBlbGVtZW50cyBvZiBvcGVyYW5kIDEgaW4gdGhlaXIgb3JpZ2luYWwgb3JkZXIuICBUaGUgcmVzdWx0IGlzCiAgICAgc3RvcmVkIGluIG9wZXJhbmQgMC4gIFRoZSBvdXRwdXQgYW5kIGlucHV0IHZlY3RvcnMgc2hvdWxkIGhhdmUgdGhlCiAgICAgc2FtZSBtb2Rlcy4KCid2ZWNfZXh0cmFjdF9vZGRNJwogICAgIEV4dHJhY3Qgb2RkIGVsZW1lbnRzIGZyb20gdGhlIGlucHV0IHZlY3RvcnMgKG9wZXJhbmQgMSBhbmQgb3BlcmFuZAogICAgIDIpLiAgVGhlIG9kZCBlbGVtZW50cyBvZiBvcGVyYW5kIDIgYXJlIGNvbmNhdGVuYXRlZCB0byB0aGUgb2RkCiAgICAgZWxlbWVudHMgb2Ygb3BlcmFuZCAxIGluIHRoZWlyIG9yaWdpbmFsIG9yZGVyLiAgVGhlIHJlc3VsdCBpcwogICAgIHN0b3JlZCBpbiBvcGVyYW5kIDAuICBUaGUgb3V0cHV0IGFuZCBpbnB1dCB2ZWN0b3JzIHNob3VsZCBoYXZlIHRoZQogICAgIHNhbWUgbW9kZXMuCgondmVjX2ludGVybGVhdmVfaGlnaE0nCiAgICAgTWVyZ2UgaGlnaCBlbGVtZW50cyBvZiB0aGUgdHdvIGlucHV0IHZlY3RvcnMgaW50byB0aGUgb3V0cHV0CiAgICAgdmVjdG9yLiAgVGhlIG91dHB1dCBhbmQgaW5wdXQgdmVjdG9ycyBzaG91bGQgaGF2ZSB0aGUgc2FtZSBtb2RlcwogICAgICgnTicgZWxlbWVudHMpLiAgVGhlIGhpZ2ggJ04vMicgZWxlbWVudHMgb2YgdGhlIGZpcnN0IGlucHV0IHZlY3RvcgogICAgIGFyZSBpbnRlcmxlYXZlZCB3aXRoIHRoZSBoaWdoICdOLzInIGVsZW1lbnRzIG9mIHRoZSBzZWNvbmQgaW5wdXQKICAgICB2ZWN0b3IuCgondmVjX2ludGVybGVhdmVfbG93TScKICAgICBNZXJnZSBsb3cgZWxlbWVudHMgb2YgdGhlIHR3byBpbnB1dCB2ZWN0b3JzIGludG8gdGhlIG91dHB1dCB2ZWN0b3IuCiAgICAgVGhlIG91dHB1dCBhbmQgaW5wdXQgdmVjdG9ycyBzaG91bGQgaGF2ZSB0aGUgc2FtZSBtb2RlcyAoJ04nCiAgICAgZWxlbWVudHMpLiAgVGhlIGxvdyAnTi8yJyBlbGVtZW50cyBvZiB0aGUgZmlyc3QgaW5wdXQgdmVjdG9yIGFyZQogICAgIGludGVybGVhdmVkIHdpdGggdGhlIGxvdyAnTi8yJyBlbGVtZW50cyBvZiB0aGUgc2Vjb25kIGlucHV0IHZlY3Rvci4KCid2ZWNfaW5pdE0nCiAgICAgSW5pdGlhbGl6ZSB0aGUgdmVjdG9yIHRvIGdpdmVuIHZhbHVlcy4gIE9wZXJhbmQgMCBpcyB0aGUgdmVjdG9yIHRvCiAgICAgaW5pdGlhbGl6ZSBhbmQgb3BlcmFuZCAxIGlzIHBhcmFsbGVsIGNvbnRhaW5pbmcgdmFsdWVzIGZvcgogICAgIGluZGl2aWR1YWwgZmllbGRzLgoKJ3B1c2hNMScKICAgICBPdXRwdXQgYSBwdXNoIGluc3RydWN0aW9uLiAgT3BlcmFuZCAwIGlzIHZhbHVlIHRvIHB1c2guICBVc2VkIG9ubHkKICAgICB3aGVuICdQVVNIX1JPVU5ESU5HJyBpcyBkZWZpbmVkLiAgRm9yIGhpc3RvcmljYWwgcmVhc29uLCB0aGlzCiAgICAgcGF0dGVybiBtYXkgYmUgbWlzc2luZyBhbmQgaW4gc3VjaCBjYXNlIGFuICdtb3YnIGV4cGFuZGVyIGlzIHVzZWQKICAgICBpbnN0ZWFkLCB3aXRoIGEgJ01FTScgZXhwcmVzc2lvbiBmb3JtaW5nIHRoZSBwdXNoIG9wZXJhdGlvbi4gIFRoZQogICAgICdtb3YnIGV4cGFuZGVyIG1ldGhvZCBpcyBkZXByZWNhdGVkLgoKJ2FkZE0zJwogICAgIEFkZCBvcGVyYW5kIDIgYW5kIG9wZXJhbmQgMSwgc3RvcmluZyB0aGUgcmVzdWx0IGluIG9wZXJhbmQgMC4gIEFsbAogICAgIG9wZXJhbmRzIG11c3QgaGF2ZSBtb2RlIE0uICBUaGlzIGNhbiBiZSB1c2VkIGV2ZW4gb24gdHdvLWFkZHJlc3MKICAgICBtYWNoaW5lcywgYnkgbWVhbnMgb2YgY29uc3RyYWludHMgcmVxdWlyaW5nIG9wZXJhbmRzIDEgYW5kIDAgdG8gYmUKICAgICB0aGUgc2FtZSBsb2NhdGlvbi4KCidzc2FkZE0zJywgJ3VzYWRkTTMnCidzdWJNMycsICdzc3N1Yk0zJywgJ3Vzc3ViTTMnCidtdWxNMycsICdzc211bE0zJywgJ3VzbXVsTTMnCidkaXZNMycsICdzc2Rpdk0zJwondWRpdk0zJywgJ3VzZGl2TTMnCidtb2RNMycsICd1bW9kTTMnCid1bWluTTMnLCAndW1heE0zJwonYW5kTTMnLCAnaW9yTTMnLCAneG9yTTMnCiAgICAgU2ltaWxhciwgZm9yIG90aGVyIGFyaXRobWV0aWMgb3BlcmF0aW9ucy4KCidzbWluTTMnLCAnc21heE0zJwogICAgIFNpZ25lZCBtaW5pbXVtIGFuZCBtYXhpbXVtIG9wZXJhdGlvbnMuICBXaGVuIHVzZWQgd2l0aCBmbG9hdGluZwogICAgIHBvaW50LCBpZiBib3RoIG9wZXJhbmRzIGFyZSB6ZXJvcywgb3IgaWYgZWl0aGVyIG9wZXJhbmQgaXMgJ05hTicsCiAgICAgdGhlbiBpdCBpcyB1bnNwZWNpZmllZCB3aGljaCBvZiB0aGUgdHdvIG9wZXJhbmRzIGlzIHJldHVybmVkIGFzIHRoZQogICAgIHJlc3VsdC4KCidyZWR1Y19zbWluX00nLCAncmVkdWNfc21heF9NJwogICAgIEZpbmQgdGhlIHNpZ25lZCBtaW5pbXVtL21heGltdW0gb2YgdGhlIGVsZW1lbnRzIG9mIGEgdmVjdG9yLiAgVGhlCiAgICAgdmVjdG9yIGlzIG9wZXJhbmQgMSwgYW5kIHRoZSBzY2FsYXIgcmVzdWx0IGlzIHN0b3JlZCBpbiB0aGUgbGVhc3QKICAgICBzaWduaWZpY2FudCBiaXRzIG9mIG9wZXJhbmQgMCAoYWxzbyBhIHZlY3RvcikuICBUaGUgb3V0cHV0IGFuZAogICAgIGlucHV0IHZlY3RvciBzaG91bGQgaGF2ZSB0aGUgc2FtZSBtb2Rlcy4KCidyZWR1Y191bWluX00nLCAncmVkdWNfdW1heF9NJwogICAgIEZpbmQgdGhlIHVuc2lnbmVkIG1pbmltdW0vbWF4aW11bSBvZiB0aGUgZWxlbWVudHMgb2YgYSB2ZWN0b3IuICBUaGUKICAgICB2ZWN0b3IgaXMgb3BlcmFuZCAxLCBhbmQgdGhlIHNjYWxhciByZXN1bHQgaXMgc3RvcmVkIGluIHRoZSBsZWFzdAogICAgIHNpZ25pZmljYW50IGJpdHMgb2Ygb3BlcmFuZCAwIChhbHNvIGEgdmVjdG9yKS4gIFRoZSBvdXRwdXQgYW5kCiAgICAgaW5wdXQgdmVjdG9yIHNob3VsZCBoYXZlIHRoZSBzYW1lIG1vZGVzLgoKJ3JlZHVjX3NwbHVzX00nCiAgICAgQ29tcHV0ZSB0aGUgc3VtIG9mIHRoZSBzaWduZWQgZWxlbWVudHMgb2YgYSB2ZWN0b3IuICBUaGUgdmVjdG9yIGlzCiAgICAgb3BlcmFuZCAxLCBhbmQgdGhlIHNjYWxhciByZXN1bHQgaXMgc3RvcmVkIGluIHRoZSBsZWFzdCBzaWduaWZpY2FudAogICAgIGJpdHMgb2Ygb3BlcmFuZCAwIChhbHNvIGEgdmVjdG9yKS4gIFRoZSBvdXRwdXQgYW5kIGlucHV0IHZlY3RvcgogICAgIHNob3VsZCBoYXZlIHRoZSBzYW1lIG1vZGVzLgoKJ3JlZHVjX3VwbHVzX00nCiAgICAgQ29tcHV0ZSB0aGUgc3VtIG9mIHRoZSB1bnNpZ25lZCBlbGVtZW50cyBvZiBhIHZlY3Rvci4gIFRoZSB2ZWN0b3IKICAgICBpcyBvcGVyYW5kIDEsIGFuZCB0aGUgc2NhbGFyIHJlc3VsdCBpcyBzdG9yZWQgaW4gdGhlIGxlYXN0CiAgICAgc2lnbmlmaWNhbnQgYml0cyBvZiBvcGVyYW5kIDAgKGFsc28gYSB2ZWN0b3IpLiAgVGhlIG91dHB1dCBhbmQKICAgICBpbnB1dCB2ZWN0b3Igc2hvdWxkIGhhdmUgdGhlIHNhbWUgbW9kZXMuCgonc2RvdF9wcm9kTScKJ3Vkb3RfcHJvZE0nCiAgICAgQ29tcHV0ZSB0aGUgc3VtIG9mIHRoZSBwcm9kdWN0cyBvZiB0d28gc2lnbmVkL3Vuc2lnbmVkIGVsZW1lbnRzLgogICAgIE9wZXJhbmQgMSBhbmQgb3BlcmFuZCAyIGFyZSBvZiB0aGUgc2FtZSBtb2RlLiAgVGhlaXIgcHJvZHVjdCwgd2hpY2gKICAgICBpcyBvZiBhIHdpZGVyIG1vZGUsIGlzIGNvbXB1dGVkIGFuZCBhZGRlZCB0byBvcGVyYW5kIDMuICBPcGVyYW5kIDMKICAgICBpcyBvZiBhIG1vZGUgZXF1YWwgb3Igd2lkZXIgdGhhbiB0aGUgbW9kZSBvZiB0aGUgcHJvZHVjdC4gIFRoZQogICAgIHJlc3VsdCBpcyBwbGFjZWQgaW4gb3BlcmFuZCAwLCB3aGljaCBpcyBvZiB0aGUgc2FtZSBtb2RlIGFzIG9wZXJhbmQKICAgICAzLgoKJ3NzdW1fd2lkZW5NMycKJ3VzdW1fd2lkZW5NMycKICAgICBPcGVyYW5kcyAwIGFuZCAyIGFyZSBvZiB0aGUgc2FtZSBtb2RlLCB3aGljaCBpcyB3aWRlciB0aGFuIHRoZSBtb2RlCiAgICAgb2Ygb3BlcmFuZCAxLiAgQWRkIG9wZXJhbmQgMSB0byBvcGVyYW5kIDIgYW5kIHBsYWNlIHRoZSB3aWRlbmVkCiAgICAgcmVzdWx0IGluIG9wZXJhbmQgMC4gIChUaGlzIGlzIHVzZWQgZXhwcmVzcyBhY2N1bXVsYXRpb24gb2YKICAgICBlbGVtZW50cyBpbnRvIGFuIGFjY3VtdWxhdG9yIG9mIGEgd2lkZXIgbW9kZS4pCgondmVjX3NobF9NJywgJ3ZlY19zaHJfTScKICAgICBXaG9sZSB2ZWN0b3IgbGVmdC9yaWdodCBzaGlmdCBpbiBiaXRzLiAgT3BlcmFuZCAxIGlzIGEgdmVjdG9yIHRvIGJlCiAgICAgc2hpZnRlZC4gIE9wZXJhbmQgMiBpcyBhbiBpbnRlZ2VyIHNoaWZ0IGFtb3VudCBpbiBiaXRzLiAgT3BlcmFuZCAwCiAgICAgaXMgd2hlcmUgdGhlIHJlc3VsdGluZyBzaGlmdGVkIHZlY3RvciBpcyBzdG9yZWQuICBUaGUgb3V0cHV0IGFuZAogICAgIGlucHV0IHZlY3RvcnMgc2hvdWxkIGhhdmUgdGhlIHNhbWUgbW9kZXMuCgondmVjX3BhY2tfdHJ1bmNfTScKICAgICBOYXJyb3cgKGRlbW90ZSkgYW5kIG1lcmdlIHRoZSBlbGVtZW50cyBvZiB0d28gdmVjdG9ycy4gIE9wZXJhbmRzIDEKICAgICBhbmQgMiBhcmUgdmVjdG9ycyBvZiB0aGUgc2FtZSBtb2RlIGhhdmluZyBOIGludGVncmFsIG9yIGZsb2F0aW5nCiAgICAgcG9pbnQgZWxlbWVudHMgb2Ygc2l6ZSBTLiAgT3BlcmFuZCAwIGlzIHRoZSByZXN1bHRpbmcgdmVjdG9yIGluCiAgICAgd2hpY2ggMipOIGVsZW1lbnRzIG9mIHNpemUgTi8yIGFyZSBjb25jYXRlbmF0ZWQgYWZ0ZXIgbmFycm93aW5nCiAgICAgdGhlbSBkb3duIHVzaW5nIHRydW5jYXRpb24uCgondmVjX3BhY2tfc3NhdF9NJywgJ3ZlY19wYWNrX3VzYXRfTScKICAgICBOYXJyb3cgKGRlbW90ZSkgYW5kIG1lcmdlIHRoZSBlbGVtZW50cyBvZiB0d28gdmVjdG9ycy4gIE9wZXJhbmRzIDEKICAgICBhbmQgMiBhcmUgdmVjdG9ycyBvZiB0aGUgc2FtZSBtb2RlIGhhdmluZyBOIGludGVncmFsIGVsZW1lbnRzIG9mCiAgICAgc2l6ZSBTLiBPcGVyYW5kIDAgaXMgdGhlIHJlc3VsdGluZyB2ZWN0b3IgaW4gd2hpY2ggdGhlIGVsZW1lbnRzIG9mCiAgICAgdGhlIHR3byBpbnB1dCB2ZWN0b3JzIGFyZSBjb25jYXRlbmF0ZWQgYWZ0ZXIgbmFycm93aW5nIHRoZW0gZG93bgogICAgIHVzaW5nIHNpZ25lZC91bnNpZ25lZCBzYXR1cmF0aW5nIGFyaXRobWV0aWMuCgondmVjX3BhY2tfc2ZpeF90cnVuY19NJywgJ3ZlY19wYWNrX3VmaXhfdHJ1bmNfTScKICAgICBOYXJyb3csIGNvbnZlcnQgdG8gc2lnbmVkL3Vuc2lnbmVkIGludGVncmFsIHR5cGUgYW5kIG1lcmdlIHRoZQogICAgIGVsZW1lbnRzIG9mIHR3byB2ZWN0b3JzLiAgT3BlcmFuZHMgMSBhbmQgMiBhcmUgdmVjdG9ycyBvZiB0aGUgc2FtZQogICAgIG1vZGUgaGF2aW5nIE4gZmxvYXRpbmcgcG9pbnQgZWxlbWVudHMgb2Ygc2l6ZSBTLiAgT3BlcmFuZCAwIGlzIHRoZQogICAgIHJlc3VsdGluZyB2ZWN0b3IgaW4gd2hpY2ggMipOIGVsZW1lbnRzIG9mIHNpemUgTi8yIGFyZQogICAgIGNvbmNhdGVuYXRlZC4KCid2ZWNfdW5wYWNrc19oaV9NJywgJ3ZlY191bnBhY2tzX2xvX00nCiAgICAgRXh0cmFjdCBhbmQgd2lkZW4gKHByb21vdGUpIHRoZSBoaWdoL2xvdyBwYXJ0IG9mIGEgdmVjdG9yIG9mIHNpZ25lZAogICAgIGludGVncmFsIG9yIGZsb2F0aW5nIHBvaW50IGVsZW1lbnRzLiAgVGhlIGlucHV0IHZlY3RvciAob3BlcmFuZCAxKQogICAgIGhhcyBOIGVsZW1lbnRzIG9mIHNpemUgUy4gIFdpZGVuIChwcm9tb3RlKSB0aGUgaGlnaC9sb3cgZWxlbWVudHMgb2YKICAgICB0aGUgdmVjdG9yIHVzaW5nIHNpZ25lZCBvciBmbG9hdGluZyBwb2ludCBleHRlbnNpb24gYW5kIHBsYWNlIHRoZQogICAgIHJlc3VsdGluZyBOLzIgdmFsdWVzIG9mIHNpemUgMipTIGluIHRoZSBvdXRwdXQgdmVjdG9yIChvcGVyYW5kIDApLgoKJ3ZlY191bnBhY2t1X2hpX00nLCAndmVjX3VucGFja3VfbG9fTScKICAgICBFeHRyYWN0IGFuZCB3aWRlbiAocHJvbW90ZSkgdGhlIGhpZ2gvbG93IHBhcnQgb2YgYSB2ZWN0b3Igb2YKICAgICB1bnNpZ25lZCBpbnRlZ3JhbCBlbGVtZW50cy4gIFRoZSBpbnB1dCB2ZWN0b3IgKG9wZXJhbmQgMSkgaGFzIE4KICAgICBlbGVtZW50cyBvZiBzaXplIFMuIFdpZGVuIChwcm9tb3RlKSB0aGUgaGlnaC9sb3cgZWxlbWVudHMgb2YgdGhlCiAgICAgdmVjdG9yIHVzaW5nIHplcm8gZXh0ZW5zaW9uIGFuZCBwbGFjZSB0aGUgcmVzdWx0aW5nIE4vMiB2YWx1ZXMgb2YKICAgICBzaXplIDIqUyBpbiB0aGUgb3V0cHV0IHZlY3RvciAob3BlcmFuZCAwKS4KCid2ZWNfdW5wYWNrc19mbG9hdF9oaV9NJywgJ3ZlY191bnBhY2tzX2Zsb2F0X2xvX00nCid2ZWNfdW5wYWNrdV9mbG9hdF9oaV9NJywgJ3ZlY191bnBhY2t1X2Zsb2F0X2xvX00nCiAgICAgRXh0cmFjdCwgY29udmVydCB0byBmbG9hdGluZyBwb2ludCB0eXBlIGFuZCB3aWRlbiB0aGUgaGlnaC9sb3cgcGFydAogICAgIG9mIGEgdmVjdG9yIG9mIHNpZ25lZC91bnNpZ25lZCBpbnRlZ3JhbCBlbGVtZW50cy4gIFRoZSBpbnB1dCB2ZWN0b3IKICAgICAob3BlcmFuZCAxKSBoYXMgTiBlbGVtZW50cyBvZiBzaXplIFMuICBDb252ZXJ0IHRoZSBoaWdoL2xvdwogICAgIGVsZW1lbnRzIG9mIHRoZSB2ZWN0b3IgdXNpbmcgZmxvYXRpbmcgcG9pbnQgY29udmVyc2lvbiBhbmQgcGxhY2UKICAgICB0aGUgcmVzdWx0aW5nIE4vMiB2YWx1ZXMgb2Ygc2l6ZSAyKlMgaW4gdGhlIG91dHB1dCB2ZWN0b3IgKG9wZXJhbmQKICAgICAwKS4KCid2ZWNfd2lkZW5fdW11bHRfaGlfTScsICd2ZWNfd2lkZW5fdW11bHRfbG9fTScKJ3ZlY193aWRlbl9zbXVsdF9oaV9NJywgJ3ZlY193aWRlbl9zbXVsdF9sb19NJwogICAgIFNpZ25lZC9VbnNpZ25lZCB3aWRlbmluZyBtdWx0aXBsaWNhdGlvbi4gIFRoZSB0d28gaW5wdXRzIChvcGVyYW5kcwogICAgIDEgYW5kIDIpIGFyZSB2ZWN0b3JzIHdpdGggTiBzaWduZWQvdW5zaWduZWQgZWxlbWVudHMgb2Ygc2l6ZSBTLgogICAgIE11bHRpcGx5IHRoZSBoaWdoL2xvdyBlbGVtZW50cyBvZiB0aGUgdHdvIHZlY3RvcnMsIGFuZCBwdXQgdGhlIE4vMgogICAgIHByb2R1Y3RzIG9mIHNpemUgMipTIGluIHRoZSBvdXRwdXQgdmVjdG9yIChvcGVyYW5kIDApLgoKJ211bGhpc2kzJwogICAgIE11bHRpcGx5IG9wZXJhbmRzIDEgYW5kIDIsIHdoaWNoIGhhdmUgbW9kZSAnSEltb2RlJywgYW5kIHN0b3JlIGEKICAgICAnU0ltb2RlJyBwcm9kdWN0IGluIG9wZXJhbmQgMC4KCidtdWxxaWhpMycsICdtdWxzaWRpMycKICAgICBTaW1pbGFyIHdpZGVuaW5nLW11bHRpcGxpY2F0aW9uIGluc3RydWN0aW9ucyBvZiBvdGhlciB3aWR0aHMuCgondW11bHFpaGkzJywgJ3VtdWxoaXNpMycsICd1bXVsc2lkaTMnCiAgICAgU2ltaWxhciB3aWRlbmluZy1tdWx0aXBsaWNhdGlvbiBpbnN0cnVjdGlvbnMgdGhhdCBkbyB1bnNpZ25lZAogICAgIG11bHRpcGxpY2F0aW9uLgoKJ3VzbXVscWloaTMnLCAndXNtdWxoaXNpMycsICd1c211bHNpZGkzJwogICAgIFNpbWlsYXIgd2lkZW5pbmctbXVsdGlwbGljYXRpb24gaW5zdHJ1Y3Rpb25zIHRoYXQgaW50ZXJwcmV0IHRoZQogICAgIGZpcnN0IG9wZXJhbmQgYXMgdW5zaWduZWQgYW5kIHRoZSBzZWNvbmQgb3BlcmFuZCBhcyBzaWduZWQsIHRoZW4gZG8KICAgICBhIHNpZ25lZCBtdWx0aXBsaWNhdGlvbi4KCidzbXVsTTNfaGlnaHBhcnQnCiAgICAgUGVyZm9ybSBhIHNpZ25lZCBtdWx0aXBsaWNhdGlvbiBvZiBvcGVyYW5kcyAxIGFuZCAyLCB3aGljaCBoYXZlCiAgICAgbW9kZSBNLCBhbmQgc3RvcmUgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgaGFsZiBvZiB0aGUgcHJvZHVjdCBpbgogICAgIG9wZXJhbmQgMC4gIFRoZSBsZWFzdCBzaWduaWZpY2FudCBoYWxmIG9mIHRoZSBwcm9kdWN0IGlzIGRpc2NhcmRlZC4KCid1bXVsTTNfaGlnaHBhcnQnCiAgICAgU2ltaWxhciwgYnV0IHRoZSBtdWx0aXBsaWNhdGlvbiBpcyB1bnNpZ25lZC4KCidtYWRkTU40JwogICAgIE11bHRpcGx5IG9wZXJhbmRzIDEgYW5kIDIsIHNpZ24tZXh0ZW5kIHRoZW0gdG8gbW9kZSBOLCBhZGQgb3BlcmFuZAogICAgIDMsIGFuZCBzdG9yZSB0aGUgcmVzdWx0IGluIG9wZXJhbmQgMC4gIE9wZXJhbmRzIDEgYW5kIDIgaGF2ZSBtb2RlIE0KICAgICBhbmQgb3BlcmFuZHMgMCBhbmQgMyBoYXZlIG1vZGUgTi4gIEJvdGggbW9kZXMgbXVzdCBiZSBpbnRlZ2VyIG9yCiAgICAgZml4ZWQtcG9pbnQgbW9kZXMgYW5kIE4gbXVzdCBiZSB0d2ljZSB0aGUgc2l6ZSBvZiBNLgoKICAgICBJbiBvdGhlciB3b3JkcywgJ21hZGRNTjQnIGlzIGxpa2UgJ211bE1OMycgZXhjZXB0IHRoYXQgaXQgYWxzbyBhZGRzCiAgICAgb3BlcmFuZCAzLgoKICAgICBUaGVzZSBpbnN0cnVjdGlvbnMgYXJlIG5vdCBhbGxvd2VkIHRvICdGQUlMJy4KCid1bWFkZE1ONCcKICAgICBMaWtlICdtYWRkTU40JywgYnV0IHplcm8tZXh0ZW5kIHRoZSBtdWx0aXBsaWNhdGlvbiBvcGVyYW5kcyBpbnN0ZWFkCiAgICAgb2Ygc2lnbi1leHRlbmRpbmcgdGhlbS4KCidzc21hZGRNTjQnCiAgICAgTGlrZSAnbWFkZE1ONCcsIGJ1dCBhbGwgaW52b2x2ZWQgb3BlcmF0aW9ucyBtdXN0IGJlCiAgICAgc2lnbmVkLXNhdHVyYXRpbmcuCgondXNtYWRkTU40JwogICAgIExpa2UgJ3VtYWRkTU40JywgYnV0IGFsbCBpbnZvbHZlZCBvcGVyYXRpb25zIG11c3QgYmUKICAgICB1bnNpZ25lZC1zYXR1cmF0aW5nLgoKJ21zdWJNTjQnCiAgICAgTXVsdGlwbHkgb3BlcmFuZHMgMSBhbmQgMiwgc2lnbi1leHRlbmQgdGhlbSB0byBtb2RlIE4sIHN1YnRyYWN0IHRoZQogICAgIHJlc3VsdCBmcm9tIG9wZXJhbmQgMywgYW5kIHN0b3JlIHRoZSByZXN1bHQgaW4gb3BlcmFuZCAwLiAgT3BlcmFuZHMKICAgICAxIGFuZCAyIGhhdmUgbW9kZSBNIGFuZCBvcGVyYW5kcyAwIGFuZCAzIGhhdmUgbW9kZSBOLiAgQm90aCBtb2RlcwogICAgIG11c3QgYmUgaW50ZWdlciBvciBmaXhlZC1wb2ludCBtb2RlcyBhbmQgTiBtdXN0IGJlIHR3aWNlIHRoZSBzaXplCiAgICAgb2YgTS4KCiAgICAgSW4gb3RoZXIgd29yZHMsICdtc3ViTU40JyBpcyBsaWtlICdtdWxNTjMnIGV4Y2VwdCB0aGF0IGl0IGFsc28KICAgICBzdWJ0cmFjdHMgdGhlIHJlc3VsdCBmcm9tIG9wZXJhbmQgMy4KCiAgICAgVGhlc2UgaW5zdHJ1Y3Rpb25zIGFyZSBub3QgYWxsb3dlZCB0byAnRkFJTCcuCgondW1zdWJNTjQnCiAgICAgTGlrZSAnbXN1Yk1ONCcsIGJ1dCB6ZXJvLWV4dGVuZCB0aGUgbXVsdGlwbGljYXRpb24gb3BlcmFuZHMgaW5zdGVhZAogICAgIG9mIHNpZ24tZXh0ZW5kaW5nIHRoZW0uCgonc3Ntc3ViTU40JwogICAgIExpa2UgJ21zdWJNTjQnLCBidXQgYWxsIGludm9sdmVkIG9wZXJhdGlvbnMgbXVzdCBiZQogICAgIHNpZ25lZC1zYXR1cmF0aW5nLgoKJ3VzbXN1Yk1ONCcKICAgICBMaWtlICd1bXN1Yk1ONCcsIGJ1dCBhbGwgaW52b2x2ZWQgb3BlcmF0aW9ucyBtdXN0IGJlCiAgICAgdW5zaWduZWQtc2F0dXJhdGluZy4KCidkaXZtb2RNNCcKICAgICBTaWduZWQgZGl2aXNpb24gdGhhdCBwcm9kdWNlcyBib3RoIGEgcXVvdGllbnQgYW5kIGEgcmVtYWluZGVyLgogICAgIE9wZXJhbmQgMSBpcyBkaXZpZGVkIGJ5IG9wZXJhbmQgMiB0byBwcm9kdWNlIGEgcXVvdGllbnQgc3RvcmVkIGluCiAgICAgb3BlcmFuZCAwIGFuZCBhIHJlbWFpbmRlciBzdG9yZWQgaW4gb3BlcmFuZCAzLgoKICAgICBGb3IgbWFjaGluZXMgd2l0aCBhbiBpbnN0cnVjdGlvbiB0aGF0IHByb2R1Y2VzIGJvdGggYSBxdW90aWVudCBhbmQKICAgICBhIHJlbWFpbmRlciwgcHJvdmlkZSBhIHBhdHRlcm4gZm9yICdkaXZtb2RNNCcgYnV0IGRvIG5vdCBwcm92aWRlCiAgICAgcGF0dGVybnMgZm9yICdkaXZNMycgYW5kICdtb2RNMycuICBUaGlzIGFsbG93cyBvcHRpbWl6YXRpb24gaW4gdGhlCiAgICAgcmVsYXRpdmVseSBjb21tb24gY2FzZSB3aGVuIGJvdGggdGhlIHF1b3RpZW50IGFuZCByZW1haW5kZXIgYXJlCiAgICAgY29tcHV0ZWQuCgogICAgIElmIGFuIGluc3RydWN0aW9uIHRoYXQganVzdCBwcm9kdWNlcyBhIHF1b3RpZW50IG9yIGp1c3QgYSByZW1haW5kZXIKICAgICBleGlzdHMgYW5kIGlzIG1vcmUgZWZmaWNpZW50IHRoYW4gdGhlIGluc3RydWN0aW9uIHRoYXQgcHJvZHVjZXMKICAgICBib3RoLCB3cml0ZSB0aGUgb3V0cHV0IHJvdXRpbmUgb2YgJ2Rpdm1vZE00JyB0byBjYWxsCiAgICAgJ2ZpbmRfcmVnX25vdGUnIGFuZCBsb29rIGZvciBhICdSRUdfVU5VU0VEJyBub3RlIG9uIHRoZSBxdW90aWVudCBvcgogICAgIHJlbWFpbmRlciBhbmQgZ2VuZXJhdGUgdGhlIGFwcHJvcHJpYXRlIGluc3RydWN0aW9uLgoKJ3VkaXZtb2RNNCcKICAgICBTaW1pbGFyLCBidXQgZG9lcyB1bnNpZ25lZCBkaXZpc2lvbi4KCidhc2hsTTMnLCAnc3Nhc2hsTTMnLCAndXNhc2hsTTMnCiAgICAgQXJpdGhtZXRpYy1zaGlmdCBvcGVyYW5kIDEgbGVmdCBieSBhIG51bWJlciBvZiBiaXRzIHNwZWNpZmllZCBieQogICAgIG9wZXJhbmQgMiwgYW5kIHN0b3JlIHRoZSByZXN1bHQgaW4gb3BlcmFuZCAwLiAgSGVyZSBNIGlzIHRoZSBtb2RlCiAgICAgb2Ygb3BlcmFuZCAwIGFuZCBvcGVyYW5kIDE7IG9wZXJhbmQgMidzIG1vZGUgaXMgc3BlY2lmaWVkIGJ5IHRoZQogICAgIGluc3RydWN0aW9uIHBhdHRlcm4sIGFuZCB0aGUgY29tcGlsZXIgd2lsbCBjb252ZXJ0IHRoZSBvcGVyYW5kIHRvCiAgICAgdGhhdCBtb2RlIGJlZm9yZSBnZW5lcmF0aW5nIHRoZSBpbnN0cnVjdGlvbi4gIFRoZSBtZWFuaW5nIG9mCiAgICAgb3V0LW9mLXJhbmdlIHNoaWZ0IGNvdW50cyBjYW4gb3B0aW9uYWxseSBiZSBzcGVjaWZpZWQgYnkKICAgICAnVEFSR0VUX1NISUZUX1RSVU5DQVRJT05fTUFTSycuICAqTm90ZQogICAgIFRBUkdFVF9TSElGVF9UUlVOQ0FUSU9OX01BU0s6Oi4KCidhc2hyTTMnLCAnbHNock0zJywgJ3JvdGxNMycsICdyb3RyTTMnCiAgICAgT3RoZXIgc2hpZnQgYW5kIHJvdGF0ZSBpbnN0cnVjdGlvbnMsIGFuYWxvZ291cyB0byB0aGUgJ2FzaGxNMycKICAgICBpbnN0cnVjdGlvbnMuCgonbmVnTTInLCAnc3NuZWdNMicsICd1c25lZ00yJwogICAgIE5lZ2F0ZSBvcGVyYW5kIDEgYW5kIHN0b3JlIHRoZSByZXN1bHQgaW4gb3BlcmFuZCAwLgoKJ2Fic00yJwogICAgIFN0b3JlIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiBvcGVyYW5kIDEgaW50byBvcGVyYW5kIDAuCgonc3FydE0yJwogICAgIFN0b3JlIHRoZSBzcXVhcmUgcm9vdCBvZiBvcGVyYW5kIDEgaW50byBvcGVyYW5kIDAuCgogICAgIFRoZSAnc3FydCcgYnVpbHQtaW4gZnVuY3Rpb24gb2YgQyBhbHdheXMgdXNlcyB0aGUgbW9kZSB3aGljaAogICAgIGNvcnJlc3BvbmRzIHRvIHRoZSBDIGRhdGEgdHlwZSAnZG91YmxlJyBhbmQgdGhlICdzcXJ0ZicgYnVpbHQtaW4KICAgICBmdW5jdGlvbiB1c2VzIHRoZSBtb2RlIHdoaWNoIGNvcnJlc3BvbmRzIHRvIHRoZSBDIGRhdGEgdHlwZQogICAgICdmbG9hdCcuCgonZm1vZE0zJwogICAgIFN0b3JlIHRoZSByZW1haW5kZXIgb2YgZGl2aWRpbmcgb3BlcmFuZCAxIGJ5IG9wZXJhbmQgMiBpbnRvIG9wZXJhbmQKICAgICAwLCByb3VuZGVkIHRvd2FyZHMgemVybyB0byBhbiBpbnRlZ2VyLgoKICAgICBUaGUgJ2Ztb2QnIGJ1aWx0LWluIGZ1bmN0aW9uIG9mIEMgYWx3YXlzIHVzZXMgdGhlIG1vZGUgd2hpY2gKICAgICBjb3JyZXNwb25kcyB0byB0aGUgQyBkYXRhIHR5cGUgJ2RvdWJsZScgYW5kIHRoZSAnZm1vZGYnIGJ1aWx0LWluCiAgICAgZnVuY3Rpb24gdXNlcyB0aGUgbW9kZSB3aGljaCBjb3JyZXNwb25kcyB0byB0aGUgQyBkYXRhIHR5cGUKICAgICAnZmxvYXQnLgoKJ3JlbWFpbmRlck0zJwogICAgIFN0b3JlIHRoZSByZW1haW5kZXIgb2YgZGl2aWRpbmcgb3BlcmFuZCAxIGJ5IG9wZXJhbmQgMiBpbnRvIG9wZXJhbmQKICAgICAwLCByb3VuZGVkIHRvIHRoZSBuZWFyZXN0IGludGVnZXIuCgogICAgIFRoZSAncmVtYWluZGVyJyBidWlsdC1pbiBmdW5jdGlvbiBvZiBDIGFsd2F5cyB1c2VzIHRoZSBtb2RlIHdoaWNoCiAgICAgY29ycmVzcG9uZHMgdG8gdGhlIEMgZGF0YSB0eXBlICdkb3VibGUnIGFuZCB0aGUgJ3JlbWFpbmRlcmYnCiAgICAgYnVpbHQtaW4gZnVuY3Rpb24gdXNlcyB0aGUgbW9kZSB3aGljaCBjb3JyZXNwb25kcyB0byB0aGUgQyBkYXRhCiAgICAgdHlwZSAnZmxvYXQnLgoKJ2Nvc00yJwogICAgIFN0b3JlIHRoZSBjb3NpbmUgb2Ygb3BlcmFuZCAxIGludG8gb3BlcmFuZCAwLgoKICAgICBUaGUgJ2NvcycgYnVpbHQtaW4gZnVuY3Rpb24gb2YgQyBhbHdheXMgdXNlcyB0aGUgbW9kZSB3aGljaAogICAgIGNvcnJlc3BvbmRzIHRvIHRoZSBDIGRhdGEgdHlwZSAnZG91YmxlJyBhbmQgdGhlICdjb3NmJyBidWlsdC1pbgogICAgIGZ1bmN0aW9uIHVzZXMgdGhlIG1vZGUgd2hpY2ggY29ycmVzcG9uZHMgdG8gdGhlIEMgZGF0YSB0eXBlCiAgICAgJ2Zsb2F0Jy4KCidzaW5NMicKICAgICBTdG9yZSB0aGUgc2luZSBvZiBvcGVyYW5kIDEgaW50byBvcGVyYW5kIDAuCgogICAgIFRoZSAnc2luJyBidWlsdC1pbiBmdW5jdGlvbiBvZiBDIGFsd2F5cyB1c2VzIHRoZSBtb2RlIHdoaWNoCiAgICAgY29ycmVzcG9uZHMgdG8gdGhlIEMgZGF0YSB0eXBlICdkb3VibGUnIGFuZCB0aGUgJ3NpbmYnIGJ1aWx0LWluCiAgICAgZnVuY3Rpb24gdXNlcyB0aGUgbW9kZSB3aGljaCBjb3JyZXNwb25kcyB0byB0aGUgQyBkYXRhIHR5cGUKICAgICAnZmxvYXQnLgoKJ2V4cE0yJwogICAgIFN0b3JlIHRoZSBleHBvbmVudGlhbCBvZiBvcGVyYW5kIDEgaW50byBvcGVyYW5kIDAuCgogICAgIFRoZSAnZXhwJyBidWlsdC1pbiBmdW5jdGlvbiBvZiBDIGFsd2F5cyB1c2VzIHRoZSBtb2RlIHdoaWNoCiAgICAgY29ycmVzcG9uZHMgdG8gdGhlIEMgZGF0YSB0eXBlICdkb3VibGUnIGFuZCB0aGUgJ2V4cGYnIGJ1aWx0LWluCiAgICAgZnVuY3Rpb24gdXNlcyB0aGUgbW9kZSB3aGljaCBjb3JyZXNwb25kcyB0byB0aGUgQyBkYXRhIHR5cGUKICAgICAnZmxvYXQnLgoKJ2xvZ00yJwogICAgIFN0b3JlIHRoZSBuYXR1cmFsIGxvZ2FyaXRobSBvZiBvcGVyYW5kIDEgaW50byBvcGVyYW5kIDAuCgogICAgIFRoZSAnbG9nJyBidWlsdC1pbiBmdW5jdGlvbiBvZiBDIGFsd2F5cyB1c2VzIHRoZSBtb2RlIHdoaWNoCiAgICAgY29ycmVzcG9uZHMgdG8gdGhlIEMgZGF0YSB0eXBlICdkb3VibGUnIGFuZCB0aGUgJ2xvZ2YnIGJ1aWx0LWluCiAgICAgZnVuY3Rpb24gdXNlcyB0aGUgbW9kZSB3aGljaCBjb3JyZXNwb25kcyB0byB0aGUgQyBkYXRhIHR5cGUKICAgICAnZmxvYXQnLgoKJ3Bvd00zJwogICAgIFN0b3JlIHRoZSB2YWx1ZSBvZiBvcGVyYW5kIDEgcmFpc2VkIHRvIHRoZSBleHBvbmVudCBvcGVyYW5kIDIgaW50bwogICAgIG9wZXJhbmQgMC4KCiAgICAgVGhlICdwb3cnIGJ1aWx0LWluIGZ1bmN0aW9uIG9mIEMgYWx3YXlzIHVzZXMgdGhlIG1vZGUgd2hpY2gKICAgICBjb3JyZXNwb25kcyB0byB0aGUgQyBkYXRhIHR5cGUgJ2RvdWJsZScgYW5kIHRoZSAncG93ZicgYnVpbHQtaW4KICAgICBmdW5jdGlvbiB1c2VzIHRoZSBtb2RlIHdoaWNoIGNvcnJlc3BvbmRzIHRvIHRoZSBDIGRhdGEgdHlwZQogICAgICdmbG9hdCcuCgonYXRhbjJNMycKICAgICBTdG9yZSB0aGUgYXJjIHRhbmdlbnQgKGludmVyc2UgdGFuZ2VudCkgb2Ygb3BlcmFuZCAxIGRpdmlkZWQgYnkKICAgICBvcGVyYW5kIDIgaW50byBvcGVyYW5kIDAsIHVzaW5nIHRoZSBzaWducyBvZiBib3RoIGFyZ3VtZW50cyB0bwogICAgIGRldGVybWluZSB0aGUgcXVhZHJhbnQgb2YgdGhlIHJlc3VsdC4KCiAgICAgVGhlICdhdGFuMicgYnVpbHQtaW4gZnVuY3Rpb24gb2YgQyBhbHdheXMgdXNlcyB0aGUgbW9kZSB3aGljaAogICAgIGNvcnJlc3BvbmRzIHRvIHRoZSBDIGRhdGEgdHlwZSAnZG91YmxlJyBhbmQgdGhlICdhdGFuMmYnIGJ1aWx0LWluCiAgICAgZnVuY3Rpb24gdXNlcyB0aGUgbW9kZSB3aGljaCBjb3JyZXNwb25kcyB0byB0aGUgQyBkYXRhIHR5cGUKICAgICAnZmxvYXQnLgoKJ2Zsb29yTTInCiAgICAgU3RvcmUgdGhlIGxhcmdlc3QgaW50ZWdyYWwgdmFsdWUgbm90IGdyZWF0ZXIgdGhhbiBhcmd1bWVudC4KCiAgICAgVGhlICdmbG9vcicgYnVpbHQtaW4gZnVuY3Rpb24gb2YgQyBhbHdheXMgdXNlcyB0aGUgbW9kZSB3aGljaAogICAgIGNvcnJlc3BvbmRzIHRvIHRoZSBDIGRhdGEgdHlwZSAnZG91YmxlJyBhbmQgdGhlICdmbG9vcmYnIGJ1aWx0LWluCiAgICAgZnVuY3Rpb24gdXNlcyB0aGUgbW9kZSB3aGljaCBjb3JyZXNwb25kcyB0byB0aGUgQyBkYXRhIHR5cGUKICAgICAnZmxvYXQnLgoKJ2J0cnVuY00yJwogICAgIFN0b3JlIHRoZSBhcmd1bWVudCByb3VuZGVkIHRvIGludGVnZXIgdG93YXJkcyB6ZXJvLgoKICAgICBUaGUgJ3RydW5jJyBidWlsdC1pbiBmdW5jdGlvbiBvZiBDIGFsd2F5cyB1c2VzIHRoZSBtb2RlIHdoaWNoCiAgICAgY29ycmVzcG9uZHMgdG8gdGhlIEMgZGF0YSB0eXBlICdkb3VibGUnIGFuZCB0aGUgJ3RydW5jZicgYnVpbHQtaW4KICAgICBmdW5jdGlvbiB1c2VzIHRoZSBtb2RlIHdoaWNoIGNvcnJlc3BvbmRzIHRvIHRoZSBDIGRhdGEgdHlwZQogICAgICdmbG9hdCcuCgoncm91bmRNMicKICAgICBTdG9yZSB0aGUgYXJndW1lbnQgcm91bmRlZCB0byBpbnRlZ2VyIGF3YXkgZnJvbSB6ZXJvLgoKICAgICBUaGUgJ3JvdW5kJyBidWlsdC1pbiBmdW5jdGlvbiBvZiBDIGFsd2F5cyB1c2VzIHRoZSBtb2RlIHdoaWNoCiAgICAgY29ycmVzcG9uZHMgdG8gdGhlIEMgZGF0YSB0eXBlICdkb3VibGUnIGFuZCB0aGUgJ3JvdW5kZicgYnVpbHQtaW4KICAgICBmdW5jdGlvbiB1c2VzIHRoZSBtb2RlIHdoaWNoIGNvcnJlc3BvbmRzIHRvIHRoZSBDIGRhdGEgdHlwZQogICAgICdmbG9hdCcuCgonY2VpbE0yJwogICAgIFN0b3JlIHRoZSBhcmd1bWVudCByb3VuZGVkIHRvIGludGVnZXIgYXdheSBmcm9tIHplcm8uCgogICAgIFRoZSAnY2VpbCcgYnVpbHQtaW4gZnVuY3Rpb24gb2YgQyBhbHdheXMgdXNlcyB0aGUgbW9kZSB3aGljaAogICAgIGNvcnJlc3BvbmRzIHRvIHRoZSBDIGRhdGEgdHlwZSAnZG91YmxlJyBhbmQgdGhlICdjZWlsZicgYnVpbHQtaW4KICAgICBmdW5jdGlvbiB1c2VzIHRoZSBtb2RlIHdoaWNoIGNvcnJlc3BvbmRzIHRvIHRoZSBDIGRhdGEgdHlwZQogICAgICdmbG9hdCcuCgonbmVhcmJ5aW50TTInCiAgICAgU3RvcmUgdGhlIGFyZ3VtZW50IHJvdW5kZWQgYWNjb3JkaW5nIHRvIHRoZSBkZWZhdWx0IHJvdW5kaW5nIG1vZGUKCiAgICAgVGhlICduZWFyYnlpbnQnIGJ1aWx0LWluIGZ1bmN0aW9uIG9mIEMgYWx3YXlzIHVzZXMgdGhlIG1vZGUgd2hpY2gKICAgICBjb3JyZXNwb25kcyB0byB0aGUgQyBkYXRhIHR5cGUgJ2RvdWJsZScgYW5kIHRoZSAnbmVhcmJ5aW50ZicKICAgICBidWlsdC1pbiBmdW5jdGlvbiB1c2VzIHRoZSBtb2RlIHdoaWNoIGNvcnJlc3BvbmRzIHRvIHRoZSBDIGRhdGEKICAgICB0eXBlICdmbG9hdCcuCgoncmludE0yJwogICAgIFN0b3JlIHRoZSBhcmd1bWVudCByb3VuZGVkIGFjY29yZGluZyB0byB0aGUgZGVmYXVsdCByb3VuZGluZyBtb2RlCiAgICAgYW5kIHJhaXNlIHRoZSBpbmV4YWN0IGV4Y2VwdGlvbiB3aGVuIHRoZSByZXN1bHQgZGlmZmVycyBpbiB2YWx1ZQogICAgIGZyb20gdGhlIGFyZ3VtZW50CgogICAgIFRoZSAncmludCcgYnVpbHQtaW4gZnVuY3Rpb24gb2YgQyBhbHdheXMgdXNlcyB0aGUgbW9kZSB3aGljaAogICAgIGNvcnJlc3BvbmRzIHRvIHRoZSBDIGRhdGEgdHlwZSAnZG91YmxlJyBhbmQgdGhlICdyaW50ZicgYnVpbHQtaW4KICAgICBmdW5jdGlvbiB1c2VzIHRoZSBtb2RlIHdoaWNoIGNvcnJlc3BvbmRzIHRvIHRoZSBDIGRhdGEgdHlwZQogICAgICdmbG9hdCcuCgonbHJpbnRNTjInCiAgICAgQ29udmVydCBvcGVyYW5kIDEgKHZhbGlkIGZvciBmbG9hdGluZyBwb2ludCBtb2RlIE0pIHRvIGZpeGVkIHBvaW50CiAgICAgbW9kZSBOIGFzIGEgc2lnbmVkIG51bWJlciBhY2NvcmRpbmcgdG8gdGhlIGN1cnJlbnQgcm91bmRpbmcgbW9kZQogICAgIGFuZCBzdG9yZSBpbiBvcGVyYW5kIDAgKHdoaWNoIGhhcyBtb2RlIE4pLgoKJ2xyb3VuZE0yJwogICAgIENvbnZlcnQgb3BlcmFuZCAxICh2YWxpZCBmb3IgZmxvYXRpbmcgcG9pbnQgbW9kZSBNKSB0byBmaXhlZCBwb2ludAogICAgIG1vZGUgTiBhcyBhIHNpZ25lZCBudW1iZXIgcm91bmRpbmcgdG8gbmVhcmVzdCBhbmQgYXdheSBmcm9tIHplcm8KICAgICBhbmQgc3RvcmUgaW4gb3BlcmFuZCAwICh3aGljaCBoYXMgbW9kZSBOKS4KCidsZmxvb3JNMicKICAgICBDb252ZXJ0IG9wZXJhbmQgMSAodmFsaWQgZm9yIGZsb2F0aW5nIHBvaW50IG1vZGUgTSkgdG8gZml4ZWQgcG9pbnQKICAgICBtb2RlIE4gYXMgYSBzaWduZWQgbnVtYmVyIHJvdW5kaW5nIGRvd24gYW5kIHN0b3JlIGluIG9wZXJhbmQgMAogICAgICh3aGljaCBoYXMgbW9kZSBOKS4KCidsY2VpbE0yJwogICAgIENvbnZlcnQgb3BlcmFuZCAxICh2YWxpZCBmb3IgZmxvYXRpbmcgcG9pbnQgbW9kZSBNKSB0byBmaXhlZCBwb2ludAogICAgIG1vZGUgTiBhcyBhIHNpZ25lZCBudW1iZXIgcm91bmRpbmcgdXAgYW5kIHN0b3JlIGluIG9wZXJhbmQgMCAod2hpY2gKICAgICBoYXMgbW9kZSBOKS4KCidjb3B5c2lnbk0zJwogICAgIFN0b3JlIGEgdmFsdWUgd2l0aCB0aGUgbWFnbml0dWRlIG9mIG9wZXJhbmQgMSBhbmQgdGhlIHNpZ24gb2YKICAgICBvcGVyYW5kIDIgaW50byBvcGVyYW5kIDAuCgogICAgIFRoZSAnY29weXNpZ24nIGJ1aWx0LWluIGZ1bmN0aW9uIG9mIEMgYWx3YXlzIHVzZXMgdGhlIG1vZGUgd2hpY2gKICAgICBjb3JyZXNwb25kcyB0byB0aGUgQyBkYXRhIHR5cGUgJ2RvdWJsZScgYW5kIHRoZSAnY29weXNpZ25mJwogICAgIGJ1aWx0LWluIGZ1bmN0aW9uIHVzZXMgdGhlIG1vZGUgd2hpY2ggY29ycmVzcG9uZHMgdG8gdGhlIEMgZGF0YQogICAgIHR5cGUgJ2Zsb2F0Jy4KCidmZnNNMicKICAgICBTdG9yZSBpbnRvIG9wZXJhbmQgMCBvbmUgcGx1cyB0aGUgaW5kZXggb2YgdGhlIGxlYXN0IHNpZ25pZmljYW50CiAgICAgMS1iaXQgb2Ygb3BlcmFuZCAxLiAgSWYgb3BlcmFuZCAxIGlzIHplcm8sIHN0b3JlIHplcm8uICBNIGlzIHRoZQogICAgIG1vZGUgb2Ygb3BlcmFuZCAwOyBvcGVyYW5kIDEncyBtb2RlIGlzIHNwZWNpZmllZCBieSB0aGUgaW5zdHJ1Y3Rpb24KICAgICBwYXR0ZXJuLCBhbmQgdGhlIGNvbXBpbGVyIHdpbGwgY29udmVydCB0aGUgb3BlcmFuZCB0byB0aGF0IG1vZGUKICAgICBiZWZvcmUgZ2VuZXJhdGluZyB0aGUgaW5zdHJ1Y3Rpb24uCgogICAgIFRoZSAnZmZzJyBidWlsdC1pbiBmdW5jdGlvbiBvZiBDIGFsd2F5cyB1c2VzIHRoZSBtb2RlIHdoaWNoCiAgICAgY29ycmVzcG9uZHMgdG8gdGhlIEMgZGF0YSB0eXBlICdpbnQnLgoKJ2Nsek0yJwogICAgIFN0b3JlIGludG8gb3BlcmFuZCAwIHRoZSBudW1iZXIgb2YgbGVhZGluZyAwLWJpdHMgaW4gWCwgc3RhcnRpbmcgYXQKICAgICB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQgcG9zaXRpb24uICBJZiBYIGlzIDAsIHRoZQogICAgICdDTFpfREVGSU5FRF9WQUxVRV9BVF9aRVJPJyAoKm5vdGUgTWlzYzo6KSBtYWNybyBkZWZpbmVzIGlmIHRoZQogICAgIHJlc3VsdCBpcyB1bmRlZmluZWQgb3IgaGFzIGEgdXNlZnVsIHZhbHVlLiAgTSBpcyB0aGUgbW9kZSBvZgogICAgIG9wZXJhbmQgMDsgb3BlcmFuZCAxJ3MgbW9kZSBpcyBzcGVjaWZpZWQgYnkgdGhlIGluc3RydWN0aW9uCiAgICAgcGF0dGVybiwgYW5kIHRoZSBjb21waWxlciB3aWxsIGNvbnZlcnQgdGhlIG9wZXJhbmQgdG8gdGhhdCBtb2RlCiAgICAgYmVmb3JlIGdlbmVyYXRpbmcgdGhlIGluc3RydWN0aW9uLgoKJ2N0ek0yJwogICAgIFN0b3JlIGludG8gb3BlcmFuZCAwIHRoZSBudW1iZXIgb2YgdHJhaWxpbmcgMC1iaXRzIGluIFgsIHN0YXJ0aW5nCiAgICAgYXQgdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdCBwb3NpdGlvbi4gIElmIFggaXMgMCwgdGhlCiAgICAgJ0NUWl9ERUZJTkVEX1ZBTFVFX0FUX1pFUk8nICgqbm90ZSBNaXNjOjopIG1hY3JvIGRlZmluZXMgaWYgdGhlCiAgICAgcmVzdWx0IGlzIHVuZGVmaW5lZCBvciBoYXMgYSB1c2VmdWwgdmFsdWUuICBNIGlzIHRoZSBtb2RlIG9mCiAgICAgb3BlcmFuZCAwOyBvcGVyYW5kIDEncyBtb2RlIGlzIHNwZWNpZmllZCBieSB0aGUgaW5zdHJ1Y3Rpb24KICAgICBwYXR0ZXJuLCBhbmQgdGhlIGNvbXBpbGVyIHdpbGwgY29udmVydCB0aGUgb3BlcmFuZCB0byB0aGF0IG1vZGUKICAgICBiZWZvcmUgZ2VuZXJhdGluZyB0aGUgaW5zdHJ1Y3Rpb24uCgoncG9wY291bnRNMicKICAgICBTdG9yZSBpbnRvIG9wZXJhbmQgMCB0aGUgbnVtYmVyIG9mIDEtYml0cyBpbiBYLiAgTSBpcyB0aGUgbW9kZSBvZgogICAgIG9wZXJhbmQgMDsgb3BlcmFuZCAxJ3MgbW9kZSBpcyBzcGVjaWZpZWQgYnkgdGhlIGluc3RydWN0aW9uCiAgICAgcGF0dGVybiwgYW5kIHRoZSBjb21waWxlciB3aWxsIGNvbnZlcnQgdGhlIG9wZXJhbmQgdG8gdGhhdCBtb2RlCiAgICAgYmVmb3JlIGdlbmVyYXRpbmcgdGhlIGluc3RydWN0aW9uLgoKJ3Bhcml0eU0yJwogICAgIFN0b3JlIGludG8gb3BlcmFuZCAwIHRoZSBwYXJpdHkgb2YgWCwgaS5lLiB0aGUgbnVtYmVyIG9mIDEtYml0cyBpbgogICAgIFggbW9kdWxvIDIuICBNIGlzIHRoZSBtb2RlIG9mIG9wZXJhbmQgMDsgb3BlcmFuZCAxJ3MgbW9kZSBpcwogICAgIHNwZWNpZmllZCBieSB0aGUgaW5zdHJ1Y3Rpb24gcGF0dGVybiwgYW5kIHRoZSBjb21waWxlciB3aWxsIGNvbnZlcnQKICAgICB0aGUgb3BlcmFuZCB0byB0aGF0IG1vZGUgYmVmb3JlIGdlbmVyYXRpbmcgdGhlIGluc3RydWN0aW9uLgoKJ29uZV9jbXBsTTInCiAgICAgU3RvcmUgdGhlIGJpdHdpc2UtY29tcGxlbWVudCBvZiBvcGVyYW5kIDEgaW50byBvcGVyYW5kIDAuCgonY21wTScKICAgICBDb21wYXJlIG9wZXJhbmQgMCBhbmQgb3BlcmFuZCAxLCBhbmQgc2V0IHRoZSBjb25kaXRpb24gY29kZXMuICBUaGUKICAgICBSVEwgcGF0dGVybiBzaG91bGQgbG9vayBsaWtlIHRoaXM6CgogICAgICAgICAgKHNldCAoY2MwKSAoY29tcGFyZSAobWF0Y2hfb3BlcmFuZDpNIDAgLi4uKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpNIDEgLi4uKSkpCgondHN0TScKICAgICBDb21wYXJlIG9wZXJhbmQgMCBhZ2FpbnN0IHplcm8sIGFuZCBzZXQgdGhlIGNvbmRpdGlvbiBjb2Rlcy4gIFRoZQogICAgIFJUTCBwYXR0ZXJuIHNob3VsZCBsb29rIGxpa2UgdGhpczoKCiAgICAgICAgICAoc2V0IChjYzApIChtYXRjaF9vcGVyYW5kOk0gMCAuLi4pKQoKICAgICAndHN0TScgcGF0dGVybnMgc2hvdWxkIG5vdCBiZSBkZWZpbmVkIGZvciBtYWNoaW5lcyB0aGF0IGRvIG5vdCB1c2UKICAgICAnKGNjMCknLiAgRG9pbmcgc28gd291bGQgY29uZnVzZSB0aGUgb3B0aW1pemVyIHNpbmNlIGl0IHdvdWxkIG5vCiAgICAgbG9uZ2VyIGJlIGNsZWFyIHdoaWNoICdzZXQnIG9wZXJhdGlvbnMgd2VyZSBjb21wYXJpc29ucy4gIFRoZQogICAgICdjbXBNJyBwYXR0ZXJucyBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkLgoKJ21vdm1lbU0nCiAgICAgQmxvY2sgbW92ZSBpbnN0cnVjdGlvbi4gIFRoZSBkZXN0aW5hdGlvbiBhbmQgc291cmNlIGJsb2NrcyBvZgogICAgIG1lbW9yeSBhcmUgdGhlIGZpcnN0IHR3byBvcGVyYW5kcywgYW5kIGJvdGggYXJlICdtZW06QkxLJ3Mgd2l0aCBhbgogICAgIGFkZHJlc3MgaW4gbW9kZSAnUG1vZGUnLgoKICAgICBUaGUgbnVtYmVyIG9mIGJ5dGVzIHRvIG1vdmUgaXMgdGhlIHRoaXJkIG9wZXJhbmQsIGluIG1vZGUgTS4KICAgICBVc3VhbGx5LCB5b3Ugc3BlY2lmeSAnd29yZF9tb2RlJyBmb3IgTS4gIEhvd2V2ZXIsIGlmIHlvdSBjYW4KICAgICBnZW5lcmF0ZSBiZXR0ZXIgY29kZSBrbm93aW5nIHRoZSByYW5nZSBvZiB2YWxpZCBsZW5ndGhzIGlzIHNtYWxsZXIKICAgICB0aGFuIHRob3NlIHJlcHJlc2VudGFibGUgaW4gYSBmdWxsIHdvcmQsIHlvdSBzaG91bGQgcHJvdmlkZSBhCiAgICAgcGF0dGVybiB3aXRoIGEgbW9kZSBjb3JyZXNwb25kaW5nIHRvIHRoZSByYW5nZSBvZiB2YWx1ZXMgeW91IGNhbgogICAgIGhhbmRsZSBlZmZpY2llbnRseSAoZS5nLiwgJ1FJbW9kZScgZm9yIHZhbHVlcyBpbiB0aGUgcmFuZ2UgMC0xMjc7CiAgICAgbm90ZSB3ZSBhdm9pZCBudW1iZXJzIHRoYXQgYXBwZWFyIG5lZ2F0aXZlKSBhbmQgYWxzbyBhIHBhdHRlcm4gd2l0aAogICAgICd3b3JkX21vZGUnLgoKICAgICBUaGUgZm91cnRoIG9wZXJhbmQgaXMgdGhlIGtub3duIHNoYXJlZCBhbGlnbm1lbnQgb2YgdGhlIHNvdXJjZSBhbmQKICAgICBkZXN0aW5hdGlvbiwgaW4gdGhlIGZvcm0gb2YgYSAnY29uc3RfaW50JyBydHguICBUaHVzLCBpZiB0aGUKICAgICBjb21waWxlciBrbm93cyB0aGF0IGJvdGggc291cmNlIGFuZCBkZXN0aW5hdGlvbiBhcmUgd29yZC1hbGlnbmVkLAogICAgIGl0IG1heSBwcm92aWRlIHRoZSB2YWx1ZSA0IGZvciB0aGlzIG9wZXJhbmQuCgogICAgIE9wdGlvbmFsIG9wZXJhbmRzIDUgYW5kIDYgc3BlY2lmeSBleHBlY3RlZCBhbGlnbm1lbnQgYW5kIHNpemUgb2YKICAgICBibG9jayByZXNwZWN0aXZlbHkuICBUaGUgZXhwZWN0ZWQgYWxpZ25tZW50IGRpZmZlcnMgZnJvbSBhbGlnbm1lbnQKICAgICBpbiBvcGVyYW5kIDQgaW4gYSB3YXkgdGhhdCB0aGUgYmxvY2tzIGFyZSBub3QgcmVxdWlyZWQgdG8gYmUKICAgICBhbGlnbmVkIGFjY29yZGluZyB0byBpdCBpbiBhbGwgY2FzZXMuICBFeHBlY3RlZCBzaXplLCB3aGVuIHVua25vd24sCiAgICAgaXMgc2V0IHRvICcoY29uc3RfaW50IC0xKScuCgogICAgIERlc2NyaXB0aW9ucyBvZiBtdWx0aXBsZSAnbW92bWVtTScgcGF0dGVybnMgY2FuIG9ubHkgYmUgYmVuZWZpY2lhbAogICAgIGlmIHRoZSBwYXR0ZXJucyBmb3Igc21hbGxlciBtb2RlcyBoYXZlIGZld2VyIHJlc3RyaWN0aW9ucyBvbiB0aGVpcgogICAgIGZpcnN0LCBzZWNvbmQgYW5kIGZvdXJ0aCBvcGVyYW5kcy4gIE5vdGUgdGhhdCB0aGUgbW9kZSBNIGluCiAgICAgJ21vdm1lbU0nIGRvZXMgbm90IGltcG9zZSBhbnkgcmVzdHJpY3Rpb24gb24gdGhlIG1vZGUgb2YKICAgICBpbmRpdmlkdWFsbHkgbW92ZWQgZGF0YSB1bml0cyBpbiB0aGUgYmxvY2suCgogICAgIFRoZXNlIHBhdHRlcm5zIG5lZWQgbm90IGdpdmUgc3BlY2lhbCBjb25zaWRlcmF0aW9uIHRvIHRoZQogICAgIHBvc3NpYmlsaXR5IHRoYXQgdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gc3RyaW5ncyBtaWdodCBvdmVybGFwLgoKJ21vdnN0cicKICAgICBTdHJpbmcgY29weSBpbnN0cnVjdGlvbiwgd2l0aCAnc3RwY3B5JyBzZW1hbnRpY3MuICBPcGVyYW5kIDAgaXMgYW4KICAgICBvdXRwdXQgb3BlcmFuZCBpbiBtb2RlICdQbW9kZScuICBUaGUgYWRkcmVzc2VzIG9mIHRoZSBkZXN0aW5hdGlvbgogICAgIGFuZCBzb3VyY2Ugc3RyaW5ncyBhcmUgb3BlcmFuZHMgMSBhbmQgMiwgYW5kIGJvdGggYXJlICdtZW06QkxLJ3MKICAgICB3aXRoIGFkZHJlc3NlcyBpbiBtb2RlICdQbW9kZScuICBUaGUgZXhlY3V0aW9uIG9mIHRoZSBleHBhbnNpb24gb2YKICAgICB0aGlzIHBhdHRlcm4gc2hvdWxkIHN0b3JlIGluIG9wZXJhbmQgMCB0aGUgYWRkcmVzcyBpbiB3aGljaCB0aGUKICAgICAnTlVMJyB0ZXJtaW5hdG9yIHdhcyBzdG9yZWQgaW4gdGhlIGRlc3RpbmF0aW9uIHN0cmluZy4KCidzZXRtZW1NJwogICAgIEJsb2NrIHNldCBpbnN0cnVjdGlvbi4gIFRoZSBkZXN0aW5hdGlvbiBzdHJpbmcgaXMgdGhlIGZpcnN0CiAgICAgb3BlcmFuZCwgZ2l2ZW4gYXMgYSAnbWVtOkJMSycgd2hvc2UgYWRkcmVzcyBpcyBpbiBtb2RlICdQbW9kZScuCiAgICAgVGhlIG51bWJlciBvZiBieXRlcyB0byBzZXQgaXMgdGhlIHNlY29uZCBvcGVyYW5kLCBpbiBtb2RlIE0uICBUaGUKICAgICB2YWx1ZSB0byBpbml0aWFsaXplIHRoZSBtZW1vcnkgd2l0aCBpcyB0aGUgdGhpcmQgb3BlcmFuZC4gIFRhcmdldHMKICAgICB0aGF0IG9ubHkgc3VwcG9ydCB0aGUgY2xlYXJpbmcgb2YgbWVtb3J5IHNob3VsZCByZWplY3QgYW55IHZhbHVlCiAgICAgdGhhdCBpcyBub3QgdGhlIGNvbnN0YW50IDAuICBTZWUgJ21vdm1lbU0nIGZvciBhIGRpc2N1c3Npb24gb2YgdGhlCiAgICAgY2hvaWNlIG9mIG1vZGUuCgogICAgIFRoZSBmb3VydGggb3BlcmFuZCBpcyB0aGUga25vd24gYWxpZ25tZW50IG9mIHRoZSBkZXN0aW5hdGlvbiwgaW4KICAgICB0aGUgZm9ybSBvZiBhICdjb25zdF9pbnQnIHJ0eC4gIFRodXMsIGlmIHRoZSBjb21waWxlciBrbm93cyB0aGF0CiAgICAgdGhlIGRlc3RpbmF0aW9uIGlzIHdvcmQtYWxpZ25lZCwgaXQgbWF5IHByb3ZpZGUgdGhlIHZhbHVlIDQgZm9yCiAgICAgdGhpcyBvcGVyYW5kLgoKICAgICBPcHRpb25hbCBvcGVyYW5kcyA1IGFuZCA2IHNwZWNpZnkgZXhwZWN0ZWQgYWxpZ25tZW50IGFuZCBzaXplIG9mCiAgICAgYmxvY2sgcmVzcGVjdGl2ZWx5LiAgVGhlIGV4cGVjdGVkIGFsaWdubWVudCBkaWZmZXJzIGZyb20gYWxpZ25tZW50CiAgICAgaW4gb3BlcmFuZCA0IGluIGEgd2F5IHRoYXQgdGhlIGJsb2NrcyBhcmUgbm90IHJlcXVpcmVkIHRvIGJlCiAgICAgYWxpZ25lZCBhY2NvcmRpbmcgdG8gaXQgaW4gYWxsIGNhc2VzLiAgRXhwZWN0ZWQgc2l6ZSwgd2hlbiB1bmtub3duLAogICAgIGlzIHNldCB0byAnKGNvbnN0X2ludCAtMSknLgoKICAgICBUaGUgdXNlIGZvciBtdWx0aXBsZSAnc2V0bWVtTScgaXMgYXMgZm9yICdtb3ZtZW1NJy4KCidjbXBzdHJuTScKICAgICBTdHJpbmcgY29tcGFyZSBpbnN0cnVjdGlvbiwgd2l0aCBmaXZlIG9wZXJhbmRzLiAgT3BlcmFuZCAwIGlzIHRoZQogICAgIG91dHB1dDsgaXQgaGFzIG1vZGUgTS4gIFRoZSByZW1haW5pbmcgZm91ciBvcGVyYW5kcyBhcmUgbGlrZSB0aGUKICAgICBvcGVyYW5kcyBvZiAnbW92bWVtTScuICBUaGUgdHdvIG1lbW9yeSBibG9ja3Mgc3BlY2lmaWVkIGFyZQogICAgIGNvbXBhcmVkIGJ5dGUgYnkgYnl0ZSBpbiBsZXhpY29ncmFwaGljIG9yZGVyIHN0YXJ0aW5nIGF0IHRoZQogICAgIGJlZ2lubmluZyBvZiBlYWNoIHN0cmluZy4gIFRoZSBpbnN0cnVjdGlvbiBpcyBub3QgYWxsb3dlZCB0bwogICAgIHByZWZldGNoIG1vcmUgdGhhbiBvbmUgYnl0ZSBhdCBhIHRpbWUgc2luY2UgZWl0aGVyIHN0cmluZyBtYXkgZW5kCiAgICAgaW4gdGhlIGZpcnN0IGJ5dGUgYW5kIHJlYWRpbmcgcGFzdCB0aGF0IG1heSBhY2Nlc3MgYW4gaW52YWxpZCBwYWdlCiAgICAgb3Igc2VnbWVudCBhbmQgY2F1c2UgYSBmYXVsdC4gIFRoZSBlZmZlY3Qgb2YgdGhlIGluc3RydWN0aW9uIGlzIHRvCiAgICAgc3RvcmUgYSB2YWx1ZSBpbiBvcGVyYW5kIDAgd2hvc2Ugc2lnbiBpbmRpY2F0ZXMgdGhlIHJlc3VsdCBvZiB0aGUKICAgICBjb21wYXJpc29uLgoKJ2NtcHN0ck0nCiAgICAgU3RyaW5nIGNvbXBhcmUgaW5zdHJ1Y3Rpb24sIHdpdGhvdXQga25vd24gbWF4aW11bSBsZW5ndGguICBPcGVyYW5kCiAgICAgMCBpcyB0aGUgb3V0cHV0OyBpdCBoYXMgbW9kZSBNLiAgVGhlIHNlY29uZCBhbmQgdGhpcmQgb3BlcmFuZCBhcmUKICAgICB0aGUgYmxvY2tzIG9mIG1lbW9yeSB0byBiZSBjb21wYXJlZDsgYm90aCBhcmUgJ21lbTpCTEsnIHdpdGggYW4KICAgICBhZGRyZXNzIGluIG1vZGUgJ1Btb2RlJy4KCiAgICAgVGhlIGZvdXJ0aCBvcGVyYW5kIGlzIHRoZSBrbm93biBzaGFyZWQgYWxpZ25tZW50IG9mIHRoZSBzb3VyY2UgYW5kCiAgICAgZGVzdGluYXRpb24sIGluIHRoZSBmb3JtIG9mIGEgJ2NvbnN0X2ludCcgcnR4LiAgVGh1cywgaWYgdGhlCiAgICAgY29tcGlsZXIga25vd3MgdGhhdCBib3RoIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYXJlIHdvcmQtYWxpZ25lZCwKICAgICBpdCBtYXkgcHJvdmlkZSB0aGUgdmFsdWUgNCBmb3IgdGhpcyBvcGVyYW5kLgoKICAgICBUaGUgdHdvIG1lbW9yeSBibG9ja3Mgc3BlY2lmaWVkIGFyZSBjb21wYXJlZCBieXRlIGJ5IGJ5dGUgaW4KICAgICBsZXhpY29ncmFwaGljIG9yZGVyIHN0YXJ0aW5nIGF0IHRoZSBiZWdpbm5pbmcgb2YgZWFjaCBzdHJpbmcuICBUaGUKICAgICBpbnN0cnVjdGlvbiBpcyBub3QgYWxsb3dlZCB0byBwcmVmZXRjaCBtb3JlIHRoYW4gb25lIGJ5dGUgYXQgYSB0aW1lCiAgICAgc2luY2UgZWl0aGVyIHN0cmluZyBtYXkgZW5kIGluIHRoZSBmaXJzdCBieXRlIGFuZCByZWFkaW5nIHBhc3QgdGhhdAogICAgIG1heSBhY2Nlc3MgYW4gaW52YWxpZCBwYWdlIG9yIHNlZ21lbnQgYW5kIGNhdXNlIGEgZmF1bHQuICBUaGUKICAgICBlZmZlY3Qgb2YgdGhlIGluc3RydWN0aW9uIGlzIHRvIHN0b3JlIGEgdmFsdWUgaW4gb3BlcmFuZCAwIHdob3NlCiAgICAgc2lnbiBpbmRpY2F0ZXMgdGhlIHJlc3VsdCBvZiB0aGUgY29tcGFyaXNvbi4KCidjbXBtZW1NJwogICAgIEJsb2NrIGNvbXBhcmUgaW5zdHJ1Y3Rpb24sIHdpdGggZml2ZSBvcGVyYW5kcyBsaWtlIHRoZSBvcGVyYW5kcyBvZgogICAgICdjbXBzdHJNJy4gIFRoZSB0d28gbWVtb3J5IGJsb2NrcyBzcGVjaWZpZWQgYXJlIGNvbXBhcmVkIGJ5dGUgYnkKICAgICBieXRlIGluIGxleGljb2dyYXBoaWMgb3JkZXIgc3RhcnRpbmcgYXQgdGhlIGJlZ2lubmluZyBvZiBlYWNoCiAgICAgYmxvY2suICBVbmxpa2UgJ2NtcHN0ck0nIHRoZSBpbnN0cnVjdGlvbiBjYW4gcHJlZmV0Y2ggYW55IGJ5dGVzIGluCiAgICAgdGhlIHR3byBtZW1vcnkgYmxvY2tzLiAgVGhlIGVmZmVjdCBvZiB0aGUgaW5zdHJ1Y3Rpb24gaXMgdG8gc3RvcmUgYQogICAgIHZhbHVlIGluIG9wZXJhbmQgMCB3aG9zZSBzaWduIGluZGljYXRlcyB0aGUgcmVzdWx0IG9mIHRoZQogICAgIGNvbXBhcmlzb24uCgonc3RybGVuTScKICAgICBDb21wdXRlIHRoZSBsZW5ndGggb2YgYSBzdHJpbmcsIHdpdGggdGhyZWUgb3BlcmFuZHMuICBPcGVyYW5kIDAgaXMKICAgICB0aGUgcmVzdWx0IChvZiBtb2RlIE0pLCBvcGVyYW5kIDEgaXMgYSAnbWVtJyByZWZlcnJpbmcgdG8gdGhlIGZpcnN0CiAgICAgY2hhcmFjdGVyIG9mIHRoZSBzdHJpbmcsIG9wZXJhbmQgMiBpcyB0aGUgY2hhcmFjdGVyIHRvIHNlYXJjaCBmb3IKICAgICAobm9ybWFsbHkgemVybyksIGFuZCBvcGVyYW5kIDMgaXMgYSBjb25zdGFudCBkZXNjcmliaW5nIHRoZSBrbm93bgogICAgIGFsaWdubWVudCBvZiB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzdHJpbmcuCgonZmxvYXRNTjInCiAgICAgQ29udmVydCBzaWduZWQgaW50ZWdlciBvcGVyYW5kIDEgKHZhbGlkIGZvciBmaXhlZCBwb2ludCBtb2RlIE0pIHRvCiAgICAgZmxvYXRpbmcgcG9pbnQgbW9kZSBOIGFuZCBzdG9yZSBpbiBvcGVyYW5kIDAgKHdoaWNoIGhhcyBtb2RlIE4pLgoKJ2Zsb2F0dW5zTU4yJwogICAgIENvbnZlcnQgdW5zaWduZWQgaW50ZWdlciBvcGVyYW5kIDEgKHZhbGlkIGZvciBmaXhlZCBwb2ludCBtb2RlIE0pCiAgICAgdG8gZmxvYXRpbmcgcG9pbnQgbW9kZSBOIGFuZCBzdG9yZSBpbiBvcGVyYW5kIDAgKHdoaWNoIGhhcyBtb2RlIE4pLgoKJ2ZpeE1OMicKICAgICBDb252ZXJ0IG9wZXJhbmQgMSAodmFsaWQgZm9yIGZsb2F0aW5nIHBvaW50IG1vZGUgTSkgdG8gZml4ZWQgcG9pbnQKICAgICBtb2RlIE4gYXMgYSBzaWduZWQgbnVtYmVyIGFuZCBzdG9yZSBpbiBvcGVyYW5kIDAgKHdoaWNoIGhhcyBtb2RlCiAgICAgTikuICBUaGlzIGluc3RydWN0aW9uJ3MgcmVzdWx0IGlzIGRlZmluZWQgb25seSB3aGVuIHRoZSB2YWx1ZSBvZgogICAgIG9wZXJhbmQgMSBpcyBhbiBpbnRlZ2VyLgoKICAgICBJZiB0aGUgbWFjaGluZSBkZXNjcmlwdGlvbiBkZWZpbmVzIHRoaXMgcGF0dGVybiwgaXQgYWxzbyBuZWVkcyB0bwogICAgIGRlZmluZSB0aGUgJ2Z0cnVuYycgcGF0dGVybi4KCidmaXh1bnNNTjInCiAgICAgQ29udmVydCBvcGVyYW5kIDEgKHZhbGlkIGZvciBmbG9hdGluZyBwb2ludCBtb2RlIE0pIHRvIGZpeGVkIHBvaW50CiAgICAgbW9kZSBOIGFzIGFuIHVuc2lnbmVkIG51bWJlciBhbmQgc3RvcmUgaW4gb3BlcmFuZCAwICh3aGljaCBoYXMgbW9kZQogICAgIE4pLiAgVGhpcyBpbnN0cnVjdGlvbidzIHJlc3VsdCBpcyBkZWZpbmVkIG9ubHkgd2hlbiB0aGUgdmFsdWUgb2YKICAgICBvcGVyYW5kIDEgaXMgYW4gaW50ZWdlci4KCidmdHJ1bmNNMicKICAgICBDb252ZXJ0IG9wZXJhbmQgMSAodmFsaWQgZm9yIGZsb2F0aW5nIHBvaW50IG1vZGUgTSkgdG8gYW4gaW50ZWdlcgogICAgIHZhbHVlLCBzdGlsbCByZXByZXNlbnRlZCBpbiBmbG9hdGluZyBwb2ludCBtb2RlIE0sIGFuZCBzdG9yZSBpdCBpbgogICAgIG9wZXJhbmQgMCAodmFsaWQgZm9yIGZsb2F0aW5nIHBvaW50IG1vZGUgTSkuCgonZml4X3RydW5jTU4yJwogICAgIExpa2UgJ2ZpeE1OMicgYnV0IHdvcmtzIGZvciBhbnkgZmxvYXRpbmcgcG9pbnQgdmFsdWUgb2YgbW9kZSBNIGJ5CiAgICAgY29udmVydGluZyB0aGUgdmFsdWUgdG8gYW4gaW50ZWdlci4KCidmaXh1bnNfdHJ1bmNNTjInCiAgICAgTGlrZSAnZml4dW5zTU4yJyBidXQgd29ya3MgZm9yIGFueSBmbG9hdGluZyBwb2ludCB2YWx1ZSBvZiBtb2RlIE0KICAgICBieSBjb252ZXJ0aW5nIHRoZSB2YWx1ZSB0byBhbiBpbnRlZ2VyLgoKJ3RydW5jTU4yJwogICAgIFRydW5jYXRlIG9wZXJhbmQgMSAodmFsaWQgZm9yIG1vZGUgTSkgdG8gbW9kZSBOIGFuZCBzdG9yZSBpbgogICAgIG9wZXJhbmQgMCAod2hpY2ggaGFzIG1vZGUgTikuICBCb3RoIG1vZGVzIG11c3QgYmUgZml4ZWQgcG9pbnQgb3IKICAgICBib3RoIGZsb2F0aW5nIHBvaW50LgoKJ2V4dGVuZE1OMicKICAgICBTaWduLWV4dGVuZCBvcGVyYW5kIDEgKHZhbGlkIGZvciBtb2RlIE0pIHRvIG1vZGUgTiBhbmQgc3RvcmUgaW4KICAgICBvcGVyYW5kIDAgKHdoaWNoIGhhcyBtb2RlIE4pLiAgQm90aCBtb2RlcyBtdXN0IGJlIGZpeGVkIHBvaW50IG9yCiAgICAgYm90aCBmbG9hdGluZyBwb2ludC4KCid6ZXJvX2V4dGVuZE1OMicKICAgICBaZXJvLWV4dGVuZCBvcGVyYW5kIDEgKHZhbGlkIGZvciBtb2RlIE0pIHRvIG1vZGUgTiBhbmQgc3RvcmUgaW4KICAgICBvcGVyYW5kIDAgKHdoaWNoIGhhcyBtb2RlIE4pLiAgQm90aCBtb2RlcyBtdXN0IGJlIGZpeGVkIHBvaW50LgoKJ2ZyYWN0TU4yJwogICAgIENvbnZlcnQgb3BlcmFuZCAxIG9mIG1vZGUgTSB0byBtb2RlIE4gYW5kIHN0b3JlIGluIG9wZXJhbmQgMCAod2hpY2gKICAgICBoYXMgbW9kZSBOKS4gIE1vZGUgTSBhbmQgbW9kZSBOIGNvdWxkIGJlIGZpeGVkLXBvaW50IHRvCiAgICAgZml4ZWQtcG9pbnQsIHNpZ25lZCBpbnRlZ2VyIHRvIGZpeGVkLXBvaW50LCBmaXhlZC1wb2ludCB0byBzaWduZWQKICAgICBpbnRlZ2VyLCBmbG9hdGluZy1wb2ludCB0byBmaXhlZC1wb2ludCwgb3IgZml4ZWQtcG9pbnQgdG8KICAgICBmbG9hdGluZy1wb2ludC4gIFdoZW4gb3ZlcmZsb3dzIG9yIHVuZGVyZmxvd3MgaGFwcGVuLCB0aGUgcmVzdWx0cwogICAgIGFyZSB1bmRlZmluZWQuCgonc2F0ZnJhY3RNTjInCiAgICAgQ29udmVydCBvcGVyYW5kIDEgb2YgbW9kZSBNIHRvIG1vZGUgTiBhbmQgc3RvcmUgaW4gb3BlcmFuZCAwICh3aGljaAogICAgIGhhcyBtb2RlIE4pLiAgTW9kZSBNIGFuZCBtb2RlIE4gY291bGQgYmUgZml4ZWQtcG9pbnQgdG8KICAgICBmaXhlZC1wb2ludCwgc2lnbmVkIGludGVnZXIgdG8gZml4ZWQtcG9pbnQsIG9yIGZsb2F0aW5nLXBvaW50IHRvCiAgICAgZml4ZWQtcG9pbnQuICBXaGVuIG92ZXJmbG93cyBvciB1bmRlcmZsb3dzIGhhcHBlbiwgdGhlIGluc3RydWN0aW9uCiAgICAgc2F0dXJhdGVzIHRoZSByZXN1bHRzIHRvIHRoZSBtYXhpbXVtIG9yIHRoZSBtaW5pbXVtLgoKJ2ZyYWN0dW5zTU4yJwogICAgIENvbnZlcnQgb3BlcmFuZCAxIG9mIG1vZGUgTSB0byBtb2RlIE4gYW5kIHN0b3JlIGluIG9wZXJhbmQgMCAod2hpY2gKICAgICBoYXMgbW9kZSBOKS4gIE1vZGUgTSBhbmQgbW9kZSBOIGNvdWxkIGJlIHVuc2lnbmVkIGludGVnZXIgdG8KICAgICBmaXhlZC1wb2ludCwgb3IgZml4ZWQtcG9pbnQgdG8gdW5zaWduZWQgaW50ZWdlci4gIFdoZW4gb3ZlcmZsb3dzIG9yCiAgICAgdW5kZXJmbG93cyBoYXBwZW4sIHRoZSByZXN1bHRzIGFyZSB1bmRlZmluZWQuCgonc2F0ZnJhY3R1bnNNTjInCiAgICAgQ29udmVydCB1bnNpZ25lZCBpbnRlZ2VyIG9wZXJhbmQgMSBvZiBtb2RlIE0gdG8gZml4ZWQtcG9pbnQgbW9kZSBOCiAgICAgYW5kIHN0b3JlIGluIG9wZXJhbmQgMCAod2hpY2ggaGFzIG1vZGUgTikuICBXaGVuIG92ZXJmbG93cyBvcgogICAgIHVuZGVyZmxvd3MgaGFwcGVuLCB0aGUgaW5zdHJ1Y3Rpb24gc2F0dXJhdGVzIHRoZSByZXN1bHRzIHRvIHRoZQogICAgIG1heGltdW0gb3IgdGhlIG1pbmltdW0uCgonZXh0dicKICAgICBFeHRyYWN0IGEgYml0LWZpZWxkIGZyb20gb3BlcmFuZCAxIChhIHJlZ2lzdGVyIG9yIG1lbW9yeSBvcGVyYW5kKSwKICAgICB3aGVyZSBvcGVyYW5kIDIgc3BlY2lmaWVzIHRoZSB3aWR0aCBpbiBiaXRzIGFuZCBvcGVyYW5kIDMgdGhlCiAgICAgc3RhcnRpbmcgYml0LCBhbmQgc3RvcmUgaXQgaW4gb3BlcmFuZCAwLiAgT3BlcmFuZCAwIG11c3QgaGF2ZSBtb2RlCiAgICAgJ3dvcmRfbW9kZScuICBPcGVyYW5kIDEgbWF5IGhhdmUgbW9kZSAnYnl0ZV9tb2RlJyBvciAnd29yZF9tb2RlJzsKICAgICBvZnRlbiAnd29yZF9tb2RlJyBpcyBhbGxvd2VkIG9ubHkgZm9yIHJlZ2lzdGVycy4gIE9wZXJhbmRzIDIgYW5kIDMKICAgICBtdXN0IGJlIHZhbGlkIGZvciAnd29yZF9tb2RlJy4KCiAgICAgVGhlIFJUTCBnZW5lcmF0aW9uIHBhc3MgZ2VuZXJhdGVzIHRoaXMgaW5zdHJ1Y3Rpb24gb25seSB3aXRoCiAgICAgY29uc3RhbnRzIGZvciBvcGVyYW5kcyAyIGFuZCAzIGFuZCB0aGUgY29uc3RhbnQgaXMgbmV2ZXIgemVybyBmb3IKICAgICBvcGVyYW5kIDIuCgogICAgIFRoZSBiaXQtZmllbGQgdmFsdWUgaXMgc2lnbi1leHRlbmRlZCB0byBhIGZ1bGwgd29yZCBpbnRlZ2VyIGJlZm9yZQogICAgIGl0IGlzIHN0b3JlZCBpbiBvcGVyYW5kIDAuCgonZXh0enYnCiAgICAgTGlrZSAnZXh0dicgZXhjZXB0IHRoYXQgdGhlIGJpdC1maWVsZCB2YWx1ZSBpcyB6ZXJvLWV4dGVuZGVkLgoKJ2luc3YnCiAgICAgU3RvcmUgb3BlcmFuZCAzICh3aGljaCBtdXN0IGJlIHZhbGlkIGZvciAnd29yZF9tb2RlJykgaW50byBhCiAgICAgYml0LWZpZWxkIGluIG9wZXJhbmQgMCwgd2hlcmUgb3BlcmFuZCAxIHNwZWNpZmllcyB0aGUgd2lkdGggaW4gYml0cwogICAgIGFuZCBvcGVyYW5kIDIgdGhlIHN0YXJ0aW5nIGJpdC4gIE9wZXJhbmQgMCBtYXkgaGF2ZSBtb2RlCiAgICAgJ2J5dGVfbW9kZScgb3IgJ3dvcmRfbW9kZSc7IG9mdGVuICd3b3JkX21vZGUnIGlzIGFsbG93ZWQgb25seSBmb3IKICAgICByZWdpc3RlcnMuICBPcGVyYW5kcyAxIGFuZCAyIG11c3QgYmUgdmFsaWQgZm9yICd3b3JkX21vZGUnLgoKICAgICBUaGUgUlRMIGdlbmVyYXRpb24gcGFzcyBnZW5lcmF0ZXMgdGhpcyBpbnN0cnVjdGlvbiBvbmx5IHdpdGgKICAgICBjb25zdGFudHMgZm9yIG9wZXJhbmRzIDEgYW5kIDIgYW5kIHRoZSBjb25zdGFudCBpcyBuZXZlciB6ZXJvIGZvcgogICAgIG9wZXJhbmQgMS4KCidtb3ZNT0RFY2MnCiAgICAgQ29uZGl0aW9uYWxseSBtb3ZlIG9wZXJhbmQgMiBvciBvcGVyYW5kIDMgaW50byBvcGVyYW5kIDAgYWNjb3JkaW5nCiAgICAgdG8gdGhlIGNvbXBhcmlzb24gaW4gb3BlcmFuZCAxLiAgSWYgdGhlIGNvbXBhcmlzb24gaXMgdHJ1ZSwgb3BlcmFuZAogICAgIDIgaXMgbW92ZWQgaW50byBvcGVyYW5kIDAsIG90aGVyd2lzZSBvcGVyYW5kIDMgaXMgbW92ZWQuCgogICAgIFRoZSBtb2RlIG9mIHRoZSBvcGVyYW5kcyBiZWluZyBjb21wYXJlZCBuZWVkIG5vdCBiZSB0aGUgc2FtZSBhcyB0aGUKICAgICBvcGVyYW5kcyBiZWluZyBtb3ZlZC4gIFNvbWUgbWFjaGluZXMsIHNwYXJjNjQgZm9yIGV4YW1wbGUsIGhhdmUKICAgICBpbnN0cnVjdGlvbnMgdGhhdCBjb25kaXRpb25hbGx5IG1vdmUgYW4gaW50ZWdlciB2YWx1ZSBiYXNlZCBvbiB0aGUKICAgICBmbG9hdGluZyBwb2ludCBjb25kaXRpb24gY29kZXMgYW5kIHZpY2UgdmVyc2EuCgogICAgIElmIHRoZSBtYWNoaW5lIGRvZXMgbm90IGhhdmUgY29uZGl0aW9uYWwgbW92ZSBpbnN0cnVjdGlvbnMsIGRvIG5vdAogICAgIGRlZmluZSB0aGVzZSBwYXR0ZXJucy4KCidhZGRNT0RFY2MnCiAgICAgU2ltaWxhciB0byAnbW92TU9ERWNjJyBidXQgZm9yIGNvbmRpdGlvbmFsIGFkZGl0aW9uLiAgQ29uZGl0aW9uYWxseQogICAgIG1vdmUgb3BlcmFuZCAyIG9yIChvcGVyYW5kcyAyICsgb3BlcmFuZCAzKSBpbnRvIG9wZXJhbmQgMCBhY2NvcmRpbmcKICAgICB0byB0aGUgY29tcGFyaXNvbiBpbiBvcGVyYW5kIDEuICBJZiB0aGUgY29tcGFyaXNvbiBpcyB0cnVlLCBvcGVyYW5kCiAgICAgMiBpcyBtb3ZlZCBpbnRvIG9wZXJhbmQgMCwgb3RoZXJ3aXNlIChvcGVyYW5kIDIgKyBvcGVyYW5kIDMpIGlzCiAgICAgbW92ZWQuCgonc0NPTkQnCiAgICAgU3RvcmUgemVybyBvciBub256ZXJvIGluIHRoZSBvcGVyYW5kIGFjY29yZGluZyB0byB0aGUgY29uZGl0aW9uCiAgICAgY29kZXMuICBWYWx1ZSBzdG9yZWQgaXMgbm9uemVybyBpZmYgdGhlIGNvbmRpdGlvbiBDT05EIGlzIHRydWUuCiAgICAgQ09ORCBpcyB0aGUgbmFtZSBvZiBhIGNvbXBhcmlzb24gb3BlcmF0aW9uIGV4cHJlc3Npb24gY29kZSwgc3VjaCBhcwogICAgICdlcScsICdsdCcgb3IgJ2xldScuCgogICAgIFlvdSBzcGVjaWZ5IHRoZSBtb2RlIHRoYXQgdGhlIG9wZXJhbmQgbXVzdCBoYXZlIHdoZW4geW91IHdyaXRlIHRoZQogICAgICdtYXRjaF9vcGVyYW5kJyBleHByZXNzaW9uLiAgVGhlIGNvbXBpbGVyIGF1dG9tYXRpY2FsbHkgc2VlcyB3aGljaAogICAgIG1vZGUgeW91IGhhdmUgdXNlZCBhbmQgc3VwcGxpZXMgYW4gb3BlcmFuZCBvZiB0aGF0IG1vZGUuCgogICAgIFRoZSB2YWx1ZSBzdG9yZWQgZm9yIGEgdHJ1ZSBjb25kaXRpb24gbXVzdCBoYXZlIDEgYXMgaXRzIGxvdyBiaXQsCiAgICAgb3IgZWxzZSBtdXN0IGJlIG5lZ2F0aXZlLiAgT3RoZXJ3aXNlIHRoZSBpbnN0cnVjdGlvbiBpcyBub3QKICAgICBzdWl0YWJsZSBhbmQgeW91IHNob3VsZCBvbWl0IGl0IGZyb20gdGhlIG1hY2hpbmUgZGVzY3JpcHRpb24uICBZb3UKICAgICBkZXNjcmliZSB0byB0aGUgY29tcGlsZXIgZXhhY3RseSB3aGljaCB2YWx1ZSBpcyBzdG9yZWQgYnkgZGVmaW5pbmcKICAgICB0aGUgbWFjcm8gJ1NUT1JFX0ZMQUdfVkFMVUUnICgqbm90ZSBNaXNjOjopLiAgSWYgYSBkZXNjcmlwdGlvbgogICAgIGNhbm5vdCBiZSBmb3VuZCB0aGF0IGNhbiBiZSB1c2VkIGZvciBhbGwgdGhlICdzQ09ORCcgcGF0dGVybnMsIHlvdQogICAgIHNob3VsZCBvbWl0IHRob3NlIG9wZXJhdGlvbnMgZnJvbSB0aGUgbWFjaGluZSBkZXNjcmlwdGlvbi4KCiAgICAgVGhlc2Ugb3BlcmF0aW9ucyBtYXkgZmFpbCwgYnV0IHNob3VsZCBkbyBzbyBvbmx5IGluIHJlbGF0aXZlbHkKICAgICB1bmNvbW1vbiBjYXNlczsgaWYgdGhleSB3b3VsZCBmYWlsIGZvciBjb21tb24gY2FzZXMgaW52b2x2aW5nCiAgICAgaW50ZWdlciBjb21wYXJpc29ucywgaXQgaXMgYmVzdCB0byBvbWl0IHRoZXNlIHBhdHRlcm5zLgoKICAgICBJZiB0aGVzZSBvcGVyYXRpb25zIGFyZSBvbWl0dGVkLCB0aGUgY29tcGlsZXIgd2lsbCB1c3VhbGx5IGdlbmVyYXRlCiAgICAgY29kZSB0aGF0IGNvcGllcyB0aGUgY29uc3RhbnQgb25lIHRvIHRoZSB0YXJnZXQgYW5kIGJyYW5jaGVzIGFyb3VuZAogICAgIGFuIGFzc2lnbm1lbnQgb2YgemVybyB0byB0aGUgdGFyZ2V0LiAgSWYgdGhpcyBjb2RlIGlzIG1vcmUKICAgICBlZmZpY2llbnQgdGhhbiB0aGUgcG90ZW50aWFsIGluc3RydWN0aW9ucyB1c2VkIGZvciB0aGUgJ3NDT05EJwogICAgIHBhdHRlcm4gZm9sbG93ZWQgYnkgdGhvc2UgcmVxdWlyZWQgdG8gY29udmVydCB0aGUgcmVzdWx0IGludG8gYSAxCiAgICAgb3IgYSB6ZXJvIGluICdTSW1vZGUnLCB5b3Ugc2hvdWxkIG9taXQgdGhlICdzQ09ORCcgb3BlcmF0aW9ucyBmcm9tCiAgICAgdGhlIG1hY2hpbmUgZGVzY3JpcHRpb24uCgonYkNPTkQnCiAgICAgQ29uZGl0aW9uYWwgYnJhbmNoIGluc3RydWN0aW9uLiAgT3BlcmFuZCAwIGlzIGEgJ2xhYmVsX3JlZicgdGhhdAogICAgIHJlZmVycyB0byB0aGUgbGFiZWwgdG8ganVtcCB0by4gIEp1bXAgaWYgdGhlIGNvbmRpdGlvbiBjb2RlcyBtZWV0CiAgICAgY29uZGl0aW9uIENPTkQuCgogICAgIFNvbWUgbWFjaGluZXMgZG8gbm90IGZvbGxvdyB0aGUgbW9kZWwgYXNzdW1lZCBoZXJlIHdoZXJlIGEKICAgICBjb21wYXJpc29uIGluc3RydWN0aW9uIGlzIGZvbGxvd2VkIGJ5IGEgY29uZGl0aW9uYWwgYnJhbmNoCiAgICAgaW5zdHJ1Y3Rpb24uICBJbiB0aGF0IGNhc2UsIHRoZSAnY21wTScgKGFuZCAndHN0TScpIHBhdHRlcm5zIHNob3VsZAogICAgIHNpbXBseSBzdG9yZSB0aGUgb3BlcmFuZHMgYXdheSBhbmQgZ2VuZXJhdGUgYWxsIHRoZSByZXF1aXJlZCBpbnNucwogICAgIGluIGEgJ2RlZmluZV9leHBhbmQnICgqbm90ZSBFeHBhbmRlciBEZWZpbml0aW9uczo6KSBmb3IgdGhlCiAgICAgY29uZGl0aW9uYWwgYnJhbmNoIG9wZXJhdGlvbnMuICBBbGwgY2FsbHMgdG8gZXhwYW5kICdiQ09ORCcKICAgICBwYXR0ZXJucyBhcmUgaW1tZWRpYXRlbHkgcHJlY2VkZWQgYnkgY2FsbHMgdG8gZXhwYW5kIGVpdGhlciBhCiAgICAgJ2NtcE0nIHBhdHRlcm4gb3IgYSAndHN0TScgcGF0dGVybi4KCiAgICAgTWFjaGluZXMgdGhhdCB1c2UgYSBwc2V1ZG8gcmVnaXN0ZXIgZm9yIHRoZSBjb25kaXRpb24gY29kZSB2YWx1ZSwKICAgICBvciB3aGVyZSB0aGUgbW9kZSB1c2VkIGZvciB0aGUgY29tcGFyaXNvbiBkZXBlbmRzIG9uIHRoZSBjb25kaXRpb24KICAgICBiZWluZyB0ZXN0ZWQsIHNob3VsZCBhbHNvIHVzZSB0aGUgYWJvdmUgbWVjaGFuaXNtLiAgKk5vdGUgSnVtcAogICAgIFBhdHRlcm5zOjouCgogICAgIFRoZSBhYm92ZSBkaXNjdXNzaW9uIGFsc28gYXBwbGllcyB0byB0aGUgJ21vdk1PREVjYycgYW5kICdzQ09ORCcKICAgICBwYXR0ZXJucy4KCidjYnJhbmNoTU9ERTQnCiAgICAgQ29uZGl0aW9uYWwgYnJhbmNoIGluc3RydWN0aW9uIGNvbWJpbmVkIHdpdGggYSBjb21wYXJlIGluc3RydWN0aW9uLgogICAgIE9wZXJhbmQgMCBpcyBhIGNvbXBhcmlzb24gb3BlcmF0b3IuICBPcGVyYW5kIDEgYW5kIG9wZXJhbmQgMiBhcmUKICAgICB0aGUgZmlyc3QgYW5kIHNlY29uZCBvcGVyYW5kcyBvZiB0aGUgY29tcGFyaXNvbiwgcmVzcGVjdGl2ZWx5LgogICAgIE9wZXJhbmQgMyBpcyBhICdsYWJlbF9yZWYnIHRoYXQgcmVmZXJzIHRvIHRoZSBsYWJlbCB0byBqdW1wIHRvLgoKJ2p1bXAnCiAgICAgQSBqdW1wIGluc2lkZSBhIGZ1bmN0aW9uOyBhbiB1bmNvbmRpdGlvbmFsIGJyYW5jaC4gIE9wZXJhbmQgMCBpcwogICAgIHRoZSAnbGFiZWxfcmVmJyBvZiB0aGUgbGFiZWwgdG8ganVtcCB0by4gIFRoaXMgcGF0dGVybiBuYW1lIGlzCiAgICAgbWFuZGF0b3J5IG9uIGFsbCBtYWNoaW5lcy4KCidjYWxsJwogICAgIFN1YnJvdXRpbmUgY2FsbCBpbnN0cnVjdGlvbiByZXR1cm5pbmcgbm8gdmFsdWUuICBPcGVyYW5kIDAgaXMgdGhlCiAgICAgZnVuY3Rpb24gdG8gY2FsbDsgb3BlcmFuZCAxIGlzIHRoZSBudW1iZXIgb2YgYnl0ZXMgb2YgYXJndW1lbnRzCiAgICAgcHVzaGVkIGFzIGEgJ2NvbnN0X2ludCc7IG9wZXJhbmQgMiBpcyB0aGUgbnVtYmVyIG9mIHJlZ2lzdGVycyB1c2VkCiAgICAgYXMgb3BlcmFuZHMuCgogICAgIE9uIG1vc3QgbWFjaGluZXMsIG9wZXJhbmQgMiBpcyBub3QgYWN0dWFsbHkgc3RvcmVkIGludG8gdGhlIFJUTAogICAgIHBhdHRlcm4uICBJdCBpcyBzdXBwbGllZCBmb3IgdGhlIHNha2Ugb2Ygc29tZSBSSVNDIG1hY2hpbmVzIHdoaWNoCiAgICAgbmVlZCB0byBwdXQgdGhpcyBpbmZvcm1hdGlvbiBpbnRvIHRoZSBhc3NlbWJsZXIgY29kZTsgdGhleSBjYW4gcHV0CiAgICAgaXQgaW4gdGhlIFJUTCBpbnN0ZWFkIG9mIG9wZXJhbmQgMS4KCiAgICAgT3BlcmFuZCAwIHNob3VsZCBiZSBhICdtZW0nIFJUWCB3aG9zZSBhZGRyZXNzIGlzIHRoZSBhZGRyZXNzIG9mIHRoZQogICAgIGZ1bmN0aW9uLiAgTm90ZSwgaG93ZXZlciwgdGhhdCB0aGlzIGFkZHJlc3MgY2FuIGJlIGEgJ3N5bWJvbF9yZWYnCiAgICAgZXhwcmVzc2lvbiBldmVuIGlmIGl0IHdvdWxkIG5vdCBiZSBhIGxlZ2l0aW1hdGUgbWVtb3J5IGFkZHJlc3Mgb24KICAgICB0aGUgdGFyZ2V0IG1hY2hpbmUuICBJZiBpdCBpcyBhbHNvIG5vdCBhIHZhbGlkIGFyZ3VtZW50IGZvciBhIGNhbGwKICAgICBpbnN0cnVjdGlvbiwgdGhlIHBhdHRlcm4gZm9yIHRoaXMgb3BlcmF0aW9uIHNob3VsZCBiZSBhCiAgICAgJ2RlZmluZV9leHBhbmQnICgqbm90ZSBFeHBhbmRlciBEZWZpbml0aW9uczo6KSB0aGF0IHBsYWNlcyB0aGUKICAgICBhZGRyZXNzIGludG8gYSByZWdpc3RlciBhbmQgdXNlcyB0aGF0IHJlZ2lzdGVyIGluIHRoZSBjYWxsCiAgICAgaW5zdHJ1Y3Rpb24uCgonY2FsbF92YWx1ZScKICAgICBTdWJyb3V0aW5lIGNhbGwgaW5zdHJ1Y3Rpb24gcmV0dXJuaW5nIGEgdmFsdWUuICBPcGVyYW5kIDAgaXMgdGhlCiAgICAgaGFyZCByZWdpc3RlciBpbiB3aGljaCB0aGUgdmFsdWUgaXMgcmV0dXJuZWQuICBUaGVyZSBhcmUgdGhyZWUgbW9yZQogICAgIG9wZXJhbmRzLCB0aGUgc2FtZSBhcyB0aGUgdGhyZWUgb3BlcmFuZHMgb2YgdGhlICdjYWxsJyBpbnN0cnVjdGlvbgogICAgIChidXQgd2l0aCBudW1iZXJzIGluY3JlYXNlZCBieSBvbmUpLgoKICAgICBTdWJyb3V0aW5lcyB0aGF0IHJldHVybiAnQkxLbW9kZScgb2JqZWN0cyB1c2UgdGhlICdjYWxsJyBpbnNuLgoKJ2NhbGxfcG9wJywgJ2NhbGxfdmFsdWVfcG9wJwogICAgIFNpbWlsYXIgdG8gJ2NhbGwnIGFuZCAnY2FsbF92YWx1ZScsIGV4Y2VwdCB1c2VkIGlmIGRlZmluZWQgYW5kIGlmCiAgICAgJ1JFVFVSTl9QT1BTX0FSR1MnIGlzIG5vbnplcm8uICBUaGV5IHNob3VsZCBlbWl0IGEgJ3BhcmFsbGVsJyB0aGF0CiAgICAgY29udGFpbnMgYm90aCB0aGUgZnVuY3Rpb24gY2FsbCBhbmQgYSAnc2V0JyB0byBpbmRpY2F0ZSB0aGUKICAgICBhZGp1c3RtZW50IG1hZGUgdG8gdGhlIGZyYW1lIHBvaW50ZXIuCgogICAgIEZvciBtYWNoaW5lcyB3aGVyZSAnUkVUVVJOX1BPUFNfQVJHUycgY2FuIGJlIG5vbnplcm8sIHRoZSB1c2Ugb2YKICAgICB0aGVzZSBwYXR0ZXJucyBpbmNyZWFzZXMgdGhlIG51bWJlciBvZiBmdW5jdGlvbnMgZm9yIHdoaWNoIHRoZQogICAgIGZyYW1lIHBvaW50ZXIgY2FuIGJlIGVsaW1pbmF0ZWQsIGlmIGRlc2lyZWQuCgondW50eXBlZF9jYWxsJwogICAgIFN1YnJvdXRpbmUgY2FsbCBpbnN0cnVjdGlvbiByZXR1cm5pbmcgYSB2YWx1ZSBvZiBhbnkgdHlwZS4gIE9wZXJhbmQKICAgICAwIGlzIHRoZSBmdW5jdGlvbiB0byBjYWxsOyBvcGVyYW5kIDEgaXMgYSBtZW1vcnkgbG9jYXRpb24gd2hlcmUgdGhlCiAgICAgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIGZ1bmN0aW9uIGlzIHRvIGJlIHN0b3JlZDsgb3BlcmFuZCAyIGlzIGEKICAgICAncGFyYWxsZWwnIGV4cHJlc3Npb24gd2hlcmUgZWFjaCBlbGVtZW50IGlzIGEgJ3NldCcgZXhwcmVzc2lvbiB0aGF0CiAgICAgaW5kaWNhdGVzIHRoZSBzYXZpbmcgb2YgYSBmdW5jdGlvbiByZXR1cm4gdmFsdWUgaW50byB0aGUgcmVzdWx0CiAgICAgYmxvY2suCgogICAgIFRoaXMgaW5zdHJ1Y3Rpb24gcGF0dGVybiBzaG91bGQgYmUgZGVmaW5lZCB0byBzdXBwb3J0CiAgICAgJ19fYnVpbHRpbl9hcHBseScgb24gbWFjaGluZXMgd2hlcmUgc3BlY2lhbCBpbnN0cnVjdGlvbnMgYXJlIG5lZWRlZAogICAgIHRvIGNhbGwgYSBzdWJyb3V0aW5lIHdpdGggYXJiaXRyYXJ5IGFyZ3VtZW50cyBvciB0byBzYXZlIHRoZSB2YWx1ZQogICAgIHJldHVybmVkLiAgVGhpcyBpbnN0cnVjdGlvbiBwYXR0ZXJuIGlzIHJlcXVpcmVkIG9uIG1hY2hpbmVzIHRoYXQKICAgICBoYXZlIG11bHRpcGxlIHJlZ2lzdGVycyB0aGF0IGNhbiBob2xkIGEgcmV0dXJuIHZhbHVlIChpLmUuCiAgICAgJ0ZVTkNUSU9OX1ZBTFVFX1JFR05PX1AnIGlzIHRydWUgZm9yIG1vcmUgdGhhbiBvbmUgcmVnaXN0ZXIpLgoKJ3JldHVybicKICAgICBTdWJyb3V0aW5lIHJldHVybiBpbnN0cnVjdGlvbi4gIFRoaXMgaW5zdHJ1Y3Rpb24gcGF0dGVybiBuYW1lCiAgICAgc2hvdWxkIGJlIGRlZmluZWQgb25seSBpZiBhIHNpbmdsZSBpbnN0cnVjdGlvbiBjYW4gZG8gYWxsIHRoZSB3b3JrCiAgICAgb2YgcmV0dXJuaW5nIGZyb20gYSBmdW5jdGlvbi4KCiAgICAgTGlrZSB0aGUgJ21vdk0nIHBhdHRlcm5zLCB0aGlzIHBhdHRlcm4gaXMgYWxzbyB1c2VkIGFmdGVyIHRoZSBSVEwKICAgICBnZW5lcmF0aW9uIHBoYXNlLiAgSW4gdGhpcyBjYXNlIGl0IGlzIHRvIHN1cHBvcnQgbWFjaGluZXMgd2hlcmUKICAgICBtdWx0aXBsZSBpbnN0cnVjdGlvbnMgYXJlIHVzdWFsbHkgbmVlZGVkIHRvIHJldHVybiBmcm9tIGEgZnVuY3Rpb24sCiAgICAgYnV0IHNvbWUgY2xhc3Mgb2YgZnVuY3Rpb25zIG9ubHkgcmVxdWlyZXMgb25lIGluc3RydWN0aW9uIHRvCiAgICAgaW1wbGVtZW50IGEgcmV0dXJuLiAgTm9ybWFsbHksIHRoZSBhcHBsaWNhYmxlIGZ1bmN0aW9ucyBhcmUgdGhvc2UKICAgICB3aGljaCBkbyBub3QgbmVlZCB0byBzYXZlIGFueSByZWdpc3RlcnMgb3IgYWxsb2NhdGUgc3RhY2sgc3BhY2UuCgogICAgIEZvciBzdWNoIG1hY2hpbmVzLCB0aGUgY29uZGl0aW9uIHNwZWNpZmllZCBpbiB0aGlzIHBhdHRlcm4gc2hvdWxkCiAgICAgb25seSBiZSB0cnVlIHdoZW4gJ3JlbG9hZF9jb21wbGV0ZWQnIGlzIG5vbnplcm8gYW5kIHRoZSBmdW5jdGlvbidzCiAgICAgZXBpbG9ndWUgd291bGQgb25seSBiZSBhIHNpbmdsZSBpbnN0cnVjdGlvbi4gIEZvciBtYWNoaW5lcyB3aXRoCiAgICAgcmVnaXN0ZXIgd2luZG93cywgdGhlIHJvdXRpbmUgJ2xlYWZfZnVuY3Rpb25fcCcgbWF5IGJlIHVzZWQgdG8KICAgICBkZXRlcm1pbmUgaWYgYSByZWdpc3RlciB3aW5kb3cgcHVzaCBpcyByZXF1aXJlZC4KCiAgICAgTWFjaGluZXMgdGhhdCBoYXZlIGNvbmRpdGlvbmFsIHJldHVybiBpbnN0cnVjdGlvbnMgc2hvdWxkIGRlZmluZQogICAgIHBhdHRlcm5zIHN1Y2ggYXMKCiAgICAgICAgICAoZGVmaW5lX2luc24gIiIKICAgICAgICAgICAgWyhzZXQgKHBjKQogICAgICAgICAgICAgICAgICAoaWZfdGhlbl9lbHNlIChtYXRjaF9vcGVyYXRvcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgImNvbXBhcmlzb25fb3BlcmF0b3IiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhjYzApIChjb25zdF9pbnQgMCldKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyZXR1cm4pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBjKSkpXQogICAgICAgICAgICAiQ09ORElUSU9OIgogICAgICAgICAgICAiLi4uIikKCiAgICAgd2hlcmUgQ09ORElUSU9OIHdvdWxkIG5vcm1hbGx5IGJlIHRoZSBzYW1lIGNvbmRpdGlvbiBzcGVjaWZpZWQgb24KICAgICB0aGUgbmFtZWQgJ3JldHVybicgcGF0dGVybi4KCid1bnR5cGVkX3JldHVybicKICAgICBVbnR5cGVkIHN1YnJvdXRpbmUgcmV0dXJuIGluc3RydWN0aW9uLiAgVGhpcyBpbnN0cnVjdGlvbiBwYXR0ZXJuCiAgICAgc2hvdWxkIGJlIGRlZmluZWQgdG8gc3VwcG9ydCAnX19idWlsdGluX3JldHVybicgb24gbWFjaGluZXMgd2hlcmUKICAgICBzcGVjaWFsIGluc3RydWN0aW9ucyBhcmUgbmVlZGVkIHRvIHJldHVybiBhIHZhbHVlIG9mIGFueSB0eXBlLgoKICAgICBPcGVyYW5kIDAgaXMgYSBtZW1vcnkgbG9jYXRpb24gd2hlcmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIGEKICAgICBmdW5jdGlvbiB3aXRoICdfX2J1aWx0aW5fYXBwbHknIGlzIHN0b3JlZDsgb3BlcmFuZCAxIGlzIGEKICAgICAncGFyYWxsZWwnIGV4cHJlc3Npb24gd2hlcmUgZWFjaCBlbGVtZW50IGlzIGEgJ3NldCcgZXhwcmVzc2lvbiB0aGF0CiAgICAgaW5kaWNhdGVzIHRoZSByZXN0b3Jpbmcgb2YgYSBmdW5jdGlvbiByZXR1cm4gdmFsdWUgZnJvbSB0aGUgcmVzdWx0CiAgICAgYmxvY2suCgonbm9wJwogICAgIE5vLW9wIGluc3RydWN0aW9uLiAgVGhpcyBpbnN0cnVjdGlvbiBwYXR0ZXJuIG5hbWUgc2hvdWxkIGFsd2F5cyBiZQogICAgIGRlZmluZWQgdG8gb3V0cHV0IGEgbm8tb3AgaW4gYXNzZW1ibGVyIGNvZGUuICAnKGNvbnN0X2ludCAwKScgd2lsbAogICAgIGRvIGFzIGFuIFJUTCBwYXR0ZXJuLgoKJ2luZGlyZWN0X2p1bXAnCiAgICAgQW4gaW5zdHJ1Y3Rpb24gdG8ganVtcCB0byBhbiBhZGRyZXNzIHdoaWNoIGlzIG9wZXJhbmQgemVyby4gIFRoaXMKICAgICBwYXR0ZXJuIG5hbWUgaXMgbWFuZGF0b3J5IG9uIGFsbCBtYWNoaW5lcy4KCidjYXNlc2knCiAgICAgSW5zdHJ1Y3Rpb24gdG8ganVtcCB0aHJvdWdoIGEgZGlzcGF0Y2ggdGFibGUsIGluY2x1ZGluZyBib3VuZHMKICAgICBjaGVja2luZy4gIFRoaXMgaW5zdHJ1Y3Rpb24gdGFrZXMgZml2ZSBvcGVyYW5kczoKCiAgICAgICAxLiBUaGUgaW5kZXggdG8gZGlzcGF0Y2ggb24sIHdoaWNoIGhhcyBtb2RlICdTSW1vZGUnLgoKICAgICAgIDIuIFRoZSBsb3dlciBib3VuZCBmb3IgaW5kaWNlcyBpbiB0aGUgdGFibGUsIGFuIGludGVnZXIgY29uc3RhbnQuCgogICAgICAgMy4gVGhlIHRvdGFsIHJhbmdlIG9mIGluZGljZXMgaW4gdGhlIHRhYmxlLS10aGUgbGFyZ2VzdCBpbmRleAogICAgICAgICAgbWludXMgdGhlIHNtYWxsZXN0IG9uZSAoYm90aCBpbmNsdXNpdmUpLgoKICAgICAgIDQuIEEgbGFiZWwgdGhhdCBwcmVjZWRlcyB0aGUgdGFibGUgaXRzZWxmLgoKICAgICAgIDUuIEEgbGFiZWwgdG8ganVtcCB0byBpZiB0aGUgaW5kZXggaGFzIGEgdmFsdWUgb3V0c2lkZSB0aGUKICAgICAgICAgIGJvdW5kcy4KCiAgICAgVGhlIHRhYmxlIGlzIGEgJ2FkZHJfdmVjJyBvciAnYWRkcl9kaWZmX3ZlYycgaW5zaWRlIG9mIGEKICAgICAnanVtcF9pbnNuJy4gIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIHRhYmxlIGlzIG9uZSBwbHVzIHRoZQogICAgIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgdXBwZXIgYm91bmQgYW5kIHRoZSBsb3dlciBib3VuZC4KCid0YWJsZWp1bXAnCiAgICAgSW5zdHJ1Y3Rpb24gdG8ganVtcCB0byBhIHZhcmlhYmxlIGFkZHJlc3MuICBUaGlzIGlzIGEgbG93LWxldmVsCiAgICAgY2FwYWJpbGl0eSB3aGljaCBjYW4gYmUgdXNlZCB0byBpbXBsZW1lbnQgYSBkaXNwYXRjaCB0YWJsZSB3aGVuCiAgICAgdGhlcmUgaXMgbm8gJ2Nhc2VzaScgcGF0dGVybi4KCiAgICAgVGhpcyBwYXR0ZXJuIHJlcXVpcmVzIHR3byBvcGVyYW5kczogdGhlIGFkZHJlc3Mgb3Igb2Zmc2V0LCBhbmQgYQogICAgIGxhYmVsIHdoaWNoIHNob3VsZCBpbW1lZGlhdGVseSBwcmVjZWRlIHRoZSBqdW1wIHRhYmxlLiAgSWYgdGhlCiAgICAgbWFjcm8gJ0NBU0VfVkVDVE9SX1BDX1JFTEFUSVZFJyBldmFsdWF0ZXMgdG8gYSBub256ZXJvIHZhbHVlIHRoZW4KICAgICB0aGUgZmlyc3Qgb3BlcmFuZCBpcyBhbiBvZmZzZXQgd2hpY2ggY291bnRzIGZyb20gdGhlIGFkZHJlc3Mgb2YgdGhlCiAgICAgdGFibGU7IG90aGVyd2lzZSwgaXQgaXMgYW4gYWJzb2x1dGUgYWRkcmVzcyB0byBqdW1wIHRvLiAgSW4gZWl0aGVyCiAgICAgY2FzZSwgdGhlIGZpcnN0IG9wZXJhbmQgaGFzIG1vZGUgJ1Btb2RlJy4KCiAgICAgVGhlICd0YWJsZWp1bXAnIGluc24gaXMgYWx3YXlzIHRoZSBsYXN0IGluc24gYmVmb3JlIHRoZSBqdW1wIHRhYmxlCiAgICAgaXQgdXNlcy4gIEl0cyBhc3NlbWJsZXIgY29kZSBub3JtYWxseSBoYXMgbm8gbmVlZCB0byB1c2UgdGhlIHNlY29uZAogICAgIG9wZXJhbmQsIGJ1dCB5b3Ugc2hvdWxkIGluY29ycG9yYXRlIGl0IGluIHRoZSBSVEwgcGF0dGVybiBzbyB0aGF0CiAgICAgdGhlIGp1bXAgb3B0aW1pemVyIHdpbGwgbm90IGRlbGV0ZSB0aGUgdGFibGUgYXMgdW5yZWFjaGFibGUgY29kZS4KCidkZWNyZW1lbnRfYW5kX2JyYW5jaF91bnRpbF96ZXJvJwogICAgIENvbmRpdGlvbmFsIGJyYW5jaCBpbnN0cnVjdGlvbiB0aGF0IGRlY3JlbWVudHMgYSByZWdpc3RlciBhbmQganVtcHMKICAgICBpZiB0aGUgcmVnaXN0ZXIgaXMgbm9uemVyby4gIE9wZXJhbmQgMCBpcyB0aGUgcmVnaXN0ZXIgdG8gZGVjcmVtZW50CiAgICAgYW5kIHRlc3Q7IG9wZXJhbmQgMSBpcyB0aGUgbGFiZWwgdG8ganVtcCB0byBpZiB0aGUgcmVnaXN0ZXIgaXMKICAgICBub256ZXJvLiAgKk5vdGUgTG9vcGluZyBQYXR0ZXJuczo6LgoKICAgICBUaGlzIG9wdGlvbmFsIGluc3RydWN0aW9uIHBhdHRlcm4gaXMgb25seSB1c2VkIGJ5IHRoZSBjb21iaW5lciwKICAgICB0eXBpY2FsbHkgZm9yIGxvb3BzIHJldmVyc2VkIGJ5IHRoZSBsb29wIG9wdGltaXplciB3aGVuIHN0cmVuZ3RoCiAgICAgcmVkdWN0aW9uIGlzIGVuYWJsZWQuCgonZG9sb29wX2VuZCcKICAgICBDb25kaXRpb25hbCBicmFuY2ggaW5zdHJ1Y3Rpb24gdGhhdCBkZWNyZW1lbnRzIGEgcmVnaXN0ZXIgYW5kIGp1bXBzCiAgICAgaWYgdGhlIHJlZ2lzdGVyIGlzIG5vbnplcm8uICBUaGlzIGluc3RydWN0aW9uIHRha2VzIGZpdmUgb3BlcmFuZHM6CiAgICAgT3BlcmFuZCAwIGlzIHRoZSByZWdpc3RlciB0byBkZWNyZW1lbnQgYW5kIHRlc3Q7IG9wZXJhbmQgMSBpcyB0aGUKICAgICBudW1iZXIgb2YgbG9vcCBpdGVyYXRpb25zIGFzIGEgJ2NvbnN0X2ludCcgb3IgJ2NvbnN0MF9ydHgnIGlmIHRoaXMKICAgICBjYW5ub3QgYmUgZGV0ZXJtaW5lZCB1bnRpbCBydW4tdGltZTsgb3BlcmFuZCAyIGlzIHRoZSBhY3R1YWwgb3IKICAgICBlc3RpbWF0ZWQgbWF4aW11bSBudW1iZXIgb2YgaXRlcmF0aW9ucyBhcyBhICdjb25zdF9pbnQnOyBvcGVyYW5kIDMKICAgICBpcyB0aGUgbnVtYmVyIG9mIGVuY2xvc2VkIGxvb3BzIGFzIGEgJ2NvbnN0X2ludCcgKGFuIGlubmVybW9zdCBsb29wCiAgICAgaGFzIGEgdmFsdWUgb2YgMSk7IG9wZXJhbmQgNCBpcyB0aGUgbGFiZWwgdG8ganVtcCB0byBpZiB0aGUKICAgICByZWdpc3RlciBpcyBub256ZXJvLiAgKk5vdGUgTG9vcGluZyBQYXR0ZXJuczo6LgoKICAgICBUaGlzIG9wdGlvbmFsIGluc3RydWN0aW9uIHBhdHRlcm4gc2hvdWxkIGJlIGRlZmluZWQgZm9yIG1hY2hpbmVzCiAgICAgd2l0aCBsb3ctb3ZlcmhlYWQgbG9vcGluZyBpbnN0cnVjdGlvbnMgYXMgdGhlIGxvb3Agb3B0aW1pemVyIHdpbGwKICAgICB0cnkgdG8gbW9kaWZ5IHN1aXRhYmxlIGxvb3BzIHRvIHV0aWxpemUgaXQuICBJZiBuZXN0ZWQgbG93LW92ZXJoZWFkCiAgICAgbG9vcGluZyBpcyBub3Qgc3VwcG9ydGVkLCB1c2UgYSAnZGVmaW5lX2V4cGFuZCcgKCpub3RlIEV4cGFuZGVyCiAgICAgRGVmaW5pdGlvbnM6OikgYW5kIG1ha2UgdGhlIHBhdHRlcm4gZmFpbCBpZiBvcGVyYW5kIDMgaXMgbm90CiAgICAgJ2NvbnN0MV9ydHgnLiAgU2ltaWxhcmx5LCBpZiB0aGUgYWN0dWFsIG9yIGVzdGltYXRlZCBtYXhpbXVtIG51bWJlcgogICAgIG9mIGl0ZXJhdGlvbnMgaXMgdG9vIGxhcmdlIGZvciB0aGlzIGluc3RydWN0aW9uLCBtYWtlIGl0IGZhaWwuCgonZG9sb29wX2JlZ2luJwogICAgIENvbXBhbmlvbiBpbnN0cnVjdGlvbiB0byAnZG9sb29wX2VuZCcgcmVxdWlyZWQgZm9yIG1hY2hpbmVzIHRoYXQKICAgICBuZWVkIHRvIHBlcmZvcm0gc29tZSBpbml0aWFsaXphdGlvbiwgc3VjaCBhcyBsb2FkaW5nIHNwZWNpYWwKICAgICByZWdpc3RlcnMgdXNlZCBieSBhIGxvdy1vdmVyaGVhZCBsb29waW5nIGluc3RydWN0aW9uLiAgSWYKICAgICBpbml0aWFsaXphdGlvbiBpbnNucyBkbyBub3QgYWx3YXlzIG5lZWQgdG8gYmUgZW1pdHRlZCwgdXNlIGEKICAgICAnZGVmaW5lX2V4cGFuZCcgKCpub3RlIEV4cGFuZGVyIERlZmluaXRpb25zOjopIGFuZCBtYWtlIGl0IGZhaWwuCgonY2Fub25pY2FsaXplX2Z1bmNwdHJfZm9yX2NvbXBhcmUnCiAgICAgQ2Fub25pY2FsaXplIHRoZSBmdW5jdGlvbiBwb2ludGVyIGluIG9wZXJhbmQgMSBhbmQgc3RvcmUgdGhlIHJlc3VsdAogICAgIGludG8gb3BlcmFuZCAwLgoKICAgICBPcGVyYW5kIDAgaXMgYWx3YXlzIGEgJ3JlZycgYW5kIGhhcyBtb2RlICdQbW9kZSc7IG9wZXJhbmQgMSBtYXkgYmUKICAgICBhICdyZWcnLCAnbWVtJywgJ3N5bWJvbF9yZWYnLCAnY29uc3RfaW50JywgZXRjIGFuZCBhbHNvIGhhcyBtb2RlCiAgICAgJ1Btb2RlJy4KCiAgICAgQ2Fub25pY2FsaXphdGlvbiBvZiBhIGZ1bmN0aW9uIHBvaW50ZXIgdXN1YWxseSBpbnZvbHZlcyBjb21wdXRpbmcKICAgICB0aGUgYWRkcmVzcyBvZiB0aGUgZnVuY3Rpb24gd2hpY2ggd291bGQgYmUgY2FsbGVkIGlmIHRoZSBmdW5jdGlvbgogICAgIHBvaW50ZXIgd2VyZSB1c2VkIGluIGFuIGluZGlyZWN0IGNhbGwuCgogICAgIE9ubHkgZGVmaW5lIHRoaXMgcGF0dGVybiBpZiBmdW5jdGlvbiBwb2ludGVycyBvbiB0aGUgdGFyZ2V0IG1hY2hpbmUKICAgICBjYW4gaGF2ZSBkaWZmZXJlbnQgdmFsdWVzIGJ1dCBzdGlsbCBjYWxsIHRoZSBzYW1lIGZ1bmN0aW9uIHdoZW4KICAgICB1c2VkIGluIGFuIGluZGlyZWN0IGNhbGwuCgonc2F2ZV9zdGFja19ibG9jaycKJ3NhdmVfc3RhY2tfZnVuY3Rpb24nCidzYXZlX3N0YWNrX25vbmxvY2FsJwoncmVzdG9yZV9zdGFja19ibG9jaycKJ3Jlc3RvcmVfc3RhY2tfZnVuY3Rpb24nCidyZXN0b3JlX3N0YWNrX25vbmxvY2FsJwogICAgIE1vc3QgbWFjaGluZXMgc2F2ZSBhbmQgcmVzdG9yZSB0aGUgc3RhY2sgcG9pbnRlciBieSBjb3B5aW5nIGl0IHRvCiAgICAgb3IgZnJvbSBhbiBvYmplY3Qgb2YgbW9kZSAnUG1vZGUnLiAgRG8gbm90IGRlZmluZSB0aGVzZSBwYXR0ZXJucyBvbgogICAgIHN1Y2ggbWFjaGluZXMuCgogICAgIFNvbWUgbWFjaGluZXMgcmVxdWlyZSBzcGVjaWFsIGhhbmRsaW5nIGZvciBzdGFjayBwb2ludGVyIHNhdmVzIGFuZAogICAgIHJlc3RvcmVzLiAgT24gdGhvc2UgbWFjaGluZXMsIGRlZmluZSB0aGUgcGF0dGVybnMgY29ycmVzcG9uZGluZyB0bwogICAgIHRoZSBub24tc3RhbmRhcmQgY2FzZXMgYnkgdXNpbmcgYSAnZGVmaW5lX2V4cGFuZCcgKCpub3RlIEV4cGFuZGVyCiAgICAgRGVmaW5pdGlvbnM6OikgdGhhdCBwcm9kdWNlcyB0aGUgcmVxdWlyZWQgaW5zbnMuICBUaGUgdGhyZWUgdHlwZXMKICAgICBvZiBzYXZlcyBhbmQgcmVzdG9yZXMgYXJlOgoKICAgICAgIDEuICdzYXZlX3N0YWNrX2Jsb2NrJyBzYXZlcyB0aGUgc3RhY2sgcG9pbnRlciBhdCB0aGUgc3RhcnQgb2YgYQogICAgICAgICAgYmxvY2sgdGhhdCBhbGxvY2F0ZXMgYSB2YXJpYWJsZS1zaXplZCBvYmplY3QsIGFuZAogICAgICAgICAgJ3Jlc3RvcmVfc3RhY2tfYmxvY2snIHJlc3RvcmVzIHRoZSBzdGFjayBwb2ludGVyIHdoZW4gdGhlCiAgICAgICAgICBibG9jayBpcyBleGl0ZWQuCgogICAgICAgMi4gJ3NhdmVfc3RhY2tfZnVuY3Rpb24nIGFuZCAncmVzdG9yZV9zdGFja19mdW5jdGlvbicgZG8gYQogICAgICAgICAgc2ltaWxhciBqb2IgZm9yIHRoZSBvdXRlcm1vc3QgYmxvY2sgb2YgYSBmdW5jdGlvbiBhbmQgYXJlIHVzZWQKICAgICAgICAgIHdoZW4gdGhlIGZ1bmN0aW9uIGFsbG9jYXRlcyB2YXJpYWJsZS1zaXplZCBvYmplY3RzIG9yIGNhbGxzCiAgICAgICAgICAnYWxsb2NhJy4gIE9ubHkgdGhlIGVwaWxvZ3VlIHVzZXMgdGhlIHJlc3RvcmVkIHN0YWNrIHBvaW50ZXIsCiAgICAgICAgICBhbGxvd2luZyBhIHNpbXBsZXIgc2F2ZSBvciByZXN0b3JlIHNlcXVlbmNlIG9uIHNvbWUgbWFjaGluZXMuCgogICAgICAgMy4gJ3NhdmVfc3RhY2tfbm9ubG9jYWwnIGlzIHVzZWQgaW4gZnVuY3Rpb25zIHRoYXQgY29udGFpbiBsYWJlbHMKICAgICAgICAgIGJyYW5jaGVkIHRvIGJ5IG5lc3RlZCBmdW5jdGlvbnMuICBJdCBzYXZlcyB0aGUgc3RhY2sgcG9pbnRlcgogICAgICAgICAgaW4gc3VjaCBhIHdheSB0aGF0IHRoZSBpbm5lciBmdW5jdGlvbiBjYW4gdXNlCiAgICAgICAgICAncmVzdG9yZV9zdGFja19ub25sb2NhbCcgdG8gcmVzdG9yZSB0aGUgc3RhY2sgcG9pbnRlci4gIFRoZQogICAgICAgICAgY29tcGlsZXIgZ2VuZXJhdGVzIGNvZGUgdG8gcmVzdG9yZSB0aGUgZnJhbWUgYW5kIGFyZ3VtZW50CiAgICAgICAgICBwb2ludGVyIHJlZ2lzdGVycywgYnV0IHNvbWUgbWFjaGluZXMgcmVxdWlyZSBzYXZpbmcgYW5kCiAgICAgICAgICByZXN0b3JpbmcgYWRkaXRpb25hbCBkYXRhIHN1Y2ggYXMgcmVnaXN0ZXIgd2luZG93IGluZm9ybWF0aW9uCiAgICAgICAgICBvciBzdGFjayBiYWNrY2hhaW5zLiAgUGxhY2UgaW5zbnMgaW4gdGhlc2UgcGF0dGVybnMgdG8gc2F2ZQogICAgICAgICAgYW5kIHJlc3RvcmUgYW55IHN1Y2ggcmVxdWlyZWQgZGF0YS4KCiAgICAgV2hlbiBzYXZpbmcgdGhlIHN0YWNrIHBvaW50ZXIsIG9wZXJhbmQgMCBpcyB0aGUgc2F2ZSBhcmVhIGFuZAogICAgIG9wZXJhbmQgMSBpcyB0aGUgc3RhY2sgcG9pbnRlci4gIFRoZSBtb2RlIHVzZWQgdG8gYWxsb2NhdGUgdGhlIHNhdmUKICAgICBhcmVhIGRlZmF1bHRzIHRvICdQbW9kZScgYnV0IHlvdSBjYW4gb3ZlcnJpZGUgdGhhdCBjaG9pY2UgYnkKICAgICBkZWZpbmluZyB0aGUgJ1NUQUNLX1NBVkVBUkVBX01PREUnIG1hY3JvICgqbm90ZSBTdG9yYWdlIExheW91dDo6KS4KICAgICBZb3UgbXVzdCBzcGVjaWZ5IGFuIGludGVncmFsIG1vZGUsIG9yICdWT0lEbW9kZScgaWYgbm8gc2F2ZSBhcmVhIGlzCiAgICAgbmVlZGVkIGZvciBhIHBhcnRpY3VsYXIgdHlwZSBvZiBzYXZlIChlaXRoZXIgYmVjYXVzZSBubyBzYXZlIGlzCiAgICAgbmVlZGVkIG9yIGJlY2F1c2UgYSBtYWNoaW5lLXNwZWNpZmljIHNhdmUgYXJlYSBjYW4gYmUgdXNlZCkuCiAgICAgT3BlcmFuZCAwIGlzIHRoZSBzdGFjayBwb2ludGVyIGFuZCBvcGVyYW5kIDEgaXMgdGhlIHNhdmUgYXJlYSBmb3IKICAgICByZXN0b3JlIG9wZXJhdGlvbnMuICBJZiAnc2F2ZV9zdGFja19ibG9jaycgaXMgZGVmaW5lZCwgb3BlcmFuZCAwCiAgICAgbXVzdCBub3QgYmUgJ1ZPSURtb2RlJyBzaW5jZSB0aGVzZSBzYXZlcyBjYW4gYmUgYXJiaXRyYXJpbHkgbmVzdGVkLgoKICAgICBBIHNhdmUgYXJlYSBpcyBhICdtZW0nIHRoYXQgaXMgYXQgYSBjb25zdGFudCBvZmZzZXQgZnJvbQogICAgICd2aXJ0dWFsX3N0YWNrX3ZhcnNfcnR4JyB3aGVuIHRoZSBzdGFjayBwb2ludGVyIGlzIHNhdmVkIGZvciB1c2UgYnkKICAgICBub25sb2NhbCBnb3RvcyBhbmQgYSAncmVnJyBpbiB0aGUgb3RoZXIgdHdvIGNhc2VzLgoKJ2FsbG9jYXRlX3N0YWNrJwogICAgIFN1YnRyYWN0IChvciBhZGQgaWYgJ1NUQUNLX0dST1dTX0RPV05XQVJEJyBpcyB1bmRlZmluZWQpIG9wZXJhbmQgMQogICAgIGZyb20gdGhlIHN0YWNrIHBvaW50ZXIgdG8gY3JlYXRlIHNwYWNlIGZvciBkeW5hbWljYWxseSBhbGxvY2F0ZWQKICAgICBkYXRhLgoKICAgICBTdG9yZSB0aGUgcmVzdWx0YW50IHBvaW50ZXIgdG8gdGhpcyBzcGFjZSBpbnRvIG9wZXJhbmQgMC4gIElmIHlvdQogICAgIGFyZSBhbGxvY2F0aW5nIHNwYWNlIGZyb20gdGhlIG1haW4gc3RhY2ssIGRvIHRoaXMgYnkgZW1pdHRpbmcgYQogICAgIG1vdmUgaW5zbiB0byBjb3B5ICd2aXJ0dWFsX3N0YWNrX2R5bmFtaWNfcnR4JyB0byBvcGVyYW5kIDAuICBJZiB5b3UKICAgICBhcmUgYWxsb2NhdGluZyB0aGUgc3BhY2UgZWxzZXdoZXJlLCBnZW5lcmF0ZSBjb2RlIHRvIGNvcHkgdGhlCiAgICAgbG9jYXRpb24gb2YgdGhlIHNwYWNlIHRvIG9wZXJhbmQgMC4gIEluIHRoZSBsYXR0ZXIgY2FzZSwgeW91IG11c3QKICAgICBlbnN1cmUgdGhpcyBzcGFjZSBnZXRzIGZyZWVkIHdoZW4gdGhlIGNvcnJlc3BvbmRpbmcgc3BhY2Ugb24gdGhlCiAgICAgbWFpbiBzdGFjayBpcyBmcmVlLgoKICAgICBEbyBub3QgZGVmaW5lIHRoaXMgcGF0dGVybiBpZiBhbGwgdGhhdCBtdXN0IGJlIGRvbmUgaXMgdGhlCiAgICAgc3VidHJhY3Rpb24uICBTb21lIG1hY2hpbmVzIHJlcXVpcmUgb3RoZXIgb3BlcmF0aW9ucyBzdWNoIGFzIHN0YWNrCiAgICAgcHJvYmVzIG9yIG1haW50YWluaW5nIHRoZSBiYWNrIGNoYWluLiAgRGVmaW5lIHRoaXMgcGF0dGVybiB0byBlbWl0CiAgICAgdGhvc2Ugb3BlcmF0aW9ucyBpbiBhZGRpdGlvbiB0byB1cGRhdGluZyB0aGUgc3RhY2sgcG9pbnRlci4KCidjaGVja19zdGFjaycKICAgICBJZiBzdGFjayBjaGVja2luZyBjYW5ub3QgYmUgZG9uZSBvbiB5b3VyIHN5c3RlbSBieSBwcm9iaW5nIHRoZQogICAgIHN0YWNrIHdpdGggYSBsb2FkIG9yIHN0b3JlIGluc3RydWN0aW9uICgqbm90ZSBTdGFjayBDaGVja2luZzo6KSwKICAgICBkZWZpbmUgdGhpcyBwYXR0ZXJuIHRvIHBlcmZvcm0gdGhlIG5lZWRlZCBjaGVjayBhbmQgc2lnbmFsaW5nIGFuCiAgICAgZXJyb3IgaWYgdGhlIHN0YWNrIGhhcyBvdmVyZmxvd2VkLiAgVGhlIHNpbmdsZSBvcGVyYW5kIGlzIHRoZQogICAgIGxvY2F0aW9uIGluIHRoZSBzdGFjayBmdXJ0aGVzdCBmcm9tIHRoZSBjdXJyZW50IHN0YWNrIHBvaW50ZXIgdGhhdAogICAgIHlvdSBuZWVkIHRvIHZhbGlkYXRlLiAgTm9ybWFsbHksIG9uIG1hY2hpbmVzIHdoZXJlIHRoaXMgcGF0dGVybiBpcwogICAgIG5lZWRlZCwgeW91IHdvdWxkIG9idGFpbiB0aGUgc3RhY2sgbGltaXQgZnJvbSBhIGdsb2JhbCBvcgogICAgIHRocmVhZC1zcGVjaWZpYyB2YXJpYWJsZSBvciByZWdpc3Rlci4KCidub25sb2NhbF9nb3RvJwogICAgIEVtaXQgY29kZSB0byBnZW5lcmF0ZSBhIG5vbi1sb2NhbCBnb3RvLCBlLmcuLCBhIGp1bXAgZnJvbSBvbmUKICAgICBmdW5jdGlvbiB0byBhIGxhYmVsIGluIGFuIG91dGVyIGZ1bmN0aW9uLiAgVGhpcyBwYXR0ZXJuIGhhcyBmb3VyCiAgICAgYXJndW1lbnRzLCBlYWNoIHJlcHJlc2VudGluZyBhIHZhbHVlIHRvIGJlIHVzZWQgaW4gdGhlIGp1bXAuICBUaGUKICAgICBmaXJzdCBhcmd1bWVudCBpcyB0byBiZSBsb2FkZWQgaW50byB0aGUgZnJhbWUgcG9pbnRlciwgdGhlIHNlY29uZAogICAgIGlzIHRoZSBhZGRyZXNzIHRvIGJyYW5jaCB0byAoY29kZSB0byBkaXNwYXRjaCB0byB0aGUgYWN0dWFsIGxhYmVsKSwKICAgICB0aGUgdGhpcmQgaXMgdGhlIGFkZHJlc3Mgb2YgYSBsb2NhdGlvbiB3aGVyZSB0aGUgc3RhY2sgaXMgc2F2ZWQsCiAgICAgYW5kIHRoZSBsYXN0IGlzIHRoZSBhZGRyZXNzIG9mIHRoZSBsYWJlbCwgdG8gYmUgcGxhY2VkIGluIHRoZQogICAgIGxvY2F0aW9uIGZvciB0aGUgaW5jb21pbmcgc3RhdGljIGNoYWluLgoKICAgICBPbiBtb3N0IG1hY2hpbmVzIHlvdSBuZWVkIG5vdCBkZWZpbmUgdGhpcyBwYXR0ZXJuLCBzaW5jZSBHQ0Mgd2lsbAogICAgIGFscmVhZHkgZ2VuZXJhdGUgdGhlIGNvcnJlY3QgY29kZSwgd2hpY2ggaXMgdG8gbG9hZCB0aGUgZnJhbWUKICAgICBwb2ludGVyIGFuZCBzdGF0aWMgY2hhaW4sIHJlc3RvcmUgdGhlIHN0YWNrICh1c2luZyB0aGUKICAgICAncmVzdG9yZV9zdGFja19ub25sb2NhbCcgcGF0dGVybiwgaWYgZGVmaW5lZCksIGFuZCBqdW1wIGluZGlyZWN0bHkKICAgICB0byB0aGUgZGlzcGF0Y2hlci4gIFlvdSBuZWVkIG9ubHkgZGVmaW5lIHRoaXMgcGF0dGVybiBpZiB0aGlzIGNvZGUKICAgICB3aWxsIG5vdCB3b3JrIG9uIHlvdXIgbWFjaGluZS4KCidub25sb2NhbF9nb3RvX3JlY2VpdmVyJwogICAgIFRoaXMgcGF0dGVybiwgaWYgZGVmaW5lZCwgY29udGFpbnMgY29kZSBuZWVkZWQgYXQgdGhlIHRhcmdldCBvZiBhCiAgICAgbm9ubG9jYWwgZ290byBhZnRlciB0aGUgY29kZSBhbHJlYWR5IGdlbmVyYXRlZCBieSBHQ0MuICBZb3Ugd2lsbAogICAgIG5vdCBub3JtYWxseSBuZWVkIHRvIGRlZmluZSB0aGlzIHBhdHRlcm4uICBBIHR5cGljYWwgcmVhc29uIHdoeSB5b3UKICAgICBtaWdodCBuZWVkIHRoaXMgcGF0dGVybiBpcyBpZiBzb21lIHZhbHVlLCBzdWNoIGFzIGEgcG9pbnRlciB0byBhCiAgICAgZ2xvYmFsIHRhYmxlLCBtdXN0IGJlIHJlc3RvcmVkIHdoZW4gdGhlIGZyYW1lIHBvaW50ZXIgaXMgcmVzdG9yZWQuCiAgICAgTm90ZSB0aGF0IGEgbm9ubG9jYWwgZ290byBvbmx5IG9jY3VycyB3aXRoaW4gYSB1bml0LW9mLXRyYW5zbGF0aW9uLAogICAgIHNvIGEgZ2xvYmFsIHRhYmxlIHBvaW50ZXIgdGhhdCBpcyBzaGFyZWQgYnkgYWxsIGZ1bmN0aW9ucyBvZiBhCiAgICAgZ2l2ZW4gbW9kdWxlIG5lZWQgbm90IGJlIHJlc3RvcmVkLiAgVGhlcmUgYXJlIG5vIGFyZ3VtZW50cy4KCidleGNlcHRpb25fcmVjZWl2ZXInCiAgICAgVGhpcyBwYXR0ZXJuLCBpZiBkZWZpbmVkLCBjb250YWlucyBjb2RlIG5lZWRlZCBhdCB0aGUgc2l0ZSBvZiBhbgogICAgIGV4Y2VwdGlvbiBoYW5kbGVyIHRoYXQgaXNuJ3QgbmVlZGVkIGF0IHRoZSBzaXRlIG9mIGEgbm9ubG9jYWwgZ290by4KICAgICBZb3Ugd2lsbCBub3Qgbm9ybWFsbHkgbmVlZCB0byBkZWZpbmUgdGhpcyBwYXR0ZXJuLiAgQSB0eXBpY2FsCiAgICAgcmVhc29uIHdoeSB5b3UgbWlnaHQgbmVlZCB0aGlzIHBhdHRlcm4gaXMgaWYgc29tZSB2YWx1ZSwgc3VjaCBhcyBhCiAgICAgcG9pbnRlciB0byBhIGdsb2JhbCB0YWJsZSwgbXVzdCBiZSByZXN0b3JlZCBhZnRlciBjb250cm9sIGZsb3cgaXMKICAgICBicmFuY2hlZCB0byB0aGUgaGFuZGxlciBvZiBhbiBleGNlcHRpb24uICBUaGVyZSBhcmUgbm8gYXJndW1lbnRzLgoKJ2J1aWx0aW5fc2V0am1wX3NldHVwJwogICAgIFRoaXMgcGF0dGVybiwgaWYgZGVmaW5lZCwgY29udGFpbnMgYWRkaXRpb25hbCBjb2RlIG5lZWRlZCB0bwogICAgIGluaXRpYWxpemUgdGhlICdqbXBfYnVmJy4gIFlvdSB3aWxsIG5vdCBub3JtYWxseSBuZWVkIHRvIGRlZmluZQogICAgIHRoaXMgcGF0dGVybi4gIEEgdHlwaWNhbCByZWFzb24gd2h5IHlvdSBtaWdodCBuZWVkIHRoaXMgcGF0dGVybiBpcwogICAgIGlmIHNvbWUgdmFsdWUsIHN1Y2ggYXMgYSBwb2ludGVyIHRvIGEgZ2xvYmFsIHRhYmxlLCBtdXN0IGJlCiAgICAgcmVzdG9yZWQuICBUaG91Z2ggaXQgaXMgcHJlZmVycmVkIHRoYXQgdGhlIHBvaW50ZXIgdmFsdWUgYmUKICAgICByZWNhbGN1bGF0ZWQgaWYgcG9zc2libGUgKGdpdmVuIHRoZSBhZGRyZXNzIG9mIGEgbGFiZWwgZm9yCiAgICAgaW5zdGFuY2UpLiAgVGhlIHNpbmdsZSBhcmd1bWVudCBpcyBhIHBvaW50ZXIgdG8gdGhlICdqbXBfYnVmJy4KICAgICBOb3RlIHRoYXQgdGhlIGJ1ZmZlciBpcyBmaXZlIHdvcmRzIGxvbmcgYW5kIHRoYXQgdGhlIGZpcnN0IHRocmVlCiAgICAgYXJlIG5vcm1hbGx5IHVzZWQgYnkgdGhlIGdlbmVyaWMgbWVjaGFuaXNtLgoKJ2J1aWx0aW5fc2V0am1wX3JlY2VpdmVyJwogICAgIFRoaXMgcGF0dGVybiwgaWYgZGVmaW5lZCwgY29udGFpbnMgY29kZSBuZWVkZWQgYXQgdGhlIHNpdGUgb2YgYW4KICAgICBidWlsdC1pbiBzZXRqbXAgdGhhdCBpc24ndCBuZWVkZWQgYXQgdGhlIHNpdGUgb2YgYSBub25sb2NhbCBnb3RvLgogICAgIFlvdSB3aWxsIG5vdCBub3JtYWxseSBuZWVkIHRvIGRlZmluZSB0aGlzIHBhdHRlcm4uICBBIHR5cGljYWwKICAgICByZWFzb24gd2h5IHlvdSBtaWdodCBuZWVkIHRoaXMgcGF0dGVybiBpcyBpZiBzb21lIHZhbHVlLCBzdWNoIGFzIGEKICAgICBwb2ludGVyIHRvIGEgZ2xvYmFsIHRhYmxlLCBtdXN0IGJlIHJlc3RvcmVkLiAgSXQgdGFrZXMgb25lCiAgICAgYXJndW1lbnQsIHdoaWNoIGlzIHRoZSBsYWJlbCB0byB3aGljaCBidWlsdGluX2xvbmdqbXAgdHJhbnNmZXJlZAogICAgIGNvbnRyb2w7IHRoaXMgcGF0dGVybiBtYXkgYmUgZW1pdHRlZCBhdCBhIHNtYWxsIG9mZnNldCBmcm9tIHRoYXQKICAgICBsYWJlbC4KCididWlsdGluX2xvbmdqbXAnCiAgICAgVGhpcyBwYXR0ZXJuLCBpZiBkZWZpbmVkLCBwZXJmb3JtcyB0aGUgZW50aXJlIGFjdGlvbiBvZiB0aGUKICAgICBsb25nam1wLiAgWW91IHdpbGwgbm90IG5vcm1hbGx5IG5lZWQgdG8gZGVmaW5lIHRoaXMgcGF0dGVybiB1bmxlc3MKICAgICB5b3UgYWxzbyBkZWZpbmUgJ2J1aWx0aW5fc2V0am1wX3NldHVwJy4gIFRoZSBzaW5nbGUgYXJndW1lbnQgaXMgYQogICAgIHBvaW50ZXIgdG8gdGhlICdqbXBfYnVmJy4KCidlaF9yZXR1cm4nCiAgICAgVGhpcyBwYXR0ZXJuLCBpZiBkZWZpbmVkLCBhZmZlY3RzIHRoZSB3YXkgJ19fYnVpbHRpbl9laF9yZXR1cm4nLAogICAgIGFuZCB0aGVuY2UgdGhlIGNhbGwgZnJhbWUgZXhjZXB0aW9uIGhhbmRsaW5nIGxpYnJhcnkgcm91dGluZXMsIGFyZQogICAgIGJ1aWx0LiAgSXQgaXMgaW50ZW5kZWQgdG8gaGFuZGxlIG5vbi10cml2aWFsIGFjdGlvbnMgbmVlZGVkIGFsb25nCiAgICAgdGhlIGFibm9ybWFsIHJldHVybiBwYXRoLgoKICAgICBUaGUgYWRkcmVzcyBvZiB0aGUgZXhjZXB0aW9uIGhhbmRsZXIgdG8gd2hpY2ggdGhlIGZ1bmN0aW9uIHNob3VsZAogICAgIHJldHVybiBpcyBwYXNzZWQgYXMgb3BlcmFuZCB0byB0aGlzIHBhdHRlcm4uICBJdCB3aWxsIG5vcm1hbGx5IG5lZWQKICAgICB0byBjb3BpZWQgYnkgdGhlIHBhdHRlcm4gdG8gc29tZSBzcGVjaWFsIHJlZ2lzdGVyIG9yIG1lbW9yeQogICAgIGxvY2F0aW9uLiAgSWYgdGhlIHBhdHRlcm4gbmVlZHMgdG8gZGV0ZXJtaW5lIHRoZSBsb2NhdGlvbiBvZiB0aGUKICAgICB0YXJnZXQgY2FsbCBmcmFtZSBpbiBvcmRlciB0byBkbyBzbywgaXQgbWF5IHVzZQogICAgICdFSF9SRVRVUk5fU1RBQ0tBREpfUlRYJywgaWYgZGVmaW5lZDsgaXQgd2lsbCBoYXZlIGFscmVhZHkgYmVlbgogICAgIGFzc2lnbmVkLgoKICAgICBJZiB0aGlzIHBhdHRlcm4gaXMgbm90IGRlZmluZWQsIHRoZSBkZWZhdWx0IGFjdGlvbiB3aWxsIGJlIHRvCiAgICAgc2ltcGx5IGNvcHkgdGhlIHJldHVybiBhZGRyZXNzIHRvICdFSF9SRVRVUk5fSEFORExFUl9SVFgnLiAgRWl0aGVyCiAgICAgdGhhdCBtYWNybyBvciB0aGlzIHBhdHRlcm4gbmVlZHMgdG8gYmUgZGVmaW5lZCBpZiBjYWxsIGZyYW1lCiAgICAgZXhjZXB0aW9uIGhhbmRsaW5nIGlzIHRvIGJlIHVzZWQuCgoncHJvbG9ndWUnCiAgICAgVGhpcyBwYXR0ZXJuLCBpZiBkZWZpbmVkLCBlbWl0cyBSVEwgZm9yIGVudHJ5IHRvIGEgZnVuY3Rpb24uICBUaGUKICAgICBmdW5jdGlvbiBlbnRyeSBpcyByZXNwb25zaWJsZSBmb3Igc2V0dGluZyB1cCB0aGUgc3RhY2sgZnJhbWUsCiAgICAgaW5pdGlhbGl6aW5nIHRoZSBmcmFtZSBwb2ludGVyIHJlZ2lzdGVyLCBzYXZpbmcgY2FsbGVlIHNhdmVkCiAgICAgcmVnaXN0ZXJzLCBldGMuCgogICAgIFVzaW5nIGEgcHJvbG9ndWUgcGF0dGVybiBpcyBnZW5lcmFsbHkgcHJlZmVycmVkIG92ZXIgZGVmaW5pbmcKICAgICAnVEFSR0VUX0FTTV9GVU5DVElPTl9QUk9MT0dVRScgdG8gZW1pdCBhc3NlbWJseSBjb2RlIGZvciB0aGUKICAgICBwcm9sb2d1ZS4KCiAgICAgVGhlICdwcm9sb2d1ZScgcGF0dGVybiBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIGZvciB0YXJnZXRzIHdoaWNoCiAgICAgcGVyZm9ybSBpbnN0cnVjdGlvbiBzY2hlZHVsaW5nLgoKJ2VwaWxvZ3VlJwogICAgIFRoaXMgcGF0dGVybiBlbWl0cyBSVEwgZm9yIGV4aXQgZnJvbSBhIGZ1bmN0aW9uLiAgVGhlIGZ1bmN0aW9uIGV4aXQKICAgICBpcyByZXNwb25zaWJsZSBmb3IgZGVhbGxvY2F0aW5nIHRoZSBzdGFjayBmcmFtZSwgcmVzdG9yaW5nIGNhbGxlZQogICAgIHNhdmVkIHJlZ2lzdGVycyBhbmQgZW1pdHRpbmcgdGhlIHJldHVybiBpbnN0cnVjdGlvbi4KCiAgICAgVXNpbmcgYW4gZXBpbG9ndWUgcGF0dGVybiBpcyBnZW5lcmFsbHkgcHJlZmVycmVkIG92ZXIgZGVmaW5pbmcKICAgICAnVEFSR0VUX0FTTV9GVU5DVElPTl9FUElMT0dVRScgdG8gZW1pdCBhc3NlbWJseSBjb2RlIGZvciB0aGUKICAgICBlcGlsb2d1ZS4KCiAgICAgVGhlICdlcGlsb2d1ZScgcGF0dGVybiBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIGZvciB0YXJnZXRzIHdoaWNoCiAgICAgcGVyZm9ybSBpbnN0cnVjdGlvbiBzY2hlZHVsaW5nIG9yIHdoaWNoIGhhdmUgZGVsYXkgc2xvdHMgZm9yIHRoZWlyCiAgICAgcmV0dXJuIGluc3RydWN0aW9uLgoKJ3NpYmNhbGxfZXBpbG9ndWUnCiAgICAgVGhpcyBwYXR0ZXJuLCBpZiBkZWZpbmVkLCBlbWl0cyBSVEwgZm9yIGV4aXQgZnJvbSBhIGZ1bmN0aW9uCiAgICAgd2l0aG91dCB0aGUgZmluYWwgYnJhbmNoIGJhY2sgdG8gdGhlIGNhbGxpbmcgZnVuY3Rpb24uICBUaGlzCiAgICAgcGF0dGVybiB3aWxsIGJlIGVtaXR0ZWQgYmVmb3JlIGFueSBzaWJsaW5nIGNhbGwgKGFrYSB0YWlsIGNhbGwpCiAgICAgc2l0ZXMuCgogICAgIFRoZSAnc2liY2FsbF9lcGlsb2d1ZScgcGF0dGVybiBtdXN0IG5vdCBjbG9iYmVyIGFueSBhcmd1bWVudHMgdXNlZAogICAgIGZvciBwYXJhbWV0ZXIgcGFzc2luZyBvciBhbnkgc3RhY2sgc2xvdHMgZm9yIGFyZ3VtZW50cyBwYXNzZWQgdG8KICAgICB0aGUgY3VycmVudCBmdW5jdGlvbi4KCid0cmFwJwogICAgIFRoaXMgcGF0dGVybiwgaWYgZGVmaW5lZCwgc2lnbmFscyBhbiBlcnJvciwgdHlwaWNhbGx5IGJ5IGNhdXNpbmcKICAgICBzb21lIGtpbmQgb2Ygc2lnbmFsIHRvIGJlIHJhaXNlZC4gIEFtb25nIG90aGVyIHBsYWNlcywgaXQgaXMgdXNlZAogICAgIGJ5IHRoZSBKYXZhIGZyb250IGVuZCB0byBzaWduYWwgJ2ludmFsaWQgYXJyYXkgaW5kZXgnIGV4Y2VwdGlvbnMuCgonY29uZGl0aW9uYWxfdHJhcCcKICAgICBDb25kaXRpb25hbCB0cmFwIGluc3RydWN0aW9uLiAgT3BlcmFuZCAwIGlzIGEgcGllY2Ugb2YgUlRMIHdoaWNoCiAgICAgcGVyZm9ybXMgYSBjb21wYXJpc29uLiAgT3BlcmFuZCAxIGlzIHRoZSB0cmFwIGNvZGUsIGFuIGludGVnZXIuCgogICAgIEEgdHlwaWNhbCAnY29uZGl0aW9uYWxfdHJhcCcgcGF0dGVybiBsb29rcyBsaWtlCgogICAgICAgICAgKGRlZmluZV9pbnNuICJjb25kaXRpb25hbF90cmFwIgogICAgICAgICAgICBbKHRyYXBfaWYgKG1hdGNoX29wZXJhdG9yIDAgInRyYXBfb3BlcmF0b3IiCiAgICAgICAgICAgICAgICAgICAgICAgWyhjYzApIChjb25zdF9pbnQgMCldKQogICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQgMSAiY29uc3RfaW50X29wZXJhbmQiICJpIikpXQogICAgICAgICAgICAiIgogICAgICAgICAgICAiLi4uIikKCidwcmVmZXRjaCcKCiAgICAgVGhpcyBwYXR0ZXJuLCBpZiBkZWZpbmVkLCBlbWl0cyBjb2RlIGZvciBhIG5vbi1mYXVsdGluZyBkYXRhCiAgICAgcHJlZmV0Y2ggaW5zdHJ1Y3Rpb24uICBPcGVyYW5kIDAgaXMgdGhlIGFkZHJlc3Mgb2YgdGhlIG1lbW9yeSB0bwogICAgIHByZWZldGNoLiAgT3BlcmFuZCAxIGlzIGEgY29uc3RhbnQgMSBpZiB0aGUgcHJlZmV0Y2ggaXMgcHJlcGFyaW5nCiAgICAgZm9yIGEgd3JpdGUgdG8gdGhlIG1lbW9yeSBhZGRyZXNzLCBvciBhIGNvbnN0YW50IDAgb3RoZXJ3aXNlLgogICAgIE9wZXJhbmQgMiBpcyB0aGUgZXhwZWN0ZWQgZGVncmVlIG9mIHRlbXBvcmFsIGxvY2FsaXR5IG9mIHRoZSBkYXRhCiAgICAgYW5kIGlzIGEgdmFsdWUgYmV0d2VlbiAwIGFuZCAzLCBpbmNsdXNpdmU7IDAgbWVhbnMgdGhhdCB0aGUgZGF0YQogICAgIGhhcyBubyB0ZW1wb3JhbCBsb2NhbGl0eSwgc28gaXQgbmVlZCBub3QgYmUgbGVmdCBpbiB0aGUgY2FjaGUgYWZ0ZXIKICAgICB0aGUgYWNjZXNzOyAzIG1lYW5zIHRoYXQgdGhlIGRhdGEgaGFzIGEgaGlnaCBkZWdyZWUgb2YgdGVtcG9yYWwKICAgICBsb2NhbGl0eSBhbmQgc2hvdWxkIGJlIGxlZnQgaW4gYWxsIGxldmVscyBvZiBjYWNoZSBwb3NzaWJsZTsgMSBhbmQKICAgICAyIG1lYW4sIHJlc3BlY3RpdmVseSwgYSBsb3cgb3IgbW9kZXJhdGUgZGVncmVlIG9mIHRlbXBvcmFsCiAgICAgbG9jYWxpdHkuCgogICAgIFRhcmdldHMgdGhhdCBkbyBub3Qgc3VwcG9ydCB3cml0ZSBwcmVmZXRjaGVzIG9yIGxvY2FsaXR5IGhpbnRzIGNhbgogICAgIGlnbm9yZSB0aGUgdmFsdWVzIG9mIG9wZXJhbmRzIDEgYW5kIDIuCgonYmxvY2thZ2UnCgogICAgIFRoaXMgcGF0dGVybiBkZWZpbmVzIGEgcHNldWRvIGluc24gdGhhdCBwcmV2ZW50cyB0aGUgaW5zdHJ1Y3Rpb24KICAgICBzY2hlZHVsZXIgZnJvbSBtb3ZpbmcgaW5zdHJ1Y3Rpb25zIGFjcm9zcyB0aGUgYm91bmRhcnkgZGVmaW5lZCBieQogICAgIHRoZSBibG9ja2FnZSBpbnNuLiAgTm9ybWFsbHkgYW4gVU5TUEVDX1ZPTEFUSUxFIHBhdHRlcm4uCgonbWVtb3J5X2JhcnJpZXInCgogICAgIElmIHRoZSB0YXJnZXQgbWVtb3J5IG1vZGVsIGlzIG5vdCBmdWxseSBzeW5jaHJvbm91cywgdGhlbiB0aGlzCiAgICAgcGF0dGVybiBzaG91bGQgYmUgZGVmaW5lZCB0byBhbiBpbnN0cnVjdGlvbiB0aGF0IG9yZGVycyBib3RoIGxvYWRzCiAgICAgYW5kIHN0b3JlcyBiZWZvcmUgdGhlIGluc3RydWN0aW9uIHdpdGggcmVzcGVjdCB0byBsb2FkcyBhbmQgc3RvcmVzCiAgICAgYWZ0ZXIgdGhlIGluc3RydWN0aW9uLiAgVGhpcyBwYXR0ZXJuIGhhcyBubyBvcGVyYW5kcy4KCidzeW5jX2NvbXBhcmVfYW5kX3N3YXBNT0RFJwoKICAgICBUaGlzIHBhdHRlcm4sIGlmIGRlZmluZWQsIGVtaXRzIGNvZGUgZm9yIGFuIGF0b21pYyBjb21wYXJlLWFuZC1zd2FwCiAgICAgb3BlcmF0aW9uLiAgT3BlcmFuZCAxIGlzIHRoZSBtZW1vcnkgb24gd2hpY2ggdGhlIGF0b21pYyBvcGVyYXRpb24KICAgICBpcyBwZXJmb3JtZWQuICBPcGVyYW5kIDIgaXMgdGhlICJvbGQiIHZhbHVlIHRvIGJlIGNvbXBhcmVkIGFnYWluc3QKICAgICB0aGUgY3VycmVudCBjb250ZW50cyBvZiB0aGUgbWVtb3J5IGxvY2F0aW9uLiAgT3BlcmFuZCAzIGlzIHRoZQogICAgICJuZXciIHZhbHVlIHRvIHN0b3JlIGluIHRoZSBtZW1vcnkgaWYgdGhlIGNvbXBhcmUgc3VjY2VlZHMuCiAgICAgT3BlcmFuZCAwIGlzIHRoZSByZXN1bHQgb2YgdGhlIG9wZXJhdGlvbjsgaXQgc2hvdWxkIGNvbnRhaW4gdGhlCiAgICAgY29udGVudHMgb2YgdGhlIG1lbW9yeSBiZWZvcmUgdGhlIG9wZXJhdGlvbi4gIElmIHRoZSBjb21wYXJlCiAgICAgc3VjY2VlZHMsIHRoaXMgc2hvdWxkIG9idmlvdXNseSBiZSBhIGNvcHkgb2Ygb3BlcmFuZCAyLgoKICAgICBUaGlzIHBhdHRlcm4gbXVzdCBzaG93IHRoYXQgYm90aCBvcGVyYW5kIDAgYW5kIG9wZXJhbmQgMSBhcmUKICAgICBtb2RpZmllZC4KCiAgICAgVGhpcyBwYXR0ZXJuIG11c3QgaXNzdWUgYW55IG1lbW9yeSBiYXJyaWVyIGluc3RydWN0aW9ucyBzdWNoIHRoYXQKICAgICBhbGwgbWVtb3J5IG9wZXJhdGlvbnMgYmVmb3JlIHRoZSBhdG9taWMgb3BlcmF0aW9uIG9jY3VyIGJlZm9yZSB0aGUKICAgICBhdG9taWMgb3BlcmF0aW9uIGFuZCBhbGwgbWVtb3J5IG9wZXJhdGlvbnMgYWZ0ZXIgdGhlIGF0b21pYwogICAgIG9wZXJhdGlvbiBvY2N1ciBhZnRlciB0aGUgYXRvbWljIG9wZXJhdGlvbi4KCidzeW5jX2NvbXBhcmVfYW5kX3N3YXBfY2NNT0RFJwoKICAgICBUaGlzIHBhdHRlcm4gaXMganVzdCBsaWtlICdzeW5jX2NvbXBhcmVfYW5kX3N3YXBNT0RFJywgZXhjZXB0IGl0CiAgICAgc2hvdWxkIGFjdCBhcyBpZiBjb21wYXJlIHBhcnQgb2YgdGhlIGNvbXBhcmUtYW5kLXN3YXAgd2VyZSBpc3N1ZWQKICAgICB2aWEgJ2NtcE0nLiAgVGhpcyBjb21wYXJpc29uIHdpbGwgb25seSBiZSB1c2VkIHdpdGggJ0VRJyBhbmQgJ05FJwogICAgIGJyYW5jaGVzIGFuZCAnc2V0Y2MnIG9wZXJhdGlvbnMuCgogICAgIFNvbWUgdGFyZ2V0cyBkbyBleHBvc2UgdGhlIHN1Y2Nlc3Mgb3IgZmFpbHVyZSBvZiB0aGUKICAgICBjb21wYXJlLWFuZC1zd2FwIG9wZXJhdGlvbiB2aWEgdGhlIHN0YXR1cyBmbGFncy4gIElkZWFsbHkgd2UKICAgICB3b3VsZG4ndCBuZWVkIGEgc2VwYXJhdGUgbmFtZWQgcGF0dGVybiBpbiBvcmRlciB0byB0YWtlIGFkdmFudGFnZQogICAgIG9mIHRoaXMsIGJ1dCB0aGUgY29tYmluZSBwYXNzIGRvZXMgbm90IGhhbmRsZSBwYXR0ZXJucyB3aXRoCiAgICAgbXVsdGlwbGUgc2V0cywgd2hpY2ggaXMgcmVxdWlyZWQgYnkgZGVmaW5pdGlvbiBmb3IKICAgICAnc3luY19jb21wYXJlX2FuZF9zd2FwTU9ERScuCgonc3luY19hZGRNT0RFJywgJ3N5bmNfc3ViTU9ERScKJ3N5bmNfaW9yTU9ERScsICdzeW5jX2FuZE1PREUnCidzeW5jX3hvck1PREUnLCAnc3luY19uYW5kTU9ERScKCiAgICAgVGhlc2UgcGF0dGVybnMgZW1pdCBjb2RlIGZvciBhbiBhdG9taWMgb3BlcmF0aW9uIG9uIG1lbW9yeS4KICAgICBPcGVyYW5kIDAgaXMgdGhlIG1lbW9yeSBvbiB3aGljaCB0aGUgYXRvbWljIG9wZXJhdGlvbiBpcyBwZXJmb3JtZWQuCiAgICAgT3BlcmFuZCAxIGlzIHRoZSBzZWNvbmQgb3BlcmFuZCB0byB0aGUgYmluYXJ5IG9wZXJhdG9yLgoKICAgICBUaGUgIm5hbmQiIG9wZXJhdGlvbiBpcyAnfm9wMCAmIG9wMScuCgogICAgIFRoaXMgcGF0dGVybiBtdXN0IGlzc3VlIGFueSBtZW1vcnkgYmFycmllciBpbnN0cnVjdGlvbnMgc3VjaCB0aGF0CiAgICAgYWxsIG1lbW9yeSBvcGVyYXRpb25zIGJlZm9yZSB0aGUgYXRvbWljIG9wZXJhdGlvbiBvY2N1ciBiZWZvcmUgdGhlCiAgICAgYXRvbWljIG9wZXJhdGlvbiBhbmQgYWxsIG1lbW9yeSBvcGVyYXRpb25zIGFmdGVyIHRoZSBhdG9taWMKICAgICBvcGVyYXRpb24gb2NjdXIgYWZ0ZXIgdGhlIGF0b21pYyBvcGVyYXRpb24uCgogICAgIElmIHRoZXNlIHBhdHRlcm5zIGFyZSBub3QgZGVmaW5lZCwgdGhlIG9wZXJhdGlvbiB3aWxsIGJlCiAgICAgY29uc3RydWN0ZWQgZnJvbSBhIGNvbXBhcmUtYW5kLXN3YXAgb3BlcmF0aW9uLCBpZiBkZWZpbmVkLgoKJ3N5bmNfb2xkX2FkZE1PREUnLCAnc3luY19vbGRfc3ViTU9ERScKJ3N5bmNfb2xkX2lvck1PREUnLCAnc3luY19vbGRfYW5kTU9ERScKJ3N5bmNfb2xkX3hvck1PREUnLCAnc3luY19vbGRfbmFuZE1PREUnCgogICAgIFRoZXNlIHBhdHRlcm5zIGFyZSBlbWl0IGNvZGUgZm9yIGFuIGF0b21pYyBvcGVyYXRpb24gb24gbWVtb3J5LCBhbmQKICAgICByZXR1cm4gdGhlIHZhbHVlIHRoYXQgdGhlIG1lbW9yeSBjb250YWluZWQgYmVmb3JlIHRoZSBvcGVyYXRpb24uCiAgICAgT3BlcmFuZCAwIGlzIHRoZSByZXN1bHQgdmFsdWUsIG9wZXJhbmQgMSBpcyB0aGUgbWVtb3J5IG9uIHdoaWNoIHRoZQogICAgIGF0b21pYyBvcGVyYXRpb24gaXMgcGVyZm9ybWVkLCBhbmQgb3BlcmFuZCAyIGlzIHRoZSBzZWNvbmQgb3BlcmFuZAogICAgIHRvIHRoZSBiaW5hcnkgb3BlcmF0b3IuCgogICAgIFRoaXMgcGF0dGVybiBtdXN0IGlzc3VlIGFueSBtZW1vcnkgYmFycmllciBpbnN0cnVjdGlvbnMgc3VjaCB0aGF0CiAgICAgYWxsIG1lbW9yeSBvcGVyYXRpb25zIGJlZm9yZSB0aGUgYXRvbWljIG9wZXJhdGlvbiBvY2N1ciBiZWZvcmUgdGhlCiAgICAgYXRvbWljIG9wZXJhdGlvbiBhbmQgYWxsIG1lbW9yeSBvcGVyYXRpb25zIGFmdGVyIHRoZSBhdG9taWMKICAgICBvcGVyYXRpb24gb2NjdXIgYWZ0ZXIgdGhlIGF0b21pYyBvcGVyYXRpb24uCgogICAgIElmIHRoZXNlIHBhdHRlcm5zIGFyZSBub3QgZGVmaW5lZCwgdGhlIG9wZXJhdGlvbiB3aWxsIGJlCiAgICAgY29uc3RydWN0ZWQgZnJvbSBhIGNvbXBhcmUtYW5kLXN3YXAgb3BlcmF0aW9uLCBpZiBkZWZpbmVkLgoKJ3N5bmNfbmV3X2FkZE1PREUnLCAnc3luY19uZXdfc3ViTU9ERScKJ3N5bmNfbmV3X2lvck1PREUnLCAnc3luY19uZXdfYW5kTU9ERScKJ3N5bmNfbmV3X3hvck1PREUnLCAnc3luY19uZXdfbmFuZE1PREUnCgogICAgIFRoZXNlIHBhdHRlcm5zIGFyZSBsaWtlIHRoZWlyICdzeW5jX29sZF9PUCcgY291bnRlcnBhcnRzLCBleGNlcHQKICAgICB0aGF0IHRoZXkgcmV0dXJuIHRoZSB2YWx1ZSB0aGF0IGV4aXN0cyBpbiB0aGUgbWVtb3J5IGxvY2F0aW9uIGFmdGVyCiAgICAgdGhlIG9wZXJhdGlvbiwgcmF0aGVyIHRoYW4gYmVmb3JlIHRoZSBvcGVyYXRpb24uCgonc3luY19sb2NrX3Rlc3RfYW5kX3NldE1PREUnCgogICAgIFRoaXMgcGF0dGVybiB0YWtlcyB0d28gZm9ybXMsIGJhc2VkIG9uIHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhlCiAgICAgdGFyZ2V0LiAgSW4gZWl0aGVyIGNhc2UsIG9wZXJhbmQgMCBpcyB0aGUgcmVzdWx0IG9mIHRoZSBvcGVyYW5kLAogICAgIG9wZXJhbmQgMSBpcyB0aGUgbWVtb3J5IG9uIHdoaWNoIHRoZSBhdG9taWMgb3BlcmF0aW9uIGlzIHBlcmZvcm1lZCwKICAgICBhbmQgb3BlcmFuZCAyIGlzIHRoZSB2YWx1ZSB0byBzZXQgaW4gdGhlIGxvY2suCgogICAgIEluIHRoZSBpZGVhbCBjYXNlLCB0aGlzIG9wZXJhdGlvbiBpcyBhbiBhdG9taWMgZXhjaGFuZ2Ugb3BlcmF0aW9uLAogICAgIGluIHdoaWNoIHRoZSBwcmV2aW91cyB2YWx1ZSBpbiBtZW1vcnkgb3BlcmFuZCBpcyBjb3BpZWQgaW50byB0aGUKICAgICByZXN1bHQgb3BlcmFuZCwgYW5kIHRoZSB2YWx1ZSBvcGVyYW5kIGlzIHN0b3JlZCBpbiB0aGUgbWVtb3J5CiAgICAgb3BlcmFuZC4KCiAgICAgRm9yIGxlc3MgY2FwYWJsZSB0YXJnZXRzLCBhbnkgdmFsdWUgb3BlcmFuZCB0aGF0IGlzIG5vdCB0aGUKICAgICBjb25zdGFudCAxIHNob3VsZCBiZSByZWplY3RlZCB3aXRoICdGQUlMJy4gIEluIHRoaXMgY2FzZSB0aGUgdGFyZ2V0CiAgICAgbWF5IHVzZSBhbiBhdG9taWMgdGVzdC1hbmQtc2V0IGJpdCBvcGVyYXRpb24uICBUaGUgcmVzdWx0IG9wZXJhbmQKICAgICBzaG91bGQgY29udGFpbiAxIGlmIHRoZSBiaXQgd2FzIHByZXZpb3VzbHkgc2V0IGFuZCAwIGlmIHRoZSBiaXQgd2FzCiAgICAgcHJldmlvdXNseSBjbGVhci4gIFRoZSB0cnVlIGNvbnRlbnRzIG9mIHRoZSBtZW1vcnkgb3BlcmFuZCBhcmUKICAgICBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkLgoKICAgICBUaGlzIHBhdHRlcm4gbXVzdCBpc3N1ZSBhbnkgbWVtb3J5IGJhcnJpZXIgaW5zdHJ1Y3Rpb25zIHN1Y2ggdGhhdAogICAgIHRoZSBwYXR0ZXJuIGFzIGEgd2hvbGUgYWN0cyBhcyBhbiBhY3F1aXJlIGJhcnJpZXIsIHRoYXQgaXMgYWxsCiAgICAgbWVtb3J5IG9wZXJhdGlvbnMgYWZ0ZXIgdGhlIHBhdHRlcm4gZG8gbm90IG9jY3VyIHVudGlsIHRoZSBsb2NrIGlzCiAgICAgYWNxdWlyZWQuCgogICAgIElmIHRoaXMgcGF0dGVybiBpcyBub3QgZGVmaW5lZCwgdGhlIG9wZXJhdGlvbiB3aWxsIGJlIGNvbnN0cnVjdGVkCiAgICAgZnJvbSBhIGNvbXBhcmUtYW5kLXN3YXAgb3BlcmF0aW9uLCBpZiBkZWZpbmVkLgoKJ3N5bmNfbG9ja19yZWxlYXNlTU9ERScKCiAgICAgVGhpcyBwYXR0ZXJuLCBpZiBkZWZpbmVkLCByZWxlYXNlcyBhIGxvY2sgc2V0IGJ5CiAgICAgJ3N5bmNfbG9ja190ZXN0X2FuZF9zZXRNT0RFJy4gIE9wZXJhbmQgMCBpcyB0aGUgbWVtb3J5IHRoYXQKICAgICBjb250YWlucyB0aGUgbG9jazsgb3BlcmFuZCAxIGlzIHRoZSB2YWx1ZSB0byBzdG9yZSBpbiB0aGUgbG9jay4KCiAgICAgSWYgdGhlIHRhcmdldCBkb2Vzbid0IGltcGxlbWVudCBmdWxsIHNlbWFudGljcyBmb3IKICAgICAnc3luY19sb2NrX3Rlc3RfYW5kX3NldE1PREUnLCBhbnkgdmFsdWUgb3BlcmFuZCB3aGljaCBpcyBub3QgdGhlCiAgICAgY29uc3RhbnQgMCBzaG91bGQgYmUgcmVqZWN0ZWQgd2l0aCAnRkFJTCcsIGFuZCB0aGUgdHJ1ZSBjb250ZW50cyBvZgogICAgIHRoZSBtZW1vcnkgb3BlcmFuZCBhcmUgaW1wbGVtZW50YXRpb24gZGVmaW5lZC4KCiAgICAgVGhpcyBwYXR0ZXJuIG11c3QgaXNzdWUgYW55IG1lbW9yeSBiYXJyaWVyIGluc3RydWN0aW9ucyBzdWNoIHRoYXQKICAgICB0aGUgcGF0dGVybiBhcyBhIHdob2xlIGFjdHMgYXMgYSByZWxlYXNlIGJhcnJpZXIsIHRoYXQgaXMgdGhlIGxvY2sKICAgICBpcyByZWxlYXNlZCBvbmx5IGFmdGVyIGFsbCBwcmV2aW91cyBtZW1vcnkgb3BlcmF0aW9ucyBoYXZlCiAgICAgY29tcGxldGVkLgoKICAgICBJZiB0aGlzIHBhdHRlcm4gaXMgbm90IGRlZmluZWQsIHRoZW4gYSAnbWVtb3J5X2JhcnJpZXInIHBhdHRlcm4KICAgICB3aWxsIGJlIGVtaXR0ZWQsIGZvbGxvd2VkIGJ5IGEgc3RvcmUgb2YgdGhlIHZhbHVlIHRvIHRoZSBtZW1vcnkKICAgICBvcGVyYW5kLgoKJ3N0YWNrX3Byb3RlY3Rfc2V0JwoKICAgICBUaGlzIHBhdHRlcm4sIGlmIGRlZmluZWQsIG1vdmVzIGEgJ1Btb2RlJyB2YWx1ZSBmcm9tIHRoZSBtZW1vcnkgaW4KICAgICBvcGVyYW5kIDEgdG8gdGhlIG1lbW9yeSBpbiBvcGVyYW5kIDAgd2l0aG91dCBsZWF2aW5nIHRoZSB2YWx1ZSBpbiBhCiAgICAgcmVnaXN0ZXIgYWZ0ZXJ3YXJkLiAgVGhpcyBpcyB0byBhdm9pZCBsZWFraW5nIHRoZSB2YWx1ZSBzb21lIHBsYWNlCiAgICAgdGhhdCBhbiBhdHRhY2tlciBtaWdodCB1c2UgdG8gcmV3cml0ZSB0aGUgc3RhY2sgZ3VhcmQgc2xvdCBhZnRlcgogICAgIGhhdmluZyBjbG9iYmVyZWQgaXQuCgogICAgIElmIHRoaXMgcGF0dGVybiBpcyBub3QgZGVmaW5lZCwgdGhlbiBhIHBsYWluIG1vdmUgcGF0dGVybiBpcwogICAgIGdlbmVyYXRlZC4KCidzdGFja19wcm90ZWN0X3Rlc3QnCgogICAgIFRoaXMgcGF0dGVybiwgaWYgZGVmaW5lZCwgY29tcGFyZXMgYSAnUG1vZGUnIHZhbHVlIGZyb20gdGhlIG1lbW9yeQogICAgIGluIG9wZXJhbmQgMSB3aXRoIHRoZSBtZW1vcnkgaW4gb3BlcmFuZCAwIHdpdGhvdXQgbGVhdmluZyB0aGUgdmFsdWUKICAgICBpbiBhIHJlZ2lzdGVyIGFmdGVyd2FyZCBhbmQgYnJhbmNoZXMgdG8gb3BlcmFuZCAyIGlmIHRoZSB2YWx1ZXMKICAgICB3ZXJlbid0IGVxdWFsLgoKICAgICBJZiB0aGlzIHBhdHRlcm4gaXMgbm90IGRlZmluZWQsIHRoZW4gYSBwbGFpbiBjb21wYXJlIHBhdHRlcm4gYW5kCiAgICAgY29uZGl0aW9uYWwgYnJhbmNoIHBhdHRlcm4gaXMgdXNlZC4KCidjbGVhcl9jYWNoZScKCiAgICAgVGhpcyBwYXR0ZXJuLCBpZiBkZWZpbmVkLCBmbHVzaGVzIHRoZSBpbnN0cnVjdGlvbiBjYWNoZSBmb3IgYQogICAgIHJlZ2lvbiBvZiBtZW1vcnkuICBUaGUgcmVnaW9uIGlzIGJvdW5kZWQgdG8gYnkgdGhlIFBtb2RlIHBvaW50ZXJzCiAgICAgaW4gb3BlcmFuZCAwIGluY2x1c2l2ZSBhbmQgb3BlcmFuZCAxIGV4Y2x1c2l2ZS4KCiAgICAgSWYgdGhpcyBwYXR0ZXJuIGlzIG5vdCBkZWZpbmVkLCBhIGNhbGwgdG8gdGhlIGxpYnJhcnkgZnVuY3Rpb24KICAgICAnX19jbGVhcl9jYWNoZScgaXMgdXNlZC4KCh8KRmlsZTogZ2NjaW50LmluZm8sICBOb2RlOiBQYXR0ZXJuIE9yZGVyaW5nLCAgTmV4dDogRGVwZW5kZW50IFBhdHRlcm5zLCAgUHJldjogU3RhbmRhcmQgTmFtZXMsICBVcDogTWFjaGluZSBEZXNjCgoxNC4xMCBXaGVuIHRoZSBPcmRlciBvZiBQYXR0ZXJucyBNYXR0ZXJzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KClNvbWV0aW1lcyBhbiBpbnNuIGNhbiBtYXRjaCBtb3JlIHRoYW4gb25lIGluc3RydWN0aW9uIHBhdHRlcm4uICBUaGVuIHRoZQpwYXR0ZXJuIHRoYXQgYXBwZWFycyBmaXJzdCBpbiB0aGUgbWFjaGluZSBkZXNjcmlwdGlvbiBpcyB0aGUgb25lIHVzZWQuClRoZXJlZm9yZSwgbW9yZSBzcGVjaWZpYyBwYXR0ZXJucyAocGF0dGVybnMgdGhhdCB3aWxsIG1hdGNoIGZld2VyCnRoaW5ncykgYW5kIGZhc3RlciBpbnN0cnVjdGlvbnMgKHRob3NlIHRoYXQgd2lsbCBwcm9kdWNlIGJldHRlciBjb2RlCndoZW4gdGhleSBkbyBtYXRjaCkgc2hvdWxkIHVzdWFsbHkgZ28gZmlyc3QgaW4gdGhlIGRlc2NyaXB0aW9uLgoKIEluIHNvbWUgY2FzZXMgdGhlIGVmZmVjdCBvZiBvcmRlcmluZyB0aGUgcGF0dGVybnMgY2FuIGJlIHVzZWQgdG8gaGlkZSBhCnBhdHRlcm4gd2hlbiBpdCBpcyBub3QgdmFsaWQuICBGb3IgZXhhbXBsZSwgdGhlIDY4MDAwIGhhcyBhbiBpbnN0cnVjdGlvbgpmb3IgY29udmVydGluZyBhIGZ1bGx3b3JkIHRvIGZsb2F0aW5nIHBvaW50IGFuZCBhbm90aGVyIGZvciBjb252ZXJ0aW5nIGEKYnl0ZSB0byBmbG9hdGluZyBwb2ludC4gIEFuIGluc3RydWN0aW9uIGNvbnZlcnRpbmcgYW4gaW50ZWdlciB0bwpmbG9hdGluZyBwb2ludCBjb3VsZCBtYXRjaCBlaXRoZXIgb25lLiAgV2UgcHV0IHRoZSBwYXR0ZXJuIHRvIGNvbnZlcnQKdGhlIGZ1bGx3b3JkIGZpcnN0IHRvIG1ha2Ugc3VyZSB0aGF0IG9uZSB3aWxsIGJlIHVzZWQgcmF0aGVyIHRoYW4gdGhlCm90aGVyLiAgKE90aGVyd2lzZSBhIGxhcmdlIGludGVnZXIgbWlnaHQgYmUgZ2VuZXJhdGVkIGFzIGEgc2luZ2xlLWJ5dGUKaW1tZWRpYXRlIHF1YW50aXR5LCB3aGljaCB3b3VsZCBub3Qgd29yay4pICBJbnN0ZWFkIG9mIHVzaW5nIHRoaXMKcGF0dGVybiBvcmRlcmluZyBpdCB3b3VsZCBiZSBwb3NzaWJsZSB0byBtYWtlIHRoZSBwYXR0ZXJuIGZvcgpjb252ZXJ0LWEtYnl0ZSBzbWFydCBlbm91Z2ggdG8gZGVhbCBwcm9wZXJseSB3aXRoIGFueSBjb25zdGFudCB2YWx1ZS4KCh8KRmlsZTogZ2NjaW50LmluZm8sICBOb2RlOiBEZXBlbmRlbnQgUGF0dGVybnMsICBOZXh0OiBKdW1wIFBhdHRlcm5zLCAgUHJldjogUGF0dGVybiBPcmRlcmluZywgIFVwOiBNYWNoaW5lIERlc2MKCjE0LjExIEludGVyZGVwZW5kZW5jZSBvZiBQYXR0ZXJucwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCkV2ZXJ5IG1hY2hpbmUgZGVzY3JpcHRpb24gbXVzdCBoYXZlIGEgbmFtZWQgcGF0dGVybiBmb3IgZWFjaCBvZiB0aGUKY29uZGl0aW9uYWwgYnJhbmNoIG5hbWVzICdiQ09ORCcuICBUaGUgcmVjb2duaXRpb24gdGVtcGxhdGUgbXVzdCBhbHdheXMKaGF2ZSB0aGUgZm9ybQoKICAgICAoc2V0IChwYykKICAgICAgICAgIChpZl90aGVuX2Vsc2UgKENPTkQgKGNjMCkgKGNvbnN0X2ludCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgKGxhYmVsX3JlZiAobWF0Y2hfb3BlcmFuZCAwICIiICIiKSkKICAgICAgICAgICAgICAgICAgICAgICAgKHBjKSkpCgpJbiBhZGRpdGlvbiwgZXZlcnkgbWFjaGluZSBkZXNjcmlwdGlvbiBtdXN0IGhhdmUgYW4gYW5vbnltb3VzIHBhdHRlcm4KZm9yIGVhY2ggb2YgdGhlIHBvc3NpYmxlIHJldmVyc2UtY29uZGl0aW9uYWwgYnJhbmNoZXMuICBUaGVpciB0ZW1wbGF0ZXMKbG9vayBsaWtlCgogICAgIChzZXQgKHBjKQogICAgICAgICAgKGlmX3RoZW5fZWxzZSAoQ09ORCAoY2MwKSAoY29uc3RfaW50IDApKQogICAgICAgICAgICAgICAgICAgICAgICAocGMpCiAgICAgICAgICAgICAgICAgICAgICAgIChsYWJlbF9yZWYgKG1hdGNoX29wZXJhbmQgMCAiIiAiIikpKSkKClRoZXkgYXJlIG5lY2Vzc2FyeSBiZWNhdXNlIGp1bXAgb3B0aW1pemF0aW9uIGNhbiB0dXJuIGRpcmVjdC1jb25kaXRpb25hbApicmFuY2hlcyBpbnRvIHJldmVyc2UtY29uZGl0aW9uYWwgYnJhbmNoZXMuCgogSXQgaXMgb2Z0ZW4gY29udmVuaWVudCB0byB1c2UgdGhlICdtYXRjaF9vcGVyYXRvcicgY29uc3RydWN0IHRvIHJlZHVjZQp0aGUgbnVtYmVyIG9mIHBhdHRlcm5zIHRoYXQgbXVzdCBiZSBzcGVjaWZpZWQgZm9yIGJyYW5jaGVzLiAgRm9yCmV4YW1wbGUsCgogICAgIChkZWZpbmVfaW5zbiAiIgogICAgICAgWyhzZXQgKHBjKQogICAgICAgICAgICAgKGlmX3RoZW5fZWxzZSAobWF0Y2hfb3BlcmF0b3IgMCAiY29tcGFyaXNvbl9vcGVyYXRvciIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsoY2MwKSAoY29uc3RfaW50IDApXSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBjKQogICAgICAgICAgICAgICAgICAgICAgICAgICAobGFiZWxfcmVmIChtYXRjaF9vcGVyYW5kIDEgIiIgIiIpKSkpXQogICAgICAgIkNPTkRJVElPTiIKICAgICAgICIuLi4iKQoKIEluIHNvbWUgY2FzZXMgbWFjaGluZXMgc3VwcG9ydCBpbnN0cnVjdGlvbnMgaWRlbnRpY2FsIGV4Y2VwdCBmb3IgdGhlCm1hY2hpbmUgbW9kZSBvZiBvbmUgb3IgbW9yZSBvcGVyYW5kcy4gIEZvciBleGFtcGxlLCB0aGVyZSBtYXkgYmUKInNpZ24tZXh0ZW5kIGhhbGZ3b3JkIiBhbmQgInNpZ24tZXh0ZW5kIGJ5dGUiIGluc3RydWN0aW9ucyB3aG9zZQpwYXR0ZXJucyBhcmUKCiAgICAgKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwIC4uLikKICAgICAgICAgIChleHRlbmQ6U0kgKG1hdGNoX29wZXJhbmQ6SEkgMSAuLi4pKSkKCiAgICAgKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwIC4uLikKICAgICAgICAgIChleHRlbmQ6U0kgKG1hdGNoX29wZXJhbmQ6UUkgMSAuLi4pKSkKCkNvbnN0YW50IGludGVnZXJzIGRvIG5vdCBzcGVjaWZ5IGEgbWFjaGluZSBtb2RlLCBzbyBhbiBpbnN0cnVjdGlvbiB0bwpleHRlbmQgYSBjb25zdGFudCB2YWx1ZSBjb3VsZCBtYXRjaCBlaXRoZXIgcGF0dGVybi4gIFRoZSBwYXR0ZXJuIGl0CmFjdHVhbGx5IHdpbGwgbWF0Y2ggaXMgdGhlIG9uZSB0aGF0IGFwcGVhcnMgZmlyc3QgaW4gdGhlIGZpbGUuICBGb3IKY29ycmVjdCByZXN1bHRzLCB0aGlzIG11c3QgYmUgdGhlIG9uZSBmb3IgdGhlIHdpZGVzdCBwb3NzaWJsZSBtb2RlCignSEltb2RlJywgaGVyZSkuICBJZiB0aGUgcGF0dGVybiBtYXRjaGVzIHRoZSAnUUltb2RlJyBpbnN0cnVjdGlvbiwgdGhlCnJlc3VsdHMgd2lsbCBiZSBpbmNvcnJlY3QgaWYgdGhlIGNvbnN0YW50IHZhbHVlIGRvZXMgbm90IGFjdHVhbGx5IGZpdAp0aGF0IG1vZGUuCgogU3VjaCBpbnN0cnVjdGlvbnMgdG8gZXh0ZW5kIGNvbnN0YW50cyBhcmUgcmFyZWx5IGdlbmVyYXRlZCBiZWNhdXNlIHRoZXkKYXJlIG9wdGltaXplZCBhd2F5LCBidXQgdGhleSBkbyBvY2Nhc2lvbmFsbHkgaGFwcGVuIGluIG5vbm9wdGltaXplZApjb21waWxhdGlvbnMuCgogSWYgYSBjb25zdHJhaW50IGluIGEgcGF0dGVybiBhbGxvd3MgYSBjb25zdGFudCwgdGhlIHJlbG9hZCBwYXNzIG1heQpyZXBsYWNlIGEgcmVnaXN0ZXIgd2l0aCBhIGNvbnN0YW50IHBlcm1pdHRlZCBieSB0aGUgY29uc3RyYWludCBpbiBzb21lCmNhc2VzLiAgU2ltaWxhcmx5IGZvciBtZW1vcnkgcmVmZXJlbmNlcy4gIEJlY2F1c2Ugb2YgdGhpcyBzdWJzdGl0dXRpb24sCnlvdSBzaG91bGQgbm90IHByb3ZpZGUgc2VwYXJhdGUgcGF0dGVybnMgZm9yIGluY3JlbWVudCBhbmQgZGVjcmVtZW50Cmluc3RydWN0aW9ucy4gIEluc3RlYWQsIHRoZXkgc2hvdWxkIGJlIGdlbmVyYXRlZCBmcm9tIHRoZSBzYW1lIHBhdHRlcm4KdGhhdCBzdXBwb3J0cyByZWdpc3Rlci1yZWdpc3RlciBhZGQgaW5zbnMgYnkgZXhhbWluaW5nIHRoZSBvcGVyYW5kcyBhbmQKZ2VuZXJhdGluZyB0aGUgYXBwcm9wcmlhdGUgbWFjaGluZSBpbnN0cnVjdGlvbi4KCh8KRmlsZTogZ2NjaW50LmluZm8sICBOb2RlOiBKdW1wIFBhdHRlcm5zLCAgTmV4dDogTG9vcGluZyBQYXR0ZXJucywgIFByZXY6IERlcGVuZGVudCBQYXR0ZXJucywgIFVwOiBNYWNoaW5lIERlc2MKCjE0LjEyIERlZmluaW5nIEp1bXAgSW5zdHJ1Y3Rpb24gUGF0dGVybnMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKRm9yIG1vc3QgbWFjaGluZXMsIEdDQyBhc3N1bWVzIHRoYXQgdGhlIG1hY2hpbmUgaGFzIGEgY29uZGl0aW9uIGNvZGUuICBBCmNvbXBhcmlzb24gaW5zbiBzZXRzIHRoZSBjb25kaXRpb24gY29kZSwgcmVjb3JkaW5nIHRoZSByZXN1bHRzIG9mIGJvdGgKc2lnbmVkIGFuZCB1bnNpZ25lZCBjb21wYXJpc29uIG9mIHRoZSBnaXZlbiBvcGVyYW5kcy4gIEEgc2VwYXJhdGUgYnJhbmNoCmluc24gdGVzdHMgdGhlIGNvbmRpdGlvbiBjb2RlIGFuZCBicmFuY2hlcyBvciBub3QgYWNjb3JkaW5nIGl0cyB2YWx1ZS4KVGhlIGJyYW5jaCBpbnNucyBjb21lIGluIGRpc3RpbmN0IHNpZ25lZCBhbmQgdW5zaWduZWQgZmxhdm9ycy4gIE1hbnkKY29tbW9uIG1hY2hpbmVzLCBzdWNoIGFzIHRoZSBWQVgsIHRoZSA2ODAwMCBhbmQgdGhlIDMyMDAwLCB3b3JrIHRoaXMKd2F5LgoKIFNvbWUgbWFjaGluZXMgaGF2ZSBkaXN0aW5jdCBzaWduZWQgYW5kIHVuc2lnbmVkIGNvbXBhcmUgaW5zdHJ1Y3Rpb25zLAphbmQgb25seSBvbmUgc2V0IG9mIGNvbmRpdGlvbmFsIGJyYW5jaCBpbnN0cnVjdGlvbnMuICBUaGUgZWFzaWVzdCB3YXkgdG8KaGFuZGxlIHRoZXNlIG1hY2hpbmVzIGlzIHRvIHRyZWF0IHRoZW0ganVzdCBsaWtlIHRoZSBvdGhlcnMgdW50aWwgdGhlCmZpbmFsIHN0YWdlIHdoZXJlIGFzc2VtYmx5IGNvZGUgaXMgd3JpdHRlbi4gIEF0IHRoaXMgdGltZSwgd2hlbgpvdXRwdXR0aW5nIGNvZGUgZm9yIHRoZSBjb21wYXJlIGluc3RydWN0aW9uLCBwZWVrIGFoZWFkIGF0IHRoZSBmb2xsb3dpbmcKYnJhbmNoIHVzaW5nICduZXh0X2NjMF91c2VyIChpbnNuKScuICAoVGhlIHZhcmlhYmxlICdpbnNuJyByZWZlcnMgdG8gdGhlCmluc24gYmVpbmcgb3V0cHV0LCBpbiB0aGUgb3V0cHV0LXdyaXRpbmcgY29kZSBpbiBhbiBpbnN0cnVjdGlvbgpwYXR0ZXJuLikgIElmIHRoZSBSVEwgc2F5cyB0aGF0IGlzIGFuIHVuc2lnbmVkIGJyYW5jaCwgb3V0cHV0IGFuCnVuc2lnbmVkIGNvbXBhcmU7IG90aGVyd2lzZSBvdXRwdXQgYSBzaWduZWQgY29tcGFyZS4gIFdoZW4gdGhlIGJyYW5jaAppdHNlbGYgaXMgb3V0cHV0LCB5b3UgY2FuIHRyZWF0IHNpZ25lZCBhbmQgdW5zaWduZWQgYnJhbmNoZXMKaWRlbnRpY2FsbHkuCgogVGhlIHJlYXNvbiB5b3UgY2FuIGRvIHRoaXMgaXMgdGhhdCBHQ0MgYWx3YXlzIGdlbmVyYXRlcyBhIHBhaXIgb2YKY29uc2VjdXRpdmUgUlRMIGluc25zLCBwb3NzaWJseSBzZXBhcmF0ZWQgYnkgJ25vdGUnIGluc25zLCBvbmUgdG8gc2V0CnRoZSBjb25kaXRpb24gY29kZSBhbmQgb25lIHRvIHRlc3QgaXQsIGFuZCBrZWVwcyB0aGUgcGFpciBpbnZpb2xhdGUKdW50aWwgdGhlIGVuZC4KCiBUbyBnbyB3aXRoIHRoaXMgdGVjaG5pcXVlLCB5b3UgbXVzdCBkZWZpbmUgdGhlIG1hY2hpbmUtZGVzY3JpcHRpb24KbWFjcm8gJ05PVElDRV9VUERBVEVfQ0MnIHRvIGRvICdDQ19TVEFUVVNfSU5JVCc7IGluIG90aGVyIHdvcmRzLCBubwpjb21wYXJlIGluc3RydWN0aW9uIGlzIHN1cGVyZmx1b3VzLgoKIFNvbWUgbWFjaGluZXMgaGF2ZSBjb21wYXJlLWFuZC1icmFuY2ggaW5zdHJ1Y3Rpb25zIGFuZCBubyBjb25kaXRpb24KY29kZS4gIEEgc2ltaWxhciB0ZWNobmlxdWUgd29ya3MgZm9yIHRoZW0uICBXaGVuIGl0IGlzIHRpbWUgdG8gIm91dHB1dCIKYSBjb21wYXJlIGluc3RydWN0aW9uLCByZWNvcmQgaXRzIG9wZXJhbmRzIGluIHR3byBzdGF0aWMgdmFyaWFibGVzLgpXaGVuIG91dHB1dHRpbmcgdGhlIGJyYW5jaC1vbi1jb25kaXRpb24tY29kZSBpbnN0cnVjdGlvbiB0aGF0IGZvbGxvd3MsCmFjdHVhbGx5IG91dHB1dCBhIGNvbXBhcmUtYW5kLWJyYW5jaCBpbnN0cnVjdGlvbiB0aGF0IHVzZXMgdGhlCnJlbWVtYmVyZWQgb3BlcmFuZHMuCgogSXQgYWxzbyB3b3JrcyB0byBkZWZpbmUgcGF0dGVybnMgZm9yIGNvbXBhcmUtYW5kLWJyYW5jaCBpbnN0cnVjdGlvbnMuCkluIG9wdGltaXppbmcgY29tcGlsYXRpb24sIHRoZSBwYWlyIG9mIGNvbXBhcmUgYW5kIGJyYW5jaCBpbnN0cnVjdGlvbnMKd2lsbCBiZSBjb21iaW5lZCBhY2NvcmRpbmcgdG8gdGhlc2UgcGF0dGVybnMuICBCdXQgdGhpcyBkb2VzIG5vdCBoYXBwZW4KaWYgb3B0aW1pemF0aW9uIGlzIG5vdCByZXF1ZXN0ZWQuICBTbyB5b3UgbXVzdCB1c2Ugb25lIG9mIHRoZSBzb2x1dGlvbnMKYWJvdmUgaW4gYWRkaXRpb24gdG8gYW55IHNwZWNpYWwgcGF0dGVybnMgeW91IGRlZmluZS4KCiBJbiBtYW55IFJJU0MgbWFjaGluZXMsIG1vc3QgaW5zdHJ1Y3Rpb25zIGRvIG5vdCBhZmZlY3QgdGhlIGNvbmRpdGlvbgpjb2RlIGFuZCB0aGVyZSBtYXkgbm90IGV2ZW4gYmUgYSBzZXBhcmF0ZSBjb25kaXRpb24gY29kZSByZWdpc3Rlci4gIE9uCnRoZXNlIG1hY2hpbmVzLCB0aGUgcmVzdHJpY3Rpb24gdGhhdCB0aGUgZGVmaW5pdGlvbiBhbmQgdXNlIG9mIHRoZQpjb25kaXRpb24gY29kZSBiZSBhZGphY2VudCBpbnNucyBpcyBub3QgbmVjZXNzYXJ5IGFuZCBjYW4gcHJldmVudAppbXBvcnRhbnQgb3B0aW1pemF0aW9ucy4gIEZvciBleGFtcGxlLCBvbiB0aGUgSUJNIFJTLzYwMDAsIHRoZXJlIGlzIGEKZGVsYXkgZm9yIHRha2VuIGJyYW5jaGVzIHVubGVzcyB0aGUgY29uZGl0aW9uIGNvZGUgcmVnaXN0ZXIgaXMgc2V0IHRocmVlCmluc3RydWN0aW9ucyBlYXJsaWVyIHRoYW4gdGhlIGNvbmRpdGlvbmFsIGJyYW5jaC4gIFRoZSBpbnN0cnVjdGlvbgpzY2hlZHVsZXIgY2Fubm90IHBlcmZvcm0gdGhpcyBvcHRpbWl6YXRpb24gaWYgaXQgaXMgbm90IHBlcm1pdHRlZCB0bwpzZXBhcmF0ZSB0aGUgZGVmaW5pdGlvbiBhbmQgdXNlIG9mIHRoZSBjb25kaXRpb24gY29kZSByZWdpc3Rlci4KCiBPbiB0aGVzZSBtYWNoaW5lcywgZG8gbm90IHVzZSAnKGNjMCknLCBidXQgaW5zdGVhZCB1c2UgYSByZWdpc3RlciB0bwpyZXByZXNlbnQgdGhlIGNvbmRpdGlvbiBjb2RlLiAgSWYgdGhlcmUgaXMgYSBzcGVjaWZpYyBjb25kaXRpb24gY29kZQpyZWdpc3RlciBpbiB0aGUgbWFjaGluZSwgdXNlIGEgaGFyZCByZWdpc3Rlci4gIElmIHRoZSBjb25kaXRpb24gY29kZSBvcgpjb21wYXJpc29uIHJlc3VsdCBjYW4gYmUgcGxhY2VkIGluIGFueSBnZW5lcmFsIHJlZ2lzdGVyLCBvciBpZiB0aGVyZSBhcmUKbXVsdGlwbGUgY29uZGl0aW9uIHJlZ2lzdGVycywgdXNlIGEgcHNldWRvIHJlZ2lzdGVyLgoKIE9uIHNvbWUgbWFjaGluZXMsIHRoZSB0eXBlIG9mIGJyYW5jaCBpbnN0cnVjdGlvbiBnZW5lcmF0ZWQgbWF5IGRlcGVuZApvbiB0aGUgd2F5IHRoZSBjb25kaXRpb24gY29kZSB3YXMgcHJvZHVjZWQ7IGZvciBleGFtcGxlLCBvbiB0aGUgNjhrIGFuZApTUEFSQywgc2V0dGluZyB0aGUgY29uZGl0aW9uIGNvZGUgZGlyZWN0bHkgZnJvbSBhbiBhZGQgb3Igc3VidHJhY3QKaW5zdHJ1Y3Rpb24gZG9lcyBub3QgY2xlYXIgdGhlIG92ZXJmbG93IGJpdCB0aGUgd2F5IHRoYXQgYSB0ZXN0Cmluc3RydWN0aW9uIGRvZXMsIHNvIGEgZGlmZmVyZW50IGJyYW5jaCBpbnN0cnVjdGlvbiBtdXN0IGJlIHVzZWQgZm9yCnNvbWUgY29uZGl0aW9uYWwgYnJhbmNoZXMuICBGb3IgbWFjaGluZXMgdGhhdCB1c2UgJyhjYzApJywgdGhlIHNldCBhbmQKdXNlIG9mIHRoZSBjb25kaXRpb24gY29kZSBtdXN0IGJlIGFkamFjZW50IChzZXBhcmF0ZWQgb25seSBieSAnbm90ZScKaW5zbnMpIGFsbG93aW5nIGZsYWdzIGluICdjY19zdGF0dXMnIHRvIGJlIHVzZWQuICAoKk5vdGUgQ29uZGl0aW9uCkNvZGU6Oi4pICBBbHNvLCB0aGUgY29tcGFyaXNvbiBhbmQgYnJhbmNoIGluc25zIGNhbiBiZSBsb2NhdGVkIGZyb20gZWFjaApvdGhlciBieSB1c2luZyB0aGUgZnVuY3Rpb25zICdwcmV2X2NjMF9zZXR0ZXInIGFuZCAnbmV4dF9jYzBfdXNlcicuCgogSG93ZXZlciwgdGhpcyBpcyBub3QgdHJ1ZSBvbiBtYWNoaW5lcyB0aGF0IGRvIG5vdCB1c2UgJyhjYzApJy4gIE9uCnRob3NlIG1hY2hpbmVzLCBubyBhc3N1bXB0aW9ucyBjYW4gYmUgbWFkZSBhYm91dCB0aGUgYWRqYWNlbmN5IG9mIHRoZQpjb21wYXJlIGFuZCBicmFuY2ggaW5zbnMgYW5kIHRoZSBhYm92ZSBtZXRob2RzIGNhbm5vdCBiZSB1c2VkLiAgSW5zdGVhZCwKd2UgdXNlIHRoZSBtYWNoaW5lIG1vZGUgb2YgdGhlIGNvbmRpdGlvbiBjb2RlIHJlZ2lzdGVyIHRvIHJlY29yZApkaWZmZXJlbnQgZm9ybWF0cyBvZiB0aGUgY29uZGl0aW9uIGNvZGUgcmVnaXN0ZXIuCgogUmVnaXN0ZXJzIHVzZWQgdG8gc3RvcmUgdGhlIGNvbmRpdGlvbiBjb2RlIHZhbHVlIHNob3VsZCBoYXZlIGEgbW9kZQp0aGF0IGlzIGluIGNsYXNzICdNT0RFX0NDJy4gIE5vcm1hbGx5LCBpdCB3aWxsIGJlICdDQ21vZGUnLiAgSWYKYWRkaXRpb25hbCBtb2RlcyBhcmUgcmVxdWlyZWQgKGFzIGZvciB0aGUgYWRkIGV4YW1wbGUgbWVudGlvbmVkIGFib3ZlIGluCnRoZSBTUEFSQyksIGRlZmluZSB0aGVtIGluICdNQUNISU5FLW1vZGVzLmRlZicgKCpub3RlIENvbmRpdGlvbiBDb2RlOjopLgpBbHNvIGRlZmluZSAnU0VMRUNUX0NDX01PREUnIHRvIGNob29zZSBhIG1vZGUgZ2l2ZW4gYW4gb3BlcmFuZCBvZiBhCmNvbXBhcmUuCgogSWYgaXQgaXMga25vd24gZHVyaW5nIFJUTCBnZW5lcmF0aW9uIHRoYXQgYSBkaWZmZXJlbnQgbW9kZSB3aWxsIGJlCnJlcXVpcmVkIChmb3IgZXhhbXBsZSwgaWYgdGhlIG1hY2hpbmUgaGFzIHNlcGFyYXRlIGNvbXBhcmUgaW5zdHJ1Y3Rpb25zCmZvciBzaWduZWQgYW5kIHVuc2lnbmVkIHF1YW50aXRpZXMsIGxpa2UgbW9zdCBJQk0gcHJvY2Vzc29ycyksIHRoZXkgY2FuCmJlIHNwZWNpZmllZCBhdCB0aGF0IHRpbWUuCgogSWYgdGhlIGNhc2VzIHRoYXQgcmVxdWlyZSBkaWZmZXJlbnQgbW9kZXMgd291bGQgYmUgbWFkZSBieSBpbnN0cnVjdGlvbgpjb21iaW5hdGlvbiwgdGhlIG1hY3JvICdTRUxFQ1RfQ0NfTU9ERScgZGV0ZXJtaW5lcyB3aGljaCBtYWNoaW5lIG1vZGUKc2hvdWxkIGJlIHVzZWQgZm9yIHRoZSBjb21wYXJpc29uIHJlc3VsdC4gIFRoZSBwYXR0ZXJucyBzaG91bGQgYmUKd3JpdHRlbiB1c2luZyB0aGF0IG1vZGUuICBUbyBzdXBwb3J0IHRoZSBjYXNlIG9mIHRoZSBhZGQgb24gdGhlIFNQQVJDCmRpc2N1c3NlZCBhYm92ZSwgd2UgaGF2ZSB0aGUgcGF0dGVybgoKICAgICAoZGVmaW5lX2luc24gIiIKICAgICAgIFsoc2V0IChyZWc6Q0NfTk9PViAwKQogICAgICAgICAgICAgKGNvbXBhcmU6Q0NfTk9PVgogICAgICAgICAgICAgICAocGx1czpTSSAobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiJXIiKQogICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpTSSAxICJhcml0aF9vcGVyYW5kIiAickkiKSkKICAgICAgICAgICAgICAgKGNvbnN0X2ludCAwKSkpXQogICAgICAgIiIKICAgICAgICIuLi4iKQoKIFRoZSAnU0VMRUNUX0NDX01PREUnIG1hY3JvIG9uIHRoZSBTUEFSQyByZXR1cm5zICdDQ19OT09WbW9kZScgZm9yCmNvbXBhcmlzb25zIHdob3NlIGFyZ3VtZW50IGlzIGEgJ3BsdXMnLgoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IExvb3BpbmcgUGF0dGVybnMsICBOZXh0OiBJbnNuIENhbm9uaWNhbGl6YXRpb25zLCAgUHJldjogSnVtcCBQYXR0ZXJucywgIFVwOiBNYWNoaW5lIERlc2MKCjE0LjEzIERlZmluaW5nIExvb3BpbmcgSW5zdHJ1Y3Rpb24gUGF0dGVybnMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKU29tZSBtYWNoaW5lcyBoYXZlIHNwZWNpYWwganVtcCBpbnN0cnVjdGlvbnMgdGhhdCBjYW4gYmUgdXRpbGl6ZWQgdG8KbWFrZSBsb29wcyBtb3JlIGVmZmljaWVudC4gIEEgY29tbW9uIGV4YW1wbGUgaXMgdGhlIDY4MDAwICdkYnJhJwppbnN0cnVjdGlvbiB3aGljaCBwZXJmb3JtcyBhIGRlY3JlbWVudCBvZiBhIHJlZ2lzdGVyIGFuZCBhIGJyYW5jaCBpZiB0aGUKcmVzdWx0IHdhcyBncmVhdGVyIHRoYW4gemVyby4gIE90aGVyIG1hY2hpbmVzLCBpbiBwYXJ0aWN1bGFyIGRpZ2l0YWwKc2lnbmFsIHByb2Nlc3NvcnMgKERTUHMpLCBoYXZlIHNwZWNpYWwgYmxvY2sgcmVwZWF0IGluc3RydWN0aW9ucyB0bwpwcm92aWRlIGxvdy1vdmVyaGVhZCBsb29wIHN1cHBvcnQuICBGb3IgZXhhbXBsZSwgdGhlIFRJIFRNUzMyMEMzeC9DNHgKRFNQcyBoYXZlIGEgYmxvY2sgcmVwZWF0IGluc3RydWN0aW9uIHRoYXQgbG9hZHMgc3BlY2lhbCByZWdpc3RlcnMgdG8KbWFyayB0aGUgdG9wIGFuZCBlbmQgb2YgYSBsb29wIGFuZCB0byBjb3VudCB0aGUgbnVtYmVyIG9mIGxvb3AKaXRlcmF0aW9ucy4gIFRoaXMgYXZvaWRzIHRoZSBuZWVkIGZvciBmZXRjaGluZyBhbmQgZXhlY3V0aW5nIGEKJ2RicmEnLWxpa2UgaW5zdHJ1Y3Rpb24gYW5kIGF2b2lkcyBwaXBlbGluZSBzdGFsbHMgYXNzb2NpYXRlZCB3aXRoIHRoZQpqdW1wLgoKIEdDQyBoYXMgdGhyZWUgc3BlY2lhbCBuYW1lZCBwYXR0ZXJucyB0byBzdXBwb3J0IGxvdyBvdmVyaGVhZCBsb29waW5nLgpUaGV5IGFyZSAnZGVjcmVtZW50X2FuZF9icmFuY2hfdW50aWxfemVybycsICdkb2xvb3BfYmVnaW4nLCBhbmQKJ2RvbG9vcF9lbmQnLiAgVGhlIGZpcnN0IHBhdHRlcm4sICdkZWNyZW1lbnRfYW5kX2JyYW5jaF91bnRpbF96ZXJvJywgaXMKbm90IGVtaXR0ZWQgZHVyaW5nIFJUTCBnZW5lcmF0aW9uIGJ1dCBtYXkgYmUgZW1pdHRlZCBkdXJpbmcgdGhlCmluc3RydWN0aW9uIGNvbWJpbmF0aW9uIHBoYXNlLiAgVGhpcyByZXF1aXJlcyB0aGUgYXNzaXN0YW5jZSBvZiB0aGUgbG9vcApvcHRpbWl6ZXIsIHVzaW5nIGluZm9ybWF0aW9uIGNvbGxlY3RlZCBkdXJpbmcgc3RyZW5ndGggcmVkdWN0aW9uLCB0bwpyZXZlcnNlIGEgbG9vcCB0byBjb3VudCBkb3duIHRvIHplcm8uICBTb21lIHRhcmdldHMgYWxzbyByZXF1aXJlIHRoZQpsb29wIG9wdGltaXplciB0byBhZGQgYSAnUkVHX05PTk5FRycgbm90ZSB0byBpbmRpY2F0ZSB0aGF0IHRoZSBpdGVyYXRpb24KY291bnQgaXMgYWx3YXlzIHBvc2l0aXZlLiAgVGhpcyBpcyBuZWVkZWQgaWYgdGhlIHRhcmdldCBwZXJmb3JtcyBhCnNpZ25lZCBsb29wIHRlcm1pbmF0aW9uIHRlc3QuICBGb3IgZXhhbXBsZSwgdGhlIDY4MDAwIHVzZXMgYSBwYXR0ZXJuCnNpbWlsYXIgdG8gdGhlIGZvbGxvd2luZyBmb3IgaXRzICdkYnJhJyBpbnN0cnVjdGlvbjoKCiAgICAgKGRlZmluZV9pbnNuICJkZWNyZW1lbnRfYW5kX2JyYW5jaF91bnRpbF96ZXJvIgogICAgICAgWyhzZXQgKHBjKQogICAgIAkoaWZfdGhlbl9lbHNlCiAgICAgCSAgKGdlIChwbHVzOlNJIChtYXRjaF9vcGVyYW5kOlNJIDAgImdlbmVyYWxfb3BlcmFuZCIgIitkKmFtIikKICAgICAJCSAgICAgICAoY29uc3RfaW50IC0xKSkKICAgICAJICAgICAgKGNvbnN0X2ludCAwKSkKICAgICAJICAobGFiZWxfcmVmIChtYXRjaF9vcGVyYW5kIDEgIiIgIiIpKQogICAgIAkgIChwYykpKQogICAgICAgIChzZXQgKG1hdGNoX2R1cCAwKQogICAgIAkocGx1czpTSSAobWF0Y2hfZHVwIDApCiAgICAgCQkgKGNvbnN0X2ludCAtMSkpKV0KICAgICAgICJmaW5kX3JlZ19ub3RlIChpbnNuLCBSRUdfTk9OTkVHLCAwKSIKICAgICAgICIuLi4iKQoKIE5vdGUgdGhhdCBzaW5jZSB0aGUgaW5zbiBpcyBib3RoIGEganVtcCBpbnNuIGFuZCBoYXMgYW4gb3V0cHV0LCBpdCBtdXN0CmRlYWwgd2l0aCBpdHMgb3duIHJlbG9hZHMsIGhlbmNlIHRoZSAnbScgY29uc3RyYWludHMuICBBbHNvIG5vdGUgdGhhdApzaW5jZSB0aGlzIGluc24gaXMgZ2VuZXJhdGVkIGJ5IHRoZSBpbnN0cnVjdGlvbiBjb21iaW5hdGlvbiBwaGFzZQpjb21iaW5pbmcgdHdvIHNlcXVlbnRpYWwgaW5zbnMgdG9nZXRoZXIgaW50byBhbiBpbXBsaWNpdCBwYXJhbGxlbCBpbnNuLAp0aGUgaXRlcmF0aW9uIGNvdW50ZXIgbmVlZHMgdG8gYmUgYmlhc2VkIGJ5IHRoZSBzYW1lIGFtb3VudCBhcyB0aGUKZGVjcmVtZW50IG9wZXJhdGlvbiwgaW4gdGhpcyBjYXNlIC0xLiAgTm90ZSB0aGF0IHRoZSBmb2xsb3dpbmcgc2ltaWxhcgpwYXR0ZXJuIHdpbGwgbm90IGJlIG1hdGNoZWQgYnkgdGhlIGNvbWJpbmVyLgoKICAgICAoZGVmaW5lX2luc24gImRlY3JlbWVudF9hbmRfYnJhbmNoX3VudGlsX3plcm8iCiAgICAgICBbKHNldCAocGMpCiAgICAgCShpZl90aGVuX2Vsc2UKICAgICAJICAoZ2UgKG1hdGNoX29wZXJhbmQ6U0kgMCAiZ2VuZXJhbF9vcGVyYW5kIiAiK2QqYW0iKQogICAgIAkgICAgICAoY29uc3RfaW50IDEpKQogICAgIAkgIChsYWJlbF9yZWYgKG1hdGNoX29wZXJhbmQgMSAiIiAiIikpCiAgICAgCSAgKHBjKSkpCiAgICAgICAgKHNldCAobWF0Y2hfZHVwIDApCiAgICAgCShwbHVzOlNJIChtYXRjaF9kdXAgMCkKICAgICAJCSAoY29uc3RfaW50IC0xKSkpXQogICAgICAgImZpbmRfcmVnX25vdGUgKGluc24sIFJFR19OT05ORUcsIDApIgogICAgICAgIi4uLiIpCgogVGhlIG90aGVyIHR3byBzcGVjaWFsIGxvb3BpbmcgcGF0dGVybnMsICdkb2xvb3BfYmVnaW4nIGFuZAonZG9sb29wX2VuZCcsIGFyZSBlbWl0dGVkIGJ5IHRoZSBsb29wIG9wdGltaXplciBmb3IgY2VydGFpbiB3ZWxsLWJlaGF2ZWQKbG9vcHMgd2l0aCBhIGZpbml0ZSBudW1iZXIgb2YgbG9vcCBpdGVyYXRpb25zIHVzaW5nIGluZm9ybWF0aW9uCmNvbGxlY3RlZCBkdXJpbmcgc3RyZW5ndGggcmVkdWN0aW9uLgoKIFRoZSAnZG9sb29wX2VuZCcgcGF0dGVybiBkZXNjcmliZXMgdGhlIGFjdHVhbCBsb29waW5nIGluc3RydWN0aW9uIChvcgp0aGUgaW1wbGljaXQgbG9vcGluZyBvcGVyYXRpb24pIGFuZCB0aGUgJ2RvbG9vcF9iZWdpbicgcGF0dGVybiBpcyBhbgpvcHRpb25hbCBjb21wYW5pb24gcGF0dGVybiB0aGF0IGNhbiBiZSB1c2VkIGZvciBpbml0aWFsaXphdGlvbiBuZWVkZWQKZm9yIHNvbWUgbG93LW92ZXJoZWFkIGxvb3BpbmcgaW5zdHJ1Y3Rpb25zLgoKIE5vdGUgdGhhdCBzb21lIG1hY2hpbmVzIHJlcXVpcmUgdGhlIGFjdHVhbCBsb29waW5nIGluc3RydWN0aW9uIHRvIGJlCmVtaXR0ZWQgYXQgdGhlIHRvcCBvZiB0aGUgbG9vcCAoZS5nLiwgdGhlIFRNUzMyMEMzeC9DNHggRFNQcykuICBFbWl0dGluZwp0aGUgdHJ1ZSBSVEwgZm9yIGEgbG9vcGluZyBpbnN0cnVjdGlvbiBhdCB0aGUgdG9wIG9mIHRoZSBsb29wIGNhbiBjYXVzZQpwcm9ibGVtcyB3aXRoIGZsb3cgYW5hbHlzaXMuICBTbyBpbnN0ZWFkLCBhIGR1bW15ICdkb2xvb3AnIGluc24gaXMKZW1pdHRlZCBhdCB0aGUgZW5kIG9mIHRoZSBsb29wLiAgVGhlIG1hY2hpbmUgZGVwZW5kZW50IHJlb3JnIHBhc3MgY2hlY2tzCmZvciB0aGUgcHJlc2VuY2Ugb2YgdGhpcyAnZG9sb29wJyBpbnNuIGFuZCB0aGVuIHNlYXJjaGVzIGJhY2sgdG8gdGhlIHRvcApvZiB0aGUgbG9vcCwgd2hlcmUgaXQgaW5zZXJ0cyB0aGUgdHJ1ZSBsb29waW5nIGluc24gKHByb3ZpZGVkIHRoZXJlIGFyZQpubyBpbnN0cnVjdGlvbnMgaW4gdGhlIGxvb3Agd2hpY2ggd291bGQgY2F1c2UgcHJvYmxlbXMpLiAgQW55IGFkZGl0aW9uYWwKbGFiZWxzIGNhbiBiZSBlbWl0dGVkIGF0IHRoaXMgcG9pbnQuICBJbiBhZGRpdGlvbiwgaWYgdGhlIGRlc2lyZWQKc3BlY2lhbCBpdGVyYXRpb24gY291bnRlciByZWdpc3RlciB3YXMgbm90IGFsbG9jYXRlZCwgdGhpcyBtYWNoaW5lCmRlcGVuZGVudCByZW9yZyBwYXNzIGNvdWxkIGVtaXQgYSB0cmFkaXRpb25hbCBjb21wYXJlIGFuZCBqdW1wCmluc3RydWN0aW9uIHBhaXIuCgogVGhlIGVzc2VudGlhbCBkaWZmZXJlbmNlIGJldHdlZW4gdGhlICdkZWNyZW1lbnRfYW5kX2JyYW5jaF91bnRpbF96ZXJvJwphbmQgdGhlICdkb2xvb3BfZW5kJyBwYXR0ZXJucyBpcyB0aGF0IHRoZSBsb29wIG9wdGltaXplciBhbGxvY2F0ZXMgYW4KYWRkaXRpb25hbCBwc2V1ZG8gcmVnaXN0ZXIgZm9yIHRoZSBsYXR0ZXIgYXMgYW4gaXRlcmF0aW9uIGNvdW50ZXIuICBUaGlzCnBzZXVkbyByZWdpc3RlciBjYW5ub3QgYmUgdXNlZCB3aXRoaW4gdGhlIGxvb3AgKGkuZS4sIGdlbmVyYWwgaW5kdWN0aW9uCnZhcmlhYmxlcyBjYW5ub3QgYmUgZGVyaXZlZCBmcm9tIGl0KSwgaG93ZXZlciwgaW4gbWFueSBjYXNlcyB0aGUgbG9vcAppbmR1Y3Rpb24gdmFyaWFibGUgbWF5IGJlY29tZSByZWR1bmRhbnQgYW5kIHJlbW92ZWQgYnkgdGhlIGZsb3cgcGFzcy4KCh8KRmlsZTogZ2NjaW50LmluZm8sICBOb2RlOiBJbnNuIENhbm9uaWNhbGl6YXRpb25zLCAgTmV4dDogRXhwYW5kZXIgRGVmaW5pdGlvbnMsICBQcmV2OiBMb29waW5nIFBhdHRlcm5zLCAgVXA6IE1hY2hpbmUgRGVzYwoKMTQuMTQgQ2Fub25pY2FsaXphdGlvbiBvZiBJbnN0cnVjdGlvbnMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KClRoZXJlIGFyZSBvZnRlbiBjYXNlcyB3aGVyZSBtdWx0aXBsZSBSVEwgZXhwcmVzc2lvbnMgY291bGQgcmVwcmVzZW50IGFuCm9wZXJhdGlvbiBwZXJmb3JtZWQgYnkgYSBzaW5nbGUgbWFjaGluZSBpbnN0cnVjdGlvbi4gIFRoaXMgc2l0dWF0aW9uIGlzCm1vc3QgY29tbW9ubHkgZW5jb3VudGVyZWQgd2l0aCBsb2dpY2FsLCBicmFuY2gsIGFuZCBtdWx0aXBseS1hY2N1bXVsYXRlCmluc3RydWN0aW9ucy4gIEluIHN1Y2ggY2FzZXMsIHRoZSBjb21waWxlciBhdHRlbXB0cyB0byBjb252ZXJ0IHRoZXNlCm11bHRpcGxlIFJUTCBleHByZXNzaW9ucyBpbnRvIGEgc2luZ2xlIGNhbm9uaWNhbCBmb3JtIHRvIHJlZHVjZSB0aGUKbnVtYmVyIG9mIGluc24gcGF0dGVybnMgcmVxdWlyZWQuCgogSW4gYWRkaXRpb24gdG8gYWxnZWJyYWljIHNpbXBsaWZpY2F0aW9ucywgZm9sbG93aW5nIGNhbm9uaWNhbGl6YXRpb25zCmFyZSBwZXJmb3JtZWQ6CgogICAqIEZvciBjb21tdXRhdGl2ZSBhbmQgY29tcGFyaXNvbiBvcGVyYXRvcnMsIGEgY29uc3RhbnQgaXMgYWx3YXlzIG1hZGUKICAgICB0aGUgc2Vjb25kIG9wZXJhbmQuICBJZiBhIG1hY2hpbmUgb25seSBzdXBwb3J0cyBhIGNvbnN0YW50IGFzIHRoZQogICAgIHNlY29uZCBvcGVyYW5kLCBvbmx5IHBhdHRlcm5zIHRoYXQgbWF0Y2ggYSBjb25zdGFudCBpbiB0aGUgc2Vjb25kCiAgICAgb3BlcmFuZCBuZWVkIGJlIHN1cHBsaWVkLgoKICAgKiBGb3IgYXNzb2NpYXRpdmUgb3BlcmF0b3JzLCBhIHNlcXVlbmNlIG9mIG9wZXJhdG9ycyB3aWxsIGFsd2F5cwogICAgIGNoYWluIHRvIHRoZSBsZWZ0OyBmb3IgaW5zdGFuY2UsIG9ubHkgdGhlIGxlZnQgb3BlcmFuZCBvZiBhbgogICAgIGludGVnZXIgJ3BsdXMnIGNhbiBpdHNlbGYgYmUgYSAncGx1cycuICAnYW5kJywgJ2lvcicsICd4b3InLAogICAgICdwbHVzJywgJ211bHQnLCAnc21pbicsICdzbWF4JywgJ3VtaW4nLCBhbmQgJ3VtYXgnIGFyZSBhc3NvY2lhdGl2ZQogICAgIHdoZW4gYXBwbGllZCB0byBpbnRlZ2VycywgYW5kIHNvbWV0aW1lcyB0byBmbG9hdGluZy1wb2ludC4KCiAgICogRm9yIHRoZXNlIG9wZXJhdG9ycywgaWYgb25seSBvbmUgb3BlcmFuZCBpcyBhICduZWcnLCAnbm90JywgJ211bHQnLAogICAgICdwbHVzJywgb3IgJ21pbnVzJyBleHByZXNzaW9uLCBpdCB3aWxsIGJlIHRoZSBmaXJzdCBvcGVyYW5kLgoKICAgKiBJbiBjb21iaW5hdGlvbnMgb2YgJ25lZycsICdtdWx0JywgJ3BsdXMnLCBhbmQgJ21pbnVzJywgdGhlICduZWcnCiAgICAgb3BlcmF0aW9ucyAoaWYgYW55KSB3aWxsIGJlIG1vdmVkIGluc2lkZSB0aGUgb3BlcmF0aW9ucyBhcyBmYXIgYXMKICAgICBwb3NzaWJsZS4gIEZvciBpbnN0YW5jZSwgJyhuZWcgKG11bHQgQSBCKSknIGlzIGNhbm9uaWNhbGl6ZWQgYXMKICAgICAnKG11bHQgKG5lZyBBKSBCKScsIGJ1dCAnKHBsdXMgKG11bHQgKG5lZyBBKSBCKSBDKScgaXMKICAgICBjYW5vbmljYWxpemVkIGFzICcobWludXMgQSAobXVsdCBCIEMpKScuCgogICAqIEZvciB0aGUgJ2NvbXBhcmUnIG9wZXJhdG9yLCBhIGNvbnN0YW50IGlzIGFsd2F5cyB0aGUgc2Vjb25kIG9wZXJhbmQKICAgICBvbiBtYWNoaW5lcyB3aGVyZSAnY2MwJyBpcyB1c2VkICgqbm90ZSBKdW1wIFBhdHRlcm5zOjopLiAgT24gb3RoZXIKICAgICBtYWNoaW5lcywgdGhlcmUgYXJlIHJhcmUgY2FzZXMgd2hlcmUgdGhlIGNvbXBpbGVyIG1pZ2h0IHdhbnQgdG8KICAgICBjb25zdHJ1Y3QgYSAnY29tcGFyZScgd2l0aCBhIGNvbnN0YW50IGFzIHRoZSBmaXJzdCBvcGVyYW5kLgogICAgIEhvd2V2ZXIsIHRoZXNlIGNhc2VzIGFyZSBub3QgY29tbW9uIGVub3VnaCBmb3IgaXQgdG8gYmUgd29ydGh3aGlsZQogICAgIHRvIHByb3ZpZGUgYSBwYXR0ZXJuIG1hdGNoaW5nIGEgY29uc3RhbnQgYXMgdGhlIGZpcnN0IG9wZXJhbmQKICAgICB1bmxlc3MgdGhlIG1hY2hpbmUgYWN0dWFsbHkgaGFzIHN1Y2ggYW4gaW5zdHJ1Y3Rpb24uCgogICAgIEFuIG9wZXJhbmQgb2YgJ25lZycsICdub3QnLCAnbXVsdCcsICdwbHVzJywgb3IgJ21pbnVzJyBpcyBtYWRlIHRoZQogICAgIGZpcnN0IG9wZXJhbmQgdW5kZXIgdGhlIHNhbWUgY29uZGl0aW9ucyBhcyBhYm92ZS4KCiAgICogJyhsdHUgKHBsdXMgQSBCKSBCKScgaXMgY29udmVydGVkIHRvICcobHR1IChwbHVzIEEgQikgQSknLgogICAgIExpa2V3aXNlIHdpdGggJ2dldScgaW5zdGVhZCBvZiAnbHR1Jy4KCiAgICogJyhtaW51cyBYIChjb25zdF9pbnQgTikpJyBpcyBjb252ZXJ0ZWQgdG8gJyhwbHVzIFggKGNvbnN0X2ludAogICAgIC1OKSknLgoKICAgKiBXaXRoaW4gYWRkcmVzcyBjb21wdXRhdGlvbnMgKGkuZS4sIGluc2lkZSAnbWVtJyksIGEgbGVmdCBzaGlmdCBpcwogICAgIGNvbnZlcnRlZCBpbnRvIHRoZSBhcHByb3ByaWF0ZSBtdWx0aXBsaWNhdGlvbiBieSBhIHBvd2VyIG9mIHR3by4KCiAgICogRGUgTW9yZ2FuJ3MgTGF3IGlzIHVzZWQgdG8gbW92ZSBiaXR3aXNlIG5lZ2F0aW9uIGluc2lkZSBhIGJpdHdpc2UKICAgICBsb2dpY2FsLWFuZCBvciBsb2dpY2FsLW9yIG9wZXJhdGlvbi4gIElmIHRoaXMgcmVzdWx0cyBpbiBvbmx5IG9uZQogICAgIG9wZXJhbmQgYmVpbmcgYSAnbm90JyBleHByZXNzaW9uLCBpdCB3aWxsIGJlIHRoZSBmaXJzdCBvbmUuCgogICAgIEEgbWFjaGluZSB0aGF0IGhhcyBhbiBpbnN0cnVjdGlvbiB0aGF0IHBlcmZvcm1zIGEgYml0d2lzZQogICAgIGxvZ2ljYWwtYW5kIG9mIG9uZSBvcGVyYW5kIHdpdGggdGhlIGJpdHdpc2UgbmVnYXRpb24gb2YgdGhlIG90aGVyCiAgICAgc2hvdWxkIHNwZWNpZnkgdGhlIHBhdHRlcm4gZm9yIHRoYXQgaW5zdHJ1Y3Rpb24gYXMKCiAgICAgICAgICAoZGVmaW5lX2luc24gIiIKICAgICAgICAgICAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6TSAwIC4uLikKICAgICAgICAgICAgICAgICAgKGFuZDpNIChub3Q6TSAobWF0Y2hfb3BlcmFuZDpNIDEgLi4uKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOk0gMiAuLi4pKSldCiAgICAgICAgICAgICIuLi4iCiAgICAgICAgICAgICIuLi4iKQoKICAgICBTaW1pbGFybHksIGEgcGF0dGVybiBmb3IgYSAiTkFORCIgaW5zdHJ1Y3Rpb24gc2hvdWxkIGJlIHdyaXR0ZW4KCiAgICAgICAgICAoZGVmaW5lX2luc24gIiIKICAgICAgICAgICAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6TSAwIC4uLikKICAgICAgICAgICAgICAgICAgKGlvcjpNIChub3Q6TSAobWF0Y2hfb3BlcmFuZDpNIDEgLi4uKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChub3Q6TSAobWF0Y2hfb3BlcmFuZDpNIDIgLi4uKSkpKV0KICAgICAgICAgICAgIi4uLiIKICAgICAgICAgICAgIi4uLiIpCgogICAgIEluIGJvdGggY2FzZXMsIGl0IGlzIG5vdCBuZWNlc3NhcnkgdG8gaW5jbHVkZSBwYXR0ZXJucyBmb3IgdGhlIG1hbnkKICAgICBsb2dpY2FsbHkgZXF1aXZhbGVudCBSVEwgZXhwcmVzc2lvbnMuCgogICAqIFRoZSBvbmx5IHBvc3NpYmxlIFJUTCBleHByZXNzaW9ucyBpbnZvbHZpbmcgYm90aCBiaXR3aXNlCiAgICAgZXhjbHVzaXZlLW9yIGFuZCBiaXR3aXNlIG5lZ2F0aW9uIGFyZSAnKHhvcjpNIFggWSknIGFuZCAnKG5vdDpNCiAgICAgKHhvcjpNIFggWSkpJy4KCiAgICogVGhlIHN1bSBvZiB0aHJlZSBpdGVtcywgb25lIG9mIHdoaWNoIGlzIGEgY29uc3RhbnQsIHdpbGwgb25seQogICAgIGFwcGVhciBpbiB0aGUgZm9ybQoKICAgICAgICAgIChwbHVzOk0gKHBsdXM6TSBYIFkpIENPTlNUQU5UKQoKICAgKiBPbiBtYWNoaW5lcyB0aGF0IGRvIG5vdCB1c2UgJ2NjMCcsICcoY29tcGFyZSBYIChjb25zdF9pbnQgMCkpJyB3aWxsCiAgICAgYmUgY29udmVydGVkIHRvIFguCgogICAqIEVxdWFsaXR5IGNvbXBhcmlzb25zIG9mIGEgZ3JvdXAgb2YgYml0cyAodXN1YWxseSBhIHNpbmdsZSBiaXQpIHdpdGgKICAgICB6ZXJvIHdpbGwgYmUgd3JpdHRlbiB1c2luZyAnemVyb19leHRyYWN0JyByYXRoZXIgdGhhbiB0aGUKICAgICBlcXVpdmFsZW50ICdhbmQnIG9yICdzaWduX2V4dHJhY3QnIG9wZXJhdGlvbnMuCgogRnVydGhlciBjYW5vbmljYWxpemF0aW9uIHJ1bGVzIGFyZSBkZWZpbmVkIGluIHRoZSBmdW5jdGlvbgonY29tbXV0YXRpdmVfb3BlcmFuZF9wcmVjZWRlbmNlJyBpbiAnZ2NjL3J0bGFuYWwuYycuCgofCkZpbGU6IGdjY2ludC5pbmZvLCAgTm9kZTogRXhwYW5kZXIgRGVmaW5pdGlvbnMsICBOZXh0OiBJbnNuIFNwbGl0dGluZywgIFByZXY6IEluc24gQ2Fub25pY2FsaXphdGlvbnMsICBVcDogTWFjaGluZSBEZXNjCgoxNC4xNSBEZWZpbmluZyBSVEwgU2VxdWVuY2VzIGZvciBDb2RlIEdlbmVyYXRpb24KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpPbiBzb21lIHRhcmdldCBtYWNoaW5lcywgc29tZSBzdGFuZGFyZCBwYXR0ZXJuIG5hbWVzIGZvciBSVEwgZ2VuZXJhdGlvbgpjYW5ub3QgYmUgaGFuZGxlZCB3aXRoIHNpbmdsZSBpbnNuLCBidXQgYSBzZXF1ZW5jZSBvZiBSVEwgaW5zbnMgY2FuCnJlcHJlc2VudCB0aGVtLiAgRm9yIHRoZXNlIHRhcmdldCBtYWNoaW5lcywgeW91IGNhbiB3cml0ZSBhCidkZWZpbmVfZXhwYW5kJyB0byBzcGVjaWZ5IGhvdyB0byBnZW5lcmF0ZSB0aGUgc2VxdWVuY2Ugb2YgUlRMLgoKIEEgJ2RlZmluZV9leHBhbmQnIGlzIGFuIFJUTCBleHByZXNzaW9uIHRoYXQgbG9va3MgYWxtb3N0IGxpa2UgYQonZGVmaW5lX2luc24nOyBidXQsIHVubGlrZSB0aGUgbGF0dGVyLCBhICdkZWZpbmVfZXhwYW5kJyBpcyB1c2VkIG9ubHkKZm9yIFJUTCBnZW5lcmF0aW9uIGFuZCBpdCBjYW4gcHJvZHVjZSBtb3JlIHRoYW4gb25lIFJUTCBpbnNuLgoKIEEgJ2RlZmluZV9leHBhbmQnIFJUWCBoYXMgZm91ciBvcGVyYW5kczoKCiAgICogVGhlIG5hbWUuICBFYWNoICdkZWZpbmVfZXhwYW5kJyBtdXN0IGhhdmUgYSBuYW1lLCBzaW5jZSB0aGUgb25seQogICAgIHVzZSBmb3IgaXQgaXMgdG8gcmVmZXIgdG8gaXQgYnkgbmFtZS4KCiAgICogVGhlIFJUTCB0ZW1wbGF0ZS4gIFRoaXMgaXMgYSB2ZWN0b3Igb2YgUlRMIGV4cHJlc3Npb25zIHJlcHJlc2VudGluZwogICAgIGEgc2VxdWVuY2Ugb2Ygc2VwYXJhdGUgaW5zdHJ1Y3Rpb25zLiAgVW5saWtlICdkZWZpbmVfaW5zbicsIHRoZXJlCiAgICAgaXMgbm8gaW1wbGljaXQgc3Vycm91bmRpbmcgJ1BBUkFMTEVMJy4KCiAgICogVGhlIGNvbmRpdGlvbiwgYSBzdHJpbmcgY29udGFpbmluZyBhIEMgZXhwcmVzc2lvbi4gIFRoaXMgZXhwcmVzc2lvbgogICAgIGlzIHVzZWQgdG8gZXhwcmVzcyBob3cgdGhlIGF2YWlsYWJpbGl0eSBvZiB0aGlzIHBhdHRlcm4gZGVwZW5kcyBvbgogICAgIHN1YmNsYXNzZXMgb2YgdGFyZ2V0IG1hY2hpbmUsIHNlbGVjdGVkIGJ5IGNvbW1hbmQtbGluZSBvcHRpb25zIHdoZW4KICAgICBHQ0MgaXMgcnVuLiAgVGhpcyBpcyBqdXN0IGxpa2UgdGhlIGNvbmRpdGlvbiBvZiBhICdkZWZpbmVfaW5zbicKICAgICB0aGF0IGhhcyBhIHN0YW5kYXJkIG5hbWUuICBUaGVyZWZvcmUsIHRoZSBjb25kaXRpb24gKGlmIHByZXNlbnQpCiAgICAgbWF5IG5vdCBkZXBlbmQgb24gdGhlIGRhdGEgaW4gdGhlIGluc24gYmVpbmcgbWF0Y2hlZCwgYnV0IG9ubHkgdGhlCiAgICAgdGFyZ2V0LW1hY2hpbmUtdHlwZSBmbGFncy4gIFRoZSBjb21waWxlciBuZWVkcyB0byB0ZXN0IHRoZXNlCiAgICAgY29uZGl0aW9ucyBkdXJpbmcgaW5pdGlhbGl6YXRpb24gaW4gb3JkZXIgdG8gbGVhcm4gZXhhY3RseSB3aGljaAogICAgIG5hbWVkIGluc3RydWN0aW9ucyBhcmUgYXZhaWxhYmxlIGluIGEgcGFydGljdWxhciBydW4uCgogICAqIFRoZSBwcmVwYXJhdGlvbiBzdGF0ZW1lbnRzLCBhIHN0cmluZyBjb250YWluaW5nIHplcm8gb3IgbW9yZSBDCiAgICAgc3RhdGVtZW50cyB3aGljaCBhcmUgdG8gYmUgZXhlY3V0ZWQgYmVmb3JlIFJUTCBjb2RlIGlzIGdlbmVyYXRlZAogICAgIGZyb20gdGhlIFJUTCB0ZW1wbGF0ZS4KCiAgICAgVXN1YWxseSB0aGVzZSBzdGF0ZW1lbnRzIHByZXBhcmUgdGVtcG9yYXJ5IHJlZ2lzdGVycyBmb3IgdXNlIGFzCiAgICAgaW50ZXJuYWwgb3BlcmFuZHMgaW4gdGhlIFJUTCB0ZW1wbGF0ZSwgYnV0IHRoZXkgY2FuIGFsc28gZ2VuZXJhdGUKICAgICBSVEwgaW5zbnMgZGlyZWN0bHkgYnkgY2FsbGluZyByb3V0aW5lcyBzdWNoIGFzICdlbWl0X2luc24nLCBldGMuCiAgICAgQW55IHN1Y2ggaW5zbnMgcHJlY2VkZSB0aGUgb25lcyB0aGF0IGNvbWUgZnJvbSB0aGUgUlRMIHRlbXBsYXRlLgoKIEV2ZXJ5IFJUTCBpbnNuIGVtaXR0ZWQgYnkgYSAnZGVmaW5lX2V4cGFuZCcgbXVzdCBtYXRjaCBzb21lCidkZWZpbmVfaW5zbicgaW4gdGhlIG1hY2hpbmUgZGVzY3JpcHRpb24uICBPdGhlcndpc2UsIHRoZSBjb21waWxlciB3aWxsCmNyYXNoIHdoZW4gdHJ5aW5nIHRvIGdlbmVyYXRlIGNvZGUgZm9yIHRoZSBpbnNuIG9yIHRyeWluZyB0byBvcHRpbWl6ZQppdC4KCiBUaGUgUlRMIHRlbXBsYXRlLCBpbiBhZGRpdGlvbiB0byBjb250cm9sbGluZyBnZW5lcmF0aW9uIG9mIFJUTCBpbnNucywKYWxzbyBkZXNjcmliZXMgdGhlIG9wZXJhbmRzIHRoYXQgbmVlZCB0byBiZSBzcGVjaWZpZWQgd2hlbiB0aGlzIHBhdHRlcm4KaXMgdXNlZC4gIEluIHBhcnRpY3VsYXIsIGl0IGdpdmVzIGEgcHJlZGljYXRlIGZvciBlYWNoIG9wZXJhbmQuCgogQSB0cnVlIG9wZXJhbmQsIHdoaWNoIG5lZWRzIHRvIGJlIHNwZWNpZmllZCBpbiBvcmRlciB0byBnZW5lcmF0ZSBSVEwKZnJvbSB0aGUgcGF0dGVybiwgc2hvdWxkIGJlIGRlc2NyaWJlZCB3aXRoIGEgJ21hdGNoX29wZXJhbmQnIGluIGl0cwpmaXJzdCBvY2N1cnJlbmNlIGluIHRoZSBSVEwgdGVtcGxhdGUuICBUaGlzIGVudGVycyBpbmZvcm1hdGlvbiBvbiB0aGUKb3BlcmFuZCdzIHByZWRpY2F0ZSBpbnRvIHRoZSB0YWJsZXMgdGhhdCByZWNvcmQgc3VjaCB0aGluZ3MuICBHQ0MgdXNlcwp0aGUgaW5mb3JtYXRpb24gdG8gcHJlbG9hZCB0aGUgb3BlcmFuZCBpbnRvIGEgcmVnaXN0ZXIgaWYgdGhhdCBpcwpyZXF1aXJlZCBmb3IgdmFsaWQgUlRMIGNvZGUuICBJZiB0aGUgb3BlcmFuZCBpcyByZWZlcnJlZCB0byBtb3JlIHRoYW4Kb25jZSwgc3Vic2VxdWVudCByZWZlcmVuY2VzIHNob3VsZCB1c2UgJ21hdGNoX2R1cCcuCgogVGhlIFJUTCB0ZW1wbGF0ZSBtYXkgYWxzbyByZWZlciB0byBpbnRlcm5hbCAib3BlcmFuZHMiIHdoaWNoIGFyZQp0ZW1wb3JhcnkgcmVnaXN0ZXJzIG9yIGxhYmVscyB1c2VkIG9ubHkgd2l0aGluIHRoZSBzZXF1ZW5jZSBtYWRlIGJ5IHRoZQonZGVmaW5lX2V4cGFuZCcuICBJbnRlcm5hbCBvcGVyYW5kcyBhcmUgc3Vic3RpdHV0ZWQgaW50byB0aGUgUlRMCnRlbXBsYXRlIHdpdGggJ21hdGNoX2R1cCcsIG5ldmVyIHdpdGggJ21hdGNoX29wZXJhbmQnLiAgVGhlIHZhbHVlcyBvZgp0aGUgaW50ZXJuYWwgb3BlcmFuZHMgYXJlIG5vdCBwYXNzZWQgaW4gYXMgYXJndW1lbnRzIGJ5IHRoZSBjb21waWxlcgp3aGVuIGl0IHJlcXVlc3RzIHVzZSBvZiB0aGlzIHBhdHRlcm4uICBJbnN0ZWFkLCB0aGV5IGFyZSBjb21wdXRlZCB3aXRoaW4KdGhlIHBhdHRlcm4sIGluIHRoZSBwcmVwYXJhdGlvbiBzdGF0ZW1lbnRzLiAgVGhlc2Ugc3RhdGVtZW50cyBjb21wdXRlCnRoZSB2YWx1ZXMgYW5kIHN0b3JlIHRoZW0gaW50byB0aGUgYXBwcm9wcmlhdGUgZWxlbWVudHMgb2YgJ29wZXJhbmRzJyBzbwp0aGF0ICdtYXRjaF9kdXAnIGNhbiBmaW5kIHRoZW0uCgogVGhlcmUgYXJlIHR3byBzcGVjaWFsIG1hY3JvcyBkZWZpbmVkIGZvciB1c2UgaW4gdGhlIHByZXBhcmF0aW9uCnN0YXRlbWVudHM6ICdET05FJyBhbmQgJ0ZBSUwnLiAgVXNlIHRoZW0gd2l0aCBhIGZvbGxvd2luZyBzZW1pY29sb24sIGFzCmEgc3RhdGVtZW50LgoKJ0RPTkUnCiAgICAgVXNlIHRoZSAnRE9ORScgbWFjcm8gdG8gZW5kIFJUTCBnZW5lcmF0aW9uIGZvciB0aGUgcGF0dGVybi4gIFRoZQogICAgIG9ubHkgUlRMIGluc25zIHJlc3VsdGluZyBmcm9tIHRoZSBwYXR0ZXJuIG9uIHRoaXMgb2NjYXNpb24gd2lsbCBiZQogICAgIHRob3NlIGFscmVhZHkgZW1pdHRlZCBieSBleHBsaWNpdCBjYWxscyB0byAnZW1pdF9pbnNuJyB3aXRoaW4gdGhlCiAgICAgcHJlcGFyYXRpb24gc3RhdGVtZW50czsgdGhlIFJUTCB0ZW1wbGF0ZSB3aWxsIG5vdCBiZSBnZW5lcmF0ZWQuCgonRkFJTCcKICAgICBNYWtlIHRoZSBwYXR0ZXJuIGZhaWwgb24gdGhpcyBvY2Nhc2lvbi4gIFdoZW4gYSBwYXR0ZXJuIGZhaWxzLCBpdAogICAgIG1lYW5zIHRoYXQgdGhlIHBhdHRlcm4gd2FzIG5vdCB0cnVseSBhdmFpbGFibGUuICBUaGUgY2FsbGluZwogICAgIHJvdXRpbmVzIGluIHRoZSBjb21waWxlciB3aWxsIHRyeSBvdGhlciBzdHJhdGVnaWVzIGZvciBjb2RlCiAgICAgZ2VuZXJhdGlvbiB1c2luZyBvdGhlciBwYXR0ZXJucy4KCiAgICAgRmFpbHVyZSBpcyBjdXJyZW50bHkgc3VwcG9ydGVkIG9ubHkgZm9yIGJpbmFyeSAoYWRkaXRpb24sCiAgICAgbXVsdGlwbGljYXRpb24sIHNoaWZ0aW5nLCBldGMuKSAgYW5kIGJpdC1maWVsZCAoJ2V4dHYnLCAnZXh0enYnLAogICAgIGFuZCAnaW5zdicpIG9wZXJhdGlvbnMuCgogSWYgdGhlIHByZXBhcmF0aW9uIGZhbGxzIHRocm91Z2ggKGludm9rZXMgbmVpdGhlciAnRE9ORScgbm9yICdGQUlMJyksCnRoZW4gdGhlICdkZWZpbmVfZXhwYW5kJyBhY3RzIGxpa2UgYSAnZGVmaW5lX2luc24nIGluIHRoYXQgdGhlIFJUTAp0ZW1wbGF0ZSBpcyB1c2VkIHRvIGdlbmVyYXRlIHRoZSBpbnNuLgoKIFRoZSBSVEwgdGVtcGxhdGUgaXMgbm90IHVzZWQgZm9yIG1hdGNoaW5nLCBvbmx5IGZvciBnZW5lcmF0aW5nIHRoZQppbml0aWFsIGluc24gbGlzdC4gIElmIHRoZSBwcmVwYXJhdGlvbiBzdGF0ZW1lbnQgYWx3YXlzIGludm9rZXMgJ0RPTkUnCm9yICdGQUlMJywgdGhlIFJUTCB0ZW1wbGF0ZSBtYXkgYmUgcmVkdWNlZCB0byBhIHNpbXBsZSBsaXN0IG9mIG9wZXJhbmRzLApzdWNoIGFzIHRoaXMgZXhhbXBsZToKCiAgICAgKGRlZmluZV9leHBhbmQgImFkZHNpMyIKICAgICAgIFsobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiIikKICAgICAgICAobWF0Y2hfb3BlcmFuZDpTSSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiIikKICAgICAgICAobWF0Y2hfb3BlcmFuZDpTSSAyICJyZWdpc3Rlcl9vcGVyYW5kIiAiIildCiAgICAgICAiIgogICAgICAgIgogICAgIHsKICAgICAgIGhhbmRsZV9hZGQgKG9wZXJhbmRzWzBdLCBvcGVyYW5kc1sxXSwgb3BlcmFuZHNbMl0pOwogICAgICAgRE9ORTsKICAgICB9IikKCiBIZXJlIGlzIGFuIGV4YW1wbGUsIHRoZSBkZWZpbml0aW9uIG9mIGxlZnQtc2hpZnQgZm9yIHRoZSBTUFVSIGNoaXA6CgogICAgIChkZWZpbmVfZXhwYW5kICJhc2hsc2kzIgogICAgICAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIiIpCiAgICAgICAgICAgICAoYXNoaWZ0OlNJCiAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOlNJIDEgInJlZ2lzdGVyX29wZXJhbmQiICIiKQogICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpTSSAyICJub25tZW1vcnlfb3BlcmFuZCIgIiIpKSldCiAgICAgICAiIgogICAgICAgIgoKICAgICB7CiAgICAgICBpZiAoR0VUX0NPREUgKG9wZXJhbmRzWzJdKSAhPSBDT05TVF9JTlQKICAgICAgICAgICB8fCAodW5zaWduZWQpIElOVFZBTCAob3BlcmFuZHNbMl0pID4gMykKICAgICAgICAgRkFJTDsKICAgICB9IikKClRoaXMgZXhhbXBsZSB1c2VzICdkZWZpbmVfZXhwYW5kJyBzbyB0aGF0IGl0IGNhbiBnZW5lcmF0ZSBhbiBSVEwgaW5zbgpmb3Igc2hpZnRpbmcgd2hlbiB0aGUgc2hpZnQtY291bnQgaXMgaW4gdGhlIHN1cHBvcnRlZCByYW5nZSBvZiAwIHRvIDMKYnV0IGZhaWwgaW4gb3RoZXIgY2FzZXMgd2hlcmUgbWFjaGluZSBpbnNucyBhcmVuJ3QgYXZhaWxhYmxlLiAgV2hlbiBpdApmYWlscywgdGhlIGNvbXBpbGVyIHRyaWVzIGFub3RoZXIgc3RyYXRlZ3kgdXNpbmcgZGlmZmVyZW50IHBhdHRlcm5zCihzdWNoIGFzLCBhIGxpYnJhcnkgY2FsbCkuCgogSWYgdGhlIGNvbXBpbGVyIHdlcmUgYWJsZSB0byBoYW5kbGUgbm9udHJpdmlhbCBjb25kaXRpb24tc3RyaW5ncyBpbgpwYXR0ZXJucyB3aXRoIG5hbWVzLCB0aGVuIGl0IHdvdWxkIGJlIHBvc3NpYmxlIHRvIHVzZSBhICdkZWZpbmVfaW5zbicgaW4KdGhhdCBjYXNlLiAgSGVyZSBpcyBhbm90aGVyIGNhc2UgKHplcm8tZXh0ZW5zaW9uIG9uIHRoZSA2ODAwMCkgd2hpY2gKbWFrZXMgbW9yZSB1c2Ugb2YgdGhlIHBvd2VyIG9mICdkZWZpbmVfZXhwYW5kJzoKCiAgICAgKGRlZmluZV9leHBhbmQgInplcm9fZXh0ZW5kaGlzaTIiCiAgICAgICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJnZW5lcmFsX29wZXJhbmQiICIiKQogICAgICAgICAgICAgKGNvbnN0X2ludCAwKSkKICAgICAgICAoc2V0IChzdHJpY3RfbG93X3BhcnQKICAgICAgICAgICAgICAgKHN1YnJlZzpISQogICAgICAgICAgICAgICAgIChtYXRjaF9kdXAgMCkKICAgICAgICAgICAgICAgICAwKSkKICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOkhJIDEgImdlbmVyYWxfb3BlcmFuZCIgIiIpKV0KICAgICAgICIiCiAgICAgICAib3BlcmFuZHNbMV0gPSBtYWtlX3NhZmVfZnJvbSAob3BlcmFuZHNbMV0sIG9wZXJhbmRzWzBdKTsiKQoKSGVyZSB0d28gUlRMIGluc25zIGFyZSBnZW5lcmF0ZWQsIG9uZSB0byBjbGVhciB0aGUgZW50aXJlIG91dHB1dCBvcGVyYW5kCmFuZCB0aGUgb3RoZXIgdG8gY29weSB0aGUgaW5wdXQgb3BlcmFuZCBpbnRvIGl0cyBsb3cgaGFsZi4gIFRoaXMKc2VxdWVuY2UgaXMgaW5jb3JyZWN0IGlmIHRoZSBpbnB1dCBvcGVyYW5kIHJlZmVycyB0byBbdGhlIG9sZCB2YWx1ZSBvZl0KdGhlIG91dHB1dCBvcGVyYW5kLCBzbyB0aGUgcHJlcGFyYXRpb24gc3RhdGVtZW50IG1ha2VzIHN1cmUgdGhpcyBpc24ndApzby4gIFRoZSBmdW5jdGlvbiAnbWFrZV9zYWZlX2Zyb20nIGNvcGllcyB0aGUgJ29wZXJhbmRzWzFdJyBpbnRvIGEKdGVtcG9yYXJ5IHJlZ2lzdGVyIGlmIGl0IHJlZmVycyB0byAnb3BlcmFuZHNbMF0nLiAgSXQgZG9lcyB0aGlzIGJ5CmVtaXR0aW5nIGFub3RoZXIgUlRMIGluc24uCgogRmluYWxseSwgYSB0aGlyZCBleGFtcGxlIHNob3dzIHRoZSB1c2Ugb2YgYW4gaW50ZXJuYWwgb3BlcmFuZC4KWmVyby1leHRlbnNpb24gb24gdGhlIFNQVVIgY2hpcCBpcyBkb25lIGJ5ICdhbmQnLWluZyB0aGUgcmVzdWx0IGFnYWluc3QKYSBoYWxmd29yZCBtYXNrLiAgQnV0IHRoaXMgbWFzayBjYW5ub3QgYmUgcmVwcmVzZW50ZWQgYnkgYSAnY29uc3RfaW50JwpiZWNhdXNlIHRoZSBjb25zdGFudCB2YWx1ZSBpcyB0b28gbGFyZ2UgdG8gYmUgbGVnaXRpbWF0ZSBvbiB0aGlzCm1hY2hpbmUuICBTbyBpdCBtdXN0IGJlIGNvcGllZCBpbnRvIGEgcmVnaXN0ZXIgd2l0aCAnZm9yY2VfcmVnJyBhbmQgdGhlbgp0aGUgcmVnaXN0ZXIgdXNlZCBpbiB0aGUgJ2FuZCcuCgogICAgIChkZWZpbmVfZXhwYW5kICJ6ZXJvX2V4dGVuZGhpc2kyIgogICAgICAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIiIpCiAgICAgICAgICAgICAoYW5kOlNJIChzdWJyZWc6U0kKICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpISSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiIikKICAgICAgICAgICAgICAgICAgICAgICAwKQogICAgICAgICAgICAgICAgICAgICAobWF0Y2hfZHVwIDIpKSldCiAgICAgICAiIgogICAgICAgIm9wZXJhbmRzWzJdCiAgICAgICAgICA9IGZvcmNlX3JlZyAoU0ltb2RlLCBHRU5fSU5UICg2NTUzNSkpOyAiKQoKIF9Ob3RlOl8gSWYgdGhlICdkZWZpbmVfZXhwYW5kJyBpcyB1c2VkIHRvIHNlcnZlIGEgc3RhbmRhcmQgYmluYXJ5IG9yCnVuYXJ5IGFyaXRobWV0aWMgb3BlcmF0aW9uIG9yIGEgYml0LWZpZWxkIG9wZXJhdGlvbiwgdGhlbiB0aGUgbGFzdCBpbnNuCml0IGdlbmVyYXRlcyBtdXN0IG5vdCBiZSBhICdjb2RlX2xhYmVsJywgJ2JhcnJpZXInIG9yICdub3RlJy4gIEl0IG11c3QKYmUgYW4gJ2luc24nLCAnanVtcF9pbnNuJyBvciAnY2FsbF9pbnNuJy4gIElmIHlvdSBkb24ndCBuZWVkIGEgcmVhbCBpbnNuCmF0IHRoZSBlbmQsIGVtaXQgYW4gaW5zbiB0byBjb3B5IHRoZSByZXN1bHQgb2YgdGhlIG9wZXJhdGlvbiBpbnRvCml0c2VsZi4gIFN1Y2ggYW4gaW5zbiB3aWxsIGdlbmVyYXRlIG5vIGNvZGUsIGJ1dCBpdCBjYW4gYXZvaWQgcHJvYmxlbXMKaW4gdGhlIGNvbXBpbGVyLgoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IEluc24gU3BsaXR0aW5nLCAgTmV4dDogSW5jbHVkaW5nIFBhdHRlcm5zLCAgUHJldjogRXhwYW5kZXIgRGVmaW5pdGlvbnMsICBVcDogTWFjaGluZSBEZXNjCgoxNC4xNiBEZWZpbmluZyBIb3cgdG8gU3BsaXQgSW5zdHJ1Y3Rpb25zCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KClRoZXJlIGFyZSB0d28gY2FzZXMgd2hlcmUgeW91IHNob3VsZCBzcGVjaWZ5IGhvdyB0byBzcGxpdCBhIHBhdHRlcm4gaW50bwptdWx0aXBsZSBpbnNucy4gIE9uIG1hY2hpbmVzIHRoYXQgaGF2ZSBpbnN0cnVjdGlvbnMgcmVxdWlyaW5nIGRlbGF5CnNsb3RzICgqbm90ZSBEZWxheSBTbG90czo6KSBvciB0aGF0IGhhdmUgaW5zdHJ1Y3Rpb25zIHdob3NlIG91dHB1dCBpcwpub3QgYXZhaWxhYmxlIGZvciBtdWx0aXBsZSBjeWNsZXMgKCpub3RlIFByb2Nlc3NvciBwaXBlbGluZQpkZXNjcmlwdGlvbjo6KSwgdGhlIGNvbXBpbGVyIHBoYXNlcyB0aGF0IG9wdGltaXplIHRoZXNlIGNhc2VzIG5lZWQgdG8gYmUKYWJsZSB0byBtb3ZlIGluc25zIGludG8gb25lLWluc3RydWN0aW9uIGRlbGF5IHNsb3RzLiAgSG93ZXZlciwgc29tZQppbnNucyBtYXkgZ2VuZXJhdGUgbW9yZSB0aGFuIG9uZSBtYWNoaW5lIGluc3RydWN0aW9uLiAgVGhlc2UgaW5zbnMKY2Fubm90IGJlIHBsYWNlZCBpbnRvIGEgZGVsYXkgc2xvdC4KCiBPZnRlbiB5b3UgY2FuIHJld3JpdGUgdGhlIHNpbmdsZSBpbnNuIGFzIGEgbGlzdCBvZiBpbmRpdmlkdWFsIGluc25zLAplYWNoIGNvcnJlc3BvbmRpbmcgdG8gb25lIG1hY2hpbmUgaW5zdHJ1Y3Rpb24uICBUaGUgZGlzYWR2YW50YWdlIG9mCmRvaW5nIHNvIGlzIHRoYXQgaXQgd2lsbCBjYXVzZSB0aGUgY29tcGlsYXRpb24gdG8gYmUgc2xvd2VyIGFuZCByZXF1aXJlCm1vcmUgc3BhY2UuICBJZiB0aGUgcmVzdWx0aW5nIGluc25zIGFyZSB0b28gY29tcGxleCwgaXQgbWF5IGFsc28Kc3VwcHJlc3Mgc29tZSBvcHRpbWl6YXRpb25zLiAgVGhlIGNvbXBpbGVyIHNwbGl0cyB0aGUgaW5zbiBpZiB0aGVyZSBpcyBhCnJlYXNvbiB0byBiZWxpZXZlIHRoYXQgaXQgbWlnaHQgaW1wcm92ZSBpbnN0cnVjdGlvbiBvciBkZWxheSBzbG90CnNjaGVkdWxpbmcuCgogVGhlIGluc24gY29tYmluZXIgcGhhc2UgYWxzbyBzcGxpdHMgcHV0YXRpdmUgaW5zbnMuICBJZiB0aHJlZSBpbnNucyBhcmUKbWVyZ2VkIGludG8gb25lIGluc24gd2l0aCBhIGNvbXBsZXggZXhwcmVzc2lvbiB0aGF0IGNhbm5vdCBiZSBtYXRjaGVkIGJ5CnNvbWUgJ2RlZmluZV9pbnNuJyBwYXR0ZXJuLCB0aGUgY29tYmluZXIgcGhhc2UgYXR0ZW1wdHMgdG8gc3BsaXQgdGhlCmNvbXBsZXggcGF0dGVybiBpbnRvIHR3byBpbnNucyB0aGF0IGFyZSByZWNvZ25pemVkLiAgVXN1YWxseSBpdCBjYW4KYnJlYWsgdGhlIGNvbXBsZXggcGF0dGVybiBpbnRvIHR3byBwYXR0ZXJucyBieSBzcGxpdHRpbmcgb3V0IHNvbWUKc3ViZXhwcmVzc2lvbi4gIEhvd2V2ZXIsIGluIHNvbWUgb3RoZXIgY2FzZXMsIHN1Y2ggYXMgcGVyZm9ybWluZyBhbgphZGRpdGlvbiBvZiBhIGxhcmdlIGNvbnN0YW50IGluIHR3byBpbnNucyBvbiBhIFJJU0MgbWFjaGluZSwgdGhlIHdheSB0bwpzcGxpdCB0aGUgYWRkaXRpb24gaW50byB0d28gaW5zbnMgaXMgbWFjaGluZS1kZXBlbmRlbnQuCgogVGhlICdkZWZpbmVfc3BsaXQnIGRlZmluaXRpb24gdGVsbHMgdGhlIGNvbXBpbGVyIGhvdyB0byBzcGxpdCBhIGNvbXBsZXgKaW5zbiBpbnRvIHNldmVyYWwgc2ltcGxlciBpbnNucy4gIEl0IGxvb2tzIGxpa2UgdGhpczoKCiAgICAgKGRlZmluZV9zcGxpdAogICAgICAgW0lOU04tUEFUVEVSTl0KICAgICAgICJDT05ESVRJT04iCiAgICAgICBbTkVXLUlOU04tUEFUVEVSTi0xCiAgICAgICAgTkVXLUlOU04tUEFUVEVSTi0yCiAgICAgICAgLi4uXQogICAgICAgIlBSRVBBUkFUSU9OLVNUQVRFTUVOVFMiKQoKIElOU04tUEFUVEVSTiBpcyBhIHBhdHRlcm4gdGhhdCBuZWVkcyB0byBiZSBzcGxpdCBhbmQgQ09ORElUSU9OIGlzIHRoZQpmaW5hbCBjb25kaXRpb24gdG8gYmUgdGVzdGVkLCBhcyBpbiBhICdkZWZpbmVfaW5zbicuICBXaGVuIGFuIGluc24KbWF0Y2hpbmcgSU5TTi1QQVRURVJOIGFuZCBzYXRpc2Z5aW5nIENPTkRJVElPTiBpcyBmb3VuZCwgaXQgaXMgcmVwbGFjZWQKaW4gdGhlIGluc24gbGlzdCB3aXRoIHRoZSBpbnNucyBnaXZlbiBieSBORVctSU5TTi1QQVRURVJOLTEsCk5FVy1JTlNOLVBBVFRFUk4tMiwgZXRjLgoKIFRoZSBQUkVQQVJBVElPTi1TVEFURU1FTlRTIGFyZSBzaW1pbGFyIHRvIHRob3NlIHN0YXRlbWVudHMgdGhhdCBhcmUKc3BlY2lmaWVkIGZvciAnZGVmaW5lX2V4cGFuZCcgKCpub3RlIEV4cGFuZGVyIERlZmluaXRpb25zOjopIGFuZCBhcmUKZXhlY3V0ZWQgYmVmb3JlIHRoZSBuZXcgUlRMIGlzIGdlbmVyYXRlZCB0byBwcmVwYXJlIGZvciB0aGUgZ2VuZXJhdGVkCmNvZGUgb3IgZW1pdCBzb21lIGluc25zIHdob3NlIHBhdHRlcm4gaXMgbm90IGZpeGVkLiAgVW5saWtlIHRob3NlIGluCidkZWZpbmVfZXhwYW5kJywgaG93ZXZlciwgdGhlc2Ugc3RhdGVtZW50cyBtdXN0IG5vdCBnZW5lcmF0ZSBhbnkgbmV3CnBzZXVkby1yZWdpc3RlcnMuICBPbmNlIHJlbG9hZCBoYXMgY29tcGxldGVkLCB0aGV5IGFsc28gbXVzdCBub3QKYWxsb2NhdGUgYW55IHNwYWNlIGluIHRoZSBzdGFjayBmcmFtZS4KCiBQYXR0ZXJucyBhcmUgbWF0Y2hlZCBhZ2FpbnN0IElOU04tUEFUVEVSTiBpbiB0d28gZGlmZmVyZW50CmNpcmN1bXN0YW5jZXMuICBJZiBhbiBpbnNuIG5lZWRzIHRvIGJlIHNwbGl0IGZvciBkZWxheSBzbG90IHNjaGVkdWxpbmcKb3IgaW5zbiBzY2hlZHVsaW5nLCB0aGUgaW5zbiBpcyBhbHJlYWR5IGtub3duIHRvIGJlIHZhbGlkLCB3aGljaCBtZWFucwp0aGF0IGl0IG11c3QgaGF2ZSBiZWVuIG1hdGNoZWQgYnkgc29tZSAnZGVmaW5lX2luc24nIGFuZCwgaWYKJ3JlbG9hZF9jb21wbGV0ZWQnIGlzIG5vbnplcm8sIGlzIGtub3duIHRvIHNhdGlzZnkgdGhlIGNvbnN0cmFpbnRzIG9mCnRoYXQgJ2RlZmluZV9pbnNuJy4gIEluIHRoYXQgY2FzZSwgdGhlIG5ldyBpbnNuIHBhdHRlcm5zIG11c3QgYWxzbyBiZQppbnNucyB0aGF0IGFyZSBtYXRjaGVkIGJ5IHNvbWUgJ2RlZmluZV9pbnNuJyBhbmQsIGlmICdyZWxvYWRfY29tcGxldGVkJwppcyBub256ZXJvLCBtdXN0IGFsc28gc2F0aXNmeSB0aGUgY29uc3RyYWludHMgb2YgdGhvc2UgZGVmaW5pdGlvbnMuCgogQXMgYW4gZXhhbXBsZSBvZiB0aGlzIHVzYWdlIG9mICdkZWZpbmVfc3BsaXQnLCBjb25zaWRlciB0aGUgZm9sbG93aW5nCmV4YW1wbGUgZnJvbSAnYTI5ay5tZCcsIHdoaWNoIHNwbGl0cyBhICdzaWduX2V4dGVuZCcgZnJvbSAnSEltb2RlJyB0bwonU0ltb2RlJyBpbnRvIGEgcGFpciBvZiBzaGlmdCBpbnNuczoKCiAgICAgKGRlZmluZV9zcGxpdAogICAgICAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAiZ2VuX3JlZ19vcGVyYW5kIiAiIikKICAgICAgICAgICAgIChzaWduX2V4dGVuZDpTSSAobWF0Y2hfb3BlcmFuZDpISSAxICJnZW5fcmVnX29wZXJhbmQiICIiKSkpXQogICAgICAgIiIKICAgICAgIFsoc2V0IChtYXRjaF9kdXAgMCkKICAgICAgICAgICAgIChhc2hpZnQ6U0kgKG1hdGNoX2R1cCAxKQogICAgICAgICAgICAgICAgICAgICAgICAoY29uc3RfaW50IDE2KSkpCiAgICAgICAgKHNldCAobWF0Y2hfZHVwIDApCiAgICAgICAgICAgICAoYXNoaWZ0cnQ6U0kgKG1hdGNoX2R1cCAwKQogICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdF9pbnQgMTYpKSldCiAgICAgICAiCiAgICAgeyBvcGVyYW5kc1sxXSA9IGdlbl9sb3dwYXJ0IChTSW1vZGUsIG9wZXJhbmRzWzFdKTsgfSIpCgogV2hlbiB0aGUgY29tYmluZXIgcGhhc2UgdHJpZXMgdG8gc3BsaXQgYW4gaW5zbiBwYXR0ZXJuLCBpdCBpcyBhbHdheXMKdGhlIGNhc2UgdGhhdCB0aGUgcGF0dGVybiBpcyBfbm90XyBtYXRjaGVkIGJ5IGFueSAnZGVmaW5lX2luc24nLiAgVGhlCmNvbWJpbmVyIHBhc3MgZmlyc3QgdHJpZXMgdG8gc3BsaXQgYSBzaW5nbGUgJ3NldCcgZXhwcmVzc2lvbiBhbmQgdGhlbgp0aGUgc2FtZSAnc2V0JyBleHByZXNzaW9uIGluc2lkZSBhICdwYXJhbGxlbCcsIGJ1dCBmb2xsb3dlZCBieSBhCidjbG9iYmVyJyBvZiBhIHBzZXVkby1yZWcgdG8gdXNlIGFzIGEgc2NyYXRjaCByZWdpc3Rlci4gIEluIHRoZXNlIGNhc2VzLAp0aGUgY29tYmluZXIgZXhwZWN0cyBleGFjdGx5IHR3byBuZXcgaW5zbiBwYXR0ZXJucyB0byBiZSBnZW5lcmF0ZWQuICBJdAp3aWxsIHZlcmlmeSB0aGF0IHRoZXNlIHBhdHRlcm5zIG1hdGNoIHNvbWUgJ2RlZmluZV9pbnNuJyBkZWZpbml0aW9ucywgc28KeW91IG5lZWQgbm90IGRvIHRoaXMgdGVzdCBpbiB0aGUgJ2RlZmluZV9zcGxpdCcgKG9mIGNvdXJzZSwgdGhlcmUgaXMgbm8KcG9pbnQgaW4gd3JpdGluZyBhICdkZWZpbmVfc3BsaXQnIHRoYXQgd2lsbCBuZXZlciBwcm9kdWNlIGluc25zIHRoYXQKbWF0Y2gpLgoKIEhlcmUgaXMgYW4gZXhhbXBsZSBvZiB0aGlzIHVzZSBvZiAnZGVmaW5lX3NwbGl0JywgdGFrZW4gZnJvbQoncnM2MDAwLm1kJzoKCiAgICAgKGRlZmluZV9zcGxpdAogICAgICAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAiZ2VuX3JlZ19vcGVyYW5kIiAiIikKICAgICAgICAgICAgIChwbHVzOlNJIChtYXRjaF9vcGVyYW5kOlNJIDEgImdlbl9yZWdfb3BlcmFuZCIgIiIpCiAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpTSSAyICJub25fYWRkX2NpbnRfb3BlcmFuZCIgIiIpKSldCiAgICAgICAiIgogICAgICAgWyhzZXQgKG1hdGNoX2R1cCAwKSAocGx1czpTSSAobWF0Y2hfZHVwIDEpIChtYXRjaF9kdXAgMykpKQogICAgICAgIChzZXQgKG1hdGNoX2R1cCAwKSAocGx1czpTSSAobWF0Y2hfZHVwIDApIChtYXRjaF9kdXAgNCkpKV0KICAgICAiCiAgICAgewogICAgICAgaW50IGxvdyA9IElOVFZBTCAob3BlcmFuZHNbMl0pICYgMHhmZmZmOwogICAgICAgaW50IGhpZ2ggPSAodW5zaWduZWQpIElOVFZBTCAob3BlcmFuZHNbMl0pID4+IDE2OwoKICAgICAgIGlmIChsb3cgJiAweDgwMDApCiAgICAgICAgIGhpZ2grKywgbG93IHw9IDB4ZmZmZjAwMDA7CgogICAgICAgb3BlcmFuZHNbM10gPSBHRU5fSU5UIChoaWdoIDw8IDE2KTsKICAgICAgIG9wZXJhbmRzWzRdID0gR0VOX0lOVCAobG93KTsKICAgICB9IikKCiBIZXJlIHRoZSBwcmVkaWNhdGUgJ25vbl9hZGRfY2ludF9vcGVyYW5kJyBtYXRjaGVzIGFueSAnY29uc3RfaW50JyB0aGF0CmlzIF9ub3RfIGEgdmFsaWQgb3BlcmFuZCBvZiBhIHNpbmdsZSBhZGQgaW5zbi4gIFRoZSBhZGQgd2l0aCB0aGUgc21hbGxlcgpkaXNwbGFjZW1lbnQgaXMgd3JpdHRlbiBzbyB0aGF0IGl0IGNhbiBiZSBzdWJzdGl0dXRlZCBpbnRvIHRoZSBhZGRyZXNzCm9mIGEgc3Vic2VxdWVudCBvcGVyYXRpb24uCgogQW4gZXhhbXBsZSB0aGF0IHVzZXMgYSBzY3JhdGNoIHJlZ2lzdGVyLCBmcm9tIHRoZSBzYW1lIGZpbGUsIGdlbmVyYXRlcwphbiBlcXVhbGl0eSBjb21wYXJpc29uIG9mIGEgcmVnaXN0ZXIgYW5kIGEgbGFyZ2UgY29uc3RhbnQ6CgogICAgIChkZWZpbmVfc3BsaXQKICAgICAgIFsoc2V0IChtYXRjaF9vcGVyYW5kOkNDIDAgImNjX3JlZ19vcGVyYW5kIiAiIikKICAgICAgICAgICAgIChjb21wYXJlOkNDIChtYXRjaF9vcGVyYW5kOlNJIDEgImdlbl9yZWdfb3BlcmFuZCIgIiIpCiAgICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpTSSAyICJub25fc2hvcnRfY2ludF9vcGVyYW5kIiAiIikpKQogICAgICAgIChjbG9iYmVyIChtYXRjaF9vcGVyYW5kOlNJIDMgImdlbl9yZWdfb3BlcmFuZCIgIiIpKV0KICAgICAgICJmaW5kX3NpbmdsZV91c2UgKG9wZXJhbmRzWzBdLCBpbnNuLCAwKQogICAgICAgICYmIChHRVRfQ09ERSAoKmZpbmRfc2luZ2xlX3VzZSAob3BlcmFuZHNbMF0sIGluc24sIDApKSA9PSBFUQogICAgICAgICAgICB8fCBHRVRfQ09ERSAoKmZpbmRfc2luZ2xlX3VzZSAob3BlcmFuZHNbMF0sIGluc24sIDApKSA9PSBORSkiCiAgICAgICBbKHNldCAobWF0Y2hfZHVwIDMpICh4b3I6U0kgKG1hdGNoX2R1cCAxKSAobWF0Y2hfZHVwIDQpKSkKICAgICAgICAoc2V0IChtYXRjaF9kdXAgMCkgKGNvbXBhcmU6Q0MgKG1hdGNoX2R1cCAzKSAobWF0Y2hfZHVwIDUpKSldCiAgICAgICAiCiAgICAgewogICAgICAgLyogR2V0IHRoZSBjb25zdGFudCB3ZSBhcmUgY29tcGFyaW5nIGFnYWluc3QsIEMsIGFuZCBzZWUgd2hhdCBpdAogICAgICAgICAgbG9va3MgbGlrZSBzaWduLWV4dGVuZGVkIHRvIDE2IGJpdHMuICBUaGVuIHNlZSB3aGF0IGNvbnN0YW50CiAgICAgICAgICBjb3VsZCBiZSBYT1InZWQgd2l0aCBDIHRvIGdldCB0aGUgc2lnbi1leHRlbmRlZCB2YWx1ZS4gICovCgogICAgICAgaW50IGMgPSBJTlRWQUwgKG9wZXJhbmRzWzJdKTsKICAgICAgIGludCBzZXh0YyA9IChjIDw8IDE2KSA+PiAxNjsKICAgICAgIGludCB4b3J2ID0gYyBeIHNleHRjOwoKICAgICAgIG9wZXJhbmRzWzRdID0gR0VOX0lOVCAoeG9ydik7CiAgICAgICBvcGVyYW5kc1s1XSA9IEdFTl9JTlQgKHNleHRjKTsKICAgICB9IikKCiBUbyBhdm9pZCBjb25mdXNpb24sIGRvbid0IHdyaXRlIGEgc2luZ2xlICdkZWZpbmVfc3BsaXQnIHRoYXQgYWNjZXB0cwpzb21lIGluc25zIHRoYXQgbWF0Y2ggc29tZSAnZGVmaW5lX2luc24nIGFzIHdlbGwgYXMgc29tZSBpbnNucyB0aGF0CmRvbid0LiAgSW5zdGVhZCwgd3JpdGUgdHdvIHNlcGFyYXRlICdkZWZpbmVfc3BsaXQnIGRlZmluaXRpb25zLCBvbmUgZm9yCnRoZSBpbnNucyB0aGF0IGFyZSB2YWxpZCBhbmQgb25lIGZvciB0aGUgaW5zbnMgdGhhdCBhcmUgbm90IHZhbGlkLgoKIFRoZSBzcGxpdHRlciBpcyBhbGxvd2VkIHRvIHNwbGl0IGp1bXAgaW5zdHJ1Y3Rpb25zIGludG8gc2VxdWVuY2Ugb2YKanVtcHMgb3IgY3JlYXRlIG5ldyBqdW1wcyBpbiB3aGlsZSBzcGxpdHRpbmcgbm9uLWp1bXAgaW5zdHJ1Y3Rpb25zLiAgQXMKdGhlIGNlbnRyYWwgZmxvd2dyYXBoIGFuZCBicmFuY2ggcHJlZGljdGlvbiBpbmZvcm1hdGlvbiBuZWVkcyB0byBiZQp1cGRhdGVkLCBzZXZlcmFsIHJlc3RyaWN0aW9uIGFwcGx5LgoKIFNwbGl0dGluZyBvZiBqdW1wIGluc3RydWN0aW9uIGludG8gc2VxdWVuY2UgdGhhdCBvdmVyIGJ5IGFub3RoZXIganVtcAppbnN0cnVjdGlvbiBpcyBhbHdheXMgdmFsaWQsIGFzIGNvbXBpbGVyIGV4cGVjdCBpZGVudGljYWwgYmVoYXZpb3Igb2YKbmV3IGp1bXAuICBXaGVuIG5ldyBzZXF1ZW5jZSBjb250YWlucyBtdWx0aXBsZSBqdW1wIGluc3RydWN0aW9ucyBvciBuZXcKbGFiZWxzLCBtb3JlIGFzc2lzdGFuY2UgaXMgbmVlZGVkLiAgU3BsaXR0ZXIgaXMgcmVxdWlyZWQgdG8gY3JlYXRlIG9ubHkKdW5jb25kaXRpb25hbCBqdW1wcywgb3Igc2ltcGxlIGNvbmRpdGlvbmFsIGp1bXAgaW5zdHJ1Y3Rpb25zLgpBZGRpdGlvbmFsbHkgaXQgbXVzdCBhdHRhY2ggYSAnUkVHX0JSX1BST0InIG5vdGUgdG8gZWFjaCBjb25kaXRpb25hbApqdW1wLiAgQSBnbG9iYWwgdmFyaWFibGUgJ3NwbGl0X2JyYW5jaF9wcm9iYWJpbGl0eScgaG9sZHMgdGhlCnByb2JhYmlsaXR5IG9mIHRoZSBvcmlnaW5hbCBicmFuY2ggaW4gY2FzZSBpdCB3YXMgYW4gc2ltcGxlIGNvbmRpdGlvbmFsCmp1bXAsIC0xIG90aGVyd2lzZS4gIFRvIHNpbXBsaWZ5IHJlY29tcHV0aW5nIG9mIGVkZ2UgZnJlcXVlbmNpZXMsIHRoZQpuZXcgc2VxdWVuY2UgaXMgcmVxdWlyZWQgdG8gaGF2ZSBvbmx5IGZvcndhcmQganVtcHMgdG8gdGhlIG5ld2x5IGNyZWF0ZWQKbGFiZWxzLgoKIEZvciB0aGUgY29tbW9uIGNhc2Ugd2hlcmUgdGhlIHBhdHRlcm4gb2YgYSBkZWZpbmVfc3BsaXQgZXhhY3RseSBtYXRjaGVzCnRoZSBwYXR0ZXJuIG9mIGEgZGVmaW5lX2luc24sIHVzZSAnZGVmaW5lX2luc25fYW5kX3NwbGl0Jy4gIEl0IGxvb2tzCmxpa2UgdGhpczoKCiAgICAgKGRlZmluZV9pbnNuX2FuZF9zcGxpdAogICAgICAgW0lOU04tUEFUVEVSTl0KICAgICAgICJDT05ESVRJT04iCiAgICAgICAiT1VUUFVULVRFTVBMQVRFIgogICAgICAgIlNQTElULUNPTkRJVElPTiIKICAgICAgIFtORVctSU5TTi1QQVRURVJOLTEKICAgICAgICBORVctSU5TTi1QQVRURVJOLTIKICAgICAgICAuLi5dCiAgICAgICAiUFJFUEFSQVRJT04tU1RBVEVNRU5UUyIKICAgICAgIFtJTlNOLUFUVFJJQlVURVNdKQoKCiBJTlNOLVBBVFRFUk4sIENPTkRJVElPTiwgT1VUUFVULVRFTVBMQVRFLCBhbmQgSU5TTi1BVFRSSUJVVEVTIGFyZSB1c2VkCmFzIGluICdkZWZpbmVfaW5zbicuICBUaGUgTkVXLUlOU04tUEFUVEVSTiB2ZWN0b3IgYW5kIHRoZQpQUkVQQVJBVElPTi1TVEFURU1FTlRTIGFyZSB1c2VkIGFzIGluIGEgJ2RlZmluZV9zcGxpdCcuICBUaGUKU1BMSVQtQ09ORElUSU9OIGlzIGFsc28gdXNlZCBhcyBpbiAnZGVmaW5lX3NwbGl0Jywgd2l0aCB0aGUgYWRkaXRpb25hbApiZWhhdmlvciB0aGF0IGlmIHRoZSBjb25kaXRpb24gc3RhcnRzIHdpdGggJyYmJywgdGhlIGNvbmRpdGlvbiB1c2VkIGZvcgp0aGUgc3BsaXQgd2lsbCBiZSB0aGUgY29uc3RydWN0ZWQgYXMgYSBsb2dpY2FsICJhbmQiIG9mIHRoZSBzcGxpdApjb25kaXRpb24gd2l0aCB0aGUgaW5zbiBjb25kaXRpb24uICBGb3IgZXhhbXBsZSwgZnJvbSBpMzg2Lm1kOgoKICAgICAoZGVmaW5lX2luc25fYW5kX3NwbGl0ICJ6ZXJvX2V4dGVuZGhpc2kyX2FuZCIKICAgICAgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9ciIpCiAgICAgICAgICAoemVyb19leHRlbmQ6U0kgKG1hdGNoX29wZXJhbmQ6SEkgMSAicmVnaXN0ZXJfb3BlcmFuZCIgIjAiKSkpCiAgICAgICAgKGNsb2JiZXIgKHJlZzpDQyAxNykpXQogICAgICAgIlRBUkdFVF9aRVJPX0VYVEVORF9XSVRIX0FORCAmJiAhb3B0aW1pemVfc2l6ZSIKICAgICAgICIjIgogICAgICAgIiYmIHJlbG9hZF9jb21wbGV0ZWQiCiAgICAgICBbKHBhcmFsbGVsIFsoc2V0IChtYXRjaF9kdXAgMCkKICAgICAgICAgICAgICAgICAgICAgICAgKGFuZDpTSSAobWF0Y2hfZHVwIDApIChjb25zdF9pbnQgNjU1MzUpKSkKICAgICAJICAgICAgKGNsb2JiZXIgKHJlZzpDQyAxNykpXSldCiAgICAgICAiIgogICAgICAgWyhzZXRfYXR0ciAidHlwZSIgImFsdTEiKV0pCgoKIEluIHRoaXMgY2FzZSwgdGhlIGFjdHVhbCBzcGxpdCBjb25kaXRpb24gd2lsbCBiZQonVEFSR0VUX1pFUk9fRVhURU5EX1dJVEhfQU5EICYmICFvcHRpbWl6ZV9zaXplICYmIHJlbG9hZF9jb21wbGV0ZWQnLgoKIFRoZSAnZGVmaW5lX2luc25fYW5kX3NwbGl0JyBjb25zdHJ1Y3Rpb24gcHJvdmlkZXMgZXhhY3RseSB0aGUgc2FtZQpmdW5jdGlvbmFsaXR5IGFzIHR3byBzZXBhcmF0ZSAnZGVmaW5lX2luc24nIGFuZCAnZGVmaW5lX3NwbGl0JyBwYXR0ZXJucy4KSXQgZXhpc3RzIGZvciBjb21wYWN0bmVzcywgYW5kIGFzIGEgbWFpbnRlbmFuY2UgdG9vbCB0byBwcmV2ZW50IGhhdmluZwp0byBlbnN1cmUgdGhlIHR3byBwYXR0ZXJucycgdGVtcGxhdGVzIG1hdGNoLgoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IEluY2x1ZGluZyBQYXR0ZXJucywgIE5leHQ6IFBlZXBob2xlIERlZmluaXRpb25zLCAgUHJldjogSW5zbiBTcGxpdHRpbmcsICBVcDogTWFjaGluZSBEZXNjCgoxNC4xNyBJbmNsdWRpbmcgUGF0dGVybnMgaW4gTWFjaGluZSBEZXNjcmlwdGlvbnMuCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KClRoZSAnaW5jbHVkZScgcGF0dGVybiB0ZWxscyB0aGUgY29tcGlsZXIgdG9vbHMgd2hlcmUgdG8gbG9vayBmb3IKcGF0dGVybnMgdGhhdCBhcmUgaW4gZmlsZXMgb3RoZXIgdGhhbiBpbiB0aGUgZmlsZSAnLm1kJy4gIFRoaXMgaXMgdXNlZApvbmx5IGF0IGJ1aWxkIHRpbWUgYW5kIHRoZXJlIGlzIG5vIHByZXByb2Nlc3NpbmcgYWxsb3dlZC4KCiBJdCBsb29rcyBsaWtlOgoKCiAgICAgKGluY2x1ZGUKICAgICAgIFBBVEhOQU1FKQoKIEZvciBleGFtcGxlOgoKCiAgICAgKGluY2x1ZGUgImZpbGVzdHVmZiIpCgoKIFdoZXJlIFBBVEhOQU1FIGlzIGEgc3RyaW5nIHRoYXQgc3BlY2lmaWVzIHRoZSBsb2NhdGlvbiBvZiB0aGUgZmlsZSwKc3BlY2lmaWVzIHRoZSBpbmNsdWRlIGZpbGUgdG8gYmUgaW4gJ2djYy9jb25maWcvdGFyZ2V0L2ZpbGVzdHVmZicuICBUaGUKZGlyZWN0b3J5ICdnY2MvY29uZmlnL3RhcmdldCcgaXMgcmVnYXJkZWQgYXMgdGhlIGRlZmF1bHQgZGlyZWN0b3J5LgoKIE1hY2hpbmUgZGVzY3JpcHRpb25zIG1heSBiZSBzcGxpdCB1cCBpbnRvIHNtYWxsZXIgbW9yZSBtYW5hZ2VhYmxlCnN1YnNlY3Rpb25zIGFuZCBwbGFjZWQgaW50byBzdWJkaXJlY3Rvcmllcy4KCiBCeSBzcGVjaWZ5aW5nOgoKCiAgICAgKGluY2x1ZGUgIkJPR1VTL2ZpbGVzdHVmZiIpCgoKIHRoZSBpbmNsdWRlIGZpbGUgaXMgc3BlY2lmaWVkIHRvIGJlIGluCidnY2MvY29uZmlnL1RBUkdFVC9CT0dVUy9maWxlc3R1ZmYnLgoKIFNwZWNpZnlpbmcgYW4gYWJzb2x1dGUgcGF0aCBmb3IgdGhlIGluY2x1ZGUgZmlsZSBzdWNoIGFzOwoKICAgICAoaW5jbHVkZSAiL3UyL0JPR1VTL2ZpbGVzdHVmZiIpCgogaXMgcGVybWl0dGVkIGJ1dCBpcyBub3QgZW5jb3VyYWdlZC4KCjE0LjE3LjEgUlRMIEdlbmVyYXRpb24gVG9vbCBPcHRpb25zIGZvciBEaXJlY3RvcnkgU2VhcmNoCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpUaGUgJy1JRElSJyBvcHRpb24gc3BlY2lmaWVzIGRpcmVjdG9yaWVzIHRvIHNlYXJjaCBmb3IgbWFjaGluZQpkZXNjcmlwdGlvbnMuICBGb3IgZXhhbXBsZToKCgogICAgIGdlbnJlY29nIC1JL3AxL2FiYy9wcm9jMSAtSS9wMi9hYmNkL3BybzIgdGFyZ2V0Lm1kCgoKIEFkZCB0aGUgZGlyZWN0b3J5IERJUiB0byB0aGUgaGVhZCBvZiB0aGUgbGlzdCBvZiBkaXJlY3RvcmllcyB0byBiZQpzZWFyY2hlZCBmb3IgaGVhZGVyIGZpbGVzLiAgVGhpcyBjYW4gYmUgdXNlZCB0byBvdmVycmlkZSBhIHN5c3RlbQptYWNoaW5lIGRlZmluaXRpb24gZmlsZSwgc3Vic3RpdHV0aW5nIHlvdXIgb3duIHZlcnNpb24sIHNpbmNlIHRoZXNlCmRpcmVjdG9yaWVzIGFyZSBzZWFyY2hlZCBiZWZvcmUgdGhlIGRlZmF1bHQgbWFjaGluZSBkZXNjcmlwdGlvbiBmaWxlCmRpcmVjdG9yaWVzLiAgSWYgeW91IHVzZSBtb3JlIHRoYW4gb25lICctSScgb3B0aW9uLCB0aGUgZGlyZWN0b3JpZXMgYXJlCnNjYW5uZWQgaW4gbGVmdC10by1yaWdodCBvcmRlcjsgdGhlIHN0YW5kYXJkIGRlZmF1bHQgZGlyZWN0b3J5IGNvbWUKYWZ0ZXIuCgofCkZpbGU6IGdjY2ludC5pbmZvLCAgTm9kZTogUGVlcGhvbGUgRGVmaW5pdGlvbnMsICBOZXh0OiBJbnNuIEF0dHJpYnV0ZXMsICBQcmV2OiBJbmNsdWRpbmcgUGF0dGVybnMsICBVcDogTWFjaGluZSBEZXNjCgoxNC4xOCBNYWNoaW5lLVNwZWNpZmljIFBlZXBob2xlIE9wdGltaXplcnMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpJbiBhZGRpdGlvbiB0byBpbnN0cnVjdGlvbiBwYXR0ZXJucyB0aGUgJ21kJyBmaWxlIG1heSBjb250YWluCmRlZmluaXRpb25zIG9mIG1hY2hpbmUtc3BlY2lmaWMgcGVlcGhvbGUgb3B0aW1pemF0aW9ucy4KCiBUaGUgY29tYmluZXIgZG9lcyBub3Qgbm90aWNlIGNlcnRhaW4gcGVlcGhvbGUgb3B0aW1pemF0aW9ucyB3aGVuIHRoZQpkYXRhIGZsb3cgaW4gdGhlIHByb2dyYW0gZG9lcyBub3Qgc3VnZ2VzdCB0aGF0IGl0IHNob3VsZCB0cnkgdGhlbS4gIEZvcgpleGFtcGxlLCBzb21ldGltZXMgdHdvIGNvbnNlY3V0aXZlIGluc25zIHJlbGF0ZWQgaW4gcHVycG9zZSBjYW4gYmUKY29tYmluZWQgZXZlbiB0aG91Z2ggdGhlIHNlY29uZCBvbmUgZG9lcyBub3QgYXBwZWFyIHRvIHVzZSBhIHJlZ2lzdGVyCmNvbXB1dGVkIGluIHRoZSBmaXJzdCBvbmUuICBBIG1hY2hpbmUtc3BlY2lmaWMgcGVlcGhvbGUgb3B0aW1pemVyIGNhbgpkZXRlY3Qgc3VjaCBvcHBvcnR1bml0aWVzLgoKIFRoZXJlIGFyZSB0d28gZm9ybXMgb2YgcGVlcGhvbGUgZGVmaW5pdGlvbnMgdGhhdCBtYXkgYmUgdXNlZC4gIFRoZQpvcmlnaW5hbCAnZGVmaW5lX3BlZXBob2xlJyBpcyBydW4gYXQgYXNzZW1ibHkgb3V0cHV0IHRpbWUgdG8gbWF0Y2ggaW5zbnMKYW5kIHN1YnN0aXR1dGUgYXNzZW1ibHkgdGV4dC4gIFVzZSBvZiAnZGVmaW5lX3BlZXBob2xlJyBpcyBkZXByZWNhdGVkLgoKIEEgbmV3ZXIgJ2RlZmluZV9wZWVwaG9sZTInIG1hdGNoZXMgaW5zbnMgYW5kIHN1YnN0aXR1dGVzIG5ldyBpbnNucy4KVGhlICdwZWVwaG9sZTInIHBhc3MgaXMgcnVuIGFmdGVyIHJlZ2lzdGVyIGFsbG9jYXRpb24gYnV0IGJlZm9yZQpzY2hlZHVsaW5nLCB3aGljaCBtYXkgcmVzdWx0IGluIG11Y2ggYmV0dGVyIGNvZGUgZm9yIHRhcmdldHMgdGhhdCBkbwpzY2hlZHVsaW5nLgoKKiBNZW51OgoKKiBkZWZpbmVfcGVlcGhvbGU6OiAgICAgUlRMIHRvIFRleHQgUGVlcGhvbGUgT3B0aW1pemVycwoqIGRlZmluZV9wZWVwaG9sZTI6OiAgICBSVEwgdG8gUlRMIFBlZXBob2xlIE9wdGltaXplcnMKCh8KRmlsZTogZ2NjaW50LmluZm8sICBOb2RlOiBkZWZpbmVfcGVlcGhvbGUsICBOZXh0OiBkZWZpbmVfcGVlcGhvbGUyLCAgVXA6IFBlZXBob2xlIERlZmluaXRpb25zCgoxNC4xOC4xIFJUTCB0byBUZXh0IFBlZXBob2xlIE9wdGltaXplcnMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpBIGRlZmluaXRpb24gbG9va3MgbGlrZSB0aGlzOgoKICAgICAoZGVmaW5lX3BlZXBob2xlCiAgICAgICBbSU5TTi1QQVRURVJOLTEKICAgICAgICBJTlNOLVBBVFRFUk4tMgogICAgICAgIC4uLl0KICAgICAgICJDT05ESVRJT04iCiAgICAgICAiVEVNUExBVEUiCiAgICAgICAiT1BUSU9OQUwtSU5TTi1BVFRSSUJVVEVTIikKClRoZSBsYXN0IHN0cmluZyBvcGVyYW5kIG1heSBiZSBvbWl0dGVkIGlmIHlvdSBhcmUgbm90IHVzaW5nIGFueQptYWNoaW5lLXNwZWNpZmljIGluZm9ybWF0aW9uIGluIHRoaXMgbWFjaGluZSBkZXNjcmlwdGlvbi4gIElmIHByZXNlbnQsCml0IG11c3Qgb2JleSB0aGUgc2FtZSBydWxlcyBhcyBpbiBhICdkZWZpbmVfaW5zbicuCgogSW4gdGhpcyBza2VsZXRvbiwgSU5TTi1QQVRURVJOLTEgYW5kIHNvIG9uIGFyZSBwYXR0ZXJucyB0byBtYXRjaApjb25zZWN1dGl2ZSBpbnNucy4gIFRoZSBvcHRpbWl6YXRpb24gYXBwbGllcyB0byBhIHNlcXVlbmNlIG9mIGluc25zIHdoZW4KSU5TTi1QQVRURVJOLTEgbWF0Y2hlcyB0aGUgZmlyc3Qgb25lLCBJTlNOLVBBVFRFUk4tMiBtYXRjaGVzIHRoZSBuZXh0LAphbmQgc28gb24uCgogRWFjaCBvZiB0aGUgaW5zbnMgbWF0Y2hlZCBieSBhIHBlZXBob2xlIG11c3QgYWxzbyBtYXRjaCBhCidkZWZpbmVfaW5zbicuICBQZWVwaG9sZXMgYXJlIGNoZWNrZWQgb25seSBhdCB0aGUgbGFzdCBzdGFnZSBqdXN0IGJlZm9yZQpjb2RlIGdlbmVyYXRpb24sIGFuZCBvbmx5IG9wdGlvbmFsbHkuICBUaGVyZWZvcmUsIGFueSBpbnNuIHdoaWNoIHdvdWxkCm1hdGNoIGEgcGVlcGhvbGUgYnV0IG5vICdkZWZpbmVfaW5zbicgd2lsbCBjYXVzZSBhIGNyYXNoIGluIGNvZGUKZ2VuZXJhdGlvbiBpbiBhbiB1bm9wdGltaXplZCBjb21waWxhdGlvbiwgb3IgYXQgdmFyaW91cyBvcHRpbWl6YXRpb24Kc3RhZ2VzLgoKIFRoZSBvcGVyYW5kcyBvZiB0aGUgaW5zbnMgYXJlIG1hdGNoZWQgd2l0aCAnbWF0Y2hfb3BlcmFuZHMnLAonbWF0Y2hfb3BlcmF0b3InLCBhbmQgJ21hdGNoX2R1cCcsIGFzIHVzdWFsLiAgV2hhdCBpcyBub3QgdXN1YWwgaXMgdGhhdAp0aGUgb3BlcmFuZCBudW1iZXJzIGFwcGx5IHRvIGFsbCB0aGUgaW5zbiBwYXR0ZXJucyBpbiB0aGUgZGVmaW5pdGlvbi4KU28sIHlvdSBjYW4gY2hlY2sgZm9yIGlkZW50aWNhbCBvcGVyYW5kcyBpbiB0d28gaW5zbnMgYnkgdXNpbmcKJ21hdGNoX29wZXJhbmQnIGluIG9uZSBpbnNuIGFuZCAnbWF0Y2hfZHVwJyBpbiB0aGUgb3RoZXIuCgogVGhlIG9wZXJhbmQgY29uc3RyYWludHMgdXNlZCBpbiAnbWF0Y2hfb3BlcmFuZCcgcGF0dGVybnMgZG8gbm90IGhhdmUKYW55IGRpcmVjdCBlZmZlY3Qgb24gdGhlIGFwcGxpY2FiaWxpdHkgb2YgdGhlIHBlZXBob2xlLCBidXQgdGhleSB3aWxsIGJlCnZhbGlkYXRlZCBhZnRlcndhcmQsIHNvIG1ha2Ugc3VyZSB5b3VyIGNvbnN0cmFpbnRzIGFyZSBnZW5lcmFsIGVub3VnaCB0bwphcHBseSB3aGVuZXZlciB0aGUgcGVlcGhvbGUgbWF0Y2hlcy4gIElmIHRoZSBwZWVwaG9sZSBtYXRjaGVzIGJ1dCB0aGUKY29uc3RyYWludHMgYXJlIG5vdCBzYXRpc2ZpZWQsIHRoZSBjb21waWxlciB3aWxsIGNyYXNoLgoKIEl0IGlzIHNhZmUgdG8gb21pdCBjb25zdHJhaW50cyBpbiBhbGwgdGhlIG9wZXJhbmRzIG9mIHRoZSBwZWVwaG9sZTsgb3IKeW91IGNhbiB3cml0ZSBjb25zdHJhaW50cyB3aGljaCBzZXJ2ZSBhcyBhIGRvdWJsZS1jaGVjayBvbiB0aGUgY3JpdGVyaWEKcHJldmlvdXNseSB0ZXN0ZWQuCgogT25jZSBhIHNlcXVlbmNlIG9mIGluc25zIG1hdGNoZXMgdGhlIHBhdHRlcm5zLCB0aGUgQ09ORElUSU9OIGlzCmNoZWNrZWQuICBUaGlzIGlzIGEgQyBleHByZXNzaW9uIHdoaWNoIG1ha2VzIHRoZSBmaW5hbCBkZWNpc2lvbiB3aGV0aGVyCnRvIHBlcmZvcm0gdGhlIG9wdGltaXphdGlvbiAod2UgZG8gc28gaWYgdGhlIGV4cHJlc3Npb24gaXMgbm9uemVybykuICBJZgpDT05ESVRJT04gaXMgb21pdHRlZCAoaW4gb3RoZXIgd29yZHMsIHRoZSBzdHJpbmcgaXMgZW1wdHkpIHRoZW4gdGhlCm9wdGltaXphdGlvbiBpcyBhcHBsaWVkIHRvIGV2ZXJ5IHNlcXVlbmNlIG9mIGluc25zIHRoYXQgbWF0Y2hlcyB0aGUKcGF0dGVybnMuCgogVGhlIGRlZmluZWQgcGVlcGhvbGUgb3B0aW1pemF0aW9ucyBhcmUgYXBwbGllZCBhZnRlciByZWdpc3RlcgphbGxvY2F0aW9uIGlzIGNvbXBsZXRlLiAgVGhlcmVmb3JlLCB0aGUgcGVlcGhvbGUgZGVmaW5pdGlvbiBjYW4gY2hlY2sKd2hpY2ggb3BlcmFuZHMgaGF2ZSBlbmRlZCB1cCBpbiB3aGljaCBraW5kcyBvZiByZWdpc3RlcnMsIGp1c3QgYnkKbG9va2luZyBhdCB0aGUgb3BlcmFuZHMuCgogVGhlIHdheSB0byByZWZlciB0byB0aGUgb3BlcmFuZHMgaW4gQ09ORElUSU9OIGlzIHRvIHdyaXRlICdvcGVyYW5kc1tJXScKZm9yIG9wZXJhbmQgbnVtYmVyIEkgKGFzIG1hdGNoZWQgYnkgJyhtYXRjaF9vcGVyYW5kIEkgLi4uKScpLiAgVXNlIHRoZQp2YXJpYWJsZSAnaW5zbicgdG8gcmVmZXIgdG8gdGhlIGxhc3Qgb2YgdGhlIGluc25zIGJlaW5nIG1hdGNoZWQ7IHVzZQoncHJldl9hY3RpdmVfaW5zbicgdG8gZmluZCB0aGUgcHJlY2VkaW5nIGluc25zLgoKIFdoZW4gb3B0aW1pemluZyBjb21wdXRhdGlvbnMgd2l0aCBpbnRlcm1lZGlhdGUgcmVzdWx0cywgeW91IGNhbiB1c2UKQ09ORElUSU9OIHRvIG1hdGNoIG9ubHkgd2hlbiB0aGUgaW50ZXJtZWRpYXRlIHJlc3VsdHMgYXJlIG5vdCB1c2VkCmVsc2V3aGVyZS4gIFVzZSB0aGUgQyBleHByZXNzaW9uICdkZWFkX29yX3NldF9wIChJTlNOLCBPUCknLCB3aGVyZSBJTlNOCmlzIHRoZSBpbnNuIGluIHdoaWNoIHlvdSBleHBlY3QgdGhlIHZhbHVlIHRvIGJlIHVzZWQgZm9yIHRoZSBsYXN0IHRpbWUKKGZyb20gdGhlIHZhbHVlIG9mICdpbnNuJywgdG9nZXRoZXIgd2l0aCB1c2Ugb2YgJ3ByZXZfbm9ubm90ZV9pbnNuJyksCmFuZCBPUCBpcyB0aGUgaW50ZXJtZWRpYXRlIHZhbHVlIChmcm9tICdvcGVyYW5kc1tJXScpLgoKIEFwcGx5aW5nIHRoZSBvcHRpbWl6YXRpb24gbWVhbnMgcmVwbGFjaW5nIHRoZSBzZXF1ZW5jZSBvZiBpbnNucyB3aXRoCm9uZSBuZXcgaW5zbi4gIFRoZSBURU1QTEFURSBjb250cm9scyB1bHRpbWF0ZSBvdXRwdXQgb2YgYXNzZW1ibGVyIGNvZGUKZm9yIHRoaXMgY29tYmluZWQgaW5zbi4gIEl0IHdvcmtzIGV4YWN0bHkgbGlrZSB0aGUgdGVtcGxhdGUgb2YgYQonZGVmaW5lX2luc24nLiAgT3BlcmFuZCBudW1iZXJzIGluIHRoaXMgdGVtcGxhdGUgYXJlIHRoZSBzYW1lIG9uZXMgdXNlZAppbiBtYXRjaGluZyB0aGUgb3JpZ2luYWwgc2VxdWVuY2Ugb2YgaW5zbnMuCgogVGhlIHJlc3VsdCBvZiBhIGRlZmluZWQgcGVlcGhvbGUgb3B0aW1pemVyIGRvZXMgbm90IG5lZWQgdG8gbWF0Y2ggYW55Cm9mIHRoZSBpbnNuIHBhdHRlcm5zIGluIHRoZSBtYWNoaW5lIGRlc2NyaXB0aW9uOyBpdCBkb2VzIG5vdCBldmVuIGhhdmUKYW4gb3Bwb3J0dW5pdHkgdG8gbWF0Y2ggdGhlbS4gIFRoZSBwZWVwaG9sZSBvcHRpbWl6ZXIgZGVmaW5pdGlvbiBpdHNlbGYKc2VydmVzIGFzIHRoZSBpbnNuIHBhdHRlcm4gdG8gY29udHJvbCBob3cgdGhlIGluc24gaXMgb3V0cHV0LgoKIERlZmluZWQgcGVlcGhvbGUgb3B0aW1pemVycyBhcmUgcnVuIGFzIGFzc2VtYmxlciBjb2RlIGlzIGJlaW5nIG91dHB1dCwKc28gdGhlIGluc25zIHRoZXkgcHJvZHVjZSBhcmUgbmV2ZXIgY29tYmluZWQgb3IgcmVhcnJhbmdlZCBpbiBhbnkgd2F5LgoKIEhlcmUgaXMgYW4gZXhhbXBsZSwgdGFrZW4gZnJvbSB0aGUgNjgwMDAgbWFjaGluZSBkZXNjcmlwdGlvbjoKCiAgICAgKGRlZmluZV9wZWVwaG9sZQogICAgICAgWyhzZXQgKHJlZzpTSSAxNSkgKHBsdXM6U0kgKHJlZzpTSSAxNSkgKGNvbnN0X2ludCA0KSkpCiAgICAgICAgKHNldCAobWF0Y2hfb3BlcmFuZDpERiAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPWYiKQogICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6REYgMSAicmVnaXN0ZXJfb3BlcmFuZCIgImFkIikpXQogICAgICAgIkZQX1JFR19QIChvcGVyYW5kc1swXSkgJiYgISBGUF9SRUdfUCAob3BlcmFuZHNbMV0pIgogICAgIHsKICAgICAgIHJ0eCB4b3BlcmFuZHNbMl07CiAgICAgICB4b3BlcmFuZHNbMV0gPSBnZW5fcnR4X1JFRyAoU0ltb2RlLCBSRUdOTyAob3BlcmFuZHNbMV0pICsgMSk7CiAgICAgI2lmZGVmIE1PVE9ST0xBCiAgICAgICBvdXRwdXRfYXNtX2luc24gKCJtb3ZlLmwgJTEsKHNwKSIsIHhvcGVyYW5kcyk7CiAgICAgICBvdXRwdXRfYXNtX2luc24gKCJtb3ZlLmwgJTEsLShzcCkiLCBvcGVyYW5kcyk7CiAgICAgICByZXR1cm4gImZtb3ZlLmQgKHNwKSssJTAiOwogICAgICNlbHNlCiAgICAgICBvdXRwdXRfYXNtX2luc24gKCJtb3ZlbCAlMSxzcEAiLCB4b3BlcmFuZHMpOwogICAgICAgb3V0cHV0X2FzbV9pbnNuICgibW92ZWwgJTEsc3BALSIsIG9wZXJhbmRzKTsKICAgICAgIHJldHVybiAiZm1vdmVkIHNwQCssJTAiOwogICAgICNlbmRpZgogICAgIH0pCgogVGhlIGVmZmVjdCBvZiB0aGlzIG9wdGltaXphdGlvbiBpcyB0byBjaGFuZ2UKCiAgICAgamJzciBfZm9vYmFyCiAgICAgYWRkcWwgIzQsc3AKICAgICBtb3ZlbCBkMSxzcEAtCiAgICAgbW92ZWwgZDAsc3BALQogICAgIGZtb3ZlZCBzcEArLGZwMAoKaW50bwoKICAgICBqYnNyIF9mb29iYXIKICAgICBtb3ZlbCBkMSxzcEAKICAgICBtb3ZlbCBkMCxzcEAtCiAgICAgZm1vdmVkIHNwQCssZnAwCgogSU5TTi1QQVRURVJOLTEgYW5kIHNvIG9uIGxvb2sgX2FsbW9zdF8gbGlrZSB0aGUgc2Vjb25kIG9wZXJhbmQgb2YKJ2RlZmluZV9pbnNuJy4gIFRoZXJlIGlzIG9uZSBpbXBvcnRhbnQgZGlmZmVyZW5jZTogdGhlIHNlY29uZCBvcGVyYW5kIG9mCidkZWZpbmVfaW5zbicgY29uc2lzdHMgb2Ygb25lIG9yIG1vcmUgUlRYJ3MgZW5jbG9zZWQgaW4gc3F1YXJlIGJyYWNrZXRzLgpVc3VhbGx5LCB0aGVyZSBpcyBvbmx5IG9uZTogdGhlbiB0aGUgc2FtZSBhY3Rpb24gY2FuIGJlIHdyaXR0ZW4gYXMgYW4KZWxlbWVudCBvZiBhICdkZWZpbmVfcGVlcGhvbGUnLiAgQnV0IHdoZW4gdGhlcmUgYXJlIG11bHRpcGxlIGFjdGlvbnMgaW4KYSAnZGVmaW5lX2luc24nLCB0aGV5IGFyZSBpbXBsaWNpdGx5IGVuY2xvc2VkIGluIGEgJ3BhcmFsbGVsJy4gIFRoZW4geW91Cm11c3QgZXhwbGljaXRseSB3cml0ZSB0aGUgJ3BhcmFsbGVsJywgYW5kIHRoZSBzcXVhcmUgYnJhY2tldHMgd2l0aGluIGl0LAppbiB0aGUgJ2RlZmluZV9wZWVwaG9sZScuICBUaHVzLCBpZiBhbiBpbnNuIHBhdHRlcm4gbG9va3MgbGlrZSB0aGlzLAoKICAgICAoZGVmaW5lX2luc24gImRpdm1vZHNpNCIKICAgICAgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgImdlbmVyYWxfb3BlcmFuZCIgIj1kIikKICAgICAgICAgICAgIChkaXY6U0kgKG1hdGNoX29wZXJhbmQ6U0kgMSAiZ2VuZXJhbF9vcGVyYW5kIiAiMCIpCiAgICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOlNJIDIgImdlbmVyYWxfb3BlcmFuZCIgImRtc0siKSkpCiAgICAgICAgKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAzICJnZW5lcmFsX29wZXJhbmQiICI9ZCIpCiAgICAgICAgICAgICAobW9kOlNJIChtYXRjaF9kdXAgMSkgKG1hdGNoX2R1cCAyKSkpXQogICAgICAgIlRBUkdFVF82ODAyMCIKICAgICAgICJkaXZzbCUubCAlMiwlMzolMCIpCgp0aGVuIHRoZSB3YXkgdG8gbWVudGlvbiB0aGlzIGluc24gaW4gYSBwZWVwaG9sZSBpcyBhcyBmb2xsb3dzOgoKICAgICAoZGVmaW5lX3BlZXBob2xlCiAgICAgICBbLi4uCiAgICAgICAgKHBhcmFsbGVsCiAgICAgICAgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgImdlbmVyYWxfb3BlcmFuZCIgIj1kIikKICAgICAgICAgICAgICAgKGRpdjpTSSAobWF0Y2hfb3BlcmFuZDpTSSAxICJnZW5lcmFsX29wZXJhbmQiICIwIikKICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpTSSAyICJnZW5lcmFsX29wZXJhbmQiICJkbXNLIikpKQogICAgICAgICAgKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAzICJnZW5lcmFsX29wZXJhbmQiICI9ZCIpCiAgICAgICAgICAgICAgIChtb2Q6U0kgKG1hdGNoX2R1cCAxKSAobWF0Y2hfZHVwIDIpKSldKQogICAgICAgIC4uLl0KICAgICAgIC4uLikKCh8KRmlsZTogZ2NjaW50LmluZm8sICBOb2RlOiBkZWZpbmVfcGVlcGhvbGUyLCAgUHJldjogZGVmaW5lX3BlZXBob2xlLCAgVXA6IFBlZXBob2xlIERlZmluaXRpb25zCgoxNC4xOC4yIFJUTCB0byBSVEwgUGVlcGhvbGUgT3B0aW1pemVycwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKVGhlICdkZWZpbmVfcGVlcGhvbGUyJyBkZWZpbml0aW9uIHRlbGxzIHRoZSBjb21waWxlciBob3cgdG8gc3Vic3RpdHV0ZQpvbmUgc2VxdWVuY2Ugb2YgaW5zdHJ1Y3Rpb25zIGZvciBhbm90aGVyIHNlcXVlbmNlLCB3aGF0IGFkZGl0aW9uYWwKc2NyYXRjaCByZWdpc3RlcnMgbWF5IGJlIG5lZWRlZCBhbmQgd2hhdCB0aGVpciBsaWZldGltZXMgbXVzdCBiZS4KCiAgICAgKGRlZmluZV9wZWVwaG9sZTIKICAgICAgIFtJTlNOLVBBVFRFUk4tMQogICAgICAgIElOU04tUEFUVEVSTi0yCiAgICAgICAgLi4uXQogICAgICAgIkNPTkRJVElPTiIKICAgICAgIFtORVctSU5TTi1QQVRURVJOLTEKICAgICAgICBORVctSU5TTi1QQVRURVJOLTIKICAgICAgICAuLi5dCiAgICAgICAiUFJFUEFSQVRJT04tU1RBVEVNRU5UUyIpCgogVGhlIGRlZmluaXRpb24gaXMgYWxtb3N0IGlkZW50aWNhbCB0byAnZGVmaW5lX3NwbGl0JyAoKm5vdGUgSW5zbgpTcGxpdHRpbmc6OikgZXhjZXB0IHRoYXQgdGhlIHBhdHRlcm4gdG8gbWF0Y2ggaXMgbm90IGEgc2luZ2xlCmluc3RydWN0aW9uLCBidXQgYSBzZXF1ZW5jZSBvZiBpbnN0cnVjdGlvbnMuCgogSXQgaXMgcG9zc2libGUgdG8gcmVxdWVzdCBhZGRpdGlvbmFsIHNjcmF0Y2ggcmVnaXN0ZXJzIGZvciB1c2UgaW4gdGhlCm91dHB1dCB0ZW1wbGF0ZS4gIElmIGFwcHJvcHJpYXRlIHJlZ2lzdGVycyBhcmUgbm90IGZyZWUsIHRoZSBwYXR0ZXJuCndpbGwgc2ltcGx5IG5vdCBtYXRjaC4KCiBTY3JhdGNoIHJlZ2lzdGVycyBhcmUgcmVxdWVzdGVkIHdpdGggYSAnbWF0Y2hfc2NyYXRjaCcgcGF0dGVybiBhdCB0aGUKdG9wIGxldmVsIG9mIHRoZSBpbnB1dCBwYXR0ZXJuLiAgVGhlIGFsbG9jYXRlZCByZWdpc3RlciAoaW5pdGlhbGx5KSB3aWxsCmJlIGRlYWQgYXQgdGhlIHBvaW50IHJlcXVlc3RlZCB3aXRoaW4gdGhlIG9yaWdpbmFsIHNlcXVlbmNlLiAgSWYgdGhlCnNjcmF0Y2ggaXMgdXNlZCBhdCBtb3JlIHRoYW4gYSBzaW5nbGUgcG9pbnQsIGEgJ21hdGNoX2R1cCcgcGF0dGVybiBhdAp0aGUgdG9wIGxldmVsIG9mIHRoZSBpbnB1dCBwYXR0ZXJuIG1hcmtzIHRoZSBsYXN0IHBvc2l0aW9uIGluIHRoZSBpbnB1dApzZXF1ZW5jZSBhdCB3aGljaCB0aGUgcmVnaXN0ZXIgbXVzdCBiZSBhdmFpbGFibGUuCgogSGVyZSBpcyBhbiBleGFtcGxlIGZyb20gdGhlIElBLTMyIG1hY2hpbmUgZGVzY3JpcHRpb246CgogICAgIChkZWZpbmVfcGVlcGhvbGUyCiAgICAgICBbKG1hdGNoX3NjcmF0Y2g6U0kgMiAiciIpCiAgICAgICAgKHBhcmFsbGVsIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICIiKQogICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmF0b3I6U0kgMyAiYXJpdGhfb3JfbG9naWNhbF9vcGVyYXRvciIKICAgICAgICAgICAgICAgICAgICAgICAgICBbKG1hdGNoX2R1cCAwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpTSSAxICJtZW1vcnlfb3BlcmFuZCIgIiIpXSkpCiAgICAgICAgICAgICAgICAgICAoY2xvYmJlciAocmVnOkNDIDE3KSldKV0KICAgICAgICIhIG9wdGltaXplX3NpemUgJiYgISBUQVJHRVRfUkVBRF9NT0RJRlkiCiAgICAgICBbKHNldCAobWF0Y2hfZHVwIDIpIChtYXRjaF9kdXAgMSkpCiAgICAgICAgKHBhcmFsbGVsIFsoc2V0IChtYXRjaF9kdXAgMCkKICAgICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wX2R1cCAzIFsobWF0Y2hfZHVwIDApIChtYXRjaF9kdXAgMildKSkKICAgICAgICAgICAgICAgICAgIChjbG9iYmVyIChyZWc6Q0MgMTcpKV0pXQogICAgICAgIiIpCgpUaGlzIHBhdHRlcm4gdHJpZXMgdG8gc3BsaXQgYSBsb2FkIGZyb20gaXRzIHVzZSBpbiB0aGUgaG9wZXMgdGhhdCB3ZSdsbApiZSBhYmxlIHRvIHNjaGVkdWxlIGFyb3VuZCB0aGUgbWVtb3J5IGxvYWQgbGF0ZW5jeS4gIEl0IGFsbG9jYXRlcyBhCnNpbmdsZSAnU0ltb2RlJyByZWdpc3RlciBvZiBjbGFzcyAnR0VORVJBTF9SRUdTJyAoJyJyIicpIHRoYXQgbmVlZHMgdG8KYmUgbGl2ZSBvbmx5IGF0IHRoZSBwb2ludCBqdXN0IGJlZm9yZSB0aGUgYXJpdGhtZXRpYy4KCiBBIHJlYWwgZXhhbXBsZSByZXF1aXJpbmcgZXh0ZW5kZWQgc2NyYXRjaCBsaWZldGltZXMgaXMgaGFyZGVyIHRvIGNvbWUKYnksIHNvIGhlcmUncyBhIHNpbGx5IG1hZGUtdXAgZXhhbXBsZToKCiAgICAgKGRlZmluZV9wZWVwaG9sZTIKICAgICAgIFsobWF0Y2hfc2NyYXRjaDpTSSA0ICJyIikKICAgICAgICAoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgIiIgIiIpIChtYXRjaF9vcGVyYW5kOlNJIDEgIiIgIiIpKQogICAgICAgIChzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMiAiIiAiIikgKG1hdGNoX2R1cCAxKSkKICAgICAgICAobWF0Y2hfZHVwIDQpCiAgICAgICAgKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAzICIiICIiKSAobWF0Y2hfZHVwIDEpKV0KICAgICAgICIvKiBkZXRlcm1pbmUgMSBkb2VzIG5vdCBvdmVybGFwIDAgYW5kIDIgKi8iCiAgICAgICBbKHNldCAobWF0Y2hfZHVwIDQpIChtYXRjaF9kdXAgMSkpCiAgICAgICAgKHNldCAobWF0Y2hfZHVwIDApIChtYXRjaF9kdXAgNCkpCiAgICAgICAgKHNldCAobWF0Y2hfZHVwIDIpIChtYXRjaF9kdXAgNCkpXQogICAgICAgIChzZXQgKG1hdGNoX2R1cCAzKSAobWF0Y2hfZHVwIDQpKV0KICAgICAgICIiKQoKSWYgd2UgaGFkIG5vdCBhZGRlZCB0aGUgJyhtYXRjaF9kdXAgNCknIGluIHRoZSBtaWRkbGUgb2YgdGhlIGlucHV0CnNlcXVlbmNlLCBpdCBtaWdodCBoYXZlIGJlZW4gdGhlIGNhc2UgdGhhdCB0aGUgcmVnaXN0ZXIgd2UgY2hvc2UgYXQgdGhlCmJlZ2lubmluZyBvZiB0aGUgc2VxdWVuY2UgaXMga2lsbGVkIGJ5IHRoZSBmaXJzdCBvciBzZWNvbmQgJ3NldCcuCgofCkZpbGU6IGdjY2ludC5pbmZvLCAgTm9kZTogSW5zbiBBdHRyaWJ1dGVzLCAgTmV4dDogQ29uZGl0aW9uYWwgRXhlY3V0aW9uLCAgUHJldjogUGVlcGhvbGUgRGVmaW5pdGlvbnMsICBVcDogTWFjaGluZSBEZXNjCgoxNC4xOSBJbnN0cnVjdGlvbiBBdHRyaWJ1dGVzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCkluIGFkZGl0aW9uIHRvIGRlc2NyaWJpbmcgdGhlIGluc3RydWN0aW9uIHN1cHBvcnRlZCBieSB0aGUgdGFyZ2V0Cm1hY2hpbmUsIHRoZSAnbWQnIGZpbGUgYWxzbyBkZWZpbmVzIGEgZ3JvdXAgb2YgImF0dHJpYnV0ZXMiIGFuZCBhIHNldCBvZgp2YWx1ZXMgZm9yIGVhY2guICBFdmVyeSBnZW5lcmF0ZWQgaW5zbiBpcyBhc3NpZ25lZCBhIHZhbHVlIGZvciBlYWNoCmF0dHJpYnV0ZS4gIE9uZSBwb3NzaWJsZSBhdHRyaWJ1dGUgd291bGQgYmUgdGhlIGVmZmVjdCB0aGF0IHRoZSBpbnNuIGhhcwpvbiB0aGUgbWFjaGluZSdzIGNvbmRpdGlvbiBjb2RlLiAgVGhpcyBhdHRyaWJ1dGUgY2FuIHRoZW4gYmUgdXNlZCBieQonTk9USUNFX1VQREFURV9DQycgdG8gdHJhY2sgdGhlIGNvbmRpdGlvbiBjb2Rlcy4KCiogTWVudToKCiogRGVmaW5pbmcgQXR0cmlidXRlczo6IFNwZWNpZnlpbmcgYXR0cmlidXRlcyBhbmQgdGhlaXIgdmFsdWVzLgoqIEV4cHJlc3Npb25zOjogICAgICAgICBWYWxpZCBleHByZXNzaW9ucyBmb3IgYXR0cmlidXRlIHZhbHVlcy4KKiBUYWdnaW5nIEluc25zOjogICAgICAgQXNzaWduaW5nIGF0dHJpYnV0ZSB2YWx1ZXMgdG8gaW5zbnMuCiogQXR0ciBFeGFtcGxlOjogICAgICAgIEFuIGV4YW1wbGUgb2YgYXNzaWduaW5nIGF0dHJpYnV0ZXMuCiogSW5zbiBMZW5ndGhzOjogICAgICAgIENvbXB1dGluZyB0aGUgbGVuZ3RoIG9mIGluc25zLgoqIENvbnN0YW50IEF0dHJpYnV0ZXM6OiBEZWZpbmluZyBhdHRyaWJ1dGVzIHRoYXQgYXJlIGNvbnN0YW50LgoqIERlbGF5IFNsb3RzOjogICAgICAgICBEZWZpbmluZyBkZWxheSBzbG90cyByZXF1aXJlZCBmb3IgYSBtYWNoaW5lLgoqIFByb2Nlc3NvciBwaXBlbGluZSBkZXNjcmlwdGlvbjo6IFNwZWNpZnlpbmcgaW5mb3JtYXRpb24gZm9yIGluc24gc2NoZWR1bGluZy4KCh8KRmlsZTogZ2NjaW50LmluZm8sICBOb2RlOiBEZWZpbmluZyBBdHRyaWJ1dGVzLCAgTmV4dDogRXhwcmVzc2lvbnMsICBVcDogSW5zbiBBdHRyaWJ1dGVzCgoxNC4xOS4xIERlZmluaW5nIEF0dHJpYnV0ZXMgYW5kIHRoZWlyIFZhbHVlcwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKVGhlICdkZWZpbmVfYXR0cicgZXhwcmVzc2lvbiBpcyB1c2VkIHRvIGRlZmluZSBlYWNoIGF0dHJpYnV0ZSByZXF1aXJlZApieSB0aGUgdGFyZ2V0IG1hY2hpbmUuICBJdCBsb29rcyBsaWtlOgoKICAgICAoZGVmaW5lX2F0dHIgTkFNRSBMSVNULU9GLVZBTFVFUyBERUZBVUxUKQoKIE5BTUUgaXMgYSBzdHJpbmcgc3BlY2lmeWluZyB0aGUgbmFtZSBvZiB0aGUgYXR0cmlidXRlIGJlaW5nIGRlZmluZWQuCgogTElTVC1PRi1WQUxVRVMgaXMgZWl0aGVyIGEgc3RyaW5nIHRoYXQgc3BlY2lmaWVzIGEgY29tbWEtc2VwYXJhdGVkIGxpc3QKb2YgdmFsdWVzIHRoYXQgY2FuIGJlIGFzc2lnbmVkIHRvIHRoZSBhdHRyaWJ1dGUsIG9yIGEgbnVsbCBzdHJpbmcgdG8KaW5kaWNhdGUgdGhhdCB0aGUgYXR0cmlidXRlIHRha2VzIG51bWVyaWMgdmFsdWVzLgoKIERFRkFVTFQgaXMgYW4gYXR0cmlidXRlIGV4cHJlc3Npb24gdGhhdCBnaXZlcyB0aGUgdmFsdWUgb2YgdGhpcwphdHRyaWJ1dGUgZm9yIGluc25zIHRoYXQgbWF0Y2ggcGF0dGVybnMgd2hvc2UgZGVmaW5pdGlvbiBkb2VzIG5vdAppbmNsdWRlIGFuIGV4cGxpY2l0IHZhbHVlIGZvciB0aGlzIGF0dHJpYnV0ZS4gICpOb3RlIEF0dHIgRXhhbXBsZTo6LCBmb3IKbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgaGFuZGxpbmcgb2YgZGVmYXVsdHMuICAqTm90ZSBDb25zdGFudApBdHRyaWJ1dGVzOjosIGZvciBpbmZvcm1hdGlvbiBvbiBhdHRyaWJ1dGVzIHRoYXQgZG8gbm90IGRlcGVuZCBvbiBhbnkKcGFydGljdWxhciBpbnNuLgoKIEZvciBlYWNoIGRlZmluZWQgYXR0cmlidXRlLCBhIG51bWJlciBvZiBkZWZpbml0aW9ucyBhcmUgd3JpdHRlbiB0byB0aGUKJ2luc24tYXR0ci5oJyBmaWxlLiAgRm9yIGNhc2VzIHdoZXJlIGFuIGV4cGxpY2l0IHNldCBvZiB2YWx1ZXMgaXMKc3BlY2lmaWVkIGZvciBhbiBhdHRyaWJ1dGUsIHRoZSBmb2xsb3dpbmcgYXJlIGRlZmluZWQ6CgogICAqIEEgJyNkZWZpbmUnIGlzIHdyaXR0ZW4gZm9yIHRoZSBzeW1ib2wgJ0hBVkVfQVRUUl9OQU1FJy4KCiAgICogQW4gZW51bWVyYXRlZCBjbGFzcyBpcyBkZWZpbmVkIGZvciAnYXR0cl9OQU1FJyB3aXRoIGVsZW1lbnRzIG9mIHRoZQogICAgIGZvcm0gJ1VQUEVSLU5BTUVfVVBQRVItVkFMVUUnIHdoZXJlIHRoZSBhdHRyaWJ1dGUgbmFtZSBhbmQgdmFsdWUKICAgICBhcmUgZmlyc3QgY29udmVydGVkIHRvIHVwcGVyY2FzZS4KCiAgICogQSBmdW5jdGlvbiAnZ2V0X2F0dHJfTkFNRScgaXMgZGVmaW5lZCB0aGF0IGlzIHBhc3NlZCBhbiBpbnNuIGFuZAogICAgIHJldHVybnMgdGhlIGF0dHJpYnV0ZSB2YWx1ZSBmb3IgdGhhdCBpbnNuLgoKIEZvciBleGFtcGxlLCBpZiB0aGUgZm9sbG93aW5nIGlzIHByZXNlbnQgaW4gdGhlICdtZCcgZmlsZToKCiAgICAgKGRlZmluZV9hdHRyICJ0eXBlIiAiYnJhbmNoLGZwLGxvYWQsc3RvcmUsYXJpdGgiIC4uLikKCnRoZSBmb2xsb3dpbmcgbGluZXMgd2lsbCBiZSB3cml0dGVuIHRvIHRoZSBmaWxlICdpbnNuLWF0dHIuaCcuCgogICAgICNkZWZpbmUgSEFWRV9BVFRSX3R5cGUKICAgICBlbnVtIGF0dHJfdHlwZSB7VFlQRV9CUkFOQ0gsIFRZUEVfRlAsIFRZUEVfTE9BRCwKICAgICAgICAgICAgICAgICAgICAgIFRZUEVfU1RPUkUsIFRZUEVfQVJJVEh9OwogICAgIGV4dGVybiBlbnVtIGF0dHJfdHlwZSBnZXRfYXR0cl90eXBlICgpOwoKIElmIHRoZSBhdHRyaWJ1dGUgdGFrZXMgbnVtZXJpYyB2YWx1ZXMsIG5vICdlbnVtJyB0eXBlIHdpbGwgYmUgZGVmaW5lZAphbmQgdGhlIGZ1bmN0aW9uIHRvIG9idGFpbiB0aGUgYXR0cmlidXRlJ3MgdmFsdWUgd2lsbCByZXR1cm4gJ2ludCcuCgofCkZpbGU6IGdjY2ludC5pbmZvLCAgTm9kZTogRXhwcmVzc2lvbnMsICBOZXh0OiBUYWdnaW5nIEluc25zLCAgUHJldjogRGVmaW5pbmcgQXR0cmlidXRlcywgIFVwOiBJbnNuIEF0dHJpYnV0ZXMKCjE0LjE5LjIgQXR0cmlidXRlIEV4cHJlc3Npb25zCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpSVEwgZXhwcmVzc2lvbnMgdXNlZCB0byBkZWZpbmUgYXR0cmlidXRlcyB1c2UgdGhlIGNvZGVzIGRlc2NyaWJlZCBhYm92ZQpwbHVzIGEgZmV3IHNwZWNpZmljIHRvIGF0dHJpYnV0ZSBkZWZpbml0aW9ucywgdG8gYmUgZGlzY3Vzc2VkIGJlbG93LgpBdHRyaWJ1dGUgdmFsdWUgZXhwcmVzc2lvbnMgbXVzdCBoYXZlIG9uZSBvZiB0aGUgZm9sbG93aW5nIGZvcm1zOgoKJyhjb25zdF9pbnQgSSknCiAgICAgVGhlIGludGVnZXIgSSBzcGVjaWZpZXMgdGhlIHZhbHVlIG9mIGEgbnVtZXJpYyBhdHRyaWJ1dGUuICBJIG11c3QKICAgICBiZSBub24tbmVnYXRpdmUuCgogICAgIFRoZSB2YWx1ZSBvZiBhIG51bWVyaWMgYXR0cmlidXRlIGNhbiBiZSBzcGVjaWZpZWQgZWl0aGVyIHdpdGggYQogICAgICdjb25zdF9pbnQnLCBvciBhcyBhbiBpbnRlZ2VyIHJlcHJlc2VudGVkIGFzIGEgc3RyaW5nIGluCiAgICAgJ2NvbnN0X3N0cmluZycsICdlcV9hdHRyJyAoc2VlIGJlbG93KSwgJ2F0dHInLCAnc3ltYm9sX3JlZicsIHNpbXBsZQogICAgIGFyaXRobWV0aWMgZXhwcmVzc2lvbnMsIGFuZCAnc2V0X2F0dHInIG92ZXJyaWRlcyBvbiBzcGVjaWZpYwogICAgIGluc3RydWN0aW9ucyAoKm5vdGUgVGFnZ2luZyBJbnNuczo6KS4KCicoY29uc3Rfc3RyaW5nIFZBTFVFKScKICAgICBUaGUgc3RyaW5nIFZBTFVFIHNwZWNpZmllcyBhIGNvbnN0YW50IGF0dHJpYnV0ZSB2YWx1ZS4gIElmIFZBTFVFIGlzCiAgICAgc3BlY2lmaWVkIGFzICciKiInLCBpdCBtZWFucyB0aGF0IHRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZQogICAgIGF0dHJpYnV0ZSBpcyB0byBiZSB1c2VkIGZvciB0aGUgaW5zbiBjb250YWluaW5nIHRoaXMgZXhwcmVzc2lvbi4KICAgICAnIioiJyBvYnZpb3VzbHkgY2Fubm90IGJlIHVzZWQgaW4gdGhlIERFRkFVTFQgZXhwcmVzc2lvbiBvZiBhCiAgICAgJ2RlZmluZV9hdHRyJy4KCiAgICAgSWYgdGhlIGF0dHJpYnV0ZSB3aG9zZSB2YWx1ZSBpcyBiZWluZyBzcGVjaWZpZWQgaXMgbnVtZXJpYywgVkFMVUUKICAgICBtdXN0IGJlIGEgc3RyaW5nIGNvbnRhaW5pbmcgYSBub24tbmVnYXRpdmUgaW50ZWdlciAobm9ybWFsbHkKICAgICAnY29uc3RfaW50JyB3b3VsZCBiZSB1c2VkIGluIHRoaXMgY2FzZSkuICBPdGhlcndpc2UsIGl0IG11c3QKICAgICBjb250YWluIG9uZSBvZiB0aGUgdmFsaWQgdmFsdWVzIGZvciB0aGUgYXR0cmlidXRlLgoKJyhpZl90aGVuX2Vsc2UgVEVTVCBUUlVFLVZBTFVFIEZBTFNFLVZBTFVFKScKICAgICBURVNUIHNwZWNpZmllcyBhbiBhdHRyaWJ1dGUgdGVzdCwgd2hvc2UgZm9ybWF0IGlzIGRlZmluZWQgYmVsb3cuCiAgICAgVGhlIHZhbHVlIG9mIHRoaXMgZXhwcmVzc2lvbiBpcyBUUlVFLVZBTFVFIGlmIFRFU1QgaXMgdHJ1ZSwKICAgICBvdGhlcndpc2UgaXQgaXMgRkFMU0UtVkFMVUUuCgonKGNvbmQgW1RFU1QxIFZBTFVFMSAuLi5dIERFRkFVTFQpJwogICAgIFRoZSBmaXJzdCBvcGVyYW5kIG9mIHRoaXMgZXhwcmVzc2lvbiBpcyBhIHZlY3RvciBjb250YWluaW5nIGFuIGV2ZW4KICAgICBudW1iZXIgb2YgZXhwcmVzc2lvbnMgYW5kIGNvbnNpc3Rpbmcgb2YgcGFpcnMgb2YgVEVTVCBhbmQgVkFMVUUKICAgICBleHByZXNzaW9ucy4gIFRoZSB2YWx1ZSBvZiB0aGUgJ2NvbmQnIGV4cHJlc3Npb24gaXMgdGhhdCBvZiB0aGUKICAgICBWQUxVRSBjb3JyZXNwb25kaW5nIHRvIHRoZSBmaXJzdCB0cnVlIFRFU1QgZXhwcmVzc2lvbi4gIElmIG5vbmUgb2YKICAgICB0aGUgVEVTVCBleHByZXNzaW9ucyBhcmUgdHJ1ZSwgdGhlIHZhbHVlIG9mIHRoZSAnY29uZCcgZXhwcmVzc2lvbgogICAgIGlzIHRoYXQgb2YgdGhlIERFRkFVTFQgZXhwcmVzc2lvbi4KCiBURVNUIGV4cHJlc3Npb25zIGNhbiBoYXZlIG9uZSBvZiB0aGUgZm9sbG93aW5nIGZvcm1zOgoKJyhjb25zdF9pbnQgSSknCiAgICAgVGhpcyB0ZXN0IGlzIHRydWUgaWYgSSBpcyBub256ZXJvIGFuZCBmYWxzZSBvdGhlcndpc2UuCgonKG5vdCBURVNUKScKJyhpb3IgVEVTVDEgVEVTVDIpJwonKGFuZCBURVNUMSBURVNUMiknCiAgICAgVGhlc2UgdGVzdHMgYXJlIHRydWUgaWYgdGhlIGluZGljYXRlZCBsb2dpY2FsIGZ1bmN0aW9uIGlzIHRydWUuCgonKG1hdGNoX29wZXJhbmQ6TSBOIFBSRUQgQ09OU1RSQUlOVFMpJwogICAgIFRoaXMgdGVzdCBpcyB0cnVlIGlmIG9wZXJhbmQgTiBvZiB0aGUgaW5zbiB3aG9zZSBhdHRyaWJ1dGUgdmFsdWUgaXMKICAgICBiZWluZyBkZXRlcm1pbmVkIGhhcyBtb2RlIE0gKHRoaXMgcGFydCBvZiB0aGUgdGVzdCBpcyBpZ25vcmVkIGlmIE0KICAgICBpcyAnVk9JRG1vZGUnKSBhbmQgdGhlIGZ1bmN0aW9uIHNwZWNpZmllZCBieSB0aGUgc3RyaW5nIFBSRUQKICAgICByZXR1cm5zIGEgbm9uemVybyB2YWx1ZSB3aGVuIHBhc3NlZCBvcGVyYW5kIE4gYW5kIG1vZGUgTSAodGhpcyBwYXJ0CiAgICAgb2YgdGhlIHRlc3QgaXMgaWdub3JlZCBpZiBQUkVEIGlzIHRoZSBudWxsIHN0cmluZykuCgogICAgIFRoZSBDT05TVFJBSU5UUyBvcGVyYW5kIGlzIGlnbm9yZWQgYW5kIHNob3VsZCBiZSB0aGUgbnVsbCBzdHJpbmcuCgonKGxlIEFSSVRIMSBBUklUSDIpJwonKGxldSBBUklUSDEgQVJJVEgyKScKJyhsdCBBUklUSDEgQVJJVEgyKScKJyhsdHUgQVJJVEgxIEFSSVRIMiknCicoZ3QgQVJJVEgxIEFSSVRIMiknCicoZ3R1IEFSSVRIMSBBUklUSDIpJwonKGdlIEFSSVRIMSBBUklUSDIpJwonKGdldSBBUklUSDEgQVJJVEgyKScKJyhuZSBBUklUSDEgQVJJVEgyKScKJyhlcSBBUklUSDEgQVJJVEgyKScKICAgICBUaGVzZSB0ZXN0cyBhcmUgdHJ1ZSBpZiB0aGUgaW5kaWNhdGVkIGNvbXBhcmlzb24gb2YgdGhlIHR3bwogICAgIGFyaXRobWV0aWMgZXhwcmVzc2lvbnMgaXMgdHJ1ZS4gIEFyaXRobWV0aWMgZXhwcmVzc2lvbnMgYXJlIGZvcm1lZAogICAgIHdpdGggJ3BsdXMnLCAnbWludXMnLCAnbXVsdCcsICdkaXYnLCAnbW9kJywgJ2FicycsICduZWcnLCAnYW5kJywKICAgICAnaW9yJywgJ3hvcicsICdub3QnLCAnYXNoaWZ0JywgJ2xzaGlmdHJ0JywgYW5kICdhc2hpZnRydCcKICAgICBleHByZXNzaW9ucy4KCiAgICAgJ2NvbnN0X2ludCcgYW5kICdzeW1ib2xfcmVmJyBhcmUgYWx3YXlzIHZhbGlkIHRlcm1zICgqbm90ZSBJbnNuCiAgICAgTGVuZ3Roczo6LGZvciBhZGRpdGlvbmFsIGZvcm1zKS4gICdzeW1ib2xfcmVmJyBpcyBhIHN0cmluZyBkZW5vdGluZwogICAgIGEgQyBleHByZXNzaW9uIHRoYXQgeWllbGRzIGFuICdpbnQnIHdoZW4gZXZhbHVhdGVkIGJ5IHRoZQogICAgICdnZXRfYXR0cl8uLi4nIHJvdXRpbmUuICBJdCBzaG91bGQgbm9ybWFsbHkgYmUgYSBnbG9iYWwgdmFyaWFibGUuCgonKGVxX2F0dHIgTkFNRSBWQUxVRSknCiAgICAgTkFNRSBpcyBhIHN0cmluZyBzcGVjaWZ5aW5nIHRoZSBuYW1lIG9mIGFuIGF0dHJpYnV0ZS4KCiAgICAgVkFMVUUgaXMgYSBzdHJpbmcgdGhhdCBpcyBlaXRoZXIgYSB2YWxpZCB2YWx1ZSBmb3IgYXR0cmlidXRlIE5BTUUsCiAgICAgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiB2YWx1ZXMsIG9yICchJyBmb2xsb3dlZCBieSBhIHZhbHVlIG9yCiAgICAgbGlzdC4gIElmIFZBTFVFIGRvZXMgbm90IGJlZ2luIHdpdGggYSAnIScsIHRoaXMgdGVzdCBpcyB0cnVlIGlmIHRoZQogICAgIHZhbHVlIG9mIHRoZSBOQU1FIGF0dHJpYnV0ZSBvZiB0aGUgY3VycmVudCBpbnNuIGlzIGluIHRoZSBsaXN0CiAgICAgc3BlY2lmaWVkIGJ5IFZBTFVFLiAgSWYgVkFMVUUgYmVnaW5zIHdpdGggYSAnIScsIHRoaXMgdGVzdCBpcyB0cnVlCiAgICAgaWYgdGhlIGF0dHJpYnV0ZSdzIHZhbHVlIGlzIF9ub3RfIGluIHRoZSBzcGVjaWZpZWQgbGlzdC4KCiAgICAgRm9yIGV4YW1wbGUsCgogICAgICAgICAgKGVxX2F0dHIgInR5cGUiICJsb2FkLHN0b3JlIikKCiAgICAgaXMgZXF1aXZhbGVudCB0bwoKICAgICAgICAgIChpb3IgKGVxX2F0dHIgInR5cGUiICJsb2FkIikgKGVxX2F0dHIgInR5cGUiICJzdG9yZSIpKQoKICAgICBJZiBOQU1FIHNwZWNpZmllcyBhbiBhdHRyaWJ1dGUgb2YgJ2FsdGVybmF0aXZlJywgaXQgcmVmZXJzIHRvIHRoZQogICAgIHZhbHVlIG9mIHRoZSBjb21waWxlciB2YXJpYWJsZSAnd2hpY2hfYWx0ZXJuYXRpdmUnICgqbm90ZSBPdXRwdXQKICAgICBTdGF0ZW1lbnQ6OikgYW5kIHRoZSB2YWx1ZXMgbXVzdCBiZSBzbWFsbCBpbnRlZ2Vycy4gIEZvciBleGFtcGxlLAoKICAgICAgICAgIChlcV9hdHRyICJhbHRlcm5hdGl2ZSIgIjIsMyIpCgogICAgIGlzIGVxdWl2YWxlbnQgdG8KCiAgICAgICAgICAoaW9yIChlcSAoc3ltYm9sX3JlZiAid2hpY2hfYWx0ZXJuYXRpdmUiKSAoY29uc3RfaW50IDIpKQogICAgICAgICAgICAgICAoZXEgKHN5bWJvbF9yZWYgIndoaWNoX2FsdGVybmF0aXZlIikgKGNvbnN0X2ludCAzKSkpCgogICAgIE5vdGUgdGhhdCwgZm9yIG1vc3QgYXR0cmlidXRlcywgYW4gJ2VxX2F0dHInIHRlc3QgaXMgc2ltcGxpZmllZCBpbgogICAgIGNhc2VzIHdoZXJlIHRoZSB2YWx1ZSBvZiB0aGUgYXR0cmlidXRlIGJlaW5nIHRlc3RlZCBpcyBrbm93biBmb3IKICAgICBhbGwgaW5zbnMgbWF0Y2hpbmcgYSBwYXJ0aWN1bGFyIHBhdHRlcm4uICBUaGlzIGlzIGJ5IGZhciB0aGUgbW9zdAogICAgIGNvbW1vbiBjYXNlLgoKJyhhdHRyX2ZsYWcgTkFNRSknCiAgICAgVGhlIHZhbHVlIG9mIGFuICdhdHRyX2ZsYWcnIGV4cHJlc3Npb24gaXMgdHJ1ZSBpZiB0aGUgZmxhZwogICAgIHNwZWNpZmllZCBieSBOQU1FIGlzIHRydWUgZm9yIHRoZSAnaW5zbicgY3VycmVudGx5IGJlaW5nIHNjaGVkdWxlZC4KCiAgICAgTkFNRSBpcyBhIHN0cmluZyBzcGVjaWZ5aW5nIG9uZSBvZiBhIGZpeGVkIHNldCBvZiBmbGFncyB0byB0ZXN0LgogICAgIFRlc3QgdGhlIGZsYWdzICdmb3J3YXJkJyBhbmQgJ2JhY2t3YXJkJyB0byBkZXRlcm1pbmUgdGhlIGRpcmVjdGlvbgogICAgIG9mIGEgY29uZGl0aW9uYWwgYnJhbmNoLiAgVGVzdCB0aGUgZmxhZ3MgJ3ZlcnlfbGlrZWx5JywgJ2xpa2VseScsCiAgICAgJ3ZlcnlfdW5saWtlbHknLCBhbmQgJ3VubGlrZWx5JyB0byBkZXRlcm1pbmUgaWYgYSBjb25kaXRpb25hbAogICAgIGJyYW5jaCBpcyBleHBlY3RlZCB0byBiZSB0YWtlbi4KCiAgICAgSWYgdGhlICd2ZXJ5X2xpa2VseScgZmxhZyBpcyB0cnVlLCB0aGVuIHRoZSAnbGlrZWx5JyBmbGFnIGlzIGFsc28KICAgICB0cnVlLiAgTGlrZXdpc2UgZm9yIHRoZSAndmVyeV91bmxpa2VseScgYW5kICd1bmxpa2VseScgZmxhZ3MuCgogICAgIFRoaXMgZXhhbXBsZSBkZXNjcmliZXMgYSBjb25kaXRpb25hbCBicmFuY2ggZGVsYXkgc2xvdCB3aGljaCBjYW4gYmUKICAgICBudWxsaWZpZWQgZm9yIGZvcndhcmQgYnJhbmNoZXMgdGhhdCBhcmUgdGFrZW4gKGFubnVsLXRydWUpIG9yIGZvcgogICAgIGJhY2t3YXJkIGJyYW5jaGVzIHdoaWNoIGFyZSBub3QgdGFrZW4gKGFubnVsLWZhbHNlKS4KCiAgICAgICAgICAoZGVmaW5lX2RlbGF5IChlcV9hdHRyICJ0eXBlIiAiY2JyYW5jaCIpCiAgICAgICAgICAgIFsoZXFfYXR0ciAiaW5fYnJhbmNoX2RlbGF5IiAidHJ1ZSIpCiAgICAgICAgICAgICAoYW5kIChlcV9hdHRyICJpbl9icmFuY2hfZGVsYXkiICJ0cnVlIikKICAgICAgICAgICAgICAgICAgKGF0dHJfZmxhZyAiZm9yd2FyZCIpKQogICAgICAgICAgICAgKGFuZCAoZXFfYXR0ciAiaW5fYnJhbmNoX2RlbGF5IiAidHJ1ZSIpCiAgICAgICAgICAgICAgICAgIChhdHRyX2ZsYWcgImJhY2t3YXJkIikpXSkKCiAgICAgVGhlICdmb3J3YXJkJyBhbmQgJ2JhY2t3YXJkJyBmbGFncyBhcmUgZmFsc2UgaWYgdGhlIGN1cnJlbnQgJ2luc24nCiAgICAgYmVpbmcgc2NoZWR1bGVkIGlzIG5vdCBhIGNvbmRpdGlvbmFsIGJyYW5jaC4KCiAgICAgVGhlICd2ZXJ5X2xpa2VseScgYW5kICdsaWtlbHknIGZsYWdzIGFyZSB0cnVlIGlmIHRoZSAnaW5zbicgYmVpbmcKICAgICBzY2hlZHVsZWQgaXMgbm90IGEgY29uZGl0aW9uYWwgYnJhbmNoLiAgVGhlICd2ZXJ5X3VubGlrZWx5JyBhbmQKICAgICAndW5saWtlbHknIGZsYWdzIGFyZSBmYWxzZSBpZiB0aGUgJ2luc24nIGJlaW5nIHNjaGVkdWxlZCBpcyBub3QgYQogICAgIGNvbmRpdGlvbmFsIGJyYW5jaC4KCiAgICAgJ2F0dHJfZmxhZycgaXMgb25seSB1c2VkIGR1cmluZyBkZWxheSBzbG90IHNjaGVkdWxpbmcgYW5kIGhhcyBubwogICAgIG1lYW5pbmcgdG8gb3RoZXIgcGFzc2VzIG9mIHRoZSBjb21waWxlci4KCicoYXR0ciBOQU1FKScKICAgICBUaGUgdmFsdWUgb2YgYW5vdGhlciBhdHRyaWJ1dGUgaXMgcmV0dXJuZWQuICBUaGlzIGlzIG1vc3QgdXNlZnVsCiAgICAgZm9yIG51bWVyaWMgYXR0cmlidXRlcywgYXMgJ2VxX2F0dHInIGFuZCAnYXR0cl9mbGFnJyBwcm9kdWNlIG1vcmUKICAgICBlZmZpY2llbnQgY29kZSBmb3Igbm9uLW51bWVyaWMgYXR0cmlidXRlcy4KCh8KRmlsZTogZ2NjaW50LmluZm8sICBOb2RlOiBUYWdnaW5nIEluc25zLCAgTmV4dDogQXR0ciBFeGFtcGxlLCAgUHJldjogRXhwcmVzc2lvbnMsICBVcDogSW5zbiBBdHRyaWJ1dGVzCgoxNC4xOS4zIEFzc2lnbmluZyBBdHRyaWJ1dGUgVmFsdWVzIHRvIEluc25zCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KClRoZSB2YWx1ZSBhc3NpZ25lZCB0byBhbiBhdHRyaWJ1dGUgb2YgYW4gaW5zbiBpcyBwcmltYXJpbHkgZGV0ZXJtaW5lZCBieQp3aGljaCBwYXR0ZXJuIGlzIG1hdGNoZWQgYnkgdGhhdCBpbnNuIChvciB3aGljaCAnZGVmaW5lX3BlZXBob2xlJwpnZW5lcmF0ZWQgaXQpLiAgRXZlcnkgJ2RlZmluZV9pbnNuJyBhbmQgJ2RlZmluZV9wZWVwaG9sZScgY2FuIGhhdmUgYW4Kb3B0aW9uYWwgbGFzdCBhcmd1bWVudCB0byBzcGVjaWZ5IHRoZSB2YWx1ZXMgb2YgYXR0cmlidXRlcyBmb3IgbWF0Y2hpbmcKaW5zbnMuICBUaGUgdmFsdWUgb2YgYW55IGF0dHJpYnV0ZSBub3Qgc3BlY2lmaWVkIGluIGEgcGFydGljdWxhciBpbnNuIGlzCnNldCB0byB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhhdCBhdHRyaWJ1dGUsIGFzIHNwZWNpZmllZCBpbiBpdHMKJ2RlZmluZV9hdHRyJy4gIEV4dGVuc2l2ZSB1c2Ugb2YgZGVmYXVsdCB2YWx1ZXMgZm9yIGF0dHJpYnV0ZXMgcGVybWl0cwp0aGUgc3BlY2lmaWNhdGlvbiBvZiB0aGUgdmFsdWVzIGZvciBvbmx5IG9uZSBvciB0d28gYXR0cmlidXRlcyBpbiB0aGUKZGVmaW5pdGlvbiBvZiBtb3N0IGluc24gcGF0dGVybnMsIGFzIHNlZW4gaW4gdGhlIGV4YW1wbGUgaW4gdGhlIG5leHQKc2VjdGlvbi4KCiBUaGUgb3B0aW9uYWwgbGFzdCBhcmd1bWVudCBvZiAnZGVmaW5lX2luc24nIGFuZCAnZGVmaW5lX3BlZXBob2xlJyBpcyBhCnZlY3RvciBvZiBleHByZXNzaW9ucywgZWFjaCBvZiB3aGljaCBkZWZpbmVzIHRoZSB2YWx1ZSBmb3IgYSBzaW5nbGUKYXR0cmlidXRlLiAgVGhlIG1vc3QgZ2VuZXJhbCB3YXkgb2YgYXNzaWduaW5nIGFuIGF0dHJpYnV0ZSdzIHZhbHVlIGlzIHRvCnVzZSBhICdzZXQnIGV4cHJlc3Npb24gd2hvc2UgZmlyc3Qgb3BlcmFuZCBpcyBhbiAnYXR0cicgZXhwcmVzc2lvbgpnaXZpbmcgdGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZSBiZWluZyBzZXQuICBUaGUgc2Vjb25kIG9wZXJhbmQgb2YgdGhlCidzZXQnIGlzIGFuIGF0dHJpYnV0ZSBleHByZXNzaW9uICgqbm90ZSBFeHByZXNzaW9uczo6KSBnaXZpbmcgdGhlIHZhbHVlCm9mIHRoZSBhdHRyaWJ1dGUuCgogV2hlbiB0aGUgYXR0cmlidXRlIHZhbHVlIGRlcGVuZHMgb24gdGhlICdhbHRlcm5hdGl2ZScgYXR0cmlidXRlIChpLmUuLAp3aGljaCBpcyB0aGUgYXBwbGljYWJsZSBhbHRlcm5hdGl2ZSBpbiB0aGUgY29uc3RyYWludCBvZiB0aGUgaW5zbiksIHRoZQonc2V0X2F0dHJfYWx0ZXJuYXRpdmUnIGV4cHJlc3Npb24gY2FuIGJlIHVzZWQuICBJdCBhbGxvd3MgdGhlCnNwZWNpZmljYXRpb24gb2YgYSB2ZWN0b3Igb2YgYXR0cmlidXRlIGV4cHJlc3Npb25zLCBvbmUgZm9yIGVhY2gKYWx0ZXJuYXRpdmUuCgogV2hlbiB0aGUgZ2VuZXJhbGl0eSBvZiBhcmJpdHJhcnkgYXR0cmlidXRlIGV4cHJlc3Npb25zIGlzIG5vdCByZXF1aXJlZCwKdGhlIHNpbXBsZXIgJ3NldF9hdHRyJyBleHByZXNzaW9uIGNhbiBiZSB1c2VkLCB3aGljaCBhbGxvd3Mgc3BlY2lmeWluZyBhCnN0cmluZyBnaXZpbmcgZWl0aGVyIGEgc2luZ2xlIGF0dHJpYnV0ZSB2YWx1ZSBvciBhIGxpc3Qgb2YgYXR0cmlidXRlCnZhbHVlcywgb25lIGZvciBlYWNoIGFsdGVybmF0aXZlLgoKIFRoZSBmb3JtIG9mIGVhY2ggb2YgdGhlIGFib3ZlIHNwZWNpZmljYXRpb25zIGlzIHNob3duIGJlbG93LiAgSW4gZWFjaApjYXNlLCBOQU1FIGlzIGEgc3RyaW5nIHNwZWNpZnlpbmcgdGhlIGF0dHJpYnV0ZSB0byBiZSBzZXQuCgonKHNldF9hdHRyIE5BTUUgVkFMVUUtU1RSSU5HKScKICAgICBWQUxVRS1TVFJJTkcgaXMgZWl0aGVyIGEgc3RyaW5nIGdpdmluZyB0aGUgZGVzaXJlZCBhdHRyaWJ1dGUgdmFsdWUsCiAgICAgb3IgYSBzdHJpbmcgY29udGFpbmluZyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IGdpdmluZyB0aGUgdmFsdWVzIGZvcgogICAgIHN1Y2NlZWRpbmcgYWx0ZXJuYXRpdmVzLiAgVGhlIG51bWJlciBvZiBlbGVtZW50cyBtdXN0IG1hdGNoIHRoZQogICAgIG51bWJlciBvZiBhbHRlcm5hdGl2ZXMgaW4gdGhlIGNvbnN0cmFpbnQgb2YgdGhlIGluc24gcGF0dGVybi4KCiAgICAgTm90ZSB0aGF0IGl0IG1heSBiZSB1c2VmdWwgdG8gc3BlY2lmeSAnKicgZm9yIHNvbWUgYWx0ZXJuYXRpdmUsIGluCiAgICAgd2hpY2ggY2FzZSB0aGUgYXR0cmlidXRlIHdpbGwgYXNzdW1lIGl0cyBkZWZhdWx0IHZhbHVlIGZvciBpbnNucwogICAgIG1hdGNoaW5nIHRoYXQgYWx0ZXJuYXRpdmUuCgonKHNldF9hdHRyX2FsdGVybmF0aXZlIE5BTUUgW1ZBTFVFMSBWQUxVRTIgLi4uXSknCiAgICAgRGVwZW5kaW5nIG9uIHRoZSBhbHRlcm5hdGl2ZSBvZiB0aGUgaW5zbiwgdGhlIHZhbHVlIHdpbGwgYmUgb25lIG9mCiAgICAgdGhlIHNwZWNpZmllZCB2YWx1ZXMuICBUaGlzIGlzIGEgc2hvcnRoYW5kIGZvciB1c2luZyBhICdjb25kJyB3aXRoCiAgICAgdGVzdHMgb24gdGhlICdhbHRlcm5hdGl2ZScgYXR0cmlidXRlLgoKJyhzZXQgKGF0dHIgTkFNRSkgVkFMVUUpJwogICAgIFRoZSBmaXJzdCBvcGVyYW5kIG9mIHRoaXMgJ3NldCcgbXVzdCBiZSB0aGUgc3BlY2lhbCBSVEwgZXhwcmVzc2lvbgogICAgICdhdHRyJywgd2hvc2Ugc29sZSBvcGVyYW5kIGlzIGEgc3RyaW5nIGdpdmluZyB0aGUgbmFtZSBvZiB0aGUKICAgICBhdHRyaWJ1dGUgYmVpbmcgc2V0LiAgVkFMVUUgaXMgdGhlIHZhbHVlIG9mIHRoZSBhdHRyaWJ1dGUuCgogVGhlIGZvbGxvd2luZyBzaG93cyB0aHJlZSBkaWZmZXJlbnQgd2F5cyBvZiByZXByZXNlbnRpbmcgdGhlIHNhbWUKYXR0cmlidXRlIHZhbHVlIHNwZWNpZmljYXRpb246CgogICAgIChzZXRfYXR0ciAidHlwZSIgImxvYWQsc3RvcmUsYXJpdGgiKQoKICAgICAoc2V0X2F0dHJfYWx0ZXJuYXRpdmUgInR5cGUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFsoY29uc3Rfc3RyaW5nICJsb2FkIikgKGNvbnN0X3N0cmluZyAic3RvcmUiKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0X3N0cmluZyAiYXJpdGgiKV0pCgogICAgIChzZXQgKGF0dHIgInR5cGUiKQogICAgICAgICAgKGNvbmQgWyhlcV9hdHRyICJhbHRlcm5hdGl2ZSIgIjEiKSAoY29uc3Rfc3RyaW5nICJsb2FkIikKICAgICAgICAgICAgICAgICAoZXFfYXR0ciAiYWx0ZXJuYXRpdmUiICIyIikgKGNvbnN0X3N0cmluZyAic3RvcmUiKV0KICAgICAgICAgICAgICAgIChjb25zdF9zdHJpbmcgImFyaXRoIikpKQoKIFRoZSAnZGVmaW5lX2FzbV9hdHRyaWJ1dGVzJyBleHByZXNzaW9uIHByb3ZpZGVzIGEgbWVjaGFuaXNtIHRvIHNwZWNpZnkKdGhlIGF0dHJpYnV0ZXMgYXNzaWduZWQgdG8gaW5zbnMgcHJvZHVjZWQgZnJvbSBhbiAnYXNtJyBzdGF0ZW1lbnQuICBJdApoYXMgdGhlIGZvcm06CgogICAgIChkZWZpbmVfYXNtX2F0dHJpYnV0ZXMgW0FUVFItU0VUU10pCgp3aGVyZSBBVFRSLVNFVFMgaXMgc3BlY2lmaWVkIHRoZSBzYW1lIGFzIGZvciBib3RoIHRoZSAnZGVmaW5lX2luc24nIGFuZAp0aGUgJ2RlZmluZV9wZWVwaG9sZScgZXhwcmVzc2lvbnMuCgogVGhlc2UgdmFsdWVzIHdpbGwgdHlwaWNhbGx5IGJlIHRoZSAid29yc3QgY2FzZSIgYXR0cmlidXRlIHZhbHVlcy4gIEZvcgpleGFtcGxlLCB0aGV5IG1pZ2h0IGluZGljYXRlIHRoYXQgdGhlIGNvbmRpdGlvbiBjb2RlIHdpbGwgYmUgY2xvYmJlcmVkLgoKIEEgc3BlY2lmaWNhdGlvbiBmb3IgYSAnbGVuZ3RoJyBhdHRyaWJ1dGUgaXMgaGFuZGxlZCBzcGVjaWFsbHkuICBUaGUgd2F5CnRvIGNvbXB1dGUgdGhlIGxlbmd0aCBvZiBhbiAnYXNtJyBpbnNuIGlzIHRvIG11bHRpcGx5IHRoZSBsZW5ndGgKc3BlY2lmaWVkIGluIHRoZSBleHByZXNzaW9uICdkZWZpbmVfYXNtX2F0dHJpYnV0ZXMnIGJ5IHRoZSBudW1iZXIgb2YKbWFjaGluZSBpbnN0cnVjdGlvbnMgc3BlY2lmaWVkIGluIHRoZSAnYXNtJyBzdGF0ZW1lbnQsIGRldGVybWluZWQgYnkKY291bnRpbmcgdGhlIG51bWJlciBvZiBzZW1pY29sb25zIGFuZCBuZXdsaW5lcyBpbiB0aGUgc3RyaW5nLgpUaGVyZWZvcmUsIHRoZSB2YWx1ZSBvZiB0aGUgJ2xlbmd0aCcgYXR0cmlidXRlIHNwZWNpZmllZCBpbiBhCidkZWZpbmVfYXNtX2F0dHJpYnV0ZXMnIHNob3VsZCBiZSB0aGUgbWF4aW11bSBwb3NzaWJsZSBsZW5ndGggb2YgYQpzaW5nbGUgbWFjaGluZSBpbnN0cnVjdGlvbi4KCh8KRmlsZTogZ2NjaW50LmluZm8sICBOb2RlOiBBdHRyIEV4YW1wbGUsICBOZXh0OiBJbnNuIExlbmd0aHMsICBQcmV2OiBUYWdnaW5nIEluc25zLCAgVXA6IEluc24gQXR0cmlidXRlcwoKMTQuMTkuNCBFeGFtcGxlIG9mIEF0dHJpYnV0ZSBTcGVjaWZpY2F0aW9ucwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpUaGUganVkaWNpb3VzIHVzZSBvZiBkZWZhdWx0aW5nIGlzIGltcG9ydGFudCBpbiB0aGUgZWZmaWNpZW50IHVzZSBvZgppbnNuIGF0dHJpYnV0ZXMuICBUeXBpY2FsbHksIGluc25zIGFyZSBkaXZpZGVkIGludG8gInR5cGVzIiBhbmQgYW4KYXR0cmlidXRlLCBjdXN0b21hcmlseSBjYWxsZWQgJ3R5cGUnLCBpcyB1c2VkIHRvIHJlcHJlc2VudCB0aGlzIHZhbHVlLgpUaGlzIGF0dHJpYnV0ZSBpcyBub3JtYWxseSB1c2VkIG9ubHkgdG8gZGVmaW5lIHRoZSBkZWZhdWx0IHZhbHVlIGZvcgpvdGhlciBhdHRyaWJ1dGVzLiAgQW4gZXhhbXBsZSB3aWxsIGNsYXJpZnkgdGhpcyB1c2FnZS4KCiBBc3N1bWUgd2UgaGF2ZSBhIFJJU0MgbWFjaGluZSB3aXRoIGEgY29uZGl0aW9uIGNvZGUgYW5kIGluIHdoaWNoIG9ubHkKZnVsbC13b3JkIG9wZXJhdGlvbnMgYXJlIHBlcmZvcm1lZCBpbiByZWdpc3RlcnMuICBMZXQgdXMgYXNzdW1lIHRoYXQgd2UKY2FuIGRpdmlkZSBhbGwgaW5zbnMgaW50byBsb2Fkcywgc3RvcmVzLCAoaW50ZWdlcikgYXJpdGhtZXRpYwpvcGVyYXRpb25zLCBmbG9hdGluZyBwb2ludCBvcGVyYXRpb25zLCBhbmQgYnJhbmNoZXMuCgogSGVyZSB3ZSB3aWxsIGNvbmNlcm4gb3Vyc2VsdmVzIHdpdGggZGV0ZXJtaW5pbmcgdGhlIGVmZmVjdCBvZiBhbiBpbnNuCm9uIHRoZSBjb25kaXRpb24gY29kZSBhbmQgd2lsbCBsaW1pdCBvdXJzZWx2ZXMgdG8gdGhlIGZvbGxvd2luZyBwb3NzaWJsZQplZmZlY3RzOiBUaGUgY29uZGl0aW9uIGNvZGUgY2FuIGJlIHNldCB1bnByZWRpY3RhYmx5IChjbG9iYmVyZWQpLCBub3QgYmUKY2hhbmdlZCwgYmUgc2V0IHRvIGFncmVlIHdpdGggdGhlIHJlc3VsdHMgb2YgdGhlIG9wZXJhdGlvbiwgb3Igb25seQpjaGFuZ2VkIGlmIHRoZSBpdGVtIHByZXZpb3VzbHkgc2V0IGludG8gdGhlIGNvbmRpdGlvbiBjb2RlIGhhcyBiZWVuCm1vZGlmaWVkLgoKIEhlcmUgaXMgcGFydCBvZiBhIHNhbXBsZSAnbWQnIGZpbGUgZm9yIHN1Y2ggYSBtYWNoaW5lOgoKICAgICAoZGVmaW5lX2F0dHIgInR5cGUiICJsb2FkLHN0b3JlLGFyaXRoLGZwLGJyYW5jaCIgKGNvbnN0X3N0cmluZyAiYXJpdGgiKSkKCiAgICAgKGRlZmluZV9hdHRyICJjYyIgImNsb2JiZXIsdW5jaGFuZ2VkLHNldCxjaGFuZ2UwIgogICAgICAgICAgICAgICAgICAoY29uZCBbKGVxX2F0dHIgInR5cGUiICJsb2FkIikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Rfc3RyaW5nICJjaGFuZ2UwIikKICAgICAgICAgICAgICAgICAgICAgICAgIChlcV9hdHRyICJ0eXBlIiAic3RvcmUsYnJhbmNoIikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Rfc3RyaW5nICJ1bmNoYW5nZWQiKQogICAgICAgICAgICAgICAgICAgICAgICAgKGVxX2F0dHIgInR5cGUiICJhcml0aCIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlmX3RoZW5fZWxzZSAobWF0Y2hfb3BlcmFuZDpTSSAwICIiICIiKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0X3N0cmluZyAic2V0IikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdF9zdHJpbmcgImNsb2JiZXIiKSldCiAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdF9zdHJpbmcgImNsb2JiZXIiKSkpCgogICAgIChkZWZpbmVfaW5zbiAiIgogICAgICAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAiZ2VuZXJhbF9vcGVyYW5kIiAiPXIscixtIikKICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOlNJIDEgImdlbmVyYWxfb3BlcmFuZCIgInIsbSxyIikpXQogICAgICAgIiIKICAgICAgICJACiAgICAgICAgbW92ZSAlMCwlMQogICAgICAgIGxvYWQgJTAsJTEKICAgICAgICBzdG9yZSAlMCwlMSIKICAgICAgIFsoc2V0X2F0dHIgInR5cGUiICJhcml0aCxsb2FkLHN0b3JlIildKQoKIE5vdGUgdGhhdCB3ZSBhc3N1bWUgaW4gdGhlIGFib3ZlIGV4YW1wbGUgdGhhdCBhcml0aG1ldGljIG9wZXJhdGlvbnMKcGVyZm9ybWVkIG9uIHF1YW50aXRpZXMgc21hbGxlciB0aGFuIGEgbWFjaGluZSB3b3JkIGNsb2JiZXIgdGhlCmNvbmRpdGlvbiBjb2RlIHNpbmNlIHRoZXkgd2lsbCBzZXQgdGhlIGNvbmRpdGlvbiBjb2RlIHRvIGEgdmFsdWUKY29ycmVzcG9uZGluZyB0byB0aGUgZnVsbC13b3JkIHJlc3VsdC4KCh8KRmlsZTogZ2NjaW50LmluZm8sICBOb2RlOiBJbnNuIExlbmd0aHMsICBOZXh0OiBDb25zdGFudCBBdHRyaWJ1dGVzLCAgUHJldjogQXR0ciBFeGFtcGxlLCAgVXA6IEluc24gQXR0cmlidXRlcwoKMTQuMTkuNSBDb21wdXRpbmcgdGhlIExlbmd0aCBvZiBhbiBJbnNuCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKRm9yIG1hbnkgbWFjaGluZXMsIG11bHRpcGxlIHR5cGVzIG9mIGJyYW5jaCBpbnN0cnVjdGlvbnMgYXJlIHByb3ZpZGVkLAplYWNoIGZvciBkaWZmZXJlbnQgbGVuZ3RoIGJyYW5jaCBkaXNwbGFjZW1lbnRzLiAgSW4gbW9zdCBjYXNlcywgdGhlCmFzc2VtYmxlciB3aWxsIGNob29zZSB0aGUgY29ycmVjdCBpbnN0cnVjdGlvbiB0byB1c2UuICBIb3dldmVyLCB3aGVuIHRoZQphc3NlbWJsZXIgY2Fubm90IGRvIHNvLCBHQ0MgY2FuIHdoZW4gYSBzcGVjaWFsIGF0dHJpYnV0ZSwgdGhlICdsZW5ndGgnCmF0dHJpYnV0ZSwgaXMgZGVmaW5lZC4gIFRoaXMgYXR0cmlidXRlIG11c3QgYmUgZGVmaW5lZCB0byBoYXZlIG51bWVyaWMKdmFsdWVzIGJ5IHNwZWNpZnlpbmcgYSBudWxsIHN0cmluZyBpbiBpdHMgJ2RlZmluZV9hdHRyJy4KCiBJbiB0aGUgY2FzZSBvZiB0aGUgJ2xlbmd0aCcgYXR0cmlidXRlLCB0d28gYWRkaXRpb25hbCBmb3JtcyBvZgphcml0aG1ldGljIHRlcm1zIGFyZSBhbGxvd2VkIGluIHRlc3QgZXhwcmVzc2lvbnM6CgonKG1hdGNoX2R1cCBOKScKICAgICBUaGlzIHJlZmVycyB0byB0aGUgYWRkcmVzcyBvZiBvcGVyYW5kIE4gb2YgdGhlIGN1cnJlbnQgaW5zbiwgd2hpY2gKICAgICBtdXN0IGJlIGEgJ2xhYmVsX3JlZicuCgonKHBjKScKICAgICBUaGlzIHJlZmVycyB0byB0aGUgYWRkcmVzcyBvZiB0aGUgX2N1cnJlbnRfIGluc24uICBJdCBtaWdodCBoYXZlCiAgICAgYmVlbiBtb3JlIGNvbnNpc3RlbnQgd2l0aCBvdGhlciB1c2FnZSB0byBtYWtlIHRoaXMgdGhlIGFkZHJlc3Mgb2YKICAgICB0aGUgX25leHRfIGluc24gYnV0IHRoaXMgd291bGQgYmUgY29uZnVzaW5nIGJlY2F1c2UgdGhlIGxlbmd0aCBvZgogICAgIHRoZSBjdXJyZW50IGluc24gaXMgdG8gYmUgY29tcHV0ZWQuCgogRm9yIG5vcm1hbCBpbnNucywgdGhlIGxlbmd0aCB3aWxsIGJlIGRldGVybWluZWQgYnkgdmFsdWUgb2YgdGhlCidsZW5ndGgnIGF0dHJpYnV0ZS4gIEluIHRoZSBjYXNlIG9mICdhZGRyX3ZlYycgYW5kICdhZGRyX2RpZmZfdmVjJyBpbnNuCnBhdHRlcm5zLCB0aGUgbGVuZ3RoIGlzIGNvbXB1dGVkIGFzIHRoZSBudW1iZXIgb2YgdmVjdG9ycyBtdWx0aXBsaWVkIGJ5CnRoZSBzaXplIG9mIGVhY2ggdmVjdG9yLgoKIExlbmd0aHMgYXJlIG1lYXN1cmVkIGluIGFkZHJlc3NhYmxlIHN0b3JhZ2UgdW5pdHMgKGJ5dGVzKS4KCiBUaGUgZm9sbG93aW5nIG1hY3JvcyBjYW4gYmUgdXNlZCB0byByZWZpbmUgdGhlIGxlbmd0aCBjb21wdXRhdGlvbjoKCidBREpVU1RfSU5TTl9MRU5HVEggKElOU04sIExFTkdUSCknCiAgICAgSWYgZGVmaW5lZCwgbW9kaWZpZXMgdGhlIGxlbmd0aCBhc3NpZ25lZCB0byBpbnN0cnVjdGlvbiBJTlNOIGFzIGEKICAgICBmdW5jdGlvbiBvZiB0aGUgY29udGV4dCBpbiB3aGljaCBpdCBpcyB1c2VkLiAgTEVOR1RIIGlzIGFuIGx2YWx1ZQogICAgIHRoYXQgY29udGFpbnMgdGhlIGluaXRpYWxseSBjb21wdXRlZCBsZW5ndGggb2YgdGhlIGluc24gYW5kIHNob3VsZAogICAgIGJlIHVwZGF0ZWQgd2l0aCB0aGUgY29ycmVjdCBsZW5ndGggb2YgdGhlIGluc24uCgogICAgIFRoaXMgbWFjcm8gd2lsbCBub3JtYWxseSBub3QgYmUgcmVxdWlyZWQuICBBIGNhc2UgaW4gd2hpY2ggaXQgaXMKICAgICByZXF1aXJlZCBpcyB0aGUgUk9NUC4gIE9uIHRoaXMgbWFjaGluZSwgdGhlIHNpemUgb2YgYW4gJ2FkZHJfdmVjJwogICAgIGluc24gbXVzdCBiZSBpbmNyZWFzZWQgYnkgdHdvIHRvIGNvbXBlbnNhdGUgZm9yIHRoZSBmYWN0IHRoYXQKICAgICBhbGlnbm1lbnQgbWF5IGJlIHJlcXVpcmVkLgoKIFRoZSByb3V0aW5lIHRoYXQgcmV0dXJucyAnZ2V0X2F0dHJfbGVuZ3RoJyAodGhlIHZhbHVlIG9mIHRoZSAnbGVuZ3RoJwphdHRyaWJ1dGUpIGNhbiBiZSB1c2VkIGJ5IHRoZSBvdXRwdXQgcm91dGluZSB0byBkZXRlcm1pbmUgdGhlIGZvcm0gb2YKdGhlIGJyYW5jaCBpbnN0cnVjdGlvbiB0byBiZSB3cml0dGVuLCBhcyB0aGUgZXhhbXBsZSBiZWxvdyBpbGx1c3RyYXRlcy4KCiBBcyBhbiBleGFtcGxlIG9mIHRoZSBzcGVjaWZpY2F0aW9uIG9mIHZhcmlhYmxlLWxlbmd0aCBicmFuY2hlcywKY29uc2lkZXIgdGhlIElCTSAzNjAuICBJZiB3ZSBhZG9wdCB0aGUgY29udmVudGlvbiB0aGF0IGEgcmVnaXN0ZXIgd2lsbApiZSBzZXQgdG8gdGhlIHN0YXJ0aW5nIGFkZHJlc3Mgb2YgYSBmdW5jdGlvbiwgd2UgY2FuIGp1bXAgdG8gbGFiZWxzCndpdGhpbiA0ayBvZiB0aGUgc3RhcnQgdXNpbmcgYSBmb3VyLWJ5dGUgaW5zdHJ1Y3Rpb24uICBPdGhlcndpc2UsIHdlCm5lZWQgYSBzaXgtYnl0ZSBzZXF1ZW5jZSB0byBsb2FkIHRoZSBhZGRyZXNzIGZyb20gbWVtb3J5IGFuZCB0aGVuIGJyYW5jaAp0byBpdC4KCiBPbiBzdWNoIGEgbWFjaGluZSwgYSBwYXR0ZXJuIGZvciBhIGJyYW5jaCBpbnN0cnVjdGlvbiBtaWdodCBiZQpzcGVjaWZpZWQgYXMgZm9sbG93czoKCiAgICAgKGRlZmluZV9pbnNuICJqdW1wIgogICAgICAgWyhzZXQgKHBjKQogICAgICAgICAgICAgKGxhYmVsX3JlZiAobWF0Y2hfb3BlcmFuZCAwICIiICIiKSkpXQogICAgICAgIiIKICAgICB7CiAgICAgICAgcmV0dXJuIChnZXRfYXR0cl9sZW5ndGggKGluc24pID09IDQKICAgICAgICAgICAgICAgID8gImIgJWwwIiA6ICJsIHIxNSw9YSglbDApOyBiciByMTUiKTsKICAgICB9CiAgICAgICBbKHNldCAoYXR0ciAibGVuZ3RoIikKICAgICAgICAgICAgIChpZl90aGVuX2Vsc2UgKGx0IChtYXRjaF9kdXAgMCkgKGNvbnN0X2ludCA0MDk2KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0X2ludCA0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3RfaW50IDYpKSldKQoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IENvbnN0YW50IEF0dHJpYnV0ZXMsICBOZXh0OiBEZWxheSBTbG90cywgIFByZXY6IEluc24gTGVuZ3RocywgIFVwOiBJbnNuIEF0dHJpYnV0ZXMKCjE0LjE5LjYgQ29uc3RhbnQgQXR0cmlidXRlcwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCkEgc3BlY2lhbCBmb3JtIG9mICdkZWZpbmVfYXR0cicsIHdoZXJlIHRoZSBleHByZXNzaW9uIGZvciB0aGUgZGVmYXVsdAp2YWx1ZSBpcyBhICdjb25zdCcgZXhwcmVzc2lvbiwgaW5kaWNhdGVzIGFuIGF0dHJpYnV0ZSB0aGF0IGlzIGNvbnN0YW50CmZvciBhIGdpdmVuIHJ1biBvZiB0aGUgY29tcGlsZXIuICBDb25zdGFudCBhdHRyaWJ1dGVzIG1heSBiZSB1c2VkIHRvCnNwZWNpZnkgd2hpY2ggdmFyaWV0eSBvZiBwcm9jZXNzb3IgaXMgdXNlZC4gIEZvciBleGFtcGxlLAoKICAgICAoZGVmaW5lX2F0dHIgImNwdSIgIm04ODEwMCxtODgxMTAsbTg4MDAwIgogICAgICAoY29uc3QKICAgICAgIChjb25kIFsoc3ltYm9sX3JlZiAiVEFSR0VUXzg4MTAwIikgKGNvbnN0X3N0cmluZyAibTg4MTAwIikKICAgICAgICAgICAgICAoc3ltYm9sX3JlZiAiVEFSR0VUXzg4MTEwIikgKGNvbnN0X3N0cmluZyAibTg4MTEwIildCiAgICAgICAgICAgICAoY29uc3Rfc3RyaW5nICJtODgwMDAiKSkpKQoKICAgICAoZGVmaW5lX2F0dHIgIm1lbW9yeSIgImZhc3Qsc2xvdyIKICAgICAgKGNvbnN0CiAgICAgICAoaWZfdGhlbl9lbHNlIChzeW1ib2xfcmVmICJUQVJHRVRfRkFTVF9NRU0iKQogICAgICAgICAgICAgICAgICAgICAoY29uc3Rfc3RyaW5nICJmYXN0IikKICAgICAgICAgICAgICAgICAgICAgKGNvbnN0X3N0cmluZyAic2xvdyIpKSkpCgogVGhlIHJvdXRpbmUgZ2VuZXJhdGVkIGZvciBjb25zdGFudCBhdHRyaWJ1dGVzIGhhcyBubyBwYXJhbWV0ZXJzIGFzIGl0CmRvZXMgbm90IGRlcGVuZCBvbiBhbnkgcGFydGljdWxhciBpbnNuLiAgUlRMIGV4cHJlc3Npb25zIHVzZWQgdG8gZGVmaW5lCnRoZSB2YWx1ZSBvZiBhIGNvbnN0YW50IGF0dHJpYnV0ZSBtYXkgdXNlIHRoZSAnc3ltYm9sX3JlZicgZm9ybSwgYnV0IG1heQpub3QgdXNlIGVpdGhlciB0aGUgJ21hdGNoX29wZXJhbmQnIGZvcm0gb3IgJ2VxX2F0dHInIGZvcm1zIGludm9sdmluZwppbnNuIGF0dHJpYnV0ZXMuCgofCkZpbGU6IGdjY2ludC5pbmZvLCAgTm9kZTogRGVsYXkgU2xvdHMsICBOZXh0OiBQcm9jZXNzb3IgcGlwZWxpbmUgZGVzY3JpcHRpb24sICBQcmV2OiBDb25zdGFudCBBdHRyaWJ1dGVzLCAgVXA6IEluc24gQXR0cmlidXRlcwoKMTQuMTkuNyBEZWxheSBTbG90IFNjaGVkdWxpbmcKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KClRoZSBpbnNuIGF0dHJpYnV0ZSBtZWNoYW5pc20gY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgcmVxdWlyZW1lbnRzIGZvcgpkZWxheSBzbG90cywgaWYgYW55LCBvbiBhIHRhcmdldCBtYWNoaW5lLiAgQW4gaW5zdHJ1Y3Rpb24gaXMgc2FpZCB0bwpyZXF1aXJlIGEgImRlbGF5IHNsb3QiIGlmIHNvbWUgaW5zdHJ1Y3Rpb25zIHRoYXQgYXJlIHBoeXNpY2FsbHkgYWZ0ZXIKdGhlIGluc3RydWN0aW9uIGFyZSBleGVjdXRlZCBhcyBpZiB0aGV5IHdlcmUgbG9jYXRlZCBiZWZvcmUgaXQuICBDbGFzc2ljCmV4YW1wbGVzIGFyZSBicmFuY2ggYW5kIGNhbGwgaW5zdHJ1Y3Rpb25zLCB3aGljaCBvZnRlbiBleGVjdXRlIHRoZQpmb2xsb3dpbmcgaW5zdHJ1Y3Rpb24gYmVmb3JlIHRoZSBicmFuY2ggb3IgY2FsbCBpcyBwZXJmb3JtZWQuCgogT24gc29tZSBtYWNoaW5lcywgY29uZGl0aW9uYWwgYnJhbmNoIGluc3RydWN0aW9ucyBjYW4gb3B0aW9uYWxseQoiYW5udWwiIGluc3RydWN0aW9ucyBpbiB0aGUgZGVsYXkgc2xvdC4gIFRoaXMgbWVhbnMgdGhhdCB0aGUgaW5zdHJ1Y3Rpb24Kd2lsbCBub3QgYmUgZXhlY3V0ZWQgZm9yIGNlcnRhaW4gYnJhbmNoIG91dGNvbWVzLiAgQm90aCBpbnN0cnVjdGlvbnMKdGhhdCBhbm51bCBpZiB0aGUgYnJhbmNoIGlzIHRydWUgYW5kIGluc3RydWN0aW9ucyB0aGF0IGFubnVsIGlmIHRoZQpicmFuY2ggaXMgZmFsc2UgYXJlIHN1cHBvcnRlZC4KCiBEZWxheSBzbG90IHNjaGVkdWxpbmcgZGlmZmVycyBmcm9tIGluc3RydWN0aW9uIHNjaGVkdWxpbmcgaW4gdGhhdApkZXRlcm1pbmluZyB3aGV0aGVyIGFuIGluc3RydWN0aW9uIG5lZWRzIGEgZGVsYXkgc2xvdCBpcyBkZXBlbmRlbnQgb25seQpvbiB0aGUgdHlwZSBvZiBpbnN0cnVjdGlvbiBiZWluZyBnZW5lcmF0ZWQsIG5vdCBvbiBkYXRhIGZsb3cgYmV0d2VlbiB0aGUKaW5zdHJ1Y3Rpb25zLiAgU2VlIHRoZSBuZXh0IHNlY3Rpb24gZm9yIGEgZGlzY3Vzc2lvbiBvZiBkYXRhLWRlcGVuZGVudAppbnN0cnVjdGlvbiBzY2hlZHVsaW5nLgoKIFRoZSByZXF1aXJlbWVudCBvZiBhbiBpbnNuIG5lZWRpbmcgb25lIG9yIG1vcmUgZGVsYXkgc2xvdHMgaXMgaW5kaWNhdGVkCnZpYSB0aGUgJ2RlZmluZV9kZWxheScgZXhwcmVzc2lvbi4gIEl0IGhhcyB0aGUgZm9sbG93aW5nIGZvcm06CgogICAgIChkZWZpbmVfZGVsYXkgVEVTVAogICAgICAgICAgICAgICAgICAgW0RFTEFZLTEgQU5OVUwtVFJVRS0xIEFOTlVMLUZBTFNFLTEKICAgICAgICAgICAgICAgICAgICBERUxBWS0yIEFOTlVMLVRSVUUtMiBBTk5VTC1GQUxTRS0yCiAgICAgICAgICAgICAgICAgICAgLi4uXSkKCiBURVNUIGlzIGFuIGF0dHJpYnV0ZSB0ZXN0IHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgdGhpcyAnZGVmaW5lX2RlbGF5JwphcHBsaWVzIHRvIGEgcGFydGljdWxhciBpbnNuLiAgSWYgc28sIHRoZSBudW1iZXIgb2YgcmVxdWlyZWQgZGVsYXkgc2xvdHMKaXMgZGV0ZXJtaW5lZCBieSB0aGUgbGVuZ3RoIG9mIHRoZSB2ZWN0b3Igc3BlY2lmaWVkIGFzIHRoZSBzZWNvbmQKYXJndW1lbnQuICBBbiBpbnNuIHBsYWNlZCBpbiBkZWxheSBzbG90IE4gbXVzdCBzYXRpc2Z5IGF0dHJpYnV0ZSB0ZXN0CkRFTEFZLU4uICBBTk5VTC1UUlVFLU4gaXMgYW4gYXR0cmlidXRlIHRlc3QgdGhhdCBzcGVjaWZpZXMgd2hpY2ggaW5zbnMKbWF5IGJlIGFubnVsbGVkIGlmIHRoZSBicmFuY2ggaXMgdHJ1ZS4gIFNpbWlsYXJseSwgQU5OVUwtRkFMU0UtTgpzcGVjaWZpZXMgd2hpY2ggaW5zbnMgaW4gdGhlIGRlbGF5IHNsb3QgbWF5IGJlIGFubnVsbGVkIGlmIHRoZSBicmFuY2ggaXMKZmFsc2UuICBJZiBhbm51bGxpbmcgaXMgbm90IHN1cHBvcnRlZCBmb3IgdGhhdCBkZWxheSBzbG90LCAnKG5pbCknCnNob3VsZCBiZSBjb2RlZC4KCiBGb3IgZXhhbXBsZSwgaW4gdGhlIGNvbW1vbiBjYXNlIHdoZXJlIGJyYW5jaCBhbmQgY2FsbCBpbnNucyByZXF1aXJlIGEKc2luZ2xlIGRlbGF5IHNsb3QsIHdoaWNoIG1heSBjb250YWluIGFueSBpbnNuIG90aGVyIHRoYW4gYSBicmFuY2ggb3IKY2FsbCwgdGhlIGZvbGxvd2luZyB3b3VsZCBiZSBwbGFjZWQgaW4gdGhlICdtZCcgZmlsZToKCiAgICAgKGRlZmluZV9kZWxheSAoZXFfYXR0ciAidHlwZSIgImJyYW5jaCxjYWxsIikKICAgICAgICAgICAgICAgICAgIFsoZXFfYXR0ciAidHlwZSIgIiFicmFuY2gsY2FsbCIpIChuaWwpIChuaWwpXSkKCiBNdWx0aXBsZSAnZGVmaW5lX2RlbGF5JyBleHByZXNzaW9ucyBtYXkgYmUgc3BlY2lmaWVkLiAgSW4gdGhpcyBjYXNlLAplYWNoIHN1Y2ggZXhwcmVzc2lvbiBzcGVjaWZpZXMgZGlmZmVyZW50IGRlbGF5IHNsb3QgcmVxdWlyZW1lbnRzIGFuZAp0aGVyZSBtdXN0IGJlIG5vIGluc24gZm9yIHdoaWNoIHRlc3RzIGluIHR3byAnZGVmaW5lX2RlbGF5JyBleHByZXNzaW9ucwphcmUgYm90aCB0cnVlLgoKIEZvciBleGFtcGxlLCBpZiB3ZSBoYXZlIGEgbWFjaGluZSB0aGF0IHJlcXVpcmVzIG9uZSBkZWxheSBzbG90IGZvcgpicmFuY2hlcyBidXQgdHdvIGZvciBjYWxscywgbm8gZGVsYXkgc2xvdCBjYW4gY29udGFpbiBhIGJyYW5jaCBvciBjYWxsCmluc24sIGFuZCBhbnkgdmFsaWQgaW5zbiBpbiB0aGUgZGVsYXkgc2xvdCBmb3IgdGhlIGJyYW5jaCBjYW4gYmUKYW5udWxsZWQgaWYgdGhlIGJyYW5jaCBpcyB0cnVlLCB3ZSBtaWdodCByZXByZXNlbnQgdGhpcyBhcyBmb2xsb3dzOgoKICAgICAoZGVmaW5lX2RlbGF5IChlcV9hdHRyICJ0eXBlIiAiYnJhbmNoIikKICAgICAgICBbKGVxX2F0dHIgInR5cGUiICIhYnJhbmNoLGNhbGwiKQogICAgICAgICAoZXFfYXR0ciAidHlwZSIgIiFicmFuY2gsY2FsbCIpCiAgICAgICAgIChuaWwpXSkKCiAgICAgKGRlZmluZV9kZWxheSAoZXFfYXR0ciAidHlwZSIgImNhbGwiKQogICAgICAgICAgICAgICAgICAgWyhlcV9hdHRyICJ0eXBlIiAiIWJyYW5jaCxjYWxsIikgKG5pbCkgKG5pbCkKICAgICAgICAgICAgICAgICAgICAoZXFfYXR0ciAidHlwZSIgIiFicmFuY2gsY2FsbCIpIChuaWwpIChuaWwpXSkKCh8KRmlsZTogZ2NjaW50LmluZm8sICBOb2RlOiBQcm9jZXNzb3IgcGlwZWxpbmUgZGVzY3JpcHRpb24sICBQcmV2OiBEZWxheSBTbG90cywgIFVwOiBJbnNuIEF0dHJpYnV0ZXMKCjE0LjE5LjggU3BlY2lmeWluZyBwcm9jZXNzb3IgcGlwZWxpbmUgZGVzY3JpcHRpb24KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKVG8gYWNoaWV2ZSBiZXR0ZXIgcGVyZm9ybWFuY2UsIG1vc3QgbW9kZXJuIHByb2Nlc3NvcnMgKHN1cGVyLXBpcGVsaW5lZCwKc3VwZXJzY2FsYXIgUklTQywgYW5kIFZMSVcgcHJvY2Vzc29ycykgaGF2ZSBtYW55ICJmdW5jdGlvbmFsIHVuaXRzIiBvbgp3aGljaCBzZXZlcmFsIGluc3RydWN0aW9ucyBjYW4gYmUgZXhlY3V0ZWQgc2ltdWx0YW5lb3VzbHkuICBBbgppbnN0cnVjdGlvbiBzdGFydHMgZXhlY3V0aW9uIGlmIGl0cyBpc3N1ZSBjb25kaXRpb25zIGFyZSBzYXRpc2ZpZWQuICBJZgpub3QsIHRoZSBpbnN0cnVjdGlvbiBpcyBzdGFsbGVkIHVudGlsIGl0cyBjb25kaXRpb25zIGFyZSBzYXRpc2ZpZWQuClN1Y2ggImludGVybG9jayAocGlwZWxpbmUpIGRlbGF5IiBjYXVzZXMgaW50ZXJydXB0aW9uIG9mIHRoZSBmZXRjaGluZyBvZgpzdWNjZXNzb3IgaW5zdHJ1Y3Rpb25zIChvciBkZW1hbmRzIG5vcCBpbnN0cnVjdGlvbnMsIGUuZy4gZm9yIHNvbWUgTUlQUwpwcm9jZXNzb3JzKS4KCiBUaGVyZSBhcmUgdHdvIG1ham9yIGtpbmRzIG9mIGludGVybG9jayBkZWxheXMgaW4gbW9kZXJuIHByb2Nlc3NvcnMuClRoZSBmaXJzdCBvbmUgaXMgYSBkYXRhIGRlcGVuZGVuY2UgZGVsYXkgZGV0ZXJtaW5pbmcgImluc3RydWN0aW9uCmxhdGVuY3kgdGltZSIuICBUaGUgaW5zdHJ1Y3Rpb24gZXhlY3V0aW9uIGlzIG5vdCBzdGFydGVkIHVudGlsIGFsbApzb3VyY2UgZGF0YSBoYXZlIGJlZW4gZXZhbHVhdGVkIGJ5IHByaW9yIGluc3RydWN0aW9ucyAodGhlcmUgYXJlIG1vcmUKY29tcGxleCBjYXNlcyB3aGVuIHRoZSBpbnN0cnVjdGlvbiBleGVjdXRpb24gc3RhcnRzIGV2ZW4gd2hlbiB0aGUgZGF0YQphcmUgbm90IGF2YWlsYWJsZSBidXQgd2lsbCBiZSByZWFkeSBpbiBnaXZlbiB0aW1lIGFmdGVyIHRoZSBpbnN0cnVjdGlvbgpleGVjdXRpb24gc3RhcnQpLiAgVGFraW5nIHRoZSBkYXRhIGRlcGVuZGVuY2UgZGVsYXlzIGludG8gYWNjb3VudCBpcwpzaW1wbGUuICBUaGUgZGF0YSBkZXBlbmRlbmNlICh0cnVlLCBvdXRwdXQsIGFuZCBhbnRpLWRlcGVuZGVuY2UpIGRlbGF5CmJldHdlZW4gdHdvIGluc3RydWN0aW9ucyBpcyBnaXZlbiBieSBhIGNvbnN0YW50LiAgSW4gbW9zdCBjYXNlcyB0aGlzCmFwcHJvYWNoIGlzIGFkZXF1YXRlLiAgVGhlIHNlY29uZCBraW5kIG9mIGludGVybG9jayBkZWxheXMgaXMgYQpyZXNlcnZhdGlvbiBkZWxheS4gIFRoZSByZXNlcnZhdGlvbiBkZWxheSBtZWFucyB0aGF0IHR3byBpbnN0cnVjdGlvbnMKdW5kZXIgZXhlY3V0aW9uIHdpbGwgYmUgaW4gbmVlZCBvZiBzaGFyZWQgcHJvY2Vzc29ycyByZXNvdXJjZXMsIGkuZS4KYnVzZXMsIGludGVybmFsIHJlZ2lzdGVycywgYW5kL29yIGZ1bmN0aW9uYWwgdW5pdHMsIHdoaWNoIGFyZSByZXNlcnZlZApmb3Igc29tZSB0aW1lLiAgVGFraW5nIHRoaXMga2luZCBvZiBkZWxheSBpbnRvIGFjY291bnQgaXMgY29tcGxleAplc3BlY2lhbGx5IGZvciBtb2Rlcm4gUklTQyBwcm9jZXNzb3JzLgoKIFRoZSB0YXNrIG9mIGV4cGxvaXRpbmcgbW9yZSBwcm9jZXNzb3IgcGFyYWxsZWxpc20gaXMgc29sdmVkIGJ5IGFuCmluc3RydWN0aW9uIHNjaGVkdWxlci4gIEZvciBhIGJldHRlciBzb2x1dGlvbiB0byB0aGlzIHByb2JsZW0sIHRoZQppbnN0cnVjdGlvbiBzY2hlZHVsZXIgaGFzIHRvIGhhdmUgYW4gYWRlcXVhdGUgZGVzY3JpcHRpb24gb2YgdGhlCnByb2Nlc3NvciBwYXJhbGxlbGlzbSAob3IgInBpcGVsaW5lIGRlc2NyaXB0aW9uIikuICBHQ0MgbWFjaGluZQpkZXNjcmlwdGlvbnMgZGVzY3JpYmUgcHJvY2Vzc29yIHBhcmFsbGVsaXNtIGFuZCBmdW5jdGlvbmFsIHVuaXQKcmVzZXJ2YXRpb25zIGZvciBncm91cHMgb2YgaW5zdHJ1Y3Rpb25zIHdpdGggdGhlIGFpZCBvZiAicmVndWxhcgpleHByZXNzaW9ucyIuCgogVGhlIEdDQyBpbnN0cnVjdGlvbiBzY2hlZHVsZXIgdXNlcyBhICJwaXBlbGluZSBoYXphcmQgcmVjb2duaXplciIgdG8KZmlndXJlIG91dCB0aGUgcG9zc2liaWxpdHkgb2YgdGhlIGluc3RydWN0aW9uIGlzc3VlIGJ5IHRoZSBwcm9jZXNzb3Igb24KYSBnaXZlbiBzaW11bGF0ZWQgcHJvY2Vzc29yIGN5Y2xlLiAgVGhlIHBpcGVsaW5lIGhhemFyZCByZWNvZ25pemVyIGlzCmF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdGhlIHByb2Nlc3NvciBwaXBlbGluZSBkZXNjcmlwdGlvbi4gIFRoZQpwaXBlbGluZSBoYXphcmQgcmVjb2duaXplciBnZW5lcmF0ZWQgZnJvbSB0aGUgbWFjaGluZSBkZXNjcmlwdGlvbiBpcwpiYXNlZCBvbiBhIGRldGVybWluaXN0aWMgZmluaXRlIHN0YXRlIGF1dG9tYXRvbiAoREZBKTogdGhlIGluc3RydWN0aW9uCmlzc3VlIGlzIHBvc3NpYmxlIGlmIHRoZXJlIGlzIGEgdHJhbnNpdGlvbiBmcm9tIG9uZSBhdXRvbWF0b24gc3RhdGUgdG8KYW5vdGhlciBvbmUuICBUaGlzIGFsZ29yaXRobSBpcyB2ZXJ5IGZhc3QsIGFuZCBmdXJ0aGVybW9yZSwgaXRzIHNwZWVkIGlzCm5vdCBkZXBlbmRlbnQgb24gcHJvY2Vzc29yIGNvbXBsZXhpdHkoMSkuCgogVGhlIHJlc3Qgb2YgdGhpcyBzZWN0aW9uIGRlc2NyaWJlcyB0aGUgZGlyZWN0aXZlcyB0aGF0IGNvbnN0aXR1dGUgYW4KYXV0b21hdG9uLWJhc2VkIHByb2Nlc3NvciBwaXBlbGluZSBkZXNjcmlwdGlvbi4gIFRoZSBvcmRlciBvZiB0aGVzZQpjb25zdHJ1Y3Rpb25zIHdpdGhpbiB0aGUgbWFjaGluZSBkZXNjcmlwdGlvbiBmaWxlIGlzIG5vdCBpbXBvcnRhbnQuCgogVGhlIGZvbGxvd2luZyBvcHRpb25hbCBjb25zdHJ1Y3Rpb24gZGVzY3JpYmVzIG5hbWVzIG9mIGF1dG9tYXRhCmdlbmVyYXRlZCBhbmQgdXNlZCBmb3IgdGhlIHBpcGVsaW5lIGhhemFyZHMgcmVjb2duaXRpb24uICBTb21ldGltZXMgdGhlCmdlbmVyYXRlZCBmaW5pdGUgc3RhdGUgYXV0b21hdG9uIHVzZWQgYnkgdGhlIHBpcGVsaW5lIGhhemFyZCByZWNvZ25pemVyCmlzIGxhcmdlLiAgSWYgd2UgdXNlIG1vcmUgdGhhbiBvbmUgYXV0b21hdG9uIGFuZCBiaW5kIGZ1bmN0aW9uYWwgdW5pdHMKdG8gdGhlIGF1dG9tYXRhLCB0aGUgdG90YWwgc2l6ZSBvZiB0aGUgYXV0b21hdGEgaXMgdXN1YWxseSBsZXNzIHRoYW4gdGhlCnNpemUgb2YgdGhlIHNpbmdsZSBhdXRvbWF0b24uICBJZiB0aGVyZSBpcyBubyBvbmUgc3VjaCBjb25zdHJ1Y3Rpb24sCm9ubHkgb25lIGZpbml0ZSBzdGF0ZSBhdXRvbWF0b24gaXMgZ2VuZXJhdGVkLgoKICAgICAoZGVmaW5lX2F1dG9tYXRvbiBBVVRPTUFUQS1OQU1FUykKCiBBVVRPTUFUQS1OQU1FUyBpcyBhIHN0cmluZyBnaXZpbmcgbmFtZXMgb2YgdGhlIGF1dG9tYXRhLiAgVGhlIG5hbWVzIGFyZQpzZXBhcmF0ZWQgYnkgY29tbWFzLiAgQWxsIHRoZSBhdXRvbWF0YSBzaG91bGQgaGF2ZSB1bmlxdWUgbmFtZXMuICBUaGUKYXV0b21hdG9uIG5hbWUgaXMgdXNlZCBpbiB0aGUgY29uc3RydWN0aW9ucyAnZGVmaW5lX2NwdV91bml0JyBhbmQKJ2RlZmluZV9xdWVyeV9jcHVfdW5pdCcuCgogRWFjaCBwcm9jZXNzb3IgZnVuY3Rpb25hbCB1bml0IHVzZWQgaW4gdGhlIGRlc2NyaXB0aW9uIG9mIGluc3RydWN0aW9uCnJlc2VydmF0aW9ucyBzaG91bGQgYmUgZGVzY3JpYmVkIGJ5IHRoZSBmb2xsb3dpbmcgY29uc3RydWN0aW9uLgoKICAgICAoZGVmaW5lX2NwdV91bml0IFVOSVQtTkFNRVMgW0FVVE9NQVRPTi1OQU1FXSkKCiBVTklULU5BTUVTIGlzIGEgc3RyaW5nIGdpdmluZyB0aGUgbmFtZXMgb2YgdGhlIGZ1bmN0aW9uYWwgdW5pdHMKc2VwYXJhdGVkIGJ5IGNvbW1hcy4gIERvbid0IHVzZSBuYW1lICdub3RoaW5nJywgaXQgaXMgcmVzZXJ2ZWQgZm9yIG90aGVyCmdvYWxzLgoKIEFVVE9NQVRPTi1OQU1FIGlzIGEgc3RyaW5nIGdpdmluZyB0aGUgbmFtZSBvZiB0aGUgYXV0b21hdG9uIHdpdGggd2hpY2gKdGhlIHVuaXQgaXMgYm91bmQuICBUaGUgYXV0b21hdG9uIHNob3VsZCBiZSBkZXNjcmliZWQgaW4gY29uc3RydWN0aW9uCidkZWZpbmVfYXV0b21hdG9uJy4gIFlvdSBzaG91bGQgZ2l2ZSAiYXV0b21hdG9uLW5hbWUiLCBpZiB0aGVyZSBpcyBhCmRlZmluZWQgYXV0b21hdG9uLgoKIFRoZSBhc3NpZ25tZW50IG9mIHVuaXRzIHRvIGF1dG9tYXRhIGFyZSBjb25zdHJhaW5lZCBieSB0aGUgdXNlcyBvZiB0aGUKdW5pdHMgaW4gaW5zbiByZXNlcnZhdGlvbnMuICBUaGUgbW9zdCBpbXBvcnRhbnQgY29uc3RyYWludCBpczogaWYgYSB1bml0CnJlc2VydmF0aW9uIGlzIHByZXNlbnQgb24gYSBwYXJ0aWN1bGFyIGN5Y2xlIG9mIGFuIGFsdGVybmF0aXZlIGZvciBhbgppbnNuIHJlc2VydmF0aW9uLCB0aGVuIHNvbWUgdW5pdCBmcm9tIHRoZSBzYW1lIGF1dG9tYXRvbiBtdXN0IGJlIHByZXNlbnQKb24gdGhlIHNhbWUgY3ljbGUgZm9yIHRoZSBvdGhlciBhbHRlcm5hdGl2ZXMgb2YgdGhlIGluc24gcmVzZXJ2YXRpb24uClRoZSByZXN0IG9mIHRoZSBjb25zdHJhaW50cyBhcmUgbWVudGlvbmVkIGluIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUKc3Vic2VxdWVudCBjb25zdHJ1Y3Rpb25zLgoKIFRoZSBmb2xsb3dpbmcgY29uc3RydWN0aW9uIGRlc2NyaWJlcyBDUFUgZnVuY3Rpb25hbCB1bml0cyBhbmFsb2dvdXNseQp0byAnZGVmaW5lX2NwdV91bml0Jy4gIFRoZSByZXNlcnZhdGlvbiBvZiBzdWNoIHVuaXRzIGNhbiBiZSBxdWVyaWVkIGZvcgphbiBhdXRvbWF0b24gc3RhdGUuICBUaGUgaW5zdHJ1Y3Rpb24gc2NoZWR1bGVyIG5ldmVyIHF1ZXJpZXMgcmVzZXJ2YXRpb24Kb2YgZnVuY3Rpb25hbCB1bml0cyBmb3IgZ2l2ZW4gYXV0b21hdG9uIHN0YXRlLiAgU28gYXMgYSBydWxlLCB5b3UgZG9uJ3QKbmVlZCB0aGlzIGNvbnN0cnVjdGlvbi4gIFRoaXMgY29uc3RydWN0aW9uIGNvdWxkIGJlIHVzZWQgZm9yIGZ1dHVyZSBjb2RlCmdlbmVyYXRpb24gZ29hbHMgKGUuZy4gdG8gZ2VuZXJhdGUgVkxJVyBpbnNuIHRlbXBsYXRlcykuCgogICAgIChkZWZpbmVfcXVlcnlfY3B1X3VuaXQgVU5JVC1OQU1FUyBbQVVUT01BVE9OLU5BTUVdKQoKIFVOSVQtTkFNRVMgaXMgYSBzdHJpbmcgZ2l2aW5nIG5hbWVzIG9mIHRoZSBmdW5jdGlvbmFsIHVuaXRzIHNlcGFyYXRlZApieSBjb21tYXMuCgogQVVUT01BVE9OLU5BTUUgaXMgYSBzdHJpbmcgZ2l2aW5nIHRoZSBuYW1lIG9mIHRoZSBhdXRvbWF0b24gd2l0aCB3aGljaAp0aGUgdW5pdCBpcyBib3VuZC4KCiBUaGUgZm9sbG93aW5nIGNvbnN0cnVjdGlvbiBpcyB0aGUgbWFqb3Igb25lIHRvIGRlc2NyaWJlIHBpcGVsaW5lCmNoYXJhY3RlcmlzdGljcyBvZiBhbiBpbnN0cnVjdGlvbi4KCiAgICAgKGRlZmluZV9pbnNuX3Jlc2VydmF0aW9uIElOU04tTkFNRSBERUZBVUxUX0xBVEVOQ1kKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09ORElUSU9OIFJFR0VYUCkKCiBERUZBVUxUX0xBVEVOQ1kgaXMgYSBudW1iZXIgZ2l2aW5nIGxhdGVuY3kgdGltZSBvZiB0aGUgaW5zdHJ1Y3Rpb24uClRoZXJlIGlzIGFuIGltcG9ydGFudCBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIG9sZCBkZXNjcmlwdGlvbiBhbmQgdGhlCmF1dG9tYXRvbiBiYXNlZCBwaXBlbGluZSBkZXNjcmlwdGlvbi4gIFRoZSBsYXRlbmN5IHRpbWUgaXMgdXNlZCBmb3IgYWxsCmRlcGVuZGVuY2llcyB3aGVuIHdlIHVzZSB0aGUgb2xkIGRlc2NyaXB0aW9uLiAgSW4gdGhlIGF1dG9tYXRvbiBiYXNlZApwaXBlbGluZSBkZXNjcmlwdGlvbiwgdGhlIGdpdmVuIGxhdGVuY3kgdGltZSBpcyBvbmx5IHVzZWQgZm9yIHRydWUKZGVwZW5kZW5jaWVzLiAgVGhlIGNvc3Qgb2YgYW50aS1kZXBlbmRlbmNpZXMgaXMgYWx3YXlzIHplcm8gYW5kIHRoZSBjb3N0Cm9mIG91dHB1dCBkZXBlbmRlbmNpZXMgaXMgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBsYXRlbmN5IHRpbWVzIG9mIHRoZQpwcm9kdWNpbmcgYW5kIGNvbnN1bWluZyBpbnNucyAoaWYgdGhlIGRpZmZlcmVuY2UgaXMgbmVnYXRpdmUsIHRoZSBjb3N0CmlzIGNvbnNpZGVyZWQgdG8gYmUgemVybykuICBZb3UgY2FuIGFsd2F5cyBjaGFuZ2UgdGhlIGRlZmF1bHQgY29zdHMgZm9yCmFueSBkZXNjcmlwdGlvbiBieSB1c2luZyB0aGUgdGFyZ2V0IGhvb2sgJ1RBUkdFVF9TQ0hFRF9BREpVU1RfQ09TVCcKKCpub3RlIFNjaGVkdWxpbmc6OikuCgogSU5TTi1OQU1FIGlzIGEgc3RyaW5nIGdpdmluZyB0aGUgaW50ZXJuYWwgbmFtZSBvZiB0aGUgaW5zbi4gIFRoZQppbnRlcm5hbCBuYW1lcyBhcmUgdXNlZCBpbiBjb25zdHJ1Y3Rpb25zICdkZWZpbmVfYnlwYXNzJyBhbmQgaW4gdGhlCmF1dG9tYXRvbiBkZXNjcmlwdGlvbiBmaWxlIGdlbmVyYXRlZCBmb3IgZGVidWdnaW5nLiAgVGhlIGludGVybmFsIG5hbWUKaGFzIG5vdGhpbmcgaW4gY29tbW9uIHdpdGggdGhlIG5hbWVzIGluICdkZWZpbmVfaW5zbicuICBJdCBpcyBhIGdvb2QKcHJhY3RpY2UgdG8gdXNlIGluc24gY2xhc3NlcyBkZXNjcmliZWQgaW4gdGhlIHByb2Nlc3NvciBtYW51YWwuCgogQ09ORElUSU9OIGRlZmluZXMgd2hhdCBSVEwgaW5zbnMgYXJlIGRlc2NyaWJlZCBieSB0aGlzIGNvbnN0cnVjdGlvbi4KWW91IHNob3VsZCByZW1lbWJlciB0aGF0IHlvdSB3aWxsIGJlIGluIHRyb3VibGUgaWYgQ09ORElUSU9OIGZvciB0d28gb3IKbW9yZSBkaWZmZXJlbnQgJ2RlZmluZV9pbnNuX3Jlc2VydmF0aW9uJyBjb25zdHJ1Y3Rpb25zIGlzIFRSVUUgZm9yIGFuCmluc24uICBJbiB0aGlzIGNhc2Ugd2hhdCByZXNlcnZhdGlvbiB3aWxsIGJlIHVzZWQgZm9yIHRoZSBpbnNuIGlzIG5vdApkZWZpbmVkLiAgU3VjaCBjYXNlcyBhcmUgbm90IGNoZWNrZWQgZHVyaW5nIGdlbmVyYXRpb24gb2YgdGhlIHBpcGVsaW5lCmhhemFyZHMgcmVjb2duaXplciBiZWNhdXNlIGluIGdlbmVyYWwgcmVjb2duaXppbmcgdGhhdCB0d28gY29uZGl0aW9ucwptYXkgaGF2ZSB0aGUgc2FtZSB2YWx1ZSBpcyBxdWl0ZSBkaWZmaWN1bHQgKGVzcGVjaWFsbHkgaWYgdGhlIGNvbmRpdGlvbnMKY29udGFpbiAnc3ltYm9sX3JlZicpLiAgSXQgaXMgYWxzbyBub3QgY2hlY2tlZCBkdXJpbmcgdGhlIHBpcGVsaW5lCmhhemFyZCByZWNvZ25pemVyIHdvcmsgYmVjYXVzZSBpdCB3b3VsZCBzbG93IGRvd24gdGhlIHJlY29nbml6ZXIKY29uc2lkZXJhYmx5LgoKIFJFR0VYUCBpcyBhIHN0cmluZyBkZXNjcmliaW5nIHRoZSByZXNlcnZhdGlvbiBvZiB0aGUgY3B1J3MgZnVuY3Rpb25hbAp1bml0cyBieSB0aGUgaW5zdHJ1Y3Rpb24uICBUaGUgcmVzZXJ2YXRpb25zIGFyZSBkZXNjcmliZWQgYnkgYSByZWd1bGFyCmV4cHJlc3Npb24gYWNjb3JkaW5nIHRvIHRoZSBmb2xsb3dpbmcgc3ludGF4OgoKICAgICAgICAgICAgcmVnZXhwID0gcmVnZXhwICIsIiBvbmVvZgogICAgICAgICAgICAgICAgICAgfCBvbmVvZgoKICAgICAgICAgICAgb25lb2YgPSBvbmVvZiAifCIgYWxsb2YKICAgICAgICAgICAgICAgICAgfCBhbGxvZgoKICAgICAgICAgICAgYWxsb2YgPSBhbGxvZiAiKyIgcmVwZWF0CiAgICAgICAgICAgICAgICAgIHwgcmVwZWF0CgogICAgICAgICAgICByZXBlYXQgPSBlbGVtZW50ICIqIiBudW1iZXIKICAgICAgICAgICAgICAgICAgIHwgZWxlbWVudAoKICAgICAgICAgICAgZWxlbWVudCA9IGNwdV9mdW5jdGlvbl91bml0X25hbWUKICAgICAgICAgICAgICAgICAgICB8IHJlc2VydmF0aW9uX25hbWUKICAgICAgICAgICAgICAgICAgICB8IHJlc3VsdF9uYW1lCiAgICAgICAgICAgICAgICAgICAgfCAibm90aGluZyIKICAgICAgICAgICAgICAgICAgICB8ICIoIiByZWdleHAgIikiCgogICAqICcsJyBpcyB1c2VkIGZvciBkZXNjcmliaW5nIHRoZSBzdGFydCBvZiB0aGUgbmV4dCBjeWNsZSBpbiB0aGUKICAgICByZXNlcnZhdGlvbi4KCiAgICogJ3wnIGlzIHVzZWQgZm9yIGRlc2NyaWJpbmcgYSByZXNlcnZhdGlvbiBkZXNjcmliZWQgYnkgdGhlIGZpcnN0CiAgICAgcmVndWxhciBleHByZXNzaW9uICpvciogYSByZXNlcnZhdGlvbiBkZXNjcmliZWQgYnkgdGhlIHNlY29uZAogICAgIHJlZ3VsYXIgZXhwcmVzc2lvbiAqb3IqIGV0Yy4KCiAgICogJysnIGlzIHVzZWQgZm9yIGRlc2NyaWJpbmcgYSByZXNlcnZhdGlvbiBkZXNjcmliZWQgYnkgdGhlIGZpcnN0CiAgICAgcmVndWxhciBleHByZXNzaW9uICphbmQqIGEgcmVzZXJ2YXRpb24gZGVzY3JpYmVkIGJ5IHRoZSBzZWNvbmQKICAgICByZWd1bGFyIGV4cHJlc3Npb24gKmFuZCogZXRjLgoKICAgKiAnKicgaXMgdXNlZCBmb3IgY29udmVuaWVuY2UgYW5kIHNpbXBseSBtZWFucyBhIHNlcXVlbmNlIGluIHdoaWNoCiAgICAgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBhcmUgcmVwZWF0ZWQgTlVNQkVSIHRpbWVzIHdpdGggY3ljbGUKICAgICBhZHZhbmNpbmcgKHNlZSAnLCcpLgoKICAgKiAnY3B1X2Z1bmN0aW9uX3VuaXRfbmFtZScgZGVub3RlcyByZXNlcnZhdGlvbiBvZiB0aGUgbmFtZWQKICAgICBmdW5jdGlvbmFsIHVuaXQuCgogICAqICdyZXNlcnZhdGlvbl9uYW1lJyAtLSBzZWUgZGVzY3JpcHRpb24gb2YgY29uc3RydWN0aW9uCiAgICAgJ2RlZmluZV9yZXNlcnZhdGlvbicuCgogICAqICdub3RoaW5nJyBkZW5vdGVzIG5vIHVuaXQgcmVzZXJ2YXRpb25zLgoKIFNvbWV0aW1lcyB1bml0IHJlc2VydmF0aW9ucyBmb3IgZGlmZmVyZW50IGluc25zIGNvbnRhaW4gY29tbW9uIHBhcnRzLgpJbiBzdWNoIGNhc2UsIHlvdSBjYW4gc2ltcGxpZnkgdGhlIHBpcGVsaW5lIGRlc2NyaXB0aW9uIGJ5IGRlc2NyaWJpbmcKdGhlIGNvbW1vbiBwYXJ0IGJ5IHRoZSBmb2xsb3dpbmcgY29uc3RydWN0aW9uCgogICAgIChkZWZpbmVfcmVzZXJ2YXRpb24gUkVTRVJWQVRJT04tTkFNRSBSRUdFWFApCgogUkVTRVJWQVRJT04tTkFNRSBpcyBhIHN0cmluZyBnaXZpbmcgbmFtZSBvZiBSRUdFWFAuICBGdW5jdGlvbmFsIHVuaXQKbmFtZXMgYW5kIHJlc2VydmF0aW9uIG5hbWVzIGFyZSBpbiB0aGUgc2FtZSBuYW1lIHNwYWNlLiAgU28gdGhlCnJlc2VydmF0aW9uIG5hbWVzIHNob3VsZCBiZSBkaWZmZXJlbnQgZnJvbSB0aGUgZnVuY3Rpb25hbCB1bml0IG5hbWVzIGFuZApjYW4gbm90IGJlIHRoZSByZXNlcnZlZCBuYW1lICdub3RoaW5nJy4KCiBUaGUgZm9sbG93aW5nIGNvbnN0cnVjdGlvbiBpcyB1c2VkIHRvIGRlc2NyaWJlIGV4Y2VwdGlvbnMgaW4gdGhlCmxhdGVuY3kgdGltZSBmb3IgZ2l2ZW4gaW5zdHJ1Y3Rpb24gcGFpci4gIFRoaXMgaXMgc28gY2FsbGVkIGJ5cGFzc2VzLgoKICAgICAoZGVmaW5lX2J5cGFzcyBOVU1CRVIgT1VUX0lOU05fTkFNRVMgSU5fSU5TTl9OQU1FUwogICAgICAgICAgICAgICAgICAgIFtHVUFSRF0pCgogTlVNQkVSIGRlZmluZXMgd2hlbiB0aGUgcmVzdWx0IGdlbmVyYXRlZCBieSB0aGUgaW5zdHJ1Y3Rpb25zIGdpdmVuIGluCnN0cmluZyBPVVRfSU5TTl9OQU1FUyB3aWxsIGJlIHJlYWR5IGZvciB0aGUgaW5zdHJ1Y3Rpb25zIGdpdmVuIGluIHN0cmluZwpJTl9JTlNOX05BTUVTLiAgVGhlIGluc3RydWN0aW9ucyBpbiB0aGUgc3RyaW5nIGFyZSBzZXBhcmF0ZWQgYnkgY29tbWFzLgoKIEdVQVJEIGlzIGFuIG9wdGlvbmFsIHN0cmluZyBnaXZpbmcgdGhlIG5hbWUgb2YgYSBDIGZ1bmN0aW9uIHdoaWNoCmRlZmluZXMgYW4gYWRkaXRpb25hbCBndWFyZCBmb3IgdGhlIGJ5cGFzcy4gIFRoZSBmdW5jdGlvbiB3aWxsIGdldCB0aGUKdHdvIGluc25zIGFzIHBhcmFtZXRlcnMuICBJZiB0aGUgZnVuY3Rpb24gcmV0dXJucyB6ZXJvIHRoZSBieXBhc3Mgd2lsbApiZSBpZ25vcmVkIGZvciB0aGlzIGNhc2UuICBUaGUgYWRkaXRpb25hbCBndWFyZCBpcyBuZWNlc3NhcnkgdG8KcmVjb2duaXplIGNvbXBsaWNhdGVkIGJ5cGFzc2VzLCBlLmcuIHdoZW4gdGhlIGNvbnN1bWVyIGlzIG9ubHkgYW4KYWRkcmVzcyBvZiBpbnNuICdzdG9yZScgKG5vdCBhIHN0b3JlZCB2YWx1ZSkuCgogVGhlIGZvbGxvd2luZyBmaXZlIGNvbnN0cnVjdGlvbnMgYXJlIHVzdWFsbHkgdXNlZCB0byBkZXNjcmliZSBWTElXCnByb2Nlc3NvcnMsIG9yIG1vcmUgcHJlY2lzZWx5LCB0byBkZXNjcmliZSBhIHBsYWNlbWVudCBvZiBzbWFsbAppbnN0cnVjdGlvbnMgaW50byBWTElXIGluc3RydWN0aW9uIHNsb3RzLiAgVGhleSBjYW4gYmUgdXNlZCBmb3IgUklTQwpwcm9jZXNzb3JzLCB0b28uCgogICAgIChleGNsdXNpb25fc2V0IFVOSVQtTkFNRVMgVU5JVC1OQU1FUykKICAgICAocHJlc2VuY2Vfc2V0IFVOSVQtTkFNRVMgUEFUVEVSTlMpCiAgICAgKGZpbmFsX3ByZXNlbmNlX3NldCBVTklULU5BTUVTIFBBVFRFUk5TKQogICAgIChhYnNlbmNlX3NldCBVTklULU5BTUVTIFBBVFRFUk5TKQogICAgIChmaW5hbF9hYnNlbmNlX3NldCBVTklULU5BTUVTIFBBVFRFUk5TKQoKIFVOSVQtTkFNRVMgaXMgYSBzdHJpbmcgZ2l2aW5nIG5hbWVzIG9mIGZ1bmN0aW9uYWwgdW5pdHMgc2VwYXJhdGVkIGJ5CmNvbW1hcy4KCiBQQVRURVJOUyBpcyBhIHN0cmluZyBnaXZpbmcgcGF0dGVybnMgb2YgZnVuY3Rpb25hbCB1bml0cyBzZXBhcmF0ZWQgYnkKY29tbWEuICBDdXJyZW50bHkgcGF0dGVybiBpcyBvbmUgdW5pdCBvciB1bml0cyBzZXBhcmF0ZWQgYnkKd2hpdGUtc3BhY2VzLgoKIFRoZSBmaXJzdCBjb25zdHJ1Y3Rpb24gKCdleGNsdXNpb25fc2V0JykgbWVhbnMgdGhhdCBlYWNoIGZ1bmN0aW9uYWwKdW5pdCBpbiB0aGUgZmlyc3Qgc3RyaW5nIGNhbiBub3QgYmUgcmVzZXJ2ZWQgc2ltdWx0YW5lb3VzbHkgd2l0aCBhIHVuaXQKd2hvc2UgbmFtZSBpcyBpbiB0aGUgc2Vjb25kIHN0cmluZyBhbmQgdmljZSB2ZXJzYS4gIEZvciBleGFtcGxlLCB0aGUKY29uc3RydWN0aW9uIGlzIHVzZWZ1bCBmb3IgZGVzY3JpYmluZyBwcm9jZXNzb3JzIChlLmcuIHNvbWUgU1BBUkMKcHJvY2Vzc29ycykgd2l0aCBhIGZ1bGx5IHBpcGVsaW5lZCBmbG9hdGluZyBwb2ludCBmdW5jdGlvbmFsIHVuaXQgd2hpY2gKY2FuIGV4ZWN1dGUgc2ltdWx0YW5lb3VzbHkgb25seSBzaW5nbGUgZmxvYXRpbmcgcG9pbnQgaW5zbnMgb3Igb25seQpkb3VibGUgZmxvYXRpbmcgcG9pbnQgaW5zbnMuCgogVGhlIHNlY29uZCBjb25zdHJ1Y3Rpb24gKCdwcmVzZW5jZV9zZXQnKSBtZWFucyB0aGF0IGVhY2ggZnVuY3Rpb25hbAp1bml0IGluIHRoZSBmaXJzdCBzdHJpbmcgY2FuIG5vdCBiZSByZXNlcnZlZCB1bmxlc3MgYXQgbGVhc3Qgb25lIG9mCnBhdHRlcm4gb2YgdW5pdHMgd2hvc2UgbmFtZXMgYXJlIGluIHRoZSBzZWNvbmQgc3RyaW5nIGlzIHJlc2VydmVkLiAgVGhpcwppcyBhbiBhc3ltbWV0cmljIHJlbGF0aW9uLiAgRm9yIGV4YW1wbGUsIGl0IGlzIHVzZWZ1bCBmb3IgZGVzY3JpcHRpb24KdGhhdCBWTElXICdzbG90MScgaXMgcmVzZXJ2ZWQgYWZ0ZXIgJ3Nsb3QwJyByZXNlcnZhdGlvbi4gIFdlIGNvdWxkCmRlc2NyaWJlIGl0IGJ5IHRoZSBmb2xsb3dpbmcgY29uc3RydWN0aW9uCgogICAgIChwcmVzZW5jZV9zZXQgInNsb3QxIiAic2xvdDAiKQoKIE9yICdzbG90MScgaXMgcmVzZXJ2ZWQgb25seSBhZnRlciAnc2xvdDAnIGFuZCB1bml0ICdiMCcgcmVzZXJ2YXRpb24uCkluIHRoaXMgY2FzZSB3ZSBjb3VsZCB3cml0ZQoKICAgICAocHJlc2VuY2Vfc2V0ICJzbG90MSIgInNsb3QwIGIwIikKCiBUaGUgdGhpcmQgY29uc3RydWN0aW9uICgnZmluYWxfcHJlc2VuY2Vfc2V0JykgaXMgYW5hbG9nb3VzIHRvCidwcmVzZW5jZV9zZXQnLiAgVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGVtIGlzIHdoZW4gY2hlY2tpbmcgaXMgZG9uZS4KV2hlbiBhbiBpbnN0cnVjdGlvbiBpcyBpc3N1ZWQgaW4gZ2l2ZW4gYXV0b21hdG9uIHN0YXRlIHJlZmxlY3RpbmcgYWxsCmN1cnJlbnQgYW5kIHBsYW5uZWQgdW5pdCByZXNlcnZhdGlvbnMsIHRoZSBhdXRvbWF0b24gc3RhdGUgaXMgY2hhbmdlZC4KVGhlIGZpcnN0IHN0YXRlIGlzIGEgc291cmNlIHN0YXRlLCB0aGUgc2Vjb25kIG9uZSBpcyBhIHJlc3VsdCBzdGF0ZS4KQ2hlY2tpbmcgZm9yICdwcmVzZW5jZV9zZXQnIGlzIGRvbmUgb24gdGhlIHNvdXJjZSBzdGF0ZSByZXNlcnZhdGlvbiwKY2hlY2tpbmcgZm9yICdmaW5hbF9wcmVzZW5jZV9zZXQnIGlzIGRvbmUgb24gdGhlIHJlc3VsdCByZXNlcnZhdGlvbi4KVGhpcyBjb25zdHJ1Y3Rpb24gaXMgdXNlZnVsIHRvIGRlc2NyaWJlIGEgcmVzZXJ2YXRpb24gd2hpY2ggaXMgYWN0dWFsbHkKdHdvIHN1YnNlcXVlbnQgcmVzZXJ2YXRpb25zLiAgRm9yIGV4YW1wbGUsIGlmIHdlIHVzZQoKICAgICAocHJlc2VuY2Vfc2V0ICJzbG90MSIgInNsb3QwIikKCiB0aGUgZm9sbG93aW5nIGluc24gd2lsbCBiZSBuZXZlciBpc3N1ZWQgKGJlY2F1c2UgJ3Nsb3QxJyByZXF1aXJlcwonc2xvdDAnIHdoaWNoIGlzIGFic2VudCBpbiB0aGUgc291cmNlIHN0YXRlKS4KCiAgICAgKGRlZmluZV9yZXNlcnZhdGlvbiAiaW5zbl9hbmRfbm9wIiAic2xvdDAgKyBzbG90MSIpCgogYnV0IGl0IGNhbiBiZSBpc3N1ZWQgaWYgd2UgdXNlIGFuYWxvZ291cyAnZmluYWxfcHJlc2VuY2Vfc2V0Jy4KCiBUaGUgZm9ydGggY29uc3RydWN0aW9uICgnYWJzZW5jZV9zZXQnKSBtZWFucyB0aGF0IGVhY2ggZnVuY3Rpb25hbCB1bml0CmluIHRoZSBmaXJzdCBzdHJpbmcgY2FuIGJlIHJlc2VydmVkIG9ubHkgaWYgZWFjaCBwYXR0ZXJuIG9mIHVuaXRzIHdob3NlCm5hbWVzIGFyZSBpbiB0aGUgc2Vjb25kIHN0cmluZyBpcyBub3QgcmVzZXJ2ZWQuICBUaGlzIGlzIGFuIGFzeW1tZXRyaWMKcmVsYXRpb24gKGFjdHVhbGx5ICdleGNsdXNpb25fc2V0JyBpcyBhbmFsb2dvdXMgdG8gdGhpcyBvbmUgYnV0IGl0IGlzCnN5bW1ldHJpYykuICBGb3IgZXhhbXBsZSBpdCBtaWdodCBiZSB1c2VmdWwgaW4gYSBWTElXIGRlc2NyaXB0aW9uIHRvIHNheQp0aGF0ICdzbG90MCcgY2Fubm90IGJlIHJlc2VydmVkIGFmdGVyIGVpdGhlciAnc2xvdDEnIG9yICdzbG90MicgaGF2ZQpiZWVuIHJlc2VydmVkLiAgVGhpcyBjYW4gYmUgZGVzY3JpYmVkIGFzOgoKICAgICAoYWJzZW5jZV9zZXQgInNsb3QwIiAic2xvdDEsIHNsb3QyIikKCiBPciAnc2xvdDInIGNhbiBub3QgYmUgcmVzZXJ2ZWQgaWYgJ3Nsb3QwJyBhbmQgdW5pdCAnYjAnIGFyZSByZXNlcnZlZCBvcgonc2xvdDEnIGFuZCB1bml0ICdiMScgYXJlIHJlc2VydmVkLiAgSW4gdGhpcyBjYXNlIHdlIGNvdWxkIHdyaXRlCgogICAgIChhYnNlbmNlX3NldCAic2xvdDIiICJzbG90MCBiMCwgc2xvdDEgYjEiKQoKIEFsbCBmdW5jdGlvbmFsIHVuaXRzIG1lbnRpb25lZCBpbiBhIHNldCBzaG91bGQgYmVsb25nIHRvIHRoZSBzYW1lCmF1dG9tYXRvbi4KCiBUaGUgbGFzdCBjb25zdHJ1Y3Rpb24gKCdmaW5hbF9hYnNlbmNlX3NldCcpIGlzIGFuYWxvZ291cyB0bwonYWJzZW5jZV9zZXQnIGJ1dCBjaGVja2luZyBpcyBkb25lIG9uIHRoZSByZXN1bHQgKHN0YXRlKSByZXNlcnZhdGlvbi4KU2VlIGNvbW1lbnRzIGZvciAnZmluYWxfcHJlc2VuY2Vfc2V0Jy4KCiBZb3UgY2FuIGNvbnRyb2wgdGhlIGdlbmVyYXRvciBvZiB0aGUgcGlwZWxpbmUgaGF6YXJkIHJlY29nbml6ZXIgd2l0aAp0aGUgZm9sbG93aW5nIGNvbnN0cnVjdGlvbi4KCiAgICAgKGF1dG9tYXRhX29wdGlvbiBPUFRJT05TKQoKIE9QVElPTlMgaXMgYSBzdHJpbmcgZ2l2aW5nIG9wdGlvbnMgd2hpY2ggYWZmZWN0IHRoZSBnZW5lcmF0ZWQgY29kZS4KQ3VycmVudGx5IHRoZXJlIGFyZSB0aGUgZm9sbG93aW5nIG9wdGlvbnM6CgogICAqICJuby1taW5pbWl6YXRpb24iIG1ha2VzIG5vIG1pbmltaXphdGlvbiBvZiB0aGUgYXV0b21hdG9uLiAgVGhpcyBpcwogICAgIG9ubHkgd29ydGggdG8gZG8gd2hlbiB3ZSBhcmUgZGVidWdnaW5nIHRoZSBkZXNjcmlwdGlvbiBhbmQgbmVlZCB0bwogICAgIGxvb2sgbW9yZSBhY2N1cmF0ZWx5IGF0IHJlc2VydmF0aW9ucyBvZiBzdGF0ZXMuCgogICAqICJ0aW1lIiBtZWFucyBwcmludGluZyB0aW1lIHN0YXRpc3RpY3MgYWJvdXQgdGhlIGdlbmVyYXRpb24gb2YKICAgICBhdXRvbWF0YS4KCiAgICogInN0YXRzIiBtZWFucyBwcmludGluZyBzdGF0aXN0aWNzIGFib3V0IHRoZSBnZW5lcmF0ZWQgYXV0b21hdGEgc3VjaAogICAgIGFzIHRoZSBudW1iZXIgb2YgREZBIHN0YXRlcywgTkRGQSBzdGF0ZXMgYW5kIGFyY3MuCgogICAqICJ2IiBtZWFucyBhIGdlbmVyYXRpb24gb2YgdGhlIGZpbGUgZGVzY3JpYmluZyB0aGUgcmVzdWx0IGF1dG9tYXRhLgogICAgIFRoZSBmaWxlIGhhcyBzdWZmaXggJy5kZmEnIGFuZCBjYW4gYmUgdXNlZCBmb3IgdGhlIGRlc2NyaXB0aW9uCiAgICAgdmVyaWZpY2F0aW9uIGFuZCBkZWJ1Z2dpbmcuCgogICAqICJ3IiBtZWFucyBhIGdlbmVyYXRpb24gb2Ygd2FybmluZyBpbnN0ZWFkIG9mIGVycm9yIGZvciBub24tY3JpdGljYWwKICAgICBlcnJvcnMuCgogICAqICJuZGZhIiBtYWtlcyBub25kZXRlcm1pbmlzdGljIGZpbml0ZSBzdGF0ZSBhdXRvbWF0YS4gIFRoaXMgYWZmZWN0cwogICAgIHRoZSB0cmVhdG1lbnQgb2Ygb3BlcmF0b3IgJ3wnIGluIHRoZSByZWd1bGFyIGV4cHJlc3Npb25zLiAgVGhlCiAgICAgdXN1YWwgdHJlYXRtZW50IG9mIHRoZSBvcGVyYXRvciBpcyB0byB0cnkgdGhlIGZpcnN0IGFsdGVybmF0aXZlCiAgICAgYW5kLCBpZiB0aGUgcmVzZXJ2YXRpb24gaXMgbm90IHBvc3NpYmxlLCB0aGUgc2Vjb25kIGFsdGVybmF0aXZlLgogICAgIFRoZSBub25kZXRlcm1pbmlzdGljIHRyZWF0bWVudCBtZWFucyB0cnlpbmcgYWxsIGFsdGVybmF0aXZlcywgc29tZQogICAgIG9mIHRoZW0gbWF5IGJlIHJlamVjdGVkIGJ5IHJlc2VydmF0aW9ucyBpbiB0aGUgc3Vic2VxdWVudCBpbnNucy4KCiAgICogInByb2dyZXNzIiBtZWFucyBvdXRwdXQgb2YgYSBwcm9ncmVzcyBiYXIgc2hvd2luZyBob3cgbWFueSBzdGF0ZXMKICAgICB3ZXJlIGdlbmVyYXRlZCBzbyBmYXIgZm9yIGF1dG9tYXRvbiBiZWluZyBwcm9jZXNzZWQuICBUaGlzIGlzCiAgICAgdXNlZnVsIGR1cmluZyBkZWJ1Z2dpbmcgYSBERkEgZGVzY3JpcHRpb24uICBJZiB5b3Ugc2VlIHRvbyBtYW55CiAgICAgZ2VuZXJhdGVkIHN0YXRlcywgeW91IGNvdWxkIGludGVycnVwdCB0aGUgZ2VuZXJhdG9yIG9mIHRoZSBwaXBlbGluZQogICAgIGhhemFyZCByZWNvZ25pemVyIGFuZCB0cnkgdG8gZmlndXJlIG91dCBhIHJlYXNvbiBmb3IgZ2VuZXJhdGlvbiBvZgogICAgIHRoZSBodWdlIGF1dG9tYXRvbi4KCiBBcyBhbiBleGFtcGxlLCBjb25zaWRlciBhIHN1cGVyc2NhbGFyIFJJU0MgbWFjaGluZSB3aGljaCBjYW4gaXNzdWUKdGhyZWUgaW5zbnMgKHR3byBpbnRlZ2VyIGluc25zIGFuZCBvbmUgZmxvYXRpbmcgcG9pbnQgaW5zbikgb24gdGhlIGN5Y2xlCmJ1dCBjYW4gZmluaXNoIG9ubHkgdHdvIGluc25zLiAgVG8gZGVzY3JpYmUgdGhpcywgd2UgZGVmaW5lIHRoZQpmb2xsb3dpbmcgZnVuY3Rpb25hbCB1bml0cy4KCiAgICAgKGRlZmluZV9jcHVfdW5pdCAiaTBfcGlwZWxpbmUsIGkxX3BpcGVsaW5lLCBmX3BpcGVsaW5lIikKICAgICAoZGVmaW5lX2NwdV91bml0ICJwb3J0MCwgcG9ydDEiKQoKIEFsbCBzaW1wbGUgaW50ZWdlciBpbnNucyBjYW4gYmUgZXhlY3V0ZWQgaW4gYW55IGludGVnZXIgcGlwZWxpbmUgYW5kCnRoZWlyIHJlc3VsdCBpcyByZWFkeSBpbiB0d28gY3ljbGVzLiAgVGhlIHNpbXBsZSBpbnRlZ2VyIGluc25zIGFyZQppc3N1ZWQgaW50byB0aGUgZmlyc3QgcGlwZWxpbmUgdW5sZXNzIGl0IGlzIHJlc2VydmVkLCBvdGhlcndpc2UgdGhleSBhcmUKaXNzdWVkIGludG8gdGhlIHNlY29uZCBwaXBlbGluZS4gIEludGVnZXIgZGl2aXNpb24gYW5kIG11bHRpcGxpY2F0aW9uCmluc25zIGNhbiBiZSBleGVjdXRlZCBvbmx5IGluIHRoZSBzZWNvbmQgaW50ZWdlciBwaXBlbGluZSBhbmQgdGhlaXIKcmVzdWx0cyBhcmUgcmVhZHkgY29ycmVzcG9uZGluZ2x5IGluIDggYW5kIDQgY3ljbGVzLiAgVGhlIGludGVnZXIKZGl2aXNpb24gaXMgbm90IHBpcGVsaW5lZCwgaS5lLiB0aGUgc3Vic2VxdWVudCBpbnRlZ2VyIGRpdmlzaW9uIGluc24gY2FuCm5vdCBiZSBpc3N1ZWQgdW50aWwgdGhlIGN1cnJlbnQgZGl2aXNpb24gaW5zbiBmaW5pc2hlZC4gIEZsb2F0aW5nIHBvaW50Cmluc25zIGFyZSBmdWxseSBwaXBlbGluZWQgYW5kIHRoZWlyIHJlc3VsdHMgYXJlIHJlYWR5IGluIDMgY3ljbGVzLgpXaGVyZSB0aGUgcmVzdWx0IG9mIGEgZmxvYXRpbmcgcG9pbnQgaW5zbiBpcyB1c2VkIGJ5IGFuIGludGVnZXIgaW5zbiwgYW4KYWRkaXRpb25hbCBkZWxheSBvZiBvbmUgY3ljbGUgaXMgaW5jdXJyZWQuICBUbyBkZXNjcmliZSBhbGwgb2YgdGhpcyB3ZQpjb3VsZCBzcGVjaWZ5CgogICAgIChkZWZpbmVfY3B1X3VuaXQgImRpdiIpCgogICAgIChkZWZpbmVfaW5zbl9yZXNlcnZhdGlvbiAic2ltcGxlIiAyIChlcV9hdHRyICJ0eXBlIiAiaW50IikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIihpMF9waXBlbGluZSB8IGkxX3BpcGVsaW5lKSwgKHBvcnQwIHwgcG9ydDEpIikKCiAgICAgKGRlZmluZV9pbnNuX3Jlc2VydmF0aW9uICJtdWx0IiA0IChlcV9hdHRyICJ0eXBlIiAibXVsdCIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpMV9waXBlbGluZSwgbm90aGluZyoyLCAocG9ydDAgfCBwb3J0MSkiKQoKICAgICAoZGVmaW5lX2luc25fcmVzZXJ2YXRpb24gImRpdiIgOCAoZXFfYXR0ciAidHlwZSIgImRpdiIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpMV9waXBlbGluZSwgZGl2KjcsIGRpdiArIChwb3J0MCB8IHBvcnQxKSIpCgogICAgIChkZWZpbmVfaW5zbl9yZXNlcnZhdGlvbiAiZmxvYXQiIDMgKGVxX2F0dHIgInR5cGUiICJmbG9hdCIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmX3BpcGVsaW5lLCBub3RoaW5nLCAocG9ydDAgfCBwb3J0MSkpCgogICAgIChkZWZpbmVfYnlwYXNzIDQgImZsb2F0IiAic2ltcGxlLG11bHQsZGl2IikKCiBUbyBzaW1wbGlmeSB0aGUgZGVzY3JpcHRpb24gd2UgY291bGQgZGVzY3JpYmUgdGhlIGZvbGxvd2luZyByZXNlcnZhdGlvbgoKICAgICAoZGVmaW5lX3Jlc2VydmF0aW9uICJmaW5pc2giICJwb3J0MHxwb3J0MSIpCgogYW5kIHVzZSBpdCBpbiBhbGwgJ2RlZmluZV9pbnNuX3Jlc2VydmF0aW9uJyBhcyBpbiB0aGUgZm9sbG93aW5nCmNvbnN0cnVjdGlvbgoKICAgICAoZGVmaW5lX2luc25fcmVzZXJ2YXRpb24gInNpbXBsZSIgMiAoZXFfYXR0ciAidHlwZSIgImludCIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIoaTBfcGlwZWxpbmUgfCBpMV9waXBlbGluZSksIGZpbmlzaCIpCgogICAtLS0tLS0tLS0tIEZvb3Rub3RlcyAtLS0tLS0tLS0tCgogICAoMSkgSG93ZXZlciwgdGhlIHNpemUgb2YgdGhlIGF1dG9tYXRvbiBkZXBlbmRzIG9uIHByb2Nlc3Nvcgpjb21wbGV4aXR5LiAgVG8gbGltaXQgdGhpcyBlZmZlY3QsIG1hY2hpbmUgZGVzY3JpcHRpb25zIGNhbiBzcGxpdApvcnRob2dvbmFsIHBhcnRzIG9mIHRoZSBtYWNoaW5lIGRlc2NyaXB0aW9uIGFtb25nIHNldmVyYWwgYXV0b21hdGE6IGJ1dAp0aGVuLCBzaW5jZSBlYWNoIG9mIHRoZXNlIG11c3QgYmUgc3RlcHBlZCBpbmRlcGVuZGVudGx5LCB0aGlzIGRvZXMgY2F1c2UKYSBzbWFsbCBkZWNyZWFzZSBpbiB0aGUgYWxnb3JpdGhtJ3MgcGVyZm9ybWFuY2UuCgofCkZpbGU6IGdjY2ludC5pbmZvLCAgTm9kZTogQ29uZGl0aW9uYWwgRXhlY3V0aW9uLCAgTmV4dDogQ29uc3RhbnQgRGVmaW5pdGlvbnMsICBQcmV2OiBJbnNuIEF0dHJpYnV0ZXMsICBVcDogTWFjaGluZSBEZXNjCgoxNC4yMCBDb25kaXRpb25hbCBFeGVjdXRpb24KPT09PT09PT09PT09PT09PT09PT09PT09PT09CgpBIG51bWJlciBvZiBhcmNoaXRlY3R1cmVzIHByb3ZpZGUgZm9yIHNvbWUgZm9ybSBvZiBjb25kaXRpb25hbApleGVjdXRpb24sIG9yIHByZWRpY2F0aW9uLiAgVGhlIGhhbGxtYXJrIG9mIHRoaXMgZmVhdHVyZSBpcyB0aGUgYWJpbGl0eQp0byBudWxsaWZ5IG1vc3Qgb2YgdGhlIGluc3RydWN0aW9ucyBpbiB0aGUgaW5zdHJ1Y3Rpb24gc2V0LiAgV2hlbiB0aGUKaW5zdHJ1Y3Rpb24gc2V0IGlzIGxhcmdlIGFuZCBub3QgZW50aXJlbHkgc3ltbWV0cmljLCBpdCBjYW4gYmUgcXVpdGUKdGVkaW91cyB0byBkZXNjcmliZSB0aGVzZSBmb3JtcyBkaXJlY3RseSBpbiB0aGUgJy5tZCcgZmlsZS4gIEFuCmFsdGVybmF0aXZlIGlzIHRoZSAnZGVmaW5lX2NvbmRfZXhlYycgdGVtcGxhdGUuCgogICAgIChkZWZpbmVfY29uZF9leGVjCiAgICAgICBbUFJFRElDQVRFLVBBVFRFUk5dCiAgICAgICAiQ09ORElUSU9OIgogICAgICAgIk9VVFBVVC1URU1QTEFURSIpCgogUFJFRElDQVRFLVBBVFRFUk4gaXMgdGhlIGNvbmRpdGlvbiB0aGF0IG11c3QgYmUgdHJ1ZSBmb3IgdGhlIGluc24gdG8gYmUKZXhlY3V0ZWQgYXQgcnVudGltZSBhbmQgc2hvdWxkIG1hdGNoIGEgcmVsYXRpb25hbCBvcGVyYXRvci4gIE9uZSBjYW4gdXNlCidtYXRjaF9vcGVyYXRvcicgdG8gbWF0Y2ggc2V2ZXJhbCByZWxhdGlvbmFsIG9wZXJhdG9ycyBhdCBvbmNlLiAgQW55CidtYXRjaF9vcGVyYW5kJyBvcGVyYW5kcyBtdXN0IGhhdmUgbm8gbW9yZSB0aGFuIG9uZSBhbHRlcm5hdGl2ZS4KCiBDT05ESVRJT04gaXMgYSBDIGV4cHJlc3Npb24gdGhhdCBtdXN0IGJlIHRydWUgZm9yIHRoZSBnZW5lcmF0ZWQgcGF0dGVybgp0byBtYXRjaC4KCiBPVVRQVVQtVEVNUExBVEUgaXMgYSBzdHJpbmcgc2ltaWxhciB0byB0aGUgJ2RlZmluZV9pbnNuJyBvdXRwdXQKdGVtcGxhdGUgKCpub3RlIE91dHB1dCBUZW1wbGF0ZTo6KSwgZXhjZXB0IHRoYXQgdGhlICcqJyBhbmQgJ0AnIHNwZWNpYWwKY2FzZXMgZG8gbm90IGFwcGx5LiAgVGhpcyBpcyBvbmx5IHVzZWZ1bCBpZiB0aGUgYXNzZW1ibHkgdGV4dCBmb3IgdGhlCnByZWRpY2F0ZSBpcyBhIHNpbXBsZSBwcmVmaXggdG8gdGhlIG1haW4gaW5zbi4gIEluIG9yZGVyIHRvIGhhbmRsZSB0aGUKZ2VuZXJhbCBjYXNlLCB0aGVyZSBpcyBhIGdsb2JhbCB2YXJpYWJsZSAnY3VycmVudF9pbnNuX3ByZWRpY2F0ZScgdGhhdAp3aWxsIGNvbnRhaW4gdGhlIGVudGlyZSBwcmVkaWNhdGUgaWYgdGhlIGN1cnJlbnQgaW5zbiBpcyBwcmVkaWNhdGVkLCBhbmQKd2lsbCBvdGhlcndpc2UgYmUgJ05VTEwnLgoKIFdoZW4gJ2RlZmluZV9jb25kX2V4ZWMnIGlzIHVzZWQsIGFuIGltcGxpY2l0IHJlZmVyZW5jZSB0byB0aGUKJ3ByZWRpY2FibGUnIGluc3RydWN0aW9uIGF0dHJpYnV0ZSBpcyBtYWRlLiAgKk5vdGUgSW5zbiBBdHRyaWJ1dGVzOjouClRoaXMgYXR0cmlidXRlIG11c3QgYmUgYm9vbGVhbiAoaS5lLiBoYXZlIGV4YWN0bHkgdHdvIGVsZW1lbnRzIGluIGl0cwpMSVNULU9GLVZBTFVFUykuICBGdXJ0aGVyLCBpdCBtdXN0IG5vdCBiZSB1c2VkIHdpdGggY29tcGxleCBleHByZXNzaW9ucy4KVGhhdCBpcywgdGhlIGRlZmF1bHQgYW5kIGFsbCB1c2VzIGluIHRoZSBpbnNucyBtdXN0IGJlIGEgc2ltcGxlCmNvbnN0YW50LCBub3QgZGVwZW5kZW50IG9uIHRoZSBhbHRlcm5hdGl2ZSBvciBhbnl0aGluZyBlbHNlLgoKIEZvciBlYWNoICdkZWZpbmVfaW5zbicgZm9yIHdoaWNoIHRoZSAncHJlZGljYWJsZScgYXR0cmlidXRlIGlzIHRydWUsIGEKbmV3ICdkZWZpbmVfaW5zbicgcGF0dGVybiB3aWxsIGJlIGdlbmVyYXRlZCB0aGF0IG1hdGNoZXMgYSBwcmVkaWNhdGVkCnZlcnNpb24gb2YgdGhlIGluc3RydWN0aW9uLiAgRm9yIGV4YW1wbGUsCgogICAgIChkZWZpbmVfaW5zbiAiYWRkc2kiCiAgICAgICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiciIpCiAgICAgICAgICAgICAocGx1czpTSSAobWF0Y2hfb3BlcmFuZDpTSSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiciIpCiAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpTSSAyICJyZWdpc3Rlcl9vcGVyYW5kIiAiciIpKSldCiAgICAgICAiVEVTVDEiCiAgICAgICAiYWRkICUyLCUxLCUwIikKCiAgICAgKGRlZmluZV9jb25kX2V4ZWMKICAgICAgIFsobmUgKG1hdGNoX29wZXJhbmQ6Q0MgMCAicmVnaXN0ZXJfb3BlcmFuZCIgImMiKQogICAgICAgICAgICAoY29uc3RfaW50IDApKV0KICAgICAgICJURVNUMiIKICAgICAgICIoJTApIikKCmdlbmVyYXRlcyBhIG5ldyBwYXR0ZXJuCgogICAgIChkZWZpbmVfaW5zbiAiIgogICAgICAgWyhjb25kX2V4ZWMKICAgICAgICAgIChuZSAobWF0Y2hfb3BlcmFuZDpDQyAzICJyZWdpc3Rlcl9vcGVyYW5kIiAiYyIpIChjb25zdF9pbnQgMCkpCiAgICAgICAgICAoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICJyIikKICAgICAgICAgICAgICAgKHBsdXM6U0kgKG1hdGNoX29wZXJhbmQ6U0kgMSAicmVnaXN0ZXJfb3BlcmFuZCIgInIiKQogICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpTSSAyICJyZWdpc3Rlcl9vcGVyYW5kIiAiciIpKSkpXQogICAgICAgIihURVNUMikgJiYgKFRFU1QxKSIKICAgICAgICIoJTMpIGFkZCAlMiwlMSwlMCIpCgofCkZpbGU6IGdjY2ludC5pbmZvLCAgTm9kZTogQ29uc3RhbnQgRGVmaW5pdGlvbnMsICBOZXh0OiBJdGVyYXRvcnMsICBQcmV2OiBDb25kaXRpb25hbCBFeGVjdXRpb24sICBVcDogTWFjaGluZSBEZXNjCgoxNC4yMSBDb25zdGFudCBEZWZpbml0aW9ucwo9PT09PT09PT09PT09PT09PT09PT09PT09PQoKVXNpbmcgbGl0ZXJhbCBjb25zdGFudHMgaW5zaWRlIGluc3RydWN0aW9uIHBhdHRlcm5zIHJlZHVjZXMgbGVnaWJpbGl0eQphbmQgY2FuIGJlIGEgbWFpbnRlbmFuY2UgcHJvYmxlbS4KCiBUbyBvdmVyY29tZSB0aGlzIHByb2JsZW0sIHlvdSBtYXkgdXNlIHRoZSAnZGVmaW5lX2NvbnN0YW50cycKZXhwcmVzc2lvbi4gIEl0IGNvbnRhaW5zIGEgdmVjdG9yIG9mIG5hbWUtdmFsdWUgcGFpcnMuICBGcm9tIHRoYXQgcG9pbnQKb24sIHdoZXJldmVyIGFueSBvZiB0aGUgbmFtZXMgYXBwZWFycyBpbiB0aGUgTUQgZmlsZSwgaXQgaXMgYXMgaWYgdGhlCmNvcnJlc3BvbmRpbmcgdmFsdWUgaGFkIGJlZW4gd3JpdHRlbiBpbnN0ZWFkLiAgWW91IG1heSB1c2UKJ2RlZmluZV9jb25zdGFudHMnIG11bHRpcGxlIHRpbWVzOyBlYWNoIGFwcGVhcmFuY2UgYWRkcyBtb3JlIGNvbnN0YW50cwp0byB0aGUgdGFibGUuICBJdCBpcyBhbiBlcnJvciB0byByZWRlZmluZSBhIGNvbnN0YW50IHdpdGggYSBkaWZmZXJlbnQKdmFsdWUuCgogVG8gY29tZSBiYWNrIHRvIHRoZSBhMjlrIGxvYWQgbXVsdGlwbGUgZXhhbXBsZSwgaW5zdGVhZCBvZgoKICAgICAoZGVmaW5lX2luc24gIiIKICAgICAgIFsobWF0Y2hfcGFyYWxsZWwgMCAibG9hZF9tdWx0aXBsZV9vcGVyYXRpb24iCiAgICAgICAgICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAxICJncGNfcmVnX29wZXJhbmQiICI9ciIpCiAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpTSSAyICJtZW1vcnlfb3BlcmFuZCIgIm0iKSkKICAgICAgICAgICAodXNlIChyZWc6U0kgMTc5KSkKICAgICAgICAgICAoY2xvYmJlciAocmVnOlNJIDE3OSkpXSldCiAgICAgICAiIgogICAgICAgImxvYWRtIDAsMCwlMSwlMiIpCgogWW91IGNvdWxkIHdyaXRlOgoKICAgICAoZGVmaW5lX2NvbnN0YW50cyBbCiAgICAgICAgIChSX0JQIDE3NykKICAgICAgICAgKFJfRkMgMTc4KQogICAgICAgICAoUl9DUiAxNzkpCiAgICAgICAgIChSX1EgIDE4MCkKICAgICBdKQoKICAgICAoZGVmaW5lX2luc24gIiIKICAgICAgIFsobWF0Y2hfcGFyYWxsZWwgMCAibG9hZF9tdWx0aXBsZV9vcGVyYXRpb24iCiAgICAgICAgICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAxICJncGNfcmVnX29wZXJhbmQiICI9ciIpCiAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpTSSAyICJtZW1vcnlfb3BlcmFuZCIgIm0iKSkKICAgICAgICAgICAodXNlIChyZWc6U0kgUl9DUikpCiAgICAgICAgICAgKGNsb2JiZXIgKHJlZzpTSSBSX0NSKSldKV0KICAgICAgICIiCiAgICAgICAibG9hZG0gMCwwLCUxLCUyIikKCiBUaGUgY29uc3RhbnRzIHRoYXQgYXJlIGRlZmluZWQgd2l0aCBhIGRlZmluZV9jb25zdGFudCBhcmUgYWxzbyBvdXRwdXQKaW4gdGhlIGluc24tY29kZXMuaCBoZWFkZXIgZmlsZSBhcyAjZGVmaW5lcy4KCh8KRmlsZTogZ2NjaW50LmluZm8sICBOb2RlOiBJdGVyYXRvcnMsICBQcmV2OiBDb25zdGFudCBEZWZpbml0aW9ucywgIFVwOiBNYWNoaW5lIERlc2MKCjE0LjIyIEl0ZXJhdG9ycwo9PT09PT09PT09PT09PT0KClBvcnRzIG9mdGVuIG5lZWQgdG8gZGVmaW5lIHNpbWlsYXIgcGF0dGVybnMgZm9yIG1vcmUgdGhhbiBvbmUgbWFjaGluZQptb2RlIG9yIGZvciBtb3JlIHRoYW4gb25lIHJ0eCBjb2RlLiAgR0NDIHByb3ZpZGVzIHNvbWUgc2ltcGxlIGl0ZXJhdG9yCmZhY2lsaXRpZXMgdG8gbWFrZSB0aGlzIHByb2Nlc3MgZWFzaWVyLgoKKiBNZW51OgoKKiBNb2RlIEl0ZXJhdG9yczo6ICAgICAgICAgR2VuZXJhdGluZyB2YXJpYXRpb25zIG9mIHBhdHRlcm5zIGZvciBkaWZmZXJlbnQgbW9kZXMuCiogQ29kZSBJdGVyYXRvcnM6OiAgICAgICAgIERvaW5nIHRoZSBzYW1lIGZvciBjb2Rlcy4KCh8KRmlsZTogZ2NjaW50LmluZm8sICBOb2RlOiBNb2RlIEl0ZXJhdG9ycywgIE5leHQ6IENvZGUgSXRlcmF0b3JzLCAgVXA6IEl0ZXJhdG9ycwoKMTQuMjIuMSBNb2RlIEl0ZXJhdG9ycwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpQb3J0cyBvZnRlbiBuZWVkIHRvIGRlZmluZSBzaW1pbGFyIHBhdHRlcm5zIGZvciB0d28gb3IgbW9yZSBkaWZmZXJlbnQKbW9kZXMuICBGb3IgZXhhbXBsZToKCiAgICogSWYgYSBwcm9jZXNzb3IgaGFzIGhhcmR3YXJlIHN1cHBvcnQgZm9yIGJvdGggc2luZ2xlIGFuZCBkb3VibGUKICAgICBmbG9hdGluZy1wb2ludCBhcml0aG1ldGljLCB0aGUgJ1NGbW9kZScgcGF0dGVybnMgdGVuZCB0byBiZSB2ZXJ5CiAgICAgc2ltaWxhciB0byB0aGUgJ0RGbW9kZScgb25lcy4KCiAgICogSWYgYSBwb3J0IHVzZXMgJ1NJbW9kZScgcG9pbnRlcnMgaW4gb25lIGNvbmZpZ3VyYXRpb24gYW5kICdESW1vZGUnCiAgICAgcG9pbnRlcnMgaW4gYW5vdGhlciwgaXQgd2lsbCB1c3VhbGx5IGhhdmUgdmVyeSBzaW1pbGFyICdTSW1vZGUnIGFuZAogICAgICdESW1vZGUnIHBhdHRlcm5zIGZvciBtYW5pcHVsYXRpbmcgcG9pbnRlcnMuCgogTW9kZSBpdGVyYXRvcnMgYWxsb3cgc2V2ZXJhbCBwYXR0ZXJucyB0byBiZSBpbnN0YW50aWF0ZWQgZnJvbSBvbmUgJy5tZCcKZmlsZSB0ZW1wbGF0ZS4gIFRoZXkgY2FuIGJlIHVzZWQgd2l0aCBhbnkgdHlwZSBvZiBydHgtYmFzZWQgY29uc3RydWN0LApzdWNoIGFzIGEgJ2RlZmluZV9pbnNuJywgJ2RlZmluZV9zcGxpdCcsIG9yICdkZWZpbmVfcGVlcGhvbGUyJy4KCiogTWVudToKCiogRGVmaW5pbmcgTW9kZSBJdGVyYXRvcnM6OiBEZWZpbmluZyBhIG5ldyBtb2RlIGl0ZXJhdG9yLgoqIFN1YnN0aXR1dGlvbnM6OgkgICAgQ29tYmluaW5nIG1vZGUgaXRlcmF0b3JzIHdpdGggc3Vic3RpdHV0aW9ucwoqIEV4YW1wbGVzOjoJCSAgICBFeGFtcGxlcwoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IERlZmluaW5nIE1vZGUgSXRlcmF0b3JzLCAgTmV4dDogU3Vic3RpdHV0aW9ucywgIFVwOiBNb2RlIEl0ZXJhdG9ycwoKMTQuMjIuMS4xIERlZmluaW5nIE1vZGUgSXRlcmF0b3JzCi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgoKVGhlIHN5bnRheCBmb3IgZGVmaW5pbmcgYSBtb2RlIGl0ZXJhdG9yIGlzOgoKICAgICAoZGVmaW5lX21vZGVfaXRlcmF0b3IgTkFNRSBbKE1PREUxICJDT05EMSIpIC4uLiAoTU9ERU4gIkNPTkROIildKQoKIFRoaXMgYWxsb3dzIHN1YnNlcXVlbnQgJy5tZCcgZmlsZSBjb25zdHJ1Y3RzIHRvIHVzZSB0aGUgbW9kZSBzdWZmaXgKJzpOQU1FJy4gIEV2ZXJ5IGNvbnN0cnVjdCB0aGF0IGRvZXMgc28gd2lsbCBiZSBleHBhbmRlZCBOIHRpbWVzLCBvbmNlCndpdGggZXZlcnkgdXNlIG9mICc6TkFNRScgcmVwbGFjZWQgYnkgJzpNT0RFMScsIG9uY2Ugd2l0aCBldmVyeSB1c2UKcmVwbGFjZWQgYnkgJzpNT0RFMicsIGFuZCBzbyBvbi4gIEluIHRoZSBleHBhbnNpb24gZm9yIGEgcGFydGljdWxhcgpNT0RFSSwgZXZlcnkgQyBjb25kaXRpb24gd2lsbCBhbHNvIHJlcXVpcmUgdGhhdCBDT05ESSBiZSB0cnVlLgoKIEZvciBleGFtcGxlOgoKICAgICAoZGVmaW5lX21vZGVfaXRlcmF0b3IgUCBbKFNJICJQbW9kZSA9PSBTSW1vZGUiKSAoREkgIlBtb2RlID09IERJbW9kZSIpXSkKCiBkZWZpbmVzIGEgbmV3IG1vZGUgc3VmZml4ICc6UCcuICBFdmVyeSBjb25zdHJ1Y3QgdGhhdCB1c2VzICc6UCcgd2lsbCBiZQpleHBhbmRlZCB0d2ljZSwgb25jZSB3aXRoIGV2ZXJ5ICc6UCcgcmVwbGFjZWQgYnkgJzpTSScgYW5kIG9uY2Ugd2l0aApldmVyeSAnOlAnIHJlcGxhY2VkIGJ5ICc6REknLiAgVGhlICc6U0knIHZlcnNpb24gd2lsbCBvbmx5IGFwcGx5IGlmCidQbW9kZSA9PSBTSW1vZGUnIGFuZCB0aGUgJzpESScgdmVyc2lvbiB3aWxsIG9ubHkgYXBwbHkgaWYgJ1Btb2RlID09CkRJbW9kZScuCgogQXMgd2l0aCBvdGhlciAnLm1kJyBjb25kaXRpb25zLCBhbiBlbXB0eSBzdHJpbmcgaXMgdHJlYXRlZCBhcyAiYWx3YXlzCnRydWUiLiAgJyhNT0RFICIiKScgY2FuIGFsc28gYmUgYWJicmV2aWF0ZWQgdG8gJ01PREUnLiAgRm9yIGV4YW1wbGU6CgogICAgIChkZWZpbmVfbW9kZV9pdGVyYXRvciBHUFIgW1NJIChESSAiVEFSR0VUXzY0QklUIildKQoKIG1lYW5zIHRoYXQgdGhlICc6REknIGV4cGFuc2lvbiBvbmx5IGFwcGxpZXMgaWYgJ1RBUkdFVF82NEJJVCcgYnV0IHRoYXQKdGhlICc6U0knIGV4cGFuc2lvbiBoYXMgbm8gc3VjaCBjb25zdHJhaW50LgoKIEl0ZXJhdG9ycyBhcmUgYXBwbGllZCBpbiB0aGUgb3JkZXIgdGhleSBhcmUgZGVmaW5lZC4gIFRoaXMgY2FuIGJlCnNpZ25pZmljYW50IGlmIHR3byBpdGVyYXRvcnMgYXJlIHVzZWQgaW4gYSBjb25zdHJ1Y3QgdGhhdCByZXF1aXJlcwpzdWJzdGl0dXRpb25zLiAgKk5vdGUgU3Vic3RpdHV0aW9uczo6LgoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IFN1YnN0aXR1dGlvbnMsICBOZXh0OiBFeGFtcGxlcywgIFByZXY6IERlZmluaW5nIE1vZGUgSXRlcmF0b3JzLCAgVXA6IE1vZGUgSXRlcmF0b3JzCgoxNC4yMi4xLjIgU3Vic3RpdHV0aW9uIGluIE1vZGUgSXRlcmF0b3JzCi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KCklmIGFuICcubWQnIGZpbGUgY29uc3RydWN0IHVzZXMgbW9kZSBpdGVyYXRvcnMsIGVhY2ggdmVyc2lvbiBvZiB0aGUKY29uc3RydWN0IHdpbGwgb2Z0ZW4gbmVlZCBzbGlnaHRseSBkaWZmZXJlbnQgc3RyaW5ncyBvciBtb2Rlcy4gIEZvcgpleGFtcGxlOgoKICAgKiBXaGVuIGEgJ2RlZmluZV9leHBhbmQnIGRlZmluZXMgc2V2ZXJhbCAnYWRkTTMnIHBhdHRlcm5zICgqbm90ZQogICAgIFN0YW5kYXJkIE5hbWVzOjopLCBlYWNoIGV4cGFuZGVyIHdpbGwgbmVlZCB0byB1c2UgdGhlIGFwcHJvcHJpYXRlCiAgICAgbW9kZSBuYW1lIGZvciBNLgoKICAgKiBXaGVuIGEgJ2RlZmluZV9pbnNuJyBkZWZpbmVzIHNldmVyYWwgaW5zdHJ1Y3Rpb24gcGF0dGVybnMsIGVhY2gKICAgICBpbnN0cnVjdGlvbiB3aWxsIG9mdGVuIHVzZSBhIGRpZmZlcmVudCBhc3NlbWJsZXIgbW5lbW9uaWMuCgogICAqIFdoZW4gYSAnZGVmaW5lX2luc24nIHJlcXVpcmVzIG9wZXJhbmRzIHdpdGggZGlmZmVyZW50IG1vZGVzLCB1c2luZwogICAgIGFuIGl0ZXJhdG9yIGZvciBvbmUgb2YgdGhlIG9wZXJhbmQgbW9kZXMgdXN1YWxseSByZXF1aXJlcyBhCiAgICAgc3BlY2lmaWMgbW9kZSBmb3IgdGhlIG90aGVyIG9wZXJhbmQocykuCgogR0NDIHN1cHBvcnRzIHN1Y2ggdmFyaWF0aW9ucyB0aHJvdWdoIGEgc3lzdGVtIG9mICJtb2RlIGF0dHJpYnV0ZXMiLgpUaGVyZSBhcmUgdHdvIHN0YW5kYXJkIGF0dHJpYnV0ZXM6ICdtb2RlJywgd2hpY2ggaXMgdGhlIG5hbWUgb2YgdGhlIG1vZGUKaW4gbG93ZXIgY2FzZSwgYW5kICdNT0RFJywgd2hpY2ggaXMgdGhlIHNhbWUgdGhpbmcgaW4gdXBwZXIgY2FzZS4gIFlvdQpjYW4gZGVmaW5lIG90aGVyIGF0dHJpYnV0ZXMgdXNpbmc6CgogICAgIChkZWZpbmVfbW9kZV9hdHRyIE5BTUUgWyhNT0RFMSAiVkFMVUUxIikgLi4uIChNT0RFTiAiVkFMVUVOIildKQoKIHdoZXJlIE5BTUUgaXMgdGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZSBhbmQgVkFMVUVJIGlzIHRoZSB2YWx1ZQphc3NvY2lhdGVkIHdpdGggTU9ERUkuCgogV2hlbiBHQ0MgcmVwbGFjZXMgc29tZSA6SVRFUkFUT1Igd2l0aCA6TU9ERSwgaXQgd2lsbCBzY2FuIGVhY2ggc3RyaW5nCmFuZCBtb2RlIGluIHRoZSBwYXR0ZXJuIGZvciBzZXF1ZW5jZXMgb2YgdGhlIGZvcm0gJzxJVEVSQVRPUjpBVFRSPicsCndoZXJlIEFUVFIgaXMgdGhlIG5hbWUgb2YgYSBtb2RlIGF0dHJpYnV0ZS4gIElmIHRoZSBhdHRyaWJ1dGUgaXMgZGVmaW5lZApmb3IgTU9ERSwgdGhlIHdob2xlICc8Li4uPicgc2VxdWVuY2Ugd2lsbCBiZSByZXBsYWNlZCBieSB0aGUgYXBwcm9wcmlhdGUKYXR0cmlidXRlIHZhbHVlLgoKIEZvciBleGFtcGxlLCBzdXBwb3NlIGFuICcubWQnIGZpbGUgaGFzOgoKICAgICAoZGVmaW5lX21vZGVfaXRlcmF0b3IgUCBbKFNJICJQbW9kZSA9PSBTSW1vZGUiKSAoREkgIlBtb2RlID09IERJbW9kZSIpXSkKICAgICAoZGVmaW5lX21vZGVfYXR0ciBsb2FkIFsoU0kgImx3IikgKERJICJsZCIpXSkKCiBJZiBvbmUgb2YgdGhlIHBhdHRlcm5zIHRoYXQgdXNlcyAnOlAnIGNvbnRhaW5zIHRoZSBzdHJpbmcKJyI8UDpsb2FkPlx0JTAsJTEiJywgdGhlICdTSScgdmVyc2lvbiBvZiB0aGF0IHBhdHRlcm4gd2lsbCB1c2UKJyJsd1x0JTAsJTEiJyBhbmQgdGhlICdESScgdmVyc2lvbiB3aWxsIHVzZSAnImxkXHQlMCwlMSInLgoKIEhlcmUgaXMgYW4gZXhhbXBsZSBvZiB1c2luZyBhbiBhdHRyaWJ1dGUgZm9yIGEgbW9kZToKCiAgICAgKGRlZmluZV9tb2RlX2l0ZXJhdG9yIExPTkcgW1NJIERJXSkKICAgICAoZGVmaW5lX21vZGVfYXR0ciBTSE9SVCBbKFNJICJISSIpIChESSAiU0kiKV0pCiAgICAgKGRlZmluZV9pbnNuIC4uLgogICAgICAgKHNpZ25fZXh0ZW5kOkxPTkcgKG1hdGNoX29wZXJhbmQ6PExPTkc6U0hPUlQ+IC4uLikpIC4uLikKCiBUaGUgJ0lURVJBVE9SOicgcHJlZml4IG1heSBiZSBvbWl0dGVkLCBpbiB3aGljaCBjYXNlIHRoZSBzdWJzdGl0dXRpb24Kd2lsbCBiZSBhdHRlbXB0ZWQgZm9yIGV2ZXJ5IGl0ZXJhdG9yIGV4cGFuc2lvbi4KCh8KRmlsZTogZ2NjaW50LmluZm8sICBOb2RlOiBFeGFtcGxlcywgIFByZXY6IFN1YnN0aXR1dGlvbnMsICBVcDogTW9kZSBJdGVyYXRvcnMKCjE0LjIyLjEuMyBNb2RlIEl0ZXJhdG9yIEV4YW1wbGVzCi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCgpIZXJlIGlzIGFuIGV4YW1wbGUgZnJvbSB0aGUgTUlQUyBwb3J0LiAgSXQgZGVmaW5lcyB0aGUgZm9sbG93aW5nIG1vZGVzCmFuZCBhdHRyaWJ1dGVzIChhbW9uZyBvdGhlcnMpOgoKICAgICAoZGVmaW5lX21vZGVfaXRlcmF0b3IgR1BSIFtTSSAoREkgIlRBUkdFVF82NEJJVCIpXSkKICAgICAoZGVmaW5lX21vZGVfYXR0ciBkIFsoU0kgIiIpIChESSAiZCIpXSkKCiBhbmQgdXNlcyB0aGUgZm9sbG93aW5nIHRlbXBsYXRlIHRvIGRlZmluZSBib3RoICdzdWJzaTMnIGFuZCAnc3ViZGkzJzoKCiAgICAgKGRlZmluZV9pbnNuICJzdWI8bW9kZT4zIgogICAgICAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6R1BSIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9ZCIpCiAgICAgICAgICAgICAobWludXM6R1BSIChtYXRjaF9vcGVyYW5kOkdQUiAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiZCIpCiAgICAgICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOkdQUiAyICJyZWdpc3Rlcl9vcGVyYW5kIiAiZCIpKSldCiAgICAgICAiIgogICAgICAgIjxkPnN1YnVcdCUwLCUxLCUyIgogICAgICAgWyhzZXRfYXR0ciAidHlwZSIgImFyaXRoIikKICAgICAgICAoc2V0X2F0dHIgIm1vZGUiICI8TU9ERT4iKV0pCgogVGhpcyBpcyBleGFjdGx5IGVxdWl2YWxlbnQgdG86CgogICAgIChkZWZpbmVfaW5zbiAic3Vic2kzIgogICAgICAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1kIikKICAgICAgICAgICAgIChtaW51czpTSSAobWF0Y2hfb3BlcmFuZDpTSSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiZCIpCiAgICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6U0kgMiAicmVnaXN0ZXJfb3BlcmFuZCIgImQiKSkpXQogICAgICAgIiIKICAgICAgICJzdWJ1XHQlMCwlMSwlMiIKICAgICAgIFsoc2V0X2F0dHIgInR5cGUiICJhcml0aCIpCiAgICAgICAgKHNldF9hdHRyICJtb2RlIiAiU0kiKV0pCgogICAgIChkZWZpbmVfaW5zbiAic3ViZGkzIgogICAgICAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6REkgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1kIikKICAgICAgICAgICAgIChtaW51czpESSAobWF0Y2hfb3BlcmFuZDpESSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiZCIpCiAgICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6REkgMiAicmVnaXN0ZXJfb3BlcmFuZCIgImQiKSkpXQogICAgICAgIiIKICAgICAgICJkc3VidVx0JTAsJTEsJTIiCiAgICAgICBbKHNldF9hdHRyICJ0eXBlIiAiYXJpdGgiKQogICAgICAgIChzZXRfYXR0ciAibW9kZSIgIkRJIildKQoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IENvZGUgSXRlcmF0b3JzLCAgUHJldjogTW9kZSBJdGVyYXRvcnMsICBVcDogSXRlcmF0b3JzCgoxNC4yMi4yIENvZGUgSXRlcmF0b3JzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCkNvZGUgaXRlcmF0b3JzIG9wZXJhdGUgaW4gYSBzaW1pbGFyIHdheSB0byBtb2RlIGl0ZXJhdG9ycy4gICpOb3RlIE1vZGUKSXRlcmF0b3JzOjouCgogVGhlIGNvbnN0cnVjdDoKCiAgICAgKGRlZmluZV9jb2RlX2l0ZXJhdG9yIE5BTUUgWyhDT0RFMSAiQ09ORDEiKSAuLi4gKENPREVOICJDT05ETiIpXSkKCiBkZWZpbmVzIGEgcHNldWRvIHJ0eCBjb2RlIE5BTUUgdGhhdCBjYW4gYmUgaW5zdGFudGlhdGVkIGFzIENPREVJIGlmCmNvbmRpdGlvbiBDT05ESSBpcyB0cnVlLiAgRWFjaCBDT0RFSSBtdXN0IGhhdmUgdGhlIHNhbWUgcnR4IGZvcm1hdC4KKk5vdGUgUlRMIENsYXNzZXM6Oi4KCiBBcyB3aXRoIG1vZGUgaXRlcmF0b3JzLCBlYWNoIHBhdHRlcm4gdGhhdCB1c2VzIE5BTUUgd2lsbCBiZSBleHBhbmRlZCBOCnRpbWVzLCBvbmNlIHdpdGggYWxsIHVzZXMgb2YgTkFNRSByZXBsYWNlZCBieSBDT0RFMSwgb25jZSB3aXRoIGFsbCB1c2VzCnJlcGxhY2VkIGJ5IENPREUyLCBhbmQgc28gb24uICAqTm90ZSBEZWZpbmluZyBNb2RlIEl0ZXJhdG9yczo6LgoKIEl0IGlzIHBvc3NpYmxlIHRvIGRlZmluZSBhdHRyaWJ1dGVzIGZvciBjb2RlcyBhcyB3ZWxsIGFzIGZvciBtb2Rlcy4KVGhlcmUgYXJlIHR3byBzdGFuZGFyZCBjb2RlIGF0dHJpYnV0ZXM6ICdjb2RlJywgdGhlIG5hbWUgb2YgdGhlIGNvZGUgaW4KbG93ZXIgY2FzZSwgYW5kICdDT0RFJywgdGhlIG5hbWUgb2YgdGhlIGNvZGUgaW4gdXBwZXIgY2FzZS4gIE90aGVyCmF0dHJpYnV0ZXMgYXJlIGRlZmluZWQgdXNpbmc6CgogICAgIChkZWZpbmVfY29kZV9hdHRyIE5BTUUgWyhDT0RFMSAiVkFMVUUxIikgLi4uIChDT0RFTiAiVkFMVUVOIildKQoKIEhlcmUncyBhbiBleGFtcGxlIG9mIGNvZGUgaXRlcmF0b3JzIGluIGFjdGlvbiwgdGFrZW4gZnJvbSB0aGUgTUlQUwpwb3J0OgoKICAgICAoZGVmaW5lX2NvZGVfaXRlcmF0b3IgYW55X2NvbmQgW3Vub3JkZXJlZCBvcmRlcmVkIHVubHQgdW5nZSB1bmVxIGx0Z3QgdW5sZSB1bmd0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcSBuZSBndCBnZSBsdCBsZSBndHUgZ2V1IGx0dSBsZXVdKQoKICAgICAoZGVmaW5lX2V4cGFuZCAiYjxjb2RlPiIKICAgICAgIFsoc2V0IChwYykKICAgICAgICAgICAgIChpZl90aGVuX2Vsc2UgKGFueV9jb25kOkNDIChjYzApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3RfaW50IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAobGFiZWxfcmVmIChtYXRjaF9vcGVyYW5kIDAgIiIpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAocGMpKSldCiAgICAgICAiIgogICAgIHsKICAgICAgIGdlbl9jb25kaXRpb25hbF9icmFuY2ggKG9wZXJhbmRzLCA8Q09ERT4pOwogICAgICAgRE9ORTsKICAgICB9KQoKIFRoaXMgaXMgZXF1aXZhbGVudCB0bzoKCiAgICAgKGRlZmluZV9leHBhbmQgImJ1bm9yZGVyZWQiCiAgICAgICBbKHNldCAocGMpCiAgICAgICAgICAgICAoaWZfdGhlbl9lbHNlICh1bm9yZGVyZWQ6Q0MgKGNjMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3RfaW50IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAobGFiZWxfcmVmIChtYXRjaF9vcGVyYW5kIDAgIiIpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAocGMpKSldCiAgICAgICAiIgogICAgIHsKICAgICAgIGdlbl9jb25kaXRpb25hbF9icmFuY2ggKG9wZXJhbmRzLCBVTk9SREVSRUQpOwogICAgICAgRE9ORTsKICAgICB9KQoKICAgICAoZGVmaW5lX2V4cGFuZCAiYm9yZGVyZWQiCiAgICAgICBbKHNldCAocGMpCiAgICAgICAgICAgICAoaWZfdGhlbl9lbHNlIChvcmRlcmVkOkNDIChjYzApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdF9pbnQgMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgIChsYWJlbF9yZWYgKG1hdGNoX29wZXJhbmQgMCAiIikpCiAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYykpKV0KICAgICAgICIiCiAgICAgewogICAgICAgZ2VuX2NvbmRpdGlvbmFsX2JyYW5jaCAob3BlcmFuZHMsIE9SREVSRUQpOwogICAgICAgRE9ORTsKICAgICB9KQoKICAgICAuLi4KCh8KRmlsZTogZ2NjaW50LmluZm8sICBOb2RlOiBUYXJnZXQgTWFjcm9zLCAgTmV4dDogSG9zdCBDb25maWcsICBQcmV2OiBNYWNoaW5lIERlc2MsICBVcDogVG9wCgoxNSBUYXJnZXQgRGVzY3JpcHRpb24gTWFjcm9zIGFuZCBGdW5jdGlvbnMKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgpJbiBhZGRpdGlvbiB0byB0aGUgZmlsZSAnTUFDSElORS5tZCcsIGEgbWFjaGluZSBkZXNjcmlwdGlvbiBpbmNsdWRlcyBhIEMKaGVhZGVyIGZpbGUgY29udmVudGlvbmFsbHkgZ2l2ZW4gdGhlIG5hbWUgJ01BQ0hJTkUuaCcgYW5kIGEgQyBzb3VyY2UKZmlsZSBuYW1lZCAnTUFDSElORS5jJy4gIFRoZSBoZWFkZXIgZmlsZSBkZWZpbmVzIG51bWVyb3VzIG1hY3JvcyB0aGF0CmNvbnZleSB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHRhcmdldCBtYWNoaW5lIHRoYXQgZG9lcyBub3QgZml0IGludG8KdGhlIHNjaGVtZSBvZiB0aGUgJy5tZCcgZmlsZS4gIFRoZSBmaWxlICd0bS5oJyBzaG91bGQgYmUgYSBsaW5rIHRvCidNQUNISU5FLmgnLiAgVGhlIGhlYWRlciBmaWxlICdjb25maWcuaCcgaW5jbHVkZXMgJ3RtLmgnIGFuZCBtb3N0CmNvbXBpbGVyIHNvdXJjZSBmaWxlcyBpbmNsdWRlICdjb25maWcuaCcuICBUaGUgc291cmNlIGZpbGUgZGVmaW5lcyBhCnZhcmlhYmxlICd0YXJnZXRtJywgd2hpY2ggaXMgYSBzdHJ1Y3R1cmUgY29udGFpbmluZyBwb2ludGVycyB0bwpmdW5jdGlvbnMgYW5kIGRhdGEgcmVsYXRpbmcgdG8gdGhlIHRhcmdldCBtYWNoaW5lLiAgJ01BQ0hJTkUuYycgc2hvdWxkCmFsc28gY29udGFpbiB0aGVpciBkZWZpbml0aW9ucywgaWYgdGhleSBhcmUgbm90IGRlZmluZWQgZWxzZXdoZXJlIGluCkdDQywgYW5kIG90aGVyIGZ1bmN0aW9ucyBjYWxsZWQgdGhyb3VnaCB0aGUgbWFjcm9zIGRlZmluZWQgaW4gdGhlICcuaCcKZmlsZS4KCiogTWVudToKCiogVGFyZ2V0IFN0cnVjdHVyZTo6ICAgIFRoZSAndGFyZ2V0bScgdmFyaWFibGUuCiogRHJpdmVyOjogICAgICAgICAgICAgIENvbnRyb2xsaW5nIGhvdyB0aGUgZHJpdmVyIHJ1bnMgdGhlIGNvbXBpbGF0aW9uIHBhc3Nlcy4KKiBSdW4tdGltZSBUYXJnZXQ6OiAgICAgRGVmaW5pbmcgJy1tJyBvcHRpb25zIGxpa2UgJy1tNjgwMDAnIGFuZCAnLW02ODAyMCcuCiogUGVyLUZ1bmN0aW9uIERhdGE6OiAgIERlZmluaW5nIGRhdGEgc3RydWN0dXJlcyBmb3IgcGVyLWZ1bmN0aW9uIGluZm9ybWF0aW9uLgoqIFN0b3JhZ2UgTGF5b3V0OjogICAgICBEZWZpbmluZyBzaXplcyBhbmQgYWxpZ25tZW50cyBvZiBkYXRhLgoqIFR5cGUgTGF5b3V0OjogICAgICAgICBEZWZpbmluZyBzaXplcyBhbmQgcHJvcGVydGllcyBvZiBiYXNpYyB1c2VyIGRhdGEgdHlwZXMuCiogUmVnaXN0ZXJzOjogICAgICAgICAgIE5hbWluZyBhbmQgZGVzY3JpYmluZyB0aGUgaGFyZHdhcmUgcmVnaXN0ZXJzLgoqIFJlZ2lzdGVyIENsYXNzZXM6OiAgICBEZWZpbmluZyB0aGUgY2xhc3NlcyBvZiBoYXJkd2FyZSByZWdpc3RlcnMuCiogT2xkIENvbnN0cmFpbnRzOjogICAgIFRoZSBvbGQgd2F5IHRvIGRlZmluZSBtYWNoaW5lLXNwZWNpZmljIGNvbnN0cmFpbnRzLgoqIFN0YWNrIGFuZCBDYWxsaW5nOjogICBEZWZpbmluZyB3aGljaCB3YXkgdGhlIHN0YWNrIGdyb3dzIGFuZCBieSBob3cgbXVjaC4KKiBWYXJhcmdzOjoJCURlZmluaW5nIHRoZSB2YXJhcmdzIG1hY3Jvcy4KKiBUcmFtcG9saW5lczo6ICAgICAgICAgQ29kZSBzZXQgdXAgYXQgcnVuIHRpbWUgdG8gZW50ZXIgYSBuZXN0ZWQgZnVuY3Rpb24uCiogTGlicmFyeSBDYWxsczo6ICAgICAgIENvbnRyb2xsaW5nIGhvdyBsaWJyYXJ5IHJvdXRpbmVzIGFyZSBpbXBsaWNpdGx5IGNhbGxlZC4KKiBBZGRyZXNzaW5nIE1vZGVzOjogICAgRGVmaW5pbmcgYWRkcmVzc2luZyBtb2RlcyB2YWxpZCBmb3IgbWVtb3J5IG9wZXJhbmRzLgoqIEFuY2hvcmVkIEFkZHJlc3Nlczo6ICBEZWZpbmluZyBob3cgJy1mc2VjdGlvbi1hbmNob3JzJyBzaG91bGQgd29yay4KKiBDb25kaXRpb24gQ29kZTo6ICAgICAgRGVmaW5pbmcgaG93IGluc25zIHVwZGF0ZSB0aGUgY29uZGl0aW9uIGNvZGUuCiogQ29zdHM6OiAgICAgICAgICAgICAgIERlZmluaW5nIHJlbGF0aXZlIGNvc3RzIG9mIGRpZmZlcmVudCBvcGVyYXRpb25zLgoqIFNjaGVkdWxpbmc6OiAgICAgICAgICBBZGp1c3RpbmcgdGhlIGJlaGF2aW9yIG9mIHRoZSBpbnN0cnVjdGlvbiBzY2hlZHVsZXIuCiogU2VjdGlvbnM6OiAgICAgICAgICAgIERpdmlkaW5nIHN0b3JhZ2UgaW50byB0ZXh0LCBkYXRhLCBhbmQgb3RoZXIgc2VjdGlvbnMuCiogUElDOjoJCQlNYWNyb3MgZm9yIHBvc2l0aW9uIGluZGVwZW5kZW50IGNvZGUuCiogQXNzZW1ibGVyIEZvcm1hdDo6ICAgIERlZmluaW5nIGhvdyB0byB3cml0ZSBpbnNucyBhbmQgcHNldWRvLW9wcyB0byBvdXRwdXQuCiogRGVidWdnaW5nIEluZm86OiAgICAgIERlZmluaW5nIHRoZSBmb3JtYXQgb2YgZGVidWdnaW5nIG91dHB1dC4KKiBGbG9hdGluZyBQb2ludDo6ICAgICAgSGFuZGxpbmcgZmxvYXRpbmcgcG9pbnQgZm9yIGNyb3NzLWNvbXBpbGVycy4KKiBNb2RlIFN3aXRjaGluZzo6ICAgICAgSW5zZXJ0aW9uIG9mIG1vZGUtc3dpdGNoaW5nIGluc3RydWN0aW9ucy4KKiBUYXJnZXQgQXR0cmlidXRlczo6ICAgRGVmaW5pbmcgdGFyZ2V0LXNwZWNpZmljIHVzZXMgb2YgJ19fYXR0cmlidXRlX18nLgoqIE1JUFMgQ29wcm9jZXNzb3JzOjogICBNSVBTIGNvcHJvY2Vzc29yIHN1cHBvcnQgYW5kIGhvdyB0byBjdXN0b21pemUgaXQuCiogUENIIFRhcmdldDo6ICAgICAgICAgIFZhbGlkaXR5IGNoZWNraW5nIGZvciBwcmVjb21waWxlZCBoZWFkZXJzLgoqIEMrKyBBQkk6OiAgICAgICAgICAgICBDb250cm9sbGluZyBDKysgQUJJIGNoYW5nZXMuCiogTWlzYzo6ICAgICAgICAgICAgICAgIEV2ZXJ5dGhpbmcgZWxzZS4KCh8KRmlsZTogZ2NjaW50LmluZm8sICBOb2RlOiBUYXJnZXQgU3RydWN0dXJlLCAgTmV4dDogRHJpdmVyLCAgVXA6IFRhcmdldCBNYWNyb3MKCjE1LjEgVGhlIEdsb2JhbCAndGFyZ2V0bScgVmFyaWFibGUKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKIC0tIFZhcmlhYmxlOiBzdHJ1Y3QgZ2NjX3RhcmdldCB0YXJnZXRtCiAgICAgVGhlIHRhcmdldCAnLmMnIGZpbGUgbXVzdCBkZWZpbmUgdGhlIGdsb2JhbCAndGFyZ2V0bScgdmFyaWFibGUKICAgICB3aGljaCBjb250YWlucyBwb2ludGVycyB0byBmdW5jdGlvbnMgYW5kIGRhdGEgcmVsYXRpbmcgdG8gdGhlCiAgICAgdGFyZ2V0IG1hY2hpbmUuICBUaGUgdmFyaWFibGUgaXMgZGVjbGFyZWQgaW4gJ3RhcmdldC5oJzsKICAgICAndGFyZ2V0LWRlZi5oJyBkZWZpbmVzIHRoZSBtYWNybyAnVEFSR0VUX0lOSVRJQUxJWkVSJyB3aGljaCBpcyB1c2VkCiAgICAgdG8gaW5pdGlhbGl6ZSB0aGUgdmFyaWFibGUsIGFuZCBtYWNyb3MgZm9yIHRoZSBkZWZhdWx0IGluaXRpYWxpemVycwogICAgIGZvciBlbGVtZW50cyBvZiB0aGUgc3RydWN0dXJlLiAgVGhlICcuYycgZmlsZSBzaG91bGQgb3ZlcnJpZGUgdGhvc2UKICAgICBtYWNyb3MgZm9yIHdoaWNoIHRoZSBkZWZhdWx0IGRlZmluaXRpb24gaXMgaW5hcHByb3ByaWF0ZS4gIEZvcgogICAgIGV4YW1wbGU6CiAgICAgICAgICAjaW5jbHVkZSAidGFyZ2V0LmgiCiAgICAgICAgICAjaW5jbHVkZSAidGFyZ2V0LWRlZi5oIgoKICAgICAgICAgIC8qIEluaXRpYWxpemUgdGhlIEdDQyB0YXJnZXQgc3RydWN0dXJlLiAgKi8KCiAgICAgICAgICAjdW5kZWYgVEFSR0VUX0NPTVBfVFlQRV9BVFRSSUJVVEVTCiAgICAgICAgICAjZGVmaW5lIFRBUkdFVF9DT01QX1RZUEVfQVRUUklCVVRFUyBNQUNISU5FX2NvbXBfdHlwZV9hdHRyaWJ1dGVzCgogICAgICAgICAgc3RydWN0IGdjY190YXJnZXQgdGFyZ2V0bSA9IFRBUkdFVF9JTklUSUFMSVpFUjsKCiBXaGVyZSBhIG1hY3JvIHNob3VsZCBiZSBkZWZpbmVkIGluIHRoZSAnLmMnIGZpbGUgaW4gdGhpcyBtYW5uZXIgdG8gZm9ybQpwYXJ0IG9mIHRoZSAndGFyZ2V0bScgc3RydWN0dXJlLCBpdCBpcyBkb2N1bWVudGVkIGJlbG93IGFzIGEgIlRhcmdldApIb29rIiB3aXRoIGEgcHJvdG90eXBlLiAgTWFueSBtYWNyb3Mgd2lsbCBjaGFuZ2UgaW4gZnV0dXJlIGZyb20gYmVpbmcKZGVmaW5lZCBpbiB0aGUgJy5oJyBmaWxlIHRvIGJlaW5nIHBhcnQgb2YgdGhlICd0YXJnZXRtJyBzdHJ1Y3R1cmUuCgofCkZpbGU6IGdjY2ludC5pbmZvLCAgTm9kZTogRHJpdmVyLCAgTmV4dDogUnVuLXRpbWUgVGFyZ2V0LCAgUHJldjogVGFyZ2V0IFN0cnVjdHVyZSwgIFVwOiBUYXJnZXQgTWFjcm9zCgoxNS4yIENvbnRyb2xsaW5nIHRoZSBDb21waWxhdGlvbiBEcml2ZXIsICdnY2MnCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCllvdSBjYW4gY29udHJvbCB0aGUgY29tcGlsYXRpb24gZHJpdmVyLgoKIC0tIE1hY3JvOiBTV0lUQ0hfVEFLRVNfQVJHIChDSEFSKQogICAgIEEgQyBleHByZXNzaW9uIHdoaWNoIGRldGVybWluZXMgd2hldGhlciB0aGUgb3B0aW9uICctQ0hBUicgdGFrZXMKICAgICBhcmd1bWVudHMuICBUaGUgdmFsdWUgc2hvdWxkIGJlIHRoZSBudW1iZXIgb2YgYXJndW1lbnRzIHRoYXQgb3B0aW9uCiAgICAgdGFrZXMtemVybywgZm9yIG1hbnkgb3B0aW9ucy4KCiAgICAgQnkgZGVmYXVsdCwgdGhpcyBtYWNybyBpcyBkZWZpbmVkIGFzICdERUZBVUxUX1NXSVRDSF9UQUtFU19BUkcnLAogICAgIHdoaWNoIGhhbmRsZXMgdGhlIHN0YW5kYXJkIG9wdGlvbnMgcHJvcGVybHkuICBZb3UgbmVlZCBub3QgZGVmaW5lCiAgICAgJ1NXSVRDSF9UQUtFU19BUkcnIHVubGVzcyB5b3Ugd2lzaCB0byBhZGQgYWRkaXRpb25hbCBvcHRpb25zIHdoaWNoCiAgICAgdGFrZSBhcmd1bWVudHMuICBBbnkgcmVkZWZpbml0aW9uIHNob3VsZCBjYWxsCiAgICAgJ0RFRkFVTFRfU1dJVENIX1RBS0VTX0FSRycgYW5kIHRoZW4gY2hlY2sgZm9yIGFkZGl0aW9uYWwgb3B0aW9ucy4KCiAtLSBNYWNybzogV09SRF9TV0lUQ0hfVEFLRVNfQVJHIChOQU1FKQogICAgIEEgQyBleHByZXNzaW9uIHdoaWNoIGRldGVybWluZXMgd2hldGhlciB0aGUgb3B0aW9uICctTkFNRScgdGFrZXMKICAgICBhcmd1bWVudHMuICBUaGUgdmFsdWUgc2hvdWxkIGJlIHRoZSBudW1iZXIgb2YgYXJndW1lbnRzIHRoYXQgb3B0aW9uCiAgICAgdGFrZXMtemVybywgZm9yIG1hbnkgb3B0aW9ucy4gIFRoaXMgbWFjcm8gcmF0aGVyIHRoYW4KICAgICAnU1dJVENIX1RBS0VTX0FSRycgaXMgdXNlZCBmb3IgbXVsdGktY2hhcmFjdGVyIG9wdGlvbiBuYW1lcy4KCiAgICAgQnkgZGVmYXVsdCwgdGhpcyBtYWNybyBpcyBkZWZpbmVkIGFzCiAgICAgJ0RFRkFVTFRfV09SRF9TV0lUQ0hfVEFLRVNfQVJHJywgd2hpY2ggaGFuZGxlcyB0aGUgc3RhbmRhcmQgb3B0aW9ucwogICAgIHByb3Blcmx5LiAgWW91IG5lZWQgbm90IGRlZmluZSAnV09SRF9TV0lUQ0hfVEFLRVNfQVJHJyB1bmxlc3MgeW91CiAgICAgd2lzaCB0byBhZGQgYWRkaXRpb25hbCBvcHRpb25zIHdoaWNoIHRha2UgYXJndW1lbnRzLiAgQW55CiAgICAgcmVkZWZpbml0aW9uIHNob3VsZCBjYWxsICdERUZBVUxUX1dPUkRfU1dJVENIX1RBS0VTX0FSRycgYW5kIHRoZW4KICAgICBjaGVjayBmb3IgYWRkaXRpb25hbCBvcHRpb25zLgoKIC0tIE1hY3JvOiBTV0lUQ0hfQ1VSVEFJTFNfQ09NUElMQVRJT04gKENIQVIpCiAgICAgQSBDIGV4cHJlc3Npb24gd2hpY2ggZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBvcHRpb24gJy1DSEFSJyBzdG9wcwogICAgIGNvbXBpbGF0aW9uIGJlZm9yZSB0aGUgZ2VuZXJhdGlvbiBvZiBhbiBleGVjdXRhYmxlLiAgVGhlIHZhbHVlIGlzCiAgICAgYm9vbGVhbiwgbm9uemVybyBpZiB0aGUgb3B0aW9uIGRvZXMgc3RvcCBhbiBleGVjdXRhYmxlIGZyb20gYmVpbmcKICAgICBnZW5lcmF0ZWQsIHplcm8gb3RoZXJ3aXNlLgoKICAgICBCeSBkZWZhdWx0LCB0aGlzIG1hY3JvIGlzIGRlZmluZWQgYXMKICAgICAnREVGQVVMVF9TV0lUQ0hfQ1VSVEFJTFNfQ09NUElMQVRJT04nLCB3aGljaCBoYW5kbGVzIHRoZSBzdGFuZGFyZAogICAgIG9wdGlvbnMgcHJvcGVybHkuICBZb3UgbmVlZCBub3QgZGVmaW5lCiAgICAgJ1NXSVRDSF9DVVJUQUlMU19DT01QSUxBVElPTicgdW5sZXNzIHlvdSB3aXNoIHRvIGFkZCBhZGRpdGlvbmFsCiAgICAgb3B0aW9ucyB3aGljaCBhZmZlY3QgdGhlIGdlbmVyYXRpb24gb2YgYW4gZXhlY3V0YWJsZS4gIEFueQogICAgIHJlZGVmaW5pdGlvbiBzaG91bGQgY2FsbCAnREVGQVVMVF9TV0lUQ0hfQ1VSVEFJTFNfQ09NUElMQVRJT04nIGFuZAogICAgIHRoZW4gY2hlY2sgZm9yIGFkZGl0aW9uYWwgb3B0aW9ucy4KCiAtLSBNYWNybzogU1dJVENIRVNfTkVFRF9TUEFDRVMKICAgICBBIHN0cmluZy12YWx1ZWQgQyBleHByZXNzaW9uIHdoaWNoIGVudW1lcmF0ZXMgdGhlIG9wdGlvbnMgZm9yIHdoaWNoCiAgICAgdGhlIGxpbmtlciBuZWVkcyBhIHNwYWNlIGJldHdlZW4gdGhlIG9wdGlvbiBhbmQgaXRzIGFyZ3VtZW50LgoKICAgICBJZiB0aGlzIG1hY3JvIGlzIG5vdCBkZWZpbmVkLCB0aGUgZGVmYXVsdCB2YWx1ZSBpcyAnIiInLgoKIC0tIE1hY3JvOiBUQVJHRVRfT1BUSU9OX1RSQU5TTEFURV9UQUJMRQogICAgIElmIGRlZmluZWQsIGEgbGlzdCBvZiBwYWlycyBvZiBzdHJpbmdzLCB0aGUgZmlyc3Qgb2Ygd2hpY2ggaXMgYQogICAgIHBvdGVudGlhbCBjb21tYW5kIGxpbmUgdGFyZ2V0IHRvIHRoZSAnZ2NjJyBkcml2ZXIgcHJvZ3JhbSwgYW5kIHRoZQogICAgIHNlY29uZCBvZiB3aGljaCBpcyBhIHNwYWNlLXNlcGFyYXRlZCAodGFicyBhbmQgb3RoZXIgd2hpdGVzcGFjZSBhcmUKICAgICBub3Qgc3VwcG9ydGVkKSBsaXN0IG9mIG9wdGlvbnMgd2l0aCB3aGljaCB0byByZXBsYWNlIHRoZSBmaXJzdAogICAgIG9wdGlvbi4gIFRoZSB0YXJnZXQgZGVmaW5pbmcgdGhpcyBsaXN0IGlzIHJlc3BvbnNpYmxlIGZvciBhc3N1cmluZwogICAgIHRoYXQgdGhlIHJlc3VsdHMgYXJlIHZhbGlkLiAgUmVwbGFjZW1lbnQgb3B0aW9ucyBtYXkgbm90IGJlIHRoZQogICAgICctLW9wdCcgc3R5bGUsIHRoZXkgbXVzdCBiZSB0aGUgJy1vcHQnIHN0eWxlLiAgSXQgaXMgdGhlIGludGVudGlvbgogICAgIG9mIHRoaXMgbWFjcm8gdG8gcHJvdmlkZSBhIG1lY2hhbmlzbSBmb3Igc3Vic3RpdHV0aW9uIHRoYXQgYWZmZWN0cwogICAgIHRoZSBtdWx0aWxpYnMgY2hvc2VuLCBzdWNoIGFzIG9uZSBvcHRpb24gdGhhdCBlbmFibGVzIG1hbnkgb3B0aW9ucywKICAgICBzb21lIG9mIHdoaWNoIHNlbGVjdCBtdWx0aWxpYnMuICBFeGFtcGxlIG5vbnNlbnNpY2FsIGRlZmluaXRpb24sCiAgICAgd2hlcmUgJy1tYWx0LWFiaScsICctRUInLCBhbmQgJy1tc3BvbycgY2F1c2UgZGlmZmVyZW50IG11bHRpbGlicyB0bwogICAgIGJlIGNob3NlbjoKCiAgICAgICAgICAjZGVmaW5lIFRBUkdFVF9PUFRJT05fVFJBTlNMQVRFX1RBQkxFIFwKICAgICAgICAgIHsgIi1mYXN0IiwgICAiLW1hcmNoPWZhc3QtZm9vIC1tYWx0LWFiaSAtSS91c3IvZmFzdC1mb28iIH0sIFwKICAgICAgICAgIHsgIi1jb21wYXQiLCAiLUVCIC1tYWxpZ249NCAtbXNwb28iIH0KCiAtLSBNYWNybzogRFJJVkVSX1NFTEZfU1BFQ1MKICAgICBBIGxpc3Qgb2Ygc3BlY3MgZm9yIHRoZSBkcml2ZXIgaXRzZWxmLiAgSXQgc2hvdWxkIGJlIGEgc3VpdGFibGUKICAgICBpbml0aWFsaXplciBmb3IgYW4gYXJyYXkgb2Ygc3RyaW5ncywgd2l0aCBubyBzdXJyb3VuZGluZyBicmFjZXMuCgogICAgIFRoZSBkcml2ZXIgYXBwbGllcyB0aGVzZSBzcGVjcyB0byBpdHMgb3duIGNvbW1hbmQgbGluZSBiZXR3ZWVuCiAgICAgbG9hZGluZyBkZWZhdWx0ICdzcGVjcycgZmlsZXMgKGJ1dCBub3QgY29tbWFuZC1saW5lIHNwZWNpZmllZCBvbmVzKQogICAgIGFuZCBjaG9vc2luZyB0aGUgbXVsdGlsaWIgZGlyZWN0b3J5IG9yIHJ1bm5pbmcgYW55IHN1YmNvbW1hbmRzLiAgSXQKICAgICBhcHBsaWVzIHRoZW0gaW4gdGhlIG9yZGVyIGdpdmVuLCBzbyBlYWNoIHNwZWMgY2FuIGRlcGVuZCBvbiB0aGUKICAgICBvcHRpb25zIGFkZGVkIGJ5IGVhcmxpZXIgb25lcy4gIEl0IGlzIGFsc28gcG9zc2libGUgdG8gcmVtb3ZlCiAgICAgb3B0aW9ucyB1c2luZyAnJTxPUFRJT04nIGluIHRoZSB1c3VhbCB3YXkuCgogICAgIFRoaXMgbWFjcm8gY2FuIGJlIHVzZWZ1bCB3aGVuIGEgcG9ydCBoYXMgc2V2ZXJhbCBpbnRlcmRlcGVuZGVudAogICAgIHRhcmdldCBvcHRpb25zLiAgSXQgcHJvdmlkZXMgYSB3YXkgb2Ygc3RhbmRhcmRpemluZyB0aGUgY29tbWFuZAogICAgIGxpbmUgc28gdGhhdCB0aGUgb3RoZXIgc3BlY3MgYXJlIGVhc2llciB0byB3cml0ZS4KCiAgICAgRG8gbm90IGRlZmluZSB0aGlzIG1hY3JvIGlmIGl0IGRvZXMgbm90IG5lZWQgdG8gZG8gYW55dGhpbmcuCgogLS0gTWFjcm86IE9QVElPTl9ERUZBVUxUX1NQRUNTCiAgICAgQSBsaXN0IG9mIHNwZWNzIHVzZWQgdG8gc3VwcG9ydCBjb25maWd1cmUtdGltZSBkZWZhdWx0IG9wdGlvbnMKICAgICAoaS5lLiAnLS13aXRoJyBvcHRpb25zKSBpbiB0aGUgZHJpdmVyLiAgSXQgc2hvdWxkIGJlIGEgc3VpdGFibGUKICAgICBpbml0aWFsaXplciBmb3IgYW4gYXJyYXkgb2Ygc3RydWN0dXJlcywgZWFjaCBjb250YWluaW5nIHR3bwogICAgIHN0cmluZ3MsIHdpdGhvdXQgdGhlIG91dGVybW9zdCBwYWlyIG9mIHN1cnJvdW5kaW5nIGJyYWNlcy4KCiAgICAgVGhlIGZpcnN0IGl0ZW0gaW4gdGhlIHBhaXIgaXMgdGhlIG5hbWUgb2YgdGhlIGRlZmF1bHQuICBUaGlzIG11c3QKICAgICBtYXRjaCB0aGUgY29kZSBpbiAnY29uZmlnLmdjYycgZm9yIHRoZSB0YXJnZXQuICBUaGUgc2Vjb25kIGl0ZW0gaXMKICAgICBhIHNwZWMgdG8gYXBwbHkgaWYgYSBkZWZhdWx0IHdpdGggdGhpcyBuYW1lIHdhcyBzcGVjaWZpZWQuICBUaGUKICAgICBzdHJpbmcgJyUoVkFMVUUpJyBpbiB0aGUgc3BlYyB3aWxsIGJlIHJlcGxhY2VkIGJ5IHRoZSB2YWx1ZSBvZiB0aGUKICAgICBkZWZhdWx0IGV2ZXJ5d2hlcmUgaXQgb2NjdXJzLgoKICAgICBUaGUgZHJpdmVyIHdpbGwgYXBwbHkgdGhlc2Ugc3BlY3MgdG8gaXRzIG93biBjb21tYW5kIGxpbmUgYmV0d2VlbgogICAgIGxvYWRpbmcgZGVmYXVsdCAnc3BlY3MnIGZpbGVzIGFuZCBwcm9jZXNzaW5nICdEUklWRVJfU0VMRl9TUEVDUycsCiAgICAgdXNpbmcgdGhlIHNhbWUgbWVjaGFuaXNtIGFzICdEUklWRVJfU0VMRl9TUEVDUycuCgogICAgIERvIG5vdCBkZWZpbmUgdGhpcyBtYWNybyBpZiBpdCBkb2VzIG5vdCBuZWVkIHRvIGRvIGFueXRoaW5nLgoKIC0tIE1hY3JvOiBDUFBfU1BFQwogICAgIEEgQyBzdHJpbmcgY29uc3RhbnQgdGhhdCB0ZWxscyB0aGUgR0NDIGRyaXZlciBwcm9ncmFtIG9wdGlvbnMgdG8KICAgICBwYXNzIHRvIENQUC4gIEl0IGNhbiBhbHNvIHNwZWNpZnkgaG93IHRvIHRyYW5zbGF0ZSBvcHRpb25zIHlvdSBnaXZlCiAgICAgdG8gR0NDIGludG8gb3B0aW9ucyBmb3IgR0NDIHRvIHBhc3MgdG8gdGhlIENQUC4KCiAgICAgRG8gbm90IGRlZmluZSB0aGlzIG1hY3JvIGlmIGl0IGRvZXMgbm90IG5lZWQgdG8gZG8gYW55dGhpbmcuCgogLS0gTWFjcm86IENQTFVTUExVU19DUFBfU1BFQwogICAgIFRoaXMgbWFjcm8gaXMganVzdCBsaWtlICdDUFBfU1BFQycsIGJ1dCBpcyB1c2VkIGZvciBDKyssIHJhdGhlcgogICAgIHRoYW4gQy4gIElmIHlvdSBkbyBub3QgZGVmaW5lIHRoaXMgbWFjcm8sIHRoZW4gdGhlIHZhbHVlIG9mCiAgICAgJ0NQUF9TUEVDJyAoaWYgYW55KSB3aWxsIGJlIHVzZWQgaW5zdGVhZC4KCiAtLSBNYWNybzogQ0MxX1NQRUMKICAgICBBIEMgc3RyaW5nIGNvbnN0YW50IHRoYXQgdGVsbHMgdGhlIEdDQyBkcml2ZXIgcHJvZ3JhbSBvcHRpb25zIHRvCiAgICAgcGFzcyB0byAnY2MxJywgJ2NjMXBsdXMnLCAnZjc3MScsIGFuZCB0aGUgb3RoZXIgbGFuZ3VhZ2UgZnJvbnQKICAgICBlbmRzLiAgSXQgY2FuIGFsc28gc3BlY2lmeSBob3cgdG8gdHJhbnNsYXRlIG9wdGlvbnMgeW91IGdpdmUgdG8gR0NDCiAgICAgaW50byBvcHRpb25zIGZvciBHQ0MgdG8gcGFzcyB0byBmcm9udCBlbmRzLgoKICAgICBEbyBub3QgZGVmaW5lIHRoaXMgbWFjcm8gaWYgaXQgZG9lcyBub3QgbmVlZCB0byBkbyBhbnl0aGluZy4KCiAtLSBNYWNybzogQ0MxUExVU19TUEVDCiAgICAgQSBDIHN0cmluZyBjb25zdGFudCB0aGF0IHRlbGxzIHRoZSBHQ0MgZHJpdmVyIHByb2dyYW0gb3B0aW9ucyB0bwogICAgIHBhc3MgdG8gJ2NjMXBsdXMnLiAgSXQgY2FuIGFsc28gc3BlY2lmeSBob3cgdG8gdHJhbnNsYXRlIG9wdGlvbnMKICAgICB5b3UgZ2l2ZSB0byBHQ0MgaW50byBvcHRpb25zIGZvciBHQ0MgdG8gcGFzcyB0byB0aGUgJ2NjMXBsdXMnLgoKICAgICBEbyBub3QgZGVmaW5lIHRoaXMgbWFjcm8gaWYgaXQgZG9lcyBub3QgbmVlZCB0byBkbyBhbnl0aGluZy4gIE5vdGUKICAgICB0aGF0IGV2ZXJ5dGhpbmcgZGVmaW5lZCBpbiBDQzFfU1BFQyBpcyBhbHJlYWR5IHBhc3NlZCB0byAnY2MxcGx1cycKICAgICBzbyB0aGVyZSBpcyBubyBuZWVkIHRvIGR1cGxpY2F0ZSB0aGUgY29udGVudHMgb2YgQ0MxX1NQRUMgaW4KICAgICBDQzFQTFVTX1NQRUMuCgogLS0gTWFjcm86IEFTTV9TUEVDCiAgICAgQSBDIHN0cmluZyBjb25zdGFudCB0aGF0IHRlbGxzIHRoZSBHQ0MgZHJpdmVyIHByb2dyYW0gb3B0aW9ucyB0bwogICAgIHBhc3MgdG8gdGhlIGFzc2VtYmxlci4gIEl0IGNhbiBhbHNvIHNwZWNpZnkgaG93IHRvIHRyYW5zbGF0ZQogICAgIG9wdGlvbnMgeW91IGdpdmUgdG8gR0NDIGludG8gb3B0aW9ucyBmb3IgR0NDIHRvIHBhc3MgdG8gdGhlCiAgICAgYXNzZW1ibGVyLiAgU2VlIHRoZSBmaWxlICdzdW4zLmgnIGZvciBhbiBleGFtcGxlIG9mIHRoaXMuCgogICAgIERvIG5vdCBkZWZpbmUgdGhpcyBtYWNybyBpZiBpdCBkb2VzIG5vdCBuZWVkIHRvIGRvIGFueXRoaW5nLgoKIC0tIE1hY3JvOiBBU01fRklOQUxfU1BFQwogICAgIEEgQyBzdHJpbmcgY29uc3RhbnQgdGhhdCB0ZWxscyB0aGUgR0NDIGRyaXZlciBwcm9ncmFtIGhvdyB0byBydW4KICAgICBhbnkgcHJvZ3JhbXMgd2hpY2ggY2xlYW51cCBhZnRlciB0aGUgbm9ybWFsIGFzc2VtYmxlci4gIE5vcm1hbGx5LAogICAgIHRoaXMgaXMgbm90IG5lZWRlZC4gIFNlZSB0aGUgZmlsZSAnbWlwcy5oJyBmb3IgYW4gZXhhbXBsZSBvZiB0aGlzLgoKICAgICBEbyBub3QgZGVmaW5lIHRoaXMgbWFjcm8gaWYgaXQgZG9lcyBub3QgbmVlZCB0byBkbyBhbnl0aGluZy4KCiAtLSBNYWNybzogQVNfTkVFRFNfREFTSF9GT1JfUElQRURfSU5QVVQKICAgICBEZWZpbmUgdGhpcyBtYWNybywgd2l0aCBubyB2YWx1ZSwgaWYgdGhlIGRyaXZlciBzaG91bGQgZ2l2ZSB0aGUKICAgICBhc3NlbWJsZXIgYW4gYXJndW1lbnQgY29uc2lzdGluZyBvZiBhIHNpbmdsZSBkYXNoLCAnLScsIHRvIGluc3RydWN0CiAgICAgaXQgdG8gcmVhZCBmcm9tIGl0cyBzdGFuZGFyZCBpbnB1dCAod2hpY2ggd2lsbCBiZSBhIHBpcGUgY29ubmVjdGVkCiAgICAgdG8gdGhlIG91dHB1dCBvZiB0aGUgY29tcGlsZXIgcHJvcGVyKS4gIFRoaXMgYXJndW1lbnQgaXMgZ2l2ZW4KICAgICBhZnRlciBhbnkgJy1vJyBvcHRpb24gc3BlY2lmeWluZyB0aGUgbmFtZSBvZiB0aGUgb3V0cHV0IGZpbGUuCgogICAgIElmIHlvdSBkbyBub3QgZGVmaW5lIHRoaXMgbWFjcm8sIHRoZSBhc3NlbWJsZXIgaXMgYXNzdW1lZCB0byByZWFkCiAgICAgaXRzIHN0YW5kYXJkIGlucHV0IGlmIGdpdmVuIG5vIG5vbi1vcHRpb24gYXJndW1lbnRzLiAgSWYgeW91cgogICAgIGFzc2VtYmxlciBjYW5ub3QgcmVhZCBzdGFuZGFyZCBpbnB1dCBhdCBhbGwsIHVzZSBhICcle3BpcGU6JWV9JwogICAgIGNvbnN0cnVjdDsgc2VlICdtaXBzLmgnIGZvciBpbnN0YW5jZS4KCiAtLSBNYWNybzogTElOS19TUEVDCiAgICAgQSBDIHN0cmluZyBjb25zdGFudCB0aGF0IHRlbGxzIHRoZSBHQ0MgZHJpdmVyIHByb2dyYW0gb3B0aW9ucyB0bwogICAgIHBhc3MgdG8gdGhlIGxpbmtlci4gIEl0IGNhbiBhbHNvIHNwZWNpZnkgaG93IHRvIHRyYW5zbGF0ZSBvcHRpb25zCiAgICAgeW91IGdpdmUgdG8gR0NDIGludG8gb3B0aW9ucyBmb3IgR0NDIHRvIHBhc3MgdG8gdGhlIGxpbmtlci4KCiAgICAgRG8gbm90IGRlZmluZSB0aGlzIG1hY3JvIGlmIGl0IGRvZXMgbm90IG5lZWQgdG8gZG8gYW55dGhpbmcuCgogLS0gTWFjcm86IExJQl9TUEVDCiAgICAgQW5vdGhlciBDIHN0cmluZyBjb25zdGFudCB1c2VkIG11Y2ggbGlrZSAnTElOS19TUEVDJy4gIFRoZQogICAgIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgdHdvIGlzIHRoYXQgJ0xJQl9TUEVDJyBpcyB1c2VkIGF0IHRoZSBlbmQgb2YKICAgICB0aGUgY29tbWFuZCBnaXZlbiB0byB0aGUgbGlua2VyLgoKICAgICBJZiB0aGlzIG1hY3JvIGlzIG5vdCBkZWZpbmVkLCBhIGRlZmF1bHQgaXMgcHJvdmlkZWQgdGhhdCBsb2FkcyB0aGUKICAgICBzdGFuZGFyZCBDIGxpYnJhcnkgZnJvbSB0aGUgdXN1YWwgcGxhY2UuICBTZWUgJ2djYy5jJy4KCiAtLSBNYWNybzogTElCR0NDX1NQRUMKICAgICBBbm90aGVyIEMgc3RyaW5nIGNvbnN0YW50IHRoYXQgdGVsbHMgdGhlIEdDQyBkcml2ZXIgcHJvZ3JhbSBob3cgYW5kCiAgICAgd2hlbiB0byBwbGFjZSBhIHJlZmVyZW5jZSB0byAnbGliZ2NjLmEnIGludG8gdGhlIGxpbmtlciBjb21tYW5kCiAgICAgbGluZS4gIFRoaXMgY29uc3RhbnQgaXMgcGxhY2VkIGJvdGggYmVmb3JlIGFuZCBhZnRlciB0aGUgdmFsdWUgb2YKICAgICAnTElCX1NQRUMnLgoKICAgICBJZiB0aGlzIG1hY3JvIGlzIG5vdCBkZWZpbmVkLCB0aGUgR0NDIGRyaXZlciBwcm92aWRlcyBhIGRlZmF1bHQKICAgICB0aGF0IHBhc3NlcyB0aGUgc3RyaW5nICctbGdjYycgdG8gdGhlIGxpbmtlci4KCiAtLSBNYWNybzogUkVBTF9MSUJHQ0NfU1BFQwogICAgIEJ5IGRlZmF1bHQsIGlmICdFTkFCTEVfU0hBUkVEX0xJQkdDQycgaXMgZGVmaW5lZCwgdGhlICdMSUJHQ0NfU1BFQycKICAgICBpcyBub3QgZGlyZWN0bHkgdXNlZCBieSB0aGUgZHJpdmVyIHByb2dyYW0gYnV0IGlzIGluc3RlYWQgbW9kaWZpZWQKICAgICB0byByZWZlciB0byBkaWZmZXJlbnQgdmVyc2lvbnMgb2YgJ2xpYmdjYy5hJyBkZXBlbmRpbmcgb24gdGhlCiAgICAgdmFsdWVzIG9mIHRoZSBjb21tYW5kIGxpbmUgZmxhZ3MgJy1zdGF0aWMnLCAnLXNoYXJlZCcsCiAgICAgJy1zdGF0aWMtbGliZ2NjJywgYW5kICctc2hhcmVkLWxpYmdjYycuICBPbiB0YXJnZXRzIHdoZXJlIHRoZXNlCiAgICAgbW9kaWZpY2F0aW9ucyBhcmUgaW5hcHByb3ByaWF0ZSwgZGVmaW5lICdSRUFMX0xJQkdDQ19TUEVDJyBpbnN0ZWFkLgogICAgICdSRUFMX0xJQkdDQ19TUEVDJyB0ZWxscyB0aGUgZHJpdmVyIGhvdyB0byBwbGFjZSBhIHJlZmVyZW5jZSB0bwogICAgICdsaWJnY2MnIG9uIHRoZSBsaW5rIGNvbW1hbmQgbGluZSwgYnV0LCB1bmxpa2UgJ0xJQkdDQ19TUEVDJywgaXQgaXMKICAgICB1c2VkIHVubW9kaWZpZWQuCgogLS0gTWFjcm86IFVTRV9MRF9BU19ORUVERUQKICAgICBBIG1hY3JvIHRoYXQgY29udHJvbHMgdGhlIG1vZGlmaWNhdGlvbnMgdG8gJ0xJQkdDQ19TUEVDJyBtZW50aW9uZWQKICAgICBpbiAnUkVBTF9MSUJHQ0NfU1BFQycuICBJZiBub256ZXJvLCBhIHNwZWMgd2lsbCBiZSBnZW5lcmF0ZWQgdGhhdAogICAgIHVzZXMgLWFzLW5lZWRlZCBhbmQgdGhlIHNoYXJlZCBsaWJnY2MgaW4gcGxhY2Ugb2YgdGhlIHN0YXRpYwogICAgIGV4Y2VwdGlvbiBoYW5kbGVyIGxpYnJhcnksIHdoZW4gbGlua2luZyB3aXRob3V0IGFueSBvZiAnLXN0YXRpYycsCiAgICAgJy1zdGF0aWMtbGliZ2NjJywgb3IgJy1zaGFyZWQtbGliZ2NjJy4KCiAtLSBNYWNybzogTElOS19FSF9TUEVDCiAgICAgSWYgZGVmaW5lZCwgdGhpcyBDIHN0cmluZyBjb25zdGFudCBpcyBhZGRlZCB0byAnTElOS19TUEVDJy4gIFdoZW4KICAgICAnVVNFX0xEX0FTX05FRURFRCcgaXMgemVybyBvciB1bmRlZmluZWQsIGl0IGFsc28gYWZmZWN0cyB0aGUKICAgICBtb2RpZmljYXRpb25zIHRvICdMSUJHQ0NfU1BFQycgbWVudGlvbmVkIGluICdSRUFMX0xJQkdDQ19TUEVDJy4KCiAtLSBNYWNybzogU1RBUlRGSUxFX1NQRUMKICAgICBBbm90aGVyIEMgc3RyaW5nIGNvbnN0YW50IHVzZWQgbXVjaCBsaWtlICdMSU5LX1NQRUMnLiAgVGhlCiAgICAgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB0d28gaXMgdGhhdCAnU1RBUlRGSUxFX1NQRUMnIGlzIHVzZWQgYXQgdGhlCiAgICAgdmVyeSBiZWdpbm5pbmcgb2YgdGhlIGNvbW1hbmQgZ2l2ZW4gdG8gdGhlIGxpbmtlci4KCiAgICAgSWYgdGhpcyBtYWNybyBpcyBub3QgZGVmaW5lZCwgYSBkZWZhdWx0IGlzIHByb3ZpZGVkIHRoYXQgbG9hZHMgdGhlCiAgICAgc3RhbmRhcmQgQyBzdGFydHVwIGZpbGUgZnJvbSB0aGUgdXN1YWwgcGxhY2UuICBTZWUgJ2djYy5jJy4KCiAtLSBNYWNybzogRU5ERklMRV9TUEVDCiAgICAgQW5vdGhlciBDIHN0cmluZyBjb25zdGFudCB1c2VkIG11Y2ggbGlrZSAnTElOS19TUEVDJy4gIFRoZQogICAgIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgdHdvIGlzIHRoYXQgJ0VOREZJTEVfU1BFQycgaXMgdXNlZCBhdCB0aGUKICAgICB2ZXJ5IGVuZCBvZiB0aGUgY29tbWFuZCBnaXZlbiB0byB0aGUgbGlua2VyLgoKICAgICBEbyBub3QgZGVmaW5lIHRoaXMgbWFjcm8gaWYgaXQgZG9lcyBub3QgbmVlZCB0byBkbyBhbnl0aGluZy4KCiAtLSBNYWNybzogVEhSRUFEX01PREVMX1NQRUMKICAgICBHQ0MgJy12JyB3aWxsIHByaW50IHRoZSB0aHJlYWQgbW9kZWwgR0NDIHdhcyBjb25maWd1cmVkIHRvIHVzZS4KICAgICBIb3dldmVyLCB0aGlzIGRvZXNuJ3Qgd29yayBvbiBwbGF0Zm9ybXMgdGhhdCBhcmUgbXVsdGlsaWJiZWQgb24KICAgICB0aHJlYWQgbW9kZWxzLCBzdWNoIGFzIEFJWCA0LjMuICBPbiBzdWNoIHBsYXRmb3JtcywgZGVmaW5lCiAgICAgJ1RIUkVBRF9NT0RFTF9TUEVDJyBzdWNoIHRoYXQgaXQgZXZhbHVhdGVzIHRvIGEgc3RyaW5nIHdpdGhvdXQKICAgICBibGFua3MgdGhhdCBuYW1lcyBvbmUgb2YgdGhlIHJlY29nbml6ZWQgdGhyZWFkIG1vZGVscy4gICclKicsIHRoZQogICAgIGRlZmF1bHQgdmFsdWUgb2YgdGhpcyBtYWNybywgd2lsbCBleHBhbmQgdG8gdGhlIHZhbHVlIG9mCiAgICAgJ3RocmVhZF9maWxlJyBzZXQgaW4gJ2NvbmZpZy5nY2MnLgoKIC0tIE1hY3JvOiBTWVNST09UX1NVRkZJWF9TUEVDCiAgICAgRGVmaW5lIHRoaXMgbWFjcm8gdG8gYWRkIGEgc3VmZml4IHRvIHRoZSB0YXJnZXQgc3lzcm9vdCB3aGVuIEdDQyBpcwogICAgIGNvbmZpZ3VyZWQgd2l0aCBhIHN5c3Jvb3QuICBUaGlzIHdpbGwgY2F1c2UgR0NDIHRvIHNlYXJjaCBmb3IKICAgICB1c3IvbGliLCBldCBhbCwgd2l0aGluIHN5c3Jvb3Qrc3VmZml4LgoKIC0tIE1hY3JvOiBTWVNST09UX0hFQURFUlNfU1VGRklYX1NQRUMKICAgICBEZWZpbmUgdGhpcyBtYWNybyB0byBhZGQgYSBoZWFkZXJzX3N1ZmZpeCB0byB0aGUgdGFyZ2V0IHN5c3Jvb3QKICAgICB3aGVuIEdDQyBpcyBjb25maWd1cmVkIHdpdGggYSBzeXNyb290LiAgVGhpcyB3aWxsIGNhdXNlIEdDQyB0byBwYXNzCiAgICAgdGhlIHVwZGF0ZWQgc3lzcm9vdCtoZWFkZXJzX3N1ZmZpeCB0byBDUFAsIGNhdXNpbmcgaXQgdG8gc2VhcmNoIGZvcgogICAgIHVzci9pbmNsdWRlLCBldCBhbCwgd2l0aGluIHN5c3Jvb3QraGVhZGVyc19zdWZmaXguCgogLS0gTWFjcm86IEVYVFJBX1NQRUNTCiAgICAgRGVmaW5lIHRoaXMgbWFjcm8gdG8gcHJvdmlkZSBhZGRpdGlvbmFsIHNwZWNpZmljYXRpb25zIHRvIHB1dCBpbgogICAgIHRoZSAnc3BlY3MnIGZpbGUgdGhhdCBjYW4gYmUgdXNlZCBpbiB2YXJpb3VzIHNwZWNpZmljYXRpb25zIGxpa2UKICAgICAnQ0MxX1NQRUMnLgoKICAgICBUaGUgZGVmaW5pdGlvbiBzaG91bGQgYmUgYW4gaW5pdGlhbGl6ZXIgZm9yIGFuIGFycmF5IG9mIHN0cnVjdHVyZXMsCiAgICAgY29udGFpbmluZyBhIHN0cmluZyBjb25zdGFudCwgdGhhdCBkZWZpbmVzIHRoZSBzcGVjaWZpY2F0aW9uIG5hbWUsCiAgICAgYW5kIGEgc3RyaW5nIGNvbnN0YW50IHRoYXQgcHJvdmlkZXMgdGhlIHNwZWNpZmljYXRpb24uCgogICAgIERvIG5vdCBkZWZpbmUgdGhpcyBtYWNybyBpZiBpdCBkb2VzIG5vdCBuZWVkIHRvIGRvIGFueXRoaW5nLgoKICAgICAnRVhUUkFfU1BFQ1MnIGlzIHVzZWZ1bCB3aGVuIGFuIGFyY2hpdGVjdHVyZSBjb250YWlucyBzZXZlcmFsCiAgICAgcmVsYXRlZCB0YXJnZXRzLCB3aGljaCBoYXZlIHZhcmlvdXMgJy4uLl9TUEVDUycgd2hpY2ggYXJlIHNpbWlsYXIKICAgICB0byBlYWNoIG90aGVyLCBhbmQgdGhlIG1haW50YWluZXIgd291bGQgbGlrZSBvbmUgY2VudHJhbCBwbGFjZSB0bwogICAgIGtlZXAgdGhlc2UgZGVmaW5pdGlvbnMuCgogICAgIEZvciBleGFtcGxlLCB0aGUgUG93ZXJQQyBTeXN0ZW0gVi40IHRhcmdldHMgdXNlICdFWFRSQV9TUEVDUycgdG8KICAgICBkZWZpbmUgZWl0aGVyICdfQ0FMTF9TWVNWJyB3aGVuIHRoZSBTeXN0ZW0gViBjYWxsaW5nIHNlcXVlbmNlIGlzCiAgICAgdXNlZCBvciAnX0NBTExfQUlYJyB3aGVuIHRoZSBvbGRlciBBSVgtYmFzZWQgY2FsbGluZyBzZXF1ZW5jZSBpcwogICAgIHVzZWQuCgogICAgIFRoZSAnY29uZmlnL3JzNjAwMC9yczYwMDAuaCcgdGFyZ2V0IGZpbGUgZGVmaW5lczoKCiAgICAgICAgICAjZGVmaW5lIEVYVFJBX1NQRUNTIFwKICAgICAgICAgICAgeyAiY3BwX3N5c3ZfZGVmYXVsdCIsIENQUF9TWVNWX0RFRkFVTFQgfSwKCiAgICAgICAgICAjZGVmaW5lIENQUF9TWVNfREVGQVVMVCAiIgoKICAgICBUaGUgJ2NvbmZpZy9yczYwMDAvc3lzdi5oJyB0YXJnZXQgZmlsZSBkZWZpbmVzOgogICAgICAgICAgI3VuZGVmIENQUF9TUEVDCiAgICAgICAgICAjZGVmaW5lIENQUF9TUEVDIFwKICAgICAgICAgICIle3Bvc2l4OiAtRF9QT1NJWF9TT1VSQ0UgfSBcCiAgICAgICAgICAle21jYWxsLXN5c3Y6IC1EX0NBTExfU1lTViB9IFwKICAgICAgICAgICV7IW1jYWxsLXN5c3Y6ICUoY3BwX3N5c3ZfZGVmYXVsdCkgfSBcCiAgICAgICAgICAle21zb2Z0LWZsb2F0OiAtRF9TT0ZUX0ZMT0FUfSAle21jcHU9NDAzOiAtRF9TT0ZUX0ZMT0FUfSIKCiAgICAgICAgICAjdW5kZWYgQ1BQX1NZU1ZfREVGQVVMVAogICAgICAgICAgI2RlZmluZSBDUFBfU1lTVl9ERUZBVUxUICItRF9DQUxMX1NZU1YiCgogICAgIHdoaWxlIHRoZSAnY29uZmlnL3JzNjAwMC9lYWJpYWl4LmgnIHRhcmdldCBmaWxlIGRlZmluZXMKICAgICAnQ1BQX1NZU1ZfREVGQVVMVCcgYXM6CgogICAgICAgICAgI3VuZGVmIENQUF9TWVNWX0RFRkFVTFQKICAgICAgICAgICNkZWZpbmUgQ1BQX1NZU1ZfREVGQVVMVCAiLURfQ0FMTF9BSVgiCgogLS0gTWFjcm86IExJTktfTElCR0NDX1NQRUNJQUxfMQogICAgIERlZmluZSB0aGlzIG1hY3JvIGlmIHRoZSBkcml2ZXIgcHJvZ3JhbSBzaG91bGQgZmluZCB0aGUgbGlicmFyeQogICAgICdsaWJnY2MuYScuICBJZiB5b3UgZG8gbm90IGRlZmluZSB0aGlzIG1hY3JvLCB0aGUgZHJpdmVyIHByb2dyYW0KICAgICB3aWxsIHBhc3MgdGhlIGFyZ3VtZW50ICctbGdjYycgdG8gdGVsbCB0aGUgbGlua2VyIHRvIGRvIHRoZSBzZWFyY2guCgogLS0gTWFjcm86IExJTktfR0NDX0NfU0VRVUVOQ0VfU1BFQwogICAgIFRoZSBzZXF1ZW5jZSBpbiB3aGljaCBsaWJnY2MgYW5kIGxpYmMgYXJlIHNwZWNpZmllZCB0byB0aGUgbGlua2VyLgogICAgIEJ5IGRlZmF1bHQgdGhpcyBpcyAnJUcgJUwgJUcnLgoKIC0tIE1hY3JvOiBMSU5LX0NPTU1BTkRfU1BFQwogICAgIEEgQyBzdHJpbmcgY29uc3RhbnQgZ2l2aW5nIHRoZSBjb21wbGV0ZSBjb21tYW5kIGxpbmUgbmVlZCB0bwogICAgIGV4ZWN1dGUgdGhlIGxpbmtlci4gIFdoZW4geW91IGRvIHRoaXMsIHlvdSB3aWxsIG5lZWQgdG8gdXBkYXRlIHlvdXIKICAgICBwb3J0IGVhY2ggdGltZSBhIGNoYW5nZSBpcyBtYWRlIHRvIHRoZSBsaW5rIGNvbW1hbmQgbGluZSB3aXRoaW4KICAgICAnZ2NjLmMnLiAgVGhlcmVmb3JlLCBkZWZpbmUgdGhpcyBtYWNybyBvbmx5IGlmIHlvdSBuZWVkIHRvCiAgICAgY29tcGxldGVseSByZWRlZmluZSB0aGUgY29tbWFuZCBsaW5lIGZvciBpbnZva2luZyB0aGUgbGlua2VyIGFuZAogICAgIHRoZXJlIGlzIG5vIG90aGVyIHdheSB0byBhY2NvbXBsaXNoIHRoZSBlZmZlY3QgeW91IG5lZWQuCiAgICAgT3ZlcnJpZGluZyB0aGlzIG1hY3JvIG1heSBiZSBhdm9pZGFibGUgYnkgb3ZlcnJpZGluZwogICAgICdMSU5LX0dDQ19DX1NFUVVFTkNFX1NQRUMnIGluc3RlYWQuCgogLS0gTWFjcm86IExJTktfRUxJTUlOQVRFX0RVUExJQ0FURV9MRElSRUNUT1JJRVMKICAgICBBIG5vbnplcm8gdmFsdWUgY2F1c2VzICdjb2xsZWN0MicgdG8gcmVtb3ZlIGR1cGxpY2F0ZSAnLUxESVJFQ1RPUlknCiAgICAgc2VhcmNoIGRpcmVjdG9yaWVzIGZyb20gbGlua2luZyBjb21tYW5kcy4gIERvIG5vdCBnaXZlIGl0IGEgbm9uemVybwogICAgIHZhbHVlIGlmIHJlbW92aW5nIGR1cGxpY2F0ZSBzZWFyY2ggZGlyZWN0b3JpZXMgY2hhbmdlcyB0aGUgbGlua2VyJ3MKICAgICBzZW1hbnRpY3MuCgogLS0gTWFjcm86IE1VTFRJTElCX0RFRkFVTFRTCiAgICAgRGVmaW5lIHRoaXMgbWFjcm8gYXMgYSBDIGV4cHJlc3Npb24gZm9yIHRoZSBpbml0aWFsaXplciBvZiBhbiBhcnJheQogICAgIG9mIHN0cmluZyB0byB0ZWxsIHRoZSBkcml2ZXIgcHJvZ3JhbSB3aGljaCBvcHRpb25zIGFyZSBkZWZhdWx0cyBmb3IKICAgICB0aGlzIHRhcmdldCBhbmQgdGh1cyBkbyBub3QgbmVlZCB0byBiZSBoYW5kbGVkIHNwZWNpYWxseSB3aGVuIHVzaW5nCiAgICAgJ01VTFRJTElCX09QVElPTlMnLgoKICAgICBEbyBub3QgZGVmaW5lIHRoaXMgbWFjcm8gaWYgJ01VTFRJTElCX09QVElPTlMnIGlzIG5vdCBkZWZpbmVkIGluCiAgICAgdGhlIHRhcmdldCBtYWtlZmlsZSBmcmFnbWVudCBvciBpZiBub25lIG9mIHRoZSBvcHRpb25zIGxpc3RlZCBpbgogICAgICdNVUxUSUxJQl9PUFRJT05TJyBhcmUgc2V0IGJ5IGRlZmF1bHQuICAqTm90ZSBUYXJnZXQgRnJhZ21lbnQ6Oi4KCiAtLSBNYWNybzogUkVMQVRJVkVfUFJFRklYX05PVF9MSU5LRElSCiAgICAgRGVmaW5lIHRoaXMgbWFjcm8gdG8gdGVsbCAnZ2NjJyB0aGF0IGl0IHNob3VsZCBvbmx5IHRyYW5zbGF0ZSBhCiAgICAgJy1CJyBwcmVmaXggaW50byBhICctTCcgbGlua2VyIG9wdGlvbiBpZiB0aGUgcHJlZml4IGluZGljYXRlcyBhbgogICAgIGFic29sdXRlIGZpbGUgbmFtZS4KCiAtLSBNYWNybzogTURfRVhFQ19QUkVGSVgKICAgICBJZiBkZWZpbmVkLCB0aGlzIG1hY3JvIGlzIGFuIGFkZGl0aW9uYWwgcHJlZml4IHRvIHRyeSBhZnRlcgogICAgICdTVEFOREFSRF9FWEVDX1BSRUZJWCcuICAnTURfRVhFQ19QUkVGSVgnIGlzIG5vdCBzZWFyY2hlZCB3aGVuIHRoZQogICAgICctYicgb3B0aW9uIGlzIHVzZWQsIG9yIHRoZSBjb21waWxlciBpcyBidWlsdCBhcyBhIGNyb3NzIGNvbXBpbGVyLgogICAgIElmIHlvdSBkZWZpbmUgJ01EX0VYRUNfUFJFRklYJywgdGhlbiBiZSBzdXJlIHRvIGFkZCBpdCB0byB0aGUgbGlzdAogICAgIG9mIGRpcmVjdG9yaWVzIHVzZWQgdG8gZmluZCB0aGUgYXNzZW1ibGVyIGluICdjb25maWd1cmUuaW4nLgoKIC0tIE1hY3JvOiBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYCiAgICAgRGVmaW5lIHRoaXMgbWFjcm8gYXMgYSBDIHN0cmluZyBjb25zdGFudCBpZiB5b3Ugd2lzaCB0byBvdmVycmlkZQogICAgIHRoZSBzdGFuZGFyZCBjaG9pY2Ugb2YgJ2xpYmRpcicgYXMgdGhlIGRlZmF1bHQgcHJlZml4IHRvIHRyeSB3aGVuCiAgICAgc2VhcmNoaW5nIGZvciBzdGFydHVwIGZpbGVzIHN1Y2ggYXMgJ2NydDAubycuCiAgICAgJ1NUQU5EQVJEX1NUQVJURklMRV9QUkVGSVgnIGlzIG5vdCBzZWFyY2hlZCB3aGVuIHRoZSBjb21waWxlciBpcwogICAgIGJ1aWx0IGFzIGEgY3Jvc3MgY29tcGlsZXIuCgogLS0gTWFjcm86IFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMQogICAgIERlZmluZSB0aGlzIG1hY3JvIGFzIGEgQyBzdHJpbmcgY29uc3RhbnQgaWYgeW91IHdpc2ggdG8gb3ZlcnJpZGUKICAgICB0aGUgc3RhbmRhcmQgY2hvaWNlIG9mICcvbGliJyBhcyBhIHByZWZpeCB0byB0cnkgYWZ0ZXIgdGhlIGRlZmF1bHQKICAgICBwcmVmaXggd2hlbiBzZWFyY2hpbmcgZm9yIHN0YXJ0dXAgZmlsZXMgc3VjaCBhcyAnY3J0MC5vJy4KICAgICAnU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8xJyBpcyBub3Qgc2VhcmNoZWQgd2hlbiB0aGUgY29tcGlsZXIgaXMKICAgICBidWlsdCBhcyBhIGNyb3NzIGNvbXBpbGVyLgoKIC0tIE1hY3JvOiBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzIKICAgICBEZWZpbmUgdGhpcyBtYWNybyBhcyBhIEMgc3RyaW5nIGNvbnN0YW50IGlmIHlvdSB3aXNoIHRvIG92ZXJyaWRlCiAgICAgdGhlIHN0YW5kYXJkIGNob2ljZSBvZiAnL2xpYicgYXMgeWV0IGFub3RoZXIgcHJlZml4IHRvIHRyeSBhZnRlcgogICAgIHRoZSBkZWZhdWx0IHByZWZpeCB3aGVuIHNlYXJjaGluZyBmb3Igc3RhcnR1cCBmaWxlcyBzdWNoIGFzCiAgICAgJ2NydDAubycuICAnU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8yJyBpcyBub3Qgc2VhcmNoZWQgd2hlbiB0aGUKICAgICBjb21waWxlciBpcyBidWlsdCBhcyBhIGNyb3NzIGNvbXBpbGVyLgoKIC0tIE1hY3JvOiBNRF9TVEFSVEZJTEVfUFJFRklYCiAgICAgSWYgZGVmaW5lZCwgdGhpcyBtYWNybyBzdXBwbGllcyBhbiBhZGRpdGlvbmFsIHByZWZpeCB0byB0cnkgYWZ0ZXIKICAgICB0aGUgc3RhbmRhcmQgcHJlZml4ZXMuICAnTURfRVhFQ19QUkVGSVgnIGlzIG5vdCBzZWFyY2hlZCB3aGVuIHRoZQogICAgICctYicgb3B0aW9uIGlzIHVzZWQsIG9yIHdoZW4gdGhlIGNvbXBpbGVyIGlzIGJ1aWx0IGFzIGEgY3Jvc3MKICAgICBjb21waWxlci4KCiAtLSBNYWNybzogTURfU1RBUlRGSUxFX1BSRUZJWF8xCiAgICAgSWYgZGVmaW5lZCwgdGhpcyBtYWNybyBzdXBwbGllcyB5ZXQgYW5vdGhlciBwcmVmaXggdG8gdHJ5IGFmdGVyIHRoZQogICAgIHN0YW5kYXJkIHByZWZpeGVzLiAgSXQgaXMgbm90IHNlYXJjaGVkIHdoZW4gdGhlICctYicgb3B0aW9uIGlzCiAgICAgdXNlZCwgb3Igd2hlbiB0aGUgY29tcGlsZXIgaXMgYnVpbHQgYXMgYSBjcm9zcyBjb21waWxlci4KCiAtLSBNYWNybzogSU5JVF9FTlZJUk9OTUVOVAogICAgIERlZmluZSB0aGlzIG1hY3JvIGFzIGEgQyBzdHJpbmcgY29uc3RhbnQgaWYgeW91IHdpc2ggdG8gc2V0CiAgICAgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciBwcm9ncmFtcyBjYWxsZWQgYnkgdGhlIGRyaXZlciwgc3VjaCBhcwogICAgIHRoZSBhc3NlbWJsZXIgYW5kIGxvYWRlci4gIFRoZSBkcml2ZXIgcGFzc2VzIHRoZSB2YWx1ZSBvZiB0aGlzCiAgICAgbWFjcm8gdG8gJ3B1dGVudicgdG8gaW5pdGlhbGl6ZSB0aGUgbmVjZXNzYXJ5IGVudmlyb25tZW50CiAgICAgdmFyaWFibGVzLgoKIC0tIE1hY3JvOiBMT0NBTF9JTkNMVURFX0RJUgogICAgIERlZmluZSB0aGlzIG1hY3JvIGFzIGEgQyBzdHJpbmcgY29uc3RhbnQgaWYgeW91IHdpc2ggdG8gb3ZlcnJpZGUKICAgICB0aGUgc3RhbmRhcmQgY2hvaWNlIG9mICcvdXNyL2xvY2FsL2luY2x1ZGUnIGFzIHRoZSBkZWZhdWx0IHByZWZpeAogICAgIHRvIHRyeSB3aGVuIHNlYXJjaGluZyBmb3IgbG9jYWwgaGVhZGVyIGZpbGVzLiAgJ0xPQ0FMX0lOQ0xVREVfRElSJwogICAgIGNvbWVzIGJlZm9yZSAnU1lTVEVNX0lOQ0xVREVfRElSJyBpbiB0aGUgc2VhcmNoIG9yZGVyLgoKICAgICBDcm9zcyBjb21waWxlcnMgZG8gbm90IHNlYXJjaCBlaXRoZXIgJy91c3IvbG9jYWwvaW5jbHVkZScgb3IgaXRzCiAgICAgcmVwbGFjZW1lbnQuCgogLS0gTWFjcm86IE1PRElGWV9UQVJHRVRfTkFNRQogICAgIERlZmluZSB0aGlzIG1hY3JvIGlmIHlvdSB3aXNoIHRvIGRlZmluZSBjb21tYW5kLWxpbmUgc3dpdGNoZXMgdGhhdAogICAgIG1vZGlmeSB0aGUgZGVmYXVsdCB0YXJnZXQgbmFtZS4KCiAgICAgRm9yIGVhY2ggc3dpdGNoLCB5b3UgY2FuIGluY2x1ZGUgYSBzdHJpbmcgdG8gYmUgYXBwZW5kZWQgdG8gdGhlCiAgICAgZmlyc3QgcGFydCBvZiB0aGUgY29uZmlndXJhdGlvbiBuYW1lIG9yIGEgc3RyaW5nIHRvIGJlIGRlbGV0ZWQgZnJvbQogICAgIHRoZSBjb25maWd1cmF0aW9uIG5hbWUsIGlmIHByZXNlbnQuICBUaGUgZGVmaW5pdGlvbiBzaG91bGQgYmUgYW4KICAgICBpbml0aWFsaXplciBmb3IgYW4gYXJyYXkgb2Ygc3RydWN0dXJlcy4gIEVhY2ggYXJyYXkgZWxlbWVudCBzaG91bGQKICAgICBoYXZlIHRocmVlIGVsZW1lbnRzOiB0aGUgc3dpdGNoIG5hbWUgKGEgc3RyaW5nIGNvbnN0YW50LCBpbmNsdWRpbmcKICAgICB0aGUgaW5pdGlhbCBkYXNoKSwgb25lIG9mIHRoZSBlbnVtZXJhdGlvbiBjb2RlcyAnQUREJyBvciAnREVMRVRFJwogICAgIHRvIGluZGljYXRlIHdoZXRoZXIgdGhlIHN0cmluZyBzaG91bGQgYmUgaW5zZXJ0ZWQgb3IgZGVsZXRlZCwgYW5kCiAgICAgdGhlIHN0cmluZyB0byBiZSBpbnNlcnRlZCBvciBkZWxldGVkIChhIHN0cmluZyBjb25zdGFudCkuCgogICAgIEZvciBleGFtcGxlLCBvbiBhIG1hY2hpbmUgd2hlcmUgJzY0JyBhdCB0aGUgZW5kIG9mIHRoZQogICAgIGNvbmZpZ3VyYXRpb24gbmFtZSBkZW5vdGVzIGEgNjQtYml0IHRhcmdldCBhbmQgeW91IHdhbnQgdGhlICctMzInCiAgICAgYW5kICctNjQnIHN3aXRjaGVzIHRvIHNlbGVjdCBiZXR3ZWVuIDMyLSBhbmQgNjQtYml0IHRhcmdldHMsIHlvdQogICAgIHdvdWxkIGNvZGUKCiAgICAgICAgICAjZGVmaW5lIE1PRElGWV9UQVJHRVRfTkFNRSBcCiAgICAgICAgICAgIHsgeyAiLTMyIiwgREVMRVRFLCAiNjQifSwgXAogICAgICAgICAgICAgICB7Ii02NCIsIEFERCwgIjY0In19CgogLS0gTWFjcm86IFNZU1RFTV9JTkNMVURFX0RJUgogICAgIERlZmluZSB0aGlzIG1hY3JvIGFzIGEgQyBzdHJpbmcgY29uc3RhbnQgaWYgeW91IHdpc2ggdG8gc3BlY2lmeSBhCiAgICAgc3lzdGVtLXNwZWNpZmljIGRpcmVjdG9yeSB0byBzZWFyY2ggZm9yIGhlYWRlciBmaWxlcyBiZWZvcmUgdGhlCiAgICAgc3RhbmRhcmQgZGlyZWN0b3J5LiAgJ1NZU1RFTV9JTkNMVURFX0RJUicgY29tZXMgYmVmb3JlCiAgICAgJ1NUQU5EQVJEX0lOQ0xVREVfRElSJyBpbiB0aGUgc2VhcmNoIG9yZGVyLgoKICAgICBDcm9zcyBjb21waWxlcnMgZG8gbm90IHVzZSB0aGlzIG1hY3JvIGFuZCBkbyBub3Qgc2VhcmNoIHRoZQogICAgIGRpcmVjdG9yeSBzcGVjaWZpZWQuCgogLS0gTWFjcm86IFNUQU5EQVJEX0lOQ0xVREVfRElSCiAgICAgRGVmaW5lIHRoaXMgbWFjcm8gYXMgYSBDIHN0cmluZyBjb25zdGFudCBpZiB5b3Ugd2lzaCB0byBvdmVycmlkZQogICAgIHRoZSBzdGFuZGFyZCBjaG9pY2Ugb2YgJy91c3IvaW5jbHVkZScgYXMgdGhlIGRlZmF1bHQgcHJlZml4IHRvIHRyeQogICAgIHdoZW4gc2VhcmNoaW5nIGZvciBoZWFkZXIgZmlsZXMuCgogICAgIENyb3NzIGNvbXBpbGVycyBpZ25vcmUgdGhpcyBtYWNybyBhbmQgZG8gbm90IHNlYXJjaCBlaXRoZXIKICAgICAnL3Vzci9pbmNsdWRlJyBvciBpdHMgcmVwbGFjZW1lbnQuCgogLS0gTWFjcm86IFNUQU5EQVJEX0lOQ0xVREVfQ09NUE9ORU5UCiAgICAgVGhlICJjb21wb25lbnQiIGNvcnJlc3BvbmRpbmcgdG8gJ1NUQU5EQVJEX0lOQ0xVREVfRElSJy4gIFNlZQogICAgICdJTkNMVURFX0RFRkFVTFRTJywgYmVsb3csIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgY29tcG9uZW50cy4gIElmCiAgICAgeW91IGRvIG5vdCBkZWZpbmUgdGhpcyBtYWNybywgbm8gY29tcG9uZW50IGlzIHVzZWQuCgogLS0gTWFjcm86IElOQ0xVREVfREVGQVVMVFMKICAgICBEZWZpbmUgdGhpcyBtYWNybyBpZiB5b3Ugd2lzaCB0byBvdmVycmlkZSB0aGUgZW50aXJlIGRlZmF1bHQgc2VhcmNoCiAgICAgcGF0aCBmb3IgaW5jbHVkZSBmaWxlcy4gIEZvciBhIG5hdGl2ZSBjb21waWxlciwgdGhlIGRlZmF1bHQgc2VhcmNoCiAgICAgcGF0aCB1c3VhbGx5IGNvbnNpc3RzIG9mICdHQ0NfSU5DTFVERV9ESVInLCAnTE9DQUxfSU5DTFVERV9ESVInLAogICAgICdTWVNURU1fSU5DTFVERV9ESVInLCAnR1BMVVNQTFVTX0lOQ0xVREVfRElSJywgYW5kCiAgICAgJ1NUQU5EQVJEX0lOQ0xVREVfRElSJy4gIEluIGFkZGl0aW9uLCAnR1BMVVNQTFVTX0lOQ0xVREVfRElSJyBhbmQKICAgICAnR0NDX0lOQ0xVREVfRElSJyBhcmUgZGVmaW5lZCBhdXRvbWF0aWNhbGx5IGJ5ICdNYWtlZmlsZScsIGFuZAogICAgIHNwZWNpZnkgcHJpdmF0ZSBzZWFyY2ggYXJlYXMgZm9yIEdDQy4gIFRoZSBkaXJlY3RvcnkKICAgICAnR1BMVVNQTFVTX0lOQ0xVREVfRElSJyBpcyB1c2VkIG9ubHkgZm9yIEMrKyBwcm9ncmFtcy4KCiAgICAgVGhlIGRlZmluaXRpb24gc2hvdWxkIGJlIGFuIGluaXRpYWxpemVyIGZvciBhbiBhcnJheSBvZiBzdHJ1Y3R1cmVzLgogICAgIEVhY2ggYXJyYXkgZWxlbWVudCBzaG91bGQgaGF2ZSBmb3VyIGVsZW1lbnRzOiB0aGUgZGlyZWN0b3J5IG5hbWUgKGEKICAgICBzdHJpbmcgY29uc3RhbnQpLCB0aGUgY29tcG9uZW50IG5hbWUgKGFsc28gYSBzdHJpbmcgY29uc3RhbnQpLCBhCiAgICAgZmxhZyBmb3IgQysrLW9ubHkgZGlyZWN0b3JpZXMsIGFuZCBhIGZsYWcgc2hvd2luZyB0aGF0IHRoZSBpbmNsdWRlcwogICAgIGluIHRoZSBkaXJlY3RvcnkgZG9uJ3QgbmVlZCB0byBiZSB3cmFwcGVkIGluICdleHRlcm4gJ0MnJyB3aGVuCiAgICAgY29tcGlsaW5nIEMrKy4gIE1hcmsgdGhlIGVuZCBvZiB0aGUgYXJyYXkgd2l0aCBhIG51bGwgZWxlbWVudC4KCiAgICAgVGhlIGNvbXBvbmVudCBuYW1lIGRlbm90ZXMgd2hhdCBHTlUgcGFja2FnZSB0aGUgaW5jbHVkZSBmaWxlIGlzCiAgICAgcGFydCBvZiwgaWYgYW55LCBpbiBhbGwgdXBwZXJjYXNlIGxldHRlcnMuICBGb3IgZXhhbXBsZSwgaXQgbWlnaHQKICAgICBiZSAnR0NDJyBvciAnQklOVVRJTFMnLiAgSWYgdGhlIHBhY2thZ2UgaXMgcGFydCBvZiBhCiAgICAgdmVuZG9yLXN1cHBsaWVkIG9wZXJhdGluZyBzeXN0ZW0sIGNvZGUgdGhlIGNvbXBvbmVudCBuYW1lIGFzICcwJy4KCiAgICAgRm9yIGV4YW1wbGUsIGhlcmUgaXMgdGhlIGRlZmluaXRpb24gdXNlZCBmb3IgVkFYL1ZNUzoKCiAgICAgICAgICAjZGVmaW5lIElOQ0xVREVfREVGQVVMVFMgXAogICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgeyAiR05VX0dYWF9JTkNMVURFOiIsICJHKysiLCAxLCAxfSwgICBcCiAgICAgICAgICAgIHsgIkdOVV9DQ19JTkNMVURFOiIsICJHQ0MiLCAwLCAwfSwgICAgXAogICAgICAgICAgICB7ICJTWVMkU1lTUk9PVDpbU1lTTElCLl0iLCAwLCAwLCAwfSwgIFwKICAgICAgICAgICAgeyAiLiIsIDAsIDAsIDB9LCAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgIHsgMCwgMCwgMCwgMH0gICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgfQoKIEhlcmUgaXMgdGhlIG9yZGVyIG9mIHByZWZpeGVzIHRyaWVkIGZvciBleGVjIGZpbGVzOgoKICAxLiBBbnkgcHJlZml4ZXMgc3BlY2lmaWVkIGJ5IHRoZSB1c2VyIHdpdGggJy1CJy4KCiAgMi4gVGhlIGVudmlyb25tZW50IHZhcmlhYmxlICdHQ0NfRVhFQ19QUkVGSVgnIG9yLCBpZiAnR0NDX0VYRUNfUFJFRklYJwogICAgIGlzIG5vdCBzZXQgYW5kIHRoZSBjb21waWxlciBoYXMgbm90IGJlZW4gaW5zdGFsbGVkIGluIHRoZQogICAgIGNvbmZpZ3VyZS10aW1lIFBSRUZJWCwgdGhlIGxvY2F0aW9uIGluIHdoaWNoIHRoZSBjb21waWxlciBoYXMKICAgICBhY3R1YWxseSBiZWVuIGluc3RhbGxlZC4KCiAgMy4gVGhlIGRpcmVjdG9yaWVzIHNwZWNpZmllZCBieSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUKICAgICAnQ09NUElMRVJfUEFUSCcuCgogIDQuIFRoZSBtYWNybyAnU1RBTkRBUkRfRVhFQ19QUkVGSVgnLCBpZiB0aGUgY29tcGlsZXIgaGFzIGJlZW4KICAgICBpbnN0YWxsZWQgaW4gdGhlIGNvbmZpZ3VyZWQtdGltZSBQUkVGSVguCgogIDUuIFRoZSBsb2NhdGlvbiAnL3Vzci9saWJleGVjL2djYy8nLCBidXQgb25seSBpZiB0aGlzIGlzIGEgbmF0aXZlCiAgICAgY29tcGlsZXIuCgogIDYuIFRoZSBsb2NhdGlvbiAnL3Vzci9saWIvZ2NjLycsIGJ1dCBvbmx5IGlmIHRoaXMgaXMgYSBuYXRpdmUKICAgICBjb21waWxlci4KCiAgNy4gVGhlIG1hY3JvICdNRF9FWEVDX1BSRUZJWCcsIGlmIGRlZmluZWQsIGJ1dCBvbmx5IGlmIHRoaXMgaXMgYQogICAgIG5hdGl2ZSBjb21waWxlci4KCiBIZXJlIGlzIHRoZSBvcmRlciBvZiBwcmVmaXhlcyB0cmllZCBmb3Igc3RhcnRmaWxlczoKCiAgMS4gQW55IHByZWZpeGVzIHNwZWNpZmllZCBieSB0aGUgdXNlciB3aXRoICctQicuCgogIDIuIFRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSAnR0NDX0VYRUNfUFJFRklYJyBvciBpdHMgYXV0b21hdGljYWxseQogICAgIGRldGVybWluZWQgdmFsdWUgYmFzZWQgb24gdGhlIGluc3RhbGxlZCB0b29sY2hhaW4gbG9jYXRpb24uCgogIDMuIFRoZSBkaXJlY3RvcmllcyBzcGVjaWZpZWQgYnkgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlCiAgICAgJ0xJQlJBUllfUEFUSCcgKG9yIHBvcnQtc3BlY2lmaWMgbmFtZTsgbmF0aXZlIG9ubHksIGNyb3NzIGNvbXBpbGVycwogICAgIGRvIG5vdCB1c2UgdGhpcykuCgogIDQuIFRoZSBtYWNybyAnU1RBTkRBUkRfRVhFQ19QUkVGSVgnLCBidXQgb25seSBpZiB0aGUgdG9vbGNoYWluIGlzCiAgICAgaW5zdGFsbGVkIGluIHRoZSBjb25maWd1cmVkIFBSRUZJWCBvciB0aGlzIGlzIGEgbmF0aXZlIGNvbXBpbGVyLgoKICA1LiBUaGUgbG9jYXRpb24gJy91c3IvbGliL2djYy8nLCBidXQgb25seSBpZiB0aGlzIGlzIGEgbmF0aXZlCiAgICAgY29tcGlsZXIuCgogIDYuIFRoZSBtYWNybyAnTURfRVhFQ19QUkVGSVgnLCBpZiBkZWZpbmVkLCBidXQgb25seSBpZiB0aGlzIGlzIGEKICAgICBuYXRpdmUgY29tcGlsZXIuCgogIDcuIFRoZSBtYWNybyAnTURfU1RBUlRGSUxFX1BSRUZJWCcsIGlmIGRlZmluZWQsIGJ1dCBvbmx5IGlmIHRoaXMgaXMgYQogICAgIG5hdGl2ZSBjb21waWxlciwgb3Igd2UgaGF2ZSBhIHRhcmdldCBzeXN0ZW0gcm9vdC4KCiAgOC4gVGhlIG1hY3JvICdNRF9TVEFSVEZJTEVfUFJFRklYXzEnLCBpZiBkZWZpbmVkLCBidXQgb25seSBpZiB0aGlzIGlzCiAgICAgYSBuYXRpdmUgY29tcGlsZXIsIG9yIHdlIGhhdmUgYSB0YXJnZXQgc3lzdGVtIHJvb3QuCgogIDkuIFRoZSBtYWNybyAnU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWCcsIHdpdGggYW55IHN5c3Jvb3QKICAgICBtb2RpZmljYXRpb25zLiAgSWYgdGhpcyBwYXRoIGlzIHJlbGF0aXZlIGl0IHdpbGwgYmUgcHJlZml4ZWQgYnkKICAgICAnR0NDX0VYRUNfUFJFRklYJyBhbmQgdGhlIG1hY2hpbmUgc3VmZml4IG9yICdTVEFOREFSRF9FWEVDX1BSRUZJWCcKICAgICBhbmQgdGhlIG1hY2hpbmUgc3VmZml4LgoKICAxMC4gVGhlIG1hY3JvICdTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzEnLCBidXQgb25seSBpZiB0aGlzIGlzIGEKICAgICBuYXRpdmUgY29tcGlsZXIsIG9yIHdlIGhhdmUgYSB0YXJnZXQgc3lzdGVtIHJvb3QuICBUaGUgZGVmYXVsdCBmb3IKICAgICB0aGlzIG1hY3JvIGlzICcvbGliLycuCgogIDExLiBUaGUgbWFjcm8gJ1NUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMicsIGJ1dCBvbmx5IGlmIHRoaXMgaXMgYQogICAgIG5hdGl2ZSBjb21waWxlciwgb3Igd2UgaGF2ZSBhIHRhcmdldCBzeXN0ZW0gcm9vdC4gIFRoZSBkZWZhdWx0IGZvcgogICAgIHRoaXMgbWFjcm8gaXMgJy91c3IvbGliLycuCgofCkZpbGU6IGdjY2ludC5pbmZvLCAgTm9kZTogUnVuLXRpbWUgVGFyZ2V0LCAgTmV4dDogUGVyLUZ1bmN0aW9uIERhdGEsICBQcmV2OiBEcml2ZXIsICBVcDogVGFyZ2V0IE1hY3JvcwoKMTUuMyBSdW4tdGltZSBUYXJnZXQgU3BlY2lmaWNhdGlvbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpIZXJlIGFyZSBydW4tdGltZSB0YXJnZXQgc3BlY2lmaWNhdGlvbnMuCgogLS0gTWFjcm86IFRBUkdFVF9DUFVfQ1BQX0JVSUxUSU5TICgpCiAgICAgVGhpcyBmdW5jdGlvbi1saWtlIG1hY3JvIGV4cGFuZHMgdG8gYSBibG9jayBvZiBjb2RlIHRoYXQgZGVmaW5lcwogICAgIGJ1aWx0LWluIHByZXByb2Nlc3NvciBtYWNyb3MgYW5kIGFzc2VydGlvbnMgZm9yIHRoZSB0YXJnZXQgQ1BVLAogICAgIHVzaW5nIHRoZSBmdW5jdGlvbnMgJ2J1aWx0aW5fZGVmaW5lJywgJ2J1aWx0aW5fZGVmaW5lX3N0ZCcgYW5kCiAgICAgJ2J1aWx0aW5fYXNzZXJ0Jy4gIFdoZW4gdGhlIGZyb250IGVuZCBjYWxscyB0aGlzIG1hY3JvIGl0IHByb3ZpZGVzCiAgICAgYSB0cmFpbGluZyBzZW1pY29sb24sIGFuZCBzaW5jZSBpdCBoYXMgZmluaXNoZWQgY29tbWFuZCBsaW5lIG9wdGlvbgogICAgIHByb2Nlc3NpbmcgeW91ciBjb2RlIGNhbiB1c2UgdGhvc2UgcmVzdWx0cyBmcmVlbHkuCgogICAgICdidWlsdGluX2Fzc2VydCcgdGFrZXMgYSBzdHJpbmcgaW4gdGhlIGZvcm0geW91IHBhc3MgdG8gdGhlCiAgICAgY29tbWFuZC1saW5lIG9wdGlvbiAnLUEnLCBzdWNoIGFzICdjcHU9bWlwcycsIGFuZCBjcmVhdGVzIHRoZQogICAgIGFzc2VydGlvbi4gICdidWlsdGluX2RlZmluZScgdGFrZXMgYSBzdHJpbmcgaW4gdGhlIGZvcm0gYWNjZXB0ZWQgYnkKICAgICBvcHRpb24gJy1EJyBhbmQgdW5jb25kaXRpb25hbGx5IGRlZmluZXMgdGhlIG1hY3JvLgoKICAgICAnYnVpbHRpbl9kZWZpbmVfc3RkJyB0YWtlcyBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIG5hbWUgb2YgYW4KICAgICBvYmplY3QtbGlrZSBtYWNyby4gIElmIGl0IGRvZXNuJ3QgbGllIGluIHRoZSB1c2VyJ3MgbmFtZXNwYWNlLAogICAgICdidWlsdGluX2RlZmluZV9zdGQnIGRlZmluZXMgaXQgdW5jb25kaXRpb25hbGx5LiAgT3RoZXJ3aXNlLCBpdAogICAgIGRlZmluZXMgYSB2ZXJzaW9uIHdpdGggdHdvIGxlYWRpbmcgdW5kZXJzY29yZXMsIGFuZCBhbm90aGVyIHZlcnNpb24KICAgICB3aXRoIHR3byBsZWFkaW5nIGFuZCB0cmFpbGluZyB1bmRlcnNjb3JlcywgYW5kIGRlZmluZXMgdGhlIG9yaWdpbmFsCiAgICAgb25seSBpZiBhbiBJU08gc3RhbmRhcmQgd2FzIG5vdCByZXF1ZXN0ZWQgb24gdGhlIGNvbW1hbmQgbGluZS4gIEZvcgogICAgIGV4YW1wbGUsIHBhc3NpbmcgJ3VuaXgnIGRlZmluZXMgJ19fdW5peCcsICdfX3VuaXhfXycgYW5kIHBvc3NpYmx5CiAgICAgJ3VuaXgnOyBwYXNzaW5nICdfbWlwcycgZGVmaW5lcyAnX19taXBzJywgJ19fbWlwc19fJyBhbmQgcG9zc2libHkKICAgICAnX21pcHMnLCBhbmQgcGFzc2luZyAnX0FCSTY0JyBkZWZpbmVzIG9ubHkgJ19BQkk2NCcuCgogICAgIFlvdSBjYW4gYWxzbyB0ZXN0IGZvciB0aGUgQyBkaWFsZWN0IGJlaW5nIGNvbXBpbGVkLiAgVGhlIHZhcmlhYmxlCiAgICAgJ2NfbGFuZ3VhZ2UnIGlzIHNldCB0byBvbmUgb2YgJ2Nsa19jJywgJ2Nsa19jcGx1c3BsdXMnIG9yCiAgICAgJ2Nsa19vYmplY3RpdmVfYycuICBOb3RlIHRoYXQgaWYgd2UgYXJlIHByZXByb2Nlc3NpbmcgYXNzZW1ibGVyLAogICAgIHRoaXMgdmFyaWFibGUgd2lsbCBiZSAnY2xrX2MnIGJ1dCB0aGUgZnVuY3Rpb24tbGlrZSBtYWNybwogICAgICdwcmVwcm9jZXNzaW5nX2FzbV9wKCknIHdpbGwgcmV0dXJuIHRydWUsIHNvIHlvdSBtaWdodCB3YW50IHRvCiAgICAgY2hlY2sgZm9yIHRoYXQgZmlyc3QuICBJZiB5b3UgbmVlZCB0byBjaGVjayBmb3Igc3RyaWN0IEFOU0ksIHRoZQogICAgIHZhcmlhYmxlICdmbGFnX2lzbycgY2FuIGJlIHVzZWQuICBUaGUgZnVuY3Rpb24tbGlrZSBtYWNybwogICAgICdwcmVwcm9jZXNzaW5nX3RyYWRfcCgpJyBjYW4gYmUgdXNlZCB0byBjaGVjayBmb3IgdHJhZGl0aW9uYWwKICAgICBwcmVwcm9jZXNzaW5nLgoKIC0tIE1hY3JvOiBUQVJHRVRfT1NfQ1BQX0JVSUxUSU5TICgpCiAgICAgU2ltaWxhcmx5IHRvICdUQVJHRVRfQ1BVX0NQUF9CVUlMVElOUycgYnV0IHRoaXMgbWFjcm8gaXMgb3B0aW9uYWwKICAgICBhbmQgaXMgdXNlZCBmb3IgdGhlIHRhcmdldCBvcGVyYXRpbmcgc3lzdGVtIGluc3RlYWQuCgogLS0gTWFjcm86IFRBUkdFVF9PQkpGTVRfQ1BQX0JVSUxUSU5TICgpCiAgICAgU2ltaWxhcmx5IHRvICdUQVJHRVRfQ1BVX0NQUF9CVUlMVElOUycgYnV0IHRoaXMgbWFjcm8gaXMgb3B0aW9uYWwKICAgICBhbmQgaXMgdXNlZCBmb3IgdGhlIHRhcmdldCBvYmplY3QgZm9ybWF0LiAgJ2VsZm9zLmgnIHVzZXMgdGhpcwogICAgIG1hY3JvIHRvIGRlZmluZSAnX19FTEZfXycsIHNvIHlvdSBwcm9iYWJseSBkbyBub3QgbmVlZCB0byBkZWZpbmUgaXQKICAgICB5b3Vyc2VsZi4KCiAtLSBWYXJpYWJsZTogZXh0ZXJuIGludCB0YXJnZXRfZmxhZ3MKICAgICBUaGlzIHZhcmlhYmxlIGlzIGRlY2xhcmVkIGluICdvcHRpb25zLmgnLCB3aGljaCBpcyBpbmNsdWRlZCBiZWZvcmUKICAgICBhbnkgdGFyZ2V0LXNwZWNpZmljIGhlYWRlcnMuCgogLS0gVmFyaWFibGU6IFRhcmdldCBIb29rIGludCBUQVJHRVRfREVGQVVMVF9UQVJHRVRfRkxBR1MKICAgICBUaGlzIHZhcmlhYmxlIHNwZWNpZmllcyB0aGUgaW5pdGlhbCB2YWx1ZSBvZiAndGFyZ2V0X2ZsYWdzJy4gIEl0cwogICAgIGRlZmF1bHQgc2V0dGluZyBpcyAwLgoKIC0tIFRhcmdldCBIb29rOiBib29sIFRBUkdFVF9IQU5ETEVfT1BUSU9OIChzaXplX3QgQ09ERSwgY29uc3QgY2hhcgogICAgICAgICAgKkFSRywgaW50IFZBTFVFKQogICAgIFRoaXMgaG9vayBpcyBjYWxsZWQgd2hlbmV2ZXIgdGhlIHVzZXIgc3BlY2lmaWVzIG9uZSBvZiB0aGUKICAgICB0YXJnZXQtc3BlY2lmaWMgb3B0aW9ucyBkZXNjcmliZWQgYnkgdGhlICcub3B0JyBkZWZpbml0aW9uIGZpbGVzCiAgICAgKCpub3RlIE9wdGlvbnM6OikuICBJdCBoYXMgdGhlIG9wcG9ydHVuaXR5IHRvIGRvIHNvbWUKICAgICBvcHRpb24tc3BlY2lmaWMgcHJvY2Vzc2luZyBhbmQgc2hvdWxkIHJldHVybiB0cnVlIGlmIHRoZSBvcHRpb24gaXMKICAgICB2YWxpZC4gIFRoZSBkZWZhdWx0IGRlZmluaXRpb24gZG9lcyBub3RoaW5nIGJ1dCByZXR1cm4gdHJ1ZS4KCiAgICAgQ09ERSBzcGVjaWZpZXMgdGhlICdPUFRfTkFNRScgZW51bWVyYXRpb24gdmFsdWUgYXNzb2NpYXRlZCB3aXRoIHRoZQogICAgIHNlbGVjdGVkIG9wdGlvbjsgTkFNRSBpcyBqdXN0IGEgcmVuZGVyaW5nIG9mIHRoZSBvcHRpb24gbmFtZSBpbgogICAgIHdoaWNoIG5vbi1hbHBoYW51bWVyaWMgY2hhcmFjdGVycyBhcmUgcmVwbGFjZWQgYnkgdW5kZXJzY29yZXMuICBBUkcKICAgICBzcGVjaWZpZXMgdGhlIHN0cmluZyBhcmd1bWVudCBhbmQgaXMgbnVsbCBpZiBubyBhcmd1bWVudCB3YXMgZ2l2ZW4uCiAgICAgSWYgdGhlIG9wdGlvbiBpcyBmbGFnZ2VkIGFzIGEgJ1VJbnRlZ2VyJyAoKm5vdGUgT3B0aW9uCiAgICAgcHJvcGVydGllczo6KSwgVkFMVUUgaXMgdGhlIG51bWVyaWMgdmFsdWUgb2YgdGhlIGFyZ3VtZW50LgogICAgIE90aGVyd2lzZSBWQUxVRSBpcyAxIGlmIHRoZSBwb3NpdGl2ZSBmb3JtIG9mIHRoZSBvcHRpb24gd2FzIHVzZWQKICAgICBhbmQgMCBpZiB0aGUgIm5vLSIgZm9ybSB3YXMuCgogLS0gVGFyZ2V0IEhvb2s6IGJvb2wgVEFSR0VUX0hBTkRMRV9DX09QVElPTiAoc2l6ZV90IENPREUsIGNvbnN0IGNoYXIKICAgICAgICAgICpBUkcsIGludCBWQUxVRSkKICAgICBUaGlzIHRhcmdldCBob29rIGlzIGNhbGxlZCB3aGVuZXZlciB0aGUgdXNlciBzcGVjaWZpZXMgb25lIG9mIHRoZQogICAgIHRhcmdldC1zcGVjaWZpYyBDIGxhbmd1YWdlIGZhbWlseSBvcHRpb25zIGRlc2NyaWJlZCBieSB0aGUgJy5vcHQnCiAgICAgZGVmaW5pdGlvbiBmaWxlcygqbm90ZSBPcHRpb25zOjopLiAgSXQgaGFzIHRoZSBvcHBvcnR1bml0eSB0byBkbwogICAgIHNvbWUgb3B0aW9uLXNwZWNpZmljIHByb2Nlc3NpbmcgYW5kIHNob3VsZCByZXR1cm4gdHJ1ZSBpZiB0aGUKICAgICBvcHRpb24gaXMgdmFsaWQuICBUaGUgZGVmYXVsdCBkZWZpbml0aW9uIGRvZXMgbm90aGluZyBidXQgcmV0dXJuCiAgICAgZmFsc2UuCgogICAgIEluIGdlbmVyYWwsIHlvdSBzaG91bGQgdXNlICdUQVJHRVRfSEFORExFX09QVElPTicgdG8gaGFuZGxlCiAgICAgb3B0aW9ucy4gIEhvd2V2ZXIsIGlmIHByb2Nlc3NpbmcgYW4gb3B0aW9uIHJlcXVpcmVzIHJvdXRpbmVzIHRoYXQKICAgICBhcmUgb25seSBhdmFpbGFibGUgaW4gdGhlIEMgKGFuZCByZWxhdGVkIGxhbmd1YWdlKSBmcm9udCBlbmRzLCB0aGVuCiAgICAgeW91IHNob3VsZCB1c2UgJ1RBUkdFVF9IQU5ETEVfQ19PUFRJT04nIGluc3RlYWQuCgogLS0gTWFjcm86IFRBUkdFVF9WRVJTSU9OCiAgICAgVGhpcyBtYWNybyBpcyBhIEMgc3RhdGVtZW50IHRvIHByaW50IG9uICdzdGRlcnInIGEgc3RyaW5nCiAgICAgZGVzY3JpYmluZyB0aGUgcGFydGljdWxhciBtYWNoaW5lIGRlc2NyaXB0aW9uIGNob2ljZS4gIEV2ZXJ5CiAgICAgbWFjaGluZSBkZXNjcmlwdGlvbiBzaG91bGQgZGVmaW5lICdUQVJHRVRfVkVSU0lPTicuICBGb3IgZXhhbXBsZToKCiAgICAgICAgICAjaWZkZWYgTU9UT1JPTEEKICAgICAgICAgICNkZWZpbmUgVEFSR0VUX1ZFUlNJT04gXAogICAgICAgICAgICBmcHJpbnRmIChzdGRlcnIsICIgKDY4aywgTW90b3JvbGEgc3ludGF4KSIpOwogICAgICAgICAgI2Vsc2UKICAgICAgICAgICNkZWZpbmUgVEFSR0VUX1ZFUlNJT04gXAogICAgICAgICAgICBmcHJpbnRmIChzdGRlcnIsICIgKDY4aywgTUlUIHN5bnRheCkiKTsKICAgICAgICAgICNlbmRpZgoKIC0tIE1hY3JvOiBPVkVSUklERV9PUFRJT05TCiAgICAgU29tZXRpbWVzIGNlcnRhaW4gY29tYmluYXRpb25zIG9mIGNvbW1hbmQgb3B0aW9ucyBkbyBub3QgbWFrZSBzZW5zZQogICAgIG9uIGEgcGFydGljdWxhciB0YXJnZXQgbWFjaGluZS4gIFlvdSBjYW4gZGVmaW5lIGEgbWFjcm8KICAgICAnT1ZFUlJJREVfT1BUSU9OUycgdG8gdGFrZSBhY2NvdW50IG9mIHRoaXMuICBUaGlzIG1hY3JvLCBpZgogICAgIGRlZmluZWQsIGlzIGV4ZWN1dGVkIG9uY2UganVzdCBhZnRlciBhbGwgdGhlIGNvbW1hbmQgb3B0aW9ucyBoYXZlCiAgICAgYmVlbiBwYXJzZWQuCgogICAgIERvbid0IHVzZSB0aGlzIG1hY3JvIHRvIHR1cm4gb24gdmFyaW91cyBleHRyYSBvcHRpbWl6YXRpb25zIGZvcgogICAgICctTycuICBUaGF0IGlzIHdoYXQgJ09QVElNSVpBVElPTl9PUFRJT05TJyBpcyBmb3IuCgogLS0gTWFjcm86IENfQ09NTU9OX09WRVJSSURFX09QVElPTlMKICAgICBUaGlzIGlzIHNpbWlsYXIgdG8gJ09WRVJSSURFX09QVElPTlMnIGJ1dCBpcyBvbmx5IHVzZWQgaW4gdGhlIEMKICAgICBsYW5ndWFnZSBmcm9udGVuZHMgKEMsIE9iamVjdGl2ZS1DLCBDKyssIE9iamVjdGl2ZS1DKyspIGFuZCBzbyBjYW4KICAgICBiZSB1c2VkIHRvIGFsdGVyIG9wdGlvbiBmbGFnIHZhcmlhYmxlcyB3aGljaCBvbmx5IGV4aXN0IGluIHRob3NlCiAgICAgZnJvbnRlbmRzLgoKIC0tIE1hY3JvOiBPUFRJTUlaQVRJT05fT1BUSU9OUyAoTEVWRUwsIFNJWkUpCiAgICAgU29tZSBtYWNoaW5lcyBtYXkgZGVzaXJlIHRvIGNoYW5nZSB3aGF0IG9wdGltaXphdGlvbnMgYXJlIHBlcmZvcm1lZAogICAgIGZvciB2YXJpb3VzIG9wdGltaXphdGlvbiBsZXZlbHMuICBUaGlzIG1hY3JvLCBpZiBkZWZpbmVkLCBpcwogICAgIGV4ZWN1dGVkIG9uY2UganVzdCBhZnRlciB0aGUgb3B0aW1pemF0aW9uIGxldmVsIGlzIGRldGVybWluZWQgYW5kCiAgICAgYmVmb3JlIHRoZSByZW1haW5kZXIgb2YgdGhlIGNvbW1hbmQgb3B0aW9ucyBoYXZlIGJlZW4gcGFyc2VkLgogICAgIFZhbHVlcyBzZXQgaW4gdGhpcyBtYWNybyBhcmUgdXNlZCBhcyB0aGUgZGVmYXVsdCB2YWx1ZXMgZm9yIHRoZQogICAgIG90aGVyIGNvbW1hbmQgbGluZSBvcHRpb25zLgoKICAgICBMRVZFTCBpcyB0aGUgb3B0aW1pemF0aW9uIGxldmVsIHNwZWNpZmllZDsgMiBpZiAnLU8yJyBpcyBzcGVjaWZpZWQsCiAgICAgMSBpZiAnLU8nIGlzIHNwZWNpZmllZCwgYW5kIDAgaWYgbmVpdGhlciBpcyBzcGVjaWZpZWQuCgogICAgIFNJWkUgaXMgbm9uemVybyBpZiAnLU9zJyBpcyBzcGVjaWZpZWQgYW5kIHplcm8gb3RoZXJ3aXNlLgoKICAgICBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBtYWNybyB0byBjaGFuZ2Ugb3B0aW9ucyB0aGF0IGFyZSBub3QKICAgICBtYWNoaW5lLXNwZWNpZmljLiAgVGhlc2Ugc2hvdWxkIHVuaWZvcm1seSBzZWxlY3RlZCBieSB0aGUgc2FtZQogICAgIG9wdGltaXphdGlvbiBsZXZlbCBvbiBhbGwgc3VwcG9ydGVkIG1hY2hpbmVzLiAgVXNlIHRoaXMgbWFjcm8gdG8KICAgICBlbmFibGUgbWFjaGluZS1zcGVjaWZpYyBvcHRpbWl6YXRpb25zLgoKICAgICAqRG8gbm90IGV4YW1pbmUgJ3dyaXRlX3N5bWJvbHMnIGluIHRoaXMgbWFjcm8hKiAgVGhlIGRlYnVnZ2luZwogICAgIG9wdGlvbnMgYXJlIG5vdCBzdXBwb3NlZCB0byBhbHRlciB0aGUgZ2VuZXJhdGVkIGNvZGUuCgogLS0gVGFyZ2V0IEhvb2s6IGJvb2wgVEFSR0VUX0hFTFAgKHZvaWQpCiAgICAgVGhpcyBob29rIGlzIGNhbGxlZCBpbiByZXNwb25zZSB0byB0aGUgdXNlciBpbnZva2luZwogICAgICctLXRhcmdldC1oZWxwJyBvbiB0aGUgY29tbWFuZCBsaW5lLiAgSXQgZ2l2ZXMgdGhlIHRhcmdldCBhIGNoYW5jZQogICAgIHRvIGRpc3BsYXkgZXh0cmEgaW5mb3JtYXRpb24gb24gdGhlIHRhcmdldCBzcGVjaWZpYyBjb21tYW5kIGxpbmUKICAgICBvcHRpb25zIGZvdW5kIGluIGl0cyAnLm9wdCcgZmlsZS4KCiAtLSBNYWNybzogQ0FOX0RFQlVHX1dJVEhPVVRfRlAKICAgICBEZWZpbmUgdGhpcyBtYWNybyBpZiBkZWJ1Z2dpbmcgY2FuIGJlIHBlcmZvcm1lZCBldmVuIHdpdGhvdXQgYQogICAgIGZyYW1lIHBvaW50ZXIuICBJZiB0aGlzIG1hY3JvIGlzIGRlZmluZWQsIEdDQyB3aWxsIHR1cm4gb24gdGhlCiAgICAgJy1mb21pdC1mcmFtZS1wb2ludGVyJyBvcHRpb24gd2hlbmV2ZXIgJy1PJyBpcyBzcGVjaWZpZWQuCgofCkZpbGU6IGdjY2ludC5pbmZvLCAgTm9kZTogUGVyLUZ1bmN0aW9uIERhdGEsICBOZXh0OiBTdG9yYWdlIExheW91dCwgIFByZXY6IFJ1bi10aW1lIFRhcmdldCwgIFVwOiBUYXJnZXQgTWFjcm9zCgoxNS40IERlZmluaW5nIGRhdGEgc3RydWN0dXJlcyBmb3IgcGVyLWZ1bmN0aW9uIGluZm9ybWF0aW9uLgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKSWYgdGhlIHRhcmdldCBuZWVkcyB0byBzdG9yZSBpbmZvcm1hdGlvbiBvbiBhIHBlci1mdW5jdGlvbiBiYXNpcywgR0NDCnByb3ZpZGVzIGEgbWFjcm8gYW5kIGEgY291cGxlIG9mIHZhcmlhYmxlcyB0byBhbGxvdyB0aGlzLiAgTm90ZSwganVzdAp1c2luZyBzdGF0aWNzIHRvIHN0b3JlIHRoZSBpbmZvcm1hdGlvbiBpcyBhIGJhZCBpZGVhLCBzaW5jZSBHQ0Mgc3VwcG9ydHMKbmVzdGVkIGZ1bmN0aW9ucywgc28geW91IGNhbiBiZSBoYWxmd2F5IHRocm91Z2ggZW5jb2Rpbmcgb25lIGZ1bmN0aW9uCndoZW4gYW5vdGhlciBvbmUgY29tZXMgYWxvbmcuCgogR0NDIGRlZmluZXMgYSBkYXRhIHN0cnVjdHVyZSBjYWxsZWQgJ3N0cnVjdCBmdW5jdGlvbicgd2hpY2ggY29udGFpbnMKYWxsIG9mIHRoZSBkYXRhIHNwZWNpZmljIHRvIGFuIGluZGl2aWR1YWwgZnVuY3Rpb24uICBUaGlzIHN0cnVjdHVyZQpjb250YWlucyBhIGZpZWxkIGNhbGxlZCAnbWFjaGluZScgd2hvc2UgdHlwZSBpcyAnc3RydWN0IG1hY2hpbmVfZnVuY3Rpb24KKicsIHdoaWNoIGNhbiBiZSB1c2VkIGJ5IHRhcmdldHMgdG8gcG9pbnQgdG8gdGhlaXIgb3duIHNwZWNpZmljIGRhdGEuCgogSWYgYSB0YXJnZXQgbmVlZHMgcGVyLWZ1bmN0aW9uIHNwZWNpZmljIGRhdGEgaXQgc2hvdWxkIGRlZmluZSB0aGUgdHlwZQonc3RydWN0IG1hY2hpbmVfZnVuY3Rpb24nIGFuZCBhbHNvIHRoZSBtYWNybyAnSU5JVF9FWFBBTkRFUlMnLiAgVGhpcwptYWNybyBzaG91bGQgYmUgdXNlZCB0byBpbml0aWFsaXplIHRoZSBmdW5jdGlvbiBwb2ludGVyCidpbml0X21hY2hpbmVfc3RhdHVzJy4gIFRoaXMgcG9pbnRlciBpcyBleHBsYWluZWQgYmVsb3cuCgogT25lIHR5cGljYWwgdXNlIG9mIHBlci1mdW5jdGlvbiwgdGFyZ2V0IHNwZWNpZmljIGRhdGEgaXMgdG8gY3JlYXRlIGFuClJUWCB0byBob2xkIHRoZSByZWdpc3RlciBjb250YWluaW5nIHRoZSBmdW5jdGlvbidzIHJldHVybiBhZGRyZXNzLiAgVGhpcwpSVFggY2FuIHRoZW4gYmUgdXNlZCB0byBpbXBsZW1lbnQgdGhlICdfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MnCmZ1bmN0aW9uLCBmb3IgbGV2ZWwgMC4KCiBOb3RlLS1lYXJsaWVyIGltcGxlbWVudGF0aW9ucyBvZiBHQ0MgdXNlZCBhIHNpbmdsZSBkYXRhIGFyZWEgdG8gaG9sZAphbGwgb2YgdGhlIHBlci1mdW5jdGlvbiBpbmZvcm1hdGlvbi4gIFRodXMgd2hlbiBwcm9jZXNzaW5nIG9mIGEgbmVzdGVkCmZ1bmN0aW9uIGJlZ2FuIHRoZSBvbGQgcGVyLWZ1bmN0aW9uIGRhdGEgaGFkIHRvIGJlIHB1c2hlZCBvbnRvIGEgc3RhY2ssCmFuZCB3aGVuIHRoZSBwcm9jZXNzaW5nIHdhcyBmaW5pc2hlZCwgaXQgaGFkIHRvIGJlIHBvcHBlZCBvZmYgdGhlIHN0YWNrLgpHQ0MgdXNlZCB0byBwcm92aWRlIGZ1bmN0aW9uIHBvaW50ZXJzIGNhbGxlZCAnc2F2ZV9tYWNoaW5lX3N0YXR1cycgYW5kCidyZXN0b3JlX21hY2hpbmVfc3RhdHVzJyB0byBoYW5kbGUgdGhlIHNhdmluZyBhbmQgcmVzdG9yaW5nIG9mIHRoZQp0YXJnZXQgc3BlY2lmaWMgaW5mb3JtYXRpb24uICBTaW5jZSB0aGUgc2luZ2xlIGRhdGEgYXJlYSBhcHByb2FjaCBpcyBubwpsb25nZXIgdXNlZCwgdGhlc2UgcG9pbnRlcnMgYXJlIG5vIGxvbmdlciBzdXBwb3J0ZWQuCgogLS0gTWFjcm86IElOSVRfRVhQQU5ERVJTCiAgICAgTWFjcm8gY2FsbGVkIHRvIGluaXRpYWxpemUgYW55IHRhcmdldCBzcGVjaWZpYyBpbmZvcm1hdGlvbi4gIFRoaXMKICAgICBtYWNybyBpcyBjYWxsZWQgb25jZSBwZXIgZnVuY3Rpb24sIGJlZm9yZSBnZW5lcmF0aW9uIG9mIGFueSBSVEwgaGFzCiAgICAgYmVndW4uICBUaGUgaW50ZW50aW9uIG9mIHRoaXMgbWFjcm8gaXMgdG8gYWxsb3cgdGhlIGluaXRpYWxpemF0aW9uCiAgICAgb2YgdGhlIGZ1bmN0aW9uIHBvaW50ZXIgJ2luaXRfbWFjaGluZV9zdGF0dXMnLgoKIC0tIFZhcmlhYmxlOiB2b2lkICgqKShzdHJ1Y3QgZnVuY3Rpb24gKikgaW5pdF9tYWNoaW5lX3N0YXR1cwogICAgIElmIHRoaXMgZnVuY3Rpb24gcG9pbnRlciBpcyBub24tJ05VTEwnIGl0IHdpbGwgYmUgY2FsbGVkIG9uY2UgcGVyCiAgICAgZnVuY3Rpb24sIGJlZm9yZSBmdW5jdGlvbiBjb21waWxhdGlvbiBzdGFydHMsIGluIG9yZGVyIHRvIGFsbG93IHRoZQogICAgIHRhcmdldCB0byBwZXJmb3JtIGFueSB0YXJnZXQgc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gb2YgdGhlICdzdHJ1Y3QKICAgICBmdW5jdGlvbicgc3RydWN0dXJlLiAgSXQgaXMgaW50ZW5kZWQgdGhhdCB0aGlzIHdvdWxkIGJlIHVzZWQgdG8KICAgICBpbml0aWFsaXplIHRoZSAnbWFjaGluZScgb2YgdGhhdCBzdHJ1Y3R1cmUuCgogICAgICdzdHJ1Y3QgbWFjaGluZV9mdW5jdGlvbicgc3RydWN0dXJlcyBhcmUgZXhwZWN0ZWQgdG8gYmUgZnJlZWQgYnkKICAgICBHQy4gIEdlbmVyYWxseSwgYW55IG1lbW9yeSB0aGF0IHRoZXkgcmVmZXJlbmNlIG11c3QgYmUgYWxsb2NhdGVkIGJ5CiAgICAgdXNpbmcgJ2dnY19hbGxvYycsIGluY2x1ZGluZyB0aGUgc3RydWN0dXJlIGl0c2VsZi4KCh8KRmlsZTogZ2NjaW50LmluZm8sICBOb2RlOiBTdG9yYWdlIExheW91dCwgIE5leHQ6IFR5cGUgTGF5b3V0LCAgUHJldjogUGVyLUZ1bmN0aW9uIERhdGEsICBVcDogVGFyZ2V0IE1hY3JvcwoKMTUuNSBTdG9yYWdlIExheW91dAo9PT09PT09PT09PT09PT09PT09CgpOb3RlIHRoYXQgdGhlIGRlZmluaXRpb25zIG9mIHRoZSBtYWNyb3MgaW4gdGhpcyB0YWJsZSB3aGljaCBhcmUgc2l6ZXMgb3IKYWxpZ25tZW50cyBtZWFzdXJlZCBpbiBiaXRzIGRvIG5vdCBuZWVkIHRvIGJlIGNvbnN0YW50LiAgVGhleSBjYW4gYmUgQwpleHByZXNzaW9ucyB0aGF0IHJlZmVyIHRvIHN0YXRpYyB2YXJpYWJsZXMsIHN1Y2ggYXMgdGhlICd0YXJnZXRfZmxhZ3MnLgoqTm90ZSBSdW4tdGltZSBUYXJnZXQ6Oi4KCiAtLSBNYWNybzogQklUU19CSUdfRU5ESUFOCiAgICAgRGVmaW5lIHRoaXMgbWFjcm8gdG8gaGF2ZSB0aGUgdmFsdWUgMSBpZiB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQKICAgICBpbiBhIGJ5dGUgaGFzIHRoZSBsb3dlc3QgbnVtYmVyOyBvdGhlcndpc2UgZGVmaW5lIGl0IHRvIGhhdmUgdGhlCiAgICAgdmFsdWUgemVyby4gIFRoaXMgbWVhbnMgdGhhdCBiaXQtZmllbGQgaW5zdHJ1Y3Rpb25zIGNvdW50IGZyb20gdGhlCiAgICAgbW9zdCBzaWduaWZpY2FudCBiaXQuICBJZiB0aGUgbWFjaGluZSBoYXMgbm8gYml0LWZpZWxkCiAgICAgaW5zdHJ1Y3Rpb25zLCB0aGVuIHRoaXMgbXVzdCBzdGlsbCBiZSBkZWZpbmVkLCBidXQgaXQgZG9lc24ndAogICAgIG1hdHRlciB3aGljaCB2YWx1ZSBpdCBpcyBkZWZpbmVkIHRvLiAgVGhpcyBtYWNybyBuZWVkIG5vdCBiZSBhCiAgICAgY29uc3RhbnQuCgogICAgIFRoaXMgbWFjcm8gZG9lcyBub3QgYWZmZWN0IHRoZSB3YXkgc3RydWN0dXJlIGZpZWxkcyBhcmUgcGFja2VkIGludG8KICAgICBieXRlcyBvciB3b3JkczsgdGhhdCBpcyBjb250cm9sbGVkIGJ5ICdCWVRFU19CSUdfRU5ESUFOJy4KCiAtLSBNYWNybzogQllURVNfQklHX0VORElBTgogICAgIERlZmluZSB0aGlzIG1hY3JvIHRvIGhhdmUgdGhlIHZhbHVlIDEgaWYgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYnl0ZQogICAgIGluIGEgd29yZCBoYXMgdGhlIGxvd2VzdCBudW1iZXIuICBUaGlzIG1hY3JvIG5lZWQgbm90IGJlIGEKICAgICBjb25zdGFudC4KCiAtLSBNYWNybzogV09SRFNfQklHX0VORElBTgogICAgIERlZmluZSB0aGlzIG1hY3JvIHRvIGhhdmUgdGhlIHZhbHVlIDEgaWYsIGluIGEgbXVsdGl3b3JkIG9iamVjdCwKICAgICB0aGUgbW9zdCBzaWduaWZpY2FudCB3b3JkIGhhcyB0aGUgbG93ZXN0IG51bWJlci4gIFRoaXMgYXBwbGllcyB0bwogICAgIGJvdGggbWVtb3J5IGxvY2F0aW9ucyBhbmQgcmVnaXN0ZXJzOyBHQ0MgZnVuZGFtZW50YWxseSBhc3N1bWVzIHRoYXQKICAgICB0aGUgb3JkZXIgb2Ygd29yZHMgaW4gbWVtb3J5IGlzIHRoZSBzYW1lIGFzIHRoZSBvcmRlciBpbiByZWdpc3RlcnMuCiAgICAgVGhpcyBtYWNybyBuZWVkIG5vdCBiZSBhIGNvbnN0YW50LgoKIC0tIE1hY3JvOiBMSUJHQ0MyX1dPUkRTX0JJR19FTkRJQU4KICAgICBEZWZpbmUgdGhpcyBtYWNybyBpZiAnV09SRFNfQklHX0VORElBTicgaXMgbm90IGNvbnN0YW50LiAgVGhpcyBtdXN0CiAgICAgYmUgYSBjb25zdGFudCB2YWx1ZSB3aXRoIHRoZSBzYW1lIG1lYW5pbmcgYXMgJ1dPUkRTX0JJR19FTkRJQU4nLAogICAgIHdoaWNoIHdpbGwgYmUgdXNlZCBvbmx5IHdoZW4gY29tcGlsaW5nICdsaWJnY2MyLmMnLiAgVHlwaWNhbGx5IHRoZQogICAgIHZhbHVlIHdpbGwgYmUgc2V0IGJhc2VkIG9uIHByZXByb2Nlc3NvciBkZWZpbmVzLgoKIC0tIE1hY3JvOiBGTE9BVF9XT1JEU19CSUdfRU5ESUFOCiAgICAgRGVmaW5lIHRoaXMgbWFjcm8gdG8gaGF2ZSB0aGUgdmFsdWUgMSBpZiAnREZtb2RlJywgJ1hGbW9kZScgb3IKICAgICAnVEZtb2RlJyBmbG9hdGluZyBwb2ludCBudW1iZXJzIGFyZSBzdG9yZWQgaW4gbWVtb3J5IHdpdGggdGhlIHdvcmQKICAgICBjb250YWluaW5nIHRoZSBzaWduIGJpdCBhdCB0aGUgbG93ZXN0IGFkZHJlc3M7IG90aGVyd2lzZSBkZWZpbmUgaXQKICAgICB0byBoYXZlIHRoZSB2YWx1ZSAwLiAgVGhpcyBtYWNybyBuZWVkIG5vdCBiZSBhIGNvbnN0YW50LgoKICAgICBZb3UgbmVlZCBub3QgZGVmaW5lIHRoaXMgbWFjcm8gaWYgdGhlIG9yZGVyaW5nIGlzIHRoZSBzYW1lIGFzIGZvcgogICAgIG11bHRpLXdvcmQgaW50ZWdlcnMuCgogLS0gTWFjcm86IEJJVFNfUEVSX1VOSVQKICAgICBEZWZpbmUgdGhpcyBtYWNybyB0byBiZSB0aGUgbnVtYmVyIG9mIGJpdHMgaW4gYW4gYWRkcmVzc2FibGUKICAgICBzdG9yYWdlIHVuaXQgKGJ5dGUpLiAgSWYgeW91IGRvIG5vdCBkZWZpbmUgdGhpcyBtYWNybyB0aGUgZGVmYXVsdAogICAgIGlzIDguCgogLS0gTWFjcm86IEJJVFNfUEVSX1dPUkQKICAgICBOdW1iZXIgb2YgYml0cyBpbiBhIHdvcmQuICBJZiB5b3UgZG8gbm90IGRlZmluZSB0aGlzIG1hY3JvLCB0aGUKICAgICBkZWZhdWx0IGlzICdCSVRTX1BFUl9VTklUICogVU5JVFNfUEVSX1dPUkQnLgoKIC0tIE1hY3JvOiBNQVhfQklUU19QRVJfV09SRAogICAgIE1heGltdW0gbnVtYmVyIG9mIGJpdHMgaW4gYSB3b3JkLiAgSWYgdGhpcyBpcyB1bmRlZmluZWQsIHRoZQogICAgIGRlZmF1bHQgaXMgJ0JJVFNfUEVSX1dPUkQnLiAgT3RoZXJ3aXNlLCBpdCBpcyB0aGUgY29uc3RhbnQgdmFsdWUKICAgICB0aGF0IGlzIHRoZSBsYXJnZXN0IHZhbHVlIHRoYXQgJ0JJVFNfUEVSX1dPUkQnIGNhbiBoYXZlIGF0CiAgICAgcnVuLXRpbWUuCgogLS0gTWFjcm86IFVOSVRTX1BFUl9XT1JECiAgICAgTnVtYmVyIG9mIHN0b3JhZ2UgdW5pdHMgaW4gYSB3b3JkOyBub3JtYWxseSB0aGUgc2l6ZSBvZiBhCiAgICAgZ2VuZXJhbC1wdXJwb3NlIHJlZ2lzdGVyLCBhIHBvd2VyIG9mIHR3byBmcm9tIDEgb3IgOC4KCiAtLSBNYWNybzogTUlOX1VOSVRTX1BFUl9XT1JECiAgICAgTWluaW11bSBudW1iZXIgb2YgdW5pdHMgaW4gYSB3b3JkLiAgSWYgdGhpcyBpcyB1bmRlZmluZWQsIHRoZQogICAgIGRlZmF1bHQgaXMgJ1VOSVRTX1BFUl9XT1JEJy4gIE90aGVyd2lzZSwgaXQgaXMgdGhlIGNvbnN0YW50IHZhbHVlCiAgICAgdGhhdCBpcyB0aGUgc21hbGxlc3QgdmFsdWUgdGhhdCAnVU5JVFNfUEVSX1dPUkQnIGNhbiBoYXZlIGF0CiAgICAgcnVuLXRpbWUuCgogLS0gTWFjcm86IFVOSVRTX1BFUl9TSU1EX1dPUkQKICAgICBOdW1iZXIgb2YgdW5pdHMgaW4gdGhlIHZlY3RvcnMgdGhhdCB0aGUgdmVjdG9yaXplciBjYW4gcHJvZHVjZS4KICAgICBUaGUgZGVmYXVsdCBpcyBlcXVhbCB0byAnVU5JVFNfUEVSX1dPUkQnLCBiZWNhdXNlIHRoZSB2ZWN0b3JpemVyCiAgICAgY2FuIGRvIHNvbWUgdHJhbnNmb3JtYXRpb25zIGV2ZW4gaW4gYWJzZW5jZSBvZiBzcGVjaWFsaXplZCBTSU1ECiAgICAgaGFyZHdhcmUuCgogLS0gTWFjcm86IFBPSU5URVJfU0laRQogICAgIFdpZHRoIG9mIGEgcG9pbnRlciwgaW4gYml0cy4gIFlvdSBtdXN0IHNwZWNpZnkgYSB2YWx1ZSBubyB3aWRlcgogICAgIHRoYW4gdGhlIHdpZHRoIG9mICdQbW9kZScuICBJZiBpdCBpcyBub3QgZXF1YWwgdG8gdGhlIHdpZHRoIG9mCiAgICAgJ1Btb2RlJywgeW91IG11c3QgZGVmaW5lICdQT0lOVEVSU19FWFRFTkRfVU5TSUdORUQnLiAgSWYgeW91IGRvIG5vdAogICAgIHNwZWNpZnkgYSB2YWx1ZSB0aGUgZGVmYXVsdCBpcyAnQklUU19QRVJfV09SRCcuCgogLS0gTWFjcm86IFBPSU5URVJTX0VYVEVORF9VTlNJR05FRAogICAgIEEgQyBleHByZXNzaW9uIHRoYXQgZGV0ZXJtaW5lcyBob3cgcG9pbnRlcnMgc2hvdWxkIGJlIGV4dGVuZGVkIGZyb20KICAgICAncHRyX21vZGUnIHRvIGVpdGhlciAnUG1vZGUnIG9yICd3b3JkX21vZGUnLiAgSXQgaXMgZ3JlYXRlciB0aGFuCiAgICAgemVybyBpZiBwb2ludGVycyBzaG91bGQgYmUgemVyby1leHRlbmRlZCwgemVybyBpZiB0aGV5IHNob3VsZCBiZQogICAgIHNpZ24tZXh0ZW5kZWQsIGFuZCBuZWdhdGl2ZSBpZiBzb21lIG90aGVyIHNvcnQgb2YgY29udmVyc2lvbiBpcwogICAgIG5lZWRlZC4gIEluIHRoZSBsYXN0IGNhc2UsIHRoZSBleHRlbnNpb24gaXMgZG9uZSBieSB0aGUgdGFyZ2V0J3MKICAgICAncHRyX2V4dGVuZCcgaW5zdHJ1Y3Rpb24uCgogICAgIFlvdSBuZWVkIG5vdCBkZWZpbmUgdGhpcyBtYWNybyBpZiB0aGUgJ3B0cl9tb2RlJywgJ1Btb2RlJyBhbmQKICAgICAnd29yZF9tb2RlJyBhcmUgYWxsIHRoZSBzYW1lIHdpZHRoLgoKIC0tIE1hY3JvOiBQUk9NT1RFX01PREUgKE0sIFVOU0lHTkVEUCwgVFlQRSkKICAgICBBIG1hY3JvIHRvIHVwZGF0ZSBNIGFuZCBVTlNJR05FRFAgd2hlbiBhbiBvYmplY3Qgd2hvc2UgdHlwZSBpcyBUWVBFCiAgICAgYW5kIHdoaWNoIGhhcyB0aGUgc3BlY2lmaWVkIG1vZGUgYW5kIHNpZ25lZG5lc3MgaXMgdG8gYmUgc3RvcmVkIGluCiAgICAgYSByZWdpc3Rlci4gIFRoaXMgbWFjcm8gaXMgb25seSBjYWxsZWQgd2hlbiBUWVBFIGlzIGEgc2NhbGFyIHR5cGUuCgogICAgIE9uIG1vc3QgUklTQyBtYWNoaW5lcywgd2hpY2ggb25seSBoYXZlIG9wZXJhdGlvbnMgdGhhdCBvcGVyYXRlIG9uIGEKICAgICBmdWxsIHJlZ2lzdGVyLCBkZWZpbmUgdGhpcyBtYWNybyB0byBzZXQgTSB0byAnd29yZF9tb2RlJyBpZiBNIGlzIGFuCiAgICAgaW50ZWdlciBtb2RlIG5hcnJvd2VyIHRoYW4gJ0JJVFNfUEVSX1dPUkQnLiAgSW4gbW9zdCBjYXNlcywgb25seQogICAgIGludGVnZXIgbW9kZXMgc2hvdWxkIGJlIHdpZGVuZWQgYmVjYXVzZSB3aWRlci1wcmVjaXNpb24KICAgICBmbG9hdGluZy1wb2ludCBvcGVyYXRpb25zIGFyZSB1c3VhbGx5IG1vcmUgZXhwZW5zaXZlIHRoYW4gdGhlaXIKICAgICBuYXJyb3dlciBjb3VudGVycGFydHMuCgogICAgIEZvciBtb3N0IG1hY2hpbmVzLCB0aGUgbWFjcm8gZGVmaW5pdGlvbiBkb2VzIG5vdCBjaGFuZ2UgVU5TSUdORURQLgogICAgIEhvd2V2ZXIsIHNvbWUgbWFjaGluZXMsIGhhdmUgaW5zdHJ1Y3Rpb25zIHRoYXQgcHJlZmVyZW50aWFsbHkKICAgICBoYW5kbGUgZWl0aGVyIHNpZ25lZCBvciB1bnNpZ25lZCBxdWFudGl0aWVzIG9mIGNlcnRhaW4gbW9kZXMuICBGb3IKICAgICBleGFtcGxlLCBvbiB0aGUgREVDIEFscGhhLCAzMi1iaXQgbG9hZHMgZnJvbSBtZW1vcnkgYW5kIDMyLWJpdCBhZGQKICAgICBpbnN0cnVjdGlvbnMgc2lnbi1leHRlbmQgdGhlIHJlc3VsdCB0byA2NCBiaXRzLiAgT24gc3VjaCBtYWNoaW5lcywKICAgICBzZXQgVU5TSUdORURQIGFjY29yZGluZyB0byB3aGljaCBraW5kIG9mIGV4dGVuc2lvbiBpcyBtb3JlCiAgICAgZWZmaWNpZW50LgoKICAgICBEbyBub3QgZGVmaW5lIHRoaXMgbWFjcm8gaWYgaXQgd291bGQgbmV2ZXIgbW9kaWZ5IE0uCgogLS0gTWFjcm86IFBST01PVEVfRlVOQ1RJT05fTU9ERQogICAgIExpa2UgJ1BST01PVEVfTU9ERScsIGJ1dCBpcyBhcHBsaWVkIHRvIG91dGdvaW5nIGZ1bmN0aW9uIGFyZ3VtZW50cwogICAgIG9yIGZ1bmN0aW9uIHJldHVybiB2YWx1ZXMsIGFzIHNwZWNpZmllZCBieQogICAgICdUQVJHRVRfUFJPTU9URV9GVU5DVElPTl9BUkdTJyBhbmQKICAgICAnVEFSR0VUX1BST01PVEVfRlVOQ1RJT05fUkVUVVJOJywgcmVzcGVjdGl2ZWx5LgoKICAgICBUaGUgZGVmYXVsdCBpcyAnUFJPTU9URV9NT0RFJy4KCiAtLSBUYXJnZXQgSG9vazogYm9vbCBUQVJHRVRfUFJPTU9URV9GVU5DVElPTl9BUkdTICh0cmVlIEZOVFlQRSkKICAgICBUaGlzIHRhcmdldCBob29rIHNob3VsZCByZXR1cm4gJ3RydWUnIGlmIHRoZSBwcm9tb3Rpb24gZGVzY3JpYmVkIGJ5CiAgICAgJ1BST01PVEVfRlVOQ1RJT05fTU9ERScgc2hvdWxkIGJlIGRvbmUgZm9yIG91dGdvaW5nIGZ1bmN0aW9uCiAgICAgYXJndW1lbnRzLgoKIC0tIFRhcmdldCBIb29rOiBib29sIFRBUkdFVF9QUk9NT1RFX0ZVTkNUSU9OX1JFVFVSTiAodHJlZSBGTlRZUEUpCiAgICAgVGhpcyB0YXJnZXQgaG9vayBzaG91bGQgcmV0dXJuICd0cnVlJyBpZiB0aGUgcHJvbW90aW9uIGRlc2NyaWJlZCBieQogICAgICdQUk9NT1RFX0ZVTkNUSU9OX01PREUnIHNob3VsZCBiZSBkb25lIGZvciB0aGUgcmV0dXJuIHZhbHVlIG9mCiAgICAgZnVuY3Rpb25zLgoKICAgICBJZiB0aGlzIHRhcmdldCBob29rIHJldHVybnMgJ3RydWUnLCAnVEFSR0VUX0ZVTkNUSU9OX1ZBTFVFJyBtdXN0CiAgICAgcGVyZm9ybSB0aGUgc2FtZSBwcm9tb3Rpb25zIGRvbmUgYnkgJ1BST01PVEVfRlVOQ1RJT05fTU9ERScuCgogLS0gTWFjcm86IFBBUk1fQk9VTkRBUlkKICAgICBOb3JtYWwgYWxpZ25tZW50IHJlcXVpcmVkIGZvciBmdW5jdGlvbiBwYXJhbWV0ZXJzIG9uIHRoZSBzdGFjaywgaW4KICAgICBiaXRzLiAgQWxsIHN0YWNrIHBhcmFtZXRlcnMgcmVjZWl2ZSBhdCBsZWFzdCB0aGlzIG11Y2ggYWxpZ25tZW50CiAgICAgcmVnYXJkbGVzcyBvZiBkYXRhIHR5cGUuICBPbiBtb3N0IG1hY2hpbmVzLCB0aGlzIGlzIHRoZSBzYW1lIGFzIHRoZQogICAgIHNpemUgb2YgYW4gaW50ZWdlci4KCiAtLSBNYWNybzogU1RBQ0tfQk9VTkRBUlkKICAgICBEZWZpbmUgdGhpcyBtYWNybyB0byB0aGUgbWluaW11bSBhbGlnbm1lbnQgZW5mb3JjZWQgYnkgaGFyZHdhcmUgZm9yCiAgICAgdGhlIHN0YWNrIHBvaW50ZXIgb24gdGhpcyBtYWNoaW5lLiAgVGhlIGRlZmluaXRpb24gaXMgYSBDCiAgICAgZXhwcmVzc2lvbiBmb3IgdGhlIGRlc2lyZWQgYWxpZ25tZW50IChtZWFzdXJlZCBpbiBiaXRzKS4gIFRoaXMKICAgICB2YWx1ZSBpcyB1c2VkIGFzIGEgZGVmYXVsdCBpZiAnUFJFRkVSUkVEX1NUQUNLX0JPVU5EQVJZJyBpcyBub3QKICAgICBkZWZpbmVkLiAgT24gbW9zdCBtYWNoaW5lcywgdGhpcyBzaG91bGQgYmUgdGhlIHNhbWUgYXMKICAgICAnUEFSTV9CT1VOREFSWScuCgogLS0gTWFjcm86IFBSRUZFUlJFRF9TVEFDS19CT1VOREFSWQogICAgIERlZmluZSB0aGlzIG1hY3JvIGlmIHlvdSB3aXNoIHRvIHByZXNlcnZlIGEgY2VydGFpbiBhbGlnbm1lbnQgZm9yCiAgICAgdGhlIHN0YWNrIHBvaW50ZXIsIGdyZWF0ZXIgdGhhbiB3aGF0IHRoZSBoYXJkd2FyZSBlbmZvcmNlcy4gIFRoZQogICAgIGRlZmluaXRpb24gaXMgYSBDIGV4cHJlc3Npb24gZm9yIHRoZSBkZXNpcmVkIGFsaWdubWVudCAobWVhc3VyZWQgaW4KICAgICBiaXRzKS4gIFRoaXMgbWFjcm8gbXVzdCBldmFsdWF0ZSB0byBhIHZhbHVlIGVxdWFsIHRvIG9yIGxhcmdlciB0aGFuCiAgICAgJ1NUQUNLX0JPVU5EQVJZJy4KCiAtLSBNYWNybzogRlVOQ1RJT05fQk9VTkRBUlkKICAgICBBbGlnbm1lbnQgcmVxdWlyZWQgZm9yIGEgZnVuY3Rpb24gZW50cnkgcG9pbnQsIGluIGJpdHMuCgogLS0gTWFjcm86IEJJR0dFU1RfQUxJR05NRU5UCiAgICAgQmlnZ2VzdCBhbGlnbm1lbnQgdGhhdCBhbnkgZGF0YSB0eXBlIGNhbiByZXF1aXJlIG9uIHRoaXMgbWFjaGluZSwKICAgICBpbiBiaXRzLiAgTm90ZSB0aGF0IHRoaXMgaXMgbm90IHRoZSBiaWdnZXN0IGFsaWdubWVudCB0aGF0IGlzCiAgICAgc3VwcG9ydGVkLCBqdXN0IHRoZSBiaWdnZXN0IGFsaWdubWVudCB0aGF0LCB3aGVuIHZpb2xhdGVkLCBtYXkKICAgICBjYXVzZSBhIGZhdWx0LgoKIC0tIE1hY3JvOiBNSU5JTVVNX0FUT01JQ19BTElHTk1FTlQKICAgICBJZiBkZWZpbmVkLCB0aGUgc21hbGxlc3QgYWxpZ25tZW50LCBpbiBiaXRzLCB0aGF0IGNhbiBiZSBnaXZlbiB0bwogICAgIGFuIG9iamVjdCB0aGF0IGNhbiBiZSByZWZlcmVuY2VkIGluIG9uZSBvcGVyYXRpb24sIHdpdGhvdXQKICAgICBkaXN0dXJiaW5nIGFueSBuZWFyYnkgb2JqZWN0LiAgTm9ybWFsbHksIHRoaXMgaXMgJ0JJVFNfUEVSX1VOSVQnLAogICAgIGJ1dCBtYXkgYmUgbGFyZ2VyIG9uIG1hY2hpbmVzIHRoYXQgZG9uJ3QgaGF2ZSBieXRlIG9yIGhhbGYtd29yZAogICAgIHN0b3JlIG9wZXJhdGlvbnMuCgogLS0gTWFjcm86IEJJR0dFU1RfRklFTERfQUxJR05NRU5UCiAgICAgQmlnZ2VzdCBhbGlnbm1lbnQgdGhhdCBhbnkgc3RydWN0dXJlIG9yIHVuaW9uIGZpZWxkIGNhbiByZXF1aXJlIG9uCiAgICAgdGhpcyBtYWNoaW5lLCBpbiBiaXRzLiAgSWYgZGVmaW5lZCwgdGhpcyBvdmVycmlkZXMKICAgICAnQklHR0VTVF9BTElHTk1FTlQnIGZvciBzdHJ1Y3R1cmUgYW5kIHVuaW9uIGZpZWxkcyBvbmx5LCB1bmxlc3MgdGhlCiAgICAgZmllbGQgYWxpZ25tZW50IGhhcyBiZWVuIHNldCBieSB0aGUgJ19fYXR0cmlidXRlX18gKChhbGlnbmVkIChOKSkpJwogICAgIGNvbnN0cnVjdC4KCiAtLSBNYWNybzogQURKVVNUX0ZJRUxEX0FMSUdOIChGSUVMRCwgQ09NUFVURUQpCiAgICAgQW4gZXhwcmVzc2lvbiBmb3IgdGhlIGFsaWdubWVudCBvZiBhIHN0cnVjdHVyZSBmaWVsZCBGSUVMRCBpZiB0aGUKICAgICBhbGlnbm1lbnQgY29tcHV0ZWQgaW4gdGhlIHVzdWFsIHdheSAoaW5jbHVkaW5nIGFwcGx5aW5nIG9mCiAgICAgJ0JJR0dFU1RfQUxJR05NRU5UJyBhbmQgJ0JJR0dFU1RfRklFTERfQUxJR05NRU5UJyB0byB0aGUgYWxpZ25tZW50KQogICAgIGlzIENPTVBVVEVELiAgSXQgb3ZlcnJpZGVzIGFsaWdubWVudCBvbmx5IGlmIHRoZSBmaWVsZCBhbGlnbm1lbnQKICAgICBoYXMgbm90IGJlZW4gc2V0IGJ5IHRoZSAnX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQgKE4pKSknIGNvbnN0cnVjdC4KCiAtLSBNYWNybzogTUFYX09GSUxFX0FMSUdOTUVOVAogICAgIEJpZ2dlc3QgYWxpZ25tZW50IHN1cHBvcnRlZCBieSB0aGUgb2JqZWN0IGZpbGUgZm9ybWF0IG9mIHRoaXMKICAgICBtYWNoaW5lLiAgVXNlIHRoaXMgbWFjcm8gdG8gbGltaXQgdGhlIGFsaWdubWVudCB3aGljaCBjYW4gYmUKICAgICBzcGVjaWZpZWQgdXNpbmcgdGhlICdfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCAoTikpKScgY29uc3RydWN0LiAgSWYKICAgICBub3QgZGVmaW5lZCwgdGhlIGRlZmF1bHQgdmFsdWUgaXMgJ0JJR0dFU1RfQUxJR05NRU5UJy4KCiAgICAgT24gc3lzdGVtcyB0aGF0IHVzZSBFTEYsIHRoZSBkZWZhdWx0IChpbiAnY29uZmlnL2VsZm9zLmgnKSBpcyB0aGUKICAgICBsYXJnZXN0IHN1cHBvcnRlZCAzMi1iaXQgRUxGIHNlY3Rpb24gYWxpZ25tZW50IHJlcHJlc2VudGFibGUgb24gYQogICAgIDMyLWJpdCBob3N0IGUuZy4gICcoKCh1bnNpZ25lZCBIT1NUX1dJREVTVF9JTlQpIDEgPDwgMjgpICogOCknLiAgT24KICAgICAzMi1iaXQgRUxGIHRoZSBsYXJnZXN0IHN1cHBvcnRlZCBzZWN0aW9uIGFsaWdubWVudCBpbiBiaXRzIGlzCiAgICAgJygweDgwMDAwMDAwICogOCknLCBidXQgdGhpcyBpcyBub3QgcmVwcmVzZW50YWJsZSBvbiAzMi1iaXQgaG9zdHMuCgogLS0gTWFjcm86IERBVEFfQUxJR05NRU5UIChUWVBFLCBCQVNJQy1BTElHTikKICAgICBJZiBkZWZpbmVkLCBhIEMgZXhwcmVzc2lvbiB0byBjb21wdXRlIHRoZSBhbGlnbm1lbnQgZm9yIGEgdmFyaWFibGUKICAgICBpbiB0aGUgc3RhdGljIHN0b3JlLiAgVFlQRSBpcyB0aGUgZGF0YSB0eXBlLCBhbmQgQkFTSUMtQUxJR04gaXMgdGhlCiAgICAgYWxpZ25tZW50IHRoYXQgdGhlIG9iamVjdCB3b3VsZCBvcmRpbmFyaWx5IGhhdmUuICBUaGUgdmFsdWUgb2YgdGhpcwogICAgIG1hY3JvIGlzIHVzZWQgaW5zdGVhZCBvZiB0aGF0IGFsaWdubWVudCB0byBhbGlnbiB0aGUgb2JqZWN0LgoKICAgICBJZiB0aGlzIG1hY3JvIGlzIG5vdCBkZWZpbmVkLCB0aGVuIEJBU0lDLUFMSUdOIGlzIHVzZWQuCgogICAgIE9uZSB1c2Ugb2YgdGhpcyBtYWNybyBpcyB0byBpbmNyZWFzZSBhbGlnbm1lbnQgb2YgbWVkaXVtLXNpemUgZGF0YQogICAgIHRvIG1ha2UgaXQgYWxsIGZpdCBpbiBmZXdlciBjYWNoZSBsaW5lcy4gIEFub3RoZXIgaXMgdG8gY2F1c2UKICAgICBjaGFyYWN0ZXIgYXJyYXlzIHRvIGJlIHdvcmQtYWxpZ25lZCBzbyB0aGF0ICdzdHJjcHknIGNhbGxzIHRoYXQKICAgICBjb3B5IGNvbnN0YW50cyB0byBjaGFyYWN0ZXIgYXJyYXlzIGNhbiBiZSBkb25lIGlubGluZS4KCiAtLSBNYWNybzogQ09OU1RBTlRfQUxJR05NRU5UIChDT05TVEFOVCwgQkFTSUMtQUxJR04pCiAgICAgSWYgZGVmaW5lZCwgYSBDIGV4cHJlc3Npb24gdG8gY29tcHV0ZSB0aGUgYWxpZ25tZW50IGdpdmVuIHRvIGEKICAgICBjb25zdGFudCB0aGF0IGlzIGJlaW5nIHBsYWNlZCBpbiBtZW1vcnkuICBDT05TVEFOVCBpcyB0aGUgY29uc3RhbnQKICAgICBhbmQgQkFTSUMtQUxJR04gaXMgdGhlIGFsaWdubWVudCB0aGF0IHRoZSBvYmplY3Qgd291bGQgb3JkaW5hcmlseQogICAgIGhhdmUuICBUaGUgdmFsdWUgb2YgdGhpcyBtYWNybyBpcyB1c2VkIGluc3RlYWQgb2YgdGhhdCBhbGlnbm1lbnQgdG8KICAgICBhbGlnbiB0aGUgb2JqZWN0LgoKICAgICBJZiB0aGlzIG1hY3JvIGlzIG5vdCBkZWZpbmVkLCB0aGVuIEJBU0lDLUFMSUdOIGlzIHVzZWQuCgogICAgIFRoZSB0eXBpY2FsIHVzZSBvZiB0aGlzIG1hY3JvIGlzIHRvIGluY3JlYXNlIGFsaWdubWVudCBmb3Igc3RyaW5nCiAgICAgY29uc3RhbnRzIHRvIGJlIHdvcmQgYWxpZ25lZCBzbyB0aGF0ICdzdHJjcHknIGNhbGxzIHRoYXQgY29weQogICAgIGNvbnN0YW50cyBjYW4gYmUgZG9uZSBpbmxpbmUuCgogLS0gTWFjcm86IExPQ0FMX0FMSUdOTUVOVCAoVFlQRSwgQkFTSUMtQUxJR04pCiAgICAgSWYgZGVmaW5lZCwgYSBDIGV4cHJlc3Npb24gdG8gY29tcHV0ZSB0aGUgYWxpZ25tZW50IGZvciBhIHZhcmlhYmxlCiAgICAgaW4gdGhlIGxvY2FsIHN0b3JlLiAgVFlQRSBpcyB0aGUgZGF0YSB0eXBlLCBhbmQgQkFTSUMtQUxJR04gaXMgdGhlCiAgICAgYWxpZ25tZW50IHRoYXQgdGhlIG9iamVjdCB3b3VsZCBvcmRpbmFyaWx5IGhhdmUuICBUaGUgdmFsdWUgb2YgdGhpcwogICAgIG1hY3JvIGlzIHVzZWQgaW5zdGVhZCBvZiB0aGF0IGFsaWdubWVudCB0byBhbGlnbiB0aGUgb2JqZWN0LgoKICAgICBJZiB0aGlzIG1hY3JvIGlzIG5vdCBkZWZpbmVkLCB0aGVuIEJBU0lDLUFMSUdOIGlzIHVzZWQuCgogICAgIE9uZSB1c2Ugb2YgdGhpcyBtYWNybyBpcyB0byBpbmNyZWFzZSBhbGlnbm1lbnQgb2YgbWVkaXVtLXNpemUgZGF0YQogICAgIHRvIG1ha2UgaXQgYWxsIGZpdCBpbiBmZXdlciBjYWNoZSBsaW5lcy4KCiAtLSBNYWNybzogRU1QVFlfRklFTERfQk9VTkRBUlkKICAgICBBbGlnbm1lbnQgaW4gYml0cyB0byBiZSBnaXZlbiB0byBhIHN0cnVjdHVyZSBiaXQtZmllbGQgdGhhdCBmb2xsb3dzCiAgICAgYW4gZW1wdHkgZmllbGQgc3VjaCBhcyAnaW50IDogMDsnLgoKICAgICBJZiAnUENDX0JJVEZJRUxEX1RZUEVfTUFUVEVSUycgaXMgdHJ1ZSwgaXQgb3ZlcnJpZGVzIHRoaXMgbWFjcm8uCgogLS0gTWFjcm86IFNUUlVDVFVSRV9TSVpFX0JPVU5EQVJZCiAgICAgTnVtYmVyIG9mIGJpdHMgd2hpY2ggYW55IHN0cnVjdHVyZSBvciB1bmlvbidzIHNpemUgbXVzdCBiZSBhCiAgICAgbXVsdGlwbGUgb2YuICBFYWNoIHN0cnVjdHVyZSBvciB1bmlvbidzIHNpemUgaXMgcm91bmRlZCB1cCB0byBhCiAgICAgbXVsdGlwbGUgb2YgdGhpcy4KCiAgICAgSWYgeW91IGRvIG5vdCBkZWZpbmUgdGhpcyBtYWNybywgdGhlIGRlZmF1bHQgaXMgdGhlIHNhbWUgYXMKICAgICAnQklUU19QRVJfVU5JVCcuCgogLS0gTWFjcm86IFNUUklDVF9BTElHTk1FTlQKICAgICBEZWZpbmUgdGhpcyBtYWNybyB0byBiZSB0aGUgdmFsdWUgMSBpZiBpbnN0cnVjdGlvbnMgd2lsbCBmYWlsIHRvCiAgICAgd29yayBpZiBnaXZlbiBkYXRhIG5vdCBvbiB0aGUgbm9taW5hbCBhbGlnbm1lbnQuICBJZiBpbnN0cnVjdGlvbnMKICAgICB3aWxsIG1lcmVseSBnbyBzbG93ZXIgaW4gdGhhdCBjYXNlLCBkZWZpbmUgdGhpcyBtYWNybyBhcyAwLgoKIC0tIE1hY3JvOiBQQ0NfQklURklFTERfVFlQRV9NQVRURVJTCiAgICAgRGVmaW5lIHRoaXMgaWYgeW91IHdpc2ggdG8gaW1pdGF0ZSB0aGUgd2F5IG1hbnkgb3RoZXIgQyBjb21waWxlcnMKICAgICBoYW5kbGUgYWxpZ25tZW50IG9mIGJpdC1maWVsZHMgYW5kIHRoZSBzdHJ1Y3R1cmVzIHRoYXQgY29udGFpbgogICAgIHRoZW0uCgogICAgIFRoZSBiZWhhdmlvciBpcyB0aGF0IHRoZSB0eXBlIHdyaXR0ZW4gZm9yIGEgbmFtZWQgYml0LWZpZWxkICgnaW50JywKICAgICAnc2hvcnQnLCBvciBvdGhlciBpbnRlZ2VyIHR5cGUpIGltcG9zZXMgYW4gYWxpZ25tZW50IGZvciB0aGUgZW50aXJlCiAgICAgc3RydWN0dXJlLCBhcyBpZiB0aGUgc3RydWN0dXJlIHJlYWxseSBkaWQgY29udGFpbiBhbiBvcmRpbmFyeSBmaWVsZAogICAgIG9mIHRoYXQgdHlwZS4gIEluIGFkZGl0aW9uLCB0aGUgYml0LWZpZWxkIGlzIHBsYWNlZCB3aXRoaW4gdGhlCiAgICAgc3RydWN0dXJlIHNvIHRoYXQgaXQgd291bGQgZml0IHdpdGhpbiBzdWNoIGEgZmllbGQsIG5vdCBjcm9zc2luZyBhCiAgICAgYm91bmRhcnkgZm9yIGl0LgoKICAgICBUaHVzLCBvbiBtb3N0IG1hY2hpbmVzLCBhIG5hbWVkIGJpdC1maWVsZCB3aG9zZSB0eXBlIGlzIHdyaXR0ZW4gYXMKICAgICAnaW50JyB3b3VsZCBub3QgY3Jvc3MgYSBmb3VyLWJ5dGUgYm91bmRhcnksIGFuZCB3b3VsZCBmb3JjZQogICAgIGZvdXItYnl0ZSBhbGlnbm1lbnQgZm9yIHRoZSB3aG9sZSBzdHJ1Y3R1cmUuICAoVGhlIGFsaWdubWVudCB1c2VkCiAgICAgbWF5IG5vdCBiZSBmb3VyIGJ5dGVzOyBpdCBpcyBjb250cm9sbGVkIGJ5IHRoZSBvdGhlciBhbGlnbm1lbnQKICAgICBwYXJhbWV0ZXJzLikKCiAgICAgQW4gdW5uYW1lZCBiaXQtZmllbGQgd2lsbCBub3QgYWZmZWN0IHRoZSBhbGlnbm1lbnQgb2YgdGhlCiAgICAgY29udGFpbmluZyBzdHJ1Y3R1cmUuCgogICAgIElmIHRoZSBtYWNybyBpcyBkZWZpbmVkLCBpdHMgZGVmaW5pdGlvbiBzaG91bGQgYmUgYSBDIGV4cHJlc3Npb247IGEKICAgICBub256ZXJvIHZhbHVlIGZvciB0aGUgZXhwcmVzc2lvbiBlbmFibGVzIHRoaXMgYmVoYXZpb3IuCgogICAgIE5vdGUgdGhhdCBpZiB0aGlzIG1hY3JvIGlzIG5vdCBkZWZpbmVkLCBvciBpdHMgdmFsdWUgaXMgemVybywgc29tZQogICAgIGJpdC1maWVsZHMgbWF5IGNyb3NzIG1vcmUgdGhhbiBvbmUgYWxpZ25tZW50IGJvdW5kYXJ5LiAgVGhlCiAgICAgY29tcGlsZXIgY2FuIHN1cHBvcnQgc3VjaCByZWZlcmVuY2VzIGlmIHRoZXJlIGFyZSAnaW5zdicsICdleHR2JywKICAgICBhbmQgJ2V4dHp2JyBpbnNucyB0aGF0IGNhbiBkaXJlY3RseSByZWZlcmVuY2UgbWVtb3J5LgoKICAgICBUaGUgb3RoZXIga25vd24gd2F5IG9mIG1ha2luZyBiaXQtZmllbGRzIHdvcmsgaXMgdG8gZGVmaW5lCiAgICAgJ1NUUlVDVFVSRV9TSVpFX0JPVU5EQVJZJyBhcyBsYXJnZSBhcyAnQklHR0VTVF9BTElHTk1FTlQnLiAgVGhlbgogICAgIGV2ZXJ5IHN0cnVjdHVyZSBjYW4gYmUgYWNjZXNzZWQgd2l0aCBmdWxsd29yZHMuCgogICAgIFVubGVzcyB0aGUgbWFjaGluZSBoYXMgYml0LWZpZWxkIGluc3RydWN0aW9ucyBvciB5b3UgZGVmaW5lCiAgICAgJ1NUUlVDVFVSRV9TSVpFX0JPVU5EQVJZJyB0aGF0IHdheSwgeW91IG11c3QgZGVmaW5lCiAgICAgJ1BDQ19CSVRGSUVMRF9UWVBFX01BVFRFUlMnIHRvIGhhdmUgYSBub256ZXJvIHZhbHVlLgoKICAgICBJZiB5b3VyIGFpbSBpcyB0byBtYWtlIEdDQyB1c2UgdGhlIHNhbWUgY29udmVudGlvbnMgZm9yIGxheWluZyBvdXQKICAgICBiaXQtZmllbGRzIGFzIGFyZSB1c2VkIGJ5IGFub3RoZXIgY29tcGlsZXIsIGhlcmUgaXMgaG93IHRvCiAgICAgaW52ZXN0aWdhdGUgd2hhdCB0aGUgb3RoZXIgY29tcGlsZXIgZG9lcy4gIENvbXBpbGUgYW5kIHJ1biB0aGlzCiAgICAgcHJvZ3JhbToKCiAgICAgICAgICBzdHJ1Y3QgZm9vMQogICAgICAgICAgewogICAgICAgICAgICBjaGFyIHg7CiAgICAgICAgICAgIGNoYXIgOjA7CiAgICAgICAgICAgIGNoYXIgeTsKICAgICAgICAgIH07CgogICAgICAgICAgc3RydWN0IGZvbzIKICAgICAgICAgIHsKICAgICAgICAgICAgY2hhciB4OwogICAgICAgICAgICBpbnQgOjA7CiAgICAgICAgICAgIGNoYXIgeTsKICAgICAgICAgIH07CgogICAgICAgICAgbWFpbiAoKQogICAgICAgICAgewogICAgICAgICAgICBwcmludGYgKCJTaXplIG9mIGZvbzEgaXMgJWRcbiIsCiAgICAgICAgICAgICAgICAgICAgc2l6ZW9mIChzdHJ1Y3QgZm9vMSkpOwogICAgICAgICAgICBwcmludGYgKCJTaXplIG9mIGZvbzIgaXMgJWRcbiIsCiAgICAgICAgICAgICAgICAgICAgc2l6ZW9mIChzdHJ1Y3QgZm9vMikpOwogICAgICAgICAgICBleGl0ICgwKTsKICAgICAgICAgIH0KCiAgICAgSWYgdGhpcyBwcmludHMgMiBhbmQgNSwgdGhlbiB0aGUgY29tcGlsZXIncyBiZWhhdmlvciBpcyB3aGF0IHlvdQogICAgIHdvdWxkIGdldCBmcm9tICdQQ0NfQklURklFTERfVFlQRV9NQVRURVJTJy4KCiAtLSBNYWNybzogQklURklFTERfTkJZVEVTX0xJTUlURUQKICAgICBMaWtlICdQQ0NfQklURklFTERfVFlQRV9NQVRURVJTJyBleGNlcHQgdGhhdCBpdHMgZWZmZWN0IGlzIGxpbWl0ZWQKICAgICB0byBhbGlnbmluZyBhIGJpdC1maWVsZCB3aXRoaW4gdGhlIHN0cnVjdHVyZS4KCiAtLSBUYXJnZXQgSG9vazogYm9vbCBUQVJHRVRfQUxJR05fQU5PTl9CSVRGSUVMRFMgKHZvaWQpCiAgICAgV2hlbiAnUENDX0JJVEZJRUxEX1RZUEVfTUFUVEVSUycgaXMgdHJ1ZSB0aGlzIGhvb2sgd2lsbCBkZXRlcm1pbmUKICAgICB3aGV0aGVyIHVubmFtZWQgYml0ZmllbGRzIGFmZmVjdCB0aGUgYWxpZ25tZW50IG9mIHRoZSBjb250YWluaW5nCiAgICAgc3RydWN0dXJlLiAgVGhlIGhvb2sgc2hvdWxkIHJldHVybiB0cnVlIGlmIHRoZSBzdHJ1Y3R1cmUgc2hvdWxkCiAgICAgaW5oZXJpdCB0aGUgYWxpZ25tZW50IHJlcXVpcmVtZW50cyBvZiBhbiB1bm5hbWVkIGJpdGZpZWxkJ3MgdHlwZS4KCiAtLSBUYXJnZXQgSG9vazogYm9vbCBUQVJHRVRfTkFSUk9XX1ZPTEFUSUxFX0JJVEZJRUxEUyAodm9pZCkKICAgICBUaGlzIHRhcmdldCBob29rIHNob3VsZCByZXR1cm4gJ3RydWUnIGlmIGFjY2Vzc2VzIHRvIHZvbGF0aWxlCiAgICAgYml0ZmllbGRzIHNob3VsZCB1c2UgdGhlIG5hcnJvd2VzdCBtb2RlIHBvc3NpYmxlLiAgSXQgc2hvdWxkIHJldHVybgogICAgICdmYWxzZScgaWYgdGhlc2UgYWNjZXNzZXMgc2hvdWxkIHVzZSB0aGUgYml0ZmllbGQgY29udGFpbmVyIHR5cGUuCgogICAgIFRoZSBkZWZhdWx0IGlzICchVEFSR0VUX1NUUklDVF9BTElHTicuCgogLS0gTWFjcm86IE1FTUJFUl9UWVBFX0ZPUkNFU19CTEsgKEZJRUxELCBNT0RFKQogICAgIFJldHVybiAxIGlmIGEgc3RydWN0dXJlIG9yIGFycmF5IGNvbnRhaW5pbmcgRklFTEQgc2hvdWxkIGJlCiAgICAgYWNjZXNzZWQgdXNpbmcgJ0JMS01PREUnLgoKICAgICBJZiBGSUVMRCBpcyB0aGUgb25seSBmaWVsZCBpbiB0aGUgc3RydWN0dXJlLCBNT0RFIGlzIGl0cyBtb2RlLAogICAgIG90aGVyd2lzZSBNT0RFIGlzIFZPSURtb2RlLiAgTU9ERSBpcyBwcm92aWRlZCBpbiB0aGUgY2FzZSB3aGVyZQogICAgIHN0cnVjdHVyZXMgb2Ygb25lIGZpZWxkIHdvdWxkIHJlcXVpcmUgdGhlIHN0cnVjdHVyZSdzIG1vZGUgdG8KICAgICByZXRhaW4gdGhlIGZpZWxkJ3MgbW9kZS4KCiAgICAgTm9ybWFsbHksIHRoaXMgaXMgbm90IG5lZWRlZC4KCiAtLSBNYWNybzogUk9VTkRfVFlQRV9BTElHTiAoVFlQRSwgQ09NUFVURUQsIFNQRUNJRklFRCkKICAgICBEZWZpbmUgdGhpcyBtYWNybyBhcyBhbiBleHByZXNzaW9uIGZvciB0aGUgYWxpZ25tZW50IG9mIGEgdHlwZQogICAgIChnaXZlbiBieSBUWVBFIGFzIGEgdHJlZSBub2RlKSBpZiB0aGUgYWxpZ25tZW50IGNvbXB1dGVkIGluIHRoZQogICAgIHVzdWFsIHdheSBpcyBDT01QVVRFRCBhbmQgdGhlIGFsaWdubWVudCBleHBsaWNpdGx5IHNwZWNpZmllZCB3YXMKICAgICBTUEVDSUZJRUQuCgogICAgIFRoZSBkZWZhdWx0IGlzIHRvIHVzZSBTUEVDSUZJRUQgaWYgaXQgaXMgbGFyZ2VyOyBvdGhlcndpc2UsIHVzZSB0aGUKICAgICBzbWFsbGVyIG9mIENPTVBVVEVEIGFuZCAnQklHR0VTVF9BTElHTk1FTlQnCgogLS0gTWFjcm86IE1BWF9GSVhFRF9NT0RFX1NJWkUKICAgICBBbiBpbnRlZ2VyIGV4cHJlc3Npb24gZm9yIHRoZSBzaXplIGluIGJpdHMgb2YgdGhlIGxhcmdlc3QgaW50ZWdlcgogICAgIG1hY2hpbmUgbW9kZSB0aGF0IHNob3VsZCBhY3R1YWxseSBiZSB1c2VkLiAgQWxsIGludGVnZXIgbWFjaGluZQogICAgIG1vZGVzIG9mIHRoaXMgc2l6ZSBvciBzbWFsbGVyIGNhbiBiZSB1c2VkIGZvciBzdHJ1Y3R1cmVzIGFuZCB1bmlvbnMKICAgICB3aXRoIHRoZSBhcHByb3ByaWF0ZSBzaXplcy4gIElmIHRoaXMgbWFjcm8gaXMgdW5kZWZpbmVkLAogICAgICdHRVRfTU9ERV9CSVRTSVpFIChESW1vZGUpJyBpcyBhc3N1bWVkLgoKIC0tIE1hY3JvOiBTVEFDS19TQVZFQVJFQV9NT0RFIChTQVZFX0xFVkVMKQogICAgIElmIGRlZmluZWQsIGFuIGV4cHJlc3Npb24gb2YgdHlwZSAnZW51bSBtYWNoaW5lX21vZGUnIHRoYXQKICAgICBzcGVjaWZpZXMgdGhlIG1vZGUgb2YgdGhlIHNhdmUgYXJlYSBvcGVyYW5kIG9mIGEgJ3NhdmVfc3RhY2tfTEVWRUwnCiAgICAgbmFtZWQgcGF0dGVybiAoKm5vdGUgU3RhbmRhcmQgTmFtZXM6OikuICBTQVZFX0xFVkVMIGlzIG9uZSBvZgogICAgICdTQVZFX0JMT0NLJywgJ1NBVkVfRlVOQ1RJT04nLCBvciAnU0FWRV9OT05MT0NBTCcgYW5kIHNlbGVjdHMgd2hpY2gKICAgICBvZiB0aGUgdGhyZWUgbmFtZWQgcGF0dGVybnMgaXMgaGF2aW5nIGl0cyBtb2RlIHNwZWNpZmllZC4KCiAgICAgWW91IG5lZWQgbm90IGRlZmluZSB0aGlzIG1hY3JvIGlmIGl0IGFsd2F5cyByZXR1cm5zICdQbW9kZScuICBZb3UKICAgICB3b3VsZCBtb3N0IGNvbW1vbmx5IGRlZmluZSB0aGlzIG1hY3JvIGlmIHRoZSAnc2F2ZV9zdGFja19MRVZFTCcKICAgICBwYXR0ZXJucyBuZWVkIHRvIHN1cHBvcnQgYm90aCBhIDMyLSBhbmQgYSA2NC1iaXQgbW9kZS4KCiAtLSBNYWNybzogU1RBQ0tfU0laRV9NT0RFCiAgICAgSWYgZGVmaW5lZCwgYW4gZXhwcmVzc2lvbiBvZiB0eXBlICdlbnVtIG1hY2hpbmVfbW9kZScgdGhhdAogICAgIHNwZWNpZmllcyB0aGUgbW9kZSBvZiB0aGUgc2l6ZSBpbmNyZW1lbnQgb3BlcmFuZCBvZiBhbgogICAgICdhbGxvY2F0ZV9zdGFjaycgbmFtZWQgcGF0dGVybiAoKm5vdGUgU3RhbmRhcmQgTmFtZXM6OikuCgogICAgIFlvdSBuZWVkIG5vdCBkZWZpbmUgdGhpcyBtYWNybyBpZiBpdCBhbHdheXMgcmV0dXJucyAnd29yZF9tb2RlJy4KICAgICBZb3Ugd291bGQgbW9zdCBjb21tb25seSBkZWZpbmUgdGhpcyBtYWNybyBpZiB0aGUgJ2FsbG9jYXRlX3N0YWNrJwogICAgIHBhdHRlcm4gbmVlZHMgdG8gc3VwcG9ydCBib3RoIGEgMzItIGFuZCBhIDY0LWJpdCBtb2RlLgoKIC0tIFRhcmdldCBIb29rOiBlbnVtIG1hY2hpbmVfbW9kZSBUQVJHRVRfTElCR0NDX0NNUF9SRVRVUk5fTU9ERSAoKQogICAgIFRoaXMgdGFyZ2V0IGhvb2sgc2hvdWxkIHJldHVybiB0aGUgbW9kZSB0byBiZSB1c2VkIGZvciB0aGUgcmV0dXJuCiAgICAgdmFsdWUgb2YgY29tcGFyZSBpbnN0cnVjdGlvbnMgZXhwYW5kZWQgdG8gbGliZ2NjIGNhbGxzLiAgSWYgbm90CiAgICAgZGVmaW5lZCAnd29yZF9tb2RlJyBpcyByZXR1cm5lZCB3aGljaCBpcyB0aGUgcmlnaHQgY2hvaWNlIGZvciBhCiAgICAgbWFqb3JpdHkgb2YgdGFyZ2V0cy4KCiAtLSBUYXJnZXQgSG9vazogZW51bSBtYWNoaW5lX21vZGUgVEFSR0VUX0xJQkdDQ19TSElGVF9DT1VOVF9NT0RFICgpCiAgICAgVGhpcyB0YXJnZXQgaG9vayBzaG91bGQgcmV0dXJuIHRoZSBtb2RlIHRvIGJlIHVzZWQgZm9yIHRoZSBzaGlmdAogICAgIGNvdW50IG9wZXJhbmQgb2Ygc2hpZnQgaW5zdHJ1Y3Rpb25zIGV4cGFuZGVkIHRvIGxpYmdjYyBjYWxscy4gIElmCiAgICAgbm90IGRlZmluZWQgJ3dvcmRfbW9kZScgaXMgcmV0dXJuZWQgd2hpY2ggaXMgdGhlIHJpZ2h0IGNob2ljZSBmb3IgYQogICAgIG1ham9yaXR5IG9mIHRhcmdldHMuCgogLS0gTWFjcm86IFRBUkdFVF9GTE9BVF9GT1JNQVQKICAgICBBIGNvZGUgZGlzdGluZ3Vpc2hpbmcgdGhlIGZsb2F0aW5nIHBvaW50IGZvcm1hdCBvZiB0aGUgdGFyZ2V0CiAgICAgbWFjaGluZS4gIFRoZXJlIGFyZSB0d28gZGVmaW5lZCB2YWx1ZXM6CgogICAgICdJRUVFX0ZMT0FUX0ZPUk1BVCcKICAgICAgICAgIFRoaXMgY29kZSBpbmRpY2F0ZXMgSUVFRSBmbG9hdGluZyBwb2ludC4gIEl0IGlzIHRoZSBkZWZhdWx0OwogICAgICAgICAgdGhlcmUgaXMgbm8gbmVlZCB0byBkZWZpbmUgJ1RBUkdFVF9GTE9BVF9GT1JNQVQnIHdoZW4gdGhlCiAgICAgICAgICBmb3JtYXQgaXMgSUVFRS4KCiAgICAgJ1ZBWF9GTE9BVF9GT1JNQVQnCiAgICAgICAgICBUaGlzIGNvZGUgaW5kaWNhdGVzIHRoZSAiRiBmbG9hdCIgKGZvciAnZmxvYXQnKSBhbmQgIkQgZmxvYXQiCiAgICAgICAgICBvciAiRyBmbG9hdCIgZm9ybWF0cyAoZm9yICdkb3VibGUnKSB1c2VkIG9uIHRoZSBWQVggYW5kCiAgICAgICAgICBQRFAtMTEuCgogICAgIElmIHlvdXIgdGFyZ2V0IHVzZXMgYSBmbG9hdGluZyBwb2ludCBmb3JtYXQgb3RoZXIgdGhhbiB0aGVzZSwgeW91CiAgICAgbXVzdCBkZWZpbmUgYSBuZXcgTkFNRV9GTE9BVF9GT1JNQVQgY29kZSBmb3IgaXQsIGFuZCBhZGQgc3VwcG9ydAogICAgIGZvciBpdCB0byAncmVhbC5jJy4KCiAgICAgVGhlIG9yZGVyaW5nIG9mIHRoZSBjb21wb25lbnQgd29yZHMgb2YgZmxvYXRpbmcgcG9pbnQgdmFsdWVzIHN0b3JlZAogICAgIGluIG1lbW9yeSBpcyBjb250cm9sbGVkIGJ5ICdGTE9BVF9XT1JEU19CSUdfRU5ESUFOJy4KCiAtLSBNYWNybzogTU9ERV9IQVNfTkFOUyAoTU9ERSkKICAgICBXaGVuIGRlZmluZWQsIHRoaXMgbWFjcm8gc2hvdWxkIGJlIHRydWUgaWYgTU9ERSBoYXMgYSBOYU4KICAgICByZXByZXNlbnRhdGlvbi4gIFRoZSBjb21waWxlciBhc3N1bWVzIHRoYXQgTmFOcyBhcmUgbm90IGVxdWFsIHRvCiAgICAgYW55dGhpbmcgKGluY2x1ZGluZyB0aGVtc2VsdmVzKSBhbmQgdGhhdCBhZGRpdGlvbiwgc3VidHJhY3Rpb24sCiAgICAgbXVsdGlwbGljYXRpb24gYW5kIGRpdmlzaW9uIGFsbCByZXR1cm4gTmFOcyB3aGVuIG9uZSBvcGVyYW5kIGlzCiAgICAgTmFOLgoKICAgICBCeSBkZWZhdWx0LCB0aGlzIG1hY3JvIGlzIHRydWUgaWYgTU9ERSBpcyBhIGZsb2F0aW5nLXBvaW50IG1vZGUgYW5kCiAgICAgdGhlIHRhcmdldCBmbG9hdGluZy1wb2ludCBmb3JtYXQgaXMgSUVFRS4KCiAtLSBNYWNybzogTU9ERV9IQVNfSU5GSU5JVElFUyAoTU9ERSkKICAgICBUaGlzIG1hY3JvIHNob3VsZCBiZSB0cnVlIGlmIE1PREUgY2FuIHJlcHJlc2VudCBpbmZpbml0eS4gIEF0CiAgICAgcHJlc2VudCwgdGhlIGNvbXBpbGVyIHVzZXMgdGhpcyBtYWNybyB0byBkZWNpZGUgd2hldGhlciAneCAtIHgnIGlzCiAgICAgYWx3YXlzIGRlZmluZWQuICBCeSBkZWZhdWx0LCB0aGUgbWFjcm8gaXMgdHJ1ZSB3aGVuIE1PREUgaXMgYQogICAgIGZsb2F0aW5nLXBvaW50IG1vZGUgYW5kIHRoZSB0YXJnZXQgZm9ybWF0IGlzIElFRUUuCgogLS0gTWFjcm86IE1PREVfSEFTX1NJR05FRF9aRVJPUyAoTU9ERSkKICAgICBUcnVlIGlmIE1PREUgZGlzdGluZ3Vpc2hlcyBiZXR3ZWVuIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSB6ZXJvLiAgVGhlCiAgICAgcnVsZXMgYXJlIGV4cGVjdGVkIHRvIGZvbGxvdyB0aGUgSUVFRSBzdGFuZGFyZDoKCiAgICAgICAgKiAneCArIHgnIGhhcyB0aGUgc2FtZSBzaWduIGFzICd4Jy4KCiAgICAgICAgKiBJZiB0aGUgc3VtIG9mIHR3byB2YWx1ZXMgd2l0aCBvcHBvc2l0ZSBzaWduIGlzIHplcm8sIHRoZQogICAgICAgICAgcmVzdWx0IGlzIHBvc2l0aXZlIGZvciBhbGwgcm91bmRpbmcgbW9kZXMgZXhwZWN0IHRvd2FyZHMKICAgICAgICAgIC1pbmZpbml0eSwgZm9yIHdoaWNoIGl0IGlzIG5lZ2F0aXZlLgoKICAgICAgICAqIFRoZSBzaWduIG9mIGEgcHJvZHVjdCBvciBxdW90aWVudCBpcyBuZWdhdGl2ZSB3aGVuIGV4YWN0bHkgb25lCiAgICAgICAgICBvZiB0aGUgb3BlcmFuZHMgaXMgbmVnYXRpdmUuCgogICAgIFRoZSBkZWZhdWx0IGRlZmluaXRpb24gaXMgdHJ1ZSBpZiBNT0RFIGlzIGEgZmxvYXRpbmctcG9pbnQgbW9kZSBhbmQKICAgICB0aGUgdGFyZ2V0IGZvcm1hdCBpcyBJRUVFLgoKIC0tIE1hY3JvOiBNT0RFX0hBU19TSUdOX0RFUEVOREVOVF9ST1VORElORyAoTU9ERSkKICAgICBJZiBkZWZpbmVkLCB0aGlzIG1hY3JvIHNob3VsZCBiZSB0cnVlIGZvciBNT0RFIGlmIGl0IGhhcyBhdCBsZWFzdAogICAgIG9uZSByb3VuZGluZyBtb2RlIGluIHdoaWNoICd4JyBhbmQgJy14JyBjYW4gYmUgcm91bmRlZCB0byBudW1iZXJzCiAgICAgb2YgZGlmZmVyZW50IG1hZ25pdHVkZS4gIFR3byBzdWNoIG1vZGVzIGFyZSB0b3dhcmRzIC1pbmZpbml0eSBhbmQKICAgICB0b3dhcmRzICtpbmZpbml0eS4KCiAgICAgVGhlIGRlZmF1bHQgZGVmaW5pdGlvbiBvZiB0aGlzIG1hY3JvIGlzIHRydWUgaWYgTU9ERSBpcyBhCiAgICAgZmxvYXRpbmctcG9pbnQgbW9kZSBhbmQgdGhlIHRhcmdldCBmb3JtYXQgaXMgSUVFRS4KCiAtLSBNYWNybzogUk9VTkRfVE9XQVJEU19aRVJPCiAgICAgSWYgZGVmaW5lZCwgdGhpcyBtYWNybyBzaG91bGQgYmUgdHJ1ZSBpZiB0aGUgcHJldmFpbGluZyByb3VuZGluZwogICAgIG1vZGUgaXMgdG93YXJkcyB6ZXJvLiAgQSB0cnVlIHZhbHVlIGhhcyB0aGUgZm9sbG93aW5nIGVmZmVjdHM6CgogICAgICAgICogJ01PREVfSEFTX1NJR05fREVQRU5ERU5UX1JPVU5ESU5HJyB3aWxsIGJlIGZhbHNlIGZvciBhbGwKICAgICAgICAgIG1vZGVzLgoKICAgICAgICAqICdsaWJnY2MuYScncyBmbG9hdGluZy1wb2ludCBlbXVsYXRvciB3aWxsIHJvdW5kIHRvd2FyZHMgemVybwogICAgICAgICAgcmF0aGVyIHRoYW4gdG93YXJkcyBuZWFyZXN0LgoKICAgICAgICAqIFRoZSBjb21waWxlcidzIGZsb2F0aW5nLXBvaW50IGVtdWxhdG9yIHdpbGwgcm91bmQgdG93YXJkcyB6ZXJvCiAgICAgICAgICBhZnRlciBkb2luZyBhcml0aG1ldGljLCBhbmQgd2hlbiBjb252ZXJ0aW5nIGZyb20gdGhlIGludGVybmFsCiAgICAgICAgICBmbG9hdCBmb3JtYXQgdG8gdGhlIHRhcmdldCBmb3JtYXQuCgogICAgIFRoZSBtYWNybyBkb2VzIG5vdCBhZmZlY3QgdGhlIHBhcnNpbmcgb2Ygc3RyaW5nIGxpdGVyYWxzLiAgV2hlbiB0aGUKICAgICBwcmltYXJ5IHJvdW5kaW5nIG1vZGUgaXMgdG93YXJkcyB6ZXJvLCBsaWJyYXJ5IGZ1bmN0aW9ucyBsaWtlCiAgICAgJ3N0cnRvZCcgbWlnaHQgc3RpbGwgcm91bmQgdG93YXJkcyBuZWFyZXN0LCBhbmQgdGhlIGNvbXBpbGVyJ3MKICAgICBwYXJzZXIgc2hvdWxkIGJlaGF2ZSBsaWtlIHRoZSB0YXJnZXQncyAnc3RydG9kJyB3aGVyZSBwb3NzaWJsZS4KCiAgICAgTm90IGRlZmluaW5nIHRoaXMgbWFjcm8gaXMgZXF1aXZhbGVudCB0byByZXR1cm5pbmcgemVyby4KCiAtLSBNYWNybzogTEFSR0VTVF9FWFBPTkVOVF9JU19OT1JNQUwgKFNJWkUpCiAgICAgVGhpcyBtYWNybyBzaG91bGQgcmV0dXJuIHRydWUgaWYgZmxvYXRzIHdpdGggU0laRSBiaXRzIGRvIG5vdCBoYXZlCiAgICAgYSBOYU4gb3IgaW5maW5pdHkgcmVwcmVzZW50YXRpb24sIGJ1dCB1c2UgdGhlIGxhcmdlc3QgZXhwb25lbnQgZm9yCiAgICAgbm9ybWFsIG51bWJlcnMgaW5zdGVhZC4KCiAgICAgRGVmaW5pbmcgdGhpcyBtYWNybyB0byB0cnVlIGZvciBTSVpFIGNhdXNlcyAnTU9ERV9IQVNfTkFOUycgYW5kCiAgICAgJ01PREVfSEFTX0lORklOSVRJRVMnIHRvIGJlIGZhbHNlIGZvciBTSVpFLWJpdCBtb2Rlcy4gIEl0IGFsc28KICAgICBhZmZlY3RzIHRoZSB3YXkgJ2xpYmdjYy5hJyBhbmQgJ3JlYWwuYycgZW11bGF0ZSBmbG9hdGluZy1wb2ludAogICAgIGFyaXRobWV0aWMuCgogICAgIFRoZSBkZWZhdWx0IGRlZmluaXRpb24gb2YgdGhpcyBtYWNybyByZXR1cm5zIGZhbHNlIGZvciBhbGwgc2l6ZXMuCgogLS0gVGFyZ2V0IEhvb2s6IGJvb2wgVEFSR0VUX1ZFQ1RPUl9PUEFRVUVfUCAodHJlZSBUWVBFKQogICAgIFRoaXMgdGFyZ2V0IGhvb2sgc2hvdWxkIHJldHVybiAndHJ1ZScgYSB2ZWN0b3IgaXMgb3BhcXVlLiAgVGhhdCBpcywKICAgICBpZiBubyBjYXN0IGlzIG5lZWRlZCB3aGVuIGNvcHlpbmcgYSB2ZWN0b3IgdmFsdWUgb2YgdHlwZSBUWVBFIGludG8KICAgICBhbm90aGVyIHZlY3RvciBsdmFsdWUgb2YgdGhlIHNhbWUgc2l6ZS4gIFZlY3RvciBvcGFxdWUgdHlwZXMgY2Fubm90CiAgICAgYmUgaW5pdGlhbGl6ZWQuICBUaGUgZGVmYXVsdCBpcyB0aGF0IHRoZXJlIGFyZSBubyBzdWNoIHR5cGVzLgoKIC0tIFRhcmdldCBIb29rOiBib29sIFRBUkdFVF9NU19CSVRGSUVMRF9MQVlPVVRfUCAodHJlZSBSRUNPUkRfVFlQRSkKICAgICBUaGlzIHRhcmdldCBob29rIHJldHVybnMgJ3RydWUnIGlmIGJpdC1maWVsZHMgaW4gdGhlIGdpdmVuCiAgICAgUkVDT1JEX1RZUEUgYXJlIHRvIGJlIGxhaWQgb3V0IGZvbGxvd2luZyB0aGUgcnVsZXMgb2YgTWljcm9zb2Z0CiAgICAgVmlzdWFsIEMvQysrLCBuYW1lbHk6IChpKSBhIGJpdC1maWVsZCB3b24ndCBzaGFyZSB0aGUgc2FtZSBzdG9yYWdlCiAgICAgdW5pdCB3aXRoIHRoZSBwcmV2aW91cyBiaXQtZmllbGQgaWYgdGhlaXIgdW5kZXJseWluZyB0eXBlcyBoYXZlCiAgICAgZGlmZmVyZW50IHNpemVzLCBhbmQgdGhlIGJpdC1maWVsZCB3aWxsIGJlIGFsaWduZWQgdG8gdGhlIGhpZ2hlc3QKICAgICBhbGlnbm1lbnQgb2YgdGhlIHVuZGVybHlpbmcgdHlwZXMgb2YgaXRzZWxmIGFuZCBvZiB0aGUgcHJldmlvdXMKICAgICBiaXQtZmllbGQ7IChpaSkgYSB6ZXJvLXNpemVkIGJpdC1maWVsZCB3aWxsIGFmZmVjdCB0aGUgYWxpZ25tZW50IG9mCiAgICAgdGhlIHdob2xlIGVuY2xvc2luZyBzdHJ1Y3R1cmUsIGV2ZW4gaWYgaXQgaXMgdW5uYW1lZDsgZXhjZXB0IHRoYXQKICAgICAoaWlpKSBhIHplcm8tc2l6ZWQgYml0LWZpZWxkIHdpbGwgYmUgZGlzcmVnYXJkZWQgdW5sZXNzIGl0IGZvbGxvd3MKICAgICBhbm90aGVyIGJpdC1maWVsZCBvZiBub256ZXJvIHNpemUuICBJZiB0aGlzIGhvb2sgcmV0dXJucyAndHJ1ZScsCiAgICAgb3RoZXIgbWFjcm9zIHRoYXQgY29udHJvbCBiaXQtZmllbGQgbGF5b3V0IGFyZSBpZ25vcmVkLgoKICAgICBXaGVuIGEgYml0LWZpZWxkIGlzIGluc2VydGVkIGludG8gYSBwYWNrZWQgcmVjb3JkLCB0aGUgd2hvbGUgc2l6ZQogICAgIG9mIHRoZSB1bmRlcmx5aW5nIHR5cGUgaXMgdXNlZCBieSBvbmUgb3IgbW9yZSBzYW1lLXNpemUgYWRqYWNlbnQKICAgICBiaXQtZmllbGRzICh0aGF0IGlzLCBpZiBpdHMgbG9uZzozLCAzMiBiaXRzIGlzIHVzZWQgaW4gdGhlIHJlY29yZCwKICAgICBhbmQgYW55IGFkZGl0aW9uYWwgYWRqYWNlbnQgbG9uZyBiaXQtZmllbGRzIGFyZSBwYWNrZWQgaW50byB0aGUKICAgICBzYW1lIGNodW5rIG9mIDMyIGJpdHMuICBIb3dldmVyLCBpZiB0aGUgc2l6ZSBjaGFuZ2VzLCBhIG5ldyBmaWVsZAogICAgIG9mIHRoYXQgc2l6ZSBpcyBhbGxvY2F0ZWQpLiAgSW4gYW4gdW5wYWNrZWQgcmVjb3JkLCB0aGlzIGlzIHRoZQogICAgIHNhbWUgYXMgdXNpbmcgYWxpZ25tZW50LCBidXQgbm90IGVxdWl2YWxlbnQgd2hlbiBwYWNraW5nLgoKICAgICBJZiBib3RoIE1TIGJpdC1maWVsZHMgYW5kICdfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKScgYXJlIHVzZWQsIHRoZQogICAgIGxhdHRlciB3aWxsIHRha2UgcHJlY2VkZW5jZS4gIElmICdfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKScgaXMgdXNlZAogICAgIG9uIGEgc2luZ2xlIGZpZWxkIHdoZW4gTVMgYml0LWZpZWxkcyBhcmUgaW4gdXNlLCBpdCB3aWxsIHRha2UKICAgICBwcmVjZWRlbmNlIGZvciB0aGF0IGZpZWxkLCBidXQgdGhlIGFsaWdubWVudCBvZiB0aGUgcmVzdCBvZiB0aGUKICAgICBzdHJ1Y3R1cmUgbWF5IGFmZmVjdCBpdHMgcGxhY2VtZW50LgoKIC0tIFRhcmdldCBIb29rOiBib29sIFRBUkdFVF9ERUNJTUFMX0ZMT0FUX1NVUFBPUlRFRF9QICh2b2lkKQogICAgIFJldHVybnMgdHJ1ZSBpZiB0aGUgdGFyZ2V0IHN1cHBvcnRzIGRlY2ltYWwgZmxvYXRpbmcgcG9pbnQuCgogLS0gVGFyZ2V0IEhvb2s6IGJvb2wgVEFSR0VUX0ZJWEVEX1BPSU5UX1NVUFBPUlRFRF9QICh2b2lkKQogICAgIFJldHVybnMgdHJ1ZSBpZiB0aGUgdGFyZ2V0IHN1cHBvcnRzIGZpeGVkLXBvaW50IGFyaXRobWV0aWMuCgogLS0gVGFyZ2V0IEhvb2s6IHZvaWQgVEFSR0VUX0VYUEFORF9UT19SVExfSE9PSyAodm9pZCkKICAgICBUaGlzIGhvb2sgaXMgY2FsbGVkIGp1c3QgYmVmb3JlIGV4cGFuc2lvbiBpbnRvIHJ0bCwgYWxsb3dpbmcgdGhlCiAgICAgdGFyZ2V0IHRvIHBlcmZvcm0gYWRkaXRpb25hbCBpbml0aWFsaXphdGlvbnMgb3IgYW5hbHlzaXMgYmVmb3JlIHRoZQogICAgIGV4cGFuc2lvbi4gIEZvciBleGFtcGxlLCB0aGUgcnM2MDAwIHBvcnQgdXNlcyBpdCB0byBhbGxvY2F0ZSBhCiAgICAgc2NyYXRjaCBzdGFjayBzbG90IGZvciB1c2UgaW4gY29weWluZyBTRG1vZGUgdmFsdWVzIGJldHdlZW4gbWVtb3J5CiAgICAgYW5kIGZsb2F0aW5nIHBvaW50IHJlZ2lzdGVycyB3aGVuZXZlciB0aGUgZnVuY3Rpb24gYmVpbmcgZXhwYW5kZWQKICAgICBoYXMgYW55IFNEbW9kZSB1c2FnZS4KCiAtLSBUYXJnZXQgSG9vazogdm9pZCBUQVJHRVRfSU5TVEFOVElBVEVfREVDTFMgKHZvaWQpCiAgICAgVGhpcyBob29rIGFsbG93cyB0aGUgYmFja2VuZCB0byBwZXJmb3JtIGFkZGl0aW9uYWwgaW5zdGFudGlhdGlvbnMKICAgICBvbiBydGwgdGhhdCBhcmUgbm90IGFjdHVhbGx5IGluIGFueSBpbnNucyB5ZXQsIGJ1dCB3aWxsIGJlIGxhdGVyLgoKIC0tIFRhcmdldCBIb29rOiBjb25zdCBjaGFyICogVEFSR0VUX01BTkdMRV9UWVBFICh0cmVlIFRZUEUpCiAgICAgSWYgeW91ciB0YXJnZXQgZGVmaW5lcyBhbnkgZnVuZGFtZW50YWwgdHlwZXMsIG9yIGFueSB0eXBlcyB5b3VyCiAgICAgdGFyZ2V0IHVzZXMgc2hvdWxkIGJlIG1hbmdsZWQgZGlmZmVyZW50bHkgZnJvbSB0aGUgZGVmYXVsdCwgZGVmaW5lCiAgICAgdGhpcyBob29rIHRvIHJldHVybiB0aGUgYXBwcm9wcmlhdGUgZW5jb2RpbmcgZm9yIHRoZXNlIHR5cGVzIGFzCiAgICAgcGFydCBvZiBhIEMrKyBtYW5nbGVkIG5hbWUuICBUaGUgVFlQRSBhcmd1bWVudCBpcyB0aGUgdHJlZQogICAgIHN0cnVjdHVyZSByZXByZXNlbnRpbmcgdGhlIHR5cGUgdG8gYmUgbWFuZ2xlZC4gIFRoZSBob29rIG1heSBiZQogICAgIGFwcGxpZWQgdG8gdHJlZXMgd2hpY2ggYXJlIG5vdCB0YXJnZXQtc3BlY2lmaWMgZnVuZGFtZW50YWwgdHlwZXM7CiAgICAgaXQgc2hvdWxkIHJldHVybiAnTlVMTCcgZm9yIGFsbCBzdWNoIHR5cGVzLCBhcyB3ZWxsIGFzIGFyZ3VtZW50cyBpdAogICAgIGRvZXMgbm90IHJlY29nbml6ZS4gIElmIHRoZSByZXR1cm4gdmFsdWUgaXMgbm90ICdOVUxMJywgaXQgbXVzdAogICAgIHBvaW50IHRvIGEgc3RhdGljYWxseS1hbGxvY2F0ZWQgc3RyaW5nIGNvbnN0YW50LgoKICAgICBUYXJnZXQtc3BlY2lmaWMgZnVuZGFtZW50YWwgdHlwZXMgbWlnaHQgYmUgbmV3IGZ1bmRhbWVudGFsIHR5cGVzIG9yCiAgICAgcXVhbGlmaWVkIHZlcnNpb25zIG9mIG9yZGluYXJ5IGZ1bmRhbWVudGFsIHR5cGVzLiAgRW5jb2RlIG5ldwogICAgIGZ1bmRhbWVudGFsIHR5cGVzIGFzICd1IE4gTkFNRScsIHdoZXJlIE5BTUUgaXMgdGhlIG5hbWUgdXNlZCBmb3IKICAgICB0aGUgdHlwZSBpbiBzb3VyY2UgY29kZSwgYW5kIE4gaXMgdGhlIGxlbmd0aCBvZiBOQU1FIGluIGRlY2ltYWwuCiAgICAgRW5jb2RlIHF1YWxpZmllZCB2ZXJzaW9ucyBvZiBvcmRpbmFyeSB0eXBlcyBhcyAnVSBOIE5BTUUgQ09ERScsCiAgICAgd2hlcmUgTkFNRSBpcyB0aGUgbmFtZSB1c2VkIGZvciB0aGUgdHlwZSBxdWFsaWZpZXIgaW4gc291cmNlIGNvZGUsCiAgICAgTiBpcyB0aGUgbGVuZ3RoIG9mIE5BTUUgYXMgYWJvdmUsIGFuZCBDT0RFIGlzIHRoZSBjb2RlIHVzZWQgdG8KICAgICByZXByZXNlbnQgdGhlIHVucXVhbGlmaWVkIHZlcnNpb24gb2YgdGhpcyB0eXBlLiAgKFNlZQogICAgICd3cml0ZV9idWlsdGluX3R5cGUnIGluICdjcC9tYW5nbGUuYycgZm9yIHRoZSBsaXN0IG9mIGNvZGVzLikgIEluCiAgICAgYm90aCBjYXNlcyB0aGUgc3BhY2VzIGFyZSBmb3IgY2xhcml0eTsgZG8gbm90IGluY2x1ZGUgYW55IHNwYWNlcyBpbgogICAgIHlvdXIgc3RyaW5nLgoKICAgICBUaGlzIGhvb2sgaXMgYXBwbGllZCB0byB0eXBlcyBwcmlvciB0byB0eXBlZGVmIHJlc29sdXRpb24uICBJZiB0aGUKICAgICBtYW5nbGVkIG5hbWUgZm9yIGEgcGFydGljdWxhciB0eXBlIGRlcGVuZHMgb25seSBvbiB0aGF0IHR5cGUncyBtYWluCiAgICAgdmFyaWFudCwgeW91IGNhbiBwZXJmb3JtIHR5cGVkZWYgcmVzb2x1dGlvbiB5b3Vyc2VsZiB1c2luZwogICAgICdUWVBFX01BSU5fVkFSSUFOVCcgYmVmb3JlIG1hbmdsaW5nLgoKICAgICBUaGUgZGVmYXVsdCB2ZXJzaW9uIG9mIHRoaXMgaG9vayBhbHdheXMgcmV0dXJucyAnTlVMTCcsIHdoaWNoIGlzCiAgICAgYXBwcm9wcmlhdGUgZm9yIGEgdGFyZ2V0IHRoYXQgZG9lcyBub3QgZGVmaW5lIGFueSBuZXcgZnVuZGFtZW50YWwKICAgICB0eXBlcy4KCh8KRmlsZTogZ2NjaW50LmluZm8sICBOb2RlOiBUeXBlIExheW91dCwgIE5leHQ6IFJlZ2lzdGVycywgIFByZXY6IFN0b3JhZ2UgTGF5b3V0LCAgVXA6IFRhcmdldCBNYWNyb3MKCjE1LjYgTGF5b3V0IG9mIFNvdXJjZSBMYW5ndWFnZSBEYXRhIFR5cGVzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpUaGVzZSBtYWNyb3MgZGVmaW5lIHRoZSBzaXplcyBhbmQgb3RoZXIgY2hhcmFjdGVyaXN0aWNzIG9mIHRoZSBzdGFuZGFyZApiYXNpYyBkYXRhIHR5cGVzIHVzZWQgaW4gcHJvZ3JhbXMgYmVpbmcgY29tcGlsZWQuICBVbmxpa2UgdGhlIG1hY3JvcyBpbgp0aGUgcHJldmlvdXMgc2VjdGlvbiwgdGhlc2UgYXBwbHkgdG8gc3BlY2lmaWMgZmVhdHVyZXMgb2YgQyBhbmQgcmVsYXRlZApsYW5ndWFnZXMsIHJhdGhlciB0aGFuIHRvIGZ1bmRhbWVudGFsIGFzcGVjdHMgb2Ygc3RvcmFnZSBsYXlvdXQuCgogLS0gTWFjcm86IElOVF9UWVBFX1NJWkUKICAgICBBIEMgZXhwcmVzc2lvbiBmb3IgdGhlIHNpemUgaW4gYml0cyBvZiB0aGUgdHlwZSAnaW50JyBvbiB0aGUgdGFyZ2V0CiAgICAgbWFjaGluZS4gIElmIHlvdSBkb24ndCBkZWZpbmUgdGhpcywgdGhlIGRlZmF1bHQgaXMgb25lIHdvcmQuCgogLS0gTWFjcm86IFNIT1JUX1RZUEVfU0laRQogICAgIEEgQyBleHByZXNzaW9uIGZvciB0aGUgc2l6ZSBpbiBiaXRzIG9mIHRoZSB0eXBlICdzaG9ydCcgb24gdGhlCiAgICAgdGFyZ2V0IG1hY2hpbmUuICBJZiB5b3UgZG9uJ3QgZGVmaW5lIHRoaXMsIHRoZSBkZWZhdWx0IGlzIGhhbGYgYQogICAgIHdvcmQuICAoSWYgdGhpcyB3b3VsZCBiZSBsZXNzIHRoYW4gb25lIHN0b3JhZ2UgdW5pdCwgaXQgaXMgcm91bmRlZAogICAgIHVwIHRvIG9uZSB1bml0LikKCiAtLSBNYWNybzogTE9OR19UWVBFX1NJWkUKICAgICBBIEMgZXhwcmVzc2lvbiBmb3IgdGhlIHNpemUgaW4gYml0cyBvZiB0aGUgdHlwZSAnbG9uZycgb24gdGhlCiAgICAgdGFyZ2V0IG1hY2hpbmUuICBJZiB5b3UgZG9uJ3QgZGVmaW5lIHRoaXMsIHRoZSBkZWZhdWx0IGlzIG9uZSB3b3JkLgoKIC0tIE1hY3JvOiBBREFfTE9OR19UWVBFX1NJWkUKICAgICBPbiBzb21lIG1hY2hpbmVzLCB0aGUgc2l6ZSB1c2VkIGZvciB0aGUgQWRhIGVxdWl2YWxlbnQgb2YgdGhlIHR5cGUKICAgICAnbG9uZycgYnkgYSBuYXRpdmUgQWRhIGNvbXBpbGVyIGRpZmZlcnMgZnJvbSB0aGF0IHVzZWQgYnkgQy4gIEluCiAgICAgdGhhdCBzaXR1YXRpb24sIGRlZmluZSB0aGlzIG1hY3JvIHRvIGJlIGEgQyBleHByZXNzaW9uIHRvIGJlIHVzZWQKICAgICBmb3IgdGhlIHNpemUgb2YgdGhhdCB0eXBlLiAgSWYgeW91IGRvbid0IGRlZmluZSB0aGlzLCB0aGUgZGVmYXVsdAogICAgIGlzIHRoZSB2YWx1ZSBvZiAnTE9OR19UWVBFX1NJWkUnLgoKIC0tIE1hY3JvOiBMT05HX0xPTkdfVFlQRV9TSVpFCiAgICAgQSBDIGV4cHJlc3Npb24gZm9yIHRoZSBzaXplIGluIGJpdHMgb2YgdGhlIHR5cGUgJ2xvbmcgbG9uZycgb24gdGhlCiAgICAgdGFyZ2V0IG1hY2hpbmUuICBJZiB5b3UgZG9uJ3QgZGVmaW5lIHRoaXMsIHRoZSBkZWZhdWx0IGlzIHR3bwogICAgIHdvcmRzLiAgSWYgeW91IHdhbnQgdG8gc3VwcG9ydCBHTlUgQWRhIG9uIHlvdXIgbWFjaGluZSwgdGhlIHZhbHVlCiAgICAgb2YgdGhpcyBtYWNybyBtdXN0IGJlIGF0IGxlYXN0IDY0LgoKIC0tIE1hY3JvOiBDSEFSX1RZUEVfU0laRQogICAgIEEgQyBleHByZXNzaW9uIGZvciB0aGUgc2l6ZSBpbiBiaXRzIG9mIHRoZSB0eXBlICdjaGFyJyBvbiB0aGUKICAgICB0YXJnZXQgbWFjaGluZS4gIElmIHlvdSBkb24ndCBkZWZpbmUgdGhpcywgdGhlIGRlZmF1bHQgaXMKICAgICAnQklUU19QRVJfVU5JVCcuCgogLS0gTWFjcm86IEJPT0xfVFlQRV9TSVpFCiAgICAgQSBDIGV4cHJlc3Npb24gZm9yIHRoZSBzaXplIGluIGJpdHMgb2YgdGhlIEMrKyB0eXBlICdib29sJyBhbmQgQzk5CiAgICAgdHlwZSAnX0Jvb2wnIG9uIHRoZSB0YXJnZXQgbWFjaGluZS4gIElmIHlvdSBkb24ndCBkZWZpbmUgdGhpcywgYW5kCiAgICAgeW91IHByb2JhYmx5IHNob3VsZG4ndCwgdGhlIGRlZmF1bHQgaXMgJ0NIQVJfVFlQRV9TSVpFJy4KCiAtLSBNYWNybzogRkxPQVRfVFlQRV9TSVpFCiAgICAgQSBDIGV4cHJlc3Npb24gZm9yIHRoZSBzaXplIGluIGJpdHMgb2YgdGhlIHR5cGUgJ2Zsb2F0JyBvbiB0aGUKICAgICB0YXJnZXQgbWFjaGluZS4gIElmIHlvdSBkb24ndCBkZWZpbmUgdGhpcywgdGhlIGRlZmF1bHQgaXMgb25lIHdvcmQuCgogLS0gTWFjcm86IERPVUJMRV9UWVBFX1NJWkUKICAgICBBIEMgZXhwcmVzc2lvbiBmb3IgdGhlIHNpemUgaW4gYml0cyBvZiB0aGUgdHlwZSAnZG91YmxlJyBvbiB0aGUKICAgICB0YXJnZXQgbWFjaGluZS4gIElmIHlvdSBkb24ndCBkZWZpbmUgdGhpcywgdGhlIGRlZmF1bHQgaXMgdHdvCiAgICAgd29yZHMuCgogLS0gTWFjcm86IExPTkdfRE9VQkxFX1RZUEVfU0laRQogICAgIEEgQyBleHByZXNzaW9uIGZvciB0aGUgc2l6ZSBpbiBiaXRzIG9mIHRoZSB0eXBlICdsb25nIGRvdWJsZScgb24KICAgICB0aGUgdGFyZ2V0IG1hY2hpbmUuICBJZiB5b3UgZG9uJ3QgZGVmaW5lIHRoaXMsIHRoZSBkZWZhdWx0IGlzIHR3bwogICAgIHdvcmRzLgoKIC0tIE1hY3JvOiBTSE9SVF9GUkFDVF9UWVBFX1NJWkUKICAgICBBIEMgZXhwcmVzc2lvbiBmb3IgdGhlIHNpemUgaW4gYml0cyBvZiB0aGUgdHlwZSAnc2hvcnQgX0ZyYWN0JyBvbgogICAgIHRoZSB0YXJnZXQgbWFjaGluZS4gIElmIHlvdSBkb24ndCBkZWZpbmUgdGhpcywgdGhlIGRlZmF1bHQgaXMKICAgICAnQklUU19QRVJfVU5JVCcuCgogLS0gTWFjcm86IEZSQUNUX1RZUEVfU0laRQogICAgIEEgQyBleHByZXNzaW9uIGZvciB0aGUgc2l6ZSBpbiBiaXRzIG9mIHRoZSB0eXBlICdfRnJhY3QnIG9uIHRoZQogICAgIHRhcmdldCBtYWNoaW5lLiAgSWYgeW91IGRvbid0IGRlZmluZSB0aGlzLCB0aGUgZGVmYXVsdCBpcwogICAgICdCSVRTX1BFUl9VTklUICogMicuCgogLS0gTWFjcm86IExPTkdfRlJBQ1RfVFlQRV9TSVpFCiAgICAgQSBDIGV4cHJlc3Npb24gZm9yIHRoZSBzaXplIGluIGJpdHMgb2YgdGhlIHR5cGUgJ2xvbmcgX0ZyYWN0JyBvbgogICAgIHRoZSB0YXJnZXQgbWFjaGluZS4gIElmIHlvdSBkb24ndCBkZWZpbmUgdGhpcywgdGhlIGRlZmF1bHQgaXMKICAgICAnQklUU19QRVJfVU5JVCAqIDQnLgoKIC0tIE1hY3JvOiBMT05HX0xPTkdfRlJBQ1RfVFlQRV9TSVpFCiAgICAgQSBDIGV4cHJlc3Npb24gZm9yIHRoZSBzaXplIGluIGJpdHMgb2YgdGhlIHR5cGUgJ2xvbmcgbG9uZyBfRnJhY3QnCiAgICAgb24gdGhlIHRhcmdldCBtYWNoaW5lLiAgSWYgeW91IGRvbid0IGRlZmluZSB0aGlzLCB0aGUgZGVmYXVsdCBpcwogICAgICdCSVRTX1BFUl9VTklUICogOCcuCgogLS0gTWFjcm86IFNIT1JUX0FDQ1VNX1RZUEVfU0laRQogICAgIEEgQyBleHByZXNzaW9uIGZvciB0aGUgc2l6ZSBpbiBiaXRzIG9mIHRoZSB0eXBlICdzaG9ydCBfQWNjdW0nIG9uCiAgICAgdGhlIHRhcmdldCBtYWNoaW5lLiAgSWYgeW91IGRvbid0IGRlZmluZSB0aGlzLCB0aGUgZGVmYXVsdCBpcwogICAgICdCSVRTX1BFUl9VTklUICogMicuCgogLS0gTWFjcm86IEFDQ1VNX1RZUEVfU0laRQogICAgIEEgQyBleHByZXNzaW9uIGZvciB0aGUgc2l6ZSBpbiBiaXRzIG9mIHRoZSB0eXBlICdfQWNjdW0nIG9uIHRoZQogICAgIHRhcmdldCBtYWNoaW5lLiAgSWYgeW91IGRvbid0IGRlZmluZSB0aGlzLCB0aGUgZGVmYXVsdCBpcwogICAgICdCSVRTX1BFUl9VTklUICogNCcuCgogLS0gTWFjcm86IExPTkdfQUNDVU1fVFlQRV9TSVpFCiAgICAgQSBDIGV4cHJlc3Npb24gZm9yIHRoZSBzaXplIGluIGJpdHMgb2YgdGhlIHR5cGUgJ2xvbmcgX0FjY3VtJyBvbgogICAgIHRoZSB0YXJnZXQgbWFjaGluZS4gIElmIHlvdSBkb24ndCBkZWZpbmUgdGhpcywgdGhlIGRlZmF1bHQgaXMKICAgICAnQklUU19QRVJfVU5JVCAqIDgnLgoKIC0tIE1hY3JvOiBMT05HX0xPTkdfQUNDVU1fVFlQRV9TSVpFCiAgICAgQSBDIGV4cHJlc3Npb24gZm9yIHRoZSBzaXplIGluIGJpdHMgb2YgdGhlIHR5cGUgJ2xvbmcgbG9uZyBfQWNjdW0nCiAgICAgb24gdGhlIHRhcmdldCBtYWNoaW5lLiAgSWYgeW91IGRvbid0IGRlZmluZSB0aGlzLCB0aGUgZGVmYXVsdCBpcwogICAgICdCSVRTX1BFUl9VTklUICogMTYnLgoKIC0tIE1hY3JvOiBMSUJHQ0MyX0xPTkdfRE9VQkxFX1RZUEVfU0laRQogICAgIERlZmluZSB0aGlzIG1hY3JvIGlmICdMT05HX0RPVUJMRV9UWVBFX1NJWkUnIGlzIG5vdCBjb25zdGFudCBvciBpZgogICAgIHlvdSB3YW50IHJvdXRpbmVzIGluICdsaWJnY2MyLmEnIGZvciBhIHNpemUgb3RoZXIgdGhhbgogICAgICdMT05HX0RPVUJMRV9UWVBFX1NJWkUnLiAgSWYgeW91IGRvbid0IGRlZmluZSB0aGlzLCB0aGUgZGVmYXVsdCBpcwogICAgICdMT05HX0RPVUJMRV9UWVBFX1NJWkUnLgoKIC0tIE1hY3JvOiBMSUJHQ0MyX0hBU19ERl9NT0RFCiAgICAgRGVmaW5lIHRoaXMgbWFjcm8gaWYgbmVpdGhlciAnTElCR0NDMl9ET1VCTEVfVFlQRV9TSVpFJyBub3IKICAgICAnTElCR0NDMl9MT05HX0RPVUJMRV9UWVBFX1NJWkUnIGlzICdERm1vZGUnIGJ1dCB5b3Ugd2FudCAnREZtb2RlJwogICAgIHJvdXRpbmVzIGluICdsaWJnY2MyLmEnIGFueXdheS4gIElmIHlvdSBkb24ndCBkZWZpbmUgdGhpcyBhbmQKICAgICBlaXRoZXIgJ0xJQkdDQzJfRE9VQkxFX1RZUEVfU0laRScgb3IKICAgICAnTElCR0NDMl9MT05HX0RPVUJMRV9UWVBFX1NJWkUnIGlzIDY0IHRoZW4gdGhlIGRlZmF1bHQgaXMgMSwKICAgICBvdGhlcndpc2UgaXQgaXMgMC4KCiAtLSBNYWNybzogTElCR0NDMl9IQVNfWEZfTU9ERQogICAgIERlZmluZSB0aGlzIG1hY3JvIGlmICdMSUJHQ0MyX0xPTkdfRE9VQkxFX1RZUEVfU0laRScgaXMgbm90CiAgICAgJ1hGbW9kZScgYnV0IHlvdSB3YW50ICdYRm1vZGUnIHJvdXRpbmVzIGluICdsaWJnY2MyLmEnIGFueXdheS4gIElmCiAgICAgeW91IGRvbid0IGRlZmluZSB0aGlzIGFuZCAnTElCR0NDMl9MT05HX0RPVUJMRV9UWVBFX1NJWkUnIGlzIDgwCiAgICAgdGhlbiB0aGUgZGVmYXVsdCBpcyAxLCBvdGhlcndpc2UgaXQgaXMgMC4KCiAtLSBNYWNybzogTElCR0NDMl9IQVNfVEZfTU9ERQogICAgIERlZmluZSB0aGlzIG1hY3JvIGlmICdMSUJHQ0MyX0xPTkdfRE9VQkxFX1RZUEVfU0laRScgaXMgbm90CiAgICAgJ1RGbW9kZScgYnV0IHlvdSB3YW50ICdURm1vZGUnIHJvdXRpbmVzIGluICdsaWJnY2MyLmEnIGFueXdheS4gIElmCiAgICAgeW91IGRvbid0IGRlZmluZSB0aGlzIGFuZCAnTElCR0NDMl9MT05HX0RPVUJMRV9UWVBFX1NJWkUnIGlzIDEyOAogICAgIHRoZW4gdGhlIGRlZmF1bHQgaXMgMSwgb3RoZXJ3aXNlIGl0IGlzIDAuCgogLS0gTWFjcm86IFNGX1NJWkUKIC0tIE1hY3JvOiBERl9TSVpFCiAtLSBNYWNybzogWEZfU0laRQogLS0gTWFjcm86IFRGX1NJWkUKICAgICBEZWZpbmUgdGhlc2UgbWFjcm9zIHRvIGJlIHRoZSBzaXplIGluIGJpdHMgb2YgdGhlIG1hbnRpc3NhIG9mCiAgICAgJ1NGbW9kZScsICdERm1vZGUnLCAnWEZtb2RlJyBhbmQgJ1RGbW9kZScgdmFsdWVzLCBpZiB0aGUgZGVmYXVsdHMKICAgICBpbiAnbGliZ2NjMi5oJyBhcmUgaW5hcHByb3ByaWF0ZS4gIEJ5IGRlZmF1bHQsICdGTFRfTUFOVF9ESUcnIGlzCiAgICAgdXNlZCBmb3IgJ1NGX1NJWkUnLCAnTERCTF9NQU5UX0RJRycgZm9yICdYRl9TSVpFJyBhbmQgJ1RGX1NJWkUnLAogICAgIGFuZCAnREJMX01BTlRfRElHJyBvciAnTERCTF9NQU5UX0RJRycgZm9yICdERl9TSVpFJyBhY2NvcmRpbmcgdG8KICAgICB3aGV0aGVyICdMSUJHQ0MyX0RPVUJMRV9UWVBFX1NJWkUnIG9yCiAgICAgJ0xJQkdDQzJfTE9OR19ET1VCTEVfVFlQRV9TSVpFJyBpcyA2NC4KCiAtLSBNYWNybzogVEFSR0VUX0ZMVF9FVkFMX01FVEhPRAogICAgIEEgQyBleHByZXNzaW9uIGZvciB0aGUgdmFsdWUgZm9yICdGTFRfRVZBTF9NRVRIT0QnIGluICdmbG9hdC5oJywKICAgICBhc3N1bWluZywgaWYgYXBwbGljYWJsZSwgdGhhdCB0aGUgZmxvYXRpbmctcG9pbnQgY29udHJvbCB3b3JkIGlzIGluCiAgICAgaXRzIGRlZmF1bHQgc3RhdGUuICBJZiB5b3UgZG8gbm90IGRlZmluZSB0aGlzIG1hY3JvIHRoZSB2YWx1ZSBvZgogICAgICdGTFRfRVZBTF9NRVRIT0QnIHdpbGwgYmUgemVyby4KCiAtLSBNYWNybzogV0lERVNUX0hBUkRXQVJFX0ZQX1NJWkUKICAgICBBIEMgZXhwcmVzc2lvbiBmb3IgdGhlIHNpemUgaW4gYml0cyBvZiB0aGUgd2lkZXN0IGZsb2F0aW5nLXBvaW50CiAgICAgZm9ybWF0IHN1cHBvcnRlZCBieSB0aGUgaGFyZHdhcmUuICBJZiB5b3UgZGVmaW5lIHRoaXMgbWFjcm8sIHlvdQogICAgIG11c3Qgc3BlY2lmeSBhIHZhbHVlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgdmFsdWUgb2YKICAgICAnTE9OR19ET1VCTEVfVFlQRV9TSVpFJy4gIElmIHlvdSBkbyBub3QgZGVmaW5lIHRoaXMgbWFjcm8sIHRoZQogICAgIHZhbHVlIG9mICdMT05HX0RPVUJMRV9UWVBFX1NJWkUnIGlzIHRoZSBkZWZhdWx0LgoKIC0tIE1hY3JvOiBERUZBVUxUX1NJR05FRF9DSEFSCiAgICAgQW4gZXhwcmVzc2lvbiB3aG9zZSB2YWx1ZSBpcyAxIG9yIDAsIGFjY29yZGluZyB0byB3aGV0aGVyIHRoZSB0eXBlCiAgICAgJ2NoYXInIHNob3VsZCBiZSBzaWduZWQgb3IgdW5zaWduZWQgYnkgZGVmYXVsdC4gIFRoZSB1c2VyIGNhbgogICAgIGFsd2F5cyBvdmVycmlkZSB0aGlzIGRlZmF1bHQgd2l0aCB0aGUgb3B0aW9ucyAnLWZzaWduZWQtY2hhcicgYW5kCiAgICAgJy1mdW5zaWduZWQtY2hhcicuCgogLS0gVGFyZ2V0IEhvb2s6IGJvb2wgVEFSR0VUX0RFRkFVTFRfU0hPUlRfRU5VTVMgKHZvaWQpCiAgICAgVGhpcyB0YXJnZXQgaG9vayBzaG91bGQgcmV0dXJuIHRydWUgaWYgdGhlIGNvbXBpbGVyIHNob3VsZCBnaXZlIGFuCiAgICAgJ2VudW0nIHR5cGUgb25seSBhcyBtYW55IGJ5dGVzIGFzIGl0IHRha2VzIHRvIHJlcHJlc2VudCB0aGUgcmFuZ2UKICAgICBvZiBwb3NzaWJsZSB2YWx1ZXMgb2YgdGhhdCB0eXBlLiAgSXQgc2hvdWxkIHJldHVybiBmYWxzZSBpZiBhbGwKICAgICAnZW51bScgdHlwZXMgc2hvdWxkIGJlIGFsbG9jYXRlZCBsaWtlICdpbnQnLgoKICAgICBUaGUgZGVmYXVsdCBpcyB0byByZXR1cm4gZmFsc2UuCgogLS0gTWFjcm86IFNJWkVfVFlQRQogICAgIEEgQyBleHByZXNzaW9uIGZvciBhIHN0cmluZyBkZXNjcmliaW5nIHRoZSBuYW1lIG9mIHRoZSBkYXRhIHR5cGUgdG8KICAgICB1c2UgZm9yIHNpemUgdmFsdWVzLiAgVGhlIHR5cGVkZWYgbmFtZSAnc2l6ZV90JyBpcyBkZWZpbmVkIHVzaW5nCiAgICAgdGhlIGNvbnRlbnRzIG9mIHRoZSBzdHJpbmcuCgogICAgIFRoZSBzdHJpbmcgY2FuIGNvbnRhaW4gbW9yZSB0aGFuIG9uZSBrZXl3b3JkLiAgSWYgc28sIHNlcGFyYXRlIHRoZW0KICAgICB3aXRoIHNwYWNlcywgYW5kIHdyaXRlIGZpcnN0IGFueSBsZW5ndGgga2V5d29yZCwgdGhlbiAndW5zaWduZWQnIGlmCiAgICAgYXBwcm9wcmlhdGUsIGFuZCBmaW5hbGx5ICdpbnQnLiAgVGhlIHN0cmluZyBtdXN0IGV4YWN0bHkgbWF0Y2ggb25lCiAgICAgb2YgdGhlIGRhdGEgdHlwZSBuYW1lcyBkZWZpbmVkIGluIHRoZSBmdW5jdGlvbgogICAgICdpbml0X2RlY2xfcHJvY2Vzc2luZycgaW4gdGhlIGZpbGUgJ2MtZGVjbC5jJy4gIFlvdSBtYXkgbm90IG9taXQKICAgICAnaW50JyBvciBjaGFuZ2UgdGhlIG9yZGVyLS10aGF0IHdvdWxkIGNhdXNlIHRoZSBjb21waWxlciB0byBjcmFzaAogICAgIG9uIHN0YXJ0dXAuCgogICAgIElmIHlvdSBkb24ndCBkZWZpbmUgdGhpcyBtYWNybywgdGhlIGRlZmF1bHQgaXMgJyJsb25nIHVuc2lnbmVkCiAgICAgaW50IicuCgogLS0gTWFjcm86IFBUUkRJRkZfVFlQRQogICAgIEEgQyBleHByZXNzaW9uIGZvciBhIHN0cmluZyBkZXNjcmliaW5nIHRoZSBuYW1lIG9mIHRoZSBkYXRhIHR5cGUgdG8KICAgICB1c2UgZm9yIHRoZSByZXN1bHQgb2Ygc3VidHJhY3RpbmcgdHdvIHBvaW50ZXJzLiAgVGhlIHR5cGVkZWYgbmFtZQogICAgICdwdHJkaWZmX3QnIGlzIGRlZmluZWQgdXNpbmcgdGhlIGNvbnRlbnRzIG9mIHRoZSBzdHJpbmcuICBTZWUKICAgICAnU0laRV9UWVBFJyBhYm92ZSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KCiAgICAgSWYgeW91IGRvbid0IGRlZmluZSB0aGlzIG1hY3JvLCB0aGUgZGVmYXVsdCBpcyAnImxvbmcgaW50IicuCgogLS0gTWFjcm86IFdDSEFSX1RZUEUKICAgICBBIEMgZXhwcmVzc2lvbiBmb3IgYSBzdHJpbmcgZGVzY3JpYmluZyB0aGUgbmFtZSBvZiB0aGUgZGF0YSB0eXBlIHRvCiAgICAgdXNlIGZvciB3aWRlIGNoYXJhY3RlcnMuICBUaGUgdHlwZWRlZiBuYW1lICd3Y2hhcl90JyBpcyBkZWZpbmVkCiAgICAgdXNpbmcgdGhlIGNvbnRlbnRzIG9mIHRoZSBzdHJpbmcuICBTZWUgJ1NJWkVfVFlQRScgYWJvdmUgZm9yIG1vcmUKICAgICBpbmZvcm1hdGlvbi4KCiAgICAgSWYgeW91IGRvbid0IGRlZmluZSB0aGlzIG1hY3JvLCB0aGUgZGVmYXVsdCBpcyAnImludCInLgoKIC0tIE1hY3JvOiBXQ0hBUl9UWVBFX1NJWkUKICAgICBBIEMgZXhwcmVzc2lvbiBmb3IgdGhlIHNpemUgaW4gYml0cyBvZiB0aGUgZGF0YSB0eXBlIGZvciB3aWRlCiAgICAgY2hhcmFjdGVycy4gIFRoaXMgaXMgdXNlZCBpbiAnY3BwJywgd2hpY2ggY2Fubm90IG1ha2UgdXNlIG9mCiAgICAgJ1dDSEFSX1RZUEUnLgoKIC0tIE1hY3JvOiBXSU5UX1RZUEUKICAgICBBIEMgZXhwcmVzc2lvbiBmb3IgYSBzdHJpbmcgZGVzY3JpYmluZyB0aGUgbmFtZSBvZiB0aGUgZGF0YSB0eXBlIHRvCiAgICAgdXNlIGZvciB3aWRlIGNoYXJhY3RlcnMgcGFzc2VkIHRvICdwcmludGYnIGFuZCByZXR1cm5lZCBmcm9tCiAgICAgJ2dldHdjJy4gIFRoZSB0eXBlZGVmIG5hbWUgJ3dpbnRfdCcgaXMgZGVmaW5lZCB1c2luZyB0aGUgY29udGVudHMKICAgICBvZiB0aGUgc3RyaW5nLiAgU2VlICdTSVpFX1RZUEUnIGFib3ZlIGZvciBtb3JlIGluZm9ybWF0aW9uLgoKICAgICBJZiB5b3UgZG9uJ3QgZGVmaW5lIHRoaXMgbWFjcm8sIHRoZSBkZWZhdWx0IGlzICcidW5zaWduZWQgaW50IicuCgogLS0gTWFjcm86IElOVE1BWF9UWVBFCiAgICAgQSBDIGV4cHJlc3Npb24gZm9yIGEgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIG5hbWUgb2YgdGhlIGRhdGEgdHlwZQogICAgIHRoYXQgY2FuIHJlcHJlc2VudCBhbnkgdmFsdWUgb2YgYW55IHN0YW5kYXJkIG9yIGV4dGVuZGVkIHNpZ25lZAogICAgIGludGVnZXIgdHlwZS4gIFRoZSB0eXBlZGVmIG5hbWUgJ2ludG1heF90JyBpcyBkZWZpbmVkIHVzaW5nIHRoZQogICAgIGNvbnRlbnRzIG9mIHRoZSBzdHJpbmcuICBTZWUgJ1NJWkVfVFlQRScgYWJvdmUgZm9yIG1vcmUKICAgICBpbmZvcm1hdGlvbi4KCiAgICAgSWYgeW91IGRvbid0IGRlZmluZSB0aGlzIG1hY3JvLCB0aGUgZGVmYXVsdCBpcyB0aGUgZmlyc3Qgb2YKICAgICAnImludCInLCAnImxvbmcgaW50IicsIG9yICcibG9uZyBsb25nIGludCInIHRoYXQgaGFzIGFzIG11Y2gKICAgICBwcmVjaXNpb24gYXMgJ2xvbmcgbG9uZyBpbnQnLgoKIC0tIE1hY3JvOiBVSU5UTUFYX1RZUEUKICAgICBBIEMgZXhwcmVzc2lvbiBmb3IgYSBzdHJpbmcgZGVzY3JpYmluZyB0aGUgbmFtZSBvZiB0aGUgZGF0YSB0eXBlCiAgICAgdGhhdCBjYW4gcmVwcmVzZW50IGFueSB2YWx1ZSBvZiBhbnkgc3RhbmRhcmQgb3IgZXh0ZW5kZWQgdW5zaWduZWQKICAgICBpbnRlZ2VyIHR5cGUuICBUaGUgdHlwZWRlZiBuYW1lICd1aW50bWF4X3QnIGlzIGRlZmluZWQgdXNpbmcgdGhlCiAgICAgY29udGVudHMgb2YgdGhlIHN0cmluZy4gIFNlZSAnU0laRV9UWVBFJyBhYm92ZSBmb3IgbW9yZQogICAgIGluZm9ybWF0aW9uLgoKICAgICBJZiB5b3UgZG9uJ3QgZGVmaW5lIHRoaXMgbWFjcm8sIHRoZSBkZWZhdWx0IGlzIHRoZSBmaXJzdCBvZgogICAgICcidW5zaWduZWQgaW50IicsICcibG9uZyB1bnNpZ25lZCBpbnQiJywgb3IgJyJsb25nIGxvbmcgdW5zaWduZWQKICAgICBpbnQiJyB0aGF0IGhhcyBhcyBtdWNoIHByZWNpc2lvbiBhcyAnbG9uZyBsb25nIHVuc2lnbmVkIGludCcuCgogLS0gTWFjcm86IFRBUkdFVF9QVFJNRU1GVU5DX1ZCSVRfTE9DQVRJT04KICAgICBUaGUgQysrIGNvbXBpbGVyIHJlcHJlc2VudHMgYSBwb2ludGVyLXRvLW1lbWJlci1mdW5jdGlvbiB3aXRoIGEKICAgICBzdHJ1Y3QgdGhhdCBsb29rcyBsaWtlOgoKICAgICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICB1bmlvbiB7CiAgICAgICAgICAgICAgICB2b2lkICgqZm4pKCk7CiAgICAgICAgICAgICAgICBwdHJkaWZmX3QgdnRhYmxlX2luZGV4OwogICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgcHRyZGlmZl90IGRlbHRhOwogICAgICAgICAgICB9OwoKICAgICBUaGUgQysrIGNvbXBpbGVyIG11c3QgdXNlIG9uZSBiaXQgdG8gaW5kaWNhdGUgd2hldGhlciB0aGUgZnVuY3Rpb24KICAgICB0aGF0IHdpbGwgYmUgY2FsbGVkIHRocm91Z2ggYSBwb2ludGVyLXRvLW1lbWJlci1mdW5jdGlvbiBpcwogICAgIHZpcnR1YWwuICBOb3JtYWxseSwgd2UgYXNzdW1lIHRoYXQgdGhlIGxvdy1vcmRlciBiaXQgb2YgYSBmdW5jdGlvbgogICAgIHBvaW50ZXIgbXVzdCBhbHdheXMgYmUgemVyby4gIFRoZW4sIGJ5IGVuc3VyaW5nIHRoYXQgdGhlCiAgICAgdnRhYmxlX2luZGV4IGlzIG9kZCwgd2UgY2FuIGRpc3Rpbmd1aXNoIHdoaWNoIHZhcmlhbnQgb2YgdGhlIHVuaW9uCiAgICAgaXMgaW4gdXNlLiAgQnV0LCBvbiBzb21lIHBsYXRmb3JtcyBmdW5jdGlvbiBwb2ludGVycyBjYW4gYmUgb2RkLAogICAgIGFuZCBzbyB0aGlzIGRvZXNuJ3Qgd29yay4gIEluIHRoYXQgY2FzZSwgd2UgdXNlIHRoZSBsb3ctb3JkZXIgYml0CiAgICAgb2YgdGhlICdkZWx0YScgZmllbGQsIGFuZCBzaGlmdCB0aGUgcmVtYWluZGVyIG9mIHRoZSAnZGVsdGEnIGZpZWxkCiAgICAgdG8gdGhlIGxlZnQuCgogICAgIEdDQyB3aWxsIGF1dG9tYXRpY2FsbHkgbWFrZSB0aGUgcmlnaHQgc2VsZWN0aW9uIGFib3V0IHdoZXJlIHRvCiAgICAgc3RvcmUgdGhpcyBiaXQgdXNpbmcgdGhlICdGVU5DVElPTl9CT1VOREFSWScgc2V0dGluZyBmb3IgeW91cgogICAgIHBsYXRmb3JtLiAgSG93ZXZlciwgc29tZSBwbGF0Zm9ybXMgc3VjaCBhcyBBUk0vVGh1bWIgaGF2ZQogICAgICdGVU5DVElPTl9CT1VOREFSWScgc2V0IHN1Y2ggdGhhdCBmdW5jdGlvbnMgYWx3YXlzIHN0YXJ0IGF0IGV2ZW4KICAgICBhZGRyZXNzZXMsIGJ1dCB0aGUgbG93ZXN0IGJpdCBvZiBwb2ludGVycyB0byBmdW5jdGlvbnMgaW5kaWNhdGUKICAgICB3aGV0aGVyIHRoZSBmdW5jdGlvbiBhdCB0aGF0IGFkZHJlc3MgaXMgaW4gQVJNIG9yIFRodW1iIG1vZGUuICBJZgogICAgIHRoaXMgaXMgdGhlIGNhc2Ugb2YgeW91ciBhcmNoaXRlY3R1cmUsIHlvdSBzaG91bGQgZGVmaW5lIHRoaXMgbWFjcm8KICAgICB0byAncHRybWVtZnVuY192Yml0X2luX2RlbHRhJy4KCiAgICAgSW4gZ2VuZXJhbCwgeW91IHNob3VsZCBub3QgaGF2ZSB0byBkZWZpbmUgdGhpcyBtYWNyby4gIE9uCiAgICAgYXJjaGl0ZWN0dXJlcyBpbiB3aGljaCBmdW5jdGlvbiBhZGRyZXNzZXMgYXJlIGFsd2F5cyBldmVuLAogICAgIGFjY29yZGluZyB0byAnRlVOQ1RJT05fQk9VTkRBUlknLCBHQ0Mgd2lsbCBhdXRvbWF0aWNhbGx5IGRlZmluZQogICAgIHRoaXMgbWFjcm8gdG8gJ3B0cm1lbWZ1bmNfdmJpdF9pbl9wZm4nLgoKIC0tIE1hY3JvOiBUQVJHRVRfVlRBQkxFX1VTRVNfREVTQ1JJUFRPUlMKICAgICBOb3JtYWxseSwgdGhlIEMrKyBjb21waWxlciB1c2VzIGZ1bmN0aW9uIHBvaW50ZXJzIGluIHZ0YWJsZXMuICBUaGlzCiAgICAgbWFjcm8gYWxsb3dzIHRoZSB0YXJnZXQgdG8gY2hhbmdlIHRvIHVzZSAiZnVuY3Rpb24gZGVzY3JpcHRvcnMiCiAgICAgaW5zdGVhZC4gIEZ1bmN0aW9uIGRlc2NyaXB0b3JzIGFyZSBmb3VuZCBvbiB0YXJnZXRzIGZvciB3aG9tIGEKICAgICBmdW5jdGlvbiBwb2ludGVyIGlzIGFjdHVhbGx5IGEgc21hbGwgZGF0YSBzdHJ1Y3R1cmUuICBOb3JtYWxseSB0aGUKICAgICBkYXRhIHN0cnVjdHVyZSBjb25zaXN0cyBvZiB0aGUgYWN0dWFsIGNvZGUgYWRkcmVzcyBwbHVzIGEgZGF0YQogICAgIHBvaW50ZXIgdG8gd2hpY2ggdGhlIGZ1bmN0aW9uJ3MgZGF0YSBpcyByZWxhdGl2ZS4KCiAgICAgSWYgdnRhYmxlcyBhcmUgdXNlZCwgdGhlIHZhbHVlIG9mIHRoaXMgbWFjcm8gc2hvdWxkIGJlIHRoZSBudW1iZXIKICAgICBvZiB3b3JkcyB0aGF0IHRoZSBmdW5jdGlvbiBkZXNjcmlwdG9yIG9jY3VwaWVzLgoKIC0tIE1hY3JvOiBUQVJHRVRfVlRBQkxFX0VOVFJZX0FMSUdOCiAgICAgQnkgZGVmYXVsdCwgdGhlIHZ0YWJsZSBlbnRyaWVzIGFyZSB2b2lkIHBvaW50ZXJzLCB0aGUgc28gdGhlCiAgICAgYWxpZ25tZW50IGlzIHRoZSBzYW1lIGFzIHBvaW50ZXIgYWxpZ25tZW50LiAgVGhlIHZhbHVlIG9mIHRoaXMKICAgICBtYWNybyBzcGVjaWZpZXMgdGhlIGFsaWdubWVudCBvZiB0aGUgdnRhYmxlIGVudHJ5IGluIGJpdHMuICBJdAogICAgIHNob3VsZCBiZSBkZWZpbmVkIG9ubHkgd2hlbiBzcGVjaWFsIGFsaWdubWVudCBpcyBuZWNlc3NhcnkuICAqLwoKIC0tIE1hY3JvOiBUQVJHRVRfVlRBQkxFX0RBVEFfRU5UUllfRElTVEFOQ0UKICAgICBUaGVyZSBhcmUgYSBmZXcgbm9uLWRlc2NyaXB0b3IgZW50cmllcyBpbiB0aGUgdnRhYmxlIGF0IG9mZnNldHMKICAgICBiZWxvdyB6ZXJvLiAgSWYgdGhlc2UgZW50cmllcyBtdXN0IGJlIHBhZGRlZCAoc2F5LCB0byBwcmVzZXJ2ZSB0aGUKICAgICBhbGlnbm1lbnQgc3BlY2lmaWVkIGJ5ICdUQVJHRVRfVlRBQkxFX0VOVFJZX0FMSUdOJyksIHNldCB0aGlzIHRvCiAgICAgdGhlIG51bWJlciBvZiB3b3JkcyBpbiBlYWNoIGRhdGEgZW50cnkuCgofCkZpbGU6IGdjY2ludC5pbmZvLCAgTm9kZTogUmVnaXN0ZXJzLCAgTmV4dDogUmVnaXN0ZXIgQ2xhc3NlcywgIFByZXY6IFR5cGUgTGF5b3V0LCAgVXA6IFRhcmdldCBNYWNyb3MKCjE1LjcgUmVnaXN0ZXIgVXNhZ2UKPT09PT09PT09PT09PT09PT09PQoKVGhpcyBzZWN0aW9uIGV4cGxhaW5zIGhvdyB0byBkZXNjcmliZSB3aGF0IHJlZ2lzdGVycyB0aGUgdGFyZ2V0IG1hY2hpbmUKaGFzLCBhbmQgaG93IChpbiBnZW5lcmFsKSB0aGV5IGNhbiBiZSB1c2VkLgoKIFRoZSBkZXNjcmlwdGlvbiBvZiB3aGljaCByZWdpc3RlcnMgYSBzcGVjaWZpYyBpbnN0cnVjdGlvbiBjYW4gdXNlIGlzCmRvbmUgd2l0aCByZWdpc3RlciBjbGFzc2VzOyBzZWUgKm5vdGUgUmVnaXN0ZXIgQ2xhc3Nlczo6LiAgRm9yCmluZm9ybWF0aW9uIG9uIHVzaW5nIHJlZ2lzdGVycyB0byBhY2Nlc3MgYSBzdGFjayBmcmFtZSwgc2VlICpub3RlIEZyYW1lClJlZ2lzdGVyczo6LiAgRm9yIHBhc3NpbmcgdmFsdWVzIGluIHJlZ2lzdGVycywgc2VlICpub3RlIFJlZ2lzdGVyCkFyZ3VtZW50czo6LiAgRm9yIHJldHVybmluZyB2YWx1ZXMgaW4gcmVnaXN0ZXJzLCBzZWUgKm5vdGUgU2NhbGFyClJldHVybjo6LgoKKiBNZW51OgoKKiBSZWdpc3RlciBCYXNpY3M6OgkJTnVtYmVyIGFuZCBraW5kcyBvZiByZWdpc3RlcnMuCiogQWxsb2NhdGlvbiBPcmRlcjo6CQlPcmRlciBpbiB3aGljaCByZWdpc3RlcnMgYXJlIGFsbG9jYXRlZC4KKiBWYWx1ZXMgaW4gUmVnaXN0ZXJzOjoJCVdoYXQga2luZHMgb2YgdmFsdWVzIGVhY2ggcmVnIGNhbiBob2xkLgoqIExlYWYgRnVuY3Rpb25zOjoJCVJlbnVtYmVyaW5nIHJlZ2lzdGVycyBmb3IgbGVhZiBmdW5jdGlvbnMuCiogU3RhY2sgUmVnaXN0ZXJzOjoJCUhhbmRsaW5nIGEgcmVnaXN0ZXIgc3RhY2sgc3VjaCBhcyA4MDM4Ny4KCh8KRmlsZTogZ2NjaW50LmluZm8sICBOb2RlOiBSZWdpc3RlciBCYXNpY3MsICBOZXh0OiBBbGxvY2F0aW9uIE9yZGVyLCAgVXA6IFJlZ2lzdGVycwoKMTUuNy4xIEJhc2ljIENoYXJhY3RlcmlzdGljcyBvZiBSZWdpc3RlcnMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KClJlZ2lzdGVycyBoYXZlIHZhcmlvdXMgY2hhcmFjdGVyaXN0aWNzLgoKIC0tIE1hY3JvOiBGSVJTVF9QU0VVRE9fUkVHSVNURVIKICAgICBOdW1iZXIgb2YgaGFyZHdhcmUgcmVnaXN0ZXJzIGtub3duIHRvIHRoZSBjb21waWxlci4gIFRoZXkgcmVjZWl2ZQogICAgIG51bWJlcnMgMCB0aHJvdWdoICdGSVJTVF9QU0VVRE9fUkVHSVNURVItMSc7IHRodXMsIHRoZSBmaXJzdCBwc2V1ZG8KICAgICByZWdpc3RlcidzIG51bWJlciByZWFsbHkgaXMgYXNzaWduZWQgdGhlIG51bWJlcgogICAgICdGSVJTVF9QU0VVRE9fUkVHSVNURVInLgoKIC0tIE1hY3JvOiBGSVhFRF9SRUdJU1RFUlMKICAgICBBbiBpbml0aWFsaXplciB0aGF0IHNheXMgd2hpY2ggcmVnaXN0ZXJzIGFyZSB1c2VkIGZvciBmaXhlZAogICAgIHB1cnBvc2VzIGFsbCB0aHJvdWdob3V0IHRoZSBjb21waWxlZCBjb2RlIGFuZCBhcmUgdGhlcmVmb3JlIG5vdAogICAgIGF2YWlsYWJsZSBmb3IgZ2VuZXJhbCBhbGxvY2F0aW9uLiAgVGhlc2Ugd291bGQgaW5jbHVkZSB0aGUgc3RhY2sKICAgICBwb2ludGVyLCB0aGUgZnJhbWUgcG9pbnRlciAoZXhjZXB0IG9uIG1hY2hpbmVzIHdoZXJlIHRoYXQgY2FuIGJlCiAgICAgdXNlZCBhcyBhIGdlbmVyYWwgcmVnaXN0ZXIgd2hlbiBubyBmcmFtZSBwb2ludGVyIGlzIG5lZWRlZCksIHRoZQogICAgIHByb2dyYW0gY291bnRlciBvbiBtYWNoaW5lcyB3aGVyZSB0aGF0IGlzIGNvbnNpZGVyZWQgb25lIG9mIHRoZQogICAgIGFkZHJlc3NhYmxlIHJlZ2lzdGVycywgYW5kIGFueSBvdGhlciBudW1iZXJlZCByZWdpc3RlciB3aXRoIGEKICAgICBzdGFuZGFyZCB1c2UuCgogICAgIFRoaXMgaW5mb3JtYXRpb24gaXMgZXhwcmVzc2VkIGFzIGEgc2VxdWVuY2Ugb2YgbnVtYmVycywgc2VwYXJhdGVkCiAgICAgYnkgY29tbWFzIGFuZCBzdXJyb3VuZGVkIGJ5IGJyYWNlcy4gIFRoZSBOdGggbnVtYmVyIGlzIDEgaWYKICAgICByZWdpc3RlciBOIGlzIGZpeGVkLCAwIG90aGVyd2lzZS4KCiAgICAgVGhlIHRhYmxlIGluaXRpYWxpemVkIGZyb20gdGhpcyBtYWNybywgYW5kIHRoZSB0YWJsZSBpbml0aWFsaXplZCBieQogICAgIHRoZSBmb2xsb3dpbmcgb25lLCBtYXkgYmUgb3ZlcnJpZGRlbiBhdCBydW4gdGltZSBlaXRoZXIKICAgICBhdXRvbWF0aWNhbGx5LCBieSB0aGUgYWN0aW9ucyBvZiB0aGUgbWFjcm8KICAgICAnQ09ORElUSU9OQUxfUkVHSVNURVJfVVNBR0UnLCBvciBieSB0aGUgdXNlciB3aXRoIHRoZSBjb21tYW5kCiAgICAgb3B0aW9ucyAnLWZmaXhlZC1SRUcnLCAnLWZjYWxsLXVzZWQtUkVHJyBhbmQgJy1mY2FsbC1zYXZlZC1SRUcnLgoKIC0tIE1hY3JvOiBDQUxMX1VTRURfUkVHSVNURVJTCiAgICAgTGlrZSAnRklYRURfUkVHSVNURVJTJyBidXQgaGFzIDEgZm9yIGVhY2ggcmVnaXN0ZXIgdGhhdCBpcwogICAgIGNsb2JiZXJlZCAoaW4gZ2VuZXJhbCkgYnkgZnVuY3Rpb24gY2FsbHMgYXMgd2VsbCBhcyBmb3IgZml4ZWQKICAgICByZWdpc3RlcnMuICBUaGlzIG1hY3JvIHRoZXJlZm9yZSBpZGVudGlmaWVzIHRoZSByZWdpc3RlcnMgdGhhdCBhcmUKICAgICBub3QgYXZhaWxhYmxlIGZvciBnZW5lcmFsIGFsbG9jYXRpb24gb2YgdmFsdWVzIHRoYXQgbXVzdCBsaXZlCiAgICAgYWNyb3NzIGZ1bmN0aW9uIGNhbGxzLgoKICAgICBJZiBhIHJlZ2lzdGVyIGhhcyAwIGluICdDQUxMX1VTRURfUkVHSVNURVJTJywgdGhlIGNvbXBpbGVyCiAgICAgYXV0b21hdGljYWxseSBzYXZlcyBpdCBvbiBmdW5jdGlvbiBlbnRyeSBhbmQgcmVzdG9yZXMgaXQgb24KICAgICBmdW5jdGlvbiBleGl0LCBpZiB0aGUgcmVnaXN0ZXIgaXMgdXNlZCB3aXRoaW4gdGhlIGZ1bmN0aW9uLgoKIC0tIE1hY3JvOiBDQUxMX1JFQUxMWV9VU0VEX1JFR0lTVEVSUwogICAgIExpa2UgJ0NBTExfVVNFRF9SRUdJU1RFUlMnIGV4Y2VwdCB0aGlzIG1hY3JvIGRvZXNuJ3QgcmVxdWlyZSB0aGF0CiAgICAgdGhlIGVudGlyZSBzZXQgb2YgJ0ZJWEVEX1JFR0lTVEVSUycgYmUgaW5jbHVkZWQuCiAgICAgKCdDQUxMX1VTRURfUkVHSVNURVJTJyBtdXN0IGJlIGEgc3VwZXJzZXQgb2YgJ0ZJWEVEX1JFR0lTVEVSUycpLgogICAgIFRoaXMgbWFjcm8gaXMgb3B0aW9uYWwuICBJZiBub3Qgc3BlY2lmaWVkLCBpdCBkZWZhdWx0cyB0byB0aGUgdmFsdWUKICAgICBvZiAnQ0FMTF9VU0VEX1JFR0lTVEVSUycuCgogLS0gTWFjcm86IEhBUkRfUkVHTk9fQ0FMTF9QQVJUX0NMT0JCRVJFRCAoUkVHTk8sIE1PREUpCiAgICAgQSBDIGV4cHJlc3Npb24gdGhhdCBpcyBub256ZXJvIGlmIGl0IGlzIG5vdCBwZXJtaXNzaWJsZSB0byBzdG9yZSBhCiAgICAgdmFsdWUgb2YgbW9kZSBNT0RFIGluIGhhcmQgcmVnaXN0ZXIgbnVtYmVyIFJFR05PIGFjcm9zcyBhIGNhbGwKICAgICB3aXRob3V0IHNvbWUgcGFydCBvZiBpdCBiZWluZyBjbG9iYmVyZWQuICBGb3IgbW9zdCBtYWNoaW5lcyB0aGlzCiAgICAgbWFjcm8gbmVlZCBub3QgYmUgZGVmaW5lZC4gIEl0IGlzIG9ubHkgcmVxdWlyZWQgZm9yIG1hY2hpbmVzIHRoYXQKICAgICBkbyBub3QgcHJlc2VydmUgdGhlIGVudGlyZSBjb250ZW50cyBvZiBhIHJlZ2lzdGVyIGFjcm9zcyBhIGNhbGwuCgogLS0gTWFjcm86IENPTkRJVElPTkFMX1JFR0lTVEVSX1VTQUdFCiAgICAgWmVybyBvciBtb3JlIEMgc3RhdGVtZW50cyB0aGF0IG1heSBjb25kaXRpb25hbGx5IG1vZGlmeSBmaXZlCiAgICAgdmFyaWFibGVzICdmaXhlZF9yZWdzJywgJ2NhbGxfdXNlZF9yZWdzJywgJ2dsb2JhbF9yZWdzJywKICAgICAncmVnX25hbWVzJywgYW5kICdyZWdfY2xhc3NfY29udGVudHMnLCB0byB0YWtlIGludG8gYWNjb3VudCBhbnkKICAgICBkZXBlbmRlbmNlIG9mIHRoZXNlIHJlZ2lzdGVyIHNldHMgb24gdGFyZ2V0IGZsYWdzLiAgVGhlIGZpcnN0IHRocmVlCiAgICAgb2YgdGhlc2UgYXJlIG9mIHR5cGUgJ2NoYXIgW10nIChpbnRlcnByZXRlZCBhcyBCb29sZWFuIHZlY3RvcnMpLgogICAgICdnbG9iYWxfcmVncycgaXMgYSAnY29uc3QgY2hhciAqW10nLCBhbmQgJ3JlZ19jbGFzc19jb250ZW50cycgaXMgYQogICAgICdIQVJEX1JFR19TRVQnLiAgQmVmb3JlIHRoZSBtYWNybyBpcyBjYWxsZWQsICdmaXhlZF9yZWdzJywKICAgICAnY2FsbF91c2VkX3JlZ3MnLCAncmVnX2NsYXNzX2NvbnRlbnRzJywgYW5kICdyZWdfbmFtZXMnIGhhdmUgYmVlbgogICAgIGluaXRpYWxpemVkIGZyb20gJ0ZJWEVEX1JFR0lTVEVSUycsICdDQUxMX1VTRURfUkVHSVNURVJTJywKICAgICAnUkVHX0NMQVNTX0NPTlRFTlRTJywgYW5kICdSRUdJU1RFUl9OQU1FUycsIHJlc3BlY3RpdmVseS4KICAgICAnZ2xvYmFsX3JlZ3MnIGhhcyBiZWVuIGNsZWFyZWQsIGFuZCBhbnkgJy1mZml4ZWQtUkVHJywKICAgICAnLWZjYWxsLXVzZWQtUkVHJyBhbmQgJy1mY2FsbC1zYXZlZC1SRUcnIGNvbW1hbmQgb3B0aW9ucyBoYXZlIGJlZW4KICAgICBhcHBsaWVkLgoKICAgICBZb3UgbmVlZCBub3QgZGVmaW5lIHRoaXMgbWFjcm8gaWYgaXQgaGFzIG5vIHdvcmsgdG8gZG8uCgogICAgIElmIHRoZSB1c2FnZSBvZiBhbiBlbnRpcmUgY2xhc3Mgb2YgcmVnaXN0ZXJzIGRlcGVuZHMgb24gdGhlIHRhcmdldAogICAgIGZsYWdzLCB5b3UgbWF5IGluZGljYXRlIHRoaXMgdG8gR0NDIGJ5IHVzaW5nIHRoaXMgbWFjcm8gdG8gbW9kaWZ5CiAgICAgJ2ZpeGVkX3JlZ3MnIGFuZCAnY2FsbF91c2VkX3JlZ3MnIHRvIDEgZm9yIGVhY2ggb2YgdGhlIHJlZ2lzdGVycyBpbgogICAgIHRoZSBjbGFzc2VzIHdoaWNoIHNob3VsZCBub3QgYmUgdXNlZCBieSBHQ0MuICBBbHNvIGRlZmluZSB0aGUgbWFjcm8KICAgICAnUkVHX0NMQVNTX0ZST01fTEVUVEVSJyAvICdSRUdfQ0xBU1NfRlJPTV9DT05TVFJBSU5UJyB0byByZXR1cm4KICAgICAnTk9fUkVHUycgaWYgaXQgaXMgY2FsbGVkIHdpdGggYSBsZXR0ZXIgZm9yIGEgY2xhc3MgdGhhdCBzaG91bGRuJ3QKICAgICBiZSB1c2VkLgoKICAgICAoSG93ZXZlciwgaWYgdGhpcyBjbGFzcyBpcyBub3QgaW5jbHVkZWQgaW4gJ0dFTkVSQUxfUkVHUycgYW5kIGFsbAogICAgIG9mIHRoZSBpbnNuIHBhdHRlcm5zIHdob3NlIGNvbnN0cmFpbnRzIHBlcm1pdCB0aGlzIGNsYXNzIGFyZQogICAgIGNvbnRyb2xsZWQgYnkgdGFyZ2V0IHN3aXRjaGVzLCB0aGVuIEdDQyB3aWxsIGF1dG9tYXRpY2FsbHkgYXZvaWQKICAgICB1c2luZyB0aGVzZSByZWdpc3RlcnMgd2hlbiB0aGUgdGFyZ2V0IHN3aXRjaGVzIGFyZSBvcHBvc2VkIHRvCiAgICAgdGhlbS4pCgogLS0gTWFjcm86IElOQ09NSU5HX1JFR05PIChPVVQpCiAgICAgRGVmaW5lIHRoaXMgbWFjcm8gaWYgdGhlIHRhcmdldCBtYWNoaW5lIGhhcyByZWdpc3RlciB3aW5kb3dzLiAgVGhpcwogICAgIEMgZXhwcmVzc2lvbiByZXR1cm5zIHRoZSByZWdpc3RlciBudW1iZXIgYXMgc2VlbiBieSB0aGUgY2FsbGVkCiAgICAgZnVuY3Rpb24gY29ycmVzcG9uZGluZyB0byB0aGUgcmVnaXN0ZXIgbnVtYmVyIE9VVCBhcyBzZWVuIGJ5IHRoZQogICAgIGNhbGxpbmcgZnVuY3Rpb24uICBSZXR1cm4gT1VUIGlmIHJlZ2lzdGVyIG51bWJlciBPVVQgaXMgbm90IGFuCiAgICAgb3V0Ym91bmQgcmVnaXN0ZXIuCgogLS0gTWFjcm86IE9VVEdPSU5HX1JFR05PIChJTikKICAgICBEZWZpbmUgdGhpcyBtYWNybyBpZiB0aGUgdGFyZ2V0IG1hY2hpbmUgaGFzIHJlZ2lzdGVyIHdpbmRvd3MuICBUaGlzCiAgICAgQyBleHByZXNzaW9uIHJldHVybnMgdGhlIHJlZ2lzdGVyIG51bWJlciBhcyBzZWVuIGJ5IHRoZSBjYWxsaW5nCiAgICAgZnVuY3Rpb24gY29ycmVzcG9uZGluZyB0byB0aGUgcmVnaXN0ZXIgbnVtYmVyIElOIGFzIHNlZW4gYnkgdGhlCiAgICAgY2FsbGVkIGZ1bmN0aW9uLiAgUmV0dXJuIElOIGlmIHJlZ2lzdGVyIG51bWJlciBJTiBpcyBub3QgYW4gaW5ib3VuZAogICAgIHJlZ2lzdGVyLgoKIC0tIE1hY3JvOiBMT0NBTF9SRUdOTyAoUkVHTk8pCiAgICAgRGVmaW5lIHRoaXMgbWFjcm8gaWYgdGhlIHRhcmdldCBtYWNoaW5lIGhhcyByZWdpc3RlciB3aW5kb3dzLiAgVGhpcwogICAgIEMgZXhwcmVzc2lvbiByZXR1cm5zIHRydWUgaWYgdGhlIHJlZ2lzdGVyIGlzIGNhbGwtc2F2ZWQgYnV0IGlzIGluCiAgICAgdGhlIHJlZ2lzdGVyIHdpbmRvdy4gIFVubGlrZSBtb3N0IGNhbGwtc2F2ZWQgcmVnaXN0ZXJzLCBzdWNoCiAgICAgcmVnaXN0ZXJzIG5lZWQgbm90IGJlIGV4cGxpY2l0bHkgcmVzdG9yZWQgb24gZnVuY3Rpb24gZXhpdCBvcgogICAgIGR1cmluZyBub24tbG9jYWwgZ290b3MuCgogLS0gTWFjcm86IFBDX1JFR05VTQogICAgIElmIHRoZSBwcm9ncmFtIGNvdW50ZXIgaGFzIGEgcmVnaXN0ZXIgbnVtYmVyLCBkZWZpbmUgdGhpcyBhcyB0aGF0CiAgICAgcmVnaXN0ZXIgbnVtYmVyLiAgT3RoZXJ3aXNlLCBkbyBub3QgZGVmaW5lIGl0LgoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IEFsbG9jYXRpb24gT3JkZXIsICBOZXh0OiBWYWx1ZXMgaW4gUmVnaXN0ZXJzLCAgUHJldjogUmVnaXN0ZXIgQmFzaWNzLCAgVXA6IFJlZ2lzdGVycwoKMTUuNy4yIE9yZGVyIG9mIEFsbG9jYXRpb24gb2YgUmVnaXN0ZXJzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKUmVnaXN0ZXJzIGFyZSBhbGxvY2F0ZWQgaW4gb3JkZXIuCgogLS0gTWFjcm86IFJFR19BTExPQ19PUkRFUgogICAgIElmIGRlZmluZWQsIGFuIGluaXRpYWxpemVyIGZvciBhIHZlY3RvciBvZiBpbnRlZ2VycywgY29udGFpbmluZyB0aGUKICAgICBudW1iZXJzIG9mIGhhcmQgcmVnaXN0ZXJzIGluIHRoZSBvcmRlciBpbiB3aGljaCBHQ0Mgc2hvdWxkIHByZWZlcgogICAgIHRvIHVzZSB0aGVtIChmcm9tIG1vc3QgcHJlZmVycmVkIHRvIGxlYXN0KS4KCiAgICAgSWYgdGhpcyBtYWNybyBpcyBub3QgZGVmaW5lZCwgcmVnaXN0ZXJzIGFyZSB1c2VkIGxvd2VzdCBudW1iZXJlZAogICAgIGZpcnN0IChhbGwgZWxzZSBiZWluZyBlcXVhbCkuCgogICAgIE9uZSB1c2Ugb2YgdGhpcyBtYWNybyBpcyBvbiBtYWNoaW5lcyB3aGVyZSB0aGUgaGlnaGVzdCBudW1iZXJlZAogICAgIHJlZ2lzdGVycyBtdXN0IGFsd2F5cyBiZSBzYXZlZCBhbmQgdGhlIHNhdmUtbXVsdGlwbGUtcmVnaXN0ZXJzCiAgICAgaW5zdHJ1Y3Rpb24gc3VwcG9ydHMgb25seSBzZXF1ZW5jZXMgb2YgY29uc2VjdXRpdmUgcmVnaXN0ZXJzLiAgT24KICAgICBzdWNoIG1hY2hpbmVzLCBkZWZpbmUgJ1JFR19BTExPQ19PUkRFUicgdG8gYmUgYW4gaW5pdGlhbGl6ZXIgdGhhdAogICAgIGxpc3RzIHRoZSBoaWdoZXN0IG51bWJlcmVkIGFsbG9jYWJsZSByZWdpc3RlciBmaXJzdC4KCiAtLSBNYWNybzogT1JERVJfUkVHU19GT1JfTE9DQUxfQUxMT0MKICAgICBBIEMgc3RhdGVtZW50IChzYW5zIHNlbWljb2xvbikgdG8gY2hvb3NlIHRoZSBvcmRlciBpbiB3aGljaCB0bwogICAgIGFsbG9jYXRlIGhhcmQgcmVnaXN0ZXJzIGZvciBwc2V1ZG8tcmVnaXN0ZXJzIGxvY2FsIHRvIGEgYmFzaWMKICAgICBibG9jay4KCiAgICAgU3RvcmUgdGhlIGRlc2lyZWQgcmVnaXN0ZXIgb3JkZXIgaW4gdGhlIGFycmF5ICdyZWdfYWxsb2Nfb3JkZXInLgogICAgIEVsZW1lbnQgMCBzaG91bGQgYmUgdGhlIHJlZ2lzdGVyIHRvIGFsbG9jYXRlIGZpcnN0OyBlbGVtZW50IDEsIHRoZQogICAgIG5leHQgcmVnaXN0ZXI7IGFuZCBzbyBvbi4KCiAgICAgVGhlIG1hY3JvIGJvZHkgc2hvdWxkIG5vdCBhc3N1bWUgYW55dGhpbmcgYWJvdXQgdGhlIGNvbnRlbnRzIG9mCiAgICAgJ3JlZ19hbGxvY19vcmRlcicgYmVmb3JlIGV4ZWN1dGlvbiBvZiB0aGUgbWFjcm8uCgogICAgIE9uIG1vc3QgbWFjaGluZXMsIGl0IGlzIG5vdCBuZWNlc3NhcnkgdG8gZGVmaW5lIHRoaXMgbWFjcm8uCgofCkZpbGU6IGdjY2ludC5pbmZvLCAgTm9kZTogVmFsdWVzIGluIFJlZ2lzdGVycywgIE5leHQ6IExlYWYgRnVuY3Rpb25zLCAgUHJldjogQWxsb2NhdGlvbiBPcmRlciwgIFVwOiBSZWdpc3RlcnMKCjE1LjcuMyBIb3cgVmFsdWVzIEZpdCBpbiBSZWdpc3RlcnMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKVGhpcyBzZWN0aW9uIGRpc2N1c3NlcyB0aGUgbWFjcm9zIHRoYXQgZGVzY3JpYmUgd2hpY2gga2luZHMgb2YgdmFsdWVzCihzcGVjaWZpY2FsbHksIHdoaWNoIG1hY2hpbmUgbW9kZXMpIGVhY2ggcmVnaXN0ZXIgY2FuIGhvbGQsIGFuZCBob3cgbWFueQpjb25zZWN1dGl2ZSByZWdpc3RlcnMgYXJlIG5lZWRlZCBmb3IgYSBnaXZlbiBtb2RlLgoKIC0tIE1hY3JvOiBIQVJEX1JFR05PX05SRUdTIChSRUdOTywgTU9ERSkKICAgICBBIEMgZXhwcmVzc2lvbiBmb3IgdGhlIG51bWJlciBvZiBjb25zZWN1dGl2ZSBoYXJkIHJlZ2lzdGVycywKICAgICBzdGFydGluZyBhdCByZWdpc3RlciBudW1iZXIgUkVHTk8sIHJlcXVpcmVkIHRvIGhvbGQgYSB2YWx1ZSBvZiBtb2RlCiAgICAgTU9ERS4gIFRoaXMgbWFjcm8gbXVzdCBuZXZlciByZXR1cm4gemVybywgZXZlbiBpZiBhIHJlZ2lzdGVyIGNhbm5vdAogICAgIGhvbGQgdGhlIHJlcXVlc3RlZCBtb2RlIC0gaW5kaWNhdGUgdGhhdCB3aXRoIEhBUkRfUkVHTk9fTU9ERV9PSwogICAgIGFuZC9vciBDQU5OT1RfQ0hBTkdFX01PREVfQ0xBU1MgaW5zdGVhZC4KCiAgICAgT24gYSBtYWNoaW5lIHdoZXJlIGFsbCByZWdpc3RlcnMgYXJlIGV4YWN0bHkgb25lIHdvcmQsIGEgc3VpdGFibGUKICAgICBkZWZpbml0aW9uIG9mIHRoaXMgbWFjcm8gaXMKCiAgICAgICAgICAjZGVmaW5lIEhBUkRfUkVHTk9fTlJFR1MoUkVHTk8sIE1PREUpICAgICAgICAgICAgXAogICAgICAgICAgICAgKChHRVRfTU9ERV9TSVpFIChNT0RFKSArIFVOSVRTX1BFUl9XT1JEIC0gMSkgIFwKICAgICAgICAgICAgICAvIFVOSVRTX1BFUl9XT1JEKQoKIC0tIE1hY3JvOiBIQVJEX1JFR05PX05SRUdTX0hBU19QQURESU5HIChSRUdOTywgTU9ERSkKICAgICBBIEMgZXhwcmVzc2lvbiB0aGF0IGlzIG5vbnplcm8gaWYgYSB2YWx1ZSBvZiBtb2RlIE1PREUsIHN0b3JlZCBpbgogICAgIG1lbW9yeSwgZW5kcyB3aXRoIHBhZGRpbmcgdGhhdCBjYXVzZXMgaXQgdG8gdGFrZSB1cCBtb3JlIHNwYWNlIHRoYW4KICAgICBpbiByZWdpc3RlcnMgc3RhcnRpbmcgYXQgcmVnaXN0ZXIgbnVtYmVyIFJFR05PIChhcyBkZXRlcm1pbmVkIGJ5CiAgICAgbXVsdGlwbHlpbmcgR0NDJ3Mgbm90aW9uIG9mIHRoZSBzaXplIG9mIHRoZSByZWdpc3RlciB3aGVuCiAgICAgY29udGFpbmluZyB0aGlzIG1vZGUgYnkgdGhlIG51bWJlciBvZiByZWdpc3RlcnMgcmV0dXJuZWQgYnkKICAgICAnSEFSRF9SRUdOT19OUkVHUycpLiAgQnkgZGVmYXVsdCB0aGlzIGlzIHplcm8uCgogICAgIEZvciBleGFtcGxlLCBpZiBhIGZsb2F0aW5nLXBvaW50IHZhbHVlIGlzIHN0b3JlZCBpbiB0aHJlZSAzMi1iaXQKICAgICByZWdpc3RlcnMgYnV0IHRha2VzIHVwIDEyOCBiaXRzIGluIG1lbW9yeSwgdGhlbiB0aGlzIHdvdWxkIGJlCiAgICAgbm9uemVyby4KCiAgICAgVGhpcyBtYWNyb3Mgb25seSBuZWVkcyB0byBiZSBkZWZpbmVkIGlmIHRoZXJlIGFyZSBjYXNlcyB3aGVyZQogICAgICdzdWJyZWdfZ2V0X2luZm8nIHdvdWxkIG90aGVyd2lzZSB3cm9uZ2x5IGRldGVybWluZSB0aGF0IGEgJ3N1YnJlZycKICAgICBjYW4gYmUgcmVwcmVzZW50ZWQgYnkgYW4gb2Zmc2V0IHRvIHRoZSByZWdpc3RlciBudW1iZXIsIHdoZW4gaW4KICAgICBmYWN0IHN1Y2ggYSAnc3VicmVnJyB3b3VsZCBjb250YWluIHNvbWUgb2YgdGhlIHBhZGRpbmcgbm90IHN0b3JlZAogICAgIGluIHJlZ2lzdGVycyBhbmQgc28gbm90IGJlIHJlcHJlc2VudGFibGUuCgogLS0gTWFjcm86IEhBUkRfUkVHTk9fTlJFR1NfV0lUSF9QQURESU5HIChSRUdOTywgTU9ERSkKICAgICBGb3IgdmFsdWVzIG9mIFJFR05PIGFuZCBNT0RFIGZvciB3aGljaAogICAgICdIQVJEX1JFR05PX05SRUdTX0hBU19QQURESU5HJyByZXR1cm5zIG5vbnplcm8sIGEgQyBleHByZXNzaW9uCiAgICAgcmV0dXJuaW5nIHRoZSBncmVhdGVyIG51bWJlciBvZiByZWdpc3RlcnMgcmVxdWlyZWQgdG8gaG9sZCB0aGUKICAgICB2YWx1ZSBpbmNsdWRpbmcgYW55IHBhZGRpbmcuICBJbiB0aGUgZXhhbXBsZSBhYm92ZSwgdGhlIHZhbHVlIHdvdWxkCiAgICAgYmUgZm91ci4KCiAtLSBNYWNybzogUkVHTU9ERV9OQVRVUkFMX1NJWkUgKE1PREUpCiAgICAgRGVmaW5lIHRoaXMgbWFjcm8gaWYgdGhlIG5hdHVyYWwgc2l6ZSBvZiByZWdpc3RlcnMgdGhhdCBob2xkIHZhbHVlcwogICAgIG9mIG1vZGUgTU9ERSBpcyBub3QgdGhlIHdvcmQgc2l6ZS4gIEl0IGlzIGEgQyBleHByZXNzaW9uIHRoYXQKICAgICBzaG91bGQgZ2l2ZSB0aGUgbmF0dXJhbCBzaXplIGluIGJ5dGVzIGZvciB0aGUgc3BlY2lmaWVkIG1vZGUuICBJdAogICAgIGlzIHVzZWQgYnkgdGhlIHJlZ2lzdGVyIGFsbG9jYXRvciB0byB0cnkgdG8gb3B0aW1pemUgaXRzIHJlc3VsdHMuCiAgICAgVGhpcyBoYXBwZW5zIGZvciBleGFtcGxlIG9uIFNQQVJDIDY0LWJpdCB3aGVyZSB0aGUgbmF0dXJhbCBzaXplIG9mCiAgICAgZmxvYXRpbmctcG9pbnQgcmVnaXN0ZXJzIGlzIHN0aWxsIDMyLWJpdC4KCiAtLSBNYWNybzogSEFSRF9SRUdOT19NT0RFX09LIChSRUdOTywgTU9ERSkKICAgICBBIEMgZXhwcmVzc2lvbiB0aGF0IGlzIG5vbnplcm8gaWYgaXQgaXMgcGVybWlzc2libGUgdG8gc3RvcmUgYQogICAgIHZhbHVlIG9mIG1vZGUgTU9ERSBpbiBoYXJkIHJlZ2lzdGVyIG51bWJlciBSRUdOTyAob3IgaW4gc2V2ZXJhbAogICAgIHJlZ2lzdGVycyBzdGFydGluZyB3aXRoIHRoYXQgb25lKS4gIEZvciBhIG1hY2hpbmUgd2hlcmUgYWxsCiAgICAgcmVnaXN0ZXJzIGFyZSBlcXVpdmFsZW50LCBhIHN1aXRhYmxlIGRlZmluaXRpb24gaXMKCiAgICAgICAgICAjZGVmaW5lIEhBUkRfUkVHTk9fTU9ERV9PSyhSRUdOTywgTU9ERSkgMQoKICAgICBZb3UgbmVlZCBub3QgaW5jbHVkZSBjb2RlIHRvIGNoZWNrIGZvciB0aGUgbnVtYmVycyBvZiBmaXhlZAogICAgIHJlZ2lzdGVycywgYmVjYXVzZSB0aGUgYWxsb2NhdGlvbiBtZWNoYW5pc20gY29uc2lkZXJzIHRoZW0gdG8gYmUKICAgICBhbHdheXMgb2NjdXBpZWQuCgogICAgIE9uIHNvbWUgbWFjaGluZXMsIGRvdWJsZS1wcmVjaXNpb24gdmFsdWVzIG11c3QgYmUga2VwdCBpbiBldmVuL29kZAogICAgIHJlZ2lzdGVyIHBhaXJzLiAgWW91IGNhbiBpbXBsZW1lbnQgdGhhdCBieSBkZWZpbmluZyB0aGlzIG1hY3JvIHRvCiAgICAgcmVqZWN0IG9kZCByZWdpc3RlciBudW1iZXJzIGZvciBzdWNoIG1vZGVzLgoKICAgICBUaGUgbWluaW11bSByZXF1aXJlbWVudCBmb3IgYSBtb2RlIHRvIGJlIE9LIGluIGEgcmVnaXN0ZXIgaXMgdGhhdAogICAgIHRoZSAnbW92TU9ERScgaW5zdHJ1Y3Rpb24gcGF0dGVybiBzdXBwb3J0IG1vdmVzIGJldHdlZW4gdGhlCiAgICAgcmVnaXN0ZXIgYW5kIG90aGVyIGhhcmQgcmVnaXN0ZXIgaW4gdGhlIHNhbWUgY2xhc3MgYW5kIHRoYXQgbW92aW5nCiAgICAgYSB2YWx1ZSBpbnRvIHRoZSByZWdpc3RlciBhbmQgYmFjayBvdXQgbm90IGFsdGVyIGl0LgoKICAgICBTaW5jZSB0aGUgc2FtZSBpbnN0cnVjdGlvbiB1c2VkIHRvIG1vdmUgJ3dvcmRfbW9kZScgd2lsbCB3b3JrIGZvcgogICAgIGFsbCBuYXJyb3dlciBpbnRlZ2VyIG1vZGVzLCBpdCBpcyBub3QgbmVjZXNzYXJ5IG9uIGFueSBtYWNoaW5lIGZvcgogICAgICdIQVJEX1JFR05PX01PREVfT0snIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gdGhlc2UgbW9kZXMsIHByb3ZpZGVkCiAgICAgeW91IGRlZmluZSBwYXR0ZXJucyAnbW92aGknLCBldGMuLCB0byB0YWtlIGFkdmFudGFnZSBvZiB0aGlzLiAgVGhpcwogICAgIGlzIHVzZWZ1bCBiZWNhdXNlIG9mIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuICdIQVJEX1JFR05PX01PREVfT0snCiAgICAgYW5kICdNT0RFU19USUVBQkxFX1AnOyBpdCBpcyB2ZXJ5IGRlc2lyYWJsZSBmb3IgYWxsIGludGVnZXIgbW9kZXMKICAgICB0byBiZSB0aWVhYmxlLgoKICAgICBNYW55IG1hY2hpbmVzIGhhdmUgc3BlY2lhbCByZWdpc3RlcnMgZm9yIGZsb2F0aW5nIHBvaW50IGFyaXRobWV0aWMuCiAgICAgT2Z0ZW4gcGVvcGxlIGFzc3VtZSB0aGF0IGZsb2F0aW5nIHBvaW50IG1hY2hpbmUgbW9kZXMgYXJlIGFsbG93ZWQKICAgICBvbmx5IGluIGZsb2F0aW5nIHBvaW50IHJlZ2lzdGVycy4gIFRoaXMgaXMgbm90IHRydWUuICBBbnkgcmVnaXN0ZXJzCiAgICAgdGhhdCBjYW4gaG9sZCBpbnRlZ2VycyBjYW4gc2FmZWx5IF9ob2xkXyBhIGZsb2F0aW5nIHBvaW50IG1hY2hpbmUKICAgICBtb2RlLCB3aGV0aGVyIG9yIG5vdCBmbG9hdGluZyBhcml0aG1ldGljIGNhbiBiZSBkb25lIG9uIGl0IGluIHRob3NlCiAgICAgcmVnaXN0ZXJzLiAgSW50ZWdlciBtb3ZlIGluc3RydWN0aW9ucyBjYW4gYmUgdXNlZCB0byBtb3ZlIHRoZQogICAgIHZhbHVlcy4KCiAgICAgT24gc29tZSBtYWNoaW5lcywgdGhvdWdoLCB0aGUgY29udmVyc2UgaXMgdHJ1ZTogZml4ZWQtcG9pbnQgbWFjaGluZQogICAgIG1vZGVzIG1heSBub3QgZ28gaW4gZmxvYXRpbmcgcmVnaXN0ZXJzLiAgVGhpcyBpcyB0cnVlIGlmIHRoZQogICAgIGZsb2F0aW5nIHJlZ2lzdGVycyBub3JtYWxpemUgYW55IHZhbHVlIHN0b3JlZCBpbiB0aGVtLCBiZWNhdXNlCiAgICAgc3RvcmluZyBhIG5vbi1mbG9hdGluZyB2YWx1ZSB0aGVyZSB3b3VsZCBnYXJibGUgaXQuICBJbiB0aGlzIGNhc2UsCiAgICAgJ0hBUkRfUkVHTk9fTU9ERV9PSycgc2hvdWxkIHJlamVjdCBmaXhlZC1wb2ludCBtYWNoaW5lIG1vZGVzIGluCiAgICAgZmxvYXRpbmcgcmVnaXN0ZXJzLiAgQnV0IGlmIHRoZSBmbG9hdGluZyByZWdpc3RlcnMgZG8gbm90CiAgICAgYXV0b21hdGljYWxseSBub3JtYWxpemUsIGlmIHlvdSBjYW4gc3RvcmUgYW55IGJpdCBwYXR0ZXJuIGluIG9uZQogICAgIGFuZCByZXRyaWV2ZSBpdCB1bmNoYW5nZWQgd2l0aG91dCBhIHRyYXAsIHRoZW4gYW55IG1hY2hpbmUgbW9kZSBtYXkKICAgICBnbyBpbiBhIGZsb2F0aW5nIHJlZ2lzdGVyLCBzbyB5b3UgY2FuIGRlZmluZSB0aGlzIG1hY3JvIHRvIHNheSBzby4KCiAgICAgVGhlIHByaW1hcnkgc2lnbmlmaWNhbmNlIG9mIHNwZWNpYWwgZmxvYXRpbmcgcmVnaXN0ZXJzIGlzIHJhdGhlcgogICAgIHRoYXQgdGhleSBhcmUgdGhlIHJlZ2lzdGVycyBhY2NlcHRhYmxlIGluIGZsb2F0aW5nIHBvaW50IGFyaXRobWV0aWMKICAgICBpbnN0cnVjdGlvbnMuICBIb3dldmVyLCB0aGlzIGlzIG9mIG5vIGNvbmNlcm4gdG8KICAgICAnSEFSRF9SRUdOT19NT0RFX09LJy4gIFlvdSBoYW5kbGUgaXQgYnkgd3JpdGluZyB0aGUgcHJvcGVyCiAgICAgY29uc3RyYWludHMgZm9yIHRob3NlIGluc3RydWN0aW9ucy4KCiAgICAgT24gc29tZSBtYWNoaW5lcywgdGhlIGZsb2F0aW5nIHJlZ2lzdGVycyBhcmUgZXNwZWNpYWxseSBzbG93IHRvCiAgICAgYWNjZXNzLCBzbyB0aGF0IGl0IGlzIGJldHRlciB0byBzdG9yZSBhIHZhbHVlIGluIGEgc3RhY2sgZnJhbWUgdGhhbgogICAgIGluIHN1Y2ggYSByZWdpc3RlciBpZiBmbG9hdGluZyBwb2ludCBhcml0aG1ldGljIGlzIG5vdCBiZWluZyBkb25lLgogICAgIEFzIGxvbmcgYXMgdGhlIGZsb2F0aW5nIHJlZ2lzdGVycyBhcmUgbm90IGluIGNsYXNzICdHRU5FUkFMX1JFR1MnLAogICAgIHRoZXkgd2lsbCBub3QgYmUgdXNlZCB1bmxlc3Mgc29tZSBwYXR0ZXJuJ3MgY29uc3RyYWludCBhc2tzIGZvcgogICAgIG9uZS4KCiAtLSBNYWNybzogSEFSRF9SRUdOT19SRU5BTUVfT0sgKEZST00sIFRPKQogICAgIEEgQyBleHByZXNzaW9uIHRoYXQgaXMgbm9uemVybyBpZiBpdCBpcyBPSyB0byByZW5hbWUgYSBoYXJkCiAgICAgcmVnaXN0ZXIgRlJPTSB0byBhbm90aGVyIGhhcmQgcmVnaXN0ZXIgVE8uCgogICAgIE9uZSBjb21tb24gdXNlIG9mIHRoaXMgbWFjcm8gaXMgdG8gcHJldmVudCByZW5hbWluZyBvZiBhIHJlZ2lzdGVyCiAgICAgdG8gYW5vdGhlciByZWdpc3RlciB0aGF0IGlzIG5vdCBzYXZlZCBieSBhIHByb2xvZ3VlIGluIGFuIGludGVycnVwdAogICAgIGhhbmRsZXIuCgogICAgIFRoZSBkZWZhdWx0IGlzIGFsd2F5cyBub256ZXJvLgoKIC0tIE1hY3JvOiBNT0RFU19USUVBQkxFX1AgKE1PREUxLCBNT0RFMikKICAgICBBIEMgZXhwcmVzc2lvbiB0aGF0IGlzIG5vbnplcm8gaWYgYSB2YWx1ZSBvZiBtb2RlIE1PREUxIGlzCiAgICAgYWNjZXNzaWJsZSBpbiBtb2RlIE1PREUyIHdpdGhvdXQgY29weWluZy4KCiAgICAgSWYgJ0hBUkRfUkVHTk9fTU9ERV9PSyAoUiwgTU9ERTEpJyBhbmQgJ0hBUkRfUkVHTk9fTU9ERV9PSyAoUiwKICAgICBNT0RFMiknIGFyZSBhbHdheXMgdGhlIHNhbWUgZm9yIGFueSBSLCB0aGVuICdNT0RFU19USUVBQkxFX1AKICAgICAoTU9ERTEsIE1PREUyKScgc2hvdWxkIGJlIG5vbnplcm8uICBJZiB0aGV5IGRpZmZlciBmb3IgYW55IFIsIHlvdQogICAgIHNob3VsZCBkZWZpbmUgdGhpcyBtYWNybyB0byByZXR1cm4gemVybyB1bmxlc3Mgc29tZSBvdGhlciBtZWNoYW5pc20KICAgICBlbnN1cmVzIHRoZSBhY2Nlc3NpYmlsaXR5IG9mIHRoZSB2YWx1ZSBpbiBhIG5hcnJvd2VyIG1vZGUuCgogICAgIFlvdSBzaG91bGQgZGVmaW5lIHRoaXMgbWFjcm8gdG8gcmV0dXJuIG5vbnplcm8gaW4gYXMgbWFueSBjYXNlcyBhcwogICAgIHBvc3NpYmxlIHNpbmNlIGRvaW5nIHNvIHdpbGwgYWxsb3cgR0NDIHRvIHBlcmZvcm0gYmV0dGVyIHJlZ2lzdGVyCiAgICAgYWxsb2NhdGlvbi4KCiAtLSBNYWNybzogQVZPSURfQ0NNT0RFX0NPUElFUwogICAgIERlZmluZSB0aGlzIG1hY3JvIGlmIHRoZSBjb21waWxlciBzaG91bGQgYXZvaWQgY29waWVzIHRvL2Zyb20KICAgICAnQ0Ntb2RlJyByZWdpc3RlcnMuICBZb3Ugc2hvdWxkIG9ubHkgZGVmaW5lIHRoaXMgbWFjcm8gaWYgc3VwcG9ydAogICAgIGZvciBjb3B5aW5nIHRvL2Zyb20gJ0NDbW9kZScgaXMgaW5jb21wbGV0ZS4KCh8KRmlsZTogZ2NjaW50LmluZm8sICBOb2RlOiBMZWFmIEZ1bmN0aW9ucywgIE5leHQ6IFN0YWNrIFJlZ2lzdGVycywgIFByZXY6IFZhbHVlcyBpbiBSZWdpc3RlcnMsICBVcDogUmVnaXN0ZXJzCgoxNS43LjQgSGFuZGxpbmcgTGVhZiBGdW5jdGlvbnMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpPbiBzb21lIG1hY2hpbmVzLCBhIGxlYWYgZnVuY3Rpb24gKGkuZS4sIG9uZSB3aGljaCBtYWtlcyBubyBjYWxscykgY2FuCnJ1biBtb3JlIGVmZmljaWVudGx5IGlmIGl0IGRvZXMgbm90IG1ha2UgaXRzIG93biByZWdpc3RlciB3aW5kb3cuICBPZnRlbgp0aGlzIG1lYW5zIGl0IGlzIHJlcXVpcmVkIHRvIHJlY2VpdmUgaXRzIGFyZ3VtZW50cyBpbiB0aGUgcmVnaXN0ZXJzCndoZXJlIHRoZXkgYXJlIHBhc3NlZCBieSB0aGUgY2FsbGVyLCBpbnN0ZWFkIG9mIHRoZSByZWdpc3RlcnMgd2hlcmUgdGhleQp3b3VsZCBub3JtYWxseSBhcnJpdmUuCgogVGhlIHNwZWNpYWwgdHJlYXRtZW50IGZvciBsZWFmIGZ1bmN0aW9ucyBnZW5lcmFsbHkgYXBwbGllcyBvbmx5IHdoZW4Kb3RoZXIgY29uZGl0aW9ucyBhcmUgbWV0OyBmb3IgZXhhbXBsZSwgb2Z0ZW4gdGhleSBtYXkgdXNlIG9ubHkgdGhvc2UKcmVnaXN0ZXJzIGZvciBpdHMgb3duIHZhcmlhYmxlcyBhbmQgdGVtcG9yYXJpZXMuICBXZSB1c2UgdGhlIHRlcm0gImxlYWYKZnVuY3Rpb24iIHRvIG1lYW4gYSBmdW5jdGlvbiB0aGF0IGlzIHN1aXRhYmxlIGZvciB0aGlzIHNwZWNpYWwgaGFuZGxpbmcsCnNvIHRoYXQgZnVuY3Rpb25zIHdpdGggbm8gY2FsbHMgYXJlIG5vdCBuZWNlc3NhcmlseSAibGVhZiBmdW5jdGlvbnMiLgoKIEdDQyBhc3NpZ25zIHJlZ2lzdGVyIG51bWJlcnMgYmVmb3JlIGl0IGtub3dzIHdoZXRoZXIgdGhlIGZ1bmN0aW9uIGlzCnN1aXRhYmxlIGZvciBsZWFmIGZ1bmN0aW9uIHRyZWF0bWVudC4gIFNvIGl0IG5lZWRzIHRvIHJlbnVtYmVyIHRoZQpyZWdpc3RlcnMgaW4gb3JkZXIgdG8gb3V0cHV0IGEgbGVhZiBmdW5jdGlvbi4gIFRoZSBmb2xsb3dpbmcgbWFjcm9zCmFjY29tcGxpc2ggdGhpcy4KCiAtLSBNYWNybzogTEVBRl9SRUdJU1RFUlMKICAgICBOYW1lIG9mIGEgY2hhciB2ZWN0b3IsIGluZGV4ZWQgYnkgaGFyZCByZWdpc3RlciBudW1iZXIsIHdoaWNoCiAgICAgY29udGFpbnMgMSBmb3IgYSByZWdpc3RlciB0aGF0IGlzIGFsbG93YWJsZSBpbiBhIGNhbmRpZGF0ZSBmb3IgbGVhZgogICAgIGZ1bmN0aW9uIHRyZWF0bWVudC4KCiAgICAgSWYgbGVhZiBmdW5jdGlvbiB0cmVhdG1lbnQgaW52b2x2ZXMgcmVudW1iZXJpbmcgdGhlIHJlZ2lzdGVycywgdGhlbgogICAgIHRoZSByZWdpc3RlcnMgbWFya2VkIGhlcmUgc2hvdWxkIGJlIHRoZSBvbmVzIGJlZm9yZQogICAgIHJlbnVtYmVyaW5nLS10aG9zZSB0aGF0IEdDQyB3b3VsZCBvcmRpbmFyaWx5IGFsbG9jYXRlLiAgVGhlCiAgICAgcmVnaXN0ZXJzIHdoaWNoIHdpbGwgYWN0dWFsbHkgYmUgdXNlZCBpbiB0aGUgYXNzZW1ibGVyIGNvZGUsIGFmdGVyCiAgICAgcmVudW1iZXJpbmcsIHNob3VsZCBub3QgYmUgbWFya2VkIHdpdGggMSBpbiB0aGlzIHZlY3Rvci4KCiAgICAgRGVmaW5lIHRoaXMgbWFjcm8gb25seSBpZiB0aGUgdGFyZ2V0IG1hY2hpbmUgb2ZmZXJzIGEgd2F5IHRvCiAgICAgb3B0aW1pemUgdGhlIHRyZWF0bWVudCBvZiBsZWFmIGZ1bmN0aW9ucy4KCiAtLSBNYWNybzogTEVBRl9SRUdfUkVNQVAgKFJFR05PKQogICAgIEEgQyBleHByZXNzaW9uIHdob3NlIHZhbHVlIGlzIHRoZSByZWdpc3RlciBudW1iZXIgdG8gd2hpY2ggUkVHTk8KICAgICBzaG91bGQgYmUgcmVudW1iZXJlZCwgd2hlbiBhIGZ1bmN0aW9uIGlzIHRyZWF0ZWQgYXMgYSBsZWFmCiAgICAgZnVuY3Rpb24uCgogICAgIElmIFJFR05PIGlzIGEgcmVnaXN0ZXIgbnVtYmVyIHdoaWNoIHNob3VsZCBub3QgYXBwZWFyIGluIGEgbGVhZgogICAgIGZ1bmN0aW9uIGJlZm9yZSByZW51bWJlcmluZywgdGhlbiB0aGUgZXhwcmVzc2lvbiBzaG91bGQgeWllbGQgLTEsCiAgICAgd2hpY2ggd2lsbCBjYXVzZSB0aGUgY29tcGlsZXIgdG8gYWJvcnQuCgogICAgIERlZmluZSB0aGlzIG1hY3JvIG9ubHkgaWYgdGhlIHRhcmdldCBtYWNoaW5lIG9mZmVycyBhIHdheSB0bwogICAgIG9wdGltaXplIHRoZSB0cmVhdG1lbnQgb2YgbGVhZiBmdW5jdGlvbnMsIGFuZCByZWdpc3RlcnMgbmVlZCB0byBiZQogICAgIHJlbnVtYmVyZWQgdG8gZG8gdGhpcy4KCiAnVEFSR0VUX0FTTV9GVU5DVElPTl9QUk9MT0dVRScgYW5kICdUQVJHRVRfQVNNX0ZVTkNUSU9OX0VQSUxPR1VFJyBtdXN0CnVzdWFsbHkgdHJlYXQgbGVhZiBmdW5jdGlvbnMgc3BlY2lhbGx5LiAgVGhleSBjYW4gdGVzdCB0aGUgQyB2YXJpYWJsZQonY3VycmVudF9mdW5jdGlvbl9pc19sZWFmJyB3aGljaCBpcyBub256ZXJvIGZvciBsZWFmIGZ1bmN0aW9ucy4KJ2N1cnJlbnRfZnVuY3Rpb25faXNfbGVhZicgaXMgc2V0IHByaW9yIHRvIGxvY2FsIHJlZ2lzdGVyIGFsbG9jYXRpb24gYW5kCmlzIHZhbGlkIGZvciB0aGUgcmVtYWluaW5nIGNvbXBpbGVyIHBhc3Nlcy4gIFRoZXkgY2FuIGFsc28gdGVzdCB0aGUgQwp2YXJpYWJsZSAnY3VycmVudF9mdW5jdGlvbl91c2VzX29ubHlfbGVhZl9yZWdzJyB3aGljaCBpcyBub256ZXJvIGZvcgpsZWFmIGZ1bmN0aW9ucyB3aGljaCBvbmx5IHVzZSBsZWFmIHJlZ2lzdGVycy4KJ2N1cnJlbnRfZnVuY3Rpb25fdXNlc19vbmx5X2xlYWZfcmVncycgaXMgdmFsaWQgYWZ0ZXIgYWxsIHBhc3NlcyB0aGF0Cm1vZGlmeSB0aGUgaW5zdHJ1Y3Rpb25zIGhhdmUgYmVlbiBydW4gYW5kIGlzIG9ubHkgdXNlZnVsIGlmCidMRUFGX1JFR0lTVEVSUycgaXMgZGVmaW5lZC4KCh8KRmlsZTogZ2NjaW50LmluZm8sICBOb2RlOiBTdGFjayBSZWdpc3RlcnMsICBQcmV2OiBMZWFmIEZ1bmN0aW9ucywgIFVwOiBSZWdpc3RlcnMKCjE1LjcuNSBSZWdpc3RlcnMgVGhhdCBGb3JtIGEgU3RhY2sKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKVGhlcmUgYXJlIHNwZWNpYWwgZmVhdHVyZXMgdG8gaGFuZGxlIGNvbXB1dGVycyB3aGVyZSBzb21lIG9mIHRoZQoicmVnaXN0ZXJzIiBmb3JtIGEgc3RhY2suICBTdGFjayByZWdpc3RlcnMgYXJlIG5vcm1hbGx5IHdyaXR0ZW4gYnkKcHVzaGluZyBvbnRvIHRoZSBzdGFjaywgYW5kIGFyZSBudW1iZXJlZCByZWxhdGl2ZSB0byB0aGUgdG9wIG9mIHRoZQpzdGFjay4KCiBDdXJyZW50bHksIEdDQyBjYW4gb25seSBoYW5kbGUgb25lIGdyb3VwIG9mIHN0YWNrLWxpa2UgcmVnaXN0ZXJzLCBhbmQKdGhleSBtdXN0IGJlIGNvbnNlY3V0aXZlbHkgbnVtYmVyZWQuICBGdXJ0aGVybW9yZSwgdGhlIGV4aXN0aW5nIHN1cHBvcnQKZm9yIHN0YWNrLWxpa2UgcmVnaXN0ZXJzIGlzIHNwZWNpZmljIHRvIHRoZSA4MDM4NyBmbG9hdGluZyBwb2ludApjb3Byb2Nlc3Nvci4gIElmIHlvdSBoYXZlIGEgbmV3IGFyY2hpdGVjdHVyZSB0aGF0IHVzZXMgc3RhY2stbGlrZQpyZWdpc3RlcnMsIHlvdSB3aWxsIG5lZWQgdG8gZG8gc3Vic3RhbnRpYWwgd29yayBvbiAncmVnLXN0YWNrLmMnIGFuZAp3cml0ZSB5b3VyIG1hY2hpbmUgZGVzY3JpcHRpb24gdG8gY29vcGVyYXRlIHdpdGggaXQsIGFzIHdlbGwgYXMgZGVmaW5pbmcKdGhlc2UgbWFjcm9zLgoKIC0tIE1hY3JvOiBTVEFDS19SRUdTCiAgICAgRGVmaW5lIHRoaXMgaWYgdGhlIG1hY2hpbmUgaGFzIGFueSBzdGFjay1saWtlIHJlZ2lzdGVycy4KCiAtLSBNYWNybzogRklSU1RfU1RBQ0tfUkVHCiAgICAgVGhlIG51bWJlciBvZiB0aGUgZmlyc3Qgc3RhY2stbGlrZSByZWdpc3Rlci4gIFRoaXMgb25lIGlzIHRoZSB0b3AKICAgICBvZiB0aGUgc3RhY2suCgogLS0gTWFjcm86IExBU1RfU1RBQ0tfUkVHCiAgICAgVGhlIG51bWJlciBvZiB0aGUgbGFzdCBzdGFjay1saWtlIHJlZ2lzdGVyLiAgVGhpcyBvbmUgaXMgdGhlIGJvdHRvbQogICAgIG9mIHRoZSBzdGFjay4KCh8KRmlsZTogZ2NjaW50LmluZm8sICBOb2RlOiBSZWdpc3RlciBDbGFzc2VzLCAgTmV4dDogT2xkIENvbnN0cmFpbnRzLCAgUHJldjogUmVnaXN0ZXJzLCAgVXA6IFRhcmdldCBNYWNyb3MKCjE1LjggUmVnaXN0ZXIgQ2xhc3Nlcwo9PT09PT09PT09PT09PT09PT09PT0KCk9uIG1hbnkgbWFjaGluZXMsIHRoZSBudW1iZXJlZCByZWdpc3RlcnMgYXJlIG5vdCBhbGwgZXF1aXZhbGVudC4gIEZvcgpleGFtcGxlLCBjZXJ0YWluIHJlZ2lzdGVycyBtYXkgbm90IGJlIGFsbG93ZWQgZm9yIGluZGV4ZWQgYWRkcmVzc2luZzsKY2VydGFpbiByZWdpc3RlcnMgbWF5IG5vdCBiZSBhbGxvd2VkIGluIHNvbWUgaW5zdHJ1Y3Rpb25zLiAgVGhlc2UKbWFjaGluZSByZXN0cmljdGlvbnMgYXJlIGRlc2NyaWJlZCB0byB0aGUgY29tcGlsZXIgdXNpbmcgInJlZ2lzdGVyCmNsYXNzZXMiLgoKIFlvdSBkZWZpbmUgYSBudW1iZXIgb2YgcmVnaXN0ZXIgY2xhc3NlcywgZ2l2aW5nIGVhY2ggb25lIGEgbmFtZSBhbmQKc2F5aW5nIHdoaWNoIG9mIHRoZSByZWdpc3RlcnMgYmVsb25nIHRvIGl0LiAgVGhlbiB5b3UgY2FuIHNwZWNpZnkKcmVnaXN0ZXIgY2xhc3NlcyB0aGF0IGFyZSBhbGxvd2VkIGFzIG9wZXJhbmRzIHRvIHBhcnRpY3VsYXIgaW5zdHJ1Y3Rpb24KcGF0dGVybnMuCgogSW4gZ2VuZXJhbCwgZWFjaCByZWdpc3RlciB3aWxsIGJlbG9uZyB0byBzZXZlcmFsIGNsYXNzZXMuICBJbiBmYWN0LCBvbmUKY2xhc3MgbXVzdCBiZSBuYW1lZCAnQUxMX1JFR1MnIGFuZCBjb250YWluIGFsbCB0aGUgcmVnaXN0ZXJzLiAgQW5vdGhlcgpjbGFzcyBtdXN0IGJlIG5hbWVkICdOT19SRUdTJyBhbmQgY29udGFpbiBubyByZWdpc3RlcnMuICBPZnRlbiB0aGUgdW5pb24Kb2YgdHdvIGNsYXNzZXMgd2lsbCBiZSBhbm90aGVyIGNsYXNzOyBob3dldmVyLCB0aGlzIGlzIG5vdCByZXF1aXJlZC4KCiBPbmUgb2YgdGhlIGNsYXNzZXMgbXVzdCBiZSBuYW1lZCAnR0VORVJBTF9SRUdTJy4gIFRoZXJlIGlzIG5vdGhpbmcKdGVycmlibHkgc3BlY2lhbCBhYm91dCB0aGUgbmFtZSwgYnV0IHRoZSBvcGVyYW5kIGNvbnN0cmFpbnQgbGV0dGVycyAncicKYW5kICdnJyBzcGVjaWZ5IHRoaXMgY2xhc3MuICBJZiAnR0VORVJBTF9SRUdTJyBpcyB0aGUgc2FtZSBhcwonQUxMX1JFR1MnLCBqdXN0IGRlZmluZSBpdCBhcyBhIG1hY3JvIHdoaWNoIGV4cGFuZHMgdG8gJ0FMTF9SRUdTJy4KCiBPcmRlciB0aGUgY2xhc3NlcyBzbyB0aGF0IGlmIGNsYXNzIFggaXMgY29udGFpbmVkIGluIGNsYXNzIFkgdGhlbiBYIGhhcwphIGxvd2VyIGNsYXNzIG51bWJlciB0aGFuIFkuCgogVGhlIHdheSBjbGFzc2VzIG90aGVyIHRoYW4gJ0dFTkVSQUxfUkVHUycgYXJlIHNwZWNpZmllZCBpbiBvcGVyYW5kCmNvbnN0cmFpbnRzIGlzIHRocm91Z2ggbWFjaGluZS1kZXBlbmRlbnQgb3BlcmFuZCBjb25zdHJhaW50IGxldHRlcnMuCllvdSBjYW4gZGVmaW5lIHN1Y2ggbGV0dGVycyB0byBjb3JyZXNwb25kIHRvIHZhcmlvdXMgY2xhc3NlcywgdGhlbiB1c2UKdGhlbSBpbiBvcGVyYW5kIGNvbnN0cmFpbnRzLgoKIFlvdSBzaG91bGQgZGVmaW5lIGEgY2xhc3MgZm9yIHRoZSB1bmlvbiBvZiB0d28gY2xhc3NlcyB3aGVuZXZlciBzb21lCmluc3RydWN0aW9uIGFsbG93cyBib3RoIGNsYXNzZXMuICBGb3IgZXhhbXBsZSwgaWYgYW4gaW5zdHJ1Y3Rpb24gYWxsb3dzCmVpdGhlciBhIGZsb2F0aW5nIHBvaW50IChjb3Byb2Nlc3NvcikgcmVnaXN0ZXIgb3IgYSBnZW5lcmFsIHJlZ2lzdGVyIGZvcgphIGNlcnRhaW4gb3BlcmFuZCwgeW91IHNob3VsZCBkZWZpbmUgYSBjbGFzcyAnRkxPQVRfT1JfR0VORVJBTF9SRUdTJwp3aGljaCBpbmNsdWRlcyBib3RoIG9mIHRoZW0uICBPdGhlcndpc2UgeW91IHdpbGwgZ2V0IHN1Ym9wdGltYWwgY29kZS4KCiBZb3UgbXVzdCBhbHNvIHNwZWNpZnkgY2VydGFpbiByZWR1bmRhbnQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHJlZ2lzdGVyCmNsYXNzZXM6IGZvciBlYWNoIGNsYXNzLCB3aGljaCBjbGFzc2VzIGNvbnRhaW4gaXQgYW5kIHdoaWNoIG9uZXMgYXJlCmNvbnRhaW5lZCBpbiBpdDsgZm9yIGVhY2ggcGFpciBvZiBjbGFzc2VzLCB0aGUgbGFyZ2VzdCBjbGFzcyBjb250YWluZWQKaW4gdGhlaXIgdW5pb24uCgogV2hlbiBhIHZhbHVlIG9jY3VweWluZyBzZXZlcmFsIGNvbnNlY3V0aXZlIHJlZ2lzdGVycyBpcyBleHBlY3RlZCBpbiBhCmNlcnRhaW4gY2xhc3MsIGFsbCB0aGUgcmVnaXN0ZXJzIHVzZWQgbXVzdCBiZWxvbmcgdG8gdGhhdCBjbGFzcy4KVGhlcmVmb3JlLCByZWdpc3RlciBjbGFzc2VzIGNhbm5vdCBiZSB1c2VkIHRvIGVuZm9yY2UgYSByZXF1aXJlbWVudCBmb3IKYSByZWdpc3RlciBwYWlyIHRvIHN0YXJ0IHdpdGggYW4gZXZlbi1udW1iZXJlZCByZWdpc3Rlci4gIFRoZSB3YXkgdG8Kc3BlY2lmeSB0aGlzIHJlcXVpcmVtZW50IGlzIHdpdGggJ0hBUkRfUkVHTk9fTU9ERV9PSycuCgogUmVnaXN0ZXIgY2xhc3NlcyB1c2VkIGZvciBpbnB1dC1vcGVyYW5kcyBvZiBiaXR3aXNlLWFuZCBvciBzaGlmdAppbnN0cnVjdGlvbnMgaGF2ZSBhIHNwZWNpYWwgcmVxdWlyZW1lbnQ6IGVhY2ggc3VjaCBjbGFzcyBtdXN0IGhhdmUsIGZvcgplYWNoIGZpeGVkLXBvaW50IG1hY2hpbmUgbW9kZSwgYSBzdWJjbGFzcyB3aG9zZSByZWdpc3RlcnMgY2FuIHRyYW5zZmVyCnRoYXQgbW9kZSB0byBvciBmcm9tIG1lbW9yeS4gIEZvciBleGFtcGxlLCBvbiBzb21lIG1hY2hpbmVzLCB0aGUKb3BlcmF0aW9ucyBmb3Igc2luZ2xlLWJ5dGUgdmFsdWVzICgnUUltb2RlJykgYXJlIGxpbWl0ZWQgdG8gY2VydGFpbgpyZWdpc3RlcnMuICBXaGVuIHRoaXMgaXMgc28sIGVhY2ggcmVnaXN0ZXIgY2xhc3MgdGhhdCBpcyB1c2VkIGluIGEKYml0d2lzZS1hbmQgb3Igc2hpZnQgaW5zdHJ1Y3Rpb24gbXVzdCBoYXZlIGEgc3ViY2xhc3MgY29uc2lzdGluZyBvZgpyZWdpc3RlcnMgZnJvbSB3aGljaCBzaW5nbGUtYnl0ZSB2YWx1ZXMgY2FuIGJlIGxvYWRlZCBvciBzdG9yZWQuICBUaGlzCmlzIHNvIHRoYXQgJ1BSRUZFUlJFRF9SRUxPQURfQ0xBU1MnIGNhbiBhbHdheXMgaGF2ZSBhIHBvc3NpYmxlIHZhbHVlIHRvCnJldHVybi4KCiAtLSBEYXRhIHR5cGU6IGVudW0gcmVnX2NsYXNzCiAgICAgQW4gZW51bWVyYXRlZCB0eXBlIHRoYXQgbXVzdCBiZSBkZWZpbmVkIHdpdGggYWxsIHRoZSByZWdpc3RlciBjbGFzcwogICAgIG5hbWVzIGFzIGVudW1lcmF0ZWQgdmFsdWVzLiAgJ05PX1JFR1MnIG11c3QgYmUgZmlyc3QuICAnQUxMX1JFR1MnCiAgICAgbXVzdCBiZSB0aGUgbGFzdCByZWdpc3RlciBjbGFzcywgZm9sbG93ZWQgYnkgb25lIG1vcmUgZW51bWVyYXRlZAogICAgIHZhbHVlLCAnTElNX1JFR19DTEFTU0VTJywgd2hpY2ggaXMgbm90IGEgcmVnaXN0ZXIgY2xhc3MgYnV0IHJhdGhlcgogICAgIHRlbGxzIGhvdyBtYW55IGNsYXNzZXMgdGhlcmUgYXJlLgoKICAgICBFYWNoIHJlZ2lzdGVyIGNsYXNzIGhhcyBhIG51bWJlciwgd2hpY2ggaXMgdGhlIHZhbHVlIG9mIGNhc3RpbmcgdGhlCiAgICAgY2xhc3MgbmFtZSB0byB0eXBlICdpbnQnLiAgVGhlIG51bWJlciBzZXJ2ZXMgYXMgYW4gaW5kZXggaW4gbWFueSBvZgogICAgIHRoZSB0YWJsZXMgZGVzY3JpYmVkIGJlbG93LgoKIC0tIE1hY3JvOiBOX1JFR19DTEFTU0VTCiAgICAgVGhlIG51bWJlciBvZiBkaXN0aW5jdCByZWdpc3RlciBjbGFzc2VzLCBkZWZpbmVkIGFzIGZvbGxvd3M6CgogICAgICAgICAgI2RlZmluZSBOX1JFR19DTEFTU0VTIChpbnQpIExJTV9SRUdfQ0xBU1NFUwoKIC0tIE1hY3JvOiBSRUdfQ0xBU1NfTkFNRVMKICAgICBBbiBpbml0aWFsaXplciBjb250YWluaW5nIHRoZSBuYW1lcyBvZiB0aGUgcmVnaXN0ZXIgY2xhc3NlcyBhcyBDCiAgICAgc3RyaW5nIGNvbnN0YW50cy4gIFRoZXNlIG5hbWVzIGFyZSB1c2VkIGluIHdyaXRpbmcgc29tZSBvZiB0aGUKICAgICBkZWJ1Z2dpbmcgZHVtcHMuCgogLS0gTWFjcm86IFJFR19DTEFTU19DT05URU5UUwogICAgIEFuIGluaXRpYWxpemVyIGNvbnRhaW5pbmcgdGhlIGNvbnRlbnRzIG9mIHRoZSByZWdpc3RlciBjbGFzc2VzLCBhcwogICAgIGludGVnZXJzIHdoaWNoIGFyZSBiaXQgbWFza3MuICBUaGUgTnRoIGludGVnZXIgc3BlY2lmaWVzIHRoZQogICAgIGNvbnRlbnRzIG9mIGNsYXNzIE4uICBUaGUgd2F5IHRoZSBpbnRlZ2VyIE1BU0sgaXMgaW50ZXJwcmV0ZWQgaXMKICAgICB0aGF0IHJlZ2lzdGVyIFIgaXMgaW4gdGhlIGNsYXNzIGlmICdNQVNLICYgKDEgPDwgUiknIGlzIDEuCgogICAgIFdoZW4gdGhlIG1hY2hpbmUgaGFzIG1vcmUgdGhhbiAzMiByZWdpc3RlcnMsIGFuIGludGVnZXIgZG9lcyBub3QKICAgICBzdWZmaWNlLiAgVGhlbiB0aGUgaW50ZWdlcnMgYXJlIHJlcGxhY2VkIGJ5IHN1Yi1pbml0aWFsaXplcnMsCiAgICAgYnJhY2VkIGdyb3VwaW5ncyBjb250YWluaW5nIHNldmVyYWwgaW50ZWdlcnMuICBFYWNoIHN1Yi1pbml0aWFsaXplcgogICAgIG11c3QgYmUgc3VpdGFibGUgYXMgYW4gaW5pdGlhbGl6ZXIgZm9yIHRoZSB0eXBlICdIQVJEX1JFR19TRVQnCiAgICAgd2hpY2ggaXMgZGVmaW5lZCBpbiAnaGFyZC1yZWctc2V0LmgnLiAgSW4gdGhpcyBzaXR1YXRpb24sIHRoZSBmaXJzdAogICAgIGludGVnZXIgaW4gZWFjaCBzdWItaW5pdGlhbGl6ZXIgY29ycmVzcG9uZHMgdG8gcmVnaXN0ZXJzIDAgdGhyb3VnaAogICAgIDMxLCB0aGUgc2Vjb25kIGludGVnZXIgdG8gcmVnaXN0ZXJzIDMyIHRocm91Z2ggNjMsIGFuZCBzbyBvbi4KCiAtLSBNYWNybzogUkVHTk9fUkVHX0NMQVNTIChSRUdOTykKICAgICBBIEMgZXhwcmVzc2lvbiB3aG9zZSB2YWx1ZSBpcyBhIHJlZ2lzdGVyIGNsYXNzIGNvbnRhaW5pbmcgaGFyZAogICAgIHJlZ2lzdGVyIFJFR05PLiAgSW4gZ2VuZXJhbCB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIHN1Y2ggY2xhc3M7CiAgICAgY2hvb3NlIGEgY2xhc3Mgd2hpY2ggaXMgIm1pbmltYWwiLCBtZWFuaW5nIHRoYXQgbm8gc21hbGxlciBjbGFzcwogICAgIGFsc28gY29udGFpbnMgdGhlIHJlZ2lzdGVyLgoKIC0tIE1hY3JvOiBCQVNFX1JFR19DTEFTUwogICAgIEEgbWFjcm8gd2hvc2UgZGVmaW5pdGlvbiBpcyB0aGUgbmFtZSBvZiB0aGUgY2xhc3MgdG8gd2hpY2ggYSB2YWxpZAogICAgIGJhc2UgcmVnaXN0ZXIgbXVzdCBiZWxvbmcuICBBIGJhc2UgcmVnaXN0ZXIgaXMgb25lIHVzZWQgaW4gYW4KICAgICBhZGRyZXNzIHdoaWNoIGlzIHRoZSByZWdpc3RlciB2YWx1ZSBwbHVzIGEgZGlzcGxhY2VtZW50LgoKIC0tIE1hY3JvOiBNT0RFX0JBU0VfUkVHX0NMQVNTIChNT0RFKQogICAgIFRoaXMgaXMgYSB2YXJpYXRpb24gb2YgdGhlICdCQVNFX1JFR19DTEFTUycgbWFjcm8gd2hpY2ggYWxsb3dzIHRoZQogICAgIHNlbGVjdGlvbiBvZiBhIGJhc2UgcmVnaXN0ZXIgaW4gYSBtb2RlIGRlcGVuZGVudCBtYW5uZXIuICBJZiBNT0RFCiAgICAgaXMgVk9JRG1vZGUgdGhlbiBpdCBzaG91bGQgcmV0dXJuIHRoZSBzYW1lIHZhbHVlIGFzCiAgICAgJ0JBU0VfUkVHX0NMQVNTJy4KCiAtLSBNYWNybzogTU9ERV9CQVNFX1JFR19SRUdfQ0xBU1MgKE1PREUpCiAgICAgQSBDIGV4cHJlc3Npb24gd2hvc2UgdmFsdWUgaXMgdGhlIHJlZ2lzdGVyIGNsYXNzIHRvIHdoaWNoIGEgdmFsaWQKICAgICBiYXNlIHJlZ2lzdGVyIG11c3QgYmVsb25nIGluIG9yZGVyIHRvIGJlIHVzZWQgaW4gYSBiYXNlIHBsdXMgaW5kZXgKICAgICByZWdpc3RlciBhZGRyZXNzLiAgWW91IHNob3VsZCBkZWZpbmUgdGhpcyBtYWNybyBpZiBiYXNlIHBsdXMgaW5kZXgKICAgICBhZGRyZXNzZXMgaGF2ZSBkaWZmZXJlbnQgcmVxdWlyZW1lbnRzIHRoYW4gb3RoZXIgYmFzZSByZWdpc3RlcgogICAgIHVzZXMuCgogLS0gTWFjcm86IE1PREVfQ09ERV9CQVNFX1JFR19DTEFTUyAoTU9ERSwgT1VURVJfQ09ERSwgSU5ERVhfQ09ERSkKICAgICBBIEMgZXhwcmVzc2lvbiB3aG9zZSB2YWx1ZSBpcyB0aGUgcmVnaXN0ZXIgY2xhc3MgdG8gd2hpY2ggYSB2YWxpZAogICAgIGJhc2UgcmVnaXN0ZXIgbXVzdCBiZWxvbmcuICBPVVRFUl9DT0RFIGFuZCBJTkRFWF9DT0RFIGRlZmluZSB0aGUKICAgICBjb250ZXh0IGluIHdoaWNoIHRoZSBiYXNlIHJlZ2lzdGVyIG9jY3Vycy4gIE9VVEVSX0NPREUgaXMgdGhlIGNvZGUKICAgICBvZiB0aGUgaW1tZWRpYXRlbHkgZW5jbG9zaW5nIGV4cHJlc3Npb24gKCdNRU0nIGZvciB0aGUgdG9wIGxldmVsIG9mCiAgICAgYW4gYWRkcmVzcywgJ0FERFJFU1MnIGZvciBzb21ldGhpbmcgdGhhdCBvY2N1cnMgaW4gYW4KICAgICAnYWRkcmVzc19vcGVyYW5kJykuICBJTkRFWF9DT0RFIGlzIHRoZSBjb2RlIG9mIHRoZSBjb3JyZXNwb25kaW5nCiAgICAgaW5kZXggZXhwcmVzc2lvbiBpZiBPVVRFUl9DT0RFIGlzICdQTFVTJzsgJ1NDUkFUQ0gnIG90aGVyd2lzZS4KCiAtLSBNYWNybzogSU5ERVhfUkVHX0NMQVNTCiAgICAgQSBtYWNybyB3aG9zZSBkZWZpbml0aW9uIGlzIHRoZSBuYW1lIG9mIHRoZSBjbGFzcyB0byB3aGljaCBhIHZhbGlkCiAgICAgaW5kZXggcmVnaXN0ZXIgbXVzdCBiZWxvbmcuICBBbiBpbmRleCByZWdpc3RlciBpcyBvbmUgdXNlZCBpbiBhbgogICAgIGFkZHJlc3Mgd2hlcmUgaXRzIHZhbHVlIGlzIGVpdGhlciBtdWx0aXBsaWVkIGJ5IGEgc2NhbGUgZmFjdG9yIG9yCiAgICAgYWRkZWQgdG8gYW5vdGhlciByZWdpc3RlciAoYXMgd2VsbCBhcyBhZGRlZCB0byBhIGRpc3BsYWNlbWVudCkuCgogLS0gTWFjcm86IFJFR05PX09LX0ZPUl9CQVNFX1AgKE5VTSkKICAgICBBIEMgZXhwcmVzc2lvbiB3aGljaCBpcyBub256ZXJvIGlmIHJlZ2lzdGVyIG51bWJlciBOVU0gaXMgc3VpdGFibGUKICAgICBmb3IgdXNlIGFzIGEgYmFzZSByZWdpc3RlciBpbiBvcGVyYW5kIGFkZHJlc3Nlcy4gIEl0IG1heSBiZSBlaXRoZXIKICAgICBhIHN1aXRhYmxlIGhhcmQgcmVnaXN0ZXIgb3IgYSBwc2V1ZG8gcmVnaXN0ZXIgdGhhdCBoYXMgYmVlbgogICAgIGFsbG9jYXRlZCBzdWNoIGEgaGFyZCByZWdpc3Rlci4KCiAtLSBNYWNybzogUkVHTk9fTU9ERV9PS19GT1JfQkFTRV9QIChOVU0sIE1PREUpCiAgICAgQSBDIGV4cHJlc3Npb24gdGhhdCBpcyBqdXN0IGxpa2UgJ1JFR05PX09LX0ZPUl9CQVNFX1AnLCBleGNlcHQgdGhhdAogICAgIHRoYXQgZXhwcmVzc2lvbiBtYXkgZXhhbWluZSB0aGUgbW9kZSBvZiB0aGUgbWVtb3J5IHJlZmVyZW5jZSBpbgogICAgIE1PREUuICBZb3Ugc2hvdWxkIGRlZmluZSB0aGlzIG1hY3JvIGlmIHRoZSBtb2RlIG9mIHRoZSBtZW1vcnkKICAgICByZWZlcmVuY2UgYWZmZWN0cyB3aGV0aGVyIGEgcmVnaXN0ZXIgbWF5IGJlIHVzZWQgYXMgYSBiYXNlCiAgICAgcmVnaXN0ZXIuICBJZiB5b3UgZGVmaW5lIHRoaXMgbWFjcm8sIHRoZSBjb21waWxlciB3aWxsIHVzZSBpdAogICAgIGluc3RlYWQgb2YgJ1JFR05PX09LX0ZPUl9CQVNFX1AnLiAgVGhlIG1vZGUgbWF5IGJlICdWT0lEbW9kZScgZm9yCiAgICAgYWRkcmVzc2VzIHRoYXQgYXBwZWFyIG91dHNpZGUgYSAnTUVNJywgaS5lLiwgYXMgYW4KICAgICAnYWRkcmVzc19vcGVyYW5kJy4KCiAtLSBNYWNybzogUkVHTk9fTU9ERV9PS19GT1JfUkVHX0JBU0VfUCAoTlVNLCBNT0RFKQogICAgIEEgQyBleHByZXNzaW9uIHdoaWNoIGlzIG5vbnplcm8gaWYgcmVnaXN0ZXIgbnVtYmVyIE5VTSBpcyBzdWl0YWJsZQogICAgIGZvciB1c2UgYXMgYSBiYXNlIHJlZ2lzdGVyIGluIGJhc2UgcGx1cyBpbmRleCBvcGVyYW5kIGFkZHJlc3NlcywKICAgICBhY2Nlc3NpbmcgbWVtb3J5IGluIG1vZGUgTU9ERS4gIEl0IG1heSBiZSBlaXRoZXIgYSBzdWl0YWJsZSBoYXJkCiAgICAgcmVnaXN0ZXIgb3IgYSBwc2V1ZG8gcmVnaXN0ZXIgdGhhdCBoYXMgYmVlbiBhbGxvY2F0ZWQgc3VjaCBhIGhhcmQKICAgICByZWdpc3Rlci4gIFlvdSBzaG91bGQgZGVmaW5lIHRoaXMgbWFjcm8gaWYgYmFzZSBwbHVzIGluZGV4CiAgICAgYWRkcmVzc2VzIGhhdmUgZGlmZmVyZW50IHJlcXVpcmVtZW50cyB0aGFuIG90aGVyIGJhc2UgcmVnaXN0ZXIKICAgICB1c2VzLgoKICAgICBVc2Ugb2YgdGhpcyBtYWNybyBpcyBkZXByZWNhdGVkOyBwbGVhc2UgdXNlIHRoZSBtb3JlIGdlbmVyYWwKICAgICAnUkVHTk9fTU9ERV9DT0RFX09LX0ZPUl9CQVNFX1AnLgoKIC0tIE1hY3JvOiBSRUdOT19NT0RFX0NPREVfT0tfRk9SX0JBU0VfUCAoTlVNLCBNT0RFLCBPVVRFUl9DT0RFLAogICAgICAgICAgSU5ERVhfQ09ERSkKICAgICBBIEMgZXhwcmVzc2lvbiB0aGF0IGlzIGp1c3QgbGlrZSAnUkVHTk9fTU9ERV9PS19GT1JfQkFTRV9QJywgZXhjZXB0CiAgICAgdGhhdCB0aGF0IGV4cHJlc3Npb24gbWF5IGV4YW1pbmUgdGhlIGNvbnRleHQgaW4gd2hpY2ggdGhlIHJlZ2lzdGVyCiAgICAgYXBwZWFycyBpbiB0aGUgbWVtb3J5IHJlZmVyZW5jZS4gIE9VVEVSX0NPREUgaXMgdGhlIGNvZGUgb2YgdGhlCiAgICAgaW1tZWRpYXRlbHkgZW5jbG9zaW5nIGV4cHJlc3Npb24gKCdNRU0nIGlmIGF0IHRoZSB0b3AgbGV2ZWwgb2YgdGhlCiAgICAgYWRkcmVzcywgJ0FERFJFU1MnIGZvciBzb21ldGhpbmcgdGhhdCBvY2N1cnMgaW4gYW4KICAgICAnYWRkcmVzc19vcGVyYW5kJykuICBJTkRFWF9DT0RFIGlzIHRoZSBjb2RlIG9mIHRoZSBjb3JyZXNwb25kaW5nCiAgICAgaW5kZXggZXhwcmVzc2lvbiBpZiBPVVRFUl9DT0RFIGlzICdQTFVTJzsgJ1NDUkFUQ0gnIG90aGVyd2lzZS4gIFRoZQogICAgIG1vZGUgbWF5IGJlICdWT0lEbW9kZScgZm9yIGFkZHJlc3NlcyB0aGF0IGFwcGVhciBvdXRzaWRlIGEgJ01FTScsCiAgICAgaS5lLiwgYXMgYW4gJ2FkZHJlc3Nfb3BlcmFuZCcuCgogLS0gTWFjcm86IFJFR05PX09LX0ZPUl9JTkRFWF9QIChOVU0pCiAgICAgQSBDIGV4cHJlc3Npb24gd2hpY2ggaXMgbm9uemVybyBpZiByZWdpc3RlciBudW1iZXIgTlVNIGlzIHN1aXRhYmxlCiAgICAgZm9yIHVzZSBhcyBhbiBpbmRleCByZWdpc3RlciBpbiBvcGVyYW5kIGFkZHJlc3Nlcy4gIEl0IG1heSBiZQogICAgIGVpdGhlciBhIHN1aXRhYmxlIGhhcmQgcmVnaXN0ZXIgb3IgYSBwc2V1ZG8gcmVnaXN0ZXIgdGhhdCBoYXMgYmVlbgogICAgIGFsbG9jYXRlZCBzdWNoIGEgaGFyZCByZWdpc3Rlci4KCiAgICAgVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBhbiBpbmRleCByZWdpc3RlciBhbmQgYSBiYXNlIHJlZ2lzdGVyIGlzCiAgICAgdGhhdCB0aGUgaW5kZXggcmVnaXN0ZXIgbWF5IGJlIHNjYWxlZC4gIElmIGFuIGFkZHJlc3MgaW52b2x2ZXMgdGhlCiAgICAgc3VtIG9mIHR3byByZWdpc3RlcnMsIG5laXRoZXIgb25lIG9mIHRoZW0gc2NhbGVkLCB0aGVuIGVpdGhlciBvbmUKICAgICBtYXkgYmUgbGFiZWxlZCB0aGUgImJhc2UiIGFuZCB0aGUgb3RoZXIgdGhlICJpbmRleCI7IGJ1dCB3aGljaGV2ZXIKICAgICBsYWJlbGluZyBpcyB1c2VkIG11c3QgZml0IHRoZSBtYWNoaW5lJ3MgY29uc3RyYWludHMgb2Ygd2hpY2gKICAgICByZWdpc3RlcnMgbWF5IHNlcnZlIGluIGVhY2ggY2FwYWNpdHkuICBUaGUgY29tcGlsZXIgd2lsbCB0cnkgYm90aAogICAgIGxhYmVsaW5ncywgbG9va2luZyBmb3Igb25lIHRoYXQgaXMgdmFsaWQsIGFuZCB3aWxsIHJlbG9hZCBvbmUgb3IKICAgICBib3RoIHJlZ2lzdGVycyBvbmx5IGlmIG5laXRoZXIgbGFiZWxpbmcgd29ya3MuCgogLS0gTWFjcm86IFBSRUZFUlJFRF9SRUxPQURfQ0xBU1MgKFgsIENMQVNTKQogICAgIEEgQyBleHByZXNzaW9uIHRoYXQgcGxhY2VzIGFkZGl0aW9uYWwgcmVzdHJpY3Rpb25zIG9uIHRoZSByZWdpc3RlcgogICAgIGNsYXNzIHRvIHVzZSB3aGVuIGl0IGlzIG5lY2Vzc2FyeSB0byBjb3B5IHZhbHVlIFggaW50byBhIHJlZ2lzdGVyCiAgICAgaW4gY2xhc3MgQ0xBU1MuICBUaGUgdmFsdWUgaXMgYSByZWdpc3RlciBjbGFzczsgcGVyaGFwcyBDTEFTUywgb3IKICAgICBwZXJoYXBzIGFub3RoZXIsIHNtYWxsZXIgY2xhc3MuICBPbiBtYW55IG1hY2hpbmVzLCB0aGUgZm9sbG93aW5nCiAgICAgZGVmaW5pdGlvbiBpcyBzYWZlOgoKICAgICAgICAgICNkZWZpbmUgUFJFRkVSUkVEX1JFTE9BRF9DTEFTUyhYLENMQVNTKSBDTEFTUwoKICAgICBTb21ldGltZXMgcmV0dXJuaW5nIGEgbW9yZSByZXN0cmljdGl2ZSBjbGFzcyBtYWtlcyBiZXR0ZXIgY29kZS4KICAgICBGb3IgZXhhbXBsZSwgb24gdGhlIDY4MDAwLCB3aGVuIFggaXMgYW4gaW50ZWdlciBjb25zdGFudCB0aGF0IGlzIGluCiAgICAgcmFuZ2UgZm9yIGEgJ21vdmVxJyBpbnN0cnVjdGlvbiwgdGhlIHZhbHVlIG9mIHRoaXMgbWFjcm8gaXMgYWx3YXlzCiAgICAgJ0RBVEFfUkVHUycgYXMgbG9uZyBhcyBDTEFTUyBpbmNsdWRlcyB0aGUgZGF0YSByZWdpc3RlcnMuCiAgICAgUmVxdWlyaW5nIGEgZGF0YSByZWdpc3RlciBndWFyYW50ZWVzIHRoYXQgYSAnbW92ZXEnIHdpbGwgYmUgdXNlZC4KCiAgICAgT25lIGNhc2Ugd2hlcmUgJ1BSRUZFUlJFRF9SRUxPQURfQ0xBU1MnIG11c3Qgbm90IHJldHVybiBDTEFTUyBpcyBpZgogICAgIFggaXMgYSBsZWdpdGltYXRlIGNvbnN0YW50IHdoaWNoIGNhbm5vdCBiZSBsb2FkZWQgaW50byBzb21lCiAgICAgcmVnaXN0ZXIgY2xhc3MuICBCeSByZXR1cm5pbmcgJ05PX1JFR1MnIHlvdSBjYW4gZm9yY2UgWCBpbnRvIGEKICAgICBtZW1vcnkgbG9jYXRpb24uICBGb3IgZXhhbXBsZSwgcnM2MDAwIGNhbiBsb2FkIGltbWVkaWF0ZSB2YWx1ZXMKICAgICBpbnRvIGdlbmVyYWwtcHVycG9zZSByZWdpc3RlcnMsIGJ1dCBkb2VzIG5vdCBoYXZlIGFuIGluc3RydWN0aW9uCiAgICAgZm9yIGxvYWRpbmcgYW4gaW1tZWRpYXRlIHZhbHVlIGludG8gYSBmbG9hdGluZy1wb2ludCByZWdpc3Rlciwgc28KICAgICAnUFJFRkVSUkVEX1JFTE9BRF9DTEFTUycgcmV0dXJucyAnTk9fUkVHUycgd2hlbiBYIGlzIGEKICAgICBmbG9hdGluZy1wb2ludCBjb25zdGFudC4gIElmIHRoZSBjb25zdGFudCBjYW4ndCBiZSBsb2FkZWQgaW50byBhbnkKICAgICBraW5kIG9mIHJlZ2lzdGVyLCBjb2RlIGdlbmVyYXRpb24gd2lsbCBiZSBiZXR0ZXIgaWYKICAgICAnTEVHSVRJTUFURV9DT05TVEFOVF9QJyBtYWtlcyB0aGUgY29uc3RhbnQgaWxsZWdpdGltYXRlIGluc3RlYWQgb2YKICAgICB1c2luZyAnUFJFRkVSUkVEX1JFTE9BRF9DTEFTUycuCgogICAgIElmIGFuIGluc24gaGFzIHBzZXVkb3MgaW4gaXQgYWZ0ZXIgcmVnaXN0ZXIgYWxsb2NhdGlvbiwgcmVsb2FkIHdpbGwKICAgICBnbyB0aHJvdWdoIHRoZSBhbHRlcm5hdGl2ZXMgYW5kIGNhbGwgcmVwZWF0ZWRseQogICAgICdQUkVGRVJSRURfUkVMT0FEX0NMQVNTJyB0byBmaW5kIHRoZSBiZXN0IG9uZS4gIFJldHVybmluZwogICAgICdOT19SRUdTJywgaW4gdGhpcyBjYXNlLCBtYWtlcyByZWxvYWQgYWRkIGEgJyEnIGluIGZyb250IG9mIHRoZQogICAgIGNvbnN0cmFpbnQ6IHRoZSB4ODYgYmFjay1lbmQgdXNlcyB0aGlzIGZlYXR1cmUgdG8gZGlzY291cmFnZSB1c2FnZQogICAgIG9mIDM4NyByZWdpc3RlcnMgd2hlbiBtYXRoIGlzIGRvbmUgaW4gdGhlIFNTRSByZWdpc3RlcnMgKGFuZCB2aWNlCiAgICAgdmVyc2EpLgoKIC0tIE1hY3JvOiBQUkVGRVJSRURfT1VUUFVUX1JFTE9BRF9DTEFTUyAoWCwgQ0xBU1MpCiAgICAgTGlrZSAnUFJFRkVSUkVEX1JFTE9BRF9DTEFTUycsIGJ1dCBmb3Igb3V0cHV0IHJlbG9hZHMgaW5zdGVhZCBvZgogICAgIGlucHV0IHJlbG9hZHMuICBJZiB5b3UgZG9uJ3QgZGVmaW5lIHRoaXMgbWFjcm8sIHRoZSBkZWZhdWx0IGlzIHRvCiAgICAgdXNlIENMQVNTLCB1bmNoYW5nZWQuCgogICAgIFlvdSBjYW4gYWxzbyB1c2UgJ1BSRUZFUlJFRF9PVVRQVVRfUkVMT0FEX0NMQVNTJyB0byBkaXNjb3VyYWdlCiAgICAgcmVsb2FkIGZyb20gdXNpbmcgc29tZSBhbHRlcm5hdGl2ZXMsIGxpa2UgJ1BSRUZFUlJFRF9SRUxPQURfQ0xBU1MnLgoKIC0tIE1hY3JvOiBMSU1JVF9SRUxPQURfQ0xBU1MgKE1PREUsIENMQVNTKQogICAgIEEgQyBleHByZXNzaW9uIHRoYXQgcGxhY2VzIGFkZGl0aW9uYWwgcmVzdHJpY3Rpb25zIG9uIHRoZSByZWdpc3RlcgogICAgIGNsYXNzIHRvIHVzZSB3aGVuIGl0IGlzIG5lY2Vzc2FyeSB0byBiZSBhYmxlIHRvIGhvbGQgYSB2YWx1ZSBvZgogICAgIG1vZGUgTU9ERSBpbiBhIHJlbG9hZCByZWdpc3RlciBmb3Igd2hpY2ggY2xhc3MgQ0xBU1Mgd291bGQKICAgICBvcmRpbmFyaWx5IGJlIHVzZWQuCgogICAgIFVubGlrZSAnUFJFRkVSUkVEX1JFTE9BRF9DTEFTUycsIHRoaXMgbWFjcm8gc2hvdWxkIGJlIHVzZWQgd2hlbgogICAgIHRoZXJlIGFyZSBjZXJ0YWluIG1vZGVzIHRoYXQgc2ltcGx5IGNhbid0IGdvIGluIGNlcnRhaW4gcmVsb2FkCiAgICAgY2xhc3Nlcy4KCiAgICAgVGhlIHZhbHVlIGlzIGEgcmVnaXN0ZXIgY2xhc3M7IHBlcmhhcHMgQ0xBU1MsIG9yIHBlcmhhcHMgYW5vdGhlciwKICAgICBzbWFsbGVyIGNsYXNzLgoKICAgICBEb24ndCBkZWZpbmUgdGhpcyBtYWNybyB1bmxlc3MgdGhlIHRhcmdldCBtYWNoaW5lIGhhcyBsaW1pdGF0aW9ucwogICAgIHdoaWNoIHJlcXVpcmUgdGhlIG1hY3JvIHRvIGRvIHNvbWV0aGluZyBub250cml2aWFsLgoKIC0tIFRhcmdldCBIb29rOiBlbnVtIHJlZ19jbGFzcyBUQVJHRVRfU0VDT05EQVJZX1JFTE9BRCAoYm9vbCBJTl9QLCBydHgKICAgICAgICAgIFgsIGVudW0gcmVnX2NsYXNzIFJFTE9BRF9DTEFTUywgZW51bSBtYWNoaW5lX21vZGUgUkVMT0FEX01PREUsCiAgICAgICAgICBzZWNvbmRhcnlfcmVsb2FkX2luZm8gKlNSSSkKICAgICBNYW55IG1hY2hpbmVzIGhhdmUgc29tZSByZWdpc3RlcnMgdGhhdCBjYW5ub3QgYmUgY29waWVkIGRpcmVjdGx5IHRvCiAgICAgb3IgZnJvbSBtZW1vcnkgb3IgZXZlbiBmcm9tIG90aGVyIHR5cGVzIG9mIHJlZ2lzdGVycy4gIEFuIGV4YW1wbGUKICAgICBpcyB0aGUgJ01RJyByZWdpc3Rlciwgd2hpY2ggb24gbW9zdCBtYWNoaW5lcywgY2FuIG9ubHkgYmUgY29waWVkIHRvCiAgICAgb3IgZnJvbSBnZW5lcmFsIHJlZ2lzdGVycywgYnV0IG5vdCBtZW1vcnkuICBCZWxvdywgd2Ugc2hhbGwgYmUKICAgICB1c2luZyB0aGUgdGVybSAnaW50ZXJtZWRpYXRlIHJlZ2lzdGVyJyB3aGVuIGEgbW92ZSBvcGVyYXRpb24gY2Fubm90CiAgICAgYmUgcGVyZm9ybWVkIGRpcmVjdGx5LCBidXQgaGFzIHRvIGJlIGRvbmUgYnkgY29weWluZyB0aGUgc291cmNlCiAgICAgaW50byB0aGUgaW50ZXJtZWRpYXRlIHJlZ2lzdGVyIGZpcnN0LCBhbmQgdGhlbiBjb3B5aW5nIHRoZQogICAgIGludGVybWVkaWF0ZSByZWdpc3RlciB0byB0aGUgZGVzdGluYXRpb24uICBBbiBpbnRlcm1lZGlhdGUgcmVnaXN0ZXIKICAgICBhbHdheXMgaGFzIHRoZSBzYW1lIG1vZGUgYXMgc291cmNlIGFuZCBkZXN0aW5hdGlvbi4gIFNpbmNlIGl0IGhvbGRzCiAgICAgdGhlIGFjdHVhbCB2YWx1ZSBiZWluZyBjb3BpZWQsIHJlbG9hZCBtaWdodCBhcHBseSBvcHRpbWl6YXRpb25zIHRvCiAgICAgcmUtdXNlIGFuIGludGVybWVkaWF0ZSByZWdpc3RlciBhbmQgZWxpZGluZyB0aGUgY29weSBmcm9tIHRoZQogICAgIHNvdXJjZSB3aGVuIGl0IGNhbiBkZXRlcm1pbmUgdGhhdCB0aGUgaW50ZXJtZWRpYXRlIHJlZ2lzdGVyIHN0aWxsCiAgICAgaG9sZHMgdGhlIHJlcXVpcmVkIHZhbHVlLgoKICAgICBBbm90aGVyIGtpbmQgb2Ygc2Vjb25kYXJ5IHJlbG9hZCBpcyByZXF1aXJlZCBvbiBzb21lIG1hY2hpbmVzIHdoaWNoCiAgICAgYWxsb3cgY29weWluZyBhbGwgcmVnaXN0ZXJzIHRvIGFuZCBmcm9tIG1lbW9yeSwgYnV0IHJlcXVpcmUgYQogICAgIHNjcmF0Y2ggcmVnaXN0ZXIgZm9yIHN0b3JlcyB0byBzb21lIG1lbW9yeSBsb2NhdGlvbnMgKGUuZy4sIHRob3NlCiAgICAgd2l0aCBzeW1ib2xpYyBhZGRyZXNzIG9uIHRoZSBSVCwgYW5kIHRob3NlIHdpdGggY2VydGFpbiBzeW1ib2xpYwogICAgIGFkZHJlc3Mgb24gdGhlIFNQQVJDIHdoZW4gY29tcGlsaW5nIFBJQykuICBTY3JhdGNoIHJlZ2lzdGVycyBuZWVkCiAgICAgbm90IGhhdmUgdGhlIHNhbWUgbW9kZSBhcyB0aGUgdmFsdWUgYmVpbmcgY29waWVkLCBhbmQgdXN1YWxseSBob2xkCiAgICAgYSBkaWZmZXJlbnQgdmFsdWUgdGhhdCB0aGF0IGJlaW5nIGNvcGllZC4gIFNwZWNpYWwgcGF0dGVybnMgaW4gdGhlCiAgICAgbWQgZmlsZSBhcmUgbmVlZGVkIHRvIGRlc2NyaWJlIGhvdyB0aGUgY29weSBpcyBwZXJmb3JtZWQgd2l0aCB0aGUKICAgICBoZWxwIG9mIHRoZSBzY3JhdGNoIHJlZ2lzdGVyOyB0aGVzZSBwYXR0ZXJucyBhbHNvIGRlc2NyaWJlIHRoZQogICAgIG51bWJlciwgcmVnaXN0ZXIgY2xhc3MoZXMpIGFuZCBtb2RlKHMpIG9mIHRoZSBzY3JhdGNoIHJlZ2lzdGVyKHMpLgoKICAgICBJbiBzb21lIGNhc2VzLCBib3RoIGFuIGludGVybWVkaWF0ZSBhbmQgYSBzY3JhdGNoIHJlZ2lzdGVyIGFyZQogICAgIHJlcXVpcmVkLgoKICAgICBGb3IgaW5wdXQgcmVsb2FkcywgdGhpcyB0YXJnZXQgaG9vayBpcyBjYWxsZWQgd2l0aCBub256ZXJvIElOX1AsCiAgICAgYW5kIFggaXMgYW4gcnR4IHRoYXQgbmVlZHMgdG8gYmUgY29waWVkIHRvIGEgcmVnaXN0ZXIgb2YgY2xhc3MKICAgICBSRUxPQURfQ0xBU1MgaW4gUkVMT0FEX01PREUuICBGb3Igb3V0cHV0IHJlbG9hZHMsIHRoaXMgdGFyZ2V0IGhvb2sKICAgICBpcyBjYWxsZWQgd2l0aCB6ZXJvIElOX1AsIGFuZCBhIHJlZ2lzdGVyIG9mIGNsYXNzIFJFTE9BRF9DTEFTUwogICAgIG5lZWRzIHRvIGJlIGNvcGllZCB0byBydHggWCBpbiBSRUxPQURfTU9ERS4KCiAgICAgSWYgY29weWluZyBhIHJlZ2lzdGVyIG9mIFJFTE9BRF9DTEFTUyBmcm9tL3RvIFggcmVxdWlyZXMgYW4KICAgICBpbnRlcm1lZGlhdGUgcmVnaXN0ZXIsIHRoZSBob29rICdzZWNvbmRhcnlfcmVsb2FkJyBzaG91bGQgcmV0dXJuCiAgICAgdGhlIHJlZ2lzdGVyIGNsYXNzIHJlcXVpcmVkIGZvciB0aGlzIGludGVybWVkaWF0ZSByZWdpc3Rlci4gIElmIG5vCiAgICAgaW50ZXJtZWRpYXRlIHJlZ2lzdGVyIGlzIHJlcXVpcmVkLCBpdCBzaG91bGQgcmV0dXJuIE5PX1JFR1MuIElmCiAgICAgbW9yZSB0aGFuIG9uZSBpbnRlcm1lZGlhdGUgcmVnaXN0ZXIgaXMgcmVxdWlyZWQsIGRlc2NyaWJlIHRoZSBvbmUKICAgICB0aGF0IGlzIGNsb3Nlc3QgaW4gdGhlIGNvcHkgY2hhaW4gdG8gdGhlIHJlbG9hZCByZWdpc3Rlci4KCiAgICAgSWYgc2NyYXRjaCByZWdpc3RlcnMgYXJlIG5lZWRlZCwgeW91IGFsc28gaGF2ZSB0byBkZXNjcmliZSBob3cgdG8KICAgICBwZXJmb3JtIHRoZSBjb3B5IGZyb20vdG8gdGhlIHJlbG9hZCByZWdpc3RlciB0by9mcm9tIHRoaXMgY2xvc2VzdAogICAgIGludGVybWVkaWF0ZSByZWdpc3Rlci4gIE9yIGlmIG5vIGludGVybWVkaWF0ZSByZWdpc3RlciBpcyByZXF1aXJlZCwKICAgICBidXQgc3RpbGwgYSBzY3JhdGNoIHJlZ2lzdGVyIGlzIG5lZWRlZCwgZGVzY3JpYmUgdGhlIGNvcHkgZnJvbS90bwogICAgIHRoZSByZWxvYWQgcmVnaXN0ZXIgdG8vZnJvbSB0aGUgcmVsb2FkIG9wZXJhbmQgWC4KCiAgICAgWW91IGRvIHRoaXMgYnkgc2V0dGluZyAnc3JpLT5pY29kZScgdG8gdGhlIGluc3RydWN0aW9uIGNvZGUgb2YgYQogICAgIHBhdHRlcm4gaW4gdGhlIG1kIGZpbGUgd2hpY2ggcGVyZm9ybXMgdGhlIG1vdmUuICBPcGVyYW5kcyAwIGFuZCAxCiAgICAgYXJlIHRoZSBvdXRwdXQgYW5kIGlucHV0IG9mIHRoaXMgY29weSwgcmVzcGVjdGl2ZWx5LiAgT3BlcmFuZHMgZnJvbQogICAgIG9wZXJhbmQgMiBvbndhcmQgYXJlIGZvciBzY3JhdGNoIG9wZXJhbmRzLiAgVGhlc2Ugc2NyYXRjaCBvcGVyYW5kcwogICAgIG11c3QgaGF2ZSBhIG1vZGUsIGFuZCBhIHNpbmdsZS1yZWdpc3Rlci1jbGFzcyBvdXRwdXQgY29uc3RyYWludC4KCiAgICAgV2hlbiBhbiBpbnRlcm1lZGlhdGUgcmVnaXN0ZXIgaXMgdXNlZCwgdGhlICdzZWNvbmRhcnlfcmVsb2FkJyBob29rCiAgICAgd2lsbCBiZSBjYWxsZWQgYWdhaW4gdG8gZGV0ZXJtaW5lIGhvdyB0byBjb3B5IHRoZSBpbnRlcm1lZGlhdGUKICAgICByZWdpc3RlciB0by9mcm9tIHRoZSByZWxvYWQgb3BlcmFuZCBYLCBzbyB5b3VyIGhvb2sgbXVzdCBhbHNvIGhhdmUKICAgICBjb2RlIHRvIGhhbmRsZSB0aGUgcmVnaXN0ZXIgY2xhc3Mgb2YgdGhlIGludGVybWVkaWF0ZSBvcGVyYW5kLgoKICAgICBYIG1pZ2h0IGJlIGEgcHNldWRvLXJlZ2lzdGVyIG9yIGEgJ3N1YnJlZycgb2YgYSBwc2V1ZG8tcmVnaXN0ZXIsCiAgICAgd2hpY2ggY291bGQgZWl0aGVyIGJlIGluIGEgaGFyZCByZWdpc3RlciBvciBpbiBtZW1vcnkuICBVc2UKICAgICAndHJ1ZV9yZWdudW0nIHRvIGZpbmQgb3V0OyBpdCB3aWxsIHJldHVybiAtMSBpZiB0aGUgcHNldWRvIGlzIGluCiAgICAgbWVtb3J5IGFuZCB0aGUgaGFyZCByZWdpc3RlciBudW1iZXIgaWYgaXQgaXMgaW4gYSByZWdpc3Rlci4KCiAgICAgU2NyYXRjaCBvcGVyYW5kcyBpbiBtZW1vcnkgKGNvbnN0cmFpbnQgJyI9bSInIC8gJyI9Jm0iJykgYXJlCiAgICAgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQuICBGb3IgdGhlIHRpbWUgYmVpbmcsIHlvdSB3aWxsIGhhdmUgdG8KICAgICBjb250aW51ZSB0byB1c2UgJ1NFQ09OREFSWV9NRU1PUllfTkVFREVEJyBmb3IgdGhhdCBwdXJwb3NlLgoKICAgICAnY29weV9jb3N0JyBhbHNvIHVzZXMgdGhpcyB0YXJnZXQgaG9vayB0byBmaW5kIG91dCBob3cgdmFsdWVzIGFyZQogICAgIGNvcGllZC4gIElmIHlvdSB3YW50IGl0IHRvIGluY2x1ZGUgc29tZSBleHRyYSBjb3N0IGZvciB0aGUgbmVlZCB0bwogICAgIGFsbG9jYXRlIChhKSBzY3JhdGNoIHJlZ2lzdGVyKHMpLCBzZXQgJ3NyaS0+ZXh0cmFfY29zdCcgdG8gdGhlCiAgICAgYWRkaXRpb25hbCBjb3N0LiAgT3IgaWYgdHdvIGRlcGVuZGVudCBtb3ZlcyBhcmUgc3VwcG9zZWQgdG8gaGF2ZSBhCiAgICAgbG93ZXIgY29zdCB0aGFuIHRoZSBzdW0gb2YgdGhlIGluZGl2aWR1YWwgbW92ZXMgZHVlIHRvIGV4cGVjdGVkCiAgICAgZm9ydHVpdG91cyBzY2hlZHVsaW5nIGFuZC9vciBzcGVjaWFsIGZvcndhcmRpbmcgbG9naWMsIHlvdSBjYW4gc2V0CiAgICAgJ3NyaS0+ZXh0cmFfY29zdCcgdG8gYSBuZWdhdGl2ZSBhbW91bnQuCgogLS0gTWFjcm86IFNFQ09OREFSWV9SRUxPQURfQ0xBU1MgKENMQVNTLCBNT0RFLCBYKQogLS0gTWFjcm86IFNFQ09OREFSWV9JTlBVVF9SRUxPQURfQ0xBU1MgKENMQVNTLCBNT0RFLCBYKQogLS0gTWFjcm86IFNFQ09OREFSWV9PVVRQVVRfUkVMT0FEX0NMQVNTIChDTEFTUywgTU9ERSwgWCkKICAgICBUaGVzZSBtYWNyb3MgYXJlIG9ic29sZXRlLCBuZXcgcG9ydHMgc2hvdWxkIHVzZSB0aGUgdGFyZ2V0IGhvb2sKICAgICAnVEFSR0VUX1NFQ09OREFSWV9SRUxPQUQnIGluc3RlYWQuCgogICAgIFRoZXNlIGFyZSBvYnNvbGV0ZSBtYWNyb3MsIHJlcGxhY2VkIGJ5IHRoZQogICAgICdUQVJHRVRfU0VDT05EQVJZX1JFTE9BRCcgdGFyZ2V0IGhvb2suICBPbGRlciBwb3J0cyBzdGlsbCBkZWZpbmUKICAgICB0aGVzZSBtYWNyb3MgdG8gaW5kaWNhdGUgdG8gdGhlIHJlbG9hZCBwaGFzZSB0aGF0IGl0IG1heSBuZWVkIHRvCiAgICAgYWxsb2NhdGUgYXQgbGVhc3Qgb25lIHJlZ2lzdGVyIGZvciBhIHJlbG9hZCBpbiBhZGRpdGlvbiB0byB0aGUKICAgICByZWdpc3RlciB0byBjb250YWluIHRoZSBkYXRhLiAgU3BlY2lmaWNhbGx5LCBpZiBjb3B5aW5nIFggdG8gYQogICAgIHJlZ2lzdGVyIENMQVNTIGluIE1PREUgcmVxdWlyZXMgYW4gaW50ZXJtZWRpYXRlIHJlZ2lzdGVyLCB5b3Ugd2VyZQogICAgIHN1cHBvc2VkIHRvIGRlZmluZSAnU0VDT05EQVJZX0lOUFVUX1JFTE9BRF9DTEFTUycgdG8gcmV0dXJuIHRoZQogICAgIGxhcmdlc3QgcmVnaXN0ZXIgY2xhc3MgYWxsIG9mIHdob3NlIHJlZ2lzdGVycyBjYW4gYmUgdXNlZCBhcwogICAgIGludGVybWVkaWF0ZSByZWdpc3RlcnMgb3Igc2NyYXRjaCByZWdpc3RlcnMuCgogICAgIElmIGNvcHlpbmcgYSByZWdpc3RlciBDTEFTUyBpbiBNT0RFIHRvIFggcmVxdWlyZXMgYW4gaW50ZXJtZWRpYXRlCiAgICAgb3Igc2NyYXRjaCByZWdpc3RlciwgJ1NFQ09OREFSWV9PVVRQVVRfUkVMT0FEX0NMQVNTJyB3YXMgc3VwcG9zZWQKICAgICB0byBiZSBkZWZpbmVkIGJlIGRlZmluZWQgdG8gcmV0dXJuIHRoZSBsYXJnZXN0IHJlZ2lzdGVyIGNsYXNzCiAgICAgcmVxdWlyZWQuICBJZiB0aGUgcmVxdWlyZW1lbnRzIGZvciBpbnB1dCBhbmQgb3V0cHV0IHJlbG9hZHMgd2VyZQogICAgIHRoZSBzYW1lLCB0aGUgbWFjcm8gJ1NFQ09OREFSWV9SRUxPQURfQ0xBU1MnIHNob3VsZCBoYXZlIGJlZW4gdXNlZAogICAgIGluc3RlYWQgb2YgZGVmaW5pbmcgYm90aCBtYWNyb3MgaWRlbnRpY2FsbHkuCgogICAgIFRoZSB2YWx1ZXMgcmV0dXJuZWQgYnkgdGhlc2UgbWFjcm9zIGFyZSBvZnRlbiAnR0VORVJBTF9SRUdTJy4KICAgICBSZXR1cm4gJ05PX1JFR1MnIGlmIG5vIHNwYXJlIHJlZ2lzdGVyIGlzIG5lZWRlZDsgaS5lLiwgaWYgWCBjYW4gYmUKICAgICBkaXJlY3RseSBjb3BpZWQgdG8gb3IgZnJvbSBhIHJlZ2lzdGVyIG9mIENMQVNTIGluIE1PREUgd2l0aG91dAogICAgIHJlcXVpcmluZyBhIHNjcmF0Y2ggcmVnaXN0ZXIuICBEbyBub3QgZGVmaW5lIHRoaXMgbWFjcm8gaWYgaXQgd291bGQKICAgICBhbHdheXMgcmV0dXJuICdOT19SRUdTJy4KCiAgICAgSWYgYSBzY3JhdGNoIHJlZ2lzdGVyIGlzIHJlcXVpcmVkIChlaXRoZXIgd2l0aCBvciB3aXRob3V0IGFuCiAgICAgaW50ZXJtZWRpYXRlIHJlZ2lzdGVyKSwgeW91IHdlcmUgc3VwcG9zZWQgdG8gZGVmaW5lIHBhdHRlcm5zIGZvcgogICAgICdyZWxvYWRfaW5NJyBvciAncmVsb2FkX291dE0nLCBhcyByZXF1aXJlZCAoKm5vdGUgU3RhbmRhcmQgTmFtZXM6Oi4KICAgICBUaGVzZSBwYXR0ZXJucywgd2hpY2ggd2VyZSBub3JtYWxseSBpbXBsZW1lbnRlZCB3aXRoIGEKICAgICAnZGVmaW5lX2V4cGFuZCcsIHNob3VsZCBiZSBzaW1pbGFyIHRvIHRoZSAnbW92TScgcGF0dGVybnMsIGV4Y2VwdAogICAgIHRoYXQgb3BlcmFuZCAyIGlzIHRoZSBzY3JhdGNoIHJlZ2lzdGVyLgoKICAgICBUaGVzZSBwYXR0ZXJucyBuZWVkIGNvbnN0cmFpbnRzIGZvciB0aGUgcmVsb2FkIHJlZ2lzdGVyIGFuZCBzY3JhdGNoCiAgICAgcmVnaXN0ZXIgdGhhdCBjb250YWluIGEgc2luZ2xlIHJlZ2lzdGVyIGNsYXNzLiAgSWYgdGhlIG9yaWdpbmFsCiAgICAgcmVsb2FkIHJlZ2lzdGVyICh3aG9zZSBjbGFzcyBpcyBDTEFTUykgY2FuIG1lZXQgdGhlIGNvbnN0cmFpbnQKICAgICBnaXZlbiBpbiB0aGUgcGF0dGVybiwgdGhlIHZhbHVlIHJldHVybmVkIGJ5IHRoZXNlIG1hY3JvcyBpcyB1c2VkCiAgICAgZm9yIHRoZSBjbGFzcyBvZiB0aGUgc2NyYXRjaCByZWdpc3Rlci4gIE90aGVyd2lzZSwgdHdvIGFkZGl0aW9uYWwKICAgICByZWxvYWQgcmVnaXN0ZXJzIGFyZSByZXF1aXJlZC4gIFRoZWlyIGNsYXNzZXMgYXJlIG9idGFpbmVkIGZyb20gdGhlCiAgICAgY29uc3RyYWludHMgaW4gdGhlIGluc24gcGF0dGVybi4KCiAgICAgWCBtaWdodCBiZSBhIHBzZXVkby1yZWdpc3RlciBvciBhICdzdWJyZWcnIG9mIGEgcHNldWRvLXJlZ2lzdGVyLAogICAgIHdoaWNoIGNvdWxkIGVpdGhlciBiZSBpbiBhIGhhcmQgcmVnaXN0ZXIgb3IgaW4gbWVtb3J5LiAgVXNlCiAgICAgJ3RydWVfcmVnbnVtJyB0byBmaW5kIG91dDsgaXQgd2lsbCByZXR1cm4gLTEgaWYgdGhlIHBzZXVkbyBpcyBpbgogICAgIG1lbW9yeSBhbmQgdGhlIGhhcmQgcmVnaXN0ZXIgbnVtYmVyIGlmIGl0IGlzIGluIGEgcmVnaXN0ZXIuCgogICAgIFRoZXNlIG1hY3JvcyBzaG91bGQgbm90IGJlIHVzZWQgaW4gdGhlIGNhc2Ugd2hlcmUgYSBwYXJ0aWN1bGFyCiAgICAgY2xhc3Mgb2YgcmVnaXN0ZXJzIGNhbiBvbmx5IGJlIGNvcGllZCB0byBtZW1vcnkgYW5kIG5vdCB0byBhbm90aGVyCiAgICAgY2xhc3Mgb2YgcmVnaXN0ZXJzLiAgSW4gdGhhdCBjYXNlLCBzZWNvbmRhcnkgcmVsb2FkIHJlZ2lzdGVycyBhcmUKICAgICBub3QgbmVlZGVkIGFuZCB3b3VsZCBub3QgYmUgaGVscGZ1bC4gIEluc3RlYWQsIGEgc3RhY2sgbG9jYXRpb24KICAgICBtdXN0IGJlIHVzZWQgdG8gcGVyZm9ybSB0aGUgY29weSBhbmQgdGhlICdtb3ZNJyBwYXR0ZXJuIHNob3VsZCB1c2UKICAgICBtZW1vcnkgYXMgYW4gaW50ZXJtZWRpYXRlIHN0b3JhZ2UuICBUaGlzIGNhc2Ugb2Z0ZW4gb2NjdXJzIGJldHdlZW4KICAgICBmbG9hdGluZy1wb2ludCBhbmQgZ2VuZXJhbCByZWdpc3RlcnMuCgogLS0gTWFjcm86IFNFQ09OREFSWV9NRU1PUllfTkVFREVEIChDTEFTUzEsIENMQVNTMiwgTSkKICAgICBDZXJ0YWluIG1hY2hpbmVzIGhhdmUgdGhlIHByb3BlcnR5IHRoYXQgc29tZSByZWdpc3RlcnMgY2Fubm90IGJlCiAgICAgY29waWVkIHRvIHNvbWUgb3RoZXIgcmVnaXN0ZXJzIHdpdGhvdXQgdXNpbmcgbWVtb3J5LiAgRGVmaW5lIHRoaXMKICAgICBtYWNybyBvbiB0aG9zZSBtYWNoaW5lcyB0byBiZSBhIEMgZXhwcmVzc2lvbiB0aGF0IGlzIG5vbnplcm8gaWYKICAgICBvYmplY3RzIG9mIG1vZGUgTSBpbiByZWdpc3RlcnMgb2YgQ0xBU1MxIGNhbiBvbmx5IGJlIGNvcGllZCB0bwogICAgIHJlZ2lzdGVycyBvZiBjbGFzcyBDTEFTUzIgYnkgc3RvcmluZyBhIHJlZ2lzdGVyIG9mIENMQVNTMSBpbnRvCiAgICAgbWVtb3J5IGFuZCBsb2FkaW5nIHRoYXQgbWVtb3J5IGxvY2F0aW9uIGludG8gYSByZWdpc3RlciBvZiBDTEFTUzIuCgogICAgIERvIG5vdCBkZWZpbmUgdGhpcyBtYWNybyBpZiBpdHMgdmFsdWUgd291bGQgYWx3YXlzIGJlIHplcm8uCgogLS0gTWFjcm86IFNFQ09OREFSWV9NRU1PUllfTkVFREVEX1JUWCAoTU9ERSkKICAgICBOb3JtYWxseSB3aGVuICdTRUNPTkRBUllfTUVNT1JZX05FRURFRCcgaXMgZGVmaW5lZCwgdGhlIGNvbXBpbGVyCiAgICAgYWxsb2NhdGVzIGEgc3RhY2sgc2xvdCBmb3IgYSBtZW1vcnkgbG9jYXRpb24gbmVlZGVkIGZvciByZWdpc3RlcgogICAgIGNvcGllcy4gIElmIHRoaXMgbWFjcm8gaXMgZGVmaW5lZCwgdGhlIGNvbXBpbGVyIGluc3RlYWQgdXNlcyB0aGUKICAgICBtZW1vcnkgbG9jYXRpb24gZGVmaW5lZCBieSB0aGlzIG1hY3JvLgoKICAgICBEbyBub3QgZGVmaW5lIHRoaXMgbWFjcm8gaWYgeW91IGRvIG5vdCBkZWZpbmUKICAgICAnU0VDT05EQVJZX01FTU9SWV9ORUVERUQnLgoKIC0tIE1hY3JvOiBTRUNPTkRBUllfTUVNT1JZX05FRURFRF9NT0RFIChNT0RFKQogICAgIFdoZW4gdGhlIGNvbXBpbGVyIG5lZWRzIGEgc2Vjb25kYXJ5IG1lbW9yeSBsb2NhdGlvbiB0byBjb3B5IGJldHdlZW4KICAgICB0d28gcmVnaXN0ZXJzIG9mIG1vZGUgTU9ERSwgaXQgbm9ybWFsbHkgYWxsb2NhdGVzIHN1ZmZpY2llbnQgbWVtb3J5CiAgICAgdG8gaG9sZCBhIHF1YW50aXR5IG9mICdCSVRTX1BFUl9XT1JEJyBiaXRzIGFuZCBwZXJmb3JtcyB0aGUgc3RvcmUKICAgICBhbmQgbG9hZCBvcGVyYXRpb25zIGluIGEgbW9kZSB0aGF0IG1hbnkgYml0cyB3aWRlIGFuZCB3aG9zZSBjbGFzcwogICAgIGlzIHRoZSBzYW1lIGFzIHRoYXQgb2YgTU9ERS4KCiAgICAgVGhpcyBpcyByaWdodCB0aGluZyB0byBkbyBvbiBtb3N0IG1hY2hpbmVzIGJlY2F1c2UgaXQgZW5zdXJlcyB0aGF0CiAgICAgYWxsIGJpdHMgb2YgdGhlIHJlZ2lzdGVyIGFyZSBjb3BpZWQgYW5kIHByZXZlbnRzIGFjY2Vzc2VzIHRvIHRoZQogICAgIHJlZ2lzdGVycyBpbiBhIG5hcnJvd2VyIG1vZGUsIHdoaWNoIHNvbWUgbWFjaGluZXMgcHJvaGliaXQgZm9yCiAgICAgZmxvYXRpbmctcG9pbnQgcmVnaXN0ZXJzLgoKICAgICBIb3dldmVyLCB0aGlzIGRlZmF1bHQgYmVoYXZpb3IgaXMgbm90IGNvcnJlY3Qgb24gc29tZSBtYWNoaW5lcywKICAgICBzdWNoIGFzIHRoZSBERUMgQWxwaGEsIHRoYXQgc3RvcmUgc2hvcnQgaW50ZWdlcnMgaW4gZmxvYXRpbmctcG9pbnQKICAgICByZWdpc3RlcnMgZGlmZmVyZW50bHkgdGhhbiBpbiBpbnRlZ2VyIHJlZ2lzdGVycy4gIE9uIHRob3NlCiAgICAgbWFjaGluZXMsIHRoZSBkZWZhdWx0IHdpZGVuaW5nIHdpbGwgbm90IHdvcmsgY29ycmVjdGx5IGFuZCB5b3UgbXVzdAogICAgIGRlZmluZSB0aGlzIG1hY3JvIHRvIHN1cHByZXNzIHRoYXQgd2lkZW5pbmcgaW4gc29tZSBjYXNlcy4gIFNlZSB0aGUKICAgICBmaWxlICdhbHBoYS5oJyBmb3IgZGV0YWlscy4KCiAgICAgRG8gbm90IGRlZmluZSB0aGlzIG1hY3JvIGlmIHlvdSBkbyBub3QgZGVmaW5lCiAgICAgJ1NFQ09OREFSWV9NRU1PUllfTkVFREVEJyBvciBpZiB3aWRlbmluZyBNT0RFIHRvIGEgbW9kZSB0aGF0IGlzCiAgICAgJ0JJVFNfUEVSX1dPUkQnIGJpdHMgd2lkZSBpcyBjb3JyZWN0IGZvciB5b3VyIG1hY2hpbmUuCgogLS0gTWFjcm86IFNNQUxMX1JFR0lTVEVSX0NMQVNTRVMKICAgICBPbiBzb21lIG1hY2hpbmVzLCBpdCBpcyByaXNreSB0byBsZXQgaGFyZCByZWdpc3RlcnMgbGl2ZSBhY3Jvc3MKICAgICBhcmJpdHJhcnkgaW5zbnMuICBUeXBpY2FsbHksIHRoZXNlIG1hY2hpbmVzIGhhdmUgaW5zdHJ1Y3Rpb25zIHRoYXQKICAgICByZXF1aXJlIHZhbHVlcyB0byBiZSBpbiBzcGVjaWZpYyByZWdpc3RlcnMgKGxpa2UgYW4gYWNjdW11bGF0b3IpLAogICAgIGFuZCByZWxvYWQgd2lsbCBmYWlsIGlmIHRoZSByZXF1aXJlZCBoYXJkIHJlZ2lzdGVyIGlzIHVzZWQgZm9yCiAgICAgYW5vdGhlciBwdXJwb3NlIGFjcm9zcyBzdWNoIGFuIGluc24uCgogICAgIERlZmluZSAnU01BTExfUkVHSVNURVJfQ0xBU1NFUycgdG8gYmUgYW4gZXhwcmVzc2lvbiB3aXRoIGEgbm9uemVybwogICAgIHZhbHVlIG9uIHRoZXNlIG1hY2hpbmVzLiAgV2hlbiB0aGlzIG1hY3JvIGhhcyBhIG5vbnplcm8gdmFsdWUsIHRoZQogICAgIGNvbXBpbGVyIHdpbGwgdHJ5IHRvIG1pbmltaXplIHRoZSBsaWZldGltZSBvZiBoYXJkIHJlZ2lzdGVycy4KCiAgICAgSXQgaXMgYWx3YXlzIHNhZmUgdG8gZGVmaW5lIHRoaXMgbWFjcm8gd2l0aCBhIG5vbnplcm8gdmFsdWUsIGJ1dCBpZgogICAgIHlvdSB1bm5lY2Vzc2FyaWx5IGRlZmluZSBpdCwgeW91IHdpbGwgcmVkdWNlIHRoZSBhbW91bnQgb2YKICAgICBvcHRpbWl6YXRpb25zIHRoYXQgY2FuIGJlIHBlcmZvcm1lZCBpbiBzb21lIGNhc2VzLiAgSWYgeW91IGRvIG5vdAogICAgIGRlZmluZSB0aGlzIG1hY3JvIHdpdGggYSBub256ZXJvIHZhbHVlIHdoZW4gaXQgaXMgcmVxdWlyZWQsIHRoZQogICAgIGNvbXBpbGVyIHdpbGwgcnVuIG91dCBvZiBzcGlsbCByZWdpc3RlcnMgYW5kIHByaW50IGEgZmF0YWwgZXJyb3IKICAgICBtZXNzYWdlLiAgRm9yIG1vc3QgbWFjaGluZXMsIHlvdSBzaG91bGQgbm90IGRlZmluZSB0aGlzIG1hY3JvIGF0CiAgICAgYWxsLgoKIC0tIE1hY3JvOiBDTEFTU19MSUtFTFlfU1BJTExFRF9QIChDTEFTUykKICAgICBBIEMgZXhwcmVzc2lvbiB3aG9zZSB2YWx1ZSBpcyBub256ZXJvIGlmIHBzZXVkb3MgdGhhdCBoYXZlIGJlZW4KICAgICBhc3NpZ25lZCB0byByZWdpc3RlcnMgb2YgY2xhc3MgQ0xBU1Mgd291bGQgbGlrZWx5IGJlIHNwaWxsZWQKICAgICBiZWNhdXNlIHJlZ2lzdGVycyBvZiBDTEFTUyBhcmUgbmVlZGVkIGZvciBzcGlsbCByZWdpc3RlcnMuCgogICAgIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoaXMgbWFjcm8gcmV0dXJucyAxIGlmIENMQVNTIGhhcyBleGFjdGx5IG9uZQogICAgIHJlZ2lzdGVyIGFuZCB6ZXJvIG90aGVyd2lzZS4gIE9uIG1vc3QgbWFjaGluZXMsIHRoaXMgZGVmYXVsdCBzaG91bGQKICAgICBiZSB1c2VkLiAgT25seSBkZWZpbmUgdGhpcyBtYWNybyB0byBzb21lIG90aGVyIGV4cHJlc3Npb24gaWYKICAgICBwc2V1ZG9zIGFsbG9jYXRlZCBieSAnbG9jYWwtYWxsb2MuYycgZW5kIHVwIGluIG1lbW9yeSBiZWNhdXNlIHRoZWlyCiAgICAgaGFyZCByZWdpc3RlcnMgd2VyZSBuZWVkZWQgZm9yIHNwaWxsIHJlZ2lzdGVycy4gIElmIHRoaXMgbWFjcm8KICAgICByZXR1cm5zIG5vbnplcm8gZm9yIHRob3NlIGNsYXNzZXMsIHRob3NlIHBzZXVkb3Mgd2lsbCBvbmx5IGJlCiAgICAgYWxsb2NhdGVkIGJ5ICdnbG9iYWwuYycsIHdoaWNoIGtub3dzIGhvdyB0byByZWFsbG9jYXRlIHRoZSBwc2V1ZG8KICAgICB0byBhbm90aGVyIHJlZ2lzdGVyLiAgSWYgdGhlcmUgd291bGQgbm90IGJlIGFub3RoZXIgcmVnaXN0ZXIKICAgICBhdmFpbGFibGUgZm9yIHJlYWxsb2NhdGlvbiwgeW91IHNob3VsZCBub3QgY2hhbmdlIHRoZSBkZWZpbml0aW9uIG9mCiAgICAgdGhpcyBtYWNybyBzaW5jZSB0aGUgb25seSBlZmZlY3Qgb2Ygc3VjaCBhIGRlZmluaXRpb24gd291bGQgYmUgdG8KICAgICBzbG93IGRvd24gcmVnaXN0ZXIgYWxsb2NhdGlvbi4KCiAtLSBNYWNybzogQ0xBU1NfTUFYX05SRUdTIChDTEFTUywgTU9ERSkKICAgICBBIEMgZXhwcmVzc2lvbiBmb3IgdGhlIG1heGltdW0gbnVtYmVyIG9mIGNvbnNlY3V0aXZlIHJlZ2lzdGVycyBvZgogICAgIGNsYXNzIENMQVNTIG5lZWRlZCB0byBob2xkIGEgdmFsdWUgb2YgbW9kZSBNT0RFLgoKICAgICBUaGlzIGlzIGNsb3NlbHkgcmVsYXRlZCB0byB0aGUgbWFjcm8gJ0hBUkRfUkVHTk9fTlJFR1MnLiAgSW4gZmFjdCwKICAgICB0aGUgdmFsdWUgb2YgdGhlIG1hY3JvICdDTEFTU19NQVhfTlJFR1MgKENMQVNTLCBNT0RFKScgc2hvdWxkIGJlCiAgICAgdGhlIG1heGltdW0gdmFsdWUgb2YgJ0hBUkRfUkVHTk9fTlJFR1MgKFJFR05PLCBNT0RFKScgZm9yIGFsbCBSRUdOTwogICAgIHZhbHVlcyBpbiB0aGUgY2xhc3MgQ0xBU1MuCgogICAgIFRoaXMgbWFjcm8gaGVscHMgY29udHJvbCB0aGUgaGFuZGxpbmcgb2YgbXVsdGlwbGUtd29yZCB2YWx1ZXMgaW4KICAgICB0aGUgcmVsb2FkIHBhc3MuCgogLS0gTWFjcm86IENBTk5PVF9DSEFOR0VfTU9ERV9DTEFTUyAoRlJPTSwgVE8sIENMQVNTKQogICAgIElmIGRlZmluZWQsIGEgQyBleHByZXNzaW9uIHRoYXQgcmV0dXJucyBub256ZXJvIGZvciBhIENMQVNTIGZvcgogICAgIHdoaWNoIGEgY2hhbmdlIGZyb20gbW9kZSBGUk9NIHRvIG1vZGUgVE8gaXMgaW52YWxpZC4KCiAgICAgRm9yIHRoZSBleGFtcGxlLCBsb2FkaW5nIDMyLWJpdCBpbnRlZ2VyIG9yIGZsb2F0aW5nLXBvaW50IG9iamVjdHMKICAgICBpbnRvIGZsb2F0aW5nLXBvaW50IHJlZ2lzdGVycyBvbiB0aGUgQWxwaGEgZXh0ZW5kcyB0aGVtIHRvIDY0IGJpdHMuCiAgICAgVGhlcmVmb3JlIGxvYWRpbmcgYSA2NC1iaXQgb2JqZWN0IGFuZCB0aGVuIHN0b3JpbmcgaXQgYXMgYSAzMi1iaXQKICAgICBvYmplY3QgZG9lcyBub3Qgc3RvcmUgdGhlIGxvdy1vcmRlciAzMiBiaXRzLCBhcyB3b3VsZCBiZSB0aGUgY2FzZQogICAgIGZvciBhIG5vcm1hbCByZWdpc3Rlci4gIFRoZXJlZm9yZSwgJ2FscGhhLmgnIGRlZmluZXMKICAgICAnQ0FOTk9UX0NIQU5HRV9NT0RFX0NMQVNTJyBhcyBiZWxvdzoKCiAgICAgICAgICAjZGVmaW5lIENBTk5PVF9DSEFOR0VfTU9ERV9DTEFTUyhGUk9NLCBUTywgQ0xBU1MpIFwKICAgICAgICAgICAgKEdFVF9NT0RFX1NJWkUgKEZST00pICE9IEdFVF9NT0RFX1NJWkUgKFRPKSBcCiAgICAgICAgICAgICA/IHJlZ19jbGFzc2VzX2ludGVyc2VjdF9wIChGTE9BVF9SRUdTLCAoQ0xBU1MpKSA6IDApCgofCkZpbGU6IGdjY2ludC5pbmZvLCAgTm9kZTogT2xkIENvbnN0cmFpbnRzLCAgTmV4dDogU3RhY2sgYW5kIENhbGxpbmcsICBQcmV2OiBSZWdpc3RlciBDbGFzc2VzLCAgVXA6IFRhcmdldCBNYWNyb3MKCjE1LjkgT2Jzb2xldGUgTWFjcm9zIGZvciBEZWZpbmluZyBDb25zdHJhaW50cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCk1hY2hpbmUtc3BlY2lmaWMgY29uc3RyYWludHMgY2FuIGJlIGRlZmluZWQgd2l0aCB0aGVzZSBtYWNyb3MgaW5zdGVhZCBvZgp0aGUgbWFjaGluZSBkZXNjcmlwdGlvbiBjb25zdHJ1Y3RzIGRlc2NyaWJlZCBpbiAqbm90ZSBEZWZpbmUKQ29uc3RyYWludHM6Oi4gIFRoaXMgbWVjaGFuaXNtIGlzIG9ic29sZXRlLiAgTmV3IHBvcnRzIHNob3VsZCBub3QgdXNlCml0OyBvbGQgcG9ydHMgc2hvdWxkIGNvbnZlcnQgdG8gdGhlIG5ldyBtZWNoYW5pc20uCgogLS0gTWFjcm86IENPTlNUUkFJTlRfTEVOIChDSEFSLCBTVFIpCiAgICAgRm9yIHRoZSBjb25zdHJhaW50IGF0IHRoZSBzdGFydCBvZiBTVFIsIHdoaWNoIHN0YXJ0cyB3aXRoIHRoZQogICAgIGxldHRlciBDLCByZXR1cm4gdGhlIGxlbmd0aC4gIFRoaXMgYWxsb3dzIHlvdSB0byBoYXZlIHJlZ2lzdGVyCiAgICAgY2xhc3MgLyBjb25zdGFudCAvIGV4dHJhIGNvbnN0cmFpbnRzIHRoYXQgYXJlIGxvbmdlciB0aGFuIGEgc2luZ2xlCiAgICAgbGV0dGVyOyB5b3UgZG9uJ3QgbmVlZCB0byBkZWZpbmUgdGhpcyBtYWNybyBpZiB5b3UgY2FuIGRvIHdpdGgKICAgICBzaW5nbGUtbGV0dGVyIGNvbnN0cmFpbnRzIG9ubHkuICBUaGUgZGVmaW5pdGlvbiBvZiB0aGlzIG1hY3JvCiAgICAgc2hvdWxkIHVzZSBERUZBVUxUX0NPTlNUUkFJTlRfTEVOIGZvciBhbGwgdGhlIGNoYXJhY3RlcnMgdGhhdCB5b3UKICAgICBkb24ndCB3YW50IHRvIGhhbmRsZSBzcGVjaWFsbHkuICBUaGVyZSBhcmUgc29tZSBzYW5pdHkgY2hlY2tzIGluCiAgICAgZ2Vub3V0cHV0LmMgdGhhdCBjaGVjayB0aGUgY29uc3RyYWludCBsZW5ndGhzIGZvciB0aGUgbWQgZmlsZSwgc28KICAgICB5b3UgY2FuIGFsc28gdXNlIHRoaXMgbWFjcm8gdG8gaGVscCB5b3Ugd2hpbGUgeW91IGFyZSB0cmFuc2l0aW9uaW5nCiAgICAgZnJvbSBhIGJ5emFudGluZSBzaW5nbGUtbGV0dGVyLWNvbnN0cmFpbnQgc2NoZW1lOiB3aGVuIHlvdSByZXR1cm4gYQogICAgIG5lZ2F0aXZlIGxlbmd0aCBmb3IgYSBjb25zdHJhaW50IHlvdSB3YW50IHRvIHJlLXVzZSwgZ2Vub3V0cHV0IHdpbGwKICAgICBjb21wbGFpbiBhYm91dCBldmVyeSBpbnN0YW5jZSB3aGVyZSBpdCBpcyB1c2VkIGluIHRoZSBtZCBmaWxlLgoKIC0tIE1hY3JvOiBSRUdfQ0xBU1NfRlJPTV9MRVRURVIgKENIQVIpCiAgICAgQSBDIGV4cHJlc3Npb24gd2hpY2ggZGVmaW5lcyB0aGUgbWFjaGluZS1kZXBlbmRlbnQgb3BlcmFuZAogICAgIGNvbnN0cmFpbnQgbGV0dGVycyBmb3IgcmVnaXN0ZXIgY2xhc3Nlcy4gIElmIENIQVIgaXMgc3VjaCBhIGxldHRlciwKICAgICB0aGUgdmFsdWUgc2hvdWxkIGJlIHRoZSByZWdpc3RlciBjbGFzcyBjb3JyZXNwb25kaW5nIHRvIGl0LgogICAgIE90aGVyd2lzZSwgdGhlIHZhbHVlIHNob3VsZCBiZSAnTk9fUkVHUycuICBUaGUgcmVnaXN0ZXIgbGV0dGVyICdyJywKICAgICBjb3JyZXNwb25kaW5nIHRvIGNsYXNzICdHRU5FUkFMX1JFR1MnLCB3aWxsIG5vdCBiZSBwYXNzZWQgdG8gdGhpcwogICAgIG1hY3JvOyB5b3UgZG8gbm90IG5lZWQgdG8gaGFuZGxlIGl0LgoKIC0tIE1hY3JvOiBSRUdfQ0xBU1NfRlJPTV9DT05TVFJBSU5UIChDSEFSLCBTVFIpCiAgICAgTGlrZSAnUkVHX0NMQVNTX0ZST01fTEVUVEVSJywgYnV0IHlvdSBhbHNvIGdldCB0aGUgY29uc3RyYWludAogICAgIHN0cmluZyBwYXNzZWQgaW4gU1RSLCBzbyB0aGF0IHlvdSBjYW4gdXNlIHN1ZmZpeGVzIHRvIGRpc3Rpbmd1aXNoCiAgICAgYmV0d2VlbiBkaWZmZXJlbnQgdmFyaWFudHMuCgogLS0gTWFjcm86IENPTlNUX09LX0ZPUl9MRVRURVJfUCAoVkFMVUUsIEMpCiAgICAgQSBDIGV4cHJlc3Npb24gdGhhdCBkZWZpbmVzIHRoZSBtYWNoaW5lLWRlcGVuZGVudCBvcGVyYW5kCiAgICAgY29uc3RyYWludCBsZXR0ZXJzICgnSScsICdKJywgJ0snLCAuLi4gJ1AnKSB0aGF0IHNwZWNpZnkgcGFydGljdWxhcgogICAgIHJhbmdlcyBvZiBpbnRlZ2VyIHZhbHVlcy4gIElmIEMgaXMgb25lIG9mIHRob3NlIGxldHRlcnMsIHRoZQogICAgIGV4cHJlc3Npb24gc2hvdWxkIGNoZWNrIHRoYXQgVkFMVUUsIGFuIGludGVnZXIsIGlzIGluIHRoZQogICAgIGFwcHJvcHJpYXRlIHJhbmdlIGFuZCByZXR1cm4gMSBpZiBzbywgMCBvdGhlcndpc2UuICBJZiBDIGlzIG5vdCBvbmUKICAgICBvZiB0aG9zZSBsZXR0ZXJzLCB0aGUgdmFsdWUgc2hvdWxkIGJlIDAgcmVnYXJkbGVzcyBvZiBWQUxVRS4KCiAtLSBNYWNybzogQ09OU1RfT0tfRk9SX0NPTlNUUkFJTlRfUCAoVkFMVUUsIEMsIFNUUikKICAgICBMaWtlICdDT05TVF9PS19GT1JfTEVUVEVSX1AnLCBidXQgeW91IGFsc28gZ2V0IHRoZSBjb25zdHJhaW50CiAgICAgc3RyaW5nIHBhc3NlZCBpbiBTVFIsIHNvIHRoYXQgeW91IGNhbiB1c2Ugc3VmZml4ZXMgdG8gZGlzdGluZ3Vpc2gKICAgICBiZXR3ZWVuIGRpZmZlcmVudCB2YXJpYW50cy4KCiAtLSBNYWNybzogQ09OU1RfRE9VQkxFX09LX0ZPUl9MRVRURVJfUCAoVkFMVUUsIEMpCiAgICAgQSBDIGV4cHJlc3Npb24gdGhhdCBkZWZpbmVzIHRoZSBtYWNoaW5lLWRlcGVuZGVudCBvcGVyYW5kCiAgICAgY29uc3RyYWludCBsZXR0ZXJzIHRoYXQgc3BlY2lmeSBwYXJ0aWN1bGFyIHJhbmdlcyBvZiAnY29uc3RfZG91YmxlJwogICAgIHZhbHVlcyAoJ0cnIG9yICdIJykuCgogICAgIElmIEMgaXMgb25lIG9mIHRob3NlIGxldHRlcnMsIHRoZSBleHByZXNzaW9uIHNob3VsZCBjaGVjayB0aGF0CiAgICAgVkFMVUUsIGFuIFJUWCBvZiBjb2RlICdjb25zdF9kb3VibGUnLCBpcyBpbiB0aGUgYXBwcm9wcmlhdGUgcmFuZ2UKICAgICBhbmQgcmV0dXJuIDEgaWYgc28sIDAgb3RoZXJ3aXNlLiAgSWYgQyBpcyBub3Qgb25lIG9mIHRob3NlIGxldHRlcnMsCiAgICAgdGhlIHZhbHVlIHNob3VsZCBiZSAwIHJlZ2FyZGxlc3Mgb2YgVkFMVUUuCgogICAgICdjb25zdF9kb3VibGUnIGlzIHVzZWQgZm9yIGFsbCBmbG9hdGluZy1wb2ludCBjb25zdGFudHMgYW5kIGZvcgogICAgICdESW1vZGUnIGZpeGVkLXBvaW50IGNvbnN0YW50cy4gIEEgZ2l2ZW4gbGV0dGVyIGNhbiBhY2NlcHQgZWl0aGVyCiAgICAgb3IgYm90aCBraW5kcyBvZiB2YWx1ZXMuICBJdCBjYW4gdXNlICdHRVRfTU9ERScgdG8gZGlzdGluZ3Vpc2gKICAgICBiZXR3ZWVuIHRoZXNlIGtpbmRzLgoKIC0tIE1hY3JvOiBDT05TVF9ET1VCTEVfT0tfRk9SX0NPTlNUUkFJTlRfUCAoVkFMVUUsIEMsIFNUUikKICAgICBMaWtlICdDT05TVF9ET1VCTEVfT0tfRk9SX0xFVFRFUl9QJywgYnV0IHlvdSBhbHNvIGdldCB0aGUKICAgICBjb25zdHJhaW50IHN0cmluZyBwYXNzZWQgaW4gU1RSLCBzbyB0aGF0IHlvdSBjYW4gdXNlIHN1ZmZpeGVzIHRvCiAgICAgZGlzdGluZ3Vpc2ggYmV0d2VlbiBkaWZmZXJlbnQgdmFyaWFudHMuCgogLS0gTWFjcm86IEVYVFJBX0NPTlNUUkFJTlQgKFZBTFVFLCBDKQogICAgIEEgQyBleHByZXNzaW9uIHRoYXQgZGVmaW5lcyB0aGUgb3B0aW9uYWwgbWFjaGluZS1kZXBlbmRlbnQKICAgICBjb25zdHJhaW50IGxldHRlcnMgdGhhdCBjYW4gYmUgdXNlZCB0byBzZWdyZWdhdGUgc3BlY2lmaWMgdHlwZXMgb2YKICAgICBvcGVyYW5kcywgdXN1YWxseSBtZW1vcnkgcmVmZXJlbmNlcywgZm9yIHRoZSB0YXJnZXQgbWFjaGluZS4gIEFueQogICAgIGxldHRlciB0aGF0IGlzIG5vdCBlbHNld2hlcmUgZGVmaW5lZCBhbmQgbm90IG1hdGNoZWQgYnkKICAgICAnUkVHX0NMQVNTX0ZST01fTEVUVEVSJyAvICdSRUdfQ0xBU1NfRlJPTV9DT05TVFJBSU5UJyBtYXkgYmUgdXNlZC4KICAgICBOb3JtYWxseSB0aGlzIG1hY3JvIHdpbGwgbm90IGJlIGRlZmluZWQuCgogICAgIElmIGl0IGlzIHJlcXVpcmVkIGZvciBhIHBhcnRpY3VsYXIgdGFyZ2V0IG1hY2hpbmUsIGl0IHNob3VsZCByZXR1cm4KICAgICAxIGlmIFZBTFVFIGNvcnJlc3BvbmRzIHRvIHRoZSBvcGVyYW5kIHR5cGUgcmVwcmVzZW50ZWQgYnkgdGhlCiAgICAgY29uc3RyYWludCBsZXR0ZXIgQy4gIElmIEMgaXMgbm90IGRlZmluZWQgYXMgYW4gZXh0cmEgY29uc3RyYWludCwKICAgICB0aGUgdmFsdWUgcmV0dXJuZWQgc2hvdWxkIGJlIDAgcmVnYXJkbGVzcyBvZiBWQUxVRS4KCiAgICAgRm9yIGV4YW1wbGUsIG9uIHRoZSBST01QLCBsb2FkIGluc3RydWN0aW9ucyBjYW5ub3QgaGF2ZSB0aGVpcgogICAgIG91dHB1dCBpbiByMCBpZiB0aGUgbWVtb3J5IHJlZmVyZW5jZSBjb250YWlucyBhIHN5bWJvbGljIGFkZHJlc3MuCiAgICAgQ29uc3RyYWludCBsZXR0ZXIgJ1EnIGlzIGRlZmluZWQgYXMgcmVwcmVzZW50aW5nIGEgbWVtb3J5IGFkZHJlc3MKICAgICB0aGF0IGRvZXMgX25vdF8gY29udGFpbiBhIHN5bWJvbGljIGFkZHJlc3MuICBBbiBhbHRlcm5hdGl2ZSBpcwogICAgIHNwZWNpZmllZCB3aXRoIGEgJ1EnIGNvbnN0cmFpbnQgb24gdGhlIGlucHV0IGFuZCAncicgb24gdGhlIG91dHB1dC4KICAgICBUaGUgbmV4dCBhbHRlcm5hdGl2ZSBzcGVjaWZpZXMgJ20nIG9uIHRoZSBpbnB1dCBhbmQgYSByZWdpc3RlcgogICAgIGNsYXNzIHRoYXQgZG9lcyBub3QgaW5jbHVkZSByMCBvbiB0aGUgb3V0cHV0LgoKIC0tIE1hY3JvOiBFWFRSQV9DT05TVFJBSU5UX1NUUiAoVkFMVUUsIEMsIFNUUikKICAgICBMaWtlICdFWFRSQV9DT05TVFJBSU5UJywgYnV0IHlvdSBhbHNvIGdldCB0aGUgY29uc3RyYWludCBzdHJpbmcKICAgICBwYXNzZWQgaW4gU1RSLCBzbyB0aGF0IHlvdSBjYW4gdXNlIHN1ZmZpeGVzIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4KICAgICBkaWZmZXJlbnQgdmFyaWFudHMuCgogLS0gTWFjcm86IEVYVFJBX01FTU9SWV9DT05TVFJBSU5UIChDLCBTVFIpCiAgICAgQSBDIGV4cHJlc3Npb24gdGhhdCBkZWZpbmVzIHRoZSBvcHRpb25hbCBtYWNoaW5lLWRlcGVuZGVudAogICAgIGNvbnN0cmFpbnQgbGV0dGVycywgYW1vbmdzdCB0aG9zZSBhY2NlcHRlZCBieSAnRVhUUkFfQ09OU1RSQUlOVCcsCiAgICAgdGhhdCBzaG91bGQgYmUgdHJlYXRlZCBsaWtlIG1lbW9yeSBjb25zdHJhaW50cyBieSB0aGUgcmVsb2FkIHBhc3MuCgogICAgIEl0IHNob3VsZCByZXR1cm4gMSBpZiB0aGUgb3BlcmFuZCB0eXBlIHJlcHJlc2VudGVkIGJ5IHRoZQogICAgIGNvbnN0cmFpbnQgYXQgdGhlIHN0YXJ0IG9mIFNUUiwgdGhlIGZpcnN0IGxldHRlciBvZiB3aGljaCBpcyB0aGUKICAgICBsZXR0ZXIgQywgY29tcHJpc2VzIGEgc3Vic2V0IG9mIGFsbCBtZW1vcnkgcmVmZXJlbmNlcyBpbmNsdWRpbmcgYWxsCiAgICAgdGhvc2Ugd2hvc2UgYWRkcmVzcyBpcyBzaW1wbHkgYSBiYXNlIHJlZ2lzdGVyLiAgVGhpcyBhbGxvd3MgdGhlCiAgICAgcmVsb2FkIHBhc3MgdG8gcmVsb2FkIGFuIG9wZXJhbmQsIGlmIGl0IGRvZXMgbm90IGRpcmVjdGx5CiAgICAgY29ycmVzcG9uZCB0byB0aGUgb3BlcmFuZCB0eXBlIG9mIEMsIGJ5IGNvcHlpbmcgaXRzIGFkZHJlc3MgaW50byBhCiAgICAgYmFzZSByZWdpc3Rlci4KCiAgICAgRm9yIGV4YW1wbGUsIG9uIHRoZSBTLzM5MCwgc29tZSBpbnN0cnVjdGlvbnMgZG8gbm90IGFjY2VwdAogICAgIGFyYml0cmFyeSBtZW1vcnkgcmVmZXJlbmNlcywgYnV0IG9ubHkgdGhvc2UgdGhhdCBkbyBub3QgbWFrZSB1c2Ugb2YKICAgICBhbiBpbmRleCByZWdpc3Rlci4gIFRoZSBjb25zdHJhaW50IGxldHRlciAnUScgaXMgZGVmaW5lZCB2aWEKICAgICAnRVhUUkFfQ09OU1RSQUlOVCcgYXMgcmVwcmVzZW50aW5nIGEgbWVtb3J5IGFkZHJlc3Mgb2YgdGhpcyB0eXBlLgogICAgIElmIHRoZSBsZXR0ZXIgJ1EnIGlzIG1hcmtlZCBhcyAnRVhUUkFfTUVNT1JZX0NPTlNUUkFJTlQnLCBhICdRJwogICAgIGNvbnN0cmFpbnQgY2FuIGhhbmRsZSBhbnkgbWVtb3J5IG9wZXJhbmQsIGJlY2F1c2UgdGhlIHJlbG9hZCBwYXNzCiAgICAga25vd3MgaXQgY2FuIGJlIHJlbG9hZGVkIGJ5IGNvcHlpbmcgdGhlIG1lbW9yeSBhZGRyZXNzIGludG8gYSBiYXNlCiAgICAgcmVnaXN0ZXIgaWYgcmVxdWlyZWQuICBUaGlzIGlzIGFuYWxvZ291cyB0byB0aGUgd2F5IGEgJ28nCiAgICAgY29uc3RyYWludCBjYW4gaGFuZGxlIGFueSBtZW1vcnkgb3BlcmFuZC4KCiAtLSBNYWNybzogRVhUUkFfQUREUkVTU19DT05TVFJBSU5UIChDLCBTVFIpCiAgICAgQSBDIGV4cHJlc3Npb24gdGhhdCBkZWZpbmVzIHRoZSBvcHRpb25hbCBtYWNoaW5lLWRlcGVuZGVudAogICAgIGNvbnN0cmFpbnQgbGV0dGVycywgYW1vbmdzdCB0aG9zZSBhY2NlcHRlZCBieSAnRVhUUkFfQ09OU1RSQUlOVCcgLwogICAgICdFWFRSQV9DT05TVFJBSU5UX1NUUicsIHRoYXQgc2hvdWxkIGJlIHRyZWF0ZWQgbGlrZSBhZGRyZXNzCiAgICAgY29uc3RyYWludHMgYnkgdGhlIHJlbG9hZCBwYXNzLgoKICAgICBJdCBzaG91bGQgcmV0dXJuIDEgaWYgdGhlIG9wZXJhbmQgdHlwZSByZXByZXNlbnRlZCBieSB0aGUKICAgICBjb25zdHJhaW50IGF0IHRoZSBzdGFydCBvZiBTVFIsIHdoaWNoIHN0YXJ0cyB3aXRoIHRoZSBsZXR0ZXIgQywKICAgICBjb21wcmlzZXMgYSBzdWJzZXQgb2YgYWxsIG1lbW9yeSBhZGRyZXNzZXMgaW5jbHVkaW5nIGFsbCB0aG9zZSB0aGF0CiAgICAgY29uc2lzdCBvZiBqdXN0IGEgYmFzZSByZWdpc3Rlci4gIFRoaXMgYWxsb3dzIHRoZSByZWxvYWQgcGFzcyB0bwogICAgIHJlbG9hZCBhbiBvcGVyYW5kLCBpZiBpdCBkb2VzIG5vdCBkaXJlY3RseSBjb3JyZXNwb25kIHRvIHRoZQogICAgIG9wZXJhbmQgdHlwZSBvZiBTVFIsIGJ5IGNvcHlpbmcgaXQgaW50byBhIGJhc2UgcmVnaXN0ZXIuCgogICAgIEFueSBjb25zdHJhaW50IG1hcmtlZCBhcyAnRVhUUkFfQUREUkVTU19DT05TVFJBSU5UJyBjYW4gb25seSBiZQogICAgIHVzZWQgd2l0aCB0aGUgJ2FkZHJlc3Nfb3BlcmFuZCcgcHJlZGljYXRlLiAgSXQgaXMgdHJlYXRlZAogICAgIGFuYWxvZ291c2x5IHRvIHRoZSAncCcgY29uc3RyYWludC4KCh8KRmlsZTogZ2NjaW50LmluZm8sICBOb2RlOiBTdGFjayBhbmQgQ2FsbGluZywgIE5leHQ6IFZhcmFyZ3MsICBQcmV2OiBPbGQgQ29uc3RyYWludHMsICBVcDogVGFyZ2V0IE1hY3JvcwoKMTUuMTAgU3RhY2sgTGF5b3V0IGFuZCBDYWxsaW5nIENvbnZlbnRpb25zCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKVGhpcyBkZXNjcmliZXMgdGhlIHN0YWNrIGxheW91dCBhbmQgY2FsbGluZyBjb252ZW50aW9ucy4KCiogTWVudToKCiogRnJhbWUgTGF5b3V0OjoKKiBFeGNlcHRpb24gSGFuZGxpbmc6OgoqIFN0YWNrIENoZWNraW5nOjoKKiBGcmFtZSBSZWdpc3RlcnM6OgoqIEVsaW1pbmF0aW9uOjoKKiBTdGFjayBBcmd1bWVudHM6OgoqIFJlZ2lzdGVyIEFyZ3VtZW50czo6CiogU2NhbGFyIFJldHVybjo6CiogQWdncmVnYXRlIFJldHVybjo6CiogQ2FsbGVyIFNhdmVzOjoKKiBGdW5jdGlvbiBFbnRyeTo6CiogUHJvZmlsaW5nOjoKKiBUYWlsIENhbGxzOjoKKiBTdGFjayBTbWFzaGluZyBQcm90ZWN0aW9uOjoKCh8KRmlsZTogZ2NjaW50LmluZm8sICBOb2RlOiBGcmFtZSBMYXlvdXQsICBOZXh0OiBFeGNlcHRpb24gSGFuZGxpbmcsICBVcDogU3RhY2sgYW5kIENhbGxpbmcKCjE1LjEwLjEgQmFzaWMgU3RhY2sgTGF5b3V0Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpIZXJlIGlzIHRoZSBiYXNpYyBzdGFjayBsYXlvdXQuCgogLS0gTWFjcm86IFNUQUNLX0dST1dTX0RPV05XQVJECiAgICAgRGVmaW5lIHRoaXMgbWFjcm8gaWYgcHVzaGluZyBhIHdvcmQgb250byB0aGUgc3RhY2sgbW92ZXMgdGhlIHN0YWNrCiAgICAgcG9pbnRlciB0byBhIHNtYWxsZXIgYWRkcmVzcy4KCiAgICAgV2hlbiB3ZSBzYXksICJkZWZpbmUgdGhpcyBtYWNybyBpZiAuLi4iLCBpdCBtZWFucyB0aGF0IHRoZSBjb21waWxlcgogICAgIGNoZWNrcyB0aGlzIG1hY3JvIG9ubHkgd2l0aCAnI2lmZGVmJyBzbyB0aGUgcHJlY2lzZSBkZWZpbml0aW9uIHVzZWQKICAgICBkb2VzIG5vdCBtYXR0ZXIuCgogLS0gTWFjcm86IFNUQUNLX1BVU0hfQ09ERQogICAgIFRoaXMgbWFjcm8gZGVmaW5lcyB0aGUgb3BlcmF0aW9uIHVzZWQgd2hlbiBzb21ldGhpbmcgaXMgcHVzaGVkIG9uCiAgICAgdGhlIHN0YWNrLiAgSW4gUlRMLCBhIHB1c2ggb3BlcmF0aW9uIHdpbGwgYmUgJyhzZXQgKG1lbQogICAgIChTVEFDS19QVVNIX0NPREUgKHJlZyBzcCkpKSAuLi4pJwoKICAgICBUaGUgY2hvaWNlcyBhcmUgJ1BSRV9ERUMnLCAnUE9TVF9ERUMnLCAnUFJFX0lOQycsIGFuZCAnUE9TVF9JTkMnLgogICAgIFdoaWNoIG9mIHRoZXNlIGlzIGNvcnJlY3QgZGVwZW5kcyBvbiB0aGUgc3RhY2sgZGlyZWN0aW9uIGFuZCBvbgogICAgIHdoZXRoZXIgdGhlIHN0YWNrIHBvaW50ZXIgcG9pbnRzIHRvIHRoZSBsYXN0IGl0ZW0gb24gdGhlIHN0YWNrIG9yCiAgICAgd2hldGhlciBpdCBwb2ludHMgdG8gdGhlIHNwYWNlIGZvciB0aGUgbmV4dCBpdGVtIG9uIHRoZSBzdGFjay4KCiAgICAgVGhlIGRlZmF1bHQgaXMgJ1BSRV9ERUMnIHdoZW4gJ1NUQUNLX0dST1dTX0RPV05XQVJEJyBpcyBkZWZpbmVkLAogICAgIHdoaWNoIGlzIGFsbW9zdCBhbHdheXMgcmlnaHQsIGFuZCAnUFJFX0lOQycgb3RoZXJ3aXNlLCB3aGljaCBpcwogICAgIG9mdGVuIHdyb25nLgoKIC0tIE1hY3JvOiBGUkFNRV9HUk9XU19ET1dOV0FSRAogICAgIERlZmluZSB0aGlzIG1hY3JvIHRvIG5vbnplcm8gdmFsdWUgaWYgdGhlIGFkZHJlc3NlcyBvZiBsb2NhbAogICAgIHZhcmlhYmxlIHNsb3RzIGFyZSBhdCBuZWdhdGl2ZSBvZmZzZXRzIGZyb20gdGhlIGZyYW1lIHBvaW50ZXIuCgogLS0gTWFjcm86IEFSR1NfR1JPV19ET1dOV0FSRAogICAgIERlZmluZSB0aGlzIG1hY3JvIGlmIHN1Y2Nlc3NpdmUgYXJndW1lbnRzIHRvIGEgZnVuY3Rpb24gb2NjdXB5CiAgICAgZGVjcmVhc2luZyBhZGRyZXNzZXMgb24gdGhlIHN0YWNrLgoKIC0tIE1hY3JvOiBTVEFSVElOR19GUkFNRV9PRkZTRVQKICAgICBPZmZzZXQgZnJvbSB0aGUgZnJhbWUgcG9pbnRlciB0byB0aGUgZmlyc3QgbG9jYWwgdmFyaWFibGUgc2xvdCB0bwogICAgIGJlIGFsbG9jYXRlZC4KCiAgICAgSWYgJ0ZSQU1FX0dST1dTX0RPV05XQVJEJywgZmluZCB0aGUgbmV4dCBzbG90J3Mgb2Zmc2V0IGJ5CiAgICAgc3VidHJhY3RpbmcgdGhlIGZpcnN0IHNsb3QncyBsZW5ndGggZnJvbSAnU1RBUlRJTkdfRlJBTUVfT0ZGU0VUJy4KICAgICBPdGhlcndpc2UsIGl0IGlzIGZvdW5kIGJ5IGFkZGluZyB0aGUgbGVuZ3RoIG9mIHRoZSBmaXJzdCBzbG90IHRvCiAgICAgdGhlIHZhbHVlICdTVEFSVElOR19GUkFNRV9PRkZTRVQnLgoKIC0tIE1hY3JvOiBTVEFDS19BTElHTk1FTlRfTkVFREVECiAgICAgRGVmaW5lIHRvIHplcm8gdG8gZGlzYWJsZSBmaW5hbCBhbGlnbm1lbnQgb2YgdGhlIHN0YWNrIGR1cmluZwogICAgIHJlbG9hZC4gIFRoZSBub256ZXJvIGRlZmF1bHQgZm9yIHRoaXMgbWFjcm8gaXMgc3VpdGFibGUgZm9yIG1vc3QKICAgICBwb3J0cy4KCiAgICAgT24gcG9ydHMgd2hlcmUgJ1NUQVJUSU5HX0ZSQU1FX09GRlNFVCcgaXMgbm9uemVybyBvciB3aGVyZSB0aGVyZSBpcwogICAgIGEgcmVnaXN0ZXIgc2F2ZSBibG9jayBmb2xsb3dpbmcgdGhlIGxvY2FsIGJsb2NrIHRoYXQgZG9lc24ndAogICAgIHJlcXVpcmUgYWxpZ25tZW50IHRvICdTVEFDS19CT1VOREFSWScsIGl0IG1heSBiZSBiZW5lZmljaWFsIHRvCiAgICAgZGlzYWJsZSBzdGFjayBhbGlnbm1lbnQgYW5kIGRvIGl0IGluIHRoZSBiYWNrZW5kLgoKIC0tIE1hY3JvOiBTVEFDS19QT0lOVEVSX09GRlNFVAogICAgIE9mZnNldCBmcm9tIHRoZSBzdGFjayBwb2ludGVyIHJlZ2lzdGVyIHRvIHRoZSBmaXJzdCBsb2NhdGlvbiBhdAogICAgIHdoaWNoIG91dGdvaW5nIGFyZ3VtZW50cyBhcmUgcGxhY2VkLiAgSWYgbm90IHNwZWNpZmllZCwgdGhlIGRlZmF1bHQKICAgICB2YWx1ZSBvZiB6ZXJvIGlzIHVzZWQuICBUaGlzIGlzIHRoZSBwcm9wZXIgdmFsdWUgZm9yIG1vc3QgbWFjaGluZXMuCgogICAgIElmICdBUkdTX0dST1dfRE9XTldBUkQnLCB0aGlzIGlzIHRoZSBvZmZzZXQgdG8gdGhlIGxvY2F0aW9uIGFib3ZlCiAgICAgdGhlIGZpcnN0IGxvY2F0aW9uIGF0IHdoaWNoIG91dGdvaW5nIGFyZ3VtZW50cyBhcmUgcGxhY2VkLgoKIC0tIE1hY3JvOiBGSVJTVF9QQVJNX09GRlNFVCAoRlVOREVDTCkKICAgICBPZmZzZXQgZnJvbSB0aGUgYXJndW1lbnQgcG9pbnRlciByZWdpc3RlciB0byB0aGUgZmlyc3QgYXJndW1lbnQncwogICAgIGFkZHJlc3MuICBPbiBzb21lIG1hY2hpbmVzIGl0IG1heSBkZXBlbmQgb24gdGhlIGRhdGEgdHlwZSBvZiB0aGUKICAgICBmdW5jdGlvbi4KCiAgICAgSWYgJ0FSR1NfR1JPV19ET1dOV0FSRCcsIHRoaXMgaXMgdGhlIG9mZnNldCB0byB0aGUgbG9jYXRpb24gYWJvdmUKICAgICB0aGUgZmlyc3QgYXJndW1lbnQncyBhZGRyZXNzLgoKIC0tIE1hY3JvOiBTVEFDS19EWU5BTUlDX09GRlNFVCAoRlVOREVDTCkKICAgICBPZmZzZXQgZnJvbSB0aGUgc3RhY2sgcG9pbnRlciByZWdpc3RlciB0byBhbiBpdGVtIGR5bmFtaWNhbGx5CiAgICAgYWxsb2NhdGVkIG9uIHRoZSBzdGFjaywgZS5nLiwgYnkgJ2FsbG9jYScuCgogICAgIFRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGlzIG1hY3JvIGlzICdTVEFDS19QT0lOVEVSX09GRlNFVCcgcGx1cyB0aGUKICAgICBsZW5ndGggb2YgdGhlIG91dGdvaW5nIGFyZ3VtZW50cy4gIFRoZSBkZWZhdWx0IGlzIGNvcnJlY3QgZm9yIG1vc3QKICAgICBtYWNoaW5lcy4gIFNlZSAnZnVuY3Rpb24uYycgZm9yIGRldGFpbHMuCgogLS0gTWFjcm86IElOSVRJQUxfRlJBTUVfQUREUkVTU19SVFgKICAgICBBIEMgZXhwcmVzc2lvbiB3aG9zZSB2YWx1ZSBpcyBSVEwgcmVwcmVzZW50aW5nIHRoZSBhZGRyZXNzIG9mIHRoZQogICAgIGluaXRpYWwgc3RhY2sgZnJhbWUuICBUaGlzIGFkZHJlc3MgaXMgcGFzc2VkIHRvICdSRVRVUk5fQUREUl9SVFgnCiAgICAgYW5kICdEWU5BTUlDX0NIQUlOX0FERFJFU1MnLiAgSWYgeW91IGRvbid0IGRlZmluZSB0aGlzIG1hY3JvLCBhCiAgICAgcmVhc29uYWJsZSBkZWZhdWx0IHZhbHVlIHdpbGwgYmUgdXNlZC4gIERlZmluZSB0aGlzIG1hY3JvIGluIG9yZGVyCiAgICAgdG8gbWFrZSBmcmFtZSBwb2ludGVyIGVsaW1pbmF0aW9uIHdvcmsgaW4gdGhlIHByZXNlbmNlIG9mCiAgICAgJ19fYnVpbHRpbl9mcmFtZV9hZGRyZXNzIChjb3VudCknIGFuZCAnX19idWlsdGluX3JldHVybl9hZGRyZXNzCiAgICAgKGNvdW50KScgZm9yICdjb3VudCcgbm90IGVxdWFsIHRvIHplcm8uCgogLS0gTWFjcm86IERZTkFNSUNfQ0hBSU5fQUREUkVTUyAoRlJBTUVBRERSKQogICAgIEEgQyBleHByZXNzaW9uIHdob3NlIHZhbHVlIGlzIFJUTCByZXByZXNlbnRpbmcgdGhlIGFkZHJlc3MgaW4gYQogICAgIHN0YWNrIGZyYW1lIHdoZXJlIHRoZSBwb2ludGVyIHRvIHRoZSBjYWxsZXIncyBmcmFtZSBpcyBzdG9yZWQuCiAgICAgQXNzdW1lIHRoYXQgRlJBTUVBRERSIGlzIGFuIFJUTCBleHByZXNzaW9uIGZvciB0aGUgYWRkcmVzcyBvZiB0aGUKICAgICBzdGFjayBmcmFtZSBpdHNlbGYuCgogICAgIElmIHlvdSBkb24ndCBkZWZpbmUgdGhpcyBtYWNybywgdGhlIGRlZmF1bHQgaXMgdG8gcmV0dXJuIHRoZSB2YWx1ZQogICAgIG9mIEZSQU1FQUREUi0tdGhhdCBpcywgdGhlIHN0YWNrIGZyYW1lIGFkZHJlc3MgaXMgYWxzbyB0aGUgYWRkcmVzcwogICAgIG9mIHRoZSBzdGFjayB3b3JkIHRoYXQgcG9pbnRzIHRvIHRoZSBwcmV2aW91cyBmcmFtZS4KCiAtLSBNYWNybzogU0VUVVBfRlJBTUVfQUREUkVTU0VTCiAgICAgSWYgZGVmaW5lZCwgYSBDIGV4cHJlc3Npb24gdGhhdCBwcm9kdWNlcyB0aGUgbWFjaGluZS1zcGVjaWZpYyBjb2RlCiAgICAgdG8gc2V0dXAgdGhlIHN0YWNrIHNvIHRoYXQgYXJiaXRyYXJ5IGZyYW1lcyBjYW4gYmUgYWNjZXNzZWQuICBGb3IKICAgICBleGFtcGxlLCBvbiB0aGUgU1BBUkMsIHdlIG11c3QgZmx1c2ggYWxsIG9mIHRoZSByZWdpc3RlciB3aW5kb3dzIHRvCiAgICAgdGhlIHN0YWNrIGJlZm9yZSB3ZSBjYW4gYWNjZXNzIGFyYml0cmFyeSBzdGFjayBmcmFtZXMuICBZb3Ugd2lsbAogICAgIHNlbGRvbSBuZWVkIHRvIGRlZmluZSB0aGlzIG1hY3JvLgoKIC0tIFRhcmdldCBIb29rOiBib29sIFRBUkdFVF9CVUlMVElOX1NFVEpNUF9GUkFNRV9WQUxVRSAoKQogICAgIFRoaXMgdGFyZ2V0IGhvb2sgc2hvdWxkIHJldHVybiBhbiBydHggdGhhdCBpcyB1c2VkIHRvIHN0b3JlIHRoZQogICAgIGFkZHJlc3Mgb2YgdGhlIGN1cnJlbnQgZnJhbWUgaW50byB0aGUgYnVpbHQgaW4gJ3NldGptcCcgYnVmZmVyLgogICAgIFRoZSBkZWZhdWx0IHZhbHVlLCAndmlydHVhbF9zdGFja192YXJzX3J0eCcsIGlzIGNvcnJlY3QgZm9yIG1vc3QKICAgICBtYWNoaW5lcy4gIE9uZSByZWFzb24geW91IG1heSBuZWVkIHRvIGRlZmluZSB0aGlzIHRhcmdldCBob29rIGlzIGlmCiAgICAgJ2hhcmRfZnJhbWVfcG9pbnRlcl9ydHgnIGlzIHRoZSBhcHByb3ByaWF0ZSB2YWx1ZSBvbiB5b3VyIG1hY2hpbmUuCgogLS0gTWFjcm86IEZSQU1FX0FERFJfUlRYIChGUkFNRUFERFIpCiAgICAgQSBDIGV4cHJlc3Npb24gd2hvc2UgdmFsdWUgaXMgUlRMIHJlcHJlc2VudGluZyB0aGUgdmFsdWUgb2YgdGhlCiAgICAgZnJhbWUgYWRkcmVzcyBmb3IgdGhlIGN1cnJlbnQgZnJhbWUuICBGUkFNRUFERFIgaXMgdGhlIGZyYW1lCiAgICAgcG9pbnRlciBvZiB0aGUgY3VycmVudCBmcmFtZS4gIFRoaXMgaXMgdXNlZCBmb3IKICAgICBfX2J1aWx0aW5fZnJhbWVfYWRkcmVzcy4gIFlvdSBuZWVkIG9ubHkgZGVmaW5lIHRoaXMgbWFjcm8gaWYgdGhlCiAgICAgZnJhbWUgYWRkcmVzcyBpcyBub3QgdGhlIHNhbWUgYXMgdGhlIGZyYW1lIHBvaW50ZXIuICBNb3N0IG1hY2hpbmVzCiAgICAgZG8gbm90IG5lZWQgdG8gZGVmaW5lIGl0LgoKIC0tIE1hY3JvOiBSRVRVUk5fQUREUl9SVFggKENPVU5ULCBGUkFNRUFERFIpCiAgICAgQSBDIGV4cHJlc3Npb24gd2hvc2UgdmFsdWUgaXMgUlRMIHJlcHJlc2VudGluZyB0aGUgdmFsdWUgb2YgdGhlCiAgICAgcmV0dXJuIGFkZHJlc3MgZm9yIHRoZSBmcmFtZSBDT1VOVCBzdGVwcyB1cCBmcm9tIHRoZSBjdXJyZW50IGZyYW1lLAogICAgIGFmdGVyIHRoZSBwcm9sb2d1ZS4gIEZSQU1FQUREUiBpcyB0aGUgZnJhbWUgcG9pbnRlciBvZiB0aGUgQ09VTlQKICAgICBmcmFtZSwgb3IgdGhlIGZyYW1lIHBvaW50ZXIgb2YgdGhlIENPVU5UIC0gMSBmcmFtZSBpZgogICAgICdSRVRVUk5fQUREUl9JTl9QUkVWSU9VU19GUkFNRScgaXMgZGVmaW5lZC4KCiAgICAgVGhlIHZhbHVlIG9mIHRoZSBleHByZXNzaW9uIG11c3QgYWx3YXlzIGJlIHRoZSBjb3JyZWN0IGFkZHJlc3Mgd2hlbgogICAgIENPVU5UIGlzIHplcm8sIGJ1dCBtYXkgYmUgJ05VTExfUlRYJyBpZiB0aGVyZSBpcyBub3Qgd2F5IHRvCiAgICAgZGV0ZXJtaW5lIHRoZSByZXR1cm4gYWRkcmVzcyBvZiBvdGhlciBmcmFtZXMuCgogLS0gTWFjcm86IFJFVFVSTl9BRERSX0lOX1BSRVZJT1VTX0ZSQU1FCiAgICAgRGVmaW5lIHRoaXMgaWYgdGhlIHJldHVybiBhZGRyZXNzIG9mIGEgcGFydGljdWxhciBzdGFjayBmcmFtZSBpcwogICAgIGFjY2Vzc2VkIGZyb20gdGhlIGZyYW1lIHBvaW50ZXIgb2YgdGhlIHByZXZpb3VzIHN0YWNrIGZyYW1lLgoKIC0tIE1hY3JvOiBJTkNPTUlOR19SRVRVUk5fQUREUl9SVFgKICAgICBBIEMgZXhwcmVzc2lvbiB3aG9zZSB2YWx1ZSBpcyBSVEwgcmVwcmVzZW50aW5nIHRoZSBsb2NhdGlvbiBvZiB0aGUKICAgICBpbmNvbWluZyByZXR1cm4gYWRkcmVzcyBhdCB0aGUgYmVnaW5uaW5nIG9mIGFueSBmdW5jdGlvbiwgYmVmb3JlCiAgICAgdGhlIHByb2xvZ3VlLiAgVGhpcyBSVEwgaXMgZWl0aGVyIGEgJ1JFRycsIGluZGljYXRpbmcgdGhhdCB0aGUKICAgICByZXR1cm4gdmFsdWUgaXMgc2F2ZWQgaW4gJ1JFRycsIG9yIGEgJ01FTScgcmVwcmVzZW50aW5nIGEgbG9jYXRpb24KICAgICBpbiB0aGUgc3RhY2suCgogICAgIFlvdSBvbmx5IG5lZWQgdG8gZGVmaW5lIHRoaXMgbWFjcm8gaWYgeW91IHdhbnQgdG8gc3VwcG9ydCBjYWxsCiAgICAgZnJhbWUgZGVidWdnaW5nIGluZm9ybWF0aW9uIGxpa2UgdGhhdCBwcm92aWRlZCBieSBEV0FSRiAyLgoKICAgICBJZiB0aGlzIFJUTCBpcyBhICdSRUcnLCB5b3Ugc2hvdWxkIGFsc28gZGVmaW5lCiAgICAgJ0RXQVJGX0ZSQU1FX1JFVFVSTl9DT0xVTU4nIHRvICdEV0FSRl9GUkFNRV9SRUdOVU0gKFJFR05PKScuCgogLS0gTWFjcm86IERXQVJGX0FMVF9GUkFNRV9SRVRVUk5fQ09MVU1OCiAgICAgQSBDIGV4cHJlc3Npb24gd2hvc2UgdmFsdWUgaXMgYW4gaW50ZWdlciBnaXZpbmcgYSBEV0FSRiAyIGNvbHVtbgogICAgIG51bWJlciB0aGF0IG1heSBiZSB1c2VkIGFzIGFuIGFsdGVybmF0aXZlIHJldHVybiBjb2x1bW4uICBUaGUKICAgICBjb2x1bW4gbXVzdCBub3QgY29ycmVzcG9uZCB0byBhbnkgZ2NjIGhhcmQgcmVnaXN0ZXIgKHRoYXQgaXMsIGl0CiAgICAgbXVzdCBub3QgYmUgaW4gdGhlIHJhbmdlIG9mICdEV0FSRl9GUkFNRV9SRUdOVU0nKS4KCiAgICAgVGhpcyBtYWNybyBjYW4gYmUgdXNlZnVsIGlmICdEV0FSRl9GUkFNRV9SRVRVUk5fQ09MVU1OJyBpcyBzZXQgdG8gYQogICAgIGdlbmVyYWwgcmVnaXN0ZXIsIGJ1dCBhbiBhbHRlcm5hdGl2ZSBjb2x1bW4gbmVlZHMgdG8gYmUgdXNlZCBmb3IKICAgICBzaWduYWwgZnJhbWVzLiAgU29tZSB0YXJnZXRzIGhhdmUgYWxzbyB1c2VkIGRpZmZlcmVudCBmcmFtZSByZXR1cm4KICAgICBjb2x1bW5zIG92ZXIgdGltZS4KCiAtLSBNYWNybzogRFdBUkZfWkVST19SRUcKICAgICBBIEMgZXhwcmVzc2lvbiB3aG9zZSB2YWx1ZSBpcyBhbiBpbnRlZ2VyIGdpdmluZyBhIERXQVJGIDIgcmVnaXN0ZXIKICAgICBudW1iZXIgdGhhdCBpcyBjb25zaWRlcmVkIHRvIGFsd2F5cyBoYXZlIHRoZSB2YWx1ZSB6ZXJvLiAgVGhpcwogICAgIHNob3VsZCBvbmx5IGJlIGRlZmluZWQgaWYgdGhlIHRhcmdldCBoYXMgYW4gYXJjaGl0ZWN0ZWQgemVybwogICAgIHJlZ2lzdGVyLCBhbmQgc29tZW9uZSBkZWNpZGVkIGl0IHdhcyBhIGdvb2QgaWRlYSB0byB1c2UgdGhhdAogICAgIHJlZ2lzdGVyIG51bWJlciB0byB0ZXJtaW5hdGUgdGhlIHN0YWNrIGJhY2t0cmFjZS4gIE5ldyBwb3J0cyBzaG91bGQKICAgICBhdm9pZCB0aGlzLgoKIC0tIFRhcmdldCBIb29rOiB2b2lkIFRBUkdFVF9EV0FSRl9IQU5ETEVfRlJBTUVfVU5TUEVDIChjb25zdCBjaGFyCiAgICAgICAgICAqTEFCRUwsIHJ0eCBQQVRURVJOLCBpbnQgSU5ERVgpCiAgICAgVGhpcyB0YXJnZXQgaG9vayBhbGxvd3MgdGhlIGJhY2tlbmQgdG8gZW1pdCBmcmFtZS1yZWxhdGVkIGluc25zCiAgICAgdGhhdCBjb250YWluIFVOU1BFQ3Mgb3IgVU5TUEVDX1ZPTEFUSUxFcy4gIFRoZSBEV0FSRiAyIGNhbGwgZnJhbWUKICAgICBkZWJ1Z2dpbmcgaW5mbyBlbmdpbmUgd2lsbCBpbnZva2UgaXQgb24gaW5zbnMgb2YgdGhlIGZvcm0KICAgICAgICAgIChzZXQgKHJlZykgKHVuc3BlYyBbLi4uXSBVTlNQRUNfSU5ERVgpKQogICAgIGFuZAogICAgICAgICAgKHNldCAocmVnKSAodW5zcGVjX3ZvbGF0aWxlIFsuLi5dIFVOU1BFQ1ZfSU5ERVgpKS4KICAgICB0byBsZXQgdGhlIGJhY2tlbmQgZW1pdCB0aGUgY2FsbCBmcmFtZSBpbnN0cnVjdGlvbnMuICBMQUJFTCBpcyB0aGUKICAgICBDRkkgbGFiZWwgYXR0YWNoZWQgdG8gdGhlIGluc24sIFBBVFRFUk4gaXMgdGhlIHBhdHRlcm4gb2YgdGhlIGluc24KICAgICBhbmQgSU5ERVggaXMgJ1VOU1BFQ19JTkRFWCcgb3IgJ1VOU1BFQ1ZfSU5ERVgnLgoKIC0tIE1hY3JvOiBJTkNPTUlOR19GUkFNRV9TUF9PRkZTRVQKICAgICBBIEMgZXhwcmVzc2lvbiB3aG9zZSB2YWx1ZSBpcyBhbiBpbnRlZ2VyIGdpdmluZyB0aGUgb2Zmc2V0LCBpbgogICAgIGJ5dGVzLCBmcm9tIHRoZSB2YWx1ZSBvZiB0aGUgc3RhY2sgcG9pbnRlciByZWdpc3RlciB0byB0aGUgdG9wIG9mCiAgICAgdGhlIHN0YWNrIGZyYW1lIGF0IHRoZSBiZWdpbm5pbmcgb2YgYW55IGZ1bmN0aW9uLCBiZWZvcmUgdGhlCiAgICAgcHJvbG9ndWUuICBUaGUgdG9wIG9mIHRoZSBmcmFtZSBpcyBkZWZpbmVkIHRvIGJlIHRoZSB2YWx1ZSBvZiB0aGUKICAgICBzdGFjayBwb2ludGVyIGluIHRoZSBwcmV2aW91cyBmcmFtZSwganVzdCBiZWZvcmUgdGhlIGNhbGwKICAgICBpbnN0cnVjdGlvbi4KCiAgICAgWW91IG9ubHkgbmVlZCB0byBkZWZpbmUgdGhpcyBtYWNybyBpZiB5b3Ugd2FudCB0byBzdXBwb3J0IGNhbGwKICAgICBmcmFtZSBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gbGlrZSB0aGF0IHByb3ZpZGVkIGJ5IERXQVJGIDIuCgogLS0gTWFjcm86IEFSR19QT0lOVEVSX0NGQV9PRkZTRVQgKEZVTkRFQ0wpCiAgICAgQSBDIGV4cHJlc3Npb24gd2hvc2UgdmFsdWUgaXMgYW4gaW50ZWdlciBnaXZpbmcgdGhlIG9mZnNldCwgaW4KICAgICBieXRlcywgZnJvbSB0aGUgYXJndW1lbnQgcG9pbnRlciB0byB0aGUgY2Fub25pY2FsIGZyYW1lIGFkZHJlc3MKICAgICAoY2ZhKS4gIFRoZSBmaW5hbCB2YWx1ZSBzaG91bGQgY29pbmNpZGUgd2l0aCB0aGF0IGNhbGN1bGF0ZWQgYnkKICAgICAnSU5DT01JTkdfRlJBTUVfU1BfT0ZGU0VUJy4gIFdoaWNoIGlzIHVuZm9ydHVuYXRlbHkgbm90IHVzYWJsZQogICAgIGR1cmluZyB2aXJ0dWFsIHJlZ2lzdGVyIGluc3RhbnRpYXRpb24uCgogICAgIFRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGlzIG1hY3JvIGlzICdGSVJTVF9QQVJNX09GRlNFVCAoZnVuZGVjbCknLAogICAgIHdoaWNoIGlzIGNvcnJlY3QgZm9yIG1vc3QgbWFjaGluZXM7IGluIGdlbmVyYWwsIHRoZSBhcmd1bWVudHMgYXJlCiAgICAgZm91bmQgaW1tZWRpYXRlbHkgYmVmb3JlIHRoZSBzdGFjayBmcmFtZS4gIE5vdGUgdGhhdCB0aGlzIGlzIG5vdAogICAgIHRoZSBjYXNlIG9uIHNvbWUgdGFyZ2V0cyB0aGF0IHNhdmUgcmVnaXN0ZXJzIGludG8gdGhlIGNhbGxlcidzCiAgICAgZnJhbWUsIHN1Y2ggYXMgU1BBUkMgYW5kIHJzNjAwMCwgYW5kIHNvIHN1Y2ggdGFyZ2V0cyBuZWVkIHRvIGRlZmluZQogICAgIHRoaXMgbWFjcm8uCgogICAgIFlvdSBvbmx5IG5lZWQgdG8gZGVmaW5lIHRoaXMgbWFjcm8gaWYgdGhlIGRlZmF1bHQgaXMgaW5jb3JyZWN0LCBhbmQKICAgICB5b3Ugd2FudCB0byBzdXBwb3J0IGNhbGwgZnJhbWUgZGVidWdnaW5nIGluZm9ybWF0aW9uIGxpa2UgdGhhdAogICAgIHByb3ZpZGVkIGJ5IERXQVJGIDIuCgogLS0gTWFjcm86IEZSQU1FX1BPSU5URVJfQ0ZBX09GRlNFVCAoRlVOREVDTCkKICAgICBJZiBkZWZpbmVkLCBhIEMgZXhwcmVzc2lvbiB3aG9zZSB2YWx1ZSBpcyBhbiBpbnRlZ2VyIGdpdmluZyB0aGUKICAgICBvZmZzZXQgaW4gYnl0ZXMgZnJvbSB0aGUgZnJhbWUgcG9pbnRlciB0byB0aGUgY2Fub25pY2FsIGZyYW1lCiAgICAgYWRkcmVzcyAoY2ZhKS4gIFRoZSBmaW5hbCB2YWx1ZSBzaG91bGQgY29pbmNpZGUgd2l0aCB0aGF0CiAgICAgY2FsY3VsYXRlZCBieSAnSU5DT01JTkdfRlJBTUVfU1BfT0ZGU0VUJy4KCiAgICAgTm9ybWFsbHkgdGhlIENGQSBpcyBjYWxjdWxhdGVkIGFzIGFuIG9mZnNldCBmcm9tIHRoZSBhcmd1bWVudAogICAgIHBvaW50ZXIsIHZpYSAnQVJHX1BPSU5URVJfQ0ZBX09GRlNFVCcsIGJ1dCBpZiB0aGUgYXJndW1lbnQgcG9pbnRlcgogICAgIGlzIHZhcmlhYmxlIGR1ZSB0byB0aGUgQUJJLCB0aGlzIG1heSBub3QgYmUgcG9zc2libGUuICBJZiB0aGlzCiAgICAgbWFjcm8gaXMgZGVmaW5lZCwgaXQgaW1wbGllcyB0aGF0IHRoZSB2aXJ0dWFsIHJlZ2lzdGVyCiAgICAgaW5zdGFudGlhdGlvbiBzaG91bGQgYmUgYmFzZWQgb24gdGhlIGZyYW1lIHBvaW50ZXIgaW5zdGVhZCBvZiB0aGUKICAgICBhcmd1bWVudCBwb2ludGVyLiAgT25seSBvbmUgb2YgJ0ZSQU1FX1BPSU5URVJfQ0ZBX09GRlNFVCcgYW5kCiAgICAgJ0FSR19QT0lOVEVSX0NGQV9PRkZTRVQnIHNob3VsZCBiZSBkZWZpbmVkLgoKIC0tIE1hY3JvOiBDRkFfRlJBTUVfQkFTRV9PRkZTRVQgKEZVTkRFQ0wpCiAgICAgSWYgZGVmaW5lZCwgYSBDIGV4cHJlc3Npb24gd2hvc2UgdmFsdWUgaXMgYW4gaW50ZWdlciBnaXZpbmcgdGhlCiAgICAgb2Zmc2V0IGluIGJ5dGVzIGZyb20gdGhlIGNhbm9uaWNhbCBmcmFtZSBhZGRyZXNzIChjZmEpIHRvIHRoZSBmcmFtZQogICAgIGJhc2UgdXNlZCBpbiBEV0FSRiAyIGRlYnVnIGluZm9ybWF0aW9uLiAgVGhlIGRlZmF1bHQgaXMgemVyby4gIEEKICAgICBkaWZmZXJlbnQgdmFsdWUgbWF5IHJlZHVjZSB0aGUgc2l6ZSBvZiBkZWJ1ZyBpbmZvcm1hdGlvbiBvbiBzb21lCiAgICAgcG9ydHMuCgofCkZpbGU6IGdjY2ludC5pbmZvLCAgTm9kZTogRXhjZXB0aW9uIEhhbmRsaW5nLCAgTmV4dDogU3RhY2sgQ2hlY2tpbmcsICBQcmV2OiBGcmFtZSBMYXlvdXQsICBVcDogU3RhY2sgYW5kIENhbGxpbmcKCjE1LjEwLjIgRXhjZXB0aW9uIEhhbmRsaW5nIFN1cHBvcnQKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKIC0tIE1hY3JvOiBFSF9SRVRVUk5fREFUQV9SRUdOTyAoTikKICAgICBBIEMgZXhwcmVzc2lvbiB3aG9zZSB2YWx1ZSBpcyB0aGUgTnRoIHJlZ2lzdGVyIG51bWJlciB1c2VkIGZvciBkYXRhCiAgICAgYnkgZXhjZXB0aW9uIGhhbmRsZXJzLCBvciAnSU5WQUxJRF9SRUdOVU0nIGlmIGZld2VyIHRoYW4gTgogICAgIHJlZ2lzdGVycyBhcmUgdXNhYmxlLgoKICAgICBUaGUgZXhjZXB0aW9uIGhhbmRsaW5nIGxpYnJhcnkgcm91dGluZXMgY29tbXVuaWNhdGUgd2l0aCB0aGUKICAgICBleGNlcHRpb24gaGFuZGxlcnMgdmlhIGEgc2V0IG9mIGFncmVlZCB1cG9uIHJlZ2lzdGVycy4gIElkZWFsbHkKICAgICB0aGVzZSByZWdpc3RlcnMgc2hvdWxkIGJlIGNhbGwtY2xvYmJlcmVkOyBpdCBpcyBwb3NzaWJsZSB0byB1c2UKICAgICBjYWxsLXNhdmVkIHJlZ2lzdGVycywgYnV0IG1heSBuZWdhdGl2ZWx5IGltcGFjdCBjb2RlIHNpemUuICBUaGUKICAgICB0YXJnZXQgbXVzdCBzdXBwb3J0IGF0IGxlYXN0IDIgZGF0YSByZWdpc3RlcnMsIGJ1dCBzaG91bGQgZGVmaW5lIDQKICAgICBpZiB0aGVyZSBhcmUgZW5vdWdoIGZyZWUgcmVnaXN0ZXJzLgoKICAgICBZb3UgbXVzdCBkZWZpbmUgdGhpcyBtYWNybyBpZiB5b3Ugd2FudCB0byBzdXBwb3J0IGNhbGwgZnJhbWUKICAgICBleGNlcHRpb24gaGFuZGxpbmcgbGlrZSB0aGF0IHByb3ZpZGVkIGJ5IERXQVJGIDIuCgogLS0gTWFjcm86IEVIX1JFVFVSTl9TVEFDS0FESl9SVFgKICAgICBBIEMgZXhwcmVzc2lvbiB3aG9zZSB2YWx1ZSBpcyBSVEwgcmVwcmVzZW50aW5nIGEgbG9jYXRpb24gaW4gd2hpY2gKICAgICB0byBzdG9yZSBhIHN0YWNrIGFkanVzdG1lbnQgdG8gYmUgYXBwbGllZCBiZWZvcmUgZnVuY3Rpb24gcmV0dXJuLgogICAgIFRoaXMgaXMgdXNlZCB0byB1bndpbmQgdGhlIHN0YWNrIHRvIGFuIGV4Y2VwdGlvbiBoYW5kbGVyJ3MgY2FsbAogICAgIGZyYW1lLiAgSXQgd2lsbCBiZSBhc3NpZ25lZCB6ZXJvIG9uIGNvZGUgcGF0aHMgdGhhdCByZXR1cm4KICAgICBub3JtYWxseS4KCiAgICAgVHlwaWNhbGx5IHRoaXMgaXMgYSBjYWxsLWNsb2JiZXJlZCBoYXJkIHJlZ2lzdGVyIHRoYXQgaXMgb3RoZXJ3aXNlCiAgICAgdW50b3VjaGVkIGJ5IHRoZSBlcGlsb2d1ZSwgYnV0IGNvdWxkIGFsc28gYmUgYSBzdGFjayBzbG90LgoKICAgICBEbyBub3QgZGVmaW5lIHRoaXMgbWFjcm8gaWYgdGhlIHN0YWNrIHBvaW50ZXIgaXMgc2F2ZWQgYW5kIHJlc3RvcmVkCiAgICAgYnkgdGhlIHJlZ3VsYXIgcHJvbG9nIGFuZCBlcGlsb2cgY29kZSBpbiB0aGUgY2FsbCBmcmFtZSBpdHNlbGY7IGluCiAgICAgdGhpcyBjYXNlLCB0aGUgZXhjZXB0aW9uIGhhbmRsaW5nIGxpYnJhcnkgcm91dGluZXMgd2lsbCB1cGRhdGUgdGhlCiAgICAgc3RhY2sgbG9jYXRpb24gdG8gYmUgcmVzdG9yZWQgaW4gcGxhY2UuICBPdGhlcndpc2UsIHlvdSBtdXN0IGRlZmluZQogICAgIHRoaXMgbWFjcm8gaWYgeW91IHdhbnQgdG8gc3VwcG9ydCBjYWxsIGZyYW1lIGV4Y2VwdGlvbiBoYW5kbGluZwogICAgIGxpa2UgdGhhdCBwcm92aWRlZCBieSBEV0FSRiAyLgoKIC0tIE1hY3JvOiBFSF9SRVRVUk5fSEFORExFUl9SVFgKICAgICBBIEMgZXhwcmVzc2lvbiB3aG9zZSB2YWx1ZSBpcyBSVEwgcmVwcmVzZW50aW5nIGEgbG9jYXRpb24gaW4gd2hpY2gKICAgICB0byBzdG9yZSB0aGUgYWRkcmVzcyBvZiBhbiBleGNlcHRpb24gaGFuZGxlciB0byB3aGljaCB3ZSBzaG91bGQKICAgICByZXR1cm4uICBJdCB3aWxsIG5vdCBiZSBhc3NpZ25lZCBvbiBjb2RlIHBhdGhzIHRoYXQgcmV0dXJuCiAgICAgbm9ybWFsbHkuCgogICAgIFR5cGljYWxseSB0aGlzIGlzIHRoZSBsb2NhdGlvbiBpbiB0aGUgY2FsbCBmcmFtZSBhdCB3aGljaCB0aGUKICAgICBub3JtYWwgcmV0dXJuIGFkZHJlc3MgaXMgc3RvcmVkLiAgRm9yIHRhcmdldHMgdGhhdCByZXR1cm4gYnkKICAgICBwb3BwaW5nIGFuIGFkZHJlc3Mgb2ZmIHRoZSBzdGFjaywgdGhpcyBtaWdodCBiZSBhIG1lbW9yeSBhZGRyZXNzCiAgICAganVzdCBiZWxvdyB0aGUgX3RhcmdldF8gY2FsbCBmcmFtZSByYXRoZXIgdGhhbiBpbnNpZGUgdGhlIGN1cnJlbnQKICAgICBjYWxsIGZyYW1lLiAgSWYgZGVmaW5lZCwgJ0VIX1JFVFVSTl9TVEFDS0FESl9SVFgnIHdpbGwgaGF2ZSBhbHJlYWR5CiAgICAgYmVlbiBhc3NpZ25lZCwgc28gaXQgbWF5IGJlIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBsb2NhdGlvbiBvZiB0aGUKICAgICB0YXJnZXQgY2FsbCBmcmFtZS4KCiAgICAgU29tZSB0YXJnZXRzIGhhdmUgbW9yZSBjb21wbGV4IHJlcXVpcmVtZW50cyB0aGFuIHN0b3JpbmcgdG8gYW4KICAgICBhZGRyZXNzIGNhbGN1bGFibGUgZHVyaW5nIGluaXRpYWwgY29kZSBnZW5lcmF0aW9uLiAgSW4gdGhhdCBjYXNlCiAgICAgdGhlICdlaF9yZXR1cm4nIGluc3RydWN0aW9uIHBhdHRlcm4gc2hvdWxkIGJlIHVzZWQgaW5zdGVhZC4KCiAgICAgSWYgeW91IHdhbnQgdG8gc3VwcG9ydCBjYWxsIGZyYW1lIGV4Y2VwdGlvbiBoYW5kbGluZywgeW91IG11c3QKICAgICBkZWZpbmUgZWl0aGVyIHRoaXMgbWFjcm8gb3IgdGhlICdlaF9yZXR1cm4nIGluc3RydWN0aW9uIHBhdHRlcm4uCgogLS0gTWFjcm86IFJFVFVSTl9BRERSX09GRlNFVAogICAgIElmIGRlZmluZWQsIGFuIGludGVnZXItdmFsdWVkIEMgZXhwcmVzc2lvbiBmb3Igd2hpY2ggcnRsIHdpbGwgYmUKICAgICBnZW5lcmF0ZWQgdG8gYWRkIGl0IHRvIHRoZSBleGNlcHRpb24gaGFuZGxlciBhZGRyZXNzIGJlZm9yZSBpdCBpcwogICAgIHNlYXJjaGVkIGluIHRoZSBleGNlcHRpb24gaGFuZGxpbmcgdGFibGVzLCBhbmQgdG8gc3VidHJhY3QgaXQgYWdhaW4KICAgICBmcm9tIHRoZSBhZGRyZXNzIGJlZm9yZSB1c2luZyBpdCB0byByZXR1cm4gdG8gdGhlIGV4Y2VwdGlvbgogICAgIGhhbmRsZXIuCgogLS0gTWFjcm86IEFTTV9QUkVGRVJSRURfRUhfREFUQV9GT1JNQVQgKENPREUsIEdMT0JBTCkKICAgICBUaGlzIG1hY3JvIGNob29zZXMgdGhlIGVuY29kaW5nIG9mIHBvaW50ZXJzIGVtYmVkZGVkIGluIHRoZQogICAgIGV4Y2VwdGlvbiBoYW5kbGluZyBzZWN0aW9ucy4gIElmIGF0IGFsbCBwb3NzaWJsZSwgdGhpcyBzaG91bGQgYmUKICAgICBkZWZpbmVkIHN1Y2ggdGhhdCB0aGUgZXhjZXB0aW9uIGhhbmRsaW5nIHNlY3Rpb24gd2lsbCBub3QgcmVxdWlyZQogICAgIGR5bmFtaWMgcmVsb2NhdGlvbnMsIGFuZCBzbyBtYXkgYmUgcmVhZC1vbmx5LgoKICAgICBDT0RFIGlzIDAgZm9yIGRhdGEsIDEgZm9yIGNvZGUgbGFiZWxzLCAyIGZvciBmdW5jdGlvbiBwb2ludGVycy4KICAgICBHTE9CQUwgaXMgdHJ1ZSBpZiB0aGUgc3ltYm9sIG1heSBiZSBhZmZlY3RlZCBieSBkeW5hbWljCiAgICAgcmVsb2NhdGlvbnMuICBUaGUgbWFjcm8gc2hvdWxkIHJldHVybiBhIGNvbWJpbmF0aW9uIG9mIHRoZQogICAgICdEV19FSF9QRV8qJyBkZWZpbmVzIGFzIGZvdW5kIGluICdkd2FyZjIuaCcuCgogICAgIElmIHRoaXMgbWFjcm8gaXMgbm90IGRlZmluZWQsIHBvaW50ZXJzIHdpbGwgbm90IGJlIGVuY29kZWQgYnV0CiAgICAgcmVwcmVzZW50ZWQgZGlyZWN0bHkuCgogLS0gTWFjcm86IEFTTV9NQVlCRV9PVVRQVVRfRU5DT0RFRF9BRERSX1JUWCAoRklMRSwgRU5DT0RJTkcsIFNJWkUsCiAgICAgICAgICBBRERSLCBET05FKQogICAgIFRoaXMgbWFjcm8gYWxsb3dzIHRoZSB0YXJnZXQgdG8gZW1pdCB3aGF0ZXZlciBzcGVjaWFsIG1hZ2ljIGlzCiAgICAgcmVxdWlyZWQgdG8gcmVwcmVzZW50IHRoZSBlbmNvZGluZyBjaG9zZW4gYnkKICAgICAnQVNNX1BSRUZFUlJFRF9FSF9EQVRBX0ZPUk1BVCcuICBHZW5lcmljIGNvZGUgdGFrZXMgY2FyZSBvZgogICAgIHBjLXJlbGF0aXZlIGFuZCBpbmRpcmVjdCBlbmNvZGluZ3M7IHRoaXMgbXVzdCBiZSBkZWZpbmVkIGlmIHRoZQogICAgIHRhcmdldCB1c2VzIHRleHQtcmVsYXRpdmUgb3IgZGF0YS1yZWxhdGl2ZSBlbmNvZGluZ3MuCgogICAgIFRoaXMgaXMgYSBDIHN0YXRlbWVudCB0aGF0IGJyYW5jaGVzIHRvIERPTkUgaWYgdGhlIGZvcm1hdCB3YXMKICAgICBoYW5kbGVkLiAgRU5DT0RJTkcgaXMgdGhlIGZvcm1hdCBjaG9zZW4sIFNJWkUgaXMgdGhlIG51bWJlciBvZgogICAgIGJ5dGVzIHRoYXQgdGhlIGZvcm1hdCBvY2N1cGllcywgQUREUiBpcyB0aGUgJ1NZTUJPTF9SRUYnIHRvIGJlCiAgICAgZW1pdHRlZC4KCiAtLSBNYWNybzogTURfVU5XSU5EX1NVUFBPUlQKICAgICBBIHN0cmluZyBzcGVjaWZ5aW5nIGEgZmlsZSB0byBiZSAjaW5jbHVkZSdkIGluIHVud2luZC1kdzIuYy4gIFRoZQogICAgIGZpbGUgc28gaW5jbHVkZWQgdHlwaWNhbGx5IGRlZmluZXMgJ01EX0ZBTExCQUNLX0ZSQU1FX1NUQVRFX0ZPUicuCgogLS0gTWFjcm86IE1EX0ZBTExCQUNLX0ZSQU1FX1NUQVRFX0ZPUiAoQ09OVEVYVCwgRlMpCiAgICAgVGhpcyBtYWNybyBhbGxvd3MgdGhlIHRhcmdldCB0byBhZGQgQ1BVIGFuZCBvcGVyYXRpbmcgc3lzdGVtCiAgICAgc3BlY2lmaWMgY29kZSB0byB0aGUgY2FsbC1mcmFtZSB1bndpbmRlciBmb3IgdXNlIHdoZW4gdGhlcmUgaXMgbm8KICAgICB1bndpbmQgZGF0YSBhdmFpbGFibGUuICBUaGUgbW9zdCBjb21tb24gcmVhc29uIHRvIGltcGxlbWVudCB0aGlzCiAgICAgbWFjcm8gaXMgdG8gdW53aW5kIHRocm91Z2ggc2lnbmFsIGZyYW1lcy4KCiAgICAgVGhpcyBtYWNybyBpcyBjYWxsZWQgZnJvbSAndXdfZnJhbWVfc3RhdGVfZm9yJyBpbiAndW53aW5kLWR3Mi5jJywKICAgICAndW53aW5kLWR3Mi14dGVuc2EuYycgYW5kICd1bndpbmQtaWE2NC5jJy4gIENPTlRFWFQgaXMgYW4KICAgICAnX1Vud2luZF9Db250ZXh0JzsgRlMgaXMgYW4gJ19VbndpbmRfRnJhbWVTdGF0ZScuICBFeGFtaW5lCiAgICAgJ2NvbnRleHQtPnJhJyBmb3IgdGhlIGFkZHJlc3Mgb2YgdGhlIGNvZGUgYmVpbmcgZXhlY3V0ZWQgYW5kCiAgICAgJ2NvbnRleHQtPmNmYScgZm9yIHRoZSBzdGFjayBwb2ludGVyIHZhbHVlLiAgSWYgdGhlIGZyYW1lIGNhbiBiZQogICAgIGRlY29kZWQsIHRoZSByZWdpc3RlciBzYXZlIGFkZHJlc3NlcyBzaG91bGQgYmUgdXBkYXRlZCBpbiBGUyBhbmQKICAgICB0aGUgbWFjcm8gc2hvdWxkIGV2YWx1YXRlIHRvICdfVVJDX05PX1JFQVNPTicuICBJZiB0aGUgZnJhbWUgY2Fubm90CiAgICAgYmUgZGVjb2RlZCwgdGhlIG1hY3JvIHNob3VsZCBldmFsdWF0ZSB0byAnX1VSQ19FTkRfT0ZfU1RBQ0snLgoKICAgICBGb3IgcHJvcGVyIHNpZ25hbCBoYW5kbGluZyBpbiBKYXZhIHRoaXMgbWFjcm8gaXMgYWNjb21wYW5pZWQgYnkKICAgICAnTUFLRV9USFJPV19GUkFNRScsIGRlZmluZWQgaW4gJ2xpYmphdmEvaW5jbHVkZS8qLXNpZ25hbC5oJwogICAgIGhlYWRlcnMuCgogLS0gTWFjcm86IE1EX0hBTkRMRV9VTldBQkkgKENPTlRFWFQsIEZTKQogICAgIFRoaXMgbWFjcm8gYWxsb3dzIHRoZSB0YXJnZXQgdG8gYWRkIG9wZXJhdGluZyBzeXN0ZW0gc3BlY2lmaWMgY29kZQogICAgIHRvIHRoZSBjYWxsLWZyYW1lIHVud2luZGVyIHRvIGhhbmRsZSB0aGUgSUEtNjQgJy51bndhYmknIHVud2luZGluZwogICAgIGRpcmVjdGl2ZSwgdXN1YWxseSB1c2VkIGZvciBzaWduYWwgb3IgaW50ZXJydXB0IGZyYW1lcy4KCiAgICAgVGhpcyBtYWNybyBpcyBjYWxsZWQgZnJvbSAndXdfdXBkYXRlX2NvbnRleHQnIGluICd1bndpbmQtaWE2NC5jJy4KICAgICBDT05URVhUIGlzIGFuICdfVW53aW5kX0NvbnRleHQnOyBGUyBpcyBhbiAnX1Vud2luZF9GcmFtZVN0YXRlJy4KICAgICBFeGFtaW5lICdmcy0+dW53YWJpJyBmb3IgdGhlIGFiaSBhbmQgY29udGV4dCBpbiB0aGUgJy51bndhYmknCiAgICAgZGlyZWN0aXZlLiAgSWYgdGhlICcudW53YWJpJyBkaXJlY3RpdmUgY2FuIGJlIGhhbmRsZWQsIHRoZSByZWdpc3RlcgogICAgIHNhdmUgYWRkcmVzc2VzIHNob3VsZCBiZSB1cGRhdGVkIGluIEZTLgoKIC0tIE1hY3JvOiBUQVJHRVRfVVNFU19XRUFLX1VOV0lORF9JTkZPCiAgICAgQSBDIGV4cHJlc3Npb24gdGhhdCBldmFsdWF0ZXMgdG8gdHJ1ZSBpZiB0aGUgdGFyZ2V0IHJlcXVpcmVzIHVud2luZAogICAgIGluZm8gdG8gYmUgZ2l2ZW4gY29tZGF0IGxpbmthZ2UuICBEZWZpbmUgaXQgdG8gYmUgJzEnIGlmIGNvbWRhdAogICAgIGxpbmthZ2UgaXMgbmVjZXNzYXJ5LiAgVGhlIGRlZmF1bHQgaXMgJzAnLgoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IFN0YWNrIENoZWNraW5nLCAgTmV4dDogRnJhbWUgUmVnaXN0ZXJzLCAgUHJldjogRXhjZXB0aW9uIEhhbmRsaW5nLCAgVXA6IFN0YWNrIGFuZCBDYWxsaW5nCgoxNS4xMC4zIFNwZWNpZnlpbmcgSG93IFN0YWNrIENoZWNraW5nIGlzIERvbmUKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpHQ0Mgd2lsbCBjaGVjayB0aGF0IHN0YWNrIHJlZmVyZW5jZXMgYXJlIHdpdGhpbiB0aGUgYm91bmRhcmllcyBvZiB0aGUKc3RhY2ssIGlmIHRoZSAnLWZzdGFjay1jaGVjaycgaXMgc3BlY2lmaWVkLCBpbiBvbmUgb2YgdGhyZWUgd2F5czoKCiAgMS4gSWYgdGhlIHZhbHVlIG9mIHRoZSAnU1RBQ0tfQ0hFQ0tfQlVJTFRJTicgbWFjcm8gaXMgbm9uemVybywgR0NDCiAgICAgd2lsbCBhc3N1bWUgdGhhdCB5b3UgaGF2ZSBhcnJhbmdlZCBmb3Igc3RhY2sgY2hlY2tpbmcgdG8gYmUgZG9uZSBhdAogICAgIGFwcHJvcHJpYXRlIHBsYWNlcyBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlcywgZS5nLiwgaW4KICAgICAnVEFSR0VUX0FTTV9GVU5DVElPTl9QUk9MT0dVRScuICBHQ0Mgd2lsbCBkbyBub3Qgb3RoZXIgc3BlY2lhbAogICAgIHByb2Nlc3NpbmcuCgogIDIuIElmICdTVEFDS19DSEVDS19CVUlMVElOJyBpcyB6ZXJvIGFuZCB5b3UgZGVmaW5lZCBhIG5hbWVkIHBhdHRlcm4KICAgICBjYWxsZWQgJ2NoZWNrX3N0YWNrJyBpbiB5b3VyICdtZCcgZmlsZSwgR0NDIHdpbGwgY2FsbCB0aGF0IHBhdHRlcm4KICAgICB3aXRoIG9uZSBhcmd1bWVudCB3aGljaCBpcyB0aGUgYWRkcmVzcyB0byBjb21wYXJlIHRoZSBzdGFjayB2YWx1ZQogICAgIGFnYWluc3QuICBZb3UgbXVzdCBhcnJhbmdlIGZvciB0aGlzIHBhdHRlcm4gdG8gcmVwb3J0IGFuIGVycm9yIGlmCiAgICAgdGhlIHN0YWNrIHBvaW50ZXIgaXMgb3V0IG9mIHJhbmdlLgoKICAzLiBJZiBuZWl0aGVyIG9mIHRoZSBhYm92ZSBhcmUgdHJ1ZSwgR0NDIHdpbGwgZ2VuZXJhdGUgY29kZSB0bwogICAgIHBlcmlvZGljYWxseSAicHJvYmUiIHRoZSBzdGFjayBwb2ludGVyIHVzaW5nIHRoZSB2YWx1ZXMgb2YgdGhlCiAgICAgbWFjcm9zIGRlZmluZWQgYmVsb3cuCgogTm9ybWFsbHksIHlvdSB3aWxsIHVzZSB0aGUgZGVmYXVsdCB2YWx1ZXMgb2YgdGhlc2UgbWFjcm9zLCBzbyBHQ0Mgd2lsbAp1c2UgdGhlIHRoaXJkIGFwcHJvYWNoLgoKIC0tIE1hY3JvOiBTVEFDS19DSEVDS19CVUlMVElOCiAgICAgQSBub256ZXJvIHZhbHVlIGlmIHN0YWNrIGNoZWNraW5nIGlzIGRvbmUgYnkgdGhlIGNvbmZpZ3VyYXRpb24KICAgICBmaWxlcyBpbiBhIG1hY2hpbmUtZGVwZW5kZW50IG1hbm5lci4gIFlvdSBzaG91bGQgZGVmaW5lIHRoaXMgbWFjcm8KICAgICBpZiBzdGFjayBjaGVja2luZyBpcyByZXF1aXJlIGJ5IHRoZSBBQkkgb2YgeW91ciBtYWNoaW5lIG9yIGlmIHlvdQogICAgIHdvdWxkIGxpa2UgdG8gaGF2ZSB0byBzdGFjayBjaGVja2luZyBpbiBzb21lIG1vcmUgZWZmaWNpZW50IHdheQogICAgIHRoYW4gR0NDJ3MgcG9ydGFibGUgYXBwcm9hY2guICBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGlzIG1hY3JvIGlzCiAgICAgemVyby4KCiAtLSBNYWNybzogU1RBQ0tfQ0hFQ0tfUFJPQkVfSU5URVJWQUwKICAgICBBbiBpbnRlZ2VyIHJlcHJlc2VudGluZyB0aGUgaW50ZXJ2YWwgYXQgd2hpY2ggR0NDIG11c3QgZ2VuZXJhdGUKICAgICBzdGFjayBwcm9iZSBpbnN0cnVjdGlvbnMuICBZb3Ugd2lsbCBub3JtYWxseSBkZWZpbmUgdGhpcyBtYWNybyB0bwogICAgIGJlIG5vIGxhcmdlciB0aGFuIHRoZSBzaXplIG9mIHRoZSAiZ3VhcmQgcGFnZXMiIGF0IHRoZSBlbmQgb2YgYQogICAgIHN0YWNrIGFyZWEuICBUaGUgZGVmYXVsdCB2YWx1ZSBvZiA0MDk2IGlzIHN1aXRhYmxlIGZvciBtb3N0CiAgICAgc3lzdGVtcy4KCiAtLSBNYWNybzogU1RBQ0tfQ0hFQ0tfUFJPQkVfTE9BRAogICAgIEEgaW50ZWdlciB3aGljaCBpcyBub256ZXJvIGlmIEdDQyBzaG91bGQgcGVyZm9ybSB0aGUgc3RhY2sgcHJvYmUgYXMKICAgICBhIGxvYWQgaW5zdHJ1Y3Rpb24gYW5kIHplcm8gaWYgR0NDIHNob3VsZCB1c2UgYSBzdG9yZSBpbnN0cnVjdGlvbi4KICAgICBUaGUgZGVmYXVsdCBpcyB6ZXJvLCB3aGljaCBpcyB0aGUgbW9zdCBlZmZpY2llbnQgY2hvaWNlIG9uIG1vc3QKICAgICBzeXN0ZW1zLgoKIC0tIE1hY3JvOiBTVEFDS19DSEVDS19QUk9URUNUCiAgICAgVGhlIG51bWJlciBvZiBieXRlcyBvZiBzdGFjayBuZWVkZWQgdG8gcmVjb3ZlciBmcm9tIGEgc3RhY2sKICAgICBvdmVyZmxvdywgZm9yIGxhbmd1YWdlcyB3aGVyZSBzdWNoIGEgcmVjb3ZlcnkgaXMgc3VwcG9ydGVkLiAgVGhlCiAgICAgZGVmYXVsdCB2YWx1ZSBvZiA3NSB3b3JkcyBzaG91bGQgYmUgYWRlcXVhdGUgZm9yIG1vc3QgbWFjaGluZXMuCgogLS0gTWFjcm86IFNUQUNLX0NIRUNLX01BWF9GUkFNRV9TSVpFCiAgICAgVGhlIG1heGltdW0gc2l6ZSBvZiBhIHN0YWNrIGZyYW1lLCBpbiBieXRlcy4gIEdDQyB3aWxsIGdlbmVyYXRlCiAgICAgcHJvYmUgaW5zdHJ1Y3Rpb25zIGluIG5vbi1sZWFmIGZ1bmN0aW9ucyB0byBlbnN1cmUgYXQgbGVhc3QgdGhpcwogICAgIG1hbnkgYnl0ZXMgb2Ygc3RhY2sgYXJlIGF2YWlsYWJsZS4gIElmIGEgc3RhY2sgZnJhbWUgaXMgbGFyZ2VyIHRoYW4KICAgICB0aGlzIHNpemUsIHN0YWNrIGNoZWNraW5nIHdpbGwgbm90IGJlIHJlbGlhYmxlIGFuZCBHQ0Mgd2lsbCBpc3N1ZSBhCiAgICAgd2FybmluZy4gIFRoZSBkZWZhdWx0IGlzIGNob3NlbiBzbyB0aGF0IEdDQyBvbmx5IGdlbmVyYXRlcyBvbmUKICAgICBpbnN0cnVjdGlvbiBvbiBtb3N0IHN5c3RlbXMuICBZb3Ugc2hvdWxkIG5vcm1hbGx5IG5vdCBjaGFuZ2UgdGhlCiAgICAgZGVmYXVsdCB2YWx1ZSBvZiB0aGlzIG1hY3JvLgoKIC0tIE1hY3JvOiBTVEFDS19DSEVDS19GSVhFRF9GUkFNRV9TSVpFCiAgICAgR0NDIHVzZXMgdGhpcyB2YWx1ZSB0byBnZW5lcmF0ZSB0aGUgYWJvdmUgd2FybmluZyBtZXNzYWdlLiAgSXQKICAgICByZXByZXNlbnRzIHRoZSBhbW91bnQgb2YgZml4ZWQgZnJhbWUgdXNlZCBieSBhIGZ1bmN0aW9uLCBub3QKICAgICBpbmNsdWRpbmcgc3BhY2UgZm9yIGFueSBjYWxsZWUtc2F2ZWQgcmVnaXN0ZXJzLCB0ZW1wb3JhcmllcyBhbmQKICAgICB1c2VyIHZhcmlhYmxlcy4gIFlvdSBuZWVkIG9ubHkgc3BlY2lmeSBhbiB1cHBlciBib3VuZCBmb3IgdGhpcwogICAgIGFtb3VudCBhbmQgd2lsbCBub3JtYWxseSB1c2UgdGhlIGRlZmF1bHQgb2YgZm91ciB3b3Jkcy4KCiAtLSBNYWNybzogU1RBQ0tfQ0hFQ0tfTUFYX1ZBUl9TSVpFCiAgICAgVGhlIG1heGltdW0gc2l6ZSwgaW4gYnl0ZXMsIG9mIGFuIG9iamVjdCB0aGF0IEdDQyB3aWxsIHBsYWNlIGluIHRoZQogICAgIGZpeGVkIGFyZWEgb2YgdGhlIHN0YWNrIGZyYW1lIHdoZW4gdGhlIHVzZXIgc3BlY2lmaWVzCiAgICAgJy1mc3RhY2stY2hlY2snLiAgR0NDIGNvbXB1dGVkIHRoZSBkZWZhdWx0IGZyb20gdGhlIHZhbHVlcyBvZiB0aGUKICAgICBhYm92ZSBtYWNyb3MgYW5kIHlvdSB3aWxsIG5vcm1hbGx5IG5vdCBuZWVkIHRvIG92ZXJyaWRlIHRoYXQKICAgICBkZWZhdWx0LgoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IEZyYW1lIFJlZ2lzdGVycywgIE5leHQ6IEVsaW1pbmF0aW9uLCAgUHJldjogU3RhY2sgQ2hlY2tpbmcsICBVcDogU3RhY2sgYW5kIENhbGxpbmcKCjE1LjEwLjQgUmVnaXN0ZXJzIFRoYXQgQWRkcmVzcyB0aGUgU3RhY2sgRnJhbWUKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKVGhpcyBkaXNjdXNzZXMgcmVnaXN0ZXJzIHRoYXQgYWRkcmVzcyB0aGUgc3RhY2sgZnJhbWUuCgogLS0gTWFjcm86IFNUQUNLX1BPSU5URVJfUkVHTlVNCiAgICAgVGhlIHJlZ2lzdGVyIG51bWJlciBvZiB0aGUgc3RhY2sgcG9pbnRlciByZWdpc3Rlciwgd2hpY2ggbXVzdCBhbHNvCiAgICAgYmUgYSBmaXhlZCByZWdpc3RlciBhY2NvcmRpbmcgdG8gJ0ZJWEVEX1JFR0lTVEVSUycuICBPbiBtb3N0CiAgICAgbWFjaGluZXMsIHRoZSBoYXJkd2FyZSBkZXRlcm1pbmVzIHdoaWNoIHJlZ2lzdGVyIHRoaXMgaXMuCgogLS0gTWFjcm86IEZSQU1FX1BPSU5URVJfUkVHTlVNCiAgICAgVGhlIHJlZ2lzdGVyIG51bWJlciBvZiB0aGUgZnJhbWUgcG9pbnRlciByZWdpc3Rlciwgd2hpY2ggaXMgdXNlZCB0bwogICAgIGFjY2VzcyBhdXRvbWF0aWMgdmFyaWFibGVzIGluIHRoZSBzdGFjayBmcmFtZS4gIE9uIHNvbWUgbWFjaGluZXMsCiAgICAgdGhlIGhhcmR3YXJlIGRldGVybWluZXMgd2hpY2ggcmVnaXN0ZXIgdGhpcyBpcy4gIE9uIG90aGVyIG1hY2hpbmVzLAogICAgIHlvdSBjYW4gY2hvb3NlIGFueSByZWdpc3RlciB5b3Ugd2lzaCBmb3IgdGhpcyBwdXJwb3NlLgoKIC0tIE1hY3JvOiBIQVJEX0ZSQU1FX1BPSU5URVJfUkVHTlVNCiAgICAgT24gc29tZSBtYWNoaW5lcyB0aGUgb2Zmc2V0IGJldHdlZW4gdGhlIGZyYW1lIHBvaW50ZXIgYW5kIHN0YXJ0aW5nCiAgICAgb2Zmc2V0IG9mIHRoZSBhdXRvbWF0aWMgdmFyaWFibGVzIGlzIG5vdCBrbm93biB1bnRpbCBhZnRlciByZWdpc3RlcgogICAgIGFsbG9jYXRpb24gaGFzIGJlZW4gZG9uZSAoZm9yIGV4YW1wbGUsIGJlY2F1c2UgdGhlIHNhdmVkIHJlZ2lzdGVycwogICAgIGFyZSBiZXR3ZWVuIHRoZXNlIHR3byBsb2NhdGlvbnMpLiAgT24gdGhvc2UgbWFjaGluZXMsIGRlZmluZQogICAgICdGUkFNRV9QT0lOVEVSX1JFR05VTScgdGhlIG51bWJlciBvZiBhIHNwZWNpYWwsIGZpeGVkIHJlZ2lzdGVyIHRvCiAgICAgYmUgdXNlZCBpbnRlcm5hbGx5IHVudGlsIHRoZSBvZmZzZXQgaXMga25vd24sIGFuZCBkZWZpbmUKICAgICAnSEFSRF9GUkFNRV9QT0lOVEVSX1JFR05VTScgdG8gYmUgdGhlIGFjdHVhbCBoYXJkIHJlZ2lzdGVyIG51bWJlcgogICAgIHVzZWQgZm9yIHRoZSBmcmFtZSBwb2ludGVyLgoKICAgICBZb3Ugc2hvdWxkIGRlZmluZSB0aGlzIG1hY3JvIG9ubHkgaW4gdGhlIHZlcnkgcmFyZSBjaXJjdW1zdGFuY2VzCiAgICAgd2hlbiBpdCBpcyBub3QgcG9zc2libGUgdG8gY2FsY3VsYXRlIHRoZSBvZmZzZXQgYmV0d2VlbiB0aGUgZnJhbWUKICAgICBwb2ludGVyIGFuZCB0aGUgYXV0b21hdGljIHZhcmlhYmxlcyB1bnRpbCBhZnRlciByZWdpc3RlciBhbGxvY2F0aW9uCiAgICAgaGFzIGJlZW4gY29tcGxldGVkLiAgV2hlbiB0aGlzIG1hY3JvIGlzIGRlZmluZWQsIHlvdSBtdXN0IGFsc28KICAgICBpbmRpY2F0ZSBpbiB5b3VyIGRlZmluaXRpb24gb2YgJ0VMSU1JTkFCTEVfUkVHUycgaG93IHRvIGVsaW1pbmF0ZQogICAgICdGUkFNRV9QT0lOVEVSX1JFR05VTScgaW50byBlaXRoZXIgJ0hBUkRfRlJBTUVfUE9JTlRFUl9SRUdOVU0nIG9yCiAgICAgJ1NUQUNLX1BPSU5URVJfUkVHTlVNJy4KCiAgICAgRG8gbm90IGRlZmluZSB0aGlzIG1hY3JvIGlmIGl0IHdvdWxkIGJlIHRoZSBzYW1lIGFzCiAgICAgJ0ZSQU1FX1BPSU5URVJfUkVHTlVNJy4KCiAtLSBNYWNybzogQVJHX1BPSU5URVJfUkVHTlVNCiAgICAgVGhlIHJlZ2lzdGVyIG51bWJlciBvZiB0aGUgYXJnIHBvaW50ZXIgcmVnaXN0ZXIsIHdoaWNoIGlzIHVzZWQgdG8KICAgICBhY2Nlc3MgdGhlIGZ1bmN0aW9uJ3MgYXJndW1lbnQgbGlzdC4gIE9uIHNvbWUgbWFjaGluZXMsIHRoaXMgaXMgdGhlCiAgICAgc2FtZSBhcyB0aGUgZnJhbWUgcG9pbnRlciByZWdpc3Rlci4gIE9uIHNvbWUgbWFjaGluZXMsIHRoZSBoYXJkd2FyZQogICAgIGRldGVybWluZXMgd2hpY2ggcmVnaXN0ZXIgdGhpcyBpcy4gIE9uIG90aGVyIG1hY2hpbmVzLCB5b3UgY2FuCiAgICAgY2hvb3NlIGFueSByZWdpc3RlciB5b3Ugd2lzaCBmb3IgdGhpcyBwdXJwb3NlLiAgSWYgdGhpcyBpcyBub3QgdGhlCiAgICAgc2FtZSByZWdpc3RlciBhcyB0aGUgZnJhbWUgcG9pbnRlciByZWdpc3RlciwgdGhlbiB5b3UgbXVzdCBtYXJrIGl0CiAgICAgYXMgYSBmaXhlZCByZWdpc3RlciBhY2NvcmRpbmcgdG8gJ0ZJWEVEX1JFR0lTVEVSUycsIG9yIGFycmFuZ2UgdG8KICAgICBiZSBhYmxlIHRvIGVsaW1pbmF0ZSBpdCAoKm5vdGUgRWxpbWluYXRpb246OikuCgogLS0gTWFjcm86IFJFVFVSTl9BRERSRVNTX1BPSU5URVJfUkVHTlVNCiAgICAgVGhlIHJlZ2lzdGVyIG51bWJlciBvZiB0aGUgcmV0dXJuIGFkZHJlc3MgcG9pbnRlciByZWdpc3Rlciwgd2hpY2gKICAgICBpcyB1c2VkIHRvIGFjY2VzcyB0aGUgY3VycmVudCBmdW5jdGlvbidzIHJldHVybiBhZGRyZXNzIGZyb20gdGhlCiAgICAgc3RhY2suICBPbiBzb21lIG1hY2hpbmVzLCB0aGUgcmV0dXJuIGFkZHJlc3MgaXMgbm90IGF0IGEgZml4ZWQKICAgICBvZmZzZXQgZnJvbSB0aGUgZnJhbWUgcG9pbnRlciBvciBzdGFjayBwb2ludGVyIG9yIGFyZ3VtZW50IHBvaW50ZXIuCiAgICAgVGhpcyByZWdpc3RlciBjYW4gYmUgZGVmaW5lZCB0byBwb2ludCB0byB0aGUgcmV0dXJuIGFkZHJlc3Mgb24gdGhlCiAgICAgc3RhY2ssIGFuZCB0aGVuIGJlIGNvbnZlcnRlZCBieSAnRUxJTUlOQUJMRV9SRUdTJyBpbnRvIGVpdGhlciB0aGUKICAgICBmcmFtZSBwb2ludGVyIG9yIHN0YWNrIHBvaW50ZXIuCgogICAgIERvIG5vdCBkZWZpbmUgdGhpcyBtYWNybyB1bmxlc3MgdGhlcmUgaXMgbm8gb3RoZXIgd2F5IHRvIGdldCB0aGUKICAgICByZXR1cm4gYWRkcmVzcyBmcm9tIHRoZSBzdGFjay4KCiAtLSBNYWNybzogU1RBVElDX0NIQUlOX1JFR05VTQogLS0gTWFjcm86IFNUQVRJQ19DSEFJTl9JTkNPTUlOR19SRUdOVU0KICAgICBSZWdpc3RlciBudW1iZXJzIHVzZWQgZm9yIHBhc3NpbmcgYSBmdW5jdGlvbidzIHN0YXRpYyBjaGFpbgogICAgIHBvaW50ZXIuICBJZiByZWdpc3RlciB3aW5kb3dzIGFyZSB1c2VkLCB0aGUgcmVnaXN0ZXIgbnVtYmVyIGFzIHNlZW4KICAgICBieSB0aGUgY2FsbGVkIGZ1bmN0aW9uIGlzICdTVEFUSUNfQ0hBSU5fSU5DT01JTkdfUkVHTlVNJywgd2hpbGUgdGhlCiAgICAgcmVnaXN0ZXIgbnVtYmVyIGFzIHNlZW4gYnkgdGhlIGNhbGxpbmcgZnVuY3Rpb24gaXMKICAgICAnU1RBVElDX0NIQUlOX1JFR05VTScuICBJZiB0aGVzZSByZWdpc3RlcnMgYXJlIHRoZSBzYW1lLAogICAgICdTVEFUSUNfQ0hBSU5fSU5DT01JTkdfUkVHTlVNJyBuZWVkIG5vdCBiZSBkZWZpbmVkLgoKICAgICBUaGUgc3RhdGljIGNoYWluIHJlZ2lzdGVyIG5lZWQgbm90IGJlIGEgZml4ZWQgcmVnaXN0ZXIuCgogICAgIElmIHRoZSBzdGF0aWMgY2hhaW4gaXMgcGFzc2VkIGluIG1lbW9yeSwgdGhlc2UgbWFjcm9zIHNob3VsZCBub3QgYmUKICAgICBkZWZpbmVkOyBpbnN0ZWFkLCB0aGUgbmV4dCB0d28gbWFjcm9zIHNob3VsZCBiZSBkZWZpbmVkLgoKIC0tIE1hY3JvOiBTVEFUSUNfQ0hBSU4KIC0tIE1hY3JvOiBTVEFUSUNfQ0hBSU5fSU5DT01JTkcKICAgICBJZiB0aGUgc3RhdGljIGNoYWluIGlzIHBhc3NlZCBpbiBtZW1vcnksIHRoZXNlIG1hY3JvcyBwcm92aWRlIHJ0eAogICAgIGdpdmluZyAnbWVtJyBleHByZXNzaW9ucyB0aGF0IGRlbm90ZSB3aGVyZSB0aGV5IGFyZSBzdG9yZWQuCiAgICAgJ1NUQVRJQ19DSEFJTicgYW5kICdTVEFUSUNfQ0hBSU5fSU5DT01JTkcnIGdpdmUgdGhlIGxvY2F0aW9ucyBhcwogICAgIHNlZW4gYnkgdGhlIGNhbGxpbmcgYW5kIGNhbGxlZCBmdW5jdGlvbnMsIHJlc3BlY3RpdmVseS4gIE9mdGVuIHRoZQogICAgIGZvcm1lciB3aWxsIGJlIGF0IGFuIG9mZnNldCBmcm9tIHRoZSBzdGFjayBwb2ludGVyIGFuZCB0aGUgbGF0dGVyCiAgICAgYXQgYW4gb2Zmc2V0IGZyb20gdGhlIGZyYW1lIHBvaW50ZXIuCgogICAgIFRoZSB2YXJpYWJsZXMgJ3N0YWNrX3BvaW50ZXJfcnR4JywgJ2ZyYW1lX3BvaW50ZXJfcnR4JywgYW5kCiAgICAgJ2FyZ19wb2ludGVyX3J0eCcgd2lsbCBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQgcHJpb3IgdG8gdGhlIHVzZSBvZgogICAgIHRoZXNlIG1hY3JvcyBhbmQgc2hvdWxkIGJlIHVzZWQgdG8gcmVmZXIgdG8gdGhvc2UgaXRlbXMuCgogICAgIElmIHRoZSBzdGF0aWMgY2hhaW4gaXMgcGFzc2VkIGluIGEgcmVnaXN0ZXIsIHRoZSB0d28gcHJldmlvdXMKICAgICBtYWNyb3Mgc2hvdWxkIGJlIGRlZmluZWQgaW5zdGVhZC4KCiAtLSBNYWNybzogRFdBUkZfRlJBTUVfUkVHSVNURVJTCiAgICAgVGhpcyBtYWNybyBzcGVjaWZpZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGhhcmQgcmVnaXN0ZXJzIHRoYXQgY2FuCiAgICAgYmUgc2F2ZWQgaW4gYSBjYWxsIGZyYW1lLiAgVGhpcyBpcyB1c2VkIHRvIHNpemUgZGF0YSBzdHJ1Y3R1cmVzCiAgICAgdXNlZCBpbiBEV0FSRjIgZXhjZXB0aW9uIGhhbmRsaW5nLgoKICAgICBQcmlvciB0byBHQ0MgMy4wLCB0aGlzIG1hY3JvIHdhcyBuZWVkZWQgaW4gb3JkZXIgdG8gZXN0YWJsaXNoIGEKICAgICBzdGFibGUgZXhjZXB0aW9uIGhhbmRsaW5nIEFCSSBpbiB0aGUgZmFjZSBvZiBhZGRpbmcgbmV3IGhhcmQKICAgICByZWdpc3RlcnMgZm9yIElTQSBleHRlbnNpb25zLiAgSW4gR0NDIDMuMCBhbmQgbGF0ZXIsIHRoZSBFSCBBQkkgaXMKICAgICBpbnN1bGF0ZWQgZnJvbSBjaGFuZ2VzIGluIHRoZSBudW1iZXIgb2YgaGFyZCByZWdpc3RlcnMuCiAgICAgTmV2ZXJ0aGVsZXNzLCB0aGlzIG1hY3JvIGNhbiBzdGlsbCBiZSB1c2VkIHRvIHJlZHVjZSB0aGUgcnVudGltZQogICAgIG1lbW9yeSByZXF1aXJlbWVudHMgb2YgdGhlIGV4Y2VwdGlvbiBoYW5kbGluZyByb3V0aW5lcywgd2hpY2ggY2FuCiAgICAgYmUgc3Vic3RhbnRpYWwgaWYgdGhlIElTQSBjb250YWlucyBhIGxvdCBvZiByZWdpc3RlcnMgdGhhdCBhcmUgbm90CiAgICAgY2FsbC1zYXZlZC4KCiAgICAgSWYgdGhpcyBtYWNybyBpcyBub3QgZGVmaW5lZCwgaXQgZGVmYXVsdHMgdG8KICAgICAnRklSU1RfUFNFVURPX1JFR0lTVEVSJy4KCiAtLSBNYWNybzogUFJFX0dDQzNfRFdBUkZfRlJBTUVfUkVHSVNURVJTCgogICAgIFRoaXMgbWFjcm8gaXMgc2ltaWxhciB0byAnRFdBUkZfRlJBTUVfUkVHSVNURVJTJywgYnV0IGlzIHByb3ZpZGVkCiAgICAgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgaW4gcHJlIEdDQyAzLjAgY29tcGlsZWQgY29kZS4KCiAgICAgSWYgdGhpcyBtYWNybyBpcyBub3QgZGVmaW5lZCwgaXQgZGVmYXVsdHMgdG8KICAgICAnRFdBUkZfRlJBTUVfUkVHSVNURVJTJy4KCiAtLSBNYWNybzogRFdBUkZfUkVHX1RPX1VOV0lORF9DT0xVTU4gKFJFR05PKQoKICAgICBEZWZpbmUgdGhpcyBtYWNybyBpZiB0aGUgdGFyZ2V0J3MgcmVwcmVzZW50YXRpb24gZm9yIGR3YXJmCiAgICAgcmVnaXN0ZXJzIGlzIGRpZmZlcmVudCB0aGFuIHRoZSBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiBmb3IgdW53aW5kCiAgICAgY29sdW1uLiAgR2l2ZW4gYSBkd2FyZiByZWdpc3RlciwgdGhpcyBtYWNybyBzaG91bGQgcmV0dXJuIHRoZQogICAgIGludGVybmFsIHVud2luZCBjb2x1bW4gbnVtYmVyIHRvIHVzZSBpbnN0ZWFkLgoKICAgICBTZWUgdGhlIFBvd2VyUEMncyBTUEUgdGFyZ2V0IGZvciBhbiBleGFtcGxlLgoKIC0tIE1hY3JvOiBEV0FSRl9GUkFNRV9SRUdOVU0gKFJFR05PKQoKICAgICBEZWZpbmUgdGhpcyBtYWNybyBpZiB0aGUgdGFyZ2V0J3MgcmVwcmVzZW50YXRpb24gZm9yIGR3YXJmCiAgICAgcmVnaXN0ZXJzIHVzZWQgaW4gLmVoX2ZyYW1lIG9yIC5kZWJ1Z19mcmFtZSBpcyBkaWZmZXJlbnQgZnJvbSB0aGF0CiAgICAgdXNlZCBpbiBvdGhlciBkZWJ1ZyBpbmZvIHNlY3Rpb25zLiAgR2l2ZW4gYSBHQ0MgaGFyZCByZWdpc3RlcgogICAgIG51bWJlciwgdGhpcyBtYWNybyBzaG91bGQgcmV0dXJuIHRoZSAuZWhfZnJhbWUgcmVnaXN0ZXIgbnVtYmVyLgogICAgIFRoZSBkZWZhdWx0IGlzICdEQlhfUkVHSVNURVJfTlVNQkVSIChSRUdOTyknLgoKIC0tIE1hY3JvOiBEV0FSRjJfRlJBTUVfUkVHX09VVCAoUkVHTk8sIEZPUl9FSCkKCiAgICAgRGVmaW5lIHRoaXMgbWFjcm8gdG8gbWFwIHJlZ2lzdGVyIG51bWJlcnMgaGVsZCBpbiB0aGUgY2FsbCBmcmFtZQogICAgIGluZm8gdGhhdCBHQ0MgaGFzIGNvbGxlY3RlZCB1c2luZyAnRFdBUkZfRlJBTUVfUkVHTlVNJyB0byB0aG9zZQogICAgIHRoYXQgc2hvdWxkIGJlIG91dHB1dCBpbiAuZGVidWdfZnJhbWUgKCdGT1JfRUgnIGlzIHplcm8pIGFuZAogICAgIC5laF9mcmFtZSAoJ0ZPUl9FSCcgaXMgbm9uemVybykuICBUaGUgZGVmYXVsdCBpcyB0byByZXR1cm4gJ1JFR05PJy4KCh8KRmlsZTogZ2NjaW50LmluZm8sICBOb2RlOiBFbGltaW5hdGlvbiwgIE5leHQ6IFN0YWNrIEFyZ3VtZW50cywgIFByZXY6IEZyYW1lIFJlZ2lzdGVycywgIFVwOiBTdGFjayBhbmQgQ2FsbGluZwoKMTUuMTAuNSBFbGltaW5hdGluZyBGcmFtZSBQb2ludGVyIGFuZCBBcmcgUG9pbnRlcgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpUaGlzIGlzIGFib3V0IGVsaW1pbmF0aW5nIHRoZSBmcmFtZSBwb2ludGVyIGFuZCBhcmcgcG9pbnRlci4KCiAtLSBNYWNybzogRlJBTUVfUE9JTlRFUl9SRVFVSVJFRAogICAgIEEgQyBleHByZXNzaW9uIHdoaWNoIGlzIG5vbnplcm8gaWYgYSBmdW5jdGlvbiBtdXN0IGhhdmUgYW5kIHVzZSBhCiAgICAgZnJhbWUgcG9pbnRlci4gIFRoaXMgZXhwcmVzc2lvbiBpcyBldmFsdWF0ZWQgaW4gdGhlIHJlbG9hZCBwYXNzLgogICAgIElmIGl0cyB2YWx1ZSBpcyBub256ZXJvIHRoZSBmdW5jdGlvbiB3aWxsIGhhdmUgYSBmcmFtZSBwb2ludGVyLgoKICAgICBUaGUgZXhwcmVzc2lvbiBjYW4gaW4gcHJpbmNpcGxlIGV4YW1pbmUgdGhlIGN1cnJlbnQgZnVuY3Rpb24gYW5kCiAgICAgZGVjaWRlIGFjY29yZGluZyB0byB0aGUgZmFjdHMsIGJ1dCBvbiBtb3N0IG1hY2hpbmVzIHRoZSBjb25zdGFudCAwCiAgICAgb3IgdGhlIGNvbnN0YW50IDEgc3VmZmljZXMuICBVc2UgMCB3aGVuIHRoZSBtYWNoaW5lIGFsbG93cyBjb2RlIHRvCiAgICAgYmUgZ2VuZXJhdGVkIHdpdGggbm8gZnJhbWUgcG9pbnRlciwgYW5kIGRvaW5nIHNvIHNhdmVzIHNvbWUgdGltZSBvcgogICAgIHNwYWNlLiAgVXNlIDEgd2hlbiB0aGVyZSBpcyBubyBwb3NzaWJsZSBhZHZhbnRhZ2UgdG8gYXZvaWRpbmcgYQogICAgIGZyYW1lIHBvaW50ZXIuCgogICAgIEluIGNlcnRhaW4gY2FzZXMsIHRoZSBjb21waWxlciBkb2VzIG5vdCBrbm93IGhvdyB0byBwcm9kdWNlIHZhbGlkCiAgICAgY29kZSB3aXRob3V0IGEgZnJhbWUgcG9pbnRlci4gIFRoZSBjb21waWxlciByZWNvZ25pemVzIHRob3NlIGNhc2VzCiAgICAgYW5kIGF1dG9tYXRpY2FsbHkgZ2l2ZXMgdGhlIGZ1bmN0aW9uIGEgZnJhbWUgcG9pbnRlciByZWdhcmRsZXNzIG9mCiAgICAgd2hhdCAnRlJBTUVfUE9JTlRFUl9SRVFVSVJFRCcgc2F5cy4gIFlvdSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0CiAgICAgdGhlbS4KCiAgICAgSW4gYSBmdW5jdGlvbiB0aGF0IGRvZXMgbm90IHJlcXVpcmUgYSBmcmFtZSBwb2ludGVyLCB0aGUgZnJhbWUKICAgICBwb2ludGVyIHJlZ2lzdGVyIGNhbiBiZSBhbGxvY2F0ZWQgZm9yIG9yZGluYXJ5IHVzYWdlLCB1bmxlc3MgeW91CiAgICAgbWFyayBpdCBhcyBhIGZpeGVkIHJlZ2lzdGVyLiAgU2VlICdGSVhFRF9SRUdJU1RFUlMnIGZvciBtb3JlCiAgICAgaW5mb3JtYXRpb24uCgogLS0gTWFjcm86IElOSVRJQUxfRlJBTUVfUE9JTlRFUl9PRkZTRVQgKERFUFRILVZBUikKICAgICBBIEMgc3RhdGVtZW50IHRvIHN0b3JlIGluIHRoZSB2YXJpYWJsZSBERVBUSC1WQVIgdGhlIGRpZmZlcmVuY2UKICAgICBiZXR3ZWVuIHRoZSBmcmFtZSBwb2ludGVyIGFuZCB0aGUgc3RhY2sgcG9pbnRlciB2YWx1ZXMgaW1tZWRpYXRlbHkKICAgICBhZnRlciB0aGUgZnVuY3Rpb24gcHJvbG9ndWUuICBUaGUgdmFsdWUgd291bGQgYmUgY29tcHV0ZWQgZnJvbQogICAgIGluZm9ybWF0aW9uIHN1Y2ggYXMgdGhlIHJlc3VsdCBvZiAnZ2V0X2ZyYW1lX3NpemUgKCknIGFuZCB0aGUKICAgICB0YWJsZXMgb2YgcmVnaXN0ZXJzICdyZWdzX2V2ZXJfbGl2ZScgYW5kICdjYWxsX3VzZWRfcmVncycuCgogICAgIElmICdFTElNSU5BQkxFX1JFR1MnIGlzIGRlZmluZWQsIHRoaXMgbWFjcm8gd2lsbCBiZSBub3QgYmUgdXNlZCBhbmQKICAgICBuZWVkIG5vdCBiZSBkZWZpbmVkLiAgT3RoZXJ3aXNlLCBpdCBtdXN0IGJlIGRlZmluZWQgZXZlbiBpZgogICAgICdGUkFNRV9QT0lOVEVSX1JFUVVJUkVEJyBpcyBkZWZpbmVkIHRvIGFsd2F5cyBiZSB0cnVlOyBpbiB0aGF0CiAgICAgY2FzZSwgeW91IG1heSBzZXQgREVQVEgtVkFSIHRvIGFueXRoaW5nLgoKIC0tIE1hY3JvOiBFTElNSU5BQkxFX1JFR1MKICAgICBJZiBkZWZpbmVkLCB0aGlzIG1hY3JvIHNwZWNpZmllcyBhIHRhYmxlIG9mIHJlZ2lzdGVyIHBhaXJzIHVzZWQgdG8KICAgICBlbGltaW5hdGUgdW5uZWVkZWQgcmVnaXN0ZXJzIHRoYXQgcG9pbnQgaW50byB0aGUgc3RhY2sgZnJhbWUuICBJZgogICAgIGl0IGlzIG5vdCBkZWZpbmVkLCB0aGUgb25seSBlbGltaW5hdGlvbiBhdHRlbXB0ZWQgYnkgdGhlIGNvbXBpbGVyCiAgICAgaXMgdG8gcmVwbGFjZSByZWZlcmVuY2VzIHRvIHRoZSBmcmFtZSBwb2ludGVyIHdpdGggcmVmZXJlbmNlcyB0bwogICAgIHRoZSBzdGFjayBwb2ludGVyLgoKICAgICBUaGUgZGVmaW5pdGlvbiBvZiB0aGlzIG1hY3JvIGlzIGEgbGlzdCBvZiBzdHJ1Y3R1cmUKICAgICBpbml0aWFsaXphdGlvbnMsIGVhY2ggb2Ygd2hpY2ggc3BlY2lmaWVzIGFuIG9yaWdpbmFsIGFuZAogICAgIHJlcGxhY2VtZW50IHJlZ2lzdGVyLgoKICAgICBPbiBzb21lIG1hY2hpbmVzLCB0aGUgcG9zaXRpb24gb2YgdGhlIGFyZ3VtZW50IHBvaW50ZXIgaXMgbm90IGtub3duCiAgICAgdW50aWwgdGhlIGNvbXBpbGF0aW9uIGlzIGNvbXBsZXRlZC4gIEluIHN1Y2ggYSBjYXNlLCBhIHNlcGFyYXRlCiAgICAgaGFyZCByZWdpc3RlciBtdXN0IGJlIHVzZWQgZm9yIHRoZSBhcmd1bWVudCBwb2ludGVyLiAgVGhpcyByZWdpc3RlcgogICAgIGNhbiBiZSBlbGltaW5hdGVkIGJ5IHJlcGxhY2luZyBpdCB3aXRoIGVpdGhlciB0aGUgZnJhbWUgcG9pbnRlciBvcgogICAgIHRoZSBhcmd1bWVudCBwb2ludGVyLCBkZXBlbmRpbmcgb24gd2hldGhlciBvciBub3QgdGhlIGZyYW1lIHBvaW50ZXIKICAgICBoYXMgYmVlbiBlbGltaW5hdGVkLgoKICAgICBJbiB0aGlzIGNhc2UsIHlvdSBtaWdodCBzcGVjaWZ5OgogICAgICAgICAgI2RlZmluZSBFTElNSU5BQkxFX1JFR1MgIFwKICAgICAgICAgIHt7QVJHX1BPSU5URVJfUkVHTlVNLCBTVEFDS19QT0lOVEVSX1JFR05VTX0sIFwKICAgICAgICAgICB7QVJHX1BPSU5URVJfUkVHTlVNLCBGUkFNRV9QT0lOVEVSX1JFR05VTX0sIFwKICAgICAgICAgICB7RlJBTUVfUE9JTlRFUl9SRUdOVU0sIFNUQUNLX1BPSU5URVJfUkVHTlVNfX0KCiAgICAgTm90ZSB0aGF0IHRoZSBlbGltaW5hdGlvbiBvZiB0aGUgYXJndW1lbnQgcG9pbnRlciB3aXRoIHRoZSBzdGFjawogICAgIHBvaW50ZXIgaXMgc3BlY2lmaWVkIGZpcnN0IHNpbmNlIHRoYXQgaXMgdGhlIHByZWZlcnJlZCBlbGltaW5hdGlvbi4KCiAtLSBNYWNybzogQ0FOX0VMSU1JTkFURSAoRlJPTS1SRUcsIFRPLVJFRykKICAgICBBIEMgZXhwcmVzc2lvbiB0aGF0IHJldHVybnMgbm9uemVybyBpZiB0aGUgY29tcGlsZXIgaXMgYWxsb3dlZCB0bwogICAgIHRyeSB0byByZXBsYWNlIHJlZ2lzdGVyIG51bWJlciBGUk9NLVJFRyB3aXRoIHJlZ2lzdGVyIG51bWJlcgogICAgIFRPLVJFRy4gIFRoaXMgbWFjcm8gbmVlZCBvbmx5IGJlIGRlZmluZWQgaWYgJ0VMSU1JTkFCTEVfUkVHUycgaXMKICAgICBkZWZpbmVkLCBhbmQgd2lsbCB1c3VhbGx5IGJlIHRoZSBjb25zdGFudCAxLCBzaW5jZSBtb3N0IG9mIHRoZQogICAgIGNhc2VzIHByZXZlbnRpbmcgcmVnaXN0ZXIgZWxpbWluYXRpb24gYXJlIHRoaW5ncyB0aGF0IHRoZSBjb21waWxlcgogICAgIGFscmVhZHkga25vd3MgYWJvdXQuCgogLS0gTWFjcm86IElOSVRJQUxfRUxJTUlOQVRJT05fT0ZGU0VUIChGUk9NLVJFRywgVE8tUkVHLCBPRkZTRVQtVkFSKQogICAgIFRoaXMgbWFjcm8gaXMgc2ltaWxhciB0byAnSU5JVElBTF9GUkFNRV9QT0lOVEVSX09GRlNFVCcuICBJdAogICAgIHNwZWNpZmllcyB0aGUgaW5pdGlhbCBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHNwZWNpZmllZCBwYWlyIG9mCiAgICAgcmVnaXN0ZXJzLiAgVGhpcyBtYWNybyBtdXN0IGJlIGRlZmluZWQgaWYgJ0VMSU1JTkFCTEVfUkVHUycgaXMKICAgICBkZWZpbmVkLgoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IFN0YWNrIEFyZ3VtZW50cywgIE5leHQ6IFJlZ2lzdGVyIEFyZ3VtZW50cywgIFByZXY6IEVsaW1pbmF0aW9uLCAgVXA6IFN0YWNrIGFuZCBDYWxsaW5nCgoxNS4xMC42IFBhc3NpbmcgRnVuY3Rpb24gQXJndW1lbnRzIG9uIHRoZSBTdGFjawotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKVGhlIG1hY3JvcyBpbiB0aGlzIHNlY3Rpb24gY29udHJvbCBob3cgYXJndW1lbnRzIGFyZSBwYXNzZWQgb24gdGhlCnN0YWNrLiAgU2VlIHRoZSBmb2xsb3dpbmcgc2VjdGlvbiBmb3Igb3RoZXIgbWFjcm9zIHRoYXQgY29udHJvbCBwYXNzaW5nCmNlcnRhaW4gYXJndW1lbnRzIGluIHJlZ2lzdGVycy4KCiAtLSBUYXJnZXQgSG9vazogYm9vbCBUQVJHRVRfUFJPTU9URV9QUk9UT1RZUEVTICh0cmVlIEZOVFlQRSkKICAgICBUaGlzIHRhcmdldCBob29rIHJldHVybnMgJ3RydWUnIGlmIGFuIGFyZ3VtZW50IGRlY2xhcmVkIGluIGEKICAgICBwcm90b3R5cGUgYXMgYW4gaW50ZWdyYWwgdHlwZSBzbWFsbGVyIHRoYW4gJ2ludCcgc2hvdWxkIGFjdHVhbGx5IGJlCiAgICAgcGFzc2VkIGFzIGFuICdpbnQnLiAgSW4gYWRkaXRpb24gdG8gYXZvaWRpbmcgZXJyb3JzIGluIGNlcnRhaW4KICAgICBjYXNlcyBvZiBtaXNtYXRjaCwgaXQgYWxzbyBtYWtlcyBmb3IgYmV0dGVyIGNvZGUgb24gY2VydGFpbgogICAgIG1hY2hpbmVzLiAgVGhlIGRlZmF1bHQgaXMgdG8gbm90IHByb21vdGUgcHJvdG90eXBlcy4KCiAtLSBNYWNybzogUFVTSF9BUkdTCiAgICAgQSBDIGV4cHJlc3Npb24uICBJZiBub256ZXJvLCBwdXNoIGluc25zIHdpbGwgYmUgdXNlZCB0byBwYXNzCiAgICAgb3V0Z29pbmcgYXJndW1lbnRzLiAgSWYgdGhlIHRhcmdldCBtYWNoaW5lIGRvZXMgbm90IGhhdmUgYSBwdXNoCiAgICAgaW5zdHJ1Y3Rpb24sIHNldCBpdCB0byB6ZXJvLiAgVGhhdCBkaXJlY3RzIEdDQyB0byB1c2UgYW4gYWx0ZXJuYXRlCiAgICAgc3RyYXRlZ3k6IHRvIGFsbG9jYXRlIHRoZSBlbnRpcmUgYXJndW1lbnQgYmxvY2sgYW5kIHRoZW4gc3RvcmUgdGhlCiAgICAgYXJndW1lbnRzIGludG8gaXQuICBXaGVuICdQVVNIX0FSR1MnIGlzIG5vbnplcm8sICdQVVNIX1JPVU5ESU5HJwogICAgIG11c3QgYmUgZGVmaW5lZCB0b28uCgogLS0gTWFjcm86IFBVU0hfQVJHU19SRVZFUlNFRAogICAgIEEgQyBleHByZXNzaW9uLiAgSWYgbm9uemVybywgZnVuY3Rpb24gYXJndW1lbnRzIHdpbGwgYmUgZXZhbHVhdGVkCiAgICAgZnJvbSBsYXN0IHRvIGZpcnN0LCByYXRoZXIgdGhhbiBmcm9tIGZpcnN0IHRvIGxhc3QuICBJZiB0aGlzIG1hY3JvCiAgICAgaXMgbm90IGRlZmluZWQsIGl0IGRlZmF1bHRzIHRvICdQVVNIX0FSR1MnIG9uIHRhcmdldHMgd2hlcmUgdGhlCiAgICAgc3RhY2sgYW5kIGFyZ3MgZ3JvdyBpbiBvcHBvc2l0ZSBkaXJlY3Rpb25zLCBhbmQgMCBvdGhlcndpc2UuCgogLS0gTWFjcm86IFBVU0hfUk9VTkRJTkcgKE5QVVNIRUQpCiAgICAgQSBDIGV4cHJlc3Npb24gdGhhdCBpcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGFjdHVhbGx5IHB1c2hlZCBvbnRvIHRoZQogICAgIHN0YWNrIHdoZW4gYW4gaW5zdHJ1Y3Rpb24gYXR0ZW1wdHMgdG8gcHVzaCBOUFVTSEVEIGJ5dGVzLgoKICAgICBPbiBzb21lIG1hY2hpbmVzLCB0aGUgZGVmaW5pdGlvbgoKICAgICAgICAgICNkZWZpbmUgUFVTSF9ST1VORElORyhCWVRFUykgKEJZVEVTKQoKICAgICB3aWxsIHN1ZmZpY2UuICBCdXQgb24gb3RoZXIgbWFjaGluZXMsIGluc3RydWN0aW9ucyB0aGF0IGFwcGVhciB0bwogICAgIHB1c2ggb25lIGJ5dGUgYWN0dWFsbHkgcHVzaCB0d28gYnl0ZXMgaW4gYW4gYXR0ZW1wdCB0byBtYWludGFpbgogICAgIGFsaWdubWVudC4gIFRoZW4gdGhlIGRlZmluaXRpb24gc2hvdWxkIGJlCgogICAgICAgICAgI2RlZmluZSBQVVNIX1JPVU5ESU5HKEJZVEVTKSAoKChCWVRFUykgKyAxKSAmIH4xKQoKIC0tIE1hY3JvOiBBQ0NVTVVMQVRFX09VVEdPSU5HX0FSR1MKICAgICBBIEMgZXhwcmVzc2lvbi4gIElmIG5vbnplcm8sIHRoZSBtYXhpbXVtIGFtb3VudCBvZiBzcGFjZSByZXF1aXJlZAogICAgIGZvciBvdXRnb2luZyBhcmd1bWVudHMgd2lsbCBiZSBjb21wdXRlZCBhbmQgcGxhY2VkIGludG8gdGhlCiAgICAgdmFyaWFibGUgJ2N1cnJlbnRfZnVuY3Rpb25fb3V0Z29pbmdfYXJnc19zaXplJy4gIE5vIHNwYWNlIHdpbGwgYmUKICAgICBwdXNoZWQgb250byB0aGUgc3RhY2sgZm9yIGVhY2ggY2FsbDsgaW5zdGVhZCwgdGhlIGZ1bmN0aW9uIHByb2xvZ3VlCiAgICAgc2hvdWxkIGluY3JlYXNlIHRoZSBzdGFjayBmcmFtZSBzaXplIGJ5IHRoaXMgYW1vdW50LgoKICAgICBTZXR0aW5nIGJvdGggJ1BVU0hfQVJHUycgYW5kICdBQ0NVTVVMQVRFX09VVEdPSU5HX0FSR1MnIGlzIG5vdAogICAgIHByb3Blci4KCiAtLSBNYWNybzogUkVHX1BBUk1fU1RBQ0tfU1BBQ0UgKEZOREVDTCkKICAgICBEZWZpbmUgdGhpcyBtYWNybyBpZiBmdW5jdGlvbnMgc2hvdWxkIGFzc3VtZSB0aGF0IHN0YWNrIHNwYWNlIGhhcwogICAgIGJlZW4gYWxsb2NhdGVkIGZvciBhcmd1bWVudHMgZXZlbiB3aGVuIHRoZWlyIHZhbHVlcyBhcmUgcGFzc2VkIGluCiAgICAgcmVnaXN0ZXJzLgoKICAgICBUaGUgdmFsdWUgb2YgdGhpcyBtYWNybyBpcyB0aGUgc2l6ZSwgaW4gYnl0ZXMsIG9mIHRoZSBhcmVhIHJlc2VydmVkCiAgICAgZm9yIGFyZ3VtZW50cyBwYXNzZWQgaW4gcmVnaXN0ZXJzIGZvciB0aGUgZnVuY3Rpb24gcmVwcmVzZW50ZWQgYnkKICAgICBGTkRFQ0wsIHdoaWNoIGNhbiBiZSB6ZXJvIGlmIEdDQyBpcyBjYWxsaW5nIGEgbGlicmFyeSBmdW5jdGlvbi4KCiAgICAgVGhpcyBzcGFjZSBjYW4gYmUgYWxsb2NhdGVkIGJ5IHRoZSBjYWxsZXIsIG9yIGJlIGEgcGFydCBvZiB0aGUKICAgICBtYWNoaW5lLWRlcGVuZGVudCBzdGFjayBmcmFtZTogJ09VVEdPSU5HX1JFR19QQVJNX1NUQUNLX1NQQUNFJyBzYXlzCiAgICAgd2hpY2guCgogLS0gTWFjcm86IE9VVEdPSU5HX1JFR19QQVJNX1NUQUNLX1NQQUNFCiAgICAgRGVmaW5lIHRoaXMgdG8gYSBub256ZXJvIHZhbHVlIGlmIGl0IGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUKICAgICBjYWxsZXIgdG8gYWxsb2NhdGUgdGhlIGFyZWEgcmVzZXJ2ZWQgZm9yIGFyZ3VtZW50cyBwYXNzZWQgaW4KICAgICByZWdpc3RlcnMuCgogICAgIElmICdBQ0NVTVVMQVRFX09VVEdPSU5HX0FSR1MnIGlzIGRlZmluZWQsIHRoaXMgbWFjcm8gY29udHJvbHMKICAgICB3aGV0aGVyIHRoZSBzcGFjZSBmb3IgdGhlc2UgYXJndW1lbnRzIGNvdW50cyBpbiB0aGUgdmFsdWUgb2YKICAgICAnY3VycmVudF9mdW5jdGlvbl9vdXRnb2luZ19hcmdzX3NpemUnLgoKIC0tIE1hY3JvOiBTVEFDS19QQVJNU19JTl9SRUdfUEFSTV9BUkVBCiAgICAgRGVmaW5lIHRoaXMgbWFjcm8gaWYgJ1JFR19QQVJNX1NUQUNLX1NQQUNFJyBpcyBkZWZpbmVkLCBidXQgdGhlCiAgICAgc3RhY2sgcGFyYW1ldGVycyBkb24ndCBza2lwIHRoZSBhcmVhIHNwZWNpZmllZCBieSBpdC4KCiAgICAgTm9ybWFsbHksIHdoZW4gYSBwYXJhbWV0ZXIgaXMgbm90IHBhc3NlZCBpbiByZWdpc3RlcnMsIGl0IGlzIHBsYWNlZAogICAgIG9uIHRoZSBzdGFjayBiZXlvbmQgdGhlICdSRUdfUEFSTV9TVEFDS19TUEFDRScgYXJlYS4gIERlZmluaW5nIHRoaXMKICAgICBtYWNybyBzdXBwcmVzc2VzIHRoaXMgYmVoYXZpb3IgYW5kIGNhdXNlcyB0aGUgcGFyYW1ldGVyIHRvIGJlCiAgICAgcGFzc2VkIG9uIHRoZSBzdGFjayBpbiBpdHMgbmF0dXJhbCBsb2NhdGlvbi4KCiAtLSBNYWNybzogUkVUVVJOX1BPUFNfQVJHUyAoRlVOREVDTCwgRlVOVFlQRSwgU1RBQ0stU0laRSkKICAgICBBIEMgZXhwcmVzc2lvbiB0aGF0IHNob3VsZCBpbmRpY2F0ZSB0aGUgbnVtYmVyIG9mIGJ5dGVzIG9mIGl0cyBvd24KICAgICBhcmd1bWVudHMgdGhhdCBhIGZ1bmN0aW9uIHBvcHMgb24gcmV0dXJuaW5nLCBvciAwIGlmIHRoZSBmdW5jdGlvbgogICAgIHBvcHMgbm8gYXJndW1lbnRzIGFuZCB0aGUgY2FsbGVyIG11c3QgdGhlcmVmb3JlIHBvcCB0aGVtIGFsbCBhZnRlcgogICAgIHRoZSBmdW5jdGlvbiByZXR1cm5zLgoKICAgICBGVU5ERUNMIGlzIGEgQyB2YXJpYWJsZSB3aG9zZSB2YWx1ZSBpcyBhIHRyZWUgbm9kZSB0aGF0IGRlc2NyaWJlcwogICAgIHRoZSBmdW5jdGlvbiBpbiBxdWVzdGlvbi4gIE5vcm1hbGx5IGl0IGlzIGEgbm9kZSBvZiB0eXBlCiAgICAgJ0ZVTkNUSU9OX0RFQ0wnIHRoYXQgZGVzY3JpYmVzIHRoZSBkZWNsYXJhdGlvbiBvZiB0aGUgZnVuY3Rpb24uCiAgICAgRnJvbSB0aGlzIHlvdSBjYW4gb2J0YWluIHRoZSAnREVDTF9BVFRSSUJVVEVTJyBvZiB0aGUgZnVuY3Rpb24uCgogICAgIEZVTlRZUEUgaXMgYSBDIHZhcmlhYmxlIHdob3NlIHZhbHVlIGlzIGEgdHJlZSBub2RlIHRoYXQgZGVzY3JpYmVzCiAgICAgdGhlIGZ1bmN0aW9uIGluIHF1ZXN0aW9uLiAgTm9ybWFsbHkgaXQgaXMgYSBub2RlIG9mIHR5cGUKICAgICAnRlVOQ1RJT05fVFlQRScgdGhhdCBkZXNjcmliZXMgdGhlIGRhdGEgdHlwZSBvZiB0aGUgZnVuY3Rpb24uICBGcm9tCiAgICAgdGhpcyBpdCBpcyBwb3NzaWJsZSB0byBvYnRhaW4gdGhlIGRhdGEgdHlwZXMgb2YgdGhlIHZhbHVlIGFuZAogICAgIGFyZ3VtZW50cyAoaWYga25vd24pLgoKICAgICBXaGVuIGEgY2FsbCB0byBhIGxpYnJhcnkgZnVuY3Rpb24gaXMgYmVpbmcgY29uc2lkZXJlZCwgRlVOREVDTCB3aWxsCiAgICAgY29udGFpbiBhbiBpZGVudGlmaWVyIG5vZGUgZm9yIHRoZSBsaWJyYXJ5IGZ1bmN0aW9uLiAgVGh1cywgaWYgeW91CiAgICAgbmVlZCB0byBkaXN0aW5ndWlzaCBhbW9uZyB2YXJpb3VzIGxpYnJhcnkgZnVuY3Rpb25zLCB5b3UgY2FuIGRvIHNvCiAgICAgYnkgdGhlaXIgbmFtZXMuICBOb3RlIHRoYXQgImxpYnJhcnkgZnVuY3Rpb24iIGluIHRoaXMgY29udGV4dCBtZWFucwogICAgIGEgZnVuY3Rpb24gdXNlZCB0byBwZXJmb3JtIGFyaXRobWV0aWMsIHdob3NlIG5hbWUgaXMga25vd24KICAgICBzcGVjaWFsbHkgaW4gdGhlIGNvbXBpbGVyIGFuZCB3YXMgbm90IG1lbnRpb25lZCBpbiB0aGUgQyBjb2RlIGJlaW5nCiAgICAgY29tcGlsZWQuCgogICAgIFNUQUNLLVNJWkUgaXMgdGhlIG51bWJlciBvZiBieXRlcyBvZiBhcmd1bWVudHMgcGFzc2VkIG9uIHRoZSBzdGFjay4KICAgICBJZiBhIHZhcmlhYmxlIG51bWJlciBvZiBieXRlcyBpcyBwYXNzZWQsIGl0IGlzIHplcm8sIGFuZCBhcmd1bWVudAogICAgIHBvcHBpbmcgd2lsbCBhbHdheXMgYmUgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBjYWxsaW5nIGZ1bmN0aW9uLgoKICAgICBPbiB0aGUgVkFYLCBhbGwgZnVuY3Rpb25zIGFsd2F5cyBwb3AgdGhlaXIgYXJndW1lbnRzLCBzbyB0aGUKICAgICBkZWZpbml0aW9uIG9mIHRoaXMgbWFjcm8gaXMgU1RBQ0stU0laRS4gIE9uIHRoZSA2ODAwMCwgdXNpbmcgdGhlCiAgICAgc3RhbmRhcmQgY2FsbGluZyBjb252ZW50aW9uLCBubyBmdW5jdGlvbnMgcG9wIHRoZWlyIGFyZ3VtZW50cywgc28KICAgICB0aGUgdmFsdWUgb2YgdGhlIG1hY3JvIGlzIGFsd2F5cyAwIGluIHRoaXMgY2FzZS4gIEJ1dCBhbgogICAgIGFsdGVybmF0aXZlIGNhbGxpbmcgY29udmVudGlvbiBpcyBhdmFpbGFibGUgaW4gd2hpY2ggZnVuY3Rpb25zIHRoYXQKICAgICB0YWtlIGEgZml4ZWQgbnVtYmVyIG9mIGFyZ3VtZW50cyBwb3AgdGhlbSBidXQgb3RoZXIgZnVuY3Rpb25zIChzdWNoCiAgICAgYXMgJ3ByaW50ZicpIHBvcCBub3RoaW5nICh0aGUgY2FsbGVyIHBvcHMgYWxsKS4gIFdoZW4gdGhpcwogICAgIGNvbnZlbnRpb24gaXMgaW4gdXNlLCBGVU5UWVBFIGlzIGV4YW1pbmVkIHRvIGRldGVybWluZSB3aGV0aGVyIGEKICAgICBmdW5jdGlvbiB0YWtlcyBhIGZpeGVkIG51bWJlciBvZiBhcmd1bWVudHMuCgogLS0gTWFjcm86IENBTExfUE9QU19BUkdTIChDVU0pCiAgICAgQSBDIGV4cHJlc3Npb24gdGhhdCBzaG91bGQgaW5kaWNhdGUgdGhlIG51bWJlciBvZiBieXRlcyBhIGNhbGwKICAgICBzZXF1ZW5jZSBwb3BzIG9mZiB0aGUgc3RhY2suICBJdCBpcyBhZGRlZCB0byB0aGUgdmFsdWUgb2YKICAgICAnUkVUVVJOX1BPUFNfQVJHUycgd2hlbiBjb21waWxpbmcgYSBmdW5jdGlvbiBjYWxsLgoKICAgICBDVU0gaXMgdGhlIHZhcmlhYmxlIGluIHdoaWNoIGFsbCBhcmd1bWVudHMgdG8gdGhlIGNhbGxlZCBmdW5jdGlvbgogICAgIGhhdmUgYmVlbiBhY2N1bXVsYXRlZC4KCiAgICAgT24gY2VydGFpbiBhcmNoaXRlY3R1cmVzLCBzdWNoIGFzIHRoZSBTSDUsIGEgY2FsbCB0cmFtcG9saW5lIGlzCiAgICAgdXNlZCB0aGF0IHBvcHMgY2VydGFpbiByZWdpc3RlcnMgb2ZmIHRoZSBzdGFjaywgZGVwZW5kaW5nIG9uIHRoZQogICAgIGFyZ3VtZW50cyB0aGF0IGhhdmUgYmVlbiBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uLiAgU2luY2UgdGhpcyBpcyBhCiAgICAgcHJvcGVydHkgb2YgdGhlIGNhbGwgc2l0ZSwgbm90IG9mIHRoZSBjYWxsZWQgZnVuY3Rpb24sCiAgICAgJ1JFVFVSTl9QT1BTX0FSR1MnIGlzIG5vdCBhcHByb3ByaWF0ZS4KCh8KRmlsZTogZ2NjaW50LmluZm8sICBOb2RlOiBSZWdpc3RlciBBcmd1bWVudHMsICBOZXh0OiBTY2FsYXIgUmV0dXJuLCAgUHJldjogU3RhY2sgQXJndW1lbnRzLCAgVXA6IFN0YWNrIGFuZCBDYWxsaW5nCgoxNS4xMC43IFBhc3NpbmcgQXJndW1lbnRzIGluIFJlZ2lzdGVycwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyB0aGUgbWFjcm9zIHdoaWNoIGxldCB5b3UgY29udHJvbCBob3cgdmFyaW91cwp0eXBlcyBvZiBhcmd1bWVudHMgYXJlIHBhc3NlZCBpbiByZWdpc3RlcnMgb3IgaG93IHRoZXkgYXJlIGFycmFuZ2VkIGluCnRoZSBzdGFjay4KCiAtLSBNYWNybzogRlVOQ1RJT05fQVJHIChDVU0sIE1PREUsIFRZUEUsIE5BTUVEKQogICAgIEEgQyBleHByZXNzaW9uIHRoYXQgY29udHJvbHMgd2hldGhlciBhIGZ1bmN0aW9uIGFyZ3VtZW50IGlzIHBhc3NlZAogICAgIGluIGEgcmVnaXN0ZXIsIGFuZCB3aGljaCByZWdpc3Rlci4KCiAgICAgVGhlIGFyZ3VtZW50cyBhcmUgQ1VNLCB3aGljaCBzdW1tYXJpemVzIGFsbCB0aGUgcHJldmlvdXMgYXJndW1lbnRzOwogICAgIE1PREUsIHRoZSBtYWNoaW5lIG1vZGUgb2YgdGhlIGFyZ3VtZW50OyBUWVBFLCB0aGUgZGF0YSB0eXBlIG9mIHRoZQogICAgIGFyZ3VtZW50IGFzIGEgdHJlZSBub2RlIG9yIDAgaWYgdGhhdCBpcyBub3Qga25vd24gKHdoaWNoIGhhcHBlbnMKICAgICBmb3IgQyBzdXBwb3J0IGxpYnJhcnkgZnVuY3Rpb25zKTsgYW5kIE5BTUVELCB3aGljaCBpcyAxIGZvciBhbgogICAgIG9yZGluYXJ5IGFyZ3VtZW50IGFuZCAwIGZvciBuYW1lbGVzcyBhcmd1bWVudHMgdGhhdCBjb3JyZXNwb25kIHRvCiAgICAgJy4uLicgaW4gdGhlIGNhbGxlZCBmdW5jdGlvbidzIHByb3RvdHlwZS4gIFRZUEUgY2FuIGJlIGFuCiAgICAgaW5jb21wbGV0ZSB0eXBlIGlmIGEgc3ludGF4IGVycm9yIGhhcyBwcmV2aW91c2x5IG9jY3VycmVkLgoKICAgICBUaGUgdmFsdWUgb2YgdGhlIGV4cHJlc3Npb24gaXMgdXN1YWxseSBlaXRoZXIgYSAncmVnJyBSVFggZm9yIHRoZQogICAgIGhhcmQgcmVnaXN0ZXIgaW4gd2hpY2ggdG8gcGFzcyB0aGUgYXJndW1lbnQsIG9yIHplcm8gdG8gcGFzcyB0aGUKICAgICBhcmd1bWVudCBvbiB0aGUgc3RhY2suCgogICAgIEZvciBtYWNoaW5lcyBsaWtlIHRoZSBWQVggYW5kIDY4MDAwLCB3aGVyZSBub3JtYWxseSBhbGwgYXJndW1lbnRzCiAgICAgYXJlIHB1c2hlZCwgemVybyBzdWZmaWNlcyBhcyBhIGRlZmluaXRpb24uCgogICAgIFRoZSB2YWx1ZSBvZiB0aGUgZXhwcmVzc2lvbiBjYW4gYWxzbyBiZSBhICdwYXJhbGxlbCcgUlRYLiAgVGhpcyBpcwogICAgIHVzZWQgd2hlbiBhbiBhcmd1bWVudCBpcyBwYXNzZWQgaW4gbXVsdGlwbGUgbG9jYXRpb25zLiAgVGhlIG1vZGUgb2YKICAgICB0aGUgJ3BhcmFsbGVsJyBzaG91bGQgYmUgdGhlIG1vZGUgb2YgdGhlIGVudGlyZSBhcmd1bWVudC4gIFRoZQogICAgICdwYXJhbGxlbCcgaG9sZHMgYW55IG51bWJlciBvZiAnZXhwcl9saXN0JyBwYWlyczsgZWFjaCBvbmUKICAgICBkZXNjcmliZXMgd2hlcmUgcGFydCBvZiB0aGUgYXJndW1lbnQgaXMgcGFzc2VkLiAgSW4gZWFjaAogICAgICdleHByX2xpc3QnIHRoZSBmaXJzdCBvcGVyYW5kIG11c3QgYmUgYSAncmVnJyBSVFggZm9yIHRoZSBoYXJkCiAgICAgcmVnaXN0ZXIgaW4gd2hpY2ggdG8gcGFzcyB0aGlzIHBhcnQgb2YgdGhlIGFyZ3VtZW50LCBhbmQgdGhlIG1vZGUKICAgICBvZiB0aGUgcmVnaXN0ZXIgUlRYIGluZGljYXRlcyBob3cgbGFyZ2UgdGhpcyBwYXJ0IG9mIHRoZSBhcmd1bWVudAogICAgIGlzLiAgVGhlIHNlY29uZCBvcGVyYW5kIG9mIHRoZSAnZXhwcl9saXN0JyBpcyBhICdjb25zdF9pbnQnIHdoaWNoCiAgICAgZ2l2ZXMgdGhlIG9mZnNldCBpbiBieXRlcyBpbnRvIHRoZSBlbnRpcmUgYXJndW1lbnQgb2Ygd2hlcmUgdGhpcwogICAgIHBhcnQgc3RhcnRzLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0aGUgZmlyc3QgJ2V4cHJfbGlzdCcgaW4gdGhlCiAgICAgJ3BhcmFsbGVsJyBSVFggbWF5IGhhdmUgYSBmaXJzdCBvcGVyYW5kIG9mIHplcm8uICBUaGlzIGluZGljYXRlcwogICAgIHRoYXQgdGhlIGVudGlyZSBhcmd1bWVudCBpcyBhbHNvIHN0b3JlZCBvbiB0aGUgc3RhY2suCgogICAgIFRoZSBsYXN0IHRpbWUgdGhpcyBtYWNybyBpcyBjYWxsZWQsIGl0IGlzIGNhbGxlZCB3aXRoICdNT0RFID09CiAgICAgVk9JRG1vZGUnLCBhbmQgaXRzIHJlc3VsdCBpcyBwYXNzZWQgdG8gdGhlICdjYWxsJyBvciAnY2FsbF92YWx1ZScKICAgICBwYXR0ZXJuIGFzIG9wZXJhbmRzIDIgYW5kIDMgcmVzcGVjdGl2ZWx5LgoKICAgICBUaGUgdXN1YWwgd2F5IHRvIG1ha2UgdGhlIElTTyBsaWJyYXJ5ICdzdGRhcmcuaCcgd29yayBvbiBhIG1hY2hpbmUKICAgICB3aGVyZSBzb21lIGFyZ3VtZW50cyBhcmUgdXN1YWxseSBwYXNzZWQgaW4gcmVnaXN0ZXJzLCBpcyB0byBjYXVzZQogICAgIG5hbWVsZXNzIGFyZ3VtZW50cyB0byBiZSBwYXNzZWQgb24gdGhlIHN0YWNrIGluc3RlYWQuICBUaGlzIGlzIGRvbmUKICAgICBieSBtYWtpbmcgJ0ZVTkNUSU9OX0FSRycgcmV0dXJuIDAgd2hlbmV2ZXIgTkFNRUQgaXMgMC4KCiAgICAgWW91IG1heSB1c2UgdGhlIGhvb2sgJ3RhcmdldG0uY2FsbHMubXVzdF9wYXNzX2luX3N0YWNrJyBpbiB0aGUKICAgICBkZWZpbml0aW9uIG9mIHRoaXMgbWFjcm8gdG8gZGV0ZXJtaW5lIGlmIHRoaXMgYXJndW1lbnQgaXMgb2YgYSB0eXBlCiAgICAgdGhhdCBtdXN0IGJlIHBhc3NlZCBpbiB0aGUgc3RhY2suICBJZiAnUkVHX1BBUk1fU1RBQ0tfU1BBQ0UnIGlzIG5vdAogICAgIGRlZmluZWQgYW5kICdGVU5DVElPTl9BUkcnIHJldHVybnMgbm9uemVybyBmb3Igc3VjaCBhbiBhcmd1bWVudCwKICAgICB0aGUgY29tcGlsZXIgd2lsbCBhYm9ydC4gIElmICdSRUdfUEFSTV9TVEFDS19TUEFDRScgaXMgZGVmaW5lZCwgdGhlCiAgICAgYXJndW1lbnQgd2lsbCBiZSBjb21wdXRlZCBpbiB0aGUgc3RhY2sgYW5kIHRoZW4gbG9hZGVkIGludG8gYQogICAgIHJlZ2lzdGVyLgoKIC0tIFRhcmdldCBIb29rOiBib29sIFRBUkdFVF9NVVNUX1BBU1NfSU5fU1RBQ0sgKGVudW0gbWFjaGluZV9tb2RlIE1PREUsCiAgICAgICAgICB0cmVlIFRZUEUpCiAgICAgVGhpcyB0YXJnZXQgaG9vayBzaG91bGQgcmV0dXJuICd0cnVlJyBpZiB3ZSBzaG91bGQgbm90IHBhc3MgVFlQRQogICAgIHNvbGVseSBpbiByZWdpc3RlcnMuICBUaGUgZmlsZSAnZXhwci5oJyBkZWZpbmVzIGEgZGVmaW5pdGlvbiB0aGF0CiAgICAgaXMgdXN1YWxseSBhcHByb3ByaWF0ZSwgcmVmZXIgdG8gJ2V4cHIuaCcgZm9yIGFkZGl0aW9uYWwKICAgICBkb2N1bWVudGF0aW9uLgoKIC0tIE1hY3JvOiBGVU5DVElPTl9JTkNPTUlOR19BUkcgKENVTSwgTU9ERSwgVFlQRSwgTkFNRUQpCiAgICAgRGVmaW5lIHRoaXMgbWFjcm8gaWYgdGhlIHRhcmdldCBtYWNoaW5lIGhhcyAicmVnaXN0ZXIgd2luZG93cyIsIHNvCiAgICAgdGhhdCB0aGUgcmVnaXN0ZXIgaW4gd2hpY2ggYSBmdW5jdGlvbiBzZWVzIGFuIGFyZ3VtZW50cyBpcyBub3QKICAgICBuZWNlc3NhcmlseSB0aGUgc2FtZSBhcyB0aGUgb25lIGluIHdoaWNoIHRoZSBjYWxsZXIgcGFzc2VkIHRoZQogICAgIGFyZ3VtZW50LgoKICAgICBGb3Igc3VjaCBtYWNoaW5lcywgJ0ZVTkNUSU9OX0FSRycgY29tcHV0ZXMgdGhlIHJlZ2lzdGVyIGluIHdoaWNoCiAgICAgdGhlIGNhbGxlciBwYXNzZXMgdGhlIHZhbHVlLCBhbmQgJ0ZVTkNUSU9OX0lOQ09NSU5HX0FSRycgc2hvdWxkIGJlCiAgICAgZGVmaW5lZCBpbiBhIHNpbWlsYXIgZmFzaGlvbiB0byB0ZWxsIHRoZSBmdW5jdGlvbiBiZWluZyBjYWxsZWQKICAgICB3aGVyZSB0aGUgYXJndW1lbnRzIHdpbGwgYXJyaXZlLgoKICAgICBJZiAnRlVOQ1RJT05fSU5DT01JTkdfQVJHJyBpcyBub3QgZGVmaW5lZCwgJ0ZVTkNUSU9OX0FSRycgc2VydmVzCiAgICAgYm90aCBwdXJwb3Nlcy4KCiAtLSBUYXJnZXQgSG9vazogaW50IFRBUkdFVF9BUkdfUEFSVElBTF9CWVRFUyAoQ1VNVUxBVElWRV9BUkdTICpDVU0sCiAgICAgICAgICBlbnVtIG1hY2hpbmVfbW9kZSBNT0RFLCB0cmVlIFRZUEUsIGJvb2wgTkFNRUQpCiAgICAgVGhpcyB0YXJnZXQgaG9vayByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgYXQgdGhlIGJlZ2lubmluZyBvZiBhbgogICAgIGFyZ3VtZW50IHRoYXQgbXVzdCBiZSBwdXQgaW4gcmVnaXN0ZXJzLiAgVGhlIHZhbHVlIG11c3QgYmUgemVybyBmb3IKICAgICBhcmd1bWVudHMgdGhhdCBhcmUgcGFzc2VkIGVudGlyZWx5IGluIHJlZ2lzdGVycyBvciB0aGF0IGFyZQogICAgIGVudGlyZWx5IHB1c2hlZCBvbiB0aGUgc3RhY2suCgogICAgIE9uIHNvbWUgbWFjaGluZXMsIGNlcnRhaW4gYXJndW1lbnRzIG11c3QgYmUgcGFzc2VkIHBhcnRpYWxseSBpbgogICAgIHJlZ2lzdGVycyBhbmQgcGFydGlhbGx5IGluIG1lbW9yeS4gIE9uIHRoZXNlIG1hY2hpbmVzLCB0eXBpY2FsbHkKICAgICB0aGUgZmlyc3QgZmV3IHdvcmRzIG9mIGFyZ3VtZW50cyBhcmUgcGFzc2VkIGluIHJlZ2lzdGVycywgYW5kIHRoZQogICAgIHJlc3Qgb24gdGhlIHN0YWNrLiAgSWYgYSBtdWx0aS13b3JkIGFyZ3VtZW50IChhICdkb3VibGUnIG9yIGEKICAgICBzdHJ1Y3R1cmUpIGNyb3NzZXMgdGhhdCBib3VuZGFyeSwgaXRzIGZpcnN0IGZldyB3b3JkcyBtdXN0IGJlCiAgICAgcGFzc2VkIGluIHJlZ2lzdGVycyBhbmQgdGhlIHJlc3QgbXVzdCBiZSBwdXNoZWQuICBUaGlzIG1hY3JvIHRlbGxzCiAgICAgdGhlIGNvbXBpbGVyIHdoZW4gdGhpcyBvY2N1cnMsIGFuZCBob3cgbWFueSBieXRlcyBzaG91bGQgZ28gaW4KICAgICByZWdpc3RlcnMuCgogICAgICdGVU5DVElPTl9BUkcnIGZvciB0aGVzZSBhcmd1bWVudHMgc2hvdWxkIHJldHVybiB0aGUgZmlyc3QgcmVnaXN0ZXIKICAgICB0byBiZSB1c2VkIGJ5IHRoZSBjYWxsZXIgZm9yIHRoaXMgYXJndW1lbnQ7IGxpa2V3aXNlCiAgICAgJ0ZVTkNUSU9OX0lOQ09NSU5HX0FSRycsIGZvciB0aGUgY2FsbGVkIGZ1bmN0aW9uLgoKIC0tIFRhcmdldCBIb29rOiBib29sIFRBUkdFVF9QQVNTX0JZX1JFRkVSRU5DRSAoQ1VNVUxBVElWRV9BUkdTICpDVU0sCiAgICAgICAgICBlbnVtIG1hY2hpbmVfbW9kZSBNT0RFLCB0cmVlIFRZUEUsIGJvb2wgTkFNRUQpCiAgICAgVGhpcyB0YXJnZXQgaG9vayBzaG91bGQgcmV0dXJuICd0cnVlJyBpZiBhbiBhcmd1bWVudCBhdCB0aGUKICAgICBwb3NpdGlvbiBpbmRpY2F0ZWQgYnkgQ1VNIHNob3VsZCBiZSBwYXNzZWQgYnkgcmVmZXJlbmNlLiAgVGhpcwogICAgIHByZWRpY2F0ZSBpcyBxdWVyaWVkIGFmdGVyIHRhcmdldCBpbmRlcGVuZGVudCByZWFzb25zIGZvciBiZWluZwogICAgIHBhc3NlZCBieSByZWZlcmVuY2UsIHN1Y2ggYXMgJ1RSRUVfQUREUkVTU0FCTEUgKHR5cGUpJy4KCiAgICAgSWYgdGhlIGhvb2sgcmV0dXJucyB0cnVlLCBhIGNvcHkgb2YgdGhhdCBhcmd1bWVudCBpcyBtYWRlIGluIG1lbW9yeQogICAgIGFuZCBhIHBvaW50ZXIgdG8gdGhlIGFyZ3VtZW50IGlzIHBhc3NlZCBpbnN0ZWFkIG9mIHRoZSBhcmd1bWVudAogICAgIGl0c2VsZi4gIFRoZSBwb2ludGVyIGlzIHBhc3NlZCBpbiB3aGF0ZXZlciB3YXkgaXMgYXBwcm9wcmlhdGUgZm9yCiAgICAgcGFzc2luZyBhIHBvaW50ZXIgdG8gdGhhdCB0eXBlLgoKIC0tIFRhcmdldCBIb29rOiBib29sIFRBUkdFVF9DQUxMRUVfQ09QSUVTIChDVU1VTEFUSVZFX0FSR1MgKkNVTSwgZW51bQogICAgICAgICAgbWFjaGluZV9tb2RlIE1PREUsIHRyZWUgVFlQRSwgYm9vbCBOQU1FRCkKICAgICBUaGUgZnVuY3Rpb24gYXJndW1lbnQgZGVzY3JpYmVkIGJ5IHRoZSBwYXJhbWV0ZXJzIHRvIHRoaXMgaG9vayBpcwogICAgIGtub3duIHRvIGJlIHBhc3NlZCBieSByZWZlcmVuY2UuICBUaGUgaG9vayBzaG91bGQgcmV0dXJuIHRydWUgaWYKICAgICB0aGUgZnVuY3Rpb24gYXJndW1lbnQgc2hvdWxkIGJlIGNvcGllZCBieSB0aGUgY2FsbGVlIGluc3RlYWQgb2YKICAgICBjb3BpZWQgYnkgdGhlIGNhbGxlci4KCiAgICAgRm9yIGFueSBhcmd1bWVudCBmb3Igd2hpY2ggdGhlIGhvb2sgcmV0dXJucyB0cnVlLCBpZiBpdCBjYW4gYmUKICAgICBkZXRlcm1pbmVkIHRoYXQgdGhlIGFyZ3VtZW50IGlzIG5vdCBtb2RpZmllZCwgdGhlbiBhIGNvcHkgbmVlZCBub3QKICAgICBiZSBnZW5lcmF0ZWQuCgogICAgIFRoZSBkZWZhdWx0IHZlcnNpb24gb2YgdGhpcyBob29rIGFsd2F5cyByZXR1cm5zIGZhbHNlLgoKIC0tIE1hY3JvOiBDVU1VTEFUSVZFX0FSR1MKICAgICBBIEMgdHlwZSBmb3IgZGVjbGFyaW5nIGEgdmFyaWFibGUgdGhhdCBpcyB1c2VkIGFzIHRoZSBmaXJzdAogICAgIGFyZ3VtZW50IG9mICdGVU5DVElPTl9BUkcnIGFuZCBvdGhlciByZWxhdGVkIHZhbHVlcy4gIEZvciBzb21lCiAgICAgdGFyZ2V0IG1hY2hpbmVzLCB0aGUgdHlwZSAnaW50JyBzdWZmaWNlcyBhbmQgY2FuIGhvbGQgdGhlIG51bWJlciBvZgogICAgIGJ5dGVzIG9mIGFyZ3VtZW50IHNvIGZhci4KCiAgICAgVGhlcmUgaXMgbm8gbmVlZCB0byByZWNvcmQgaW4gJ0NVTVVMQVRJVkVfQVJHUycgYW55dGhpbmcgYWJvdXQgdGhlCiAgICAgYXJndW1lbnRzIHRoYXQgaGF2ZSBiZWVuIHBhc3NlZCBvbiB0aGUgc3RhY2suICBUaGUgY29tcGlsZXIgaGFzCiAgICAgb3RoZXIgdmFyaWFibGVzIHRvIGtlZXAgdHJhY2sgb2YgdGhhdC4gIEZvciB0YXJnZXQgbWFjaGluZXMgb24KICAgICB3aGljaCBhbGwgYXJndW1lbnRzIGFyZSBwYXNzZWQgb24gdGhlIHN0YWNrLCB0aGVyZSBpcyBubyBuZWVkIHRvCiAgICAgc3RvcmUgYW55dGhpbmcgaW4gJ0NVTVVMQVRJVkVfQVJHUyc7IGhvd2V2ZXIsIHRoZSBkYXRhIHN0cnVjdHVyZQogICAgIG11c3QgZXhpc3QgYW5kIHNob3VsZCBub3QgYmUgZW1wdHksIHNvIHVzZSAnaW50Jy4KCiAtLSBNYWNybzogSU5JVF9DVU1VTEFUSVZFX0FSR1MgKENVTSwgRk5UWVBFLCBMSUJOQU1FLCBGTkRFQ0wsCiAgICAgICAgICBOX05BTUVEX0FSR1MpCiAgICAgQSBDIHN0YXRlbWVudCAoc2FucyBzZW1pY29sb24pIGZvciBpbml0aWFsaXppbmcgdGhlIHZhcmlhYmxlIENVTQogICAgIGZvciB0aGUgc3RhdGUgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgYXJndW1lbnQgbGlzdC4gIFRoZSB2YXJpYWJsZQogICAgIGhhcyB0eXBlICdDVU1VTEFUSVZFX0FSR1MnLiAgVGhlIHZhbHVlIG9mIEZOVFlQRSBpcyB0aGUgdHJlZSBub2RlCiAgICAgZm9yIHRoZSBkYXRhIHR5cGUgb2YgdGhlIGZ1bmN0aW9uIHdoaWNoIHdpbGwgcmVjZWl2ZSB0aGUgYXJncywgb3IgMAogICAgIGlmIHRoZSBhcmdzIGFyZSB0byBhIGNvbXBpbGVyIHN1cHBvcnQgbGlicmFyeSBmdW5jdGlvbi4gIEZvciBkaXJlY3QKICAgICBjYWxscyB0aGF0IGFyZSBub3QgbGliY2FsbHMsIEZOREVDTCBjb250YWluIHRoZSBkZWNsYXJhdGlvbiBub2RlIG9mCiAgICAgdGhlIGZ1bmN0aW9uLiAgRk5ERUNMIGlzIGFsc28gc2V0IHdoZW4gJ0lOSVRfQ1VNVUxBVElWRV9BUkdTJyBpcwogICAgIHVzZWQgdG8gZmluZCBhcmd1bWVudHMgZm9yIHRoZSBmdW5jdGlvbiBiZWluZyBjb21waWxlZC4KICAgICBOX05BTUVEX0FSR1MgaXMgc2V0IHRvIHRoZSBudW1iZXIgb2YgbmFtZWQgYXJndW1lbnRzLCBpbmNsdWRpbmcgYQogICAgIHN0cnVjdHVyZSByZXR1cm4gYWRkcmVzcyBpZiBpdCBpcyBwYXNzZWQgYXMgYSBwYXJhbWV0ZXIsIHdoZW4KICAgICBtYWtpbmcgYSBjYWxsLiAgV2hlbiBwcm9jZXNzaW5nIGluY29taW5nIGFyZ3VtZW50cywgTl9OQU1FRF9BUkdTIGlzCiAgICAgc2V0IHRvIC0xLgoKICAgICBXaGVuIHByb2Nlc3NpbmcgYSBjYWxsIHRvIGEgY29tcGlsZXIgc3VwcG9ydCBsaWJyYXJ5IGZ1bmN0aW9uLAogICAgIExJQk5BTUUgaWRlbnRpZmllcyB3aGljaCBvbmUuICBJdCBpcyBhICdzeW1ib2xfcmVmJyBydHggd2hpY2gKICAgICBjb250YWlucyB0aGUgbmFtZSBvZiB0aGUgZnVuY3Rpb24sIGFzIGEgc3RyaW5nLiAgTElCTkFNRSBpcyAwIHdoZW4KICAgICBhbiBvcmRpbmFyeSBDIGZ1bmN0aW9uIGNhbGwgaXMgYmVpbmcgcHJvY2Vzc2VkLiAgVGh1cywgZWFjaCB0aW1lCiAgICAgdGhpcyBtYWNybyBpcyBjYWxsZWQsIGVpdGhlciBMSUJOQU1FIG9yIEZOVFlQRSBpcyBub256ZXJvLCBidXQKICAgICBuZXZlciBib3RoIG9mIHRoZW0gYXQgb25jZS4KCiAtLSBNYWNybzogSU5JVF9DVU1VTEFUSVZFX0xJQkNBTExfQVJHUyAoQ1VNLCBNT0RFLCBMSUJOQU1FKQogICAgIExpa2UgJ0lOSVRfQ1VNVUxBVElWRV9BUkdTJyBidXQgb25seSB1c2VkIGZvciBvdXRnb2luZyBsaWJjYWxscywgaXQKICAgICBnZXRzIGEgJ01PREUnIGFyZ3VtZW50IGluc3RlYWQgb2YgRk5UWVBFLCB0aGF0IHdvdWxkIGJlICdOVUxMJy4KICAgICBJTkRJUkVDVCB3b3VsZCBhbHdheXMgYmUgemVybywgdG9vLiAgSWYgdGhpcyBtYWNybyBpcyBub3QgZGVmaW5lZCwKICAgICAnSU5JVF9DVU1VTEFUSVZFX0FSR1MgKGN1bSwgTlVMTF9SVFgsIGxpYm5hbWUsIDApJyBpcyB1c2VkIGluc3RlYWQuCgogLS0gTWFjcm86IElOSVRfQ1VNVUxBVElWRV9JTkNPTUlOR19BUkdTIChDVU0sIEZOVFlQRSwgTElCTkFNRSkKICAgICBMaWtlICdJTklUX0NVTVVMQVRJVkVfQVJHUycgYnV0IG92ZXJyaWRlcyBpdCBmb3IgdGhlIHB1cnBvc2VzIG9mCiAgICAgZmluZGluZyB0aGUgYXJndW1lbnRzIGZvciB0aGUgZnVuY3Rpb24gYmVpbmcgY29tcGlsZWQuICBJZiB0aGlzCiAgICAgbWFjcm8gaXMgdW5kZWZpbmVkLCAnSU5JVF9DVU1VTEFUSVZFX0FSR1MnIGlzIHVzZWQgaW5zdGVhZC4KCiAgICAgVGhlIHZhbHVlIHBhc3NlZCBmb3IgTElCTkFNRSBpcyBhbHdheXMgMCwgc2luY2UgbGlicmFyeSByb3V0aW5lcwogICAgIHdpdGggc3BlY2lhbCBjYWxsaW5nIGNvbnZlbnRpb25zIGFyZSBuZXZlciBjb21waWxlZCB3aXRoIEdDQy4gIFRoZQogICAgIGFyZ3VtZW50IExJQk5BTUUgZXhpc3RzIGZvciBzeW1tZXRyeSB3aXRoICdJTklUX0NVTVVMQVRJVkVfQVJHUycuCgogLS0gTWFjcm86IEZVTkNUSU9OX0FSR19BRFZBTkNFIChDVU0sIE1PREUsIFRZUEUsIE5BTUVEKQogICAgIEEgQyBzdGF0ZW1lbnQgKHNhbnMgc2VtaWNvbG9uKSB0byB1cGRhdGUgdGhlIHN1bW1hcml6ZXIgdmFyaWFibGUKICAgICBDVU0gdG8gYWR2YW5jZSBwYXN0IGFuIGFyZ3VtZW50IGluIHRoZSBhcmd1bWVudCBsaXN0LiAgVGhlIHZhbHVlcwogICAgIE1PREUsIFRZUEUgYW5kIE5BTUVEIGRlc2NyaWJlIHRoYXQgYXJndW1lbnQuICBPbmNlIHRoaXMgaXMgZG9uZSwKICAgICB0aGUgdmFyaWFibGUgQ1VNIGlzIHN1aXRhYmxlIGZvciBhbmFseXppbmcgdGhlIF9mb2xsb3dpbmdfIGFyZ3VtZW50CiAgICAgd2l0aCAnRlVOQ1RJT05fQVJHJywgZXRjLgoKICAgICBUaGlzIG1hY3JvIG5lZWQgbm90IGRvIGFueXRoaW5nIGlmIHRoZSBhcmd1bWVudCBpbiBxdWVzdGlvbiB3YXMKICAgICBwYXNzZWQgb24gdGhlIHN0YWNrLiAgVGhlIGNvbXBpbGVyIGtub3dzIGhvdyB0byB0cmFjayB0aGUgYW1vdW50IG9mCiAgICAgc3RhY2sgc3BhY2UgdXNlZCBmb3IgYXJndW1lbnRzIHdpdGhvdXQgYW55IHNwZWNpYWwgaGVscC4KCiAtLSBNYWNybzogRlVOQ1RJT05fQVJHX1BBRERJTkcgKE1PREUsIFRZUEUpCiAgICAgSWYgZGVmaW5lZCwgYSBDIGV4cHJlc3Npb24gd2hpY2ggZGV0ZXJtaW5lcyB3aGV0aGVyLCBhbmQgaW4gd2hpY2gKICAgICBkaXJlY3Rpb24sIHRvIHBhZCBvdXQgYW4gYXJndW1lbnQgd2l0aCBleHRyYSBzcGFjZS4gIFRoZSB2YWx1ZQogICAgIHNob3VsZCBiZSBvZiB0eXBlICdlbnVtIGRpcmVjdGlvbic6IGVpdGhlciAndXB3YXJkJyB0byBwYWQgYWJvdmUKICAgICB0aGUgYXJndW1lbnQsICdkb3dud2FyZCcgdG8gcGFkIGJlbG93LCBvciAnbm9uZScgdG8gaW5oaWJpdAogICAgIHBhZGRpbmcuCgogICAgIFRoZSBfYW1vdW50XyBvZiBwYWRkaW5nIGlzIGFsd2F5cyBqdXN0IGVub3VnaCB0byByZWFjaCB0aGUgbmV4dAogICAgIG11bHRpcGxlIG9mICdGVU5DVElPTl9BUkdfQk9VTkRBUlknOyB0aGlzIG1hY3JvIGRvZXMgbm90IGNvbnRyb2wKICAgICBpdC4KCiAgICAgVGhpcyBtYWNybyBoYXMgYSBkZWZhdWx0IGRlZmluaXRpb24gd2hpY2ggaXMgcmlnaHQgZm9yIG1vc3QKICAgICBzeXN0ZW1zLiAgRm9yIGxpdHRsZS1lbmRpYW4gbWFjaGluZXMsIHRoZSBkZWZhdWx0IGlzIHRvIHBhZCB1cHdhcmQuCiAgICAgRm9yIGJpZy1lbmRpYW4gbWFjaGluZXMsIHRoZSBkZWZhdWx0IGlzIHRvIHBhZCBkb3dud2FyZCBmb3IgYW4KICAgICBhcmd1bWVudCBvZiBjb25zdGFudCBzaXplIHNob3J0ZXIgdGhhbiBhbiAnaW50JywgYW5kIHVwd2FyZAogICAgIG90aGVyd2lzZS4KCiAtLSBNYWNybzogUEFEX1ZBUkFSR1NfRE9XTgogICAgIElmIGRlZmluZWQsIGEgQyBleHByZXNzaW9uIHdoaWNoIGRldGVybWluZXMgd2hldGhlciB0aGUgZGVmYXVsdAogICAgIGltcGxlbWVudGF0aW9uIG9mIHZhX2FyZyB3aWxsIGF0dGVtcHQgdG8gcGFkIGRvd24gYmVmb3JlIHJlYWRpbmcKICAgICB0aGUgbmV4dCBhcmd1bWVudCwgaWYgdGhhdCBhcmd1bWVudCBpcyBzbWFsbGVyIHRoYW4gaXRzIGFsaWduZWQKICAgICBzcGFjZSBhcyBjb250cm9sbGVkIGJ5ICdQQVJNX0JPVU5EQVJZJy4gIElmIHRoaXMgbWFjcm8gaXMgbm90CiAgICAgZGVmaW5lZCwgYWxsIHN1Y2ggYXJndW1lbnRzIGFyZSBwYWRkZWQgZG93biBpZiAnQllURVNfQklHX0VORElBTicKICAgICBpcyB0cnVlLgoKIC0tIE1hY3JvOiBCTE9DS19SRUdfUEFERElORyAoTU9ERSwgVFlQRSwgRklSU1QpCiAgICAgU3BlY2lmeSBwYWRkaW5nIGZvciB0aGUgbGFzdCBlbGVtZW50IG9mIGEgYmxvY2sgbW92ZSBiZXR3ZWVuCiAgICAgcmVnaXN0ZXJzIGFuZCBtZW1vcnkuICBGSVJTVCBpcyBub256ZXJvIGlmIHRoaXMgaXMgdGhlIG9ubHkKICAgICBlbGVtZW50LiAgRGVmaW5pbmcgdGhpcyBtYWNybyBhbGxvd3MgYmV0dGVyIGNvbnRyb2wgb2YgcmVnaXN0ZXIKICAgICBmdW5jdGlvbiBwYXJhbWV0ZXJzIG9uIGJpZy1lbmRpYW4gbWFjaGluZXMsIHdpdGhvdXQgdXNpbmcKICAgICAnUEFSQUxMRUwnIHJ0bC4gIEluIHBhcnRpY3VsYXIsICdNVVNUX1BBU1NfSU5fU1RBQ0snIG5lZWQgbm90IHRlc3QKICAgICBwYWRkaW5nIGFuZCBtb2RlIG9mIHR5cGVzIGluIHJlZ2lzdGVycywgYXMgdGhlcmUgaXMgbm8gbG9uZ2VyIGEKICAgICAid3JvbmciIHBhcnQgb2YgYSByZWdpc3RlcjsgRm9yIGV4YW1wbGUsIGEgdGhyZWUgYnl0ZSBhZ2dyZWdhdGUgbWF5CiAgICAgYmUgcGFzc2VkIGluIHRoZSBoaWdoIHBhcnQgb2YgYSByZWdpc3RlciBpZiBzbyByZXF1aXJlZC4KCiAtLSBNYWNybzogRlVOQ1RJT05fQVJHX0JPVU5EQVJZIChNT0RFLCBUWVBFKQogICAgIElmIGRlZmluZWQsIGEgQyBleHByZXNzaW9uIHRoYXQgZ2l2ZXMgdGhlIGFsaWdubWVudCBib3VuZGFyeSwgaW4KICAgICBiaXRzLCBvZiBhbiBhcmd1bWVudCB3aXRoIHRoZSBzcGVjaWZpZWQgbW9kZSBhbmQgdHlwZS4gIElmIGl0IGlzCiAgICAgbm90IGRlZmluZWQsICdQQVJNX0JPVU5EQVJZJyBpcyB1c2VkIGZvciBhbGwgYXJndW1lbnRzLgoKIC0tIE1hY3JvOiBGVU5DVElPTl9BUkdfUkVHTk9fUCAoUkVHTk8pCiAgICAgQSBDIGV4cHJlc3Npb24gdGhhdCBpcyBub256ZXJvIGlmIFJFR05PIGlzIHRoZSBudW1iZXIgb2YgYSBoYXJkCiAgICAgcmVnaXN0ZXIgaW4gd2hpY2ggZnVuY3Rpb24gYXJndW1lbnRzIGFyZSBzb21ldGltZXMgcGFzc2VkLiAgVGhpcwogICAgIGRvZXMgX25vdF8gaW5jbHVkZSBpbXBsaWNpdCBhcmd1bWVudHMgc3VjaCBhcyB0aGUgc3RhdGljIGNoYWluIGFuZAogICAgIHRoZSBzdHJ1Y3R1cmUtdmFsdWUgYWRkcmVzcy4gIE9uIG1hbnkgbWFjaGluZXMsIG5vIHJlZ2lzdGVycyBjYW4gYmUKICAgICB1c2VkIGZvciB0aGlzIHB1cnBvc2Ugc2luY2UgYWxsIGZ1bmN0aW9uIGFyZ3VtZW50cyBhcmUgcHVzaGVkIG9uCiAgICAgdGhlIHN0YWNrLgoKIC0tIFRhcmdldCBIb29rOiBib29sIFRBUkdFVF9TUExJVF9DT01QTEVYX0FSRyAodHJlZSBUWVBFKQogICAgIFRoaXMgaG9vayBzaG91bGQgcmV0dXJuIHRydWUgaWYgcGFyYW1ldGVyIG9mIHR5cGUgVFlQRSBhcmUgcGFzc2VkCiAgICAgYXMgdHdvIHNjYWxhciBwYXJhbWV0ZXJzLiAgQnkgZGVmYXVsdCwgR0NDIHdpbGwgYXR0ZW1wdCB0byBwYWNrCiAgICAgY29tcGxleCBhcmd1bWVudHMgaW50byB0aGUgdGFyZ2V0J3Mgd29yZCBzaXplLiAgU29tZSBBQklzIHJlcXVpcmUKICAgICBjb21wbGV4IGFyZ3VtZW50cyB0byBiZSBzcGxpdCBhbmQgdHJlYXRlZCBhcyB0aGVpciBpbmRpdmlkdWFsCiAgICAgY29tcG9uZW50cy4gIEZvciBleGFtcGxlLCBvbiBBSVg2NCwgY29tcGxleCBmbG9hdHMgc2hvdWxkIGJlIHBhc3NlZAogICAgIGluIGEgcGFpciBvZiBmbG9hdGluZyBwb2ludCByZWdpc3RlcnMsIGV2ZW4gdGhvdWdoIGEgY29tcGxleCBmbG9hdAogICAgIHdvdWxkIGZpdCBpbiBvbmUgNjQtYml0IGZsb2F0aW5nIHBvaW50IHJlZ2lzdGVyLgoKICAgICBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGlzIGhvb2sgaXMgJ05VTEwnLCB3aGljaCBpcyB0cmVhdGVkIGFzCiAgICAgYWx3YXlzIGZhbHNlLgoKIC0tIFRhcmdldCBIb29rOiB0cmVlIFRBUkdFVF9CVUlMRF9CVUlMVElOX1ZBX0xJU1QgKHZvaWQpCiAgICAgVGhpcyBob29rIHJldHVybnMgYSB0eXBlIG5vZGUgZm9yICd2YV9saXN0JyBmb3IgdGhlIHRhcmdldC4gIFRoZQogICAgIGRlZmF1bHQgdmVyc2lvbiBvZiB0aGUgaG9vayByZXR1cm5zICd2b2lkKicuCgogLS0gVGFyZ2V0IEhvb2s6IHRyZWUgVEFSR0VUX0dJTVBMSUZZX1ZBX0FSR19FWFBSICh0cmVlIFZBTElTVCwgdHJlZQogICAgICAgICAgVFlQRSwgdHJlZSAqUFJFX1AsIHRyZWUgKlBPU1RfUCkKICAgICBUaGlzIGhvb2sgcGVyZm9ybXMgdGFyZ2V0LXNwZWNpZmljIGdpbXBsaWZpY2F0aW9uIG9mICdWQV9BUkdfRVhQUicuCiAgICAgVGhlIGZpcnN0IHR3byBwYXJhbWV0ZXJzIGNvcnJlc3BvbmQgdG8gdGhlIGFyZ3VtZW50cyB0byAndmFfYXJnJzsKICAgICB0aGUgbGF0dGVyIHR3byBhcmUgYXMgaW4gJ2dpbXBsaWZ5LmM6Z2ltcGxpZnlfZXhwcicuCgogLS0gVGFyZ2V0IEhvb2s6IGJvb2wgVEFSR0VUX1ZBTElEX1BPSU5URVJfTU9ERSAoZW51bSBtYWNoaW5lX21vZGUgTU9ERSkKICAgICBEZWZpbmUgdGhpcyB0byByZXR1cm4gbm9uemVybyBpZiB0aGUgcG9ydCBjYW4gaGFuZGxlIHBvaW50ZXJzIHdpdGgKICAgICBtYWNoaW5lIG1vZGUgTU9ERS4gIFRoZSBkZWZhdWx0IHZlcnNpb24gb2YgdGhpcyBob29rIHJldHVybnMgdHJ1ZQogICAgIGZvciBib3RoICdwdHJfbW9kZScgYW5kICdQbW9kZScuCgogLS0gVGFyZ2V0IEhvb2s6IGJvb2wgVEFSR0VUX1NDQUxBUl9NT0RFX1NVUFBPUlRFRF9QIChlbnVtIG1hY2hpbmVfbW9kZQogICAgICAgICAgTU9ERSkKICAgICBEZWZpbmUgdGhpcyB0byByZXR1cm4gbm9uemVybyBpZiB0aGUgcG9ydCBpcyBwcmVwYXJlZCB0byBoYW5kbGUKICAgICBpbnNucyBpbnZvbHZpbmcgc2NhbGFyIG1vZGUgTU9ERS4gIEZvciBhIHNjYWxhciBtb2RlIHRvIGJlCiAgICAgY29uc2lkZXJlZCBzdXBwb3J0ZWQsIGFsbCB0aGUgYmFzaWMgYXJpdGhtZXRpYyBhbmQgY29tcGFyaXNvbnMgbXVzdAogICAgIHdvcmsuCgogICAgIFRoZSBkZWZhdWx0IHZlcnNpb24gb2YgdGhpcyBob29rIHJldHVybnMgdHJ1ZSBmb3IgYW55IG1vZGUgcmVxdWlyZWQKICAgICB0byBoYW5kbGUgdGhlIGJhc2ljIEMgdHlwZXMgKGFzIGRlZmluZWQgYnkgdGhlIHBvcnQpLiAgSW5jbHVkZWQKICAgICBoZXJlIGFyZSB0aGUgZG91YmxlLXdvcmQgYXJpdGhtZXRpYyBzdXBwb3J0ZWQgYnkgdGhlIGNvZGUgaW4KICAgICAnb3B0YWJzLmMnLgoKIC0tIFRhcmdldCBIb29rOiBib29sIFRBUkdFVF9WRUNUT1JfTU9ERV9TVVBQT1JURURfUCAoZW51bSBtYWNoaW5lX21vZGUKICAgICAgICAgIE1PREUpCiAgICAgRGVmaW5lIHRoaXMgdG8gcmV0dXJuIG5vbnplcm8gaWYgdGhlIHBvcnQgaXMgcHJlcGFyZWQgdG8gaGFuZGxlCiAgICAgaW5zbnMgaW52b2x2aW5nIHZlY3RvciBtb2RlIE1PREUuICBBdCB0aGUgdmVyeSBsZWFzdCwgaXQgbXVzdCBoYXZlCiAgICAgbW92ZSBwYXR0ZXJucyBmb3IgdGhpcyBtb2RlLgoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IFNjYWxhciBSZXR1cm4sICBOZXh0OiBBZ2dyZWdhdGUgUmV0dXJuLCAgUHJldjogUmVnaXN0ZXIgQXJndW1lbnRzLCAgVXA6IFN0YWNrIGFuZCBDYWxsaW5nCgoxNS4xMC44IEhvdyBTY2FsYXIgRnVuY3Rpb24gVmFsdWVzIEFyZSBSZXR1cm5lZAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKVGhpcyBzZWN0aW9uIGRpc2N1c3NlcyB0aGUgbWFjcm9zIHRoYXQgY29udHJvbCByZXR1cm5pbmcgc2NhbGFycyBhcwp2YWx1ZXMtLXZhbHVlcyB0aGF0IGNhbiBmaXQgaW4gcmVnaXN0ZXJzLgoKIC0tIFRhcmdldCBIb29rOiBydHggVEFSR0VUX0ZVTkNUSU9OX1ZBTFVFICh0cmVlIFJFVF9UWVBFLCB0cmVlCiAgICAgICAgICBGTl9ERUNMX09SX1RZUEUsIGJvb2wgT1VUR09JTkcpCgogICAgIERlZmluZSB0aGlzIHRvIHJldHVybiBhbiBSVFggcmVwcmVzZW50aW5nIHRoZSBwbGFjZSB3aGVyZSBhCiAgICAgZnVuY3Rpb24gcmV0dXJucyBvciByZWNlaXZlcyBhIHZhbHVlIG9mIGRhdGEgdHlwZSBSRVRfVFlQRSwgYSB0cmVlCiAgICAgbm9kZSBub2RlIHJlcHJlc2VudGluZyBhIGRhdGEgdHlwZS4gIEZOX0RFQ0xfT1JfVFlQRSBpcyBhIHRyZWUgbm9kZQogICAgIHJlcHJlc2VudGluZyAnRlVOQ1RJT05fREVDTCcgb3IgJ0ZVTkNUSU9OX1RZUEUnIG9mIGEgZnVuY3Rpb24gYmVpbmcKICAgICBjYWxsZWQuICBJZiBPVVRHT0lORyBpcyBmYWxzZSwgdGhlIGhvb2sgc2hvdWxkIGNvbXB1dGUgdGhlIHJlZ2lzdGVyCiAgICAgaW4gd2hpY2ggdGhlIGNhbGxlciB3aWxsIHNlZSB0aGUgcmV0dXJuIHZhbHVlLiAgT3RoZXJ3aXNlLCB0aGUgaG9vawogICAgIHNob3VsZCByZXR1cm4gYW4gUlRYIHJlcHJlc2VudGluZyB0aGUgcGxhY2Ugd2hlcmUgYSBmdW5jdGlvbgogICAgIHJldHVybnMgYSB2YWx1ZS4KCiAgICAgT24gbWFueSBtYWNoaW5lcywgb25seSAnVFlQRV9NT0RFIChSRVRfVFlQRSknIGlzIHJlbGV2YW50LgogICAgIChBY3R1YWxseSwgb24gbW9zdCBtYWNoaW5lcywgc2NhbGFyIHZhbHVlcyBhcmUgcmV0dXJuZWQgaW4gdGhlIHNhbWUKICAgICBwbGFjZSByZWdhcmRsZXNzIG9mIG1vZGUuKSAgVGhlIHZhbHVlIG9mIHRoZSBleHByZXNzaW9uIGlzIHVzdWFsbHkKICAgICBhICdyZWcnIFJUWCBmb3IgdGhlIGhhcmQgcmVnaXN0ZXIgd2hlcmUgdGhlIHJldHVybiB2YWx1ZSBpcyBzdG9yZWQuCiAgICAgVGhlIHZhbHVlIGNhbiBhbHNvIGJlIGEgJ3BhcmFsbGVsJyBSVFgsIGlmIHRoZSByZXR1cm4gdmFsdWUgaXMgaW4KICAgICBtdWx0aXBsZSBwbGFjZXMuICBTZWUgJ0ZVTkNUSU9OX0FSRycgZm9yIGFuIGV4cGxhbmF0aW9uIG9mIHRoZQogICAgICdwYXJhbGxlbCcgZm9ybS4gIE5vdGUgdGhhdCB0aGUgY2FsbGVlIHdpbGwgcG9wdWxhdGUgZXZlcnkgbG9jYXRpb24KICAgICBzcGVjaWZpZWQgaW4gdGhlICdwYXJhbGxlbCcsIGJ1dCBpZiB0aGUgZmlyc3QgZWxlbWVudCBvZiB0aGUKICAgICAncGFyYWxsZWwnIGNvbnRhaW5zIHRoZSB3aG9sZSByZXR1cm4gdmFsdWUsIGNhbGxlcnMgd2lsbCB1c2UgdGhhdAogICAgIGVsZW1lbnQgYXMgdGhlIGNhbm9uaWNhbCBsb2NhdGlvbiBhbmQgaWdub3JlIHRoZSBvdGhlcnMuICBUaGUgbTY4awogICAgIHBvcnQgdXNlcyB0aGlzIHR5cGUgb2YgJ3BhcmFsbGVsJyB0byByZXR1cm4gcG9pbnRlcnMgaW4gYm90aCAnJWEwJwogICAgICh0aGUgY2Fub25pY2FsIGxvY2F0aW9uKSBhbmQgJyVkMCcuCgogICAgIElmICdUQVJHRVRfUFJPTU9URV9GVU5DVElPTl9SRVRVUk4nIHJldHVybnMgdHJ1ZSwgeW91IG11c3QgYXBwbHkKICAgICB0aGUgc2FtZSBwcm9tb3Rpb24gcnVsZXMgc3BlY2lmaWVkIGluICdQUk9NT1RFX01PREUnIGlmIFZBTFRZUEUgaXMKICAgICBhIHNjYWxhciB0eXBlLgoKICAgICBJZiB0aGUgcHJlY2lzZSBmdW5jdGlvbiBiZWluZyBjYWxsZWQgaXMga25vd24sIEZVTkMgaXMgYSB0cmVlIG5vZGUKICAgICAoJ0ZVTkNUSU9OX0RFQ0wnKSBmb3IgaXQ7IG90aGVyd2lzZSwgRlVOQyBpcyBhIG51bGwgcG9pbnRlci4gIFRoaXMKICAgICBtYWtlcyBpdCBwb3NzaWJsZSB0byB1c2UgYSBkaWZmZXJlbnQgdmFsdWUtcmV0dXJuaW5nIGNvbnZlbnRpb24gZm9yCiAgICAgc3BlY2lmaWMgZnVuY3Rpb25zIHdoZW4gYWxsIHRoZWlyIGNhbGxzIGFyZSBrbm93bi4KCiAgICAgU29tZSB0YXJnZXQgbWFjaGluZXMgaGF2ZSAicmVnaXN0ZXIgd2luZG93cyIgc28gdGhhdCB0aGUgcmVnaXN0ZXIKICAgICBpbiB3aGljaCBhIGZ1bmN0aW9uIHJldHVybnMgaXRzIHZhbHVlIGlzIG5vdCB0aGUgc2FtZSBhcyB0aGUgb25lIGluCiAgICAgd2hpY2ggdGhlIGNhbGxlciBzZWVzIHRoZSB2YWx1ZS4gIEZvciBzdWNoIG1hY2hpbmVzLCB5b3Ugc2hvdWxkCiAgICAgcmV0dXJuIGRpZmZlcmVudCBSVFggZGVwZW5kaW5nIG9uIE9VVEdPSU5HLgoKICAgICAnVEFSR0VUX0ZVTkNUSU9OX1ZBTFVFJyBpcyBub3QgdXNlZCBmb3IgcmV0dXJuIHZhbHVlcyB3aXRoCiAgICAgYWdncmVnYXRlIGRhdGEgdHlwZXMsIGJlY2F1c2UgdGhlc2UgYXJlIHJldHVybmVkIGluIGFub3RoZXIgd2F5LgogICAgIFNlZSAnVEFSR0VUX1NUUlVDVF9WQUxVRV9SVFgnIGFuZCByZWxhdGVkIG1hY3JvcywgYmVsb3cuCgogLS0gTWFjcm86IEZVTkNUSU9OX1ZBTFVFIChWQUxUWVBFLCBGVU5DKQogICAgIFRoaXMgbWFjcm8gaGFzIGJlZW4gZGVwcmVjYXRlZC4gIFVzZSAnVEFSR0VUX0ZVTkNUSU9OX1ZBTFVFJyBmb3IgYQogICAgIG5ldyB0YXJnZXQgaW5zdGVhZC4KCiAtLSBNYWNybzogRlVOQ1RJT05fT1VUR09JTkdfVkFMVUUgKFZBTFRZUEUsIEZVTkMpCiAgICAgVGhpcyBtYWNybyBoYXMgYmVlbiBkZXByZWNhdGVkLiAgVXNlICdUQVJHRVRfRlVOQ1RJT05fVkFMVUUnIGZvciBhCiAgICAgbmV3IHRhcmdldCBpbnN0ZWFkLgoKIC0tIE1hY3JvOiBMSUJDQUxMX1ZBTFVFIChNT0RFKQogICAgIEEgQyBleHByZXNzaW9uIHRvIGNyZWF0ZSBhbiBSVFggcmVwcmVzZW50aW5nIHRoZSBwbGFjZSB3aGVyZSBhCiAgICAgbGlicmFyeSBmdW5jdGlvbiByZXR1cm5zIGEgdmFsdWUgb2YgbW9kZSBNT0RFLiAgSWYgdGhlIHByZWNpc2UKICAgICBmdW5jdGlvbiBiZWluZyBjYWxsZWQgaXMga25vd24sIEZVTkMgaXMgYSB0cmVlIG5vZGUKICAgICAoJ0ZVTkNUSU9OX0RFQ0wnKSBmb3IgaXQ7IG90aGVyd2lzZSwgRlVOQyBpcyBhIG51bGwgcG9pbnRlci4gIFRoaXMKICAgICBtYWtlcyBpdCBwb3NzaWJsZSB0byB1c2UgYSBkaWZmZXJlbnQgdmFsdWUtcmV0dXJuaW5nIGNvbnZlbnRpb24gZm9yCiAgICAgc3BlY2lmaWMgZnVuY3Rpb25zIHdoZW4gYWxsIHRoZWlyIGNhbGxzIGFyZSBrbm93bi4KCiAgICAgTm90ZSB0aGF0ICJsaWJyYXJ5IGZ1bmN0aW9uIiBpbiB0aGlzIGNvbnRleHQgbWVhbnMgYSBjb21waWxlcgogICAgIHN1cHBvcnQgcm91dGluZSwgdXNlZCB0byBwZXJmb3JtIGFyaXRobWV0aWMsIHdob3NlIG5hbWUgaXMga25vd24KICAgICBzcGVjaWFsbHkgYnkgdGhlIGNvbXBpbGVyIGFuZCB3YXMgbm90IG1lbnRpb25lZCBpbiB0aGUgQyBjb2RlIGJlaW5nCiAgICAgY29tcGlsZWQuCgogICAgIFRoZSBkZWZpbml0aW9uIG9mICdMSUJSQVJZX1ZBTFVFJyBuZWVkIG5vdCBiZSBjb25jZXJuZWQgYWdncmVnYXRlCiAgICAgZGF0YSB0eXBlcywgYmVjYXVzZSBub25lIG9mIHRoZSBsaWJyYXJ5IGZ1bmN0aW9ucyByZXR1cm5zIHN1Y2gKICAgICB0eXBlcy4KCiAtLSBNYWNybzogRlVOQ1RJT05fVkFMVUVfUkVHTk9fUCAoUkVHTk8pCiAgICAgQSBDIGV4cHJlc3Npb24gdGhhdCBpcyBub256ZXJvIGlmIFJFR05PIGlzIHRoZSBudW1iZXIgb2YgYSBoYXJkCiAgICAgcmVnaXN0ZXIgaW4gd2hpY2ggdGhlIHZhbHVlcyBvZiBjYWxsZWQgZnVuY3Rpb24gbWF5IGNvbWUgYmFjay4KCiAgICAgQSByZWdpc3RlciB3aG9zZSB1c2UgZm9yIHJldHVybmluZyB2YWx1ZXMgaXMgbGltaXRlZCB0byBzZXJ2aW5nIGFzCiAgICAgdGhlIHNlY29uZCBvZiBhIHBhaXIgKGZvciBhIHZhbHVlIG9mIHR5cGUgJ2RvdWJsZScsIHNheSkgbmVlZCBub3QKICAgICBiZSByZWNvZ25pemVkIGJ5IHRoaXMgbWFjcm8uICBTbyBmb3IgbW9zdCBtYWNoaW5lcywgdGhpcyBkZWZpbml0aW9uCiAgICAgc3VmZmljZXM6CgogICAgICAgICAgI2RlZmluZSBGVU5DVElPTl9WQUxVRV9SRUdOT19QKE4pICgoTikgPT0gMCkKCiAgICAgSWYgdGhlIG1hY2hpbmUgaGFzIHJlZ2lzdGVyIHdpbmRvd3MsIHNvIHRoYXQgdGhlIGNhbGxlciBhbmQgdGhlCiAgICAgY2FsbGVkIGZ1bmN0aW9uIHVzZSBkaWZmZXJlbnQgcmVnaXN0ZXJzIGZvciB0aGUgcmV0dXJuIHZhbHVlLCB0aGlzCiAgICAgbWFjcm8gc2hvdWxkIHJlY29nbml6ZSBvbmx5IHRoZSBjYWxsZXIncyByZWdpc3RlciBudW1iZXJzLgoKIC0tIE1hY3JvOiBBUFBMWV9SRVNVTFRfU0laRQogICAgIERlZmluZSB0aGlzIG1hY3JvIGlmICd1bnR5cGVkX2NhbGwnIGFuZCAndW50eXBlZF9yZXR1cm4nIG5lZWQgbW9yZQogICAgIHNwYWNlIHRoYW4gaXMgaW1wbGllZCBieSAnRlVOQ1RJT05fVkFMVUVfUkVHTk9fUCcgZm9yIHNhdmluZyBhbmQKICAgICByZXN0b3JpbmcgYW4gYXJiaXRyYXJ5IHJldHVybiB2YWx1ZS4KCiAtLSBUYXJnZXQgSG9vazogYm9vbCBUQVJHRVRfUkVUVVJOX0lOX01TQiAodHJlZSBUWVBFKQogICAgIFRoaXMgaG9vayBzaG91bGQgcmV0dXJuIHRydWUgaWYgdmFsdWVzIG9mIHR5cGUgVFlQRSBhcmUgcmV0dXJuZWQgYXQKICAgICB0aGUgbW9zdCBzaWduaWZpY2FudCBlbmQgb2YgYSByZWdpc3RlciAoaW4gb3RoZXIgd29yZHMsIGlmIHRoZXkgYXJlCiAgICAgcGFkZGVkIGF0IHRoZSBsZWFzdCBzaWduaWZpY2FudCBlbmQpLiAgWW91IGNhbiBhc3N1bWUgdGhhdCBUWVBFIGlzCiAgICAgcmV0dXJuZWQgaW4gYSByZWdpc3RlcjsgdGhlIGNhbGxlciBpcyByZXF1aXJlZCB0byBjaGVjayB0aGlzLgoKICAgICBOb3RlIHRoYXQgdGhlIHJlZ2lzdGVyIHByb3ZpZGVkIGJ5ICdUQVJHRVRfRlVOQ1RJT05fVkFMVUUnIG11c3QgYmUKICAgICBhYmxlIHRvIGhvbGQgdGhlIGNvbXBsZXRlIHJldHVybiB2YWx1ZS4gIEZvciBleGFtcGxlLCBpZiBhIDEtLCAyLQogICAgIG9yIDMtYnl0ZSBzdHJ1Y3R1cmUgaXMgcmV0dXJuZWQgYXQgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgZW5kIG9mIGEKICAgICA0LWJ5dGUgcmVnaXN0ZXIsICdUQVJHRVRfRlVOQ1RJT05fVkFMVUUnIHNob3VsZCBwcm92aWRlIGFuICdTSW1vZGUnCiAgICAgcnR4LgoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IEFnZ3JlZ2F0ZSBSZXR1cm4sICBOZXh0OiBDYWxsZXIgU2F2ZXMsICBQcmV2OiBTY2FsYXIgUmV0dXJuLCAgVXA6IFN0YWNrIGFuZCBDYWxsaW5nCgoxNS4xMC45IEhvdyBMYXJnZSBWYWx1ZXMgQXJlIFJldHVybmVkCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCldoZW4gYSBmdW5jdGlvbiB2YWx1ZSdzIG1vZGUgaXMgJ0JMS21vZGUnIChhbmQgaW4gc29tZSBvdGhlciBjYXNlcyksIHRoZQp2YWx1ZSBpcyBub3QgcmV0dXJuZWQgYWNjb3JkaW5nIHRvICdUQVJHRVRfRlVOQ1RJT05fVkFMVUUnICgqbm90ZSBTY2FsYXIKUmV0dXJuOjopLiAgSW5zdGVhZCwgdGhlIGNhbGxlciBwYXNzZXMgdGhlIGFkZHJlc3Mgb2YgYSBibG9jayBvZiBtZW1vcnkKaW4gd2hpY2ggdGhlIHZhbHVlIHNob3VsZCBiZSBzdG9yZWQuICBUaGlzIGFkZHJlc3MgaXMgY2FsbGVkIHRoZQoic3RydWN0dXJlIHZhbHVlIGFkZHJlc3MiLgoKIFRoaXMgc2VjdGlvbiBkZXNjcmliZXMgaG93IHRvIGNvbnRyb2wgcmV0dXJuaW5nIHN0cnVjdHVyZSB2YWx1ZXMgaW4KbWVtb3J5LgoKIC0tIFRhcmdldCBIb29rOiBib29sIFRBUkdFVF9SRVRVUk5fSU5fTUVNT1JZICh0cmVlIFRZUEUsIHRyZWUgRk5UWVBFKQogICAgIFRoaXMgdGFyZ2V0IGhvb2sgc2hvdWxkIHJldHVybiBhIG5vbnplcm8gdmFsdWUgdG8gc2F5IHRvIHJldHVybiB0aGUKICAgICBmdW5jdGlvbiB2YWx1ZSBpbiBtZW1vcnksIGp1c3QgYXMgbGFyZ2Ugc3RydWN0dXJlcyBhcmUgYWx3YXlzCiAgICAgcmV0dXJuZWQuICBIZXJlIFRZUEUgd2lsbCBiZSB0aGUgZGF0YSB0eXBlIG9mIHRoZSB2YWx1ZSwgYW5kIEZOVFlQRQogICAgIHdpbGwgYmUgdGhlIHR5cGUgb2YgdGhlIGZ1bmN0aW9uIGRvaW5nIHRoZSByZXR1cm5pbmcsIG9yICdOVUxMJyBmb3IKICAgICBsaWJjYWxscy4KCiAgICAgTm90ZSB0aGF0IHZhbHVlcyBvZiBtb2RlICdCTEttb2RlJyBtdXN0IGJlIGV4cGxpY2l0bHkgaGFuZGxlZCBieQogICAgIHRoaXMgZnVuY3Rpb24uICBBbHNvLCB0aGUgb3B0aW9uICctZnBjYy1zdHJ1Y3QtcmV0dXJuJyB0YWtlcyBlZmZlY3QKICAgICByZWdhcmRsZXNzIG9mIHRoaXMgbWFjcm8uICBPbiBtb3N0IHN5c3RlbXMsIGl0IGlzIHBvc3NpYmxlIHRvIGxlYXZlCiAgICAgdGhlIGhvb2sgdW5kZWZpbmVkOyB0aGlzIGNhdXNlcyBhIGRlZmF1bHQgZGVmaW5pdGlvbiB0byBiZSB1c2VkLAogICAgIHdob3NlIHZhbHVlIGlzIHRoZSBjb25zdGFudCAxIGZvciAnQkxLbW9kZScgdmFsdWVzLCBhbmQgMAogICAgIG90aGVyd2lzZS4KCiAgICAgRG8gbm90IHVzZSB0aGlzIGhvb2sgdG8gaW5kaWNhdGUgdGhhdCBzdHJ1Y3R1cmVzIGFuZCB1bmlvbnMgc2hvdWxkCiAgICAgYWx3YXlzIGJlIHJldHVybmVkIGluIG1lbW9yeS4gIFlvdSBzaG91bGQgaW5zdGVhZCB1c2UKICAgICAnREVGQVVMVF9QQ0NfU1RSVUNUX1JFVFVSTicgdG8gaW5kaWNhdGUgdGhpcy4KCiAtLSBNYWNybzogREVGQVVMVF9QQ0NfU1RSVUNUX1JFVFVSTgogICAgIERlZmluZSB0aGlzIG1hY3JvIHRvIGJlIDEgaWYgYWxsIHN0cnVjdHVyZSBhbmQgdW5pb24gcmV0dXJuIHZhbHVlcwogICAgIG11c3QgYmUgaW4gbWVtb3J5LiAgU2luY2UgdGhpcyByZXN1bHRzIGluIHNsb3dlciBjb2RlLCB0aGlzIHNob3VsZAogICAgIGJlIGRlZmluZWQgb25seSBpZiBuZWVkZWQgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBvdGhlciBjb21waWxlcnMgb3IKICAgICB3aXRoIGFuIEFCSS4gIElmIHlvdSBkZWZpbmUgdGhpcyBtYWNybyB0byBiZSAwLCB0aGVuIHRoZQogICAgIGNvbnZlbnRpb25zIHVzZWQgZm9yIHN0cnVjdHVyZSBhbmQgdW5pb24gcmV0dXJuIHZhbHVlcyBhcmUgZGVjaWRlZAogICAgIGJ5IHRoZSAnVEFSR0VUX1JFVFVSTl9JTl9NRU1PUlknIHRhcmdldCBob29rLgoKICAgICBJZiBub3QgZGVmaW5lZCwgdGhpcyBkZWZhdWx0cyB0byB0aGUgdmFsdWUgMS4KCiAtLSBUYXJnZXQgSG9vazogcnR4IFRBUkdFVF9TVFJVQ1RfVkFMVUVfUlRYICh0cmVlIEZOREVDTCwgaW50IElOQ09NSU5HKQogICAgIFRoaXMgdGFyZ2V0IGhvb2sgc2hvdWxkIHJldHVybiB0aGUgbG9jYXRpb24gb2YgdGhlIHN0cnVjdHVyZSB2YWx1ZQogICAgIGFkZHJlc3MgKG5vcm1hbGx5IGEgJ21lbScgb3IgJ3JlZycpLCBvciAwIGlmIHRoZSBhZGRyZXNzIGlzIHBhc3NlZAogICAgIGFzIGFuICJpbnZpc2libGUiIGZpcnN0IGFyZ3VtZW50LiAgTm90ZSB0aGF0IEZOREVDTCBtYXkgYmUgJ05VTEwnLAogICAgIGZvciBsaWJjYWxscy4gIFlvdSBkbyBub3QgbmVlZCB0byBkZWZpbmUgdGhpcyB0YXJnZXQgaG9vayBpZiB0aGUKICAgICBhZGRyZXNzIGlzIGFsd2F5cyBwYXNzZWQgYXMgYW4gImludmlzaWJsZSIgZmlyc3QgYXJndW1lbnQuCgogICAgIE9uIHNvbWUgYXJjaGl0ZWN0dXJlcyB0aGUgcGxhY2Ugd2hlcmUgdGhlIHN0cnVjdHVyZSB2YWx1ZSBhZGRyZXNzCiAgICAgaXMgZm91bmQgYnkgdGhlIGNhbGxlZCBmdW5jdGlvbiBpcyBub3QgdGhlIHNhbWUgcGxhY2UgdGhhdCB0aGUKICAgICBjYWxsZXIgcHV0IGl0LiAgVGhpcyBjYW4gYmUgZHVlIHRvIHJlZ2lzdGVyIHdpbmRvd3MsIG9yIGl0IGNvdWxkIGJlCiAgICAgYmVjYXVzZSB0aGUgZnVuY3Rpb24gcHJvbG9ndWUgbW92ZXMgaXQgdG8gYSBkaWZmZXJlbnQgcGxhY2UuCiAgICAgSU5DT01JTkcgaXMgJzEnIG9yICcyJyB3aGVuIHRoZSBsb2NhdGlvbiBpcyBuZWVkZWQgaW4gdGhlIGNvbnRleHQKICAgICBvZiB0aGUgY2FsbGVkIGZ1bmN0aW9uLCBhbmQgJzAnIGluIHRoZSBjb250ZXh0IG9mIHRoZSBjYWxsZXIuCgogICAgIElmIElOQ09NSU5HIGlzIG5vbnplcm8gYW5kIHRoZSBhZGRyZXNzIGlzIHRvIGJlIGZvdW5kIG9uIHRoZSBzdGFjaywKICAgICByZXR1cm4gYSAnbWVtJyB3aGljaCByZWZlcnMgdG8gdGhlIGZyYW1lIHBvaW50ZXIuICBJZiBJTkNPTUlORyBpcwogICAgICcyJywgdGhlIHJlc3VsdCBpcyBiZWluZyB1c2VkIHRvIGZldGNoIHRoZSBzdHJ1Y3R1cmUgdmFsdWUgYWRkcmVzcwogICAgIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBmdW5jdGlvbi4gIElmIHlvdSBuZWVkIHRvIGVtaXQgYWRqdXN0aW5nCiAgICAgY29kZSwgeW91IHNob3VsZCBkbyBpdCBhdCB0aGlzIHBvaW50LgoKIC0tIE1hY3JvOiBQQ0NfU1RBVElDX1NUUlVDVF9SRVRVUk4KICAgICBEZWZpbmUgdGhpcyBtYWNybyBpZiB0aGUgdXN1YWwgc3lzdGVtIGNvbnZlbnRpb24gb24gdGhlIHRhcmdldAogICAgIG1hY2hpbmUgZm9yIHJldHVybmluZyBzdHJ1Y3R1cmVzIGFuZCB1bmlvbnMgaXMgZm9yIHRoZSBjYWxsZWQKICAgICBmdW5jdGlvbiB0byByZXR1cm4gdGhlIGFkZHJlc3Mgb2YgYSBzdGF0aWMgdmFyaWFibGUgY29udGFpbmluZyB0aGUKICAgICB2YWx1ZS4KCiAgICAgRG8gbm90IGRlZmluZSB0aGlzIGlmIHRoZSB1c3VhbCBzeXN0ZW0gY29udmVudGlvbiBpcyBmb3IgdGhlIGNhbGxlcgogICAgIHRvIHBhc3MgYW4gYWRkcmVzcyB0byB0aGUgc3Vicm91dGluZS4KCiAgICAgVGhpcyBtYWNybyBoYXMgZWZmZWN0IGluICctZnBjYy1zdHJ1Y3QtcmV0dXJuJyBtb2RlLCBidXQgaXQgZG9lcwogICAgIG5vdGhpbmcgd2hlbiB5b3UgdXNlICctZnJlZy1zdHJ1Y3QtcmV0dXJuJyBtb2RlLgoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IENhbGxlciBTYXZlcywgIE5leHQ6IEZ1bmN0aW9uIEVudHJ5LCAgUHJldjogQWdncmVnYXRlIFJldHVybiwgIFVwOiBTdGFjayBhbmQgQ2FsbGluZwoKMTUuMTAuMTAgQ2FsbGVyLVNhdmVzIFJlZ2lzdGVyIEFsbG9jYXRpb24KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCklmIHlvdSBlbmFibGUgaXQsIEdDQyBjYW4gc2F2ZSByZWdpc3RlcnMgYXJvdW5kIGZ1bmN0aW9uIGNhbGxzLiAgVGhpcwptYWtlcyBpdCBwb3NzaWJsZSB0byB1c2UgY2FsbC1jbG9iYmVyZWQgcmVnaXN0ZXJzIHRvIGhvbGQgdmFyaWFibGVzIHRoYXQKbXVzdCBsaXZlIGFjcm9zcyBjYWxscy4KCiAtLSBNYWNybzogQ0FMTEVSX1NBVkVfUFJPRklUQUJMRSAoUkVGUywgQ0FMTFMpCiAgICAgQSBDIGV4cHJlc3Npb24gdG8gZGV0ZXJtaW5lIHdoZXRoZXIgaXQgaXMgd29ydGh3aGlsZSB0byBjb25zaWRlcgogICAgIHBsYWNpbmcgYSBwc2V1ZG8tcmVnaXN0ZXIgaW4gYSBjYWxsLWNsb2JiZXJlZCBoYXJkIHJlZ2lzdGVyIGFuZAogICAgIHNhdmluZyBhbmQgcmVzdG9yaW5nIGl0IGFyb3VuZCBlYWNoIGZ1bmN0aW9uIGNhbGwuICBUaGUgZXhwcmVzc2lvbgogICAgIHNob3VsZCBiZSAxIHdoZW4gdGhpcyBpcyB3b3J0aCBkb2luZywgYW5kIDAgb3RoZXJ3aXNlLgoKICAgICBJZiB5b3UgZG9uJ3QgZGVmaW5lIHRoaXMgbWFjcm8sIGEgZGVmYXVsdCBpcyB1c2VkIHdoaWNoIGlzIGdvb2Qgb24KICAgICBtb3N0IG1hY2hpbmVzOiAnNCAqIENBTExTIDwgUkVGUycuCgogLS0gTWFjcm86IEhBUkRfUkVHTk9fQ0FMTEVSX1NBVkVfTU9ERSAoUkVHTk8sIE5SRUdTKQogICAgIEEgQyBleHByZXNzaW9uIHNwZWNpZnlpbmcgd2hpY2ggbW9kZSBpcyByZXF1aXJlZCBmb3Igc2F2aW5nIE5SRUdTCiAgICAgb2YgYSBwc2V1ZG8tcmVnaXN0ZXIgaW4gY2FsbC1jbG9iYmVyZWQgaGFyZCByZWdpc3RlciBSRUdOTy4gIElmCiAgICAgUkVHTk8gaXMgdW5zdWl0YWJsZSBmb3IgY2FsbGVyIHNhdmUsICdWT0lEbW9kZScgc2hvdWxkIGJlIHJldHVybmVkLgogICAgIEZvciBtb3N0IG1hY2hpbmVzIHRoaXMgbWFjcm8gbmVlZCBub3QgYmUgZGVmaW5lZCBzaW5jZSBHQ0Mgd2lsbAogICAgIHNlbGVjdCB0aGUgc21hbGxlc3Qgc3VpdGFibGUgbW9kZS4KCh8KRmlsZTogZ2NjaW50LmluZm8sICBOb2RlOiBGdW5jdGlvbiBFbnRyeSwgIE5leHQ6IFByb2ZpbGluZywgIFByZXY6IENhbGxlciBTYXZlcywgIFVwOiBTdGFjayBhbmQgQ2FsbGluZwoKMTUuMTAuMTEgRnVuY3Rpb24gRW50cnkgYW5kIEV4aXQKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KClRoaXMgc2VjdGlvbiBkZXNjcmliZXMgdGhlIG1hY3JvcyB0aGF0IG91dHB1dCBmdW5jdGlvbiBlbnRyeQooInByb2xvZ3VlIikgYW5kIGV4aXQgKCJlcGlsb2d1ZSIpIGNvZGUuCgogLS0gVGFyZ2V0IEhvb2s6IHZvaWQgVEFSR0VUX0FTTV9GVU5DVElPTl9QUk9MT0dVRSAoRklMRSAqRklMRSwKICAgICAgICAgIEhPU1RfV0lERV9JTlQgU0laRSkKICAgICBJZiBkZWZpbmVkLCBhIGZ1bmN0aW9uIHRoYXQgb3V0cHV0cyB0aGUgYXNzZW1ibGVyIGNvZGUgZm9yIGVudHJ5IHRvCiAgICAgYSBmdW5jdGlvbi4gIFRoZSBwcm9sb2d1ZSBpcyByZXNwb25zaWJsZSBmb3Igc2V0dGluZyB1cCB0aGUgc3RhY2sKICAgICBmcmFtZSwgaW5pdGlhbGl6aW5nIHRoZSBmcmFtZSBwb2ludGVyIHJlZ2lzdGVyLCBzYXZpbmcgcmVnaXN0ZXJzCiAgICAgdGhhdCBtdXN0IGJlIHNhdmVkLCBhbmQgYWxsb2NhdGluZyBTSVpFIGFkZGl0aW9uYWwgYnl0ZXMgb2Ygc3RvcmFnZQogICAgIGZvciB0aGUgbG9jYWwgdmFyaWFibGVzLiAgU0laRSBpcyBhbiBpbnRlZ2VyLiAgRklMRSBpcyBhIHN0ZGlvCiAgICAgc3RyZWFtIHRvIHdoaWNoIHRoZSBhc3NlbWJsZXIgY29kZSBzaG91bGQgYmUgb3V0cHV0LgoKICAgICBUaGUgbGFiZWwgZm9yIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZ1bmN0aW9uIG5lZWQgbm90IGJlIG91dHB1dCBieQogICAgIHRoaXMgbWFjcm8uICBUaGF0IGhhcyBhbHJlYWR5IGJlZW4gZG9uZSB3aGVuIHRoZSBtYWNybyBpcyBydW4uCgogICAgIFRvIGRldGVybWluZSB3aGljaCByZWdpc3RlcnMgdG8gc2F2ZSwgdGhlIG1hY3JvIGNhbiByZWZlciB0byB0aGUKICAgICBhcnJheSAncmVnc19ldmVyX2xpdmUnOiBlbGVtZW50IFIgaXMgbm9uemVybyBpZiBoYXJkIHJlZ2lzdGVyIFIgaXMKICAgICB1c2VkIGFueXdoZXJlIHdpdGhpbiB0aGUgZnVuY3Rpb24uICBUaGlzIGltcGxpZXMgdGhlIGZ1bmN0aW9uCiAgICAgcHJvbG9ndWUgc2hvdWxkIHNhdmUgcmVnaXN0ZXIgUiwgcHJvdmlkZWQgaXQgaXMgbm90IG9uZSBvZiB0aGUKICAgICBjYWxsLXVzZWQgcmVnaXN0ZXJzLiAgKCdUQVJHRVRfQVNNX0ZVTkNUSU9OX0VQSUxPR1VFJyBtdXN0IGxpa2V3aXNlCiAgICAgdXNlICdyZWdzX2V2ZXJfbGl2ZScuKQoKICAgICBPbiBtYWNoaW5lcyB0aGF0IGhhdmUgInJlZ2lzdGVyIHdpbmRvd3MiLCB0aGUgZnVuY3Rpb24gZW50cnkgY29kZQogICAgIGRvZXMgbm90IHNhdmUgb24gdGhlIHN0YWNrIHRoZSByZWdpc3RlcnMgdGhhdCBhcmUgaW4gdGhlIHdpbmRvd3MsCiAgICAgZXZlbiBpZiB0aGV5IGFyZSBzdXBwb3NlZCB0byBiZSBwcmVzZXJ2ZWQgYnkgZnVuY3Rpb24gY2FsbHM7CiAgICAgaW5zdGVhZCBpdCB0YWtlcyBhcHByb3ByaWF0ZSBzdGVwcyB0byAicHVzaCIgdGhlIHJlZ2lzdGVyIHN0YWNrLCBpZgogICAgIGFueSBub24tY2FsbC11c2VkIHJlZ2lzdGVycyBhcmUgdXNlZCBpbiB0aGUgZnVuY3Rpb24uCgogICAgIE9uIG1hY2hpbmVzIHdoZXJlIGZ1bmN0aW9ucyBtYXkgb3IgbWF5IG5vdCBoYXZlIGZyYW1lLXBvaW50ZXJzLCB0aGUKICAgICBmdW5jdGlvbiBlbnRyeSBjb2RlIG11c3QgdmFyeSBhY2NvcmRpbmdseTsgaXQgbXVzdCBzZXQgdXAgdGhlIGZyYW1lCiAgICAgcG9pbnRlciBpZiBvbmUgaXMgd2FudGVkLCBhbmQgbm90IG90aGVyd2lzZS4gIFRvIGRldGVybWluZSB3aGV0aGVyCiAgICAgYSBmcmFtZSBwb2ludGVyIGlzIGluIHdhbnRlZCwgdGhlIG1hY3JvIGNhbiByZWZlciB0byB0aGUgdmFyaWFibGUKICAgICAnZnJhbWVfcG9pbnRlcl9uZWVkZWQnLiAgVGhlIHZhcmlhYmxlJ3MgdmFsdWUgd2lsbCBiZSAxIGF0IHJ1biB0aW1lCiAgICAgaW4gYSBmdW5jdGlvbiB0aGF0IG5lZWRzIGEgZnJhbWUgcG9pbnRlci4gICpOb3RlIEVsaW1pbmF0aW9uOjouCgogICAgIFRoZSBmdW5jdGlvbiBlbnRyeSBjb2RlIGlzIHJlc3BvbnNpYmxlIGZvciBhbGxvY2F0aW5nIGFueSBzdGFjawogICAgIHNwYWNlIHJlcXVpcmVkIGZvciB0aGUgZnVuY3Rpb24uICBUaGlzIHN0YWNrIHNwYWNlIGNvbnNpc3RzIG9mIHRoZQogICAgIHJlZ2lvbnMgbGlzdGVkIGJlbG93LiAgSW4gbW9zdCBjYXNlcywgdGhlc2UgcmVnaW9ucyBhcmUgYWxsb2NhdGVkCiAgICAgaW4gdGhlIG9yZGVyIGxpc3RlZCwgd2l0aCB0aGUgbGFzdCBsaXN0ZWQgcmVnaW9uIGNsb3Nlc3QgdG8gdGhlIHRvcAogICAgIG9mIHRoZSBzdGFjayAodGhlIGxvd2VzdCBhZGRyZXNzIGlmICdTVEFDS19HUk9XU19ET1dOV0FSRCcgaXMKICAgICBkZWZpbmVkLCBhbmQgdGhlIGhpZ2hlc3QgYWRkcmVzcyBpZiBpdCBpcyBub3QgZGVmaW5lZCkuICBZb3UgY2FuCiAgICAgdXNlIGEgZGlmZmVyZW50IG9yZGVyIGZvciBhIG1hY2hpbmUgaWYgZG9pbmcgc28gaXMgbW9yZSBjb252ZW5pZW50CiAgICAgb3IgcmVxdWlyZWQgZm9yIGNvbXBhdGliaWxpdHkgcmVhc29ucy4gIEV4Y2VwdCBpbiBjYXNlcyB3aGVyZQogICAgIHJlcXVpcmVkIGJ5IHN0YW5kYXJkIG9yIGJ5IGEgZGVidWdnZXIsIHRoZXJlIGlzIG5vIHJlYXNvbiB3aHkgdGhlCiAgICAgc3RhY2sgbGF5b3V0IHVzZWQgYnkgR0NDIG5lZWQgYWdyZWUgd2l0aCB0aGF0IHVzZWQgYnkgb3RoZXIKICAgICBjb21waWxlcnMgZm9yIGEgbWFjaGluZS4KCiAtLSBUYXJnZXQgSG9vazogdm9pZCBUQVJHRVRfQVNNX0ZVTkNUSU9OX0VORF9QUk9MT0dVRSAoRklMRSAqRklMRSkKICAgICBJZiBkZWZpbmVkLCBhIGZ1bmN0aW9uIHRoYXQgb3V0cHV0cyBhc3NlbWJsZXIgY29kZSBhdCB0aGUgZW5kIG9mIGEKICAgICBwcm9sb2d1ZS4gIFRoaXMgc2hvdWxkIGJlIHVzZWQgd2hlbiB0aGUgZnVuY3Rpb24gcHJvbG9ndWUgaXMgYmVpbmcKICAgICBlbWl0dGVkIGFzIFJUTCwgYW5kIHlvdSBoYXZlIHNvbWUgZXh0cmEgYXNzZW1ibGVyIHRoYXQgbmVlZHMgdG8gYmUKICAgICBlbWl0dGVkLiAgKk5vdGUgcHJvbG9ndWUgaW5zdHJ1Y3Rpb24gcGF0dGVybjo6LgoKIC0tIFRhcmdldCBIb29rOiB2b2lkIFRBUkdFVF9BU01fRlVOQ1RJT05fQkVHSU5fRVBJTE9HVUUgKEZJTEUgKkZJTEUpCiAgICAgSWYgZGVmaW5lZCwgYSBmdW5jdGlvbiB0aGF0IG91dHB1dHMgYXNzZW1ibGVyIGNvZGUgYXQgdGhlIHN0YXJ0IG9mCiAgICAgYW4gZXBpbG9ndWUuICBUaGlzIHNob3VsZCBiZSB1c2VkIHdoZW4gdGhlIGZ1bmN0aW9uIGVwaWxvZ3VlIGlzCiAgICAgYmVpbmcgZW1pdHRlZCBhcyBSVEwsIGFuZCB5b3UgaGF2ZSBzb21lIGV4dHJhIGFzc2VtYmxlciB0aGF0IG5lZWRzCiAgICAgdG8gYmUgZW1pdHRlZC4gICpOb3RlIGVwaWxvZ3VlIGluc3RydWN0aW9uIHBhdHRlcm46Oi4KCiAtLSBUYXJnZXQgSG9vazogdm9pZCBUQVJHRVRfQVNNX0ZVTkNUSU9OX0VQSUxPR1VFIChGSUxFICpGSUxFLAogICAgICAgICAgSE9TVF9XSURFX0lOVCBTSVpFKQogICAgIElmIGRlZmluZWQsIGEgZnVuY3Rpb24gdGhhdCBvdXRwdXRzIHRoZSBhc3NlbWJsZXIgY29kZSBmb3IgZXhpdAogICAgIGZyb20gYSBmdW5jdGlvbi4gIFRoZSBlcGlsb2d1ZSBpcyByZXNwb25zaWJsZSBmb3IgcmVzdG9yaW5nIHRoZQogICAgIHNhdmVkIHJlZ2lzdGVycyBhbmQgc3RhY2sgcG9pbnRlciB0byB0aGVpciB2YWx1ZXMgd2hlbiB0aGUgZnVuY3Rpb24KICAgICB3YXMgY2FsbGVkLCBhbmQgcmV0dXJuaW5nIGNvbnRyb2wgdG8gdGhlIGNhbGxlci4gIFRoaXMgbWFjcm8gdGFrZXMKICAgICB0aGUgc2FtZSBhcmd1bWVudHMgYXMgdGhlIG1hY3JvICdUQVJHRVRfQVNNX0ZVTkNUSU9OX1BST0xPR1VFJywgYW5kCiAgICAgdGhlIHJlZ2lzdGVycyB0byByZXN0b3JlIGFyZSBkZXRlcm1pbmVkIGZyb20gJ3JlZ3NfZXZlcl9saXZlJyBhbmQKICAgICAnQ0FMTF9VU0VEX1JFR0lTVEVSUycgaW4gdGhlIHNhbWUgd2F5LgoKICAgICBPbiBzb21lIG1hY2hpbmVzLCB0aGVyZSBpcyBhIHNpbmdsZSBpbnN0cnVjdGlvbiB0aGF0IGRvZXMgYWxsIHRoZQogICAgIHdvcmsgb2YgcmV0dXJuaW5nIGZyb20gdGhlIGZ1bmN0aW9uLiAgT24gdGhlc2UgbWFjaGluZXMsIGdpdmUgdGhhdAogICAgIGluc3RydWN0aW9uIHRoZSBuYW1lICdyZXR1cm4nIGFuZCBkbyBub3QgZGVmaW5lIHRoZSBtYWNybwogICAgICdUQVJHRVRfQVNNX0ZVTkNUSU9OX0VQSUxPR1VFJyBhdCBhbGwuCgogICAgIERvIG5vdCBkZWZpbmUgYSBwYXR0ZXJuIG5hbWVkICdyZXR1cm4nIGlmIHlvdSB3YW50IHRoZQogICAgICdUQVJHRVRfQVNNX0ZVTkNUSU9OX0VQSUxPR1VFJyB0byBiZSB1c2VkLiAgSWYgeW91IHdhbnQgdGhlIHRhcmdldAogICAgIHN3aXRjaGVzIHRvIGNvbnRyb2wgd2hldGhlciByZXR1cm4gaW5zdHJ1Y3Rpb25zIG9yIGVwaWxvZ3VlcyBhcmUKICAgICB1c2VkLCBkZWZpbmUgYSAncmV0dXJuJyBwYXR0ZXJuIHdpdGggYSB2YWxpZGl0eSBjb25kaXRpb24gdGhhdAogICAgIHRlc3RzIHRoZSB0YXJnZXQgc3dpdGNoZXMgYXBwcm9wcmlhdGVseS4gIElmIHRoZSAncmV0dXJuJyBwYXR0ZXJuJ3MKICAgICB2YWxpZGl0eSBjb25kaXRpb24gaXMgZmFsc2UsIGVwaWxvZ3VlcyB3aWxsIGJlIHVzZWQuCgogICAgIE9uIG1hY2hpbmVzIHdoZXJlIGZ1bmN0aW9ucyBtYXkgb3IgbWF5IG5vdCBoYXZlIGZyYW1lLXBvaW50ZXJzLCB0aGUKICAgICBmdW5jdGlvbiBleGl0IGNvZGUgbXVzdCB2YXJ5IGFjY29yZGluZ2x5LiAgU29tZXRpbWVzIHRoZSBjb2RlIGZvcgogICAgIHRoZXNlIHR3byBjYXNlcyBpcyBjb21wbGV0ZWx5IGRpZmZlcmVudC4gIFRvIGRldGVybWluZSB3aGV0aGVyIGEKICAgICBmcmFtZSBwb2ludGVyIGlzIHdhbnRlZCwgdGhlIG1hY3JvIGNhbiByZWZlciB0byB0aGUgdmFyaWFibGUKICAgICAnZnJhbWVfcG9pbnRlcl9uZWVkZWQnLiAgVGhlIHZhcmlhYmxlJ3MgdmFsdWUgd2lsbCBiZSAxIHdoZW4KICAgICBjb21waWxpbmcgYSBmdW5jdGlvbiB0aGF0IG5lZWRzIGEgZnJhbWUgcG9pbnRlci4KCiAgICAgTm9ybWFsbHksICdUQVJHRVRfQVNNX0ZVTkNUSU9OX1BST0xPR1VFJyBhbmQKICAgICAnVEFSR0VUX0FTTV9GVU5DVElPTl9FUElMT0dVRScgbXVzdCB0cmVhdCBsZWFmIGZ1bmN0aW9ucyBzcGVjaWFsbHkuCiAgICAgVGhlIEMgdmFyaWFibGUgJ2N1cnJlbnRfZnVuY3Rpb25faXNfbGVhZicgaXMgbm9uemVybyBmb3Igc3VjaCBhCiAgICAgZnVuY3Rpb24uICAqTm90ZSBMZWFmIEZ1bmN0aW9uczo6LgoKICAgICBPbiBzb21lIG1hY2hpbmVzLCBzb21lIGZ1bmN0aW9ucyBwb3AgdGhlaXIgYXJndW1lbnRzIG9uIGV4aXQgd2hpbGUKICAgICBvdGhlcnMgbGVhdmUgdGhhdCBmb3IgdGhlIGNhbGxlciB0byBkby4gIEZvciBleGFtcGxlLCB0aGUgNjgwMjAKICAgICB3aGVuIGdpdmVuICctbXJ0ZCcgcG9wcyBhcmd1bWVudHMgaW4gZnVuY3Rpb25zIHRoYXQgdGFrZSBhIGZpeGVkCiAgICAgbnVtYmVyIG9mIGFyZ3VtZW50cy4KCiAgICAgWW91ciBkZWZpbml0aW9uIG9mIHRoZSBtYWNybyAnUkVUVVJOX1BPUFNfQVJHUycgZGVjaWRlcyB3aGljaAogICAgIGZ1bmN0aW9ucyBwb3AgdGhlaXIgb3duIGFyZ3VtZW50cy4gICdUQVJHRVRfQVNNX0ZVTkNUSU9OX0VQSUxPR1VFJwogICAgIG5lZWRzIHRvIGtub3cgd2hhdCB3YXMgZGVjaWRlZC4gIFRoZSB2YXJpYWJsZSB0aGF0IGlzIGNhbGxlZAogICAgICdjdXJyZW50X2Z1bmN0aW9uX3BvcHNfYXJncycgaXMgdGhlIG51bWJlciBvZiBieXRlcyBvZiBpdHMKICAgICBhcmd1bWVudHMgdGhhdCBhIGZ1bmN0aW9uIHNob3VsZCBwb3AuICAqTm90ZSBTY2FsYXIgUmV0dXJuOjouCgogICAqIEEgcmVnaW9uIG9mICdjdXJyZW50X2Z1bmN0aW9uX3ByZXRlbmRfYXJnc19zaXplJyBieXRlcyBvZgogICAgIHVuaW5pdGlhbGl6ZWQgc3BhY2UganVzdCB1bmRlcm5lYXRoIHRoZSBmaXJzdCBhcmd1bWVudCBhcnJpdmluZyBvbgogICAgIHRoZSBzdGFjay4gIChUaGlzIG1heSBub3QgYmUgYXQgdGhlIHZlcnkgc3RhcnQgb2YgdGhlIGFsbG9jYXRlZAogICAgIHN0YWNrIHJlZ2lvbiBpZiB0aGUgY2FsbGluZyBzZXF1ZW5jZSBoYXMgcHVzaGVkIGFueXRoaW5nIGVsc2Ugc2luY2UKICAgICBwdXNoaW5nIHRoZSBzdGFjayBhcmd1bWVudHMuICBCdXQgdXN1YWxseSwgb24gc3VjaCBtYWNoaW5lcywKICAgICBub3RoaW5nIGVsc2UgaGFzIGJlZW4gcHVzaGVkIHlldCwgYmVjYXVzZSB0aGUgZnVuY3Rpb24gcHJvbG9ndWUKICAgICBpdHNlbGYgZG9lcyBhbGwgdGhlIHB1c2hpbmcuKSAgVGhpcyByZWdpb24gaXMgdXNlZCBvbiBtYWNoaW5lcwogICAgIHdoZXJlIGFuIGFyZ3VtZW50IG1heSBiZSBwYXNzZWQgcGFydGx5IGluIHJlZ2lzdGVycyBhbmQgcGFydGx5IGluCiAgICAgbWVtb3J5LCBhbmQsIGluIHNvbWUgY2FzZXMgdG8gc3VwcG9ydCB0aGUgZmVhdHVyZXMgaW4gJzxzdGRhcmcuaD4nLgoKICAgKiBBbiBhcmVhIG9mIG1lbW9yeSB1c2VkIHRvIHNhdmUgY2VydGFpbiByZWdpc3RlcnMgdXNlZCBieSB0aGUKICAgICBmdW5jdGlvbi4gIFRoZSBzaXplIG9mIHRoaXMgYXJlYSwgd2hpY2ggbWF5IGFsc28gaW5jbHVkZSBzcGFjZSBmb3IKICAgICBzdWNoIHRoaW5ncyBhcyB0aGUgcmV0dXJuIGFkZHJlc3MgYW5kIHBvaW50ZXJzIHRvIHByZXZpb3VzIHN0YWNrCiAgICAgZnJhbWVzLCBpcyBtYWNoaW5lLXNwZWNpZmljIGFuZCB1c3VhbGx5IGRlcGVuZHMgb24gd2hpY2ggcmVnaXN0ZXJzCiAgICAgaGF2ZSBiZWVuIHVzZWQgaW4gdGhlIGZ1bmN0aW9uLiAgTWFjaGluZXMgd2l0aCByZWdpc3RlciB3aW5kb3dzCiAgICAgb2Z0ZW4gZG8gbm90IHJlcXVpcmUgYSBzYXZlIGFyZWEuCgogICAqIEEgcmVnaW9uIG9mIGF0IGxlYXN0IFNJWkUgYnl0ZXMsIHBvc3NpYmx5IHJvdW5kZWQgdXAgdG8gYW4KICAgICBhbGxvY2F0aW9uIGJvdW5kYXJ5LCB0byBjb250YWluIHRoZSBsb2NhbCB2YXJpYWJsZXMgb2YgdGhlCiAgICAgZnVuY3Rpb24uICBPbiBzb21lIG1hY2hpbmVzLCB0aGlzIHJlZ2lvbiBhbmQgdGhlIHNhdmUgYXJlYSBtYXkKICAgICBvY2N1ciBpbiB0aGUgb3Bwb3NpdGUgb3JkZXIsIHdpdGggdGhlIHNhdmUgYXJlYSBjbG9zZXIgdG8gdGhlIHRvcAogICAgIG9mIHRoZSBzdGFjay4KCiAgICogT3B0aW9uYWxseSwgd2hlbiAnQUNDVU1VTEFURV9PVVRHT0lOR19BUkdTJyBpcyBkZWZpbmVkLCBhIHJlZ2lvbiBvZgogICAgICdjdXJyZW50X2Z1bmN0aW9uX291dGdvaW5nX2FyZ3Nfc2l6ZScgYnl0ZXMgdG8gYmUgdXNlZCBmb3Igb3V0Z29pbmcKICAgICBhcmd1bWVudCBsaXN0cyBvZiB0aGUgZnVuY3Rpb24uICAqTm90ZSBTdGFjayBBcmd1bWVudHM6Oi4KCiAtLSBNYWNybzogRVhJVF9JR05PUkVfU1RBQ0sKICAgICBEZWZpbmUgdGhpcyBtYWNybyBhcyBhIEMgZXhwcmVzc2lvbiB0aGF0IGlzIG5vbnplcm8gaWYgdGhlIHJldHVybgogICAgIGluc3RydWN0aW9uIG9yIHRoZSBmdW5jdGlvbiBlcGlsb2d1ZSBpZ25vcmVzIHRoZSB2YWx1ZSBvZiB0aGUgc3RhY2sKICAgICBwb2ludGVyOyBpbiBvdGhlciB3b3JkcywgaWYgaXQgaXMgc2FmZSB0byBkZWxldGUgYW4gaW5zdHJ1Y3Rpb24gdG8KICAgICBhZGp1c3QgdGhlIHN0YWNrIHBvaW50ZXIgYmVmb3JlIGEgcmV0dXJuIGZyb20gdGhlIGZ1bmN0aW9uLiAgVGhlCiAgICAgZGVmYXVsdCBpcyAwLgoKICAgICBOb3RlIHRoYXQgdGhpcyBtYWNybydzIHZhbHVlIGlzIHJlbGV2YW50IG9ubHkgZm9yIGZ1bmN0aW9ucyBmb3IKICAgICB3aGljaCBmcmFtZSBwb2ludGVycyBhcmUgbWFpbnRhaW5lZC4gIEl0IGlzIG5ldmVyIHNhZmUgdG8gZGVsZXRlIGEKICAgICBmaW5hbCBzdGFjayBhZGp1c3RtZW50IGluIGEgZnVuY3Rpb24gdGhhdCBoYXMgbm8gZnJhbWUgcG9pbnRlciwgYW5kCiAgICAgdGhlIGNvbXBpbGVyIGtub3dzIHRoaXMgcmVnYXJkbGVzcyBvZiAnRVhJVF9JR05PUkVfU1RBQ0snLgoKIC0tIE1hY3JvOiBFUElMT0dVRV9VU0VTIChSRUdOTykKICAgICBEZWZpbmUgdGhpcyBtYWNybyBhcyBhIEMgZXhwcmVzc2lvbiB0aGF0IGlzIG5vbnplcm8gZm9yIHJlZ2lzdGVycwogICAgIHRoYXQgYXJlIHVzZWQgYnkgdGhlIGVwaWxvZ3VlIG9yIHRoZSAncmV0dXJuJyBwYXR0ZXJuLiAgVGhlIHN0YWNrCiAgICAgYW5kIGZyYW1lIHBvaW50ZXIgcmVnaXN0ZXJzIGFyZSBhbHJlYWR5IGFzc3VtZWQgdG8gYmUgdXNlZCBhcwogICAgIG5lZWRlZC4KCiAtLSBNYWNybzogRUhfVVNFUyAoUkVHTk8pCiAgICAgRGVmaW5lIHRoaXMgbWFjcm8gYXMgYSBDIGV4cHJlc3Npb24gdGhhdCBpcyBub256ZXJvIGZvciByZWdpc3RlcnMKICAgICB0aGF0IGFyZSB1c2VkIGJ5IHRoZSBleGNlcHRpb24gaGFuZGxpbmcgbWVjaGFuaXNtLCBhbmQgc28gc2hvdWxkIGJlCiAgICAgY29uc2lkZXJlZCBsaXZlIG9uIGVudHJ5IHRvIGFuIGV4Y2VwdGlvbiBlZGdlLgoKIC0tIE1hY3JvOiBERUxBWV9TTE9UU19GT1JfRVBJTE9HVUUKICAgICBEZWZpbmUgdGhpcyBtYWNybyBpZiB0aGUgZnVuY3Rpb24gZXBpbG9ndWUgY29udGFpbnMgZGVsYXkgc2xvdHMgdG8KICAgICB3aGljaCBpbnN0cnVjdGlvbnMgZnJvbSB0aGUgcmVzdCBvZiB0aGUgZnVuY3Rpb24gY2FuIGJlICJtb3ZlZCIuCiAgICAgVGhlIGRlZmluaXRpb24gc2hvdWxkIGJlIGEgQyBleHByZXNzaW9uIHdob3NlIHZhbHVlIGlzIGFuIGludGVnZXIKICAgICByZXByZXNlbnRpbmcgdGhlIG51bWJlciBvZiBkZWxheSBzbG90cyB0aGVyZS4KCiAtLSBNYWNybzogRUxJR0lCTEVfRk9SX0VQSUxPR1VFX0RFTEFZIChJTlNOLCBOKQogICAgIEEgQyBleHByZXNzaW9uIHRoYXQgcmV0dXJucyAxIGlmIElOU04gY2FuIGJlIHBsYWNlZCBpbiBkZWxheSBzbG90CiAgICAgbnVtYmVyIE4gb2YgdGhlIGVwaWxvZ3VlLgoKICAgICBUaGUgYXJndW1lbnQgTiBpcyBhbiBpbnRlZ2VyIHdoaWNoIGlkZW50aWZpZXMgdGhlIGRlbGF5IHNsb3Qgbm93CiAgICAgYmVpbmcgY29uc2lkZXJlZCAoc2luY2UgZGlmZmVyZW50IHNsb3RzIG1heSBoYXZlIGRpZmZlcmVudCBydWxlcyBvZgogICAgIGVsaWdpYmlsaXR5KS4gIEl0IGlzIG5ldmVyIG5lZ2F0aXZlIGFuZCBpcyBhbHdheXMgbGVzcyB0aGFuIHRoZQogICAgIG51bWJlciBvZiBlcGlsb2d1ZSBkZWxheSBzbG90cyAod2hhdCAnREVMQVlfU0xPVFNfRk9SX0VQSUxPR1VFJwogICAgIHJldHVybnMpLiAgSWYgeW91IHJlamVjdCBhIHBhcnRpY3VsYXIgaW5zbiBmb3IgYSBnaXZlbiBkZWxheSBzbG90LAogICAgIGluIHByaW5jaXBsZSwgaXQgbWF5IGJlIHJlY29uc2lkZXJlZCBmb3IgYSBzdWJzZXF1ZW50IGRlbGF5IHNsb3QuCiAgICAgQWxzbywgb3RoZXIgaW5zbnMgbWF5IChhdCBsZWFzdCBpbiBwcmluY2lwbGUpIGJlIGNvbnNpZGVyZWQgZm9yIHRoZQogICAgIHNvIGZhciB1bmZpbGxlZCBkZWxheSBzbG90LgoKICAgICBUaGUgaW5zbnMgYWNjZXB0ZWQgdG8gZmlsbCB0aGUgZXBpbG9ndWUgZGVsYXkgc2xvdHMgYXJlIHB1dCBpbiBhbgogICAgIFJUTCBsaXN0IG1hZGUgd2l0aCAnaW5zbl9saXN0JyBvYmplY3RzLCBzdG9yZWQgaW4gdGhlIHZhcmlhYmxlCiAgICAgJ2N1cnJlbnRfZnVuY3Rpb25fZXBpbG9ndWVfZGVsYXlfbGlzdCcuICBUaGUgaW5zbiBmb3IgdGhlIGZpcnN0CiAgICAgZGVsYXkgc2xvdCBjb21lcyBmaXJzdCBpbiB0aGUgbGlzdC4gIFlvdXIgZGVmaW5pdGlvbiBvZiB0aGUgbWFjcm8KICAgICAnVEFSR0VUX0FTTV9GVU5DVElPTl9FUElMT0dVRScgc2hvdWxkIGZpbGwgdGhlIGRlbGF5IHNsb3RzIGJ5CiAgICAgb3V0cHV0dGluZyB0aGUgaW5zbnMgaW4gdGhpcyBsaXN0LCB1c3VhbGx5IGJ5IGNhbGxpbmcKICAgICAnZmluYWxfc2Nhbl9pbnNuJy4KCiAgICAgWW91IG5lZWQgbm90IGRlZmluZSB0aGlzIG1hY3JvIGlmIHlvdSBkaWQgbm90IGRlZmluZQogICAgICdERUxBWV9TTE9UU19GT1JfRVBJTE9HVUUnLgoKIC0tIFRhcmdldCBIb29rOiB2b2lkIFRBUkdFVF9BU01fT1VUUFVUX01JX1RIVU5LIChGSUxFICpGSUxFLCB0cmVlCiAgICAgICAgICBUSFVOS19GTkRFQ0wsIEhPU1RfV0lERV9JTlQgREVMVEEsIEhPU1RfV0lERV9JTlQgVkNBTExfT0ZGU0VULAogICAgICAgICAgdHJlZSBGVU5DVElPTikKICAgICBBIGZ1bmN0aW9uIHRoYXQgb3V0cHV0cyB0aGUgYXNzZW1ibGVyIGNvZGUgZm9yIGEgdGh1bmsgZnVuY3Rpb24sCiAgICAgdXNlZCB0byBpbXBsZW1lbnQgQysrIHZpcnR1YWwgZnVuY3Rpb24gY2FsbHMgd2l0aCBtdWx0aXBsZQogICAgIGluaGVyaXRhbmNlLiAgVGhlIHRodW5rIGFjdHMgYXMgYSB3cmFwcGVyIGFyb3VuZCBhIHZpcnR1YWwKICAgICBmdW5jdGlvbiwgYWRqdXN0aW5nIHRoZSBpbXBsaWNpdCBvYmplY3QgcGFyYW1ldGVyIGJlZm9yZSBoYW5kaW5nCiAgICAgY29udHJvbCBvZmYgdG8gdGhlIHJlYWwgZnVuY3Rpb24uCgogICAgIEZpcnN0LCBlbWl0IGNvZGUgdG8gYWRkIHRoZSBpbnRlZ2VyIERFTFRBIHRvIHRoZSBsb2NhdGlvbiB0aGF0CiAgICAgY29udGFpbnMgdGhlIGluY29taW5nIGZpcnN0IGFyZ3VtZW50LiAgQXNzdW1lIHRoYXQgdGhpcyBhcmd1bWVudAogICAgIGNvbnRhaW5zIGEgcG9pbnRlciwgYW5kIGlzIHRoZSBvbmUgdXNlZCB0byBwYXNzIHRoZSAndGhpcycgcG9pbnRlcgogICAgIGluIEMrKy4gIFRoaXMgaXMgdGhlIGluY29taW5nIGFyZ3VtZW50IF9iZWZvcmVfIHRoZSBmdW5jdGlvbgogICAgIHByb2xvZ3VlLCBlLmcuICclbzAnIG9uIGEgc3BhcmMuICBUaGUgYWRkaXRpb24gbXVzdCBwcmVzZXJ2ZSB0aGUKICAgICB2YWx1ZXMgb2YgYWxsIG90aGVyIGluY29taW5nIGFyZ3VtZW50cy4KCiAgICAgVGhlbiwgaWYgVkNBTExfT0ZGU0VUIGlzIG5vbnplcm8sIGFuIGFkZGl0aW9uYWwgYWRqdXN0bWVudCBzaG91bGQKICAgICBiZSBtYWRlIGFmdGVyIGFkZGluZyAnZGVsdGEnLiAgSW4gcGFydGljdWxhciwgaWYgUCBpcyB0aGUgYWRqdXN0ZWQKICAgICBwb2ludGVyLCB0aGUgZm9sbG93aW5nIGFkanVzdG1lbnQgc2hvdWxkIGJlIG1hZGU6CgogICAgICAgICAgcCArPSAoKigocHRyZGlmZl90ICoqKXApKVt2Y2FsbF9vZmZzZXQvc2l6ZW9mKHB0cmRpZmZfdCldCgogICAgIEFmdGVyIHRoZSBhZGRpdGlvbnMsIGVtaXQgY29kZSB0byBqdW1wIHRvIEZVTkNUSU9OLCB3aGljaCBpcyBhCiAgICAgJ0ZVTkNUSU9OX0RFQ0wnLiAgVGhpcyBpcyBhIGRpcmVjdCBwdXJlIGp1bXAsIG5vdCBhIGNhbGwsIGFuZCBkb2VzCiAgICAgbm90IHRvdWNoIHRoZSByZXR1cm4gYWRkcmVzcy4gIEhlbmNlIHJldHVybmluZyBmcm9tIEZVTkNUSU9OIHdpbGwKICAgICByZXR1cm4gdG8gd2hvZXZlciBjYWxsZWQgdGhlIGN1cnJlbnQgJ3RodW5rJy4KCiAgICAgVGhlIGVmZmVjdCBtdXN0IGJlIGFzIGlmIEZVTkNUSU9OIGhhZCBiZWVuIGNhbGxlZCBkaXJlY3RseSB3aXRoIHRoZQogICAgIGFkanVzdGVkIGZpcnN0IGFyZ3VtZW50LiAgVGhpcyBtYWNybyBpcyByZXNwb25zaWJsZSBmb3IgZW1pdHRpbmcKICAgICBhbGwgb2YgdGhlIGNvZGUgZm9yIGEgdGh1bmsgZnVuY3Rpb247CiAgICAgJ1RBUkdFVF9BU01fRlVOQ1RJT05fUFJPTE9HVUUnIGFuZCAnVEFSR0VUX0FTTV9GVU5DVElPTl9FUElMT0dVRScKICAgICBhcmUgbm90IGludm9rZWQuCgogICAgIFRoZSBUSFVOS19GTkRFQ0wgaXMgcmVkdW5kYW50LiAgKERFTFRBIGFuZCBGVU5DVElPTiBoYXZlIGFscmVhZHkKICAgICBiZWVuIGV4dHJhY3RlZCBmcm9tIGl0LikgIEl0IG1pZ2h0IHBvc3NpYmx5IGJlIHVzZWZ1bCBvbiBzb21lCiAgICAgdGFyZ2V0cywgYnV0IHByb2JhYmx5IG5vdC4KCiAgICAgSWYgeW91IGRvIG5vdCBkZWZpbmUgdGhpcyBtYWNybywgdGhlIHRhcmdldC1pbmRlcGVuZGVudCBjb2RlIGluIHRoZQogICAgIEMrKyBmcm9udCBlbmQgd2lsbCBnZW5lcmF0ZSBhIGxlc3MgZWZmaWNpZW50IGhlYXZ5d2VpZ2h0IHRodW5rIHRoYXQKICAgICBjYWxscyBGVU5DVElPTiBpbnN0ZWFkIG9mIGp1bXBpbmcgdG8gaXQuICBUaGUgZ2VuZXJpYyBhcHByb2FjaCBkb2VzCiAgICAgbm90IHN1cHBvcnQgdmFyYXJncy4KCiAtLSBUYXJnZXQgSG9vazogYm9vbCBUQVJHRVRfQVNNX0NBTl9PVVRQVVRfTUlfVEhVTksgKHRyZWUgVEhVTktfRk5ERUNMLAogICAgICAgICAgSE9TVF9XSURFX0lOVCBERUxUQSwgSE9TVF9XSURFX0lOVCBWQ0FMTF9PRkZTRVQsIHRyZWUKICAgICAgICAgIEZVTkNUSU9OKQogICAgIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRydWUgaWYgVEFSR0VUX0FTTV9PVVRQVVRfTUlfVEhVTksgd291bGQgYmUKICAgICBhYmxlIHRvIG91dHB1dCB0aGUgYXNzZW1ibGVyIGNvZGUgZm9yIHRoZSB0aHVuayBmdW5jdGlvbiBzcGVjaWZpZWQKICAgICBieSB0aGUgYXJndW1lbnRzIGl0IGlzIHBhc3NlZCwgYW5kIGZhbHNlIG90aGVyd2lzZS4gIEluIHRoZSBsYXR0ZXIKICAgICBjYXNlLCB0aGUgZ2VuZXJpYyBhcHByb2FjaCB3aWxsIGJlIHVzZWQgYnkgdGhlIEMrKyBmcm9udCBlbmQsIHdpdGgKICAgICB0aGUgbGltaXRhdGlvbnMgcHJldmlvdXNseSBleHBvc2VkLgoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IFByb2ZpbGluZywgIE5leHQ6IFRhaWwgQ2FsbHMsICBQcmV2OiBGdW5jdGlvbiBFbnRyeSwgIFVwOiBTdGFjayBhbmQgQ2FsbGluZwoKMTUuMTAuMTIgR2VuZXJhdGluZyBDb2RlIGZvciBQcm9maWxpbmcKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KClRoZXNlIG1hY3JvcyB3aWxsIGhlbHAgeW91IGdlbmVyYXRlIGNvZGUgZm9yIHByb2ZpbGluZy4KCiAtLSBNYWNybzogRlVOQ1RJT05fUFJPRklMRVIgKEZJTEUsIExBQkVMTk8pCiAgICAgQSBDIHN0YXRlbWVudCBvciBjb21wb3VuZCBzdGF0ZW1lbnQgdG8gb3V0cHV0IHRvIEZJTEUgc29tZQogICAgIGFzc2VtYmxlciBjb2RlIHRvIGNhbGwgdGhlIHByb2ZpbGluZyBzdWJyb3V0aW5lICdtY291bnQnLgoKICAgICBUaGUgZGV0YWlscyBvZiBob3cgJ21jb3VudCcgZXhwZWN0cyB0byBiZSBjYWxsZWQgYXJlIGRldGVybWluZWQgYnkKICAgICB5b3VyIG9wZXJhdGluZyBzeXN0ZW0gZW52aXJvbm1lbnQsIG5vdCBieSBHQ0MuICBUbyBmaWd1cmUgdGhlbSBvdXQsCiAgICAgY29tcGlsZSBhIHNtYWxsIHByb2dyYW0gZm9yIHByb2ZpbGluZyB1c2luZyB0aGUgc3lzdGVtJ3MgaW5zdGFsbGVkCiAgICAgQyBjb21waWxlciBhbmQgbG9vayBhdCB0aGUgYXNzZW1ibGVyIGNvZGUgdGhhdCByZXN1bHRzLgoKICAgICBPbGRlciBpbXBsZW1lbnRhdGlvbnMgb2YgJ21jb3VudCcgZXhwZWN0IHRoZSBhZGRyZXNzIG9mIGEgY291bnRlcgogICAgIHZhcmlhYmxlIHRvIGJlIGxvYWRlZCBpbnRvIHNvbWUgcmVnaXN0ZXIuICBUaGUgbmFtZSBvZiB0aGlzCiAgICAgdmFyaWFibGUgaXMgJ0xQJyBmb2xsb3dlZCBieSB0aGUgbnVtYmVyIExBQkVMTk8sIHNvIHlvdSB3b3VsZAogICAgIGdlbmVyYXRlIHRoZSBuYW1lIHVzaW5nICdMUCVkJyBpbiBhICdmcHJpbnRmJy4KCiAtLSBNYWNybzogUFJPRklMRV9IT09LCiAgICAgQSBDIHN0YXRlbWVudCBvciBjb21wb3VuZCBzdGF0ZW1lbnQgdG8gb3V0cHV0IHRvIEZJTEUgc29tZSBhc3NlbWJseQogICAgIGNvZGUgdG8gY2FsbCB0aGUgcHJvZmlsaW5nIHN1YnJvdXRpbmUgJ21jb3VudCcgZXZlbiB0aGUgdGFyZ2V0IGRvZXMKICAgICBub3Qgc3VwcG9ydCBwcm9maWxpbmcuCgogLS0gTWFjcm86IE5PX1BST0ZJTEVfQ09VTlRFUlMKICAgICBEZWZpbmUgdGhpcyBtYWNybyB0byBiZSBhbiBleHByZXNzaW9uIHdpdGggYSBub256ZXJvIHZhbHVlIGlmIHRoZQogICAgICdtY291bnQnIHN1YnJvdXRpbmUgb24geW91ciBzeXN0ZW0gZG9lcyBub3QgbmVlZCBhIGNvdW50ZXIgdmFyaWFibGUKICAgICBhbGxvY2F0ZWQgZm9yIGVhY2ggZnVuY3Rpb24uICBUaGlzIGlzIHRydWUgZm9yIGFsbW9zdCBhbGwgbW9kZXJuCiAgICAgaW1wbGVtZW50YXRpb25zLiAgSWYgeW91IGRlZmluZSB0aGlzIG1hY3JvLCB5b3UgbXVzdCBub3QgdXNlIHRoZQogICAgIExBQkVMTk8gYXJndW1lbnQgdG8gJ0ZVTkNUSU9OX1BST0ZJTEVSJy4KCiAtLSBNYWNybzogUFJPRklMRV9CRUZPUkVfUFJPTE9HVUUKICAgICBEZWZpbmUgdGhpcyBtYWNybyBpZiB0aGUgY29kZSBmb3IgZnVuY3Rpb24gcHJvZmlsaW5nIHNob3VsZCBjb21lCiAgICAgYmVmb3JlIHRoZSBmdW5jdGlvbiBwcm9sb2d1ZS4gIE5vcm1hbGx5LCB0aGUgcHJvZmlsaW5nIGNvZGUgY29tZXMKICAgICBhZnRlci4KCh8KRmlsZTogZ2NjaW50LmluZm8sICBOb2RlOiBUYWlsIENhbGxzLCAgTmV4dDogU3RhY2sgU21hc2hpbmcgUHJvdGVjdGlvbiwgIFByZXY6IFByb2ZpbGluZywgIFVwOiBTdGFjayBhbmQgQ2FsbGluZwoKMTUuMTAuMTMgUGVybWl0dGluZyB0YWlsIGNhbGxzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKIC0tIFRhcmdldCBIb29rOiBib29sIFRBUkdFVF9GVU5DVElPTl9PS19GT1JfU0lCQ0FMTCAodHJlZSBERUNMLCB0cmVlCiAgICAgICAgICBFWFApCiAgICAgVHJ1ZSBpZiBpdCBpcyBvayB0byBkbyBzaWJsaW5nIGNhbGwgb3B0aW1pemF0aW9uIGZvciB0aGUgc3BlY2lmaWVkCiAgICAgY2FsbCBleHByZXNzaW9uIEVYUC4gIERFQ0wgd2lsbCBiZSB0aGUgY2FsbGVkIGZ1bmN0aW9uLCBvciAnTlVMTCcKICAgICBpZiB0aGlzIGlzIGFuIGluZGlyZWN0IGNhbGwuCgogICAgIEl0IGlzIG5vdCB1bmNvbW1vbiBmb3IgbGltaXRhdGlvbnMgb2YgY2FsbGluZyBjb252ZW50aW9ucyB0bwogICAgIHByZXZlbnQgdGFpbCBjYWxscyB0byBmdW5jdGlvbnMgb3V0c2lkZSB0aGUgY3VycmVudCB1bml0IG9mCiAgICAgdHJhbnNsYXRpb24sIG9yIGR1cmluZyBQSUMgY29tcGlsYXRpb24uICBUaGUgaG9vayBpcyB1c2VkIHRvCiAgICAgZW5mb3JjZSB0aGVzZSByZXN0cmljdGlvbnMsIGFzIHRoZSAnc2liY2FsbCcgbWQgcGF0dGVybiBjYW4gbm90CiAgICAgZmFpbCwgb3IgZmFsbCBvdmVyIHRvIGEgIm5vcm1hbCIgY2FsbC4gIFRoZSBjcml0ZXJpYSBmb3Igc3VjY2Vzc2Z1bAogICAgIHNpYmxpbmcgY2FsbCBvcHRpbWl6YXRpb24gbWF5IHZhcnkgZ3JlYXRseSBiZXR3ZWVuIGRpZmZlcmVudAogICAgIGFyY2hpdGVjdHVyZXMuCgogLS0gVGFyZ2V0IEhvb2s6IHZvaWQgVEFSR0VUX0VYVFJBX0xJVkVfT05fRU5UUlkgKGJpdG1hcCAqUkVHUykKICAgICBBZGQgYW55IGhhcmQgcmVnaXN0ZXJzIHRvIFJFR1MgdGhhdCBhcmUgbGl2ZSBvbiBlbnRyeSB0byB0aGUKICAgICBmdW5jdGlvbi4gIFRoaXMgaG9vayBvbmx5IG5lZWRzIHRvIGJlIGRlZmluZWQgdG8gcHJvdmlkZSByZWdpc3RlcnMKICAgICB0aGF0IGNhbm5vdCBiZSBmb3VuZCBieSBleGFtaW5hdGlvbiBvZiBGVU5DVElPTl9BUkdfUkVHTk9fUCwgdGhlCiAgICAgY2FsbGVlIHNhdmVkIHJlZ2lzdGVycywgU1RBVElDX0NIQUlOX0lOQ09NSU5HX1JFR05VTSwKICAgICBTVEFUSUNfQ0hBSU5fUkVHTlVNLCBUQVJHRVRfU1RSVUNUX1ZBTFVFX1JUWCwgRlJBTUVfUE9JTlRFUl9SRUdOVU0sCiAgICAgRUhfVVNFUywgRlJBTUVfUE9JTlRFUl9SRUdOVU0sIEFSR19QT0lOVEVSX1JFR05VTSwgYW5kIHRoZQogICAgIFBJQ19PRkZTRVRfVEFCTEVfUkVHTlVNLgoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IFN0YWNrIFNtYXNoaW5nIFByb3RlY3Rpb24sICBQcmV2OiBUYWlsIENhbGxzLCAgVXA6IFN0YWNrIGFuZCBDYWxsaW5nCgoxNS4xMC4xNCBTdGFjayBzbWFzaGluZyBwcm90ZWN0aW9uCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAtLSBUYXJnZXQgSG9vazogdHJlZSBUQVJHRVRfU1RBQ0tfUFJPVEVDVF9HVUFSRCAodm9pZCkKICAgICBUaGlzIGhvb2sgcmV0dXJucyBhICdERUNMJyBub2RlIGZvciB0aGUgZXh0ZXJuYWwgdmFyaWFibGUgdG8gdXNlCiAgICAgZm9yIHRoZSBzdGFjayBwcm90ZWN0aW9uIGd1YXJkLiAgVGhpcyB2YXJpYWJsZSBpcyBpbml0aWFsaXplZCBieQogICAgIHRoZSBydW50aW1lIHRvIHNvbWUgcmFuZG9tIHZhbHVlIGFuZCBpcyB1c2VkIHRvIGluaXRpYWxpemUgdGhlCiAgICAgZ3VhcmQgdmFsdWUgdGhhdCBpcyBwbGFjZWQgYXQgdGhlIHRvcCBvZiB0aGUgbG9jYWwgc3RhY2sgZnJhbWUuCiAgICAgVGhlIHR5cGUgb2YgdGhpcyB2YXJpYWJsZSBtdXN0IGJlICdwdHJfdHlwZV9ub2RlJy4KCiAgICAgVGhlIGRlZmF1bHQgdmVyc2lvbiBvZiB0aGlzIGhvb2sgY3JlYXRlcyBhIHZhcmlhYmxlIGNhbGxlZAogICAgICdfX3N0YWNrX2Noa19ndWFyZCcsIHdoaWNoIGlzIG5vcm1hbGx5IGRlZmluZWQgaW4gJ2xpYmdjYzIuYycuCgogLS0gVGFyZ2V0IEhvb2s6IHRyZWUgVEFSR0VUX1NUQUNLX1BST1RFQ1RfRkFJTCAodm9pZCkKICAgICBUaGlzIGhvb2sgcmV0dXJucyBhIHRyZWUgZXhwcmVzc2lvbiB0aGF0IGFsZXJ0cyB0aGUgcnVudGltZSB0aGF0CiAgICAgdGhlIHN0YWNrIHByb3RlY3QgZ3VhcmQgdmFyaWFibGUgaGFzIGJlZW4gbW9kaWZpZWQuICBUaGlzCiAgICAgZXhwcmVzc2lvbiBzaG91bGQgaW52b2x2ZSBhIGNhbGwgdG8gYSAnbm9yZXR1cm4nIGZ1bmN0aW9uLgoKICAgICBUaGUgZGVmYXVsdCB2ZXJzaW9uIG9mIHRoaXMgaG9vayBpbnZva2VzIGEgZnVuY3Rpb24gY2FsbGVkCiAgICAgJ19fc3RhY2tfY2hrX2ZhaWwnLCB0YWtpbmcgbm8gYXJndW1lbnRzLiAgVGhpcyBmdW5jdGlvbiBpcyBub3JtYWxseQogICAgIGRlZmluZWQgaW4gJ2xpYmdjYzIuYycuCgofCkZpbGU6IGdjY2ludC5pbmZvLCAgTm9kZTogVmFyYXJncywgIE5leHQ6IFRyYW1wb2xpbmVzLCAgUHJldjogU3RhY2sgYW5kIENhbGxpbmcsICBVcDogVGFyZ2V0IE1hY3JvcwoKMTUuMTEgSW1wbGVtZW50aW5nIHRoZSBWYXJhcmdzIE1hY3Jvcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpHQ0MgY29tZXMgd2l0aCBhbiBpbXBsZW1lbnRhdGlvbiBvZiAnPHZhcmFyZ3MuaD4nIGFuZCAnPHN0ZGFyZy5oPicgdGhhdAp3b3JrIHdpdGhvdXQgY2hhbmdlIG9uIG1hY2hpbmVzIHRoYXQgcGFzcyBhcmd1bWVudHMgb24gdGhlIHN0YWNrLiAgT3RoZXIKbWFjaGluZXMgcmVxdWlyZSB0aGVpciBvd24gaW1wbGVtZW50YXRpb25zIG9mIHZhcmFyZ3MsIGFuZCB0aGUgdHdvCm1hY2hpbmUgaW5kZXBlbmRlbnQgaGVhZGVyIGZpbGVzIG11c3QgaGF2ZSBjb25kaXRpb25hbHMgdG8gaW5jbHVkZSBpdC4KCiBJU08gJzxzdGRhcmcuaD4nIGRpZmZlcnMgZnJvbSB0cmFkaXRpb25hbCAnPHZhcmFyZ3MuaD4nIG1haW5seSBpbiB0aGUKY2FsbGluZyBjb252ZW50aW9uIGZvciAndmFfc3RhcnQnLiAgVGhlIHRyYWRpdGlvbmFsIGltcGxlbWVudGF0aW9uIHRha2VzCmp1c3Qgb25lIGFyZ3VtZW50LCB3aGljaCBpcyB0aGUgdmFyaWFibGUgaW4gd2hpY2ggdG8gc3RvcmUgdGhlIGFyZ3VtZW50CnBvaW50ZXIuICBUaGUgSVNPIGltcGxlbWVudGF0aW9uIG9mICd2YV9zdGFydCcgdGFrZXMgYW4gYWRkaXRpb25hbApzZWNvbmQgYXJndW1lbnQuICBUaGUgdXNlciBpcyBzdXBwb3NlZCB0byB3cml0ZSB0aGUgbGFzdCBuYW1lZCBhcmd1bWVudApvZiB0aGUgZnVuY3Rpb24gaGVyZS4KCiBIb3dldmVyLCAndmFfc3RhcnQnIHNob3VsZCBub3QgdXNlIHRoaXMgYXJndW1lbnQuICBUaGUgd2F5IHRvIGZpbmQgdGhlCmVuZCBvZiB0aGUgbmFtZWQgYXJndW1lbnRzIGlzIHdpdGggdGhlIGJ1aWx0LWluIGZ1bmN0aW9ucyBkZXNjcmliZWQKYmVsb3cuCgogLS0gTWFjcm86IF9fYnVpbHRpbl9zYXZlcmVncyAoKQogICAgIFVzZSB0aGlzIGJ1aWx0LWluIGZ1bmN0aW9uIHRvIHNhdmUgdGhlIGFyZ3VtZW50IHJlZ2lzdGVycyBpbiBtZW1vcnkKICAgICBzbyB0aGF0IHRoZSB2YXJhcmdzIG1lY2hhbmlzbSBjYW4gYWNjZXNzIHRoZW0uICBCb3RoIElTTyBhbmQKICAgICB0cmFkaXRpb25hbCB2ZXJzaW9ucyBvZiAndmFfc3RhcnQnIG11c3QgdXNlICdfX2J1aWx0aW5fc2F2ZXJlZ3MnLAogICAgIHVubGVzcyB5b3UgdXNlICdUQVJHRVRfU0VUVVBfSU5DT01JTkdfVkFSQVJHUycgKHNlZSBiZWxvdykgaW5zdGVhZC4KCiAgICAgT24gc29tZSBtYWNoaW5lcywgJ19fYnVpbHRpbl9zYXZlcmVncycgaXMgb3Blbi1jb2RlZCB1bmRlciB0aGUKICAgICBjb250cm9sIG9mIHRoZSB0YXJnZXQgaG9vayAnVEFSR0VUX0VYUEFORF9CVUlMVElOX1NBVkVSRUdTJy4gIE9uCiAgICAgb3RoZXIgbWFjaGluZXMsIGl0IGNhbGxzIGEgcm91dGluZSB3cml0dGVuIGluIGFzc2VtYmxlciBsYW5ndWFnZSwKICAgICBmb3VuZCBpbiAnbGliZ2NjMi5jJy4KCiAgICAgQ29kZSBnZW5lcmF0ZWQgZm9yIHRoZSBjYWxsIHRvICdfX2J1aWx0aW5fc2F2ZXJlZ3MnIGFwcGVhcnMgYXQgdGhlCiAgICAgYmVnaW5uaW5nIG9mIHRoZSBmdW5jdGlvbiwgYXMgb3Bwb3NlZCB0byB3aGVyZSB0aGUgY2FsbCB0bwogICAgICdfX2J1aWx0aW5fc2F2ZXJlZ3MnIGlzIHdyaXR0ZW4sIHJlZ2FyZGxlc3Mgb2Ygd2hhdCB0aGUgY29kZSBpcy4KICAgICBUaGlzIGlzIGJlY2F1c2UgdGhlIHJlZ2lzdGVycyBtdXN0IGJlIHNhdmVkIGJlZm9yZSB0aGUgZnVuY3Rpb24KICAgICBzdGFydHMgdG8gdXNlIHRoZW0gZm9yIGl0cyBvd24gcHVycG9zZXMuCgogLS0gTWFjcm86IF9fYnVpbHRpbl9hcmdzX2luZm8gKENBVEVHT1JZKQogICAgIFVzZSB0aGlzIGJ1aWx0LWluIGZ1bmN0aW9uIHRvIGZpbmQgdGhlIGZpcnN0IGFub255bW91cyBhcmd1bWVudHMgaW4KICAgICByZWdpc3RlcnMuCgogICAgIEluIGdlbmVyYWwsIGEgbWFjaGluZSBtYXkgaGF2ZSBzZXZlcmFsIGNhdGVnb3JpZXMgb2YgcmVnaXN0ZXJzIHVzZWQKICAgICBmb3IgYXJndW1lbnRzLCBlYWNoIGZvciBhIHBhcnRpY3VsYXIgY2F0ZWdvcnkgb2YgZGF0YSB0eXBlcy4gIChGb3IKICAgICBleGFtcGxlLCBvbiBzb21lIG1hY2hpbmVzLCBmbG9hdGluZy1wb2ludCByZWdpc3RlcnMgYXJlIHVzZWQgZm9yCiAgICAgZmxvYXRpbmctcG9pbnQgYXJndW1lbnRzIHdoaWxlIG90aGVyIGFyZ3VtZW50cyBhcmUgcGFzc2VkIGluIHRoZQogICAgIGdlbmVyYWwgcmVnaXN0ZXJzLikgIFRvIG1ha2Ugbm9uLXZhcmFyZ3MgZnVuY3Rpb25zIHVzZSB0aGUgcHJvcGVyCiAgICAgY2FsbGluZyBjb252ZW50aW9uLCB5b3UgaGF2ZSBkZWZpbmVkIHRoZSAnQ1VNVUxBVElWRV9BUkdTJyBkYXRhCiAgICAgdHlwZSB0byByZWNvcmQgaG93IG1hbnkgcmVnaXN0ZXJzIGluIGVhY2ggY2F0ZWdvcnkgaGF2ZSBiZWVuIHVzZWQKICAgICBzbyBmYXIKCiAgICAgJ19fYnVpbHRpbl9hcmdzX2luZm8nIGFjY2Vzc2VzIHRoZSBzYW1lIGRhdGEgc3RydWN0dXJlIG9mIHR5cGUKICAgICAnQ1VNVUxBVElWRV9BUkdTJyBhZnRlciB0aGUgb3JkaW5hcnkgYXJndW1lbnQgbGF5b3V0IGlzIGZpbmlzaGVkCiAgICAgd2l0aCBpdCwgd2l0aCBDQVRFR09SWSBzcGVjaWZ5aW5nIHdoaWNoIHdvcmQgdG8gYWNjZXNzLiAgVGh1cywgdGhlCiAgICAgdmFsdWUgaW5kaWNhdGVzIHRoZSBmaXJzdCB1bnVzZWQgcmVnaXN0ZXIgaW4gYSBnaXZlbiBjYXRlZ29yeS4KCiAgICAgTm9ybWFsbHksIHlvdSB3b3VsZCB1c2UgJ19fYnVpbHRpbl9hcmdzX2luZm8nIGluIHRoZSBpbXBsZW1lbnRhdGlvbgogICAgIG9mICd2YV9zdGFydCcsIGFjY2Vzc2luZyBlYWNoIGNhdGVnb3J5IGp1c3Qgb25jZSBhbmQgc3RvcmluZyB0aGUKICAgICB2YWx1ZSBpbiB0aGUgJ3ZhX2xpc3QnIG9iamVjdC4gIFRoaXMgaXMgYmVjYXVzZSAndmFfbGlzdCcgd2lsbCBoYXZlCiAgICAgdG8gdXBkYXRlIHRoZSB2YWx1ZXMsIGFuZCB0aGVyZSBpcyBubyB3YXkgdG8gYWx0ZXIgdGhlIHZhbHVlcwogICAgIGFjY2Vzc2VkIGJ5ICdfX2J1aWx0aW5fYXJnc19pbmZvJy4KCiAtLSBNYWNybzogX19idWlsdGluX25leHRfYXJnIChMQVNUQVJHKQogICAgIFRoaXMgaXMgdGhlIGVxdWl2YWxlbnQgb2YgJ19fYnVpbHRpbl9hcmdzX2luZm8nLCBmb3Igc3RhY2sKICAgICBhcmd1bWVudHMuICBJdCByZXR1cm5zIHRoZSBhZGRyZXNzIG9mIHRoZSBmaXJzdCBhbm9ueW1vdXMgc3RhY2sKICAgICBhcmd1bWVudCwgYXMgdHlwZSAndm9pZCAqJy4gIElmICdBUkdTX0dST1dfRE9XTldBUkQnLCBpdCByZXR1cm5zCiAgICAgdGhlIGFkZHJlc3Mgb2YgdGhlIGxvY2F0aW9uIGFib3ZlIHRoZSBmaXJzdCBhbm9ueW1vdXMgc3RhY2sKICAgICBhcmd1bWVudC4gIFVzZSBpdCBpbiAndmFfc3RhcnQnIHRvIGluaXRpYWxpemUgdGhlIHBvaW50ZXIgZm9yCiAgICAgZmV0Y2hpbmcgYXJndW1lbnRzIGZyb20gdGhlIHN0YWNrLiAgQWxzbyB1c2UgaXQgaW4gJ3ZhX3N0YXJ0JyB0bwogICAgIHZlcmlmeSB0aGF0IHRoZSBzZWNvbmQgcGFyYW1ldGVyIExBU1RBUkcgaXMgdGhlIGxhc3QgbmFtZWQgYXJndW1lbnQKICAgICBvZiB0aGUgY3VycmVudCBmdW5jdGlvbi4KCiAtLSBNYWNybzogX19idWlsdGluX2NsYXNzaWZ5X3R5cGUgKE9CSkVDVCkKICAgICBTaW5jZSBlYWNoIG1hY2hpbmUgaGFzIGl0cyBvd24gY29udmVudGlvbnMgZm9yIHdoaWNoIGRhdGEgdHlwZXMgYXJlCiAgICAgcGFzc2VkIGluIHdoaWNoIGtpbmQgb2YgcmVnaXN0ZXIsIHlvdXIgaW1wbGVtZW50YXRpb24gb2YgJ3ZhX2FyZycKICAgICBoYXMgdG8gZW1ib2R5IHRoZXNlIGNvbnZlbnRpb25zLiAgVGhlIGVhc2llc3Qgd2F5IHRvIGNhdGVnb3JpemUgdGhlCiAgICAgc3BlY2lmaWVkIGRhdGEgdHlwZSBpcyB0byB1c2UgJ19fYnVpbHRpbl9jbGFzc2lmeV90eXBlJyB0b2dldGhlcgogICAgIHdpdGggJ3NpemVvZicgYW5kICdfX2FsaWdub2ZfXycuCgogICAgICdfX2J1aWx0aW5fY2xhc3NpZnlfdHlwZScgaWdub3JlcyB0aGUgdmFsdWUgb2YgT0JKRUNULCBjb25zaWRlcmluZwogICAgIG9ubHkgaXRzIGRhdGEgdHlwZS4gIEl0IHJldHVybnMgYW4gaW50ZWdlciBkZXNjcmliaW5nIHdoYXQga2luZCBvZgogICAgIHR5cGUgdGhhdCBpcy0taW50ZWdlciwgZmxvYXRpbmcsIHBvaW50ZXIsIHN0cnVjdHVyZSwgYW5kIHNvIG9uLgoKICAgICBUaGUgZmlsZSAndHlwZWNsYXNzLmgnIGRlZmluZXMgYW4gZW51bWVyYXRpb24gdGhhdCB5b3UgY2FuIHVzZSB0bwogICAgIGludGVycHJldCB0aGUgdmFsdWVzIG9mICdfX2J1aWx0aW5fY2xhc3NpZnlfdHlwZScuCgogVGhlc2UgbWFjaGluZSBkZXNjcmlwdGlvbiBtYWNyb3MgaGVscCBpbXBsZW1lbnQgdmFyYXJnczoKCiAtLSBUYXJnZXQgSG9vazogcnR4IFRBUkdFVF9FWFBBTkRfQlVJTFRJTl9TQVZFUkVHUyAodm9pZCkKICAgICBJZiBkZWZpbmVkLCB0aGlzIGhvb2sgcHJvZHVjZXMgdGhlIG1hY2hpbmUtc3BlY2lmaWMgY29kZSBmb3IgYSBjYWxsCiAgICAgdG8gJ19fYnVpbHRpbl9zYXZlcmVncycuICBUaGlzIGNvZGUgd2lsbCBiZSBtb3ZlZCB0byB0aGUgdmVyeQogICAgIGJlZ2lubmluZyBvZiB0aGUgZnVuY3Rpb24sIGJlZm9yZSBhbnkgcGFyYW1ldGVyIGFjY2VzcyBhcmUgbWFkZS4KICAgICBUaGUgcmV0dXJuIHZhbHVlIG9mIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGFuIFJUWCB0aGF0IGNvbnRhaW5zCiAgICAgdGhlIHZhbHVlIHRvIHVzZSBhcyB0aGUgcmV0dXJuIG9mICdfX2J1aWx0aW5fc2F2ZXJlZ3MnLgoKIC0tIFRhcmdldCBIb29rOiB2b2lkIFRBUkdFVF9TRVRVUF9JTkNPTUlOR19WQVJBUkdTIChDVU1VTEFUSVZFX0FSR1MKICAgICAgICAgICpBUkdTX1NPX0ZBUiwgZW51bSBtYWNoaW5lX21vZGUgTU9ERSwgdHJlZSBUWVBFLCBpbnQKICAgICAgICAgICpQUkVURU5EX0FSR1NfU0laRSwgaW50IFNFQ09ORF9USU1FKQogICAgIFRoaXMgdGFyZ2V0IGhvb2sgb2ZmZXJzIGFuIGFsdGVybmF0aXZlIHRvIHVzaW5nCiAgICAgJ19fYnVpbHRpbl9zYXZlcmVncycgYW5kIGRlZmluaW5nIHRoZSBob29rCiAgICAgJ1RBUkdFVF9FWFBBTkRfQlVJTFRJTl9TQVZFUkVHUycuICBVc2UgaXQgdG8gc3RvcmUgdGhlIGFub255bW91cwogICAgIHJlZ2lzdGVyIGFyZ3VtZW50cyBpbnRvIHRoZSBzdGFjayBzbyB0aGF0IGFsbCB0aGUgYXJndW1lbnRzIGFwcGVhcgogICAgIHRvIGhhdmUgYmVlbiBwYXNzZWQgY29uc2VjdXRpdmVseSBvbiB0aGUgc3RhY2suICBPbmNlIHRoaXMgaXMgZG9uZSwKICAgICB5b3UgY2FuIHVzZSB0aGUgc3RhbmRhcmQgaW1wbGVtZW50YXRpb24gb2YgdmFyYXJncyB0aGF0IHdvcmtzIGZvcgogICAgIG1hY2hpbmVzIHRoYXQgcGFzcyBhbGwgdGhlaXIgYXJndW1lbnRzIG9uIHRoZSBzdGFjay4KCiAgICAgVGhlIGFyZ3VtZW50IEFSR1NfU09fRkFSIHBvaW50cyB0byB0aGUgJ0NVTVVMQVRJVkVfQVJHUycgZGF0YQogICAgIHN0cnVjdHVyZSwgY29udGFpbmluZyB0aGUgdmFsdWVzIHRoYXQgYXJlIG9idGFpbmVkIGFmdGVyIHByb2Nlc3NpbmcKICAgICB0aGUgbmFtZWQgYXJndW1lbnRzLiAgVGhlIGFyZ3VtZW50cyBNT0RFIGFuZCBUWVBFIGRlc2NyaWJlIHRoZSBsYXN0CiAgICAgbmFtZWQgYXJndW1lbnQtLWl0cyBtYWNoaW5lIG1vZGUgYW5kIGl0cyBkYXRhIHR5cGUgYXMgYSB0cmVlIG5vZGUuCgogICAgIFRoZSB0YXJnZXQgaG9vayBzaG91bGQgZG8gdHdvIHRoaW5nczogZmlyc3QsIHB1c2ggb250byB0aGUgc3RhY2sKICAgICBhbGwgdGhlIGFyZ3VtZW50IHJlZ2lzdGVycyBfbm90XyB1c2VkIGZvciB0aGUgbmFtZWQgYXJndW1lbnRzLCBhbmQKICAgICBzZWNvbmQsIHN0b3JlIHRoZSBzaXplIG9mIHRoZSBkYXRhIHRodXMgcHVzaGVkIGludG8gdGhlCiAgICAgJ2ludCctdmFsdWVkIHZhcmlhYmxlIHBvaW50ZWQgdG8gYnkgUFJFVEVORF9BUkdTX1NJWkUuICBUaGUgdmFsdWUKICAgICB0aGF0IHlvdSBzdG9yZSBoZXJlIHdpbGwgc2VydmUgYXMgYWRkaXRpb25hbCBvZmZzZXQgZm9yIHNldHRpbmcgdXAKICAgICB0aGUgc3RhY2sgZnJhbWUuCgogICAgIEJlY2F1c2UgeW91IG11c3QgZ2VuZXJhdGUgY29kZSB0byBwdXNoIHRoZSBhbm9ueW1vdXMgYXJndW1lbnRzIGF0CiAgICAgY29tcGlsZSB0aW1lIHdpdGhvdXQga25vd2luZyB0aGVpciBkYXRhIHR5cGVzLAogICAgICdUQVJHRVRfU0VUVVBfSU5DT01JTkdfVkFSQVJHUycgaXMgb25seSB1c2VmdWwgb24gbWFjaGluZXMgdGhhdAogICAgIGhhdmUganVzdCBhIHNpbmdsZSBjYXRlZ29yeSBvZiBhcmd1bWVudCByZWdpc3RlciBhbmQgdXNlIGl0CiAgICAgdW5pZm9ybWx5IGZvciBhbGwgZGF0YSB0eXBlcy4KCiAgICAgSWYgdGhlIGFyZ3VtZW50IFNFQ09ORF9USU1FIGlzIG5vbnplcm8sIGl0IG1lYW5zIHRoYXQgdGhlIGFyZ3VtZW50cwogICAgIG9mIHRoZSBmdW5jdGlvbiBhcmUgYmVpbmcgYW5hbHl6ZWQgZm9yIHRoZSBzZWNvbmQgdGltZS4gIFRoaXMKICAgICBoYXBwZW5zIGZvciBhbiBpbmxpbmUgZnVuY3Rpb24sIHdoaWNoIGlzIG5vdCBhY3R1YWxseSBjb21waWxlZAogICAgIHVudGlsIHRoZSBlbmQgb2YgdGhlIHNvdXJjZSBmaWxlLiAgVGhlIGhvb2sKICAgICAnVEFSR0VUX1NFVFVQX0lOQ09NSU5HX1ZBUkFSR1MnIHNob3VsZCBub3QgZ2VuZXJhdGUgYW55CiAgICAgaW5zdHJ1Y3Rpb25zIGluIHRoaXMgY2FzZS4KCiAtLSBUYXJnZXQgSG9vazogYm9vbCBUQVJHRVRfU1RSSUNUX0FSR1VNRU5UX05BTUlORyAoQ1VNVUxBVElWRV9BUkdTCiAgICAgICAgICAqQ0EpCiAgICAgRGVmaW5lIHRoaXMgaG9vayB0byByZXR1cm4gJ3RydWUnIGlmIHRoZSBsb2NhdGlvbiB3aGVyZSBhIGZ1bmN0aW9uCiAgICAgYXJndW1lbnQgaXMgcGFzc2VkIGRlcGVuZHMgb24gd2hldGhlciBvciBub3QgaXQgaXMgYSBuYW1lZAogICAgIGFyZ3VtZW50LgoKICAgICBUaGlzIGhvb2sgY29udHJvbHMgaG93IHRoZSBOQU1FRCBhcmd1bWVudCB0byAnRlVOQ1RJT05fQVJHJyBpcyBzZXQKICAgICBmb3IgdmFyYXJncyBhbmQgc3RkYXJnIGZ1bmN0aW9ucy4gIElmIHRoaXMgaG9vayByZXR1cm5zICd0cnVlJywgdGhlCiAgICAgTkFNRUQgYXJndW1lbnQgaXMgYWx3YXlzIHRydWUgZm9yIG5hbWVkIGFyZ3VtZW50cywgYW5kIGZhbHNlIGZvcgogICAgIHVubmFtZWQgYXJndW1lbnRzLiAgSWYgaXQgcmV0dXJucyAnZmFsc2UnLCBidXQKICAgICAnVEFSR0VUX1BSRVRFTkRfT1VUR09JTkdfVkFSQVJHU19OQU1FRCcgcmV0dXJucyAndHJ1ZScsIHRoZW4gYWxsCiAgICAgYXJndW1lbnRzIGFyZSB0cmVhdGVkIGFzIG5hbWVkLiAgT3RoZXJ3aXNlLCBhbGwgbmFtZWQgYXJndW1lbnRzCiAgICAgZXhjZXB0IHRoZSBsYXN0IGFyZSB0cmVhdGVkIGFzIG5hbWVkLgoKICAgICBZb3UgbmVlZCBub3QgZGVmaW5lIHRoaXMgaG9vayBpZiBpdCBhbHdheXMgcmV0dXJucyB6ZXJvLgoKIC0tIFRhcmdldCBIb29rOiBib29sIFRBUkdFVF9QUkVURU5EX09VVEdPSU5HX1ZBUkFSR1NfTkFNRUQKICAgICBJZiB5b3UgbmVlZCB0byBjb25kaXRpb25hbGx5IGNoYW5nZSBBQklzIHNvIHRoYXQgb25lIHdvcmtzIHdpdGgKICAgICAnVEFSR0VUX1NFVFVQX0lOQ09NSU5HX1ZBUkFSR1MnLCBidXQgdGhlIG90aGVyIHdvcmtzIGxpa2UgbmVpdGhlcgogICAgICdUQVJHRVRfU0VUVVBfSU5DT01JTkdfVkFSQVJHUycgbm9yICdUQVJHRVRfU1RSSUNUX0FSR1VNRU5UX05BTUlORycKICAgICB3YXMgZGVmaW5lZCwgdGhlbiBkZWZpbmUgdGhpcyBob29rIHRvIHJldHVybiAndHJ1ZScgaWYKICAgICAnVEFSR0VUX1NFVFVQX0lOQ09NSU5HX1ZBUkFSR1MnIGlzIHVzZWQsICdmYWxzZScgb3RoZXJ3aXNlLgogICAgIE90aGVyd2lzZSwgeW91IHNob3VsZCBub3QgZGVmaW5lIHRoaXMgaG9vay4KCh8KRmlsZTogZ2NjaW50LmluZm8sICBOb2RlOiBUcmFtcG9saW5lcywgIE5leHQ6IExpYnJhcnkgQ2FsbHMsICBQcmV2OiBWYXJhcmdzLCAgVXA6IFRhcmdldCBNYWNyb3MKCjE1LjEyIFRyYW1wb2xpbmVzIGZvciBOZXN0ZWQgRnVuY3Rpb25zCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpBICJ0cmFtcG9saW5lIiBpcyBhIHNtYWxsIHBpZWNlIG9mIGNvZGUgdGhhdCBpcyBjcmVhdGVkIGF0IHJ1biB0aW1lIHdoZW4KdGhlIGFkZHJlc3Mgb2YgYSBuZXN0ZWQgZnVuY3Rpb24gaXMgdGFrZW4uICBJdCBub3JtYWxseSByZXNpZGVzIG9uIHRoZQpzdGFjaywgaW4gdGhlIHN0YWNrIGZyYW1lIG9mIHRoZSBjb250YWluaW5nIGZ1bmN0aW9uLiAgVGhlc2UgbWFjcm9zIHRlbGwKR0NDIGhvdyB0byBnZW5lcmF0ZSBjb2RlIHRvIGFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGEgdHJhbXBvbGluZS4KCiBUaGUgaW5zdHJ1Y3Rpb25zIGluIHRoZSB0cmFtcG9saW5lIG11c3QgZG8gdHdvIHRoaW5nczogbG9hZCBhIGNvbnN0YW50CmFkZHJlc3MgaW50byB0aGUgc3RhdGljIGNoYWluIHJlZ2lzdGVyLCBhbmQganVtcCB0byB0aGUgcmVhbCBhZGRyZXNzIG9mCnRoZSBuZXN0ZWQgZnVuY3Rpb24uICBPbiBDSVNDIG1hY2hpbmVzIHN1Y2ggYXMgdGhlIG02OGssIHRoaXMgcmVxdWlyZXMKdHdvIGluc3RydWN0aW9ucywgYSBtb3ZlIGltbWVkaWF0ZSBhbmQgYSBqdW1wLiAgVGhlbiB0aGUgdHdvIGFkZHJlc3NlcwpleGlzdCBpbiB0aGUgdHJhbXBvbGluZSBhcyB3b3JkLWxvbmcgaW1tZWRpYXRlIG9wZXJhbmRzLiAgT24gUklTQwptYWNoaW5lcywgaXQgaXMgb2Z0ZW4gbmVjZXNzYXJ5IHRvIGxvYWQgZWFjaCBhZGRyZXNzIGludG8gYSByZWdpc3RlciBpbgp0d28gcGFydHMuICBUaGVuIHBpZWNlcyBvZiBlYWNoIGFkZHJlc3MgZm9ybSBzZXBhcmF0ZSBpbW1lZGlhdGUKb3BlcmFuZHMuCgogVGhlIGNvZGUgZ2VuZXJhdGVkIHRvIGluaXRpYWxpemUgdGhlIHRyYW1wb2xpbmUgbXVzdCBzdG9yZSB0aGUgdmFyaWFibGUKcGFydHMtLXRoZSBzdGF0aWMgY2hhaW4gdmFsdWUgYW5kIHRoZSBmdW5jdGlvbiBhZGRyZXNzLS1pbnRvIHRoZQppbW1lZGlhdGUgb3BlcmFuZHMgb2YgdGhlIGluc3RydWN0aW9ucy4gIE9uIGEgQ0lTQyBtYWNoaW5lLCB0aGlzIGlzCnNpbXBseSBhIG1hdHRlciBvZiBjb3B5aW5nIGVhY2ggYWRkcmVzcyB0byBhIG1lbW9yeSByZWZlcmVuY2UgYXQgdGhlCnByb3BlciBvZmZzZXQgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIHRyYW1wb2xpbmUuICBPbiBhIFJJU0MgbWFjaGluZSwgaXQKbWF5IGJlIG5lY2Vzc2FyeSB0byB0YWtlIG91dCBwaWVjZXMgb2YgdGhlIGFkZHJlc3MgYW5kIHN0b3JlIHRoZW0Kc2VwYXJhdGVseS4KCiAtLSBNYWNybzogVFJBTVBPTElORV9URU1QTEFURSAoRklMRSkKICAgICBBIEMgc3RhdGVtZW50IHRvIG91dHB1dCwgb24gdGhlIHN0cmVhbSBGSUxFLCBhc3NlbWJsZXIgY29kZSBmb3IgYQogICAgIGJsb2NrIG9mIGRhdGEgdGhhdCBjb250YWlucyB0aGUgY29uc3RhbnQgcGFydHMgb2YgYSB0cmFtcG9saW5lLgogICAgIFRoaXMgY29kZSBzaG91bGQgbm90IGluY2x1ZGUgYSBsYWJlbC0tdGhlIGxhYmVsIGlzIHRha2VuIGNhcmUgb2YKICAgICBhdXRvbWF0aWNhbGx5LgoKICAgICBJZiB5b3UgZG8gbm90IGRlZmluZSB0aGlzIG1hY3JvLCBpdCBtZWFucyBubyB0ZW1wbGF0ZSBpcyBuZWVkZWQgZm9yCiAgICAgdGhlIHRhcmdldC4gIERvIG5vdCBkZWZpbmUgdGhpcyBtYWNybyBvbiBzeXN0ZW1zIHdoZXJlIHRoZSBibG9jawogICAgIG1vdmUgY29kZSB0byBjb3B5IHRoZSB0cmFtcG9saW5lIGludG8gcGxhY2Ugd291bGQgYmUgbGFyZ2VyIHRoYW4KICAgICB0aGUgY29kZSB0byBnZW5lcmF0ZSBpdCBvbiB0aGUgc3BvdC4KCiAtLSBNYWNybzogVFJBTVBPTElORV9TRUNUSU9OCiAgICAgUmV0dXJuIHRoZSBzZWN0aW9uIGludG8gd2hpY2ggdGhlIHRyYW1wb2xpbmUgdGVtcGxhdGUgaXMgdG8gYmUKICAgICBwbGFjZWQgKCpub3RlIFNlY3Rpb25zOjopLiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMKICAgICAncmVhZG9ubHlfZGF0YV9zZWN0aW9uJy4KCiAtLSBNYWNybzogVFJBTVBPTElORV9TSVpFCiAgICAgQSBDIGV4cHJlc3Npb24gZm9yIHRoZSBzaXplIGluIGJ5dGVzIG9mIHRoZSB0cmFtcG9saW5lLCBhcyBhbgogICAgIGludGVnZXIuCgogLS0gTWFjcm86IFRSQU1QT0xJTkVfQUxJR05NRU5UCiAgICAgQWxpZ25tZW50IHJlcXVpcmVkIGZvciB0cmFtcG9saW5lcywgaW4gYml0cy4KCiAgICAgSWYgeW91IGRvbid0IGRlZmluZSB0aGlzIG1hY3JvLCB0aGUgdmFsdWUgb2YgJ0JJR0dFU1RfQUxJR05NRU5UJyBpcwogICAgIHVzZWQgZm9yIGFsaWduaW5nIHRyYW1wb2xpbmVzLgoKIC0tIE1hY3JvOiBJTklUSUFMSVpFX1RSQU1QT0xJTkUgKEFERFIsIEZOQUREUiwgU1RBVElDX0NIQUlOKQogICAgIEEgQyBzdGF0ZW1lbnQgdG8gaW5pdGlhbGl6ZSB0aGUgdmFyaWFibGUgcGFydHMgb2YgYSB0cmFtcG9saW5lLgogICAgIEFERFIgaXMgYW4gUlRYIGZvciB0aGUgYWRkcmVzcyBvZiB0aGUgdHJhbXBvbGluZTsgRk5BRERSIGlzIGFuIFJUWAogICAgIGZvciB0aGUgYWRkcmVzcyBvZiB0aGUgbmVzdGVkIGZ1bmN0aW9uOyBTVEFUSUNfQ0hBSU4gaXMgYW4gUlRYIGZvcgogICAgIHRoZSBzdGF0aWMgY2hhaW4gdmFsdWUgdGhhdCBzaG91bGQgYmUgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbiB3aGVuCiAgICAgaXQgaXMgY2FsbGVkLgoKIC0tIE1hY3JvOiBUUkFNUE9MSU5FX0FESlVTVF9BRERSRVNTIChBRERSKQogICAgIEEgQyBzdGF0ZW1lbnQgdGhhdCBzaG91bGQgcGVyZm9ybSBhbnkgbWFjaGluZS1zcGVjaWZpYyBhZGp1c3RtZW50CiAgICAgaW4gdGhlIGFkZHJlc3Mgb2YgdGhlIHRyYW1wb2xpbmUuICBJdHMgYXJndW1lbnQgY29udGFpbnMgdGhlCiAgICAgYWRkcmVzcyB0aGF0IHdhcyBwYXNzZWQgdG8gJ0lOSVRJQUxJWkVfVFJBTVBPTElORScuICBJbiBjYXNlIHRoZQogICAgIGFkZHJlc3MgdG8gYmUgdXNlZCBmb3IgYSBmdW5jdGlvbiBjYWxsIHNob3VsZCBiZSBkaWZmZXJlbnQgZnJvbSB0aGUKICAgICBhZGRyZXNzIGluIHdoaWNoIHRoZSB0ZW1wbGF0ZSB3YXMgc3RvcmVkLCB0aGUgZGlmZmVyZW50IGFkZHJlc3MKICAgICBzaG91bGQgYmUgYXNzaWduZWQgdG8gQUREUi4gIElmIHRoaXMgbWFjcm8gaXMgbm90IGRlZmluZWQsIEFERFIKICAgICB3aWxsIGJlIHVzZWQgZm9yIGZ1bmN0aW9uIGNhbGxzLgoKICAgICBJZiB0aGlzIG1hY3JvIGlzIG5vdCBkZWZpbmVkLCBieSBkZWZhdWx0IHRoZSB0cmFtcG9saW5lIGlzCiAgICAgYWxsb2NhdGVkIGFzIGEgc3RhY2sgc2xvdC4gIFRoaXMgZGVmYXVsdCBpcyByaWdodCBmb3IgbW9zdAogICAgIG1hY2hpbmVzLiAgVGhlIGV4Y2VwdGlvbnMgYXJlIG1hY2hpbmVzIHdoZXJlIGl0IGlzIGltcG9zc2libGUgdG8KICAgICBleGVjdXRlIGluc3RydWN0aW9ucyBpbiB0aGUgc3RhY2sgYXJlYS4gIE9uIHN1Y2ggbWFjaGluZXMsIHlvdSBtYXkKICAgICBoYXZlIHRvIGltcGxlbWVudCBhIHNlcGFyYXRlIHN0YWNrLCB1c2luZyB0aGlzIG1hY3JvIGluIGNvbmp1bmN0aW9uCiAgICAgd2l0aCAnVEFSR0VUX0FTTV9GVU5DVElPTl9QUk9MT0dVRScgYW5kCiAgICAgJ1RBUkdFVF9BU01fRlVOQ1RJT05fRVBJTE9HVUUnLgoKICAgICBGUCBwb2ludHMgdG8gYSBkYXRhIHN0cnVjdHVyZSwgYSAnc3RydWN0IGZ1bmN0aW9uJywgd2hpY2ggZGVzY3JpYmVzCiAgICAgdGhlIGNvbXBpbGF0aW9uIHN0YXR1cyBvZiB0aGUgaW1tZWRpYXRlIGNvbnRhaW5pbmcgZnVuY3Rpb24gb2YgdGhlCiAgICAgZnVuY3Rpb24gd2hpY2ggdGhlIHRyYW1wb2xpbmUgaXMgZm9yLiAgVGhlIHN0YWNrIHNsb3QgZm9yIHRoZQogICAgIHRyYW1wb2xpbmUgaXMgaW4gdGhlIHN0YWNrIGZyYW1lIG9mIHRoaXMgY29udGFpbmluZyBmdW5jdGlvbi4KICAgICBPdGhlciBhbGxvY2F0aW9uIHN0cmF0ZWdpZXMgcHJvYmFibHkgbXVzdCBkbyBzb21ldGhpbmcgYW5hbG9nb3VzCiAgICAgd2l0aCB0aGlzIGluZm9ybWF0aW9uLgoKIEltcGxlbWVudGluZyB0cmFtcG9saW5lcyBpcyBkaWZmaWN1bHQgb24gbWFueSBtYWNoaW5lcyBiZWNhdXNlIHRoZXkKaGF2ZSBzZXBhcmF0ZSBpbnN0cnVjdGlvbiBhbmQgZGF0YSBjYWNoZXMuICBXcml0aW5nIGludG8gYSBzdGFjawpsb2NhdGlvbiBmYWlscyB0byBjbGVhciB0aGUgbWVtb3J5IGluIHRoZSBpbnN0cnVjdGlvbiBjYWNoZSwgc28gd2hlbiB0aGUKcHJvZ3JhbSBqdW1wcyB0byB0aGF0IGxvY2F0aW9uLCBpdCBleGVjdXRlcyB0aGUgb2xkIGNvbnRlbnRzLgoKIEhlcmUgYXJlIHR3byBwb3NzaWJsZSBzb2x1dGlvbnMuICBPbmUgaXMgdG8gY2xlYXIgdGhlIHJlbGV2YW50IHBhcnRzIG9mCnRoZSBpbnN0cnVjdGlvbiBjYWNoZSB3aGVuZXZlciBhIHRyYW1wb2xpbmUgaXMgc2V0IHVwLiAgVGhlIG90aGVyIGlzIHRvCm1ha2UgYWxsIHRyYW1wb2xpbmVzIGlkZW50aWNhbCwgYnkgaGF2aW5nIHRoZW0ganVtcCB0byBhIHN0YW5kYXJkCnN1YnJvdXRpbmUuICBUaGUgZm9ybWVyIHRlY2huaXF1ZSBtYWtlcyB0cmFtcG9saW5lIGV4ZWN1dGlvbiBmYXN0ZXI7IHRoZQpsYXR0ZXIgbWFrZXMgaW5pdGlhbGl6YXRpb24gZmFzdGVyLgoKIFRvIGNsZWFyIHRoZSBpbnN0cnVjdGlvbiBjYWNoZSB3aGVuIGEgdHJhbXBvbGluZSBpcyBpbml0aWFsaXplZCwgZGVmaW5lCnRoZSBmb2xsb3dpbmcgbWFjcm8uCgogLS0gTWFjcm86IENMRUFSX0lOU05fQ0FDSEUgKEJFRywgRU5EKQogICAgIElmIGRlZmluZWQsIGV4cGFuZHMgdG8gYSBDIGV4cHJlc3Npb24gY2xlYXJpbmcgdGhlIF9pbnN0cnVjdGlvbgogICAgIGNhY2hlXyBpbiB0aGUgc3BlY2lmaWVkIGludGVydmFsLiAgVGhlIGRlZmluaXRpb24gb2YgdGhpcyBtYWNybwogICAgIHdvdWxkIHR5cGljYWxseSBiZSBhIHNlcmllcyBvZiAnYXNtJyBzdGF0ZW1lbnRzLiAgQm90aCBCRUcgYW5kIEVORAogICAgIGFyZSBib3RoIHBvaW50ZXIgZXhwcmVzc2lvbnMuCgogVGhlIG9wZXJhdGluZyBzeXN0ZW0gbWF5IGFsc28gcmVxdWlyZSB0aGUgc3RhY2sgdG8gYmUgbWFkZSBleGVjdXRhYmxlCmJlZm9yZSBjYWxsaW5nIHRoZSB0cmFtcG9saW5lLiAgVG8gaW1wbGVtZW50IHRoaXMgcmVxdWlyZW1lbnQsIGRlZmluZQp0aGUgZm9sbG93aW5nIG1hY3JvLgoKIC0tIE1hY3JvOiBFTkFCTEVfRVhFQ1VURV9TVEFDSwogICAgIERlZmluZSB0aGlzIG1hY3JvIGlmIGNlcnRhaW4gb3BlcmF0aW9ucyBtdXN0IGJlIHBlcmZvcm1lZCBiZWZvcmUKICAgICBleGVjdXRpbmcgY29kZSBsb2NhdGVkIG9uIHRoZSBzdGFjay4gIFRoZSBtYWNybyBzaG91bGQgZXhwYW5kIHRvIGEKICAgICBzZXJpZXMgb2YgQyBmaWxlLXNjb3BlIGNvbnN0cnVjdHMgKGUuZy4gZnVuY3Rpb25zKSBhbmQgcHJvdmlkZSBhCiAgICAgdW5pcXVlIGVudHJ5IHBvaW50IG5hbWVkICdfX2VuYWJsZV9leGVjdXRlX3N0YWNrJy4gIFRoZSB0YXJnZXQgaXMKICAgICByZXNwb25zaWJsZSBmb3IgZW1pdHRpbmcgY2FsbHMgdG8gdGhlIGVudHJ5IHBvaW50IGluIHRoZSBjb2RlLCBmb3IKICAgICBleGFtcGxlIGZyb20gdGhlICdJTklUSUFMSVpFX1RSQU1QT0xJTkUnIG1hY3JvLgoKIFRvIHVzZSBhIHN0YW5kYXJkIHN1YnJvdXRpbmUsIGRlZmluZSB0aGUgZm9sbG93aW5nIG1hY3JvLiAgSW4gYWRkaXRpb24sCnlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZSBpbnN0cnVjdGlvbnMgaW4gYSB0cmFtcG9saW5lIGZpbGwgYW4gZW50aXJlCmNhY2hlIGxpbmUgd2l0aCBpZGVudGljYWwgaW5zdHJ1Y3Rpb25zLCBvciBlbHNlIGVuc3VyZSB0aGF0IHRoZQpiZWdpbm5pbmcgb2YgdGhlIHRyYW1wb2xpbmUgY29kZSBpcyBhbHdheXMgYWxpZ25lZCBhdCB0aGUgc2FtZSBwb2ludCBpbgppdHMgY2FjaGUgbGluZS4gIExvb2sgaW4gJ202OGsuaCcgYXMgYSBndWlkZS4KCiAtLSBNYWNybzogVFJBTlNGRVJfRlJPTV9UUkFNUE9MSU5FCiAgICAgRGVmaW5lIHRoaXMgbWFjcm8gaWYgdHJhbXBvbGluZXMgbmVlZCBhIHNwZWNpYWwgc3Vicm91dGluZSB0byBkbwogICAgIHRoZWlyIHdvcmsuICBUaGUgbWFjcm8gc2hvdWxkIGV4cGFuZCB0byBhIHNlcmllcyBvZiAnYXNtJwogICAgIHN0YXRlbWVudHMgd2hpY2ggd2lsbCBiZSBjb21waWxlZCB3aXRoIEdDQy4gIFRoZXkgZ28gaW4gYSBsaWJyYXJ5CiAgICAgZnVuY3Rpb24gbmFtZWQgJ19fdHJhbnNmZXJfZnJvbV90cmFtcG9saW5lJy4KCiAgICAgSWYgeW91IG5lZWQgdG8gYXZvaWQgZXhlY3V0aW5nIHRoZSBvcmRpbmFyeSBwcm9sb2d1ZSBjb2RlIG9mIGEKICAgICBjb21waWxlZCBDIGZ1bmN0aW9uIHdoZW4geW91IGp1bXAgdG8gdGhlIHN1YnJvdXRpbmUsIHlvdSBjYW4gZG8gc28KICAgICBieSBwbGFjaW5nIGEgc3BlY2lhbCBsYWJlbCBvZiB5b3VyIG93biBpbiB0aGUgYXNzZW1ibGVyIGNvZGUuICBVc2UKICAgICBvbmUgJ2FzbScgc3RhdGVtZW50IHRvIGdlbmVyYXRlIGFuIGFzc2VtYmxlciBsYWJlbCwgYW5kIGFub3RoZXIgdG8KICAgICBtYWtlIHRoZSBsYWJlbCBnbG9iYWwuICBUaGVuIHRyYW1wb2xpbmVzIGNhbiB1c2UgdGhhdCBsYWJlbCB0byBqdW1wCiAgICAgZGlyZWN0bHkgdG8geW91ciBzcGVjaWFsIGFzc2VtYmxlciBjb2RlLgoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IExpYnJhcnkgQ2FsbHMsICBOZXh0OiBBZGRyZXNzaW5nIE1vZGVzLCAgUHJldjogVHJhbXBvbGluZXMsICBVcDogVGFyZ2V0IE1hY3JvcwoKMTUuMTMgSW1wbGljaXQgQ2FsbHMgdG8gTGlicmFyeSBSb3V0aW5lcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpIZXJlIGlzIGFuIGV4cGxhbmF0aW9uIG9mIGltcGxpY2l0IGNhbGxzIHRvIGxpYnJhcnkgcm91dGluZXMuCgogLS0gTWFjcm86IERFQ0xBUkVfTElCUkFSWV9SRU5BTUVTCiAgICAgVGhpcyBtYWNybywgaWYgZGVmaW5lZCwgc2hvdWxkIGV4cGFuZCB0byBhIHBpZWNlIG9mIEMgY29kZSB0aGF0CiAgICAgd2lsbCBnZXQgZXhwYW5kZWQgd2hlbiBjb21waWxpbmcgZnVuY3Rpb25zIGZvciBsaWJnY2MuYS4gIEl0IGNhbiBiZQogICAgIHVzZWQgdG8gcHJvdmlkZSBhbHRlcm5hdGUgbmFtZXMgZm9yIEdDQydzIGludGVybmFsIGxpYnJhcnkKICAgICBmdW5jdGlvbnMgaWYgdGhlcmUgYXJlIEFCSS1tYW5kYXRlZCBuYW1lcyB0aGF0IHRoZSBjb21waWxlciBzaG91bGQKICAgICBwcm92aWRlLgoKIC0tIFRhcmdldCBIb29rOiB2b2lkIFRBUkdFVF9JTklUX0xJQkZVTkNTICh2b2lkKQogICAgIFRoaXMgaG9vayBzaG91bGQgZGVjbGFyZSBhZGRpdGlvbmFsIGxpYnJhcnkgcm91dGluZXMgb3IgcmVuYW1lCiAgICAgZXhpc3Rpbmcgb25lcywgdXNpbmcgdGhlIGZ1bmN0aW9ucyAnc2V0X29wdGFiX2xpYmZ1bmMnIGFuZAogICAgICdpbml0X29uZV9saWJmdW5jJyBkZWZpbmVkIGluICdvcHRhYnMuYycuICAnaW5pdF9vcHRhYnMnIGNhbGxzIHRoaXMKICAgICBtYWNybyBhZnRlciBpbml0aWFsaXppbmcgYWxsIHRoZSBub3JtYWwgbGlicmFyeSByb3V0aW5lcy4KCiAgICAgVGhlIGRlZmF1bHQgaXMgdG8gZG8gbm90aGluZy4gIE1vc3QgcG9ydHMgZG9uJ3QgbmVlZCB0byBkZWZpbmUgdGhpcwogICAgIGhvb2suCgogLS0gTWFjcm86IEZMT0FUX0xJQl9DT01QQVJFX1JFVFVSTlNfQk9PTCAoTU9ERSwgQ09NUEFSSVNPTikKICAgICBUaGlzIG1hY3JvIHNob3VsZCByZXR1cm4gJ3RydWUnIGlmIHRoZSBsaWJyYXJ5IHJvdXRpbmUgdGhhdAogICAgIGltcGxlbWVudHMgdGhlIGZsb2F0aW5nIHBvaW50IGNvbXBhcmlzb24gb3BlcmF0b3IgQ09NUEFSSVNPTiBpbgogICAgIG1vZGUgTU9ERSB3aWxsIHJldHVybiBhIGJvb2xlYW4sIGFuZCBGQUxTRSBpZiBpdCB3aWxsIHJldHVybiBhCiAgICAgdHJpc3RhdGUuCgogICAgIEdDQydzIG93biBmbG9hdGluZyBwb2ludCBsaWJyYXJpZXMgcmV0dXJuIHRyaXN0YXRlcyBmcm9tIHRoZQogICAgIGNvbXBhcmlzb24gb3BlcmF0b3JzLCBzbyB0aGUgZGVmYXVsdCByZXR1cm5zIGZhbHNlIGFsd2F5cy4gIE1vc3QKICAgICBwb3J0cyBkb24ndCBuZWVkIHRvIGRlZmluZSB0aGlzIG1hY3JvLgoKIC0tIE1hY3JvOiBUQVJHRVRfTElCX0lOVF9DTVBfQklBU0VECiAgICAgVGhpcyBtYWNybyBzaG91bGQgZXZhbHVhdGUgdG8gJ3RydWUnIGlmIHRoZSBpbnRlZ2VyIGNvbXBhcmlzb24KICAgICBmdW5jdGlvbnMgKGxpa2UgJ19fY21wZGkyJykgcmV0dXJuIDAgdG8gaW5kaWNhdGUgdGhhdCB0aGUgZmlyc3QKICAgICBvcGVyYW5kIGlzIHNtYWxsZXIgdGhhbiB0aGUgc2Vjb25kLCAxIHRvIGluZGljYXRlIHRoYXQgdGhleSBhcmUKICAgICBlcXVhbCwgYW5kIDIgdG8gaW5kaWNhdGUgdGhhdCB0aGUgZmlyc3Qgb3BlcmFuZCBpcyBncmVhdGVyIHRoYW4gdGhlCiAgICAgc2Vjb25kLiAgSWYgdGhpcyBtYWNybyBldmFsdWF0ZXMgdG8gJ2ZhbHNlJyB0aGUgY29tcGFyaXNvbgogICAgIGZ1bmN0aW9ucyByZXR1cm4gLTEsIDAsIGFuZCAxIGluc3RlYWQgb2YgMCwgMSwgYW5kIDIuICBJZiB0aGUKICAgICB0YXJnZXQgdXNlcyB0aGUgcm91dGluZXMgaW4gJ2xpYmdjYy5hJywgeW91IGRvIG5vdCBuZWVkIHRvIGRlZmluZQogICAgIHRoaXMgbWFjcm8uCgogLS0gTWFjcm86IFVTX1NPRlRXQVJFX0dPRkFTVAogICAgIERlZmluZSB0aGlzIG1hY3JvIGlmIHlvdXIgc3lzdGVtIEMgbGlicmFyeSB1c2VzIHRoZSBVUyBTb2Z0d2FyZQogICAgIEdPRkFTVCBsaWJyYXJ5IHRvIHByb3ZpZGUgZmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uLgoKICAgICBJbiBhZGRpdGlvbiB0byBkZWZpbmluZyB0aGlzIG1hY3JvLCB5b3VyIGFyY2hpdGVjdHVyZSBtdXN0IHNldAogICAgICdUQVJHRVRfSU5JVF9MSUJGVU5DUycgdG8gJ2dvZmFzdF9tYXliZV9pbml0X2xpYmZ1bmNzJywgb3IgZWxzZQogICAgIGNhbGwgdGhhdCBmdW5jdGlvbiBmcm9tIGl0cyB2ZXJzaW9uIG9mIHRoYXQgaG9vay4gIEl0IGlzIGRlZmluZWQgaW4KICAgICAnY29uZmlnL2dvZmFzdC5oJywgd2hpY2ggbXVzdCBiZSBpbmNsdWRlZCBieSB5b3VyIGFyY2hpdGVjdHVyZSdzCiAgICAgJ0NQVS5jJyBmaWxlLiAgU2VlICdzcGFyYy9zcGFyYy5jJyBmb3IgYW4gZXhhbXBsZS4KCiAgICAgSWYgdGhpcyBtYWNybyBpcyBkZWZpbmVkLCB0aGUKICAgICAnVEFSR0VUX0ZMT0FUX0xJQl9DT01QQVJFX1JFVFVSTlNfQk9PTCcgdGFyZ2V0IGhvb2sgbXVzdCByZXR1cm4KICAgICBmYWxzZSBmb3IgJ1NGbW9kZScgYW5kICdERm1vZGUnIGNvbXBhcmlzb25zLgoKIC0tIE1hY3JvOiBUQVJHRVRfRURPTQogICAgIFRoZSB2YWx1ZSBvZiAnRURPTScgb24gdGhlIHRhcmdldCBtYWNoaW5lLCBhcyBhIEMgaW50ZWdlciBjb25zdGFudAogICAgIGV4cHJlc3Npb24uICBJZiB5b3UgZG9uJ3QgZGVmaW5lIHRoaXMgbWFjcm8sIEdDQyBkb2VzIG5vdCBhdHRlbXB0CiAgICAgdG8gZGVwb3NpdCB0aGUgdmFsdWUgb2YgJ0VET00nIGludG8gJ2Vycm5vJyBkaXJlY3RseS4gIExvb2sgaW4KICAgICAnL3Vzci9pbmNsdWRlL2Vycm5vLmgnIHRvIGZpbmQgdGhlIHZhbHVlIG9mICdFRE9NJyBvbiB5b3VyIHN5c3RlbS4KCiAgICAgSWYgeW91IGRvIG5vdCBkZWZpbmUgJ1RBUkdFVF9FRE9NJywgdGhlbiBjb21waWxlZCBjb2RlIHJlcG9ydHMKICAgICBkb21haW4gZXJyb3JzIGJ5IGNhbGxpbmcgdGhlIGxpYnJhcnkgZnVuY3Rpb24gYW5kIGxldHRpbmcgaXQgcmVwb3J0CiAgICAgdGhlIGVycm9yLiAgSWYgbWF0aGVtYXRpY2FsIGZ1bmN0aW9ucyBvbiB5b3VyIHN5c3RlbSB1c2UgJ21hdGhlcnInCiAgICAgd2hlbiB0aGVyZSBpcyBhbiBlcnJvciwgdGhlbiB5b3Ugc2hvdWxkIGxlYXZlICdUQVJHRVRfRURPTScKICAgICB1bmRlZmluZWQgc28gdGhhdCAnbWF0aGVycicgaXMgdXNlZCBub3JtYWxseS4KCiAtLSBNYWNybzogR0VOX0VSUk5PX1JUWAogICAgIERlZmluZSB0aGlzIG1hY3JvIGFzIGEgQyBleHByZXNzaW9uIHRvIGNyZWF0ZSBhbiBydGwgZXhwcmVzc2lvbgogICAgIHRoYXQgcmVmZXJzIHRvIHRoZSBnbG9iYWwgInZhcmlhYmxlIiAnZXJybm8nLiAgKE9uIGNlcnRhaW4gc3lzdGVtcywKICAgICAnZXJybm8nIG1heSBub3QgYWN0dWFsbHkgYmUgYSB2YXJpYWJsZS4pICBJZiB5b3UgZG9uJ3QgZGVmaW5lIHRoaXMKICAgICBtYWNybywgYSByZWFzb25hYmxlIGRlZmF1bHQgaXMgdXNlZC4KCiAtLSBNYWNybzogVEFSR0VUX0M5OV9GVU5DVElPTlMKICAgICBXaGVuIHRoaXMgbWFjcm8gaXMgbm9uemVybywgR0NDIHdpbGwgaW1wbGljaXRseSBvcHRpbWl6ZSAnc2luJwogICAgIGNhbGxzIGludG8gJ3NpbmYnIGFuZCBzaW1pbGFybHkgZm9yIG90aGVyIGZ1bmN0aW9ucyBkZWZpbmVkIGJ5IEM5OQogICAgIHN0YW5kYXJkLiAgVGhlIGRlZmF1bHQgaXMgbm9uemVybyB0aGF0IHNob3VsZCBiZSBwcm9wZXIgdmFsdWUgZm9yCiAgICAgbW9zdCBtb2Rlcm4gc3lzdGVtcywgaG93ZXZlciBudW1iZXIgb2YgZXhpc3Rpbmcgc3lzdGVtcyBsYWNrcwogICAgIHN1cHBvcnQgZm9yIHRoZXNlIGZ1bmN0aW9ucyBpbiB0aGUgcnVudGltZSBzbyB0aGV5IG5lZWRzIHRoaXMgbWFjcm8KICAgICB0byBiZSByZWRlZmluZWQgdG8gMC4KCiAtLSBNYWNybzogVEFSR0VUX0hBU19TSU5DT1MKICAgICBXaGVuIHRoaXMgbWFjcm8gaXMgbm9uemVybywgR0NDIHdpbGwgaW1wbGljaXRseSBvcHRpbWl6ZSBjYWxscyB0bwogICAgICdzaW4nIGFuZCAnY29zJyB3aXRoIHRoZSBzYW1lIGFyZ3VtZW50IHRvIGEgY2FsbCB0byAnc2luY29zJy4gIFRoZQogICAgIGRlZmF1bHQgaXMgemVyby4gIFRoZSB0YXJnZXQgaGFzIHRvIHByb3ZpZGUgdGhlIGZvbGxvd2luZwogICAgIGZ1bmN0aW9uczoKICAgICAgICAgIHZvaWQgc2luY29zKGRvdWJsZSB4LCBkb3VibGUgKnNpbiwgZG91YmxlICpjb3MpOwogICAgICAgICAgdm9pZCBzaW5jb3NmKGZsb2F0IHgsIGZsb2F0ICpzaW4sIGZsb2F0ICpjb3MpOwogICAgICAgICAgdm9pZCBzaW5jb3NsKGxvbmcgZG91YmxlIHgsIGxvbmcgZG91YmxlICpzaW4sIGxvbmcgZG91YmxlICpjb3MpOwoKIC0tIE1hY3JvOiBORVhUX09CSkNfUlVOVElNRQogICAgIERlZmluZSB0aGlzIG1hY3JvIHRvIGdlbmVyYXRlIGNvZGUgZm9yIE9iamVjdGl2ZS1DIG1lc3NhZ2Ugc2VuZGluZwogICAgIHVzaW5nIHRoZSBjYWxsaW5nIGNvbnZlbnRpb24gb2YgdGhlIE5lWFQgc3lzdGVtLiAgVGhpcyBjYWxsaW5nCiAgICAgY29udmVudGlvbiBpbnZvbHZlcyBwYXNzaW5nIHRoZSBvYmplY3QsIHRoZSBzZWxlY3RvciBhbmQgdGhlIG1ldGhvZAogICAgIGFyZ3VtZW50cyBhbGwgYXQgb25jZSB0byB0aGUgbWV0aG9kLWxvb2t1cCBsaWJyYXJ5IGZ1bmN0aW9uLgoKICAgICBUaGUgZGVmYXVsdCBjYWxsaW5nIGNvbnZlbnRpb24gcGFzc2VzIGp1c3QgdGhlIG9iamVjdCBhbmQgdGhlCiAgICAgc2VsZWN0b3IgdG8gdGhlIGxvb2t1cCBmdW5jdGlvbiwgd2hpY2ggcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlCiAgICAgbWV0aG9kLgoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IEFkZHJlc3NpbmcgTW9kZXMsICBOZXh0OiBBbmNob3JlZCBBZGRyZXNzZXMsICBQcmV2OiBMaWJyYXJ5IENhbGxzLCAgVXA6IFRhcmdldCBNYWNyb3MKCjE1LjE0IEFkZHJlc3NpbmcgTW9kZXMKPT09PT09PT09PT09PT09PT09PT09PQoKVGhpcyBpcyBhYm91dCBhZGRyZXNzaW5nIG1vZGVzLgoKIC0tIE1hY3JvOiBIQVZFX1BSRV9JTkNSRU1FTlQKIC0tIE1hY3JvOiBIQVZFX1BSRV9ERUNSRU1FTlQKIC0tIE1hY3JvOiBIQVZFX1BPU1RfSU5DUkVNRU5UCiAtLSBNYWNybzogSEFWRV9QT1NUX0RFQ1JFTUVOVAogICAgIEEgQyBleHByZXNzaW9uIHRoYXQgaXMgbm9uemVybyBpZiB0aGUgbWFjaGluZSBzdXBwb3J0cwogICAgIHByZS1pbmNyZW1lbnQsIHByZS1kZWNyZW1lbnQsIHBvc3QtaW5jcmVtZW50LCBvciBwb3N0LWRlY3JlbWVudAogICAgIGFkZHJlc3NpbmcgcmVzcGVjdGl2ZWx5LgoKIC0tIE1hY3JvOiBIQVZFX1BSRV9NT0RJRllfRElTUAogLS0gTWFjcm86IEhBVkVfUE9TVF9NT0RJRllfRElTUAogICAgIEEgQyBleHByZXNzaW9uIHRoYXQgaXMgbm9uemVybyBpZiB0aGUgbWFjaGluZSBzdXBwb3J0cyBwcmUtIG9yCiAgICAgcG9zdC1hZGRyZXNzIHNpZGUtZWZmZWN0IGdlbmVyYXRpb24gaW52b2x2aW5nIGNvbnN0YW50cyBvdGhlciB0aGFuCiAgICAgdGhlIHNpemUgb2YgdGhlIG1lbW9yeSBvcGVyYW5kLgoKIC0tIE1hY3JvOiBIQVZFX1BSRV9NT0RJRllfUkVHCiAtLSBNYWNybzogSEFWRV9QT1NUX01PRElGWV9SRUcKICAgICBBIEMgZXhwcmVzc2lvbiB0aGF0IGlzIG5vbnplcm8gaWYgdGhlIG1hY2hpbmUgc3VwcG9ydHMgcHJlLSBvcgogICAgIHBvc3QtYWRkcmVzcyBzaWRlLWVmZmVjdCBnZW5lcmF0aW9uIGludm9sdmluZyBhIHJlZ2lzdGVyCiAgICAgZGlzcGxhY2VtZW50LgoKIC0tIE1hY3JvOiBDT05TVEFOVF9BRERSRVNTX1AgKFgpCiAgICAgQSBDIGV4cHJlc3Npb24gdGhhdCBpcyAxIGlmIHRoZSBSVFggWCBpcyBhIGNvbnN0YW50IHdoaWNoIGlzIGEKICAgICB2YWxpZCBhZGRyZXNzLiAgT24gbW9zdCBtYWNoaW5lcywgdGhpcyBjYW4gYmUgZGVmaW5lZCBhcwogICAgICdDT05TVEFOVF9QIChYKScsIGJ1dCBhIGZldyBtYWNoaW5lcyBhcmUgbW9yZSByZXN0cmljdGl2ZSBpbiB3aGljaAogICAgIGNvbnN0YW50IGFkZHJlc3NlcyBhcmUgc3VwcG9ydGVkLgoKIC0tIE1hY3JvOiBDT05TVEFOVF9QIChYKQogICAgICdDT05TVEFOVF9QJywgd2hpY2ggaXMgZGVmaW5lZCBieSB0YXJnZXQtaW5kZXBlbmRlbnQgY29kZSwgYWNjZXB0cwogICAgIGludGVnZXItdmFsdWVzIGV4cHJlc3Npb25zIHdob3NlIHZhbHVlcyBhcmUgbm90IGV4cGxpY2l0bHkga25vd24sCiAgICAgc3VjaCBhcyAnc3ltYm9sX3JlZicsICdsYWJlbF9yZWYnLCBhbmQgJ2hpZ2gnIGV4cHJlc3Npb25zIGFuZAogICAgICdjb25zdCcgYXJpdGhtZXRpYyBleHByZXNzaW9ucywgaW4gYWRkaXRpb24gdG8gJ2NvbnN0X2ludCcgYW5kCiAgICAgJ2NvbnN0X2RvdWJsZScgZXhwcmVzc2lvbnMuCgogLS0gTWFjcm86IE1BWF9SRUdTX1BFUl9BRERSRVNTCiAgICAgQSBudW1iZXIsIHRoZSBtYXhpbXVtIG51bWJlciBvZiByZWdpc3RlcnMgdGhhdCBjYW4gYXBwZWFyIGluIGEKICAgICB2YWxpZCBtZW1vcnkgYWRkcmVzcy4gIE5vdGUgdGhhdCBpdCBpcyB1cCB0byB5b3UgdG8gc3BlY2lmeSBhIHZhbHVlCiAgICAgZXF1YWwgdG8gdGhlIG1heGltdW0gbnVtYmVyIHRoYXQgJ0dPX0lGX0xFR0lUSU1BVEVfQUREUkVTUycgd291bGQKICAgICBldmVyIGFjY2VwdC4KCiAtLSBNYWNybzogR09fSUZfTEVHSVRJTUFURV9BRERSRVNTIChNT0RFLCBYLCBMQUJFTCkKICAgICBBIEMgY29tcG91bmQgc3RhdGVtZW50IHdpdGggYSBjb25kaXRpb25hbCAnZ290byBMQUJFTDsnIGV4ZWN1dGVkIGlmCiAgICAgWCAoYW4gUlRYKSBpcyBhIGxlZ2l0aW1hdGUgbWVtb3J5IGFkZHJlc3Mgb24gdGhlIHRhcmdldCBtYWNoaW5lIGZvcgogICAgIGEgbWVtb3J5IG9wZXJhbmQgb2YgbW9kZSBNT0RFLgoKICAgICBJdCB1c3VhbGx5IHBheXMgdG8gZGVmaW5lIHNldmVyYWwgc2ltcGxlciBtYWNyb3MgdG8gc2VydmUgYXMKICAgICBzdWJyb3V0aW5lcyBmb3IgdGhpcyBvbmUuICBPdGhlcndpc2UgaXQgbWF5IGJlIHRvbyBjb21wbGljYXRlZCB0bwogICAgIHVuZGVyc3RhbmQuCgogICAgIFRoaXMgbWFjcm8gbXVzdCBleGlzdCBpbiB0d28gdmFyaWFudHM6IGEgc3RyaWN0IHZhcmlhbnQgYW5kIGEKICAgICBub24tc3RyaWN0IG9uZS4gIFRoZSBzdHJpY3QgdmFyaWFudCBpcyB1c2VkIGluIHRoZSByZWxvYWQgcGFzcy4gIEl0CiAgICAgbXVzdCBiZSBkZWZpbmVkIHNvIHRoYXQgYW55IHBzZXVkby1yZWdpc3RlciB0aGF0IGhhcyBub3QgYmVlbgogICAgIGFsbG9jYXRlZCBhIGhhcmQgcmVnaXN0ZXIgaXMgY29uc2lkZXJlZCBhIG1lbW9yeSByZWZlcmVuY2UuICBJbgogICAgIGNvbnRleHRzIHdoZXJlIHNvbWUga2luZCBvZiByZWdpc3RlciBpcyByZXF1aXJlZCwgYSBwc2V1ZG8tcmVnaXN0ZXIKICAgICB3aXRoIG5vIGhhcmQgcmVnaXN0ZXIgbXVzdCBiZSByZWplY3RlZC4KCiAgICAgVGhlIG5vbi1zdHJpY3QgdmFyaWFudCBpcyB1c2VkIGluIG90aGVyIHBhc3Nlcy4gIEl0IG11c3QgYmUgZGVmaW5lZAogICAgIHRvIGFjY2VwdCBhbGwgcHNldWRvLXJlZ2lzdGVycyBpbiBldmVyeSBjb250ZXh0IHdoZXJlIHNvbWUga2luZCBvZgogICAgIHJlZ2lzdGVyIGlzIHJlcXVpcmVkLgoKICAgICBDb21waWxlciBzb3VyY2UgZmlsZXMgdGhhdCB3YW50IHRvIHVzZSB0aGUgc3RyaWN0IHZhcmlhbnQgb2YgdGhpcwogICAgIG1hY3JvIGRlZmluZSB0aGUgbWFjcm8gJ1JFR19PS19TVFJJQ1QnLiAgWW91IHNob3VsZCB1c2UgYW4gJyNpZmRlZgogICAgIFJFR19PS19TVFJJQ1QnIGNvbmRpdGlvbmFsIHRvIGRlZmluZSB0aGUgc3RyaWN0IHZhcmlhbnQgaW4gdGhhdAogICAgIGNhc2UgYW5kIHRoZSBub24tc3RyaWN0IHZhcmlhbnQgb3RoZXJ3aXNlLgoKICAgICBTdWJyb3V0aW5lcyB0byBjaGVjayBmb3IgYWNjZXB0YWJsZSByZWdpc3RlcnMgZm9yIHZhcmlvdXMgcHVycG9zZXMKICAgICAob25lIGZvciBiYXNlIHJlZ2lzdGVycywgb25lIGZvciBpbmRleCByZWdpc3RlcnMsIGFuZCBzbyBvbikgYXJlCiAgICAgdHlwaWNhbGx5IGFtb25nIHRoZSBzdWJyb3V0aW5lcyB1c2VkIHRvIGRlZmluZQogICAgICdHT19JRl9MRUdJVElNQVRFX0FERFJFU1MnLiAgVGhlbiBvbmx5IHRoZXNlIHN1YnJvdXRpbmUgbWFjcm9zIG5lZWQKICAgICBoYXZlIHR3byB2YXJpYW50czsgdGhlIGhpZ2hlciBsZXZlbHMgb2YgbWFjcm9zIG1heSBiZSB0aGUgc2FtZQogICAgIHdoZXRoZXIgc3RyaWN0IG9yIG5vdC4KCiAgICAgTm9ybWFsbHksIGNvbnN0YW50IGFkZHJlc3NlcyB3aGljaCBhcmUgdGhlIHN1bSBvZiBhICdzeW1ib2xfcmVmJwogICAgIGFuZCBhbiBpbnRlZ2VyIGFyZSBzdG9yZWQgaW5zaWRlIGEgJ2NvbnN0JyBSVFggdG8gbWFyayB0aGVtIGFzCiAgICAgY29uc3RhbnQuICBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIG5lZWQgdG8gcmVjb2duaXplIHN1Y2ggc3VtcwogICAgIHNwZWNpZmljYWxseSBhcyBsZWdpdGltYXRlIGFkZHJlc3Nlcy4gIE5vcm1hbGx5IHlvdSB3b3VsZCBzaW1wbHkKICAgICByZWNvZ25pemUgYW55ICdjb25zdCcgYXMgbGVnaXRpbWF0ZS4KCiAgICAgVXN1YWxseSAnUFJJTlRfT1BFUkFORF9BRERSRVNTJyBpcyBub3QgcHJlcGFyZWQgdG8gaGFuZGxlIGNvbnN0YW50CiAgICAgc3VtcyB0aGF0IGFyZSBub3QgbWFya2VkIHdpdGggJ2NvbnN0Jy4gIEl0IGFzc3VtZXMgdGhhdCBhIG5ha2VkCiAgICAgJ3BsdXMnIGluZGljYXRlcyBpbmRleGluZy4gIElmIHNvLCB0aGVuIHlvdSBfbXVzdF8gcmVqZWN0IHN1Y2gKICAgICBuYWtlZCBjb25zdGFudCBzdW1zIGFzIGlsbGVnaXRpbWF0ZSBhZGRyZXNzZXMsIHNvIHRoYXQgbm9uZSBvZiB0aGVtCiAgICAgd2lsbCBiZSBnaXZlbiB0byAnUFJJTlRfT1BFUkFORF9BRERSRVNTJy4KCiAgICAgT24gc29tZSBtYWNoaW5lcywgd2hldGhlciBhIHN5bWJvbGljIGFkZHJlc3MgaXMgbGVnaXRpbWF0ZSBkZXBlbmRzCiAgICAgb24gdGhlIHNlY3Rpb24gdGhhdCB0aGUgYWRkcmVzcyByZWZlcnMgdG8uICBPbiB0aGVzZSBtYWNoaW5lcywKICAgICBkZWZpbmUgdGhlIHRhcmdldCBob29rICdUQVJHRVRfRU5DT0RFX1NFQ1RJT05fSU5GTycgdG8gc3RvcmUgdGhlCiAgICAgaW5mb3JtYXRpb24gaW50byB0aGUgJ3N5bWJvbF9yZWYnLCBhbmQgdGhlbiBjaGVjayBmb3IgaXQgaGVyZS4KICAgICBXaGVuIHlvdSBzZWUgYSAnY29uc3QnLCB5b3Ugd2lsbCBoYXZlIHRvIGxvb2sgaW5zaWRlIGl0IHRvIGZpbmQgdGhlCiAgICAgJ3N5bWJvbF9yZWYnIGluIG9yZGVyIHRvIGRldGVybWluZSB0aGUgc2VjdGlvbi4gICpOb3RlIEFzc2VtYmxlcgogICAgIEZvcm1hdDo6LgoKIC0tIE1hY3JvOiBGSU5EX0JBU0VfVEVSTSAoWCkKICAgICBBIEMgZXhwcmVzc2lvbiB0byBkZXRlcm1pbmUgdGhlIGJhc2UgdGVybSBvZiBhZGRyZXNzIFguICBUaGlzIG1hY3JvCiAgICAgaXMgdXNlZCBpbiBvbmx5IG9uZSBwbGFjZTogJ2ZpbmRfYmFzZV90ZXJtJyBpbiBhbGlhcy5jLgoKICAgICBJdCBpcyBhbHdheXMgc2FmZSBmb3IgdGhpcyBtYWNybyB0byBub3QgYmUgZGVmaW5lZC4gIEl0IGV4aXN0cyBzbwogICAgIHRoYXQgYWxpYXMgYW5hbHlzaXMgY2FuIHVuZGVyc3RhbmQgbWFjaGluZS1kZXBlbmRlbnQgYWRkcmVzc2VzLgoKICAgICBUaGUgdHlwaWNhbCB1c2Ugb2YgdGhpcyBtYWNybyBpcyB0byBoYW5kbGUgYWRkcmVzc2VzIGNvbnRhaW5pbmcgYQogICAgIGxhYmVsX3JlZiBvciBzeW1ib2xfcmVmIHdpdGhpbiBhbiBVTlNQRUMuCgogLS0gTWFjcm86IExFR0lUSU1JWkVfQUREUkVTUyAoWCwgT0xEWCwgTU9ERSwgV0lOKQogICAgIEEgQyBjb21wb3VuZCBzdGF0ZW1lbnQgdGhhdCBhdHRlbXB0cyB0byByZXBsYWNlIFggd2l0aCBhIHZhbGlkCiAgICAgbWVtb3J5IGFkZHJlc3MgZm9yIGFuIG9wZXJhbmQgb2YgbW9kZSBNT0RFLiAgV0lOIHdpbGwgYmUgYSBDCiAgICAgc3RhdGVtZW50IGxhYmVsIGVsc2V3aGVyZSBpbiB0aGUgY29kZTsgdGhlIG1hY3JvIGRlZmluaXRpb24gbWF5IHVzZQoKICAgICAgICAgIEdPX0lGX0xFR0lUSU1BVEVfQUREUkVTUyAoTU9ERSwgWCwgV0lOKTsKCiAgICAgdG8gYXZvaWQgZnVydGhlciBwcm9jZXNzaW5nIGlmIHRoZSBhZGRyZXNzIGhhcyBiZWNvbWUgbGVnaXRpbWF0ZS4KCiAgICAgWCB3aWxsIGFsd2F5cyBiZSB0aGUgcmVzdWx0IG9mIGEgY2FsbCB0byAnYnJlYWtfb3V0X21lbW9yeV9yZWZzJywKICAgICBhbmQgT0xEWCB3aWxsIGJlIHRoZSBvcGVyYW5kIHRoYXQgd2FzIGdpdmVuIHRvIHRoYXQgZnVuY3Rpb24gdG8KICAgICBwcm9kdWNlIFguCgogICAgIFRoZSBjb2RlIGdlbmVyYXRlZCBieSB0aGlzIG1hY3JvIHNob3VsZCBub3QgYWx0ZXIgdGhlIHN1YnN0cnVjdHVyZQogICAgIG9mIFguICBJZiBpdCB0cmFuc2Zvcm1zIFggaW50byBhIG1vcmUgbGVnaXRpbWF0ZSBmb3JtLCBpdCBzaG91bGQKICAgICBhc3NpZ24gWCAod2hpY2ggd2lsbCBhbHdheXMgYmUgYSBDIHZhcmlhYmxlKSBhIG5ldyB2YWx1ZS4KCiAgICAgSXQgaXMgbm90IG5lY2Vzc2FyeSBmb3IgdGhpcyBtYWNybyB0byBjb21lIHVwIHdpdGggYSBsZWdpdGltYXRlCiAgICAgYWRkcmVzcy4gIFRoZSBjb21waWxlciBoYXMgc3RhbmRhcmQgd2F5cyBvZiBkb2luZyBzbyBpbiBhbGwgY2FzZXMuCiAgICAgSW4gZmFjdCwgaXQgaXMgc2FmZSB0byBvbWl0IHRoaXMgbWFjcm8uICBCdXQgb2Z0ZW4gYQogICAgIG1hY2hpbmUtZGVwZW5kZW50IHN0cmF0ZWd5IGNhbiBnZW5lcmF0ZSBiZXR0ZXIgY29kZS4KCiAtLSBNYWNybzogTEVHSVRJTUlaRV9SRUxPQURfQUREUkVTUyAoWCwgTU9ERSwgT1BOVU0sIFRZUEUsIElORF9MRVZFTFMsCiAgICAgICAgICBXSU4pCiAgICAgQSBDIGNvbXBvdW5kIHN0YXRlbWVudCB0aGF0IGF0dGVtcHRzIHRvIHJlcGxhY2UgWCwgd2hpY2ggaXMgYW4KICAgICBhZGRyZXNzIHRoYXQgbmVlZHMgcmVsb2FkaW5nLCB3aXRoIGEgdmFsaWQgbWVtb3J5IGFkZHJlc3MgZm9yIGFuCiAgICAgb3BlcmFuZCBvZiBtb2RlIE1PREUuICBXSU4gd2lsbCBiZSBhIEMgc3RhdGVtZW50IGxhYmVsIGVsc2V3aGVyZSBpbgogICAgIHRoZSBjb2RlLiAgSXQgaXMgbm90IG5lY2Vzc2FyeSB0byBkZWZpbmUgdGhpcyBtYWNybywgYnV0IGl0IG1pZ2h0CiAgICAgYmUgdXNlZnVsIGZvciBwZXJmb3JtYW5jZSByZWFzb25zLgoKICAgICBGb3IgZXhhbXBsZSwgb24gdGhlIGkzODYsIGl0IGlzIHNvbWV0aW1lcyBwb3NzaWJsZSB0byB1c2UgYSBzaW5nbGUKICAgICByZWxvYWQgcmVnaXN0ZXIgaW5zdGVhZCBvZiB0d28gYnkgcmVsb2FkaW5nIGEgc3VtIG9mIHR3byBwc2V1ZG8KICAgICByZWdpc3RlcnMgaW50byBhIHJlZ2lzdGVyLiAgT24gdGhlIG90aGVyIGhhbmQsIGZvciBudW1iZXIgb2YgUklTQwogICAgIHByb2Nlc3NvcnMgb2Zmc2V0cyBhcmUgbGltaXRlZCBzbyB0aGF0IG9mdGVuIGFuIGludGVybWVkaWF0ZQogICAgIGFkZHJlc3MgbmVlZHMgdG8gYmUgZ2VuZXJhdGVkIGluIG9yZGVyIHRvIGFkZHJlc3MgYSBzdGFjayBzbG90LiAgQnkKICAgICBkZWZpbmluZyAnTEVHSVRJTUlaRV9SRUxPQURfQUREUkVTUycgYXBwcm9wcmlhdGVseSwgdGhlCiAgICAgaW50ZXJtZWRpYXRlIGFkZHJlc3NlcyBnZW5lcmF0ZWQgZm9yIGFkamFjZW50IHNvbWUgc3RhY2sgc2xvdHMgY2FuCiAgICAgYmUgbWFkZSBpZGVudGljYWwsIGFuZCB0aHVzIGJlIHNoYXJlZC4KCiAgICAgX05vdGVfOiBUaGlzIG1hY3JvIHNob3VsZCBiZSB1c2VkIHdpdGggY2F1dGlvbi4gIEl0IGlzIG5lY2Vzc2FyeSB0bwogICAgIGtub3cgc29tZXRoaW5nIG9mIGhvdyByZWxvYWQgd29ya3MgaW4gb3JkZXIgdG8gZWZmZWN0aXZlbHkgdXNlCiAgICAgdGhpcywgYW5kIGl0IGlzIHF1aXRlIGVhc3kgdG8gcHJvZHVjZSBtYWNyb3MgdGhhdCBidWlsZCBpbiB0b28gbXVjaAogICAgIGtub3dsZWRnZSBvZiByZWxvYWQgaW50ZXJuYWxzLgoKICAgICBfTm90ZV86IFRoaXMgbWFjcm8gbXVzdCBiZSBhYmxlIHRvIHJlbG9hZCBhbiBhZGRyZXNzIGNyZWF0ZWQgYnkgYQogICAgIHByZXZpb3VzIGludm9jYXRpb24gb2YgdGhpcyBtYWNyby4gIElmIGl0IGZhaWxzIHRvIGhhbmRsZSBzdWNoCiAgICAgYWRkcmVzc2VzIHRoZW4gdGhlIGNvbXBpbGVyIG1heSBnZW5lcmF0ZSBpbmNvcnJlY3QgY29kZSBvciBhYm9ydC4KCiAgICAgVGhlIG1hY3JvIGRlZmluaXRpb24gc2hvdWxkIHVzZSAncHVzaF9yZWxvYWQnIHRvIGluZGljYXRlIHBhcnRzCiAgICAgdGhhdCBuZWVkIHJlbG9hZGluZzsgT1BOVU0sIFRZUEUgYW5kIElORF9MRVZFTFMgYXJlIHVzdWFsbHkKICAgICBzdWl0YWJsZSB0byBiZSBwYXNzZWQgdW5hbHRlcmVkIHRvICdwdXNoX3JlbG9hZCcuCgogICAgIFRoZSBjb2RlIGdlbmVyYXRlZCBieSB0aGlzIG1hY3JvIG11c3Qgbm90IGFsdGVyIHRoZSBzdWJzdHJ1Y3R1cmUgb2YKICAgICBYLiAgSWYgaXQgdHJhbnNmb3JtcyBYIGludG8gYSBtb3JlIGxlZ2l0aW1hdGUgZm9ybSwgaXQgc2hvdWxkCiAgICAgYXNzaWduIFggKHdoaWNoIHdpbGwgYWx3YXlzIGJlIGEgQyB2YXJpYWJsZSkgYSBuZXcgdmFsdWUuICBUaGlzCiAgICAgYWxzbyBhcHBsaWVzIHRvIHBhcnRzIHRoYXQgeW91IGNoYW5nZSBpbmRpcmVjdGx5IGJ5IGNhbGxpbmcKICAgICAncHVzaF9yZWxvYWQnLgoKICAgICBUaGUgbWFjcm8gZGVmaW5pdGlvbiBtYXkgdXNlICdzdHJpY3RfbWVtb3J5X2FkZHJlc3NfcCcgdG8gdGVzdCBpZgogICAgIHRoZSBhZGRyZXNzIGhhcyBiZWNvbWUgbGVnaXRpbWF0ZS4KCiAgICAgSWYgeW91IHdhbnQgdG8gY2hhbmdlIG9ubHkgYSBwYXJ0IG9mIFgsIG9uZSBzdGFuZGFyZCB3YXkgb2YgZG9pbmcKICAgICB0aGlzIGlzIHRvIHVzZSAnY29weV9ydHgnLiAgTm90ZSwgaG93ZXZlciwgdGhhdCBpdCB1bnNoYXJlcyBvbmx5IGEKICAgICBzaW5nbGUgbGV2ZWwgb2YgcnRsLiAgVGh1cywgaWYgdGhlIHBhcnQgdG8gYmUgY2hhbmdlZCBpcyBub3QgYXQgdGhlCiAgICAgdG9wIGxldmVsLCB5b3UnbGwgbmVlZCB0byByZXBsYWNlIGZpcnN0IHRoZSB0b3AgbGV2ZWwuICBJdCBpcyBub3QKICAgICBuZWNlc3NhcnkgZm9yIHRoaXMgbWFjcm8gdG8gY29tZSB1cCB3aXRoIGEgbGVnaXRpbWF0ZSBhZGRyZXNzOyBidXQKICAgICBvZnRlbiBhIG1hY2hpbmUtZGVwZW5kZW50IHN0cmF0ZWd5IGNhbiBnZW5lcmF0ZSBiZXR0ZXIgY29kZS4KCiAtLSBNYWNybzogR09fSUZfTU9ERV9ERVBFTkRFTlRfQUREUkVTUyAoQUREUiwgTEFCRUwpCiAgICAgQSBDIHN0YXRlbWVudCBvciBjb21wb3VuZCBzdGF0ZW1lbnQgd2l0aCBhIGNvbmRpdGlvbmFsICdnb3RvCiAgICAgTEFCRUw7JyBleGVjdXRlZCBpZiBtZW1vcnkgYWRkcmVzcyBYIChhbiBSVFgpIGNhbiBoYXZlIGRpZmZlcmVudAogICAgIG1lYW5pbmdzIGRlcGVuZGluZyBvbiB0aGUgbWFjaGluZSBtb2RlIG9mIHRoZSBtZW1vcnkgcmVmZXJlbmNlIGl0CiAgICAgaXMgdXNlZCBmb3Igb3IgaWYgdGhlIGFkZHJlc3MgaXMgdmFsaWQgZm9yIHNvbWUgbW9kZXMgYnV0IG5vdAogICAgIG90aGVycy4KCiAgICAgQXV0b2luY3JlbWVudCBhbmQgYXV0b2RlY3JlbWVudCBhZGRyZXNzZXMgdHlwaWNhbGx5IGhhdmUKICAgICBtb2RlLWRlcGVuZGVudCBlZmZlY3RzIGJlY2F1c2UgdGhlIGFtb3VudCBvZiB0aGUgaW5jcmVtZW50IG9yCiAgICAgZGVjcmVtZW50IGlzIHRoZSBzaXplIG9mIHRoZSBvcGVyYW5kIGJlaW5nIGFkZHJlc3NlZC4gIFNvbWUKICAgICBtYWNoaW5lcyBoYXZlIG90aGVyIG1vZGUtZGVwZW5kZW50IGFkZHJlc3Nlcy4gIE1hbnkgUklTQyBtYWNoaW5lcwogICAgIGhhdmUgbm8gbW9kZS1kZXBlbmRlbnQgYWRkcmVzc2VzLgoKICAgICBZb3UgbWF5IGFzc3VtZSB0aGF0IEFERFIgaXMgYSB2YWxpZCBhZGRyZXNzIGZvciB0aGUgbWFjaGluZS4KCiAtLSBNYWNybzogTEVHSVRJTUFURV9DT05TVEFOVF9QIChYKQogICAgIEEgQyBleHByZXNzaW9uIHRoYXQgaXMgbm9uemVybyBpZiBYIGlzIGEgbGVnaXRpbWF0ZSBjb25zdGFudCBmb3IgYW4KICAgICBpbW1lZGlhdGUgb3BlcmFuZCBvbiB0aGUgdGFyZ2V0IG1hY2hpbmUuICBZb3UgY2FuIGFzc3VtZSB0aGF0IFgKICAgICBzYXRpc2ZpZXMgJ0NPTlNUQU5UX1AnLCBzbyB5b3UgbmVlZCBub3QgY2hlY2sgdGhpcy4gIEluIGZhY3QsICcxJwogICAgIGlzIGEgc3VpdGFibGUgZGVmaW5pdGlvbiBmb3IgdGhpcyBtYWNybyBvbiBtYWNoaW5lcyB3aGVyZSBhbnl0aGluZwogICAgICdDT05TVEFOVF9QJyBpcyB2YWxpZC4KCiAtLSBUYXJnZXQgSG9vazogcnR4IFRBUkdFVF9ERUxFR0lUSU1JWkVfQUREUkVTUyAocnR4IFgpCiAgICAgVGhpcyBob29rIGlzIHVzZWQgdG8gdW5kbyB0aGUgcG9zc2libHkgb2JmdXNjYXRpbmcgZWZmZWN0cyBvZiB0aGUKICAgICAnTEVHSVRJTUlaRV9BRERSRVNTJyBhbmQgJ0xFR0lUSU1JWkVfUkVMT0FEX0FERFJFU1MnIHRhcmdldCBtYWNyb3MuCiAgICAgU29tZSBiYWNrZW5kIGltcGxlbWVudGF0aW9ucyBvZiB0aGVzZSBtYWNyb3Mgd3JhcCBzeW1ib2wgcmVmZXJlbmNlcwogICAgIGluc2lkZSBhbiAnVU5TUEVDJyBydHggdG8gcmVwcmVzZW50IFBJQyBvciBzaW1pbGFyIGFkZHJlc3NpbmcKICAgICBtb2Rlcy4gIFRoaXMgdGFyZ2V0IGhvb2sgYWxsb3dzIEdDQydzIG9wdGltaXplcnMgdG8gdW5kZXJzdGFuZCB0aGUKICAgICBzZW1hbnRpY3Mgb2YgdGhlc2Ugb3BhcXVlICdVTlNQRUMncyBieSBjb252ZXJ0aW5nIHRoZW0gYmFjayBpbnRvCiAgICAgdGhlaXIgb3JpZ2luYWwgZm9ybS4KCiAtLSBUYXJnZXQgSG9vazogYm9vbCBUQVJHRVRfQ0FOTk9UX0ZPUkNFX0NPTlNUX01FTSAocnR4IFgpCiAgICAgVGhpcyBob29rIHNob3VsZCByZXR1cm4gdHJ1ZSBpZiBYIGlzIG9mIGEgZm9ybSB0aGF0IGNhbm5vdCAob3IKICAgICBzaG91bGQgbm90KSBiZSBzcGlsbGVkIHRvIHRoZSBjb25zdGFudCBwb29sLiAgVGhlIGRlZmF1bHQgdmVyc2lvbgogICAgIG9mIHRoaXMgaG9vayByZXR1cm5zIGZhbHNlLgoKICAgICBUaGUgcHJpbWFyeSByZWFzb24gdG8gZGVmaW5lIHRoaXMgaG9vayBpcyB0byBwcmV2ZW50IHJlbG9hZCBmcm9tCiAgICAgZGVjaWRpbmcgdGhhdCBhIG5vbi1sZWdpdGltYXRlIGNvbnN0YW50IHdvdWxkIGJlIGJldHRlciByZWxvYWRlZAogICAgIGZyb20gdGhlIGNvbnN0YW50IHBvb2wgaW5zdGVhZCBvZiBzcGlsbGluZyBhbmQgcmVsb2FkaW5nIGEgcmVnaXN0ZXIKICAgICBob2xkaW5nIHRoZSBjb25zdGFudC4gIFRoaXMgcmVzdHJpY3Rpb24gaXMgb2Z0ZW4gdHJ1ZSBvZiBhZGRyZXNzZXMKICAgICBvZiBUTFMgc3ltYm9scyBmb3IgdmFyaW91cyB0YXJnZXRzLgoKIC0tIFRhcmdldCBIb29rOiBib29sIFRBUkdFVF9VU0VfQkxPQ0tTX0ZPUl9DT05TVEFOVF9QIChlbnVtCiAgICAgICAgICBtYWNoaW5lX21vZGUgTU9ERSwgcnR4IFgpCiAgICAgVGhpcyBob29rIHNob3VsZCByZXR1cm4gdHJ1ZSBpZiBwb29sIGVudHJpZXMgZm9yIGNvbnN0YW50IFggY2FuIGJlCiAgICAgcGxhY2VkIGluIGFuICdvYmplY3RfYmxvY2snIHN0cnVjdHVyZS4gIE1PREUgaXMgdGhlIG1vZGUgb2YgWC4KCiAgICAgVGhlIGRlZmF1bHQgdmVyc2lvbiByZXR1cm5zIGZhbHNlIGZvciBhbGwgY29uc3RhbnRzLgoKIC0tIFRhcmdldCBIb29rOiB0cmVlIFRBUkdFVF9CVUlMVElOX1JFQ0lQUk9DQUwgKGVudW0gdHJlZV9jb2RlIEZOLCBib29sCiAgICAgICAgICBUTV9GTiwgYm9vbCBTUVJUKQogICAgIFRoaXMgaG9vayBzaG91bGQgcmV0dXJuIHRoZSBERUNMIG9mIGEgZnVuY3Rpb24gdGhhdCBpbXBsZW1lbnRzCiAgICAgcmVjaXByb2NhbCBvZiB0aGUgYnVpbHRpbiBmdW5jdGlvbiB3aXRoIGJ1aWx0aW4gZnVuY3Rpb24gY29kZSBGTiwKICAgICBvciAnTlVMTF9UUkVFJyBpZiBzdWNoIGEgZnVuY3Rpb24gaXMgbm90IGF2YWlsYWJsZS4gIFRNX0ZOIGlzIHRydWUKICAgICB3aGVuIEZOIGlzIGEgY29kZSBvZiBhIG1hY2hpbmUtZGVwZW5kZW50IGJ1aWx0aW4gZnVuY3Rpb24uICBXaGVuCiAgICAgU1FSVCBpcyB0cnVlLCBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgdGhhdCBhcHBseSBvbmx5IHRvIHRoZQogICAgIHJlY2lwcm9jYWwgb2YgYSBzcXVhcmUgcm9vdCBmdW5jdGlvbiBhcmUgcGVyZm9ybWVkLCBhbmQgb25seQogICAgIHJlY2lwcm9jYWxzIG9mICdzcXJ0JyBmdW5jdGlvbiBhcmUgdmFsaWQuCgogLS0gVGFyZ2V0IEhvb2s6IHRyZWUgVEFSR0VUX1ZFQ1RPUklaRV9CVUlMVElOX01BU0tfRk9SX0xPQUQgKHZvaWQpCiAgICAgVGhpcyBob29rIHNob3VsZCByZXR1cm4gdGhlIERFQ0wgb2YgYSBmdW5jdGlvbiBGIHRoYXQgZ2l2ZW4gYW4KICAgICBhZGRyZXNzIEFERFIgYXMgYW4gYXJndW1lbnQgcmV0dXJucyBhIG1hc2sgTSB0aGF0IGNhbiBiZSB1c2VkIHRvCiAgICAgZXh0cmFjdCBmcm9tIHR3byB2ZWN0b3JzIHRoZSByZWxldmFudCBkYXRhIHRoYXQgcmVzaWRlcyBpbiBBRERSIGluCiAgICAgY2FzZSBBRERSIGlzIG5vdCBwcm9wZXJseSBhbGlnbmVkLgoKICAgICBUaGUgYXV0b3ZlY3Rvcml6ZXIsIHdoZW4gdmVjdG9yaXppbmcgYSBsb2FkIG9wZXJhdGlvbiBmcm9tIGFuCiAgICAgYWRkcmVzcyBBRERSIHRoYXQgbWF5IGJlIHVuYWxpZ25lZCwgd2lsbCBnZW5lcmF0ZSB0d28gdmVjdG9yIGxvYWRzCiAgICAgZnJvbSB0aGUgdHdvIGFsaWduZWQgYWRkcmVzc2VzIGFyb3VuZCBBRERSLiAgSXQgdGhlbiBnZW5lcmF0ZXMgYQogICAgICdSRUFMSUdOX0xPQUQnIG9wZXJhdGlvbiB0byBleHRyYWN0IHRoZSByZWxldmFudCBkYXRhIGZyb20gdGhlIHR3bwogICAgIGxvYWRlZCB2ZWN0b3JzLiAgVGhlIGZpcnN0IHR3byBhcmd1bWVudHMgdG8gJ1JFQUxJR05fTE9BRCcsIFYxIGFuZAogICAgIFYyLCBhcmUgdGhlIHR3byB2ZWN0b3JzLCBlYWNoIG9mIHNpemUgVlMsIGFuZCB0aGUgdGhpcmQgYXJndW1lbnQsCiAgICAgT0ZGLCBkZWZpbmVzIGhvdyB0aGUgZGF0YSB3aWxsIGJlIGV4dHJhY3RlZCBmcm9tIHRoZXNlIHR3byB2ZWN0b3JzOgogICAgIGlmIE9GRiBpcyAwLCB0aGVuIHRoZSByZXR1cm5lZCB2ZWN0b3IgaXMgVjI7IG90aGVyd2lzZSwgdGhlCiAgICAgcmV0dXJuZWQgdmVjdG9yIGlzIGNvbXBvc2VkIGZyb20gdGhlIGxhc3QgVlMtT0ZGIGVsZW1lbnRzIG9mIFYxCiAgICAgY29uY2F0ZW5hdGVkIHRvIHRoZSBmaXJzdCBPRkYgZWxlbWVudHMgb2YgVjIuCgogICAgIElmIHRoaXMgaG9vayBpcyBkZWZpbmVkLCB0aGUgYXV0b3ZlY3Rvcml6ZXIgd2lsbCBnZW5lcmF0ZSBhIGNhbGwgdG8KICAgICBGICh1c2luZyB0aGUgREVDTCB0cmVlIHRoYXQgdGhpcyBob29rIHJldHVybnMpIGFuZCB3aWxsIHVzZSB0aGUKICAgICByZXR1cm4gdmFsdWUgb2YgRiBhcyB0aGUgYXJndW1lbnQgT0ZGIHRvICdSRUFMSUdOX0xPQUQnLgogICAgIFRoZXJlZm9yZSwgdGhlIG1hc2sgTSByZXR1cm5lZCBieSBGIHNob3VsZCBjb21wbHkgd2l0aCB0aGUKICAgICBzZW1hbnRpY3MgZXhwZWN0ZWQgYnkgJ1JFQUxJR05fTE9BRCcgZGVzY3JpYmVkIGFib3ZlLiAgSWYgdGhpcyBob29rCiAgICAgaXMgbm90IGRlZmluZWQsIHRoZW4gQUREUiB3aWxsIGJlIHVzZWQgYXMgdGhlIGFyZ3VtZW50IE9GRiB0bwogICAgICdSRUFMSUdOX0xPQUQnLCBpbiB3aGljaCBjYXNlIHRoZSBsb3cgbG9nMihWUyktMSBiaXRzIG9mIEFERFIgd2lsbAogICAgIGJlIGNvbnNpZGVyZWQuCgogLS0gVGFyZ2V0IEhvb2s6IHRyZWUgVEFSR0VUX1ZFQ1RPUklaRV9CVUlMVElOX01VTF9XSURFTl9FVkVOICh0cmVlIFgpCiAgICAgVGhpcyBob29rIHNob3VsZCByZXR1cm4gdGhlIERFQ0wgb2YgYSBmdW5jdGlvbiBGIHRoYXQgaW1wbGVtZW50cwogICAgIHdpZGVuaW5nIG11bHRpcGxpY2F0aW9uIG9mIHRoZSBldmVuIGVsZW1lbnRzIG9mIHR3byBpbnB1dCB2ZWN0b3JzCiAgICAgb2YgdHlwZSBYLgoKICAgICBJZiB0aGlzIGhvb2sgaXMgZGVmaW5lZCwgdGhlIGF1dG92ZWN0b3JpemVyIHdpbGwgdXNlIGl0IGFsb25nIHdpdGgKICAgICB0aGUgJ1RBUkdFVF9WRUNUT1JJWkVfQlVJTFRJTl9NVUxfV0lERU5fT0REJyB0YXJnZXQgaG9vayB3aGVuCiAgICAgdmVjdG9yaXppbmcgd2lkZW5pbmcgbXVsdGlwbGljYXRpb24gaW4gY2FzZXMgdGhhdCB0aGUgb3JkZXIgb2YgdGhlCiAgICAgcmVzdWx0cyBkb2VzIG5vdCBoYXZlIHRvIGJlIHByZXNlcnZlZCAoZS5nLiB1c2VkIG9ubHkgYnkgYQogICAgIHJlZHVjdGlvbiBjb21wdXRhdGlvbikuICBPdGhlcndpc2UsIHRoZSAnd2lkZW5fbXVsdF9oaS9sbycgaWRpb21zCiAgICAgd2lsbCBiZSB1c2VkLgoKIC0tIFRhcmdldCBIb29rOiB0cmVlIFRBUkdFVF9WRUNUT1JJWkVfQlVJTFRJTl9NVUxfV0lERU5fT0REICh0cmVlIFgpCiAgICAgVGhpcyBob29rIHNob3VsZCByZXR1cm4gdGhlIERFQ0wgb2YgYSBmdW5jdGlvbiBGIHRoYXQgaW1wbGVtZW50cwogICAgIHdpZGVuaW5nIG11bHRpcGxpY2F0aW9uIG9mIHRoZSBvZGQgZWxlbWVudHMgb2YgdHdvIGlucHV0IHZlY3RvcnMgb2YKICAgICB0eXBlIFguCgogICAgIElmIHRoaXMgaG9vayBpcyBkZWZpbmVkLCB0aGUgYXV0b3ZlY3Rvcml6ZXIgd2lsbCB1c2UgaXQgYWxvbmcgd2l0aAogICAgIHRoZSAnVEFSR0VUX1ZFQ1RPUklaRV9CVUlMVElOX01VTF9XSURFTl9FVkVOJyB0YXJnZXQgaG9vayB3aGVuCiAgICAgdmVjdG9yaXppbmcgd2lkZW5pbmcgbXVsdGlwbGljYXRpb24gaW4gY2FzZXMgdGhhdCB0aGUgb3JkZXIgb2YgdGhlCiAgICAgcmVzdWx0cyBkb2VzIG5vdCBoYXZlIHRvIGJlIHByZXNlcnZlZCAoZS5nLiB1c2VkIG9ubHkgYnkgYQogICAgIHJlZHVjdGlvbiBjb21wdXRhdGlvbikuICBPdGhlcndpc2UsIHRoZSAnd2lkZW5fbXVsdF9oaS9sbycgaWRpb21zCiAgICAgd2lsbCBiZSB1c2VkLgoKIC0tIFRhcmdldCBIb29rOiB0cmVlIFRBUkdFVF9WRUNUT1JJWkVfQlVJTFRJTl9DT05WRVJTSU9OIChlbnVtCiAgICAgICAgICB0cmVlX2NvZGUgQ09ERSwgdHJlZSBUWVBFKQogICAgIFRoaXMgaG9vayBzaG91bGQgcmV0dXJuIHRoZSBERUNMIG9mIGEgZnVuY3Rpb24gdGhhdCBpbXBsZW1lbnRzCiAgICAgY29udmVyc2lvbiBvZiB0aGUgaW5wdXQgdmVjdG9yIG9mIHR5cGUgVFlQRS4gIElmIFRZUEUgaXMgYW4KICAgICBpbnRlZ3JhbCB0eXBlLCB0aGUgcmVzdWx0IG9mIHRoZSBjb252ZXJzaW9uIGlzIGEgdmVjdG9yIG9mCiAgICAgZmxvYXRpbmctcG9pbnQgdHlwZSBvZiB0aGUgc2FtZSBzaXplLiAgSWYgVFlQRSBpcyBhIGZsb2F0aW5nLXBvaW50CiAgICAgdHlwZSwgdGhlIHJlc3VsdCBvZiB0aGUgY29udmVyc2lvbiBpcyBhIHZlY3RvciBvZiBpbnRlZ3JhbCB0eXBlIG9mCiAgICAgdGhlIHNhbWUgc2l6ZS4gIENPREUgc3BlY2lmaWVzIGhvdyB0aGUgY29udmVyc2lvbiBpcyB0byBiZSBhcHBsaWVkCiAgICAgKHRydW5jYXRpb24sIHJvdW5kaW5nLCBldGMuKS4KCiAgICAgSWYgdGhpcyBob29rIGlzIGRlZmluZWQsIHRoZSBhdXRvdmVjdG9yaXplciB3aWxsIHVzZSB0aGUKICAgICAnVEFSR0VUX1ZFQ1RPUklaRV9CVUlMVElOX0NPTlZFUlNJT04nIHRhcmdldCBob29rIHdoZW4gdmVjdG9yaXppbmcKICAgICBjb252ZXJzaW9uLiAgT3RoZXJ3aXNlLCBpdCB3aWxsIHJldHVybiAnTlVMTF9UUkVFJy4KCiAtLSBUYXJnZXQgSG9vazogdHJlZSBUQVJHRVRfVkVDVE9SSVpFX0JVSUxUSU5fVkVDVE9SSVpFRF9GVU5DVElPTiAoZW51bQogICAgICAgICAgYnVpbHRfaW5fZnVuY3Rpb24gQ09ERSwgdHJlZSBWRUNfVFlQRV9PVVQsIHRyZWUgVkVDX1RZUEVfSU4pCiAgICAgVGhpcyBob29rIHNob3VsZCByZXR1cm4gdGhlIGRlY2wgb2YgYSBmdW5jdGlvbiB0aGF0IGltcGxlbWVudHMgdGhlCiAgICAgdmVjdG9yaXplZCB2YXJpYW50IG9mIHRoZSBidWlsdGluIGZ1bmN0aW9uIHdpdGggYnVpbHRpbiBmdW5jdGlvbgogICAgIGNvZGUgQ09ERSBvciAnTlVMTF9UUkVFJyBpZiBzdWNoIGEgZnVuY3Rpb24gaXMgbm90IGF2YWlsYWJsZS4gIFRoZQogICAgIHJldHVybiB0eXBlIG9mIHRoZSB2ZWN0b3JpemVkIGZ1bmN0aW9uIHNoYWxsIGJlIG9mIHZlY3RvciB0eXBlCiAgICAgVkVDX1RZUEVfT1VUIGFuZCB0aGUgYXJndW1lbnQgdHlwZXMgc2hvdWxkIGJlIFZFQ19UWVBFX0lOLgoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IEFuY2hvcmVkIEFkZHJlc3NlcywgIE5leHQ6IENvbmRpdGlvbiBDb2RlLCAgUHJldjogQWRkcmVzc2luZyBNb2RlcywgIFVwOiBUYXJnZXQgTWFjcm9zCgoxNS4xNSBBbmNob3JlZCBBZGRyZXNzZXMKPT09PT09PT09PT09PT09PT09PT09PT09CgpHQ0MgdXN1YWxseSBhZGRyZXNzZXMgZXZlcnkgc3RhdGljIG9iamVjdCBhcyBhIHNlcGFyYXRlIGVudGl0eS4gIEZvcgpleGFtcGxlLCBpZiB3ZSBoYXZlOgoKICAgICBzdGF0aWMgaW50IGEsIGIsIGM7CiAgICAgaW50IGZvbyAodm9pZCkgeyByZXR1cm4gYSArIGIgKyBjOyB9CgogdGhlIGNvZGUgZm9yICdmb28nIHdpbGwgdXN1YWxseSBjYWxjdWxhdGUgdGhyZWUgc2VwYXJhdGUgc3ltYm9saWMKYWRkcmVzc2VzOiB0aG9zZSBvZiAnYScsICdiJyBhbmQgJ2MnLiAgT24gc29tZSB0YXJnZXRzLCBpdCB3b3VsZCBiZQpiZXR0ZXIgdG8gY2FsY3VsYXRlIGp1c3Qgb25lIHN5bWJvbGljIGFkZHJlc3MgYW5kIGFjY2VzcyB0aGUgdGhyZWUKdmFyaWFibGVzIHJlbGF0aXZlIHRvIGl0LiAgVGhlIGVxdWl2YWxlbnQgcHNldWRvY29kZSB3b3VsZCBiZSBzb21ldGhpbmcKbGlrZToKCiAgICAgaW50IGZvbyAodm9pZCkKICAgICB7CiAgICAgICByZWdpc3RlciBpbnQgKnhyID0gJng7CiAgICAgICByZXR1cm4geHJbJmEgLSAmeF0gKyB4clsmYiAtICZ4XSArIHhyWyZjIC0gJnhdOwogICAgIH0KCiAod2hpY2ggaXNuJ3QgdmFsaWQgQykuIFdlIHJlZmVyIHRvIHNoYXJlZCBhZGRyZXNzZXMgbGlrZSAneCcgYXMKInNlY3Rpb24gYW5jaG9ycyIuICBUaGVpciB1c2UgaXMgY29udHJvbGxlZCBieSAnLWZzZWN0aW9uLWFuY2hvcnMnLgoKIFRoZSBob29rcyBiZWxvdyBkZXNjcmliZSB0aGUgdGFyZ2V0IHByb3BlcnRpZXMgdGhhdCBHQ0MgbmVlZHMgdG8ga25vdwppbiBvcmRlciB0byBtYWtlIGVmZmVjdGl2ZSB1c2Ugb2Ygc2VjdGlvbiBhbmNob3JzLiAgSXQgd29uJ3QgdXNlIHNlY3Rpb24KYW5jaG9ycyBhdCBhbGwgdW5sZXNzIGVpdGhlciAnVEFSR0VUX01JTl9BTkNIT1JfT0ZGU0VUJyBvcgonVEFSR0VUX01BWF9BTkNIT1JfT0ZGU0VUJyBpcyBzZXQgdG8gYSBub256ZXJvIHZhbHVlLgoKIC0tIFZhcmlhYmxlOiBUYXJnZXQgSG9vayBIT1NUX1dJREVfSU5UIFRBUkdFVF9NSU5fQU5DSE9SX09GRlNFVAogICAgIFRoZSBtaW5pbXVtIG9mZnNldCB0aGF0IHNob3VsZCBiZSBhcHBsaWVkIHRvIGEgc2VjdGlvbiBhbmNob3IuICBPbgogICAgIG1vc3QgdGFyZ2V0cywgaXQgc2hvdWxkIGJlIHRoZSBzbWFsbGVzdCBvZmZzZXQgdGhhdCBjYW4gYmUgYXBwbGllZAogICAgIHRvIGEgYmFzZSByZWdpc3RlciB3aGlsZSBzdGlsbCBnaXZpbmcgYSBsZWdpdGltYXRlIGFkZHJlc3MgZm9yCiAgICAgZXZlcnkgbW9kZS4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDAuCgogLS0gVmFyaWFibGU6IFRhcmdldCBIb29rIEhPU1RfV0lERV9JTlQgVEFSR0VUX01BWF9BTkNIT1JfT0ZGU0VUCiAgICAgTGlrZSAnVEFSR0VUX01JTl9BTkNIT1JfT0ZGU0VUJywgYnV0IHRoZSBtYXhpbXVtIChpbmNsdXNpdmUpIG9mZnNldAogICAgIHRoYXQgc2hvdWxkIGJlIGFwcGxpZWQgdG8gc2VjdGlvbiBhbmNob3JzLiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgMC4KCiAtLSBUYXJnZXQgSG9vazogdm9pZCBUQVJHRVRfQVNNX09VVFBVVF9BTkNIT1IgKHJ0eCBYKQogICAgIFdyaXRlIHRoZSBhc3NlbWJseSBjb2RlIHRvIGRlZmluZSBzZWN0aW9uIGFuY2hvciBYLCB3aGljaCBpcyBhCiAgICAgJ1NZTUJPTF9SRUYnIGZvciB3aGljaCAnU1lNQk9MX1JFRl9BTkNIT1JfUCAoWCknIGlzIHRydWUuICBUaGUgaG9vawogICAgIGlzIGNhbGxlZCB3aXRoIHRoZSBhc3NlbWJseSBvdXRwdXQgcG9zaXRpb24gc2V0IHRvIHRoZSBiZWdpbm5pbmcgb2YKICAgICAnU1lNQk9MX1JFRl9CTE9DSyAoWCknLgoKICAgICBJZiAnQVNNX09VVFBVVF9ERUYnIGlzIGF2YWlsYWJsZSwgdGhlIGhvb2sncyBkZWZhdWx0IGRlZmluaXRpb24KICAgICB1c2VzIGl0IHRvIGRlZmluZSB0aGUgc3ltYm9sIGFzICcuICsgU1lNQk9MX1JFRl9CTE9DS19PRkZTRVQgKFgpJy4KICAgICBJZiAnQVNNX09VVFBVVF9ERUYnIGlzIG5vdCBhdmFpbGFibGUsIHRoZSBob29rJ3MgZGVmYXVsdCBkZWZpbml0aW9uCiAgICAgaXMgJ05VTEwnLCB3aGljaCBkaXNhYmxlcyB0aGUgdXNlIG9mIHNlY3Rpb24gYW5jaG9ycyBhbHRvZ2V0aGVyLgoKIC0tIFRhcmdldCBIb29rOiBib29sIFRBUkdFVF9VU0VfQU5DSE9SU19GT1JfU1lNQk9MX1AgKHJ0eCBYKQogICAgIFJldHVybiB0cnVlIGlmIEdDQyBzaG91bGQgYXR0ZW1wdCB0byB1c2UgYW5jaG9ycyB0byBhY2Nlc3MKICAgICAnU1lNQk9MX1JFRicgWC4gIFlvdSBjYW4gYXNzdW1lICdTWU1CT0xfUkVGX0hBU19CTE9DS19JTkZPX1AgKFgpJwogICAgIGFuZCAnIVNZTUJPTF9SRUZfQU5DSE9SX1AgKFgpJy4KCiAgICAgVGhlIGRlZmF1bHQgdmVyc2lvbiBpcyBjb3JyZWN0IGZvciBtb3N0IHRhcmdldHMsIGJ1dCB5b3UgbWlnaHQgbmVlZAogICAgIHRvIGludGVyY2VwdCB0aGlzIGhvb2sgdG8gaGFuZGxlIHRoaW5ncyBsaWtlIHRhcmdldC1zcGVjaWZpYwogICAgIGF0dHJpYnV0ZXMgb3IgdGFyZ2V0LXNwZWNpZmljIHNlY3Rpb25zLgoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IENvbmRpdGlvbiBDb2RlLCAgTmV4dDogQ29zdHMsICBQcmV2OiBBbmNob3JlZCBBZGRyZXNzZXMsICBVcDogVGFyZ2V0IE1hY3JvcwoKMTUuMTYgQ29uZGl0aW9uIENvZGUgU3RhdHVzCj09PT09PT09PT09PT09PT09PT09PT09PT09PQoKVGhpcyBkZXNjcmliZXMgdGhlIGNvbmRpdGlvbiBjb2RlIHN0YXR1cy4KCiBUaGUgZmlsZSAnY29uZGl0aW9ucy5oJyBkZWZpbmVzIGEgdmFyaWFibGUgJ2NjX3N0YXR1cycgdG8gZGVzY3JpYmUgaG93CnRoZSBjb25kaXRpb24gY29kZSB3YXMgY29tcHV0ZWQgKGluIGNhc2UgdGhlIGludGVycHJldGF0aW9uIG9mIHRoZQpjb25kaXRpb24gY29kZSBkZXBlbmRzIG9uIHRoZSBpbnN0cnVjdGlvbiB0aGF0IGl0IHdhcyBzZXQgYnkpLiAgVGhpcwp2YXJpYWJsZSBjb250YWlucyB0aGUgUlRMIGV4cHJlc3Npb25zIG9uIHdoaWNoIHRoZSBjb25kaXRpb24gY29kZSBpcwpjdXJyZW50bHkgYmFzZWQsIGFuZCBzZXZlcmFsIHN0YW5kYXJkIGZsYWdzLgoKIFNvbWV0aW1lcyBhZGRpdGlvbmFsIG1hY2hpbmUtc3BlY2lmaWMgZmxhZ3MgbXVzdCBiZSBkZWZpbmVkIGluIHRoZQptYWNoaW5lIGRlc2NyaXB0aW9uIGhlYWRlciBmaWxlLiAgSXQgY2FuIGFsc28gYWRkIGFkZGl0aW9uYWwKbWFjaGluZS1zcGVjaWZpYyBpbmZvcm1hdGlvbiBieSBkZWZpbmluZyAnQ0NfU1RBVFVTX01ERVAnLgoKIC0tIE1hY3JvOiBDQ19TVEFUVVNfTURFUAogICAgIEMgY29kZSBmb3IgYSBkYXRhIHR5cGUgd2hpY2ggaXMgdXNlZCBmb3IgZGVjbGFyaW5nIHRoZSAnbWRlcCcKICAgICBjb21wb25lbnQgb2YgJ2NjX3N0YXR1cycuICBJdCBkZWZhdWx0cyB0byAnaW50Jy4KCiAgICAgVGhpcyBtYWNybyBpcyBub3QgdXNlZCBvbiBtYWNoaW5lcyB0aGF0IGRvIG5vdCB1c2UgJ2NjMCcuCgogLS0gTWFjcm86IENDX1NUQVRVU19NREVQX0lOSVQKICAgICBBIEMgZXhwcmVzc2lvbiB0byBpbml0aWFsaXplIHRoZSAnbWRlcCcgZmllbGQgdG8gImVtcHR5Ii4gIFRoZQogICAgIGRlZmF1bHQgZGVmaW5pdGlvbiBkb2VzIG5vdGhpbmcsIHNpbmNlIG1vc3QgbWFjaGluZXMgZG9uJ3QgdXNlIHRoZQogICAgIGZpZWxkIGFueXdheS4gIElmIHlvdSB3YW50IHRvIHVzZSB0aGUgZmllbGQsIHlvdSBzaG91bGQgcHJvYmFibHkKICAgICBkZWZpbmUgdGhpcyBtYWNybyB0byBpbml0aWFsaXplIGl0LgoKICAgICBUaGlzIG1hY3JvIGlzIG5vdCB1c2VkIG9uIG1hY2hpbmVzIHRoYXQgZG8gbm90IHVzZSAnY2MwJy4KCiAtLSBNYWNybzogTk9USUNFX1VQREFURV9DQyAoRVhQLCBJTlNOKQogICAgIEEgQyBjb21wb3VuZCBzdGF0ZW1lbnQgdG8gc2V0IHRoZSBjb21wb25lbnRzIG9mICdjY19zdGF0dXMnCiAgICAgYXBwcm9wcmlhdGVseSBmb3IgYW4gaW5zbiBJTlNOIHdob3NlIGJvZHkgaXMgRVhQLiAgSXQgaXMgdGhpcwogICAgIG1hY3JvJ3MgcmVzcG9uc2liaWxpdHkgdG8gcmVjb2duaXplIGluc25zIHRoYXQgc2V0IHRoZSBjb25kaXRpb24KICAgICBjb2RlIGFzIGEgYnlwcm9kdWN0IG9mIG90aGVyIGFjdGl2aXR5IGFzIHdlbGwgYXMgdGhvc2UgdGhhdAogICAgIGV4cGxpY2l0bHkgc2V0ICcoY2MwKScuCgogICAgIFRoaXMgbWFjcm8gaXMgbm90IHVzZWQgb24gbWFjaGluZXMgdGhhdCBkbyBub3QgdXNlICdjYzAnLgoKICAgICBJZiB0aGVyZSBhcmUgaW5zbnMgdGhhdCBkbyBub3Qgc2V0IHRoZSBjb25kaXRpb24gY29kZSBidXQgZG8gYWx0ZXIKICAgICBvdGhlciBtYWNoaW5lIHJlZ2lzdGVycywgdGhpcyBtYWNybyBtdXN0IGNoZWNrIHRvIHNlZSB3aGV0aGVyIHRoZXkKICAgICBpbnZhbGlkYXRlIHRoZSBleHByZXNzaW9ucyB0aGF0IHRoZSBjb25kaXRpb24gY29kZSBpcyByZWNvcmRlZCBhcwogICAgIHJlZmxlY3RpbmcuICBGb3IgZXhhbXBsZSwgb24gdGhlIDY4MDAwLCBpbnNucyB0aGF0IHN0b3JlIGluIGFkZHJlc3MKICAgICByZWdpc3RlcnMgZG8gbm90IHNldCB0aGUgY29uZGl0aW9uIGNvZGUsIHdoaWNoIG1lYW5zIHRoYXQgdXN1YWxseQogICAgICdOT1RJQ0VfVVBEQVRFX0NDJyBjYW4gbGVhdmUgJ2NjX3N0YXR1cycgdW5hbHRlcmVkIGZvciBzdWNoIGluc25zLgogICAgIEJ1dCBzdXBwb3NlIHRoYXQgdGhlIHByZXZpb3VzIGluc24gc2V0IHRoZSBjb25kaXRpb24gY29kZSBiYXNlZCBvbgogICAgIGxvY2F0aW9uICdhNEAoMTAyKScgYW5kIHRoZSBjdXJyZW50IGluc24gc3RvcmVzIGEgbmV3IHZhbHVlIGluCiAgICAgJ2E0Jy4gIEFsdGhvdWdoIHRoZSBjb25kaXRpb24gY29kZSBpcyBub3QgY2hhbmdlZCBieSB0aGlzLCBpdCB3aWxsCiAgICAgbm8gbG9uZ2VyIGJlIHRydWUgdGhhdCBpdCByZWZsZWN0cyB0aGUgY29udGVudHMgb2YgJ2E0QCgxMDIpJy4KICAgICBUaGVyZWZvcmUsICdOT1RJQ0VfVVBEQVRFX0NDJyBtdXN0IGFsdGVyICdjY19zdGF0dXMnIGluIHRoaXMgY2FzZQogICAgIHRvIHNheSB0aGF0IG5vdGhpbmcgaXMga25vd24gYWJvdXQgdGhlIGNvbmRpdGlvbiBjb2RlIHZhbHVlLgoKICAgICBUaGUgZGVmaW5pdGlvbiBvZiAnTk9USUNFX1VQREFURV9DQycgbXVzdCBiZSBwcmVwYXJlZCB0byBkZWFsIHdpdGgKICAgICB0aGUgcmVzdWx0cyBvZiBwZWVwaG9sZSBvcHRpbWl6YXRpb246IGluc25zIHdob3NlIHBhdHRlcm5zIGFyZQogICAgICdwYXJhbGxlbCcgUlRYcyBjb250YWluaW5nIHZhcmlvdXMgJ3JlZycsICdtZW0nIG9yIGNvbnN0YW50cyB3aGljaAogICAgIGFyZSBqdXN0IHRoZSBvcGVyYW5kcy4gIFRoZSBSVEwgc3RydWN0dXJlIG9mIHRoZXNlIGluc25zIGlzIG5vdAogICAgIHN1ZmZpY2llbnQgdG8gaW5kaWNhdGUgd2hhdCB0aGUgaW5zbnMgYWN0dWFsbHkgZG8uICBXaGF0CiAgICAgJ05PVElDRV9VUERBVEVfQ0MnIHNob3VsZCBkbyB3aGVuIGl0IHNlZXMgb25lIGlzIGp1c3QgdG8gcnVuCiAgICAgJ0NDX1NUQVRVU19JTklUJy4KCiAgICAgQSBwb3NzaWJsZSBkZWZpbml0aW9uIG9mICdOT1RJQ0VfVVBEQVRFX0NDJyBpcyB0byBjYWxsIGEgZnVuY3Rpb24KICAgICB0aGF0IGxvb2tzIGF0IGFuIGF0dHJpYnV0ZSAoKm5vdGUgSW5zbiBBdHRyaWJ1dGVzOjopIG5hbWVkLCBmb3IKICAgICBleGFtcGxlLCAnY2MnLiAgVGhpcyBhdm9pZHMgaGF2aW5nIGRldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0CiAgICAgcGF0dGVybnMgaW4gdHdvIHBsYWNlcywgdGhlICdtZCcgZmlsZSBhbmQgaW4gJ05PVElDRV9VUERBVEVfQ0MnLgoKIC0tIE1hY3JvOiBTRUxFQ1RfQ0NfTU9ERSAoT1AsIFgsIFkpCiAgICAgUmV0dXJucyBhIG1vZGUgZnJvbSBjbGFzcyAnTU9ERV9DQycgdG8gYmUgdXNlZCB3aGVuIGNvbXBhcmlzb24KICAgICBvcGVyYXRpb24gY29kZSBPUCBpcyBhcHBsaWVkIHRvIHJ0eCBYIGFuZCBZLiAgRm9yIGV4YW1wbGUsIG9uIHRoZQogICAgIFNQQVJDLCAnU0VMRUNUX0NDX01PREUnIGlzIGRlZmluZWQgYXMgKHNlZSAqbm90ZSBKdW1wIFBhdHRlcm5zOjoKICAgICBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgcmVhc29uIGZvciB0aGlzIGRlZmluaXRpb24pCgogICAgICAgICAgI2RlZmluZSBTRUxFQ1RfQ0NfTU9ERShPUCxYLFkpIFwKICAgICAgICAgICAgKEdFVF9NT0RFX0NMQVNTIChHRVRfTU9ERSAoWCkpID09IE1PREVfRkxPQVQgICAgICAgICAgXAogICAgICAgICAgICAgPyAoKE9QID09IEVRIHx8IE9QID09IE5FKSA/IENDRlBtb2RlIDogQ0NGUEVtb2RlKSAgICBcCiAgICAgICAgICAgICA6ICgoR0VUX0NPREUgKFgpID09IFBMVVMgfHwgR0VUX0NPREUgKFgpID09IE1JTlVTICAgIFwKICAgICAgICAgICAgICAgICB8fCBHRVRfQ09ERSAoWCkgPT0gTkVHKSBcCiAgICAgICAgICAgICAgICA/IENDX05PT1Ztb2RlIDogQ0Ntb2RlKSkKCiAgICAgWW91IHNob3VsZCBkZWZpbmUgdGhpcyBtYWNybyBpZiBhbmQgb25seSBpZiB5b3UgZGVmaW5lIGV4dHJhIENDCiAgICAgbW9kZXMgaW4gJ01BQ0hJTkUtbW9kZXMuZGVmJy4KCiAtLSBNYWNybzogQ0FOT05JQ0FMSVpFX0NPTVBBUklTT04gKENPREUsIE9QMCwgT1AxKQogICAgIE9uIHNvbWUgbWFjaGluZXMgbm90IGFsbCBwb3NzaWJsZSBjb21wYXJpc29ucyBhcmUgZGVmaW5lZCwgYnV0IHlvdQogICAgIGNhbiBjb252ZXJ0IGFuIGludmFsaWQgY29tcGFyaXNvbiBpbnRvIGEgdmFsaWQgb25lLiAgRm9yIGV4YW1wbGUsCiAgICAgdGhlIEFscGhhIGRvZXMgbm90IGhhdmUgYSAnR1QnIGNvbXBhcmlzb24sIGJ1dCB5b3UgY2FuIHVzZSBhbiAnTFQnCiAgICAgY29tcGFyaXNvbiBpbnN0ZWFkIGFuZCBzd2FwIHRoZSBvcmRlciBvZiB0aGUgb3BlcmFuZHMuCgogICAgIE9uIHN1Y2ggbWFjaGluZXMsIGRlZmluZSB0aGlzIG1hY3JvIHRvIGJlIGEgQyBzdGF0ZW1lbnQgdG8gZG8gYW55CiAgICAgcmVxdWlyZWQgY29udmVyc2lvbnMuICBDT0RFIGlzIHRoZSBpbml0aWFsIGNvbXBhcmlzb24gY29kZSBhbmQgT1AwCiAgICAgYW5kIE9QMSBhcmUgdGhlIGxlZnQgYW5kIHJpZ2h0IG9wZXJhbmRzIG9mIHRoZSBjb21wYXJpc29uLAogICAgIHJlc3BlY3RpdmVseS4gIFlvdSBzaG91bGQgbW9kaWZ5IENPREUsIE9QMCwgYW5kIE9QMSBhcyByZXF1aXJlZC4KCiAgICAgR0NDIHdpbGwgbm90IGFzc3VtZSB0aGF0IHRoZSBjb21wYXJpc29uIHJlc3VsdGluZyBmcm9tIHRoaXMgbWFjcm8KICAgICBpcyB2YWxpZCBidXQgd2lsbCBzZWUgaWYgdGhlIHJlc3VsdGluZyBpbnNuIG1hdGNoZXMgYSBwYXR0ZXJuIGluCiAgICAgdGhlICdtZCcgZmlsZS4KCiAgICAgWW91IG5lZWQgbm90IGRlZmluZSB0aGlzIG1hY3JvIGlmIGl0IHdvdWxkIG5ldmVyIGNoYW5nZSB0aGUKICAgICBjb21wYXJpc29uIGNvZGUgb3Igb3BlcmFuZHMuCgogLS0gTWFjcm86IFJFVkVSU0lCTEVfQ0NfTU9ERSAoTU9ERSkKICAgICBBIEMgZXhwcmVzc2lvbiB3aG9zZSB2YWx1ZSBpcyBvbmUgaWYgaXQgaXMgYWx3YXlzIHNhZmUgdG8gcmV2ZXJzZSBhCiAgICAgY29tcGFyaXNvbiB3aG9zZSBtb2RlIGlzIE1PREUuICBJZiAnU0VMRUNUX0NDX01PREUnIGNhbiBldmVyIHJldHVybgogICAgIE1PREUgZm9yIGEgZmxvYXRpbmctcG9pbnQgaW5lcXVhbGl0eSBjb21wYXJpc29uLCB0aGVuCiAgICAgJ1JFVkVSU0lCTEVfQ0NfTU9ERSAoTU9ERSknIG11c3QgYmUgemVyby4KCiAgICAgWW91IG5lZWQgbm90IGRlZmluZSB0aGlzIG1hY3JvIGlmIGl0IHdvdWxkIGFsd2F5cyByZXR1cm5zIHplcm8gb3IKICAgICBpZiB0aGUgZmxvYXRpbmctcG9pbnQgZm9ybWF0IGlzIGFueXRoaW5nIG90aGVyIHRoYW4KICAgICAnSUVFRV9GTE9BVF9GT1JNQVQnLiAgRm9yIGV4YW1wbGUsIGhlcmUgaXMgdGhlIGRlZmluaXRpb24gdXNlZCBvbgogICAgIHRoZSBTUEFSQywgd2hlcmUgZmxvYXRpbmctcG9pbnQgaW5lcXVhbGl0eSBjb21wYXJpc29ucyBhcmUgYWx3YXlzCiAgICAgZ2l2ZW4gJ0NDRlBFbW9kZSc6CgogICAgICAgICAgI2RlZmluZSBSRVZFUlNJQkxFX0NDX01PREUoTU9ERSkgICgoTU9ERSkgIT0gQ0NGUEVtb2RlKQoKIC0tIE1hY3JvOiBSRVZFUlNFX0NPTkRJVElPTiAoQ09ERSwgTU9ERSkKICAgICBBIEMgZXhwcmVzc2lvbiB3aG9zZSB2YWx1ZSBpcyByZXZlcnNlZCBjb25kaXRpb24gY29kZSBvZiB0aGUgQ09ERQogICAgIGZvciBjb21wYXJpc29uIGRvbmUgaW4gQ0NfTU9ERSBNT0RFLiAgVGhlIG1hY3JvIGlzIHVzZWQgb25seSBpbgogICAgIGNhc2UgJ1JFVkVSU0lCTEVfQ0NfTU9ERSAoTU9ERSknIGlzIG5vbnplcm8uICBEZWZpbmUgdGhpcyBtYWNybyBpbgogICAgIGNhc2UgbWFjaGluZSBoYXMgc29tZSBub24tc3RhbmRhcmQgd2F5IGhvdyB0byByZXZlcnNlIGNlcnRhaW4KICAgICBjb25kaXRpb25hbHMuICBGb3IgaW5zdGFuY2UgaW4gY2FzZSBhbGwgZmxvYXRpbmcgcG9pbnQgY29uZGl0aW9ucwogICAgIGFyZSBub24tdHJhcHBpbmcsIGNvbXBpbGVyIG1heSBmcmVlbHkgY29udmVydCB1bm9yZGVyZWQgY29tcGFyZXMgdG8KICAgICBvcmRlcmVkIG9uZS4gIFRoZW4gZGVmaW5pdGlvbiBtYXkgbG9vayBsaWtlOgoKICAgICAgICAgICNkZWZpbmUgUkVWRVJTRV9DT05ESVRJT04oQ09ERSwgTU9ERSkgXAogICAgICAgICAgICAgKChNT0RFKSAhPSBDQ0ZQbW9kZSA/IHJldmVyc2VfY29uZGl0aW9uIChDT0RFKSBcCiAgICAgICAgICAgICAgOiByZXZlcnNlX2NvbmRpdGlvbl9tYXliZV91bm9yZGVyZWQgKENPREUpKQoKIC0tIE1hY3JvOiBSRVZFUlNFX0NPTkRFWEVDX1BSRURJQ0FURVNfUCAoT1AxLCBPUDIpCiAgICAgQSBDIGV4cHJlc3Npb24gdGhhdCByZXR1cm5zIHRydWUgaWYgdGhlIGNvbmRpdGlvbmFsIGV4ZWN1dGlvbgogICAgIHByZWRpY2F0ZSBPUDEsIGEgY29tcGFyaXNvbiBvcGVyYXRpb24sIGlzIHRoZSBpbnZlcnNlIG9mIE9QMiBhbmQKICAgICB2aWNlIHZlcnNhLiAgRGVmaW5lIHRoaXMgdG8gcmV0dXJuIDAgaWYgdGhlIHRhcmdldCBoYXMgY29uZGl0aW9uYWwKICAgICBleGVjdXRpb24gcHJlZGljYXRlcyB0aGF0IGNhbm5vdCBiZSByZXZlcnNlZCBzYWZlbHkuICBUaGVyZSBpcyBubwogICAgIG5lZWQgdG8gdmFsaWRhdGUgdGhhdCB0aGUgYXJndW1lbnRzIG9mIG9wMSBhbmQgb3AyIGFyZSB0aGUgc2FtZSwKICAgICB0aGlzIGlzIGRvbmUgc2VwYXJhdGVseS4gIElmIG5vIGV4cGFuc2lvbiBpcyBzcGVjaWZpZWQsIHRoaXMgbWFjcm8KICAgICBpcyBkZWZpbmVkIGFzIGZvbGxvd3M6CgogICAgICAgICAgI2RlZmluZSBSRVZFUlNFX0NPTkRFWEVDX1BSRURJQ0FURVNfUCAoeCwgeSkgXAogICAgICAgICAgICAgKEdFVF9DT0RFICgoeCkpID09IHJldmVyc2VkX2NvbXBhcmlzb25fY29kZSAoKHkpLCBOVUxMKSkKCiAtLSBUYXJnZXQgSG9vazogYm9vbCBUQVJHRVRfRklYRURfQ09ORElUSU9OX0NPREVfUkVHUyAodW5zaWduZWQgaW50ICosCiAgICAgICAgICB1bnNpZ25lZCBpbnQgKikKICAgICBPbiB0YXJnZXRzIHdoaWNoIGRvIG5vdCB1c2UgJyhjYzApJywgYW5kIHdoaWNoIHVzZSBhIGhhcmQgcmVnaXN0ZXIKICAgICByYXRoZXIgdGhhbiBhIHBzZXVkby1yZWdpc3RlciB0byBob2xkIGNvbmRpdGlvbiBjb2RlcywgdGhlIHJlZ3VsYXIKICAgICBDU0UgcGFzc2VzIGFyZSBvZnRlbiBub3QgYWJsZSB0byBpZGVudGlmeSBjYXNlcyBpbiB3aGljaCB0aGUgaGFyZAogICAgIHJlZ2lzdGVyIGlzIHNldCB0byBhIGNvbW1vbiB2YWx1ZS4gIFVzZSB0aGlzIGhvb2sgdG8gZW5hYmxlIGEgc21hbGwKICAgICBwYXNzIHdoaWNoIG9wdGltaXplcyBzdWNoIGNhc2VzLiAgVGhpcyBob29rIHNob3VsZCByZXR1cm4gdHJ1ZSB0bwogICAgIGVuYWJsZSB0aGlzIHBhc3MsIGFuZCBpdCBzaG91bGQgc2V0IHRoZSBpbnRlZ2VycyB0byB3aGljaCBpdHMKICAgICBhcmd1bWVudHMgcG9pbnQgdG8gdGhlIGhhcmQgcmVnaXN0ZXIgbnVtYmVycyB1c2VkIGZvciBjb25kaXRpb24KICAgICBjb2Rlcy4gIFdoZW4gdGhlcmUgaXMgb25seSBvbmUgc3VjaCByZWdpc3RlciwgYXMgaXMgdHJ1ZSBvbiBtb3N0CiAgICAgc3lzdGVtcywgdGhlIGludGVnZXIgcG9pbnRlZCB0byBieSB0aGUgc2Vjb25kIGFyZ3VtZW50IHNob3VsZCBiZQogICAgIHNldCB0byAnSU5WQUxJRF9SRUdOVU0nLgoKICAgICBUaGUgZGVmYXVsdCB2ZXJzaW9uIG9mIHRoaXMgaG9vayByZXR1cm5zIGZhbHNlLgoKIC0tIFRhcmdldCBIb29rOiBlbnVtIG1hY2hpbmVfbW9kZSBUQVJHRVRfQ0NfTU9ERVNfQ09NUEFUSUJMRSAoZW51bQogICAgICAgICAgbWFjaGluZV9tb2RlLCBlbnVtIG1hY2hpbmVfbW9kZSkKICAgICBPbiB0YXJnZXRzIHdoaWNoIHVzZSBtdWx0aXBsZSBjb25kaXRpb24gY29kZSBtb2RlcyBpbiBjbGFzcwogICAgICdNT0RFX0NDJywgaXQgaXMgc29tZXRpbWVzIHRoZSBjYXNlIHRoYXQgYSBjb21wYXJpc29uIGNhbiBiZQogICAgIHZhbGlkbHkgZG9uZSBpbiBtb3JlIHRoYW4gb25lIG1vZGUuICBPbiBzdWNoIGEgc3lzdGVtLCBkZWZpbmUgdGhpcwogICAgIHRhcmdldCBob29rIHRvIHRha2UgdHdvIG1vZGUgYXJndW1lbnRzIGFuZCB0byByZXR1cm4gYSBtb2RlIGluCiAgICAgd2hpY2ggYm90aCBjb21wYXJpc29ucyBtYXkgYmUgdmFsaWRseSBkb25lLiAgSWYgdGhlcmUgaXMgbm8gc3VjaAogICAgIG1vZGUsIHJldHVybiAnVk9JRG1vZGUnLgoKICAgICBUaGUgZGVmYXVsdCB2ZXJzaW9uIG9mIHRoaXMgaG9vayBjaGVja3Mgd2hldGhlciB0aGUgbW9kZXMgYXJlIHRoZQogICAgIHNhbWUuICBJZiB0aGV5IGFyZSwgaXQgcmV0dXJucyB0aGF0IG1vZGUuICBJZiB0aGV5IGFyZSBkaWZmZXJlbnQsCiAgICAgaXQgcmV0dXJucyAnVk9JRG1vZGUnLgoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IENvc3RzLCAgTmV4dDogU2NoZWR1bGluZywgIFByZXY6IENvbmRpdGlvbiBDb2RlLCAgVXA6IFRhcmdldCBNYWNyb3MKCjE1LjE3IERlc2NyaWJpbmcgUmVsYXRpdmUgQ29zdHMgb2YgT3BlcmF0aW9ucwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KClRoZXNlIG1hY3JvcyBsZXQgeW91IGRlc2NyaWJlIHRoZSByZWxhdGl2ZSBzcGVlZCBvZiB2YXJpb3VzIG9wZXJhdGlvbnMKb24gdGhlIHRhcmdldCBtYWNoaW5lLgoKIC0tIE1hY3JvOiBSRUdJU1RFUl9NT1ZFX0NPU1QgKE1PREUsIEZST00sIFRPKQogICAgIEEgQyBleHByZXNzaW9uIGZvciB0aGUgY29zdCBvZiBtb3ZpbmcgZGF0YSBvZiBtb2RlIE1PREUgZnJvbSBhCiAgICAgcmVnaXN0ZXIgaW4gY2xhc3MgRlJPTSB0byBvbmUgaW4gY2xhc3MgVE8uICBUaGUgY2xhc3NlcyBhcmUKICAgICBleHByZXNzZWQgdXNpbmcgdGhlIGVudW1lcmF0aW9uIHZhbHVlcyBzdWNoIGFzICdHRU5FUkFMX1JFR1MnLiAgQQogICAgIHZhbHVlIG9mIDIgaXMgdGhlIGRlZmF1bHQ7IG90aGVyIHZhbHVlcyBhcmUgaW50ZXJwcmV0ZWQgcmVsYXRpdmUgdG8KICAgICB0aGF0LgoKICAgICBJdCBpcyBub3QgcmVxdWlyZWQgdGhhdCB0aGUgY29zdCBhbHdheXMgZXF1YWwgMiB3aGVuIEZST00gaXMgdGhlCiAgICAgc2FtZSBhcyBUTzsgb24gc29tZSBtYWNoaW5lcyBpdCBpcyBleHBlbnNpdmUgdG8gbW92ZSBiZXR3ZWVuCiAgICAgcmVnaXN0ZXJzIGlmIHRoZXkgYXJlIG5vdCBnZW5lcmFsIHJlZ2lzdGVycy4KCiAgICAgSWYgcmVsb2FkIHNlZXMgYW4gaW5zbiBjb25zaXN0aW5nIG9mIGEgc2luZ2xlICdzZXQnIGJldHdlZW4gdHdvCiAgICAgaGFyZCByZWdpc3RlcnMsIGFuZCBpZiAnUkVHSVNURVJfTU9WRV9DT1NUJyBhcHBsaWVkIHRvIHRoZWlyCiAgICAgY2xhc3NlcyByZXR1cm5zIGEgdmFsdWUgb2YgMiwgcmVsb2FkIGRvZXMgbm90IGNoZWNrIHRvIGVuc3VyZSB0aGF0CiAgICAgdGhlIGNvbnN0cmFpbnRzIG9mIHRoZSBpbnNuIGFyZSBtZXQuICBTZXR0aW5nIGEgY29zdCBvZiBvdGhlciB0aGFuCiAgICAgMiB3aWxsIGFsbG93IHJlbG9hZCB0byB2ZXJpZnkgdGhhdCB0aGUgY29uc3RyYWludHMgYXJlIG1ldC4gIFlvdQogICAgIHNob3VsZCBkbyB0aGlzIGlmIHRoZSAnbW92TScgcGF0dGVybidzIGNvbnN0cmFpbnRzIGRvIG5vdCBhbGxvdwogICAgIHN1Y2ggY29weWluZy4KCiAtLSBNYWNybzogTUVNT1JZX01PVkVfQ09TVCAoTU9ERSwgQ0xBU1MsIElOKQogICAgIEEgQyBleHByZXNzaW9uIGZvciB0aGUgY29zdCBvZiBtb3ZpbmcgZGF0YSBvZiBtb2RlIE1PREUgYmV0d2VlbiBhCiAgICAgcmVnaXN0ZXIgb2YgY2xhc3MgQ0xBU1MgYW5kIG1lbW9yeTsgSU4gaXMgemVybyBpZiB0aGUgdmFsdWUgaXMgdG8KICAgICBiZSB3cml0dGVuIHRvIG1lbW9yeSwgbm9uemVybyBpZiBpdCBpcyB0byBiZSByZWFkIGluLiAgVGhpcyBjb3N0IGlzCiAgICAgcmVsYXRpdmUgdG8gdGhvc2UgaW4gJ1JFR0lTVEVSX01PVkVfQ09TVCcuICBJZiBtb3ZpbmcgYmV0d2VlbgogICAgIHJlZ2lzdGVycyBhbmQgbWVtb3J5IGlzIG1vcmUgZXhwZW5zaXZlIHRoYW4gYmV0d2VlbiB0d28gcmVnaXN0ZXJzLAogICAgIHlvdSBzaG91bGQgZGVmaW5lIHRoaXMgbWFjcm8gdG8gZXhwcmVzcyB0aGUgcmVsYXRpdmUgY29zdC4KCiAgICAgSWYgeW91IGRvIG5vdCBkZWZpbmUgdGhpcyBtYWNybywgR0NDIHVzZXMgYSBkZWZhdWx0IGNvc3Qgb2YgNCBwbHVzCiAgICAgdGhlIGNvc3Qgb2YgY29weWluZyB2aWEgYSBzZWNvbmRhcnkgcmVsb2FkIHJlZ2lzdGVyLCBpZiBvbmUgaXMKICAgICBuZWVkZWQuICBJZiB5b3VyIG1hY2hpbmUgcmVxdWlyZXMgYSBzZWNvbmRhcnkgcmVsb2FkIHJlZ2lzdGVyIHRvCiAgICAgY29weSBiZXR3ZWVuIG1lbW9yeSBhbmQgYSByZWdpc3RlciBvZiBDTEFTUyBidXQgdGhlIHJlbG9hZAogICAgIG1lY2hhbmlzbSBpcyBtb3JlIGNvbXBsZXggdGhhbiBjb3B5aW5nIHZpYSBhbiBpbnRlcm1lZGlhdGUsIGRlZmluZQogICAgIHRoaXMgbWFjcm8gdG8gcmVmbGVjdCB0aGUgYWN0dWFsIGNvc3Qgb2YgdGhlIG1vdmUuCgogICAgIEdDQyBkZWZpbmVzIHRoZSBmdW5jdGlvbiAnbWVtb3J5X21vdmVfc2Vjb25kYXJ5X2Nvc3QnIGlmIHNlY29uZGFyeQogICAgIHJlbG9hZHMgYXJlIG5lZWRlZC4gIEl0IGNvbXB1dGVzIHRoZSBjb3N0cyBkdWUgdG8gY29weWluZyB2aWEgYQogICAgIHNlY29uZGFyeSByZWdpc3Rlci4gIElmIHlvdXIgbWFjaGluZSBjb3BpZXMgZnJvbSBtZW1vcnkgdXNpbmcgYQogICAgIHNlY29uZGFyeSByZWdpc3RlciBpbiB0aGUgY29udmVudGlvbmFsIHdheSBidXQgdGhlIGRlZmF1bHQgYmFzZQogICAgIHZhbHVlIG9mIDQgaXMgbm90IGNvcnJlY3QgZm9yIHlvdXIgbWFjaGluZSwgZGVmaW5lIHRoaXMgbWFjcm8gdG8KICAgICBhZGQgc29tZSBvdGhlciB2YWx1ZSB0byB0aGUgcmVzdWx0IG9mIHRoYXQgZnVuY3Rpb24uICBUaGUgYXJndW1lbnRzCiAgICAgdG8gdGhhdCBmdW5jdGlvbiBhcmUgdGhlIHNhbWUgYXMgdG8gdGhpcyBtYWNyby4KCiAtLSBNYWNybzogQlJBTkNIX0NPU1QKICAgICBBIEMgZXhwcmVzc2lvbiBmb3IgdGhlIGNvc3Qgb2YgYSBicmFuY2ggaW5zdHJ1Y3Rpb24uICBBIHZhbHVlIG9mIDEKICAgICBpcyB0aGUgZGVmYXVsdDsgb3RoZXIgdmFsdWVzIGFyZSBpbnRlcnByZXRlZCByZWxhdGl2ZSB0byB0aGF0LgoKIEhlcmUgYXJlIGFkZGl0aW9uYWwgbWFjcm9zIHdoaWNoIGRvIG5vdCBzcGVjaWZ5IHByZWNpc2UgcmVsYXRpdmUgY29zdHMsCmJ1dCBvbmx5IHRoYXQgY2VydGFpbiBhY3Rpb25zIGFyZSBtb3JlIGV4cGVuc2l2ZSB0aGFuIEdDQyB3b3VsZApvcmRpbmFyaWx5IGV4cGVjdC4KCiAtLSBNYWNybzogU0xPV19CWVRFX0FDQ0VTUwogICAgIERlZmluZSB0aGlzIG1hY3JvIGFzIGEgQyBleHByZXNzaW9uIHdoaWNoIGlzIG5vbnplcm8gaWYgYWNjZXNzaW5nCiAgICAgbGVzcyB0aGFuIGEgd29yZCBvZiBtZW1vcnkgKGkuZS4gYSAnY2hhcicgb3IgYSAnc2hvcnQnKSBpcyBubwogICAgIGZhc3RlciB0aGFuIGFjY2Vzc2luZyBhIHdvcmQgb2YgbWVtb3J5LCBpLmUuLCBpZiBzdWNoIGFjY2VzcwogICAgIHJlcXVpcmUgbW9yZSB0aGFuIG9uZSBpbnN0cnVjdGlvbiBvciBpZiB0aGVyZSBpcyBubyBkaWZmZXJlbmNlIGluCiAgICAgY29zdCBiZXR3ZWVuIGJ5dGUgYW5kIChhbGlnbmVkKSB3b3JkIGxvYWRzLgoKICAgICBXaGVuIHRoaXMgbWFjcm8gaXMgbm90IGRlZmluZWQsIHRoZSBjb21waWxlciB3aWxsIGFjY2VzcyBhIGZpZWxkIGJ5CiAgICAgZmluZGluZyB0aGUgc21hbGxlc3QgY29udGFpbmluZyBvYmplY3Q7IHdoZW4gaXQgaXMgZGVmaW5lZCwgYQogICAgIGZ1bGx3b3JkIGxvYWQgd2lsbCBiZSB1c2VkIGlmIGFsaWdubWVudCBwZXJtaXRzLiAgVW5sZXNzIGJ5dGVzCiAgICAgYWNjZXNzZXMgYXJlIGZhc3RlciB0aGFuIHdvcmQgYWNjZXNzZXMsIHVzaW5nIHdvcmQgYWNjZXNzZXMgaXMKICAgICBwcmVmZXJhYmxlIHNpbmNlIGl0IG1heSBlbGltaW5hdGUgc3Vic2VxdWVudCBtZW1vcnkgYWNjZXNzIGlmCiAgICAgc3Vic2VxdWVudCBhY2Nlc3NlcyBvY2N1ciB0byBvdGhlciBmaWVsZHMgaW4gdGhlIHNhbWUgd29yZCBvZiB0aGUKICAgICBzdHJ1Y3R1cmUsIGJ1dCB0byBkaWZmZXJlbnQgYnl0ZXMuCgogLS0gTWFjcm86IFNMT1dfVU5BTElHTkVEX0FDQ0VTUyAoTU9ERSwgQUxJR05NRU5UKQogICAgIERlZmluZSB0aGlzIG1hY3JvIHRvIGJlIHRoZSB2YWx1ZSAxIGlmIG1lbW9yeSBhY2Nlc3NlcyBkZXNjcmliZWQgYnkKICAgICB0aGUgTU9ERSBhbmQgQUxJR05NRU5UIHBhcmFtZXRlcnMgaGF2ZSBhIGNvc3QgbWFueSB0aW1lcyBncmVhdGVyCiAgICAgdGhhbiBhbGlnbmVkIGFjY2Vzc2VzLCBmb3IgZXhhbXBsZSBpZiB0aGV5IGFyZSBlbXVsYXRlZCBpbiBhIHRyYXAKICAgICBoYW5kbGVyLgoKICAgICBXaGVuIHRoaXMgbWFjcm8gaXMgbm9uemVybywgdGhlIGNvbXBpbGVyIHdpbGwgYWN0IGFzIGlmCiAgICAgJ1NUUklDVF9BTElHTk1FTlQnIHdlcmUgbm9uemVybyB3aGVuIGdlbmVyYXRpbmcgY29kZSBmb3IgYmxvY2sKICAgICBtb3Zlcy4gIFRoaXMgY2FuIGNhdXNlIHNpZ25pZmljYW50bHkgbW9yZSBpbnN0cnVjdGlvbnMgdG8gYmUKICAgICBwcm9kdWNlZC4gIFRoZXJlZm9yZSwgZG8gbm90IHNldCB0aGlzIG1hY3JvIG5vbnplcm8gaWYgdW5hbGlnbmVkCiAgICAgYWNjZXNzZXMgb25seSBhZGQgYSBjeWNsZSBvciB0d28gdG8gdGhlIHRpbWUgZm9yIGEgbWVtb3J5IGFjY2Vzcy4KCiAgICAgSWYgdGhlIHZhbHVlIG9mIHRoaXMgbWFjcm8gaXMgYWx3YXlzIHplcm8sIGl0IG5lZWQgbm90IGJlIGRlZmluZWQuCiAgICAgSWYgdGhpcyBtYWNybyBpcyBkZWZpbmVkLCBpdCBzaG91bGQgcHJvZHVjZSBhIG5vbnplcm8gdmFsdWUgd2hlbgogICAgICdTVFJJQ1RfQUxJR05NRU5UJyBpcyBub256ZXJvLgoKIC0tIE1hY3JvOiBNT1ZFX1JBVElPCiAgICAgVGhlIHRocmVzaG9sZCBvZiBudW1iZXIgb2Ygc2NhbGFyIG1lbW9yeS10by1tZW1vcnkgbW92ZSBpbnNucywKICAgICBfYmVsb3dfIHdoaWNoIGEgc2VxdWVuY2Ugb2YgaW5zbnMgc2hvdWxkIGJlIGdlbmVyYXRlZCBpbnN0ZWFkIG9mIGEKICAgICBzdHJpbmcgbW92ZSBpbnNuIG9yIGEgbGlicmFyeSBjYWxsLiAgSW5jcmVhc2luZyB0aGUgdmFsdWUgd2lsbAogICAgIGFsd2F5cyBtYWtlIGNvZGUgZmFzdGVyLCBidXQgZXZlbnR1YWxseSBpbmN1cnMgaGlnaCBjb3N0IGluCiAgICAgaW5jcmVhc2VkIGNvZGUgc2l6ZS4KCiAgICAgTm90ZSB0aGF0IG9uIG1hY2hpbmVzIHdoZXJlIHRoZSBjb3JyZXNwb25kaW5nIG1vdmUgaW5zbiBpcyBhCiAgICAgJ2RlZmluZV9leHBhbmQnIHRoYXQgZW1pdHMgYSBzZXF1ZW5jZSBvZiBpbnNucywgdGhpcyBtYWNybyBjb3VudHMKICAgICB0aGUgbnVtYmVyIG9mIHN1Y2ggc2VxdWVuY2VzLgoKICAgICBJZiB5b3UgZG9uJ3QgZGVmaW5lIHRoaXMsIGEgcmVhc29uYWJsZSBkZWZhdWx0IGlzIHVzZWQuCgogLS0gTWFjcm86IE1PVkVfQllfUElFQ0VTX1AgKFNJWkUsIEFMSUdOTUVOVCkKICAgICBBIEMgZXhwcmVzc2lvbiB1c2VkIHRvIGRldGVybWluZSB3aGV0aGVyICdtb3ZlX2J5X3BpZWNlcycgd2lsbCBiZQogICAgIHVzZWQgdG8gY29weSBhIGNodW5rIG9mIG1lbW9yeSwgb3Igd2hldGhlciBzb21lIG90aGVyIGJsb2NrIG1vdmUKICAgICBtZWNoYW5pc20gd2lsbCBiZSB1c2VkLiAgRGVmYXVsdHMgdG8gMSBpZiAnbW92ZV9ieV9waWVjZXNfbmluc25zJwogICAgIHJldHVybnMgbGVzcyB0aGFuICdNT1ZFX1JBVElPJy4KCiAtLSBNYWNybzogTU9WRV9NQVhfUElFQ0VTCiAgICAgQSBDIGV4cHJlc3Npb24gdXNlZCBieSAnbW92ZV9ieV9waWVjZXMnIHRvIGRldGVybWluZSB0aGUgbGFyZ2VzdAogICAgIHVuaXQgYSBsb2FkIG9yIHN0b3JlIHVzZWQgdG8gY29weSBtZW1vcnkgaXMuICBEZWZhdWx0cyB0bwogICAgICdNT1ZFX01BWCcuCgogLS0gTWFjcm86IENMRUFSX1JBVElPCiAgICAgVGhlIHRocmVzaG9sZCBvZiBudW1iZXIgb2Ygc2NhbGFyIG1vdmUgaW5zbnMsIF9iZWxvd18gd2hpY2ggYQogICAgIHNlcXVlbmNlIG9mIGluc25zIHNob3VsZCBiZSBnZW5lcmF0ZWQgdG8gY2xlYXIgbWVtb3J5IGluc3RlYWQgb2YgYQogICAgIHN0cmluZyBjbGVhciBpbnNuIG9yIGEgbGlicmFyeSBjYWxsLiAgSW5jcmVhc2luZyB0aGUgdmFsdWUgd2lsbAogICAgIGFsd2F5cyBtYWtlIGNvZGUgZmFzdGVyLCBidXQgZXZlbnR1YWxseSBpbmN1cnMgaGlnaCBjb3N0IGluCiAgICAgaW5jcmVhc2VkIGNvZGUgc2l6ZS4KCiAgICAgSWYgeW91IGRvbid0IGRlZmluZSB0aGlzLCBhIHJlYXNvbmFibGUgZGVmYXVsdCBpcyB1c2VkLgoKIC0tIE1hY3JvOiBDTEVBUl9CWV9QSUVDRVNfUCAoU0laRSwgQUxJR05NRU5UKQogICAgIEEgQyBleHByZXNzaW9uIHVzZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgJ2NsZWFyX2J5X3BpZWNlcycgd2lsbCBiZQogICAgIHVzZWQgdG8gY2xlYXIgYSBjaHVuayBvZiBtZW1vcnksIG9yIHdoZXRoZXIgc29tZSBvdGhlciBibG9jayBjbGVhcgogICAgIG1lY2hhbmlzbSB3aWxsIGJlIHVzZWQuICBEZWZhdWx0cyB0byAxIGlmICdtb3ZlX2J5X3BpZWNlc19uaW5zbnMnCiAgICAgcmV0dXJucyBsZXNzIHRoYW4gJ0NMRUFSX1JBVElPJy4KCiAtLSBNYWNybzogU0VUX1JBVElPCiAgICAgVGhlIHRocmVzaG9sZCBvZiBudW1iZXIgb2Ygc2NhbGFyIG1vdmUgaW5zbnMsIF9iZWxvd18gd2hpY2ggYQogICAgIHNlcXVlbmNlIG9mIGluc25zIHNob3VsZCBiZSBnZW5lcmF0ZWQgdG8gc2V0IG1lbW9yeSB0byBhIGNvbnN0YW50CiAgICAgdmFsdWUsIGluc3RlYWQgb2YgYSBibG9jayBzZXQgaW5zbiBvciBhIGxpYnJhcnkgY2FsbC4gIEluY3JlYXNpbmcKICAgICB0aGUgdmFsdWUgd2lsbCBhbHdheXMgbWFrZSBjb2RlIGZhc3RlciwgYnV0IGV2ZW50dWFsbHkgaW5jdXJzIGhpZ2gKICAgICBjb3N0IGluIGluY3JlYXNlZCBjb2RlIHNpemUuCgogICAgIElmIHlvdSBkb24ndCBkZWZpbmUgdGhpcywgaXQgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIG9mICdNT1ZFX1JBVElPJy4KCiAtLSBNYWNybzogU0VUX0JZX1BJRUNFU19QIChTSVpFLCBBTElHTk1FTlQpCiAgICAgQSBDIGV4cHJlc3Npb24gdXNlZCB0byBkZXRlcm1pbmUgd2hldGhlciAnc3RvcmVfYnlfcGllY2VzJyB3aWxsIGJlCiAgICAgdXNlZCB0byBzZXQgYSBjaHVuayBvZiBtZW1vcnkgdG8gYSBjb25zdGFudCB2YWx1ZSwgb3Igd2hldGhlciBzb21lCiAgICAgb3RoZXIgbWVjaGFuaXNtIHdpbGwgYmUgdXNlZC4gIFVzZWQgYnkgJ19fYnVpbHRpbl9tZW1zZXQnIHdoZW4KICAgICBzdG9yaW5nIHZhbHVlcyBvdGhlciB0aGFuIGNvbnN0YW50IHplcm8uICBEZWZhdWx0cyB0byAxIGlmCiAgICAgJ21vdmVfYnlfcGllY2VzX25pbnNucycgcmV0dXJucyBsZXNzIHRoYW4gJ1NFVF9SQVRJTycuCgogLS0gTWFjcm86IFNUT1JFX0JZX1BJRUNFU19QIChTSVpFLCBBTElHTk1FTlQpCiAgICAgQSBDIGV4cHJlc3Npb24gdXNlZCB0byBkZXRlcm1pbmUgd2hldGhlciAnc3RvcmVfYnlfcGllY2VzJyB3aWxsIGJlCiAgICAgdXNlZCB0byBzZXQgYSBjaHVuayBvZiBtZW1vcnkgdG8gYSBjb25zdGFudCBzdHJpbmcgdmFsdWUsIG9yCiAgICAgd2hldGhlciBzb21lIG90aGVyIG1lY2hhbmlzbSB3aWxsIGJlIHVzZWQuICBVc2VkIGJ5CiAgICAgJ19fYnVpbHRpbl9zdHJjcHknIHdoZW4gY2FsbGVkIHdpdGggYSBjb25zdGFudCBzb3VyY2Ugc3RyaW5nLgogICAgIERlZmF1bHRzIHRvIDEgaWYgJ21vdmVfYnlfcGllY2VzX25pbnNucycgcmV0dXJucyBsZXNzIHRoYW4KICAgICAnTU9WRV9SQVRJTycuCgogLS0gTWFjcm86IFVTRV9MT0FEX1BPU1RfSU5DUkVNRU5UIChNT0RFKQogICAgIEEgQyBleHByZXNzaW9uIHVzZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYSBsb2FkIHBvc3RpbmNyZW1lbnQgaXMgYQogICAgIGdvb2QgdGhpbmcgdG8gdXNlIGZvciBhIGdpdmVuIG1vZGUuICBEZWZhdWx0cyB0byB0aGUgdmFsdWUgb2YKICAgICAnSEFWRV9QT1NUX0lOQ1JFTUVOVCcuCgogLS0gTWFjcm86IFVTRV9MT0FEX1BPU1RfREVDUkVNRU5UIChNT0RFKQogICAgIEEgQyBleHByZXNzaW9uIHVzZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYSBsb2FkIHBvc3RkZWNyZW1lbnQgaXMgYQogICAgIGdvb2QgdGhpbmcgdG8gdXNlIGZvciBhIGdpdmVuIG1vZGUuICBEZWZhdWx0cyB0byB0aGUgdmFsdWUgb2YKICAgICAnSEFWRV9QT1NUX0RFQ1JFTUVOVCcuCgogLS0gTWFjcm86IFVTRV9MT0FEX1BSRV9JTkNSRU1FTlQgKE1PREUpCiAgICAgQSBDIGV4cHJlc3Npb24gdXNlZCB0byBkZXRlcm1pbmUgd2hldGhlciBhIGxvYWQgcHJlaW5jcmVtZW50IGlzIGEKICAgICBnb29kIHRoaW5nIHRvIHVzZSBmb3IgYSBnaXZlbiBtb2RlLiAgRGVmYXVsdHMgdG8gdGhlIHZhbHVlIG9mCiAgICAgJ0hBVkVfUFJFX0lOQ1JFTUVOVCcuCgogLS0gTWFjcm86IFVTRV9MT0FEX1BSRV9ERUNSRU1FTlQgKE1PREUpCiAgICAgQSBDIGV4cHJlc3Npb24gdXNlZCB0byBkZXRlcm1pbmUgd2hldGhlciBhIGxvYWQgcHJlZGVjcmVtZW50IGlzIGEKICAgICBnb29kIHRoaW5nIHRvIHVzZSBmb3IgYSBnaXZlbiBtb2RlLiAgRGVmYXVsdHMgdG8gdGhlIHZhbHVlIG9mCiAgICAgJ0hBVkVfUFJFX0RFQ1JFTUVOVCcuCgogLS0gTWFjcm86IFVTRV9TVE9SRV9QT1NUX0lOQ1JFTUVOVCAoTU9ERSkKICAgICBBIEMgZXhwcmVzc2lvbiB1c2VkIHRvIGRldGVybWluZSB3aGV0aGVyIGEgc3RvcmUgcG9zdGluY3JlbWVudCBpcyBhCiAgICAgZ29vZCB0aGluZyB0byB1c2UgZm9yIGEgZ2l2ZW4gbW9kZS4gIERlZmF1bHRzIHRvIHRoZSB2YWx1ZSBvZgogICAgICdIQVZFX1BPU1RfSU5DUkVNRU5UJy4KCiAtLSBNYWNybzogVVNFX1NUT1JFX1BPU1RfREVDUkVNRU5UIChNT0RFKQogICAgIEEgQyBleHByZXNzaW9uIHVzZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYSBzdG9yZSBwb3N0ZGVjcmVtZW50IGlzIGEKICAgICBnb29kIHRoaW5nIHRvIHVzZSBmb3IgYSBnaXZlbiBtb2RlLiAgRGVmYXVsdHMgdG8gdGhlIHZhbHVlIG9mCiAgICAgJ0hBVkVfUE9TVF9ERUNSRU1FTlQnLgoKIC0tIE1hY3JvOiBVU0VfU1RPUkVfUFJFX0lOQ1JFTUVOVCAoTU9ERSkKICAgICBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYSBzdG9yZSBwcmVpbmNyZW1lbnQgaXMgYQogICAgIGdvb2QgdGhpbmcgdG8gdXNlIGZvciBhIGdpdmVuIG1vZGUuICBEZWZhdWx0cyB0byB0aGUgdmFsdWUgb2YKICAgICAnSEFWRV9QUkVfSU5DUkVNRU5UJy4KCiAtLSBNYWNybzogVVNFX1NUT1JFX1BSRV9ERUNSRU1FTlQgKE1PREUpCiAgICAgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGRldGVybWluZSB3aGV0aGVyIGEgc3RvcmUgcHJlZGVjcmVtZW50IGlzIGEKICAgICBnb29kIHRoaW5nIHRvIHVzZSBmb3IgYSBnaXZlbiBtb2RlLiAgRGVmYXVsdHMgdG8gdGhlIHZhbHVlIG9mCiAgICAgJ0hBVkVfUFJFX0RFQ1JFTUVOVCcuCgogLS0gTWFjcm86IE5PX0ZVTkNUSU9OX0NTRQogICAgIERlZmluZSB0aGlzIG1hY3JvIGlmIGl0IGlzIGFzIGdvb2Qgb3IgYmV0dGVyIHRvIGNhbGwgYSBjb25zdGFudAogICAgIGZ1bmN0aW9uIGFkZHJlc3MgdGhhbiB0byBjYWxsIGFuIGFkZHJlc3Mga2VwdCBpbiBhIHJlZ2lzdGVyLgoKIC0tIE1hY3JvOiBSQU5HRV9URVNUX05PTl9TSE9SVF9DSVJDVUlUCiAgICAgRGVmaW5lIHRoaXMgbWFjcm8gaWYgYSBub24tc2hvcnQtY2lyY3VpdCBvcGVyYXRpb24gcHJvZHVjZWQgYnkKICAgICAnZm9sZF9yYW5nZV90ZXN0ICgpJyBpcyBvcHRpbWFsLiAgVGhpcyBtYWNybyBkZWZhdWx0cyB0byB0cnVlIGlmCiAgICAgJ0JSQU5DSF9DT1NUJyBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHZhbHVlIDIuCgogLS0gVGFyZ2V0IEhvb2s6IGJvb2wgVEFSR0VUX1JUWF9DT1NUUyAocnR4IFgsIGludCBDT0RFLCBpbnQgT1VURVJfQ09ERSwKICAgICAgICAgIGludCAqVE9UQUwpCiAgICAgVGhpcyB0YXJnZXQgaG9vayBkZXNjcmliZXMgdGhlIHJlbGF0aXZlIGNvc3RzIG9mIFJUTCBleHByZXNzaW9ucy4KCiAgICAgVGhlIGNvc3QgbWF5IGRlcGVuZCBvbiB0aGUgcHJlY2lzZSBmb3JtIG9mIHRoZSBleHByZXNzaW9uLCB3aGljaCBpcwogICAgIGF2YWlsYWJsZSBmb3IgZXhhbWluYXRpb24gaW4gWCwgYW5kIHRoZSBydHggY29kZSBvZiB0aGUgZXhwcmVzc2lvbgogICAgIGluIHdoaWNoIGl0IGlzIGNvbnRhaW5lZCwgZm91bmQgaW4gT1VURVJfQ09ERS4gIENPREUgaXMgdGhlCiAgICAgZXhwcmVzc2lvbiBjb2RlLS1yZWR1bmRhbnQsIHNpbmNlIGl0IGNhbiBiZSBvYnRhaW5lZCB3aXRoICdHRVRfQ09ERQogICAgIChYKScuCgogICAgIEluIGltcGxlbWVudGluZyB0aGlzIGhvb2ssIHlvdSBjYW4gdXNlIHRoZSBjb25zdHJ1Y3QgJ0NPU1RTX05fSU5TTlMKICAgICAoTiknIHRvIHNwZWNpZnkgYSBjb3N0IGVxdWFsIHRvIE4gZmFzdCBpbnN0cnVjdGlvbnMuCgogICAgIE9uIGVudHJ5IHRvIHRoZSBob29rLCAnKlRPVEFMJyBjb250YWlucyBhIGRlZmF1bHQgZXN0aW1hdGUgZm9yIHRoZQogICAgIGNvc3Qgb2YgdGhlIGV4cHJlc3Npb24uICBUaGUgaG9vayBzaG91bGQgbW9kaWZ5IHRoaXMgdmFsdWUgYXMKICAgICBuZWNlc3NhcnkuICBUcmFkaXRpb25hbGx5LCB0aGUgZGVmYXVsdCBjb3N0cyBhcmUgJ0NPU1RTX05fSU5TTlMKICAgICAoNSknIGZvciBtdWx0aXBsaWNhdGlvbnMsICdDT1NUU19OX0lOU05TICg3KScgZm9yIGRpdmlzaW9uIGFuZAogICAgIG1vZHVsdXMgb3BlcmF0aW9ucywgYW5kICdDT1NUU19OX0lOU05TICgxKScgZm9yIGFsbCBvdGhlcgogICAgIG9wZXJhdGlvbnMuCgogICAgIFdoZW4gb3B0aW1pemluZyBmb3IgY29kZSBzaXplLCBpLmUuIHdoZW4gJ29wdGltaXplX3NpemUnIGlzCiAgICAgbm9uemVybywgdGhpcyB0YXJnZXQgaG9vayBzaG91bGQgYmUgdXNlZCB0byBlc3RpbWF0ZSB0aGUgcmVsYXRpdmUKICAgICBzaXplIGNvc3Qgb2YgYW4gZXhwcmVzc2lvbiwgYWdhaW4gcmVsYXRpdmUgdG8gJ0NPU1RTX05fSU5TTlMnLgoKICAgICBUaGUgaG9vayByZXR1cm5zIHRydWUgd2hlbiBhbGwgc3ViZXhwcmVzc2lvbnMgb2YgWCBoYXZlIGJlZW4KICAgICBwcm9jZXNzZWQsIGFuZCBmYWxzZSB3aGVuICdydHhfY29zdCcgc2hvdWxkIHJlY3Vyc2UuCgogLS0gVGFyZ2V0IEhvb2s6IGludCBUQVJHRVRfQUREUkVTU19DT1NUIChydHggQUREUkVTUykKICAgICBUaGlzIGhvb2sgY29tcHV0ZXMgdGhlIGNvc3Qgb2YgYW4gYWRkcmVzc2luZyBtb2RlIHRoYXQgY29udGFpbnMKICAgICBBRERSRVNTLiAgSWYgbm90IGRlZmluZWQsIHRoZSBjb3N0IGlzIGNvbXB1dGVkIGZyb20gdGhlIEFERFJFU1MKICAgICBleHByZXNzaW9uIGFuZCB0aGUgJ1RBUkdFVF9SVFhfQ09TVCcgaG9vay4KCiAgICAgRm9yIG1vc3QgQ0lTQyBtYWNoaW5lcywgdGhlIGRlZmF1bHQgY29zdCBpcyBhIGdvb2QgYXBwcm94aW1hdGlvbiBvZgogICAgIHRoZSB0cnVlIGNvc3Qgb2YgdGhlIGFkZHJlc3NpbmcgbW9kZS4gIEhvd2V2ZXIsIG9uIFJJU0MgbWFjaGluZXMsCiAgICAgYWxsIGluc3RydWN0aW9ucyBub3JtYWxseSBoYXZlIHRoZSBzYW1lIGxlbmd0aCBhbmQgZXhlY3V0aW9uIHRpbWUuCiAgICAgSGVuY2UgYWxsIGFkZHJlc3NlcyB3aWxsIGhhdmUgZXF1YWwgY29zdHMuCgogICAgIEluIGNhc2VzIHdoZXJlIG1vcmUgdGhhbiBvbmUgZm9ybSBvZiBhbiBhZGRyZXNzIGlzIGtub3duLCB0aGUgZm9ybQogICAgIHdpdGggdGhlIGxvd2VzdCBjb3N0IHdpbGwgYmUgdXNlZC4gIElmIG11bHRpcGxlIGZvcm1zIGhhdmUgdGhlCiAgICAgc2FtZSwgbG93ZXN0LCBjb3N0LCB0aGUgb25lIHRoYXQgaXMgdGhlIG1vc3QgY29tcGxleCB3aWxsIGJlIHVzZWQuCgogICAgIEZvciBleGFtcGxlLCBzdXBwb3NlIGFuIGFkZHJlc3MgdGhhdCBpcyBlcXVhbCB0byB0aGUgc3VtIG9mIGEKICAgICByZWdpc3RlciBhbmQgYSBjb25zdGFudCBpcyB1c2VkIHR3aWNlIGluIHRoZSBzYW1lIGJhc2ljIGJsb2NrLgogICAgIFdoZW4gdGhpcyBtYWNybyBpcyBub3QgZGVmaW5lZCwgdGhlIGFkZHJlc3Mgd2lsbCBiZSBjb21wdXRlZCBpbiBhCiAgICAgcmVnaXN0ZXIgYW5kIG1lbW9yeSByZWZlcmVuY2VzIHdpbGwgYmUgaW5kaXJlY3QgdGhyb3VnaCB0aGF0CiAgICAgcmVnaXN0ZXIuICBPbiBtYWNoaW5lcyB3aGVyZSB0aGUgY29zdCBvZiB0aGUgYWRkcmVzc2luZyBtb2RlCiAgICAgY29udGFpbmluZyB0aGUgc3VtIGlzIG5vIGhpZ2hlciB0aGFuIHRoYXQgb2YgYSBzaW1wbGUgaW5kaXJlY3QKICAgICByZWZlcmVuY2UsIHRoaXMgd2lsbCBwcm9kdWNlIGFuIGFkZGl0aW9uYWwgaW5zdHJ1Y3Rpb24gYW5kIHBvc3NpYmx5CiAgICAgcmVxdWlyZSBhbiBhZGRpdGlvbmFsIHJlZ2lzdGVyLiAgUHJvcGVyIHNwZWNpZmljYXRpb24gb2YgdGhpcyBtYWNybwogICAgIGVsaW1pbmF0ZXMgdGhpcyBvdmVyaGVhZCBmb3Igc3VjaCBtYWNoaW5lcy4KCiAgICAgVGhpcyBob29rIGlzIG5ldmVyIGNhbGxlZCB3aXRoIGFuIGludmFsaWQgYWRkcmVzcy4KCiAgICAgT24gbWFjaGluZXMgd2hlcmUgYW4gYWRkcmVzcyBpbnZvbHZpbmcgbW9yZSB0aGFuIG9uZSByZWdpc3RlciBpcyBhcwogICAgIGNoZWFwIGFzIGFuIGFkZHJlc3MgY29tcHV0YXRpb24gaW52b2x2aW5nIG9ubHkgb25lIHJlZ2lzdGVyLAogICAgIGRlZmluaW5nICdUQVJHRVRfQUREUkVTU19DT1NUJyB0byByZWZsZWN0IHRoaXMgY2FuIGNhdXNlIHR3bwogICAgIHJlZ2lzdGVycyB0byBiZSBsaXZlIG92ZXIgYSByZWdpb24gb2YgY29kZSB3aGVyZSBvbmx5IG9uZSB3b3VsZAogICAgIGhhdmUgYmVlbiBpZiAnVEFSR0VUX0FERFJFU1NfQ09TVCcgd2VyZSBub3QgZGVmaW5lZCBpbiB0aGF0IG1hbm5lci4KICAgICBUaGlzIGVmZmVjdCBzaG91bGQgYmUgY29uc2lkZXJlZCBpbiB0aGUgZGVmaW5pdGlvbiBvZiB0aGlzIG1hY3JvLgogICAgIEVxdWl2YWxlbnQgY29zdHMgc2hvdWxkIHByb2JhYmx5IG9ubHkgYmUgZ2l2ZW4gdG8gYWRkcmVzc2VzIHdpdGgKICAgICBkaWZmZXJlbnQgbnVtYmVycyBvZiByZWdpc3RlcnMgb24gbWFjaGluZXMgd2l0aCBsb3RzIG9mIHJlZ2lzdGVycy4KCh8KRmlsZTogZ2NjaW50LmluZm8sICBOb2RlOiBTY2hlZHVsaW5nLCAgTmV4dDogU2VjdGlvbnMsICBQcmV2OiBDb3N0cywgIFVwOiBUYXJnZXQgTWFjcm9zCgoxNS4xOCBBZGp1c3RpbmcgdGhlIEluc3RydWN0aW9uIFNjaGVkdWxlcgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKVGhlIGluc3RydWN0aW9uIHNjaGVkdWxlciBtYXkgbmVlZCBhIGZhaXIgYW1vdW50IG9mIG1hY2hpbmUtc3BlY2lmaWMKYWRqdXN0bWVudCBpbiBvcmRlciB0byBwcm9kdWNlIGdvb2QgY29kZS4gIEdDQyBwcm92aWRlcyBzZXZlcmFsIHRhcmdldApob29rcyBmb3IgdGhpcyBwdXJwb3NlLiAgSXQgaXMgdXN1YWxseSBlbm91Z2ggdG8gZGVmaW5lIGp1c3QgYSBmZXcgb2YKdGhlbTogdHJ5IHRoZSBmaXJzdCBvbmVzIGluIHRoaXMgbGlzdCBmaXJzdC4KCiAtLSBUYXJnZXQgSG9vazogaW50IFRBUkdFVF9TQ0hFRF9JU1NVRV9SQVRFICh2b2lkKQogICAgIFRoaXMgaG9vayByZXR1cm5zIHRoZSBtYXhpbXVtIG51bWJlciBvZiBpbnN0cnVjdGlvbnMgdGhhdCBjYW4gZXZlcgogICAgIGlzc3VlIGF0IHRoZSBzYW1lIHRpbWUgb24gdGhlIHRhcmdldCBtYWNoaW5lLiAgVGhlIGRlZmF1bHQgaXMgb25lLgogICAgIEFsdGhvdWdoIHRoZSBpbnNuIHNjaGVkdWxlciBjYW4gZGVmaW5lIGl0c2VsZiB0aGUgcG9zc2liaWxpdHkgb2YKICAgICBpc3N1ZSBhbiBpbnNuIG9uIHRoZSBzYW1lIGN5Y2xlLCB0aGUgdmFsdWUgY2FuIHNlcnZlIGFzIGFuCiAgICAgYWRkaXRpb25hbCBjb25zdHJhaW50IHRvIGlzc3VlIGluc25zIG9uIHRoZSBzYW1lIHNpbXVsYXRlZAogICAgIHByb2Nlc3NvciBjeWNsZSAoc2VlIGhvb2tzICdUQVJHRVRfU0NIRURfUkVPUkRFUicgYW5kCiAgICAgJ1RBUkdFVF9TQ0hFRF9SRU9SREVSMicpLiAgVGhpcyB2YWx1ZSBtdXN0IGJlIGNvbnN0YW50IG92ZXIgdGhlCiAgICAgZW50aXJlIGNvbXBpbGF0aW9uLiAgSWYgeW91IG5lZWQgaXQgdG8gdmFyeSBkZXBlbmRpbmcgb24gd2hhdCB0aGUKICAgICBpbnN0cnVjdGlvbnMgYXJlLCB5b3UgbXVzdCB1c2UgJ1RBUkdFVF9TQ0hFRF9WQVJJQUJMRV9JU1NVRScuCgogLS0gVGFyZ2V0IEhvb2s6IGludCBUQVJHRVRfU0NIRURfVkFSSUFCTEVfSVNTVUUgKEZJTEUgKkZJTEUsIGludAogICAgICAgICAgVkVSQk9TRSwgcnR4IElOU04sIGludCBNT1JFKQogICAgIFRoaXMgaG9vayBpcyBleGVjdXRlZCBieSB0aGUgc2NoZWR1bGVyIGFmdGVyIGl0IGhhcyBzY2hlZHVsZWQgYW4KICAgICBpbnNuIGZyb20gdGhlIHJlYWR5IGxpc3QuICBJdCBzaG91bGQgcmV0dXJuIHRoZSBudW1iZXIgb2YgaW5zbnMKICAgICB3aGljaCBjYW4gc3RpbGwgYmUgaXNzdWVkIGluIHRoZSBjdXJyZW50IGN5Y2xlLiAgVGhlIGRlZmF1bHQgaXMKICAgICAnTU9SRSAtIDEnIGZvciBpbnNucyBvdGhlciB0aGFuICdDTE9CQkVSJyBhbmQgJ1VTRScsIHdoaWNoIG5vcm1hbGx5CiAgICAgYXJlIG5vdCBjb3VudGVkIGFnYWluc3QgdGhlIGlzc3VlIHJhdGUuICBZb3Ugc2hvdWxkIGRlZmluZSB0aGlzCiAgICAgaG9vayBpZiBzb21lIGluc25zIHRha2UgbW9yZSBtYWNoaW5lIHJlc291cmNlcyB0aGFuIG90aGVycywgc28gdGhhdAogICAgIGZld2VyIGluc25zIGNhbiBmb2xsb3cgdGhlbSBpbiB0aGUgc2FtZSBjeWNsZS4gIEZJTEUgaXMgZWl0aGVyIGEKICAgICBudWxsIHBvaW50ZXIsIG9yIGEgc3RkaW8gc3RyZWFtIHRvIHdyaXRlIGFueSBkZWJ1ZyBvdXRwdXQgdG8uCiAgICAgVkVSQk9TRSBpcyB0aGUgdmVyYm9zZSBsZXZlbCBwcm92aWRlZCBieSAnLWZzY2hlZC12ZXJib3NlLU4nLiAgSU5TTgogICAgIGlzIHRoZSBpbnN0cnVjdGlvbiB0aGF0IHdhcyBzY2hlZHVsZWQuCgogLS0gVGFyZ2V0IEhvb2s6IGludCBUQVJHRVRfU0NIRURfQURKVVNUX0NPU1QgKHJ0eCBJTlNOLCBydHggTElOSywgcnR4CiAgICAgICAgICBERVBfSU5TTiwgaW50IENPU1QpCiAgICAgVGhpcyBmdW5jdGlvbiBjb3JyZWN0cyB0aGUgdmFsdWUgb2YgQ09TVCBiYXNlZCBvbiB0aGUgcmVsYXRpb25zaGlwCiAgICAgYmV0d2VlbiBJTlNOIGFuZCBERVBfSU5TTiB0aHJvdWdoIHRoZSBkZXBlbmRlbmNlIExJTksuICBJdCBzaG91bGQKICAgICByZXR1cm4gdGhlIG5ldyB2YWx1ZS4gIFRoZSBkZWZhdWx0IGlzIHRvIG1ha2Ugbm8gYWRqdXN0bWVudCB0bwogICAgIENPU1QuICBUaGlzIGNhbiBiZSB1c2VkIGZvciBleGFtcGxlIHRvIHNwZWNpZnkgdG8gdGhlIHNjaGVkdWxlcgogICAgIHVzaW5nIHRoZSB0cmFkaXRpb25hbCBwaXBlbGluZSBkZXNjcmlwdGlvbiB0aGF0IGFuIG91dHB1dC0gb3IKICAgICBhbnRpLWRlcGVuZGVuY2UgZG9lcyBub3QgaW5jdXIgdGhlIHNhbWUgY29zdCBhcyBhIGRhdGEtZGVwZW5kZW5jZS4KICAgICBJZiB0aGUgc2NoZWR1bGVyIHVzaW5nIHRoZSBhdXRvbWF0b24gYmFzZWQgcGlwZWxpbmUgZGVzY3JpcHRpb24sCiAgICAgdGhlIGNvc3Qgb2YgYW50aS1kZXBlbmRlbmNlIGlzIHplcm8gYW5kIHRoZSBjb3N0IG9mCiAgICAgb3V0cHV0LWRlcGVuZGVuY2UgaXMgbWF4aW11bSBvZiBvbmUgYW5kIHRoZSBkaWZmZXJlbmNlIG9mIGxhdGVuY3kKICAgICB0aW1lcyBvZiB0aGUgZmlyc3QgYW5kIHRoZSBzZWNvbmQgaW5zbnMuICBJZiB0aGVzZSB2YWx1ZXMgYXJlIG5vdAogICAgIGFjY2VwdGFibGUsIHlvdSBjb3VsZCB1c2UgdGhlIGhvb2sgdG8gbW9kaWZ5IHRoZW0gdG9vLiAgU2VlIGFsc28KICAgICAqbm90ZSBQcm9jZXNzb3IgcGlwZWxpbmUgZGVzY3JpcHRpb246Oi4KCiAtLSBUYXJnZXQgSG9vazogaW50IFRBUkdFVF9TQ0hFRF9BREpVU1RfUFJJT1JJVFkgKHJ0eCBJTlNOLCBpbnQKICAgICAgICAgIFBSSU9SSVRZKQogICAgIFRoaXMgaG9vayBhZGp1c3RzIHRoZSBpbnRlZ2VyIHNjaGVkdWxpbmcgcHJpb3JpdHkgUFJJT1JJVFkgb2YgSU5TTi4KICAgICBJdCBzaG91bGQgcmV0dXJuIHRoZSBuZXcgcHJpb3JpdHkuICBJbmNyZWFzZSB0aGUgcHJpb3JpdHkgdG8KICAgICBleGVjdXRlIElOU04gZWFybGllciwgcmVkdWNlIHRoZSBwcmlvcml0eSB0byBleGVjdXRlIElOU04gbGF0ZXIuCiAgICAgRG8gbm90IGRlZmluZSB0aGlzIGhvb2sgaWYgeW91IGRvIG5vdCBuZWVkIHRvIGFkanVzdCB0aGUgc2NoZWR1bGluZwogICAgIHByaW9yaXRpZXMgb2YgaW5zbnMuCgogLS0gVGFyZ2V0IEhvb2s6IGludCBUQVJHRVRfU0NIRURfUkVPUkRFUiAoRklMRSAqRklMRSwgaW50IFZFUkJPU0UsIHJ0eAogICAgICAgICAgKlJFQURZLCBpbnQgKk5fUkVBRFlQLCBpbnQgQ0xPQ0spCiAgICAgVGhpcyBob29rIGlzIGV4ZWN1dGVkIGJ5IHRoZSBzY2hlZHVsZXIgYWZ0ZXIgaXQgaGFzIHNjaGVkdWxlZCB0aGUKICAgICByZWFkeSBsaXN0LCB0byBhbGxvdyB0aGUgbWFjaGluZSBkZXNjcmlwdGlvbiB0byByZW9yZGVyIGl0IChmb3IKICAgICBleGFtcGxlIHRvIGNvbWJpbmUgdHdvIHNtYWxsIGluc3RydWN0aW9ucyB0b2dldGhlciBvbiAnVkxJVycKICAgICBtYWNoaW5lcykuICBGSUxFIGlzIGVpdGhlciBhIG51bGwgcG9pbnRlciwgb3IgYSBzdGRpbyBzdHJlYW0gdG8KICAgICB3cml0ZSBhbnkgZGVidWcgb3V0cHV0IHRvLiAgVkVSQk9TRSBpcyB0aGUgdmVyYm9zZSBsZXZlbCBwcm92aWRlZAogICAgIGJ5ICctZnNjaGVkLXZlcmJvc2UtTicuICBSRUFEWSBpcyBhIHBvaW50ZXIgdG8gdGhlIHJlYWR5IGxpc3Qgb2YKICAgICBpbnN0cnVjdGlvbnMgdGhhdCBhcmUgcmVhZHkgdG8gYmUgc2NoZWR1bGVkLiAgTl9SRUFEWVAgaXMgYSBwb2ludGVyCiAgICAgdG8gdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgcmVhZHkgbGlzdC4gIFRoZSBzY2hlZHVsZXIgcmVhZHMKICAgICB0aGUgcmVhZHkgbGlzdCBpbiByZXZlcnNlIG9yZGVyLCBzdGFydGluZyB3aXRoIFJFQURZWypOX1JFQURZUC0xXQogICAgIGFuZCBnb2luZyB0byBSRUFEWVswXS4gIENMT0NLIGlzIHRoZSB0aW1lciB0aWNrIG9mIHRoZSBzY2hlZHVsZXIuCiAgICAgWW91IG1heSBtb2RpZnkgdGhlIHJlYWR5IGxpc3QgYW5kIHRoZSBudW1iZXIgb2YgcmVhZHkgaW5zbnMuICBUaGUKICAgICByZXR1cm4gdmFsdWUgaXMgdGhlIG51bWJlciBvZiBpbnNucyB0aGF0IGNhbiBpc3N1ZSB0aGlzIGN5Y2xlOwogICAgIG5vcm1hbGx5IHRoaXMgaXMganVzdCAnaXNzdWVfcmF0ZScuICBTZWUgYWxzbwogICAgICdUQVJHRVRfU0NIRURfUkVPUkRFUjInLgoKIC0tIFRhcmdldCBIb29rOiBpbnQgVEFSR0VUX1NDSEVEX1JFT1JERVIyIChGSUxFICpGSUxFLCBpbnQgVkVSQk9TRSwgcnR4CiAgICAgICAgICAqUkVBRFksIGludCAqTl9SRUFEWSwgQ0xPQ0spCiAgICAgTGlrZSAnVEFSR0VUX1NDSEVEX1JFT1JERVInLCBidXQgY2FsbGVkIGF0IGEgZGlmZmVyZW50IHRpbWUuICBUaGF0CiAgICAgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW5ldmVyIHRoZSBzY2hlZHVsZXIgc3RhcnRzIGEgbmV3IGN5Y2xlLiAgVGhpcwogICAgIG9uZSBpcyBjYWxsZWQgb25jZSBwZXIgaXRlcmF0aW9uIG92ZXIgYSBjeWNsZSwgaW1tZWRpYXRlbHkgYWZ0ZXIKICAgICAnVEFSR0VUX1NDSEVEX1ZBUklBQkxFX0lTU1VFJzsgaXQgY2FuIHJlb3JkZXIgdGhlIHJlYWR5IGxpc3QgYW5kCiAgICAgcmV0dXJuIHRoZSBudW1iZXIgb2YgaW5zbnMgdG8gYmUgc2NoZWR1bGVkIGluIHRoZSBzYW1lIGN5Y2xlLgogICAgIERlZmluaW5nIHRoaXMgaG9vayBjYW4gYmUgdXNlZnVsIGlmIHRoZXJlIGFyZSBmcmVxdWVudCBzaXR1YXRpb25zCiAgICAgd2hlcmUgc2NoZWR1bGluZyBvbmUgaW5zbiBjYXVzZXMgb3RoZXIgaW5zbnMgdG8gYmVjb21lIHJlYWR5IGluIHRoZQogICAgIHNhbWUgY3ljbGUuICBUaGVzZSBvdGhlciBpbnNucyBjYW4gdGhlbiBiZSB0YWtlbiBpbnRvIGFjY291bnQKICAgICBwcm9wZXJseS4KCiAtLSBUYXJnZXQgSG9vazogdm9pZCBUQVJHRVRfU0NIRURfREVQRU5ERU5DSUVTX0VWQUxVQVRJT05fSE9PSyAocnR4CiAgICAgICAgICBIRUFELCBydHggVEFJTCkKICAgICBUaGlzIGhvb2sgaXMgY2FsbGVkIGFmdGVyIGV2YWx1YXRpb24gZm9yd2FyZCBkZXBlbmRlbmNpZXMgb2YgaW5zbnMKICAgICBpbiBjaGFpbiBnaXZlbiBieSB0d28gcGFyYW1ldGVyIHZhbHVlcyAoSEVBRCBhbmQgVEFJTAogICAgIGNvcnJlc3BvbmRpbmdseSkgYnV0IGJlZm9yZSBpbnNucyBzY2hlZHVsaW5nIG9mIHRoZSBpbnNuIGNoYWluLgogICAgIEZvciBleGFtcGxlLCBpdCBjYW4gYmUgdXNlZCBmb3IgYmV0dGVyIGluc24gY2xhc3NpZmljYXRpb24gaWYgaXQKICAgICByZXF1aXJlcyBhbmFseXNpcyBvZiBkZXBlbmRlbmNpZXMuICBUaGlzIGhvb2sgY2FuIHVzZSBiYWNrd2FyZCBhbmQKICAgICBmb3J3YXJkIGRlcGVuZGVuY2llcyBvZiB0aGUgaW5zbiBzY2hlZHVsZXIgYmVjYXVzZSB0aGV5IGFyZSBhbHJlYWR5CiAgICAgY2FsY3VsYXRlZC4KCiAtLSBUYXJnZXQgSG9vazogdm9pZCBUQVJHRVRfU0NIRURfSU5JVCAoRklMRSAqRklMRSwgaW50IFZFUkJPU0UsIGludAogICAgICAgICAgTUFYX1JFQURZKQogICAgIFRoaXMgaG9vayBpcyBleGVjdXRlZCBieSB0aGUgc2NoZWR1bGVyIGF0IHRoZSBiZWdpbm5pbmcgb2YgZWFjaAogICAgIGJsb2NrIG9mIGluc3RydWN0aW9ucyB0aGF0IGFyZSB0byBiZSBzY2hlZHVsZWQuICBGSUxFIGlzIGVpdGhlciBhCiAgICAgbnVsbCBwb2ludGVyLCBvciBhIHN0ZGlvIHN0cmVhbSB0byB3cml0ZSBhbnkgZGVidWcgb3V0cHV0IHRvLgogICAgIFZFUkJPU0UgaXMgdGhlIHZlcmJvc2UgbGV2ZWwgcHJvdmlkZWQgYnkgJy1mc2NoZWQtdmVyYm9zZS1OJy4KICAgICBNQVhfUkVBRFkgaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGluc25zIGluIHRoZSBjdXJyZW50IHNjaGVkdWxpbmcKICAgICByZWdpb24gdGhhdCBjYW4gYmUgbGl2ZSBhdCB0aGUgc2FtZSB0aW1lLiAgVGhpcyBjYW4gYmUgdXNlZCB0bwogICAgIGFsbG9jYXRlIHNjcmF0Y2ggc3BhY2UgaWYgaXQgaXMgbmVlZGVkLCBlLmcuIGJ5CiAgICAgJ1RBUkdFVF9TQ0hFRF9SRU9SREVSJy4KCiAtLSBUYXJnZXQgSG9vazogdm9pZCBUQVJHRVRfU0NIRURfRklOSVNIIChGSUxFICpGSUxFLCBpbnQgVkVSQk9TRSkKICAgICBUaGlzIGhvb2sgaXMgZXhlY3V0ZWQgYnkgdGhlIHNjaGVkdWxlciBhdCB0aGUgZW5kIG9mIGVhY2ggYmxvY2sgb2YKICAgICBpbnN0cnVjdGlvbnMgdGhhdCBhcmUgdG8gYmUgc2NoZWR1bGVkLiAgSXQgY2FuIGJlIHVzZWQgdG8gcGVyZm9ybQogICAgIGNsZWFudXAgb2YgYW55IGFjdGlvbnMgZG9uZSBieSB0aGUgb3RoZXIgc2NoZWR1bGluZyBob29rcy4gIEZJTEUgaXMKICAgICBlaXRoZXIgYSBudWxsIHBvaW50ZXIsIG9yIGEgc3RkaW8gc3RyZWFtIHRvIHdyaXRlIGFueSBkZWJ1ZyBvdXRwdXQKICAgICB0by4gIFZFUkJPU0UgaXMgdGhlIHZlcmJvc2UgbGV2ZWwgcHJvdmlkZWQgYnkgJy1mc2NoZWQtdmVyYm9zZS1OJy4KCiAtLSBUYXJnZXQgSG9vazogdm9pZCBUQVJHRVRfU0NIRURfSU5JVF9HTE9CQUwgKEZJTEUgKkZJTEUsIGludCBWRVJCT1NFLAogICAgICAgICAgaW50IE9MRF9NQVhfVUlEKQogICAgIFRoaXMgaG9vayBpcyBleGVjdXRlZCBieSB0aGUgc2NoZWR1bGVyIGFmdGVyIGZ1bmN0aW9uIGxldmVsCiAgICAgaW5pdGlhbGl6YXRpb25zLiAgRklMRSBpcyBlaXRoZXIgYSBudWxsIHBvaW50ZXIsIG9yIGEgc3RkaW8gc3RyZWFtCiAgICAgdG8gd3JpdGUgYW55IGRlYnVnIG91dHB1dCB0by4gIFZFUkJPU0UgaXMgdGhlIHZlcmJvc2UgbGV2ZWwKICAgICBwcm92aWRlZCBieSAnLWZzY2hlZC12ZXJib3NlLU4nLiAgT0xEX01BWF9VSUQgaXMgdGhlIG1heGltdW0gaW5zbgogICAgIHVpZCB3aGVuIHNjaGVkdWxpbmcgYmVnaW5zLgoKIC0tIFRhcmdldCBIb29rOiB2b2lkIFRBUkdFVF9TQ0hFRF9GSU5JU0hfR0xPQkFMIChGSUxFICpGSUxFLCBpbnQKICAgICAgICAgIFZFUkJPU0UpCiAgICAgVGhpcyBpcyB0aGUgY2xlYW51cCBob29rIGNvcnJlc3BvbmRpbmcgdG8KICAgICAnVEFSR0VUX1NDSEVEX0lOSVRfR0xPQkFMJy4gIEZJTEUgaXMgZWl0aGVyIGEgbnVsbCBwb2ludGVyLCBvciBhCiAgICAgc3RkaW8gc3RyZWFtIHRvIHdyaXRlIGFueSBkZWJ1ZyBvdXRwdXQgdG8uICBWRVJCT1NFIGlzIHRoZSB2ZXJib3NlCiAgICAgbGV2ZWwgcHJvdmlkZWQgYnkgJy1mc2NoZWQtdmVyYm9zZS1OJy4KCiAtLSBUYXJnZXQgSG9vazogaW50IFRBUkdFVF9TQ0hFRF9ERkFfUFJFX0NZQ0xFX0lOU04gKHZvaWQpCiAgICAgVGhlIGhvb2sgcmV0dXJucyBhbiBSVEwgaW5zbi4gIFRoZSBhdXRvbWF0b24gc3RhdGUgdXNlZCBpbiB0aGUKICAgICBwaXBlbGluZSBoYXphcmQgcmVjb2duaXplciBpcyBjaGFuZ2VkIGFzIGlmIHRoZSBpbnNuIHdlcmUgc2NoZWR1bGVkCiAgICAgd2hlbiB0aGUgbmV3IHNpbXVsYXRlZCBwcm9jZXNzb3IgY3ljbGUgc3RhcnRzLiAgVXNhZ2Ugb2YgdGhlIGhvb2sKICAgICBtYXkgc2ltcGxpZnkgdGhlIGF1dG9tYXRvbiBwaXBlbGluZSBkZXNjcmlwdGlvbiBmb3Igc29tZSBWTElXCiAgICAgcHJvY2Vzc29ycy4gIElmIHRoZSBob29rIGlzIGRlZmluZWQsIGl0IGlzIHVzZWQgb25seSBmb3IgdGhlCiAgICAgYXV0b21hdG9uIGJhc2VkIHBpcGVsaW5lIGRlc2NyaXB0aW9uLiAgVGhlIGRlZmF1bHQgaXMgbm90IHRvIGNoYW5nZQogICAgIHRoZSBzdGF0ZSB3aGVuIHRoZSBuZXcgc2ltdWxhdGVkIHByb2Nlc3NvciBjeWNsZSBzdGFydHMuCgogLS0gVGFyZ2V0IEhvb2s6IHZvaWQgVEFSR0VUX1NDSEVEX0lOSVRfREZBX1BSRV9DWUNMRV9JTlNOICh2b2lkKQogICAgIFRoZSBob29rIGNhbiBiZSB1c2VkIHRvIGluaXRpYWxpemUgZGF0YSB1c2VkIGJ5IHRoZSBwcmV2aW91cyBob29rLgoKIC0tIFRhcmdldCBIb29rOiBpbnQgVEFSR0VUX1NDSEVEX0RGQV9QT1NUX0NZQ0xFX0lOU04gKHZvaWQpCiAgICAgVGhlIGhvb2sgaXMgYW5hbG9nb3VzIHRvICdUQVJHRVRfU0NIRURfREZBX1BSRV9DWUNMRV9JTlNOJyBidXQgdXNlZAogICAgIHRvIGNoYW5nZWQgdGhlIHN0YXRlIGFzIGlmIHRoZSBpbnNuIHdlcmUgc2NoZWR1bGVkIHdoZW4gdGhlIG5ldwogICAgIHNpbXVsYXRlZCBwcm9jZXNzb3IgY3ljbGUgZmluaXNoZXMuCgogLS0gVGFyZ2V0IEhvb2s6IHZvaWQgVEFSR0VUX1NDSEVEX0lOSVRfREZBX1BPU1RfQ1lDTEVfSU5TTiAodm9pZCkKICAgICBUaGUgaG9vayBpcyBhbmFsb2dvdXMgdG8gJ1RBUkdFVF9TQ0hFRF9JTklUX0RGQV9QUkVfQ1lDTEVfSU5TTicgYnV0CiAgICAgdXNlZCB0byBpbml0aWFsaXplIGRhdGEgdXNlZCBieSB0aGUgcHJldmlvdXMgaG9vay4KCiAtLSBUYXJnZXQgSG9vazogdm9pZCBUQVJHRVRfU0NIRURfREZBX1BSRV9DWUNMRV9BRFZBTkNFICh2b2lkKQogICAgIFRoZSBob29rIHRvIG5vdGlmeSB0YXJnZXQgdGhhdCB0aGUgY3VycmVudCBzaW11bGF0ZWQgY3ljbGUgaXMgYWJvdXQKICAgICB0byBmaW5pc2guICBUaGUgaG9vayBpcyBhbmFsb2dvdXMgdG8KICAgICAnVEFSR0VUX1NDSEVEX0RGQV9QUkVfQ1lDTEVfSU5TTicgYnV0IHVzZWQgdG8gY2hhbmdlIHRoZSBzdGF0ZSBpbgogICAgIG1vcmUgY29tcGxpY2F0ZWQgc2l0dWF0aW9ucyAtIGUuZy4sIHdoZW4gYWR2YW5jaW5nIHN0YXRlIG9uIGEKICAgICBzaW5nbGUgaW5zbiBpcyBub3QgZW5vdWdoLgoKIC0tIFRhcmdldCBIb29rOiB2b2lkIFRBUkdFVF9TQ0hFRF9ERkFfUE9TVF9DWUNMRV9BRFZBTkNFICh2b2lkKQogICAgIFRoZSBob29rIHRvIG5vdGlmeSB0YXJnZXQgdGhhdCBuZXcgc2ltdWxhdGVkIGN5Y2xlIGhhcyBqdXN0CiAgICAgc3RhcnRlZC4gIFRoZSBob29rIGlzIGFuYWxvZ291cyB0bwogICAgICdUQVJHRVRfU0NIRURfREZBX1BPU1RfQ1lDTEVfSU5TTicgYnV0IHVzZWQgdG8gY2hhbmdlIHRoZSBzdGF0ZSBpbgogICAgIG1vcmUgY29tcGxpY2F0ZWQgc2l0dWF0aW9ucyAtIGUuZy4sIHdoZW4gYWR2YW5jaW5nIHN0YXRlIG9uIGEKICAgICBzaW5nbGUgaW5zbiBpcyBub3QgZW5vdWdoLgoKIC0tIFRhcmdldCBIb29rOiBpbnQgVEFSR0VUX1NDSEVEX0ZJUlNUX0NZQ0xFX01VTFRJUEFTU19ERkFfTE9PS0FIRUFECiAgICAgICAgICAodm9pZCkKICAgICBUaGlzIGhvb2sgY29udHJvbHMgYmV0dGVyIGNob29zaW5nIGFuIGluc24gZnJvbSB0aGUgcmVhZHkgaW5zbgogICAgIHF1ZXVlIGZvciB0aGUgREZBLWJhc2VkIGluc24gc2NoZWR1bGVyLiAgVXN1YWxseSB0aGUgc2NoZWR1bGVyCiAgICAgY2hvb3NlcyB0aGUgZmlyc3QgaW5zbiBmcm9tIHRoZSBxdWV1ZS4gIElmIHRoZSBob29rIHJldHVybnMgYQogICAgIHBvc2l0aXZlIHZhbHVlLCBhbiBhZGRpdGlvbmFsIHNjaGVkdWxlciBjb2RlIHRyaWVzIGFsbCBwZXJtdXRhdGlvbnMKICAgICBvZiAnVEFSR0VUX1NDSEVEX0ZJUlNUX0NZQ0xFX01VTFRJUEFTU19ERkFfTE9PS0FIRUFEICgpJyBzdWJzZXF1ZW50CiAgICAgcmVhZHkgaW5zbnMgdG8gY2hvb3NlIGFuIGluc24gd2hvc2UgaXNzdWUgd2lsbCByZXN1bHQgaW4gbWF4aW1hbAogICAgIG51bWJlciBvZiBpc3N1ZWQgaW5zbnMgb24gdGhlIHNhbWUgY3ljbGUuICBGb3IgdGhlIFZMSVcgcHJvY2Vzc29yLAogICAgIHRoZSBjb2RlIGNvdWxkIGFjdHVhbGx5IHNvbHZlIHRoZSBwcm9ibGVtIG9mIHBhY2tpbmcgc2ltcGxlIGluc25zCiAgICAgaW50byB0aGUgVkxJVyBpbnNuLiAgT2YgY291cnNlLCBpZiB0aGUgcnVsZXMgb2YgVkxJVyBwYWNraW5nIGFyZQogICAgIGRlc2NyaWJlZCBpbiB0aGUgYXV0b21hdG9uLgoKICAgICBUaGlzIGNvZGUgYWxzbyBjb3VsZCBiZSB1c2VkIGZvciBzdXBlcnNjYWxhciBSSVNDIHByb2Nlc3NvcnMuICBMZXQKICAgICB1cyBjb25zaWRlciBhIHN1cGVyc2NhbGFyIFJJU0MgcHJvY2Vzc29yIHdpdGggMyBwaXBlbGluZXMuICBTb21lCiAgICAgaW5zbnMgY2FuIGJlIGV4ZWN1dGVkIGluIHBpcGVsaW5lcyBBIG9yIEIsIHNvbWUgaW5zbnMgY2FuIGJlCiAgICAgZXhlY3V0ZWQgb25seSBpbiBwaXBlbGluZXMgQiBvciBDLCBhbmQgb25lIGluc24gY2FuIGJlIGV4ZWN1dGVkIGluCiAgICAgcGlwZWxpbmUgQi4gIFRoZSBwcm9jZXNzb3IgbWF5IGlzc3VlIHRoZSAxc3QgaW5zbiBpbnRvIEEgYW5kIHRoZQogICAgIDJuZCBvbmUgaW50byBCLiAgSW4gdGhpcyBjYXNlLCB0aGUgM3JkIGluc24gd2lsbCB3YWl0IGZvciBmcmVlaW5nIEIKICAgICB1bnRpbCB0aGUgbmV4dCBjeWNsZS4gIElmIHRoZSBzY2hlZHVsZXIgaXNzdWVzIHRoZSAzcmQgaW5zbiB0aGUKICAgICBmaXJzdCwgdGhlIHByb2Nlc3NvciBjb3VsZCBpc3N1ZSBhbGwgMyBpbnNucyBwZXIgY3ljbGUuCgogICAgIEFjdHVhbGx5IHRoaXMgY29kZSBkZW1vbnN0cmF0ZXMgYWR2YW50YWdlcyBvZiB0aGUgYXV0b21hdG9uIGJhc2VkCiAgICAgcGlwZWxpbmUgaGF6YXJkIHJlY29nbml6ZXIuICBXZSB0cnkgcXVpY2tseSBhbmQgZWFzeSBtYW55IGluc24KICAgICBzY2hlZHVsZXMgdG8gY2hvb3NlIHRoZSBiZXN0IG9uZS4KCiAgICAgVGhlIGRlZmF1bHQgaXMgbm8gbXVsdGlwYXNzIHNjaGVkdWxpbmcuCgogLS0gVGFyZ2V0IEhvb2s6IGludAogICAgICAgICAgVEFSR0VUX1NDSEVEX0ZJUlNUX0NZQ0xFX01VTFRJUEFTU19ERkFfTE9PS0FIRUFEX0dVQVJEIChydHgpCgogICAgIFRoaXMgaG9vayBjb250cm9scyB3aGF0IGluc25zIGZyb20gdGhlIHJlYWR5IGluc24gcXVldWUgd2lsbCBiZQogICAgIGNvbnNpZGVyZWQgZm9yIHRoZSBtdWx0aXBhc3MgaW5zbiBzY2hlZHVsaW5nLiAgSWYgdGhlIGhvb2sgcmV0dXJucwogICAgIHplcm8gZm9yIGluc24gcGFzc2VkIGFzIHRoZSBwYXJhbWV0ZXIsIHRoZSBpbnNuIHdpbGwgYmUgbm90IGNob3NlbgogICAgIHRvIGJlIGlzc3VlZC4KCiAgICAgVGhlIGRlZmF1bHQgaXMgdGhhdCBhbnkgcmVhZHkgaW5zbnMgY2FuIGJlIGNob3NlbiB0byBiZSBpc3N1ZWQuCgogLS0gVGFyZ2V0IEhvb2s6IGludCBUQVJHRVRfU0NIRURfREZBX05FV19DWUNMRSAoRklMRSAqLCBpbnQsIHJ0eCwgaW50LAogICAgICAgICAgaW50LCBpbnQgKikKCiAgICAgVGhpcyBob29rIGlzIGNhbGxlZCBieSB0aGUgaW5zbiBzY2hlZHVsZXIgYmVmb3JlIGlzc3VpbmcgaW5zbgogICAgIHBhc3NlZCBhcyB0aGUgdGhpcmQgcGFyYW1ldGVyIG9uIGdpdmVuIGN5Y2xlLiAgSWYgdGhlIGhvb2sgcmV0dXJucwogICAgIG5vbnplcm8sIHRoZSBpbnNuIGlzIG5vdCBpc3N1ZWQgb24gZ2l2ZW4gcHJvY2Vzc29ycyBjeWNsZS4gIEluc3RlYWQKICAgICBvZiB0aGF0LCB0aGUgcHJvY2Vzc29yIGN5Y2xlIGlzIGFkdmFuY2VkLiAgSWYgdGhlIHZhbHVlIHBhc3NlZAogICAgIHRocm91Z2ggdGhlIGxhc3QgcGFyYW1ldGVyIGlzIHplcm8sIHRoZSBpbnNuIHJlYWR5IHF1ZXVlIGlzIG5vdAogICAgIHNvcnRlZCBvbiB0aGUgbmV3IGN5Y2xlIHN0YXJ0IGFzIHVzdWFsbHkuICBUaGUgZmlyc3QgcGFyYW1ldGVyCiAgICAgcGFzc2VzIGZpbGUgZm9yIGRlYnVnZ2luZyBvdXRwdXQuICBUaGUgc2Vjb25kIG9uZSBwYXNzZXMgdGhlCiAgICAgc2NoZWR1bGVyIHZlcmJvc2UgbGV2ZWwgb2YgdGhlIGRlYnVnZ2luZyBvdXRwdXQuICBUaGUgZm9ydGggYW5kIHRoZQogICAgIGZpZnRoIHBhcmFtZXRlciB2YWx1ZXMgYXJlIGNvcnJlc3BvbmRpbmdseSBwcm9jZXNzb3IgY3ljbGUgb24gd2hpY2gKICAgICB0aGUgcHJldmlvdXMgaW5zbiBoYXMgYmVlbiBpc3N1ZWQgYW5kIHRoZSBjdXJyZW50IHByb2Nlc3NvciBjeWNsZS4KCiAtLSBUYXJnZXQgSG9vazogYm9vbCBUQVJHRVRfU0NIRURfSVNfQ09TVExZX0RFUEVOREVOQ0UgKHN0cnVjdCBkZXBfZGVmCiAgICAgICAgICAqX0RFUCwgaW50IENPU1QsIGludCBESVNUQU5DRSkKICAgICBUaGlzIGhvb2sgaXMgdXNlZCB0byBkZWZpbmUgd2hpY2ggZGVwZW5kZW5jZXMgYXJlIGNvbnNpZGVyZWQgY29zdGx5CiAgICAgYnkgdGhlIHRhcmdldCwgc28gY29zdGx5IHRoYXQgaXQgaXMgbm90IGFkdmlzYWJsZSB0byBzY2hlZHVsZSB0aGUKICAgICBpbnNucyB0aGF0IGFyZSBpbnZvbHZlZCBpbiB0aGUgZGVwZW5kZW5jZSB0b28gY2xvc2UgdG8gb25lIGFub3RoZXIuCiAgICAgVGhlIHBhcmFtZXRlcnMgdG8gdGhpcyBob29rIGFyZSBhcyBmb2xsb3dzOiBUaGUgZmlyc3QgcGFyYW1ldGVyCiAgICAgX0RFUCBpcyB0aGUgZGVwZW5kZW5jZSBiZWluZyBldmFsdWF0ZWQuICBUaGUgc2Vjb25kIHBhcmFtZXRlciBDT1NUCiAgICAgaXMgdGhlIGNvc3Qgb2YgdGhlIGRlcGVuZGVuY2UsIGFuZCB0aGUgdGhpcmQgcGFyYW1ldGVyIERJU1RBTkNFIGlzCiAgICAgdGhlIGRpc3RhbmNlIGluIGN5Y2xlcyBiZXR3ZWVuIHRoZSB0d28gaW5zbnMuICBUaGUgaG9vayByZXR1cm5zCiAgICAgJ3RydWUnIGlmIGNvbnNpZGVyaW5nIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIHRoZSB0d28gaW5zbnMgdGhlCiAgICAgZGVwZW5kZW5jZSBiZXR3ZWVuIHRoZW0gaXMgY29uc2lkZXJlZCBjb3N0bHkgYnkgdGhlIHRhcmdldCwgYW5kCiAgICAgJ2ZhbHNlJyBvdGhlcndpc2UuCgogICAgIERlZmluaW5nIHRoaXMgaG9vayBjYW4gYmUgdXNlZnVsIGluIG11bHRpcGxlLWlzc3VlIG91dC1vZi1vcmRlcgogICAgIG1hY2hpbmVzLCB3aGVyZSAoYSkgaXQncyBwcmFjdGljYWxseSBob3BlbGVzcyB0byBwcmVkaWN0IHRoZSBhY3R1YWwKICAgICBkYXRhL3Jlc291cmNlIGRlbGF5cywgaG93ZXZlcjogKGIpIHRoZXJlJ3MgYSBiZXR0ZXIgY2hhbmNlIHRvCiAgICAgcHJlZGljdCB0aGUgYWN0dWFsIGdyb3VwaW5nIHRoYXQgd2lsbCBiZSBmb3JtZWQsIGFuZCAoYykgY29ycmVjdGx5CiAgICAgZW11bGF0aW5nIHRoZSBncm91cGluZyBjYW4gYmUgdmVyeSBpbXBvcnRhbnQuICBJbiBzdWNoIHRhcmdldHMgb25lCiAgICAgbWF5IHdhbnQgdG8gYWxsb3cgaXNzdWluZyBkZXBlbmRlbnQgaW5zbnMgY2xvc2VyIHRvIG9uZQogICAgIGFub3RoZXItLWkuZS4sIGNsb3NlciB0aGFuIHRoZSBkZXBlbmRlbmNlIGRpc3RhbmNlOyBob3dldmVyLCBub3QgaW4KICAgICBjYXNlcyBvZiAiY29zdGx5IGRlcGVuZGVuY2VzIiwgd2hpY2ggdGhpcyBob29rcyBhbGxvd3MgdG8gZGVmaW5lLgoKIC0tIFRhcmdldCBIb29rOiB2b2lkIFRBUkdFVF9TQ0hFRF9IX0lfRF9FWFRFTkRFRCAodm9pZCkKICAgICBUaGlzIGhvb2sgaXMgY2FsbGVkIGJ5IHRoZSBpbnNuIHNjaGVkdWxlciBhZnRlciBlbWl0dGluZyBhIG5ldwogICAgIGluc3RydWN0aW9uIHRvIHRoZSBpbnN0cnVjdGlvbiBzdHJlYW0uICBUaGUgaG9vayBub3RpZmllcyBhIHRhcmdldAogICAgIGJhY2tlbmQgdG8gZXh0ZW5kIGl0cyBwZXIgaW5zdHJ1Y3Rpb24gZGF0YSBzdHJ1Y3R1cmVzLgoKIC0tIFRhcmdldCBIb29rOiBpbnQgVEFSR0VUX1NDSEVEX1NQRUNVTEFURV9JTlNOIChydHggSU5TTiwgaW50IFJFUVVFU1QsCiAgICAgICAgICBydHggKk5FV19QQVQpCiAgICAgVGhpcyBob29rIGlzIGNhbGxlZCBieSB0aGUgaW5zbiBzY2hlZHVsZXIgd2hlbiBJTlNOIGhhcyBvbmx5CiAgICAgc3BlY3VsYXRpdmUgZGVwZW5kZW5jaWVzIGFuZCB0aGVyZWZvcmUgY2FuIGJlIHNjaGVkdWxlZAogICAgIHNwZWN1bGF0aXZlbHkuICBUaGUgaG9vayBpcyB1c2VkIHRvIGNoZWNrIGlmIHRoZSBwYXR0ZXJuIG9mIElOU04KICAgICBoYXMgYSBzcGVjdWxhdGl2ZSB2ZXJzaW9uIGFuZCwgaW4gY2FzZSBvZiBzdWNjZXNzZnVsIGNoZWNrLCB0bwogICAgIGdlbmVyYXRlIHRoYXQgc3BlY3VsYXRpdmUgcGF0dGVybi4gIFRoZSBob29rIHNob3VsZCByZXR1cm4gMSwgaWYKICAgICB0aGUgaW5zdHJ1Y3Rpb24gaGFzIGEgc3BlY3VsYXRpdmUgZm9ybSwgb3IgLTEsIGlmIGl0IGRvZXNuJ3QuCiAgICAgUkVRVUVTVCBkZXNjcmliZXMgdGhlIHR5cGUgb2YgcmVxdWVzdGVkIHNwZWN1bGF0aW9uLiAgSWYgdGhlIHJldHVybgogICAgIHZhbHVlIGVxdWFscyAxIHRoZW4gTkVXX1BBVCBpcyBhc3NpZ25lZCB0aGUgZ2VuZXJhdGVkIHNwZWN1bGF0aXZlCiAgICAgcGF0dGVybi4KCiAtLSBUYXJnZXQgSG9vazogaW50IFRBUkdFVF9TQ0hFRF9ORUVEU19CTE9DS19QIChydHggSU5TTikKICAgICBUaGlzIGhvb2sgaXMgY2FsbGVkIGJ5IHRoZSBpbnNuIHNjaGVkdWxlciBkdXJpbmcgZ2VuZXJhdGlvbiBvZgogICAgIHJlY292ZXJ5IGNvZGUgZm9yIElOU04uICBJdCBzaG91bGQgcmV0dXJuIG5vbnplcm8sIGlmIHRoZQogICAgIGNvcnJlc3BvbmRpbmcgY2hlY2sgaW5zdHJ1Y3Rpb24gc2hvdWxkIGJyYW5jaCB0byByZWNvdmVyeSBjb2RlLCBvcgogICAgIHplcm8gb3RoZXJ3aXNlLgoKIC0tIFRhcmdldCBIb29rOiBydHggVEFSR0VUX1NDSEVEX0dFTl9DSEVDSyAocnR4IElOU04sIHJ0eCBMQUJFTCwgaW50CiAgICAgICAgICBNVVRBVEVfUCkKICAgICBUaGlzIGhvb2sgaXMgY2FsbGVkIGJ5IHRoZSBpbnNuIHNjaGVkdWxlciB0byBnZW5lcmF0ZSBhIHBhdHRlcm4gZm9yCiAgICAgcmVjb3ZlcnkgY2hlY2sgaW5zdHJ1Y3Rpb24uICBJZiBNVVRBVEVfUCBpcyB6ZXJvLCB0aGVuIElOU04gaXMgYQogICAgIHNwZWN1bGF0aXZlIGluc3RydWN0aW9uIGZvciB3aGljaCB0aGUgY2hlY2sgc2hvdWxkIGJlIGdlbmVyYXRlZC4KICAgICBMQUJFTCBpcyBlaXRoZXIgYSBsYWJlbCBvZiBhIGJhc2ljIGJsb2NrLCB3aGVyZSByZWNvdmVyeSBjb2RlCiAgICAgc2hvdWxkIGJlIGVtaXR0ZWQsIG9yIGEgbnVsbCBwb2ludGVyLCB3aGVuIHJlcXVlc3RlZCBjaGVjayBkb2Vzbid0CiAgICAgYnJhbmNoIHRvIHJlY292ZXJ5IGNvZGUgKGEgc2ltcGxlIGNoZWNrKS4gIElmIE1VVEFURV9QIGlzIG5vbnplcm8sCiAgICAgdGhlbiBhIHBhdHRlcm4gZm9yIGEgYnJhbmNoeSBjaGVjayBjb3JyZXNwb25kaW5nIHRvIGEgc2ltcGxlIGNoZWNrCiAgICAgZGVub3RlZCBieSBJTlNOIHNob3VsZCBiZSBnZW5lcmF0ZWQuICBJbiB0aGlzIGNhc2UgTEFCRUwgY2FuJ3QgYmUKICAgICBudWxsLgoKIC0tIFRhcmdldCBIb29rOiBpbnQKICAgICAgICAgIFRBUkdFVF9TQ0hFRF9GSVJTVF9DWUNMRV9NVUxUSVBBU1NfREZBX0xPT0tBSEVBRF9HVUFSRF9TUEVDCiAgICAgICAgICAocnR4IElOU04pCiAgICAgVGhpcyBob29rIGlzIHVzZWQgYXMgYSB3b3JrYXJvdW5kIGZvcgogICAgICdUQVJHRVRfU0NIRURfRklSU1RfQ1lDTEVfTVVMVElQQVNTX0RGQV9MT09LQUhFQURfR1VBUkQnIG5vdCBiZWluZwogICAgIGNhbGxlZCBvbiB0aGUgZmlyc3QgaW5zdHJ1Y3Rpb24gb2YgdGhlIHJlYWR5IGxpc3QuICBUaGUgaG9vayBpcwogICAgIHVzZWQgdG8gZGlzY2FyZCBzcGVjdWxhdGl2ZSBpbnN0cnVjdGlvbiB0aGF0IHN0YW5kIGZpcnN0IGluIHRoZQogICAgIHJlYWR5IGxpc3QgZnJvbSBiZWluZyBzY2hlZHVsZWQgb24gdGhlIGN1cnJlbnQgY3ljbGUuICBGb3IKICAgICBub24tc3BlY3VsYXRpdmUgaW5zdHJ1Y3Rpb25zLCB0aGUgaG9vayBzaG91bGQgYWx3YXlzIHJldHVybgogICAgIG5vbnplcm8uICBGb3IgZXhhbXBsZSwgaW4gdGhlIGlhNjQgYmFja2VuZCB0aGUgaG9vayBpcyB1c2VkIHRvCiAgICAgY2FuY2VsIGRhdGEgc3BlY3VsYXRpdmUgaW5zbnMgd2hlbiB0aGUgQUxBVCB0YWJsZSBpcyBuZWFybHkgZnVsbC4KCiAtLSBUYXJnZXQgSG9vazogdm9pZCBUQVJHRVRfU0NIRURfU0VUX1NDSEVEX0ZMQUdTICh1bnNpZ25lZCBpbnQgKkZMQUdTLAogICAgICAgICAgc3BlY19pbmZvX3QgU1BFQ19JTkZPKQogICAgIFRoaXMgaG9vayBpcyB1c2VkIGJ5IHRoZSBpbnNuIHNjaGVkdWxlciB0byBmaW5kIG91dCB3aGF0IGZlYXR1cmVzCiAgICAgc2hvdWxkIGJlIGVuYWJsZWQvdXNlZC4gIEZMQUdTIGluaXRpYWxseSBtYXkgaGF2ZSBlaXRoZXIgdGhlCiAgICAgU0NIRURfUkdOIG9yIFNDSEVEX0VCQiBiaXQgc2V0LiAgVGhpcyBkZW5vdGVzIHRoZSBzY2hlZHVsZXIgcGFzcwogICAgIGZvciB3aGljaCB0aGUgZGF0YSBzaG91bGQgYmUgcHJvdmlkZWQuICBUaGUgdGFyZ2V0IGJhY2tlbmQgc2hvdWxkCiAgICAgbW9kaWZ5IEZMQUdTIGJ5IG1vZGlmeWluZyB0aGUgYml0cyBjb3JyZXNwb25kaW5nIHRvIHRoZSBmb2xsb3dpbmcKICAgICBmZWF0dXJlczogVVNFX0RFUFNfTElTVCwgVVNFX0dMQVQsIERFVEFDSF9MSUZFX0lORk8sIGFuZAogICAgIERPX1NQRUNVTEFUSU9OLiAgRm9yIHRoZSBET19TUEVDVUxBVElPTiBmZWF0dXJlIGFuIGFkZGl0aW9uYWwKICAgICBzdHJ1Y3R1cmUgU1BFQ19JTkZPIHNob3VsZCBiZSBmaWxsZWQgYnkgdGhlIHRhcmdldC4gIFRoZSBzdHJ1Y3R1cmUKICAgICBkZXNjcmliZXMgc3BlY3VsYXRpb24gdHlwZXMgdGhhdCBjYW4gYmUgdXNlZCBpbiB0aGUgc2NoZWR1bGVyLgoKIC0tIFRhcmdldCBIb29rOiBpbnQgVEFSR0VUX1NDSEVEX1NNU19SRVNfTUlJIChzdHJ1Y3QgZGRnICpHKQogICAgIFRoaXMgaG9vayBpcyBjYWxsZWQgYnkgdGhlIHN3aW5nIG1vZHVsbyBzY2hlZHVsZXIgdG8gY2FsY3VsYXRlIGEKICAgICByZXNvdXJjZS1iYXNlZCBsb3dlciBib3VuZCB3aGljaCBpcyBiYXNlZCBvbiB0aGUgcmVzb3VyY2VzCiAgICAgYXZhaWxhYmxlIGluIHRoZSBtYWNoaW5lIGFuZCB0aGUgcmVzb3VyY2VzIHJlcXVpcmVkIGJ5IGVhY2gKICAgICBpbnN0cnVjdGlvbi4gIFRoZSB0YXJnZXQgYmFja2VuZCBjYW4gdXNlIEcgdG8gY2FsY3VsYXRlIHN1Y2ggYm91bmQuCiAgICAgQSB2ZXJ5IHNpbXBsZSBsb3dlciBib3VuZCB3aWxsIGJlIHVzZWQgaW4gY2FzZSB0aGlzIGhvb2sgaXMgbm90CiAgICAgaW1wbGVtZW50ZWQ6IHRoZSB0b3RhbCBudW1iZXIgb2YgaW5zdHJ1Y3Rpb25zIGRpdmlkZWQgYnkgdGhlIGlzc3VlCiAgICAgcmF0ZS4KCh8KRmlsZTogZ2NjaW50LmluZm8sICBOb2RlOiBTZWN0aW9ucywgIE5leHQ6IFBJQywgIFByZXY6IFNjaGVkdWxpbmcsICBVcDogVGFyZ2V0IE1hY3JvcwoKMTUuMTkgRGl2aWRpbmcgdGhlIE91dHB1dCBpbnRvIFNlY3Rpb25zIChUZXh0cywgRGF0YSwgLi4uKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpBbiBvYmplY3QgZmlsZSBpcyBkaXZpZGVkIGludG8gc2VjdGlvbnMgY29udGFpbmluZyBkaWZmZXJlbnQgdHlwZXMgb2YKZGF0YS4gIEluIHRoZSBtb3N0IGNvbW1vbiBjYXNlLCB0aGVyZSBhcmUgdGhyZWUgc2VjdGlvbnM6IHRoZSAidGV4dApzZWN0aW9uIiwgd2hpY2ggaG9sZHMgaW5zdHJ1Y3Rpb25zIGFuZCByZWFkLW9ubHkgZGF0YTsgdGhlICJkYXRhCnNlY3Rpb24iLCB3aGljaCBob2xkcyBpbml0aWFsaXplZCB3cml0YWJsZSBkYXRhOyBhbmQgdGhlICJic3Mgc2VjdGlvbiIsCndoaWNoIGhvbGRzIHVuaW5pdGlhbGl6ZWQgZGF0YS4gIFNvbWUgc3lzdGVtcyBoYXZlIG90aGVyIGtpbmRzIG9mCnNlY3Rpb25zLgoKICd2YXJhc20uYycgcHJvdmlkZXMgc2V2ZXJhbCB3ZWxsLWtub3duIHNlY3Rpb25zLCBzdWNoIGFzCid0ZXh0X3NlY3Rpb24nLCAnZGF0YV9zZWN0aW9uJyBhbmQgJ2Jzc19zZWN0aW9uJy4gIFRoZSBub3JtYWwgd2F5IG9mCmNvbnRyb2xsaW5nIGEgJ0ZPT19zZWN0aW9uJyB2YXJpYWJsZSBpcyB0byBkZWZpbmUgdGhlIGFzc29jaWF0ZWQKJ0ZPT19TRUNUSU9OX0FTTV9PUCcgbWFjcm8sIGFzIGRlc2NyaWJlZCBiZWxvdy4gIFRoZSBtYWNyb3MgYXJlIG9ubHkKcmVhZCBvbmNlLCB3aGVuICd2YXJhc20uYycgaW5pdGlhbGl6ZXMgaXRzZWxmLCBzbyB0aGVpciB2YWx1ZXMgbXVzdCBiZQpydW4tdGltZSBjb25zdGFudHMuICBUaGV5IG1heSBob3dldmVyIGRlcGVuZCBvbiBjb21tYW5kLWxpbmUgZmxhZ3MuCgogX05vdGU6XyBTb21lIHJ1bi10aW1lIGZpbGVzLCBzdWNoICdjcnRzdHVmZi5jJywgYWxzbyBtYWtlIHVzZSBvZiB0aGUKJ0ZPT19TRUNUSU9OX0FTTV9PUCcgbWFjcm9zLCBhbmQgZXhwZWN0IHRoZW0gdG8gYmUgc3RyaW5nIGxpdGVyYWxzLgoKIFNvbWUgYXNzZW1ibGVycyByZXF1aXJlIGEgZGlmZmVyZW50IHN0cmluZyB0byBiZSB3cml0dGVuIGV2ZXJ5IHRpbWUgYQpzZWN0aW9uIGlzIHNlbGVjdGVkLiAgSWYgeW91ciBhc3NlbWJsZXIgZmFsbHMgaW50byB0aGlzIGNhdGVnb3J5LCB5b3UKc2hvdWxkIGRlZmluZSB0aGUgJ1RBUkdFVF9BU01fSU5JVF9TRUNUSU9OUycgaG9vayBhbmQgdXNlCidnZXRfdW5uYW1lZF9zZWN0aW9uJyB0byBzZXQgdXAgdGhlIHNlY3Rpb25zLgoKIFlvdSBtdXN0IGFsd2F5cyBjcmVhdGUgYSAndGV4dF9zZWN0aW9uJywgZWl0aGVyIGJ5IGRlZmluaW5nCidURVhUX1NFQ1RJT05fQVNNX09QJyBvciBieSBpbml0aWFsaXppbmcgJ3RleHRfc2VjdGlvbicgaW4KJ1RBUkdFVF9BU01fSU5JVF9TRUNUSU9OUycuICBUaGUgc2FtZSBpcyB0cnVlIG9mICdkYXRhX3NlY3Rpb24nIGFuZAonREFUQV9TRUNUSU9OX0FTTV9PUCcuICBJZiB5b3UgZG8gbm90IGNyZWF0ZSBhIGRpc3RpbmN0CidyZWFkb25seV9kYXRhX3NlY3Rpb24nLCB0aGUgZGVmYXVsdCBpcyB0byByZXVzZSAndGV4dF9zZWN0aW9uJy4KCiBBbGwgdGhlIG90aGVyICd2YXJhc20uYycgc2VjdGlvbnMgYXJlIG9wdGlvbmFsLCBhbmQgYXJlIG51bGwgaWYgdGhlCnRhcmdldCBkb2VzIG5vdCBwcm92aWRlIHRoZW0uCgogLS0gTWFjcm86IFRFWFRfU0VDVElPTl9BU01fT1AKICAgICBBIEMgZXhwcmVzc2lvbiB3aG9zZSB2YWx1ZSBpcyBhIHN0cmluZywgaW5jbHVkaW5nIHNwYWNpbmcsCiAgICAgY29udGFpbmluZyB0aGUgYXNzZW1ibGVyIG9wZXJhdGlvbiB0aGF0IHNob3VsZCBwcmVjZWRlIGluc3RydWN0aW9ucwogICAgIGFuZCByZWFkLW9ubHkgZGF0YS4gIE5vcm1hbGx5ICciXHQudGV4dCInIGlzIHJpZ2h0LgoKIC0tIE1hY3JvOiBIT1RfVEVYVF9TRUNUSU9OX05BTUUKICAgICBJZiBkZWZpbmVkLCBhIEMgc3RyaW5nIGNvbnN0YW50IGZvciB0aGUgbmFtZSBvZiB0aGUgc2VjdGlvbgogICAgIGNvbnRhaW5pbmcgbW9zdCBmcmVxdWVudGx5IGV4ZWN1dGVkIGZ1bmN0aW9ucyBvZiB0aGUgcHJvZ3JhbS4gIElmCiAgICAgbm90IGRlZmluZWQsIEdDQyB3aWxsIHByb3ZpZGUgYSBkZWZhdWx0IGRlZmluaXRpb24gaWYgdGhlIHRhcmdldAogICAgIHN1cHBvcnRzIG5hbWVkIHNlY3Rpb25zLgoKIC0tIE1hY3JvOiBVTkxJS0VMWV9FWEVDVVRFRF9URVhUX1NFQ1RJT05fTkFNRQogICAgIElmIGRlZmluZWQsIGEgQyBzdHJpbmcgY29uc3RhbnQgZm9yIHRoZSBuYW1lIG9mIHRoZSBzZWN0aW9uCiAgICAgY29udGFpbmluZyB1bmxpa2VseSBleGVjdXRlZCBmdW5jdGlvbnMgaW4gdGhlIHByb2dyYW0uCgogLS0gTWFjcm86IERBVEFfU0VDVElPTl9BU01fT1AKICAgICBBIEMgZXhwcmVzc2lvbiB3aG9zZSB2YWx1ZSBpcyBhIHN0cmluZywgaW5jbHVkaW5nIHNwYWNpbmcsCiAgICAgY29udGFpbmluZyB0aGUgYXNzZW1ibGVyIG9wZXJhdGlvbiB0byBpZGVudGlmeSB0aGUgZm9sbG93aW5nIGRhdGEKICAgICBhcyB3cml0YWJsZSBpbml0aWFsaXplZCBkYXRhLiAgTm9ybWFsbHkgJyJcdC5kYXRhIicgaXMgcmlnaHQuCgogLS0gTWFjcm86IFNEQVRBX1NFQ1RJT05fQVNNX09QCiAgICAgSWYgZGVmaW5lZCwgYSBDIGV4cHJlc3Npb24gd2hvc2UgdmFsdWUgaXMgYSBzdHJpbmcsIGluY2x1ZGluZwogICAgIHNwYWNpbmcsIGNvbnRhaW5pbmcgdGhlIGFzc2VtYmxlciBvcGVyYXRpb24gdG8gaWRlbnRpZnkgdGhlCiAgICAgZm9sbG93aW5nIGRhdGEgYXMgaW5pdGlhbGl6ZWQsIHdyaXRhYmxlIHNtYWxsIGRhdGEuCgogLS0gTWFjcm86IFJFQURPTkxZX0RBVEFfU0VDVElPTl9BU01fT1AKICAgICBBIEMgZXhwcmVzc2lvbiB3aG9zZSB2YWx1ZSBpcyBhIHN0cmluZywgaW5jbHVkaW5nIHNwYWNpbmcsCiAgICAgY29udGFpbmluZyB0aGUgYXNzZW1ibGVyIG9wZXJhdGlvbiB0byBpZGVudGlmeSB0aGUgZm9sbG93aW5nIGRhdGEKICAgICBhcyByZWFkLW9ubHkgaW5pdGlhbGl6ZWQgZGF0YS4KCiAtLSBNYWNybzogQlNTX1NFQ1RJT05fQVNNX09QCiAgICAgSWYgZGVmaW5lZCwgYSBDIGV4cHJlc3Npb24gd2hvc2UgdmFsdWUgaXMgYSBzdHJpbmcsIGluY2x1ZGluZwogICAgIHNwYWNpbmcsIGNvbnRhaW5pbmcgdGhlIGFzc2VtYmxlciBvcGVyYXRpb24gdG8gaWRlbnRpZnkgdGhlCiAgICAgZm9sbG93aW5nIGRhdGEgYXMgdW5pbml0aWFsaXplZCBnbG9iYWwgZGF0YS4gIElmIG5vdCBkZWZpbmVkLCBhbmQKICAgICBuZWl0aGVyICdBU01fT1VUUFVUX0JTUycgbm9yICdBU01fT1VUUFVUX0FMSUdORURfQlNTJyBhcmUgZGVmaW5lZCwKICAgICB1bmluaXRpYWxpemVkIGdsb2JhbCBkYXRhIHdpbGwgYmUgb3V0cHV0IGluIHRoZSBkYXRhIHNlY3Rpb24gaWYKICAgICAnLWZuby1jb21tb24nIGlzIHBhc3NlZCwgb3RoZXJ3aXNlICdBU01fT1VUUFVUX0NPTU1PTicgd2lsbCBiZQogICAgIHVzZWQuCgogLS0gTWFjcm86IFNCU1NfU0VDVElPTl9BU01fT1AKICAgICBJZiBkZWZpbmVkLCBhIEMgZXhwcmVzc2lvbiB3aG9zZSB2YWx1ZSBpcyBhIHN0cmluZywgaW5jbHVkaW5nCiAgICAgc3BhY2luZywgY29udGFpbmluZyB0aGUgYXNzZW1ibGVyIG9wZXJhdGlvbiB0byBpZGVudGlmeSB0aGUKICAgICBmb2xsb3dpbmcgZGF0YSBhcyB1bmluaXRpYWxpemVkLCB3cml0YWJsZSBzbWFsbCBkYXRhLgoKIC0tIE1hY3JvOiBJTklUX1NFQ1RJT05fQVNNX09QCiAgICAgSWYgZGVmaW5lZCwgYSBDIGV4cHJlc3Npb24gd2hvc2UgdmFsdWUgaXMgYSBzdHJpbmcsIGluY2x1ZGluZwogICAgIHNwYWNpbmcsIGNvbnRhaW5pbmcgdGhlIGFzc2VtYmxlciBvcGVyYXRpb24gdG8gaWRlbnRpZnkgdGhlCiAgICAgZm9sbG93aW5nIGRhdGEgYXMgaW5pdGlhbGl6YXRpb24gY29kZS4gIElmIG5vdCBkZWZpbmVkLCBHQ0Mgd2lsbAogICAgIGFzc3VtZSBzdWNoIGEgc2VjdGlvbiBkb2VzIG5vdCBleGlzdC4gIFRoaXMgc2VjdGlvbiBoYXMgbm8KICAgICBjb3JyZXNwb25kaW5nICdpbml0X3NlY3Rpb24nIHZhcmlhYmxlOyBpdCBpcyB1c2VkIGVudGlyZWx5IGluCiAgICAgcnVudGltZSBjb2RlLgoKIC0tIE1hY3JvOiBGSU5JX1NFQ1RJT05fQVNNX09QCiAgICAgSWYgZGVmaW5lZCwgYSBDIGV4cHJlc3Npb24gd2hvc2UgdmFsdWUgaXMgYSBzdHJpbmcsIGluY2x1ZGluZwogICAgIHNwYWNpbmcsIGNvbnRhaW5pbmcgdGhlIGFzc2VtYmxlciBvcGVyYXRpb24gdG8gaWRlbnRpZnkgdGhlCiAgICAgZm9sbG93aW5nIGRhdGEgYXMgZmluYWxpemF0aW9uIGNvZGUuICBJZiBub3QgZGVmaW5lZCwgR0NDIHdpbGwKICAgICBhc3N1bWUgc3VjaCBhIHNlY3Rpb24gZG9lcyBub3QgZXhpc3QuICBUaGlzIHNlY3Rpb24gaGFzIG5vCiAgICAgY29ycmVzcG9uZGluZyAnZmluaV9zZWN0aW9uJyB2YXJpYWJsZTsgaXQgaXMgdXNlZCBlbnRpcmVseSBpbgogICAgIHJ1bnRpbWUgY29kZS4KCiAtLSBNYWNybzogSU5JVF9BUlJBWV9TRUNUSU9OX0FTTV9PUAogICAgIElmIGRlZmluZWQsIGEgQyBleHByZXNzaW9uIHdob3NlIHZhbHVlIGlzIGEgc3RyaW5nLCBpbmNsdWRpbmcKICAgICBzcGFjaW5nLCBjb250YWluaW5nIHRoZSBhc3NlbWJsZXIgb3BlcmF0aW9uIHRvIGlkZW50aWZ5IHRoZQogICAgIGZvbGxvd2luZyBkYXRhIGFzIHBhcnQgb2YgdGhlICcuaW5pdF9hcnJheScgKG9yIGVxdWl2YWxlbnQpCiAgICAgc2VjdGlvbi4gIElmIG5vdCBkZWZpbmVkLCBHQ0Mgd2lsbCBhc3N1bWUgc3VjaCBhIHNlY3Rpb24gZG9lcyBub3QKICAgICBleGlzdC4gIERvIG5vdCBkZWZpbmUgYm90aCB0aGlzIG1hY3JvIGFuZCAnSU5JVF9TRUNUSU9OX0FTTV9PUCcuCgogLS0gTWFjcm86IEZJTklfQVJSQVlfU0VDVElPTl9BU01fT1AKICAgICBJZiBkZWZpbmVkLCBhIEMgZXhwcmVzc2lvbiB3aG9zZSB2YWx1ZSBpcyBhIHN0cmluZywgaW5jbHVkaW5nCiAgICAgc3BhY2luZywgY29udGFpbmluZyB0aGUgYXNzZW1ibGVyIG9wZXJhdGlvbiB0byBpZGVudGlmeSB0aGUKICAgICBmb2xsb3dpbmcgZGF0YSBhcyBwYXJ0IG9mIHRoZSAnLmZpbmlfYXJyYXknIChvciBlcXVpdmFsZW50KQogICAgIHNlY3Rpb24uICBJZiBub3QgZGVmaW5lZCwgR0NDIHdpbGwgYXNzdW1lIHN1Y2ggYSBzZWN0aW9uIGRvZXMgbm90CiAgICAgZXhpc3QuICBEbyBub3QgZGVmaW5lIGJvdGggdGhpcyBtYWNybyBhbmQgJ0ZJTklfU0VDVElPTl9BU01fT1AnLgoKIC0tIE1hY3JvOiBDUlRfQ0FMTF9TVEFUSUNfRlVOQ1RJT04gKFNFQ1RJT05fT1AsIEZVTkNUSU9OKQogICAgIElmIGRlZmluZWQsIGFuIEFTTSBzdGF0ZW1lbnQgdGhhdCBzd2l0Y2hlcyB0byBhIGRpZmZlcmVudCBzZWN0aW9uCiAgICAgdmlhIFNFQ1RJT05fT1AsIGNhbGxzIEZVTkNUSU9OLCBhbmQgc3dpdGNoZXMgYmFjayB0byB0aGUgdGV4dAogICAgIHNlY3Rpb24uICBUaGlzIGlzIHVzZWQgaW4gJ2NydHN0dWZmLmMnIGlmICdJTklUX1NFQ1RJT05fQVNNX09QJyBvcgogICAgICdGSU5JX1NFQ1RJT05fQVNNX09QJyB0byBjYWxscyB0byBpbml0aWFsaXphdGlvbiBhbmQgZmluYWxpemF0aW9uCiAgICAgZnVuY3Rpb25zIGZyb20gdGhlIGluaXQgYW5kIGZpbmkgc2VjdGlvbnMuICBCeSBkZWZhdWx0LCB0aGlzIG1hY3JvCiAgICAgdXNlcyBhIHNpbXBsZSBmdW5jdGlvbiBjYWxsLiAgU29tZSBwb3J0cyBuZWVkIGhhbmQtY3JhZnRlZCBhc3NlbWJseQogICAgIGNvZGUgdG8gYXZvaWQgZGVwZW5kZW5jaWVzIG9uIHJlZ2lzdGVycyBpbml0aWFsaXplZCBpbiB0aGUgZnVuY3Rpb24KICAgICBwcm9sb2d1ZSBvciB0byBlbnN1cmUgdGhhdCBjb25zdGFudCBwb29scyBkb24ndCBlbmQgdXAgdG9vIGZhciB3YXkKICAgICBpbiB0aGUgdGV4dCBzZWN0aW9uLgoKIC0tIE1hY3JvOiBUQVJHRVRfTElCR0NDX1NEQVRBX1NFQ1RJT04KICAgICBJZiBkZWZpbmVkLCBhIHN0cmluZyB3aGljaCBuYW1lcyB0aGUgc2VjdGlvbiBpbnRvIHdoaWNoIHNtYWxsCiAgICAgdmFyaWFibGVzIGRlZmluZWQgaW4gY3J0c3R1ZmYgYW5kIGxpYmdjYyBzaG91bGQgZ28uICBUaGlzIGlzIHVzZWZ1bAogICAgIHdoZW4gdGhlIHRhcmdldCBoYXMgb3B0aW9ucyBmb3Igb3B0aW1pemluZyBhY2Nlc3MgdG8gc21hbGwgZGF0YSwKICAgICBhbmQgeW91IHdhbnQgdGhlIGNydHN0dWZmIGFuZCBsaWJnY2Mgcm91dGluZXMgdG8gYmUgY29uc2VydmF0aXZlIGluCiAgICAgd2hhdCB0aGV5IGV4cGVjdCBvZiB5b3VyIGFwcGxpY2F0aW9uIHlldCBsaWJlcmFsIGluIHdoYXQgeW91cgogICAgIGFwcGxpY2F0aW9uIGV4cGVjdHMuICBGb3IgZXhhbXBsZSwgZm9yIHRhcmdldHMgd2l0aCBhICcuc2RhdGEnCiAgICAgc2VjdGlvbiAobGlrZSBNSVBTKSwgeW91IGNvdWxkIGNvbXBpbGUgY3J0c3R1ZmYgd2l0aCAnLUcgMCcgc28gdGhhdAogICAgIGl0IGRvZXNuJ3QgcmVxdWlyZSBzbWFsbCBkYXRhIHN1cHBvcnQgZnJvbSB5b3VyIGFwcGxpY2F0aW9uLCBidXQKICAgICB1c2UgdGhpcyBtYWNybyB0byBwdXQgc21hbGwgZGF0YSBpbnRvICcuc2RhdGEnIHNvIHRoYXQgeW91cgogICAgIGFwcGxpY2F0aW9uIGNhbiBhY2Nlc3MgdGhlc2UgdmFyaWFibGVzIHdoZXRoZXIgaXQgdXNlcyBzbWFsbCBkYXRhCiAgICAgb3Igbm90LgoKIC0tIE1hY3JvOiBGT1JDRV9DT0RFX1NFQ1RJT05fQUxJR04KICAgICBJZiBkZWZpbmVkLCBhbiBBU00gc3RhdGVtZW50IHRoYXQgYWxpZ25zIGEgY29kZSBzZWN0aW9uIHRvIHNvbWUKICAgICBhcmJpdHJhcnkgYm91bmRhcnkuICBUaGlzIGlzIHVzZWQgdG8gZm9yY2UgYWxsIGZyYWdtZW50cyBvZiB0aGUKICAgICAnLmluaXQnIGFuZCAnLmZpbmknIHNlY3Rpb25zIHRvIGhhdmUgdG8gc2FtZSBhbGlnbm1lbnQgYW5kIHRodXMKICAgICBwcmV2ZW50IHRoZSBsaW5rZXIgZnJvbSBoYXZpbmcgdG8gYWRkIGFueSBwYWRkaW5nLgoKIC0tIE1hY3JvOiBKVU1QX1RBQkxFU19JTl9URVhUX1NFQ1RJT04KICAgICBEZWZpbmUgdGhpcyBtYWNybyB0byBiZSBhbiBleHByZXNzaW9uIHdpdGggYSBub256ZXJvIHZhbHVlIGlmIGp1bXAKICAgICB0YWJsZXMgKGZvciAndGFibGVqdW1wJyBpbnNucykgc2hvdWxkIGJlIG91dHB1dCBpbiB0aGUgdGV4dAogICAgIHNlY3Rpb24sIGFsb25nIHdpdGggdGhlIGFzc2VtYmxlciBpbnN0cnVjdGlvbnMuICBPdGhlcndpc2UsIHRoZQogICAgIHJlYWRvbmx5IGRhdGEgc2VjdGlvbiBpcyB1c2VkLgoKICAgICBUaGlzIG1hY3JvIGlzIGlycmVsZXZhbnQgaWYgdGhlcmUgaXMgbm8gc2VwYXJhdGUgcmVhZG9ubHkgZGF0YQogICAgIHNlY3Rpb24uCgogLS0gVGFyZ2V0IEhvb2s6IHZvaWQgVEFSR0VUX0FTTV9JTklUX1NFQ1RJT05TICh2b2lkKQogICAgIERlZmluZSB0aGlzIGhvb2sgaWYgeW91IG5lZWQgdG8gZG8gc29tZXRoaW5nIHNwZWNpYWwgdG8gc2V0IHVwIHRoZQogICAgICd2YXJhc20uYycgc2VjdGlvbnMsIG9yIGlmIHlvdXIgdGFyZ2V0IGhhcyBzb21lIHNwZWNpYWwgc2VjdGlvbnMgb2YKICAgICBpdHMgb3duIHRoYXQgeW91IG5lZWQgdG8gY3JlYXRlLgoKICAgICBHQ0MgY2FsbHMgdGhpcyBob29rIGFmdGVyIHByb2Nlc3NpbmcgdGhlIGNvbW1hbmQgbGluZSwgYnV0IGJlZm9yZQogICAgIHdyaXRpbmcgYW55IGFzc2VtYmx5IGNvZGUsIGFuZCBiZWZvcmUgY2FsbGluZyBhbnkgb2YgdGhlCiAgICAgc2VjdGlvbi1yZXR1cm5pbmcgaG9va3MgZGVzY3JpYmVkIGJlbG93LgoKIC0tIFRhcmdldCBIb29rOiBUQVJHRVRfQVNNX1JFTE9DX1JXX01BU0sgKHZvaWQpCiAgICAgUmV0dXJuIGEgbWFzayBkZXNjcmliaW5nIGhvdyByZWxvY2F0aW9ucyBzaG91bGQgYmUgdHJlYXRlZCB3aGVuCiAgICAgc2VsZWN0aW5nIHNlY3Rpb25zLiAgQml0IDEgc2hvdWxkIGJlIHNldCBpZiBnbG9iYWwgcmVsb2NhdGlvbnMKICAgICBzaG91bGQgYmUgcGxhY2VkIGluIGEgcmVhZC13cml0ZSBzZWN0aW9uOyBiaXQgMCBzaG91bGQgYmUgc2V0IGlmCiAgICAgbG9jYWwgcmVsb2NhdGlvbnMgc2hvdWxkIGJlIHBsYWNlZCBpbiBhIHJlYWQtd3JpdGUgc2VjdGlvbi4KCiAgICAgVGhlIGRlZmF1bHQgdmVyc2lvbiBvZiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgMyB3aGVuICctZnBpYycgaXMgaW4KICAgICBlZmZlY3QsIGFuZCAwIG90aGVyd2lzZS4gIFRoZSBob29rIGlzIHR5cGljYWxseSByZWRlZmluZWQgd2hlbiB0aGUKICAgICB0YXJnZXQgY2Fubm90IHN1cHBvcnQgKHNvbWUga2luZHMgb2YpIGR5bmFtaWMgcmVsb2NhdGlvbnMgaW4KICAgICByZWFkLW9ubHkgc2VjdGlvbnMgZXZlbiBpbiBleGVjdXRhYmxlcy4KCiAtLSBUYXJnZXQgSG9vazogc2VjdGlvbiAqIFRBUkdFVF9BU01fU0VMRUNUX1NFQ1RJT04gKHRyZWUgRVhQLCBpbnQKICAgICAgICAgIFJFTE9DLCB1bnNpZ25lZCBIT1NUX1dJREVfSU5UIEFMSUdOKQogICAgIFJldHVybiB0aGUgc2VjdGlvbiBpbnRvIHdoaWNoIEVYUCBzaG91bGQgYmUgcGxhY2VkLiAgWW91IGNhbiBhc3N1bWUKICAgICB0aGF0IEVYUCBpcyBlaXRoZXIgYSAnVkFSX0RFQ0wnIG5vZGUgb3IgYSBjb25zdGFudCBvZiBzb21lIHNvcnQuCiAgICAgUkVMT0MgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGluaXRpYWwgdmFsdWUgb2YgRVhQIHJlcXVpcmVzIGxpbmstdGltZQogICAgIHJlbG9jYXRpb25zLiAgQml0IDAgaXMgc2V0IHdoZW4gdmFyaWFibGUgY29udGFpbnMgbG9jYWwgcmVsb2NhdGlvbnMKICAgICBvbmx5LCB3aGlsZSBiaXQgMSBpcyBzZXQgZm9yIGdsb2JhbCByZWxvY2F0aW9ucy4gIEFMSUdOIGlzIHRoZQogICAgIGNvbnN0YW50IGFsaWdubWVudCBpbiBiaXRzLgoKICAgICBUaGUgZGVmYXVsdCB2ZXJzaW9uIG9mIHRoaXMgZnVuY3Rpb24gdGFrZXMgY2FyZSBvZiBwdXR0aW5nCiAgICAgcmVhZC1vbmx5IHZhcmlhYmxlcyBpbiAncmVhZG9ubHlfZGF0YV9zZWN0aW9uJy4KCiAgICAgU2VlIGFsc28gVVNFX1NFTEVDVF9TRUNUSU9OX0ZPUl9GVU5DVElPTlMuCgogLS0gTWFjcm86IFVTRV9TRUxFQ1RfU0VDVElPTl9GT1JfRlVOQ1RJT05TCiAgICAgRGVmaW5lIHRoaXMgbWFjcm8gaWYgeW91IHdpc2ggVEFSR0VUX0FTTV9TRUxFQ1RfU0VDVElPTiB0byBiZQogICAgIGNhbGxlZCBmb3IgJ0ZVTkNUSU9OX0RFQ0wncyBhcyB3ZWxsIGFzIGZvciB2YXJpYWJsZXMgYW5kIGNvbnN0YW50cy4KCiAgICAgSW4gdGhlIGNhc2Ugb2YgYSAnRlVOQ1RJT05fREVDTCcsIFJFTE9DIHdpbGwgYmUgemVybyBpZiB0aGUKICAgICBmdW5jdGlvbiBoYXMgYmVlbiBkZXRlcm1pbmVkIHRvIGJlIGxpa2VseSB0byBiZSBjYWxsZWQsIGFuZCBub256ZXJvCiAgICAgaWYgaXQgaXMgdW5saWtlbHkgdG8gYmUgY2FsbGVkLgoKIC0tIFRhcmdldCBIb29rOiB2b2lkIFRBUkdFVF9BU01fVU5JUVVFX1NFQ1RJT04gKHRyZWUgREVDTCwgaW50IFJFTE9DKQogICAgIEJ1aWxkIHVwIGEgdW5pcXVlIHNlY3Rpb24gbmFtZSwgZXhwcmVzc2VkIGFzIGEgJ1NUUklOR19DU1QnIG5vZGUsCiAgICAgYW5kIGFzc2lnbiBpdCB0byAnREVDTF9TRUNUSU9OX05BTUUgKERFQ0wpJy4gIEFzIHdpdGgKICAgICAnVEFSR0VUX0FTTV9TRUxFQ1RfU0VDVElPTicsIFJFTE9DIGluZGljYXRlcyB3aGV0aGVyIHRoZSBpbml0aWFsCiAgICAgdmFsdWUgb2YgRVhQIHJlcXVpcmVzIGxpbmstdGltZSByZWxvY2F0aW9ucy4KCiAgICAgVGhlIGRlZmF1bHQgdmVyc2lvbiBvZiB0aGlzIGZ1bmN0aW9uIGFwcGVuZHMgdGhlIHN5bWJvbCBuYW1lIHRvIHRoZQogICAgIEVMRiBzZWN0aW9uIG5hbWUgdGhhdCB3b3VsZCBub3JtYWxseSBiZSB1c2VkIGZvciB0aGUgc3ltYm9sLiAgRm9yCiAgICAgZXhhbXBsZSwgdGhlIGZ1bmN0aW9uICdmb28nIHdvdWxkIGJlIHBsYWNlZCBpbiAnLnRleHQuZm9vJy4KICAgICBXaGF0ZXZlciB0aGUgYWN0dWFsIHRhcmdldCBvYmplY3QgZm9ybWF0LCB0aGlzIGlzIG9mdGVuIGdvb2QKICAgICBlbm91Z2guCgogLS0gVGFyZ2V0IEhvb2s6IHNlY3Rpb24gKiBUQVJHRVRfQVNNX0ZVTkNUSU9OX1JPREFUQV9TRUNUSU9OICh0cmVlCiAgICAgICAgICBERUNMKQogICAgIFJldHVybiB0aGUgcmVhZG9ubHkgZGF0YSBzZWN0aW9uIGFzc29jaWF0ZWQgd2l0aCAnREVDTF9TRUNUSU9OX05BTUUKICAgICAoREVDTCknLiAgVGhlIGRlZmF1bHQgdmVyc2lvbiBvZiB0aGlzIGZ1bmN0aW9uIHNlbGVjdHMKICAgICAnLmdudS5saW5rb25jZS5yLm5hbWUnIGlmIHRoZSBmdW5jdGlvbidzIHNlY3Rpb24gaXMKICAgICAnLmdudS5saW5rb25jZS50Lm5hbWUnLCAnLnJvZGF0YS5uYW1lJyBpZiBmdW5jdGlvbiBpcyBpbgogICAgICcudGV4dC5uYW1lJywgYW5kIHRoZSBub3JtYWwgcmVhZG9ubHktZGF0YSBzZWN0aW9uIG90aGVyd2lzZS4KCiAtLSBUYXJnZXQgSG9vazogc2VjdGlvbiAqIFRBUkdFVF9BU01fU0VMRUNUX1JUWF9TRUNUSU9OIChlbnVtCiAgICAgICAgICBtYWNoaW5lX21vZGUgTU9ERSwgcnR4IFgsIHVuc2lnbmVkIEhPU1RfV0lERV9JTlQgQUxJR04pCiAgICAgUmV0dXJuIHRoZSBzZWN0aW9uIGludG8gd2hpY2ggYSBjb25zdGFudCBYLCBvZiBtb2RlIE1PREUsIHNob3VsZCBiZQogICAgIHBsYWNlZC4gIFlvdSBjYW4gYXNzdW1lIHRoYXQgWCBpcyBzb21lIGtpbmQgb2YgY29uc3RhbnQgaW4gUlRMLgogICAgIFRoZSBhcmd1bWVudCBNT0RFIGlzIHJlZHVuZGFudCBleGNlcHQgaW4gdGhlIGNhc2Ugb2YgYSAnY29uc3RfaW50JwogICAgIHJ0eC4gIEFMSUdOIGlzIHRoZSBjb25zdGFudCBhbGlnbm1lbnQgaW4gYml0cy4KCiAgICAgVGhlIGRlZmF1bHQgdmVyc2lvbiBvZiB0aGlzIGZ1bmN0aW9uIHRha2VzIGNhcmUgb2YgcHV0dGluZyBzeW1ib2xpYwogICAgIGNvbnN0YW50cyBpbiAnZmxhZ19waWMnIG1vZGUgaW4gJ2RhdGFfc2VjdGlvbicgYW5kIGV2ZXJ5dGhpbmcgZWxzZQogICAgIGluICdyZWFkb25seV9kYXRhX3NlY3Rpb24nLgoKIC0tIFRhcmdldCBIb29rOiB2b2lkIFRBUkdFVF9NQU5HTEVfREVDTF9BU1NFTUJMRVJfTkFNRSAodHJlZSBERUNMLCB0cmVlCiAgICAgICAgICBJRCkKICAgICBEZWZpbmUgdGhpcyBob29rIGlmIHlvdSBuZWVkIHRvIHBvc3Rwcm9jZXNzIHRoZSBhc3NlbWJsZXIgbmFtZQogICAgIGdlbmVyYXRlZCBieSB0YXJnZXQtaW5kZXBlbmRlbnQgY29kZS4gIFRoZSBJRCBwcm92aWRlZCB0byB0aGlzIGhvb2sKICAgICB3aWxsIGJlIHRoZSBjb21wdXRlZCBuYW1lIChlLmcuLCB0aGUgbWFjcm8gJ0RFQ0xfTkFNRScgb2YgdGhlIERFQ0wKICAgICBpbiBDLCBvciB0aGUgbWFuZ2xlZCBuYW1lIG9mIHRoZSBERUNMIGluIEMrKykuICBUaGUgcmV0dXJuIHZhbHVlIG9mCiAgICAgdGhlIGhvb2sgaXMgYW4gJ0lERU5USUZJRVJfTk9ERScgZm9yIHRoZSBhcHByb3ByaWF0ZSBtYW5nbGVkIG5hbWUKICAgICBvbiB5b3VyIHRhcmdldCBzeXN0ZW0uICBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGhvb2sKICAgICBqdXN0IHJldHVybnMgdGhlIElEIHByb3ZpZGVkLgoKIC0tIFRhcmdldCBIb29rOiB2b2lkIFRBUkdFVF9FTkNPREVfU0VDVElPTl9JTkZPICh0cmVlIERFQ0wsIHJ0eCBSVEwsCiAgICAgICAgICBpbnQgTkVXX0RFQ0xfUCkKICAgICBEZWZpbmUgdGhpcyBob29rIGlmIHJlZmVyZW5jZXMgdG8gYSBzeW1ib2wgb3IgYSBjb25zdGFudCBtdXN0IGJlCiAgICAgdHJlYXRlZCBkaWZmZXJlbnRseSBkZXBlbmRpbmcgb24gc29tZXRoaW5nIGFib3V0IHRoZSB2YXJpYWJsZSBvcgogICAgIGZ1bmN0aW9uIG5hbWVkIGJ5IHRoZSBzeW1ib2wgKHN1Y2ggYXMgd2hhdCBzZWN0aW9uIGl0IGlzIGluKS4KCiAgICAgVGhlIGhvb2sgaXMgZXhlY3V0ZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgcnRsIGhhcyBiZWVuIGNyZWF0ZWQgZm9yCiAgICAgREVDTCwgd2hpY2ggbWF5IGJlIGEgdmFyaWFibGUgb3IgZnVuY3Rpb24gZGVjbGFyYXRpb24gb3IgYW4gZW50cnkKICAgICBpbiB0aGUgY29uc3RhbnQgcG9vbC4gIEluIGVpdGhlciBjYXNlLCBSVEwgaXMgdGhlIHJ0bCBpbiBxdWVzdGlvbi4KICAgICBEbyBfbm90XyB1c2UgJ0RFQ0xfUlRMIChERUNMKScgaW4gdGhpcyBob29rOyB0aGF0IGZpZWxkIG1heSBub3QKICAgICBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQgeWV0LgoKICAgICBJbiB0aGUgY2FzZSBvZiBhIGNvbnN0YW50LCBpdCBpcyBzYWZlIHRvIGFzc3VtZSB0aGF0IHRoZSBydGwgaXMgYQogICAgICdtZW0nIHdob3NlIGFkZHJlc3MgaXMgYSAnc3ltYm9sX3JlZicuICBNb3N0IGRlY2xzIHdpbGwgYWxzbyBoYXZlCiAgICAgdGhpcyBmb3JtLCBidXQgdGhhdCBpcyBub3QgZ3VhcmFudGVlZC4gIEdsb2JhbCByZWdpc3RlciB2YXJpYWJsZXMsCiAgICAgZm9yIGluc3RhbmNlLCB3aWxsIGhhdmUgYSAncmVnJyBmb3IgdGhlaXIgcnRsLiAgKE5vcm1hbGx5IHRoZSByaWdodAogICAgIHRoaW5nIHRvIGRvIHdpdGggc3VjaCB1bnVzdWFsIHJ0bCBpcyBsZWF2ZSBpdCBhbG9uZS4pCgogICAgIFRoZSBORVdfREVDTF9QIGFyZ3VtZW50IHdpbGwgYmUgdHJ1ZSBpZiB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHRoYXQKICAgICAnVEFSR0VUX0VOQ09ERV9TRUNUSU9OX0lORk8nIGhhcyBiZWVuIGludm9rZWQgb24gdGhpcyBkZWNsLiAgSXQKICAgICB3aWxsIGJlIGZhbHNlIGZvciBzdWJzZXF1ZW50IGludm9jYXRpb25zLCB3aGljaCB3aWxsIGhhcHBlbiBmb3IKICAgICBkdXBsaWNhdGUgZGVjbGFyYXRpb25zLiAgV2hldGhlciBvciBub3QgYW55dGhpbmcgbXVzdCBiZSBkb25lIGZvcgogICAgIHRoZSBkdXBsaWNhdGUgZGVjbGFyYXRpb24gZGVwZW5kcyBvbiB3aGV0aGVyIHRoZSBob29rIGV4YW1pbmVzCiAgICAgJ0RFQ0xfQVRUUklCVVRFUycuICBORVdfREVDTF9QIGlzIGFsd2F5cyB0cnVlIHdoZW4gdGhlIGhvb2sgaXMKICAgICBjYWxsZWQgZm9yIGEgY29uc3RhbnQuCgogICAgIFRoZSB1c3VhbCB0aGluZyBmb3IgdGhpcyBob29rIHRvIGRvIGlzIHRvIHJlY29yZCBmbGFncyBpbiB0aGUKICAgICAnc3ltYm9sX3JlZicsIHVzaW5nICdTWU1CT0xfUkVGX0ZMQUcnIG9yICdTWU1CT0xfUkVGX0ZMQUdTJy4KICAgICBIaXN0b3JpY2FsbHksIHRoZSBuYW1lIHN0cmluZyB3YXMgbW9kaWZpZWQgaWYgaXQgd2FzIG5lY2Vzc2FyeSB0bwogICAgIGVuY29kZSBtb3JlIHRoYW4gb25lIGJpdCBvZiBpbmZvcm1hdGlvbiwgYnV0IHRoaXMgcHJhY3RpY2UgaXMgbm93CiAgICAgZGlzY291cmFnZWQ7IHVzZSAnU1lNQk9MX1JFRl9GTEFHUycuCgogICAgIFRoZSBkZWZhdWx0IGRlZmluaXRpb24gb2YgdGhpcyBob29rLCAnZGVmYXVsdF9lbmNvZGVfc2VjdGlvbl9pbmZvJwogICAgIGluICd2YXJhc20uYycsIHNldHMgYSBudW1iZXIgb2YgY29tbW9ubHktdXNlZnVsIGJpdHMgaW4KICAgICAnU1lNQk9MX1JFRl9GTEFHUycuICBDaGVjayB3aGV0aGVyIHRoZSBkZWZhdWx0IGRvZXMgd2hhdCB5b3UgbmVlZAogICAgIGJlZm9yZSBvdmVycmlkaW5nIGl0LgoKIC0tIFRhcmdldCBIb29rOiBjb25zdCBjaGFyICpUQVJHRVRfU1RSSVBfTkFNRV9FTkNPRElORyAoY29uc3QgY2hhcgogICAgICAgICAgKm5hbWUpCiAgICAgRGVjb2RlIE5BTUUgYW5kIHJldHVybiB0aGUgcmVhbCBuYW1lIHBhcnQsIHNhbnMgdGhlIGNoYXJhY3RlcnMgdGhhdAogICAgICdUQVJHRVRfRU5DT0RFX1NFQ1RJT05fSU5GTycgbWF5IGhhdmUgYWRkZWQuCgogLS0gVGFyZ2V0IEhvb2s6IGJvb2wgVEFSR0VUX0lOX1NNQUxMX0RBVEFfUCAodHJlZSBFWFApCiAgICAgUmV0dXJucyB0cnVlIGlmIEVYUCBzaG91bGQgYmUgcGxhY2VkIGludG8gYSAic21hbGwgZGF0YSIgc2VjdGlvbi4KICAgICBUaGUgZGVmYXVsdCB2ZXJzaW9uIG9mIHRoaXMgaG9vayBhbHdheXMgcmV0dXJucyBmYWxzZS4KCiAtLSBWYXJpYWJsZTogVGFyZ2V0IEhvb2sgYm9vbCBUQVJHRVRfSEFWRV9TUk9EQVRBX1NFQ1RJT04KICAgICBDb250YWlucyB0aGUgdmFsdWUgdHJ1ZSBpZiB0aGUgdGFyZ2V0IHBsYWNlcyByZWFkLW9ubHkgInNtYWxsIGRhdGEiCiAgICAgaW50byBhIHNlcGFyYXRlIHNlY3Rpb24uICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBmYWxzZS4KCiAtLSBUYXJnZXQgSG9vazogYm9vbCBUQVJHRVRfQklORFNfTE9DQUxfUCAodHJlZSBFWFApCiAgICAgUmV0dXJucyB0cnVlIGlmIEVYUCBuYW1lcyBhbiBvYmplY3QgZm9yIHdoaWNoIG5hbWUgcmVzb2x1dGlvbiBydWxlcwogICAgIG11c3QgcmVzb2x2ZSB0byB0aGUgY3VycmVudCAibW9kdWxlIiAoZHluYW1pYyBzaGFyZWQgbGlicmFyeSBvcgogICAgIGV4ZWN1dGFibGUgaW1hZ2UpLgoKICAgICBUaGUgZGVmYXVsdCB2ZXJzaW9uIG9mIHRoaXMgaG9vayBpbXBsZW1lbnRzIHRoZSBuYW1lIHJlc29sdXRpb24KICAgICBydWxlcyBmb3IgRUxGLCB3aGljaCBoYXMgYSBsb29zZXIgbW9kZWwgb2YgZ2xvYmFsIG5hbWUgYmluZGluZyB0aGFuCiAgICAgb3RoZXIgY3VycmVudGx5IHN1cHBvcnRlZCBvYmplY3QgZmlsZSBmb3JtYXRzLgoKIC0tIFZhcmlhYmxlOiBUYXJnZXQgSG9vayBib29sIFRBUkdFVF9IQVZFX1RMUwogICAgIENvbnRhaW5zIHRoZSB2YWx1ZSB0cnVlIGlmIHRoZSB0YXJnZXQgc3VwcG9ydHMgdGhyZWFkLWxvY2FsCiAgICAgc3RvcmFnZS4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGZhbHNlLgoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IFBJQywgIE5leHQ6IEFzc2VtYmxlciBGb3JtYXQsICBQcmV2OiBTZWN0aW9ucywgIFVwOiBUYXJnZXQgTWFjcm9zCgoxNS4yMCBQb3NpdGlvbiBJbmRlcGVuZGVudCBDb2RlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KClRoaXMgc2VjdGlvbiBkZXNjcmliZXMgbWFjcm9zIHRoYXQgaGVscCBpbXBsZW1lbnQgZ2VuZXJhdGlvbiBvZiBwb3NpdGlvbgppbmRlcGVuZGVudCBjb2RlLiAgU2ltcGx5IGRlZmluaW5nIHRoZXNlIG1hY3JvcyBpcyBub3QgZW5vdWdoIHRvCmdlbmVyYXRlIHZhbGlkIFBJQzsgeW91IG11c3QgYWxzbyBhZGQgc3VwcG9ydCB0byB0aGUgbWFjcm9zCidHT19JRl9MRUdJVElNQVRFX0FERFJFU1MnIGFuZCAnUFJJTlRfT1BFUkFORF9BRERSRVNTJywgYXMgd2VsbCBhcwonTEVHSVRJTUlaRV9BRERSRVNTJy4gIFlvdSBtdXN0IG1vZGlmeSB0aGUgZGVmaW5pdGlvbiBvZiAnbW92c2knIHRvIGRvCnNvbWV0aGluZyBhcHByb3ByaWF0ZSB3aGVuIHRoZSBzb3VyY2Ugb3BlcmFuZCBjb250YWlucyBhIHN5bWJvbGljCmFkZHJlc3MuICBZb3UgbWF5IGFsc28gbmVlZCB0byBhbHRlciB0aGUgaGFuZGxpbmcgb2Ygc3dpdGNoIHN0YXRlbWVudHMKc28gdGhhdCB0aGV5IHVzZSByZWxhdGl2ZSBhZGRyZXNzZXMuCgogLS0gTWFjcm86IFBJQ19PRkZTRVRfVEFCTEVfUkVHTlVNCiAgICAgVGhlIHJlZ2lzdGVyIG51bWJlciBvZiB0aGUgcmVnaXN0ZXIgdXNlZCB0byBhZGRyZXNzIGEgdGFibGUgb2YKICAgICBzdGF0aWMgZGF0YSBhZGRyZXNzZXMgaW4gbWVtb3J5LiAgSW4gc29tZSBjYXNlcyB0aGlzIHJlZ2lzdGVyIGlzCiAgICAgZGVmaW5lZCBieSBhIHByb2Nlc3NvcidzICJhcHBsaWNhdGlvbiBiaW5hcnkgaW50ZXJmYWNlIiAoQUJJKS4KICAgICBXaGVuIHRoaXMgbWFjcm8gaXMgZGVmaW5lZCwgUlRMIGlzIGdlbmVyYXRlZCBmb3IgdGhpcyByZWdpc3RlcgogICAgIG9uY2UsIGFzIHdpdGggdGhlIHN0YWNrIHBvaW50ZXIgYW5kIGZyYW1lIHBvaW50ZXIgcmVnaXN0ZXJzLiAgSWYKICAgICB0aGlzIG1hY3JvIGlzIG5vdCBkZWZpbmVkLCBpdCBpcyB1cCB0byB0aGUgbWFjaGluZS1kZXBlbmRlbnQgZmlsZXMKICAgICB0byBhbGxvY2F0ZSBzdWNoIGEgcmVnaXN0ZXIgKGlmIG5lY2Vzc2FyeSkuICBOb3RlIHRoYXQgdGhpcwogICAgIHJlZ2lzdGVyIG11c3QgYmUgZml4ZWQgd2hlbiBpbiB1c2UgKGUuZy4gd2hlbiAnZmxhZ19waWMnIGlzIHRydWUpLgoKIC0tIE1hY3JvOiBQSUNfT0ZGU0VUX1RBQkxFX1JFR19DQUxMX0NMT0JCRVJFRAogICAgIERlZmluZSB0aGlzIG1hY3JvIGlmIHRoZSByZWdpc3RlciBkZWZpbmVkIGJ5CiAgICAgJ1BJQ19PRkZTRVRfVEFCTEVfUkVHTlVNJyBpcyBjbG9iYmVyZWQgYnkgY2FsbHMuICBEbyBub3QgZGVmaW5lCiAgICAgdGhpcyBtYWNybyBpZiAnUElDX09GRlNFVF9UQUJMRV9SRUdOVU0nIGlzIG5vdCBkZWZpbmVkLgoKIC0tIE1hY3JvOiBMRUdJVElNQVRFX1BJQ19PUEVSQU5EX1AgKFgpCiAgICAgQSBDIGV4cHJlc3Npb24gdGhhdCBpcyBub256ZXJvIGlmIFggaXMgYSBsZWdpdGltYXRlIGltbWVkaWF0ZQogICAgIG9wZXJhbmQgb24gdGhlIHRhcmdldCBtYWNoaW5lIHdoZW4gZ2VuZXJhdGluZyBwb3NpdGlvbiBpbmRlcGVuZGVudAogICAgIGNvZGUuICBZb3UgY2FuIGFzc3VtZSB0aGF0IFggc2F0aXNmaWVzICdDT05TVEFOVF9QJywgc28geW91IG5lZWQKICAgICBub3QgY2hlY2sgdGhpcy4gIFlvdSBjYW4gYWxzbyBhc3N1bWUgRkxBR19QSUMgaXMgdHJ1ZSwgc28geW91IG5lZWQKICAgICBub3QgY2hlY2sgaXQgZWl0aGVyLiAgWW91IG5lZWQgbm90IGRlZmluZSB0aGlzIG1hY3JvIGlmIGFsbAogICAgIGNvbnN0YW50cyAoaW5jbHVkaW5nICdTWU1CT0xfUkVGJykgY2FuIGJlIGltbWVkaWF0ZSBvcGVyYW5kcyB3aGVuCiAgICAgZ2VuZXJhdGluZyBwb3NpdGlvbiBpbmRlcGVuZGVudCBjb2RlLgoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IEFzc2VtYmxlciBGb3JtYXQsICBOZXh0OiBEZWJ1Z2dpbmcgSW5mbywgIFByZXY6IFBJQywgIFVwOiBUYXJnZXQgTWFjcm9zCgoxNS4yMSBEZWZpbmluZyB0aGUgT3V0cHV0IEFzc2VtYmxlciBMYW5ndWFnZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyBtYWNyb3Mgd2hvc2UgcHJpbmNpcGFsIHB1cnBvc2UgaXMgdG8gZGVzY3JpYmUgaG93CnRvIHdyaXRlIGluc3RydWN0aW9ucyBpbiBhc3NlbWJsZXIgbGFuZ3VhZ2UtLXJhdGhlciB0aGFuIHdoYXQgdGhlCmluc3RydWN0aW9ucyBkby4KCiogTWVudToKCiogRmlsZSBGcmFtZXdvcms6OiAgICAgICBTdHJ1Y3R1cmFsIGluZm9ybWF0aW9uIGZvciB0aGUgYXNzZW1ibGVyIGZpbGUuCiogRGF0YSBPdXRwdXQ6OiAgICAgICAgICBPdXRwdXQgb2YgY29uc3RhbnRzIChudW1iZXJzLCBzdHJpbmdzLCBhZGRyZXNzZXMpLgoqIFVuaW5pdGlhbGl6ZWQgRGF0YTo6ICAgT3V0cHV0IG9mIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLgoqIExhYmVsIE91dHB1dDo6ICAgICAgICAgT3V0cHV0IGFuZCBnZW5lcmF0aW9uIG9mIGxhYmVscy4KKiBJbml0aWFsaXphdGlvbjo6ICAgICAgIEdlbmVyYWwgcHJpbmNpcGxlcyBvZiBpbml0aWFsaXphdGlvbgoJCQkgICBhbmQgdGVybWluYXRpb24gcm91dGluZXMuCiogTWFjcm9zIGZvciBJbml0aWFsaXphdGlvbjo6CgkJCSBTcGVjaWZpYyBtYWNyb3MgdGhhdCBjb250cm9sIHRoZSBoYW5kbGluZyBvZgoJCQkgICBpbml0aWFsaXphdGlvbiBhbmQgdGVybWluYXRpb24gcm91dGluZXMuCiogSW5zdHJ1Y3Rpb24gT3V0cHV0OjogICBPdXRwdXQgb2YgYWN0dWFsIGluc3RydWN0aW9ucy4KKiBEaXNwYXRjaCBUYWJsZXM6OiAgICAgIE91dHB1dCBvZiBqdW1wIHRhYmxlcy4KKiBFeGNlcHRpb24gUmVnaW9uIE91dHB1dDo6IE91dHB1dCBvZiBleGNlcHRpb24gcmVnaW9uIGNvZGUuCiogQWxpZ25tZW50IE91dHB1dDo6ICAgICBQc2V1ZG8gb3BzIGZvciBhbGlnbm1lbnQgYW5kIHNraXBwaW5nIGRhdGEuCgofCkZpbGU6IGdjY2ludC5pbmZvLCAgTm9kZTogRmlsZSBGcmFtZXdvcmssICBOZXh0OiBEYXRhIE91dHB1dCwgIFVwOiBBc3NlbWJsZXIgRm9ybWF0CgoxNS4yMS4xIFRoZSBPdmVyYWxsIEZyYW1ld29yayBvZiBhbiBBc3NlbWJsZXIgRmlsZQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKVGhpcyBkZXNjcmliZXMgdGhlIG92ZXJhbGwgZnJhbWV3b3JrIG9mIGFuIGFzc2VtYmx5IGZpbGUuCgogLS0gVGFyZ2V0IEhvb2s6IHZvaWQgVEFSR0VUX0FTTV9GSUxFX1NUQVJUICgpCiAgICAgT3V0cHV0IHRvICdhc21fb3V0X2ZpbGUnIGFueSB0ZXh0IHdoaWNoIHRoZSBhc3NlbWJsZXIgZXhwZWN0cyB0bwogICAgIGZpbmQgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGZpbGUuICBUaGUgZGVmYXVsdCBiZWhhdmlvciBpcwogICAgIGNvbnRyb2xsZWQgYnkgdHdvIGZsYWdzLCBkb2N1bWVudGVkIGJlbG93LiAgVW5sZXNzIHlvdXIgdGFyZ2V0J3MKICAgICBhc3NlbWJsZXIgaXMgcXVpdGUgdW51c3VhbCwgaWYgeW91IG92ZXJyaWRlIHRoZSBkZWZhdWx0LCB5b3Ugc2hvdWxkCiAgICAgY2FsbCAnZGVmYXVsdF9maWxlX3N0YXJ0JyBhdCBzb21lIHBvaW50IGluIHlvdXIgdGFyZ2V0IGhvb2suICBUaGlzCiAgICAgbGV0cyBvdGhlciB0YXJnZXQgZmlsZXMgcmVseSBvbiB0aGVzZSB2YXJpYWJsZXMuCgogLS0gVGFyZ2V0IEhvb2s6IGJvb2wgVEFSR0VUX0FTTV9GSUxFX1NUQVJUX0FQUF9PRkYKICAgICBJZiB0aGlzIGZsYWcgaXMgdHJ1ZSwgdGhlIHRleHQgb2YgdGhlIG1hY3JvICdBU01fQVBQX09GRicgd2lsbCBiZQogICAgIHByaW50ZWQgYXMgdGhlIHZlcnkgZmlyc3QgbGluZSBpbiB0aGUgYXNzZW1ibHkgZmlsZSwgdW5sZXNzCiAgICAgJy1mdmVyYm9zZS1hc20nIGlzIGluIGVmZmVjdC4gIChJZiB0aGF0IG1hY3JvIGhhcyBiZWVuIGRlZmluZWQgdG8KICAgICB0aGUgZW1wdHkgc3RyaW5nLCB0aGlzIHZhcmlhYmxlIGhhcyBubyBlZmZlY3QuKSAgV2l0aCB0aGUgbm9ybWFsCiAgICAgZGVmaW5pdGlvbiBvZiAnQVNNX0FQUF9PRkYnLCB0aGUgZWZmZWN0IGlzIHRvIG5vdGlmeSB0aGUgR05VCiAgICAgYXNzZW1ibGVyIHRoYXQgaXQgbmVlZCBub3QgYm90aGVyIHN0cmlwcGluZyBjb21tZW50cyBvciBleHRyYQogICAgIHdoaXRlc3BhY2UgZnJvbSBpdHMgaW5wdXQuICBUaGlzIGFsbG93cyBpdCB0byB3b3JrIGEgYml0IGZhc3Rlci4KCiAgICAgVGhlIGRlZmF1bHQgaXMgZmFsc2UuICBZb3Ugc2hvdWxkIG5vdCBzZXQgaXQgdG8gdHJ1ZSB1bmxlc3MgeW91CiAgICAgaGF2ZSB2ZXJpZmllZCB0aGF0IHlvdXIgcG9ydCBkb2VzIG5vdCBnZW5lcmF0ZSBhbnkgZXh0cmEgd2hpdGVzcGFjZQogICAgIG9yIGNvbW1lbnRzIHRoYXQgd2lsbCBjYXVzZSBHQVMgdG8gaXNzdWUgZXJyb3JzIGluIE5PX0FQUCBtb2RlLgoKIC0tIFRhcmdldCBIb29rOiBib29sIFRBUkdFVF9BU01fRklMRV9TVEFSVF9GSUxFX0RJUkVDVElWRQogICAgIElmIHRoaXMgZmxhZyBpcyB0cnVlLCAnb3V0cHV0X2ZpbGVfZGlyZWN0aXZlJyB3aWxsIGJlIGNhbGxlZCBmb3IKICAgICB0aGUgcHJpbWFyeSBzb3VyY2UgZmlsZSwgaW1tZWRpYXRlbHkgYWZ0ZXIgcHJpbnRpbmcgJ0FTTV9BUFBfT0ZGJwogICAgIChpZiB0aGF0IGlzIGVuYWJsZWQpLiAgTW9zdCBFTEYgYXNzZW1ibGVycyBleHBlY3QgdGhpcyB0byBiZSBkb25lLgogICAgIFRoZSBkZWZhdWx0IGlzIGZhbHNlLgoKIC0tIFRhcmdldCBIb29rOiB2b2lkIFRBUkdFVF9BU01fRklMRV9FTkQgKCkKICAgICBPdXRwdXQgdG8gJ2FzbV9vdXRfZmlsZScgYW55IHRleHQgd2hpY2ggdGhlIGFzc2VtYmxlciBleHBlY3RzIHRvCiAgICAgZmluZCBhdCB0aGUgZW5kIG9mIGEgZmlsZS4gIFRoZSBkZWZhdWx0IGlzIHRvIG91dHB1dCBub3RoaW5nLgoKIC0tIEZ1bmN0aW9uOiB2b2lkIGZpbGVfZW5kX2luZGljYXRlX2V4ZWNfc3RhY2sgKCkKICAgICBTb21lIHN5c3RlbXMgdXNlIGEgY29tbW9uIGNvbnZlbnRpb24sIHRoZSAnLm5vdGUuR05VLXN0YWNrJyBzcGVjaWFsCiAgICAgc2VjdGlvbiwgdG8gaW5kaWNhdGUgd2hldGhlciBvciBub3QgYW4gb2JqZWN0IGZpbGUgcmVsaWVzIG9uIHRoZQogICAgIHN0YWNrIGJlaW5nIGV4ZWN1dGFibGUuICBJZiB5b3VyIHN5c3RlbSB1c2VzIHRoaXMgY29udmVudGlvbiwgeW91CiAgICAgc2hvdWxkIGRlZmluZSAnVEFSR0VUX0FTTV9GSUxFX0VORCcgdG8gdGhpcyBmdW5jdGlvbi4gIElmIHlvdSBuZWVkCiAgICAgdG8gZG8gb3RoZXIgdGhpbmdzIGluIHRoYXQgaG9vaywgaGF2ZSB5b3VyIGhvb2sgZnVuY3Rpb24gY2FsbCB0aGlzCiAgICAgZnVuY3Rpb24uCgogLS0gTWFjcm86IEFTTV9DT01NRU5UX1NUQVJUCiAgICAgQSBDIHN0cmluZyBjb25zdGFudCBkZXNjcmliaW5nIGhvdyB0byBiZWdpbiBhIGNvbW1lbnQgaW4gdGhlIHRhcmdldAogICAgIGFzc2VtYmxlciBsYW5ndWFnZS4gIFRoZSBjb21waWxlciBhc3N1bWVzIHRoYXQgdGhlIGNvbW1lbnQgd2lsbCBlbmQKICAgICBhdCB0aGUgZW5kIG9mIHRoZSBsaW5lLgoKIC0tIE1hY3JvOiBBU01fQVBQX09OCiAgICAgQSBDIHN0cmluZyBjb25zdGFudCBmb3IgdGV4dCB0byBiZSBvdXRwdXQgYmVmb3JlIGVhY2ggJ2FzbScKICAgICBzdGF0ZW1lbnQgb3IgZ3JvdXAgb2YgY29uc2VjdXRpdmUgb25lcy4gIE5vcm1hbGx5IHRoaXMgaXMgJyIjQVBQIicsCiAgICAgd2hpY2ggaXMgYSBjb21tZW50IHRoYXQgaGFzIG5vIGVmZmVjdCBvbiBtb3N0IGFzc2VtYmxlcnMgYnV0IHRlbGxzCiAgICAgdGhlIEdOVSBhc3NlbWJsZXIgdGhhdCBpdCBtdXN0IGNoZWNrIHRoZSBsaW5lcyB0aGF0IGZvbGxvdyBmb3IgYWxsCiAgICAgdmFsaWQgYXNzZW1ibGVyIGNvbnN0cnVjdHMuCgogLS0gTWFjcm86IEFTTV9BUFBfT0ZGCiAgICAgQSBDIHN0cmluZyBjb25zdGFudCBmb3IgdGV4dCB0byBiZSBvdXRwdXQgYWZ0ZXIgZWFjaCAnYXNtJwogICAgIHN0YXRlbWVudCBvciBncm91cCBvZiBjb25zZWN1dGl2ZSBvbmVzLiAgTm9ybWFsbHkgdGhpcyBpcwogICAgICciI05PX0FQUCInLCB3aGljaCB0ZWxscyB0aGUgR05VIGFzc2VtYmxlciB0byByZXN1bWUgbWFraW5nIHRoZQogICAgIHRpbWUtc2F2aW5nIGFzc3VtcHRpb25zIHRoYXQgYXJlIHZhbGlkIGZvciBvcmRpbmFyeSBjb21waWxlcgogICAgIG91dHB1dC4KCiAtLSBNYWNybzogQVNNX09VVFBVVF9TT1VSQ0VfRklMRU5BTUUgKFNUUkVBTSwgTkFNRSkKICAgICBBIEMgc3RhdGVtZW50IHRvIG91dHB1dCBDT0ZGIGluZm9ybWF0aW9uIG9yIERXQVJGIGRlYnVnZ2luZwogICAgIGluZm9ybWF0aW9uIHdoaWNoIGluZGljYXRlcyB0aGF0IGZpbGVuYW1lIE5BTUUgaXMgdGhlIGN1cnJlbnQKICAgICBzb3VyY2UgZmlsZSB0byB0aGUgc3RkaW8gc3RyZWFtIFNUUkVBTS4KCiAgICAgVGhpcyBtYWNybyBuZWVkIG5vdCBiZSBkZWZpbmVkIGlmIHRoZSBzdGFuZGFyZCBmb3JtIG9mIG91dHB1dCBmb3IKICAgICB0aGUgZmlsZSBmb3JtYXQgaW4gdXNlIGlzIGFwcHJvcHJpYXRlLgoKIC0tIE1hY3JvOiBPVVRQVVRfUVVPVEVEX1NUUklORyAoU1RSRUFNLCBTVFJJTkcpCiAgICAgQSBDIHN0YXRlbWVudCB0byBvdXRwdXQgdGhlIHN0cmluZyBTVFJJTkcgdG8gdGhlIHN0ZGlvIHN0cmVhbQogICAgIFNUUkVBTS4gIElmIHlvdSBkbyBub3QgY2FsbCB0aGUgZnVuY3Rpb24gJ291dHB1dF9xdW90ZWRfc3RyaW5nJyBpbgogICAgIHlvdXIgY29uZmlnIGZpbGVzLCBHQ0Mgd2lsbCBvbmx5IGNhbGwgaXQgdG8gb3V0cHV0IGZpbGVuYW1lcyB0byB0aGUKICAgICBhc3NlbWJsZXIgc291cmNlLiAgU28geW91IGNhbiB1c2UgaXQgdG8gY2Fub25pY2FsaXplIHRoZSBmb3JtYXQgb2YKICAgICB0aGUgZmlsZW5hbWUgdXNpbmcgdGhpcyBtYWNyby4KCiAtLSBNYWNybzogQVNNX09VVFBVVF9JREVOVCAoU1RSRUFNLCBTVFJJTkcpCiAgICAgQSBDIHN0YXRlbWVudCB0byBvdXRwdXQgc29tZXRoaW5nIHRvIHRoZSBhc3NlbWJsZXIgZmlsZSB0byBoYW5kbGUgYQogICAgICcjaWRlbnQnIGRpcmVjdGl2ZSBjb250YWluaW5nIHRoZSB0ZXh0IFNUUklORy4gIElmIHRoaXMgbWFjcm8gaXMKICAgICBub3QgZGVmaW5lZCwgbm90aGluZyBpcyBvdXRwdXQgZm9yIGEgJyNpZGVudCcgZGlyZWN0aXZlLgoKIC0tIFRhcmdldCBIb29rOiB2b2lkIFRBUkdFVF9BU01fTkFNRURfU0VDVElPTiAoY29uc3QgY2hhciAqTkFNRSwKICAgICAgICAgIHVuc2lnbmVkIGludCBGTEFHUywgdW5zaWduZWQgaW50IEFMSUdOKQogICAgIE91dHB1dCBhc3NlbWJseSBkaXJlY3RpdmVzIHRvIHN3aXRjaCB0byBzZWN0aW9uIE5BTUUuICBUaGUgc2VjdGlvbgogICAgIHNob3VsZCBoYXZlIGF0dHJpYnV0ZXMgYXMgc3BlY2lmaWVkIGJ5IEZMQUdTLCB3aGljaCBpcyBhIGJpdCBtYXNrCiAgICAgb2YgdGhlICdTRUNUSU9OXyonIGZsYWdzIGRlZmluZWQgaW4gJ291dHB1dC5oJy4gIElmIEFMSUdOIGlzCiAgICAgbm9uemVybywgaXQgY29udGFpbnMgYW4gYWxpZ25tZW50IGluIGJ5dGVzIHRvIGJlIHVzZWQgZm9yIHRoZQogICAgIHNlY3Rpb24sIG90aGVyd2lzZSBzb21lIHRhcmdldCBkZWZhdWx0IHNob3VsZCBiZSB1c2VkLiAgT25seQogICAgIHRhcmdldHMgdGhhdCBtdXN0IHNwZWNpZnkgYW4gYWxpZ25tZW50IHdpdGhpbiB0aGUgc2VjdGlvbiBkaXJlY3RpdmUKICAgICBuZWVkIHBheSBhdHRlbnRpb24gdG8gQUxJR04gLSB3ZSB3aWxsIHN0aWxsIHVzZSAnQVNNX09VVFBVVF9BTElHTicuCgogLS0gVGFyZ2V0IEhvb2s6IGJvb2wgVEFSR0VUX0hBVkVfTkFNRURfU0VDVElPTlMKICAgICBUaGlzIGZsYWcgaXMgdHJ1ZSBpZiB0aGUgdGFyZ2V0IHN1cHBvcnRzCiAgICAgJ1RBUkdFVF9BU01fTkFNRURfU0VDVElPTicuCgogLS0gVGFyZ2V0IEhvb2s6IGJvb2wgVEFSR0VUX0hBVkVfU1dJVENIQUJMRV9CU1NfU0VDVElPTlMKICAgICBUaGlzIGZsYWcgaXMgdHJ1ZSBpZiB3ZSBjYW4gY3JlYXRlIHplcm9lZCBkYXRhIGJ5IHN3aXRjaGluZyB0byBhCiAgICAgQlNTIHNlY3Rpb24gYW5kIHRoZW4gdXNpbmcgJ0FTTV9PVVRQVVRfU0tJUCcgdG8gYWxsb2NhdGUgdGhlIHNwYWNlLgogICAgIFRoaXMgaXMgdHJ1ZSBvbiBtb3N0IEVMRiB0YXJnZXRzLgoKIC0tIFRhcmdldCBIb29rOiB1bnNpZ25lZCBpbnQgVEFSR0VUX1NFQ1RJT05fVFlQRV9GTEFHUyAodHJlZSBERUNMLAogICAgICAgICAgY29uc3QgY2hhciAqTkFNRSwgaW50IFJFTE9DKQogICAgIENob29zZSBhIHNldCBvZiBzZWN0aW9uIGF0dHJpYnV0ZXMgZm9yIHVzZSBieQogICAgICdUQVJHRVRfQVNNX05BTUVEX1NFQ1RJT04nIGJhc2VkIG9uIGEgdmFyaWFibGUgb3IgZnVuY3Rpb24gZGVjbCwgYQogICAgIHNlY3Rpb24gbmFtZSwgYW5kIHdoZXRoZXIgb3Igbm90IHRoZSBkZWNsYXJhdGlvbidzIGluaXRpYWxpemVyIG1heQogICAgIGNvbnRhaW4gcnVudGltZSByZWxvY2F0aW9ucy4gIERFQ0wgbWF5IGJlIG51bGwsIGluIHdoaWNoIGNhc2UKICAgICByZWFkLXdyaXRlIGRhdGEgc2hvdWxkIGJlIGFzc3VtZWQuCgogICAgIFRoZSBkZWZhdWx0IHZlcnNpb24gb2YgdGhpcyBmdW5jdGlvbiBoYW5kbGVzIGNob29zaW5nIGNvZGUgdnMgZGF0YSwKICAgICByZWFkLW9ubHkgdnMgcmVhZC13cml0ZSBkYXRhLCBhbmQgJ2ZsYWdfcGljJy4gIFlvdSBzaG91bGQgb25seSBuZWVkCiAgICAgdG8gb3ZlcnJpZGUgdGhpcyBpZiB5b3VyIHRhcmdldCBoYXMgc3BlY2lhbCBmbGFncyB0aGF0IG1pZ2h0IGJlIHNldAogICAgIHZpYSAnX19hdHRyaWJ1dGVfXycuCgogLS0gVGFyZ2V0IEhvb2s6IGludCBUQVJHRVRfQVNNX1JFQ09SRF9HQ0NfU1dJVENIRVMgKHByaW50X3N3aXRjaF90eXBlCiAgICAgICAgICBUWVBFLCBjb25zdCBjaGFyICogVEVYVCkKICAgICBQcm92aWRlcyB0aGUgdGFyZ2V0IHdpdGggdGhlIGFiaWxpdHkgdG8gcmVjb3JkIHRoZSBnY2MgY29tbWFuZCBsaW5lCiAgICAgc3dpdGNoZXMgdGhhdCBoYXZlIGJlZW4gcGFzc2VkIHRvIHRoZSBjb21waWxlciwgYW5kIG9wdGlvbnMgdGhhdAogICAgIGFyZSBlbmFibGVkLiAgVGhlIFRZUEUgYXJndW1lbnQgc3BlY2lmaWVzIHdoYXQgaXMgYmVpbmcgcmVjb3JkZWQuCiAgICAgSXQgY2FuIHRha2UgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CgogICAgICdTV0lUQ0hfVFlQRV9QQVNTRUQnCiAgICAgICAgICBURVhUIGlzIGEgY29tbWFuZCBsaW5lIHN3aXRjaCB0aGF0IGhhcyBiZWVuIHNldCBieSB0aGUgdXNlci4KCiAgICAgJ1NXSVRDSF9UWVBFX0VOQUJMRUQnCiAgICAgICAgICBURVhUIGlzIGFuIG9wdGlvbiB3aGljaCBoYXMgYmVlbiBlbmFibGVkLiAgVGhpcyBtaWdodCBiZSBhcyBhCiAgICAgICAgICBkaXJlY3QgcmVzdWx0IG9mIGEgY29tbWFuZCBsaW5lIHN3aXRjaCwgb3IgYmVjYXVzZSBpdCBpcwogICAgICAgICAgZW5hYmxlZCBieSBkZWZhdWx0IG9yIGJlY2F1c2UgaXQgaGFzIGJlZW4gZW5hYmxlZCBhcyBhIHNpZGUKICAgICAgICAgIGVmZmVjdCBvZiBhIGRpZmZlcmVudCBjb21tYW5kIGxpbmUgc3dpdGNoLiAgRm9yIGV4YW1wbGUsIHRoZQogICAgICAgICAgJy1PMicgc3dpdGNoIGVuYWJsZXMgdmFyaW91cyBkaWZmZXJlbnQgaW5kaXZpZHVhbCBvcHRpbWl6YXRpb24KICAgICAgICAgIHBhc3Nlcy4KCiAgICAgJ1NXSVRDSF9UWVBFX0RFU0NSSVBUSVZFJwogICAgICAgICAgVEVYVCBpcyBlaXRoZXIgTlVMTCBvciBzb21lIGRlc2NyaXB0aXZlIHRleHQgd2hpY2ggc2hvdWxkIGJlCiAgICAgICAgICBpZ25vcmVkLiAgSWYgVEVYVCBpcyBOVUxMIHRoZW4gaXQgaXMgYmVpbmcgdXNlZCB0byB3YXJuIHRoZQogICAgICAgICAgdGFyZ2V0IGhvb2sgdGhhdCBlaXRoZXIgcmVjb3JkaW5nIGlzIHN0YXJ0aW5nIG9yIGVuZGluZy4gIFRoZQogICAgICAgICAgZmlyc3QgdGltZSBUWVBFIGlzIFNXSVRDSF9UWVBFX0RFU0NSSVBUSVZFIGFuZCBURVhUIGlzIE5VTEwsCiAgICAgICAgICB0aGUgd2FybmluZyBpcyBmb3Igc3RhcnQgdXAgYW5kIHRoZSBzZWNvbmQgdGltZSB0aGUgd2FybmluZyBpcwogICAgICAgICAgZm9yIHdpbmQgZG93bi4gIFRoaXMgZmVhdHVyZSBpcyB0byBhbGxvdyB0aGUgdGFyZ2V0IGhvb2sgdG8KICAgICAgICAgIG1ha2UgYW55IG5lY2Vzc2FyeSBwcmVwYXJhdGlvbnMgYmVmb3JlIGl0IHN0YXJ0cyB0byByZWNvcmQKICAgICAgICAgIHN3aXRjaGVzIGFuZCB0byBwZXJmb3JtIGFueSBuZWNlc3NhcnkgdGlkeWluZyB1cCBhZnRlciBpdCBoYXMKICAgICAgICAgIGZpbmlzaGVkIHJlY29yZGluZyBzd2l0Y2hlcy4KCiAgICAgJ1NXSVRDSF9UWVBFX0xJTkVfU1RBUlQnCiAgICAgICAgICBUaGlzIG9wdGlvbiBjYW4gYmUgaWdub3JlZCBieSB0aGlzIHRhcmdldCBob29rLgoKICAgICAnU1dJVENIX1RZUEVfTElORV9FTkQnCiAgICAgICAgICBUaGlzIG9wdGlvbiBjYW4gYmUgaWdub3JlZCBieSB0aGlzIHRhcmdldCBob29rLgoKICAgICBUaGUgaG9vaydzIHJldHVybiB2YWx1ZSBtdXN0IGJlIHplcm8uICBPdGhlciByZXR1cm4gdmFsdWVzIG1heSBiZQogICAgIHN1cHBvcnRlZCBpbiB0aGUgZnV0dXJlLgoKICAgICBCeSBkZWZhdWx0IHRoaXMgaG9vayBpcyBzZXQgdG8gTlVMTCwgYnV0IGFuIGV4YW1wbGUgaW1wbGVtZW50YXRpb24KICAgICBpcyBwcm92aWRlZCBmb3IgRUxGIGJhc2VkIHRhcmdldHMuICBDYWxsZWQgRUxGX1JFQ09SRF9HQ0NfU1dJVENIRVMsCiAgICAgaXQgcmVjb3JkcyB0aGUgc3dpdGNoZXMgYXMgQVNDSUkgdGV4dCBpbnNpZGUgYSBuZXcsIHN0cmluZwogICAgIG1lcmdlYWJsZSBzZWN0aW9uIGluIHRoZSBhc3NlbWJsZXIgb3V0cHV0IGZpbGUuICBUaGUgbmFtZSBvZiB0aGUKICAgICBuZXcgc2VjdGlvbiBpcyBwcm92aWRlZCBieSB0aGUKICAgICAnVEFSR0VUX0FTTV9SRUNPUkRfR0NDX1NXSVRDSEVTX1NFQ1RJT04nIHRhcmdldCBob29rLgoKIC0tIFRhcmdldCBIb29rOiBjb25zdCBjaGFyICogVEFSR0VUX0FTTV9SRUNPUkRfR0NDX1NXSVRDSEVTX1NFQ1RJT04KICAgICBUaGlzIGlzIHRoZSBuYW1lIG9mIHRoZSBzZWN0aW9uIHRoYXQgd2lsbCBiZSBjcmVhdGVkIGJ5IHRoZSBleGFtcGxlCiAgICAgRUxGIGltcGxlbWVudGF0aW9uIG9mIHRoZSAnVEFSR0VUX0FTTV9SRUNPUkRfR0NDX1NXSVRDSEVTJyB0YXJnZXQKICAgICBob29rLgoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IERhdGEgT3V0cHV0LCAgTmV4dDogVW5pbml0aWFsaXplZCBEYXRhLCAgUHJldjogRmlsZSBGcmFtZXdvcmssICBVcDogQXNzZW1ibGVyIEZvcm1hdAoKMTUuMjEuMiBPdXRwdXQgb2YgRGF0YQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogLS0gVGFyZ2V0IEhvb2s6IGNvbnN0IGNoYXIgKiBUQVJHRVRfQVNNX0JZVEVfT1AKIC0tIFRhcmdldCBIb29rOiBjb25zdCBjaGFyICogVEFSR0VUX0FTTV9BTElHTkVEX0hJX09QCiAtLSBUYXJnZXQgSG9vazogY29uc3QgY2hhciAqIFRBUkdFVF9BU01fQUxJR05FRF9TSV9PUAogLS0gVGFyZ2V0IEhvb2s6IGNvbnN0IGNoYXIgKiBUQVJHRVRfQVNNX0FMSUdORURfRElfT1AKIC0tIFRhcmdldCBIb29rOiBjb25zdCBjaGFyICogVEFSR0VUX0FTTV9BTElHTkVEX1RJX09QCiAtLSBUYXJnZXQgSG9vazogY29uc3QgY2hhciAqIFRBUkdFVF9BU01fVU5BTElHTkVEX0hJX09QCiAtLSBUYXJnZXQgSG9vazogY29uc3QgY2hhciAqIFRBUkdFVF9BU01fVU5BTElHTkVEX1NJX09QCiAtLSBUYXJnZXQgSG9vazogY29uc3QgY2hhciAqIFRBUkdFVF9BU01fVU5BTElHTkVEX0RJX09QCiAtLSBUYXJnZXQgSG9vazogY29uc3QgY2hhciAqIFRBUkdFVF9BU01fVU5BTElHTkVEX1RJX09QCiAgICAgVGhlc2UgaG9va3Mgc3BlY2lmeSBhc3NlbWJseSBkaXJlY3RpdmVzIGZvciBjcmVhdGluZyBjZXJ0YWluIGtpbmRzCiAgICAgb2YgaW50ZWdlciBvYmplY3QuICBUaGUgJ1RBUkdFVF9BU01fQllURV9PUCcgZGlyZWN0aXZlIGNyZWF0ZXMgYQogICAgIGJ5dGUtc2l6ZWQgb2JqZWN0LCB0aGUgJ1RBUkdFVF9BU01fQUxJR05FRF9ISV9PUCcgb25lIGNyZWF0ZXMgYW4KICAgICBhbGlnbmVkIHR3by1ieXRlIG9iamVjdCwgYW5kIHNvIG9uLiAgQW55IG9mIHRoZSBob29rcyBtYXkgYmUKICAgICAnTlVMTCcsIGluZGljYXRpbmcgdGhhdCBubyBzdWl0YWJsZSBkaXJlY3RpdmUgaXMgYXZhaWxhYmxlLgoKICAgICBUaGUgY29tcGlsZXIgd2lsbCBwcmludCB0aGVzZSBzdHJpbmdzIGF0IHRoZSBzdGFydCBvZiBhIG5ldyBsaW5lLAogICAgIGZvbGxvd2VkIGltbWVkaWF0ZWx5IGJ5IHRoZSBvYmplY3QncyBpbml0aWFsIHZhbHVlLiAgSW4gbW9zdCBjYXNlcywKICAgICB0aGUgc3RyaW5nIHNob3VsZCBjb250YWluIGEgdGFiLCBhIHBzZXVkby1vcCwgYW5kIHRoZW4gYW5vdGhlciB0YWIuCgogLS0gVGFyZ2V0IEhvb2s6IGJvb2wgVEFSR0VUX0FTTV9JTlRFR0VSIChydHggWCwgdW5zaWduZWQgaW50IFNJWkUsIGludAogICAgICAgICAgQUxJR05FRF9QKQogICAgIFRoZSAnYXNzZW1ibGVfaW50ZWdlcicgZnVuY3Rpb24gdXNlcyB0aGlzIGhvb2sgdG8gb3V0cHV0IGFuIGludGVnZXIKICAgICBvYmplY3QuICBYIGlzIHRoZSBvYmplY3QncyB2YWx1ZSwgU0laRSBpcyBpdHMgc2l6ZSBpbiBieXRlcyBhbmQKICAgICBBTElHTkVEX1AgaW5kaWNhdGVzIHdoZXRoZXIgaXQgaXMgYWxpZ25lZC4gIFRoZSBmdW5jdGlvbiBzaG91bGQKICAgICByZXR1cm4gJ3RydWUnIGlmIGl0IHdhcyBhYmxlIHRvIG91dHB1dCB0aGUgb2JqZWN0LiAgSWYgaXQgcmV0dXJucwogICAgIGZhbHNlLCAnYXNzZW1ibGVfaW50ZWdlcicgd2lsbCB0cnkgdG8gc3BsaXQgdGhlIG9iamVjdCBpbnRvIHNtYWxsZXIKICAgICBwYXJ0cy4KCiAgICAgVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBob29rIHdpbGwgdXNlIHRoZQogICAgICdUQVJHRVRfQVNNX0JZVEVfT1AnIGZhbWlseSBvZiBzdHJpbmdzLCByZXR1cm5pbmcgJ2ZhbHNlJyB3aGVuIHRoZQogICAgIHJlbGV2YW50IHN0cmluZyBpcyAnTlVMTCcuCgogLS0gTWFjcm86IE9VVFBVVF9BRERSX0NPTlNUX0VYVFJBIChTVFJFQU0sIFgsIEZBSUwpCiAgICAgQSBDIHN0YXRlbWVudCB0byByZWNvZ25pemUgUlRYIHBhdHRlcm5zIHRoYXQgJ291dHB1dF9hZGRyX2NvbnN0JwogICAgIGNhbid0IGRlYWwgd2l0aCwgYW5kIG91dHB1dCBhc3NlbWJseSBjb2RlIHRvIFNUUkVBTSBjb3JyZXNwb25kaW5nCiAgICAgdG8gdGhlIHBhdHRlcm4gWC4gIFRoaXMgbWF5IGJlIHVzZWQgdG8gYWxsb3cgbWFjaGluZS1kZXBlbmRlbnQKICAgICAnVU5TUEVDJ3MgdG8gYXBwZWFyIHdpdGhpbiBjb25zdGFudHMuCgogICAgIElmICdPVVRQVVRfQUREUl9DT05TVF9FWFRSQScgZmFpbHMgdG8gcmVjb2duaXplIGEgcGF0dGVybiwgaXQgbXVzdAogICAgICdnb3RvIGZhaWwnLCBzbyB0aGF0IGEgc3RhbmRhcmQgZXJyb3IgbWVzc2FnZSBpcyBwcmludGVkLiAgSWYgaXQKICAgICBwcmludHMgYW4gZXJyb3IgbWVzc2FnZSBpdHNlbGYsIGJ5IGNhbGxpbmcsIGZvciBleGFtcGxlLAogICAgICdvdXRwdXRfb3BlcmFuZF9sb3NzYWdlJywgaXQgbWF5IGp1c3QgY29tcGxldGUgbm9ybWFsbHkuCgogLS0gTWFjcm86IEFTTV9PVVRQVVRfQVNDSUkgKFNUUkVBTSwgUFRSLCBMRU4pCiAgICAgQSBDIHN0YXRlbWVudCB0byBvdXRwdXQgdG8gdGhlIHN0ZGlvIHN0cmVhbSBTVFJFQU0gYW4gYXNzZW1ibGVyCiAgICAgaW5zdHJ1Y3Rpb24gdG8gYXNzZW1ibGUgYSBzdHJpbmcgY29uc3RhbnQgY29udGFpbmluZyB0aGUgTEVOIGJ5dGVzCiAgICAgYXQgUFRSLiAgUFRSIHdpbGwgYmUgYSBDIGV4cHJlc3Npb24gb2YgdHlwZSAnY2hhciAqJyBhbmQgTEVOIGEgQwogICAgIGV4cHJlc3Npb24gb2YgdHlwZSAnaW50Jy4KCiAgICAgSWYgdGhlIGFzc2VtYmxlciBoYXMgYSAnLmFzY2lpJyBwc2V1ZG8tb3AgYXMgZm91bmQgaW4gdGhlIEJlcmtlbGV5CiAgICAgVW5peCBhc3NlbWJsZXIsIGRvIG5vdCBkZWZpbmUgdGhlIG1hY3JvICdBU01fT1VUUFVUX0FTQ0lJJy4KCiAtLSBNYWNybzogQVNNX09VVFBVVF9GREVTQyAoU1RSRUFNLCBERUNMLCBOKQogICAgIEEgQyBzdGF0ZW1lbnQgdG8gb3V0cHV0IHdvcmQgTiBvZiBhIGZ1bmN0aW9uIGRlc2NyaXB0b3IgZm9yIERFQ0wuCiAgICAgVGhpcyBtdXN0IGJlIGRlZmluZWQgaWYgJ1RBUkdFVF9WVEFCTEVfVVNFU19ERVNDUklQVE9SUycgaXMKICAgICBkZWZpbmVkLCBhbmQgaXMgb3RoZXJ3aXNlIHVudXNlZC4KCiAtLSBNYWNybzogQ09OU1RBTlRfUE9PTF9CRUZPUkVfRlVOQ1RJT04KICAgICBZb3UgbWF5IGRlZmluZSB0aGlzIG1hY3JvIGFzIGEgQyBleHByZXNzaW9uLiAgWW91IHNob3VsZCBkZWZpbmUgdGhlCiAgICAgZXhwcmVzc2lvbiB0byBoYXZlIGEgbm9uemVybyB2YWx1ZSBpZiBHQ0Mgc2hvdWxkIG91dHB1dCB0aGUKICAgICBjb25zdGFudCBwb29sIGZvciBhIGZ1bmN0aW9uIGJlZm9yZSB0aGUgY29kZSBmb3IgdGhlIGZ1bmN0aW9uLCBvciBhCiAgICAgemVybyB2YWx1ZSBpZiBHQ0Mgc2hvdWxkIG91dHB1dCB0aGUgY29uc3RhbnQgcG9vbCBhZnRlciB0aGUKICAgICBmdW5jdGlvbi4gIElmIHlvdSBkbyBub3QgZGVmaW5lIHRoaXMgbWFjcm8sIHRoZSB1c3VhbCBjYXNlLCBHQ0MKICAgICB3aWxsIG91dHB1dCB0aGUgY29uc3RhbnQgcG9vbCBiZWZvcmUgdGhlIGZ1bmN0aW9uLgoKIC0tIE1hY3JvOiBBU01fT1VUUFVUX1BPT0xfUFJPTE9HVUUgKEZJTEUsIEZVTk5BTUUsIEZVTkRFQ0wsIFNJWkUpCiAgICAgQSBDIHN0YXRlbWVudCB0byBvdXRwdXQgYXNzZW1ibGVyIGNvbW1hbmRzIHRvIGRlZmluZSB0aGUgc3RhcnQgb2YKICAgICB0aGUgY29uc3RhbnQgcG9vbCBmb3IgYSBmdW5jdGlvbi4gIEZVTk5BTUUgaXMgYSBzdHJpbmcgZ2l2aW5nIHRoZQogICAgIG5hbWUgb2YgdGhlIGZ1bmN0aW9uLiAgU2hvdWxkIHRoZSByZXR1cm4gdHlwZSBvZiB0aGUgZnVuY3Rpb24gYmUKICAgICByZXF1aXJlZCwgaXQgY2FuIGJlIG9idGFpbmVkIHZpYSBGVU5ERUNMLiAgU0laRSBpcyB0aGUgc2l6ZSwgaW4KICAgICBieXRlcywgb2YgdGhlIGNvbnN0YW50IHBvb2wgdGhhdCB3aWxsIGJlIHdyaXR0ZW4gaW1tZWRpYXRlbHkgYWZ0ZXIKICAgICB0aGlzIGNhbGwuCgogICAgIElmIG5vIGNvbnN0YW50LXBvb2wgcHJlZml4IGlzIHJlcXVpcmVkLCB0aGUgdXN1YWwgY2FzZSwgdGhpcyBtYWNybwogICAgIG5lZWQgbm90IGJlIGRlZmluZWQuCgogLS0gTWFjcm86IEFTTV9PVVRQVVRfU1BFQ0lBTF9QT09MX0VOVFJZIChGSUxFLCBYLCBNT0RFLCBBTElHTiwgTEFCRUxOTywKICAgICAgICAgIEpVTVBUTykKICAgICBBIEMgc3RhdGVtZW50ICh3aXRoIG9yIHdpdGhvdXQgc2VtaWNvbG9uKSB0byBvdXRwdXQgYSBjb25zdGFudCBpbgogICAgIHRoZSBjb25zdGFudCBwb29sLCBpZiBpdCBuZWVkcyBzcGVjaWFsIHRyZWF0bWVudC4gIChUaGlzIG1hY3JvIG5lZWQKICAgICBub3QgZG8gYW55dGhpbmcgZm9yIFJUTCBleHByZXNzaW9ucyB0aGF0IGNhbiBiZSBvdXRwdXQgbm9ybWFsbHkuKQoKICAgICBUaGUgYXJndW1lbnQgRklMRSBpcyB0aGUgc3RhbmRhcmQgSS9PIHN0cmVhbSB0byBvdXRwdXQgdGhlCiAgICAgYXNzZW1ibGVyIGNvZGUgb24uICBYIGlzIHRoZSBSVEwgZXhwcmVzc2lvbiBmb3IgdGhlIGNvbnN0YW50IHRvCiAgICAgb3V0cHV0LCBhbmQgTU9ERSBpcyB0aGUgbWFjaGluZSBtb2RlIChpbiBjYXNlIFggaXMgYSAnY29uc3RfaW50JykuCiAgICAgQUxJR04gaXMgdGhlIHJlcXVpcmVkIGFsaWdubWVudCBmb3IgdGhlIHZhbHVlIFg7IHlvdSBzaG91bGQgb3V0cHV0CiAgICAgYW4gYXNzZW1ibGVyIGRpcmVjdGl2ZSB0byBmb3JjZSB0aGlzIG11Y2ggYWxpZ25tZW50LgoKICAgICBUaGUgYXJndW1lbnQgTEFCRUxOTyBpcyBhIG51bWJlciB0byB1c2UgaW4gYW4gaW50ZXJuYWwgbGFiZWwgZm9yCiAgICAgdGhlIGFkZHJlc3Mgb2YgdGhpcyBwb29sIGVudHJ5LiAgVGhlIGRlZmluaXRpb24gb2YgdGhpcyBtYWNybyBpcwogICAgIHJlc3BvbnNpYmxlIGZvciBvdXRwdXR0aW5nIHRoZSBsYWJlbCBkZWZpbml0aW9uIGF0IHRoZSBwcm9wZXIKICAgICBwbGFjZS4gIEhlcmUgaXMgaG93IHRvIGRvIHRoaXM6CgogICAgICAgICAgKCp0YXJnZXRtLmFzbV9vdXQuaW50ZXJuYWxfbGFiZWwpIChGSUxFLCAiTEMiLCBMQUJFTE5PKTsKCiAgICAgV2hlbiB5b3Ugb3V0cHV0IGEgcG9vbCBlbnRyeSBzcGVjaWFsbHksIHlvdSBzaG91bGQgZW5kIHdpdGggYQogICAgICdnb3RvJyB0byB0aGUgbGFiZWwgSlVNUFRPLiAgVGhpcyB3aWxsIHByZXZlbnQgdGhlIHNhbWUgcG9vbCBlbnRyeQogICAgIGZyb20gYmVpbmcgb3V0cHV0IGEgc2Vjb25kIHRpbWUgaW4gdGhlIHVzdWFsIG1hbm5lci4KCiAgICAgWW91IG5lZWQgbm90IGRlZmluZSB0aGlzIG1hY3JvIGlmIGl0IHdvdWxkIGRvIG5vdGhpbmcuCgogLS0gTWFjcm86IEFTTV9PVVRQVVRfUE9PTF9FUElMT0dVRSAoRklMRSBGVU5OQU1FIEZVTkRFQ0wgU0laRSkKICAgICBBIEMgc3RhdGVtZW50IHRvIG91dHB1dCBhc3NlbWJsZXIgY29tbWFuZHMgdG8gYXQgdGhlIGVuZCBvZiB0aGUKICAgICBjb25zdGFudCBwb29sIGZvciBhIGZ1bmN0aW9uLiAgRlVOTkFNRSBpcyBhIHN0cmluZyBnaXZpbmcgdGhlIG5hbWUKICAgICBvZiB0aGUgZnVuY3Rpb24uICBTaG91bGQgdGhlIHJldHVybiB0eXBlIG9mIHRoZSBmdW5jdGlvbiBiZQogICAgIHJlcXVpcmVkLCB5b3UgY2FuIG9idGFpbiBpdCB2aWEgRlVOREVDTC4gIFNJWkUgaXMgdGhlIHNpemUsIGluCiAgICAgYnl0ZXMsIG9mIHRoZSBjb25zdGFudCBwb29sIHRoYXQgR0NDIHdyb3RlIGltbWVkaWF0ZWx5IGJlZm9yZSB0aGlzCiAgICAgY2FsbC4KCiAgICAgSWYgbm8gY29uc3RhbnQtcG9vbCBlcGlsb2d1ZSBpcyByZXF1aXJlZCwgdGhlIHVzdWFsIGNhc2UsIHlvdSBuZWVkCiAgICAgbm90IGRlZmluZSB0aGlzIG1hY3JvLgoKIC0tIE1hY3JvOiBJU19BU01fTE9HSUNBTF9MSU5FX1NFUEFSQVRPUiAoQywgU1RSKQogICAgIERlZmluZSB0aGlzIG1hY3JvIGFzIGEgQyBleHByZXNzaW9uIHdoaWNoIGlzIG5vbnplcm8gaWYgQyBpcyB1c2VkCiAgICAgYXMgYSBsb2dpY2FsIGxpbmUgc2VwYXJhdG9yIGJ5IHRoZSBhc3NlbWJsZXIuICBTVFIgcG9pbnRzIHRvIHRoZQogICAgIHBvc2l0aW9uIGluIHRoZSBzdHJpbmcgd2hlcmUgQyB3YXMgZm91bmQ7IHRoaXMgY2FuIGJlIHVzZWQgaWYgYQogICAgIGxpbmUgc2VwYXJhdG9yIHVzZXMgbXVsdGlwbGUgY2hhcmFjdGVycy4KCiAgICAgSWYgeW91IGRvIG5vdCBkZWZpbmUgdGhpcyBtYWNybywgdGhlIGRlZmF1bHQgaXMgdGhhdCBvbmx5IHRoZQogICAgIGNoYXJhY3RlciAnOycgaXMgdHJlYXRlZCBhcyBhIGxvZ2ljYWwgbGluZSBzZXBhcmF0b3IuCgogLS0gVGFyZ2V0IEhvb2s6IGNvbnN0IGNoYXIgKiBUQVJHRVRfQVNNX09QRU5fUEFSRU4KIC0tIFRhcmdldCBIb29rOiBjb25zdCBjaGFyICogVEFSR0VUX0FTTV9DTE9TRV9QQVJFTgogICAgIFRoZXNlIHRhcmdldCBob29rcyBhcmUgQyBzdHJpbmcgY29uc3RhbnRzLCBkZXNjcmliaW5nIHRoZSBzeW50YXggaW4KICAgICB0aGUgYXNzZW1ibGVyIGZvciBncm91cGluZyBhcml0aG1ldGljIGV4cHJlc3Npb25zLiAgSWYgbm90CiAgICAgb3ZlcnJpZGRlbiwgdGhleSBkZWZhdWx0IHRvIG5vcm1hbCBwYXJlbnRoZXNlcywgd2hpY2ggaXMgY29ycmVjdAogICAgIGZvciBtb3N0IGFzc2VtYmxlcnMuCgogVGhlc2UgbWFjcm9zIGFyZSBwcm92aWRlZCBieSAncmVhbC5oJyBmb3Igd3JpdGluZyB0aGUgZGVmaW5pdGlvbnMgb2YKJ0FTTV9PVVRQVVRfRE9VQkxFJyBhbmQgdGhlIGxpa2U6CgogLS0gTWFjcm86IFJFQUxfVkFMVUVfVE9fVEFSR0VUX1NJTkdMRSAoWCwgTCkKIC0tIE1hY3JvOiBSRUFMX1ZBTFVFX1RPX1RBUkdFVF9ET1VCTEUgKFgsIEwpCiAtLSBNYWNybzogUkVBTF9WQUxVRV9UT19UQVJHRVRfTE9OR19ET1VCTEUgKFgsIEwpCiAtLSBNYWNybzogUkVBTF9WQUxVRV9UT19UQVJHRVRfREVDSU1BTDMyIChYLCBMKQogLS0gTWFjcm86IFJFQUxfVkFMVUVfVE9fVEFSR0VUX0RFQ0lNQUw2NCAoWCwgTCkKIC0tIE1hY3JvOiBSRUFMX1ZBTFVFX1RPX1RBUkdFVF9ERUNJTUFMMTI4IChYLCBMKQogICAgIFRoZXNlIHRyYW5zbGF0ZSBYLCBvZiB0eXBlICdSRUFMX1ZBTFVFX1RZUEUnLCB0byB0aGUgdGFyZ2V0J3MKICAgICBmbG9hdGluZyBwb2ludCByZXByZXNlbnRhdGlvbiwgYW5kIHN0b3JlIGl0cyBiaXQgcGF0dGVybiBpbiB0aGUKICAgICB2YXJpYWJsZSBMLiAgRm9yICdSRUFMX1ZBTFVFX1RPX1RBUkdFVF9TSU5HTEUnIGFuZAogICAgICdSRUFMX1ZBTFVFX1RPX1RBUkdFVF9ERUNJTUFMMzInLCB0aGlzIHZhcmlhYmxlIHNob3VsZCBiZSBhIHNpbXBsZQogICAgICdsb25nIGludCcuICBGb3IgdGhlIG90aGVycywgaXQgc2hvdWxkIGJlIGFuIGFycmF5IG9mICdsb25nIGludCcuCiAgICAgVGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGlzIGFycmF5IGlzIGRldGVybWluZWQgYnkgdGhlIHNpemUgb2YKICAgICB0aGUgZGVzaXJlZCB0YXJnZXQgZmxvYXRpbmcgcG9pbnQgZGF0YSB0eXBlOiAzMiBiaXRzIG9mIGl0IGdvIGluCiAgICAgZWFjaCAnbG9uZyBpbnQnIGFycmF5IGVsZW1lbnQuICBFYWNoIGFycmF5IGVsZW1lbnQgaG9sZHMgMzIgYml0cyBvZgogICAgIHRoZSByZXN1bHQsIGV2ZW4gaWYgJ2xvbmcgaW50JyBpcyB3aWRlciB0aGFuIDMyIGJpdHMgb24gdGhlIGhvc3QKICAgICBtYWNoaW5lLgoKICAgICBUaGUgYXJyYXkgZWxlbWVudCB2YWx1ZXMgYXJlIGRlc2lnbmVkIHNvIHRoYXQgeW91IGNhbiBwcmludCB0aGVtCiAgICAgb3V0IHVzaW5nICdmcHJpbnRmJyBpbiB0aGUgb3JkZXIgdGhleSBzaG91bGQgYXBwZWFyIGluIHRoZSB0YXJnZXQKICAgICBtYWNoaW5lJ3MgbWVtb3J5LgoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IFVuaW5pdGlhbGl6ZWQgRGF0YSwgIE5leHQ6IExhYmVsIE91dHB1dCwgIFByZXY6IERhdGEgT3V0cHV0LCAgVXA6IEFzc2VtYmxlciBGb3JtYXQKCjE1LjIxLjMgT3V0cHV0IG9mIFVuaW5pdGlhbGl6ZWQgVmFyaWFibGVzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpFYWNoIG9mIHRoZSBtYWNyb3MgaW4gdGhpcyBzZWN0aW9uIGlzIHVzZWQgdG8gZG8gdGhlIHdob2xlIGpvYiBvZgpvdXRwdXR0aW5nIGEgc2luZ2xlIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUuCgogLS0gTWFjcm86IEFTTV9PVVRQVVRfQ09NTU9OIChTVFJFQU0sIE5BTUUsIFNJWkUsIFJPVU5ERUQpCiAgICAgQSBDIHN0YXRlbWVudCAoc2FucyBzZW1pY29sb24pIHRvIG91dHB1dCB0byB0aGUgc3RkaW8gc3RyZWFtIFNUUkVBTQogICAgIHRoZSBhc3NlbWJsZXIgZGVmaW5pdGlvbiBvZiBhIGNvbW1vbi1sYWJlbCBuYW1lZCBOQU1FIHdob3NlIHNpemUgaXMKICAgICBTSVpFIGJ5dGVzLiAgVGhlIHZhcmlhYmxlIFJPVU5ERUQgaXMgdGhlIHNpemUgcm91bmRlZCB1cCB0bwogICAgIHdoYXRldmVyIGFsaWdubWVudCB0aGUgY2FsbGVyIHdhbnRzLgoKICAgICBVc2UgdGhlIGV4cHJlc3Npb24gJ2Fzc2VtYmxlX25hbWUgKFNUUkVBTSwgTkFNRSknIHRvIG91dHB1dCB0aGUKICAgICBuYW1lIGl0c2VsZjsgYmVmb3JlIGFuZCBhZnRlciB0aGF0LCBvdXRwdXQgdGhlIGFkZGl0aW9uYWwgYXNzZW1ibGVyCiAgICAgc3ludGF4IGZvciBkZWZpbmluZyB0aGUgbmFtZSwgYW5kIGEgbmV3bGluZS4KCiAgICAgVGhpcyBtYWNybyBjb250cm9scyBob3cgdGhlIGFzc2VtYmxlciBkZWZpbml0aW9ucyBvZiB1bmluaXRpYWxpemVkCiAgICAgY29tbW9uIGdsb2JhbCB2YXJpYWJsZXMgYXJlIG91dHB1dC4KCiAtLSBNYWNybzogQVNNX09VVFBVVF9BTElHTkVEX0NPTU1PTiAoU1RSRUFNLCBOQU1FLCBTSVpFLCBBTElHTk1FTlQpCiAgICAgTGlrZSAnQVNNX09VVFBVVF9DT01NT04nIGV4Y2VwdCB0YWtlcyB0aGUgcmVxdWlyZWQgYWxpZ25tZW50IGFzIGEKICAgICBzZXBhcmF0ZSwgZXhwbGljaXQgYXJndW1lbnQuICBJZiB5b3UgZGVmaW5lIHRoaXMgbWFjcm8sIGl0IGlzIHVzZWQKICAgICBpbiBwbGFjZSBvZiAnQVNNX09VVFBVVF9DT01NT04nLCBhbmQgZ2l2ZXMgeW91IG1vcmUgZmxleGliaWxpdHkgaW4KICAgICBoYW5kbGluZyB0aGUgcmVxdWlyZWQgYWxpZ25tZW50IG9mIHRoZSB2YXJpYWJsZS4gIFRoZSBhbGlnbm1lbnQgaXMKICAgICBzcGVjaWZpZWQgYXMgdGhlIG51bWJlciBvZiBiaXRzLgoKIC0tIE1hY3JvOiBBU01fT1VUUFVUX0FMSUdORURfREVDTF9DT01NT04gKFNUUkVBTSwgREVDTCwgTkFNRSwgU0laRSwKICAgICAgICAgIEFMSUdOTUVOVCkKICAgICBMaWtlICdBU01fT1VUUFVUX0FMSUdORURfQ09NTU9OJyBleGNlcHQgdGhhdCBERUNMIG9mIHRoZSB2YXJpYWJsZQogICAgIHRvIGJlIG91dHB1dCwgaWYgdGhlcmUgaXMgb25lLCBvciAnTlVMTF9UUkVFJyBpZiB0aGVyZSBpcyBubwogICAgIGNvcnJlc3BvbmRpbmcgdmFyaWFibGUuICBJZiB5b3UgZGVmaW5lIHRoaXMgbWFjcm8sIEdDQyB3aWxsIHVzZSBpdAogICAgIGluIHBsYWNlIG9mIGJvdGggJ0FTTV9PVVRQVVRfQ09NTU9OJyBhbmQKICAgICAnQVNNX09VVFBVVF9BTElHTkVEX0NPTU1PTicuICBEZWZpbmUgdGhpcyBtYWNybyB3aGVuIHlvdSBuZWVkIHRvCiAgICAgc2VlIHRoZSB2YXJpYWJsZSdzIGRlY2wgaW4gb3JkZXIgdG8gY2hvc2Ugd2hhdCB0byBvdXRwdXQuCgogLS0gTWFjcm86IEFTTV9PVVRQVVRfQlNTIChTVFJFQU0sIERFQ0wsIE5BTUUsIFNJWkUsIFJPVU5ERUQpCiAgICAgQSBDIHN0YXRlbWVudCAoc2FucyBzZW1pY29sb24pIHRvIG91dHB1dCB0byB0aGUgc3RkaW8gc3RyZWFtIFNUUkVBTQogICAgIHRoZSBhc3NlbWJsZXIgZGVmaW5pdGlvbiBvZiB1bmluaXRpYWxpemVkIGdsb2JhbCBERUNMIG5hbWVkIE5BTUUKICAgICB3aG9zZSBzaXplIGlzIFNJWkUgYnl0ZXMuICBUaGUgdmFyaWFibGUgUk9VTkRFRCBpcyB0aGUgc2l6ZSByb3VuZGVkCiAgICAgdXAgdG8gd2hhdGV2ZXIgYWxpZ25tZW50IHRoZSBjYWxsZXIgd2FudHMuCgogICAgIFRyeSB0byB1c2UgZnVuY3Rpb24gJ2FzbV9vdXRwdXRfYnNzJyBkZWZpbmVkIGluICd2YXJhc20uYycgd2hlbgogICAgIGRlZmluaW5nIHRoaXMgbWFjcm8uICBJZiB1bmFibGUsIHVzZSB0aGUgZXhwcmVzc2lvbiAnYXNzZW1ibGVfbmFtZQogICAgIChTVFJFQU0sIE5BTUUpJyB0byBvdXRwdXQgdGhlIG5hbWUgaXRzZWxmOyBiZWZvcmUgYW5kIGFmdGVyIHRoYXQsCiAgICAgb3V0cHV0IHRoZSBhZGRpdGlvbmFsIGFzc2VtYmxlciBzeW50YXggZm9yIGRlZmluaW5nIHRoZSBuYW1lLCBhbmQgYQogICAgIG5ld2xpbmUuCgogICAgIFRoZXJlIGFyZSB0d28gd2F5cyBvZiBoYW5kbGluZyBnbG9iYWwgQlNTLiAgT25lIGlzIHRvIGRlZmluZSBlaXRoZXIKICAgICB0aGlzIG1hY3JvIG9yIGl0cyBhbGlnbmVkIGNvdW50ZXJwYXJ0LCAnQVNNX09VVFBVVF9BTElHTkVEX0JTUycuCiAgICAgVGhlIG90aGVyIGlzIHRvIGhhdmUgJ1RBUkdFVF9BU01fU0VMRUNUX1NFQ1RJT04nIHJldHVybiBhCiAgICAgc3dpdGNoYWJsZSBCU1Mgc2VjdGlvbiAoKm5vdGUKICAgICBUQVJHRVRfSEFWRV9TV0lUQ0hBQkxFX0JTU19TRUNUSU9OUzo6KS4gIFlvdSBkbyBub3QgbmVlZCB0byBkbwogICAgIGJvdGguCgogICAgIFNvbWUgbGFuZ3VhZ2VzIGRvIG5vdCBoYXZlICdjb21tb24nIGRhdGEsIGFuZCByZXF1aXJlIGEgbm9uLWNvbW1vbgogICAgIGZvcm0gb2YgZ2xvYmFsIEJTUyBpbiBvcmRlciB0byBoYW5kbGUgdW5pbml0aWFsaXplZCBnbG9iYWxzCiAgICAgZWZmaWNpZW50bHkuICBDKysgaXMgb25lIGV4YW1wbGUgb2YgdGhpcy4gIEhvd2V2ZXIsIGlmIHRoZSB0YXJnZXQKICAgICBkb2VzIG5vdCBzdXBwb3J0IGdsb2JhbCBCU1MsIHRoZSBmcm9udCBlbmQgbWF5IGNob29zZSB0byBtYWtlCiAgICAgZ2xvYmFscyBjb21tb24gaW4gb3JkZXIgdG8gc2F2ZSBzcGFjZSBpbiB0aGUgb2JqZWN0IGZpbGUuCgogLS0gTWFjcm86IEFTTV9PVVRQVVRfQUxJR05FRF9CU1MgKFNUUkVBTSwgREVDTCwgTkFNRSwgU0laRSwgQUxJR05NRU5UKQogICAgIExpa2UgJ0FTTV9PVVRQVVRfQlNTJyBleGNlcHQgdGFrZXMgdGhlIHJlcXVpcmVkIGFsaWdubWVudCBhcyBhCiAgICAgc2VwYXJhdGUsIGV4cGxpY2l0IGFyZ3VtZW50LiAgSWYgeW91IGRlZmluZSB0aGlzIG1hY3JvLCBpdCBpcyB1c2VkCiAgICAgaW4gcGxhY2Ugb2YgJ0FTTV9PVVRQVVRfQlNTJywgYW5kIGdpdmVzIHlvdSBtb3JlIGZsZXhpYmlsaXR5IGluCiAgICAgaGFuZGxpbmcgdGhlIHJlcXVpcmVkIGFsaWdubWVudCBvZiB0aGUgdmFyaWFibGUuICBUaGUgYWxpZ25tZW50IGlzCiAgICAgc3BlY2lmaWVkIGFzIHRoZSBudW1iZXIgb2YgYml0cy4KCiAgICAgVHJ5IHRvIHVzZSBmdW5jdGlvbiAnYXNtX291dHB1dF9hbGlnbmVkX2JzcycgZGVmaW5lZCBpbiBmaWxlCiAgICAgJ3ZhcmFzbS5jJyB3aGVuIGRlZmluaW5nIHRoaXMgbWFjcm8uCgogLS0gTWFjcm86IEFTTV9PVVRQVVRfTE9DQUwgKFNUUkVBTSwgTkFNRSwgU0laRSwgUk9VTkRFRCkKICAgICBBIEMgc3RhdGVtZW50IChzYW5zIHNlbWljb2xvbikgdG8gb3V0cHV0IHRvIHRoZSBzdGRpbyBzdHJlYW0gU1RSRUFNCiAgICAgdGhlIGFzc2VtYmxlciBkZWZpbml0aW9uIG9mIGEgbG9jYWwtY29tbW9uLWxhYmVsIG5hbWVkIE5BTUUgd2hvc2UKICAgICBzaXplIGlzIFNJWkUgYnl0ZXMuICBUaGUgdmFyaWFibGUgUk9VTkRFRCBpcyB0aGUgc2l6ZSByb3VuZGVkIHVwIHRvCiAgICAgd2hhdGV2ZXIgYWxpZ25tZW50IHRoZSBjYWxsZXIgd2FudHMuCgogICAgIFVzZSB0aGUgZXhwcmVzc2lvbiAnYXNzZW1ibGVfbmFtZSAoU1RSRUFNLCBOQU1FKScgdG8gb3V0cHV0IHRoZQogICAgIG5hbWUgaXRzZWxmOyBiZWZvcmUgYW5kIGFmdGVyIHRoYXQsIG91dHB1dCB0aGUgYWRkaXRpb25hbCBhc3NlbWJsZXIKICAgICBzeW50YXggZm9yIGRlZmluaW5nIHRoZSBuYW1lLCBhbmQgYSBuZXdsaW5lLgoKICAgICBUaGlzIG1hY3JvIGNvbnRyb2xzIGhvdyB0aGUgYXNzZW1ibGVyIGRlZmluaXRpb25zIG9mIHVuaW5pdGlhbGl6ZWQKICAgICBzdGF0aWMgdmFyaWFibGVzIGFyZSBvdXRwdXQuCgogLS0gTWFjcm86IEFTTV9PVVRQVVRfQUxJR05FRF9MT0NBTCAoU1RSRUFNLCBOQU1FLCBTSVpFLCBBTElHTk1FTlQpCiAgICAgTGlrZSAnQVNNX09VVFBVVF9MT0NBTCcgZXhjZXB0IHRha2VzIHRoZSByZXF1aXJlZCBhbGlnbm1lbnQgYXMgYQogICAgIHNlcGFyYXRlLCBleHBsaWNpdCBhcmd1bWVudC4gIElmIHlvdSBkZWZpbmUgdGhpcyBtYWNybywgaXQgaXMgdXNlZAogICAgIGluIHBsYWNlIG9mICdBU01fT1VUUFVUX0xPQ0FMJywgYW5kIGdpdmVzIHlvdSBtb3JlIGZsZXhpYmlsaXR5IGluCiAgICAgaGFuZGxpbmcgdGhlIHJlcXVpcmVkIGFsaWdubWVudCBvZiB0aGUgdmFyaWFibGUuICBUaGUgYWxpZ25tZW50IGlzCiAgICAgc3BlY2lmaWVkIGFzIHRoZSBudW1iZXIgb2YgYml0cy4KCiAtLSBNYWNybzogQVNNX09VVFBVVF9BTElHTkVEX0RFQ0xfTE9DQUwgKFNUUkVBTSwgREVDTCwgTkFNRSwgU0laRSwKICAgICAgICAgIEFMSUdOTUVOVCkKICAgICBMaWtlICdBU01fT1VUUFVUX0FMSUdORURfREVDTCcgZXhjZXB0IHRoYXQgREVDTCBvZiB0aGUgdmFyaWFibGUgdG8KICAgICBiZSBvdXRwdXQsIGlmIHRoZXJlIGlzIG9uZSwgb3IgJ05VTExfVFJFRScgaWYgdGhlcmUgaXMgbm8KICAgICBjb3JyZXNwb25kaW5nIHZhcmlhYmxlLiAgSWYgeW91IGRlZmluZSB0aGlzIG1hY3JvLCBHQ0Mgd2lsbCB1c2UgaXQKICAgICBpbiBwbGFjZSBvZiBib3RoICdBU01fT1VUUFVUX0RFQ0wnIGFuZCAnQVNNX09VVFBVVF9BTElHTkVEX0RFQ0wnLgogICAgIERlZmluZSB0aGlzIG1hY3JvIHdoZW4geW91IG5lZWQgdG8gc2VlIHRoZSB2YXJpYWJsZSdzIGRlY2wgaW4gb3JkZXIKICAgICB0byBjaG9zZSB3aGF0IHRvIG91dHB1dC4KCh8KRmlsZTogZ2NjaW50LmluZm8sICBOb2RlOiBMYWJlbCBPdXRwdXQsICBOZXh0OiBJbml0aWFsaXphdGlvbiwgIFByZXY6IFVuaW5pdGlhbGl6ZWQgRGF0YSwgIFVwOiBBc3NlbWJsZXIgRm9ybWF0CgoxNS4yMS40IE91dHB1dCBhbmQgR2VuZXJhdGlvbiBvZiBMYWJlbHMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpUaGlzIGlzIGFib3V0IG91dHB1dHRpbmcgbGFiZWxzLgoKIC0tIE1hY3JvOiBBU01fT1VUUFVUX0xBQkVMIChTVFJFQU0sIE5BTUUpCiAgICAgQSBDIHN0YXRlbWVudCAoc2FucyBzZW1pY29sb24pIHRvIG91dHB1dCB0byB0aGUgc3RkaW8gc3RyZWFtIFNUUkVBTQogICAgIHRoZSBhc3NlbWJsZXIgZGVmaW5pdGlvbiBvZiBhIGxhYmVsIG5hbWVkIE5BTUUuICBVc2UgdGhlIGV4cHJlc3Npb24KICAgICAnYXNzZW1ibGVfbmFtZSAoU1RSRUFNLCBOQU1FKScgdG8gb3V0cHV0IHRoZSBuYW1lIGl0c2VsZjsgYmVmb3JlCiAgICAgYW5kIGFmdGVyIHRoYXQsIG91dHB1dCB0aGUgYWRkaXRpb25hbCBhc3NlbWJsZXIgc3ludGF4IGZvciBkZWZpbmluZwogICAgIHRoZSBuYW1lLCBhbmQgYSBuZXdsaW5lLiAgQSBkZWZhdWx0IGRlZmluaXRpb24gb2YgdGhpcyBtYWNybyBpcwogICAgIHByb3ZpZGVkIHdoaWNoIGlzIGNvcnJlY3QgZm9yIG1vc3Qgc3lzdGVtcy4KCiAtLSBNYWNybzogQVNNX09VVFBVVF9JTlRFUk5BTF9MQUJFTCAoU1RSRUFNLCBOQU1FKQogICAgIElkZW50aWNhbCB0byAnQVNNX09VVFBVVF9MQUJFTCcsIGV4Y2VwdCB0aGF0IE5BTUUgaXMga25vd24gdG8gcmVmZXIKICAgICB0byBhIGNvbXBpbGVyLWdlbmVyYXRlZCBsYWJlbC4gIFRoZSBkZWZhdWx0IGRlZmluaXRpb24gdXNlcwogICAgICdhc3NlbWJsZV9uYW1lX3JhdycsIHdoaWNoIGlzIGxpa2UgJ2Fzc2VtYmxlX25hbWUnIGV4Y2VwdCB0aGF0IGl0CiAgICAgaXMgbW9yZSBlZmZpY2llbnQuCgogLS0gTWFjcm86IFNJWkVfQVNNX09QCiAgICAgQSBDIHN0cmluZyBjb250YWluaW5nIHRoZSBhcHByb3ByaWF0ZSBhc3NlbWJsZXIgZGlyZWN0aXZlIHRvCiAgICAgc3BlY2lmeSB0aGUgc2l6ZSBvZiBhIHN5bWJvbCwgd2l0aG91dCBhbnkgYXJndW1lbnRzLiAgT24gc3lzdGVtcwogICAgIHRoYXQgdXNlIEVMRiwgdGhlIGRlZmF1bHQgKGluICdjb25maWcvZWxmb3MuaCcpIGlzICciXHQuc2l6ZVx0Iic7CiAgICAgb24gb3RoZXIgc3lzdGVtcywgdGhlIGRlZmF1bHQgaXMgbm90IHRvIGRlZmluZSB0aGlzIG1hY3JvLgoKICAgICBEZWZpbmUgdGhpcyBtYWNybyBvbmx5IGlmIGl0IGlzIGNvcnJlY3QgdG8gdXNlIHRoZSBkZWZhdWx0CiAgICAgZGVmaW5pdGlvbnMgb2YgJ0FTTV9PVVRQVVRfU0laRV9ESVJFQ1RJVkUnIGFuZAogICAgICdBU01fT1VUUFVUX01FQVNVUkVEX1NJWkUnIGZvciB5b3VyIHN5c3RlbS4gIElmIHlvdSBuZWVkIHlvdXIgb3duCiAgICAgY3VzdG9tIGRlZmluaXRpb25zIG9mIHRob3NlIG1hY3Jvcywgb3IgaWYgeW91IGRvIG5vdCBuZWVkIGV4cGxpY2l0CiAgICAgc3ltYm9sIHNpemVzIGF0IGFsbCwgZG8gbm90IGRlZmluZSB0aGlzIG1hY3JvLgoKIC0tIE1hY3JvOiBBU01fT1VUUFVUX1NJWkVfRElSRUNUSVZFIChTVFJFQU0sIE5BTUUsIFNJWkUpCiAgICAgQSBDIHN0YXRlbWVudCAoc2FucyBzZW1pY29sb24pIHRvIG91dHB1dCB0byB0aGUgc3RkaW8gc3RyZWFtIFNUUkVBTQogICAgIGEgZGlyZWN0aXZlIHRlbGxpbmcgdGhlIGFzc2VtYmxlciB0aGF0IHRoZSBzaXplIG9mIHRoZSBzeW1ib2wgTkFNRQogICAgIGlzIFNJWkUuICBTSVpFIGlzIGEgJ0hPU1RfV0lERV9JTlQnLiAgSWYgeW91IGRlZmluZSAnU0laRV9BU01fT1AnLAogICAgIGEgZGVmYXVsdCBkZWZpbml0aW9uIG9mIHRoaXMgbWFjcm8gaXMgcHJvdmlkZWQuCgogLS0gTWFjcm86IEFTTV9PVVRQVVRfTUVBU1VSRURfU0laRSAoU1RSRUFNLCBOQU1FKQogICAgIEEgQyBzdGF0ZW1lbnQgKHNhbnMgc2VtaWNvbG9uKSB0byBvdXRwdXQgdG8gdGhlIHN0ZGlvIHN0cmVhbSBTVFJFQU0KICAgICBhIGRpcmVjdGl2ZSB0ZWxsaW5nIHRoZSBhc3NlbWJsZXIgdG8gY2FsY3VsYXRlIHRoZSBzaXplIG9mIHRoZQogICAgIHN5bWJvbCBOQU1FIGJ5IHN1YnRyYWN0aW5nIGl0cyBhZGRyZXNzIGZyb20gdGhlIGN1cnJlbnQgYWRkcmVzcy4KCiAgICAgSWYgeW91IGRlZmluZSAnU0laRV9BU01fT1AnLCBhIGRlZmF1bHQgZGVmaW5pdGlvbiBvZiB0aGlzIG1hY3JvIGlzCiAgICAgcHJvdmlkZWQuICBUaGUgZGVmYXVsdCBhc3N1bWVzIHRoYXQgdGhlIGFzc2VtYmxlciByZWNvZ25pemVzIGEKICAgICBzcGVjaWFsICcuJyBzeW1ib2wgYXMgcmVmZXJyaW5nIHRvIHRoZSBjdXJyZW50IGFkZHJlc3MsIGFuZCBjYW4KICAgICBjYWxjdWxhdGUgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGlzIGFuZCBhbm90aGVyIHN5bWJvbC4gIElmIHlvdXIKICAgICBhc3NlbWJsZXIgZG9lcyBub3QgcmVjb2duaXplICcuJyBvciBjYW5ub3QgZG8gY2FsY3VsYXRpb25zIHdpdGggaXQsCiAgICAgeW91IHdpbGwgbmVlZCB0byByZWRlZmluZSAnQVNNX09VVFBVVF9NRUFTVVJFRF9TSVpFJyB0byB1c2Ugc29tZQogICAgIG90aGVyIHRlY2huaXF1ZS4KCiAtLSBNYWNybzogVFlQRV9BU01fT1AKICAgICBBIEMgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGFwcHJvcHJpYXRlIGFzc2VtYmxlciBkaXJlY3RpdmUgdG8KICAgICBzcGVjaWZ5IHRoZSB0eXBlIG9mIGEgc3ltYm9sLCB3aXRob3V0IGFueSBhcmd1bWVudHMuICBPbiBzeXN0ZW1zCiAgICAgdGhhdCB1c2UgRUxGLCB0aGUgZGVmYXVsdCAoaW4gJ2NvbmZpZy9lbGZvcy5oJykgaXMgJyJcdC50eXBlXHQiJzsKICAgICBvbiBvdGhlciBzeXN0ZW1zLCB0aGUgZGVmYXVsdCBpcyBub3QgdG8gZGVmaW5lIHRoaXMgbWFjcm8uCgogICAgIERlZmluZSB0aGlzIG1hY3JvIG9ubHkgaWYgaXQgaXMgY29ycmVjdCB0byB1c2UgdGhlIGRlZmF1bHQKICAgICBkZWZpbml0aW9uIG9mICdBU01fT1VUUFVUX1RZUEVfRElSRUNUSVZFJyBmb3IgeW91ciBzeXN0ZW0uICBJZiB5b3UKICAgICBuZWVkIHlvdXIgb3duIGN1c3RvbSBkZWZpbml0aW9uIG9mIHRoaXMgbWFjcm8sIG9yIGlmIHlvdSBkbyBub3QKICAgICBuZWVkIGV4cGxpY2l0IHN5bWJvbCB0eXBlcyBhdCBhbGwsIGRvIG5vdCBkZWZpbmUgdGhpcyBtYWNyby4KCiAtLSBNYWNybzogVFlQRV9PUEVSQU5EX0ZNVAogICAgIEEgQyBzdHJpbmcgd2hpY2ggc3BlY2lmaWVzICh1c2luZyAncHJpbnRmJyBzeW50YXgpIHRoZSBmb3JtYXQgb2YKICAgICB0aGUgc2Vjb25kIG9wZXJhbmQgdG8gJ1RZUEVfQVNNX09QJy4gIE9uIHN5c3RlbXMgdGhhdCB1c2UgRUxGLCB0aGUKICAgICBkZWZhdWx0IChpbiAnY29uZmlnL2VsZm9zLmgnKSBpcyAnIkAlcyInOyBvbiBvdGhlciBzeXN0ZW1zLCB0aGUKICAgICBkZWZhdWx0IGlzIG5vdCB0byBkZWZpbmUgdGhpcyBtYWNyby4KCiAgICAgRGVmaW5lIHRoaXMgbWFjcm8gb25seSBpZiBpdCBpcyBjb3JyZWN0IHRvIHVzZSB0aGUgZGVmYXVsdAogICAgIGRlZmluaXRpb24gb2YgJ0FTTV9PVVRQVVRfVFlQRV9ESVJFQ1RJVkUnIGZvciB5b3VyIHN5c3RlbS4gIElmIHlvdQogICAgIG5lZWQgeW91ciBvd24gY3VzdG9tIGRlZmluaXRpb24gb2YgdGhpcyBtYWNybywgb3IgaWYgeW91IGRvIG5vdAogICAgIG5lZWQgZXhwbGljaXQgc3ltYm9sIHR5cGVzIGF0IGFsbCwgZG8gbm90IGRlZmluZSB0aGlzIG1hY3JvLgoKIC0tIE1hY3JvOiBBU01fT1VUUFVUX1RZUEVfRElSRUNUSVZFIChTVFJFQU0sIFRZUEUpCiAgICAgQSBDIHN0YXRlbWVudCAoc2FucyBzZW1pY29sb24pIHRvIG91dHB1dCB0byB0aGUgc3RkaW8gc3RyZWFtIFNUUkVBTQogICAgIGEgZGlyZWN0aXZlIHRlbGxpbmcgdGhlIGFzc2VtYmxlciB0aGF0IHRoZSB0eXBlIG9mIHRoZSBzeW1ib2wgTkFNRQogICAgIGlzIFRZUEUuICBUWVBFIGlzIGEgQyBzdHJpbmc7IGN1cnJlbnRseSwgdGhhdCBzdHJpbmcgaXMgYWx3YXlzCiAgICAgZWl0aGVyICciZnVuY3Rpb24iJyBvciAnIm9iamVjdCInLCBidXQgeW91IHNob3VsZCBub3QgY291bnQgb24KICAgICB0aGlzLgoKICAgICBJZiB5b3UgZGVmaW5lICdUWVBFX0FTTV9PUCcgYW5kICdUWVBFX09QRVJBTkRfRk1UJywgYSBkZWZhdWx0CiAgICAgZGVmaW5pdGlvbiBvZiB0aGlzIG1hY3JvIGlzIHByb3ZpZGVkLgoKIC0tIE1hY3JvOiBBU01fREVDTEFSRV9GVU5DVElPTl9OQU1FIChTVFJFQU0sIE5BTUUsIERFQ0wpCiAgICAgQSBDIHN0YXRlbWVudCAoc2FucyBzZW1pY29sb24pIHRvIG91dHB1dCB0byB0aGUgc3RkaW8gc3RyZWFtIFNUUkVBTQogICAgIGFueSB0ZXh0IG5lY2Vzc2FyeSBmb3IgZGVjbGFyaW5nIHRoZSBuYW1lIE5BTUUgb2YgYSBmdW5jdGlvbiB3aGljaAogICAgIGlzIGJlaW5nIGRlZmluZWQuICBUaGlzIG1hY3JvIGlzIHJlc3BvbnNpYmxlIGZvciBvdXRwdXR0aW5nIHRoZQogICAgIGxhYmVsIGRlZmluaXRpb24gKHBlcmhhcHMgdXNpbmcgJ0FTTV9PVVRQVVRfTEFCRUwnKS4gIFRoZSBhcmd1bWVudAogICAgIERFQ0wgaXMgdGhlICdGVU5DVElPTl9ERUNMJyB0cmVlIG5vZGUgcmVwcmVzZW50aW5nIHRoZSBmdW5jdGlvbi4KCiAgICAgSWYgdGhpcyBtYWNybyBpcyBub3QgZGVmaW5lZCwgdGhlbiB0aGUgZnVuY3Rpb24gbmFtZSBpcyBkZWZpbmVkIGluCiAgICAgdGhlIHVzdWFsIG1hbm5lciBhcyBhIGxhYmVsIChieSBtZWFucyBvZiAnQVNNX09VVFBVVF9MQUJFTCcpLgoKICAgICBZb3UgbWF5IHdpc2ggdG8gdXNlICdBU01fT1VUUFVUX1RZUEVfRElSRUNUSVZFJyBpbiB0aGUgZGVmaW5pdGlvbgogICAgIG9mIHRoaXMgbWFjcm8uCgogLS0gTWFjcm86IEFTTV9ERUNMQVJFX0ZVTkNUSU9OX1NJWkUgKFNUUkVBTSwgTkFNRSwgREVDTCkKICAgICBBIEMgc3RhdGVtZW50IChzYW5zIHNlbWljb2xvbikgdG8gb3V0cHV0IHRvIHRoZSBzdGRpbyBzdHJlYW0gU1RSRUFNCiAgICAgYW55IHRleHQgbmVjZXNzYXJ5IGZvciBkZWNsYXJpbmcgdGhlIHNpemUgb2YgYSBmdW5jdGlvbiB3aGljaCBpcwogICAgIGJlaW5nIGRlZmluZWQuICBUaGUgYXJndW1lbnQgTkFNRSBpcyB0aGUgbmFtZSBvZiB0aGUgZnVuY3Rpb24uICBUaGUKICAgICBhcmd1bWVudCBERUNMIGlzIHRoZSAnRlVOQ1RJT05fREVDTCcgdHJlZSBub2RlIHJlcHJlc2VudGluZyB0aGUKICAgICBmdW5jdGlvbi4KCiAgICAgSWYgdGhpcyBtYWNybyBpcyBub3QgZGVmaW5lZCwgdGhlbiB0aGUgZnVuY3Rpb24gc2l6ZSBpcyBub3QKICAgICBkZWZpbmVkLgoKICAgICBZb3UgbWF5IHdpc2ggdG8gdXNlICdBU01fT1VUUFVUX01FQVNVUkVEX1NJWkUnIGluIHRoZSBkZWZpbml0aW9uIG9mCiAgICAgdGhpcyBtYWNyby4KCiAtLSBNYWNybzogQVNNX0RFQ0xBUkVfT0JKRUNUX05BTUUgKFNUUkVBTSwgTkFNRSwgREVDTCkKICAgICBBIEMgc3RhdGVtZW50IChzYW5zIHNlbWljb2xvbikgdG8gb3V0cHV0IHRvIHRoZSBzdGRpbyBzdHJlYW0gU1RSRUFNCiAgICAgYW55IHRleHQgbmVjZXNzYXJ5IGZvciBkZWNsYXJpbmcgdGhlIG5hbWUgTkFNRSBvZiBhbiBpbml0aWFsaXplZAogICAgIHZhcmlhYmxlIHdoaWNoIGlzIGJlaW5nIGRlZmluZWQuICBUaGlzIG1hY3JvIG11c3Qgb3V0cHV0IHRoZSBsYWJlbAogICAgIGRlZmluaXRpb24gKHBlcmhhcHMgdXNpbmcgJ0FTTV9PVVRQVVRfTEFCRUwnKS4gIFRoZSBhcmd1bWVudCBERUNMCiAgICAgaXMgdGhlICdWQVJfREVDTCcgdHJlZSBub2RlIHJlcHJlc2VudGluZyB0aGUgdmFyaWFibGUuCgogICAgIElmIHRoaXMgbWFjcm8gaXMgbm90IGRlZmluZWQsIHRoZW4gdGhlIHZhcmlhYmxlIG5hbWUgaXMgZGVmaW5lZCBpbgogICAgIHRoZSB1c3VhbCBtYW5uZXIgYXMgYSBsYWJlbCAoYnkgbWVhbnMgb2YgJ0FTTV9PVVRQVVRfTEFCRUwnKS4KCiAgICAgWW91IG1heSB3aXNoIHRvIHVzZSAnQVNNX09VVFBVVF9UWVBFX0RJUkVDVElWRScgYW5kL29yCiAgICAgJ0FTTV9PVVRQVVRfU0laRV9ESVJFQ1RJVkUnIGluIHRoZSBkZWZpbml0aW9uIG9mIHRoaXMgbWFjcm8uCgogLS0gTWFjcm86IEFTTV9ERUNMQVJFX0NPTlNUQU5UX05BTUUgKFNUUkVBTSwgTkFNRSwgRVhQLCBTSVpFKQogICAgIEEgQyBzdGF0ZW1lbnQgKHNhbnMgc2VtaWNvbG9uKSB0byBvdXRwdXQgdG8gdGhlIHN0ZGlvIHN0cmVhbSBTVFJFQU0KICAgICBhbnkgdGV4dCBuZWNlc3NhcnkgZm9yIGRlY2xhcmluZyB0aGUgbmFtZSBOQU1FIG9mIGEgY29uc3RhbnQgd2hpY2gKICAgICBpcyBiZWluZyBkZWZpbmVkLiAgVGhpcyBtYWNybyBpcyByZXNwb25zaWJsZSBmb3Igb3V0cHV0dGluZyB0aGUKICAgICBsYWJlbCBkZWZpbml0aW9uIChwZXJoYXBzIHVzaW5nICdBU01fT1VUUFVUX0xBQkVMJykuICBUaGUgYXJndW1lbnQKICAgICBFWFAgaXMgdGhlIHZhbHVlIG9mIHRoZSBjb25zdGFudCwgYW5kIFNJWkUgaXMgdGhlIHNpemUgb2YgdGhlCiAgICAgY29uc3RhbnQgaW4gYnl0ZXMuICBOQU1FIHdpbGwgYmUgYW4gaW50ZXJuYWwgbGFiZWwuCgogICAgIElmIHRoaXMgbWFjcm8gaXMgbm90IGRlZmluZWQsIHRoZW4gdGhlIE5BTUUgaXMgZGVmaW5lZCBpbiB0aGUgdXN1YWwKICAgICBtYW5uZXIgYXMgYSBsYWJlbCAoYnkgbWVhbnMgb2YgJ0FTTV9PVVRQVVRfTEFCRUwnKS4KCiAgICAgWW91IG1heSB3aXNoIHRvIHVzZSAnQVNNX09VVFBVVF9UWVBFX0RJUkVDVElWRScgaW4gdGhlIGRlZmluaXRpb24KICAgICBvZiB0aGlzIG1hY3JvLgoKIC0tIE1hY3JvOiBBU01fREVDTEFSRV9SRUdJU1RFUl9HTE9CQUwgKFNUUkVBTSwgREVDTCwgUkVHTk8sIE5BTUUpCiAgICAgQSBDIHN0YXRlbWVudCAoc2FucyBzZW1pY29sb24pIHRvIG91dHB1dCB0byB0aGUgc3RkaW8gc3RyZWFtIFNUUkVBTQogICAgIGFueSB0ZXh0IG5lY2Vzc2FyeSBmb3IgY2xhaW1pbmcgYSByZWdpc3RlciBSRUdOTyBmb3IgYSBnbG9iYWwKICAgICB2YXJpYWJsZSBERUNMIHdpdGggbmFtZSBOQU1FLgoKICAgICBJZiB5b3UgZG9uJ3QgZGVmaW5lIHRoaXMgbWFjcm8sIHRoYXQgaXMgZXF1aXZhbGVudCB0byBkZWZpbmluZyBpdAogICAgIHRvIGRvIG5vdGhpbmcuCgogLS0gTWFjcm86IEFTTV9GSU5JU0hfREVDTEFSRV9PQkpFQ1QgKFNUUkVBTSwgREVDTCwgVE9QTEVWRUwsIEFURU5EKQogICAgIEEgQyBzdGF0ZW1lbnQgKHNhbnMgc2VtaWNvbG9uKSB0byBmaW5pc2ggdXAgZGVjbGFyaW5nIGEgdmFyaWFibGUKICAgICBuYW1lIG9uY2UgdGhlIGNvbXBpbGVyIGhhcyBwcm9jZXNzZWQgaXRzIGluaXRpYWxpemVyIGZ1bGx5IGFuZCB0aHVzCiAgICAgaGFzIGhhZCBhIGNoYW5jZSB0byBkZXRlcm1pbmUgdGhlIHNpemUgb2YgYW4gYXJyYXkgd2hlbiBjb250cm9sbGVkCiAgICAgYnkgYW4gaW5pdGlhbGl6ZXIuICBUaGlzIGlzIHVzZWQgb24gc3lzdGVtcyB3aGVyZSBpdCdzIG5lY2Vzc2FyeSB0bwogICAgIGRlY2xhcmUgc29tZXRoaW5nIGFib3V0IHRoZSBzaXplIG9mIHRoZSBvYmplY3QuCgogICAgIElmIHlvdSBkb24ndCBkZWZpbmUgdGhpcyBtYWNybywgdGhhdCBpcyBlcXVpdmFsZW50IHRvIGRlZmluaW5nIGl0CiAgICAgdG8gZG8gbm90aGluZy4KCiAgICAgWW91IG1heSB3aXNoIHRvIHVzZSAnQVNNX09VVFBVVF9TSVpFX0RJUkVDVElWRScgYW5kL29yCiAgICAgJ0FTTV9PVVRQVVRfTUVBU1VSRURfU0laRScgaW4gdGhlIGRlZmluaXRpb24gb2YgdGhpcyBtYWNyby4KCiAtLSBUYXJnZXQgSG9vazogdm9pZCBUQVJHRVRfQVNNX0dMT0JBTElaRV9MQUJFTCAoRklMRSAqU1RSRUFNLCBjb25zdAogICAgICAgICAgY2hhciAqTkFNRSkKICAgICBUaGlzIHRhcmdldCBob29rIGlzIGEgZnVuY3Rpb24gdG8gb3V0cHV0IHRvIHRoZSBzdGRpbyBzdHJlYW0gU1RSRUFNCiAgICAgc29tZSBjb21tYW5kcyB0aGF0IHdpbGwgbWFrZSB0aGUgbGFiZWwgTkFNRSBnbG9iYWw7IHRoYXQgaXMsCiAgICAgYXZhaWxhYmxlIGZvciByZWZlcmVuY2UgZnJvbSBvdGhlciBmaWxlcy4KCiAgICAgVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmVsaWVzIG9uIGEgcHJvcGVyIGRlZmluaXRpb24gb2YKICAgICAnR0xPQkFMX0FTTV9PUCcuCgogLS0gVGFyZ2V0IEhvb2s6IHZvaWQgVEFSR0VUX0FTTV9HTE9CQUxJWkVfREVDTF9OQU1FIChGSUxFICpTVFJFQU0sIHRyZWUKICAgICAgICAgIERFQ0wpCiAgICAgVGhpcyB0YXJnZXQgaG9vayBpcyBhIGZ1bmN0aW9uIHRvIG91dHB1dCB0byB0aGUgc3RkaW8gc3RyZWFtIFNUUkVBTQogICAgIHNvbWUgY29tbWFuZHMgdGhhdCB3aWxsIG1ha2UgdGhlIG5hbWUgYXNzb2NpYXRlZCB3aXRoIERFQ0wgZ2xvYmFsOwogICAgIHRoYXQgaXMsIGF2YWlsYWJsZSBmb3IgcmVmZXJlbmNlIGZyb20gb3RoZXIgZmlsZXMuCgogICAgIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHVzZXMgdGhlIFRBUkdFVF9BU01fR0xPQkFMSVpFX0xBQkVMCiAgICAgdGFyZ2V0IGhvb2suCgogLS0gTWFjcm86IEFTTV9XRUFLRU5fTEFCRUwgKFNUUkVBTSwgTkFNRSkKICAgICBBIEMgc3RhdGVtZW50IChzYW5zIHNlbWljb2xvbikgdG8gb3V0cHV0IHRvIHRoZSBzdGRpbyBzdHJlYW0gU1RSRUFNCiAgICAgc29tZSBjb21tYW5kcyB0aGF0IHdpbGwgbWFrZSB0aGUgbGFiZWwgTkFNRSB3ZWFrOyB0aGF0IGlzLAogICAgIGF2YWlsYWJsZSBmb3IgcmVmZXJlbmNlIGZyb20gb3RoZXIgZmlsZXMgYnV0IG9ubHkgdXNlZCBpZiBubyBvdGhlcgogICAgIGRlZmluaXRpb24gaXMgYXZhaWxhYmxlLiAgVXNlIHRoZSBleHByZXNzaW9uICdhc3NlbWJsZV9uYW1lCiAgICAgKFNUUkVBTSwgTkFNRSknIHRvIG91dHB1dCB0aGUgbmFtZSBpdHNlbGY7IGJlZm9yZSBhbmQgYWZ0ZXIgdGhhdCwKICAgICBvdXRwdXQgdGhlIGFkZGl0aW9uYWwgYXNzZW1ibGVyIHN5bnRheCBmb3IgbWFraW5nIHRoYXQgbmFtZSB3ZWFrLAogICAgIGFuZCBhIG5ld2xpbmUuCgogICAgIElmIHlvdSBkb24ndCBkZWZpbmUgdGhpcyBtYWNybyBvciAnQVNNX1dFQUtFTl9ERUNMJywgR0NDIHdpbGwgbm90CiAgICAgc3VwcG9ydCB3ZWFrIHN5bWJvbHMgYW5kIHlvdSBzaG91bGQgbm90IGRlZmluZSB0aGUgJ1NVUFBPUlRTX1dFQUsnCiAgICAgbWFjcm8uCgogLS0gTWFjcm86IEFTTV9XRUFLRU5fREVDTCAoU1RSRUFNLCBERUNMLCBOQU1FLCBWQUxVRSkKICAgICBDb21iaW5lcyAoYW5kIHJlcGxhY2VzKSB0aGUgZnVuY3Rpb24gb2YgJ0FTTV9XRUFLRU5fTEFCRUwnIGFuZAogICAgICdBU01fT1VUUFVUX1dFQUtfQUxJQVMnLCBhbGxvd2luZyBhY2Nlc3MgdG8gdGhlIGFzc29jaWF0ZWQgZnVuY3Rpb24KICAgICBvciB2YXJpYWJsZSBkZWNsLiAgSWYgVkFMVUUgaXMgbm90ICdOVUxMJywgdGhpcyBDIHN0YXRlbWVudCBzaG91bGQKICAgICBvdXRwdXQgdG8gdGhlIHN0ZGlvIHN0cmVhbSBTVFJFQU0gYXNzZW1ibGVyIGNvZGUgd2hpY2ggZGVmaW5lcwogICAgIChlcXVhdGVzKSB0aGUgd2VhayBzeW1ib2wgTkFNRSB0byBoYXZlIHRoZSB2YWx1ZSBWQUxVRS4gIElmIFZBTFVFCiAgICAgaXMgJ05VTEwnLCBpdCBzaG91bGQgb3V0cHV0IGNvbW1hbmRzIHRvIG1ha2UgTkFNRSB3ZWFrLgoKIC0tIE1hY3JvOiBBU01fT1VUUFVUX1dFQUtSRUYgKFNUUkVBTSwgREVDTCwgTkFNRSwgVkFMVUUpCiAgICAgT3V0cHV0cyBhIGRpcmVjdGl2ZSB0aGF0IGVuYWJsZXMgTkFNRSB0byBiZSB1c2VkIHRvIHJlZmVyIHRvIHN5bWJvbAogICAgIFZBTFVFIHdpdGggd2Vhay1zeW1ib2wgc2VtYW50aWNzLiAgJ2RlY2wnIGlzIHRoZSBkZWNsYXJhdGlvbiBvZgogICAgICduYW1lJy4KCiAtLSBNYWNybzogU1VQUE9SVFNfV0VBSwogICAgIEEgQyBleHByZXNzaW9uIHdoaWNoIGV2YWx1YXRlcyB0byB0cnVlIGlmIHRoZSB0YXJnZXQgc3VwcG9ydHMgd2VhawogICAgIHN5bWJvbHMuCgogICAgIElmIHlvdSBkb24ndCBkZWZpbmUgdGhpcyBtYWNybywgJ2RlZmF1bHRzLmgnIHByb3ZpZGVzIGEgZGVmYXVsdAogICAgIGRlZmluaXRpb24uICBJZiBlaXRoZXIgJ0FTTV9XRUFLRU5fTEFCRUwnIG9yICdBU01fV0VBS0VOX0RFQ0wnIGlzCiAgICAgZGVmaW5lZCwgdGhlIGRlZmF1bHQgZGVmaW5pdGlvbiBpcyAnMSc7IG90aGVyd2lzZSwgaXQgaXMgJzAnLgogICAgIERlZmluZSB0aGlzIG1hY3JvIGlmIHlvdSB3YW50IHRvIGNvbnRyb2wgd2VhayBzeW1ib2wgc3VwcG9ydCB3aXRoIGEKICAgICBjb21waWxlciBmbGFnIHN1Y2ggYXMgJy1tZWxmJy4KCiAtLSBNYWNybzogTUFLRV9ERUNMX09ORV9PTkxZIChERUNMKQogICAgIEEgQyBzdGF0ZW1lbnQgKHNhbnMgc2VtaWNvbG9uKSB0byBtYXJrIERFQ0wgdG8gYmUgZW1pdHRlZCBhcyBhCiAgICAgcHVibGljIHN5bWJvbCBzdWNoIHRoYXQgZXh0cmEgY29waWVzIGluIG11bHRpcGxlIHRyYW5zbGF0aW9uIHVuaXRzCiAgICAgd2lsbCBiZSBkaXNjYXJkZWQgYnkgdGhlIGxpbmtlci4gIERlZmluZSB0aGlzIG1hY3JvIGlmIHlvdXIgb2JqZWN0CiAgICAgZmlsZSBmb3JtYXQgcHJvdmlkZXMgc3VwcG9ydCBmb3IgdGhpcyBjb25jZXB0LCBzdWNoIGFzIHRoZSAnQ09NREFUJwogICAgIHNlY3Rpb24gZmxhZ3MgaW4gdGhlIE1pY3Jvc29mdCBXaW5kb3dzIFBFL0NPRkYgZm9ybWF0LCBhbmQgdGhpcwogICAgIHN1cHBvcnQgcmVxdWlyZXMgY2hhbmdlcyB0byBERUNMLCBzdWNoIGFzIHB1dHRpbmcgaXQgaW4gYSBzZXBhcmF0ZQogICAgIHNlY3Rpb24uCgogLS0gTWFjcm86IFNVUFBPUlRTX09ORV9PTkxZCiAgICAgQSBDIGV4cHJlc3Npb24gd2hpY2ggZXZhbHVhdGVzIHRvIHRydWUgaWYgdGhlIHRhcmdldCBzdXBwb3J0cwogICAgIG9uZS1vbmx5IHNlbWFudGljcy4KCiAgICAgSWYgeW91IGRvbid0IGRlZmluZSB0aGlzIG1hY3JvLCAndmFyYXNtLmMnIHByb3ZpZGVzIGEgZGVmYXVsdAogICAgIGRlZmluaXRpb24uICBJZiAnTUFLRV9ERUNMX09ORV9PTkxZJyBpcyBkZWZpbmVkLCB0aGUgZGVmYXVsdAogICAgIGRlZmluaXRpb24gaXMgJzEnOyBvdGhlcndpc2UsIGl0IGlzICcwJy4gIERlZmluZSB0aGlzIG1hY3JvIGlmIHlvdQogICAgIHdhbnQgdG8gY29udHJvbCBvbmUtb25seSBzeW1ib2wgc3VwcG9ydCB3aXRoIGEgY29tcGlsZXIgZmxhZywgb3IgaWYKICAgICBzZXR0aW5nIHRoZSAnREVDTF9PTkVfT05MWScgZmxhZyBpcyBlbm91Z2ggdG8gbWFyayBhIGRlY2xhcmF0aW9uIHRvCiAgICAgYmUgZW1pdHRlZCBhcyBvbmUtb25seS4KCiAtLSBUYXJnZXQgSG9vazogdm9pZCBUQVJHRVRfQVNNX0FTU0VNQkxFX1ZJU0lCSUxJVFkgKHRyZWUgREVDTCwgY29uc3QKICAgICAgICAgIGNoYXIgKlZJU0lCSUxJVFkpCiAgICAgVGhpcyB0YXJnZXQgaG9vayBpcyBhIGZ1bmN0aW9uIHRvIG91dHB1dCB0byBBU01fT1VUX0ZJTEUgc29tZQogICAgIGNvbW1hbmRzIHRoYXQgd2lsbCBtYWtlIHRoZSBzeW1ib2wocykgYXNzb2NpYXRlZCB3aXRoIERFQ0wgaGF2ZQogICAgIGhpZGRlbiwgcHJvdGVjdGVkIG9yIGludGVybmFsIHZpc2liaWxpdHkgYXMgc3BlY2lmaWVkIGJ5CiAgICAgVklTSUJJTElUWS4KCiAtLSBNYWNybzogVEFSR0VUX1dFQUtfTk9UX0lOX0FSQ0hJVkVfVE9DCiAgICAgQSBDIGV4cHJlc3Npb24gdGhhdCBldmFsdWF0ZXMgdG8gdHJ1ZSBpZiB0aGUgdGFyZ2V0J3MgbGlua2VyCiAgICAgZXhwZWN0cyB0aGF0IHdlYWsgc3ltYm9scyBkbyBub3QgYXBwZWFyIGluIGEgc3RhdGljIGFyY2hpdmUncyB0YWJsZQogICAgIG9mIGNvbnRlbnRzLiAgVGhlIGRlZmF1bHQgaXMgJzAnLgoKICAgICBMZWF2aW5nIHdlYWsgc3ltYm9scyBvdXQgb2YgYW4gYXJjaGl2ZSdzIHRhYmxlIG9mIGNvbnRlbnRzIG1lYW5zCiAgICAgdGhhdCwgaWYgYSBzeW1ib2wgd2lsbCBvbmx5IGhhdmUgYSBkZWZpbml0aW9uIGluIG9uZSB0cmFuc2xhdGlvbgogICAgIHVuaXQgYW5kIHdpbGwgaGF2ZSB1bmRlZmluZWQgcmVmZXJlbmNlcyBmcm9tIG90aGVyIHRyYW5zbGF0aW9uCiAgICAgdW5pdHMsIHRoYXQgc3ltYm9sIHNob3VsZCBub3QgYmUgd2Vhay4gIERlZmluaW5nIHRoaXMgbWFjcm8gdG8gYmUKICAgICBub256ZXJvIHdpbGwgdGh1cyBoYXZlIHRoZSBlZmZlY3QgdGhhdCBjZXJ0YWluIHN5bWJvbHMgdGhhdCB3b3VsZAogICAgIG5vcm1hbGx5IGJlIHdlYWsgKGV4cGxpY2l0IHRlbXBsYXRlIGluc3RhbnRpYXRpb25zLCBhbmQgdnRhYmxlcyBmb3IKICAgICBwb2x5bW9ycGhpYyBjbGFzc2VzIHdpdGggbm9uaW5saW5lIGtleSBtZXRob2RzKSB3aWxsIGluc3RlYWQgYmUKICAgICBub253ZWFrLgoKICAgICBUaGUgQysrIEFCSSByZXF1aXJlcyB0aGlzIG1hY3JvIHRvIGJlIHplcm8uICBEZWZpbmUgdGhpcyBtYWNybyBmb3IKICAgICB0YXJnZXRzIHdoZXJlIGZ1bGwgQysrIEFCSSBjb21wbGlhbmNlIGlzIGltcG9zc2libGUgYW5kIHdoZXJlCiAgICAgbGlua2VyIHJlc3RyaWN0aW9ucyByZXF1aXJlIHdlYWsgc3ltYm9scyB0byBiZSBsZWZ0IG91dCBvZiBhIHN0YXRpYwogICAgIGFyY2hpdmUncyB0YWJsZSBvZiBjb250ZW50cy4KCiAtLSBNYWNybzogQVNNX09VVFBVVF9FWFRFUk5BTCAoU1RSRUFNLCBERUNMLCBOQU1FKQogICAgIEEgQyBzdGF0ZW1lbnQgKHNhbnMgc2VtaWNvbG9uKSB0byBvdXRwdXQgdG8gdGhlIHN0ZGlvIHN0cmVhbSBTVFJFQU0KICAgICBhbnkgdGV4dCBuZWNlc3NhcnkgZm9yIGRlY2xhcmluZyB0aGUgbmFtZSBvZiBhbiBleHRlcm5hbCBzeW1ib2wKICAgICBuYW1lZCBOQU1FIHdoaWNoIGlzIHJlZmVyZW5jZWQgaW4gdGhpcyBjb21waWxhdGlvbiBidXQgbm90IGRlZmluZWQuCiAgICAgVGhlIHZhbHVlIG9mIERFQ0wgaXMgdGhlIHRyZWUgbm9kZSBmb3IgdGhlIGRlY2xhcmF0aW9uLgoKICAgICBUaGlzIG1hY3JvIG5lZWQgbm90IGJlIGRlZmluZWQgaWYgaXQgZG9lcyBub3QgbmVlZCB0byBvdXRwdXQKICAgICBhbnl0aGluZy4gIFRoZSBHTlUgYXNzZW1ibGVyIGFuZCBtb3N0IFVuaXggYXNzZW1ibGVycyBkb24ndCByZXF1aXJlCiAgICAgYW55dGhpbmcuCgogLS0gVGFyZ2V0IEhvb2s6IHZvaWQgVEFSR0VUX0FTTV9FWFRFUk5BTF9MSUJDQUxMIChydHggU1lNUkVGKQogICAgIFRoaXMgdGFyZ2V0IGhvb2sgaXMgYSBmdW5jdGlvbiB0byBvdXRwdXQgdG8gQVNNX09VVF9GSUxFIGFuCiAgICAgYXNzZW1ibGVyIHBzZXVkby1vcCB0byBkZWNsYXJlIGEgbGlicmFyeSBmdW5jdGlvbiBuYW1lIGV4dGVybmFsLgogICAgIFRoZSBuYW1lIG9mIHRoZSBsaWJyYXJ5IGZ1bmN0aW9uIGlzIGdpdmVuIGJ5IFNZTVJFRiwgd2hpY2ggaXMgYQogICAgICdzeW1ib2xfcmVmJy4KCiAtLSBUYXJnZXQgSG9vazogdm9pZCBUQVJHRVRfQVNNX01BUktfREVDTF9QUkVTRVJWRUQgKHRyZWUgREVDTCkKICAgICBUaGlzIHRhcmdldCBob29rIGlzIGEgZnVuY3Rpb24gdG8gb3V0cHV0IHRvIEFTTV9PVVRfRklMRSBhbgogICAgIGFzc2VtYmxlciBkaXJlY3RpdmUgdG8gYW5ub3RhdGUgdXNlZCBzeW1ib2wuICBEYXJ3aW4gdGFyZ2V0IHVzZQogICAgIC5ub19kZWFkX2NvZGVfc3RyaXAgZGlyZWN0aXZlLgoKIC0tIE1hY3JvOiBBU01fT1VUUFVUX0xBQkVMUkVGIChTVFJFQU0sIE5BTUUpCiAgICAgQSBDIHN0YXRlbWVudCAoc2FucyBzZW1pY29sb24pIHRvIG91dHB1dCB0byB0aGUgc3RkaW8gc3RyZWFtIFNUUkVBTQogICAgIGEgcmVmZXJlbmNlIGluIGFzc2VtYmxlciBzeW50YXggdG8gYSBsYWJlbCBuYW1lZCBOQU1FLiAgVGhpcyBzaG91bGQKICAgICBhZGQgJ18nIHRvIHRoZSBmcm9udCBvZiB0aGUgbmFtZSwgaWYgdGhhdCBpcyBjdXN0b21hcnkgb24geW91cgogICAgIG9wZXJhdGluZyBzeXN0ZW0sIGFzIGl0IGlzIGluIG1vc3QgQmVya2VsZXkgVW5peCBzeXN0ZW1zLiAgVGhpcwogICAgIG1hY3JvIGlzIHVzZWQgaW4gJ2Fzc2VtYmxlX25hbWUnLgoKIC0tIE1hY3JvOiBBU01fT1VUUFVUX1NZTUJPTF9SRUYgKFNUUkVBTSwgU1lNKQogICAgIEEgQyBzdGF0ZW1lbnQgKHNhbnMgc2VtaWNvbG9uKSB0byBvdXRwdXQgYSByZWZlcmVuY2UgdG8KICAgICAnU1lNQk9MX1JFRicgU1lNLiAgSWYgbm90IGRlZmluZWQsICdhc3NlbWJsZV9uYW1lJyB3aWxsIGJlIHVzZWQgdG8KICAgICBvdXRwdXQgdGhlIG5hbWUgb2YgdGhlIHN5bWJvbC4gIFRoaXMgbWFjcm8gbWF5IGJlIHVzZWQgdG8gbW9kaWZ5CiAgICAgdGhlIHdheSBhIHN5bWJvbCBpcyByZWZlcmVuY2VkIGRlcGVuZGluZyBvbiBpbmZvcm1hdGlvbiBlbmNvZGVkIGJ5CiAgICAgJ1RBUkdFVF9FTkNPREVfU0VDVElPTl9JTkZPJy4KCiAtLSBNYWNybzogQVNNX09VVFBVVF9MQUJFTF9SRUYgKFNUUkVBTSwgQlVGKQogICAgIEEgQyBzdGF0ZW1lbnQgKHNhbnMgc2VtaWNvbG9uKSB0byBvdXRwdXQgYSByZWZlcmVuY2UgdG8gQlVGLCB0aGUKICAgICByZXN1bHQgb2YgJ0FTTV9HRU5FUkFURV9JTlRFUk5BTF9MQUJFTCcuICBJZiBub3QgZGVmaW5lZCwKICAgICAnYXNzZW1ibGVfbmFtZScgd2lsbCBiZSB1c2VkIHRvIG91dHB1dCB0aGUgbmFtZSBvZiB0aGUgc3ltYm9sLgogICAgIFRoaXMgbWFjcm8gaXMgbm90IHVzZWQgYnkgJ291dHB1dF9hc21fbGFiZWwnLCBvciB0aGUgJyVsJyBzcGVjaWZpZXIKICAgICB0aGF0IGNhbGxzIGl0OyB0aGUgaW50ZW50aW9uIGlzIHRoYXQgdGhpcyBtYWNybyBzaG91bGQgYmUgc2V0IHdoZW4KICAgICBpdCBpcyBuZWNlc3NhcnkgdG8gb3V0cHV0IGEgbGFiZWwgZGlmZmVyZW50bHkgd2hlbiBpdHMgYWRkcmVzcyBpcwogICAgIGJlaW5nIHRha2VuLgoKIC0tIFRhcmdldCBIb29rOiB2b2lkIFRBUkdFVF9BU01fSU5URVJOQUxfTEFCRUwgKEZJTEUgKlNUUkVBTSwgY29uc3QKICAgICAgICAgIGNoYXIgKlBSRUZJWCwgdW5zaWduZWQgbG9uZyBMQUJFTE5PKQogICAgIEEgZnVuY3Rpb24gdG8gb3V0cHV0IHRvIHRoZSBzdGRpbyBzdHJlYW0gU1RSRUFNIGEgbGFiZWwgd2hvc2UgbmFtZQogICAgIGlzIG1hZGUgZnJvbSB0aGUgc3RyaW5nIFBSRUZJWCBhbmQgdGhlIG51bWJlciBMQUJFTE5PLgoKICAgICBJdCBpcyBhYnNvbHV0ZWx5IGVzc2VudGlhbCB0aGF0IHRoZXNlIGxhYmVscyBiZSBkaXN0aW5jdCBmcm9tIHRoZQogICAgIGxhYmVscyB1c2VkIGZvciB1c2VyLWxldmVsIGZ1bmN0aW9ucyBhbmQgdmFyaWFibGVzLiAgT3RoZXJ3aXNlLAogICAgIGNlcnRhaW4gcHJvZ3JhbXMgd2lsbCBoYXZlIG5hbWUgY29uZmxpY3RzIHdpdGggaW50ZXJuYWwgbGFiZWxzLgoKICAgICBJdCBpcyBkZXNpcmFibGUgdG8gZXhjbHVkZSBpbnRlcm5hbCBsYWJlbHMgZnJvbSB0aGUgc3ltYm9sIHRhYmxlIG9mCiAgICAgdGhlIG9iamVjdCBmaWxlLiAgTW9zdCBhc3NlbWJsZXJzIGhhdmUgYSBuYW1pbmcgY29udmVudGlvbiBmb3IKICAgICBsYWJlbHMgdGhhdCBzaG91bGQgYmUgZXhjbHVkZWQ7IG9uIG1hbnkgc3lzdGVtcywgdGhlIGxldHRlciAnTCcgYXQKICAgICB0aGUgYmVnaW5uaW5nIG9mIGEgbGFiZWwgaGFzIHRoaXMgZWZmZWN0LiAgWW91IHNob3VsZCBmaW5kIG91dCB3aGF0CiAgICAgY29udmVudGlvbiB5b3VyIHN5c3RlbSB1c2VzLCBhbmQgZm9sbG93IGl0LgoKICAgICBUaGUgZGVmYXVsdCB2ZXJzaW9uIG9mIHRoaXMgZnVuY3Rpb24gdXRpbGl6ZXMKICAgICAnQVNNX0dFTkVSQVRFX0lOVEVSTkFMX0xBQkVMJy4KCiAtLSBNYWNybzogQVNNX09VVFBVVF9ERUJVR19MQUJFTCAoU1RSRUFNLCBQUkVGSVgsIE5VTSkKICAgICBBIEMgc3RhdGVtZW50IHRvIG91dHB1dCB0byB0aGUgc3RkaW8gc3RyZWFtIFNUUkVBTSBhIGRlYnVnIGluZm8KICAgICBsYWJlbCB3aG9zZSBuYW1lIGlzIG1hZGUgZnJvbSB0aGUgc3RyaW5nIFBSRUZJWCBhbmQgdGhlIG51bWJlciBOVU0uCiAgICAgVGhpcyBpcyB1c2VmdWwgZm9yIFZMSVcgdGFyZ2V0cywgd2hlcmUgZGVidWcgaW5mbyBsYWJlbHMgbWF5IG5lZWQKICAgICB0byBiZSB0cmVhdGVkIGRpZmZlcmVudGx5IHRoYW4gYnJhbmNoIHRhcmdldCBsYWJlbHMuICBPbiBzb21lCiAgICAgc3lzdGVtcywgYnJhbmNoIHRhcmdldCBsYWJlbHMgbXVzdCBiZSBhdCB0aGUgYmVnaW5uaW5nIG9mCiAgICAgaW5zdHJ1Y3Rpb24gYnVuZGxlcywgYnV0IGRlYnVnIGluZm8gbGFiZWxzIGNhbiBvY2N1ciBpbiB0aGUgbWlkZGxlCiAgICAgb2YgaW5zdHJ1Y3Rpb24gYnVuZGxlcy4KCiAgICAgSWYgdGhpcyBtYWNybyBpcyBub3QgZGVmaW5lZCwgdGhlbgogICAgICcoKnRhcmdldG0uYXNtX291dC5pbnRlcm5hbF9sYWJlbCknIHdpbGwgYmUgdXNlZC4KCiAtLSBNYWNybzogQVNNX0dFTkVSQVRFX0lOVEVSTkFMX0xBQkVMIChTVFJJTkcsIFBSRUZJWCwgTlVNKQogICAgIEEgQyBzdGF0ZW1lbnQgdG8gc3RvcmUgaW50byB0aGUgc3RyaW5nIFNUUklORyBhIGxhYmVsIHdob3NlIG5hbWUgaXMKICAgICBtYWRlIGZyb20gdGhlIHN0cmluZyBQUkVGSVggYW5kIHRoZSBudW1iZXIgTlVNLgoKICAgICBUaGlzIHN0cmluZywgd2hlbiBvdXRwdXQgc3Vic2VxdWVudGx5IGJ5ICdhc3NlbWJsZV9uYW1lJywgc2hvdWxkCiAgICAgcHJvZHVjZSB0aGUgb3V0cHV0IHRoYXQgJygqdGFyZ2V0bS5hc21fb3V0LmludGVybmFsX2xhYmVsKScgd291bGQKICAgICBwcm9kdWNlIHdpdGggdGhlIHNhbWUgUFJFRklYIGFuZCBOVU0uCgogICAgIElmIHRoZSBzdHJpbmcgYmVnaW5zIHdpdGggJyonLCB0aGVuICdhc3NlbWJsZV9uYW1lJyB3aWxsIG91dHB1dCB0aGUKICAgICByZXN0IG9mIHRoZSBzdHJpbmcgdW5jaGFuZ2VkLiAgSXQgaXMgb2Z0ZW4gY29udmVuaWVudCBmb3IKICAgICAnQVNNX0dFTkVSQVRFX0lOVEVSTkFMX0xBQkVMJyB0byB1c2UgJyonIGluIHRoaXMgd2F5LiAgSWYgdGhlCiAgICAgc3RyaW5nIGRvZXNuJ3Qgc3RhcnQgd2l0aCAnKicsIHRoZW4gJ0FTTV9PVVRQVVRfTEFCRUxSRUYnIGdldHMgdG8KICAgICBvdXRwdXQgdGhlIHN0cmluZywgYW5kIG1heSBjaGFuZ2UgaXQuICAoT2YgY291cnNlLAogICAgICdBU01fT1VUUFVUX0xBQkVMUkVGJyBpcyBhbHNvIHBhcnQgb2YgeW91ciBtYWNoaW5lIGRlc2NyaXB0aW9uLCBzbwogICAgIHlvdSBzaG91bGQga25vdyB3aGF0IGl0IGRvZXMgb24geW91ciBtYWNoaW5lLikKCiAtLSBNYWNybzogQVNNX0ZPUk1BVF9QUklWQVRFX05BTUUgKE9VVFZBUiwgTkFNRSwgTlVNQkVSKQogICAgIEEgQyBleHByZXNzaW9uIHRvIGFzc2lnbiB0byBPVVRWQVIgKHdoaWNoIGlzIGEgdmFyaWFibGUgb2YgdHlwZQogICAgICdjaGFyIConKSBhIG5ld2x5IGFsbG9jYXRlZCBzdHJpbmcgbWFkZSBmcm9tIHRoZSBzdHJpbmcgTkFNRSBhbmQKICAgICB0aGUgbnVtYmVyIE5VTUJFUiwgd2l0aCBzb21lIHN1aXRhYmxlIHB1bmN0dWF0aW9uIGFkZGVkLiAgVXNlCiAgICAgJ2FsbG9jYScgdG8gZ2V0IHNwYWNlIGZvciB0aGUgc3RyaW5nLgoKICAgICBUaGUgc3RyaW5nIHdpbGwgYmUgdXNlZCBhcyBhbiBhcmd1bWVudCB0byAnQVNNX09VVFBVVF9MQUJFTFJFRicgdG8KICAgICBwcm9kdWNlIGFuIGFzc2VtYmxlciBsYWJlbCBmb3IgYW4gaW50ZXJuYWwgc3RhdGljIHZhcmlhYmxlIHdob3NlCiAgICAgbmFtZSBpcyBOQU1FLiAgVGhlcmVmb3JlLCB0aGUgc3RyaW5nIG11c3QgYmUgc3VjaCBhcyB0byByZXN1bHQgaW4KICAgICB2YWxpZCBhc3NlbWJsZXIgY29kZS4gIFRoZSBhcmd1bWVudCBOVU1CRVIgaXMgZGlmZmVyZW50IGVhY2ggdGltZQogICAgIHRoaXMgbWFjcm8gaXMgZXhlY3V0ZWQ7IGl0IHByZXZlbnRzIGNvbmZsaWN0cyBiZXR3ZWVuCiAgICAgc2ltaWxhcmx5LW5hbWVkIGludGVybmFsIHN0YXRpYyB2YXJpYWJsZXMgaW4gZGlmZmVyZW50IHNjb3Blcy4KCiAgICAgSWRlYWxseSB0aGlzIHN0cmluZyBzaG91bGQgbm90IGJlIGEgdmFsaWQgQyBpZGVudGlmaWVyLCB0byBwcmV2ZW50CiAgICAgYW55IGNvbmZsaWN0IHdpdGggdGhlIHVzZXIncyBvd24gc3ltYm9scy4gIE1vc3QgYXNzZW1ibGVycyBhbGxvdwogICAgIHBlcmlvZHMgb3IgcGVyY2VudCBzaWducyBpbiBhc3NlbWJsZXIgc3ltYm9sczsgcHV0dGluZyBhdCBsZWFzdCBvbmUKICAgICBvZiB0aGVzZSBiZXR3ZWVuIHRoZSBuYW1lIGFuZCB0aGUgbnVtYmVyIHdpbGwgc3VmZmljZS4KCiAgICAgSWYgdGhpcyBtYWNybyBpcyBub3QgZGVmaW5lZCwgYSBkZWZhdWx0IGRlZmluaXRpb24gd2lsbCBiZSBwcm92aWRlZAogICAgIHdoaWNoIGlzIGNvcnJlY3QgZm9yIG1vc3Qgc3lzdGVtcy4KCiAtLSBNYWNybzogQVNNX09VVFBVVF9ERUYgKFNUUkVBTSwgTkFNRSwgVkFMVUUpCiAgICAgQSBDIHN0YXRlbWVudCB0byBvdXRwdXQgdG8gdGhlIHN0ZGlvIHN0cmVhbSBTVFJFQU0gYXNzZW1ibGVyIGNvZGUKICAgICB3aGljaCBkZWZpbmVzIChlcXVhdGVzKSB0aGUgc3ltYm9sIE5BTUUgdG8gaGF2ZSB0aGUgdmFsdWUgVkFMVUUuCgogICAgIElmICdTRVRfQVNNX09QJyBpcyBkZWZpbmVkLCBhIGRlZmF1bHQgZGVmaW5pdGlvbiBpcyBwcm92aWRlZCB3aGljaAogICAgIGlzIGNvcnJlY3QgZm9yIG1vc3Qgc3lzdGVtcy4KCiAtLSBNYWNybzogQVNNX09VVFBVVF9ERUZfRlJPTV9ERUNMUyAoU1RSRUFNLCBERUNMX09GX05BTUUsCiAgICAgICAgICBERUNMX09GX1ZBTFVFKQogICAgIEEgQyBzdGF0ZW1lbnQgdG8gb3V0cHV0IHRvIHRoZSBzdGRpbyBzdHJlYW0gU1RSRUFNIGFzc2VtYmxlciBjb2RlCiAgICAgd2hpY2ggZGVmaW5lcyAoZXF1YXRlcykgdGhlIHN5bWJvbCB3aG9zZSB0cmVlIG5vZGUgaXMgREVDTF9PRl9OQU1FCiAgICAgdG8gaGF2ZSB0aGUgdmFsdWUgb2YgdGhlIHRyZWUgbm9kZSBERUNMX09GX1ZBTFVFLiAgVGhpcyBtYWNybyB3aWxsCiAgICAgYmUgdXNlZCBpbiBwcmVmZXJlbmNlIHRvICdBU01fT1VUUFVUX0RFRicgaWYgaXQgaXMgZGVmaW5lZCBhbmQgaWYKICAgICB0aGUgdHJlZSBub2RlcyBhcmUgYXZhaWxhYmxlLgoKICAgICBJZiAnU0VUX0FTTV9PUCcgaXMgZGVmaW5lZCwgYSBkZWZhdWx0IGRlZmluaXRpb24gaXMgcHJvdmlkZWQgd2hpY2gKICAgICBpcyBjb3JyZWN0IGZvciBtb3N0IHN5c3RlbXMuCgogLS0gTWFjcm86IFRBUkdFVF9ERUZFUlJFRF9PVVRQVVRfREVGUyAoREVDTF9PRl9OQU1FLCBERUNMX09GX1ZBTFVFKQogICAgIEEgQyBzdGF0ZW1lbnQgdGhhdCBldmFsdWF0ZXMgdG8gdHJ1ZSBpZiB0aGUgYXNzZW1ibGVyIGNvZGUgd2hpY2gKICAgICBkZWZpbmVzIChlcXVhdGVzKSB0aGUgc3ltYm9sIHdob3NlIHRyZWUgbm9kZSBpcyBERUNMX09GX05BTUUgdG8KICAgICBoYXZlIHRoZSB2YWx1ZSBvZiB0aGUgdHJlZSBub2RlIERFQ0xfT0ZfVkFMVUUgc2hvdWxkIGJlIGVtaXR0ZWQKICAgICBuZWFyIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgY29tcGlsYXRpb24gdW5pdC4gIFRoZSBkZWZhdWx0IGlzIHRvCiAgICAgbm90IGRlZmVyIG91dHB1dCBvZiBkZWZpbmVzLiAgVGhpcyBtYWNybyBhZmZlY3RzIGRlZmluZXMgb3V0cHV0IGJ5CiAgICAgJ0FTTV9PVVRQVVRfREVGJyBhbmQgJ0FTTV9PVVRQVVRfREVGX0ZST01fREVDTFMnLgoKIC0tIE1hY3JvOiBBU01fT1VUUFVUX1dFQUtfQUxJQVMgKFNUUkVBTSwgTkFNRSwgVkFMVUUpCiAgICAgQSBDIHN0YXRlbWVudCB0byBvdXRwdXQgdG8gdGhlIHN0ZGlvIHN0cmVhbSBTVFJFQU0gYXNzZW1ibGVyIGNvZGUKICAgICB3aGljaCBkZWZpbmVzIChlcXVhdGVzKSB0aGUgd2VhayBzeW1ib2wgTkFNRSB0byBoYXZlIHRoZSB2YWx1ZQogICAgIFZBTFVFLiAgSWYgVkFMVUUgaXMgJ05VTEwnLCBpdCBkZWZpbmVzIE5BTUUgYXMgYW4gdW5kZWZpbmVkIHdlYWsKICAgICBzeW1ib2wuCgogICAgIERlZmluZSB0aGlzIG1hY3JvIGlmIHRoZSB0YXJnZXQgb25seSBzdXBwb3J0cyB3ZWFrIGFsaWFzZXM7IGRlZmluZQogICAgICdBU01fT1VUUFVUX0RFRicgaW5zdGVhZCBpZiBwb3NzaWJsZS4KCiAtLSBNYWNybzogT0JKQ19HRU5fTUVUSE9EX0xBQkVMIChCVUYsIElTX0lOU1QsIENMQVNTX05BTUUsIENBVF9OQU1FLAogICAgICAgICAgU0VMX05BTUUpCiAgICAgRGVmaW5lIHRoaXMgbWFjcm8gdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgYXNzZW1ibGVyIG5hbWVzIHVzZWQgZm9yCiAgICAgT2JqZWN0aXZlLUMgbWV0aG9kcy4KCiAgICAgVGhlIGRlZmF1bHQgbmFtZSBpcyBhIHVuaXF1ZSBtZXRob2QgbnVtYmVyIGZvbGxvd2VkIGJ5IHRoZSBuYW1lIG9mCiAgICAgdGhlIGNsYXNzIChlLmcuICdfMV9Gb28nKS4gIEZvciBtZXRob2RzIGluIGNhdGVnb3JpZXMsIHRoZSBuYW1lIG9mCiAgICAgdGhlIGNhdGVnb3J5IGlzIGFsc28gaW5jbHVkZWQgaW4gdGhlIGFzc2VtYmxlciBuYW1lIChlLmcuCiAgICAgJ18xX0Zvb19CYXInKS4KCiAgICAgVGhlc2UgbmFtZXMgYXJlIHNhZmUgb24gbW9zdCBzeXN0ZW1zLCBidXQgbWFrZSBkZWJ1Z2dpbmcgZGlmZmljdWx0CiAgICAgc2luY2UgdGhlIG1ldGhvZCdzIHNlbGVjdG9yIGlzIG5vdCBwcmVzZW50IGluIHRoZSBuYW1lLiAgVGhlcmVmb3JlLAogICAgIHBhcnRpY3VsYXIgc3lzdGVtcyBkZWZpbmUgb3RoZXIgd2F5cyBvZiBjb21wdXRpbmcgbmFtZXMuCgogICAgIEJVRiBpcyBhbiBleHByZXNzaW9uIG9mIHR5cGUgJ2NoYXIgKicgd2hpY2ggZ2l2ZXMgeW91IGEgYnVmZmVyIGluCiAgICAgd2hpY2ggdG8gc3RvcmUgdGhlIG5hbWU7IGl0cyBsZW5ndGggaXMgYXMgbG9uZyBhcyBDTEFTU19OQU1FLAogICAgIENBVF9OQU1FIGFuZCBTRUxfTkFNRSBwdXQgdG9nZXRoZXIsIHBsdXMgNTAgY2hhcmFjdGVycyBleHRyYS4KCiAgICAgVGhlIGFyZ3VtZW50IElTX0lOU1Qgc3BlY2lmaWVzIHdoZXRoZXIgdGhlIG1ldGhvZCBpcyBhbiBpbnN0YW5jZQogICAgIG1ldGhvZCBvciBhIGNsYXNzIG1ldGhvZDsgQ0xBU1NfTkFNRSBpcyB0aGUgbmFtZSBvZiB0aGUgY2xhc3M7CiAgICAgQ0FUX05BTUUgaXMgdGhlIG5hbWUgb2YgdGhlIGNhdGVnb3J5IChvciAnTlVMTCcgaWYgdGhlIG1ldGhvZCBpcwogICAgIG5vdCBpbiBhIGNhdGVnb3J5KTsgYW5kIFNFTF9OQU1FIGlzIHRoZSBuYW1lIG9mIHRoZSBzZWxlY3Rvci4KCiAgICAgT24gc3lzdGVtcyB3aGVyZSB0aGUgYXNzZW1ibGVyIGNhbiBoYW5kbGUgcXVvdGVkIG5hbWVzLCB5b3UgY2FuIHVzZQogICAgIHRoaXMgbWFjcm8gdG8gcHJvdmlkZSBtb3JlIGh1bWFuLXJlYWRhYmxlIG5hbWVzLgoKIC0tIE1hY3JvOiBBU01fREVDTEFSRV9DTEFTU19SRUZFUkVOQ0UgKFNUUkVBTSwgTkFNRSkKICAgICBBIEMgc3RhdGVtZW50IChzYW5zIHNlbWljb2xvbikgdG8gb3V0cHV0IHRvIHRoZSBzdGRpbyBzdHJlYW0gU1RSRUFNCiAgICAgY29tbWFuZHMgdG8gZGVjbGFyZSB0aGF0IHRoZSBsYWJlbCBOQU1FIGlzIGFuIE9iamVjdGl2ZS1DIGNsYXNzCiAgICAgcmVmZXJlbmNlLiAgVGhpcyBpcyBvbmx5IG5lZWRlZCBmb3IgdGFyZ2V0cyB3aG9zZSBsaW5rZXJzIGhhdmUKICAgICBzcGVjaWFsIHN1cHBvcnQgZm9yIE5lWFQtc3R5bGUgcnVudGltZXMuCgogLS0gTWFjcm86IEFTTV9ERUNMQVJFX1VOUkVTT0xWRURfUkVGRVJFTkNFIChTVFJFQU0sIE5BTUUpCiAgICAgQSBDIHN0YXRlbWVudCAoc2FucyBzZW1pY29sb24pIHRvIG91dHB1dCB0byB0aGUgc3RkaW8gc3RyZWFtIFNUUkVBTQogICAgIGNvbW1hbmRzIHRvIGRlY2xhcmUgdGhhdCB0aGUgbGFiZWwgTkFNRSBpcyBhbiB1bnJlc29sdmVkCiAgICAgT2JqZWN0aXZlLUMgY2xhc3MgcmVmZXJlbmNlLiAgVGhpcyBpcyBvbmx5IG5lZWRlZCBmb3IgdGFyZ2V0cyB3aG9zZQogICAgIGxpbmtlcnMgaGF2ZSBzcGVjaWFsIHN1cHBvcnQgZm9yIE5lWFQtc3R5bGUgcnVudGltZXMuCgofCkZpbGU6IGdjY2ludC5pbmZvLCAgTm9kZTogSW5pdGlhbGl6YXRpb24sICBOZXh0OiBNYWNyb3MgZm9yIEluaXRpYWxpemF0aW9uLCAgUHJldjogTGFiZWwgT3V0cHV0LCAgVXA6IEFzc2VtYmxlciBGb3JtYXQKCjE1LjIxLjUgSG93IEluaXRpYWxpemF0aW9uIEZ1bmN0aW9ucyBBcmUgSGFuZGxlZAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KClRoZSBjb21waWxlZCBjb2RlIGZvciBjZXJ0YWluIGxhbmd1YWdlcyBpbmNsdWRlcyAiY29uc3RydWN0b3JzIiAoYWxzbwpjYWxsZWQgImluaXRpYWxpemF0aW9uIHJvdXRpbmVzIiktLWZ1bmN0aW9ucyB0byBpbml0aWFsaXplIGRhdGEgaW4gdGhlCnByb2dyYW0gd2hlbiB0aGUgcHJvZ3JhbSBpcyBzdGFydGVkLiAgVGhlc2UgZnVuY3Rpb25zIG5lZWQgdG8gYmUgY2FsbGVkCmJlZm9yZSB0aGUgcHJvZ3JhbSBpcyAic3RhcnRlZCItLXRoYXQgaXMgdG8gc2F5LCBiZWZvcmUgJ21haW4nIGlzCmNhbGxlZC4KCiBDb21waWxpbmcgc29tZSBsYW5ndWFnZXMgZ2VuZXJhdGVzICJkZXN0cnVjdG9ycyIgKGFsc28gY2FsbGVkCiJ0ZXJtaW5hdGlvbiByb3V0aW5lcyIpIHRoYXQgc2hvdWxkIGJlIGNhbGxlZCB3aGVuIHRoZSBwcm9ncmFtCnRlcm1pbmF0ZXMuCgogVG8gbWFrZSB0aGUgaW5pdGlhbGl6YXRpb24gYW5kIHRlcm1pbmF0aW9uIGZ1bmN0aW9ucyB3b3JrLCB0aGUgY29tcGlsZXIKbXVzdCBvdXRwdXQgc29tZXRoaW5nIGluIHRoZSBhc3NlbWJsZXIgY29kZSB0byBjYXVzZSB0aG9zZSBmdW5jdGlvbnMgdG8KYmUgY2FsbGVkIGF0IHRoZSBhcHByb3ByaWF0ZSB0aW1lLiAgV2hlbiB5b3UgcG9ydCB0aGUgY29tcGlsZXIgdG8gYSBuZXcKc3lzdGVtLCB5b3UgbmVlZCB0byBzcGVjaWZ5IGhvdyB0byBkbyB0aGlzLgoKIFRoZXJlIGFyZSB0d28gbWFqb3Igd2F5cyB0aGF0IEdDQyBjdXJyZW50bHkgc3VwcG9ydHMgdGhlIGV4ZWN1dGlvbiBvZgppbml0aWFsaXphdGlvbiBhbmQgdGVybWluYXRpb24gZnVuY3Rpb25zLiAgRWFjaCB3YXkgaGFzIHR3byB2YXJpYW50cy4KTXVjaCBvZiB0aGUgc3RydWN0dXJlIGlzIGNvbW1vbiB0byBhbGwgZm91ciB2YXJpYXRpb25zLgoKIFRoZSBsaW5rZXIgbXVzdCBidWlsZCB0d28gbGlzdHMgb2YgdGhlc2UgZnVuY3Rpb25zLS1hIGxpc3Qgb2YKaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zLCBjYWxsZWQgJ19fQ1RPUl9MSVNUX18nLCBhbmQgYSBsaXN0IG9mCnRlcm1pbmF0aW9uIGZ1bmN0aW9ucywgY2FsbGVkICdfX0RUT1JfTElTVF9fJy4KCiBFYWNoIGxpc3QgYWx3YXlzIGJlZ2lucyB3aXRoIGFuIGlnbm9yZWQgZnVuY3Rpb24gcG9pbnRlciAod2hpY2ggbWF5CmhvbGQgMCwgLTEsIG9yIGEgY291bnQgb2YgdGhlIGZ1bmN0aW9uIHBvaW50ZXJzIGFmdGVyIGl0LCBkZXBlbmRpbmcgb24KdGhlIGVudmlyb25tZW50KS4gIFRoaXMgaXMgZm9sbG93ZWQgYnkgYSBzZXJpZXMgb2YgemVybyBvciBtb3JlIGZ1bmN0aW9uCnBvaW50ZXJzIHRvIGNvbnN0cnVjdG9ycyAob3IgZGVzdHJ1Y3RvcnMpLCBmb2xsb3dlZCBieSBhIGZ1bmN0aW9uCnBvaW50ZXIgY29udGFpbmluZyB6ZXJvLgoKIERlcGVuZGluZyBvbiB0aGUgb3BlcmF0aW5nIHN5c3RlbSBhbmQgaXRzIGV4ZWN1dGFibGUgZmlsZSBmb3JtYXQsCmVpdGhlciAnY3J0c3R1ZmYuYycgb3IgJ2xpYmdjYzIuYycgdHJhdmVyc2VzIHRoZXNlIGxpc3RzIGF0IHN0YXJ0dXAgdGltZQphbmQgZXhpdCB0aW1lLiAgQ29uc3RydWN0b3JzIGFyZSBjYWxsZWQgaW4gcmV2ZXJzZSBvcmRlciBvZiB0aGUgbGlzdDsKZGVzdHJ1Y3RvcnMgaW4gZm9yd2FyZCBvcmRlci4KCiBUaGUgYmVzdCB3YXkgdG8gaGFuZGxlIHN0YXRpYyBjb25zdHJ1Y3RvcnMgd29ya3Mgb25seSBmb3Igb2JqZWN0IGZpbGUKZm9ybWF0cyB3aGljaCBwcm92aWRlIGFyYml0cmFyaWx5LW5hbWVkIHNlY3Rpb25zLiAgQSBzZWN0aW9uIGlzIHNldAphc2lkZSBmb3IgYSBsaXN0IG9mIGNvbnN0cnVjdG9ycywgYW5kIGFub3RoZXIgZm9yIGEgbGlzdCBvZiBkZXN0cnVjdG9ycy4KVHJhZGl0aW9uYWxseSB0aGVzZSBhcmUgY2FsbGVkICcuY3RvcnMnIGFuZCAnLmR0b3JzJy4gIEVhY2ggb2JqZWN0IGZpbGUKdGhhdCBkZWZpbmVzIGFuIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGFsc28gcHV0cyBhIHdvcmQgaW4gdGhlCmNvbnN0cnVjdG9yIHNlY3Rpb24gdG8gcG9pbnQgdG8gdGhhdCBmdW5jdGlvbi4gIFRoZSBsaW5rZXIgYWNjdW11bGF0ZXMKYWxsIHRoZXNlIHdvcmRzIGludG8gb25lIGNvbnRpZ3VvdXMgJy5jdG9ycycgc2VjdGlvbi4gIFRlcm1pbmF0aW9uCmZ1bmN0aW9ucyBhcmUgaGFuZGxlZCBzaW1pbGFybHkuCgogVGhpcyBtZXRob2Qgd2lsbCBiZSBjaG9zZW4gYXMgdGhlIGRlZmF1bHQgYnkgJ3RhcmdldC1kZWYuaCcgaWYKJ1RBUkdFVF9BU01fTkFNRURfU0VDVElPTicgaXMgZGVmaW5lZC4gIEEgdGFyZ2V0IHRoYXQgZG9lcyBub3Qgc3VwcG9ydAphcmJpdHJhcnkgc2VjdGlvbnMsIGJ1dCBkb2VzIHN1cHBvcnQgc3BlY2lhbCBkZXNpZ25hdGVkIGNvbnN0cnVjdG9yIGFuZApkZXN0cnVjdG9yIHNlY3Rpb25zIG1heSBkZWZpbmUgJ0NUT1JTX1NFQ1RJT05fQVNNX09QJyBhbmQKJ0RUT1JTX1NFQ1RJT05fQVNNX09QJyB0byBhY2hpZXZlIHRoZSBzYW1lIGVmZmVjdC4KCiBXaGVuIGFyYml0cmFyeSBzZWN0aW9ucyBhcmUgYXZhaWxhYmxlLCB0aGVyZSBhcmUgdHdvIHZhcmlhbnRzLApkZXBlbmRpbmcgdXBvbiBob3cgdGhlIGNvZGUgaW4gJ2NydHN0dWZmLmMnIGlzIGNhbGxlZC4gIE9uIHN5c3RlbXMgdGhhdApzdXBwb3J0IGEgIi5pbml0IiBzZWN0aW9uIHdoaWNoIGlzIGV4ZWN1dGVkIGF0IHByb2dyYW0gc3RhcnR1cCwgcGFydHMgb2YKJ2NydHN0dWZmLmMnIGFyZSBjb21waWxlZCBpbnRvIHRoYXQgc2VjdGlvbi4gIFRoZSBwcm9ncmFtIGlzIGxpbmtlZCBieQp0aGUgJ2djYycgZHJpdmVyIGxpa2UgdGhpczoKCiAgICAgbGQgLW8gT1VUUFVUX0ZJTEUgY3J0aS5vIGNydGJlZ2luLm8gLi4uIC1sZ2NjIGNydGVuZC5vIGNydG4ubwoKIFRoZSBwcm9sb2d1ZSBvZiBhIGZ1bmN0aW9uICgnX19pbml0JykgYXBwZWFycyBpbiB0aGUgJy5pbml0JyBzZWN0aW9uIG9mCidjcnRpLm8nOyB0aGUgZXBpbG9ndWUgYXBwZWFycyBpbiAnY3J0bi5vJy4gIExpa2V3aXNlIGZvciB0aGUgZnVuY3Rpb24KJ19fZmluaScgaW4gdGhlICIuZmluaSIgc2VjdGlvbi4gIE5vcm1hbGx5IHRoZXNlIGZpbGVzIGFyZSBwcm92aWRlZCBieQp0aGUgb3BlcmF0aW5nIHN5c3RlbSBvciBieSB0aGUgR05VIEMgbGlicmFyeSwgYnV0IGFyZSBwcm92aWRlZCBieSBHQ0MKZm9yIGEgZmV3IHRhcmdldHMuCgogVGhlIG9iamVjdHMgJ2NydGJlZ2luLm8nIGFuZCAnY3J0ZW5kLm8nIGFyZSAoZm9yIG1vc3QgdGFyZ2V0cykgY29tcGlsZWQKZnJvbSAnY3J0c3R1ZmYuYycuICBUaGV5IGNvbnRhaW4sIGFtb25nIG90aGVyIHRoaW5ncywgY29kZSBmcmFnbWVudHMKd2l0aGluIHRoZSAnLmluaXQnIGFuZCAnLmZpbmknIHNlY3Rpb25zIHRoYXQgYnJhbmNoIHRvIHJvdXRpbmVzIGluIHRoZQonLnRleHQnIHNlY3Rpb24uICBUaGUgbGlua2VyIHdpbGwgcHVsbCBhbGwgcGFydHMgb2YgYSBzZWN0aW9uIHRvZ2V0aGVyLAp3aGljaCByZXN1bHRzIGluIGEgY29tcGxldGUgJ19faW5pdCcgZnVuY3Rpb24gdGhhdCBpbnZva2VzIHRoZSByb3V0aW5lcwp3ZSBuZWVkIGF0IHN0YXJ0dXAuCgogVG8gdXNlIHRoaXMgdmFyaWFudCwgeW91IG11c3QgZGVmaW5lIHRoZSAnSU5JVF9TRUNUSU9OX0FTTV9PUCcgbWFjcm8KcHJvcGVybHkuCgogSWYgbm8gaW5pdCBzZWN0aW9uIGlzIGF2YWlsYWJsZSwgd2hlbiBHQ0MgY29tcGlsZXMgYW55IGZ1bmN0aW9uIGNhbGxlZAonbWFpbicgKG9yIG1vcmUgYWNjdXJhdGVseSwgYW55IGZ1bmN0aW9uIGRlc2lnbmF0ZWQgYXMgYSBwcm9ncmFtIGVudHJ5CnBvaW50IGJ5IHRoZSBsYW5ndWFnZSBmcm9udCBlbmQgY2FsbGluZyAnZXhwYW5kX21haW5fZnVuY3Rpb24nKSwgaXQKaW5zZXJ0cyBhIHByb2NlZHVyZSBjYWxsIHRvICdfX21haW4nIGFzIHRoZSBmaXJzdCBleGVjdXRhYmxlIGNvZGUgYWZ0ZXIKdGhlIGZ1bmN0aW9uIHByb2xvZ3VlLiAgVGhlICdfX21haW4nIGZ1bmN0aW9uIGlzIGRlZmluZWQgaW4gJ2xpYmdjYzIuYycKYW5kIHJ1bnMgdGhlIGdsb2JhbCBjb25zdHJ1Y3RvcnMuCgogSW4gZmlsZSBmb3JtYXRzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBhcmJpdHJhcnkgc2VjdGlvbnMsIHRoZXJlIGFyZSBhZ2Fpbgp0d28gdmFyaWFudHMuICBJbiB0aGUgc2ltcGxlc3QgdmFyaWFudCwgdGhlIEdOVSBsaW5rZXIgKEdOVSAnbGQnKSBhbmQgYW4KJ2Eub3V0JyBmb3JtYXQgbXVzdCBiZSB1c2VkLiAgSW4gdGhpcyBjYXNlLCAnVEFSR0VUX0FTTV9DT05TVFJVQ1RPUicgaXMKZGVmaW5lZCB0byBwcm9kdWNlIGEgJy5zdGFicycgZW50cnkgb2YgdHlwZSAnTl9TRVRUJywgcmVmZXJlbmNpbmcgdGhlCm5hbWUgJ19fQ1RPUl9MSVNUX18nLCBhbmQgd2l0aCB0aGUgYWRkcmVzcyBvZiB0aGUgdm9pZCBmdW5jdGlvbgpjb250YWluaW5nIHRoZSBpbml0aWFsaXphdGlvbiBjb2RlIGFzIGl0cyB2YWx1ZS4gIFRoZSBHTlUgbGlua2VyCnJlY29nbml6ZXMgdGhpcyBhcyBhIHJlcXVlc3QgdG8gYWRkIHRoZSB2YWx1ZSB0byBhICJzZXQiOyB0aGUgdmFsdWVzIGFyZQphY2N1bXVsYXRlZCwgYW5kIGFyZSBldmVudHVhbGx5IHBsYWNlZCBpbiB0aGUgZXhlY3V0YWJsZSBhcyBhIHZlY3RvciBpbgp0aGUgZm9ybWF0IGRlc2NyaWJlZCBhYm92ZSwgd2l0aCBhIGxlYWRpbmcgKGlnbm9yZWQpIGNvdW50IGFuZCBhCnRyYWlsaW5nIHplcm8gZWxlbWVudC4gICdUQVJHRVRfQVNNX0RFU1RSVUNUT1InIGlzIGhhbmRsZWQgc2ltaWxhcmx5LgpTaW5jZSBubyBpbml0IHNlY3Rpb24gaXMgYXZhaWxhYmxlLCB0aGUgYWJzZW5jZSBvZiAnSU5JVF9TRUNUSU9OX0FTTV9PUCcKY2F1c2VzIHRoZSBjb21waWxhdGlvbiBvZiAnbWFpbicgdG8gY2FsbCAnX19tYWluJyBhcyBhYm92ZSwgc3RhcnRpbmcgdGhlCmluaXRpYWxpemF0aW9uIHByb2Nlc3MuCgogVGhlIGxhc3QgdmFyaWFudCB1c2VzIG5laXRoZXIgYXJiaXRyYXJ5IHNlY3Rpb25zIG5vciB0aGUgR05VIGxpbmtlci4KVGhpcyBpcyBwcmVmZXJhYmxlIHdoZW4geW91IHdhbnQgdG8gZG8gZHluYW1pYyBsaW5raW5nIGFuZCB3aGVuIHVzaW5nCmZpbGUgZm9ybWF0cyB3aGljaCB0aGUgR05VIGxpbmtlciBkb2VzIG5vdCBzdXBwb3J0LCBzdWNoIGFzICdFQ09GRicuICBJbgp0aGlzIGNhc2UsICdUQVJHRVRfSEFWRV9DVE9SU19EVE9SUycgaXMgZmFsc2UsIGluaXRpYWxpemF0aW9uIGFuZAp0ZXJtaW5hdGlvbiBmdW5jdGlvbnMgYXJlIHJlY29nbml6ZWQgc2ltcGx5IGJ5IHRoZWlyIG5hbWVzLiAgVGhpcwpyZXF1aXJlcyBhbiBleHRyYSBwcm9ncmFtIGluIHRoZSBsaW5rYWdlIHN0ZXAsIGNhbGxlZCAnY29sbGVjdDInLiAgVGhpcwpwcm9ncmFtIHByZXRlbmRzIHRvIGJlIHRoZSBsaW5rZXIsIGZvciB1c2Ugd2l0aCBHQ0M7IGl0IGRvZXMgaXRzIGpvYiBieQpydW5uaW5nIHRoZSBvcmRpbmFyeSBsaW5rZXIsIGJ1dCBhbHNvIGFycmFuZ2VzIHRvIGluY2x1ZGUgdGhlIHZlY3RvcnMgb2YKaW5pdGlhbGl6YXRpb24gYW5kIHRlcm1pbmF0aW9uIGZ1bmN0aW9ucy4gIFRoZXNlIGZ1bmN0aW9ucyBhcmUgY2FsbGVkCnZpYSAnX19tYWluJyBhcyBkZXNjcmliZWQgYWJvdmUuICBJbiBvcmRlciB0byB1c2UgdGhpcyBtZXRob2QsCid1c2VfY29sbGVjdDInIG11c3QgYmUgZGVmaW5lZCBpbiB0aGUgdGFyZ2V0IGluICdjb25maWcuZ2NjJy4KCiBUaGUgZm9sbG93aW5nIHNlY3Rpb24gZGVzY3JpYmVzIHRoZSBzcGVjaWZpYyBtYWNyb3MgdGhhdCBjb250cm9sIGFuZApjdXN0b21pemUgdGhlIGhhbmRsaW5nIG9mIGluaXRpYWxpemF0aW9uIGFuZCB0ZXJtaW5hdGlvbiBmdW5jdGlvbnMuCgofCkZpbGU6IGdjY2ludC5pbmZvLCAgTm9kZTogTWFjcm9zIGZvciBJbml0aWFsaXphdGlvbiwgIE5leHQ6IEluc3RydWN0aW9uIE91dHB1dCwgIFByZXY6IEluaXRpYWxpemF0aW9uLCAgVXA6IEFzc2VtYmxlciBGb3JtYXQKCjE1LjIxLjYgTWFjcm9zIENvbnRyb2xsaW5nIEluaXRpYWxpemF0aW9uIFJvdXRpbmVzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpIZXJlIGFyZSB0aGUgbWFjcm9zIHRoYXQgY29udHJvbCBob3cgdGhlIGNvbXBpbGVyIGhhbmRsZXMgaW5pdGlhbGl6YXRpb24KYW5kIHRlcm1pbmF0aW9uIGZ1bmN0aW9uczoKCiAtLSBNYWNybzogSU5JVF9TRUNUSU9OX0FTTV9PUAogICAgIElmIGRlZmluZWQsIGEgQyBzdHJpbmcgY29uc3RhbnQsIGluY2x1ZGluZyBzcGFjaW5nLCBmb3IgdGhlCiAgICAgYXNzZW1ibGVyIG9wZXJhdGlvbiB0byBpZGVudGlmeSB0aGUgZm9sbG93aW5nIGRhdGEgYXMKICAgICBpbml0aWFsaXphdGlvbiBjb2RlLiAgSWYgbm90IGRlZmluZWQsIEdDQyB3aWxsIGFzc3VtZSBzdWNoIGEKICAgICBzZWN0aW9uIGRvZXMgbm90IGV4aXN0LiAgV2hlbiB5b3UgYXJlIHVzaW5nIHNwZWNpYWwgc2VjdGlvbnMgZm9yCiAgICAgaW5pdGlhbGl6YXRpb24gYW5kIHRlcm1pbmF0aW9uIGZ1bmN0aW9ucywgdGhpcyBtYWNybyBhbHNvIGNvbnRyb2xzCiAgICAgaG93ICdjcnRzdHVmZi5jJyBhbmQgJ2xpYmdjYzIuYycgYXJyYW5nZSB0byBydW4gdGhlIGluaXRpYWxpemF0aW9uCiAgICAgZnVuY3Rpb25zLgoKIC0tIE1hY3JvOiBIQVNfSU5JVF9TRUNUSU9OCiAgICAgSWYgZGVmaW5lZCwgJ21haW4nIHdpbGwgbm90IGNhbGwgJ19fbWFpbicgYXMgZGVzY3JpYmVkIGFib3ZlLiAgVGhpcwogICAgIG1hY3JvIHNob3VsZCBiZSBkZWZpbmVkIGZvciBzeXN0ZW1zIHRoYXQgY29udHJvbCBzdGFydC11cCBjb2RlIG9uIGEKICAgICBzeW1ib2wtYnktc3ltYm9sIGJhc2lzLCBzdWNoIGFzIE9TRi8xLCBhbmQgc2hvdWxkIG5vdCBiZSBkZWZpbmVkCiAgICAgZXhwbGljaXRseSBmb3Igc3lzdGVtcyB0aGF0IHN1cHBvcnQgJ0lOSVRfU0VDVElPTl9BU01fT1AnLgoKIC0tIE1hY3JvOiBMRF9JTklUX1NXSVRDSAogICAgIElmIGRlZmluZWQsIGEgQyBzdHJpbmcgY29uc3RhbnQgZm9yIGEgc3dpdGNoIHRoYXQgdGVsbHMgdGhlIGxpbmtlcgogICAgIHRoYXQgdGhlIGZvbGxvd2luZyBzeW1ib2wgaXMgYW4gaW5pdGlhbGl6YXRpb24gcm91dGluZS4KCiAtLSBNYWNybzogTERfRklOSV9TV0lUQ0gKICAgICBJZiBkZWZpbmVkLCBhIEMgc3RyaW5nIGNvbnN0YW50IGZvciBhIHN3aXRjaCB0aGF0IHRlbGxzIHRoZSBsaW5rZXIKICAgICB0aGF0IHRoZSBmb2xsb3dpbmcgc3ltYm9sIGlzIGEgZmluYWxpemF0aW9uIHJvdXRpbmUuCgogLS0gTWFjcm86IENPTExFQ1RfU0hBUkVEX0lOSVRfRlVOQyAoU1RSRUFNLCBGVU5DKQogICAgIElmIGRlZmluZWQsIGEgQyBzdGF0ZW1lbnQgdGhhdCB3aWxsIHdyaXRlIGEgZnVuY3Rpb24gdGhhdCBjYW4gYmUKICAgICBhdXRvbWF0aWNhbGx5IGNhbGxlZCB3aGVuIGEgc2hhcmVkIGxpYnJhcnkgaXMgbG9hZGVkLiAgVGhlIGZ1bmN0aW9uCiAgICAgc2hvdWxkIGNhbGwgRlVOQywgd2hpY2ggdGFrZXMgbm8gYXJndW1lbnRzLiAgSWYgbm90IGRlZmluZWQsIGFuZAogICAgIHRoZSBvYmplY3QgZm9ybWF0IHJlcXVpcmVzIGFuIGV4cGxpY2l0IGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uLAogICAgIHRoZW4gYSBmdW5jdGlvbiBjYWxsZWQgJ19HTE9CQUxfX0RJJyB3aWxsIGJlIGdlbmVyYXRlZC4KCiAgICAgVGhpcyBmdW5jdGlvbiBhbmQgdGhlIGZvbGxvd2luZyBvbmUgYXJlIHVzZWQgYnkgY29sbGVjdDIgd2hlbgogICAgIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeSB0aGF0IG5lZWRzIGNvbnN0cnVjdG9ycyBvciBkZXN0cnVjdG9ycywgb3IKICAgICBoYXMgRFdBUkYyIGV4Y2VwdGlvbiB0YWJsZXMgZW1iZWRkZWQgaW4gdGhlIGNvZGUuCgogLS0gTWFjcm86IENPTExFQ1RfU0hBUkVEX0ZJTklfRlVOQyAoU1RSRUFNLCBGVU5DKQogICAgIElmIGRlZmluZWQsIGEgQyBzdGF0ZW1lbnQgdGhhdCB3aWxsIHdyaXRlIGEgZnVuY3Rpb24gdGhhdCBjYW4gYmUKICAgICBhdXRvbWF0aWNhbGx5IGNhbGxlZCB3aGVuIGEgc2hhcmVkIGxpYnJhcnkgaXMgdW5sb2FkZWQuICBUaGUKICAgICBmdW5jdGlvbiBzaG91bGQgY2FsbCBGVU5DLCB3aGljaCB0YWtlcyBubyBhcmd1bWVudHMuICBJZiBub3QKICAgICBkZWZpbmVkLCBhbmQgdGhlIG9iamVjdCBmb3JtYXQgcmVxdWlyZXMgYW4gZXhwbGljaXQgZmluYWxpemF0aW9uCiAgICAgZnVuY3Rpb24sIHRoZW4gYSBmdW5jdGlvbiBjYWxsZWQgJ19HTE9CQUxfX0REJyB3aWxsIGJlIGdlbmVyYXRlZC4KCiAtLSBNYWNybzogSU5WT0tFX19tYWluCiAgICAgSWYgZGVmaW5lZCwgJ21haW4nIHdpbGwgY2FsbCAnX19tYWluJyBkZXNwaXRlIHRoZSBwcmVzZW5jZSBvZgogICAgICdJTklUX1NFQ1RJT05fQVNNX09QJy4gIFRoaXMgbWFjcm8gc2hvdWxkIGJlIGRlZmluZWQgZm9yIHN5c3RlbXMKICAgICB3aGVyZSB0aGUgaW5pdCBzZWN0aW9uIGlzIG5vdCBhY3R1YWxseSBydW4gYXV0b21hdGljYWxseSwgYnV0IGlzCiAgICAgc3RpbGwgdXNlZnVsIGZvciBjb2xsZWN0aW5nIHRoZSBsaXN0cyBvZiBjb25zdHJ1Y3RvcnMgYW5kCiAgICAgZGVzdHJ1Y3RvcnMuCgogLS0gTWFjcm86IFNVUFBPUlRTX0lOSVRfUFJJT1JJVFkKICAgICBJZiBub256ZXJvLCB0aGUgQysrICdpbml0X3ByaW9yaXR5JyBhdHRyaWJ1dGUgaXMgc3VwcG9ydGVkIGFuZCB0aGUKICAgICBjb21waWxlciBzaG91bGQgZW1pdCBpbnN0cnVjdGlvbnMgdG8gY29udHJvbCB0aGUgb3JkZXIgb2YKICAgICBpbml0aWFsaXphdGlvbiBvZiBvYmplY3RzLiAgSWYgemVybywgdGhlIGNvbXBpbGVyIHdpbGwgaXNzdWUgYW4KICAgICBlcnJvciBtZXNzYWdlIHVwb24gZW5jb3VudGVyaW5nIGFuICdpbml0X3ByaW9yaXR5JyBhdHRyaWJ1dGUuCgogLS0gVGFyZ2V0IEhvb2s6IGJvb2wgVEFSR0VUX0hBVkVfQ1RPUlNfRFRPUlMKICAgICBUaGlzIHZhbHVlIGlzIHRydWUgaWYgdGhlIHRhcmdldCBzdXBwb3J0cyBzb21lICJuYXRpdmUiIG1ldGhvZCBvZgogICAgIGNvbGxlY3RpbmcgY29uc3RydWN0b3JzIGFuZCBkZXN0cnVjdG9ycyB0byBiZSBydW4gYXQgc3RhcnR1cCBhbmQKICAgICBleGl0LiAgSXQgaXMgZmFsc2UgaWYgd2UgbXVzdCB1c2UgJ2NvbGxlY3QyJy4KCiAtLSBUYXJnZXQgSG9vazogdm9pZCBUQVJHRVRfQVNNX0NPTlNUUlVDVE9SIChydHggU1lNQk9MLCBpbnQgUFJJT1JJVFkpCiAgICAgSWYgZGVmaW5lZCwgYSBmdW5jdGlvbiB0aGF0IG91dHB1dHMgYXNzZW1ibGVyIGNvZGUgdG8gYXJyYW5nZSB0bwogICAgIGNhbGwgdGhlIGZ1bmN0aW9uIHJlZmVyZW5jZWQgYnkgU1lNQk9MIGF0IGluaXRpYWxpemF0aW9uIHRpbWUuCgogICAgIEFzc3VtZSB0aGF0IFNZTUJPTCBpcyBhICdTWU1CT0xfUkVGJyBmb3IgYSBmdW5jdGlvbiB0YWtpbmcgbm8KICAgICBhcmd1bWVudHMgYW5kIHdpdGggbm8gcmV0dXJuIHZhbHVlLiAgSWYgdGhlIHRhcmdldCBzdXBwb3J0cwogICAgIGluaXRpYWxpemF0aW9uIHByaW9yaXRpZXMsIFBSSU9SSVRZIGlzIGEgdmFsdWUgYmV0d2VlbiAwIGFuZAogICAgICdNQVhfSU5JVF9QUklPUklUWSc7IG90aGVyd2lzZSBpdCBtdXN0IGJlICdERUZBVUxUX0lOSVRfUFJJT1JJVFknLgoKICAgICBJZiB0aGlzIG1hY3JvIGlzIG5vdCBkZWZpbmVkIGJ5IHRoZSB0YXJnZXQsIGEgc3VpdGFibGUgZGVmYXVsdCB3aWxsCiAgICAgYmUgY2hvc2VuIGlmICgxKSB0aGUgdGFyZ2V0IHN1cHBvcnRzIGFyYml0cmFyeSBzZWN0aW9uIG5hbWVzLCAoMikKICAgICB0aGUgdGFyZ2V0IGRlZmluZXMgJ0NUT1JTX1NFQ1RJT05fQVNNX09QJywgb3IgKDMpICdVU0VfQ09MTEVDVDInIGlzCiAgICAgbm90IGRlZmluZWQuCgogLS0gVGFyZ2V0IEhvb2s6IHZvaWQgVEFSR0VUX0FTTV9ERVNUUlVDVE9SIChydHggU1lNQk9MLCBpbnQgUFJJT1JJVFkpCiAgICAgVGhpcyBpcyBsaWtlICdUQVJHRVRfQVNNX0NPTlNUUlVDVE9SJyBidXQgdXNlZCBmb3IgdGVybWluYXRpb24KICAgICBmdW5jdGlvbnMgcmF0aGVyIHRoYW4gaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zLgoKIElmICdUQVJHRVRfSEFWRV9DVE9SU19EVE9SUycgaXMgdHJ1ZSwgdGhlIGluaXRpYWxpemF0aW9uIHJvdXRpbmUKZ2VuZXJhdGVkIGZvciB0aGUgZ2VuZXJhdGVkIG9iamVjdCBmaWxlIHdpbGwgaGF2ZSBzdGF0aWMgbGlua2FnZS4KCiBJZiB5b3VyIHN5c3RlbSB1c2VzICdjb2xsZWN0MicgYXMgdGhlIG1lYW5zIG9mIHByb2Nlc3NpbmcgY29uc3RydWN0b3JzLAp0aGVuIHRoYXQgcHJvZ3JhbSBub3JtYWxseSB1c2VzICdubScgdG8gc2NhbiBhbiBvYmplY3QgZmlsZSBmb3IKY29uc3RydWN0b3IgZnVuY3Rpb25zIHRvIGJlIGNhbGxlZC4KCiBPbiBjZXJ0YWluIGtpbmRzIG9mIHN5c3RlbXMsIHlvdSBjYW4gZGVmaW5lIHRoaXMgbWFjcm8gdG8gbWFrZQonY29sbGVjdDInIHdvcmsgZmFzdGVyIChhbmQsIGluIHNvbWUgY2FzZXMsIG1ha2UgaXQgd29yayBhdCBhbGwpOgoKIC0tIE1hY3JvOiBPQkpFQ1RfRk9STUFUX0NPRkYKICAgICBEZWZpbmUgdGhpcyBtYWNybyBpZiB0aGUgc3lzdGVtIHVzZXMgQ09GRiAoQ29tbW9uIE9iamVjdCBGaWxlCiAgICAgRm9ybWF0KSBvYmplY3QgZmlsZXMsIHNvIHRoYXQgJ2NvbGxlY3QyJyBjYW4gYXNzdW1lIHRoaXMgZm9ybWF0IGFuZAogICAgIHNjYW4gb2JqZWN0IGZpbGVzIGRpcmVjdGx5IGZvciBkeW5hbWljIGNvbnN0cnVjdG9yL2Rlc3RydWN0b3IKICAgICBmdW5jdGlvbnMuCgogICAgIFRoaXMgbWFjcm8gaXMgZWZmZWN0aXZlIG9ubHkgaW4gYSBuYXRpdmUgY29tcGlsZXI7ICdjb2xsZWN0MicgYXMKICAgICBwYXJ0IG9mIGEgY3Jvc3MgY29tcGlsZXIgYWx3YXlzIHVzZXMgJ25tJyBmb3IgdGhlIHRhcmdldCBtYWNoaW5lLgoKIC0tIE1hY3JvOiBSRUFMX05NX0ZJTEVfTkFNRQogICAgIERlZmluZSB0aGlzIG1hY3JvIGFzIGEgQyBzdHJpbmcgY29uc3RhbnQgY29udGFpbmluZyB0aGUgZmlsZSBuYW1lCiAgICAgdG8gdXNlIHRvIGV4ZWN1dGUgJ25tJy4gIFRoZSBkZWZhdWx0IGlzIHRvIHNlYXJjaCB0aGUgcGF0aCBub3JtYWxseQogICAgIGZvciAnbm0nLgoKICAgICBJZiB5b3VyIHN5c3RlbSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzIGFuZCBoYXMgYSBwcm9ncmFtIHRvIGxpc3QKICAgICB0aGUgZHluYW1pYyBkZXBlbmRlbmNpZXMgb2YgYSBnaXZlbiBsaWJyYXJ5IG9yIGV4ZWN1dGFibGUsIHlvdSBjYW4KICAgICBkZWZpbmUgdGhlc2UgbWFjcm9zIHRvIGVuYWJsZSBzdXBwb3J0IGZvciBydW5uaW5nIGluaXRpYWxpemF0aW9uCiAgICAgYW5kIHRlcm1pbmF0aW9uIGZ1bmN0aW9ucyBpbiBzaGFyZWQgbGlicmFyaWVzOgoKIC0tIE1hY3JvOiBMRERfU1VGRklYCiAgICAgRGVmaW5lIHRoaXMgbWFjcm8gdG8gYSBDIHN0cmluZyBjb25zdGFudCBjb250YWluaW5nIHRoZSBuYW1lIG9mIHRoZQogICAgIHByb2dyYW0gd2hpY2ggbGlzdHMgZHluYW1pYyBkZXBlbmRlbmNpZXMsIGxpa2UgJyJsZGQiJyB1bmRlciBTdW5PUwogICAgIDQuCgogLS0gTWFjcm86IFBBUlNFX0xERF9PVVRQVVQgKFBUUikKICAgICBEZWZpbmUgdGhpcyBtYWNybyB0byBiZSBDIGNvZGUgdGhhdCBleHRyYWN0cyBmaWxlbmFtZXMgZnJvbSB0aGUKICAgICBvdXRwdXQgb2YgdGhlIHByb2dyYW0gZGVub3RlZCBieSAnTEREX1NVRkZJWCcuICBQVFIgaXMgYSB2YXJpYWJsZQogICAgIG9mIHR5cGUgJ2NoYXIgKicgdGhhdCBwb2ludHMgdG8gdGhlIGJlZ2lubmluZyBvZiBhIGxpbmUgb2Ygb3V0cHV0CiAgICAgZnJvbSAnTEREX1NVRkZJWCcuICBJZiB0aGUgbGluZSBsaXN0cyBhIGR5bmFtaWMgZGVwZW5kZW5jeSwgdGhlCiAgICAgY29kZSBtdXN0IGFkdmFuY2UgUFRSIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGVuYW1lIG9uIHRoYXQKICAgICBsaW5lLiAgT3RoZXJ3aXNlLCBpdCBtdXN0IHNldCBQVFIgdG8gJ05VTEwnLgoKIC0tIE1hY3JvOiBTSExJQl9TVUZGSVgKICAgICBEZWZpbmUgdGhpcyBtYWNybyB0byBhIEMgc3RyaW5nIGNvbnN0YW50IGNvbnRhaW5pbmcgdGhlIGRlZmF1bHQKICAgICBzaGFyZWQgbGlicmFyeSBleHRlbnNpb24gb2YgdGhlIHRhcmdldCAoZS5nLiwgJyIuc28iJykuICAnY29sbGVjdDInCiAgICAgc3RyaXBzIHZlcnNpb24gaW5mb3JtYXRpb24gYWZ0ZXIgdGhpcyBzdWZmaXggd2hlbiBnZW5lcmF0aW5nIGdsb2JhbAogICAgIGNvbnN0cnVjdG9yIGFuZCBkZXN0cnVjdG9yIG5hbWVzLiAgVGhpcyBkZWZpbmUgaXMgb25seSBuZWVkZWQgb24KICAgICB0YXJnZXRzIHRoYXQgdXNlICdjb2xsZWN0MicgdG8gcHJvY2VzcyBjb25zdHJ1Y3RvcnMgYW5kCiAgICAgZGVzdHJ1Y3RvcnMuCgofCkZpbGU6IGdjY2ludC5pbmZvLCAgTm9kZTogSW5zdHJ1Y3Rpb24gT3V0cHV0LCAgTmV4dDogRGlzcGF0Y2ggVGFibGVzLCAgUHJldjogTWFjcm9zIGZvciBJbml0aWFsaXphdGlvbiwgIFVwOiBBc3NlbWJsZXIgRm9ybWF0CgoxNS4yMS43IE91dHB1dCBvZiBBc3NlbWJsZXIgSW5zdHJ1Y3Rpb25zCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KClRoaXMgZGVzY3JpYmVzIGFzc2VtYmxlciBpbnN0cnVjdGlvbiBvdXRwdXQuCgogLS0gTWFjcm86IFJFR0lTVEVSX05BTUVTCiAgICAgQSBDIGluaXRpYWxpemVyIGNvbnRhaW5pbmcgdGhlIGFzc2VtYmxlcidzIG5hbWVzIGZvciB0aGUgbWFjaGluZQogICAgIHJlZ2lzdGVycywgZWFjaCBvbmUgYXMgYSBDIHN0cmluZyBjb25zdGFudC4gIFRoaXMgaXMgd2hhdAogICAgIHRyYW5zbGF0ZXMgcmVnaXN0ZXIgbnVtYmVycyBpbiB0aGUgY29tcGlsZXIgaW50byBhc3NlbWJsZXIKICAgICBsYW5ndWFnZS4KCiAtLSBNYWNybzogQURESVRJT05BTF9SRUdJU1RFUl9OQU1FUwogICAgIElmIGRlZmluZWQsIGEgQyBpbml0aWFsaXplciBmb3IgYW4gYXJyYXkgb2Ygc3RydWN0dXJlcyBjb250YWluaW5nIGEKICAgICBuYW1lIGFuZCBhIHJlZ2lzdGVyIG51bWJlci4gIFRoaXMgbWFjcm8gZGVmaW5lcyBhZGRpdGlvbmFsIG5hbWVzCiAgICAgZm9yIGhhcmQgcmVnaXN0ZXJzLCB0aHVzIGFsbG93aW5nIHRoZSAnYXNtJyBvcHRpb24gaW4gZGVjbGFyYXRpb25zCiAgICAgdG8gcmVmZXIgdG8gcmVnaXN0ZXJzIHVzaW5nIGFsdGVybmF0ZSBuYW1lcy4KCiAtLSBNYWNybzogQVNNX09VVFBVVF9PUENPREUgKFNUUkVBTSwgUFRSKQogICAgIERlZmluZSB0aGlzIG1hY3JvIGlmIHlvdSBhcmUgdXNpbmcgYW4gdW51c3VhbCBhc3NlbWJsZXIgdGhhdAogICAgIHJlcXVpcmVzIGRpZmZlcmVudCBuYW1lcyBmb3IgdGhlIG1hY2hpbmUgaW5zdHJ1Y3Rpb25zLgoKICAgICBUaGUgZGVmaW5pdGlvbiBpcyBhIEMgc3RhdGVtZW50IG9yIHN0YXRlbWVudHMgd2hpY2ggb3V0cHV0IGFuCiAgICAgYXNzZW1ibGVyIGluc3RydWN0aW9uIG9wY29kZSB0byB0aGUgc3RkaW8gc3RyZWFtIFNUUkVBTS4gIFRoZQogICAgIG1hY3JvLW9wZXJhbmQgUFRSIGlzIGEgdmFyaWFibGUgb2YgdHlwZSAnY2hhciAqJyB3aGljaCBwb2ludHMgdG8KICAgICB0aGUgb3Bjb2RlIG5hbWUgaW4gaXRzICJpbnRlcm5hbCIgZm9ybS0tdGhlIGZvcm0gdGhhdCBpcyB3cml0dGVuIGluCiAgICAgdGhlIG1hY2hpbmUgZGVzY3JpcHRpb24uICBUaGUgZGVmaW5pdGlvbiBzaG91bGQgb3V0cHV0IHRoZSBvcGNvZGUKICAgICBuYW1lIHRvIFNUUkVBTSwgcGVyZm9ybWluZyBhbnkgdHJhbnNsYXRpb24geW91IGRlc2lyZSwgYW5kCiAgICAgaW5jcmVtZW50IHRoZSB2YXJpYWJsZSBQVFIgdG8gcG9pbnQgYXQgdGhlIGVuZCBvZiB0aGUgb3Bjb2RlIHNvCiAgICAgdGhhdCBpdCB3aWxsIG5vdCBiZSBvdXRwdXQgdHdpY2UuCgogICAgIEluIGZhY3QsIHlvdXIgbWFjcm8gZGVmaW5pdGlvbiBtYXkgcHJvY2VzcyBsZXNzIHRoYW4gdGhlIGVudGlyZQogICAgIG9wY29kZSBuYW1lLCBvciBtb3JlIHRoYW4gdGhlIG9wY29kZSBuYW1lOyBidXQgaWYgeW91IHdhbnQgdG8KICAgICBwcm9jZXNzIHRleHQgdGhhdCBpbmNsdWRlcyAnJSctc2VxdWVuY2VzIHRvIHN1YnN0aXR1dGUgb3BlcmFuZHMsCiAgICAgeW91IG11c3QgdGFrZSBjYXJlIG9mIHRoZSBzdWJzdGl0dXRpb24geW91cnNlbGYuICBKdXN0IGJlIHN1cmUgdG8KICAgICBpbmNyZW1lbnQgUFRSIG92ZXIgd2hhdGV2ZXIgdGV4dCBzaG91bGQgbm90IGJlIG91dHB1dCBub3JtYWxseS4KCiAgICAgSWYgeW91IG5lZWQgdG8gbG9vayBhdCB0aGUgb3BlcmFuZCB2YWx1ZXMsIHRoZXkgY2FuIGJlIGZvdW5kIGFzIHRoZQogICAgIGVsZW1lbnRzIG9mICdyZWNvZ19kYXRhLm9wZXJhbmQnLgoKICAgICBJZiB0aGUgbWFjcm8gZGVmaW5pdGlvbiBkb2VzIG5vdGhpbmcsIHRoZSBpbnN0cnVjdGlvbiBpcyBvdXRwdXQgaW4KICAgICB0aGUgdXN1YWwgd2F5LgoKIC0tIE1hY3JvOiBGSU5BTF9QUkVTQ0FOX0lOU04gKElOU04sIE9QVkVDLCBOT1BFUkFORFMpCiAgICAgSWYgZGVmaW5lZCwgYSBDIHN0YXRlbWVudCB0byBiZSBleGVjdXRlZCBqdXN0IHByaW9yIHRvIHRoZSBvdXRwdXQKICAgICBvZiBhc3NlbWJsZXIgY29kZSBmb3IgSU5TTiwgdG8gbW9kaWZ5IHRoZSBleHRyYWN0ZWQgb3BlcmFuZHMgc28KICAgICB0aGV5IHdpbGwgYmUgb3V0cHV0IGRpZmZlcmVudGx5LgoKICAgICBIZXJlIHRoZSBhcmd1bWVudCBPUFZFQyBpcyB0aGUgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIG9wZXJhbmRzCiAgICAgZXh0cmFjdGVkIGZyb20gSU5TTiwgYW5kIE5PUEVSQU5EUyBpcyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIG9mIHRoZQogICAgIHZlY3RvciB3aGljaCBjb250YWluIG1lYW5pbmdmdWwgZGF0YSBmb3IgdGhpcyBpbnNuLiAgVGhlIGNvbnRlbnRzCiAgICAgb2YgdGhpcyB2ZWN0b3IgYXJlIHdoYXQgd2lsbCBiZSB1c2VkIHRvIGNvbnZlcnQgdGhlIGluc24gdGVtcGxhdGUKICAgICBpbnRvIGFzc2VtYmxlciBjb2RlLCBzbyB5b3UgY2FuIGNoYW5nZSB0aGUgYXNzZW1ibGVyIG91dHB1dCBieQogICAgIGNoYW5naW5nIHRoZSBjb250ZW50cyBvZiB0aGUgdmVjdG9yLgoKICAgICBUaGlzIG1hY3JvIGlzIHVzZWZ1bCB3aGVuIHZhcmlvdXMgYXNzZW1ibGVyIHN5bnRheGVzIHNoYXJlIGEgc2luZ2xlCiAgICAgZmlsZSBvZiBpbnN0cnVjdGlvbiBwYXR0ZXJuczsgYnkgZGVmaW5pbmcgdGhpcyBtYWNybyBkaWZmZXJlbnRseSwKICAgICB5b3UgY2FuIGNhdXNlIGEgbGFyZ2UgY2xhc3Mgb2YgaW5zdHJ1Y3Rpb25zIHRvIGJlIG91dHB1dAogICAgIGRpZmZlcmVudGx5IChzdWNoIGFzIHdpdGggcmVhcnJhbmdlZCBvcGVyYW5kcykuICBOYXR1cmFsbHksCiAgICAgdmFyaWF0aW9ucyBpbiBhc3NlbWJsZXIgc3ludGF4IGFmZmVjdGluZyBpbmRpdmlkdWFsIGluc24gcGF0dGVybnMKICAgICBvdWdodCB0byBiZSBoYW5kbGVkIGJ5IHdyaXRpbmcgY29uZGl0aW9uYWwgb3V0cHV0IHJvdXRpbmVzIGluIHRob3NlCiAgICAgcGF0dGVybnMuCgogICAgIElmIHRoaXMgbWFjcm8gaXMgbm90IGRlZmluZWQsIGl0IGlzIGVxdWl2YWxlbnQgdG8gYSBudWxsIHN0YXRlbWVudC4KCiAtLSBNYWNybzogUFJJTlRfT1BFUkFORCAoU1RSRUFNLCBYLCBDT0RFKQogICAgIEEgQyBjb21wb3VuZCBzdGF0ZW1lbnQgdG8gb3V0cHV0IHRvIHN0ZGlvIHN0cmVhbSBTVFJFQU0gdGhlCiAgICAgYXNzZW1ibGVyIHN5bnRheCBmb3IgYW4gaW5zdHJ1Y3Rpb24gb3BlcmFuZCBYLiAgWCBpcyBhbiBSVEwKICAgICBleHByZXNzaW9uLgoKICAgICBDT0RFIGlzIGEgdmFsdWUgdGhhdCBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IG9uZSBvZiBzZXZlcmFsIHdheXMgb2YKICAgICBwcmludGluZyB0aGUgb3BlcmFuZC4gIEl0IGlzIHVzZWQgd2hlbiBpZGVudGljYWwgb3BlcmFuZHMgbXVzdCBiZQogICAgIHByaW50ZWQgZGlmZmVyZW50bHkgZGVwZW5kaW5nIG9uIHRoZSBjb250ZXh0LiAgQ09ERSBjb21lcyBmcm9tIHRoZQogICAgICclJyBzcGVjaWZpY2F0aW9uIHRoYXQgd2FzIHVzZWQgdG8gcmVxdWVzdCBwcmludGluZyBvZiB0aGUgb3BlcmFuZC4KICAgICBJZiB0aGUgc3BlY2lmaWNhdGlvbiB3YXMganVzdCAnJURJR0lUJyB0aGVuIENPREUgaXMgMDsgaWYgdGhlCiAgICAgc3BlY2lmaWNhdGlvbiB3YXMgJyVMVFIgRElHSVQnIHRoZW4gQ09ERSBpcyB0aGUgQVNDSUkgY29kZSBmb3IgTFRSLgoKICAgICBJZiBYIGlzIGEgcmVnaXN0ZXIsIHRoaXMgbWFjcm8gc2hvdWxkIHByaW50IHRoZSByZWdpc3RlcidzIG5hbWUuCiAgICAgVGhlIG5hbWVzIGNhbiBiZSBmb3VuZCBpbiBhbiBhcnJheSAncmVnX25hbWVzJyB3aG9zZSB0eXBlIGlzICdjaGFyCiAgICAgKltdJy4gICdyZWdfbmFtZXMnIGlzIGluaXRpYWxpemVkIGZyb20gJ1JFR0lTVEVSX05BTUVTJy4KCiAgICAgV2hlbiB0aGUgbWFjaGluZSBkZXNjcmlwdGlvbiBoYXMgYSBzcGVjaWZpY2F0aW9uICclUFVOQ1QnIChhICclJwogICAgIGZvbGxvd2VkIGJ5IGEgcHVuY3R1YXRpb24gY2hhcmFjdGVyKSwgdGhpcyBtYWNybyBpcyBjYWxsZWQgd2l0aCBhCiAgICAgbnVsbCBwb2ludGVyIGZvciBYIGFuZCB0aGUgcHVuY3R1YXRpb24gY2hhcmFjdGVyIGZvciBDT0RFLgoKIC0tIE1hY3JvOiBQUklOVF9PUEVSQU5EX1BVTkNUX1ZBTElEX1AgKENPREUpCiAgICAgQSBDIGV4cHJlc3Npb24gd2hpY2ggZXZhbHVhdGVzIHRvIHRydWUgaWYgQ09ERSBpcyBhIHZhbGlkCiAgICAgcHVuY3R1YXRpb24gY2hhcmFjdGVyIGZvciB1c2UgaW4gdGhlICdQUklOVF9PUEVSQU5EJyBtYWNyby4gIElmCiAgICAgJ1BSSU5UX09QRVJBTkRfUFVOQ1RfVkFMSURfUCcgaXMgbm90IGRlZmluZWQsIGl0IG1lYW5zIHRoYXQgbm8KICAgICBwdW5jdHVhdGlvbiBjaGFyYWN0ZXJzIChleGNlcHQgZm9yIHRoZSBzdGFuZGFyZCBvbmUsICclJykgYXJlIHVzZWQKICAgICBpbiB0aGlzIHdheS4KCiAtLSBNYWNybzogUFJJTlRfT1BFUkFORF9BRERSRVNTIChTVFJFQU0sIFgpCiAgICAgQSBDIGNvbXBvdW5kIHN0YXRlbWVudCB0byBvdXRwdXQgdG8gc3RkaW8gc3RyZWFtIFNUUkVBTSB0aGUKICAgICBhc3NlbWJsZXIgc3ludGF4IGZvciBhbiBpbnN0cnVjdGlvbiBvcGVyYW5kIHRoYXQgaXMgYSBtZW1vcnkKICAgICByZWZlcmVuY2Ugd2hvc2UgYWRkcmVzcyBpcyBYLiAgWCBpcyBhbiBSVEwgZXhwcmVzc2lvbi4KCiAgICAgT24gc29tZSBtYWNoaW5lcywgdGhlIHN5bnRheCBmb3IgYSBzeW1ib2xpYyBhZGRyZXNzIGRlcGVuZHMgb24gdGhlCiAgICAgc2VjdGlvbiB0aGF0IHRoZSBhZGRyZXNzIHJlZmVycyB0by4gIE9uIHRoZXNlIG1hY2hpbmVzLCBkZWZpbmUgdGhlCiAgICAgaG9vayAnVEFSR0VUX0VOQ09ERV9TRUNUSU9OX0lORk8nIHRvIHN0b3JlIHRoZSBpbmZvcm1hdGlvbiBpbnRvIHRoZQogICAgICdzeW1ib2xfcmVmJywgYW5kIHRoZW4gY2hlY2sgZm9yIGl0IGhlcmUuICAqTm90ZSBBc3NlbWJsZXIKICAgICBGb3JtYXQ6Oi4KCiAtLSBNYWNybzogREJSX09VVFBVVF9TRVFFTkQgKEZJTEUpCiAgICAgQSBDIHN0YXRlbWVudCwgdG8gYmUgZXhlY3V0ZWQgYWZ0ZXIgYWxsIHNsb3QtZmlsbGVyIGluc3RydWN0aW9ucwogICAgIGhhdmUgYmVlbiBvdXRwdXQuICBJZiBuZWNlc3NhcnksIGNhbGwgJ2Ricl9zZXF1ZW5jZV9sZW5ndGgnIHRvCiAgICAgZGV0ZXJtaW5lIHRoZSBudW1iZXIgb2Ygc2xvdHMgZmlsbGVkIGluIGEgc2VxdWVuY2UgKHplcm8gaWYgbm90CiAgICAgY3VycmVudGx5IG91dHB1dHRpbmcgYSBzZXF1ZW5jZSksIHRvIGRlY2lkZSBob3cgbWFueSBuby1vcHMgdG8KICAgICBvdXRwdXQsIG9yIHdoYXRldmVyLgoKICAgICBEb24ndCBkZWZpbmUgdGhpcyBtYWNybyBpZiBpdCBoYXMgbm90aGluZyB0byBkbywgYnV0IGl0IGlzIGhlbHBmdWwKICAgICBpbiByZWFkaW5nIGFzc2VtYmx5IG91dHB1dCBpZiB0aGUgZXh0ZW50IG9mIHRoZSBkZWxheSBzZXF1ZW5jZSBpcwogICAgIG1hZGUgZXhwbGljaXQgKGUuZy4gd2l0aCB3aGl0ZSBzcGFjZSkuCgogTm90ZSB0aGF0IG91dHB1dCByb3V0aW5lcyBmb3IgaW5zdHJ1Y3Rpb25zIHdpdGggZGVsYXkgc2xvdHMgbXVzdCBiZQpwcmVwYXJlZCB0byBkZWFsIHdpdGggbm90IGJlaW5nIG91dHB1dCBhcyBwYXJ0IG9mIGEgc2VxdWVuY2UgKGkuZS4gd2hlbgp0aGUgc2NoZWR1bGluZyBwYXNzIGlzIG5vdCBydW4sIG9yIHdoZW4gbm8gc2xvdCBmaWxsZXJzIGNvdWxkIGJlIGZvdW5kLikKVGhlIHZhcmlhYmxlICdmaW5hbF9zZXF1ZW5jZScgaXMgbnVsbCB3aGVuIG5vdCBwcm9jZXNzaW5nIGEgc2VxdWVuY2UsCm90aGVyd2lzZSBpdCBjb250YWlucyB0aGUgJ3NlcXVlbmNlJyBydHggYmVpbmcgb3V0cHV0LgoKIC0tIE1hY3JvOiBSRUdJU1RFUl9QUkVGSVgKIC0tIE1hY3JvOiBMT0NBTF9MQUJFTF9QUkVGSVgKIC0tIE1hY3JvOiBVU0VSX0xBQkVMX1BSRUZJWAogLS0gTWFjcm86IElNTUVESUFURV9QUkVGSVgKICAgICBJZiBkZWZpbmVkLCBDIHN0cmluZyBleHByZXNzaW9ucyB0byBiZSB1c2VkIGZvciB0aGUgJyVSJywgJyVMJywKICAgICAnJVUnLCBhbmQgJyVJJyBvcHRpb25zIG9mICdhc21fZnByaW50ZicgKHNlZSAnZmluYWwuYycpLiAgVGhlc2UgYXJlCiAgICAgdXNlZnVsIHdoZW4gYSBzaW5nbGUgJ21kJyBmaWxlIG11c3Qgc3VwcG9ydCBtdWx0aXBsZSBhc3NlbWJsZXIKICAgICBmb3JtYXRzLiAgSW4gdGhhdCBjYXNlLCB0aGUgdmFyaW91cyAndG0uaCcgZmlsZXMgY2FuIGRlZmluZSB0aGVzZQogICAgIG1hY3JvcyBkaWZmZXJlbnRseS4KCiAtLSBNYWNybzogQVNNX0ZQUklOVEZfRVhURU5TSU9OUyAoRklMRSwgQVJHUFRSLCBGT1JNQVQpCiAgICAgSWYgZGVmaW5lZCB0aGlzIG1hY3JvIHNob3VsZCBleHBhbmQgdG8gYSBzZXJpZXMgb2YgJ2Nhc2UnCiAgICAgc3RhdGVtZW50cyB3aGljaCB3aWxsIGJlIHBhcnNlZCBpbnNpZGUgdGhlICdzd2l0Y2gnIHN0YXRlbWVudCBvZgogICAgIHRoZSAnYXNtX2ZwcmludGYnIGZ1bmN0aW9uLiAgVGhpcyBhbGxvd3MgdGFyZ2V0cyB0byBkZWZpbmUgZXh0cmEKICAgICBwcmludGYgZm9ybWF0cyB3aGljaCBtYXkgdXNlZnVsIHdoZW4gZ2VuZXJhdGluZyB0aGVpciBhc3NlbWJsZXIKICAgICBzdGF0ZW1lbnRzLiAgTm90ZSB0aGF0IHVwcGVyY2FzZSBsZXR0ZXJzIGFyZSByZXNlcnZlZCBmb3IgZnV0dXJlCiAgICAgZ2VuZXJpYyBleHRlbnNpb25zIHRvIGFzbV9mcHJpbnRmLCBhbmQgc28gYXJlIG5vdCBhdmFpbGFibGUgdG8KICAgICB0YXJnZXQgc3BlY2lmaWMgY29kZS4gIFRoZSBvdXRwdXQgZmlsZSBpcyBnaXZlbiBieSB0aGUgcGFyYW1ldGVyCiAgICAgRklMRS4gIFRoZSB2YXJhcmdzIGlucHV0IHBvaW50ZXIgaXMgQVJHUFRSIGFuZCB0aGUgcmVzdCBvZiB0aGUKICAgICBmb3JtYXQgc3RyaW5nLCBzdGFydGluZyB0aGUgY2hhcmFjdGVyIGFmdGVyIHRoZSBvbmUgdGhhdCBpcyBiZWluZwogICAgIHN3aXRjaGVkIHVwb24sIGlzIHBvaW50ZWQgdG8gYnkgRk9STUFULgoKIC0tIE1hY3JvOiBBU1NFTUJMRVJfRElBTEVDVAogICAgIElmIHlvdXIgdGFyZ2V0IHN1cHBvcnRzIG11bHRpcGxlIGRpYWxlY3RzIG9mIGFzc2VtYmxlciBsYW5ndWFnZQogICAgIChzdWNoIGFzIGRpZmZlcmVudCBvcGNvZGVzKSwgZGVmaW5lIHRoaXMgbWFjcm8gYXMgYSBDIGV4cHJlc3Npb24KICAgICB0aGF0IGdpdmVzIHRoZSBudW1lcmljIGluZGV4IG9mIHRoZSBhc3NlbWJsZXIgbGFuZ3VhZ2UgZGlhbGVjdCB0bwogICAgIHVzZSwgd2l0aCB6ZXJvIGFzIHRoZSBmaXJzdCB2YXJpYW50LgoKICAgICBJZiB0aGlzIG1hY3JvIGlzIGRlZmluZWQsIHlvdSBtYXkgdXNlIGNvbnN0cnVjdHMgb2YgdGhlIGZvcm0KICAgICAgICAgICd7b3B0aW9uMHxvcHRpb24xfG9wdGlvbjIuLi59JwogICAgIGluIHRoZSBvdXRwdXQgdGVtcGxhdGVzIG9mIHBhdHRlcm5zICgqbm90ZSBPdXRwdXQgVGVtcGxhdGU6Oikgb3IgaW4KICAgICB0aGUgZmlyc3QgYXJndW1lbnQgb2YgJ2FzbV9mcHJpbnRmJy4gIFRoaXMgY29uc3RydWN0IG91dHB1dHMKICAgICAnb3B0aW9uMCcsICdvcHRpb24xJywgJ29wdGlvbjInLCBldGMuLCBpZiB0aGUgdmFsdWUgb2YKICAgICAnQVNTRU1CTEVSX0RJQUxFQ1QnIGlzIHplcm8sIG9uZSwgdHdvLCBldGMuICBBbnkgc3BlY2lhbCBjaGFyYWN0ZXJzCiAgICAgd2l0aGluIHRoZXNlIHN0cmluZ3MgcmV0YWluIHRoZWlyIHVzdWFsIG1lYW5pbmcuICBJZiB0aGVyZSBhcmUKICAgICBmZXdlciBhbHRlcm5hdGl2ZXMgd2l0aGluIHRoZSBicmFjZXMgdGhhbiB0aGUgdmFsdWUgb2YKICAgICAnQVNTRU1CTEVSX0RJQUxFQ1QnLCB0aGUgY29uc3RydWN0IG91dHB1dHMgbm90aGluZy4KCiAgICAgSWYgeW91IGRvIG5vdCBkZWZpbmUgdGhpcyBtYWNybywgdGhlIGNoYXJhY3RlcnMgJ3snLCAnfCcgYW5kICd9JyBkbwogICAgIG5vdCBoYXZlIGFueSBzcGVjaWFsIG1lYW5pbmcgd2hlbiB1c2VkIGluIHRlbXBsYXRlcyBvciBvcGVyYW5kcyB0bwogICAgICdhc21fZnByaW50ZicuCgogICAgIERlZmluZSB0aGUgbWFjcm9zICdSRUdJU1RFUl9QUkVGSVgnLCAnTE9DQUxfTEFCRUxfUFJFRklYJywKICAgICAnVVNFUl9MQUJFTF9QUkVGSVgnIGFuZCAnSU1NRURJQVRFX1BSRUZJWCcgaWYgeW91IGNhbiBleHByZXNzIHRoZQogICAgIHZhcmlhdGlvbnMgaW4gYXNzZW1ibGVyIGxhbmd1YWdlIHN5bnRheCB3aXRoIHRoYXQgbWVjaGFuaXNtLgogICAgIERlZmluZSAnQVNTRU1CTEVSX0RJQUxFQ1QnIGFuZCB1c2UgdGhlICd7b3B0aW9uMHxvcHRpb24xfScgc3ludGF4CiAgICAgaWYgdGhlIHN5bnRheCB2YXJpYW50IGFyZSBsYXJnZXIgYW5kIGludm9sdmUgc3VjaCB0aGluZ3MgYXMKICAgICBkaWZmZXJlbnQgb3Bjb2RlcyBvciBvcGVyYW5kIG9yZGVyLgoKIC0tIE1hY3JvOiBBU01fT1VUUFVUX1JFR19QVVNIIChTVFJFQU0sIFJFR05PKQogICAgIEEgQyBleHByZXNzaW9uIHRvIG91dHB1dCB0byBTVFJFQU0gc29tZSBhc3NlbWJsZXIgY29kZSB3aGljaCB3aWxsCiAgICAgcHVzaCBoYXJkIHJlZ2lzdGVyIG51bWJlciBSRUdOTyBvbnRvIHRoZSBzdGFjay4gIFRoZSBjb2RlIG5lZWQgbm90CiAgICAgYmUgb3B0aW1hbCwgc2luY2UgdGhpcyBtYWNybyBpcyB1c2VkIG9ubHkgd2hlbiBwcm9maWxpbmcuCgogLS0gTWFjcm86IEFTTV9PVVRQVVRfUkVHX1BPUCAoU1RSRUFNLCBSRUdOTykKICAgICBBIEMgZXhwcmVzc2lvbiB0byBvdXRwdXQgdG8gU1RSRUFNIHNvbWUgYXNzZW1ibGVyIGNvZGUgd2hpY2ggd2lsbAogICAgIHBvcCBoYXJkIHJlZ2lzdGVyIG51bWJlciBSRUdOTyBvZmYgb2YgdGhlIHN0YWNrLiAgVGhlIGNvZGUgbmVlZCBub3QKICAgICBiZSBvcHRpbWFsLCBzaW5jZSB0aGlzIG1hY3JvIGlzIHVzZWQgb25seSB3aGVuIHByb2ZpbGluZy4KCh8KRmlsZTogZ2NjaW50LmluZm8sICBOb2RlOiBEaXNwYXRjaCBUYWJsZXMsICBOZXh0OiBFeGNlcHRpb24gUmVnaW9uIE91dHB1dCwgIFByZXY6IEluc3RydWN0aW9uIE91dHB1dCwgIFVwOiBBc3NlbWJsZXIgRm9ybWF0CgoxNS4yMS44IE91dHB1dCBvZiBEaXNwYXRjaCBUYWJsZXMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpUaGlzIGNvbmNlcm5zIGRpc3BhdGNoIHRhYmxlcy4KCiAtLSBNYWNybzogQVNNX09VVFBVVF9BRERSX0RJRkZfRUxUIChTVFJFQU0sIEJPRFksIFZBTFVFLCBSRUwpCiAgICAgQSBDIHN0YXRlbWVudCB0byBvdXRwdXQgdG8gdGhlIHN0ZGlvIHN0cmVhbSBTVFJFQU0gYW4gYXNzZW1ibGVyCiAgICAgcHNldWRvLWluc3RydWN0aW9uIHRvIGdlbmVyYXRlIGEgZGlmZmVyZW5jZSBiZXR3ZWVuIHR3byBsYWJlbHMuCiAgICAgVkFMVUUgYW5kIFJFTCBhcmUgdGhlIG51bWJlcnMgb2YgdHdvIGludGVybmFsIGxhYmVscy4gIFRoZQogICAgIGRlZmluaXRpb25zIG9mIHRoZXNlIGxhYmVscyBhcmUgb3V0cHV0IHVzaW5nCiAgICAgJygqdGFyZ2V0bS5hc21fb3V0LmludGVybmFsX2xhYmVsKScsIGFuZCB0aGV5IG11c3QgYmUgcHJpbnRlZCBpbgogICAgIHRoZSBzYW1lIHdheSBoZXJlLiAgRm9yIGV4YW1wbGUsCgogICAgICAgICAgZnByaW50ZiAoU1RSRUFNLCAiXHQud29yZCBMJWQtTCVkXG4iLAogICAgICAgICAgICAgICAgICAgVkFMVUUsIFJFTCkKCiAgICAgWW91IG11c3QgcHJvdmlkZSB0aGlzIG1hY3JvIG9uIG1hY2hpbmVzIHdoZXJlIHRoZSBhZGRyZXNzZXMgaW4gYQogICAgIGRpc3BhdGNoIHRhYmxlIGFyZSByZWxhdGl2ZSB0byB0aGUgdGFibGUncyBvd24gYWRkcmVzcy4gIElmCiAgICAgZGVmaW5lZCwgR0NDIHdpbGwgYWxzbyB1c2UgdGhpcyBtYWNybyBvbiBhbGwgbWFjaGluZXMgd2hlbgogICAgIHByb2R1Y2luZyBQSUMuICBCT0RZIGlzIHRoZSBib2R5IG9mIHRoZSAnQUREUl9ESUZGX1ZFQyc7IGl0IGlzCiAgICAgcHJvdmlkZWQgc28gdGhhdCB0aGUgbW9kZSBhbmQgZmxhZ3MgY2FuIGJlIHJlYWQuCgogLS0gTWFjcm86IEFTTV9PVVRQVVRfQUREUl9WRUNfRUxUIChTVFJFQU0sIFZBTFVFKQogICAgIFRoaXMgbWFjcm8gc2hvdWxkIGJlIHByb3ZpZGVkIG9uIG1hY2hpbmVzIHdoZXJlIHRoZSBhZGRyZXNzZXMgaW4gYQogICAgIGRpc3BhdGNoIHRhYmxlIGFyZSBhYnNvbHV0ZS4KCiAgICAgVGhlIGRlZmluaXRpb24gc2hvdWxkIGJlIGEgQyBzdGF0ZW1lbnQgdG8gb3V0cHV0IHRvIHRoZSBzdGRpbwogICAgIHN0cmVhbSBTVFJFQU0gYW4gYXNzZW1ibGVyIHBzZXVkby1pbnN0cnVjdGlvbiB0byBnZW5lcmF0ZSBhCiAgICAgcmVmZXJlbmNlIHRvIGEgbGFiZWwuICBWQUxVRSBpcyB0aGUgbnVtYmVyIG9mIGFuIGludGVybmFsIGxhYmVsCiAgICAgd2hvc2UgZGVmaW5pdGlvbiBpcyBvdXRwdXQgdXNpbmcKICAgICAnKCp0YXJnZXRtLmFzbV9vdXQuaW50ZXJuYWxfbGFiZWwpJy4gIEZvciBleGFtcGxlLAoKICAgICAgICAgIGZwcmludGYgKFNUUkVBTSwgIlx0LndvcmQgTCVkXG4iLCBWQUxVRSkKCiAtLSBNYWNybzogQVNNX09VVFBVVF9DQVNFX0xBQkVMIChTVFJFQU0sIFBSRUZJWCwgTlVNLCBUQUJMRSkKICAgICBEZWZpbmUgdGhpcyBpZiB0aGUgbGFiZWwgYmVmb3JlIGEganVtcC10YWJsZSBuZWVkcyB0byBiZSBvdXRwdXQKICAgICBzcGVjaWFsbHkuICBUaGUgZmlyc3QgdGhyZWUgYXJndW1lbnRzIGFyZSB0aGUgc2FtZSBhcyBmb3IKICAgICAnKCp0YXJnZXRtLmFzbV9vdXQuaW50ZXJuYWxfbGFiZWwpJzsgdGhlIGZvdXJ0aCBhcmd1bWVudCBpcyB0aGUKICAgICBqdW1wLXRhYmxlIHdoaWNoIGZvbGxvd3MgKGEgJ2p1bXBfaW5zbicgY29udGFpbmluZyBhbiAnYWRkcl92ZWMnIG9yCiAgICAgJ2FkZHJfZGlmZl92ZWMnKS4KCiAgICAgVGhpcyBmZWF0dXJlIGlzIHVzZWQgb24gc3lzdGVtIFYgdG8gb3V0cHV0IGEgJ3N3YmVnJyBzdGF0ZW1lbnQgZm9yCiAgICAgdGhlIHRhYmxlLgoKICAgICBJZiB0aGlzIG1hY3JvIGlzIG5vdCBkZWZpbmVkLCB0aGVzZSBsYWJlbHMgYXJlIG91dHB1dCB3aXRoCiAgICAgJygqdGFyZ2V0bS5hc21fb3V0LmludGVybmFsX2xhYmVsKScuCgogLS0gTWFjcm86IEFTTV9PVVRQVVRfQ0FTRV9FTkQgKFNUUkVBTSwgTlVNLCBUQUJMRSkKICAgICBEZWZpbmUgdGhpcyBpZiBzb21ldGhpbmcgc3BlY2lhbCBtdXN0IGJlIG91dHB1dCBhdCB0aGUgZW5kIG9mIGEKICAgICBqdW1wLXRhYmxlLiAgVGhlIGRlZmluaXRpb24gc2hvdWxkIGJlIGEgQyBzdGF0ZW1lbnQgdG8gYmUgZXhlY3V0ZWQKICAgICBhZnRlciB0aGUgYXNzZW1ibGVyIGNvZGUgZm9yIHRoZSB0YWJsZSBpcyB3cml0dGVuLiAgSXQgc2hvdWxkIHdyaXRlCiAgICAgdGhlIGFwcHJvcHJpYXRlIGNvZGUgdG8gc3RkaW8gc3RyZWFtIFNUUkVBTS4gIFRoZSBhcmd1bWVudCBUQUJMRSBpcwogICAgIHRoZSBqdW1wLXRhYmxlIGluc24sIGFuZCBOVU0gaXMgdGhlIGxhYmVsLW51bWJlciBvZiB0aGUgcHJlY2VkaW5nCiAgICAgbGFiZWwuCgogICAgIElmIHRoaXMgbWFjcm8gaXMgbm90IGRlZmluZWQsIG5vdGhpbmcgc3BlY2lhbCBpcyBvdXRwdXQgYXQgdGhlIGVuZAogICAgIG9mIHRoZSBqdW1wLXRhYmxlLgoKIC0tIFRhcmdldCBIb29rOiB2b2lkIFRBUkdFVF9BU01fRU1JVF9VTldJTkRfTEFCRUwgKFNUUkVBTSwgREVDTCwKICAgICAgICAgIEZPUl9FSCwgRU1QVFkpCiAgICAgVGhpcyB0YXJnZXQgaG9vayBlbWl0cyBhIGxhYmVsIGF0IHRoZSBiZWdpbm5pbmcgb2YgZWFjaCBGREUuICBJdAogICAgIHNob3VsZCBiZSBkZWZpbmVkIG9uIHRhcmdldHMgd2hlcmUgRkRFcyBuZWVkIHNwZWNpYWwgbGFiZWxzLCBhbmQgaXQKICAgICBzaG91bGQgd3JpdGUgdGhlIGFwcHJvcHJpYXRlIGxhYmVsLCBmb3IgdGhlIEZERSBhc3NvY2lhdGVkIHdpdGggdGhlCiAgICAgZnVuY3Rpb24gZGVjbGFyYXRpb24gREVDTCwgdG8gdGhlIHN0ZGlvIHN0cmVhbSBTVFJFQU0uICBUaGUgdGhpcmQKICAgICBhcmd1bWVudCwgRk9SX0VILCBpcyBhIGJvb2xlYW46IHRydWUgaWYgdGhpcyBpcyBmb3IgYW4gZXhjZXB0aW9uCiAgICAgdGFibGUuICBUaGUgZm91cnRoIGFyZ3VtZW50LCBFTVBUWSwgaXMgYSBib29sZWFuOiB0cnVlIGlmIHRoaXMgaXMgYQogICAgIHBsYWNlaG9sZGVyIGxhYmVsIGZvciBhbiBvbWl0dGVkIEZERS4KCiAgICAgVGhlIGRlZmF1bHQgaXMgdGhhdCBGREVzIGFyZSBub3QgZ2l2ZW4gbm9ubG9jYWwgbGFiZWxzLgoKIC0tIFRhcmdldCBIb29rOiB2b2lkIFRBUkdFVF9BU01fRU1JVF9FWENFUFRfVEFCTEVfTEFCRUwgKFNUUkVBTSkKICAgICBUaGlzIHRhcmdldCBob29rIGVtaXRzIGEgbGFiZWwgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZXhjZXB0aW9uCiAgICAgdGFibGUuICBJdCBzaG91bGQgYmUgZGVmaW5lZCBvbiB0YXJnZXRzIHdoZXJlIGl0IGlzIGRlc2lyYWJsZSBmb3IKICAgICB0aGUgdGFibGUgdG8gYmUgYnJva2VuIHVwIGFjY29yZGluZyB0byBmdW5jdGlvbi4KCiAgICAgVGhlIGRlZmF1bHQgaXMgdGhhdCBubyBsYWJlbCBpcyBlbWl0dGVkLgoKIC0tIFRhcmdldCBIb29rOiB2b2lkIFRBUkdFVF9VTldJTkRfRU1JVCAoRklMRSAqIFNUUkVBTSwgcnR4IElOU04pCiAgICAgVGhpcyB0YXJnZXQgaG9vayBlbWl0cyBhbmQgYXNzZW1ibHkgZGlyZWN0aXZlcyByZXF1aXJlZCB0byB1bndpbmQKICAgICB0aGUgZ2l2ZW4gaW5zdHJ1Y3Rpb24uICBUaGlzIGlzIG9ubHkgdXNlZCB3aGVuIFRBUkdFVF9VTldJTkRfSU5GTwogICAgIGlzIHNldC4KCh8KRmlsZTogZ2NjaW50LmluZm8sICBOb2RlOiBFeGNlcHRpb24gUmVnaW9uIE91dHB1dCwgIE5leHQ6IEFsaWdubWVudCBPdXRwdXQsICBQcmV2OiBEaXNwYXRjaCBUYWJsZXMsICBVcDogQXNzZW1ibGVyIEZvcm1hdAoKMTUuMjEuOSBBc3NlbWJsZXIgQ29tbWFuZHMgZm9yIEV4Y2VwdGlvbiBSZWdpb25zCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKVGhpcyBkZXNjcmliZXMgY29tbWFuZHMgbWFya2luZyB0aGUgc3RhcnQgYW5kIHRoZSBlbmQgb2YgYW4gZXhjZXB0aW9uCnJlZ2lvbi4KCiAtLSBNYWNybzogRUhfRlJBTUVfU0VDVElPTl9OQU1FCiAgICAgSWYgZGVmaW5lZCwgYSBDIHN0cmluZyBjb25zdGFudCBmb3IgdGhlIG5hbWUgb2YgdGhlIHNlY3Rpb24KICAgICBjb250YWluaW5nIGV4Y2VwdGlvbiBoYW5kbGluZyBmcmFtZSB1bndpbmQgaW5mb3JtYXRpb24uICBJZiBub3QKICAgICBkZWZpbmVkLCBHQ0Mgd2lsbCBwcm92aWRlIGEgZGVmYXVsdCBkZWZpbml0aW9uIGlmIHRoZSB0YXJnZXQKICAgICBzdXBwb3J0cyBuYW1lZCBzZWN0aW9ucy4gICdjcnRzdHVmZi5jJyB1c2VzIHRoaXMgbWFjcm8gdG8gc3dpdGNoIHRvCiAgICAgdGhlIGFwcHJvcHJpYXRlIHNlY3Rpb24uCgogICAgIFlvdSBzaG91bGQgZGVmaW5lIHRoaXMgc3ltYm9sIGlmIHlvdXIgdGFyZ2V0IHN1cHBvcnRzIERXQVJGIDIgZnJhbWUKICAgICB1bndpbmQgaW5mb3JtYXRpb24gYW5kIHRoZSBkZWZhdWx0IGRlZmluaXRpb24gZG9lcyBub3Qgd29yay4KCiAtLSBNYWNybzogRUhfRlJBTUVfSU5fREFUQV9TRUNUSU9OCiAgICAgSWYgZGVmaW5lZCwgRFdBUkYgMiBmcmFtZSB1bndpbmQgaW5mb3JtYXRpb24gd2lsbCBiZSBwbGFjZWQgaW4gdGhlCiAgICAgZGF0YSBzZWN0aW9uIGV2ZW4gdGhvdWdoIHRoZSB0YXJnZXQgc3VwcG9ydHMgbmFtZWQgc2VjdGlvbnMuICBUaGlzCiAgICAgbWlnaHQgYmUgbmVjZXNzYXJ5LCBmb3IgaW5zdGFuY2UsIGlmIHRoZSBzeXN0ZW0gbGlua2VyIGRvZXMgZ2FyYmFnZQogICAgIGNvbGxlY3Rpb24gYW5kIHNlY3Rpb25zIGNhbm5vdCBiZSBtYXJrZWQgYXMgbm90IHRvIGJlIGNvbGxlY3RlZC4KCiAgICAgRG8gbm90IGRlZmluZSB0aGlzIG1hY3JvIHVubGVzcyAnVEFSR0VUX0FTTV9OQU1FRF9TRUNUSU9OJyBpcyBhbHNvCiAgICAgZGVmaW5lZC4KCiAtLSBNYWNybzogRUhfVEFCTEVTX0NBTl9CRV9SRUFEX09OTFkKICAgICBEZWZpbmUgdGhpcyBtYWNybyB0byAxIGlmIHlvdXIgdGFyZ2V0IGlzIHN1Y2ggdGhhdCBubyBmcmFtZSB1bndpbmQKICAgICBpbmZvcm1hdGlvbiBlbmNvZGluZyB1c2VkIHdpdGggbm9uLVBJQyBjb2RlIHdpbGwgZXZlciByZXF1aXJlIGEKICAgICBydW50aW1lIHJlbG9jYXRpb24sIGJ1dCB0aGUgbGlua2VyIG1heSBub3Qgc3VwcG9ydCBtZXJnaW5nCiAgICAgcmVhZC1vbmx5IGFuZCByZWFkLXdyaXRlIHNlY3Rpb25zIGludG8gYSBzaW5nbGUgcmVhZC13cml0ZSBzZWN0aW9uLgoKIC0tIE1hY3JvOiBNQVNLX1JFVFVSTl9BRERSCiAgICAgQW4gcnR4IHVzZWQgdG8gbWFzayB0aGUgcmV0dXJuIGFkZHJlc3MgZm91bmQgdmlhICdSRVRVUk5fQUREUl9SVFgnLAogICAgIHNvIHRoYXQgaXQgZG9lcyBub3QgY29udGFpbiBhbnkgZXh0cmFuZW91cyBzZXQgYml0cyBpbiBpdC4KCiAtLSBNYWNybzogRFdBUkYyX1VOV0lORF9JTkZPCiAgICAgRGVmaW5lIHRoaXMgbWFjcm8gdG8gMCBpZiB5b3VyIHRhcmdldCBzdXBwb3J0cyBEV0FSRiAyIGZyYW1lIHVud2luZAogICAgIGluZm9ybWF0aW9uLCBidXQgaXQgZG9lcyBub3QgeWV0IHdvcmsgd2l0aCBleGNlcHRpb24gaGFuZGxpbmcuCiAgICAgT3RoZXJ3aXNlLCBpZiB5b3VyIHRhcmdldCBzdXBwb3J0cyB0aGlzIGluZm9ybWF0aW9uIChpZiBpdCBkZWZpbmVzCiAgICAgJ0lOQ09NSU5HX1JFVFVSTl9BRERSX1JUWCcgYW5kIGVpdGhlciAnVU5BTElHTkVEX0lOVF9BU01fT1AnIG9yCiAgICAgJ09CSkVDVF9GT1JNQVRfRUxGJyksIEdDQyB3aWxsIHByb3ZpZGUgYSBkZWZhdWx0IGRlZmluaXRpb24gb2YgMS4KCiAgICAgSWYgJ1RBUkdFVF9VTldJTkRfSU5GTycgaXMgZGVmaW5lZCwgdGhlIHRhcmdldCBzcGVjaWZpYyB1bndpbmRlcgogICAgIHdpbGwgYmUgdXNlZCBpbiBhbGwgY2FzZXMuICBEZWZpbmluZyB0aGlzIG1hY3JvIHdpbGwgZW5hYmxlIHRoZQogICAgIGdlbmVyYXRpb24gb2YgRFdBUkYgMiBmcmFtZSBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24uCgogICAgIElmICdUQVJHRVRfVU5XSU5EX0lORk8nIGlzIG5vdCBkZWZpbmVkLCBhbmQgdGhpcyBtYWNybyBpcyBkZWZpbmVkCiAgICAgdG8gMSwgdGhlIERXQVJGIDIgdW53aW5kZXIgd2lsbCBiZSB0aGUgZGVmYXVsdCBleGNlcHRpb24gaGFuZGxpbmcKICAgICBtZWNoYW5pc207IG90aGVyd2lzZSwgdGhlICdzZXRqbXAnLydsb25nam1wJy1iYXNlZCBzY2hlbWUgd2lsbCBiZQogICAgIHVzZWQgYnkgZGVmYXVsdC4KCiAtLSBNYWNybzogVEFSR0VUX1VOV0lORF9JTkZPCiAgICAgRGVmaW5lIHRoaXMgbWFjcm8gaWYgeW91ciB0YXJnZXQgaGFzIEFCSSBzcGVjaWZpZWQgdW53aW5kIHRhYmxlcy4KICAgICBVc3VhbGx5IHRoZXNlIHdpbGwgYmUgb3V0cHV0IGJ5ICdUQVJHRVRfVU5XSU5EX0VNSVQnLgoKIC0tIFZhcmlhYmxlOiBUYXJnZXQgSG9vayBib29sIFRBUkdFVF9VTldJTkRfVEFCTEVTX0RFRkFVTFQKICAgICBUaGlzIHZhcmlhYmxlIHNob3VsZCBiZSBzZXQgdG8gJ3RydWUnIGlmIHRoZSB0YXJnZXQgQUJJIHJlcXVpcmVzCiAgICAgdW53aW5kaW5nIHRhYmxlcyBldmVuIHdoZW4gZXhjZXB0aW9ucyBhcmUgbm90IHVzZWQuCgogLS0gTWFjcm86IE1VU1RfVVNFX1NKTEpfRVhDRVBUSU9OUwogICAgIFRoaXMgbWFjcm8gbmVlZCBvbmx5IGJlIGRlZmluZWQgaWYgJ0RXQVJGMl9VTldJTkRfSU5GTycgaXMKICAgICBydW50aW1lLXZhcmlhYmxlLiAgSW4gdGhhdCBjYXNlLCAnZXhjZXB0LmgnIGNhbm5vdCBjb3JyZWN0bHkKICAgICBkZXRlcm1pbmUgdGhlIGNvcnJlc3BvbmRpbmcgZGVmaW5pdGlvbiBvZgogICAgICdNVVNUX1VTRV9TSkxKX0VYQ0VQVElPTlMnLCBzbyB0aGUgdGFyZ2V0IG11c3QgcHJvdmlkZSBpdCBkaXJlY3RseS4KCiAtLSBNYWNybzogRE9OVF9VU0VfQlVJTFRJTl9TRVRKTVAKICAgICBEZWZpbmUgdGhpcyBtYWNybyB0byAxIGlmIHRoZSAnc2V0am1wJy8nbG9uZ2ptcCctYmFzZWQgc2NoZW1lCiAgICAgc2hvdWxkIHVzZSB0aGUgJ3NldGptcCcvJ2xvbmdqbXAnIGZ1bmN0aW9ucyBmcm9tIHRoZSBDIGxpYnJhcnkKICAgICBpbnN0ZWFkIG9mIHRoZSAnX19idWlsdGluX3NldGptcCcvJ19fYnVpbHRpbl9sb25nam1wJyBtYWNoaW5lcnkuCgogLS0gTWFjcm86IERXQVJGX0NJRV9EQVRBX0FMSUdOTUVOVAogICAgIFRoaXMgbWFjcm8gbmVlZCBvbmx5IGJlIGRlZmluZWQgaWYgdGhlIHRhcmdldCBtaWdodCBzYXZlIHJlZ2lzdGVycwogICAgIGluIHRoZSBmdW5jdGlvbiBwcm9sb2d1ZSBhdCBhbiBvZmZzZXQgdG8gdGhlIHN0YWNrIHBvaW50ZXIgdGhhdCBpcwogICAgIG5vdCBhbGlnbmVkIHRvICdVTklUU19QRVJfV09SRCcuICBUaGUgZGVmaW5pdGlvbiBzaG91bGQgYmUgdGhlCiAgICAgbmVnYXRpdmUgbWluaW11bSBhbGlnbm1lbnQgaWYgJ1NUQUNLX0dST1dTX0RPV05XQVJEJyBpcyBkZWZpbmVkLAogICAgIGFuZCB0aGUgcG9zaXRpdmUgbWluaW11bSBhbGlnbm1lbnQgb3RoZXJ3aXNlLiAgKk5vdGUgU0RCIGFuZAogICAgIERXQVJGOjouICBPbmx5IGFwcGxpY2FibGUgaWYgdGhlIHRhcmdldCBzdXBwb3J0cyBEV0FSRiAyIGZyYW1lCiAgICAgdW53aW5kIGluZm9ybWF0aW9uLgoKIC0tIFZhcmlhYmxlOiBUYXJnZXQgSG9vayBib29sIFRBUkdFVF9URVJNSU5BVEVfRFcyX0VIX0ZSQU1FX0lORk8KICAgICBDb250YWlucyB0aGUgdmFsdWUgdHJ1ZSBpZiB0aGUgdGFyZ2V0IHNob3VsZCBhZGQgYSB6ZXJvIHdvcmQgb250bwogICAgIHRoZSBlbmQgb2YgYSBEd2FyZi0yIGZyYW1lIGluZm8gc2VjdGlvbiB3aGVuIHVzZWQgZm9yIGV4Y2VwdGlvbgogICAgIGhhbmRsaW5nLiAgRGVmYXVsdCB2YWx1ZSBpcyBmYWxzZSBpZiAnRUhfRlJBTUVfU0VDVElPTl9OQU1FJyBpcwogICAgIGRlZmluZWQsIGFuZCB0cnVlIG90aGVyd2lzZS4KCiAtLSBUYXJnZXQgSG9vazogcnR4IFRBUkdFVF9EV0FSRl9SRUdJU1RFUl9TUEFOIChydHggUkVHKQogICAgIEdpdmVuIGEgcmVnaXN0ZXIsIHRoaXMgaG9vayBzaG91bGQgcmV0dXJuIGEgcGFyYWxsZWwgb2YgcmVnaXN0ZXJzCiAgICAgdG8gcmVwcmVzZW50IHdoZXJlIHRvIGZpbmQgdGhlIHJlZ2lzdGVyIHBpZWNlcy4gIERlZmluZSB0aGlzIGhvb2sKICAgICBpZiB0aGUgcmVnaXN0ZXIgYW5kIGl0cyBtb2RlIGFyZSByZXByZXNlbnRlZCBpbiBEd2FyZiBpbgogICAgIG5vbi1jb250aWd1b3VzIGxvY2F0aW9ucywgb3IgaWYgdGhlIHJlZ2lzdGVyIHNob3VsZCBiZSByZXByZXNlbnRlZAogICAgIGluIG1vcmUgdGhhbiBvbmUgcmVnaXN0ZXIgaW4gRHdhcmYuICBPdGhlcndpc2UsIHRoaXMgaG9vayBzaG91bGQKICAgICByZXR1cm4gJ05VTExfUlRYJy4gIElmIG5vdCBkZWZpbmVkLCB0aGUgZGVmYXVsdCBpcyB0byByZXR1cm4KICAgICAnTlVMTF9SVFgnLgoKIC0tIFRhcmdldCBIb29rOiB2b2lkIFRBUkdFVF9JTklUX0RXQVJGX1JFR19TSVpFU19FWFRSQSAodHJlZSBBRERSRVNTKQogICAgIElmIHNvbWUgcmVnaXN0ZXJzIGFyZSByZXByZXNlbnRlZCBpbiBEd2FyZi0yIHVud2luZCBpbmZvcm1hdGlvbiBpbgogICAgIG11bHRpcGxlIHBpZWNlcywgZGVmaW5lIHRoaXMgaG9vayB0byBmaWxsIGluIGluZm9ybWF0aW9uIGFib3V0IHRoZQogICAgIHNpemVzIG9mIHRob3NlIHBpZWNlcyBpbiB0aGUgdGFibGUgdXNlZCBieSB0aGUgdW53aW5kZXIgYXQgcnVudGltZS4KICAgICBJdCB3aWxsIGJlIGNhbGxlZCBieSAnZXhwYW5kX2J1aWx0aW5faW5pdF9kd2FyZl9yZWdfc2l6ZXMnIGFmdGVyCiAgICAgZmlsbGluZyBpbiBhIHNpbmdsZSBzaXplIGNvcnJlc3BvbmRpbmcgdG8gZWFjaCBoYXJkIHJlZ2lzdGVyOwogICAgIEFERFJFU1MgaXMgdGhlIGFkZHJlc3Mgb2YgdGhlIHRhYmxlLgoKIC0tIFRhcmdldCBIb29rOiBib29sIFRBUkdFVF9BU01fVFRZUEUgKHJ0eCBTWU0pCiAgICAgVGhpcyBob29rIGlzIHVzZWQgdG8gb3V0cHV0IGEgcmVmZXJlbmNlIGZyb20gYSBmcmFtZSB1bndpbmRpbmcKICAgICB0YWJsZSB0byB0aGUgdHlwZV9pbmZvIG9iamVjdCBpZGVudGlmaWVkIGJ5IFNZTS4gIEl0IHNob3VsZCByZXR1cm4KICAgICAndHJ1ZScgaWYgdGhlIHJlZmVyZW5jZSB3YXMgb3V0cHV0LiAgUmV0dXJuaW5nICdmYWxzZScgd2lsbCBjYXVzZQogICAgIHRoZSByZWZlcmVuY2UgdG8gYmUgb3V0cHV0IHVzaW5nIHRoZSBub3JtYWwgRHdhcmYyIHJvdXRpbmVzLgoKIC0tIFRhcmdldCBIb29rOiBib29sIFRBUkdFVF9BUk1fRUFCSV9VTldJTkRFUgogICAgIFRoaXMgaG9vayBzaG91bGQgYmUgc2V0IHRvICd0cnVlJyBvbiB0YXJnZXRzIHRoYXQgdXNlIGFuIEFSTSBFQUJJCiAgICAgYmFzZWQgdW53aW5kaW5nIGxpYnJhcnksIGFuZCAnZmFsc2UnIG9uIG90aGVyIHRhcmdldHMuICBUaGlzCiAgICAgZWZmZWN0cyB0aGUgZm9ybWF0IG9mIHVud2luZGluZyB0YWJsZXMsIGFuZCBob3cgdGhlIHVud2luZGVyIGluCiAgICAgZW50ZXJlZCBhZnRlciBydW5uaW5nIGEgY2xlYW51cC4gIFRoZSBkZWZhdWx0IGlzICdmYWxzZScuCgofCkZpbGU6IGdjY2ludC5pbmZvLCAgTm9kZTogQWxpZ25tZW50IE91dHB1dCwgIFByZXY6IEV4Y2VwdGlvbiBSZWdpb24gT3V0cHV0LCAgVXA6IEFzc2VtYmxlciBGb3JtYXQKCjE1LjIxLjEwIEFzc2VtYmxlciBDb21tYW5kcyBmb3IgQWxpZ25tZW50Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpUaGlzIGRlc2NyaWJlcyBjb21tYW5kcyBmb3IgYWxpZ25tZW50LgoKIC0tIE1hY3JvOiBKVU1QX0FMSUdOIChMQUJFTCkKICAgICBUaGUgYWxpZ25tZW50IChsb2cgYmFzZSAyKSB0byBwdXQgaW4gZnJvbnQgb2YgTEFCRUwsIHdoaWNoIGlzIGEKICAgICBjb21tb24gZGVzdGluYXRpb24gb2YganVtcHMgYW5kIGhhcyBubyBmYWxsdGhydSBpbmNvbWluZyBlZGdlLgoKICAgICBUaGlzIG1hY3JvIG5lZWQgbm90IGJlIGRlZmluZWQgaWYgeW91IGRvbid0IHdhbnQgYW55IHNwZWNpYWwKICAgICBhbGlnbm1lbnQgdG8gYmUgZG9uZSBhdCBzdWNoIGEgdGltZS4gIE1vc3QgbWFjaGluZSBkZXNjcmlwdGlvbnMgZG8KICAgICBub3QgY3VycmVudGx5IGRlZmluZSB0aGUgbWFjcm8uCgogICAgIFVubGVzcyBpdCdzIG5lY2Vzc2FyeSB0byBpbnNwZWN0IHRoZSBMQUJFTCBwYXJhbWV0ZXIsIGl0IGlzIGJldHRlcgogICAgIHRvIHNldCB0aGUgdmFyaWFibGUgQUxJR05fSlVNUFMgaW4gdGhlIHRhcmdldCdzICdPVkVSUklERV9PUFRJT05TJy4KICAgICBPdGhlcndpc2UsIHlvdSBzaG91bGQgdHJ5IHRvIGhvbm9yIHRoZSB1c2VyJ3Mgc2VsZWN0aW9uIGluCiAgICAgQUxJR05fSlVNUFMgaW4gYSAnSlVNUF9BTElHTicgaW1wbGVtZW50YXRpb24uCgogLS0gTWFjcm86IExBQkVMX0FMSUdOX0FGVEVSX0JBUlJJRVIgKExBQkVMKQogICAgIFRoZSBhbGlnbm1lbnQgKGxvZyBiYXNlIDIpIHRvIHB1dCBpbiBmcm9udCBvZiBMQUJFTCwgd2hpY2ggZm9sbG93cwogICAgIGEgJ0JBUlJJRVInLgoKICAgICBUaGlzIG1hY3JvIG5lZWQgbm90IGJlIGRlZmluZWQgaWYgeW91IGRvbid0IHdhbnQgYW55IHNwZWNpYWwKICAgICBhbGlnbm1lbnQgdG8gYmUgZG9uZSBhdCBzdWNoIGEgdGltZS4gIE1vc3QgbWFjaGluZSBkZXNjcmlwdGlvbnMgZG8KICAgICBub3QgY3VycmVudGx5IGRlZmluZSB0aGUgbWFjcm8uCgogLS0gTWFjcm86IExBQkVMX0FMSUdOX0FGVEVSX0JBUlJJRVJfTUFYX1NLSVAKICAgICBUaGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdG8gc2tpcCB3aGVuIGFwcGx5aW5nCiAgICAgJ0xBQkVMX0FMSUdOX0FGVEVSX0JBUlJJRVInLiAgVGhpcyB3b3JrcyBvbmx5IGlmCiAgICAgJ0FTTV9PVVRQVVRfTUFYX1NLSVBfQUxJR04nIGlzIGRlZmluZWQuCgogLS0gTWFjcm86IExPT1BfQUxJR04gKExBQkVMKQogICAgIFRoZSBhbGlnbm1lbnQgKGxvZyBiYXNlIDIpIHRvIHB1dCBpbiBmcm9udCBvZiBMQUJFTCwgd2hpY2ggZm9sbG93cwogICAgIGEgJ05PVEVfSU5TTl9MT09QX0JFRycgbm90ZS4KCiAgICAgVGhpcyBtYWNybyBuZWVkIG5vdCBiZSBkZWZpbmVkIGlmIHlvdSBkb24ndCB3YW50IGFueSBzcGVjaWFsCiAgICAgYWxpZ25tZW50IHRvIGJlIGRvbmUgYXQgc3VjaCBhIHRpbWUuICBNb3N0IG1hY2hpbmUgZGVzY3JpcHRpb25zIGRvCiAgICAgbm90IGN1cnJlbnRseSBkZWZpbmUgdGhlIG1hY3JvLgoKICAgICBVbmxlc3MgaXQncyBuZWNlc3NhcnkgdG8gaW5zcGVjdCB0aGUgTEFCRUwgcGFyYW1ldGVyLCBpdCBpcyBiZXR0ZXIKICAgICB0byBzZXQgdGhlIHZhcmlhYmxlICdhbGlnbl9sb29wcycgaW4gdGhlIHRhcmdldCdzCiAgICAgJ09WRVJSSURFX09QVElPTlMnLiAgT3RoZXJ3aXNlLCB5b3Ugc2hvdWxkIHRyeSB0byBob25vciB0aGUgdXNlcidzCiAgICAgc2VsZWN0aW9uIGluICdhbGlnbl9sb29wcycgaW4gYSAnTE9PUF9BTElHTicgaW1wbGVtZW50YXRpb24uCgogLS0gTWFjcm86IExPT1BfQUxJR05fTUFYX1NLSVAKICAgICBUaGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdG8gc2tpcCB3aGVuIGFwcGx5aW5nICdMT09QX0FMSUdOJy4KICAgICBUaGlzIHdvcmtzIG9ubHkgaWYgJ0FTTV9PVVRQVVRfTUFYX1NLSVBfQUxJR04nIGlzIGRlZmluZWQuCgogLS0gTWFjcm86IExBQkVMX0FMSUdOIChMQUJFTCkKICAgICBUaGUgYWxpZ25tZW50IChsb2cgYmFzZSAyKSB0byBwdXQgaW4gZnJvbnQgb2YgTEFCRUwuICBJZgogICAgICdMQUJFTF9BTElHTl9BRlRFUl9CQVJSSUVSJyAvICdMT09QX0FMSUdOJyBzcGVjaWZ5IGEgZGlmZmVyZW50CiAgICAgYWxpZ25tZW50LCB0aGUgbWF4aW11bSBvZiB0aGUgc3BlY2lmaWVkIHZhbHVlcyBpcyB1c2VkLgoKICAgICBVbmxlc3MgaXQncyBuZWNlc3NhcnkgdG8gaW5zcGVjdCB0aGUgTEFCRUwgcGFyYW1ldGVyLCBpdCBpcyBiZXR0ZXIKICAgICB0byBzZXQgdGhlIHZhcmlhYmxlICdhbGlnbl9sYWJlbHMnIGluIHRoZSB0YXJnZXQncwogICAgICdPVkVSUklERV9PUFRJT05TJy4gIE90aGVyd2lzZSwgeW91IHNob3VsZCB0cnkgdG8gaG9ub3IgdGhlIHVzZXIncwogICAgIHNlbGVjdGlvbiBpbiAnYWxpZ25fbGFiZWxzJyBpbiBhICdMQUJFTF9BTElHTicgaW1wbGVtZW50YXRpb24uCgogLS0gTWFjcm86IExBQkVMX0FMSUdOX01BWF9TS0lQCiAgICAgVGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRvIHNraXAgd2hlbiBhcHBseWluZyAnTEFCRUxfQUxJR04nLgogICAgIFRoaXMgd29ya3Mgb25seSBpZiAnQVNNX09VVFBVVF9NQVhfU0tJUF9BTElHTicgaXMgZGVmaW5lZC4KCiAtLSBNYWNybzogQVNNX09VVFBVVF9TS0lQIChTVFJFQU0sIE5CWVRFUykKICAgICBBIEMgc3RhdGVtZW50IHRvIG91dHB1dCB0byB0aGUgc3RkaW8gc3RyZWFtIFNUUkVBTSBhbiBhc3NlbWJsZXIKICAgICBpbnN0cnVjdGlvbiB0byBhZHZhbmNlIHRoZSBsb2NhdGlvbiBjb3VudGVyIGJ5IE5CWVRFUyBieXRlcy4gIFRob3NlCiAgICAgYnl0ZXMgc2hvdWxkIGJlIHplcm8gd2hlbiBsb2FkZWQuICBOQllURVMgd2lsbCBiZSBhIEMgZXhwcmVzc2lvbiBvZgogICAgIHR5cGUgJ3Vuc2lnbmVkIEhPU1RfV0lERV9JTlQnLgoKIC0tIE1hY3JvOiBBU01fTk9fU0tJUF9JTl9URVhUCiAgICAgRGVmaW5lIHRoaXMgbWFjcm8gaWYgJ0FTTV9PVVRQVVRfU0tJUCcgc2hvdWxkIG5vdCBiZSB1c2VkIGluIHRoZQogICAgIHRleHQgc2VjdGlvbiBiZWNhdXNlIGl0IGZhaWxzIHRvIHB1dCB6ZXJvcyBpbiB0aGUgYnl0ZXMgdGhhdCBhcmUKICAgICBza2lwcGVkLiAgVGhpcyBpcyB0cnVlIG9uIG1hbnkgVW5peCBzeXN0ZW1zLCB3aGVyZSB0aGUgcHNldWRvLW9wIHRvCiAgICAgc2tpcCBieXRlcyBwcm9kdWNlcyBuby1vcCBpbnN0cnVjdGlvbnMgcmF0aGVyIHRoYW4gemVyb3Mgd2hlbiB1c2VkCiAgICAgaW4gdGhlIHRleHQgc2VjdGlvbi4KCiAtLSBNYWNybzogQVNNX09VVFBVVF9BTElHTiAoU1RSRUFNLCBQT1dFUikKICAgICBBIEMgc3RhdGVtZW50IHRvIG91dHB1dCB0byB0aGUgc3RkaW8gc3RyZWFtIFNUUkVBTSBhbiBhc3NlbWJsZXIKICAgICBjb21tYW5kIHRvIGFkdmFuY2UgdGhlIGxvY2F0aW9uIGNvdW50ZXIgdG8gYSBtdWx0aXBsZSBvZiAyIHRvIHRoZQogICAgIFBPV0VSIGJ5dGVzLiAgUE9XRVIgd2lsbCBiZSBhIEMgZXhwcmVzc2lvbiBvZiB0eXBlICdpbnQnLgoKIC0tIE1hY3JvOiBBU01fT1VUUFVUX0FMSUdOX1dJVEhfTk9QIChTVFJFQU0sIFBPV0VSKQogICAgIExpa2UgJ0FTTV9PVVRQVVRfQUxJR04nLCBleGNlcHQgdGhhdCB0aGUgIm5vcCIgaW5zdHJ1Y3Rpb24gaXMgdXNlZAogICAgIGZvciBwYWRkaW5nLCBpZiBuZWNlc3NhcnkuCgogLS0gTWFjcm86IEFTTV9PVVRQVVRfTUFYX1NLSVBfQUxJR04gKFNUUkVBTSwgUE9XRVIsIE1BWF9TS0lQKQogICAgIEEgQyBzdGF0ZW1lbnQgdG8gb3V0cHV0IHRvIHRoZSBzdGRpbyBzdHJlYW0gU1RSRUFNIGFuIGFzc2VtYmxlcgogICAgIGNvbW1hbmQgdG8gYWR2YW5jZSB0aGUgbG9jYXRpb24gY291bnRlciB0byBhIG11bHRpcGxlIG9mIDIgdG8gdGhlCiAgICAgUE9XRVIgYnl0ZXMsIGJ1dCBvbmx5IGlmIE1BWF9TS0lQIG9yIGZld2VyIGJ5dGVzIGFyZSBuZWVkZWQgdG8KICAgICBzYXRpc2Z5IHRoZSBhbGlnbm1lbnQgcmVxdWVzdC4gIFBPV0VSIGFuZCBNQVhfU0tJUCB3aWxsIGJlIGEgQwogICAgIGV4cHJlc3Npb24gb2YgdHlwZSAnaW50Jy4KCh8KRmlsZTogZ2NjaW50LmluZm8sICBOb2RlOiBEZWJ1Z2dpbmcgSW5mbywgIE5leHQ6IEZsb2F0aW5nIFBvaW50LCAgUHJldjogQXNzZW1ibGVyIEZvcm1hdCwgIFVwOiBUYXJnZXQgTWFjcm9zCgoxNS4yMiBDb250cm9sbGluZyBEZWJ1Z2dpbmcgSW5mb3JtYXRpb24gRm9ybWF0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KClRoaXMgZGVzY3JpYmVzIGhvdyB0byBzcGVjaWZ5IGRlYnVnZ2luZyBpbmZvcm1hdGlvbi4KCiogTWVudToKCiogQWxsIERlYnVnZ2Vyczo6ICAgICAgTWFjcm9zIHRoYXQgYWZmZWN0IGFsbCBkZWJ1Z2dpbmcgZm9ybWF0cyB1bmlmb3JtbHkuCiogREJYIE9wdGlvbnM6OiAgICAgICAgTWFjcm9zIGVuYWJsaW5nIHNwZWNpZmljIG9wdGlvbnMgaW4gREJYIGZvcm1hdC4KKiBEQlggSG9va3M6OiAgICAgICAgICBIb29rIG1hY3JvcyBmb3IgdmFyeWluZyBEQlggZm9ybWF0LgoqIEZpbGUgTmFtZXMgYW5kIERCWDo6IE1hY3JvcyBjb250cm9sbGluZyBvdXRwdXQgb2YgZmlsZSBuYW1lcyBpbiBEQlggZm9ybWF0LgoqIFNEQiBhbmQgRFdBUkY6OiAgICAgIE1hY3JvcyBmb3IgU0RCIChDT0ZGKSBhbmQgRFdBUkYgZm9ybWF0cy4KKiBWTVMgRGVidWc6OiAgICAgICAgICBNYWNyb3MgZm9yIFZNUyBkZWJ1ZyBmb3JtYXQuCgofCkZpbGU6IGdjY2ludC5pbmZvLCAgTm9kZTogQWxsIERlYnVnZ2VycywgIE5leHQ6IERCWCBPcHRpb25zLCAgVXA6IERlYnVnZ2luZyBJbmZvCgoxNS4yMi4xIE1hY3JvcyBBZmZlY3RpbmcgQWxsIERlYnVnZ2luZyBGb3JtYXRzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KClRoZXNlIG1hY3JvcyBhZmZlY3QgYWxsIGRlYnVnZ2luZyBmb3JtYXRzLgoKIC0tIE1hY3JvOiBEQlhfUkVHSVNURVJfTlVNQkVSIChSRUdOTykKICAgICBBIEMgZXhwcmVzc2lvbiB0aGF0IHJldHVybnMgdGhlIERCWCByZWdpc3RlciBudW1iZXIgZm9yIHRoZQogICAgIGNvbXBpbGVyIHJlZ2lzdGVyIG51bWJlciBSRUdOTy4gIEluIHRoZSBkZWZhdWx0IG1hY3JvIHByb3ZpZGVkLCB0aGUKICAgICB2YWx1ZSBvZiB0aGlzIGV4cHJlc3Npb24gd2lsbCBiZSBSRUdOTyBpdHNlbGYuICBCdXQgc29tZXRpbWVzIHRoZXJlCiAgICAgYXJlIHNvbWUgcmVnaXN0ZXJzIHRoYXQgdGhlIGNvbXBpbGVyIGtub3dzIGFib3V0IGFuZCBEQlggZG9lcyBub3QsCiAgICAgb3IgdmljZSB2ZXJzYS4gIEluIHN1Y2ggY2FzZXMsIHNvbWUgcmVnaXN0ZXIgbWF5IG5lZWQgdG8gaGF2ZSBvbmUKICAgICBudW1iZXIgaW4gdGhlIGNvbXBpbGVyIGFuZCBhbm90aGVyIGZvciBEQlguCgogICAgIElmIHR3byByZWdpc3RlcnMgaGF2ZSBjb25zZWN1dGl2ZSBudW1iZXJzIGluc2lkZSBHQ0MsIGFuZCB0aGV5IGNhbgogICAgIGJlIHVzZWQgYXMgYSBwYWlyIHRvIGhvbGQgYSBtdWx0aXdvcmQgdmFsdWUsIHRoZW4gdGhleSBfbXVzdF8gaGF2ZQogICAgIGNvbnNlY3V0aXZlIG51bWJlcnMgYWZ0ZXIgcmVudW1iZXJpbmcgd2l0aCAnREJYX1JFR0lTVEVSX05VTUJFUicuCiAgICAgT3RoZXJ3aXNlLCBkZWJ1Z2dlcnMgd2lsbCBiZSB1bmFibGUgdG8gYWNjZXNzIHN1Y2ggYSBwYWlyLCBiZWNhdXNlCiAgICAgdGhleSBleHBlY3QgcmVnaXN0ZXIgcGFpcnMgdG8gYmUgY29uc2VjdXRpdmUgaW4gdGhlaXIgb3duIG51bWJlcmluZwogICAgIHNjaGVtZS4KCiAgICAgSWYgeW91IGZpbmQgeW91cnNlbGYgZGVmaW5pbmcgJ0RCWF9SRUdJU1RFUl9OVU1CRVInIGluIHdheSB0aGF0CiAgICAgZG9lcyBub3QgcHJlc2VydmUgcmVnaXN0ZXIgcGFpcnMsIHRoZW4gd2hhdCB5b3UgbXVzdCBkbyBpbnN0ZWFkIGlzCiAgICAgcmVkZWZpbmUgdGhlIGFjdHVhbCByZWdpc3RlciBudW1iZXJpbmcgc2NoZW1lLgoKIC0tIE1hY3JvOiBERUJVR0dFUl9BVVRPX09GRlNFVCAoWCkKICAgICBBIEMgZXhwcmVzc2lvbiB0aGF0IHJldHVybnMgdGhlIGludGVnZXIgb2Zmc2V0IHZhbHVlIGZvciBhbgogICAgIGF1dG9tYXRpYyB2YXJpYWJsZSBoYXZpbmcgYWRkcmVzcyBYIChhbiBSVEwgZXhwcmVzc2lvbikuICBUaGUKICAgICBkZWZhdWx0IGNvbXB1dGF0aW9uIGFzc3VtZXMgdGhhdCBYIGlzIGJhc2VkIG9uIHRoZSBmcmFtZS1wb2ludGVyCiAgICAgYW5kIGdpdmVzIHRoZSBvZmZzZXQgZnJvbSB0aGUgZnJhbWUtcG9pbnRlci4gIFRoaXMgaXMgcmVxdWlyZWQgZm9yCiAgICAgdGFyZ2V0cyB0aGF0IHByb2R1Y2UgZGVidWdnaW5nIG91dHB1dCBmb3IgREJYIG9yIENPRkYtc3R5bGUKICAgICBkZWJ1Z2dpbmcgb3V0cHV0IGZvciBTREIgYW5kIGFsbG93IHRoZSBmcmFtZS1wb2ludGVyIHRvIGJlCiAgICAgZWxpbWluYXRlZCB3aGVuIHRoZSAnLWcnIG9wdGlvbnMgaXMgdXNlZC4KCiAtLSBNYWNybzogREVCVUdHRVJfQVJHX09GRlNFVCAoT0ZGU0VULCBYKQogICAgIEEgQyBleHByZXNzaW9uIHRoYXQgcmV0dXJucyB0aGUgaW50ZWdlciBvZmZzZXQgdmFsdWUgZm9yIGFuCiAgICAgYXJndW1lbnQgaGF2aW5nIGFkZHJlc3MgWCAoYW4gUlRMIGV4cHJlc3Npb24pLiAgVGhlIG5vbWluYWwgb2Zmc2V0CiAgICAgaXMgT0ZGU0VULgoKIC0tIE1hY3JvOiBQUkVGRVJSRURfREVCVUdHSU5HX1RZUEUKICAgICBBIEMgZXhwcmVzc2lvbiB0aGF0IHJldHVybnMgdGhlIHR5cGUgb2YgZGVidWdnaW5nIG91dHB1dCBHQ0Mgc2hvdWxkCiAgICAgcHJvZHVjZSB3aGVuIHRoZSB1c2VyIHNwZWNpZmllcyBqdXN0ICctZycuICBEZWZpbmUgdGhpcyBpZiB5b3UgaGF2ZQogICAgIGFycmFuZ2VkIGZvciBHQ0MgdG8gc3VwcG9ydCBtb3JlIHRoYW4gb25lIGZvcm1hdCBvZiBkZWJ1Z2dpbmcKICAgICBvdXRwdXQuICBDdXJyZW50bHksIHRoZSBhbGxvd2FibGUgdmFsdWVzIGFyZSAnREJYX0RFQlVHJywKICAgICAnU0RCX0RFQlVHJywgJ0RXQVJGX0RFQlVHJywgJ0RXQVJGMl9ERUJVRycsICdYQ09GRl9ERUJVRycsCiAgICAgJ1ZNU19ERUJVRycsIGFuZCAnVk1TX0FORF9EV0FSRjJfREVCVUcnLgoKICAgICBXaGVuIHRoZSB1c2VyIHNwZWNpZmllcyAnLWdnZGInLCBHQ0Mgbm9ybWFsbHkgYWxzbyB1c2VzIHRoZSB2YWx1ZQogICAgIG9mIHRoaXMgbWFjcm8gdG8gc2VsZWN0IHRoZSBkZWJ1Z2dpbmcgb3V0cHV0IGZvcm1hdCwgYnV0IHdpdGggdHdvCiAgICAgZXhjZXB0aW9ucy4gIElmICdEV0FSRjJfREVCVUdHSU5HX0lORk8nIGlzIGRlZmluZWQsIEdDQyB1c2VzIHRoZQogICAgIHZhbHVlICdEV0FSRjJfREVCVUcnLiAgT3RoZXJ3aXNlLCBpZiAnREJYX0RFQlVHR0lOR19JTkZPJyBpcwogICAgIGRlZmluZWQsIEdDQyB1c2VzICdEQlhfREVCVUcnLgoKICAgICBUaGUgdmFsdWUgb2YgdGhpcyBtYWNybyBvbmx5IGFmZmVjdHMgdGhlIGRlZmF1bHQgZGVidWdnaW5nIG91dHB1dDsKICAgICB0aGUgdXNlciBjYW4gYWx3YXlzIGdldCBhIHNwZWNpZmljIHR5cGUgb2Ygb3V0cHV0IGJ5IHVzaW5nCiAgICAgJy1nc3RhYnMnLCAnLWdjb2ZmJywgJy1nZHdhcmYtMicsICctZ3hjb2ZmJywgb3IgJy1ndm1zJy4KCh8KRmlsZTogZ2NjaW50LmluZm8sICBOb2RlOiBEQlggT3B0aW9ucywgIE5leHQ6IERCWCBIb29rcywgIFByZXY6IEFsbCBEZWJ1Z2dlcnMsICBVcDogRGVidWdnaW5nIEluZm8KCjE1LjIyLjIgU3BlY2lmaWMgT3B0aW9ucyBmb3IgREJYIE91dHB1dAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KClRoZXNlIGFyZSBzcGVjaWZpYyBvcHRpb25zIGZvciBEQlggb3V0cHV0LgoKIC0tIE1hY3JvOiBEQlhfREVCVUdHSU5HX0lORk8KICAgICBEZWZpbmUgdGhpcyBtYWNybyBpZiBHQ0Mgc2hvdWxkIHByb2R1Y2UgZGVidWdnaW5nIG91dHB1dCBmb3IgREJYIGluCiAgICAgcmVzcG9uc2UgdG8gdGhlICctZycgb3B0aW9uLgoKIC0tIE1hY3JvOiBYQ09GRl9ERUJVR0dJTkdfSU5GTwogICAgIERlZmluZSB0aGlzIG1hY3JvIGlmIEdDQyBzaG91bGQgcHJvZHVjZSBYQ09GRiBmb3JtYXQgZGVidWdnaW5nCiAgICAgb3V0cHV0IGluIHJlc3BvbnNlIHRvIHRoZSAnLWcnIG9wdGlvbi4gIFRoaXMgaXMgYSB2YXJpYW50IG9mIERCWAogICAgIGZvcm1hdC4KCiAtLSBNYWNybzogREVGQVVMVF9HREJfRVhURU5TSU9OUwogICAgIERlZmluZSB0aGlzIG1hY3JvIHRvIGNvbnRyb2wgd2hldGhlciBHQ0Mgc2hvdWxkIGJ5IGRlZmF1bHQgZ2VuZXJhdGUKICAgICBHREIncyBleHRlbmRlZCB2ZXJzaW9uIG9mIERCWCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gKGFzc3VtaW5nCiAgICAgREJYLWZvcm1hdCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gaXMgZW5hYmxlZCBhdCBhbGwpLiAgSWYgeW91IGRvbid0CiAgICAgZGVmaW5lIHRoZSBtYWNybywgdGhlIGRlZmF1bHQgaXMgMTogYWx3YXlzIGdlbmVyYXRlIHRoZSBleHRlbmRlZAogICAgIGluZm9ybWF0aW9uIGlmIHRoZXJlIGlzIGFueSBvY2Nhc2lvbiB0by4KCiAtLSBNYWNybzogREVCVUdfU1lNU19URVhUCiAgICAgRGVmaW5lIHRoaXMgbWFjcm8gaWYgYWxsICcuc3RhYnMnIGNvbW1hbmRzIHNob3VsZCBiZSBvdXRwdXQgd2hpbGUKICAgICBpbiB0aGUgdGV4dCBzZWN0aW9uLgoKIC0tIE1hY3JvOiBBU01fU1RBQlNfT1AKICAgICBBIEMgc3RyaW5nIGNvbnN0YW50LCBpbmNsdWRpbmcgc3BhY2luZywgbmFtaW5nIHRoZSBhc3NlbWJsZXIgcHNldWRvCiAgICAgb3AgdG8gdXNlIGluc3RlYWQgb2YgJyJcdC5zdGFic1x0IicgdG8gZGVmaW5lIGFuIG9yZGluYXJ5IGRlYnVnZ2luZwogICAgIHN5bWJvbC4gIElmIHlvdSBkb24ndCBkZWZpbmUgdGhpcyBtYWNybywgJyJcdC5zdGFic1x0IicgaXMgdXNlZC4KICAgICBUaGlzIG1hY3JvIGFwcGxpZXMgb25seSB0byBEQlggZGVidWdnaW5nIGluZm9ybWF0aW9uIGZvcm1hdC4KCiAtLSBNYWNybzogQVNNX1NUQUJEX09QCiAgICAgQSBDIHN0cmluZyBjb25zdGFudCwgaW5jbHVkaW5nIHNwYWNpbmcsIG5hbWluZyB0aGUgYXNzZW1ibGVyIHBzZXVkbwogICAgIG9wIHRvIHVzZSBpbnN0ZWFkIG9mICciXHQuc3RhYmRcdCInIHRvIGRlZmluZSBhIGRlYnVnZ2luZyBzeW1ib2wKICAgICB3aG9zZSB2YWx1ZSBpcyB0aGUgY3VycmVudCBsb2NhdGlvbi4gIElmIHlvdSBkb24ndCBkZWZpbmUgdGhpcwogICAgIG1hY3JvLCAnIlx0LnN0YWJkXHQiJyBpcyB1c2VkLiAgVGhpcyBtYWNybyBhcHBsaWVzIG9ubHkgdG8gREJYCiAgICAgZGVidWdnaW5nIGluZm9ybWF0aW9uIGZvcm1hdC4KCiAtLSBNYWNybzogQVNNX1NUQUJOX09QCiAgICAgQSBDIHN0cmluZyBjb25zdGFudCwgaW5jbHVkaW5nIHNwYWNpbmcsIG5hbWluZyB0aGUgYXNzZW1ibGVyIHBzZXVkbwogICAgIG9wIHRvIHVzZSBpbnN0ZWFkIG9mICciXHQuc3RhYm5cdCInIHRvIGRlZmluZSBhIGRlYnVnZ2luZyBzeW1ib2wKICAgICB3aXRoIG5vIG5hbWUuICBJZiB5b3UgZG9uJ3QgZGVmaW5lIHRoaXMgbWFjcm8sICciXHQuc3RhYm5cdCInIGlzCiAgICAgdXNlZC4gIFRoaXMgbWFjcm8gYXBwbGllcyBvbmx5IHRvIERCWCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gZm9ybWF0LgoKIC0tIE1hY3JvOiBEQlhfTk9fWFJFRlMKICAgICBEZWZpbmUgdGhpcyBtYWNybyBpZiBEQlggb24geW91ciBzeXN0ZW0gZG9lcyBub3Qgc3VwcG9ydCB0aGUKICAgICBjb25zdHJ1Y3QgJ3hzVEFHTkFNRScuICBPbiBzb21lIHN5c3RlbXMsIHRoaXMgY29uc3RydWN0IGlzIHVzZWQgdG8KICAgICBkZXNjcmliZSBhIGZvcndhcmQgcmVmZXJlbmNlIHRvIGEgc3RydWN0dXJlIG5hbWVkIFRBR05BTUUuICBPbgogICAgIG90aGVyIHN5c3RlbXMsIHRoaXMgY29uc3RydWN0IGlzIG5vdCBzdXBwb3J0ZWQgYXQgYWxsLgoKIC0tIE1hY3JvOiBEQlhfQ09OVElOX0xFTkdUSAogICAgIEEgc3ltYm9sIG5hbWUgaW4gREJYLWZvcm1hdCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gaXMgbm9ybWFsbHkKICAgICBjb250aW51ZWQgKHNwbGl0IGludG8gdHdvIHNlcGFyYXRlICcuc3RhYnMnIGRpcmVjdGl2ZXMpIHdoZW4gaXQKICAgICBleGNlZWRzIGEgY2VydGFpbiBsZW5ndGggKGJ5IGRlZmF1bHQsIDgwIGNoYXJhY3RlcnMpLiAgT24gc29tZQogICAgIG9wZXJhdGluZyBzeXN0ZW1zLCBEQlggcmVxdWlyZXMgdGhpcyBzcGxpdHRpbmc7IG9uIG90aGVycywKICAgICBzcGxpdHRpbmcgbXVzdCBub3QgYmUgZG9uZS4gIFlvdSBjYW4gaW5oaWJpdCBzcGxpdHRpbmcgYnkgZGVmaW5pbmcKICAgICB0aGlzIG1hY3JvIHdpdGggdGhlIHZhbHVlIHplcm8uICBZb3UgY2FuIG92ZXJyaWRlIHRoZSBkZWZhdWx0CiAgICAgc3BsaXR0aW5nLWxlbmd0aCBieSBkZWZpbmluZyB0aGlzIG1hY3JvIGFzIGFuIGV4cHJlc3Npb24gZm9yIHRoZQogICAgIGxlbmd0aCB5b3UgZGVzaXJlLgoKIC0tIE1hY3JvOiBEQlhfQ09OVElOX0NIQVIKICAgICBOb3JtYWxseSBjb250aW51YXRpb24gaXMgaW5kaWNhdGVkIGJ5IGFkZGluZyBhICdcJyBjaGFyYWN0ZXIgdG8gdGhlCiAgICAgZW5kIG9mIGEgJy5zdGFicycgc3RyaW5nIHdoZW4gYSBjb250aW51YXRpb24gZm9sbG93cy4gIFRvIHVzZSBhCiAgICAgZGlmZmVyZW50IGNoYXJhY3RlciBpbnN0ZWFkLCBkZWZpbmUgdGhpcyBtYWNybyBhcyBhIGNoYXJhY3RlcgogICAgIGNvbnN0YW50IGZvciB0aGUgY2hhcmFjdGVyIHlvdSB3YW50IHRvIHVzZS4gIERvIG5vdCBkZWZpbmUgdGhpcwogICAgIG1hY3JvIGlmIGJhY2tzbGFzaCBpcyBjb3JyZWN0IGZvciB5b3VyIHN5c3RlbS4KCiAtLSBNYWNybzogREJYX1NUQVRJQ19TVEFCX0RBVEFfU0VDVElPTgogICAgIERlZmluZSB0aGlzIG1hY3JvIGlmIGl0IGlzIG5lY2Vzc2FyeSB0byBnbyB0byB0aGUgZGF0YSBzZWN0aW9uCiAgICAgYmVmb3JlIG91dHB1dHRpbmcgdGhlICcuc3RhYnMnIHBzZXVkby1vcCBmb3IgYSBub24tZ2xvYmFsIHN0YXRpYwogICAgIHZhcmlhYmxlLgoKIC0tIE1hY3JvOiBEQlhfVFlQRV9ERUNMX1NUQUJTX0NPREUKICAgICBUaGUgdmFsdWUgdG8gdXNlIGluIHRoZSAiY29kZSIgZmllbGQgb2YgdGhlICcuc3RhYnMnIGRpcmVjdGl2ZSBmb3IKICAgICBhIHR5cGVkZWYuICBUaGUgZGVmYXVsdCBpcyAnTl9MU1lNJy4KCiAtLSBNYWNybzogREJYX1NUQVRJQ19DT05TVF9WQVJfQ09ERQogICAgIFRoZSB2YWx1ZSB0byB1c2UgaW4gdGhlICJjb2RlIiBmaWVsZCBvZiB0aGUgJy5zdGFicycgZGlyZWN0aXZlIGZvcgogICAgIGEgc3RhdGljIHZhcmlhYmxlIGxvY2F0ZWQgaW4gdGhlIHRleHQgc2VjdGlvbi4gIERCWCBmb3JtYXQgZG9lcyBub3QKICAgICBwcm92aWRlIGFueSAicmlnaHQiIHdheSB0byBkbyB0aGlzLiAgVGhlIGRlZmF1bHQgaXMgJ05fRlVOJy4KCiAtLSBNYWNybzogREJYX1JFR1BBUk1fU1RBQlNfQ09ERQogICAgIFRoZSB2YWx1ZSB0byB1c2UgaW4gdGhlICJjb2RlIiBmaWVsZCBvZiB0aGUgJy5zdGFicycgZGlyZWN0aXZlIGZvcgogICAgIGEgcGFyYW1ldGVyIHBhc3NlZCBpbiByZWdpc3RlcnMuICBEQlggZm9ybWF0IGRvZXMgbm90IHByb3ZpZGUgYW55CiAgICAgInJpZ2h0IiB3YXkgdG8gZG8gdGhpcy4gIFRoZSBkZWZhdWx0IGlzICdOX1JTWU0nLgoKIC0tIE1hY3JvOiBEQlhfUkVHUEFSTV9TVEFCU19MRVRURVIKICAgICBUaGUgbGV0dGVyIHRvIHVzZSBpbiBEQlggc3ltYm9sIGRhdGEgdG8gaWRlbnRpZnkgYSBzeW1ib2wgYXMgYQogICAgIHBhcmFtZXRlciBwYXNzZWQgaW4gcmVnaXN0ZXJzLiAgREJYIGZvcm1hdCBkb2VzIG5vdCBjdXN0b21hcmlseQogICAgIHByb3ZpZGUgYW55IHdheSB0byBkbyB0aGlzLiAgVGhlIGRlZmF1bHQgaXMgJydQJycuCgogLS0gTWFjcm86IERCWF9GVU5DVElPTl9GSVJTVAogICAgIERlZmluZSB0aGlzIG1hY3JvIGlmIHRoZSBEQlggaW5mb3JtYXRpb24gZm9yIGEgZnVuY3Rpb24gYW5kIGl0cwogICAgIGFyZ3VtZW50cyBzaG91bGQgcHJlY2VkZSB0aGUgYXNzZW1ibGVyIGNvZGUgZm9yIHRoZSBmdW5jdGlvbi4KICAgICBOb3JtYWxseSwgaW4gREJYIGZvcm1hdCwgdGhlIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBlbnRpcmVseSBmb2xsb3dzCiAgICAgdGhlIGFzc2VtYmxlciBjb2RlLgoKIC0tIE1hY3JvOiBEQlhfQkxPQ0tTX0ZVTkNUSU9OX1JFTEFUSVZFCiAgICAgRGVmaW5lIHRoaXMgbWFjcm8sIHdpdGggdmFsdWUgMSwgaWYgdGhlIHZhbHVlIG9mIGEgc3ltYm9sCiAgICAgZGVzY3JpYmluZyB0aGUgc2NvcGUgb2YgYSBibG9jayAoJ05fTEJSQUMnIG9yICdOX1JCUkFDJykgc2hvdWxkIGJlCiAgICAgcmVsYXRpdmUgdG8gdGhlIHN0YXJ0IG9mIHRoZSBlbmNsb3NpbmcgZnVuY3Rpb24uICBOb3JtYWxseSwgR0NDCiAgICAgdXNlcyBhbiBhYnNvbHV0ZSBhZGRyZXNzLgoKIC0tIE1hY3JvOiBEQlhfTElORVNfRlVOQ1RJT05fUkVMQVRJVkUKICAgICBEZWZpbmUgdGhpcyBtYWNybywgd2l0aCB2YWx1ZSAxLCBpZiB0aGUgdmFsdWUgb2YgYSBzeW1ib2wKICAgICBpbmRpY2F0aW5nIHRoZSBjdXJyZW50IGxpbmUgbnVtYmVyICgnTl9TTElORScpIHNob3VsZCBiZSByZWxhdGl2ZQogICAgIHRvIHRoZSBzdGFydCBvZiB0aGUgZW5jbG9zaW5nIGZ1bmN0aW9uLiAgTm9ybWFsbHksIEdDQyB1c2VzIGFuCiAgICAgYWJzb2x1dGUgYWRkcmVzcy4KCiAtLSBNYWNybzogREJYX1VTRV9CSU5DTAogICAgIERlZmluZSB0aGlzIG1hY3JvIGlmIEdDQyBzaG91bGQgZ2VuZXJhdGUgJ05fQklOQ0wnIGFuZCAnTl9FSU5DTCcKICAgICBzdGFicyBmb3IgaW5jbHVkZWQgaGVhZGVyIGZpbGVzLCBhcyBvbiBTdW4gc3lzdGVtcy4gIFRoaXMgbWFjcm8KICAgICBhbHNvIGRpcmVjdHMgR0NDIHRvIG91dHB1dCBhIHR5cGUgbnVtYmVyIGFzIGEgcGFpciBvZiBhIGZpbGUgbnVtYmVyCiAgICAgYW5kIGEgdHlwZSBudW1iZXIgd2l0aGluIHRoZSBmaWxlLiAgTm9ybWFsbHksIEdDQyBkb2VzIG5vdCBnZW5lcmF0ZQogICAgICdOX0JJTkNMJyBvciAnTl9FSU5DTCcgc3RhYnMsIGFuZCBpdCBvdXRwdXRzIGEgc2luZ2xlIG51bWJlciBmb3IgYQogICAgIHR5cGUgbnVtYmVyLgoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IERCWCBIb29rcywgIE5leHQ6IEZpbGUgTmFtZXMgYW5kIERCWCwgIFByZXY6IERCWCBPcHRpb25zLCAgVXA6IERlYnVnZ2luZyBJbmZvCgoxNS4yMi4zIE9wZW4tRW5kZWQgSG9va3MgZm9yIERCWCBGb3JtYXQKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpUaGVzZSBhcmUgaG9va3MgZm9yIERCWCBmb3JtYXQuCgogLS0gTWFjcm86IERCWF9PVVRQVVRfTEJSQUMgKFNUUkVBTSwgTkFNRSkKICAgICBEZWZpbmUgdGhpcyBtYWNybyB0byBzYXkgaG93IHRvIG91dHB1dCB0byBTVFJFQU0gdGhlIGRlYnVnZ2luZwogICAgIGluZm9ybWF0aW9uIGZvciB0aGUgc3RhcnQgb2YgYSBzY29wZSBsZXZlbCBmb3IgdmFyaWFibGUgbmFtZXMuICBUaGUKICAgICBhcmd1bWVudCBOQU1FIGlzIHRoZSBuYW1lIG9mIGFuIGFzc2VtYmxlciBzeW1ib2wgKGZvciB1c2Ugd2l0aAogICAgICdhc3NlbWJsZV9uYW1lJykgd2hvc2UgdmFsdWUgaXMgdGhlIGFkZHJlc3Mgd2hlcmUgdGhlIHNjb3BlIGJlZ2lucy4KCiAtLSBNYWNybzogREJYX09VVFBVVF9SQlJBQyAoU1RSRUFNLCBOQU1FKQogICAgIExpa2UgJ0RCWF9PVVRQVVRfTEJSQUMnLCBidXQgZm9yIHRoZSBlbmQgb2YgYSBzY29wZSBsZXZlbC4KCiAtLSBNYWNybzogREJYX09VVFBVVF9ORlVOIChTVFJFQU0sIExTQ09QRV9MQUJFTCwgREVDTCkKICAgICBEZWZpbmUgdGhpcyBtYWNybyBpZiB0aGUgdGFyZ2V0IG1hY2hpbmUgcmVxdWlyZXMgc3BlY2lhbCBoYW5kbGluZwogICAgIHRvIG91dHB1dCBhbiAnTl9GVU4nIGVudHJ5IGZvciB0aGUgZnVuY3Rpb24gREVDTC4KCiAtLSBNYWNybzogREJYX09VVFBVVF9TT1VSQ0VfTElORSAoU1RSRUFNLCBMSU5FLCBDT1VOVEVSKQogICAgIEEgQyBzdGF0ZW1lbnQgdG8gb3V0cHV0IERCWCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gYmVmb3JlIGNvZGUgZm9yCiAgICAgbGluZSBudW1iZXIgTElORSBvZiB0aGUgY3VycmVudCBzb3VyY2UgZmlsZSB0byB0aGUgc3RkaW8gc3RyZWFtCiAgICAgU1RSRUFNLiAgQ09VTlRFUiBpcyB0aGUgbnVtYmVyIG9mIHRpbWUgdGhlIG1hY3JvIHdhcyBpbnZva2VkLAogICAgIGluY2x1ZGluZyB0aGUgY3VycmVudCBpbnZvY2F0aW9uOyBpdCBpcyBpbnRlbmRlZCB0byBnZW5lcmF0ZSB1bmlxdWUKICAgICBsYWJlbHMgaW4gdGhlIGFzc2VtYmx5IG91dHB1dC4KCiAgICAgVGhpcyBtYWNybyBzaG91bGQgbm90IGJlIGRlZmluZWQgaWYgdGhlIGRlZmF1bHQgb3V0cHV0IGlzIGNvcnJlY3QsCiAgICAgb3IgaWYgaXQgY2FuIGJlIG1hZGUgY29ycmVjdCBieSBkZWZpbmluZwogICAgICdEQlhfTElORVNfRlVOQ1RJT05fUkVMQVRJVkUnLgoKIC0tIE1hY3JvOiBOT19EQlhfRlVOQ1RJT05fRU5ECiAgICAgU29tZSBzdGFicyBlbmNhcHN1bGF0aW9uIGZvcm1hdHMgKGluIHBhcnRpY3VsYXIgRUNPRkYpLCBjYW5ub3QKICAgICBoYW5kbGUgdGhlICcuc3RhYnMgIiIsTl9GVU4sLDAsMCxMc2NvcGUtZnVuY3Rpb24tMScgZ2RiIGRieAogICAgIGV4dGVuc2lvbiBjb25zdHJ1Y3QuICBPbiB0aG9zZSBtYWNoaW5lcywgZGVmaW5lIHRoaXMgbWFjcm8gdG8gdHVybgogICAgIHRoaXMgZmVhdHVyZSBvZmYgd2l0aG91dCBkaXN0dXJiaW5nIHRoZSByZXN0IG9mIHRoZSBnZGIgZXh0ZW5zaW9ucy4KCiAtLSBNYWNybzogTk9fREJYX0JOU1lNX0VOU1lNCiAgICAgU29tZSBhc3NlbWJsZXJzIGNhbm5vdCBoYW5kbGUgdGhlICcuc3RhYmQgQk5TWU0vRU5TWU0sMCwwJyBnZGIgZGJ4CiAgICAgZXh0ZW5zaW9uIGNvbnN0cnVjdC4gIE9uIHRob3NlIG1hY2hpbmVzLCBkZWZpbmUgdGhpcyBtYWNybyB0byB0dXJuCiAgICAgdGhpcyBmZWF0dXJlIG9mZiB3aXRob3V0IGRpc3R1cmJpbmcgdGhlIHJlc3Qgb2YgdGhlIGdkYiBleHRlbnNpb25zLgoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IEZpbGUgTmFtZXMgYW5kIERCWCwgIE5leHQ6IFNEQiBhbmQgRFdBUkYsICBQcmV2OiBEQlggSG9va3MsICBVcDogRGVidWdnaW5nIEluZm8KCjE1LjIyLjQgRmlsZSBOYW1lcyBpbiBEQlggRm9ybWF0Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpUaGlzIGRlc2NyaWJlcyBmaWxlIG5hbWVzIGluIERCWCBmb3JtYXQuCgogLS0gTWFjcm86IERCWF9PVVRQVVRfTUFJTl9TT1VSQ0VfRklMRU5BTUUgKFNUUkVBTSwgTkFNRSkKICAgICBBIEMgc3RhdGVtZW50IHRvIG91dHB1dCBEQlggZGVidWdnaW5nIGluZm9ybWF0aW9uIHRvIHRoZSBzdGRpbwogICAgIHN0cmVhbSBTVFJFQU0sIHdoaWNoIGluZGljYXRlcyB0aGF0IGZpbGUgTkFNRSBpcyB0aGUgbWFpbiBzb3VyY2UKICAgICBmaWxlLS10aGUgZmlsZSBzcGVjaWZpZWQgYXMgdGhlIGlucHV0IGZpbGUgZm9yIGNvbXBpbGF0aW9uLiAgVGhpcwogICAgIG1hY3JvIGlzIGNhbGxlZCBvbmx5IG9uY2UsIGF0IHRoZSBiZWdpbm5pbmcgb2YgY29tcGlsYXRpb24uCgogICAgIFRoaXMgbWFjcm8gbmVlZCBub3QgYmUgZGVmaW5lZCBpZiB0aGUgc3RhbmRhcmQgZm9ybSBvZiBvdXRwdXQgZm9yCiAgICAgREJYIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBpcyBhcHByb3ByaWF0ZS4KCiAgICAgSXQgbWF5IGJlIG5lY2Vzc2FyeSB0byByZWZlciB0byBhIGxhYmVsIGVxdWFsIHRvIHRoZSBiZWdpbm5pbmcgb2YKICAgICB0aGUgdGV4dCBzZWN0aW9uLiAgWW91IGNhbiB1c2UgJ2Fzc2VtYmxlX25hbWUgKHN0cmVhbSwKICAgICBsdGV4dF9sYWJlbF9uYW1lKScgdG8gZG8gc28uICBJZiB5b3UgZG8gdGhpcywgeW91IG11c3QgYWxzbyBzZXQgdGhlCiAgICAgdmFyaWFibGUgVVNFRF9MVEVYVF9MQUJFTF9OQU1FIHRvICd0cnVlJy4KCiAtLSBNYWNybzogTk9fREJYX01BSU5fU09VUkNFX0RJUkVDVE9SWQogICAgIERlZmluZSB0aGlzIG1hY3JvLCB3aXRoIHZhbHVlIDEsIGlmIEdDQyBzaG91bGQgbm90IGVtaXQgYW4KICAgICBpbmRpY2F0aW9uIG9mIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBmb3IgY29tcGlsYXRpb24gYW5kIGN1cnJlbnQKICAgICBzb3VyY2UgbGFuZ3VhZ2UgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZS4KCiAtLSBNYWNybzogTk9fREJYX0dDQ19NQVJLRVIKICAgICBEZWZpbmUgdGhpcyBtYWNybywgd2l0aCB2YWx1ZSAxLCBpZiBHQ0Mgc2hvdWxkIG5vdCBlbWl0IGFuCiAgICAgaW5kaWNhdGlvbiB0aGF0IHRoaXMgb2JqZWN0IGZpbGUgd2FzIGNvbXBpbGVkIGJ5IEdDQy4gIFRoZSBkZWZhdWx0CiAgICAgaXMgdG8gZW1pdCBhbiAnTl9PUFQnIHN0YWIgYXQgdGhlIGJlZ2lubmluZyBvZiBldmVyeSBzb3VyY2UgZmlsZSwKICAgICB3aXRoICdnY2MyX2NvbXBpbGVkLicgZm9yIHRoZSBzdHJpbmcgYW5kIHZhbHVlIDAuCgogLS0gTWFjcm86IERCWF9PVVRQVVRfTUFJTl9TT1VSQ0VfRklMRV9FTkQgKFNUUkVBTSwgTkFNRSkKICAgICBBIEMgc3RhdGVtZW50IHRvIG91dHB1dCBEQlggZGVidWdnaW5nIGluZm9ybWF0aW9uIGF0IHRoZSBlbmQgb2YKICAgICBjb21waWxhdGlvbiBvZiB0aGUgbWFpbiBzb3VyY2UgZmlsZSBOQU1FLiAgT3V0cHV0IHNob3VsZCBiZSB3cml0dGVuCiAgICAgdG8gdGhlIHN0ZGlvIHN0cmVhbSBTVFJFQU0uCgogICAgIElmIHlvdSBkb24ndCBkZWZpbmUgdGhpcyBtYWNybywgbm90aGluZyBzcGVjaWFsIGlzIG91dHB1dCBhdCB0aGUKICAgICBlbmQgb2YgY29tcGlsYXRpb24sIHdoaWNoIGlzIGNvcnJlY3QgZm9yIG1vc3QgbWFjaGluZXMuCgogLS0gTWFjcm86IERCWF9PVVRQVVRfTlVMTF9OX1NPX0FUX01BSU5fU09VUkNFX0ZJTEVfRU5ECiAgICAgRGVmaW5lIHRoaXMgbWFjcm8gX2luc3RlYWQgb2ZfIGRlZmluaW5nCiAgICAgJ0RCWF9PVVRQVVRfTUFJTl9TT1VSQ0VfRklMRV9FTkQnLCBpZiB3aGF0IG5lZWRzIHRvIGJlIG91dHB1dCBhdAogICAgIHRoZSBlbmQgb2YgY29tcGlsYXRpb24gaXMgYSAnTl9TTycgc3RhYiB3aXRoIGFuIGVtcHR5IHN0cmluZywgd2hvc2UKICAgICB2YWx1ZSBpcyB0aGUgaGlnaGVzdCBhYnNvbHV0ZSB0ZXh0IGFkZHJlc3MgaW4gdGhlIGZpbGUuCgofCkZpbGU6IGdjY2ludC5pbmZvLCAgTm9kZTogU0RCIGFuZCBEV0FSRiwgIE5leHQ6IFZNUyBEZWJ1ZywgIFByZXY6IEZpbGUgTmFtZXMgYW5kIERCWCwgIFVwOiBEZWJ1Z2dpbmcgSW5mbwoKMTUuMjIuNSBNYWNyb3MgZm9yIFNEQiBhbmQgRFdBUkYgT3V0cHV0Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKSGVyZSBhcmUgbWFjcm9zIGZvciBTREIgYW5kIERXQVJGIG91dHB1dC4KCiAtLSBNYWNybzogU0RCX0RFQlVHR0lOR19JTkZPCiAgICAgRGVmaW5lIHRoaXMgbWFjcm8gaWYgR0NDIHNob3VsZCBwcm9kdWNlIENPRkYtc3R5bGUgZGVidWdnaW5nIG91dHB1dAogICAgIGZvciBTREIgaW4gcmVzcG9uc2UgdG8gdGhlICctZycgb3B0aW9uLgoKIC0tIE1hY3JvOiBEV0FSRjJfREVCVUdHSU5HX0lORk8KICAgICBEZWZpbmUgdGhpcyBtYWNybyBpZiBHQ0Mgc2hvdWxkIHByb2R1Y2UgZHdhcmYgdmVyc2lvbiAyIGZvcm1hdAogICAgIGRlYnVnZ2luZyBvdXRwdXQgaW4gcmVzcG9uc2UgdG8gdGhlICctZycgb3B0aW9uLgoKICAgICAgLS0gVGFyZ2V0IEhvb2s6IGludCBUQVJHRVRfRFdBUkZfQ0FMTElOR19DT05WRU5USU9OICh0cmVlCiAgICAgICAgICAgICAgIEZVTkNUSU9OKQogICAgICAgICAgRGVmaW5lIHRoaXMgdG8gZW5hYmxlIHRoZSBkd2FyZiBhdHRyaWJ1dGUKICAgICAgICAgICdEV19BVF9jYWxsaW5nX2NvbnZlbnRpb24nIHRvIGJlIGVtaXR0ZWQgZm9yIGVhY2ggZnVuY3Rpb24uCiAgICAgICAgICBJbnN0ZWFkIG9mIGFuIGludGVnZXIgcmV0dXJuIHRoZSBlbnVtIHZhbHVlIGZvciB0aGUgJ0RXX0NDXycKICAgICAgICAgIHRhZy4KCiAgICAgVG8gc3VwcG9ydCBvcHRpb25hbCBjYWxsIGZyYW1lIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiwgeW91IG11c3QgYWxzbwogICAgIGRlZmluZSAnSU5DT01JTkdfUkVUVVJOX0FERFJfUlRYJyBhbmQgZWl0aGVyIHNldAogICAgICdSVFhfRlJBTUVfUkVMQVRFRF9QJyBvbiB0aGUgcHJvbG9ndWUgaW5zbnMgaWYgeW91IHVzZSBSVEwgZm9yIHRoZQogICAgIHByb2xvZ3VlLCBvciBjYWxsICdkd2FyZjJvdXRfZGVmX2NmYScgYW5kICdkd2FyZjJvdXRfcmVnX3NhdmUnIGFzCiAgICAgYXBwcm9wcmlhdGUgZnJvbSAnVEFSR0VUX0FTTV9GVU5DVElPTl9QUk9MT0dVRScgaWYgeW91IGRvbid0LgoKIC0tIE1hY3JvOiBEV0FSRjJfRlJBTUVfSU5GTwogICAgIERlZmluZSB0aGlzIG1hY3JvIHRvIGEgbm9uemVybyB2YWx1ZSBpZiBHQ0Mgc2hvdWxkIGFsd2F5cyBvdXRwdXQKICAgICBEd2FyZiAyIGZyYW1lIGluZm9ybWF0aW9uLiAgSWYgJ0RXQVJGMl9VTldJTkRfSU5GTycgKCpub3RlCiAgICAgRXhjZXB0aW9uIFJlZ2lvbiBPdXRwdXQ6OiBpcyBub256ZXJvLCBHQ0Mgd2lsbCBvdXRwdXQgdGhpcwogICAgIGluZm9ybWF0aW9uIG5vdCBtYXR0ZXIgaG93IHlvdSBkZWZpbmUgJ0RXQVJGMl9GUkFNRV9JTkZPJy4KCiAtLSBNYWNybzogRFdBUkYyX0FTTV9MSU5FX0RFQlVHX0lORk8KICAgICBEZWZpbmUgdGhpcyBtYWNybyB0byBiZSBhIG5vbnplcm8gdmFsdWUgaWYgdGhlIGFzc2VtYmxlciBjYW4KICAgICBnZW5lcmF0ZSBEd2FyZiAyIGxpbmUgZGVidWcgaW5mbyBzZWN0aW9ucy4gIFRoaXMgd2lsbCByZXN1bHQgaW4KICAgICBtdWNoIG1vcmUgY29tcGFjdCBsaW5lIG51bWJlciB0YWJsZXMsIGFuZCBoZW5jZSBpcyBkZXNpcmFibGUgaWYgaXQKICAgICB3b3Jrcy4KCiAtLSBNYWNybzogQVNNX09VVFBVVF9EV0FSRl9ERUxUQSAoU1RSRUFNLCBTSVpFLCBMQUJFTDEsIExBQkVMMikKICAgICBBIEMgc3RhdGVtZW50IHRvIGlzc3VlIGFzc2VtYmx5IGRpcmVjdGl2ZXMgdGhhdCBjcmVhdGUgYSBkaWZmZXJlbmNlCiAgICAgTEFCMSBtaW51cyBMQUIyLCB1c2luZyBhbiBpbnRlZ2VyIG9mIHRoZSBnaXZlbiBTSVpFLgoKIC0tIE1hY3JvOiBBU01fT1VUUFVUX0RXQVJGX09GRlNFVCAoU1RSRUFNLCBTSVpFLCBMQUJFTCwgU0VDVElPTikKICAgICBBIEMgc3RhdGVtZW50IHRvIGlzc3VlIGFzc2VtYmx5IGRpcmVjdGl2ZXMgdGhhdCBjcmVhdGUgYQogICAgIHNlY3Rpb24tcmVsYXRpdmUgcmVmZXJlbmNlIHRvIHRoZSBnaXZlbiBMQUJFTCwgdXNpbmcgYW4gaW50ZWdlciBvZgogICAgIHRoZSBnaXZlbiBTSVpFLiAgVGhlIGxhYmVsIGlzIGtub3duIHRvIGJlIGRlZmluZWQgaW4gdGhlIGdpdmVuCiAgICAgU0VDVElPTi4KCiAtLSBNYWNybzogQVNNX09VVFBVVF9EV0FSRl9QQ1JFTCAoU1RSRUFNLCBTSVpFLCBMQUJFTCkKICAgICBBIEMgc3RhdGVtZW50IHRvIGlzc3VlIGFzc2VtYmx5IGRpcmVjdGl2ZXMgdGhhdCBjcmVhdGUgYQogICAgIHNlbGYtcmVsYXRpdmUgcmVmZXJlbmNlIHRvIHRoZSBnaXZlbiBMQUJFTCwgdXNpbmcgYW4gaW50ZWdlciBvZiB0aGUKICAgICBnaXZlbiBTSVpFLgoKIC0tIFRhcmdldCBIb29rOiB2b2lkIFRBUkdFVF9BU01fT1VUUFVUX0RXQVJGX0RUUFJFTCAoRklMRSAqRklMRSwgaW50CiAgICAgICAgICBTSVpFLCBydHggWCkKICAgICBJZiBkZWZpbmVkLCB0aGlzIHRhcmdldCBob29rIGlzIGEgZnVuY3Rpb24gd2hpY2ggb3V0cHV0cyBhCiAgICAgRFRQLXJlbGF0aXZlIHJlZmVyZW5jZSB0byB0aGUgZ2l2ZW4gVExTIHN5bWJvbCBvZiB0aGUgc3BlY2lmaWVkCiAgICAgc2l6ZS4KCiAtLSBNYWNybzogUFVUX1NEQl8gLi4uCiAgICAgRGVmaW5lIHRoZXNlIG1hY3JvcyB0byBvdmVycmlkZSB0aGUgYXNzZW1ibGVyIHN5bnRheCBmb3IgdGhlCiAgICAgc3BlY2lhbCBTREIgYXNzZW1ibGVyIGRpcmVjdGl2ZXMuICBTZWUgJ3NkYm91dC5jJyBmb3IgYSBsaXN0IG9mCiAgICAgdGhlc2UgbWFjcm9zIGFuZCB0aGVpciBhcmd1bWVudHMuICBJZiB0aGUgc3RhbmRhcmQgc3ludGF4IGlzIHVzZWQsCiAgICAgeW91IG5lZWQgbm90IGRlZmluZSB0aGVtIHlvdXJzZWxmLgoKIC0tIE1hY3JvOiBTREJfREVMSU0KICAgICBTb21lIGFzc2VtYmxlcnMgZG8gbm90IHN1cHBvcnQgYSBzZW1pY29sb24gYXMgYSBkZWxpbWl0ZXIsIGV2ZW4KICAgICBiZXR3ZWVuIFNEQiBhc3NlbWJsZXIgZGlyZWN0aXZlcy4gIEluIHRoYXQgY2FzZSwgZGVmaW5lIHRoaXMgbWFjcm8KICAgICB0byBiZSB0aGUgZGVsaW1pdGVyIHRvIHVzZSAodXN1YWxseSAnXG4nKS4gIEl0IGlzIG5vdCBuZWNlc3NhcnkgdG8KICAgICBkZWZpbmUgYSBuZXcgc2V0IG9mICdQVVRfU0RCX09QJyBtYWNyb3MgaWYgdGhpcyBpcyB0aGUgb25seSBjaGFuZ2UKICAgICByZXF1aXJlZC4KCiAtLSBNYWNybzogU0RCX0FMTE9XX1VOS05PV05fUkVGRVJFTkNFUwogICAgIERlZmluZSB0aGlzIG1hY3JvIHRvIGFsbG93IHJlZmVyZW5jZXMgdG8gdW5rbm93biBzdHJ1Y3R1cmUsIHVuaW9uLAogICAgIG9yIGVudW1lcmF0aW9uIHRhZ3MgdG8gYmUgZW1pdHRlZC4gIFN0YW5kYXJkIENPRkYgZG9lcyBub3QgYWxsb3cKICAgICBoYW5kbGluZyBvZiB1bmtub3duIHJlZmVyZW5jZXMsIE1JUFMgRUNPRkYgaGFzIHN1cHBvcnQgZm9yIGl0LgoKIC0tIE1hY3JvOiBTREJfQUxMT1dfRk9SV0FSRF9SRUZFUkVOQ0VTCiAgICAgRGVmaW5lIHRoaXMgbWFjcm8gdG8gYWxsb3cgcmVmZXJlbmNlcyB0byBzdHJ1Y3R1cmUsIHVuaW9uLCBvcgogICAgIGVudW1lcmF0aW9uIHRhZ3MgdGhhdCBoYXZlIG5vdCB5ZXQgYmVlbiBzZWVuIHRvIGJlIGhhbmRsZWQuICBTb21lCiAgICAgYXNzZW1ibGVycyBjaG9rZSBpZiBmb3J3YXJkIHRhZ3MgYXJlIHVzZWQsIHdoaWxlIHNvbWUgcmVxdWlyZSBpdC4KCiAtLSBNYWNybzogU0RCX09VVFBVVF9TT1VSQ0VfTElORSAoU1RSRUFNLCBMSU5FKQogICAgIEEgQyBzdGF0ZW1lbnQgdG8gb3V0cHV0IFNEQiBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gYmVmb3JlIGNvZGUgZm9yCiAgICAgbGluZSBudW1iZXIgTElORSBvZiB0aGUgY3VycmVudCBzb3VyY2UgZmlsZSB0byB0aGUgc3RkaW8gc3RyZWFtCiAgICAgU1RSRUFNLiAgVGhlIGRlZmF1bHQgaXMgdG8gZW1pdCBhbiAnLmxuJyBkaXJlY3RpdmUuCgofCkZpbGU6IGdjY2ludC5pbmZvLCAgTm9kZTogVk1TIERlYnVnLCAgUHJldjogU0RCIGFuZCBEV0FSRiwgIFVwOiBEZWJ1Z2dpbmcgSW5mbwoKMTUuMjIuNiBNYWNyb3MgZm9yIFZNUyBEZWJ1ZyBGb3JtYXQKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCkhlcmUgYXJlIG1hY3JvcyBmb3IgVk1TIGRlYnVnIGZvcm1hdC4KCiAtLSBNYWNybzogVk1TX0RFQlVHR0lOR19JTkZPCiAgICAgRGVmaW5lIHRoaXMgbWFjcm8gaWYgR0NDIHNob3VsZCBwcm9kdWNlIGRlYnVnZ2luZyBvdXRwdXQgZm9yIFZNUyBpbgogICAgIHJlc3BvbnNlIHRvIHRoZSAnLWcnIG9wdGlvbi4gIFRoZSBkZWZhdWx0IGJlaGF2aW9yIGZvciBWTVMgaXMgdG8KICAgICBnZW5lcmF0ZSBtaW5pbWFsIGRlYnVnIGluZm8gZm9yIGEgdHJhY2ViYWNrIGluIHRoZSBhYnNlbmNlIG9mICctZycKICAgICB1bmxlc3MgZXhwbGljaXRseSBvdmVycmlkZGVuIHdpdGggJy1nMCcuICBUaGlzIGJlaGF2aW9yIGlzCiAgICAgY29udHJvbGxlZCBieSAnT1BUSU1JWkFUSU9OX09QVElPTlMnIGFuZCAnT1ZFUlJJREVfT1BUSU9OUycuCgofCkZpbGU6IGdjY2ludC5pbmZvLCAgTm9kZTogRmxvYXRpbmcgUG9pbnQsICBOZXh0OiBNb2RlIFN3aXRjaGluZywgIFByZXY6IERlYnVnZ2luZyBJbmZvLCAgVXA6IFRhcmdldCBNYWNyb3MKCjE1LjIzIENyb3NzIENvbXBpbGF0aW9uIGFuZCBGbG9hdGluZyBQb2ludAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCldoaWxlIGFsbCBtb2Rlcm4gbWFjaGluZXMgdXNlIHR3b3MtY29tcGxlbWVudCByZXByZXNlbnRhdGlvbiBmb3IKaW50ZWdlcnMsIHRoZXJlIGFyZSBhIHZhcmlldHkgb2YgcmVwcmVzZW50YXRpb25zIGZvciBmbG9hdGluZyBwb2ludApudW1iZXJzLiAgVGhpcyBtZWFucyB0aGF0IGluIGEgY3Jvc3MtY29tcGlsZXIgdGhlIHJlcHJlc2VudGF0aW9uIG9mCmZsb2F0aW5nIHBvaW50IG51bWJlcnMgaW4gdGhlIGNvbXBpbGVkIHByb2dyYW0gbWF5IGJlIGRpZmZlcmVudCBmcm9tCnRoYXQgdXNlZCBpbiB0aGUgbWFjaGluZSBkb2luZyB0aGUgY29tcGlsYXRpb24uCgogQmVjYXVzZSBkaWZmZXJlbnQgcmVwcmVzZW50YXRpb24gc3lzdGVtcyBtYXkgb2ZmZXIgZGlmZmVyZW50IGFtb3VudHMgb2YKcmFuZ2UgYW5kIHByZWNpc2lvbiwgYWxsIGZsb2F0aW5nIHBvaW50IGNvbnN0YW50cyBtdXN0IGJlIHJlcHJlc2VudGVkIGluCnRoZSB0YXJnZXQgbWFjaGluZSdzIGZvcm1hdC4gIFRoZXJlZm9yZSwgdGhlIGNyb3NzIGNvbXBpbGVyIGNhbm5vdApzYWZlbHkgdXNlIHRoZSBob3N0IG1hY2hpbmUncyBmbG9hdGluZyBwb2ludCBhcml0aG1ldGljOyBpdCBtdXN0IGVtdWxhdGUKdGhlIHRhcmdldCdzIGFyaXRobWV0aWMuICBUbyBlbnN1cmUgY29uc2lzdGVuY3ksIEdDQyBhbHdheXMgdXNlcwplbXVsYXRpb24gdG8gd29yayB3aXRoIGZsb2F0aW5nIHBvaW50IHZhbHVlcywgZXZlbiB3aGVuIHRoZSBob3N0IGFuZAp0YXJnZXQgZmxvYXRpbmcgcG9pbnQgZm9ybWF0cyBhcmUgaWRlbnRpY2FsLgoKIFRoZSBmb2xsb3dpbmcgbWFjcm9zIGFyZSBwcm92aWRlZCBieSAncmVhbC5oJyBmb3IgdGhlIGNvbXBpbGVyIHRvIHVzZS4KQWxsIHBhcnRzIG9mIHRoZSBjb21waWxlciB3aGljaCBnZW5lcmF0ZSBvciBvcHRpbWl6ZSBmbG9hdGluZy1wb2ludApjYWxjdWxhdGlvbnMgbXVzdCB1c2UgdGhlc2UgbWFjcm9zLiAgVGhleSBtYXkgZXZhbHVhdGUgdGhlaXIgb3BlcmFuZHMKbW9yZSB0aGFuIG9uY2UsIHNvIG9wZXJhbmRzIG11c3Qgbm90IGhhdmUgc2lkZSBlZmZlY3RzLgoKIC0tIE1hY3JvOiBSRUFMX1ZBTFVFX1RZUEUKICAgICBUaGUgQyBkYXRhIHR5cGUgdG8gYmUgdXNlZCB0byBob2xkIGEgZmxvYXRpbmcgcG9pbnQgdmFsdWUgaW4gdGhlCiAgICAgdGFyZ2V0IG1hY2hpbmUncyBmb3JtYXQuICBUeXBpY2FsbHkgdGhpcyBpcyBhICdzdHJ1Y3QnIGNvbnRhaW5pbmcKICAgICBhbiBhcnJheSBvZiAnSE9TVF9XSURFX0lOVCcsIGJ1dCBhbGwgY29kZSBzaG91bGQgdHJlYXQgaXQgYXMgYW4KICAgICBvcGFxdWUgcXVhbnRpdHkuCgogLS0gTWFjcm86IGludCBSRUFMX1ZBTFVFU19FUVVBTCAoUkVBTF9WQUxVRV9UWVBFIFgsIFJFQUxfVkFMVUVfVFlQRSBZKQogICAgIENvbXBhcmVzIGZvciBlcXVhbGl0eSB0aGUgdHdvIHZhbHVlcywgWCBhbmQgWS4gIElmIHRoZSB0YXJnZXQKICAgICBmbG9hdGluZyBwb2ludCBmb3JtYXQgc3VwcG9ydHMgbmVnYXRpdmUgemVyb2VzIGFuZC9vciBOYU5zLAogICAgICdSRUFMX1ZBTFVFU19FUVVBTCAoLTAuMCwgMC4wKScgaXMgdHJ1ZSwgYW5kICdSRUFMX1ZBTFVFU19FUVVBTAogICAgIChOYU4sIE5hTiknIGlzIGZhbHNlLgoKIC0tIE1hY3JvOiBpbnQgUkVBTF9WQUxVRVNfTEVTUyAoUkVBTF9WQUxVRV9UWVBFIFgsIFJFQUxfVkFMVUVfVFlQRSBZKQogICAgIFRlc3RzIHdoZXRoZXIgWCBpcyBsZXNzIHRoYW4gWS4KCiAtLSBNYWNybzogSE9TVF9XSURFX0lOVCBSRUFMX1ZBTFVFX0ZJWCAoUkVBTF9WQUxVRV9UWVBFIFgpCiAgICAgVHJ1bmNhdGVzIFggdG8gYSBzaWduZWQgaW50ZWdlciwgcm91bmRpbmcgdG93YXJkIHplcm8uCgogLS0gTWFjcm86IHVuc2lnbmVkIEhPU1RfV0lERV9JTlQgUkVBTF9WQUxVRV9VTlNJR05FRF9GSVgKICAgICAgICAgIChSRUFMX1ZBTFVFX1RZUEUgWCkKICAgICBUcnVuY2F0ZXMgWCB0byBhbiB1bnNpZ25lZCBpbnRlZ2VyLCByb3VuZGluZyB0b3dhcmQgemVyby4gIElmIFggaXMKICAgICBuZWdhdGl2ZSwgcmV0dXJucyB6ZXJvLgoKIC0tIE1hY3JvOiBSRUFMX1ZBTFVFX1RZUEUgUkVBTF9WQUxVRV9BVE9GIChjb25zdCBjaGFyICpTVFJJTkcsIGVudW0KICAgICAgICAgIG1hY2hpbmVfbW9kZSBNT0RFKQogICAgIENvbnZlcnRzIFNUUklORyBpbnRvIGEgZmxvYXRpbmcgcG9pbnQgbnVtYmVyIGluIHRoZSB0YXJnZXQKICAgICBtYWNoaW5lJ3MgcmVwcmVzZW50YXRpb24gZm9yIG1vZGUgTU9ERS4gIFRoaXMgcm91dGluZSBjYW4gaGFuZGxlCiAgICAgYm90aCBkZWNpbWFsIGFuZCBoZXhhZGVjaW1hbCBmbG9hdGluZyBwb2ludCBjb25zdGFudHMsIHVzaW5nIHRoZQogICAgIHN5bnRheCBkZWZpbmVkIGJ5IHRoZSBDIGxhbmd1YWdlIGZvciBib3RoLgoKIC0tIE1hY3JvOiBpbnQgUkVBTF9WQUxVRV9ORUdBVElWRSAoUkVBTF9WQUxVRV9UWVBFIFgpCiAgICAgUmV0dXJucyAxIGlmIFggaXMgbmVnYXRpdmUgKGluY2x1ZGluZyBuZWdhdGl2ZSB6ZXJvKSwgMCBvdGhlcndpc2UuCgogLS0gTWFjcm86IGludCBSRUFMX1ZBTFVFX0lTSU5GIChSRUFMX1ZBTFVFX1RZUEUgWCkKICAgICBEZXRlcm1pbmVzIHdoZXRoZXIgWCByZXByZXNlbnRzIGluZmluaXR5IChwb3NpdGl2ZSBvciBuZWdhdGl2ZSkuCgogLS0gTWFjcm86IGludCBSRUFMX1ZBTFVFX0lTTkFOIChSRUFMX1ZBTFVFX1RZUEUgWCkKICAgICBEZXRlcm1pbmVzIHdoZXRoZXIgWCByZXByZXNlbnRzIGEgIk5hTiIgKG5vdC1hLW51bWJlcikuCgogLS0gTWFjcm86IHZvaWQgUkVBTF9BUklUSE1FVElDIChSRUFMX1ZBTFVFX1RZUEUgT1VUUFVULCBlbnVtIHRyZWVfY29kZQogICAgICAgICAgQ09ERSwgUkVBTF9WQUxVRV9UWVBFIFgsIFJFQUxfVkFMVUVfVFlQRSBZKQogICAgIENhbGN1bGF0ZXMgYW4gYXJpdGhtZXRpYyBvcGVyYXRpb24gb24gdGhlIHR3byBmbG9hdGluZyBwb2ludCB2YWx1ZXMKICAgICBYIGFuZCBZLCBzdG9yaW5nIHRoZSByZXN1bHQgaW4gT1VUUFVUICh3aGljaCBtdXN0IGJlIGEgdmFyaWFibGUpLgoKICAgICBUaGUgb3BlcmF0aW9uIHRvIGJlIHBlcmZvcm1lZCBpcyBzcGVjaWZpZWQgYnkgQ09ERS4gIE9ubHkgdGhlCiAgICAgZm9sbG93aW5nIGNvZGVzIGFyZSBzdXBwb3J0ZWQ6ICdQTFVTX0VYUFInLCAnTUlOVVNfRVhQUicsCiAgICAgJ01VTFRfRVhQUicsICdSRElWX0VYUFInLCAnTUFYX0VYUFInLCAnTUlOX0VYUFInLgoKICAgICBJZiAnUkVBTF9BUklUSE1FVElDJyBpcyBhc2tlZCB0byBldmFsdWF0ZSBkaXZpc2lvbiBieSB6ZXJvIGFuZCB0aGUKICAgICB0YXJnZXQncyBmbG9hdGluZyBwb2ludCBmb3JtYXQgY2Fubm90IHJlcHJlc2VudCBpbmZpbml0eSwgaXQgd2lsbAogICAgIGNhbGwgJ2Fib3J0Jy4gIENhbGxlcnMgc2hvdWxkIGNoZWNrIGZvciB0aGlzIHNpdHVhdGlvbiBmaXJzdCwgdXNpbmcKICAgICAnTU9ERV9IQVNfSU5GSU5JVElFUycuICAqTm90ZSBTdG9yYWdlIExheW91dDo6LgoKIC0tIE1hY3JvOiBSRUFMX1ZBTFVFX1RZUEUgUkVBTF9WQUxVRV9ORUdBVEUgKFJFQUxfVkFMVUVfVFlQRSBYKQogICAgIFJldHVybnMgdGhlIG5lZ2F0aXZlIG9mIHRoZSBmbG9hdGluZyBwb2ludCB2YWx1ZSBYLgoKIC0tIE1hY3JvOiBSRUFMX1ZBTFVFX1RZUEUgUkVBTF9WQUxVRV9BQlMgKFJFQUxfVkFMVUVfVFlQRSBYKQogICAgIFJldHVybnMgdGhlIGFic29sdXRlIHZhbHVlIG9mIFguCgogLS0gTWFjcm86IFJFQUxfVkFMVUVfVFlQRSBSRUFMX1ZBTFVFX1RSVU5DQVRFIChSRUFMX1ZBTFVFX1RZUEUgTU9ERSwKICAgICAgICAgIGVudW0gbWFjaGluZV9tb2RlIFgpCiAgICAgVHJ1bmNhdGVzIHRoZSBmbG9hdGluZyBwb2ludCB2YWx1ZSBYIHRvIGZpdCBpbiBNT0RFLiAgVGhlIHJldHVybgogICAgIHZhbHVlIGlzIHN0aWxsIGEgZnVsbC1zaXplICdSRUFMX1ZBTFVFX1RZUEUnLCBidXQgaXQgaGFzIGFuCiAgICAgYXBwcm9wcmlhdGUgYml0IHBhdHRlcm4gdG8gYmUgb3V0cHV0IGFzIGEgZmxvYXRpbmcgY29uc3RhbnQgd2hvc2UKICAgICBwcmVjaXNpb24gYWNjb3JkcyB3aXRoIG1vZGUgTU9ERS4KCiAtLSBNYWNybzogdm9pZCBSRUFMX1ZBTFVFX1RPX0lOVCAoSE9TVF9XSURFX0lOVCBMT1csIEhPU1RfV0lERV9JTlQKICAgICAgICAgIEhJR0gsIFJFQUxfVkFMVUVfVFlQRSBYKQogICAgIENvbnZlcnRzIGEgZmxvYXRpbmcgcG9pbnQgdmFsdWUgWCBpbnRvIGEgZG91YmxlLXByZWNpc2lvbiBpbnRlZ2VyCiAgICAgd2hpY2ggaXMgdGhlbiBzdG9yZWQgaW50byBMT1cgYW5kIEhJR0guICBJZiB0aGUgdmFsdWUgaXMgbm90CiAgICAgaW50ZWdyYWwsIGl0IGlzIHRydW5jYXRlZC4KCiAtLSBNYWNybzogdm9pZCBSRUFMX1ZBTFVFX0ZST01fSU5UIChSRUFMX1ZBTFVFX1RZUEUgWCwgSE9TVF9XSURFX0lOVAogICAgICAgICAgTE9XLCBIT1NUX1dJREVfSU5UIEhJR0gsIGVudW0gbWFjaGluZV9tb2RlIE1PREUpCiAgICAgQ29udmVydHMgYSBkb3VibGUtcHJlY2lzaW9uIGludGVnZXIgZm91bmQgaW4gTE9XIGFuZCBISUdILCBpbnRvIGEKICAgICBmbG9hdGluZyBwb2ludCB2YWx1ZSB3aGljaCBpcyB0aGVuIHN0b3JlZCBpbnRvIFguICBUaGUgdmFsdWUgaXMKICAgICB0cnVuY2F0ZWQgdG8gZml0IGluIG1vZGUgTU9ERS4KCh8KRmlsZTogZ2NjaW50LmluZm8sICBOb2RlOiBNb2RlIFN3aXRjaGluZywgIE5leHQ6IFRhcmdldCBBdHRyaWJ1dGVzLCAgUHJldjogRmxvYXRpbmcgUG9pbnQsICBVcDogVGFyZ2V0IE1hY3JvcwoKMTUuMjQgTW9kZSBTd2l0Y2hpbmcgSW5zdHJ1Y3Rpb25zCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKVGhlIGZvbGxvd2luZyBtYWNyb3MgY29udHJvbCBtb2RlIHN3aXRjaGluZyBvcHRpbWl6YXRpb25zOgoKIC0tIE1hY3JvOiBPUFRJTUlaRV9NT0RFX1NXSVRDSElORyAoRU5USVRZKQogICAgIERlZmluZSB0aGlzIG1hY3JvIGlmIHRoZSBwb3J0IG5lZWRzIGV4dHJhIGluc3RydWN0aW9ucyBpbnNlcnRlZCBmb3IKICAgICBtb2RlIHN3aXRjaGluZyBpbiBhbiBvcHRpbWl6aW5nIGNvbXBpbGF0aW9uLgoKICAgICBGb3IgYW4gZXhhbXBsZSwgdGhlIFNINCBjYW4gcGVyZm9ybSBib3RoIHNpbmdsZSBhbmQgZG91YmxlCiAgICAgcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50IG9wZXJhdGlvbnMsIGJ1dCB0byBwZXJmb3JtIGEgc2luZ2xlCiAgICAgcHJlY2lzaW9uIG9wZXJhdGlvbiwgdGhlIEZQU0NSIFBSIGJpdCBoYXMgdG8gYmUgY2xlYXJlZCwgd2hpbGUgZm9yCiAgICAgYSBkb3VibGUgcHJlY2lzaW9uIG9wZXJhdGlvbiwgdGhpcyBiaXQgaGFzIHRvIGJlIHNldC4gIENoYW5naW5nIHRoZQogICAgIFBSIGJpdCByZXF1aXJlcyBhIGdlbmVyYWwgcHVycG9zZSByZWdpc3RlciBhcyBhIHNjcmF0Y2ggcmVnaXN0ZXIsCiAgICAgaGVuY2UgdGhlc2UgRlBTQ1Igc2V0cyBoYXZlIHRvIGJlIGluc2VydGVkIGJlZm9yZSByZWxvYWQsIGkuZS4geW91CiAgICAgY2FuJ3QgcHV0IHRoaXMgaW50byBpbnN0cnVjdGlvbiBlbWl0dGluZyBvcgogICAgICdUQVJHRVRfTUFDSElORV9ERVBFTkRFTlRfUkVPUkcnLgoKICAgICBZb3UgY2FuIGhhdmUgbXVsdGlwbGUgZW50aXRpZXMgdGhhdCBhcmUgbW9kZS1zd2l0Y2hlZCwgYW5kIHNlbGVjdAogICAgIGF0IHJ1biB0aW1lIHdoaWNoIGVudGl0aWVzIGFjdHVhbGx5IG5lZWQgaXQuCiAgICAgJ09QVElNSVpFX01PREVfU1dJVENISU5HJyBzaG91bGQgcmV0dXJuIG5vbnplcm8gZm9yIGFueSBFTlRJVFkgdGhhdAogICAgIG5lZWRzIG1vZGUtc3dpdGNoaW5nLiAgSWYgeW91IGRlZmluZSB0aGlzIG1hY3JvLCB5b3UgYWxzbyBoYXZlIHRvCiAgICAgZGVmaW5lICdOVU1fTU9ERVNfRk9SX01PREVfU1dJVENISU5HJywgJ01PREVfTkVFREVEJywKICAgICAnTU9ERV9QUklPUklUWV9UT19NT0RFJyBhbmQgJ0VNSVRfTU9ERV9TRVQnLiAgJ01PREVfQUZURVInLAogICAgICdNT0RFX0VOVFJZJywgYW5kICdNT0RFX0VYSVQnIGFyZSBvcHRpb25hbC4KCiAtLSBNYWNybzogTlVNX01PREVTX0ZPUl9NT0RFX1NXSVRDSElORwogICAgIElmIHlvdSBkZWZpbmUgJ09QVElNSVpFX01PREVfU1dJVENISU5HJywgeW91IGhhdmUgdG8gZGVmaW5lIHRoaXMgYXMKICAgICBpbml0aWFsaXplciBmb3IgYW4gYXJyYXkgb2YgaW50ZWdlcnMuICBFYWNoIGluaXRpYWxpemVyIGVsZW1lbnQgTgogICAgIHJlZmVycyB0byBhbiBlbnRpdHkgdGhhdCBuZWVkcyBtb2RlIHN3aXRjaGluZywgYW5kIHNwZWNpZmllcyB0aGUKICAgICBudW1iZXIgb2YgZGlmZmVyZW50IG1vZGVzIHRoYXQgbWlnaHQgbmVlZCB0byBiZSBzZXQgZm9yIHRoaXMKICAgICBlbnRpdHkuICBUaGUgcG9zaXRpb24gb2YgdGhlIGluaXRpYWxpemVyIGluIHRoZQogICAgIGluaXRpYWxpemVyLS1zdGFydGluZyBjb3VudGluZyBhdCB6ZXJvLS1kZXRlcm1pbmVzIHRoZSBpbnRlZ2VyIHRoYXQKICAgICBpcyB1c2VkIHRvIHJlZmVyIHRvIHRoZSBtb2RlLXN3aXRjaGVkIGVudGl0eSBpbiBxdWVzdGlvbi4gIEluCiAgICAgbWFjcm9zIHRoYXQgdGFrZSBtb2RlIGFyZ3VtZW50cyAvIHlpZWxkIGEgbW9kZSByZXN1bHQsIG1vZGVzIGFyZQogICAgIHJlcHJlc2VudGVkIGFzIG51bWJlcnMgMCAuLi4gTiAtIDEuICBOIGlzIHVzZWQgdG8gc3BlY2lmeSB0aGF0IG5vCiAgICAgbW9kZSBzd2l0Y2ggaXMgbmVlZGVkIC8gc3VwcGxpZWQuCgogLS0gTWFjcm86IE1PREVfTkVFREVEIChFTlRJVFksIElOU04pCiAgICAgRU5USVRZIGlzIGFuIGludGVnZXIgc3BlY2lmeWluZyBhIG1vZGUtc3dpdGNoZWQgZW50aXR5LiAgSWYKICAgICAnT1BUSU1JWkVfTU9ERV9TV0lUQ0hJTkcnIGlzIGRlZmluZWQsIHlvdSBtdXN0IGRlZmluZSB0aGlzIG1hY3JvIHRvCiAgICAgcmV0dXJuIGFuIGludGVnZXIgdmFsdWUgbm90IGxhcmdlciB0aGFuIHRoZSBjb3JyZXNwb25kaW5nIGVsZW1lbnQKICAgICBpbiAnTlVNX01PREVTX0ZPUl9NT0RFX1NXSVRDSElORycsIHRvIGRlbm90ZSB0aGUgbW9kZSB0aGF0IEVOVElUWQogICAgIG11c3QgYmUgc3dpdGNoZWQgaW50byBwcmlvciB0byB0aGUgZXhlY3V0aW9uIG9mIElOU04uCgogLS0gTWFjcm86IE1PREVfQUZURVIgKE1PREUsIElOU04pCiAgICAgSWYgdGhpcyBtYWNybyBpcyBkZWZpbmVkLCBpdCBpcyBldmFsdWF0ZWQgZm9yIGV2ZXJ5IElOU04gZHVyaW5nCiAgICAgbW9kZSBzd2l0Y2hpbmcuICBJdCBkZXRlcm1pbmVzIHRoZSBtb2RlIHRoYXQgYW4gaW5zbiByZXN1bHRzIGluIChpZgogICAgIGRpZmZlcmVudCBmcm9tIHRoZSBpbmNvbWluZyBtb2RlKS4KCiAtLSBNYWNybzogTU9ERV9FTlRSWSAoRU5USVRZKQogICAgIElmIHRoaXMgbWFjcm8gaXMgZGVmaW5lZCwgaXQgaXMgZXZhbHVhdGVkIGZvciBldmVyeSBFTlRJVFkgdGhhdAogICAgIG5lZWRzIG1vZGUgc3dpdGNoaW5nLiAgSXQgc2hvdWxkIGV2YWx1YXRlIHRvIGFuIGludGVnZXIsIHdoaWNoIGlzIGEKICAgICBtb2RlIHRoYXQgRU5USVRZIGlzIGFzc3VtZWQgdG8gYmUgc3dpdGNoZWQgdG8gYXQgZnVuY3Rpb24gZW50cnkuCiAgICAgSWYgJ01PREVfRU5UUlknIGlzIGRlZmluZWQgdGhlbiAnTU9ERV9FWElUJyBtdXN0IGJlIGRlZmluZWQuCgogLS0gTWFjcm86IE1PREVfRVhJVCAoRU5USVRZKQogICAgIElmIHRoaXMgbWFjcm8gaXMgZGVmaW5lZCwgaXQgaXMgZXZhbHVhdGVkIGZvciBldmVyeSBFTlRJVFkgdGhhdAogICAgIG5lZWRzIG1vZGUgc3dpdGNoaW5nLiAgSXQgc2hvdWxkIGV2YWx1YXRlIHRvIGFuIGludGVnZXIsIHdoaWNoIGlzIGEKICAgICBtb2RlIHRoYXQgRU5USVRZIGlzIGFzc3VtZWQgdG8gYmUgc3dpdGNoZWQgdG8gYXQgZnVuY3Rpb24gZXhpdC4gIElmCiAgICAgJ01PREVfRVhJVCcgaXMgZGVmaW5lZCB0aGVuICdNT0RFX0VOVFJZJyBtdXN0IGJlIGRlZmluZWQuCgogLS0gTWFjcm86IE1PREVfUFJJT1JJVFlfVE9fTU9ERSAoRU5USVRZLCBOKQogICAgIFRoaXMgbWFjcm8gc3BlY2lmaWVzIHRoZSBvcmRlciBpbiB3aGljaCBtb2RlcyBmb3IgRU5USVRZIGFyZQogICAgIHByb2Nlc3NlZC4gIDAgaXMgdGhlIGhpZ2hlc3QgcHJpb3JpdHksCiAgICAgJ05VTV9NT0RFU19GT1JfTU9ERV9TV0lUQ0hJTkdbRU5USVRZXSAtIDEnIHRoZSBsb3dlc3QuICBUaGUgdmFsdWUKICAgICBvZiB0aGUgbWFjcm8gc2hvdWxkIGJlIGFuIGludGVnZXIgZGVzaWduYXRpbmcgYSBtb2RlIGZvciBFTlRJVFkuCiAgICAgRm9yIGFueSBmaXhlZCBFTlRJVFksICdtb2RlX3ByaW9yaXR5X3RvX21vZGUnIChFTlRJVFksIE4pIHNoYWxsIGJlCiAgICAgYSBiaWplY3Rpb24gaW4gMCAuLi4gJ251bV9tb2Rlc19mb3JfbW9kZV9zd2l0Y2hpbmdbRU5USVRZXSAtIDEnLgoKIC0tIE1hY3JvOiBFTUlUX01PREVfU0VUIChFTlRJVFksIE1PREUsIEhBUkRfUkVHU19MSVZFKQogICAgIEdlbmVyYXRlIG9uZSBvciBtb3JlIGluc25zIHRvIHNldCBFTlRJVFkgdG8gTU9ERS4gIEhBUkRfUkVHX0xJVkUgaXMKICAgICB0aGUgc2V0IG9mIGhhcmQgcmVnaXN0ZXJzIGxpdmUgYXQgdGhlIHBvaW50IHdoZXJlIHRoZSBpbnNuKHMpIGFyZQogICAgIHRvIGJlIGluc2VydGVkLgoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IFRhcmdldCBBdHRyaWJ1dGVzLCAgTmV4dDogTUlQUyBDb3Byb2Nlc3NvcnMsICBQcmV2OiBNb2RlIFN3aXRjaGluZywgIFVwOiBUYXJnZXQgTWFjcm9zCgoxNS4yNSBEZWZpbmluZyB0YXJnZXQtc3BlY2lmaWMgdXNlcyBvZiAnX19hdHRyaWJ1dGVfXycKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpUYXJnZXQtc3BlY2lmaWMgYXR0cmlidXRlcyBtYXkgYmUgZGVmaW5lZCBmb3IgZnVuY3Rpb25zLCBkYXRhIGFuZCB0eXBlcy4KVGhlc2UgYXJlIGRlc2NyaWJlZCB1c2luZyB0aGUgZm9sbG93aW5nIHRhcmdldCBob29rczsgdGhleSBhbHNvIG5lZWQgdG8KYmUgZG9jdW1lbnRlZCBpbiAnZXh0ZW5kLnRleGknLgoKIC0tIFRhcmdldCBIb29rOiBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX3NwZWMgKiBUQVJHRVRfQVRUUklCVVRFX1RBQkxFCiAgICAgSWYgZGVmaW5lZCwgdGhpcyB0YXJnZXQgaG9vayBwb2ludHMgdG8gYW4gYXJyYXkgb2YgJ3N0cnVjdAogICAgIGF0dHJpYnV0ZV9zcGVjJyAoZGVmaW5lZCBpbiAndHJlZS5oJykgc3BlY2lmeWluZyB0aGUgbWFjaGluZQogICAgIHNwZWNpZmljIGF0dHJpYnV0ZXMgZm9yIHRoaXMgdGFyZ2V0IGFuZCBzb21lIG9mIHRoZSByZXN0cmljdGlvbnMgb24KICAgICB0aGUgZW50aXRpZXMgdG8gd2hpY2ggdGhlc2UgYXR0cmlidXRlcyBhcmUgYXBwbGllZCBhbmQgdGhlCiAgICAgYXJndW1lbnRzIHRoZXkgdGFrZS4KCiAtLSBUYXJnZXQgSG9vazogaW50IFRBUkdFVF9DT01QX1RZUEVfQVRUUklCVVRFUyAodHJlZSBUWVBFMSwgdHJlZQogICAgICAgICAgVFlQRTIpCiAgICAgSWYgZGVmaW5lZCwgdGhpcyB0YXJnZXQgaG9vayBpcyBhIGZ1bmN0aW9uIHdoaWNoIHJldHVybnMgemVybyBpZgogICAgIHRoZSBhdHRyaWJ1dGVzIG9uIFRZUEUxIGFuZCBUWVBFMiBhcmUgaW5jb21wYXRpYmxlLCBvbmUgaWYgdGhleSBhcmUKICAgICBjb21wYXRpYmxlLCBhbmQgdHdvIGlmIHRoZXkgYXJlIG5lYXJseSBjb21wYXRpYmxlICh3aGljaCBjYXVzZXMgYQogICAgIHdhcm5pbmcgdG8gYmUgZ2VuZXJhdGVkKS4gIElmIHRoaXMgaXMgbm90IGRlZmluZWQsIG1hY2hpbmUtc3BlY2lmaWMKICAgICBhdHRyaWJ1dGVzIGFyZSBzdXBwb3NlZCBhbHdheXMgdG8gYmUgY29tcGF0aWJsZS4KCiAtLSBUYXJnZXQgSG9vazogdm9pZCBUQVJHRVRfU0VUX0RFRkFVTFRfVFlQRV9BVFRSSUJVVEVTICh0cmVlIFRZUEUpCiAgICAgSWYgZGVmaW5lZCwgdGhpcyB0YXJnZXQgaG9vayBpcyBhIGZ1bmN0aW9uIHdoaWNoIGFzc2lnbnMgZGVmYXVsdAogICAgIGF0dHJpYnV0ZXMgdG8gbmV3bHkgZGVmaW5lZCBUWVBFLgoKIC0tIFRhcmdldCBIb29rOiB0cmVlIFRBUkdFVF9NRVJHRV9UWVBFX0FUVFJJQlVURVMgKHRyZWUgVFlQRTEsIHRyZWUKICAgICAgICAgIFRZUEUyKQogICAgIERlZmluZSB0aGlzIHRhcmdldCBob29rIGlmIHRoZSBtZXJnaW5nIG9mIHR5cGUgYXR0cmlidXRlcyBuZWVkcwogICAgIHNwZWNpYWwgaGFuZGxpbmcuICBJZiBkZWZpbmVkLCB0aGUgcmVzdWx0IGlzIGEgbGlzdCBvZiB0aGUgY29tYmluZWQKICAgICAnVFlQRV9BVFRSSUJVVEVTJyBvZiBUWVBFMSBhbmQgVFlQRTIuICBJdCBpcyBhc3N1bWVkIHRoYXQKICAgICAnY29tcHR5cGVzJyBoYXMgYWxyZWFkeSBiZWVuIGNhbGxlZCBhbmQgcmV0dXJuZWQgMS4gIFRoaXMgZnVuY3Rpb24KICAgICBtYXkgY2FsbCAnbWVyZ2VfYXR0cmlidXRlcycgdG8gaGFuZGxlIG1hY2hpbmUtaW5kZXBlbmRlbnQgbWVyZ2luZy4KCiAtLSBUYXJnZXQgSG9vazogdHJlZSBUQVJHRVRfTUVSR0VfREVDTF9BVFRSSUJVVEVTICh0cmVlIE9MRERFQ0wsIHRyZWUKICAgICAgICAgIE5FV0RFQ0wpCiAgICAgRGVmaW5lIHRoaXMgdGFyZ2V0IGhvb2sgaWYgdGhlIG1lcmdpbmcgb2YgZGVjbCBhdHRyaWJ1dGVzIG5lZWRzCiAgICAgc3BlY2lhbCBoYW5kbGluZy4gIElmIGRlZmluZWQsIHRoZSByZXN1bHQgaXMgYSBsaXN0IG9mIHRoZSBjb21iaW5lZAogICAgICdERUNMX0FUVFJJQlVURVMnIG9mIE9MRERFQ0wgYW5kIE5FV0RFQ0wuICBORVdERUNMIGlzIGEgZHVwbGljYXRlCiAgICAgZGVjbGFyYXRpb24gb2YgT0xEREVDTC4gIEV4YW1wbGVzIG9mIHdoZW4gdGhpcyBpcyBuZWVkZWQgYXJlIHdoZW4KICAgICBvbmUgYXR0cmlidXRlIG92ZXJyaWRlcyBhbm90aGVyLCBvciB3aGVuIGFuIGF0dHJpYnV0ZSBpcyBudWxsaWZpZWQKICAgICBieSBhIHN1YnNlcXVlbnQgZGVmaW5pdGlvbi4gIFRoaXMgZnVuY3Rpb24gbWF5IGNhbGwKICAgICAnbWVyZ2VfYXR0cmlidXRlcycgdG8gaGFuZGxlIG1hY2hpbmUtaW5kZXBlbmRlbnQgbWVyZ2luZy4KCiAgICAgSWYgdGhlIG9ubHkgdGFyZ2V0LXNwZWNpZmljIGhhbmRsaW5nIHlvdSByZXF1aXJlIGlzICdkbGxpbXBvcnQnIGZvcgogICAgIE1pY3Jvc29mdCBXaW5kb3dzIHRhcmdldHMsIHlvdSBzaG91bGQgZGVmaW5lIHRoZSBtYWNybwogICAgICdUQVJHRVRfRExMSU1QT1JUX0RFQ0xfQVRUUklCVVRFUycgdG8gJzEnLiAgVGhlIGNvbXBpbGVyIHdpbGwgdGhlbgogICAgIGRlZmluZSBhIGZ1bmN0aW9uIGNhbGxlZCAnbWVyZ2VfZGxsaW1wb3J0X2RlY2xfYXR0cmlidXRlcycgd2hpY2gKICAgICBjYW4gdGhlbiBiZSBkZWZpbmVkIGFzIHRoZSBleHBhbnNpb24gb2YKICAgICAnVEFSR0VUX01FUkdFX0RFQ0xfQVRUUklCVVRFUycuICBZb3UgY2FuIGFsc28gYWRkCiAgICAgJ2hhbmRsZV9kbGxfYXR0cmlidXRlJyBpbiB0aGUgYXR0cmlidXRlIHRhYmxlIGZvciB5b3VyIHBvcnQgdG8KICAgICBwZXJmb3JtIGluaXRpYWwgcHJvY2Vzc2luZyBvZiB0aGUgJ2RsbGltcG9ydCcgYW5kICdkbGxleHBvcnQnCiAgICAgYXR0cmlidXRlcy4gIFRoaXMgaXMgZG9uZSBpbiAnaTM4Ni9jeWd3aW4uaCcgYW5kICdpMzg2L2kzODYuYycsIGZvcgogICAgIGV4YW1wbGUuCgogLS0gVGFyZ2V0IEhvb2s6IGJvb2wgVEFSR0VUX1ZBTElEX0RMTElNUE9SVF9BVFRSSUJVVEVfUCAodHJlZSBERUNMKQogICAgIERFQ0wgaXMgYSB2YXJpYWJsZSBvciBmdW5jdGlvbiB3aXRoICdfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKScKICAgICBzcGVjaWZpZWQuICBVc2UgdGhpcyBob29rIGlmIHRoZSB0YXJnZXQgbmVlZHMgdG8gYWRkIGV4dHJhCiAgICAgdmFsaWRhdGlvbiBjaGVja3MgdG8gJ2hhbmRsZV9kbGxfYXR0cmlidXRlJy4KCiAtLSBNYWNybzogVEFSR0VUX0RFQ0xTUEVDCiAgICAgRGVmaW5lIHRoaXMgbWFjcm8gdG8gYSBub256ZXJvIHZhbHVlIGlmIHlvdSB3YW50IHRvIHRyZWF0CiAgICAgJ19fZGVjbHNwZWMoWCknIGFzIGVxdWl2YWxlbnQgdG8gJ19fYXR0cmlidXRlKChYKSknLiAgQnkgZGVmYXVsdCwKICAgICB0aGlzIGJlaGF2aW9yIGlzIGVuYWJsZWQgb25seSBmb3IgdGFyZ2V0cyB0aGF0IGRlZmluZQogICAgICdUQVJHRVRfRExMSU1QT1JUX0RFQ0xfQVRUUklCVVRFUycuICBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvZgogICAgICdfX2RlY2xzcGVjJyBpcyB2aWEgYSBidWlsdC1pbiBtYWNybywgYnV0IHlvdSBzaG91bGQgbm90IHJlbHkgb24KICAgICB0aGlzIGltcGxlbWVudGF0aW9uIGRldGFpbC4KCiAtLSBUYXJnZXQgSG9vazogdm9pZCBUQVJHRVRfSU5TRVJUX0FUVFJJQlVURVMgKHRyZWUgTk9ERSwgdHJlZQogICAgICAgICAgKkFUVFJfUFRSKQogICAgIERlZmluZSB0aGlzIHRhcmdldCBob29rIGlmIHlvdSB3YW50IHRvIGJlIGFibGUgdG8gYWRkIGF0dHJpYnV0ZXMgdG8KICAgICBhIGRlY2wgd2hlbiBpdCBpcyBiZWluZyBjcmVhdGVkLiAgVGhpcyBpcyBub3JtYWxseSB1c2VmdWwgZm9yIGJhY2sKICAgICBlbmRzIHdoaWNoIHdpc2ggdG8gaW1wbGVtZW50IGEgcHJhZ21hIGJ5IHVzaW5nIHRoZSBhdHRyaWJ1dGVzIHdoaWNoCiAgICAgY29ycmVzcG9uZCB0byB0aGUgcHJhZ21hJ3MgZWZmZWN0LiAgVGhlIE5PREUgYXJndW1lbnQgaXMgdGhlIGRlY2wKICAgICB3aGljaCBpcyBiZWluZyBjcmVhdGVkLiAgVGhlIEFUVFJfUFRSIGFyZ3VtZW50IGlzIGEgcG9pbnRlciB0byB0aGUKICAgICBhdHRyaWJ1dGUgbGlzdCBmb3IgdGhpcyBkZWNsLiAgVGhlIGxpc3QgaXRzZWxmIHNob3VsZCBub3QgYmUKICAgICBtb2RpZmllZCwgc2luY2UgaXQgbWF5IGJlIHNoYXJlZCB3aXRoIG90aGVyIGRlY2xzLCBidXQgYXR0cmlidXRlcwogICAgIG1heSBiZSBjaGFpbmVkIG9uIHRoZSBoZWFkIG9mIHRoZSBsaXN0IGFuZCAnKkFUVFJfUFRSJyBtb2RpZmllZCB0bwogICAgIHBvaW50IHRvIHRoZSBuZXcgYXR0cmlidXRlcywgb3IgYSBjb3B5IG9mIHRoZSBsaXN0IG1heSBiZSBtYWRlIGlmCiAgICAgZnVydGhlciBjaGFuZ2VzIGFyZSBuZWVkZWQuCgogLS0gVGFyZ2V0IEhvb2s6IGJvb2wgVEFSR0VUX0ZVTkNUSU9OX0FUVFJJQlVURV9JTkxJTkFCTEVfUCAodHJlZQogICAgICAgICAgRk5ERUNMKQogICAgIFRoaXMgdGFyZ2V0IGhvb2sgcmV0dXJucyAndHJ1ZScgaWYgaXQgaXMgb2sgdG8gaW5saW5lIEZOREVDTCBpbnRvCiAgICAgdGhlIGN1cnJlbnQgZnVuY3Rpb24sIGRlc3BpdGUgaXRzIGhhdmluZyB0YXJnZXQtc3BlY2lmaWMKICAgICBhdHRyaWJ1dGVzLCAnZmFsc2UnIG90aGVyd2lzZS4gIEJ5IGRlZmF1bHQsIGlmIGEgZnVuY3Rpb24gaGFzIGEKICAgICB0YXJnZXQgc3BlY2lmaWMgYXR0cmlidXRlIGF0dGFjaGVkIHRvIGl0LCBpdCB3aWxsIG5vdCBiZSBpbmxpbmVkLgoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IE1JUFMgQ29wcm9jZXNzb3JzLCAgTmV4dDogUENIIFRhcmdldCwgIFByZXY6IFRhcmdldCBBdHRyaWJ1dGVzLCAgVXA6IFRhcmdldCBNYWNyb3MKCjE1LjI2IERlZmluaW5nIGNvcHJvY2Vzc29yIHNwZWNpZmljcyBmb3IgTUlQUyB0YXJnZXRzLgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KClRoZSBNSVBTIHNwZWNpZmljYXRpb24gYWxsb3dzIE1JUFMgaW1wbGVtZW50YXRpb25zIHRvIGhhdmUgYXMgbWFueSBhcyA0CmNvcHJvY2Vzc29ycywgZWFjaCB3aXRoIGFzIG1hbnkgYXMgMzIgcHJpdmF0ZSByZWdpc3RlcnMuICBHQ0Mgc3VwcG9ydHMKYWNjZXNzaW5nIHRoZXNlIHJlZ2lzdGVycyBhbmQgdHJhbnNmZXJyaW5nIHZhbHVlcyBiZXR3ZWVuIHRoZSByZWdpc3RlcnMKYW5kIG1lbW9yeSB1c2luZyBhc20taXplZCB2YXJpYWJsZXMuICBGb3IgZXhhbXBsZToKCiAgICAgICByZWdpc3RlciB1bnNpZ25lZCBpbnQgY3AwY291bnQgYXNtICgiYzByMSIpOwogICAgICAgdW5zaWduZWQgaW50IGQ7CgogICAgICAgZCA9IGNwMGNvdW50ICsgMzsKCiAoImMwcjEiIGlzIHRoZSBkZWZhdWx0IG5hbWUgb2YgcmVnaXN0ZXIgMSBpbiBjb3Byb2Nlc3NvciAwOyBhbHRlcm5hdGUKbmFtZXMgbWF5IGJlIGFkZGVkIGFzIGRlc2NyaWJlZCBiZWxvdywgb3IgdGhlIGRlZmF1bHQgbmFtZXMgbWF5IGJlCm92ZXJyaWRkZW4gZW50aXJlbHkgaW4gJ1NVQlRBUkdFVF9DT05ESVRJT05BTF9SRUdJU1RFUl9VU0FHRScuKQoKIENvcHJvY2Vzc29yIHJlZ2lzdGVycyBhcmUgYXNzdW1lZCB0byBiZSBlcGlsb2d1ZS11c2VkOyBzZXRzIHRvIHRoZW0Kd2lsbCBiZSBwcmVzZXJ2ZWQgZXZlbiBpZiBpdCBkb2VzIG5vdCBhcHBlYXIgdGhhdCB0aGUgcmVnaXN0ZXIgaXMgdXNlZAphZ2FpbiBsYXRlciBpbiB0aGUgZnVuY3Rpb24uCgogQW5vdGhlciBub3RlOiBhY2NvcmRpbmcgdG8gdGhlIE1JUFMgc3BlYywgY29wcm9jZXNzb3IgMSAoaWYgcHJlc2VudCkgaXMKdGhlIEZQVS4gIE9uZSBhY2Nlc3NlcyBDT1AxIHJlZ2lzdGVycyB0aHJvdWdoIHN0YW5kYXJkIG1pcHMKZmxvYXRpbmctcG9pbnQgc3VwcG9ydDsgdGhleSBhcmUgbm90IGluY2x1ZGVkIGluIHRoaXMgbWVjaGFuaXNtLgoKIFRoZXJlIGlzIG9uZSBtYWNybyB1c2VkIGluIGRlZmluaW5nIHRoZSBNSVBTIGNvcHJvY2Vzc29yIGludGVyZmFjZQp3aGljaCB5b3UgbWF5IHdhbnQgdG8gb3ZlcnJpZGUgaW4gc3VidGFyZ2V0czsgaXQgaXMgZGVzY3JpYmVkIGJlbG93LgoKIC0tIE1hY3JvOiBBTExfQ09QX0FERElUSU9OQUxfUkVHSVNURVJfTkFNRVMKICAgICBBIGNvbW1hLXNlcGFyYXRlZCBsaXN0ICh3aXRoIGxlYWRpbmcgY29tbWEpIG9mIHBhaXJzIGRlc2NyaWJpbmcgdGhlCiAgICAgYWx0ZXJuYXRlIG5hbWVzIG9mIGNvcHJvY2Vzc29yIHJlZ2lzdGVycy4gIFRoZSBmb3JtYXQgb2YgZWFjaCBlbnRyeQogICAgIHNob3VsZCBiZQogICAgICAgICAgeyBBTFRFUk5BVEVOQU1FLCBSRUdJU1RFUl9OVU1CRVJ9CiAgICAgRGVmYXVsdDogZW1wdHkuCgofCkZpbGU6IGdjY2ludC5pbmZvLCAgTm9kZTogUENIIFRhcmdldCwgIE5leHQ6IEMrKyBBQkksICBQcmV2OiBNSVBTIENvcHJvY2Vzc29ycywgIFVwOiBUYXJnZXQgTWFjcm9zCgoxNS4yNyBQYXJhbWV0ZXJzIGZvciBQcmVjb21waWxlZCBIZWFkZXIgVmFsaWRpdHkgQ2hlY2tpbmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgogLS0gVGFyZ2V0IEhvb2s6IHZvaWQgKlRBUkdFVF9HRVRfUENIX1ZBTElESVRZIChzaXplX3QgKlNaKQogICAgIFRoaXMgaG9vayByZXR1cm5zIHRoZSBkYXRhIG5lZWRlZCBieSAnVEFSR0VUX1BDSF9WQUxJRF9QJyBhbmQgc2V0cwogICAgICcqU1onIHRvIHRoZSBzaXplIG9mIHRoZSBkYXRhIGluIGJ5dGVzLgoKIC0tIFRhcmdldCBIb29rOiBjb25zdCBjaGFyICpUQVJHRVRfUENIX1ZBTElEX1AgKGNvbnN0IHZvaWQgKkRBVEEsCiAgICAgICAgICBzaXplX3QgU1opCiAgICAgVGhpcyBob29rIGNoZWNrcyB3aGV0aGVyIHRoZSBvcHRpb25zIHVzZWQgdG8gY3JlYXRlIGEgUENIIGZpbGUgYXJlCiAgICAgY29tcGF0aWJsZSB3aXRoIHRoZSBjdXJyZW50IHNldHRpbmdzLiAgSXQgcmV0dXJucyAnTlVMTCcgaWYgc28gYW5kCiAgICAgYSBzdWl0YWJsZSBlcnJvciBtZXNzYWdlIGlmIG5vdC4gIEVycm9yIG1lc3NhZ2VzIHdpbGwgYmUgcHJlc2VudGVkCiAgICAgdG8gdGhlIHVzZXIgYW5kIG11c3QgYmUgbG9jYWxpemVkIHVzaW5nICdfKE1TRyknLgoKICAgICBEQVRBIGlzIHRoZSBkYXRhIHRoYXQgd2FzIHJldHVybmVkIGJ5ICdUQVJHRVRfR0VUX1BDSF9WQUxJRElUWScKICAgICB3aGVuIHRoZSBQQ0ggZmlsZSB3YXMgY3JlYXRlZCBhbmQgU1ogaXMgdGhlIHNpemUgb2YgdGhhdCBkYXRhIGluCiAgICAgYnl0ZXMuICBJdCdzIHNhZmUgdG8gYXNzdW1lIHRoYXQgdGhlIGRhdGEgd2FzIGNyZWF0ZWQgYnkgdGhlIHNhbWUKICAgICB2ZXJzaW9uIG9mIHRoZSBjb21waWxlciwgc28gbm8gZm9ybWF0IGNoZWNraW5nIGlzIG5lZWRlZC4KCiAgICAgVGhlIGRlZmF1bHQgZGVmaW5pdGlvbiBvZiAnZGVmYXVsdF9wY2hfdmFsaWRfcCcgc2hvdWxkIGJlIHN1aXRhYmxlCiAgICAgZm9yIG1vc3QgdGFyZ2V0cy4KCiAtLSBUYXJnZXQgSG9vazogY29uc3QgY2hhciAqVEFSR0VUX0NIRUNLX1BDSF9UQVJHRVRfRkxBR1MgKGludAogICAgICAgICAgUENIX0ZMQUdTKQogICAgIElmIHRoaXMgaG9vayBpcyBub25udWxsLCB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZgogICAgICdUQVJHRVRfUENIX1ZBTElEX1AnIHdpbGwgdXNlIGl0IHRvIGNoZWNrIGZvciBjb21wYXRpYmxlIHZhbHVlcyBvZgogICAgICd0YXJnZXRfZmxhZ3MnLiAgUENIX0ZMQUdTIHNwZWNpZmllcyB0aGUgdmFsdWUgdGhhdCAndGFyZ2V0X2ZsYWdzJwogICAgIGhhZCB3aGVuIHRoZSBQQ0ggZmlsZSB3YXMgY3JlYXRlZC4gIFRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIHNhbWUgYXMKICAgICBmb3IgJ1RBUkdFVF9QQ0hfVkFMSURfUCcuCgofCkZpbGU6IGdjY2ludC5pbmZvLCAgTm9kZTogQysrIEFCSSwgIE5leHQ6IE1pc2MsICBQcmV2OiBQQ0ggVGFyZ2V0LCAgVXA6IFRhcmdldCBNYWNyb3MKCjE1LjI4IEMrKyBBQkkgcGFyYW1ldGVycwo9PT09PT09PT09PT09PT09PT09PT09PT0KCiAtLSBUYXJnZXQgSG9vazogdHJlZSBUQVJHRVRfQ1hYX0dVQVJEX1RZUEUgKHZvaWQpCiAgICAgRGVmaW5lIHRoaXMgaG9vayB0byBvdmVycmlkZSB0aGUgaW50ZWdlciB0eXBlIHVzZWQgZm9yIGd1YXJkCiAgICAgdmFyaWFibGVzLiAgVGhlc2UgYXJlIHVzZWQgdG8gaW1wbGVtZW50IG9uZS10aW1lIGNvbnN0cnVjdGlvbiBvZgogICAgIHN0YXRpYyBvYmplY3RzLiAgVGhlIGRlZmF1bHQgaXMgbG9uZ19sb25nX2ludGVnZXJfdHlwZV9ub2RlLgoKIC0tIFRhcmdldCBIb29rOiBib29sIFRBUkdFVF9DWFhfR1VBUkRfTUFTS19CSVQgKHZvaWQpCiAgICAgVGhpcyBob29rIGRldGVybWluZXMgaG93IGd1YXJkIHZhcmlhYmxlcyBhcmUgdXNlZC4gIEl0IHNob3VsZAogICAgIHJldHVybiAnZmFsc2UnICh0aGUgZGVmYXVsdCkgaWYgZmlyc3QgYnl0ZSBzaG91bGQgYmUgdXNlZC4gIEEKICAgICByZXR1cm4gdmFsdWUgb2YgJ3RydWUnIGluZGljYXRlcyB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0IHNob3VsZAogICAgIGJlIHVzZWQuCgogLS0gVGFyZ2V0IEhvb2s6IHRyZWUgVEFSR0VUX0NYWF9HRVRfQ09PS0lFX1NJWkUgKHRyZWUgVFlQRSkKICAgICBUaGlzIGhvb2sgcmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgY29va2llIHRvIHVzZSB3aGVuIGFsbG9jYXRpbmcgYW4KICAgICBhcnJheSB3aG9zZSBlbGVtZW50cyBoYXZlIHRoZSBpbmRpY2F0ZWQgVFlQRS4gIEFzc3VtZXMgdGhhdCBpdCBpcwogICAgIGFscmVhZHkga25vd24gdGhhdCBhIGNvb2tpZSBpcyBuZWVkZWQuICBUaGUgZGVmYXVsdCBpcyAnbWF4KHNpemVvZgogICAgIChzaXplX3QpLCBhbGlnbm9mKHR5cGUpKScsIGFzIGRlZmluZWQgaW4gc2VjdGlvbiAyLjcgb2YgdGhlCiAgICAgSUE2NC9HZW5lcmljIEMrKyBBQkkuCgogLS0gVGFyZ2V0IEhvb2s6IGJvb2wgVEFSR0VUX0NYWF9DT09LSUVfSEFTX1NJWkUgKHZvaWQpCiAgICAgVGhpcyBob29rIHNob3VsZCByZXR1cm4gJ3RydWUnIGlmIHRoZSBlbGVtZW50IHNpemUgc2hvdWxkIGJlIHN0b3JlZAogICAgIGluIGFycmF5IGNvb2tpZXMuICBUaGUgZGVmYXVsdCBpcyB0byByZXR1cm4gJ2ZhbHNlJy4KCiAtLSBUYXJnZXQgSG9vazogaW50IFRBUkdFVF9DWFhfSU1QT1JUX0VYUE9SVF9DTEFTUyAodHJlZSBUWVBFLCBpbnQKICAgICAgICAgIElNUE9SVF9FWFBPUlQpCiAgICAgSWYgZGVmaW5lZCBieSBhIGJhY2tlbmQgdGhpcyBob29rIGFsbG93cyB0aGUgZGVjaXNpb24gbWFkZSB0bwogICAgIGV4cG9ydCBjbGFzcyBUWVBFIHRvIGJlIG92ZXJydWxlZC4gIFVwb24gZW50cnkgSU1QT1JUX0VYUE9SVCB3aWxsCiAgICAgY29udGFpbiAxIGlmIHRoZSBjbGFzcyBpcyBnb2luZyB0byBiZSBleHBvcnRlZCwgLTEgaWYgaXQgaXMgZ29pbmcKICAgICB0byBiZSBpbXBvcnRlZCBhbmQgMCBvdGhlcndpc2UuICBUaGlzIGZ1bmN0aW9uIHNob3VsZCByZXR1cm4gdGhlCiAgICAgbW9kaWZpZWQgdmFsdWUgYW5kIHBlcmZvcm0gYW55IG90aGVyIGFjdGlvbnMgbmVjZXNzYXJ5IHRvIHN1cHBvcnQKICAgICB0aGUgYmFja2VuZCdzIHRhcmdldGVkIG9wZXJhdGluZyBzeXN0ZW0uCgogLS0gVGFyZ2V0IEhvb2s6IGJvb2wgVEFSR0VUX0NYWF9DRFRPUl9SRVRVUk5TX1RISVMgKHZvaWQpCiAgICAgVGhpcyBob29rIHNob3VsZCByZXR1cm4gJ3RydWUnIGlmIGNvbnN0cnVjdG9ycyBhbmQgZGVzdHJ1Y3RvcnMKICAgICByZXR1cm4gdGhlIGFkZHJlc3Mgb2YgdGhlIG9iamVjdCBjcmVhdGVkL2Rlc3Ryb3llZC4gIFRoZSBkZWZhdWx0IGlzCiAgICAgdG8gcmV0dXJuICdmYWxzZScuCgogLS0gVGFyZ2V0IEhvb2s6IGJvb2wgVEFSR0VUX0NYWF9LRVlfTUVUSE9EX01BWV9CRV9JTkxJTkUgKHZvaWQpCiAgICAgVGhpcyBob29rIHJldHVybnMgdHJ1ZSBpZiB0aGUga2V5IG1ldGhvZCBmb3IgYSBjbGFzcyAoaS5lLiwgdGhlCiAgICAgbWV0aG9kIHdoaWNoLCBpZiBkZWZpbmVkIGluIHRoZSBjdXJyZW50IHRyYW5zbGF0aW9uIHVuaXQsIGNhdXNlcwogICAgIHRoZSB2aXJ0dWFsIHRhYmxlIHRvIGJlIGVtaXR0ZWQpIG1heSBiZSBhbiBpbmxpbmUgZnVuY3Rpb24uICBVbmRlcgogICAgIHRoZSBzdGFuZGFyZCBJdGFuaXVtIEMrKyBBQkkgdGhlIGtleSBtZXRob2QgbWF5IGJlIGFuIGlubGluZQogICAgIGZ1bmN0aW9uIHNvIGxvbmcgYXMgdGhlIGZ1bmN0aW9uIGlzIG5vdCBkZWNsYXJlZCBpbmxpbmUgaW4gdGhlCiAgICAgY2xhc3MgZGVmaW5pdGlvbi4gIFVuZGVyIHNvbWUgdmFyaWFudHMgb2YgdGhlIEFCSSwgYW4gaW5saW5lCiAgICAgZnVuY3Rpb24gY2FuIG5ldmVyIGJlIHRoZSBrZXkgbWV0aG9kLiAgVGhlIGRlZmF1bHQgaXMgdG8gcmV0dXJuCiAgICAgJ3RydWUnLgoKIC0tIFRhcmdldCBIb29rOiB2b2lkIFRBUkdFVF9DWFhfREVURVJNSU5FX0NMQVNTX0RBVEFfVklTSUJJTElUWSAodHJlZQogICAgICAgICAgREVDTCkKICAgICBERUNMIGlzIGEgdmlydHVhbCB0YWJsZSwgdmlydHVhbCB0YWJsZSB0YWJsZSwgdHlwZWluZm8gb2JqZWN0LCBvcgogICAgIG90aGVyIHNpbWlsYXIgaW1wbGljaXQgY2xhc3MgZGF0YSBvYmplY3QgdGhhdCB3aWxsIGJlIGVtaXR0ZWQgd2l0aAogICAgIGV4dGVybmFsIGxpbmthZ2UgaW4gdGhpcyB0cmFuc2xhdGlvbiB1bml0LiAgTm8gRUxGIHZpc2liaWxpdHkgaGFzCiAgICAgYmVlbiBleHBsaWNpdGx5IHNwZWNpZmllZC4gIElmIHRoZSB0YXJnZXQgbmVlZHMgdG8gc3BlY2lmeSBhCiAgICAgdmlzaWJpbGl0eSBvdGhlciB0aGFuIHRoYXQgb2YgdGhlIGNvbnRhaW5pbmcgY2xhc3MsIHVzZSB0aGlzIGhvb2sKICAgICB0byBzZXQgJ0RFQ0xfVklTSUJJTElUWScgYW5kICdERUNMX1ZJU0lCSUxJVFlfU1BFQ0lGSUVEJy4KCiAtLSBUYXJnZXQgSG9vazogYm9vbCBUQVJHRVRfQ1hYX0NMQVNTX0RBVEFfQUxXQVlTX0NPTURBVCAodm9pZCkKICAgICBUaGlzIGhvb2sgcmV0dXJucyB0cnVlICh0aGUgZGVmYXVsdCkgaWYgdmlydHVhbCB0YWJsZXMgYW5kIG90aGVyCiAgICAgc2ltaWxhciBpbXBsaWNpdCBjbGFzcyBkYXRhIG9iamVjdHMgYXJlIGFsd2F5cyBDT01EQVQgaWYgdGhleSBoYXZlCiAgICAgZXh0ZXJuYWwgbGlua2FnZS4gIElmIHRoaXMgaG9vayByZXR1cm5zIGZhbHNlLCB0aGVuIGNsYXNzIGRhdGEgZm9yCiAgICAgY2xhc3NlcyB3aG9zZSB2aXJ0dWFsIHRhYmxlIHdpbGwgYmUgZW1pdHRlZCBpbiBvbmx5IG9uZSB0cmFuc2xhdGlvbgogICAgIHVuaXQgd2lsbCBub3QgYmUgQ09NREFULgoKIC0tIFRhcmdldCBIb29rOiBib29sIFRBUkdFVF9DWFhfTElCUkFSWV9SVFRJX0NPTURBVCAodm9pZCkKICAgICBUaGlzIGhvb2sgcmV0dXJucyB0cnVlICh0aGUgZGVmYXVsdCkgaWYgdGhlIFJUVEkgaW5mb3JtYXRpb24gZm9yCiAgICAgdGhlIGJhc2ljIHR5cGVzIHdoaWNoIGlzIGRlZmluZWQgaW4gdGhlIEMrKyBydW50aW1lIHNob3VsZCBhbHdheXMKICAgICBiZSBDT01EQVQsIGZhbHNlIGlmIGl0IHNob3VsZCBub3QgYmUgQ09NREFULgoKIC0tIFRhcmdldCBIb29rOiBib29sIFRBUkdFVF9DWFhfVVNFX0FFQUJJX0FURVhJVCAodm9pZCkKICAgICBUaGlzIGhvb2sgcmV0dXJucyB0cnVlIGlmICdfX2FlYWJpX2F0ZXhpdCcgKGFzIGRlZmluZWQgYnkgdGhlIEFSTQogICAgIEVBQkkpIHNob3VsZCBiZSB1c2VkIHRvIHJlZ2lzdGVyIHN0YXRpYyBkZXN0cnVjdG9ycyB3aGVuCiAgICAgJy1mdXNlLWN4YS1hdGV4aXQnIGlzIGluIGVmZmVjdC4gIFRoZSBkZWZhdWx0IGlzIHRvIHJldHVybiBmYWxzZSB0bwogICAgIHVzZSAnX19jeGFfYXRleGl0Jy4KCiAtLSBUYXJnZXQgSG9vazogYm9vbCBUQVJHRVRfQ1hYX1VTRV9BVEVYSVRfRk9SX0NYQV9BVEVYSVQgKHZvaWQpCiAgICAgVGhpcyBob29rIHJldHVybnMgdHJ1ZSBpZiB0aGUgdGFyZ2V0ICdhdGV4aXQnIGZ1bmN0aW9uIGNhbiBiZSB1c2VkCiAgICAgaW4gdGhlIHNhbWUgbWFubmVyIGFzICdfX2N4YV9hdGV4aXQnIHRvIHJlZ2lzdGVyIEMrKyBzdGF0aWMKICAgICBkZXN0cnVjdG9ycy4gIFRoaXMgcmVxdWlyZXMgdGhhdCAnYXRleGl0Jy1yZWdpc3RlcmVkIGZ1bmN0aW9ucyBpbgogICAgIHNoYXJlZCBsaWJyYXJpZXMgYXJlIHJ1biBpbiB0aGUgY29ycmVjdCBvcmRlciB3aGVuIHRoZSBsaWJyYXJpZXMKICAgICBhcmUgdW5sb2FkZWQuICBUaGUgZGVmYXVsdCBpcyB0byByZXR1cm4gZmFsc2UuCgogLS0gVGFyZ2V0IEhvb2s6IHZvaWQgVEFSR0VUX0NYWF9BREpVU1RfQ0xBU1NfQVRfREVGSU5JVElPTiAodHJlZSBUWVBFKQogICAgIFRZUEUgaXMgYSBDKysgY2xhc3MgKGkuZS4sIFJFQ09SRF9UWVBFIG9yIFVOSU9OX1RZUEUpIHRoYXQgaGFzIGp1c3QKICAgICBiZWVuIGRlZmluZWQuICBVc2UgdGhpcyBob29rIHRvIG1ha2UgYWRqdXN0bWVudHMgdG8gdGhlIGNsYXNzIChlZywKICAgICB0d2VhayB2aXNpYmlsaXR5IG9yIHBlcmZvcm0gYW55IG90aGVyIHJlcXVpcmVkIHRhcmdldAogICAgIG1vZGlmaWNhdGlvbnMpLgoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IE1pc2MsICBQcmV2OiBDKysgQUJJLCAgVXA6IFRhcmdldCBNYWNyb3MKCjE1LjI5IE1pc2NlbGxhbmVvdXMgUGFyYW1ldGVycwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCkhlcmUgYXJlIHNldmVyYWwgbWlzY2VsbGFuZW91cyBwYXJhbWV0ZXJzLgoKIC0tIE1hY3JvOiBIQVNfTE9OR19DT05EX0JSQU5DSAogICAgIERlZmluZSB0aGlzIGJvb2xlYW4gbWFjcm8gdG8gaW5kaWNhdGUgd2hldGhlciBvciBub3QgeW91cgogICAgIGFyY2hpdGVjdHVyZSBoYXMgY29uZGl0aW9uYWwgYnJhbmNoZXMgdGhhdCBjYW4gc3BhbiBhbGwgb2YgbWVtb3J5LgogICAgIEl0IGlzIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBhbiBvcHRpbWl6YXRpb24gdGhhdCBwYXJ0aXRpb25zIGhvdAogICAgIGFuZCBjb2xkIGJhc2ljIGJsb2NrcyBpbnRvIHNlcGFyYXRlIHNlY3Rpb25zIG9mIHRoZSBleGVjdXRhYmxlLiAgSWYKICAgICB0aGlzIG1hY3JvIGlzIHNldCB0byBmYWxzZSwgZ2NjIHdpbGwgY29udmVydCBhbnkgY29uZGl0aW9uYWwKICAgICBicmFuY2hlcyB0aGF0IGF0dGVtcHQgdG8gY3Jvc3MgYmV0d2VlbiBzZWN0aW9ucyBpbnRvIHVuY29uZGl0aW9uYWwKICAgICBicmFuY2hlcyBvciBpbmRpcmVjdCBqdW1wcy4KCiAtLSBNYWNybzogSEFTX0xPTkdfVU5DT05EX0JSQU5DSAogICAgIERlZmluZSB0aGlzIGJvb2xlYW4gbWFjcm8gdG8gaW5kaWNhdGUgd2hldGhlciBvciBub3QgeW91cgogICAgIGFyY2hpdGVjdHVyZSBoYXMgdW5jb25kaXRpb25hbCBicmFuY2hlcyB0aGF0IGNhbiBzcGFuIGFsbCBvZgogICAgIG1lbW9yeS4gIEl0IGlzIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBhbiBvcHRpbWl6YXRpb24gdGhhdAogICAgIHBhcnRpdGlvbnMgaG90IGFuZCBjb2xkIGJhc2ljIGJsb2NrcyBpbnRvIHNlcGFyYXRlIHNlY3Rpb25zIG9mIHRoZQogICAgIGV4ZWN1dGFibGUuICBJZiB0aGlzIG1hY3JvIGlzIHNldCB0byBmYWxzZSwgZ2NjIHdpbGwgY29udmVydCBhbnkKICAgICB1bmNvbmRpdGlvbmFsIGJyYW5jaGVzIHRoYXQgYXR0ZW1wdCB0byBjcm9zcyBiZXR3ZWVuIHNlY3Rpb25zIGludG8KICAgICBpbmRpcmVjdCBqdW1wcy4KCiAtLSBNYWNybzogQ0FTRV9WRUNUT1JfTU9ERQogICAgIEFuIGFsaWFzIGZvciBhIG1hY2hpbmUgbW9kZSBuYW1lLiAgVGhpcyBpcyB0aGUgbWFjaGluZSBtb2RlIHRoYXQKICAgICBlbGVtZW50cyBvZiBhIGp1bXAtdGFibGUgc2hvdWxkIGhhdmUuCgogLS0gTWFjcm86IENBU0VfVkVDVE9SX1NIT1JURU5fTU9ERSAoTUlOX09GRlNFVCwgTUFYX09GRlNFVCwgQk9EWSkKICAgICBPcHRpb25hbDogcmV0dXJuIHRoZSBwcmVmZXJyZWQgbW9kZSBmb3IgYW4gJ2FkZHJfZGlmZl92ZWMnIHdoZW4gdGhlCiAgICAgbWluaW11bSBhbmQgbWF4aW11bSBvZmZzZXQgYXJlIGtub3duLiAgSWYgeW91IGRlZmluZSB0aGlzLCBpdAogICAgIGVuYWJsZXMgZXh0cmEgY29kZSBpbiBicmFuY2ggc2hvcnRlbmluZyB0byBkZWFsIHdpdGgKICAgICAnYWRkcl9kaWZmX3ZlYycuICBUbyBtYWtlIHRoaXMgd29yaywgeW91IGFsc28gaGF2ZSB0byBkZWZpbmUKICAgICAnSU5TTl9BTElHTicgYW5kIG1ha2UgdGhlIGFsaWdubWVudCBmb3IgJ2FkZHJfZGlmZl92ZWMnIGV4cGxpY2l0LgogICAgIFRoZSBCT0RZIGFyZ3VtZW50IGlzIHByb3ZpZGVkIHNvIHRoYXQgdGhlIG9mZnNldF91bnNpZ25lZCBhbmQgc2NhbGUKICAgICBmbGFncyBjYW4gYmUgdXBkYXRlZC4KCiAtLSBNYWNybzogQ0FTRV9WRUNUT1JfUENfUkVMQVRJVkUKICAgICBEZWZpbmUgdGhpcyBtYWNybyB0byBiZSBhIEMgZXhwcmVzc2lvbiB0byBpbmRpY2F0ZSB3aGVuIGp1bXAtdGFibGVzCiAgICAgc2hvdWxkIGNvbnRhaW4gcmVsYXRpdmUgYWRkcmVzc2VzLiAgWW91IG5lZWQgbm90IGRlZmluZSB0aGlzIG1hY3JvCiAgICAgaWYganVtcC10YWJsZXMgbmV2ZXIgY29udGFpbiByZWxhdGl2ZSBhZGRyZXNzZXMsIG9yIGp1bXAtdGFibGVzCiAgICAgc2hvdWxkIGNvbnRhaW4gcmVsYXRpdmUgYWRkcmVzc2VzIG9ubHkgd2hlbiAnLWZQSUMnIG9yICctZlBJQycgaXMKICAgICBpbiBlZmZlY3QuCgogLS0gTWFjcm86IENBU0VfVkFMVUVTX1RIUkVTSE9MRAogICAgIERlZmluZSB0aGlzIHRvIGJlIHRoZSBzbWFsbGVzdCBudW1iZXIgb2YgZGlmZmVyZW50IHZhbHVlcyBmb3Igd2hpY2gKICAgICBpdCBpcyBiZXN0IHRvIHVzZSBhIGp1bXAtdGFibGUgaW5zdGVhZCBvZiBhIHRyZWUgb2YgY29uZGl0aW9uYWwKICAgICBicmFuY2hlcy4gIFRoZSBkZWZhdWx0IGlzIGZvdXIgZm9yIG1hY2hpbmVzIHdpdGggYSAnY2FzZXNpJwogICAgIGluc3RydWN0aW9uIGFuZCBmaXZlIG90aGVyd2lzZS4gIFRoaXMgaXMgYmVzdCBmb3IgbW9zdCBtYWNoaW5lcy4KCiAtLSBNYWNybzogQ0FTRV9VU0VfQklUX1RFU1RTCiAgICAgRGVmaW5lIHRoaXMgbWFjcm8gdG8gYmUgYSBDIGV4cHJlc3Npb24gdG8gaW5kaWNhdGUgd2hldGhlciBDIHN3aXRjaAogICAgIHN0YXRlbWVudHMgbWF5IGJlIGltcGxlbWVudGVkIGJ5IGEgc2VxdWVuY2Ugb2YgYml0IHRlc3RzLiAgVGhpcyBpcwogICAgIGFkdmFudGFnZW91cyBvbiBwcm9jZXNzb3JzIHRoYXQgY2FuIGVmZmljaWVudGx5IGltcGxlbWVudCBsZWZ0CiAgICAgc2hpZnQgb2YgMSBieSB0aGUgbnVtYmVyIG9mIGJpdHMgaGVsZCBpbiBhIHJlZ2lzdGVyLCBidXQKICAgICBpbmFwcHJvcHJpYXRlIG9uIHRhcmdldHMgdGhhdCB3b3VsZCByZXF1aXJlIGEgbG9vcC4gIEJ5IGRlZmF1bHQsCiAgICAgdGhpcyBtYWNybyByZXR1cm5zICd0cnVlJyBpZiB0aGUgdGFyZ2V0IGRlZmluZXMgYW4gJ2FzaGxzaTMnCiAgICAgcGF0dGVybiwgYW5kICdmYWxzZScgb3RoZXJ3aXNlLgoKIC0tIE1hY3JvOiBXT1JEX1JFR0lTVEVSX09QRVJBVElPTlMKICAgICBEZWZpbmUgdGhpcyBtYWNybyBpZiBvcGVyYXRpb25zIGJldHdlZW4gcmVnaXN0ZXJzIHdpdGggaW50ZWdyYWwKICAgICBtb2RlIHNtYWxsZXIgdGhhbiBhIHdvcmQgYXJlIGFsd2F5cyBwZXJmb3JtZWQgb24gdGhlIGVudGlyZQogICAgIHJlZ2lzdGVyLiAgTW9zdCBSSVNDIG1hY2hpbmVzIGhhdmUgdGhpcyBwcm9wZXJ0eSBhbmQgbW9zdCBDSVNDCiAgICAgbWFjaGluZXMgZG8gbm90LgoKIC0tIE1hY3JvOiBMT0FEX0VYVEVORF9PUCAoTUVNX01PREUpCiAgICAgRGVmaW5lIHRoaXMgbWFjcm8gdG8gYmUgYSBDIGV4cHJlc3Npb24gaW5kaWNhdGluZyB3aGVuIGluc25zIHRoYXQKICAgICByZWFkIG1lbW9yeSBpbiBNRU1fTU9ERSwgYW4gaW50ZWdyYWwgbW9kZSBuYXJyb3dlciB0aGFuIGEgd29yZCwgc2V0CiAgICAgdGhlIGJpdHMgb3V0c2lkZSBvZiBNRU1fTU9ERSB0byBiZSBlaXRoZXIgdGhlIHNpZ24tZXh0ZW5zaW9uIG9yIHRoZQogICAgIHplcm8tZXh0ZW5zaW9uIG9mIHRoZSBkYXRhIHJlYWQuICBSZXR1cm4gJ1NJR05fRVhURU5EJyBmb3IgdmFsdWVzCiAgICAgb2YgTUVNX01PREUgZm9yIHdoaWNoIHRoZSBpbnNuIHNpZ24tZXh0ZW5kcywgJ1pFUk9fRVhURU5EJyBmb3IKICAgICB3aGljaCBpdCB6ZXJvLWV4dGVuZHMsIGFuZCAnVU5LTk9XTicgZm9yIG90aGVyIG1vZGVzLgoKICAgICBUaGlzIG1hY3JvIGlzIG5vdCBjYWxsZWQgd2l0aCBNRU1fTU9ERSBub24taW50ZWdyYWwgb3Igd2l0aCBhIHdpZHRoCiAgICAgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICdCSVRTX1BFUl9XT1JEJywgc28geW91IG1heSByZXR1cm4gYW55CiAgICAgdmFsdWUgaW4gdGhpcyBjYXNlLiAgRG8gbm90IGRlZmluZSB0aGlzIG1hY3JvIGlmIGl0IHdvdWxkIGFsd2F5cwogICAgIHJldHVybiAnVU5LTk9XTicuICBPbiBtYWNoaW5lcyB3aGVyZSB0aGlzIG1hY3JvIGlzIGRlZmluZWQsIHlvdQogICAgIHdpbGwgbm9ybWFsbHkgZGVmaW5lIGl0IGFzIHRoZSBjb25zdGFudCAnU0lHTl9FWFRFTkQnIG9yCiAgICAgJ1pFUk9fRVhURU5EJy4KCiAgICAgWW91IG1heSByZXR1cm4gYSBub24tJ1VOS05PV04nIHZhbHVlIGV2ZW4gaWYgZm9yIHNvbWUgaGFyZAogICAgIHJlZ2lzdGVycyB0aGUgc2lnbiBleHRlbnNpb24gaXMgbm90IHBlcmZvcm1lZCwgaWYgZm9yIHRoZQogICAgICdSRUdOT19SRUdfQ0xBU1MnIG9mIHRoZXNlIGhhcmQgcmVnaXN0ZXJzCiAgICAgJ0NBTk5PVF9DSEFOR0VfTU9ERV9DTEFTUycgcmV0dXJucyBub256ZXJvIHdoZW4gdGhlIEZST00gbW9kZSBpcwogICAgIE1FTV9NT0RFIGFuZCB0aGUgVE8gbW9kZSBpcyBhbnkgaW50ZWdyYWwgbW9kZSBsYXJnZXIgdGhhbiB0aGlzIGJ1dAogICAgIG5vdCBsYXJnZXIgdGhhbiAnd29yZF9tb2RlJy4KCiAgICAgWW91IG11c3QgcmV0dXJuICdVTktOT1dOJyBpZiBmb3Igc29tZSBoYXJkIHJlZ2lzdGVycyB0aGF0IGFsbG93CiAgICAgdGhpcyBtb2RlLCAnQ0FOTk9UX0NIQU5HRV9NT0RFX0NMQVNTJyBzYXlzIHRoYXQgdGhleSBjYW5ub3QgY2hhbmdlCiAgICAgdG8gJ3dvcmRfbW9kZScsIGJ1dCB0aGF0IHRoZXkgY2FuIGNoYW5nZSB0byBhbm90aGVyIGludGVncmFsIG1vZGUKICAgICB0aGF0IGlzIGxhcmdlciB0aGVuIE1FTV9NT0RFIGJ1dCBzdGlsbCBzbWFsbGVyIHRoYW4gJ3dvcmRfbW9kZScuCgogLS0gTWFjcm86IFNIT1JUX0lNTUVESUFURVNfU0lHTl9FWFRFTkQKICAgICBEZWZpbmUgdGhpcyBtYWNybyBpZiBsb2FkaW5nIHNob3J0IGltbWVkaWF0ZSB2YWx1ZXMgaW50byByZWdpc3RlcnMKICAgICBzaWduIGV4dGVuZHMuCgogLS0gTWFjcm86IEZJWFVOU19UUlVOQ19MSUtFX0ZJWF9UUlVOQwogICAgIERlZmluZSB0aGlzIG1hY3JvIGlmIHRoZSBzYW1lIGluc3RydWN0aW9ucyB0aGF0IGNvbnZlcnQgYSBmbG9hdGluZwogICAgIHBvaW50IG51bWJlciB0byBhIHNpZ25lZCBmaXhlZCBwb2ludCBudW1iZXIgYWxzbyBjb252ZXJ0IHZhbGlkbHkgdG8KICAgICBhbiB1bnNpZ25lZCBvbmUuCgogLS0gVGFyZ2V0IEhvb2s6IGludCBUQVJHRVRfTUlOX0RJVklTSU9OU19GT1JfUkVDSVBfTVVMIChlbnVtCiAgICAgICAgICBtYWNoaW5lX21vZGUgTU9ERSkKICAgICBXaGVuICctZmZhc3QtbWF0aCcgaXMgaW4gZWZmZWN0LCBHQ0MgdHJpZXMgdG8gb3B0aW1pemUgZGl2aXNpb25zIGJ5CiAgICAgdGhlIHNhbWUgZGl2aXNvciwgYnkgdHVybmluZyB0aGVtIGludG8gbXVsdGlwbGljYXRpb25zIGJ5IHRoZQogICAgIHJlY2lwcm9jYWwuICBUaGlzIHRhcmdldCBob29rIHNwZWNpZmllcyB0aGUgbWluaW11bSBudW1iZXIgb2YKICAgICBkaXZpc2lvbnMgdGhhdCBzaG91bGQgYmUgdGhlcmUgZm9yIEdDQyB0byBwZXJmb3JtIHRoZSBvcHRpbWl6YXRpb24KICAgICBmb3IgYSB2YXJpYWJsZSBvZiBtb2RlIE1PREUuICBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIDMKICAgICBpZiB0aGUgbWFjaGluZSBoYXMgYW4gaW5zdHJ1Y3Rpb24gZm9yIHRoZSBkaXZpc2lvbiwgYW5kIDIgaWYgaXQKICAgICBkb2VzIG5vdC4KCiAtLSBNYWNybzogTU9WRV9NQVgKICAgICBUaGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdGhhdCBhIHNpbmdsZSBpbnN0cnVjdGlvbiBjYW4gbW92ZQogICAgIHF1aWNrbHkgYmV0d2VlbiBtZW1vcnkgYW5kIHJlZ2lzdGVycyBvciBiZXR3ZWVuIHR3byBtZW1vcnkKICAgICBsb2NhdGlvbnMuCgogLS0gTWFjcm86IE1BWF9NT1ZFX01BWAogICAgIFRoZSBtYXhpbXVtIG51bWJlciBvZiBieXRlcyB0aGF0IGEgc2luZ2xlIGluc3RydWN0aW9uIGNhbiBtb3ZlCiAgICAgcXVpY2tseSBiZXR3ZWVuIG1lbW9yeSBhbmQgcmVnaXN0ZXJzIG9yIGJldHdlZW4gdHdvIG1lbW9yeQogICAgIGxvY2F0aW9ucy4gIElmIHRoaXMgaXMgdW5kZWZpbmVkLCB0aGUgZGVmYXVsdCBpcyAnTU9WRV9NQVgnLgogICAgIE90aGVyd2lzZSwgaXQgaXMgdGhlIGNvbnN0YW50IHZhbHVlIHRoYXQgaXMgdGhlIGxhcmdlc3QgdmFsdWUgdGhhdAogICAgICdNT1ZFX01BWCcgY2FuIGhhdmUgYXQgcnVuLXRpbWUuCgogLS0gTWFjcm86IFNISUZUX0NPVU5UX1RSVU5DQVRFRAogICAgIEEgQyBleHByZXNzaW9uIHRoYXQgaXMgbm9uemVybyBpZiBvbiB0aGlzIG1hY2hpbmUgdGhlIG51bWJlciBvZgogICAgIGJpdHMgYWN0dWFsbHkgdXNlZCBmb3IgdGhlIGNvdW50IG9mIGEgc2hpZnQgb3BlcmF0aW9uIGlzIGVxdWFsIHRvCiAgICAgdGhlIG51bWJlciBvZiBiaXRzIG5lZWRlZCB0byByZXByZXNlbnQgdGhlIHNpemUgb2YgdGhlIG9iamVjdCBiZWluZwogICAgIHNoaWZ0ZWQuICBXaGVuIHRoaXMgbWFjcm8gaXMgbm9uemVybywgdGhlIGNvbXBpbGVyIHdpbGwgYXNzdW1lIHRoYXQKICAgICBpdCBpcyBzYWZlIHRvIG9taXQgYSBzaWduLWV4dGVuZCwgemVyby1leHRlbmQsIGFuZCBjZXJ0YWluIGJpdHdpc2UKICAgICAnYW5kJyBpbnN0cnVjdGlvbnMgdGhhdCB0cnVuY2F0ZXMgdGhlIGNvdW50IG9mIGEgc2hpZnQgb3BlcmF0aW9uLgogICAgIE9uIG1hY2hpbmVzIHRoYXQgaGF2ZSBpbnN0cnVjdGlvbnMgdGhhdCBhY3Qgb24gYml0LWZpZWxkcyBhdAogICAgIHZhcmlhYmxlIHBvc2l0aW9ucywgd2hpY2ggbWF5IGluY2x1ZGUgJ2JpdCB0ZXN0JyBpbnN0cnVjdGlvbnMsIGEKICAgICBub256ZXJvICdTSElGVF9DT1VOVF9UUlVOQ0FURUQnIGFsc28gZW5hYmxlcyBkZWxldGlvbiBvZgogICAgIHRydW5jYXRpb25zIG9mIHRoZSB2YWx1ZXMgdGhhdCBzZXJ2ZSBhcyBhcmd1bWVudHMgdG8gYml0LWZpZWxkCiAgICAgaW5zdHJ1Y3Rpb25zLgoKICAgICBJZiBib3RoIHR5cGVzIG9mIGluc3RydWN0aW9ucyB0cnVuY2F0ZSB0aGUgY291bnQgKGZvciBzaGlmdHMpIGFuZAogICAgIHBvc2l0aW9uIChmb3IgYml0LWZpZWxkIG9wZXJhdGlvbnMpLCBvciBpZiBubyB2YXJpYWJsZS1wb3NpdGlvbgogICAgIGJpdC1maWVsZCBpbnN0cnVjdGlvbnMgZXhpc3QsIHlvdSBzaG91bGQgZGVmaW5lIHRoaXMgbWFjcm8uCgogICAgIEhvd2V2ZXIsIG9uIHNvbWUgbWFjaGluZXMsIHN1Y2ggYXMgdGhlIDgwMzg2IGFuZCB0aGUgNjgweDAsCiAgICAgdHJ1bmNhdGlvbiBvbmx5IGFwcGxpZXMgdG8gc2hpZnQgb3BlcmF0aW9ucyBhbmQgbm90IHRoZSAocmVhbCBvcgogICAgIHByZXRlbmRlZCkgYml0LWZpZWxkIG9wZXJhdGlvbnMuICBEZWZpbmUgJ1NISUZUX0NPVU5UX1RSVU5DQVRFRCcgdG8KICAgICBiZSB6ZXJvIG9uIHN1Y2ggbWFjaGluZXMuICBJbnN0ZWFkLCBhZGQgcGF0dGVybnMgdG8gdGhlICdtZCcgZmlsZQogICAgIHRoYXQgaW5jbHVkZSB0aGUgaW1wbGllZCB0cnVuY2F0aW9uIG9mIHRoZSBzaGlmdCBpbnN0cnVjdGlvbnMuCgogICAgIFlvdSBuZWVkIG5vdCBkZWZpbmUgdGhpcyBtYWNybyBpZiBpdCB3b3VsZCBhbHdheXMgaGF2ZSB0aGUgdmFsdWUgb2YKICAgICB6ZXJvLgoKIC0tIFRhcmdldCBIb29rOiBpbnQgVEFSR0VUX1NISUZUX1RSVU5DQVRJT05fTUFTSyAoZW51bSBtYWNoaW5lX21vZGUKICAgICAgICAgIE1PREUpCiAgICAgVGhpcyBmdW5jdGlvbiBkZXNjcmliZXMgaG93IHRoZSBzdGFuZGFyZCBzaGlmdCBwYXR0ZXJucyBmb3IgTU9ERQogICAgIGRlYWwgd2l0aCBzaGlmdHMgYnkgbmVnYXRpdmUgYW1vdW50cyBvciBieSBtb3JlIHRoYW4gdGhlIHdpZHRoIG9mCiAgICAgdGhlIG1vZGUuICAqTm90ZSBzaGlmdCBwYXR0ZXJuczo6LgoKICAgICBPbiBtYW55IG1hY2hpbmVzLCB0aGUgc2hpZnQgcGF0dGVybnMgd2lsbCBhcHBseSBhIG1hc2sgTSB0byB0aGUKICAgICBzaGlmdCBjb3VudCwgbWVhbmluZyB0aGF0IGEgZml4ZWQtd2lkdGggc2hpZnQgb2YgWCBieSBZIGlzCiAgICAgZXF1aXZhbGVudCB0byBhbiBhcmJpdHJhcnktd2lkdGggc2hpZnQgb2YgWCBieSBZICYgTS4gIElmIHRoaXMgaXMKICAgICB0cnVlIGZvciBtb2RlIE1PREUsIHRoZSBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIE0sIG90aGVyd2lzZSBpdAogICAgIHNob3VsZCByZXR1cm4gMC4gIEEgcmV0dXJuIHZhbHVlIG9mIDAgaW5kaWNhdGVzIHRoYXQgbm8gcGFydGljdWxhcgogICAgIGJlaGF2aW9yIGlzIGd1YXJhbnRlZWQuCgogICAgIE5vdGUgdGhhdCwgdW5saWtlICdTSElGVF9DT1VOVF9UUlVOQ0FURUQnLCB0aGlzIGZ1bmN0aW9uIGRvZXMgX25vdF8KICAgICBhcHBseSB0byBnZW5lcmFsIHNoaWZ0IHJ0eGVzOyBpdCBhcHBsaWVzIG9ubHkgdG8gaW5zdHJ1Y3Rpb25zIHRoYXQKICAgICBhcmUgZ2VuZXJhdGVkIGJ5IHRoZSBuYW1lZCBzaGlmdCBwYXR0ZXJucy4KCiAgICAgVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBmdW5jdGlvbiByZXR1cm5zCiAgICAgJ0dFVF9NT0RFX0JJVFNJWkUgKE1PREUpIC0gMScgaWYgJ1NISUZUX0NPVU5UX1RSVU5DQVRFRCcgYW5kIDAKICAgICBvdGhlcndpc2UuICBUaGlzIGRlZmluaXRpb24gaXMgYWx3YXlzIHNhZmUsIGJ1dCBpZgogICAgICdTSElGVF9DT1VOVF9UUlVOQ0FURUQnIGlzIGZhbHNlLCBhbmQgc29tZSBzaGlmdCBwYXR0ZXJucwogICAgIG5ldmVydGhlbGVzcyB0cnVuY2F0ZSB0aGUgc2hpZnQgY291bnQsIHlvdSBtYXkgZ2V0IGJldHRlciBjb2RlIGJ5CiAgICAgb3ZlcnJpZGluZyBpdC4KCiAtLSBNYWNybzogVFJVTFlfTk9PUF9UUlVOQ0FUSU9OIChPVVRQUkVDLCBJTlBSRUMpCiAgICAgQSBDIGV4cHJlc3Npb24gd2hpY2ggaXMgbm9uemVybyBpZiBvbiB0aGlzIG1hY2hpbmUgaXQgaXMgc2FmZSB0bwogICAgICJjb252ZXJ0IiBhbiBpbnRlZ2VyIG9mIElOUFJFQyBiaXRzIHRvIG9uZSBvZiBPVVRQUkVDIGJpdHMgKHdoZXJlCiAgICAgT1VUUFJFQyBpcyBzbWFsbGVyIHRoYW4gSU5QUkVDKSBieSBtZXJlbHkgb3BlcmF0aW5nIG9uIGl0IGFzIGlmIGl0CiAgICAgaGFkIG9ubHkgT1VUUFJFQyBiaXRzLgoKICAgICBPbiBtYW55IG1hY2hpbmVzLCB0aGlzIGV4cHJlc3Npb24gY2FuIGJlIDEuCgogICAgIFdoZW4gJ1RSVUxZX05PT1BfVFJVTkNBVElPTicgcmV0dXJucyAxIGZvciBhIHBhaXIgb2Ygc2l6ZXMgZm9yCiAgICAgbW9kZXMgZm9yIHdoaWNoICdNT0RFU19USUVBQkxFX1AnIGlzIDAsIHN1Ym9wdGltYWwgY29kZSBjYW4gcmVzdWx0LgogICAgIElmIHRoaXMgaXMgdGhlIGNhc2UsIG1ha2luZyAnVFJVTFlfTk9PUF9UUlVOQ0FUSU9OJyByZXR1cm4gMCBpbgogICAgIHN1Y2ggY2FzZXMgbWF5IGltcHJvdmUgdGhpbmdzLgoKIC0tIFRhcmdldCBIb29rOiBpbnQgVEFSR0VUX01PREVfUkVQX0VYVEVOREVEIChlbnVtIG1hY2hpbmVfbW9kZSBNT0RFLAogICAgICAgICAgZW51bSBtYWNoaW5lX21vZGUgUkVQX01PREUpCiAgICAgVGhlIHJlcHJlc2VudGF0aW9uIG9mIGFuIGludGVncmFsIG1vZGUgY2FuIGJlIHN1Y2ggdGhhdCB0aGUgdmFsdWVzCiAgICAgYXJlIGFsd2F5cyBleHRlbmRlZCB0byBhIHdpZGVyIGludGVncmFsIG1vZGUuICBSZXR1cm4gJ1NJR05fRVhURU5EJwogICAgIGlmIHZhbHVlcyBvZiBNT0RFIGFyZSByZXByZXNlbnRlZCBpbiBzaWduLWV4dGVuZGVkIGZvcm0gdG8KICAgICBSRVBfTU9ERS4gIFJldHVybiAnVU5LTk9XTicgb3RoZXJ3aXNlLiAgKEN1cnJlbnRseSwgbm9uZSBvZiB0aGUKICAgICB0YXJnZXRzIHVzZSB6ZXJvLWV4dGVuZGVkIHJlcHJlc2VudGF0aW9uIHRoaXMgd2F5IHNvIHVubGlrZQogICAgICdMT0FEX0VYVEVORF9PUCcsICdUQVJHRVRfTU9ERV9SRVBfRVhURU5ERUQnIGlzIGV4cGVjdGVkIHRvIHJldHVybgogICAgIGVpdGhlciAnU0lHTl9FWFRFTkQnIG9yICdVTktOT1dOJy4gIEFsc28gbm8gdGFyZ2V0IGV4dGVuZHMgTU9ERSB0bwogICAgIE1PREVfUkVQIHNvIHRoYXQgTU9ERV9SRVAgaXMgbm90IHRoZSBuZXh0IHdpZGVzdCBpbnRlZ3JhbCBtb2RlIGFuZAogICAgIGN1cnJlbnRseSB3ZSB0YWtlIGFkdmFudGFnZSBvZiB0aGlzIGZhY3QuKQoKICAgICBTaW1pbGFybHkgdG8gJ0xPQURfRVhURU5EX09QJyB5b3UgbWF5IHJldHVybiBhIG5vbi0nVU5LTk9XTicgdmFsdWUKICAgICBldmVuIGlmIHRoZSBleHRlbnNpb24gaXMgbm90IHBlcmZvcm1lZCBvbiBjZXJ0YWluIGhhcmQgcmVnaXN0ZXJzIGFzCiAgICAgbG9uZyBhcyBmb3IgdGhlICdSRUdOT19SRUdfQ0xBU1MnIG9mIHRoZXNlIGhhcmQgcmVnaXN0ZXJzCiAgICAgJ0NBTk5PVF9DSEFOR0VfTU9ERV9DTEFTUycgcmV0dXJucyBub256ZXJvLgoKICAgICBOb3RlIHRoYXQgJ1RBUkdFVF9NT0RFX1JFUF9FWFRFTkRFRCcgYW5kICdMT0FEX0VYVEVORF9PUCcgZGVzY3JpYmUKICAgICB0d28gcmVsYXRlZCBwcm9wZXJ0aWVzLiAgSWYgeW91IGRlZmluZSAnVEFSR0VUX01PREVfUkVQX0VYVEVOREVECiAgICAgKG1vZGUsIHdvcmRfbW9kZSknIHlvdSBwcm9iYWJseSBhbHNvIHdhbnQgdG8gZGVmaW5lICdMT0FEX0VYVEVORF9PUAogICAgIChtb2RlKScgdG8gcmV0dXJuIHRoZSBzYW1lIHR5cGUgb2YgZXh0ZW5zaW9uLgoKICAgICBJbiBvcmRlciB0byBlbmZvcmNlIHRoZSByZXByZXNlbnRhdGlvbiBvZiAnbW9kZScsCiAgICAgJ1RSVUxZX05PT1BfVFJVTkNBVElPTicgc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIHRydW5jYXRpbmcgdG8KICAgICAnbW9kZScuCgogLS0gTWFjcm86IFNUT1JFX0ZMQUdfVkFMVUUKICAgICBBIEMgZXhwcmVzc2lvbiBkZXNjcmliaW5nIHRoZSB2YWx1ZSByZXR1cm5lZCBieSBhIGNvbXBhcmlzb24KICAgICBvcGVyYXRvciB3aXRoIGFuIGludGVncmFsIG1vZGUgYW5kIHN0b3JlZCBieSBhIHN0b3JlLWZsYWcKICAgICBpbnN0cnVjdGlvbiAoJ3NDT05EJykgd2hlbiB0aGUgY29uZGl0aW9uIGlzIHRydWUuICBUaGlzIGRlc2NyaXB0aW9uCiAgICAgbXVzdCBhcHBseSB0byBfYWxsXyB0aGUgJ3NDT05EJyBwYXR0ZXJucyBhbmQgYWxsIHRoZSBjb21wYXJpc29uCiAgICAgb3BlcmF0b3JzIHdob3NlIHJlc3VsdHMgaGF2ZSBhICdNT0RFX0lOVCcgbW9kZS4KCiAgICAgQSB2YWx1ZSBvZiAxIG9yIC0xIG1lYW5zIHRoYXQgdGhlIGluc3RydWN0aW9uIGltcGxlbWVudGluZyB0aGUKICAgICBjb21wYXJpc29uIG9wZXJhdG9yIHJldHVybnMgZXhhY3RseSAxIG9yIC0xIHdoZW4gdGhlIGNvbXBhcmlzb24gaXMKICAgICB0cnVlIGFuZCAwIHdoZW4gdGhlIGNvbXBhcmlzb24gaXMgZmFsc2UuICBPdGhlcndpc2UsIHRoZSB2YWx1ZQogICAgIGluZGljYXRlcyB3aGljaCBiaXRzIG9mIHRoZSByZXN1bHQgYXJlIGd1YXJhbnRlZWQgdG8gYmUgMSB3aGVuIHRoZQogICAgIGNvbXBhcmlzb24gaXMgdHJ1ZS4gIFRoaXMgdmFsdWUgaXMgaW50ZXJwcmV0ZWQgaW4gdGhlIG1vZGUgb2YgdGhlCiAgICAgY29tcGFyaXNvbiBvcGVyYXRpb24sIHdoaWNoIGlzIGdpdmVuIGJ5IHRoZSBtb2RlIG9mIHRoZSBmaXJzdAogICAgIG9wZXJhbmQgaW4gdGhlICdzQ09ORCcgcGF0dGVybi4gIEVpdGhlciB0aGUgbG93IGJpdCBvciB0aGUgc2lnbiBiaXQKICAgICBvZiAnU1RPUkVfRkxBR19WQUxVRScgYmUgb24uICBQcmVzZW50bHksIG9ubHkgdGhvc2UgYml0cyBhcmUgdXNlZAogICAgIGJ5IHRoZSBjb21waWxlci4KCiAgICAgSWYgJ1NUT1JFX0ZMQUdfVkFMVUUnIGlzIG5laXRoZXIgMSBvciAtMSwgdGhlIGNvbXBpbGVyIHdpbGwKICAgICBnZW5lcmF0ZSBjb2RlIHRoYXQgZGVwZW5kcyBvbmx5IG9uIHRoZSBzcGVjaWZpZWQgYml0cy4gIEl0IGNhbiBhbHNvCiAgICAgcmVwbGFjZSBjb21wYXJpc29uIG9wZXJhdG9ycyB3aXRoIGVxdWl2YWxlbnQgb3BlcmF0aW9ucyBpZiB0aGV5CiAgICAgY2F1c2UgdGhlIHJlcXVpcmVkIGJpdHMgdG8gYmUgc2V0LCBldmVuIGlmIHRoZSByZW1haW5pbmcgYml0cyBhcmUKICAgICB1bmRlZmluZWQuICBGb3IgZXhhbXBsZSwgb24gYSBtYWNoaW5lIHdob3NlIGNvbXBhcmlzb24gb3BlcmF0b3JzCiAgICAgcmV0dXJuIGFuICdTSW1vZGUnIHZhbHVlIGFuZCB3aGVyZSAnU1RPUkVfRkxBR19WQUxVRScgaXMgZGVmaW5lZCBhcwogICAgICcweDgwMDAwMDAwJywgc2F5aW5nIHRoYXQganVzdCB0aGUgc2lnbiBiaXQgaXMgcmVsZXZhbnQsIHRoZQogICAgIGV4cHJlc3Npb24KCiAgICAgICAgICAobmU6U0kgKGFuZDpTSSBYIChjb25zdF9pbnQgUE9XRVItT0YtMikpIChjb25zdF9pbnQgMCkpCgogICAgIGNhbiBiZSBjb252ZXJ0ZWQgdG8KCiAgICAgICAgICAoYXNoaWZ0OlNJIFggKGNvbnN0X2ludCBOKSkKCiAgICAgd2hlcmUgTiBpcyB0aGUgYXBwcm9wcmlhdGUgc2hpZnQgY291bnQgdG8gbW92ZSB0aGUgYml0IGJlaW5nIHRlc3RlZAogICAgIGludG8gdGhlIHNpZ24gYml0LgoKICAgICBUaGVyZSBpcyBubyB3YXkgdG8gZGVzY3JpYmUgYSBtYWNoaW5lIHRoYXQgYWx3YXlzIHNldHMgdGhlCiAgICAgbG93LW9yZGVyIGJpdCBmb3IgYSB0cnVlIHZhbHVlLCBidXQgZG9lcyBub3QgZ3VhcmFudGVlIHRoZSB2YWx1ZSBvZgogICAgIGFueSBvdGhlciBiaXRzLCBidXQgd2UgZG8gbm90IGtub3cgb2YgYW55IG1hY2hpbmUgdGhhdCBoYXMgc3VjaCBhbgogICAgIGluc3RydWN0aW9uLiAgSWYgeW91IGFyZSB0cnlpbmcgdG8gcG9ydCBHQ0MgdG8gc3VjaCBhIG1hY2hpbmUsCiAgICAgaW5jbHVkZSBhbiBpbnN0cnVjdGlvbiB0byBwZXJmb3JtIGEgbG9naWNhbC1hbmQgb2YgdGhlIHJlc3VsdCB3aXRoCiAgICAgMSBpbiB0aGUgcGF0dGVybiBmb3IgdGhlIGNvbXBhcmlzb24gb3BlcmF0b3JzIGFuZCBsZXQgdXMga25vdyBhdAogICAgIDxnY2NAZ2NjLmdudS5vcmc+LgoKICAgICBPZnRlbiwgYSBtYWNoaW5lIHdpbGwgaGF2ZSBtdWx0aXBsZSBpbnN0cnVjdGlvbnMgdGhhdCBvYnRhaW4gYQogICAgIHZhbHVlIGZyb20gYSBjb21wYXJpc29uIChvciB0aGUgY29uZGl0aW9uIGNvZGVzKS4gIEhlcmUgYXJlIHJ1bGVzCiAgICAgdG8gZ3VpZGUgdGhlIGNob2ljZSBvZiB2YWx1ZSBmb3IgJ1NUT1JFX0ZMQUdfVkFMVUUnLCBhbmQgaGVuY2UgdGhlCiAgICAgaW5zdHJ1Y3Rpb25zIHRvIGJlIHVzZWQ6CgogICAgICAgICogVXNlIHRoZSBzaG9ydGVzdCBzZXF1ZW5jZSB0aGF0IHlpZWxkcyBhIHZhbGlkIGRlZmluaXRpb24gZm9yCiAgICAgICAgICAnU1RPUkVfRkxBR19WQUxVRScuICBJdCBpcyBtb3JlIGVmZmljaWVudCBmb3IgdGhlIGNvbXBpbGVyIHRvCiAgICAgICAgICAibm9ybWFsaXplIiB0aGUgdmFsdWUgKGNvbnZlcnQgaXQgdG8sIGUuZy4sIDEgb3IgMCkgdGhhbiBmb3IKICAgICAgICAgIHRoZSBjb21wYXJpc29uIG9wZXJhdG9ycyB0byBkbyBzbyBiZWNhdXNlIHRoZXJlIG1heSBiZQogICAgICAgICAgb3Bwb3J0dW5pdGllcyB0byBjb21iaW5lIHRoZSBub3JtYWxpemF0aW9uIHdpdGggb3RoZXIKICAgICAgICAgIG9wZXJhdGlvbnMuCgogICAgICAgICogRm9yIGVxdWFsLWxlbmd0aCBzZXF1ZW5jZXMsIHVzZSBhIHZhbHVlIG9mIDEgb3IgLTEsIHdpdGggLTEKICAgICAgICAgIGJlaW5nIHNsaWdodGx5IHByZWZlcnJlZCBvbiBtYWNoaW5lcyB3aXRoIGV4cGVuc2l2ZSBqdW1wcyBhbmQKICAgICAgICAgIDEgcHJlZmVycmVkIG9uIG90aGVyIG1hY2hpbmVzLgoKICAgICAgICAqIEFzIGEgc2Vjb25kIGNob2ljZSwgY2hvb3NlIGEgdmFsdWUgb2YgJzB4ODAwMDAwMDEnIGlmCiAgICAgICAgICBpbnN0cnVjdGlvbnMgZXhpc3QgdGhhdCBzZXQgYm90aCB0aGUgc2lnbiBhbmQgbG93LW9yZGVyIGJpdHMKICAgICAgICAgIGJ1dCBkbyBub3QgZGVmaW5lIHRoZSBvdGhlcnMuCgogICAgICAgICogT3RoZXJ3aXNlLCB1c2UgYSB2YWx1ZSBvZiAnMHg4MDAwMDAwMCcuCgogICAgIE1hbnkgbWFjaGluZXMgY2FuIHByb2R1Y2UgYm90aCB0aGUgdmFsdWUgY2hvc2VuIGZvcgogICAgICdTVE9SRV9GTEFHX1ZBTFVFJyBhbmQgaXRzIG5lZ2F0aW9uIGluIHRoZSBzYW1lIG51bWJlciBvZgogICAgIGluc3RydWN0aW9ucy4gIE9uIHRob3NlIG1hY2hpbmVzLCB5b3Ugc2hvdWxkIGFsc28gZGVmaW5lIGEgcGF0dGVybgogICAgIGZvciB0aG9zZSBjYXNlcywgZS5nLiwgb25lIG1hdGNoaW5nCgogICAgICAgICAgKHNldCBBIChuZWc6TSAobmU6TSBCIEMpKSkKCiAgICAgU29tZSBtYWNoaW5lcyBjYW4gYWxzbyBwZXJmb3JtICdhbmQnIG9yICdwbHVzJyBvcGVyYXRpb25zIG9uCiAgICAgY29uZGl0aW9uIGNvZGUgdmFsdWVzIHdpdGggbGVzcyBpbnN0cnVjdGlvbnMgdGhhbiB0aGUgY29ycmVzcG9uZGluZwogICAgICdzQ09ORCcgaW5zbiBmb2xsb3dlZCBieSAnYW5kJyBvciAncGx1cycuICBPbiB0aG9zZSBtYWNoaW5lcywKICAgICBkZWZpbmUgdGhlIGFwcHJvcHJpYXRlIHBhdHRlcm5zLiAgVXNlIHRoZSBuYW1lcyAnaW5jc2NjJyBhbmQKICAgICAnZGVjc2NjJywgcmVzcGVjdGl2ZWx5LCBmb3IgdGhlIHBhdHRlcm5zIHdoaWNoIHBlcmZvcm0gJ3BsdXMnIG9yCiAgICAgJ21pbnVzJyBvcGVyYXRpb25zIG9uIGNvbmRpdGlvbiBjb2RlIHZhbHVlcy4gIFNlZSAncnM2MDAwLm1kJyBmb3IKICAgICBzb21lIGV4YW1wbGVzLiAgVGhlIEdOVSBTdXBlcm9wdGl6ZXIgY2FuIGJlIHVzZWQgdG8gZmluZCBzdWNoCiAgICAgaW5zdHJ1Y3Rpb24gc2VxdWVuY2VzIG9uIG90aGVyIG1hY2hpbmVzLgoKICAgICBJZiB0aGlzIG1hY3JvIGlzIG5vdCBkZWZpbmVkLCB0aGUgZGVmYXVsdCB2YWx1ZSwgMSwgaXMgdXNlZC4gIFlvdQogICAgIG5lZWQgbm90IGRlZmluZSAnU1RPUkVfRkxBR19WQUxVRScgaWYgdGhlIG1hY2hpbmUgaGFzIG5vIHN0b3JlLWZsYWcKICAgICBpbnN0cnVjdGlvbnMsIG9yIGlmIHRoZSB2YWx1ZSBnZW5lcmF0ZWQgYnkgdGhlc2UgaW5zdHJ1Y3Rpb25zIGlzIDEuCgogLS0gTWFjcm86IEZMT0FUX1NUT1JFX0ZMQUdfVkFMVUUgKE1PREUpCiAgICAgQSBDIGV4cHJlc3Npb24gdGhhdCBnaXZlcyBhIG5vbnplcm8gJ1JFQUxfVkFMVUVfVFlQRScgdmFsdWUgdGhhdCBpcwogICAgIHJldHVybmVkIHdoZW4gY29tcGFyaXNvbiBvcGVyYXRvcnMgd2l0aCBmbG9hdGluZy1wb2ludCByZXN1bHRzIGFyZQogICAgIHRydWUuICBEZWZpbmUgdGhpcyBtYWNybyBvbiBtYWNoaW5lcyB0aGF0IGhhdmUgY29tcGFyaXNvbgogICAgIG9wZXJhdGlvbnMgdGhhdCByZXR1cm4gZmxvYXRpbmctcG9pbnQgdmFsdWVzLiAgSWYgdGhlcmUgYXJlIG5vIHN1Y2gKICAgICBvcGVyYXRpb25zLCBkbyBub3QgZGVmaW5lIHRoaXMgbWFjcm8uCgogLS0gTWFjcm86IFZFQ1RPUl9TVE9SRV9GTEFHX1ZBTFVFIChNT0RFKQogICAgIEEgQyBleHByZXNzaW9uIHRoYXQgZ2l2ZXMgYSBydHggcmVwcmVzZW50aW5nIHRoZSBub256ZXJvIHRydWUKICAgICBlbGVtZW50IGZvciB2ZWN0b3IgY29tcGFyaXNvbnMuICBUaGUgcmV0dXJuZWQgcnR4IHNob3VsZCBiZSB2YWxpZAogICAgIGZvciB0aGUgaW5uZXIgbW9kZSBvZiBNT0RFIHdoaWNoIGlzIGd1YXJhbnRlZWQgdG8gYmUgYSB2ZWN0b3IgbW9kZS4KICAgICBEZWZpbmUgdGhpcyBtYWNybyBvbiBtYWNoaW5lcyB0aGF0IGhhdmUgdmVjdG9yIGNvbXBhcmlzb24KICAgICBvcGVyYXRpb25zIHRoYXQgcmV0dXJuIGEgdmVjdG9yIHJlc3VsdC4gIElmIHRoZXJlIGFyZSBubyBzdWNoCiAgICAgb3BlcmF0aW9ucywgZG8gbm90IGRlZmluZSB0aGlzIG1hY3JvLiAgVHlwaWNhbGx5LCB0aGlzIG1hY3JvIGlzCiAgICAgZGVmaW5lZCBhcyAnY29uc3QxX3J0eCcgb3IgJ2NvbnN0bTFfcnR4Jy4gIFRoaXMgbWFjcm8gbWF5IHJldHVybgogICAgICdOVUxMX1JUWCcgdG8gcHJldmVudCB0aGUgY29tcGlsZXIgb3B0aW1pemluZyBzdWNoIHZlY3RvcgogICAgIGNvbXBhcmlzb24gb3BlcmF0aW9ucyBmb3IgdGhlIGdpdmVuIG1vZGUuCgogLS0gTWFjcm86IENMWl9ERUZJTkVEX1ZBTFVFX0FUX1pFUk8gKE1PREUsIFZBTFVFKQogLS0gTWFjcm86IENUWl9ERUZJTkVEX1ZBTFVFX0FUX1pFUk8gKE1PREUsIFZBTFVFKQogICAgIEEgQyBleHByZXNzaW9uIHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGFyY2hpdGVjdHVyZSBkZWZpbmVzIGEKICAgICB2YWx1ZSBmb3IgJ2Nseicgb3IgJ2N0eicgd2l0aCBhIHplcm8gb3BlcmFuZC4gIEEgcmVzdWx0IG9mICcwJwogICAgIGluZGljYXRlcyB0aGUgdmFsdWUgaXMgdW5kZWZpbmVkLiAgSWYgdGhlIHZhbHVlIGlzIGRlZmluZWQgZm9yIG9ubHkKICAgICB0aGUgUlRMIGV4cHJlc3Npb24sIHRoZSBtYWNybyBzaG91bGQgZXZhbHVhdGUgdG8gJzEnOyBpZiB0aGUgdmFsdWUKICAgICBhcHBsaWVzIGFsc28gdG8gdGhlIGNvcnJlc3BvbmRpbmcgb3B0YWIgZW50cnkgKHdoaWNoIGlzIG5vcm1hbGx5CiAgICAgdGhlIGNhc2UgaWYgaXQgZXhwYW5kcyBkaXJlY3RseSBpbnRvIHRoZSBjb3JyZXNwb25kaW5nIFJUTCksIHRoZW4KICAgICB0aGUgbWFjcm8gc2hvdWxkIGV2YWx1YXRlIHRvICcyJy4gIEluIHRoZSBjYXNlcyB3aGVyZSB0aGUgdmFsdWUgaXMKICAgICBkZWZpbmVkLCBWQUxVRSBzaG91bGQgYmUgc2V0IHRvIHRoaXMgdmFsdWUuCgogICAgIElmIHRoaXMgbWFjcm8gaXMgbm90IGRlZmluZWQsIHRoZSB2YWx1ZSBvZiAnY2x6JyBvciAnY3R6JyBhdCB6ZXJvCiAgICAgaXMgYXNzdW1lZCB0byBiZSB1bmRlZmluZWQuCgogICAgIFRoaXMgbWFjcm8gbXVzdCBiZSBkZWZpbmVkIGlmIHRoZSB0YXJnZXQncyBleHBhbnNpb24gZm9yICdmZnMnCiAgICAgcmVsaWVzIG9uIGEgcGFydGljdWxhciB2YWx1ZSB0byBnZXQgY29ycmVjdCByZXN1bHRzLiAgT3RoZXJ3aXNlIGl0CiAgICAgaXMgbm90IG5lY2Vzc2FyeSwgdGhvdWdoIGl0IG1heSBiZSB1c2VkIHRvIG9wdGltaXplIHNvbWUgY29ybmVyCiAgICAgY2FzZXMsIGFuZCB0byBwcm92aWRlIGEgZGVmYXVsdCBleHBhbnNpb24gZm9yIHRoZSAnZmZzJyBvcHRhYi4KCiAgICAgTm90ZSB0aGF0IHJlZ2FyZGxlc3Mgb2YgdGhpcyBtYWNybyB0aGUgImRlZmluZWRuZXNzIiBvZiAnY2x6JyBhbmQKICAgICAnY3R6JyBhdCB6ZXJvIGRvIF9ub3RfIGV4dGVuZCB0byB0aGUgYnVpbHRpbiBmdW5jdGlvbnMgdmlzaWJsZSB0bwogICAgIHRoZSB1c2VyLiAgVGh1cyBvbmUgbWF5IGJlIGZyZWUgdG8gYWRqdXN0IHRoZSB2YWx1ZSBhdCB3aWxsIHRvCiAgICAgbWF0Y2ggdGhlIHRhcmdldCBleHBhbnNpb24gb2YgdGhlc2Ugb3BlcmF0aW9ucyB3aXRob3V0IGZlYXIgb2YKICAgICBicmVha2luZyB0aGUgQVBJLgoKIC0tIE1hY3JvOiBQbW9kZQogICAgIEFuIGFsaWFzIGZvciB0aGUgbWFjaGluZSBtb2RlIGZvciBwb2ludGVycy4gIE9uIG1vc3QgbWFjaGluZXMsCiAgICAgZGVmaW5lIHRoaXMgdG8gYmUgdGhlIGludGVnZXIgbW9kZSBjb3JyZXNwb25kaW5nIHRvIHRoZSB3aWR0aCBvZiBhCiAgICAgaGFyZHdhcmUgcG9pbnRlcjsgJ1NJbW9kZScgb24gMzItYml0IG1hY2hpbmUgb3IgJ0RJbW9kZScgb24gNjQtYml0CiAgICAgbWFjaGluZXMuICBPbiBzb21lIG1hY2hpbmVzIHlvdSBtdXN0IGRlZmluZSB0aGlzIHRvIGJlIG9uZSBvZiB0aGUKICAgICBwYXJ0aWFsIGludGVnZXIgbW9kZXMsIHN1Y2ggYXMgJ1BTSW1vZGUnLgoKICAgICBUaGUgd2lkdGggb2YgJ1Btb2RlJyBtdXN0IGJlIGF0IGxlYXN0IGFzIGxhcmdlIGFzIHRoZSB2YWx1ZSBvZgogICAgICdQT0lOVEVSX1NJWkUnLiAgSWYgaXQgaXMgbm90IGVxdWFsLCB5b3UgbXVzdCBkZWZpbmUgdGhlIG1hY3JvCiAgICAgJ1BPSU5URVJTX0VYVEVORF9VTlNJR05FRCcgdG8gc3BlY2lmeSBob3cgcG9pbnRlcnMgYXJlIGV4dGVuZGVkIHRvCiAgICAgJ1Btb2RlJy4KCiAtLSBNYWNybzogRlVOQ1RJT05fTU9ERQogICAgIEFuIGFsaWFzIGZvciB0aGUgbWFjaGluZSBtb2RlIHVzZWQgZm9yIG1lbW9yeSByZWZlcmVuY2VzIHRvCiAgICAgZnVuY3Rpb25zIGJlaW5nIGNhbGxlZCwgaW4gJ2NhbGwnIFJUTCBleHByZXNzaW9ucy4gIE9uIG1vc3QgQ0lTQwogICAgIG1hY2hpbmVzLCB3aGVyZSBhbiBpbnN0cnVjdGlvbiBjYW4gYmVnaW4gYXQgYW55IGJ5dGUgYWRkcmVzcywgdGhpcwogICAgIHNob3VsZCBiZSAnUUltb2RlJy4gIE9uIG1vc3QgUklTQyBtYWNoaW5lcywgd2hlcmUgYWxsIGluc3RydWN0aW9ucwogICAgIGhhdmUgZml4ZWQgc2l6ZSBhbmQgYWxpZ25tZW50LCB0aGlzIHNob3VsZCBiZSBhIG1vZGUgd2l0aCB0aGUgc2FtZQogICAgIHNpemUgYW5kIGFsaWdubWVudCBhcyB0aGUgbWFjaGluZSBpbnN0cnVjdGlvbiB3b3JkcyAtIHR5cGljYWxseQogICAgICdTSW1vZGUnIG9yICdISW1vZGUnLgoKIC0tIE1hY3JvOiBTVERDXzBfSU5fU1lTVEVNX0hFQURFUlMKICAgICBJbiBub3JtYWwgb3BlcmF0aW9uLCB0aGUgcHJlcHJvY2Vzc29yIGV4cGFuZHMgJ19fU1REQ19fJyB0byB0aGUKICAgICBjb25zdGFudCAxLCB0byBzaWduaWZ5IHRoYXQgR0NDIGNvbmZvcm1zIHRvIElTTyBTdGFuZGFyZCBDLiAgT24KICAgICBzb21lIGhvc3RzLCBsaWtlIFNvbGFyaXMsIHRoZSBzeXN0ZW0gY29tcGlsZXIgdXNlcyBhIGRpZmZlcmVudAogICAgIGNvbnZlbnRpb24sIHdoZXJlICdfX1NURENfXycgaXMgbm9ybWFsbHkgMCwgYnV0IGlzIDEgaWYgdGhlIHVzZXIKICAgICBzcGVjaWZpZXMgc3RyaWN0IGNvbmZvcm1hbmNlIHRvIHRoZSBDIFN0YW5kYXJkLgoKICAgICBEZWZpbmluZyAnU1REQ18wX0lOX1NZU1RFTV9IRUFERVJTJyBtYWtlcyBHTlUgQ1BQIGZvbGxvd3MgdGhlIGhvc3QKICAgICBjb252ZW50aW9uIHdoZW4gcHJvY2Vzc2luZyBzeXN0ZW0gaGVhZGVyIGZpbGVzLCBidXQgd2hlbiBwcm9jZXNzaW5nCiAgICAgdXNlciBmaWxlcyAnX19TVERDX18nIHdpbGwgYWx3YXlzIGV4cGFuZCB0byAxLgoKIC0tIE1hY3JvOiBOT19JTVBMSUNJVF9FWFRFUk5fQwogICAgIERlZmluZSB0aGlzIG1hY3JvIGlmIHRoZSBzeXN0ZW0gaGVhZGVyIGZpbGVzIHN1cHBvcnQgQysrIGFzIHdlbGwgYXMKICAgICBDLiAgVGhpcyBtYWNybyBpbmhpYml0cyB0aGUgdXN1YWwgbWV0aG9kIG9mIHVzaW5nIHN5c3RlbSBoZWFkZXIKICAgICBmaWxlcyBpbiBDKyssIHdoaWNoIGlzIHRvIHByZXRlbmQgdGhhdCB0aGUgZmlsZSdzIGNvbnRlbnRzIGFyZQogICAgIGVuY2xvc2VkIGluICdleHRlcm4gIkMiIHsuLi59Jy4KCiAtLSBNYWNybzogUkVHSVNURVJfVEFSR0VUX1BSQUdNQVMgKCkKICAgICBEZWZpbmUgdGhpcyBtYWNybyBpZiB5b3Ugd2FudCB0byBpbXBsZW1lbnQgYW55IHRhcmdldC1zcGVjaWZpYwogICAgIHByYWdtYXMuICBJZiBkZWZpbmVkLCBpdCBpcyBhIEMgZXhwcmVzc2lvbiB3aGljaCBtYWtlcyBhIHNlcmllcyBvZgogICAgIGNhbGxzIHRvICdjX3JlZ2lzdGVyX3ByYWdtYScgb3IgJ2NfcmVnaXN0ZXJfcHJhZ21hX3dpdGhfZXhwYW5zaW9uJwogICAgIGZvciBlYWNoIHByYWdtYS4gIFRoZSBtYWNybyBtYXkgYWxzbyBkbyBhbnkgc2V0dXAgcmVxdWlyZWQgZm9yIHRoZQogICAgIHByYWdtYXMuCgogICAgIFRoZSBwcmltYXJ5IHJlYXNvbiB0byBkZWZpbmUgdGhpcyBtYWNybyBpcyB0byBwcm92aWRlIGNvbXBhdGliaWxpdHkKICAgICB3aXRoIG90aGVyIGNvbXBpbGVycyBmb3IgdGhlIHNhbWUgdGFyZ2V0LiAgSW4gZ2VuZXJhbCwgd2UKICAgICBkaXNjb3VyYWdlIGRlZmluaXRpb24gb2YgdGFyZ2V0LXNwZWNpZmljIHByYWdtYXMgZm9yIEdDQy4KCiAgICAgSWYgdGhlIHByYWdtYSBjYW4gYmUgaW1wbGVtZW50ZWQgYnkgYXR0cmlidXRlcyB0aGVuIHlvdSBzaG91bGQKICAgICBjb25zaWRlciBkZWZpbmluZyB0aGUgdGFyZ2V0IGhvb2sgJ1RBUkdFVF9JTlNFUlRfQVRUUklCVVRFUycgYXMKICAgICB3ZWxsLgoKICAgICBQcmVwcm9jZXNzb3IgbWFjcm9zIHRoYXQgYXBwZWFyIG9uIHByYWdtYSBsaW5lcyBhcmUgbm90IGV4cGFuZGVkLgogICAgIEFsbCAnI3ByYWdtYScgZGlyZWN0aXZlcyB0aGF0IGRvIG5vdCBtYXRjaCBhbnkgcmVnaXN0ZXJlZCBwcmFnbWEKICAgICBhcmUgc2lsZW50bHkgaWdub3JlZCwgdW5sZXNzIHRoZSB1c2VyIHNwZWNpZmllcwogICAgICctV3Vua25vd24tcHJhZ21hcycuCgogLS0gRnVuY3Rpb246IHZvaWQgY19yZWdpc3Rlcl9wcmFnbWEgKGNvbnN0IGNoYXIgKlNQQUNFLCBjb25zdCBjaGFyCiAgICAgICAgICAqTkFNRSwgdm9pZCAoKkNBTExCQUNLKSAoc3RydWN0IGNwcF9yZWFkZXIgKikpCiAtLSBGdW5jdGlvbjogdm9pZCBjX3JlZ2lzdGVyX3ByYWdtYV93aXRoX2V4cGFuc2lvbiAoY29uc3QgY2hhciAqU1BBQ0UsCiAgICAgICAgICBjb25zdCBjaGFyICpOQU1FLCB2b2lkICgqQ0FMTEJBQ0spIChzdHJ1Y3QgY3BwX3JlYWRlciAqKSkKCiAgICAgRWFjaCBjYWxsIHRvICdjX3JlZ2lzdGVyX3ByYWdtYScgb3IKICAgICAnY19yZWdpc3Rlcl9wcmFnbWFfd2l0aF9leHBhbnNpb24nIGVzdGFibGlzaGVzIG9uZSBwcmFnbWEuICBUaGUKICAgICBDQUxMQkFDSyByb3V0aW5lIHdpbGwgYmUgY2FsbGVkIHdoZW4gdGhlIHByZXByb2Nlc3NvciBlbmNvdW50ZXJzIGEKICAgICBwcmFnbWEgb2YgdGhlIGZvcm0KCiAgICAgICAgICAjcHJhZ21hIFtTUEFDRV0gTkFNRSAuLi4KCiAgICAgU1BBQ0UgaXMgdGhlIGNhc2Utc2Vuc2l0aXZlIG5hbWVzcGFjZSBvZiB0aGUgcHJhZ21hLCBvciAnTlVMTCcgdG8KICAgICBwdXQgdGhlIHByYWdtYSBpbiB0aGUgZ2xvYmFsIG5hbWVzcGFjZS4gIFRoZSBjYWxsYmFjayByb3V0aW5lCiAgICAgcmVjZWl2ZXMgUEZJTEUgYXMgaXRzIGZpcnN0IGFyZ3VtZW50LCB3aGljaCBjYW4gYmUgcGFzc2VkIG9uIHRvCiAgICAgY3BwbGliJ3MgZnVuY3Rpb25zIGlmIG5lY2Vzc2FyeS4gIFlvdSBjYW4gbGV4IHRva2VucyBhZnRlciB0aGUgTkFNRQogICAgIGJ5IGNhbGxpbmcgJ3ByYWdtYV9sZXgnLiAgVG9rZW5zIHRoYXQgYXJlIG5vdCByZWFkIGJ5IHRoZSBjYWxsYmFjawogICAgIHdpbGwgYmUgc2lsZW50bHkgaWdub3JlZC4gIFRoZSBlbmQgb2YgdGhlIGxpbmUgaXMgaW5kaWNhdGVkIGJ5IGEKICAgICB0b2tlbiBvZiB0eXBlICdDUFBfRU9GJy4gIE1hY3JvIGV4cGFuc2lvbiBvY2N1cnMgb24gdGhlIGFyZ3VtZW50cwogICAgIG9mIHByYWdtYXMgcmVnaXN0ZXJlZCB3aXRoICdjX3JlZ2lzdGVyX3ByYWdtYV93aXRoX2V4cGFuc2lvbicgYnV0CiAgICAgbm90IG9uIHRoZSBhcmd1bWVudHMgb2YgcHJhZ21hcyByZWdpc3RlcmVkIHdpdGgKICAgICAnY19yZWdpc3Rlcl9wcmFnbWEnLgoKICAgICBOb3RlIHRoYXQgdGhlIHVzZSBvZiAncHJhZ21hX2xleCcgaXMgc3BlY2lmaWMgdG8gdGhlIEMgYW5kIEMrKwogICAgIGNvbXBpbGVycy4gIEl0IHdpbGwgbm90IHdvcmsgaW4gdGhlIEphdmEgb3IgRm9ydHJhbiBjb21waWxlcnMsIG9yCiAgICAgYW55IG90aGVyIGxhbmd1YWdlIGNvbXBpbGVycyBmb3IgdGhhdCBtYXR0ZXIuICBUaHVzIGlmICdwcmFnbWFfbGV4JwogICAgIGlzIGdvaW5nIHRvIGJlIGNhbGxlZCBmcm9tIHRhcmdldC1zcGVjaWZpYyBjb2RlLCBpdCBtdXN0IG9ubHkgYmUKICAgICBkb25lIHNvIHdoZW4gYnVpbGRpbmcgdGhlIEMgYW5kIEMrKyBjb21waWxlcnMuICBUaGlzIGNhbiBiZSBkb25lIGJ5CiAgICAgZGVmaW5pbmcgdGhlIHZhcmlhYmxlcyAnY190YXJnZXRfb2JqcycgYW5kICdjeHhfdGFyZ2V0X29ianMnIGluIHRoZQogICAgIHRhcmdldCBlbnRyeSBpbiB0aGUgJ2NvbmZpZy5nY2MnIGZpbGUuICBUaGVzZSB2YXJpYWJsZXMgc2hvdWxkIG5hbWUKICAgICB0aGUgdGFyZ2V0LXNwZWNpZmljLCBsYW5ndWFnZS1zcGVjaWZpYyBvYmplY3QgZmlsZSB3aGljaCBjb250YWlucwogICAgIHRoZSBjb2RlIHRoYXQgdXNlcyAncHJhZ21hX2xleCcuICBOb3RlIGl0IHdpbGwgYWxzbyBiZSBuZWNlc3NhcnkgdG8KICAgICBhZGQgYSBydWxlIHRvIHRoZSBtYWtlZmlsZSBmcmFnbWVudCBwb2ludGVkIHRvIGJ5ICd0bWFrZV9maWxlJyB0aGF0CiAgICAgc2hvd3MgaG93IHRvIGJ1aWxkIHRoaXMgb2JqZWN0IGZpbGUuCgogLS0gTWFjcm86IEhBTkRMRV9TWVNWX1BSQUdNQQogICAgIERlZmluZSB0aGlzIG1hY3JvICh0byBhIHZhbHVlIG9mIDEpIGlmIHlvdSB3YW50IHRoZSBTeXN0ZW0gViBzdHlsZQogICAgIHByYWdtYXMgJyNwcmFnbWEgcGFjayg8bj4pJyBhbmQgJyNwcmFnbWEgd2VhayA8bmFtZT4gWz08dmFsdWU+XScgdG8KICAgICBiZSBzdXBwb3J0ZWQgYnkgZ2NjLgoKICAgICBUaGUgcGFjayBwcmFnbWEgc3BlY2lmaWVzIHRoZSBtYXhpbXVtIGFsaWdubWVudCAoaW4gYnl0ZXMpIG9mCiAgICAgZmllbGRzIHdpdGhpbiBhIHN0cnVjdHVyZSwgaW4gbXVjaCB0aGUgc2FtZSB3YXkgYXMgdGhlCiAgICAgJ19fYWxpZ25lZF9fJyBhbmQgJ19fcGFja2VkX18nICdfX2F0dHJpYnV0ZV9fJ3MgZG8uICBBIHBhY2sgdmFsdWUKICAgICBvZiB6ZXJvIHJlc2V0cyB0aGUgYmVoYXZpb3IgdG8gdGhlIGRlZmF1bHQuCgogICAgIEEgc3VidGxldHkgZm9yIE1pY3Jvc29mdCBWaXN1YWwgQy9DKysgc3R5bGUgYml0LWZpZWxkIHBhY2tpbmcgKGUuZy4KICAgICAtbW1zLWJpdGZpZWxkcykgZm9yIHRhcmdldHMgdGhhdCBzdXBwb3J0IGl0OiBXaGVuIGEgYml0LWZpZWxkIGlzCiAgICAgaW5zZXJ0ZWQgaW50byBhIHBhY2tlZCByZWNvcmQsIHRoZSB3aG9sZSBzaXplIG9mIHRoZSB1bmRlcmx5aW5nCiAgICAgdHlwZSBpcyB1c2VkIGJ5IG9uZSBvciBtb3JlIHNhbWUtc2l6ZSBhZGphY2VudCBiaXQtZmllbGRzICh0aGF0IGlzLAogICAgIGlmIGl0cyBsb25nOjMsIDMyIGJpdHMgaXMgdXNlZCBpbiB0aGUgcmVjb3JkLCBhbmQgYW55IGFkZGl0aW9uYWwKICAgICBhZGphY2VudCBsb25nIGJpdC1maWVsZHMgYXJlIHBhY2tlZCBpbnRvIHRoZSBzYW1lIGNodW5rIG9mIDMyIGJpdHMuCiAgICAgSG93ZXZlciwgaWYgdGhlIHNpemUgY2hhbmdlcywgYSBuZXcgZmllbGQgb2YgdGhhdCBzaXplIGlzCiAgICAgYWxsb2NhdGVkKS4KCiAgICAgSWYgYm90aCBNUyBiaXQtZmllbGRzIGFuZCAnX19hdHRyaWJ1dGVfXygocGFja2VkKSknIGFyZSB1c2VkLCB0aGUKICAgICBsYXR0ZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UuICBJZiAnX19hdHRyaWJ1dGVfXygocGFja2VkKSknIGlzIHVzZWQKICAgICBvbiBhIHNpbmdsZSBmaWVsZCB3aGVuIE1TIGJpdC1maWVsZHMgYXJlIGluIHVzZSwgaXQgd2lsbCB0YWtlCiAgICAgcHJlY2VkZW5jZSBmb3IgdGhhdCBmaWVsZCwgYnV0IHRoZSBhbGlnbm1lbnQgb2YgdGhlIHJlc3Qgb2YgdGhlCiAgICAgc3RydWN0dXJlIG1heSBhZmZlY3QgaXRzIHBsYWNlbWVudC4KCiAgICAgVGhlIHdlYWsgcHJhZ21hIG9ubHkgd29ya3MgaWYgJ1NVUFBPUlRTX1dFQUsnIGFuZAogICAgICdBU01fV0VBS0VOX0xBQkVMJyBhcmUgZGVmaW5lZC4gIElmIGVuYWJsZWQgaXQgYWxsb3dzIHRoZSBjcmVhdGlvbgogICAgIG9mIHNwZWNpZmljYWxseSBuYW1lZCB3ZWFrIGxhYmVscywgb3B0aW9uYWxseSB3aXRoIGEgdmFsdWUuCgogLS0gTWFjcm86IEhBTkRMRV9QUkFHTUFfUEFDS19QVVNIX1BPUAogICAgIERlZmluZSB0aGlzIG1hY3JvICh0byBhIHZhbHVlIG9mIDEpIGlmIHlvdSB3YW50IHRvIHN1cHBvcnQgdGhlCiAgICAgV2luMzIgc3R5bGUgcHJhZ21hcyAnI3ByYWdtYSBwYWNrKHB1c2hbLE5dKScgYW5kICcjcHJhZ21hCiAgICAgcGFjayhwb3ApJy4gIFRoZSAncGFjayhwdXNoLFtOXSknIHByYWdtYSBzcGVjaWZpZXMgdGhlIG1heGltdW0KICAgICBhbGlnbm1lbnQgKGluIGJ5dGVzKSBvZiBmaWVsZHMgd2l0aGluIGEgc3RydWN0dXJlLCBpbiBtdWNoIHRoZSBzYW1lCiAgICAgd2F5IGFzIHRoZSAnX19hbGlnbmVkX18nIGFuZCAnX19wYWNrZWRfXycgJ19fYXR0cmlidXRlX18ncyBkby4gIEEKICAgICBwYWNrIHZhbHVlIG9mIHplcm8gcmVzZXRzIHRoZSBiZWhhdmlvciB0byB0aGUgZGVmYXVsdC4gIFN1Y2Nlc3NpdmUKICAgICBpbnZvY2F0aW9ucyBvZiB0aGlzIHByYWdtYSBjYXVzZSB0aGUgcHJldmlvdXMgdmFsdWVzIHRvIGJlIHN0YWNrZWQsCiAgICAgc28gdGhhdCBpbnZvY2F0aW9ucyBvZiAnI3ByYWdtYSBwYWNrKHBvcCknIHdpbGwgcmV0dXJuIHRvIHRoZQogICAgIHByZXZpb3VzIHZhbHVlLgoKIC0tIE1hY3JvOiBIQU5ETEVfUFJBR01BX1BBQ0tfV0lUSF9FWFBBTlNJT04KICAgICBEZWZpbmUgdGhpcyBtYWNybywgYXMgd2VsbCBhcyAnSEFORExFX1NZU1ZfUFJBR01BJywgaWYgbWFjcm9zCiAgICAgc2hvdWxkIGJlIGV4cGFuZGVkIGluIHRoZSBhcmd1bWVudHMgb2YgJyNwcmFnbWEgcGFjaycuCgogLS0gTWFjcm86IFRBUkdFVF9ERUZBVUxUX1BBQ0tfU1RSVUNUCiAgICAgSWYgeW91ciB0YXJnZXQgcmVxdWlyZXMgYSBzdHJ1Y3R1cmUgcGFja2luZyBkZWZhdWx0IG90aGVyIHRoYW4gMAogICAgIChtZWFuaW5nIHRoZSBtYWNoaW5lIGRlZmF1bHQpLCBkZWZpbmUgdGhpcyBtYWNybyB0byB0aGUgbmVjZXNzYXJ5CiAgICAgdmFsdWUgKGluIGJ5dGVzKS4gIFRoaXMgbXVzdCBiZSBhIHZhbHVlIHRoYXQgd291bGQgYWxzbyBiZSB2YWxpZCB0bwogICAgIHVzZSB3aXRoICcjcHJhZ21hIHBhY2soKScgKHRoYXQgaXMsIGEgc21hbGwgcG93ZXIgb2YgdHdvKS4KCiAtLSBNYWNybzogSEFORExFX1BSQUdNQV9QVVNIX1BPUF9NQUNSTwogICAgIERlZmluZSB0aGlzIG1hY3JvIGlmIHlvdSB3YW50IHRvIHN1cHBvcnQgdGhlIFdpbjMyIHN0eWxlIHByYWdtYXMKICAgICAnI3ByYWdtYSBwdXNoX21hY3JvKG1hY3JvLW5hbWUtYXMtc3RyaW5nKScgYW5kICcjcHJhZ21hCiAgICAgcG9wX21hY3JvKG1hY3JvLW5hbWUtYXMtc3RyaW5nKScuICBUaGUgJyNwcmFnbWEgcHVzaF9tYWNybygKICAgICBtYWNyby1uYW1lLWFzLXN0cmluZyknIHByYWdtYSBzYXZlcyB0aGUgbmFtZWQgbWFjcm8gYW5kIHZpYQogICAgICcjcHJhZ21hIHBvcF9tYWNybyhtYWNyby1uYW1lLWFzLXN0cmluZyknIGl0IHdpbGwgcmV0dXJuIHRvIHRoZQogICAgIHByZXZpb3VzIHZhbHVlLgoKIC0tIE1hY3JvOiBET0xMQVJTX0lOX0lERU5USUZJRVJTCiAgICAgRGVmaW5lIHRoaXMgbWFjcm8gdG8gY29udHJvbCB1c2Ugb2YgdGhlIGNoYXJhY3RlciAnJCcgaW4gaWRlbnRpZmllcgogICAgIG5hbWVzIGZvciB0aGUgQyBmYW1pbHkgb2YgbGFuZ3VhZ2VzLiAgMCBtZWFucyAnJCcgaXMgbm90IGFsbG93ZWQgYnkKICAgICBkZWZhdWx0OyAxIG1lYW5zIGl0IGlzIGFsbG93ZWQuICAxIGlzIHRoZSBkZWZhdWx0OyB0aGVyZSBpcyBubyBuZWVkCiAgICAgdG8gZGVmaW5lIHRoaXMgbWFjcm8gaW4gdGhhdCBjYXNlLgoKIC0tIE1hY3JvOiBOT19ET0xMQVJfSU5fTEFCRUwKICAgICBEZWZpbmUgdGhpcyBtYWNybyBpZiB0aGUgYXNzZW1ibGVyIGRvZXMgbm90IGFjY2VwdCB0aGUgY2hhcmFjdGVyCiAgICAgJyQnIGluIGxhYmVsIG5hbWVzLiAgQnkgZGVmYXVsdCBjb25zdHJ1Y3RvcnMgYW5kIGRlc3RydWN0b3JzIGluIEcrKwogICAgIGhhdmUgJyQnIGluIHRoZSBpZGVudGlmaWVycy4gIElmIHRoaXMgbWFjcm8gaXMgZGVmaW5lZCwgJy4nIGlzIHVzZWQKICAgICBpbnN0ZWFkLgoKIC0tIE1hY3JvOiBOT19ET1RfSU5fTEFCRUwKICAgICBEZWZpbmUgdGhpcyBtYWNybyBpZiB0aGUgYXNzZW1ibGVyIGRvZXMgbm90IGFjY2VwdCB0aGUgY2hhcmFjdGVyCiAgICAgJy4nIGluIGxhYmVsIG5hbWVzLiAgQnkgZGVmYXVsdCBjb25zdHJ1Y3RvcnMgYW5kIGRlc3RydWN0b3JzIGluIEcrKwogICAgIGhhdmUgbmFtZXMgdGhhdCB1c2UgJy4nLiAgSWYgdGhpcyBtYWNybyBpcyBkZWZpbmVkLCB0aGVzZSBuYW1lcyBhcmUKICAgICByZXdyaXR0ZW4gdG8gYXZvaWQgJy4nLgoKIC0tIE1hY3JvOiBJTlNOX1NFVFNfQVJFX0RFTEFZRUQgKElOU04pCiAgICAgRGVmaW5lIHRoaXMgbWFjcm8gYXMgYSBDIGV4cHJlc3Npb24gdGhhdCBpcyBub256ZXJvIGlmIGl0IGlzIHNhZmUKICAgICBmb3IgdGhlIGRlbGF5IHNsb3Qgc2NoZWR1bGVyIHRvIHBsYWNlIGluc3RydWN0aW9ucyBpbiB0aGUgZGVsYXkKICAgICBzbG90IG9mIElOU04sIGV2ZW4gaWYgdGhleSBhcHBlYXIgdG8gdXNlIGEgcmVzb3VyY2Ugc2V0IG9yCiAgICAgY2xvYmJlcmVkIGluIElOU04uICBJTlNOIGlzIGFsd2F5cyBhICdqdW1wX2luc24nIG9yIGFuICdpbnNuJzsgR0NDCiAgICAga25vd3MgdGhhdCBldmVyeSAnY2FsbF9pbnNuJyBoYXMgdGhpcyBiZWhhdmlvci4gIE9uIG1hY2hpbmVzIHdoZXJlCiAgICAgc29tZSAnaW5zbicgb3IgJ2p1bXBfaW5zbicgaXMgcmVhbGx5IGEgZnVuY3Rpb24gY2FsbCBhbmQgaGVuY2UgaGFzCiAgICAgdGhpcyBiZWhhdmlvciwgeW91IHNob3VsZCBkZWZpbmUgdGhpcyBtYWNyby4KCiAgICAgWW91IG5lZWQgbm90IGRlZmluZSB0aGlzIG1hY3JvIGlmIGl0IHdvdWxkIGFsd2F5cyByZXR1cm4gemVyby4KCiAtLSBNYWNybzogSU5TTl9SRUZFUkVOQ0VTX0FSRV9ERUxBWUVEIChJTlNOKQogICAgIERlZmluZSB0aGlzIG1hY3JvIGFzIGEgQyBleHByZXNzaW9uIHRoYXQgaXMgbm9uemVybyBpZiBpdCBpcyBzYWZlCiAgICAgZm9yIHRoZSBkZWxheSBzbG90IHNjaGVkdWxlciB0byBwbGFjZSBpbnN0cnVjdGlvbnMgaW4gdGhlIGRlbGF5CiAgICAgc2xvdCBvZiBJTlNOLCBldmVuIGlmIHRoZXkgYXBwZWFyIHRvIHNldCBvciBjbG9iYmVyIGEgcmVzb3VyY2UKICAgICByZWZlcmVuY2VkIGluIElOU04uICBJTlNOIGlzIGFsd2F5cyBhICdqdW1wX2luc24nIG9yIGFuICdpbnNuJy4gIE9uCiAgICAgbWFjaGluZXMgd2hlcmUgc29tZSAnaW5zbicgb3IgJ2p1bXBfaW5zbicgaXMgcmVhbGx5IGEgZnVuY3Rpb24gY2FsbAogICAgIGFuZCBpdHMgb3BlcmFuZHMgYXJlIHJlZ2lzdGVycyB3aG9zZSB1c2UgaXMgYWN0dWFsbHkgaW4gdGhlCiAgICAgc3Vicm91dGluZSBpdCBjYWxscywgeW91IHNob3VsZCBkZWZpbmUgdGhpcyBtYWNyby4gIERvaW5nIHNvIGFsbG93cwogICAgIHRoZSBkZWxheSBzbG90IHNjaGVkdWxlciB0byBtb3ZlIGluc3RydWN0aW9ucyB3aGljaCBjb3B5IGFyZ3VtZW50cwogICAgIGludG8gdGhlIGFyZ3VtZW50IHJlZ2lzdGVycyBpbnRvIHRoZSBkZWxheSBzbG90IG9mIElOU04uCgogICAgIFlvdSBuZWVkIG5vdCBkZWZpbmUgdGhpcyBtYWNybyBpZiBpdCB3b3VsZCBhbHdheXMgcmV0dXJuIHplcm8uCgogLS0gTWFjcm86IE1VTFRJUExFX1NZTUJPTF9TUEFDRVMKICAgICBEZWZpbmUgdGhpcyBtYWNybyBhcyBhIEMgZXhwcmVzc2lvbiB0aGF0IGlzIG5vbnplcm8gaWYsIGluIHNvbWUKICAgICBjYXNlcywgZ2xvYmFsIHN5bWJvbHMgZnJvbSBvbmUgdHJhbnNsYXRpb24gdW5pdCBtYXkgbm90IGJlIGJvdW5kIHRvCiAgICAgdW5kZWZpbmVkIHN5bWJvbHMgaW4gYW5vdGhlciB0cmFuc2xhdGlvbiB1bml0IHdpdGhvdXQgdXNlcgogICAgIGludGVydmVudGlvbi4gIEZvciBpbnN0YW5jZSwgdW5kZXIgTWljcm9zb2Z0IFdpbmRvd3Mgc3ltYm9scyBtdXN0CiAgICAgYmUgZXhwbGljaXRseSBpbXBvcnRlZCBmcm9tIHNoYXJlZCBsaWJyYXJpZXMgKERMTHMpLgoKICAgICBZb3UgbmVlZCBub3QgZGVmaW5lIHRoaXMgbWFjcm8gaWYgaXQgd291bGQgYWx3YXlzIGV2YWx1YXRlIHRvIHplcm8uCgogLS0gVGFyZ2V0IEhvb2s6IHRyZWUgVEFSR0VUX01EX0FTTV9DTE9CQkVSUyAodHJlZSBPVVRQVVRTLCB0cmVlIElOUFVUUywKICAgICAgICAgIHRyZWUgQ0xPQkJFUlMpCiAgICAgVGhpcyB0YXJnZXQgaG9vayBzaG91bGQgYWRkIHRvIENMT0JCRVJTICdTVFJJTkdfQ1NUJyB0cmVlcyBmb3IgYW55CiAgICAgaGFyZCByZWdzIHRoZSBwb3J0IHdpc2hlcyB0byBhdXRvbWF0aWNhbGx5IGNsb2JiZXIgZm9yIGFuIGFzbS4gIEl0CiAgICAgc2hvdWxkIHJldHVybiB0aGUgcmVzdWx0IG9mIHRoZSBsYXN0ICd0cmVlX2NvbnMnIHVzZWQgdG8gYWRkIGEKICAgICBjbG9iYmVyLiAgVGhlIE9VVFBVVFMsIElOUFVUUyBhbmQgQ0xPQkJFUiBsaXN0cyBhcmUgdGhlCiAgICAgY29ycmVzcG9uZGluZyBwYXJhbWV0ZXJzIHRvIHRoZSBhc20gYW5kIG1heSBiZSBpbnNwZWN0ZWQgdG8gYXZvaWQKICAgICBjbG9iYmVyaW5nIGEgcmVnaXN0ZXIgdGhhdCBpcyBhbiBpbnB1dCBvciBvdXRwdXQgb2YgdGhlIGFzbS4gIFlvdQogICAgIGNhbiB1c2UgJ3RyZWVfb3ZlcmxhcHNfaGFyZF9yZWdfc2V0JywgZGVjbGFyZWQgaW4gJ3RyZWUuaCcsIHRvIHRlc3QKICAgICBmb3Igb3ZlcmxhcCB3aXRoIHJlZ2FyZHMgdG8gYXNtLWRlY2xhcmVkIHJlZ2lzdGVycy4KCiAtLSBNYWNybzogTUFUSF9MSUJSQVJZCiAgICAgRGVmaW5lIHRoaXMgbWFjcm8gYXMgYSBDIHN0cmluZyBjb25zdGFudCBmb3IgdGhlIGxpbmtlciBhcmd1bWVudCB0bwogICAgIGxpbmsgaW4gdGhlIHN5c3RlbSBtYXRoIGxpYnJhcnksIG9yICciIicgaWYgdGhlIHRhcmdldCBkb2VzIG5vdAogICAgIGhhdmUgYSBzZXBhcmF0ZSBtYXRoIGxpYnJhcnkuCgogICAgIFlvdSBuZWVkIG9ubHkgZGVmaW5lIHRoaXMgbWFjcm8gaWYgdGhlIGRlZmF1bHQgb2YgJyItbG0iJyBpcyB3cm9uZy4KCiAtLSBNYWNybzogTElCUkFSWV9QQVRIX0VOVgogICAgIERlZmluZSB0aGlzIG1hY3JvIGFzIGEgQyBzdHJpbmcgY29uc3RhbnQgZm9yIHRoZSBlbnZpcm9ubWVudAogICAgIHZhcmlhYmxlIHRoYXQgc3BlY2lmaWVzIHdoZXJlIHRoZSBsaW5rZXIgc2hvdWxkIGxvb2sgZm9yIGxpYnJhcmllcy4KCiAgICAgWW91IG5lZWQgb25seSBkZWZpbmUgdGhpcyBtYWNybyBpZiB0aGUgZGVmYXVsdCBvZiAnIkxJQlJBUllfUEFUSCInCiAgICAgaXMgd3JvbmcuCgogLS0gTWFjcm86IFRBUkdFVF9QT1NJWF9JTwogICAgIERlZmluZSB0aGlzIG1hY3JvIGlmIHRoZSB0YXJnZXQgc3VwcG9ydHMgdGhlIGZvbGxvd2luZyBQT1NJWCBmaWxlCiAgICAgZnVuY3Rpb25zLCBhY2Nlc3MsIG1rZGlyIGFuZCBmaWxlIGxvY2tpbmcgd2l0aCBmY250bCAvIEZfU0VUTEtXLgogICAgIERlZmluaW5nICdUQVJHRVRfUE9TSVhfSU8nIHdpbGwgZW5hYmxlIHRoZSB0ZXN0IGNvdmVyYWdlIGNvZGUgdG8KICAgICB1c2UgZmlsZSBsb2NraW5nIHdoZW4gZXhpdGluZyBhIHByb2dyYW0sIHdoaWNoIGF2b2lkcyByYWNlCiAgICAgY29uZGl0aW9ucyBpZiB0aGUgcHJvZ3JhbSBoYXMgZm9ya2VkLiAgSXQgd2lsbCBhbHNvIGNyZWF0ZQogICAgIGRpcmVjdG9yaWVzIGF0IHJ1bi10aW1lIGZvciBjcm9zcy1wcm9maWxpbmcuCgogLS0gTWFjcm86IE1BWF9DT05ESVRJT05BTF9FWEVDVVRFCgogICAgIEEgQyBleHByZXNzaW9uIGZvciB0aGUgbWF4aW11bSBudW1iZXIgb2YgaW5zdHJ1Y3Rpb25zIHRvIGV4ZWN1dGUKICAgICB2aWEgY29uZGl0aW9uYWwgZXhlY3V0aW9uIGluc3RydWN0aW9ucyBpbnN0ZWFkIG9mIGEgYnJhbmNoLiAgQQogICAgIHZhbHVlIG9mICdCUkFOQ0hfQ09TVCcrMSBpcyB0aGUgZGVmYXVsdCBpZiB0aGUgbWFjaGluZSBkb2VzIG5vdCB1c2UKICAgICBjYzAsIGFuZCAxIGlmIGl0IGRvZXMgdXNlIGNjMC4KCiAtLSBNYWNybzogSUZDVlRfTU9ESUZZX1RFU1RTIChDRV9JTkZPLCBUUlVFX0VYUFIsIEZBTFNFX0VYUFIpCiAgICAgVXNlZCBpZiB0aGUgdGFyZ2V0IG5lZWRzIHRvIHBlcmZvcm0gbWFjaGluZS1kZXBlbmRlbnQgbW9kaWZpY2F0aW9ucwogICAgIG9uIHRoZSBjb25kaXRpb25hbHMgdXNlZCBmb3IgdHVybmluZyBiYXNpYyBibG9ja3MgaW50bwogICAgIGNvbmRpdGlvbmFsbHkgZXhlY3V0ZWQgY29kZS4gIENFX0lORk8gcG9pbnRzIHRvIGEgZGF0YSBzdHJ1Y3R1cmUsCiAgICAgJ3N0cnVjdCBjZV9pZl9ibG9jaycsIHdoaWNoIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoZQogICAgIGN1cnJlbnRseSBwcm9jZXNzZWQgYmxvY2tzLiAgVFJVRV9FWFBSIGFuZCBGQUxTRV9FWFBSIGFyZSB0aGUgdGVzdHMKICAgICB0aGF0IGFyZSB1c2VkIGZvciBjb252ZXJ0aW5nIHRoZSB0aGVuLWJsb2NrIGFuZCB0aGUgZWxzZS1ibG9jaywKICAgICByZXNwZWN0aXZlbHkuICBTZXQgZWl0aGVyIFRSVUVfRVhQUiBvciBGQUxTRV9FWFBSIHRvIGEgbnVsbCBwb2ludGVyCiAgICAgaWYgdGhlIHRlc3RzIGNhbm5vdCBiZSBjb252ZXJ0ZWQuCgogLS0gTWFjcm86IElGQ1ZUX01PRElGWV9NVUxUSVBMRV9URVNUUyAoQ0VfSU5GTywgQkIsIFRSVUVfRVhQUiwKICAgICAgICAgIEZBTFNFX0VYUFIpCiAgICAgTGlrZSAnSUZDVlRfTU9ESUZZX1RFU1RTJywgYnV0IHVzZWQgd2hlbiBjb252ZXJ0aW5nIG1vcmUKICAgICBjb21wbGljYXRlZCBpZi1zdGF0ZW1lbnRzIGludG8gY29uZGl0aW9ucyBjb21iaW5lZCBieSAnYW5kJyBhbmQKICAgICAnb3InIG9wZXJhdGlvbnMuICBCQiBjb250YWlucyB0aGUgYmFzaWMgYmxvY2sgdGhhdCBjb250YWlucyB0aGUKICAgICB0ZXN0IHRoYXQgaXMgY3VycmVudGx5IGJlaW5nIHByb2Nlc3NlZCBhbmQgYWJvdXQgdG8gYmUgdHVybmVkIGludG8KICAgICBhIGNvbmRpdGlvbi4KCiAtLSBNYWNybzogSUZDVlRfTU9ESUZZX0lOU04gKENFX0lORk8sIFBBVFRFUk4sIElOU04pCiAgICAgQSBDIGV4cHJlc3Npb24gdG8gbW9kaWZ5IHRoZSBQQVRURVJOIG9mIGFuIElOU04gdGhhdCBpcyB0byBiZQogICAgIGNvbnZlcnRlZCB0byBjb25kaXRpb25hbCBleGVjdXRpb24gZm9ybWF0LiAgQ0VfSU5GTyBwb2ludHMgdG8gYQogICAgIGRhdGEgc3RydWN0dXJlLCAnc3RydWN0IGNlX2lmX2Jsb2NrJywgd2hpY2ggY29udGFpbnMgaW5mb3JtYXRpb24KICAgICBhYm91dCB0aGUgY3VycmVudGx5IHByb2Nlc3NlZCBibG9ja3MuCgogLS0gTWFjcm86IElGQ1ZUX01PRElGWV9GSU5BTCAoQ0VfSU5GTykKICAgICBBIEMgZXhwcmVzc2lvbiB0byBwZXJmb3JtIGFueSBmaW5hbCBtYWNoaW5lIGRlcGVuZGVudCBtb2RpZmljYXRpb25zCiAgICAgaW4gY29udmVydGluZyBjb2RlIHRvIGNvbmRpdGlvbmFsIGV4ZWN1dGlvbi4gIFRoZSBpbnZvbHZlZCBiYXNpYwogICAgIGJsb2NrcyBjYW4gYmUgZm91bmQgaW4gdGhlICdzdHJ1Y3QgY2VfaWZfYmxvY2snIHN0cnVjdHVyZSB0aGF0IGlzCiAgICAgcG9pbnRlZCB0byBieSBDRV9JTkZPLgoKIC0tIE1hY3JvOiBJRkNWVF9NT0RJRllfQ0FOQ0VMIChDRV9JTkZPKQogICAgIEEgQyBleHByZXNzaW9uIHRvIGNhbmNlbCBhbnkgbWFjaGluZSBkZXBlbmRlbnQgbW9kaWZpY2F0aW9ucyBpbgogICAgIGNvbnZlcnRpbmcgY29kZSB0byBjb25kaXRpb25hbCBleGVjdXRpb24uICBUaGUgaW52b2x2ZWQgYmFzaWMKICAgICBibG9ja3MgY2FuIGJlIGZvdW5kIGluIHRoZSAnc3RydWN0IGNlX2lmX2Jsb2NrJyBzdHJ1Y3R1cmUgdGhhdCBpcwogICAgIHBvaW50ZWQgdG8gYnkgQ0VfSU5GTy4KCiAtLSBNYWNybzogSUZDVlRfSU5JVF9FWFRSQV9GSUVMRFMgKENFX0lORk8pCiAgICAgQSBDIGV4cHJlc3Npb24gdG8gaW5pdGlhbGl6ZSBhbnkgZXh0cmEgZmllbGRzIGluIGEgJ3N0cnVjdAogICAgIGNlX2lmX2Jsb2NrJyBzdHJ1Y3R1cmUsIHdoaWNoIGFyZSBkZWZpbmVkIGJ5IHRoZQogICAgICdJRkNWVF9FWFRSQV9GSUVMRFMnIG1hY3JvLgoKIC0tIE1hY3JvOiBJRkNWVF9FWFRSQV9GSUVMRFMKICAgICBJZiBkZWZpbmVkLCBpdCBzaG91bGQgZXhwYW5kIHRvIGEgc2V0IG9mIGZpZWxkIGRlY2xhcmF0aW9ucyB0aGF0CiAgICAgd2lsbCBiZSBhZGRlZCB0byB0aGUgJ3N0cnVjdCBjZV9pZl9ibG9jaycgc3RydWN0dXJlLiAgVGhlc2Ugc2hvdWxkCiAgICAgYmUgaW5pdGlhbGl6ZWQgYnkgdGhlICdJRkNWVF9JTklUX0VYVFJBX0ZJRUxEUycgbWFjcm8uCgogLS0gVGFyZ2V0IEhvb2s6IHZvaWQgVEFSR0VUX01BQ0hJTkVfREVQRU5ERU5UX1JFT1JHICgpCiAgICAgSWYgbm9uLW51bGwsIHRoaXMgaG9vayBwZXJmb3JtcyBhIHRhcmdldC1zcGVjaWZpYyBwYXNzIG92ZXIgdGhlCiAgICAgaW5zdHJ1Y3Rpb24gc3RyZWFtLiAgVGhlIGNvbXBpbGVyIHdpbGwgcnVuIGl0IGF0IGFsbCBvcHRpbWl6YXRpb24KICAgICBsZXZlbHMsIGp1c3QgYmVmb3JlIHRoZSBwb2ludCBhdCB3aGljaCBpdCBub3JtYWxseSBkb2VzCiAgICAgZGVsYXllZC1icmFuY2ggc2NoZWR1bGluZy4KCiAgICAgVGhlIGV4YWN0IHB1cnBvc2Ugb2YgdGhlIGhvb2sgdmFyaWVzIGZyb20gdGFyZ2V0IHRvIHRhcmdldC4gIFNvbWUKICAgICB1c2UgaXQgdG8gZG8gdHJhbnNmb3JtYXRpb25zIHRoYXQgYXJlIG5lY2Vzc2FyeSBmb3IgY29ycmVjdG5lc3MsCiAgICAgc3VjaCBhcyBsYXlpbmcgb3V0IGluLWZ1bmN0aW9uIGNvbnN0YW50IHBvb2xzIG9yIGF2b2lkaW5nIGhhcmR3YXJlCiAgICAgaGF6YXJkcy4gIE90aGVycyB1c2UgaXQgYXMgYW4gb3Bwb3J0dW5pdHkgdG8gZG8gc29tZQogICAgIG1hY2hpbmUtZGVwZW5kZW50IG9wdGltaXphdGlvbnMuCgogICAgIFlvdSBuZWVkIG5vdCBpbXBsZW1lbnQgdGhlIGhvb2sgaWYgaXQgaGFzIG5vdGhpbmcgdG8gZG8uICBUaGUKICAgICBkZWZhdWx0IGRlZmluaXRpb24gaXMgbnVsbC4KCiAtLSBUYXJnZXQgSG9vazogdm9pZCBUQVJHRVRfSU5JVF9CVUlMVElOUyAoKQogICAgIERlZmluZSB0aGlzIGhvb2sgaWYgeW91IGhhdmUgYW55IG1hY2hpbmUtc3BlY2lmaWMgYnVpbHQtaW4KICAgICBmdW5jdGlvbnMgdGhhdCBuZWVkIHRvIGJlIGRlZmluZWQuICBJdCBzaG91bGQgYmUgYSBmdW5jdGlvbiB0aGF0CiAgICAgcGVyZm9ybXMgdGhlIG5lY2Vzc2FyeSBzZXR1cC4KCiAgICAgTWFjaGluZSBzcGVjaWZpYyBidWlsdC1pbiBmdW5jdGlvbnMgY2FuIGJlIHVzZWZ1bCB0byBleHBhbmQgc3BlY2lhbAogICAgIG1hY2hpbmUgaW5zdHJ1Y3Rpb25zIHRoYXQgd291bGQgb3RoZXJ3aXNlIG5vdCBub3JtYWxseSBiZSBnZW5lcmF0ZWQKICAgICBiZWNhdXNlIHRoZXkgaGF2ZSBubyBlcXVpdmFsZW50IGluIHRoZSBzb3VyY2UgbGFuZ3VhZ2UgKGZvcgogICAgIGV4YW1wbGUsIFNJTUQgdmVjdG9yIGluc3RydWN0aW9ucyBvciBwcmVmZXRjaCBpbnN0cnVjdGlvbnMpLgoKICAgICBUbyBjcmVhdGUgYSBidWlsdC1pbiBmdW5jdGlvbiwgY2FsbCB0aGUgZnVuY3Rpb24KICAgICAnbGFuZ19ob29rcy5idWlsdGluX2Z1bmN0aW9uJyB3aGljaCBpcyBkZWZpbmVkIGJ5IHRoZSBsYW5ndWFnZQogICAgIGZyb250IGVuZC4gIFlvdSBjYW4gdXNlIGFueSB0eXBlIG5vZGVzIHNldCB1cCBieQogICAgICdidWlsZF9jb21tb25fdHJlZV9ub2RlcycgYW5kICdidWlsZF9jb21tb25fdHJlZV9ub2Rlc18yJzsgb25seQogICAgIGxhbmd1YWdlIGZyb250IGVuZHMgdGhhdCB1c2UgdGhvc2UgdHdvIGZ1bmN0aW9ucyB3aWxsIGNhbGwKICAgICAnVEFSR0VUX0lOSVRfQlVJTFRJTlMnLgoKIC0tIFRhcmdldCBIb29rOiBydHggVEFSR0VUX0VYUEFORF9CVUlMVElOICh0cmVlIEVYUCwgcnR4IFRBUkdFVCwgcnR4CiAgICAgICAgICBTVUJUQVJHRVQsIGVudW0gbWFjaGluZV9tb2RlIE1PREUsIGludCBJR05PUkUpCgogICAgIEV4cGFuZCBhIGNhbGwgdG8gYSBtYWNoaW5lIHNwZWNpZmljIGJ1aWx0LWluIGZ1bmN0aW9uIHRoYXQgd2FzIHNldAogICAgIHVwIGJ5ICdUQVJHRVRfSU5JVF9CVUlMVElOUycuICBFWFAgaXMgdGhlIGV4cHJlc3Npb24gZm9yIHRoZQogICAgIGZ1bmN0aW9uIGNhbGw7IHRoZSByZXN1bHQgc2hvdWxkIGdvIHRvIFRBUkdFVCBpZiB0aGF0IGlzCiAgICAgY29udmVuaWVudCwgYW5kIGhhdmUgbW9kZSBNT0RFIGlmIHRoYXQgaXMgY29udmVuaWVudC4gIFNVQlRBUkdFVAogICAgIG1heSBiZSB1c2VkIGFzIHRoZSB0YXJnZXQgZm9yIGNvbXB1dGluZyBvbmUgb2YgRVhQJ3Mgb3BlcmFuZHMuCiAgICAgSUdOT1JFIGlzIG5vbnplcm8gaWYgdGhlIHZhbHVlIGlzIHRvIGJlIGlnbm9yZWQuICBUaGlzIGZ1bmN0aW9uCiAgICAgc2hvdWxkIHJldHVybiB0aGUgcmVzdWx0IG9mIHRoZSBjYWxsIHRvIHRoZSBidWlsdC1pbiBmdW5jdGlvbi4KCiAtLSBUYXJnZXQgSG9vazogdHJlZSBUQVJHRVRfUkVTT0xWRV9PVkVSTE9BREVEX0JVSUxUSU4gKHRyZWUgRk5ERUNMLAogICAgICAgICAgdHJlZSBBUkdMSVNUKQoKICAgICBTZWxlY3QgYSByZXBsYWNlbWVudCBmb3IgYSBtYWNoaW5lIHNwZWNpZmljIGJ1aWx0LWluIGZ1bmN0aW9uIHRoYXQKICAgICB3YXMgc2V0IHVwIGJ5ICdUQVJHRVRfSU5JVF9CVUlMVElOUycuICBUaGlzIGlzIGRvbmUgX2JlZm9yZV8KICAgICByZWd1bGFyIHR5cGUgY2hlY2tpbmcsIGFuZCBzbyBhbGxvd3MgdGhlIHRhcmdldCB0byBpbXBsZW1lbnQgYQogICAgIGNydWRlIGZvcm0gb2YgZnVuY3Rpb24gb3ZlcmxvYWRpbmcuICBGTkRFQ0wgaXMgdGhlIGRlY2xhcmF0aW9uIG9mCiAgICAgdGhlIGJ1aWx0LWluIGZ1bmN0aW9uLiAgQVJHTElTVCBpcyB0aGUgbGlzdCBvZiBhcmd1bWVudHMgcGFzc2VkIHRvCiAgICAgdGhlIGJ1aWx0LWluIGZ1bmN0aW9uLiAgVGhlIHJlc3VsdCBpcyBhIGNvbXBsZXRlIGV4cHJlc3Npb24gdGhhdAogICAgIGltcGxlbWVudHMgdGhlIG9wZXJhdGlvbiwgdXN1YWxseSBhbm90aGVyICdDQUxMX0VYUFInLgoKIC0tIFRhcmdldCBIb29rOiB0cmVlIFRBUkdFVF9GT0xEX0JVSUxUSU4gKHRyZWUgRk5ERUNMLCB0cmVlIEFSR0xJU1QsCiAgICAgICAgICBib29sIElHTk9SRSkKCiAgICAgRm9sZCBhIGNhbGwgdG8gYSBtYWNoaW5lIHNwZWNpZmljIGJ1aWx0LWluIGZ1bmN0aW9uIHRoYXQgd2FzIHNldCB1cAogICAgIGJ5ICdUQVJHRVRfSU5JVF9CVUlMVElOUycuICBGTkRFQ0wgaXMgdGhlIGRlY2xhcmF0aW9uIG9mIHRoZQogICAgIGJ1aWx0LWluIGZ1bmN0aW9uLiAgQVJHTElTVCBpcyB0aGUgbGlzdCBvZiBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZQogICAgIGJ1aWx0LWluIGZ1bmN0aW9uLiAgVGhlIHJlc3VsdCBpcyBhbm90aGVyIHRyZWUgY29udGFpbmluZyBhCiAgICAgc2ltcGxpZmllZCBleHByZXNzaW9uIGZvciB0aGUgY2FsbCdzIHJlc3VsdC4gIElmIElHTk9SRSBpcyB0cnVlIHRoZQogICAgIHZhbHVlIHdpbGwgYmUgaWdub3JlZC4KCiAtLSBUYXJnZXQgSG9vazogY29uc3QgY2hhciAqIFRBUkdFVF9JTlZBTElEX1dJVEhJTl9ET0xPT1AgKHJ0eCBJTlNOKQoKICAgICBUYWtlIGFuIGluc3RydWN0aW9uIGluIElOU04gYW5kIHJldHVybiBOVUxMIGlmIGl0IGlzIHZhbGlkIHdpdGhpbiBhCiAgICAgbG93LW92ZXJoZWFkIGxvb3AsIG90aGVyd2lzZSByZXR1cm4gYSBzdHJpbmcgd2h5IGRvbG9vcCBjb3VsZCBub3QKICAgICBiZSBhcHBsaWVkLgoKICAgICBNYW55IHRhcmdldHMgdXNlIHNwZWNpYWwgcmVnaXN0ZXJzIGZvciBsb3ctb3ZlcmhlYWQgbG9vcGluZy4gIEZvcgogICAgIGFueSBpbnN0cnVjdGlvbiB0aGF0IGNsb2JiZXJzIHRoZXNlIHRoaXMgZnVuY3Rpb24gc2hvdWxkIHJldHVybiBhCiAgICAgc3RyaW5nIGluZGljYXRpbmcgdGhlIHJlYXNvbiB3aHkgdGhlIGRvbG9vcCBjb3VsZCBub3QgYmUgYXBwbGllZC4KICAgICBCeSBkZWZhdWx0LCB0aGUgUlRMIGxvb3Agb3B0aW1pemVyIGRvZXMgbm90IHVzZSBhIHByZXNlbnQgZG9sb29wCiAgICAgcGF0dGVybiBmb3IgbG9vcHMgY29udGFpbmluZyBmdW5jdGlvbiBjYWxscyBvciBicmFuY2ggb24gdGFibGUKICAgICBpbnN0cnVjdGlvbnMuCgogLS0gTWFjcm86IE1EX0NBTl9SRURJUkVDVF9CUkFOQ0ggKEJSQU5DSDEsIEJSQU5DSDIpCgogICAgIFRha2UgYSBicmFuY2ggaW5zbiBpbiBCUkFOQ0gxIGFuZCBhbm90aGVyIGluIEJSQU5DSDIuICBSZXR1cm4gdHJ1ZQogICAgIGlmIHJlZGlyZWN0aW5nIEJSQU5DSDEgdG8gdGhlIGRlc3RpbmF0aW9uIG9mIEJSQU5DSDIgaXMgcG9zc2libGUuCgogICAgIE9uIHNvbWUgdGFyZ2V0cywgYnJhbmNoZXMgbWF5IGhhdmUgYSBsaW1pdGVkIHJhbmdlLiAgT3B0aW1pemluZyB0aGUKICAgICBmaWxsaW5nIG9mIGRlbGF5IHNsb3RzIGNhbiByZXN1bHQgaW4gYnJhbmNoZXMgYmVpbmcgcmVkaXJlY3RlZCwgYW5kCiAgICAgdGhpcyBtYXkgaW4gdHVybiBjYXVzZSBhIGJyYW5jaCBvZmZzZXQgdG8gb3ZlcmZsb3cuCgogLS0gVGFyZ2V0IEhvb2s6IGJvb2wgVEFSR0VUX0NPTU1VVEFUSVZFX1AgKHJ0eCBYLCBPVVRFUl9DT0RFKQogICAgIFRoaXMgdGFyZ2V0IGhvb2sgcmV0dXJucyAndHJ1ZScgaWYgWCBpcyBjb25zaWRlcmVkIHRvIGJlCiAgICAgY29tbXV0YXRpdmUuICBVc3VhbGx5LCB0aGlzIGlzIGp1c3QgQ09NTVVUQVRJVkVfUCAoWCksIGJ1dCB0aGUgSFAKICAgICBQQSBkb2Vzbid0IGNvbnNpZGVyIFBMVVMgdG8gYmUgY29tbXV0YXRpdmUgaW5zaWRlIGEgTUVNLgogICAgIE9VVEVSX0NPREUgaXMgdGhlIHJ0eCBjb2RlIG9mIHRoZSBlbmNsb3NpbmcgcnRsLCBpZiBrbm93biwKICAgICBvdGhlcndpc2UgaXQgaXMgVU5LTk9XTi4KCiAtLSBUYXJnZXQgSG9vazogcnR4IFRBUkdFVF9BTExPQ0FURV9JTklUSUFMX1ZBTFVFIChydHggSEFSRF9SRUcpCgogICAgIFdoZW4gdGhlIGluaXRpYWwgdmFsdWUgb2YgYSBoYXJkIHJlZ2lzdGVyIGhhcyBiZWVuIGNvcGllZCBpbiBhCiAgICAgcHNldWRvIHJlZ2lzdGVyLCBpdCBpcyBvZnRlbiBub3QgbmVjZXNzYXJ5IHRvIGFjdHVhbGx5IGFsbG9jYXRlCiAgICAgYW5vdGhlciByZWdpc3RlciB0byB0aGlzIHBzZXVkbyByZWdpc3RlciwgYmVjYXVzZSB0aGUgb3JpZ2luYWwgaGFyZAogICAgIHJlZ2lzdGVyIG9yIGEgc3RhY2sgc2xvdCBpdCBoYXMgYmVlbiBzYXZlZCBpbnRvIGNhbiBiZSB1c2VkLgogICAgICdUQVJHRVRfQUxMT0NBVEVfSU5JVElBTF9WQUxVRScgaXMgY2FsbGVkIGF0IHRoZSBzdGFydCBvZiByZWdpc3RlcgogICAgIGFsbG9jYXRpb24gb25jZSBmb3IgZWFjaCBoYXJkIHJlZ2lzdGVyIHRoYXQgaGFkIGl0cyBpbml0aWFsIHZhbHVlCiAgICAgY29waWVkIGJ5IHVzaW5nICdnZXRfZnVuY19oYXJkX3JlZ19pbml0aWFsX3ZhbCcgb3IKICAgICAnZ2V0X2hhcmRfcmVnX2luaXRpYWxfdmFsJy4gIFBvc3NpYmxlIHZhbHVlcyBhcmUgJ05VTExfUlRYJywgaWYgeW91CiAgICAgZG9uJ3Qgd2FudCB0byBkbyBhbnkgc3BlY2lhbCBhbGxvY2F0aW9uLCBhICdSRUcnIHJ0eC0tdGhhdCB3b3VsZAogICAgIHR5cGljYWxseSBiZSB0aGUgaGFyZCByZWdpc3RlciBpdHNlbGYsIGlmIGl0IGlzIGtub3duIG5vdCB0byBiZQogICAgIGNsb2JiZXJlZC0tb3IgYSAnTUVNJy4gIElmIHlvdSBhcmUgcmV0dXJuaW5nIGEgJ01FTScsIHRoaXMgaXMgb25seQogICAgIGEgaGludCBmb3IgdGhlIGFsbG9jYXRvcjsgaXQgbWlnaHQgZGVjaWRlIHRvIHVzZSBhbm90aGVyIHJlZ2lzdGVyCiAgICAgYW55d2F5cy4gIFlvdSBtYXkgdXNlICdjdXJyZW50X2Z1bmN0aW9uX2xlYWZfZnVuY3Rpb24nIGluIHRoZSBob29rLAogICAgIGZ1bmN0aW9ucyB0aGF0IHVzZSAnUkVHX05fU0VUUycsIHRvIGRldGVybWluZSBpZiB0aGUgaGFyZCByZWdpc3RlcgogICAgIGluIHF1ZXN0aW9uIHdpbGwgbm90IGJlIGNsb2JiZXJlZC4gIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoaXMgaG9vawogICAgIGlzICdOVUxMJywgd2hpY2ggZGlzYWJsZXMgYW55IHNwZWNpYWwgYWxsb2NhdGlvbi4KCiAtLSBUYXJnZXQgSG9vazogaW50IFRBUkdFVF9VTlNQRUNfTUFZX1RSQVBfUCAoY29uc3RfcnR4IFgsIHVuc2lnbmVkCiAgICAgICAgICBGTEFHUykKICAgICBUaGlzIHRhcmdldCBob29rIHJldHVybnMgbm9uemVybyBpZiBYLCBhbiAndW5zcGVjJyBvcgogICAgICd1bnNwZWNfdm9sYXRpbGUnIG9wZXJhdGlvbiwgbWlnaHQgY2F1c2UgYSB0cmFwLiAgVGFyZ2V0cyBjYW4gdXNlCiAgICAgdGhpcyBob29rIHRvIGVuaGFuY2UgcHJlY2lzaW9uIG9mIGFuYWx5c2lzIGZvciAndW5zcGVjJyBhbmQKICAgICAndW5zcGVjX3ZvbGF0aWxlJyBvcGVyYXRpb25zLiAgWW91IG1heSBjYWxsICdtYXlfdHJhcF9wXzEnIHRvCiAgICAgYW5hbHl6ZSBpbm5lciBlbGVtZW50cyBvZiBYIGluIHdoaWNoIGNhc2UgRkxBR1Mgc2hvdWxkIGJlIHBhc3NlZAogICAgIGFsb25nLgoKIC0tIFRhcmdldCBIb29rOiB2b2lkIFRBUkdFVF9TRVRfQ1VSUkVOVF9GVU5DVElPTiAodHJlZSBERUNMKQogICAgIFRoZSBjb21waWxlciBpbnZva2VzIHRoaXMgaG9vayB3aGVuZXZlciBpdCBjaGFuZ2VzIGl0cyBjdXJyZW50CiAgICAgZnVuY3Rpb24gY29udGV4dCAoJ2NmdW4nKS4gIFlvdSBjYW4gZGVmaW5lIHRoaXMgZnVuY3Rpb24gaWYgdGhlCiAgICAgYmFjayBlbmQgbmVlZHMgdG8gcGVyZm9ybSBhbnkgaW5pdGlhbGl6YXRpb24gb3IgcmVzZXQgYWN0aW9ucyBvbiBhCiAgICAgcGVyLWZ1bmN0aW9uIGJhc2lzLiAgRm9yIGV4YW1wbGUsIGl0IG1heSBiZSB1c2VkIHRvIGltcGxlbWVudAogICAgIGZ1bmN0aW9uIGF0dHJpYnV0ZXMgdGhhdCBhZmZlY3QgcmVnaXN0ZXIgdXNhZ2Ugb3IgY29kZSBnZW5lcmF0aW9uCiAgICAgcGF0dGVybnMuICBUaGUgYXJndW1lbnQgREVDTCBpcyB0aGUgZGVjbGFyYXRpb24gZm9yIHRoZSBuZXcKICAgICBmdW5jdGlvbiBjb250ZXh0LCBhbmQgbWF5IGJlIG51bGwgdG8gaW5kaWNhdGUgdGhhdCB0aGUgY29tcGlsZXIgaGFzCiAgICAgbGVmdCBhIGZ1bmN0aW9uIGNvbnRleHQgYW5kIGlzIHJldHVybmluZyB0byBwcm9jZXNzaW5nIGF0IHRoZSB0b3AKICAgICBsZXZlbC4gIFRoZSBkZWZhdWx0IGhvb2sgZnVuY3Rpb24gZG9lcyBub3RoaW5nLgoKICAgICBHQ0Mgc2V0cyAnY2Z1bicgdG8gYSBkdW1teSBmdW5jdGlvbiBjb250ZXh0IGR1cmluZyBpbml0aWFsaXphdGlvbgogICAgIG9mIHNvbWUgcGFydHMgb2YgdGhlIGJhY2sgZW5kLiAgVGhlIGhvb2sgZnVuY3Rpb24gaXMgbm90IGludm9rZWQgaW4KICAgICB0aGlzIHNpdHVhdGlvbjsgeW91IG5lZWQgbm90IHdvcnJ5IGFib3V0IHRoZSBob29rIGJlaW5nIGludm9rZWQKICAgICByZWN1cnNpdmVseSwgb3Igd2hlbiB0aGUgYmFjayBlbmQgaXMgaW4gYSBwYXJ0aWFsbHktaW5pdGlhbGl6ZWQKICAgICBzdGF0ZS4KCiAtLSBNYWNybzogVEFSR0VUX09CSkVDVF9TVUZGSVgKICAgICBEZWZpbmUgdGhpcyBtYWNybyB0byBiZSBhIEMgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgc3VmZml4IGZvcgogICAgIG9iamVjdCBmaWxlcyBvbiB5b3VyIHRhcmdldCBtYWNoaW5lLiAgSWYgeW91IGRvIG5vdCBkZWZpbmUgdGhpcwogICAgIG1hY3JvLCBHQ0Mgd2lsbCB1c2UgJy5vJyBhcyB0aGUgc3VmZml4IGZvciBvYmplY3QgZmlsZXMuCgogLS0gTWFjcm86IFRBUkdFVF9FWEVDVVRBQkxFX1NVRkZJWAogICAgIERlZmluZSB0aGlzIG1hY3JvIHRvIGJlIGEgQyBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBzdWZmaXggdG8gYmUKICAgICBhdXRvbWF0aWNhbGx5IGFkZGVkIHRvIGV4ZWN1dGFibGUgZmlsZXMgb24geW91ciB0YXJnZXQgbWFjaGluZS4gIElmCiAgICAgeW91IGRvIG5vdCBkZWZpbmUgdGhpcyBtYWNybywgR0NDIHdpbGwgdXNlIHRoZSBudWxsIHN0cmluZyBhcyB0aGUKICAgICBzdWZmaXggZm9yIGV4ZWN1dGFibGUgZmlsZXMuCgogLS0gTWFjcm86IENPTExFQ1RfRVhQT1JUX0xJU1QKICAgICBJZiBkZWZpbmVkLCAnY29sbGVjdDInIHdpbGwgc2NhbiB0aGUgaW5kaXZpZHVhbCBvYmplY3QgZmlsZXMKICAgICBzcGVjaWZpZWQgb24gaXRzIGNvbW1hbmQgbGluZSBhbmQgY3JlYXRlIGFuIGV4cG9ydCBsaXN0IGZvciB0aGUKICAgICBsaW5rZXIuICBEZWZpbmUgdGhpcyBtYWNybyBmb3Igc3lzdGVtcyBsaWtlIEFJWCwgd2hlcmUgdGhlIGxpbmtlcgogICAgIGRpc2NhcmRzIG9iamVjdCBmaWxlcyB0aGF0IGFyZSBub3QgcmVmZXJlbmNlZCBmcm9tICdtYWluJyBhbmQgdXNlcwogICAgIGV4cG9ydCBsaXN0cy4KCiAtLSBNYWNybzogTU9ESUZZX0pOSV9NRVRIT0RfQ0FMTCAoTURFQ0wpCiAgICAgRGVmaW5lIHRoaXMgbWFjcm8gdG8gYSBDIGV4cHJlc3Npb24gcmVwcmVzZW50aW5nIGEgdmFyaWFudCBvZiB0aGUKICAgICBtZXRob2QgY2FsbCBNREVDTCwgaWYgSmF2YSBOYXRpdmUgSW50ZXJmYWNlIChKTkkpIG1ldGhvZHMgbXVzdCBiZQogICAgIGludm9rZWQgZGlmZmVyZW50bHkgZnJvbSBvdGhlciBtZXRob2RzIG9uIHlvdXIgdGFyZ2V0LiAgRm9yCiAgICAgZXhhbXBsZSwgb24gMzItYml0IE1pY3Jvc29mdCBXaW5kb3dzLCBKTkkgbWV0aG9kcyBtdXN0IGJlIGludm9rZWQKICAgICB1c2luZyB0aGUgJ3N0ZGNhbGwnIGNhbGxpbmcgY29udmVudGlvbiBhbmQgdGhpcyBtYWNybyBpcyB0aGVuCiAgICAgZGVmaW5lZCBhcyB0aGlzIGV4cHJlc3Npb246CgogICAgICAgICAgYnVpbGRfdHlwZV9hdHRyaWJ1dGVfdmFyaWFudCAoTURFQ0wsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZF90cmVlX2xpc3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnZXRfaWRlbnRpZmllciAoInN0ZGNhbGwiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKSkKCiAtLSBUYXJnZXQgSG9vazogYm9vbCBUQVJHRVRfQ0FOTk9UX01PRElGWV9KVU1QU19QICh2b2lkKQogICAgIFRoaXMgdGFyZ2V0IGhvb2sgcmV0dXJucyAndHJ1ZScgcGFzdCB0aGUgcG9pbnQgaW4gd2hpY2ggbmV3IGp1bXAKICAgICBpbnN0cnVjdGlvbnMgY291bGQgYmUgY3JlYXRlZC4gIE9uIG1hY2hpbmVzIHRoYXQgcmVxdWlyZSBhIHJlZ2lzdGVyCiAgICAgZm9yIGV2ZXJ5IGp1bXAgc3VjaCBhcyB0aGUgU0htZWRpYSBJU0Egb2YgU0g1LCB0aGlzIHBvaW50IHdvdWxkCiAgICAgdHlwaWNhbGx5IGJlIHJlbG9hZCwgc28gdGhpcyB0YXJnZXQgaG9vayBzaG91bGQgYmUgZGVmaW5lZCB0byBhCiAgICAgZnVuY3Rpb24gc3VjaCBhczoKCiAgICAgICAgICBzdGF0aWMgYm9vbAogICAgICAgICAgY2Fubm90X21vZGlmeV9qdW1wc19wYXN0X3JlbG9hZF9wICgpCiAgICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAocmVsb2FkX2NvbXBsZXRlZCB8fCByZWxvYWRfaW5fcHJvZ3Jlc3MpOwogICAgICAgICAgfQoKIC0tIFRhcmdldCBIb29rOiBpbnQgVEFSR0VUX0JSQU5DSF9UQVJHRVRfUkVHSVNURVJfQ0xBU1MgKHZvaWQpCiAgICAgVGhpcyB0YXJnZXQgaG9vayByZXR1cm5zIGEgcmVnaXN0ZXIgY2xhc3MgZm9yIHdoaWNoIGJyYW5jaCB0YXJnZXQKICAgICByZWdpc3RlciBvcHRpbWl6YXRpb25zIHNob3VsZCBiZSBhcHBsaWVkLiAgQWxsIHJlZ2lzdGVycyBpbiB0aGlzCiAgICAgY2xhc3Mgc2hvdWxkIGJlIHVzYWJsZSBpbnRlcmNoYW5nZWFibHkuICBBZnRlciByZWxvYWQsIHJlZ2lzdGVycyBpbgogICAgIHRoaXMgY2xhc3Mgd2lsbCBiZSByZS1hbGxvY2F0ZWQgYW5kIGxvYWRzIHdpbGwgYmUgaG9pc3RlZCBvdXQgb2YKICAgICBsb29wcyBhbmQgYmUgc3ViamVjdGVkIHRvIGludGVyLWJsb2NrIHNjaGVkdWxpbmcuCgogLS0gVGFyZ2V0IEhvb2s6IGJvb2wgVEFSR0VUX0JSQU5DSF9UQVJHRVRfUkVHSVNURVJfQ0FMTEVFX1NBVkVEIChib29sCiAgICAgICAgICBBRlRFUl9QUk9MT0dVRV9FUElMT0dVRV9HRU4pCiAgICAgQnJhbmNoIHRhcmdldCByZWdpc3RlciBvcHRpbWl6YXRpb24gd2lsbCBieSBkZWZhdWx0IGV4Y2x1ZGUKICAgICBjYWxsZWUtc2F2ZWQgcmVnaXN0ZXJzIHRoYXQgYXJlIG5vdCBhbHJlYWR5IGxpdmUgZHVyaW5nIHRoZSBjdXJyZW50CiAgICAgZnVuY3Rpb247IGlmIHRoaXMgdGFyZ2V0IGhvb2sgcmV0dXJucyB0cnVlLCB0aGV5IHdpbGwgYmUgaW5jbHVkZWQuCiAgICAgVGhlIHRhcmdldCBjb2RlIG11c3QgdGhhbiBtYWtlIHN1cmUgdGhhdCBhbGwgdGFyZ2V0IHJlZ2lzdGVycyBpbgogICAgIHRoZSBjbGFzcyByZXR1cm5lZCBieSAnVEFSR0VUX0JSQU5DSF9UQVJHRVRfUkVHSVNURVJfQ0xBU1MnIHRoYXQKICAgICBtaWdodCBuZWVkIHNhdmluZyBhcmUgc2F2ZWQuICBBRlRFUl9QUk9MT0dVRV9FUElMT0dVRV9HRU4gaW5kaWNhdGVzCiAgICAgaWYgcHJvbG9ndWVzIGFuZCBlcGlsb2d1ZXMgaGF2ZSBhbHJlYWR5IGJlZW4gZ2VuZXJhdGVkLiAgTm90ZSwgZXZlbgogICAgIGlmIHlvdSBvbmx5IHJldHVybiB0cnVlIHdoZW4gQUZURVJfUFJPTE9HVUVfRVBJTE9HVUVfR0VOIGlzIGZhbHNlLAogICAgIHlvdSBzdGlsbCBhcmUgbGlrZWx5IHRvIGhhdmUgdG8gbWFrZSBzcGVjaWFsIHByb3Zpc2lvbnMgaW4KICAgICAnSU5JVElBTF9FTElNSU5BVElPTl9PRkZTRVQnIHRvIHJlc2VydmUgc3BhY2UgZm9yIGNhbGxlci1zYXZlZAogICAgIHRhcmdldCByZWdpc3RlcnMuCgogLS0gTWFjcm86IFBPV0lfTUFYX01VTFRTCiAgICAgSWYgZGVmaW5lZCwgdGhpcyBtYWNybyBpcyBpbnRlcnByZXRlZCBhcyBhIHNpZ25lZCBpbnRlZ2VyIEMKICAgICBleHByZXNzaW9uIHRoYXQgc3BlY2lmaWVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBmbG9hdGluZyBwb2ludAogICAgIG11bHRpcGxpY2F0aW9ucyB0aGF0IHNob3VsZCBiZSBlbWl0dGVkIHdoZW4gZXhwYW5kaW5nCiAgICAgZXhwb25lbnRpYXRpb24gYnkgYW4gaW50ZWdlciBjb25zdGFudCBpbmxpbmUuICBXaGVuIHRoaXMgdmFsdWUgaXMKICAgICBkZWZpbmVkLCBleHBvbmVudGlhdGlvbiByZXF1aXJpbmcgbW9yZSB0aGFuIHRoaXMgbnVtYmVyIG9mCiAgICAgbXVsdGlwbGljYXRpb25zIGlzIGltcGxlbWVudGVkIGJ5IGNhbGxpbmcgdGhlIHN5c3RlbSBsaWJyYXJ5J3MKICAgICAncG93JywgJ3Bvd2YnIG9yICdwb3dsJyByb3V0aW5lcy4gIFRoZSBkZWZhdWx0IHZhbHVlIHBsYWNlcyBubwogICAgIHVwcGVyIGJvdW5kIG9uIHRoZSBtdWx0aXBsaWNhdGlvbiBjb3VudC4KCiAtLSBNYWNybzogdm9pZCBUQVJHRVRfRVhUUkFfSU5DTFVERVMgKGNvbnN0IGNoYXIgKlNZU1JPT1QsIGNvbnN0IGNoYXIKICAgICAgICAgICpJUFJFRklYLCBpbnQgU1RESU5DKQogICAgIFRoaXMgdGFyZ2V0IGhvb2sgc2hvdWxkIHJlZ2lzdGVyIGFueSBleHRyYSBpbmNsdWRlIGZpbGVzIGZvciB0aGUKICAgICB0YXJnZXQuICBUaGUgcGFyYW1ldGVyIFNURElOQyBpbmRpY2F0ZXMgaWYgbm9ybWFsIGluY2x1ZGUgZmlsZXMgYXJlCiAgICAgcHJlc2VudC4gIFRoZSBwYXJhbWV0ZXIgU1lTUk9PVCBpcyB0aGUgc3lzdGVtIHJvb3QgZGlyZWN0b3J5LiAgVGhlCiAgICAgcGFyYW1ldGVyIElQUkVGSVggaXMgdGhlIHByZWZpeCBmb3IgdGhlIGdjYyBkaXJlY3RvcnkuCgogLS0gTWFjcm86IHZvaWQgVEFSR0VUX0VYVFJBX1BSRV9JTkNMVURFUyAoY29uc3QgY2hhciAqU1lTUk9PVCwgY29uc3QKICAgICAgICAgIGNoYXIgKklQUkVGSVgsIGludCBTVERJTkMpCiAgICAgVGhpcyB0YXJnZXQgaG9vayBzaG91bGQgcmVnaXN0ZXIgYW55IGV4dHJhIGluY2x1ZGUgZmlsZXMgZm9yIHRoZQogICAgIHRhcmdldCBiZWZvcmUgYW55IHN0YW5kYXJkIGhlYWRlcnMuICBUaGUgcGFyYW1ldGVyIFNURElOQyBpbmRpY2F0ZXMKICAgICBpZiBub3JtYWwgaW5jbHVkZSBmaWxlcyBhcmUgcHJlc2VudC4gIFRoZSBwYXJhbWV0ZXIgU1lTUk9PVCBpcyB0aGUKICAgICBzeXN0ZW0gcm9vdCBkaXJlY3RvcnkuICBUaGUgcGFyYW1ldGVyIElQUkVGSVggaXMgdGhlIHByZWZpeCBmb3IgdGhlCiAgICAgZ2NjIGRpcmVjdG9yeS4KCiAtLSBNYWNybzogdm9pZCBUQVJHRVRfT1BURiAoY2hhciAqUEFUSCkKICAgICBUaGlzIHRhcmdldCBob29rIHNob3VsZCByZWdpc3RlciBzcGVjaWFsIGluY2x1ZGUgcGF0aHMgZm9yIHRoZQogICAgIHRhcmdldC4gIFRoZSBwYXJhbWV0ZXIgUEFUSCBpcyB0aGUgaW5jbHVkZSB0byByZWdpc3Rlci4gIE9uIERhcndpbgogICAgIHN5c3RlbXMsIHRoaXMgaXMgdXNlZCBmb3IgRnJhbWV3b3JrIGluY2x1ZGVzLCB3aGljaCBoYXZlIHNlbWFudGljcwogICAgIHRoYXQgYXJlIGRpZmZlcmVudCBmcm9tICctSScuCgogLS0gVGFyZ2V0IEhvb2s6IGJvb2wgVEFSR0VUX1VTRV9MT0NBTF9USFVOS19BTElBU19QICh0cmVlIEZOREVDTCkKICAgICBUaGlzIHRhcmdldCBob29rIHJldHVybnMgJ3RydWUnIGlmIGl0IGlzIHNhZmUgdG8gdXNlIGEgbG9jYWwgYWxpYXMKICAgICBmb3IgYSB2aXJ0dWFsIGZ1bmN0aW9uIEZOREVDTCB3aGVuIGNvbnN0cnVjdGluZyB0aHVua3MsICdmYWxzZScKICAgICBvdGhlcndpc2UuICBCeSBkZWZhdWx0LCB0aGUgaG9vayByZXR1cm5zICd0cnVlJyBmb3IgYWxsIGZ1bmN0aW9ucywKICAgICBpZiBhIHRhcmdldCBzdXBwb3J0cyBhbGlhc2VzIChpLmUuIGRlZmluZXMgJ0FTTV9PVVRQVVRfREVGJyksCiAgICAgJ2ZhbHNlJyBvdGhlcndpc2UsCgogLS0gTWFjcm86IFRBUkdFVF9GT1JNQVRfVFlQRVMKICAgICBJZiBkZWZpbmVkLCB0aGlzIG1hY3JvIGlzIHRoZSBuYW1lIG9mIGEgZ2xvYmFsIHZhcmlhYmxlIGNvbnRhaW5pbmcKICAgICB0YXJnZXQtc3BlY2lmaWMgZm9ybWF0IGNoZWNraW5nIGluZm9ybWF0aW9uIGZvciB0aGUgJy1XZm9ybWF0JwogICAgIG9wdGlvbi4gIFRoZSBkZWZhdWx0IGlzIHRvIGhhdmUgbm8gdGFyZ2V0LXNwZWNpZmljIGZvcm1hdCBjaGVja3MuCgogLS0gTWFjcm86IFRBUkdFVF9OX0ZPUk1BVF9UWVBFUwogICAgIElmIGRlZmluZWQsIHRoaXMgbWFjcm8gaXMgdGhlIG51bWJlciBvZiBlbnRyaWVzIGluCiAgICAgJ1RBUkdFVF9GT1JNQVRfVFlQRVMnLgoKIC0tIFRhcmdldCBIb29rOiBib29sIFRBUkdFVF9SRUxBWEVEX09SREVSSU5HCiAgICAgSWYgc2V0IHRvICd0cnVlJywgbWVhbnMgdGhhdCB0aGUgdGFyZ2V0J3MgbWVtb3J5IG1vZGVsIGRvZXMgbm90CiAgICAgZ3VhcmFudGVlIHRoYXQgbG9hZHMgd2hpY2ggZG8gbm90IGRlcGVuZCBvbiBvbmUgYW5vdGhlciB3aWxsIGFjY2VzcwogICAgIG1haW4gbWVtb3J5IGluIHRoZSBvcmRlciBvZiB0aGUgaW5zdHJ1Y3Rpb24gc3RyZWFtOyBpZiBvcmRlcmluZyBpcwogICAgIGltcG9ydGFudCwgYW4gZXhwbGljaXQgbWVtb3J5IGJhcnJpZXIgbXVzdCBiZSB1c2VkLiAgVGhpcyBpcyB0cnVlCiAgICAgb2YgbWFueSByZWNlbnQgcHJvY2Vzc29ycyB3aGljaCBpbXBsZW1lbnQgYSBwb2xpY3kgb2YgInJlbGF4ZWQsIgogICAgICJ3ZWFrLCIgb3IgInJlbGVhc2UiIG1lbW9yeSBjb25zaXN0ZW5jeSwgc3VjaCBhcyBBbHBoYSwgUG93ZXJQQywKICAgICBhbmQgaWE2NC4gIFRoZSBkZWZhdWx0IGlzICdmYWxzZScuCgogLS0gVGFyZ2V0IEhvb2s6IGNvbnN0IGNoYXIgKlRBUkdFVF9JTlZBTElEX0FSR19GT1JfVU5QUk9UT1RZUEVEX0ZOCiAgICAgICAgICAodHJlZSBUWVBFTElTVCwgdHJlZSBGVU5DREVDTCwgdHJlZSBWQUwpCiAgICAgSWYgZGVmaW5lZCwgdGhpcyBtYWNybyByZXR1cm5zIHRoZSBkaWFnbm9zdGljIG1lc3NhZ2Ugd2hlbiBpdCBpcwogICAgIGlsbGVnYWwgdG8gcGFzcyBhcmd1bWVudCBWQUwgdG8gZnVuY3Rpb24gRlVOQ0RFQ0wgd2l0aCBwcm90b3R5cGUKICAgICBUWVBFTElTVC4KCiAtLSBUYXJnZXQgSG9vazogY29uc3QgY2hhciAqIFRBUkdFVF9JTlZBTElEX0NPTlZFUlNJT04gKHRyZWUgRlJPTVRZUEUsCiAgICAgICAgICB0cmVlIFRPVFlQRSkKICAgICBJZiBkZWZpbmVkLCB0aGlzIG1hY3JvIHJldHVybnMgdGhlIGRpYWdub3N0aWMgbWVzc2FnZSB3aGVuIGl0IGlzCiAgICAgaW52YWxpZCB0byBjb252ZXJ0IGZyb20gRlJPTVRZUEUgdG8gVE9UWVBFLCBvciAnTlVMTCcgaWYgdmFsaWRpdHkKICAgICBzaG91bGQgYmUgZGV0ZXJtaW5lZCBieSB0aGUgZnJvbnQgZW5kLgoKIC0tIFRhcmdldCBIb29rOiBjb25zdCBjaGFyICogVEFSR0VUX0lOVkFMSURfVU5BUllfT1AgKGludCBPUCwgdHJlZQogICAgICAgICAgVFlQRSkKICAgICBJZiBkZWZpbmVkLCB0aGlzIG1hY3JvIHJldHVybnMgdGhlIGRpYWdub3N0aWMgbWVzc2FnZSB3aGVuIGl0IGlzCiAgICAgaW52YWxpZCB0byBhcHBseSBvcGVyYXRpb24gT1AgKHdoZXJlIHVuYXJ5IHBsdXMgaXMgZGVub3RlZCBieQogICAgICdDT05WRVJUX0VYUFInKSB0byBhbiBvcGVyYW5kIG9mIHR5cGUgVFlQRSwgb3IgJ05VTEwnIGlmIHZhbGlkaXR5CiAgICAgc2hvdWxkIGJlIGRldGVybWluZWQgYnkgdGhlIGZyb250IGVuZC4KCiAtLSBUYXJnZXQgSG9vazogY29uc3QgY2hhciAqIFRBUkdFVF9JTlZBTElEX0JJTkFSWV9PUCAoaW50IE9QLCB0cmVlCiAgICAgICAgICBUWVBFMSwgdHJlZSBUWVBFMikKICAgICBJZiBkZWZpbmVkLCB0aGlzIG1hY3JvIHJldHVybnMgdGhlIGRpYWdub3N0aWMgbWVzc2FnZSB3aGVuIGl0IGlzCiAgICAgaW52YWxpZCB0byBhcHBseSBvcGVyYXRpb24gT1AgdG8gb3BlcmFuZHMgb2YgdHlwZXMgVFlQRTEgYW5kIFRZUEUyLAogICAgIG9yICdOVUxMJyBpZiB2YWxpZGl0eSBzaG91bGQgYmUgZGV0ZXJtaW5lZCBieSB0aGUgZnJvbnQgZW5kLgoKIC0tIE1hY3JvOiBUQVJHRVRfVVNFX0pDUl9TRUNUSU9OCiAgICAgVGhpcyBtYWNybyBkZXRlcm1pbmVzIHdoZXRoZXIgdG8gdXNlIHRoZSBKQ1Igc2VjdGlvbiB0byByZWdpc3RlcgogICAgIEphdmEgY2xhc3Nlcy4gIEJ5IGRlZmF1bHQsIFRBUkdFVF9VU0VfSkNSX1NFQ1RJT04gaXMgZGVmaW5lZCB0byAxCiAgICAgaWYgYm90aCBTVVBQT1JUU19XRUFLIGFuZCBUQVJHRVRfSEFWRV9OQU1FRF9TRUNUSU9OUyBhcmUgdHJ1ZSwgZWxzZQogICAgIDAuCgogLS0gTWFjcm86IE9CSkNfSkJMRU4KICAgICBUaGlzIG1hY3JvIGRldGVybWluZXMgdGhlIHNpemUgb2YgdGhlIG9iamVjdGl2ZSBDIGp1bXAgYnVmZmVyIGZvcgogICAgIHRoZSBOZVhUIHJ1bnRpbWUuICBCeSBkZWZhdWx0LCBPQkpDX0pCTEVOIGlzIGRlZmluZWQgdG8gYW4KICAgICBpbm5vY3VvdXMgdmFsdWUuCgogLS0gTWFjcm86IExJQkdDQzJfVU5XSU5EX0FUVFJJQlVURQogICAgIERlZmluZSB0aGlzIG1hY3JvIGlmIGFueSB0YXJnZXQtc3BlY2lmaWMgYXR0cmlidXRlcyBuZWVkIHRvIGJlCiAgICAgYXR0YWNoZWQgdG8gdGhlIGZ1bmN0aW9ucyBpbiAnbGliZ2NjJyB0aGF0IHByb3ZpZGUgbG93LWxldmVsCiAgICAgc3VwcG9ydCBmb3IgY2FsbCBzdGFjayB1bndpbmRpbmcuICBJdCBpcyB1c2VkIGluIGRlY2xhcmF0aW9ucyBpbgogICAgICd1bndpbmQtZ2VuZXJpYy5oJyBhbmQgdGhlIGFzc29jaWF0ZWQgZGVmaW5pdGlvbnMgb2YgdGhvc2UKICAgICBmdW5jdGlvbnMuCgofCkZpbGU6IGdjY2ludC5pbmZvLCAgTm9kZTogSG9zdCBDb25maWcsICBOZXh0OiBGcmFnbWVudHMsICBQcmV2OiBUYXJnZXQgTWFjcm9zLCAgVXA6IFRvcAoKMTYgSG9zdCBDb25maWd1cmF0aW9uCioqKioqKioqKioqKioqKioqKioqKgoKTW9zdCBkZXRhaWxzIGFib3V0IHRoZSBtYWNoaW5lIGFuZCBzeXN0ZW0gb24gd2hpY2ggdGhlIGNvbXBpbGVyIGlzCmFjdHVhbGx5IHJ1bm5pbmcgYXJlIGRldGVjdGVkIGJ5IHRoZSAnY29uZmlndXJlJyBzY3JpcHQuICBTb21lIHRoaW5ncwphcmUgaW1wb3NzaWJsZSBmb3IgJ2NvbmZpZ3VyZScgdG8gZGV0ZWN0OyB0aGVzZSBhcmUgZGVzY3JpYmVkIGluIHR3bwp3YXlzLCBlaXRoZXIgYnkgbWFjcm9zIGRlZmluZWQgaW4gYSBmaWxlIG5hbWVkICd4bS1NQUNISU5FLmgnIG9yIGJ5IGhvb2sKZnVuY3Rpb25zIGluIHRoZSBmaWxlIHNwZWNpZmllZCBieSB0aGUgT1VUX0hPU1RfSE9PS19PQkogdmFyaWFibGUgaW4KJ2NvbmZpZy5nY2MnLiAgKFRoZSBpbnRlbnRpb24gaXMgdGhhdCB2ZXJ5IGZldyBob3N0cyB3aWxsIG5lZWQgYSBoZWFkZXIKZmlsZSBidXQgbmVhcmx5IGV2ZXJ5IGZ1bGx5IHN1cHBvcnRlZCBob3N0IHdpbGwgbmVlZCB0byBvdmVycmlkZSBzb21lCmhvb2tzLikKCiBJZiB5b3UgbmVlZCB0byBkZWZpbmUgb25seSBhIGZldyBtYWNyb3MsIGFuZCB0aGV5IGhhdmUgc2ltcGxlCmRlZmluaXRpb25zLCBjb25zaWRlciB1c2luZyB0aGUgJ3htX2RlZmluZXMnIHZhcmlhYmxlIGluIHlvdXIKJ2NvbmZpZy5nY2MnIGVudHJ5IGluc3RlYWQgb2YgY3JlYXRpbmcgYSBob3N0IGNvbmZpZ3VyYXRpb24gaGVhZGVyLgoqTm90ZSBTeXN0ZW0gQ29uZmlnOjouCgoqIE1lbnU6CgoqIEhvc3QgQ29tbW9uOjoJCVRoaW5ncyBldmVyeSBob3N0IHByb2JhYmx5IG5lZWRzIGltcGxlbWVudGVkLgoqIEZpbGVzeXN0ZW06OiAgICAgICAgICBZb3VyIGhvc3QgY2FuJ3QgaGF2ZSB0aGUgbGV0dGVyICdhJyBpbiBmaWxlbmFtZXM/CiogSG9zdCBNaXNjOjogICAgICAgICAJUmFyZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIGhvc3RzLgoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IEhvc3QgQ29tbW9uLCAgTmV4dDogRmlsZXN5c3RlbSwgIFVwOiBIb3N0IENvbmZpZwoKMTYuMSBIb3N0IENvbW1vbgo9PT09PT09PT09PT09PT09CgpTb21lIHRoaW5ncyBhcmUganVzdCBub3QgcG9ydGFibGUsIGV2ZW4gYmV0d2VlbiBzaW1pbGFyIG9wZXJhdGluZwpzeXN0ZW1zLCBhbmQgYXJlIHRvbyBkaWZmaWN1bHQgZm9yIGF1dG9jb25mIHRvIGRldGVjdC4gIFRoZXkgZ2V0CmltcGxlbWVudGVkIHVzaW5nIGhvb2sgZnVuY3Rpb25zIGluIHRoZSBmaWxlIHNwZWNpZmllZCBieSB0aGUKSE9TVF9IT09LX09CSiB2YXJpYWJsZSBpbiAnY29uZmlnLmdjYycuCgogLS0gSG9zdCBIb29rOiB2b2lkIEhPU1RfSE9PS1NfRVhUUkFfU0lHTkFMUyAodm9pZCkKICAgICBUaGlzIGhvc3QgaG9vayBpcyB1c2VkIHRvIHNldCB1cCBoYW5kbGluZyBmb3IgZXh0cmEgc2lnbmFscy4gIFRoZQogICAgIG1vc3QgY29tbW9uIHRoaW5nIHRvIGRvIGluIHRoaXMgaG9vayBpcyB0byBkZXRlY3Qgc3RhY2sgb3ZlcmZsb3cuCgogLS0gSG9zdCBIb29rOiB2b2lkICogSE9TVF9IT09LU19HVF9QQ0hfR0VUX0FERFJFU1MgKHNpemVfdCBTSVpFLCBpbnQKICAgICAgICAgIEZEKQogICAgIFRoaXMgaG9zdCBob29rIHJldHVybnMgdGhlIGFkZHJlc3Mgb2Ygc29tZSBzcGFjZSB0aGF0IGlzIGxpa2VseSB0bwogICAgIGJlIGZyZWUgaW4gc29tZSBzdWJzZXF1ZW50IGludm9jYXRpb24gb2YgdGhlIGNvbXBpbGVyLiAgV2UgaW50ZW5kCiAgICAgdG8gbG9hZCB0aGUgUENIIGRhdGEgYXQgdGhpcyBhZGRyZXNzIHN1Y2ggdGhhdCB0aGUgZGF0YSBuZWVkIG5vdCBiZQogICAgIHJlbG9jYXRlZC4gIFRoZSBhcmVhIHNob3VsZCBiZSBhYmxlIHRvIGhvbGQgU0laRSBieXRlcy4gIElmIHRoZQogICAgIGhvc3QgdXNlcyAnbW1hcCcsIEZEIGlzIGFuIG9wZW4gZmlsZSBkZXNjcmlwdG9yIHRoYXQgY2FuIGJlIHVzZWQKICAgICBmb3IgcHJvYmluZy4KCiAtLSBIb3N0IEhvb2s6IGludCBIT1NUX0hPT0tTX0dUX1BDSF9VU0VfQUREUkVTUyAodm9pZCAqIEFERFJFU1MsIHNpemVfdAogICAgICAgICAgU0laRSwgaW50IEZELCBzaXplX3QgT0ZGU0VUKQogICAgIFRoaXMgaG9zdCBob29rIGlzIGNhbGxlZCB3aGVuIGEgUENIIGZpbGUgaXMgYWJvdXQgdG8gYmUgbG9hZGVkLiAgV2UKICAgICB3YW50IHRvIGxvYWQgU0laRSBieXRlcyBmcm9tIEZEIGF0IE9GRlNFVCBpbnRvIG1lbW9yeSBhdCBBRERSRVNTLgogICAgIFRoZSBnaXZlbiBhZGRyZXNzIHdpbGwgYmUgdGhlIHJlc3VsdCBvZiBhIHByZXZpb3VzIGludm9jYXRpb24gb2YKICAgICAnSE9TVF9IT09LU19HVF9QQ0hfR0VUX0FERFJFU1MnLiAgUmV0dXJuIC0xIGlmIHdlIGNvdWxkbid0IGFsbG9jYXRlCiAgICAgU0laRSBieXRlcyBhdCBBRERSRVNTLiAgUmV0dXJuIDAgaWYgdGhlIG1lbW9yeSBpcyBhbGxvY2F0ZWQgYnV0IHRoZQogICAgIGRhdGEgaXMgbm90IGxvYWRlZC4gIFJldHVybiAxIGlmIHRoZSBob29rIGhhcyBwZXJmb3JtZWQgZXZlcnl0aGluZy4KCiAgICAgSWYgdGhlIGltcGxlbWVudGF0aW9uIHVzZXMgcmVzZXJ2ZWQgYWRkcmVzcyBzcGFjZSwgZnJlZSBhbnkKICAgICByZXNlcnZlZCBzcGFjZSBiZXlvbmQgU0laRSwgcmVnYXJkbGVzcyBvZiB0aGUgcmV0dXJuIHZhbHVlLiAgSWYgbm8KICAgICBQQ0ggd2lsbCBiZSBsb2FkZWQsIHRoaXMgaG9vayBtYXkgYmUgY2FsbGVkIHdpdGggU0laRSB6ZXJvLCBpbgogICAgIHdoaWNoIGNhc2UgYWxsIHJlc2VydmVkIGFkZHJlc3Mgc3BhY2Ugc2hvdWxkIGJlIGZyZWVkLgoKICAgICBEbyBub3QgdHJ5IHRvIGhhbmRsZSB2YWx1ZXMgb2YgQUREUkVTUyB0aGF0IGNvdWxkIG5vdCBoYXZlIGJlZW4KICAgICByZXR1cm5lZCBieSB0aGlzIGV4ZWN1dGFibGU7IGp1c3QgcmV0dXJuIC0xLiAgU3VjaCB2YWx1ZXMgdXN1YWxseQogICAgIGluZGljYXRlIGFuIG91dC1vZi1kYXRlIFBDSCBmaWxlIChidWlsdCBieSBzb21lIG90aGVyIEdDQwogICAgIGV4ZWN1dGFibGUpLCBhbmQgc3VjaCBhIFBDSCBmaWxlIHdvbid0IHdvcmsuCgogLS0gSG9zdCBIb29rOiBzaXplX3QgSE9TVF9IT09LU19HVF9QQ0hfQUxMT0NfR1JBTlVMQVJJVFkgKHZvaWQpOwogICAgIFRoaXMgaG9zdCBob29rIHJldHVybnMgdGhlIGFsaWdubWVudCByZXF1aXJlZCBmb3IgYWxsb2NhdGluZwogICAgIHZpcnR1YWwgbWVtb3J5LiAgVXN1YWxseSB0aGlzIGlzIHRoZSBzYW1lIGFzIGdldHBhZ2VzaXplLCBidXQgb24KICAgICBzb21lIGhvc3RzIHRoZSBhbGlnbm1lbnQgZm9yIHJlc2VydmluZyBtZW1vcnkgZGlmZmVycyBmcm9tIHRoZQogICAgIHBhZ2VzaXplIGZvciBjb21taXR0aW5nIG1lbW9yeS4KCh8KRmlsZTogZ2NjaW50LmluZm8sICBOb2RlOiBGaWxlc3lzdGVtLCAgTmV4dDogSG9zdCBNaXNjLCAgUHJldjogSG9zdCBDb21tb24sICBVcDogSG9zdCBDb25maWcKCjE2LjIgSG9zdCBGaWxlc3lzdGVtCj09PT09PT09PT09PT09PT09PT09CgpHQ0MgbmVlZHMgdG8ga25vdyBhIG51bWJlciBvZiB0aGluZ3MgYWJvdXQgdGhlIHNlbWFudGljcyBvZiB0aGUgaG9zdAptYWNoaW5lJ3MgZmlsZXN5c3RlbS4gIEZpbGVzeXN0ZW1zIHdpdGggVW5peCBhbmQgTVMtRE9TIHNlbWFudGljcyBhcmUKYXV0b21hdGljYWxseSBkZXRlY3RlZC4gIEZvciBvdGhlciBzeXN0ZW1zLCB5b3UgY2FuIGRlZmluZSB0aGUgZm9sbG93aW5nCm1hY3JvcyBpbiAneG0tTUFDSElORS5oJy4KCidIQVZFX0RPU19CQVNFRF9GSUxFX1NZU1RFTScKICAgICBUaGlzIG1hY3JvIGlzIGF1dG9tYXRpY2FsbHkgZGVmaW5lZCBieSAnc3lzdGVtLmgnIGlmIHRoZSBob3N0IGZpbGUKICAgICBzeXN0ZW0gb2JleXMgdGhlIHNlbWFudGljcyBkZWZpbmVkIGJ5IE1TLURPUyBpbnN0ZWFkIG9mIFVuaXguICBET1MKICAgICBmaWxlIHN5c3RlbXMgYXJlIGNhc2UgaW5zZW5zaXRpdmUsIGZpbGUgc3BlY2lmaWNhdGlvbnMgbWF5IGJlZ2luCiAgICAgd2l0aCBhIGRyaXZlIGxldHRlciwgYW5kIGJvdGggZm9yd2FyZCBzbGFzaCBhbmQgYmFja3NsYXNoICgnLycgYW5kCiAgICAgJ1wnKSBhcmUgZGlyZWN0b3J5IHNlcGFyYXRvcnMuCgonRElSX1NFUEFSQVRPUicKJ0RJUl9TRVBBUkFUT1JfMicKICAgICBJZiBkZWZpbmVkLCB0aGVzZSBtYWNyb3MgZXhwYW5kIHRvIGNoYXJhY3RlciBjb25zdGFudHMgc3BlY2lmeWluZwogICAgIHNlcGFyYXRvcnMgZm9yIGRpcmVjdG9yeSBuYW1lcyB3aXRoaW4gYSBmaWxlIHNwZWNpZmljYXRpb24uCiAgICAgJ3N5c3RlbS5oJyB3aWxsIGF1dG9tYXRpY2FsbHkgZ2l2ZSB0aGVtIGFwcHJvcHJpYXRlIHZhbHVlcyBvbiBVbml4CiAgICAgYW5kIE1TLURPUyBmaWxlIHN5c3RlbXMuICBJZiB5b3VyIGZpbGUgc3lzdGVtIGlzIG5laXRoZXIgb2YgdGhlc2UsCiAgICAgZGVmaW5lIG9uZSBvciBib3RoIGFwcHJvcHJpYXRlbHkgaW4gJ3htLU1BQ0hJTkUuaCcuCgogICAgIEhvd2V2ZXIsIG9wZXJhdGluZyBzeXN0ZW1zIGxpa2UgVk1TLCB3aGVyZSBjb25zdHJ1Y3RpbmcgYSBwYXRobmFtZQogICAgIGlzIG1vcmUgY29tcGxpY2F0ZWQgdGhhbiBqdXN0IHN0cmluZ2luZyB0b2dldGhlciBkaXJlY3RvcnkgbmFtZXMKICAgICBzZXBhcmF0ZWQgYnkgYSBzcGVjaWFsIGNoYXJhY3Rlciwgc2hvdWxkIG5vdCBkZWZpbmUgZWl0aGVyIG9mIHRoZXNlCiAgICAgbWFjcm9zLgoKJ1BBVEhfU0VQQVJBVE9SJwogICAgIElmIGRlZmluZWQsIHRoaXMgbWFjcm8gc2hvdWxkIGV4cGFuZCB0byBhIGNoYXJhY3RlciBjb25zdGFudAogICAgIHNwZWNpZnlpbmcgdGhlIHNlcGFyYXRvciBmb3IgZWxlbWVudHMgb2Ygc2VhcmNoIHBhdGhzLiAgVGhlIGRlZmF1bHQKICAgICB2YWx1ZSBpcyBhIGNvbG9uICgnOicpLiAgRE9TLWJhc2VkIHN5c3RlbXMgdXN1YWxseSwgYnV0IG5vdCBhbHdheXMsCiAgICAgdXNlIHNlbWljb2xvbiAoJzsnKS4KCidWTVMnCiAgICAgRGVmaW5lIHRoaXMgbWFjcm8gaWYgdGhlIGhvc3Qgc3lzdGVtIGlzIFZNUy4KCidIT1NUX09CSkVDVF9TVUZGSVgnCiAgICAgRGVmaW5lIHRoaXMgbWFjcm8gdG8gYmUgYSBDIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHN1ZmZpeCBmb3IKICAgICBvYmplY3QgZmlsZXMgb24geW91ciBob3N0IG1hY2hpbmUuICBJZiB5b3UgZG8gbm90IGRlZmluZSB0aGlzCiAgICAgbWFjcm8sIEdDQyB3aWxsIHVzZSAnLm8nIGFzIHRoZSBzdWZmaXggZm9yIG9iamVjdCBmaWxlcy4KCidIT1NUX0VYRUNVVEFCTEVfU1VGRklYJwogICAgIERlZmluZSB0aGlzIG1hY3JvIHRvIGJlIGEgQyBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBzdWZmaXggZm9yCiAgICAgZXhlY3V0YWJsZSBmaWxlcyBvbiB5b3VyIGhvc3QgbWFjaGluZS4gIElmIHlvdSBkbyBub3QgZGVmaW5lIHRoaXMKICAgICBtYWNybywgR0NDIHdpbGwgdXNlIHRoZSBudWxsIHN0cmluZyBhcyB0aGUgc3VmZml4IGZvciBleGVjdXRhYmxlCiAgICAgZmlsZXMuCgonSE9TVF9CSVRfQlVDS0VUJwogICAgIEEgcGF0aG5hbWUgZGVmaW5lZCBieSB0aGUgaG9zdCBvcGVyYXRpbmcgc3lzdGVtLCB3aGljaCBjYW4gYmUKICAgICBvcGVuZWQgYXMgYSBmaWxlIGFuZCB3cml0dGVuIHRvLCBidXQgYWxsIHRoZSBpbmZvcm1hdGlvbiB3cml0dGVuIGlzCiAgICAgZGlzY2FyZGVkLiAgVGhpcyBpcyBjb21tb25seSBrbm93biBhcyBhICJiaXQgYnVja2V0IiBvciAibnVsbAogICAgIGRldmljZSIuICBJZiB5b3UgZG8gbm90IGRlZmluZSB0aGlzIG1hY3JvLCBHQ0Mgd2lsbCB1c2UgJy9kZXYvbnVsbCcKICAgICBhcyB0aGUgYml0IGJ1Y2tldC4gIElmIHRoZSBob3N0IGRvZXMgbm90IHN1cHBvcnQgYSBiaXQgYnVja2V0LAogICAgIGRlZmluZSB0aGlzIG1hY3JvIHRvIGFuIGludmFsaWQgZmlsZW5hbWUuCgonVVBEQVRFX1BBVEhfSE9TVF9DQU5PTklDQUxJWkUgKFBBVEgpJwogICAgIElmIGRlZmluZWQsIGEgQyBzdGF0ZW1lbnQgKHNhbnMgc2VtaWNvbG9uKSB0aGF0IHBlcmZvcm1zCiAgICAgaG9zdC1kZXBlbmRlbnQgY2Fub25pY2FsaXphdGlvbiB3aGVuIGEgcGF0aCB1c2VkIGluIGEgY29tcGlsYXRpb24KICAgICBkcml2ZXIgb3IgcHJlcHJvY2Vzc29yIGlzIGNhbm9uaWNhbGl6ZWQuICBQQVRIIGlzIGEgbWFsbG9jLWVkIHBhdGgKICAgICB0byBiZSBjYW5vbmljYWxpemVkLiAgSWYgdGhlIEMgc3RhdGVtZW50IGRvZXMgY2Fub25pY2FsaXplIFBBVEgKICAgICBpbnRvIGEgZGlmZmVyZW50IGJ1ZmZlciwgdGhlIG9sZCBwYXRoIHNob3VsZCBiZSBmcmVlZCBhbmQgdGhlIG5ldwogICAgIGJ1ZmZlciBzaG91bGQgaGF2ZSBiZWVuIGFsbG9jYXRlZCB3aXRoIG1hbGxvYy4KCidEVU1QRklMRV9GT1JNQVQnCiAgICAgRGVmaW5lIHRoaXMgbWFjcm8gdG8gYmUgYSBDIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGZvcm1hdCB0byB1c2UKICAgICBmb3IgY29uc3RydWN0aW5nIHRoZSBpbmRleCBwYXJ0IG9mIGRlYnVnZ2luZyBkdW1wIGZpbGUgbmFtZXMuICBUaGUKICAgICByZXN1bHRhbnQgc3RyaW5nIG11c3QgZml0IGluIGZpZnRlZW4gYnl0ZXMuICBUaGUgZnVsbCBmaWxlbmFtZSB3aWxsCiAgICAgYmUgdGhlIGNvbmNhdGVuYXRpb24gb2Y6IHRoZSBwcmVmaXggb2YgdGhlIGFzc2VtYmxlciBmaWxlIG5hbWUsIHRoZQogICAgIHN0cmluZyByZXN1bHRpbmcgZnJvbSBhcHBseWluZyB0aGlzIGZvcm1hdCB0byBhbiBpbmRleCBudW1iZXIsIGFuZAogICAgIGEgc3RyaW5nIHVuaXF1ZSB0byBlYWNoIGR1bXAgZmlsZSBraW5kLCBlLmcuICdydGwnLgoKICAgICBJZiB5b3UgZG8gbm90IGRlZmluZSB0aGlzIG1hY3JvLCBHQ0Mgd2lsbCB1c2UgJy4lMDJkLicuICBZb3Ugc2hvdWxkCiAgICAgZGVmaW5lIHRoaXMgbWFjcm8gaWYgdXNpbmcgdGhlIGRlZmF1bHQgd2lsbCBjcmVhdGUgYW4gaW52YWxpZCBmaWxlCiAgICAgbmFtZS4KCidERUxFVEVfSUZfT1JESU5BUlknCiAgICAgRGVmaW5lIHRoaXMgbWFjcm8gdG8gYmUgYSBDIHN0YXRlbWVudCAoc2FucyBzZW1pY29sb24pIHRoYXQKICAgICBwZXJmb3JtcyBob3N0LWRlcGVuZGVudCByZW1vdmFsIG9mIG9yZGluYXJ5IHRlbXAgZmlsZXMgaW4gdGhlCiAgICAgY29tcGlsYXRpb24gZHJpdmVyLgoKICAgICBJZiB5b3UgZG8gbm90IGRlZmluZSB0aGlzIG1hY3JvLCBHQ0Mgd2lsbCB1c2UgdGhlIGRlZmF1bHQgdmVyc2lvbi4KICAgICBZb3Ugc2hvdWxkIGRlZmluZSB0aGlzIG1hY3JvIGlmIHRoZSBkZWZhdWx0IHZlcnNpb24gZG9lcyBub3QKICAgICByZWxpYWJseSByZW1vdmUgdGhlIHRlbXAgZmlsZSBhcywgZm9yIGV4YW1wbGUsIG9uIFZNUyB3aGljaCBhbGxvd3MKICAgICBtdWx0aXBsZSB2ZXJzaW9ucyBvZiBhIGZpbGUuCgonSE9TVF9MQUNLU19JTk9ERV9OVU1CRVJTJwogICAgIERlZmluZSB0aGlzIG1hY3JvIGlmIHRoZSBob3N0IGZpbGVzeXN0ZW0gZG9lcyBub3QgcmVwb3J0IG1lYW5pbmdmdWwKICAgICBpbm9kZSBudW1iZXJzIGluIHN0cnVjdCBzdGF0LgoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IEhvc3QgTWlzYywgIFByZXY6IEZpbGVzeXN0ZW0sICBVcDogSG9zdCBDb25maWcKCjE2LjMgSG9zdCBNaXNjCj09PT09PT09PT09PT09CgonRkFUQUxfRVhJVF9DT0RFJwogICAgIEEgQyBleHByZXNzaW9uIGZvciB0aGUgc3RhdHVzIGNvZGUgdG8gYmUgcmV0dXJuZWQgd2hlbiB0aGUgY29tcGlsZXIKICAgICBleGl0cyBhZnRlciBzZXJpb3VzIGVycm9ycy4gIFRoZSBkZWZhdWx0IGlzIHRoZSBzeXN0ZW0tcHJvdmlkZWQKICAgICBtYWNybyAnRVhJVF9GQUlMVVJFJywgb3IgJzEnIGlmIHRoZSBzeXN0ZW0gZG9lc24ndCBkZWZpbmUgdGhhdAogICAgIG1hY3JvLiAgRGVmaW5lIHRoaXMgbWFjcm8gb25seSBpZiB0aGVzZSBkZWZhdWx0cyBhcmUgaW5jb3JyZWN0LgoKJ1NVQ0NFU1NfRVhJVF9DT0RFJwogICAgIEEgQyBleHByZXNzaW9uIGZvciB0aGUgc3RhdHVzIGNvZGUgdG8gYmUgcmV0dXJuZWQgd2hlbiB0aGUgY29tcGlsZXIKICAgICBleGl0cyB3aXRob3V0IHNlcmlvdXMgZXJyb3JzLiAgKFdhcm5pbmdzIGFyZSBub3Qgc2VyaW91cyBlcnJvcnMuKQogICAgIFRoZSBkZWZhdWx0IGlzIHRoZSBzeXN0ZW0tcHJvdmlkZWQgbWFjcm8gJ0VYSVRfU1VDQ0VTUycsIG9yICcwJyBpZgogICAgIHRoZSBzeXN0ZW0gZG9lc24ndCBkZWZpbmUgdGhhdCBtYWNyby4gIERlZmluZSB0aGlzIG1hY3JvIG9ubHkgaWYKICAgICB0aGVzZSBkZWZhdWx0cyBhcmUgaW5jb3JyZWN0LgoKJ1VTRV9DX0FMTE9DQScKICAgICBEZWZpbmUgdGhpcyBtYWNybyBpZiBHQ0Mgc2hvdWxkIHVzZSB0aGUgQyBpbXBsZW1lbnRhdGlvbiBvZgogICAgICdhbGxvY2EnIHByb3ZpZGVkIGJ5ICdsaWJpYmVydHkuYScuICBUaGlzIG9ubHkgYWZmZWN0cyBob3cgc29tZQogICAgIHBhcnRzIG9mIHRoZSBjb21waWxlciBpdHNlbGYgYWxsb2NhdGUgbWVtb3J5LiAgSXQgZG9lcyBub3QgY2hhbmdlCiAgICAgY29kZSBnZW5lcmF0aW9uLgoKICAgICBXaGVuIEdDQyBpcyBidWlsdCB3aXRoIGEgY29tcGlsZXIgb3RoZXIgdGhhbiBpdHNlbGYsIHRoZSBDICdhbGxvY2EnCiAgICAgaXMgYWx3YXlzIHVzZWQuICBUaGlzIGlzIGJlY2F1c2UgbW9zdCBvdGhlciBpbXBsZW1lbnRhdGlvbnMgaGF2ZQogICAgIHNlcmlvdXMgYnVncy4gIFlvdSBzaG91bGQgZGVmaW5lIHRoaXMgbWFjcm8gb25seSBvbiBhIHN5c3RlbSB3aGVyZQogICAgIG5vIHN0YWNrLWJhc2VkICdhbGxvY2EnIGNhbiBwb3NzaWJseSB3b3JrLiAgRm9yIGluc3RhbmNlLCBpZiBhCiAgICAgc3lzdGVtIGhhcyBhIHNtYWxsIGxpbWl0IG9uIHRoZSBzaXplIG9mIHRoZSBzdGFjaywgR0NDJ3MgYnVpbHRpbgogICAgICdhbGxvY2EnIHdpbGwgbm90IHdvcmsgcmVsaWFibHkuCgonQ09MTEVDVDJfSE9TVF9JTklUSUFMSVpBVElPTicKICAgICBJZiBkZWZpbmVkLCBhIEMgc3RhdGVtZW50IChzYW5zIHNlbWljb2xvbikgdGhhdCBwZXJmb3JtcwogICAgIGhvc3QtZGVwZW5kZW50IGluaXRpYWxpemF0aW9uIHdoZW4gJ2NvbGxlY3QyJyBpcyBiZWluZyBpbml0aWFsaXplZC4KCidHQ0NfRFJJVkVSX0hPU1RfSU5JVElBTElaQVRJT04nCiAgICAgSWYgZGVmaW5lZCwgYSBDIHN0YXRlbWVudCAoc2FucyBzZW1pY29sb24pIHRoYXQgcGVyZm9ybXMKICAgICBob3N0LWRlcGVuZGVudCBpbml0aWFsaXphdGlvbiB3aGVuIGEgY29tcGlsYXRpb24gZHJpdmVyIGlzIGJlaW5nCiAgICAgaW5pdGlhbGl6ZWQuCgonSE9TVF9MT05HX0xPTkdfRk9STUFUJwogICAgIElmIGRlZmluZWQsIHRoZSBzdHJpbmcgdXNlZCB0byBpbmRpY2F0ZSBhbiBhcmd1bWVudCBvZiB0eXBlICdsb25nCiAgICAgbG9uZycgdG8gZnVuY3Rpb25zIGxpa2UgJ3ByaW50ZicuICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAnImxsIicuCgogSW4gYWRkaXRpb24sIGlmICdjb25maWd1cmUnIGdlbmVyYXRlcyBhbiBpbmNvcnJlY3QgZGVmaW5pdGlvbiBvZiBhbnkgb2YKdGhlIG1hY3JvcyBpbiAnYXV0by1ob3N0LmgnLCB5b3UgY2FuIG92ZXJyaWRlIHRoYXQgZGVmaW5pdGlvbiBpbiBhIGhvc3QKY29uZmlndXJhdGlvbiBoZWFkZXIuICBJZiB5b3UgbmVlZCB0byBkbyB0aGlzLCBmaXJzdCBzZWUgaWYgaXQgaXMKcG9zc2libGUgdG8gZml4ICdjb25maWd1cmUnLgoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IEZyYWdtZW50cywgIE5leHQ6IENvbGxlY3QyLCAgUHJldjogSG9zdCBDb25maWcsICBVcDogVG9wCgoxNyBNYWtlZmlsZSBGcmFnbWVudHMKKioqKioqKioqKioqKioqKioqKioqCgpXaGVuIHlvdSBjb25maWd1cmUgR0NDIHVzaW5nIHRoZSAnY29uZmlndXJlJyBzY3JpcHQsIGl0IHdpbGwgY29uc3RydWN0CnRoZSBmaWxlICdNYWtlZmlsZScgZnJvbSB0aGUgdGVtcGxhdGUgZmlsZSAnTWFrZWZpbGUuaW4nLiAgV2hlbiBpdCBkb2VzCnRoaXMsIGl0IGNhbiBpbmNvcnBvcmF0ZSBtYWtlZmlsZSBmcmFnbWVudHMgZnJvbSB0aGUgJ2NvbmZpZycgZGlyZWN0b3J5LgpUaGVzZSBhcmUgdXNlZCB0byBzZXQgTWFrZWZpbGUgcGFyYW1ldGVycyB0aGF0IGFyZSBub3QgYW1lbmFibGUgdG8gYmVpbmcKY2FsY3VsYXRlZCBieSBhdXRvY29uZi4gIFRoZSBsaXN0IG9mIGZyYWdtZW50cyB0byBpbmNvcnBvcmF0ZSBpcyBzZXQgYnkKJ2NvbmZpZy5nY2MnIChhbmQgb2NjYXNpb25hbGx5ICdjb25maWcuYnVpbGQnIGFuZCAnY29uZmlnLmhvc3QnKTsgKk5vdGUKU3lzdGVtIENvbmZpZzo6LgoKIEZyYWdtZW50cyBhcmUgbmFtZWQgZWl0aGVyICd0LVRBUkdFVCcgb3IgJ3gtSE9TVCcsIGRlcGVuZGluZyBvbiB3aGV0aGVyCnRoZXkgYXJlIHJlbGV2YW50IHRvIGNvbmZpZ3VyaW5nIEdDQyB0byBwcm9kdWNlIGNvZGUgZm9yIGEgcGFydGljdWxhcgp0YXJnZXQsIG9yIHRvIGNvbmZpZ3VyaW5nIEdDQyB0byBydW4gb24gYSBwYXJ0aWN1bGFyIGhvc3QuICBIZXJlIFRBUkdFVAphbmQgSE9TVCBhcmUgbW5lbW9uaWNzIHdoaWNoIHVzdWFsbHkgaGF2ZSBzb21lIHJlbGF0aW9uc2hpcCB0byB0aGUKY2Fub25pY2FsIHN5c3RlbSBuYW1lLCBidXQgbm8gZm9ybWFsIGNvbm5lY3Rpb24uCgogSWYgdGhlc2UgZmlsZXMgZG8gbm90IGV4aXN0LCBpdCBtZWFucyBub3RoaW5nIG5lZWRzIHRvIGJlIGFkZGVkIGZvciBhCmdpdmVuIHRhcmdldCBvciBob3N0LiAgTW9zdCB0YXJnZXRzIG5lZWQgYSBmZXcgJ3QtVEFSR0VUJyBmcmFnbWVudHMsIGJ1dApuZWVkaW5nICd4LUhPU1QnIGZyYWdtZW50cyBpcyByYXJlLgoKKiBNZW51OgoKKiBUYXJnZXQgRnJhZ21lbnQ6OiBXcml0aW5nICd0LVRBUkdFVCcgZmlsZXMuCiogSG9zdCBGcmFnbWVudDo6ICAgV3JpdGluZyAneC1IT1NUJyBmaWxlcy4KCh8KRmlsZTogZ2NjaW50LmluZm8sICBOb2RlOiBUYXJnZXQgRnJhZ21lbnQsICBOZXh0OiBIb3N0IEZyYWdtZW50LCAgVXA6IEZyYWdtZW50cwoKMTcuMSBUYXJnZXQgTWFrZWZpbGUgRnJhZ21lbnRzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKVGFyZ2V0IG1ha2VmaWxlIGZyYWdtZW50cyBjYW4gc2V0IHRoZXNlIE1ha2VmaWxlIHZhcmlhYmxlcy4KCidMSUJHQ0MyX0NGTEFHUycKICAgICBDb21waWxlciBmbGFncyB0byB1c2Ugd2hlbiBjb21waWxpbmcgJ2xpYmdjYzIuYycuCgonTElCMkZVTkNTX0VYVFJBJwogICAgIEEgbGlzdCBvZiBzb3VyY2UgZmlsZSBuYW1lcyB0byBiZSBjb21waWxlZCBvciBhc3NlbWJsZWQgYW5kCiAgICAgaW5zZXJ0ZWQgaW50byAnbGliZ2NjLmEnLgoKJ0Zsb2F0aW5nIFBvaW50IEVtdWxhdGlvbicKICAgICBUbyBoYXZlIEdDQyBpbmNsdWRlIHNvZnR3YXJlIGZsb2F0aW5nIHBvaW50IGxpYnJhcmllcyBpbiAnbGliZ2NjLmEnCiAgICAgZGVmaW5lICdGUEJJVCcgYW5kICdEUEJJVCcgYWxvbmcgd2l0aCBhIGZldyBydWxlcyBhcyBmb2xsb3dzOgogICAgICAgICAgIyBXZSB3YW50IGZpbmUgZ3JhaW5lZCBsaWJyYXJpZXMsIHNvIHVzZSB0aGUgbmV3IGNvZGUKICAgICAgICAgICMgdG8gYnVpbGQgdGhlIGZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbiBsaWJyYXJpZXMuCiAgICAgICAgICBGUEJJVCA9IGZwLWJpdC5jCiAgICAgICAgICBEUEJJVCA9IGRwLWJpdC5jCgoKICAgICAgICAgIGZwLWJpdC5jOiAkKHNyY2RpcikvY29uZmlnL2ZwLWJpdC5jCiAgICAgICAgICAgICAgICAgIGVjaG8gJyNkZWZpbmUgRkxPQVQnID4gZnAtYml0LmMKICAgICAgICAgICAgICAgICAgY2F0ICQoc3JjZGlyKS9jb25maWcvZnAtYml0LmMgPj4gZnAtYml0LmMKCiAgICAgICAgICBkcC1iaXQuYzogJChzcmNkaXIpL2NvbmZpZy9mcC1iaXQuYwogICAgICAgICAgICAgICAgICBjYXQgJChzcmNkaXIpL2NvbmZpZy9mcC1iaXQuYyA+IGRwLWJpdC5jCgogICAgIFlvdSBtYXkgbmVlZCB0byBwcm92aWRlIGFkZGl0aW9uYWwgI2RlZmluZXMgYXQgdGhlIGJlZ2lubmluZyBvZgogICAgICdmcC1iaXQuYycgYW5kICdkcC1iaXQuYycgdG8gY29udHJvbCB0YXJnZXQgZW5kaWFubmVzcyBhbmQgb3RoZXIKICAgICBvcHRpb25zLgoKJ0NSVFNUVUZGX1RfQ0ZMQUdTJwogICAgIFNwZWNpYWwgZmxhZ3MgdXNlZCB3aGVuIGNvbXBpbGluZyAnY3J0c3R1ZmYuYycuICAqTm90ZQogICAgIEluaXRpYWxpemF0aW9uOjouCgonQ1JUU1RVRkZfVF9DRkxBR1NfUycKICAgICBTcGVjaWFsIGZsYWdzIHVzZWQgd2hlbiBjb21waWxpbmcgJ2NydHN0dWZmLmMnIGZvciBzaGFyZWQgbGlua2luZy4KICAgICBVc2VkIGlmIHlvdSB1c2UgJ2NydGJlZ2luUy5vJyBhbmQgJ2NydGVuZFMubycgaW4gJ0VYVFJBLVBBUlRTJy4KICAgICAqTm90ZSBJbml0aWFsaXphdGlvbjo6LgoKJ01VTFRJTElCX09QVElPTlMnCiAgICAgRm9yIHNvbWUgdGFyZ2V0cywgaW52b2tpbmcgR0NDIGluIGRpZmZlcmVudCB3YXlzIHByb2R1Y2VzIG9iamVjdHMKICAgICB0aGF0IGNhbiBub3QgYmUgbGlua2VkIHRvZ2V0aGVyLiAgRm9yIGV4YW1wbGUsIGZvciBzb21lIHRhcmdldHMgR0NDCiAgICAgcHJvZHVjZXMgYm90aCBiaWcgYW5kIGxpdHRsZSBlbmRpYW4gY29kZS4gIEZvciB0aGVzZSB0YXJnZXRzLCB5b3UKICAgICBtdXN0IGFycmFuZ2UgZm9yIG11bHRpcGxlIHZlcnNpb25zIG9mICdsaWJnY2MuYScgdG8gYmUgY29tcGlsZWQsCiAgICAgb25lIGZvciBlYWNoIHNldCBvZiBpbmNvbXBhdGlibGUgb3B0aW9ucy4gIFdoZW4gR0NDIGludm9rZXMgdGhlCiAgICAgbGlua2VyLCBpdCBhcnJhbmdlcyB0byBsaW5rIGluIHRoZSByaWdodCB2ZXJzaW9uIG9mICdsaWJnY2MuYScsCiAgICAgYmFzZWQgb24gdGhlIGNvbW1hbmQgbGluZSBvcHRpb25zIHVzZWQuCgogICAgIFRoZSAnTVVMVElMSUJfT1BUSU9OUycgbWFjcm8gbGlzdHMgdGhlIHNldCBvZiBvcHRpb25zIGZvciB3aGljaAogICAgIHNwZWNpYWwgdmVyc2lvbnMgb2YgJ2xpYmdjYy5hJyBtdXN0IGJlIGJ1aWx0LiAgV3JpdGUgb3B0aW9ucyB0aGF0CiAgICAgYXJlIG11dHVhbGx5IGluY29tcGF0aWJsZSBzaWRlIGJ5IHNpZGUsIHNlcGFyYXRlZCBieSBhIHNsYXNoLgogICAgIFdyaXRlIG9wdGlvbnMgdGhhdCBtYXkgYmUgdXNlZCB0b2dldGhlciBzZXBhcmF0ZWQgYnkgYSBzcGFjZS4gIFRoZQogICAgIGJ1aWxkIHByb2NlZHVyZSB3aWxsIGJ1aWxkIGFsbCBjb21iaW5hdGlvbnMgb2YgY29tcGF0aWJsZSBvcHRpb25zLgoKICAgICBGb3IgZXhhbXBsZSwgaWYgeW91IHNldCAnTVVMVElMSUJfT1BUSU9OUycgdG8gJ202ODAwMC9tNjgwMjAKICAgICBtc29mdC1mbG9hdCcsICdNYWtlZmlsZScgd2lsbCBidWlsZCBzcGVjaWFsIHZlcnNpb25zIG9mICdsaWJnY2MuYScKICAgICB1c2luZyB0aGUgZm9sbG93aW5nIHNldHMgb2Ygb3B0aW9uczogJy1tNjgwMDAnLCAnLW02ODAyMCcsCiAgICAgJy1tc29mdC1mbG9hdCcsICctbTY4MDAwIC1tc29mdC1mbG9hdCcsIGFuZCAnLW02ODAyMCAtbXNvZnQtZmxvYXQnLgoKJ01VTFRJTElCX0RJUk5BTUVTJwogICAgIElmICdNVUxUSUxJQl9PUFRJT05TJyBpcyB1c2VkLCB0aGlzIHZhcmlhYmxlIHNwZWNpZmllcyB0aGUKICAgICBkaXJlY3RvcnkgbmFtZXMgdGhhdCBzaG91bGQgYmUgdXNlZCB0byBob2xkIHRoZSB2YXJpb3VzIGxpYnJhcmllcy4KICAgICBXcml0ZSBvbmUgZWxlbWVudCBpbiAnTVVMVElMSUJfRElSTkFNRVMnIGZvciBlYWNoIGVsZW1lbnQgaW4KICAgICAnTVVMVElMSUJfT1BUSU9OUycuICBJZiAnTVVMVElMSUJfRElSTkFNRVMnIGlzIG5vdCB1c2VkLCB0aGUKICAgICBkZWZhdWx0IHZhbHVlIHdpbGwgYmUgJ01VTFRJTElCX09QVElPTlMnLCB3aXRoIGFsbCBzbGFzaGVzIHRyZWF0ZWQKICAgICBhcyBzcGFjZXMuCgogICAgIEZvciBleGFtcGxlLCBpZiAnTVVMVElMSUJfT1BUSU9OUycgaXMgc2V0IHRvICdtNjgwMDAvbTY4MDIwCiAgICAgbXNvZnQtZmxvYXQnLCB0aGVuIHRoZSBkZWZhdWx0IHZhbHVlIG9mICdNVUxUSUxJQl9ESVJOQU1FUycgaXMKICAgICAnbTY4MDAwIG02ODAyMCBtc29mdC1mbG9hdCcuICBZb3UgbWF5IHNwZWNpZnkgYSBkaWZmZXJlbnQgdmFsdWUgaWYKICAgICB5b3UgZGVzaXJlIGEgZGlmZmVyZW50IHNldCBvZiBkaXJlY3RvcnkgbmFtZXMuCgonTVVMVElMSUJfTUFUQ0hFUycKICAgICBTb21ldGltZXMgdGhlIHNhbWUgb3B0aW9uIG1heSBiZSB3cml0dGVuIGluIHR3byBkaWZmZXJlbnQgd2F5cy4gIElmCiAgICAgYW4gb3B0aW9uIGlzIGxpc3RlZCBpbiAnTVVMVElMSUJfT1BUSU9OUycsIEdDQyBuZWVkcyB0byBrbm93IGFib3V0CiAgICAgYW55IHN5bm9ueW1zLiAgSW4gdGhhdCBjYXNlLCBzZXQgJ01VTFRJTElCX01BVENIRVMnIHRvIGEgbGlzdCBvZgogICAgIGl0ZW1zIG9mIHRoZSBmb3JtICdvcHRpb249b3B0aW9uJyB0byBkZXNjcmliZSBhbGwgcmVsZXZhbnQKICAgICBzeW5vbnltcy4gIEZvciBleGFtcGxlLCAnbTY4MDAwPW1jNjgwMDAgbTY4MDIwPW1jNjgwMjAnLgoKJ01VTFRJTElCX0VYQ0VQVElPTlMnCiAgICAgU29tZXRpbWVzIHdoZW4gdGhlcmUgYXJlIG11bHRpcGxlIHNldHMgb2YgJ01VTFRJTElCX09QVElPTlMnIGJlaW5nCiAgICAgc3BlY2lmaWVkLCB0aGVyZSBhcmUgY29tYmluYXRpb25zIHRoYXQgc2hvdWxkIG5vdCBiZSBidWlsdC4gIEluCiAgICAgdGhhdCBjYXNlLCBzZXQgJ01VTFRJTElCX0VYQ0VQVElPTlMnIHRvIGJlIGFsbCBvZiB0aGUgc3dpdGNoCiAgICAgZXhjZXB0aW9ucyBpbiBzaGVsbCBjYXNlIHN5bnRheCB0aGF0IHNob3VsZCBub3QgYmUgYnVpbHQuCgogICAgIEZvciBleGFtcGxlIHRoZSBBUk0gcHJvY2Vzc29yIGNhbm5vdCBleGVjdXRlIGJvdGggaGFyZHdhcmUgZmxvYXRpbmcKICAgICBwb2ludCBpbnN0cnVjdGlvbnMgYW5kIHRoZSByZWR1Y2VkIHNpemUgVEhVTUIgaW5zdHJ1Y3Rpb25zIGF0IHRoZQogICAgIHNhbWUgdGltZSwgc28gdGhlcmUgaXMgbm8gbmVlZCB0byBidWlsZCBsaWJyYXJpZXMgd2l0aCBib3RoIG9mCiAgICAgdGhlc2Ugb3B0aW9ucyBlbmFibGVkLiAgVGhlcmVmb3JlICdNVUxUSUxJQl9FWENFUFRJT05TJyBpcyBzZXQgdG86CiAgICAgICAgICAqbXRodW1iLyptaGFyZC1mbG9hdCoKCidNVUxUSUxJQl9FWFRSQV9PUFRTJwogICAgIFNvbWV0aW1lcyBpdCBpcyBkZXNpcmFibGUgdGhhdCB3aGVuIGJ1aWxkaW5nIG11bHRpcGxlIHZlcnNpb25zIG9mCiAgICAgJ2xpYmdjYy5hJyBjZXJ0YWluIG9wdGlvbnMgc2hvdWxkIGFsd2F5cyBiZSBwYXNzZWQgb24gdG8gdGhlCiAgICAgY29tcGlsZXIuICBJbiB0aGF0IGNhc2UsIHNldCAnTVVMVElMSUJfRVhUUkFfT1BUUycgdG8gYmUgdGhlIGxpc3QKICAgICBvZiBvcHRpb25zIHRvIGJlIHVzZWQgZm9yIGFsbCBidWlsZHMuICBJZiB5b3Ugc2V0IHRoaXMsIHlvdSBzaG91bGQKICAgICBwcm9iYWJseSBzZXQgJ0NSVFNUVUZGX1RfQ0ZMQUdTJyB0byBhIGRhc2ggZm9sbG93ZWQgYnkgaXQuCgonTkFUSVZFX1NZU1RFTV9IRUFERVJfRElSJwogICAgIElmIHRoZSBkZWZhdWx0IGxvY2F0aW9uIGZvciBzeXN0ZW0gaGVhZGVycyBpcyBub3QgJy91c3IvaW5jbHVkZScsCiAgICAgeW91IG11c3Qgc2V0IHRoaXMgdG8gdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBoZWFkZXJzLiAgVGhpcwogICAgIHZhbHVlIHNob3VsZCBtYXRjaCB0aGUgdmFsdWUgb2YgdGhlICdTWVNURU1fSU5DTFVERV9ESVInIG1hY3JvLgoKJ1NQRUNTJwogICAgIFVuZm9ydHVuYXRlbHksIHNldHRpbmcgJ01VTFRJTElCX0VYVFJBX09QVFMnIGlzIG5vdCBlbm91Z2gsIHNpbmNlCiAgICAgaXQgZG9lcyBub3QgYWZmZWN0IHRoZSBidWlsZCBvZiB0YXJnZXQgbGlicmFyaWVzLCBhdCBsZWFzdCBub3QgdGhlCiAgICAgYnVpbGQgb2YgdGhlIGRlZmF1bHQgbXVsdGlsaWIuICBPbmUgcG9zc2libGUgd29yay1hcm91bmQgaXMgdG8gdXNlCiAgICAgJ0RSSVZFUl9TRUxGX1NQRUNTJyB0byBicmluZyBvcHRpb25zIGZyb20gdGhlICdzcGVjcycgZmlsZSBhcyBpZgogICAgIHRoZXkgaGFkIGJlZW4gcGFzc2VkIGluIHRoZSBjb21waWxlciBkcml2ZXIgY29tbWFuZCBsaW5lLiAgSG93ZXZlciwKICAgICB5b3UgZG9uJ3Qgd2FudCB0byBiZSBhZGRpbmcgdGhlc2Ugb3B0aW9ucyBhZnRlciB0aGUgdG9vbGNoYWluIGlzCiAgICAgaW5zdGFsbGVkLCBzbyB5b3UgY2FuIGluc3RlYWQgdHdlYWsgdGhlICdzcGVjcycgZmlsZSB0aGF0IHdpbGwgYmUKICAgICB1c2VkIGR1cmluZyB0aGUgdG9vbGNoYWluIGJ1aWxkLCB3aGlsZSB5b3Ugc3RpbGwgaW5zdGFsbCB0aGUKICAgICBvcmlnaW5hbCwgYnVpbHQtaW4gJ3NwZWNzJy4gIFRoZSB0cmljayBpcyB0byBzZXQgJ1NQRUNTJyB0byBzb21lCiAgICAgb3RoZXIgZmlsZW5hbWUgKHNheSAnc3BlY3MuaW5zdGFsbCcpLCB0aGF0IHdpbGwgdGhlbiBiZSBjcmVhdGVkIG91dAogICAgIG9mIHRoZSBidWlsdC1pbiBzcGVjcywgYW5kIGludHJvZHVjZSBhICdNYWtlZmlsZScgcnVsZSB0byBnZW5lcmF0ZQogICAgIHRoZSAnc3BlY3MnIGZpbGUgdGhhdCdzIGdvaW5nIHRvIGJlIHVzZWQgYXQgYnVpbGQgdGltZSBvdXQgb2YgeW91cgogICAgICdzcGVjcy5pbnN0YWxsJy4KCh8KRmlsZTogZ2NjaW50LmluZm8sICBOb2RlOiBIb3N0IEZyYWdtZW50LCAgUHJldjogVGFyZ2V0IEZyYWdtZW50LCAgVXA6IEZyYWdtZW50cwoKMTcuMiBIb3N0IE1ha2VmaWxlIEZyYWdtZW50cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpUaGUgdXNlIG9mICd4LUhPU1QnIGZyYWdtZW50cyBpcyBkaXNjb3VyYWdlZC4gIFlvdSBzaG91bGQgZG8gc28gb25seSBpZgp0aGVyZSBpcyBubyBvdGhlciBtZWNoYW5pc20gdG8gZ2V0IHRoZSBiZWhhdmlvciBkZXNpcmVkLiAgSG9zdCBmcmFnbWVudHMKc2hvdWxkIG5ldmVyIGZvcmNpYmx5IG92ZXJyaWRlIHZhcmlhYmxlcyBzZXQgYnkgdGhlIGNvbmZpZ3VyZSBzY3JpcHQsIGFzCnRoZXkgbWF5IGhhdmUgYmVlbiBhZGp1c3RlZCBieSB0aGUgdXNlci4KCiBWYXJpYWJsZXMgcHJvdmlkZWQgZm9yIGhvc3QgZnJhZ21lbnRzIHRvIHNldCBpbmNsdWRlOgoKJ1hfQ0ZMQUdTJwonWF9DUFBGTEFHUycKICAgICBUaGVzZSBhcmUgZXh0cmEgZmxhZ3MgdG8gcGFzcyB0byB0aGUgQyBjb21waWxlciBhbmQgcHJlcHJvY2Vzc29yLAogICAgIHJlc3BlY3RpdmVseS4gIFRoZXkgYXJlIHVzZWQgYm90aCB3aGVuIGJ1aWxkaW5nIEdDQywgYW5kIHdoZW4KICAgICBjb21waWxpbmcgdGhpbmdzIHdpdGggdGhlIGp1c3QtYnVpbHQgR0NDLgoKJ1hDRkxBR1MnCiAgICAgVGhlc2UgYXJlIGV4dHJhIGZsYWdzIHRvIHVzZSB3aGVuIGJ1aWxkaW5nIHRoZSBjb21waWxlci4gIFRoZXkgYXJlCiAgICAgbm90IHVzZWQgd2hlbiBjb21waWxpbmcgJ2xpYmdjYy5hJy4gIEhvd2V2ZXIsIHRoZXkgX2FyZV8gdXNlZCB3aGVuCiAgICAgcmVjb21waWxpbmcgdGhlIGNvbXBpbGVyIHdpdGggaXRzZWxmIGluIGxhdGVyIHN0YWdlcyBvZiBhCiAgICAgYm9vdHN0cmFwLgoKJ0JPT1RfTERGTEFHUycKICAgICBGbGFncyB0byBiZSBwYXNzZWQgdG8gdGhlIGxpbmtlciB3aGVuIHJlY29tcGlsaW5nIHRoZSBjb21waWxlciB3aXRoCiAgICAgaXRzZWxmIGluIGxhdGVyIHN0YWdlcyBvZiBhIGJvb3RzdHJhcC4gIFlvdSBtaWdodCBuZWVkIHRvIHVzZSB0aGlzCiAgICAgaWYsIGZvciBpbnN0YW5jZSwgb25lIG9mIHRoZSBmcm9udCBlbmRzIG5lZWRzIG1vcmUgdGV4dCBzcGFjZSB0aGFuCiAgICAgdGhlIGxpbmtlciBwcm92aWRlcyBieSBkZWZhdWx0LgoKJ0VYVFJBX1BST0dSQU1TJwogICAgIEEgbGlzdCBvZiBhZGRpdGlvbmFsIHByb2dyYW1zIHJlcXVpcmVkIHRvIHVzZSB0aGUgY29tcGlsZXIgb24gdGhpcwogICAgIGhvc3QsIHdoaWNoIHNob3VsZCBiZSBjb21waWxlZCB3aXRoIEdDQyBhbmQgaW5zdGFsbGVkIGFsb25nc2lkZSB0aGUKICAgICBmcm9udCBlbmRzLiAgSWYgeW91IHNldCB0aGlzIHZhcmlhYmxlLCB5b3UgbXVzdCBhbHNvIHByb3ZpZGUgcnVsZXMKICAgICB0byBidWlsZCB0aGUgZXh0cmEgcHJvZ3JhbXMuCgofCkZpbGU6IGdjY2ludC5pbmZvLCAgTm9kZTogQ29sbGVjdDIsICBOZXh0OiBIZWFkZXIgRGlycywgIFByZXY6IEZyYWdtZW50cywgIFVwOiBUb3AKCjE4ICdjb2xsZWN0MicKKioqKioqKioqKioqKgoKR0NDIHVzZXMgYSB1dGlsaXR5IGNhbGxlZCAnY29sbGVjdDInIG9uIG5lYXJseSBhbGwgc3lzdGVtcyB0byBhcnJhbmdlIHRvCmNhbGwgdmFyaW91cyBpbml0aWFsaXphdGlvbiBmdW5jdGlvbnMgYXQgc3RhcnQgdGltZS4KCiBUaGUgcHJvZ3JhbSAnY29sbGVjdDInIHdvcmtzIGJ5IGxpbmtpbmcgdGhlIHByb2dyYW0gb25jZSBhbmQgbG9va2luZwp0aHJvdWdoIHRoZSBsaW5rZXIgb3V0cHV0IGZpbGUgZm9yIHN5bWJvbHMgd2l0aCBwYXJ0aWN1bGFyIG5hbWVzCmluZGljYXRpbmcgdGhleSBhcmUgY29uc3RydWN0b3IgZnVuY3Rpb25zLiAgSWYgaXQgZmluZHMgYW55LCBpdCBjcmVhdGVzCmEgbmV3IHRlbXBvcmFyeSAnLmMnIGZpbGUgY29udGFpbmluZyBhIHRhYmxlIG9mIHRoZW0sIGNvbXBpbGVzIGl0LCBhbmQKbGlua3MgdGhlIHByb2dyYW0gYSBzZWNvbmQgdGltZSBpbmNsdWRpbmcgdGhhdCBmaWxlLgoKIFRoZSBhY3R1YWwgY2FsbHMgdG8gdGhlIGNvbnN0cnVjdG9ycyBhcmUgY2FycmllZCBvdXQgYnkgYSBzdWJyb3V0aW5lCmNhbGxlZCAnX19tYWluJywgd2hpY2ggaXMgY2FsbGVkIChhdXRvbWF0aWNhbGx5KSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZQpib2R5IG9mICdtYWluJyAocHJvdmlkZWQgJ21haW4nIHdhcyBjb21waWxlZCB3aXRoIEdOVSBDQykuICBDYWxsaW5nCidfX21haW4nIGlzIG5lY2Vzc2FyeSwgZXZlbiB3aGVuIGNvbXBpbGluZyBDIGNvZGUsIHRvIGFsbG93IGxpbmtpbmcgQwphbmQgQysrIG9iamVjdCBjb2RlIHRvZ2V0aGVyLiAgKElmIHlvdSB1c2UgJy1ub3N0ZGxpYicsIHlvdSBnZXQgYW4KdW5yZXNvbHZlZCByZWZlcmVuY2UgdG8gJ19fbWFpbicsIHNpbmNlIGl0J3MgZGVmaW5lZCBpbiB0aGUgc3RhbmRhcmQgR0NDCmxpYnJhcnkuICBJbmNsdWRlICctbGdjYycgYXQgdGhlIGVuZCBvZiB5b3VyIGNvbXBpbGVyIGNvbW1hbmQgbGluZSB0bwpyZXNvbHZlIHRoaXMgcmVmZXJlbmNlLikKCiBUaGUgcHJvZ3JhbSAnY29sbGVjdDInIGlzIGluc3RhbGxlZCBhcyAnbGQnIGluIHRoZSBkaXJlY3Rvcnkgd2hlcmUgdGhlCnBhc3NlcyBvZiB0aGUgY29tcGlsZXIgYXJlIGluc3RhbGxlZC4gIFdoZW4gJ2NvbGxlY3QyJyBuZWVkcyB0byBmaW5kIHRoZQpfcmVhbF8gJ2xkJywgaXQgdHJpZXMgdGhlIGZvbGxvd2luZyBmaWxlIG5hbWVzOgoKICAgKiAncmVhbC1sZCcgaW4gdGhlIGRpcmVjdG9yaWVzIGxpc3RlZCBpbiB0aGUgY29tcGlsZXIncyBzZWFyY2gKICAgICBkaXJlY3Rvcmllcy4KCiAgICogJ3JlYWwtbGQnIGluIHRoZSBkaXJlY3RvcmllcyBsaXN0ZWQgaW4gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlCiAgICAgJ1BBVEgnLgoKICAgKiBUaGUgZmlsZSBzcGVjaWZpZWQgaW4gdGhlICdSRUFMX0xEX0ZJTEVfTkFNRScgY29uZmlndXJhdGlvbiBtYWNybywKICAgICBpZiBzcGVjaWZpZWQuCgogICAqICdsZCcgaW4gdGhlIGNvbXBpbGVyJ3Mgc2VhcmNoIGRpcmVjdG9yaWVzLCBleGNlcHQgdGhhdCAnY29sbGVjdDInCiAgICAgd2lsbCBub3QgZXhlY3V0ZSBpdHNlbGYgcmVjdXJzaXZlbHkuCgogICAqICdsZCcgaW4gJ1BBVEgnLgoKICJUaGUgY29tcGlsZXIncyBzZWFyY2ggZGlyZWN0b3JpZXMiIG1lYW5zIGFsbCB0aGUgZGlyZWN0b3JpZXMgd2hlcmUKJ2djYycgc2VhcmNoZXMgZm9yIHBhc3NlcyBvZiB0aGUgY29tcGlsZXIuICBUaGlzIGluY2x1ZGVzIGRpcmVjdG9yaWVzCnRoYXQgeW91IHNwZWNpZnkgd2l0aCAnLUInLgoKIENyb3NzLWNvbXBpbGVycyBzZWFyY2ggYSBsaXR0bGUgZGlmZmVyZW50bHk6CgogICAqICdyZWFsLWxkJyBpbiB0aGUgY29tcGlsZXIncyBzZWFyY2ggZGlyZWN0b3JpZXMuCgogICAqICdUQVJHRVQtcmVhbC1sZCcgaW4gJ1BBVEgnLgoKICAgKiBUaGUgZmlsZSBzcGVjaWZpZWQgaW4gdGhlICdSRUFMX0xEX0ZJTEVfTkFNRScgY29uZmlndXJhdGlvbiBtYWNybywKICAgICBpZiBzcGVjaWZpZWQuCgogICAqICdsZCcgaW4gdGhlIGNvbXBpbGVyJ3Mgc2VhcmNoIGRpcmVjdG9yaWVzLgoKICAgKiAnVEFSR0VULWxkJyBpbiAnUEFUSCcuCgogJ2NvbGxlY3QyJyBleHBsaWNpdGx5IGF2b2lkcyBydW5uaW5nICdsZCcgdXNpbmcgdGhlIGZpbGUgbmFtZSB1bmRlcgp3aGljaCAnY29sbGVjdDInIGl0c2VsZiB3YXMgaW52b2tlZC4gIEluIGZhY3QsIGl0IHJlbWVtYmVycyB1cCBhIGxpc3Qgb2YKc3VjaCBuYW1lcy0taW4gY2FzZSBvbmUgY29weSBvZiAnY29sbGVjdDInIGZpbmRzIGFub3RoZXIgY29weSAob3IKdmVyc2lvbikgb2YgJ2NvbGxlY3QyJyBpbnN0YWxsZWQgYXMgJ2xkJyBpbiBhIHNlY29uZCBwbGFjZSBpbiB0aGUgc2VhcmNoCnBhdGguCgogJ2NvbGxlY3QyJyBzZWFyY2hlcyBmb3IgdGhlIHV0aWxpdGllcyAnbm0nIGFuZCAnc3RyaXAnIHVzaW5nIHRoZSBzYW1lCmFsZ29yaXRobSBhcyBhYm92ZSBmb3IgJ2xkJy4KCh8KRmlsZTogZ2NjaW50LmluZm8sICBOb2RlOiBIZWFkZXIgRGlycywgIE5leHQ6IFR5cGUgSW5mb3JtYXRpb24sICBQcmV2OiBDb2xsZWN0MiwgIFVwOiBUb3AKCjE5IFN0YW5kYXJkIEhlYWRlciBGaWxlIERpcmVjdG9yaWVzCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgonR0NDX0lOQ0xVREVfRElSJyBtZWFucyB0aGUgc2FtZSB0aGluZyBmb3IgbmF0aXZlIGFuZCBjcm9zcy4gIEl0IGlzCndoZXJlIEdDQyBzdG9yZXMgaXRzIHByaXZhdGUgaW5jbHVkZSBmaWxlcywgYW5kIGFsc28gd2hlcmUgR0NDIHN0b3Jlcwp0aGUgZml4ZWQgaW5jbHVkZSBmaWxlcy4gIEEgY3Jvc3MgY29tcGlsZWQgR0NDIHJ1bnMgJ2ZpeGluY2x1ZGVzJyBvbiB0aGUKaGVhZGVyIGZpbGVzIGluICckKHRvb2xkaXIpL2luY2x1ZGUnLiAgKElmIHRoZSBjcm9zcyBjb21waWxhdGlvbiBoZWFkZXIKZmlsZXMgbmVlZCB0byBiZSBmaXhlZCwgdGhleSBtdXN0IGJlIGluc3RhbGxlZCBiZWZvcmUgR0NDIGlzIGJ1aWx0LiAgSWYKdGhlIGNyb3NzIGNvbXBpbGF0aW9uIGhlYWRlciBmaWxlcyBhcmUgYWxyZWFkeSBzdWl0YWJsZSBmb3IgR0NDLCBub3RoaW5nCnNwZWNpYWwgbmVlZCBiZSBkb25lKS4KCiAnR1BMVVNQTFVTX0lOQ0xVREVfRElSJyBtZWFucyB0aGUgc2FtZSB0aGluZyBmb3IgbmF0aXZlIGFuZCBjcm9zcy4gIEl0CmlzIHdoZXJlICdnKysnIGxvb2tzIGZpcnN0IGZvciBoZWFkZXIgZmlsZXMuICBUaGUgQysrIGxpYnJhcnkgaW5zdGFsbHMKb25seSB0YXJnZXQgaW5kZXBlbmRlbnQgaGVhZGVyIGZpbGVzIGluIHRoYXQgZGlyZWN0b3J5LgoKICdMT0NBTF9JTkNMVURFX0RJUicgaXMgdXNlZCBvbmx5IGJ5IG5hdGl2ZSBjb21waWxlcnMuICBHQ0MgZG9lc24ndAppbnN0YWxsIGFueXRoaW5nIHRoZXJlLiAgSXQgaXMgbm9ybWFsbHkgJy91c3IvbG9jYWwvaW5jbHVkZScuICBUaGlzIGlzCndoZXJlIGxvY2FsIGFkZGl0aW9ucyB0byBhIHBhY2thZ2VkIHN5c3RlbSBzaG91bGQgcGxhY2UgaGVhZGVyIGZpbGVzLgoKICdDUk9TU19JTkNMVURFX0RJUicgaXMgdXNlZCBvbmx5IGJ5IGNyb3NzIGNvbXBpbGVycy4gIEdDQyBkb2Vzbid0Cmluc3RhbGwgYW55dGhpbmcgdGhlcmUuCgogJ1RPT0xfSU5DTFVERV9ESVInIGlzIHVzZWQgZm9yIGJvdGggbmF0aXZlIGFuZCBjcm9zcyBjb21waWxlcnMuICBJdCBpcwp0aGUgcGxhY2UgZm9yIG90aGVyIHBhY2thZ2VzIHRvIGluc3RhbGwgaGVhZGVyIGZpbGVzIHRoYXQgR0NDIHdpbGwgdXNlLgpGb3IgYSBjcm9zcy1jb21waWxlciwgdGhpcyBpcyB0aGUgZXF1aXZhbGVudCBvZiAnL3Vzci9pbmNsdWRlJy4gIFdoZW4KeW91IGJ1aWxkIGEgY3Jvc3MtY29tcGlsZXIsICdmaXhpbmNsdWRlcycgcHJvY2Vzc2VzIGFueSBoZWFkZXIgZmlsZXMgaW4KdGhpcyBkaXJlY3RvcnkuCgofCkZpbGU6IGdjY2ludC5pbmZvLCAgTm9kZTogVHlwZSBJbmZvcm1hdGlvbiwgIE5leHQ6IEZ1bmRpbmcsICBQcmV2OiBIZWFkZXIgRGlycywgIFVwOiBUb3AKCjIwIE1lbW9yeSBNYW5hZ2VtZW50IGFuZCBUeXBlIEluZm9ybWF0aW9uCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgpHQ0MgdXNlcyBzb21lIGZhaXJseSBzb3BoaXN0aWNhdGVkIG1lbW9yeSBtYW5hZ2VtZW50IHRlY2huaXF1ZXMsIHdoaWNoCmludm9sdmUgZGV0ZXJtaW5pbmcgaW5mb3JtYXRpb24gYWJvdXQgR0NDJ3MgZGF0YSBzdHJ1Y3R1cmVzIGZyb20gR0NDJ3MKc291cmNlIGNvZGUgYW5kIHVzaW5nIHRoaXMgaW5mb3JtYXRpb24gdG8gcGVyZm9ybSBnYXJiYWdlIGNvbGxlY3Rpb24gYW5kCmltcGxlbWVudCBwcmVjb21waWxlZCBoZWFkZXJzLgoKIEEgZnVsbCBDIHBhcnNlciB3b3VsZCBiZSB0b28gY29tcGxpY2F0ZWQgZm9yIHRoaXMgdGFzaywgc28gYSBsaW1pdGVkCnN1YnNldCBvZiBDIGlzIGludGVycHJldGVkIGFuZCBzcGVjaWFsIG1hcmtlcnMgYXJlIHVzZWQgdG8gZGV0ZXJtaW5lCndoYXQgcGFydHMgb2YgdGhlIHNvdXJjZSB0byBsb29rIGF0LiAgQWxsICdzdHJ1Y3QnIGFuZCAndW5pb24nCmRlY2xhcmF0aW9ucyB0aGF0IGRlZmluZSBkYXRhIHN0cnVjdHVyZXMgdGhhdCBhcmUgYWxsb2NhdGVkIHVuZGVyCmNvbnRyb2wgb2YgdGhlIGdhcmJhZ2UgY29sbGVjdG9yIG11c3QgYmUgbWFya2VkLiAgQWxsIGdsb2JhbCB2YXJpYWJsZXMKdGhhdCBob2xkIHBvaW50ZXJzIHRvIGdhcmJhZ2UtY29sbGVjdGVkIG1lbW9yeSBtdXN0IGFsc28gYmUgbWFya2VkLgpGaW5hbGx5LCBhbGwgZ2xvYmFsIHZhcmlhYmxlcyB0aGF0IG5lZWQgdG8gYmUgc2F2ZWQgYW5kIHJlc3RvcmVkIGJ5IGEKcHJlY29tcGlsZWQgaGVhZGVyIG11c3QgYmUgbWFya2VkLiAgKFRoZSBwcmVjb21waWxlZCBoZWFkZXIgbWVjaGFuaXNtCmNhbiBvbmx5IHNhdmUgc3RhdGljIHZhcmlhYmxlcyBpZiB0aGV5J3JlIHNjYWxhci4gIENvbXBsZXggZGF0YQpzdHJ1Y3R1cmVzIG11c3QgYmUgYWxsb2NhdGVkIGluIGdhcmJhZ2UtY29sbGVjdGVkIG1lbW9yeSB0byBiZSBzYXZlZCBpbgphIHByZWNvbXBpbGVkIGhlYWRlci4pCgogVGhlIGZ1bGwgZm9ybWF0IG9mIGEgbWFya2VyIGlzCiAgICAgR1RZICgoW09QVElPTl0gWyhQQVJBTSldLCBbT1BUSU9OXSBbKFBBUkFNKV0gLi4uKSkKYnV0IGluIG1vc3QgY2FzZXMgbm8gb3B0aW9ucyBhcmUgbmVlZGVkLiAgVGhlIG91dGVyIGRvdWJsZSBwYXJlbnRoZXNlcwphcmUgc3RpbGwgbmVjZXNzYXJ5LCB0aG91Z2g6ICdHVFkoKCkpJy4gIE1hcmtlcnMgY2FuIGFwcGVhcjoKCiAgICogSW4gYSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiwgYmVmb3JlIHRoZSBvcGVuIGJyYWNlOwogICAqIEluIGEgZ2xvYmFsIHZhcmlhYmxlIGRlY2xhcmF0aW9uLCBhZnRlciB0aGUga2V5d29yZCAnc3RhdGljJyBvcgogICAgICdleHRlcm4nOyBhbmQKICAgKiBJbiBhIHN0cnVjdHVyZSBmaWVsZCBkZWZpbml0aW9uLCBiZWZvcmUgdGhlIG5hbWUgb2YgdGhlIGZpZWxkLgoKIEhlcmUgYXJlIHNvbWUgZXhhbXBsZXMgb2YgbWFya2luZyBzaW1wbGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBnbG9iYWxzLgoKICAgICBzdHJ1Y3QgVEFHIEdUWSgoKSkKICAgICB7CiAgICAgICBGSUVMRFMuLi4KICAgICB9OwoKICAgICB0eXBlZGVmIHN0cnVjdCBUQUcgR1RZKCgpKQogICAgIHsKICAgICAgIEZJRUxEUy4uLgogICAgIH0gKlRZUEVOQU1FOwoKICAgICBzdGF0aWMgR1RZKCgpKSBzdHJ1Y3QgVEFHICpMSVNUOyAgIC8qIHBvaW50cyB0byBHQyBtZW1vcnkgKi8KICAgICBzdGF0aWMgR1RZKCgpKSBpbnQgQ09VTlRFUjsgICAgICAgIC8qIHNhdmUgY291bnRlciBpbiBhIFBDSCAqLwoKIFRoZSBwYXJzZXIgdW5kZXJzdGFuZHMgc2ltcGxlIHR5cGVkZWZzIHN1Y2ggYXMgJ3R5cGVkZWYgc3RydWN0IFRBRwoqTkFNRTsnIGFuZCAndHlwZWRlZiBpbnQgTkFNRTsnLiAgVGhlc2UgZG9uJ3QgbmVlZCB0byBiZSBtYXJrZWQuCgoqIE1lbnU6CgoqIEdUWSBPcHRpb25zOjoJCVdoYXQgZ29lcyBpbnNpZGUgYSAnR1RZKCgpKScuCiogR0dDIFJvb3RzOjoJCU1ha2luZyBnbG9iYWwgdmFyaWFibGVzIEdHQyByb290cy4KKiBGaWxlczo6CQlIb3cgdGhlIGdlbmVyYXRlZCBmaWxlcyB3b3JrLgoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IEdUWSBPcHRpb25zLCAgTmV4dDogR0dDIFJvb3RzLCAgVXA6IFR5cGUgSW5mb3JtYXRpb24KCjIwLjEgVGhlIEluc2lkZSBvZiBhICdHVFkoKCkpJwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KClNvbWV0aW1lcyB0aGUgQyBjb2RlIGlzIG5vdCBlbm91Z2ggdG8gZnVsbHkgZGVzY3JpYmUgdGhlIHR5cGUgc3RydWN0dXJlLgpFeHRyYSBpbmZvcm1hdGlvbiBjYW4gYmUgcHJvdmlkZWQgd2l0aCAnR1RZJyBvcHRpb25zIGFuZCBhZGRpdGlvbmFsCm1hcmtlcnMuICBTb21lIG9wdGlvbnMgdGFrZSBhIHBhcmFtZXRlciwgd2hpY2ggbWF5IGJlIGVpdGhlciBhIHN0cmluZyBvcgphIHR5cGUgbmFtZSwgZGVwZW5kaW5nIG9uIHRoZSBwYXJhbWV0ZXIuICBJZiBhbiBvcHRpb24gdGFrZXMgbm8KcGFyYW1ldGVyLCBpdCBpcyBhY2NlcHRhYmxlIGVpdGhlciB0byBvbWl0IHRoZSBwYXJhbWV0ZXIgZW50aXJlbHksIG9yIHRvCnByb3ZpZGUgYW4gZW1wdHkgc3RyaW5nIGFzIGEgcGFyYW1ldGVyLiAgRm9yIGV4YW1wbGUsICdHVFkgKChza2lwKSknIGFuZAonR1RZICgoc2tpcCAoIiIpKSknIGFyZSBlcXVpdmFsZW50LgoKIFdoZW4gdGhlIHBhcmFtZXRlciBpcyBhIHN0cmluZywgb2Z0ZW4gaXQgaXMgYSBmcmFnbWVudCBvZiBDIGNvZGUuICBGb3VyCnNwZWNpYWwgZXNjYXBlcyBtYXkgYmUgdXNlZCBpbiB0aGVzZSBzdHJpbmdzLCB0byByZWZlciB0byBwaWVjZXMgb2YgdGhlCmRhdGEgc3RydWN0dXJlIGJlaW5nIG1hcmtlZDoKCiclaCcKICAgICBUaGUgY3VycmVudCBzdHJ1Y3R1cmUuCiclMScKICAgICBUaGUgc3RydWN0dXJlIHRoYXQgaW1tZWRpYXRlbHkgY29udGFpbnMgdGhlIGN1cnJlbnQgc3RydWN0dXJlLgonJTAnCiAgICAgVGhlIG91dGVybW9zdCBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucyB0aGUgY3VycmVudCBzdHJ1Y3R1cmUuCiclYScKICAgICBBIHBhcnRpYWwgZXhwcmVzc2lvbiBvZiB0aGUgZm9ybSAnW2kxXVtpMl0uLi4nIHRoYXQgaW5kZXhlcyB0aGUKICAgICBhcnJheSBpdGVtIGN1cnJlbnRseSBiZWluZyBtYXJrZWQuCgogRm9yIGluc3RhbmNlLCBzdXBwb3NlIHRoYXQgeW91IGhhdmUgYSBzdHJ1Y3R1cmUgb2YgdGhlIGZvcm0KICAgICBzdHJ1Y3QgQSB7CiAgICAgICAuLi4KICAgICB9OwogICAgIHN0cnVjdCBCIHsKICAgICAgIHN0cnVjdCBBIGZvb1sxMl07CiAgICAgfTsKYW5kICdiJyBpcyBhIHZhcmlhYmxlIG9mIHR5cGUgJ3N0cnVjdCBCJy4gIFdoZW4gbWFya2luZyAnYi5mb29bMTFdJywKJyVoJyB3b3VsZCBleHBhbmQgdG8gJ2IuZm9vWzExXScsICclMCcgYW5kICclMScgd291bGQgYm90aCBleHBhbmQgdG8KJ2InLCBhbmQgJyVhJyB3b3VsZCBleHBhbmQgdG8gJ1sxMV0nLgoKIEFzIGluIG9yZGluYXJ5IEMsIGFkamFjZW50IHN0cmluZ3Mgd2lsbCBiZSBjb25jYXRlbmF0ZWQ7IHRoaXMgaXMKaGVscGZ1bCB3aGVuIHlvdSBoYXZlIGEgY29tcGxpY2F0ZWQgZXhwcmVzc2lvbi4KICAgICBHVFkgKChjaGFpbl9uZXh0ICgiVFJFRV9DT0RFICgmJWguZ2VuZXJpYykgPT0gSU5URUdFUl9UWVBFIgogICAgICAgICAgICAgICAgICAgICAgICIgPyBUWVBFX05FWFRfVkFSSUFOVCAoJiVoLmdlbmVyaWMpIgogICAgICAgICAgICAgICAgICAgICAgICIgOiBUUkVFX0NIQUlOICgmJWguZ2VuZXJpYykiKSkpCgogVGhlIGF2YWlsYWJsZSBvcHRpb25zIGFyZToKCidsZW5ndGggKCJFWFBSRVNTSU9OIiknCgogICAgIFRoZXJlIGFyZSB0d28gcGxhY2VzIHRoZSB0eXBlIG1hY2hpbmVyeSB3aWxsIG5lZWQgdG8gYmUgZXhwbGljaXRseQogICAgIHRvbGQgdGhlIGxlbmd0aCBvZiBhbiBhcnJheS4gIFRoZSBmaXJzdCBjYXNlIGlzIHdoZW4gYSBzdHJ1Y3R1cmUKICAgICBlbmRzIGluIGEgdmFyaWFibGUtbGVuZ3RoIGFycmF5LCBsaWtlIHRoaXM6CiAgICAgICAgICBzdHJ1Y3QgcnR2ZWNfZGVmIEdUWSgoKSkgewogICAgICAgICAgICBpbnQgbnVtX2VsZW07CQkvKiBudW1iZXIgb2YgZWxlbWVudHMgKi8KICAgICAgICAgICAgcnR4IEdUWSAoKGxlbmd0aCAoIiVoLm51bV9lbGVtIikpKSBlbGVtWzFdOwogICAgICAgICAgfTsKCiAgICAgSW4gdGhpcyBjYXNlLCB0aGUgJ2xlbmd0aCcgb3B0aW9uIGlzIHVzZWQgdG8gb3ZlcnJpZGUgdGhlIHNwZWNpZmllZAogICAgIGFycmF5IGxlbmd0aCAod2hpY2ggc2hvdWxkIHVzdWFsbHkgYmUgJzEnKS4gIFRoZSBwYXJhbWV0ZXIgb2YgdGhlCiAgICAgb3B0aW9uIGlzIGEgZnJhZ21lbnQgb2YgQyBjb2RlIHRoYXQgY2FsY3VsYXRlcyB0aGUgbGVuZ3RoLgoKICAgICBUaGUgc2Vjb25kIGNhc2UgaXMgd2hlbiBhIHN0cnVjdHVyZSBvciBhIGdsb2JhbCB2YXJpYWJsZSBjb250YWlucyBhCiAgICAgcG9pbnRlciB0byBhbiBhcnJheSwgbGlrZSB0aGlzOgogICAgICAgICAgdHJlZSAqCiAgICAgICAgICAgIEdUWSAoKGxlbmd0aCAoIiVoLnJlZ25vX3BvaW50ZXJfYWxpZ25fbGVuZ3RoIikpKSByZWdub19kZWNsOwogICAgIEluIHRoaXMgY2FzZSwgJ3JlZ25vX2RlY2wnIGhhcyBiZWVuIGFsbG9jYXRlZCBieSB3cml0aW5nIHNvbWV0aGluZwogICAgIGxpa2UKICAgICAgICAgICAgeC0+cmVnbm9fZGVjbCA9CiAgICAgICAgICAgICAgZ2djX2FsbG9jICh4LT5yZWdub19wb2ludGVyX2FsaWduX2xlbmd0aCAqIHNpemVvZiAodHJlZSkpOwogICAgIGFuZCB0aGUgJ2xlbmd0aCcgcHJvdmlkZXMgdGhlIGxlbmd0aCBvZiB0aGUgZmllbGQuCgogICAgIFRoaXMgc2Vjb25kIHVzZSBvZiAnbGVuZ3RoJyBhbHNvIHdvcmtzIG9uIGdsb2JhbCB2YXJpYWJsZXMsIGxpa2U6CiAgICAgICBzdGF0aWMgR1RZKChsZW5ndGggKCJyZWdfYmFzZV92YWx1ZV9zaXplIikpKQogICAgICAgICBydHggKnJlZ19iYXNlX3ZhbHVlOwoKJ3NraXAnCgogICAgIElmICdza2lwJyBpcyBhcHBsaWVkIHRvIGEgZmllbGQsIHRoZSB0eXBlIG1hY2hpbmVyeSB3aWxsIGlnbm9yZSBpdC4KICAgICBUaGlzIGlzIHNvbWV3aGF0IGRhbmdlcm91czsgdGhlIG9ubHkgc2FmZSB1c2UgaXMgaW4gYSB1bmlvbiB3aGVuCiAgICAgb25lIGZpZWxkIHJlYWxseSBpc24ndCBldmVyIHVzZWQuCgonZGVzYyAoIkVYUFJFU1NJT04iKScKJ3RhZyAoIkNPTlNUQU5UIiknCidkZWZhdWx0JwoKICAgICBUaGUgdHlwZSBtYWNoaW5lcnkgbmVlZHMgdG8gYmUgdG9sZCB3aGljaCBmaWVsZCBvZiBhICd1bmlvbicgaXMKICAgICBjdXJyZW50bHkgYWN0aXZlLiAgVGhpcyBpcyBkb25lIGJ5IGdpdmluZyBlYWNoIGZpZWxkIGEgY29uc3RhbnQKICAgICAndGFnJyB2YWx1ZSwgYW5kIHRoZW4gc3BlY2lmeWluZyBhIGRpc2NyaW1pbmF0b3IgdXNpbmcgJ2Rlc2MnLiAgVGhlCiAgICAgdmFsdWUgb2YgdGhlIGV4cHJlc3Npb24gZ2l2ZW4gYnkgJ2Rlc2MnIGlzIGNvbXBhcmVkIGFnYWluc3QgZWFjaAogICAgICd0YWcnIHZhbHVlLCBlYWNoIG9mIHdoaWNoIHNob3VsZCBiZSBkaWZmZXJlbnQuICBJZiBubyAndGFnJyBpcwogICAgIG1hdGNoZWQsIHRoZSBmaWVsZCBtYXJrZWQgd2l0aCAnZGVmYXVsdCcgaXMgdXNlZCBpZiB0aGVyZSBpcyBvbmUsCiAgICAgb3RoZXJ3aXNlIG5vIGZpZWxkIGluIHRoZSB1bmlvbiB3aWxsIGJlIG1hcmtlZC4KCiAgICAgSW4gdGhlICdkZXNjJyBvcHRpb24sIHRoZSAiY3VycmVudCBzdHJ1Y3R1cmUiIGlzIHRoZSB1bmlvbiB0aGF0IGl0CiAgICAgZGlzY3JpbWluYXRlcy4gIFVzZSAnJTEnIHRvIG1lYW4gdGhlIHN0cnVjdHVyZSBjb250YWluaW5nIGl0LgogICAgIFRoZXJlIGFyZSBubyBlc2NhcGVzIGF2YWlsYWJsZSB0byB0aGUgJ3RhZycgb3B0aW9uLCBzaW5jZSBpdCBpcyBhCiAgICAgY29uc3RhbnQuCgogICAgIEZvciBleGFtcGxlLAogICAgICAgICAgc3RydWN0IHRyZWVfYmluZGluZyBHVFkoKCkpCiAgICAgICAgICB7CiAgICAgICAgICAgIHN0cnVjdCB0cmVlX2NvbW1vbiBjb21tb247CiAgICAgICAgICAgIHVuaW9uIHRyZWVfYmluZGluZ191IHsKICAgICAgICAgICAgICB0cmVlIEdUWSAoKHRhZyAoIjAiKSkpIHNjb3BlOwogICAgICAgICAgICAgIHN0cnVjdCBjcF9iaW5kaW5nX2xldmVsICogR1RZICgodGFnICgiMSIpKSkgbGV2ZWw7CiAgICAgICAgICAgIH0gR1RZICgoZGVzYyAoIkJJTkRJTkdfSEFTX0xFVkVMX1AgKCh0cmVlKSYlMCkiKSkpIHhzY29wZTsKICAgICAgICAgICAgdHJlZSB2YWx1ZTsKICAgICAgICAgIH07CgogICAgIEluIHRoaXMgZXhhbXBsZSwgdGhlIHZhbHVlIG9mIEJJTkRJTkdfSEFTX0xFVkVMX1Agd2hlbiBhcHBsaWVkIHRvIGEKICAgICAnc3RydWN0IHRyZWVfYmluZGluZyAqJyBpcyBwcmVzdW1lZCB0byBiZSAwIG9yIDEuICBJZiAxLCB0aGUgdHlwZQogICAgIG1lY2hhbmlzbSB3aWxsIHRyZWF0IHRoZSBmaWVsZCAnbGV2ZWwnIGFzIGJlaW5nIHByZXNlbnQgYW5kIGlmIDAsCiAgICAgd2lsbCB0cmVhdCB0aGUgZmllbGQgJ3Njb3BlJyBhcyBiZWluZyBwcmVzZW50LgoKJ3BhcmFtX2lzIChUWVBFKScKJ3VzZV9wYXJhbScKCiAgICAgU29tZXRpbWVzIGl0J3MgY29udmVuaWVudCB0byBkZWZpbmUgc29tZSBkYXRhIHN0cnVjdHVyZSB0byB3b3JrIG9uCiAgICAgZ2VuZXJpYyBwb2ludGVycyAodGhhdCBpcywgJ1BUUicpIGFuZCB0aGVuIHVzZSBpdCB3aXRoIGEgc3BlY2lmaWMKICAgICB0eXBlLiAgJ3BhcmFtX2lzJyBzcGVjaWZpZXMgdGhlIHJlYWwgdHlwZSBwb2ludGVkIHRvLCBhbmQKICAgICAndXNlX3BhcmFtJyBzYXlzIHdoZXJlIGluIHRoZSBnZW5lcmljIGRhdGEgc3RydWN0dXJlIHRoYXQgdHlwZQogICAgIHNob3VsZCBiZSBwdXQuCgogICAgIEZvciBpbnN0YW5jZSwgdG8gaGF2ZSBhICdodGFiX3QnIHRoYXQgcG9pbnRzIHRvIHRyZWVzLCBvbmUgd291bGQKICAgICB3cml0ZSB0aGUgZGVmaW5pdGlvbiBvZiAnaHRhYl90JyBsaWtlIHRoaXM6CiAgICAgICAgICB0eXBlZGVmIHN0cnVjdCBHVFkoKCkpIHsKICAgICAgICAgICAgLi4uCiAgICAgICAgICAgIHZvaWQgKiogR1RZICgodXNlX3BhcmFtLCAuLi4pKSBlbnRyaWVzOwogICAgICAgICAgICAuLi4KICAgICAgICAgIH0gaHRhYl90OwogICAgIGFuZCB0aGVuIGRlY2xhcmUgdmFyaWFibGVzIGxpa2UgdGhpczoKICAgICAgICAgICAgc3RhdGljIGh0YWJfdCBHVFkgKChwYXJhbV9pcyAodW5pb24gdHJlZV9ub2RlKSkpIGljdDsKCidwYXJhbU5faXMgKFRZUEUpJwondXNlX3BhcmFtTicKCiAgICAgSW4gbW9yZSBjb21wbGljYXRlZCBjYXNlcywgdGhlIGRhdGEgc3RydWN0dXJlIG1pZ2h0IG5lZWQgdG8gd29yayBvbgogICAgIHNldmVyYWwgZGlmZmVyZW50IHR5cGVzLCB3aGljaCBtaWdodCBub3QgbmVjZXNzYXJpbHkgYWxsIGJlCiAgICAgcG9pbnRlcnMuICBGb3IgdGhpcywgJ3BhcmFtMV9pcycgdGhyb3VnaCAncGFyYW05X2lzJyBtYXkgYmUgdXNlZCB0bwogICAgIHNwZWNpZnkgdGhlIHJlYWwgdHlwZSBvZiBhIGZpZWxkIGlkZW50aWZpZWQgYnkgJ3VzZV9wYXJhbTEnIHRocm91Z2gKICAgICAndXNlX3BhcmFtOScuCgondXNlX3BhcmFtcycKCiAgICAgV2hlbiBhIHN0cnVjdHVyZSBjb250YWlucyBhbm90aGVyIHN0cnVjdHVyZSB0aGF0IGlzIHBhcmFtZXRlcml6ZWQsCiAgICAgdGhlcmUncyBubyBuZWVkIHRvIGRvIGFueXRoaW5nIHNwZWNpYWwsIHRoZSBpbm5lciBzdHJ1Y3R1cmUKICAgICBpbmhlcml0cyB0aGUgcGFyYW1ldGVycyBvZiB0aGUgb3V0ZXIgb25lLiAgV2hlbiBhIHN0cnVjdHVyZQogICAgIGNvbnRhaW5zIGEgcG9pbnRlciB0byBhIHBhcmFtZXRlcml6ZWQgc3RydWN0dXJlLCB0aGUgdHlwZSBtYWNoaW5lcnkKICAgICB3b24ndCBhdXRvbWF0aWNhbGx5IGRldGVjdCB0aGlzIChpdCBjb3VsZCwgaXQganVzdCBkb2Vzbid0IHlldCksIHNvCiAgICAgaXQncyBuZWNlc3NhcnkgdG8gdGVsbCBpdCB0aGF0IHRoZSBwb2ludGVkLXRvIHN0cnVjdHVyZSBzaG91bGQgdXNlCiAgICAgdGhlIHNhbWUgcGFyYW1ldGVycyBhcyB0aGUgb3V0ZXIgc3RydWN0dXJlLiAgVGhpcyBpcyBkb25lIGJ5CiAgICAgbWFya2luZyB0aGUgcG9pbnRlciB3aXRoIHRoZSAndXNlX3BhcmFtcycgb3B0aW9uLgoKJ2RlbGV0YWJsZScKCiAgICAgJ2RlbGV0YWJsZScsIHdoZW4gYXBwbGllZCB0byBhIGdsb2JhbCB2YXJpYWJsZSwgaW5kaWNhdGVzIHRoYXQgd2hlbgogICAgIGdhcmJhZ2UgY29sbGVjdGlvbiBydW5zLCB0aGVyZSdzIG5vIG5lZWQgdG8gbWFyayBhbnl0aGluZyBwb2ludGVkCiAgICAgdG8gYnkgdGhpcyB2YXJpYWJsZSwgaXQgY2FuIGp1c3QgYmUgc2V0IHRvICdOVUxMJyBpbnN0ZWFkLiAgVGhpcyBpcwogICAgIHVzZWQgdG8ga2VlcCBhIGxpc3Qgb2YgZnJlZSBzdHJ1Y3R1cmVzIGFyb3VuZCBmb3IgcmUtdXNlLgoKJ2lmX21hcmtlZCAoIkVYUFJFU1NJT04iKScKCiAgICAgU3VwcG9zZSB5b3Ugd2FudCBzb21lIGtpbmRzIG9mIG9iamVjdCB0byBiZSB1bmlxdWUsIGFuZCBzbyB5b3UgcHV0CiAgICAgdGhlbSBpbiBhIGhhc2ggdGFibGUuICBJZiBnYXJiYWdlIGNvbGxlY3Rpb24gbWFya3MgdGhlIGhhc2ggdGFibGUsCiAgICAgdGhlc2Ugb2JqZWN0cyB3aWxsIG5ldmVyIGJlIGZyZWVkLCBldmVuIGlmIHRoZSBsYXN0IG90aGVyIHJlZmVyZW5jZQogICAgIHRvIHRoZW0gZ29lcyBhd2F5LiAgR0dDIGhhcyBzcGVjaWFsIGhhbmRsaW5nIHRvIGRlYWwgd2l0aCB0aGlzOiBpZgogICAgIHlvdSB1c2UgdGhlICdpZl9tYXJrZWQnIG9wdGlvbiBvbiBhIGdsb2JhbCBoYXNoIHRhYmxlLCBHR0Mgd2lsbAogICAgIGNhbGwgdGhlIHJvdXRpbmUgd2hvc2UgbmFtZSBpcyB0aGUgcGFyYW1ldGVyIHRvIHRoZSBvcHRpb24gb24gZWFjaAogICAgIGhhc2ggdGFibGUgZW50cnkuICBJZiB0aGUgcm91dGluZSByZXR1cm5zIG5vbnplcm8sIHRoZSBoYXNoIHRhYmxlCiAgICAgZW50cnkgd2lsbCBiZSBtYXJrZWQgYXMgdXN1YWwuICBJZiB0aGUgcm91dGluZSByZXR1cm5zIHplcm8sIHRoZQogICAgIGhhc2ggdGFibGUgZW50cnkgd2lsbCBiZSBkZWxldGVkLgoKICAgICBUaGUgcm91dGluZSAnZ2djX21hcmtlZF9wJyBjYW4gYmUgdXNlZCB0byBkZXRlcm1pbmUgaWYgYW4gZWxlbWVudAogICAgIGhhcyBiZWVuIG1hcmtlZCBhbHJlYWR5OyBpbiBmYWN0LCB0aGUgdXN1YWwgY2FzZSBpcyB0byB1c2UKICAgICAnaWZfbWFya2VkICgiZ2djX21hcmtlZF9wIiknLgoKJ21hcmtfaG9vayAoIkhPT0stUk9VVElORS1OQU1FIiknCgogICAgIElmIHByb3ZpZGVkIGZvciBhIHN0cnVjdHVyZSBvciB1bmlvbiB0eXBlLCB0aGUgZ2l2ZW4KICAgICBIT09LLVJPVVRJTkUtTkFNRSAoYmV0d2VlbiBkb3VibGUtcXVvdGVzKSBpcyB0aGUgbmFtZSBvZiBhIHJvdXRpbmUKICAgICBjYWxsZWQgd2hlbiB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IgaGFzIGp1c3QgbWFya2VkIHRoZSBkYXRhIGFzCiAgICAgcmVhY2hhYmxlLiAgVGhpcyByb3V0aW5lIHNob3VsZCBub3QgY2hhbmdlIHRoZSBkYXRhLCBvciBjYWxsIGFueQogICAgIGdnYyByb3V0aW5lLiAgSXRzIG9ubHkgYXJndW1lbnQgaXMgYSBwb2ludGVyIHRvIHRoZSBqdXN0IG1hcmtlZAogICAgIChjb25zdCkgc3RydWN0dXJlIG9yIHVuaW9uLgoKJ21heWJlX3VuZGVmJwoKICAgICBXaGVuIGFwcGxpZWQgdG8gYSBmaWVsZCwgJ21heWJlX3VuZGVmJyBpbmRpY2F0ZXMgdGhhdCBpdCdzIE9LIGlmCiAgICAgdGhlIHN0cnVjdHVyZSB0aGF0IHRoaXMgZmllbGRzIHBvaW50cyB0byBpcyBuZXZlciBkZWZpbmVkLCBzbyBsb25nCiAgICAgYXMgdGhpcyBmaWVsZCBpcyBhbHdheXMgJ05VTEwnLiAgVGhpcyBpcyB1c2VkIHRvIGF2b2lkIHJlcXVpcmluZwogICAgIGJhY2tlbmRzIHRvIGRlZmluZSBjZXJ0YWluIG9wdGlvbmFsIHN0cnVjdHVyZXMuICBJdCBkb2Vzbid0IHdvcmsKICAgICB3aXRoIGxhbmd1YWdlIGZyb250ZW5kcy4KCiduZXN0ZWRfcHRyIChUWVBFLCAiVE8gRVhQUkVTU0lPTiIsICJGUk9NIEVYUFJFU1NJT04iKScKCiAgICAgVGhlIHR5cGUgbWFjaGluZXJ5IGV4cGVjdHMgYWxsIHBvaW50ZXJzIHRvIHBvaW50IHRvIHRoZSBzdGFydCBvZiBhbgogICAgIG9iamVjdC4gIFNvbWV0aW1lcyBmb3IgYWJzdHJhY3Rpb24gcHVycG9zZXMgaXQncyBjb252ZW5pZW50IHRvIGhhdmUKICAgICBhIHBvaW50ZXIgd2hpY2ggcG9pbnRzIGluc2lkZSBhbiBvYmplY3QuICBTbyBsb25nIGFzIGl0J3MgcG9zc2libGUKICAgICB0byBjb252ZXJ0IHRoZSBvcmlnaW5hbCBvYmplY3QgdG8gYW5kIGZyb20gdGhlIHBvaW50ZXIsIHN1Y2gKICAgICBwb2ludGVycyBjYW4gc3RpbGwgYmUgdXNlZC4gIFRZUEUgaXMgdGhlIHR5cGUgb2YgdGhlIG9yaWdpbmFsCiAgICAgb2JqZWN0LCB0aGUgVE8gRVhQUkVTU0lPTiByZXR1cm5zIHRoZSBwb2ludGVyIGdpdmVuIHRoZSBvcmlnaW5hbAogICAgIG9iamVjdCwgYW5kIHRoZSBGUk9NIEVYUFJFU1NJT04gcmV0dXJucyB0aGUgb3JpZ2luYWwgb2JqZWN0IGdpdmVuCiAgICAgdGhlIHBvaW50ZXIuICBUaGUgcG9pbnRlciB3aWxsIGJlIGF2YWlsYWJsZSB1c2luZyB0aGUgJyVoJyBlc2NhcGUuCgonY2hhaW5fbmV4dCAoIkVYUFJFU1NJT04iKScKJ2NoYWluX3ByZXYgKCJFWFBSRVNTSU9OIiknCidjaGFpbl9jaXJjdWxhciAoIkVYUFJFU1NJT04iKScKCiAgICAgSXQncyBoZWxwZnVsIGZvciB0aGUgdHlwZSBtYWNoaW5lcnkgdG8ga25vdyBpZiBvYmplY3RzIGFyZSBvZnRlbgogICAgIGNoYWluZWQgdG9nZXRoZXIgaW4gbG9uZyBsaXN0czsgdGhpcyBsZXRzIGl0IGdlbmVyYXRlIGNvZGUgdGhhdAogICAgIHVzZXMgbGVzcyBzdGFjayBzcGFjZSBieSBpdGVyYXRpbmcgYWxvbmcgdGhlIGxpc3QgaW5zdGVhZCBvZgogICAgIHJlY3Vyc2luZyBkb3duIGl0LiAgJ2NoYWluX25leHQnIGlzIGFuIGV4cHJlc3Npb24gZm9yIHRoZSBuZXh0IGl0ZW0KICAgICBpbiB0aGUgbGlzdCwgJ2NoYWluX3ByZXYnIGlzIGFuIGV4cHJlc3Npb24gZm9yIHRoZSBwcmV2aW91cyBpdGVtLgogICAgIEZvciBzaW5nbHkgbGlua2VkIGxpc3RzLCB1c2Ugb25seSAnY2hhaW5fbmV4dCc7IGZvciBkb3VibHkgbGlua2VkCiAgICAgbGlzdHMsIHVzZSBib3RoLiAgVGhlIG1hY2hpbmVyeSByZXF1aXJlcyB0aGF0IHRha2luZyB0aGUgbmV4dCBpdGVtCiAgICAgb2YgdGhlIHByZXZpb3VzIGl0ZW0gZ2l2ZXMgdGhlIG9yaWdpbmFsIGl0ZW0uICAnY2hhaW5fY2lyY3VsYXInIGlzCiAgICAgc2ltaWxhciB0byAnY2hhaW5fbmV4dCcsIGJ1dCBjYW4gYmUgdXNlZCBmb3IgY2lyY3VsYXIgc2luZ2xlIGxpbmtlZAogICAgIGxpc3RzLgoKJ3Jlb3JkZXIgKCJGVU5DVElPTiBOQU1FIiknCgogICAgIFNvbWUgZGF0YSBzdHJ1Y3R1cmVzIGRlcGVuZCBvbiB0aGUgcmVsYXRpdmUgb3JkZXJpbmcgb2YgcG9pbnRlcnMuCiAgICAgSWYgdGhlIHByZWNvbXBpbGVkIGhlYWRlciBtYWNoaW5lcnkgbmVlZHMgdG8gY2hhbmdlIHRoYXQgb3JkZXJpbmcsCiAgICAgaXQgd2lsbCBjYWxsIHRoZSBmdW5jdGlvbiByZWZlcmVuY2VkIGJ5IHRoZSAncmVvcmRlcicgb3B0aW9uLAogICAgIGJlZm9yZSBjaGFuZ2luZyB0aGUgcG9pbnRlcnMgaW4gdGhlIG9iamVjdCB0aGF0J3MgcG9pbnRlZCB0byBieSB0aGUKICAgICBmaWVsZCB0aGUgb3B0aW9uIGFwcGxpZXMgdG8uICBUaGUgZnVuY3Rpb24gbXVzdCB0YWtlIGZvdXIKICAgICBhcmd1bWVudHMsIHdpdGggdGhlIHNpZ25hdHVyZQogICAgICd2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqJy4gIFRoZSBmaXJzdCBwYXJhbWV0ZXIKICAgICBpcyBhIHBvaW50ZXIgdG8gdGhlIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zIHRoZSBvYmplY3QgYmVpbmcKICAgICB1cGRhdGVkLCBvciB0aGUgb2JqZWN0IGl0c2VsZiBpZiB0aGVyZSBpcyBubyBjb250YWluaW5nIHN0cnVjdHVyZS4KICAgICBUaGUgc2Vjb25kIHBhcmFtZXRlciBpcyBhIGNvb2tpZSB0aGF0IHNob3VsZCBiZSBpZ25vcmVkLiAgVGhlIHRoaXJkCiAgICAgcGFyYW1ldGVyIGlzIGEgcm91dGluZSB0aGF0LCBnaXZlbiBhIHBvaW50ZXIsIHdpbGwgdXBkYXRlIGl0IHRvIGl0cwogICAgIGNvcnJlY3QgbmV3IHZhbHVlLiAgVGhlIGZvdXJ0aCBwYXJhbWV0ZXIgaXMgYSBjb29raWUgdGhhdCBtdXN0IGJlCiAgICAgcGFzc2VkIHRvIHRoZSBzZWNvbmQgcGFyYW1ldGVyLgoKICAgICBQQ0ggY2Fubm90IGhhbmRsZSBkYXRhIHN0cnVjdHVyZXMgdGhhdCBkZXBlbmQgb24gdGhlIGFic29sdXRlCiAgICAgdmFsdWVzIG9mIHBvaW50ZXJzLiAgJ3Jlb3JkZXInIGZ1bmN0aW9ucyBjYW4gYmUgZXhwZW5zaXZlLiAgV2hlbgogICAgIHBvc3NpYmxlLCBpdCBpcyBiZXR0ZXIgdG8gZGVwZW5kIG9uIHByb3BlcnRpZXMgb2YgdGhlIGRhdGEsIGxpa2UgYW4KICAgICBJRCBudW1iZXIgb3IgdGhlIGhhc2ggb2YgYSBzdHJpbmcgaW5zdGVhZC4KCidzcGVjaWFsICgiTkFNRSIpJwoKICAgICBUaGUgJ3NwZWNpYWwnIG9wdGlvbiBpcyB1c2VkIHRvIG1hcmsgdHlwZXMgdGhhdCBoYXZlIHRvIGJlIGRlYWx0CiAgICAgd2l0aCBieSBzcGVjaWFsIGNhc2UgbWFjaGluZXJ5LiAgVGhlIHBhcmFtZXRlciBpcyB0aGUgbmFtZSBvZiB0aGUKICAgICBzcGVjaWFsIGNhc2UuICBTZWUgJ2dlbmd0eXBlLmMnIGZvciBmdXJ0aGVyIGRldGFpbHMuICBBdm9pZCBhZGRpbmcKICAgICBuZXcgc3BlY2lhbCBjYXNlcyB1bmxlc3MgdGhlcmUgaXMgbm8gb3RoZXIgYWx0ZXJuYXRpdmUuCgofCkZpbGU6IGdjY2ludC5pbmZvLCAgTm9kZTogR0dDIFJvb3RzLCAgTmV4dDogRmlsZXMsICBQcmV2OiBHVFkgT3B0aW9ucywgIFVwOiBUeXBlIEluZm9ybWF0aW9uCgoyMC4yIE1hcmtpbmcgUm9vdHMgZm9yIHRoZSBHYXJiYWdlIENvbGxlY3Rvcgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKSW4gYWRkaXRpb24gdG8ga2VlcGluZyB0cmFjayBvZiB0eXBlcywgdGhlIHR5cGUgbWFjaGluZXJ5IGFsc28gbG9jYXRlcwp0aGUgZ2xvYmFsIHZhcmlhYmxlcyAoInJvb3RzIikgdGhhdCB0aGUgZ2FyYmFnZSBjb2xsZWN0b3Igc3RhcnRzIGF0LgpSb290cyBtdXN0IGJlIGRlY2xhcmVkIHVzaW5nIG9uZSBvZiB0aGUgZm9sbG93aW5nIHN5bnRheGVzOgoKICAgKiAnZXh0ZXJuIEdUWSgoW09QVElPTlNdKSkgVFlQRSBOQU1FOycKICAgKiAnc3RhdGljIEdUWSgoW09QVElPTlNdKSkgVFlQRSBOQU1FOycKVGhlIHN5bnRheAogICAqICdHVFkoKFtPUFRJT05TXSkpIFRZUEUgTkFNRTsnCmlzIF9ub3RfIGFjY2VwdGVkLiAgVGhlcmUgc2hvdWxkIGJlIGFuICdleHRlcm4nIGRlY2xhcmF0aW9uIG9mIHN1Y2ggYQp2YXJpYWJsZSBpbiBhIGhlYWRlciBzb21ld2hlcmUtLW1hcmsgdGhhdCwgbm90IHRoZSBkZWZpbml0aW9uLiAgT3IsIGlmCnRoZSB2YXJpYWJsZSBpcyBvbmx5IHVzZWQgaW4gb25lIGZpbGUsIG1ha2UgaXQgJ3N0YXRpYycuCgofCkZpbGU6IGdjY2ludC5pbmZvLCAgTm9kZTogRmlsZXMsICBQcmV2OiBHR0MgUm9vdHMsICBVcDogVHlwZSBJbmZvcm1hdGlvbgoKMjAuMyBTb3VyY2UgRmlsZXMgQ29udGFpbmluZyBUeXBlIEluZm9ybWF0aW9uCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKV2hlbmV2ZXIgeW91IGFkZCAnR1RZJyBtYXJrZXJzIHRvIGEgc291cmNlIGZpbGUgdGhhdCBwcmV2aW91c2x5IGhhZApub25lLCBvciBjcmVhdGUgYSBuZXcgc291cmNlIGZpbGUgY29udGFpbmluZyAnR1RZJyBtYXJrZXJzLCB0aGVyZSBhcmUKdGhyZWUgdGhpbmdzIHlvdSBuZWVkIHRvIGRvOgoKICAxLiBZb3UgbmVlZCB0byBhZGQgdGhlIGZpbGUgdG8gdGhlIGxpc3Qgb2Ygc291cmNlIGZpbGVzIHRoZSB0eXBlCiAgICAgbWFjaGluZXJ5IHNjYW5zLiAgVGhlcmUgYXJlIGZvdXIgY2FzZXM6CgogICAgICAgYS4gRm9yIGEgYmFjay1lbmQgZmlsZSwgdGhpcyBpcyB1c3VhbGx5IGRvbmUgYXV0b21hdGljYWxseTsgaWYKICAgICAgICAgIG5vdCwgeW91IHNob3VsZCBhZGQgaXQgdG8gJ3RhcmdldF9ndGZpbGVzJyBpbiB0aGUgYXBwcm9wcmlhdGUKICAgICAgICAgIHBvcnQncyBlbnRyaWVzIGluICdjb25maWcuZ2NjJy4KCiAgICAgICBiLiBGb3IgZmlsZXMgc2hhcmVkIGJ5IGFsbCBmcm9udCBlbmRzLCBhZGQgdGhlIGZpbGVuYW1lIHRvIHRoZQogICAgICAgICAgJ0dURklMRVMnIHZhcmlhYmxlIGluICdNYWtlZmlsZS5pbicuCgogICAgICAgYy4gRm9yIGZpbGVzIHRoYXQgYXJlIHBhcnQgb2Ygb25lIGZyb250IGVuZCwgYWRkIHRoZSBmaWxlbmFtZSB0bwogICAgICAgICAgdGhlICdndGZpbGVzJyB2YXJpYWJsZSBkZWZpbmVkIGluIHRoZSBhcHByb3ByaWF0ZQogICAgICAgICAgJ2NvbmZpZy1sYW5nLmluJy4gIEZvciBDLCB0aGUgZmlsZSBpcyAnYy1jb25maWctbGFuZy5pbicuCgogICAgICAgZC4gRm9yIGZpbGVzIHRoYXQgYXJlIHBhcnQgb2Ygc29tZSBidXQgbm90IGFsbCBmcm9udCBlbmRzLCBhZGQKICAgICAgICAgIHRoZSBmaWxlbmFtZSB0byB0aGUgJ2d0ZmlsZXMnIHZhcmlhYmxlIG9mIF9hbGxfIHRoZSBmcm9udCBlbmRzCiAgICAgICAgICB0aGF0IHVzZSBpdC4KCiAgMi4gSWYgdGhlIGZpbGUgd2FzIGEgaGVhZGVyIGZpbGUsIHlvdSdsbCBuZWVkIHRvIGNoZWNrIHRoYXQgaXQncwogICAgIGluY2x1ZGVkIGluIHRoZSByaWdodCBwbGFjZSB0byBiZSB2aXNpYmxlIHRvIHRoZSBnZW5lcmF0ZWQgZmlsZXMuCiAgICAgRm9yIGEgYmFjay1lbmQgaGVhZGVyIGZpbGUsIHRoaXMgc2hvdWxkIGJlIGRvbmUgYXV0b21hdGljYWxseS4gIEZvcgogICAgIGEgZnJvbnQtZW5kIGhlYWRlciBmaWxlLCBpdCBuZWVkcyB0byBiZSBpbmNsdWRlZCBieSB0aGUgc2FtZSBmaWxlCiAgICAgdGhhdCBpbmNsdWRlcyAnZ3R5cGUtTEFORy5oJy4gIEZvciBvdGhlciBoZWFkZXIgZmlsZXMsIGl0IG5lZWRzIHRvCiAgICAgYmUgaW5jbHVkZWQgaW4gJ2d0eXBlLWRlc2MuYycsIHdoaWNoIGlzIGEgZ2VuZXJhdGVkIGZpbGUsIHNvIGFkZCBpdAogICAgIHRvICdpZmlsZXMnIGluICdvcGVuX2Jhc2VfZmlsZScgaW4gJ2dlbmd0eXBlLmMnLgoKICAgICBGb3Igc291cmNlIGZpbGVzIHRoYXQgYXJlbid0IGhlYWRlciBmaWxlcywgdGhlIG1hY2hpbmVyeSB3aWxsCiAgICAgZ2VuZXJhdGUgYSBoZWFkZXIgZmlsZSB0aGF0IHNob3VsZCBiZSBpbmNsdWRlZCBpbiB0aGUgc291cmNlIGZpbGUKICAgICB5b3UganVzdCBjaGFuZ2VkLiAgVGhlIGZpbGUgd2lsbCBiZSBjYWxsZWQgJ2d0LVBBVEguaCcgd2hlcmUgUEFUSAogICAgIGlzIHRoZSBwYXRobmFtZSByZWxhdGl2ZSB0byB0aGUgJ2djYycgZGlyZWN0b3J5IHdpdGggc2xhc2hlcwogICAgIHJlcGxhY2VkIGJ5IC0sIHNvIGZvciBleGFtcGxlIHRoZSBoZWFkZXIgZmlsZSB0byBiZSBpbmNsdWRlZCBpbgogICAgICdjcC9wYXJzZXIuYycgaXMgY2FsbGVkICdndC1jcC1wYXJzZXIuYycuICBUaGUgZ2VuZXJhdGVkIGhlYWRlcgogICAgIGZpbGUgc2hvdWxkIGJlIGluY2x1ZGVkIGFmdGVyIGV2ZXJ5dGhpbmcgZWxzZSBpbiB0aGUgc291cmNlIGZpbGUuCiAgICAgRG9uJ3QgZm9yZ2V0IHRvIG1lbnRpb24gdGhpcyBmaWxlIGFzIGEgZGVwZW5kZW5jeSBpbiB0aGUKICAgICAnTWFrZWZpbGUnIQoKIEZvciBsYW5ndWFnZSBmcm9udGVuZHMsIHRoZXJlIGlzIGFub3RoZXIgZmlsZSB0aGF0IG5lZWRzIHRvIGJlIGluY2x1ZGVkCnNvbWV3aGVyZS4gIEl0IHdpbGwgYmUgY2FsbGVkICdndHlwZS1MQU5HLmgnLCB3aGVyZSBMQU5HIGlzIHRoZSBuYW1lIG9mCnRoZSBzdWJkaXJlY3RvcnkgdGhlIGxhbmd1YWdlIGlzIGNvbnRhaW5lZCBpbi4KCh8KRmlsZTogZ2NjaW50LmluZm8sICBOb2RlOiBGdW5kaW5nLCAgTmV4dDogR05VIFByb2plY3QsICBQcmV2OiBUeXBlIEluZm9ybWF0aW9uLCAgVXA6IFRvcAoKRnVuZGluZyBGcmVlIFNvZnR3YXJlCioqKioqKioqKioqKioqKioqKioqKgoKSWYgeW91IHdhbnQgdG8gaGF2ZSBtb3JlIGZyZWUgc29mdHdhcmUgYSBmZXcgeWVhcnMgZnJvbSBub3csIGl0IG1ha2VzCnNlbnNlIGZvciB5b3UgdG8gaGVscCBlbmNvdXJhZ2UgcGVvcGxlIHRvIGNvbnRyaWJ1dGUgZnVuZHMgZm9yIGl0cwpkZXZlbG9wbWVudC4gIFRoZSBtb3N0IGVmZmVjdGl2ZSBhcHByb2FjaCBrbm93biBpcyB0byBlbmNvdXJhZ2UKY29tbWVyY2lhbCByZWRpc3RyaWJ1dG9ycyB0byBkb25hdGUuCgogVXNlcnMgb2YgZnJlZSBzb2Z0d2FyZSBzeXN0ZW1zIGNhbiBib29zdCB0aGUgcGFjZSBvZiBkZXZlbG9wbWVudCBieQplbmNvdXJhZ2luZyBmb3ItYS1mZWUgZGlzdHJpYnV0b3JzIHRvIGRvbmF0ZSBwYXJ0IG9mIHRoZWlyIHNlbGxpbmcgcHJpY2UKdG8gZnJlZSBzb2Z0d2FyZSBkZXZlbG9wZXJzLS10aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQgb3RoZXJzLgoKIFRoZSB3YXkgdG8gY29udmluY2UgZGlzdHJpYnV0b3JzIHRvIGRvIHRoaXMgaXMgdG8gZGVtYW5kIGl0IGFuZCBleHBlY3QKaXQgZnJvbSB0aGVtLiAgU28gd2hlbiB5b3UgY29tcGFyZSBkaXN0cmlidXRvcnMsIGp1ZGdlIHRoZW0gcGFydGx5IGJ5CmhvdyBtdWNoIHRoZXkgZ2l2ZSB0byBmcmVlIHNvZnR3YXJlIGRldmVsb3BtZW50LiAgU2hvdyBkaXN0cmlidXRvcnMgdGhleQptdXN0IGNvbXBldGUgdG8gYmUgdGhlIG9uZSB3aG8gZ2l2ZXMgdGhlIG1vc3QuCgogVG8gbWFrZSB0aGlzIGFwcHJvYWNoIHdvcmssIHlvdSBtdXN0IGluc2lzdCBvbiBudW1iZXJzIHRoYXQgeW91IGNhbgpjb21wYXJlLCBzdWNoIGFzLCAiV2Ugd2lsbCBkb25hdGUgdGVuIGRvbGxhcnMgdG8gdGhlIEZyb2JuaXR6IHByb2plY3QKZm9yIGVhY2ggZGlzayBzb2xkLiIgIERvbid0IGJlIHNhdGlzZmllZCB3aXRoIGEgdmFndWUgcHJvbWlzZSwgc3VjaCBhcwoiQSBwb3J0aW9uIG9mIHRoZSBwcm9maXRzIGFyZSBkb25hdGVkLCIgc2luY2UgaXQgZG9lc24ndCBnaXZlIGEgYmFzaXMKZm9yIGNvbXBhcmlzb24uCgogRXZlbiBhIHByZWNpc2UgZnJhY3Rpb24gIm9mIHRoZSBwcm9maXRzIGZyb20gdGhpcyBkaXNrIiBpcyBub3QgdmVyeQptZWFuaW5nZnVsLCBzaW5jZSBjcmVhdGl2ZSBhY2NvdW50aW5nIGFuZCB1bnJlbGF0ZWQgYnVzaW5lc3MgZGVjaXNpb25zCmNhbiBncmVhdGx5IGFsdGVyIHdoYXQgZnJhY3Rpb24gb2YgdGhlIHNhbGVzIHByaWNlIGNvdW50cyBhcyBwcm9maXQuICBJZgp0aGUgcHJpY2UgeW91IHBheSBpcyAkNTAsIHRlbiBwZXJjZW50IG9mIHRoZSBwcm9maXQgaXMgcHJvYmFibHkgbGVzcwp0aGFuIGEgZG9sbGFyOyBpdCBtaWdodCBiZSBhIGZldyBjZW50cywgb3Igbm90aGluZyBhdCBhbGwuCgogU29tZSByZWRpc3RyaWJ1dG9ycyBkbyBkZXZlbG9wbWVudCB3b3JrIHRoZW1zZWx2ZXMuICBUaGlzIGlzIHVzZWZ1bAp0b287IGJ1dCB0byBrZWVwIGV2ZXJ5b25lIGhvbmVzdCwgeW91IG5lZWQgdG8gaW5xdWlyZSBob3cgbXVjaCB0aGV5IGRvLAphbmQgd2hhdCBraW5kLiAgU29tZSBraW5kcyBvZiBkZXZlbG9wbWVudCBtYWtlIG11Y2ggbW9yZSBsb25nLXRlcm0KZGlmZmVyZW5jZSB0aGFuIG90aGVycy4gIEZvciBleGFtcGxlLCBtYWludGFpbmluZyBhIHNlcGFyYXRlIHZlcnNpb24gb2YKYSBwcm9ncmFtIGNvbnRyaWJ1dGVzIHZlcnkgbGl0dGxlOyBtYWludGFpbmluZyB0aGUgc3RhbmRhcmQgdmVyc2lvbiBvZiBhCnByb2dyYW0gZm9yIHRoZSB3aG9sZSBjb21tdW5pdHkgY29udHJpYnV0ZXMgbXVjaC4gIEVhc3kgbmV3IHBvcnRzCmNvbnRyaWJ1dGUgbGl0dGxlLCBzaW5jZSBzb21lb25lIGVsc2Ugd291bGQgc3VyZWx5IGRvIHRoZW07IGRpZmZpY3VsdApwb3J0cyBzdWNoIGFzIGFkZGluZyBhIG5ldyBDUFUgdG8gdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIGNvbnRyaWJ1dGUKbW9yZTsgbWFqb3IgbmV3IGZlYXR1cmVzIG9yIHBhY2thZ2VzIGNvbnRyaWJ1dGUgdGhlIG1vc3QuCgogQnkgZXN0YWJsaXNoaW5nIHRoZSBpZGVhIHRoYXQgc3VwcG9ydGluZyBmdXJ0aGVyIGRldmVsb3BtZW50IGlzICJ0aGUKcHJvcGVyIHRoaW5nIHRvIGRvIiB3aGVuIGRpc3RyaWJ1dGluZyBmcmVlIHNvZnR3YXJlIGZvciBhIGZlZSwgd2UgY2FuCmFzc3VyZSBhIHN0ZWFkeSBmbG93IG9mIHJlc291cmNlcyBpbnRvIG1ha2luZyBtb3JlIGZyZWUgc29mdHdhcmUuCgogICAgIENvcHlyaWdodCAoQykgMTk5NCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KICAgICBWZXJiYXRpbSBjb3B5aW5nIGFuZCByZWRpc3RyaWJ1dGlvbiBvZiB0aGlzIHNlY3Rpb24gaXMgcGVybWl0dGVkCiAgICAgd2l0aG91dCByb3lhbHR5OyBhbHRlcmF0aW9uIGlzIG5vdCBwZXJtaXR0ZWQuCgofCkZpbGU6IGdjY2ludC5pbmZvLCAgTm9kZTogR05VIFByb2plY3QsICBOZXh0OiBDb3B5aW5nLCAgUHJldjogRnVuZGluZywgIFVwOiBUb3AKClRoZSBHTlUgUHJvamVjdCBhbmQgR05VL0xpbnV4CioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgpUaGUgR05VIFByb2plY3Qgd2FzIGxhdW5jaGVkIGluIDE5ODQgdG8gZGV2ZWxvcCBhIGNvbXBsZXRlIFVuaXgtbGlrZQpvcGVyYXRpbmcgc3lzdGVtIHdoaWNoIGlzIGZyZWUgc29mdHdhcmU6IHRoZSBHTlUgc3lzdGVtLiAgKEdOVSBpcyBhCnJlY3Vyc2l2ZSBhY3JvbnltIGZvciAiR05VJ3MgTm90IFVuaXgiOyBpdCBpcyBwcm9ub3VuY2VkICJndWgtTkVXIi4pClZhcmlhbnRzIG9mIHRoZSBHTlUgb3BlcmF0aW5nIHN5c3RlbSwgd2hpY2ggdXNlIHRoZSBrZXJuZWwgTGludXgsIGFyZQpub3cgd2lkZWx5IHVzZWQ7IHRob3VnaCB0aGVzZSBzeXN0ZW1zIGFyZSBvZnRlbiByZWZlcnJlZCB0byBhcyAiTGludXgiLAp0aGV5IGFyZSBtb3JlIGFjY3VyYXRlbHkgY2FsbGVkIEdOVS9MaW51eCBzeXN0ZW1zLgoKIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWU6CiAgICAgPGh0dHA6Ly93d3cuZ251Lm9yZy8+CiAgICAgPGh0dHA6Ly93d3cuZ251Lm9yZy9nbnUvbGludXgtYW5kLWdudS5odG1sPgoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IENvcHlpbmcsICBOZXh0OiBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsICBQcmV2OiBHTlUgUHJvamVjdCwgIFVwOiBUb3AKCkdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCioqKioqKioqKioqKioqKioqKioqKioqKioqCgogICAgICAgICAgICAgICAgICAgICAgICBWZXJzaW9uIDMsIDI5IEp1bmUgMjAwNwoKICAgICBDb3B5cmlnaHQgKEMpIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuIDxodHRwOi8vZnNmLm9yZy8+CgogICAgIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGlzCiAgICAgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgoKUHJlYW1ibGUKPT09PT09PT0KClRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBhIGZyZWUsIGNvcHlsZWZ0IGxpY2Vuc2UgZm9yIHNvZnR3YXJlCmFuZCBvdGhlciBraW5kcyBvZiB3b3Jrcy4KCiBUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYW5kIG90aGVyIHByYWN0aWNhbCB3b3JrcyBhcmUgZGVzaWduZWQKdG8gdGFrZSBhd2F5IHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIHRoZSB3b3Jrcy4gIEJ5IGNvbnRyYXN0LAp0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0bwpzaGFyZSBhbmQgY2hhbmdlIGFsbCB2ZXJzaW9ucyBvZiBhIHByb2dyYW0tdG8gbWFrZSBzdXJlIGl0IHJlbWFpbnMgZnJlZQpzb2Z0d2FyZSBmb3IgYWxsIGl0cyB1c2Vycy4gIFdlLCB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB1c2UgdGhlCkdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3N0IG9mIG91ciBzb2Z0d2FyZTsgaXQgYXBwbGllcyBhbHNvIHRvCmFueSBvdGhlciB3b3JrIHJlbGVhc2VkIHRoaXMgd2F5IGJ5IGl0cyBhdXRob3JzLiAgWW91IGNhbiBhcHBseSBpdCB0bwp5b3VyIHByb2dyYW1zLCB0b28uCgogV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20sIG5vdCBwcmljZS4KT3VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBkZXNpZ25lZCB0byBtYWtlIHN1cmUgdGhhdCB5b3UgaGF2ZSB0aGUKZnJlZWRvbSB0byBkaXN0cmlidXRlIGNvcGllcyBvZiBmcmVlIHNvZnR3YXJlIChhbmQgY2hhcmdlIGZvciB0aGVtIGlmCnlvdSB3aXNoKSwgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0IGl0IGlmIHlvdSB3YW50IGl0LAp0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBvciB1c2UgcGllY2VzIG9mIGl0IGluIG5ldyBmcmVlCnByb2dyYW1zLCBhbmQgdGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4KCiBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIHByZXZlbnQgb3RoZXJzIGZyb20gZGVueWluZyB5b3UKdGhlc2UgcmlnaHRzIG9yIGFza2luZyB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuICBUaGVyZWZvcmUsIHlvdSBoYXZlCmNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlLCBvciBpZgp5b3UgbW9kaWZ5IGl0OiByZXNwb25zaWJpbGl0aWVzIHRvIHJlc3BlY3QgdGhlIGZyZWVkb20gb2Ygb3RoZXJzLgoKIEZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2Ygc3VjaCBhIHByb2dyYW0sIHdoZXRoZXIgZ3JhdGlzCm9yIGZvciBhIGZlZSwgeW91IG11c3QgcGFzcyBvbiB0byB0aGUgcmVjaXBpZW50cyB0aGUgc2FtZSBmcmVlZG9tcyB0aGF0CnlvdSByZWNlaXZlZC4gIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZQpzb3VyY2UgY29kZS4gIEFuZCB5b3UgbXVzdCBzaG93IHRoZW0gdGhlc2UgdGVybXMgc28gdGhleSBrbm93IHRoZWlyCnJpZ2h0cy4KCiBEZXZlbG9wZXJzIHRoYXQgdXNlIHRoZSBHTlUgR1BMIHByb3RlY3QgeW91ciByaWdodHMgd2l0aCB0d28gc3RlcHM6ICgxKQphc3NlcnQgY29weXJpZ2h0IG9uIHRoZSBzb2Z0d2FyZSwgYW5kICgyKSBvZmZlciB5b3UgdGhpcyBMaWNlbnNlIGdpdmluZwp5b3UgbGVnYWwgcGVybWlzc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgaXQuCgogRm9yIHRoZSBkZXZlbG9wZXJzJyBhbmQgYXV0aG9ycycgcHJvdGVjdGlvbiwgdGhlIEdQTCBjbGVhcmx5IGV4cGxhaW5zCnRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZSBzb2Z0d2FyZS4gIEZvciBib3RoIHVzZXJzJyBhbmQKYXV0aG9ycycgc2FrZSwgdGhlIEdQTCByZXF1aXJlcyB0aGF0IG1vZGlmaWVkIHZlcnNpb25zIGJlIG1hcmtlZCBhcwpjaGFuZ2VkLCBzbyB0aGF0IHRoZWlyIHByb2JsZW1zIHdpbGwgbm90IGJlIGF0dHJpYnV0ZWQgZXJyb25lb3VzbHkgdG8KYXV0aG9ycyBvZiBwcmV2aW91cyB2ZXJzaW9ucy4KCiBTb21lIGRldmljZXMgYXJlIGRlc2lnbmVkIHRvIGRlbnkgdXNlcnMgYWNjZXNzIHRvIGluc3RhbGwgb3IgcnVuCm1vZGlmaWVkIHZlcnNpb25zIG9mIHRoZSBzb2Z0d2FyZSBpbnNpZGUgdGhlbSwgYWx0aG91Z2ggdGhlIG1hbnVmYWN0dXJlcgpjYW4gZG8gc28uICBUaGlzIGlzIGZ1bmRhbWVudGFsbHkgaW5jb21wYXRpYmxlIHdpdGggdGhlIGFpbSBvZgpwcm90ZWN0aW5nIHVzZXJzJyBmcmVlZG9tIHRvIGNoYW5nZSB0aGUgc29mdHdhcmUuICBUaGUgc3lzdGVtYXRpYwpwYXR0ZXJuIG9mIHN1Y2ggYWJ1c2Ugb2NjdXJzIGluIHRoZSBhcmVhIG9mIHByb2R1Y3RzIGZvciBpbmRpdmlkdWFscyB0bwp1c2UsIHdoaWNoIGlzIHByZWNpc2VseSB3aGVyZSBpdCBpcyBtb3N0IHVuYWNjZXB0YWJsZS4gIFRoZXJlZm9yZSwgd2UKaGF2ZSBkZXNpZ25lZCB0aGlzIHZlcnNpb24gb2YgdGhlIEdQTCB0byBwcm9oaWJpdCB0aGUgcHJhY3RpY2UgZm9yIHRob3NlCnByb2R1Y3RzLiAgSWYgc3VjaCBwcm9ibGVtcyBhcmlzZSBzdWJzdGFudGlhbGx5IGluIG90aGVyIGRvbWFpbnMsIHdlCnN0YW5kIHJlYWR5IHRvIGV4dGVuZCB0aGlzIHByb3Zpc2lvbiB0byB0aG9zZSBkb21haW5zIGluIGZ1dHVyZSB2ZXJzaW9ucwpvZiB0aGUgR1BMLCBhcyBuZWVkZWQgdG8gcHJvdGVjdCB0aGUgZnJlZWRvbSBvZiB1c2Vycy4KCiBGaW5hbGx5LCBldmVyeSBwcm9ncmFtIGlzIHRocmVhdGVuZWQgY29uc3RhbnRseSBieSBzb2Z0d2FyZSBwYXRlbnRzLgpTdGF0ZXMgc2hvdWxkIG5vdCBhbGxvdyBwYXRlbnRzIHRvIHJlc3RyaWN0IGRldmVsb3BtZW50IGFuZCB1c2Ugb2YKc29mdHdhcmUgb24gZ2VuZXJhbC1wdXJwb3NlIGNvbXB1dGVycywgYnV0IGluIHRob3NlIHRoYXQgZG8sIHdlIHdpc2ggdG8KYXZvaWQgdGhlIHNwZWNpYWwgZGFuZ2VyIHRoYXQgcGF0ZW50cyBhcHBsaWVkIHRvIGEgZnJlZSBwcm9ncmFtIGNvdWxkCm1ha2UgaXQgZWZmZWN0aXZlbHkgcHJvcHJpZXRhcnkuICBUbyBwcmV2ZW50IHRoaXMsIHRoZSBHUEwgYXNzdXJlcyB0aGF0CnBhdGVudHMgY2Fubm90IGJlIHVzZWQgdG8gcmVuZGVyIHRoZSBwcm9ncmFtIG5vbi1mcmVlLgoKIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCm1vZGlmaWNhdGlvbiBmb2xsb3cuCgpURVJNUyBBTkQgQ09ORElUSU9OUwo9PT09PT09PT09PT09PT09PT09PQoKICAwLiBEZWZpbml0aW9ucy4KCiAgICAgIlRoaXMgTGljZW5zZSIgcmVmZXJzIHRvIHZlcnNpb24gMyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCiAgICAgTGljZW5zZS4KCiAgICAgIkNvcHlyaWdodCIgYWxzbyBtZWFucyBjb3B5cmlnaHQtbGlrZSBsYXdzIHRoYXQgYXBwbHkgdG8gb3RoZXIKICAgICBraW5kcyBvZiB3b3Jrcywgc3VjaCBhcyBzZW1pY29uZHVjdG9yIG1hc2tzLgoKICAgICAiVGhlIFByb2dyYW0iIHJlZmVycyB0byBhbnkgY29weXJpZ2h0YWJsZSB3b3JrIGxpY2Vuc2VkIHVuZGVyIHRoaXMKICAgICBMaWNlbnNlLiAgRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuICAiTGljZW5zZWVzIiBhbmQKICAgICAicmVjaXBpZW50cyIgbWF5IGJlIGluZGl2aWR1YWxzIG9yIG9yZ2FuaXphdGlvbnMuCgogICAgIFRvICJtb2RpZnkiIGEgd29yayBtZWFucyB0byBjb3B5IGZyb20gb3IgYWRhcHQgYWxsIG9yIHBhcnQgb2YgdGhlCiAgICAgd29yayBpbiBhIGZhc2hpb24gcmVxdWlyaW5nIGNvcHlyaWdodCBwZXJtaXNzaW9uLCBvdGhlciB0aGFuIHRoZQogICAgIG1ha2luZyBvZiBhbiBleGFjdCBjb3B5LiAgVGhlIHJlc3VsdGluZyB3b3JrIGlzIGNhbGxlZCBhICJtb2RpZmllZAogICAgIHZlcnNpb24iIG9mIHRoZSBlYXJsaWVyIHdvcmsgb3IgYSB3b3JrICJiYXNlZCBvbiIgdGhlIGVhcmxpZXIgd29yay4KCiAgICAgQSAiY292ZXJlZCB3b3JrIiBtZWFucyBlaXRoZXIgdGhlIHVubW9kaWZpZWQgUHJvZ3JhbSBvciBhIHdvcmsKICAgICBiYXNlZCBvbiB0aGUgUHJvZ3JhbS4KCiAgICAgVG8gInByb3BhZ2F0ZSIgYSB3b3JrIG1lYW5zIHRvIGRvIGFueXRoaW5nIHdpdGggaXQgdGhhdCwgd2l0aG91dAogICAgIHBlcm1pc3Npb24sIHdvdWxkIG1ha2UgeW91IGRpcmVjdGx5IG9yIHNlY29uZGFyaWx5IGxpYWJsZSBmb3IKICAgICBpbmZyaW5nZW1lbnQgdW5kZXIgYXBwbGljYWJsZSBjb3B5cmlnaHQgbGF3LCBleGNlcHQgZXhlY3V0aW5nIGl0IG9uCiAgICAgYSBjb21wdXRlciBvciBtb2RpZnlpbmcgYSBwcml2YXRlIGNvcHkuICBQcm9wYWdhdGlvbiBpbmNsdWRlcwogICAgIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiAod2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiksIG1ha2luZwogICAgIGF2YWlsYWJsZSB0byB0aGUgcHVibGljLCBhbmQgaW4gc29tZSBjb3VudHJpZXMgb3RoZXIgYWN0aXZpdGllcyBhcwogICAgIHdlbGwuCgogICAgIFRvICJjb252ZXkiIGEgd29yayBtZWFucyBhbnkga2luZCBvZiBwcm9wYWdhdGlvbiB0aGF0IGVuYWJsZXMgb3RoZXIKICAgICBwYXJ0aWVzIHRvIG1ha2Ugb3IgcmVjZWl2ZSBjb3BpZXMuICBNZXJlIGludGVyYWN0aW9uIHdpdGggYSB1c2VyCiAgICAgdGhyb3VnaCBhIGNvbXB1dGVyIG5ldHdvcmssIHdpdGggbm8gdHJhbnNmZXIgb2YgYSBjb3B5LCBpcyBub3QKICAgICBjb252ZXlpbmcuCgogICAgIEFuIGludGVyYWN0aXZlIHVzZXIgaW50ZXJmYWNlIGRpc3BsYXlzICJBcHByb3ByaWF0ZSBMZWdhbCBOb3RpY2VzIgogICAgIHRvIHRoZSBleHRlbnQgdGhhdCBpdCBpbmNsdWRlcyBhIGNvbnZlbmllbnQgYW5kIHByb21pbmVudGx5IHZpc2libGUKICAgICBmZWF0dXJlIHRoYXQgKDEpIGRpc3BsYXlzIGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UsIGFuZCAoMikKICAgICB0ZWxscyB0aGUgdXNlciB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGUgd29yayAoZXhjZXB0IHRvCiAgICAgdGhlIGV4dGVudCB0aGF0IHdhcnJhbnRpZXMgYXJlIHByb3ZpZGVkKSwgdGhhdCBsaWNlbnNlZXMgbWF5IGNvbnZleQogICAgIHRoZSB3b3JrIHVuZGVyIHRoaXMgTGljZW5zZSwgYW5kIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzCiAgICAgTGljZW5zZS4gIElmIHRoZSBpbnRlcmZhY2UgcHJlc2VudHMgYSBsaXN0IG9mIHVzZXIgY29tbWFuZHMgb3IKICAgICBvcHRpb25zLCBzdWNoIGFzIGEgbWVudSwgYSBwcm9taW5lbnQgaXRlbSBpbiB0aGUgbGlzdCBtZWV0cyB0aGlzCiAgICAgY3JpdGVyaW9uLgoKICAxLiBTb3VyY2UgQ29kZS4KCiAgICAgVGhlICJzb3VyY2UgY29kZSIgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsKICAgICBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuICAiT2JqZWN0IGNvZGUiIG1lYW5zIGFueSBub24tc291cmNlCiAgICAgZm9ybSBvZiBhIHdvcmsuCgogICAgIEEgIlN0YW5kYXJkIEludGVyZmFjZSIgbWVhbnMgYW4gaW50ZXJmYWNlIHRoYXQgZWl0aGVyIGlzIGFuCiAgICAgb2ZmaWNpYWwgc3RhbmRhcmQgZGVmaW5lZCBieSBhIHJlY29nbml6ZWQgc3RhbmRhcmRzIGJvZHksIG9yLCBpbgogICAgIHRoZSBjYXNlIG9mIGludGVyZmFjZXMgc3BlY2lmaWVkIGZvciBhIHBhcnRpY3VsYXIgcHJvZ3JhbW1pbmcKICAgICBsYW5ndWFnZSwgb25lIHRoYXQgaXMgd2lkZWx5IHVzZWQgYW1vbmcgZGV2ZWxvcGVycyB3b3JraW5nIGluIHRoYXQKICAgICBsYW5ndWFnZS4KCiAgICAgVGhlICJTeXN0ZW0gTGlicmFyaWVzIiBvZiBhbiBleGVjdXRhYmxlIHdvcmsgaW5jbHVkZSBhbnl0aGluZywKICAgICBvdGhlciB0aGFuIHRoZSB3b3JrIGFzIGEgd2hvbGUsIHRoYXQgKGEpIGlzIGluY2x1ZGVkIGluIHRoZSBub3JtYWwKICAgICBmb3JtIG9mIHBhY2thZ2luZyBhIE1ham9yIENvbXBvbmVudCwgYnV0IHdoaWNoIGlzIG5vdCBwYXJ0IG9mIHRoYXQKICAgICBNYWpvciBDb21wb25lbnQsIGFuZCAoYikgc2VydmVzIG9ubHkgdG8gZW5hYmxlIHVzZSBvZiB0aGUgd29yayB3aXRoCiAgICAgdGhhdCBNYWpvciBDb21wb25lbnQsIG9yIHRvIGltcGxlbWVudCBhIFN0YW5kYXJkIEludGVyZmFjZSBmb3IKICAgICB3aGljaCBhbiBpbXBsZW1lbnRhdGlvbiBpcyBhdmFpbGFibGUgdG8gdGhlIHB1YmxpYyBpbiBzb3VyY2UgY29kZQogICAgIGZvcm0uICBBICJNYWpvciBDb21wb25lbnQiLCBpbiB0aGlzIGNvbnRleHQsIG1lYW5zIGEgbWFqb3IKICAgICBlc3NlbnRpYWwgY29tcG9uZW50IChrZXJuZWwsIHdpbmRvdyBzeXN0ZW0sIGFuZCBzbyBvbikgb2YgdGhlCiAgICAgc3BlY2lmaWMgb3BlcmF0aW5nIHN5c3RlbSAoaWYgYW55KSBvbiB3aGljaCB0aGUgZXhlY3V0YWJsZSB3b3JrCiAgICAgcnVucywgb3IgYSBjb21waWxlciB1c2VkIHRvIHByb2R1Y2UgdGhlIHdvcmssIG9yIGFuIG9iamVjdCBjb2RlCiAgICAgaW50ZXJwcmV0ZXIgdXNlZCB0byBydW4gaXQuCgogICAgIFRoZSAiQ29ycmVzcG9uZGluZyBTb3VyY2UiIGZvciBhIHdvcmsgaW4gb2JqZWN0IGNvZGUgZm9ybSBtZWFucyBhbGwKICAgICB0aGUgc291cmNlIGNvZGUgbmVlZGVkIHRvIGdlbmVyYXRlLCBpbnN0YWxsLCBhbmQgKGZvciBhbiBleGVjdXRhYmxlCiAgICAgd29yaykgcnVuIHRoZSBvYmplY3QgY29kZSBhbmQgdG8gbW9kaWZ5IHRoZSB3b3JrLCBpbmNsdWRpbmcgc2NyaXB0cwogICAgIHRvIGNvbnRyb2wgdGhvc2UgYWN0aXZpdGllcy4gIEhvd2V2ZXIsIGl0IGRvZXMgbm90IGluY2x1ZGUgdGhlCiAgICAgd29yaydzIFN5c3RlbSBMaWJyYXJpZXMsIG9yIGdlbmVyYWwtcHVycG9zZSB0b29scyBvciBnZW5lcmFsbHkKICAgICBhdmFpbGFibGUgZnJlZSBwcm9ncmFtcyB3aGljaCBhcmUgdXNlZCB1bm1vZGlmaWVkIGluIHBlcmZvcm1pbmcKICAgICB0aG9zZSBhY3Rpdml0aWVzIGJ1dCB3aGljaCBhcmUgbm90IHBhcnQgb2YgdGhlIHdvcmsuICBGb3IgZXhhbXBsZSwKICAgICBDb3JyZXNwb25kaW5nIFNvdXJjZSBpbmNsdWRlcyBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcyBhc3NvY2lhdGVkCiAgICAgd2l0aCBzb3VyY2UgZmlsZXMgZm9yIHRoZSB3b3JrLCBhbmQgdGhlIHNvdXJjZSBjb2RlIGZvciBzaGFyZWQKICAgICBsaWJyYXJpZXMgYW5kIGR5bmFtaWNhbGx5IGxpbmtlZCBzdWJwcm9ncmFtcyB0aGF0IHRoZSB3b3JrIGlzCiAgICAgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIHJlcXVpcmUsIHN1Y2ggYXMgYnkgaW50aW1hdGUgZGF0YQogICAgIGNvbW11bmljYXRpb24gb3IgY29udHJvbCBmbG93IGJldHdlZW4gdGhvc2Ugc3VicHJvZ3JhbXMgYW5kIG90aGVyCiAgICAgcGFydHMgb2YgdGhlIHdvcmsuCgogICAgIFRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBuZWVkIG5vdCBpbmNsdWRlIGFueXRoaW5nIHRoYXQgdXNlcnMgY2FuCiAgICAgcmVnZW5lcmF0ZSBhdXRvbWF0aWNhbGx5IGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIENvcnJlc3BvbmRpbmcKICAgICBTb3VyY2UuCgogICAgIFRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBmb3IgYSB3b3JrIGluIHNvdXJjZSBjb2RlIGZvcm0gaXMgdGhhdAogICAgIHNhbWUgd29yay4KCiAgMi4gQmFzaWMgUGVybWlzc2lvbnMuCgogICAgIEFsbCByaWdodHMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UgYXJlIGdyYW50ZWQgZm9yIHRoZSB0ZXJtIG9mCiAgICAgY29weXJpZ2h0IG9uIHRoZSBQcm9ncmFtLCBhbmQgYXJlIGlycmV2b2NhYmxlIHByb3ZpZGVkIHRoZSBzdGF0ZWQKICAgICBjb25kaXRpb25zIGFyZSBtZXQuICBUaGlzIExpY2Vuc2UgZXhwbGljaXRseSBhZmZpcm1zIHlvdXIgdW5saW1pdGVkCiAgICAgcGVybWlzc2lvbiB0byBydW4gdGhlIHVubW9kaWZpZWQgUHJvZ3JhbS4gIFRoZSBvdXRwdXQgZnJvbSBydW5uaW5nCiAgICAgYSBjb3ZlcmVkIHdvcmsgaXMgY292ZXJlZCBieSB0aGlzIExpY2Vuc2Ugb25seSBpZiB0aGUgb3V0cHV0LCBnaXZlbgogICAgIGl0cyBjb250ZW50LCBjb25zdGl0dXRlcyBhIGNvdmVyZWQgd29yay4gIFRoaXMgTGljZW5zZSBhY2tub3dsZWRnZXMKICAgICB5b3VyIHJpZ2h0cyBvZiBmYWlyIHVzZSBvciBvdGhlciBlcXVpdmFsZW50LCBhcyBwcm92aWRlZCBieQogICAgIGNvcHlyaWdodCBsYXcuCgogICAgIFlvdSBtYXkgbWFrZSwgcnVuIGFuZCBwcm9wYWdhdGUgY292ZXJlZCB3b3JrcyB0aGF0IHlvdSBkbyBub3QKICAgICBjb252ZXksIHdpdGhvdXQgY29uZGl0aW9ucyBzbyBsb25nIGFzIHlvdXIgbGljZW5zZSBvdGhlcndpc2UKICAgICByZW1haW5zIGluIGZvcmNlLiAgWW91IG1heSBjb252ZXkgY292ZXJlZCB3b3JrcyB0byBvdGhlcnMgZm9yIHRoZQogICAgIHNvbGUgcHVycG9zZSBvZiBoYXZpbmcgdGhlbSBtYWtlIG1vZGlmaWNhdGlvbnMgZXhjbHVzaXZlbHkgZm9yIHlvdSwKICAgICBvciBwcm92aWRlIHlvdSB3aXRoIGZhY2lsaXRpZXMgZm9yIHJ1bm5pbmcgdGhvc2Ugd29ya3MsIHByb3ZpZGVkCiAgICAgdGhhdCB5b3UgY29tcGx5IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBpbiBjb252ZXlpbmcgYWxsCiAgICAgbWF0ZXJpYWwgZm9yIHdoaWNoIHlvdSBkbyBub3QgY29udHJvbCBjb3B5cmlnaHQuICBUaG9zZSB0aHVzIG1ha2luZwogICAgIG9yIHJ1bm5pbmcgdGhlIGNvdmVyZWQgd29ya3MgZm9yIHlvdSBtdXN0IGRvIHNvIGV4Y2x1c2l2ZWx5IG9uIHlvdXIKICAgICBiZWhhbGYsIHVuZGVyIHlvdXIgZGlyZWN0aW9uIGFuZCBjb250cm9sLCBvbiB0ZXJtcyB0aGF0IHByb2hpYml0CiAgICAgdGhlbSBmcm9tIG1ha2luZyBhbnkgY29waWVzIG9mIHlvdXIgY29weXJpZ2h0ZWQgbWF0ZXJpYWwgb3V0c2lkZQogICAgIHRoZWlyIHJlbGF0aW9uc2hpcCB3aXRoIHlvdS4KCiAgICAgQ29udmV5aW5nIHVuZGVyIGFueSBvdGhlciBjaXJjdW1zdGFuY2VzIGlzIHBlcm1pdHRlZCBzb2xlbHkgdW5kZXIKICAgICB0aGUgY29uZGl0aW9ucyBzdGF0ZWQgYmVsb3cuICBTdWJsaWNlbnNpbmcgaXMgbm90IGFsbG93ZWQ7IHNlY3Rpb24KICAgICAxMCBtYWtlcyBpdCB1bm5lY2Vzc2FyeS4KCiAgMy4gUHJvdGVjdGluZyBVc2VycycgTGVnYWwgUmlnaHRzIEZyb20gQW50aS1DaXJjdW12ZW50aW9uIExhdy4KCiAgICAgTm8gY292ZXJlZCB3b3JrIHNoYWxsIGJlIGRlZW1lZCBwYXJ0IG9mIGFuIGVmZmVjdGl2ZSB0ZWNobm9sb2dpY2FsCiAgICAgbWVhc3VyZSB1bmRlciBhbnkgYXBwbGljYWJsZSBsYXcgZnVsZmlsbGluZyBvYmxpZ2F0aW9ucyB1bmRlcgogICAgIGFydGljbGUgMTEgb2YgdGhlIFdJUE8gY29weXJpZ2h0IHRyZWF0eSBhZG9wdGVkIG9uIDIwIERlY2VtYmVyCiAgICAgMTk5Niwgb3Igc2ltaWxhciBsYXdzIHByb2hpYml0aW5nIG9yIHJlc3RyaWN0aW5nIGNpcmN1bXZlbnRpb24gb2YKICAgICBzdWNoIG1lYXN1cmVzLgoKICAgICBXaGVuIHlvdSBjb252ZXkgYSBjb3ZlcmVkIHdvcmssIHlvdSB3YWl2ZSBhbnkgbGVnYWwgcG93ZXIgdG8gZm9yYmlkCiAgICAgY2lyY3VtdmVudGlvbiBvZiB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIHRvIHRoZSBleHRlbnQgc3VjaAogICAgIGNpcmN1bXZlbnRpb24gaXMgZWZmZWN0ZWQgYnkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlCiAgICAgd2l0aCByZXNwZWN0IHRvIHRoZSBjb3ZlcmVkIHdvcmssIGFuZCB5b3UgZGlzY2xhaW0gYW55IGludGVudGlvbiB0bwogICAgIGxpbWl0IG9wZXJhdGlvbiBvciBtb2RpZmljYXRpb24gb2YgdGhlIHdvcmsgYXMgYSBtZWFucyBvZgogICAgIGVuZm9yY2luZywgYWdhaW5zdCB0aGUgd29yaydzIHVzZXJzLCB5b3VyIG9yIHRoaXJkIHBhcnRpZXMnIGxlZ2FsCiAgICAgcmlnaHRzIHRvIGZvcmJpZCBjaXJjdW12ZW50aW9uIG9mIHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMuCgogIDQuIENvbnZleWluZyBWZXJiYXRpbSBDb3BpZXMuCgogICAgIFlvdSBtYXkgY29udmV5IHZlcmJhdGltIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSdzIHNvdXJjZSBjb2RlIGFzIHlvdQogICAgIHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91IGNvbnNwaWN1b3VzbHkgYW5kCiAgICAgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlOwogICAgIGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHN0YXRpbmcgdGhhdCB0aGlzIExpY2Vuc2UgYW5kIGFueQogICAgIG5vbi1wZXJtaXNzaXZlIHRlcm1zIGFkZGVkIGluIGFjY29yZCB3aXRoIHNlY3Rpb24gNyBhcHBseSB0byB0aGUKICAgICBjb2RlOyBrZWVwIGludGFjdCBhbGwgbm90aWNlcyBvZiB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7IGFuZAogICAgIGdpdmUgYWxsIHJlY2lwaWVudHMgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgoKICAgICBZb3UgbWF5IGNoYXJnZSBhbnkgcHJpY2Ugb3Igbm8gcHJpY2UgZm9yIGVhY2ggY29weSB0aGF0IHlvdSBjb252ZXksCiAgICAgYW5kIHlvdSBtYXkgb2ZmZXIgc3VwcG9ydCBvciB3YXJyYW50eSBwcm90ZWN0aW9uIGZvciBhIGZlZS4KCiAgNS4gQ29udmV5aW5nIE1vZGlmaWVkIFNvdXJjZSBWZXJzaW9ucy4KCiAgICAgWW91IG1heSBjb252ZXkgYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtLCBvciB0aGUgbW9kaWZpY2F0aW9ucyB0bwogICAgIHByb2R1Y2UgaXQgZnJvbSB0aGUgUHJvZ3JhbSwgaW4gdGhlIGZvcm0gb2Ygc291cmNlIGNvZGUgdW5kZXIgdGhlCiAgICAgdGVybXMgb2Ygc2VjdGlvbiA0LCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlCiAgICAgY29uZGl0aW9uczoKCiAgICAgICBhLiBUaGUgd29yayBtdXN0IGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdCB5b3UKICAgICAgICAgIG1vZGlmaWVkIGl0LCBhbmQgZ2l2aW5nIGEgcmVsZXZhbnQgZGF0ZS4KCiAgICAgICBiLiBUaGUgd29yayBtdXN0IGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdCBpdCBpcwogICAgICAgICAgcmVsZWFzZWQgdW5kZXIgdGhpcyBMaWNlbnNlIGFuZCBhbnkgY29uZGl0aW9ucyBhZGRlZCB1bmRlcgogICAgICAgICAgc2VjdGlvbiA3LiAgVGhpcyByZXF1aXJlbWVudCBtb2RpZmllcyB0aGUgcmVxdWlyZW1lbnQgaW4KICAgICAgICAgIHNlY3Rpb24gNCB0byAia2VlcCBpbnRhY3QgYWxsIG5vdGljZXMiLgoKICAgICAgIGMuIFlvdSBtdXN0IGxpY2Vuc2UgdGhlIGVudGlyZSB3b3JrLCBhcyBhIHdob2xlLCB1bmRlciB0aGlzCiAgICAgICAgICBMaWNlbnNlIHRvIGFueW9uZSB3aG8gY29tZXMgaW50byBwb3NzZXNzaW9uIG9mIGEgY29weS4gIFRoaXMKICAgICAgICAgIExpY2Vuc2Ugd2lsbCB0aGVyZWZvcmUgYXBwbHksIGFsb25nIHdpdGggYW55IGFwcGxpY2FibGUKICAgICAgICAgIHNlY3Rpb24gNyBhZGRpdGlvbmFsIHRlcm1zLCB0byB0aGUgd2hvbGUgb2YgdGhlIHdvcmssIGFuZCBhbGwKICAgICAgICAgIGl0cyBwYXJ0cywgcmVnYXJkbGVzcyBvZiBob3cgdGhleSBhcmUgcGFja2FnZWQuICBUaGlzIExpY2Vuc2UKICAgICAgICAgIGdpdmVzIG5vIHBlcm1pc3Npb24gdG8gbGljZW5zZSB0aGUgd29yayBpbiBhbnkgb3RoZXIgd2F5LCBidXQKICAgICAgICAgIGl0IGRvZXMgbm90IGludmFsaWRhdGUgc3VjaCBwZXJtaXNzaW9uIGlmIHlvdSBoYXZlIHNlcGFyYXRlbHkKICAgICAgICAgIHJlY2VpdmVkIGl0LgoKICAgICAgIGQuIElmIHRoZSB3b3JrIGhhcyBpbnRlcmFjdGl2ZSB1c2VyIGludGVyZmFjZXMsIGVhY2ggbXVzdCBkaXNwbGF5CiAgICAgICAgICBBcHByb3ByaWF0ZSBMZWdhbCBOb3RpY2VzOyBob3dldmVyLCBpZiB0aGUgUHJvZ3JhbSBoYXMKICAgICAgICAgIGludGVyYWN0aXZlIGludGVyZmFjZXMgdGhhdCBkbyBub3QgZGlzcGxheSBBcHByb3ByaWF0ZSBMZWdhbAogICAgICAgICAgTm90aWNlcywgeW91ciB3b3JrIG5lZWQgbm90IG1ha2UgdGhlbSBkbyBzby4KCiAgICAgQSBjb21waWxhdGlvbiBvZiBhIGNvdmVyZWQgd29yayB3aXRoIG90aGVyIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudAogICAgIHdvcmtzLCB3aGljaCBhcmUgbm90IGJ5IHRoZWlyIG5hdHVyZSBleHRlbnNpb25zIG9mIHRoZSBjb3ZlcmVkCiAgICAgd29yaywgYW5kIHdoaWNoIGFyZSBub3QgY29tYmluZWQgd2l0aCBpdCBzdWNoIGFzIHRvIGZvcm0gYSBsYXJnZXIKICAgICBwcm9ncmFtLCBpbiBvciBvbiBhIHZvbHVtZSBvZiBhIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSwgaXMKICAgICBjYWxsZWQgYW4gImFnZ3JlZ2F0ZSIgaWYgdGhlIGNvbXBpbGF0aW9uIGFuZCBpdHMgcmVzdWx0aW5nCiAgICAgY29weXJpZ2h0IGFyZSBub3QgdXNlZCB0byBsaW1pdCB0aGUgYWNjZXNzIG9yIGxlZ2FsIHJpZ2h0cyBvZiB0aGUKICAgICBjb21waWxhdGlvbidzIHVzZXJzIGJleW9uZCB3aGF0IHRoZSBpbmRpdmlkdWFsIHdvcmtzIHBlcm1pdC4KICAgICBJbmNsdXNpb24gb2YgYSBjb3ZlcmVkIHdvcmsgaW4gYW4gYWdncmVnYXRlIGRvZXMgbm90IGNhdXNlIHRoaXMKICAgICBMaWNlbnNlIHRvIGFwcGx5IHRvIHRoZSBvdGhlciBwYXJ0cyBvZiB0aGUgYWdncmVnYXRlLgoKICA2LiBDb252ZXlpbmcgTm9uLVNvdXJjZSBGb3Jtcy4KCiAgICAgWW91IG1heSBjb252ZXkgYSBjb3ZlcmVkIHdvcmsgaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciB0aGUgdGVybXMKICAgICBvZiBzZWN0aW9ucyA0IGFuZCA1LCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGNvbnZleSB0aGUKICAgICBtYWNoaW5lLXJlYWRhYmxlIENvcnJlc3BvbmRpbmcgU291cmNlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzCiAgICAgTGljZW5zZSwgaW4gb25lIG9mIHRoZXNlIHdheXM6CgogICAgICAgYS4gQ29udmV5IHRoZSBvYmplY3QgY29kZSBpbiwgb3IgZW1ib2RpZWQgaW4sIGEgcGh5c2ljYWwgcHJvZHVjdAogICAgICAgICAgKGluY2x1ZGluZyBhIHBoeXNpY2FsIGRpc3RyaWJ1dGlvbiBtZWRpdW0pLCBhY2NvbXBhbmllZCBieSB0aGUKICAgICAgICAgIENvcnJlc3BvbmRpbmcgU291cmNlIGZpeGVkIG9uIGEgZHVyYWJsZSBwaHlzaWNhbCBtZWRpdW0KICAgICAgICAgIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlLgoKICAgICAgIGIuIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgaW4sIG9yIGVtYm9kaWVkIGluLCBhIHBoeXNpY2FsIHByb2R1Y3QKICAgICAgICAgIChpbmNsdWRpbmcgYSBwaHlzaWNhbCBkaXN0cmlidXRpb24gbWVkaXVtKSwgYWNjb21wYW5pZWQgYnkgYQogICAgICAgICAgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlIHllYXJzIGFuZCB2YWxpZCBmb3IgYXMKICAgICAgICAgIGxvbmcgYXMgeW91IG9mZmVyIHNwYXJlIHBhcnRzIG9yIGN1c3RvbWVyIHN1cHBvcnQgZm9yIHRoYXQKICAgICAgICAgIHByb2R1Y3QgbW9kZWwsIHRvIGdpdmUgYW55b25lIHdobyBwb3NzZXNzZXMgdGhlIG9iamVjdCBjb2RlCiAgICAgICAgICBlaXRoZXIgKDEpIGEgY29weSBvZiB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgZm9yIGFsbCB0aGUKICAgICAgICAgIHNvZnR3YXJlIGluIHRoZSBwcm9kdWN0IHRoYXQgaXMgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UsIG9uIGEKICAgICAgICAgIGR1cmFibGUgcGh5c2ljYWwgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlCiAgICAgICAgICBpbnRlcmNoYW5nZSwgZm9yIGEgcHJpY2Ugbm8gbW9yZSB0aGFuIHlvdXIgcmVhc29uYWJsZSBjb3N0IG9mCiAgICAgICAgICBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgdGhpcyBjb252ZXlpbmcgb2Ygc291cmNlLCBvciAoMikgYWNjZXNzCiAgICAgICAgICB0byBjb3B5IHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBmcm9tIGEgbmV0d29yayBzZXJ2ZXIgYXQgbm8KICAgICAgICAgIGNoYXJnZS4KCiAgICAgICBjLiBDb252ZXkgaW5kaXZpZHVhbCBjb3BpZXMgb2YgdGhlIG9iamVjdCBjb2RlIHdpdGggYSBjb3B5IG9mIHRoZQogICAgICAgICAgd3JpdHRlbiBvZmZlciB0byBwcm92aWRlIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZS4gIFRoaXMKICAgICAgICAgIGFsdGVybmF0aXZlIGlzIGFsbG93ZWQgb25seSBvY2Nhc2lvbmFsbHkgYW5kIG5vbmNvbW1lcmNpYWxseSwKICAgICAgICAgIGFuZCBvbmx5IGlmIHlvdSByZWNlaXZlZCB0aGUgb2JqZWN0IGNvZGUgd2l0aCBzdWNoIGFuIG9mZmVyLAogICAgICAgICAgaW4gYWNjb3JkIHdpdGggc3Vic2VjdGlvbiA2Yi4KCiAgICAgICBkLiBDb252ZXkgdGhlIG9iamVjdCBjb2RlIGJ5IG9mZmVyaW5nIGFjY2VzcyBmcm9tIGEgZGVzaWduYXRlZAogICAgICAgICAgcGxhY2UgKGdyYXRpcyBvciBmb3IgYSBjaGFyZ2UpLCBhbmQgb2ZmZXIgZXF1aXZhbGVudCBhY2Nlc3MgdG8KICAgICAgICAgIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBpbiB0aGUgc2FtZSB3YXkgdGhyb3VnaCB0aGUgc2FtZQogICAgICAgICAgcGxhY2UgYXQgbm8gZnVydGhlciBjaGFyZ2UuICBZb3UgbmVlZCBub3QgcmVxdWlyZSByZWNpcGllbnRzCiAgICAgICAgICB0byBjb3B5IHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KICAgICAgICAgIElmIHRoZSBwbGFjZSB0byBjb3B5IHRoZSBvYmplY3QgY29kZSBpcyBhIG5ldHdvcmsgc2VydmVyLCB0aGUKICAgICAgICAgIENvcnJlc3BvbmRpbmcgU291cmNlIG1heSBiZSBvbiBhIGRpZmZlcmVudCBzZXJ2ZXIgKG9wZXJhdGVkIGJ5CiAgICAgICAgICB5b3Ugb3IgYSB0aGlyZCBwYXJ0eSkgdGhhdCBzdXBwb3J0cyBlcXVpdmFsZW50IGNvcHlpbmcKICAgICAgICAgIGZhY2lsaXRpZXMsIHByb3ZpZGVkIHlvdSBtYWludGFpbiBjbGVhciBkaXJlY3Rpb25zIG5leHQgdG8gdGhlCiAgICAgICAgICBvYmplY3QgY29kZSBzYXlpbmcgd2hlcmUgdG8gZmluZCB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UuCiAgICAgICAgICBSZWdhcmRsZXNzIG9mIHdoYXQgc2VydmVyIGhvc3RzIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSwgeW91CiAgICAgICAgICByZW1haW4gb2JsaWdhdGVkIHRvIGVuc3VyZSB0aGF0IGl0IGlzIGF2YWlsYWJsZSBmb3IgYXMgbG9uZyBhcwogICAgICAgICAgbmVlZGVkIHRvIHNhdGlzZnkgdGhlc2UgcmVxdWlyZW1lbnRzLgoKICAgICAgIGUuIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgdXNpbmcgcGVlci10by1wZWVyIHRyYW5zbWlzc2lvbiwKICAgICAgICAgIHByb3ZpZGVkIHlvdSBpbmZvcm0gb3RoZXIgcGVlcnMgd2hlcmUgdGhlIG9iamVjdCBjb2RlIGFuZAogICAgICAgICAgQ29ycmVzcG9uZGluZyBTb3VyY2Ugb2YgdGhlIHdvcmsgYXJlIGJlaW5nIG9mZmVyZWQgdG8gdGhlCiAgICAgICAgICBnZW5lcmFsIHB1YmxpYyBhdCBubyBjaGFyZ2UgdW5kZXIgc3Vic2VjdGlvbiA2ZC4KCiAgICAgQSBzZXBhcmFibGUgcG9ydGlvbiBvZiB0aGUgb2JqZWN0IGNvZGUsIHdob3NlIHNvdXJjZSBjb2RlIGlzCiAgICAgZXhjbHVkZWQgZnJvbSB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgYXMgYSBTeXN0ZW0gTGlicmFyeSwgbmVlZAogICAgIG5vdCBiZSBpbmNsdWRlZCBpbiBjb252ZXlpbmcgdGhlIG9iamVjdCBjb2RlIHdvcmsuCgogICAgIEEgIlVzZXIgUHJvZHVjdCIgaXMgZWl0aGVyICgxKSBhICJjb25zdW1lciBwcm9kdWN0Iiwgd2hpY2ggbWVhbnMKICAgICBhbnkgdGFuZ2libGUgcGVyc29uYWwgcHJvcGVydHkgd2hpY2ggaXMgbm9ybWFsbHkgdXNlZCBmb3IgcGVyc29uYWwsCiAgICAgZmFtaWx5LCBvciBob3VzZWhvbGQgcHVycG9zZXMsIG9yICgyKSBhbnl0aGluZyBkZXNpZ25lZCBvciBzb2xkIGZvcgogICAgIGluY29ycG9yYXRpb24gaW50byBhIGR3ZWxsaW5nLiAgSW4gZGV0ZXJtaW5pbmcgd2hldGhlciBhIHByb2R1Y3QgaXMKICAgICBhIGNvbnN1bWVyIHByb2R1Y3QsIGRvdWJ0ZnVsIGNhc2VzIHNoYWxsIGJlIHJlc29sdmVkIGluIGZhdm9yIG9mCiAgICAgY292ZXJhZ2UuICBGb3IgYSBwYXJ0aWN1bGFyIHByb2R1Y3QgcmVjZWl2ZWQgYnkgYSBwYXJ0aWN1bGFyIHVzZXIsCiAgICAgIm5vcm1hbGx5IHVzZWQiIHJlZmVycyB0byBhIHR5cGljYWwgb3IgY29tbW9uIHVzZSBvZiB0aGF0IGNsYXNzIG9mCiAgICAgcHJvZHVjdCwgcmVnYXJkbGVzcyBvZiB0aGUgc3RhdHVzIG9mIHRoZSBwYXJ0aWN1bGFyIHVzZXIgb3Igb2YgdGhlCiAgICAgd2F5IGluIHdoaWNoIHRoZSBwYXJ0aWN1bGFyIHVzZXIgYWN0dWFsbHkgdXNlcywgb3IgZXhwZWN0cyBvciBpcwogICAgIGV4cGVjdGVkIHRvIHVzZSwgdGhlIHByb2R1Y3QuICBBIHByb2R1Y3QgaXMgYSBjb25zdW1lciBwcm9kdWN0CiAgICAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSBwcm9kdWN0IGhhcyBzdWJzdGFudGlhbCBjb21tZXJjaWFsLAogICAgIGluZHVzdHJpYWwgb3Igbm9uLWNvbnN1bWVyIHVzZXMsIHVubGVzcyBzdWNoIHVzZXMgcmVwcmVzZW50IHRoZQogICAgIG9ubHkgc2lnbmlmaWNhbnQgbW9kZSBvZiB1c2Ugb2YgdGhlIHByb2R1Y3QuCgogICAgICJJbnN0YWxsYXRpb24gSW5mb3JtYXRpb24iIGZvciBhIFVzZXIgUHJvZHVjdCBtZWFucyBhbnkgbWV0aG9kcywKICAgICBwcm9jZWR1cmVzLCBhdXRob3JpemF0aW9uIGtleXMsIG9yIG90aGVyIGluZm9ybWF0aW9uIHJlcXVpcmVkIHRvCiAgICAgaW5zdGFsbCBhbmQgZXhlY3V0ZSBtb2RpZmllZCB2ZXJzaW9ucyBvZiBhIGNvdmVyZWQgd29yayBpbiB0aGF0CiAgICAgVXNlciBQcm9kdWN0IGZyb20gYSBtb2RpZmllZCB2ZXJzaW9uIG9mIGl0cyBDb3JyZXNwb25kaW5nIFNvdXJjZS4KICAgICBUaGUgaW5mb3JtYXRpb24gbXVzdCBzdWZmaWNlIHRvIGVuc3VyZSB0aGF0IHRoZSBjb250aW51ZWQKICAgICBmdW5jdGlvbmluZyBvZiB0aGUgbW9kaWZpZWQgb2JqZWN0IGNvZGUgaXMgaW4gbm8gY2FzZSBwcmV2ZW50ZWQgb3IKICAgICBpbnRlcmZlcmVkIHdpdGggc29sZWx5IGJlY2F1c2UgbW9kaWZpY2F0aW9uIGhhcyBiZWVuIG1hZGUuCgogICAgIElmIHlvdSBjb252ZXkgYW4gb2JqZWN0IGNvZGUgd29yayB1bmRlciB0aGlzIHNlY3Rpb24gaW4sIG9yIHdpdGgsCiAgICAgb3Igc3BlY2lmaWNhbGx5IGZvciB1c2UgaW4sIGEgVXNlciBQcm9kdWN0LCBhbmQgdGhlIGNvbnZleWluZwogICAgIG9jY3VycyBhcyBwYXJ0IG9mIGEgdHJhbnNhY3Rpb24gaW4gd2hpY2ggdGhlIHJpZ2h0IG9mIHBvc3Nlc3Npb24KICAgICBhbmQgdXNlIG9mIHRoZSBVc2VyIFByb2R1Y3QgaXMgdHJhbnNmZXJyZWQgdG8gdGhlIHJlY2lwaWVudCBpbgogICAgIHBlcnBldHVpdHkgb3IgZm9yIGEgZml4ZWQgdGVybSAocmVnYXJkbGVzcyBvZiBob3cgdGhlIHRyYW5zYWN0aW9uCiAgICAgaXMgY2hhcmFjdGVyaXplZCksIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBjb252ZXllZCB1bmRlciB0aGlzCiAgICAgc2VjdGlvbiBtdXN0IGJlIGFjY29tcGFuaWVkIGJ5IHRoZSBJbnN0YWxsYXRpb24gSW5mb3JtYXRpb24uICBCdXQKICAgICB0aGlzIHJlcXVpcmVtZW50IGRvZXMgbm90IGFwcGx5IGlmIG5laXRoZXIgeW91IG5vciBhbnkgdGhpcmQgcGFydHkKICAgICByZXRhaW5zIHRoZSBhYmlsaXR5IHRvIGluc3RhbGwgbW9kaWZpZWQgb2JqZWN0IGNvZGUgb24gdGhlIFVzZXIKICAgICBQcm9kdWN0IChmb3IgZXhhbXBsZSwgdGhlIHdvcmsgaGFzIGJlZW4gaW5zdGFsbGVkIGluIFJPTSkuCgogICAgIFRoZSByZXF1aXJlbWVudCB0byBwcm92aWRlIEluc3RhbGxhdGlvbiBJbmZvcm1hdGlvbiBkb2VzIG5vdAogICAgIGluY2x1ZGUgYSByZXF1aXJlbWVudCB0byBjb250aW51ZSB0byBwcm92aWRlIHN1cHBvcnQgc2VydmljZSwKICAgICB3YXJyYW50eSwgb3IgdXBkYXRlcyBmb3IgYSB3b3JrIHRoYXQgaGFzIGJlZW4gbW9kaWZpZWQgb3IgaW5zdGFsbGVkCiAgICAgYnkgdGhlIHJlY2lwaWVudCwgb3IgZm9yIHRoZSBVc2VyIFByb2R1Y3QgaW4gd2hpY2ggaXQgaGFzIGJlZW4KICAgICBtb2RpZmllZCBvciBpbnN0YWxsZWQuICBBY2Nlc3MgdG8gYSBuZXR3b3JrIG1heSBiZSBkZW5pZWQgd2hlbiB0aGUKICAgICBtb2RpZmljYXRpb24gaXRzZWxmIG1hdGVyaWFsbHkgYW5kIGFkdmVyc2VseSBhZmZlY3RzIHRoZSBvcGVyYXRpb24KICAgICBvZiB0aGUgbmV0d29yayBvciB2aW9sYXRlcyB0aGUgcnVsZXMgYW5kIHByb3RvY29scyBmb3IKICAgICBjb21tdW5pY2F0aW9uIGFjcm9zcyB0aGUgbmV0d29yay4KCiAgICAgQ29ycmVzcG9uZGluZyBTb3VyY2UgY29udmV5ZWQsIGFuZCBJbnN0YWxsYXRpb24gSW5mb3JtYXRpb24KICAgICBwcm92aWRlZCwgaW4gYWNjb3JkIHdpdGggdGhpcyBzZWN0aW9uIG11c3QgYmUgaW4gYSBmb3JtYXQgdGhhdCBpcwogICAgIHB1YmxpY2x5IGRvY3VtZW50ZWQgKGFuZCB3aXRoIGFuIGltcGxlbWVudGF0aW9uIGF2YWlsYWJsZSB0byB0aGUKICAgICBwdWJsaWMgaW4gc291cmNlIGNvZGUgZm9ybSksIGFuZCBtdXN0IHJlcXVpcmUgbm8gc3BlY2lhbCBwYXNzd29yZAogICAgIG9yIGtleSBmb3IgdW5wYWNraW5nLCByZWFkaW5nIG9yIGNvcHlpbmcuCgogIDcuIEFkZGl0aW9uYWwgVGVybXMuCgogICAgICJBZGRpdGlvbmFsIHBlcm1pc3Npb25zIiBhcmUgdGVybXMgdGhhdCBzdXBwbGVtZW50IHRoZSB0ZXJtcyBvZgogICAgIHRoaXMgTGljZW5zZSBieSBtYWtpbmcgZXhjZXB0aW9ucyBmcm9tIG9uZSBvciBtb3JlIG9mIGl0cwogICAgIGNvbmRpdGlvbnMuICBBZGRpdGlvbmFsIHBlcm1pc3Npb25zIHRoYXQgYXJlIGFwcGxpY2FibGUgdG8gdGhlCiAgICAgZW50aXJlIFByb2dyYW0gc2hhbGwgYmUgdHJlYXRlZCBhcyB0aG91Z2ggdGhleSB3ZXJlIGluY2x1ZGVkIGluCiAgICAgdGhpcyBMaWNlbnNlLCB0byB0aGUgZXh0ZW50IHRoYXQgdGhleSBhcmUgdmFsaWQgdW5kZXIgYXBwbGljYWJsZQogICAgIGxhdy4gIElmIGFkZGl0aW9uYWwgcGVybWlzc2lvbnMgYXBwbHkgb25seSB0byBwYXJ0IG9mIHRoZSBQcm9ncmFtLAogICAgIHRoYXQgcGFydCBtYXkgYmUgdXNlZCBzZXBhcmF0ZWx5IHVuZGVyIHRob3NlIHBlcm1pc3Npb25zLCBidXQgdGhlCiAgICAgZW50aXJlIFByb2dyYW0gcmVtYWlucyBnb3Zlcm5lZCBieSB0aGlzIExpY2Vuc2Ugd2l0aG91dCByZWdhcmQgdG8KICAgICB0aGUgYWRkaXRpb25hbCBwZXJtaXNzaW9ucy4KCiAgICAgV2hlbiB5b3UgY29udmV5IGEgY29weSBvZiBhIGNvdmVyZWQgd29yaywgeW91IG1heSBhdCB5b3VyIG9wdGlvbgogICAgIHJlbW92ZSBhbnkgYWRkaXRpb25hbCBwZXJtaXNzaW9ucyBmcm9tIHRoYXQgY29weSwgb3IgZnJvbSBhbnkgcGFydAogICAgIG9mIGl0LiAgKEFkZGl0aW9uYWwgcGVybWlzc2lvbnMgbWF5IGJlIHdyaXR0ZW4gdG8gcmVxdWlyZSB0aGVpciBvd24KICAgICByZW1vdmFsIGluIGNlcnRhaW4gY2FzZXMgd2hlbiB5b3UgbW9kaWZ5IHRoZSB3b3JrLikgIFlvdSBtYXkgcGxhY2UKICAgICBhZGRpdGlvbmFsIHBlcm1pc3Npb25zIG9uIG1hdGVyaWFsLCBhZGRlZCBieSB5b3UgdG8gYSBjb3ZlcmVkIHdvcmssCiAgICAgZm9yIHdoaWNoIHlvdSBoYXZlIG9yIGNhbiBnaXZlIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBwZXJtaXNzaW9uLgoKICAgICBOb3R3aXRoc3RhbmRpbmcgYW55IG90aGVyIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UsIGZvciBtYXRlcmlhbAogICAgIHlvdSBhZGQgdG8gYSBjb3ZlcmVkIHdvcmssIHlvdSBtYXkgKGlmIGF1dGhvcml6ZWQgYnkgdGhlIGNvcHlyaWdodAogICAgIGhvbGRlcnMgb2YgdGhhdCBtYXRlcmlhbCkgc3VwcGxlbWVudCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGgKICAgICB0ZXJtczoKCiAgICAgICBhLiBEaXNjbGFpbWluZyB3YXJyYW50eSBvciBsaW1pdGluZyBsaWFiaWxpdHkgZGlmZmVyZW50bHkgZnJvbQogICAgICAgICAgdGhlIHRlcm1zIG9mIHNlY3Rpb25zIDE1IGFuZCAxNiBvZiB0aGlzIExpY2Vuc2U7IG9yCgogICAgICAgYi4gUmVxdWlyaW5nIHByZXNlcnZhdGlvbiBvZiBzcGVjaWZpZWQgcmVhc29uYWJsZSBsZWdhbCBub3RpY2VzCiAgICAgICAgICBvciBhdXRob3IgYXR0cmlidXRpb25zIGluIHRoYXQgbWF0ZXJpYWwgb3IgaW4gdGhlIEFwcHJvcHJpYXRlCiAgICAgICAgICBMZWdhbCBOb3RpY2VzIGRpc3BsYXllZCBieSB3b3JrcyBjb250YWluaW5nIGl0OyBvcgoKICAgICAgIGMuIFByb2hpYml0aW5nIG1pc3JlcHJlc2VudGF0aW9uIG9mIHRoZSBvcmlnaW4gb2YgdGhhdCBtYXRlcmlhbCwKICAgICAgICAgIG9yIHJlcXVpcmluZyB0aGF0IG1vZGlmaWVkIHZlcnNpb25zIG9mIHN1Y2ggbWF0ZXJpYWwgYmUgbWFya2VkCiAgICAgICAgICBpbiByZWFzb25hYmxlIHdheXMgYXMgZGlmZmVyZW50IGZyb20gdGhlIG9yaWdpbmFsIHZlcnNpb247IG9yCgogICAgICAgZC4gTGltaXRpbmcgdGhlIHVzZSBmb3IgcHVibGljaXR5IHB1cnBvc2VzIG9mIG5hbWVzIG9mIGxpY2Vuc29ycwogICAgICAgICAgb3IgYXV0aG9ycyBvZiB0aGUgbWF0ZXJpYWw7IG9yCgogICAgICAgZS4gRGVjbGluaW5nIHRvIGdyYW50IHJpZ2h0cyB1bmRlciB0cmFkZW1hcmsgbGF3IGZvciB1c2Ugb2Ygc29tZQogICAgICAgICAgdHJhZGUgbmFtZXMsIHRyYWRlbWFya3MsIG9yIHNlcnZpY2UgbWFya3M7IG9yCgogICAgICAgZi4gUmVxdWlyaW5nIGluZGVtbmlmaWNhdGlvbiBvZiBsaWNlbnNvcnMgYW5kIGF1dGhvcnMgb2YgdGhhdAogICAgICAgICAgbWF0ZXJpYWwgYnkgYW55b25lIHdobyBjb252ZXlzIHRoZSBtYXRlcmlhbCAob3IgbW9kaWZpZWQKICAgICAgICAgIHZlcnNpb25zIG9mIGl0KSB3aXRoIGNvbnRyYWN0dWFsIGFzc3VtcHRpb25zIG9mIGxpYWJpbGl0eSB0bwogICAgICAgICAgdGhlIHJlY2lwaWVudCwgZm9yIGFueSBsaWFiaWxpdHkgdGhhdCB0aGVzZSBjb250cmFjdHVhbAogICAgICAgICAgYXNzdW1wdGlvbnMgZGlyZWN0bHkgaW1wb3NlIG9uIHRob3NlIGxpY2Vuc29ycyBhbmQgYXV0aG9ycy4KCiAgICAgQWxsIG90aGVyIG5vbi1wZXJtaXNzaXZlIGFkZGl0aW9uYWwgdGVybXMgYXJlIGNvbnNpZGVyZWQgImZ1cnRoZXIKICAgICByZXN0cmljdGlvbnMiIHdpdGhpbiB0aGUgbWVhbmluZyBvZiBzZWN0aW9uIDEwLiAgSWYgdGhlIFByb2dyYW0gYXMKICAgICB5b3UgcmVjZWl2ZWQgaXQsIG9yIGFueSBwYXJ0IG9mIGl0LCBjb250YWlucyBhIG5vdGljZSBzdGF0aW5nIHRoYXQKICAgICBpdCBpcyBnb3Zlcm5lZCBieSB0aGlzIExpY2Vuc2UgYWxvbmcgd2l0aCBhIHRlcm0gdGhhdCBpcyBhIGZ1cnRoZXIKICAgICByZXN0cmljdGlvbiwgeW91IG1heSByZW1vdmUgdGhhdCB0ZXJtLiAgSWYgYSBsaWNlbnNlIGRvY3VtZW50CiAgICAgY29udGFpbnMgYSBmdXJ0aGVyIHJlc3RyaWN0aW9uIGJ1dCBwZXJtaXRzIHJlbGljZW5zaW5nIG9yIGNvbnZleWluZwogICAgIHVuZGVyIHRoaXMgTGljZW5zZSwgeW91IG1heSBhZGQgdG8gYSBjb3ZlcmVkIHdvcmsgbWF0ZXJpYWwgZ292ZXJuZWQKICAgICBieSB0aGUgdGVybXMgb2YgdGhhdCBsaWNlbnNlIGRvY3VtZW50LCBwcm92aWRlZCB0aGF0IHRoZSBmdXJ0aGVyCiAgICAgcmVzdHJpY3Rpb24gZG9lcyBub3Qgc3Vydml2ZSBzdWNoIHJlbGljZW5zaW5nIG9yIGNvbnZleWluZy4KCiAgICAgSWYgeW91IGFkZCB0ZXJtcyB0byBhIGNvdmVyZWQgd29yayBpbiBhY2NvcmQgd2l0aCB0aGlzIHNlY3Rpb24sIHlvdQogICAgIG11c3QgcGxhY2UsIGluIHRoZSByZWxldmFudCBzb3VyY2UgZmlsZXMsIGEgc3RhdGVtZW50IG9mIHRoZQogICAgIGFkZGl0aW9uYWwgdGVybXMgdGhhdCBhcHBseSB0byB0aG9zZSBmaWxlcywgb3IgYSBub3RpY2UgaW5kaWNhdGluZwogICAgIHdoZXJlIHRvIGZpbmQgdGhlIGFwcGxpY2FibGUgdGVybXMuCgogICAgIEFkZGl0aW9uYWwgdGVybXMsIHBlcm1pc3NpdmUgb3Igbm9uLXBlcm1pc3NpdmUsIG1heSBiZSBzdGF0ZWQgaW4KICAgICB0aGUgZm9ybSBvZiBhIHNlcGFyYXRlbHkgd3JpdHRlbiBsaWNlbnNlLCBvciBzdGF0ZWQgYXMgZXhjZXB0aW9uczsKICAgICB0aGUgYWJvdmUgcmVxdWlyZW1lbnRzIGFwcGx5IGVpdGhlciB3YXkuCgogIDguIFRlcm1pbmF0aW9uLgoKICAgICBZb3UgbWF5IG5vdCBwcm9wYWdhdGUgb3IgbW9kaWZ5IGEgY292ZXJlZCB3b3JrIGV4Y2VwdCBhcyBleHByZXNzbHkKICAgICBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkgYXR0ZW1wdCBvdGhlcndpc2UgdG8gcHJvcGFnYXRlIG9yCiAgICAgbW9kaWZ5IGl0IGlzIHZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzCiAgICAgdW5kZXIgdGhpcyBMaWNlbnNlIChpbmNsdWRpbmcgYW55IHBhdGVudCBsaWNlbnNlcyBncmFudGVkIHVuZGVyIHRoZQogICAgIHRoaXJkIHBhcmFncmFwaCBvZiBzZWN0aW9uIDExKS4KCiAgICAgSG93ZXZlciwgaWYgeW91IGNlYXNlIGFsbCB2aW9sYXRpb24gb2YgdGhpcyBMaWNlbnNlLCB0aGVuIHlvdXIKICAgICBsaWNlbnNlIGZyb20gYSBwYXJ0aWN1bGFyIGNvcHlyaWdodCBob2xkZXIgaXMgcmVpbnN0YXRlZCAoYSkKICAgICBwcm92aXNpb25hbGx5LCB1bmxlc3MgYW5kIHVudGlsIHRoZSBjb3B5cmlnaHQgaG9sZGVyIGV4cGxpY2l0bHkgYW5kCiAgICAgZmluYWxseSB0ZXJtaW5hdGVzIHlvdXIgbGljZW5zZSwgYW5kIChiKSBwZXJtYW5lbnRseSwgaWYgdGhlCiAgICAgY29weXJpZ2h0IGhvbGRlciBmYWlscyB0byBub3RpZnkgeW91IG9mIHRoZSB2aW9sYXRpb24gYnkgc29tZQogICAgIHJlYXNvbmFibGUgbWVhbnMgcHJpb3IgdG8gNjAgZGF5cyBhZnRlciB0aGUgY2Vzc2F0aW9uLgoKICAgICBNb3Jlb3ZlciwgeW91ciBsaWNlbnNlIGZyb20gYSBwYXJ0aWN1bGFyIGNvcHlyaWdodCBob2xkZXIgaXMKICAgICByZWluc3RhdGVkIHBlcm1hbmVudGx5IGlmIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vdGlmaWVzIHlvdSBvZiB0aGUKICAgICB2aW9sYXRpb24gYnkgc29tZSByZWFzb25hYmxlIG1lYW5zLCB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHlvdSBoYXZlCiAgICAgcmVjZWl2ZWQgbm90aWNlIG9mIHZpb2xhdGlvbiBvZiB0aGlzIExpY2Vuc2UgKGZvciBhbnkgd29yaykgZnJvbQogICAgIHRoYXQgY29weXJpZ2h0IGhvbGRlciwgYW5kIHlvdSBjdXJlIHRoZSB2aW9sYXRpb24gcHJpb3IgdG8gMzAgZGF5cwogICAgIGFmdGVyIHlvdXIgcmVjZWlwdCBvZiB0aGUgbm90aWNlLgoKICAgICBUZXJtaW5hdGlvbiBvZiB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIHNlY3Rpb24gZG9lcyBub3QgdGVybWluYXRlCiAgICAgdGhlIGxpY2Vuc2VzIG9mIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9yIHJpZ2h0cyBmcm9tIHlvdQogICAgIHVuZGVyIHRoaXMgTGljZW5zZS4gIElmIHlvdXIgcmlnaHRzIGhhdmUgYmVlbiB0ZXJtaW5hdGVkIGFuZCBub3QKICAgICBwZXJtYW5lbnRseSByZWluc3RhdGVkLCB5b3UgZG8gbm90IHF1YWxpZnkgdG8gcmVjZWl2ZSBuZXcgbGljZW5zZXMKICAgICBmb3IgdGhlIHNhbWUgbWF0ZXJpYWwgdW5kZXIgc2VjdGlvbiAxMC4KCiAgOS4gQWNjZXB0YW5jZSBOb3QgUmVxdWlyZWQgZm9yIEhhdmluZyBDb3BpZXMuCgogICAgIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UgaW4gb3JkZXIgdG8gcmVjZWl2ZSBvcgogICAgIHJ1biBhIGNvcHkgb2YgdGhlIFByb2dyYW0uICBBbmNpbGxhcnkgcHJvcGFnYXRpb24gb2YgYSBjb3ZlcmVkIHdvcmsKICAgICBvY2N1cnJpbmcgc29sZWx5IGFzIGEgY29uc2VxdWVuY2Ugb2YgdXNpbmcgcGVlci10by1wZWVyCiAgICAgdHJhbnNtaXNzaW9uIHRvIHJlY2VpdmUgYSBjb3B5IGxpa2V3aXNlIGRvZXMgbm90IHJlcXVpcmUKICAgICBhY2NlcHRhbmNlLiAgSG93ZXZlciwgbm90aGluZyBvdGhlciB0aGFuIHRoaXMgTGljZW5zZSBncmFudHMgeW91CiAgICAgcGVybWlzc2lvbiB0byBwcm9wYWdhdGUgb3IgbW9kaWZ5IGFueSBjb3ZlcmVkIHdvcmsuICBUaGVzZSBhY3Rpb25zCiAgICAgaW5mcmluZ2UgY29weXJpZ2h0IGlmIHlvdSBkbyBub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRoZXJlZm9yZSwKICAgICBieSBtb2RpZnlpbmcgb3IgcHJvcGFnYXRpbmcgYSBjb3ZlcmVkIHdvcmssIHlvdSBpbmRpY2F0ZSB5b3VyCiAgICAgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28uCgogIDEwLiBBdXRvbWF0aWMgTGljZW5zaW5nIG9mIERvd25zdHJlYW0gUmVjaXBpZW50cy4KCiAgICAgRWFjaCB0aW1lIHlvdSBjb252ZXkgYSBjb3ZlcmVkIHdvcmssIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseQogICAgIHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZSBvcmlnaW5hbCBsaWNlbnNvcnMsIHRvIHJ1biwgbW9kaWZ5IGFuZAogICAgIHByb3BhZ2F0ZSB0aGF0IHdvcmssIHN1YmplY3QgdG8gdGhpcyBMaWNlbnNlLiAgWW91IGFyZSBub3QKICAgICByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB3aXRoIHRoaXMKICAgICBMaWNlbnNlLgoKICAgICBBbiAiZW50aXR5IHRyYW5zYWN0aW9uIiBpcyBhIHRyYW5zYWN0aW9uIHRyYW5zZmVycmluZyBjb250cm9sIG9mIGFuCiAgICAgb3JnYW5pemF0aW9uLCBvciBzdWJzdGFudGlhbGx5IGFsbCBhc3NldHMgb2Ygb25lLCBvciBzdWJkaXZpZGluZyBhbgogICAgIG9yZ2FuaXphdGlvbiwgb3IgbWVyZ2luZyBvcmdhbml6YXRpb25zLiAgSWYgcHJvcGFnYXRpb24gb2YgYQogICAgIGNvdmVyZWQgd29yayByZXN1bHRzIGZyb20gYW4gZW50aXR5IHRyYW5zYWN0aW9uLCBlYWNoIHBhcnR5IHRvIHRoYXQKICAgICB0cmFuc2FjdGlvbiB3aG8gcmVjZWl2ZXMgYSBjb3B5IG9mIHRoZSB3b3JrIGFsc28gcmVjZWl2ZXMgd2hhdGV2ZXIKICAgICBsaWNlbnNlcyB0byB0aGUgd29yayB0aGUgcGFydHkncyBwcmVkZWNlc3NvciBpbiBpbnRlcmVzdCBoYWQgb3IKICAgICBjb3VsZCBnaXZlIHVuZGVyIHRoZSBwcmV2aW91cyBwYXJhZ3JhcGgsIHBsdXMgYSByaWdodCB0byBwb3NzZXNzaW9uCiAgICAgb2YgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIG9mIHRoZSB3b3JrIGZyb20gdGhlIHByZWRlY2Vzc29yIGluCiAgICAgaW50ZXJlc3QsIGlmIHRoZSBwcmVkZWNlc3NvciBoYXMgaXQgb3IgY2FuIGdldCBpdCB3aXRoIHJlYXNvbmFibGUKICAgICBlZmZvcnRzLgoKICAgICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIgcmVzdHJpY3Rpb25zIG9uIHRoZSBleGVyY2lzZSBvZiB0aGUKICAgICByaWdodHMgZ3JhbnRlZCBvciBhZmZpcm1lZCB1bmRlciB0aGlzIExpY2Vuc2UuICBGb3IgZXhhbXBsZSwgeW91CiAgICAgbWF5IG5vdCBpbXBvc2UgYSBsaWNlbnNlIGZlZSwgcm95YWx0eSwgb3Igb3RoZXIgY2hhcmdlIGZvciBleGVyY2lzZQogICAgIG9mIHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSwgYW5kIHlvdSBtYXkgbm90IGluaXRpYXRlCiAgICAgbGl0aWdhdGlvbiAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkKICAgICBhbGxlZ2luZyB0aGF0IGFueSBwYXRlbnQgY2xhaW0gaXMgaW5mcmluZ2VkIGJ5IG1ha2luZywgdXNpbmcsCiAgICAgc2VsbGluZywgb2ZmZXJpbmcgZm9yIHNhbGUsIG9yIGltcG9ydGluZyB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbgogICAgIG9mIGl0LgoKICAxMS4gUGF0ZW50cy4KCiAgICAgQSAiY29udHJpYnV0b3IiIGlzIGEgY29weXJpZ2h0IGhvbGRlciB3aG8gYXV0aG9yaXplcyB1c2UgdW5kZXIgdGhpcwogICAgIExpY2Vuc2Ugb2YgdGhlIFByb2dyYW0gb3IgYSB3b3JrIG9uIHdoaWNoIHRoZSBQcm9ncmFtIGlzIGJhc2VkLgogICAgIFRoZSB3b3JrIHRodXMgbGljZW5zZWQgaXMgY2FsbGVkIHRoZSBjb250cmlidXRvcidzICJjb250cmlidXRvcgogICAgIHZlcnNpb24iLgoKICAgICBBIGNvbnRyaWJ1dG9yJ3MgImVzc2VudGlhbCBwYXRlbnQgY2xhaW1zIiBhcmUgYWxsIHBhdGVudCBjbGFpbXMKICAgICBvd25lZCBvciBjb250cm9sbGVkIGJ5IHRoZSBjb250cmlidXRvciwgd2hldGhlciBhbHJlYWR5IGFjcXVpcmVkIG9yCiAgICAgaGVyZWFmdGVyIGFjcXVpcmVkLCB0aGF0IHdvdWxkIGJlIGluZnJpbmdlZCBieSBzb21lIG1hbm5lciwKICAgICBwZXJtaXR0ZWQgYnkgdGhpcyBMaWNlbnNlLCBvZiBtYWtpbmcsIHVzaW5nLCBvciBzZWxsaW5nIGl0cwogICAgIGNvbnRyaWJ1dG9yIHZlcnNpb24sIGJ1dCBkbyBub3QgaW5jbHVkZSBjbGFpbXMgdGhhdCB3b3VsZCBiZQogICAgIGluZnJpbmdlZCBvbmx5IGFzIGEgY29uc2VxdWVuY2Ugb2YgZnVydGhlciBtb2RpZmljYXRpb24gb2YgdGhlCiAgICAgY29udHJpYnV0b3IgdmVyc2lvbi4gIEZvciBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sICJjb250cm9sIgogICAgIGluY2x1ZGVzIHRoZSByaWdodCB0byBncmFudCBwYXRlbnQgc3VibGljZW5zZXMgaW4gYSBtYW5uZXIKICAgICBjb25zaXN0ZW50IHdpdGggdGhlIHJlcXVpcmVtZW50cyBvZiB0aGlzIExpY2Vuc2UuCgogICAgIEVhY2ggY29udHJpYnV0b3IgZ3JhbnRzIHlvdSBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwKICAgICByb3lhbHR5LWZyZWUgcGF0ZW50IGxpY2Vuc2UgdW5kZXIgdGhlIGNvbnRyaWJ1dG9yJ3MgZXNzZW50aWFsCiAgICAgcGF0ZW50IGNsYWltcywgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0IGFuZAogICAgIG90aGVyd2lzZSBydW4sIG1vZGlmeSBhbmQgcHJvcGFnYXRlIHRoZSBjb250ZW50cyBvZiBpdHMgY29udHJpYnV0b3IKICAgICB2ZXJzaW9uLgoKICAgICBJbiB0aGUgZm9sbG93aW5nIHRocmVlIHBhcmFncmFwaHMsIGEgInBhdGVudCBsaWNlbnNlIiBpcyBhbnkKICAgICBleHByZXNzIGFncmVlbWVudCBvciBjb21taXRtZW50LCBob3dldmVyIGRlbm9taW5hdGVkLCBub3QgdG8KICAgICBlbmZvcmNlIGEgcGF0ZW50IChzdWNoIGFzIGFuIGV4cHJlc3MgcGVybWlzc2lvbiB0byBwcmFjdGljZSBhCiAgICAgcGF0ZW50IG9yIGNvdmVuYW50IG5vdCB0byBzdWUgZm9yIHBhdGVudCBpbmZyaW5nZW1lbnQpLiAgVG8gImdyYW50IgogICAgIHN1Y2ggYSBwYXRlbnQgbGljZW5zZSB0byBhIHBhcnR5IG1lYW5zIHRvIG1ha2Ugc3VjaCBhbiBhZ3JlZW1lbnQgb3IKICAgICBjb21taXRtZW50IG5vdCB0byBlbmZvcmNlIGEgcGF0ZW50IGFnYWluc3QgdGhlIHBhcnR5LgoKICAgICBJZiB5b3UgY29udmV5IGEgY292ZXJlZCB3b3JrLCBrbm93aW5nbHkgcmVseWluZyBvbiBhIHBhdGVudAogICAgIGxpY2Vuc2UsIGFuZCB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2Ugb2YgdGhlIHdvcmsgaXMgbm90IGF2YWlsYWJsZQogICAgIGZvciBhbnlvbmUgdG8gY29weSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzCiAgICAgTGljZW5zZSwgdGhyb3VnaCBhIHB1YmxpY2x5IGF2YWlsYWJsZSBuZXR3b3JrIHNlcnZlciBvciBvdGhlcgogICAgIHJlYWRpbHkgYWNjZXNzaWJsZSBtZWFucywgdGhlbiB5b3UgbXVzdCBlaXRoZXIgKDEpIGNhdXNlIHRoZQogICAgIENvcnJlc3BvbmRpbmcgU291cmNlIHRvIGJlIHNvIGF2YWlsYWJsZSwgb3IgKDIpIGFycmFuZ2UgdG8gZGVwcml2ZQogICAgIHlvdXJzZWxmIG9mIHRoZSBiZW5lZml0IG9mIHRoZSBwYXRlbnQgbGljZW5zZSBmb3IgdGhpcyBwYXJ0aWN1bGFyCiAgICAgd29yaywgb3IgKDMpIGFycmFuZ2UsIGluIGEgbWFubmVyIGNvbnNpc3RlbnQgd2l0aCB0aGUgcmVxdWlyZW1lbnRzCiAgICAgb2YgdGhpcyBMaWNlbnNlLCB0byBleHRlbmQgdGhlIHBhdGVudCBsaWNlbnNlIHRvIGRvd25zdHJlYW0KICAgICByZWNpcGllbnRzLiAgIktub3dpbmdseSByZWx5aW5nIiBtZWFucyB5b3UgaGF2ZSBhY3R1YWwga25vd2xlZGdlCiAgICAgdGhhdCwgYnV0IGZvciB0aGUgcGF0ZW50IGxpY2Vuc2UsIHlvdXIgY29udmV5aW5nIHRoZSBjb3ZlcmVkIHdvcmsKICAgICBpbiBhIGNvdW50cnksIG9yIHlvdXIgcmVjaXBpZW50J3MgdXNlIG9mIHRoZSBjb3ZlcmVkIHdvcmsgaW4gYQogICAgIGNvdW50cnksIHdvdWxkIGluZnJpbmdlIG9uZSBvciBtb3JlIGlkZW50aWZpYWJsZSBwYXRlbnRzIGluIHRoYXQKICAgICBjb3VudHJ5IHRoYXQgeW91IGhhdmUgcmVhc29uIHRvIGJlbGlldmUgYXJlIHZhbGlkLgoKICAgICBJZiwgcHVyc3VhbnQgdG8gb3IgaW4gY29ubmVjdGlvbiB3aXRoIGEgc2luZ2xlIHRyYW5zYWN0aW9uIG9yCiAgICAgYXJyYW5nZW1lbnQsIHlvdSBjb252ZXksIG9yIHByb3BhZ2F0ZSBieSBwcm9jdXJpbmcgY29udmV5YW5jZSBvZiwgYQogICAgIGNvdmVyZWQgd29yaywgYW5kIGdyYW50IGEgcGF0ZW50IGxpY2Vuc2UgdG8gc29tZSBvZiB0aGUgcGFydGllcwogICAgIHJlY2VpdmluZyB0aGUgY292ZXJlZCB3b3JrIGF1dGhvcml6aW5nIHRoZW0gdG8gdXNlLCBwcm9wYWdhdGUsCiAgICAgbW9kaWZ5IG9yIGNvbnZleSBhIHNwZWNpZmljIGNvcHkgb2YgdGhlIGNvdmVyZWQgd29yaywgdGhlbiB0aGUKICAgICBwYXRlbnQgbGljZW5zZSB5b3UgZ3JhbnQgaXMgYXV0b21hdGljYWxseSBleHRlbmRlZCB0byBhbGwKICAgICByZWNpcGllbnRzIG9mIHRoZSBjb3ZlcmVkIHdvcmsgYW5kIHdvcmtzIGJhc2VkIG9uIGl0LgoKICAgICBBIHBhdGVudCBsaWNlbnNlIGlzICJkaXNjcmltaW5hdG9yeSIgaWYgaXQgZG9lcyBub3QgaW5jbHVkZSB3aXRoaW4KICAgICB0aGUgc2NvcGUgb2YgaXRzIGNvdmVyYWdlLCBwcm9oaWJpdHMgdGhlIGV4ZXJjaXNlIG9mLCBvciBpcwogICAgIGNvbmRpdGlvbmVkIG9uIHRoZSBub24tZXhlcmNpc2Ugb2Ygb25lIG9yIG1vcmUgb2YgdGhlIHJpZ2h0cyB0aGF0CiAgICAgYXJlIHNwZWNpZmljYWxseSBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIFlvdSBtYXkgbm90IGNvbnZleSBhCiAgICAgY292ZXJlZCB3b3JrIGlmIHlvdSBhcmUgYSBwYXJ0eSB0byBhbiBhcnJhbmdlbWVudCB3aXRoIGEgdGhpcmQKICAgICBwYXJ0eSB0aGF0IGlzIGluIHRoZSBidXNpbmVzcyBvZiBkaXN0cmlidXRpbmcgc29mdHdhcmUsIHVuZGVyIHdoaWNoCiAgICAgeW91IG1ha2UgcGF5bWVudCB0byB0aGUgdGhpcmQgcGFydHkgYmFzZWQgb24gdGhlIGV4dGVudCBvZiB5b3VyCiAgICAgYWN0aXZpdHkgb2YgY29udmV5aW5nIHRoZSB3b3JrLCBhbmQgdW5kZXIgd2hpY2ggdGhlIHRoaXJkIHBhcnR5CiAgICAgZ3JhbnRzLCB0byBhbnkgb2YgdGhlIHBhcnRpZXMgd2hvIHdvdWxkIHJlY2VpdmUgdGhlIGNvdmVyZWQgd29yawogICAgIGZyb20geW91LCBhIGRpc2NyaW1pbmF0b3J5IHBhdGVudCBsaWNlbnNlIChhKSBpbiBjb25uZWN0aW9uIHdpdGgKICAgICBjb3BpZXMgb2YgdGhlIGNvdmVyZWQgd29yayBjb252ZXllZCBieSB5b3UgKG9yIGNvcGllcyBtYWRlIGZyb20KICAgICB0aG9zZSBjb3BpZXMpLCBvciAoYikgcHJpbWFyaWx5IGZvciBhbmQgaW4gY29ubmVjdGlvbiB3aXRoIHNwZWNpZmljCiAgICAgcHJvZHVjdHMgb3IgY29tcGlsYXRpb25zIHRoYXQgY29udGFpbiB0aGUgY292ZXJlZCB3b3JrLCB1bmxlc3MgeW91CiAgICAgZW50ZXJlZCBpbnRvIHRoYXQgYXJyYW5nZW1lbnQsIG9yIHRoYXQgcGF0ZW50IGxpY2Vuc2Ugd2FzIGdyYW50ZWQsCiAgICAgcHJpb3IgdG8gMjggTWFyY2ggMjAwNy4KCiAgICAgTm90aGluZyBpbiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgY29uc3RydWVkIGFzIGV4Y2x1ZGluZyBvciBsaW1pdGluZwogICAgIGFueSBpbXBsaWVkIGxpY2Vuc2Ugb3Igb3RoZXIgZGVmZW5zZXMgdG8gaW5mcmluZ2VtZW50IHRoYXQgbWF5CiAgICAgb3RoZXJ3aXNlIGJlIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYXBwbGljYWJsZSBwYXRlbnQgbGF3LgoKICAxMi4gTm8gU3VycmVuZGVyIG9mIE90aGVycycgRnJlZWRvbS4KCiAgICAgSWYgY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudAogICAgIG9yIG90aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleQogICAgIGRvIG5vdCBleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiAgSWYgeW91CiAgICAgY2Fubm90IGNvbnZleSBhIGNvdmVyZWQgd29yayBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIKICAgICBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIExpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsCiAgICAgdGhlbiBhcyBhIGNvbnNlcXVlbmNlIHlvdSBtYXkgbm90IGNvbnZleSBpdCBhdCBhbGwuICBGb3IgZXhhbXBsZSwKICAgICBpZiB5b3UgYWdyZWUgdG8gdGVybXMgdGhhdCBvYmxpZ2F0ZSB5b3UgdG8gY29sbGVjdCBhIHJveWFsdHkgZm9yCiAgICAgZnVydGhlciBjb252ZXlpbmcgZnJvbSB0aG9zZSB0byB3aG9tIHlvdSBjb252ZXkgdGhlIFByb2dyYW0sIHRoZQogICAgIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggdGhvc2UgdGVybXMgYW5kIHRoaXMgTGljZW5zZSB3b3VsZAogICAgIGJlIHRvIHJlZnJhaW4gZW50aXJlbHkgZnJvbSBjb252ZXlpbmcgdGhlIFByb2dyYW0uCgogIDEzLiBVc2Ugd2l0aCB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgoKICAgICBOb3R3aXRoc3RhbmRpbmcgYW55IG90aGVyIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UsIHlvdSBoYXZlCiAgICAgcGVybWlzc2lvbiB0byBsaW5rIG9yIGNvbWJpbmUgYW55IGNvdmVyZWQgd29yayB3aXRoIGEgd29yayBsaWNlbnNlZAogICAgIHVuZGVyIHZlcnNpb24gMyBvZiB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGludG8gYQogICAgIHNpbmdsZSBjb21iaW5lZCB3b3JrLCBhbmQgdG8gY29udmV5IHRoZSByZXN1bHRpbmcgd29yay4gIFRoZSB0ZXJtcwogICAgIG9mIHRoaXMgTGljZW5zZSB3aWxsIGNvbnRpbnVlIHRvIGFwcGx5IHRvIHRoZSBwYXJ0IHdoaWNoIGlzIHRoZQogICAgIGNvdmVyZWQgd29yaywgYnV0IHRoZSBzcGVjaWFsIHJlcXVpcmVtZW50cyBvZiB0aGUgR05VIEFmZmVybwogICAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHNlY3Rpb24gMTMsIGNvbmNlcm5pbmcgaW50ZXJhY3Rpb24gdGhyb3VnaAogICAgIGEgbmV0d29yayB3aWxsIGFwcGx5IHRvIHRoZSBjb21iaW5hdGlvbiBhcyBzdWNoLgoKICAxNC4gUmV2aXNlZCBWZXJzaW9ucyBvZiB0aGlzIExpY2Vuc2UuCgogICAgIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3CiAgICAgdmVyc2lvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiAgU3VjaAogICAgIG5ldyB2ZXJzaW9ucyB3aWxsIGJlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dAogICAgIG1heSBkaWZmZXIgaW4gZGV0YWlsIHRvIGFkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgoKICAgICBFYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gIElmIHRoZQogICAgIFByb2dyYW0gc3BlY2lmaWVzIHRoYXQgYSBjZXJ0YWluIG51bWJlcmVkIHZlcnNpb24gb2YgdGhlIEdOVQogICAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgIm9yIGFueSBsYXRlciB2ZXJzaW9uIiBhcHBsaWVzIHRvIGl0LCB5b3UKICAgICBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBlaXRoZXIgb2YKICAgICB0aGF0IG51bWJlcmVkIHZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlCiAgICAgU29mdHdhcmUgRm91bmRhdGlvbi4gIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uCiAgICAgbnVtYmVyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55CiAgICAgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgoKICAgICBJZiB0aGUgUHJvZ3JhbSBzcGVjaWZpZXMgdGhhdCBhIHByb3h5IGNhbiBkZWNpZGUgd2hpY2ggZnV0dXJlCiAgICAgdmVyc2lvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGNhbiBiZSB1c2VkLCB0aGF0CiAgICAgcHJveHkncyBwdWJsaWMgc3RhdGVtZW50IG9mIGFjY2VwdGFuY2Ugb2YgYSB2ZXJzaW9uIHBlcm1hbmVudGx5CiAgICAgYXV0aG9yaXplcyB5b3UgdG8gY2hvb3NlIHRoYXQgdmVyc2lvbiBmb3IgdGhlIFByb2dyYW0uCgogICAgIExhdGVyIGxpY2Vuc2UgdmVyc2lvbnMgbWF5IGdpdmUgeW91IGFkZGl0aW9uYWwgb3IgZGlmZmVyZW50CiAgICAgcGVybWlzc2lvbnMuICBIb3dldmVyLCBubyBhZGRpdGlvbmFsIG9ibGlnYXRpb25zIGFyZSBpbXBvc2VkIG9uIGFueQogICAgIGF1dGhvciBvciBjb3B5cmlnaHQgaG9sZGVyIGFzIGEgcmVzdWx0IG9mIHlvdXIgY2hvb3NpbmcgdG8gZm9sbG93IGEKICAgICBsYXRlciB2ZXJzaW9uLgoKICAxNS4gRGlzY2xhaW1lciBvZiBXYXJyYW50eS4KCiAgICAgVEhFUkUgSVMgTk8gV0FSUkFOVFkgRk9SIFRIRSBQUk9HUkFNLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWQogICAgIEFQUExJQ0FCTEUgTEFXLiBFWENFUFQgV0hFTiBPVEhFUldJU0UgU1RBVEVEIElOIFdSSVRJTkcgVEhFCiAgICAgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SIE9USEVSIFBBUlRJRVMgUFJPVklERSBUSEUgUFJPR1JBTSAiQVMgSVMiCiAgICAgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELAogICAgIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCiAgICAgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gVEhFIEVOVElSRQogICAgIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBQUk9HUkFNIElTIFdJVEggWU9VLgogICAgIFNIT1VMRCBUSEUgUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMCiAgICAgTkVDRVNTQVJZIFNFUlZJQ0lORywgUkVQQUlSIE9SIENPUlJFQ1RJT04uCgogIDE2LiBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4KCiAgICAgSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTgogICAgIFdSSVRJTkcgV0lMTCBBTlkgQ09QWVJJR0hUIEhPTERFUiwgT1IgQU5ZIE9USEVSIFBBUlRZIFdITyBNT0RJRklFUwogICAgIEFORC9PUiBDT05WRVlTIFRIRSBQUk9HUkFNIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVSBGT1IKICAgICBEQU1BR0VTLCBJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IKICAgICBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFCiAgICAgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gTE9TUyBPRiBEQVRBIE9SIERBVEEKICAgICBCRUlORyBSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkgWU9VIE9SIFRISVJECiAgICAgUEFSVElFUyBPUiBBIEZBSUxVUkUgT0YgVEhFIFBST0dSQU0gVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUgogICAgIFBST0dSQU1TKSwgRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GCiAgICAgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KCiAgMTcuIEludGVycHJldGF0aW9uIG9mIFNlY3Rpb25zIDE1IGFuZCAxNi4KCiAgICAgSWYgdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudHkgYW5kIGxpbWl0YXRpb24gb2YgbGlhYmlsaXR5IHByb3ZpZGVkCiAgICAgYWJvdmUgY2Fubm90IGJlIGdpdmVuIGxvY2FsIGxlZ2FsIGVmZmVjdCBhY2NvcmRpbmcgdG8gdGhlaXIgdGVybXMsCiAgICAgcmV2aWV3aW5nIGNvdXJ0cyBzaGFsbCBhcHBseSBsb2NhbCBsYXcgdGhhdCBtb3N0IGNsb3NlbHkKICAgICBhcHByb3hpbWF0ZXMgYW4gYWJzb2x1dGUgd2FpdmVyIG9mIGFsbCBjaXZpbCBsaWFiaWxpdHkgaW4KICAgICBjb25uZWN0aW9uIHdpdGggdGhlIFByb2dyYW0sIHVubGVzcyBhIHdhcnJhbnR5IG9yIGFzc3VtcHRpb24gb2YKICAgICBsaWFiaWxpdHkgYWNjb21wYW5pZXMgYSBjb3B5IG9mIHRoZSBQcm9ncmFtIGluIHJldHVybiBmb3IgYSBmZWUuCgpFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKPT09PT09PT09PT09PT09PT09PT09PT09PT09CgpIb3cgdG8gQXBwbHkgVGhlc2UgVGVybXMgdG8gWW91ciBOZXcgUHJvZ3JhbXMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpJZiB5b3UgZGV2ZWxvcCBhIG5ldyBwcm9ncmFtLCBhbmQgeW91IHdhbnQgaXQgdG8gYmUgb2YgdGhlIGdyZWF0ZXN0CnBvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQKZnJlZSBzb2Z0d2FyZSB3aGljaCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UgdW5kZXIgdGhlc2UKdGVybXMuCgogVG8gZG8gc28sIGF0dGFjaCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gdGhlIHByb2dyYW0uICBJdCBpcyBzYWZlc3QgdG8KYXR0YWNoIHRoZW0gdG8gdGhlIHN0YXJ0IG9mIGVhY2ggc291cmNlIGZpbGUgdG8gbW9zdCBlZmZlY3RpdmVseSBzdGF0ZQp0aGUgZXhjbHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQgZWFjaCBmaWxlIHNob3VsZCBoYXZlIGF0IGxlYXN0IHRoZQoiY29weXJpZ2h0IiBsaW5lIGFuZCBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLgoKICAgICBPTkUgTElORSBUTyBHSVZFIFRIRSBQUk9HUkFNJ1MgTkFNRSBBTkQgQSBCUklFRiBJREVBIE9GIFdIQVQgSVQgRE9FUy4KICAgICBDb3B5cmlnaHQgKEMpIFlFQVIgTkFNRSBPRiBBVVRIT1IKCiAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQogICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdAogICAgIHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KCiAgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAogICAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogICAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KCiAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KCiBBbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIKbWFpbC4KCiBJZiB0aGUgcHJvZ3JhbSBkb2VzIHRlcm1pbmFsIGludGVyYWN0aW9uLCBtYWtlIGl0IG91dHB1dCBhIHNob3J0IG5vdGljZQpsaWtlIHRoaXMgd2hlbiBpdCBzdGFydHMgaW4gYW4gaW50ZXJhY3RpdmUgbW9kZToKCiAgICAgUFJPR1JBTSBDb3B5cmlnaHQgKEMpIFlFQVIgTkFNRSBPRiBBVVRIT1IKICAgICBUaGlzIHByb2dyYW0gY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZOyBmb3IgZGV0YWlscyB0eXBlICdzaG93IHcnLgogICAgIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXQKICAgICB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM7IHR5cGUgJ3Nob3cgYycgZm9yIGRldGFpbHMuCgogVGhlIGh5cG90aGV0aWNhbCBjb21tYW5kcyAnc2hvdyB3JyBhbmQgJ3Nob3cgYycgc2hvdWxkIHNob3cgdGhlCmFwcHJvcHJpYXRlIHBhcnRzIG9mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgT2YgY291cnNlLCB5b3VyCnByb2dyYW0ncyBjb21tYW5kcyBtaWdodCBiZSBkaWZmZXJlbnQ7IGZvciBhIEdVSSBpbnRlcmZhY2UsIHlvdSB3b3VsZAp1c2UgYW4gImFib3V0IGJveCIuCgogWW91IHNob3VsZCBhbHNvIGdldCB5b3VyIGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yCnNjaG9vbCwgaWYgYW55LCB0byBzaWduIGEgImNvcHlyaWdodCBkaXNjbGFpbWVyIiBmb3IgdGhlIHByb2dyYW0sIGlmCm5lY2Vzc2FyeS4gIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoaXMsIGFuZCBob3cgdG8gYXBwbHkgYW5kIGZvbGxvdwp0aGUgR05VIEdQTCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KCiBUaGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91cgpwcm9ncmFtIGludG8gcHJvcHJpZXRhcnkgcHJvZ3JhbXMuICBJZiB5b3VyIHByb2dyYW0gaXMgYSBzdWJyb3V0aW5lCmxpYnJhcnksIHlvdSBtYXkgY29uc2lkZXIgaXQgbW9yZSB1c2VmdWwgdG8gcGVybWl0IGxpbmtpbmcgcHJvcHJpZXRhcnkKYXBwbGljYXRpb25zIHdpdGggdGhlIGxpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUKR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGluc3RlYWQgb2YgdGhpcyBMaWNlbnNlLiAgQnV0IGZpcnN0LApwbGVhc2UgcmVhZCA8aHR0cDovL3d3dy5nbnUub3JnL3BoaWxvc29waHkvd2h5LW5vdC1sZ3BsLmh0bWw+LgoKHwpGaWxlOiBnY2NpbnQuaW5mbywgIE5vZGU6IEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgIE5leHQ6IENvbnRyaWJ1dG9ycywgIFByZXY6IENvcHlpbmcsICBVcDogVG9wCgpHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgogICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAxLjIsIE5vdmVtYmVyIDIwMDIKCiAgICAgQ29weXJpZ2h0IChDKSAyMDAwLDIwMDEsMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KICAgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxLCBVU0EKCiAgICAgRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCiAgICAgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCgogIDAuIFBSRUFNQkxFCgogICAgIFRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZSBpcyB0byBtYWtlIGEgbWFudWFsLCB0ZXh0Ym9vaywgb3Igb3RoZXIKICAgICBmdW5jdGlvbmFsIGFuZCB1c2VmdWwgZG9jdW1lbnQgImZyZWUiIGluIHRoZSBzZW5zZSBvZiBmcmVlZG9tOiB0bwogICAgIGFzc3VyZSBldmVyeW9uZSB0aGUgZWZmZWN0aXZlIGZyZWVkb20gdG8gY29weSBhbmQgcmVkaXN0cmlidXRlIGl0LAogICAgIHdpdGggb3Igd2l0aG91dCBtb2RpZnlpbmcgaXQsIGVpdGhlciBjb21tZXJjaWFsbHkgb3IKICAgICBub25jb21tZXJjaWFsbHkuICBTZWNvbmRhcmlseSwgdGhpcyBMaWNlbnNlIHByZXNlcnZlcyBmb3IgdGhlCiAgICAgYXV0aG9yIGFuZCBwdWJsaXNoZXIgYSB3YXkgdG8gZ2V0IGNyZWRpdCBmb3IgdGhlaXIgd29yaywgd2hpbGUgbm90CiAgICAgYmVpbmcgY29uc2lkZXJlZCByZXNwb25zaWJsZSBmb3IgbW9kaWZpY2F0aW9ucyBtYWRlIGJ5IG90aGVycy4KCiAgICAgVGhpcyBMaWNlbnNlIGlzIGEga2luZCBvZiAiY29weWxlZnQiLCB3aGljaCBtZWFucyB0aGF0IGRlcml2YXRpdmUKICAgICB3b3JrcyBvZiB0aGUgZG9jdW1lbnQgbXVzdCB0aGVtc2VsdmVzIGJlIGZyZWUgaW4gdGhlIHNhbWUgc2Vuc2UuCiAgICAgSXQgY29tcGxlbWVudHMgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB3aGljaCBpcyBhIGNvcHlsZWZ0CiAgICAgbGljZW5zZSBkZXNpZ25lZCBmb3IgZnJlZSBzb2Z0d2FyZS4KCiAgICAgV2UgaGF2ZSBkZXNpZ25lZCB0aGlzIExpY2Vuc2UgaW4gb3JkZXIgdG8gdXNlIGl0IGZvciBtYW51YWxzIGZvcgogICAgIGZyZWUgc29mdHdhcmUsIGJlY2F1c2UgZnJlZSBzb2Z0d2FyZSBuZWVkcyBmcmVlIGRvY3VtZW50YXRpb246IGEKICAgICBmcmVlIHByb2dyYW0gc2hvdWxkIGNvbWUgd2l0aCBtYW51YWxzIHByb3ZpZGluZyB0aGUgc2FtZSBmcmVlZG9tcwogICAgIHRoYXQgdGhlIHNvZnR3YXJlIGRvZXMuICBCdXQgdGhpcyBMaWNlbnNlIGlzIG5vdCBsaW1pdGVkIHRvCiAgICAgc29mdHdhcmUgbWFudWFsczsgaXQgY2FuIGJlIHVzZWQgZm9yIGFueSB0ZXh0dWFsIHdvcmssIHJlZ2FyZGxlc3MKICAgICBvZiBzdWJqZWN0IG1hdHRlciBvciB3aGV0aGVyIGl0IGlzIHB1Ymxpc2hlZCBhcyBhIHByaW50ZWQgYm9vay4gIFdlCiAgICAgcmVjb21tZW5kIHRoaXMgTGljZW5zZSBwcmluY2lwYWxseSBmb3Igd29ya3Mgd2hvc2UgcHVycG9zZSBpcwogICAgIGluc3RydWN0aW9uIG9yIHJlZmVyZW5jZS4KCiAgMS4gQVBQTElDQUJJTElUWSBBTkQgREVGSU5JVElPTlMKCiAgICAgVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IG1hbnVhbCBvciBvdGhlciB3b3JrLCBpbiBhbnkgbWVkaXVtLAogICAgIHRoYXQgY29udGFpbnMgYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBjYW4KICAgICBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiAgU3VjaCBhIG5vdGljZQogICAgIGdyYW50cyBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSBsaWNlbnNlLCB1bmxpbWl0ZWQgaW4gZHVyYXRpb24sCiAgICAgdG8gdXNlIHRoYXQgd29yayB1bmRlciB0aGUgY29uZGl0aW9ucyBzdGF0ZWQgaGVyZWluLiAgVGhlCiAgICAgIkRvY3VtZW50IiwgYmVsb3csIHJlZmVycyB0byBhbnkgc3VjaCBtYW51YWwgb3Igd29yay4gIEFueSBtZW1iZXIKICAgICBvZiB0aGUgcHVibGljIGlzIGEgbGljZW5zZWUsIGFuZCBpcyBhZGRyZXNzZWQgYXMgInlvdSIuICBZb3UgYWNjZXB0CiAgICAgdGhlIGxpY2Vuc2UgaWYgeW91IGNvcHksIG1vZGlmeSBvciBkaXN0cmlidXRlIHRoZSB3b3JrIGluIGEgd2F5CiAgICAgcmVxdWlyaW5nIHBlcm1pc3Npb24gdW5kZXIgY29weXJpZ2h0IGxhdy4KCiAgICAgQSAiTW9kaWZpZWQgVmVyc2lvbiIgb2YgdGhlIERvY3VtZW50IG1lYW5zIGFueSB3b3JrIGNvbnRhaW5pbmcgdGhlCiAgICAgRG9jdW1lbnQgb3IgYSBwb3J0aW9uIG9mIGl0LCBlaXRoZXIgY29waWVkIHZlcmJhdGltLCBvciB3aXRoCiAgICAgbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZCBpbnRvIGFub3RoZXIgbGFuZ3VhZ2UuCgogICAgIEEgIlNlY29uZGFyeSBTZWN0aW9uIiBpcyBhIG5hbWVkIGFwcGVuZGl4IG9yIGEgZnJvbnQtbWF0dGVyIHNlY3Rpb24KICAgICBvZiB0aGUgRG9jdW1lbnQgdGhhdCBkZWFscyBleGNsdXNpdmVseSB3aXRoIHRoZSByZWxhdGlvbnNoaXAgb2YgdGhlCiAgICAgcHVibGlzaGVycyBvciBhdXRob3JzIG9mIHRoZSBEb2N1bWVudCB0byB0aGUgRG9jdW1lbnQncyBvdmVyYWxsCiAgICAgc3ViamVjdCAob3IgdG8gcmVsYXRlZCBtYXR0ZXJzKSBhbmQgY29udGFpbnMgbm90aGluZyB0aGF0IGNvdWxkCiAgICAgZmFsbCBkaXJlY3RseSB3aXRoaW4gdGhhdCBvdmVyYWxsIHN1YmplY3QuICAoVGh1cywgaWYgdGhlIERvY3VtZW50CiAgICAgaXMgaW4gcGFydCBhIHRleHRib29rIG9mIG1hdGhlbWF0aWNzLCBhIFNlY29uZGFyeSBTZWN0aW9uIG1heSBub3QKICAgICBleHBsYWluIGFueSBtYXRoZW1hdGljcy4pICBUaGUgcmVsYXRpb25zaGlwIGNvdWxkIGJlIGEgbWF0dGVyIG9mCiAgICAgaGlzdG9yaWNhbCBjb25uZWN0aW9uIHdpdGggdGhlIHN1YmplY3Qgb3Igd2l0aCByZWxhdGVkIG1hdHRlcnMsIG9yCiAgICAgb2YgbGVnYWwsIGNvbW1lcmNpYWwsIHBoaWxvc29waGljYWwsIGV0aGljYWwgb3IgcG9saXRpY2FsIHBvc2l0aW9uCiAgICAgcmVnYXJkaW5nIHRoZW0uCgogICAgIFRoZSAiSW52YXJpYW50IFNlY3Rpb25zIiBhcmUgY2VydGFpbiBTZWNvbmRhcnkgU2VjdGlvbnMgd2hvc2UKICAgICB0aXRsZXMgYXJlIGRlc2lnbmF0ZWQsIGFzIGJlaW5nIHRob3NlIG9mIEludmFyaWFudCBTZWN0aW9ucywgaW4gdGhlCiAgICAgbm90aWNlIHRoYXQgc2F5cyB0aGF0IHRoZSBEb2N1bWVudCBpcyByZWxlYXNlZCB1bmRlciB0aGlzIExpY2Vuc2UuCiAgICAgSWYgYSBzZWN0aW9uIGRvZXMgbm90IGZpdCB0aGUgYWJvdmUgZGVmaW5pdGlvbiBvZiBTZWNvbmRhcnkgdGhlbiBpdAogICAgIGlzIG5vdCBhbGxvd2VkIHRvIGJlIGRlc2lnbmF0ZWQgYXMgSW52YXJpYW50LiAgVGhlIERvY3VtZW50IG1heQogICAgIGNvbnRhaW4gemVybyBJbnZhcmlhbnQgU2VjdGlvbnMuICBJZiB0aGUgRG9jdW1lbnQgZG9lcyBub3QgaWRlbnRpZnkKICAgICBhbnkgSW52YXJpYW50IFNlY3Rpb25zIHRoZW4gdGhlcmUgYXJlIG5vbmUuCgogICAgIFRoZSAiQ292ZXIgVGV4dHMiIGFyZSBjZXJ0YWluIHNob3J0IHBhc3NhZ2VzIG9mIHRleHQgdGhhdCBhcmUKICAgICBsaXN0ZWQsIGFzIEZyb250LUNvdmVyIFRleHRzIG9yIEJhY2stQ292ZXIgVGV4dHMsIGluIHRoZSBub3RpY2UKICAgICB0aGF0IHNheXMgdGhhdCB0aGUgRG9jdW1lbnQgaXMgcmVsZWFzZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQQogICAgIEZyb250LUNvdmVyIFRleHQgbWF5IGJlIGF0IG1vc3QgNSB3b3JkcywgYW5kIGEgQmFjay1Db3ZlciBUZXh0IG1heQogICAgIGJlIGF0IG1vc3QgMjUgd29yZHMuCgogICAgIEEgIlRyYW5zcGFyZW50IiBjb3B5IG9mIHRoZSBEb2N1bWVudCBtZWFucyBhIG1hY2hpbmUtcmVhZGFibGUgY29weSwKICAgICByZXByZXNlbnRlZCBpbiBhIGZvcm1hdCB3aG9zZSBzcGVjaWZpY2F0aW9uIGlzIGF2YWlsYWJsZSB0byB0aGUKICAgICBnZW5lcmFsIHB1YmxpYywgdGhhdCBpcyBzdWl0YWJsZSBmb3IgcmV2aXNpbmcgdGhlIGRvY3VtZW50CiAgICAgc3RyYWlnaHRmb3J3YXJkbHkgd2l0aCBnZW5lcmljIHRleHQgZWRpdG9ycyBvciAoZm9yIGltYWdlcyBjb21wb3NlZAogICAgIG9mIHBpeGVscykgZ2VuZXJpYyBwYWludCBwcm9ncmFtcyBvciAoZm9yIGRyYXdpbmdzKSBzb21lIHdpZGVseQogICAgIGF2YWlsYWJsZSBkcmF3aW5nIGVkaXRvciwgYW5kIHRoYXQgaXMgc3VpdGFibGUgZm9yIGlucHV0IHRvIHRleHQKICAgICBmb3JtYXR0ZXJzIG9yIGZvciBhdXRvbWF0aWMgdHJhbnNsYXRpb24gdG8gYSB2YXJpZXR5IG9mIGZvcm1hdHMKICAgICBzdWl0YWJsZSBmb3IgaW5wdXQgdG8gdGV4dCBmb3JtYXR0ZXJzLiAgQSBjb3B5IG1hZGUgaW4gYW4gb3RoZXJ3aXNlCiAgICAgVHJhbnNwYXJlbnQgZmlsZSBmb3JtYXQgd2hvc2UgbWFya3VwLCBvciBhYnNlbmNlIG9mIG1hcmt1cCwgaGFzCiAgICAgYmVlbiBhcnJhbmdlZCB0byB0aHdhcnQgb3IgZGlzY291cmFnZSBzdWJzZXF1ZW50IG1vZGlmaWNhdGlvbiBieQogICAgIHJlYWRlcnMgaXMgbm90IFRyYW5zcGFyZW50LiAgQW4gaW1hZ2UgZm9ybWF0IGlzIG5vdCBUcmFuc3BhcmVudCBpZgogICAgIHVzZWQgZm9yIGFueSBzdWJzdGFudGlhbCBhbW91bnQgb2YgdGV4dC4gIEEgY29weSB0aGF0IGlzIG5vdAogICAgICJUcmFuc3BhcmVudCIgaXMgY2FsbGVkICJPcGFxdWUiLgoKICAgICBFeGFtcGxlcyBvZiBzdWl0YWJsZSBmb3JtYXRzIGZvciBUcmFuc3BhcmVudCBjb3BpZXMgaW5jbHVkZSBwbGFpbgogICAgIEFTQ0lJIHdpdGhvdXQgbWFya3VwLCBUZXhpbmZvIGlucHV0IGZvcm1hdCwgTGFUZVggaW5wdXQgZm9ybWF0LAogICAgIFNHTUwgb3IgWE1MIHVzaW5nIGEgcHVibGljbHkgYXZhaWxhYmxlIERURCwgYW5kIHN0YW5kYXJkLWNvbmZvcm1pbmcKICAgICBzaW1wbGUgSFRNTCwgUG9zdFNjcmlwdCBvciBQREYgZGVzaWduZWQgZm9yIGh1bWFuIG1vZGlmaWNhdGlvbi4KICAgICBFeGFtcGxlcyBvZiB0cmFuc3BhcmVudCBpbWFnZSBmb3JtYXRzIGluY2x1ZGUgUE5HLCBYQ0YgYW5kIEpQRy4KICAgICBPcGFxdWUgZm9ybWF0cyBpbmNsdWRlIHByb3ByaWV0YXJ5IGZvcm1hdHMgdGhhdCBjYW4gYmUgcmVhZCBhbmQKICAgICBlZGl0ZWQgb25seSBieSBwcm9wcmlldGFyeSB3b3JkIHByb2Nlc3NvcnMsIFNHTUwgb3IgWE1MIGZvciB3aGljaAogICAgIHRoZSBEVEQgYW5kL29yIHByb2Nlc3NpbmcgdG9vbHMgYXJlIG5vdCBnZW5lcmFsbHkgYXZhaWxhYmxlLCBhbmQKICAgICB0aGUgbWFjaGluZS1nZW5lcmF0ZWQgSFRNTCwgUG9zdFNjcmlwdCBvciBQREYgcHJvZHVjZWQgYnkgc29tZSB3b3JkCiAgICAgcHJvY2Vzc29ycyBmb3Igb3V0cHV0IHB1cnBvc2VzIG9ubHkuCgogICAgIFRoZSAiVGl0bGUgUGFnZSIgbWVhbnMsIGZvciBhIHByaW50ZWQgYm9vaywgdGhlIHRpdGxlIHBhZ2UgaXRzZWxmLAogICAgIHBsdXMgc3VjaCBmb2xsb3dpbmcgcGFnZXMgYXMgYXJlIG5lZWRlZCB0byBob2xkLCBsZWdpYmx5LCB0aGUKICAgICBtYXRlcmlhbCB0aGlzIExpY2Vuc2UgcmVxdWlyZXMgdG8gYXBwZWFyIGluIHRoZSB0aXRsZSBwYWdlLiAgRm9yCiAgICAgd29ya3MgaW4gZm9ybWF0cyB3aGljaCBkbyBub3QgaGF2ZSBhbnkgdGl0bGUgcGFnZSBhcyBzdWNoLCAiVGl0bGUKICAgICBQYWdlIiBtZWFucyB0aGUgdGV4dCBuZWFyIHRoZSBtb3N0IHByb21pbmVudCBhcHBlYXJhbmNlIG9mIHRoZQogICAgIHdvcmsncyB0aXRsZSwgcHJlY2VkaW5nIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGJvZHkgb2YgdGhlIHRleHQuCgogICAgIEEgc2VjdGlvbiAiRW50aXRsZWQgWFlaIiBtZWFucyBhIG5hbWVkIHN1YnVuaXQgb2YgdGhlIERvY3VtZW50CiAgICAgd2hvc2UgdGl0bGUgZWl0aGVyIGlzIHByZWNpc2VseSBYWVogb3IgY29udGFpbnMgWFlaIGluIHBhcmVudGhlc2VzCiAgICAgZm9sbG93aW5nIHRleHQgdGhhdCB0cmFuc2xhdGVzIFhZWiBpbiBhbm90aGVyIGxhbmd1YWdlLiAgKEhlcmUgWFlaCiAgICAgc3RhbmRzIGZvciBhIHNwZWNpZmljIHNlY3Rpb24gbmFtZSBtZW50aW9uZWQgYmVsb3csIHN1Y2ggYXMKICAgICAiQWNrbm93bGVkZ2VtZW50cyIsICJEZWRpY2F0aW9ucyIsICJFbmRvcnNlbWVudHMiLCBvciAiSGlzdG9yeSIuKQogICAgIFRvICJQcmVzZXJ2ZSB0aGUgVGl0bGUiIG9mIHN1Y2ggYSBzZWN0aW9uIHdoZW4geW91IG1vZGlmeSB0aGUKICAgICBEb2N1bWVudCBtZWFucyB0aGF0IGl0IHJlbWFpbnMgYSBzZWN0aW9uICJFbnRpdGxlZCBYWVoiIGFjY29yZGluZwogICAgIHRvIHRoaXMgZGVmaW5pdGlvbi4KCiAgICAgVGhlIERvY3VtZW50IG1heSBpbmNsdWRlIFdhcnJhbnR5IERpc2NsYWltZXJzIG5leHQgdG8gdGhlIG5vdGljZQogICAgIHdoaWNoIHN0YXRlcyB0aGF0IHRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIHRoZSBEb2N1bWVudC4gIFRoZXNlCiAgICAgV2FycmFudHkgRGlzY2xhaW1lcnMgYXJlIGNvbnNpZGVyZWQgdG8gYmUgaW5jbHVkZWQgYnkgcmVmZXJlbmNlIGluCiAgICAgdGhpcyBMaWNlbnNlLCBidXQgb25seSBhcyByZWdhcmRzIGRpc2NsYWltaW5nIHdhcnJhbnRpZXM6IGFueSBvdGhlcgogICAgIGltcGxpY2F0aW9uIHRoYXQgdGhlc2UgV2FycmFudHkgRGlzY2xhaW1lcnMgbWF5IGhhdmUgaXMgdm9pZCBhbmQKICAgICBoYXMgbm8gZWZmZWN0IG9uIHRoZSBtZWFuaW5nIG9mIHRoaXMgTGljZW5zZS4KCiAgMi4gVkVSQkFUSU0gQ09QWUlORwoKICAgICBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIERvY3VtZW50IGluIGFueSBtZWRpdW0sIGVpdGhlcgogICAgIGNvbW1lcmNpYWxseSBvciBub25jb21tZXJjaWFsbHksIHByb3ZpZGVkIHRoYXQgdGhpcyBMaWNlbnNlLCB0aGUKICAgICBjb3B5cmlnaHQgbm90aWNlcywgYW5kIHRoZSBsaWNlbnNlIG5vdGljZSBzYXlpbmcgdGhpcyBMaWNlbnNlCiAgICAgYXBwbGllcyB0byB0aGUgRG9jdW1lbnQgYXJlIHJlcHJvZHVjZWQgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgeW91CiAgICAgYWRkIG5vIG90aGVyIGNvbmRpdGlvbnMgd2hhdHNvZXZlciB0byB0aG9zZSBvZiB0aGlzIExpY2Vuc2UuICBZb3UKICAgICBtYXkgbm90IHVzZSB0ZWNobmljYWwgbWVhc3VyZXMgdG8gb2JzdHJ1Y3Qgb3IgY29udHJvbCB0aGUgcmVhZGluZwogICAgIG9yIGZ1cnRoZXIgY29weWluZyBvZiB0aGUgY29waWVzIHlvdSBtYWtlIG9yIGRpc3RyaWJ1dGUuICBIb3dldmVyLAogICAgIHlvdSBtYXkgYWNjZXB0IGNvbXBlbnNhdGlvbiBpbiBleGNoYW5nZSBmb3IgY29waWVzLiAgSWYgeW91CiAgICAgZGlzdHJpYnV0ZSBhIGxhcmdlIGVub3VnaCBudW1iZXIgb2YgY29waWVzIHlvdSBtdXN0IGFsc28gZm9sbG93IHRoZQogICAgIGNvbmRpdGlvbnMgaW4gc2VjdGlvbiAzLgoKICAgICBZb3UgbWF5IGFsc28gbGVuZCBjb3BpZXMsIHVuZGVyIHRoZSBzYW1lIGNvbmRpdGlvbnMgc3RhdGVkIGFib3ZlLAogICAgIGFuZCB5b3UgbWF5IHB1YmxpY2x5IGRpc3BsYXkgY29waWVzLgoKICAzLiBDT1BZSU5HIElOIFFVQU5USVRZCgogICAgIElmIHlvdSBwdWJsaXNoIHByaW50ZWQgY29waWVzIChvciBjb3BpZXMgaW4gbWVkaWEgdGhhdCBjb21tb25seQogICAgIGhhdmUgcHJpbnRlZCBjb3ZlcnMpIG9mIHRoZSBEb2N1bWVudCwgbnVtYmVyaW5nIG1vcmUgdGhhbiAxMDAsIGFuZAogICAgIHRoZSBEb2N1bWVudCdzIGxpY2Vuc2Ugbm90aWNlIHJlcXVpcmVzIENvdmVyIFRleHRzLCB5b3UgbXVzdAogICAgIGVuY2xvc2UgdGhlIGNvcGllcyBpbiBjb3ZlcnMgdGhhdCBjYXJyeSwgY2xlYXJseSBhbmQgbGVnaWJseSwgYWxsCiAgICAgdGhlc2UgQ292ZXIgVGV4dHM6IEZyb250LUNvdmVyIFRleHRzIG9uIHRoZSBmcm9udCBjb3ZlciwgYW5kCiAgICAgQmFjay1Db3ZlciBUZXh0cyBvbiB0aGUgYmFjayBjb3Zlci4gIEJvdGggY292ZXJzIG11c3QgYWxzbyBjbGVhcmx5CiAgICAgYW5kIGxlZ2libHkgaWRlbnRpZnkgeW91IGFzIHRoZSBwdWJsaXNoZXIgb2YgdGhlc2UgY29waWVzLiAgVGhlCiAgICAgZnJvbnQgY292ZXIgbXVzdCBwcmVzZW50IHRoZSBmdWxsIHRpdGxlIHdpdGggYWxsIHdvcmRzIG9mIHRoZSB0aXRsZQogICAgIGVxdWFsbHkgcHJvbWluZW50IGFuZCB2aXNpYmxlLiAgWW91IG1heSBhZGQgb3RoZXIgbWF0ZXJpYWwgb24gdGhlCiAgICAgY292ZXJzIGluIGFkZGl0aW9uLiAgQ29weWluZyB3aXRoIGNoYW5nZXMgbGltaXRlZCB0byB0aGUgY292ZXJzLCBhcwogICAgIGxvbmcgYXMgdGhleSBwcmVzZXJ2ZSB0aGUgdGl0bGUgb2YgdGhlIERvY3VtZW50IGFuZCBzYXRpc2Z5IHRoZXNlCiAgICAgY29uZGl0aW9ucywgY2FuIGJlIHRyZWF0ZWQgYXMgdmVyYmF0aW0gY29weWluZyBpbiBvdGhlciByZXNwZWN0cy4KCiAgICAgSWYgdGhlIHJlcXVpcmVkIHRleHRzIGZvciBlaXRoZXIgY292ZXIgYXJlIHRvbyB2b2x1bWlub3VzIHRvIGZpdAogICAgIGxlZ2libHksIHlvdSBzaG91bGQgcHV0IHRoZSBmaXJzdCBvbmVzIGxpc3RlZCAoYXMgbWFueSBhcyBmaXQKICAgICByZWFzb25hYmx5KSBvbiB0aGUgYWN0dWFsIGNvdmVyLCBhbmQgY29udGludWUgdGhlIHJlc3Qgb250bwogICAgIGFkamFjZW50IHBhZ2VzLgoKICAgICBJZiB5b3UgcHVibGlzaCBvciBkaXN0cmlidXRlIE9wYXF1ZSBjb3BpZXMgb2YgdGhlIERvY3VtZW50CiAgICAgbnVtYmVyaW5nIG1vcmUgdGhhbiAxMDAsIHlvdSBtdXN0IGVpdGhlciBpbmNsdWRlIGEgbWFjaGluZS1yZWFkYWJsZQogICAgIFRyYW5zcGFyZW50IGNvcHkgYWxvbmcgd2l0aCBlYWNoIE9wYXF1ZSBjb3B5LCBvciBzdGF0ZSBpbiBvciB3aXRoCiAgICAgZWFjaCBPcGFxdWUgY29weSBhIGNvbXB1dGVyLW5ldHdvcmsgbG9jYXRpb24gZnJvbSB3aGljaCB0aGUgZ2VuZXJhbAogICAgIG5ldHdvcmstdXNpbmcgcHVibGljIGhhcyBhY2Nlc3MgdG8gZG93bmxvYWQgdXNpbmcgcHVibGljLXN0YW5kYXJkCiAgICAgbmV0d29yayBwcm90b2NvbHMgYSBjb21wbGV0ZSBUcmFuc3BhcmVudCBjb3B5IG9mIHRoZSBEb2N1bWVudCwgZnJlZQogICAgIG9mIGFkZGVkIG1hdGVyaWFsLiAgSWYgeW91IHVzZSB0aGUgbGF0dGVyIG9wdGlvbiwgeW91IG11c3QgdGFrZQogICAgIHJlYXNvbmFibHkgcHJ1ZGVudCBzdGVwcywgd2hlbiB5b3UgYmVnaW4gZGlzdHJpYnV0aW9uIG9mIE9wYXF1ZQogICAgIGNvcGllcyBpbiBxdWFudGl0eSwgdG8gZW5zdXJlIHRoYXQgdGhpcyBUcmFuc3BhcmVudCBjb3B5IHdpbGwKICAgICByZW1haW4gdGh1cyBhY2Nlc3NpYmxlIGF0IHRoZSBzdGF0ZWQgbG9jYXRpb24gdW50aWwgYXQgbGVhc3Qgb25lCiAgICAgeWVhciBhZnRlciB0aGUgbGFzdCB0aW1lIHlvdSBkaXN0cmlidXRlIGFuIE9wYXF1ZSBjb3B5IChkaXJlY3RseSBvcgogICAgIHRocm91Z2ggeW91ciBhZ2VudHMgb3IgcmV0YWlsZXJzKSBvZiB0aGF0IGVkaXRpb24gdG8gdGhlIHB1YmxpYy4KCiAgICAgSXQgaXMgcmVxdWVzdGVkLCBidXQgbm90IHJlcXVpcmVkLCB0aGF0IHlvdSBjb250YWN0IHRoZSBhdXRob3JzIG9mCiAgICAgdGhlIERvY3VtZW50IHdlbGwgYmVmb3JlIHJlZGlzdHJpYnV0aW5nIGFueSBsYXJnZSBudW1iZXIgb2YgY29waWVzLAogICAgIHRvIGdpdmUgdGhlbSBhIGNoYW5jZSB0byBwcm92aWRlIHlvdSB3aXRoIGFuIHVwZGF0ZWQgdmVyc2lvbiBvZiB0aGUKICAgICBEb2N1bWVudC4KCiAgNC4gTU9ESUZJQ0FUSU9OUwoKICAgICBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgYSBNb2RpZmllZCBWZXJzaW9uIG9mIHRoZSBEb2N1bWVudAogICAgIHVuZGVyIHRoZSBjb25kaXRpb25zIG9mIHNlY3Rpb25zIDIgYW5kIDMgYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91CiAgICAgcmVsZWFzZSB0aGUgTW9kaWZpZWQgVmVyc2lvbiB1bmRlciBwcmVjaXNlbHkgdGhpcyBMaWNlbnNlLCB3aXRoIHRoZQogICAgIE1vZGlmaWVkIFZlcnNpb24gZmlsbGluZyB0aGUgcm9sZSBvZiB0aGUgRG9jdW1lbnQsIHRodXMgbGljZW5zaW5nCiAgICAgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gb2YgdGhlIE1vZGlmaWVkIFZlcnNpb24gdG8gd2hvZXZlcgogICAgIHBvc3Nlc3NlcyBhIGNvcHkgb2YgaXQuICBJbiBhZGRpdGlvbiwgeW91IG11c3QgZG8gdGhlc2UgdGhpbmdzIGluCiAgICAgdGhlIE1vZGlmaWVkIFZlcnNpb246CgogICAgICAgQS4gVXNlIGluIHRoZSBUaXRsZSBQYWdlIChhbmQgb24gdGhlIGNvdmVycywgaWYgYW55KSBhIHRpdGxlCiAgICAgICAgICBkaXN0aW5jdCBmcm9tIHRoYXQgb2YgdGhlIERvY3VtZW50LCBhbmQgZnJvbSB0aG9zZSBvZiBwcmV2aW91cwogICAgICAgICAgdmVyc2lvbnMgKHdoaWNoIHNob3VsZCwgaWYgdGhlcmUgd2VyZSBhbnksIGJlIGxpc3RlZCBpbiB0aGUKICAgICAgICAgIEhpc3Rvcnkgc2VjdGlvbiBvZiB0aGUgRG9jdW1lbnQpLiAgWW91IG1heSB1c2UgdGhlIHNhbWUgdGl0bGUKICAgICAgICAgIGFzIGEgcHJldmlvdXMgdmVyc2lvbiBpZiB0aGUgb3JpZ2luYWwgcHVibGlzaGVyIG9mIHRoYXQKICAgICAgICAgIHZlcnNpb24gZ2l2ZXMgcGVybWlzc2lvbi4KCiAgICAgICBCLiBMaXN0IG9uIHRoZSBUaXRsZSBQYWdlLCBhcyBhdXRob3JzLCBvbmUgb3IgbW9yZSBwZXJzb25zIG9yCiAgICAgICAgICBlbnRpdGllcyByZXNwb25zaWJsZSBmb3IgYXV0aG9yc2hpcCBvZiB0aGUgbW9kaWZpY2F0aW9ucyBpbgogICAgICAgICAgdGhlIE1vZGlmaWVkIFZlcnNpb24sIHRvZ2V0aGVyIHdpdGggYXQgbGVhc3QgZml2ZSBvZiB0aGUKICAgICAgICAgIHByaW5jaXBhbCBhdXRob3JzIG9mIHRoZSBEb2N1bWVudCAoYWxsIG9mIGl0cyBwcmluY2lwYWwKICAgICAgICAgIGF1dGhvcnMsIGlmIGl0IGhhcyBmZXdlciB0aGFuIGZpdmUpLCB1bmxlc3MgdGhleSByZWxlYXNlIHlvdQogICAgICAgICAgZnJvbSB0aGlzIHJlcXVpcmVtZW50LgoKICAgICAgIEMuIFN0YXRlIG9uIHRoZSBUaXRsZSBwYWdlIHRoZSBuYW1lIG9mIHRoZSBwdWJsaXNoZXIgb2YgdGhlCiAgICAgICAgICBNb2RpZmllZCBWZXJzaW9uLCBhcyB0aGUgcHVibGlzaGVyLgoKICAgICAgIEQuIFByZXNlcnZlIGFsbCB0aGUgY29weXJpZ2h0IG5vdGljZXMgb2YgdGhlIERvY3VtZW50LgoKICAgICAgIEUuIEFkZCBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGZvciB5b3VyIG1vZGlmaWNhdGlvbnMKICAgICAgICAgIGFkamFjZW50IHRvIHRoZSBvdGhlciBjb3B5cmlnaHQgbm90aWNlcy4KCiAgICAgICBGLiBJbmNsdWRlLCBpbW1lZGlhdGVseSBhZnRlciB0aGUgY29weXJpZ2h0IG5vdGljZXMsIGEgbGljZW5zZQogICAgICAgICAgbm90aWNlIGdpdmluZyB0aGUgcHVibGljIHBlcm1pc3Npb24gdG8gdXNlIHRoZSBNb2RpZmllZAogICAgICAgICAgVmVyc2lvbiB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBpbiB0aGUgZm9ybSBzaG93biBpbgogICAgICAgICAgdGhlIEFkZGVuZHVtIGJlbG93LgoKICAgICAgIEcuIFByZXNlcnZlIGluIHRoYXQgbGljZW5zZSBub3RpY2UgdGhlIGZ1bGwgbGlzdHMgb2YgSW52YXJpYW50CiAgICAgICAgICBTZWN0aW9ucyBhbmQgcmVxdWlyZWQgQ292ZXIgVGV4dHMgZ2l2ZW4gaW4gdGhlIERvY3VtZW50J3MKICAgICAgICAgIGxpY2Vuc2Ugbm90aWNlLgoKICAgICAgIEguIEluY2x1ZGUgYW4gdW5hbHRlcmVkIGNvcHkgb2YgdGhpcyBMaWNlbnNlLgoKICAgICAgIEkuIFByZXNlcnZlIHRoZSBzZWN0aW9uIEVudGl0bGVkICJIaXN0b3J5IiwgUHJlc2VydmUgaXRzIFRpdGxlLAogICAgICAgICAgYW5kIGFkZCB0byBpdCBhbiBpdGVtIHN0YXRpbmcgYXQgbGVhc3QgdGhlIHRpdGxlLCB5ZWFyLCBuZXcKICAgICAgICAgIGF1dGhvcnMsIGFuZCBwdWJsaXNoZXIgb2YgdGhlIE1vZGlmaWVkIFZlcnNpb24gYXMgZ2l2ZW4gb24gdGhlCiAgICAgICAgICBUaXRsZSBQYWdlLiAgSWYgdGhlcmUgaXMgbm8gc2VjdGlvbiBFbnRpdGxlZCAiSGlzdG9yeSIgaW4gdGhlCiAgICAgICAgICBEb2N1bWVudCwgY3JlYXRlIG9uZSBzdGF0aW5nIHRoZSB0aXRsZSwgeWVhciwgYXV0aG9ycywgYW5kCiAgICAgICAgICBwdWJsaXNoZXIgb2YgdGhlIERvY3VtZW50IGFzIGdpdmVuIG9uIGl0cyBUaXRsZSBQYWdlLCB0aGVuIGFkZAogICAgICAgICAgYW4gaXRlbSBkZXNjcmliaW5nIHRoZSBNb2RpZmllZCBWZXJzaW9uIGFzIHN0YXRlZCBpbiB0aGUKICAgICAgICAgIHByZXZpb3VzIHNlbnRlbmNlLgoKICAgICAgIEouIFByZXNlcnZlIHRoZSBuZXR3b3JrIGxvY2F0aW9uLCBpZiBhbnksIGdpdmVuIGluIHRoZSBEb2N1bWVudAogICAgICAgICAgZm9yIHB1YmxpYyBhY2Nlc3MgdG8gYSBUcmFuc3BhcmVudCBjb3B5IG9mIHRoZSBEb2N1bWVudCwgYW5kCiAgICAgICAgICBsaWtld2lzZSB0aGUgbmV0d29yayBsb2NhdGlvbnMgZ2l2ZW4gaW4gdGhlIERvY3VtZW50IGZvcgogICAgICAgICAgcHJldmlvdXMgdmVyc2lvbnMgaXQgd2FzIGJhc2VkIG9uLiAgVGhlc2UgbWF5IGJlIHBsYWNlZCBpbiB0aGUKICAgICAgICAgICJIaXN0b3J5IiBzZWN0aW9uLiAgWW91IG1heSBvbWl0IGEgbmV0d29yayBsb2NhdGlvbiBmb3IgYSB3b3JrCiAgICAgICAgICB0aGF0IHdhcyBwdWJsaXNoZWQgYXQgbGVhc3QgZm91ciB5ZWFycyBiZWZvcmUgdGhlIERvY3VtZW50CiAgICAgICAgICBpdHNlbGYsIG9yIGlmIHRoZSBvcmlnaW5hbCBwdWJsaXNoZXIgb2YgdGhlIHZlcnNpb24gaXQgcmVmZXJzCiAgICAgICAgICB0byBnaXZlcyBwZXJtaXNzaW9uLgoKICAgICAgIEsuIEZvciBhbnkgc2VjdGlvbiBFbnRpdGxlZCAiQWNrbm93bGVkZ2VtZW50cyIgb3IgIkRlZGljYXRpb25zIiwKICAgICAgICAgIFByZXNlcnZlIHRoZSBUaXRsZSBvZiB0aGUgc2VjdGlvbiwgYW5kIHByZXNlcnZlIGluIHRoZSBzZWN0aW9uCiAgICAgICAgICBhbGwgdGhlIHN1YnN0YW5jZSBhbmQgdG9uZSBvZiBlYWNoIG9mIHRoZSBjb250cmlidXRvcgogICAgICAgICAgYWNrbm93bGVkZ2VtZW50cyBhbmQvb3IgZGVkaWNhdGlvbnMgZ2l2ZW4gdGhlcmVpbi4KCiAgICAgICBMLiBQcmVzZXJ2ZSBhbGwgdGhlIEludmFyaWFudCBTZWN0aW9ucyBvZiB0aGUgRG9jdW1lbnQsIHVuYWx0ZXJlZAogICAgICAgICAgaW4gdGhlaXIgdGV4dCBhbmQgaW4gdGhlaXIgdGl0bGVzLiAgU2VjdGlvbiBudW1iZXJzIG9yIHRoZQogICAgICAgICAgZXF1aXZhbGVudCBhcmUgbm90IGNvbnNpZGVyZWQgcGFydCBvZiB0aGUgc2VjdGlvbiB0aXRsZXMuCgogICAgICAgTS4gRGVsZXRlIGFueSBzZWN0aW9uIEVudGl0bGVkICJFbmRvcnNlbWVudHMiLiAgU3VjaCBhIHNlY3Rpb24KICAgICAgICAgIG1heSBub3QgYmUgaW5jbHVkZWQgaW4gdGhlIE1vZGlmaWVkIFZlcnNpb24uCgogICAgICAgTi4gRG8gbm90IHJldGl0bGUgYW55IGV4aXN0aW5nIHNlY3Rpb24gdG8gYmUgRW50aXRsZWQKICAgICAgICAgICJFbmRvcnNlbWVudHMiIG9yIHRvIGNvbmZsaWN0IGluIHRpdGxlIHdpdGggYW55IEludmFyaWFudAogICAgICAgICAgU2VjdGlvbi4KCiAgICAgICBPLiBQcmVzZXJ2ZSBhbnkgV2FycmFudHkgRGlzY2xhaW1lcnMuCgogICAgIElmIHRoZSBNb2RpZmllZCBWZXJzaW9uIGluY2x1ZGVzIG5ldyBmcm9udC1tYXR0ZXIgc2VjdGlvbnMgb3IKICAgICBhcHBlbmRpY2VzIHRoYXQgcXVhbGlmeSBhcyBTZWNvbmRhcnkgU2VjdGlvbnMgYW5kIGNvbnRhaW4gbm8KICAgICBtYXRlcmlhbCBjb3BpZWQgZnJvbSB0aGUgRG9jdW1lbnQsIHlvdSBtYXkgYXQgeW91ciBvcHRpb24gZGVzaWduYXRlCiAgICAgc29tZSBvciBhbGwgb2YgdGhlc2Ugc2VjdGlvbnMgYXMgaW52YXJpYW50LiAgVG8gZG8gdGhpcywgYWRkIHRoZWlyCiAgICAgdGl0bGVzIHRvIHRoZSBsaXN0IG9mIEludmFyaWFudCBTZWN0aW9ucyBpbiB0aGUgTW9kaWZpZWQgVmVyc2lvbidzCiAgICAgbGljZW5zZSBub3RpY2UuICBUaGVzZSB0aXRsZXMgbXVzdCBiZSBkaXN0aW5jdCBmcm9tIGFueSBvdGhlcgogICAgIHNlY3Rpb24gdGl0bGVzLgoKICAgICBZb3UgbWF5IGFkZCBhIHNlY3Rpb24gRW50aXRsZWQgIkVuZG9yc2VtZW50cyIsIHByb3ZpZGVkIGl0IGNvbnRhaW5zCiAgICAgbm90aGluZyBidXQgZW5kb3JzZW1lbnRzIG9mIHlvdXIgTW9kaWZpZWQgVmVyc2lvbiBieSB2YXJpb3VzCiAgICAgcGFydGllcy0tZm9yIGV4YW1wbGUsIHN0YXRlbWVudHMgb2YgcGVlciByZXZpZXcgb3IgdGhhdCB0aGUgdGV4dAogICAgIGhhcyBiZWVuIGFwcHJvdmVkIGJ5IGFuIG9yZ2FuaXphdGlvbiBhcyB0aGUgYXV0aG9yaXRhdGl2ZQogICAgIGRlZmluaXRpb24gb2YgYSBzdGFuZGFyZC4KCiAgICAgWW91IG1heSBhZGQgYSBwYXNzYWdlIG9mIHVwIHRvIGZpdmUgd29yZHMgYXMgYSBGcm9udC1Db3ZlciBUZXh0LAogICAgIGFuZCBhIHBhc3NhZ2Ugb2YgdXAgdG8gMjUgd29yZHMgYXMgYSBCYWNrLUNvdmVyIFRleHQsIHRvIHRoZSBlbmQgb2YKICAgICB0aGUgbGlzdCBvZiBDb3ZlciBUZXh0cyBpbiB0aGUgTW9kaWZpZWQgVmVyc2lvbi4gIE9ubHkgb25lIHBhc3NhZ2UKICAgICBvZiBGcm9udC1Db3ZlciBUZXh0IGFuZCBvbmUgb2YgQmFjay1Db3ZlciBUZXh0IG1heSBiZSBhZGRlZCBieSAob3IKICAgICB0aHJvdWdoIGFycmFuZ2VtZW50cyBtYWRlIGJ5KSBhbnkgb25lIGVudGl0eS4gIElmIHRoZSBEb2N1bWVudAogICAgIGFscmVhZHkgaW5jbHVkZXMgYSBjb3ZlciB0ZXh0IGZvciB0aGUgc2FtZSBjb3ZlciwgcHJldmlvdXNseSBhZGRlZAogICAgIGJ5IHlvdSBvciBieSBhcnJhbmdlbWVudCBtYWRlIGJ5IHRoZSBzYW1lIGVudGl0eSB5b3UgYXJlIGFjdGluZyBvbgogICAgIGJlaGFsZiBvZiwgeW91IG1heSBub3QgYWRkIGFub3RoZXI7IGJ1dCB5b3UgbWF5IHJlcGxhY2UgdGhlIG9sZAogICAgIG9uZSwgb24gZXhwbGljaXQgcGVybWlzc2lvbiBmcm9tIHRoZSBwcmV2aW91cyBwdWJsaXNoZXIgdGhhdCBhZGRlZAogICAgIHRoZSBvbGQgb25lLgoKICAgICBUaGUgYXV0aG9yKHMpIGFuZCBwdWJsaXNoZXIocykgb2YgdGhlIERvY3VtZW50IGRvIG5vdCBieSB0aGlzCiAgICAgTGljZW5zZSBnaXZlIHBlcm1pc3Npb24gdG8gdXNlIHRoZWlyIG5hbWVzIGZvciBwdWJsaWNpdHkgZm9yIG9yIHRvCiAgICAgYXNzZXJ0IG9yIGltcGx5IGVuZG9yc2VtZW50IG9mIGFueSBNb2RpZmllZCBWZXJzaW9uLgoKICA1LiBDT01CSU5JTkcgRE9DVU1FTlRTCgogICAgIFlvdSBtYXkgY29tYmluZSB0aGUgRG9jdW1lbnQgd2l0aCBvdGhlciBkb2N1bWVudHMgcmVsZWFzZWQgdW5kZXIKICAgICB0aGlzIExpY2Vuc2UsIHVuZGVyIHRoZSB0ZXJtcyBkZWZpbmVkIGluIHNlY3Rpb24gNCBhYm92ZSBmb3IKICAgICBtb2RpZmllZCB2ZXJzaW9ucywgcHJvdmlkZWQgdGhhdCB5b3UgaW5jbHVkZSBpbiB0aGUgY29tYmluYXRpb24gYWxsCiAgICAgb2YgdGhlIEludmFyaWFudCBTZWN0aW9ucyBvZiBhbGwgb2YgdGhlIG9yaWdpbmFsIGRvY3VtZW50cywKICAgICB1bm1vZGlmaWVkLCBhbmQgbGlzdCB0aGVtIGFsbCBhcyBJbnZhcmlhbnQgU2VjdGlvbnMgb2YgeW91cgogICAgIGNvbWJpbmVkIHdvcmsgaW4gaXRzIGxpY2Vuc2Ugbm90aWNlLCBhbmQgdGhhdCB5b3UgcHJlc2VydmUgYWxsCiAgICAgdGhlaXIgV2FycmFudHkgRGlzY2xhaW1lcnMuCgogICAgIFRoZSBjb21iaW5lZCB3b3JrIG5lZWQgb25seSBjb250YWluIG9uZSBjb3B5IG9mIHRoaXMgTGljZW5zZSwgYW5kCiAgICAgbXVsdGlwbGUgaWRlbnRpY2FsIEludmFyaWFudCBTZWN0aW9ucyBtYXkgYmUgcmVwbGFjZWQgd2l0aCBhIHNpbmdsZQogICAgIGNvcHkuICBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgSW52YXJpYW50IFNlY3Rpb25zIHdpdGggdGhlIHNhbWUgbmFtZQogICAgIGJ1dCBkaWZmZXJlbnQgY29udGVudHMsIG1ha2UgdGhlIHRpdGxlIG9mIGVhY2ggc3VjaCBzZWN0aW9uIHVuaXF1ZQogICAgIGJ5IGFkZGluZyBhdCB0aGUgZW5kIG9mIGl0LCBpbiBwYXJlbnRoZXNlcywgdGhlIG5hbWUgb2YgdGhlCiAgICAgb3JpZ2luYWwgYXV0aG9yIG9yIHB1Ymxpc2hlciBvZiB0aGF0IHNlY3Rpb24gaWYga25vd24sIG9yIGVsc2UgYQogICAgIHVuaXF1ZSBudW1iZXIuICBNYWtlIHRoZSBzYW1lIGFkanVzdG1lbnQgdG8gdGhlIHNlY3Rpb24gdGl0bGVzIGluCiAgICAgdGhlIGxpc3Qgb2YgSW52YXJpYW50IFNlY3Rpb25zIGluIHRoZSBsaWNlbnNlIG5vdGljZSBvZiB0aGUKICAgICBjb21iaW5lZCB3b3JrLgoKICAgICBJbiB0aGUgY29tYmluYXRpb24sIHlvdSBtdXN0IGNvbWJpbmUgYW55IHNlY3Rpb25zIEVudGl0bGVkCiAgICAgIkhpc3RvcnkiIGluIHRoZSB2YXJpb3VzIG9yaWdpbmFsIGRvY3VtZW50cywgZm9ybWluZyBvbmUgc2VjdGlvbgogICAgIEVudGl0bGVkICJIaXN0b3J5IjsgbGlrZXdpc2UgY29tYmluZSBhbnkgc2VjdGlvbnMgRW50aXRsZWQKICAgICAiQWNrbm93bGVkZ2VtZW50cyIsIGFuZCBhbnkgc2VjdGlvbnMgRW50aXRsZWQgIkRlZGljYXRpb25zIi4gIFlvdQogICAgIG11c3QgZGVsZXRlIGFsbCBzZWN0aW9ucyBFbnRpdGxlZCAiRW5kb3JzZW1lbnRzLiIKCiAgNi4gQ09MTEVDVElPTlMgT0YgRE9DVU1FTlRTCgogICAgIFlvdSBtYXkgbWFrZSBhIGNvbGxlY3Rpb24gY29uc2lzdGluZyBvZiB0aGUgRG9jdW1lbnQgYW5kIG90aGVyCiAgICAgZG9jdW1lbnRzIHJlbGVhc2VkIHVuZGVyIHRoaXMgTGljZW5zZSwgYW5kIHJlcGxhY2UgdGhlIGluZGl2aWR1YWwKICAgICBjb3BpZXMgb2YgdGhpcyBMaWNlbnNlIGluIHRoZSB2YXJpb3VzIGRvY3VtZW50cyB3aXRoIGEgc2luZ2xlIGNvcHkKICAgICB0aGF0IGlzIGluY2x1ZGVkIGluIHRoZSBjb2xsZWN0aW9uLCBwcm92aWRlZCB0aGF0IHlvdSBmb2xsb3cgdGhlCiAgICAgcnVsZXMgb2YgdGhpcyBMaWNlbnNlIGZvciB2ZXJiYXRpbSBjb3B5aW5nIG9mIGVhY2ggb2YgdGhlIGRvY3VtZW50cwogICAgIGluIGFsbCBvdGhlciByZXNwZWN0cy4KCiAgICAgWW91IG1heSBleHRyYWN0IGEgc2luZ2xlIGRvY3VtZW50IGZyb20gc3VjaCBhIGNvbGxlY3Rpb24sIGFuZAogICAgIGRpc3RyaWJ1dGUgaXQgaW5kaXZpZHVhbGx5IHVuZGVyIHRoaXMgTGljZW5zZSwgcHJvdmlkZWQgeW91IGluc2VydAogICAgIGEgY29weSBvZiB0aGlzIExpY2Vuc2UgaW50byB0aGUgZXh0cmFjdGVkIGRvY3VtZW50LCBhbmQgZm9sbG93IHRoaXMKICAgICBMaWNlbnNlIGluIGFsbCBvdGhlciByZXNwZWN0cyByZWdhcmRpbmcgdmVyYmF0aW0gY29weWluZyBvZiB0aGF0CiAgICAgZG9jdW1lbnQuCgogIDcuIEFHR1JFR0FUSU9OIFdJVEggSU5ERVBFTkRFTlQgV09SS1MKCiAgICAgQSBjb21waWxhdGlvbiBvZiB0aGUgRG9jdW1lbnQgb3IgaXRzIGRlcml2YXRpdmVzIHdpdGggb3RoZXIKICAgICBzZXBhcmF0ZSBhbmQgaW5kZXBlbmRlbnQgZG9jdW1lbnRzIG9yIHdvcmtzLCBpbiBvciBvbiBhIHZvbHVtZSBvZiBhCiAgICAgc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtLCBpcyBjYWxsZWQgYW4gImFnZ3JlZ2F0ZSIgaWYgdGhlCiAgICAgY29weXJpZ2h0IHJlc3VsdGluZyBmcm9tIHRoZSBjb21waWxhdGlvbiBpcyBub3QgdXNlZCB0byBsaW1pdCB0aGUKICAgICBsZWdhbCByaWdodHMgb2YgdGhlIGNvbXBpbGF0aW9uJ3MgdXNlcnMgYmV5b25kIHdoYXQgdGhlIGluZGl2aWR1YWwKICAgICB3b3JrcyBwZXJtaXQuICBXaGVuIHRoZSBEb2N1bWVudCBpcyBpbmNsdWRlZCBpbiBhbiBhZ2dyZWdhdGUsIHRoaXMKICAgICBMaWNlbnNlIGRvZXMgbm90IGFwcGx5IHRvIHRoZSBvdGhlciB3b3JrcyBpbiB0aGUgYWdncmVnYXRlIHdoaWNoCiAgICAgYXJlIG5vdCB0aGVtc2VsdmVzIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIERvY3VtZW50LgoKICAgICBJZiB0aGUgQ292ZXIgVGV4dCByZXF1aXJlbWVudCBvZiBzZWN0aW9uIDMgaXMgYXBwbGljYWJsZSB0byB0aGVzZQogICAgIGNvcGllcyBvZiB0aGUgRG9jdW1lbnQsIHRoZW4gaWYgdGhlIERvY3VtZW50IGlzIGxlc3MgdGhhbiBvbmUgaGFsZgogICAgIG9mIHRoZSBlbnRpcmUgYWdncmVnYXRlLCB0aGUgRG9jdW1lbnQncyBDb3ZlciBUZXh0cyBtYXkgYmUgcGxhY2VkCiAgICAgb24gY292ZXJzIHRoYXQgYnJhY2tldCB0aGUgRG9jdW1lbnQgd2l0aGluIHRoZSBhZ2dyZWdhdGUsIG9yIHRoZQogICAgIGVsZWN0cm9uaWMgZXF1aXZhbGVudCBvZiBjb3ZlcnMgaWYgdGhlIERvY3VtZW50IGlzIGluIGVsZWN0cm9uaWMKICAgICBmb3JtLiAgT3RoZXJ3aXNlIHRoZXkgbXVzdCBhcHBlYXIgb24gcHJpbnRlZCBjb3ZlcnMgdGhhdCBicmFja2V0CiAgICAgdGhlIHdob2xlIGFnZ3JlZ2F0ZS4KCiAgOC4gVFJBTlNMQVRJT04KCiAgICAgVHJhbnNsYXRpb24gaXMgY29uc2lkZXJlZCBhIGtpbmQgb2YgbW9kaWZpY2F0aW9uLCBzbyB5b3UgbWF5CiAgICAgZGlzdHJpYnV0ZSB0cmFuc2xhdGlvbnMgb2YgdGhlIERvY3VtZW50IHVuZGVyIHRoZSB0ZXJtcyBvZiBzZWN0aW9uCiAgICAgNC4gIFJlcGxhY2luZyBJbnZhcmlhbnQgU2VjdGlvbnMgd2l0aCB0cmFuc2xhdGlvbnMgcmVxdWlyZXMgc3BlY2lhbAogICAgIHBlcm1pc3Npb24gZnJvbSB0aGVpciBjb3B5cmlnaHQgaG9sZGVycywgYnV0IHlvdSBtYXkgaW5jbHVkZQogICAgIHRyYW5zbGF0aW9ucyBvZiBzb21lIG9yIGFsbCBJbnZhcmlhbnQgU2VjdGlvbnMgaW4gYWRkaXRpb24gdG8gdGhlCiAgICAgb3JpZ2luYWwgdmVyc2lvbnMgb2YgdGhlc2UgSW52YXJpYW50IFNlY3Rpb25zLiAgWW91IG1heSBpbmNsdWRlIGEKICAgICB0cmFuc2xhdGlvbiBvZiB0aGlzIExpY2Vuc2UsIGFuZCBhbGwgdGhlIGxpY2Vuc2Ugbm90aWNlcyBpbiB0aGUKICAgICBEb2N1bWVudCwgYW5kIGFueSBXYXJyYW50eSBEaXNjbGFpbWVycywgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbwogICAgIGluY2x1ZGUgdGhlIG9yaWdpbmFsIEVuZ2xpc2ggdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgYW5kIHRoZQogICAgIG9yaWdpbmFsIHZlcnNpb25zIG9mIHRob3NlIG5vdGljZXMgYW5kIGRpc2NsYWltZXJzLiAgSW4gY2FzZSBvZiBhCiAgICAgZGlzYWdyZWVtZW50IGJldHdlZW4gdGhlIHRyYW5zbGF0aW9uIGFuZCB0aGUgb3JpZ2luYWwgdmVyc2lvbiBvZgogICAgIHRoaXMgTGljZW5zZSBvciBhIG5vdGljZSBvciBkaXNjbGFpbWVyLCB0aGUgb3JpZ2luYWwgdmVyc2lvbiB3aWxsCiAgICAgcHJldmFpbC4KCiAgICAgSWYgYSBzZWN0aW9uIGluIHRoZSBEb2N1bWVudCBpcyBFbnRpdGxlZCAiQWNrbm93bGVkZ2VtZW50cyIsCiAgICAgIkRlZGljYXRpb25zIiwgb3IgIkhpc3RvcnkiLCB0aGUgcmVxdWlyZW1lbnQgKHNlY3Rpb24gNCkgdG8KICAgICBQcmVzZXJ2ZSBpdHMgVGl0bGUgKHNlY3Rpb24gMSkgd2lsbCB0eXBpY2FsbHkgcmVxdWlyZSBjaGFuZ2luZyB0aGUKICAgICBhY3R1YWwgdGl0bGUuCgogIDkuIFRFUk1JTkFUSU9OCgogICAgIFlvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgb3IgZGlzdHJpYnV0ZSB0aGUgRG9jdW1lbnQKICAgICBleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIGZvciB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkgb3RoZXIKICAgICBhdHRlbXB0IHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIHRoZSBEb2N1bWVudCBpcwogICAgIHZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMKICAgICBMaWNlbnNlLiAgSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMsIG9yIHJpZ2h0cywKICAgICBmcm9tIHlvdSB1bmRlciB0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkCiAgICAgc28gbG9uZyBhcyBzdWNoIHBhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KCiAgMTAuIEZVVFVSRSBSRVZJU0lPTlMgT0YgVEhJUyBMSUNFTlNFCgogICAgIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggbmV3LCByZXZpc2VkIHZlcnNpb25zIG9mCiAgICAgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIFN1Y2ggbmV3CiAgICAgdmVyc2lvbnMgd2lsbCBiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5CiAgICAgZGlmZmVyIGluIGRldGFpbCB0byBhZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4gIFNlZQogICAgIDxodHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvPi4KCiAgICAgRWFjaCB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbgogICAgIG51bWJlci4gIElmIHRoZSBEb2N1bWVudCBzcGVjaWZpZXMgdGhhdCBhIHBhcnRpY3VsYXIgbnVtYmVyZWQKICAgICB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSAib3IgYW55IGxhdGVyIHZlcnNpb24iIGFwcGxpZXMgdG8gaXQsIHlvdQogICAgIGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGVpdGhlciBvZgogICAgIHRoYXQgc3BlY2lmaWVkIHZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gdGhhdCBoYXMgYmVlbgogICAgIHB1Ymxpc2hlZCAobm90IGFzIGEgZHJhZnQpIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUKICAgICBEb2N1bWVudCBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBMaWNlbnNlLCB5b3UgbWF5CiAgICAgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIChub3QgYXMgYSBkcmFmdCkgYnkgdGhlIEZyZWUKICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLgoKQURERU5EVU06IEhvdyB0byB1c2UgdGhpcyBMaWNlbnNlIGZvciB5b3VyIGRvY3VtZW50cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpUbyB1c2UgdGhpcyBMaWNlbnNlIGluIGEgZG9jdW1lbnQgeW91IGhhdmUgd3JpdHRlbiwgaW5jbHVkZSBhIGNvcHkgb2YKdGhlIExpY2Vuc2UgaW4gdGhlIGRvY3VtZW50IGFuZCBwdXQgdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UKbm90aWNlcyBqdXN0IGFmdGVyIHRoZSB0aXRsZSBwYWdlOgoKICAgICAgIENvcHlyaWdodCAoQykgIFlFQVIgIFlPVVIgTkFNRS4KICAgICAgIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAogICAgICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4yCiAgICAgICBvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKICAgICAgIHdpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIG5vIEJhY2stQ292ZXIKICAgICAgIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkIGBgR05VCiAgICAgICBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgoKIElmIHlvdSBoYXZlIEludmFyaWFudCBTZWN0aW9ucywgRnJvbnQtQ292ZXIgVGV4dHMgYW5kIEJhY2stQ292ZXIgVGV4dHMsCnJlcGxhY2UgdGhlICJ3aXRoLi4uVGV4dHMuIiAgbGluZSB3aXRoIHRoaXM6CgogICAgICAgICB3aXRoIHRoZSBJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgTElTVCBUSEVJUiBUSVRMRVMsIHdpdGgKICAgICAgICAgdGhlIEZyb250LUNvdmVyIFRleHRzIGJlaW5nIExJU1QsIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzCiAgICAgICAgIGJlaW5nIExJU1QuCgogSWYgeW91IGhhdmUgSW52YXJpYW50IFNlY3Rpb25zIHdpdGhvdXQgQ292ZXIgVGV4dHMsIG9yIHNvbWUgb3RoZXIKY29tYmluYXRpb24gb2YgdGhlIHRocmVlLCBtZXJnZSB0aG9zZSB0d28gYWx0ZXJuYXRpdmVzIHRvIHN1aXQgdGhlCnNpdHVhdGlvbi4KCiBJZiB5b3VyIGRvY3VtZW50IGNvbnRhaW5zIG5vbnRyaXZpYWwgZXhhbXBsZXMgb2YgcHJvZ3JhbSBjb2RlLCB3ZQpyZWNvbW1lbmQgcmVsZWFzaW5nIHRoZXNlIGV4YW1wbGVzIGluIHBhcmFsbGVsIHVuZGVyIHlvdXIgY2hvaWNlIG9mIGZyZWUKc29mdHdhcmUgbGljZW5zZSwgc3VjaCBhcyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHRvIHBlcm1pdAp0aGVpciB1c2UgaW4gZnJlZSBzb2Z0d2FyZS4KCh8KRmlsZTogZ2NjaW50LmluZm8sICBOb2RlOiBDb250cmlidXRvcnMsICBOZXh0OiBPcHRpb24gSW5kZXgsICBQcmV2OiBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsICBVcDogVG9wCgpDb250cmlidXRvcnMgdG8gR0NDCioqKioqKioqKioqKioqKioqKioKClRoZSBHQ0MgcHJvamVjdCB3b3VsZCBsaWtlIHRvIHRoYW5rIGl0cyBtYW55IGNvbnRyaWJ1dG9ycy4gIFdpdGhvdXQgdGhlbQp0aGUgcHJvamVjdCB3b3VsZCBub3QgaGF2ZSBiZWVuIG5lYXJseSBhcyBzdWNjZXNzZnVsIGFzIGl0IGhhcyBiZWVuLgpBbnkgb21pc3Npb25zIGluIHRoaXMgbGlzdCBhcmUgYWNjaWRlbnRhbC4gIEZlZWwgZnJlZSB0byBjb250YWN0CjxsYXdAcmVkaGF0LmNvbT4gb3IgPGdlcmFsZEBwZmVpZmVyLmNvbT4gaWYgeW91IGhhdmUgYmVlbiBsZWZ0IG91dCBvcgpzb21lIG9mIHlvdXIgY29udHJpYnV0aW9ucyBhcmUgbm90IGxpc3RlZC4gIFBsZWFzZSBrZWVwIHRoaXMgbGlzdCBpbgphbHBoYWJldGljYWwgb3JkZXIuCgogICAqIEFuYWxvZyBEZXZpY2VzIGhlbHBlZCBpbXBsZW1lbnQgdGhlIHN1cHBvcnQgZm9yIGNvbXBsZXggZGF0YSB0eXBlcwogICAgIGFuZCBpdGVyYXRvcnMuCgogICAqIEpvaG4gRGF2aWQgQW5nbGluIGZvciB0aHJlYWRpbmctcmVsYXRlZCBmaXhlcyBhbmQgaW1wcm92ZW1lbnRzIHRvCiAgICAgbGlic3RkYysrLXYzLCBhbmQgdGhlIEhQLVVYIHBvcnQuCgogICAqIEphbWVzIHZhbiBBcnRzZGFsZW4gd3JvdGUgdGhlIGNvZGUgdGhhdCBtYWtlcyBlZmZpY2llbnQgdXNlIG9mIHRoZQogICAgIEludGVsIDgwMzg3IHJlZ2lzdGVyIHN0YWNrLgoKICAgKiBBYnJhbW8gYW5kIFJvYmVydG8gQmFnbmFyYSBmb3IgdGhlIFN5c1Y2OCBNb3Rvcm9sYSAzMzAwIERlbHRhCiAgICAgU2VyaWVzIHBvcnQuCgogICAqIEFsYXNkYWlyIEJhaXJkIGZvciB2YXJpb3VzIGJ1ZyBmaXhlcy4KCiAgICogR2lvdmFubmkgQmFqbyBmb3IgYW5hbHl6aW5nIGxvdHMgb2YgY29tcGxpY2F0ZWQgQysrIHByb2JsZW0KICAgICByZXBvcnRzLgoKICAgKiBQZXRlciBCYXJhZGEgZm9yIGhpcyB3b3JrIHRvIGltcHJvdmUgY29kZSBnZW5lcmF0aW9uIGZvciBuZXcKICAgICBDb2xkRmlyZSBjb3Jlcy4KCiAgICogR2VyYWxkIEJhdW1nYXJ0bmVyIGFkZGVkIHRoZSBzaWduYXR1cmUgZXh0ZW5zaW9uIHRvIHRoZSBDKysgZnJvbnQKICAgICBlbmQuCgogICAqIEdvZG1hciBCYWNrIGZvciBoaXMgSmF2YSBpbXByb3ZlbWVudHMgYW5kIGVuY291cmFnZW1lbnQuCgogICAqIFNjb3R0IEJhbWJyb3VnaCBmb3IgaGVscCBwb3J0aW5nIHRoZSBKYXZhIGNvbXBpbGVyLgoKICAgKiBXb2xmZ2FuZyBCYW5nZXJ0aCBmb3IgcHJvY2Vzc2luZyB0b25zIG9mIGJ1ZyByZXBvcnRzLgoKICAgKiBKb24gQmVuaXN0b24gZm9yIGhpcyBNaWNyb3NvZnQgV2luZG93cyBwb3J0IG9mIEphdmEuCgogICAqIERhbmllbCBCZXJsaW4gZm9yIGJldHRlciBEV0FSRjIgc3VwcG9ydCwgZmFzdGVyL2JldHRlcgogICAgIG9wdGltaXphdGlvbnMsIGltcHJvdmVkIGFsaWFzIGFuYWx5c2lzLCBwbHVzIG1pZ3JhdGluZyBHQ0MgdG8KICAgICBCdWd6aWxsYS4KCiAgICogR2VvZmYgQmVycnkgZm9yIGhpcyBKYXZhIG9iamVjdCBzZXJpYWxpemF0aW9uIHdvcmsgYW5kIHZhcmlvdXMKICAgICBwYXRjaGVzLgoKICAgKiBVcm9zIEJpemphayBmb3IgdGhlIGltcGxlbWVudGF0aW9uIG9mIHg4NyBtYXRoIGJ1aWx0LWluIGZ1bmN0aW9ucwogICAgIGFuZCBmb3IgdmFyaW91cyBtaWRkbGUgZW5kIGFuZCBpMzg2IGJhY2sgZW5kIGltcHJvdmVtZW50cyBhbmQgYnVnCiAgICAgZml4ZXMuCgogICAqIEVyaWMgQmxha2UgZm9yIGhlbHBpbmcgdG8gbWFrZSBHQ0ogYW5kIGxpYmdjaiBjb25mb3JtIHRvIHRoZQogICAgIHNwZWNpZmljYXRpb25zLgoKICAgKiBKYW5uZSBCbG9tcXZpc3QgZm9yIGNvbnRyaWJ1dGlvbnMgdG8gR05VIEZvcnRyYW4uCgogICAqIFNlZ2hlciBCb2Vzc2Vua29vbCBmb3IgdmFyaW91cyBmaXhlcy4KCiAgICogSGFucy1KLiBCb2VobSBmb3IgaGlzIGdhcmJhZ2UgY29sbGVjdG9yLCBJQS02NCBsaWJmZmkgcG9ydCwgYW5kCiAgICAgb3RoZXIgSmF2YSB3b3JrLgoKICAgKiBOZWlsIEJvb3RoIGZvciB3b3JrIG9uIGNwcGxpYiwgbGFuZyBob29rcywgZGVidWcgaG9va3MgYW5kIG90aGVyCiAgICAgbWlzY2VsbGFuZW91cyBjbGVhbi11cHMuCgogICAqIFN0ZXZlbiBCb3NzY2hlciBmb3IgaW50ZWdyYXRpbmcgdGhlIEdOVSBGb3J0cmFuIGZyb250IGVuZCBpbnRvIEdDQwogICAgIGFuZCBmb3IgY29udHJpYnV0aW5nIHRvIHRoZSB0cmVlLXNzYSBicmFuY2guCgogICAqIEVyaWMgQm90Y2F6b3UgZm9yIGZpeGluZyBtaWRkbGUtIGFuZCBiYWNrZW5kIGJ1Z3MgbGVmdCBhbmQgcmlnaHQuCgogICAqIFBlciBCb3RobmVyIGZvciBoaXMgZGlyZWN0aW9uIHZpYSB0aGUgc3RlZXJpbmcgY29tbWl0dGVlIGFuZAogICAgIHZhcmlvdXMgaW1wcm92ZW1lbnRzIHRvIHRoZSBpbmZyYXN0cnVjdHVyZSBmb3Igc3VwcG9ydGluZyBuZXcKICAgICBsYW5ndWFnZXMuICBDaGlsbCBmcm9udCBlbmQgaW1wbGVtZW50YXRpb24uICBJbml0aWFsCiAgICAgaW1wbGVtZW50YXRpb25zIG9mIGNwcGxpYiwgZml4LWhlYWRlciwgY29uZmlnLmd1ZXNzLCBsaWJpbywgYW5kCiAgICAgcGFzdCBDKysgbGlicmFyeSAobGliZysrKSBtYWludGFpbmVyLiAgRHJlYW1pbmcgdXAsIGRlc2lnbmluZyBhbmQKICAgICBpbXBsZW1lbnRpbmcgbXVjaCBvZiBHQ0ouCgogICAqIERldm9uIEJvd2VuIGhlbHBlZCBwb3J0IEdDQyB0byB0aGUgVGFob2UuCgogICAqIERvbiBCb3dtYW4gZm9yIG1pcHMtdnh3b3JrcyBjb250cmlidXRpb25zLgoKICAgKiBEYXZlIEJyb2xsZXkgZm9yIHdvcmsgb24gY3BwbGliIGFuZCBDaGlsbC4KCiAgICogUGF1bCBCcm9vayBmb3Igd29yayBvbiB0aGUgQVJNIGFyY2hpdGVjdHVyZSBhbmQgbWFpbnRhaW5pbmcgR05VCiAgICAgRm9ydHJhbi4KCiAgICogUm9iZXJ0IEJyb3duIGltcGxlbWVudGVkIHRoZSBzdXBwb3J0IGZvciBFbmNvcmUgMzIwMDAgc3lzdGVtcy4KCiAgICogQ2hyaXN0aWFuIEJydWVsIGZvciBpbXByb3ZlbWVudHMgdG8gbG9jYWwgc3RvcmUgZWxpbWluYXRpb24uCgogICAqIEhlcm1hbiBBLkouIHRlbiBCcnVnZ2UgZm9yIHZhcmlvdXMgZml4ZXMuCgogICAqIEpvZXJnIEJydW5zbWFubiBmb3IgSmF2YSBjb21waWxlciBoYWNraW5nIGFuZCBoZWxwIHdpdGggdGhlIEdDSgogICAgIEZBUS4KCiAgICogSm9lIEJ1Y2sgZm9yIGhpcyBkaXJlY3Rpb24gdmlhIHRoZSBzdGVlcmluZyBjb21taXR0ZWUuCgogICAqIENyYWlnIEJ1cmxleSBmb3IgbGVhZGVyc2hpcCBvZiB0aGUgRzc3IEZvcnRyYW4gZWZmb3J0LgoKICAgKiBTdGVwaGFuIEJ1eXMgZm9yIGNvbnRyaWJ1dGluZyBEb3h5Z2VuIG5vdGVzIGZvciBsaWJzdGRjKysuCgogICAqIFBhb2xvIENhcmxpbmkgZm9yIGxpYnN0ZGMrKyB3b3JrOiBsb3RzIG9mIGVmZmljaWVuY3kgaW1wcm92ZW1lbnRzCiAgICAgdG8gdGhlIEMrKyBzdHJpbmdzLCBzdHJlYW1idWZzIGFuZCBmb3JtYXR0ZWQgSS9PLCBoYXJkIGRldGVjdGl2ZQogICAgIHdvcmsgb24gdGhlIGZydXN0cmF0aW5nIGxvY2FsaXphdGlvbiBpc3N1ZXMsIGFuZCBrZWVwaW5nIHVwIHdpdGgKICAgICB0aGUgcHJvYmxlbSByZXBvcnRzLgoKICAgKiBKb2huIENhcnIgZm9yIGhpcyBhbGlhcyB3b3JrLCBTUEFSQyBoYWNraW5nLCBpbmZyYXN0cnVjdHVyZQogICAgIGltcHJvdmVtZW50cywgcHJldmlvdXMgY29udHJpYnV0aW9ucyB0byB0aGUgc3RlZXJpbmcgY29tbWl0dGVlLAogICAgIGxvb3Agb3B0aW1pemF0aW9ucywgZXRjLgoKICAgKiBTdGVwaGFuZSBDYXJyZXogZm9yIDY4SEMxMSBhbmQgNjhIQzEyIHBvcnRzLgoKICAgKiBTdGV2ZSBDaGFtYmVybGFpbiBmb3Igc3VwcG9ydCBmb3IgdGhlIFJlbmVzYXMgU0ggYW5kIEg4IHByb2Nlc3NvcnMKICAgICBhbmQgdGhlIFBpY29KYXZhIHByb2Nlc3NvciwgYW5kIGZvciBHQ0ogY29uZmlnIGZpeGVzLgoKICAgKiBHbGVubiBDaGFtYmVycyBmb3IgaGVscCB3aXRoIHRoZSBHQ0ogRkFRLgoKICAgKiBKb2huLU1hcmMgQ2hhbmRvbmlhIGZvciB2YXJpb3VzIGxpYmdjaiBwYXRjaGVzLgoKICAgKiBTY290dCBDaHJpc3RsZXkgZm9yIGhpcyBPYmplY3RpdmUtQyBjb250cmlidXRpb25zLgoKICAgKiBFcmljIENocmlzdG9waGVyIGZvciBoaXMgSmF2YSBwb3J0aW5nIGhlbHAgYW5kIGNsZWFuLXVwcy4KCiAgICogQnJhbmtvIENpYmVqIGZvciBtb3JlIHdhcm5pbmcgY29udHJpYnV0aW9ucy4KCiAgICogVGhlIEdOVSBDbGFzc3BhdGggcHJvamVjdCBmb3IgYWxsIG9mIHRoZWlyIG1lcmdlZCBydW50aW1lIGNvZGUuCgogICAqIE5pY2sgQ2xpZnRvbiBmb3IgYXJtLCBtY29yZSwgZnIzMCwgdjg1MCwgbTMyciB3b3JrLCAnLS1oZWxwJywgYW5kCiAgICAgb3RoZXIgcmFuZG9tIGhhY2tpbmcuCgogICAqIE1pY2hhZWwgQ29vayBmb3IgbGlic3RkYysrIGNsZWFudXAgcGF0Y2hlcyB0byByZWR1Y2Ugd2FybmluZ3MuCgogICAqIFIuIEtlbGxleSBDb29rIGZvciBtYWtpbmcgR0NDIGJ1aWxkYWJsZSBmcm9tIGEgcmVhZC1vbmx5IGRpcmVjdG9yeQogICAgIGFzIHdlbGwgYXMgb3RoZXIgbWlzY2VsbGFuZW91cyBidWlsZCBwcm9jZXNzIGFuZCBkb2N1bWVudGF0aW9uCiAgICAgY2xlYW4tdXBzLgoKICAgKiBSYWxmIENvcnNlcGl1cyBmb3IgU0ggdGVzdGluZyBhbmQgbWlub3IgYnVnIGZpeGluZy4KCiAgICogU3RhbiBDb3ggZm9yIGNhcmUgYW5kIGZlZWRpbmcgb2YgdGhlIHg4NiBwb3J0IGFuZCBsb3RzIG9mIGJlaGluZAogICAgIHRoZSBzY2VuZXMgaGFja2luZy4KCiAgICogQWxleCBDcmFpbiBwcm92aWRlZCBjaGFuZ2VzIGZvciB0aGUgM2IxLgoKICAgKiBJYW4gRGFsbCBmb3IgbWFqb3IgaW1wcm92ZW1lbnRzIHRvIHRoZSBOUzMyayBwb3J0LgoKICAgKiBQYXVsIERhbGUgZm9yIGhpcyB3b3JrIHRvIGFkZCB1Q2xpbnV4IHBsYXRmb3JtIHN1cHBvcnQgdG8gdGhlIG02OGsKICAgICBiYWNrZW5kLgoKICAgKiBEYXJpbyBEYXJpb2wgY29udHJpYnV0ZWQgdGhlIGZvdXIgdmFyaWV0aWVzIG9mIHNhbXBsZSBwcm9ncmFtcyB0aGF0CiAgICAgcHJpbnQgYSBjb3B5IG9mIHRoZWlyIHNvdXJjZS4KCiAgICogUnVzc2VsbCBEYXZpZHNvbiBmb3IgZnN0cmVhbSBhbmQgc3RyaW5nc3RyZWFtIGZpeGVzIGluIGxpYnN0ZGMrKy4KCiAgICogQnVkIERhdmlzIGZvciB3b3JrIG9uIHRoZSBHNzcgYW5kIEdOVSBGb3J0cmFuIGNvbXBpbGVycy4KCiAgICogTW8gRGVKb25nIGZvciBHQ0ogYW5kIGxpYmdjaiBidWcgZml4ZXMuCgogICAqIERKIERlbG9yaWUgZm9yIHRoZSBESkdQUCBwb3J0LCBidWlsZCBhbmQgbGliaWJlcnR5IG1haW50ZW5hbmNlLAogICAgIHZhcmlvdXMgYnVnIGZpeGVzLCBhbmQgdGhlIE0zMkMgcG9ydC4KCiAgICogQXJuYXVkIERlc2l0dGVyIGZvciBoZWxwaW5nIHRvIGRlYnVnIEdOVSBGb3J0cmFuLgoKICAgKiBHYWJyaWVsIERvcyBSZWlzIGZvciBjb250cmlidXRpb25zIHRvIEcrKywgY29udHJpYnV0aW9ucyBhbmQKICAgICBtYWludGVuYW5jZSBvZiBHQ0MgZGlhZ25vc3RpY3MgaW5mcmFzdHJ1Y3R1cmUsIGxpYnN0ZGMrKy12MywKICAgICBpbmNsdWRpbmcgJ3ZhbGFycmF5PD4nLCAnY29tcGxleDw+JywgbWFpbnRhaW5pbmcgdGhlIG51bWVyaWNzCiAgICAgbGlicmFyeSAoaW5jbHVkaW5nIHRoYXQgcGVza3kgJzxsaW1pdHM+JyA6LSkgYW5kIGtlZXBpbmcgdXAtdG8tZGF0ZQogICAgIGFueXRoaW5nIHRvIGRvIHdpdGggbnVtYmVycy4KCiAgICogVWxyaWNoIERyZXBwZXIgZm9yIGhpcyB3b3JrIG9uIGdsaWJjLCB0ZXN0aW5nIG9mIEdDQyB1c2luZyBnbGliYywKICAgICBJU08gQzk5IHN1cHBvcnQsIENGRyBkdW1waW5nIHN1cHBvcnQsIGV0Yy4sIHBsdXMgc3VwcG9ydCBvZiB0aGUgQysrCiAgICAgcnVudGltZSBsaWJyYXJpZXMgaW5jbHVkaW5nIGZvciBhbGwga2luZHMgb2YgQyBpbnRlcmZhY2UgaXNzdWVzLAogICAgIGNvbnRyaWJ1dGluZyBhbmQgbWFpbnRhaW5pbmcgJ2NvbXBsZXg8PicsIHNhbml0eSBjaGVja2luZyBhbmQKICAgICBkaXNidXJzZW1lbnQsIGNvbmZpZ3VyYXRpb24gYXJjaGl0ZWN0dXJlLCBsaWJpbyBtYWludGVuYW5jZSwgYW5kCiAgICAgZWFybHkgbWF0aCB3b3JrLgoKICAgKiBaZGVuZWsgRHZvcmFrIGZvciBhIG5ldyBsb29wIHVucm9sbGVyIGFuZCB2YXJpb3VzIGZpeGVzLgoKICAgKiBSaWNoYXJkIEVhcm5zaGF3IGZvciBoaXMgb25nb2luZyB3b3JrIHdpdGggdGhlIEFSTS4KCiAgICogRGF2aWQgRWRlbHNvaG4gZm9yIGhpcyBkaXJlY3Rpb24gdmlhIHRoZSBzdGVlcmluZyBjb21taXR0ZWUsCiAgICAgb25nb2luZyB3b3JrIHdpdGggdGhlIFJTNjAwMC9Qb3dlclBDIHBvcnQsIGhlbHAgY2xlYW5pbmcgdXAgSGFpZmEKICAgICBsb29wIGNoYW5nZXMsIGRvaW5nIHRoZSBlbnRpcmUgQUlYIHBvcnQgb2YgbGlic3RkYysrIHdpdGggaGlzIGJhcmUKICAgICBoYW5kcywgYW5kIGZvciBlbnN1cmluZyBHQ0MgcHJvcGVybHkga2VlcHMgd29ya2luZyBvbiBBSVguCgogICAqIEtldmluIEVkaWdlciBmb3IgdGhlIGZsb2F0aW5nIHBvaW50IGZvcm1hdHRpbmcgb2YgbnVtX3B1dDo6ZG9fcHV0CiAgICAgaW4gbGlic3RkYysrLgoKICAgKiBQaGlsIEVkd2FyZHMgZm9yIGxpYnN0ZGMrKyB3b3JrIGluY2x1ZGluZyBjb25maWd1cmF0aW9uIGhhY2tlcnksCiAgICAgZG9jdW1lbnRhdGlvbiBtYWludGFpbmVyLCBjaGllZiBicmVha2VyIG9mIHRoZSB3ZWIgcGFnZXMsIHRoZQogICAgIG9jY2FzaW9uYWwgaW9zdHJlYW0gYnVnIGZpeCwgYW5kIHdvcmsgb24gc2hhcmVkIGxpYnJhcnkgc3ltYm9sCiAgICAgdmVyc2lvbmluZy4KCiAgICogUGF1bCBFZ2dlcnQgZm9yIHJhbmRvbSBoYWNraW5nIGFsbCBvdmVyIEdDQy4KCiAgICogTWFyayBFbGJyZWNodCBmb3IgdmFyaW91cyBESkdQUCBpbXByb3ZlbWVudHMsIGFuZCBmb3IgbGlic3RkYysrCiAgICAgY29uZmlndXJhdGlvbiBzdXBwb3J0IGZvciBsb2NhbGVzIGFuZCBmc3RyZWFtLXJlbGF0ZWQgZml4ZXMuCgogICAqIFZhZGltIEVnb3JvdiBmb3IgbGlic3RkYysrIGZpeGVzIGluIHN0cmluZ3MsIHN0cmVhbWJ1ZnMsIGFuZAogICAgIGlvc3RyZWFtcy4KCiAgICogQ2hyaXN0aWFuIEVocmhhcmR0IGZvciBkZWFsaW5nIHdpdGggYnVnIHJlcG9ydHMuCgogICAqIEJlbiBFbGxpc3RvbiBmb3IgaGlzIHdvcmsgdG8gbW92ZSB0aGUgT2JqZWN0aXZlLUMgcnVudGltZSBpbnRvIGl0cwogICAgIG93biBzdWJkaXJlY3RvcnkgYW5kIGZvciBoaXMgd29yayBvbiBhdXRvY29uZi4KCiAgICogUmV2aXRhbCBFcmVzIGZvciB3b3JrIG9uIHRoZSBQb3dlclBDIDc1MENMIHBvcnQuCgogICAqIE1hcmMgRXNwaWUgZm9yIE9wZW5CU0Qgc3VwcG9ydC4KCiAgICogRG91ZyBFdmFucyBmb3IgbXVjaCBvZiB0aGUgZ2xvYmFsIG9wdGltaXphdGlvbiBmcmFtZXdvcmssIGFyYywKICAgICBtMzJyLCBhbmQgU1BBUkMgd29yay4KCiAgICogQ2hyaXN0b3BoZXIgRmF5bG9yIGZvciBoaXMgd29yayBvbiB0aGUgQ3lnd2luIHBvcnQgYW5kIGZvciBjYXJpbmcKICAgICBhbmQgZmVlZGluZyB0aGUgZ2NjLmdudS5vcmcgYm94IGFuZCBzYXZpbmcgaXRzIHVzZXJzIHRvbnMgb2Ygc3BhbS4KCiAgICogRnJlZCBGaXNoIGZvciBCZU9TIHN1cHBvcnQgYW5kIEFkYSBmaXhlcy4KCiAgICogSXZhbiBGb250ZXMgR2FyY2lhIGZvciB0aGUgUG9ydHVndWVzZSB0cmFuc2xhdGlvbiBvZiB0aGUgR0NKIEZBUS4KCiAgICogUGV0ZXIgR2Vyd2luc2tpIGZvciB2YXJpb3VzIGJ1ZyBmaXhlcyBhbmQgdGhlIFBhc2NhbCBmcm9udCBlbmQuCgogICAqIEthdmVoIFIuIEdoYXppIGZvciBoaXMgZGlyZWN0aW9uIHZpYSB0aGUgc3RlZXJpbmcgY29tbWl0dGVlLAogICAgIGFtYXppbmcgd29yayB0byBtYWtlICctVyAtV2FsbCAtVyogLVdlcnJvcicgdXNlZnVsLCBhbmQKICAgICBjb250aW51b3VzbHkgdGVzdGluZyBHQ0Mgb24gYSBwbGV0aG9yYSBvZiBwbGF0Zm9ybXMuICBLYXZlaCBleHRlbmRzCiAgICAgaGlzIGdyYXRpdHVkZSB0byB0aGUgQ0FJUCBDZW50ZXIgYXQgUnV0Z2VycyBVbml2ZXJzaXR5IGZvcgogICAgIHByb3ZpZGluZyBoaW0gd2l0aCBjb21wdXRpbmcgcmVzb3VyY2VzIHRvIHdvcmsgb24gRnJlZSBTb2Z0d2FyZQogICAgIHNpbmNlIHRoZSBsYXRlIDE5ODBzLgoKICAgKiBKb2huIEdpbG1vcmUgZm9yIGEgZG9uYXRpb24gdG8gdGhlIEZTRiBlYXJtYXJrZWQgaW1wcm92aW5nIEdOVQogICAgIEphdmEuCgogICAqIEp1ZHkgR29sZGJlcmcgZm9yIGMrKyBjb250cmlidXRpb25zLgoKICAgKiBUb3Jiam9ybiBHcmFubHVuZCBmb3IgdmFyaW91cyBmaXhlcyBhbmQgdGhlIGMtdG9ydHVyZSB0ZXN0c3VpdGUsCiAgICAgbXVsdGlwbHktIGFuZCBkaXZpZGUtYnktY29uc3RhbnQgb3B0aW1pemF0aW9uLCBpbXByb3ZlZCBsb25nIGxvbmcKICAgICBzdXBwb3J0LCBpbXByb3ZlZCBsZWFmIGZ1bmN0aW9uIHJlZ2lzdGVyIGFsbG9jYXRpb24sIGFuZCBoaXMKICAgICBkaXJlY3Rpb24gdmlhIHRoZSBzdGVlcmluZyBjb21taXR0ZWUuCgogICAqIEFudGhvbnkgR3JlZW4gZm9yIGhpcyAnLU9zJyBjb250cmlidXRpb25zIGFuZCBKYXZhIGZyb250IGVuZCB3b3JrLgoKICAgKiBTdHUgR3Jvc3NtYW4gZm9yIGdkYiBoYWNraW5nLCBhbGxvd2luZyBHQ0ogZGV2ZWxvcGVycyB0byBkZWJ1ZyBKYXZhCiAgICAgY29kZS4KCiAgICogTWljaGFlbCBLLiBHc2Nod2luZCBjb250cmlidXRlZCB0aGUgcG9ydCB0byB0aGUgUERQLTExLgoKICAgKiBSb24gR3VpbG1ldHRlIGltcGxlbWVudGVkIHRoZSAncHJvdG9pemUnIGFuZCAndW5wcm90b2l6ZScgdG9vbHMsCiAgICAgdGhlIHN1cHBvcnQgZm9yIER3YXJmIHN5bWJvbGljIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiwgYW5kIG11Y2ggb2YKICAgICB0aGUgc3VwcG9ydCBmb3IgU3lzdGVtIFYgUmVsZWFzZSA0LiAgSGUgaGFzIGFsc28gd29ya2VkIGhlYXZpbHkgb24KICAgICB0aGUgSW50ZWwgMzg2IGFuZCA4NjAgc3VwcG9ydC4KCiAgICogTW9zdGFmYSBIYWdvZyBmb3IgU3dpbmcgTW9kdWxvIFNjaGVkdWxpbmcgKFNNUykgYW5kIHBvc3QgcmVsb2FkCiAgICAgR0NTRS4KCiAgICogQnJ1bm8gSGFpYmxlIGZvciBpbXByb3ZlbWVudHMgaW4gdGhlIHJ1bnRpbWUgb3ZlcmhlYWQgZm9yIEVILCBuZXcKICAgICB3YXJuaW5ncyBhbmQgYXNzb3J0ZWQgYnVnIGZpeGVzLgoKICAgKiBBbmRyZXcgSGFsZXkgZm9yIGhpcyBhbWF6aW5nIEphdmEgY29tcGlsZXIgYW5kIGxpYnJhcnkgZWZmb3J0cy4KCiAgICogQ2hyaXMgSGFuc29uIGFzc2lzdGVkIGluIG1ha2luZyBHQ0Mgd29yayBvbiBIUC1VWCBmb3IgdGhlIDkwMDAKICAgICBzZXJpZXMgMzAwLgoKICAgKiBNaWNoYWVsIEhheWVzIGZvciB2YXJpb3VzIHRoYW5rbGVzcyB3b3JrIGhlJ3MgZG9uZSB0cnlpbmcgdG8gZ2V0CiAgICAgdGhlIGMzMC9jNDAgcG9ydHMgZnVuY3Rpb25hbC4gIExvdHMgb2YgbG9vcCBhbmQgdW5yb2xsIGltcHJvdmVtZW50cwogICAgIGFuZCBmaXhlcy4KCiAgICogRGFyYSBIYXplZ2hpIGZvciB3YWRpbmcgdGhyb3VnaCBteXJpYWRzIG9mIHRhcmdldC1zcGVjaWZpYyBidWcKICAgICByZXBvcnRzLgoKICAgKiBLYXRlIEhlZHN0cm9tIGZvciBzdGFraW5nIHRoZSBHNzcgZm9sa3Mgd2l0aCBhbiBpbml0aWFsIHRlc3RzdWl0ZS4KCiAgICogUmljaGFyZCBIZW5kZXJzb24gZm9yIGhpcyBvbmdvaW5nIFNQQVJDLCBhbHBoYSwgaWEzMiwgYW5kIGlhNjQKICAgICB3b3JrLCBsb29wIG9wdHMsIGFuZCBnZW5lcmFsbHkgZml4aW5nIGxvdHMgb2Ygb2xkIHByb2JsZW1zIHdlJ3ZlCiAgICAgaWdub3JlZCBmb3IgeWVhcnMsIGZsb3cgcmV3cml0ZSBhbmQgbG90cyBvZiBmdXJ0aGVyIHN0dWZmLAogICAgIGluY2x1ZGluZyByZXZpZXdpbmcgdG9ucyBvZiBwYXRjaGVzLgoKICAgKiBBbGR5IEhlcm5hbmRleiBmb3Igd29ya2luZyBvbiB0aGUgUG93ZXJQQyBwb3J0LCBTSU1EIHN1cHBvcnQsIGFuZAogICAgIHZhcmlvdXMgZml4ZXMuCgogICAqIE5vYnV5dWtpIEhpa2ljaGkgb2YgU29mdHdhcmUgUmVzZWFyY2ggQXNzb2NpYXRlcywgVG9reW8sCiAgICAgY29udHJpYnV0ZWQgdGhlIHN1cHBvcnQgZm9yIHRoZSBTb255IE5FV1MgbWFjaGluZS4KCiAgICogS2F6dSBIaXJhdGEgZm9yIGNhcmluZyBhbmQgZmVlZGluZyB0aGUgUmVuZXNhcyBIOC8zMDAgcG9ydCBhbmQKICAgICB2YXJpb3VzIGZpeGVzLgoKICAgKiBLYXRoZXJpbmUgSG9sY29tYiBmb3Igd29yayBvbiBHTlUgRm9ydHJhbi4KCiAgICogTWFuZnJlZCBIb2xsc3RlaW4gZm9yIGhpcyBvbmdvaW5nIHdvcmsgdG8ga2VlcCB0aGUgbTg4ayBhbGl2ZSwgbG90cwogICAgIG9mIHRlc3RpbmcgYW5kIGJ1ZyBmaXhpbmcsIHBhcnRpY3VsYXJseSBvZiBHQ0MgY29uZmlndXJ5IGNvZGUuCgogICAqIFN0ZXZlIEhvbG1ncmVuIGZvciBNYWNoVGVuIHBhdGNoZXMuCgogICAqIEphbiBIdWJpY2thIGZvciBoaXMgeDg2IHBvcnQgaW1wcm92ZW1lbnRzLgoKICAgKiBGYWxrIEh1ZWZmbmVyIGZvciB3b3JraW5nIG9uIEMgYW5kIG9wdGltaXphdGlvbiBidWcgcmVwb3J0cy4KCiAgICogQmVybmFyZG8gSW5ub2NlbnRpIGZvciBoaXMgbTY4ayB3b3JrLCBpbmNsdWRpbmcgbWVyZ2luZyBvZiBDb2xkRmlyZQogICAgIGltcHJvdmVtZW50cyBhbmQgdUNsaW51eCBzdXBwb3J0LgoKICAgKiBDaHJpc3RpYW4gSXNlbGkgZm9yIHZhcmlvdXMgYnVnIGZpeGVzLgoKICAgKiBLYW1pbCBJc2tyYSBmb3IgZ2VuZXJhbCBtNjhrIGhhY2tpbmcuCgogICAqIExlZSBJdmVyc29uIGZvciByYW5kb20gZml4ZXMgYW5kIE1JUFMgdGVzdGluZy4KCiAgICogQW5kcmVhcyBKYWVnZXIgZm9yIHRlc3RpbmcgYW5kIGJlbmNobWFya2luZyBvZiBHQ0MgYW5kIHZhcmlvdXMgYnVnCiAgICAgZml4ZXMuCgogICAqIEpha3ViIEplbGluZWsgZm9yIGhpcyBTUEFSQyB3b3JrIGFuZCBzaWJsaW5nIGNhbGwgb3B0aW1pemF0aW9ucyBhcwogICAgIHdlbGwgYXMgbG90cyBvZiBidWcgZml4ZXMgYW5kIHRlc3QgY2FzZXMsIGFuZCBmb3IgaW1wcm92aW5nIHRoZQogICAgIEphdmEgYnVpbGQgc3lzdGVtLgoKICAgKiBKYW5pcyBKb2huc29uIGZvciBpYTY0IHRlc3RpbmcgYW5kIGZpeGVzLCBoZXIgcXVhbGl0eSBpbXByb3ZlbWVudAogICAgIHNpZGV0cmFja3MsIGFuZCB3ZWIgcGFnZSBtYWludGVuYW5jZS4KCiAgICogS2VhbiBKb2huc3RvbiBmb3IgU0NPIE9wZW5TZXJ2ZXIgc3VwcG9ydCBhbmQgdmFyaW91cyBmaXhlcy4KCiAgICogVGltIEpvc2xpbmcgZm9yIHRoZSBzYW1wbGUgbGFuZ3VhZ2UgdHJlZWxhbmcgYmFzZWQgb3JpZ2luYWxseSBvbgogICAgIFJpY2hhcmQgS2VubmVyJ3MgInRveSIgbGFuZ3VhZ2UuCgogICAqIE5pY29sYWkgSm9zdXR0aXMgZm9yIGFkZGl0aW9uYWwgbGlic3RkYysrIGRvY3VtZW50YXRpb24uCgogICAqIEtsYXVzIEthZW1wZiBmb3IgaGlzIG9uZ29pbmcgd29yayB0byBtYWtlIGFscGhhLXZtcyBhIHZpYWJsZQogICAgIHRhcmdldC4KCiAgICogU3RldmVuIEcuIEthcmdsIGZvciB3b3JrIG9uIEdOVSBGb3J0cmFuLgoKICAgKiBEYXZpZCBLYXNodGFuIG9mIFNSSSBhZGFwdGVkIEdDQyB0byBWTVMuCgogICAqIFJ5c3phcmQgS2FiYXRlayBmb3IgbWFueSwgbWFueSBsaWJzdGRjKysgYnVnIGZpeGVzIGFuZAogICAgIG9wdGltaXphdGlvbnMgb2Ygc3RyaW5ncywgZXNwZWNpYWxseSBtZW1iZXIgZnVuY3Rpb25zLCBhbmQgZm9yCiAgICAgYXV0b19wdHIgZml4ZXMuCgogICAqIEdlb2ZmcmV5IEtlYXRpbmcgZm9yIGhpcyBvbmdvaW5nIHdvcmsgdG8gbWFrZSB0aGUgUFBDIHdvcmsgZm9yCiAgICAgR05VL0xpbnV4IGFuZCBoaXMgYXV0b21hdGljIHJlZ3Jlc3Npb24gdGVzdGVyLgoKICAgKiBCcmVuZGFuIEtlaG9lIGZvciBoaXMgb25nb2luZyB3b3JrIHdpdGggRysrIGFuZCBmb3IgYSBsb3Qgb2YgZWFybHkKICAgICB3b3JrIGluIGp1c3QgYWJvdXQgZXZlcnkgcGFydCBvZiBsaWJzdGRjKysuCgogICAqIE9saXZlciBNLiBLZWxsb2dnIG9mIERldXRzY2hlIEFlcm9zcGFjZSBjb250cmlidXRlZCB0aGUgcG9ydCB0byB0aGUKICAgICBNSUwtU1RELTE3NTBBLgoKICAgKiBSaWNoYXJkIEtlbm5lciBvZiB0aGUgTmV3IFlvcmsgVW5pdmVyc2l0eSBVbHRyYWNvbXB1dGVyIFJlc2VhcmNoCiAgICAgTGFib3JhdG9yeSB3cm90ZSB0aGUgbWFjaGluZSBkZXNjcmlwdGlvbnMgZm9yIHRoZSBBTUQgMjkwMDAsIHRoZQogICAgIERFQyBBbHBoYSwgdGhlIElCTSBSVCBQQywgYW5kIHRoZSBJQk0gUlMvNjAwMCBhcyB3ZWxsIGFzIHRoZQogICAgIHN1cHBvcnQgZm9yIGluc3RydWN0aW9uIGF0dHJpYnV0ZXMuICBIZSBhbHNvIG1hZGUgY2hhbmdlcyB0byBiZXR0ZXIKICAgICBzdXBwb3J0IFJJU0MgcHJvY2Vzc29ycyBpbmNsdWRpbmcgY2hhbmdlcyB0byBjb21tb24gc3ViZXhwcmVzc2lvbgogICAgIGVsaW1pbmF0aW9uLCBzdHJlbmd0aCByZWR1Y3Rpb24sIGZ1bmN0aW9uIGNhbGxpbmcgc2VxdWVuY2UKICAgICBoYW5kbGluZywgYW5kIGNvbmRpdGlvbiBjb2RlIHN1cHBvcnQsIGluIGFkZGl0aW9uIHRvIGdlbmVyYWxpemluZwogICAgIHRoZSBjb2RlIGZvciBmcmFtZSBwb2ludGVyIGVsaW1pbmF0aW9uIGFuZCBkZWxheSBzbG90IHNjaGVkdWxpbmcuCiAgICAgUmljaGFyZCBLZW5uZXIgd2FzIGFsc28gdGhlIGhlYWQgbWFpbnRhaW5lciBvZiBHQ0MgZm9yIHNldmVyYWwKICAgICB5ZWFycy4KCiAgICogTXVtaXQgS2hhbiBmb3IgdmFyaW91cyBjb250cmlidXRpb25zIHRvIHRoZSBDeWd3aW4gYW5kIE1pbmd3MzIKICAgICBwb3J0cyBhbmQgbWFpbnRhaW5pbmcgYmluYXJ5IHJlbGVhc2VzIGZvciBNaWNyb3NvZnQgV2luZG93cyBob3N0cywKICAgICBhbmQgZm9yIG1hc3NpdmUgbGlic3RkYysrIHBvcnRpbmcgd29yayB0byBDeWd3aW4vTWluZ3czMi4KCiAgICogUm9iaW4gS2lya2hhbSBmb3IgY3B1MzIgc3VwcG9ydC4KCiAgICogTWFyayBLbGVpbiBmb3IgUEEgaW1wcm92ZW1lbnRzLgoKICAgKiBUaG9tYXMgS29lbmlnIGZvciB2YXJpb3VzIGJ1ZyBmaXhlcy4KCiAgICogQnJ1Y2UgS29yYiBmb3IgdGhlIG5ldyBhbmQgaW1wcm92ZWQgZml4aW5jbHVkZXMgY29kZS4KCiAgICogQmVuamFtaW4gS29zbmlrIGZvciBoaXMgRysrIHdvcmsgYW5kIGZvciBsZWFkaW5nIHRoZSBsaWJzdGRjKystdjMKICAgICBlZmZvcnQuCgogICAqIENoYXJsZXMgTGFCcmVjIGNvbnRyaWJ1dGVkIHRoZSBzdXBwb3J0IGZvciB0aGUgSW50ZWdyYXRlZCBTb2x1dGlvbnMKICAgICA2ODAyMCBzeXN0ZW0uCgogICAqIEFzaGVyIExhbmd0b24gYW5kIE1pa2UgS3VtYmVyYSBmb3IgY29udHJpYnV0aW5nIENyYXkgcG9pbnRlcgogICAgIHN1cHBvcnQgdG8gR05VIEZvcnRyYW4sIGFuZCBmb3Igb3RoZXIgR05VIEZvcnRyYW4gaW1wcm92ZW1lbnRzLgoKICAgKiBKZWZmIExhdyBmb3IgaGlzIGRpcmVjdGlvbiB2aWEgdGhlIHN0ZWVyaW5nIGNvbW1pdHRlZSwgY29vcmRpbmF0aW5nCiAgICAgdGhlIGVudGlyZSBlZ2NzIHByb2plY3QgYW5kIEdDQyAyLjk1LCByb2xsaW5nIG91dCBzbmFwc2hvdHMgYW5kCiAgICAgcmVsZWFzZXMsIGhhbmRsaW5nIG1lcmdlcyBmcm9tIEdDQzIsIHJldmlld2luZyB0b25zIG9mIHBhdGNoZXMgdGhhdAogICAgIG1pZ2h0IGhhdmUgZmFsbGVuIHRocm91Z2ggdGhlIGNyYWNrcyBlbHNlLCBhbmQgcmFuZG9tIGJ1dCBleHRlbnNpdmUKICAgICBoYWNraW5nLgoKICAgKiBNYXJjIExlaG1hbm4gZm9yIGhpcyBkaXJlY3Rpb24gdmlhIHRoZSBzdGVlcmluZyBjb21taXR0ZWUgYW5kCiAgICAgaGVscGluZyB3aXRoIGFuYWx5c2lzIGFuZCBpbXByb3ZlbWVudHMgb2YgeDg2IHBlcmZvcm1hbmNlLgoKICAgKiBWaWN0b3IgTGVpa2VobWFuIGZvciB3b3JrIG9uIEdOVSBGb3J0cmFuLgoKICAgKiBUZWQgTGVtb24gd3JvdGUgcGFydHMgb2YgdGhlIFJUTCByZWFkZXIgYW5kIHByaW50ZXIuCgogICAqIEtyaWFuZyBMZXJkc3V3YW5ha2lqIGZvciBDKysgaW1wcm92ZW1lbnRzIGluY2x1ZGluZyB0ZW1wbGF0ZSBhcwogICAgIHRlbXBsYXRlIHBhcmFtZXRlciBzdXBwb3J0LCBhbmQgbWFueSBDKysgZml4ZXMuCgogICAqIFdhcnJlbiBMZXZ5IGZvciB0cmVtZW5kb3VzIHdvcmsgb24gbGliZ2NqIChKYXZhIFJ1bnRpbWUgTGlicmFyeSkKICAgICBhbmQgcmFuZG9tIHdvcmsgb24gdGhlIEphdmEgZnJvbnQgZW5kLgoKICAgKiBBbGFpbiBMaWNobmV3c2t5IHBvcnRlZCBHQ0MgdG8gdGhlIE1JUFMgQ1BVLgoKICAgKiBPc2thciBMaWxqZWJsYWQgZm9yIGhhY2tpbmcgb24gQVdUIGFuZCBoaXMgbWFueSBKYXZhIGJ1ZyByZXBvcnRzCiAgICAgYW5kIHBhdGNoZXMuCgogICAqIFJvYmVydCBMaXBlIGZvciBPcGVuU2VydmVyIHN1cHBvcnQsIG5ldyB0ZXN0c3VpdGVzLCB0ZXN0aW5nLCBldGMuCgogICAqIENoZW4gTGlxaW4gZm9yIHZhcmlvdXMgUytjb3JlIHJlbGF0ZWQgZml4ZXMvaW1wcm92ZW1lbnQsIGFuZCBmb3IKICAgICBtYWludGFpbmluZyB0aGUgUytjb3JlIHBvcnQuCgogICAqIFdlaXdlbiBMaXUgZm9yIHRlc3RpbmcgYW5kIHZhcmlvdXMgYnVnIGZpeGVzLgoKICAgKiBNYW51ZWwgTG8ncGV6LUliYSdufmV6IGZvciBpbXByb3ZpbmcgJy1XY29udmVyc2lvbicgYW5kIG1hbnkgb3RoZXIKICAgICBkaWFnbm9zdGljcyBmaXhlcyBhbmQgaW1wcm92ZW1lbnRzLgoKICAgKiBEYXZlIExvdmUgZm9yIGhpcyBvbmdvaW5nIHdvcmsgd2l0aCB0aGUgRm9ydHJhbiBmcm9udCBlbmQgYW5kCiAgICAgcnVudGltZSBsaWJyYXJpZXMuCgogICAqIE1hcnRpbiB2b24gTG8id2lzIGZvciBpbnRlcm5hbCBjb25zaXN0ZW5jeSBjaGVja2luZyBpbmZyYXN0cnVjdHVyZSwKICAgICB2YXJpb3VzIEMrKyBpbXByb3ZlbWVudHMgaW5jbHVkaW5nIG5hbWVzcGFjZSBzdXBwb3J0LCBhbmQgdG9ucyBvZgogICAgIGFzc2lzdGFuY2Ugd2l0aCBsaWJzdGRjKysvY29tcGlsZXIgbWVyZ2VzLgoKICAgKiBILkouIEx1IGZvciBoaXMgcHJldmlvdXMgY29udHJpYnV0aW9ucyB0byB0aGUgc3RlZXJpbmcgY29tbWl0dGVlLAogICAgIG1hbnkgeDg2IGJ1ZyByZXBvcnRzLCBwcm90b3R5cGUgcGF0Y2hlcywgYW5kIGtlZXBpbmcgdGhlIEdOVS9MaW51eAogICAgIHBvcnRzIHdvcmtpbmcuCgogICAqIEdyZWcgTWNHYXJ5IGZvciByYW5kb20gZml4ZXMgYW5kIChzb21lZGF5KSBib3VuZGVkIHBvaW50ZXJzLgoKICAgKiBBbmRyZXcgTWFjTGVvZCBmb3IgaGlzIG9uZ29pbmcgd29yayBpbiBidWlsZGluZyBhIHJlYWwgRUggc3lzdGVtLAogICAgIHZhcmlvdXMgY29kZSBnZW5lcmF0aW9uIGltcHJvdmVtZW50cywgd29yayBvbiB0aGUgZ2xvYmFsIG9wdGltaXplciwKICAgICBldGMuCgogICAqIFZsYWRpbWlyIE1ha2Fyb3YgZm9yIGhhY2tpbmcgc29tZSB1Z2x5IGk5NjAgcHJvYmxlbXMsIFBvd2VyUEMKICAgICBoYWNraW5nIGltcHJvdmVtZW50cyB0byBjb21waWxlLXRpbWUgcGVyZm9ybWFuY2UsIG92ZXJhbGwga25vd2xlZGdlCiAgICAgYW5kIGRpcmVjdGlvbiBpbiB0aGUgYXJlYSBvZiBpbnN0cnVjdGlvbiBzY2hlZHVsaW5nLCBhbmQgZGVzaWduIGFuZAogICAgIGltcGxlbWVudGF0aW9uIG9mIHRoZSBhdXRvbWF0b24gYmFzZWQgaW5zdHJ1Y3Rpb24gc2NoZWR1bGVyLgoKICAgKiBCb2IgTWFuc29uIGZvciBoaXMgYmVoaW5kIHRoZSBzY2VuZXMgd29yayBvbiBkZWphZ251LgoKICAgKiBQaGlsaXAgTWFydGluIGZvciBsb3RzIG9mIGxpYnN0ZGMrKyBzdHJpbmcgYW5kIHZlY3RvciBpdGVyYXRvcgogICAgIGZpeGVzIGFuZCBpbXByb3ZlbWVudHMsIGFuZCBzdHJpbmcgY2xlYW4gdXAgYW5kIHRlc3RzdWl0ZXMuCgogICAqIEFsbCBvZiB0aGUgTWF1dmUgcHJvamVjdCBjb250cmlidXRvcnMsIGZvciBKYXZhIHRlc3QgY29kZS4KCiAgICogQnJ5Y2UgTWNLaW5sYXkgZm9yIG51bWVyb3VzIEdDSiBhbmQgbGliZ2NqIGZpeGVzIGFuZCBpbXByb3ZlbWVudHMuCgogICAqIEFkYW0gTWVnYWN6IGZvciBoaXMgd29yayBvbiB0aGUgTWljcm9zb2Z0IFdpbmRvd3MgcG9ydCBvZiBHQ0ouCgogICAqIE1pY2hhZWwgTWVpc3NuZXIgZm9yIExSUyBmcmFtZXdvcmssIGlhMzIsIG0zMnIsIHY4NTAsIG04OGssIE1JUFMsCiAgICAgcG93ZXJwYywgaGFpZmEsIEVDT0ZGIGRlYnVnIHN1cHBvcnQsIGFuZCBvdGhlciBhc3NvcnRlZCBoYWNraW5nLgoKICAgKiBKYXNvbiBNZXJyaWxsIGZvciBoaXMgZGlyZWN0aW9uIHZpYSB0aGUgc3RlZXJpbmcgY29tbWl0dGVlIGFuZAogICAgIGxlYWRpbmcgdGhlIEcrKyBlZmZvcnQuCgogICAqIE1hcnRpbiBNaWNobG1heXIgZm9yIHRlc3RpbmcgR0NDIG9uIHNldmVyYWwgYXJjaGl0ZWN0dXJlcyB1c2luZyB0aGUKICAgICBlbnRpcmUgRGViaWFuIGFyY2hpdmUuCgogICAqIERhdmlkIE1pbGxlciBmb3IgaGlzIGRpcmVjdGlvbiB2aWEgdGhlIHN0ZWVyaW5nIGNvbW1pdHRlZSwgbG90cyBvZgogICAgIFNQQVJDIHdvcmssIGltcHJvdmVtZW50cyBpbiBqdW1wLmMgYW5kIGludGVyZmFjaW5nIHdpdGggdGhlIExpbnV4CiAgICAga2VybmVsIGRldmVsb3BlcnMuCgogICAqIEdhcnkgTWlsbGVyIHBvcnRlZCBHQ0MgdG8gQ2hhcmxlcyBSaXZlciBEYXRhIFN5c3RlbXMgbWFjaGluZXMuCgogICAqIEFsZnJlZCBNaW5hcmlrIGZvciBsaWJzdGRjKysgc3RyaW5nIGFuZCBpb3MgYnVnIGZpeGVzLCBhbmQgdHVybmluZwogICAgIHRoZSBlbnRpcmUgbGlic3RkYysrIHRlc3RzdWl0ZSBuYW1lc3BhY2UtY29tcGF0aWJsZS4KCiAgICogTWFyayBNaXRjaGVsbCBmb3IgaGlzIGRpcmVjdGlvbiB2aWEgdGhlIHN0ZWVyaW5nIGNvbW1pdHRlZSwKICAgICBtb3VudGFpbnMgb2YgQysrIHdvcmssIGxvYWQvc3RvcmUgaG9pc3Rpbmcgb3V0IG9mIGxvb3BzLCBhbGlhcwogICAgIGFuYWx5c2lzIGltcHJvdmVtZW50cywgSVNPIEMgJ3Jlc3RyaWN0JyBzdXBwb3J0LCBhbmQgc2VydmluZyBhcwogICAgIHJlbGVhc2UgbWFuYWdlciBmb3IgR0NDIDMueC4KCiAgICogQWxhbiBNb2RyYSBmb3IgdmFyaW91cyBHTlUvTGludXggYml0cyBhbmQgdGVzdGluZy4KCiAgICogVG9vbiBNb2VuZSBmb3IgaGlzIGRpcmVjdGlvbiB2aWEgdGhlIHN0ZWVyaW5nIGNvbW1pdHRlZSwgRm9ydHJhbgogICAgIG1haW50ZW5hbmNlLCBhbmQgaGlzIG9uZ29pbmcgd29yayB0byBtYWtlIHVzIG1ha2UgRm9ydHJhbiBydW4gZmFzdC4KCiAgICogSmFzb24gTW9sZW5kYSBmb3IgbWFqb3IgaGVscCBpbiB0aGUgY2FyZSBhbmQgZmVlZGluZyBvZiBhbGwgdGhlCiAgICAgc2VydmljZXMgb24gdGhlIGdjYy5nbnUub3JnIChmb3JtZXJseSBlZ2NzLmN5Z251cy5jb20pCiAgICAgbWFjaGluZS0tbWFpbCwgd2ViIHNlcnZpY2VzLCBmdHAgc2VydmljZXMsIGV0YyBldGMuICBEb2luZyBhbGwgdGhpcwogICAgIHdvcmsgb24gc2NyYXAgcGFwZXIgYW5kIHRoZSBiYWNrcyBvZiBlbnZlbG9wZXMgd291bGQgaGF2ZSBiZWVuLi4uCiAgICAgZGlmZmljdWx0LgoKICAgKiBDYXRoZXJpbmUgTW9vcmUgZm9yIGZpeGluZyB2YXJpb3VzIHVnbHkgcHJvYmxlbXMgd2UgaGF2ZSBzZW50IGhlcgogICAgIHdheSwgaW5jbHVkaW5nIHRoZSBoYWlmYSBidWcgd2hpY2ggd2FzIGtpbGxpbmcgdGhlIEFscGhhICYgUG93ZXJQQwogICAgIExpbnV4IGtlcm5lbHMuCgogICAqIE1pa2UgTW9yZXRvbiBmb3IgaGlzIHZhcmlvdXMgSmF2YSBwYXRjaGVzLgoKICAgKiBEYXZpZCBNb3NiZXJnZXItVGFuZyBmb3IgdmFyaW91cyBBbHBoYSBpbXByb3ZlbWVudHMsIGFuZCBmb3IgdGhlCiAgICAgaW5pdGlhbCBJQS02NCBwb3J0LgoKICAgKiBTdGVwaGVuIE1vc2hpZXIgY29udHJpYnV0ZWQgdGhlIGZsb2F0aW5nIHBvaW50IGVtdWxhdG9yIHRoYXQKICAgICBhc3Npc3RzIGluIGNyb3NzLWNvbXBpbGF0aW9uIGFuZCBwZXJtaXRzIHN1cHBvcnQgZm9yIGZsb2F0aW5nIHBvaW50CiAgICAgbnVtYmVycyB3aWRlciB0aGFuIDY0IGJpdHMgYW5kIGZvciBJU08gQzk5IHN1cHBvcnQuCgogICAqIEJpbGwgTW95ZXIgZm9yIGhpcyBiZWhpbmQgdGhlIHNjZW5lcyB3b3JrIG9uIHZhcmlvdXMgaXNzdWVzLgoKICAgKiBQaGlsaXBwZSBEZSBNdXl0ZXIgZm9yIGhpcyB3b3JrIG9uIHRoZSBtNjhrIHBvcnQuCgogICAqIEpvc2VwaCBTLiBNeWVycyBmb3IgaGlzIHdvcmsgb24gdGhlIFBEUC0xMSBwb3J0LCBmb3JtYXQgY2hlY2tpbmcKICAgICBhbmQgSVNPIEM5OSBzdXBwb3J0LCBhbmQgY29udGludW91cyBlbXBoYXNpcyBvbiAoYW5kIGNvbnRyaWJ1dGlvbnMKICAgICB0bykgZG9jdW1lbnRhdGlvbi4KCiAgICogTmF0aGFuIE15ZXJzIGZvciBoaXMgd29yayBvbiBsaWJzdGRjKystdjM6IGFyY2hpdGVjdHVyZSBhbmQKICAgICBhdXRob3JzaGlwIHRocm91Z2ggdGhlIGZpcnN0IHRocmVlIHNuYXBzaG90cywgaW5jbHVkaW5nCiAgICAgaW1wbGVtZW50YXRpb24gb2YgbG9jYWxlIGluZnJhc3RydWN0dXJlLCBzdHJpbmcsIHNoYWRvdyBDIGhlYWRlcnMsCiAgICAgYW5kIHRoZSBpbml0aWFsIHByb2plY3QgZG9jdW1lbnRhdGlvbiAoREVTSUdOLCBDSEVDS0xJU1QsIGFuZCBzbwogICAgIGZvcnRoKS4gIExhdGVyLCBtb3JlIHdvcmsgb24gTVQtc2FmZSBzdHJpbmcgYW5kIHNoYWRvdyBoZWFkZXJzLgoKICAgKiBGZWxpeCBOYXR0ZXIgZm9yIGRvY3VtZW50YXRpb24gb24gcG9ydGluZyBsaWJzdGRjKysuCgogICAqIE5hdGhhbmFlbCBOZXJvZGUgZm9yIGNsZWFuaW5nIHVwIHRoZSBjb25maWd1cmF0aW9uL2J1aWxkIHByb2Nlc3MuCgogICAqIE5lWFQsIEluYy4gZG9uYXRlZCB0aGUgZnJvbnQgZW5kIHRoYXQgc3VwcG9ydHMgdGhlIE9iamVjdGl2ZS1DCiAgICAgbGFuZ3VhZ2UuCgogICAqIEhhbnMtUGV0ZXIgTmlsc3NvbiBmb3IgdGhlIENSSVMgYW5kIE1NSVggcG9ydHMsIGltcHJvdmVtZW50cyB0byB0aGUKICAgICBzZWFyY2ggZW5naW5lIHNldHVwLCB2YXJpb3VzIGRvY3VtZW50YXRpb24gZml4ZXMgYW5kIG90aGVyIHNtYWxsCiAgICAgZml4ZXMuCgogICAqIEdlb2ZmIE5vZXIgZm9yIGhpcyB3b3JrIG9uIGdldHRpbmcgY3lnd2luIG5hdGl2ZSBidWlsZHMgd29ya2luZy4KCiAgICogRGllZ28gTm92aWxsbyBmb3IgaGlzIHdvcmsgb24gVHJlZSBTU0EsIE9wZW5NUCwgU1BFQyBwZXJmb3JtYW5jZQogICAgIHRyYWNraW5nIHdlYiBwYWdlcyBhbmQgYXNzb3J0ZWQgZml4ZXMuCgogICAqIERhdmlkIE8nQnJpZW4gZm9yIHRoZSBGcmVlQlNEL2FscGhhLCBGcmVlQlNEL0FNRCB4ODYtNjQsCiAgICAgRnJlZUJTRC9BUk0sIEZyZWVCU0QvUG93ZXJQQywgYW5kIEZyZWVCU0QvU1BBUkM2NCBwb3J0cyBhbmQgcmVsYXRlZAogICAgIGluZnJhc3RydWN0dXJlIGltcHJvdmVtZW50cy4KCiAgICogQWxleGFuZHJlIE9saXZhIGZvciB2YXJpb3VzIGJ1aWxkIGluZnJhc3RydWN0dXJlIGltcHJvdmVtZW50cywKICAgICBzY3JpcHRzIGFuZCBhbWF6aW5nIHRlc3Rpbmcgd29yaywgaW5jbHVkaW5nIGtlZXBpbmcgbGlidG9vbCBpc3N1ZXMKICAgICBzYW5lIGFuZCBoYXBweS4KCiAgICogU3RlZmFuIE9sc3NvbiBmb3Igd29yayBvbiBtdF9hbGxvYy4KCiAgICogTWVsaXNzYSBPJ05laWxsIGZvciB2YXJpb3VzIE5lWFQgZml4ZXMuCgogICAqIFJhaW5lciBPcnRoIGZvciByYW5kb20gTUlQUyB3b3JrLCBpbmNsdWRpbmcgaW1wcm92ZW1lbnRzIHRvIEdDQydzCiAgICAgbzMyIEFCSSBzdXBwb3J0LCBpbXByb3ZlbWVudHMgdG8gZGVqYWdudSdzIE1JUFMgc3VwcG9ydCwgSmF2YQogICAgIGNvbmZpZ3VyYXRpb24gY2xlYW4tdXBzIGFuZCBwb3J0aW5nIHdvcmssIGV0Yy4KCiAgICogSGFydG11dCBQZW5uZXIgZm9yIHdvcmsgb24gdGhlIHMzOTAgcG9ydC4KCiAgICogUGF1bCBQZXRlcnNlbiB3cm90ZSB0aGUgbWFjaGluZSBkZXNjcmlwdGlvbiBmb3IgdGhlIEFsbGlhbnQgRlgvOC4KCiAgICogQWxleGFuZHJlIFBldGl0LUJpYW5jbyBmb3IgaW1wbGVtZW50aW5nIG11Y2ggb2YgdGhlIEphdmEgY29tcGlsZXIKICAgICBhbmQgY29udGludWVkIEphdmEgbWFpbnRhaW5lcnNoaXAuCgogICAqIE1hdHRoaWFzIFBmYWxsZXIgZm9yIG1ham9yIGltcHJvdmVtZW50cyB0byB0aGUgTlMzMmsgcG9ydC4KCiAgICogR2VyYWxkIFBmZWlmZXIgZm9yIGhpcyBkaXJlY3Rpb24gdmlhIHRoZSBzdGVlcmluZyBjb21taXR0ZWUsCiAgICAgcG9pbnRpbmcgb3V0IGxvdHMgb2YgcHJvYmxlbXMgd2UgbmVlZCB0byBzb2x2ZSwgbWFpbnRlbmFuY2Ugb2YgdGhlCiAgICAgd2ViIHBhZ2VzLCBhbmQgdGFraW5nIGNhcmUgb2YgZG9jdW1lbnRhdGlvbiBtYWludGVuYW5jZSBpbiBnZW5lcmFsLgoKICAgKiBBbmRyZXcgUGluc2tpIGZvciBwcm9jZXNzaW5nIGJ1ZyByZXBvcnRzIGJ5IHRoZSBkb3plbi4KCiAgICogT3ZpZGl1IFByZWRlc2N1IGZvciBoaXMgd29yayBvbiB0aGUgT2JqZWN0aXZlLUMgZnJvbnQgZW5kIGFuZAogICAgIHJ1bnRpbWUgbGlicmFyaWVzLgoKICAgKiBKZXJyeSBRdWlubiBmb3IgbWFqb3IgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnRzIGluIEMrKyBmb3JtYXR0ZWQKICAgICBJL08uCgogICAqIEtlbiBSYWVidXJuIGZvciB2YXJpb3VzIGltcHJvdmVtZW50cyB0byBjaGVja2VyLCBNSVBTIHBvcnRzIGFuZAogICAgIHZhcmlvdXMgY2xlYW51cHMgaW4gdGhlIGNvbXBpbGVyLgoKICAgKiBSb2xmIFcuIFJhc211c3NlbiBmb3IgaGFja2luZyBvbiBBV1QuCgogICAqIERhdmlkIFJlZXNlIG9mIFN1biBNaWNyb3N5c3RlbXMgY29udHJpYnV0ZWQgdG8gdGhlIFNvbGFyaXMgb24KICAgICBQb3dlclBDIHBvcnQuCgogICAqIFZvbGtlciBSZWljaGVsdCBmb3Iga2VlcGluZyB1cCB3aXRoIHRoZSBwcm9ibGVtIHJlcG9ydHMuCgogICAqIEpvZXJuIFJlbm5lY2tlIGZvciBtYWludGFpbmluZyB0aGUgc2ggcG9ydCwgbG9vcCwgcmVnbW92ZSAmIHJlbG9hZAogICAgIGhhY2tpbmcuCgogICAqIExvcmVuIEouIFJpdHRsZSBmb3IgaW1wcm92ZW1lbnRzIHRvIGxpYnN0ZGMrKy12MyBpbmNsdWRpbmcgdGhlCiAgICAgRnJlZUJTRCBwb3J0LCB0aHJlYWRpbmcgZml4ZXMsIHRocmVhZC1yZWxhdGVkIGNvbmZpZ3VyeSBjaGFuZ2VzLAogICAgIGNyaXRpY2FsIHRocmVhZGluZyBkb2N1bWVudGF0aW9uLCBhbmQgc29sdXRpb25zIHRvIHJlYWxseSB0cmlja3kKICAgICBJL08gcHJvYmxlbXMsIGFzIHdlbGwgYXMga2VlcGluZyBHQ0MgcHJvcGVybHkgd29ya2luZyBvbiBGcmVlQlNECiAgICAgYW5kIGNvbnRpbnVvdXMgdGVzdGluZy4KCiAgICogQ3JhaWcgUm9kcmlndWVzIGZvciBwcm9jZXNzaW5nIHRvbnMgb2YgYnVnIHJlcG9ydHMuCgogICAqIE9sYSBSbyJubmVydXAgZm9yIHdvcmsgb24gbXRfYWxsb2MuCgogICAqIEdhdmluIFJvbWlnLUtvY2ggZm9yIGxvdHMgb2YgYmVoaW5kIHRoZSBzY2VuZXMgTUlQUyB3b3JrLgoKICAgKiBEYXZpZCBSb25pcyBpbnNwaXJlZCBhbmQgZW5jb3VyYWdlZCBDcmFpZyB0byByZXdyaXRlIHRoZSBHNzcKICAgICBkb2N1bWVudGF0aW9uIGluIHRleGluZm8gZm9ybWF0IGJ5IGNvbnRyaWJ1dGluZyBhIGZpcnN0IHBhc3MgYXQgYQogICAgIHRyYW5zbGF0aW9uIG9mIHRoZSBvbGQgJ2c3Ny0wLjUuMTYvZi9ET0MnIGZpbGUuCgogICAqIEtlbiBSb3NlIGZvciBmaXhlcyB0byBHQ0MncyBkZWxheSBzbG90IGZpbGxpbmcgY29kZS4KCiAgICogUGF1bCBSdWJpbiB3cm90ZSBtb3N0IG9mIHRoZSBwcmVwcm9jZXNzb3IuCgogICAqIFBlJ3R1ciBSdW5vJ2xmc3NvbiBmb3IgbWFqb3IgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnRzIGluIEMrKwogICAgIGZvcm1hdHRlZCBJL08gYW5kIGxhcmdlIGZpbGUgc3VwcG9ydCBpbiBDKysgZmlsZWJ1Zi4KCiAgICogQ2hpcCBTYWx6ZW5iZXJnIGZvciBsaWJzdGRjKysgcGF0Y2hlcyBhbmQgaW1wcm92ZW1lbnRzIHRvIGxvY2FsZXMsCiAgICAgdHJhaXRzLCBNYWtlZmlsZXMsIGxpYmlvLCBsaWJ0b29sIGhhY2tlcnksIGFuZCAibG9uZyBsb25nIiBzdXBwb3J0LgoKICAgKiBKdWhhIFNhcmxpbiBmb3IgaW1wcm92ZW1lbnRzIHRvIHRoZSBIOCBjb2RlIGdlbmVyYXRvci4KCiAgICogR3JlZyBTYXR6IGFzc2lzdGVkIGluIG1ha2luZyBHQ0Mgd29yayBvbiBIUC1VWCBmb3IgdGhlIDkwMDAgc2VyaWVzCiAgICAgMzAwLgoKICAgKiBSb2dlciBTYXlsZSBmb3IgaW1wcm92ZW1lbnRzIHRvIGNvbnN0YW50IGZvbGRpbmcgYW5kIEdDQydzIFJUTAogICAgIG9wdGltaXplcnMgYXMgd2VsbCBhcyBmb3IgZml4aW5nIG51bWVyb3VzIGJ1Z3MuCgogICAqIEJyYWRsZXkgU2NoYXR6IGZvciBoaXMgd29yayBvbiB0aGUgR0NKIEZBUS4KCiAgICogUGV0ZXIgU2NoYXVlciB3cm90ZSB0aGUgY29kZSB0byBhbGxvdyBkZWJ1Z2dpbmcgdG8gd29yayBvbiB0aGUKICAgICBBbHBoYS4KCiAgICogV2lsbGlhbSBTY2hlbHRlciBkaWQgbW9zdCBvZiB0aGUgd29yayBvbiB0aGUgSW50ZWwgODAzODYgc3VwcG9ydC4KCiAgICogVG9iaWFzIFNjaGx1InRlciBmb3Igd29yayBvbiBHTlUgRm9ydHJhbi4KCiAgICogQmVybmQgU2NobWlkdCBmb3IgdmFyaW91cyBjb2RlIGdlbmVyYXRpb24gaW1wcm92ZW1lbnRzIGFuZCBtYWpvcgogICAgIHdvcmsgaW4gdGhlIHJlbG9hZCBwYXNzIGFzIHdlbGwgYSBzZXJ2aW5nIGFzIHJlbGVhc2UgbWFuYWdlciBmb3IKICAgICBHQ0MgMi45NS4zLgoKICAgKiBQZXRlciBTY2htaWQgZm9yIGNvbnN0YW50IHRlc3Rpbmcgb2YgbGlic3RkYysrLS1lc3BlY2lhbGx5CiAgICAgYXBwbGljYXRpb24gdGVzdGluZywgZ29pbmcgYWJvdmUgYW5kIGJleW9uZCB3aGF0IHdhcyByZXF1ZXN0ZWQgZm9yCiAgICAgdGhlIHJlbGVhc2UgY3JpdGVyaWEtLWFuZCBsaWJzdGRjKysgaGVhZGVyIGZpbGUgdHdlYWtzLgoKICAgKiBKYXNvbiBTY2hyb2VkZXIgZm9yIGpjZi1kdW1wIHBhdGNoZXMuCgogICAqIEFuZHJlYXMgU2Nod2FiIGZvciBoaXMgd29yayBvbiB0aGUgbTY4ayBwb3J0LgoKICAgKiBMYXJzIFNlZ2VybHVuZCBmb3Igd29yayBvbiBHTlUgRm9ydHJhbi4KCiAgICogSm9lbCBTaGVycmlsbCBmb3IgaGlzIGRpcmVjdGlvbiB2aWEgdGhlIHN0ZWVyaW5nIGNvbW1pdHRlZSwgUlRFTVMKICAgICBjb250cmlidXRpb25zIGFuZCBSVEVNUyB0ZXN0aW5nLgoKICAgKiBOYXRoYW4gU2lkd2VsbCBmb3IgbWFueSBDKysgZml4ZXMvaW1wcm92ZW1lbnRzLgoKICAgKiBKZWZmcmV5IFNpZWdhbCBmb3IgaGVscGluZyBSTVMgd2l0aCB0aGUgb3JpZ2luYWwgZGVzaWduIG9mIEdDQywKICAgICBzb21lIGNvZGUgd2hpY2ggaGFuZGxlcyB0aGUgcGFyc2UgdHJlZSBhbmQgUlRMIGRhdGEgc3RydWN0dXJlcywKICAgICBjb25zdGFudCBmb2xkaW5nIGFuZCBoZWxwIHdpdGggdGhlIG9yaWdpbmFsIFZBWCAmIG02OGsgcG9ydHMuCgogICAqIEtlbm55IFNpbXBzb24gZm9yIHByb21wdGluZyBsaWJzdGRjKysgZml4ZXMgZHVlIHRvIGRlZmVjdCByZXBvcnRzCiAgICAgZnJvbSB0aGUgTFdHICh0aGVyZWJ5IGtlZXBpbmcgR0NDIGluIGxpbmUgd2l0aCB1cGRhdGVzIGZyb20gdGhlCiAgICAgSVNPKS4KCiAgICogRnJhbnogU2lybCBmb3IgaGlzIG9uZ29pbmcgd29yayB3aXRoIG1ha2luZyB0aGUgUFBDIHBvcnQgc3RhYmxlIGZvcgogICAgIEdOVS9MaW51eC4KCiAgICogQW5kcmV5IFNsZXB1aGluIGZvciBhc3NvcnRlZCBBSVggaGFja2luZy4KCiAgICogVHJldm9yIFNtaWdpZWwgZm9yIGNvbnRyaWJ1dGluZyB0aGUgU1BVIHBvcnQuCgogICAqIENocmlzdG9waGVyIFNtaXRoIGRpZCB0aGUgcG9ydCBmb3IgQ29udmV4IG1hY2hpbmVzLgoKICAgKiBEYW5ueSBTbWl0aCBmb3IgaGlzIG1ham9yIGVmZm9ydHMgb24gdGhlIE1pbmd3IChhbmQgQ3lnd2luKSBwb3J0cy4KCiAgICogUmFuZHkgU21pdGggZmluaXNoZWQgdGhlIFN1biBGUEEgc3VwcG9ydC4KCiAgICogU2NvdHQgU255ZGVyIGZvciBxdWV1ZSwgaXRlcmF0b3IsIGlzdHJlYW0sIGFuZCBzdHJpbmcgZml4ZXMgYW5kCiAgICAgbGlic3RkYysrIHRlc3RzdWl0ZSBlbnRyaWVzLiAgQWxzbyBmb3IgcHJvdmlkaW5nIHRoZSBwYXRjaCB0byBHNzcKICAgICB0byBhZGQgcnVkaW1lbnRhcnkgc3VwcG9ydCBmb3IgJ0lOVEVHRVIqMScsICdJTlRFR0VSKjInLCBhbmQKICAgICAnTE9HSUNBTCoxJy4KCiAgICogQnJhZCBTcGVuY2VyIGZvciBjb250cmlidXRpb25zIHRvIHRoZSBHTElCQ1BQX0ZPUkNFX05FVyB0ZWNobmlxdWUuCgogICAqIFJpY2hhcmQgU3RhbGxtYW4sIGZvciB3cml0aW5nIHRoZSBvcmlnaW5hbCBHQ0MgYW5kIGxhdW5jaGluZyB0aGUKICAgICBHTlUgcHJvamVjdC4KCiAgICogSmFuIFN0ZWluIG9mIHRoZSBDaGFsbWVycyBDb21wdXRlciBTb2NpZXR5IHByb3ZpZGVkIHN1cHBvcnQgZm9yCiAgICAgR2VuaXgsIGFzIHdlbGwgYXMgcGFydCBvZiB0aGUgMzIwMDAgbWFjaGluZSBkZXNjcmlwdGlvbi4KCiAgICogTmlnZWwgU3RlcGhlbnMgZm9yIHZhcmlvdXMgbWlwczE2IHJlbGF0ZWQgZml4ZXMvaW1wcm92ZW1lbnRzLgoKICAgKiBKb25hdGhhbiBTdG9uZSB3cm90ZSB0aGUgbWFjaGluZSBkZXNjcmlwdGlvbiBmb3IgdGhlIFB5cmFtaWQKICAgICBjb21wdXRlci4KCiAgICogR3JhaGFtIFN0b3R0IGZvciB2YXJpb3VzIGluZnJhc3RydWN0dXJlIGltcHJvdmVtZW50cy4KCiAgICogSm9obiBTdHJhY2tlIGZvciBoaXMgSmF2YSBIVFRQIHByb3RvY29sIGZpeGVzLgoKICAgKiBNaWtlIFN0dW1wIGZvciBoaXMgRWx4c2kgcG9ydCwgRysrIGNvbnRyaWJ1dGlvbnMgb3ZlciB0aGUgeWVhcnMgYW5kCiAgICAgbW9yZSByZWNlbnRseSBoaXMgdnh3b3JrcyBjb250cmlidXRpb25zCgogICAqIEplZmYgU3R1cm0gZm9yIEphdmEgcG9ydGluZyBoZWxwLCBidWcgZml4ZXMsIGFuZCBlbmNvdXJhZ2VtZW50LgoKICAgKiBTaGlnZXlhIFN1enVraSBmb3IgdGhpcyBmaXhlcyBmb3IgdGhlIGJzZGkgcGxhdGZvcm1zLgoKICAgKiBJYW4gTGFuY2UgVGF5bG9yIGZvciBoaXMgbWlwczE2IHdvcmssIGdlbmVyYWwgY29uZmlndXJ5IGhhY2tpbmcsCiAgICAgZml4aW5jbHVkZXMsIGV0Yy4KCiAgICogSG9sZ2VyIFRldXRzY2ggcHJvdmlkZWQgdGhlIHN1cHBvcnQgZm9yIHRoZSBDbGlwcGVyIENQVS4KCiAgICogR2FyeSBUaG9tYXMgZm9yIGhpcyBvbmdvaW5nIHdvcmsgdG8gbWFrZSB0aGUgUFBDIHdvcmsgZm9yCiAgICAgR05VL0xpbnV4LgoKICAgKiBQaGlsaXBwIFRob21hcyBmb3IgcmFuZG9tIGJ1ZyBmaXhlcyB0aHJvdWdob3V0IHRoZSBjb21waWxlcgoKICAgKiBKYXNvbiBUaG9ycGUgZm9yIHRocmVhZCBzdXBwb3J0IGluIGxpYnN0ZGMrKyBvbiBOZXRCU0QuCgogICAqIEtyZXN0ZW4gS3JhYiBUaG9ydXAgd3JvdGUgdGhlIHJ1biB0aW1lIHN1cHBvcnQgZm9yIHRoZSBPYmplY3RpdmUtQwogICAgIGxhbmd1YWdlIGFuZCB0aGUgZmFudGFzdGljIEphdmEgYnl0ZWNvZGUgaW50ZXJwcmV0ZXIuCgogICAqIE1pY2hhZWwgVGllbWFubiBmb3IgcmFuZG9tIGJ1ZyBmaXhlcywgdGhlIGZpcnN0IGluc3RydWN0aW9uCiAgICAgc2NoZWR1bGVyLCBpbml0aWFsIEMrKyBzdXBwb3J0LCBmdW5jdGlvbiBpbnRlZ3JhdGlvbiwgTlMzMmssIFNQQVJDCiAgICAgYW5kIE04OGsgbWFjaGluZSBkZXNjcmlwdGlvbiB3b3JrLCBkZWxheSBzbG90IHNjaGVkdWxpbmcuCgogICAqIEFuZHJlYXMgVG9ibGVyIGZvciBoaXMgd29yayBwb3J0aW5nIGxpYmdjaiB0byBEYXJ3aW4uCgogICAqIFRlZW11IFRvcm1hIGZvciB0aHJlYWQgc2FmZSBleGNlcHRpb24gaGFuZGxpbmcgc3VwcG9ydC4KCiAgICogTGVvbmFyZCBUb3dlciB3cm90ZSBwYXJ0cyBvZiB0aGUgcGFyc2VyLCBSVEwgZ2VuZXJhdG9yLCBhbmQgUlRMCiAgICAgZGVmaW5pdGlvbnMsIGFuZCBvZiB0aGUgVkFYIG1hY2hpbmUgZGVzY3JpcHRpb24uCgogICAqIFRvbSBUcm9tZXkgZm9yIGludGVybmF0aW9uYWxpemF0aW9uIHN1cHBvcnQgYW5kIGZvciBoaXMgbWFueSBKYXZhCiAgICAgY29udHJpYnV0aW9ucyBhbmQgbGliZ2NqIG1haW50YWluZXJzaGlwLgoKICAgKiBMYXNzaSBUdXVyYSBmb3IgaW1wcm92ZW1lbnRzIHRvIGNvbmZpZy5ndWVzcyB0byBkZXRlcm1pbmUgSFAKICAgICBwcm9jZXNzb3IgdHlwZXMuCgogICAqIFBldHRlciBVcmtlZGFsIGZvciBsaWJzdGRjKysgQ1hYRkxBR1MsIG1hdGgsIGFuZCBhbGdvcml0aG1zIGZpeGVzLgoKICAgKiBBbmR5IFZhdWdodCBmb3IgdGhlIGRlc2lnbiBhbmQgaW5pdGlhbCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgR05VCiAgICAgRm9ydHJhbiBmcm9udCBlbmQuCgogICAqIEJyZW50IFZlcm5lciBmb3Igd29yayB3aXRoIHRoZSBsaWJzdGRjKysgY3NoYWRvdyBmaWxlcyBhbmQgdGhlaXIKICAgICBhc3NvY2lhdGVkIGNvbmZpZ3VyZSBzdGVwcy4KCiAgICogVG9kZCBWaWVybGluZyBmb3IgY29udHJpYnV0aW9ucyBmb3IgTmV0QlNEIHBvcnRzLgoKICAgKiBKb25hdGhhbiBXYWtlbHkgZm9yIGNvbnRyaWJ1dGluZyBsaWJzdGRjKysgRG94eWdlbiBub3RlcyBhbmQgWEhUTUwKICAgICBndWlkYW5jZS4KCiAgICogRGVhbiBXYWtlcmxleSBmb3IgY29udmVydGluZyB0aGUgaW5zdGFsbCBkb2N1bWVudGF0aW9uIGZyb20gSFRNTCB0bwogICAgIHRleGluZm8gaW4gdGltZSBmb3IgR0NDIDMuMC4KCiAgICogS3Jpc3RlciBXYWxmcmlkc3NvbiBmb3IgcmFuZG9tIGJ1ZyBmaXhlcy4KCiAgICogRmVuZyBXYW5nIGZvciBjb250cmlidXRpb25zIHRvIEdOVSBGb3J0cmFuLgoKICAgKiBTdGVwaGVuIE0uIFdlYmIgZm9yIHRpbWUgYW5kIGVmZm9ydCBvbiBtYWtpbmcgbGlic3RkYysrIHNoYWRvdwogICAgIGZpbGVzIHdvcmsgd2l0aCB0aGUgdHJpY2t5IFNvbGFyaXMgOCsgaGVhZGVycywgYW5kIGZvciBwdXNoaW5nIHRoZQogICAgIGJ1aWxkLXRpbWUgaGVhZGVyIHRyZWUuCgogICAqIEpvaG4gV2VobGUgZm9yIHZhcmlvdXMgaW1wcm92ZW1lbnRzIGZvciB0aGUgeDg2IGNvZGUgZ2VuZXJhdG9yLAogICAgIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUgaW1wcm92ZW1lbnRzIHRvIGhlbHAgeDg2IGNvZGUgZ2VuZXJhdGlvbiwKICAgICB2YWx1ZSByYW5nZSBwcm9wYWdhdGlvbiBhbmQgb3RoZXIgd29yaywgV0UzMmsgcG9ydC4KCiAgICogVWxyaWNoIFdlaWdhbmQgZm9yIHdvcmsgb24gdGhlIHMzOTAgcG9ydC4KCiAgICogWmFjayBXZWluYmVyZyBmb3IgbWFqb3Igd29yayBvbiBjcHBsaWIgYW5kIHZhcmlvdXMgb3RoZXIgYnVnIGZpeGVzLgoKICAgKiBNYXR0IFdlbHNoIGZvciBoZWxwIHdpdGggTGludXggVGhyZWFkcyBzdXBwb3J0IGluIEdDSi4KCiAgICogVXJiYW4gV2lkbWFyayBmb3IgaGVscCBmaXhpbmcgamF2YS5pby4KCiAgICogTWFyayBXaWVsYWFyZCBmb3IgbmV3IEphdmEgbGlicmFyeSBjb2RlIGFuZCBoaXMgd29yayBpbnRlZ3JhdGluZwogICAgIHdpdGggQ2xhc3NwYXRoLgoKICAgKiBEYWxlIFdpbGVzIGhlbHBlZCBwb3J0IEdDQyB0byB0aGUgVGFob2UuCgogICAqIEJvYiBXaWxzb24gZnJvbSBUZW5zaWxpY2EsIEluYy4gZm9yIHRoZSBYdGVuc2EgcG9ydC4KCiAgICogSmltIFdpbHNvbiBmb3IgaGlzIGRpcmVjdGlvbiB2aWEgdGhlIHN0ZWVyaW5nIGNvbW1pdHRlZSwgdGFja2xpbmcKICAgICBoYXJkIHByb2JsZW1zIGluIHZhcmlvdXMgcGxhY2VzIHRoYXQgbm9ib2R5IGVsc2Ugd2FudGVkIHRvIHdvcmsgb24sCiAgICAgc3RyZW5ndGggcmVkdWN0aW9uIGFuZCBvdGhlciBsb29wIG9wdGltaXphdGlvbnMuCgogICAqIFBhdWwgV29lZ2VyZXIgYW5kIFRhbCBBZ21vbiBmb3IgdGhlIENSWCBwb3J0LgoKICAgKiBDYXJsbyBXb29kIGZvciB2YXJpb3VzIGZpeGVzLgoKICAgKiBUb20gV29vZCBmb3Igd29yayBvbiB0aGUgbTg4ayBwb3J0LgoKICAgKiBDYW5xdW4gWWFuZyBmb3Igd29yayBvbiBHTlUgRm9ydHJhbi4KCiAgICogTWFzYW5vYnUgWXVoYXJhIG9mIEZ1aml0c3UgTGFib3JhdG9yaWVzIGltcGxlbWVudGVkIHRoZSBtYWNoaW5lCiAgICAgZGVzY3JpcHRpb24gZm9yIHRoZSBUcm9uIGFyY2hpdGVjdHVyZSAoc3BlY2lmaWNhbGx5LCB0aGUgR21pY3JvKS4KCiAgICogS2V2aW4gWmFjaG1hbm4gaGVscGVkIHBvcnQgR0NDIHRvIHRoZSBUYWhvZS4KCiAgICogQXlhbCBaYWtzIGZvciBTd2luZyBNb2R1bG8gU2NoZWR1bGluZyAoU01TKS4KCiAgICogWGlhb3FpYW5nIFpoYW5nIGZvciB3b3JrIG9uIEdOVSBGb3J0cmFuLgoKICAgKiBHaWxsZXMgWnVuaW5vIGZvciBoZWxwIHBvcnRpbmcgSmF2YSB0byBJcml4LgoKIFRoZSBmb2xsb3dpbmcgcGVvcGxlIGFyZSByZWNvZ25pemVkIGZvciB0aGVpciBjb250cmlidXRpb25zIHRvIEdOQVQsCnRoZSBBZGEgZnJvbnQgZW5kIG9mIEdDQzoKICAgKiBCZXJuYXJkIEJhbm5lcgoKICAgKiBSb21haW4gQmVycmVuZG9ubmVyCgogICAqIEdlZXJ0IEJvc2NoCgogICAqIEVtbWFudWVsIEJyaW90CgogICAqIEpvZWwgQnJvYmVja2VyCgogICAqIEJlbiBCcm9zZ29sCgogICAqIFZpbmNlbnQgQ2VsaWVyCgogICAqIEFybmF1ZCBDaGFybGV0CgogICAqIENoaWVuIENoaWVuZwoKICAgKiBDeXJpbGxlIENvbWFyCgogICAqIEN5cmlsbGUgQ3JvemVzCgogICAqIFJvYmVydCBEZXdhcgoKICAgKiBHYXJ5IERpc211a2VzCgogICAqIFJvYmVydCBEdWZmCgogICAqIEVkIEZhbGlzCgogICAqIFJhbW9uIEZlcm5hbmRlegoKICAgKiBTYW0gRmlndWVyb2EKCiAgICogVmFzaWxpeSBGb2Zhbm92CgogICAqIE1pY2hhZWwgRnJpZXNzCgogICAqIEZyYW5jbyBHYXNwZXJvbmkKCiAgICogVGVkIEdpZXJpbmcKCiAgICogTWF0dGhldyBHaW5nZWxsCgogICAqIExhdXJlbnQgR3VlcmJ5CgogICAqIEplcm9tZSBHdWl0dG9uCgogICAqIE9saXZpZXIgSGFpbnF1ZQoKICAgKiBKZXJvbWUgSHVndWVzCgogICAqIEhyaXN0aWFuIEtpcnRjaGV2CgogICAqIEplcm9tZSBMYW1ib3VyZwoKICAgKiBCcnVubyBMZWNsZXJjCgogICAqIEFsYmVydCBMZWUKCiAgICogU2VhbiBNY05laWwKCiAgICogSmF2aWVyIE1pcmFuZGEKCiAgICogTGF1cmVudCBOYW5hCgogICAqIFBhc2NhbCBPYnJ5CgogICAqIERvbmctSWsgT2gKCiAgICogTGF1cmVudCBQYXV0ZXQKCiAgICogQnJldHQgUG9ydGVyCgogICAqIFRob21hcyBRdWlub3QKCiAgICogTmljb2xhcyBSb2NoZQoKICAgKiBQYXQgUm9nZXJzCgogICAqIEpvc2UgUnVpegoKICAgKiBEb3VnbGFzIFJ1cHAKCiAgICogU2VyZ2V5IFJ5YmluCgogICAqIEdhaWwgU2NoZW5rZXIKCiAgICogRWQgU2Nob25iZXJnCgogICAqIE5pY29sYXMgU2V0dG9uCgogICAqIFNhbXVlbCBUYXJkaWV1CgogVGhlIGZvbGxvd2luZyBwZW9wbGUgYXJlIHJlY29nbml6ZWQgZm9yIHRoZWlyIGNvbnRyaWJ1dGlvbnMgb2YgbmV3CmZlYXR1cmVzLCBidWcgcmVwb3J0cywgdGVzdGluZyBhbmQgaW50ZWdyYXRpb24gb2YgY2xhc3NwYXRoL2xpYmdjaiBmb3IKR0NDIHZlcnNpb24gNC4xOgogICAqIExpbGxpYW4gQW5nZWwgZm9yICdKVHJlZScgaW1wbGVtZW50YXRpb24gYW5kIGxvdHMgRnJlZSBTd2luZwogICAgIGFkZGl0aW9ucyBhbmQgYnVnIGZpeGVzLgoKICAgKiBXb2xmZ2FuZyBCYWVyIGZvciAnR2FwQ29udGVudCcgYnVnIGZpeGVzLgoKICAgKiBBbnRob255IEJhbGtpc3Nvb24gZm9yICdKTGlzdCcsIEZyZWUgU3dpbmcgMS41IHVwZGF0ZXMgYW5kIG1vdXNlCiAgICAgZXZlbnQgZml4ZXMsIGxvdHMgb2YgRnJlZSBTd2luZyB3b3JrIGluY2x1ZGluZyAnSlRhYmxlJyBlZGl0aW5nLgoKICAgKiBTdHVhcnQgQmFsbGFyZCBmb3IgUk1JIGNvbnN0YW50IGZpeGVzLgoKICAgKiBHb2ZmcmVkbyBCYXJvbmNlbGxpIGZvciAnSFRUUFVSTENvbm5lY3Rpb24nIGZpeGVzLgoKICAgKiBHYXJ5IEJlbnNvbiBmb3IgJ01lc3NhZ2VGb3JtYXQnIGZpeGVzLgoKICAgKiBEYW5pZWwgQm9ubmlvdCBmb3IgJ1NlcmlhbGl6YXRpb24nIGZpeGVzLgoKICAgKiBDaHJpcyBCdXJkZXNzIGZvciBsb3RzIG9mIGdudS54bWwgYW5kIGh0dHAgcHJvdG9jb2wgZml4ZXMsICdTdEFYJwogICAgIGFuZCAnRE9NIHhtbDppZCcgc3VwcG9ydC4KCiAgICogS2EtSGluZyBDaGV1bmcgZm9yICdUcmVlUGF0aCcgYW5kICdUcmVlU2VsZWN0aW9uJyBmaXhlcy4KCiAgICogQXJjaGllIENvYmJzIGZvciBidWlsZCBmaXhlcywgVk0gaW50ZXJmYWNlIHVwZGF0ZXMsCiAgICAgJ1VSTENsYXNzTG9hZGVyJyB1cGRhdGVzLgoKICAgKiBLZWxsZXkgQ29vayBmb3IgYnVpbGQgZml4ZXMuCgogICAqIE1hcnRpbiBDb3Jkb3ZhIGZvciBTdWdnZXN0aW9ucyBmb3IgYmV0dGVyICdTb2NrZXRUaW1lb3V0RXhjZXB0aW9uJy4KCiAgICogRGF2aWQgRGFuZXkgZm9yICdCaXRTZXQnIGJ1ZyBmaXhlcywgJ0h0dHBVUkxDb25uZWN0aW9uJyByZXdyaXRlIGFuZAogICAgIGltcHJvdmVtZW50cy4KCiAgICogVGhvbWFzIEZpdHpzaW1tb25zIGZvciBsb3RzIG9mIHVwZ3JhZGVzIHRvIHRoZSBndGsrIEFXVCBhbmQgQ2Fpcm8KICAgICAyRCBzdXBwb3J0LiAgTG90cyBvZiBpbWFnZWlvIGZyYW1ld29yayBhZGRpdGlvbnMsIGxvdHMgb2YgQVdUIGFuZAogICAgIEZyZWUgU3dpbmcgYnVnIGZpeGVzLgoKICAgKiBKZXJvZW4gRnJpanRlcnMgZm9yICdDbGFzc0xvYWRlcicgYW5kIG5pbyBjbGVhbnVwcywgc2VyaWFsaXphdGlvbgogICAgIGZpeGVzLCBiZXR0ZXIgJ1Byb3h5JyBzdXBwb3J0LCBidWcgZml4ZXMgYW5kIElLVk0gaW50ZWdyYXRpb24uCgogICAqIFNhbnRpYWdvIEdhbGEgZm9yICdBY2Nlc3NDb250cm9sQ29udGV4dCcgZml4ZXMuCgogICAqIE5pY29sYXMgR2VvZmZyYXkgZm9yICdWTUNsYXNzTG9hZGVyJyBhbmQgJ0FjY2Vzc0NvbnRyb2xsZXInCiAgICAgaW1wcm92ZW1lbnRzLgoKICAgKiBEYXZpZCBHaWxiZXJ0IGZvciAnYmFzaWMnIGFuZCAnbWV0YWwnIGljb24gYW5kIHBsYWYgc3VwcG9ydCBhbmQKICAgICBsb3RzIG9mIGRvY3VtZW50aW5nLCBMb3RzIG9mIEZyZWUgU3dpbmcgYW5kIG1ldGFsIHRoZW1lIGFkZGl0aW9ucy4KICAgICAnTWV0YWxJY29uRmFjdG9yeScgaW1wbGVtZW50YXRpb24uCgogICAqIEFudGhvbnkgR3JlZW4gZm9yICdNSURJJyBmcmFtZXdvcmssICdBTFNBJyBhbmQgJ0RTU0knIHByb3ZpZGVycy4KCiAgICogQW5kcmV3IEhhbGV5IGZvciAnU2VyaWFsaXphdGlvbicgYW5kICdVUkxDbGFzc0xvYWRlcicgZml4ZXMsIGdjagogICAgIGJ1aWxkIHNwZWVkdXBzLgoKICAgKiBLaW0gSG8gZm9yICdKRmlsZUNob29zZXInIGltcGxlbWVudGF0aW9uLgoKICAgKiBBbmRyZXcgSm9obiBIdWdoZXMgZm9yICdMb2NhbGUnIGFuZCBuZXQgZml4ZXMsIFVSSSBSRkMyOTg2IHVwZGF0ZXMsCiAgICAgJ1NlcmlhbGl6YXRpb24nIGZpeGVzLCAnUHJvcGVydGllcycgWE1MIHN1cHBvcnQgYW5kIGdlbmVyaWMgYnJhbmNoCiAgICAgd29yaywgVk1JbnRlZ3JhdGlvbiBndWlkZSB1cGRhdGUuCgogICAqIEJhc3RpYWFuIEh1aXNtYW4gZm9yICdUaW1lWm9uZScgYnVnIGZpeGluZy4KCiAgICogQW5kcmVhcyBKYWVnZXIgZm9yIG1wcmVjIHVwZGF0ZXMuCgogICAqIFBhdWwgSmVubmVyIGZvciBiZXR0ZXIgJy1XZXJyb3InIHN1cHBvcnQuCgogICAqIEl0byBLYXp1bWl0c3UgZm9yICdOZXR3b3JrSW50ZXJmYWNlJyBpbXBsZW1lbnRhdGlvbiBhbmQgdXBkYXRlcy4KCiAgICogUm9tYW4gS2VubmtlIGZvciAnQm94TGF5b3V0JywgJ0dyYXlGaWx0ZXInIGFuZCAnU3BsaXRQYW5lJywgcGx1cwogICAgIGJ1ZyBmaXhlcyBhbGwgb3Zlci4gIExvdHMgb2YgRnJlZSBTd2luZyB3b3JrIGluY2x1ZGluZyBzdHlsZWQgdGV4dC4KCiAgICogU2ltb24gS2l0Y2hpbmcgZm9yICdTdHJpbmcnIGNsZWFudXBzIGFuZCBvcHRpbWl6YXRpb24gc3VnZ2VzdGlvbnMuCgogICAqIE1pY2hhZWwgS29jaCBmb3IgY29uZmlndXJhdGlvbiBmaXhlcywgJ0xvY2FsZScgdXBkYXRlcywgYnVnIGFuZAogICAgIGJ1aWxkIGZpeGVzLgoKICAgKiBHdWlsaGVtIExhdmF1eCBmb3IgY29uZmlndXJhdGlvbiwgdGhyZWFkIGFuZCBjaGFubmVsIGZpeGVzIGFuZAogICAgIEthZmZlIGludGVncmF0aW9uLiAgSkNMIG5hdGl2ZSAnUG9pbnRlcicgdXBkYXRlcy4gIExvZ2dlciBidWcKICAgICBmaXhlcy4KCiAgICogRGF2aWQgTGljaHRlYmxhdSBmb3IgSkNMIHN1cHBvcnQgbGlicmFyeSBnbG9iYWwvbG9jYWwgcmVmZXJlbmNlCiAgICAgY2xlYW51cHMuCgogICAqIEFhcm9uIEx1Y2hrbyBmb3IgSkRXUCB1cGRhdGVzIGFuZCBkb2N1bWVudGF0aW9uIGZpeGVzLgoKICAgKiBaaWdhIE1haGtvdmVjIGZvciAnR3JhcGhpY3MyRCcgdXBncmFkZWQgdG8gQ2Fpcm8gMC41IGFuZCBuZXcgcmVnZXgKICAgICBmZWF0dXJlcy4KCiAgICogU3ZlbiBkZSBNYXJvdGh5IGZvciBCTVAgaW1hZ2VpbyBzdXBwb3J0LCBDU1MgYW5kICdUZXh0TGF5b3V0JwogICAgIGZpeGVzLiAgJ0d0a0ltYWdlJyByZXdyaXRlLCAyRCwgYXd0LCBmcmVlIHN3aW5nIGFuZCBkYXRlL3RpbWUgZml4ZXMKICAgICBhbmQgaW1wbGVtZW50aW5nIHRoZSBRdDQgcGVlcnMuCgogICAqIENhc2V5IE1hcnNoYWxsIGZvciBjcnlwdG8gYWxnb3JpdGhtIGZpeGVzLCAnRmlsZUNoYW5uZWwnIGxvY2ssCiAgICAgJ1N5c3RlbUxvZ2dlcicgYW5kICdGaWxlSGFuZGxlcicgcm90YXRlIGltcGxlbWVudGF0aW9ucywgTklPCiAgICAgJ0ZpbGVDaGFubmVsLm1hcCcgc3VwcG9ydCwgc2VjdXJpdHkgYW5kIHBvbGljeSB1cGRhdGVzLgoKICAgKiBCcnljZSBNY0tpbmxheSBmb3IgUk1JIHdvcmsuCgogICAqIEF1ZHJpdXMgTWVza2F1c2thcyBmb3IgbG90cyBvZiBGcmVlIENvcmJhLCBSTUkgYW5kIEhUTUwgd29yayBwbHVzCiAgICAgdGVzdGluZyBhbmQgZG9jdW1lbnRpbmcuCgogICAqIEthbGxlIE9sYXZpIE5pZW1pdGFsbyBmb3IgYnVpbGQgZml4ZXMuCgogICAqIFJhaW5lciBPcnRoIGZvciBidWlsZCBmaXhlcy4KCiAgICogQW5kcmV3IE92ZXJob2x0IGZvciAnRmlsZScgbG9ja2luZyBmaXhlcy4KCiAgICogSW5nbyBQcm9ldGVsIGZvciAnSW1hZ2UnLCAnTG9nZ2VyJyBhbmQgJ1VSTENsYXNzTG9hZGVyJyB1cGRhdGVzLgoKICAgKiBPbGdhIFJvZGltaW5hIGZvciAnTWVudVNlbGVjdGlvbk1hbmFnZXInIGltcGxlbWVudGF0aW9uLgoKICAgKiBKYW4gUm9laHJpY2ggZm9yICdCYXNpY1RyZWVVSScgYW5kICdKVHJlZScgZml4ZXMuCgogICAqIEp1bGlhbiBTY2hlaWQgZm9yIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgZ2pkb2Mgc3VwcG9ydC4KCiAgICogQ2hyaXN0aWFuIFNjaGxpY2h0aGVybGUgZm9yIHppcCBmaXhlcyBhbmQgY2xlYW51cHMuCgogICAqIFJvYmVydCBTY2h1c3RlciBmb3IgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFuZCBiZWFucyBmaXhlcywKICAgICAnVHJlZU5vZGUnIGVudW1lcmF0aW9ucyBhbmQgJ0FjdGlvbkNvbW1hbmQnIGFuZCB2YXJpb3VzIGZpeGVzLCBYTUwKICAgICBhbmQgVVJMLCBBV1QgYW5kIEZyZWUgU3dpbmcgYnVnIGZpeGVzLgoKICAgKiBLZWl0aCBTZWl0eiBmb3IgbG90cyBvZiBKRFdQIHdvcmsuCgogICAqIENocmlzdGlhbiBUaGFsaW5nZXIgZm9yIDY0LWJpdCBjbGVhbnVwcywgQ29uZmlndXJhdGlvbiBhbmQgVk0KICAgICBpbnRlcmZhY2UgZml4ZXMgYW5kICdDQUNBTycgaW50ZWdyYXRpb24sICdmZGxpYm0nIHVwZGF0ZXMuCgogICAqIEdhZWwgVGhvbWFzIGZvciAnVk1DbGFzc0xvYWRlcicgYm9vdCBwYWNrYWdlcyBzdXBwb3J0IHN1Z2dlc3Rpb25zLgoKICAgKiBBbmRyZWFzIFRvYmxlciBmb3IgRGFyd2luIGFuZCBTb2xhcmlzIHRlc3RpbmcgYW5kIGZpeGluZywgJ1F0NCcKICAgICBzdXBwb3J0IGZvciBEYXJ3aW4vT1MgWCwgJ0dyYXBoaWNzMkQnIHN1cHBvcnQsICdndGsrJyB1cGRhdGVzLgoKICAgKiBEYWxpYm9yIFRvcGljIGZvciBiZXR0ZXIgJ0RFQlVHJyBzdXBwb3J0LCBidWlsZCBjbGVhbnVwcyBhbmQgS2FmZmUKICAgICBpbnRlZ3JhdGlvbi4gICdRdDQnIGJ1aWxkIGluZnJhc3RydWN0dXJlLCAnU0hBMVBSTkcnIGFuZAogICAgICdHZGtQaXhidWdEZWNvZGVyJyB1cGRhdGVzLgoKICAgKiBUb20gVHJvbWV5IGZvciBFY2xpcHNlIGludGVncmF0aW9uLCBnZW5lcmljcyB3b3JrLCBsb3RzIG9mIGJ1ZwogICAgIGZpeGVzIGFuZCBnY2ogaW50ZWdyYXRpb24gaW5jbHVkaW5nIGNvb3JkaW5hdGluZyBUaGUgQmlnIE1lcmdlLgoKICAgKiBNYXJrIFdpZWxhYXJkIGZvciBidWcgZml4ZXMsIHBhY2thZ2luZyBhbmQgcmVsZWFzZSBtYW5hZ2VtZW50LAogICAgICdDbGlwYm9hcmQnIGltcGxlbWVudGF0aW9uLCBzeXN0ZW0gY2FsbCBpbnRlcnJ1cHRzIGFuZCBuZXR3b3JrCiAgICAgdGltZW91dHMgYW5kICdHZGtQaXhwdWZEZWNvZGVyJyBmaXhlcy4KCiBJbiBhZGRpdGlvbiB0byB0aGUgYWJvdmUsIGFsbCBvZiB3aGljaCBhbHNvIGNvbnRyaWJ1dGVkIHRpbWUgYW5kIGVuZXJneQppbiB0ZXN0aW5nIEdDQywgd2Ugd291bGQgbGlrZSB0byB0aGFuayB0aGUgZm9sbG93aW5nIGZvciB0aGVpcgpjb250cmlidXRpb25zIHRvIHRlc3Rpbmc6CgogICAqIE1pY2hhZWwgQWJkLUVsLU1hbGVrCgogICAqIFRob21hcyBBcmVuZAoKICAgKiBCb256byBBcm1zdHJvbmcKCiAgICogU3RldmVuIEFzaGUKCiAgICogQ2hyaXMgQmFsZHdpbgoKICAgKiBEYXZpZCBCaWxsaW5naHVyc3QKCiAgICogSmltIEJsYW5keQoKICAgKiBTdGVwaGFuZSBCb3J0em1leWVyCgogICAqIEhvcnN0IHZvbiBCcmFuZAoKICAgKiBGcmFuayBCcmF1bgoKICAgKiBSb2RuZXkgQnJvd24KCiAgICogU2lkbmV5IENhZG90CgogICAqIEJyYWRmb3JkIENhc3RhbGlhCgogICAqIEpvbmF0aGFuIENvcmJldAoKICAgKiBSYWxwaCBEb25jYXN0ZXIKCiAgICogUmljaGFyZCBFbWJlcnNvbgoKICAgKiBMZXZlbnRlIEZhcmthcwoKICAgKiBHcmFoYW0gRmF3Y2V0dAoKICAgKiBNYXJrIEZlcm55aG91Z2gKCiAgICogUm9iZXJ0IEEuIEZyZW5jaAoKICAgKiBKbyJyZ2VuIEZyZXloCgogICAqIE1hcmsgSy4gR2FyZG5lcgoKICAgKiBDaGFybGVzLUFudG9pbmUgR2F1dGhpZXIKCiAgICogWXVuZyBTaGluZyBHZW5lCgogICAqIERhdmlkIEdpbGJlcnQKCiAgICogU2ltb24gR29ybmFsbAoKICAgKiBGcmVkIEdyYXkKCiAgICogSm9obiBHcmlmZmluCgogICAqIFBhdHJpayBIYWdnbHVuZAoKICAgKiBQaGlsIEhhcmdldHQKCiAgICogQW1hbmNpbyBIYXN0eQoKICAgKiBUYWthZnVtaSBIYXlhc2hpCgogICAqIEJyeWFuIFcuIEhlYWRsZXkKCiAgICogS2V2aW4gQi4gSGVuZHJpY2tzCgogICAqIEpvZXAgSmFuc2VuCgogICAqIENocmlzdGlhbiBKb2Vuc3NvbgoKICAgKiBNaWNoZWwgS2VybgoKICAgKiBEYXZpZCBLaWRkCgogICAqIFRvYmlhcyBLdWlwZXJzCgogICAqIEFuYW5kIEtyaXNobmFzd2FteQoKICAgKiBBLiBPLiBWLiBMZSBCbGFuYwoKICAgKiBsbGV3ZWxseQoKICAgKiBEYW1vbiBMb3ZlCgogICAqIEJyYWQgTHVjaWVyCgogICAqIE1hdHRoaWFzIEtsb3NlCgogICAqIE1hcnRpbiBLbm9ibGF1Y2gKCiAgICogUmljayBMdXRvd3NraQoKICAgKiBKZXNzZSBNYWNuaXNoCgogICAqIFN0ZWZhbiBNb3JyZWxsCgogICAqIEFub24gQS4gTW91cwoKICAgKiBNYXR0aGlhcyBNdWVsbGVyCgogICAqIFBla2thIE5pa2FuZGVyCgogICAqIFJpY2sgTmlsZXMKCiAgICogSm9uIE9sc29uCgogICAqIE1hZ251cyBQZXJzc29uCgogICAqIENocmlzIFBvbGxhcmQKCiAgICogUmljaGFyZCBQb2x0b24KCiAgICogRGVyayBSZWVmbWFuCgogICAqIERhdmlkIFJlZXMKCiAgICogUGF1bCBSZWlsbHkKCiAgICogVG9tIFJlaWxseQoKICAgKiBUb3JzdGVuIFJ1ZWdlcgoKICAgKiBEYW5ueSBTYWRpbm9mZgoKICAgKiBNYXJjIFNjaGlmZXIKCiAgICogRXJpayBTY2huZXR0ZXIKCiAgICogV2F5bmUgSy4gU2Nocm9sbAoKICAgKiBEYXZpZCBTY2h1bGVyCgogICAqIFZpbiBTaGVsdG9uCgogICAqIFRpbSBTb3VkZXIKCiAgICogQWRhbSBTdWxtaWNraQoKICAgKiBCaWxsIFRob3Jzb24KCiAgICogR2VvcmdlIFRhbGJvdAoKICAgKiBQZWRybyBBLiBNLiBWYXpxdWV6CgogICAqIEdyZWdvcnkgV2FybmVzCgogICAqIElhbiBXYXRzb24KCiAgICogRGF2aWQgRS4gWW91bmcKCiAgICogQW5kIG1hbnkgb3RoZXJzCgogQW5kIGZpbmFsbHkgd2UnZCBsaWtlIHRvIHRoYW5rIGV2ZXJ5b25lIHdobyB1c2VzIHRoZSBjb21waWxlciwgc3VibWl0cwpidWcgcmVwb3J0cyBhbmQgZ2VuZXJhbGx5IHJlbWluZHMgdXMgd2h5IHdlJ3JlIGRvaW5nIHRoaXMgd29yayBpbiB0aGUKZmlyc3QgcGxhY2UuCgofCkZpbGU6IGdjY2ludC5pbmZvLCAgTm9kZTogT3B0aW9uIEluZGV4LCAgTmV4dDogQ29uY2VwdCBJbmRleCwgIFByZXY6IENvbnRyaWJ1dG9ycywgIFVwOiBUb3AKCk9wdGlvbiBJbmRleAoqKioqKioqKioqKioKCkdDQydzIGNvbW1hbmQgbGluZSBvcHRpb25zIGFyZSBpbmRleGVkIGhlcmUgd2l0aG91dCBhbnkgaW5pdGlhbCAnLScgb3IKJy0tJy4gIFdoZXJlIGFuIG9wdGlvbiBoYXMgYm90aCBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUgZm9ybXMgKHN1Y2ggYXMKJy1mT1BUSU9OJyBhbmQgJy1mbm8tT1BUSU9OJyksIHJlbGV2YW50IGVudHJpZXMgaW4gdGhlIG1hbnVhbCBhcmUKaW5kZXhlZCB1bmRlciB0aGUgbW9zdCBhcHByb3ByaWF0ZSBmb3JtOyBpdCBtYXkgc29tZXRpbWVzIGJlIHVzZWZ1bCB0bwpsb29rIHVwIGJvdGggZm9ybXMuCgoACFtpbmRleAAIXQoqIE1lbnU6CgoqIG1zb2Z0LWZsb2F0OiAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvZnQgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDYpCgofCkZpbGU6IGdjY2ludC5pbmZvLCAgTm9kZTogQ29uY2VwdCBJbmRleCwgIFByZXY6IE9wdGlvbiBJbmRleCwgIFVwOiBUb3AKCkNvbmNlcHQgSW5kZXgKKioqKioqKioqKioqKgoKAAhbaW5kZXgACF0KKiBNZW51OgoKKiAnIScgaW4gY29uc3RyYWludDogICAgICAgICAgICAgICAgICAgICBNdWx0aS1BbHRlcm5hdGl2ZS4gIChsaW5lICAgNDcpCiogJyMnIGluIGNvbnN0cmFpbnQ6ICAgICAgICAgICAgICAgICAgICAgTW9kaWZpZXJzLiAgICAgICAgICAobGluZSAgIDY3KQoqICcjJyBpbiB0ZW1wbGF0ZTogICAgICAgICAgICAgICAgICAgICAgIE91dHB1dCBUZW1wbGF0ZS4gICAgKGxpbmUgICA2NikKKiAjcHJhZ21hOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNaXNjLiAgICAgICAgICAgICAgIChsaW5lICAzODApCiogI3ByYWdtYSA8MT46ICAgICAgICAgICAgICAgICAgICAgICAgICAgTWlzYy4gICAgICAgICAgICAgICAobGluZSAgNDM1KQoqICNwcmFnbWEgPDI+OiAgICAgICAgICAgICAgICAgICAgICAgICAgIE1pc2MuICAgICAgICAgICAgICAgKGxpbmUgIDQ2NCkKKiAjcHJhZ21hIDwzPjogICAgICAgICAgICAgICAgICAgICAgICAgICBNaXNjLiAgICAgICAgICAgICAgIChsaW5lICA0ODUpCiogJyUnIGluIGNvbnN0cmFpbnQ6ICAgICAgICAgICAgICAgICAgICAgTW9kaWZpZXJzLiAgICAgICAgICAobGluZSAgIDQ1KQoqICUgaW4gR1RZIG9wdGlvbjogICAgICAgICAgICAgICAgICAgICAgIEdUWSBPcHRpb25zLiAgICAgICAgKGxpbmUgICAxOCkKKiAnJScgaW4gdGVtcGxhdGU6ICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQgVGVtcGxhdGUuICAgIChsaW5lICAgIDYpCiogJyYnIGluIGNvbnN0cmFpbnQ6ICAgICAgICAgICAgICAgICAgICAgTW9kaWZpZXJzLiAgICAgICAgICAobGluZSAgIDI1KQoqIChuaWwpOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJUTCBPYmplY3RzLiAgICAgICAgKGxpbmUgICA3MykKKiAodm9pZCk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWN0aW9ucy4gICAgICAgICAgIChsaW5lICAxNTkpCiogKjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSG9zdCBDb21tb24uICAgICAgICAobGluZSAgIDE1KQoqICcqJyBpbiBjb25zdHJhaW50OiAgICAgICAgICAgICAgICAgICAgIE1vZGlmaWVycy4gICAgICAgICAgKGxpbmUgICA3MikKKiAnKicgaW4gdGVtcGxhdGU6ICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQgU3RhdGVtZW50LiAgIChsaW5lICAgMjkpCiogKlRBUkdFVF9HRVRfUENIX1ZBTElESVRZOiAgICAgICAgICAgICAgUENIIFRhcmdldC4gICAgICAgICAobGluZSAgICA2KQoqICcrJyBpbiBjb25zdHJhaW50OiAgICAgICAgICAgICAgICAgICAgIE1vZGlmaWVycy4gICAgICAgICAgKGxpbmUgICAxMikKKiAnLWZzZWN0aW9uLWFuY2hvcnMnOiAgICAgICAgICAgICAgICAgICBTcGVjaWFsIEFjY2Vzc29ycy4gIChsaW5lICAxMDMpCiogJy1mc2VjdGlvbi1hbmNob3JzJyA8MT46ICAgICAgICAgICAgICAgQW5jaG9yZWQgQWRkcmVzc2VzLiAobGluZSAgICA2KQoqICcvYycgaW4gUlRMIGR1bXA6ICAgICAgICAgICAgICAgICAgICAgIEZsYWdzLiAgICAgICAgICAgICAgKGxpbmUgIDIxOSkKKiAnL2YnIGluIFJUTCBkdW1wOiAgICAgICAgICAgICAgICAgICAgICBGbGFncy4gICAgICAgICAgICAgIChsaW5lICAyMjQpCiogJy9pJyBpbiBSVEwgZHVtcDogICAgICAgICAgICAgICAgICAgICAgRmxhZ3MuICAgICAgICAgICAgICAobGluZSAgMjc2KQoqICcvaicgaW4gUlRMIGR1bXA6ICAgICAgICAgICAgICAgICAgICAgIEZsYWdzLiAgICAgICAgICAgICAgKGxpbmUgIDI4OSkKKiAnL3MnIGluIFJUTCBkdW1wOiAgICAgICAgICAgICAgICAgICAgICBGbGFncy4gICAgICAgICAgICAgIChsaW5lICAyNDApCiogJy91JyBpbiBSVEwgZHVtcDogICAgICAgICAgICAgICAgICAgICAgRmxhZ3MuICAgICAgICAgICAgICAobGluZSAgMjk5KQoqICcvdicgaW4gUlRMIGR1bXA6ICAgICAgICAgICAgICAgICAgICAgIEZsYWdzLiAgICAgICAgICAgICAgKGxpbmUgIDMzMSkKKiAnMCcgaW4gY29uc3RyYWludDogICAgICAgICAgICAgICAgICAgICBTaW1wbGUgQ29uc3RyYWludHMuIChsaW5lICAxMTcpCiogJzwnIGluIGNvbnN0cmFpbnQ6ICAgICAgICAgICAgICAgICAgICAgU2ltcGxlIENvbnN0cmFpbnRzLiAobGluZSAgIDQ1KQoqICc9JyBpbiBjb25zdHJhaW50OiAgICAgICAgICAgICAgICAgICAgIE1vZGlmaWVycy4gICAgICAgICAgKGxpbmUgICAgOCkKKiAnPicgaW4gY29uc3RyYWludDogICAgICAgICAgICAgICAgICAgICBTaW1wbGUgQ29uc3RyYWludHMuIChsaW5lICAgNDkpCiogJz8nIGluIGNvbnN0cmFpbnQ6ICAgICAgICAgICAgICAgICAgICAgTXVsdGktQWx0ZXJuYXRpdmUuICAobGluZSAgIDQxKQoqIFw6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dCBUZW1wbGF0ZS4gICAgKGxpbmUgICA0NikKKiBfX2Fic3ZkaTI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlZ2VyIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMTA2KQoqIF9fYWJzdnNpMjogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVnZXIgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxMDUpCiogX19hZGRkYTM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA0NCkKKiBfX2FkZGRmMzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb2Z0IGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDIyKQoqIF9fYWRkZHEzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgMzEpCiogX19hZGRoYTM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA0MSkKKiBfX2FkZGhxMzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDI5KQoqIF9fYWRkcXEzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgMjcpCiogX19hZGRzYTM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA0MykKKiBfX2FkZHNmMzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb2Z0IGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDIxKQoqIF9fYWRkc3EzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgMzApCiogX19hZGR0YTM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA0NSkKKiBfX2FkZHRmMzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb2Z0IGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDIzKQoqIF9fYWRkdWRhMzogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgNTEpCiogX19hZGR1ZHEzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICAzOSkKKiBfX2FkZHVoYTM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDQ3KQoqIF9fYWRkdWhxMzogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgMzUpCiogX19hZGR1cXEzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICAzMykKKiBfX2FkZHVzYTM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDQ5KQoqIF9fYWRkdXNxMzogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgMzcpCiogX19hZGR1dGEzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA1MykKKiBfX2FkZHZkaTM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlZ2VyIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMTEwKQoqIF9fYWRkdnNpMzogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVnZXIgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxMDkpCiogX19hZGR4ZjM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29mdCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICAyNSkKKiBfX2FzaGxkYTM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMzUwKQoqIF9fYXNobGRpMzogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVnZXIgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgMTMpCiogX19hc2hsZHEzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDMzOCkKKiBfX2FzaGxoYTM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMzQ4KQoqIF9fYXNobGhxMzogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAzMzYpCiogX19hc2hscXEzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDMzNSkKKiBfX2FzaGxzYTM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMzQ5KQoqIF9fYXNobHNpMzogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVnZXIgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgMTIpCiogX19hc2hsc3EzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDMzNykKKiBfX2FzaGx0YTM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMzUxKQoqIF9fYXNobHRpMzogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVnZXIgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgMTQpCiogX19hc2hsdWRhMzogICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDM1NykKKiBfX2FzaGx1ZHEzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMzQ2KQoqIF9fYXNobHVoYTM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAzNTMpCiogX19hc2hsdWhxMzogICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDM0MikKKiBfX2FzaGx1cXEzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMzQwKQoqIF9fYXNobHVzYTM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAzNTUpCiogX19hc2hsdXNxMzogICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDM0NCkKKiBfX2FzaGx1dGEzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMzU5KQoqIF9fYXNocmRhMzogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAzNzApCiogX19hc2hyZGkzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWdlciBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICAxOCkKKiBfX2FzaHJkcTM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMzY2KQoqIF9fYXNocmhhMzogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAzNjgpCiogX19hc2hyaHEzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDM2NCkKKiBfX2FzaHJxcTM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMzYzKQoqIF9fYXNocnNhMzogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAzNjkpCiogX19hc2hyc2kzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWdlciBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICAxNykKKiBfX2FzaHJzcTM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMzY1KQoqIF9fYXNocnRhMzogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAzNzEpCiogX19hc2hydGkzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWdlciBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICAxOSkKKiBfX2JpZF9hZGRkZDM6ICAgICAgICAgICAgICAgICAgICAgICAgICBEZWNpbWFsIGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDIyKQoqIF9fYmlkX2FkZHNkMzogICAgICAgICAgICAgICAgICAgICAgICAgIERlY2ltYWwgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgMTgpCiogX19iaWRfYWRkdGQzOiAgICAgICAgICAgICAgICAgICAgICAgICAgRGVjaW1hbCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICAyNikKKiBfX2JpZF9kaXZkZDM6ICAgICAgICAgICAgICAgICAgICAgICAgICBEZWNpbWFsIGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDY1KQoqIF9fYmlkX2RpdnNkMzogICAgICAgICAgICAgICAgICAgICAgICAgIERlY2ltYWwgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgNjEpCiogX19iaWRfZGl2dGQzOiAgICAgICAgICAgICAgICAgICAgICAgICAgRGVjaW1hbCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA2OSkKKiBfX2JpZF9lcWRkMjogICAgICAgICAgICAgICAgICAgICAgICAgICBEZWNpbWFsIGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMjU3KQoqIF9fYmlkX2Vxc2QyOiAgICAgICAgICAgICAgICAgICAgICAgICAgIERlY2ltYWwgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAyNTUpCiogX19iaWRfZXF0ZDI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVjaW1hbCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDI1OSkKKiBfX2JpZF9leHRlbmRkZHRkMjogICAgICAgICAgICAgICAgICAgICBEZWNpbWFsIGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDkwKQoqIF9fYmlkX2V4dGVuZGRkdGY6ICAgICAgICAgICAgICAgICAgICAgIERlY2ltYWwgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxMzgpCiogX19iaWRfZXh0ZW5kZGR4ZjogICAgICAgICAgICAgICAgICAgICAgRGVjaW1hbCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDEzMikKKiBfX2JpZF9leHRlbmRkZmRkOiAgICAgICAgICAgICAgICAgICAgICBEZWNpbWFsIGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMTQ1KQoqIF9fYmlkX2V4dGVuZGRmdGQ6ICAgICAgICAgICAgICAgICAgICAgIERlY2ltYWwgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxMDUpCiogX19iaWRfZXh0ZW5kc2RkZDI6ICAgICAgICAgICAgICAgICAgICAgRGVjaW1hbCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA4NikKKiBfX2JpZF9leHRlbmRzZGRmOiAgICAgICAgICAgICAgICAgICAgICBEZWNpbWFsIGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMTI2KQoqIF9fYmlkX2V4dGVuZHNkdGQyOiAgICAgICAgICAgICAgICAgICAgIERlY2ltYWwgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgODgpCiogX19iaWRfZXh0ZW5kc2R0ZjogICAgICAgICAgICAgICAgICAgICAgRGVjaW1hbCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDEzNikKKiBfX2JpZF9leHRlbmRzZHhmOiAgICAgICAgICAgICAgICAgICAgICBEZWNpbWFsIGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMTMwKQoqIF9fYmlkX2V4dGVuZHNmZGQ6ICAgICAgICAgICAgICAgICAgICAgIERlY2ltYWwgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxMDEpCiogX19iaWRfZXh0ZW5kc2ZzZDogICAgICAgICAgICAgICAgICAgICAgRGVjaW1hbCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDE0MykKKiBfX2JpZF9leHRlbmRzZnRkOiAgICAgICAgICAgICAgICAgICAgICBEZWNpbWFsIGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMTAzKQoqIF9fYmlkX2V4dGVuZHRmdGQ6ICAgICAgICAgICAgICAgICAgICAgIERlY2ltYWwgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxNDcpCiogX19iaWRfZXh0ZW5keGZ0ZDogICAgICAgICAgICAgICAgICAgICAgRGVjaW1hbCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDEwNykKKiBfX2JpZF9maXhkZGRpOiAgICAgICAgICAgICAgICAgICAgICAgICBEZWNpbWFsIGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMTY4KQoqIF9fYmlkX2ZpeGRkc2k6ICAgICAgICAgICAgICAgICAgICAgICAgIERlY2ltYWwgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxNjApCiogX19iaWRfZml4c2RkaTogICAgICAgICAgICAgICAgICAgICAgICAgRGVjaW1hbCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDE2NikKKiBfX2JpZF9maXhzZHNpOiAgICAgICAgICAgICAgICAgICAgICAgICBEZWNpbWFsIGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMTU4KQoqIF9fYmlkX2ZpeHRkZGk6ICAgICAgICAgICAgICAgICAgICAgICAgIERlY2ltYWwgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxNzApCiogX19iaWRfZml4dGRzaTogICAgICAgICAgICAgICAgICAgICAgICAgRGVjaW1hbCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDE2MikKKiBfX2JpZF9maXh1bnNkZGRpOiAgICAgICAgICAgICAgICAgICAgICBEZWNpbWFsIGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMTg1KQoqIF9fYmlkX2ZpeHVuc2Rkc2k6ICAgICAgICAgICAgICAgICAgICAgIERlY2ltYWwgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxNzYpCiogX19iaWRfZml4dW5zc2RkaTogICAgICAgICAgICAgICAgICAgICAgRGVjaW1hbCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDE4MykKKiBfX2JpZF9maXh1bnNzZHNpOiAgICAgICAgICAgICAgICAgICAgICBEZWNpbWFsIGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMTc0KQoqIF9fYmlkX2ZpeHVuc3RkZGk6ICAgICAgICAgICAgICAgICAgICAgIERlY2ltYWwgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxODcpCiogX19iaWRfZml4dW5zdGRzaTogICAgICAgICAgICAgICAgICAgICAgRGVjaW1hbCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDE3OCkKKiBfX2JpZF9mbG9hdGRpZGQ6ICAgICAgICAgICAgICAgICAgICAgICBEZWNpbWFsIGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMjAzKQoqIF9fYmlkX2Zsb2F0ZGlzZDogICAgICAgICAgICAgICAgICAgICAgIERlY2ltYWwgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAyMDEpCiogX19iaWRfZmxvYXRkaXRkOiAgICAgICAgICAgICAgICAgICAgICAgRGVjaW1hbCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDIwNSkKKiBfX2JpZF9mbG9hdHNpZGQ6ICAgICAgICAgICAgICAgICAgICAgICBEZWNpbWFsIGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMTk0KQoqIF9fYmlkX2Zsb2F0c2lzZDogICAgICAgICAgICAgICAgICAgICAgIERlY2ltYWwgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxOTIpCiogX19iaWRfZmxvYXRzaXRkOiAgICAgICAgICAgICAgICAgICAgICAgRGVjaW1hbCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDE5NikKKiBfX2JpZF9mbG9hdHVuc2RpZGQ6ICAgICAgICAgICAgICAgICAgICBEZWNpbWFsIGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMjIxKQoqIF9fYmlkX2Zsb2F0dW5zZGlzZDogICAgICAgICAgICAgICAgICAgIERlY2ltYWwgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAyMTkpCiogX19iaWRfZmxvYXR1bnNkaXRkOiAgICAgICAgICAgICAgICAgICAgRGVjaW1hbCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDIyMykKKiBfX2JpZF9mbG9hdHVuc3NpZGQ6ICAgICAgICAgICAgICAgICAgICBEZWNpbWFsIGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMjEyKQoqIF9fYmlkX2Zsb2F0dW5zc2lzZDogICAgICAgICAgICAgICAgICAgIERlY2ltYWwgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAyMTApCiogX19iaWRfZmxvYXR1bnNzaXRkOiAgICAgICAgICAgICAgICAgICAgRGVjaW1hbCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDIxNCkKKiBfX2JpZF9nZWRkMjogICAgICAgICAgICAgICAgICAgICAgICAgICBEZWNpbWFsIGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMjc1KQoqIF9fYmlkX2dlc2QyOiAgICAgICAgICAgICAgICAgICAgICAgICAgIERlY2ltYWwgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAyNzMpCiogX19iaWRfZ2V0ZDI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVjaW1hbCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDI3NykKKiBfX2JpZF9ndGRkMjogICAgICAgICAgICAgICAgICAgICAgICAgICBEZWNpbWFsIGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMzAyKQoqIF9fYmlkX2d0c2QyOiAgICAgICAgICAgICAgICAgICAgICAgICAgIERlY2ltYWwgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAzMDApCiogX19iaWRfZ3R0ZDI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVjaW1hbCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDMwNCkKKiBfX2JpZF9sZWRkMjogICAgICAgICAgICAgICAgICAgICAgICAgICBEZWNpbWFsIGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMjkzKQoqIF9fYmlkX2xlc2QyOiAgICAgICAgICAgICAgICAgICAgICAgICAgIERlY2ltYWwgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAyOTEpCiogX19iaWRfbGV0ZDI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVjaW1hbCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDI5NSkKKiBfX2JpZF9sdGRkMjogICAgICAgICAgICAgICAgICAgICAgICAgICBEZWNpbWFsIGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMjg0KQoqIF9fYmlkX2x0c2QyOiAgICAgICAgICAgICAgICAgICAgICAgICAgIERlY2ltYWwgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAyODIpCiogX19iaWRfbHR0ZDI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVjaW1hbCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDI4NikKKiBfX2JpZF9tdWxkZDM6ICAgICAgICAgICAgICAgICAgICAgICAgICBEZWNpbWFsIGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDUxKQoqIF9fYmlkX211bHNkMzogICAgICAgICAgICAgICAgICAgICAgICAgIERlY2ltYWwgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgNDcpCiogX19iaWRfbXVsdGQzOiAgICAgICAgICAgICAgICAgICAgICAgICAgRGVjaW1hbCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA1NSkKKiBfX2JpZF9uZWRkMjogICAgICAgICAgICAgICAgICAgICAgICAgICBEZWNpbWFsIGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMjY2KQoqIF9fYmlkX25lZ2RkMjogICAgICAgICAgICAgICAgICAgICAgICAgIERlY2ltYWwgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgNzYpCiogX19iaWRfbmVnc2QyOiAgICAgICAgICAgICAgICAgICAgICAgICAgRGVjaW1hbCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA3NCkKKiBfX2JpZF9uZWd0ZDI6ICAgICAgICAgICAgICAgICAgICAgICAgICBEZWNpbWFsIGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDc4KQoqIF9fYmlkX25lc2QyOiAgICAgICAgICAgICAgICAgICAgICAgICAgIERlY2ltYWwgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAyNjQpCiogX19iaWRfbmV0ZDI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVjaW1hbCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDI2OCkKKiBfX2JpZF9zdWJkZDM6ICAgICAgICAgICAgICAgICAgICAgICAgICBEZWNpbWFsIGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDM2KQoqIF9fYmlkX3N1YnNkMzogICAgICAgICAgICAgICAgICAgICAgICAgIERlY2ltYWwgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgMzIpCiogX19iaWRfc3VidGQzOiAgICAgICAgICAgICAgICAgICAgICAgICAgRGVjaW1hbCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA0MCkKKiBfX2JpZF90cnVuY2RkZGY6ICAgICAgICAgICAgICAgICAgICAgICBEZWNpbWFsIGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMTUxKQoqIF9fYmlkX3RydW5jZGRzZDI6ICAgICAgICAgICAgICAgICAgICAgIERlY2ltYWwgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgOTIpCiogX19iaWRfdHJ1bmNkZHNmOiAgICAgICAgICAgICAgICAgICAgICAgRGVjaW1hbCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDEyMikKKiBfX2JpZF90cnVuY2Rmc2Q6ICAgICAgICAgICAgICAgICAgICAgICBEZWNpbWFsIGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMTA5KQoqIF9fYmlkX3RydW5jc2RzZjogICAgICAgICAgICAgICAgICAgICAgIERlY2ltYWwgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxNDkpCiogX19iaWRfdHJ1bmN0ZGRkMjogICAgICAgICAgICAgICAgICAgICAgRGVjaW1hbCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA5NikKKiBfX2JpZF90cnVuY3RkZGY6ICAgICAgICAgICAgICAgICAgICAgICBEZWNpbWFsIGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMTI4KQoqIF9fYmlkX3RydW5jdGRzZDI6ICAgICAgICAgICAgICAgICAgICAgIERlY2ltYWwgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgOTQpCiogX19iaWRfdHJ1bmN0ZHNmOiAgICAgICAgICAgICAgICAgICAgICAgRGVjaW1hbCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDEyNCkKKiBfX2JpZF90cnVuY3RkdGY6ICAgICAgICAgICAgICAgICAgICAgICBEZWNpbWFsIGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMTUzKQoqIF9fYmlkX3RydW5jdGR4ZjogICAgICAgICAgICAgICAgICAgICAgIERlY2ltYWwgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxMzQpCiogX19iaWRfdHJ1bmN0ZmRkOiAgICAgICAgICAgICAgICAgICAgICAgRGVjaW1hbCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDExNykKKiBfX2JpZF90cnVuY3Rmc2Q6ICAgICAgICAgICAgICAgICAgICAgICBEZWNpbWFsIGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMTEzKQoqIF9fYmlkX3RydW5jeGZkZDogICAgICAgICAgICAgICAgICAgICAgIERlY2ltYWwgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxMTUpCiogX19iaWRfdHJ1bmN4ZnNkOiAgICAgICAgICAgICAgICAgICAgICAgRGVjaW1hbCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDExMSkKKiBfX2JpZF91bm9yZGRkMjogICAgICAgICAgICAgICAgICAgICAgICBEZWNpbWFsIGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMjMzKQoqIF9fYmlkX3Vub3Jkc2QyOiAgICAgICAgICAgICAgICAgICAgICAgIERlY2ltYWwgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAyMzEpCiogX19iaWRfdW5vcmR0ZDI6ICAgICAgICAgICAgICAgICAgICAgICAgRGVjaW1hbCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDIzNSkKKiBfX2Jzd2FwZGkyOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlZ2VyIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMTYxKQoqIF9fYnN3YXBzaTI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVnZXIgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxNjApCiogX19idWlsdGluX2FyZ3NfaW5mbzogICAgICAgICAgICAgICAgICAgVmFyYXJncy4gICAgICAgICAgICAobGluZSAgIDM5KQoqIF9fYnVpbHRpbl9jbGFzc2lmeV90eXBlOiAgICAgICAgICAgICAgIFZhcmFyZ3MuICAgICAgICAgICAgKGxpbmUgICA3MykKKiBfX2J1aWx0aW5fbmV4dF9hcmc6ICAgICAgICAgICAgICAgICAgICBWYXJhcmdzLiAgICAgICAgICAgIChsaW5lICAgNjMpCiogX19idWlsdGluX3NhdmVyZWdzOiAgICAgICAgICAgICAgICAgICAgVmFyYXJncy4gICAgICAgICAgICAobGluZSAgIDIyKQoqIF9fY2xlYXJfY2FjaGU6ICAgICAgICAgICAgICAgICAgICAgICAgIE1pc2NlbGxhbmVvdXMgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgICA5KQoqIF9fY2x6ZGkyOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVnZXIgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxMzApCiogX19jbHpzaTI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWdlciBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDEyOSkKKiBfX2NsenRpMjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlZ2VyIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMTMxKQoqIF9fY21wZGEyOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA0NTApCiogX19jbXBkZjI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29mdCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDE2MykKKiBfX2NtcGRpMjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlZ2VyIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDg2KQoqIF9fY21wZHEyOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA0MzkpCiogX19jbXBoYTI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDQ0OCkKKiBfX2NtcGhxMjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNDM3KQoqIF9fY21wcXEyOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA0MzYpCiogX19jbXBzYTI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDQ0OSkKKiBfX2NtcHNmMjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb2Z0IGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMTYyKQoqIF9fY21wc3EyOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA0MzgpCiogX19jbXB0YTI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDQ1MSkKKiBfX2NtcHRmMjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb2Z0IGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMTY0KQoqIF9fY21wdGkyOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVnZXIgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgODcpCiogX19jbXB1ZGEyOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDQ1NikKKiBfX2NtcHVkcTI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNDQ2KQoqIF9fY21wdWhhMjogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA0NTMpCiogX19jbXB1aHEyOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDQ0MykKKiBfX2NtcHVxcTI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNDQxKQoqIF9fY21wdXNhMjogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA0NTUpCiogX19jbXB1c3EyOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDQ0NCkKKiBfX2NtcHV0YTI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNDU4KQoqIF9fQ1RPUl9MSVNUX186ICAgICAgICAgICAgICAgICAgICAgICAgIEluaXRpYWxpemF0aW9uLiAgICAgKGxpbmUgICAyNSkKKiBfX2N0emRpMjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlZ2VyIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMTM3KQoqIF9fY3R6c2kyOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVnZXIgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxMzYpCiogX19jdHp0aTI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWdlciBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDEzOCkKKiBfX2RpdmRhMzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMjI2KQoqIF9fZGl2ZGMzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvZnQgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAyNTApCiogX19kaXZkZjM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29mdCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA0NykKKiBfX2RpdmRpMzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlZ2VyIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDI0KQoqIF9fZGl2ZHEzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAyMjEpCiogX19kaXZoYTM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDIyMykKKiBfX2RpdmhxMzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMjE5KQoqIF9fZGl2cXEzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAyMTcpCiogX19kaXZzYTM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDIyNSkKKiBfX2RpdnNjMzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb2Z0IGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMjQ4KQoqIF9fZGl2c2YzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvZnQgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgNDYpCiogX19kaXZzaTM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWdlciBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICAyMykKKiBfX2RpdnNxMzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMjIwKQoqIF9fZGl2dGEzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAyMjcpCiogX19kaXZ0YzM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29mdCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDI1MikKKiBfX2RpdnRmMzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb2Z0IGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDQ4KQoqIF9fZGl2dGkzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVnZXIgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgMjUpCiogX19kaXZ4YzM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29mdCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDI1NCkKKiBfX2RpdnhmMzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb2Z0IGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDUwKQoqIF9fZHBkX2FkZGRkMzogICAgICAgICAgICAgICAgICAgICAgICAgIERlY2ltYWwgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgMjApCiogX19kcGRfYWRkc2QzOiAgICAgICAgICAgICAgICAgICAgICAgICAgRGVjaW1hbCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICAxNikKKiBfX2RwZF9hZGR0ZDM6ICAgICAgICAgICAgICAgICAgICAgICAgICBEZWNpbWFsIGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDI0KQoqIF9fZHBkX2RpdmRkMzogICAgICAgICAgICAgICAgICAgICAgICAgIERlY2ltYWwgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgNjMpCiogX19kcGRfZGl2c2QzOiAgICAgICAgICAgICAgICAgICAgICAgICAgRGVjaW1hbCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA1OSkKKiBfX2RwZF9kaXZ0ZDM6ICAgICAgICAgICAgICAgICAgICAgICAgICBEZWNpbWFsIGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDY3KQoqIF9fZHBkX2VxZGQyOiAgICAgICAgICAgICAgICAgICAgICAgICAgIERlY2ltYWwgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAyNTYpCiogX19kcGRfZXFzZDI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVjaW1hbCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDI1NCkKKiBfX2RwZF9lcXRkMjogICAgICAgICAgICAgICAgICAgICAgICAgICBEZWNpbWFsIGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMjU4KQoqIF9fZHBkX2V4dGVuZGRkdGQyOiAgICAgICAgICAgICAgICAgICAgIERlY2ltYWwgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgODkpCiogX19kcGRfZXh0ZW5kZGR0ZjogICAgICAgICAgICAgICAgICAgICAgRGVjaW1hbCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDEzNykKKiBfX2RwZF9leHRlbmRkZHhmOiAgICAgICAgICAgICAgICAgICAgICBEZWNpbWFsIGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMTMxKQoqIF9fZHBkX2V4dGVuZGRmZGQ6ICAgICAgICAgICAgICAgICAgICAgIERlY2ltYWwgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxNDQpCiogX19kcGRfZXh0ZW5kZGZ0ZDogICAgICAgICAgICAgICAgICAgICAgRGVjaW1hbCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDEwNCkKKiBfX2RwZF9leHRlbmRzZGRkMjogICAgICAgICAgICAgICAgICAgICBEZWNpbWFsIGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDg1KQoqIF9fZHBkX2V4dGVuZHNkZGY6ICAgICAgICAgICAgICAgICAgICAgIERlY2ltYWwgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxMjUpCiogX19kcGRfZXh0ZW5kc2R0ZDI6ICAgICAgICAgICAgICAgICAgICAgRGVjaW1hbCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA4NykKKiBfX2RwZF9leHRlbmRzZHRmOiAgICAgICAgICAgICAgICAgICAgICBEZWNpbWFsIGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMTM1KQoqIF9fZHBkX2V4dGVuZHNkeGY6ICAgICAgICAgICAgICAgICAgICAgIERlY2ltYWwgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxMjkpCiogX19kcGRfZXh0ZW5kc2ZkZDogICAgICAgICAgICAgICAgICAgICAgRGVjaW1hbCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDEwMCkKKiBfX2RwZF9leHRlbmRzZnNkOiAgICAgICAgICAgICAgICAgICAgICBEZWNpbWFsIGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMTQyKQoqIF9fZHBkX2V4dGVuZHNmdGQ6ICAgICAgICAgICAgICAgICAgICAgIERlY2ltYWwgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxMDIpCiogX19kcGRfZXh0ZW5kdGZ0ZDogICAgICAgICAgICAgICAgICAgICAgRGVjaW1hbCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDE0NikKKiBfX2RwZF9leHRlbmR4ZnRkOiAgICAgICAgICAgICAgICAgICAgICBEZWNpbWFsIGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMTA2KQoqIF9fZHBkX2ZpeGRkZGk6ICAgICAgICAgICAgICAgICAgICAgICAgIERlY2ltYWwgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxNjcpCiogX19kcGRfZml4ZGRzaTogICAgICAgICAgICAgICAgICAgICAgICAgRGVjaW1hbCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDE1OSkKKiBfX2RwZF9maXhzZGRpOiAgICAgICAgICAgICAgICAgICAgICAgICBEZWNpbWFsIGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMTY1KQoqIF9fZHBkX2ZpeHNkc2k6ICAgICAgICAgICAgICAgICAgICAgICAgIERlY2ltYWwgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxNTcpCiogX19kcGRfZml4dGRkaTogICAgICAgICAgICAgICAgICAgICAgICAgRGVjaW1hbCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDE2OSkKKiBfX2RwZF9maXh0ZHNpOiAgICAgICAgICAgICAgICAgICAgICAgICBEZWNpbWFsIGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMTYxKQoqIF9fZHBkX2ZpeHVuc2RkZGk6ICAgICAgICAgICAgICAgICAgICAgIERlY2ltYWwgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxODQpCiogX19kcGRfZml4dW5zZGRzaTogICAgICAgICAgICAgICAgICAgICAgRGVjaW1hbCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDE3NSkKKiBfX2RwZF9maXh1bnNzZGRpOiAgICAgICAgICAgICAgICAgICAgICBEZWNpbWFsIGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMTgyKQoqIF9fZHBkX2ZpeHVuc3Nkc2k6ICAgICAgICAgICAgICAgICAgICAgIERlY2ltYWwgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxNzMpCiogX19kcGRfZml4dW5zdGRkaTogICAgICAgICAgICAgICAgICAgICAgRGVjaW1hbCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDE4NikKKiBfX2RwZF9maXh1bnN0ZHNpOiAgICAgICAgICAgICAgICAgICAgICBEZWNpbWFsIGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMTc3KQoqIF9fZHBkX2Zsb2F0ZGlkZDogICAgICAgICAgICAgICAgICAgICAgIERlY2ltYWwgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAyMDIpCiogX19kcGRfZmxvYXRkaXNkOiAgICAgICAgICAgICAgICAgICAgICAgRGVjaW1hbCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDIwMCkKKiBfX2RwZF9mbG9hdGRpdGQ6ICAgICAgICAgICAgICAgICAgICAgICBEZWNpbWFsIGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMjA0KQoqIF9fZHBkX2Zsb2F0c2lkZDogICAgICAgICAgICAgICAgICAgICAgIERlY2ltYWwgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxOTMpCiogX19kcGRfZmxvYXRzaXNkOiAgICAgICAgICAgICAgICAgICAgICAgRGVjaW1hbCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDE5MSkKKiBfX2RwZF9mbG9hdHNpdGQ6ICAgICAgICAgICAgICAgICAgICAgICBEZWNpbWFsIGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMTk1KQoqIF9fZHBkX2Zsb2F0dW5zZGlkZDogICAgICAgICAgICAgICAgICAgIERlY2ltYWwgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAyMjApCiogX19kcGRfZmxvYXR1bnNkaXNkOiAgICAgICAgICAgICAgICAgICAgRGVjaW1hbCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDIxOCkKKiBfX2RwZF9mbG9hdHVuc2RpdGQ6ICAgICAgICAgICAgICAgICAgICBEZWNpbWFsIGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMjIyKQoqIF9fZHBkX2Zsb2F0dW5zc2lkZDogICAgICAgICAgICAgICAgICAgIERlY2ltYWwgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAyMTEpCiogX19kcGRfZmxvYXR1bnNzaXNkOiAgICAgICAgICAgICAgICAgICAgRGVjaW1hbCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDIwOSkKKiBfX2RwZF9mbG9hdHVuc3NpdGQ6ICAgICAgICAgICAgICAgICAgICBEZWNpbWFsIGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMjEzKQoqIF9fZHBkX2dlZGQyOiAgICAgICAgICAgICAgICAgICAgICAgICAgIERlY2ltYWwgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAyNzQpCiogX19kcGRfZ2VzZDI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVjaW1hbCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDI3MikKKiBfX2RwZF9nZXRkMjogICAgICAgICAgICAgICAgICAgICAgICAgICBEZWNpbWFsIGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMjc2KQoqIF9fZHBkX2d0ZGQyOiAgICAgICAgICAgICAgICAgICAgICAgICAgIERlY2ltYWwgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAzMDEpCiogX19kcGRfZ3RzZDI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVjaW1hbCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDI5OSkKKiBfX2RwZF9ndHRkMjogICAgICAgICAgICAgICAgICAgICAgICAgICBEZWNpbWFsIGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMzAzKQoqIF9fZHBkX2xlZGQyOiAgICAgICAgICAgICAgICAgICAgICAgICAgIERlY2ltYWwgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAyOTIpCiogX19kcGRfbGVzZDI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVjaW1hbCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDI5MCkKKiBfX2RwZF9sZXRkMjogICAgICAgICAgICAgICAgICAgICAgICAgICBEZWNpbWFsIGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMjk0KQoqIF9fZHBkX2x0ZGQyOiAgICAgICAgICAgICAgICAgICAgICAgICAgIERlY2ltYWwgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAyODMpCiogX19kcGRfbHRzZDI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVjaW1hbCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDI4MSkKKiBfX2RwZF9sdHRkMjogICAgICAgICAgICAgICAgICAgICAgICAgICBEZWNpbWFsIGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMjg1KQoqIF9fZHBkX211bGRkMzogICAgICAgICAgICAgICAgICAgICAgICAgIERlY2ltYWwgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgNDkpCiogX19kcGRfbXVsc2QzOiAgICAgICAgICAgICAgICAgICAgICAgICAgRGVjaW1hbCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA0NSkKKiBfX2RwZF9tdWx0ZDM6ICAgICAgICAgICAgICAgICAgICAgICAgICBEZWNpbWFsIGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDUzKQoqIF9fZHBkX25lZGQyOiAgICAgICAgICAgICAgICAgICAgICAgICAgIERlY2ltYWwgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAyNjUpCiogX19kcGRfbmVnZGQyOiAgICAgICAgICAgICAgICAgICAgICAgICAgRGVjaW1hbCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA3NSkKKiBfX2RwZF9uZWdzZDI6ICAgICAgICAgICAgICAgICAgICAgICAgICBEZWNpbWFsIGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDczKQoqIF9fZHBkX25lZ3RkMjogICAgICAgICAgICAgICAgICAgICAgICAgIERlY2ltYWwgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgNzcpCiogX19kcGRfbmVzZDI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVjaW1hbCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDI2MykKKiBfX2RwZF9uZXRkMjogICAgICAgICAgICAgICAgICAgICAgICAgICBEZWNpbWFsIGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMjY3KQoqIF9fZHBkX3N1YmRkMzogICAgICAgICAgICAgICAgICAgICAgICAgIERlY2ltYWwgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgMzQpCiogX19kcGRfc3Vic2QzOiAgICAgICAgICAgICAgICAgICAgICAgICAgRGVjaW1hbCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICAzMCkKKiBfX2RwZF9zdWJ0ZDM6ICAgICAgICAgICAgICAgICAgICAgICAgICBEZWNpbWFsIGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDM4KQoqIF9fZHBkX3RydW5jZGRkZjogICAgICAgICAgICAgICAgICAgICAgIERlY2ltYWwgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxNTApCiogX19kcGRfdHJ1bmNkZHNkMjogICAgICAgICAgICAgICAgICAgICAgRGVjaW1hbCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA5MSkKKiBfX2RwZF90cnVuY2Rkc2Y6ICAgICAgICAgICAgICAgICAgICAgICBEZWNpbWFsIGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMTIxKQoqIF9fZHBkX3RydW5jZGZzZDogICAgICAgICAgICAgICAgICAgICAgIERlY2ltYWwgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxMDgpCiogX19kcGRfdHJ1bmNzZHNmOiAgICAgICAgICAgICAgICAgICAgICAgRGVjaW1hbCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDE0OCkKKiBfX2RwZF90cnVuY3RkZGQyOiAgICAgICAgICAgICAgICAgICAgICBEZWNpbWFsIGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDk1KQoqIF9fZHBkX3RydW5jdGRkZjogICAgICAgICAgICAgICAgICAgICAgIERlY2ltYWwgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxMjcpCiogX19kcGRfdHJ1bmN0ZHNkMjogICAgICAgICAgICAgICAgICAgICAgRGVjaW1hbCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA5MykKKiBfX2RwZF90cnVuY3Rkc2Y6ICAgICAgICAgICAgICAgICAgICAgICBEZWNpbWFsIGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMTIzKQoqIF9fZHBkX3RydW5jdGR0ZjogICAgICAgICAgICAgICAgICAgICAgIERlY2ltYWwgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxNTIpCiogX19kcGRfdHJ1bmN0ZHhmOiAgICAgICAgICAgICAgICAgICAgICAgRGVjaW1hbCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDEzMykKKiBfX2RwZF90cnVuY3RmZGQ6ICAgICAgICAgICAgICAgICAgICAgICBEZWNpbWFsIGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMTE2KQoqIF9fZHBkX3RydW5jdGZzZDogICAgICAgICAgICAgICAgICAgICAgIERlY2ltYWwgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxMTIpCiogX19kcGRfdHJ1bmN4ZmRkOiAgICAgICAgICAgICAgICAgICAgICAgRGVjaW1hbCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDExNCkKKiBfX2RwZF90cnVuY3hmc2Q6ICAgICAgICAgICAgICAgICAgICAgICBEZWNpbWFsIGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMTEwKQoqIF9fZHBkX3Vub3JkZGQyOiAgICAgICAgICAgICAgICAgICAgICAgIERlY2ltYWwgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAyMzIpCiogX19kcGRfdW5vcmRzZDI6ICAgICAgICAgICAgICAgICAgICAgICAgRGVjaW1hbCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDIzMCkKKiBfX2RwZF91bm9yZHRkMjogICAgICAgICAgICAgICAgICAgICAgICBEZWNpbWFsIGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMjM0KQoqIF9fRFRPUl9MSVNUX186ICAgICAgICAgICAgICAgICAgICAgICAgIEluaXRpYWxpemF0aW9uLiAgICAgKGxpbmUgICAyNSkKKiBfX2VxZGYyOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb2Z0IGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMTkzKQoqIF9fZXFzZjI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvZnQgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxOTIpCiogX19lcXRmMjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29mdCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDE5NCkKKiBfX2V4dGVuZGRmdGYyOiAgICAgICAgICAgICAgICAgICAgICAgICBTb2Z0IGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDY3KQoqIF9fZXh0ZW5kZGZ4ZjI6ICAgICAgICAgICAgICAgICAgICAgICAgIFNvZnQgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgNjgpCiogX19leHRlbmRzZmRmMjogICAgICAgICAgICAgICAgICAgICAgICAgU29mdCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA2NCkKKiBfX2V4dGVuZHNmdGYyOiAgICAgICAgICAgICAgICAgICAgICAgICBTb2Z0IGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDY1KQoqIF9fZXh0ZW5kc2Z4ZjI6ICAgICAgICAgICAgICAgICAgICAgICAgIFNvZnQgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgNjYpCiogX19mZnNkaTI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWdlciBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDE0MykKKiBfX2Zmc3RpMjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlZ2VyIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMTQ0KQoqIF9fZml4ZGZkaTogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvZnQgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgODcpCiogX19maXhkZnNpOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29mdCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA4MCkKKiBfX2ZpeGRmdGk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb2Z0IGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDkzKQoqIF9fZml4c2ZkaTogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvZnQgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgODYpCiogX19maXhzZnNpOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29mdCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA3OSkKKiBfX2ZpeHNmdGk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb2Z0IGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDkyKQoqIF9fZml4dGZkaTogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvZnQgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgODgpCiogX19maXh0ZnNpOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29mdCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA4MSkKKiBfX2ZpeHRmdGk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb2Z0IGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDk0KQoqIF9fZml4dW5zZGZkaTogICAgICAgICAgICAgICAgICAgICAgICAgIFNvZnQgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxMDcpCiogX19maXh1bnNkZnNpOiAgICAgICAgICAgICAgICAgICAgICAgICAgU29mdCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDEwMCkKKiBfX2ZpeHVuc2RmdGk6ICAgICAgICAgICAgICAgICAgICAgICAgICBTb2Z0IGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMTE0KQoqIF9fZml4dW5zc2ZkaTogICAgICAgICAgICAgICAgICAgICAgICAgIFNvZnQgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxMDYpCiogX19maXh1bnNzZnNpOiAgICAgICAgICAgICAgICAgICAgICAgICAgU29mdCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA5OSkKKiBfX2ZpeHVuc3NmdGk6ICAgICAgICAgICAgICAgICAgICAgICAgICBTb2Z0IGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMTEzKQoqIF9fZml4dW5zdGZkaTogICAgICAgICAgICAgICAgICAgICAgICAgIFNvZnQgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxMDgpCiogX19maXh1bnN0ZnNpOiAgICAgICAgICAgICAgICAgICAgICAgICAgU29mdCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDEwMSkKKiBfX2ZpeHVuc3RmdGk6ICAgICAgICAgICAgICAgICAgICAgICAgICBTb2Z0IGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMTE1KQoqIF9fZml4dW5zeGZkaTogICAgICAgICAgICAgICAgICAgICAgICAgIFNvZnQgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxMDkpCiogX19maXh1bnN4ZnNpOiAgICAgICAgICAgICAgICAgICAgICAgICAgU29mdCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDEwMikKKiBfX2ZpeHVuc3hmdGk6ICAgICAgICAgICAgICAgICAgICAgICAgICBTb2Z0IGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMTE2KQoqIF9fZml4eGZkaTogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvZnQgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgODkpCiogX19maXh4ZnNpOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29mdCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA4MikKKiBfX2ZpeHhmdGk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb2Z0IGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDk1KQoqIF9fZmxvYXRkaWRmOiAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvZnQgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxMjcpCiogX19mbG9hdGRpc2Y6ICAgICAgICAgICAgICAgICAgICAgICAgICAgU29mdCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDEyNikKKiBfX2Zsb2F0ZGl0ZjogICAgICAgICAgICAgICAgICAgICAgICAgICBTb2Z0IGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMTI4KQoqIF9fZmxvYXRkaXhmOiAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvZnQgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxMjkpCiogX19mbG9hdHNpZGY6ICAgICAgICAgICAgICAgICAgICAgICAgICAgU29mdCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDEyMSkKKiBfX2Zsb2F0c2lzZjogICAgICAgICAgICAgICAgICAgICAgICAgICBTb2Z0IGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMTIwKQoqIF9fZmxvYXRzaXRmOiAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvZnQgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxMjIpCiogX19mbG9hdHNpeGY6ICAgICAgICAgICAgICAgICAgICAgICAgICAgU29mdCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDEyMykKKiBfX2Zsb2F0dGlkZjogICAgICAgICAgICAgICAgICAgICAgICAgICBTb2Z0IGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMTMzKQoqIF9fZmxvYXR0aXNmOiAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvZnQgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxMzIpCiogX19mbG9hdHRpdGY6ICAgICAgICAgICAgICAgICAgICAgICAgICAgU29mdCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDEzNCkKKiBfX2Zsb2F0dGl4ZjogICAgICAgICAgICAgICAgICAgICAgICAgICBTb2Z0IGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMTM1KQoqIF9fZmxvYXR1bmRpZGY6ICAgICAgICAgICAgICAgICAgICAgICAgIFNvZnQgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxNDUpCiogX19mbG9hdHVuZGlzZjogICAgICAgICAgICAgICAgICAgICAgICAgU29mdCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDE0NCkKKiBfX2Zsb2F0dW5kaXRmOiAgICAgICAgICAgICAgICAgICAgICAgICBTb2Z0IGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMTQ2KQoqIF9fZmxvYXR1bmRpeGY6ICAgICAgICAgICAgICAgICAgICAgICAgIFNvZnQgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxNDcpCiogX19mbG9hdHVuc2lkZjogICAgICAgICAgICAgICAgICAgICAgICAgU29mdCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDEzOSkKKiBfX2Zsb2F0dW5zaXNmOiAgICAgICAgICAgICAgICAgICAgICAgICBTb2Z0IGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMTM4KQoqIF9fZmxvYXR1bnNpdGY6ICAgICAgICAgICAgICAgICAgICAgICAgIFNvZnQgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxNDApCiogX19mbG9hdHVuc2l4ZjogICAgICAgICAgICAgICAgICAgICAgICAgU29mdCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDE0MSkKKiBfX2Zsb2F0dW50aWRmOiAgICAgICAgICAgICAgICAgICAgICAgICBTb2Z0IGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMTUxKQoqIF9fZmxvYXR1bnRpc2Y6ICAgICAgICAgICAgICAgICAgICAgICAgIFNvZnQgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxNTApCiogX19mbG9hdHVudGl0ZjogICAgICAgICAgICAgICAgICAgICAgICAgU29mdCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDE1MikKKiBfX2Zsb2F0dW50aXhmOiAgICAgICAgICAgICAgICAgICAgICAgICBTb2Z0IGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMTUzKQoqIF9fZnJhY3RkYWRmOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA2MzUpCiogX19mcmFjdGRhZGk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDYzMikKKiBfX2ZyYWN0ZGFkcTogICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNjE1KQoqIF9fZnJhY3RkYWhhMjogICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA2MTYpCiogX19mcmFjdGRhaGk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDYzMCkKKiBfX2ZyYWN0ZGFocTogICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNjEzKQoqIF9fZnJhY3RkYXFpOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA2MjkpCiogX19mcmFjdGRhcXE6ICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDYxMikKKiBfX2ZyYWN0ZGFzYTI6ICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNjE3KQoqIF9fZnJhY3RkYXNmOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA2MzQpCiogX19mcmFjdGRhc2k6ICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDYzMSkKKiBfX2ZyYWN0ZGFzcTogICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNjE0KQoqIF9fZnJhY3RkYXRhMjogICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA2MTgpCiogX19mcmFjdGRhdGk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDYzMykKKiBfX2ZyYWN0ZGF1ZGE6ICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNjI2KQoqIF9fZnJhY3RkYXVkcTogICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA2MjIpCiogX19mcmFjdGRhdWhhOiAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDYyNCkKKiBfX2ZyYWN0ZGF1aHE6ICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNjIwKQoqIF9fZnJhY3RkYXVxcTogICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA2MTkpCiogX19mcmFjdGRhdXNhOiAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDYyNSkKKiBfX2ZyYWN0ZGF1c3E6ICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNjIxKQoqIF9fZnJhY3RkYXV0YTogICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA2MjcpCiogX19mcmFjdGRmZGE6ICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTAyNCkKKiBfX2ZyYWN0ZGZkcTogICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMDIxKQoqIF9fZnJhY3RkZmhhOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDEwMjIpCiogX19mcmFjdGRmaHE6ICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTAxOSkKKiBfX2ZyYWN0ZGZxcTogICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMDE4KQoqIF9fZnJhY3RkZnNhOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDEwMjMpCiogX19mcmFjdGRmc3E6ICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTAyMCkKKiBfX2ZyYWN0ZGZ0YTogICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMDI1KQoqIF9fZnJhY3RkZnVkYTogICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDEwMzIpCiogX19mcmFjdGRmdWRxOiAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTAyOSkKKiBfX2ZyYWN0ZGZ1aGE6ICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMDMwKQoqIF9fZnJhY3RkZnVocTogICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDEwMjcpCiogX19mcmFjdGRmdXFxOiAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTAyNikKKiBfX2ZyYWN0ZGZ1c2E6ICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMDMxKQoqIF9fZnJhY3RkZnVzcTogICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDEwMjgpCiogX19mcmFjdGRmdXRhOiAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTAzMykKKiBfX2ZyYWN0ZGlkYTogICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgOTc0KQoqIF9fZnJhY3RkaWRxOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA5NzEpCiogX19mcmFjdGRpaGE6ICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDk3MikKKiBfX2ZyYWN0ZGlocTogICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgOTY5KQoqIF9fZnJhY3RkaXFxOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA5NjgpCiogX19mcmFjdGRpc2E6ICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDk3MykKKiBfX2ZyYWN0ZGlzcTogICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgOTcwKQoqIF9fZnJhY3RkaXRhOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA5NzUpCiogX19mcmFjdGRpdWRhOiAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDk4MikKKiBfX2ZyYWN0ZGl1ZHE6ICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgOTc5KQoqIF9fZnJhY3RkaXVoYTogICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA5ODApCiogX19mcmFjdGRpdWhxOiAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDk3NykKKiBfX2ZyYWN0ZGl1cXE6ICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgOTc2KQoqIF9fZnJhY3RkaXVzYTogICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA5ODEpCiogX19mcmFjdGRpdXNxOiAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDk3OCkKKiBfX2ZyYWN0ZGl1dGE6ICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgOTgzKQoqIF9fZnJhY3RkcWRhOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA1NDMpCiogX19mcmFjdGRxZGY6ICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDU2NSkKKiBfX2ZyYWN0ZHFkaTogICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNTYyKQoqIF9fZnJhY3RkcWhhOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA1NDEpCiogX19mcmFjdGRxaGk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDU2MCkKKiBfX2ZyYWN0ZHFocTI6ICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNTM5KQoqIF9fZnJhY3RkcXFpOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA1NTkpCiogX19mcmFjdGRxcXEyOiAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDUzOCkKKiBfX2ZyYWN0ZHFzYTogICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNTQyKQoqIF9fZnJhY3RkcXNmOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA1NjQpCiogX19mcmFjdGRxc2k6ICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDU2MSkKKiBfX2ZyYWN0ZHFzcTI6ICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNTQwKQoqIF9fZnJhY3RkcXRhOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA1NDQpCiogX19mcmFjdGRxdGk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDU2MykKKiBfX2ZyYWN0ZHF1ZGE6ICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNTU1KQoqIF9fZnJhY3RkcXVkcTogICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA1NTApCiogX19mcmFjdGRxdWhhOiAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDU1MikKKiBfX2ZyYWN0ZHF1aHE6ICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNTQ3KQoqIF9fZnJhY3RkcXVxcTogICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA1NDUpCiogX19mcmFjdGRxdXNhOiAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDU1NCkKKiBfX2ZyYWN0ZHF1c3E6ICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNTQ4KQoqIF9fZnJhY3RkcXV0YTogICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA1NTcpCiogX19mcmFjdGhhZGEyOiAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDU3MSkKKiBfX2ZyYWN0aGFkZjogICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNTg5KQoqIF9fZnJhY3RoYWRpOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA1ODYpCiogX19mcmFjdGhhZHE6ICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDU2OSkKKiBfX2ZyYWN0aGFoaTogICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNTg0KQoqIF9fZnJhY3RoYWhxOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA1NjcpCiogX19mcmFjdGhhcWk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDU4MykKKiBfX2ZyYWN0aGFxcTogICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNTY2KQoqIF9fZnJhY3RoYXNhMjogICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA1NzApCiogX19mcmFjdGhhc2Y6ICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDU4OCkKKiBfX2ZyYWN0aGFzaTogICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNTg1KQoqIF9fZnJhY3RoYXNxOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA1NjgpCiogX19mcmFjdGhhdGEyOiAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDU3MikKKiBfX2ZyYWN0aGF0aTogICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNTg3KQoqIF9fZnJhY3RoYXVkYTogICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA1ODApCiogX19mcmFjdGhhdWRxOiAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDU3NikKKiBfX2ZyYWN0aGF1aGE6ICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNTc4KQoqIF9fZnJhY3RoYXVocTogICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA1NzQpCiogX19mcmFjdGhhdXFxOiAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDU3MykKKiBfX2ZyYWN0aGF1c2E6ICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNTc5KQoqIF9fZnJhY3RoYXVzcTogICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA1NzUpCiogX19mcmFjdGhhdXRhOiAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDU4MSkKKiBfX2ZyYWN0aGlkYTogICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgOTQyKQoqIF9fZnJhY3RoaWRxOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA5MzkpCiogX19mcmFjdGhpaGE6ICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDk0MCkKKiBfX2ZyYWN0aGlocTogICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgOTM3KQoqIF9fZnJhY3RoaXFxOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA5MzYpCiogX19mcmFjdGhpc2E6ICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDk0MSkKKiBfX2ZyYWN0aGlzcTogICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgOTM4KQoqIF9fZnJhY3RoaXRhOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA5NDMpCiogX19mcmFjdGhpdWRhOiAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDk1MCkKKiBfX2ZyYWN0aGl1ZHE6ICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgOTQ3KQoqIF9fZnJhY3RoaXVoYTogICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA5NDgpCiogX19mcmFjdGhpdWhxOiAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDk0NSkKKiBfX2ZyYWN0aGl1cXE6ICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgOTQ0KQoqIF9fZnJhY3RoaXVzYTogICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA5NDkpCiogX19mcmFjdGhpdXNxOiAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDk0NikKKiBfX2ZyYWN0aGl1dGE6ICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgOTUxKQoqIF9fZnJhY3RocWRhOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA0OTcpCiogX19mcmFjdGhxZGY6ICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDUxMykKKiBfX2ZyYWN0aHFkaTogICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNTEwKQoqIF9fZnJhY3RocWRxMjogICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA0OTQpCiogX19mcmFjdGhxaGE6ICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDQ5NSkKKiBfX2ZyYWN0aHFoaTogICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNTA4KQoqIF9fZnJhY3RocXFpOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA1MDcpCiogX19mcmFjdGhxcXEyOiAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDQ5MikKKiBfX2ZyYWN0aHFzYTogICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNDk2KQoqIF9fZnJhY3RocXNmOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA1MTIpCiogX19mcmFjdGhxc2k6ICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDUwOSkKKiBfX2ZyYWN0aHFzcTI6ICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNDkzKQoqIF9fZnJhY3RocXRhOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA0OTgpCiogX19mcmFjdGhxdGk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDUxMSkKKiBfX2ZyYWN0aHF1ZGE6ICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNTA1KQoqIF9fZnJhY3RocXVkcTogICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA1MDIpCiogX19mcmFjdGhxdWhhOiAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDUwMykKKiBfX2ZyYWN0aHF1aHE6ICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNTAwKQoqIF9fZnJhY3RocXVxcTogICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA0OTkpCiogX19mcmFjdGhxdXNhOiAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDUwNCkKKiBfX2ZyYWN0aHF1c3E6ICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNTAxKQoqIF9fZnJhY3RocXV0YTogICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA1MDYpCiogX19mcmFjdHFpZGE6ICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDkyNCkKKiBfX2ZyYWN0cWlkcTogICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgOTIxKQoqIF9fZnJhY3RxaWhhOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA5MjIpCiogX19mcmFjdHFpaHE6ICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDkxOSkKKiBfX2ZyYWN0cWlxcTogICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgOTE4KQoqIF9fZnJhY3RxaXNhOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA5MjMpCiogX19mcmFjdHFpc3E6ICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDkyMCkKKiBfX2ZyYWN0cWl0YTogICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgOTI1KQoqIF9fZnJhY3RxaXVkYTogICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA5MzMpCiogX19mcmFjdHFpdWRxOiAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDkyOSkKKiBfX2ZyYWN0cWl1aGE6ICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgOTMxKQoqIF9fZnJhY3RxaXVocTogICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA5MjcpCiogX19mcmFjdHFpdXFxOiAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDkyNikKKiBfX2ZyYWN0cWl1c2E6ICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgOTMyKQoqIF9fZnJhY3RxaXVzcTogICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA5MjgpCiogX19mcmFjdHFpdXRhOiAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDkzNCkKKiBfX2ZyYWN0cXFkYTogICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNDczKQoqIF9fZnJhY3RxcWRmOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA0OTEpCiogX19mcmFjdHFxZGk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDQ4OCkKKiBfX2ZyYWN0cXFkcTI6ICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNDcwKQoqIF9fZnJhY3RxcWhhOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA0NzEpCiogX19mcmFjdHFxaGk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDQ4NikKKiBfX2ZyYWN0cXFocTI6ICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNDY4KQoqIF9fZnJhY3RxcXFpOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA0ODUpCiogX19mcmFjdHFxc2E6ICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDQ3MikKKiBfX2ZyYWN0cXFzZjogICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNDkwKQoqIF9fZnJhY3RxcXNpOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA0ODcpCiogX19mcmFjdHFxc3EyOiAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDQ2OSkKKiBfX2ZyYWN0cXF0YTogICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNDc0KQoqIF9fZnJhY3RxcXRpOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA0ODkpCiogX19mcmFjdHFxdWRhOiAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDQ4MikKKiBfX2ZyYWN0cXF1ZHE6ICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNDc4KQoqIF9fZnJhY3RxcXVoYTogICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA0ODApCiogX19mcmFjdHFxdWhxOiAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDQ3NikKKiBfX2ZyYWN0cXF1cXE6ICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNDc1KQoqIF9fZnJhY3RxcXVzYTogICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA0ODEpCiogX19mcmFjdHFxdXNxOiAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDQ3NykKKiBfX2ZyYWN0cXF1dGE6ICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNDgzKQoqIF9fZnJhY3RzYWRhMjogICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA1OTUpCiogX19mcmFjdHNhZGY6ICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDYxMSkKKiBfX2ZyYWN0c2FkaTogICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNjA4KQoqIF9fZnJhY3RzYWRxOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA1OTMpCiogX19mcmFjdHNhaGEyOiAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDU5NCkKKiBfX2ZyYWN0c2FoaTogICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNjA2KQoqIF9fZnJhY3RzYWhxOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA1OTEpCiogX19mcmFjdHNhcWk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDYwNSkKKiBfX2ZyYWN0c2FxcTogICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNTkwKQoqIF9fZnJhY3RzYXNmOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA2MTApCiogX19mcmFjdHNhc2k6ICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDYwNykKKiBfX2ZyYWN0c2FzcTogICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNTkyKQoqIF9fZnJhY3RzYXRhMjogICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA1OTYpCiogX19mcmFjdHNhdGk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDYwOSkKKiBfX2ZyYWN0c2F1ZGE6ICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNjAzKQoqIF9fZnJhY3RzYXVkcTogICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA2MDApCiogX19mcmFjdHNhdWhhOiAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDYwMSkKKiBfX2ZyYWN0c2F1aHE6ICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNTk4KQoqIF9fZnJhY3RzYXVxcTogICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA1OTcpCiogX19mcmFjdHNhdXNhOiAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDYwMikKKiBfX2ZyYWN0c2F1c3E6ICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNTk5KQoqIF9fZnJhY3RzYXV0YTogICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA2MDQpCiogX19mcmFjdHNmZGE6ICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTAwOCkKKiBfX2ZyYWN0c2ZkcTogICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMDA1KQoqIF9fZnJhY3RzZmhhOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDEwMDYpCiogX19mcmFjdHNmaHE6ICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTAwMykKKiBfX2ZyYWN0c2ZxcTogICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMDAyKQoqIF9fZnJhY3RzZnNhOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDEwMDcpCiogX19mcmFjdHNmc3E6ICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTAwNCkKKiBfX2ZyYWN0c2Z0YTogICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMDA5KQoqIF9fZnJhY3RzZnVkYTogICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDEwMTYpCiogX19mcmFjdHNmdWRxOiAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTAxMykKKiBfX2ZyYWN0c2Z1aGE6ICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMDE0KQoqIF9fZnJhY3RzZnVocTogICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDEwMTEpCiogX19mcmFjdHNmdXFxOiAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTAxMCkKKiBfX2ZyYWN0c2Z1c2E6ICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMDE1KQoqIF9fZnJhY3RzZnVzcTogICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDEwMTIpCiogX19mcmFjdHNmdXRhOiAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTAxNykKKiBfX2ZyYWN0c2lkYTogICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgOTU4KQoqIF9fZnJhY3RzaWRxOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA5NTUpCiogX19mcmFjdHNpaGE6ICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDk1NikKKiBfX2ZyYWN0c2locTogICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgOTUzKQoqIF9fZnJhY3RzaXFxOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA5NTIpCiogX19mcmFjdHNpc2E6ICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDk1NykKKiBfX2ZyYWN0c2lzcTogICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgOTU0KQoqIF9fZnJhY3RzaXRhOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA5NTkpCiogX19mcmFjdHNpdWRhOiAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDk2NikKKiBfX2ZyYWN0c2l1ZHE6ICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgOTYzKQoqIF9fZnJhY3RzaXVoYTogICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA5NjQpCiogX19mcmFjdHNpdWhxOiAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDk2MSkKKiBfX2ZyYWN0c2l1cXE6ICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgOTYwKQoqIF9fZnJhY3RzaXVzYTogICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA5NjUpCiogX19mcmFjdHNpdXNxOiAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDk2MikKKiBfX2ZyYWN0c2l1dGE6ICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgOTY3KQoqIF9fZnJhY3RzcWRhOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA1MTkpCiogX19mcmFjdHNxZGY6ICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDUzNykKKiBfX2ZyYWN0c3FkaTogICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNTM0KQoqIF9fZnJhY3RzcWRxMjogICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA1MTYpCiogX19mcmFjdHNxaGE6ICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDUxNykKKiBfX2ZyYWN0c3FoaTogICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNTMyKQoqIF9fZnJhY3RzcWhxMjogICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA1MTUpCiogX19mcmFjdHNxcWk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDUzMSkKKiBfX2ZyYWN0c3FxcTI6ICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNTE0KQoqIF9fZnJhY3RzcXNhOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA1MTgpCiogX19mcmFjdHNxc2Y6ICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDUzNikKKiBfX2ZyYWN0c3FzaTogICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNTMzKQoqIF9fZnJhY3RzcXRhOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA1MjApCiogX19mcmFjdHNxdGk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDUzNSkKKiBfX2ZyYWN0c3F1ZGE6ICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNTI4KQoqIF9fZnJhY3RzcXVkcTogICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA1MjQpCiogX19mcmFjdHNxdWhhOiAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDUyNikKKiBfX2ZyYWN0c3F1aHE6ICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNTIyKQoqIF9fZnJhY3RzcXVxcTogICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA1MjEpCiogX19mcmFjdHNxdXNhOiAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDUyNykKKiBfX2ZyYWN0c3F1c3E6ICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNTIzKQoqIF9fZnJhY3RzcXV0YTogICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA1MjkpCiogX19mcmFjdHRhZGEyOiAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDY0MikKKiBfX2ZyYWN0dGFkZjogICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNjYzKQoqIF9fZnJhY3R0YWRpOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA2NjApCiogX19mcmFjdHRhZHE6ICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDYzOSkKKiBfX2ZyYWN0dGFoYTI6ICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNjQwKQoqIF9fZnJhY3R0YWhpOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA2NTgpCiogX19mcmFjdHRhaHE6ICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDYzNykKKiBfX2ZyYWN0dGFxaTogICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNjU3KQoqIF9fZnJhY3R0YXFxOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA2MzYpCiogX19mcmFjdHRhc2EyOiAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDY0MSkKKiBfX2ZyYWN0dGFzZjogICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNjYyKQoqIF9fZnJhY3R0YXNpOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA2NTkpCiogX19mcmFjdHRhc3E6ICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDYzOCkKKiBfX2ZyYWN0dGF0aTogICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNjYxKQoqIF9fZnJhY3R0YXVkYTogICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA2NTMpCiogX19mcmFjdHRhdWRxOiAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDY0OCkKKiBfX2ZyYWN0dGF1aGE6ICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNjUwKQoqIF9fZnJhY3R0YXVocTogICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA2NDUpCiogX19mcmFjdHRhdXFxOiAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDY0MykKKiBfX2ZyYWN0dGF1c2E6ICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNjUyKQoqIF9fZnJhY3R0YXVzcTogICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA2NDYpCiogX19mcmFjdHRhdXRhOiAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDY1NSkKKiBfX2ZyYWN0dGlkYTogICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgOTkwKQoqIF9fZnJhY3R0aWRxOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA5ODcpCiogX19mcmFjdHRpaGE6ICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDk4OCkKKiBfX2ZyYWN0dGlocTogICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgOTg1KQoqIF9fZnJhY3R0aXFxOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA5ODQpCiogX19mcmFjdHRpc2E6ICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDk4OSkKKiBfX2ZyYWN0dGlzcTogICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgOTg2KQoqIF9fZnJhY3R0aXRhOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA5OTEpCiogX19mcmFjdHRpdWRhOiAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDk5OSkKKiBfX2ZyYWN0dGl1ZHE6ICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgOTk1KQoqIF9fZnJhY3R0aXVoYTogICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA5OTcpCiogX19mcmFjdHRpdWhxOiAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDk5MykKKiBfX2ZyYWN0dGl1cXE6ICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgOTkyKQoqIF9fZnJhY3R0aXVzYTogICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA5OTgpCiogX19mcmFjdHRpdXNxOiAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDk5NCkKKiBfX2ZyYWN0dGl1dGE6ICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMDAwKQoqIF9fZnJhY3R1ZGFkYTogICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA4NTcpCiogX19mcmFjdHVkYWRmOiAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDg4MCkKKiBfX2ZyYWN0dWRhZGk6ICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgODc3KQoqIF9fZnJhY3R1ZGFkcTogICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA4NTMpCiogX19mcmFjdHVkYWhhOiAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDg1NSkKKiBfX2ZyYWN0dWRhaGk6ICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgODc1KQoqIF9fZnJhY3R1ZGFocTogICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA4NTEpCiogX19mcmFjdHVkYXFpOiAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDg3NCkKKiBfX2ZyYWN0dWRhcXE6ICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgODUwKQoqIF9fZnJhY3R1ZGFzYTogICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA4NTYpCiogX19mcmFjdHVkYXNmOiAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDg3OSkKKiBfX2ZyYWN0dWRhc2k6ICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgODc2KQoqIF9fZnJhY3R1ZGFzcTogICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA4NTIpCiogX19mcmFjdHVkYXRhOiAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDg1OCkKKiBfX2ZyYWN0dWRhdGk6ICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgODc4KQoqIF9fZnJhY3R1ZGF1ZHE6ICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA4NjYpCiogX19mcmFjdHVkYXVoYTI6ICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDg2OCkKKiBfX2ZyYWN0dWRhdWhxOiAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgODYyKQoqIF9fZnJhY3R1ZGF1cXE6ICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA4NjApCiogX19mcmFjdHVkYXVzYTI6ICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDg3MCkKKiBfX2ZyYWN0dWRhdXNxOiAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgODY0KQoqIF9fZnJhY3R1ZGF1dGEyOiAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA4NzIpCiogX19mcmFjdHVkcWRhOiAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDc2NCkKKiBfX2ZyYWN0dWRxZGY6ICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNzkwKQoqIF9fZnJhY3R1ZHFkaTogICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA3ODYpCiogX19mcmFjdHVkcWRxOiAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDc1OSkKKiBfX2ZyYWN0dWRxaGE6ICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNzYxKQoqIF9fZnJhY3R1ZHFoaTogICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA3ODQpCiogX19mcmFjdHVkcWhxOiAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDc1NikKKiBfX2ZyYWN0dWRxcWk6ICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNzgyKQoqIF9fZnJhY3R1ZHFxcTogICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA3NTQpCiogX19mcmFjdHVkcXNhOiAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDc2MykKKiBfX2ZyYWN0dWRxc2Y6ICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNzg5KQoqIF9fZnJhY3R1ZHFzaTogICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA3ODUpCiogX19mcmFjdHVkcXNxOiAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDc1NykKKiBfX2ZyYWN0dWRxdGE6ICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNzY2KQoqIF9fZnJhY3R1ZHF0aTogICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA3ODcpCiogX19mcmFjdHVkcXVkYTogICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDc3OCkKKiBfX2ZyYWN0dWRxdWhhOiAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNzc0KQoqIF9fZnJhY3R1ZHF1aHEyOiAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA3NzApCiogX19mcmFjdHVkcXVxcTI6ICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDc2OCkKKiBfX2ZyYWN0dWRxdXNhOiAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNzc2KQoqIF9fZnJhY3R1ZHF1c3EyOiAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA3NzIpCiogX19mcmFjdHVkcXV0YTogICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDc4MCkKKiBfX2ZyYWN0dWhhZGE6ICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNzk4KQoqIF9fZnJhY3R1aGFkZjogICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA4MjEpCiogX19mcmFjdHVoYWRpOiAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDgxOCkKKiBfX2ZyYWN0dWhhZHE6ICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNzk0KQoqIF9fZnJhY3R1aGFoYTogICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA3OTYpCiogX19mcmFjdHVoYWhpOiAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDgxNikKKiBfX2ZyYWN0dWhhaHE6ICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNzkyKQoqIF9fZnJhY3R1aGFxaTogICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA4MTUpCiogX19mcmFjdHVoYXFxOiAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDc5MSkKKiBfX2ZyYWN0dWhhc2E6ICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNzk3KQoqIF9fZnJhY3R1aGFzZjogICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA4MjApCiogX19mcmFjdHVoYXNpOiAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDgxNykKKiBfX2ZyYWN0dWhhc3E6ICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNzkzKQoqIF9fZnJhY3R1aGF0YTogICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA3OTkpCiogX19mcmFjdHVoYXRpOiAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDgxOSkKKiBfX2ZyYWN0dWhhdWRhMjogICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgODExKQoqIF9fZnJhY3R1aGF1ZHE6ICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA4MDcpCiogX19mcmFjdHVoYXVocTogICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDgwMykKKiBfX2ZyYWN0dWhhdXFxOiAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgODAxKQoqIF9fZnJhY3R1aGF1c2EyOiAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA4MDkpCiogX19mcmFjdHVoYXVzcTogICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDgwNSkKKiBfX2ZyYWN0dWhhdXRhMjogICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgODEzKQoqIF9fZnJhY3R1aHFkYTogICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA3MDEpCiogX19mcmFjdHVocWRmOiAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDcyMikKKiBfX2ZyYWN0dWhxZGk6ICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNzE5KQoqIF9fZnJhY3R1aHFkcTogICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA2OTgpCiogX19mcmFjdHVocWhhOiAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDY5OSkKKiBfX2ZyYWN0dWhxaGk6ICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNzE3KQoqIF9fZnJhY3R1aHFocTogICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA2OTYpCiogX19mcmFjdHVocXFpOiAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDcxNikKKiBfX2ZyYWN0dWhxcXE6ICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNjk1KQoqIF9fZnJhY3R1aHFzYTogICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA3MDApCiogX19mcmFjdHVocXNmOiAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDcyMSkKKiBfX2ZyYWN0dWhxc2k6ICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNzE4KQoqIF9fZnJhY3R1aHFzcTogICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA2OTcpCiogX19mcmFjdHVocXRhOiAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDcwMikKKiBfX2ZyYWN0dWhxdGk6ICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNzIwKQoqIF9fZnJhY3R1aHF1ZGE6ICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA3MTIpCiogX19mcmFjdHVocXVkcTI6ICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDcwNykKKiBfX2ZyYWN0dWhxdWhhOiAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNzA5KQoqIF9fZnJhY3R1aHF1cXEyOiAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA3MDMpCiogX19mcmFjdHVocXVzYTogICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDcxMSkKKiBfX2ZyYWN0dWhxdXNxMjogICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNzA1KQoqIF9fZnJhY3R1aHF1dGE6ICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA3MTQpCiogX19mcmFjdHVuc2RhZGk6ICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTU1NCkKKiBfX2ZyYWN0dW5zZGFoaTogICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNTUyKQoqIF9fZnJhY3R1bnNkYXFpOiAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE1NTEpCiogX19mcmFjdHVuc2Rhc2k6ICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTU1MykKKiBfX2ZyYWN0dW5zZGF0aTogICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNTU1KQoqIF9fZnJhY3R1bnNkaWRhOiAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE3MDYpCiogX19mcmFjdHVuc2RpZHE6ICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTcwMykKKiBfX2ZyYWN0dW5zZGloYTogICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNzA0KQoqIF9fZnJhY3R1bnNkaWhxOiAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE3MDEpCiogX19mcmFjdHVuc2RpcXE6ICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTcwMCkKKiBfX2ZyYWN0dW5zZGlzYTogICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNzA1KQoqIF9fZnJhY3R1bnNkaXNxOiAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE3MDIpCiogX19mcmFjdHVuc2RpdGE6ICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTcwNykKKiBfX2ZyYWN0dW5zZGl1ZGE6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNzE4KQoqIF9fZnJhY3R1bnNkaXVkcTogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE3MTMpCiogX19mcmFjdHVuc2RpdWhhOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTcxNSkKKiBfX2ZyYWN0dW5zZGl1aHE6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNzEwKQoqIF9fZnJhY3R1bnNkaXVxcTogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE3MDgpCiogX19mcmFjdHVuc2RpdXNhOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTcxNykKKiBfX2ZyYWN0dW5zZGl1c3E6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNzExKQoqIF9fZnJhY3R1bnNkaXV0YTogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE3MjApCiogX19mcmFjdHVuc2RxZGk6ICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTUzOCkKKiBfX2ZyYWN0dW5zZHFoaTogICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNTM2KQoqIF9fZnJhY3R1bnNkcXFpOiAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE1MzUpCiogX19mcmFjdHVuc2Rxc2k6ICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTUzNykKKiBfX2ZyYWN0dW5zZHF0aTogICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNTM5KQoqIF9fZnJhY3R1bnNoYWRpOiAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE1NDQpCiogX19mcmFjdHVuc2hhaGk6ICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTU0MikKKiBfX2ZyYWN0dW5zaGFxaTogICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNTQxKQoqIF9fZnJhY3R1bnNoYXNpOiAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE1NDMpCiogX19mcmFjdHVuc2hhdGk6ICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTU0NSkKKiBfX2ZyYWN0dW5zaGlkYTogICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNjYyKQoqIF9fZnJhY3R1bnNoaWRxOiAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE2NTkpCiogX19mcmFjdHVuc2hpaGE6ICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTY2MCkKKiBfX2ZyYWN0dW5zaGlocTogICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNjU3KQoqIF9fZnJhY3R1bnNoaXFxOiAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE2NTYpCiogX19mcmFjdHVuc2hpc2E6ICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTY2MSkKKiBfX2ZyYWN0dW5zaGlzcTogICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNjU4KQoqIF9fZnJhY3R1bnNoaXRhOiAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE2NjMpCiogX19mcmFjdHVuc2hpdWRhOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTY3NCkKKiBfX2ZyYWN0dW5zaGl1ZHE6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNjY5KQoqIF9fZnJhY3R1bnNoaXVoYTogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE2NzEpCiogX19mcmFjdHVuc2hpdWhxOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTY2NikKKiBfX2ZyYWN0dW5zaGl1cXE6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNjY0KQoqIF9fZnJhY3R1bnNoaXVzYTogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE2NzMpCiogX19mcmFjdHVuc2hpdXNxOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTY2NykKKiBfX2ZyYWN0dW5zaGl1dGE6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNjc2KQoqIF9fZnJhY3R1bnNocWRpOiAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE1MjgpCiogX19mcmFjdHVuc2hxaGk6ICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTUyNikKKiBfX2ZyYWN0dW5zaHFxaTogICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNTI1KQoqIF9fZnJhY3R1bnNocXNpOiAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE1MjcpCiogX19mcmFjdHVuc2hxdGk6ICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTUyOSkKKiBfX2ZyYWN0dW5zcWlkYTogICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNjQwKQoqIF9fZnJhY3R1bnNxaWRxOiAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE2MzcpCiogX19mcmFjdHVuc3FpaGE6ICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTYzOCkKKiBfX2ZyYWN0dW5zcWlocTogICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNjM1KQoqIF9fZnJhY3R1bnNxaXFxOiAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE2MzQpCiogX19mcmFjdHVuc3Fpc2E6ICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTYzOSkKKiBfX2ZyYWN0dW5zcWlzcTogICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNjM2KQoqIF9fZnJhY3R1bnNxaXRhOiAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE2NDEpCiogX19mcmFjdHVuc3FpdWRhOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTY1MikKKiBfX2ZyYWN0dW5zcWl1ZHE6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNjQ3KQoqIF9fZnJhY3R1bnNxaXVoYTogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE2NDkpCiogX19mcmFjdHVuc3FpdWhxOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTY0NCkKKiBfX2ZyYWN0dW5zcWl1cXE6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNjQyKQoqIF9fZnJhY3R1bnNxaXVzYTogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE2NTEpCiogX19mcmFjdHVuc3FpdXNxOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTY0NSkKKiBfX2ZyYWN0dW5zcWl1dGE6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNjU0KQoqIF9fZnJhY3R1bnNxcWRpOiAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE1MjMpCiogX19mcmFjdHVuc3FxaGk6ICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTUyMSkKKiBfX2ZyYWN0dW5zcXFxaTogICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNTIwKQoqIF9fZnJhY3R1bnNxcXNpOiAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE1MjIpCiogX19mcmFjdHVuc3FxdGk6ICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTUyNCkKKiBfX2ZyYWN0dW5zc2FkaTogICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNTQ5KQoqIF9fZnJhY3R1bnNzYWhpOiAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE1NDcpCiogX19mcmFjdHVuc3NhcWk6ICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTU0NikKKiBfX2ZyYWN0dW5zc2FzaTogICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNTQ4KQoqIF9fZnJhY3R1bnNzYXRpOiAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE1NTApCiogX19mcmFjdHVuc3NpZGE6ICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTY4NCkKKiBfX2ZyYWN0dW5zc2lkcTogICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNjgxKQoqIF9fZnJhY3R1bnNzaWhhOiAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE2ODIpCiogX19mcmFjdHVuc3NpaHE6ICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTY3OSkKKiBfX2ZyYWN0dW5zc2lxcTogICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNjc4KQoqIF9fZnJhY3R1bnNzaXNhOiAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE2ODMpCiogX19mcmFjdHVuc3Npc3E6ICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTY4MCkKKiBfX2ZyYWN0dW5zc2l0YTogICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNjg1KQoqIF9fZnJhY3R1bnNzaXVkYTogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE2OTYpCiogX19mcmFjdHVuc3NpdWRxOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTY5MSkKKiBfX2ZyYWN0dW5zc2l1aGE6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNjkzKQoqIF9fZnJhY3R1bnNzaXVocTogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE2ODgpCiogX19mcmFjdHVuc3NpdXFxOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTY4NikKKiBfX2ZyYWN0dW5zc2l1c2E6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNjk1KQoqIF9fZnJhY3R1bnNzaXVzcTogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE2ODkpCiogX19mcmFjdHVuc3NpdXRhOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTY5OCkKKiBfX2ZyYWN0dW5zc3FkaTogICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNTMzKQoqIF9fZnJhY3R1bnNzcWhpOiAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE1MzEpCiogX19mcmFjdHVuc3NxcWk6ICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTUzMCkKKiBfX2ZyYWN0dW5zc3FzaTogICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNTMyKQoqIF9fZnJhY3R1bnNzcXRpOiAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE1MzQpCiogX19mcmFjdHVuc3RhZGk6ICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTU1OSkKKiBfX2ZyYWN0dW5zdGFoaTogICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNTU3KQoqIF9fZnJhY3R1bnN0YXFpOiAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE1NTYpCiogX19mcmFjdHVuc3Rhc2k6ICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTU1OCkKKiBfX2ZyYWN0dW5zdGF0aTogICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNTYwKQoqIF9fZnJhY3R1bnN0aWRhOiAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE3MjkpCiogX19mcmFjdHVuc3RpZHE6ICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTcyNSkKKiBfX2ZyYWN0dW5zdGloYTogICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNzI3KQoqIF9fZnJhY3R1bnN0aWhxOiAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE3MjMpCiogX19mcmFjdHVuc3RpcXE6ICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTcyMikKKiBfX2ZyYWN0dW5zdGlzYTogICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNzI4KQoqIF9fZnJhY3R1bnN0aXNxOiAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE3MjQpCiogX19mcmFjdHVuc3RpdGE6ICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTczMCkKKiBfX2ZyYWN0dW5zdGl1ZGE6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNzQ0KQoqIF9fZnJhY3R1bnN0aXVkcTogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE3MzgpCiogX19mcmFjdHVuc3RpdWhhOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTc0MCkKKiBfX2ZyYWN0dW5zdGl1aHE6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNzM0KQoqIF9fZnJhY3R1bnN0aXVxcTogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE3MzIpCiogX19mcmFjdHVuc3RpdXNhOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTc0MikKKiBfX2ZyYWN0dW5zdGl1c3E6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNzM2KQoqIF9fZnJhY3R1bnN0aXV0YTogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE3NDYpCiogX19mcmFjdHVuc3VkYWRpOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTYyMCkKKiBfX2ZyYWN0dW5zdWRhaGk6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNjE2KQoqIF9fZnJhY3R1bnN1ZGFxaTogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE2MTQpCiogX19mcmFjdHVuc3VkYXNpOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTYxOCkKKiBfX2ZyYWN0dW5zdWRhdGk6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNjIyKQoqIF9fZnJhY3R1bnN1ZHFkaTogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE1OTQpCiogX19mcmFjdHVuc3VkcWhpOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTU5MCkKKiBfX2ZyYWN0dW5zdWRxcWk6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNTg4KQoqIF9fZnJhY3R1bnN1ZHFzaTogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE1OTIpCiogX19mcmFjdHVuc3VkcXRpOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTU5NikKKiBfX2ZyYWN0dW5zdWhhZGk6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNjA0KQoqIF9fZnJhY3R1bnN1aGFoaTogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE2MDApCiogX19mcmFjdHVuc3VoYXFpOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTU5OCkKKiBfX2ZyYWN0dW5zdWhhc2k6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNjAyKQoqIF9fZnJhY3R1bnN1aGF0aTogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE2MDYpCiogX19mcmFjdHVuc3VocWRpOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTU3NSkKKiBfX2ZyYWN0dW5zdWhxaGk6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNTczKQoqIF9fZnJhY3R1bnN1aHFxaTogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE1NzIpCiogX19mcmFjdHVuc3VocXNpOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTU3NCkKKiBfX2ZyYWN0dW5zdWhxdGk6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNTc2KQoqIF9fZnJhY3R1bnN1cXFkaTogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE1NjgpCiogX19mcmFjdHVuc3VxcWhpOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTU2NCkKKiBfX2ZyYWN0dW5zdXFxcWk6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNTYyKQoqIF9fZnJhY3R1bnN1cXFzaTogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE1NjYpCiogX19mcmFjdHVuc3VxcXRpOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTU3MCkKKiBfX2ZyYWN0dW5zdXNhZGk6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNjExKQoqIF9fZnJhY3R1bnN1c2FoaTogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE2MDkpCiogX19mcmFjdHVuc3VzYXFpOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTYwOCkKKiBfX2ZyYWN0dW5zdXNhc2k6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNjEwKQoqIF9fZnJhY3R1bnN1c2F0aTogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE2MTIpCiogX19mcmFjdHVuc3VzcWRpOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTU4NCkKKiBfX2ZyYWN0dW5zdXNxaGk6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNTgwKQoqIF9fZnJhY3R1bnN1c3FxaTogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE1NzgpCiogX19mcmFjdHVuc3VzcXNpOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTU4MikKKiBfX2ZyYWN0dW5zdXNxdGk6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNTg2KQoqIF9fZnJhY3R1bnN1dGFkaTogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE2MzApCiogX19mcmFjdHVuc3V0YWhpOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTYyNikKKiBfX2ZyYWN0dW5zdXRhcWk6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNjI0KQoqIF9fZnJhY3R1bnN1dGFzaTogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE2MjgpCiogX19mcmFjdHVuc3V0YXRpOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTYzMikKKiBfX2ZyYWN0dXFxZGE6ICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNjcxKQoqIF9fZnJhY3R1cXFkZjogICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA2OTQpCiogX19mcmFjdHVxcWRpOiAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDY5MSkKKiBfX2ZyYWN0dXFxZHE6ICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNjY3KQoqIF9fZnJhY3R1cXFoYTogICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA2NjkpCiogX19mcmFjdHVxcWhpOiAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDY4OSkKKiBfX2ZyYWN0dXFxaHE6ICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNjY1KQoqIF9fZnJhY3R1cXFxaTogICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA2ODgpCiogX19mcmFjdHVxcXFxOiAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDY2NCkKKiBfX2ZyYWN0dXFxc2E6ICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNjcwKQoqIF9fZnJhY3R1cXFzZjogICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA2OTMpCiogX19mcmFjdHVxcXNpOiAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDY5MCkKKiBfX2ZyYWN0dXFxc3E6ICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNjY2KQoqIF9fZnJhY3R1cXF0YTogICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA2NzIpCiogX19mcmFjdHVxcXRpOiAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDY5MikKKiBfX2ZyYWN0dXFxdWRhOiAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNjg0KQoqIF9fZnJhY3R1cXF1ZHEyOiAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA2NzgpCiogX19mcmFjdHVxcXVoYTogICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDY4MCkKKiBfX2ZyYWN0dXFxdWhxMjogICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNjc0KQoqIF9fZnJhY3R1cXF1c2E6ICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA2ODIpCiogX19mcmFjdHVxcXVzcTI6ICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDY3NikKKiBfX2ZyYWN0dXFxdXRhOiAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNjg2KQoqIF9fZnJhY3R1c2FkYTogICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA4MjgpCiogX19mcmFjdHVzYWRmOiAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDg0OSkKKiBfX2ZyYWN0dXNhZGk6ICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgODQ2KQoqIF9fZnJhY3R1c2FkcTogICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA4MjUpCiogX19mcmFjdHVzYWhhOiAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDgyNikKKiBfX2ZyYWN0dXNhaGk6ICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgODQ0KQoqIF9fZnJhY3R1c2FocTogICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA4MjMpCiogX19mcmFjdHVzYXFpOiAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDg0MykKKiBfX2ZyYWN0dXNhcXE6ICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgODIyKQoqIF9fZnJhY3R1c2FzYTogICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA4MjcpCiogX19mcmFjdHVzYXNmOiAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDg0OCkKKiBfX2ZyYWN0dXNhc2k6ICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgODQ1KQoqIF9fZnJhY3R1c2FzcTogICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA4MjQpCiogX19mcmFjdHVzYXRhOiAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDgyOSkKKiBfX2ZyYWN0dXNhdGk6ICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgODQ3KQoqIF9fZnJhY3R1c2F1ZGEyOiAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA4MzkpCiogX19mcmFjdHVzYXVkcTogICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDgzNSkKKiBfX2ZyYWN0dXNhdWhhMjogICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgODM3KQoqIF9fZnJhY3R1c2F1aHE6ICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA4MzIpCiogX19mcmFjdHVzYXVxcTogICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDgzMCkKKiBfX2ZyYWN0dXNhdXNxOiAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgODMzKQoqIF9fZnJhY3R1c2F1dGEyOiAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA4NDEpCiogX19mcmFjdHVzcWRhOiAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDczMCkKKiBfX2ZyYWN0dXNxZGY6ICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNzUzKQoqIF9fZnJhY3R1c3FkaTogICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA3NTApCiogX19mcmFjdHVzcWRxOiAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDcyNikKKiBfX2ZyYWN0dXNxaGE6ICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNzI4KQoqIF9fZnJhY3R1c3FoaTogICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA3NDgpCiogX19mcmFjdHVzcWhxOiAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDcyNCkKKiBfX2ZyYWN0dXNxcWk6ICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNzQ3KQoqIF9fZnJhY3R1c3FxcTogICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA3MjMpCiogX19mcmFjdHVzcXNhOiAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDcyOSkKKiBfX2ZyYWN0dXNxc2Y6ICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNzUyKQoqIF9fZnJhY3R1c3FzaTogICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA3NDkpCiogX19mcmFjdHVzcXNxOiAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDcyNSkKKiBfX2ZyYWN0dXNxdGE6ICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNzMxKQoqIF9fZnJhY3R1c3F0aTogICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA3NTEpCiogX19mcmFjdHVzcXVkYTogICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDc0MykKKiBfX2ZyYWN0dXNxdWRxMjogICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNzM3KQoqIF9fZnJhY3R1c3F1aGE6ICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA3MzkpCiogX19mcmFjdHVzcXVocTI6ICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDczNSkKKiBfX2ZyYWN0dXNxdXFxMjogICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNzMzKQoqIF9fZnJhY3R1c3F1c2E6ICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA3NDEpCiogX19mcmFjdHVzcXV0YTogICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDc0NSkKKiBfX2ZyYWN0dXRhZGE6ICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgODkxKQoqIF9fZnJhY3R1dGFkZjogICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA5MTcpCiogX19mcmFjdHV0YWRpOiAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDkxMykKKiBfX2ZyYWN0dXRhZHE6ICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgODg2KQoqIF9fZnJhY3R1dGFoYTogICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA4ODgpCiogX19mcmFjdHV0YWhpOiAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDkxMSkKKiBfX2ZyYWN0dXRhaHE6ICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgODgzKQoqIF9fZnJhY3R1dGFxaTogICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA5MDkpCiogX19mcmFjdHV0YXFxOiAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDg4MSkKKiBfX2ZyYWN0dXRhc2E6ICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgODkwKQoqIF9fZnJhY3R1dGFzZjogICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA5MTYpCiogX19mcmFjdHV0YXNpOiAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDkxMikKKiBfX2ZyYWN0dXRhc3E6ICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgODg0KQoqIF9fZnJhY3R1dGF0YTogICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA4OTMpCiogX19mcmFjdHV0YXRpOiAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDkxNCkKKiBfX2ZyYWN0dXRhdWRhMjogICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgOTA3KQoqIF9fZnJhY3R1dGF1ZHE6ICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA5MDEpCiogX19mcmFjdHV0YXVoYTI6ICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDkwMykKKiBfX2ZyYWN0dXRhdWhxOiAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgODk3KQoqIF9fZnJhY3R1dGF1cXE6ICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA4OTUpCiogX19mcmFjdHV0YXVzYTI6ICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDkwNSkKKiBfX2ZyYWN0dXRhdXNxOiAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgODk5KQoqIF9fZ2VkZjI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvZnQgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAyMDUpCiogX19nZXNmMjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29mdCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDIwNCkKKiBfX2dldGYyOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb2Z0IGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMjA2KQoqIF9fZ3RkZjI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvZnQgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAyMjMpCiogX19ndHNmMjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29mdCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDIyMikKKiBfX2d0dGYyOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb2Z0IGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMjI0KQoqIF9fbGVkZjI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvZnQgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAyMTcpCiogX19sZXNmMjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29mdCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDIxNikKKiBfX2xldGYyOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb2Z0IGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMjE4KQoqIF9fbHNocmRpMzogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVnZXIgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgMzApCiogX19sc2hyc2kzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWdlciBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICAyOSkKKiBfX2xzaHJ0aTM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlZ2VyIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDMxKQoqIF9fbHNocnVkYTM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAzODgpCiogX19sc2hydWRxMzogICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDM4MikKKiBfX2xzaHJ1aGEzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMzg0KQoqIF9fbHNocnVocTM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAzNzgpCiogX19sc2hydXFxMzogICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDM3NikKKiBfX2xzaHJ1c2EzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMzg2KQoqIF9fbHNocnVzcTM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAzODApCiogX19sc2hydXRhMzogICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDM5MCkKKiBfX2x0ZGYyOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb2Z0IGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMjExKQoqIF9fbHRzZjI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvZnQgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAyMTApCiogX19sdHRmMjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29mdCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDIxMikKKiBfX21haW46ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2xsZWN0Mi4gICAgICAgICAgIChsaW5lICAgMTUpCiogX19tb2RkaTM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWdlciBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICAzNikKKiBfX21vZHNpMzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlZ2VyIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDM1KQoqIF9fbW9kdGkzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVnZXIgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgMzcpCiogX19tdWxkYTM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDE3MCkKKiBfX211bGRjMzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb2Z0IGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMjM5KQoqIF9fbXVsZGYzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvZnQgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgMzkpCiogX19tdWxkaTM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWdlciBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA0MikKKiBfX211bGRxMzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMTU3KQoqIF9fbXVsaGEzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxNjcpCiogX19tdWxocTM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDE1NSkKKiBfX211bHFxMzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMTUzKQoqIF9fbXVsc2EzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxNjkpCiogX19tdWxzYzM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29mdCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDIzNykKKiBfX211bHNmMzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb2Z0IGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDM4KQoqIF9fbXVsc2kzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVnZXIgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgNDEpCiogX19tdWxzcTM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDE1NikKKiBfX211bHRhMzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMTcxKQoqIF9fbXVsdGMzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvZnQgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAyNDEpCiogX19tdWx0ZjM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29mdCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA0MCkKKiBfX211bHRpMzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlZ2VyIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDQzKQoqIF9fbXVsdWRhMzogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxNzcpCiogX19tdWx1ZHEzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDE2NSkKKiBfX211bHVoYTM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMTczKQoqIF9fbXVsdWhxMzogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxNjEpCiogX19tdWx1cXEzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDE1OSkKKiBfX211bHVzYTM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMTc1KQoqIF9fbXVsdXNxMzogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxNjMpCiogX19tdWx1dGEzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDE3OSkKKiBfX211bHZkaTM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlZ2VyIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMTE0KQoqIF9fbXVsdnNpMzogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVnZXIgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxMTMpCiogX19tdWx4YzM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29mdCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDI0MykKKiBfX211bHhmMzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb2Z0IGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDQyKQoqIF9fbmVkZjI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvZnQgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxOTkpCiogX19uZWdkYTI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDI5OCkKKiBfX25lZ2RmMjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb2Z0IGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDU1KQoqIF9fbmVnZGkyOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVnZXIgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgNDYpCiogX19uZWdkcTI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDI4OCkKKiBfX25lZ2hhMjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMjk2KQoqIF9fbmVnaHEyOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAyODYpCiogX19uZWdxcTI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDI4NSkKKiBfX25lZ3NhMjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMjk3KQoqIF9fbmVnc2YyOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvZnQgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgNTQpCiogX19uZWdzcTI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDI4NykKKiBfX25lZ3RhMjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMjk5KQoqIF9fbmVndGYyOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvZnQgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgNTYpCiogX19uZWd0aTI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWdlciBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA0NykKKiBfX25lZ3VkYTI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMzAzKQoqIF9fbmVndWRxMjogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAyOTQpCiogX19uZWd1aGEyOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDMwMCkKKiBfX25lZ3VocTI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMjkxKQoqIF9fbmVndXFxMjogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAyODkpCiogX19uZWd1c2EyOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDMwMikKKiBfX25lZ3VzcTI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMjkyKQoqIF9fbmVndXRhMjogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAzMDUpCiogX19uZWd2ZGkyOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWdlciBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDExOCkKKiBfX25lZ3ZzaTI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlZ2VyIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMTE3KQoqIF9fbmVneGYyOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvZnQgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgNTcpCiogX19uZXNmMjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29mdCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDE5OCkKKiBfX25ldGYyOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb2Z0IGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMjAwKQoqIF9fcGFyaXR5ZGkyOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVnZXIgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxNTApCiogX19wYXJpdHlzaTI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWdlciBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDE0OSkKKiBfX3Bhcml0eXRpMjogICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlZ2VyIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMTUxKQoqIF9fcG9wY291bnRkaTI6ICAgICAgICAgICAgICAgICAgICAgICAgIEludGVnZXIgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxNTYpCiogX19wb3Bjb3VudHNpMjogICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWdlciBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDE1NSkKKiBfX3BvcGNvdW50dGkyOiAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlZ2VyIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMTU3KQoqIF9fcG93aWRmMjogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvZnQgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAyMzIpCiogX19wb3dpc2YyOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29mdCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDIzMSkKKiBfX3Bvd2l0ZjI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb2Z0IGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMjMzKQoqIF9fcG93aXhmMjogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvZnQgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAyMzQpCiogX19zYXRmcmFjdGRhZHE6ICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTE1MikKKiBfX3NhdGZyYWN0ZGFoYTI6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMTUzKQoqIF9fc2F0ZnJhY3RkYWhxOiAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDExNTApCiogX19zYXRmcmFjdGRhcXE6ICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTE0OSkKKiBfX3NhdGZyYWN0ZGFzYTI6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMTU0KQoqIF9fc2F0ZnJhY3RkYXNxOiAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDExNTEpCiogX19zYXRmcmFjdGRhdGEyOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTE1NSkKKiBfX3NhdGZyYWN0ZGF1ZGE6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMTY1KQoqIF9fc2F0ZnJhY3RkYXVkcTogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDExNjApCiogX19zYXRmcmFjdGRhdWhhOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTE2MikKKiBfX3NhdGZyYWN0ZGF1aHE6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMTU4KQoqIF9fc2F0ZnJhY3RkYXVxcTogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDExNTYpCiogX19zYXRmcmFjdGRhdXNhOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTE2NCkKKiBfX3NhdGZyYWN0ZGF1c3E6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMTU5KQoqIF9fc2F0ZnJhY3RkYXV0YTogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDExNjYpCiogX19zYXRmcmFjdGRmZGE6ICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTUwNSkKKiBfX3NhdGZyYWN0ZGZkcTogICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNTAyKQoqIF9fc2F0ZnJhY3RkZmhhOiAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE1MDMpCiogX19zYXRmcmFjdGRmaHE6ICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTUwMCkKKiBfX3NhdGZyYWN0ZGZxcTogICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNDk5KQoqIF9fc2F0ZnJhY3RkZnNhOiAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE1MDQpCiogX19zYXRmcmFjdGRmc3E6ICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTUwMSkKKiBfX3NhdGZyYWN0ZGZ0YTogICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNTA2KQoqIF9fc2F0ZnJhY3RkZnVkYTogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE1MTQpCiogX19zYXRmcmFjdGRmdWRxOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTUxMCkKKiBfX3NhdGZyYWN0ZGZ1aGE6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNTEyKQoqIF9fc2F0ZnJhY3RkZnVocTogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE1MDgpCiogX19zYXRmcmFjdGRmdXFxOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTUwNykKKiBfX3NhdGZyYWN0ZGZ1c2E6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNTEzKQoqIF9fc2F0ZnJhY3RkZnVzcTogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE1MDkpCiogX19zYXRmcmFjdGRmdXRhOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTUxNSkKKiBfX3NhdGZyYWN0ZGlkYTogICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNDU1KQoqIF9fc2F0ZnJhY3RkaWRxOiAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE0NTIpCiogX19zYXRmcmFjdGRpaGE6ICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTQ1MykKKiBfX3NhdGZyYWN0ZGlocTogICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNDUwKQoqIF9fc2F0ZnJhY3RkaXFxOiAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE0NDkpCiogX19zYXRmcmFjdGRpc2E6ICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTQ1NCkKKiBfX3NhdGZyYWN0ZGlzcTogICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNDUxKQoqIF9fc2F0ZnJhY3RkaXRhOiAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE0NTYpCiogX19zYXRmcmFjdGRpdWRhOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTQ2MykKKiBfX3NhdGZyYWN0ZGl1ZHE6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNDYwKQoqIF9fc2F0ZnJhY3RkaXVoYTogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE0NjEpCiogX19zYXRmcmFjdGRpdWhxOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTQ1OCkKKiBfX3NhdGZyYWN0ZGl1cXE6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNDU3KQoqIF9fc2F0ZnJhY3RkaXVzYTogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE0NjIpCiogX19zYXRmcmFjdGRpdXNxOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTQ1OSkKKiBfX3NhdGZyYWN0ZGl1dGE6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNDY0KQoqIF9fc2F0ZnJhY3RkcWRhOiAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDEwOTcpCiogX19zYXRmcmFjdGRxaGE6ICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTA5NSkKKiBfX3NhdGZyYWN0ZHFocTI6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMDkzKQoqIF9fc2F0ZnJhY3RkcXFxMjogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDEwOTIpCiogX19zYXRmcmFjdGRxc2E6ICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTA5NikKKiBfX3NhdGZyYWN0ZHFzcTI6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMDk0KQoqIF9fc2F0ZnJhY3RkcXRhOiAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDEwOTgpCiogX19zYXRmcmFjdGRxdWRhOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTEwOSkKKiBfX3NhdGZyYWN0ZHF1ZHE6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMTA0KQoqIF9fc2F0ZnJhY3RkcXVoYTogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDExMDYpCiogX19zYXRmcmFjdGRxdWhxOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTEwMSkKKiBfX3NhdGZyYWN0ZHF1cXE6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMDk5KQoqIF9fc2F0ZnJhY3RkcXVzYTogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDExMDgpCiogX19zYXRmcmFjdGRxdXNxOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTEwMikKKiBfX3NhdGZyYWN0ZHF1dGE6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMTExKQoqIF9fc2F0ZnJhY3RoYWRhMjogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDExMTgpCiogX19zYXRmcmFjdGhhZHE6ICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTExNikKKiBfX3NhdGZyYWN0aGFocTogICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMTE0KQoqIF9fc2F0ZnJhY3RoYXFxOiAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDExMTMpCiogX19zYXRmcmFjdGhhc2EyOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTExNykKKiBfX3NhdGZyYWN0aGFzcTogICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMTE1KQoqIF9fc2F0ZnJhY3RoYXRhMjogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDExMTkpCiogX19zYXRmcmFjdGhhdWRhOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTEzMCkKKiBfX3NhdGZyYWN0aGF1ZHE6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMTI1KQoqIF9fc2F0ZnJhY3RoYXVoYTogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDExMjcpCiogX19zYXRmcmFjdGhhdWhxOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTEyMikKKiBfX3NhdGZyYWN0aGF1cXE6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMTIwKQoqIF9fc2F0ZnJhY3RoYXVzYTogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDExMjkpCiogX19zYXRmcmFjdGhhdXNxOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTEyMykKKiBfX3NhdGZyYWN0aGF1dGE6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMTMyKQoqIF9fc2F0ZnJhY3RoaWRhOiAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE0MjMpCiogX19zYXRmcmFjdGhpZHE6ICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTQyMCkKKiBfX3NhdGZyYWN0aGloYTogICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNDIxKQoqIF9fc2F0ZnJhY3RoaWhxOiAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE0MTgpCiogX19zYXRmcmFjdGhpcXE6ICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTQxNykKKiBfX3NhdGZyYWN0aGlzYTogICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNDIyKQoqIF9fc2F0ZnJhY3RoaXNxOiAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE0MTkpCiogX19zYXRmcmFjdGhpdGE6ICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTQyNCkKKiBfX3NhdGZyYWN0aGl1ZGE6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNDMxKQoqIF9fc2F0ZnJhY3RoaXVkcTogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE0MjgpCiogX19zYXRmcmFjdGhpdWhhOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTQyOSkKKiBfX3NhdGZyYWN0aGl1aHE6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNDI2KQoqIF9fc2F0ZnJhY3RoaXVxcTogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE0MjUpCiogX19zYXRmcmFjdGhpdXNhOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTQzMCkKKiBfX3NhdGZyYWN0aGl1c3E6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNDI3KQoqIF9fc2F0ZnJhY3RoaXV0YTogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE0MzIpCiogX19zYXRmcmFjdGhxZGE6ICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTA2MykKKiBfX3NhdGZyYWN0aHFkcTI6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMDYwKQoqIF9fc2F0ZnJhY3RocWhhOiAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDEwNjEpCiogX19zYXRmcmFjdGhxcXEyOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTA1OCkKKiBfX3NhdGZyYWN0aHFzYTogICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMDYyKQoqIF9fc2F0ZnJhY3RocXNxMjogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDEwNTkpCiogX19zYXRmcmFjdGhxdGE6ICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTA2NCkKKiBfX3NhdGZyYWN0aHF1ZGE6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMDcxKQoqIF9fc2F0ZnJhY3RocXVkcTogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDEwNjgpCiogX19zYXRmcmFjdGhxdWhhOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTA2OSkKKiBfX3NhdGZyYWN0aHF1aHE6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMDY2KQoqIF9fc2F0ZnJhY3RocXVxcTogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDEwNjUpCiogX19zYXRmcmFjdGhxdXNhOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTA3MCkKKiBfX3NhdGZyYWN0aHF1c3E6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMDY3KQoqIF9fc2F0ZnJhY3RocXV0YTogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDEwNzIpCiogX19zYXRmcmFjdHFpZGE6ICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTQwMSkKKiBfX3NhdGZyYWN0cWlkcTogICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMzk4KQoqIF9fc2F0ZnJhY3RxaWhhOiAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDEzOTkpCiogX19zYXRmcmFjdHFpaHE6ICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTM5NikKKiBfX3NhdGZyYWN0cWlxcTogICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMzk1KQoqIF9fc2F0ZnJhY3RxaXNhOiAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE0MDApCiogX19zYXRmcmFjdHFpc3E6ICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTM5NykKKiBfX3NhdGZyYWN0cWl0YTogICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNDAyKQoqIF9fc2F0ZnJhY3RxaXVkYTogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE0MTMpCiogX19zYXRmcmFjdHFpdWRxOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTQwOCkKKiBfX3NhdGZyYWN0cWl1aGE6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNDEwKQoqIF9fc2F0ZnJhY3RxaXVocTogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE0MDUpCiogX19zYXRmcmFjdHFpdXFxOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTQwMykKKiBfX3NhdGZyYWN0cWl1c2E6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNDEyKQoqIF9fc2F0ZnJhY3RxaXVzcTogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE0MDYpCiogX19zYXRmcmFjdHFpdXRhOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTQxNSkKKiBfX3NhdGZyYWN0cXFkYTogICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMDQyKQoqIF9fc2F0ZnJhY3RxcWRxMjogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDEwMzkpCiogX19zYXRmcmFjdHFxaGE6ICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTA0MCkKKiBfX3NhdGZyYWN0cXFocTI6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMDM3KQoqIF9fc2F0ZnJhY3RxcXNhOiAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDEwNDEpCiogX19zYXRmcmFjdHFxc3EyOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTAzOCkKKiBfX3NhdGZyYWN0cXF0YTogICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMDQzKQoqIF9fc2F0ZnJhY3RxcXVkYTogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDEwNTQpCiogX19zYXRmcmFjdHFxdWRxOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTA0OSkKKiBfX3NhdGZyYWN0cXF1aGE6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMDUxKQoqIF9fc2F0ZnJhY3RxcXVocTogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDEwNDYpCiogX19zYXRmcmFjdHFxdXFxOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTA0NCkKKiBfX3NhdGZyYWN0cXF1c2E6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMDUzKQoqIF9fc2F0ZnJhY3RxcXVzcTogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDEwNDcpCiogX19zYXRmcmFjdHFxdXRhOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTA1NikKKiBfX3NhdGZyYWN0c2FkYTI6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMTM5KQoqIF9fc2F0ZnJhY3RzYWRxOiAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDExMzcpCiogX19zYXRmcmFjdHNhaGEyOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTEzOCkKKiBfX3NhdGZyYWN0c2FocTogICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMTM1KQoqIF9fc2F0ZnJhY3RzYXFxOiAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDExMzQpCiogX19zYXRmcmFjdHNhc3E6ICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTEzNikKKiBfX3NhdGZyYWN0c2F0YTI6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMTQwKQoqIF9fc2F0ZnJhY3RzYXVkYTogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDExNDcpCiogX19zYXRmcmFjdHNhdWRxOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTE0NCkKKiBfX3NhdGZyYWN0c2F1aGE6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMTQ1KQoqIF9fc2F0ZnJhY3RzYXVocTogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDExNDIpCiogX19zYXRmcmFjdHNhdXFxOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTE0MSkKKiBfX3NhdGZyYWN0c2F1c2E6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMTQ2KQoqIF9fc2F0ZnJhY3RzYXVzcTogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDExNDMpCiogX19zYXRmcmFjdHNhdXRhOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTE0OCkKKiBfX3NhdGZyYWN0c2ZkYTogICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNDg5KQoqIF9fc2F0ZnJhY3RzZmRxOiAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE0ODYpCiogX19zYXRmcmFjdHNmaGE6ICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTQ4NykKKiBfX3NhdGZyYWN0c2ZocTogICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNDg0KQoqIF9fc2F0ZnJhY3RzZnFxOiAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE0ODMpCiogX19zYXRmcmFjdHNmc2E6ICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTQ4OCkKKiBfX3NhdGZyYWN0c2ZzcTogICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNDg1KQoqIF9fc2F0ZnJhY3RzZnRhOiAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE0OTApCiogX19zYXRmcmFjdHNmdWRhOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTQ5NykKKiBfX3NhdGZyYWN0c2Z1ZHE6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNDk0KQoqIF9fc2F0ZnJhY3RzZnVoYTogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE0OTUpCiogX19zYXRmcmFjdHNmdWhxOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTQ5MikKKiBfX3NhdGZyYWN0c2Z1cXE6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNDkxKQoqIF9fc2F0ZnJhY3RzZnVzYTogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE0OTYpCiogX19zYXRmcmFjdHNmdXNxOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTQ5MykKKiBfX3NhdGZyYWN0c2Z1dGE6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNDk4KQoqIF9fc2F0ZnJhY3RzaWRhOiAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE0MzkpCiogX19zYXRmcmFjdHNpZHE6ICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTQzNikKKiBfX3NhdGZyYWN0c2loYTogICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNDM3KQoqIF9fc2F0ZnJhY3RzaWhxOiAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE0MzQpCiogX19zYXRmcmFjdHNpcXE6ICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTQzMykKKiBfX3NhdGZyYWN0c2lzYTogICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNDM4KQoqIF9fc2F0ZnJhY3RzaXNxOiAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE0MzUpCiogX19zYXRmcmFjdHNpdGE6ICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTQ0MCkKKiBfX3NhdGZyYWN0c2l1ZGE6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNDQ3KQoqIF9fc2F0ZnJhY3RzaXVkcTogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE0NDQpCiogX19zYXRmcmFjdHNpdWhhOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTQ0NSkKKiBfX3NhdGZyYWN0c2l1aHE6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNDQyKQoqIF9fc2F0ZnJhY3RzaXVxcTogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE0NDEpCiogX19zYXRmcmFjdHNpdXNhOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTQ0NikKKiBfX3NhdGZyYWN0c2l1c3E6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNDQzKQoqIF9fc2F0ZnJhY3RzaXV0YTogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE0NDgpCiogX19zYXRmcmFjdHNxZGE6ICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTA3OCkKKiBfX3NhdGZyYWN0c3FkcTI6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMDc1KQoqIF9fc2F0ZnJhY3RzcWhhOiAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDEwNzYpCiogX19zYXRmcmFjdHNxaHEyOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTA3NCkKKiBfX3NhdGZyYWN0c3FxcTI6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMDczKQoqIF9fc2F0ZnJhY3RzcXNhOiAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDEwNzcpCiogX19zYXRmcmFjdHNxdGE6ICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTA3OSkKKiBfX3NhdGZyYWN0c3F1ZGE6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMDg5KQoqIF9fc2F0ZnJhY3RzcXVkcTogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDEwODQpCiogX19zYXRmcmFjdHNxdWhhOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTA4NikKKiBfX3NhdGZyYWN0c3F1aHE6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMDgyKQoqIF9fc2F0ZnJhY3RzcXVxcTogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDEwODApCiogX19zYXRmcmFjdHNxdXNhOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTA4OCkKKiBfX3NhdGZyYWN0c3F1c3E6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMDgzKQoqIF9fc2F0ZnJhY3RzcXV0YTogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDEwOTApCiogX19zYXRmcmFjdHRhZGEyOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTE3NCkKKiBfX3NhdGZyYWN0dGFkcTogICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMTcxKQoqIF9fc2F0ZnJhY3R0YWhhMjogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDExNzIpCiogX19zYXRmcmFjdHRhaHE6ICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTE2OSkKKiBfX3NhdGZyYWN0dGFxcTogICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMTY4KQoqIF9fc2F0ZnJhY3R0YXNhMjogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDExNzMpCiogX19zYXRmcmFjdHRhc3E6ICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTE3MCkKKiBfX3NhdGZyYWN0dGF1ZGE6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMTg1KQoqIF9fc2F0ZnJhY3R0YXVkcTogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDExODApCiogX19zYXRmcmFjdHRhdWhhOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTE4MikKKiBfX3NhdGZyYWN0dGF1aHE6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMTc3KQoqIF9fc2F0ZnJhY3R0YXVxcTogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDExNzUpCiogX19zYXRmcmFjdHRhdXNhOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTE4NCkKKiBfX3NhdGZyYWN0dGF1c3E6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMTc4KQoqIF9fc2F0ZnJhY3R0YXV0YTogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDExODcpCiogX19zYXRmcmFjdHRpZGE6ICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTQ3MSkKKiBfX3NhdGZyYWN0dGlkcTogICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNDY4KQoqIF9fc2F0ZnJhY3R0aWhhOiAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE0NjkpCiogX19zYXRmcmFjdHRpaHE6ICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTQ2NikKKiBfX3NhdGZyYWN0dGlxcTogICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNDY1KQoqIF9fc2F0ZnJhY3R0aXNhOiAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE0NzApCiogX19zYXRmcmFjdHRpc3E6ICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTQ2NykKKiBfX3NhdGZyYWN0dGl0YTogICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNDcyKQoqIF9fc2F0ZnJhY3R0aXVkYTogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE0ODApCiogX19zYXRmcmFjdHRpdWRxOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTQ3NikKKiBfX3NhdGZyYWN0dGl1aGE6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNDc4KQoqIF9fc2F0ZnJhY3R0aXVocTogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE0NzQpCiogX19zYXRmcmFjdHRpdXFxOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTQ3MykKKiBfX3NhdGZyYWN0dGl1c2E6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNDc5KQoqIF9fc2F0ZnJhY3R0aXVzcTogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE0NzUpCiogX19zYXRmcmFjdHRpdXRhOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTQ4MSkKKiBfX3NhdGZyYWN0dWRhZGE6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMzUwKQoqIF9fc2F0ZnJhY3R1ZGFkcTogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDEzNDUpCiogX19zYXRmcmFjdHVkYWhhOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTM0NykKKiBfX3NhdGZyYWN0dWRhaHE6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMzQzKQoqIF9fc2F0ZnJhY3R1ZGFxcTogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDEzNDEpCiogX19zYXRmcmFjdHVkYXNhOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTM0OSkKKiBfX3NhdGZyYWN0dWRhc3E6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMzQ0KQoqIF9fc2F0ZnJhY3R1ZGF0YTogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDEzNTEpCiogX19zYXRmcmFjdHVkYXVkcTogICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTM1OSkKKiBfX3NhdGZyYWN0dWRhdWhhMjogICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMzYxKQoqIF9fc2F0ZnJhY3R1ZGF1aHE6ICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDEzNTUpCiogX19zYXRmcmFjdHVkYXVxcTogICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTM1MykKKiBfX3NhdGZyYWN0dWRhdXNhMjogICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMzYzKQoqIF9fc2F0ZnJhY3R1ZGF1c3E6ICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDEzNTcpCiogX19zYXRmcmFjdHVkYXV0YTI6ICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTM2NSkKKiBfX3NhdGZyYWN0dWRxZGE6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMjc0KQoqIF9fc2F0ZnJhY3R1ZHFkcTogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDEyNjkpCiogX19zYXRmcmFjdHVkcWhhOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTI3MSkKKiBfX3NhdGZyYWN0dWRxaHE6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMjY2KQoqIF9fc2F0ZnJhY3R1ZHFxcTogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDEyNjQpCiogX19zYXRmcmFjdHVkcXNhOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTI3MykKKiBfX3NhdGZyYWN0dWRxc3E6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMjY3KQoqIF9fc2F0ZnJhY3R1ZHF0YTogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDEyNzYpCiogX19zYXRmcmFjdHVkcXVkYTogICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTI4OCkKKiBfX3NhdGZyYWN0dWRxdWhhOiAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMjg0KQoqIF9fc2F0ZnJhY3R1ZHF1aHEyOiAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDEyODApCiogX19zYXRmcmFjdHVkcXVxcTI6ICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTI3OCkKKiBfX3NhdGZyYWN0dWRxdXNhOiAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMjg2KQoqIF9fc2F0ZnJhY3R1ZHF1c3EyOiAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDEyODIpCiogX19zYXRmcmFjdHVkcXV0YTogICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTI5MCkKKiBfX3NhdGZyYWN0dWhhZGE6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMzAyKQoqIF9fc2F0ZnJhY3R1aGFkcTogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDEyOTcpCiogX19zYXRmcmFjdHVoYWhhOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTI5OSkKKiBfX3NhdGZyYWN0dWhhaHE6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMjk0KQoqIF9fc2F0ZnJhY3R1aGFxcTogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDEyOTIpCiogX19zYXRmcmFjdHVoYXNhOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTMwMSkKKiBfX3NhdGZyYWN0dWhhc3E6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMjk1KQoqIF9fc2F0ZnJhY3R1aGF0YTogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDEzMDQpCiogX19zYXRmcmFjdHVoYXVkYTI6ICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTMxNikKKiBfX3NhdGZyYWN0dWhhdWRxOiAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMzEyKQoqIF9fc2F0ZnJhY3R1aGF1aHE6ICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDEzMDgpCiogX19zYXRmcmFjdHVoYXVxcTogICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTMwNikKKiBfX3NhdGZyYWN0dWhhdXNhMjogICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMzE0KQoqIF9fc2F0ZnJhY3R1aGF1c3E6ICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDEzMTApCiogX19zYXRmcmFjdHVoYXV0YTI6ICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTMxOCkKKiBfX3NhdGZyYWN0dWhxZGE6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMjIzKQoqIF9fc2F0ZnJhY3R1aHFkcTogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDEyMjApCiogX19zYXRmcmFjdHVocWhhOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTIyMSkKKiBfX3NhdGZyYWN0dWhxaHE6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMjE4KQoqIF9fc2F0ZnJhY3R1aHFxcTogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDEyMTcpCiogX19zYXRmcmFjdHVocXNhOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTIyMikKKiBfX3NhdGZyYWN0dWhxc3E6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMjE5KQoqIF9fc2F0ZnJhY3R1aHF0YTogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDEyMjQpCiogX19zYXRmcmFjdHVocXVkYTogICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTIzNCkKKiBfX3NhdGZyYWN0dWhxdWRxMjogICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMjI5KQoqIF9fc2F0ZnJhY3R1aHF1aGE6ICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDEyMzEpCiogX19zYXRmcmFjdHVocXVxcTI6ICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTIyNSkKKiBfX3NhdGZyYWN0dWhxdXNhOiAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMjMzKQoqIF9fc2F0ZnJhY3R1aHF1c3EyOiAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDEyMjcpCiogX19zYXRmcmFjdHVocXV0YTogICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTIzNikKKiBfX3NhdGZyYWN0dW5zZGlkYTogICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxODMzKQoqIF9fc2F0ZnJhY3R1bnNkaWRxOiAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE4MjkpCiogX19zYXRmcmFjdHVuc2RpaGE6ICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTgzMSkKKiBfX3NhdGZyYWN0dW5zZGlocTogICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxODI3KQoqIF9fc2F0ZnJhY3R1bnNkaXFxOiAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE4MjYpCiogX19zYXRmcmFjdHVuc2Rpc2E6ICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTgzMikKKiBfX3NhdGZyYWN0dW5zZGlzcTogICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxODI4KQoqIF9fc2F0ZnJhY3R1bnNkaXRhOiAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE4MzQpCiogX19zYXRmcmFjdHVuc2RpdWRhOiAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTg0OCkKKiBfX3NhdGZyYWN0dW5zZGl1ZHE6ICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxODQyKQoqIF9fc2F0ZnJhY3R1bnNkaXVoYTogICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE4NDQpCiogX19zYXRmcmFjdHVuc2RpdWhxOiAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTgzOCkKKiBfX3NhdGZyYWN0dW5zZGl1cXE6ICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxODM2KQoqIF9fc2F0ZnJhY3R1bnNkaXVzYTogICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE4NDYpCiogX19zYXRmcmFjdHVuc2RpdXNxOiAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTg0MCkKKiBfX3NhdGZyYWN0dW5zZGl1dGE6ICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxODUwKQoqIF9fc2F0ZnJhY3R1bnNoaWRhOiAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE3ODUpCiogX19zYXRmcmFjdHVuc2hpZHE6ICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTc4MSkKKiBfX3NhdGZyYWN0dW5zaGloYTogICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNzgzKQoqIF9fc2F0ZnJhY3R1bnNoaWhxOiAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE3NzkpCiogX19zYXRmcmFjdHVuc2hpcXE6ICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTc3OCkKKiBfX3NhdGZyYWN0dW5zaGlzYTogICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNzg0KQoqIF9fc2F0ZnJhY3R1bnNoaXNxOiAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE3ODApCiogX19zYXRmcmFjdHVuc2hpdGE6ICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTc4NikKKiBfX3NhdGZyYWN0dW5zaGl1ZGE6ICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxODAwKQoqIF9fc2F0ZnJhY3R1bnNoaXVkcTogICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE3OTQpCiogX19zYXRmcmFjdHVuc2hpdWhhOiAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTc5NikKKiBfX3NhdGZyYWN0dW5zaGl1aHE6ICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNzkwKQoqIF9fc2F0ZnJhY3R1bnNoaXVxcTogICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE3ODgpCiogX19zYXRmcmFjdHVuc2hpdXNhOiAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTc5OCkKKiBfX3NhdGZyYWN0dW5zaGl1c3E6ICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNzkyKQoqIF9fc2F0ZnJhY3R1bnNoaXV0YTogICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE4MDIpCiogX19zYXRmcmFjdHVuc3FpZGE6ICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTc1OSkKKiBfX3NhdGZyYWN0dW5zcWlkcTogICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNzU1KQoqIF9fc2F0ZnJhY3R1bnNxaWhhOiAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE3NTcpCiogX19zYXRmcmFjdHVuc3FpaHE6ICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTc1MykKKiBfX3NhdGZyYWN0dW5zcWlxcTogICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNzUyKQoqIF9fc2F0ZnJhY3R1bnNxaXNhOiAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE3NTgpCiogX19zYXRmcmFjdHVuc3Fpc3E6ICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTc1NCkKKiBfX3NhdGZyYWN0dW5zcWl0YTogICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNzYwKQoqIF9fc2F0ZnJhY3R1bnNxaXVkYTogICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE3NzQpCiogX19zYXRmcmFjdHVuc3FpdWRxOiAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTc2OCkKKiBfX3NhdGZyYWN0dW5zcWl1aGE6ICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNzcwKQoqIF9fc2F0ZnJhY3R1bnNxaXVocTogICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE3NjQpCiogX19zYXRmcmFjdHVuc3FpdXFxOiAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTc2MikKKiBfX3NhdGZyYWN0dW5zcWl1c2E6ICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNzcyKQoqIF9fc2F0ZnJhY3R1bnNxaXVzcTogICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE3NjYpCiogX19zYXRmcmFjdHVuc3FpdXRhOiAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTc3NikKKiBfX3NhdGZyYWN0dW5zc2lkYTogICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxODEwKQoqIF9fc2F0ZnJhY3R1bnNzaWRxOiAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE4MDcpCiogX19zYXRmcmFjdHVuc3NpaGE6ICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTgwOCkKKiBfX3NhdGZyYWN0dW5zc2locTogICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxODA1KQoqIF9fc2F0ZnJhY3R1bnNzaXFxOiAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE4MDQpCiogX19zYXRmcmFjdHVuc3Npc2E6ICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTgwOSkKKiBfX3NhdGZyYWN0dW5zc2lzcTogICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxODA2KQoqIF9fc2F0ZnJhY3R1bnNzaXRhOiAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE4MTEpCiogX19zYXRmcmFjdHVuc3NpdWRhOiAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTgyMikKKiBfX3NhdGZyYWN0dW5zc2l1ZHE6ICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxODE3KQoqIF9fc2F0ZnJhY3R1bnNzaXVoYTogICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE4MTkpCiogX19zYXRmcmFjdHVuc3NpdWhxOiAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTgxNCkKKiBfX3NhdGZyYWN0dW5zc2l1cXE6ICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxODEyKQoqIF9fc2F0ZnJhY3R1bnNzaXVzYTogICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE4MjEpCiogX19zYXRmcmFjdHVuc3NpdXNxOiAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTgxNSkKKiBfX3NhdGZyYWN0dW5zc2l1dGE6ICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxODI0KQoqIF9fc2F0ZnJhY3R1bnN0aWRhOiAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE4NjIpCiogX19zYXRmcmFjdHVuc3RpZHE6ICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTg1NykKKiBfX3NhdGZyYWN0dW5zdGloYTogICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxODU5KQoqIF9fc2F0ZnJhY3R1bnN0aWhxOiAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE4NTQpCiogX19zYXRmcmFjdHVuc3RpcXE6ICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTg1MikKKiBfX3NhdGZyYWN0dW5zdGlzYTogICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxODYxKQoqIF9fc2F0ZnJhY3R1bnN0aXNxOiAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE4NTUpCiogX19zYXRmcmFjdHVuc3RpdGE6ICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTg2NCkKKiBfX3NhdGZyYWN0dW5zdGl1ZGE6ICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxODc4KQoqIF9fc2F0ZnJhY3R1bnN0aXVkcTogICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE4NzIpCiogX19zYXRmcmFjdHVuc3RpdWhhOiAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTg3NCkKKiBfX3NhdGZyYWN0dW5zdGl1aHE6ICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxODY4KQoqIF9fc2F0ZnJhY3R1bnN0aXVxcTogICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE4NjYpCiogX19zYXRmcmFjdHVuc3RpdXNhOiAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTg3NikKKiBfX3NhdGZyYWN0dW5zdGl1c3E6ICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxODcwKQoqIF9fc2F0ZnJhY3R1bnN0aXV0YTogICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE4ODApCiogX19zYXRmcmFjdHVxcWRhOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTE5OSkKKiBfX3NhdGZyYWN0dXFxZHE6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMTk0KQoqIF9fc2F0ZnJhY3R1cXFoYTogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDExOTYpCiogX19zYXRmcmFjdHVxcWhxOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTE5MSkKKiBfX3NhdGZyYWN0dXFxcXE6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMTg5KQoqIF9fc2F0ZnJhY3R1cXFzYTogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDExOTgpCiogX19zYXRmcmFjdHVxcXNxOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTE5MikKKiBfX3NhdGZyYWN0dXFxdGE6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMjAxKQoqIF9fc2F0ZnJhY3R1cXF1ZGE6ICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDEyMTMpCiogX19zYXRmcmFjdHVxcXVkcTI6ICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTIwNykKKiBfX3NhdGZyYWN0dXFxdWhhOiAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMjA5KQoqIF9fc2F0ZnJhY3R1cXF1aHEyOiAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDEyMDMpCiogX19zYXRmcmFjdHVxcXVzYTogICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTIxMSkKKiBfX3NhdGZyYWN0dXFxdXNxMjogICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMjA1KQoqIF9fc2F0ZnJhY3R1cXF1dGE6ICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDEyMTUpCiogX19zYXRmcmFjdHVzYWRhOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTMyNikKKiBfX3NhdGZyYWN0dXNhZHE6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMzIzKQoqIF9fc2F0ZnJhY3R1c2FoYTogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDEzMjQpCiogX19zYXRmcmFjdHVzYWhxOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTMyMSkKKiBfX3NhdGZyYWN0dXNhcXE6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMzIwKQoqIF9fc2F0ZnJhY3R1c2FzYTogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDEzMjUpCiogX19zYXRmcmFjdHVzYXNxOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTMyMikKKiBfX3NhdGZyYWN0dXNhdGE6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMzI3KQoqIF9fc2F0ZnJhY3R1c2F1ZGEyOiAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDEzMzcpCiogX19zYXRmcmFjdHVzYXVkcTogICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTMzMykKKiBfX3NhdGZyYWN0dXNhdWhhMjogICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMzM1KQoqIF9fc2F0ZnJhY3R1c2F1aHE6ICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDEzMzApCiogX19zYXRmcmFjdHVzYXVxcTogICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTMyOCkKKiBfX3NhdGZyYWN0dXNhdXNxOiAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMzMxKQoqIF9fc2F0ZnJhY3R1c2F1dGEyOiAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDEzMzkpCiogX19zYXRmcmFjdHVzcWRhOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTI0NykKKiBfX3NhdGZyYWN0dXNxZHE6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMjQyKQoqIF9fc2F0ZnJhY3R1c3FoYTogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDEyNDQpCiogX19zYXRmcmFjdHVzcWhxOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTI0MCkKKiBfX3NhdGZyYWN0dXNxcXE6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMjM4KQoqIF9fc2F0ZnJhY3R1c3FzYTogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDEyNDYpCiogX19zYXRmcmFjdHVzcXNxOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTI0MSkKKiBfX3NhdGZyYWN0dXNxdGE6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMjQ4KQoqIF9fc2F0ZnJhY3R1c3F1ZGE6ICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDEyNjApCiogX19zYXRmcmFjdHVzcXVkcTI6ICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTI1NCkKKiBfX3NhdGZyYWN0dXNxdWhhOiAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMjU2KQoqIF9fc2F0ZnJhY3R1c3F1aHEyOiAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDEyNTIpCiogX19zYXRmcmFjdHVzcXVxcTI6ICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTI1MCkKKiBfX3NhdGZyYWN0dXNxdXNhOiAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMjU4KQoqIF9fc2F0ZnJhY3R1c3F1dGE6ICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDEyNjIpCiogX19zYXRmcmFjdHV0YWRhOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTM3NykKKiBfX3NhdGZyYWN0dXRhZHE6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMzcyKQoqIF9fc2F0ZnJhY3R1dGFoYTogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDEzNzQpCiogX19zYXRmcmFjdHV0YWhxOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTM2OSkKKiBfX3NhdGZyYWN0dXRhcXE6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMzY3KQoqIF9fc2F0ZnJhY3R1dGFzYTogICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDEzNzYpCiogX19zYXRmcmFjdHV0YXNxOiAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTM3MCkKKiBfX3NhdGZyYWN0dXRhdGE6ICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMzc5KQoqIF9fc2F0ZnJhY3R1dGF1ZGEyOiAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDEzOTMpCiogX19zYXRmcmFjdHV0YXVkcTogICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTM4NykKKiBfX3NhdGZyYWN0dXRhdWhhMjogICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMzg5KQoqIF9fc2F0ZnJhY3R1dGF1aHE6ICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDEzODMpCiogX19zYXRmcmFjdHV0YXVxcTogICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTM4MSkKKiBfX3NhdGZyYWN0dXRhdXNhMjogICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMzkxKQoqIF9fc2F0ZnJhY3R1dGF1c3E6ICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDEzODUpCiogX19zc2FkZGRhMzogICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA2NikKKiBfX3NzYWRkZHEzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDYxKQoqIF9fc3NhZGRoYTM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgNjMpCiogX19zc2FkZGhxMzogICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA1OSkKKiBfX3NzYWRkcXEzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDU3KQoqIF9fc3NhZGRzYTM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgNjUpCiogX19zc2FkZHNxMzogICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA2MCkKKiBfX3NzYWRkdGEzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDY3KQoqIF9fc3Nhc2hsZGEzOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA0MDEpCiogX19zc2FzaGxkcTM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDM5NykKKiBfX3NzYXNobGhhMzogICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMzk5KQoqIF9fc3Nhc2hsaHEzOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAzOTUpCiogX19zc2FzaGxzYTM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDQwMCkKKiBfX3NzYXNobHNxMzogICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMzk2KQoqIF9fc3Nhc2hsdGEzOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA0MDIpCiogX19zc2RpdmRhMzogICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDI2MCkKKiBfX3NzZGl2ZHEzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMjU1KQoqIF9fc3NkaXZoYTM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAyNTcpCiogX19zc2RpdmhxMzogICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDI1MykKKiBfX3NzZGl2cXEzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMjUxKQoqIF9fc3NkaXZzYTM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAyNTkpCiogX19zc2RpdnNxMzogICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDI1NCkKKiBfX3NzZGl2dGEzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMjYxKQoqIF9fc3NtdWxkYTM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxOTIpCiogX19zc211bGRxMzogICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDE4NykKKiBfX3NzbXVsaGEzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMTg5KQoqIF9fc3NtdWxocTM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxODUpCiogX19zc211bHFxMzogICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDE4MykKKiBfX3NzbXVsc2EzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMTkxKQoqIF9fc3NtdWxzcTM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxODYpCiogX19zc211bHRhMzogICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDE5MykKKiBfX3NzbmVnZGEyOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMzE1KQoqIF9fc3NuZWdkcTI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAzMTIpCiogX19zc25lZ2hhMjogICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDMxMykKKiBfX3NzbmVnaHEyOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMzEwKQoqIF9fc3NuZWdxcTI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAzMDkpCiogX19zc25lZ3NhMjogICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDMxNCkKKiBfX3NzbmVnc3EyOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMzExKQoqIF9fc3NuZWd0YTI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAzMTYpCiogX19zc3N1YmRhMzogICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDEyOCkKKiBfX3Nzc3ViZHEzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMTIzKQoqIF9fc3NzdWJoYTM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxMjUpCiogX19zc3N1YmhxMzogICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDEyMSkKKiBfX3Nzc3VicXEzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMTE5KQoqIF9fc3NzdWJzYTM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxMjcpCiogX19zc3N1YnNxMzogICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDEyMikKKiBfX3Nzc3VidGEzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMTI5KQoqIF9fc3ViZGEzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxMDYpCiogX19zdWJkZjM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29mdCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICAzMCkKKiBfX3N1YmRxMzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDkzKQoqIF9fc3ViaGEzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxMDMpCiogX19zdWJocTM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA5MSkKKiBfX3N1YnFxMzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDg5KQoqIF9fc3Vic2EzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxMDUpCiogX19zdWJzZjM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29mdCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICAyOSkKKiBfX3N1YnNxMzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDkyKQoqIF9fc3VidGEzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxMDcpCiogX19zdWJ0ZjM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29mdCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICAzMSkKKiBfX3N1YnVkYTM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMTEzKQoqIF9fc3VidWRxMzogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxMDEpCiogX19zdWJ1aGEzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDEwOSkKKiBfX3N1YnVocTM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDk3KQoqIF9fc3VidXFxMzogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgOTUpCiogX19zdWJ1c2EzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDExMSkKKiBfX3N1YnVzcTM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDk5KQoqIF9fc3VidXRhMzogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxMTUpCiogX19zdWJ2ZGkzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWdlciBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDEyMikKKiBfX3N1YnZzaTM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlZ2VyIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMTIxKQoqIF9fc3VieGYzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvZnQgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgMzMpCiogX190cnVuY2Rmc2YyOiAgICAgICAgICAgICAgICAgICAgICAgICAgU29mdCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA3NSkKKiBfX3RydW5jdGZkZjI6ICAgICAgICAgICAgICAgICAgICAgICAgICBTb2Z0IGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDcyKQoqIF9fdHJ1bmN0ZnNmMjogICAgICAgICAgICAgICAgICAgICAgICAgIFNvZnQgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgNzQpCiogX190cnVuY3hmZGYyOiAgICAgICAgICAgICAgICAgICAgICAgICAgU29mdCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA3MSkKKiBfX3RydW5jeGZzZjI6ICAgICAgICAgICAgICAgICAgICAgICAgICBTb2Z0IGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDczKQoqIF9fdWNtcGRpMjogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVnZXIgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgOTIpCiogX191Y21wdGkyOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWdlciBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA5MykKKiBfX3VkaXZkaTM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlZ2VyIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDUyKQoqIF9fdWRpdm1vZGRpMzogICAgICAgICAgICAgICAgICAgICAgICAgIEludGVnZXIgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgNTkpCiogX191ZGl2c2kzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWdlciBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA1MCkKKiBfX3VkaXZ0aTM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlZ2VyIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDU0KQoqIF9fdWRpdnRpMyA8MT46ICAgICAgICAgICAgICAgICAgICAgICAgIEludGVnZXIgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgNjEpCiogX191ZGl2dWRhMzogICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDI0NCkKKiBfX3VkaXZ1ZHEzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMjM4KQoqIF9fdWRpdnVoYTM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAyNDApCiogX191ZGl2dWhxMzogICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDIzNCkKKiBfX3VkaXZ1cXEzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMjMyKQoqIF9fdWRpdnVzYTM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAyNDIpCiogX191ZGl2dXNxMzogICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDIzNikKKiBfX3VkaXZ1dGEzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMjQ2KQoqIF9fdW1vZGRpMzogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVnZXIgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgNjkpCiogX191bW9kc2kzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWdlciBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA2NykKKiBfX3Vtb2R0aTM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlZ2VyIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDcxKQoqIF9fdW5vcmRkZjI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvZnQgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxNzIpCiogX191bm9yZHNmMjogICAgICAgICAgICAgICAgICAgICAgICAgICAgU29mdCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDE3MSkKKiBfX3Vub3JkdGYyOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb2Z0IGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMTczKQoqIF9fdXNhZGR1ZGEzOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgODMpCiogX191c2FkZHVkcTM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA3NykKKiBfX3VzYWRkdWhhMzogICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDc5KQoqIF9fdXNhZGR1aHEzOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgNzMpCiogX191c2FkZHVxcTM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA3MSkKKiBfX3VzYWRkdXNhMzogICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDgxKQoqIF9fdXNhZGR1c3EzOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgNzUpCiogX191c2FkZHV0YTM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA4NSkKKiBfX3VzYXNobHVkYTM6ICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNDE5KQoqIF9fdXNhc2hsdWRxMzogICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA0MTMpCiogX191c2FzaGx1aGEzOiAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDQxNSkKKiBfX3VzYXNobHVocTM6ICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNDA5KQoqIF9fdXNhc2hsdXFxMzogICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA0MDcpCiogX191c2FzaGx1c2EzOiAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDQxNykKKiBfX3VzYXNobHVzcTM6ICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgNDExKQoqIF9fdXNhc2hsdXRhMzogICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICA0MjEpCiogX191c2RpdnVkYTM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDI3OCkKKiBfX3VzZGl2dWRxMzogICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMjcyKQoqIF9fdXNkaXZ1aGEzOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAyNzQpCiogX191c2RpdnVocTM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDI2OCkKKiBfX3VzZGl2dXFxMzogICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMjY2KQoqIF9fdXNkaXZ1c2EzOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAyNzYpCiogX191c2RpdnVzcTM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDI3MCkKKiBfX3VzZGl2dXRhMzogICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMjgwKQoqIF9fdXNtdWx1ZGEzOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAyMTApCiogX191c211bHVkcTM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDIwNCkKKiBfX3VzbXVsdWhhMzogICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMjA2KQoqIF9fdXNtdWx1aHEzOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAyMDApCiogX191c211bHVxcTM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDE5OCkKKiBfX3VzbXVsdXNhMzogICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMjA4KQoqIF9fdXNtdWx1c3EzOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAyMDIpCiogX191c211bHV0YTM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDIxMikKKiBfX3VzbmVndWRhMjogICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMzI5KQoqIF9fdXNuZWd1ZHEyOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAzMjQpCiogX191c25lZ3VoYTI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDMyNikKKiBfX3VzbmVndWhxMjogICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMzIxKQoqIF9fdXNuZWd1cXEyOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAzMTkpCiogX191c25lZ3VzYTI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDMyOCkKKiBfX3VzbmVndXNxMjogICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMzIyKQoqIF9fdXNuZWd1dGEyOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAzMzEpCiogX191c3N1YnVkYTM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDE0NikKKiBfX3Vzc3VidWRxMzogICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMTQwKQoqIF9fdXNzdWJ1aGEzOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxNDIpCiogX191c3N1YnVocTM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDEzNikKKiBfX3Vzc3VidXFxMzogICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMTM0KQoqIF9fdXNzdWJ1c2EzOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxNDQpCiogX191c3N1YnVzcTM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDEzOCkKKiBfX3Vzc3VidXRhMzogICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZC1wb2ludCBmcmFjdGlvbmFsIGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMTQ4KQoqIGFib3J0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBvcnRhYmlsaXR5LiAgICAgICAgKGxpbmUgICAyMCkKKiBhYnM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcml0aG1ldGljLiAgICAgICAgIChsaW5lICAxOTYpCiogJ2FicycgYW5kIGF0dHJpYnV0ZXM6ICAgICAgICAgICAgICAgICAgRXhwcmVzc2lvbnMuICAgICAgICAobGluZSAgIDY0KQoqIGFic2VuY2Vfc2V0OiAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2Nlc3NvciBwaXBlbGluZSBkZXNjcmlwdGlvbi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAyMTMpCiogJ2Fic00yJyBpbnN0cnVjdGlvbiBwYXR0ZXJuOiAgICAgICAgICAgU3RhbmRhcmQgTmFtZXMuICAgICAobGluZSAgNDQxKQoqIGFic29sdXRlIHZhbHVlOiAgICAgICAgICAgICAgICAgICAgICAgIEFyaXRobWV0aWMuICAgICAgICAgKGxpbmUgIDE5NikKKiBBQlNfRVhQUjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeHByZXNzaW9uIHRyZWVzLiAgIChsaW5lICAgIDYpCiogYWNjZXNzIHRvIG9wZXJhbmRzOiAgICAgICAgICAgICAgICAgICAgQWNjZXNzb3JzLiAgICAgICAgICAobGluZSAgICA2KQoqIGFjY2VzcyB0byBzcGVjaWFsIG9wZXJhbmRzOiAgICAgICAgICAgIFNwZWNpYWwgQWNjZXNzb3JzLiAgKGxpbmUgICAgNikKKiBhY2Nlc3NvcnM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY2Nlc3NvcnMuICAgICAgICAgIChsaW5lICAgIDYpCiogQUNDVU1VTEFURV9PVVRHT0lOR19BUkdTOiAgICAgICAgICAgICAgU3RhY2sgQXJndW1lbnRzLiAgICAobGluZSAgIDQ1KQoqICdBQ0NVTVVMQVRFX09VVEdPSU5HX0FSR1MnIGFuZCBzdGFjayBmcmFtZXM6IEZ1bmN0aW9uIEVudHJ5LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDEzMykKKiBBQ0NVTV9UWVBFX1NJWkU6ICAgICAgICAgICAgICAgICAgICAgICBUeXBlIExheW91dC4gICAgICAgIChsaW5lICAgODcpCiogQURBX0xPTkdfVFlQRV9TSVpFOiAgICAgICAgICAgICAgICAgICAgVHlwZSBMYXlvdXQuICAgICAgICAobGluZSAgIDI1KQoqIEFERElUSU9OQUxfUkVHSVNURVJfTkFNRVM6ICAgICAgICAgICAgIEluc3RydWN0aW9uIE91dHB1dC4gKGxpbmUgICAxNCkKKiAnYWRkTTMnIGluc3RydWN0aW9uIHBhdHRlcm46ICAgICAgICAgICBTdGFuZGFyZCBOYW1lcy4gICAgIChsaW5lICAyMTQpCiogJ2FkZE1PREVjYycgaW5zdHJ1Y3Rpb24gcGF0dGVybjogICAgICAgU3RhbmRhcmQgTmFtZXMuICAgICAobGluZSAgODkxKQoqIGFkZHJlc3MgY29uc3RyYWludHM6ICAgICAgICAgICAgICAgICAgIFNpbXBsZSBDb25zdHJhaW50cy4gKGxpbmUgIDE1MSkKKiBhZGRyZXNzaW5nIG1vZGVzOiAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzaW5nIE1vZGVzLiAgIChsaW5lICAgIDYpCiogYWRkcmVzc29mOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVncyBhbmQgTWVtb3J5LiAgICAobGluZSAgMjU4KQoqIGFkZHJlc3Nfb3BlcmFuZDogICAgICAgICAgICAgICAgICAgICAgIE1hY2hpbmUtSW5kZXBlbmRlbnQgUHJlZGljYXRlcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgNjIpCiogYWRkcmVzc19vcGVyYW5kIDwxPjogICAgICAgICAgICAgICAgICAgU2ltcGxlIENvbnN0cmFpbnRzLiAobGluZSAgMTU1KQoqIGFkZHJfZGlmZl92ZWM6ICAgICAgICAgICAgICAgICAgICAgICAgIFNpZGUgRWZmZWN0cy4gICAgICAgKGxpbmUgIDI5NykKKiAnYWRkcl9kaWZmX3ZlYycsIGxlbmd0aCBvZjogICAgICAgICAgICBJbnNuIExlbmd0aHMuICAgICAgIChsaW5lICAgMjYpCiogQUREUl9FWFBSOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhwcmVzc2lvbiB0cmVlcy4gICAobGluZSAgICA2KQoqIGFkZHJfdmVjOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNpZGUgRWZmZWN0cy4gICAgICAgKGxpbmUgIDI5MikKKiAnYWRkcl92ZWMnLCBsZW5ndGggb2Y6ICAgICAgICAgICAgICAgICBJbnNuIExlbmd0aHMuICAgICAgIChsaW5lICAgMjYpCiogQURKVVNUX0ZJRUxEX0FMSUdOOiAgICAgICAgICAgICAgICAgICAgU3RvcmFnZSBMYXlvdXQuICAgICAobGluZSAgMTg1KQoqIEFESlVTVF9JTlNOX0xFTkdUSDogICAgICAgICAgICAgICAgICAgIEluc24gTGVuZ3Rocy4gICAgICAgKGxpbmUgICAzNSkKKiBhZ2dyZWdhdGVzIGFzIHJldHVybiB2YWx1ZXM6ICAgICAgICAgICBBZ2dyZWdhdGUgUmV0dXJuLiAgIChsaW5lICAgIDYpCiogQUdHUl9JTklUX0VYUFI6ICAgICAgICAgICAgICAgICAgICAgICAgRXhwcmVzc2lvbiB0cmVlcy4gICAobGluZSAgICA2KQoqIGFsaWFzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFsaWFzIGFuYWx5c2lzLiAgICAgKGxpbmUgICAgNikKKiAnYWxsb2NhdGVfc3RhY2snIGluc3RydWN0aW9uIHBhdHRlcm46ICBTdGFuZGFyZCBOYW1lcy4gICAgIChsaW5lIDEyMDkpCiogQUxMX0NPUF9BRERJVElPTkFMX1JFR0lTVEVSX05BTUVTOiAgICAgTUlQUyBDb3Byb2Nlc3NvcnMuICAobGluZSAgIDMxKQoqIEFMTF9SRUdTOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIENsYXNzZXMuICAgKGxpbmUgICAxNykKKiBhbHRlcm5hdGUgZW50cnkgcG9pbnRzOiAgICAgICAgICAgICAgICBJbnNucy4gICAgICAgICAgICAgIChsaW5lICAxNDApCiogYW5jaG9yZWQgYWRkcmVzc2VzOiAgICAgICAgICAgICAgICAgICAgQW5jaG9yZWQgQWRkcmVzc2VzLiAobGluZSAgICA2KQoqIGFuZDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyaXRobWV0aWMuICAgICAgICAgKGxpbmUgIDE1NCkKKiAnYW5kJyBhbmQgYXR0cmlidXRlczogICAgICAgICAgICAgICAgICBFeHByZXNzaW9ucy4gICAgICAgIChsaW5lICAgNTApCiogJ2FuZCcsIGNhbm9uaWNhbGl6YXRpb24gb2Y6ICAgICAgICAgICAgSW5zbiBDYW5vbmljYWxpemF0aW9ucy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgNTYpCiogJ2FuZE0zJyBpbnN0cnVjdGlvbiBwYXR0ZXJuOiAgICAgICAgICAgU3RhbmRhcmQgTmFtZXMuICAgICAobGluZSAgMjIwKQoqIGFubm90YXRpb25zOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEFubm90YXRpb25zLiAgICAgICAgKGxpbmUgICAgNikKKiBBUFBMWV9SRVNVTFRfU0laRTogICAgICAgICAgICAgICAgICAgICBTY2FsYXIgUmV0dXJuLiAgICAgIChsaW5lICAgOTIpCiogQVJHU19HUk9XX0RPV05XQVJEOiAgICAgICAgICAgICAgICAgICAgRnJhbWUgTGF5b3V0LiAgICAgICAobGluZSAgIDM0KQoqIGFyZ3VtZW50IHBhc3Npbmc6ICAgICAgICAgICAgICAgICAgICAgIEludGVyZmFjZS4gICAgICAgICAgKGxpbmUgICAzNikKKiBhcmd1bWVudHMgaW4gcmVnaXN0ZXJzOiAgICAgICAgICAgICAgICBSZWdpc3RlciBBcmd1bWVudHMuIChsaW5lICAgIDYpCiogYXJndW1lbnRzIG9uIHN0YWNrOiAgICAgICAgICAgICAgICAgICAgU3RhY2sgQXJndW1lbnRzLiAgICAobGluZSAgICA2KQoqIEFSR19QT0lOVEVSX0NGQV9PRkZTRVQ6ICAgICAgICAgICAgICAgIEZyYW1lIExheW91dC4gICAgICAgKGxpbmUgIDE5MikKKiBBUkdfUE9JTlRFUl9SRUdOVU06ICAgICAgICAgICAgICAgICAgICBGcmFtZSBSZWdpc3RlcnMuICAgIChsaW5lICAgNDApCiogJ0FSR19QT0lOVEVSX1JFR05VTScgYW5kIHZpcnR1YWwgcmVnaXN0ZXJzOiBSZWdzIGFuZCBNZW1vcnkuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDY1KQoqIGFyZ19wb2ludGVyX3J0eDogICAgICAgICAgICAgICAgICAgICAgIEZyYW1lIFJlZ2lzdGVycy4gICAgKGxpbmUgICA4NSkKKiBhcml0aG1ldGljIGxpYnJhcnk6ICAgICAgICAgICAgICAgICAgICBTb2Z0IGZsb2F0IGxpYnJhcnkgcm91dGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgICA2KQoqIGFyaXRobWV0aWMgc2hpZnQ6ICAgICAgICAgICAgICAgICAgICAgIEFyaXRobWV0aWMuICAgICAgICAgKGxpbmUgIDE2OSkKKiBhcml0aG1ldGljIHNoaWZ0IHdpdGggc2lnbmVkIHNhdHVyYXRpb246IEFyaXRobWV0aWMuICAgICAgIChsaW5lICAxNjkpCiogYXJpdGhtZXRpYyBzaGlmdCB3aXRoIHVuc2lnbmVkIHNhdHVyYXRpb246IEFyaXRobWV0aWMuICAgICAobGluZSAgMTY5KQoqIGFyaXRobWV0aWMsIGluIFJUTDogICAgICAgICAgICAgICAgICAgIEFyaXRobWV0aWMuICAgICAgICAgKGxpbmUgICAgNikKKiBBUklUSE1FVElDX1RZUEVfUDogICAgICAgICAgICAgICAgICAgICBUeXBlcy4gICAgICAgICAgICAgIChsaW5lICAgNzYpCiogYXJyYXk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZXMuICAgICAgICAgICAgICAobGluZSAgICA2KQoqIEFSUkFZX1JBTkdFX1JFRjogICAgICAgICAgICAgICAgICAgICAgIEV4cHJlc3Npb24gdHJlZXMuICAgKGxpbmUgICAgNikKKiBBUlJBWV9SRUY6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeHByZXNzaW9uIHRyZWVzLiAgIChsaW5lICAgIDYpCiogQVJSQVlfVFlQRTogICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZXMuICAgICAgICAgICAgICAobGluZSAgICA2KQoqIGFzaGlmdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyaXRobWV0aWMuICAgICAgICAgKGxpbmUgIDE2OSkKKiAnYXNoaWZ0JyBhbmQgYXR0cmlidXRlczogICAgICAgICAgICAgICBFeHByZXNzaW9ucy4gICAgICAgIChsaW5lICAgNjQpCiogYXNoaWZ0cnQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJpdGhtZXRpYy4gICAgICAgICAobGluZSAgMTg2KQoqICdhc2hpZnRydCcgYW5kIGF0dHJpYnV0ZXM6ICAgICAgICAgICAgIEV4cHJlc3Npb25zLiAgICAgICAgKGxpbmUgICA2NCkKKiAnYXNobE0zJyBpbnN0cnVjdGlvbiBwYXR0ZXJuOiAgICAgICAgICBTdGFuZGFyZCBOYW1lcy4gICAgIChsaW5lICA0MjQpCiogJ2FzaHJNMycgaW5zdHJ1Y3Rpb24gcGF0dGVybjogICAgICAgICAgU3RhbmRhcmQgTmFtZXMuICAgICAobGluZSAgNDM0KQoqIEFTTV9BUFBfT0ZGOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbGUgRnJhbWV3b3JrLiAgICAgKGxpbmUgICA1OSkKKiBBU01fQVBQX09OOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWxlIEZyYW1ld29yay4gICAgIChsaW5lICAgNTIpCiogQVNNX0NPTU1FTlRfU1RBUlQ6ICAgICAgICAgICAgICAgICAgICAgRmlsZSBGcmFtZXdvcmsuICAgICAobGluZSAgIDQ3KQoqIEFTTV9ERUNMQVJFX0NMQVNTX1JFRkVSRU5DRTogICAgICAgICAgIExhYmVsIE91dHB1dC4gICAgICAgKGxpbmUgIDQzMSkKKiBBU01fREVDTEFSRV9DT05TVEFOVF9OQU1FOiAgICAgICAgICAgICBMYWJlbCBPdXRwdXQuICAgICAgIChsaW5lICAxMjQpCiogQVNNX0RFQ0xBUkVfRlVOQ1RJT05fTkFNRTogICAgICAgICAgICAgTGFiZWwgT3V0cHV0LiAgICAgICAobGluZSAgIDg1KQoqIEFTTV9ERUNMQVJFX0ZVTkNUSU9OX1NJWkU6ICAgICAgICAgICAgIExhYmVsIE91dHB1dC4gICAgICAgKGxpbmUgICA5OCkKKiBBU01fREVDTEFSRV9PQkpFQ1RfTkFNRTogICAgICAgICAgICAgICBMYWJlbCBPdXRwdXQuICAgICAgIChsaW5lICAxMTEpCiogQVNNX0RFQ0xBUkVfUkVHSVNURVJfR0xPQkFMOiAgICAgICAgICAgTGFiZWwgT3V0cHV0LiAgICAgICAobGluZSAgMTM4KQoqIEFTTV9ERUNMQVJFX1VOUkVTT0xWRURfUkVGRVJFTkNFOiAgICAgIExhYmVsIE91dHB1dC4gICAgICAgKGxpbmUgIDQzNykKKiBBU01fRklOQUxfU1BFQzogICAgICAgICAgICAgICAgICAgICAgICBEcml2ZXIuICAgICAgICAgICAgIChsaW5lICAxNDMpCiogQVNNX0ZJTklTSF9ERUNMQVJFX09CSkVDVDogICAgICAgICAgICAgTGFiZWwgT3V0cHV0LiAgICAgICAobGluZSAgMTQ2KQoqIEFTTV9GT1JNQVRfUFJJVkFURV9OQU1FOiAgICAgICAgICAgICAgIExhYmVsIE91dHB1dC4gICAgICAgKGxpbmUgIDM0OSkKKiBhc21fZnByaW50ZjogICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdGlvbiBPdXRwdXQuIChsaW5lICAxMjIpCiogQVNNX0ZQUklOVEZfRVhURU5TSU9OUzogICAgICAgICAgICAgICAgSW5zdHJ1Y3Rpb24gT3V0cHV0LiAobGluZSAgMTMyKQoqIEFTTV9HRU5FUkFURV9JTlRFUk5BTF9MQUJFTDogICAgICAgICAgIExhYmVsIE91dHB1dC4gICAgICAgKGxpbmUgIDMzMykKKiBhc21faW5wdXQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaWRlIEVmZmVjdHMuICAgICAgIChsaW5lICAyNzkpCiogJ2FzbV9pbnB1dCcgYW5kICcvdic6ICAgICAgICAgICAgICAgICAgRmxhZ3MuICAgICAgICAgICAgICAobGluZSAgIDc5KQoqIEFTTV9NQVlCRV9PVVRQVVRfRU5DT0RFRF9BRERSX1JUWDogICAgIEV4Y2VwdGlvbiBIYW5kbGluZy4gKGxpbmUgICA4MCkKKiBhc21fbm9wZXJhbmRzOiAgICAgICAgICAgICAgICAgICAgICAgICBJbnNucy4gICAgICAgICAgICAgIChsaW5lICAyNjQpCiogQVNNX05PX1NLSVBfSU5fVEVYVDogICAgICAgICAgICAgICAgICAgQWxpZ25tZW50IE91dHB1dC4gICAobGluZSAgIDcxKQoqICdhc21fb3BlcmFuZHMnIGFuZCAnL3YnOiAgICAgICAgICAgICAgIEZsYWdzLiAgICAgICAgICAgICAgKGxpbmUgICA3OSkKKiAnYXNtX29wZXJhbmRzJywgUlRMIHNoYXJpbmc6ICAgICAgICAgICBTaGFyaW5nLiAgICAgICAgICAgIChsaW5lICAgNDUpCiogJ2FzbV9vcGVyYW5kcycsIHVzYWdlOiAgICAgICAgICAgICAgICAgQXNzZW1ibGVyLiAgICAgICAgICAobGluZSAgICA2KQoqIEFTTV9PVVRQVVRfQUREUl9ESUZGX0VMVDogICAgICAgICAgICAgIERpc3BhdGNoIFRhYmxlcy4gICAgKGxpbmUgICAgOCkKKiBBU01fT1VUUFVUX0FERFJfVkVDX0VMVDogICAgICAgICAgICAgICBEaXNwYXRjaCBUYWJsZXMuICAgIChsaW5lICAgMjUpCiogQVNNX09VVFBVVF9BTElHTjogICAgICAgICAgICAgICAgICAgICAgQWxpZ25tZW50IE91dHB1dC4gICAobGluZSAgIDc4KQoqIEFTTV9PVVRQVVRfQUxJR05FRF9CU1M6ICAgICAgICAgICAgICAgIFVuaW5pdGlhbGl6ZWQgRGF0YS4gKGxpbmUgICA2MykKKiBBU01fT1VUUFVUX0FMSUdORURfQ09NTU9OOiAgICAgICAgICAgICBVbmluaXRpYWxpemVkIERhdGEuIChsaW5lICAgMjIpCiogQVNNX09VVFBVVF9BTElHTkVEX0RFQ0xfQ09NTU9OOiAgICAgICAgVW5pbml0aWFsaXplZCBEYXRhLiAobGluZSAgIDI5KQoqIEFTTV9PVVRQVVRfQUxJR05FRF9ERUNMX0xPQ0FMOiAgICAgICAgIFVuaW5pdGlhbGl6ZWQgRGF0YS4gKGxpbmUgICA5MykKKiBBU01fT1VUUFVUX0FMSUdORURfTE9DQUw6ICAgICAgICAgICAgICBVbmluaXRpYWxpemVkIERhdGEuIChsaW5lICAgODYpCiogQVNNX09VVFBVVF9BTElHTl9XSVRIX05PUDogICAgICAgICAgICAgQWxpZ25tZW50IE91dHB1dC4gICAobGluZSAgIDgzKQoqIEFTTV9PVVRQVVRfQVNDSUk6ICAgICAgICAgICAgICAgICAgICAgIERhdGEgT3V0cHV0LiAgICAgICAgKGxpbmUgICA0OSkKKiBBU01fT1VUUFVUX0JTUzogICAgICAgICAgICAgICAgICAgICAgICBVbmluaXRpYWxpemVkIERhdGEuIChsaW5lICAgMzgpCiogQVNNX09VVFBVVF9DQVNFX0VORDogICAgICAgICAgICAgICAgICAgRGlzcGF0Y2ggVGFibGVzLiAgICAobGluZSAgIDUwKQoqIEFTTV9PVVRQVVRfQ0FTRV9MQUJFTDogICAgICAgICAgICAgICAgIERpc3BhdGNoIFRhYmxlcy4gICAgKGxpbmUgICAzNykKKiBBU01fT1VUUFVUX0NPTU1PTjogICAgICAgICAgICAgICAgICAgICBVbmluaXRpYWxpemVkIERhdGEuIChsaW5lICAgIDkpCiogQVNNX09VVFBVVF9ERUJVR19MQUJFTDogICAgICAgICAgICAgICAgTGFiZWwgT3V0cHV0LiAgICAgICAobGluZSAgMzIxKQoqIEFTTV9PVVRQVVRfREVGOiAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsIE91dHB1dC4gICAgICAgKGxpbmUgIDM3MCkKKiBBU01fT1VUUFVUX0RFRl9GUk9NX0RFQ0xTOiAgICAgICAgICAgICBMYWJlbCBPdXRwdXQuICAgICAgIChsaW5lICAzNzcpCiogQVNNX09VVFBVVF9EV0FSRl9ERUxUQTogICAgICAgICAgICAgICAgU0RCIGFuZCBEV0FSRi4gICAgICAobGluZSAgIDQxKQoqIEFTTV9PVVRQVVRfRFdBUkZfT0ZGU0VUOiAgICAgICAgICAgICAgIFNEQiBhbmQgRFdBUkYuICAgICAgKGxpbmUgICA0NSkKKiBBU01fT1VUUFVUX0RXQVJGX1BDUkVMOiAgICAgICAgICAgICAgICBTREIgYW5kIERXQVJGLiAgICAgIChsaW5lICAgNTEpCiogQVNNX09VVFBVVF9FWFRFUk5BTDogICAgICAgICAgICAgICAgICAgTGFiZWwgT3V0cHV0LiAgICAgICAobGluZSAgMjU5KQoqIEFTTV9PVVRQVVRfRkRFU0M6ICAgICAgICAgICAgICAgICAgICAgIERhdGEgT3V0cHV0LiAgICAgICAgKGxpbmUgICA1OCkKKiBBU01fT1VUUFVUX0lERU5UOiAgICAgICAgICAgICAgICAgICAgICBGaWxlIEZyYW1ld29yay4gICAgIChsaW5lICAgODEpCiogQVNNX09VVFBVVF9JTlRFUk5BTF9MQUJFTDogICAgICAgICAgICAgTGFiZWwgT3V0cHV0LiAgICAgICAobGluZSAgIDE2KQoqIEFTTV9PVVRQVVRfTEFCRUw6ICAgICAgICAgICAgICAgICAgICAgIExhYmVsIE91dHB1dC4gICAgICAgKGxpbmUgICAgOCkKKiBBU01fT1VUUFVUX0xBQkVMUkVGOiAgICAgICAgICAgICAgICAgICBMYWJlbCBPdXRwdXQuICAgICAgIChsaW5lICAyODApCiogQVNNX09VVFBVVF9MQUJFTF9SRUY6ICAgICAgICAgICAgICAgICAgTGFiZWwgT3V0cHV0LiAgICAgICAobGluZSAgMjk0KQoqIEFTTV9PVVRQVVRfTE9DQUw6ICAgICAgICAgICAgICAgICAgICAgIFVuaW5pdGlhbGl6ZWQgRGF0YS4gKGxpbmUgICA3MykKKiBBU01fT1VUUFVUX01BWF9TS0lQX0FMSUdOOiAgICAgICAgICAgICBBbGlnbm1lbnQgT3V0cHV0LiAgIChsaW5lICAgODcpCiogQVNNX09VVFBVVF9NRUFTVVJFRF9TSVpFOiAgICAgICAgICAgICAgTGFiZWwgT3V0cHV0LiAgICAgICAobGluZSAgIDQwKQoqIEFTTV9PVVRQVVRfT1BDT0RFOiAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0aW9uIE91dHB1dC4gKGxpbmUgICAyMCkKKiBBU01fT1VUUFVUX1BPT0xfRVBJTE9HVUU6ICAgICAgICAgICAgICBEYXRhIE91dHB1dC4gICAgICAgIChsaW5lICAxMDcpCiogQVNNX09VVFBVVF9QT09MX1BST0xPR1VFOiAgICAgICAgICAgICAgRGF0YSBPdXRwdXQuICAgICAgICAobGluZSAgIDcxKQoqIEFTTV9PVVRQVVRfUkVHX1BPUDogICAgICAgICAgICAgICAgICAgIEluc3RydWN0aW9uIE91dHB1dC4gKGxpbmUgIDE3NikKKiBBU01fT1VUUFVUX1JFR19QVVNIOiAgICAgICAgICAgICAgICAgICBJbnN0cnVjdGlvbiBPdXRwdXQuIChsaW5lICAxNzEpCiogQVNNX09VVFBVVF9TSVpFX0RJUkVDVElWRTogICAgICAgICAgICAgTGFiZWwgT3V0cHV0LiAgICAgICAobGluZSAgIDM0KQoqIEFTTV9PVVRQVVRfU0tJUDogICAgICAgICAgICAgICAgICAgICAgIEFsaWdubWVudCBPdXRwdXQuICAgKGxpbmUgICA2NSkKKiBBU01fT1VUUFVUX1NPVVJDRV9GSUxFTkFNRTogICAgICAgICAgICBGaWxlIEZyYW1ld29yay4gICAgIChsaW5lICAgNjYpCiogQVNNX09VVFBVVF9TUEVDSUFMX1BPT0xfRU5UUlk6ICAgICAgICAgRGF0YSBPdXRwdXQuICAgICAgICAobGluZSAgIDgyKQoqIEFTTV9PVVRQVVRfU1lNQk9MX1JFRjogICAgICAgICAgICAgICAgIExhYmVsIE91dHB1dC4gICAgICAgKGxpbmUgIDI4NykKKiBBU01fT1VUUFVUX1RZUEVfRElSRUNUSVZFOiAgICAgICAgICAgICBMYWJlbCBPdXRwdXQuICAgICAgIChsaW5lICAgNzUpCiogQVNNX09VVFBVVF9XRUFLUkVGOiAgICAgICAgICAgICAgICAgICAgTGFiZWwgT3V0cHV0LiAgICAgICAobGluZSAgMTk4KQoqIEFTTV9PVVRQVVRfV0VBS19BTElBUzogICAgICAgICAgICAgICAgIExhYmVsIE91dHB1dC4gICAgICAgKGxpbmUgIDM5NikKKiBBU01fUFJFRkVSUkVEX0VIX0RBVEFfRk9STUFUOiAgICAgICAgICBFeGNlcHRpb24gSGFuZGxpbmcuIChsaW5lICAgNjYpCiogQVNNX1NQRUM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRHJpdmVyLiAgICAgICAgICAgICAobGluZSAgMTM1KQoqIEFTTV9TVEFCRF9PUDogICAgICAgICAgICAgICAgICAgICAgICAgIERCWCBPcHRpb25zLiAgICAgICAgKGxpbmUgICAzNCkKKiBBU01fU1RBQk5fT1A6ICAgICAgICAgICAgICAgICAgICAgICAgICBEQlggT3B0aW9ucy4gICAgICAgIChsaW5lICAgNDEpCiogQVNNX1NUQUJTX09QOiAgICAgICAgICAgICAgICAgICAgICAgICAgREJYIE9wdGlvbnMuICAgICAgICAobGluZSAgIDI4KQoqIEFTTV9XRUFLRU5fREVDTDogICAgICAgICAgICAgICAgICAgICAgIExhYmVsIE91dHB1dC4gICAgICAgKGxpbmUgIDE5MCkKKiBBU01fV0VBS0VOX0xBQkVMOiAgICAgICAgICAgICAgICAgICAgICBMYWJlbCBPdXRwdXQuICAgICAgIChsaW5lICAxNzcpCiogYXNzZW1ibGVyIGZvcm1hdDogICAgICAgICAgICAgICAgICAgICAgRmlsZSBGcmFtZXdvcmsuICAgICAobGluZSAgICA2KQoqIGFzc2VtYmxlciBpbnN0cnVjdGlvbnMgaW4gUlRMOiAgICAgICAgIEFzc2VtYmxlci4gICAgICAgICAgKGxpbmUgICAgNikKKiBBU1NFTUJMRVJfRElBTEVDVDogICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdGlvbiBPdXRwdXQuIChsaW5lICAxNDQpCiogYXNzZW1ibGVfbmFtZTogICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwgT3V0cHV0LiAgICAgICAobGluZSAgICA4KQoqIGFzc2VtYmxlX25hbWVfcmF3OiAgICAgICAgICAgICAgICAgICAgIExhYmVsIE91dHB1dC4gICAgICAgKGxpbmUgICAxNikKKiBhc3NpZ25pbmcgYXR0cmlidXRlIHZhbHVlcyB0byBpbnNuczogICBUYWdnaW5nIEluc25zLiAgICAgIChsaW5lICAgIDYpCiogYXNzaWdubWVudCBvcGVyYXRvcjogICAgICAgICAgICAgICAgICAgRnVuY3Rpb24gQmFzaWNzLiAgICAobGluZSAgICA2KQoqIGFzdGVyaXNrIGluIHRlbXBsYXRlOiAgICAgICAgICAgICAgICAgIE91dHB1dCBTdGF0ZW1lbnQuICAgKGxpbmUgICAyOSkKKiBBU19ORUVEU19EQVNIX0ZPUl9QSVBFRF9JTlBVVDogICAgICAgICBEcml2ZXIuICAgICAgICAgICAgIChsaW5lICAxNTApCiogJ2F0YW4yTTMnIGluc3RydWN0aW9uIHBhdHRlcm46ICAgICAgICAgU3RhbmRhcmQgTmFtZXMuICAgICAobGluZSAgNTExKQoqIGF0dHI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4cHJlc3Npb25zLiAgICAgICAgKGxpbmUgIDE1NCkKKiBhdHRyIDwxPjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWdnaW5nIEluc25zLiAgICAgIChsaW5lICAgNTQpCiogYXR0cmlidXRlIGV4cHJlc3Npb25zOiAgICAgICAgICAgICAgICAgRXhwcmVzc2lvbnMuICAgICAgICAobGluZSAgICA2KQoqIGF0dHJpYnV0ZSBzcGVjaWZpY2F0aW9uczogICAgICAgICAgICAgIEF0dHIgRXhhbXBsZS4gICAgICAgKGxpbmUgICAgNikKKiBhdHRyaWJ1dGUgc3BlY2lmaWNhdGlvbnMgZXhhbXBsZTogICAgICBBdHRyIEV4YW1wbGUuICAgICAgIChsaW5lICAgIDYpCiogYXR0cmlidXRlczogICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0cmlidXRlcy4gICAgICAgICAobGluZSAgICA2KQoqIGF0dHJpYnV0ZXMsIGRlZmluaW5nOiAgICAgICAgICAgICAgICAgIERlZmluaW5nIEF0dHJpYnV0ZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgICA2KQoqIGF0dHJpYnV0ZXMsIHRhcmdldC1zcGVjaWZpYzogICAgICAgICAgIFRhcmdldCBBdHRyaWJ1dGVzLiAgKGxpbmUgICAgNikKKiBhdHRyX2ZsYWc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeHByZXNzaW9ucy4gICAgICAgIChsaW5lICAxMTkpCiogYXV0b2luY3JlbWVudCBhZGRyZXNzaW5nLCBhdmFpbGFiaWxpdHk6IFBvcnRhYmlsaXR5LiAgICAgICAobGluZSAgIDIwKQoqIGF1dG9pbmNyZW1lbnQvZGVjcmVtZW50IGFkZHJlc3Npbmc6ICAgIFNpbXBsZSBDb25zdHJhaW50cy4gKGxpbmUgICAyOCkKKiBhdXRvbWF0YV9vcHRpb246ICAgICAgICAgICAgICAgICAgICAgICBQcm9jZXNzb3IgcGlwZWxpbmUgZGVzY3JpcHRpb24uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMjk0KQoqIGF1dG9tYXRvbiBiYXNlZCBwaXBlbGluZSBkZXNjcmlwdGlvbjogIFByb2Nlc3NvciBwaXBlbGluZSBkZXNjcmlwdGlvbi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgIDYpCiogYXV0b21hdG9uIGJhc2VkIHBpcGVsaW5lIGRlc2NyaXB0aW9uIDwxPjogUHJvY2Vzc29yIHBpcGVsaW5lIGRlc2NyaXB0aW9uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA0OSkKKiBhdXRvbWF0b24gYmFzZWQgc2NoZWR1bGVyOiAgICAgICAgICAgICBQcm9jZXNzb3IgcGlwZWxpbmUgZGVzY3JpcHRpb24uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgICA2KQoqIEFWT0lEX0NDTU9ERV9DT1BJRVM6ICAgICAgICAgICAgICAgICAgIFZhbHVlcyBpbiBSZWdpc3RlcnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMTQxKQoqIGJhY2tzbGFzaDogICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dCBUZW1wbGF0ZS4gICAgKGxpbmUgICA0NikKKiBiYXJyaWVyOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnNucy4gICAgICAgICAgICAgIChsaW5lICAxNjApCiogJ2JhcnJpZXInIGFuZCAnL2YnOiAgICAgICAgICAgICAgICAgICAgRmxhZ3MuICAgICAgICAgICAgICAobGluZSAgMTEwKQoqICdiYXJyaWVyJyBhbmQgJy92JzogICAgICAgICAgICAgICAgICAgIEZsYWdzLiAgICAgICAgICAgICAgKGxpbmUgICAyOSkKKiBCQVNFX1JFR19DTEFTUzogICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBDbGFzc2VzLiAgIChsaW5lICAxMDQpCiogYmFzaWMgYmxvY2s6ICAgICAgICAgICAgICAgICAgICAgICAgICAgQmFzaWMgQmxvY2tzLiAgICAgICAobGluZSAgICA2KQoqIGJhc2ljLWJsb2NrLmg6ICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRyb2wgRmxvdy4gICAgICAgKGxpbmUgICAgNikKKiBiYXNpY19ibG9jazogICAgICAgICAgICAgICAgICAgICAgICAgICBCYXNpYyBCbG9ja3MuICAgICAgIChsaW5lICAgIDYpCiogQkFTSUNfQkxPQ0s6ICAgICAgICAgICAgICAgICAgICAgICAgICAgQmFzaWMgQmxvY2tzLiAgICAgICAobGluZSAgIDE5KQoqIEJCX0hFQUQsIEJCX0VORDogICAgICAgICAgICAgICAgICAgICAgIE1haW50YWluaW5nIHRoZSBDRkcuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDg3KQoqICdiQ09ORCcgaW5zdHJ1Y3Rpb24gcGF0dGVybjogICAgICAgICAgIFN0YW5kYXJkIE5hbWVzLiAgICAgKGxpbmUgIDkyOCkKKiBCSUdHRVNUX0FMSUdOTUVOVDogICAgICAgICAgICAgICAgICAgICBTdG9yYWdlIExheW91dC4gICAgIChsaW5lICAxNjUpCiogQklHR0VTVF9GSUVMRF9BTElHTk1FTlQ6ICAgICAgICAgICAgICAgU3RvcmFnZSBMYXlvdXQuICAgICAobGluZSAgMTc4KQoqIEJJbW9kZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hY2hpbmUgTW9kZXMuICAgICAgKGxpbmUgICAyMikKKiBCSU5EX0VYUFI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeHByZXNzaW9uIHRyZWVzLiAgIChsaW5lICAgIDYpCiogQklORk9fVFlQRTogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xhc3Nlcy4gICAgICAgICAgICAobGluZSAgICA2KQoqIGJpdC1maWVsZHM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpdC1GaWVsZHMuICAgICAgICAgKGxpbmUgICAgNikKKiBCSVRGSUVMRF9OQllURVNfTElNSVRFRDogICAgICAgICAgICAgICBTdG9yYWdlIExheW91dC4gICAgIChsaW5lICAzMjgpCiogQklUU19CSUdfRU5ESUFOOiAgICAgICAgICAgICAgICAgICAgICAgU3RvcmFnZSBMYXlvdXQuICAgICAobGluZSAgIDExKQoqICdCSVRTX0JJR19FTkRJQU4nLCBlZmZlY3Qgb24gJ3NpZ25fZXh0cmFjdCc6IEJpdC1GaWVsZHMuICAgKGxpbmUgICAgOCkKKiBCSVRTX1BFUl9VTklUOiAgICAgICAgICAgICAgICAgICAgICAgICBTdG9yYWdlIExheW91dC4gICAgIChsaW5lICAgNTApCiogQklUU19QRVJfV09SRDogICAgICAgICAgICAgICAgICAgICAgICAgU3RvcmFnZSBMYXlvdXQuICAgICAobGluZSAgIDU1KQoqIGJpdHdpc2UgY29tcGxlbWVudDogICAgICAgICAgICAgICAgICAgIEFyaXRobWV0aWMuICAgICAgICAgKGxpbmUgIDE1MCkKKiBiaXR3aXNlIGV4Y2x1c2l2ZS1vcjogICAgICAgICAgICAgICAgICBBcml0aG1ldGljLiAgICAgICAgIChsaW5lICAxNjQpCiogYml0d2lzZSBpbmNsdXNpdmUtb3I6ICAgICAgICAgICAgICAgICAgQXJpdGhtZXRpYy4gICAgICAgICAobGluZSAgMTU5KQoqIGJpdHdpc2UgbG9naWNhbC1hbmQ6ICAgICAgICAgICAgICAgICAgIEFyaXRobWV0aWMuICAgICAgICAgKGxpbmUgIDE1NCkKKiBCSVRfQU5EX0VYUFI6ICAgICAgICAgICAgICAgICAgICAgICAgICBFeHByZXNzaW9uIHRyZWVzLiAgIChsaW5lICAgIDYpCiogQklUX0lPUl9FWFBSOiAgICAgICAgICAgICAgICAgICAgICAgICAgRXhwcmVzc2lvbiB0cmVlcy4gICAobGluZSAgICA2KQoqIEJJVF9OT1RfRVhQUjogICAgICAgICAgICAgICAgICAgICAgICAgIEV4cHJlc3Npb24gdHJlZXMuICAgKGxpbmUgICAgNikKKiBCSVRfWE9SX0VYUFI6ICAgICAgICAgICAgICAgICAgICAgICAgICBFeHByZXNzaW9uIHRyZWVzLiAgIChsaW5lICAgIDYpCiogQkxLbW9kZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFjaGluZSBNb2Rlcy4gICAgICAobGluZSAgMTgyKQoqICdCTEttb2RlJywgYW5kIGZ1bmN0aW9uIHJldHVybiB2YWx1ZXM6IENhbGxzLiAgICAgICAgICAgICAgKGxpbmUgICAyMykKKiBibG9jayBzdGF0ZW1lbnQgaXRlcmF0b3JzOiAgICAgICAgICAgICBCYXNpYyBCbG9ja3MuICAgICAgIChsaW5lICAgNjgpCiogYmxvY2sgc3RhdGVtZW50IGl0ZXJhdG9ycyA8MT46ICAgICAgICAgTWFpbnRhaW5pbmcgdGhlIENGRy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgNDQpCiogJ2Jsb2NrYWdlJyBpbnN0cnVjdGlvbiBwYXR0ZXJuOiAgICAgICAgU3RhbmRhcmQgTmFtZXMuICAgICAobGluZSAxMzg5KQoqIEJsb2NrczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJsb2Nrcy4gICAgICAgICAgICAgKGxpbmUgICAgNikKKiBCTE9DS19GT1JfSU5TTiwgYmJfZm9yX3N0bXQ6ICAgICAgICAgICBNYWludGFpbmluZyB0aGUgQ0ZHLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICAzOSkKKiBCTE9DS19SRUdfUEFERElORzogICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBBcmd1bWVudHMuIChsaW5lICAyMTIpCiogYm9vbDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VjdGlvbnMuICAgICAgICAgICAobGluZSAgMjc5KQoqIGJvb2wgPDE+OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlY3Rpb25zLiAgICAgICAgICAgKGxpbmUgIDI5MikKKiBib29sIDwyPjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeGNlcHRpb24gUmVnaW9uIE91dHB1dC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgNTgpCiogYm9vbCA8Mz46ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhjZXB0aW9uIFJlZ2lvbiBPdXRwdXQuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDgyKQoqIEJPT0xFQU5fVFlQRTogICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGVzLiAgICAgICAgICAgICAgKGxpbmUgICAgNikKKiBCT09MX1RZUEVfU0laRTogICAgICAgICAgICAgICAgICAgICAgICBUeXBlIExheW91dC4gICAgICAgIChsaW5lICAgNDMpCiogYnJhbmNoIHByZWRpY3Rpb246ICAgICAgICAgICAgICAgICAgICAgUHJvZmlsZSBpbmZvcm1hdGlvbi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgMjQpCiogQlJBTkNIX0NPU1Q6ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29zdHMuICAgICAgICAgICAgICAobGluZSAgIDUxKQoqIGJyZWFrX291dF9tZW1vcnlfcmVmczogICAgICAgICAgICAgICAgIEFkZHJlc3NpbmcgTW9kZXMuICAgKGxpbmUgIDExOCkKKiBCUkVBS19TVE1UOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbiBCb2RpZXMuICAgIChsaW5lICAgIDYpCiogYnNpX2NvbW1pdF9lZGdlX2luc2VydHM6ICAgICAgICAgICAgICAgTWFpbnRhaW5pbmcgdGhlIENGRy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxMTYpCiogYnNpX2VuZF9wOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFpbnRhaW5pbmcgdGhlIENGRy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgNTkpCiogYnNpX2luc2VydF9hZnRlcjogICAgICAgICAgICAgICAgICAgICAgTWFpbnRhaW5pbmcgdGhlIENGRy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgNzEpCiogYnNpX2luc2VydF9iZWZvcmU6ICAgICAgICAgICAgICAgICAgICAgTWFpbnRhaW5pbmcgdGhlIENGRy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgNzcpCiogYnNpX2luc2VydF9vbl9lZGdlOiAgICAgICAgICAgICAgICAgICAgTWFpbnRhaW5pbmcgdGhlIENGRy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxMTYpCiogYnNpX2xhc3Q6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFpbnRhaW5pbmcgdGhlIENGRy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgNTUpCiogYnNpX25leHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFpbnRhaW5pbmcgdGhlIENGRy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgNjMpCiogYnNpX3ByZXY6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFpbnRhaW5pbmcgdGhlIENGRy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgNjcpCiogYnNpX3JlbW92ZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFpbnRhaW5pbmcgdGhlIENGRy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgODMpCiogYnNpX3N0YXJ0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFpbnRhaW5pbmcgdGhlIENGRy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgNTEpCiogQlNTX1NFQ1RJT05fQVNNX09QOiAgICAgICAgICAgICAgICAgICAgU2VjdGlvbnMuICAgICAgICAgICAobGluZSAgIDY3KQoqIGJzd2FwOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyaXRobWV0aWMuICAgICAgICAgKGxpbmUgIDIzMykKKiAnYnRydW5jTTInIGluc3RydWN0aW9uIHBhdHRlcm46ICAgICAgICBTdGFuZGFyZCBOYW1lcy4gICAgIChsaW5lICA1MjkpCiogJ2J1aWx0aW5fbG9uZ2ptcCcgaW5zdHJ1Y3Rpb24gcGF0dGVybjogU3RhbmRhcmQgTmFtZXMuICAgICAobGluZSAxMjkzKQoqICdidWlsdGluX3NldGptcF9yZWNlaXZlcicgaW5zdHJ1Y3Rpb24gcGF0dGVybjogU3RhbmRhcmQgTmFtZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMjgzKQoqICdidWlsdGluX3NldGptcF9zZXR1cCcgaW5zdHJ1Y3Rpb24gcGF0dGVybjogU3RhbmRhcmQgTmFtZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMjcyKQoqIEJZVEVTX0JJR19FTkRJQU46ICAgICAgICAgICAgICAgICAgICAgIFN0b3JhZ2UgTGF5b3V0LiAgICAgKGxpbmUgICAyMykKKiAnQllURVNfQklHX0VORElBTicsIGVmZmVjdCBvbiAnc3VicmVnJzogUmVncyBhbmQgTWVtb3J5LiAgIChsaW5lICAxMzUpCiogYnl0ZV9tb2RlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFjaGluZSBNb2Rlcy4gICAgICAobGluZSAgMzM1KQoqIEMgc3RhdGVtZW50cyBmb3IgYXNzZW1ibGVyIG91dHB1dDogICAgIE91dHB1dCBTdGF0ZW1lbnQuICAgKGxpbmUgICAgNikKKiBDL0MrKyBJbnRlcm5hbCBSZXByZXNlbnRhdGlvbjogICAgICAgICBUcmVlcy4gICAgICAgICAgICAgIChsaW5lICAgIDYpCiogQzk5IG1hdGggZnVuY3Rpb25zLCBpbXBsaWNpdCB1c2FnZTogICAgTGlicmFyeSBDYWxscy4gICAgICAobGluZSAgIDc2KQoqIGNhbGw6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsYWdzLiAgICAgICAgICAgICAgKGxpbmUgIDIxOSkKKiBjYWxsIDwxPjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaWRlIEVmZmVjdHMuICAgICAgIChsaW5lICAgODYpCiogJ2NhbGwnIGluc3RydWN0aW9uIHBhdHRlcm46ICAgICAgICAgICAgU3RhbmRhcmQgTmFtZXMuICAgICAobGluZSAgOTYxKQoqICdjYWxsJyB1c2FnZTogICAgICAgICAgICAgICAgICAgICAgICAgIENhbGxzLiAgICAgICAgICAgICAgKGxpbmUgICAxMCkKKiAnY2FsbCcsIGluICdtZW0nOiAgICAgICAgICAgICAgICAgICAgICBGbGFncy4gICAgICAgICAgICAgIChsaW5lICAgODQpCiogY2FsbC1jbG9iYmVyZWQgcmVnaXN0ZXI6ICAgICAgICAgICAgICAgUmVnaXN0ZXIgQmFzaWNzLiAgICAobGluZSAgIDM1KQoqIGNhbGwtY2xvYmJlcmVkIHJlZ2lzdGVyIDwxPjogICAgICAgICAgIFJlZ2lzdGVyIEJhc2ljcy4gICAgKGxpbmUgICA0NikKKiBjYWxsLWNsb2JiZXJlZCByZWdpc3RlciA8Mj46ICAgICAgICAgICBSZWdpc3RlciBCYXNpY3MuICAgIChsaW5lICAgNTMpCiogY2FsbC1zYXZlZCByZWdpc3RlcjogICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgQmFzaWNzLiAgICAobGluZSAgIDM1KQoqIGNhbGwtc2F2ZWQgcmVnaXN0ZXIgPDE+OiAgICAgICAgICAgICAgIFJlZ2lzdGVyIEJhc2ljcy4gICAgKGxpbmUgICA0NikKKiBjYWxsLXNhdmVkIHJlZ2lzdGVyIDwyPjogICAgICAgICAgICAgICBSZWdpc3RlciBCYXNpY3MuICAgIChsaW5lICAgNTMpCiogY2FsbC11c2VkIHJlZ2lzdGVyOiAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgQmFzaWNzLiAgICAobGluZSAgIDM1KQoqIGNhbGwtdXNlZCByZWdpc3RlciA8MT46ICAgICAgICAgICAgICAgIFJlZ2lzdGVyIEJhc2ljcy4gICAgKGxpbmUgICA0NikKKiBjYWxsLXVzZWQgcmVnaXN0ZXIgPDI+OiAgICAgICAgICAgICAgICBSZWdpc3RlciBCYXNpY3MuICAgIChsaW5lICAgNTMpCiogQ0FMTEVSX1NBVkVfUFJPRklUQUJMRTogICAgICAgICAgICAgICAgQ2FsbGVyIFNhdmVzLiAgICAgICAobGluZSAgIDEwKQoqIGNhbGxpbmcgY29udmVudGlvbnM6ICAgICAgICAgICAgICAgICAgIFN0YWNrIGFuZCBDYWxsaW5nLiAgKGxpbmUgICAgNikKKiBjYWxsaW5nIGZ1bmN0aW9ucyBpbiBSVEw6ICAgICAgICAgICAgICBDYWxscy4gICAgICAgICAgICAgIChsaW5lICAgIDYpCiogQ0FMTF9FWFBSOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhwcmVzc2lvbiB0cmVlcy4gICAobGluZSAgICA2KQoqIGNhbGxfaW5zbjogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc25zLiAgICAgICAgICAgICAgKGxpbmUgICA5NSkKKiAnY2FsbF9pbnNuJyBhbmQgJy9mJzogICAgICAgICAgICAgICAgICBGbGFncy4gICAgICAgICAgICAgIChsaW5lICAxMTApCiogJ2NhbGxfaW5zbicgYW5kICcvaic6ICAgICAgICAgICAgICAgICAgRmxhZ3MuICAgICAgICAgICAgICAobGluZSAgMTY0KQoqICdjYWxsX2luc24nIGFuZCAnL3MnOiAgICAgICAgICAgICAgICAgIEZsYWdzLiAgICAgICAgICAgICAgKGxpbmUgICAzNCkKKiAnY2FsbF9pbnNuJyBhbmQgJy9zJyA8MT46ICAgICAgICAgICAgICBGbGFncy4gICAgICAgICAgICAgIChsaW5lICAxNTEpCiogJ2NhbGxfaW5zbicgYW5kICcvdSc6ICAgICAgICAgICAgICAgICAgRmxhZ3MuICAgICAgICAgICAgICAobGluZSAgIDE5KQoqICdjYWxsX2luc24nIGFuZCAnL3UnIDwxPjogICAgICAgICAgICAgIEZsYWdzLiAgICAgICAgICAgICAgKGxpbmUgICAyNCkKKiAnY2FsbF9pbnNuJyBhbmQgJy92JzogICAgICAgICAgICAgICAgICBGbGFncy4gICAgICAgICAgICAgIChsaW5lICAgMjkpCiogQ0FMTF9JTlNOX0ZVTkNUSU9OX1VTQUdFOiAgICAgICAgICAgICAgSW5zbnMuICAgICAgICAgICAgICAobGluZSAgMTAxKQoqICdjYWxsX3BvcCcgaW5zdHJ1Y3Rpb24gcGF0dGVybjogICAgICAgIFN0YW5kYXJkIE5hbWVzLiAgICAgKGxpbmUgIDk4OSkKKiBDQUxMX1BPUFNfQVJHUzogICAgICAgICAgICAgICAgICAgICAgICBTdGFjayBBcmd1bWVudHMuICAgIChsaW5lICAxMjUpCiogQ0FMTF9SRUFMTFlfVVNFRF9SRUdJU1RFUlM6ICAgICAgICAgICAgUmVnaXN0ZXIgQmFzaWNzLiAgICAobGluZSAgIDQ1KQoqIENBTExfVVNFRF9SRUdJU1RFUlM6ICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIEJhc2ljcy4gICAgKGxpbmUgICAzNCkKKiBjYWxsX3VzZWRfcmVnczogICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBCYXNpY3MuICAgIChsaW5lICAgNTkpCiogJ2NhbGxfdmFsdWUnIGluc3RydWN0aW9uIHBhdHRlcm46ICAgICAgU3RhbmRhcmQgTmFtZXMuICAgICAobGluZSAgOTgxKQoqICdjYWxsX3ZhbHVlX3BvcCcgaW5zdHJ1Y3Rpb24gcGF0dGVybjogIFN0YW5kYXJkIE5hbWVzLiAgICAgKGxpbmUgIDk4OSkKKiBjYW5hZGlhbjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb25maWd1cmUgVGVybXMuICAgIChsaW5lICAgIDYpCiogQ0FOTk9UX0NIQU5HRV9NT0RFX0NMQVNTOiAgICAgICAgICAgICAgUmVnaXN0ZXIgQ2xhc3Nlcy4gICAobGluZSAgNDc2KQoqIGNhbm9uaWNhbGl6YXRpb24gb2YgaW5zdHJ1Y3Rpb25zOiAgICAgIEluc24gQ2Fub25pY2FsaXphdGlvbnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgICA2KQoqIENBTk9OSUNBTElaRV9DT01QQVJJU09OOiAgICAgICAgICAgICAgIENvbmRpdGlvbiBDb2RlLiAgICAgKGxpbmUgICA4MykKKiAnY2Fub25pY2FsaXplX2Z1bmNwdHJfZm9yX2NvbXBhcmUnIGluc3RydWN0aW9uIHBhdHRlcm46IFN0YW5kYXJkIE5hbWVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTE0MSkKKiBjYW5fY3JlYXRlX3BzZXVkb19wOiAgICAgICAgICAgICAgICAgICBTdGFuZGFyZCBOYW1lcy4gICAgIChsaW5lICAgNzUpCiogQ0FOX0RFQlVHX1dJVEhPVVRfRlA6ICAgICAgICAgICAgICAgICAgUnVuLXRpbWUgVGFyZ2V0LiAgICAobGluZSAgMTQ2KQoqIENBTl9FTElNSU5BVEU6ICAgICAgICAgICAgICAgICAgICAgICAgIEVsaW1pbmF0aW9uLiAgICAgICAgKGxpbmUgICA3MCkKKiBjYW5fZmFsbHRocnU6ICAgICAgICAgICAgICAgICAgICAgICAgICBCYXNpYyBCbG9ja3MuICAgICAgIChsaW5lICAgNTcpCiogJ2Nhc2VzaScgaW5zdHJ1Y3Rpb24gcGF0dGVybjogICAgICAgICAgU3RhbmRhcmQgTmFtZXMuICAgICAobGluZSAxMDY4KQoqIENBU0VfVVNFX0JJVF9URVNUUzogICAgICAgICAgICAgICAgICAgIE1pc2MuICAgICAgICAgICAgICAgKGxpbmUgICA1MikKKiBDQVNFX1ZBTFVFU19USFJFU0hPTEQ6ICAgICAgICAgICAgICAgICBNaXNjLiAgICAgICAgICAgICAgIChsaW5lICAgNDYpCiogQ0FTRV9WRUNUT1JfTU9ERTogICAgICAgICAgICAgICAgICAgICAgTWlzYy4gICAgICAgICAgICAgICAobGluZSAgIDI2KQoqIENBU0VfVkVDVE9SX1BDX1JFTEFUSVZFOiAgICAgICAgICAgICAgIE1pc2MuICAgICAgICAgICAgICAgKGxpbmUgICAzOSkKKiBDQVNFX1ZFQ1RPUl9TSE9SVEVOX01PREU6ICAgICAgICAgICAgICBNaXNjLiAgICAgICAgICAgICAgIChsaW5lICAgMzApCiogJ2NicmFuY2hNT0RFNCcgaW5zdHJ1Y3Rpb24gcGF0dGVybjogICAgU3RhbmRhcmQgTmFtZXMuICAgICAobGluZSAgOTUwKQoqIGNjMDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ3MgYW5kIE1lbW9yeS4gICAgKGxpbmUgIDE4MCkKKiAnY2MwJywgUlRMIHNoYXJpbmc6ICAgICAgICAgICAgICAgICAgICBTaGFyaW5nLiAgICAgICAgICAgIChsaW5lICAgMjcpCiogY2MwX3J0eDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVncyBhbmQgTWVtb3J5LiAgICAobGluZSAgMjA2KQoqIENDMVBMVVNfU1BFQzogICAgICAgICAgICAgICAgICAgICAgICAgIERyaXZlci4gICAgICAgICAgICAgKGxpbmUgIDEyNSkKKiBDQzFfU1BFQzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEcml2ZXIuICAgICAgICAgICAgIChsaW5lICAxMTcpCiogQ0Ntb2RlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFjaGluZSBNb2Rlcy4gICAgICAobGluZSAgMTc1KQoqIGNjX3N0YXR1czogICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbmRpdGlvbiBDb2RlLiAgICAgKGxpbmUgICAgOCkKKiBDQ19TVEFUVVNfTURFUDogICAgICAgICAgICAgICAgICAgICAgICBDb25kaXRpb24gQ29kZS4gICAgIChsaW5lICAgMTgpCiogQ0NfU1RBVFVTX01ERVBfSU5JVDogICAgICAgICAgICAgICAgICAgQ29uZGl0aW9uIENvZGUuICAgICAobGluZSAgIDI0KQoqIENESW1vZGU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hY2hpbmUgTW9kZXMuICAgICAgKGxpbmUgIDIwMSkKKiAnY2VpbE0yJyBpbnN0cnVjdGlvbiBwYXR0ZXJuOiAgICAgICAgICBTdGFuZGFyZCBOYW1lcy4gICAgIChsaW5lICA1NDUpCiogQ0VJTF9ESVZfRVhQUjogICAgICAgICAgICAgICAgICAgICAgICAgRXhwcmVzc2lvbiB0cmVlcy4gICAobGluZSAgICA2KQoqIENFSUxfTU9EX0VYUFI6ICAgICAgICAgICAgICAgICAgICAgICAgIEV4cHJlc3Npb24gdHJlZXMuICAgKGxpbmUgICAgNikKKiBDRkFfRlJBTUVfQkFTRV9PRkZTRVQ6ICAgICAgICAgICAgICAgICBGcmFtZSBMYXlvdXQuICAgICAgIChsaW5lICAyMjQpCiogQ0ZHLCBDb250cm9sIEZsb3cgR3JhcGg6ICAgICAgICAgICAgICAgQ29udHJvbCBGbG93LiAgICAgICAobGluZSAgICA2KQoqIGNmZ2hvb2tzLmg6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1haW50YWluaW5nIHRoZSBDRkcuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgICA2KQoqIGNncmFwaF9maW5hbGl6ZV9mdW5jdGlvbjogICAgICAgICAgICAgIFBhcnNpbmcgcGFzcy4gICAgICAgKGxpbmUgICA1MSkKKiBjaGFpbl9jaXJjdWxhcjogICAgICAgICAgICAgICAgICAgICAgICBHVFkgT3B0aW9ucy4gICAgICAgIChsaW5lICAyMDQpCiogY2hhaW5fbmV4dDogICAgICAgICAgICAgICAgICAgICAgICAgICAgR1RZIE9wdGlvbnMuICAgICAgICAobGluZSAgMjA0KQoqIGNoYWluX3ByZXY6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUWSBPcHRpb25zLiAgICAgICAgKGxpbmUgIDIwNCkKKiBjaGFuZ2VfYWRkcmVzczogICAgICAgICAgICAgICAgICAgICAgICBTdGFuZGFyZCBOYW1lcy4gICAgIChsaW5lICAgNDcpCiogQ0hBTkdFX0RZTkFNSUNfVFlQRV9FWFBSOiAgICAgICAgICAgICAgRXhwcmVzc2lvbiB0cmVlcy4gICAobGluZSAgICA2KQoqIGNoYXI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlY3Rpb25zLiAgICAgICAgICAgKGxpbmUgIDI3MCkKKiBjaGFyIDwxPjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQ0ggVGFyZ2V0LiAgICAgICAgIChsaW5lICAgMTApCiogY2hhciA8Mj46ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUENIIFRhcmdldC4gICAgICAgICAobGluZSAgIDI1KQoqIGNoYXIgPDM+OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1pc2MuICAgICAgICAgICAgICAgKGxpbmUgIDY5NCkKKiBjaGFyIDw0PjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNaXNjLiAgICAgICAgICAgICAgIChsaW5lICA4ODkpCiogQ0hBUl9UWVBFX1NJWkU6ICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSBMYXlvdXQuICAgICAgICAobGluZSAgIDM4KQoqICdjaGVja19zdGFjaycgaW5zdHJ1Y3Rpb24gcGF0dGVybjogICAgIFN0YW5kYXJkIE5hbWVzLiAgICAgKGxpbmUgMTIyNykKKiBDSEltb2RlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWNoaW5lIE1vZGVzLiAgICAgIChsaW5lICAyMDEpCiogY2xhc3M6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xhc3Nlcy4gICAgICAgICAgICAobGluZSAgICA2KQoqIGNsYXNzIGRlZmluaXRpb25zLCByZWdpc3RlcjogICAgICAgICAgIFJlZ2lzdGVyIENsYXNzZXMuICAgKGxpbmUgICAgNikKKiBjbGFzcyBwcmVmZXJlbmNlIGNvbnN0cmFpbnRzOiAgICAgICAgICBDbGFzcyBQcmVmZXJlbmNlcy4gIChsaW5lICAgIDYpCiogY2xhc3NlcyBvZiBSVFggY29kZXM6ICAgICAgICAgICAgICAgICAgUlRMIENsYXNzZXMuICAgICAgICAobGluZSAgICA2KQoqIENMQVNTVFlQRV9ERUNMQVJFRF9DTEFTUzogICAgICAgICAgICAgIENsYXNzZXMuICAgICAgICAgICAgKGxpbmUgICAgNikKKiBDTEFTU1RZUEVfSEFTX01VVEFCTEU6ICAgICAgICAgICAgICAgICBDbGFzc2VzLiAgICAgICAgICAgIChsaW5lICAgODApCiogQ0xBU1NUWVBFX05PTl9QT0RfUDogICAgICAgICAgICAgICAgICAgQ2xhc3Nlcy4gICAgICAgICAgICAobGluZSAgIDg1KQoqIENMQVNTX0xJS0VMWV9TUElMTEVEX1A6ICAgICAgICAgICAgICAgIFJlZ2lzdGVyIENsYXNzZXMuICAgKGxpbmUgIDQ0NykKKiBDTEFTU19NQVhfTlJFR1M6ICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBDbGFzc2VzLiAgIChsaW5lICA0NjQpCiogQ0xBU1NfVFlQRV9QOiAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZXMuICAgICAgICAgICAgICAobGluZSAgIDgwKQoqIENsZWFudXBzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENsZWFudXBzLiAgICAgICAgICAgKGxpbmUgICAgNikKKiBDTEVBTlVQX0RFQ0w6ICAgICAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbiBCb2RpZXMuICAgIChsaW5lICAgIDYpCiogQ0xFQU5VUF9FWFBSOiAgICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb24gQm9kaWVzLiAgICAobGluZSAgICA2KQoqIENMRUFOVVBfUE9JTlRfRVhQUjogICAgICAgICAgICAgICAgICAgIEV4cHJlc3Npb24gdHJlZXMuICAgKGxpbmUgICAgNikKKiBDTEVBTlVQX1NUTVQ6ICAgICAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbiBCb2RpZXMuICAgIChsaW5lICAgIDYpCiogQ0xFQVJfQllfUElFQ0VTX1A6ICAgICAgICAgICAgICAgICAgICAgQ29zdHMuICAgICAgICAgICAgICAobGluZSAgMTIzKQoqICdjbGVhcl9jYWNoZScgaW5zdHJ1Y3Rpb24gcGF0dGVybjogICAgIFN0YW5kYXJkIE5hbWVzLiAgICAgKGxpbmUgMTU0NykKKiBDTEVBUl9JTlNOX0NBQ0hFOiAgICAgICAgICAgICAgICAgICAgICBUcmFtcG9saW5lcy4gICAgICAgIChsaW5lICAgOTkpCiogQ0xFQVJfUkFUSU86ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29zdHMuICAgICAgICAgICAgICAobGluZSAgMTE0KQoqIGNsb2JiZXI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNpZGUgRWZmZWN0cy4gICAgICAgKGxpbmUgIDEwMCkKKiBjbHo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcml0aG1ldGljLiAgICAgICAgIChsaW5lICAyMDkpCiogJ2Nsek0yJyBpbnN0cnVjdGlvbiBwYXR0ZXJuOiAgICAgICAgICAgU3RhbmRhcmQgTmFtZXMuICAgICAobGluZSAgNjEwKQoqIENMWl9ERUZJTkVEX1ZBTFVFX0FUX1pFUk86ICAgICAgICAgICAgIE1pc2MuICAgICAgICAgICAgICAgKGxpbmUgIDMxNykKKiAnY21wTScgaW5zdHJ1Y3Rpb24gcGF0dGVybjogICAgICAgICAgICBTdGFuZGFyZCBOYW1lcy4gICAgIChsaW5lICA2NDMpCiogJ2NtcG1lbU0nIGluc3RydWN0aW9uIHBhdHRlcm46ICAgICAgICAgU3RhbmRhcmQgTmFtZXMuICAgICAobGluZSAgNzU2KQoqICdjbXBzdHJNJyBpbnN0cnVjdGlvbiBwYXR0ZXJuOiAgICAgICAgIFN0YW5kYXJkIE5hbWVzLiAgICAgKGxpbmUgIDczNykKKiAnY21wc3Rybk0nIGluc3RydWN0aW9uIHBhdHRlcm46ICAgICAgICBTdGFuZGFyZCBOYW1lcy4gICAgIChsaW5lICA3MjUpCiogY29kZSBnZW5lcmF0aW9uIFJUTCBzZXF1ZW5jZXM6ICAgICAgICAgRXhwYW5kZXIgRGVmaW5pdGlvbnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgICA2KQoqIGNvZGUgaXRlcmF0b3JzIGluICcubWQnIGZpbGVzOiAgICAgICAgIENvZGUgSXRlcmF0b3JzLiAgICAgKGxpbmUgICAgNikKKiBjb2RlcywgUlRMIGV4cHJlc3Npb246ICAgICAgICAgICAgICAgICBSVEwgT2JqZWN0cy4gICAgICAgIChsaW5lICAgNDcpCiogY29kZV9sYWJlbDogICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zbnMuICAgICAgICAgICAgICAobGluZSAgMTE5KQoqICdjb2RlX2xhYmVsJyBhbmQgJy9pJzogICAgICAgICAgICAgICAgIEZsYWdzLiAgICAgICAgICAgICAgKGxpbmUgICA0NCkKKiAnY29kZV9sYWJlbCcgYW5kICcvdic6ICAgICAgICAgICAgICAgICBGbGFncy4gICAgICAgICAgICAgIChsaW5lICAgMjkpCiogQ09ERV9MQUJFTF9OVU1CRVI6ICAgICAgICAgICAgICAgICAgICAgSW5zbnMuICAgICAgICAgICAgICAobGluZSAgMTE5KQoqIENPSW1vZGU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hY2hpbmUgTW9kZXMuICAgICAgKGxpbmUgIDIwMSkKKiBDT0xMRUNUMl9IT1NUX0lOSVRJQUxJWkFUSU9OOiAgICAgICAgICBIb3N0IE1pc2MuICAgICAgICAgIChsaW5lICAgMzIpCiogQ09MTEVDVF9FWFBPUlRfTElTVDogICAgICAgICAgICAgICAgICAgTWlzYy4gICAgICAgICAgICAgICAobGluZSAgNzc5KQoqIENPTExFQ1RfU0hBUkVEX0ZJTklfRlVOQzogICAgICAgICAgICAgIE1hY3JvcyBmb3IgSW5pdGlhbGl6YXRpb24uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDQzKQoqIENPTExFQ1RfU0hBUkVEX0lOSVRfRlVOQzogICAgICAgICAgICAgIE1hY3JvcyBmb3IgSW5pdGlhbGl6YXRpb24uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDMyKQoqIGNvbWJpbmVyIHBhc3M6ICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ3MgYW5kIE1lbW9yeS4gICAgKGxpbmUgIDE0NikKKiBjb21taXRfZWRnZV9pbnNlcnRpb25zOiAgICAgICAgICAgICAgICBNYWludGFpbmluZyB0aGUgQ0ZHLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDExNikKKiBjb21wYXJlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcml0aG1ldGljLiAgICAgICAgIChsaW5lICAgNDYpCiogJ2NvbXBhcmUnLCBjYW5vbmljYWxpemF0aW9uIG9mOiAgICAgICAgSW5zbiBDYW5vbmljYWxpemF0aW9ucy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgMzYpCiogY29tcGFyaXNvbl9vcGVyYXRvcjogICAgICAgICAgICAgICAgICAgTWFjaGluZS1JbmRlcGVuZGVudCBQcmVkaWNhdGVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDExMCkKKiBjb21waWxlciBwYXNzZXMgYW5kIGZpbGVzOiAgICAgICAgICAgICBQYXNzZXMuICAgICAgICAgICAgIChsaW5lICAgIDYpCiogY29tcGxlbWVudCwgYml0d2lzZTogICAgICAgICAgICAgICAgICAgQXJpdGhtZXRpYy4gICAgICAgICAobGluZSAgMTUwKQoqIENPTVBMRVhfQ1NUOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4cHJlc3Npb24gdHJlZXMuICAgKGxpbmUgICAgNikKKiBDT01QTEVYX0VYUFI6ICAgICAgICAgICAgICAgICAgICAgICAgICBFeHByZXNzaW9uIHRyZWVzLiAgIChsaW5lICAgIDYpCiogQ09NUExFWF9UWVBFOiAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZXMuICAgICAgICAgICAgICAobGluZSAgICA2KQoqIENPTVBPTkVOVF9SRUY6ICAgICAgICAgICAgICAgICAgICAgICAgIEV4cHJlc3Npb24gdHJlZXMuICAgKGxpbmUgICAgNikKKiBDb21wb3VuZCBFeHByZXNzaW9uczogICAgICAgICAgICAgICAgICBDb21wb3VuZCBFeHByZXNzaW9ucy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgIDYpCiogQ29tcG91bmQgTHZhbHVlczogICAgICAgICAgICAgICAgICAgICAgQ29tcG91bmQgTHZhbHVlcy4gICAobGluZSAgICA2KQoqIENPTVBPVU5EX0VYUFI6ICAgICAgICAgICAgICAgICAgICAgICAgIEV4cHJlc3Npb24gdHJlZXMuICAgKGxpbmUgICAgNikKKiBDT01QT1VORF9MSVRFUkFMX0VYUFI6ICAgICAgICAgICAgICAgICBFeHByZXNzaW9uIHRyZWVzLiAgIChsaW5lICAgIDYpCiogQ09NUE9VTkRfTElURVJBTF9FWFBSX0RFQ0w6ICAgICAgICAgICAgRXhwcmVzc2lvbiB0cmVlcy4gICAobGluZSAgNjEyKQoqIENPTVBPVU5EX0xJVEVSQUxfRVhQUl9ERUNMX1NUTVQ6ICAgICAgIEV4cHJlc3Npb24gdHJlZXMuICAgKGxpbmUgIDYxMikKKiBjb21wdXRlZCBqdW1wOiAgICAgICAgICAgICAgICAgICAgICAgICBFZGdlcy4gICAgICAgICAgICAgIChsaW5lICAxMjcpCiogY29tcHV0aW5nIHRoZSBsZW5ndGggb2YgYW4gaW5zbjogICAgICAgSW5zbiBMZW5ndGhzLiAgICAgICAobGluZSAgICA2KQoqIGNvbmNhdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ3MgYW5kIE1lbW9yeS4gICAgKGxpbmUgIDI2NSkKKiBjb25jYXRuOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdzIGFuZCBNZW1vcnkuICAgIChsaW5lICAyNzEpCiogY29uZDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tcGFyaXNvbnMuICAgICAgICAobGluZSAgIDkwKQoqICdjb25kJyBhbmQgYXR0cmlidXRlczogICAgICAgICAgICAgICAgIEV4cHJlc3Npb25zLiAgICAgICAgKGxpbmUgICAzNykKKiBjb25kaXRpb24gY29kZSByZWdpc3RlcjogICAgICAgICAgICAgICBSZWdzIGFuZCBNZW1vcnkuICAgIChsaW5lICAxODApCiogY29uZGl0aW9uIGNvZGUgc3RhdHVzOiAgICAgICAgICAgICAgICAgQ29uZGl0aW9uIENvZGUuICAgICAobGluZSAgICA2KQoqIGNvbmRpdGlvbiBjb2RlczogICAgICAgICAgICAgICAgICAgICAgIENvbXBhcmlzb25zLiAgICAgICAgKGxpbmUgICAyMCkKKiBjb25kaXRpb25hbCBleGVjdXRpb246ICAgICAgICAgICAgICAgICBDb25kaXRpb25hbCBFeGVjdXRpb24uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgICA2KQoqIENvbmRpdGlvbmFsIEV4cHJlc3Npb25zOiAgICAgICAgICAgICAgIENvbmRpdGlvbmFsIEV4cHJlc3Npb25zLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICAgNikKKiBDT05ESVRJT05BTF9SRUdJU1RFUl9VU0FHRTogICAgICAgICAgICBSZWdpc3RlciBCYXNpY3MuICAgIChsaW5lICAgNTkpCiogJ2NvbmRpdGlvbmFsX3RyYXAnIGluc3RydWN0aW9uIHBhdHRlcm46IFN0YW5kYXJkIE5hbWVzLiAgICAobGluZSAxMzU5KQoqIGNvbmRpdGlvbnMsIGluIHBhdHRlcm5zOiAgICAgICAgICAgICAgIFBhdHRlcm5zLiAgICAgICAgICAgKGxpbmUgICA0MykKKiBjb25kX2V4ZWM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaWRlIEVmZmVjdHMuICAgICAgIChsaW5lICAyNDQpCiogQ09ORF9FWFBSOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhwcmVzc2lvbiB0cmVlcy4gICAobGluZSAgICA2KQoqIGNvbmZpZ3VyYXRpb24gZmlsZTogICAgICAgICAgICAgICAgICAgIEZpbGVzeXN0ZW0uICAgICAgICAgKGxpbmUgICAgNikKKiBjb25maWd1cmF0aW9uIGZpbGUgPDE+OiAgICAgICAgICAgICAgICBIb3N0IE1pc2MuICAgICAgICAgIChsaW5lICAgIDYpCiogY29uZmlndXJlIHRlcm1zOiAgICAgICAgICAgICAgICAgICAgICAgQ29uZmlndXJlIFRlcm1zLiAgICAobGluZSAgICA2KQoqIENPTkpfRVhQUjogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4cHJlc3Npb24gdHJlZXMuICAgKGxpbmUgICAgNikKKiBjb25zdDBfcnR4OiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb25zdGFudHMuICAgICAgICAgIChsaW5lICAgMTYpCiogQ09OU1QwX1JUWDogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29uc3RhbnRzLiAgICAgICAgICAobGluZSAgIDgxKQoqIGNvbnN0MV9ydHg6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnN0YW50cy4gICAgICAgICAgKGxpbmUgICAxNikKKiBDT05TVDFfUlRYOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb25zdGFudHMuICAgICAgICAgIChsaW5lICAgODEpCiogY29uc3QyX3J0eDogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29uc3RhbnRzLiAgICAgICAgICAobGluZSAgIDE2KQoqIENPTlNUMl9SVFg6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnN0YW50cy4gICAgICAgICAgKGxpbmUgICA4MSkKKiBjb25zdGFudCBhdHRyaWJ1dGVzOiAgICAgICAgICAgICAgICAgICBDb25zdGFudCBBdHRyaWJ1dGVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICAgNikKKiBjb25zdGFudCBkZWZpbml0aW9uczogICAgICAgICAgICAgICAgICBDb25zdGFudCBEZWZpbml0aW9ucy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgIDYpCiogY29uc3RhbnRzIGluIGNvbnN0cmFpbnRzOiAgICAgICAgICAgICAgU2ltcGxlIENvbnN0cmFpbnRzLiAobGluZSAgIDU3KQoqIENPTlNUQU5UX0FERFJFU1NfUDogICAgICAgICAgICAgICAgICAgIEFkZHJlc3NpbmcgTW9kZXMuICAgKGxpbmUgICAyOCkKKiBDT05TVEFOVF9BTElHTk1FTlQ6ICAgICAgICAgICAgICAgICAgICBTdG9yYWdlIExheW91dC4gICAgIChsaW5lICAyMTcpCiogQ09OU1RBTlRfUDogICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkcmVzc2luZyBNb2Rlcy4gICAobGluZSAgIDM0KQoqIENPTlNUQU5UX1BPT0xfQUREUkVTU19QOiAgICAgICAgICAgICAgIEZsYWdzLiAgICAgICAgICAgICAgKGxpbmUgICAxMCkKKiBDT05TVEFOVF9QT09MX0JFRk9SRV9GVU5DVElPTjogICAgICAgICBEYXRhIE91dHB1dC4gICAgICAgIChsaW5lICAgNjMpCiogY29uc3RtMV9ydHg6ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29uc3RhbnRzLiAgICAgICAgICAobGluZSAgIDE2KQoqIGNvbnN0cmFpbnQgbW9kaWZpZXIgY2hhcmFjdGVyczogICAgICAgIE1vZGlmaWVycy4gICAgICAgICAgKGxpbmUgICAgNikKKiBjb25zdHJhaW50LCBtYXRjaGluZzogICAgICAgICAgICAgICAgICBTaW1wbGUgQ29uc3RyYWludHMuIChsaW5lICAxMjkpCiogY29uc3RyYWludHM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29uc3RyYWludHMuICAgICAgICAobGluZSAgICA2KQoqIGNvbnN0cmFpbnRzLCBkZWZpbmluZzogICAgICAgICAgICAgICAgIERlZmluZSBDb25zdHJhaW50cy4gKGxpbmUgICAgNikKKiBjb25zdHJhaW50cywgZGVmaW5pbmcsIG9ic29sZXRlIG1ldGhvZDogT2xkIENvbnN0cmFpbnRzLiAgIChsaW5lICAgIDYpCiogY29uc3RyYWludHMsIG1hY2hpbmUgc3BlY2lmaWM6ICAgICAgICAgTWFjaGluZSBDb25zdHJhaW50cy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgIDYpCiogY29uc3RyYWludHMsIHRlc3Rpbmc6ICAgICAgICAgICAgICAgICAgQyBDb25zdHJhaW50IEludGVyZmFjZS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgIDYpCiogQ09OU1RSQUlOVF9MRU46ICAgICAgICAgICAgICAgICAgICAgICAgT2xkIENvbnN0cmFpbnRzLiAgICAobGluZSAgIDExKQoqIGNvbnN0cmFpbnRfbnVtOiAgICAgICAgICAgICAgICAgICAgICAgIEMgQ29uc3RyYWludCBJbnRlcmZhY2UuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDM3KQoqIGNvbnN0cmFpbnRfc2F0aXNmaWVkX3A6ICAgICAgICAgICAgICAgIEMgQ29uc3RyYWludCBJbnRlcmZhY2UuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDUyKQoqIGNvbnN0cnVjdG9yOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uIEJhc2ljcy4gICAgKGxpbmUgICAgNikKKiBDT05TVFJVQ1RPUjogICAgICAgICAgICAgICAgICAgICAgICAgICBFeHByZXNzaW9uIHRyZWVzLiAgIChsaW5lICAgIDYpCiogY29uc3RydWN0b3JzLCBhdXRvbWF0aWMgY2FsbHM6ICAgICAgICAgQ29sbGVjdDIuICAgICAgICAgICAobGluZSAgIDE1KQoqIGNvbnN0cnVjdG9ycywgb3V0cHV0IG9mOiAgICAgICAgICAgICAgIEluaXRpYWxpemF0aW9uLiAgICAgKGxpbmUgICAgNikKKiBDT05TVF9ERUNMOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWNsYXJhdGlvbnMuICAgICAgIChsaW5lICAgIDYpCiogY29uc3RfZG91YmxlOiAgICAgICAgICAgICAgICAgICAgICAgICAgQ29uc3RhbnRzLiAgICAgICAgICAobGluZSAgIDMyKQoqICdjb25zdF9kb3VibGUnLCBSVEwgc2hhcmluZzogICAgICAgICAgIFNoYXJpbmcuICAgICAgICAgICAgKGxpbmUgICAyOSkKKiBDT05TVF9ET1VCTEVfQ0hBSU46ICAgICAgICAgICAgICAgICAgICBDb25zdGFudHMuICAgICAgICAgIChsaW5lICAgNTkpCiogQ09OU1RfRE9VQkxFX0xPVzogICAgICAgICAgICAgICAgICAgICAgQ29uc3RhbnRzLiAgICAgICAgICAobGluZSAgIDY4KQoqIENPTlNUX0RPVUJMRV9NRU06ICAgICAgICAgICAgICAgICAgICAgIENvbnN0YW50cy4gICAgICAgICAgKGxpbmUgICA1OSkKKiBDT05TVF9ET1VCTEVfT0tfRk9SX0NPTlNUUkFJTlRfUDogICAgICBPbGQgQ29uc3RyYWludHMuICAgIChsaW5lICAgNjYpCiogQ09OU1RfRE9VQkxFX09LX0ZPUl9MRVRURVJfUDogICAgICAgICAgT2xkIENvbnN0cmFpbnRzLiAgICAobGluZSAgIDUxKQoqIGNvbnN0X2RvdWJsZV9vcGVyYW5kOiAgICAgICAgICAgICAgICAgIE1hY2hpbmUtSW5kZXBlbmRlbnQgUHJlZGljYXRlcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgMjApCiogY29uc3RfZml4ZWQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29uc3RhbnRzLiAgICAgICAgICAobGluZSAgIDM5KQoqIGNvbnN0X2ludDogICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnN0YW50cy4gICAgICAgICAgKGxpbmUgICAgOCkKKiAnY29uc3RfaW50JyBhbmQgYXR0cmlidXRlIHRlc3RzOiAgICAgICBFeHByZXNzaW9ucy4gICAgICAgIChsaW5lICAgNDcpCiogJ2NvbnN0X2ludCcgYW5kIGF0dHJpYnV0ZXM6ICAgICAgICAgICAgRXhwcmVzc2lvbnMuICAgICAgICAobGluZSAgIDEwKQoqICdjb25zdF9pbnQnLCBSVEwgc2hhcmluZzogICAgICAgICAgICAgIFNoYXJpbmcuICAgICAgICAgICAgKGxpbmUgICAyMykKKiBjb25zdF9pbnRfb3BlcmFuZDogICAgICAgICAgICAgICAgICAgICBNYWNoaW5lLUluZGVwZW5kZW50IFByZWRpY2F0ZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDE1KQoqIENPTlNUX09LX0ZPUl9DT05TVFJBSU5UX1A6ICAgICAgICAgICAgIE9sZCBDb25zdHJhaW50cy4gICAgKGxpbmUgICA0NikKKiBDT05TVF9PS19GT1JfTEVUVEVSX1A6ICAgICAgICAgICAgICAgICBPbGQgQ29uc3RyYWludHMuICAgIChsaW5lICAgMzgpCiogQ09OU1RfT1JfUFVSRV9DQUxMX1A6ICAgICAgICAgICAgICAgICAgRmxhZ3MuICAgICAgICAgICAgICAobGluZSAgIDE5KQoqIGNvbnN0X3N0cmluZzogICAgICAgICAgICAgICAgICAgICAgICAgIENvbnN0YW50cy4gICAgICAgICAgKGxpbmUgICA5MCkKKiAnY29uc3Rfc3RyaW5nJyBhbmQgYXR0cmlidXRlczogICAgICAgICBFeHByZXNzaW9ucy4gICAgICAgIChsaW5lICAgMjApCiogY29uc3RfdHJ1ZV9ydHg6ICAgICAgICAgICAgICAgICAgICAgICAgQ29uc3RhbnRzLiAgICAgICAgICAobGluZSAgIDI2KQoqIGNvbnN0X3ZlY3RvcjogICAgICAgICAgICAgICAgICAgICAgICAgIENvbnN0YW50cy4gICAgICAgICAgKGxpbmUgICA0NykKKiAnY29uc3RfdmVjdG9yJywgUlRMIHNoYXJpbmc6ICAgICAgICAgICBTaGFyaW5nLiAgICAgICAgICAgIChsaW5lICAgMzIpCiogY29udGFpbmVyOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGFpbmVycy4gICAgICAgICAobGluZSAgICA2KQoqIENPTlRJTlVFX1NUTVQ6ICAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uIEJvZGllcy4gICAgKGxpbmUgICAgNikKKiBjb250cmlidXRvcnM6ICAgICAgICAgICAgICAgICAgICAgICAgICBDb250cmlidXRvcnMuICAgICAgIChsaW5lICAgIDYpCiogY29udHJvbGxpbmcgcmVnaXN0ZXIgdXNhZ2U6ICAgICAgICAgICAgUmVnaXN0ZXIgQmFzaWNzLiAgICAobGluZSAgIDc2KQoqIGNvbnRyb2xsaW5nIHRoZSBjb21waWxhdGlvbiBkcml2ZXI6ICAgIERyaXZlci4gICAgICAgICAgICAgKGxpbmUgICAgNikKKiBjb252ZW50aW9ucywgcnVuLXRpbWU6ICAgICAgICAgICAgICAgICBJbnRlcmZhY2UuICAgICAgICAgIChsaW5lICAgIDYpCiogY29udmVyc2lvbnM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udmVyc2lvbnMuICAgICAgICAobGluZSAgICA2KQoqIENPTlZFUlRfRVhQUjogICAgICAgICAgICAgICAgICAgICAgICAgIEV4cHJlc3Npb24gdHJlZXMuICAgKGxpbmUgICAgNikKKiBjb3B5IGNvbnN0cnVjdG9yOiAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbiBCYXNpY3MuICAgIChsaW5lICAgIDYpCiogJ2NvcHlzaWduTTMnIGluc3RydWN0aW9uIHBhdHRlcm46ICAgICAgU3RhbmRhcmQgTmFtZXMuICAgICAobGluZSAgNTkxKQoqIGNvcHlfcnR4OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3NpbmcgTW9kZXMuICAgKGxpbmUgIDE3MCkKKiBjb3B5X3J0eF9pZl9zaGFyZWQ6ICAgICAgICAgICAgICAgICAgICBTaGFyaW5nLiAgICAgICAgICAgIChsaW5lICAgNjQpCiogJ2Nvc00yJyBpbnN0cnVjdGlvbiBwYXR0ZXJuOiAgICAgICAgICAgU3RhbmRhcmQgTmFtZXMuICAgICAobGluZSAgNDcwKQoqIGNvc3RzIG9mIGluc3RydWN0aW9uczogICAgICAgICAgICAgICAgIENvc3RzLiAgICAgICAgICAgICAgKGxpbmUgICAgNikKKiBDUExVU1BMVVNfQ1BQX1NQRUM6ICAgICAgICAgICAgICAgICAgICBEcml2ZXIuICAgICAgICAgICAgIChsaW5lICAxMTIpCiogQ1BQX1NQRUM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRHJpdmVyLiAgICAgICAgICAgICAobGluZSAgMTA1KQoqIENQX0lOVEVHUkFMX1RZUEU6ICAgICAgICAgICAgICAgICAgICAgIFR5cGVzLiAgICAgICAgICAgICAgKGxpbmUgICA3MikKKiBjcF9uYW1lc3BhY2VfZGVjbHM6ICAgICAgICAgICAgICAgICAgICBOYW1lc3BhY2VzLiAgICAgICAgIChsaW5lICAgNDQpCiogQ1BfVFlQRV9DT05TVF9OT05fVk9MQVRJTEVfUDogICAgICAgICAgVHlwZXMuICAgICAgICAgICAgICAobGluZSAgIDQ1KQoqIENQX1RZUEVfQ09OU1RfUDogICAgICAgICAgICAgICAgICAgICAgIFR5cGVzLiAgICAgICAgICAgICAgKGxpbmUgICAzNikKKiBDUF9UWVBFX1FVQUxTOiAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlcy4gICAgICAgICAgICAgIChsaW5lICAgIDYpCiogQ1BfVFlQRV9RVUFMUyA8MT46ICAgICAgICAgICAgICAgICAgICAgVHlwZXMuICAgICAgICAgICAgICAobGluZSAgIDI4KQoqIENQX1RZUEVfUkVTVFJJQ1RfUDogICAgICAgICAgICAgICAgICAgIFR5cGVzLiAgICAgICAgICAgICAgKGxpbmUgICA0MikKKiBDUF9UWVBFX1ZPTEFUSUxFX1A6ICAgICAgICAgICAgICAgICAgICBUeXBlcy4gICAgICAgICAgICAgIChsaW5lICAgMzkpCiogQ1FJbW9kZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFjaGluZSBNb2Rlcy4gICAgICAobGluZSAgMjAxKQoqIGNyb3NzIGNvbXBpbGF0aW9uIGFuZCBmbG9hdGluZyBwb2ludDogIEZsb2F0aW5nIFBvaW50LiAgICAgKGxpbmUgICAgNikKKiBDUlRTVFVGRl9UX0NGTEFHUzogICAgICAgICAgICAgICAgICAgICBUYXJnZXQgRnJhZ21lbnQuICAgIChsaW5lICAgMzUpCiogQ1JUU1RVRkZfVF9DRkxBR1NfUzogICAgICAgICAgICAgICAgICAgVGFyZ2V0IEZyYWdtZW50LiAgICAobGluZSAgIDM5KQoqIENSVF9DQUxMX1NUQVRJQ19GVU5DVElPTjogICAgICAgICAgICAgIFNlY3Rpb25zLiAgICAgICAgICAgKGxpbmUgIDExMSkKKiBDU0ltb2RlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWNoaW5lIE1vZGVzLiAgICAgIChsaW5lICAyMDEpCiogQ1RJbW9kZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFjaGluZSBNb2Rlcy4gICAgICAobGluZSAgMjAxKQoqIGN0ejogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyaXRobWV0aWMuICAgICAgICAgKGxpbmUgIDIxNykKKiAnY3R6TTInIGluc3RydWN0aW9uIHBhdHRlcm46ICAgICAgICAgICBTdGFuZGFyZCBOYW1lcy4gICAgIChsaW5lICA2MTkpCiogQ1RaX0RFRklORURfVkFMVUVfQVRfWkVSTzogICAgICAgICAgICAgTWlzYy4gICAgICAgICAgICAgICAobGluZSAgMzE4KQoqIENVTVVMQVRJVkVfQVJHUzogICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIEFyZ3VtZW50cy4gKGxpbmUgIDEyNikKKiBjdXJyZW50X2Z1bmN0aW9uX2VwaWxvZ3VlX2RlbGF5X2xpc3Q6ICBGdW5jdGlvbiBFbnRyeS4gICAgIChsaW5lICAxNzkpCiogY3VycmVudF9mdW5jdGlvbl9pc19sZWFmOiAgICAgICAgICAgICAgTGVhZiBGdW5jdGlvbnMuICAgICAobGluZSAgIDUwKQoqIGN1cnJlbnRfZnVuY3Rpb25fb3V0Z29pbmdfYXJnc19zaXplOiAgIFN0YWNrIEFyZ3VtZW50cy4gICAgKGxpbmUgICA0NSkKKiBjdXJyZW50X2Z1bmN0aW9uX3BvcHNfYXJnczogICAgICAgICAgICBGdW5jdGlvbiBFbnRyeS4gICAgIChsaW5lICAxMDQpCiogY3VycmVudF9mdW5jdGlvbl9wcmV0ZW5kX2FyZ3Nfc2l6ZTogICAgRnVuY3Rpb24gRW50cnkuICAgICAobGluZSAgMTEwKQoqIGN1cnJlbnRfZnVuY3Rpb25fdXNlc19vbmx5X2xlYWZfcmVnczogIExlYWYgRnVuY3Rpb25zLiAgICAgKGxpbmUgICA1MCkKKiBjdXJyZW50X2luc25fcHJlZGljYXRlOiAgICAgICAgICAgICAgICBDb25kaXRpb25hbCBFeGVjdXRpb24uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDI2KQoqIENfQ09NTU9OX09WRVJSSURFX09QVElPTlM6ICAgICAgICAgICAgIFJ1bi10aW1lIFRhcmdldC4gICAgKGxpbmUgIDExMykKKiBjX3JlZ2lzdGVyX3ByYWdtYTogICAgICAgICAgICAgICAgICAgICBNaXNjLiAgICAgICAgICAgICAgIChsaW5lICA0MDApCiogY19yZWdpc3Rlcl9wcmFnbWFfd2l0aF9leHBhbnNpb246ICAgICAgTWlzYy4gICAgICAgICAgICAgICAobGluZSAgNDAyKQoqIERBbW9kZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hY2hpbmUgTW9kZXMuICAgICAgKGxpbmUgIDE1MSkKKiBkYXRhIGJ5cGFzczogICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9jZXNzb3IgcGlwZWxpbmUgZGVzY3JpcHRpb24uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMTA1KQoqIGRhdGEgYnlwYXNzIDwxPjogICAgICAgICAgICAgICAgICAgICAgIFByb2Nlc3NvciBwaXBlbGluZSBkZXNjcmlwdGlvbi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxOTYpCiogZGF0YSBkZXBlbmRlbmNlIGRlbGF5czogICAgICAgICAgICAgICAgUHJvY2Vzc29yIHBpcGVsaW5lIGRlc2NyaXB0aW9uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICAgNikKKiBEYXRhIERlcGVuZGVuY3kgQW5hbHlzaXM6ICAgICAgICAgICAgICBEZXBlbmRlbmN5IGFuYWx5c2lzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICAgNikKKiBkYXRhIHN0cnVjdHVyZXM6ICAgICAgICAgICAgICAgICAgICAgICBQZXItRnVuY3Rpb24gRGF0YS4gIChsaW5lICAgIDYpCiogREFUQV9BTElHTk1FTlQ6ICAgICAgICAgICAgICAgICAgICAgICAgU3RvcmFnZSBMYXlvdXQuICAgICAobGluZSAgMjA0KQoqIERBVEFfU0VDVElPTl9BU01fT1A6ICAgICAgICAgICAgICAgICAgIFNlY3Rpb25zLiAgICAgICAgICAgKGxpbmUgICA1MikKKiBEQlJfT1VUUFVUX1NFUUVORDogICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdGlvbiBPdXRwdXQuIChsaW5lICAxMDUpCiogZGJyX3NlcXVlbmNlX2xlbmd0aDogICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3Rpb24gT3V0cHV0LiAobGluZSAgMTA1KQoqIERCWF9CTE9DS1NfRlVOQ1RJT05fUkVMQVRJVkU6ICAgICAgICAgIERCWCBPcHRpb25zLiAgICAgICAgKGxpbmUgIDEwMCkKKiBEQlhfQ09OVElOX0NIQVI6ICAgICAgICAgICAgICAgICAgICAgICBEQlggT3B0aW9ucy4gICAgICAgIChsaW5lICAgNjMpCiogREJYX0NPTlRJTl9MRU5HVEg6ICAgICAgICAgICAgICAgICAgICAgREJYIE9wdGlvbnMuICAgICAgICAobGluZSAgIDUzKQoqIERCWF9ERUJVR0dJTkdfSU5GTzogICAgICAgICAgICAgICAgICAgIERCWCBPcHRpb25zLiAgICAgICAgKGxpbmUgICAgOCkKKiBEQlhfRlVOQ1RJT05fRklSU1Q6ICAgICAgICAgICAgICAgICAgICBEQlggT3B0aW9ucy4gICAgICAgIChsaW5lICAgOTQpCiogREJYX0xJTkVTX0ZVTkNUSU9OX1JFTEFUSVZFOiAgICAgICAgICAgREJYIE9wdGlvbnMuICAgICAgICAobGluZSAgMTA2KQoqIERCWF9OT19YUkVGUzogICAgICAgICAgICAgICAgICAgICAgICAgIERCWCBPcHRpb25zLiAgICAgICAgKGxpbmUgICA0NykKKiBEQlhfT1VUUFVUX0xCUkFDOiAgICAgICAgICAgICAgICAgICAgICBEQlggSG9va3MuICAgICAgICAgIChsaW5lICAgIDgpCiogREJYX09VVFBVVF9NQUlOX1NPVVJDRV9GSUxFTkFNRTogICAgICAgRmlsZSBOYW1lcyBhbmQgREJYLiAobGluZSAgICA4KQoqIERCWF9PVVRQVVRfTUFJTl9TT1VSQ0VfRklMRV9FTkQ6ICAgICAgIEZpbGUgTmFtZXMgYW5kIERCWC4gKGxpbmUgICAzMykKKiBEQlhfT1VUUFVUX05GVU46ICAgICAgICAgICAgICAgICAgICAgICBEQlggSG9va3MuICAgICAgICAgIChsaW5lICAgMTcpCiogREJYX09VVFBVVF9OVUxMX05fU09fQVRfTUFJTl9TT1VSQ0VfRklMRV9FTkQ6IEZpbGUgTmFtZXMgYW5kIERCWC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgNDEpCiogREJYX09VVFBVVF9SQlJBQzogICAgICAgICAgICAgICAgICAgICAgREJYIEhvb2tzLiAgICAgICAgICAobGluZSAgIDE0KQoqIERCWF9PVVRQVVRfU09VUkNFX0xJTkU6ICAgICAgICAgICAgICAgIERCWCBIb29rcy4gICAgICAgICAgKGxpbmUgICAyMSkKKiBEQlhfUkVHSVNURVJfTlVNQkVSOiAgICAgICAgICAgICAgICAgICBBbGwgRGVidWdnZXJzLiAgICAgIChsaW5lICAgIDgpCiogREJYX1JFR1BBUk1fU1RBQlNfQ09ERTogICAgICAgICAgICAgICAgREJYIE9wdGlvbnMuICAgICAgICAobGluZSAgIDg0KQoqIERCWF9SRUdQQVJNX1NUQUJTX0xFVFRFUjogICAgICAgICAgICAgIERCWCBPcHRpb25zLiAgICAgICAgKGxpbmUgICA4OSkKKiBEQlhfU1RBVElDX0NPTlNUX1ZBUl9DT0RFOiAgICAgICAgICAgICBEQlggT3B0aW9ucy4gICAgICAgIChsaW5lICAgNzkpCiogREJYX1NUQVRJQ19TVEFCX0RBVEFfU0VDVElPTjogICAgICAgICAgREJYIE9wdGlvbnMuICAgICAgICAobGluZSAgIDcwKQoqIERCWF9UWVBFX0RFQ0xfU1RBQlNfQ09ERTogICAgICAgICAgICAgIERCWCBPcHRpb25zLiAgICAgICAgKGxpbmUgICA3NSkKKiBEQlhfVVNFX0JJTkNMOiAgICAgICAgICAgICAgICAgICAgICAgICBEQlggT3B0aW9ucy4gICAgICAgIChsaW5lICAxMTIpCiogRENtb2RlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFjaGluZSBNb2Rlcy4gICAgICAobGluZSAgMTk2KQoqIEREbW9kZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hY2hpbmUgTW9kZXMuICAgICAgKGxpbmUgICA5MCkKKiBEZSBNb3JnYW4ncyBsYXc6ICAgICAgICAgICAgICAgICAgICAgICBJbnNuIENhbm9uaWNhbGl6YXRpb25zLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA1NikKKiBkZWFkX29yX3NldF9wOiAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVfcGVlcGhvbGUuICAgIChsaW5lICAgNjUpCiogREVCVUdHRVJfQVJHX09GRlNFVDogICAgICAgICAgICAgICAgICAgQWxsIERlYnVnZ2Vycy4gICAgICAobGluZSAgIDM2KQoqIERFQlVHR0VSX0FVVE9fT0ZGU0VUOiAgICAgICAgICAgICAgICAgIEFsbCBEZWJ1Z2dlcnMuICAgICAgKGxpbmUgICAyNykKKiBERUJVR19TWU1TX1RFWFQ6ICAgICAgICAgICAgICAgICAgICAgICBEQlggT3B0aW9ucy4gICAgICAgIChsaW5lICAgMjQpCiogZGVjaW1hbCBmbG9hdCBsaWJyYXJ5OiAgICAgICAgICAgICAgICAgRGVjaW1hbCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICAgNikKKiBkZWNsYXJhdGlvbjogICAgICAgICAgICAgICAgICAgICAgICAgICBEZWNsYXJhdGlvbnMuICAgICAgIChsaW5lICAgIDYpCiogZGVjbGFyYXRpb25zLCBSVEw6ICAgICAgICAgICAgICAgICAgICAgUlRMIERlY2xhcmF0aW9ucy4gICAobGluZSAgICA2KQoqIERFQ0xBUkVfTElCUkFSWV9SRU5BTUVTOiAgICAgICAgICAgICAgIExpYnJhcnkgQ2FsbHMuICAgICAgKGxpbmUgICAgOCkKKiBERUNMX0FMSUdOOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWNsYXJhdGlvbnMuICAgICAgIChsaW5lICAgIDYpCiogREVDTF9BTlRJQ0lQQVRFRDogICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb24gQmFzaWNzLiAgICAobGluZSAgIDQ4KQoqIERFQ0xfQVJHVU1FTlRTOiAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uIEJhc2ljcy4gICAgKGxpbmUgIDE2MykKKiBERUNMX0FSUkFZX0RFTEVURV9PUEVSQVRPUl9QOiAgICAgICAgICBGdW5jdGlvbiBCYXNpY3MuICAgIChsaW5lICAxODQpCiogREVDTF9BUlRJRklDSUFMOiAgICAgICAgICAgICAgICAgICAgICAgV29ya2luZyB3aXRoIGRlY2xhcmF0aW9ucy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgMjQpCiogREVDTF9BUlRJRklDSUFMIDwxPjogICAgICAgICAgICAgICAgICAgRnVuY3Rpb24gQmFzaWNzLiAgICAobGluZSAgICA2KQoqIERFQ0xfQVJUSUZJQ0lBTCA8Mj46ICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uIEJhc2ljcy4gICAgKGxpbmUgIDE1NSkKKiBERUNMX0FTU0VNQkxFUl9OQU1FOiAgICAgICAgICAgICAgICAgICBGdW5jdGlvbiBCYXNpY3MuICAgIChsaW5lICAgIDYpCiogREVDTF9BU1NFTUJMRVJfTkFNRSA8MT46ICAgICAgICAgICAgICAgRnVuY3Rpb24gQmFzaWNzLiAgICAobGluZSAgIDIxKQoqIERFQ0xfQVRUUklCVVRFUzogICAgICAgICAgICAgICAgICAgICAgIEF0dHJpYnV0ZXMuICAgICAgICAgKGxpbmUgICAyMSkKKiBERUNMX0JBU0VfQ09OU1RSVUNUT1JfUDogICAgICAgICAgICAgICBGdW5jdGlvbiBCYXNpY3MuICAgIChsaW5lICAgOTQpCiogREVDTF9DTEFTU19TQ09QRV9QOiAgICAgICAgICAgICAgICAgICAgV29ya2luZyB3aXRoIGRlY2xhcmF0aW9ucy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgNDEpCiogREVDTF9DT01QTEVURV9DT05TVFJVQ1RPUl9QOiAgICAgICAgICAgRnVuY3Rpb24gQmFzaWNzLiAgICAobGluZSAgIDkwKQoqIERFQ0xfQ09NUExFVEVfREVTVFJVQ1RPUl9QOiAgICAgICAgICAgIEZ1bmN0aW9uIEJhc2ljcy4gICAgKGxpbmUgIDEwNCkKKiBERUNMX0NPTlNUUlVDVE9SX1A6ICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbiBCYXNpY3MuICAgIChsaW5lICAgIDYpCiogREVDTF9DT05TVFJVQ1RPUl9QIDwxPjogICAgICAgICAgICAgICAgRnVuY3Rpb24gQmFzaWNzLiAgICAobGluZSAgIDgzKQoqIERFQ0xfQ09OU1RfTUVNRlVOQ19QOiAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uIEJhc2ljcy4gICAgKGxpbmUgICA3NykKKiBERUNMX0NPTlRFWFQ6ICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lc3BhY2VzLiAgICAgICAgIChsaW5lICAgMjYpCiogREVDTF9DT05WX0ZOX1A6ICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb24gQmFzaWNzLiAgICAobGluZSAgICA2KQoqIERFQ0xfQ09OVl9GTl9QIDwxPjogICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uIEJhc2ljcy4gICAgKGxpbmUgIDExMSkKKiBERUNMX0NPUFlfQ09OU1RSVUNUT1JfUDogICAgICAgICAgICAgICBGdW5jdGlvbiBCYXNpY3MuICAgIChsaW5lICAgOTgpCiogREVDTF9ERVNUUlVDVE9SX1A6ICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb24gQmFzaWNzLiAgICAobGluZSAgICA2KQoqIERFQ0xfREVTVFJVQ1RPUl9QIDwxPjogICAgICAgICAgICAgICAgIEZ1bmN0aW9uIEJhc2ljcy4gICAgKGxpbmUgIDEwMSkKKiBERUNMX0VYVEVSTkFMOiAgICAgICAgICAgICAgICAgICAgICAgICBEZWNsYXJhdGlvbnMuICAgICAgIChsaW5lICAgIDYpCiogREVDTF9FWFRFUk5BTCA8MT46ICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb24gQmFzaWNzLiAgICAobGluZSAgIDM4KQoqIERFQ0xfRVhURVJOX0NfRlVOQ1RJT05fUDogICAgICAgICAgICAgIEZ1bmN0aW9uIEJhc2ljcy4gICAgKGxpbmUgICA1MikKKiBERUNMX0ZVTkNUSU9OX01FTUJFUl9QOiAgICAgICAgICAgICAgICBGdW5jdGlvbiBCYXNpY3MuICAgIChsaW5lICAgIDYpCiogREVDTF9GVU5DVElPTl9NRU1CRVJfUCA8MT46ICAgICAgICAgICAgRnVuY3Rpb24gQmFzaWNzLiAgICAobGluZSAgIDY3KQoqIERFQ0xfRlVOQ1RJT05fU0NPUEVfUDogICAgICAgICAgICAgICAgIFdvcmtpbmcgd2l0aCBkZWNsYXJhdGlvbnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDQ0KQoqIERFQ0xfR0xPQkFMX0NUT1JfUDogICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uIEJhc2ljcy4gICAgKGxpbmUgICAgNikKKiBERUNMX0dMT0JBTF9DVE9SX1AgPDE+OiAgICAgICAgICAgICAgICBGdW5jdGlvbiBCYXNpY3MuICAgIChsaW5lICAxMTQpCiogREVDTF9HTE9CQUxfRFRPUl9QOiAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb24gQmFzaWNzLiAgICAobGluZSAgICA2KQoqIERFQ0xfR0xPQkFMX0RUT1JfUCA8MT46ICAgICAgICAgICAgICAgIEZ1bmN0aW9uIEJhc2ljcy4gICAgKGxpbmUgIDExOCkKKiBERUNMX0lOSVRJQUw6ICAgICAgICAgICAgICAgICAgICAgICAgICBEZWNsYXJhdGlvbnMuICAgICAgIChsaW5lICAgIDYpCiogREVDTF9MSU5LT05DRV9QOiAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb24gQmFzaWNzLiAgICAobGluZSAgICA2KQoqIERFQ0xfTElOS09OQ0VfUCA8MT46ICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uIEJhc2ljcy4gICAgKGxpbmUgICA1NikKKiBERUNMX0xPQ0FMX0ZVTkNUSU9OX1A6ICAgICAgICAgICAgICAgICBGdW5jdGlvbiBCYXNpY3MuICAgIChsaW5lICAgNDQpCiogREVDTF9NQUlOX1A6ICAgICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb24gQmFzaWNzLiAgICAobGluZSAgICA3KQoqIERFQ0xfTkFNRTogICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWVzcGFjZXMuICAgICAgICAgKGxpbmUgICAxNSkKKiBERUNMX05BTUUgPDE+OiAgICAgICAgICAgICAgICAgICAgICAgICBXb3JraW5nIHdpdGggZGVjbGFyYXRpb25zLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICAgNykKKiBERUNMX05BTUUgPDI+OiAgICAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbiBCYXNpY3MuICAgIChsaW5lICAgIDYpCiogREVDTF9OQU1FIDwzPjogICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb24gQmFzaWNzLiAgICAobGluZSAgIDExKQoqIERFQ0xfTkFNRVNQQUNFX0FMSUFTOiAgICAgICAgICAgICAgICAgIE5hbWVzcGFjZXMuICAgICAgICAgKGxpbmUgICAzMCkKKiBERUNMX05BTUVTUEFDRV9TQ09QRV9QOiAgICAgICAgICAgICAgICBXb3JraW5nIHdpdGggZGVjbGFyYXRpb25zLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICAzNykKKiBERUNMX05BTUVTUEFDRV9TVERfUDogICAgICAgICAgICAgICAgICBOYW1lc3BhY2VzLiAgICAgICAgIChsaW5lICAgNDApCiogREVDTF9OT05DT05WRVJUSU5HX1A6ICAgICAgICAgICAgICAgICAgRnVuY3Rpb24gQmFzaWNzLiAgICAobGluZSAgIDg2KQoqIERFQ0xfTk9OU1RBVElDX01FTUJFUl9GVU5DVElPTl9QOiAgICAgIEZ1bmN0aW9uIEJhc2ljcy4gICAgKGxpbmUgICA3NCkKKiBERUNMX05PTl9USFVOS19GVU5DVElPTl9QOiAgICAgICAgICAgICBGdW5jdGlvbiBCYXNpY3MuICAgIChsaW5lICAxNDQpCiogREVDTF9PVkVSTE9BREVEX09QRVJBVE9SX1A6ICAgICAgICAgICAgRnVuY3Rpb24gQmFzaWNzLiAgICAobGluZSAgICA2KQoqIERFQ0xfT1ZFUkxPQURFRF9PUEVSQVRPUl9QIDwxPjogICAgICAgIEZ1bmN0aW9uIEJhc2ljcy4gICAgKGxpbmUgIDEwOCkKKiBERUNMX1JFU1VMVDogICAgICAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbiBCYXNpY3MuICAgIChsaW5lICAxNjgpCiogREVDTF9TSVpFOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVjbGFyYXRpb25zLiAgICAgICAobGluZSAgICA2KQoqIERFQ0xfU1RBVElDX0ZVTkNUSU9OX1A6ICAgICAgICAgICAgICAgIEZ1bmN0aW9uIEJhc2ljcy4gICAgKGxpbmUgICA3MSkKKiBERUNMX1NUTVQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbiBCb2RpZXMuICAgIChsaW5lICAgIDYpCiogREVDTF9TVE1UX0RFQ0w6ICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb24gQm9kaWVzLiAgICAobGluZSAgICA2KQoqIERFQ0xfVEhVTktfUDogICAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uIEJhc2ljcy4gICAgKGxpbmUgIDEyMikKKiBERUNMX1ZPTEFUSUxFX01FTUZVTkNfUDogICAgICAgICAgICAgICBGdW5jdGlvbiBCYXNpY3MuICAgIChsaW5lICAgODApCiogJ2RlY3JlbWVudF9hbmRfYnJhbmNoX3VudGlsX3plcm8nIGluc3RydWN0aW9uIHBhdHRlcm46IFN0YW5kYXJkIE5hbWVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTEwNSkKKiBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVFkgT3B0aW9ucy4gICAgICAgIChsaW5lICAgODEpCiogZGVmYXVsdF9maWxlX3N0YXJ0OiAgICAgICAgICAgICAgICAgICAgRmlsZSBGcmFtZXdvcmsuICAgICAobGluZSAgICA5KQoqIERFRkFVTFRfR0RCX0VYVEVOU0lPTlM6ICAgICAgICAgICAgICAgIERCWCBPcHRpb25zLiAgICAgICAgKGxpbmUgICAxNykKKiBERUZBVUxUX1BDQ19TVFJVQ1RfUkVUVVJOOiAgICAgICAgICAgICBBZ2dyZWdhdGUgUmV0dXJuLiAgIChsaW5lICAgMzMpCiogREVGQVVMVF9TSUdORURfQ0hBUjogICAgICAgICAgICAgICAgICAgVHlwZSBMYXlvdXQuICAgICAgICAobGluZSAgMTUzKQoqIGRlZmluZV9hZGRyZXNzX2NvbnN0cmFpbnQ6ICAgICAgICAgICAgIERlZmluZSBDb25zdHJhaW50cy4gKGxpbmUgICA5OSkKKiBkZWZpbmVfYXNtX2F0dHJpYnV0ZXM6ICAgICAgICAgICAgICAgICBUYWdnaW5nIEluc25zLiAgICAgIChsaW5lICAgNzMpCiogZGVmaW5lX2F0dHI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVmaW5pbmcgQXR0cmlidXRlcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgIDYpCiogZGVmaW5lX2F1dG9tYXRvbjogICAgICAgICAgICAgICAgICAgICAgUHJvY2Vzc29yIHBpcGVsaW5lIGRlc2NyaXB0aW9uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA1MykKKiBkZWZpbmVfYnlwYXNzOiAgICAgICAgICAgICAgICAgICAgICAgICBQcm9jZXNzb3IgcGlwZWxpbmUgZGVzY3JpcHRpb24uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMTk2KQoqIGRlZmluZV9jb2RlX2F0dHI6ICAgICAgICAgICAgICAgICAgICAgIENvZGUgSXRlcmF0b3JzLiAgICAgKGxpbmUgICAgNikKKiBkZWZpbmVfY29kZV9pdGVyYXRvcjogICAgICAgICAgICAgICAgICBDb2RlIEl0ZXJhdG9ycy4gICAgIChsaW5lICAgIDYpCiogZGVmaW5lX2NvbmRfZXhlYzogICAgICAgICAgICAgICAgICAgICAgQ29uZGl0aW9uYWwgRXhlY3V0aW9uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICAxMykKKiBkZWZpbmVfY29uc3RhbnRzOiAgICAgICAgICAgICAgICAgICAgICBDb25zdGFudCBEZWZpbml0aW9ucy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgIDYpCiogZGVmaW5lX2NvbnN0cmFpbnQ6ICAgICAgICAgICAgICAgICAgICAgRGVmaW5lIENvbnN0cmFpbnRzLiAobGluZSAgIDQ1KQoqIGRlZmluZV9jcHVfdW5pdDogICAgICAgICAgICAgICAgICAgICAgIFByb2Nlc3NvciBwaXBlbGluZSBkZXNjcmlwdGlvbi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgNjgpCiogZGVmaW5lX2RlbGF5OiAgICAgICAgICAgICAgICAgICAgICAgICAgRGVsYXkgU2xvdHMuICAgICAgICAobGluZSAgIDI1KQoqIGRlZmluZV9leHBhbmQ6ICAgICAgICAgICAgICAgICAgICAgICAgIEV4cGFuZGVyIERlZmluaXRpb25zLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICAxMSkKKiBkZWZpbmVfaW5zbjogICAgICAgICAgICAgICAgICAgICAgICAgICBQYXR0ZXJucy4gICAgICAgICAgIChsaW5lICAgIDYpCiogJ2RlZmluZV9pbnNuJyBleGFtcGxlOiAgICAgICAgICAgICAgICAgRXhhbXBsZS4gICAgICAgICAgICAobGluZSAgICA2KQoqIGRlZmluZV9pbnNuX2FuZF9zcGxpdDogICAgICAgICAgICAgICAgIEluc24gU3BsaXR0aW5nLiAgICAgKGxpbmUgIDE3MCkKKiBkZWZpbmVfaW5zbl9yZXNlcnZhdGlvbjogICAgICAgICAgICAgICBQcm9jZXNzb3IgcGlwZWxpbmUgZGVzY3JpcHRpb24uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMTA1KQoqIGRlZmluZV9tZW1vcnlfY29uc3RyYWludDogICAgICAgICAgICAgIERlZmluZSBDb25zdHJhaW50cy4gKGxpbmUgICA4MCkKKiBkZWZpbmVfbW9kZV9hdHRyOiAgICAgICAgICAgICAgICAgICAgICBTdWJzdGl0dXRpb25zLiAgICAgIChsaW5lICAgIDYpCiogZGVmaW5lX21vZGVfaXRlcmF0b3I6ICAgICAgICAgICAgICAgICAgRGVmaW5pbmcgTW9kZSBJdGVyYXRvcnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgICA2KQoqIGRlZmluZV9wZWVwaG9sZTogICAgICAgICAgICAgICAgICAgICAgIGRlZmluZV9wZWVwaG9sZS4gICAgKGxpbmUgICAgNikKKiBkZWZpbmVfcGVlcGhvbGUyOiAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVfcGVlcGhvbGUyLiAgIChsaW5lICAgIDYpCiogZGVmaW5lX3ByZWRpY2F0ZTogICAgICAgICAgICAgICAgICAgICAgRGVmaW5pbmcgUHJlZGljYXRlcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgIDYpCiogZGVmaW5lX3F1ZXJ5X2NwdV91bml0OiAgICAgICAgICAgICAgICAgUHJvY2Vzc29yIHBpcGVsaW5lIGRlc2NyaXB0aW9uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA5MCkKKiBkZWZpbmVfcmVnaXN0ZXJfY29uc3RyYWludDogICAgICAgICAgICBEZWZpbmUgQ29uc3RyYWludHMuIChsaW5lICAgMjYpCiogZGVmaW5lX3Jlc2VydmF0aW9uOiAgICAgICAgICAgICAgICAgICAgUHJvY2Vzc29yIHBpcGVsaW5lIGRlc2NyaXB0aW9uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDE4NSkKKiBkZWZpbmVfc3BlY2lhbF9wcmVkaWNhdGU6ICAgICAgICAgICAgICBEZWZpbmluZyBQcmVkaWNhdGVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICAgNikKKiBkZWZpbmVfc3BsaXQ6ICAgICAgICAgICAgICAgICAgICAgICAgICBJbnNuIFNwbGl0dGluZy4gICAgIChsaW5lICAgMzIpCiogZGVmaW5pbmcgYXR0cmlidXRlcyBhbmQgdGhlaXIgdmFsdWVzOiAgRGVmaW5pbmcgQXR0cmlidXRlcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgIDYpCiogZGVmaW5pbmcgY29uc3RyYWludHM6ICAgICAgICAgICAgICAgICAgRGVmaW5lIENvbnN0cmFpbnRzLiAobGluZSAgICA2KQoqIGRlZmluaW5nIGNvbnN0cmFpbnRzLCBvYnNvbGV0ZSBtZXRob2Q6IE9sZCBDb25zdHJhaW50cy4gICAgKGxpbmUgICAgNikKKiBkZWZpbmluZyBqdW1wIGluc3RydWN0aW9uIHBhdHRlcm5zOiAgICBKdW1wIFBhdHRlcm5zLiAgICAgIChsaW5lICAgIDYpCiogZGVmaW5pbmcgbG9vcGluZyBpbnN0cnVjdGlvbiBwYXR0ZXJuczogTG9vcGluZyBQYXR0ZXJucy4gICAobGluZSAgICA2KQoqIGRlZmluaW5nIHBlZXBob2xlIG9wdGltaXplcnM6ICAgICAgICAgIFBlZXBob2xlIERlZmluaXRpb25zLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICAgNikKKiBkZWZpbmluZyBwcmVkaWNhdGVzOiAgICAgICAgICAgICAgICAgICBEZWZpbmluZyBQcmVkaWNhdGVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICAgNikKKiBkZWZpbmluZyBSVEwgc2VxdWVuY2VzIGZvciBjb2RlIGdlbmVyYXRpb246IEV4cGFuZGVyIERlZmluaXRpb25zLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICAgNikKKiBkZWxheSBzbG90cywgZGVmaW5pbmc6ICAgICAgICAgICAgICAgICBEZWxheSBTbG90cy4gICAgICAgIChsaW5lICAgIDYpCiogREVMQVlfU0xPVFNfRk9SX0VQSUxPR1VFOiAgICAgICAgICAgICAgRnVuY3Rpb24gRW50cnkuICAgICAobGluZSAgMTYwKQoqIGRlbGV0YWJsZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUWSBPcHRpb25zLiAgICAgICAgKGxpbmUgIDE1MykKKiBERUxFVEVfSUZfT1JESU5BUlk6ICAgICAgICAgICAgICAgICAgICBGaWxlc3lzdGVtLiAgICAgICAgIChsaW5lICAgNzkpCiogRGVwZW5kZW50IFBhdHRlcm5zOiAgICAgICAgICAgICAgICAgICAgRGVwZW5kZW50IFBhdHRlcm5zLiAobGluZSAgICA2KQoqIGRlc2M6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUWSBPcHRpb25zLiAgICAgICAgKGxpbmUgICA4MSkKKiBkZXN0cnVjdG9yOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbiBCYXNpY3MuICAgIChsaW5lICAgIDYpCiogZGVzdHJ1Y3RvcnMsIG91dHB1dCBvZjogICAgICAgICAgICAgICAgSW5pdGlhbGl6YXRpb24uICAgICAobGluZSAgICA2KQoqIGRldGVybWluaXN0aWMgZmluaXRlIHN0YXRlIGF1dG9tYXRvbjogIFByb2Nlc3NvciBwaXBlbGluZSBkZXNjcmlwdGlvbi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgIDYpCiogZGV0ZXJtaW5pc3RpYyBmaW5pdGUgc3RhdGUgYXV0b21hdG9uIDwxPjogUHJvY2Vzc29yIHBpcGVsaW5lIGRlc2NyaXB0aW9uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDI5NCkKKiBERm1vZGU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWNoaW5lIE1vZGVzLiAgICAgIChsaW5lICAgNzMpCiogREZfU0laRTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSBMYXlvdXQuICAgICAgICAobGluZSAgMTI5KQoqIGRpZ2l0cyBpbiBjb25zdHJhaW50OiAgICAgICAgICAgICAgICAgIFNpbXBsZSBDb25zdHJhaW50cy4gKGxpbmUgIDExNykKKiBESW1vZGU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWNoaW5lIE1vZGVzLiAgICAgIChsaW5lICAgNDUpCiogZGlyZWN0b3J5IG9wdGlvbnMgLm1kOiAgICAgICAgICAgICAgICAgSW5jbHVkaW5nIFBhdHRlcm5zLiAobGluZSAgIDQ3KQoqIERJUl9TRVBBUkFUT1I6ICAgICAgICAgICAgICAgICAgICAgICAgIEZpbGVzeXN0ZW0uICAgICAgICAgKGxpbmUgICAxOCkKKiBESVJfU0VQQVJBVE9SXzI6ICAgICAgICAgICAgICAgICAgICAgICBGaWxlc3lzdGVtLiAgICAgICAgIChsaW5lICAgMTkpCiogZGlzYWJsaW5nIGNlcnRhaW4gcmVnaXN0ZXJzOiAgICAgICAgICAgUmVnaXN0ZXIgQmFzaWNzLiAgICAobGluZSAgIDc2KQoqIGRpc3BhdGNoIHRhYmxlOiAgICAgICAgICAgICAgICAgICAgICAgIERpc3BhdGNoIFRhYmxlcy4gICAgKGxpbmUgICAgOCkKKiBkaXY6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcml0aG1ldGljLiAgICAgICAgIChsaW5lICAxMTIpCiogJ2RpdicgYW5kIGF0dHJpYnV0ZXM6ICAgICAgICAgICAgICAgICAgRXhwcmVzc2lvbnMuICAgICAgICAobGluZSAgIDY0KQoqIGRpdmlzaW9uOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyaXRobWV0aWMuICAgICAgICAgKGxpbmUgIDExMikKKiBkaXZpc2lvbiA8MT46ICAgICAgICAgICAgICAgICAgICAgICAgICBBcml0aG1ldGljLiAgICAgICAgIChsaW5lICAxMjYpCiogZGl2aXNpb24gPDI+OiAgICAgICAgICAgICAgICAgICAgICAgICAgQXJpdGhtZXRpYy4gICAgICAgICAobGluZSAgMTMyKQoqICdkaXZNMycgaW5zdHJ1Y3Rpb24gcGF0dGVybjogICAgICAgICAgIFN0YW5kYXJkIE5hbWVzLiAgICAgKGxpbmUgIDIyMCkKKiAnZGl2bW9kTTQnIGluc3RydWN0aW9uIHBhdHRlcm46ICAgICAgICBTdGFuZGFyZCBOYW1lcy4gICAgIChsaW5lICA0MDQpCiogRE9MTEFSU19JTl9JREVOVElGSUVSUzogICAgICAgICAgICAgICAgTWlzYy4gICAgICAgICAgICAgICAobGluZSAgNDkzKQoqICdkb2xvb3BfYmVnaW4nIGluc3RydWN0aW9uIHBhdHRlcm46ICAgIFN0YW5kYXJkIE5hbWVzLiAgICAgKGxpbmUgMTEzNCkKKiAnZG9sb29wX2VuZCcgaW5zdHJ1Y3Rpb24gcGF0dGVybjogICAgICBTdGFuZGFyZCBOYW1lcy4gICAgIChsaW5lIDExMTUpCiogRE9ORTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhwYW5kZXIgRGVmaW5pdGlvbnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDc0KQoqIERPTlRfVVNFX0JVSUxUSU5fU0VUSk1QOiAgICAgICAgICAgICAgIEV4Y2VwdGlvbiBSZWdpb24gT3V0cHV0LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA2OCkKKiBET1VCTEVfVFlQRV9TSVpFOiAgICAgICAgICAgICAgICAgICAgICBUeXBlIExheW91dC4gICAgICAgIChsaW5lICAgNTIpCiogRE9fQk9EWTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb24gQm9kaWVzLiAgICAobGluZSAgICA2KQoqIERPX0NPTkQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uIEJvZGllcy4gICAgKGxpbmUgICAgNikKKiBET19TVE1UOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbiBCb2RpZXMuICAgIChsaW5lICAgIDYpCiogRFFtb2RlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFjaGluZSBNb2Rlcy4gICAgICAobGluZSAgMTE1KQoqIGRyaXZlcjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERyaXZlci4gICAgICAgICAgICAgKGxpbmUgICAgNikKKiBEUklWRVJfU0VMRl9TUEVDUzogICAgICAgICAgICAgICAgICAgICBEcml2ZXIuICAgICAgICAgICAgIChsaW5lICAgNzApCiogRFVNUEZJTEVfRk9STUFUOiAgICAgICAgICAgICAgICAgICAgICAgRmlsZXN5c3RlbS4gICAgICAgICAobGluZSAgIDY3KQoqIERXQVJGMl9BU01fTElORV9ERUJVR19JTkZPOiAgICAgICAgICAgIFNEQiBhbmQgRFdBUkYuICAgICAgKGxpbmUgICAzNSkKKiBEV0FSRjJfREVCVUdHSU5HX0lORk86ICAgICAgICAgICAgICAgICBTREIgYW5kIERXQVJGLiAgICAgIChsaW5lICAgMTIpCiogRFdBUkYyX0ZSQU1FX0lORk86ICAgICAgICAgICAgICAgICAgICAgU0RCIGFuZCBEV0FSRi4gICAgICAobGluZSAgIDI5KQoqIERXQVJGMl9GUkFNRV9SRUdfT1VUOiAgICAgICAgICAgICAgICAgIEZyYW1lIFJlZ2lzdGVycy4gICAgKGxpbmUgIDEzNCkKKiBEV0FSRjJfVU5XSU5EX0lORk86ICAgICAgICAgICAgICAgICAgICBFeGNlcHRpb24gUmVnaW9uIE91dHB1dC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgMzgpCiogRFdBUkZfQUxUX0ZSQU1FX1JFVFVSTl9DT0xVTU46ICAgICAgICAgRnJhbWUgTGF5b3V0LiAgICAgICAobGluZSAgMTUwKQoqIERXQVJGX0NJRV9EQVRBX0FMSUdOTUVOVDogICAgICAgICAgICAgIEV4Y2VwdGlvbiBSZWdpb24gT3V0cHV0LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA3MykKKiBEV0FSRl9GUkFNRV9SRUdJU1RFUlM6ICAgICAgICAgICAgICAgICBGcmFtZSBSZWdpc3RlcnMuICAgIChsaW5lICAgOTIpCiogRFdBUkZfRlJBTUVfUkVHTlVNOiAgICAgICAgICAgICAgICAgICAgRnJhbWUgUmVnaXN0ZXJzLiAgICAobGluZSAgMTI2KQoqIERXQVJGX1JFR19UT19VTldJTkRfQ09MVU1OOiAgICAgICAgICAgIEZyYW1lIFJlZ2lzdGVycy4gICAgKGxpbmUgIDExNykKKiBEV0FSRl9aRVJPX1JFRzogICAgICAgICAgICAgICAgICAgICAgICBGcmFtZSBMYXlvdXQuICAgICAgIChsaW5lICAxNjEpCiogRFlOQU1JQ19DSEFJTl9BRERSRVNTOiAgICAgICAgICAgICAgICAgRnJhbWUgTGF5b3V0LiAgICAgICAobGluZSAgIDkwKQoqICdFJyBpbiBjb25zdHJhaW50OiAgICAgICAgICAgICAgICAgICAgIFNpbXBsZSBDb25zdHJhaW50cy4gKGxpbmUgICA3NikKKiBlYXJseWNsb2JiZXIgb3BlcmFuZDogICAgICAgICAgICAgICAgICBNb2RpZmllcnMuICAgICAgICAgIChsaW5lICAgMjUpCiogZWRnZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWRnZXMuICAgICAgICAgICAgICAobGluZSAgICA2KQoqIGVkZ2UgaW4gdGhlIGZsb3cgZ3JhcGg6ICAgICAgICAgICAgICAgIEVkZ2VzLiAgICAgICAgICAgICAgKGxpbmUgICAgNikKKiBlZGdlIGl0ZXJhdG9yczogICAgICAgICAgICAgICAgICAgICAgICBFZGdlcy4gICAgICAgICAgICAgIChsaW5lICAgMTUpCiogZWRnZSBzcGxpdHRpbmc6ICAgICAgICAgICAgICAgICAgICAgICAgTWFpbnRhaW5pbmcgdGhlIENGRy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxMTYpCiogRURHRV9BQk5PUk1BTDogICAgICAgICAgICAgICAgICAgICAgICAgRWRnZXMuICAgICAgICAgICAgICAobGluZSAgMTI3KQoqIEVER0VfQUJOT1JNQUwsIEVER0VfQUJOT1JNQUxfQ0FMTDogICAgIEVkZ2VzLiAgICAgICAgICAgICAgKGxpbmUgIDE3MCkKKiBFREdFX0FCTk9STUFMLCBFREdFX0VIOiAgICAgICAgICAgICAgICBFZGdlcy4gICAgICAgICAgICAgIChsaW5lICAgOTUpCiogRURHRV9BQk5PUk1BTCwgRURHRV9TSUJDQUxMOiAgICAgICAgICAgRWRnZXMuICAgICAgICAgICAgICAobGluZSAgMTIxKQoqIEVER0VfRkFMTFRIUlUsIGZvcmNlX25vbmZhbGx0aHJ1OiAgICAgIEVkZ2VzLiAgICAgICAgICAgICAgKGxpbmUgICA4NSkKKiAnRURPTScsIGltcGxpY2l0IHVzYWdlOiAgICAgICAgICAgICAgICBMaWJyYXJ5IENhbGxzLiAgICAgIChsaW5lICAgNTgpCiogRUhfRlJBTUVfSU5fREFUQV9TRUNUSU9OOiAgICAgICAgICAgICAgRXhjZXB0aW9uIFJlZ2lvbiBPdXRwdXQuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDE5KQoqIEVIX0ZSQU1FX1NFQ1RJT05fTkFNRTogICAgICAgICAgICAgICAgIEV4Y2VwdGlvbiBSZWdpb24gT3V0cHV0LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICAgOSkKKiAnZWhfcmV0dXJuJyBpbnN0cnVjdGlvbiBwYXR0ZXJuOiAgICAgICBTdGFuZGFyZCBOYW1lcy4gICAgIChsaW5lIDEyOTkpCiogRUhfUkVUVVJOX0RBVEFfUkVHTk86ICAgICAgICAgICAgICAgICAgRXhjZXB0aW9uIEhhbmRsaW5nLiAobGluZSAgICA2KQoqIEVIX1JFVFVSTl9IQU5ETEVSX1JUWDogICAgICAgICAgICAgICAgIEV4Y2VwdGlvbiBIYW5kbGluZy4gKGxpbmUgICAzOCkKKiBFSF9SRVRVUk5fU1RBQ0tBREpfUlRYOiAgICAgICAgICAgICAgICBFeGNlcHRpb24gSGFuZGxpbmcuIChsaW5lICAgMjEpCiogRUhfVEFCTEVTX0NBTl9CRV9SRUFEX09OTFk6ICAgICAgICAgICAgRXhjZXB0aW9uIFJlZ2lvbiBPdXRwdXQuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDI4KQoqIEVIX1VTRVM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uIEVudHJ5LiAgICAgKGxpbmUgIDE1NSkKKiBlaV9lZGdlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZGdlcy4gICAgICAgICAgICAgIChsaW5lICAgNDMpCiogZWlfZW5kX3A6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWRnZXMuICAgICAgICAgICAgICAobGluZSAgIDI3KQoqIGVpX2xhc3Q6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVkZ2VzLiAgICAgICAgICAgICAgKGxpbmUgICAyMykKKiBlaV9uZXh0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZGdlcy4gICAgICAgICAgICAgIChsaW5lICAgMzUpCiogZWlfb25lX2JlZm9yZV9lbmRfcDogICAgICAgICAgICAgICAgICAgRWRnZXMuICAgICAgICAgICAgICAobGluZSAgIDMxKQoqIGVpX3ByZXY6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVkZ2VzLiAgICAgICAgICAgICAgKGxpbmUgICAzOSkKKiBlaV9zYWZlX3NhZmU6ICAgICAgICAgICAgICAgICAgICAgICAgICBFZGdlcy4gICAgICAgICAgICAgIChsaW5lICAgNDcpCiogZWlfc3RhcnQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWRnZXMuICAgICAgICAgICAgICAobGluZSAgIDE5KQoqIEVMSUdJQkxFX0ZPUl9FUElMT0dVRV9ERUxBWTogICAgICAgICAgIEZ1bmN0aW9uIEVudHJ5LiAgICAgKGxpbmUgIDE2NikKKiBFTElNSU5BQkxFX1JFR1M6ICAgICAgICAgICAgICAgICAgICAgICBFbGltaW5hdGlvbi4gICAgICAgIChsaW5lICAgNDMpCiogRUxTRV9DTEFVU0U6ICAgICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb24gQm9kaWVzLiAgICAobGluZSAgICA2KQoqIEVtYmVkZGVkIEM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgIDYpCiogRU1JVF9NT0RFX1NFVDogICAgICAgICAgICAgICAgICAgICAgICAgTW9kZSBTd2l0Y2hpbmcuICAgICAobGluZSAgIDczKQoqIEVtcHR5IFN0YXRlbWVudHM6ICAgICAgICAgICAgICAgICAgICAgIEVtcHR5IFN0YXRlbWVudHMuICAgKGxpbmUgICAgNikKKiBFTVBUWV9DTEFTU19FWFBSOiAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbiBCb2RpZXMuICAgIChsaW5lICAgIDYpCiogRU1QVFlfRklFTERfQk9VTkRBUlk6ICAgICAgICAgICAgICAgICAgU3RvcmFnZSBMYXlvdXQuICAgICAobGluZSAgMjQxKQoqIEVOQUJMRV9FWEVDVVRFX1NUQUNLOiAgICAgICAgICAgICAgICAgIFRyYW1wb2xpbmVzLiAgICAgICAgKGxpbmUgIDEwOSkKKiBFTkRGSUxFX1NQRUM6ICAgICAgICAgICAgICAgICAgICAgICAgICBEcml2ZXIuICAgICAgICAgICAgIChsaW5lICAyMTcpCiogZW5kaWFubmVzczogICAgICAgICAgICAgICAgICAgICAgICAgICAgUG9ydGFiaWxpdHkuICAgICAgICAobGluZSAgIDIwKQoqIEVOVFJZX0JMT0NLX1BUUiwgRVhJVF9CTE9DS19QVFI6ICAgICAgIEJhc2ljIEJsb2Nrcy4gICAgICAgKGxpbmUgICAyOCkKKiBlbnVtIG1hY2hpbmVfbW9kZTogICAgICAgICAgICAgICAgICAgICBNYWNoaW5lIE1vZGVzLiAgICAgIChsaW5lICAgIDYpCiogZW51bSByZWdfY2xhc3M6ICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgQ2xhc3Nlcy4gICAobGluZSAgIDYzKQoqIEVOVU1FUkFMX1RZUEU6ICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGVzLiAgICAgICAgICAgICAgKGxpbmUgICAgNikKKiBlcGlsb2d1ZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbiBFbnRyeS4gICAgIChsaW5lICAgIDYpCiogJ2VwaWxvZ3VlJyBpbnN0cnVjdGlvbiBwYXR0ZXJuOiAgICAgICAgU3RhbmRhcmQgTmFtZXMuICAgICAobGluZSAxMzMxKQoqIEVQSUxPR1VFX1VTRVM6ICAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uIEVudHJ5LiAgICAgKGxpbmUgIDE0OSkKKiBlcTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21wYXJpc29ucy4gICAgICAgIChsaW5lICAgNTIpCiogJ2VxJyBhbmQgYXR0cmlidXRlczogICAgICAgICAgICAgICAgICAgRXhwcmVzc2lvbnMuICAgICAgICAobGluZSAgIDY0KQoqIGVxdWFsOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbXBhcmlzb25zLiAgICAgICAgKGxpbmUgICA1MikKKiBlcV9hdHRyOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeHByZXNzaW9ucy4gICAgICAgIChsaW5lICAgODUpCiogRVFfRVhQUjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhwcmVzc2lvbiB0cmVlcy4gICAobGluZSAgICA2KQoqICdlcnJubycsIGltcGxpY2l0IHVzYWdlOiAgICAgICAgICAgICAgIExpYnJhcnkgQ2FsbHMuICAgICAgKGxpbmUgICA3MCkKKiBFWEFDVF9ESVZfRVhQUjogICAgICAgICAgICAgICAgICAgICAgICBFeHByZXNzaW9uIHRyZWVzLiAgIChsaW5lICAgIDYpCiogZXhhbWluaW5nIFNTQV9OQU1FczogICAgICAgICAgICAgICAgICAgU1NBLiAgICAgICAgICAgICAgICAobGluZSAgMjE4KQoqIGV4Y2VwdGlvbiBoYW5kbGluZzogICAgICAgICAgICAgICAgICAgIEVkZ2VzLiAgICAgICAgICAgICAgKGxpbmUgICA5NSkKKiBleGNlcHRpb24gaGFuZGxpbmcgPDE+OiAgICAgICAgICAgICAgICBFeGNlcHRpb24gSGFuZGxpbmcuIChsaW5lICAgIDYpCiogJ2V4Y2VwdGlvbl9yZWNlaXZlcicgaW5zdHJ1Y3Rpb24gcGF0dGVybjogU3RhbmRhcmQgTmFtZXMuICAobGluZSAxMjY0KQoqIGV4Y2xhbWF0aW9uIHBvaW50OiAgICAgICAgICAgICAgICAgICAgIE11bHRpLUFsdGVybmF0aXZlLiAgKGxpbmUgICA0NykKKiBleGNsdXNpb25fc2V0OiAgICAgICAgICAgICAgICAgICAgICAgICBQcm9jZXNzb3IgcGlwZWxpbmUgZGVzY3JpcHRpb24uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMjEzKQoqIGV4Y2x1c2l2ZS1vciwgYml0d2lzZTogICAgICAgICAgICAgICAgIEFyaXRobWV0aWMuICAgICAgICAgKGxpbmUgIDE2NCkKKiBFWElUX0VYUFI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeHByZXNzaW9uIHRyZWVzLiAgIChsaW5lICAgIDYpCiogRVhJVF9JR05PUkVfU1RBQ0s6ICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb24gRW50cnkuICAgICAobGluZSAgMTM3KQoqIGV4cGFuZGVyIGRlZmluaXRpb25zOiAgICAgICAgICAgICAgICAgIEV4cGFuZGVyIERlZmluaXRpb25zLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICAgNikKKiAnZXhwTTInIGluc3RydWN0aW9uIHBhdHRlcm46ICAgICAgICAgICBTdGFuZGFyZCBOYW1lcy4gICAgIChsaW5lICA0ODYpCiogZXhwcmVzc2lvbjogICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhwcmVzc2lvbiB0cmVlcy4gICAobGluZSAgICA2KQoqIGV4cHJlc3Npb24gY29kZXM6ICAgICAgICAgICAgICAgICAgICAgIFJUTCBPYmplY3RzLiAgICAgICAgKGxpbmUgICA0NykKKiBleHByX2xpc3Q6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnNucy4gICAgICAgICAgICAgIChsaW5lICA1NDQpCiogRVhQUl9TVE1UOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb24gQm9kaWVzLiAgICAobGluZSAgICA2KQoqIEVYUFJfU1RNVF9FWFBSOiAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uIEJvZGllcy4gICAgKGxpbmUgICAgNikKKiAnZXh0ZW5kTU4yJyBpbnN0cnVjdGlvbiBwYXR0ZXJuOiAgICAgICBTdGFuZGFyZCBOYW1lcy4gICAgIChsaW5lICA4MTMpCiogZXh0ZW5zaWJsZSBjb25zdHJhaW50czogICAgICAgICAgICAgICAgU2ltcGxlIENvbnN0cmFpbnRzLiAobGluZSAgMTYwKQoqIEVYVFJBX0FERFJFU1NfQ09OU1RSQUlOVDogICAgICAgICAgICAgIE9sZCBDb25zdHJhaW50cy4gICAgKGxpbmUgIDEyMCkKKiBFWFRSQV9DT05TVFJBSU5UOiAgICAgICAgICAgICAgICAgICAgICBPbGQgQ29uc3RyYWludHMuICAgIChsaW5lICAgNzEpCiogRVhUUkFfQ09OU1RSQUlOVF9TVFI6ICAgICAgICAgICAgICAgICAgT2xkIENvbnN0cmFpbnRzLiAgICAobGluZSAgIDkyKQoqIEVYVFJBX01FTU9SWV9DT05TVFJBSU5UOiAgICAgICAgICAgICAgIE9sZCBDb25zdHJhaW50cy4gICAgKGxpbmUgICA5NykKKiBFWFRSQV9TUEVDUzogICAgICAgICAgICAgICAgICAgICAgICAgICBEcml2ZXIuICAgICAgICAgICAgIChsaW5lICAyNDQpCiogJ2V4dHYnIGluc3RydWN0aW9uIHBhdHRlcm46ICAgICAgICAgICAgU3RhbmRhcmQgTmFtZXMuICAgICAobGluZSAgODQ5KQoqICdleHR6dicgaW5zdHJ1Y3Rpb24gcGF0dGVybjogICAgICAgICAgIFN0YW5kYXJkIE5hbWVzLiAgICAgKGxpbmUgIDg2NCkKKiAnRicgaW4gY29uc3RyYWludDogICAgICAgICAgICAgICAgICAgICBTaW1wbGUgQ29uc3RyYWludHMuIChsaW5lICAgODEpCiogRkFJTDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhwYW5kZXIgRGVmaW5pdGlvbnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDgwKQoqIGZhbGwtdGhydTogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVkZ2VzLiAgICAgICAgICAgICAgKGxpbmUgICA2OCkKKiBGQVRBTF9FWElUX0NPREU6ICAgICAgICAgICAgICAgICAgICAgICBIb3N0IE1pc2MuICAgICAgICAgIChsaW5lICAgIDYpCiogRkRMLCBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2U6ICAgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICAgNikKKiBmZWF0dXJlcywgb3B0aW9uYWwsIGluIHN5c3RlbSBjb252ZW50aW9uczogUnVuLXRpbWUgVGFyZ2V0LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA1OSkKKiBmZnM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcml0aG1ldGljLiAgICAgICAgIChsaW5lICAyMDMpCiogJ2Zmc00yJyBpbnN0cnVjdGlvbiBwYXR0ZXJuOiAgICAgICAgICAgU3RhbmRhcmQgTmFtZXMuICAgICAobGluZSAgNjAwKQoqIEZJRUxEX0RFQ0w6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlY2xhcmF0aW9ucy4gICAgICAgKGxpbmUgICAgNikKKiBmaWxlcyBhbmQgcGFzc2VzIG9mIHRoZSBjb21waWxlcjogICAgICBQYXNzZXMuICAgICAgICAgICAgIChsaW5lICAgIDYpCiogZmlsZXMsIGdlbmVyYXRlZDogICAgICAgICAgICAgICAgICAgICAgRmlsZXMuICAgICAgICAgICAgICAobGluZSAgICA2KQoqIGZpbGVfZW5kX2luZGljYXRlX2V4ZWNfc3RhY2s6ICAgICAgICAgIEZpbGUgRnJhbWV3b3JrLiAgICAgKGxpbmUgICAzOSkKKiBmaW5hbF9hYnNlbmNlX3NldDogICAgICAgICAgICAgICAgICAgICBQcm9jZXNzb3IgcGlwZWxpbmUgZGVzY3JpcHRpb24uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMjEzKQoqIEZJTkFMX1BSRVNDQU5fSU5TTjogICAgICAgICAgICAgICAgICAgIEluc3RydWN0aW9uIE91dHB1dC4gKGxpbmUgICA0NSkKKiBmaW5hbF9wcmVzZW5jZV9zZXQ6ICAgICAgICAgICAgICAgICAgICBQcm9jZXNzb3IgcGlwZWxpbmUgZGVzY3JpcHRpb24uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMjEzKQoqIGZpbmFsX3NjYW5faW5zbjogICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uIEVudHJ5LiAgICAgKGxpbmUgIDE3OSkKKiBmaW5hbF9zZXF1ZW5jZTogICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdGlvbiBPdXRwdXQuIChsaW5lICAxMTYpCiogRklORF9CQVNFX1RFUk06ICAgICAgICAgICAgICAgICAgICAgICAgQWRkcmVzc2luZyBNb2Rlcy4gICAobGluZSAgIDk5KQoqIGZpbml0ZSBzdGF0ZSBhdXRvbWF0b24gbWluaW1pemF0aW9uOiAgIFByb2Nlc3NvciBwaXBlbGluZSBkZXNjcmlwdGlvbi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAyOTQpCiogRklOSV9BUlJBWV9TRUNUSU9OX0FTTV9PUDogICAgICAgICAgICAgU2VjdGlvbnMuICAgICAgICAgICAobGluZSAgMTA0KQoqIEZJTklfU0VDVElPTl9BU01fT1A6ICAgICAgICAgICAgICAgICAgIFNlY3Rpb25zLiAgICAgICAgICAgKGxpbmUgICA4OSkKKiBGSVJTVF9QQVJNX09GRlNFVDogICAgICAgICAgICAgICAgICAgICBGcmFtZSBMYXlvdXQuICAgICAgIChsaW5lICAgNjUpCiogJ0ZJUlNUX1BBUk1fT0ZGU0VUJyBhbmQgdmlydHVhbCByZWdpc3RlcnM6IFJlZ3MgYW5kIE1lbW9yeS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgNjUpCiogRklSU1RfUFNFVURPX1JFR0lTVEVSOiAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgQmFzaWNzLiAgICAobGluZSAgICA4KQoqIEZJUlNUX1NUQUNLX1JFRzogICAgICAgICAgICAgICAgICAgICAgIFN0YWNrIFJlZ2lzdGVycy4gICAgKGxpbmUgICAyMikKKiBGSVJTVF9WSVJUVUFMX1JFR0lTVEVSOiAgICAgICAgICAgICAgICBSZWdzIGFuZCBNZW1vcnkuICAgIChsaW5lICAgNTEpCiogZml4OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udmVyc2lvbnMuICAgICAgICAobGluZSAgIDY2KQoqIGZpeCA8MT46ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnZlcnNpb25zLiAgICAgICAgKGxpbmUgICA3NykKKiBmaXhlZCByZWdpc3RlcjogICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBCYXNpY3MuICAgIChsaW5lICAgMTUpCiogZml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5OiAgICAgICAgRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICAgNikKKiBGSVhFRF9DT05WRVJUX0VYUFI6ICAgICAgICAgICAgICAgICAgICBFeHByZXNzaW9uIHRyZWVzLiAgIChsaW5lICAgIDYpCiogRklYRURfQ1NUOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhwcmVzc2lvbiB0cmVlcy4gICAobGluZSAgICA2KQoqIEZJWEVEX1BPSU5UX1RZUEU6ICAgICAgICAgICAgICAgICAgICAgIFR5cGVzLiAgICAgICAgICAgICAgKGxpbmUgICAgNikKKiBGSVhFRF9SRUdJU1RFUlM6ICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBCYXNpY3MuICAgIChsaW5lICAgMTQpCiogZml4ZWRfcmVnczogICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgQmFzaWNzLiAgICAobGluZSAgIDU5KQoqICdmaXhNTjInIGluc3RydWN0aW9uIHBhdHRlcm46ICAgICAgICAgIFN0YW5kYXJkIE5hbWVzLiAgICAgKGxpbmUgIDc4MCkKKiAnZml4dW5zTU4yJyBpbnN0cnVjdGlvbiBwYXR0ZXJuOiAgICAgICBTdGFuZGFyZCBOYW1lcy4gICAgIChsaW5lICA3ODkpCiogJ2ZpeHVuc190cnVuY01OMicgaW5zdHJ1Y3Rpb24gcGF0dGVybjogU3RhbmRhcmQgTmFtZXMuICAgICAobGluZSAgODA0KQoqIEZJWFVOU19UUlVOQ19MSUtFX0ZJWF9UUlVOQzogICAgICAgICAgIE1pc2MuICAgICAgICAgICAgICAgKGxpbmUgICA5OCkKKiAnZml4X3RydW5jTU4yJyBpbnN0cnVjdGlvbiBwYXR0ZXJuOiAgICBTdGFuZGFyZCBOYW1lcy4gICAgIChsaW5lICA4MDApCiogRklYX1RSVU5DX0VYUFI6ICAgICAgICAgICAgICAgICAgICAgICAgRXhwcmVzc2lvbiB0cmVlcy4gICAobGluZSAgICA2KQoqIGZsYWdzIGluIFJUTCBleHByZXNzaW9uOiAgICAgICAgICAgICAgIEZsYWdzLiAgICAgICAgICAgICAgKGxpbmUgICAgNikKKiBmbG9hdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb252ZXJzaW9ucy4gICAgICAgIChsaW5lICAgNTgpCiogZmxvYXRpbmcgcG9pbnQgYW5kIGNyb3NzIGNvbXBpbGF0aW9uOiAgRmxvYXRpbmcgUG9pbnQuICAgICAobGluZSAgICA2KQoqIEZsb2F0aW5nIFBvaW50IEVtdWxhdGlvbjogICAgICAgICAgICAgIFRhcmdldCBGcmFnbWVudC4gICAgKGxpbmUgICAxNSkKKiBmbG9hdGluZyBwb2ludCBlbXVsYXRpb24gbGlicmFyeSwgVVMgU29mdHdhcmUgR09GQVNUOiBMaWJyYXJ5IENhbGxzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA0NCkKKiAnZmxvYXRNTjInIGluc3RydWN0aW9uIHBhdHRlcm46ICAgICAgICBTdGFuZGFyZCBOYW1lcy4gICAgIChsaW5lICA3NzIpCiogJ2Zsb2F0dW5zTU4yJyBpbnN0cnVjdGlvbiBwYXR0ZXJuOiAgICAgU3RhbmRhcmQgTmFtZXMuICAgICAobGluZSAgNzc2KQoqIEZMT0FUX0VYUFI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4cHJlc3Npb24gdHJlZXMuICAgKGxpbmUgICAgNikKKiBmbG9hdF9leHRlbmQ6ICAgICAgICAgICAgICAgICAgICAgICAgICBDb252ZXJzaW9ucy4gICAgICAgIChsaW5lICAgMzMpCiogRkxPQVRfTElCX0NPTVBBUkVfUkVUVVJOU19CT09MOiAgICAgICAgTGlicmFyeSBDYWxscy4gICAgICAobGluZSAgIDI0KQoqIEZMT0FUX1NUT1JFX0ZMQUdfVkFMVUU6ICAgICAgICAgICAgICAgIE1pc2MuICAgICAgICAgICAgICAgKGxpbmUgIDI5OSkKKiBmbG9hdF90cnVuY2F0ZTogICAgICAgICAgICAgICAgICAgICAgICBDb252ZXJzaW9ucy4gICAgICAgIChsaW5lICAgNTMpCiogRkxPQVRfVFlQRV9TSVpFOiAgICAgICAgICAgICAgICAgICAgICAgVHlwZSBMYXlvdXQuICAgICAgICAobGluZSAgIDQ4KQoqIEZMT0FUX1dPUkRTX0JJR19FTkRJQU46ICAgICAgICAgICAgICAgIFN0b3JhZ2UgTGF5b3V0LiAgICAgKGxpbmUgICA0MSkKKiAnRkxPQVRfV09SRFNfQklHX0VORElBTicsIChsYWNrIG9mKSBlZmZlY3Qgb24gJ3N1YnJlZyc6IFJlZ3MgYW5kIE1lbW9yeS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxMzkpCiogJ2Zsb29yTTInIGluc3RydWN0aW9uIHBhdHRlcm46ICAgICAgICAgU3RhbmRhcmQgTmFtZXMuICAgICAobGluZSAgNTIxKQoqIEZMT09SX0RJVl9FWFBSOiAgICAgICAgICAgICAgICAgICAgICAgIEV4cHJlc3Npb24gdHJlZXMuICAgKGxpbmUgICAgNikKKiBGTE9PUl9NT0RfRVhQUjogICAgICAgICAgICAgICAgICAgICAgICBFeHByZXNzaW9uIHRyZWVzLiAgIChsaW5lICAgIDYpCiogZmxvdy1pbnNlbnNpdGl2ZSBhbGlhcyBhbmFseXNpczogICAgICAgQWxpYXMgYW5hbHlzaXMuICAgICAobGluZSAgICA2KQoqIGZsb3ctc2Vuc2l0aXZlIGFsaWFzIGFuYWx5c2lzOiAgICAgICAgIEFsaWFzIGFuYWx5c2lzLiAgICAgKGxpbmUgICAgNikKKiAnZm1vZE0zJyBpbnN0cnVjdGlvbiBwYXR0ZXJuOiAgICAgICAgICBTdGFuZGFyZCBOYW1lcy4gICAgIChsaW5lICA0NTIpCiogRk9SQ0VfQ09ERV9TRUNUSU9OX0FMSUdOOiAgICAgICAgICAgICAgU2VjdGlvbnMuICAgICAgICAgICAobGluZSAgMTM1KQoqIGZvcmNlX3JlZzogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YW5kYXJkIE5hbWVzLiAgICAgKGxpbmUgICAzNikKKiBGT1JfQk9EWTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbiBCb2RpZXMuICAgIChsaW5lICAgIDYpCiogRk9SX0NPTkQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb24gQm9kaWVzLiAgICAobGluZSAgICA2KQoqIEZPUl9FWFBSOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uIEJvZGllcy4gICAgKGxpbmUgICAgNikKKiBGT1JfSU5JVF9TVE1UOiAgICAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbiBCb2RpZXMuICAgIChsaW5lICAgIDYpCiogRk9SX1NUTVQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb24gQm9kaWVzLiAgICAobGluZSAgICA2KQoqIGZyYWN0aW9uYWwgdHlwZXM6ICAgICAgICAgICAgICAgICAgICAgIEZpeGVkLXBvaW50IGZyYWN0aW9uYWwgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgIDYpCiogJ2ZyYWN0TU4yJyBpbnN0cnVjdGlvbiBwYXR0ZXJuOiAgICAgICAgU3RhbmRhcmQgTmFtZXMuICAgICAobGluZSAgODIyKQoqICdmcmFjdHVuc01OMicgaW5zdHJ1Y3Rpb24gcGF0dGVybjogICAgIFN0YW5kYXJkIE5hbWVzLiAgICAgKGxpbmUgIDgzNykKKiBmcmFjdF9jb252ZXJ0OiAgICAgICAgICAgICAgICAgICAgICAgICBDb252ZXJzaW9ucy4gICAgICAgIChsaW5lICAgODMpCiogRlJBQ1RfVFlQRV9TSVpFOiAgICAgICAgICAgICAgICAgICAgICAgVHlwZSBMYXlvdXQuICAgICAgICAobGluZSAgIDY3KQoqIGZyYW1lIGxheW91dDogICAgICAgICAgICAgICAgICAgICAgICAgIEZyYW1lIExheW91dC4gICAgICAgKGxpbmUgICAgNikKKiBGUkFNRV9BRERSX1JUWDogICAgICAgICAgICAgICAgICAgICAgICBGcmFtZSBMYXlvdXQuICAgICAgIChsaW5lICAxMTQpCiogRlJBTUVfR1JPV1NfRE9XTldBUkQ6ICAgICAgICAgICAgICAgICAgRnJhbWUgTGF5b3V0LiAgICAgICAobGluZSAgIDMwKQoqICdGUkFNRV9HUk9XU19ET1dOV0FSRCcgYW5kIHZpcnR1YWwgcmVnaXN0ZXJzOiBSZWdzIGFuZCBNZW1vcnkuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDY5KQoqIEZSQU1FX1BPSU5URVJfQ0ZBX09GRlNFVDogICAgICAgICAgICAgIEZyYW1lIExheW91dC4gICAgICAgKGxpbmUgIDIxMCkKKiBmcmFtZV9wb2ludGVyX25lZWRlZDogICAgICAgICAgICAgICAgICBGdW5jdGlvbiBFbnRyeS4gICAgIChsaW5lICAgMzQpCiogRlJBTUVfUE9JTlRFUl9SRUdOVU06ICAgICAgICAgICAgICAgICAgRnJhbWUgUmVnaXN0ZXJzLiAgICAobGluZSAgIDEzKQoqICdGUkFNRV9QT0lOVEVSX1JFR05VTScgYW5kIHZpcnR1YWwgcmVnaXN0ZXJzOiBSZWdzIGFuZCBNZW1vcnkuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDc0KQoqIEZSQU1FX1BPSU5URVJfUkVRVUlSRUQ6ICAgICAgICAgICAgICAgIEVsaW1pbmF0aW9uLiAgICAgICAgKGxpbmUgICAgOCkKKiBmcmFtZV9wb2ludGVyX3J0eDogICAgICAgICAgICAgICAgICAgICBGcmFtZSBSZWdpc3RlcnMuICAgIChsaW5lICAgODUpCiogZnJhbWVfcmVsYXRlZDogICAgICAgICAgICAgICAgICAgICAgICAgRmxhZ3MuICAgICAgICAgICAgICAobGluZSAgMjI0KQoqICdmcmFtZV9yZWxhdGVkJywgaW4gJ2luc24nLCAnY2FsbF9pbnNuJywgJ2p1bXBfaW5zbicsICdiYXJyaWVyJywgYW5kICdzZXQnOiBGbGFncy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxMTApCiogJ2ZyYW1lX3JlbGF0ZWQnLCBpbiAnbWVtJzogICAgICAgICAgICAgRmxhZ3MuICAgICAgICAgICAgICAobGluZSAgIDg4KQoqICdmcmFtZV9yZWxhdGVkJywgaW4gJ3JlZyc6ICAgICAgICAgICAgIEZsYWdzLiAgICAgICAgICAgICAgKGxpbmUgICA5NykKKiAnZnJhbWVfcmVsYXRlZCcsIGluICdzeW1ib2xfcmVmJzogICAgICBGbGFncy4gICAgICAgICAgICAgIChsaW5lICAxNjgpCiogZnJlcXVlbmN5LCBjb3VudCwgQkJfRlJFUV9CQVNFOiAgICAgICAgUHJvZmlsZSBpbmZvcm1hdGlvbi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgMzApCiogJ2Z0cnVuY00yJyBpbnN0cnVjdGlvbiBwYXR0ZXJuOiAgICAgICAgU3RhbmRhcmQgTmFtZXMuICAgICAobGluZSAgNzk1KQoqIGZ1bmN0aW9uOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9ucy4gICAgICAgICAgKGxpbmUgICAgNikKKiBmdW5jdGlvbiBib2R5OiAgICAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbiBCb2RpZXMuICAgIChsaW5lICAgIDYpCiogZnVuY3Rpb24gY2FsbCBjb252ZW50aW9uczogICAgICAgICAgICAgSW50ZXJmYWNlLiAgICAgICAgICAobGluZSAgICA2KQoqIGZ1bmN0aW9uIGVudHJ5IGFuZCBleGl0OiAgICAgICAgICAgICAgIEZ1bmN0aW9uIEVudHJ5LiAgICAgKGxpbmUgICAgNikKKiBmdW5jdGlvbiBlbnRyeSBwb2ludCwgYWx0ZXJuYXRlIGZ1bmN0aW9uIGVudHJ5IHBvaW50OiBFZGdlcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxNzkpCiogZnVuY3Rpb24tY2FsbCBpbnNuczogICAgICAgICAgICAgICAgICAgQ2FsbHMuICAgICAgICAgICAgICAobGluZSAgICA2KQoqIGZ1bmN0aW9ucywgbGVhZjogICAgICAgICAgICAgICAgICAgICAgIExlYWYgRnVuY3Rpb25zLiAgICAgKGxpbmUgICAgNikKKiBGVU5DVElPTl9BUkc6ICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBBcmd1bWVudHMuIChsaW5lICAgMTApCiogRlVOQ1RJT05fQVJHX0FEVkFOQ0U6ICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgQXJndW1lbnRzLiAobGluZSAgMTc2KQoqIEZVTkNUSU9OX0FSR19CT1VOREFSWTogICAgICAgICAgICAgICAgIFJlZ2lzdGVyIEFyZ3VtZW50cy4gKGxpbmUgIDIyMikKKiBGVU5DVElPTl9BUkdfUEFERElORzogICAgICAgICAgICAgICAgICBSZWdpc3RlciBBcmd1bWVudHMuIChsaW5lICAxODcpCiogRlVOQ1RJT05fQVJHX1JFR05PX1A6ICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgQXJndW1lbnRzLiAobGluZSAgMjI3KQoqIEZVTkNUSU9OX0JPVU5EQVJZOiAgICAgICAgICAgICAgICAgICAgIFN0b3JhZ2UgTGF5b3V0LiAgICAgKGxpbmUgIDE2MikKKiBGVU5DVElPTl9ERUNMOiAgICAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbnMuICAgICAgICAgIChsaW5lICAgIDYpCiogRlVOQ1RJT05fSU5DT01JTkdfQVJHOiAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgQXJndW1lbnRzLiAobGluZSAgIDY3KQoqIEZVTkNUSU9OX01PREU6ICAgICAgICAgICAgICAgICAgICAgICAgIE1pc2MuICAgICAgICAgICAgICAgKGxpbmUgIDM1NCkKKiBGVU5DVElPTl9PVVRHT0lOR19WQUxVRTogICAgICAgICAgICAgICBTY2FsYXIgUmV0dXJuLiAgICAgIChsaW5lICAgNTYpCiogRlVOQ1RJT05fUFJPRklMRVI6ICAgICAgICAgICAgICAgICAgICAgUHJvZmlsaW5nLiAgICAgICAgICAobGluZSAgICA4KQoqIEZVTkNUSU9OX1RZUEU6ICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGVzLiAgICAgICAgICAgICAgKGxpbmUgICAgNikKKiBGVU5DVElPTl9WQUxVRTogICAgICAgICAgICAgICAgICAgICAgICBTY2FsYXIgUmV0dXJuLiAgICAgIChsaW5lICAgNTIpCiogRlVOQ1RJT05fVkFMVUVfUkVHTk9fUDogICAgICAgICAgICAgICAgU2NhbGFyIFJldHVybi4gICAgICAobGluZSAgIDc3KQoqIGZ1bmRhbWVudGFsIHR5cGU6ICAgICAgICAgICAgICAgICAgICAgIFR5cGVzLiAgICAgICAgICAgICAgKGxpbmUgICAgNikKKiAnRycgaW4gY29uc3RyYWludDogICAgICAgICAgICAgICAgICAgICBTaW1wbGUgQ29uc3RyYWludHMuIChsaW5lICAgODUpCiogJ2cnIGluIGNvbnN0cmFpbnQ6ICAgICAgICAgICAgICAgICAgICAgU2ltcGxlIENvbnN0cmFpbnRzLiAobGluZSAgMTA3KQoqIEdDQyBhbmQgcG9ydGFiaWxpdHk6ICAgICAgICAgICAgICAgICAgIFBvcnRhYmlsaXR5LiAgICAgICAgKGxpbmUgICAgNikKKiBHQ0NfRFJJVkVSX0hPU1RfSU5JVElBTElaQVRJT046ICAgICAgICBIb3N0IE1pc2MuICAgICAgICAgIChsaW5lICAgMzYpCiogZ2Nvdl90eXBlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZmlsZSBpbmZvcm1hdGlvbi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgNDEpCiogZ2U6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tcGFyaXNvbnMuICAgICAgICAobGluZSAgIDcyKQoqICdnZScgYW5kIGF0dHJpYnV0ZXM6ICAgICAgICAgICAgICAgICAgIEV4cHJlc3Npb25zLiAgICAgICAgKGxpbmUgICA2NCkKKiBnZW5jb2RlczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSVEwgcGFzc2VzLiAgICAgICAgIChsaW5lICAgMTgpCiogZ2VuZXJhbF9vcGVyYW5kOiAgICAgICAgICAgICAgICAgICAgICAgTWFjaGluZS1JbmRlcGVuZGVudCBQcmVkaWNhdGVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDEwNCkKKiBHRU5FUkFMX1JFR1M6ICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBDbGFzc2VzLiAgIChsaW5lICAgMjIpCiogZ2VuZXJhdGVkIGZpbGVzOiAgICAgICAgICAgICAgICAgICAgICAgRmlsZXMuICAgICAgICAgICAgICAobGluZSAgICA2KQoqIGdlbmVyYXRpbmcgYXNzZW1ibGVyIG91dHB1dDogICAgICAgICAgIE91dHB1dCBTdGF0ZW1lbnQuICAgKGxpbmUgICAgNikKKiBnZW5lcmF0aW5nIGluc25zOiAgICAgICAgICAgICAgICAgICAgICBSVEwgVGVtcGxhdGUuICAgICAgIChsaW5lICAgIDYpCiogR0VORVJJQzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFyc2luZyBwYXNzLiAgICAgICAobGluZSAgICA2KQoqIEdFTkVSSUMgPDE+OiAgICAgICAgICAgICAgICAgICAgICAgICAgIEdpbXBsaWZpY2F0aW9uIHBhc3MuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDEyKQoqIEdFTkVSSUMgPDI+OiAgICAgICAgICAgICAgICAgICAgICAgICAgIEdFTkVSSUMuICAgICAgICAgICAgKGxpbmUgICAgNikKKiBnZW5lcmljIHByZWRpY2F0ZXM6ICAgICAgICAgICAgICAgICAgICBNYWNoaW5lLUluZGVwZW5kZW50IFByZWRpY2F0ZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgICA2KQoqIGdlbmZsYWdzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJUTCBwYXNzZXMuICAgICAgICAgKGxpbmUgICAxOCkKKiBHRU5fRVJSTk9fUlRYOiAgICAgICAgICAgICAgICAgICAgICAgICBMaWJyYXJ5IENhbGxzLiAgICAgIChsaW5lICAgNzApCiogZ2V0X2F0dHI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhwcmVzc2lvbnMuICAgICAgICAobGluZSAgIDgwKQoqIGdldF9hdHRyX2xlbmd0aDogICAgICAgICAgICAgICAgICAgICAgIEluc24gTGVuZ3Rocy4gICAgICAgKGxpbmUgICA0NikKKiBHRVRfQ0xBU1NfTkFSUk9XRVNUX01PREU6ICAgICAgICAgICAgICBNYWNoaW5lIE1vZGVzLiAgICAgIChsaW5lICAzMzIpCiogR0VUX0NPREU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRMIE9iamVjdHMuICAgICAgICAobGluZSAgIDQ3KQoqIGdldF9mcmFtZV9zaXplOiAgICAgICAgICAgICAgICAgICAgICAgIEVsaW1pbmF0aW9uLiAgICAgICAgKGxpbmUgICAzMSkKKiBnZXRfaW5zbnM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnNucy4gICAgICAgICAgICAgIChsaW5lICAgMzQpCiogZ2V0X2xhc3RfaW5zbjogICAgICAgICAgICAgICAgICAgICAgICAgSW5zbnMuICAgICAgICAgICAgICAobGluZSAgIDM0KQoqIEdFVF9NT0RFOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hY2hpbmUgTW9kZXMuICAgICAgKGxpbmUgIDI3OSkKKiBHRVRfTU9ERV9BTElHTk1FTlQ6ICAgICAgICAgICAgICAgICAgICBNYWNoaW5lIE1vZGVzLiAgICAgIChsaW5lICAzMTkpCiogR0VUX01PREVfQklUU0laRTogICAgICAgICAgICAgICAgICAgICAgTWFjaGluZSBNb2Rlcy4gICAgICAobGluZSAgMzAzKQoqIEdFVF9NT0RFX0NMQVNTOiAgICAgICAgICAgICAgICAgICAgICAgIE1hY2hpbmUgTW9kZXMuICAgICAgKGxpbmUgIDI5MykKKiBHRVRfTU9ERV9GQklUOiAgICAgICAgICAgICAgICAgICAgICAgICBNYWNoaW5lIE1vZGVzLiAgICAgIChsaW5lICAzMTApCiogR0VUX01PREVfSUJJVDogICAgICAgICAgICAgICAgICAgICAgICAgTWFjaGluZSBNb2Rlcy4gICAgICAobGluZSAgMzA2KQoqIEdFVF9NT0RFX01BU0s6ICAgICAgICAgICAgICAgICAgICAgICAgIE1hY2hpbmUgTW9kZXMuICAgICAgKGxpbmUgIDMxNCkKKiBHRVRfTU9ERV9OQU1FOiAgICAgICAgICAgICAgICAgICAgICAgICBNYWNoaW5lIE1vZGVzLiAgICAgIChsaW5lICAyOTApCiogR0VUX01PREVfTlVOSVRTOiAgICAgICAgICAgICAgICAgICAgICAgTWFjaGluZSBNb2Rlcy4gICAgICAobGluZSAgMzI4KQoqIEdFVF9NT0RFX1NJWkU6ICAgICAgICAgICAgICAgICAgICAgICAgIE1hY2hpbmUgTW9kZXMuICAgICAgKGxpbmUgIDMwMCkKKiBHRVRfTU9ERV9VTklUX1NJWkU6ICAgICAgICAgICAgICAgICAgICBNYWNoaW5lIE1vZGVzLiAgICAgIChsaW5lICAzMjIpCiogR0VUX01PREVfV0lERVJfTU9ERTogICAgICAgICAgICAgICAgICAgTWFjaGluZSBNb2Rlcy4gICAgICAobGluZSAgMjk2KQoqIEdFVF9SVFhfQ0xBU1M6ICAgICAgICAgICAgICAgICAgICAgICAgIFJUTCBDbGFzc2VzLiAgICAgICAgKGxpbmUgICAgNikKKiBHRVRfUlRYX0ZPUk1BVDogICAgICAgICAgICAgICAgICAgICAgICBSVEwgQ2xhc3Nlcy4gICAgICAgIChsaW5lICAxMzApCiogR0VUX1JUWF9MRU5HVEg6ICAgICAgICAgICAgICAgICAgICAgICAgUlRMIENsYXNzZXMuICAgICAgICAobGluZSAgMTI3KQoqIGdldTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbXBhcmlzb25zLiAgICAgICAgKGxpbmUgICA3MikKKiAnZ2V1JyBhbmQgYXR0cmlidXRlczogICAgICAgICAgICAgICAgICBFeHByZXNzaW9ucy4gICAgICAgIChsaW5lICAgNjQpCiogR0VfRVhQUjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhwcmVzc2lvbiB0cmVlcy4gICAobGluZSAgICA2KQoqIEdHQzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgSW5mb3JtYXRpb24uICAgKGxpbmUgICAgNikKKiBHSU1QTEU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXJzaW5nIHBhc3MuICAgICAgIChsaW5lICAgMTMpCiogR0lNUExFIDwxPjogICAgICAgICAgICAgICAgICAgICAgICAgICAgR2ltcGxpZmljYXRpb24gcGFzcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgIDYpCiogR0lNUExFIDwyPjogICAgICAgICAgICAgICAgICAgICAgICAgICAgR0lNUExFLiAgICAgICAgICAgICAobGluZSAgICA2KQoqIEdJTVBMRSBFeGFtcGxlOiAgICAgICAgICAgICAgICAgICAgICAgIEdJTVBMRSBFeGFtcGxlLiAgICAgKGxpbmUgICAgNikKKiBHSU1QTEUgRXhjZXB0aW9uIEhhbmRsaW5nOiAgICAgICAgICAgICBHSU1QTEUgRXhjZXB0aW9uIEhhbmRsaW5nLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICAgNikKKiBHSU1QTEUgRXhwcmVzc2lvbnM6ICAgICAgICAgICAgICAgICAgICBHSU1QTEUgRXhwcmVzc2lvbnMuIChsaW5lICAgIDYpCiogZ2ltcGxpZmljYXRpb246ICAgICAgICAgICAgICAgICAgICAgICAgUGFyc2luZyBwYXNzLiAgICAgICAobGluZSAgIDEzKQoqIGdpbXBsaWZpY2F0aW9uIDwxPjogICAgICAgICAgICAgICAgICAgIEdpbXBsaWZpY2F0aW9uIHBhc3MuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgICA2KQoqIGdpbXBsaWZpY2F0aW9uIDwyPjogICAgICAgICAgICAgICAgICAgIEludGVyZmFjZXMuICAgICAgICAgKGxpbmUgICAgNikKKiBnaW1wbGlmaWVyOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXJzaW5nIHBhc3MuICAgICAgIChsaW5lICAgMTMpCiogZ2ltcGxpZnlfZXhwcjogICAgICAgICAgICAgICAgICAgICAgICAgR2ltcGxpZmljYXRpb24gcGFzcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgMTgpCiogZ2ltcGxpZnlfZnVuY3Rpb25fdHJlZTogICAgICAgICAgICAgICAgR2ltcGxpZmljYXRpb24gcGFzcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgMTgpCiogR0xPQkFMX0lOSVRfUFJJT1JJVFk6ICAgICAgICAgICAgICAgICAgRnVuY3Rpb24gQmFzaWNzLiAgICAobGluZSAgICA2KQoqIEdMT0JBTF9JTklUX1BSSU9SSVRZIDwxPjogICAgICAgICAgICAgIEZ1bmN0aW9uIEJhc2ljcy4gICAgKGxpbmUgIDE0NykKKiBnbG9iYWxfcmVnczogICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBCYXNpY3MuICAgIChsaW5lICAgNTkpCiogR09GQVNULCBmbG9hdGluZyBwb2ludCBlbXVsYXRpb24gbGlicmFyeTogTGlicmFyeSBDYWxscy4gICAobGluZSAgIDQ0KQoqIGdvZmFzdF9tYXliZV9pbml0X2xpYmZ1bmNzOiAgICAgICAgICAgIExpYnJhcnkgQ2FsbHMuICAgICAgKGxpbmUgICA0NCkKKiBHT19JRl9MRUdJVElNQVRFX0FERFJFU1M6ICAgICAgICAgICAgICBBZGRyZXNzaW5nIE1vZGVzLiAgIChsaW5lICAgNDcpCiogR09fSUZfTU9ERV9ERVBFTkRFTlRfQUREUkVTUzogICAgICAgICAgQWRkcmVzc2luZyBNb2Rlcy4gICAobGluZSAgMTc3KQoqIGdyZWF0ZXIgdGhhbjogICAgICAgICAgICAgICAgICAgICAgICAgIENvbXBhcmlzb25zLiAgICAgICAgKGxpbmUgICA2MCkKKiBncmVhdGVyIHRoYW4gPDE+OiAgICAgICAgICAgICAgICAgICAgICBDb21wYXJpc29ucy4gICAgICAgIChsaW5lICAgNjQpCiogZ3JlYXRlciB0aGFuIDwyPjogICAgICAgICAgICAgICAgICAgICAgQ29tcGFyaXNvbnMuICAgICAgICAobGluZSAgIDcyKQoqIGd0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbXBhcmlzb25zLiAgICAgICAgKGxpbmUgICA2MCkKKiAnZ3QnIGFuZCBhdHRyaWJ1dGVzOiAgICAgICAgICAgICAgICAgICBFeHByZXNzaW9ucy4gICAgICAgIChsaW5lICAgNjQpCiogZ3R1OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tcGFyaXNvbnMuICAgICAgICAobGluZSAgIDY0KQoqICdndHUnIGFuZCBhdHRyaWJ1dGVzOiAgICAgICAgICAgICAgICAgIEV4cHJlc3Npb25zLiAgICAgICAgKGxpbmUgICA2NCkKKiBHVFk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlIEluZm9ybWF0aW9uLiAgIChsaW5lICAgIDYpCiogR1RfRVhQUjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhwcmVzc2lvbiB0cmVlcy4gICAobGluZSAgICA2KQoqICdIJyBpbiBjb25zdHJhaW50OiAgICAgICAgICAgICAgICAgICAgIFNpbXBsZSBDb25zdHJhaW50cy4gKGxpbmUgICA4NSkKKiBIQW1vZGU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWNoaW5lIE1vZGVzLiAgICAgIChsaW5lICAxNDMpCiogSEFORExFUjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb24gQm9kaWVzLiAgICAobGluZSAgICA2KQoqIEhBTkRMRVJfQk9EWTogICAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uIEJvZGllcy4gICAgKGxpbmUgICAgNikKKiBIQU5ETEVSX1BBUk1TOiAgICAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbiBCb2RpZXMuICAgIChsaW5lICAgIDYpCiogSEFORExFX1BSQUdNQV9QQUNLX1BVU0hfUE9QOiAgICAgICAgICAgTWlzYy4gICAgICAgICAgICAgICAobGluZSAgNDY0KQoqIEhBTkRMRV9QUkFHTUFfUEFDS19XSVRIX0VYUEFOU0lPTjogICAgIE1pc2MuICAgICAgICAgICAgICAgKGxpbmUgIDQ3NSkKKiBIQU5ETEVfUFJBR01BX1BVU0hfUE9QX01BQ1JPOiAgICAgICAgICBNaXNjLiAgICAgICAgICAgICAgIChsaW5lICA0ODUpCiogSEFORExFX1NZU1ZfUFJBR01BOiAgICAgICAgICAgICAgICAgICAgTWlzYy4gICAgICAgICAgICAgICAobGluZSAgNDM1KQoqIGhhcmQgcmVnaXN0ZXJzOiAgICAgICAgICAgICAgICAgICAgICAgIFJlZ3MgYW5kIE1lbW9yeS4gICAgKGxpbmUgICAgOSkKKiBIQVJEX0ZSQU1FX1BPSU5URVJfUkVHTlVNOiAgICAgICAgICAgICBGcmFtZSBSZWdpc3RlcnMuICAgIChsaW5lICAgMTkpCiogSEFSRF9SRUdOT19DQUxMRVJfU0FWRV9NT0RFOiAgICAgICAgICAgQ2FsbGVyIFNhdmVzLiAgICAgICAobGluZSAgIDE5KQoqIEhBUkRfUkVHTk9fQ0FMTF9QQVJUX0NMT0JCRVJFRDogICAgICAgIFJlZ2lzdGVyIEJhc2ljcy4gICAgKGxpbmUgICA1MikKKiBIQVJEX1JFR05PX01PREVfT0s6ICAgICAgICAgICAgICAgICAgICBWYWx1ZXMgaW4gUmVnaXN0ZXJzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA1NykKKiBIQVJEX1JFR05PX05SRUdTOiAgICAgICAgICAgICAgICAgICAgICBWYWx1ZXMgaW4gUmVnaXN0ZXJzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICAxMCkKKiBIQVJEX1JFR05PX05SRUdTX0hBU19QQURESU5HOiAgICAgICAgICBWYWx1ZXMgaW4gUmVnaXN0ZXJzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICAyNCkKKiBIQVJEX1JFR05PX05SRUdTX1dJVEhfUEFERElORzogICAgICAgICBWYWx1ZXMgaW4gUmVnaXN0ZXJzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA0MikKKiBIQVJEX1JFR05PX1JFTkFNRV9PSzogICAgICAgICAgICAgICAgICBWYWx1ZXMgaW4gUmVnaXN0ZXJzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDExNykKKiBIQVNfSU5JVF9TRUNUSU9OOiAgICAgICAgICAgICAgICAgICAgICBNYWNyb3MgZm9yIEluaXRpYWxpemF0aW9uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICAxOCkKKiBIQVNfTE9OR19DT05EX0JSQU5DSDogICAgICAgICAgICAgICAgICBNaXNjLiAgICAgICAgICAgICAgIChsaW5lICAgIDgpCiogSEFTX0xPTkdfVU5DT05EX0JSQU5DSDogICAgICAgICAgICAgICAgTWlzYy4gICAgICAgICAgICAgICAobGluZSAgIDE3KQoqIEhBVkVfRE9TX0JBU0VEX0ZJTEVfU1lTVEVNOiAgICAgICAgICAgIEZpbGVzeXN0ZW0uICAgICAgICAgKGxpbmUgICAxMSkKKiBIQVZFX1BPU1RfREVDUkVNRU5UOiAgICAgICAgICAgICAgICAgICBBZGRyZXNzaW5nIE1vZGVzLiAgIChsaW5lICAgMTEpCiogSEFWRV9QT1NUX0lOQ1JFTUVOVDogICAgICAgICAgICAgICAgICAgQWRkcmVzc2luZyBNb2Rlcy4gICAobGluZSAgIDEwKQoqIEhBVkVfUE9TVF9NT0RJRllfRElTUDogICAgICAgICAgICAgICAgIEFkZHJlc3NpbmcgTW9kZXMuICAgKGxpbmUgICAxNykKKiBIQVZFX1BPU1RfTU9ESUZZX1JFRzogICAgICAgICAgICAgICAgICBBZGRyZXNzaW5nIE1vZGVzLiAgIChsaW5lICAgMjMpCiogSEFWRV9QUkVfREVDUkVNRU5UOiAgICAgICAgICAgICAgICAgICAgQWRkcmVzc2luZyBNb2Rlcy4gICAobGluZSAgICA5KQoqIEhBVkVfUFJFX0lOQ1JFTUVOVDogICAgICAgICAgICAgICAgICAgIEFkZHJlc3NpbmcgTW9kZXMuICAgKGxpbmUgICAgOCkKKiBIQVZFX1BSRV9NT0RJRllfRElTUDogICAgICAgICAgICAgICAgICBBZGRyZXNzaW5nIE1vZGVzLiAgIChsaW5lICAgMTYpCiogSEFWRV9QUkVfTU9ESUZZX1JFRzogICAgICAgICAgICAgICAgICAgQWRkcmVzc2luZyBNb2Rlcy4gICAobGluZSAgIDIyKQoqIEhDbW9kZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hY2hpbmUgTW9kZXMuICAgICAgKGxpbmUgIDE5NikKKiBIRm1vZGU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWNoaW5lIE1vZGVzLiAgICAgIChsaW5lICAgNTgpCiogaGlnaDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29uc3RhbnRzLiAgICAgICAgICAobGluZSAgMTI4KQoqIEhJbW9kZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hY2hpbmUgTW9kZXMuICAgICAgKGxpbmUgICAyOSkKKiAnSEltb2RlJywgaW4gJ2luc24nOiAgICAgICAgICAgICAgICAgICBJbnNucy4gICAgICAgICAgICAgIChsaW5lICAyMjkpCiogaG9zdCBjb25maWd1cmF0aW9uOiAgICAgICAgICAgICAgICAgICAgSG9zdCBDb25maWcuICAgICAgICAobGluZSAgICA2KQoqIGhvc3QgZnVuY3Rpb25zOiAgICAgICAgICAgICAgICAgICAgICAgIEhvc3QgQ29tbW9uLiAgICAgICAgKGxpbmUgICAgNikKKiBob3N0IGhvb2tzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBIb3N0IENvbW1vbi4gICAgICAgIChsaW5lICAgIDYpCiogaG9zdCBtYWtlZmlsZSBmcmFnbWVudDogICAgICAgICAgICAgICAgSG9zdCBGcmFnbWVudC4gICAgICAobGluZSAgICA2KQoqIEhPU1RfQklUX0JVQ0tFVDogICAgICAgICAgICAgICAgICAgICAgIEZpbGVzeXN0ZW0uICAgICAgICAgKGxpbmUgICA1MSkKKiBIT1NUX0VYRUNVVEFCTEVfU1VGRklYOiAgICAgICAgICAgICAgICBGaWxlc3lzdGVtLiAgICAgICAgIChsaW5lICAgNDUpCiogSE9TVF9IT09LU19FWFRSQV9TSUdOQUxTOiAgICAgICAgICAgICAgSG9zdCBDb21tb24uICAgICAgICAobGluZSAgIDExKQoqIEhPU1RfSE9PS1NfR1RfUENIX0FMTE9DX0dSQU5VTEFSSVRZOiAgIEhvc3QgQ29tbW9uLiAgICAgICAgKGxpbmUgICA0MykKKiBIT1NUX0hPT0tTX0dUX1BDSF9VU0VfQUREUkVTUzogICAgICAgICBIb3N0IENvbW1vbi4gICAgICAgIChsaW5lICAgMjQpCiogSE9TVF9MQUNLU19JTk9ERV9OVU1CRVJTOiAgICAgICAgICAgICAgRmlsZXN5c3RlbS4gICAgICAgICAobGluZSAgIDg5KQoqIEhPU1RfTE9OR19MT05HX0ZPUk1BVDogICAgICAgICAgICAgICAgIEhvc3QgTWlzYy4gICAgICAgICAgKGxpbmUgICA0MSkKKiBIT1NUX09CSkVDVF9TVUZGSVg6ICAgICAgICAgICAgICAgICAgICBGaWxlc3lzdGVtLiAgICAgICAgIChsaW5lICAgNDApCiogSE9TVF9XSURFX0lOVDogICAgICAgICAgICAgICAgICAgICAgICAgQW5jaG9yZWQgQWRkcmVzc2VzLiAobGluZSAgIDMyKQoqIEhPU1RfV0lERV9JTlQgPDE+OiAgICAgICAgICAgICAgICAgICAgIEFuY2hvcmVkIEFkZHJlc3Nlcy4gKGxpbmUgICAzOCkKKiBIT1RfVEVYVF9TRUNUSU9OX05BTUU6ICAgICAgICAgICAgICAgICBTZWN0aW9ucy4gICAgICAgICAgIChsaW5lICAgNDIpCiogSFFtb2RlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFjaGluZSBNb2Rlcy4gICAgICAobGluZSAgMTA3KQoqICdpJyBpbiBjb25zdHJhaW50OiAgICAgICAgICAgICAgICAgICAgIFNpbXBsZSBDb25zdHJhaW50cy4gKGxpbmUgICA1NykKKiAnSScgaW4gY29uc3RyYWludDogICAgICAgICAgICAgICAgICAgICBTaW1wbGUgQ29uc3RyYWludHMuIChsaW5lICAgNjgpCiogaWRlbnRpZmllcjogICAgICAgICAgICAgICAgICAgICAgICAgICAgSWRlbnRpZmllcnMuICAgICAgICAobGluZSAgICA2KQoqIElERU5USUZJRVJfTEVOR1RIOiAgICAgICAgICAgICAgICAgICAgIElkZW50aWZpZXJzLiAgICAgICAgKGxpbmUgICAyMCkKKiBJREVOVElGSUVSX05PREU6ICAgICAgICAgICAgICAgICAgICAgICBJZGVudGlmaWVycy4gICAgICAgIChsaW5lICAgIDYpCiogSURFTlRJRklFUl9PUE5BTUVfUDogICAgICAgICAgICAgICAgICAgSWRlbnRpZmllcnMuICAgICAgICAobGluZSAgIDI1KQoqIElERU5USUZJRVJfUE9JTlRFUjogICAgICAgICAgICAgICAgICAgIElkZW50aWZpZXJzLiAgICAgICAgKGxpbmUgICAxNSkKKiBJREVOVElGSUVSX1RZUEVOQU1FX1A6ICAgICAgICAgICAgICAgICBJZGVudGlmaWVycy4gICAgICAgIChsaW5lICAgMzEpCiogSUVFRS03NTRSOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVjaW1hbCBmbG9hdCBsaWJyYXJ5IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICAgNikKKiBJRUVFX0ZMT0FUX0ZPUk1BVDogICAgICAgICAgICAgICAgICAgICBTdG9yYWdlIExheW91dC4gICAgIChsaW5lICA0MDgpCiogSUZDVlRfRVhUUkFfRklFTERTOiAgICAgICAgICAgICAgICAgICAgTWlzYy4gICAgICAgICAgICAgICAobGluZSAgNjI1KQoqIElGQ1ZUX0lOSVRfRVhUUkFfRklFTERTOiAgICAgICAgICAgICAgIE1pc2MuICAgICAgICAgICAgICAgKGxpbmUgIDYyMCkKKiBJRkNWVF9NT0RJRllfQ0FOQ0VMOiAgICAgICAgICAgICAgICAgICBNaXNjLiAgICAgICAgICAgICAgIChsaW5lICA2MTQpCiogSUZDVlRfTU9ESUZZX0ZJTkFMOiAgICAgICAgICAgICAgICAgICAgTWlzYy4gICAgICAgICAgICAgICAobGluZSAgNjA4KQoqIElGQ1ZUX01PRElGWV9JTlNOOiAgICAgICAgICAgICAgICAgICAgIE1pc2MuICAgICAgICAgICAgICAgKGxpbmUgIDYwMikKKiBJRkNWVF9NT0RJRllfTVVMVElQTEVfVEVTVFM6ICAgICAgICAgICBNaXNjLiAgICAgICAgICAgICAgIChsaW5lICA1OTQpCiogSUZDVlRfTU9ESUZZX1RFU1RTOiAgICAgICAgICAgICAgICAgICAgTWlzYy4gICAgICAgICAgICAgICAobGluZSAgNTg0KQoqIElGX0NPTkQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uIEJvZGllcy4gICAgKGxpbmUgICAgNikKKiBpZl9tYXJrZWQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVFkgT3B0aW9ucy4gICAgICAgIChsaW5lICAxNjApCiogSUZfU1RNVDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb24gQm9kaWVzLiAgICAobGluZSAgICA2KQoqIGlmX3RoZW5fZWxzZTogICAgICAgICAgICAgICAgICAgICAgICAgIENvbXBhcmlzb25zLiAgICAgICAgKGxpbmUgICA4MCkKKiAnaWZfdGhlbl9lbHNlJyBhbmQgYXR0cmlidXRlczogICAgICAgICBFeHByZXNzaW9ucy4gICAgICAgIChsaW5lICAgMzIpCiogJ2lmX3RoZW5fZWxzZScgdXNhZ2U6ICAgICAgICAgICAgICAgICAgU2lkZSBFZmZlY3RzLiAgICAgICAobGluZSAgIDU2KQoqIElNQUdQQVJUX0VYUFI6ICAgICAgICAgICAgICAgICAgICAgICAgIEV4cHJlc3Npb24gdHJlZXMuICAgKGxpbmUgICAgNikKKiBJbW1lZGlhdGUgVXNlczogICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZW1lbnQgT3BlcmFuZHMuIChsaW5lICAyNzEpCiogaW1tZWRpYXRlX29wZXJhbmQ6ICAgICAgICAgICAgICAgICAgICAgTWFjaGluZS1JbmRlcGVuZGVudCBQcmVkaWNhdGVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICAxMCkKKiBJTU1FRElBVEVfUFJFRklYOiAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdGlvbiBPdXRwdXQuIChsaW5lICAxMjUpCiogaW5jbHVkZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5jbHVkaW5nIFBhdHRlcm5zLiAobGluZSAgICA2KQoqIElOQ0xVREVfREVGQVVMVFM6ICAgICAgICAgICAgICAgICAgICAgIERyaXZlci4gICAgICAgICAgICAgKGxpbmUgIDQyOCkKKiBpbmNsdXNpdmUtb3IsIGJpdHdpc2U6ICAgICAgICAgICAgICAgICBBcml0aG1ldGljLiAgICAgICAgIChsaW5lICAxNTkpCiogSU5DT01JTkdfRlJBTUVfU1BfT0ZGU0VUOiAgICAgICAgICAgICAgRnJhbWUgTGF5b3V0LiAgICAgICAobGluZSAgMTgxKQoqIElOQ09NSU5HX1JFR05POiAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIEJhc2ljcy4gICAgKGxpbmUgICA5MCkKKiBJTkNPTUlOR19SRVRVUk5fQUREUl9SVFg6ICAgICAgICAgICAgICBGcmFtZSBMYXlvdXQuICAgICAgIChsaW5lICAxMzcpCiogSU5ERVhfUkVHX0NMQVNTOiAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgQ2xhc3Nlcy4gICAobGluZSAgMTMxKQoqICdpbmRpcmVjdF9qdW1wJyBpbnN0cnVjdGlvbiBwYXR0ZXJuOiAgIFN0YW5kYXJkIE5hbWVzLiAgICAgKGxpbmUgMTA2NCkKKiBpbmRpcmVjdF9vcGVyYW5kOiAgICAgICAgICAgICAgICAgICAgICBNYWNoaW5lLUluZGVwZW5kZW50IFByZWRpY2F0ZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDcwKQoqIElORElSRUNUX1JFRjogICAgICAgICAgICAgICAgICAgICAgICAgIEV4cHJlc3Npb24gdHJlZXMuICAgKGxpbmUgICAgNikKKiBpbml0aWFsaXphdGlvbiByb3V0aW5lczogICAgICAgICAgICAgICBJbml0aWFsaXphdGlvbi4gICAgIChsaW5lICAgIDYpCiogSU5JVElBTElaRV9UUkFNUE9MSU5FOiAgICAgICAgICAgICAgICAgVHJhbXBvbGluZXMuICAgICAgICAobGluZSAgIDU0KQoqIElOSVRJQUxfRUxJTUlOQVRJT05fT0ZGU0VUOiAgICAgICAgICAgIEVsaW1pbmF0aW9uLiAgICAgICAgKGxpbmUgICA3OCkKKiBJTklUSUFMX0ZSQU1FX0FERFJFU1NfUlRYOiAgICAgICAgICAgICBGcmFtZSBMYXlvdXQuICAgICAgIChsaW5lICAgODEpCiogSU5JVElBTF9GUkFNRV9QT0lOVEVSX09GRlNFVDogICAgICAgICAgRWxpbWluYXRpb24uICAgICAgICAobGluZSAgIDMxKQoqIElOSVRfQVJSQVlfU0VDVElPTl9BU01fT1A6ICAgICAgICAgICAgIFNlY3Rpb25zLiAgICAgICAgICAgKGxpbmUgICA5NykKKiBJTklUX0NVTVVMQVRJVkVfQVJHUzogICAgICAgICAgICAgICAgICBSZWdpc3RlciBBcmd1bWVudHMuIChsaW5lICAxMzkpCiogSU5JVF9DVU1VTEFUSVZFX0lOQ09NSU5HX0FSR1M6ICAgICAgICAgUmVnaXN0ZXIgQXJndW1lbnRzLiAobGluZSAgMTY3KQoqIElOSVRfQ1VNVUxBVElWRV9MSUJDQUxMX0FSR1M6ICAgICAgICAgIFJlZ2lzdGVyIEFyZ3VtZW50cy4gKGxpbmUgIDE2MSkKKiBJTklUX0VOVklST05NRU5UOiAgICAgICAgICAgICAgICAgICAgICBEcml2ZXIuICAgICAgICAgICAgIChsaW5lICAzNjgpCiogSU5JVF9FWFBBTkRFUlM6ICAgICAgICAgICAgICAgICAgICAgICAgUGVyLUZ1bmN0aW9uIERhdGEuICAobGluZSAgIDM2KQoqIElOSVRfRVhQUjogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4cHJlc3Npb24gdHJlZXMuICAgKGxpbmUgICAgNikKKiBpbml0X21hY2hpbmVfc3RhdHVzOiAgICAgICAgICAgICAgICAgICBQZXItRnVuY3Rpb24gRGF0YS4gIChsaW5lICAgNDIpCiogaW5pdF9vbmVfbGliZnVuYzogICAgICAgICAgICAgICAgICAgICAgTGlicmFyeSBDYWxscy4gICAgICAobGluZSAgIDE1KQoqIElOSVRfU0VDVElPTl9BU01fT1A6ICAgICAgICAgICAgICAgICAgIFNlY3Rpb25zLiAgICAgICAgICAgKGxpbmUgICA4MSkKKiBJTklUX1NFQ1RJT05fQVNNX09QIDwxPjogICAgICAgICAgICAgICBNYWNyb3MgZm9yIEluaXRpYWxpemF0aW9uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICAgOSkKKiBpbmxpbmluZzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYXJnZXQgQXR0cmlidXRlcy4gIChsaW5lICAgODYpCiogaW5zZXJ0X2luc25fb25fZWRnZTogICAgICAgICAgICAgICAgICAgTWFpbnRhaW5pbmcgdGhlIENGRy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxMTYpCiogaW5zbjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zbnMuICAgICAgICAgICAgICAobGluZSAgIDYzKQoqICdpbnNuJyBhbmQgJy9mJzogICAgICAgICAgICAgICAgICAgICAgIEZsYWdzLiAgICAgICAgICAgICAgKGxpbmUgIDExMCkKKiAnaW5zbicgYW5kICcvaic6ICAgICAgICAgICAgICAgICAgICAgICBGbGFncy4gICAgICAgICAgICAgIChsaW5lICAxNjApCiogJ2luc24nIGFuZCAnL3MnOiAgICAgICAgICAgICAgICAgICAgICAgRmxhZ3MuICAgICAgICAgICAgICAobGluZSAgIDM0KQoqICdpbnNuJyBhbmQgJy9zJyA8MT46ICAgICAgICAgICAgICAgICAgIEZsYWdzLiAgICAgICAgICAgICAgKGxpbmUgIDE1MSkKKiAnaW5zbicgYW5kICcvdSc6ICAgICAgICAgICAgICAgICAgICAgICBGbGFncy4gICAgICAgICAgICAgIChsaW5lICAgMjQpCiogJ2luc24nIGFuZCAnL3YnOiAgICAgICAgICAgICAgICAgICAgICAgRmxhZ3MuICAgICAgICAgICAgICAobGluZSAgIDI5KQoqIGluc24gYXR0cmlidXRlczogICAgICAgICAgICAgICAgICAgICAgIEluc24gQXR0cmlidXRlcy4gICAgKGxpbmUgICAgNikKKiBpbnNuIGNhbm9uaWNhbGl6YXRpb246ICAgICAgICAgICAgICAgICBJbnNuIENhbm9uaWNhbGl6YXRpb25zLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICAgNikKKiBpbnNuIGluY2x1ZGVzOiAgICAgICAgICAgICAgICAgICAgICAgICBJbmNsdWRpbmcgUGF0dGVybnMuIChsaW5lICAgIDYpCiogaW5zbiBsZW5ndGhzLCBjb21wdXRpbmc6ICAgICAgICAgICAgICAgSW5zbiBMZW5ndGhzLiAgICAgICAobGluZSAgICA2KQoqIGluc24gc3BsaXR0aW5nOiAgICAgICAgICAgICAgICAgICAgICAgIEluc24gU3BsaXR0aW5nLiAgICAgKGxpbmUgICAgNikKKiBpbnNuLWF0dHIuaDogICAgICAgICAgICAgICAgICAgICAgICAgICBEZWZpbmluZyBBdHRyaWJ1dGVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICAyNCkKKiBpbnNuczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnNucy4gICAgICAgICAgICAgIChsaW5lICAgIDYpCiogaW5zbnMsIGdlbmVyYXRpbmc6ICAgICAgICAgICAgICAgICAgICAgUlRMIFRlbXBsYXRlLiAgICAgICAobGluZSAgICA2KQoqIGluc25zLCByZWNvZ25pemluZzogICAgICAgICAgICAgICAgICAgIFJUTCBUZW1wbGF0ZS4gICAgICAgKGxpbmUgICAgNikKKiBJTlNOX0FOTlVMTEVEX0JSQU5DSF9QOiAgICAgICAgICAgICAgICBGbGFncy4gICAgICAgICAgICAgIChsaW5lICAgMjQpCiogSU5TTl9DT0RFOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zbnMuICAgICAgICAgICAgICAobGluZSAgMjU1KQoqIElOU05fREVMRVRFRF9QOiAgICAgICAgICAgICAgICAgICAgICAgIEZsYWdzLiAgICAgICAgICAgICAgKGxpbmUgICAyOSkKKiBJTlNOX0ZST01fVEFSR0VUX1A6ICAgICAgICAgICAgICAgICAgICBGbGFncy4gICAgICAgICAgICAgIChsaW5lICAgMzQpCiogaW5zbl9saXN0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zbnMuICAgICAgICAgICAgICAobGluZSAgNTQ0KQoqIElOU05fUkVGRVJFTkNFU19BUkVfREVMQVlFRDogICAgICAgICAgIE1pc2MuICAgICAgICAgICAgICAgKGxpbmUgIDUyMikKKiBJTlNOX1NFVFNfQVJFX0RFTEFZRUQ6ICAgICAgICAgICAgICAgICBNaXNjLiAgICAgICAgICAgICAgIChsaW5lICA1MTEpCiogSU5TTl9VSUQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zbnMuICAgICAgICAgICAgICAobGluZSAgIDIzKQoqIGluc3RydWN0aW9uIGF0dHJpYnV0ZXM6ICAgICAgICAgICAgICAgIEluc24gQXR0cmlidXRlcy4gICAgKGxpbmUgICAgNikKKiBpbnN0cnVjdGlvbiBsYXRlbmN5IHRpbWU6ICAgICAgICAgICAgICBQcm9jZXNzb3IgcGlwZWxpbmUgZGVzY3JpcHRpb24uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgICA2KQoqIGluc3RydWN0aW9uIGxhdGVuY3kgdGltZSA8MT46ICAgICAgICAgIFByb2Nlc3NvciBwaXBlbGluZSBkZXNjcmlwdGlvbi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxMDUpCiogaW5zdHJ1Y3Rpb24gbGF0ZW5jeSB0aW1lIDwyPjogICAgICAgICAgUHJvY2Vzc29yIHBpcGVsaW5lIGRlc2NyaXB0aW9uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDE5NikKKiBpbnN0cnVjdGlvbiBwYXR0ZXJuczogICAgICAgICAgICAgICAgICBQYXR0ZXJucy4gICAgICAgICAgIChsaW5lICAgIDYpCiogaW5zdHJ1Y3Rpb24gc3BsaXR0aW5nOiAgICAgICAgICAgICAgICAgSW5zbiBTcGxpdHRpbmcuICAgICAobGluZSAgICA2KQoqICdpbnN2JyBpbnN0cnVjdGlvbiBwYXR0ZXJuOiAgICAgICAgICAgIFN0YW5kYXJkIE5hbWVzLiAgICAgKGxpbmUgIDg2NykKKiBpbnQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSdW4tdGltZSBUYXJnZXQuICAgIChsaW5lICAgNTUpCiogSU5URUdFUl9DU1Q6ICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhwcmVzc2lvbiB0cmVlcy4gICAobGluZSAgICA2KQoqIElOVEVHRVJfVFlQRTogICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGVzLiAgICAgICAgICAgICAgKGxpbmUgICAgNikKKiBJbnRlcmRlcGVuZGVuY2Ugb2YgUGF0dGVybnM6ICAgICAgICAgICBEZXBlbmRlbnQgUGF0dGVybnMuIChsaW5lICAgIDYpCiogaW50ZXJmYWNpbmcgdG8gR0NDIG91dHB1dDogICAgICAgICAgICAgSW50ZXJmYWNlLiAgICAgICAgICAobGluZSAgICA2KQoqIGludGVybG9jayBkZWxheXM6ICAgICAgICAgICAgICAgICAgICAgIFByb2Nlc3NvciBwaXBlbGluZSBkZXNjcmlwdGlvbi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgIDYpCiogaW50ZXJtZWRpYXRlIHJlcHJlc2VudGF0aW9uIGxvd2VyaW5nOiAgUGFyc2luZyBwYXNzLiAgICAgICAobGluZSAgIDEzKQoqIElOVE1BWF9UWVBFOiAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgTGF5b3V0LiAgICAgICAgKGxpbmUgIDIxMikKKiBpbnRyb2R1Y3Rpb246ICAgICAgICAgICAgICAgICAgICAgICAgICBUb3AuICAgICAgICAgICAgICAgIChsaW5lICAgIDYpCiogSU5UX1RZUEVfU0laRTogICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSBMYXlvdXQuICAgICAgICAobGluZSAgIDExKQoqIElOVk9LRV9fbWFpbjogICAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvcyBmb3IgSW5pdGlhbGl6YXRpb24uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDUwKQoqIGluX3N0cnVjdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsYWdzLiAgICAgICAgICAgICAgKGxpbmUgIDI0MCkKKiAnaW5fc3RydWN0JywgaW4gJ2NvZGVfbGFiZWwnIGFuZCAnbm90ZSc6IEZsYWdzLiAgICAgICAgICAgIChsaW5lICAgNDQpCiogJ2luX3N0cnVjdCcsIGluICdpbnNuJyBhbmQgJ2p1bXBfaW5zbicgYW5kICdjYWxsX2luc24nOiBGbGFncy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgMzQpCiogJ2luX3N0cnVjdCcsIGluICdpbnNuJywgJ2p1bXBfaW5zbicgYW5kICdjYWxsX2luc24nOiBGbGFncy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxNTEpCiogJ2luX3N0cnVjdCcsIGluICdtZW0nOiAgICAgICAgICAgICAgICAgRmxhZ3MuICAgICAgICAgICAgICAobGluZSAgIDU1KQoqICdpbl9zdHJ1Y3QnLCBpbiAnc3VicmVnJzogICAgICAgICAgICAgIEZsYWdzLiAgICAgICAgICAgICAgKGxpbmUgIDE5MCkKKiBpb3I6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcml0aG1ldGljLiAgICAgICAgIChsaW5lICAxNTkpCiogJ2lvcicgYW5kIGF0dHJpYnV0ZXM6ICAgICAgICAgICAgICAgICAgRXhwcmVzc2lvbnMuICAgICAgICAobGluZSAgIDUwKQoqICdpb3InLCBjYW5vbmljYWxpemF0aW9uIG9mOiAgICAgICAgICAgIEluc24gQ2Fub25pY2FsaXphdGlvbnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDU2KQoqICdpb3JNMycgaW5zdHJ1Y3Rpb24gcGF0dGVybjogICAgICAgICAgIFN0YW5kYXJkIE5hbWVzLiAgICAgKGxpbmUgIDIyMCkKKiBJU19BU01fTE9HSUNBTF9MSU5FX1NFUEFSQVRPUjogICAgICAgICBEYXRhIE91dHB1dC4gICAgICAgIChsaW5lICAxMTgpCiogaXRlcmF0b3JzIGluICcubWQnIGZpbGVzOiAgICAgICAgICAgICAgSXRlcmF0b3JzLiAgICAgICAgICAobGluZSAgICA2KQoqIElWIGFuYWx5c2lzIG9uIEdJTVBMRTogICAgICAgICAgICAgICAgIFNjYWxhciBldm9sdXRpb25zLiAgKGxpbmUgICAgNikKKiBJViBhbmFseXNpcyBvbiBSVEw6ICAgICAgICAgICAgICAgICAgICBsb29wLWl2LiAgICAgICAgICAgIChsaW5lICAgIDYpCioganVtcDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxhZ3MuICAgICAgICAgICAgICAobGluZSAgMjg5KQoqICdqdW1wJyBpbnN0cnVjdGlvbiBwYXR0ZXJuOiAgICAgICAgICAgIFN0YW5kYXJkIE5hbWVzLiAgICAgKGxpbmUgIDk1NikKKiBqdW1wIGluc3RydWN0aW9uIHBhdHRlcm5zOiAgICAgICAgICAgICBKdW1wIFBhdHRlcm5zLiAgICAgIChsaW5lICAgIDYpCioganVtcCBpbnN0cnVjdGlvbnMgYW5kICdzZXQnOiAgICAgICAgICAgU2lkZSBFZmZlY3RzLiAgICAgICAobGluZSAgIDU2KQoqICdqdW1wJywgaW4gJ2NhbGxfaW5zbic6ICAgICAgICAgICAgICAgIEZsYWdzLiAgICAgICAgICAgICAgKGxpbmUgIDE2NCkKKiAnanVtcCcsIGluICdpbnNuJzogICAgICAgICAgICAgICAgICAgICBGbGFncy4gICAgICAgICAgICAgIChsaW5lICAxNjApCiogJ2p1bXAnLCBpbiAnbWVtJzogICAgICAgICAgICAgICAgICAgICAgRmxhZ3MuICAgICAgICAgICAgICAobGluZSAgIDY0KQoqIEp1bXBzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEp1bXBzLiAgICAgICAgICAgICAgKGxpbmUgICAgNikKKiBKVU1QX0FMSUdOOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbGlnbm1lbnQgT3V0cHV0LiAgIChsaW5lICAgIDgpCioganVtcF9pbnNuOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zbnMuICAgICAgICAgICAgICAobGluZSAgIDczKQoqICdqdW1wX2luc24nIGFuZCAnL2YnOiAgICAgICAgICAgICAgICAgIEZsYWdzLiAgICAgICAgICAgICAgKGxpbmUgIDExMCkKKiAnanVtcF9pbnNuJyBhbmQgJy9zJzogICAgICAgICAgICAgICAgICBGbGFncy4gICAgICAgICAgICAgIChsaW5lICAgMzQpCiogJ2p1bXBfaW5zbicgYW5kICcvcycgPDE+OiAgICAgICAgICAgICAgRmxhZ3MuICAgICAgICAgICAgICAobGluZSAgMTUxKQoqICdqdW1wX2luc24nIGFuZCAnL3UnOiAgICAgICAgICAgICAgICAgIEZsYWdzLiAgICAgICAgICAgICAgKGxpbmUgICAyNCkKKiAnanVtcF9pbnNuJyBhbmQgJy92JzogICAgICAgICAgICAgICAgICBGbGFncy4gICAgICAgICAgICAgIChsaW5lICAgMjkpCiogSlVNUF9MQUJFTDogICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zbnMuICAgICAgICAgICAgICAobGluZSAgIDgwKQoqIEpVTVBfVEFCTEVTX0lOX1RFWFRfU0VDVElPTjogICAgICAgICAgIFNlY3Rpb25zLiAgICAgICAgICAgKGxpbmUgIDE0MSkKKiBMQUJFTF9BTElHTjogICAgICAgICAgICAgICAgICAgICAgICAgICBBbGlnbm1lbnQgT3V0cHV0LiAgIChsaW5lICAgNTEpCiogTEFCRUxfQUxJR05fQUZURVJfQkFSUklFUjogICAgICAgICAgICAgQWxpZ25tZW50IE91dHB1dC4gICAobGluZSAgIDIxKQoqIExBQkVMX0FMSUdOX0FGVEVSX0JBUlJJRVJfTUFYX1NLSVA6ICAgIEFsaWdubWVudCBPdXRwdXQuICAgKGxpbmUgICAyOSkKKiBMQUJFTF9BTElHTl9NQVhfU0tJUDogICAgICAgICAgICAgICAgICBBbGlnbm1lbnQgT3V0cHV0LiAgIChsaW5lICAgNjEpCiogTEFCRUxfQUxURVJOQVRFX05BTUU6ICAgICAgICAgICAgICAgICAgRWRnZXMuICAgICAgICAgICAgICAobGluZSAgMTc5KQoqIExBQkVMX0FMVF9FTlRSWV9QOiAgICAgICAgICAgICAgICAgICAgIEluc25zLiAgICAgICAgICAgICAgKGxpbmUgIDE0MCkKKiBMQUJFTF9ERUNMOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWNsYXJhdGlvbnMuICAgICAgIChsaW5lICAgIDYpCiogTEFCRUxfS0lORDogICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zbnMuICAgICAgICAgICAgICAobGluZSAgMTQwKQoqIExBQkVMX05VU0VTOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc25zLiAgICAgICAgICAgICAgKGxpbmUgIDEzNikKKiBMQUJFTF9QUkVTRVJWRV9QOiAgICAgICAgICAgICAgICAgICAgICBGbGFncy4gICAgICAgICAgICAgIChsaW5lICAgNDQpCiogbGFiZWxfcmVmOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29uc3RhbnRzLiAgICAgICAgICAobGluZSAgMTA1KQoqICdsYWJlbF9yZWYnIGFuZCAnL3YnOiAgICAgICAgICAgICAgICAgIEZsYWdzLiAgICAgICAgICAgICAgKGxpbmUgICA1MCkKKiAnbGFiZWxfcmVmJywgUlRMIHNoYXJpbmc6ICAgICAgICAgICAgICBTaGFyaW5nLiAgICAgICAgICAgIChsaW5lICAgMzUpCiogTEFCRUxfUkVGX05PTkxPQ0FMX1A6ICAgICAgICAgICAgICAgICAgRmxhZ3MuICAgICAgICAgICAgICAobGluZSAgIDUwKQoqIGxhbmd1YWdlLWluZGVwZW5kZW50IGludGVybWVkaWF0ZSByZXByZXNlbnRhdGlvbjogUGFyc2luZyBwYXNzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICAxMykKKiBsYW5nX2hvb2tzLmdpbXBsaWZ5X2V4cHI6ICAgICAgICAgICAgICBHaW1wbGlmaWNhdGlvbiBwYXNzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICAxOCkKKiBsYW5nX2hvb2tzLnBhcnNlX2ZpbGU6ICAgICAgICAgICAgICAgICBQYXJzaW5nIHBhc3MuICAgICAgIChsaW5lICAgIDYpCiogbGFyZ2UgcmV0dXJuIHZhbHVlczogICAgICAgICAgICAgICAgICAgQWdncmVnYXRlIFJldHVybi4gICAobGluZSAgICA2KQoqIExBUkdFU1RfRVhQT05FTlRfSVNfTk9STUFMOiAgICAgICAgICAgIFN0b3JhZ2UgTGF5b3V0LiAgICAgKGxpbmUgIDQ4NykKKiBMQVNUX1NUQUNLX1JFRzogICAgICAgICAgICAgICAgICAgICAgICBTdGFjayBSZWdpc3RlcnMuICAgIChsaW5lICAgMjYpCiogTEFTVF9WSVJUVUFMX1JFR0lTVEVSOiAgICAgICAgICAgICAgICAgUmVncyBhbmQgTWVtb3J5LiAgICAobGluZSAgIDUxKQoqICdsY2VpbE1OMic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YW5kYXJkIE5hbWVzLiAgICAgKGxpbmUgIDU4NikKKiBMQ1NTQTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMQ1NTQS4gICAgICAgICAgICAgIChsaW5lICAgIDYpCiogTEREX1NVRkZJWDogICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9zIGZvciBJbml0aWFsaXphdGlvbi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxMTUpCiogTERfRklOSV9TV0lUQ0g6ICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9zIGZvciBJbml0aWFsaXphdGlvbi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgMjgpCiogTERfSU5JVF9TV0lUQ0g6ICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9zIGZvciBJbml0aWFsaXphdGlvbi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgMjQpCiogbGU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tcGFyaXNvbnMuICAgICAgICAobGluZSAgIDc2KQoqICdsZScgYW5kIGF0dHJpYnV0ZXM6ICAgICAgICAgICAgICAgICAgIEV4cHJlc3Npb25zLiAgICAgICAgKGxpbmUgICA2NCkKKiBsZWFmIGZ1bmN0aW9uczogICAgICAgICAgICAgICAgICAgICAgICBMZWFmIEZ1bmN0aW9ucy4gICAgIChsaW5lICAgIDYpCiogbGVhZl9mdW5jdGlvbl9wOiAgICAgICAgICAgICAgICAgICAgICAgU3RhbmRhcmQgTmFtZXMuICAgICAobGluZSAxMDI2KQoqIExFQUZfUkVHSVNURVJTOiAgICAgICAgICAgICAgICAgICAgICAgIExlYWYgRnVuY3Rpb25zLiAgICAgKGxpbmUgICAyMykKKiBMRUFGX1JFR19SRU1BUDogICAgICAgICAgICAgICAgICAgICAgICBMZWFmIEZ1bmN0aW9ucy4gICAgIChsaW5lICAgMzcpCiogbGVmdCByb3RhdGU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJpdGhtZXRpYy4gICAgICAgICAobGluZSAgMTkxKQoqIGxlZnQgc2hpZnQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyaXRobWV0aWMuICAgICAgICAgKGxpbmUgIDE2OSkKKiBMRUdJVElNQVRFX0NPTlNUQU5UX1A6ICAgICAgICAgICAgICAgICBBZGRyZXNzaW5nIE1vZGVzLiAgIChsaW5lICAxOTIpCiogTEVHSVRJTUFURV9QSUNfT1BFUkFORF9QOiAgICAgICAgICAgICAgUElDLiAgICAgICAgICAgICAgICAobGluZSAgIDMwKQoqIExFR0lUSU1JWkVfQUREUkVTUzogICAgICAgICAgICAgICAgICAgIEFkZHJlc3NpbmcgTW9kZXMuICAgKGxpbmUgIDEwOSkKKiBMRUdJVElNSVpFX1JFTE9BRF9BRERSRVNTOiAgICAgICAgICAgICBBZGRyZXNzaW5nIE1vZGVzLiAgIChsaW5lICAxMzEpCiogbGVuZ3RoOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1RZIE9wdGlvbnMuICAgICAgICAobGluZSAgIDQ3KQoqIGxlc3MgdGhhbjogICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbXBhcmlzb25zLiAgICAgICAgKGxpbmUgICA2OCkKKiBsZXNzIHRoYW4gb3IgZXF1YWw6ICAgICAgICAgICAgICAgICAgICBDb21wYXJpc29ucy4gICAgICAgIChsaW5lICAgNzYpCiogbGV1OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tcGFyaXNvbnMuICAgICAgICAobGluZSAgIDc2KQoqICdsZXUnIGFuZCBhdHRyaWJ1dGVzOiAgICAgICAgICAgICAgICAgIEV4cHJlc3Npb25zLiAgICAgICAgKGxpbmUgICA2NCkKKiBMRV9FWFBSOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeHByZXNzaW9uIHRyZWVzLiAgIChsaW5lICAgIDYpCiogJ2xmbG9vck1OMic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhbmRhcmQgTmFtZXMuICAgICAobGluZSAgNTgxKQoqIExJQjJGVU5DU19FWFRSQTogICAgICAgICAgICAgICAgICAgICAgIFRhcmdldCBGcmFnbWVudC4gICAgKGxpbmUgICAxMSkKKiBMSUJDQUxMX1ZBTFVFOiAgICAgICAgICAgICAgICAgICAgICAgICBTY2FsYXIgUmV0dXJuLiAgICAgIChsaW5lICAgNjApCiogJ2xpYmdjYy5hJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlicmFyeSBDYWxscy4gICAgICAobGluZSAgICA2KQoqIExJQkdDQzJfQ0ZMQUdTOiAgICAgICAgICAgICAgICAgICAgICAgIFRhcmdldCBGcmFnbWVudC4gICAgKGxpbmUgICAgOCkKKiBMSUJHQ0MyX0hBU19ERl9NT0RFOiAgICAgICAgICAgICAgICAgICBUeXBlIExheW91dC4gICAgICAgIChsaW5lICAxMDgpCiogTElCR0NDMl9IQVNfVEZfTU9ERTogICAgICAgICAgICAgICAgICAgVHlwZSBMYXlvdXQuICAgICAgICAobGluZSAgMTIyKQoqIExJQkdDQzJfSEFTX1hGX01PREU6ICAgICAgICAgICAgICAgICAgIFR5cGUgTGF5b3V0LiAgICAgICAgKGxpbmUgIDExNikKKiBMSUJHQ0MyX0xPTkdfRE9VQkxFX1RZUEVfU0laRTogICAgICAgICBUeXBlIExheW91dC4gICAgICAgIChsaW5lICAxMDIpCiogTElCR0NDMl9VTldJTkRfQVRUUklCVVRFOiAgICAgICAgICAgICAgTWlzYy4gICAgICAgICAgICAgICAobGluZSAgOTI1KQoqIExJQkdDQzJfV09SRFNfQklHX0VORElBTjogICAgICAgICAgICAgIFN0b3JhZ2UgTGF5b3V0LiAgICAgKGxpbmUgICAzNSkKKiBMSUJHQ0NfU1BFQzogICAgICAgICAgICAgICAgICAgICAgICAgICBEcml2ZXIuICAgICAgICAgICAgIChsaW5lICAxNzcpCiogbGlicmFyeSBzdWJyb3V0aW5lIG5hbWVzOiAgICAgICAgICAgICAgTGlicmFyeSBDYWxscy4gICAgICAobGluZSAgICA2KQoqIExJQlJBUllfUEFUSF9FTlY6ICAgICAgICAgICAgICAgICAgICAgIE1pc2MuICAgICAgICAgICAgICAgKGxpbmUgIDU2MikKKiBMSUJfU1BFQzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEcml2ZXIuICAgICAgICAgICAgIChsaW5lICAxNjkpCiogTElNSVRfUkVMT0FEX0NMQVNTOiAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgQ2xhc3Nlcy4gICAobGluZSAgMjM1KQoqIExpbmVhciBsb29wIHRyYW5zZm9ybWF0aW9ucyBmcmFtZXdvcms6IExhbWJkYS4gICAgICAgICAgICAgKGxpbmUgICAgNikKKiBsaW5rYWdlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbiBCYXNpY3MuICAgIChsaW5lICAgIDYpCiogTElOS19DT01NQU5EX1NQRUM6ICAgICAgICAgICAgICAgICAgICAgRHJpdmVyLiAgICAgICAgICAgICAobGluZSAgMjk4KQoqIExJTktfRUhfU1BFQzogICAgICAgICAgICAgICAgICAgICAgICAgIERyaXZlci4gICAgICAgICAgICAgKGxpbmUgIDIwNCkKKiBMSU5LX0VMSU1JTkFURV9EVVBMSUNBVEVfTERJUkVDVE9SSUVTOiBEcml2ZXIuICAgICAgICAgICAgIChsaW5lICAzMDgpCiogTElOS19HQ0NfQ19TRVFVRU5DRV9TUEVDOiAgICAgICAgICAgICAgRHJpdmVyLiAgICAgICAgICAgICAobGluZSAgMjk0KQoqIExJTktfTElCR0NDX1NQRUNJQUxfMTogICAgICAgICAgICAgICAgIERyaXZlci4gICAgICAgICAgICAgKGxpbmUgIDI4OSkKKiBMSU5LX1NQRUM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEcml2ZXIuICAgICAgICAgICAgIChsaW5lICAxNjIpCiogbGlzdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGFpbmVycy4gICAgICAgICAobGluZSAgICA2KQoqIExpdmVuZXNzIHJlcHJlc2VudGF0aW9uOiAgICAgICAgICAgICAgIExpdmVuZXNzIGluZm9ybWF0aW9uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICAgNikKKiBsb2FkIGFkZHJlc3MgaW5zdHJ1Y3Rpb246ICAgICAgICAgICAgICBTaW1wbGUgQ29uc3RyYWludHMuIChsaW5lICAxNTEpCiogTE9BRF9FWFRFTkRfT1A6ICAgICAgICAgICAgICAgICAgICAgICAgTWlzYy4gICAgICAgICAgICAgICAobGluZSAgIDY3KQoqICdsb2FkX211bHRpcGxlJyBpbnN0cnVjdGlvbiBwYXR0ZXJuOiAgIFN0YW5kYXJkIE5hbWVzLiAgICAgKGxpbmUgIDEzNikKKiBMT0NBTF9BTElHTk1FTlQ6ICAgICAgICAgICAgICAgICAgICAgICBTdG9yYWdlIExheW91dC4gICAgIChsaW5lICAyMzApCiogTE9DQUxfQ0xBU1NfUDogICAgICAgICAgICAgICAgICAgICAgICAgQ2xhc3Nlcy4gICAgICAgICAgICAobGluZSAgIDY4KQoqIExPQ0FMX0lOQ0xVREVfRElSOiAgICAgICAgICAgICAgICAgICAgIERyaXZlci4gICAgICAgICAgICAgKGxpbmUgIDM3NSkKKiBMT0NBTF9MQUJFTF9QUkVGSVg6ICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdGlvbiBPdXRwdXQuIChsaW5lICAxMjMpCiogTE9DQUxfUkVHTk86ICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgQmFzaWNzLiAgICAobGluZSAgMTA0KQoqIExvZ2ljYWwgT3BlcmF0b3JzOiAgICAgICAgICAgICAgICAgICAgIExvZ2ljYWwgT3BlcmF0b3JzLiAgKGxpbmUgICAgNikKKiBsb2dpY2FsLWFuZCwgYml0d2lzZTogICAgICAgICAgICAgICAgICBBcml0aG1ldGljLiAgICAgICAgIChsaW5lICAxNTQpCiogJ2xvZ00yJyBpbnN0cnVjdGlvbiBwYXR0ZXJuOiAgICAgICAgICAgU3RhbmRhcmQgTmFtZXMuICAgICAobGluZSAgNDk0KQoqIExPR19MSU5LUzogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc25zLiAgICAgICAgICAgICAgKGxpbmUgIDI3NCkKKiAnbG9uZ2ptcCcgYW5kIGF1dG9tYXRpYyB2YXJpYWJsZXM6ICAgICBJbnRlcmZhY2UuICAgICAgICAgIChsaW5lICAgNTIpCiogTE9OR19BQ0NVTV9UWVBFX1NJWkU6ICAgICAgICAgICAgICAgICAgVHlwZSBMYXlvdXQuICAgICAgICAobGluZSAgIDkyKQoqIExPTkdfRE9VQkxFX1RZUEVfU0laRTogICAgICAgICAgICAgICAgIFR5cGUgTGF5b3V0LiAgICAgICAgKGxpbmUgICA1NykKKiBMT05HX0ZSQUNUX1RZUEVfU0laRTogICAgICAgICAgICAgICAgICBUeXBlIExheW91dC4gICAgICAgIChsaW5lICAgNzIpCiogTE9OR19MT05HX0FDQ1VNX1RZUEVfU0laRTogICAgICAgICAgICAgVHlwZSBMYXlvdXQuICAgICAgICAobGluZSAgIDk3KQoqIExPTkdfTE9OR19GUkFDVF9UWVBFX1NJWkU6ICAgICAgICAgICAgIFR5cGUgTGF5b3V0LiAgICAgICAgKGxpbmUgICA3NykKKiBMT05HX0xPTkdfVFlQRV9TSVpFOiAgICAgICAgICAgICAgICAgICBUeXBlIExheW91dC4gICAgICAgIChsaW5lICAgMzIpCiogTE9OR19UWVBFX1NJWkU6ICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSBMYXlvdXQuICAgICAgICAobGluZSAgIDIxKQoqIExvb3AgYW5hbHlzaXM6ICAgICAgICAgICAgICAgICAgICAgICAgIExvb3AgcmVwcmVzZW50YXRpb24uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgICA2KQoqIExvb3AgbWFuaXB1bGF0aW9uOiAgICAgICAgICAgICAgICAgICAgIExvb3AgbWFuaXB1bGF0aW9uLiAgKGxpbmUgICAgNikKKiBMb29wIHF1ZXJ5aW5nOiAgICAgICAgICAgICAgICAgICAgICAgICBMb29wIHF1ZXJ5aW5nLiAgICAgIChsaW5lICAgIDYpCiogTG9vcCByZXByZXNlbnRhdGlvbjogICAgICAgICAgICAgICAgICAgTG9vcCByZXByZXNlbnRhdGlvbi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgIDYpCiogTG9vcC1jbG9zZWQgU1NBIGZvcm06ICAgICAgICAgICAgICAgICAgTENTU0EuICAgICAgICAgICAgICAobGluZSAgICA2KQoqIGxvb3BpbmcgaW5zdHJ1Y3Rpb24gcGF0dGVybnM6ICAgICAgICAgIExvb3BpbmcgUGF0dGVybnMuICAgKGxpbmUgICAgNikKKiBMb29wczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb29wcy4gICAgICAgICAgICAgIChsaW5lICAgIDYpCiogTE9PUF9BTElHTjogICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxpZ25tZW50IE91dHB1dC4gICAobGluZSAgIDM0KQoqIExPT1BfQUxJR05fTUFYX1NLSVA6ICAgICAgICAgICAgICAgICAgIEFsaWdubWVudCBPdXRwdXQuICAgKGxpbmUgICA0NykKKiBMT09QX0VYUFI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeHByZXNzaW9uIHRyZWVzLiAgIChsaW5lICAgIDYpCiogbG93ZXJpbmcsIGxhbmd1YWdlLWRlcGVuZGVudCBpbnRlcm1lZGlhdGUgcmVwcmVzZW50YXRpb246IFBhcnNpbmcgcGFzcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgMTMpCiogbG9fc3VtOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJpdGhtZXRpYy4gICAgICAgICAobGluZSAgIDI1KQoqICdscmludE1OMic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YW5kYXJkIE5hbWVzLiAgICAgKGxpbmUgIDU3MSkKKiAnbHJvdW5kTU4yJzogICAgICAgICAgICAgICAgICAgICAgICAgICBTdGFuZGFyZCBOYW1lcy4gICAgIChsaW5lICA1NzYpCiogbHNoaWZ0cnQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJpdGhtZXRpYy4gICAgICAgICAobGluZSAgMTg2KQoqICdsc2hpZnRydCcgYW5kIGF0dHJpYnV0ZXM6ICAgICAgICAgICAgIEV4cHJlc3Npb25zLiAgICAgICAgKGxpbmUgICA2NCkKKiBMU0hJRlRfRVhQUjogICAgICAgICAgICAgICAgICAgICAgICAgICBFeHByZXNzaW9uIHRyZWVzLiAgIChsaW5lICAgIDYpCiogJ2xzaHJNMycgaW5zdHJ1Y3Rpb24gcGF0dGVybjogICAgICAgICAgU3RhbmRhcmQgTmFtZXMuICAgICAobGluZSAgNDM0KQoqIGx0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbXBhcmlzb25zLiAgICAgICAgKGxpbmUgICA2OCkKKiAnbHQnIGFuZCBhdHRyaWJ1dGVzOiAgICAgICAgICAgICAgICAgICBFeHByZXNzaW9ucy4gICAgICAgIChsaW5lICAgNjQpCiogTFRHVF9FWFBSOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhwcmVzc2lvbiB0cmVlcy4gICAobGluZSAgICA2KQoqIGx0dTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbXBhcmlzb25zLiAgICAgICAgKGxpbmUgICA2OCkKKiBMVF9FWFBSOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeHByZXNzaW9uIHRyZWVzLiAgIChsaW5lICAgIDYpCiogJ20nIGluIGNvbnN0cmFpbnQ6ICAgICAgICAgICAgICAgICAgICAgU2ltcGxlIENvbnN0cmFpbnRzLiAobGluZSAgIDE3KQoqIG1hY2hpbmUgYXR0cmlidXRlczogICAgICAgICAgICAgICAgICAgIFRhcmdldCBBdHRyaWJ1dGVzLiAgKGxpbmUgICAgNikKKiBtYWNoaW5lIGRlc2NyaXB0aW9uIG1hY3JvczogICAgICAgICAgICBUYXJnZXQgTWFjcm9zLiAgICAgIChsaW5lICAgIDYpCiogbWFjaGluZSBkZXNjcmlwdGlvbnM6ICAgICAgICAgICAgICAgICAgTWFjaGluZSBEZXNjLiAgICAgICAobGluZSAgICA2KQoqIG1hY2hpbmUgbW9kZSBjb252ZXJzaW9uczogICAgICAgICAgICAgIENvbnZlcnNpb25zLiAgICAgICAgKGxpbmUgICAgNikKKiBtYWNoaW5lIG1vZGVzOiAgICAgICAgICAgICAgICAgICAgICAgICBNYWNoaW5lIE1vZGVzLiAgICAgIChsaW5lICAgIDYpCiogbWFjaGluZSBzcGVjaWZpYyBjb25zdHJhaW50czogICAgICAgICAgTWFjaGluZSBDb25zdHJhaW50cy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgIDYpCiogbWFjaGluZS1pbmRlcGVuZGVudCBwcmVkaWNhdGVzOiAgICAgICAgTWFjaGluZS1JbmRlcGVuZGVudCBQcmVkaWNhdGVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICAgNikKKiBtYWNoaW5lX21vZGU6ICAgICAgICAgICAgICAgICAgICAgICAgICBDb25kaXRpb24gQ29kZS4gICAgIChsaW5lICAxNTUpCiogbWFjcm9zLCB0YXJnZXQgZGVzY3JpcHRpb246ICAgICAgICAgICAgVGFyZ2V0IE1hY3Jvcy4gICAgICAobGluZSAgICA2KQoqICdtYWRkTU40JyBpbnN0cnVjdGlvbiBwYXR0ZXJuOiAgICAgICAgIFN0YW5kYXJkIE5hbWVzLiAgICAgKGxpbmUgIDM1NykKKiBtYWtlZmlsZSBmcmFnbWVudDogICAgICAgICAgICAgICAgICAgICBGcmFnbWVudHMuICAgICAgICAgIChsaW5lICAgIDYpCiogbWFrZWZpbGUgdGFyZ2V0czogICAgICAgICAgICAgICAgICAgICAgTWFrZWZpbGUuICAgICAgICAgICAobGluZSAgICA2KQoqIE1BS0VfREVDTF9PTkVfT05MWTogICAgICAgICAgICAgICAgICAgIExhYmVsIE91dHB1dC4gICAgICAgKGxpbmUgIDIxMykKKiBtYWtlX3NhZmVfZnJvbTogICAgICAgICAgICAgICAgICAgICAgICBFeHBhbmRlciBEZWZpbml0aW9ucy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxNDgpCiogbWFya2luZyByb290czogICAgICAgICAgICAgICAgICAgICAgICAgR0dDIFJvb3RzLiAgICAgICAgICAobGluZSAgICA2KQoqIG1hcmtfaG9vazogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUWSBPcHRpb25zLiAgICAgICAgKGxpbmUgIDE3NikKKiBNQVNLX1JFVFVSTl9BRERSOiAgICAgICAgICAgICAgICAgICAgICBFeGNlcHRpb24gUmVnaW9uIE91dHB1dC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgMzQpCiogbWF0Y2hpbmcgY29uc3RyYWludDogICAgICAgICAgICAgICAgICAgU2ltcGxlIENvbnN0cmFpbnRzLiAobGluZSAgMTI5KQoqIG1hdGNoaW5nIG9wZXJhbmRzOiAgICAgICAgICAgICAgICAgICAgIE91dHB1dCBUZW1wbGF0ZS4gICAgKGxpbmUgICA0OSkKKiBtYXRjaF9kdXA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSVEwgVGVtcGxhdGUuICAgICAgIChsaW5lICAgNzMpCiogbWF0Y2hfZHVwIDwxPjogICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lX3BlZXBob2xlMi4gICAobGluZSAgIDI4KQoqICdtYXRjaF9kdXAnIGFuZCBhdHRyaWJ1dGVzOiAgICAgICAgICAgIEluc24gTGVuZ3Rocy4gICAgICAgKGxpbmUgICAxNikKKiBtYXRjaF9vcGVyYW5kOiAgICAgICAgICAgICAgICAgICAgICAgICBSVEwgVGVtcGxhdGUuICAgICAgIChsaW5lICAgMTYpCiogJ21hdGNoX29wZXJhbmQnIGFuZCBhdHRyaWJ1dGVzOiAgICAgICAgRXhwcmVzc2lvbnMuICAgICAgICAobGluZSAgIDU1KQoqIG1hdGNoX29wZXJhdG9yOiAgICAgICAgICAgICAgICAgICAgICAgIFJUTCBUZW1wbGF0ZS4gICAgICAgKGxpbmUgICA5NSkKKiBtYXRjaF9vcF9kdXA6ICAgICAgICAgICAgICAgICAgICAgICAgICBSVEwgVGVtcGxhdGUuICAgICAgIChsaW5lICAxNjMpCiogbWF0Y2hfcGFyYWxsZWw6ICAgICAgICAgICAgICAgICAgICAgICAgUlRMIFRlbXBsYXRlLiAgICAgICAobGluZSAgMTcyKQoqIG1hdGNoX3Bhcl9kdXA6ICAgICAgICAgICAgICAgICAgICAgICAgIFJUTCBUZW1wbGF0ZS4gICAgICAgKGxpbmUgIDIxOSkKKiBtYXRjaF9zY3JhdGNoOiAgICAgICAgICAgICAgICAgICAgICAgICBSVEwgVGVtcGxhdGUuICAgICAgIChsaW5lICAgNTgpCiogbWF0Y2hfc2NyYXRjaCA8MT46ICAgICAgICAgICAgICAgICAgICAgZGVmaW5lX3BlZXBob2xlMi4gICAobGluZSAgIDI4KQoqIG1hdGggbGlicmFyeTogICAgICAgICAgICAgICAgICAgICAgICAgIFNvZnQgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgIDYpCiogbWF0aCwgaW4gUlRMOiAgICAgICAgICAgICAgICAgICAgICAgICAgQXJpdGhtZXRpYy4gICAgICAgICAobGluZSAgICA2KQoqIG1hdGhlcnI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpYnJhcnkgQ2FsbHMuICAgICAgKGxpbmUgICA1OCkKKiBNQVRIX0xJQlJBUlk6ICAgICAgICAgICAgICAgICAgICAgICAgICBNaXNjLiAgICAgICAgICAgICAgIChsaW5lICA1NTUpCiogJ21heE0zJyBpbnN0cnVjdGlvbiBwYXR0ZXJuOiAgICAgICAgICAgU3RhbmRhcmQgTmFtZXMuICAgICAobGluZSAgMjMwKQoqIE1BWF9CSVRTX1BFUl9XT1JEOiAgICAgICAgICAgICAgICAgICAgIFN0b3JhZ2UgTGF5b3V0LiAgICAgKGxpbmUgICA1OSkKKiBNQVhfQ09ORElUSU9OQUxfRVhFQ1VURTogICAgICAgICAgICAgICBNaXNjLiAgICAgICAgICAgICAgIChsaW5lICA1NzcpCiogTUFYX0ZJWEVEX01PREVfU0laRTogICAgICAgICAgICAgICAgICAgU3RvcmFnZSBMYXlvdXQuICAgICAobGluZSAgMzY1KQoqIE1BWF9NT1ZFX01BWDogICAgICAgICAgICAgICAgICAgICAgICAgIE1pc2MuICAgICAgICAgICAgICAgKGxpbmUgIDExOCkKKiBNQVhfT0ZJTEVfQUxJR05NRU5UOiAgICAgICAgICAgICAgICAgICBTdG9yYWdlIExheW91dC4gICAgIChsaW5lICAxOTIpCiogTUFYX1JFR1NfUEVSX0FERFJFU1M6ICAgICAgICAgICAgICAgICAgQWRkcmVzc2luZyBNb2Rlcy4gICAobGluZSAgIDQxKQoqIG1heWJlX3VuZGVmOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUWSBPcHRpb25zLiAgICAgICAgKGxpbmUgIDE4NSkKKiBtYXlfdHJhcF9wLCB0cmVlX2NvdWxkX3RyYXBfcDogICAgICAgICBFZGdlcy4gICAgICAgICAgICAgIChsaW5lICAxMTQpCiogbWNvdW50OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZmlsaW5nLiAgICAgICAgICAobGluZSAgIDEyKQoqIE1EX0NBTl9SRURJUkVDVF9CUkFOQ0g6ICAgICAgICAgICAgICAgIE1pc2MuICAgICAgICAgICAgICAgKGxpbmUgIDcwNykKKiBNRF9FWEVDX1BSRUZJWDogICAgICAgICAgICAgICAgICAgICAgICBEcml2ZXIuICAgICAgICAgICAgIChsaW5lICAzMjkpCiogTURfRkFMTEJBQ0tfRlJBTUVfU1RBVEVfRk9SOiAgICAgICAgICAgRXhjZXB0aW9uIEhhbmRsaW5nLiAobGluZSAgIDk3KQoqIE1EX0hBTkRMRV9VTldBQkk6ICAgICAgICAgICAgICAgICAgICAgIEV4Y2VwdGlvbiBIYW5kbGluZy4gKGxpbmUgIDExNikKKiBNRF9TVEFSVEZJTEVfUFJFRklYOiAgICAgICAgICAgICAgICAgICBEcml2ZXIuICAgICAgICAgICAgIChsaW5lICAzNTcpCiogTURfU1RBUlRGSUxFX1BSRUZJWF8xOiAgICAgICAgICAgICAgICAgRHJpdmVyLiAgICAgICAgICAgICAobGluZSAgMzYzKQoqIE1EX1VOV0lORF9TVVBQT1JUOiAgICAgICAgICAgICAgICAgICAgIEV4Y2VwdGlvbiBIYW5kbGluZy4gKGxpbmUgICA5MykKKiBtZW06ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdzIGFuZCBNZW1vcnkuICAgIChsaW5lICAyNDcpCiogJ21lbScgYW5kICcvYyc6ICAgICAgICAgICAgICAgICAgICAgICAgRmxhZ3MuICAgICAgICAgICAgICAobGluZSAgIDg0KQoqICdtZW0nIGFuZCAnL2YnOiAgICAgICAgICAgICAgICAgICAgICAgIEZsYWdzLiAgICAgICAgICAgICAgKGxpbmUgICA4OCkKKiAnbWVtJyBhbmQgJy9pJzogICAgICAgICAgICAgICAgICAgICAgICBGbGFncy4gICAgICAgICAgICAgIChsaW5lICAgNzApCiogJ21lbScgYW5kICcvaic6ICAgICAgICAgICAgICAgICAgICAgICAgRmxhZ3MuICAgICAgICAgICAgICAobGluZSAgIDY0KQoqICdtZW0nIGFuZCAnL3MnOiAgICAgICAgICAgICAgICAgICAgICAgIEZsYWdzLiAgICAgICAgICAgICAgKGxpbmUgICA1NSkKKiAnbWVtJyBhbmQgJy91JzogICAgICAgICAgICAgICAgICAgICAgICBGbGFncy4gICAgICAgICAgICAgIChsaW5lICAxMzcpCiogJ21lbScgYW5kICcvdic6ICAgICAgICAgICAgICAgICAgICAgICAgRmxhZ3MuICAgICAgICAgICAgICAobGluZSAgIDc5KQoqICdtZW0nLCBSVEwgc2hhcmluZzogICAgICAgICAgICAgICAgICAgIFNoYXJpbmcuICAgICAgICAgICAgKGxpbmUgICA0MCkKKiBNRU1CRVJfVFlQRV9GT1JDRVNfQkxLOiAgICAgICAgICAgICAgICBTdG9yYWdlIExheW91dC4gICAgIChsaW5lICAzNDUpCiogbWVtb3J5IHJlZmVyZW5jZSwgbm9ub2Zmc2V0dGFibGU6ICAgICAgU2ltcGxlIENvbnN0cmFpbnRzLiAobGluZSAgMjQzKQoqIG1lbW9yeSByZWZlcmVuY2VzIGluIGNvbnN0cmFpbnRzOiAgICAgIFNpbXBsZSBDb25zdHJhaW50cy4gKGxpbmUgICAxNykKKiAnbWVtb3J5X2JhcnJpZXInIGluc3RydWN0aW9uIHBhdHRlcm46ICBTdGFuZGFyZCBOYW1lcy4gICAgIChsaW5lIDEzOTUpCiogTUVNT1JZX01PVkVfQ09TVDogICAgICAgICAgICAgICAgICAgICAgQ29zdHMuICAgICAgICAgICAgICAobGluZSAgIDI4KQoqIG1lbW9yeV9vcGVyYW5kOiAgICAgICAgICAgICAgICAgICAgICAgIE1hY2hpbmUtSW5kZXBlbmRlbnQgUHJlZGljYXRlcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgNTcpCiogTUVNX0FMSUFTX1NFVDogICAgICAgICAgICAgICAgICAgICAgICAgU3BlY2lhbCBBY2Nlc3NvcnMuICAobGluZSAgICA5KQoqIE1FTV9BTElHTjogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNwZWNpYWwgQWNjZXNzb3JzLiAgKGxpbmUgICAzNSkKKiBNRU1fRVhQUjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTcGVjaWFsIEFjY2Vzc29ycy4gIChsaW5lICAgMTkpCiogTUVNX0lOX1NUUlVDVF9QOiAgICAgICAgICAgICAgICAgICAgICAgRmxhZ3MuICAgICAgICAgICAgICAobGluZSAgIDU1KQoqIE1FTV9LRUVQX0FMSUFTX1NFVF9QOiAgICAgICAgICAgICAgICAgIEZsYWdzLiAgICAgICAgICAgICAgKGxpbmUgICA2NCkKKiBNRU1fTk9UUkFQX1A6ICAgICAgICAgICAgICAgICAgICAgICAgICBGbGFncy4gICAgICAgICAgICAgIChsaW5lICAgODQpCiogTUVNX09GRlNFVDogICAgICAgICAgICAgICAgICAgICAgICAgICAgU3BlY2lhbCBBY2Nlc3NvcnMuICAobGluZSAgIDI3KQoqIE1FTV9QT0lOVEVSOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsYWdzLiAgICAgICAgICAgICAgKGxpbmUgICA4OCkKKiBNRU1fUkVBRE9OTFlfUDogICAgICAgICAgICAgICAgICAgICAgICBGbGFncy4gICAgICAgICAgICAgIChsaW5lICAxMzcpCiogTUVNX1NDQUxBUl9QOiAgICAgICAgICAgICAgICAgICAgICAgICAgRmxhZ3MuICAgICAgICAgICAgICAobGluZSAgIDcwKQoqIE1FTV9TSVpFOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNwZWNpYWwgQWNjZXNzb3JzLiAgKGxpbmUgICAzMCkKKiBNRU1fVk9MQVRJTEVfUDogICAgICAgICAgICAgICAgICAgICAgICBGbGFncy4gICAgICAgICAgICAgIChsaW5lICAgNzkpCiogTUVUSE9EX1RZUEU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZXMuICAgICAgICAgICAgICAobGluZSAgICA2KQoqIE1JTklNVU1fQVRPTUlDX0FMSUdOTUVOVDogICAgICAgICAgICAgIFN0b3JhZ2UgTGF5b3V0LiAgICAgKGxpbmUgIDE3MSkKKiAnbWluTTMnIGluc3RydWN0aW9uIHBhdHRlcm46ICAgICAgICAgICBTdGFuZGFyZCBOYW1lcy4gICAgIChsaW5lICAyMzApCiogbWludXM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJpdGhtZXRpYy4gICAgICAgICAobGluZSAgIDM4KQoqICdtaW51cycgYW5kIGF0dHJpYnV0ZXM6ICAgICAgICAgICAgICAgIEV4cHJlc3Npb25zLiAgICAgICAgKGxpbmUgICA2NCkKKiAnbWludXMnLCBjYW5vbmljYWxpemF0aW9uIG9mOiAgICAgICAgICBJbnNuIENhbm9uaWNhbGl6YXRpb25zLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICAyNykKKiBNSU5VU19FWFBSOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeHByZXNzaW9uIHRyZWVzLiAgIChsaW5lICAgIDYpCiogTUlOX1VOSVRTX1BFUl9XT1JEOiAgICAgICAgICAgICAgICAgICAgU3RvcmFnZSBMYXlvdXQuICAgICAobGluZSAgIDY5KQoqIE1JUFMgY29wcm9jZXNzb3ItZGVmaW5pdGlvbiBtYWNyb3M6ICAgIE1JUFMgQ29wcm9jZXNzb3JzLiAgKGxpbmUgICAgNikKKiBtb2Q6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcml0aG1ldGljLiAgICAgICAgIChsaW5lICAxMzIpCiogJ21vZCcgYW5kIGF0dHJpYnV0ZXM6ICAgICAgICAgICAgICAgICAgRXhwcmVzc2lvbnMuICAgICAgICAobGluZSAgIDY0KQoqIG1vZGUgY2xhc3NlczogICAgICAgICAgICAgICAgICAgICAgICAgIE1hY2hpbmUgTW9kZXMuICAgICAgKGxpbmUgIDIxOCkKKiBtb2RlIGl0ZXJhdG9ycyBpbiAnLm1kJyBmaWxlczogICAgICAgICBNb2RlIEl0ZXJhdG9ycy4gICAgIChsaW5lICAgIDYpCiogbW9kZSBzd2l0Y2hpbmc6ICAgICAgICAgICAgICAgICAgICAgICAgTW9kZSBTd2l0Y2hpbmcuICAgICAobGluZSAgICA2KQoqIE1PREVTX1RJRUFCTEVfUDogICAgICAgICAgICAgICAgICAgICAgIFZhbHVlcyBpbiBSZWdpc3RlcnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMTI3KQoqIE1PREVfQUNDVU06ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hY2hpbmUgTW9kZXMuICAgICAgKGxpbmUgIDI0OCkKKiBNT0RFX0FGVEVSOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNb2RlIFN3aXRjaGluZy4gICAgIChsaW5lICAgNDgpCiogTU9ERV9CQVNFX1JFR19DTEFTUzogICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgQ2xhc3Nlcy4gICAobGluZSAgMTA5KQoqIE1PREVfQkFTRV9SRUdfUkVHX0NMQVNTOiAgICAgICAgICAgICAgIFJlZ2lzdGVyIENsYXNzZXMuICAgKGxpbmUgIDExNSkKKiBNT0RFX0NDOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWNoaW5lIE1vZGVzLiAgICAgIChsaW5lICAyNjcpCiogTU9ERV9DT0RFX0JBU0VfUkVHX0NMQVNTOiAgICAgICAgICAgICAgUmVnaXN0ZXIgQ2xhc3Nlcy4gICAobGluZSAgMTIyKQoqIE1PREVfQ09NUExFWF9GTE9BVDogICAgICAgICAgICAgICAgICAgIE1hY2hpbmUgTW9kZXMuICAgICAgKGxpbmUgIDI1OSkKKiBNT0RFX0NPTVBMRVhfSU5UOiAgICAgICAgICAgICAgICAgICAgICBNYWNoaW5lIE1vZGVzLiAgICAgIChsaW5lICAyNTYpCiogTU9ERV9ERUNJTUFMX0ZMT0FUOiAgICAgICAgICAgICAgICAgICAgTWFjaGluZSBNb2Rlcy4gICAgICAobGluZSAgMjM2KQoqIE1PREVfRU5UUlk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1vZGUgU3dpdGNoaW5nLiAgICAgKGxpbmUgICA1MykKKiBNT0RFX0VYSVQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNb2RlIFN3aXRjaGluZy4gICAgIChsaW5lICAgNTkpCiogTU9ERV9GTE9BVDogICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFjaGluZSBNb2Rlcy4gICAgICAobGluZSAgMjMyKQoqIE1PREVfRlJBQ1Q6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hY2hpbmUgTW9kZXMuICAgICAgKGxpbmUgIDI0MCkKKiBNT0RFX0ZVTkNUSU9OOiAgICAgICAgICAgICAgICAgICAgICAgICBNYWNoaW5lIE1vZGVzLiAgICAgIChsaW5lICAyNjMpCiogTU9ERV9IQVNfSU5GSU5JVElFUzogICAgICAgICAgICAgICAgICAgU3RvcmFnZSBMYXlvdXQuICAgICAobGluZSAgNDM1KQoqIE1PREVfSEFTX05BTlM6ICAgICAgICAgICAgICAgICAgICAgICAgIFN0b3JhZ2UgTGF5b3V0LiAgICAgKGxpbmUgIDQyNSkKKiBNT0RFX0hBU19TSUdORURfWkVST1M6ICAgICAgICAgICAgICAgICBTdG9yYWdlIExheW91dC4gICAgIChsaW5lICA0NDEpCiogTU9ERV9IQVNfU0lHTl9ERVBFTkRFTlRfUk9VTkRJTkc6ICAgICAgU3RvcmFnZSBMYXlvdXQuICAgICAobGluZSAgNDU3KQoqIE1PREVfSU5UOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hY2hpbmUgTW9kZXMuICAgICAgKGxpbmUgIDIyNCkKKiBNT0RFX05FRURFRDogICAgICAgICAgICAgICAgICAgICAgICAgICBNb2RlIFN3aXRjaGluZy4gICAgIChsaW5lICAgNDEpCiogTU9ERV9QQVJUSUFMX0lOVDogICAgICAgICAgICAgICAgICAgICAgTWFjaGluZSBNb2Rlcy4gICAgICAobGluZSAgMjI4KQoqIE1PREVfUFJJT1JJVFlfVE9fTU9ERTogICAgICAgICAgICAgICAgIE1vZGUgU3dpdGNoaW5nLiAgICAgKGxpbmUgICA2NSkKKiBNT0RFX1JBTkRPTTogICAgICAgICAgICAgICAgICAgICAgICAgICBNYWNoaW5lIE1vZGVzLiAgICAgIChsaW5lICAyNzIpCiogTU9ERV9VQUNDVU06ICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFjaGluZSBNb2Rlcy4gICAgICAobGluZSAgMjUyKQoqIE1PREVfVUZSQUNUOiAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hY2hpbmUgTW9kZXMuICAgICAgKGxpbmUgIDI0NCkKKiBtb2RpZmllcnMgaW4gY29uc3RyYWludHM6ICAgICAgICAgICAgICBNb2RpZmllcnMuICAgICAgICAgIChsaW5lICAgIDYpCiogTU9ESUZZX0VYUFI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhwcmVzc2lvbiB0cmVlcy4gICAobGluZSAgICA2KQoqIE1PRElGWV9KTklfTUVUSE9EX0NBTEw6ICAgICAgICAgICAgICAgIE1pc2MuICAgICAgICAgICAgICAgKGxpbmUgIDc4NikKKiBNT0RJRllfVEFSR0VUX05BTUU6ICAgICAgICAgICAgICAgICAgICBEcml2ZXIuICAgICAgICAgICAgIChsaW5lICAzODQpCiogJ21vZE0zJyBpbnN0cnVjdGlvbiBwYXR0ZXJuOiAgICAgICAgICAgU3RhbmRhcmQgTmFtZXMuICAgICAobGluZSAgMjIwKQoqIG1vZHVsbyBzY2hlZHVsaW5nOiAgICAgICAgICAgICAgICAgICAgIFJUTCBwYXNzZXMuICAgICAgICAgKGxpbmUgIDEzOSkKKiBNT1ZFX0JZX1BJRUNFU19QOiAgICAgICAgICAgICAgICAgICAgICBDb3N0cy4gICAgICAgICAgICAgIChsaW5lICAxMDMpCiogTU9WRV9NQVg6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWlzYy4gICAgICAgICAgICAgICAobGluZSAgMTEzKQoqIE1PVkVfTUFYX1BJRUNFUzogICAgICAgICAgICAgICAgICAgICAgIENvc3RzLiAgICAgICAgICAgICAgKGxpbmUgIDEwOSkKKiBNT1ZFX1JBVElPOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3N0cy4gICAgICAgICAgICAgIChsaW5lICAgOTApCiogJ21vdk0nIGluc3RydWN0aW9uIHBhdHRlcm46ICAgICAgICAgICAgU3RhbmRhcmQgTmFtZXMuICAgICAobGluZSAgIDExKQoqICdtb3ZtZW1NJyBpbnN0cnVjdGlvbiBwYXR0ZXJuOiAgICAgICAgIFN0YW5kYXJkIE5hbWVzLiAgICAgKGxpbmUgIDY2MSkKKiAnbW92bWlzYWxpZ25NJyBpbnN0cnVjdGlvbiBwYXR0ZXJuOiAgICBTdGFuZGFyZCBOYW1lcy4gICAgIChsaW5lICAxMjUpCiogJ21vdk1PREVjYycgaW5zdHJ1Y3Rpb24gcGF0dGVybjogICAgICAgU3RhbmRhcmQgTmFtZXMuICAgICAobGluZSAgODc4KQoqICdtb3ZzdHInIGluc3RydWN0aW9uIHBhdHRlcm46ICAgICAgICAgIFN0YW5kYXJkIE5hbWVzLiAgICAgKGxpbmUgIDY5NSkKKiAnbW92c3RyaWN0TScgaW5zdHJ1Y3Rpb24gcGF0dGVybjogICAgICBTdGFuZGFyZCBOYW1lcy4gICAgIChsaW5lICAxMTkpCiogJ21zdWJNTjQnIGluc3RydWN0aW9uIHBhdHRlcm46ICAgICAgICAgU3RhbmRhcmQgTmFtZXMuICAgICAobGluZSAgMzgwKQoqICdtdWxoaXNpMycgaW5zdHJ1Y3Rpb24gcGF0dGVybjogICAgICAgIFN0YW5kYXJkIE5hbWVzLiAgICAgKGxpbmUgIDMzMykKKiAnbXVsTTMnIGluc3RydWN0aW9uIHBhdHRlcm46ICAgICAgICAgICBTdGFuZGFyZCBOYW1lcy4gICAgIChsaW5lICAyMjApCiogJ211bHFpaGkzJyBpbnN0cnVjdGlvbiBwYXR0ZXJuOiAgICAgICAgU3RhbmRhcmQgTmFtZXMuICAgICAobGluZSAgMzM3KQoqICdtdWxzaWRpMycgaW5zdHJ1Y3Rpb24gcGF0dGVybjogICAgICAgIFN0YW5kYXJkIE5hbWVzLiAgICAgKGxpbmUgIDMzNykKKiBtdWx0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcml0aG1ldGljLiAgICAgICAgIChsaW5lICAgOTMpCiogJ211bHQnIGFuZCBhdHRyaWJ1dGVzOiAgICAgICAgICAgICAgICAgRXhwcmVzc2lvbnMuICAgICAgICAobGluZSAgIDY0KQoqICdtdWx0JywgY2Fub25pY2FsaXphdGlvbiBvZjogICAgICAgICAgIEluc24gQ2Fub25pY2FsaXphdGlvbnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDI3KQoqIE1VTFRJTElCX0RFRkFVTFRTOiAgICAgICAgICAgICAgICAgICAgIERyaXZlci4gICAgICAgICAgICAgKGxpbmUgIDMxNCkKKiBNVUxUSUxJQl9ESVJOQU1FUzogICAgICAgICAgICAgICAgICAgICBUYXJnZXQgRnJhZ21lbnQuICAgIChsaW5lICAgNjQpCiogTVVMVElMSUJfRVhDRVBUSU9OUzogICAgICAgICAgICAgICAgICAgVGFyZ2V0IEZyYWdtZW50LiAgICAobGluZSAgIDg0KQoqIE1VTFRJTElCX0VYVFJBX09QVFM6ICAgICAgICAgICAgICAgICAgIFRhcmdldCBGcmFnbWVudC4gICAgKGxpbmUgICA5NikKKiBNVUxUSUxJQl9NQVRDSEVTOiAgICAgICAgICAgICAgICAgICAgICBUYXJnZXQgRnJhZ21lbnQuICAgIChsaW5lICAgNzcpCiogTVVMVElMSUJfT1BUSU9OUzogICAgICAgICAgICAgICAgICAgICAgVGFyZ2V0IEZyYWdtZW50LiAgICAobGluZSAgIDQ0KQoqIG11bHRpcGxlIGFsdGVybmF0aXZlIGNvbnN0cmFpbnRzOiAgICAgIE11bHRpLUFsdGVybmF0aXZlLiAgKGxpbmUgICAgNikKKiBNVUxUSVBMRV9TWU1CT0xfU1BBQ0VTOiAgICAgICAgICAgICAgICBNaXNjLiAgICAgICAgICAgICAgIChsaW5lICA1MzUpCiogbXVsdGlwbGljYXRpb246ICAgICAgICAgICAgICAgICAgICAgICAgQXJpdGhtZXRpYy4gICAgICAgICAobGluZSAgIDkzKQoqIG11bHRpcGxpY2F0aW9uIHdpdGggc2lnbmVkIHNhdHVyYXRpb246IEFyaXRobWV0aWMuICAgICAgICAgKGxpbmUgICA5MykKKiBtdWx0aXBsaWNhdGlvbiB3aXRoIHVuc2lnbmVkIHNhdHVyYXRpb246IEFyaXRobWV0aWMuICAgICAgIChsaW5lICAgOTMpCiogTVVMVF9FWFBSOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhwcmVzc2lvbiB0cmVlcy4gICAobGluZSAgICA2KQoqIE1VU1RfVVNFX1NKTEpfRVhDRVBUSU9OUzogICAgICAgICAgICAgIEV4Y2VwdGlvbiBSZWdpb24gT3V0cHV0LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA2MikKKiAnbicgaW4gY29uc3RyYWludDogICAgICAgICAgICAgICAgICAgICBTaW1wbGUgQ29uc3RyYWludHMuIChsaW5lICAgNjIpCiogbmFtZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWRlbnRpZmllcnMuICAgICAgICAobGluZSAgICA2KQoqIG5hbWVkIHBhdHRlcm5zIGFuZCBjb25kaXRpb25zOiAgICAgICAgIFBhdHRlcm5zLiAgICAgICAgICAgKGxpbmUgICA0NykKKiBuYW1lcywgcGF0dGVybjogICAgICAgICAgICAgICAgICAgICAgICBTdGFuZGFyZCBOYW1lcy4gICAgIChsaW5lICAgIDYpCiogbmFtZXNwYWNlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZXNwYWNlcy4gICAgICAgICAobGluZSAgICA2KQoqIG5hbWVzcGFjZSwgY2xhc3MsIHNjb3BlOiAgICAgICAgICAgICAgIFNjb3Blcy4gICAgICAgICAgICAgKGxpbmUgICAgNikKKiBOQU1FU1BBQ0VfREVDTDogICAgICAgICAgICAgICAgICAgICAgICBOYW1lc3BhY2VzLiAgICAgICAgIChsaW5lICAgIDYpCiogTkFNRVNQQUNFX0RFQ0wgPDE+OiAgICAgICAgICAgICAgICAgICAgRGVjbGFyYXRpb25zLiAgICAgICAobGluZSAgICA2KQoqIE5BVElWRV9TWVNURU1fSEVBREVSX0RJUjogICAgICAgICAgICAgIFRhcmdldCBGcmFnbWVudC4gICAgKGxpbmUgIDEwMykKKiBuZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21wYXJpc29ucy4gICAgICAgIChsaW5lICAgNTYpCiogJ25lJyBhbmQgYXR0cmlidXRlczogICAgICAgICAgICAgICAgICAgRXhwcmVzc2lvbnMuICAgICAgICAobGluZSAgIDY0KQoqICduZWFyYnlpbnRNMicgaW5zdHJ1Y3Rpb24gcGF0dGVybjogICAgIFN0YW5kYXJkIE5hbWVzLiAgICAgKGxpbmUgIDU1MykKKiBuZWc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcml0aG1ldGljLiAgICAgICAgIChsaW5lICAgODIpCiogJ25lZycgYW5kIGF0dHJpYnV0ZXM6ICAgICAgICAgICAgICAgICAgRXhwcmVzc2lvbnMuICAgICAgICAobGluZSAgIDY0KQoqICduZWcnLCBjYW5vbmljYWxpemF0aW9uIG9mOiAgICAgICAgICAgIEluc24gQ2Fub25pY2FsaXphdGlvbnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDI3KQoqIE5FR0FURV9FWFBSOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4cHJlc3Npb24gdHJlZXMuICAgKGxpbmUgICAgNikKKiBuZWdhdGlvbjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcml0aG1ldGljLiAgICAgICAgIChsaW5lICAgODIpCiogbmVnYXRpb24gd2l0aCBzaWduZWQgc2F0dXJhdGlvbjogICAgICAgQXJpdGhtZXRpYy4gICAgICAgICAobGluZSAgIDgyKQoqIG5lZ2F0aW9uIHdpdGggdW5zaWduZWQgc2F0dXJhdGlvbjogICAgIEFyaXRobWV0aWMuICAgICAgICAgKGxpbmUgICA4MikKKiAnbmVnTTInIGluc3RydWN0aW9uIHBhdHRlcm46ICAgICAgICAgICBTdGFuZGFyZCBOYW1lcy4gICAgIChsaW5lICA0MzgpCiogbmVzdGVkIGZ1bmN0aW9ucywgdHJhbXBvbGluZXMgZm9yOiAgICAgVHJhbXBvbGluZXMuICAgICAgICAobGluZSAgICA2KQoqIG5lc3RlZF9wdHI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUWSBPcHRpb25zLiAgICAgICAgKGxpbmUgIDE5MykKKiBuZXh0X2JiLCBwcmV2X2JiLCBGT1JfRUFDSF9CQjogICAgICAgICBCYXNpYyBCbG9ja3MuICAgICAgIChsaW5lICAgMTApCiogbmV4dF9jYzBfdXNlcjogICAgICAgICAgICAgICAgICAgICAgICAgSnVtcCBQYXR0ZXJucy4gICAgICAobGluZSAgIDY0KQoqIE5FWFRfSU5TTjogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc25zLiAgICAgICAgICAgICAgKGxpbmUgICAzMCkKKiBORVhUX09CSkNfUlVOVElNRTogICAgICAgICAgICAgICAgICAgICBMaWJyYXJ5IENhbGxzLiAgICAgIChsaW5lICAgOTMpCiogTkVfRVhQUjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhwcmVzc2lvbiB0cmVlcy4gICAobGluZSAgICA2KQoqIG5pbDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJUTCBPYmplY3RzLiAgICAgICAgKGxpbmUgICA3MykKKiBub25kZXRlcm1pbmlzdGljIGZpbml0ZSBzdGF0ZSBhdXRvbWF0b246IFByb2Nlc3NvciBwaXBlbGluZSBkZXNjcmlwdGlvbi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAyOTQpCiogbm9uaW1tZWRpYXRlX29wZXJhbmQ6ICAgICAgICAgICAgICAgICAgTWFjaGluZS1JbmRlcGVuZGVudCBQcmVkaWNhdGVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDEwMCkKKiBub25sb2NhbCBnb3RvIGhhbmRsZXI6ICAgICAgICAgICAgICAgICBFZGdlcy4gICAgICAgICAgICAgIChsaW5lICAxNzApCiogJ25vbmxvY2FsX2dvdG8nIGluc3RydWN0aW9uIHBhdHRlcm46ICAgU3RhbmRhcmQgTmFtZXMuICAgICAobGluZSAxMjM3KQoqICdub25sb2NhbF9nb3RvX3JlY2VpdmVyJyBpbnN0cnVjdGlvbiBwYXR0ZXJuOiBTdGFuZGFyZCBOYW1lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDEyNTQpCiogbm9ubWVtb3J5X29wZXJhbmQ6ICAgICAgICAgICAgICAgICAgICAgTWFjaGluZS1JbmRlcGVuZGVudCBQcmVkaWNhdGVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA5NikKKiBub25vZmZzZXR0YWJsZSBtZW1vcnkgcmVmZXJlbmNlOiAgICAgICBTaW1wbGUgQ29uc3RyYWludHMuIChsaW5lICAyNDMpCiogTk9OX0xWQUxVRV9FWFBSOiAgICAgICAgICAgICAgICAgICAgICAgRXhwcmVzc2lvbiB0cmVlcy4gICAobGluZSAgICA2KQoqICdub3AnIGluc3RydWN0aW9uIHBhdHRlcm46ICAgICAgICAgICAgIFN0YW5kYXJkIE5hbWVzLiAgICAgKGxpbmUgMTA1OSkKKiBOT1BfRVhQUjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeHByZXNzaW9uIHRyZWVzLiAgIChsaW5lICAgIDYpCiogbm9ybWFsIHByZWRpY2F0ZXM6ICAgICAgICAgICAgICAgICAgICAgUHJlZGljYXRlcy4gICAgICAgICAobGluZSAgIDMxKQoqIG5vdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyaXRobWV0aWMuICAgICAgICAgKGxpbmUgIDE1MCkKKiAnbm90JyBhbmQgYXR0cmlidXRlczogICAgICAgICAgICAgICAgICBFeHByZXNzaW9ucy4gICAgICAgIChsaW5lICAgNTApCiogbm90IGVxdWFsOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tcGFyaXNvbnMuICAgICAgICAobGluZSAgIDU2KQoqICdub3QnLCBjYW5vbmljYWxpemF0aW9uIG9mOiAgICAgICAgICAgIEluc24gQ2Fub25pY2FsaXphdGlvbnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDI3KQoqIG5vdGU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc25zLiAgICAgICAgICAgICAgKGxpbmUgIDE2NykKKiAnbm90ZScgYW5kICcvaSc6ICAgICAgICAgICAgICAgICAgICAgICBGbGFncy4gICAgICAgICAgICAgIChsaW5lICAgNDQpCiogJ25vdGUnIGFuZCAnL3YnOiAgICAgICAgICAgICAgICAgICAgICAgRmxhZ3MuICAgICAgICAgICAgICAobGluZSAgIDI5KQoqIE5PVEVfSU5TTl9CQVNJQ19CTE9DSywgQ09ERV9MQUJFTCwgbm90ZXM6IEJhc2ljIEJsb2Nrcy4gICAgKGxpbmUgICA0MSkKKiBOT1RFX0lOU05fQkxPQ0tfQkVHOiAgICAgICAgICAgICAgICAgICBJbnNucy4gICAgICAgICAgICAgIChsaW5lICAxOTIpCiogTk9URV9JTlNOX0JMT0NLX0VORDogICAgICAgICAgICAgICAgICAgSW5zbnMuICAgICAgICAgICAgICAobGluZSAgMTkyKQoqIE5PVEVfSU5TTl9ERUxFVEVEOiAgICAgICAgICAgICAgICAgICAgIEluc25zLiAgICAgICAgICAgICAgKGxpbmUgIDE4MikKKiBOT1RFX0lOU05fREVMRVRFRF9MQUJFTDogICAgICAgICAgICAgICBJbnNucy4gICAgICAgICAgICAgIChsaW5lICAxODcpCiogTk9URV9JTlNOX0VIX1JFR0lPTl9CRUc6ICAgICAgICAgICAgICAgSW5zbnMuICAgICAgICAgICAgICAobGluZSAgMTk4KQoqIE5PVEVfSU5TTl9FSF9SRUdJT05fRU5EOiAgICAgICAgICAgICAgIEluc25zLiAgICAgICAgICAgICAgKGxpbmUgIDE5OCkKKiBOT1RFX0lOU05fRlVOQ1RJT05fQkVHOiAgICAgICAgICAgICAgICBJbnNucy4gICAgICAgICAgICAgIChsaW5lICAyMjIpCiogTk9URV9JTlNOX0xPT1BfQkVHOiAgICAgICAgICAgICAgICAgICAgSW5zbnMuICAgICAgICAgICAgICAobGluZSAgMjA2KQoqIE5PVEVfSU5TTl9MT09QX0NPTlQ6ICAgICAgICAgICAgICAgICAgIEluc25zLiAgICAgICAgICAgICAgKGxpbmUgIDIxMikKKiBOT1RFX0lOU05fTE9PUF9FTkQ6ICAgICAgICAgICAgICAgICAgICBJbnNucy4gICAgICAgICAgICAgIChsaW5lICAyMDYpCiogTk9URV9JTlNOX0xPT1BfVlRPUDogICAgICAgICAgICAgICAgICAgSW5zbnMuICAgICAgICAgICAgICAobGluZSAgMjE2KQoqIE5PVEVfTElORV9OVU1CRVI6ICAgICAgICAgICAgICAgICAgICAgIEluc25zLiAgICAgICAgICAgICAgKGxpbmUgIDE2NykKKiBOT1RFX1NPVVJDRV9GSUxFOiAgICAgICAgICAgICAgICAgICAgICBJbnNucy4gICAgICAgICAgICAgIChsaW5lICAxNjcpCiogTk9USUNFX1VQREFURV9DQzogICAgICAgICAgICAgICAgICAgICAgQ29uZGl0aW9uIENvZGUuICAgICAobGluZSAgIDMyKQoqIE5PX0RCWF9CTlNZTV9FTlNZTTogICAgICAgICAgICAgICAgICAgIERCWCBIb29rcy4gICAgICAgICAgKGxpbmUgICAzOCkKKiBOT19EQlhfRlVOQ1RJT05fRU5EOiAgICAgICAgICAgICAgICAgICBEQlggSG9va3MuICAgICAgICAgIChsaW5lICAgMzIpCiogTk9fREJYX0dDQ19NQVJLRVI6ICAgICAgICAgICAgICAgICAgICAgRmlsZSBOYW1lcyBhbmQgREJYLiAobGluZSAgIDI3KQoqIE5PX0RCWF9NQUlOX1NPVVJDRV9ESVJFQ1RPUlk6ICAgICAgICAgIEZpbGUgTmFtZXMgYW5kIERCWC4gKGxpbmUgICAyMikKKiBOT19ET0xMQVJfSU5fTEFCRUw6ICAgICAgICAgICAgICAgICAgICBNaXNjLiAgICAgICAgICAgICAgIChsaW5lICA0OTkpCiogTk9fRE9UX0lOX0xBQkVMOiAgICAgICAgICAgICAgICAgICAgICAgTWlzYy4gICAgICAgICAgICAgICAobGluZSAgNTA1KQoqIE5PX0ZVTkNUSU9OX0NTRTogICAgICAgICAgICAgICAgICAgICAgIENvc3RzLiAgICAgICAgICAgICAgKGxpbmUgIDE5MykKKiBOT19JTVBMSUNJVF9FWFRFUk5fQzogICAgICAgICAgICAgICAgICBNaXNjLiAgICAgICAgICAgICAgIChsaW5lICAzNzQpCiogTk9fUFJPRklMRV9DT1VOVEVSUzogICAgICAgICAgICAgICAgICAgUHJvZmlsaW5nLiAgICAgICAgICAobGluZSAgIDI3KQoqIE5PX1JFR1M6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIENsYXNzZXMuICAgKGxpbmUgICAxNykKKiBOdW1iZXIgb2YgaXRlcmF0aW9ucyBhbmFseXNpczogICAgICAgICBOdW1iZXIgb2YgaXRlcmF0aW9ucy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgIDYpCiogTlVNX01BQ0hJTkVfTU9ERVM6ICAgICAgICAgICAgICAgICAgICAgTWFjaGluZSBNb2Rlcy4gICAgICAobGluZSAgMjg1KQoqIE5VTV9NT0RFU19GT1JfTU9ERV9TV0lUQ0hJTkc6ICAgICAgICAgIE1vZGUgU3dpdGNoaW5nLiAgICAgKGxpbmUgICAyOSkKKiBOX1JFR19DTEFTU0VTOiAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBDbGFzc2VzLiAgIChsaW5lICAgNzQpCiogJ28nIGluIGNvbnN0cmFpbnQ6ICAgICAgICAgICAgICAgICAgICAgU2ltcGxlIENvbnN0cmFpbnRzLiAobGluZSAgIDIxKQoqIE9CSkNfR0VOX01FVEhPRF9MQUJFTDogICAgICAgICAgICAgICAgIExhYmVsIE91dHB1dC4gICAgICAgKGxpbmUgIDQwNSkKKiBPQkpDX0pCTEVOOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNaXNjLiAgICAgICAgICAgICAgIChsaW5lICA5MjApCiogT0JKRUNUX0ZPUk1BVF9DT0ZGOiAgICAgICAgICAgICAgICAgICAgTWFjcm9zIGZvciBJbml0aWFsaXphdGlvbi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgOTYpCiogb2Zmc2V0dGFibGUgYWRkcmVzczogICAgICAgICAgICAgICAgICAgU2ltcGxlIENvbnN0cmFpbnRzLiAobGluZSAgIDIxKQoqIE9GRlNFVF9UWVBFOiAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGVzLiAgICAgICAgICAgICAgKGxpbmUgICAgNikKKiBPSW1vZGU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWNoaW5lIE1vZGVzLiAgICAgIChsaW5lICAgNTEpCiogT21lZ2EgYSBzb2x2ZXIgZm9yIGxpbmVhciBwcm9ncmFtbWluZyBwcm9ibGVtczogT21lZ2EuICAgICAobGluZSAgICA2KQoqIE9NUF9BVE9NSUM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4cHJlc3Npb24gdHJlZXMuICAgKGxpbmUgICAgNikKKiBPTVBfQ0xBVVNFOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeHByZXNzaW9uIHRyZWVzLiAgIChsaW5lICAgIDYpCiogT01QX0NPTlRJTlVFOiAgICAgICAgICAgICAgICAgICAgICAgICAgRXhwcmVzc2lvbiB0cmVlcy4gICAobGluZSAgICA2KQoqIE9NUF9DUklUSUNBTDogICAgICAgICAgICAgICAgICAgICAgICAgIEV4cHJlc3Npb24gdHJlZXMuICAgKGxpbmUgICAgNikKKiBPTVBfRk9SOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeHByZXNzaW9uIHRyZWVzLiAgIChsaW5lICAgIDYpCiogT01QX01BU1RFUjogICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhwcmVzc2lvbiB0cmVlcy4gICAobGluZSAgICA2KQoqIE9NUF9PUkRFUkVEOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4cHJlc3Npb24gdHJlZXMuICAgKGxpbmUgICAgNikKKiBPTVBfUEFSQUxMRUw6ICAgICAgICAgICAgICAgICAgICAgICAgICBFeHByZXNzaW9uIHRyZWVzLiAgIChsaW5lICAgIDYpCiogT01QX1JFVFVSTjogICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhwcmVzc2lvbiB0cmVlcy4gICAobGluZSAgICA2KQoqIE9NUF9TRUNUSU9OOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4cHJlc3Npb24gdHJlZXMuICAgKGxpbmUgICAgNikKKiBPTVBfU0VDVElPTlM6ICAgICAgICAgICAgICAgICAgICAgICAgICBFeHByZXNzaW9uIHRyZWVzLiAgIChsaW5lICAgIDYpCiogT01QX1NJTkdMRTogICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhwcmVzc2lvbiB0cmVlcy4gICAobGluZSAgICA2KQoqICdvbmVfY21wbE0yJyBpbnN0cnVjdGlvbiBwYXR0ZXJuOiAgICAgIFN0YW5kYXJkIE5hbWVzLiAgICAgKGxpbmUgIDY0MCkKKiBvcGVyYW5kIGFjY2VzczogICAgICAgICAgICAgICAgICAgICAgICBBY2Nlc3NvcnMuICAgICAgICAgIChsaW5lICAgIDYpCiogT3BlcmFuZCBBY2Nlc3MgUm91dGluZXM6ICAgICAgICAgICAgICAgU3RhdGVtZW50IE9wZXJhbmRzLiAobGluZSAgMTE2KQoqIG9wZXJhbmQgY29uc3RyYWludHM6ICAgICAgICAgICAgICAgICAgIENvbnN0cmFpbnRzLiAgICAgICAgKGxpbmUgICAgNikKKiBPcGVyYW5kIEl0ZXJhdG9yczogICAgICAgICAgICAgICAgICAgICBTdGF0ZW1lbnQgT3BlcmFuZHMuIChsaW5lICAxMTYpCiogb3BlcmFuZCBwcmVkaWNhdGVzOiAgICAgICAgICAgICAgICAgICAgUHJlZGljYXRlcy4gICAgICAgICAobGluZSAgICA2KQoqIG9wZXJhbmQgc3Vic3RpdHV0aW9uOiAgICAgICAgICAgICAgICAgIE91dHB1dCBUZW1wbGF0ZS4gICAgKGxpbmUgICAgNikKKiBvcGVyYW5kczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZW1lbnQgT3BlcmFuZHMuIChsaW5lICAgIDYpCiogb3BlcmFuZHMgPDE+OiAgICAgICAgICAgICAgICAgICAgICAgICAgUGF0dGVybnMuICAgICAgICAgICAobGluZSAgIDUzKQoqIG9wZXJhdG9yIHByZWRpY2F0ZXM6ICAgICAgICAgICAgICAgICAgIFByZWRpY2F0ZXMuICAgICAgICAgKGxpbmUgICAgNikKKiAnb3B0Yy1nZW4uYXdrJzogICAgICAgICAgICAgICAgICAgICAgICBPcHRpb25zLiAgICAgICAgICAgIChsaW5lICAgIDYpCiogT3B0aW1pemF0aW9uIGluZnJhc3RydWN0dXJlIGZvciBHSU1QTEU6IFRyZWUgU1NBLiAgICAgICAgICAobGluZSAgICA2KQoqIE9QVElNSVpBVElPTl9PUFRJT05TOiAgICAgICAgICAgICAgICAgIFJ1bi10aW1lIFRhcmdldC4gICAgKGxpbmUgIDExOSkKKiBPUFRJTUlaRV9NT0RFX1NXSVRDSElORzogICAgICAgICAgICAgICBNb2RlIFN3aXRjaGluZy4gICAgIChsaW5lICAgIDgpCiogb3B0aW9uIHNwZWNpZmljYXRpb24gZmlsZXM6ICAgICAgICAgICAgT3B0aW9ucy4gICAgICAgICAgICAobGluZSAgICA2KQoqIG9wdGlvbmFsIGhhcmR3YXJlIG9yIHN5c3RlbSBmZWF0dXJlczogIFJ1bi10aW1lIFRhcmdldC4gICAgKGxpbmUgICA1OSkKKiBvcHRpb25zLCBkaXJlY3Rvcnkgc2VhcmNoOiAgICAgICAgICAgICBJbmNsdWRpbmcgUGF0dGVybnMuIChsaW5lICAgNDcpCiogT1BUSU9OX0RFRkFVTFRfU1BFQ1M6ICAgICAgICAgICAgICAgICAgRHJpdmVyLiAgICAgICAgICAgICAobGluZSAgIDg3KQoqIG9yZGVyIG9mIHJlZ2lzdGVyIGFsbG9jYXRpb246ICAgICAgICAgIEFsbG9jYXRpb24gT3JkZXIuICAgKGxpbmUgICAgNikKKiBPUkRFUkVEX0VYUFI6ICAgICAgICAgICAgICAgICAgICAgICAgICBFeHByZXNzaW9uIHRyZWVzLiAgIChsaW5lICAgIDYpCiogT3JkZXJpbmcgb2YgUGF0dGVybnM6ICAgICAgICAgICAgICAgICAgUGF0dGVybiBPcmRlcmluZy4gICAobGluZSAgICA2KQoqIE9SREVSX1JFR1NfRk9SX0xPQ0FMX0FMTE9DOiAgICAgICAgICAgIEFsbG9jYXRpb24gT3JkZXIuICAgKGxpbmUgICAyMikKKiBPUklHSU5BTF9SRUdOTzogICAgICAgICAgICAgICAgICAgICAgICBTcGVjaWFsIEFjY2Vzc29ycy4gIChsaW5lICAgMzkpCiogb3RoZXIgcmVnaXN0ZXIgY29uc3RyYWludHM6ICAgICAgICAgICAgU2ltcGxlIENvbnN0cmFpbnRzLiAobGluZSAgMTYwKQoqIE9VVEdPSU5HX1JFR05POiAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIEJhc2ljcy4gICAgKGxpbmUgICA5NykKKiBPVVRHT0lOR19SRUdfUEFSTV9TVEFDS19TUEFDRTogICAgICAgICBTdGFjayBBcmd1bWVudHMuICAgIChsaW5lICAgNjgpCiogb3V0cHV0IG9mIGFzc2VtYmxlciBjb2RlOiAgICAgICAgICAgICAgRmlsZSBGcmFtZXdvcmsuICAgICAobGluZSAgICA2KQoqIG91dHB1dCBzdGF0ZW1lbnRzOiAgICAgICAgICAgICAgICAgICAgIE91dHB1dCBTdGF0ZW1lbnQuICAgKGxpbmUgICAgNikKKiBvdXRwdXQgdGVtcGxhdGVzOiAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQgVGVtcGxhdGUuICAgIChsaW5lICAgIDYpCiogT1VUUFVUX0FERFJfQ09OU1RfRVhUUkE6ICAgICAgICAgICAgICAgRGF0YSBPdXRwdXQuICAgICAgICAobGluZSAgIDM4KQoqIG91dHB1dF9hc21faW5zbjogICAgICAgICAgICAgICAgICAgICAgIE91dHB1dCBTdGF0ZW1lbnQuICAgKGxpbmUgICA1MikKKiBPVVRQVVRfUVVPVEVEX1NUUklORzogICAgICAgICAgICAgICAgICBGaWxlIEZyYW1ld29yay4gICAgIChsaW5lICAgNzQpCiogT1ZFUkxPQUQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb25zLiAgICAgICAgICAobGluZSAgICA2KQoqIE9WRVJSSURFX09QVElPTlM6ICAgICAgICAgICAgICAgICAgICAgIFJ1bi10aW1lIFRhcmdldC4gICAgKGxpbmUgIDEwMykKKiBPVkxfQ1VSUkVOVDogICAgICAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbnMuICAgICAgICAgIChsaW5lICAgIDYpCiogT1ZMX05FWFQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb25zLiAgICAgICAgICAobGluZSAgICA2KQoqICdwJyBpbiBjb25zdHJhaW50OiAgICAgICAgICAgICAgICAgICAgIFNpbXBsZSBDb25zdHJhaW50cy4gKGxpbmUgIDE1MSkKKiBQQURfVkFSQVJHU19ET1dOOiAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBBcmd1bWVudHMuIChsaW5lICAyMDQpCiogcGFyYWxsZWw6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2lkZSBFZmZlY3RzLiAgICAgICAobGluZSAgMjAwKQoqIHBhcmFtZXRlcnMsIGMrKyBhYmk6ICAgICAgICAgICAgICAgICAgIEMrKyBBQkkuICAgICAgICAgICAgKGxpbmUgICAgNikKKiBwYXJhbWV0ZXJzLCBtaXNjZWxsYW5lb3VzOiAgICAgICAgICAgICBNaXNjLiAgICAgICAgICAgICAgIChsaW5lICAgIDYpCiogcGFyYW1ldGVycywgcHJlY29tcGlsZWQgaGVhZGVyczogICAgICAgUENIIFRhcmdldC4gICAgICAgICAobGluZSAgICA2KQoqIHBhcmFtTl9pczogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUWSBPcHRpb25zLiAgICAgICAgKGxpbmUgIDEzMykKKiBwYXJhbV9pczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVFkgT3B0aW9ucy4gICAgICAgIChsaW5lICAxMTQpCiogcGFyaXR5OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJpdGhtZXRpYy4gICAgICAgICAobGluZSAgMjI5KQoqICdwYXJpdHlNMicgaW5zdHJ1Y3Rpb24gcGF0dGVybjogICAgICAgIFN0YW5kYXJkIE5hbWVzLiAgICAgKGxpbmUgIDYzNCkKKiBQQVJNX0JPVU5EQVJZOiAgICAgICAgICAgICAgICAgICAgICAgICBTdG9yYWdlIExheW91dC4gICAgIChsaW5lICAxNDEpCiogUEFSTV9ERUNMOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVjbGFyYXRpb25zLiAgICAgICAobGluZSAgICA2KQoqIFBBUlNFX0xERF9PVVRQVVQ6ICAgICAgICAgICAgICAgICAgICAgIE1hY3JvcyBmb3IgSW5pdGlhbGl6YXRpb24uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMTIwKQoqIHBhc3NlcyBhbmQgZmlsZXMgb2YgdGhlIGNvbXBpbGVyOiAgICAgIFBhc3Nlcy4gICAgICAgICAgICAgKGxpbmUgICAgNikKKiBwYXNzaW5nIGFyZ3VtZW50czogICAgICAgICAgICAgICAgICAgICBJbnRlcmZhY2UuICAgICAgICAgIChsaW5lICAgMzYpCiogUEFUSF9TRVBBUkFUT1I6ICAgICAgICAgICAgICAgICAgICAgICAgRmlsZXN5c3RlbS4gICAgICAgICAobGluZSAgIDMxKQoqIFBBVFRFUk46ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc25zLiAgICAgICAgICAgICAgKGxpbmUgIDI0NSkKKiBwYXR0ZXJuIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAgICBQYXR0ZXJucy4gICAgICAgICAgIChsaW5lICAgNDMpCiogcGF0dGVybiBuYW1lczogICAgICAgICAgICAgICAgICAgICAgICAgU3RhbmRhcmQgTmFtZXMuICAgICAobGluZSAgICA2KQoqIFBhdHRlcm4gT3JkZXJpbmc6ICAgICAgICAgICAgICAgICAgICAgIFBhdHRlcm4gT3JkZXJpbmcuICAgKGxpbmUgICAgNikKKiBwYXR0ZXJuczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXR0ZXJucy4gICAgICAgICAgIChsaW5lICAgIDYpCiogcGM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVncyBhbmQgTWVtb3J5LiAgICAobGluZSAgMjM0KQoqICdwYycgYW5kIGF0dHJpYnV0ZXM6ICAgICAgICAgICAgICAgICAgIEluc24gTGVuZ3Rocy4gICAgICAgKGxpbmUgICAyMCkKKiAncGMnLCBSVEwgc2hhcmluZzogICAgICAgICAgICAgICAgICAgICBTaGFyaW5nLiAgICAgICAgICAgIChsaW5lICAgMjUpCiogUENDX0JJVEZJRUxEX1RZUEVfTUFUVEVSUzogICAgICAgICAgICAgU3RvcmFnZSBMYXlvdXQuICAgICAobGluZSAgMjYwKQoqIFBDQ19TVEFUSUNfU1RSVUNUX1JFVFVSTjogICAgICAgICAgICAgIEFnZ3JlZ2F0ZSBSZXR1cm4uICAgKGxpbmUgICA2MykKKiBQQ19SRUdOVU06ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBCYXNpY3MuICAgIChsaW5lICAxMTEpCiogcGNfcnR4OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVncyBhbmQgTWVtb3J5LiAgICAobGluZSAgMjM5KQoqIFBESW1vZGU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hY2hpbmUgTW9kZXMuICAgICAgKGxpbmUgICA0MCkKKiBwZWVwaG9sZSBvcHRpbWl6YXRpb24sIFJUTCByZXByZXNlbnRhdGlvbjogU2lkZSBFZmZlY3RzLiAgIChsaW5lICAyMzQpCiogcGVlcGhvbGUgb3B0aW1pemVyIGRlZmluaXRpb25zOiAgICAgICAgUGVlcGhvbGUgRGVmaW5pdGlvbnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgICA2KQoqIHBlci1mdW5jdGlvbiBkYXRhOiAgICAgICAgICAgICAgICAgICAgIFBlci1GdW5jdGlvbiBEYXRhLiAgKGxpbmUgICAgNikKKiBwZXJjZW50IHNpZ246ICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQgVGVtcGxhdGUuICAgIChsaW5lICAgIDYpCiogUEhJIG5vZGVzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1NBLiAgICAgICAgICAgICAgICAobGluZSAgIDMxKQoqIFBISV9BUkdfREVGOiAgICAgICAgICAgICAgICAgICAgICAgICAgIFNTQS4gICAgICAgICAgICAgICAgKGxpbmUgICA3MCkKKiBQSElfQVJHX0VER0U6ICAgICAgICAgICAgICAgICAgICAgICAgICBTU0EuICAgICAgICAgICAgICAgIChsaW5lICAgNjcpCiogUEhJX0FSR19FTFQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgU1NBLiAgICAgICAgICAgICAgICAobGluZSAgIDYyKQoqIFBISV9OVU1fQVJHUzogICAgICAgICAgICAgICAgICAgICAgICAgIFNTQS4gICAgICAgICAgICAgICAgKGxpbmUgICA1OCkKKiBQSElfUkVTVUxUOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTU0EuICAgICAgICAgICAgICAgIChsaW5lICAgNTUpCiogUElDOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUElDLiAgICAgICAgICAgICAgICAobGluZSAgICA2KQoqIFBJQ19PRkZTRVRfVEFCTEVfUkVHTlVNOiAgICAgICAgICAgICAgIFBJQy4gICAgICAgICAgICAgICAgKGxpbmUgICAxNSkKKiBQSUNfT0ZGU0VUX1RBQkxFX1JFR19DQUxMX0NMT0JCRVJFRDogICBQSUMuICAgICAgICAgICAgICAgIChsaW5lICAgMjUpCiogcGlwZWxpbmUgaGF6YXJkIHJlY29nbml6ZXI6ICAgICAgICAgICAgUHJvY2Vzc29yIHBpcGVsaW5lIGRlc2NyaXB0aW9uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICAgNikKKiBwaXBlbGluZSBoYXphcmQgcmVjb2duaXplciA8MT46ICAgICAgICBQcm9jZXNzb3IgcGlwZWxpbmUgZGVzY3JpcHRpb24uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDUzKQoqIHBsdXM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyaXRobWV0aWMuICAgICAgICAgKGxpbmUgICAxNCkKKiAncGx1cycgYW5kIGF0dHJpYnV0ZXM6ICAgICAgICAgICAgICAgICBFeHByZXNzaW9ucy4gICAgICAgIChsaW5lICAgNjQpCiogJ3BsdXMnLCBjYW5vbmljYWxpemF0aW9uIG9mOiAgICAgICAgICAgSW5zbiBDYW5vbmljYWxpemF0aW9ucy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgMjcpCiogUExVU19FWFBSOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhwcmVzc2lvbiB0cmVlcy4gICAobGluZSAgICA2KQoqIFBtb2RlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1pc2MuICAgICAgICAgICAgICAgKGxpbmUgIDM0MikKKiBwbW9kZV9yZWdpc3Rlcl9vcGVyYW5kOiAgICAgICAgICAgICAgICBNYWNoaW5lLUluZGVwZW5kZW50IFByZWRpY2F0ZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDM0KQoqIHBvaW50ZXI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGVzLiAgICAgICAgICAgICAgKGxpbmUgICAgNikKKiBQT0lOVEVSU19FWFRFTkRfVU5TSUdORUQ6ICAgICAgICAgICAgICBTdG9yYWdlIExheW91dC4gICAgIChsaW5lICAgODcpCiogUE9JTlRFUl9QTFVTX0VYUFI6ICAgICAgICAgICAgICAgICAgICAgRXhwcmVzc2lvbiB0cmVlcy4gICAobGluZSAgICA2KQoqIFBPSU5URVJfU0laRTogICAgICAgICAgICAgICAgICAgICAgICAgIFN0b3JhZ2UgTGF5b3V0LiAgICAgKGxpbmUgICA4MSkKKiBQT0lOVEVSX1RZUEU6ICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlcy4gICAgICAgICAgICAgIChsaW5lICAgIDYpCiogcG9wY291bnQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJpdGhtZXRpYy4gICAgICAgICAobGluZSAgMjI1KQoqICdwb3Bjb3VudE0yJyBpbnN0cnVjdGlvbiBwYXR0ZXJuOiAgICAgIFN0YW5kYXJkIE5hbWVzLiAgICAgKGxpbmUgIDYyOCkKKiBwb3Bfb3BlcmFuZDogICAgICAgICAgICAgICAgICAgICAgICAgICBNYWNoaW5lLUluZGVwZW5kZW50IFByZWRpY2F0ZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDg3KQoqIHBvcnRhYmlsaXR5OiAgICAgICAgICAgICAgICAgICAgICAgICAgIFBvcnRhYmlsaXR5LiAgICAgICAgKGxpbmUgICAgNikKKiBwb3NpdGlvbiBpbmRlcGVuZGVudCBjb2RlOiAgICAgICAgICAgICBQSUMuICAgICAgICAgICAgICAgIChsaW5lICAgIDYpCiogUE9TVERFQ1JFTUVOVF9FWFBSOiAgICAgICAgICAgICAgICAgICAgRXhwcmVzc2lvbiB0cmVlcy4gICAobGluZSAgICA2KQoqIFBPU1RJTkNSRU1FTlRfRVhQUjogICAgICAgICAgICAgICAgICAgIEV4cHJlc3Npb24gdHJlZXMuICAgKGxpbmUgICAgNikKKiBwb3N0X2RlYzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmNkZWMuICAgICAgICAgICAgIChsaW5lICAgMjUpCiogcG9zdF9pbmM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5jZGVjLiAgICAgICAgICAgICAobGluZSAgIDMwKQoqIHBvc3RfbW9kaWZ5OiAgICAgICAgICAgICAgICAgICAgICAgICAgIEluY2RlYy4gICAgICAgICAgICAgKGxpbmUgICAzMykKKiBQT1dJX01BWF9NVUxUUzogICAgICAgICAgICAgICAgICAgICAgICBNaXNjLiAgICAgICAgICAgICAgIChsaW5lICA4MzMpCiogJ3Bvd00zJyBpbnN0cnVjdGlvbiBwYXR0ZXJuOiAgICAgICAgICAgU3RhbmRhcmQgTmFtZXMuICAgICAobGluZSAgNTAyKQoqIHByYWdtYTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1pc2MuICAgICAgICAgICAgICAgKGxpbmUgIDM4MCkKKiBwcmFnbWEgPDE+OiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNaXNjLiAgICAgICAgICAgICAgIChsaW5lICA0MzUpCiogcHJhZ21hIDwyPjogICAgICAgICAgICAgICAgICAgICAgICAgICAgTWlzYy4gICAgICAgICAgICAgICAobGluZSAgNDY0KQoqIHByYWdtYSA8Mz46ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1pc2MuICAgICAgICAgICAgICAgKGxpbmUgIDQ4NSkKKiBQUkVERUNSRU1FTlRfRVhQUjogICAgICAgICAgICAgICAgICAgICBFeHByZXNzaW9uIHRyZWVzLiAgIChsaW5lICAgIDYpCiogcHJlZGVmaW5lZCBtYWNyb3M6ICAgICAgICAgICAgICAgICAgICAgUnVuLXRpbWUgVGFyZ2V0LiAgICAobGluZSAgICA2KQoqIHByZWRpY2F0ZXM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByZWRpY2F0ZXMuICAgICAgICAgKGxpbmUgICAgNikKKiBwcmVkaWNhdGVzIGFuZCBtYWNoaW5lIG1vZGVzOiAgICAgICAgICBQcmVkaWNhdGVzLiAgICAgICAgIChsaW5lICAgMzEpCiogcHJlZGljYXRpb246ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29uZGl0aW9uYWwgRXhlY3V0aW9uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICAgNikKKiBwcmVkaWN0LmRlZjogICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9maWxlIGluZm9ybWF0aW9uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICAyNCkKKiBQUkVGRVJSRURfREVCVUdHSU5HX1RZUEU6ICAgICAgICAgICAgICBBbGwgRGVidWdnZXJzLiAgICAgIChsaW5lICAgNDEpCiogUFJFRkVSUkVEX09VVFBVVF9SRUxPQURfQ0xBU1M6ICAgICAgICAgUmVnaXN0ZXIgQ2xhc3Nlcy4gICAobGluZSAgMjI3KQoqIFBSRUZFUlJFRF9SRUxPQURfQ0xBU1M6ICAgICAgICAgICAgICAgIFJlZ2lzdGVyIENsYXNzZXMuICAgKGxpbmUgIDE5MikKKiBQUkVGRVJSRURfU1RBQ0tfQk9VTkRBUlk6ICAgICAgICAgICAgICBTdG9yYWdlIExheW91dC4gICAgIChsaW5lICAxNTUpCiogcHJlZmV0Y2g6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2lkZSBFZmZlY3RzLiAgICAgICAobGluZSAgMzA3KQoqICdwcmVmZXRjaCcgaW5zdHJ1Y3Rpb24gcGF0dGVybjogICAgICAgIFN0YW5kYXJkIE5hbWVzLiAgICAgKGxpbmUgMTM3MikKKiBQUkVJTkNSRU1FTlRfRVhQUjogICAgICAgICAgICAgICAgICAgICBFeHByZXNzaW9uIHRyZWVzLiAgIChsaW5lICAgIDYpCiogcHJlc2VuY2Vfc2V0OiAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvY2Vzc29yIHBpcGVsaW5lIGRlc2NyaXB0aW9uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDIxMykKKiBwcmVzZXJ2aW5nIFNTQSBmb3JtOiAgICAgICAgICAgICAgICAgICBTU0EuICAgICAgICAgICAgICAgIChsaW5lICAgNzYpCiogcHJlc2VydmluZyB2aXJ0dWFsIFNTQSBmb3JtOiAgICAgICAgICAgU1NBLiAgICAgICAgICAgICAgICAobGluZSAgMTg2KQoqIHByZXZfYWN0aXZlX2luc246ICAgICAgICAgICAgICAgICAgICAgIGRlZmluZV9wZWVwaG9sZS4gICAgKGxpbmUgICA2MCkKKiBwcmV2X2NjMF9zZXR0ZXI6ICAgICAgICAgICAgICAgICAgICAgICBKdW1wIFBhdHRlcm5zLiAgICAgIChsaW5lICAgNjQpCiogUFJFVl9JTlNOOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zbnMuICAgICAgICAgICAgICAobGluZSAgIDI2KQoqIHByZV9kZWM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluY2RlYy4gICAgICAgICAgICAgKGxpbmUgICAgOCkKKiBQUkVfR0NDM19EV0FSRl9GUkFNRV9SRUdJU1RFUlM6ICAgICAgICBGcmFtZSBSZWdpc3RlcnMuICAgIChsaW5lICAxMDkpCiogcHJlX2luYzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5jZGVjLiAgICAgICAgICAgICAobGluZSAgIDIyKQoqIHByZV9tb2RpZnk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluY2RlYy4gICAgICAgICAgICAgKGxpbmUgICA1MikKKiBQUklOVF9PUEVSQU5EOiAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdGlvbiBPdXRwdXQuIChsaW5lICAgNjcpCiogUFJJTlRfT1BFUkFORF9BRERSRVNTOiAgICAgICAgICAgICAgICAgSW5zdHJ1Y3Rpb24gT3V0cHV0LiAobGluZSAgIDk0KQoqIFBSSU5UX09QRVJBTkRfUFVOQ1RfVkFMSURfUDogICAgICAgICAgIEluc3RydWN0aW9uIE91dHB1dC4gKGxpbmUgICA4NykKKiBwcm9jZXNzb3IgZnVuY3Rpb25hbCB1bml0czogICAgICAgICAgICBQcm9jZXNzb3IgcGlwZWxpbmUgZGVzY3JpcHRpb24uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgICA2KQoqIHByb2Nlc3NvciBmdW5jdGlvbmFsIHVuaXRzIDwxPjogICAgICAgIFByb2Nlc3NvciBwaXBlbGluZSBkZXNjcmlwdGlvbi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgNjgpCiogcHJvY2Vzc29yIHBpcGVsaW5lIGRlc2NyaXB0aW9uOiAgICAgICAgUHJvY2Vzc29yIHBpcGVsaW5lIGRlc2NyaXB0aW9uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICAgNikKKiBwcm9kdWN0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcml0aG1ldGljLiAgICAgICAgIChsaW5lICAgOTMpCiogcHJvZmlsZSBmZWVkYmFjazogICAgICAgICAgICAgICAgICAgICAgUHJvZmlsZSBpbmZvcm1hdGlvbi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgMTQpCiogcHJvZmlsZSByZXByZXNlbnRhdGlvbjogICAgICAgICAgICAgICAgUHJvZmlsZSBpbmZvcm1hdGlvbi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgIDYpCiogUFJPRklMRV9CRUZPUkVfUFJPTE9HVUU6ICAgICAgICAgICAgICAgUHJvZmlsaW5nLiAgICAgICAgICAobGluZSAgIDM0KQoqIFBST0ZJTEVfSE9PSzogICAgICAgICAgICAgICAgICAgICAgICAgIFByb2ZpbGluZy4gICAgICAgICAgKGxpbmUgICAyMikKKiBwcm9maWxpbmcsIGNvZGUgZ2VuZXJhdGlvbjogICAgICAgICAgICBQcm9maWxpbmcuICAgICAgICAgIChsaW5lICAgIDYpCiogcHJvZ3JhbSBjb3VudGVyOiAgICAgICAgICAgICAgICAgICAgICAgUmVncyBhbmQgTWVtb3J5LiAgICAobGluZSAgMjM1KQoqIHByb2xvZ3VlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uIEVudHJ5LiAgICAgKGxpbmUgICAgNikKKiAncHJvbG9ndWUnIGluc3RydWN0aW9uIHBhdHRlcm46ICAgICAgICBTdGFuZGFyZCBOYW1lcy4gICAgIChsaW5lIDEzMTgpCiogUFJPTU9URV9GVU5DVElPTl9NT0RFOiAgICAgICAgICAgICAgICAgU3RvcmFnZSBMYXlvdXQuICAgICAobGluZSAgMTIwKQoqIFBST01PVEVfTU9ERTogICAgICAgICAgICAgICAgICAgICAgICAgIFN0b3JhZ2UgTGF5b3V0LiAgICAgKGxpbmUgICA5OCkKKiBwc2V1ZG8gcmVnaXN0ZXJzOiAgICAgICAgICAgICAgICAgICAgICBSZWdzIGFuZCBNZW1vcnkuICAgIChsaW5lICAgIDkpCiogUFNJbW9kZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFjaGluZSBNb2Rlcy4gICAgICAobGluZSAgIDMyKQoqIFBUUkRJRkZfVFlQRTogICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgTGF5b3V0LiAgICAgICAgKGxpbmUgIDE4MykKKiBQVFJNRU1fQ1NUOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeHByZXNzaW9uIHRyZWVzLiAgIChsaW5lICAgIDYpCiogUFRSTUVNX0NTVF9DTEFTUzogICAgICAgICAgICAgICAgICAgICAgRXhwcmVzc2lvbiB0cmVlcy4gICAobGluZSAgICA2KQoqIFBUUk1FTV9DU1RfTUVNQkVSOiAgICAgICAgICAgICAgICAgICAgIEV4cHJlc3Npb24gdHJlZXMuICAgKGxpbmUgICAgNikKKiBwdXJnZV9kZWFkX2VkZ2VzOiAgICAgICAgICAgICAgICAgICAgICBFZGdlcy4gICAgICAgICAgICAgIChsaW5lICAxMDMpCiogcHVyZ2VfZGVhZF9lZGdlcyA8MT46ICAgICAgICAgICAgICAgICAgTWFpbnRhaW5pbmcgdGhlIENGRy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgOTIpCiogcHVzaCBhZGRyZXNzIGluc3RydWN0aW9uOiAgICAgICAgICAgICAgU2ltcGxlIENvbnN0cmFpbnRzLiAobGluZSAgMTUxKQoqICdwdXNoTTEnIGluc3RydWN0aW9uIHBhdHRlcm46ICAgICAgICAgIFN0YW5kYXJkIE5hbWVzLiAgICAgKGxpbmUgIDIwNykKKiBQVVNIX0FSR1M6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGFjayBBcmd1bWVudHMuICAgIChsaW5lICAgMTcpCiogUFVTSF9BUkdTX1JFVkVSU0VEOiAgICAgICAgICAgICAgICAgICAgU3RhY2sgQXJndW1lbnRzLiAgICAobGluZSAgIDI1KQoqIHB1c2hfb3BlcmFuZDogICAgICAgICAgICAgICAgICAgICAgICAgIE1hY2hpbmUtSW5kZXBlbmRlbnQgUHJlZGljYXRlcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgODApCiogcHVzaF9yZWxvYWQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkcmVzc2luZyBNb2Rlcy4gICAobGluZSAgMTU3KQoqIFBVU0hfUk9VTkRJTkc6ICAgICAgICAgICAgICAgICAgICAgICAgIFN0YWNrIEFyZ3VtZW50cy4gICAgKGxpbmUgICAzMSkKKiBQVVRfQ09ERTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSVEwgT2JqZWN0cy4gICAgICAgIChsaW5lICAgNDcpCiogUFVUX01PREU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFjaGluZSBNb2Rlcy4gICAgICAobGluZSAgMjgyKQoqIFBVVF9SRUdfTk9URV9LSU5EOiAgICAgICAgICAgICAgICAgICAgIEluc25zLiAgICAgICAgICAgICAgKGxpbmUgIDMwNikKKiBQVVRfU0RCXzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTREIgYW5kIERXQVJGLiAgICAgIChsaW5lICAgNjIpCiogUUNtb2RlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFjaGluZSBNb2Rlcy4gICAgICAobGluZSAgMTk2KQoqIFFGbW9kZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hY2hpbmUgTW9kZXMuICAgICAgKGxpbmUgICA1NCkKKiBRSW1vZGU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWNoaW5lIE1vZGVzLiAgICAgIChsaW5lICAgMjUpCiogJ1FJbW9kZScsIGluICdpbnNuJzogICAgICAgICAgICAgICAgICAgSW5zbnMuICAgICAgICAgICAgICAobGluZSAgMjI5KQoqIFFRbW9kZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hY2hpbmUgTW9kZXMuICAgICAgKGxpbmUgIDEwMykKKiBxdWFsaWZpZWQgdHlwZTogICAgICAgICAgICAgICAgICAgICAgICBUeXBlcy4gICAgICAgICAgICAgIChsaW5lICAgIDYpCiogcXVlcnlpbmcgZnVuY3Rpb24gdW5pdCByZXNlcnZhdGlvbnM6ICAgUHJvY2Vzc29yIHBpcGVsaW5lIGRlc2NyaXB0aW9uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA5MCkKKiBxdWVzdGlvbiBtYXJrOiAgICAgICAgICAgICAgICAgICAgICAgICBNdWx0aS1BbHRlcm5hdGl2ZS4gIChsaW5lICAgNDEpCiogcXVvdGllbnQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJpdGhtZXRpYy4gICAgICAgICAobGluZSAgMTEyKQoqICdyJyBpbiBjb25zdHJhaW50OiAgICAgICAgICAgICAgICAgICAgIFNpbXBsZSBDb25zdHJhaW50cy4gKGxpbmUgICA1MykKKiBSQU5HRV9URVNUX05PTl9TSE9SVF9DSVJDVUlUOiAgICAgICAgICBDb3N0cy4gICAgICAgICAgICAgIChsaW5lICAxOTcpCiogUkRJVl9FWFBSOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhwcmVzc2lvbiB0cmVlcy4gICAobGluZSAgICA2KQoqIFJFQURPTkxZX0RBVEFfU0VDVElPTl9BU01fT1A6ICAgICAgICAgIFNlY3Rpb25zLiAgICAgICAgICAgKGxpbmUgICA2MikKKiByZWFsIG9wZXJhbmRzOiAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZW1lbnQgT3BlcmFuZHMuIChsaW5lICAgIDYpCiogUkVBTFBBUlRfRVhQUjogICAgICAgICAgICAgICAgICAgICAgICAgRXhwcmVzc2lvbiB0cmVlcy4gICAobGluZSAgICA2KQoqIFJFQUxfQVJJVEhNRVRJQzogICAgICAgICAgICAgICAgICAgICAgIEZsb2F0aW5nIFBvaW50LiAgICAgKGxpbmUgICA2NCkKKiBSRUFMX0NTVDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeHByZXNzaW9uIHRyZWVzLiAgIChsaW5lICAgIDYpCiogUkVBTF9MSUJHQ0NfU1BFQzogICAgICAgICAgICAgICAgICAgICAgRHJpdmVyLiAgICAgICAgICAgICAobGluZSAgMTg2KQoqIFJFQUxfTk1fRklMRV9OQU1FOiAgICAgICAgICAgICAgICAgICAgIE1hY3JvcyBmb3IgSW5pdGlhbGl6YXRpb24uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMTA1KQoqIFJFQUxfVFlQRTogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGVzLiAgICAgICAgICAgICAgKGxpbmUgICAgNikKKiBSRUFMX1ZBTFVFU19FUVVBTDogICAgICAgICAgICAgICAgICAgICBGbG9hdGluZyBQb2ludC4gICAgIChsaW5lICAgMzEpCiogUkVBTF9WQUxVRVNfTEVTUzogICAgICAgICAgICAgICAgICAgICAgRmxvYXRpbmcgUG9pbnQuICAgICAobGluZSAgIDM3KQoqIFJFQUxfVkFMVUVfQUJTOiAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0aW5nIFBvaW50LiAgICAgKGxpbmUgICA4MSkKKiBSRUFMX1ZBTFVFX0FUT0Y6ICAgICAgICAgICAgICAgICAgICAgICBGbG9hdGluZyBQb2ludC4gICAgIChsaW5lICAgNDgpCiogUkVBTF9WQUxVRV9GSVg6ICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRpbmcgUG9pbnQuICAgICAobGluZSAgIDQwKQoqIFJFQUxfVkFMVUVfRlJPTV9JTlQ6ICAgICAgICAgICAgICAgICAgIEZsb2F0aW5nIFBvaW50LiAgICAgKGxpbmUgICA5NykKKiBSRUFMX1ZBTFVFX0lTSU5GOiAgICAgICAgICAgICAgICAgICAgICBGbG9hdGluZyBQb2ludC4gICAgIChsaW5lICAgNTgpCiogUkVBTF9WQUxVRV9JU05BTjogICAgICAgICAgICAgICAgICAgICAgRmxvYXRpbmcgUG9pbnQuICAgICAobGluZSAgIDYxKQoqIFJFQUxfVkFMVUVfTkVHQVRFOiAgICAgICAgICAgICAgICAgICAgIEZsb2F0aW5nIFBvaW50LiAgICAgKGxpbmUgICA3OCkKKiBSRUFMX1ZBTFVFX05FR0FUSVZFOiAgICAgICAgICAgICAgICAgICBGbG9hdGluZyBQb2ludC4gICAgIChsaW5lICAgNTUpCiogUkVBTF9WQUxVRV9UT19JTlQ6ICAgICAgICAgICAgICAgICAgICAgRmxvYXRpbmcgUG9pbnQuICAgICAobGluZSAgIDkxKQoqIFJFQUxfVkFMVUVfVE9fVEFSR0VUX0RFQ0lNQUwxMjg6ICAgICAgIERhdGEgT3V0cHV0LiAgICAgICAgKGxpbmUgIDE0MikKKiBSRUFMX1ZBTFVFX1RPX1RBUkdFVF9ERUNJTUFMMzI6ICAgICAgICBEYXRhIE91dHB1dC4gICAgICAgIChsaW5lICAxNDApCiogUkVBTF9WQUxVRV9UT19UQVJHRVRfREVDSU1BTDY0OiAgICAgICAgRGF0YSBPdXRwdXQuICAgICAgICAobGluZSAgMTQxKQoqIFJFQUxfVkFMVUVfVE9fVEFSR0VUX0RPVUJMRTogICAgICAgICAgIERhdGEgT3V0cHV0LiAgICAgICAgKGxpbmUgIDEzOCkKKiBSRUFMX1ZBTFVFX1RPX1RBUkdFVF9MT05HX0RPVUJMRTogICAgICBEYXRhIE91dHB1dC4gICAgICAgIChsaW5lICAxMzkpCiogUkVBTF9WQUxVRV9UT19UQVJHRVRfU0lOR0xFOiAgICAgICAgICAgRGF0YSBPdXRwdXQuICAgICAgICAobGluZSAgMTM3KQoqIFJFQUxfVkFMVUVfVFJVTkNBVEU6ICAgICAgICAgICAgICAgICAgIEZsb2F0aW5nIFBvaW50LiAgICAgKGxpbmUgICA4NCkKKiBSRUFMX1ZBTFVFX1RZUEU6ICAgICAgICAgICAgICAgICAgICAgICBGbG9hdGluZyBQb2ludC4gICAgIChsaW5lICAgMjUpCiogUkVBTF9WQUxVRV9VTlNJR05FRF9GSVg6ICAgICAgICAgICAgICAgRmxvYXRpbmcgUG9pbnQuICAgICAobGluZSAgIDQzKQoqIHJlY29nbml6aW5nIGluc25zOiAgICAgICAgICAgICAgICAgICAgIFJUTCBUZW1wbGF0ZS4gICAgICAgKGxpbmUgICAgNikKKiByZWNvZ19kYXRhLm9wZXJhbmQ6ICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdGlvbiBPdXRwdXQuIChsaW5lICAgMzkpCiogUkVDT1JEX1RZUEU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZXMuICAgICAgICAgICAgICAobGluZSAgICA2KQoqIFJFQ09SRF9UWVBFIDwxPjogICAgICAgICAgICAgICAgICAgICAgIENsYXNzZXMuICAgICAgICAgICAgKGxpbmUgICAgNikKKiByZWRpcmVjdF9lZGdlX2FuZF9icmFuY2g6ICAgICAgICAgICAgICBQcm9maWxlIGluZm9ybWF0aW9uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA3MSkKKiByZWRpcmVjdF9lZGdlX2FuZF9icmFuY2gsIHJlZGlyZWN0X2p1bXA6IE1haW50YWluaW5nIHRoZSBDRkcuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMTAxKQoqICdyZWR1Y19zbWF4X00nIGluc3RydWN0aW9uIHBhdHRlcm46ICAgIFN0YW5kYXJkIE5hbWVzLiAgICAgKGxpbmUgIDIzNikKKiAncmVkdWNfc21pbl9NJyBpbnN0cnVjdGlvbiBwYXR0ZXJuOiAgICBTdGFuZGFyZCBOYW1lcy4gICAgIChsaW5lICAyMzYpCiogJ3JlZHVjX3NwbHVzX00nIGluc3RydWN0aW9uIHBhdHRlcm46ICAgU3RhbmRhcmQgTmFtZXMuICAgICAobGluZSAgMjQ4KQoqICdyZWR1Y191bWF4X00nIGluc3RydWN0aW9uIHBhdHRlcm46ICAgIFN0YW5kYXJkIE5hbWVzLiAgICAgKGxpbmUgIDI0MikKKiAncmVkdWNfdW1pbl9NJyBpbnN0cnVjdGlvbiBwYXR0ZXJuOiAgICBTdGFuZGFyZCBOYW1lcy4gICAgIChsaW5lICAyNDIpCiogJ3JlZHVjX3VwbHVzX00nIGluc3RydWN0aW9uIHBhdHRlcm46ICAgU3RhbmRhcmQgTmFtZXMuICAgICAobGluZSAgMjU0KQoqIHJlZmVyZW5jZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGVzLiAgICAgICAgICAgICAgKGxpbmUgICAgNikKKiBSRUZFUkVOQ0VfVFlQRTogICAgICAgICAgICAgICAgICAgICAgICBUeXBlcy4gICAgICAgICAgICAgIChsaW5lICAgIDYpCiogcmVnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVncyBhbmQgTWVtb3J5LiAgICAobGluZSAgICA5KQoqICdyZWcnIGFuZCAnL2YnOiAgICAgICAgICAgICAgICAgICAgICAgIEZsYWdzLiAgICAgICAgICAgICAgKGxpbmUgICA5NykKKiAncmVnJyBhbmQgJy9pJzogICAgICAgICAgICAgICAgICAgICAgICBGbGFncy4gICAgICAgICAgICAgIChsaW5lICAgOTIpCiogJ3JlZycgYW5kICcvdic6ICAgICAgICAgICAgICAgICAgICAgICAgRmxhZ3MuICAgICAgICAgICAgICAobGluZSAgMTAxKQoqICdyZWcnLCBSVEwgc2hhcmluZzogICAgICAgICAgICAgICAgICAgIFNoYXJpbmcuICAgICAgICAgICAgKGxpbmUgICAxNykKKiByZWdjbGFzc19mb3JfY29uc3RyYWludDogICAgICAgICAgICAgICBDIENvbnN0cmFpbnQgSW50ZXJmYWNlLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA1OCkKKiByZWdpc3RlciBhbGxvY2F0aW9uIG9yZGVyOiAgICAgICAgICAgICBBbGxvY2F0aW9uIE9yZGVyLiAgIChsaW5lICAgIDYpCiogcmVnaXN0ZXIgY2xhc3MgZGVmaW5pdGlvbnM6ICAgICAgICAgICAgUmVnaXN0ZXIgQ2xhc3Nlcy4gICAobGluZSAgICA2KQoqIHJlZ2lzdGVyIGNsYXNzIHByZWZlcmVuY2UgY29uc3RyYWludHM6IENsYXNzIFByZWZlcmVuY2VzLiAgKGxpbmUgICAgNikKKiByZWdpc3RlciBwYWlyczogICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZXMgaW4gUmVnaXN0ZXJzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA2OSkKKiBSZWdpc3RlciBUcmFuc2ZlciBMYW5ndWFnZSAoUlRMKTogICAgICBSVEwuICAgICAgICAgICAgICAgIChsaW5lICAgIDYpCiogcmVnaXN0ZXIgdXNhZ2U6ICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXJzLiAgICAgICAgICAobGluZSAgICA2KQoqIHJlZ2lzdGVycyBhcmd1bWVudHM6ICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIEFyZ3VtZW50cy4gKGxpbmUgICAgNikKKiByZWdpc3RlcnMgaW4gY29uc3RyYWludHM6ICAgICAgICAgICAgICBTaW1wbGUgQ29uc3RyYWludHMuIChsaW5lICAgNTMpCiogUkVHSVNURVJfTU9WRV9DT1NUOiAgICAgICAgICAgICAgICAgICAgQ29zdHMuICAgICAgICAgICAgICAobGluZSAgICA5KQoqIFJFR0lTVEVSX05BTUVTOiAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0aW9uIE91dHB1dC4gKGxpbmUgICAgOCkKKiByZWdpc3Rlcl9vcGVyYW5kOiAgICAgICAgICAgICAgICAgICAgICBNYWNoaW5lLUluZGVwZW5kZW50IFByZWRpY2F0ZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDI5KQoqIFJFR0lTVEVSX1BSRUZJWDogICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0aW9uIE91dHB1dC4gKGxpbmUgIDEyMikKKiBSRUdJU1RFUl9UQVJHRVRfUFJBR01BUzogICAgICAgICAgICAgICBNaXNjLiAgICAgICAgICAgICAgIChsaW5lICAzODApCiogUkVHTU9ERV9OQVRVUkFMX1NJWkU6ICAgICAgICAgICAgICAgICAgVmFsdWVzIGluIFJlZ2lzdGVycy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgNDkpCiogUkVHTk9fTU9ERV9DT0RFX09LX0ZPUl9CQVNFX1A6ICAgICAgICAgUmVnaXN0ZXIgQ2xhc3Nlcy4gICAobGluZSAgMTY1KQoqIFJFR05PX01PREVfT0tfRk9SX0JBU0VfUDogICAgICAgICAgICAgIFJlZ2lzdGVyIENsYXNzZXMuICAgKGxpbmUgIDE0MykKKiBSRUdOT19NT0RFX09LX0ZPUl9SRUdfQkFTRV9QOiAgICAgICAgICBSZWdpc3RlciBDbGFzc2VzLiAgIChsaW5lICAxNTMpCiogUkVHTk9fT0tfRk9SX0JBU0VfUDogICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgQ2xhc3Nlcy4gICAobGluZSAgMTM3KQoqIFJFR05PX09LX0ZPUl9JTkRFWF9QOiAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIENsYXNzZXMuICAgKGxpbmUgIDE3NykKKiBSRUdOT19SRUdfQ0xBU1M6ICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBDbGFzc2VzLiAgIChsaW5lICAgOTgpCiogcmVnc19ldmVyX2xpdmU6ICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb24gRW50cnkuICAgICAobGluZSAgIDIxKQoqIHJlZ3VsYXIgZXhwcmVzc2lvbnM6ICAgICAgICAgICAgICAgICAgIFByb2Nlc3NvciBwaXBlbGluZSBkZXNjcmlwdGlvbi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgIDYpCiogcmVndWxhciBleHByZXNzaW9ucyA8MT46ICAgICAgICAgICAgICAgUHJvY2Vzc29yIHBpcGVsaW5lIGRlc2NyaXB0aW9uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDEwNSkKKiBSRUdfQUxMT0NfT1JERVI6ICAgICAgICAgICAgICAgICAgICAgICBBbGxvY2F0aW9uIE9yZGVyLiAgIChsaW5lICAgIDgpCiogUkVHX0JSX1BSRUQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zbnMuICAgICAgICAgICAgICAobGluZSAgNTI0KQoqIFJFR19CUl9QUk9COiAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc25zLiAgICAgICAgICAgICAgKGxpbmUgIDUxOCkKKiBSRUdfQlJfUFJPQl9CQVNFLCBCQl9GUkVRX0JBU0UsIGNvdW50OiBQcm9maWxlIGluZm9ybWF0aW9uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA4MikKKiBSRUdfQlJfUFJPQl9CQVNFLCBFREdFX0ZSRVFVRU5DWTogICAgICBQcm9maWxlIGluZm9ybWF0aW9uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA1MikKKiBSRUdfQ0NfU0VUVEVSOiAgICAgICAgICAgICAgICAgICAgICAgICBJbnNucy4gICAgICAgICAgICAgIChsaW5lICA0OTApCiogUkVHX0NDX1VTRVI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zbnMuICAgICAgICAgICAgICAobGluZSAgNDkwKQoqIHJlZ19jbGFzc19jb250ZW50czogICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIEJhc2ljcy4gICAgKGxpbmUgICA1OSkKKiBSRUdfQ0xBU1NfQ09OVEVOVFM6ICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBDbGFzc2VzLiAgIChsaW5lICAgODQpCiogUkVHX0NMQVNTX0ZST01fQ09OU1RSQUlOVDogICAgICAgICAgICAgT2xkIENvbnN0cmFpbnRzLiAgICAobGluZSAgIDMzKQoqIFJFR19DTEFTU19GUk9NX0xFVFRFUjogICAgICAgICAgICAgICAgIE9sZCBDb25zdHJhaW50cy4gICAgKGxpbmUgICAyNSkKKiBSRUdfQ0xBU1NfTkFNRVM6ICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBDbGFzc2VzLiAgIChsaW5lICAgNzkpCiogUkVHX0NST1NTSU5HX0pVTVA6ICAgICAgICAgICAgICAgICAgICAgSW5zbnMuICAgICAgICAgICAgICAobGluZSAgMzgxKQoqIFJFR19ERUFEOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc25zLiAgICAgICAgICAgICAgKGxpbmUgIDMxNykKKiBSRUdfREVBRCwgUkVHX1VOVVNFRDogICAgICAgICAgICAgICAgICBMaXZlbmVzcyBpbmZvcm1hdGlvbi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgMzIpCiogUkVHX0RFUF9BTlRJOiAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zbnMuICAgICAgICAgICAgICAobGluZSAgNTEyKQoqIFJFR19ERVBfT1VUUFVUOiAgICAgICAgICAgICAgICAgICAgICAgIEluc25zLiAgICAgICAgICAgICAgKGxpbmUgIDUwOCkKKiBSRUdfREVQX1RSVUU6ICAgICAgICAgICAgICAgICAgICAgICAgICBJbnNucy4gICAgICAgICAgICAgIChsaW5lICA1MDUpCiogUkVHX0VIX1JFR0lPTiwgRURHRV9BQk5PUk1BTF9DQUxMOiAgICAgRWRnZXMuICAgICAgICAgICAgICAobGluZSAgMTA5KQoqIFJFR19FUVVBTDogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc25zLiAgICAgICAgICAgICAgKGxpbmUgIDM5NikKKiBSRUdfRVFVSVY6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnNucy4gICAgICAgICAgICAgIChsaW5lICAzOTYpCiogUkVHX0VYUFI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3BlY2lhbCBBY2Nlc3NvcnMuICAobGluZSAgIDQ0KQoqIFJFR19GUkFNRV9SRUxBVEVEX0VYUFI6ICAgICAgICAgICAgICAgIEluc25zLiAgICAgICAgICAgICAgKGxpbmUgIDUzMCkKKiBSRUdfRlVOQ1RJT05fVkFMVUVfUDogICAgICAgICAgICAgICAgICBGbGFncy4gICAgICAgICAgICAgIChsaW5lICAgOTIpCiogUkVHX0lOQzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zbnMuICAgICAgICAgICAgICAobGluZSAgMzMzKQoqICdyZWdfbGFiZWwnIGFuZCAnL3YnOiAgICAgICAgICAgICAgICAgIEZsYWdzLiAgICAgICAgICAgICAgKGxpbmUgICA1MCkKKiBSRUdfTEFCRUxfT1BFUkFORDogICAgICAgICAgICAgICAgICAgICBJbnNucy4gICAgICAgICAgICAgIChsaW5lICAzNjMpCiogUkVHX0xBQkVMX1RBUkdFVDogICAgICAgICAgICAgICAgICAgICAgSW5zbnMuICAgICAgICAgICAgICAobGluZSAgMzcyKQoqIFJFR19MSUJDQUxMOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc25zLiAgICAgICAgICAgICAgKGxpbmUgIDQ4MykKKiBSRUdfTElCQ0FMTF9JRDogICAgICAgICAgICAgICAgICAgICAgICBJbnNucy4gICAgICAgICAgICAgIChsaW5lICA1MzUpCiogcmVnX25hbWVzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgQmFzaWNzLiAgICAobGluZSAgIDU5KQoqIHJlZ19uYW1lcyA8MT46ICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0aW9uIE91dHB1dC4gKGxpbmUgICA3OSkKKiBSRUdfTk9OTkVHOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnNucy4gICAgICAgICAgICAgIChsaW5lICAzMzkpCiogUkVHX05PVEVTOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zbnMuICAgICAgICAgICAgICAobGluZSAgMjgxKQoqIFJFR19OT1RFX0tJTkQ6ICAgICAgICAgICAgICAgICAgICAgICAgIEluc25zLiAgICAgICAgICAgICAgKGxpbmUgIDMwNikKKiBSRUdfTk9fQ09ORkxJQ1Q6ICAgICAgICAgICAgICAgICAgICAgICBJbnNucy4gICAgICAgICAgICAgIChsaW5lICAzNDcpCiogUkVHX09GRlNFVDogICAgICAgICAgICAgICAgICAgICAgICAgICAgU3BlY2lhbCBBY2Nlc3NvcnMuICAobGluZSAgIDQ4KQoqIFJFR19PS19TVFJJQ1Q6ICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3NpbmcgTW9kZXMuICAgKGxpbmUgICA2NykKKiBSRUdfUEFSTV9TVEFDS19TUEFDRTogICAgICAgICAgICAgICAgICBTdGFjayBBcmd1bWVudHMuICAgIChsaW5lICAgNTUpCiogJ1JFR19QQVJNX1NUQUNLX1NQQUNFJywgYW5kICdGVU5DVElPTl9BUkcnOiBSZWdpc3RlciBBcmd1bWVudHMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDUyKQoqIFJFR19QT0lOVEVSOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsYWdzLiAgICAgICAgICAgICAgKGxpbmUgICA5NykKKiBSRUdfUkVUVkFMOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnNucy4gICAgICAgICAgICAgIChsaW5lICA0NjcpCiogUkVHX1NFVEpNUDogICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zbnMuICAgICAgICAgICAgICAobGluZSAgMzkwKQoqIFJFR19VTlVTRUQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc25zLiAgICAgICAgICAgICAgKGxpbmUgIDMyNikKKiBSRUdfVVNFUlZBUl9QOiAgICAgICAgICAgICAgICAgICAgICAgICBGbGFncy4gICAgICAgICAgICAgIChsaW5lICAxMDEpCiogcmVsYXRpdmUgY29zdHM6ICAgICAgICAgICAgICAgICAgICAgICAgQ29zdHMuICAgICAgICAgICAgICAobGluZSAgICA2KQoqIFJFTEFUSVZFX1BSRUZJWF9OT1RfTElOS0RJUjogICAgICAgICAgIERyaXZlci4gICAgICAgICAgICAgKGxpbmUgIDMyNCkKKiByZWxvYWQgcGFzczogICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdzIGFuZCBNZW1vcnkuICAgIChsaW5lICAxNDYpCiogcmVsb2FkaW5nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRMIHBhc3Nlcy4gICAgICAgICAobGluZSAgMTgwKQoqIHJlbG9hZF9jb21wbGV0ZWQ6ICAgICAgICAgICAgICAgICAgICAgIFN0YW5kYXJkIE5hbWVzLiAgICAgKGxpbmUgMTAyNikKKiAncmVsb2FkX2luJyBpbnN0cnVjdGlvbiBwYXR0ZXJuOiAgICAgICBTdGFuZGFyZCBOYW1lcy4gICAgIChsaW5lICAgOTgpCiogcmVsb2FkX2luX3Byb2dyZXNzOiAgICAgICAgICAgICAgICAgICAgU3RhbmRhcmQgTmFtZXMuICAgICAobGluZSAgIDU3KQoqICdyZWxvYWRfb3V0JyBpbnN0cnVjdGlvbiBwYXR0ZXJuOiAgICAgIFN0YW5kYXJkIE5hbWVzLiAgICAgKGxpbmUgICA5OCkKKiByZW1haW5kZXI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcml0aG1ldGljLiAgICAgICAgIChsaW5lICAxMzIpCiogJ3JlbWFpbmRlck0zJyBpbnN0cnVjdGlvbiBwYXR0ZXJuOiAgICAgU3RhbmRhcmQgTmFtZXMuICAgICAobGluZSAgNDYxKQoqIHJlb3JkZXI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUWSBPcHRpb25zLiAgICAgICAgKGxpbmUgIDIxOSkKKiByZXByZXNlbnRhdGlvbiBvZiBSVEw6ICAgICAgICAgICAgICAgICBSVEwuICAgICAgICAgICAgICAgIChsaW5lICAgIDYpCiogcmVzZXJ2YXRpb24gZGVsYXlzOiAgICAgICAgICAgICAgICAgICAgUHJvY2Vzc29yIHBpcGVsaW5lIGRlc2NyaXB0aW9uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICAgNikKKiAncmVzdG9yZV9zdGFja19ibG9jaycgaW5zdHJ1Y3Rpb24gcGF0dGVybjogU3RhbmRhcmQgTmFtZXMuIChsaW5lIDExNTcpCiogJ3Jlc3RvcmVfc3RhY2tfZnVuY3Rpb24nIGluc3RydWN0aW9uIHBhdHRlcm46IFN0YW5kYXJkIE5hbWVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTE1NykKKiAncmVzdG9yZV9zdGFja19ub25sb2NhbCcgaW5zdHJ1Y3Rpb24gcGF0dGVybjogU3RhbmRhcmQgTmFtZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxMTU3KQoqIHJlc3Rfb2ZfZGVjbF9jb21waWxhdGlvbjogICAgICAgICAgICAgIFBhcnNpbmcgcGFzcy4gICAgICAgKGxpbmUgICA1MSkKKiByZXN0X29mX3R5cGVfY29tcGlsYXRpb246ICAgICAgICAgICAgICBQYXJzaW5nIHBhc3MuICAgICAgIChsaW5lICAgNTEpCiogUkVTVUxUX0RFQ0w6ICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVjbGFyYXRpb25zLiAgICAgICAobGluZSAgICA2KQoqIHJldHVybjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNpZGUgRWZmZWN0cy4gICAgICAgKGxpbmUgICA3MikKKiAncmV0dXJuJyBpbnN0cnVjdGlvbiBwYXR0ZXJuOiAgICAgICAgICBTdGFuZGFyZCBOYW1lcy4gICAgIChsaW5lIDEwMTQpCiogcmV0dXJuIHZhbHVlcyBpbiByZWdpc3RlcnM6ICAgICAgICAgICAgU2NhbGFyIFJldHVybi4gICAgICAobGluZSAgICA2KQoqIHJldHVybmluZyBhZ2dyZWdhdGUgdmFsdWVzOiAgICAgICAgICAgIEFnZ3JlZ2F0ZSBSZXR1cm4uICAgKGxpbmUgICAgNikKKiByZXR1cm5pbmcgc3RydWN0dXJlcyBhbmQgdW5pb25zOiAgICAgICBJbnRlcmZhY2UuICAgICAgICAgIChsaW5lICAgMTApCiogUkVUVVJOX0FERFJFU1NfUE9JTlRFUl9SRUdOVU06ICAgICAgICAgRnJhbWUgUmVnaXN0ZXJzLiAgICAobGluZSAgIDUwKQoqIFJFVFVSTl9BRERSX0lOX1BSRVZJT1VTX0ZSQU1FOiAgICAgICAgIEZyYW1lIExheW91dC4gICAgICAgKGxpbmUgIDEzMykKKiBSRVRVUk5fQUREUl9PRkZTRVQ6ICAgICAgICAgICAgICAgICAgICBFeGNlcHRpb24gSGFuZGxpbmcuIChsaW5lICAgNTkpCiogUkVUVVJOX0FERFJfUlRYOiAgICAgICAgICAgICAgICAgICAgICAgRnJhbWUgTGF5b3V0LiAgICAgICAobGluZSAgMTIyKQoqIFJFVFVSTl9FWFBSOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uIEJvZGllcy4gICAgKGxpbmUgICAgNikKKiBSRVRVUk5fUE9QU19BUkdTOiAgICAgICAgICAgICAgICAgICAgICBTdGFjayBBcmd1bWVudHMuICAgIChsaW5lICAgODYpCiogUkVUVVJOX1NUTVQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb24gQm9kaWVzLiAgICAobGluZSAgICA2KQoqIHJldHVybl92YWw6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsYWdzLiAgICAgICAgICAgICAgKGxpbmUgIDI3NikKKiAncmV0dXJuX3ZhbCcsIGluICdtZW0nOiAgICAgICAgICAgICAgICBGbGFncy4gICAgICAgICAgICAgIChsaW5lICAgNzApCiogJ3JldHVybl92YWwnLCBpbiAncmVnJzogICAgICAgICAgICAgICAgRmxhZ3MuICAgICAgICAgICAgICAobGluZSAgIDkyKQoqICdyZXR1cm5fdmFsJywgaW4gJ3N5bWJvbF9yZWYnOiAgICAgICAgIEZsYWdzLiAgICAgICAgICAgICAgKGxpbmUgIDIwNSkKKiByZXZlcnNlIHByb2JhYmlsaXR5OiAgICAgICAgICAgICAgICAgICBQcm9maWxlIGluZm9ybWF0aW9uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA2NikKKiBSRVZFUlNFX0NPTkRFWEVDX1BSRURJQ0FURVNfUDogICAgICAgICBDb25kaXRpb24gQ29kZS4gICAgIChsaW5lICAxMjgpCiogUkVWRVJTRV9DT05ESVRJT046ICAgICAgICAgICAgICAgICAgICAgQ29uZGl0aW9uIENvZGUuICAgICAobGluZSAgMTE1KQoqIFJFVkVSU0lCTEVfQ0NfTU9ERTogICAgICAgICAgICAgICAgICAgIENvbmRpdGlvbiBDb2RlLiAgICAgKGxpbmUgIDEwMSkKKiByaWdodCByb3RhdGU6ICAgICAgICAgICAgICAgICAgICAgICAgICBBcml0aG1ldGljLiAgICAgICAgIChsaW5lICAxOTEpCiogcmlnaHQgc2hpZnQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJpdGhtZXRpYy4gICAgICAgICAobGluZSAgMTg2KQoqICdyaW50TTInIGluc3RydWN0aW9uIHBhdHRlcm46ICAgICAgICAgIFN0YW5kYXJkIE5hbWVzLiAgICAgKGxpbmUgIDU2MSkKKiBSSVNDOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9jZXNzb3IgcGlwZWxpbmUgZGVzY3JpcHRpb24uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgICA2KQoqIFJJU0MgPDE+OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2Nlc3NvciBwaXBlbGluZSBkZXNjcmlwdGlvbi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAyMTMpCiogcm9vdHMsIG1hcmtpbmc6ICAgICAgICAgICAgICAgICAgICAgICAgR0dDIFJvb3RzLiAgICAgICAgICAobGluZSAgICA2KQoqIHJvdGF0ZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyaXRobWV0aWMuICAgICAgICAgKGxpbmUgIDE5MSkKKiByb3RhdGUgPDE+OiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcml0aG1ldGljLiAgICAgICAgIChsaW5lICAxOTEpCiogcm90YXRlcnQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJpdGhtZXRpYy4gICAgICAgICAobGluZSAgMTkxKQoqICdyb3RsTTMnIGluc3RydWN0aW9uIHBhdHRlcm46ICAgICAgICAgIFN0YW5kYXJkIE5hbWVzLiAgICAgKGxpbmUgIDQzNCkKKiAncm90ck0zJyBpbnN0cnVjdGlvbiBwYXR0ZXJuOiAgICAgICAgICBTdGFuZGFyZCBOYW1lcy4gICAgIChsaW5lICA0MzQpCiogUm91Z2ggR0lNUExFIEdyYW1tYXI6ICAgICAgICAgICAgICAgICAgUm91Z2ggR0lNUExFIEdyYW1tYXIuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgICA2KQoqICdyb3VuZE0yJyBpbnN0cnVjdGlvbiBwYXR0ZXJuOiAgICAgICAgIFN0YW5kYXJkIE5hbWVzLiAgICAgKGxpbmUgIDUzNykKKiBST1VORF9ESVZfRVhQUjogICAgICAgICAgICAgICAgICAgICAgICBFeHByZXNzaW9uIHRyZWVzLiAgIChsaW5lICAgIDYpCiogUk9VTkRfTU9EX0VYUFI6ICAgICAgICAgICAgICAgICAgICAgICAgRXhwcmVzc2lvbiB0cmVlcy4gICAobGluZSAgICA2KQoqIFJPVU5EX1RPV0FSRFNfWkVSTzogICAgICAgICAgICAgICAgICAgIFN0b3JhZ2UgTGF5b3V0LiAgICAgKGxpbmUgIDQ2NikKKiBST1VORF9UWVBFX0FMSUdOOiAgICAgICAgICAgICAgICAgICAgICBTdG9yYWdlIExheW91dC4gICAgIChsaW5lICAzNTYpCiogUlNISUZUX0VYUFI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhwcmVzc2lvbiB0cmVlcy4gICAobGluZSAgICA2KQoqIFJUTCBhZGRpdGlvbjogICAgICAgICAgICAgICAgICAgICAgICAgIEFyaXRobWV0aWMuICAgICAgICAgKGxpbmUgICAxNCkKKiBSVEwgYWRkaXRpb24gd2l0aCBzaWduZWQgc2F0dXJhdGlvbjogICBBcml0aG1ldGljLiAgICAgICAgIChsaW5lICAgMTQpCiogUlRMIGFkZGl0aW9uIHdpdGggdW5zaWduZWQgc2F0dXJhdGlvbjogQXJpdGhtZXRpYy4gICAgICAgICAobGluZSAgIDE0KQoqIFJUTCBjbGFzc2VzOiAgICAgICAgICAgICAgICAgICAgICAgICAgIFJUTCBDbGFzc2VzLiAgICAgICAgKGxpbmUgICAgNikKKiBSVEwgY29tcGFyaXNvbjogICAgICAgICAgICAgICAgICAgICAgICBBcml0aG1ldGljLiAgICAgICAgIChsaW5lICAgNDYpCiogUlRMIGNvbXBhcmlzb24gb3BlcmF0aW9uczogICAgICAgICAgICAgQ29tcGFyaXNvbnMuICAgICAgICAobGluZSAgICA2KQoqIFJUTCBjb25zdGFudCBleHByZXNzaW9uIHR5cGVzOiAgICAgICAgIENvbnN0YW50cy4gICAgICAgICAgKGxpbmUgICAgNikKKiBSVEwgY29uc3RhbnRzOiAgICAgICAgICAgICAgICAgICAgICAgICBDb25zdGFudHMuICAgICAgICAgIChsaW5lICAgIDYpCiogUlRMIGRlY2xhcmF0aW9uczogICAgICAgICAgICAgICAgICAgICAgUlRMIERlY2xhcmF0aW9ucy4gICAobGluZSAgICA2KQoqIFJUTCBkaWZmZXJlbmNlOiAgICAgICAgICAgICAgICAgICAgICAgIEFyaXRobWV0aWMuICAgICAgICAgKGxpbmUgICAzOCkKKiBSVEwgZXhwcmVzc2lvbjogICAgICAgICAgICAgICAgICAgICAgICBSVEwgT2JqZWN0cy4gICAgICAgIChsaW5lICAgIDYpCiogUlRMIGV4cHJlc3Npb25zIGZvciBhcml0aG1ldGljOiAgICAgICAgQXJpdGhtZXRpYy4gICAgICAgICAobGluZSAgICA2KQoqIFJUTCBmb3JtYXQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJUTCBDbGFzc2VzLiAgICAgICAgKGxpbmUgICA3MSkKKiBSVEwgZm9ybWF0IGNoYXJhY3RlcnM6ICAgICAgICAgICAgICAgICBSVEwgQ2xhc3Nlcy4gICAgICAgIChsaW5lICAgNzYpCiogUlRMIGZ1bmN0aW9uLWNhbGwgaW5zbnM6ICAgICAgICAgICAgICAgQ2FsbHMuICAgICAgICAgICAgICAobGluZSAgICA2KQoqIFJUTCBpbnNuIHRlbXBsYXRlOiAgICAgICAgICAgICAgICAgICAgIFJUTCBUZW1wbGF0ZS4gICAgICAgKGxpbmUgICAgNikKKiBSVEwgaW50ZWdlcnM6ICAgICAgICAgICAgICAgICAgICAgICAgICBSVEwgT2JqZWN0cy4gICAgICAgIChsaW5lICAgIDYpCiogUlRMIG1lbW9yeSBleHByZXNzaW9uczogICAgICAgICAgICAgICAgUmVncyBhbmQgTWVtb3J5LiAgICAobGluZSAgICA2KQoqIFJUTCBvYmplY3QgdHlwZXM6ICAgICAgICAgICAgICAgICAgICAgIFJUTCBPYmplY3RzLiAgICAgICAgKGxpbmUgICAgNikKKiBSVEwgcG9zdGRlY3JlbWVudDogICAgICAgICAgICAgICAgICAgICBJbmNkZWMuICAgICAgICAgICAgIChsaW5lICAgIDYpCiogUlRMIHBvc3RpbmNyZW1lbnQ6ICAgICAgICAgICAgICAgICAgICAgSW5jZGVjLiAgICAgICAgICAgICAobGluZSAgICA2KQoqIFJUTCBwcmVkZWNyZW1lbnQ6ICAgICAgICAgICAgICAgICAgICAgIEluY2RlYy4gICAgICAgICAgICAgKGxpbmUgICAgNikKKiBSVEwgcHJlaW5jcmVtZW50OiAgICAgICAgICAgICAgICAgICAgICBJbmNkZWMuICAgICAgICAgICAgIChsaW5lICAgIDYpCiogUlRMIHJlZ2lzdGVyIGV4cHJlc3Npb25zOiAgICAgICAgICAgICAgUmVncyBhbmQgTWVtb3J5LiAgICAobGluZSAgICA2KQoqIFJUTCByZXByZXNlbnRhdGlvbjogICAgICAgICAgICAgICAgICAgIFJUTC4gICAgICAgICAgICAgICAgKGxpbmUgICAgNikKKiBSVEwgc2lkZSBlZmZlY3QgZXhwcmVzc2lvbnM6ICAgICAgICAgICBTaWRlIEVmZmVjdHMuICAgICAgIChsaW5lICAgIDYpCiogUlRMIHN0cmluZ3M6ICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRMIE9iamVjdHMuICAgICAgICAobGluZSAgICA2KQoqIFJUTCBzdHJ1Y3R1cmUgc2hhcmluZyBhc3N1bXB0aW9uczogICAgIFNoYXJpbmcuICAgICAgICAgICAgKGxpbmUgICAgNikKKiBSVEwgc3VidHJhY3Rpb246ICAgICAgICAgICAgICAgICAgICAgICBBcml0aG1ldGljLiAgICAgICAgIChsaW5lICAgMzgpCiogUlRMIHN1YnRyYWN0aW9uIHdpdGggc2lnbmVkIHNhdHVyYXRpb246IEFyaXRobWV0aWMuICAgICAgICAobGluZSAgIDM4KQoqIFJUTCBzdWJ0cmFjdGlvbiB3aXRoIHVuc2lnbmVkIHNhdHVyYXRpb246IEFyaXRobWV0aWMuICAgICAgKGxpbmUgICAzOCkKKiBSVEwgc3VtOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcml0aG1ldGljLiAgICAgICAgIChsaW5lICAgMTQpCiogUlRMIHZlY3RvcnM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRMIE9iamVjdHMuICAgICAgICAobGluZSAgICA2KQoqIFJUWCAoU2VlIFJUTCk6ICAgICAgICAgICAgICAgICAgICAgICAgIFJUTCBPYmplY3RzLiAgICAgICAgKGxpbmUgICAgNikKKiBSVFggY29kZXMsIGNsYXNzZXMgb2Y6ICAgICAgICAgICAgICAgICBSVEwgQ2xhc3Nlcy4gICAgICAgIChsaW5lICAgIDYpCiogUlRYX0ZSQU1FX1JFTEFURURfUDogICAgICAgICAgICAgICAgICAgRmxhZ3MuICAgICAgICAgICAgICAobGluZSAgMTEwKQoqIHJ1bi10aW1lIGNvbnZlbnRpb25zOiAgICAgICAgICAgICAgICAgIEludGVyZmFjZS4gICAgICAgICAgKGxpbmUgICAgNikKKiBydW4tdGltZSB0YXJnZXQgc3BlY2lmaWNhdGlvbjogICAgICAgICBSdW4tdGltZSBUYXJnZXQuICAgIChsaW5lICAgIDYpCiogJ3MnIGluIGNvbnN0cmFpbnQ6ICAgICAgICAgICAgICAgICAgICAgU2ltcGxlIENvbnN0cmFpbnRzLiAobGluZSAgIDg5KQoqIHNhbWVfdHlwZV9wOiAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGVzLiAgICAgICAgICAgICAgKGxpbmUgIDE0NykKKiBTQW1vZGU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWNoaW5lIE1vZGVzLiAgICAgIChsaW5lICAxNDcpCiogJ3NhdGZyYWN0TU4yJyBpbnN0cnVjdGlvbiBwYXR0ZXJuOiAgICAgU3RhbmRhcmQgTmFtZXMuICAgICAobGluZSAgODMwKQoqICdzYXRmcmFjdHVuc01OMicgaW5zdHJ1Y3Rpb24gcGF0dGVybjogIFN0YW5kYXJkIE5hbWVzLiAgICAgKGxpbmUgIDg0MykKKiBzYXRpc2ZpZXNfY29uc3RyYWludF86ICAgICAgICAgICAgICAgICBDIENvbnN0cmFpbnQgSW50ZXJmYWNlLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA0NikKKiBzYXRfZnJhY3Q6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb252ZXJzaW9ucy4gICAgICAgIChsaW5lICAgOTEpCiogU0FWRV9FWFBSOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhwcmVzc2lvbiB0cmVlcy4gICAobGluZSAgICA2KQoqICdzYXZlX3N0YWNrX2Jsb2NrJyBpbnN0cnVjdGlvbiBwYXR0ZXJuOiBTdGFuZGFyZCBOYW1lcy4gICAgKGxpbmUgMTE1NykKKiAnc2F2ZV9zdGFja19mdW5jdGlvbicgaW5zdHJ1Y3Rpb24gcGF0dGVybjogU3RhbmRhcmQgTmFtZXMuIChsaW5lIDExNTcpCiogJ3NhdmVfc3RhY2tfbm9ubG9jYWwnIGluc3RydWN0aW9uIHBhdHRlcm46IFN0YW5kYXJkIE5hbWVzLiAobGluZSAxMTU3KQoqIFNCU1NfU0VDVElPTl9BU01fT1A6ICAgICAgICAgICAgICAgICAgIFNlY3Rpb25zLiAgICAgICAgICAgKGxpbmUgICA3NikKKiBTY2FsYXIgZXZvbHV0aW9uczogICAgICAgICAgICAgICAgICAgICBTY2FsYXIgZXZvbHV0aW9ucy4gIChsaW5lICAgIDYpCiogc2NhbGFycywgcmV0dXJuZWQgYXMgdmFsdWVzOiAgICAgICAgICAgU2NhbGFyIFJldHVybi4gICAgICAobGluZSAgICA2KQoqIFNDSEVEX0dST1VQX1A6ICAgICAgICAgICAgICAgICAgICAgICAgIEZsYWdzLiAgICAgICAgICAgICAgKGxpbmUgIDE1MSkKKiBTQ21vZGU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWNoaW5lIE1vZGVzLiAgICAgIChsaW5lICAxOTYpCiogJ3NDT05EJyBpbnN0cnVjdGlvbiBwYXR0ZXJuOiAgICAgICAgICAgU3RhbmRhcmQgTmFtZXMuICAgICAobGluZSAgODk4KQoqIHNjcmF0Y2g6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ3MgYW5kIE1lbW9yeS4gICAgKGxpbmUgIDE3MSkKKiBzY3JhdGNoIG9wZXJhbmRzOiAgICAgICAgICAgICAgICAgICAgICBSZWdzIGFuZCBNZW1vcnkuICAgIChsaW5lICAxNzEpCiogJ3NjcmF0Y2gnLCBSVEwgc2hhcmluZzogICAgICAgICAgICAgICAgU2hhcmluZy4gICAgICAgICAgICAobGluZSAgIDM1KQoqIHNjcmF0Y2hfb3BlcmFuZDogICAgICAgICAgICAgICAgICAgICAgIE1hY2hpbmUtSW5kZXBlbmRlbnQgUHJlZGljYXRlcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgNDkpCiogU0RBVEFfU0VDVElPTl9BU01fT1A6ICAgICAgICAgICAgICAgICAgU2VjdGlvbnMuICAgICAgICAgICAobGluZSAgIDU3KQoqIFNEQl9BTExPV19GT1JXQVJEX1JFRkVSRU5DRVM6ICAgICAgICAgIFNEQiBhbmQgRFdBUkYuICAgICAgKGxpbmUgICA4MCkKKiBTREJfQUxMT1dfVU5LTk9XTl9SRUZFUkVOQ0VTOiAgICAgICAgICBTREIgYW5kIERXQVJGLiAgICAgIChsaW5lICAgNzUpCiogU0RCX0RFQlVHR0lOR19JTkZPOiAgICAgICAgICAgICAgICAgICAgU0RCIGFuZCBEV0FSRi4gICAgICAobGluZSAgICA4KQoqIFNEQl9ERUxJTTogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNEQiBhbmQgRFdBUkYuICAgICAgKGxpbmUgICA2OCkKKiBTREJfT1VUUFVUX1NPVVJDRV9MSU5FOiAgICAgICAgICAgICAgICBTREIgYW5kIERXQVJGLiAgICAgIChsaW5lICAgODUpCiogU0Rtb2RlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFjaGluZSBNb2Rlcy4gICAgICAobGluZSAgIDg1KQoqICdzZG90X3Byb2RNJyBpbnN0cnVjdGlvbiBwYXR0ZXJuOiAgICAgIFN0YW5kYXJkIE5hbWVzLiAgICAgKGxpbmUgIDI2MCkKKiBzZWFyY2ggb3B0aW9uczogICAgICAgICAgICAgICAgICAgICAgICBJbmNsdWRpbmcgUGF0dGVybnMuIChsaW5lICAgNDcpCiogU0VDT05EQVJZX0lOUFVUX1JFTE9BRF9DTEFTUzogICAgICAgICAgUmVnaXN0ZXIgQ2xhc3Nlcy4gICAobGluZSAgMzMwKQoqIFNFQ09OREFSWV9NRU1PUllfTkVFREVEOiAgICAgICAgICAgICAgIFJlZ2lzdGVyIENsYXNzZXMuICAgKGxpbmUgIDM4NikKKiBTRUNPTkRBUllfTUVNT1JZX05FRURFRF9NT0RFOiAgICAgICAgICBSZWdpc3RlciBDbGFzc2VzLiAgIChsaW5lICA0MDUpCiogU0VDT05EQVJZX01FTU9SWV9ORUVERURfUlRYOiAgICAgICAgICAgUmVnaXN0ZXIgQ2xhc3Nlcy4gICAobGluZSAgMzk2KQoqIFNFQ09OREFSWV9PVVRQVVRfUkVMT0FEX0NMQVNTOiAgICAgICAgIFJlZ2lzdGVyIENsYXNzZXMuICAgKGxpbmUgIDMzMSkKKiBTRUNPTkRBUllfUkVMT0FEX0NMQVNTOiAgICAgICAgICAgICAgICBSZWdpc3RlciBDbGFzc2VzLiAgIChsaW5lICAzMjkpCiogU2VsZWN0aW9uIFN0YXRlbWVudHM6ICAgICAgICAgICAgICAgICAgU2VsZWN0aW9uIFN0YXRlbWVudHMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgICA2KQoqIFNFTEVDVF9DQ19NT0RFOiAgICAgICAgICAgICAgICAgICAgICAgIENvbmRpdGlvbiBDb2RlLiAgICAgKGxpbmUgICA2NykKKiBzZXF1ZW5jZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaWRlIEVmZmVjdHMuICAgICAgIChsaW5lICAyNDkpCiogc2V0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2lkZSBFZmZlY3RzLiAgICAgICAobGluZSAgIDE1KQoqICdzZXQnIGFuZCAnL2YnOiAgICAgICAgICAgICAgICAgICAgICAgIEZsYWdzLiAgICAgICAgICAgICAgKGxpbmUgIDExMCkKKiAnc2V0bWVtTScgaW5zdHJ1Y3Rpb24gcGF0dGVybjogICAgICAgICBTdGFuZGFyZCBOYW1lcy4gICAgIChsaW5lICA3MDMpCiogU0VUVVBfRlJBTUVfQUREUkVTU0VTOiAgICAgICAgICAgICAgICAgRnJhbWUgTGF5b3V0LiAgICAgICAobGluZSAgMTAwKQoqIFNFVF9BU01fT1A6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsIE91dHB1dC4gICAgICAgKGxpbmUgIDM3NCkKKiBTRVRfQVNNX09QIDwxPjogICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCBPdXRwdXQuICAgICAgIChsaW5lICAzODUpCiogc2V0X2F0dHI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFnZ2luZyBJbnNucy4gICAgICAobGluZSAgIDMxKQoqIHNldF9hdHRyX2FsdGVybmF0aXZlOiAgICAgICAgICAgICAgICAgIFRhZ2dpbmcgSW5zbnMuICAgICAgKGxpbmUgICA0OSkKKiBTRVRfQllfUElFQ0VTX1A6ICAgICAgICAgICAgICAgICAgICAgICBDb3N0cy4gICAgICAgICAgICAgIChsaW5lICAxMzgpCiogU0VUX0RFU1Q6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2lkZSBFZmZlY3RzLiAgICAgICAobGluZSAgIDY5KQoqIFNFVF9JU19SRVRVUk5fUDogICAgICAgICAgICAgICAgICAgICAgIEZsYWdzLiAgICAgICAgICAgICAgKGxpbmUgIDE2MCkKKiBTRVRfTEFCRUxfS0lORDogICAgICAgICAgICAgICAgICAgICAgICBJbnNucy4gICAgICAgICAgICAgIChsaW5lICAxNDApCiogc2V0X29wdGFiX2xpYmZ1bmM6ICAgICAgICAgICAgICAgICAgICAgTGlicmFyeSBDYWxscy4gICAgICAobGluZSAgIDE1KQoqIFNFVF9SQVRJTzogICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvc3RzLiAgICAgICAgICAgICAgKGxpbmUgIDEyOSkKKiBTRVRfU1JDOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaWRlIEVmZmVjdHMuICAgICAgIChsaW5lICAgNjkpCiogU0VUX1RZUEVfU1RSVUNUVVJBTF9FUVVBTElUWTogICAgICAgICAgVHlwZXMuICAgICAgICAgICAgICAobGluZSAgICA2KQoqIFNFVF9UWVBFX1NUUlVDVFVSQUxfRVFVQUxJVFkgPDE+OiAgICAgIFR5cGVzLiAgICAgICAgICAgICAgKGxpbmUgIDE0MikKKiBTRm1vZGU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWNoaW5lIE1vZGVzLiAgICAgIChsaW5lICAgNjYpCiogU0ZfU0laRTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSBMYXlvdXQuICAgICAgICAobGluZSAgMTI4KQoqIHNoYXJpbmcgb2YgUlRMIGNvbXBvbmVudHM6ICAgICAgICAgICAgIFNoYXJpbmcuICAgICAgICAgICAgKGxpbmUgICAgNikKKiBzaGlmdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcml0aG1ldGljLiAgICAgICAgIChsaW5lICAxNjkpCiogU0hJRlRfQ09VTlRfVFJVTkNBVEVEOiAgICAgICAgICAgICAgICAgTWlzYy4gICAgICAgICAgICAgICAobGluZSAgMTI1KQoqIFNITElCX1NVRkZJWDogICAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvcyBmb3IgSW5pdGlhbGl6YXRpb24uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMTI4KQoqIFNIT1JUX0FDQ1VNX1RZUEVfU0laRTogICAgICAgICAgICAgICAgIFR5cGUgTGF5b3V0LiAgICAgICAgKGxpbmUgICA4MikKKiBTSE9SVF9GUkFDVF9UWVBFX1NJWkU6ICAgICAgICAgICAgICAgICBUeXBlIExheW91dC4gICAgICAgIChsaW5lICAgNjIpCiogU0hPUlRfSU1NRURJQVRFU19TSUdOX0VYVEVORDogICAgICAgICAgTWlzYy4gICAgICAgICAgICAgICAobGluZSAgIDk0KQoqIFNIT1JUX1RZUEVfU0laRTogICAgICAgICAgICAgICAgICAgICAgIFR5cGUgTGF5b3V0LiAgICAgICAgKGxpbmUgICAxNSkKKiAnc2liY2FsbF9lcGlsb2d1ZScgaW5zdHJ1Y3Rpb24gcGF0dGVybjogU3RhbmRhcmQgTmFtZXMuICAgIChsaW5lIDEzNDQpCiogc2libGluZyBjYWxsOiAgICAgICAgICAgICAgICAgICAgICAgICAgRWRnZXMuICAgICAgICAgICAgICAobGluZSAgMTIxKQoqIFNJQkxJTkdfQ0FMTF9QOiAgICAgICAgICAgICAgICAgICAgICAgIEZsYWdzLiAgICAgICAgICAgICAgKGxpbmUgIDE2NCkKKiBzaWduZWQgZGl2aXNpb246ICAgICAgICAgICAgICAgICAgICAgICBBcml0aG1ldGljLiAgICAgICAgIChsaW5lICAxMTIpCiogc2lnbmVkIGRpdmlzaW9uIHdpdGggc2lnbmVkIHNhdHVyYXRpb246IEFyaXRobWV0aWMuICAgICAgICAobGluZSAgMTEyKQoqIHNpZ25lZCBtYXhpbXVtOiAgICAgICAgICAgICAgICAgICAgICAgIEFyaXRobWV0aWMuICAgICAgICAgKGxpbmUgIDEzNykKKiBzaWduZWQgbWluaW11bTogICAgICAgICAgICAgICAgICAgICAgICBBcml0aG1ldGljLiAgICAgICAgIChsaW5lICAxMzcpCiogc2lnbl9leHRlbmQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udmVyc2lvbnMuICAgICAgICAobGluZSAgIDIzKQoqIHNpZ25fZXh0cmFjdDogICAgICAgICAgICAgICAgICAgICAgICAgIEJpdC1GaWVsZHMuICAgICAgICAgKGxpbmUgICAgOCkKKiAnc2lnbl9leHRyYWN0JywgY2Fub25pY2FsaXphdGlvbiBvZjogICBJbnNuIENhbm9uaWNhbGl6YXRpb25zLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA5NSkKKiBTSW1vZGU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWNoaW5lIE1vZGVzLiAgICAgIChsaW5lICAgMzcpCiogc2ltcGxlIGNvbnN0cmFpbnRzOiAgICAgICAgICAgICAgICAgICAgU2ltcGxlIENvbnN0cmFpbnRzLiAobGluZSAgICA2KQoqIHNpbmNvcyBtYXRoIGZ1bmN0aW9uLCBpbXBsaWNpdCB1c2FnZTogIExpYnJhcnkgQ2FsbHMuICAgICAgKGxpbmUgICA4NCkKKiAnc2luTTInIGluc3RydWN0aW9uIHBhdHRlcm46ICAgICAgICAgICBTdGFuZGFyZCBOYW1lcy4gICAgIChsaW5lICA0NzgpCiogU0laRV9BU01fT1A6ICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwgT3V0cHV0LiAgICAgICAobGluZSAgIDIyKQoqIFNJWkVfVFlQRTogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgTGF5b3V0LiAgICAgICAgKGxpbmUgIDE2NykKKiBza2lwOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVFkgT3B0aW9ucy4gICAgICAgIChsaW5lICAgNzUpCiogU0xPV19CWVRFX0FDQ0VTUzogICAgICAgICAgICAgICAgICAgICAgQ29zdHMuICAgICAgICAgICAgICAobGluZSAgIDU5KQoqIFNMT1dfVU5BTElHTkVEX0FDQ0VTUzogICAgICAgICAgICAgICAgIENvc3RzLiAgICAgICAgICAgICAgKGxpbmUgICA3NCkKKiBTTUFMTF9SRUdJU1RFUl9DTEFTU0VTOiAgICAgICAgICAgICAgICBSZWdpc3RlciBDbGFzc2VzLiAgIChsaW5lICA0MjgpCiogc21heDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJpdGhtZXRpYy4gICAgICAgICAobGluZSAgMTM3KQoqIHNtaW46ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyaXRobWV0aWMuICAgICAgICAgKGxpbmUgIDEzNykKKiBzbXMsIHN3aW5nLCBzb2Z0d2FyZSBwaXBlbGluaW5nOiAgICAgICBSVEwgcGFzc2VzLiAgICAgICAgIChsaW5lICAxMzkpCiogJ3NtdWxNM19oaWdocGFydCcgaW5zdHJ1Y3Rpb24gcGF0dGVybjogU3RhbmRhcmQgTmFtZXMuICAgICAobGluZSAgMzQ5KQoqIHNvZnQgZmxvYXQgbGlicmFyeTogICAgICAgICAgICAgICAgICAgIFNvZnQgZmxvYXQgbGlicmFyeSByb3V0aW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgIDYpCiogc3BlY2lhbDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1RZIE9wdGlvbnMuICAgICAgICAobGluZSAgMjQwKQoqIHNwZWNpYWwgcHJlZGljYXRlczogICAgICAgICAgICAgICAgICAgIFByZWRpY2F0ZXMuICAgICAgICAgKGxpbmUgICAzMSkKKiBTUEVDUzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYXJnZXQgRnJhZ21lbnQuICAgIChsaW5lICAxMDgpCiogc3BlZWQgb2YgaW5zdHJ1Y3Rpb25zOiAgICAgICAgICAgICAgICAgQ29zdHMuICAgICAgICAgICAgICAobGluZSAgICA2KQoqIHNwbGl0dGluZyBpbnN0cnVjdGlvbnM6ICAgICAgICAgICAgICAgIEluc24gU3BsaXR0aW5nLiAgICAgKGxpbmUgICAgNikKKiBzcGxpdF9ibG9jazogICAgICAgICAgICAgICAgICAgICAgICAgICBNYWludGFpbmluZyB0aGUgQ0ZHLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDEwOCkKKiBTUW1vZGU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWNoaW5lIE1vZGVzLiAgICAgIChsaW5lICAxMTEpCiogc3FydDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJpdGhtZXRpYy4gICAgICAgICAobGluZSAgMTk5KQoqICdzcXJ0TTInIGluc3RydWN0aW9uIHBhdHRlcm46ICAgICAgICAgIFN0YW5kYXJkIE5hbWVzLiAgICAgKGxpbmUgIDQ0NCkKKiBzcXVhcmUgcm9vdDogICAgICAgICAgICAgICAgICAgICAgICAgICBBcml0aG1ldGljLiAgICAgICAgIChsaW5lICAxOTkpCiogU1NBOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1NBLiAgICAgICAgICAgICAgICAobGluZSAgICA2KQoqICdzc2FkZE0zJyBpbnN0cnVjdGlvbiBwYXR0ZXJuOiAgICAgICAgIFN0YW5kYXJkIE5hbWVzLiAgICAgKGxpbmUgIDIyMCkKKiAnc3Nhc2hsTTMnIGluc3RydWN0aW9uIHBhdHRlcm46ICAgICAgICBTdGFuZGFyZCBOYW1lcy4gICAgIChsaW5lICA0MjQpCiogU1NBX05BTUVfREVGX1NUTVQ6ICAgICAgICAgICAgICAgICAgICAgU1NBLiAgICAgICAgICAgICAgICAobGluZSAgMjIwKQoqIFNTQV9OQU1FX1ZFUlNJT046ICAgICAgICAgICAgICAgICAgICAgIFNTQS4gICAgICAgICAgICAgICAgKGxpbmUgIDIyNSkKKiAnc3NkaXZNMycgaW5zdHJ1Y3Rpb24gcGF0dGVybjogICAgICAgICBTdGFuZGFyZCBOYW1lcy4gICAgIChsaW5lICAyMjApCiogJ3NzbWFkZE1ONCcgaW5zdHJ1Y3Rpb24gcGF0dGVybjogICAgICAgU3RhbmRhcmQgTmFtZXMuICAgICAobGluZSAgMzcyKQoqICdzc21zdWJNTjQnIGluc3RydWN0aW9uIHBhdHRlcm46ICAgICAgIFN0YW5kYXJkIE5hbWVzLiAgICAgKGxpbmUgIDM5NikKKiAnc3NtdWxNMycgaW5zdHJ1Y3Rpb24gcGF0dGVybjogICAgICAgICBTdGFuZGFyZCBOYW1lcy4gICAgIChsaW5lICAyMjApCiogJ3NzbmVnTTInIGluc3RydWN0aW9uIHBhdHRlcm46ICAgICAgICAgU3RhbmRhcmQgTmFtZXMuICAgICAobGluZSAgNDM4KQoqICdzc3N1Yk0zJyBpbnN0cnVjdGlvbiBwYXR0ZXJuOiAgICAgICAgIFN0YW5kYXJkIE5hbWVzLiAgICAgKGxpbmUgIDIyMCkKKiAnc3N1bV93aWRlbk0zJyBpbnN0cnVjdGlvbiBwYXR0ZXJuOiAgICBTdGFuZGFyZCBOYW1lcy4gICAgIChsaW5lICAyNjkpCiogc3NfYXNoaWZ0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJpdGhtZXRpYy4gICAgICAgICAobGluZSAgMTY5KQoqIHNzX2RpdjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyaXRobWV0aWMuICAgICAgICAgKGxpbmUgIDExMikKKiBzc19taW51czogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcml0aG1ldGljLiAgICAgICAgIChsaW5lICAgMzgpCiogc3NfbXVsdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJpdGhtZXRpYy4gICAgICAgICAobGluZSAgIDkzKQoqIHNzX25lZzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyaXRobWV0aWMuICAgICAgICAgKGxpbmUgICA4MikKKiBzc19wbHVzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcml0aG1ldGljLiAgICAgICAgIChsaW5lICAgMTQpCiogc3NfdHJ1bmNhdGU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udmVyc2lvbnMuICAgICAgICAobGluZSAgIDQzKQoqIHN0YWNrIGFyZ3VtZW50czogICAgICAgICAgICAgICAgICAgICAgIFN0YWNrIEFyZ3VtZW50cy4gICAgKGxpbmUgICAgNikKKiBzdGFjayBmcmFtZSBsYXlvdXQ6ICAgICAgICAgICAgICAgICAgICBGcmFtZSBMYXlvdXQuICAgICAgIChsaW5lICAgIDYpCiogc3RhY2sgc21hc2hpbmcgcHJvdGVjdGlvbjogICAgICAgICAgICAgU3RhY2sgU21hc2hpbmcgUHJvdGVjdGlvbi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgIDYpCiogU1RBQ0tfQUxJR05NRU5UX05FRURFRDogICAgICAgICAgICAgICAgRnJhbWUgTGF5b3V0LiAgICAgICAobGluZSAgIDQ3KQoqIFNUQUNLX0JPVU5EQVJZOiAgICAgICAgICAgICAgICAgICAgICAgIFN0b3JhZ2UgTGF5b3V0LiAgICAgKGxpbmUgIDE0NykKKiBTVEFDS19DSEVDS19CVUlMVElOOiAgICAgICAgICAgICAgICAgICBTdGFjayBDaGVja2luZy4gICAgIChsaW5lICAgMjgpCiogU1RBQ0tfQ0hFQ0tfRklYRURfRlJBTUVfU0laRTogICAgICAgICAgU3RhY2sgQ2hlY2tpbmcuICAgICAobGluZSAgIDYzKQoqIFNUQUNLX0NIRUNLX01BWF9GUkFNRV9TSVpFOiAgICAgICAgICAgIFN0YWNrIENoZWNraW5nLiAgICAgKGxpbmUgICA1NCkKKiBTVEFDS19DSEVDS19NQVhfVkFSX1NJWkU6ICAgICAgICAgICAgICBTdGFjayBDaGVja2luZy4gICAgIChsaW5lICAgNzApCiogU1RBQ0tfQ0hFQ0tfUFJPQkVfSU5URVJWQUw6ICAgICAgICAgICAgU3RhY2sgQ2hlY2tpbmcuICAgICAobGluZSAgIDM2KQoqIFNUQUNLX0NIRUNLX1BST0JFX0xPQUQ6ICAgICAgICAgICAgICAgIFN0YWNrIENoZWNraW5nLiAgICAgKGxpbmUgICA0MykKKiBTVEFDS19DSEVDS19QUk9URUNUOiAgICAgICAgICAgICAgICAgICBTdGFjayBDaGVja2luZy4gICAgIChsaW5lICAgNDkpCiogU1RBQ0tfRFlOQU1JQ19PRkZTRVQ6ICAgICAgICAgICAgICAgICAgRnJhbWUgTGF5b3V0LiAgICAgICAobGluZSAgIDczKQoqICdTVEFDS19EWU5BTUlDX09GRlNFVCcgYW5kIHZpcnR1YWwgcmVnaXN0ZXJzOiBSZWdzIGFuZCBNZW1vcnkuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDgzKQoqIFNUQUNLX0dST1dTX0RPV05XQVJEOiAgICAgICAgICAgICAgICAgIEZyYW1lIExheW91dC4gICAgICAgKGxpbmUgICAgOCkKKiBTVEFDS19QQVJNU19JTl9SRUdfUEFSTV9BUkVBOiAgICAgICAgICBTdGFjayBBcmd1bWVudHMuICAgIChsaW5lICAgNzcpCiogU1RBQ0tfUE9JTlRFUl9PRkZTRVQ6ICAgICAgICAgICAgICAgICAgRnJhbWUgTGF5b3V0LiAgICAgICAobGluZSAgIDU3KQoqICdTVEFDS19QT0lOVEVSX09GRlNFVCcgYW5kIHZpcnR1YWwgcmVnaXN0ZXJzOiBSZWdzIGFuZCBNZW1vcnkuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDkzKQoqIFNUQUNLX1BPSU5URVJfUkVHTlVNOiAgICAgICAgICAgICAgICAgIEZyYW1lIFJlZ2lzdGVycy4gICAgKGxpbmUgICAgOCkKKiAnU1RBQ0tfUE9JTlRFUl9SRUdOVU0nIGFuZCB2aXJ0dWFsIHJlZ2lzdGVyczogUmVncyBhbmQgTWVtb3J5LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA4MykKKiBzdGFja19wb2ludGVyX3J0eDogICAgICAgICAgICAgICAgICAgICBGcmFtZSBSZWdpc3RlcnMuICAgIChsaW5lICAgODUpCiogJ3N0YWNrX3Byb3RlY3Rfc2V0JyBpbnN0cnVjdGlvbiBwYXR0ZXJuOiBTdGFuZGFyZCBOYW1lcy4gICAobGluZSAxNTI2KQoqICdzdGFja19wcm90ZWN0X3Rlc3QnIGluc3RydWN0aW9uIHBhdHRlcm46IFN0YW5kYXJkIE5hbWVzLiAgKGxpbmUgMTUzNykKKiBTVEFDS19QVVNIX0NPREU6ICAgICAgICAgICAgICAgICAgICAgICBGcmFtZSBMYXlvdXQuICAgICAgIChsaW5lICAgMTYpCiogU1RBQ0tfUkVHUzogICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhY2sgUmVnaXN0ZXJzLiAgICAobGluZSAgIDE5KQoqIFNUQUNLX1NBVkVBUkVBX01PREU6ICAgICAgICAgICAgICAgICAgIFN0b3JhZ2UgTGF5b3V0LiAgICAgKGxpbmUgIDM3MikKKiBTVEFDS19TSVpFX01PREU6ICAgICAgICAgICAgICAgICAgICAgICBTdG9yYWdlIExheW91dC4gICAgIChsaW5lICAzODMpCiogc3RhbmRhcmQgcGF0dGVybiBuYW1lczogICAgICAgICAgICAgICAgU3RhbmRhcmQgTmFtZXMuICAgICAobGluZSAgICA2KQoqIFNUQU5EQVJEX0lOQ0xVREVfQ09NUE9ORU5UOiAgICAgICAgICAgIERyaXZlci4gICAgICAgICAgICAgKGxpbmUgIDQyMykKKiBTVEFOREFSRF9JTkNMVURFX0RJUjogICAgICAgICAgICAgICAgICBEcml2ZXIuICAgICAgICAgICAgIChsaW5lICA0MTUpCiogU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWDogICAgICAgICAgICAgRHJpdmVyLiAgICAgICAgICAgICAobGluZSAgMzM2KQoqIFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMTogICAgICAgICAgIERyaXZlci4gICAgICAgICAgICAgKGxpbmUgIDM0MykKKiBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzI6ICAgICAgICAgICBEcml2ZXIuICAgICAgICAgICAgIChsaW5lICAzNTApCiogU1RBUlRGSUxFX1NQRUM6ICAgICAgICAgICAgICAgICAgICAgICAgRHJpdmVyLiAgICAgICAgICAgICAobGluZSAgMjA5KQoqIFNUQVJUSU5HX0ZSQU1FX09GRlNFVDogICAgICAgICAgICAgICAgIEZyYW1lIExheW91dC4gICAgICAgKGxpbmUgICAzOCkKKiAnU1RBUlRJTkdfRlJBTUVfT0ZGU0VUJyBhbmQgdmlydHVhbCByZWdpc3RlcnM6IFJlZ3MgYW5kIE1lbW9yeS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgNzQpCiogU3RhdGVtZW50IFNlcXVlbmNlczogICAgICAgICAgICAgICAgICAgU3RhdGVtZW50IFNlcXVlbmNlcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgIDYpCiogc3RhdGVtZW50czogICAgICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb24gQm9kaWVzLiAgICAobGluZSAgICA2KQoqIFN0YXRlbWVudHM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlbWVudHMuICAgICAgICAgKGxpbmUgICAgNikKKiBTdGF0aWMgcHJvZmlsZSBlc3RpbWF0aW9uOiAgICAgICAgICAgICBQcm9maWxlIGluZm9ybWF0aW9uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICAyNCkKKiBzdGF0aWMgc2luZ2xlIGFzc2lnbm1lbnQ6ICAgICAgICAgICAgICBTU0EuICAgICAgICAgICAgICAgIChsaW5lICAgIDYpCiogU1RBVElDX0NIQUlOOiAgICAgICAgICAgICAgICAgICAgICAgICAgRnJhbWUgUmVnaXN0ZXJzLiAgICAobGluZSAgIDc2KQoqIFNUQVRJQ19DSEFJTl9JTkNPTUlORzogICAgICAgICAgICAgICAgIEZyYW1lIFJlZ2lzdGVycy4gICAgKGxpbmUgICA3NykKKiBTVEFUSUNfQ0hBSU5fSU5DT01JTkdfUkVHTlVNOiAgICAgICAgICBGcmFtZSBSZWdpc3RlcnMuICAgIChsaW5lICAgNjMpCiogU1RBVElDX0NIQUlOX1JFR05VTTogICAgICAgICAgICAgICAgICAgRnJhbWUgUmVnaXN0ZXJzLiAgICAobGluZSAgIDYyKQoqICdzdGRhcmcuaCcgYW5kIHJlZ2lzdGVyIGFyZ3VtZW50czogICAgIFJlZ2lzdGVyIEFyZ3VtZW50cy4gKGxpbmUgICA0NykKKiBTVERDXzBfSU5fU1lTVEVNX0hFQURFUlM6ICAgICAgICAgICAgICBNaXNjLiAgICAgICAgICAgICAgIChsaW5lICAzNjMpCiogU1RNVF9FWFBSOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhwcmVzc2lvbiB0cmVlcy4gICAobGluZSAgICA2KQoqIFNUTVRfSVNfRlVMTF9FWFBSX1A6ICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uIEJvZGllcy4gICAgKGxpbmUgICAyMikKKiBzdG9yYWdlIGxheW91dDogICAgICAgICAgICAgICAgICAgICAgICBTdG9yYWdlIExheW91dC4gICAgIChsaW5lICAgIDYpCiogU1RPUkVfQllfUElFQ0VTX1A6ICAgICAgICAgICAgICAgICAgICAgQ29zdHMuICAgICAgICAgICAgICAobGluZSAgMTQ1KQoqIFNUT1JFX0ZMQUdfVkFMVUU6ICAgICAgICAgICAgICAgICAgICAgIE1pc2MuICAgICAgICAgICAgICAgKGxpbmUgIDIxNCkKKiAnc3RvcmVfbXVsdGlwbGUnIGluc3RydWN0aW9uIHBhdHRlcm46ICBTdGFuZGFyZCBOYW1lcy4gICAgIChsaW5lICAxNTkpCiogc3RyY3B5OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RvcmFnZSBMYXlvdXQuICAgICAobGluZSAgMjEyKQoqIFNUUklDVF9BTElHTk1FTlQ6ICAgICAgICAgICAgICAgICAgICAgIFN0b3JhZ2UgTGF5b3V0LiAgICAgKGxpbmUgIDI1NSkKKiBzdHJpY3RfbG93X3BhcnQ6ICAgICAgICAgICAgICAgICAgICAgICBSVEwgRGVjbGFyYXRpb25zLiAgIChsaW5lICAgIDkpCiogc3RyaWN0X21lbW9yeV9hZGRyZXNzX3A6ICAgICAgICAgICAgICAgQWRkcmVzc2luZyBNb2Rlcy4gICAobGluZSAgMTY3KQoqIFNUUklOR19DU1Q6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4cHJlc3Npb24gdHJlZXMuICAgKGxpbmUgICAgNikKKiBTVFJJTkdfUE9PTF9BRERSRVNTX1A6ICAgICAgICAgICAgICAgICBGbGFncy4gICAgICAgICAgICAgIChsaW5lICAxNjgpCiogJ3N0cmxlbk0nIGluc3RydWN0aW9uIHBhdHRlcm46ICAgICAgICAgU3RhbmRhcmQgTmFtZXMuICAgICAobGluZSAgNzY1KQoqIHN0cnVjdHVyZSB2YWx1ZSBhZGRyZXNzOiAgICAgICAgICAgICAgIEFnZ3JlZ2F0ZSBSZXR1cm4uICAgKGxpbmUgICAgNikKKiBzdHJ1Y3R1cmVzLCByZXR1cm5pbmc6ICAgICAgICAgICAgICAgICBJbnRlcmZhY2UuICAgICAgICAgIChsaW5lICAgMTApCiogU1RSVUNUVVJFX1NJWkVfQk9VTkRBUlk6ICAgICAgICAgICAgICAgU3RvcmFnZSBMYXlvdXQuICAgICAobGluZSAgMjQ3KQoqICdzdWJNMycgaW5zdHJ1Y3Rpb24gcGF0dGVybjogICAgICAgICAgIFN0YW5kYXJkIE5hbWVzLiAgICAgKGxpbmUgIDIyMCkKKiBTVUJPQkpFQ1Q6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbiBCb2RpZXMuICAgIChsaW5lICAgIDYpCiogU1VCT0JKRUNUX0NMRUFOVVA6ICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb24gQm9kaWVzLiAgICAobGluZSAgICA2KQoqIHN1YnJlZzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ3MgYW5kIE1lbW9yeS4gICAgKGxpbmUgICA5NykKKiAnc3VicmVnJyBhbmQgJy9zJzogICAgICAgICAgICAgICAgICAgICBGbGFncy4gICAgICAgICAgICAgIChsaW5lICAxOTApCiogJ3N1YnJlZycgYW5kICcvdSc6ICAgICAgICAgICAgICAgICAgICAgRmxhZ3MuICAgICAgICAgICAgICAobGluZSAgMTgzKQoqICdzdWJyZWcnIGFuZCAnL3UnIGFuZCAnL3YnOiAgICAgICAgICAgIEZsYWdzLiAgICAgICAgICAgICAgKGxpbmUgIDE3MykKKiAnc3VicmVnJywgaW4gJ3N0cmljdF9sb3dfcGFydCc6ICAgICAgICBSVEwgRGVjbGFyYXRpb25zLiAgIChsaW5lICAgIDkpCiogJ3N1YnJlZycsIHNwZWNpYWwgcmVsb2FkIGhhbmRsaW5nOiAgICAgUmVncyBhbmQgTWVtb3J5LiAgICAobGluZSAgMTQ2KQoqIFNVQlJFR19CWVRFOiAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ3MgYW5kIE1lbW9yeS4gICAgKGxpbmUgIDE2NykKKiBTVUJSRUdfUFJPTU9URURfVU5TSUdORURfUDogICAgICAgICAgICBGbGFncy4gICAgICAgICAgICAgIChsaW5lICAxNzMpCiogU1VCUkVHX1BST01PVEVEX1VOU0lHTkVEX1NFVDogICAgICAgICAgRmxhZ3MuICAgICAgICAgICAgICAobGluZSAgMTgzKQoqIFNVQlJFR19QUk9NT1RFRF9WQVJfUDogICAgICAgICAgICAgICAgIEZsYWdzLiAgICAgICAgICAgICAgKGxpbmUgIDE5MCkKKiBTVUJSRUdfUkVHOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdzIGFuZCBNZW1vcnkuICAgIChsaW5lICAxNjcpCiogU1VDQ0VTU19FWElUX0NPREU6ICAgICAgICAgICAgICAgICAgICAgSG9zdCBNaXNjLiAgICAgICAgICAobGluZSAgIDEyKQoqIFNVUFBPUlRTX0lOSVRfUFJJT1JJVFk6ICAgICAgICAgICAgICAgIE1hY3JvcyBmb3IgSW5pdGlhbGl6YXRpb24uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDU3KQoqIFNVUFBPUlRTX09ORV9PTkxZOiAgICAgICAgICAgICAgICAgICAgIExhYmVsIE91dHB1dC4gICAgICAgKGxpbmUgIDIyMikKKiBTVVBQT1JUU19XRUFLOiAgICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCBPdXRwdXQuICAgICAgIChsaW5lICAyMDMpCiogU1dJVENIRVNfTkVFRF9TUEFDRVM6ICAgICAgICAgICAgICAgICAgRHJpdmVyLiAgICAgICAgICAgICAobGluZSAgIDQ2KQoqIFNXSVRDSF9CT0RZOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uIEJvZGllcy4gICAgKGxpbmUgICAgNikKKiBTV0lUQ0hfQ09ORDogICAgICAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbiBCb2RpZXMuICAgIChsaW5lICAgIDYpCiogU1dJVENIX0NVUlRBSUxTX0NPTVBJTEFUSU9OOiAgICAgICAgICAgRHJpdmVyLiAgICAgICAgICAgICAobGluZSAgIDMyKQoqIFNXSVRDSF9TVE1UOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uIEJvZGllcy4gICAgKGxpbmUgICAgNikKKiBTV0lUQ0hfVEFLRVNfQVJHOiAgICAgICAgICAgICAgICAgICAgICBEcml2ZXIuICAgICAgICAgICAgIChsaW5lICAgIDgpCiogc3ltYm9saWMgbGFiZWw6ICAgICAgICAgICAgICAgICAgICAgICAgU2hhcmluZy4gICAgICAgICAgICAobGluZSAgIDIwKQoqIFNZTUJPTF9GTEFHX0FOQ0hPUjogICAgICAgICAgICAgICAgICAgIFNwZWNpYWwgQWNjZXNzb3JzLiAgKGxpbmUgIDEwMykKKiBTWU1CT0xfRkxBR19FWFRFUk5BTDogICAgICAgICAgICAgICAgICBTcGVjaWFsIEFjY2Vzc29ycy4gIChsaW5lICAgODUpCiogU1lNQk9MX0ZMQUdfRlVOQ1RJT046ICAgICAgICAgICAgICAgICAgU3BlY2lhbCBBY2Nlc3NvcnMuICAobGluZSAgIDc4KQoqIFNZTUJPTF9GTEFHX0hBU19CTE9DS19JTkZPOiAgICAgICAgICAgIFNwZWNpYWwgQWNjZXNzb3JzLiAgKGxpbmUgICA5OSkKKiBTWU1CT0xfRkxBR19MT0NBTDogICAgICAgICAgICAgICAgICAgICBTcGVjaWFsIEFjY2Vzc29ycy4gIChsaW5lICAgODEpCiogU1lNQk9MX0ZMQUdfU01BTEw6ICAgICAgICAgICAgICAgICAgICAgU3BlY2lhbCBBY2Nlc3NvcnMuICAobGluZSAgIDkwKQoqIFNZTUJPTF9GTEFHX1RMU19TSElGVDogICAgICAgICAgICAgICAgIFNwZWNpYWwgQWNjZXNzb3JzLiAgKGxpbmUgICA5NCkKKiBzeW1ib2xfcmVmOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb25zdGFudHMuICAgICAgICAgIChsaW5lICAgOTUpCiogJ3N5bWJvbF9yZWYnIGFuZCAnL2YnOiAgICAgICAgICAgICAgICAgRmxhZ3MuICAgICAgICAgICAgICAobGluZSAgMTY4KQoqICdzeW1ib2xfcmVmJyBhbmQgJy9pJzogICAgICAgICAgICAgICAgIEZsYWdzLiAgICAgICAgICAgICAgKGxpbmUgIDIwNSkKKiAnc3ltYm9sX3JlZicgYW5kICcvdSc6ICAgICAgICAgICAgICAgICBGbGFncy4gICAgICAgICAgICAgIChsaW5lICAgMTApCiogJ3N5bWJvbF9yZWYnIGFuZCAnL3YnOiAgICAgICAgICAgICAgICAgRmxhZ3MuICAgICAgICAgICAgICAobGluZSAgMjA5KQoqICdzeW1ib2xfcmVmJywgUlRMIHNoYXJpbmc6ICAgICAgICAgICAgIFNoYXJpbmcuICAgICAgICAgICAgKGxpbmUgICAyMCkKKiBTWU1CT0xfUkVGX0FOQ0hPUl9QOiAgICAgICAgICAgICAgICAgICBTcGVjaWFsIEFjY2Vzc29ycy4gIChsaW5lICAxMDMpCiogU1lNQk9MX1JFRl9CTE9DSzogICAgICAgICAgICAgICAgICAgICAgU3BlY2lhbCBBY2Nlc3NvcnMuICAobGluZSAgMTE2KQoqIFNZTUJPTF9SRUZfQkxPQ0tfT0ZGU0VUOiAgICAgICAgICAgICAgIFNwZWNpYWwgQWNjZXNzb3JzLiAgKGxpbmUgIDEyMSkKKiBTWU1CT0xfUkVGX0NPTlNUQU5UOiAgICAgICAgICAgICAgICAgICBTcGVjaWFsIEFjY2Vzc29ycy4gIChsaW5lICAgNjQpCiogU1lNQk9MX1JFRl9EQVRBOiAgICAgICAgICAgICAgICAgICAgICAgU3BlY2lhbCBBY2Nlc3NvcnMuICAobGluZSAgIDY4KQoqIFNZTUJPTF9SRUZfREVDTDogICAgICAgICAgICAgICAgICAgICAgIFNwZWNpYWwgQWNjZXNzb3JzLiAgKGxpbmUgICA1MykKKiBTWU1CT0xfUkVGX0VYVEVSTkFMX1A6ICAgICAgICAgICAgICAgICBTcGVjaWFsIEFjY2Vzc29ycy4gIChsaW5lICAgODUpCiogU1lNQk9MX1JFRl9GTEFHOiAgICAgICAgICAgICAgICAgICAgICAgRmxhZ3MuICAgICAgICAgICAgICAobGluZSAgMjA5KQoqICdTWU1CT0xfUkVGX0ZMQUcnLCBpbiAnVEFSR0VUX0VOQ09ERV9TRUNUSU9OX0lORk8nOiBTZWN0aW9ucy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAyNTkpCiogU1lNQk9MX1JFRl9GTEFHUzogICAgICAgICAgICAgICAgICAgICAgU3BlY2lhbCBBY2Nlc3NvcnMuICAobGluZSAgIDcyKQoqIFNZTUJPTF9SRUZfRlVOQ1RJT05fUDogICAgICAgICAgICAgICAgIFNwZWNpYWwgQWNjZXNzb3JzLiAgKGxpbmUgICA3OCkKKiBTWU1CT0xfUkVGX0hBU19CTE9DS19JTkZPX1A6ICAgICAgICAgICBTcGVjaWFsIEFjY2Vzc29ycy4gIChsaW5lICAgOTkpCiogU1lNQk9MX1JFRl9MT0NBTF9QOiAgICAgICAgICAgICAgICAgICAgU3BlY2lhbCBBY2Nlc3NvcnMuICAobGluZSAgIDgxKQoqIFNZTUJPTF9SRUZfU01BTExfUDogICAgICAgICAgICAgICAgICAgIFNwZWNpYWwgQWNjZXNzb3JzLiAgKGxpbmUgICA5MCkKKiBTWU1CT0xfUkVGX1RMU19NT0RFTDogICAgICAgICAgICAgICAgICBTcGVjaWFsIEFjY2Vzc29ycy4gIChsaW5lICAgOTQpCiogU1lNQk9MX1JFRl9VU0VEOiAgICAgICAgICAgICAgICAgICAgICAgRmxhZ3MuICAgICAgICAgICAgICAobGluZSAgMjAwKQoqIFNZTUJPTF9SRUZfV0VBSzogICAgICAgICAgICAgICAgICAgICAgIEZsYWdzLiAgICAgICAgICAgICAgKGxpbmUgIDIwNSkKKiAnc3luY19hZGRNT0RFJyBpbnN0cnVjdGlvbiBwYXR0ZXJuOiAgICBTdGFuZGFyZCBOYW1lcy4gICAgIChsaW5lIDE0MzUpCiogJ3N5bmNfYW5kTU9ERScgaW5zdHJ1Y3Rpb24gcGF0dGVybjogICAgU3RhbmRhcmQgTmFtZXMuICAgICAobGluZSAxNDM1KQoqICdzeW5jX2NvbXBhcmVfYW5kX3N3YXBNT0RFJyBpbnN0cnVjdGlvbiBwYXR0ZXJuOiBTdGFuZGFyZCBOYW1lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lIDE0MDIpCiogJ3N5bmNfY29tcGFyZV9hbmRfc3dhcF9jY01PREUnIGluc3RydWN0aW9uIHBhdHRlcm46IFN0YW5kYXJkIE5hbWVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgMTQyMSkKKiAnc3luY19pb3JNT0RFJyBpbnN0cnVjdGlvbiBwYXR0ZXJuOiAgICBTdGFuZGFyZCBOYW1lcy4gICAgIChsaW5lIDE0MzUpCiogJ3N5bmNfbG9ja19yZWxlYXNlTU9ERScgaW5zdHJ1Y3Rpb24gcGF0dGVybjogU3RhbmRhcmQgTmFtZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNTA2KQoqICdzeW5jX2xvY2tfdGVzdF9hbmRfc2V0TU9ERScgaW5zdHJ1Y3Rpb24gcGF0dGVybjogU3RhbmRhcmQgTmFtZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAxNDc5KQoqICdzeW5jX25hbmRNT0RFJyBpbnN0cnVjdGlvbiBwYXR0ZXJuOiAgIFN0YW5kYXJkIE5hbWVzLiAgICAgKGxpbmUgMTQzNSkKKiAnc3luY19uZXdfYWRkTU9ERScgaW5zdHJ1Y3Rpb24gcGF0dGVybjogU3RhbmRhcmQgTmFtZXMuICAgIChsaW5lIDE0NzEpCiogJ3N5bmNfbmV3X2FuZE1PREUnIGluc3RydWN0aW9uIHBhdHRlcm46IFN0YW5kYXJkIE5hbWVzLiAgICAobGluZSAxNDcxKQoqICdzeW5jX25ld19pb3JNT0RFJyBpbnN0cnVjdGlvbiBwYXR0ZXJuOiBTdGFuZGFyZCBOYW1lcy4gICAgKGxpbmUgMTQ3MSkKKiAnc3luY19uZXdfbmFuZE1PREUnIGluc3RydWN0aW9uIHBhdHRlcm46IFN0YW5kYXJkIE5hbWVzLiAgIChsaW5lIDE0NzEpCiogJ3N5bmNfbmV3X3N1Yk1PREUnIGluc3RydWN0aW9uIHBhdHRlcm46IFN0YW5kYXJkIE5hbWVzLiAgICAobGluZSAxNDcxKQoqICdzeW5jX25ld194b3JNT0RFJyBpbnN0cnVjdGlvbiBwYXR0ZXJuOiBTdGFuZGFyZCBOYW1lcy4gICAgKGxpbmUgMTQ3MSkKKiAnc3luY19vbGRfYWRkTU9ERScgaW5zdHJ1Y3Rpb24gcGF0dGVybjogU3RhbmRhcmQgTmFtZXMuICAgIChsaW5lIDE0NTMpCiogJ3N5bmNfb2xkX2FuZE1PREUnIGluc3RydWN0aW9uIHBhdHRlcm46IFN0YW5kYXJkIE5hbWVzLiAgICAobGluZSAxNDUzKQoqICdzeW5jX29sZF9pb3JNT0RFJyBpbnN0cnVjdGlvbiBwYXR0ZXJuOiBTdGFuZGFyZCBOYW1lcy4gICAgKGxpbmUgMTQ1MykKKiAnc3luY19vbGRfbmFuZE1PREUnIGluc3RydWN0aW9uIHBhdHRlcm46IFN0YW5kYXJkIE5hbWVzLiAgIChsaW5lIDE0NTMpCiogJ3N5bmNfb2xkX3N1Yk1PREUnIGluc3RydWN0aW9uIHBhdHRlcm46IFN0YW5kYXJkIE5hbWVzLiAgICAobGluZSAxNDUzKQoqICdzeW5jX29sZF94b3JNT0RFJyBpbnN0cnVjdGlvbiBwYXR0ZXJuOiBTdGFuZGFyZCBOYW1lcy4gICAgKGxpbmUgMTQ1MykKKiAnc3luY19zdWJNT0RFJyBpbnN0cnVjdGlvbiBwYXR0ZXJuOiAgICBTdGFuZGFyZCBOYW1lcy4gICAgIChsaW5lIDE0MzUpCiogJ3N5bmNfeG9yTU9ERScgaW5zdHJ1Y3Rpb24gcGF0dGVybjogICAgU3RhbmRhcmQgTmFtZXMuICAgICAobGluZSAxNDM1KQoqIFNZU1JPT1RfSEVBREVSU19TVUZGSVhfU1BFQzogICAgICAgICAgIERyaXZlci4gICAgICAgICAgICAgKGxpbmUgIDIzOCkKKiBTWVNST09UX1NVRkZJWF9TUEVDOiAgICAgICAgICAgICAgICAgICBEcml2ZXIuICAgICAgICAgICAgIChsaW5lICAyMzMpCiogU1lTVEVNX0lOQ0xVREVfRElSOiAgICAgICAgICAgICAgICAgICAgRHJpdmVyLiAgICAgICAgICAgICAobGluZSAgNDA2KQoqICd0LVRBUkdFVCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRhcmdldCBGcmFnbWVudC4gICAgKGxpbmUgICAgNikKKiB0YWJsZSBqdW1wOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCYXNpYyBCbG9ja3MuICAgICAgIChsaW5lICAgNTcpCiogJ3RhYmxlanVtcCcgaW5zdHJ1Y3Rpb24gcGF0dGVybjogICAgICAgU3RhbmRhcmQgTmFtZXMuICAgICAobGluZSAxMDg4KQoqIHRhZzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUWSBPcHRpb25zLiAgICAgICAgKGxpbmUgICA4MSkKKiB0YWdnaW5nIGluc25zOiAgICAgICAgICAgICAgICAgICAgICAgICBUYWdnaW5nIEluc25zLiAgICAgIChsaW5lICAgIDYpCiogdGFpbCBjYWxsczogICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFpbCBDYWxscy4gICAgICAgICAobGluZSAgICA2KQoqIFRBbW9kZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hY2hpbmUgTW9kZXMuICAgICAgKGxpbmUgIDE1NSkKKiB0YXJnZXQgYXR0cmlidXRlczogICAgICAgICAgICAgICAgICAgICBUYXJnZXQgQXR0cmlidXRlcy4gIChsaW5lICAgIDYpCiogdGFyZ2V0IGRlc2NyaXB0aW9uIG1hY3JvczogICAgICAgICAgICAgVGFyZ2V0IE1hY3Jvcy4gICAgICAobGluZSAgICA2KQoqIHRhcmdldCBmdW5jdGlvbnM6ICAgICAgICAgICAgICAgICAgICAgIFRhcmdldCBTdHJ1Y3R1cmUuICAgKGxpbmUgICAgNikKKiB0YXJnZXQgaG9va3M6ICAgICAgICAgICAgICAgICAgICAgICAgICBUYXJnZXQgU3RydWN0dXJlLiAgIChsaW5lICAgIDYpCiogdGFyZ2V0IG1ha2VmaWxlIGZyYWdtZW50OiAgICAgICAgICAgICAgVGFyZ2V0IEZyYWdtZW50LiAgICAobGluZSAgICA2KQoqIHRhcmdldCBzcGVjaWZpY2F0aW9uczogICAgICAgICAgICAgICAgIFJ1bi10aW1lIFRhcmdldC4gICAgKGxpbmUgICAgNikKKiB0YXJnZXRtOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYXJnZXQgU3RydWN0dXJlLiAgIChsaW5lICAgIDYpCiogdGFyZ2V0cywgbWFrZWZpbGU6ICAgICAgICAgICAgICAgICAgICAgTWFrZWZpbGUuICAgICAgICAgICAobGluZSAgICA2KQoqIFRBUkdFVF9BRERSRVNTX0NPU1Q6ICAgICAgICAgICAgICAgICAgIENvc3RzLiAgICAgICAgICAgICAgKGxpbmUgIDIyOSkKKiBUQVJHRVRfQUxJR05fQU5PTl9CSVRGSUVMRFM6ICAgICAgICAgICBTdG9yYWdlIExheW91dC4gICAgIChsaW5lICAzMzIpCiogVEFSR0VUX0FMTE9DQVRFX0lOSVRJQUxfVkFMVUU6ICAgICAgICAgTWlzYy4gICAgICAgICAgICAgICAobGluZSAgNzIzKQoqIFRBUkdFVF9BUkdfUEFSVElBTF9CWVRFUzogICAgICAgICAgICAgIFJlZ2lzdGVyIEFyZ3VtZW50cy4gKGxpbmUgICA4MSkKKiBUQVJHRVRfQVJNX0VBQklfVU5XSU5ERVI6ICAgICAgICAgICAgICBFeGNlcHRpb24gUmVnaW9uIE91dHB1dC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxMTEpCiogVEFSR0VUX0FTTV9BTElHTkVEX0RJX09QOiAgICAgICAgICAgICAgRGF0YSBPdXRwdXQuICAgICAgICAobGluZSAgICA5KQoqIFRBUkdFVF9BU01fQUxJR05FRF9ISV9PUDogICAgICAgICAgICAgIERhdGEgT3V0cHV0LiAgICAgICAgKGxpbmUgICAgNykKKiBUQVJHRVRfQVNNX0FMSUdORURfU0lfT1A6ICAgICAgICAgICAgICBEYXRhIE91dHB1dC4gICAgICAgIChsaW5lICAgIDgpCiogVEFSR0VUX0FTTV9BTElHTkVEX1RJX09QOiAgICAgICAgICAgICAgRGF0YSBPdXRwdXQuICAgICAgICAobGluZSAgIDEwKQoqIFRBUkdFVF9BU01fQVNTRU1CTEVfVklTSUJJTElUWTogICAgICAgIExhYmVsIE91dHB1dC4gICAgICAgKGxpbmUgIDIzMykKKiBUQVJHRVRfQVNNX0JZVEVfT1A6ICAgICAgICAgICAgICAgICAgICBEYXRhIE91dHB1dC4gICAgICAgIChsaW5lICAgIDYpCiogVEFSR0VUX0FTTV9DQU5fT1VUUFVUX01JX1RIVU5LOiAgICAgICAgRnVuY3Rpb24gRW50cnkuICAgICAobGluZSAgMjMyKQoqIFRBUkdFVF9BU01fQ0xPU0VfUEFSRU46ICAgICAgICAgICAgICAgIERhdGEgT3V0cHV0LiAgICAgICAgKGxpbmUgIDEyOCkKKiBUQVJHRVRfQVNNX0NPTlNUUlVDVE9SOiAgICAgICAgICAgICAgICBNYWNyb3MgZm9yIEluaXRpYWxpemF0aW9uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA2OCkKKiBUQVJHRVRfQVNNX0RFU1RSVUNUT1I6ICAgICAgICAgICAgICAgICBNYWNyb3MgZm9yIEluaXRpYWxpemF0aW9uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA4MikKKiBUQVJHRVRfQVNNX0VNSVRfRVhDRVBUX1RBQkxFX0xBQkVMOiAgICBEaXNwYXRjaCBUYWJsZXMuICAgIChsaW5lICAgNzMpCiogVEFSR0VUX0FTTV9FTUlUX1VOV0lORF9MQUJFTDogICAgICAgICAgRGlzcGF0Y2ggVGFibGVzLiAgICAobGluZSAgIDYxKQoqIFRBUkdFVF9BU01fRVhURVJOQUxfTElCQ0FMTDogICAgICAgICAgIExhYmVsIE91dHB1dC4gICAgICAgKGxpbmUgIDI2OSkKKiBUQVJHRVRfQVNNX0ZJTEVfRU5EOiAgICAgICAgICAgICAgICAgICBGaWxlIEZyYW1ld29yay4gICAgIChsaW5lICAgMzUpCiogVEFSR0VUX0FTTV9GSUxFX1NUQVJUOiAgICAgICAgICAgICAgICAgRmlsZSBGcmFtZXdvcmsuICAgICAobGluZSAgICA4KQoqIFRBUkdFVF9BU01fRklMRV9TVEFSVF9BUFBfT0ZGOiAgICAgICAgIEZpbGUgRnJhbWV3b3JrLiAgICAgKGxpbmUgICAxNikKKiBUQVJHRVRfQVNNX0ZJTEVfU1RBUlRfRklMRV9ESVJFQ1RJVkU6ICBGaWxlIEZyYW1ld29yay4gICAgIChsaW5lICAgMjkpCiogVEFSR0VUX0FTTV9GVU5DVElPTl9CRUdJTl9FUElMT0dVRTogICAgRnVuY3Rpb24gRW50cnkuICAgICAobGluZSAgIDU5KQoqIFRBUkdFVF9BU01fRlVOQ1RJT05fRU5EX1BST0xPR1VFOiAgICAgIEZ1bmN0aW9uIEVudHJ5LiAgICAgKGxpbmUgICA1MykKKiBUQVJHRVRfQVNNX0ZVTkNUSU9OX0VQSUxPR1VFOiAgICAgICAgICBGdW5jdGlvbiBFbnRyeS4gICAgIChsaW5lICAgNjUpCiogJ1RBUkdFVF9BU01fRlVOQ1RJT05fRVBJTE9HVUUnIGFuZCB0cmFtcG9saW5lczogVHJhbXBvbGluZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDcwKQoqIFRBUkdFVF9BU01fRlVOQ1RJT05fUFJPTE9HVUU6ICAgICAgICAgIEZ1bmN0aW9uIEVudHJ5LiAgICAgKGxpbmUgICAgOSkKKiAnVEFSR0VUX0FTTV9GVU5DVElPTl9QUk9MT0dVRScgYW5kIHRyYW1wb2xpbmVzOiBUcmFtcG9saW5lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgNzApCiogVEFSR0VUX0FTTV9GVU5DVElPTl9ST0RBVEFfU0VDVElPTjogICAgU2VjdGlvbnMuICAgICAgICAgICAobGluZSAgMjA0KQoqIFRBUkdFVF9BU01fR0xPQkFMSVpFX0RFQ0xfTkFNRTogICAgICAgIExhYmVsIE91dHB1dC4gICAgICAgKGxpbmUgIDE2OCkKKiBUQVJHRVRfQVNNX0dMT0JBTElaRV9MQUJFTDogICAgICAgICAgICBMYWJlbCBPdXRwdXQuICAgICAgIChsaW5lICAxNTkpCiogVEFSR0VUX0FTTV9JTklUX1NFQ1RJT05TOiAgICAgICAgICAgICAgU2VjdGlvbnMuICAgICAgICAgICAobGluZSAgMTUwKQoqIFRBUkdFVF9BU01fSU5URUdFUjogICAgICAgICAgICAgICAgICAgIERhdGEgT3V0cHV0LiAgICAgICAgKGxpbmUgICAyNSkKKiBUQVJHRVRfQVNNX0lOVEVSTkFMX0xBQkVMOiAgICAgICAgICAgICBMYWJlbCBPdXRwdXQuICAgICAgIChsaW5lICAzMDMpCiogVEFSR0VUX0FTTV9NQVJLX0RFQ0xfUFJFU0VSVkVEOiAgICAgICAgTGFiZWwgT3V0cHV0LiAgICAgICAobGluZSAgMjc1KQoqIFRBUkdFVF9BU01fTkFNRURfU0VDVElPTjogICAgICAgICAgICAgIEZpbGUgRnJhbWV3b3JrLiAgICAgKGxpbmUgICA4NikKKiBUQVJHRVRfQVNNX09QRU5fUEFSRU46ICAgICAgICAgICAgICAgICBEYXRhIE91dHB1dC4gICAgICAgIChsaW5lICAxMjcpCiogVEFSR0VUX0FTTV9PVVRQVVRfQU5DSE9SOiAgICAgICAgICAgICAgQW5jaG9yZWQgQWRkcmVzc2VzLiAobGluZSAgIDQyKQoqIFRBUkdFVF9BU01fT1VUUFVUX0RXQVJGX0RUUFJFTDogICAgICAgIFNEQiBhbmQgRFdBUkYuICAgICAgKGxpbmUgICA1NikKKiBUQVJHRVRfQVNNX09VVFBVVF9NSV9USFVOSzogICAgICAgICAgICBGdW5jdGlvbiBFbnRyeS4gICAgIChsaW5lICAxOTApCiogVEFSR0VUX0FTTV9SRUNPUkRfR0NDX1NXSVRDSEVTOiAgICAgICAgRmlsZSBGcmFtZXdvcmsuICAgICAobGluZSAgMTE4KQoqIFRBUkdFVF9BU01fUkVDT1JEX0dDQ19TV0lUQ0hFU19TRUNUSU9OOiBGaWxlIEZyYW1ld29yay4gICAgKGxpbmUgIDE2MykKKiBUQVJHRVRfQVNNX1NFTEVDVF9SVFhfU0VDVElPTjogICAgICAgICBTZWN0aW9ucy4gICAgICAgICAgIChsaW5lICAyMTIpCiogVEFSR0VUX0FTTV9TRUxFQ1RfU0VDVElPTjogICAgICAgICAgICAgU2VjdGlvbnMuICAgICAgICAgICAobGluZSAgMTcwKQoqIFRBUkdFVF9BU01fVFRZUEU6ICAgICAgICAgICAgICAgICAgICAgIEV4Y2VwdGlvbiBSZWdpb24gT3V0cHV0LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDEwNSkKKiBUQVJHRVRfQVNNX1VOQUxJR05FRF9ESV9PUDogICAgICAgICAgICBEYXRhIE91dHB1dC4gICAgICAgIChsaW5lICAgMTMpCiogVEFSR0VUX0FTTV9VTkFMSUdORURfSElfT1A6ICAgICAgICAgICAgRGF0YSBPdXRwdXQuICAgICAgICAobGluZSAgIDExKQoqIFRBUkdFVF9BU01fVU5BTElHTkVEX1NJX09QOiAgICAgICAgICAgIERhdGEgT3V0cHV0LiAgICAgICAgKGxpbmUgICAxMikKKiBUQVJHRVRfQVNNX1VOQUxJR05FRF9USV9PUDogICAgICAgICAgICBEYXRhIE91dHB1dC4gICAgICAgIChsaW5lICAgMTQpCiogVEFSR0VUX0FTTV9VTklRVUVfU0VDVElPTjogICAgICAgICAgICAgU2VjdGlvbnMuICAgICAgICAgICAobGluZSAgMTkyKQoqIFRBUkdFVF9BVFRSSUJVVEVfVEFCTEU6ICAgICAgICAgICAgICAgIFRhcmdldCBBdHRyaWJ1dGVzLiAgKGxpbmUgICAxMCkKKiBUQVJHRVRfQklORFNfTE9DQUxfUDogICAgICAgICAgICAgICAgICBTZWN0aW9ucy4gICAgICAgICAgIChsaW5lICAyODMpCiogVEFSR0VUX0JSQU5DSF9UQVJHRVRfUkVHSVNURVJfQ0FMTEVFX1NBVkVEOiBNaXNjLiAgICAgICAgICAobGluZSAgODE5KQoqIFRBUkdFVF9CUkFOQ0hfVEFSR0VUX1JFR0lTVEVSX0NMQVNTOiAgIE1pc2MuICAgICAgICAgICAgICAgKGxpbmUgIDgxMikKKiBUQVJHRVRfQlVJTERfQlVJTFRJTl9WQV9MSVNUOiAgICAgICAgICBSZWdpc3RlciBBcmd1bWVudHMuIChsaW5lICAyNDcpCiogVEFSR0VUX0JVSUxUSU5fUkVDSVBST0NBTDogICAgICAgICAgICAgQWRkcmVzc2luZyBNb2Rlcy4gICAobGluZSAgMjI2KQoqIFRBUkdFVF9CVUlMVElOX1NFVEpNUF9GUkFNRV9WQUxVRTogICAgIEZyYW1lIExheW91dC4gICAgICAgKGxpbmUgIDEwNykKKiBUQVJHRVRfQzk5X0ZVTkNUSU9OUzogICAgICAgICAgICAgICAgICBMaWJyYXJ5IENhbGxzLiAgICAgIChsaW5lICAgNzYpCiogVEFSR0VUX0NBTExFRV9DT1BJRVM6ICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgQXJndW1lbnRzLiAobGluZSAgMTEzKQoqIFRBUkdFVF9DQU5OT1RfRk9SQ0VfQ09OU1RfTUVNOiAgICAgICAgIEFkZHJlc3NpbmcgTW9kZXMuICAgKGxpbmUgIDIwOCkKKiBUQVJHRVRfQ0FOTk9UX01PRElGWV9KVU1QU19QOiAgICAgICAgICBNaXNjLiAgICAgICAgICAgICAgIChsaW5lICA3OTkpCiogVEFSR0VUX0NPTU1VVEFUSVZFX1A6ICAgICAgICAgICAgICAgICAgTWlzYy4gICAgICAgICAgICAgICAobGluZSAgNzE2KQoqIFRBUkdFVF9DT01QX1RZUEVfQVRUUklCVVRFUzogICAgICAgICAgIFRhcmdldCBBdHRyaWJ1dGVzLiAgKGxpbmUgICAxNykKKiBUQVJHRVRfQ1BVX0NQUF9CVUlMVElOUzogICAgICAgICAgICAgICBSdW4tdGltZSBUYXJnZXQuICAgIChsaW5lICAgIDgpCiogVEFSR0VUX0NYWF9BREpVU1RfQ0xBU1NfQVRfREVGSU5JVElPTjogQysrIEFCSS4gICAgICAgICAgICAobGluZSAgIDg2KQoqIFRBUkdFVF9DWFhfQ0RUT1JfUkVUVVJOU19USElTOiAgICAgICAgIEMrKyBBQkkuICAgICAgICAgICAgKGxpbmUgICAzNykKKiBUQVJHRVRfQ1hYX0NMQVNTX0RBVEFfQUxXQVlTX0NPTURBVDogICBDKysgQUJJLiAgICAgICAgICAgIChsaW5lICAgNjEpCiogVEFSR0VUX0NYWF9DT09LSUVfSEFTX1NJWkU6ICAgICAgICAgICAgQysrIEFCSS4gICAgICAgICAgICAobGluZSAgIDI0KQoqIFRBUkdFVF9DWFhfREVURVJNSU5FX0NMQVNTX0RBVEFfVklTSUJJTElUWTogQysrIEFCSS4gICAgICAgKGxpbmUgICA1MikKKiBUQVJHRVRfQ1hYX0dFVF9DT09LSUVfU0laRTogICAgICAgICAgICBDKysgQUJJLiAgICAgICAgICAgIChsaW5lICAgMTcpCiogVEFSR0VUX0NYWF9HVUFSRF9NQVNLX0JJVDogICAgICAgICAgICAgQysrIEFCSS4gICAgICAgICAgICAobGluZSAgIDExKQoqIFRBUkdFVF9DWFhfR1VBUkRfVFlQRTogICAgICAgICAgICAgICAgIEMrKyBBQkkuICAgICAgICAgICAgKGxpbmUgICAgNikKKiBUQVJHRVRfQ1hYX0lNUE9SVF9FWFBPUlRfQ0xBU1M6ICAgICAgICBDKysgQUJJLiAgICAgICAgICAgIChsaW5lICAgMjgpCiogVEFSR0VUX0NYWF9LRVlfTUVUSE9EX01BWV9CRV9JTkxJTkU6ICAgQysrIEFCSS4gICAgICAgICAgICAobGluZSAgIDQyKQoqIFRBUkdFVF9DWFhfTElCUkFSWV9SVFRJX0NPTURBVDogICAgICAgIEMrKyBBQkkuICAgICAgICAgICAgKGxpbmUgICA2OCkKKiBUQVJHRVRfQ1hYX1VTRV9BRUFCSV9BVEVYSVQ6ICAgICAgICAgICBDKysgQUJJLiAgICAgICAgICAgIChsaW5lICAgNzMpCiogVEFSR0VUX0NYWF9VU0VfQVRFWElUX0ZPUl9DWEFfQVRFWElUOiAgQysrIEFCSS4gICAgICAgICAgICAobGluZSAgIDc5KQoqIFRBUkdFVF9ERUNJTUFMX0ZMT0FUX1NVUFBPUlRFRF9QOiAgICAgIFN0b3JhZ2UgTGF5b3V0LiAgICAgKGxpbmUgIDUzMikKKiBUQVJHRVRfREVDTFNQRUM6ICAgICAgICAgICAgICAgICAgICAgICBUYXJnZXQgQXR0cmlidXRlcy4gIChsaW5lICAgNjMpCiogVEFSR0VUX0RFRkFVTFRfUEFDS19TVFJVQ1Q6ICAgICAgICAgICAgTWlzYy4gICAgICAgICAgICAgICAobGluZSAgNDc5KQoqIFRBUkdFVF9ERUZBVUxUX1NIT1JUX0VOVU1TOiAgICAgICAgICAgIFR5cGUgTGF5b3V0LiAgICAgICAgKGxpbmUgIDE1OSkKKiBUQVJHRVRfREVGRVJSRURfT1VUUFVUX0RFRlM6ICAgICAgICAgICBMYWJlbCBPdXRwdXQuICAgICAgIChsaW5lICAzODgpCiogVEFSR0VUX0RFTEVHSVRJTUlaRV9BRERSRVNTOiAgICAgICAgICAgQWRkcmVzc2luZyBNb2Rlcy4gICAobGluZSAgMTk5KQoqIFRBUkdFVF9ETExJTVBPUlRfREVDTF9BVFRSSUJVVEVTOiAgICAgIFRhcmdldCBBdHRyaWJ1dGVzLiAgKGxpbmUgICA0NykKKiBUQVJHRVRfRFdBUkZfQ0FMTElOR19DT05WRU5USU9OOiAgICAgICBTREIgYW5kIERXQVJGLiAgICAgIChsaW5lICAgMTYpCiogVEFSR0VUX0RXQVJGX0hBTkRMRV9GUkFNRV9VTlNQRUM6ICAgICAgRnJhbWUgTGF5b3V0LiAgICAgICAobGluZSAgMTY5KQoqIFRBUkdFVF9EV0FSRl9SRUdJU1RFUl9TUEFOOiAgICAgICAgICAgIEV4Y2VwdGlvbiBSZWdpb24gT3V0cHV0LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA4OCkKKiBUQVJHRVRfRURPTTogICAgICAgICAgICAgICAgICAgICAgICAgICBMaWJyYXJ5IENhbGxzLiAgICAgIChsaW5lICAgNTgpCiogVEFSR0VUX0VOQ09ERV9TRUNUSU9OX0lORk86ICAgICAgICAgICAgU2VjdGlvbnMuICAgICAgICAgICAobGluZSAgMjMzKQoqICdUQVJHRVRfRU5DT0RFX1NFQ1RJT05fSU5GTycgYW5kIGFkZHJlc3MgdmFsaWRhdGlvbjogQWRkcmVzc2luZyBNb2Rlcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgOTEpCiogJ1RBUkdFVF9FTkNPREVfU0VDVElPTl9JTkZPJyB1c2FnZTogICAgSW5zdHJ1Y3Rpb24gT3V0cHV0LiAobGluZSAgIDk5KQoqIFRBUkdFVF9FWEVDVVRBQkxFX1NVRkZJWDogICAgICAgICAgICAgIE1pc2MuICAgICAgICAgICAgICAgKGxpbmUgIDc3MykKKiBUQVJHRVRfRVhQQU5EX0JVSUxUSU46ICAgICAgICAgICAgICAgICBNaXNjLiAgICAgICAgICAgICAgIChsaW5lICA2NjIpCiogVEFSR0VUX0VYUEFORF9CVUlMVElOX1NBVkVSRUdTOiAgICAgICAgVmFyYXJncy4gICAgICAgICAgICAobGluZSAgIDg5KQoqIFRBUkdFVF9FWFBBTkRfVE9fUlRMX0hPT0s6ICAgICAgICAgICAgIFN0b3JhZ2UgTGF5b3V0LiAgICAgKGxpbmUgIDUzOCkKKiBUQVJHRVRfRVhQUjogICAgICAgICAgICAgICAgICAgICAgICAgICBFeHByZXNzaW9uIHRyZWVzLiAgIChsaW5lICAgIDYpCiogVEFSR0VUX0VYVFJBX0lOQ0xVREVTOiAgICAgICAgICAgICAgICAgTWlzYy4gICAgICAgICAgICAgICAobGluZSAgODQzKQoqIFRBUkdFVF9FWFRSQV9MSVZFX09OX0VOVFJZOiAgICAgICAgICAgIFRhaWwgQ2FsbHMuICAgICAgICAgKGxpbmUgICAyMCkKKiBUQVJHRVRfRVhUUkFfUFJFX0lOQ0xVREVTOiAgICAgICAgICAgICBNaXNjLiAgICAgICAgICAgICAgIChsaW5lICA4NTApCiogVEFSR0VUX0ZJWEVEX0NPTkRJVElPTl9DT0RFX1JFR1M6ICAgICAgQ29uZGl0aW9uIENvZGUuICAgICAobGluZSAgMTQwKQoqIFRBUkdFVF9GSVhFRF9QT0lOVF9TVVBQT1JURURfUDogICAgICAgIFN0b3JhZ2UgTGF5b3V0LiAgICAgKGxpbmUgIDUzNSkKKiB0YXJnZXRfZmxhZ3M6ICAgICAgICAgICAgICAgICAgICAgICAgICBSdW4tdGltZSBUYXJnZXQuICAgIChsaW5lICAgNTEpCiogVEFSR0VUX0ZMT0FUX0ZPUk1BVDogICAgICAgICAgICAgICAgICAgU3RvcmFnZSBMYXlvdXQuICAgICAobGluZSAgNDA0KQoqIFRBUkdFVF9GTFRfRVZBTF9NRVRIT0Q6ICAgICAgICAgICAgICAgIFR5cGUgTGF5b3V0LiAgICAgICAgKGxpbmUgIDE0MCkKKiBUQVJHRVRfRk9MRF9CVUlMVElOOiAgICAgICAgICAgICAgICAgICBNaXNjLiAgICAgICAgICAgICAgIChsaW5lICA2ODQpCiogVEFSR0VUX0ZPUk1BVF9UWVBFUzogICAgICAgICAgICAgICAgICAgTWlzYy4gICAgICAgICAgICAgICAobGluZSAgODcxKQoqIFRBUkdFVF9GVU5DVElPTl9BVFRSSUJVVEVfSU5MSU5BQkxFX1A6IFRhcmdldCBBdHRyaWJ1dGVzLiAgKGxpbmUgICA4NCkKKiBUQVJHRVRfRlVOQ1RJT05fT0tfRk9SX1NJQkNBTEw6ICAgICAgICBUYWlsIENhbGxzLiAgICAgICAgIChsaW5lICAgIDYpCiogVEFSR0VUX0ZVTkNUSU9OX1ZBTFVFOiAgICAgICAgICAgICAgICAgU2NhbGFyIFJldHVybi4gICAgICAobGluZSAgICA5KQoqIFRBUkdFVF9HSU1QTElGWV9WQV9BUkdfRVhQUjogICAgICAgICAgIFJlZ2lzdGVyIEFyZ3VtZW50cy4gKGxpbmUgIDI1MSkKKiBUQVJHRVRfSEFORExFX0NfT1BUSU9OOiAgICAgICAgICAgICAgICBSdW4tdGltZSBUYXJnZXQuICAgIChsaW5lICAgNzYpCiogVEFSR0VUX0hBTkRMRV9PUFRJT046ICAgICAgICAgICAgICAgICAgUnVuLXRpbWUgVGFyZ2V0LiAgICAobGluZSAgIDU5KQoqIFRBUkdFVF9IQVNfU0lOQ09TOiAgICAgICAgICAgICAgICAgICAgIExpYnJhcnkgQ2FsbHMuICAgICAgKGxpbmUgICA4NCkKKiBUQVJHRVRfSEFWRV9DVE9SU19EVE9SUzogICAgICAgICAgICAgICBNYWNyb3MgZm9yIEluaXRpYWxpemF0aW9uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA2MykKKiBUQVJHRVRfSEFWRV9OQU1FRF9TRUNUSU9OUzogICAgICAgICAgICBGaWxlIEZyYW1ld29yay4gICAgIChsaW5lICAgOTYpCiogVEFSR0VUX0hBVkVfU1dJVENIQUJMRV9CU1NfU0VDVElPTlM6ICAgRmlsZSBGcmFtZXdvcmsuICAgICAobGluZSAgMTAwKQoqIFRBUkdFVF9IRUxQOiAgICAgICAgICAgICAgICAgICAgICAgICAgIFJ1bi10aW1lIFRhcmdldC4gICAgKGxpbmUgIDE0MCkKKiBUQVJHRVRfSU5JVF9CVUlMVElOUzogICAgICAgICAgICAgICAgICBNaXNjLiAgICAgICAgICAgICAgIChsaW5lICA2NDUpCiogVEFSR0VUX0lOSVRfRFdBUkZfUkVHX1NJWkVTX0VYVFJBOiAgICAgRXhjZXB0aW9uIFJlZ2lvbiBPdXRwdXQuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDk3KQoqIFRBUkdFVF9JTklUX0xJQkZVTkNTOiAgICAgICAgICAgICAgICAgIExpYnJhcnkgQ2FsbHMuICAgICAgKGxpbmUgICAxNSkKKiBUQVJHRVRfSU5TRVJUX0FUVFJJQlVURVM6ICAgICAgICAgICAgICBUYXJnZXQgQXR0cmlidXRlcy4gIChsaW5lICAgNzEpCiogVEFSR0VUX0lOU1RBTlRJQVRFX0RFQ0xTOiAgICAgICAgICAgICAgU3RvcmFnZSBMYXlvdXQuICAgICAobGluZSAgNTQ2KQoqIFRBUkdFVF9JTlZBTElEX0JJTkFSWV9PUDogICAgICAgICAgICAgIE1pc2MuICAgICAgICAgICAgICAgKGxpbmUgIDkwOCkKKiBUQVJHRVRfSU5WQUxJRF9DT05WRVJTSU9OOiAgICAgICAgICAgICBNaXNjLiAgICAgICAgICAgICAgIChsaW5lICA4OTUpCiogVEFSR0VUX0lOVkFMSURfVU5BUllfT1A6ICAgICAgICAgICAgICAgTWlzYy4gICAgICAgICAgICAgICAobGluZSAgOTAxKQoqIFRBUkdFVF9JTl9TTUFMTF9EQVRBX1A6ICAgICAgICAgICAgICAgIFNlY3Rpb25zLiAgICAgICAgICAgKGxpbmUgIDI3NSkKKiBUQVJHRVRfTElCR0NDX0NNUF9SRVRVUk5fTU9ERTogICAgICAgICBTdG9yYWdlIExheW91dC4gICAgIChsaW5lICAzOTIpCiogVEFSR0VUX0xJQkdDQ19TREFUQV9TRUNUSU9OOiAgICAgICAgICAgU2VjdGlvbnMuICAgICAgICAgICAobGluZSAgMTIyKQoqIFRBUkdFVF9MSUJHQ0NfU0hJRlRfQ09VTlRfTU9ERTogICAgICAgIFN0b3JhZ2UgTGF5b3V0LiAgICAgKGxpbmUgIDM5OCkKKiBUQVJHRVRfTElCX0lOVF9DTVBfQklBU0VEOiAgICAgICAgICAgICBMaWJyYXJ5IENhbGxzLiAgICAgIChsaW5lICAgMzQpCiogVEFSR0VUX01BQ0hJTkVfREVQRU5ERU5UX1JFT1JHOiAgICAgICAgTWlzYy4gICAgICAgICAgICAgICAobGluZSAgNjMwKQoqIFRBUkdFVF9NQU5HTEVfREVDTF9BU1NFTUJMRVJfTkFNRTogICAgIFNlY3Rpb25zLiAgICAgICAgICAgKGxpbmUgIDIyMykKKiBUQVJHRVRfTUFOR0xFX1RZUEU6ICAgICAgICAgICAgICAgICAgICBTdG9yYWdlIExheW91dC4gICAgIChsaW5lICA1NTApCiogVEFSR0VUX01EX0FTTV9DTE9CQkVSUzogICAgICAgICAgICAgICAgTWlzYy4gICAgICAgICAgICAgICAobGluZSAgNTQ0KQoqIFRBUkdFVF9NRU1fUkVGOiAgICAgICAgICAgICAgICAgICAgICAgIEV4cHJlc3Npb24gdHJlZXMuICAgKGxpbmUgICAgNikKKiBUQVJHRVRfTUVSR0VfREVDTF9BVFRSSUJVVEVTOiAgICAgICAgICBUYXJnZXQgQXR0cmlidXRlcy4gIChsaW5lICAgMzcpCiogVEFSR0VUX01FUkdFX1RZUEVfQVRUUklCVVRFUzogICAgICAgICAgVGFyZ2V0IEF0dHJpYnV0ZXMuICAobGluZSAgIDI5KQoqIFRBUkdFVF9NSU5fRElWSVNJT05TX0ZPUl9SRUNJUF9NVUw6ICAgIE1pc2MuICAgICAgICAgICAgICAgKGxpbmUgIDEwMykKKiBUQVJHRVRfTU9ERV9SRVBfRVhURU5ERUQ6ICAgICAgICAgICAgICBNaXNjLiAgICAgICAgICAgICAgIChsaW5lICAxODgpCiogVEFSR0VUX01TX0JJVEZJRUxEX0xBWU9VVF9QOiAgICAgICAgICAgU3RvcmFnZSBMYXlvdXQuICAgICAobGluZSAgNTA1KQoqIFRBUkdFVF9NVVNUX1BBU1NfSU5fU1RBQ0s6ICAgICAgICAgICAgIFJlZ2lzdGVyIEFyZ3VtZW50cy4gKGxpbmUgICA2MCkKKiAnVEFSR0VUX01VU1RfUEFTU19JTl9TVEFDSycsIGFuZCAnRlVOQ1RJT05fQVJHJzogUmVnaXN0ZXIgQXJndW1lbnRzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA1MikKKiBUQVJHRVRfTkFSUk9XX1ZPTEFUSUxFX0JJVEZJRUxEUzogICAgICBTdG9yYWdlIExheW91dC4gICAgIChsaW5lICAzMzgpCiogVEFSR0VUX05fRk9STUFUX1RZUEVTOiAgICAgICAgICAgICAgICAgTWlzYy4gICAgICAgICAgICAgICAobGluZSAgODc2KQoqIFRBUkdFVF9PQkpFQ1RfU1VGRklYOiAgICAgICAgICAgICAgICAgIE1pc2MuICAgICAgICAgICAgICAgKGxpbmUgIDc2OCkKKiBUQVJHRVRfT0JKRk1UX0NQUF9CVUlMVElOUzogICAgICAgICAgICBSdW4tdGltZSBUYXJnZXQuICAgIChsaW5lICAgNDUpCiogVEFSR0VUX09QVEY6ICAgICAgICAgICAgICAgICAgICAgICAgICAgTWlzYy4gICAgICAgICAgICAgICAobGluZSAgODU4KQoqIFRBUkdFVF9PUFRJT05fVFJBTlNMQVRFX1RBQkxFOiAgICAgICAgIERyaXZlci4gICAgICAgICAgICAgKGxpbmUgICA1MikKKiBUQVJHRVRfT1NfQ1BQX0JVSUxUSU5TOiAgICAgICAgICAgICAgICBSdW4tdGltZSBUYXJnZXQuICAgIChsaW5lICAgNDEpCiogVEFSR0VUX1BBU1NfQllfUkVGRVJFTkNFOiAgICAgICAgICAgICAgUmVnaXN0ZXIgQXJndW1lbnRzLiAobGluZSAgMTAxKQoqIFRBUkdFVF9QT1NJWF9JTzogICAgICAgICAgICAgICAgICAgICAgIE1pc2MuICAgICAgICAgICAgICAgKGxpbmUgIDU2OSkKKiBUQVJHRVRfUFJFVEVORF9PVVRHT0lOR19WQVJBUkdTX05BTUVEOiBWYXJhcmdzLiAgICAgICAgICAgIChsaW5lICAxNDgpCiogVEFSR0VUX1BST01PVEVfRlVOQ1RJT05fQVJHUzogICAgICAgICAgU3RvcmFnZSBMYXlvdXQuICAgICAobGluZSAgMTI4KQoqIFRBUkdFVF9QUk9NT1RFX0ZVTkNUSU9OX1JFVFVSTjogICAgICAgIFN0b3JhZ2UgTGF5b3V0LiAgICAgKGxpbmUgIDEzMykKKiBUQVJHRVRfUFJPTU9URV9QUk9UT1RZUEVTOiAgICAgICAgICAgICBTdGFjayBBcmd1bWVudHMuICAgIChsaW5lICAgMTApCiogVEFSR0VUX1BUUk1FTUZVTkNfVkJJVF9MT0NBVElPTjogICAgICAgVHlwZSBMYXlvdXQuICAgICAgICAobGluZSAgMjM0KQoqIFRBUkdFVF9SRUxBWEVEX09SREVSSU5HOiAgICAgICAgICAgICAgIE1pc2MuICAgICAgICAgICAgICAgKGxpbmUgIDg4MCkKKiBUQVJHRVRfUkVTT0xWRV9PVkVSTE9BREVEX0JVSUxUSU46ICAgICBNaXNjLiAgICAgICAgICAgICAgIChsaW5lICA2NzMpCiogVEFSR0VUX1JFVFVSTl9JTl9NRU1PUlk6ICAgICAgICAgICAgICAgQWdncmVnYXRlIFJldHVybi4gICAobGluZSAgIDE1KQoqIFRBUkdFVF9SRVRVUk5fSU5fTVNCOiAgICAgICAgICAgICAgICAgIFNjYWxhciBSZXR1cm4uICAgICAgKGxpbmUgICA5NykKKiBUQVJHRVRfUlRYX0NPU1RTOiAgICAgICAgICAgICAgICAgICAgICBDb3N0cy4gICAgICAgICAgICAgIChsaW5lICAyMDIpCiogVEFSR0VUX1NDQUxBUl9NT0RFX1NVUFBPUlRFRF9QOiAgICAgICAgUmVnaXN0ZXIgQXJndW1lbnRzLiAobGluZSAgMjYyKQoqIFRBUkdFVF9TQ0hFRF9BREpVU1RfQ09TVDogICAgICAgICAgICAgIFNjaGVkdWxpbmcuICAgICAgICAgKGxpbmUgICAzNSkKKiBUQVJHRVRfU0NIRURfQURKVVNUX1BSSU9SSVRZOiAgICAgICAgICBTY2hlZHVsaW5nLiAgICAgICAgIChsaW5lICAgNTApCiogVEFSR0VUX1NDSEVEX0RFUEVOREVOQ0lFU19FVkFMVUFUSU9OX0hPT0s6IFNjaGVkdWxpbmcuICAgICAobGluZSAgIDg3KQoqIFRBUkdFVF9TQ0hFRF9ERkFfTkVXX0NZQ0xFOiAgICAgICAgICAgIFNjaGVkdWxpbmcuICAgICAgICAgKGxpbmUgIDIwMykKKiBUQVJHRVRfU0NIRURfREZBX1BPU1RfQ1lDTEVfQURWQU5DRTogICBTY2hlZHVsaW5nLiAgICAgICAgIChsaW5lICAxNTgpCiogVEFSR0VUX1NDSEVEX0RGQV9QT1NUX0NZQ0xFX0lOU046ICAgICAgU2NoZWR1bGluZy4gICAgICAgICAobGluZSAgMTQyKQoqIFRBUkdFVF9TQ0hFRF9ERkFfUFJFX0NZQ0xFX0FEVkFOQ0U6ICAgIFNjaGVkdWxpbmcuICAgICAgICAgKGxpbmUgIDE1MSkKKiBUQVJHRVRfU0NIRURfREZBX1BSRV9DWUNMRV9JTlNOOiAgICAgICBTY2hlZHVsaW5nLiAgICAgICAgIChsaW5lICAxMzApCiogVEFSR0VUX1NDSEVEX0ZJTklTSDogICAgICAgICAgICAgICAgICAgU2NoZWR1bGluZy4gICAgICAgICAobGluZSAgMTA4KQoqIFRBUkdFVF9TQ0hFRF9GSU5JU0hfR0xPQkFMOiAgICAgICAgICAgIFNjaGVkdWxpbmcuICAgICAgICAgKGxpbmUgIDEyMykKKiBUQVJHRVRfU0NIRURfRklSU1RfQ1lDTEVfTVVMVElQQVNTX0RGQV9MT09LQUhFQUQ6IFNjaGVkdWxpbmcuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMTY1KQoqIFRBUkdFVF9TQ0hFRF9GSVJTVF9DWUNMRV9NVUxUSVBBU1NfREZBX0xPT0tBSEVBRF9HVUFSRDogU2NoZWR1bGluZy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAxOTMpCiogVEFSR0VUX1NDSEVEX0ZJUlNUX0NZQ0xFX01VTFRJUEFTU19ERkFfTE9PS0FIRUFEX0dVQVJEX1NQRUM6IFNjaGVkdWxpbmcuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMjc0KQoqIFRBUkdFVF9TQ0hFRF9HRU5fQ0hFQ0s6ICAgICAgICAgICAgICAgIFNjaGVkdWxpbmcuICAgICAgICAgKGxpbmUgIDI2MikKKiBUQVJHRVRfU0NIRURfSF9JX0RfRVhURU5ERUQ6ICAgICAgICAgICBTY2hlZHVsaW5nLiAgICAgICAgIChsaW5lICAyMzkpCiogVEFSR0VUX1NDSEVEX0lOSVQ6ICAgICAgICAgICAgICAgICAgICAgU2NoZWR1bGluZy4gICAgICAgICAobGluZSAgIDk3KQoqIFRBUkdFVF9TQ0hFRF9JTklUX0RGQV9QT1NUX0NZQ0xFX0lOU046IFNjaGVkdWxpbmcuICAgICAgICAgKGxpbmUgIDE0NykKKiBUQVJHRVRfU0NIRURfSU5JVF9ERkFfUFJFX0NZQ0xFX0lOU046ICBTY2hlZHVsaW5nLiAgICAgICAgIChsaW5lICAxMzkpCiogVEFSR0VUX1NDSEVEX0lOSVRfR0xPQkFMOiAgICAgICAgICAgICAgU2NoZWR1bGluZy4gICAgICAgICAobGluZSAgMTE1KQoqIFRBUkdFVF9TQ0hFRF9JU1NVRV9SQVRFOiAgICAgICAgICAgICAgIFNjaGVkdWxpbmcuICAgICAgICAgKGxpbmUgICAxMSkKKiBUQVJHRVRfU0NIRURfSVNfQ09TVExZX0RFUEVOREVOQ0U6ICAgICBTY2hlZHVsaW5nLiAgICAgICAgIChsaW5lICAyMTcpCiogVEFSR0VUX1NDSEVEX05FRURTX0JMT0NLX1A6ICAgICAgICAgICAgU2NoZWR1bGluZy4gICAgICAgICAobGluZSAgMjU2KQoqIFRBUkdFVF9TQ0hFRF9SRU9SREVSOiAgICAgICAgICAgICAgICAgIFNjaGVkdWxpbmcuICAgICAgICAgKGxpbmUgICA1OCkKKiBUQVJHRVRfU0NIRURfUkVPUkRFUjI6ICAgICAgICAgICAgICAgICBTY2hlZHVsaW5nLiAgICAgICAgIChsaW5lICAgNzUpCiogVEFSR0VUX1NDSEVEX1NFVF9TQ0hFRF9GTEFHUzogICAgICAgICAgU2NoZWR1bGluZy4gICAgICAgICAobGluZSAgMjg2KQoqIFRBUkdFVF9TQ0hFRF9TTVNfUkVTX01JSTogICAgICAgICAgICAgIFNjaGVkdWxpbmcuICAgICAgICAgKGxpbmUgIDI5OCkKKiBUQVJHRVRfU0NIRURfU1BFQ1VMQVRFX0lOU046ICAgICAgICAgICBTY2hlZHVsaW5nLiAgICAgICAgIChsaW5lICAyNDQpCiogVEFSR0VUX1NDSEVEX1ZBUklBQkxFX0lTU1VFOiAgICAgICAgICAgU2NoZWR1bGluZy4gICAgICAgICAobGluZSAgIDIyKQoqIFRBUkdFVF9TRUNPTkRBUllfUkVMT0FEOiAgICAgICAgICAgICAgIFJlZ2lzdGVyIENsYXNzZXMuICAgKGxpbmUgIDI1MSkKKiBUQVJHRVRfU0VDVElPTl9UWVBFX0ZMQUdTOiAgICAgICAgICAgICBGaWxlIEZyYW1ld29yay4gICAgIChsaW5lICAxMDUpCiogVEFSR0VUX1NFVFVQX0lOQ09NSU5HX1ZBUkFSR1M6ICAgICAgICAgVmFyYXJncy4gICAgICAgICAgICAobGluZSAgIDk2KQoqIFRBUkdFVF9TRVRfQ1VSUkVOVF9GVU5DVElPTjogICAgICAgICAgIE1pc2MuICAgICAgICAgICAgICAgKGxpbmUgIDc1MSkKKiBUQVJHRVRfU0VUX0RFRkFVTFRfVFlQRV9BVFRSSUJVVEVTOiAgICBUYXJnZXQgQXR0cmlidXRlcy4gIChsaW5lICAgMjUpCiogVEFSR0VUX1NISUZUX1RSVU5DQVRJT05fTUFTSzogICAgICAgICAgTWlzYy4gICAgICAgICAgICAgICAobGluZSAgMTUxKQoqIFRBUkdFVF9TUExJVF9DT01QTEVYX0FSRzogICAgICAgICAgICAgIFJlZ2lzdGVyIEFyZ3VtZW50cy4gKGxpbmUgIDIzNSkKKiBUQVJHRVRfU1RBQ0tfUFJPVEVDVF9GQUlMOiAgICAgICAgICAgICBTdGFjayBTbWFzaGluZyBQcm90ZWN0aW9uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICAxNikKKiBUQVJHRVRfU1RBQ0tfUFJPVEVDVF9HVUFSRDogICAgICAgICAgICBTdGFjayBTbWFzaGluZyBQcm90ZWN0aW9uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICAgNikKKiBUQVJHRVRfU1RSSUNUX0FSR1VNRU5UX05BTUlORzogICAgICAgICBWYXJhcmdzLiAgICAgICAgICAgIChsaW5lICAxMzIpCiogVEFSR0VUX1NUUlVDVF9WQUxVRV9SVFg6ICAgICAgICAgICAgICAgQWdncmVnYXRlIFJldHVybi4gICAobGluZSAgIDQzKQoqIFRBUkdFVF9VTlNQRUNfTUFZX1RSQVBfUDogICAgICAgICAgICAgIE1pc2MuICAgICAgICAgICAgICAgKGxpbmUgIDc0MikKKiBUQVJHRVRfVU5XSU5EX0VNSVQ6ICAgICAgICAgICAgICAgICAgICBEaXNwYXRjaCBUYWJsZXMuICAgIChsaW5lICAgODApCiogVEFSR0VUX1VOV0lORF9JTkZPOiAgICAgICAgICAgICAgICAgICAgRXhjZXB0aW9uIFJlZ2lvbiBPdXRwdXQuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDU0KQoqIFRBUkdFVF9VU0VTX1dFQUtfVU5XSU5EX0lORk86ICAgICAgICAgIEV4Y2VwdGlvbiBIYW5kbGluZy4gKGxpbmUgIDEyNykKKiBUQVJHRVRfVVNFX0FOQ0hPUlNfRk9SX1NZTUJPTF9QOiAgICAgICBBbmNob3JlZCBBZGRyZXNzZXMuIChsaW5lICAgNTMpCiogVEFSR0VUX1VTRV9CTE9DS1NfRk9SX0NPTlNUQU5UX1A6ICAgICAgQWRkcmVzc2luZyBNb2Rlcy4gICAobGluZSAgMjE5KQoqIFRBUkdFVF9VU0VfSkNSX1NFQ1RJT046ICAgICAgICAgICAgICAgIE1pc2MuICAgICAgICAgICAgICAgKGxpbmUgIDkxNCkKKiBUQVJHRVRfVVNFX0xPQ0FMX1RIVU5LX0FMSUFTX1A6ICAgICAgICBNaXNjLiAgICAgICAgICAgICAgIChsaW5lICA4NjQpCiogVEFSR0VUX1ZBTElEX0RMTElNUE9SVF9BVFRSSUJVVEVfUDogICAgVGFyZ2V0IEF0dHJpYnV0ZXMuICAobGluZSAgIDU4KQoqIFRBUkdFVF9WQUxJRF9QT0lOVEVSX01PREU6ICAgICAgICAgICAgIFJlZ2lzdGVyIEFyZ3VtZW50cy4gKGxpbmUgIDI1NykKKiBUQVJHRVRfVkVDVE9SSVpFX0JVSUxUSU5fQ09OVkVSU0lPTjogICBBZGRyZXNzaW5nIE1vZGVzLiAgIChsaW5lICAyODYpCiogVEFSR0VUX1ZFQ1RPUklaRV9CVUlMVElOX01BU0tfRk9SX0xPQUQ6IEFkZHJlc3NpbmcgTW9kZXMuICAobGluZSAgMjM2KQoqIFRBUkdFVF9WRUNUT1JJWkVfQlVJTFRJTl9NVUxfV0lERU5fRVZFTjogQWRkcmVzc2luZyBNb2Rlcy4gKGxpbmUgIDI2MikKKiBUQVJHRVRfVkVDVE9SSVpFX0JVSUxUSU5fTVVMX1dJREVOX09ERDogQWRkcmVzc2luZyBNb2Rlcy4gIChsaW5lICAyNzQpCiogVEFSR0VUX1ZFQ1RPUklaRV9CVUlMVElOX1ZFQ1RPUklaRURfRlVOQ1RJT046IEFkZHJlc3NpbmcgTW9kZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMzAwKQoqIFRBUkdFVF9WRUNUT1JfTU9ERV9TVVBQT1JURURfUDogICAgICAgIFJlZ2lzdGVyIEFyZ3VtZW50cy4gKGxpbmUgIDI3NCkKKiBUQVJHRVRfVkVDVE9SX09QQVFVRV9QOiAgICAgICAgICAgICAgICBTdG9yYWdlIExheW91dC4gICAgIChsaW5lICA0OTkpCiogVEFSR0VUX1ZFUlNJT046ICAgICAgICAgICAgICAgICAgICAgICAgUnVuLXRpbWUgVGFyZ2V0LiAgICAobGluZSAgIDkwKQoqIFRBUkdFVF9WVEFCTEVfREFUQV9FTlRSWV9ESVNUQU5DRTogICAgIFR5cGUgTGF5b3V0LiAgICAgICAgKGxpbmUgIDI4NykKKiBUQVJHRVRfVlRBQkxFX0VOVFJZX0FMSUdOOiAgICAgICAgICAgICBUeXBlIExheW91dC4gICAgICAgIChsaW5lICAyODEpCiogVEFSR0VUX1ZUQUJMRV9VU0VTX0RFU0NSSVBUT1JTOiAgICAgICAgVHlwZSBMYXlvdXQuICAgICAgICAobGluZSAgMjcwKQoqIFRBUkdFVF9XRUFLX05PVF9JTl9BUkNISVZFX1RPQzogICAgICAgIExhYmVsIE91dHB1dC4gICAgICAgKGxpbmUgIDI0MCkKKiBUQ21vZGU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWNoaW5lIE1vZGVzLiAgICAgIChsaW5lICAxOTYpCiogVERtb2RlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFjaGluZSBNb2Rlcy4gICAgICAobGluZSAgIDk0KQoqIFRFTVBMQVRFX0RFQ0w6ICAgICAgICAgICAgICAgICAgICAgICAgIERlY2xhcmF0aW9ucy4gICAgICAgKGxpbmUgICAgNikKKiBUZW1wb3JhcmllczogICAgICAgICAgICAgICAgICAgICAgICAgICBUZW1wb3Jhcmllcy4gICAgICAgIChsaW5lICAgIDYpCiogdGVybWluYXRpb24gcm91dGluZXM6ICAgICAgICAgICAgICAgICAgSW5pdGlhbGl6YXRpb24uICAgICAobGluZSAgICA2KQoqIHRlc3RpbmcgY29uc3RyYWludHM6ICAgICAgICAgICAgICAgICAgIEMgQ29uc3RyYWludCBJbnRlcmZhY2UuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgICA2KQoqIFRFWFRfU0VDVElPTl9BU01fT1A6ICAgICAgICAgICAgICAgICAgIFNlY3Rpb25zLiAgICAgICAgICAgKGxpbmUgICAzNykKKiBURm1vZGU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWNoaW5lIE1vZGVzLiAgICAgIChsaW5lICAgOTgpCiogVEZfU0laRTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSBMYXlvdXQuICAgICAgICAobGluZSAgMTMxKQoqIFRIRU5fQ0xBVVNFOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uIEJvZGllcy4gICAgKGxpbmUgICAgNikKKiBUSFJFQURfTU9ERUxfU1BFQzogICAgICAgICAgICAgICAgICAgICBEcml2ZXIuICAgICAgICAgICAgIChsaW5lICAyMjQpCiogVEhST1dfRVhQUjogICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhwcmVzc2lvbiB0cmVlcy4gICAobGluZSAgICA2KQoqIFRIVU5LX0RFQ0w6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlY2xhcmF0aW9ucy4gICAgICAgKGxpbmUgICAgNikKKiBUSFVOS19ERUxUQTogICAgICAgICAgICAgICAgICAgICAgICAgICBEZWNsYXJhdGlvbnMuICAgICAgIChsaW5lICAgIDYpCiogVEltb2RlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFjaGluZSBNb2Rlcy4gICAgICAobGluZSAgIDQ4KQoqICdUSW1vZGUnLCBpbiAnaW5zbic6ICAgICAgICAgICAgICAgICAgIEluc25zLiAgICAgICAgICAgICAgKGxpbmUgIDIyOSkKKiAndG0uaCcgbWFjcm9zOiAgICAgICAgICAgICAgICAgICAgICAgICBUYXJnZXQgTWFjcm9zLiAgICAgIChsaW5lICAgIDYpCiogVFFGbW9kZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFjaGluZSBNb2Rlcy4gICAgICAobGluZSAgIDYyKQoqIFRRbW9kZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hY2hpbmUgTW9kZXMuICAgICAgKGxpbmUgIDExOSkKKiB0cmFtcG9saW5lcyBmb3IgbmVzdGVkIGZ1bmN0aW9uczogICAgICBUcmFtcG9saW5lcy4gICAgICAgIChsaW5lICAgIDYpCiogVFJBTVBPTElORV9BREpVU1RfQUREUkVTUzogICAgICAgICAgICAgVHJhbXBvbGluZXMuICAgICAgICAobGluZSAgIDYxKQoqIFRSQU1QT0xJTkVfQUxJR05NRU5UOiAgICAgICAgICAgICAgICAgIFRyYW1wb2xpbmVzLiAgICAgICAgKGxpbmUgICA0OCkKKiBUUkFNUE9MSU5FX1NFQ1RJT046ICAgICAgICAgICAgICAgICAgICBUcmFtcG9saW5lcy4gICAgICAgIChsaW5lICAgMzkpCiogVFJBTVBPTElORV9TSVpFOiAgICAgICAgICAgICAgICAgICAgICAgVHJhbXBvbGluZXMuICAgICAgICAobGluZSAgIDQ0KQoqIFRSQU1QT0xJTkVfVEVNUExBVEU6ICAgICAgICAgICAgICAgICAgIFRyYW1wb2xpbmVzLiAgICAgICAgKGxpbmUgICAyOCkKKiBUUkFOU0ZFUl9GUk9NX1RSQU1QT0xJTkU6ICAgICAgICAgICAgICBUcmFtcG9saW5lcy4gICAgICAgIChsaW5lICAxMjMpCiogJ3RyYXAnIGluc3RydWN0aW9uIHBhdHRlcm46ICAgICAgICAgICAgU3RhbmRhcmQgTmFtZXMuICAgICAobGluZSAxMzU0KQoqIHRyZWU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyZWUgb3ZlcnZpZXcuICAgICAgKGxpbmUgICAgNikKKiB0cmVlIDwxPjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWNyb3MgYW5kIEZ1bmN0aW9ucy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgIDYpCiogVHJlZSBTU0E6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJlZSBTU0EuICAgICAgICAgICAobGluZSAgICA2KQoqIFRyZWVzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyZWVzLiAgICAgICAgICAgICAgKGxpbmUgICAgNikKKiBUUkVFX0NPREU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmVlIG92ZXJ2aWV3LiAgICAgIChsaW5lICAgIDYpCiogVFJFRV9GSUxFTkFNRTogICAgICAgICAgICAgICAgICAgICAgICAgV29ya2luZyB3aXRoIGRlY2xhcmF0aW9ucy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgMTQpCiogdHJlZV9pbnRfY3N0X2VxdWFsOiAgICAgICAgICAgICAgICAgICAgRXhwcmVzc2lvbiB0cmVlcy4gICAobGluZSAgICA2KQoqIFRSRUVfSU5UX0NTVF9ISUdIOiAgICAgICAgICAgICAgICAgICAgIEV4cHJlc3Npb24gdHJlZXMuICAgKGxpbmUgICAgNikKKiBUUkVFX0lOVF9DU1RfTE9XOiAgICAgICAgICAgICAgICAgICAgICBFeHByZXNzaW9uIHRyZWVzLiAgIChsaW5lICAgIDYpCiogdHJlZV9pbnRfY3N0X2x0OiAgICAgICAgICAgICAgICAgICAgICAgRXhwcmVzc2lvbiB0cmVlcy4gICAobGluZSAgICA2KQoqIFRSRUVfTElORU5POiAgICAgICAgICAgICAgICAgICAgICAgICAgIFdvcmtpbmcgd2l0aCBkZWNsYXJhdGlvbnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDIwKQoqIFRSRUVfTElTVDogICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRhaW5lcnMuICAgICAgICAgKGxpbmUgICAgNikKKiBUUkVFX09QRVJBTkQ6ICAgICAgICAgICAgICAgICAgICAgICAgICBFeHByZXNzaW9uIHRyZWVzLiAgIChsaW5lICAgIDYpCiogVFJFRV9QVUJMSUM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb24gQmFzaWNzLiAgICAobGluZSAgICA2KQoqIFRSRUVfUFVCTElDIDwxPjogICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uIEJhc2ljcy4gICAgKGxpbmUgICA0MSkKKiBUUkVFX1BVUlBPU0U6ICAgICAgICAgICAgICAgICAgICAgICAgICBDb250YWluZXJzLiAgICAgICAgIChsaW5lICAgIDYpCiogVFJFRV9TVFJJTkdfTEVOR1RIOiAgICAgICAgICAgICAgICAgICAgRXhwcmVzc2lvbiB0cmVlcy4gICAobGluZSAgICA2KQoqIFRSRUVfU1RSSU5HX1BPSU5URVI6ICAgICAgICAgICAgICAgICAgIEV4cHJlc3Npb24gdHJlZXMuICAgKGxpbmUgICAgNikKKiBUUkVFX1RZUEU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlcy4gICAgICAgICAgICAgIChsaW5lICAgIDYpCiogVFJFRV9UWVBFIDwxPjogICAgICAgICAgICAgICAgICAgICAgICAgV29ya2luZyB3aXRoIGRlY2xhcmF0aW9ucy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgMTEpCiogVFJFRV9UWVBFIDwyPjogICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb24gQmFzaWNzLiAgICAobGluZSAgMTcxKQoqIFRSRUVfVFlQRSA8Mz46ICAgICAgICAgICAgICAgICAgICAgICAgIEV4cHJlc3Npb24gdHJlZXMuICAgKGxpbmUgICAgNikKKiBUUkVFX1RZUEUgPDQ+OiAgICAgICAgICAgICAgICAgICAgICAgICBFeHByZXNzaW9uIHRyZWVzLiAgIChsaW5lICAgMTcpCiogVFJFRV9WQUxVRTogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGFpbmVycy4gICAgICAgICAobGluZSAgICA2KQoqIFRSRUVfVkVDOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRhaW5lcnMuICAgICAgICAgKGxpbmUgICAgNikKKiBUUkVFX1ZFQ19FTFQ6ICAgICAgICAgICAgICAgICAgICAgICAgICBDb250YWluZXJzLiAgICAgICAgIChsaW5lICAgIDYpCiogVFJFRV9WRUNfTEVOR1RIOiAgICAgICAgICAgICAgICAgICAgICAgQ29udGFpbmVycy4gICAgICAgICAobGluZSAgICA2KQoqIFRSVUxZX05PT1BfVFJVTkNBVElPTjogICAgICAgICAgICAgICAgIE1pc2MuICAgICAgICAgICAgICAgKGxpbmUgIDE3NSkKKiB0cnVuY2F0ZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb252ZXJzaW9ucy4gICAgICAgIChsaW5lICAgMzgpCiogJ3RydW5jTU4yJyBpbnN0cnVjdGlvbiBwYXR0ZXJuOiAgICAgICAgU3RhbmRhcmQgTmFtZXMuICAgICAobGluZSAgODA4KQoqIFRSVU5DX0RJVl9FWFBSOiAgICAgICAgICAgICAgICAgICAgICAgIEV4cHJlc3Npb24gdHJlZXMuICAgKGxpbmUgICAgNikKKiBUUlVOQ19NT0RfRVhQUjogICAgICAgICAgICAgICAgICAgICAgICBFeHByZXNzaW9uIHRyZWVzLiAgIChsaW5lICAgIDYpCiogVFJVVEhfQU5ESUZfRVhQUjogICAgICAgICAgICAgICAgICAgICAgRXhwcmVzc2lvbiB0cmVlcy4gICAobGluZSAgICA2KQoqIFRSVVRIX0FORF9FWFBSOiAgICAgICAgICAgICAgICAgICAgICAgIEV4cHJlc3Npb24gdHJlZXMuICAgKGxpbmUgICAgNikKKiBUUlVUSF9OT1RfRVhQUjogICAgICAgICAgICAgICAgICAgICAgICBFeHByZXNzaW9uIHRyZWVzLiAgIChsaW5lICAgIDYpCiogVFJVVEhfT1JJRl9FWFBSOiAgICAgICAgICAgICAgICAgICAgICAgRXhwcmVzc2lvbiB0cmVlcy4gICAobGluZSAgICA2KQoqIFRSVVRIX09SX0VYUFI6ICAgICAgICAgICAgICAgICAgICAgICAgIEV4cHJlc3Npb24gdHJlZXMuICAgKGxpbmUgICAgNikKKiBUUlVUSF9YT1JfRVhQUjogICAgICAgICAgICAgICAgICAgICAgICBFeHByZXNzaW9uIHRyZWVzLiAgIChsaW5lICAgIDYpCiogVFJZX0JMT0NLOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb24gQm9kaWVzLiAgICAobGluZSAgICA2KQoqIFRSWV9IQU5ETEVSUzogICAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uIEJvZGllcy4gICAgKGxpbmUgICAgNikKKiBUUllfU1RNVFM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbiBCb2RpZXMuICAgIChsaW5lICAgIDYpCiogJ3RzdE0nIGluc3RydWN0aW9uIHBhdHRlcm46ICAgICAgICAgICAgU3RhbmRhcmQgTmFtZXMuICAgICAobGluZSAgNjUwKQoqIHR5cGU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGVzLiAgICAgICAgICAgICAgKGxpbmUgICAgNikKKiB0eXBlIGRlY2xhcmF0aW9uOiAgICAgICAgICAgICAgICAgICAgICBEZWNsYXJhdGlvbnMuICAgICAgIChsaW5lICAgIDYpCiogVFlQRU5BTUVfVFlQRTogICAgICAgICAgICAgICAgICAgICAgICAgVHlwZXMuICAgICAgICAgICAgICAobGluZSAgICA2KQoqIFRZUEVOQU1FX1RZUEVfRlVMTE5BTUU6ICAgICAgICAgICAgICAgIFR5cGVzLiAgICAgICAgICAgICAgKGxpbmUgICAgNikKKiBUWVBFT0ZfVFlQRTogICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlcy4gICAgICAgICAgICAgIChsaW5lICAgIDYpCiogVFlQRV9BTElHTjogICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZXMuICAgICAgICAgICAgICAobGluZSAgICA2KQoqIFRZUEVfQUxJR04gPDE+OiAgICAgICAgICAgICAgICAgICAgICAgIFR5cGVzLiAgICAgICAgICAgICAgKGxpbmUgICA2MSkKKiBUWVBFX0FSR19UWVBFUzogICAgICAgICAgICAgICAgICAgICAgICBUeXBlcy4gICAgICAgICAgICAgIChsaW5lICAgIDYpCiogVFlQRV9BU01fT1A6ICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwgT3V0cHV0LiAgICAgICAobGluZSAgIDUzKQoqIFRZUEVfQVRUUklCVVRFUzogICAgICAgICAgICAgICAgICAgICAgIEF0dHJpYnV0ZXMuICAgICAgICAgKGxpbmUgICAyNCkKKiBUWVBFX0JJTkZPOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDbGFzc2VzLiAgICAgICAgICAgIChsaW5lICAgIDYpCiogVFlQRV9CVUlMVF9JTjogICAgICAgICAgICAgICAgICAgICAgICAgVHlwZXMuICAgICAgICAgICAgICAobGluZSAgIDgzKQoqIFRZUEVfQ0FOT05JQ0FMOiAgICAgICAgICAgICAgICAgICAgICAgIFR5cGVzLiAgICAgICAgICAgICAgKGxpbmUgICAgNikKKiBUWVBFX0NBTk9OSUNBTCA8MT46ICAgICAgICAgICAgICAgICAgICBUeXBlcy4gICAgICAgICAgICAgIChsaW5lICAxMDIpCiogVFlQRV9DT05URVhUOiAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZXMuICAgICAgICAgICAgICAobGluZSAgICA2KQoqIFRZUEVfREVDTDogICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlY2xhcmF0aW9ucy4gICAgICAgKGxpbmUgICAgNikKKiBUWVBFX0ZJRUxEUzogICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlcy4gICAgICAgICAgICAgIChsaW5lICAgIDYpCiogVFlQRV9GSUVMRFMgPDE+OiAgICAgICAgICAgICAgICAgICAgICAgQ2xhc3Nlcy4gICAgICAgICAgICAobGluZSAgICA2KQoqIFRZUEVfSEFTX0FSUkFZX05FV19PUEVSQVRPUjogICAgICAgICAgIENsYXNzZXMuICAgICAgICAgICAgKGxpbmUgICA5MSkKKiBUWVBFX0hBU19ERUZBVUxUX0NPTlNUUlVDVE9SOiAgICAgICAgICBDbGFzc2VzLiAgICAgICAgICAgIChsaW5lICAgNzYpCiogVFlQRV9IQVNfTVVUQUJMRV9QOiAgICAgICAgICAgICAgICAgICAgQ2xhc3Nlcy4gICAgICAgICAgICAobGluZSAgIDgxKQoqIFRZUEVfSEFTX05FV19PUEVSQVRPUjogICAgICAgICAgICAgICAgIENsYXNzZXMuICAgICAgICAgICAgKGxpbmUgICA4OCkKKiBUWVBFX01BSU5fVkFSSUFOVDogICAgICAgICAgICAgICAgICAgICBUeXBlcy4gICAgICAgICAgICAgIChsaW5lICAgIDYpCiogVFlQRV9NQUlOX1ZBUklBTlQgPDE+OiAgICAgICAgICAgICAgICAgVHlwZXMuICAgICAgICAgICAgICAobGluZSAgIDUwKQoqIFRZUEVfTUFYX1ZBTFVFOiAgICAgICAgICAgICAgICAgICAgICAgIFR5cGVzLiAgICAgICAgICAgICAgKGxpbmUgICAgNikKKiBUWVBFX01FVEhPRFM6ICAgICAgICAgICAgICAgICAgICAgICAgICBDbGFzc2VzLiAgICAgICAgICAgIChsaW5lICAgIDYpCiogVFlQRV9NRVRIT0RfQkFTRVRZUEU6ICAgICAgICAgICAgICAgICAgVHlwZXMuICAgICAgICAgICAgICAobGluZSAgICA2KQoqIFRZUEVfTUlOX1ZBTFVFOiAgICAgICAgICAgICAgICAgICAgICAgIFR5cGVzLiAgICAgICAgICAgICAgKGxpbmUgICAgNikKKiBUWVBFX05BTUU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlcy4gICAgICAgICAgICAgIChsaW5lICAgIDYpCiogVFlQRV9OQU1FIDwxPjogICAgICAgICAgICAgICAgICAgICAgICAgVHlwZXMuICAgICAgICAgICAgICAobGluZSAgIDY0KQoqIFRZUEVfTk9USFJPV19QOiAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uIEJhc2ljcy4gICAgKGxpbmUgIDE4MCkKKiBUWVBFX09GRlNFVF9CQVNFVFlQRTogICAgICAgICAgICAgICAgICBUeXBlcy4gICAgICAgICAgICAgIChsaW5lICAgIDYpCiogVFlQRV9PUEVSQU5EX0ZNVDogICAgICAgICAgICAgICAgICAgICAgTGFiZWwgT3V0cHV0LiAgICAgICAobGluZSAgIDY0KQoqIFRZUEVfT1ZFUkxPQURTX0FSUkFZX1JFRjogICAgICAgICAgICAgIENsYXNzZXMuICAgICAgICAgICAgKGxpbmUgICA5OSkKKiBUWVBFX09WRVJMT0FEU19BUlJPVzogICAgICAgICAgICAgICAgICBDbGFzc2VzLiAgICAgICAgICAgIChsaW5lICAxMDIpCiogVFlQRV9PVkVSTE9BRFNfQ0FMTF9FWFBSOiAgICAgICAgICAgICAgQ2xhc3Nlcy4gICAgICAgICAgICAobGluZSAgIDk1KQoqIFRZUEVfUE9MWU1PUlBISUNfUDogICAgICAgICAgICAgICAgICAgIENsYXNzZXMuICAgICAgICAgICAgKGxpbmUgICA3MikKKiBUWVBFX1BSRUNJU0lPTjogICAgICAgICAgICAgICAgICAgICAgICBUeXBlcy4gICAgICAgICAgICAgIChsaW5lICAgIDYpCiogVFlQRV9QVFJGTl9QOiAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZXMuICAgICAgICAgICAgICAobGluZSAgIDkzKQoqIFRZUEVfUFRSTUVNX1A6ICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGVzLiAgICAgICAgICAgICAgKGxpbmUgICAgNikKKiBUWVBFX1BUUk1FTV9QIDwxPjogICAgICAgICAgICAgICAgICAgICBUeXBlcy4gICAgICAgICAgICAgIChsaW5lICAgODYpCiogVFlQRV9QVFJPQlZfUDogICAgICAgICAgICAgICAgICAgICAgICAgVHlwZXMuICAgICAgICAgICAgICAobGluZSAgICA2KQoqIFRZUEVfUFRST0JfUDogICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGVzLiAgICAgICAgICAgICAgKGxpbmUgICA5NikKKiBUWVBFX1BUUl9QOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlcy4gICAgICAgICAgICAgIChsaW5lICAgODkpCiogVFlQRV9RVUFMX0NPTlNUOiAgICAgICAgICAgICAgICAgICAgICAgVHlwZXMuICAgICAgICAgICAgICAobGluZSAgICA2KQoqIFRZUEVfUVVBTF9SRVNUUklDVDogICAgICAgICAgICAgICAgICAgIFR5cGVzLiAgICAgICAgICAgICAgKGxpbmUgICAgNikKKiBUWVBFX1FVQUxfVk9MQVRJTEU6ICAgICAgICAgICAgICAgICAgICBUeXBlcy4gICAgICAgICAgICAgIChsaW5lICAgIDYpCiogVFlQRV9SQUlTRVNfRVhDRVBUSU9OUzogICAgICAgICAgICAgICAgRnVuY3Rpb24gQmFzaWNzLiAgICAobGluZSAgMTc1KQoqIFRZUEVfU0laRTogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGVzLiAgICAgICAgICAgICAgKGxpbmUgICAgNikKKiBUWVBFX1NJWkUgPDE+OiAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlcy4gICAgICAgICAgICAgIChsaW5lICAgNTYpCiogVFlQRV9TVFJVQ1RVUkFMX0VRVUFMSVRZX1A6ICAgICAgICAgICAgVHlwZXMuICAgICAgICAgICAgICAobGluZSAgICA2KQoqIFRZUEVfU1RSVUNUVVJBTF9FUVVBTElUWV9QIDwxPjogICAgICAgIFR5cGVzLiAgICAgICAgICAgICAgKGxpbmUgIDEzOCkKKiBUWVBFX1VOUVVBTElGSUVEOiAgICAgICAgICAgICAgICAgICAgICBUeXBlcy4gICAgICAgICAgICAgIChsaW5lICAgIDYpCiogVFlQRV9WRklFTEQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xhc3Nlcy4gICAgICAgICAgICAobGluZSAgICA2KQoqIFVEQW1vZGU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hY2hpbmUgTW9kZXMuICAgICAgKGxpbmUgIDE2NykKKiB1ZGl2OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcml0aG1ldGljLiAgICAgICAgIChsaW5lICAxMjYpCiogJ3VkaXZNMycgaW5zdHJ1Y3Rpb24gcGF0dGVybjogICAgICAgICAgU3RhbmRhcmQgTmFtZXMuICAgICAobGluZSAgMjIwKQoqICd1ZGl2bW9kTTQnIGluc3RydWN0aW9uIHBhdHRlcm46ICAgICAgIFN0YW5kYXJkIE5hbWVzLiAgICAgKGxpbmUgIDQyMSkKKiAndWRvdF9wcm9kTScgaW5zdHJ1Y3Rpb24gcGF0dGVybjogICAgICBTdGFuZGFyZCBOYW1lcy4gICAgIChsaW5lICAyNjEpCiogVURRbW9kZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFjaGluZSBNb2Rlcy4gICAgICAobGluZSAgMTM1KQoqIFVIQW1vZGU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hY2hpbmUgTW9kZXMuICAgICAgKGxpbmUgIDE1OSkKKiBVSFFtb2RlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWNoaW5lIE1vZGVzLiAgICAgIChsaW5lICAxMjcpCiogVUlOVE1BWF9UWVBFOiAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSBMYXlvdXQuICAgICAgICAobGluZSAgMjIzKQoqICd1bWFkZE1ONCcgaW5zdHJ1Y3Rpb24gcGF0dGVybjogICAgICAgIFN0YW5kYXJkIE5hbWVzLiAgICAgKGxpbmUgIDM2OCkKKiB1bWF4OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcml0aG1ldGljLiAgICAgICAgIChsaW5lICAxNDUpCiogJ3VtYXhNMycgaW5zdHJ1Y3Rpb24gcGF0dGVybjogICAgICAgICAgU3RhbmRhcmQgTmFtZXMuICAgICAobGluZSAgMjIwKQoqIHVtaW46ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyaXRobWV0aWMuICAgICAgICAgKGxpbmUgIDE0NSkKKiAndW1pbk0zJyBpbnN0cnVjdGlvbiBwYXR0ZXJuOiAgICAgICAgICBTdGFuZGFyZCBOYW1lcy4gICAgIChsaW5lICAyMjApCiogdW1vZDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJpdGhtZXRpYy4gICAgICAgICAobGluZSAgMTMyKQoqICd1bW9kTTMnIGluc3RydWN0aW9uIHBhdHRlcm46ICAgICAgICAgIFN0YW5kYXJkIE5hbWVzLiAgICAgKGxpbmUgIDIyMCkKKiAndW1zdWJNTjQnIGluc3RydWN0aW9uIHBhdHRlcm46ICAgICAgICBTdGFuZGFyZCBOYW1lcy4gICAgIChsaW5lICAzOTIpCiogJ3VtdWxoaXNpMycgaW5zdHJ1Y3Rpb24gcGF0dGVybjogICAgICAgU3RhbmRhcmQgTmFtZXMuICAgICAobGluZSAgMzQwKQoqICd1bXVsTTNfaGlnaHBhcnQnIGluc3RydWN0aW9uIHBhdHRlcm46IFN0YW5kYXJkIE5hbWVzLiAgICAgKGxpbmUgIDM1NCkKKiAndW11bHFpaGkzJyBpbnN0cnVjdGlvbiBwYXR0ZXJuOiAgICAgICBTdGFuZGFyZCBOYW1lcy4gICAgIChsaW5lICAzNDApCiogJ3VtdWxzaWRpMycgaW5zdHJ1Y3Rpb24gcGF0dGVybjogICAgICAgU3RhbmRhcmQgTmFtZXMuICAgICAobGluZSAgMzQwKQoqIHVuY2hhbmdpbmc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsYWdzLiAgICAgICAgICAgICAgKGxpbmUgIDI5OSkKKiAndW5jaGFuZ2luZycsIGluICdjYWxsX2luc24nOiAgICAgICAgICBGbGFncy4gICAgICAgICAgICAgIChsaW5lICAgMTkpCiogJ3VuY2hhbmdpbmcnLCBpbiAnanVtcF9pbnNuJywgJ2NhbGxfaW5zbicgYW5kICdpbnNuJzogRmxhZ3MuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDI0KQoqICd1bmNoYW5naW5nJywgaW4gJ21lbSc6ICAgICAgICAgICAgICAgIEZsYWdzLiAgICAgICAgICAgICAgKGxpbmUgIDEzNykKKiAndW5jaGFuZ2luZycsIGluICdzdWJyZWcnOiAgICAgICAgICAgICBGbGFncy4gICAgICAgICAgICAgIChsaW5lICAxNzMpCiogJ3VuY2hhbmdpbmcnLCBpbiAnc3VicmVnJyA8MT46ICAgICAgICAgRmxhZ3MuICAgICAgICAgICAgICAobGluZSAgMTgzKQoqICd1bmNoYW5naW5nJywgaW4gJ3N5bWJvbF9yZWYnOiAgICAgICAgIEZsYWdzLiAgICAgICAgICAgICAgKGxpbmUgICAxMCkKKiBVTkVRX0VYUFI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeHByZXNzaW9uIHRyZWVzLiAgIChsaW5lICAgIDYpCiogVU5HRV9FWFBSOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhwcmVzc2lvbiB0cmVlcy4gICAobGluZSAgICA2KQoqIFVOR1RfRVhQUjogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4cHJlc3Npb24gdHJlZXMuICAgKGxpbmUgICAgNikKKiB1bmlvbnMsIHJldHVybmluZzogICAgICAgICAgICAgICAgICAgICBJbnRlcmZhY2UuICAgICAgICAgIChsaW5lICAgMTApCiogVU5JT05fVFlQRTogICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZXMuICAgICAgICAgICAgICAobGluZSAgICA2KQoqIFVOSU9OX1RZUEUgPDE+OiAgICAgICAgICAgICAgICAgICAgICAgIENsYXNzZXMuICAgICAgICAgICAgKGxpbmUgICAgNikKKiBVTklUU19QRVJfU0lNRF9XT1JEOiAgICAgICAgICAgICAgICAgICBTdG9yYWdlIExheW91dC4gICAgIChsaW5lICAgNzUpCiogVU5JVFNfUEVSX1dPUkQ6ICAgICAgICAgICAgICAgICAgICAgICAgU3RvcmFnZSBMYXlvdXQuICAgICAobGluZSAgIDY1KQoqIFVOS05PV05fVFlQRTogICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGVzLiAgICAgICAgICAgICAgKGxpbmUgICAgNikKKiBVTkxFX0VYUFI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeHByZXNzaW9uIHRyZWVzLiAgIChsaW5lICAgIDYpCiogVU5MSUtFTFlfRVhFQ1VURURfVEVYVF9TRUNUSU9OX05BTUU6ICAgU2VjdGlvbnMuICAgICAgICAgICAobGluZSAgIDQ4KQoqIFVOTFRfRVhQUjogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4cHJlc3Npb24gdHJlZXMuICAgKGxpbmUgICAgNikKKiBVTk9SREVSRURfRVhQUjogICAgICAgICAgICAgICAgICAgICAgICBFeHByZXNzaW9uIHRyZWVzLiAgIChsaW5lICAgIDYpCiogdW5zaGFyZV9hbGxfcnRsOiAgICAgICAgICAgICAgICAgICAgICAgU2hhcmluZy4gICAgICAgICAgICAobGluZSAgIDU4KQoqIHVuc2lnbmVkIGRpdmlzaW9uOiAgICAgICAgICAgICAgICAgICAgIEFyaXRobWV0aWMuICAgICAgICAgKGxpbmUgIDEyNikKKiB1bnNpZ25lZCBkaXZpc2lvbiB3aXRoIHVuc2lnbmVkIHNhdHVyYXRpb246IEFyaXRobWV0aWMuICAgIChsaW5lICAxMjYpCiogdW5zaWduZWQgZ3JlYXRlciB0aGFuOiAgICAgICAgICAgICAgICAgQ29tcGFyaXNvbnMuICAgICAgICAobGluZSAgIDY0KQoqIHVuc2lnbmVkIGdyZWF0ZXIgdGhhbiA8MT46ICAgICAgICAgICAgIENvbXBhcmlzb25zLiAgICAgICAgKGxpbmUgICA3MikKKiB1bnNpZ25lZCBsZXNzIHRoYW46ICAgICAgICAgICAgICAgICAgICBDb21wYXJpc29ucy4gICAgICAgIChsaW5lICAgNjgpCiogdW5zaWduZWQgbGVzcyB0aGFuIDwxPjogICAgICAgICAgICAgICAgQ29tcGFyaXNvbnMuICAgICAgICAobGluZSAgIDc2KQoqIHVuc2lnbmVkIG1pbmltdW0gYW5kIG1heGltdW06ICAgICAgICAgIEFyaXRobWV0aWMuICAgICAgICAgKGxpbmUgIDE0NSkKKiB1bnNpZ25lZF9maXg6ICAgICAgICAgICAgICAgICAgICAgICAgICBDb252ZXJzaW9ucy4gICAgICAgIChsaW5lICAgNzIpCiogdW5zaWduZWRfZmxvYXQ6ICAgICAgICAgICAgICAgICAgICAgICAgQ29udmVyc2lvbnMuICAgICAgICAobGluZSAgIDYyKQoqIHVuc2lnbmVkX2ZyYWN0X2NvbnZlcnQ6ICAgICAgICAgICAgICAgIENvbnZlcnNpb25zLiAgICAgICAgKGxpbmUgICA5OCkKKiB1bnNpZ25lZF9zYXRfZnJhY3Q6ICAgICAgICAgICAgICAgICAgICBDb252ZXJzaW9ucy4gICAgICAgIChsaW5lICAxMDQpCiogdW5zcGVjOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2lkZSBFZmZlY3RzLiAgICAgICAobGluZSAgMjgyKQoqIHVuc3BlY192b2xhdGlsZTogICAgICAgICAgICAgICAgICAgICAgIFNpZGUgRWZmZWN0cy4gICAgICAgKGxpbmUgIDI4MikKKiAndW50eXBlZF9jYWxsJyBpbnN0cnVjdGlvbiBwYXR0ZXJuOiAgICBTdGFuZGFyZCBOYW1lcy4gICAgIChsaW5lICA5OTkpCiogJ3VudHlwZWRfcmV0dXJuJyBpbnN0cnVjdGlvbiBwYXR0ZXJuOiAgU3RhbmRhcmQgTmFtZXMuICAgICAobGluZSAxMDQ4KQoqIFVQREFURV9QQVRIX0hPU1RfQ0FOT05JQ0FMSVpFIChQQVRIKTogIEZpbGVzeXN0ZW0uICAgICAgICAgKGxpbmUgICA1OSkKKiB1cGRhdGVfc3NhOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTU0EuICAgICAgICAgICAgICAgIChsaW5lICAgNzYpCiogdXBkYXRlX3N0bXQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGVtZW50IE9wZXJhbmRzLiAobGluZSAgICA2KQoqIFVRUW1vZGU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hY2hpbmUgTW9kZXMuICAgICAgKGxpbmUgIDEyMykKKiBVUyBTb2Z0d2FyZSBHT0ZBU1QsIGZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbiBsaWJyYXJ5OiBMaWJyYXJ5IENhbGxzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA0NCkKKiAndXNhZGRNMycgaW5zdHJ1Y3Rpb24gcGF0dGVybjogICAgICAgICBTdGFuZGFyZCBOYW1lcy4gICAgIChsaW5lICAyMjApCiogVVNBbW9kZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFjaGluZSBNb2Rlcy4gICAgICAobGluZSAgMTYzKQoqICd1c2FzaGxNMycgaW5zdHJ1Y3Rpb24gcGF0dGVybjogICAgICAgIFN0YW5kYXJkIE5hbWVzLiAgICAgKGxpbmUgIDQyNCkKKiAndXNkaXZNMycgaW5zdHJ1Y3Rpb24gcGF0dGVybjogICAgICAgICBTdGFuZGFyZCBOYW1lcy4gICAgIChsaW5lICAyMjApCiogdXNlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2lkZSBFZmZlY3RzLiAgICAgICAobGluZSAgMTU5KQoqIHVzZWQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsYWdzLiAgICAgICAgICAgICAgKGxpbmUgIDMxNykKKiAndXNlZCcsIGluICdzeW1ib2xfcmVmJzogICAgICAgICAgICAgICBGbGFncy4gICAgICAgICAgICAgIChsaW5lICAyMDApCiogVVNFUl9MQUJFTF9QUkVGSVg6ICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3Rpb24gT3V0cHV0LiAobGluZSAgMTI0KQoqIFVTRV9DX0FMTE9DQTogICAgICAgICAgICAgICAgICAgICAgICAgIEhvc3QgTWlzYy4gICAgICAgICAgKGxpbmUgICAxOSkKKiBVU0VfTERfQVNfTkVFREVEOiAgICAgICAgICAgICAgICAgICAgICBEcml2ZXIuICAgICAgICAgICAgIChsaW5lICAxOTcpCiogVVNFX0xPQURfUE9TVF9ERUNSRU1FTlQ6ICAgICAgICAgICAgICAgQ29zdHMuICAgICAgICAgICAgICAobGluZSAgMTU4KQoqIFVTRV9MT0FEX1BPU1RfSU5DUkVNRU5UOiAgICAgICAgICAgICAgIENvc3RzLiAgICAgICAgICAgICAgKGxpbmUgIDE1MykKKiBVU0VfTE9BRF9QUkVfREVDUkVNRU5UOiAgICAgICAgICAgICAgICBDb3N0cy4gICAgICAgICAgICAgIChsaW5lICAxNjgpCiogVVNFX0xPQURfUFJFX0lOQ1JFTUVOVDogICAgICAgICAgICAgICAgQ29zdHMuICAgICAgICAgICAgICAobGluZSAgMTYzKQoqIHVzZV9wYXJhbTogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUWSBPcHRpb25zLiAgICAgICAgKGxpbmUgIDExNCkKKiB1c2VfcGFyYW1OOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVFkgT3B0aW9ucy4gICAgICAgIChsaW5lICAxMzMpCiogdXNlX3BhcmFtczogICAgICAgICAgICAgICAgICAgICAgICAgICAgR1RZIE9wdGlvbnMuICAgICAgICAobGluZSAgMTQyKQoqIFVTRV9TRUxFQ1RfU0VDVElPTl9GT1JfRlVOQ1RJT05TOiAgICAgIFNlY3Rpb25zLiAgICAgICAgICAgKGxpbmUgIDE4NCkKKiBVU0VfU1RPUkVfUE9TVF9ERUNSRU1FTlQ6ICAgICAgICAgICAgICBDb3N0cy4gICAgICAgICAgICAgIChsaW5lICAxNzgpCiogVVNFX1NUT1JFX1BPU1RfSU5DUkVNRU5UOiAgICAgICAgICAgICAgQ29zdHMuICAgICAgICAgICAgICAobGluZSAgMTczKQoqIFVTRV9TVE9SRV9QUkVfREVDUkVNRU5UOiAgICAgICAgICAgICAgIENvc3RzLiAgICAgICAgICAgICAgKGxpbmUgIDE4OCkKKiBVU0VfU1RPUkVfUFJFX0lOQ1JFTUVOVDogICAgICAgICAgICAgICBDb3N0cy4gICAgICAgICAgICAgIChsaW5lICAxODMpCiogVVNJTkdfREVDTDogICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVjbGFyYXRpb25zLiAgICAgICAobGluZSAgICA2KQoqIFVTSU5HX1NUTVQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uIEJvZGllcy4gICAgKGxpbmUgICAgNikKKiAndXNtYWRkTU40JyBpbnN0cnVjdGlvbiBwYXR0ZXJuOiAgICAgICBTdGFuZGFyZCBOYW1lcy4gICAgIChsaW5lICAzNzYpCiogJ3VzbXN1Yk1ONCcgaW5zdHJ1Y3Rpb24gcGF0dGVybjogICAgICAgU3RhbmRhcmQgTmFtZXMuICAgICAobGluZSAgNDAwKQoqICd1c211bGhpc2kzJyBpbnN0cnVjdGlvbiBwYXR0ZXJuOiAgICAgIFN0YW5kYXJkIE5hbWVzLiAgICAgKGxpbmUgIDM0NCkKKiAndXNtdWxNMycgaW5zdHJ1Y3Rpb24gcGF0dGVybjogICAgICAgICBTdGFuZGFyZCBOYW1lcy4gICAgIChsaW5lICAyMjApCiogJ3VzbXVscWloaTMnIGluc3RydWN0aW9uIHBhdHRlcm46ICAgICAgU3RhbmRhcmQgTmFtZXMuICAgICAobGluZSAgMzQ0KQoqICd1c211bHNpZGkzJyBpbnN0cnVjdGlvbiBwYXR0ZXJuOiAgICAgIFN0YW5kYXJkIE5hbWVzLiAgICAgKGxpbmUgIDM0NCkKKiAndXNuZWdNMicgaW5zdHJ1Y3Rpb24gcGF0dGVybjogICAgICAgICBTdGFuZGFyZCBOYW1lcy4gICAgIChsaW5lICA0MzgpCiogVVNRbW9kZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFjaGluZSBNb2Rlcy4gICAgICAobGluZSAgMTMxKQoqICd1c3N1Yk0zJyBpbnN0cnVjdGlvbiBwYXR0ZXJuOiAgICAgICAgIFN0YW5kYXJkIE5hbWVzLiAgICAgKGxpbmUgIDIyMCkKKiAndXN1bV93aWRlbk0zJyBpbnN0cnVjdGlvbiBwYXR0ZXJuOiAgICBTdGFuZGFyZCBOYW1lcy4gICAgIChsaW5lICAyNzApCiogdXNfYXNoaWZ0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJpdGhtZXRpYy4gICAgICAgICAobGluZSAgMTY5KQoqIHVzX21pbnVzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyaXRobWV0aWMuICAgICAgICAgKGxpbmUgICAzOCkKKiB1c19tdWx0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcml0aG1ldGljLiAgICAgICAgIChsaW5lICAgOTMpCiogdXNfbmVnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJpdGhtZXRpYy4gICAgICAgICAobGluZSAgIDgyKQoqIHVzX3BsdXM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyaXRobWV0aWMuICAgICAgICAgKGxpbmUgICAxNCkKKiBVU19TT0ZUV0FSRV9HT0ZBU1Q6ICAgICAgICAgICAgICAgICAgICBMaWJyYXJ5IENhbGxzLiAgICAgIChsaW5lICAgNDQpCiogdXNfdHJ1bmNhdGU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udmVyc2lvbnMuICAgICAgICAobGluZSAgIDQ4KQoqIFVUQW1vZGU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hY2hpbmUgTW9kZXMuICAgICAgKGxpbmUgIDE3MSkKKiBVVFFtb2RlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWNoaW5lIE1vZGVzLiAgICAgIChsaW5lICAxMzkpCiogJ1YnIGluIGNvbnN0cmFpbnQ6ICAgICAgICAgICAgICAgICAgICAgU2ltcGxlIENvbnN0cmFpbnRzLiAobGluZSAgIDQxKQoqIHZhbHVlcywgcmV0dXJuZWQgYnkgZnVuY3Rpb25zOiAgICAgICAgIFNjYWxhciBSZXR1cm4uICAgICAgKGxpbmUgICAgNikKKiB2YXJhcmdzIGltcGxlbWVudGF0aW9uOiAgICAgICAgICAgICAgICBWYXJhcmdzLiAgICAgICAgICAgIChsaW5lICAgIDYpCiogdmFyaWFibGU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVjbGFyYXRpb25zLiAgICAgICAobGluZSAgICA2KQoqIFZBUl9ERUNMOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlY2xhcmF0aW9ucy4gICAgICAgKGxpbmUgICAgNikKKiBWQVJfREVDTCA8MT46ICAgICAgICAgICAgICAgICAgICAgICAgICBFeHByZXNzaW9uIHRyZWVzLiAgIChsaW5lICAgIDYpCiogVkFYX0ZMT0FUX0ZPUk1BVDogICAgICAgICAgICAgICAgICAgICAgU3RvcmFnZSBMYXlvdXQuICAgICAobGluZSAgNDEzKQoqIFZBX0FSR19FWFBSOiAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4cHJlc3Npb24gdHJlZXMuICAgKGxpbmUgICAgNikKKiB2ZWN0b3I6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250YWluZXJzLiAgICAgICAgIChsaW5lICAgIDYpCiogdmVjdG9yIG9wZXJhdGlvbnM6ICAgICAgICAgICAgICAgICAgICAgVmVjdG9yIE9wZXJhdGlvbnMuICAobGluZSAgICA2KQoqIFZFQ1RPUl9DU1Q6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4cHJlc3Npb24gdHJlZXMuICAgKGxpbmUgICAgNikKKiBWRUNUT1JfU1RPUkVfRkxBR19WQUxVRTogICAgICAgICAgICAgICBNaXNjLiAgICAgICAgICAgICAgIChsaW5lICAzMDYpCiogdmVjX2NvbmNhdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yIE9wZXJhdGlvbnMuICAobGluZSAgIDI1KQoqIHZlY19kdXBsaWNhdGU6ICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvciBPcGVyYXRpb25zLiAgKGxpbmUgICAzMCkKKiAndmVjX2V4dHJhY3RNJyBpbnN0cnVjdGlvbiBwYXR0ZXJuOiAgICBTdGFuZGFyZCBOYW1lcy4gICAgIChsaW5lICAxNzApCiogJ3ZlY19leHRyYWN0X2V2ZW5NJyBpbnN0cnVjdGlvbiBwYXR0ZXJuOiBTdGFuZGFyZCBOYW1lcy4gICAobGluZSAgMTc1KQoqIFZFQ19FWFRSQUNUX0VWRU5fRVhQUjogICAgICAgICAgICAgICAgIEV4cHJlc3Npb24gdHJlZXMuICAgKGxpbmUgICAgNikKKiAndmVjX2V4dHJhY3Rfb2RkTScgaW5zdHJ1Y3Rpb24gcGF0dGVybjogU3RhbmRhcmQgTmFtZXMuICAgIChsaW5lICAxODIpCiogVkVDX0VYVFJBQ1RfT0REX0VYUFI6ICAgICAgICAgICAgICAgICAgRXhwcmVzc2lvbiB0cmVlcy4gICAobGluZSAgICA2KQoqICd2ZWNfaW5pdE0nIGluc3RydWN0aW9uIHBhdHRlcm46ICAgICAgIFN0YW5kYXJkIE5hbWVzLiAgICAgKGxpbmUgIDIwMikKKiAndmVjX2ludGVybGVhdmVfaGlnaE0nIGluc3RydWN0aW9uIHBhdHRlcm46IFN0YW5kYXJkIE5hbWVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDE4OSkKKiBWRUNfSU5URVJMRUFWRV9ISUdIX0VYUFI6ICAgICAgICAgICAgICBFeHByZXNzaW9uIHRyZWVzLiAgIChsaW5lICAgIDYpCiogJ3ZlY19pbnRlcmxlYXZlX2xvd00nIGluc3RydWN0aW9uIHBhdHRlcm46IFN0YW5kYXJkIE5hbWVzLiAobGluZSAgMTk2KQoqIFZFQ19JTlRFUkxFQVZFX0xPV19FWFBSOiAgICAgICAgICAgICAgIEV4cHJlc3Npb24gdHJlZXMuICAgKGxpbmUgICAgNikKKiBWRUNfTFNISUZUX0VYUFI6ICAgICAgICAgICAgICAgICAgICAgICBFeHByZXNzaW9uIHRyZWVzLiAgIChsaW5lICAgIDYpCiogdmVjX21lcmdlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yIE9wZXJhdGlvbnMuICAobGluZSAgIDExKQoqIFZFQ19QQUNLX0ZJWF9UUlVOQ19FWFBSOiAgICAgICAgICAgICAgIEV4cHJlc3Npb24gdHJlZXMuICAgKGxpbmUgICAgNikKKiBWRUNfUEFDS19TQVRfRVhQUjogICAgICAgICAgICAgICAgICAgICBFeHByZXNzaW9uIHRyZWVzLiAgIChsaW5lICAgIDYpCiogJ3ZlY19wYWNrX3NmaXhfdHJ1bmNfTScgaW5zdHJ1Y3Rpb24gcGF0dGVybjogU3RhbmRhcmQgTmFtZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMjk2KQoqICd2ZWNfcGFja19zc2F0X00nIGluc3RydWN0aW9uIHBhdHRlcm46IFN0YW5kYXJkIE5hbWVzLiAgICAgKGxpbmUgIDI4OSkKKiBWRUNfUEFDS19UUlVOQ19FWFBSOiAgICAgICAgICAgICAgICAgICBFeHByZXNzaW9uIHRyZWVzLiAgIChsaW5lICAgIDYpCiogJ3ZlY19wYWNrX3RydW5jX00nIGluc3RydWN0aW9uIHBhdHRlcm46IFN0YW5kYXJkIE5hbWVzLiAgICAobGluZSAgMjgyKQoqICd2ZWNfcGFja191Zml4X3RydW5jX00nIGluc3RydWN0aW9uIHBhdHRlcm46IFN0YW5kYXJkIE5hbWVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDI5NikKKiAndmVjX3BhY2tfdXNhdF9NJyBpbnN0cnVjdGlvbiBwYXR0ZXJuOiBTdGFuZGFyZCBOYW1lcy4gICAgIChsaW5lICAyODkpCiogVkVDX1JTSElGVF9FWFBSOiAgICAgICAgICAgICAgICAgICAgICAgRXhwcmVzc2lvbiB0cmVlcy4gICAobGluZSAgICA2KQoqIHZlY19zZWxlY3Q6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvciBPcGVyYXRpb25zLiAgKGxpbmUgICAxOSkKKiAndmVjX3NldE0nIGluc3RydWN0aW9uIHBhdHRlcm46ICAgICAgICBTdGFuZGFyZCBOYW1lcy4gICAgIChsaW5lICAxNjUpCiogJ3ZlY19zaGxfTScgaW5zdHJ1Y3Rpb24gcGF0dGVybjogICAgICAgU3RhbmRhcmQgTmFtZXMuICAgICAobGluZSAgMjc2KQoqICd2ZWNfc2hyX00nIGluc3RydWN0aW9uIHBhdHRlcm46ICAgICAgIFN0YW5kYXJkIE5hbWVzLiAgICAgKGxpbmUgIDI3NikKKiAndmVjX3VucGFja3NfZmxvYXRfaGlfTScgaW5zdHJ1Y3Rpb24gcGF0dGVybjogU3RhbmRhcmQgTmFtZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMzE3KQoqICd2ZWNfdW5wYWNrc19mbG9hdF9sb19NJyBpbnN0cnVjdGlvbiBwYXR0ZXJuOiBTdGFuZGFyZCBOYW1lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAzMTcpCiogJ3ZlY191bnBhY2tzX2hpX00nIGluc3RydWN0aW9uIHBhdHRlcm46IFN0YW5kYXJkIE5hbWVzLiAgICAobGluZSAgMzAzKQoqICd2ZWNfdW5wYWNrc19sb19NJyBpbnN0cnVjdGlvbiBwYXR0ZXJuOiBTdGFuZGFyZCBOYW1lcy4gICAgKGxpbmUgIDMwMykKKiAndmVjX3VucGFja3VfZmxvYXRfaGlfTScgaW5zdHJ1Y3Rpb24gcGF0dGVybjogU3RhbmRhcmQgTmFtZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgMzE3KQoqICd2ZWNfdW5wYWNrdV9mbG9hdF9sb19NJyBpbnN0cnVjdGlvbiBwYXR0ZXJuOiBTdGFuZGFyZCBOYW1lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAzMTcpCiogJ3ZlY191bnBhY2t1X2hpX00nIGluc3RydWN0aW9uIHBhdHRlcm46IFN0YW5kYXJkIE5hbWVzLiAgICAobGluZSAgMzEwKQoqICd2ZWNfdW5wYWNrdV9sb19NJyBpbnN0cnVjdGlvbiBwYXR0ZXJuOiBTdGFuZGFyZCBOYW1lcy4gICAgKGxpbmUgIDMxMCkKKiBWRUNfVU5QQUNLX0ZMT0FUX0hJX0VYUFI6ICAgICAgICAgICAgICBFeHByZXNzaW9uIHRyZWVzLiAgIChsaW5lICAgIDYpCiogVkVDX1VOUEFDS19GTE9BVF9MT19FWFBSOiAgICAgICAgICAgICAgRXhwcmVzc2lvbiB0cmVlcy4gICAobGluZSAgICA2KQoqIFZFQ19VTlBBQ0tfSElfRVhQUjogICAgICAgICAgICAgICAgICAgIEV4cHJlc3Npb24gdHJlZXMuICAgKGxpbmUgICAgNikKKiBWRUNfVU5QQUNLX0xPX0VYUFI6ICAgICAgICAgICAgICAgICAgICBFeHByZXNzaW9uIHRyZWVzLiAgIChsaW5lICAgIDYpCiogVkVDX1dJREVOX01VTFRfSElfRVhQUjogICAgICAgICAgICAgICAgRXhwcmVzc2lvbiB0cmVlcy4gICAobGluZSAgICA2KQoqIFZFQ19XSURFTl9NVUxUX0xPX0VYUFI6ICAgICAgICAgICAgICAgIEV4cHJlc3Npb24gdHJlZXMuICAgKGxpbmUgICAgNikKKiAndmVjX3dpZGVuX3NtdWx0X2hpX00nIGluc3RydWN0aW9uIHBhdHRlcm46IFN0YW5kYXJkIE5hbWVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDMyNikKKiAndmVjX3dpZGVuX3NtdWx0X2xvX00nIGluc3RydWN0aW9uIHBhdHRlcm46IFN0YW5kYXJkIE5hbWVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDMyNikKKiAndmVjX3dpZGVuX3VtdWx0X2hpX00nIGluc3RydWN0aW9uIHBhdHRlcm46IFN0YW5kYXJkIE5hbWVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgIDMyNikKKiAndmVjX3dpZGVuX3VtdWx0X2xvX19NJyBpbnN0cnVjdGlvbiBwYXR0ZXJuOiBTdGFuZGFyZCBOYW1lcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAzMjYpCiogdmlydHVhbCBvcGVyYW5kczogICAgICAgICAgICAgICAgICAgICAgU3RhdGVtZW50IE9wZXJhbmRzLiAobGluZSAgICA2KQoqIFZJUlRVQUxfSU5DT01JTkdfQVJHU19SRUdOVU06ICAgICAgICAgIFJlZ3MgYW5kIE1lbW9yeS4gICAgKGxpbmUgICA1OSkKKiBWSVJUVUFMX09VVEdPSU5HX0FSR1NfUkVHTlVNOiAgICAgICAgICBSZWdzIGFuZCBNZW1vcnkuICAgIChsaW5lICAgODcpCiogVklSVFVBTF9TVEFDS19EWU5BTUlDX1JFR05VTTogICAgICAgICAgUmVncyBhbmQgTWVtb3J5LiAgICAobGluZSAgIDc4KQoqIFZJUlRVQUxfU1RBQ0tfVkFSU19SRUdOVU06ICAgICAgICAgICAgIFJlZ3MgYW5kIE1lbW9yeS4gICAgKGxpbmUgICA2OSkKKiBWTElXOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9jZXNzb3IgcGlwZWxpbmUgZGVzY3JpcHRpb24uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgICA2KQoqIFZMSVcgPDE+OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2Nlc3NvciBwaXBlbGluZSBkZXNjcmlwdGlvbi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAyMTMpCiogVk1TOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsZXN5c3RlbS4gICAgICAgICAobGluZSAgIDM3KQoqIFZNU19ERUJVR0dJTkdfSU5GTzogICAgICAgICAgICAgICAgICAgIFZNUyBEZWJ1Zy4gICAgICAgICAgKGxpbmUgICAgOCkKKiBWT0lEbW9kZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWNoaW5lIE1vZGVzLiAgICAgIChsaW5lICAxODkpCiogVk9JRF9UWVBFOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZXMuICAgICAgICAgICAgICAobGluZSAgICA2KQoqIHZvbGF0aWw6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsYWdzLiAgICAgICAgICAgICAgKGxpbmUgIDMzMSkKKiAndm9sYXRpbCcsIGluICdpbnNuJywgJ2NhbGxfaW5zbicsICdqdW1wX2luc24nLCAnY29kZV9sYWJlbCcsICdiYXJyaWVyJywgYW5kICdub3RlJzogRmxhZ3MuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSAgIDI5KQoqICd2b2xhdGlsJywgaW4gJ2xhYmVsX3JlZicgYW5kICdyZWdfbGFiZWwnOiBGbGFncy4gICAgICAgICAgKGxpbmUgICA1MCkKKiAndm9sYXRpbCcsIGluICdtZW0nLCAnYXNtX29wZXJhbmRzJywgYW5kICdhc21faW5wdXQnOiBGbGFncy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lICAgNzkpCiogJ3ZvbGF0aWwnLCBpbiAncmVnJzogICAgICAgICAgICAgICAgICAgRmxhZ3MuICAgICAgICAgICAgICAobGluZSAgMTAxKQoqICd2b2xhdGlsJywgaW4gJ3N1YnJlZyc6ICAgICAgICAgICAgICAgIEZsYWdzLiAgICAgICAgICAgICAgKGxpbmUgIDE3MykKKiAndm9sYXRpbCcsIGluICdzdWJyZWcnIDwxPjogICAgICAgICAgICBGbGFncy4gICAgICAgICAgICAgIChsaW5lICAxODMpCiogJ3ZvbGF0aWwnLCBpbiAnc3ltYm9sX3JlZic6ICAgICAgICAgICAgRmxhZ3MuICAgICAgICAgICAgICAobGluZSAgMjA5KQoqIHZvbGF0aWxlIG1lbW9yeSByZWZlcmVuY2VzOiAgICAgICAgICAgIEZsYWdzLiAgICAgICAgICAgICAgKGxpbmUgIDMzMikKKiB2b3RpbmcgYmV0d2VlbiBjb25zdHJhaW50IGFsdGVybmF0aXZlczogQ2xhc3MgUHJlZmVyZW5jZXMuIChsaW5lICAgIDYpCiogd2Fsa19kb21pbmF0b3JfdHJlZTogICAgICAgICAgICAgICAgICAgU1NBLiAgICAgICAgICAgICAgICAobGluZSAgMjU1KQoqIHdhbGtfdXNlX2RlZl9jaGFpbnM6ICAgICAgICAgICAgICAgICAgIFNTQS4gICAgICAgICAgICAgICAgKGxpbmUgIDIzMSkKKiBXQ0hBUl9UWVBFOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlIExheW91dC4gICAgICAgIChsaW5lICAxOTEpCiogV0NIQVJfVFlQRV9TSVpFOiAgICAgICAgICAgICAgICAgICAgICAgVHlwZSBMYXlvdXQuICAgICAgICAobGluZSAgMTk5KQoqIHdoaWNoX2FsdGVybmF0aXZlOiAgICAgICAgICAgICAgICAgICAgIE91dHB1dCBTdGF0ZW1lbnQuICAgKGxpbmUgICA1OCkKKiBXSElMRV9CT0RZOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbiBCb2RpZXMuICAgIChsaW5lICAgIDYpCiogV0hJTEVfQ09ORDogICAgICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb24gQm9kaWVzLiAgICAobGluZSAgICA2KQoqIFdISUxFX1NUTVQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uIEJvZGllcy4gICAgKGxpbmUgICAgNikKKiBXSURFU1RfSEFSRFdBUkVfRlBfU0laRTogICAgICAgICAgICAgICBUeXBlIExheW91dC4gICAgICAgIChsaW5lICAxNDYpCiogV0lOVF9UWVBFOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSBMYXlvdXQuICAgICAgICAobGluZSAgMjA0KQoqIFdPUkRTX0JJR19FTkRJQU46ICAgICAgICAgICAgICAgICAgICAgIFN0b3JhZ2UgTGF5b3V0LiAgICAgKGxpbmUgICAyOCkKKiAnV09SRFNfQklHX0VORElBTicsIGVmZmVjdCBvbiAnc3VicmVnJzogUmVncyBhbmQgTWVtb3J5LiAgIChsaW5lICAxMzEpCiogd29yZF9tb2RlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFjaGluZSBNb2Rlcy4gICAgICAobGluZSAgMzM1KQoqIFdPUkRfUkVHSVNURVJfT1BFUkFUSU9OUzogICAgICAgICAgICAgIE1pc2MuICAgICAgICAgICAgICAgKGxpbmUgICA2MSkKKiBXT1JEX1NXSVRDSF9UQUtFU19BUkc6ICAgICAgICAgICAgICAgICBEcml2ZXIuICAgICAgICAgICAgIChsaW5lICAgMTkpCiogJ1gnIGluIGNvbnN0cmFpbnQ6ICAgICAgICAgICAgICAgICAgICAgU2ltcGxlIENvbnN0cmFpbnRzLiAobGluZSAgMTExKQoqICd4LUhPU1QnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvc3QgRnJhZ21lbnQuICAgICAgKGxpbmUgICAgNikKKiBYQ21vZGU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWNoaW5lIE1vZGVzLiAgICAgIChsaW5lICAxOTYpCiogWENPRkZfREVCVUdHSU5HX0lORk86ICAgICAgICAgICAgICAgICAgREJYIE9wdGlvbnMuICAgICAgICAobGluZSAgIDEyKQoqIFhFWFA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjY2Vzc29ycy4gICAgICAgICAgKGxpbmUgICAgNikKKiBYRm1vZGU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWNoaW5lIE1vZGVzLiAgICAgIChsaW5lICAgNzkpCiogWEZfU0laRTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSBMYXlvdXQuICAgICAgICAobGluZSAgMTMwKQoqIFhJTlQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjY2Vzc29ycy4gICAgICAgICAgKGxpbmUgICAgNikKKiAneG0tTUFDSElORS5oJzogICAgICAgICAgICAgICAgICAgICAgICBGaWxlc3lzdGVtLiAgICAgICAgIChsaW5lICAgIDYpCiogJ3htLU1BQ0hJTkUuaCcgPDE+OiAgICAgICAgICAgICAgICAgICAgSG9zdCBNaXNjLiAgICAgICAgICAobGluZSAgICA2KQoqIHhvcjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyaXRobWV0aWMuICAgICAgICAgKGxpbmUgIDE2NCkKKiAneG9yJywgY2Fub25pY2FsaXphdGlvbiBvZjogICAgICAgICAgICBJbnNuIENhbm9uaWNhbGl6YXRpb25zLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA4MykKKiAneG9yTTMnIGluc3RydWN0aW9uIHBhdHRlcm46ICAgICAgICAgICBTdGFuZGFyZCBOYW1lcy4gICAgIChsaW5lICAyMjApCiogWFNUUjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWNjZXNzb3JzLiAgICAgICAgICAobGluZSAgICA2KQoqIFhWRUM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjY2Vzc29ycy4gICAgICAgICAgKGxpbmUgICA0MSkKKiBYVkVDRVhQOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY2Nlc3NvcnMuICAgICAgICAgIChsaW5lICAgNDgpCiogWFZFQ0xFTjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWNjZXNzb3JzLiAgICAgICAgICAobGluZSAgIDQ0KQoqIFhXSU5UOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjY2Vzc29ycy4gICAgICAgICAgKGxpbmUgICAgNikKKiB6ZXJvX2V4dGVuZDogICAgICAgICAgICAgICAgICAgICAgICAgICBDb252ZXJzaW9ucy4gICAgICAgIChsaW5lICAgMjgpCiogJ3plcm9fZXh0ZW5kTU4yJyBpbnN0cnVjdGlvbiBwYXR0ZXJuOiAgU3RhbmRhcmQgTmFtZXMuICAgICAobGluZSAgODE4KQoqIHplcm9fZXh0cmFjdDogICAgICAgICAgICAgICAgICAgICAgICAgIEJpdC1GaWVsZHMuICAgICAgICAgKGxpbmUgICAzMCkKKiAnemVyb19leHRyYWN0JywgY2Fub25pY2FsaXphdGlvbiBvZjogICBJbnNuIENhbm9uaWNhbGl6YXRpb25zLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUgICA5NSkKCgofClRhZyBUYWJsZToKTm9kZTogVG9wfzIwNDkKTm9kZTogQ29udHJpYnV0aW5nfzQ5NDUKTm9kZTogUG9ydGFiaWxpdHl/NTY3NApOb2RlOiBJbnRlcmZhY2V/NzQ2MgpOb2RlOiBMaWJnY2N/MTA1MDMKTm9kZTogSW50ZWdlciBsaWJyYXJ5IHJvdXRpbmVzfzEyMzMwCk5vZGU6IFNvZnQgZmxvYXQgbGlicmFyeSByb3V0aW5lc38xOTE2OQpOb2RlOiBEZWNpbWFsIGZsb2F0IGxpYnJhcnkgcm91dGluZXN/MzExMDcKTm9kZTogRml4ZWQtcG9pbnQgZnJhY3Rpb25hbCBsaWJyYXJ5IHJvdXRpbmVzfzQ2ODYxCk5vZGU6IEV4Y2VwdGlvbiBoYW5kbGluZyByb3V0aW5lc38xNDcyNTcKTm9kZTogTWlzY2VsbGFuZW91cyByb3V0aW5lc38xNDgzNjQKTm9kZTogTGFuZ3VhZ2VzfzE0ODc0NwpOb2RlOiBTb3VyY2UgVHJlZX8xNTAyOTEKTm9kZTogQ29uZmlndXJlIFRlcm1zfzE1MDkxMApOb2RlOiBUb3AgTGV2ZWx/MTUzODY2Ck5vZGU6IGdjYyBEaXJlY3Rvcnl/MTU2MjE0Ck5vZGU6IFN1YmRpcmVjdG9yaWVzfzE1NzE4NQpOb2RlOiBDb25maWd1cmF0aW9ufzE1OTUyNApOb2RlOiBDb25maWcgRnJhZ21lbnRzfzE2MDI0NApOb2RlOiBTeXN0ZW0gQ29uZmlnfzE2MTU4NApOb2RlOiBDb25maWd1cmF0aW9uIEZpbGVzfzE2MjUyMApOb2RlOiBCdWlsZH8xNjUwODQKTm9kZTogTWFrZWZpbGV/MTY1NDk2ClJlZjogTWFrZWZpbGUtRm9vdG5vdGUtMX8xNzIyMTUKUmVmOiBNYWtlZmlsZS1Gb290bm90ZS0yfzE3MjM2MgpOb2RlOiBMaWJyYXJ5IEZpbGVzfzE3MjQzNgpOb2RlOiBIZWFkZXJzfzE3Mjk5OApOb2RlOiBEb2N1bWVudGF0aW9ufzE3NTA4MQpOb2RlOiBUZXhpbmZvIE1hbnVhbHN/MTc1OTQwCk5vZGU6IE1hbiBQYWdlIEdlbmVyYXRpb25/MTc4MjczCk5vZGU6IE1pc2NlbGxhbmVvdXMgRG9jc38xODAxODYKTm9kZTogRnJvbnQgRW5kfzE4MTQ3OApOb2RlOiBGcm9udCBFbmQgRGlyZWN0b3J5fzE4NTE2MQpOb2RlOiBGcm9udCBFbmQgQ29uZmlnfzE5MDE1NwpOb2RlOiBCYWNrIEVuZH8xOTMwNjEKTm9kZTogVGVzdHN1aXRlc38xOTY3MjMKTm9kZTogVGVzdCBJZGlvbXN/MTk3NTg3Ck5vZGU6IFRlc3QgRGlyZWN0aXZlc38yMDA5ODkKTm9kZTogQWRhIFRlc3RzfzIxMjgwNwpOb2RlOiBDIFRlc3RzfzIxNDA5OApOb2RlOiBsaWJnY2ogVGVzdHN/MjE4NDI2Ck5vZGU6IGdjb3YgVGVzdGluZ38yMTk1NTgKTm9kZTogcHJvZm9wdCBUZXN0aW5nfzIyMjU0NQpOb2RlOiBjb21wYXQgVGVzdGluZ38yMjM5ODgKTm9kZTogVG9ydHVyZSBUZXN0c38yMjgyMzIKTm9kZTogT3B0aW9uc38yMjk2MjIKTm9kZTogT3B0aW9uIGZpbGUgZm9ybWF0fzIzMDA2NApOb2RlOiBPcHRpb24gcHJvcGVydGllc38yMzI2MTcKTm9kZTogUGFzc2VzfzIzODI3NgpOb2RlOiBQYXJzaW5nIHBhc3N/MjM5MDExCk5vZGU6IEdpbXBsaWZpY2F0aW9uIHBhc3N/MjQyNTM3Ck5vZGU6IFBhc3MgbWFuYWdlcn8yNDQzNjMKTm9kZTogVHJlZS1TU0EgcGFzc2VzfzI0NTY5MQpOb2RlOiBSVEwgcGFzc2VzfzI2NzQ4MwpOb2RlOiBUcmVlc38yNzkzMDgKTm9kZTogRGVmaWNpZW5jaWVzfzI4MjAzOQpOb2RlOiBUcmVlIG92ZXJ2aWV3fzI4MjI3NgpOb2RlOiBNYWNyb3MgYW5kIEZ1bmN0aW9uc38yODYzOTYKTm9kZTogSWRlbnRpZmllcnN/Mjg2NTQyCk5vZGU6IENvbnRhaW5lcnN/Mjg4MDY1Ck5vZGU6IFR5cGVzfzI4OTIyMApOb2RlOiBTY29wZXN/MzA0OTA3Ck5vZGU6IE5hbWVzcGFjZXN/MzA1NjcyCk5vZGU6IENsYXNzZXN/MzA4NDgzCk5vZGU6IERlY2xhcmF0aW9uc38zMTMyMzgKTm9kZTogV29ya2luZyB3aXRoIGRlY2xhcmF0aW9uc38zMTM3MjkKTm9kZTogSW50ZXJuYWwgc3RydWN0dXJlfzMyMDE4NgpOb2RlOiBDdXJyZW50IHN0cnVjdHVyZSBoaWVyYXJjaHl/MzIwNTY4Ck5vZGU6IEFkZGluZyBuZXcgREVDTCBub2RlIHR5cGVzfzMyMjY1OQpOb2RlOiBGdW5jdGlvbnN/MzI2NzI5Ck5vZGU6IEZ1bmN0aW9uIEJhc2ljc38zMjkxMzUKTm9kZTogRnVuY3Rpb24gQm9kaWVzfzMzNjI5OQpOb2RlOiBBdHRyaWJ1dGVzfzM0NzU0NwpOb2RlOiBFeHByZXNzaW9uIHRyZWVzfzM0ODc4NApOb2RlOiBUcmVlIFNTQX8zOTE0MzcKTm9kZTogR0VORVJJQ38zOTMzMDkKTm9kZTogR0lNUExFfzM5NDkyMApOb2RlOiBJbnRlcmZhY2VzfzM5NjIxMQpOb2RlOiBUZW1wb3Jhcmllc38zOTgzNjQKUmVmOiBUZW1wb3Jhcmllcy1Gb290bm90ZS0xfzM5OTY4NgpOb2RlOiBHSU1QTEUgRXhwcmVzc2lvbnN/Mzk5NzUxCk5vZGU6IENvbXBvdW5kIEV4cHJlc3Npb25zfzQwMDUyMgpOb2RlOiBDb21wb3VuZCBMdmFsdWVzfzQwMDc3MApOb2RlOiBDb25kaXRpb25hbCBFeHByZXNzaW9uc380MDE1NTAKTm9kZTogTG9naWNhbCBPcGVyYXRvcnN/NDAyMjI3Ck5vZGU6IFN0YXRlbWVudHN/NDAyNzIwCk5vZGU6IEJsb2Nrc380MDM0MjgKTm9kZTogU3RhdGVtZW50IFNlcXVlbmNlc380MDQ4NDUKTm9kZTogRW1wdHkgU3RhdGVtZW50c380MDUxODIKTm9kZTogTG9vcHN/NDA1NzYwCk5vZGU6IFNlbGVjdGlvbiBTdGF0ZW1lbnRzfzQwNjAwNApOb2RlOiBKdW1wc380MDY4NTcKTm9kZTogQ2xlYW51cHN/NDA3NTE4Ck5vZGU6IEdJTVBMRSBFeGNlcHRpb24gSGFuZGxpbmd/NDA5MzA4Ck5vZGU6IEdJTVBMRSBFeGFtcGxlfzQxMTE4NApOb2RlOiBSb3VnaCBHSU1QTEUgR3JhbW1hcn80MTI1OTUKTm9kZTogQW5ub3RhdGlvbnN/NDE3OTQ0Ck5vZGU6IFN0YXRlbWVudCBPcGVyYW5kc380MTg2MTAKTm9kZTogU1NBfzQzMzE1OApOb2RlOiBBbGlhcyBhbmFseXNpc380NDU0MzcKTm9kZTogTG9vcCBBbmFseXNpcyBhbmQgUmVwcmVzZW50YXRpb25/NDUyODg2Ck5vZGU6IExvb3AgcmVwcmVzZW50YXRpb25/NDUzOTI3Ck5vZGU6IExvb3AgcXVlcnlpbmd/NDYwODQ0Ck5vZGU6IExvb3AgbWFuaXB1bGF0aW9ufzQ2MzY2MApOb2RlOiBMQ1NTQX80NjYwMjEKTm9kZTogU2NhbGFyIGV2b2x1dGlvbnN/NDY4MDkwCk5vZGU6IGxvb3AtaXZ/NDcxMzM0Ck5vZGU6IE51bWJlciBvZiBpdGVyYXRpb25zfzQ3MzI1NgpOb2RlOiBEZXBlbmRlbmN5IGFuYWx5c2lzfzQ3NjA2MgpOb2RlOiBMYW1iZGF/NDgyNDI3Ck5vZGU6IE9tZWdhfzQ4NDA5OApOb2RlOiBSVEx/NDg1NjYzCk5vZGU6IFJUTCBPYmplY3RzfzQ4Nzc5NApOb2RlOiBSVEwgQ2xhc3Nlc380OTE2NjgKTm9kZTogQWNjZXNzb3JzfzQ5NjYyMApOb2RlOiBTcGVjaWFsIEFjY2Vzc29yc380OTkwMTQKTm9kZTogRmxhZ3N/NTA0MjQ2Ck5vZGU6IE1hY2hpbmUgTW9kZXN/NTE5NDg0Ck5vZGU6IENvbnN0YW50c381MzE3OTgKTm9kZTogUmVncyBhbmQgTWVtb3J5fzUzODQ0NgpOb2RlOiBBcml0aG1ldGljfzU1MTk4MgpOb2RlOiBDb21wYXJpc29uc381NjE0OTUKTm9kZTogQml0LUZpZWxkc381NjU3ODcKTm9kZTogVmVjdG9yIE9wZXJhdGlvbnN/NTY3MzM5Ck5vZGU6IENvbnZlcnNpb25zfzU2ODk1OQpOb2RlOiBSVEwgRGVjbGFyYXRpb25zfzU3MzQ2OQpOb2RlOiBTaWRlIEVmZmVjdHN/NTc0MjkwCk5vZGU6IEluY2RlY381OTA0MDAKTm9kZTogQXNzZW1ibGVyfzU5Mzc0MQpOb2RlOiBJbnNuc381OTUyNzMKTm9kZTogQ2FsbHN/NjIxMTkyCk5vZGU6IFNoYXJpbmd/NjIzNzg1Ck5vZGU6IFJlYWRpbmcgUlRMfzYyNjg5NgpOb2RlOiBDb250cm9sIEZsb3d/NjI3ODg1Ck5vZGU6IEJhc2ljIEJsb2Nrc382Mjg4NjAKTm9kZTogRWRnZXN/NjMzNDI1Ck5vZGU6IFByb2ZpbGUgaW5mb3JtYXRpb25/NjQxOTg0Ck5vZGU6IE1haW50YWluaW5nIHRoZSBDRkd/NjQ2NjY4Ck5vZGU6IExpdmVuZXNzIGluZm9ybWF0aW9ufzY1MzU1OApOb2RlOiBNYWNoaW5lIERlc2N/NjU1Njg1Ck5vZGU6IE92ZXJ2aWV3fzY1ODE0NwpOb2RlOiBQYXR0ZXJuc382NjAxODcKTm9kZTogRXhhbXBsZX82NjM2MjUKTm9kZTogUlRMIFRlbXBsYXRlfzY2NTA1OQpOb2RlOiBPdXRwdXQgVGVtcGxhdGV/Njc1NzE0Ck5vZGU6IE91dHB1dCBTdGF0ZW1lbnR/Njc5Njc4Ck5vZGU6IFByZWRpY2F0ZXN/NjgzNjQwCk5vZGU6IE1hY2hpbmUtSW5kZXBlbmRlbnQgUHJlZGljYXRlc382ODY1NTgKTm9kZTogRGVmaW5pbmcgUHJlZGljYXRlc382OTExODkKTm9kZTogQ29uc3RyYWludHN/Njk3MTUyCk5vZGU6IFNpbXBsZSBDb25zdHJhaW50c382OTgzMTMKTm9kZTogTXVsdGktQWx0ZXJuYXRpdmV/NzEwMzY1Ck5vZGU6IENsYXNzIFByZWZlcmVuY2VzfzcxMzIwNgpOb2RlOiBNb2RpZmllcnN/NzE0MDk4Ck5vZGU6IE1hY2hpbmUgQ29uc3RyYWludHN/NzE4MjI0Ck5vZGU6IERlZmluZSBDb25zdHJhaW50c383NTA3NzYKTm9kZTogQyBDb25zdHJhaW50IEludGVyZmFjZX83NTc1NTQKTm9kZTogU3RhbmRhcmQgTmFtZXN/NzYxMTg1ClJlZjogc2hpZnQgcGF0dGVybnN/NzgwMTE1ClJlZjogcHJvbG9ndWUgaW5zdHJ1Y3Rpb24gcGF0dGVybn84MjA3MjcKUmVmOiBlcGlsb2d1ZSBpbnN0cnVjdGlvbiBwYXR0ZXJufzgyMTIyMApOb2RlOiBQYXR0ZXJuIE9yZGVyaW5nfzgzMDc3MwpOb2RlOiBEZXBlbmRlbnQgUGF0dGVybnN/ODMyMDA5Ck5vZGU6IEp1bXAgUGF0dGVybnN/ODM0ODIzCk5vZGU6IExvb3BpbmcgUGF0dGVybnN/ODQwNTE5Ck5vZGU6IEluc24gQ2Fub25pY2FsaXphdGlvbnN/ODQ1MTIyCk5vZGU6IEV4cGFuZGVyIERlZmluaXRpb25zfzg0OTUwMApOb2RlOiBJbnNuIFNwbGl0dGluZ384NTc2MTkKTm9kZTogSW5jbHVkaW5nIFBhdHRlcm5zfzg2NzIxNgpOb2RlOiBQZWVwaG9sZSBEZWZpbml0aW9uc384NjkwMDAKTm9kZTogZGVmaW5lX3BlZXBob2xlfzg3MDI1MwpOb2RlOiBkZWZpbmVfcGVlcGhvbGUyfzg3NjU4MwpOb2RlOiBJbnNuIEF0dHJpYnV0ZXN/ODc5NjUwCk5vZGU6IERlZmluaW5nIEF0dHJpYnV0ZXN/ODgwNzU2Ck5vZGU6IEV4cHJlc3Npb25zfzg4Mjc3MwpOb2RlOiBUYWdnaW5nIEluc25zfzg4OTM3NQpOb2RlOiBBdHRyIEV4YW1wbGV/ODkzNzI4Ck5vZGU6IEluc24gTGVuZ3Roc384OTYxMDEKTm9kZTogQ29uc3RhbnQgQXR0cmlidXRlc384OTkxNjAKTm9kZTogRGVsYXkgU2xvdHN/OTAwMzI5Ck5vZGU6IFByb2Nlc3NvciBwaXBlbGluZSBkZXNjcmlwdGlvbn85MDM1NTMKUmVmOiBQcm9jZXNzb3IgcGlwZWxpbmUgZGVzY3JpcHRpb24tRm9vdG5vdGUtMX85MjA5MjQKTm9kZTogQ29uZGl0aW9uYWwgRXhlY3V0aW9ufzkyMTI0OApOb2RlOiBDb25zdGFudCBEZWZpbml0aW9uc385MjQxMDEKTm9kZTogSXRlcmF0b3JzfzkyNTY5NgpOb2RlOiBNb2RlIEl0ZXJhdG9yc385MjYxNDMKTm9kZTogRGVmaW5pbmcgTW9kZSBJdGVyYXRvcnN/OTI3MTA1Ck5vZGU6IFN1YnN0aXR1dGlvbnN/OTI4NTk5Ck5vZGU6IEV4YW1wbGVzfzkzMDg0MQpOb2RlOiBDb2RlIEl0ZXJhdG9yc385MzIyODkKTm9kZTogVGFyZ2V0IE1hY3Jvc385MzQ1NDYKTm9kZTogVGFyZ2V0IFN0cnVjdHVyZX85Mzc0OTgKTm9kZTogRHJpdmVyfzkzODc2OApOb2RlOiBSdW4tdGltZSBUYXJnZXR/OTYyNDQxCk5vZGU6IFBlci1GdW5jdGlvbiBEYXRhfzk2OTY0NApOb2RlOiBTdG9yYWdlIExheW91dH85NzI0MDYKTm9kZTogVHlwZSBMYXlvdXR/OTk5MDAxCk5vZGU6IFJlZ2lzdGVyc38xMDExOTU5Ck5vZGU6IFJlZ2lzdGVyIEJhc2ljc38xMDEyODgyCk5vZGU6IEFsbG9jYXRpb24gT3JkZXJ/MTAxODQ1MgpOb2RlOiBWYWx1ZXMgaW4gUmVnaXN0ZXJzfzEwMTk4OTcKTm9kZTogTGVhZiBGdW5jdGlvbnN/MTAyNjk5MQpOb2RlOiBTdGFjayBSZWdpc3RlcnN/MTAyOTg1MApOb2RlOiBSZWdpc3RlciBDbGFzc2VzfzEwMzA5NjYKTm9kZTogT2xkIENvbnN0cmFpbnRzfzEwNTY1MzAKTm9kZTogU3RhY2sgYW5kIENhbGxpbmd/MTA2MzY2OQpOb2RlOiBGcmFtZSBMYXlvdXR/MTA2NDIwMwpOb2RlOiBFeGNlcHRpb24gSGFuZGxpbmd/MTA3NTA0NgpOb2RlOiBTdGFjayBDaGVja2luZ38xMDgxNDE5Ck5vZGU6IEZyYW1lIFJlZ2lzdGVyc38xMDg1MDQ5Ck5vZGU6IEVsaW1pbmF0aW9ufzEwOTE2NTYKTm9kZTogU3RhY2sgQXJndW1lbnRzfzEwOTU2ODcKTm9kZTogUmVnaXN0ZXIgQXJndW1lbnRzfzExMDIyNzkKTm9kZTogU2NhbGFyIFJldHVybn8xMTE2NDk1Ck5vZGU6IEFnZ3JlZ2F0ZSBSZXR1cm5/MTEyMTc4MQpOb2RlOiBDYWxsZXIgU2F2ZXN/MTEyNTQ0MQpOb2RlOiBGdW5jdGlvbiBFbnRyeX8xMTI2NjE4Ck5vZGU6IFByb2ZpbGluZ38xMTM5MjIzCk5vZGU6IFRhaWwgQ2FsbHN/MTE0MDkyMgpOb2RlOiBTdGFjayBTbWFzaGluZyBQcm90ZWN0aW9ufzExNDIyODkKTm9kZTogVmFyYXJnc38xMTQzNDAxCk5vZGU6IFRyYW1wb2xpbmVzfzExNTEzNTMKTm9kZTogTGlicmFyeSBDYWxsc38xMTU4MDE4Ck5vZGU6IEFkZHJlc3NpbmcgTW9kZXN/MTE2Mjg4MQpOb2RlOiBBbmNob3JlZCBBZGRyZXNzZXN/MTE3ODEzMwpOb2RlOiBDb25kaXRpb24gQ29kZX8xMTgwNzg4Ck5vZGU6IENvc3RzfzExODkwNzcKTm9kZTogU2NoZWR1bGluZ38xMjAxNzkyCk5vZGU6IFNlY3Rpb25zfzEyMTg1NTMKTm9kZTogUElDfzEyMzMyMDQKTm9kZTogQXNzZW1ibGVyIEZvcm1hdH8xMjM1MTkzCk5vZGU6IEZpbGUgRnJhbWV3b3JrfzEyMzYyNzIKUmVmOiBUQVJHRVRfSEFWRV9TV0lUQ0hBQkxFX0JTU19TRUNUSU9OU38xMjQxMTY4Ck5vZGU6IERhdGEgT3V0cHV0fzEyNDQ0MzkKTm9kZTogVW5pbml0aWFsaXplZCBEYXRhfzEyNTIxOTEKTm9kZTogTGFiZWwgT3V0cHV0fzEyNTcyNjIKTm9kZTogSW5pdGlhbGl6YXRpb25/MTI3ODkxMQpOb2RlOiBNYWNyb3MgZm9yIEluaXRpYWxpemF0aW9ufzEyODQ4NzIKTm9kZTogSW5zdHJ1Y3Rpb24gT3V0cHV0fzEyOTEzMjUKTm9kZTogRGlzcGF0Y2ggVGFibGVzfzEzMDAzMTIKTm9kZTogRXhjZXB0aW9uIFJlZ2lvbiBPdXRwdXR/MTMwNDEwNwpOb2RlOiBBbGlnbm1lbnQgT3V0cHV0fzEzMDk4NjIKTm9kZTogRGVidWdnaW5nIEluZm9/MTMxNDAyNQpOb2RlOiBBbGwgRGVidWdnZXJzfzEzMTQ2OTUKTm9kZTogREJYIE9wdGlvbnN/MTMxNzU1MApOb2RlOiBEQlggSG9va3N/MTMyMjk4OApOb2RlOiBGaWxlIE5hbWVzIGFuZCBEQlh/MTMyNDkxNApOb2RlOiBTREIgYW5kIERXQVJGfzEzMjcwMjUKTm9kZTogVk1TIERlYnVnfzEzMzEwMTgKTm9kZTogRmxvYXRpbmcgUG9pbnR/MTMzMTU4OApOb2RlOiBNb2RlIFN3aXRjaGluZ38xMzM2NDExCk5vZGU6IFRhcmdldCBBdHRyaWJ1dGVzfzEzNDAzMzcKTm9kZTogTUlQUyBDb3Byb2Nlc3NvcnN/MTM0NTA4MApOb2RlOiBQQ0ggVGFyZ2V0fzEzNDY2NTQKTm9kZTogQysrIEFCSX8xMzQ4MTc1Ck5vZGU6IE1pc2N/MTM1Mjc5NgpSZWY6IFRBUkdFVF9TSElGVF9UUlVOQ0FUSU9OX01BU0t/MTM2MDE2MQpOb2RlOiBIb3N0IENvbmZpZ38xMzk5MzczCk5vZGU6IEhvc3QgQ29tbW9ufzE0MDA0MzMKTm9kZTogRmlsZXN5c3RlbX8xNDAyODA3Ck5vZGU6IEhvc3QgTWlzY38xNDA2OTIyCk5vZGU6IEZyYWdtZW50c38xNDA5MDYxCk5vZGU6IFRhcmdldCBGcmFnbWVudH8xNDEwMjU2Ck5vZGU6IEhvc3QgRnJhZ21lbnR/MTQxNTkyMwpOb2RlOiBDb2xsZWN0Mn8xNDE3MzY0Ck5vZGU6IEhlYWRlciBEaXJzfzE0MTk5MDcKTm9kZTogVHlwZSBJbmZvcm1hdGlvbn8xNDIxMzMwCk5vZGU6IEdUWSBPcHRpb25zfzE0MjM1MTUKTm9kZTogR0dDIFJvb3RzfzE0MzQyMDAKTm9kZTogRmlsZXN/MTQzNDkxNwpOb2RlOiBGdW5kaW5nfzE0MzcyNzcKTm9kZTogR05VIFByb2plY3R/MTQzOTc3NApOb2RlOiBDb3B5aW5nfzE0NDA0MjMKTm9kZTogR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlfzE0Nzc5MzUKTm9kZTogQ29udHJpYnV0b3JzfzE1MDAzMjUKTm9kZTogT3B0aW9uIEluZGV4fzE1MzY1MjQKTm9kZTogQ29uY2VwdCBJbmRleH8xNTM3MTA5Ch8KRW5kIFRhZyBUYWJsZQo=