Files
speckle-server/scratch/edge-debug-selection/Default/Cache/Cache_Data/f_000096
T

168 lines
34 KiB
Plaintext

import { __assign, __rest } from "/_nuxt/node_modules/tslib/tslib.es6.js?v=e4f18c29";
import { wrap } from "/_nuxt/node_modules/optimism/lib/index.js?v=e4f18c29";
import { Observable, cacheSizes, getFragmentDefinition, getFragmentQueryDocument, mergeDeepArray, } from "/_nuxt/node_modules/@apollo/client/utilities/index.js?v=e4f18c29";
import { WeakCache } from "/_nuxt/node_modules/@wry/caches/lib/index.js?v=e4f18c29";
import { getApolloCacheMemoryInternals } from "/_nuxt/node_modules/@apollo/client/utilities/caching/getMemoryInternals.js?v=e4f18c29";
import { equalByQuery } from "/_nuxt/node_modules/@apollo/client/core/equalByQuery.js?v=e4f18c29";
import { invariant } from "/_nuxt/node_modules/@apollo/client/utilities/globals/index.js?v=e4f18c29";
import { maskFragment } from "/_nuxt/node_modules/@apollo/client/masking/index.js?v=e4f18c29";
var ApolloCache = /** @class */ (function () {
function ApolloCache() {
this.assumeImmutableResults = false;
// Make sure we compute the same (===) fragment query document every
// time we receive the same fragment in readFragment.
this.getFragmentDoc = wrap(getFragmentQueryDocument, {
max: cacheSizes["cache.fragmentQueryDocuments"] ||
1000 /* defaultCacheSizes["cache.fragmentQueryDocuments"] */,
cache: WeakCache,
});
}
// Function used to lookup a fragment when a fragment definition is not part
// of the GraphQL document. This is useful for caches, such as InMemoryCache,
// that register fragments ahead of time so they can be referenced by name.
ApolloCache.prototype.lookupFragment = function (fragmentName) {
return null;
};
// Transactional API
// The batch method is intended to replace/subsume both performTransaction
// and recordOptimisticTransaction, but performTransaction came first, so we
// provide a default batch implementation that's just another way of calling
// performTransaction. Subclasses of ApolloCache (such as InMemoryCache) can
// override the batch method to do more interesting things with its options.
ApolloCache.prototype.batch = function (options) {
var _this = this;
var optimisticId = typeof options.optimistic === "string" ? options.optimistic
: options.optimistic === false ? null
: void 0;
var updateResult;
this.performTransaction(function () { return (updateResult = options.update(_this)); }, optimisticId);
return updateResult;
};
ApolloCache.prototype.recordOptimisticTransaction = function (transaction, optimisticId) {
this.performTransaction(transaction, optimisticId);
};
// Optional API
// Called once per input document, allowing the cache to make static changes
// to the query, such as adding __typename fields.
ApolloCache.prototype.transformDocument = function (document) {
return document;
};
// Called before each ApolloLink request, allowing the cache to make dynamic
// changes to the query, such as filling in missing fragment definitions.
ApolloCache.prototype.transformForLink = function (document) {
return document;
};
ApolloCache.prototype.identify = function (object) {
return;
};
ApolloCache.prototype.gc = function () {
return [];
};
ApolloCache.prototype.modify = function (options) {
return false;
};
// DataProxy API
ApolloCache.prototype.readQuery = function (options, optimistic) {
if (optimistic === void 0) { optimistic = !!options.optimistic; }
return this.read(__assign(__assign({}, options), { rootId: options.id || "ROOT_QUERY", optimistic: optimistic }));
};
/** {@inheritDoc @apollo/client!ApolloClient#watchFragment:member(1)} */
ApolloCache.prototype.watchFragment = function (options) {
var _this = this;
var fragment = options.fragment, fragmentName = options.fragmentName, from = options.from, _a = options.optimistic, optimistic = _a === void 0 ? true : _a, otherOptions = __rest(options, ["fragment", "fragmentName", "from", "optimistic"]);
var query = this.getFragmentDoc(fragment, fragmentName);
// While our TypeScript types do not allow for `undefined` as a valid
// `from`, its possible `useFragment` gives us an `undefined` since it
// calls` cache.identify` and provides that value to `from`. We are
// adding this fix here however to ensure those using plain JavaScript
// and using `cache.identify` themselves will avoid seeing the obscure
// warning.
var id = typeof from === "undefined" || typeof from === "string" ?
from
: this.identify(from);
var dataMasking = !!options[Symbol.for("apollo.dataMasking")];
if (globalThis.__DEV__ !== false) {
var actualFragmentName = fragmentName || getFragmentDefinition(fragment).name.value;
if (!id) {
globalThis.__DEV__ !== false && invariant.warn(1, actualFragmentName);
}
}
var diffOptions = __assign(__assign({}, otherOptions), { returnPartialData: true, id: id, query: query, optimistic: optimistic });
var latestDiff;
return new Observable(function (observer) {
return _this.watch(__assign(__assign({}, diffOptions), { immediate: true, callback: function (diff) {
var data = dataMasking ?
maskFragment(diff.result, fragment, _this, fragmentName)
: diff.result;
if (
// Always ensure we deliver the first result
latestDiff &&
equalByQuery(query, { data: latestDiff.result }, { data: data },
// TODO: Fix the type on WatchFragmentOptions so that TVars
// extends OperationVariables
options.variables)) {
return;
}
var result = {
data: data,
complete: !!diff.complete,
};
if (diff.missing) {
result.missing = mergeDeepArray(diff.missing.map(function (error) { return error.missing; }));
}
latestDiff = __assign(__assign({}, diff), { result: data });
observer.next(result);
} }));
});
};
ApolloCache.prototype.readFragment = function (options, optimistic) {
if (optimistic === void 0) { optimistic = !!options.optimistic; }
return this.read(__assign(__assign({}, options), { query: this.getFragmentDoc(options.fragment, options.fragmentName), rootId: options.id, optimistic: optimistic }));
};
ApolloCache.prototype.writeQuery = function (_a) {
var id = _a.id, data = _a.data, options = __rest(_a, ["id", "data"]);
return this.write(Object.assign(options, {
dataId: id || "ROOT_QUERY",
result: data,
}));
};
ApolloCache.prototype.writeFragment = function (_a) {
var id = _a.id, data = _a.data, fragment = _a.fragment, fragmentName = _a.fragmentName, options = __rest(_a, ["id", "data", "fragment", "fragmentName"]);
return this.write(Object.assign(options, {
query: this.getFragmentDoc(fragment, fragmentName),
dataId: id,
result: data,
}));
};
ApolloCache.prototype.updateQuery = function (options, update) {
return this.batch({
update: function (cache) {
var value = cache.readQuery(options);
var data = update(value);
if (data === void 0 || data === null)
return value;
cache.writeQuery(__assign(__assign({}, options), { data: data }));
return data;
},
});
};
ApolloCache.prototype.updateFragment = function (options, update) {
return this.batch({
update: function (cache) {
var value = cache.readFragment(options);
var data = update(value);
if (data === void 0 || data === null)
return value;
cache.writeFragment(__assign(__assign({}, options), { data: data }));
return data;
},
});
};
return ApolloCache;
}());
export { ApolloCache };
if (globalThis.__DEV__ !== false) {
ApolloCache.prototype.getMemoryInternals = getApolloCacheMemoryInternals;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY2FjaGUvY29yZS9jYWNoZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBS0EsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFVBQVUsQ0FBQztBQVFoQyxPQUFPLEVBQ0wsVUFBVSxFQUNWLFVBQVUsRUFFVixxQkFBcUIsRUFDckIsd0JBQXdCLEVBQ3hCLGNBQWMsR0FDZixNQUFNLDBCQUEwQixDQUFDO0FBR2xDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDeEMsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFNOUYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzFELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUM3RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFxRXREO0lBQUE7UUFDa0IsMkJBQXNCLEdBQVksS0FBSyxDQUFDO1FBMk94RCxvRUFBb0U7UUFDcEUscURBQXFEO1FBQzdDLG1CQUFjLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixFQUFFO1lBQ3RELEdBQUcsRUFDRCxVQUFVLENBQUMsOEJBQThCLENBQUM7NEVBQ087WUFDbkQsS0FBSyxFQUFFLFNBQVM7U0FDakIsQ0FBQyxDQUFDO0lBaUZMLENBQUM7SUF2UUMsNEVBQTRFO0lBQzVFLDZFQUE2RTtJQUM3RSwyRUFBMkU7SUFDcEUsb0NBQWMsR0FBckIsVUFBc0IsWUFBb0I7UUFDeEMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsb0JBQW9CO0lBRXBCLDBFQUEwRTtJQUMxRSw0RUFBNEU7SUFDNUUsNEVBQTRFO0lBQzVFLDRFQUE0RTtJQUM1RSw0RUFBNEU7SUFDckUsMkJBQUssR0FBWixVQUFnQixPQUFvQztRQUFwRCxpQkFXQztRQVZDLElBQU0sWUFBWSxHQUNoQixP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e1xuICBEb2N1bWVudE5vZGUsXG4gIEZyYWdtZW50RGVmaW5pdGlvbk5vZGUsXG4gIElubGluZUZyYWdtZW50Tm9kZSxcbn0gZnJvbSBcImdyYXBocWxcIjtcbmltcG9ydCB7IHdyYXAgfSBmcm9tIFwib3B0aW1pc21cIjtcblxuaW1wb3J0IHR5cGUge1xuICBTdG9yZU9iamVjdCxcbiAgUmVmZXJlbmNlLFxuICBEZWVwUGFydGlhbCxcbiAgTm9JbmZlcixcbn0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9pbmRleC5qc1wiO1xuaW1wb3J0IHtcbiAgT2JzZXJ2YWJsZSxcbiAgY2FjaGVTaXplcyxcbiAgZGVmYXVsdENhY2hlU2l6ZXMsXG4gIGdldEZyYWdtZW50RGVmaW5pdGlvbixcbiAgZ2V0RnJhZ21lbnRRdWVyeURvY3VtZW50LFxuICBtZXJnZURlZXBBcnJheSxcbn0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9pbmRleC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBEYXRhUHJveHkgfSBmcm9tIFwiLi90eXBlcy9EYXRhUHJveHkuanNcIjtcbmltcG9ydCB0eXBlIHsgQ2FjaGUgfSBmcm9tIFwiLi90eXBlcy9DYWNoZS5qc1wiO1xuaW1wb3J0IHsgV2Vha0NhY2hlIH0gZnJvbSBcIkB3cnkvY2FjaGVzXCI7XG5pbXBvcnQgeyBnZXRBcG9sbG9DYWNoZU1lbW9yeUludGVybmFscyB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvY2FjaGluZy9nZXRNZW1vcnlJbnRlcm5hbHMuanNcIjtcbmltcG9ydCB0eXBlIHtcbiAgT3BlcmF0aW9uVmFyaWFibGVzLFxuICBUeXBlZERvY3VtZW50Tm9kZSxcbn0gZnJvbSBcIi4uLy4uL2NvcmUvdHlwZXMuanNcIjtcbmltcG9ydCB0eXBlIHsgTWlzc2luZ1RyZWUgfSBmcm9tIFwiLi90eXBlcy9jb21tb24uanNcIjtcbmltcG9ydCB7IGVxdWFsQnlRdWVyeSB9IGZyb20gXCIuLi8uLi9jb3JlL2VxdWFsQnlRdWVyeS5qc1wiO1xuaW1wb3J0IHsgaW52YXJpYW50IH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9nbG9iYWxzL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBtYXNrRnJhZ21lbnQgfSBmcm9tIFwiLi4vLi4vbWFza2luZy9pbmRleC5qc1wiO1xuaW1wb3J0IHR5cGUge1xuICBGcmFnbWVudFR5cGUsXG4gIE1heWJlTWFza2VkLFxuICBVbm1hc2tlZCxcbn0gZnJvbSBcIi4uLy4uL21hc2tpbmcvaW5kZXguanNcIjtcblxuZXhwb3J0IHR5cGUgVHJhbnNhY3Rpb248VD4gPSAoYzogQXBvbGxvQ2FjaGU8VD4pID0+IHZvaWQ7XG5cbi8qKlxuICogV2F0Y2hlZCBmcmFnbWVudCBvcHRpb25zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdhdGNoRnJhZ21lbnRPcHRpb25zPFREYXRhLCBUVmFycz4ge1xuICAvKipcbiAgICogQSBHcmFwaFFMIGZyYWdtZW50IGRvY3VtZW50IHBhcnNlZCBpbnRvIGFuIEFTVCB3aXRoIHRoZSBgZ3FsYFxuICAgKiB0ZW1wbGF0ZSBsaXRlcmFsLlxuICAgKlxuICAgKiBAZG9jR3JvdXAgMS4gUmVxdWlyZWQgb3B0aW9uc1xuICAgKi9cbiAgZnJhZ21lbnQ6IERvY3VtZW50Tm9kZSB8IFR5cGVkRG9jdW1lbnROb2RlPFREYXRhLCBUVmFycz47XG4gIC8qKlxuICAgKiBBbiBvYmplY3QgY29udGFpbmluZyBhIGBfX3R5cGVuYW1lYCBhbmQgcHJpbWFyeSBrZXkgZmllbGRzXG4gICAqIChzdWNoIGFzIGBpZGApIGlkZW50aWZ5aW5nIHRoZSBlbnRpdHkgb2JqZWN0IGZyb20gd2hpY2ggdGhlIGZyYWdtZW50IHdpbGxcbiAgICogYmUgcmV0cmlldmVkLCBvciBhIGB7IF9fcmVmOiBcIi4uLlwiIH1gIHJlZmVyZW5jZSwgb3IgYSBgc3RyaW5nYCBJRFxuICAgKiAodW5jb21tb24pLlxuICAgKlxuICAgKiBAZG9jR3JvdXAgMS4gUmVxdWlyZWQgb3B0aW9uc1xuICAgKi9cbiAgZnJvbTogU3RvcmVPYmplY3QgfCBSZWZlcmVuY2UgfCBGcmFnbWVudFR5cGU8Tm9JbmZlcjxURGF0YT4+IHwgc3RyaW5nO1xuICAvKipcbiAgICogQW55IHZhcmlhYmxlcyB0aGF0IHRoZSBHcmFwaFFMIGZyYWdtZW50IG1heSBkZXBlbmQgb24uXG4gICAqXG4gICAqIEBkb2NHcm91cCAyLiBDYWNoZSBvcHRpb25zXG4gICAqL1xuICB2YXJpYWJsZXM/OiBUVmFycztcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBmcmFnbWVudCBkZWZpbmVkIGluIHRoZSBmcmFnbWVudCBkb2N1bWVudC5cbiAgICpcbiAgICogUmVxdWlyZWQgaWYgdGhlIGZyYWdtZW50IGRvY3VtZW50IGluY2x1ZGVzIG1vcmUgdGhhbiBvbmUgZnJhZ21lbnQsXG4gICAqIG9wdGlvbmFsIG90aGVyd2lzZS5cbiAgICpcbiAgICogQGRvY0dyb3VwIDIuIENhY2hlIG9wdGlvbnNcbiAgICovXG4gIGZyYWdtZW50TmFtZT86IHN0cmluZztcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgYHdhdGNoRnJhZ21lbnRgIHJldHVybnMgb3B0aW1pc3RpYyByZXN1bHRzLlxuICAgKlxuICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBgdHJ1ZWAuXG4gICAqXG4gICAqIEBkb2NHcm91cCAyLiBDYWNoZSBvcHRpb25zXG4gICAqL1xuICBvcHRpbWlzdGljPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBXYXRjaGVkIGZyYWdtZW50IHJlc3VsdHMuXG4gKi9cbmV4cG9ydCB0eXBlIFdhdGNoRnJhZ21lbnRSZXN1bHQ8VERhdGE+ID1cbiAgfCB7XG4gICAgICBkYXRhOiBNYXliZU1hc2tlZDxURGF0YT47XG4gICAgICBjb21wbGV0ZTogdHJ1ZTtcbiAgICAgIG1pc3Npbmc/OiBuZXZlcjtcbiAgICB9XG4gIHwge1xuICAgICAgZGF0YTogRGVlcFBhcnRpYWw8TWF5YmVNYXNrZWQ8VERhdGE+PjtcbiAgICAgIGNvbXBsZXRlOiBmYWxzZTtcbiAgICAgIG1pc3Npbmc6IE1pc3NpbmdUcmVlO1xuICAgIH07XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBcG9sbG9DYWNoZTxUU2VyaWFsaXplZD4gaW1wbGVtZW50cyBEYXRhUHJveHkge1xuICBwdWJsaWMgcmVhZG9ubHkgYXNzdW1lSW1tdXRhYmxlUmVzdWx0czogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8vIHJlcXVpcmVkIHRvIGltcGxlbWVudFxuICAvLyBjb3JlIEFQSVxuICBwdWJsaWMgYWJzdHJhY3QgcmVhZDxURGF0YSA9IGFueSwgVFZhcmlhYmxlcyA9IGFueT4oXG4gICAgcXVlcnk6IENhY2hlLlJlYWRPcHRpb25zPFRWYXJpYWJsZXMsIFREYXRhPlxuICApOiBVbm1hc2tlZDxURGF0YT4gfCBudWxsO1xuICBwdWJsaWMgYWJzdHJhY3Qgd3JpdGU8VERhdGEgPSBhbnksIFRWYXJpYWJsZXMgPSBhbnk+KFxuICAgIHdyaXRlOiBDYWNoZS5Xcml0ZU9wdGlvbnM8VERhdGEsIFRWYXJpYWJsZXM+XG4gICk6IFJlZmVyZW5jZSB8IHVuZGVmaW5lZDtcbiAgcHVibGljIGFic3RyYWN0IGRpZmY8VD4ocXVlcnk6IENhY2hlLkRpZmZPcHRpb25zKTogQ2FjaGUuRGlmZlJlc3VsdDxUPjtcbiAgcHVibGljIGFic3RyYWN0IHdhdGNoPFREYXRhID0gYW55LCBUVmFyaWFibGVzID0gYW55PihcbiAgICB3YXRjaDogQ2FjaGUuV2F0Y2hPcHRpb25zPFREYXRhLCBUVmFyaWFibGVzPlxuICApOiAoKSA9PiB2b2lkO1xuXG4gIC8vIEVtcHR5IHRoZSBjYWNoZSBhbmQgcmVzdGFydCBhbGwgY3VycmVudCB3YXRjaGVzICh1bmxlc3NcbiAgLy8gb3B0aW9ucy5kaXNjYXJkV2F0Y2hlcyBpcyB0cnVlKS5cbiAgcHVibGljIGFic3RyYWN0IHJlc2V0KG9wdGlvbnM/OiBDYWNoZS5SZXNldE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8vIFJlbW92ZSB3aG9sZSBvYmplY3RzIGZyb20gdGhlIGNhY2hlIGJ5IHBhc3NpbmcganVzdCBvcHRpb25zLmlkLCBvclxuICAvLyBzcGVjaWZpYyBmaWVsZHMgYnkgcGFzc2luZyBvcHRpb25zLmZpZWxkIGFuZC9vciBvcHRpb25zLmFyZ3MuIElmIG5vXG4gIC8vIG9wdGlvbnMuYXJncyBhcmUgcHJvdmlkZWQsIGFsbCBmaWVsZHMgbWF0Y2hpbmcgb3B0aW9ucy5maWVsZCAoZXZlblxuICAvLyB0aG9zZSB3aXRoIGFyZ3VtZW50cykgd2lsbCBiZSByZW1vdmVkLiBSZXR1cm5zIHRydWUgaWZmIGFueSBkYXRhIHdhc1xuICAvLyByZW1vdmVkIGZyb20gdGhlIGNhY2hlLlxuICBwdWJsaWMgYWJzdHJhY3QgZXZpY3Qob3B0aW9uczogQ2FjaGUuRXZpY3RPcHRpb25zKTogYm9vbGVhbjtcblxuICAvLyBpbml0aWFsaXplciAvIG9mZmxpbmUgLyBzc3IgQVBJXG4gIC8qKlxuICAgKiBSZXBsYWNlcyBleGlzdGluZyBzdGF0ZSBpbiB0aGUgY2FjaGUgKGlmIGFueSkgd2l0aCB0aGUgdmFsdWVzIGV4cHJlc3NlZCBieVxuICAgKiBgc2VyaWFsaXplZFN0YXRlYC5cbiAgICpcbiAgICogQ2FsbGVkIHdoZW4gaHlkcmF0aW5nIGEgY2FjaGUgKHNlcnZlciBzaWRlIHJlbmRlcmluZywgb3Igb2ZmbGluZSBzdG9yYWdlKSxcbiAgICogYW5kIGFsc28gKHBvdGVudGlhbGx5KSBkdXJpbmcgaG90IHJlbG9hZHMuXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgcmVzdG9yZShcbiAgICBzZXJpYWxpemVkU3RhdGU6IFRTZXJpYWxpemVkXG4gICk6IEFwb2xsb0NhY2hlPFRTZXJpYWxpemVkPjtcblxuICAvKipcbiAgICogRXhwb3NlcyB0aGUgY2FjaGUncyBjb21wbGV0ZSBzdGF0ZSwgaW4gYSBzZXJpYWxpemFibGUgZm9ybWF0IGZvciBsYXRlciByZXN0b3JhdGlvbi5cbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCBleHRyYWN0KG9wdGltaXN0aWM/OiBib29sZWFuKTogVFNlcmlhbGl6ZWQ7XG5cbiAgLy8gT3B0aW1pc3RpYyBBUElcblxuICBwdWJsaWMgYWJzdHJhY3QgcmVtb3ZlT3B0aW1pc3RpYyhpZDogc3RyaW5nKTogdm9pZDtcblxuICAvLyBEYXRhIG1hc2tpbmcgQVBJXG5cbiAgLy8gVXNlZCBieSBkYXRhIG1hc2tpbmcgdG8gZGV0ZXJtaW5lIGlmIGFuIGlubGluZSBmcmFnbWVudCB3aXRoIGEgdHlwZVxuICAvLyBjb25kaXRpb24gbWF0Y2hlcyBhIGdpdmVuIHR5cGVuYW1lLlxuICAvL1xuICAvLyBJZiBub3QgaW1wbGVtZW50ZWQgYnkgYSBjYWNoZSBzdWJjbGFzcywgZGF0YSBtYXNraW5nIHdpbGwgZWZmZWN0aXZlbHkgYmVcbiAgLy8gZGlzYWJsZWQgc2luY2Ugd2Ugd2lsbCBub3QgYmUgYWJsZSB0byBhY2N1cmF0ZWx5IGRldGVybWluZSBpZiBhIGdpdmVuIHR5cGVcbiAgLy8gY29uZGl0aW9uIGZvciBhIHVuaW9uIG9yIGludGVyZmFjZSBtYXRjaGVzIGEgcGFydGljdWxhciB0eXBlLlxuICBwdWJsaWMgZnJhZ21lbnRNYXRjaGVzPyhcbiAgICBmcmFnbWVudDogSW5saW5lRnJhZ21lbnROb2RlLFxuICAgIHR5cGVuYW1lOiBzdHJpbmdcbiAgKTogYm9vbGVhbjtcblxuICAvLyBGdW5jdGlvbiB1c2VkIHRvIGxvb2t1cCBhIGZyYWdtZW50IHdoZW4gYSBmcmFnbWVudCBkZWZpbml0aW9uIGlzIG5vdCBwYXJ0XG4gIC8vIG9mIHRoZSBHcmFwaFFMIGRvY3VtZW50LiBUaGlzIGlzIHVzZWZ1bCBmb3IgY2FjaGVzLCBzdWNoIGFzIEluTWVtb3J5Q2FjaGUsXG4gIC8vIHRoYXQgcmVnaXN0ZXIgZnJhZ21lbnRzIGFoZWFkIG9mIHRpbWUgc28gdGhleSBjYW4gYmUgcmVmZXJlbmNlZCBieSBuYW1lLlxuICBwdWJsaWMgbG9va3VwRnJhZ21lbnQoZnJhZ21lbnROYW1lOiBzdHJpbmcpOiBGcmFnbWVudERlZmluaXRpb25Ob2RlIHwgbnVsbCB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBUcmFuc2FjdGlvbmFsIEFQSVxuXG4gIC8vIFRoZSBiYXRjaCBtZXRob2QgaXMgaW50ZW5kZWQgdG8gcmVwbGFjZS9zdWJzdW1lIGJvdGggcGVyZm9ybVRyYW5zYWN0aW9uXG4gIC8vIGFuZCByZWNvcmRPcHRpbWlzdGljVHJhbnNhY3Rpb24sIGJ1dCBwZXJmb3JtVHJhbnNhY3Rpb24gY2FtZSBmaXJzdCwgc28gd2VcbiAgLy8gcHJvdmlkZSBhIGRlZmF1bHQgYmF0Y2ggaW1wbGVtZW50YXRpb24gdGhhdCdzIGp1c3QgYW5vdGhlciB3YXkgb2YgY2FsbGluZ1xuICAvLyBwZXJmb3JtVHJhbnNhY3Rpb24uIFN1YmNsYXNzZXMgb2YgQXBvbGxvQ2FjaGUgKHN1Y2ggYXMgSW5NZW1vcnlDYWNoZSkgY2FuXG4gIC8vIG92ZXJyaWRlIHRoZSBiYXRjaCBtZXRob2QgdG8gZG8gbW9yZSBpbnRlcmVzdGluZyB0aGluZ3Mgd2l0aCBpdHMgb3B0aW9ucy5cbiAgcHVibGljIGJhdGNoPFU+KG9wdGlvbnM6IENhY2hlLkJhdGNoT3B0aW9uczx0aGlzLCBVPik6IFUge1xuICAgIGNvbnN0IG9wdGltaXN0aWNJZCA9XG4gICAgICB0eXBlb2Ygb3B0aW9ucy5vcHRpbWlzdGljID09PSBcInN0cmluZ1wiID8gb3B0aW9ucy5vcHRpbWlzdGljXG4gICAgICA6IG9wdGlvbnMub3B0aW1pc3RpYyA9PT0gZmFsc2UgPyBudWxsXG4gICAgICA6IHZvaWQgMDtcbiAgICBsZXQgdXBkYXRlUmVzdWx0OiBVO1xuICAgIHRoaXMucGVyZm9ybVRyYW5zYWN0aW9uKFxuICAgICAgKCkgPT4gKHVwZGF0ZVJlc3VsdCA9IG9wdGlvbnMudXBkYXRlKHRoaXMpKSxcbiAgICAgIG9wdGltaXN0aWNJZFxuICAgICk7XG4gICAgcmV0dXJuIHVwZGF0ZVJlc3VsdCE7XG4gIH1cblxuICBwdWJsaWMgYWJzdHJhY3QgcGVyZm9ybVRyYW5zYWN0aW9uKFxuICAgIHRyYW5zYWN0aW9uOiBUcmFuc2FjdGlvbjxUU2VyaWFsaXplZD4sXG4gICAgLy8gQWx0aG91Z2ggc3ViY2xhc3NlcyBtYXkgaW1wbGVtZW50IHJlY29yZE9wdGltaXN0aWNUcmFuc2FjdGlvblxuICAgIC8vIGhvd2V2ZXIgdGhleSBjaG9vc2UsIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHNpbXBseSBjYWxsc1xuICAgIC8vIHBlcmZvcm1UcmFuc2FjdGlvbiB3aXRoIGEgc3RyaW5nIGFzIHRoZSBzZWNvbmQgYXJndW1lbnQsIGFsbG93aW5nXG4gICAgLy8gcGVyZm9ybVRyYW5zYWN0aW9uIHRvIGhhbmRsZSBib3RoIG9wdGltaXN0aWMgYW5kIG5vbi1vcHRpbWlzdGljXG4gICAgLy8gKGJyb2FkY2FzdC1iYXRjaGluZykgdHJhbnNhY3Rpb25zLiBQYXNzaW5nIG51bGwgZm9yIG9wdGltaXN0aWNJZCBpc1xuICAgIC8vIGFsc28gYWxsb3dlZCwgYW5kIGluZGljYXRlcyB0aGF0IHBlcmZvcm1UcmFuc2FjdGlvbiBzaG91bGQgYXBwbHlcbiAgICAvLyB0aGUgdHJhbnNhY3Rpb24gbm9uLW9wdGltaXN0aWNhbGx5IChpZ25vcmluZyBvcHRpbWlzdGljIGRhdGEpLlxuICAgIG9wdGltaXN0aWNJZD86IHN0cmluZyB8IG51bGxcbiAgKTogdm9pZDtcblxuICBwdWJsaWMgcmVjb3JkT3B0aW1pc3RpY1RyYW5zYWN0aW9uKFxuICAgIHRyYW5zYWN0aW9uOiBUcmFuc2FjdGlvbjxUU2VyaWFsaXplZD4sXG4gICAgb3B0aW1pc3RpY0lkOiBzdHJpbmdcbiAgKSB7XG4gICAgdGhpcy5wZXJmb3JtVHJhbnNhY3Rpb24odHJhbnNhY3Rpb24sIG9wdGltaXN0aWNJZCk7XG4gIH1cblxuICAvLyBPcHRpb25hbCBBUElcblxuICAvLyBDYWxsZWQgb25jZSBwZXIgaW5wdXQgZG9jdW1lbnQsIGFsbG93aW5nIHRoZSBjYWNoZSB0byBtYWtlIHN0YXRpYyBjaGFuZ2VzXG4gIC8vIHRvIHRoZSBxdWVyeSwgc3VjaCBhcyBhZGRpbmcgX190eXBlbmFtZSBmaWVsZHMuXG4gIHB1YmxpYyB0cmFuc2Zvcm1Eb2N1bWVudChkb2N1bWVudDogRG9jdW1lbnROb2RlKTogRG9jdW1lbnROb2RlIHtcbiAgICByZXR1cm4gZG9jdW1lbnQ7XG4gIH1cblxuICAvLyBDYWxsZWQgYmVmb3JlIGVhY2ggQXBvbGxvTGluayByZXF1ZXN0LCBhbGxvd2luZyB0aGUgY2FjaGUgdG8gbWFrZSBkeW5hbWljXG4gIC8vIGNoYW5nZXMgdG8gdGhlIHF1ZXJ5LCBzdWNoIGFzIGZpbGxpbmcgaW4gbWlzc2luZyBmcmFnbWVudCBkZWZpbml0aW9ucy5cbiAgcHVibGljIHRyYW5zZm9ybUZvckxpbmsoZG9jdW1lbnQ6IERvY3VtZW50Tm9kZSk6IERvY3VtZW50Tm9kZSB7XG4gICAgcmV0dXJuIGRvY3VtZW50O1xuICB9XG5cbiAgcHVibGljIGlkZW50aWZ5KG9iamVjdDogU3RvcmVPYmplY3QgfCBSZWZlcmVuY2UpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHB1YmxpYyBnYygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgcHVibGljIG1vZGlmeTxFbnRpdHkgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0gUmVjb3JkPHN0cmluZywgYW55Pj4oXG4gICAgb3B0aW9uczogQ2FjaGUuTW9kaWZ5T3B0aW9uczxFbnRpdHk+XG4gICk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIERhdGFQcm94eSBBUElcbiAgcHVibGljIHJlYWRRdWVyeTxRdWVyeVR5cGUsIFRWYXJpYWJsZXMgPSBhbnk+KFxuICAgIG9wdGlvbnM6IENhY2hlLlJlYWRRdWVyeU9wdGlvbnM8UXVlcnlUeXBlLCBUVmFyaWFibGVzPixcbiAgICBvcHRpbWlzdGljID0gISFvcHRpb25zLm9wdGltaXN0aWNcbiAgKTogVW5tYXNrZWQ8UXVlcnlUeXBlPiB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLnJlYWQoe1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIHJvb3RJZDogb3B0aW9ucy5pZCB8fCBcIlJPT1RfUVVFUllcIixcbiAgICAgIG9wdGltaXN0aWMsXG4gICAgfSk7XG4gIH1cblxuICAvKioge0Bpbmhlcml0RG9jIEBhcG9sbG8vY2xpZW50IUFwb2xsb0NsaWVudCN3YXRjaEZyYWdtZW50Om1lbWJlcigxKX0gKi9cbiAgcHVibGljIHdhdGNoRnJhZ21lbnQ8VERhdGEgPSBhbnksIFRWYXJzID0gT3BlcmF0aW9uVmFyaWFibGVzPihcbiAgICBvcHRpb25zOiBXYXRjaEZyYWdtZW50T3B0aW9uczxURGF0YSwgVFZhcnM+XG4gICk6IE9ic2VydmFibGU8V2F0Y2hGcmFnbWVudFJlc3VsdDxURGF0YT4+IHtcbiAgICBjb25zdCB7XG4gICAgICBmcmFnbWVudCxcbiAgICAgIGZyYWdtZW50TmFtZSxcbiAgICAgIGZyb20sXG4gICAgICBvcHRpbWlzdGljID0gdHJ1ZSxcbiAgICAgIC4uLm90aGVyT3B0aW9uc1xuICAgIH0gPSBvcHRpb25zO1xuICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy5nZXRGcmFnbWVudERvYyhmcmFnbWVudCwgZnJhZ21lbnROYW1lKTtcbiAgICAvLyBXaGlsZSBvdXIgVHlwZVNjcmlwdCB0eXBlcyBkbyBub3QgYWxsb3cgZm9yIGB1bmRlZmluZWRgIGFzIGEgdmFsaWRcbiAgICAvLyBgZnJvbWAsIGl0cyBwb3NzaWJsZSBgdXNlRnJhZ21lbnRgIGdpdmVzIHVzIGFuIGB1bmRlZmluZWRgIHNpbmNlIGl0XG4gICAgLy8gY2FsbHNgIGNhY2hlLmlkZW50aWZ5YCBhbmQgcHJvdmlkZXMgdGhhdCB2YWx1ZSB0byBgZnJvbWAuIFdlIGFyZVxuICAgIC8vIGFkZGluZyB0aGlzIGZpeCBoZXJlIGhvd2V2ZXIgdG8gZW5zdXJlIHRob3NlIHVzaW5nIHBsYWluIEphdmFTY3JpcHRcbiAgICAvLyBhbmQgdXNpbmcgYGNhY2hlLmlkZW50aWZ5YCB0aGVtc2VsdmVzIHdpbGwgYXZvaWQgc2VlaW5nIHRoZSBvYnNjdXJlXG4gICAgLy8gd2FybmluZy5cbiAgICBjb25zdCBpZCA9XG4gICAgICB0eXBlb2YgZnJvbSA9PT0gXCJ1bmRlZmluZWRcIiB8fCB0eXBlb2YgZnJvbSA9PT0gXCJzdHJpbmdcIiA/XG4gICAgICAgIGZyb21cbiAgICAgIDogdGhpcy5pZGVudGlmeShmcm9tKTtcbiAgICBjb25zdCBkYXRhTWFza2luZyA9ICEhKG9wdGlvbnMgYXMgYW55KVtTeW1ib2wuZm9yKFwiYXBvbGxvLmRhdGFNYXNraW5nXCIpXTtcblxuICAgIGlmIChfX0RFVl9fKSB7XG4gICAgICBjb25zdCBhY3R1YWxGcmFnbWVudE5hbWUgPVxuICAgICAgICBmcmFnbWVudE5hbWUgfHwgZ2V0RnJhZ21lbnREZWZpbml0aW9uKGZyYWdtZW50KS5uYW1lLnZhbHVlO1xuXG4gICAgICBpZiAoIWlkKSB7XG4gICAgICAgIGludmFyaWFudC53YXJuKFxuICAgICAgICAgIFwiQ291bGQgbm90IGlkZW50aWZ5IG9iamVjdCBwYXNzZWQgdG8gYGZyb21gIGZvciAnJXMnIGZyYWdtZW50LCBlaXRoZXIgYmVjYXVzZSB0aGUgb2JqZWN0IGlzIG5vbi1ub3JtYWxpemVkIG9yIHRoZSBrZXkgZmllbGRzIGFyZSBtaXNzaW5nLiBJZiB5b3UgYXJlIG1hc2tpbmcgdGhpcyBvYmplY3QsIHBsZWFzZSBlbnN1cmUgdGhlIGtleSBmaWVsZHMgYXJlIHJlcXVlc3RlZCBieSB0aGUgcGFyZW50IG9iamVjdC5cIixcbiAgICAgICAgICBhY3R1YWxGcmFnbWVudE5hbWVcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBkaWZmT3B0aW9uczogQ2FjaGUuRGlmZk9wdGlvbnM8VERhdGEsIFRWYXJzPiA9IHtcbiAgICAgIC4uLm90aGVyT3B0aW9ucyxcbiAgICAgIHJldHVyblBhcnRpYWxEYXRhOiB0cnVlLFxuICAgICAgaWQsXG4gICAgICBxdWVyeSxcbiAgICAgIG9wdGltaXN0aWMsXG4gICAgfTtcblxuICAgIGxldCBsYXRlc3REaWZmOiBEYXRhUHJveHkuRGlmZlJlc3VsdDxURGF0YT4gfCB1bmRlZmluZWQ7XG5cbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoKG9ic2VydmVyKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy53YXRjaDxURGF0YSwgVFZhcnM+KHtcbiAgICAgICAgLi4uZGlmZk9wdGlvbnMsXG4gICAgICAgIGltbWVkaWF0ZTogdHJ1ZSxcbiAgICAgICAgY2FsbGJhY2s6IChkaWZmKSA9PiB7XG4gICAgICAgICAgY29uc3QgZGF0YSA9XG4gICAgICAgICAgICBkYXRhTWFza2luZyA/XG4gICAgICAgICAgICAgIG1hc2tGcmFnbWVudChkaWZmLnJlc3VsdCwgZnJhZ21lbnQsIHRoaXMsIGZyYWdtZW50TmFtZSlcbiAgICAgICAgICAgIDogZGlmZi5yZXN1bHQ7XG5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAvLyBBbHdheXMgZW5zdXJlIHdlIGRlbGl2ZXIgdGhlIGZpcnN0IHJlc3VsdFxuICAgICAgICAgICAgbGF0ZXN0RGlmZiAmJlxuICAgICAgICAgICAgZXF1YWxCeVF1ZXJ5KFxuICAgICAgICAgICAgICBxdWVyeSxcbiAgICAgICAgICAgICAgeyBkYXRhOiBsYXRlc3REaWZmLnJlc3VsdCB9LFxuICAgICAgICAgICAgICB7IGRhdGEgfSxcbiAgICAgICAgICAgICAgLy8gVE9ETzogRml4IHRoZSB0eXBlIG9uIFdhdGNoRnJhZ21lbnRPcHRpb25zIHNvIHRoYXQgVFZhcnNcbiAgICAgICAgICAgICAgLy8gZXh0ZW5kcyBPcGVyYXRpb25WYXJpYWJsZXNcbiAgICAgICAgICAgICAgb3B0aW9ucy52YXJpYWJsZXMgYXMgT3BlcmF0aW9uVmFyaWFibGVzXG4gICAgICAgICAgICApXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIGNvbXBsZXRlOiAhIWRpZmYuY29tcGxldGUsXG4gICAgICAgICAgfSBhcyBXYXRjaEZyYWdtZW50UmVzdWx0PFREYXRhPjtcblxuICAgICAgICAgIGlmIChkaWZmLm1pc3NpbmcpIHtcbiAgICAgICAgICAgIHJlc3VsdC5taXNzaW5nID0gbWVyZ2VEZWVwQXJyYXkoXG4gICAgICAgICAgICAgIGRpZmYubWlzc2luZy5tYXAoKGVycm9yKSA9PiBlcnJvci5taXNzaW5nKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsYXRlc3REaWZmID0geyAuLi5kaWZmLCByZXN1bHQ6IGRhdGEgfTtcbiAgICAgICAgICBvYnNlcnZlci5uZXh0KHJlc3VsdCk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIE1ha2Ugc3VyZSB3ZSBjb21wdXRlIHRoZSBzYW1lICg9PT0pIGZyYWdtZW50IHF1ZXJ5IGRvY3VtZW50IGV2ZXJ5XG4gIC8vIHRpbWUgd2UgcmVjZWl2ZSB0aGUgc2FtZSBmcmFnbWVudCBpbiByZWFkRnJhZ21lbnQuXG4gIHByaXZhdGUgZ2V0RnJhZ21lbnREb2MgPSB3cmFwKGdldEZyYWdtZW50UXVlcnlEb2N1bWVudCwge1xuICAgIG1heDpcbiAgICAgIGNhY2hlU2l6ZXNbXCJjYWNoZS5mcmFnbWVudFF1ZXJ5RG9jdW1lbnRzXCJdIHx8XG4gICAgICBkZWZhdWx0Q2FjaGVTaXplc1tcImNhY2hlLmZyYWdtZW50UXVlcnlEb2N1bWVudHNcIl0sXG4gICAgY2FjaGU6IFdlYWtDYWNoZSxcbiAgfSk7XG5cbiAgcHVibGljIHJlYWRGcmFnbWVudDxGcmFnbWVudFR5cGUsIFRWYXJpYWJsZXMgPSBhbnk+KFxuICAgIG9wdGlvbnM6IENhY2hlLlJlYWRGcmFnbWVudE9wdGlvbnM8RnJhZ21lbnRUeXBlLCBUVmFyaWFibGVzPixcbiAgICBvcHRpbWlzdGljID0gISFvcHRpb25zLm9wdGltaXN0aWNcbiAgKTogVW5tYXNrZWQ8RnJhZ21lbnRUeXBlPiB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLnJlYWQoe1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIHF1ZXJ5OiB0aGlzLmdldEZyYWdtZW50RG9jKG9wdGlvbnMuZnJhZ21lbnQsIG9wdGlvbnMuZnJhZ21lbnROYW1lKSxcbiAgICAgIHJvb3RJZDogb3B0aW9ucy5pZCxcbiAgICAgIG9wdGltaXN0aWMsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgd3JpdGVRdWVyeTxURGF0YSA9IGFueSwgVFZhcmlhYmxlcyA9IGFueT4oe1xuICAgIGlkLFxuICAgIGRhdGEsXG4gICAgLi4ub3B0aW9uc1xuICB9OiBDYWNoZS5Xcml0ZVF1ZXJ5T3B0aW9uczxURGF0YSwgVFZhcmlhYmxlcz4pOiBSZWZlcmVuY2UgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLndyaXRlKFxuICAgICAgT2JqZWN0LmFzc2lnbihvcHRpb25zLCB7XG4gICAgICAgIGRhdGFJZDogaWQgfHwgXCJST09UX1FVRVJZXCIsXG4gICAgICAgIHJlc3VsdDogZGF0YSxcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyB3cml0ZUZyYWdtZW50PFREYXRhID0gYW55LCBUVmFyaWFibGVzID0gYW55Pih7XG4gICAgaWQsXG4gICAgZGF0YSxcbiAgICBmcmFnbWVudCxcbiAgICBmcmFnbWVudE5hbWUsXG4gICAgLi4ub3B0aW9uc1xuICB9OiBDYWNoZS5Xcml0ZUZyYWdtZW50T3B0aW9uczxURGF0YSwgVFZhcmlhYmxlcz4pOiBSZWZlcmVuY2UgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLndyaXRlKFxuICAgICAgT2JqZWN0LmFzc2lnbihvcHRpb25zLCB7XG4gICAgICAgIHF1ZXJ5OiB0aGlzLmdldEZyYWdtZW50RG9jKGZyYWdtZW50LCBmcmFnbWVudE5hbWUpLFxuICAgICAgICBkYXRhSWQ6IGlkLFxuICAgICAgICByZXN1bHQ6IGRhdGEsXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlUXVlcnk8VERhdGEgPSBhbnksIFRWYXJpYWJsZXMgPSBhbnk+KFxuICAgIG9wdGlvbnM6IENhY2hlLlVwZGF0ZVF1ZXJ5T3B0aW9uczxURGF0YSwgVFZhcmlhYmxlcz4sXG4gICAgdXBkYXRlOiAoZGF0YTogVW5tYXNrZWQ8VERhdGE+IHwgbnVsbCkgPT4gVW5tYXNrZWQ8VERhdGE+IHwgbnVsbCB8IHZvaWRcbiAgKTogVW5tYXNrZWQ8VERhdGE+IHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuYmF0Y2goe1xuICAgICAgdXBkYXRlKGNhY2hlKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gY2FjaGUucmVhZFF1ZXJ5PFREYXRhLCBUVmFyaWFibGVzPihvcHRpb25zKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IHVwZGF0ZSh2YWx1ZSk7XG4gICAgICAgIGlmIChkYXRhID09PSB2b2lkIDAgfHwgZGF0YSA9PT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuICAgICAgICBjYWNoZS53cml0ZVF1ZXJ5PFREYXRhLCBUVmFyaWFibGVzPih7IC4uLm9wdGlvbnMsIGRhdGEgfSk7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVGcmFnbWVudDxURGF0YSA9IGFueSwgVFZhcmlhYmxlcyA9IGFueT4oXG4gICAgb3B0aW9uczogQ2FjaGUuVXBkYXRlRnJhZ21lbnRPcHRpb25zPFREYXRhLCBUVmFyaWFibGVzPixcbiAgICB1cGRhdGU6IChkYXRhOiBVbm1hc2tlZDxURGF0YT4gfCBudWxsKSA9PiBVbm1hc2tlZDxURGF0YT4gfCBudWxsIHwgdm9pZFxuICApOiBVbm1hc2tlZDxURGF0YT4gfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5iYXRjaCh7XG4gICAgICB1cGRhdGUoY2FjaGUpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBjYWNoZS5yZWFkRnJhZ21lbnQ8VERhdGEsIFRWYXJpYWJsZXM+KG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBkYXRhID0gdXBkYXRlKHZhbHVlKTtcbiAgICAgICAgaWYgKGRhdGEgPT09IHZvaWQgMCB8fCBkYXRhID09PSBudWxsKSByZXR1cm4gdmFsdWU7XG4gICAgICAgIGNhY2hlLndyaXRlRnJhZ21lbnQ8VERhdGEsIFRWYXJpYWJsZXM+KHsgLi4ub3B0aW9ucywgZGF0YSB9KTtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBleHBlcmltZW50YWxcbiAgICogQGludGVybmFsXG4gICAqIFRoaXMgaXMgbm90IGEgc3RhYmxlIEFQSSAtIGl0IGlzIHVzZWQgaW4gZGV2ZWxvcG1lbnQgYnVpbGRzIHRvIGV4cG9zZVxuICAgKiBpbmZvcm1hdGlvbiB0byB0aGUgRGV2VG9vbHMuXG4gICAqIFVzZSBhdCB5b3VyIG93biByaXNrIVxuICAgKi9cbiAgcHVibGljIGdldE1lbW9yeUludGVybmFscz86IHR5cGVvZiBnZXRBcG9sbG9DYWNoZU1lbW9yeUludGVybmFscztcbn1cblxuaWYgKF9fREVWX18pIHtcbiAgQXBvbGxvQ2FjaGUucHJvdG90eXBlLmdldE1lbW9yeUludGVybmFscyA9IGdldEFwb2xsb0NhY2hlTWVtb3J5SW50ZXJuYWxzO1xufVxuIl0sInhfZ29vZ2xlX2lnbm9yZUxpc3QiOlswXX0=