UNPKG

ember-legacy-class-transform

Version:
279 lines (228 loc) 27.3 kB
function _defaults(obj, defaults) { var keys = Object.getOwnPropertyNames(defaults); for (var i = 0; i < keys.length; i++) { var key = keys[i]; var value = Object.getOwnPropertyDescriptor(defaults, key); if (value && value.configurable && obj[key] === undefined) { Object.defineProperty(obj, key, value); } } return obj; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : _defaults(subClass, superClass); } import { LinkedList, ListNode, dict } from '@glimmer/util'; export var ListItem = function (_ListNode) { _inherits(ListItem, _ListNode); function ListItem(iterable, result) { _classCallCheck(this, ListItem); var _this = _possibleConstructorReturn(this, _ListNode.call(this, iterable.valueReferenceFor(result))); _this.retained = false; _this.seen = false; _this.key = result.key; _this.iterable = iterable; _this.memo = iterable.memoReferenceFor(result); return _this; } ListItem.prototype.update = function update(item) { this.retained = true; this.iterable.updateValueReference(this.value, item); this.iterable.updateMemoReference(this.memo, item); }; ListItem.prototype.shouldRemove = function shouldRemove() { return !this.retained; }; ListItem.prototype.reset = function reset() { this.retained = false; this.seen = false; }; return ListItem; }(ListNode); export var IterationArtifacts = function () { function IterationArtifacts(iterable) { _classCallCheck(this, IterationArtifacts); this.map = dict(); this.list = new LinkedList(); this.tag = iterable.tag; this.iterable = iterable; } IterationArtifacts.prototype.isEmpty = function isEmpty() { var iterator = this.iterator = this.iterable.iterate(); return iterator.isEmpty(); }; IterationArtifacts.prototype.iterate = function iterate() { var iterator = this.iterator || this.iterable.iterate(); this.iterator = null; return iterator; }; IterationArtifacts.prototype.has = function has(key) { return !!this.map[key]; }; IterationArtifacts.prototype.get = function get(key) { return this.map[key]; }; IterationArtifacts.prototype.wasSeen = function wasSeen(key) { var node = this.map[key]; return node && node.seen; }; IterationArtifacts.prototype.append = function append(item) { var map = this.map, list = this.list, iterable = this.iterable; var node = map[item.key] = new ListItem(iterable, item); list.append(node); return node; }; IterationArtifacts.prototype.insertBefore = function insertBefore(item, reference) { var map = this.map, list = this.list, iterable = this.iterable; var node = map[item.key] = new ListItem(iterable, item); node.retained = true; list.insertBefore(node, reference); return node; }; IterationArtifacts.prototype.move = function move(item, reference) { var list = this.list; item.retained = true; list.remove(item); list.insertBefore(item, reference); }; IterationArtifacts.prototype.remove = function remove(item) { var list = this.list; list.remove(item); delete this.map[item.key]; }; IterationArtifacts.prototype.nextNode = function nextNode(item) { return this.list.nextNode(item); }; IterationArtifacts.prototype.head = function head() { return this.list.head(); }; return IterationArtifacts; }(); export var ReferenceIterator = function () { // if anyone needs to construct this object with something other than // an iterable, let @wycats know. function ReferenceIterator(iterable) { _classCallCheck(this, ReferenceIterator); this.iterator = null; var artifacts = new IterationArtifacts(iterable); this.artifacts = artifacts; } ReferenceIterator.prototype.next = function next() { var artifacts = this.artifacts; var iterator = this.iterator = this.iterator || artifacts.iterate(); var item = iterator.next(); if (!item) return null; return artifacts.append(item); }; return ReferenceIterator; }(); var Phase; (function (Phase) { Phase[Phase["Append"] = 0] = "Append"; Phase[Phase["Prune"] = 1] = "Prune"; Phase[Phase["Done"] = 2] = "Done"; })(Phase || (Phase = {})); export var IteratorSynchronizer = function () { function IteratorSynchronizer(_ref) { var target = _ref.target, artifacts = _ref.artifacts; _classCallCheck(this, IteratorSynchronizer); this.target = target; this.artifacts = artifacts; this.iterator = artifacts.iterate(); this.current = artifacts.head(); } IteratorSynchronizer.prototype.sync = function sync() { var phase = Phase.Append; while (true) { switch (phase) { case Phase.Append: phase = this.nextAppend(); break; case Phase.Prune: phase = this.nextPrune(); break; case Phase.Done: this.nextDone(); return; } } }; IteratorSynchronizer.prototype.advanceToKey = function advanceToKey(key) { var current = this.current, artifacts = this.artifacts; var seek = current; while (seek && seek.key !== key) { seek.seen = true; seek = artifacts.nextNode(seek); } this.current = seek && artifacts.nextNode(seek); }; IteratorSynchronizer.prototype.nextAppend = function nextAppend() { var iterator = this.iterator, current = this.current, artifacts = this.artifacts; var item = iterator.next(); if (item === null) { return this.startPrune(); } var key = item.key; if (current && current.key === key) { this.nextRetain(item); } else if (artifacts.has(key)) { this.nextMove(item); } else { this.nextInsert(item); } return Phase.Append; }; IteratorSynchronizer.prototype.nextRetain = function nextRetain(item) { var artifacts = this.artifacts, current = this.current; current = current; current.update(item); this.current = artifacts.nextNode(current); this.target.retain(item.key, current.value, current.memo); }; IteratorSynchronizer.prototype.nextMove = function nextMove(item) { var current = this.current, artifacts = this.artifacts, target = this.target; var key = item.key; var found = artifacts.get(item.key); found.update(item); if (artifacts.wasSeen(item.key)) { artifacts.move(found, current); target.move(found.key, found.value, found.memo, current ? current.key : null); } else { this.advanceToKey(key); } }; IteratorSynchronizer.prototype.nextInsert = function nextInsert(item) { var artifacts = this.artifacts, target = this.target, current = this.current; var node = artifacts.insertBefore(item, current); target.insert(node.key, node.value, node.memo, current ? current.key : null); }; IteratorSynchronizer.prototype.startPrune = function startPrune() { this.current = this.artifacts.head(); return Phase.Prune; }; IteratorSynchronizer.prototype.nextPrune = function nextPrune() { var artifacts = this.artifacts, target = this.target, current = this.current; if (current === null) { return Phase.Done; } var node = current; this.current = artifacts.nextNode(node); if (node.shouldRemove()) { artifacts.remove(node); target.delete(node.key); } else { node.reset(); } return Phase.Prune; }; IteratorSynchronizer.prototype.nextDone = function nextDone() { this.target.done(); }; return IteratorSynchronizer; }(); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9pdGVyYWJsZS5qcyJdLCJuYW1lcyI6WyJMaW5rZWRMaXN0IiwiTGlzdE5vZGUiLCJkaWN0IiwiTGlzdEl0ZW0iLCJpdGVyYWJsZSIsInJlc3VsdCIsInZhbHVlUmVmZXJlbmNlRm9yIiwicmV0YWluZWQiLCJzZWVuIiwia2V5IiwibWVtbyIsIm1lbW9SZWZlcmVuY2VGb3IiLCJ1cGRhdGUiLCJpdGVtIiwidXBkYXRlVmFsdWVSZWZlcmVuY2UiLCJ2YWx1ZSIsInVwZGF0ZU1lbW9SZWZlcmVuY2UiLCJzaG91bGRSZW1vdmUiLCJyZXNldCIsIkl0ZXJhdGlvbkFydGlmYWN0cyIsIm1hcCIsImxpc3QiLCJ0YWciLCJpc0VtcHR5IiwiaXRlcmF0b3IiLCJpdGVyYXRlIiwiaGFzIiwiZ2V0Iiwid2FzU2VlbiIsIm5vZGUiLCJhcHBlbmQiLCJpbnNlcnRCZWZvcmUiLCJyZWZlcmVuY2UiLCJtb3ZlIiwicmVtb3ZlIiwibmV4dE5vZGUiLCJoZWFkIiwiUmVmZXJlbmNlSXRlcmF0b3IiLCJhcnRpZmFjdHMiLCJuZXh0IiwiUGhhc2UiLCJJdGVyYXRvclN5bmNocm9uaXplciIsInRhcmdldCIsImN1cnJlbnQiLCJzeW5jIiwicGhhc2UiLCJBcHBlbmQiLCJuZXh0QXBwZW5kIiwiUHJ1bmUiLCJuZXh0UHJ1bmUiLCJEb25lIiwibmV4dERvbmUiLCJhZHZhbmNlVG9LZXkiLCJzZWVrIiwic3RhcnRQcnVuZSIsIm5leHRSZXRhaW4iLCJuZXh0TW92ZSIsIm5leHRJbnNlcnQiLCJyZXRhaW4iLCJmb3VuZCIsImluc2VydCIsImRlbGV0ZSIsImRvbmUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUEsU0FBU0EsVUFBVCxFQUFxQkMsUUFBckIsRUFBK0JDLElBQS9CLFFBQW1ELGVBQW5EO0FBQ0EsV0FBYUMsUUFBYjtBQUFBOztBQUNJLHNCQUFZQyxRQUFaLEVBQXNCQyxNQUF0QixFQUE4QjtBQUFBOztBQUFBLHFEQUMxQixxQkFBTUQsU0FBU0UsaUJBQVQsQ0FBMkJE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LElBQWpCO0FBQ0FhLG1CQUFPbUIsTUFBUCxDQUFjaEMsS0FBS3BCLEdBQW5CO0FBQ0gsU0FIRCxNQUdPO0FBQ0hvQixpQkFBS1gsS0FBTDtBQUNIO0FBQ0QsZUFBT3NCLE1BQU1RLEtBQWI7QUFDSCxLQTFGTDs7QUFBQSxtQ0EyRklHLFFBM0ZKLHVCQTJGZTtBQUNQLGFBQUtULE1BQUwsQ0FBWW9CLElBQVo7QUFDSCxLQTdGTDs7QUFBQTtBQUFBIiwiZmlsZSI6ImxpYi9pdGVyYWJsZS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExpbmtlZExpc3QsIExpc3ROb2RlLCBkaWN0LCBleHBlY3QgfSBmcm9tICdAZ2xpbW1lci91dGlsJztcbmV4cG9ydCBjbGFzcyBMaXN0SXRlbSBleHRlbmRzIExpc3ROb2RlIHtcbiAgICBjb25zdHJ1Y3RvcihpdGVyYWJsZSwgcmVzdWx0KSB7XG4gICAgICAgIHN1cGVyKGl0ZXJhYmxlLnZhbHVlUmVmZXJlbmNlRm9yKHJlc3VsdCkpO1xuICAgICAgICB0aGlzLnJldGFpbmVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2VlbiA9IGZhbHNlO1xuICAgICAgICB0aGlzLmtleSA9IHJlc3VsdC5rZXk7XG4gICAgICAgIHRoaXMuaXRlcmFibGUgPSBpdGVyYWJsZTtcbiAgICAgICAgdGhpcy5tZW1vID0gaXRlcmFibGUubWVtb1JlZmVyZW5jZUZvcihyZXN1bHQpO1xuICAgIH1cbiAgICB1cGRhdGUoaXRlbSkge1xuICAgICAgICB0aGlzLnJldGFpbmVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5pdGVyYWJsZS51cGRhdGVWYWx1ZVJlZmVyZW5jZSh0aGlzLnZhbHVlLCBpdGVtKTtcbiAgICAgICAgdGhpcy5pdGVyYWJsZS51cGRhdGVNZW1vUmVmZXJlbmNlKHRoaXMubWVtbywgaXRlbSk7XG4gICAgfVxuICAgIHNob3VsZFJlbW92ZSgpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLnJldGFpbmVkO1xuICAgIH1cbiAgICByZXNldCgpIHtcbiAgICAgICAgdGhpcy5yZXRhaW5lZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNlZW4gPSBmYWxzZTtcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgSXRlcmF0aW9uQXJ0aWZhY3RzIHtcbiAgICBjb25zdHJ1Y3RvcihpdGVyYWJsZSkge1xuICAgICAgICB0aGlzLm1hcCA9IGRpY3QoKTtcbiAgICAgICAgdGhpcy5saXN0ID0gbmV3IExpbmtlZExpc3QoKTtcbiAgICAgICAgdGhpcy50YWcgPSBpdGVyYWJsZS50YWc7XG4gICAgICAgIHRoaXMuaXRlcmFibGUgPSBpdGVyYWJsZTtcbiAgICB9XG4gICAgaXNFbXB0eSgpIHtcbiAgICAgICAgbGV0IGl0ZXJhdG9yID0gdGhpcy5pdGVyYXRvciA9IHRoaXMuaXRlcmFibGUuaXRlcmF0ZSgpO1xuICAgICAgICByZXR1cm4gaXRlcmF0b3IuaXNFbXB0eSgpO1xuICAgIH1cbiAgICBpdGVyYXRlKCkge1xuICAgICAgICBsZXQgaXRlcmF0b3IgPSB0aGlzLml0ZXJhdG9yIHx8IHRoaXMuaXRlcmFibGUuaXRlcmF0ZSgpO1xuICAgICAgICB0aGlzLml0ZXJhdG9yID0gbnVsbDtcbiAgICAgICAgcmV0dXJuIGl0ZXJhdG9yO1xuICAgIH1cbiAgICBoYXMoa2V5KSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMubWFwW2tleV07XG4gICAgfVxuICAgIGdldChrZXkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwW2tleV07XG4gICAgfVxuICAgIHdhc1NlZW4oa2V5KSB7XG4gICAgICAgIGxldCBub2RlID0gdGhpcy5tYXBba2V5XTtcbiAgICAgICAgcmV0dXJuIG5vZGUgJiYgbm9kZS5zZWVuO1xuICAgIH1cbiAgICBhcHBlbmQoaXRlbSkge1xuICAgICAgICBsZXQgeyBtYXAsIGxpc3QsIGl0ZXJhYmxlIH0gPSB0aGlzO1xuICAgICAgICBsZXQgbm9kZSA9IG1hcFtpdGVtLmtleV0gPSBuZXcgTGlzdEl0ZW0oaXRlcmFibGUsIGl0ZW0pO1xuICAgICAgICBsaXN0LmFwcGVuZChub2RlKTtcbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuICAgIGluc2VydEJlZm9yZShpdGVtLCByZWZlcmVuY2UpIHtcbiAgICAgICAgbGV0IHsgbWFwLCBsaXN0LCBpdGVyYWJsZSB9ID0gdGhpcztcbiAgICAgICAgbGV0IG5vZGUgPSBtYXBbaXRlbS5rZXldID0gbmV3IExpc3RJdGVtKGl0ZXJhYmxlLCBpdGVtKTtcbiAgICAgICAgbm9kZS5yZXRhaW5lZCA9IHRydWU7XG4gICAgICAgIGxpc3QuaW5zZXJ0QmVmb3JlKG5vZGUsIHJlZmVyZW5jZSk7XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH1cbiAgICBtb3ZlKGl0ZW0sIHJlZmVyZW5jZSkge1xuICAgICAgICBsZXQgeyBsaXN0IH0gPSB0aGlzO1xuICAgICAgICBpdGVtLnJldGFpbmVkID0gdHJ1ZTtcbiAgICAgICAgbGlzdC5yZW1vdmUoaXRlbSk7XG4gICAgICAgIGxpc3QuaW5zZXJ0QmVmb3JlKGl0ZW0sIHJlZmVyZW5jZSk7XG4gICAgfVxuICAgIHJlbW92ZShpdGVtKSB7XG4gICAgICAgIGxldCB7IGxpc3QgfSA9IHRoaXM7XG4gICAgICAgIGxpc3QucmVtb3ZlKGl0ZW0pO1xuICAgICAgICBkZWxldGUgdGhpcy5tYXBbaXRlbS5rZXldO1xuICAgIH1cbiAgICBuZXh0Tm9kZShpdGVtKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxpc3QubmV4dE5vZGUoaXRlbSk7XG4gICAgfVxuICAgIGhlYWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxpc3QuaGVhZCgpO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBSZWZlcmVuY2VJdGVyYXRvciB7XG4gICAgLy8gaWYgYW55b25lIG5lZWRzIHRvIGNvbnN0cnVjdCB0aGlzIG9iamVjdCB3aXRoIHNvbWV0aGluZyBvdGhlciB0aGFuXG4gICAgLy8gYW4gaXRlcmFibGUsIGxldCBAd3ljYXRzIGtub3cuXG4gICAgY29uc3RydWN0b3IoaXRlcmFibGUpIHtcbiAgICAgICAgdGhpcy5pdGVyYXRvciA9IG51bGw7XG4gICAgICAgIGxldCBhcnRpZmFjdHMgPSBuZXcgSXRlcmF0aW9uQXJ0aWZhY3RzKGl0ZXJhYmxlKTtcbiAgICAgICAgdGhpcy5hcnRpZmFjdHMgPSBhcnRpZmFjdHM7XG4gICAgfVxuICAgIG5leHQoKSB7XG4gICAgICAgIGxldCB7IGFydGlmYWN0cyB9ID0gdGhpcztcbiAgICAgICAgbGV0IGl0ZXJhdG9yID0gdGhpcy5pdGVyYXRvciA9IHRoaXMuaXRlcmF0b3IgfHwgYXJ0aWZhY3RzLml0ZXJhdGUoKTtcbiAgICAgICAgbGV0IGl0ZW0gPSBpdGVyYXRvci5uZXh0KCk7XG4gICAgICAgIGlmICghaXRlbSkgcmV0dXJuIG51bGw7XG4gICAgICAgIHJldHVybiBhcnRpZmFjdHMuYXBwZW5kKGl0ZW0pO1xuICAgIH1cbn1cbnZhciBQaGFzZTtcbihmdW5jdGlvbiAoUGhhc2UpIHtcbiAgICBQaGFzZVtQaGFzZVtcIkFwcGVuZFwiXSA9IDBdID0gXCJBcHBlbmRcIjtcbiAgICBQaGFzZVtQaGFzZVtcIlBydW5lXCJdID0gMV0gPSBcIlBydW5lXCI7XG4gICAgUGhhc2VbUGhhc2VbXCJEb25lXCJdID0gMl0gPSBcIkRvbmVcIjtcbn0pKFBoYXNlIHx8IChQaGFzZSA9IHt9KSk7XG5leHBvcnQgY2xhc3MgSXRlcmF0b3JTeW5jaHJvbml6ZXIge1xuICAgIGNvbnN0cnVjdG9yKHsgdGFyZ2V0LCBhcnRpZmFjdHMgfSkge1xuICAgICAgICB0aGlzLnRhcmdldCA9IHRhcmdldDtcbiAgICAgICAgdGhpcy5hcnRpZmFjdHMgPSBhcnRpZmFjdHM7XG4gICAgICAgIHRoaXMuaXRlcmF0b3IgPSBhcnRpZmFjdHMuaXRlcmF0ZSgpO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSBhcnRpZmFjdHMuaGVhZCgpO1xuICAgIH1cbiAgICBzeW5jKCkge1xuICAgICAgICBsZXQgcGhhc2UgPSBQaGFzZS5BcHBlbmQ7XG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHBoYXNlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBQaGFzZS5BcHBlbmQ6XG4gICAgICAgICAgICAgICAgICAgIHBoYXNlID0gdGhpcy5uZXh0QXBwZW5kKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgUGhhc2UuUHJ1bmU6XG4gICAgICAgICAgICAgICAgICAgIHBoYXNlID0gdGhpcy5uZXh0UHJ1bmUoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBQaGFzZS5Eb25lOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHREb25lKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBhZHZhbmNlVG9LZXkoa2V5KSB7XG4gICAgICAgIGxldCB7IGN1cnJlbnQsIGFydGlmYWN0cyB9ID0gdGhpcztcbiAgICAgICAgbGV0IHNlZWsgPSBjdXJyZW50O1xuICAgICAgICB3aGlsZSAoc2VlayAmJiBzZWVrLmtleSAhPT0ga2V5KSB7XG4gICAgICAgICAgICBzZWVrLnNlZW4gPSB0cnVlO1xuICAgICAgICAgICAgc2VlayA9IGFydGlmYWN0cy5uZXh0Tm9kZShzZWVrKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmN1cnJlbnQgPSBzZWVrICYmIGFydGlmYWN0cy5uZXh0Tm9kZShzZWVrKTtcbiAgICB9XG4gICAgbmV4dEFwcGVuZCgpIHtcbiAgICAgICAgbGV0IHsgaXRlcmF0b3IsIGN1cnJlbnQsIGFydGlmYWN0cyB9ID0gdGhpcztcbiAgICAgICAgbGV0IGl0ZW0gPSBpdGVyYXRvci5uZXh0KCk7XG4gICAgICAgIGlmIChpdGVtID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdGFydFBydW5lKCk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHsga2V5IH0gPSBpdGVtO1xuICAgICAgICBpZiAoY3VycmVudCAmJiBjdXJyZW50LmtleSA9PT0ga2V5KSB7XG4gICAgICAgICAgICB0aGlzLm5leHRSZXRhaW4oaXRlbSk7XG4gICAgICAgIH0gZWxzZSBpZiAoYXJ0aWZhY3RzLmhhcyhrZXkpKSB7XG4gICAgICAgICAgICB0aGlzLm5leHRNb3ZlKGl0ZW0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5uZXh0SW5zZXJ0KGl0ZW0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBQaGFzZS5BcHBlbmQ7XG4gICAgfVxuICAgIG5leHRSZXRhaW4oaXRlbSkge1xuICAgICAgICBsZXQgeyBhcnRpZmFjdHMsIGN1cnJlbnQgfSA9IHRoaXM7XG4gICAgICAgIGN1cnJlbnQgPSBleHBlY3QoY3VycmVudCwgJ0JVRzogY3VycmVudCBpcyBlbXB0eScpO1xuICAgICAgICBjdXJyZW50LnVwZGF0ZShpdGVtKTtcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gYXJ0aWZhY3RzLm5leHROb2RlKGN1cnJlbnQpO1xuICAgICAgICB0aGlzLnRhcmdldC5yZXRhaW4oaXRlbS5rZXksIGN1cnJlbnQudmFsdWUsIGN1cnJlbnQubWVtbyk7XG4gICAgfVxuICAgIG5leHRNb3ZlKGl0ZW0pIHtcbiAgICAgICAgbGV0IHsgY3VycmVudCwgYXJ0aWZhY3RzLCB0YXJnZXQgfSA9IHRoaXM7XG4gICAgICAgIGxldCB7IGtleSB9ID0gaXRlbTtcbiAgICAgICAgbGV0IGZvdW5kID0gYXJ0aWZhY3RzLmdldChpdGVtLmtleSk7XG4gICAgICAgIGZvdW5kLnVwZGF0ZShpdGVtKTtcbiAgICAgICAgaWYgKGFydGlmYWN0cy53YXNTZWVuKGl0ZW0ua2V5KSkge1xuICAgICAgICAgICAgYXJ0aWZhY3RzLm1vdmUoZm91bmQsIGN1cnJlbnQpO1xuICAgICAgICAgICAgdGFyZ2V0Lm1vdmUoZm91bmQua2V5LCBmb3VuZC52YWx1ZSwgZm91bmQubWVtbywgY3VycmVudCA/IGN1cnJlbnQua2V5IDogbnVsbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmFkdmFuY2VUb0tleShrZXkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIG5leHRJbnNlcnQoaXRlbSkge1xuICAgICAgICBsZXQgeyBhcnRpZmFjdHMsIHRhcmdldCwgY3VycmVudCB9ID0gdGhpcztcbiAgICAgICAgbGV0IG5vZGUgPSBhcnRpZmFjdHMuaW5zZXJ0QmVmb3JlKGl0ZW0sIGN1cnJlbnQpO1xuICAgICAgICB0YXJnZXQuaW5zZXJ0KG5vZGUua2V5LCBub2RlLnZhbHVlLCBub2RlLm1lbW8sIGN1cnJlbnQgPyBjdXJyZW50LmtleSA6IG51bGwpO1xuICAgIH1cbiAgICBzdGFydFBydW5lKCkge1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSB0aGlzLmFydGlmYWN0cy5oZWFkKCk7XG4gICAgICAgIHJldHVybiBQaGFzZS5QcnVuZTtcbiAgICB9XG4gICAgbmV4dFBydW5lKCkge1xuICAgICAgICBsZXQgeyBhcnRpZmFjdHMsIHRhcmdldCwgY3VycmVudCB9ID0gdGhpcztcbiAgICAgICAgaWYgKGN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBQaGFzZS5Eb25lO1xuICAgICAgICB9XG4gICAgICAgIGxldCBub2RlID0gY3VycmVudDtcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gYXJ0aWZhY3RzLm5leHROb2RlKG5vZGUpO1xuICAgICAgICBpZiAobm9kZS5zaG91bGRSZW1vdmUoKSkge1xuICAgICAgICAgICAgYXJ0aWZhY3RzLnJlbW92ZShub2RlKTtcbiAgICAgICAgICAgIHRhcmdldC5kZWxldGUobm9kZS5rZXkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbm9kZS5yZXNldCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBQaGFzZS5QcnVuZTtcbiAgICB9XG4gICAgbmV4dERvbmUoKSB7XG4gICAgICAgIHRoaXMudGFyZ2V0LmRvbmUoKTtcbiAgICB9XG59Il19