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ekaIAXKqdAV0A2QHgwGIAGQIjQIBAG4YdAV0A2QJgwFqBnwOZAqNAYgAZAiNAgEAVwBZAGQEfQ5+DnFYVwBZAGQEfQ5+Dm4KZAR9Dn4OMAAwAHwDc+x8DVMAfAp8A4MBfQ98DAwAb/58DwwAfRB8D5ABcxB8EHLskAFxEHHsfAx8D2sCkAFyHnwNUwB0BXQDZAuDAYgAZAiNAgEAcVhkBFMAKQxhIQcAAFByb21wdHMgYSB1c2VyIGZvciBpbnB1dC4gIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBmdW5jdGlvbiB0aGF0IGNhbgogICAgYmUgdXNlZCB0byBwcm9tcHQgYSB1c2VyIGZvciBpbnB1dCBsYXRlci4KCiAgICBJZiB0aGUgdXNlciBhYm9ydHMgdGhlIGlucHV0IGJ5IHNlbmRpbmcgYW4gaW50ZXJydXB0IHNpZ25hbCwgdGhpcwogICAgZnVuY3Rpb24gd2lsbCBjYXRjaCBpdCBhbmQgcmFpc2UgYSA6ZXhjOmBBYm9ydGAgZXhjZXB0aW9uLgoKICAgIDpwYXJhbSB0ZXh0OiB0aGUgdGV4dCB0byBzaG93IGZvciB0aGUgcHJvbXB0LgogICAgOnBhcmFtIGRlZmF1bHQ6IHRoZSBkZWZhdWx0IHZhbHVlIHRvIHVzZSBpZiBubyBpbnB1dCBoYXBwZW5zLiAgSWYgdGhpcwogICAgICAgICAgICAgICAgICAgIGlzIG5vdCBnaXZlbiBpdCB3aWxsIHByb21wdCB1bnRpbCBpdCdzIGFib3J0ZWQuCiAgICA6cGFyYW0gaGlkZV9pbnB1dDogaWYgdGhpcyBpcyBzZXQgdG8gdHJ1ZSB0aGVuIHRoZSBpbnB1dCB2YWx1ZSB3aWxsCiAgICAgICAgICAgICAgICAgICAgICAgYmUgaGlkZGVuLgogICAgOnBhcmFtIGNvbmZpcm1hdGlvbl9wcm9tcHQ6IFByb21wdCBhIHNlY29uZCB0aW1lIHRvIGNvbmZpcm0gdGhlCiAgICAgICAgdmFsdWUuIENhbiBiZSBzZXQgdG8gYSBzdHJpbmcgaW5zdGVhZCBvZiBgYFRydWVgYCB0byBjdXN0b21pemUKICAgICAgICB0aGUgbWVzc2FnZS4KICAgIDpwYXJhbSB0eXBlOiB0aGUgdHlwZSB0byB1c2UgdG8gY2hlY2sgdGhlIHZhbHVlIGFnYWluc3QuCiAgICA6cGFyYW0gdmFsdWVfcHJvYzogaWYgdGhpcyBwYXJhbWV0ZXIgaXMgcHJvdmlkZWQgaXQncyBhIGZ1bmN0aW9uIHRoYXQKICAgICAgICAgICAgICAgICAgICAgICBpcyBpbnZva2VkIGluc3RlYWQgb2YgdGhlIHR5cGUgY29udmVyc2lvbiB0bwogICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnQgYSB2YWx1ZS4KICAgIDpwYXJhbSBwcm9tcHRfc3VmZml4OiBhIHN1ZmZpeCB0aGF0IHNob3VsZCBiZSBhZGRlZCB0byB0aGUgcHJvbXB0LgogICAgOnBhcmFtIHNob3dfZGVmYXVsdDogc2hvd3Mgb3IgaGlkZXMgdGhlIGRlZmF1bHQgdmFsdWUgaW4gdGhlIHByb21wdC4KICAgIDpwYXJhbSBlcnI6IGlmIHNldCB0byB0cnVlIHRoZSBmaWxlIGRlZmF1bHRzIHRvIGBgc3RkZXJyYGAgaW5zdGVhZCBvZgogICAgICAgICAgICAgICAgYGBzdGRvdXRgYCwgdGhlIHNhbWUgYXMgd2l0aCBlY2hvLgogICAgOnBhcmFtIHNob3dfY2hvaWNlczogU2hvdyBvciBoaWRlIGNob2ljZXMgaWYgdGhlIHBhc3NlZCB0eXBlIGlzIGEgQ2hvaWNlLgogICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUgaWYgdHlwZSBpcyBhIENob2ljZSBvZiBlaXRoZXIgZGF5IG9yIHdlZWssCiAgICAgICAgICAgICAgICAgICAgICAgICBzaG93X2Nob2ljZXMgaXMgdHJ1ZSBhbmQgdGV4dCBpcyAiR3JvdXAgYnkiIHRoZW4gdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICBwcm9tcHQgd2lsbCBiZSAiR3JvdXAgYnkgKGRheSwgd2Vlayk6ICIuCgogICAgLi4gdmVyc2lvbmFkZGVkOjogOC4wCiAgICAgICAgYGBjb25maXJtYXRpb25fcHJvbXB0YGAgY2FuIGJlIGEgY3VzdG9tIHN0cmluZy4KCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiA3LjAK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AHwBfAN8BHwFfAZ8B3wIfAl8CnwMfAJ8C3wNfA5kA40PUwApBGFRFQAAVGhpcyBmdW5jdGlvbiBjcmVhdGVzIGFuIGl0ZXJhYmxlIGNvbnRleHQgbWFuYWdlciB0aGF0IGNhbiBiZSB1c2VkCiAgICB0byBpdGVyYXRlIG92ZXIgc29tZXRoaW5nIHdoaWxlIHNob3dpbmcgYSBwcm9ncmVzcyBiYXIuICBJdCB3aWxsCiAgICBlaXRoZXIgaXRlcmF0ZSBvdmVyIHRoZSBgaXRlcmFibGVgIG9yIGBsZW5ndGhgIGl0ZW1zICh0aGF0IGFyZSBjb3VudGVkCiAgICB1cCkuICBXaGlsZSBpdGVyYXRpb24gaGFwcGVucywgdGhpcyBmdW5jdGlvbiB3aWxsIHByaW50IGEgcmVuZGVyZWQKICAgIHByb2dyZXNzIGJhciB0byB0aGUgZ2l2ZW4gYGZpbGVgIChkZWZhdWx0cyB0byBzdGRvdXQpIGFuZCB3aWxsIGF0dGVtcHQKICAgIHRvIGNhbGN1bGF0ZSByZW1haW5pbmcgdGltZSBhbmQgbW9yZS4gIEJ5IGRlZmF1bHQsIHRoaXMgcHJvZ3Jlc3MgYmFyCiAgICB3aWxsIG5vdCBiZSByZW5kZXJlZCBpZiB0aGUgZmlsZSBpcyBub3QgYSB0ZXJtaW5hbC4KCiAgICBUaGUgY29udGV4dCBtYW5hZ2VyIGNyZWF0ZXMgdGhlIHByb2dyZXNzIGJhci4gIFdoZW4gdGhlIGNvbnRleHQKICAgIG1hbmFnZXIgaXMgZW50ZXJlZCB0aGUgcHJvZ3Jlc3MgYmFyIGlzIGFscmVhZHkgY3JlYXRlZC4gIFdpdGggZXZlcnkKICAgIGl0ZXJhdGlvbiBvdmVyIHRoZSBwcm9ncmVzcyBiYXIsIHRoZSBpdGVyYWJsZSBwYXNzZWQgdG8gdGhlIGJhciBpcwogICAgYWR2YW5jZWQgYW5kIHRoZSBiYXIgaXMgdXBkYXRlZC4gIFdoZW4gdGhlIGNvbnRleHQgbWFuYWdlciBleGl0cywKICAgIGEgbmV3bGluZSBpcyBwcmludGVkIGFuZCB0aGUgcHJvZ3Jlc3MgYmFyIGlzIGZpbmFsaXplZCBvbiBzY3JlZW4uCgogICAgTm90ZTogVGhlIHByb2dyZXNzIGJhciBpcyBjdXJyZW50bHkgZGVzaWduZWQgZm9yIHVzZSBjYXNlcyB3aGVyZSB0aGUKICAgIHRvdGFsIHByb2dyZXNzIGNhbiBiZSBleHBlY3RlZCB0byB0YWtlIGF0IGxlYXN0IHNldmVyYWwgc2Vjb25kcy4KICAgIEJlY2F1c2Ugb2YgdGhpcywgdGhlIFByb2dyZXNzQmFyIGNsYXNzIG9iamVjdCB3b24ndCBkaXNwbGF5CiAgICBwcm9ncmVzcyB0aGF0IGlzIGNvbnNpZGVyZWQgdG9vIGZhc3QsIGFuZCBwcm9ncmVzcyB3aGVyZSB0aGUgdGltZQogICAgYmV0d2VlbiBzdGVwcyBpcyBsZXNzIHRoYW4gYSBzZWNvbmQuCgogICAgTm8gcHJpbnRpbmcgbXVzdCBoYXBwZW4gb3IgdGhlIHByb2dyZXNzIGJhciB3aWxsIGJlIHVuaW50ZW50aW9uYWxseQogICAgZGVzdHJveWVkLgoKICAgIEV4YW1wbGUgdXNhZ2U6OgoKICAgICAgICB3aXRoIHByb2dyZXNzYmFyKGl0ZW1zKSBhcyBiYXI6CiAgICAgICAgICAgIGZvciBpdGVtIGluIGJhcjoKICAgICAgICAgICAgICAgIGRvX3NvbWV0aGluZ193aXRoKGl0ZW0pCgogICAgQWx0ZXJuYXRpdmVseSwgaWYgbm8gaXRlcmFibGUgaXMgc3BlY2lmaWVkLCBvbmUgY2FuIG1hbnVhbGx5IHVwZGF0ZSB0aGUKICAgIHByb2dyZXNzIGJhciB0aHJvdWdoIHRoZSBgdXBkYXRlKClgIG1ldGhvZCBpbnN0ZWFkIG9mIGRpcmVjdGx5CiAgICBpdGVyYXRpbmcgb3ZlciB0aGUgcHJvZ3Jlc3MgYmFyLiAgVGhlIHVwZGF0ZSBtZXRob2QgYWNjZXB0cyB0aGUgbnVtYmVyCiAgICBvZiBzdGVwcyB0byBpbmNyZW1lbnQgdGhlIGJhciB3aXRoOjoKCiAgICAgICAgd2l0aCBwcm9ncmVzc2JhcihsZW5ndGg9Y2h1bmtzLnRvdGFsX2J5dGVzKSBhcyBiYXI6CiAgICAgICAgICAgIGZvciBjaHVuayBpbiBjaHVua3M6CiAgICAgICAgICAgICAgICBwcm9jZXNzX2NodW5rKGNodW5rKQogICAgICAgICAgICAgICAgYmFyLnVwZGF0ZShjaHVua3MuYnl0ZXMpCgogICAgVGhlIGBgdXBkYXRlKClgYCBtZXRob2QgYWxzbyB0YWtlcyBhbiBvcHRpb25hbCB2YWx1ZSBzcGVjaWZ5aW5nIHRoZQogICAgYGBjdXJyZW50X2l0ZW1gYCBhdCB0aGUgbmV3IHBvc2l0aW9uLiBUaGlzIGlzIHVzZWZ1bCB3aGVuIHVzZWQKICAgIHRvZ2V0aGVyIHdpdGggYGBpdGVtX3Nob3dfZnVuY2BgIHRvIGN1c3RvbWl6ZSB0aGUgb3V0cHV0IGZvciBlYWNoCiAgICBtYW51YWwgc3RlcDo6CgogICAgICAgIHdpdGggY2xpY2sucHJvZ3Jlc3NiYXIoCiAgICAgICAgICAgIGxlbmd0aD10b3RhbF9zaXplLAogICAgICAgICAgICBsYWJlbD0nVW56aXBwaW5nIGFyY2hpdmUnLAogICAgICAgICAgICBpdGVtX3Nob3dfZnVuYz1sYW1iZGEgYTogYS5maWxlbmFtZQogICAgICAgICkgYXMgYmFyOgogICAgICAgICAgICBmb3IgYXJjaGl2ZSBpbiB6aXBfZmlsZToKICAgICAgICAgICAgICAgIGFyY2hpdmUuZXh0cmFjdCgpCiAgICAgICAgICAgICAgICBiYXIudXBkYXRlKGFyY2hpdmUuc2l6ZSwgYXJjaGl2ZSkKCiAgICA6cGFyYW0gaXRlcmFibGU6IGFuIGl0ZXJhYmxlIHRvIGl0ZXJhdGUgb3Zlci4gIElmIG5vdCBwcm92aWRlZCB0aGUgbGVuZ3RoCiAgICAgICAgICAgICAgICAgICAgIGlzIHJlcXVpcmVkLgogICAgOnBhcmFtIGxlbmd0aDogdGhlIG51bWJlciBvZiBpdGVtcyB0byBpdGVyYXRlIG92ZXIuICBCeSBkZWZhdWx0IHRoZQogICAgICAgICAgICAgICAgICAgcHJvZ3Jlc3NiYXIgd2lsbCBhdHRlbXB0IHRvIGFzayB0aGUgaXRlcmF0b3IgYWJvdXQgaXRzCiAgICAgICAgICAgICAgICAgICBsZW5ndGgsIHdoaWNoIG1pZ2h0IG9yIG1pZ2h0IG5vdCB3b3JrLiAgSWYgYW4gaXRlcmFibGUgaXMKICAgICAgICAgICAgICAgICAgIGFsc28gcHJvdmlkZWQgdGhpcyBwYXJhbWV0ZXIgY2FuIGJlIHVzZWQgdG8gb3ZlcnJpZGUgdGhlCiAgICAgICAgICAgICAgICAgICBsZW5ndGguICBJZiBhbiBpdGVyYWJsZSBpcyBub3QgcHJvdmlkZWQgdGhlIHByb2dyZXNzIGJhcgogICAgICAgICAgICAgICAgICAgd2lsbCBpdGVyYXRlIG92ZXIgYSByYW5nZSBvZiB0aGF0IGxlbmd0aC4KICAgIDpwYXJhbSBsYWJlbDogdGhlIGxhYmVsIHRvIHNob3cgbmV4dCB0byB0aGUgcHJvZ3Jlc3MgYmFyLgogICAgOnBhcmFtIHNob3dfZXRhOiBlbmFibGVzIG9yIGRpc2FibGVzIHRoZSBlc3RpbWF0ZWQgdGltZSBkaXNwbGF5LiAgVGhpcyBpcwogICAgICAgICAgICAgICAgICAgICBhdXRvbWF0aWNhbGx5IGRpc2FibGVkIGlmIHRoZSBsZW5ndGggY2Fubm90IGJlCiAgICAgICAgICAgICAgICAgICAgIGRldGVybWluZWQuCiAgICA6cGFyYW0gc2hvd19wZXJjZW50OiBlbmFibGVzIG9yIGRpc2FibGVzIHRoZSBwZXJjZW50YWdlIGRpc3BsYXkuICBUaGUKICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgaXMgYFRydWVgIGlmIHRoZSBpdGVyYWJsZSBoYXMgYSBsZW5ndGggb3IKICAgICAgICAgICAgICAgICAgICAgICAgIGBGYWxzZWAgaWYgbm90LgogICAgOnBhcmFtIHNob3dfcG9zOiBlbmFibGVzIG9yIGRpc2FibGVzIHRoZSBhYnNvbHV0ZSBwb3NpdGlvbiBkaXNwbGF5LiAgVGhlCiAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgaXMgYEZhbHNlYC4KICAgIDpwYXJhbSBpdGVtX3Nob3dfZnVuYzogQSBmdW5jdGlvbiBjYWxsZWQgd2l0aCB0aGUgY3VycmVudCBpdGVtIHdoaWNoCiAgICAgICAgY2FuIHJldHVybiBhIHN0cmluZyB0byBzaG93IG5leHQgdG8gdGhlIHByb2dyZXNzIGJhci4gSWYgdGhlCiAgICAgICAgZnVuY3Rpb24gcmV0dXJucyBgYE5vbmVgYCBub3RoaW5nIGlzIHNob3duLiBUaGUgY3VycmVudCBpdGVtIGNhbgogICAgICAgIGJlIGBgTm9uZWBgLCBzdWNoIGFzIHdoZW4gZW50ZXJpbmcgYW5kIGV4aXRpbmcgdGhlIGJhci4KICAgIDpwYXJhbSBmaWxsX2NoYXI6IHRoZSBjaGFyYWN0ZXIgdG8gdXNlIHRvIHNob3cgdGhlIGZpbGxlZCBwYXJ0IG9mIHRoZQogICAgICAgICAgICAgICAgICAgICAgcHJvZ3Jlc3MgYmFyLgogICAgOnBhcmFtIGVtcHR5X2NoYXI6IHRoZSBjaGFyYWN0ZXIgdG8gdXNlIHRvIHNob3cgdGhlIG5vbi1maWxsZWQgcGFydCBvZgogICAgICAgICAgICAgICAgICAgICAgIHRoZSBwcm9ncmVzcyBiYXIuCiAgICA6cGFyYW0gYmFyX3RlbXBsYXRlOiB0aGUgZm9ybWF0IHN0cmluZyB0byB1c2UgYXMgdGVtcGxhdGUgZm9yIHRoZSBiYXIuCiAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgcGFyYW1ldGVycyBpbiBpdCBhcmUgYGBsYWJlbGBgIGZvciB0aGUgbGFiZWwsCiAgICAgICAgICAgICAgICAgICAgICAgICBgYGJhcmBgIGZvciB0aGUgcHJvZ3Jlc3MgYmFyIGFuZCBgYGluZm9gYCBmb3IgdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvIHNlY3Rpb24uCiAgICA6cGFyYW0gaW5mb19zZXA6IHRoZSBzZXBhcmF0b3IgYmV0d2VlbiBtdWx0aXBsZSBpbmZvIGl0ZW1zIChldGEgZXRjLikKICAgIDpwYXJhbSB3aWR0aDogdGhlIHdpZHRoIG9mIHRoZSBwcm9ncmVzcyBiYXIgaW4gY2hhcmFjdGVycywgMCBtZWFucyBmdWxsCiAgICAgICAgICAgICAgICAgIHRlcm1pbmFsIHdpZHRoCiAgICA6cGFyYW0gZmlsZTogVGhlIGZpbGUgdG8gd3JpdGUgdG8uIElmIHRoaXMgaXMgbm90IGEgdGVybWluYWwgdGhlbgogICAgICAgIG9ubHkgdGhlIGxhYmVsIGlzIHByaW50ZWQuCiAgICA6cGFyYW0gY29sb3I6IGNvbnRyb2xzIGlmIHRoZSB0ZXJtaW5hbCBzdXBwb3J0cyBBTlNJIGNvbG9ycyBvciBub3QuICBUaGUKICAgICAgICAgICAgICAgICAgZGVmYXVsdCBpcyBhdXRvZGV0ZWN0aW9uLiAgVGhpcyBpcyBvbmx5IG5lZWRlZCBpZiBBTlNJCiAgICAgICAgICAgICAgICAgIGNvZGVzIGFyZSBpbmNsdWRlZCBhbnl3aGVyZSBpbiB0aGUgcHJvZ3Jlc3MgYmFyIG91dHB1dAogICAgICAgICAgICAgICAgICB3aGljaCBpcyBub3QgdGhlIGNhc2UgYnkgZGVmYXVsdC4KICAgIDpwYXJhbSB1cGRhdGVfbWluX3N0ZXBzOiBSZW5kZXIgb25seSB3aGVuIHRoaXMgbWFueSB1cGRhdGVzIGhhdmUKICAgICAgICBjb21wbGV0ZWQuIFRoaXMgYWxsb3dzIHR1bmluZyBmb3IgdmVyeSBmYXN0IGl0ZXJhdG9ycy4KCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDguMAogICAgICAgIE91dHB1dCBpcyBzaG93biBldmVuIGlmIGV4ZWN1dGlvbiB0aW1lIGlzIGxlc3MgdGhhbiAwLjUgc2Vjb25kcy4KCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDguMAogICAgICAgIGBgaXRlbV9zaG93X2Z1bmNgYCBzaG93cyB0aGUgY3VycmVudCBpdGVtLCBub3QgdGhlIHByZXZpb3VzIG9uZS4KCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDguMAogICAgICAgIExhYmVscyBhcmUgZWNob2VkIGlmIHRoZSBvdXRwdXQgaXMgbm90IGEgVFRZLiBSZXZlcnRzIGEgY2hhbmdlCiAgICAgICAgaW4gNy4wIHRoYXQgcmVtb3ZlZCBhbGwgb3V0cHV0LgoKICAgIC4uIHZlcnNpb25hZGRlZDo6IDguMAogICAgICAgQWRkZWQgdGhlIGBgdXBkYXRlX21pbl9zdGVwc2BgIHBhcmFtZXRlci4KCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDQuMAogICAgICAgIEFkZGVkIHRoZSBgYGNv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IGRlZmF1bHQgdGhlIHN0eWxpbmcgaXMgc2VsZiBjb250YWluZWQgd2hpY2ggbWVhbnMgdGhhdCBhdCB0aGUgZW5kCiAgICBvZiB0aGUgc3RyaW5nIGEgcmVzZXQgY29kZSBpcyBpc3N1ZWQuICBUaGlzIGNhbiBiZSBwcmV2ZW50ZWQgYnkKICAgIHBhc3NpbmcgYGByZXNldD1GYWxzZWBgLgoKICAgIEV4YW1wbGVzOjoKCiAgICAgICAgY2xpY2suZWNobyhjbGljay5zdHlsZSgnSGVsbG8gV29ybGQhJywgZmc9J2dyZWVuJykpCiAgICAgICAgY2xpY2suZWNobyhjbGljay5zdHlsZSgnQVRURU5USU9OIScsIGJsaW5rPVRydWUpKQogICAgICAgIGNsaWNrLmVjaG8oY2xpY2suc3R5bGUoJ1NvbWUgdGhpbmdzJywgcmV2ZXJzZT1UcnVlLCBmZz0nY3lhbicpKQogICAgICAgIGNsaWNrLmVjaG8oY2xpY2suc3R5bGUoJ01vcmUgY29sb3JzJywgZmc9KDI1NSwgMTIsIDEyOCksIGJnPTExNykpCgogICAgU3VwcG9ydGVkIGNvbG9yIG5hbWVzOgoKICAgICogYGBibGFja2BgIChtaWdodCBiZSBhIGdyYXkpCiAgICAqIGBgcmVkYGAKICAgICogYGBncmVlbmBgCiAgICAqIGBgeWVsbG93YGAgKG1pZ2h0IGJlIGFuIG9yYW5nZSkKICAgICogYGBibHVlYGAKICAgICogYGBtYWdlbnRhYGAKICAgICogYGBjeWFuYGAKICAgICogYGB3aGl0ZWBgIChtaWdodCBiZSBsaWdodCBncmF5KQogICAgKiBgYGJyaWdodF9ibGFja2BgCiAgICAqIGBgYnJpZ2h0X3JlZGBgCiAgICAqIGBgYnJpZ2h0X2dyZWVuYGAKICAgICogYGBicmlnaHRfeWVsbG93YGAKICAgICogYGBicmlnaHRfYmx1ZWBgCiAgICAqIGBgYnJpZ2h0X21hZ2VudGFgYAogICAgKiBgYGJyaWdodF9jeWFuYGAKICAgICogYGBicmlnaHRfd2hpdGVgYAogICAgKiBgYHJlc2V0YGAgKHJlc2V0IHRoZSBjb2xvciBjb2RlIG9ubHkpCgogICAgSWYgdGhlIHRlcm1pbmFsIHN1cHBvcnRzIGl0LCBjb2xvciBtYXkgYWxzbyBiZSBzcGVjaWZpZWQgYXM6CgogICAgLSAgIEFuIGludGVnZXIgaW4gdGhlIGludGVydmFsIFswLCAyNTVdLiBUaGUgdGVybWluYWwgbXVzdCBzdXBwb3J0CiAgICAgICAgOC1iaXQvMjU2LWNvbG9yIG1vZGUuCiAgICAtICAgQW4gUkdCIHR1cGxlIG9mIHRocmVlIGludGVnZXJzIGluIFswLCAyNTVdLiBUaGUgdGVybWluYWwgbXVzdAogICAgICAgIHN1cHBvcnQgMjQtYml0L3RydWUtY29sb3IgbW9kZS4KCiAgICBTZWUgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQU5TSV9jb2xvciBhbmQKICAgIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL1hWaWxrYS84MzQ2NzI4IGZvciBtb3JlIGluZm9ybWF0aW9uLgoKICAgIDpwYXJhbSB0ZXh0OiB0aGUgc3RyaW5nIHRvIHN0eWxlIHdpdGggYW5zaSBjb2Rlcy4KICAgIDpwYXJhbSBmZzogaWYgcHJvdmlkZWQgdGhpcyB3aWxsIGJlY29tZSB0aGUgZm9yZWdyb3VuZCBjb2xvci4KICAgIDpwYXJhbSBiZzogaWYgcHJvdmlkZWQgdGhpcyB3aWxsIGJlY29tZSB0aGUgYmFja2dyb3VuZCBjb2xvci4KICAgIDpwYXJhbSBib2xkOiBpZiBwcm92aWRlZCB0aGlzIHdpbGwgZW5hYmxlIG9yIGRpc2FibGUgYm9sZCBtb2RlLgogICAgOnBhcmFtIGRpbTogaWYgcHJvdmlkZWQgdGhpcyB3aWxsIGVuYWJsZSBvciBkaXNhYmxlIGRpbSBtb2RlLiAgVGhpcyBpcwogICAgICAgICAgICAgICAgYmFkbHkgc3VwcG9ydGVkLgogICAgOnBhcmFtIHVuZGVybGluZTogaWYgcHJvdmlkZWQgdGhpcyB3aWxsIGVuYWJsZSBvciBkaXNhYmxlIHVuZGVybGluZS4KICAgIDpwYXJhbSBvdmVybGluZTogaWYgcHJvdmlkZWQgdGhpcyB3aWxsIGVuYWJsZSBvciBkaXNhYmxlIG92ZXJsaW5lLgogICAgOnBhcmFtIGl0YWxpYzogaWYgcHJvdmlkZWQgdGhpcyB3aWxsIGVuYWJsZSBvciBkaXNhYmxlIGl0YWxpYy4KICAgIDpwYXJhbSBibGluazogaWYgcHJvdmlkZWQgdGhpcyB3aWxsIGVuYWJsZSBvciBkaXNhYmxlIGJsaW5raW5nLgogICAgOnBhcmFtIHJldmVyc2U6IGlmIHByb3ZpZGVkIHRoaXMgd2lsbCBlbmFibGUgb3IgZGlzYWJsZSBpbnZlcnNlCiAgICAgICAgICAgICAgICAgICAgcmVuZGVyaW5nIChmb3JlZ3JvdW5kIGJlY29tZXMgYmFja2dyb3VuZCBhbmQgdGhlCiAgICAgICAgICAgICAgICAgICAgb3RoZXIgd2F5IHJvdW5kKS4KICAgIDpwYXJhbSBzdHJpa2V0aHJvdWdoOiBpZiBwcm92aWRlZCB0aGlzIHdpbGwgZW5hYmxlIG9yIGRpc2FibGUKICAgICAgICBzdHJpa2luZyB0aHJvdWdoIHRleHQuCiAgICA6cGFyYW0gcmVzZXQ6IGJ5IGRlZmF1bHQgYSByZXNldC1hbGwgY29kZSBpcyBhZGRlZCBhdCB0aGUgZW5kIG9mIHRoZQogICAgICAgICAgICAgICAgICBzdHJpbmcgd2hpY2ggbWVhbnMgdGhhdCBzdHlsZXMgZG8gbm90IGNhcnJ5IG92ZXIuICBUaGlzCiAgICAgICAgICAgICAgICAgIGNhbiBiZSBkaXNhYmxlZCB0byBjb21wb3NlIHN0eWxlcy4KCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDguMAogICAgICAgIEEgbm9uLXN0cmluZyBgYG1lc3NhZ2VgYCBpcyBjb252ZXJ0ZWQgdG8gYSBzdHJpbmcuCgogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiA4LjAKICAgICAgIEFkZGVkIHN1cHBvcnQgZm9yIDI1NiBhbmQgUkdCIGNvbG9yIGNvZGVzLgoKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogOC4wCiAgICAgICAgQWRkZWQgdGhlIGBgc3RyaWtldGhyb3VnaGBgLCBgYGl0YWxpY2BgLCBhbmQgYGBvdmVybGluZWBgCiAgICAgICAgcGFyYW1ldGVycy4KCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDcuMAogICAgICAgIEFkZGVkIHN1cHBvcnQgZm9yIGJyaWdodCBjb2xvcnMuCgogICAgLi4gdmVyc2lvbmFkZGVkOjogMi4wCiAgICB6Ahtb2gFteg5Vbmtub3duIGNvbG9yIE7pCgAAAHIDAAAA6RYAAADpAgAAAOkEAAAA6RgAAADpNQAAAOk3AAAA6QMAAADpFwAAAOkFAAAA6RkAAADpBwAAAOkbAAAA6QkAAADpHQAAAHJqAAAAKQhyRAAAAHJHAAAA2gZhcHBlbmRyqAAAANoIS2V5RXJyb3LaCVR5cGVFcnJvctoPX2Fuc2lfcmVzZXRfYWxsckUAAAApDXI8AAAAcqkAAAByqgAAAHKrAAAAcqwAAAByrQAAAHKuAAAAcq8AAABysAAAAHKxAAAAcrIAAAByLQAAANoEYml0c3I5AAAAcjkAAAByOgAAANoFc3R5bGXRAQAAc0IAAAAAWgoBCAIEAgQBAgEaAQwBFgIEAQIBHAEMARYCCAEaAQgBGgEKARoBCgEcAQoBHAEKARwBCgEcAQoBHAEKAQYBCgFyyAAAAHJVAAAAYwEAAAAAAAAAAAAAAAEAAAACAAAAQwAAAHMIAAAAdAB8AIMBUwApAWEOAQAAUmVtb3ZlcyBBTlNJIHN0eWxpbmcgaW5mb3JtYXRpb24gZnJvbSBhIHN0cmluZy4gIFVzdWFsbHkgaXQncyBub3QKICAgIG5lY2Vzc2FyeSB0byB1c2UgdGhpcyBmdW5jdGlvbiBhcyBDbGljaydzIGVjaG8gZnVuY3Rpb24gd2lsbAogICAgYXV0b21hdGljYWxseSByZW1vdmUgc3R5bGluZyBpZiBuZWNlc3NhcnkuCgogICAgLi4gdmVyc2lvbmFkZGVkOjogMi4wCgogICAgOnBhcmFtIHRleHQ6IHRoZSB0ZXh0IHRvIHJlbW92ZSBzdHlsZSBpbmZvcm1hdGlvbiBmcm9tLgogICAgcgUAAAApAXI8AAAAcjkAAAByOQAAAHI6AAAA2gd1bnN0eWxlUgIAAHMCAAAAAAlyyQAAACkH2gdtZXNzYWdlcpMAAAByWAAAAHJUAAAAcnAAAADaBnN0eWxlc3I3AAAAYwUAAAAAAAAAAAAAAAYAAAAHAAAASwAAAHM4AAAAfABkAXUBciZ0AHwAdAF0AmYCgwJzJnQDfABmAWkAfAWkAY4BfQB0BHwAfAF8AnwDfARkAo0FUwApA2HtAgAAVGhpcyBmdW5jdGlvbiBjb21iaW5lcyA6ZnVuYzpgZWNob2AgYW5kIDpmdW5jOmBzdHlsZWAgaW50byBvbmUKICAgIGNhbGwuICBBcyBzdWNoIHRoZSBmb2xsb3dpbmcgdHdvIGNhbGxzIGFyZSB0aGUgc2FtZTo6CgogICAgICAgIGNsaWNrLnNlY2hvKCdIZWxsbyBXb3JsZCEnLCBmZz0nZ3JlZW4nKQogICAgICAgIGNsaWNrLmVjaG8oY2xpY2suc3R5bGUoJ0hlbGxvIFdvcmxkIScsIGZnPSdncmVlbicpKQoKICAgIEFsbCBrZXl3b3JkIGFyZ3VtZW50cyBhcmUgZm9yd2FyZGVkIHRvIHRoZSB1bmRlcmx5aW5nIGZ1bmN0aW9ucwogICAgZGVwZW5kaW5nIG9uIHdoaWNoIG9uZSB0aGV5IGdvIHdpdGguCgogICAgTm9uLXN0cmluZyB0eXBlcyB3aWxsIGJlIGNvbnZlcnRlZCB0byA6Y2xhc3M6YHN0cmAuIEhvd2V2ZXIsCiAgICA6Y2xhc3M6YGJ5dGVzYCBhcmUgcGFzc2VkIGRpcmVjdGx5IHRvIDptZXRoOmBlY2hvYCB3aXRob3V0IGFwcGx5aW5nCiAgICBzdHlsZS4gSWYgeW91IHdhbnQgdG8gc3R5bGUgYnl0ZXMgdGhhdCByZXByZXNlbnQgdGV4dCwgY2FsbAogICAgOm1ldGg6YGJ5dGVzLmRlY29kZWAgZmlyc3QuCgogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiA4LjAKICAgICAgICBBIG5vbi1zdHJpbmcgYGBtZXNzYWdlYGAgaXMgY29udmVydGVkIHRvIGEgc3RyaW5nLiBCeXRlcyBhcmUKICAgICAgICBwYXNzZWQgdGhyb3VnaCB3aXRob3V0IHN0eWxlIGFwcGxpZWQuCgogICAgLi4gdmVyc2lvbmFkZGVkOjogMi4wCiAgICBOKQRykwAAAHJYAAAAclQAAABycAAAACkFckQAAADaBWJ5dGVz2glieXRlYXJyYXlyyAAAAHIOAAAAKQZyygAAAHKTAAAAclgAAAByVAAAAHJwAAAAcssAAAByOQAAAHI5AAAAcjoAAADaBXNlY2hvXgIAAHMGAAAAABwWARACcs4AAAD6BC50eHQpB3I8AAAA2gZlZGl0b3LaA2VudtoMcmVxdWlyZV9zYXZl2glleHRlbnNpb27aCGZpbGVuYW1lcjcAAABjBgAAAAAAAAAAAAAACAAAAAYAAABDAAAAczwAAABkAWQCbABtAX0GAQB8BnwBfAJ8A3wEZAONBH0HfAVkBHUAci58B6ACfAChAVMAfAegA3wFoQEBAGQEUwApBWHPBQAARWRpdHMgdGhlIGdpdmVuIHRleHQgaW4gdGhlIGRlZmluZWQgZWRpdG9yLiAgSWYgYW4gZWRpdG9yIGlzIGdpdmVuCiAgICAoc2hvdWxkIGJlIHRoZSBmdWxsIHBhdGggdG8gdGhlIGV4ZWN1dGFibGUgYnV0IHRoZSByZWd1bGFyIG9wZXJhdGluZwogICAgc3lzdGVtIHNlYXJjaCBwYXRoIGlzIHVzZWQgZm9yIGZpbmRpbmcgdGhlIGV4ZWN1dGFibGUpIGl0IG92ZXJyaWRlcwogICAgdGhlIGRldGVjdGVkIGVkaXRvci4gIE9wdGlvbmFsbHksIHNvbWUgZW52aXJvbm1lbnQgdmFyaWFibGVzIGNhbiBiZQogICAgdXNlZC4gIElmIHRoZSBlZGl0b3IgaXMgY2xvc2VkIHdpdGhvdXQgY2hhbmdlcywgYE5vbmVgIGlzIHJldHVybmVkLiAgSW4KICAgIGNhc2UgYSBmaWxlIGlzIGVkaXRlZCBkaXJlY3RseSB0aGUgcmV0dXJuIHZhbHVlIGlzIGFsd2F5cyBgTm9uZWAgYW5kCiAgICBgcmVxdWlyZV9zYXZlYCBhbmQgYGV4dGVuc2lvbmAgYXJlIGlnbm9yZWQuCgogICAgSWYgdGhlIGVkaXRvciBjYW5ub3QgYmUgb3BlbmVkIGEgOmV4YzpgVXNhZ2VFcnJvcmAgaXMgcmFpc2VkLgoKICAgIE5vdGUgZm9yIFdpbmRvd3M6IHRvIHNpbXBsaWZ5IGNyb3NzLXBsYXRmb3JtIHVzYWdlLCB0aGUgbmV3bGluZXMgYXJlCiAgICBhdXRvbWF0aWNhbGx5IGNvbnZlcnRlZCBmcm9tIFBPU0lYIHRvIFdpbmRvd3MgYW5kIHZpY2UgdmVyc2EuICBBcyBzdWNoLAogICAgdGhlIG1lc3NhZ2UgaGVyZSB3aWxsIGhhdmUgYGBcbmBgIGFzIG5ld2xpbmUgbWFya2Vycy4KCiAgICA6cGFyYW0gdGV4dDogdGhlIHRleHQgdG8gZWRpdC4KICAgIDpwYXJhbSBlZGl0b3I6IG9wdGlvbmFsbHkgdGhlIGVkaXRvciB0byB1c2UuICBEZWZhdWx0cyB0byBhdXRvbWF0aWMKICAgICAgICAgICAgICAgICAgIGRldGVjdGlvbi4KICAgIDpwYXJhbSBlbnY6IGVudmlyb25tZW50IHZhcmlhYmxlcyB0byBmb3J3YXJkIHRvIHRoZSBlZGl0b3IuCiAgICA6cGFyYW0gcmVxdWlyZV9zYXZlOiBpZiB0aGlzIGlzIHRydWUsIHRoZW4gbm90IHNhdmluZyBpbiB0aGUgZWRpdG9yCiAgICAgICAgICAgICAgICAgICAgICAgICB3aWxsIG1ha2UgdGhlIHJldHVybiB2YWx1ZSBiZWNvbWUgYE5vbmVgLgogICAgOnBhcmFtIGV4dGVuc2lvbjogdGhlIGV4dGVuc2lvbiB0byB0ZWxsIHRoZSBlZGl0b3IgYWJvdXQuICBUaGlzIGRlZmF1bHRzCiAgICAgICAgICAgICAgICAgICAgICB0byBgLnR4dGAgYnV0IGNoYW5naW5nIHRoaXMgbWlnaHQgY2hhbmdlIHN5bnRheAogICAgICAgICAgICAgICAgICAgICAgaGlnaGxpZ2h0aW5nLgogICAgOnBhcmFtIGZpbGVuYW1lOiBpZiBwcm92aWRlZCBpdCB3aWxsIGVkaXQgdGhpcyBmaWxlIGluc3RlYWQgb2YgdGhlCiAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGVkIHRleHQgY29udGVudHMuICBJdCB3aWxsIG5vdCB1c2UgYSB0ZW1wb3JhcnkKICAgICAgICAgICAgICAgICAgICAgZmlsZSBhcyBhbiBpbmRpcmVjdGlvbiBpbiB0aGF0IGNhc2UuCiAgICByAwAAACkB2gZFZGl0b3IpBHLQAAAActEAAABy0gAAAHLTAAAATikEcn4AAABy1QAAANoEZWRpdFoJZWRpdF9maWxlKQhyPAAAAHLQAAAActEAAABy0gAAAHLTAAAActQAAABy1QAAAFoCZWRyOQAAAHI5AAAAcjoAAABy1gAAAIACAABzDAAAAAAjDAIQAggBCgIKAXLWAAAAKQTaA3VybNoEd2FpdNoGbG9jYXRlcjcAAABjAwAAAAAAAAAAAAAABAAAAAUAAABDAAAAcxoAAABkAWQCbABtAX0DAQB8A3wAfAF8AmQDjQNTACkEYQAEAABUaGlzIGZ1bmN0aW9uIGxhdW5jaGVzIHRoZSBnaXZlbiBVUkwgKG9yIGZpbGVuYW1lKSBpbiB0aGUgZGVmYXVsdAogICAgdmlld2VyIGFwcGxpY2F0aW9uIGZvciB0aGlzIGZpbGUgdHlwZS4gIElmIHRoaXMgaXMgYW4gZXhlY3V0YWJsZSwgaXQKICAgIG1pZ2h0IGxhdW5jaCB0aGUgZXhlY3V0YWJsZSBpbiBhIG5ldyBzZXNzaW9uLiAgVGhlIHJldHVybiB2YWx1ZSBpcwogICAgdGhlIGV4aXQgY29kZSBvZiB0aGUgbGF1bmNoZWQgYXBwbGljYXRpb24uICBVc3VhbGx5LCBgYDBgYCBpbmRpY2F0ZXMKICAgIHN1Y2Nlc3MuCgogICAgRXhhbXBsZXM6OgoKICAgICAgICBjbGljay5sYXVuY2goJ2h0dHBzOi8vY2xpY2sucGFsbGV0c3Byb2plY3RzLmNvbS8nKQogICAgICAgIGNsaWNrLmxhdW5jaCgnL215L2Rvd25sb2FkZWQvZmlsZScsIGxvY2F0ZT1UcnVlKQoKICAgIC4uIHZlcnNpb25hZGRlZDo6IDIuMAoKICAgIDpwYXJhbSB1cmw6IFVSTCBvciBmaWxlbmFtZSBvZiB0aGUgdGhpbmcgdG8gbGF1bmNoLgogICAgOnBhcmFtIHdhaXQ6IFdhaXQgZm9yIHRoZSBwcm9ncmFtIHRvIGV4aXQgYmVmb3JlIHJldHVybmluZy4gVGhpcwogICAgICAgIG9ubHkgd29ya3MgaWYgdGhlIGxhdW5jaGVkIHByb2dyYW0gYmxvY2tzLiBJbiBwYXJ0aWN1bGFyLAogICAgICAgIGBgeGRnLW9wZW5gYCBvbiBMaW51eCBkb2VzIG5vdCBibG9jay4KICAgIDpwYXJhbSBsb2NhdGU6IGlmIHRoaXMgaXMgc2V0IHRvIGBUcnVlYCB0aGVuIGluc3RlYWQgb2YgbGF1bmNoaW5nIHRoZQogICAgICAgICAgICAgICAgICAg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