; | |
Object.defineProperty(exports, "__esModule", { value: true }); | |
exports.SignatureHelpTriggerKind = exports.InsertTextMode = exports.InsertTextFormat = exports.CodeActionKind = exports.TextDocumentSyncKind = exports.CompletionTriggerKind = exports.LanguageIdentifier = exports.CompletionItemKind = exports.CompletionItemTag = exports.MarkupKind = void 0; | |
/** | |
* Describes the content type that a client supports in various | |
* result literals like `Hover`, `ParameterInfo` or `CompletionItem`. | |
* | |
* Please note that `MarkupKinds` must not start with a `$`. This kinds | |
* are reserved for internal usage. | |
*/ | |
var MarkupKind; | |
(function (MarkupKind) { | |
/** | |
* Plain text is supported as a content format | |
*/ | |
MarkupKind["PlainText"] = "plaintext"; | |
/** | |
* Markdown is supported as a content format | |
*/ | |
MarkupKind["Markdown"] = "markdown"; | |
})(MarkupKind || (exports.MarkupKind = MarkupKind = {})); | |
/** | |
* Completion item tags are extra annotations that tweak the rendering of | |
* a completion item. | |
* | |
* @since 3.15.0 | |
*/ | |
var CompletionItemTag; | |
(function (CompletionItemTag) { | |
/** | |
* Render a completion as obsolete, usually using a strike-out. | |
*/ | |
CompletionItemTag[CompletionItemTag["Deprecated"] = 1] = "Deprecated"; | |
})(CompletionItemTag || (exports.CompletionItemTag = CompletionItemTag = {})); | |
/** | |
* The kind of a completion entry. | |
*/ | |
var CompletionItemKind; | |
(function (CompletionItemKind) { | |
CompletionItemKind[CompletionItemKind["Text"] = 1] = "Text"; | |
CompletionItemKind[CompletionItemKind["Method"] = 2] = "Method"; | |
CompletionItemKind[CompletionItemKind["Function"] = 3] = "Function"; | |
CompletionItemKind[CompletionItemKind["Constructor"] = 4] = "Constructor"; | |
CompletionItemKind[CompletionItemKind["Field"] = 5] = "Field"; | |
CompletionItemKind[CompletionItemKind["Variable"] = 6] = "Variable"; | |
CompletionItemKind[CompletionItemKind["Class"] = 7] = "Class"; | |
CompletionItemKind[CompletionItemKind["Interface"] = 8] = "Interface"; | |
CompletionItemKind[CompletionItemKind["Module"] = 9] = "Module"; | |
CompletionItemKind[CompletionItemKind["Property"] = 10] = "Property"; | |
CompletionItemKind[CompletionItemKind["Unit"] = 11] = "Unit"; | |
CompletionItemKind[CompletionItemKind["Value"] = 12] = "Value"; | |
CompletionItemKind[CompletionItemKind["Enum"] = 13] = "Enum"; | |
CompletionItemKind[CompletionItemKind["Keyword"] = 14] = "Keyword"; | |
CompletionItemKind[CompletionItemKind["Snippet"] = 15] = "Snippet"; | |
CompletionItemKind[CompletionItemKind["Color"] = 16] = "Color"; | |
CompletionItemKind[CompletionItemKind["File"] = 17] = "File"; | |
CompletionItemKind[CompletionItemKind["Reference"] = 18] = "Reference"; | |
CompletionItemKind[CompletionItemKind["Folder"] = 19] = "Folder"; | |
CompletionItemKind[CompletionItemKind["EnumMember"] = 20] = "EnumMember"; | |
CompletionItemKind[CompletionItemKind["Constant"] = 21] = "Constant"; | |
CompletionItemKind[CompletionItemKind["Struct"] = 22] = "Struct"; | |
CompletionItemKind[CompletionItemKind["Event"] = 23] = "Event"; | |
CompletionItemKind[CompletionItemKind["Operator"] = 24] = "Operator"; | |
CompletionItemKind[CompletionItemKind["TypeParameter"] = 25] = "TypeParameter"; | |
})(CompletionItemKind || (exports.CompletionItemKind = CompletionItemKind = {})); | |
/** | |
* Known language identifiers. | |
* https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocumentItem | |
*/ | |
var LanguageIdentifier; | |
(function (LanguageIdentifier) { | |
LanguageIdentifier["ABAP"] = "abap"; | |
LanguageIdentifier["WindowsBat"] = "bat"; | |
LanguageIdentifier["BibTeX"] = "bibtex"; | |
LanguageIdentifier["Clojure"] = "clojure"; | |
LanguageIdentifier["Coffeescript"] = "coffeescript"; | |
LanguageIdentifier["C"] = "c"; | |
LanguageIdentifier["CPlusPlus"] = "cpp"; | |
LanguageIdentifier["CSharp"] = "csharp"; | |
LanguageIdentifier["CSS"] = "css"; | |
LanguageIdentifier["Diff"] = "diff"; | |
LanguageIdentifier["Dart"] = "dart"; | |
LanguageIdentifier["Dockerfile"] = "dockerfile"; | |
LanguageIdentifier["Elixir"] = "elixir"; | |
LanguageIdentifier["Erlang"] = "erlang"; | |
LanguageIdentifier["FSharp"] = "fsharp"; | |
LanguageIdentifier["GitCommit"] = "git-commit"; | |
LanguageIdentifier["GitRebase"] = "git-rebase"; | |
LanguageIdentifier["Go"] = "go"; | |
LanguageIdentifier["Groovy"] = "groovy"; | |
LanguageIdentifier["Handlebars"] = "handlebars"; | |
LanguageIdentifier["HTML"] = "html"; | |
LanguageIdentifier["Ini"] = "ini"; | |
LanguageIdentifier["Java"] = "java"; | |
LanguageIdentifier["JavaScript"] = "javascript"; | |
LanguageIdentifier["JavaScriptReact"] = "javascriptreact"; | |
LanguageIdentifier["JSON"] = "json"; | |
LanguageIdentifier["LaTeX"] = "latex"; | |
LanguageIdentifier["Less"] = "less"; | |
LanguageIdentifier["Lua"] = "lua"; | |
LanguageIdentifier["Makefile"] = "makefile"; | |
LanguageIdentifier["Markdown"] = "markdown"; | |
LanguageIdentifier["ObjectiveC"] = "c"; | |
LanguageIdentifier["ObjectiveCPlusPlus"] = "cpp"; | |
LanguageIdentifier["Perl"] = "perl"; | |
LanguageIdentifier["Perl6"] = "perl6"; | |
LanguageIdentifier["PHP"] = "php"; | |
LanguageIdentifier["Powershell"] = "powershell"; | |
LanguageIdentifier["Pug"] = "jade"; | |
LanguageIdentifier["Python"] = "python"; | |
LanguageIdentifier["R"] = "r"; | |
LanguageIdentifier["Razor"] = "razor"; | |
LanguageIdentifier["Ruby"] = "ruby"; | |
LanguageIdentifier["Rust"] = "rust"; | |
LanguageIdentifier["SCSS"] = "scss"; | |
LanguageIdentifier["Sass"] = "syntax"; | |
LanguageIdentifier["Scala"] = "scala"; | |
LanguageIdentifier["ShaderLab"] = "shaderlab"; | |
LanguageIdentifier["Shell"] = "shellscript"; | |
LanguageIdentifier["SQL"] = "sql"; | |
LanguageIdentifier["Swift"] = "swift"; | |
LanguageIdentifier["TypeScript"] = "typescript"; | |
LanguageIdentifier["TypeScriptReact"] = "typescriptreact"; | |
LanguageIdentifier["TeX"] = "tex"; | |
LanguageIdentifier["VisualBasic"] = "vb"; | |
LanguageIdentifier["XML"] = "xml"; | |
LanguageIdentifier["XSL"] = "xsl"; | |
LanguageIdentifier["YAML"] = "yaml"; | |
})(LanguageIdentifier || (exports.LanguageIdentifier = LanguageIdentifier = {})); | |
/** | |
* How a completion was triggered | |
* https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_completion | |
*/ | |
var CompletionTriggerKind; | |
(function (CompletionTriggerKind) { | |
/** | |
* Completion was triggered by typing an identifier (24x7 code | |
* complete), manual invocation (e.g Ctrl+Space) or via API. | |
*/ | |
CompletionTriggerKind[CompletionTriggerKind["Invoked"] = 1] = "Invoked"; | |
/** | |
* Completion was triggered by a trigger character specified by | |
* the `triggerCharacters` properties of the | |
* `CompletionRegistrationOptions`. | |
*/ | |
CompletionTriggerKind[CompletionTriggerKind["TriggerCharacter"] = 2] = "TriggerCharacter"; | |
/** | |
* Completion was re-triggered as the current completion list is incomplete. | |
*/ | |
CompletionTriggerKind[CompletionTriggerKind["TriggerForIncompleteCompletions"] = 3] = "TriggerForIncompleteCompletions"; | |
})(CompletionTriggerKind || (exports.CompletionTriggerKind = CompletionTriggerKind = {})); | |
/** | |
* Defines how the host (editor) should sync document changes | |
* to the language server. | |
*/ | |
var TextDocumentSyncKind; | |
(function (TextDocumentSyncKind) { | |
/** | |
* Documents should not be synced at all. | |
*/ | |
TextDocumentSyncKind[TextDocumentSyncKind["None"] = 0] = "None"; | |
/** | |
* Documents are synced by always sending the full content | |
* of the document. | |
*/ | |
TextDocumentSyncKind[TextDocumentSyncKind["Full"] = 1] = "Full"; | |
/** | |
* Documents are synced by sending the full content on open. | |
* After that only incremental updates to the document are | |
* send. | |
*/ | |
TextDocumentSyncKind[TextDocumentSyncKind["Incremental"] = 2] = "Incremental"; | |
})(TextDocumentSyncKind || (exports.TextDocumentSyncKind = TextDocumentSyncKind = {})); | |
/** | |
* The kind of a code action. | |
* | |
* Kinds are a hierarchical list of identifiers separated by `.`, | |
* e.g. `"refactor.extract.function"`. | |
* | |
* The set of kinds is open and the client needs to announce the kinds it | |
* supports to the server during initialization. | |
*/ | |
var CodeActionKind; | |
(function (CodeActionKind) { | |
/** | |
* Empty kind. | |
*/ | |
CodeActionKind["Empty"] = ""; | |
/** | |
* Base kind for quickfix actions: 'quickfix'. | |
*/ | |
CodeActionKind["QuickFix"] = "quickfix"; | |
/** | |
* Base kind for refactoring actions: 'refactor'. | |
*/ | |
CodeActionKind["Refactor"] = "refactor"; | |
/** | |
* Base kind for refactoring extraction actions: 'refactor.extract'. | |
* | |
* Example extract actions: | |
* | |
* - Extract method | |
* - Extract function | |
* - Extract variable | |
* - Extract interface from class | |
* - ... | |
*/ | |
CodeActionKind["RefactorExtract"] = "refactor.extract"; | |
/** | |
* Base kind for refactoring inline actions: 'refactor.inline'. | |
* | |
* Example inline actions: | |
* | |
* - Inline function | |
* - Inline variable | |
* - Inline constant | |
* - ... | |
*/ | |
CodeActionKind["RefactorInline"] = "refactor.inline"; | |
/** | |
* Base kind for refactoring rewrite actions: 'refactor.rewrite'. | |
* | |
* Example rewrite actions: | |
* | |
* - Convert JavaScript function to class | |
* - Add or remove parameter | |
* - Encapsulate field | |
* - Make method static | |
* - Move method to base class | |
* - ... | |
*/ | |
CodeActionKind["RefactorRewrite"] = "refactor.rewrite"; | |
/** | |
* Base kind for source actions: `source`. | |
* | |
* Source code actions apply to the entire file. | |
*/ | |
CodeActionKind["Source"] = "source"; | |
/** | |
* Base kind for an organize imports source action `source.organizeImports`. | |
*/ | |
CodeActionKind["SourceOrganizeImports"] = "source.organizeImports"; | |
})(CodeActionKind || (exports.CodeActionKind = CodeActionKind = {})); | |
/** | |
* Defines whether the insert text in a completion item should be interpreted as | |
* plain text or a snippet. | |
*/ | |
var InsertTextFormat; | |
(function (InsertTextFormat) { | |
/** | |
* The primary text to be inserted is treated as a plain string. | |
*/ | |
InsertTextFormat[InsertTextFormat["PlainText"] = 1] = "PlainText"; | |
/** | |
* The primary text to be inserted is treated as a snippet. | |
* | |
* A snippet can define tab stops and placeholders with `$1`, `$2` | |
* and `${3:foo}`. `$0` defines the final tab stop, it defaults to | |
* the end of the snippet. Placeholders with equal identifiers are linked, | |
* that is typing in one will update others too. | |
*/ | |
InsertTextFormat[InsertTextFormat["Snippet"] = 2] = "Snippet"; | |
})(InsertTextFormat || (exports.InsertTextFormat = InsertTextFormat = {})); | |
/** | |
* How whitespace and indentation is handled during completion | |
* item insertion. | |
* | |
* @since 3.16.0 | |
*/ | |
var InsertTextMode; | |
(function (InsertTextMode) { | |
/** | |
* The insertion or replace strings is taken as it is. If the | |
* value is multi line the lines below the cursor will be | |
* inserted using the indentation defined in the string value. | |
* The client will not apply any kind of adjustments to the | |
* string. | |
*/ | |
InsertTextMode[InsertTextMode["asIs"] = 1] = "asIs"; | |
/** | |
* The editor adjusts leading whitespace of new lines so that | |
* they match the indentation up to the cursor of the line for | |
* which the item is accepted. | |
* | |
* Consider a line like this: <2tabs><cursor><3tabs>foo. Accepting a | |
* multi line completion item is indented using 2 tabs and all | |
* following lines inserted will be indented using 2 tabs as well. | |
*/ | |
InsertTextMode[InsertTextMode["adjustIndentation"] = 2] = "adjustIndentation"; | |
})(InsertTextMode || (exports.InsertTextMode = InsertTextMode = {})); | |
/** | |
* How a signature help was triggered. | |
* | |
* @since 3.15.0 | |
*/ | |
var SignatureHelpTriggerKind; | |
(function (SignatureHelpTriggerKind) { | |
/** | |
* Signature help was invoked manually by the user or by a command. | |
*/ | |
SignatureHelpTriggerKind[SignatureHelpTriggerKind["Invoked"] = 1] = "Invoked"; | |
/** | |
* Signature help was triggered by a trigger character. | |
*/ | |
SignatureHelpTriggerKind[SignatureHelpTriggerKind["TriggerCharacter"] = 2] = "TriggerCharacter"; | |
/** | |
* Signature help was triggered by the cursor moving or by the document | |
* content changing. | |
*/ | |
SignatureHelpTriggerKind[SignatureHelpTriggerKind["ContentChange"] = 3] = "ContentChange"; | |
})(SignatureHelpTriggerKind || (exports.SignatureHelpTriggerKind = SignatureHelpTriggerKind = {})); | |
// tslint:enable:enforce-name-casing | |
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dF9kb2N1bWVudF9ub2RlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZ2VuZmlsZXMvdGhpcmRfcGFydHkvY29sYWIvc291cmNlcy9sc3AvdGV4dF9kb2N1bWVudF9ub2RlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQXVOQTs7Ozs7O0dBTUc7QUFDSCxJQUFZLFVBVVg7QUFWRCxXQUFZLFVBQVU7SUFDcEI7O09BRUc7SUFDSCxxQ0FBdUIsQ0FBQTtJQUV2Qjs7T0FFRztJQUNILG1DQUFxQixDQUFBO0FBQ3ZCLENBQUMsRUFWVyxVQUFVLDBCQUFWLFVBQVUsUUFVckI7QUFrQkQ7Ozs7O0dBS0c7QUFDSCxJQUFZLGlCQUtYO0FBTEQsV0FBWSxpQkFBaUI7SUFDM0I7O09BRUc7SUFDSCxxRUFBYyxDQUFBO0FBQ2hCLENBQUMsRUFMVyxpQkFBaUIsaUNBQWpCLGlCQUFpQixRQUs1QjtBQUVEOztHQUVHO0FBQ0gsSUFBWSxrQkEwQlg7QUExQkQsV0FBWSxrQkFBa0I7SUFDNUIsMkRBQVEsQ0FBQTtJQUNSLCtEQUFVLENBQUE7SUFDVixtRUFBWSxDQUFBO0lBQ1oseUVBQWUsQ0FBQTtJQUNmLDZEQUFTLENBQUE7SUFDVCxtRUFBWSxDQUFBO0lBQ1osNkRBQVMsQ0FBQTtJQUNULHFFQUFhLENBQUE7SUFDYiwrREFBVSxDQUFBO0lBQ1Ysb0VBQWEsQ0FBQTtJQUNiLDREQUFTLENBQUE7SUFDVCw4REFBVSxDQUFBO0lBQ1YsNERBQVMsQ0FBQTtJQUNULGtFQUFZLENBQUE7SUFDWixrRUFBWSxDQUFBO0lBQ1osOERBQVUsQ0FBQTtJQUNWLDREQUFTLENBQUE7SUFDVCxzRUFBYyxDQUFBO0lBQ2QsZ0VBQVcsQ0FBQTtJQUNYLHdFQUFlLENBQUE7SUFDZixvRUFBYSxDQUFBO0lBQ2IsZ0VBQVcsQ0FBQTtJQUNYLDhEQUFVLENBQUE7SUFDVixvRUFBYSxDQUFBO0lBQ2IsOEVBQWtCLENBQUE7QUFDcEIsQ0FBQyxFQTFCVyxrQkFBa0Isa0NBQWxCLGtCQUFrQixRQTBCN0I7QUEwREQ7OztHQUdHO0FBQ0gsSUFBWSxrQkEwRFg7QUExREQsV0FBWSxrQkFBa0I7SUFDNUIsbUNBQWEsQ0FBQTtJQUNiLHdDQUFrQixDQUFBO0lBQ2xCLHVDQUFpQixDQUFBO0lBQ2pCLHlDQUFtQixDQUFBO0lBQ25CLG1EQUE2QixDQUFBO0lBQzdCLDZCQUFPLENBQUE7SUFDUCx1Q0FBaUIsQ0FBQTtJQUNqQix1Q0FBaUIsQ0FBQTtJQUNqQixpQ0FBVyxDQUFBO0lBQ1gsbUNBQWEsQ0FBQTtJQUNiLG1DQUFhLENBQUE7SUFDYiwrQ0FBeUIsQ0FBQTtJQUN6Qix1Q0FBaUIsQ0FBQTtJQUNqQix1Q0FBaUIsQ0FBQTtJQUNqQix1Q0FBaUIsQ0FBQTtJQUNqQiw4Q0FBd0IsQ0FBQTtJQUN4Qiw4Q0FBd0IsQ0FBQTtJQUN4QiwrQkFBUyxDQUFBO0lBQ1QsdUNBQWlCLENBQUE7SUFDakIsK0NBQXlCLENBQUE7SUFDekIsbUNBQWEsQ0FBQTtJQUNiLGlDQUFXLENBQUE7SUFDWCxtQ0FBYSxDQUFBO0lBQ2IsK0NBQXlCLENBQUE7SUFDekIseURBQW1DLENBQUE7SUFDbkMsbUNBQWEsQ0FBQTtJQUNiLHFDQUFlLENBQUE7SUFDZixtQ0FBYSxDQUFBO0lBQ2IsaUNBQVcsQ0FBQTtJQUNYLDJDQUFxQixDQUFBO0lBQ3JCLDJDQUFxQixDQUFBO0lBQ3JCLHNDQUFnQixDQUFBO0lBQ2hCLGdEQUEwQixDQUFBO0lBQzFCLG1DQUFhLENBQUE7SUFDYixxQ0FBZSxDQUFBO0lBQ2YsaUNBQVcsQ0FBQTtJQUNYLCtDQUF5QixDQUFBO0lBQ3pCLGtDQUFZLENBQUE7SUFDWix1Q0FBaUIsQ0FBQTtJQUNqQiw2QkFBTyxDQUFBO0lBQ1AscUNBQWUsQ0FBQTtJQUNmLG1DQUFhLENBQUE7SUFDYixtQ0FBYSxDQUFBO0lBQ2IsbUNBQWEsQ0FBQTtJQUNiLHFDQUFlLENBQUE7SUFDZixxQ0FBZSxDQUFBO0lBQ2YsNkNBQXVCLENBQUE7SUFDdkIsMkNBQXFCLENBQUE7SUFDckIsaUNBQVcsQ0FBQTtJQUNYLHFDQUFlLENBQUE7SUFDZiwrQ0FBeUIsQ0FBQTtJQUN6Qix5REFBbUMsQ0FBQTtJQUNuQyxpQ0FBVyxDQUFBO0lBQ1gsd0NBQWtCLENBQUE7SUFDbEIsaUNBQVcsQ0FBQTtJQUNYLGlDQUFXLENBQUE7SUFDWCxtQ0FBYSxDQUFBO0FBQ2YsQ0FBQyxFQTFEVyxrQkFBa0Isa0NBQWxCLGtCQUFrQixRQTBEN0I7QUF1TEQ7OztHQUdHO0FBQ0gsSUFBWSxxQkFrQlg7QUFsQkQsV0FBWSxxQkFBcUI7SUFDL0I7OztPQUdHO0lBQ0gsdUVBQVcsQ0FBQTtJQUVYOzs7O09BSUc7SUFDSCx5RkFBb0IsQ0FBQTtJQUVwQjs7T0FFRztJQUNILHVIQUFtQyxDQUFBO0FBQ3JDLENBQUMsRUFsQlcscUJBQXFCLHFDQUFyQixxQkFBcUIsUUFrQmhDO0FBb1REOzs7R0FHRztBQUNILElBQVksb0JBa0JYO0FBbEJELFdBQVksb0JBQW9CO0lBQzlCOztPQUVHO0lBQ0gsK0RBQVEsQ0FBQTtJQUVSOzs7T0FHRztJQUNILCtEQUFRLENBQUE7SUFFUjs7OztPQUlHO0lBQ0gsNkVBQWUsQ0FBQTtBQUNqQixDQUFDLEVBbEJXLG9CQUFvQixvQ0FBcEIsb0JBQW9CLFFBa0IvQjtBQW1RRDs7Ozs7Ozs7R0FRRztBQUNILElBQVksY0FtRVg7QUFuRUQsV0FBWSxjQUFjO0lBRXhCOztPQUVHO0lBQ0gsNEJBQVUsQ0FBQTtJQUVWOztPQUVHO0lBQ0gsdUNBQXFCLENBQUE7SUFFckI7O09BRUc7SUFDSCx1Q0FBcUIsQ0FBQTtJQUVyQjs7Ozs7Ozs7OztPQVVHO0lBQ0gsc0RBQW9DLENBQUE7SUFFcEM7Ozs7Ozs7OztPQVNHO0lBQ0gsb0RBQWtDLENBQUE7SUFFbEM7Ozs7Ozs7Ozs7O09BV0c7SUFDSCxzREFBb0MsQ0FBQTtJQUVwQzs7OztPQUlHO0lBQ0gsbUNBQWlCLENBQUE7SUFFakI7O09BRUc7SUFDSCxrRUFBZ0QsQ0FBQTtBQUNsRCxDQUFDLEVBbkVXLGNBQWMsOEJBQWQsY0FBYyxRQW1FekI7QUEwRUQ7OztHQUdHO0FBQ0gsSUFBWSxnQkFlWDtBQWZELFdBQVksZ0JBQWdCO0lBQzFCOztPQUVHO0lBQ0gsaUVBQWEsQ0FBQTtJQUViOzs7Ozs7O09BT0c7SUFDSCw2REFBVyxDQUFBO0FBQ2IsQ0FBQyxFQWZXLGdCQUFnQixnQ0FBaEIsZ0JBQWdCLFFBZTNCO0FBd0JEOzs7OztHQUtHO0FBQ0gsSUFBWSxjQW9CWDtBQXBCRCxXQUFZLGNBQWM7SUFDeEI7Ozs7OztPQU1HO0lBQ0gsbURBQVEsQ0FBQTtJQUVSOzs7Ozs7OztPQVFHO0lBQ0gsNkVBQXFCLENBQUE7QUFDdkIsQ0FBQyxFQXBCVyxjQUFjLDhCQUFkLGNBQWMsUUFvQnpCO0FBbU5EOzs7O0dBSUc7QUFDSCxJQUFZLHdCQWNYO0FBZEQsV0FBWSx3QkFBd0I7SUFDbEM7O09BRUc7SUFDSCw2RUFBVyxDQUFBO0lBQ1g7O09BRUc7SUFDSCwrRkFBb0IsQ0FBQTtJQUNwQjs7O09BR0c7SUFDSCx5RkFBaUIsQ0FBQTtBQUNuQixDQUFDLEVBZFcsd0JBQXdCLHdDQUF4Qix3QkFBd0IsUUFjbkM7QUFvU0Qsb0NBQW9DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgcHJvdG9jb2wgZnJvbSAnLi9wcm90b2NvbF9ub2RlJztcbmltcG9ydCAqIGFzIHdvcmtzcGFjZSBmcm9tICcuL3dvcmtzcGFjZV9ub2RlJztcblxuLy8gdHNsaW50OmRpc2FibGU6ZW5mb3JjZS1uYW1lLWNhc2luZ1xuXG4vKipcbiAqIFRleHQgZG9jdW1lbnQgc3BlY2lmaWMgY2xpZW50IGNhcGFiaWxpdGllcy5cbiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIFRleHREb2N1bWVudENsaWVudENhcGFiaWxpdGllcyB7XG4gIHN5bmNocm9uaXphdGlvbj86IFRleHREb2N1bWVudFN5bmNDbGllbnRDYXBhYmlsaXRpZXM7XG5cbiAgLyoqXG4gICAqIENhcGFiaWxpdGllcyBzcGVjaWZpYyB0byB0aGUgYHRleHREb2N1bWVudC9jb21wbGV0aW9uYCByZXF1ZXN0LlxuICAgKi9cbiAgY29tcGxldGlvbj86IENvbXBsZXRpb25DbGllbnRDYXBhYmlsaXRpZXM7XG5cbiAgLyoqXG4gICAqIENhcGFiaWxpdGllcyBzcGVjaWZpYyB0byB0aGUgYHRleHREb2N1bWVudC9ob3ZlcmAgcmVxdWVzdC5cbiAgICovXG4gIGhvdmVyPzogSG92ZXJDbGllbnRDYXBhYmlsaXRpZXM7XG5cbiAgLyoqXG4gICAqIENhcGFiaWxpdGllcyBzcGVjaWZpYyB0byB0aGUgYHRleHREb2N1bWVudC9zaWduYXR1cmVIZWxwYCByZXF1ZXN0LlxuICAgKi9cbiAgc2lnbmF0dXJlSGVscD86IFNpZ25hdHVyZUhlbHBDbGllbnRDYXBhYmlsaXRpZXM7XG5cbiAgLyoqXG4gICAqIENhcGFiaWxpdGllcyBzcGVjaWZpYyB0byB0aGUgYHRleHREb2N1bWVudC9kZWNsYXJhdGlvbmAgcmVxdWVzdC5cbiAgICpcbiAgICogQHNpbmNlIDMuMTQuMFxuICAgKi9cbiAgZGVjbGFyYXRpb24/OiBEZWNsYXJhdGlvbkNsaWVudENhcGFiaWxpdGllcztcblxuICAvKipcbiAgICogQ2FwYWJpbGl0aWVzIHNwZWNpZmljIHRvIHRoZSBgdGV4dERvY3VtZW50L2RlZmluaXRpb25gIHJlcXVlc3QuXG4gICAqL1xuICBkZWZpbml0aW9uPzogRGVmaW5pdGlvbkNsaWVudENhcGFiaWxpdGllcztcblxuICAvKipcbiAgICogQ2FwYWJpbGl0aWVzIHNwZWNpZmljIHRvIHRoZSBgdGV4dERvY3VtZW50L3R5cGVEZWZpbml0aW9uYCByZXF1ZXN0LlxuICAgKlxuICAgKiBAc2luY2UgMy42LjBcbiAgICovXG4gIHR5cGVEZWZpbml0aW9uPzogVHlwZURlZmluaXRpb25DbGllbnRDYXBhYmlsaXRpZXM7XG5cbiAgLyoqXG4gICAqIENhcGFiaWxpdGllcyBzcGVjaWZpYyB0byB0aGUgYHRleHREb2N1bWVudC9pbXBsZW1lbnRhdGlvbmAgcmVxdWVzdC5cbiAgICpcbiAgICogQHNpbmNlIDMuNi4wXG4gICAqL1xuICBpbXBsZW1lbnRhdGlvbj86IEltcGxlbWVudGF0aW9uQ2xpZW50Q2FwYWJpbGl0aWVzO1xuXG4gIC8qKlxuICAgKiBDYXBhYmlsaXRpZXMgc3BlY2lmaWMgdG8gdGhlIGB0ZXh0RG9jdW1lbnQvcmVmZXJlbmNlc2AgcmVxdWVzdC5cbiAgICovXG4gIHJlZmVyZW5jZXM/OiBSZWZlcmVuY2VDbGllbnRDYXBhYmlsaXRpZXM7XG5cbiAgLyoqXG4gICAqIENhcGFiaWxpdGllcyBzcGVjaWZpYyB0byB0aGUgYHRleHREb2N1bWVudC9kb2N1bWVudEhpZ2hsaWdodGAgcmVxdWVzdC5cbiAgICovXG4gIGRvY3VtZW50SGlnaGxpZ2h0PzogRG9jdW1lbnRIaWdobGlnaHRDbGllbnRDYXBhYmlsaXRpZXM7XG5cbiAgLyoqXG4gICAqIENhcGFiaWxpdGllcyBzcGVjaWZpYyB0byB0aGUgYHRleHREb2N1bWVudC9kb2N1bWVudFN5bWJvbGAgcmVxdWVzdC5cbiAgICovXG4gIGRvY3VtZW50U3ltYm9sPzogRG9jdW1lbnRTeW1ib2xDbGllbnRDYXBhYmlsaXRpZXM7XG5cbiAgLyoqXG4gICAqIENhcGFiaWxpdGllcyBzcGVjaWZpYyB0byB0aGUgYHRleHREb2N1bWVudC9jb2RlQWN0aW9uYCByZXF1ZXN0LlxuICAgKi9cbiAgY29kZUFjdGlvbj86IENvZGVBY3Rpb25DbGllbnRDYXBhYmlsaXRpZXM7XG5cbiAgLyoqXG4gICAqIENhcGFiaWxpdGllcyBzcGVjaWZpYyB0byB0aGUgYHRleHREb2N1bWVudC9jb2RlTGVuc2AgcmVxdWVzdC5cbiAgICovXG4gIGNvZGVMZW5zPzogQ29kZUxlbnNDbGllbnRDYXBhYmlsaXRpZXM7XG5cbiAgLyoqXG4gICAqIENhcGFiaWxpdGllcyBzcGVjaWZpYyB0byB0aGUgYHRleHREb2N1bWVudC9kb2N1bWVudExpbmtgIHJlcXVlc3QuXG4gICAqL1xuICBkb2N1bWVudExpbms/OiBEb2N1bWVudExpbmtDbGllbnRDYXBhYmlsaXRpZXM7XG5cbiAgLyoqXG4gICAqIENhcGFiaWxpdGllcyBzcGVjaWZpYyB0byB0aGUgYHRleHREb2N1bWVudC9kb2N1bWVudENvbG9yYCBhbmQgdGhlXG4gICAqIGB0ZXh0RG9jdW1lbnQvY29sb3JQcmVzZW50YXRpb25gIHJlcXVlc3QuXG4gICAqXG4gICAqIEBzaW5jZSAzLjYuMFxuICAgKi9cbiAgY29sb3JQcm92aWRlcj86IERvY3VtZW50Q29sb3JDbGllbnRDYXBhYmlsaXRpZXM7XG5cbiAgLyoqXG4gICAqIENhcGFiaWxpdGllcyBzcGVjaWZpYyB0byB0aGUgYHRleHREb2N1bWVudC9mb3JtYXR0aW5nYCByZXF1ZXN0LlxuICAgKi9cbiAgZm9ybWF0dGluZz86IERvY3VtZW50Rm9ybWF0dGluZ0NsaWVudENhcGFiaWxpdGllcztcblxuICAvKipcbiAgICogQ2FwYWJpbGl0aWVzIHNwZWNpZmljIHRvIHRoZSBgdGV4dERvY3VtZW50L3JhbmdlRm9ybWF0dGluZ2AgcmVxdWVzdC5cbiAgICovXG4gIHJhbmdlRm9ybWF0dGluZz86IERvY3VtZW50UmFuZ2VGb3JtYXR0aW5nQ2xpZW50Q2FwYWJpbGl0aWVzO1xuXG4gIC8qKlxuICAgKiByZXF1ZXN0LlxuICAgKiBDYXBhYmlsaXRpZXMgc3BlY2lmaWMgdG8gdGhlIGB0ZXh0RG9jdW1lbnQvb25UeXBlRm9ybWF0dGluZ2AgcmVxdWVzdC5cbiAgICovXG4gIG9uVHlwZUZvcm1hdHRpbmc/OiBEb2N1bWVudE9uVHlwZUZvcm1hdHRpbmdDbGllbnRDYXBhYmlsaXRpZXM7XG5cbiAgLyoqXG4gICAqIENhcGFiaWxpdGllcyBzcGVjaWZpYyB0byB0aGUgYHRleHREb2N1bWVudC9yZW5hbWVgIHJlcXVlc3QuXG4gICAqL1xuICByZW5hbWU/OiBSZW5hbWVDbGllbnRDYXBhYmlsaXRpZXM7XG5cbiAgLyoqXG4gICAqIENhcGFiaWxpdGllcyBzcGVjaWZpYyB0byB0aGUgYHRleHREb2N1bWVudC9wdWJsaXNoRGlhZ25vc3RpY3NgXG4gICAqIG5vdGlmaWNhdGlvbi5cbiAgICovXG4gIHB1Ymxpc2hEaWFnbm9zdGljcz86IFB1Ymxpc2hEaWFnbm9zdGljc0NsaWVudENhcGFiaWxpdGllcztcblxuICAvKipcbiAgICogQ2FwYWJpbGl0aWVzIHNwZWNpZmljIHRvIHRoZSBgdGV4dERvY3VtZW50L2ZvbGRpbmdSYW5nZWAgcmVxdWVzdC5cbiAgICpcbiAgICogQHNpbmNlIDMuMTAuMFxuICAgKi9cbiAgZm9sZGluZ1JhbmdlPzogRm9sZGluZ1JhbmdlQ2xpZW50Q2FwYWJpbGl0aWVzO1xuXG4gIC8qKlxuICAgKiBDYXBhYmlsaXRpZXMgc3BlY2lmaWMgdG8gdGhlIGB0ZXh0RG9jdW1lbnQvc2VsZWN0aW9uUmFuZ2VgIHJlcXVlc3QuXG4gICAqXG4gICAqIEBzaW5jZSAzLjE1LjBcbiAgICovXG4gIHNlbGVjdGlvblJhbmdlPzogU2VsZWN0aW9uUmFuZ2VDbGllbnRDYXBhYmlsaXRpZXM7XG59XG5cbi8qKlxuICogaHR0cHM6Ly9taWNyb3NvZnQuZ2l0aHViLmlvL2xhbmd1YWdlLXNlcnZlci1wcm90b2NvbC9zcGVjaWZpY2F0aW9ucy9zcGVjaWZpY2F0aW9uLWN1cnJlbnQvI3RleHREb2N1bWVudF9jb21wbGV0aW9uXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBDb21wbGV0aW9uQ2xpZW50Q2FwYWJpbGl0aWVzIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgY29tcGxldGlvbiBzdXBwb3J0cyBkeW5hbWljIHJlZ2lzdHJhdGlvbi5cbiAgICovXG4gIGR5bmFtaWNSZWdpc3RyYXRpb24/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgY2xpZW50IHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgYENvbXBsZXRpb25JdGVtYCBzcGVjaWZpY1xuICAgKiBjYXBhYmlsaXRpZXMuXG4gICAqL1xuICBjb21wbGV0aW9uSXRlbT86IHtcbiAgICAvKipcbiAgICAgKiBDbGllbnQgc3VwcG9ydHMgc25pcHBldHMgYXMgaW5zZXJ0IHRleHQuXG4gICAgICpcbiAgICAgKiBBIHNuaXBwZXQgY2FuIGRlZmluZSB0YWIgc3RvcHMgYW5kIHBsYWNlaG9sZGVycyB3aXRoIGAkMWAsIGAkMmBcbiAgICAgKiBhbmQgYCR7Mzpmb299YC4gYCQwYCBkZWZpbmVzIHRoZSBmaW5hbCB0YWIgc3RvcCwgaXQgZGVmYXVsdHMgdG9cbiAgICAgKiB0aGUgZW5kIG9mIHRoZSBzbmlwcGV0LlxuICAgICAqIFBsYWNlaG9sZGVycyB3aXRoIGVxdWFsIGlkZW50aWZpZXJzIGFyZSBsaW5rZWQsIHNvIHRoYXQgdHlwaW5nIGluXG4gICAgICogb25lIHdpbGwgdXBkYXRlIG90aGVycyBhcyB3ZWxsLlxuICAgICAqL1xuICAgIHNuaXBwZXRTdXBwb3J0PzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIENsaWVudCBzdXBwb3J0cyBjb21taXQgY2hhcmFjdGVycyBvbiBhIGNvbXBsZXRpb24gaXRlbS5cbiAgICAgKi9cbiAgICBjb21taXRDaGFyYWN0ZXJzU3VwcG9ydD86IGJvb2xlYW5cblxuICAvKipcbiAgICogQ2xpZW50IHN1cHBvcnRzIHRoZSBmb2xsb3cgY29udGVudCBmb3JtYXRzIGZvciB0aGUgZG9jdW1lbnRhdGlvblxuICAgKiBwcm9wZXJ0eS4gVGhlIG9yZGVyIGRlc2NyaWJlcyB0aGUgcHJlZmVycmVkIGZvcm1hdCBvZiB0aGUgY2xpZW50LlxuICAgKi9cbiAgICBkb2N1bWVudGF0aW9uRm9ybWF0PzogTWFya3VwS2luZFtdO1xuXG4gICAgLyoqXG4gICAgICogQ2xpZW50IHN1cHBvcnRzIHRoZSBkZXByZWNhdGVkIHByb3BlcnR5IG9uIGEgY29tcGxldGlvbiBpdGVtLlxuICAgICAqL1xuICAgIGRlcHJlY2F0ZWRTdXBwb3J0PzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIENsaWVudCBzdXBwb3J0cyB0aGUgcHJlc2VsZWN0IHByb3BlcnR5IG9uIGEgY29tcGxldGlvbiBpdGVtLlxuICAgICAqL1xuICAgIHByZXNlbGVjdFN1cHBvcnQ/OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogQ2xpZW50IHN1cHBvcnRzIHRoZSB0YWcgcHJvcGVydHkgb24gYSBjb21wbGV0aW9uIGl0ZW0uXG4gICAgICogQ2xpZW50cyBzdXBwb3J0aW5nIHRhZ3MgaGF2ZSB0byBoYW5kbGUgdW5rbm93biB0YWdzIGdyYWNlZnVsbHkuXG4gICAgICogQ2xpZW50cyBlc3BlY2lhbGx5IG5lZWQgdG8gcHJlc2VydmUgdW5rbm93biB0YWdzIHdoZW4gc2VuZGluZ1xuICAgICAqIGEgY29tcGxldGlvbiBpdGVtIGJhY2sgdG8gdGhlIHNlcnZlciBpbiBhIHJlc29sdmUgY2FsbC5cbiAgICAgKlxuICAgICAqIEBzaW5jZSAzLjE1LjBcbiAgICAgKi9cbiAgICB0YWdTdXBwb3J0Pzoge1xuICAgICAgLyoqXG4gICAgICAgKiBUaGUgdGFncyBzdXBwb3J0ZWQgYnkgdGhlIGNsaWVudC5cbiAgICAgICAqL1xuICAgICAgdmFsdWVTZXQ6IENvbXBsZXRpb25JdGVtVGFnW11cbiAgICB9XG4gIH07XG5cbiAgICBjb21wbGV0aW9uSXRlbUtpbmQ/OiB7XG4gICAgICAvKipcbiAgICAgICAqIFRoZSBjb21wbGV0aW9uIGl0ZW0ga2luZCB2YWx1ZXMgdGhlIGNsaWVudCBzdXBwb3J0cy4gV2hlbiB0aGlzXG4gICAgICAgKiBwcm9wZXJ0eSBleGlzdHMgdGhlIGNsaWVudCBhbHNvIGd1YXJhbnRlZXMgdGhhdCBpdCB3aWxsXG4gICAgICAgKiBoYW5kbGUgdmFsdWVzIG91dHNpZGUgaXRzIHNldCBncmFjZWZ1bGx5IGFuZCBmYWxscyBiYWNrXG4gICAgICAgKiB0byBhIGRlZmF1bHQgdmFsdWUgd2hlbiB1bmtub3duLlxuICAgICAgICpcbiAgICAgICAqIElmIHRoaXMgcHJvcGVydHkgaXMgbm90IHByZXNlbnQgdGhlIGNsaWVudCBvbmx5IHN1cHBvcnRzXG4gICAgICAgKiB0aGUgY29tcGxldGlvbiBpdGVtcyBraW5kcyBmcm9tIGBUZXh0YCB0byBgUmVmZXJlbmNlYCBhcyBkZWZpbmVkIGluXG4gICAgICAgKiB0aGUgaW5pdGlhbCB2ZXJzaW9uIG9mIHRoZSBwcm90b2NvbC5cbiAgICAgICAqL1xuICAgICAgdmFsdWVTZXQ/OiBDb21wbGV0aW9uSXRlbUtpbmRbXTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNsaWVudCBzdXBwb3J0cyB0byBzZW5kIGFkZGl0aW9uYWwgY29udGV4dCBpbmZvcm1hdGlvbiBmb3IgYVxuICAgICAqIGB0ZXh0RG9jdW1lbnQvY29tcGxldGlvbmAgcmVxdWVzdC5cbiAgICAgKi9cbiAgICBjb250ZXh0U3VwcG9ydD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogRGVzY3JpYmVzIHRoZSBjb250ZW50IHR5cGUgdGhhdCBhIGNsaWVudCBzdXBwb3J0cyBpbiB2YXJpb3VzXG4gKiByZXN1bHQgbGl0ZXJhbHMgbGlrZSBgSG92ZXJgLCBgUGFyYW1ldGVySW5mb2Agb3IgYENvbXBsZXRpb25JdGVtYC5cbiAqXG4gKiBQbGVhc2Ugbm90ZSB0aGF0IGBNYXJrdXBLaW5kc2AgbXVzdCBub3Qgc3RhcnQgd2l0aCBhIGAkYC4gVGhpcyBraW5kc1xuICogYXJlIHJlc2VydmVkIGZvciBpbnRlcm5hbCB1c2FnZS5cbiAqL1xuZXhwb3J0IGVudW0gTWFya3VwS2luZCB7XG4gIC8qKlxuICAgKiBQbGFpbiB0ZXh0IGlzIHN1cHBvcnRlZCBhcyBhIGNvbnRlbnQgZm9ybWF0XG4gICAqL1xuICBQbGFpblRleHQgPSAncGxhaW50ZXh0JyxcblxuICAvKipcbiAgICogTWFya2Rvd24gaXMgc3VwcG9ydGVkIGFzIGEgY29udGVudCBmb3JtYXRcbiAgICovXG4gIE1hcmtkb3duID0gJ21hcmtkb3duJyxcbn1cblxuLyoqXG4gKiBodHRwczovL21pY3Jvc29mdC5naXRodWIuaW8vbGFuZ3VhZ2Utc2VydmVyLXByb3RvY29sL3NwZWNpZmljYXRpb25zL3NwZWNpZmljYXRpb24tY3VycmVudC8jdGV4dERvY3VtZW50X2hvdmVyXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBIb3ZlckNsaWVudENhcGFiaWxpdGllcyB7XG4gICAgLyoqXG4gICAgICogV2hldGhlciBob3ZlciBzdXBwb3J0cyBkeW5hbWljIHJlZ2lzdHJhdGlvbi5cbiAgICAgKi9cbiAgICBkeW5hbWljUmVnaXN0cmF0aW9uPzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIENsaWVudCBzdXBwb3J0cyB0aGUgZm9sbG93IGNvbnRlbnQgZm9ybWF0cyBmb3IgdGhlIGNvbnRlbnRcbiAgICAgKiBwcm9wZXJ0eS4gVGhlIG9yZGVyIGRlc2NyaWJlcyB0aGUgcHJlZmVycmVkIGZvcm1hdCBvZiB0aGUgY2xpZW50LlxuICAgICAqL1xuICAgIGNvbnRlbnRGb3JtYXQ/OiBNYXJrdXBLaW5kW107XG59XG5cbi8qKlxuICogQ29tcGxldGlvbiBpdGVtIHRhZ3MgYXJlIGV4dHJhIGFubm90YXRpb25zIHRoYXQgdHdlYWsgdGhlIHJlbmRlcmluZyBvZlxuICogYSBjb21wbGV0aW9uIGl0ZW0uXG4gKlxuICogQHNpbmNlIDMuMTUuMFxuICovXG5leHBvcnQgZW51bSBDb21wbGV0aW9uSXRlbVRhZyB7XG4gIC8qKlxuICAgKiBSZW5kZXIgYSBjb21wbGV0aW9uIGFzIG9ic29sZXRlLCB1c3VhbGx5IHVzaW5nIGEgc3RyaWtlLW91dC5cbiAgICovXG4gIERlcHJlY2F0ZWQgPSAxLFxufVxuXG4vKipcbiAqIFRoZSBraW5kIG9mIGEgY29tcGxldGlvbiBlbnRyeS5cbiAqL1xuZXhwb3J0IGVudW0gQ29tcGxldGlvbkl0ZW1LaW5kIHtcbiAgVGV4dCA9IDEsXG4gIE1ldGhvZCA9IDIsXG4gIEZ1bmN0aW9uID0gMyxcbiAgQ29uc3RydWN0b3IgPSA0LFxuICBGaWVsZCA9IDUsXG4gIFZhcmlhYmxlID0gNixcbiAgQ2xhc3MgPSA3LFxuICBJbnRlcmZhY2UgPSA4LFxuICBNb2R1bGUgPSA5LFxuICBQcm9wZXJ0eSA9IDEwLFxuICBVbml0ID0gMTEsXG4gIFZhbHVlID0gMTIsXG4gIEVudW0gPSAxMyxcbiAgS2V5d29yZCA9IDE0LFxuICBTbmlwcGV0ID0gMTUsXG4gIENvbG9yID0gMTYsXG4gIEZpbGUgPSAxNyxcbiAgUmVmZXJlbmNlID0gMTgsXG4gIEZvbGRlciA9IDE5LFxuICBFbnVtTWVtYmVyID0gMjAsXG4gIENvbnN0YW50ID0gMjEsXG4gIFN0cnVjdCA9IDIyLFxuICBFdmVudCA9IDIzLFxuICBPcGVyYXRvciA9IDI0LFxuICBUeXBlUGFyYW1ldGVyID0gMjUsXG59XG5cblxuLyoqXG4gKiBBbiBpdGVtIHRvIHRyYW5zZmVyIGEgdGV4dCBkb2N1bWVudCBmcm9tIHRoZSBjbGllbnQgdG8gdGhlIHNlcnZlci5cbiAqIGh0dHBzOi8vbWljcm9zb2Z0LmdpdGh1Yi5pby9sYW5ndWFnZS1zZXJ2ZXItcHJvdG9jb2wvc3BlY2lmaWNhdGlvbnMvc3BlY2lmaWNhdGlvbi1jdXJyZW50LyN0ZXh0RG9jdW1lbnRJdGVtXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBUZXh0RG9jdW1lbnRJdGVtIHtcbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dCBkb2N1bWVudCdzIFVSSS5cbiAgICAgKi9cbiAgICB1cmk6IHByb3RvY29sLkRvY3VtZW50VXJpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRleHQgZG9jdW1lbnQncyBsYW5ndWFnZSBpZGVudGlmaWVyLlxuICAgICAqL1xuICAgIGxhbmd1YWdlSWQ6IExhbmd1YWdlSWRlbnRpZmllcjtcblxuICAgIC8qKlxuICAgICAqIFRoZSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIGRvY3VtZW50IChpdCB3aWxsIGluY3JlYXNlIGFmdGVyIGVhY2hcbiAgICAgKiBjaGFuZ2UsIGluY2x1ZGluZyB1bmRvL3JlZG8pLlxuICAgICAqL1xuICAgIHZlcnNpb246IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjb250ZW50IG9mIHRoZSBvcGVuZWQgdGV4dCBkb2N1bWVudC5cbiAgICAgKi9cbiAgICB0ZXh0OiBzdHJpbmc7XG59XG5cbi8qKlxuICogaHR0cHM6Ly9taWNyb3NvZnQuZ2l0aHViLmlvL2xhbmd1YWdlLXNlcnZlci1wcm90b2NvbC9zcGVjaWZpY2F0aW9ucy9zcGVjaWZpY2F0aW9uLWN1cnJlbnQvI3RleHREb2N1bWVudF9kaWRPcGVuXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBEaWRPcGVuVGV4dERvY3VtZW50UGFyYW1zIHtcbiAgICAvKipcbiAgICAgKiBUaGUgZG9jdW1lbnQgdGhhdCB3YXMgb3BlbmVkLlxuICAgICAqL1xuICAgIHRleHREb2N1bWVudDogVGV4dERvY3VtZW50SXRlbTtcbn1cblxuLyoqXG4gKiBodHRwczovL21pY3Jvc29mdC5naXRodWIuaW8vbGFuZ3VhZ2Utc2VydmVyLXByb3RvY29sL3NwZWNpZmljYXRpb25zL3NwZWNpZmljYXRpb24tY3VycmVudC8jdGV4dERvY3VtZW50X2RpZE9wZW5cbiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIERpZE9wZW5UZXh0RG9jdW1lbnQgZXh0ZW5kc1xuICAgIHByb3RvY29sLk5vdGlmaWNhdGlvbk1lc3NhZ2U8RGlkT3BlblRleHREb2N1bWVudFBhcmFtcz4ge1xuICAgIG1ldGhvZDogcHJvdG9jb2wuTWV0aG9kLlRleHREb2N1bWVudERpZE9wZW47XG59XG5cbi8qKlxuICogaHR0cHM6Ly9taWNyb3NvZnQuZ2l0aHViLmlvL2xhbmd1YWdlLXNlcnZlci1wcm90b2NvbC9zcGVjaWZpY2F0aW9ucy9zcGVjaWZpY2F0aW9uLWN1cnJlbnQvI3RleHREb2N1bWVudF9kaWRDbG9zZVxuICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgRGlkQ2xvc2VUZXh0RG9jdW1lbnRQYXJhbXMge1xuICAgIC8qKlxuICAgICAqIFRoZSBkb2N1bWVudCB0aGF0IHdhcyBjbG9zZWQuXG4gICAgICovXG4gICAgdGV4dERvY3VtZW50OiBUZXh0RG9jdW1lbnRJZGVudGlmaWVyO1xufVxuXG4vKipcbiAqIEtub3duIGxhbmd1YWdlIGlkZW50aWZpZXJzLlxuICogaHR0cHM6Ly9taWNyb3NvZnQuZ2l0aHViLmlvL2xhbmd1YWdlLXNlcnZlci1wcm90b2NvbC9zcGVjaWZpY2F0aW9ucy9zcGVjaWZpY2F0aW9uLWN1cnJlbnQvI3RleHREb2N1bWVudEl0ZW1cbiAqL1xuZXhwb3J0IGVudW0gTGFuZ3VhZ2VJZGVudGlmaWVyIHtcbiAgQUJBUCA9ICdhYmFwJyxcbiAgV2luZG93c0JhdCA9ICdiYXQnLFxuICBCaWJUZVggPSAnYmlidGV4JyxcbiAgQ2xvanVyZSA9ICdjbG9qdXJlJyxcbiAgQ29mZmVlc2NyaXB0ID0gJ2NvZmZlZXNjcmlwdCcsXG4gIEMgPSAnYycsXG4gIENQbHVzUGx1cyA9ICdjcHAnLFxuICBDU2hhcnAgPSAnY3NoYXJwJyxcbiAgQ1NTID0gJ2NzcycsXG4gIERpZmYgPSAnZGlmZicsXG4gIERhcnQgPSAnZGFydCcsXG4gIERvY2tlcmZpbGUgPSAnZG9ja2VyZmlsZScsXG4gIEVsaXhpciA9ICdlbGl4aXInLFxuICBFcmxhbmcgPSAnZXJsYW5nJyxcbiAgRlNoYXJwID0gJ2ZzaGFycCcsXG4gIEdpdENvbW1pdCA9ICdnaXQtY29tbWl0JyxcbiAgR2l0UmViYXNlID0gJ2dpdC1yZWJhc2UnLFxuICBHbyA9ICdnbycsXG4gIEdyb292eSA9ICdncm9vdnknLFxuICBIYW5kbGViYXJzID0gJ2hhbmRsZWJhcnMnLFxuICBIVE1MID0gJ2h0bWwnLFxuICBJbmkgPSAnaW5pJyxcbiAgSmF2YSA9ICdqYXZhJyxcbiAgSmF2YVNjcmlwdCA9ICdqYXZhc2NyaXB0JyxcbiAgSmF2YVNjcmlwdFJlYWN0ID0gJ2phdmFzY3JpcHRyZWFjdCcsXG4gIEpTT04gPSAnanNvbicsXG4gIExhVGVYID0gJ2xhdGV4JyxcbiAgTGVzcyA9ICdsZXNzJyxcbiAgTHVhID0gJ2x1YScsXG4gIE1ha2VmaWxlID0gJ21ha2VmaWxlJyxcbiAgTWFya2Rvd24gPSAnbWFya2Rvd24nLFxuICBPYmplY3RpdmVDID0gJ2MnLFxuICBPYmplY3RpdmVDUGx1c1BsdXMgPSAnY3BwJyxcbiAgUGVybCA9ICdwZXJsJyxcbiAgUGVybDYgPSAncGVybDYnLFxuICBQSFAgPSAncGhwJyxcbiAgUG93ZXJzaGVsbCA9ICdwb3dlcnNoZWxsJyxcbiAgUHVnID0gJ2phZGUnLFxuICBQeXRob24gPSAncHl0aG9uJyxcbiAgUiA9ICdyJyxcbiAgUmF6b3IgPSAncmF6b3InLFxuICBSdWJ5ID0gJ3J1YnknLFxuICBSdXN0ID0gJ3J1c3QnLFxuICBTQ1NTID0gJ3Njc3MnLFxuICBTYXNzID0gJ3N5bnRheCcsXG4gIFNjYWxhID0gJ3NjYWxhJyxcbiAgU2hhZGVyTGFiID0gJ3NoYWRlcmxhYicsXG4gIFNoZWxsID0gJ3NoZWxsc2NyaXB0JyxcbiAgU1FMID0gJ3NxbCcsXG4gIFN3aWZ0ID0gJ3N3aWZ0JyxcbiAgVHlwZVNjcmlwdCA9ICd0eXBlc2NyaXB0JyxcbiAgVHlwZVNjcmlwdFJlYWN0ID0gJ3R5cGVzY3JpcHRyZWFjdCcsXG4gIFRlWCA9ICd0ZXgnLFxuICBWaXN1YWxCYXNpYyA9ICd2YicsXG4gIFhNTCA9ICd4bWwnLFxuICBYU0wgPSAneHNsJyxcbiAgWUFNTCA9ICd5YW1sJyxcbn1cblxuLyoqXG4gKiBodHRwczovL21pY3Jvc29mdC5naXRodWIuaW8vbGFuZ3VhZ2Utc2VydmVyLXByb3RvY29sL3NwZWNpZmljYXRpb25zL3NwZWNpZmljYXRpb24tY3VycmVudC8jdGV4dERvY3VtZW50X3B1Ymxpc2hEaWFnbm9zdGljc1xuICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgUHVibGlzaERpYWdub3N0aWNzQ2xpZW50Q2FwYWJpbGl0aWVzIHtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSBjbGllbnRzIGFjY2VwdHMgZGlhZ25vc3RpY3Mgd2l0aCByZWxhdGVkIGluZm9ybWF0aW9uLlxuICAgICAqL1xuICAgIHJlbGF0ZWRJbmZvcm1hdGlvbj86IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBDbGllbnQgc3VwcG9ydHMgdGhlIHRhZyBwcm9wZXJ0eSB0byBwcm92aWRlIG1ldGEgZGF0YSBhYm91dCBhIGRpYWdub3N0aWMuXG4gICAgICogQ2xpZW50cyBzdXBwb3J0aW5nIHRhZ3MgaGF2ZSB0byBoYW5kbGUgdW5rbm93biB0YWdzIGdyYWNlZnVsbHkuXG4gICAgICpcbiAgICAgKiBAc2luY2UgMy4xNS4wXG4gICAgICovXG4gICAgdGFnU3VwcG9ydD86IHtcbiAgICAgIC8qKlxuICAgICAgICogVGhlIHRhZ3Mgc3VwcG9ydGVkIGJ5IHRoZSBjbGllbnQuXG4gICAgICAgKi9cbiAgICAgIHZhbHVlU2V0OiBwcm90b2NvbC5EaWFnbm9zdGljVGFnW107XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIGNsaWVudCBpbnRlcnByZXRzIHRoZSB2ZXJzaW9uIHByb3BlcnR5IG9mIHRoZVxuICAgICAqIGB0ZXh0RG9jdW1lbnQvcHVibGlzaERpYWdub3N0aWNzYCBub3RpZmljYXRpb24ncyBwYXJhbWV0ZXIuXG4gICAgICpcbiAgICAgKiBAc2luY2UgMy4xNS4wXG4gICAgICovXG4gICAgdmVyc2lvblN1cHBvcnQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIERpYWdub3N0aWNzIG5vdGlmaWNhdGlvbiBhcmUgc2VudCBmcm9tIHRoZSBzZXJ2ZXIgdG8gdGhlIGNsaWVudCB0byBzaWduYWxcbiAqIHJlc3VsdHMgb2YgdmFsaWRhdGlvbiBydW5zLlxuICogaHR0cHM6Ly9taWNyb3NvZnQuZ2l0aHViLmlvL2xhbmd1YWdlLXNlcnZlci1wcm90b2NvbC9zcGVjaWZpY2F0aW9ucy9zcGVjaWZpY2F0aW9uLWN1cnJlbnQvI3RleHREb2N1bWVudF9wdWJsaXNoRGlhZ25vc3RpY3NcbiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIFB1Ymxpc2hEaWFnbm9zdGljcyBleHRlbmRzXG4gICAgcHJvdG9jb2wuTm90aWZpY2F0aW9uTWVzc2FnZTxQdWJsaXNoRGlhZ25vc3RpY3NQYXJhbXM+IHtcbiAgICBtZXRob2Q6IHByb3RvY29sLk1ldGhvZC5UZXh0RG9jdW1lbnRQdWJsaXNoRGlhZ25vc3RpY3M7XG59XG5cbi8qKlxuICogaHR0cHM6Ly9taWNyb3NvZnQuZ2l0aHViLmlvL2xhbmd1YWdlLXNlcnZlci1wcm90b2NvbC9zcGVjaWZpY2F0aW9ucy9zcGVjaWZpY2F0aW9uLWN1cnJlbnQvI3RleHREb2N1bWVudF9wdWJsaXNoRGlhZ25vc3RpY3NcbiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIFB1Ymxpc2hEaWFnbm9zdGljc1BhcmFtcyB7XG4gICAgLyoqXG4gICAgICogVGhlIFVSSSBmb3Igd2hpY2ggZGlhZ25vc3RpYyBpbmZvcm1hdGlvbiBpcyByZXBvcnRlZC5cbiAgICAgKi9cbiAgICB1cmk6IHByb3RvY29sLkRvY3VtZW50VXJpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHZlcnNpb24gbnVtYmVyIG9mIHRoZSBkb2N1bWVudCB0aGUgZGlhZ25vc3RpY3MgYXJlIHB1Ymxpc2hlZCBmb3IuXG4gICAgICogT3B0aW9uYWwuXG4gICAgICogQHNpbmNlIDMuMTUuMFxuICAgICAqL1xuICAgIHZlcnNpb24/OiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiBkaWFnbm9zdGljIGluZm9ybWF0aW9uIGl0ZW1zLlxuICAgICAqL1xuICAgIGRpYWdub3N0aWNzOiBwcm90b2NvbC5EaWFnbm9zdGljW107XG59XG5cbi8qKlxuICogVGV4dCBkb2N1bWVudHMgYXJlIGlkZW50aWZpZWQgdXNpbmcgYSBVUkkuIE9uIHRoZSBwcm90b2NvbCBsZXZlbCwgVVJJcyBhcmVcbiAqIHBhc3NlZCBhcyBzdHJpbmdzLiBUaGUgY29ycmVzcG9uZGluZyBKU09OIHN0cnVjdHVyZSBsb29rcyBsaWtlIHRoaXM6XG4gKiBodHRwczovL21pY3Jvc29mdC5naXRodWIuaW8vbGFuZ3VhZ2Utc2VydmVyLXByb3RvY29sL3NwZWNpZmljYXRpb25zL3NwZWNpZmljYXRpb24tY3VycmVudC8jdGV4dERvY3VtZW50SWRlbnRpZmllclxuICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgVGV4dERvY3VtZW50SWRlbnRpZmllciB7XG4gICAgLyoqXG4gICAgICogVGhlIHRleHQgZG9jdW1lbnQncyBVUkkuXG4gICAgICovXG4gICAgdXJpOiBwcm90b2NvbC5Eb2N1bWVudFVyaTtcbn1cblxuLyoqXG4gKiBBbiBpZGVudGlmaWVyIHRvIGRlbm90ZSBhIHNwZWNpZmljIHZlcnNpb24gb2YgYSB0ZXh0IGRvY3VtZW50LiBUaGlzXG4gKiBpbmZvcm1hdGlvbiB1c3VhbGx5IGZsb3dzIGZyb20gdGhlIGNsaWVudCB0byB0aGUgc2VydmVyLlxuICovXG5pbnRlcmZhY2UgVmVyc2lvbmVkVGV4dERvY3VtZW50SWRlbnRpZmllciBleHRlbmRzIFRleHREb2N1bWVudElkZW50aWZpZXIge1xuICAgIC8qKlxuICAgICAqIFRoZSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIGRvY3VtZW50LlxuICAgICAqXG4gICAgICogVGhlIHZlcnNpb24gbnVtYmVyIG9mIGEgZG9jdW1lbnQgd2lsbCBpbmNyZWFzZSBhZnRlciBlYWNoIGNoYW5nZSxcbiAgICAgKiBpbmNsdWRpbmcgdW5kby9yZWRvLiBUaGUgbnVtYmVyIGRvZXNuJ3QgbmVlZCB0byBiZSBjb25zZWN1dGl2ZS5cbiAgICAgKi9cbiAgICB2ZXJzaW9uOiBwcm90b2NvbC5pbnRlZ2VyO1xufVxuXG4vKipcbiAqIGh0dHBzOi8vbWljcm9zb2Z0LmdpdGh1Yi5pby9sYW5ndWFnZS1zZXJ2ZXItcHJvdG9jb2wvc3BlY2lmaWNhdGlvbnMvc3BlY2lmaWNhdGlvbi1jdXJyZW50LyN0ZXh0RG9jdW1lbnRQb3NpdGlvblBhcmFtc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFRleHREb2N1bWVudFBvc2l0aW9uUGFyYW1zIHtcbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dCBkb2N1bWVudC5cbiAgICAgKi9cbiAgICB0ZXh0RG9jdW1lbnQ6IFRleHREb2N1bWVudElkZW50aWZpZXI7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcG9zaXRpb24gaW5zaWRlIHRoZSB0ZXh0IGRvY3VtZW50LlxuICAgICAqL1xuICAgIHBvc2l0aW9uOiBwcm90b2NvbC5Qb3NpdGlvbjtcbn1cblxuLyoqXG4gKiBUaGUgQ29tcGxldGlvbiByZXF1ZXN0IGlzIHNlbnQgZnJvbSB0aGUgY2xpZW50IHRvIHRoZSBzZXJ2ZXIgdG8gY29tcHV0ZVxuICogY29tcGxldGlvbiBpdGVtcyBhdCBhIGdpdmVuIGN1cnNvciBwb3NpdGlvbi4gQ29tcGxldGlvbiBpdGVtcyBhcmUgcHJlc2VudGVkXG4gKiBpbiB0aGUgSW50ZWxsaVNlbnNlIHVzZXIgaW50ZXJmYWNlLiBJZiBjb21wdXRpbmcgZnVsbCBjb21wbGV0aW9uIGl0ZW1zIGlzXG4gKiBleHBlbnNpdmUsIHNlcnZlcnMgY2FuIGFkZGl0aW9uYWxseSBwcm92aWRlIGEgaGFuZGxlciBmb3IgdGhlIGNvbXBsZXRpb25cbiAqIGl0ZW0gcmVzb2x2ZSByZXF1ZXN0IChgY29tcGxldGlvbkl0ZW0vcmVzb2x2ZWApLiBUaGlzIHJlcXVlc3QgaXMgc2VudCB3aGVuIGFcbiAqIGNvbXBsZXRpb24gaXRlbSBpcyBzZWxlY3RlZCBpbiB0aGUgdXNlciBpbnRlcmZhY2UuIEEgdHlwaWNhbCB1c2UgY2FzZSBpcyBmb3JcbiAqIGV4YW1wbGU6IHRoZSBgdGV4dERvY3VtZW50L2NvbXBsZXRpb25gIHJlcXVlc3QgZG9lc27igJl0IGZpbGwgaW4gdGhlXG4gKiBkb2N1bWVudGF0aW9uIHByb3BlcnR5IGZvciByZXR1cm5lZCBjb21wbGV0aW9uIGl0ZW1zIHNpbmNlIGl0IGlzIGV4cGVuc2l2ZVxuICogdG8gY29tcHV0ZS4gV2hlbiB0aGUgaXRlbSBpcyBzZWxlY3RlZCBpbiB0aGUgdXNlciBpbnRlcmZhY2UgdGhlbiBhXG4gKiBgY29tcGxldGlvbkl0ZW0vcmVzb2x2ZWAgcmVxdWVzdCBpcyBzZW50IHdpdGggdGhlIHNlbGVjdGVkIGNvbXBsZXRpb24gaXRlbVxuICogYXMgYSBwYXJhbWV0ZXIuIFRoZSByZXR1cm5lZCBjb21wbGV0aW9uIGl0ZW0gc2hvdWxkIGhhdmUgdGhlIGRvY3VtZW50YXRpb25cbiAqIHByb3BlcnR5IGZpbGxlZCBpbi4gQnkgZGVmYXVsdCB0aGUgcmVxdWVzdCBjYW4gb25seSBkZWxheSB0aGUgY29tcHV0YXRpb24gb2ZcbiAqIHRoZSBkZXRhaWwgYW5kIGRvY3VtZW50YXRpb24gcHJvcGVydGllcy4gU2luY2UgMy4xNi4wIHRoZSBjbGllbnQgY2FuIHNpZ25hbFxuICogdGhhdCBpdCBjYW4gcmVzb2x2ZSBtb3JlIHByb3BlcnRpZXMgbGF6aWx5LiBUaGlzIGlzIGRvbmUgdXNpbmcgdGhlXG4gKiBjb21wbGV0aW9uSXRlbSNyZXNvbHZlU3VwcG9ydCBjbGllbnQgY2FwYWJpbGl0eSB3aGljaCBsaXN0cyBhbGwgcHJvcGVydGllc1xuICogdGhhdCBjYW4gYmUgZmlsbGVkIGluIGR1cmluZyBhIGBjb21wbGV0aW9uSXRlbS9yZXNvbHZlYCByZXF1ZXN0LiBBbGwgb3RoZXJcbiAqIHByb3BlcnRpZXMgKHVzdWFsbHkgc29ydFRleHQsIGZpbHRlclRleHQsIGluc2VydFRleHQgYW5kIHRleHRFZGl0KSBtdXN0IGJlXG4gKiBwcm92aWRlZCBpbiB0aGUgdGV4dERvY3VtZW50L2NvbXBsZXRpb24gcmVzcG9uc2UgYW5kIG11c3Qgbm90IGJlIGNoYW5nZWRcbiAqIGR1cmluZyByZXNvbHZlLlxuICogaHR0cHM6Ly9taWNyb3NvZnQuZ2l0aHViLmlvL2xhbmd1YWdlLXNlcnZlci1wcm90b2NvbC9zcGVjaWZpY2F0aW9ucy9zcGVjaWZpY2F0aW9uLWN1cnJlbnQvI3RleHREb2N1bWVudF9jb21wbGV0aW9uXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBDb21wbGV0aW9uIGV4dGVuZHNcbiAgICBwcm90b2NvbC5SZXF1ZXN0TWVzc2FnZTxDb21wbGV0aW9uUGFyYW1zPiB7XG4gICAgbWV0aG9kOiBwcm90b2NvbC5NZXRob2QuVGV4dERvY3VtZW50Q29tcGxldGlvbjtcbn1cblxuLyoqXG4gKiBQYXJhbXMgZm9yIHRoZSBhdXRvRXhlY3V0ZUNoZWNrIGNhbGwuIFRoaXMgaXMgYSBjdXN0b20gTFNQIGNvbW1hbmQgdGhhdFxuICogdmVyaWZpZXMgdGhhdCB0aGUgcHJvdmlkZWQgY29kZSBwYXNzZXMgYSBudW1iZXIgb2YgTFNQLXJlbGF0ZWQgY2hlY2tzLlxuICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgQXV0b0V4ZWN1dGVDaGVja1BhcmFtcyBleHRlbmRzIFRleHREb2N1bWVudElkZW50aWZpZXIge1xuICAgIC8qKlxuICAgICAqIFRoZSBjb2RlIHRvIGNoZWNrIHdoZXRoZXIgaXQgY2FuIGJlIGF1dG8gZXhlY3V0ZWQgaW4gdGhlIGN1cnJlbnRcbiAgICAgKiBkb2N1bWVudC5cbiAgICAgKi9cbiAgICBjb2RlVG9DaGVjazogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHBvc2l0aW9uIHRvIGluc2VydCB0aGUgY29kZSBhdC4gSWYgbm90IHNldCwgYXBwZW5kIHRvIHRoZSBlbmQgb2YgdGhlXG4gICAgICogbm90ZWJvb2suXG4gICAgICovXG4gICAgcG9zaXRpb24/OiBwcm90b2NvbC5Qb3NpdGlvbjtcbn1cblxuLyoqXG4gKiBSZXNwb25zZSBmb3IgdGhlIGF1dG9FeGVjdXRlQ2hlY2sgY2FsbC5cbiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIEF1dG9FeGVjdXRlQ2hlY2tSZXNwb25zZSB7XG4gICAgLyoqXG4gICAgICogRXJyb3JzIGZvdW5kIHdoZW4gY2hlY2tpbmcgdGhlIGNvZGUgaW4gdGhlIHJlcXVlc3QuIEFuIGVtcHR5IGxpc3QgbWVhbnNcbiAgICAgKiB0aGF0IGFsbCBjaGVja3MgcGFzc2VkIGFuZCB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQgYXV0b21hdGljYWxseS5cbiAgICAgKi9cbiAgICBlcnJvcnM6IHN0cmluZ1tdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGFjdHVhbCBjb2RlIHRoYXQgc2hvdWxkIGJlIGV4ZWN1dGVkLiBUaGlzIHdpbGwgdXN1YWxseSBiZSB0aGUgY29kZVxuICAgICAqIHRoYXQgd2FzIHBhc3NlZCBpbiB0aGUgcmVxdWVzdCwgYnV0IG1heSBpbmNsdWRlIGFkZGl0aW9uYWwgZWRpdHMgdG8gbWFrZVxuICAgICAqIHRoZSBjb2RlIHNhZmVyIHRvIHJ1bi5cbiAgICAgKi9cbiAgICBjb2RlVG9FeGVjdXRlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogaHR0cHM6Ly9taWNyb3NvZnQuZ2l0aHViLmlvL2xhbmd1YWdlLXNlcnZlci1wcm90b2NvbC9zcGVjaWZpY2F0aW9ucy9zcGVjaWZpY2F0aW9uLWN1cnJlbnQvI3RleHREb2N1bWVudF9jb21wbGV0aW9uXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBDb21wbGV0aW9uUGFyYW1zIGV4dGVuZHNcbiAgICBUZXh0RG9jdW1lbnRQb3NpdGlvblBhcmFtcywgcHJvdG9jb2wuV29ya0RvbmVQcm9ncmVzc1BhcmFtcyxcbiAgICBwcm90b2NvbC5QYXJ0aWFsUmVzdWx0UGFyYW1zIHtcbiAgICAvKipcbiAgICAgKiBUaGUgY29tcGxldGlvbiBjb250ZXh0LiBUaGlzIGlzIG9ubHkgYXZhaWxhYmxlIGlmIHRoZSBjbGllbnQgc3BlY2lmaWVzXG4gICAgICogdG8gc2VuZCB0aGlzIHVzaW5nIHRoZSBjbGllbnQgY2FwYWJpbGl0eVxuICAgICAqIGBjb21wbGV0aW9uLmNvbnRleHRTdXBwb3J0ID09PSB0cnVlYFxuICAgICAqL1xuICAgIGNvbnRleHQ/OiBDb21wbGV0aW9uQ29udGV4dDtcbn1cblxuLyoqXG4gKiBIb3cgYSBjb21wbGV0aW9uIHdhcyB0cmlnZ2VyZWRcbiAqIGh0dHBzOi8vbWljcm9zb2Z0LmdpdGh1Yi5pby9sYW5ndWFnZS1zZXJ2ZXItcHJvdG9jb2wvc3BlY2lmaWNhdGlvbnMvc3BlY2lmaWNhdGlvbi1jdXJyZW50LyN0ZXh0RG9jdW1lbnRfY29tcGxldGlvblxuICovXG5leHBvcnQgZW51bSBDb21wbGV0aW9uVHJpZ2dlcktpbmQge1xuICAvKipcbiAgICogQ29tcGxldGlvbiB3YXMgdHJpZ2dlcmVkIGJ5IHR5cGluZyBhbiBpZGVudGlmaWVyICgyNHg3IGNvZGVcbiAgICogY29tcGxldGUpLCBtYW51YWwgaW52b2NhdGlvbiAoZS5nIEN0cmwrU3BhY2UpIG9yIHZpYSBBUEkuXG4gICAqL1xuICBJbnZva2VkID0gMSxcblxuICAvKipcbiAgICogQ29tcGxldGlvbiB3YXMgdHJpZ2dlcmVkIGJ5IGEgdHJpZ2dlciBjaGFyYWN0ZXIgc3BlY2lmaWVkIGJ5XG4gICAqIHRoZSBgdHJpZ2dlckNoYXJhY3RlcnNgIHByb3BlcnRpZXMgb2YgdGhlXG4gICAqIGBDb21wbGV0aW9uUmVnaXN0cmF0aW9uT3B0aW9uc2AuXG4gICAqL1xuICBUcmlnZ2VyQ2hhcmFjdGVyID0gMixcblxuICAvKipcbiAgICogQ29tcGxldGlvbiB3YXMgcmUtdHJpZ2dlcmVkIGFzIHRoZSBjdXJyZW50IGNvbXBsZXRpb24gbGlzdCBpcyBpbmNvbXBsZXRlLlxuICAgKi9cbiAgVHJpZ2dlckZvckluY29tcGxldGVDb21wbGV0aW9ucyA9IDMsXG59XG5cblxuLyoqXG4gKiBDb250YWlucyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjb250ZXh0IGluIHdoaWNoIGEgY29tcGxldGlvblxuICogcmVxdWVzdCBpcyB0cmlnZ2VyZWQuXG4gKiBodHRwczovL21pY3Jvc29mdC5naXRodWIuaW8vbGFuZ3VhZ2Utc2VydmVyLXByb3RvY29sL3NwZWNpZmljYXRpb25zL3NwZWNpZmljYXRpb24tY3VycmVudC8jdGV4dERvY3VtZW50X2NvbXBsZXRpb25cbiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIENvbXBsZXRpb25Db250ZXh0IHtcbiAgICAvKipcbiAgICAgKiBIb3cgdGhlIGNvbXBsZXRpb24gd2FzIHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICB0cmlnZ2VyS2luZDogQ29tcGxldGlvblRyaWdnZXJLaW5kO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRyaWdnZXIgY2hhcmFjdGVyIChhIHNpbmdsZSBjaGFyYWN0ZXIpIHRoYXQgaGFzIHRyaWdnZXIgY29kZVxuICAgICAqIGNvbXBsZXRlLiBJcyB1bmRlZmluZWQgaWZcbiAgICAgKiBgdHJpZ2dlcktpbmQgIT09IENvbXBsZXRpb25UcmlnZ2VyS2luZC5UcmlnZ2VyQ2hhcmFjdGVyYFxuICAgICAqL1xuICAgIHRyaWdnZXJDaGFyYWN0ZXI/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIGRvY3VtZW50IGNoYW5nZSBub3RpZmljYXRpb24gaXMgc2VudCBmcm9tIHRoZSBjbGllbnQgdG8gdGhlIHNlcnZlciB0b1xuICogc2lnbmFsIGNoYW5nZXMgdG8gYSB0ZXh0IGRvY3VtZW50LiBCZWZvcmUgYSBjbGllbnQgY2FuIGNoYW5nZSBhIHRleHRcbiAqIGRvY3VtZW50IGl0IG11c3QgY2xhaW0gb3duZXJzaGlwIG9mIGl0cyBjb250ZW50IHVzaW5nIHRoZVxuICogdGV4dERvY3VtZW50L2RpZE9wZW4gbm90aWZpY2F0aW9uLiBJbiAyLjAgdGhlIHNoYXBlIG9mIHRoZSBwYXJhbXMgaGFzXG4gKiBjaGFuZ2VkIHRvIGluY2x1ZGUgcHJvcGVyIHZlcnNpb24gbnVtYmVycyBhbmQgbGFuZ3VhZ2UgaWRzLlxuICogaHR0cHM6Ly9taWNyb3NvZnQuZ2l0aHViLmlvL2xhbmd1YWdlLXNlcnZlci1wcm90b2NvbC9zcGVjaWZpY2F0aW9ucy9zcGVjaWZpY2F0aW9uLWN1cnJlbnQvI3RleHREb2N1bWVudF9kaWRDaGFuZ2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEaWRDaGFuZ2VUZXh0RG9jdW1lbnRQYXJhbXMge1xuICAgIC8qKlxuICAgICAqIFRoZSBkb2N1bWVudCB0aGF0IGRpZCBjaGFuZ2UuIFRoZSB2ZXJzaW9uIG51bWJlciBwb2ludHNcbiAgICAgKiB0byB0aGUgdmVyc2lvbiBhZnRlciBhbGwgcHJvdmlkZWQgY29udGVudCBjaGFuZ2VzIGhhdmVcbiAgICAgKiBiZWVuIGFwcGxpZWQuXG4gICAgICovXG4gICAgdGV4dERvY3VtZW50OiBWZXJzaW9uZWRUZXh0RG9jdW1lbnRJZGVudGlmaWVyO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGFjdHVhbCBjb250ZW50IGNoYW5nZXMuIFRoZSBjb250ZW50IGNoYW5nZXMgZGVzY3JpYmUgc2luZ2xlIHN0YXRlXG4gICAgICogY2hhbmdlcyB0byB0aGUgZG9jdW1lbnQuIFNvIGlmIHRoZXJlIGFyZSB0d28gY29udGVudCBjaGFuZ2VzIGMxIChhdFxuICAgICAqIGFycmF5IGluZGV4IDApIGFuZCBjMiAoYXQgYXJyYXkgaW5kZXggMSkgZm9yIGEgZG9jdW1lbnQgaW4gc3RhdGUgUyB0aGVuXG4gICAgICogYzEgbW92ZXMgdGhlIGRvY3VtZW50IGZyb20gUyB0byBTJyBhbmQgYzIgZnJvbSBTJyB0byBTJycuIFNvIGMxIGlzXG4gICAgICogY29tcHV0ZWQgb24gdGhlIHN0YXRlIFMgYW5kIGMyIGlzIGNvbXB1dGVkIG9uIHRoZSBzdGF0ZSBTJy5cbiAgICAgKlxuICAgICAqIFRvIG1pcnJvciB0aGUgY29udGVudCBvZiBhIGRvY3VtZW50IHVzaW5nIGNoYW5nZSBldmVudHMgdXNlIHRoZSBmb2xsb3dpbmdcbiAgICAgKiBhcHByb2FjaDpcbiAgICAgKiAtIHN0YXJ0IHdpdGggdGhlIHNhbWUgaW5pdGlhbCBjb250ZW50XG4gICAgICogLSBhcHBseSB0aGUgJ3RleHREb2N1bWVudC9kaWRDaGFuZ2UnIG5vdGlmaWNhdGlvbnMgaW4gdGhlIG9yZGVyIHlvdVxuICAgICAqICAgcmVjZWl2ZSB0aGVtLlxuICAgICAqIC0gYXBwbHkgdGhlIGBUZXh0RG9jdW1lbnRDb250ZW50Q2hhbmdlRXZlbnRgcyBpbiBhIHNpbmdsZSBub3RpZmljYXRpb25cbiAgICAgKiAgIGluIHRoZSBvcmRlciB5b3UgcmVjZWl2ZSB0aGVtLlxuICAgICAqL1xuICAgIGNvbnRlbnRDaGFuZ2VzOiBUZXh0RG9jdW1lbnRDb250ZW50Q2hhbmdlRXZlbnRbXTtcbn1cblxuLyoqXG4gKiBBbiBldmVudCBkZXNjcmliaW5nIGEgY2hhbmdlIHRvIGEgdGV4dCBkb2N1bWVudC4gSWYgcmFuZ2UgYW5kIHJhbmdlTGVuZ3RoIGFyZVxuICogb21pdHRlZCB0aGUgbmV3IHRleHQgaXMgY29uc2lkZXJlZCB0byBiZSB0aGUgZnVsbCBjb250ZW50IG9mIHRoZSBkb2N1bWVudC5cbiAqIGh0dHBzOi8vbWljcm9zb2Z0LmdpdGh1Yi5pby9sYW5ndWFnZS1zZXJ2ZXItcHJvdG9jb2wvc3BlY2lmaWNhdGlvbnMvc3BlY2lmaWNhdGlvbi1jdXJyZW50LyN0ZXh0RG9jdW1lbnRfZGlkQ2hhbmdlXG4gKi9cbmV4cG9ydCB0eXBlIFRleHREb2N1bWVudENvbnRlbnRDaGFuZ2VFdmVudCA9IHtcbiAgLyoqXG4gICAqIFRoZSByYW5nZSBvZiB0aGUgZG9jdW1lbnQgdGhhdCBjaGFuZ2VkLlxuICAgKi9cbiAgcmFuZ2U6IHByb3RvY29sLlJhbmdlO1xuXG4gIC8qKlxuICAgKiBUaGUgb3B0aW9uYWwgbGVuZ3RoIG9mIHRoZSByYW5nZSB0aGF0IGdvdCByZXBsYWNlZC5cbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgdXNlIHJhbmdlIGluc3RlYWQuXG4gICAqL1xuICByYW5nZUxlbmd0aD86IHByb3RvY29sLnVpbnRlZ2VyO1xuXG4gIC8qKlxuICAgKiBUaGUgbmV3IHRleHQgZm9yIHRoZSBwcm92aWRlZCByYW5nZS5cbiAgICovXG4gIHRleHQ6IHN0cmluZztcbn18e1xuICAgIC8qKlxuICAgICAqIFRoZSBuZXcgdGV4dCBvZiB0aGUgd2hvbGUgZG9jdW1lbnQuXG4gICAgICovXG4gICAgdGV4dDogc3RyaW5nO1xufTtcblxuLyoqXG4gKiBodHRwczovL21pY3Jvc29mdC5naXRodWIuaW8vbGFuZ3VhZ2Utc2VydmVyLXByb3RvY29sL3NwZWNpZmljYXRpb25zL3NwZWNpZmljYXRpb24tY3VycmVudC8jdGV4dERvY3VtZW50RWRpdFxuICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgVGV4dERvY3VtZW50RWRpdCB7XG4gICAgLyoqXG4gICAgICogVGhlIHRleHQgZG9jdW1lbnQgdG8gY2hhbmdlLlxuICAgICAqL1xuICAgIHRleHREb2N1bWVudDogVmVyc2lvbmVkVGV4dERvY3VtZW50SWRlbnRpZmllcjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBlZGl0cyB0byBiZSBhcHBsaWVkLlxuICAgICAqL1xuICAgIGVkaXRzOiBUZXh0RWRpdFtdO1xufVxuXG4vKipcbiAqIGh0dHBzOi8vbWljcm9zb2Z0LmdpdGh1Yi5pby9sYW5ndWFnZS1zZXJ2ZXItcHJvdG9jb2wvc3BlY2lmaWNhdGlvbnMvc3BlY2lmaWNhdGlvbi1jdXJyZW50LyN0ZXh0RWRpdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRleHRFZGl0IHtcbiAgICAvKipcbiAgICAgKiBUaGUgcmFuZ2Ugb2YgdGhlIHRleHQgZG9jdW1lbnQgdG8gYmUgbWFuaXB1bGF0ZWQuIFRvIGluc2VydFxuICAgICAqIHRleHQgaW50byBhIGRvY3VtZW50IGNyZWF0ZSBhIHJhbmdlIHdoZXJlIHN0YXJ0ID09PSBlbmQuXG4gICAgICovXG4gICAgcmFuZ2U6IHByb3RvY29sLlJhbmdlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHN0cmluZyB0byBiZSBpbnNlcnRlZC4gRm9yIGRlbGV0ZSBvcGVyYXRpb25zIHVzZSBhblxuICAgICAqIGVtcHR5IHN0cmluZy5cbiAgICAgKi9cbiAgICBuZXdUZXh0OiBzdHJpbmc7XG59XG5cbi8qKlxuICogaHR0cHM6Ly9taWNyb3NvZnQuZ2l0aHViLmlvL2xhbmd1YWdlLXNlcnZlci1wcm90b2NvbC9zcGVjaWZpY2F0aW9ucy9zcGVjaWZpY2F0aW9uLWN1cnJlbnQvI3RleHREb2N1bWVudF9mb2xkaW5nUmFuZ2VcbiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIEZvbGRpbmdSYW5nZUNsaWVudENhcGFiaWxpdGllcyB7XG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgaW1wbGVtZW50YXRpb24gc3VwcG9ydHMgZHluYW1pYyByZWdpc3RyYXRpb24gZm9yXG4gICAgICogZm9sZGluZyByYW5nZSBwcm92aWRlcnMuXG4gICAgICogSWYgdGhpcyBpcyBzZXQgdG8gYHRydWVgLCB0aGUgY2xpZW50IHN1cHBvcnRzIHRoZSBuZXdcbiAgICAgKiBgRm9sZGluZ1JhbmdlUmVnaXN0cmF0aW9uT3B0aW9uc2AgcmV0dXJuIHZhbHVlIGZvciB0aGUgY29ycmVzcG9uZGluZ1xuICAgICAqIHNlcnZlciBjYXBhYmlsaXR5IGFzIHdlbGwuXG4gICAgICovXG4gICAgZHluYW1pY1JlZ2lzdHJhdGlvbj86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogVGhlIG1heGltdW0gbnVtYmVyIG9mIGZvbGRpbmcgcmFuZ2VzIHRoYXQgdGhlIGNsaWVudCBwcmVmZXJzIHRvXG4gICAgICogcmVjZWl2ZSBwZXIgZG9jdW1lbnQuXG4gICAgICogVGhlIHZhbHVlIHNlcnZlcyBhcyBhIGhpbnQsIHNlcnZlcnMgYXJlIGZyZWUgdG8gZm9sbG93IHRoZSBsaW1pdC5cbiAgICAgKi9cbiAgICByYW5nZUxpbWl0PzogbnVtYmVyO1xuICAgIC8qKlxuICAgICAqIElmIHNldCwgdGhlIGNsaWVudCBzaWduYWxzIHRoYXQgaXQgb25seSBzdXBwb3J0cyBmb2xkaW5nIGNvbXBsZXRlIGxpbmVzLlxuICAgICAqIElmIHNldCwgdGhlIGNsaWVudCB3aWxsIGlnbm9yZSBzcGVjaWZpZWQgYHN0YXJ0Q2hhcmFjdGVyYCBhbmRcbiAgICAgKiBgZW5kQ2hhcmFjdGVyYCBwcm9wZXJ0aWVzIGluIGEgRm9sZGluZ1JhbmdlLlxuICAgICAqL1xuICAgIGxpbmVGb2xkaW5nT25seT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogVGhlIGRvY3VtZW50IHJhbmdlIGZvcm1hdHRpbmcgcmVxdWVzdCBpcyBzZW50IGZyb20gdGhlIGNsaWVudCB0byB0aGUgc2VydmVyXG4gKiB0byBmb3JtYXQgYSBnaXZlbiByYW5nZSBpbiBhIGRvY3VtZW50LlxuICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgRG9jdW1lbnRSYW5nZUZvcm1hdHRpbmdDbGllbnRDYXBhYmlsaXRpZXMge1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgZm9ybWF0dGluZyBzdXBwb3J0cyBkeW5hbWljIHJlZ2lzdHJhdGlvbi5cbiAgICAgKi9cbiAgICBkeW5hbWljUmVnaXN0cmF0aW9uPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBodHRwczovL21pY3Jvc29mdC5naXRodWIuaW8vbGFuZ3VhZ2Utc2VydmVyLXByb3RvY29sL3NwZWNpZmljYXRpb25zL3NwZWNpZmljYXRpb24tY3VycmVudC8jdGV4dERvY3VtZW50X3NlbGVjdGlvblJhbmdlXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBTZWxlY3Rpb25SYW5nZUNsaWVudENhcGFiaWxpdGllcyB7XG4gICAgLyoqXG4gICAgICogV2hldGhlciBpbXBsZW1lbnRhdGlvbiBzdXBwb3J0cyBkeW5hbWljIHJlZ2lzdHJhdGlvbiBmb3Igc2VsZWN0aW9uXG4gICAgICogcmFuZ2UgcHJvdmlkZXJzLlxuICAgICAqIElmIHNldCB0byBgdHJ1ZWAsIHRoZSBjbGllbnQgc3VwcG9ydHMgdGhlIG5ld1xuICAgICAqIGBTZWxlY3Rpb25SYW5nZVJlZ2lzdHJhdGlvbk9wdGlvbnNgIHJldHVybiB2YWx1ZSBmb3IgdGhlIGNvcnJlc3BvbmRpbmdcbiAgICAgKiBzZXJ2ZXIgY2FwYWJpbGl0eSBhcyB3ZWxsLlxuICAgICAqL1xuICAgIGR5bmFtaWNSZWdpc3RyYXRpb24/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIGh0dHBzOi8vbWljcm9zb2Z0LmdpdGh1Yi5pby9sYW5ndWFnZS1zZXJ2ZXItcHJvdG9jb2wvc3BlY2lmaWNhdGlvbnMvc3BlY2lmaWNhdGlvbi1jdXJyZW50LyN0ZXh0RG9jdW1lbnRfc2lnbmF0dXJlSGVscFxuICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgU2lnbmF0dXJlSGVscENsaWVudENhcGFiaWxpdGllcyB7XG4gICAgLyoqXG4gICAgICogV2hldGhlciBzaWduYXR1cmUgaGVscCBzdXBwb3J0cyBkeW5hbWljIHJlZ2lzdHJhdGlvbi5cbiAgICAgKi9cbiAgICBkeW5hbWljUmVnaXN0cmF0aW9uPzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjbGllbnQgc3VwcG9ydHMgdGhlIGZvbGxvd2luZyBgU2lnbmF0dXJlSW5mb3JtYXRpb25gXG4gICAgICogc3BlY2lmaWMgcHJvcGVydGllcy5cbiAgICAgKi9cbiAgICBzaWduYXR1cmVJbmZvcm1hdGlvbj86IHtcbiAgICAgIC8qKlxuICAgICAgICogQ2xpZW50IHN1cHBvcnRzIHRoZSBmb2xsb3cgY29udGVudCBmb3JtYXRzIGZvciB0aGUgZG9jdW1lbnRhdGlvblxuICAgICAgICogcHJvcGVydHkuIFRoZSBvcmRlciBkZXNjcmliZXMgdGhlIHByZWZlcnJlZCBmb3JtYXQgb2YgdGhlIGNsaWVudC5cbiAgICAgICAqL1xuICAgICAgZG9jdW1lbnRhdGlvbkZvcm1hdD86IE1hcmt1cEtpbmRbXTtcblxuICAgICAgLyoqXG4gICAgICAgKiBDbGllbnQgY2FwYWJpbGl0aWVzIHNwZWNpZmljIHRvIHBhcmFtZXRlciBpbmZvcm1hdGlvbi5cbiAgICAgICAqL1xuICAgICAgcGFyYW1ldGVySW5mb3JtYXRpb24/OiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgY2xpZW50IHN1cHBvcnRzIHByb2Nlc3NpbmcgbGFiZWwgb2Zmc2V0cyBpbnN0ZWFkIG9mIGFcbiAgICAgICAgICogc2ltcGxlIGxhYmVsIHN0cmluZy5cbiAgICAgICAgICpcbiAgICAgICAgICogQHNpbmNlIDMuMTQuMFxuICAgICAgICAgKi9cbiAgICAgICAgbGFiZWxPZmZzZXRTdXBwb3J0PzogYm9vbGVhbjtcbiAgICAgIH07XG5cbiAgICAgIC8qKlxuICAgICAgICogVGhlIGNsaWVudCBzdXBwb3J0cyB0aGUgYGFjdGl2ZVBhcmFtZXRlcmAgcHJvcGVydHkgb25cbiAgICAgICAqIGBTaWduYXR1cmVJbmZvcm1hdGlvbmAgbGl0ZXJhbC5cbiAgICAgICAqXG4gICAgICAgKiBAc2luY2UgMy4xNi4wIC0gcHJvcG9zZWQgc3RhdGVcbiAgICAgICAqL1xuICAgICAgYWN0aXZlUGFyYW1ldGVyU3VwcG9ydD86IGJvb2xlYW47XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjbGllbnQgc3VwcG9ydHMgdG8gc2VuZCBhZGRpdGlvbmFsIGNvbnRleHQgaW5mb3JtYXRpb24gZm9yIGFcbiAgICAgKiBgdGV4dERvY3VtZW50L3NpZ25hdHVyZUhlbHBgIHJlcXVlc3QuIEEgY2xpZW50IHRoYXQgb3B0cyBpbnRvXG4gICAgICogY29udGV4dFN1cHBvcnQgd2lsbCBhbHNvIHN1cHBvcnQgdGhlIGByZXRyaWdnZXJDaGFyYWN0ZXJzYCBvblxuICAgICAqIGBTaWduYXR1cmVIZWxwT3B0aW9uc2AuXG4gICAgICpcbiAgICAgKiBAc2luY2UgMy4xNS4wXG4gICAgICovXG4gICAgY29udGV4dFN1cHBvcnQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIGh0dHBzOi8vbWljcm9zb2Z0LmdpdGh1Yi5pby9sYW5ndWFnZS1zZXJ2ZXItcHJvdG9jb2wvc3BlY2lmaWNhdGlvbnMvc3BlY2lmaWNhdGlvbi1jdXJyZW50LyN0ZXh0RG9jdW1lbnRfaW1wbGVtZW50YXRpb25cbiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIEltcGxlbWVudGF0aW9uQ2xpZW50Q2FwYWJpbGl0aWVzIHtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIGltcGxlbWVudGF0aW9uIHN1cHBvcnRzIGR5bmFtaWMgcmVnaXN0cmF0aW9uLlxuICAgICAqIElmIHRoaXMgaXMgc2V0IHRvIGB0cnVlYCwgdGhlIGNsaWVudCBzdXBwb3J0cyB0aGUgbmV3XG4gICAgICogYEltcGxlbWVudGF0aW9uUmVnaXN0cmF0aW9uT3B0aW9uc2AgcmV0dXJuIHZhbHVlIGZvciB0aGVcbiAgICAgKiBjb3JyZXNwb25kaW5nIHNlcnZlciBjYXBhYmlsaXR5IGFzIHdlbGwuXG4gICAgICovXG4gICAgZHluYW1pY1JlZ2lzdHJhdGlvbj86IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY2xpZW50IHN1cHBvcnRzIGFkZGl0aW9uYWwgbWV0YWRhdGEgaW4gdGhlIGZvcm0gb2YgZGVmaW5pdGlvbiBsaW5rcy5cbiAgICAgKlxuICAgICAqIEBzaW5jZSAzLjE0LjBcbiAgICAgKi9cbiAgICBsaW5rU3VwcG9ydD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogVGhlIHJlbmFtZSByZXF1ZXN0IGlzIHNlbnQgZnJvbSB0aGUgY2xpZW50IHRvIHRoZSBzZXJ2ZXIgdG8gYXNrIHRoZSBzZXJ2ZXIgdG9cbiAqIGNvbXB1dGUgYSB3b3Jrc3BhY2UgY2hhbmdlIHNvIHRoYXQgdGhlIGNsaWVudCBjYW4gcGVyZm9ybSBhIHdvcmtzcGFjZS13aWRlXG4gKiByZW5hbWUgb2YgYSBzeW1ib2wuXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBSZW5hbWVDbGllbnRDYXBhYmlsaXRpZXMge1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgcmVuYW1lIHN1cHBvcnRzIGR5bmFtaWMgcmVnaXN0cmF0aW9uLlxuICAgICAqL1xuICAgIGR5bmFtaWNSZWdpc3RyYXRpb24/OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogQ2xpZW50IHN1cHBvcnRzIHRlc3RpbmcgZm9yIHZhbGlkaXR5IG9mIHJlbmFtZSBvcGVyYXRpb25zXG4gICAgICogYmVmb3JlIGV4ZWN1dGlvbi5cbiAgICAgKlxuICAgICAqIEBzaW5jZSB2ZXJzaW9uIDMuMTIuMFxuICAgICAqL1xuICAgIHByZXBhcmVTdXBwb3J0PzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBodHRwczovL21pY3Jvc29mdC5naXRodWIuaW8vbGFuZ3VhZ2Utc2VydmVyLXByb3RvY29sL3NwZWNpZmljYXRpb25zL3NwZWNpZmljYXRpb24tY3VycmVudC8jdGV4dERvY3VtZW50X3R5cGVEZWZpbml0aW9uXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBUeXBlRGVmaW5pdGlvbkNsaWVudENhcGFiaWxpdGllcyB7XG4gICAgLyoqXG4gICAgICogV2hldGhlciBpbXBsZW1lbnRhdGlvbiBzdXBwb3J0cyBkeW5hbWljIHJlZ2lzdHJhdGlvbi5cbiAgICAgKiBJZiB0aGlzIGlzIHNldCB0byBgdHJ1ZWAsIHRoZSBjbGllbnQgc3VwcG9ydHMgdGhlIG5ldyBgXG4gICAgICogVHlwZURlZmluaXRpb25SZWdpc3RyYXRpb25PcHRpb25zYCByZXR1cm4gdmFsdWUgZm9yIHRoZVxuICAgICAqIGNvcnJlc3BvbmRpbmcgc2VydmVyIGNhcGFiaWxpdHkgYXMgd2VsbC5cbiAgICAgKi9cbiAgICBkeW5hbWljUmVnaXN0cmF0aW9uPzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjbGllbnQgc3VwcG9ydHMgYWRkaXRpb25hbCBtZXRhZGF0YSBpbiB0aGUgZm9ybSBvZiBkZWZpbml0aW9uIGxpbmtzLlxuICAgICAqXG4gICAgICogQHNpbmNlIDMuMTQuMFxuICAgICAqL1xuICAgIGxpbmtTdXBwb3J0PzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBodHRwczovL21pY3Jvc29mdC5naXRodWIuaW8vbGFuZ3VhZ2Utc2VydmVyLXByb3RvY29sL3NwZWNpZmljYXRpb25zL3NwZWNpZmljYXRpb24tY3VycmVudC8jdGV4dERvY3VtZW50X2RpZENsb3NlXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBUZXh0RG9jdW1lbnRTeW5jQ2xpZW50Q2FwYWJpbGl0aWVzIHtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRleHQgZG9jdW1lbnQgc3luY2hyb25pemF0aW9uIHN1cHBvcnRzIGR5bmFtaWMgcmVnaXN0cmF0aW9uLlxuICAgICAqL1xuICAgIGR5bmFtaWNSZWdpc3RyYXRpb24/OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNsaWVudCBzdXBwb3J0cyBzZW5kaW5nIHdpbGwgc2F2ZSBub3RpZmljYXRpb25zLlxuICAgICAqL1xuICAgIHdpbGxTYXZlPzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjbGllbnQgc3VwcG9ydHMgc2VuZGluZyBhIHdpbGwgc2F2ZSByZXF1ZXN0IGFuZFxuICAgICAqIHdhaXRzIGZvciBhIHJlc3BvbnNlIHByb3ZpZGluZyB0ZXh0IGVkaXRzIHdoaWNoIHdpbGxcbiAgICAgKiBiZSBhcHBsaWVkIHRvIHRoZSBkb2N1bWVudCBiZWZvcmUgaXQgaXMgc2F2ZWQuXG4gICAgICovXG4gICAgd2lsbFNhdmVXYWl0VW50aWw/OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNsaWVudCBzdXBwb3J0cyBkaWQgc2F2ZSBub3RpZmljYXRpb25zLlxuICAgICAqL1xuICAgIGRpZFNhdmU/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIERlZmluZXMgaG93IHRoZSBob3N0IChlZGl0b3IpIHNob3VsZCBzeW5jIGRvY3VtZW50IGNoYW5nZXNcbiAqIHRvIHRoZSBsYW5ndWFnZSBzZXJ2ZXIuXG4gKi9cbmV4cG9ydCBlbnVtIFRleHREb2N1bWVudFN5bmNLaW5kIHtcbiAgLyoqXG4gICAqIERvY3VtZW50cyBzaG91bGQgbm90IGJlIHN5bmNlZCBhdCBhbGwuXG4gICAqL1xuICBOb25lID0gMCxcblxuICAvKipcbiAgICogRG9jdW1lbnRzIGFyZSBzeW5jZWQgYnkgYWx3YXlzIHNlbmRpbmcgdGhlIGZ1bGwgY29udGVudFxuICAgKiBvZiB0aGUgZG9jdW1lbnQuXG4gICAqL1xuICBGdWxsID0gMSxcblxuICAvKipcbiAgICogRG9jdW1lbnRzIGFyZSBzeW5jZWQgYnkgc2VuZGluZyB0aGUgZnVsbCBjb250ZW50IG9uIG9wZW4uXG4gICAqIEFmdGVyIHRoYXQgb25seSBpbmNyZW1lbnRhbCB1cGRhdGVzIHRvIHRoZSBkb2N1bWVudCBhcmVcbiAgICogc2VuZC5cbiAgICovXG4gIEluY3JlbWVudGFsID0gMixcbn1cblxuLyoqXG4gKiBodHRwczovL21pY3Jvc29mdC5naXRodWIuaW8vbGFuZ3VhZ2Utc2VydmVyLXByb3RvY29sL3NwZWNpZmljYXRpb25zL3NwZWNpZmljYXRpb24tY3VycmVudC8jdGV4dERvY3VtZW50X2RpZENsb3NlXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBUZXh0RG9jdW1lbnRTeW5jT3B0aW9ucyB7XG4gICAgLyoqXG4gICAgICogT3BlbiBhbmQgY2xvc2Ugbm90aWZpY2F0aW9ucyBhcmUgc2VudCB0byB0aGUgc2VydmVyLlxuICAgICAqIElmIG9taXR0ZWQsIG9wZW4gY2xvc2Ugbm90aWZpY2F0aW9uIHNob3VsZCBub3QgYmUgc2VudC5cbiAgICAgKi9cbiAgICBvcGVuQ2xvc2U/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIENoYW5nZSBub3RpZmljYXRpb25zIGFyZSBzZW50IHRvIHRoZSBzZXJ2ZXIuXG4gICAgICogU2VlIFRleHREb2N1bWVudFN5bmNLaW5kLk5vbmUsIFRleHREb2N1bWVudFN5bmNLaW5kLkZ1bGwsXG4gICAgICogYW5kIFRleHREb2N1bWVudFN5bmNLaW5kLkluY3JlbWVudGFsLlxuICAgICAqIElmIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIFRleHREb2N1bWVudFN5bmNLaW5kLk5vbmUuXG4gICAgICovXG4gICAgY2hhbmdlPzogbnVtYmVyO1xuICAgIC8qKlxuICAgICAqIElmIHByZXNlbnQgd2lsbCBzYXZlIG5vdGlmaWNhdGlvbnMgYXJlIHNlbnQgdG8gdGhlIHNlcnZlci5cbiAgICAgKiBJZiBvbWl0dGVkLCB0aGUgbm90aWZpY2F0aW9uIHNob3VsZCBub3QgYmUgc2VudC5cbiAgICAgKi9cbiAgICB3aWxsU2F2ZT86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogSWYgcHJlc2VudCB3aWxsIHNhdmUgd2FpdCB1bnRpbCByZXF1ZXN0cyBhcmUgc2VudCB0byB0aGUgc2VydmVyLlxuICAgICAqIElmIG9taXR0ZWQsIHRoZSByZXF1ZXN0IHNob3VsZCBub3QgYmUgc2VudC5cbiAgICAgKi9cbiAgICB3aWxsU2F2ZVdhaXRVbnRpbD86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogSWYgcHJlc2VudCBzYXZlIG5vdGlmaWNhdGlvbnMgYXJlIHNlbnQgdG8gdGhlIHNlcnZlci5cbiAgICAgKiBJZiBvbWl0dGVkLCB0aGUgbm90aWZpY2F0aW9uIHNob3VsZCBub3QgYmUgc2VudC5cbiAgICAgKi9cbiAgICBzYXZlPzogYm9vbGVhbnxTYXZlT3B0aW9ucztcbn1cblxuLyoqXG4gKiBodHRwczovL21pY3Jvc29mdC5naXRodWIuaW8vbGFuZ3VhZ2Utc2VydmVyLXByb3RvY29sL3NwZWNpZmljYXRpb25zL3NwZWNpZmljYXRpb24tY3VycmVudC8jdGV4dERvY3VtZW50X2RpZFNhdmVcbiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIFNhdmVPcHRpb25zIHtcbiAgICAvKipcbiAgICAgKiBUaGUgY2xpZW50IGlzIHN1cHBvc2VkIHRvIGluY2x1ZGUgdGhlIGNvbnRlbnQgb24gc2F2ZS5cbiAgICAgKi9cbiAgICBpbmNsdWRlVGV4dD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogaHR0cHM6Ly9taWNyb3NvZnQuZ2l0aHViLmlvL2xhbmd1YWdlLXNlcnZlci1wcm90b2NvbC9zcGVjaWZpY2F0aW9ucy9zcGVjaWZpY2F0aW9uLWN1cnJlbnQvI3RleHREb2N1bWVudF9kZWZpbml0aW9uXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBEZWZpbml0aW9uQ2xpZW50Q2FwYWJpbGl0aWVzIHtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIGRlZmluaXRpb24gc3VwcG9ydHMgZHluYW1pYyByZWdpc3RyYXRpb24uXG4gICAgICovXG4gICAgZHluYW1pY1JlZ2lzdHJhdGlvbj86IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY2xpZW50IHN1cHBvcnRzIGFkZGl0aW9uYWwgbWV0YWRhdGEgaW4gdGhlIGZvcm0gb2YgZGVmaW5pdGlvbiBsaW5rcy5cbiAgICAgKlxuICAgICAqIEBzaW5jZSAzLjE0LjBcbiAgICAgKi9cbiAgICBsaW5rU3VwcG9ydD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogaHR0cHM6Ly9taWNyb3NvZnQuZ2l0aHViLmlvL2xhbmd1YWdlLXNlcnZlci1wcm90b2NvbC9zcGVjaWZpY2F0aW9ucy9zcGVjaWZpY2F0aW9uLWN1cnJlbnQvI3RleHREb2N1bWVudF9kZWNsYXJhdGlvblxuICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgRGVjbGFyYXRpb25DbGllbnRDYXBhYmlsaXRpZXMge1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgZGVjbGFyYXRpb24gc3VwcG9ydHMgZHluYW1pYyByZWdpc3RyYXRpb24uXG4gICAgICogSWYgdGhpcyBpcyBzZXQgdG8gYHRydWVgLCB0aGUgY2xpZW50IHN1cHBvcnRzIHRoZSBuZXdcbiAgICAgKiBgRGVjbGFyYXRpb25SZWdpc3RyYXRpb25PcHRpb25zYCByZXR1cm4gdmFsdWUgZm9yIHRoZVxuICAgICAqIGNvcnJlc3BvbmRpbmcgc2VydmVyIGNhcGFiaWxpdHkgYXMgd2VsbC5cbiAgICAgKi9cbiAgICBkeW5hbWljUmVnaXN0cmF0aW9uPzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjbGllbnQgc3VwcG9ydHMgYWRkaXRpb25hbCBtZXRhZGF0YSBpbiB0aGUgZm9ybSBvZiBkZWNsYXJhdGlvbiBsaW5rcy5cbiAgICAgKi9cbiAgICBsaW5rU3VwcG9ydD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogaHR0cHM6Ly9taWNyb3NvZnQuZ2l0aHViLmlvL2xhbmd1YWdlLXNlcnZlci1wcm90b2NvbC9zcGVjaWZpY2F0aW9ucy9zcGVjaWZpY2F0aW9uLWN1cnJlbnQvI3RleHREb2N1bWVudF9kb2N1bWVudEhpZ2hsaWdodFxuICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgRG9jdW1lbnRIaWdobGlnaHRDbGllbnRDYXBhYmlsaXRpZXMge1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgZG9jdW1lbnQgaGlnaGxpZ2h0IHN1cHBvcnRzIGR5bmFtaWMgcmVnaXN0cmF0aW9uLlxuICAgICAqL1xuICAgIGR5bmFtaWNSZWdpc3RyYXRpb24/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIGh0dHBzOi8vbWljcm9zb2Z0LmdpdGh1Yi5pby9sYW5ndWFnZS1zZXJ2ZXItcHJvdG9jb2wvc3BlY2lmaWNhdGlvbnMvc3BlY2lmaWNhdGlvbi1jdXJyZW50LyN0ZXh0RG9jdW1lbnRfcmVmZXJlbmNlc1xuICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgUmVmZXJlbmNlQ2xpZW50Q2FwYWJpbGl0aWVzIHtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHJlZmVyZW5jZXMgc3VwcG9ydHMgZHluYW1pYyByZWdpc3RyYXRpb24uXG4gICAgICovXG4gICAgZHluYW1pY1JlZ2lzdHJhdGlvbj86IGJvb2xlYW47XG59XG5cbi8qKlxuICogaHR0cHM6Ly9taWNyb3NvZnQuZ2l0aHViLmlvL2xhbmd1YWdlLXNlcnZlci1wcm90b2NvbC9zcGVjaWZpY2F0aW9ucy9zcGVjaWZpY2F0aW9uLWN1cnJlbnQvI3RleHREb2N1bWVudF9kb2N1bWVudFN5bWJvbFxuICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgRG9jdW1lbnRTeW1ib2xDbGllbnRDYXBhYmlsaXRpZXMge1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgZG9jdW1lbnQgc3ltYm9sIHN1cHBvcnRzIGR5bmFtaWMgcmVnaXN0cmF0aW9uLlxuICAgICAqL1xuICAgIGR5bmFtaWNSZWdpc3RyYXRpb24/OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogU3BlY2lmaWMgY2FwYWJpbGl0aWVzIGZvciB0aGUgYFN5bWJvbEtpbmRgIGluIHRoZVxuICAgICAqIGB0ZXh0RG9jdW1lbnQvZG9jdW1lbnRTeW1ib2xgIHJlcXVlc3QuXG4gICAgICovXG4gICAgc3ltYm9sS2luZD86IHtcbiAgICAgIC8qKlxuICAgICAgICogVGhlIHN5bWJvbCBraW5kIHZhbHVlcyB0aGUgY2xpZW50IHN1cHBvcnRzLiBXaGVuIHRoaXNcbiAgICAgICAqIHByb3BlcnR5IGV4aXN0cyB0aGUgY2xpZW50IGFsc28gZ3VhcmFudGVlcyB0aGF0IGl0IHdpbGxcbiAgICAgICAqIGhhbmRsZSB2YWx1ZXMgb3V0c2lkZSBpdHMgc2V0IGdyYWNlZnVsbHkgYW5kIGZhbGxzIGJhY2tcbiAgICAgICAqIHRvIGEgZGVmYXVsdCB2YWx1ZSB3aGVuIHVua25vd24uXG4gICAgICAgKlxuICAgICAgICogSWYgdGhpcyBwcm9wZXJ0eSBpcyBub3QgcHJlc2VudCB0aGUgY2xpZW50IG9ubHkgc3VwcG9ydHNcbiAgICAgICAqIHRoZSBzeW1ib2wga2luZHMgZnJvbSBgRmlsZWAgdG8gYEFycmF5YCBhcyBkZWZpbmVkIGluXG4gICAgICAgKiB0aGUgaW5pdGlhbCB2ZXJzaW9uIG9mIHRoZSBwcm90b2NvbC5cbiAgICAgICAqL1xuICAgICAgdmFsdWVTZXQ/OiBwcm90b2NvbC5TeW1ib2xLaW5kW107XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjbGllbnQgc3VwcG9ydHMgaGllcmFyY2hpY2FsIGRvY3VtZW50IHN5bWJvbHMuXG4gICAgICovXG4gICAgaGllcmFyY2hpY2FsRG9jdW1lbnRTeW1ib2xTdXBwb3J0PzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjbGllbnQgc3VwcG9ydHMgdGFncyBvbiBgU3ltYm9sSW5mb3JtYXRpb25gLiBUYWdzIGFyZSBzdXBwb3J0ZWQgb25cbiAgICAgKiBgRG9jdW1lbnRTeW1ib2xgIGlmIGBoaWVyYXJjaGljYWxEb2N1bWVudFN5bWJvbFN1cHBvcnRgIGlzIHNldCB0byB0cnVlLlxuICAgICAqIENsaWVudHMgc3VwcG9ydGluZyB0YWdzIGhhdmUgdG8gaGFuZGxlIHVua25vd24gdGFncyBncmFjZWZ1bGx5LlxuICAgICAqXG4gICAgICogQHNpbmNlIDMuMTYuMFxuICAgICAqL1xuICAgIHRhZ1N1cHBvcnQ/OiB7XG4gICAgICAvKipcbiAgICAgICAqIFRoZSB0YWdzIHN1cHBvcnRlZCBieSB0aGUgY2xpZW50LlxuICAgICAgICovXG4gICAgICB2YWx1ZVNldDogcHJvdG9jb2wuU3ltYm9sVGFnW11cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNsaWVudCBzdXBwb3J0cyBhbiBhZGRpdGlvbmFsIGxhYmVsIHByZXNlbnRlZCBpbiB0aGUgVUkgd2hlblxuICAgICAqIHJlZ2lzdGVyaW5nIGEgZG9jdW1lbnQgc3ltYm9sIHByb3ZpZGVyLlxuICAgICAqXG4gICAgICogQHNpbmNlIDMuMTYuMFxuICAgICAqL1xuICAgIGxhYmVsU3VwcG9ydD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogVGhlIGRvY3VtZW50IG9uIHR5cGUgZm9ybWF0dGluZyByZXF1ZXN0IGlzIHNlbnQgZnJvbSB0aGUgY2xpZW50IHRvIHRoZSBzZXJ2ZXJcbiAqIHRvIGZvcm1hdCBwYXJ0cyBvZiB0aGUgZG9jdW1lbnQgZHVyaW5nIHR5cGluZy5cbiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIERvY3VtZW50T25UeXBlRm9ybWF0dGluZ0NsaWVudENhcGFiaWxpdGllcyB7XG4gICAgLyoqXG4gICAgICogV2hldGhlciBvbiB0eXBlIGZvcm1hdHRpbmcgc3VwcG9ydHMgZHluYW1pYyByZWdpc3RyYXRpb24uXG4gICAgICovXG4gICAgZHluYW1pY1JlZ2lzdHJhdGlvbj86IGJvb2xlYW47XG59XG5cbi8qKlxuICogVGhlIGRvY3VtZW50IGZvcm1hdHRpbmcgcmVxdWVzdCBpcyBzZW50IGZyb20gdGhlIGNsaWVudCB0byB0aGUgc2VydmVyIHRvXG4gKiBmb3JtYXQgYSB3aG9sZSBkb2N1bWVudC5cbiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIERvY3VtZW50Rm9ybWF0dGluZ0NsaWVudENhcGFiaWxpdGllcyB7XG4gICAgLyoqXG4gICAgICogV2hldGhlciBmb3JtYXR0aW5nIHN1cHBvcnRzIGR5bmFtaWMgcmVnaXN0cmF0aW9uLlxuICAgICAqL1xuICAgIGR5bmFtaWNSZWdpc3RyYXRpb24/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFRoZSBkb2N1bWVudCBjb2xvciByZXF1ZXN0IGlzIHNlbnQgZnJvbSB0aGUgY2xpZW50IHRvIHRoZSBzZXJ2ZXIgdG8gbGlzdCBhbGxcbiAqIGNvbG9yIHJlZmVyZW5jZXMgZm91bmQgaW4gYSBnaXZlbiB0ZXh0IGRvY3VtZW50LiBBbG9uZyB3aXRoIHRoZSByYW5nZSwgYVxuICogY29sb3IgdmFsdWUgaW4gUkdCIGlzIHJldHVybmVkLiBDbGllbnRzIGNhbiB1c2UgdGhlIHJlc3VsdCB0byBkZWNvcmF0ZSBjb2xvclxuICogcmVmZXJlbmNlcyBpbiBhbiBlZGl0b3IuIEZvciBleGFtcGxlOiBDb2xvciBib3hlcyBzaG93aW5nIHRoZSBhY3R1YWwgY29sb3JcbiAqIG5leHQgdG8gdGhlIHJlZmVyZW5jZSBTaG93IGEgY29sb3IgcGlja2VyIHdoZW4gYSBjb2xvciByZWZlcmVuY2UgaXMgZWRpdGVkXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBEb2N1bWVudENvbG9yQ2xpZW50Q2FwYWJpbGl0aWVzIHtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIGRvY3VtZW50IGNvbG9yIHN1cHBvcnRzIGR5bmFtaWMgcmVnaXN0cmF0aW9uLlxuICAgICAqL1xuICAgIGR5bmFtaWNSZWdpc3RyYXRpb24/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFRoZSBkb2N1bWVudCBsaW5rcyByZXF1ZXN0IGlzIHNlbnQgZnJvbSB0aGUgY2xpZW50IHRvIHRoZSBzZXJ2ZXIgdG8gcmVxdWVzdFxuICogdGhlIGxvY2F0aW9uIG9mIGxpbmtzIGluIGEgZG9jdW1lbnQuXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBEb2N1bWVudExpbmtDbGllbnRDYXBhYmlsaXRpZXMge1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgZG9jdW1lbnQgbGluayBzdXBwb3J0cyBkeW5hbWljIHJlZ2lzdHJhdGlvbi5cbiAgICAgKi9cbiAgICBkeW5hbWljUmVnaXN0cmF0aW9uPzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIGNsaWVudCBzdXBwb3J0cyB0aGUgYHRvb2x0aXBgIHByb3BlcnR5IG9uIGBEb2N1bWVudExpbmtgLlxuICAgICAqXG4gICAgICogQHNpbmNlIDMuMTUuMFxuICAgICAqL1xuICAgIHRvb2x0aXBTdXBwb3J0PzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBUaGUgQ29kZUxlbnMgcmVxdWVzdCBpcyBzZW50IGZyb20gdGhlIGNsaWVudCB0byB0aGUgc2VydmVyIHRvIGNvbXB1dGVcbiAqIENvZGVMZW5zIGZvciBhIGdpdmVuIHRleHQgZG9jdW1lbnQuXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBDb2RlTGVuc0NsaWVudENhcGFiaWxpdGllcyB7XG4gICAgLyoqXG4gICAgICogV2hldGhlciBDb2RlTGVucyBzdXBwb3J0cyBkeW5hbWljIHJlZ2lzdHJhdGlvbi5cbiAgICAgKi9cbiAgICBkeW5hbWljUmVnaXN0cmF0aW9uPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBodHRwczovL21pY3Jvc29mdC5naXRodWIuaW8vbGFuZ3VhZ2Utc2VydmVyLXByb3RvY29sL3NwZWNpZmljYXRpb25zL3NwZWNpZmljYXRpb24tY3VycmVudC8jdGV4dERvY3VtZW50X2NvZGVBY3Rpb25cbiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIENvZGVBY3Rpb25DbGllbnRDYXBhYmlsaXRpZXMge1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgY29kZSBhY3Rpb24gc3VwcG9ydHMgZHluYW1pYyByZWdpc3RyYXRpb24uXG4gICAgICovXG4gICAgZHluYW1pY1JlZ2lzdHJhdGlvbj86IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY2xpZW50IHN1cHBvcnRzIGNvZGUgYWN0aW9uIGxpdGVyYWxzIGFzIGEgdmFsaWRcbiAgICAgKiByZXNwb25zZSBvZiB0aGUgYHRleHREb2N1bWVudC9jb2RlQWN0aW9uYCByZXF1ZXN0LlxuICAgICAqXG4gICAgICogQHNpbmNlIDMuOC4wXG4gICAgICovXG4gICAgY29kZUFjdGlvbkxpdGVyYWxTdXBwb3J0Pzoge1xuICAgICAgLyoqXG4gICAgICAgKiBUaGUgY29kZSBhY3Rpb24ga2luZCBpcyBzdXBwb3J0ZWQgd2l0aCB0aGUgZm9sbG93aW5nIHZhbHVlXG4gICAgICAgKiBzZXQuXG4gICAgICAgKi9cbiAgICAgIGNvZGVBY3Rpb25LaW5kOiB7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoZSBjb2RlIGFjdGlvbiBraW5kIHZhbHVlcyB0aGUgY2xpZW50IHN1cHBvcnRzLiBXaGVuIHRoaXNcbiAgICAgICAgICogcHJvcGVydHkgZXhpc3RzIHRoZSBjbGllbnQgYWxzbyBndWFyYW50ZWVzIHRoYXQgaXQgd2lsbFxuICAgICAgICAgKiBoYW5kbGUgdmFsdWVzIG91dHNpZGUgaXRzIHNldCBncmFjZWZ1bGx5IGFuZCBmYWxscyBiYWNrXG4gICAgICAgICAqIHRvIGEgZGVmYXVsdCB2YWx1ZSB3aGVuIHVua25vd24uXG4gICAgICAgICAqL1xuICAgICAgICB2YWx1ZVNldDogQ29kZUFjdGlvbktpbmRbXTtcbiAgICAgIH07XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgY29kZSBhY3Rpb24gc3VwcG9ydHMgdGhlIGBpc1ByZWZlcnJlZGAgcHJvcGVydHkuXG4gICAgICogQHNpbmNlIDMuMTUuMFxuICAgICAqL1xuICAgIGlzUHJlZmVycmVkU3VwcG9ydD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogVGhlIGtpbmQgb2YgYSBjb2RlIGFjdGlvbi5cbiAqXG4gKiBLaW5kcyBhcmUgYSBoaWVyYXJjaGljYWwgbGlzdCBvZiBpZGVudGlmaWVycyBzZXBhcmF0ZWQgYnkgYC5gLFxuICogZS5nLiBgXCJyZWZhY3Rvci5leHRyYWN0LmZ1bmN0aW9uXCJgLlxuICpcbiAqIFRoZSBzZXQgb2Yga2luZHMgaXMgb3BlbiBhbmQgdGhlIGNsaWVudCBuZWVkcyB0byBhbm5vdW5jZSB0aGUga2luZHMgaXRcbiAqIHN1cHBvcnRzIHRvIHRoZSBzZXJ2ZXIgZHVyaW5nIGluaXRpYWxpemF0aW9uLlxuICovXG5leHBvcnQgZW51bSBDb2RlQWN0aW9uS2luZCB7XG5cbiAgLyoqXG4gICAqIEVtcHR5IGtpbmQuXG4gICAqL1xuICBFbXB0eSA9ICcnLFxuXG4gIC8qKlxuICAgKiBCYXNlIGtpbmQgZm9yIHF1aWNrZml4IGFjdGlvbnM6ICdxdWlja2ZpeCcuXG4gICAqL1xuICBRdWlja0ZpeCA9ICdxdWlja2ZpeCcsXG5cbiAgLyoqXG4gICAqIEJhc2Uga2luZCBmb3IgcmVmYWN0b3JpbmcgYWN0aW9uczogJ3JlZmFjdG9yJy5cbiAgICovXG4gIFJlZmFjdG9yID0gJ3JlZmFjdG9yJyxcblxuICAvKipcbiAgICogQmFzZSBraW5kIGZvciByZWZhY3RvcmluZyBleHRyYWN0aW9uIGFjdGlvbnM6ICdyZWZhY3Rvci5leHRyYWN0Jy5cbiAgICpcbiAgICogRXhhbXBsZSBleHRyYWN0IGFjdGlvbnM6XG4gICAqXG4gICAqIC0gRXh0cmFjdCBtZXRob2RcbiAgICogLSBFeHRyYWN0IGZ1bmN0aW9uXG4gICAqIC0gRXh0cmFjdCB2YXJpYWJsZVxuICAgKiAtIEV4dHJhY3QgaW50ZXJmYWNlIGZyb20gY2xhc3NcbiAgICogLSAuLi5cbiAgICovXG4gIFJlZmFjdG9yRXh0cmFjdCA9ICdyZWZhY3Rvci5leHRyYWN0JyxcblxuICAvKipcbiAgICogQmFzZSBraW5kIGZvciByZWZhY3RvcmluZyBpbmxpbmUgYWN0aW9uczogJ3JlZmFjdG9yLmlubGluZScuXG4gICAqXG4gICAqIEV4YW1wbGUgaW5saW5lIGFjdGlvbnM6XG4gICAqXG4gICAqIC0gSW5saW5lIGZ1bmN0aW9uXG4gICAqIC0gSW5saW5lIHZhcmlhYmxlXG4gICAqIC0gSW5saW5lIGNvbnN0YW50XG4gICAqIC0gLi4uXG4gICAqL1xuICBSZWZhY3RvcklubGluZSA9ICdyZWZhY3Rvci5pbmxpbmUnLFxuXG4gIC8qKlxuICAgKiBCYXNlIGtpbmQgZm9yIHJlZmFjdG9yaW5nIHJld3JpdGUgYWN0aW9uczogJ3JlZmFjdG9yLnJld3JpdGUnLlxuICAgKlxuICAgKiBFeGFtcGxlIHJld3JpdGUgYWN0aW9uczpcbiAgICpcbiAgICogLSBDb252ZXJ0IEphdmFTY3JpcHQgZnVuY3Rpb24gdG8gY2xhc3NcbiAgICogLSBBZGQgb3IgcmVtb3ZlIHBhcmFtZXRlclxuICAgKiAtIEVuY2Fwc3VsYXRlIGZpZWxkXG4gICAqIC0gTWFrZSBtZXRob2Qgc3RhdGljXG4gICAqIC0gTW92ZSBtZXRob2QgdG8gYmFzZSBjbGFzc1xuICAgKiAtIC4uLlxuICAgKi9cbiAgUmVmYWN0b3JSZXdyaXRlID0gJ3JlZmFjdG9yLnJld3JpdGUnLFxuXG4gIC8qKlxuICAgKiBCYXNlIGtpbmQgZm9yIHNvdXJjZSBhY3Rpb25zOiBgc291cmNlYC5cbiAgICpcbiAgICogU291cmNlIGNvZGUgYWN0aW9ucyBhcHBseSB0byB0aGUgZW50aXJlIGZpbGUuXG4gICAqL1xuICBTb3VyY2UgPSAnc291cmNlJyxcblxuICAvKipcbiAgICogQmFzZSBraW5kIGZvciBhbiBvcmdhbml6ZSBpbXBvcnRzIHNvdXJjZSBhY3Rpb24gYHNvdXJjZS5vcmdhbml6ZUltcG9ydHNgLlxuICAgKi9cbiAgU291cmNlT3JnYW5pemVJbXBvcnRzID0gJ3NvdXJjZS5vcmdhbml6ZUltcG9ydHMnLFxufVxuXG4vKipcbiAqIENvbnRhaW5zIGFkZGl0aW9uYWwgZGlhZ25vc3RpYyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY29udGV4dCBpbiB3aGljaFxuICogYSBjb2RlIGFjdGlvbiBpcyBydW4uXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBDb2RlQWN0aW9uQ29udGV4dCB7XG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgZGlhZ25vc3RpY3Mga25vd24gb24gdGhlIGNsaWVudCBzaWRlIG92ZXJsYXBwaW5nIHRoZSByYW5nZVxuICAgICAqIHByb3ZpZGVkIHRvIHRoZSBgdGV4dERvY3VtZW50L2NvZGVBY3Rpb25gIHJlcXVlc3QuXG4gICAgICogVGhleSBhcmUgcHJvdmlkZWQgc28gdGhhdCB0aGUgc2VydmVyIGtub3dzIHdoaWNoIGVycm9ycyBhcmUgY3VycmVudGx5XG4gICAgICogcHJlc2VudGVkIHRvIHRoZSB1c2VyIGZvciB0aGUgZ2l2ZW4gcmFuZ2UuIFRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0XG4gICAgICogdGhlc2UgYWNjdXJhdGVseSByZWZsZWN0IHRoZSBlcnJvciBzdGF0ZSBvZiB0aGUgcmVzb3VyY2UuXG4gICAgICogVGhlIHByaW1hcnkgcGFyYW1ldGVyIHRvIGNvbXB1dGUgY29kZSBhY3Rpb25zIGlzIHRoZSBwcm92aWRlZCByYW5nZS5cbiAgICAgKi9cbiAgICBkaWFnbm9zdGljczogcHJvdG9jb2wuRGlhZ25vc3RpY1tdO1xuXG4gICAgLyoqXG4gICAgICogUmVxdWVzdGVkIGtpbmQgb2YgYWN0aW9ucyB0byByZXR1cm4uXG4gICAgICpcbiAgICAgKiBBY3Rpb25zIG5vdCBvZiB0aGlzIGtpbmQgYXJlIGZpbHRlcmVkIG91dCBieSB0aGUgY2xpZW50IGJlZm9yZVxuICAgICAqIGJlaW5nIHNob3duLCBzbyBzZXJ2ZXJzIGNhbiBvbWl0IGNvbXB1dGluZyB0aGVtLlxuICAgICAqL1xuICAgIG9ubHk/OiBDb2RlQWN0aW9uS2luZFtdO1xufVxuXG4vKipcbiAqIGh0dHBzOi8vbWljcm9zb2Z0LmdpdGh1Yi5pby9sYW5ndWFnZS1zZXJ2ZXItcHJvdG9jb2wvc3BlY2lmaWNhdGlvbnMvc3BlY2lmaWNhdGlvbi1jdXJyZW50LyN0ZXh0RG9jdW1lbnRfcHVibGlzaERpYWdub3N0aWNzXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBQdWJsaXNoRGlhZ25vc3RpY3NDbGllbnRDYXBhYmlsaXRpZXMge1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIGNsaWVudHMgYWNjZXB0cyBkaWFnbm9zdGljcyB3aXRoIHJlbGF0ZWQgaW5mb3JtYXRpb24uXG4gICAgICovXG4gICAgcmVsYXRlZEluZm9ybWF0aW9uPzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIENsaWVudCBzdXBwb3J0cyB0aGUgdGFnIHByb3BlcnR5IHRvIHByb3ZpZGUgbWV0YSBkYXRhIGFib3V0IGEgZGlhZ25vc3RpYy5cbiAgICAgKiBDbGllbnRzIHN1cHBvcnRpbmcgdGFncyBoYXZlIHRvIGhhbmRsZSB1bmtub3duIHRhZ3MgZ3JhY2VmdWxseS5cbiAgICAgKlxuICAgICAqIEBzaW5jZSAzLjE1LjBcbiAgICAgKi9cbiAgICB0YWdTdXBwb3J0Pzoge1xuICAgICAgLyoqXG4gICAgICAgKiBUaGUgdGFncyBzdXBwb3J0ZWQgYnkgdGhlIGNsaWVudC5cbiAgICAgICAqL1xuICAgICAgdmFsdWVTZXQ6IHByb3RvY29sLkRpYWdub3N0aWNUYWdbXTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgY2xpZW50IGludGVycHJldHMgdGhlIHZlcnNpb24gcHJvcGVydHkgb2YgdGhlXG4gICAgICogYHRleHREb2N1bWVudC9wdWJsaXNoRGlhZ25vc3RpY3NgIG5vdGlmaWNhdGlvbidzIHBhcmFtZXRlci5cbiAgICAgKlxuICAgICAqIEBzaW5jZSAzLjE1LjBcbiAgICAgKi9cbiAgICB2ZXJzaW9uU3VwcG9ydD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIGNvbGxlY3Rpb24gb2YgW2NvbXBsZXRpb24gaXRlbXNdKCNDb21wbGV0aW9uSXRlbSkgdG8gYmVcbiAqIHByZXNlbnRlZCBpbiB0aGUgZWRpdG9yLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbXBsZXRpb25MaXN0IHtcbiAgICAvKipcbiAgICAgKiBUaGlzIGxpc3QgaXQgbm90IGNvbXBsZXRlLiBGdXJ0aGVyIHR5cGluZyBzaG91bGQgcmVzdWx0IGluIHJlY29tcHV0aW5nXG4gICAgICogdGhpcyBsaXN0LlxuICAgICAqL1xuICAgIGlzSW5jb21wbGV0ZTogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjb21wbGV0aW9uIGl0ZW1zLlxuICAgICAqL1xuICAgIGl0ZW1zOiBDb21wbGV0aW9uSXRlbVtdO1xufVxuXG4vKipcbiAqIERlZmluZXMgd2hldGhlciB0aGUgaW5zZXJ0IHRleHQgaW4gYSBjb21wbGV0aW9uIGl0ZW0gc2hvdWxkIGJlIGludGVycHJldGVkIGFzXG4gKiBwbGFpbiB0ZXh0IG9yIGEgc25pcHBldC5cbiAqL1xuZXhwb3J0IGVudW0gSW5zZXJ0VGV4dEZvcm1hdCB7XG4gIC8qKlxuICAgKiBUaGUgcHJpbWFyeSB0ZXh0IHRvIGJlIGluc2VydGVkIGlzIHRyZWF0ZWQgYXMgYSBwbGFpbiBzdHJpbmcuXG4gICAqL1xuICBQbGFpblRleHQgPSAxLFxuXG4gIC8qKlxuICAgKiBUaGUgcHJpbWFyeSB0ZXh0IHRvIGJlIGluc2VydGVkIGlzIHRyZWF0ZWQgYXMgYSBzbmlwcGV0LlxuICAgKlxuICAgKiBBIHNuaXBwZXQgY2FuIGRlZmluZSB0YWIgc3RvcHMgYW5kIHBsYWNlaG9sZGVycyB3aXRoIGAkMWAsIGAkMmBcbiAgICogYW5kIGAkezM6Zm9vfWAuIGAkMGAgZGVmaW5lcyB0aGUgZmluYWwgdGFiIHN0b3AsIGl0IGRlZmF1bHRzIHRvXG4gICAqIHRoZSBlbmQgb2YgdGhlIHNuaXBwZXQuIFBsYWNlaG9sZGVycyB3aXRoIGVxdWFsIGlkZW50aWZpZXJzIGFyZSBsaW5rZWQsXG4gICAqIHRoYXQgaXMgdHlwaW5nIGluIG9uZSB3aWxsIHVwZGF0ZSBvdGhlcnMgdG9vLlxuICAgKi9cbiAgU25pcHBldCA9IDIsXG59XG5cbi8qKlxuICogQSBzcGVjaWFsIHRleHQgZWRpdCB0byBwcm92aWRlIGFuIGluc2VydCBhbmQgYSByZXBsYWNlIG9wZXJhdGlvbi5cbiAqXG4gKiBAc2luY2UgMy4xNi4wXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5zZXJ0UmVwbGFjZUVkaXQge1xuICAgIC8qKlxuICAgICAqIFRoZSBzdHJpbmcgdG8gYmUgaW5zZXJ0ZWQuXG4gICAgICovXG4gICAgbmV3VGV4dDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJhbmdlIGlmIHRoZSBpbnNlcnQgaXMgcmVxdWVzdGVkXG4gICAgICovXG4gICAgaW5zZXJ0OiBwcm90b2NvbC5SYW5nZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSByYW5nZSBpZiB0aGUgcmVwbGFjZSBpcyByZXF1ZXN0ZWQuXG4gICAgICovXG4gICAgcmVwbGFjZTogcHJvdG9jb2wuUmFuZ2U7XG59XG5cbi8qKlxuICogSG93IHdoaXRlc3BhY2UgYW5kIGluZGVudGF0aW9uIGlzIGhhbmRsZWQgZHVyaW5nIGNvbXBsZXRpb25cbiAqIGl0ZW0gaW5zZXJ0aW9uLlxuICpcbiAqIEBzaW5jZSAzLjE2LjBcbiAqL1xuZXhwb3J0IGVudW0gSW5zZXJ0VGV4dE1vZGUge1xuICAvKipcbiAgICogVGhlIGluc2VydGlvbiBvciByZXBsYWNlIHN0cmluZ3MgaXMgdGFrZW4gYXMgaXQgaXMuIElmIHRoZVxuICAgKiB2YWx1ZSBpcyBtdWx0aSBsaW5lIHRoZSBsaW5lcyBiZWxvdyB0aGUgY3Vyc29yIHdpbGwgYmVcbiAgICogaW5zZXJ0ZWQgdXNpbmcgdGhlIGluZGVudGF0aW9uIGRlZmluZWQgaW4gdGhlIHN0cmluZyB2YWx1ZS5cbiAgICogVGhlIGNsaWVudCB3aWxsIG5vdCBhcHBseSBhbnkga2luZCBvZiBhZGp1c3RtZW50cyB0byB0aGVcbiAgICogc3RyaW5nLlxuICAgKi9cbiAgYXNJcyA9IDEsXG5cbiAgLyoqXG4gICAqIFRoZSBlZGl0b3IgYWRqdXN0cyBsZWFkaW5nIHdoaXRlc3BhY2Ugb2YgbmV3IGxpbmVzIHNvIHRoYXRcbiAgICogdGhleSBtYXRjaCB0aGUgaW5kZW50YXRpb24gdXAgdG8gdGhlIGN1cnNvciBvZiB0aGUgbGluZSBmb3JcbiAgICogd2hpY2ggdGhlIGl0ZW0gaXMgYWNjZXB0ZWQuXG4gICAqXG4gICAqIENvbnNpZGVyIGEgbGluZSBsaWtlIHRoaXM6IDwydGFicz48Y3Vyc29yPjwzdGFicz5mb28uIEFjY2VwdGluZyBhXG4gICAqIG11bHRpIGxpbmUgY29tcGxldGlvbiBpdGVtIGlzIGluZGVudGVkIHVzaW5nIDIgdGFicyBhbmQgYWxsXG4gICAqIGZvbGxvd2luZyBsaW5lcyBpbnNlcnRlZCB3aWxsIGJlIGluZGVudGVkIHVzaW5nIDIgdGFicyBhcyB3ZWxsLlxuICAgKi9cbiAgYWRqdXN0SW5kZW50YXRpb24gPSAyLFxufVxuXG4vKipcbiAqIGh0dHBzOi8vbWljcm9zb2Z0LmdpdGh1Yi5pby9sYW5ndWFnZS1zZXJ2ZXItcHJvdG9jb2wvc3BlY2lmaWNhdGlvbnMvc3BlY2lmaWNhdGlvbi1jdXJyZW50LyN0ZXh0RG9jdW1lbnRfY29tcGxldGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbXBsZXRpb25JdGVtIHtcbiAgICAvKipcbiAgICAgKiBUaGUgbGFiZWwgb2YgdGhpcyBjb21wbGV0aW9uIGl0ZW0uIEJ5IGRlZmF1bHRcbiAgICAgKiBhbHNvIHRoZSB0ZXh0IHRoYXQgaXMgaW5zZXJ0ZWQgd2hlbiBzZWxlY3RpbmdcbiAgICAgKiB0aGlzIGNvbXBsZXRpb24uXG4gICAgICovXG4gICAgbGFiZWw6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFRoZSBraW5kIG9mIHRoaXMgY29tcGxldGlvbiBpdGVtLiBCYXNlZCBvZiB0aGUga2luZFxuICAgICAqIGFuIGljb24gaXMgY2hvc2VuIGJ5IHRoZSBlZGl0b3IuIFRoZSBzdGFuZGFyZGl6ZWQgc2V0XG4gICAgICogb2YgYXZhaWxhYmxlIHZhbHVlcyBpcyBkZWZpbmVkIGluIGBDb21wbGV0aW9uSXRlbUtpbmRgLlxuICAgICAqL1xuICAgIGtpbmQ/OiBDb21wbGV0aW9uSXRlbUtpbmQ7XG5cbiAgICAvKipcbiAgICAgKiBUYWdzIGZvciB0aGlzIGNvbXBsZXRpb24gaXRlbS5cbiAgICAgKlxuICAgICAqIEBzaW5jZSAzLjE1LjBcbiAgICAgKi9cbiAgICB0YWdzPzogQ29tcGxldGlvbkl0ZW1UYWdbXTtcblxuICAgIC8qKlxuICAgICAqIEEgaHVtYW4tcmVhZGFibGUgc3RyaW5nIHdpdGggYWRkaXRpb25hbCBpbmZvcm1hdGlvblxuICAgICAqIGFib3V0IHRoaXMgaXRlbSwgbGlrZSB0eXBlIG9yIHN5bWJvbCBpbmZvcm1hdGlvbi5cbiAgICAgKi9cbiAgICBkZXRhaWw/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBBIGh1bWFuLXJlYWRhYmxlIHN0cmluZyB0aGF0IHJlcHJlc2VudHMgYSBkb2MtY29tbWVudC5cbiAgICAgKi9cbiAgICBkb2N1bWVudGF0aW9uPzogc3RyaW5nfE1hcmt1cENvbnRlbnQ7XG5cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgaWYgdGhpcyBpdGVtIGlzIGRlcHJlY2F0ZWQuXG4gICAgICpcbiAgICAgKiBAZGVwcmVjYXRlZCBVc2UgYHRhZ3NgIGluc3RlYWQgaWYgc3VwcG9ydGVkLlxuICAgICAqL1xuICAgIGRlcHJlY2F0ZWQ/OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogU2VsZWN0IHRoaXMgaXRlbSB3aGVuIHNob3dpbmcuXG4gICAgICpcbiAgICAgKiAqTm90ZSogdGhhdCBvbmx5IG9uZSBjb21wbGV0aW9uIGl0ZW0gY2FuIGJlIHNlbGVjdGVkIGFuZCB0aGF0IHRoZVxuICAgICAqIHRvb2wgLyBjbGllbnQgZGVjaWRlcyB3aGljaCBpdGVtIHRoYXQgaXMuIFRoZSBydWxlIGlzIHRoYXQgdGhlICpmaXJzdCpcbiAgICAgKiBpdGVtIG9mIHRob3NlIHRoYXQgbWF0Y2ggYmVzdCBpcyBzZWxlY3RlZC5cbiAgICAgKi9cbiAgICBwcmVzZWxlY3Q/OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogQSBzdHJpbmcgdGhhdCBzaG91bGQgYmUgdXNlZCB3aGVuIGNvbXBhcmluZyB0aGlzIGl0ZW1cbiAgICAgKiB3aXRoIG90aGVyIGl0ZW1zLiBXaGVuIGBmYWxzeWAgdGhlIGxhYmVsIGlzIHVzZWQuXG4gICAgICovXG4gICAgc29ydFRleHQ/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBBIHN0cmluZyB0aGF0IHNob3VsZCBiZSB1c2VkIHdoZW4gZmlsdGVyaW5nIGEgc2V0IG9mXG4gICAgICogY29tcGxldGlvbiBpdGVtcy4gV2hlbiBgZmFsc3lgIHRoZSBsYWJlbCBpcyB1c2VkLlxuICAgICAqL1xuICAgIGZpbHRlclRleHQ/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBBIHN0cmluZyB0aGF0IHNob3VsZCBiZSBpbnNlcnRlZCBpbnRvIGEgZG9jdW1lbnQgd2hlbiBzZWxlY3RpbmdcbiAgICAgKiB0aGlzIGNvbXBsZXRpb24uIFdoZW4gYGZhbHN5YCB0aGUgbGFiZWwgaXMgdXNlZC5cbiAgICAgKlxuICAgICAqIFRoZSBgaW5zZXJ0VGV4dGAgaXMgc3ViamVjdCB0byBpbnRlcnByZXRhdGlvbiBieSB0aGUgY2xpZW50IHNpZGUuXG4gICAgICogU29tZSB0b29scyBtaWdodCBub3QgdGFrZSB0aGUgc3RyaW5nIGxpdGVyYWxseS4gRm9yIGV4YW1wbGVcbiAgICAgKiBWUyBDb2RlIHdoZW4gY29kZSBjb21wbGV0ZSBpcyByZXF1ZXN0ZWQgaW4gdGhpcyBleGFtcGxlXG4gICAgICogYGNvbjxjdXJzb3IgcG9zaXRpb24+YCBhbmQgYSBjb21wbGV0aW9uIGl0ZW0gd2l0aCBhbiBgaW5zZXJ0VGV4dGAgb2ZcbiAgICAgKiBgY29uc29sZWAgaXMgcHJvdmlkZWQgaXQgd2lsbCBvbmx5IGluc2VydCBgc29sZWAuIFRoZXJlZm9yZSBpdCBpc1xuICAgICAqIHJlY29tbWVuZGVkIHRvIHVzZSBgdGV4dEVkaXRgIGluc3RlYWQgc2luY2UgaXQgYXZvaWRzIGFkZGl0aW9uYWwgY2xpZW50XG4gICAgICogc2lkZSBpbnRlcnByZXRhdGlvbi5cbiAgICAgKi9cbiAgICBpbnNlcnRUZXh0Pzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGZvcm1hdCBvZiB0aGUgaW5zZXJ0IHRleHQuIFRoZSBmb3JtYXQgYXBwbGllcyB0byBib3RoIHRoZVxuICAgICAqIGBpbnNlcnRUZXh0YCBwcm9wZXJ0eSBhbmQgdGhlIGBuZXdUZXh0YCBwcm9wZXJ0eSBvZiBhIHByb3ZpZGVkXG4gICAgICogYHRleHRFZGl0YC4gSWYgb21pdHRlZCBkZWZhdWx0cyB0byBgSW5zZXJ0VGV4dEZvcm1hdC5QbGFpblRleHRgLlxuICAgICAqL1xuICAgIGluc2VydFRleHRGb3JtYXQ/OiBJbnNlcnRUZXh0Rm9ybWF0O1xuXG4gICAgLyoqXG4gICAgICogSG93IHdoaXRlc3BhY2UgYW5kIGluZGVudGF0aW9uIGlzIGhhbmRsZWQgZHVyaW5nIGNvbXBsZXRpb25cbiAgICAgKiBpdGVtIGluc2VydGlvbi4gSWYgbm90IHByb3ZpZGVkIHRoZSBjbGllbnQncyBkZWZhdWx0IHZhbHVlIGRlcGVuZHMgb25cbiAgICAgKiB0aGUgYHRleHREb2N1bWVudC5jb21wbGV0aW9uLmluc2VydFRleHRNb2RlYCBjbGllbnQgY2FwYWJpbGl0eS5cbiAgICAgKlxuICAgICAqIEBzaW5jZSAzLjE2LjBcbiAgICAgKi9cbiAgICBpbnNlcnRUZXh0TW9kZT86IEluc2VydFRleHRNb2RlO1xuXG4gICAgLyoqXG4gICAgICogQW4gZWRpdCB3aGljaCBpcyBhcHBsaWVkIHRvIGEgZG9jdW1lbnQgd2hlbiBzZWxlY3RpbmcgdGhpcyBjb21wbGV0aW9uLlxuICAgICAqIFdoZW4gYW4gZWRpdCBpcyBwcm92aWRlZCB0aGUgdmFsdWUgb2YgYGluc2VydFRleHRgIGlzIGlnbm9yZWQuXG4gICAgICpcbiAgICAgKiAqTm90ZToqIFRoZSByYW5nZSBvZiB0aGUgZWRpdCBtdXN0IGJlIGEgc2luZ2xlIGxpbmUgcmFuZ2UgYW5kIGl0IG11c3RcbiAgICAgKiBjb250YWluIHRoZSBwb3NpdGlvbiBhdCB3aGljaCBjb21wbGV0aW9uIGhhcyBiZWVuIHJlcXVlc3RlZC5cbiAgICAgKlxuICAgICAqIE1vc3QgZWRpdG9ycyBzdXBwb3J0IHR3byBkaWZmZXJlbnQgb3BlcmF0aW9ucyB3aGVuIGFjY2VwdGluZyBhIGNvbXBsZXRpb25cbiAgICAgKiBpdGVtLiBPbmUgaXMgdG8gaW5zZXJ0IGEgY29tcGxldGlvbiB0ZXh0IGFuZCB0aGUgb3RoZXIgaXMgdG8gcmVwbGFjZSBhblxuICAgICAqIGV4aXN0aW5nIHRleHQgd2l0aCBhIGNvbXBsZXRpb24gdGV4dC4gU2luY2UgdGhpcyBjYW4gdXN1YWxseSBub3QgYmVcbiAgICAgKiBwcmVkZXRlcm1pbmVkIGJ5IGEgc2VydmVyIGl0IGNhbiByZXBvcnQgYm90aCByYW5nZXMuIENsaWVudHMgbmVlZCB0b1xuICAgICAqIHNpZ25hbCBzdXBwb3J0IGZvciBgSW5zZXJ0UmVwbGFjZUVkaXRzYCB2aWEgdGhlXG4gICAgICogYHRleHREb2N1bWVudC5jb21wbGV0aW9uLmluc2VydFJlcGxhY2VTdXBwb3J0YCBjbGllbnQgY2FwYWJpbGl0eVxuICAgICAqIHByb3BlcnR5LlxuICAgICAqXG4gICAgICogKk5vdGUgMToqIFRoZSB0ZXh0IGVkaXQncyByYW5nZSBhcyB3ZWxsIGFzIGJvdGggcmFuZ2VzIGZyb20gYW4gaW5zZXJ0XG4gICAgICogcmVwbGFjZSBlZGl0IG11c3QgYmUgYSBbc2luZ2xlIGxpbmVdIGFuZCB0aGV5IG11c3QgY29udGFpbiB0aGUgcG9zaXRpb25cbiAgICAgKiBhdCB3aGljaCBjb21wbGV0aW9uIGhhcyBiZWVuIHJlcXVlc3RlZC5cbiAgICAgKiAqTm90ZSAyOiogSWYgYW4gYEluc2VydFJlcGxhY2VFZGl0YCBpcyByZXR1cm5lZCB0aGUgZWRpdCdzIGluc2VydCByYW5nZVxuICAgICAqIG11c3QgYmUgYSBwcmVmaXggb2YgdGhlIGVkaXQncyByZXBsYWNlIHJhbmdlLCB0aGF0IG1lYW5zIGl0IG11c3QgYmVcbiAgICAgKiBjb250YWluZWQgYW5kIHN0YXJ0aW5nIGF0IHRoZSBzYW1lIHBvc2l0aW9uLlxuICAgICAqXG4gICAgICogQHNpbmNlIDMuMTYuMCBhZGRpdGlvbmFsIHR5cGUgYEluc2VydFJlcGxhY2VFZGl0YFxuICAgICAqL1xuICAgIHRleHRFZGl0PzogVGV4dEVkaXR8SW5zZXJ0UmVwbGFjZUVkaXQ7XG5cbiAgICAvKipcbiAgICAgKiBBbiBvcHRpb25hbCBhcnJheSBvZiBhZGRpdGlvbmFsIHRleHQgZWRpdHMgdGhhdCBhcmUgYXBwbGllZCB3aGVuXG4gICAgICogc2VsZWN0aW5nIHRoaXMgY29tcGxldGlvbi4gRWRpdHMgbXVzdCBub3Qgb3ZlcmxhcCAoaW5jbHVkaW5nIHRoZSBzYW1lXG4gICAgICogaW5zZXJ0IHBvc2l0aW9uKSB3aXRoIHRoZSBtYWluIGVkaXQgbm9yIHdpdGggdGhlbXNlbHZlcy5cbiAgICAgKlxuICAgICAqIEFkZGl0aW9uYWwgdGV4dCBlZGl0cyBzaG91bGQgYmUgdXNlZCB0byBjaGFuZ2UgdGV4dCB1bnJlbGF0ZWQgdG8gdGhlXG4gICAgICogY3VycmVudCBjdXJzb3IgcG9zaXRpb24gKGZvciBleGFtcGxlIGFkZGluZyBhbiBpbXBvcnQgc3RhdGVtZW50IGF0IHRoZVxuICAgICAqIHRvcCBvZiB0aGUgZmlsZSBpZiB0aGUgY29tcGxldGlvbiBpdGVtIHdpbGwgaW5zZXJ0IGFuIHVucXVhbGlmaWVkIHR5cGUpLlxuICAgICAqL1xuICAgIGFkZGl0aW9uYWxUZXh0RWRpdHM/OiBUZXh0RWRpdFtdO1xuXG4gICAgLyoqXG4gICAgICogQW4gb3B0aW9uYWwgc2V0IG9mIGNoYXJhY3RlcnMgdGhhdCB3aGVuIHByZXNzZWQgd2hpbGUgdGhpcyBjb21wbGV0aW9uIGlzXG4gICAgICogYWN0aXZlIHdpbGwgYWNjZXB0IGl0IGZpcnN0IGFuZCB0aGVuIHR5cGUgdGhhdCBjaGFyYWN0ZXIuICpOb3RlKiB0aGF0IGFsbFxuICAgICAqIGNvbW1pdCBjaGFyYWN0ZXJzIHNob3VsZCBoYXZlIGBsZW5ndGg9MWAgYW5kIHRoYXQgc3VwZXJmbHVvdXMgY2hhcmFjdGVyc1xuICAgICAqIHdpbGwgYmUgaWdub3JlZC5cbiAgICAgKi9cbiAgICBjb21taXRDaGFyYWN0ZXJzPzogc3RyaW5nW107XG5cbiAgICAvKipcbiAgICAgKiBBbiBvcHRpb25hbCBjb21tYW5kIHRoYXQgaXMgZXhlY3V0ZWQgKmFmdGVyKiBpbnNlcnRpbmcgdGhpcyBjb21wbGV0aW9uLlxuICAgICAqICpOb3RlKiB0aGF0IGFkZGl0aW9uYWwgbW9kaWZpY2F0aW9ucyB0byB0aGUgY3VycmVudCBkb2N1bWVudCBzaG91bGQgYmVcbiAgICAgKiBkZXNjcmliZWQgd2l0aCB0aGUgYWRkaXRpb25hbFRleHRFZGl0cy1wcm9wZXJ0eS5cbiAgICAgKi9cbiAgICBjb21tYW5kPzogcHJvdG9jb2wuQ29tbWFuZDtcblxuICAgIC8qKlxuICAgICAqIEEgZGF0YSBlbnRyeSBmaWVsZCB0aGF0IGlzIHByZXNlcnZlZCBvbiBhIGNvbXBsZXRpb24gaXRlbSBiZXR3ZWVuXG4gICAgICogYSBjb21wbGV0aW9uIGFuZCBhIGNvbXBsZXRpb24gcmVzb2x2ZSByZXF1ZXN0LlxuICAgICAqL1xuICAgIGRhdGE/OiB1bmtub3duO1xufVxuXG5cbi8vIHRzbGludDpkaXNhYmxlOmpzZG9jLWZvcm1hdFxuLyoqXG4gKiBBIGBNYXJrdXBDb250ZW50YCBsaXRlcmFsIHJlcHJlc2VudHMgYSBzdHJpbmcgdmFsdWUgd2hpY2ggY29udGVudCBpc1xuICogaW50ZXJwcmV0ZWQgYmFzZSBvbiBpdHMga2luZCBmbGFnLiBDdXJyZW50bHkgdGhlIHByb3RvY29sIHN1cHBvcnRzXG4gKiBgcGxhaW50ZXh0YCBhbmQgYG1hcmtkb3duYCBhcyBtYXJrdXAga2luZHMuXG4gKlxuICogSWYgdGhlIGtpbmQgaXMgYG1hcmtkb3duYCB0aGVuIHRoZSB2YWx1ZSBjYW4gY29udGFpbiBmZW5jZWQgY29kZSBibG9ja3MgbGlrZVxuICogaW4gR2l0SHViIGlzc3Vlcy5cbiAqXG4gKiBIZXJlIGlzIGFuIGV4YW1wbGUgaG93IHN1Y2ggYSBzdHJpbmcgY2FuIGJlIGNvbnN0cnVjdGVkIHVzaW5nXG4gKiBKYXZhU2NyaXB0IC8gVHlwZVNjcmlwdDpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGxldCBtYXJrZG93bjogTWFya2Rvd25Db250ZW50ID0ge1xuICogIGtpbmQ6IE1hcmt1cEtpbmQuTWFya2Rvd24sXG4gKiAgdmFsdWU6IFtcbiAqICAgICcjIEhlYWRlcicsXG4gKiAgICAnU29tZSB0ZXh0JyxcbiAqICAgICdgYGB0eXBlc2NyaXB0JyxcbiAqICAgICdzb21lQ29kZSgpOycsXG4gKiAgICAnYGBgJ1xuICogIF0uam9pbignXFxuJylcbiAqIH07XG4gKiBgYGBcbiAqXG4gKiAqUGxlYXNlIE5vdGUqIHRoYXQgY2xpZW50cyBtaWdodCBzYW5pdGl6ZSB0aGUgcmV0dXJuIG1hcmtkb3duLiBBIGNsaWVudCBjb3VsZFxuICogZGVjaWRlIHRvIHJlbW92ZSBIVE1MIGZyb20gdGhlIG1hcmtkb3duIHRvIGF2b2lkIHNjcmlwdCBleGVjdXRpb24uXG4gKi9cbi8vIHRzbGludDplbmFibGU6anNkb2MtZm9ybWF0XG5leHBvcnQgaW50ZXJmYWNlIE1hcmt1cENvbnRlbnQge1xuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSBNYXJrdXBcbiAgICAgKi9cbiAgICBraW5kOiBNYXJrdXBLaW5kO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNvbnRlbnQgaXRzZWxmXG4gICAgICovXG4gICAgdmFsdWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBodHRwczovL21pY3Jvc29mdC5naXRodWIuaW8vbGFuZ3VhZ2Utc2VydmVyLXByb3RvY29sL3NwZWNpZmljYXRpb25zL3NwZWNpZmljYXRpb24tY3VycmVudC8jdGV4dERvY3VtZW50X3NpZ25hdHVyZUhlbHBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTaWduYXR1cmVIZWxwUGFyYW1zIGV4dGVuZHMgVGV4dERvY3VtZW50UG9zaXRpb25QYXJhbXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90b2NvbC5Xb3JrRG9uZVByb2dyZXNzUGFyYW1zIHtcbiAgICAvKipcbiAgICAgKiBUaGUgc2lnbmF0dXJlIGhlbHAgY29udGV4dC4gVGhpcyBpcyBvbmx5IGF2YWlsYWJsZSBpZiB0aGUgY2xpZW50XG4gICAgICogc3BlY2lmaWVzIHRvIHNlbmQgdGhpcyB1c2luZyB0aGUgY2xpZW50IGNhcGFiaWxpdHlcbiAgICAgKiBgdGV4dERvY3VtZW50LnNpZ25hdHVyZUhlbHAuY29udGV4dFN1cHBvcnQgPT09IHRydWVgXG4gICAgICpcbiAgICAgKiBAc2luY2UgMy4xNS4wXG4gICAgICovXG4gICAgY29udGV4dD86IFNpZ25hdHVyZUhlbHBDb250ZXh0O1xufVxuXG4vKipcbiAqIEhvdyBhIHNpZ25hdHVyZSBoZWxwIHdhcyB0cmlnZ2VyZWQuXG4gKlxuICogQHNpbmNlIDMuMTUuMFxuICovXG5leHBvcnQgZW51bSBTaWduYXR1cmVIZWxwVHJpZ2dlcktpbmQge1xuICAvKipcbiAgICogU2lnbmF0dXJlIGhlbHAgd2FzIGludm9rZWQgbWFudWFsbHkgYnkgdGhlIHVzZXIgb3IgYnkgYSBjb21tYW5kLlxuICAgKi9cbiAgSW52b2tlZCA9IDEsXG4gIC8qKlxuICAgKiBTaWduYXR1cmUgaGVscCB3YXMgdHJpZ2dlcmVkIGJ5IGEgdHJpZ2dlciBjaGFyYWN0ZXIuXG4gICAqL1xuICBUcmlnZ2VyQ2hhcmFjdGVyID0gMixcbiAgLyoqXG4gICAqIFNpZ25hdHVyZSBoZWxwIHdhcyB0cmlnZ2VyZWQgYnkgdGhlIGN1cnNvciBtb3Zpbmcgb3IgYnkgdGhlIGRvY3VtZW50XG4gICAqIGNvbnRlbnQgY2hhbmdpbmcuXG4gICAqL1xuICBDb250ZW50Q2hhbmdlID0gMyxcbn1cblxuLyoqXG4gKiBBZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjb250ZXh0IGluIHdoaWNoIGEgc2lnbmF0dXJlIGhlbHAgcmVxdWVzdFxuICogd2FzIHRyaWdnZXJlZC5cbiAqXG4gKiBAc2luY2UgMy4xNS4wXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2lnbmF0dXJlSGVscENvbnRleHQge1xuICAgIC8qKlxuICAgICAqIEFjdGlvbiB0aGF0IGNhdXNlZCBzaWduYXR1cmUgaGVscCB0byBiZSB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgdHJpZ2dlcktpbmQ6IFNpZ25hdHVyZUhlbHBUcmlnZ2VyS2luZDtcblxuICAgIC8qKlxuICAgICAqIENoYXJhY3RlciB0aGF0IGNhdXNlZCBzaWduYXR1cmUgaGVscCB0byBiZSB0cmlnZ2VyZWQuXG4gICAgICpcbiAgICAgKiBUaGlzIGlzIHVuZGVmaW5lZCB3aGVuIHRyaWdnZXJLaW5kICE9PVxuICAgICAqIFNpZ25hdHVyZUhlbHBUcmlnZ2VyS2luZC5UcmlnZ2VyQ2hhcmFjdGVyXG4gICAgICovXG4gICAgdHJpZ2dlckNoYXJhY3Rlcj86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIGB0cnVlYCBpZiBzaWduYXR1cmUgaGVscCB3YXMgYWxyZWFkeSBzaG93aW5nIHdoZW4gaXQgd2FzIHRyaWdnZXJlZC5cbiAgICAgKlxuICAgICAqIFJldHJpZ2dlcnMgb2NjdXIgd2hlbiB0aGUgc2lnbmF0dXJlIGhlbHAgaXMgYWxyZWFkeSBhY3RpdmUgYW5kIGNhbiBiZVxuICAgICAqIGNhdXNlZCBieSBhY3Rpb25zIHN1Y2ggYXMgdHlwaW5nIGEgdHJpZ2dlciBjaGFyYWN0ZXIsIGEgY3Vyc29yIG1vdmUsIG9yXG4gICAgICogZG9jdW1lbnQgY29udGVudCBjaGFuZ2VzLlxuICAgICAqL1xuICAgIGlzUmV0cmlnZ2VyOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnRseSBhY3RpdmUgYFNpZ25hdHVyZUhlbHBgLlxuICAgICAqXG4gICAgICogVGhlIGBhY3RpdmVTaWduYXR1cmVIZWxwYCBoYXMgaXRzIGBTaWduYXR1cmVIZWxwLmFjdGl2ZVNpZ25hdHVyZWAgZmllbGRcbiAgICAgKiB1cGRhdGVkIGJhc2VkIG9uIHRoZSB1c2VyIG5hdmlnYXRpbmcgdGhyb3VnaCBhdmFpbGFibGUgc2lnbmF0dXJlcy5cbiAgICAgKi9cbiAgICBhY3RpdmVTaWduYXR1cmVIZWxwPzogU2lnbmF0dXJlSGVscDtcbn1cblxuLyoqXG4gKiBTaWduYXR1cmUgaGVscCByZXByZXNlbnRzIHRoZSBzaWduYXR1cmUgb2Ygc29tZXRoaW5nXG4gKiBjYWxsYWJsZS4gVGhlcmUgY2FuIGJlIG11bHRpcGxlIHNpZ25hdHVyZSBidXQgb25seSBvbmVcbiAqIGFjdGl2ZSBhbmQgb25seSBvbmUgYWN0aXZlIHBhcmFtZXRlci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTaWduYXR1cmVIZWxwIHtcbiAgICAvKipcbiAgICAgKiBPbmUgb3IgbW9yZSBzaWduYXR1cmVzLiBJZiBubyBzaWduYXR1cmVzIGFyZSBhdmFpbGFibGUgdGhlIHNpZ25hdHVyZSBoZWxwXG4gICAgICogcmVxdWVzdCBzaG91bGQgcmV0dXJuIGBudWxsYC5cbiAgICAgKi9cbiAgICBzaWduYXR1cmVzOiBTaWduYXR1cmVJbmZvcm1hdGlvbltdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGFjdGl2ZSBzaWduYXR1cmUuIElmIG9taXR0ZWQgb3IgdGhlIHZhbHVlIGxpZXMgb3V0c2lkZSB0aGVcbiAgICAgKiByYW5nZSBvZiBgc2lnbmF0dXJlc2AgdGhlIHZhbHVlIGRlZmF1bHRzIHRvIHplcm8gb3IgaXMgaWdub3JlZCBpZlxuICAgICAqIHRoZSBgU2lnbmF0dXJlSGVscGAgaGFzIG5vIHNpZ25hdHVyZXMuXG4gICAgICpcbiAgICAgKiBXaGVuZXZlciBwb3NzaWJsZSBpbXBsZW1lbnRvcnMgc2hvdWxkIG1ha2UgYW4gYWN0aXZlIGRlY2lzaW9uIGFib3V0XG4gICAgICogdGhlIGFjdGl2ZSBzaWduYXR1cmUgYW5kIHNob3VsZG4ndCByZWx5IG9uIGEgZGVmYXVsdCB2YWx1ZS5cbiAgICAgKlxuICAgICAqIEluIGZ1dHVyZSB2ZXJzaW9uIG9mIHRoZSBwcm90b2NvbCB0aGlzIHByb3BlcnR5IG1pZ2h0IGJlY29tZVxuICAgICAqIG1hbmRhdG9yeSB0byBiZXR0ZXIgZXhwcmVzcyB0aGlzLlxuICAgICAqL1xuICAgIGFjdGl2ZVNpZ25hdHVyZT86IHByb3RvY29sLnVpbnRlZ2VyO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGFjdGl2ZSBwYXJhbWV0ZXIgb2YgdGhlIGFjdGl2ZSBzaWduYXR1cmUuIElmIG9taXR0ZWQgb3IgdGhlIHZhbHVlXG4gICAgICogbGllcyBvdXRzaWRlIHRoZSByYW5nZSBvZiBgc2lnbmF0dXJlc1thY3RpdmVTaWduYXR1cmVdLnBhcmFtZXRlcnNgXG4gICAgICogZGVmYXVsdHMgdG8gMCBpZiB0aGUgYWN0aXZlIHNpZ25hdHVyZSBoYXMgcGFyYW1ldGVycy4gSWZcbiAgICAgKiB0aGUgYWN0aXZlIHNpZ25hdHVyZSBoYXMgbm8gcGFyYW1ldGVycyBpdCBpcyBpZ25vcmVkLlxuICAgICAqIEluIGZ1dHVyZSB2ZXJzaW9uIG9mIHRoZSBwcm90b2NvbCB0aGlzIHByb3BlcnR5IG1pZ2h0IGJlY29tZVxuICAgICAqIG1hbmRhdG9yeSB0byBiZXR0ZXIgZXhwcmVzcyB0aGUgYWN0aXZlIHBhcmFtZXRlciBpZiB0aGVcbiAgICAgKiBhY3RpdmUgc2lnbmF0dXJlIGRvZXMgaGF2ZSBhbnkuXG4gICAgICovXG4gICAgYWN0aXZlUGFyYW1ldGVyPzogcHJvdG9jb2wudWludGVnZXI7XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgc2lnbmF0dXJlIG9mIHNvbWV0aGluZyBjYWxsYWJsZS4gQSBzaWduYXR1cmVcbiAqIGNhbiBoYXZlIGEgbGFiZWwsIGxpa2UgYSBmdW5jdGlvbi1uYW1lLCBhIGRvYy1jb21tZW50LCBhbmRcbiAqIGEgc2V0IG9mIHBhcmFtZXRlcnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2lnbmF0dXJlSW5mb3JtYXRpb24ge1xuICAgIC8qKlxuICAgICAqIFRoZSBsYWJlbCBvZiB0aGlzIHNpZ25hdHVyZS4gV2lsbCBiZSBzaG93biBpblxuICAgICAqIHRoZSBVSS5cbiAgICAgKi9cbiAgICBsYWJlbDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGh1bWFuLXJlYWRhYmxlIGRvYy1jb21tZW50IG9mIHRoaXMgc2lnbmF0dXJlLiBXaWxsIGJlIHNob3duXG4gICAgICogaW4gdGhlIFVJIGJ1dCBjYW4gYmUgb21pdHRlZC5cbiAgICAgKi9cbiAgICBkb2N1bWVudGF0aW9uPzogc3RyaW5nfE1hcmt1cENvbnRlbnQ7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcGFyYW1ldGVycyBvZiB0aGlzIHNpZ25hdHVyZS5cbiAgICAgKi9cbiAgICBwYXJhbWV0ZXJzPzogUGFyYW1ldGVySW5mb3JtYXRpb25bXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBpbmRleCBvZiB0aGUgYWN0aXZlIHBhcmFtZXRlci5cbiAgICAgKlxuICAgICAqIElmIHByb3ZpZGVkLCB0aGlzIGlzIHVzZWQgaW4gcGxhY2Ugb2YgYFNpZ25hdHVyZUhlbHAuYWN0aXZlUGFyYW1ldGVyYC5cbiAgICAgKlxuICAgICAqIEBzaW5jZSAzLjE2LjBcbiAgICAgKi9cbiAgICBhY3RpdmVQYXJhbWV0ZXI/OiBwcm90b2NvbC51aW50ZWdlcjtcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgcGFyYW1ldGVyIG9mIGEgY2FsbGFibGUtc2lnbmF0dXJlLiBBIHBhcmFtZXRlciBjYW5cbiAqIGhhdmUgYSBsYWJlbCBhbmQgYSBkb2MtY29tbWVudC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXJhbWV0ZXJJbmZvcm1hdGlvbiB7XG4gICAgLyoqXG4gICAgICogVGhlIGxhYmVsIG9mIHRoaXMgcGFyYW1ldGVyIGluZm9ybWF0aW9uLlxuICAgICAqXG4gICAgICogRWl0aGVyIGEgc3RyaW5nIG9yIGFuIGluY2x1c2l2ZSBzdGFydCBhbmQgZXhjbHVzaXZlIGVuZCBvZmZzZXRzIHdpdGhpblxuICAgICAqIGl0cyBjb250YWluaW5nIHNpZ25hdHVyZSBsYWJlbC4gKHNlZSBTaWduYXR1cmVJbmZvcm1hdGlvbi5sYWJlbCkuIFRoZVxuICAgICAqIG9mZnNldHMgYXJlIGJhc2VkIG9uIGEgVVRGLTE2IHN0cmluZyByZXByZXNlbnRhdGlvbiBhcyBgUG9zaXRpb25gIGFuZFxuICAgICAqIGBSYW5nZWAgZG9lcy5cbiAgICAgKlxuICAgICAqICpOb3RlKjogYSBsYWJlbCBvZiB0eXBlIHN0cmluZyBzaG91bGQgYmUgYSBzdWJzdHJpbmcgb2YgaXRzIGNvbnRhaW5pbmdcbiAgICAgKiBzaWduYXR1cmUgbGFiZWwuIEl0cyBpbnRlbmRlZCB1c2UgY2FzZSBpcyB0byBoaWdobGlnaHQgdGhlIHBhcmFtZXRlclxuICAgICAqIGxhYmVsIHBhcnQgaW4gdGhlIGBTaWduYXR1cmVJbmZvcm1hdGlvbi5sYWJlbGAuXG4gICAgICovXG4gICAgbGFiZWw6IHN0cmluZ3xbcHJvdG9jb2wudWludGVnZXIsIHByb3RvY29sLnVpbnRlZ2VyXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBodW1hbi1yZWFkYWJsZSBkb2MtY29tbWVudCBvZiB0aGlzIHBhcmFtZXRlci4gV2lsbCBiZSBzaG93blxuICAgICAqIGluIHRoZSBVSSBidXQgY2FuIGJlIG9taXR0ZWQuXG4gICAgICovXG4gICAgZG9jdW1lbnRhdGlvbj86IHN0cmluZ3xNYXJrdXBDb250ZW50O1xufVxuXG4vKipcbiAqIGh0dHBzOi8vbWljcm9zb2Z0LmdpdGh1Yi5pby9sYW5ndWFnZS1zZXJ2ZXItcHJvdG9jb2wvc3BlY2lmaWNhdGlvbnMvc3BlY2lmaWNhdGlvbi1jdXJyZW50LyN0ZXh0RG9jdW1lbnRfaG92ZXJcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIb3ZlclBhcmFtcyBleHRlbmRzIFRleHREb2N1bWVudFBvc2l0aW9uUGFyYW1zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvY29sLldvcmtEb25lUHJvZ3Jlc3NQYXJhbXMge31cblxuLyoqXG4gKiBUaGUgcmVzdWx0IG9mIGEgaG92ZXIgcmVxdWVzdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIb3ZlciB7XG4gICAgLyoqXG4gICAgICogVGhlIGhvdmVyJ3MgY29udGVudFxuICAgICAqL1xuICAgIGNvbnRlbnRzOiBNYXJrdXBDb250ZW50O1xuXG4gICAgLyoqXG4gICAgICogQW4gb3B0aW9uYWwgcmFuZ2UgaXMgYSByYW5nZSBpbnNpZGUgYSB0ZXh0IGRvY3VtZW50XG4gICAgICogdGhhdCBpcyB1c2VkIHRvIHZpc3VhbGl6ZSBhIGhvdmVyLCBlLmcuIGJ5IGNoYW5naW5nIHRoZSBiYWNrZ3JvdW5kIGNvbG9yLlxuICAgICAqL1xuICAgIHJhbmdlPzogcHJvdG9jb2wuUmFuZ2U7XG59XG5cbi8qKlxuICogaHR0cHM6Ly9taWNyb3NvZnQuZ2l0aHViLmlvL2xhbmd1YWdlLXNlcnZlci1wcm90b2NvbC9zcGVjaWZpY2F0aW9ucy9zcGVjaWZpY2F0aW9uLTMtMTcvI2RlZmluaXRpb25QYXJhbXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZWZpbml0aW9uUGFyYW1zIGV4dGVuZHMgVGV4dERvY3VtZW50UG9zaXRpb25QYXJhbXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90b2NvbC5Xb3JrRG9uZVByb2dyZXNzUGFyYW1zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG9jb2wuUGFydGlhbFJlc3VsdFBhcmFtcyB7fVxuXG4vKipcbiAqIFBhcmFtcyBmb3IgdGhlIGN1c3RvbSAnZWNob0RvY3VtZW50JyBjb21tZW50IHdoaWNoIHJldHVybnMgdGhlIGN1cnJlbnQgc3RhdGVcbiAqIG9mIHRoZSBzZXJ2ZXIncyB2aWV3IG9mIHRoZSBMU1AgZG9jdW1lbnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRWNob0RvY3VtZW50UGFyYW1zIHt9XG5cbi8qKlxuICogUGFyYW1zIGZvciB0aGUgQ29kZUFjdGlvblJlcXVlc3RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb2RlQWN0aW9uUGFyYW1zIGV4dGVuZHMgcHJvdG9jb2wuV29ya0RvbmVQcm9ncmVzc1BhcmFtcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvY29sLlBhcnRpYWxSZXN1bHRQYXJhbXMge1xuICAgIC8qKlxuICAgICAqIFRoZSBkb2N1bWVudCBpbiB3aGljaCB0aGUgY29tbWFuZCB3YXMgaW52b2tlZC5cbiAgICAgKi9cbiAgICB0ZXh0RG9jdW1lbnQ6IFRleHREb2N1bWVudElkZW50aWZpZXI7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmFuZ2UgZm9yIHdoaWNoIHRoZSBjb21tYW5kIHdhcyBpbnZva2VkLlxuICAgICAqL1xuICAgIHJhbmdlOiBwcm90b2NvbC5SYW5nZTtcblxuICAgIC8qKlxuICAgICAqIENvbnRleHQgY2FycnlpbmcgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi5cbiAgICAgKi9cbiAgICBjb250ZXh0OiBDb2RlQWN0aW9uQ29udGV4dDtcbn1cblxuLyoqXG4gKiBQYXJhbXMgZm9yIHRoZSBSZW5hbWVSZXF1ZXN0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVuYW1lUGFyYW1zIGV4dGVuZHMgVGV4dERvY3VtZW50UG9zaXRpb25QYXJhbXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvY29sLldvcmtEb25lUHJvZ3Jlc3NQYXJhbXMge1xuICAvKipcbiAgICogVGhlIG5ldyBuYW1lIG9mIHRoZSBzeW1ib2wuIElmIHRoZSBnaXZlbiBuYW1lIGlzIG5vdCB2YWxpZCB0aGVcbiAgICogcmVxdWVzdCBtdXN0IHJldHVybiBhIFtSZXNwb25zZUVycm9yXSgjUmVzcG9uc2VFcnJvcikgd2l0aCBhblxuICAgKiBhcHByb3ByaWF0ZSBtZXNzYWdlIHNldC5cbiAgICovXG4gIG5ld05hbWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBBIGNvZGUgYWN0aW9uIHJlcHJlc2VudHMgYSBjaGFuZ2UgdGhhdCBjYW4gYmUgcGVyZm9ybWVkIGluIGNvZGUsIGUuZy4gdG8gZml4XG4gKiBhIHByb2JsZW0gb3IgdG8gcmVmYWN0b3IgY29kZS5cbiAqXG4gKiBBIENvZGVBY3Rpb24gbXVzdCBzZXQgZWl0aGVyIGBlZGl0YCBhbmQvb3IgYSBgY29tbWFuZGAuIElmIGJvdGggYXJlIHN1cHBsaWVkLFxuICogdGhlIGBlZGl0YCBpcyBhcHBsaWVkIGZpcnN0LCB0aGVuIHRoZSBgY29tbWFuZGAgaXMgZXhlY3V0ZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29kZUFjdGlvbiB7XG4gICAgLyoqXG4gICAgICogQSBzaG9ydCwgaHVtYW4tcmVhZGFibGUsIHRpdGxlIGZvciB0aGlzIGNvZGUgYWN0aW9uLlxuICAgICAqL1xuICAgIHRpdGxlOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUga2luZCBvZiB0aGUgY29kZSBhY3Rpb24uXG4gICAgICpcbiAgICAgKiBVc2VkIHRvIGZpbHRlciBjb2RlIGFjdGlvbnMuXG4gICAgICovXG4gICAga2luZD86IENvZGVBY3Rpb25LaW5kO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGRpYWdub3N0aWNzIHRoYXQgdGhpcyBjb2RlIGFjdGlvbiByZXNvbHZlcy5cbiAgICAgKi9cbiAgICBkaWFnbm9zdGljcz86IHByb3RvY29sLkRpYWdub3N0aWNbXTtcblxuICAgIC8qKlxuICAgICAqIE1hcmtzIHRoaXMgYXMgYSBwcmVmZXJyZWQgYWN0aW9uLiBQcmVmZXJyZWQgYWN0aW9ucyBhcmUgdXNlZCBieSB0aGVcbiAgICAgKiBgYXV0byBmaXhgIGNvbW1hbmQgYW5kIGNhbiBiZSB0YXJnZXRlZCBieSBrZXliaW5kaW5ncy5cbiAgICAgKlxuICAgICAqIEEgcXVpY2sgZml4IHNob3VsZCBiZSBtYXJrZWQgcHJlZmVycmVkIGlmIGl0IHByb3Blcmx5IGFkZHJlc3NlcyB0aGVcbiAgICAgKiB1bmRlcmx5aW5nIGVycm9yLiBBIHJlZmFjdG9yaW5nIHNob3VsZCBiZSBtYXJrZWQgcHJlZmVycmVkIGlmIGl0IGlzIHRoZVxuICAgICAqIG1vc3QgcmVhc29uYWJsZSBjaG9pY2Ugb2YgYWN0aW9ucyB0byB0YWtlLlxuICAgICAqXG4gICAgICogQHNpbmNlIDMuMTUuMFxuICAgICAqL1xuICAgIGlzUHJlZmVycmVkPzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIE1hcmtzIHRoYXQgdGhlIGNvZGUgYWN0aW9uIGNhbm5vdCBjdXJyZW50bHkgYmUgYXBwbGllZC5cbiAgICAgKlxuICAgICAqIENsaWVudHMgc2hvdWxkIGZvbGxvdyB0aGUgZm9sbG93aW5nIGd1aWRlbGluZXMgcmVnYXJkaW5nIGRpc2FibGVkIGNvZGVcbiAgICAgKiBhY3Rpb25zOlxuICAgICAqXG4gICAgICogLSBEaXNhYmxlZCBjb2RlIGFjdGlvbnMgYXJlIG5vdCBzaG93biBpbiBhdXRvbWF0aWMgbGlnaHRidWxicyBjb2RlXG4gICAgICogICBhY3Rpb24gbWVudXMuXG4gICAgICpcbiAgICAgKiAtIERpc2FibGVkIGFjdGlvbnMgYXJlIHNob3duIGFzIGZhZGVkIG91dCBpbiB0aGUgY29kZSBhY3Rpb24gbWVudSB3aGVuXG4gICAgICogICB0aGUgdXNlciByZXF1ZXN0IGEgbW9yZSBzcGVjaWZpYyB0eXBlIG9mIGNvZGUgYWN0aW9uLCBzdWNoIGFzXG4gICAgICogICByZWZhY3RvcmluZ3MuXG4gICAgICpcbiAgICAgKiAtIElmIHRoZSB1c2VyIGhhcyBhIGtleWJpbmRpbmcgdGhhdCBhdXRvIGFwcGxpZXMgYSBjb2RlIGFjdGlvbiBhbmQgb25seVxuICAgICAqICAgYSBkaXNhYmxlZCBjb2RlIGFjdGlvbnMgYXJlIHJldHVybmVkLCB0aGUgY2xpZW50IHNob3VsZCBzaG93IHRoZSB1c2VyXG4gICAgICogICBhbiBlcnJvciBtZXNzYWdlIHdpdGggYHJlYXNvbmAgaW4gdGhlIGVkaXRvci5cbiAgICAgKlxuICAgICAqIEBzaW5jZSAzLjE2LjBcbiAgICAgKi9cbiAgICBkaXNhYmxlZD86IHtcblxuICAgICAgLyoqXG4gICAgICAgKiBIdW1hbiByZWFkYWJsZSBkZXNjcmlwdGlvbiBvZiB3aHkgdGhlIGNvZGUgYWN0aW9uIGlzIGN1cnJlbnRseVxuICAgICAgICogZGlzYWJsZWQuXG4gICAgICAgKlxuICAgICAgICogVGhpcyBpcyBkaXNwbGF5ZWQgaW4gdGhlIGNvZGUgYWN0aW9ucyBVSS5cbiAgICAgICAqL1xuICAgICAgcmVhc29uOiBzdHJpbmc7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB3b3Jrc3BhY2UgZWRpdCB0aGlzIGNvZGUgYWN0aW9uIHBlcmZvcm1zLlxuICAgICAqL1xuICAgIGVkaXQ/OiB3b3Jrc3BhY2UuV29ya3NwYWNlRWRpdDtcblxuICAgIC8qKlxuICAgICAqIEEgY29tbWFuZCB0aGlzIGNvZGUgYWN0aW9uIGV4ZWN1dGVzLiBJZiBhIGNvZGUgYWN0aW9uXG4gICAgICogcHJvdmlkZXMgYW4gZWRpdCBhbmQgYSBjb21tYW5kLCBmaXJzdCB0aGUgZWRpdCBpc1xuICAgICAqIGV4ZWN1dGVkIGFuZCB0aGVuIHRoZSBjb21tYW5kLlxuICAgICAqL1xuICAgIGNvbW1hbmQ/OiBwcm90b2NvbC5Db21tYW5kO1xuXG4gICAgLyoqXG4gICAgICogQSBkYXRhIGVudHJ5IGZpZWxkIHRoYXQgaXMgcHJlc2VydmVkIG9uIGEgY29kZSBhY3Rpb24gYmV0d2VlblxuICAgICAqIGEgYHRleHREb2N1bWVudC9jb2RlQWN0aW9uYCBhbmQgYSBgY29kZUFjdGlvbi9yZXNvbHZlYCByZXF1ZXN0LlxuICAgICAqXG4gICAgICogQHNpbmNlIDMuMTYuMFxuICAgICAqL1xuICAgIGRhdGE/OiB1bmtub3duO1xufVxuLy8gdHNsaW50OmVuYWJsZTplbmZvcmNlLW5hbWUtY2FzaW5nXG4iXX0= |