UNPKG

ngx-soap

Version:

SOAP service for Angular

159 lines 24.8 kB
'use strict'; export class NamespaceScope { constructor(parent) { this.getNamespaceURI = function (prefix, localOnly) { switch (prefix) { case 'xml': return 'http://www.w3.org/XML/1998/namespace'; case 'xmlns': return 'http://www.w3.org/2000/xmlns/'; default: var nsUri = this.namespaces[prefix]; /*jshint -W116 */ if (nsUri != null) { return nsUri.uri; } else if (!localOnly && this.parent) { return this.parent.getNamespaceURI(prefix); } else { return null; } } }; this.getNamespaceMapping = function (prefix) { switch (prefix) { case 'xml': return { uri: 'http://www.w3.org/XML/1998/namespace', prefix: 'xml', declared: true }; case 'xmlns': return { uri: 'http://www.w3.org/2000/xmlns/', prefix: 'xmlns', declared: true }; default: var mapping = this.namespaces[prefix]; /*jshint -W116 */ if (mapping != null) { return mapping; } else if (this.parent) { return this.parent.getNamespaceMapping(prefix); } else { return null; } } }; this.getPrefix = function (nsUri, localOnly) { switch (nsUri) { case 'http://www.w3.org/XML/1998/namespace': return 'xml'; case 'http://www.w3.org/2000/xmlns/': return 'xmlns'; default: for (var p in this.namespaces) { if (this.namespaces[p].uri === nsUri) { return p; } } if (!localOnly && this.parent) { return this.parent.getPrefix(nsUri); } else { return null; } } }; if (!(this instanceof NamespaceScope)) { return new NamespaceScope(parent); } this.parent = parent; this.namespaces = {}; } } export class NamespaceContext { constructor() { this.addNamespace = function (prefix, nsUri, localOnly) { if (this.getNamespaceURI(prefix, localOnly) === nsUri) { return false; } if (this.currentScope) { this.currentScope.namespaces[prefix] = { uri: nsUri, prefix: prefix, declared: false }; return true; } return false; }; this.pushContext = function () { var scope = new NamespaceScope(this.currentScope); this.scopes.push(scope); this.currentScope = scope; return scope; }; this.popContext = function () { var scope = this.scopes.pop(); if (scope) { this.currentScope = scope.parent; } else { this.currentScope = null; } return scope; }; this.getNamespaceURI = function (prefix, localOnly) { return this.currentScope && this.currentScope.getNamespaceURI(prefix, localOnly); }; this.getPrefix = function (nsUri, localOnly) { return this.currentScope && this.currentScope.getPrefix(nsUri, localOnly); }; this.registerNamespace = function (nsUri) { var prefix = this.getPrefix(nsUri); if (prefix) { // If the namespace has already mapped to a prefix return prefix; } else { // Try to generate a unique namespace while (true) { prefix = 'ns' + (++this.prefixCount); if (!this.getNamespaceURI(prefix)) { // The prefix is not used break; } } } this.addNamespace(prefix, nsUri, true); return prefix; }; this.declareNamespace = function (prefix, nsUri) { if (this.currentScope) { var mapping = this.currentScope.getNamespaceMapping(prefix); if (mapping && mapping.uri === nsUri && mapping.declared) { return false; } this.currentScope.namespaces[prefix] = { uri: nsUri, prefix: prefix, declared: true }; return true; } return false; }; if (!(this instanceof NamespaceContext)) { return new NamespaceContext(); } this.scopes = []; this.pushContext(); this.prefixCount = 0; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnNjb250ZXh0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNvYXAvc3JjL2xpYi9zb2FwL25zY29udGV4dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZLENBQUM7QUFFYixNQUFNLE9BQU8sY0FBYztJQUd6QixZQUFZLE1BQVc7UUFRdkIsb0JBQWUsR0FBRyxVQUFTLE1BQU0sRUFBRSxTQUFTO1lBQzFDLFFBQVEsTUFBTSxFQUFFO2dCQUNkLEtBQUssS0FBSztvQkFDUixPQUFPLHNDQUFzQyxDQUFDO2dCQUNoRCxLQUFLLE9BQU87b0JBQ1YsT0FBTywrQkFBK0IsQ0FBQztnQkFDekM7b0JBQ0UsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDcEMsaUJBQWlCO29CQUNqQixJQUFJLEtBQUssSUFBSSxJQUFJLEVBQUU7d0JBQ2pCLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQztxQkFDbEI7eUJBQU0sSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO3dCQUNwQyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO3FCQUM1Qzt5QkFBTTt3QkFDTCxPQUFPLElBQUksQ0FBQztxQkFDYjthQUNKO1FBQ0gsQ0FBQyxDQUFBO1FBRUQsd0JBQW1CLEdBQUcsVUFBUyxNQUFNO1lBQ25DLFFBQVEsTUFBTSxFQUFFO2dCQUNkLEtBQUssS0FBSztvQkFDUixPQUFPO3dCQUNMLEdBQUcsRUFBRSxzQ0FBc0M7d0JBQzNDLE1BQU0sRUFBRSxLQUFLO3dCQUNiLFFBQVEsRUFBRSxJQUFJO3FCQUNmLENBQUM7Z0JBQ0osS0FBSyxPQUFPO29CQUNWLE9BQU87d0JBQ0wsR0FBRyxFQUFFLCtCQUErQjt3QkFDcEMsTUFBTSxFQUFFLE9BQU87d0JBQ2YsUUFBUSxFQUFFLElBQUk7cUJBQ2YsQ0FB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WUFBWSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsR0FBRztvQkFDckMsR0FBRyxFQUFFLEtBQUs7b0JBQ1YsTUFBTSxFQUFFLE1BQU07b0JBQ2QsUUFBUSxFQUFFLElBQUk7aUJBQ2YsQ0FBQztnQkFDRixPQUFPLElBQUksQ0FBQzthQUNiO1lBQ0QsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDLENBQUE7UUFqRkMsSUFBSSxDQUFDLENBQUMsSUFBSSxZQUFZLGdCQUFnQixDQUFDLEVBQUU7WUFDdkMsT0FBTyxJQUFJLGdCQUFnQixFQUFFLENBQUM7U0FDL0I7UUFDRCxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7SUFDdkIsQ0FBQztDQTRFRiIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0IGNsYXNzIE5hbWVzcGFjZVNjb3BlIHtcbiAgcGFyZW50OiBhbnk7XG4gIG5hbWVzcGFjZXM6IGFueTtcbiAgY29uc3RydWN0b3IocGFyZW50OiBhbnkpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgTmFtZXNwYWNlU2NvcGUpKSB7XG4gICAgICByZXR1cm4gbmV3IE5hbWVzcGFjZVNjb3BlKHBhcmVudCk7XG4gICAgfVxuICAgIHRoaXMucGFyZW50ID0gcGFyZW50O1xuICAgIHRoaXMubmFtZXNwYWNlcyA9IHt9OyAgXG4gIH1cblxuICBnZXROYW1lc3BhY2VVUkkgPSBmdW5jdGlvbihwcmVmaXgsIGxvY2FsT25seSkge1xuICAgIHN3aXRjaCAocHJlZml4KSB7XG4gICAgICBjYXNlICd4bWwnOlxuICAgICAgICByZXR1cm4gJ2h0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSc7XG4gICAgICBjYXNlICd4bWxucyc6XG4gICAgICAgIHJldHVybiAnaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8nO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdmFyIG5zVXJpID0gdGhpcy5uYW1lc3BhY2VzW3ByZWZpeF07XG4gICAgICAgIC8qanNoaW50IC1XMTE2ICovXG4gICAgICAgIGlmIChuc1VyaSAhPSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIG5zVXJpLnVyaTtcbiAgICAgICAgfSBlbHNlIGlmICghbG9jYWxPbmx5ICYmIHRoaXMucGFyZW50KSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50LmdldE5hbWVzcGFjZVVSSShwcmVmaXgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0TmFtZXNwYWNlTWFwcGluZyA9IGZ1bmN0aW9uKHByZWZpeCkge1xuICAgIHN3aXRjaCAocHJlZml4KSB7XG4gICAgICBjYXNlICd4bWwnOlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHVyaTogJ2h0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZScsXG4gICAgICAgICAgcHJlZml4OiAneG1sJyxcbiAgICAgICAgICBkZWNsYXJlZDogdHJ1ZVxuICAgICAgICB9O1xuICAgICAgY2FzZSAneG1sbnMnOlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHVyaTogJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvJyxcbiAgICAgICAgICBwcmVmaXg6ICd4bWxucycsXG4gICAgICAgICAgZGVjbGFyZWQ6IHRydWVcbiAgICAgICAgfTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHZhciBtYXBwaW5nID0gdGhpcy5uYW1lc3BhY2VzW3ByZWZpeF07XG4gICAgICAgIC8qanNoaW50IC1XMTE2ICovXG4gICAgICAgIGlmIChtYXBwaW5nICE9IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gbWFwcGluZztcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnBhcmVudCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLnBhcmVudC5nZXROYW1lc3BhY2VNYXBwaW5nKHByZWZpeCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXRQcmVmaXggPSBmdW5jdGlvbihuc1VyaSwgbG9jYWxPbmx5KSB7XG4gICAgc3dpdGNoIChuc1VyaSkge1xuICAgICAgY2FzZSAnaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlJzpcbiAgICAgICAgcmV0dXJuICd4bWwnO1xuICAgICAgY2FzZSAnaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8nOlxuICAgICAgICByZXR1cm4gJ3htbG5zJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGZvciAodmFyIHAgaW4gdGhpcy5uYW1lc3BhY2VzKSB7XG4gICAgICAgICAgaWYgKHRoaXMubmFtZXNwYWNlc1twXS51cmkgPT09IG5zVXJpKSB7XG4gICAgICAgICAgICByZXR1cm4gcDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFsb2NhbE9ubHkgJiYgdGhpcy5wYXJlbnQpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQuZ2V0UHJlZml4KG5zVXJpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTmFtZXNwYWNlQ29udGV4dCB7XG4gIHNjb3BlczogYW55W107XG4gIHByZWZpeENvdW50OiBudW1iZXI7IFxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBOYW1lc3BhY2VDb250ZXh0KSkge1xuICAgICAgcmV0dXJuIG5ldyBOYW1lc3BhY2VDb250ZXh0KCk7XG4gICAgfVxuICAgIHRoaXMuc2NvcGVzID0gW107XG4gICAgdGhpcy5wdXNoQ29udGV4dCgpO1xuICAgIHRoaXMucHJlZml4Q291bnQgPSAwO1xuICB9XG5cbiAgYWRkTmFtZXNwYWNlID0gZnVuY3Rpb24ocHJlZml4LCBuc1VyaSwgbG9jYWxPbmx5KSB7XG4gICAgaWYgKHRoaXMuZ2V0TmFtZXNwYWNlVVJJKHByZWZpeCwgbG9jYWxPbmx5KSA9PT0gbnNVcmkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuY3VycmVudFNjb3BlKSB7XG4gICAgICB0aGlzLmN1cnJlbnRTY29wZS5uYW1lc3BhY2VzW3ByZWZpeF0gPSB7XG4gICAgICAgIHVyaTogbnNVcmksXG4gICAgICAgIHByZWZpeDogcHJlZml4LFxuICAgICAgICBkZWNsYXJlZDogZmFsc2VcbiAgICAgIH07XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVzaENvbnRleHQgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgc2NvcGUgPSBuZXcgTmFtZXNwYWNlU2NvcGUodGhpcy5jdXJyZW50U2NvcGUpO1xuICAgIHRoaXMuc2NvcGVzLnB1c2goc2NvcGUpO1xuICAgIHRoaXMuY3VycmVudFNjb3BlID0gc2NvcGU7XG4gICAgcmV0dXJuIHNjb3BlO1xuICB9XG5cbiAgcG9wQ29udGV4dCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBzY29wZSA9IHRoaXMuc2NvcGVzLnBvcCgpO1xuICAgIGlmIChzY29wZSkge1xuICAgICAgdGhpcy5jdXJyZW50U2NvcGUgPSBzY29wZS5wYXJlbnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY3VycmVudFNjb3BlID0gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIHNjb3BlO1xuICB9XG5cbiAgZ2V0TmFtZXNwYWNlVVJJID0gZnVuY3Rpb24ocHJlZml4LCBsb2NhbE9ubHkpIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50U2NvcGUgJiYgdGhpcy5jdXJyZW50U2NvcGUuZ2V0TmFtZXNwYWNlVVJJKHByZWZpeCwgbG9jYWxPbmx5KTtcbiAgfVxuXG4gIGdldFByZWZpeCA9IGZ1bmN0aW9uKG5zVXJpLCBsb2NhbE9ubHkpIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50U2NvcGUgJiYgdGhpcy5jdXJyZW50U2NvcGUuZ2V0UHJlZml4KG5zVXJpLCBsb2NhbE9ubHkpO1xuICB9XG4gIFxuICByZWdpc3Rlck5hbWVzcGFjZSA9IGZ1bmN0aW9uKG5zVXJpKSB7XG4gICAgdmFyIHByZWZpeCA9IHRoaXMuZ2V0UHJlZml4KG5zVXJpKTtcbiAgICBpZiAocHJlZml4KSB7XG4gICAgICAvLyBJZiB0aGUgbmFtZXNwYWNlIGhhcyBhbHJlYWR5IG1hcHBlZCB0byBhIHByZWZpeFxuICAgICAgcmV0dXJuIHByZWZpeDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVHJ5IHRvIGdlbmVyYXRlIGEgdW5pcXVlIG5hbWVzcGFjZVxuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgcHJlZml4ID0gJ25zJyArICgrK3RoaXMucHJlZml4Q291bnQpO1xuICAgICAgICBpZiAoIXRoaXMuZ2V0TmFtZXNwYWNlVVJJKHByZWZpeCkpIHtcbiAgICAgICAgICAvLyBUaGUgcHJlZml4IGlzIG5vdCB1c2VkXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5hZGROYW1lc3BhY2UocHJlZml4LCBuc1VyaSwgdHJ1ZSk7XG4gICAgcmV0dXJuIHByZWZpeDtcbiAgfVxuXG4gIGRlY2xhcmVOYW1lc3BhY2UgPSBmdW5jdGlvbihwcmVmaXgsIG5zVXJpKSB7XG4gICAgaWYgKHRoaXMuY3VycmVudFNjb3BlKSB7XG4gICAgICB2YXIgbWFwcGluZyA9IHRoaXMuY3VycmVudFNjb3BlLmdldE5hbWVzcGFjZU1hcHBpbmcocHJlZml4KTtcbiAgICAgIGlmIChtYXBwaW5nICYmIG1hcHBpbmcudXJpID09PSBuc1VyaSAmJiBtYXBwaW5nLmRlY2xhcmVkKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY3VycmVudFNjb3BlLm5hbWVzcGFjZXNbcHJlZml4XSA9IHtcbiAgICAgICAgdXJpOiBuc1VyaSxcbiAgICAgICAgcHJlZml4OiBwcmVmaXgsXG4gICAgICAgIGRlY2xhcmVkOiB0cnVlXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKipcbiAqIFNjb3BlIGZvciBYTUwgbmFtZXNwYWNlc1xuICogQHBhcmFtIFtwYXJlbnRdIFBhcmVudCBzY29wZVxuICogXG4gKi9cbi8vIGV4cG9ydCBmdW5jdGlvbiBOYW1lc3BhY2VTY29wZShwYXJlbnQpIHtcbi8vICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIE5hbWVzcGFjZVNjb3BlKSkge1xuLy8gICAgIHJldHVybiBOYW1lc3BhY2VTY29wZShwYXJlbnQpO1xuLy8gICB9XG4vLyAgIHRoaXMucGFyZW50ID0gcGFyZW50O1xuLy8gICB0aGlzLm5hbWVzcGFjZXMgPSB7fTtcbi8vIH1cblxuLy8gLyoqXG4vLyAgKiBOYW1lc3BhY2UgY29udGV4dCB0aGF0IG1hbmFnZXMgaGllcmFyY2hpY2FsIHNjb3Blc1xuLy8gICogIHtOYW1lc3BhY2VDb250ZXh0fVxuLy8gICovXG4vLyBleHBvcnQgZnVuY3Rpb24gTmFtZXNwYWNlQ29udGV4dCgpIHtcbi8vICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIE5hbWVzcGFjZUNvbnRleHQpKSB7XG4vLyAgICAgcmV0dXJuIE5hbWVzcGFjZUNvbnRleHQoKTtcbi8vICAgfVxuLy8gICB0aGlzLnNjb3BlcyA9IFtdO1xuLy8gICB0aGlzLnB1c2hDb250ZXh0KCk7XG4vLyAgIHRoaXMucHJlZml4Q291bnQgPSAwO1xuLy8gfVxuXG4vLyAvKipcbi8vICAqIExvb2sgdXAgdGhlIG5hbWVzcGFjZSBVUkkgYnkgcHJlZml4XG4vLyAgKiBAcGFyYW0gIHByZWZpeCBOYW1lc3BhY2UgcHJlZml4XG4vLyAgKiBAcGFyYW0gIFtsb2NhbE9ubHldIFNlYXJjaCBjdXJyZW50IHNjb3BlIG9ubHlcbi8vICAqICAgTmFtZXNwYWNlIFVSSVxuLy8gICovXG4vLyBOYW1lc3BhY2VTY29wZS5wcm90b3R5cGUuZ2V0TmFtZXNwYWNlVVJJID0gZnVuY3Rpb24ocHJlZml4LCBsb2NhbE9ubHkpIHtcbi8vICAgc3dpdGNoIChwcmVmaXgpIHtcbi8vICAgICBjYXNlICd4bWwnOlxuLy8gICAgICAgcmV0dXJuICdodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UnO1xuLy8gICAgIGNhc2UgJ3htbG5zJzpcbi8vICAgICAgIHJldHVybiAnaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8nO1xuLy8gICAgIGRlZmF1bHQ6XG4vLyAgICAgICB2YXIgbnNVcmkgPSB0aGlzLm5hbWVzcGFjZXNbcHJlZml4XTtcbi8vICAgICAgIC8qanNoaW50IC1XMTE2ICovXG4vLyAgICAgICBpZiAobnNVcmkgIT0gbnVsbCkge1xuLy8gICAgICAgICByZXR1cm4gbnNVcmkudXJpO1xuLy8gICAgICAgfSBlbHNlIGlmICghbG9jYWxPbmx5ICYmIHRoaXMucGFyZW50KSB7XG4vLyAgICAgICAgIHJldHVybiB0aGlzLnBhcmVudC5nZXROYW1lc3BhY2VVUkkocHJlZml4KTtcbi8vICAgICAgIH0gZWxzZSB7XG4vLyAgICAgICAgIHJldHVybiBudWxsO1xuLy8gICAgICAgfVxuLy8gICB9XG4vLyB9O1xuXG4vLyBOYW1lc3BhY2VTY29wZS5wcm90b3R5cGUuZ2V0TmFtZXNwYWNlTWFwcGluZyA9IGZ1bmN0aW9uKHByZWZpeCkge1xuLy8gICBzd2l0Y2ggKHByZWZpeCkge1xuLy8gICAgIGNhc2UgJ3htbCc6XG4vLyAgICAgICByZXR1cm4ge1xuLy8gICAgICAgICB1cmk6ICdodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UnLFxuLy8gICAgICAgICBwcmVmaXg6ICd4bWwnLFxuLy8gICAgICAgICBkZWNsYXJlZDogdHJ1ZVxuLy8gICAgICAgfTtcbi8vICAgICBjYXNlICd4bWxucyc6XG4vLyAgICAgICByZXR1cm4ge1xuLy8gICAgICAgICB1cmk6ICdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLycsXG4vLyAgICAgICAgIHByZWZpeDogJ3htbG5zJyxcbi8vICAgICAgICAgZGVjbGFyZWQ6IHRydWVcbi8vICAgICAgIH07XG4vLyAgICAgZGVmYXVsdDpcbi8vICAgICAgIHZhciBtYXBwaW5nID0gdGhpcy5uYW1lc3BhY2VzW3ByZWZpeF07XG4vLyAgICAgICAvKmpzaGludCAtVzExNiAqL1xuLy8gICAgICAgaWYgKG1hcHBpbmcgIT0gbnVsbCkge1xuLy8gICAgICAgICByZXR1cm4gbWFwcGluZztcbi8vICAgICAgIH0gZWxzZSBpZiAodGhpcy5wYXJlbnQpIHtcbi8vICAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50LmdldE5hbWVzcGFjZU1hcHBpbmcocHJlZml4KTtcbi8vICAgICAgIH0gZWxzZSB7XG4vLyAgICAgICAgIHJldHVybiBudWxsO1xuLy8gICAgICAgfVxuLy8gICB9XG4vLyB9O1xuXG4vLyAvKipcbi8vICAqIExvb2sgdXAgdGhlIG5hbWVzcGFjZSBwcmVmaXggYnkgVVJJXG4vLyAgKiBAcGFyYW0gIG5zVXJpIE5hbWVzcGFjZSBVUklcbi8vICAqIEBwYXJhbSAgW2xvY2FsT25seV0gU2VhcmNoIGN1cnJlbnQgc2NvcGUgb25seVxuLy8gICogICBOYW1lc3BhY2UgcHJlZml4XG4vLyAgKi9cbi8vIE5hbWVzcGFjZVNjb3BlLnByb3RvdHlwZS5nZXRQcmVmaXggPSBmdW5jdGlvbihuc1VyaSwgbG9jYWxPbmx5KSB7XG4vLyAgIHN3aXRjaCAobnNVcmkpIHtcbi8vICAgICBjYXNlICdodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UnOlxuLy8gICAgICAgcmV0dXJuICd4bWwnO1xuLy8gICAgIGNhc2UgJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvJzpcbi8vICAgICAgIHJldHVybiAneG1sbnMnO1xuLy8gICAgIGRlZmF1bHQ6XG4vLyAgICAgICBmb3IgKHZhciBwIGluIHRoaXMubmFtZXNwYWNlcykge1xuLy8gICAgICAgICBpZiAodGhpcy5uYW1lc3BhY2VzW3BdLnVyaSA9PT0gbnNVcmkpIHtcbi8vICAgICAgICAgICByZXR1cm4gcDtcbi8vICAgICAgICAgfVxuLy8gICAgICAgfVxuLy8gICAgICAgaWYgKCFsb2NhbE9ubHkgJiYgdGhpcy5wYXJlbnQpIHtcbi8vICAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50LmdldFByZWZpeChuc1VyaSk7XG4vLyAgICAgICB9IGVsc2Uge1xuLy8gICAgICAgICByZXR1cm4gbnVsbDtcbi8vICAgICAgIH1cbi8vICAgfVxuLy8gfTtcblxuLy8gLyoqXG4vLyAgKiBBZGQgYSBwcmVmaXgvVVJJIG5hbWVzcGFjZSBtYXBwaW5nXG4vLyAgKiBAcGFyYW0gIHByZWZpeCBOYW1lc3BhY2UgcHJlZml4XG4vLyAgKiBAcGFyYW0gIG5zVXJpIE5hbWVzcGFjZSBVUklcbi8vICAqIEBwYXJhbSAgW2xvY2FsT25seV0gU2VhcmNoIGN1cnJlbnQgc2NvcGUgb25seVxuLy8gICogIHtib29sZWFufSB0cnVlIGlmIHRoZSBtYXBwaW5nIGlzIGFkZGVkIG9yIGZhbHNlIGlmIHRoZSBtYXBwaW5nXG4vLyAgKiBhbHJlYWR5IGV4aXN0c1xuLy8gICovXG4vLyBOYW1lc3BhY2VDb250ZXh0LnByb3RvdHlwZS5hZGROYW1lc3BhY2UgPSBmdW5jdGlvbihwcmVmaXgsIG5zVXJpLCBsb2NhbE9ubHkpIHtcbi8vICAgaWYgKHRoaXMuZ2V0TmFtZXNwYWNlVVJJKHByZWZpeCwgbG9jYWxPbmx5KSA9PT0gbnNVcmkpIHtcbi8vICAgICByZXR1cm4gZmFsc2U7XG4vLyAgIH1cbi8vICAgaWYgKHRoaXMuY3VycmVudFNjb3BlKSB7XG4vLyAgICAgdGhpcy5jdXJyZW50U2NvcGUubmFtZXNwYWNlc1twcmVmaXhdID0ge1xuLy8gICAgICAgdXJpOiBuc1VyaSxcbi8vICAgICAgIHByZWZpeDogcHJlZml4LFxuLy8gICAgICAgZGVjbGFyZWQ6IGZhbHNlXG4vLyAgICAgfTtcbi8vICAgICByZXR1cm4gdHJ1ZTtcbi8vICAgfVxuLy8gICByZXR1cm4gZmFsc2U7XG4vLyB9O1xuXG4vLyAvKipcbi8vICAqIFB1c2ggYSBzY29wZSBpbnRvIHRoZSBjb250ZXh0XG4vLyAgKiAgVGhlIGN1cnJlbnQgc2NvcGVcbi8vICAqL1xuLy8gTmFtZXNwYWNlQ29udGV4dC5wcm90b3R5cGUucHVzaENvbnRleHQgPSBmdW5jdGlvbigpIHtcbi8vICAgdmFyIHNjb3BlID0gTmFtZXNwYWNlU2NvcGUodGhpcy5jdXJyZW50U2NvcGUpO1xuLy8gICB0aGlzLnNjb3Blcy5wdXNoKHNjb3BlKTtcbi8vICAgdGhpcy5jdXJyZW50U2NvcGUgPSBzY29wZTtcbi8vICAgcmV0dXJuIHNjb3BlO1xuLy8gfTtcblxuLy8gLyoqXG4vLyAgKiBQb3AgYSBzY29wZSBvdXQgb2YgdGhlIGNvbnRleHRcbi8vICAqICAgVGhlIHJlbW92ZWQgc2NvcGVcbi8vICAqL1xuLy8gTmFtZXNwYWNlQ29udGV4dC5wcm90b3R5cGUucG9wQ29udGV4dCA9IGZ1bmN0aW9uKCkge1xuLy8gICB2YXIgc2NvcGUgPSB0aGlzLnNjb3Blcy5wb3AoKTtcbi8vICAgaWYgKHNjb3BlKSB7XG4vLyAgICAgdGhpcy5jdXJyZW50U2NvcGUgPSBzY29wZS5wYXJlbnQ7XG4vLyAgIH0gZWxzZSB7XG4vLyAgICAgdGhpcy5jdXJyZW50U2NvcGUgPSBudWxsO1xuLy8gICB9XG4vLyAgIHJldHVybiBzY29wZTtcbi8vIH07XG5cbi8vIC8qKlxuLy8gICogTG9vayB1cCB0aGUgbmFtZXNwYWNlIFVSSSBieSBwcmVmaXhcbi8vICAqIEBwYXJhbSAgcHJlZml4IE5hbWVzcGFjZSBwcmVmaXhcbi8vICAqIEBwYXJhbSAgW2xvY2FsT25seV0gU2VhcmNoIGN1cnJlbnQgc2NvcGUgb25seVxuLy8gICogICBOYW1lc3BhY2UgVVJJXG4vLyAgKi9cbi8vIE5hbWVzcGFjZUNvbnRleHQucHJvdG90eXBlLmdldE5hbWVzcGFjZVVSSSA9IGZ1bmN0aW9uKHByZWZpeCwgbG9jYWxPbmx5KSB7XG4vLyAgIHJldHVybiB0aGlzLmN1cnJlbnRTY29wZSAmJiB0aGlzLmN1cnJlbnRTY29wZS5nZXROYW1lc3BhY2VVUkkocHJlZml4LCBsb2NhbE9ubHkpO1xuLy8gfTtcblxuLy8gLyoqXG4vLyAgKiBMb29rIHVwIHRoZSBuYW1lc3BhY2UgcHJlZml4IGJ5IFVSSVxuLy8gICogQHBhcmFtICBuc1VSSSBOYW1lc3BhY2UgVVJJXG4vLyAgKiBAcGFyYW0gIFtsb2NhbE9ubHldIFNlYXJjaCBjdXJyZW50IHNjb3BlIG9ubHlcbi8vICAqICAgTmFtZXNwYWNlIHByZWZpeFxuLy8gICovXG4vLyBOYW1lc3BhY2VDb250ZXh0LnByb3RvdHlwZS5nZXRQcmVmaXggPSBmdW5jdGlvbihuc1VyaSwgbG9jYWxPbmx5KSB7XG4vLyAgIHJldHVybiB0aGlzLmN1cnJlbnRTY29wZSAmJiB0aGlzLmN1cnJlbnRTY29wZS5nZXRQcmVmaXgobnNVcmksIGxvY2FsT25seSk7XG4vLyB9O1xuXG4vLyAvKipcbi8vICAqIFJlZ2lzdGVyIGEgbmFtZXNwYWNlXG4vLyAgKiBAcGFyYW0gIG5zVXJpIE5hbWVzcGFjZSBVUklcbi8vICAqICAgVGhlIG1hdGNoaW5nIG9yIGdlbmVyYXRlZCBuYW1lc3BhY2UgcHJlZml4XG4vLyAgKi9cbi8vIE5hbWVzcGFjZUNvbnRleHQucHJvdG90eXBlLnJlZ2lzdGVyTmFtZXNwYWNlID0gZnVuY3Rpb24obnNVcmkpIHtcbi8vICAgdmFyIHByZWZpeCA9IHRoaXMuZ2V0UHJlZml4KG5zVXJpKTtcbi8vICAgaWYgKHByZWZpeCkge1xuLy8gICAgIC8vIElmIHRoZSBuYW1lc3BhY2UgaGFzIGFscmVhZHkgbWFwcGVkIHRvIGEgcHJlZml4XG4vLyAgICAgcmV0dXJuIHByZWZpeDtcbi8vICAgfSBlbHNlIHtcbi8vICAgICAvLyBUcnkgdG8gZ2VuZXJhdGUgYSB1bmlxdWUgbmFtZXNwYWNlXG4vLyAgICAgd2hpbGUgKHRydWUpIHtcbi8vICAgICAgIHByZWZpeCA9ICducycgKyAoKyt0aGlzLnByZWZpeENvdW50KTtcbi8vICAgICAgIGlmICghdGhpcy5nZXROYW1lc3BhY2VVUkkocHJlZml4KSkge1xuLy8gICAgICAgICAvLyBUaGUgcHJlZml4IGlzIG5vdCB1c2VkXG4vLyAgICAgICAgIGJyZWFrO1xuLy8gICAgICAgfVxuLy8gICAgIH1cbi8vICAgfVxuLy8gICB0aGlzLmFkZE5hbWVzcGFjZShwcmVmaXgsIG5zVXJpLCB0cnVlKTtcbi8vICAgcmV0dXJuIHByZWZpeDtcbi8vIH07XG5cbi8vIC8qKlxuLy8gICogRGVjbGFyZSBhIG5hbWVzcGFjZSBwcmVmaXgvdXJpIG1hcHBpbmdcbi8vICAqIEBwYXJhbSAgcHJlZml4IE5hbWVzcGFjZSBwcmVmaXhcbi8vICAqIEBwYXJhbSAgbnNVcmkgTmFtZXNwYWNlIFVSSVxuLy8gICogICB0cnVlIGlmIHRoZSBkZWNsYXJhdGlvbiBpcyBjcmVhdGVkXG4vLyAgKi9cbi8vIE5hbWVzcGFjZUNvbnRleHQucHJvdG90eXBlLmRlY2xhcmVOYW1lc3BhY2UgPSBmdW5jdGlvbihwcmVmaXgsIG5zVXJpKSB7XG4vLyAgIGlmICh0aGlzLmN1cnJlbnRTY29wZSkge1xuLy8gICAgIHZhciBtYXBwaW5nID0gdGhpcy5jdXJyZW50U2NvcGUuZ2V0TmFtZXNwYWNlTWFwcGluZyhwcmVmaXgpO1xuLy8gICAgIGlmIChtYXBwaW5nICYmIG1hcHBpbmcudXJpID09PSBuc1VyaSAmJiBtYXBwaW5nLmRlY2xhcmVkKSB7XG4vLyAgICAgICByZXR1cm4gZmFsc2U7XG4vLyAgICAgfVxuLy8gICAgIHRoaXMuY3VycmVudFNjb3BlLm5hbWVzcGFjZXNbcHJlZml4XSA9IHtcbi8vICAgICAgIHVyaTogbnNVcmksXG4vLyAgICAgICBwcmVmaXg6IHByZWZpeCxcbi8vICAgICAgIGRlY2xhcmVkOiB0cnVlXG4vLyAgICAgfTtcbi8vICAgICByZXR1cm4gdHJ1ZTtcbi8vICAgfVxuLy8gICByZXR1cm4gZmFsc2U7XG4vLyB9O1xuIl19