UNPKG

ember-legacy-class-transform

Version:
355 lines (298 loc) 28.4 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Arguments = undefined; var _util = require("@glimmer/util"); var _reference = require("@glimmer/reference"); var _references = require("../references"); var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i];descriptor.enumerable = descriptor.enumerable || false;descriptor.configurable = true;if ("value" in descriptor) descriptor.writable = true;Object.defineProperty(target, descriptor.key, descriptor); } }return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps);if (staticProps) defineProperties(Constructor, staticProps);return Constructor; }; }(); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var Arguments = exports.Arguments = function () { function Arguments() { _classCallCheck(this, Arguments); this.stack = null; this.positional = new PositionalArguments(); this.named = new NamedArguments(); } Arguments.prototype.empty = function empty() { this.setup(null, true); return this; }; Arguments.prototype.setup = function setup(stack, synthetic) { this.stack = stack; var names = stack.fromTop(0); var namedCount = names.length; var positionalCount = stack.fromTop(namedCount + 1); var start = positionalCount + namedCount + 2; var positional = this.positional; positional.setup(stack, start, positionalCount); var named = this.named; named.setup(stack, namedCount, names, synthetic); }; Arguments.prototype.at = function at(pos) { return this.positional.at(pos); }; Arguments.prototype.get = function get(name) { return this.named.get(name); }; Arguments.prototype.capture = function capture() { return { tag: this.tag, length: this.length, positional: this.positional.capture(), named: this.named.capture() }; }; Arguments.prototype.clear = function clear() { var stack = this.stack, length = this.length; stack.pop(length + 2); }; _createClass(Arguments, [{ key: 'tag', get: function () { return (0, _reference.combineTagged)([this.positional, this.named]); } }, { key: 'length', get: function () { return this.positional.length + this.named.length; } }]); return Arguments; }(); var PositionalArguments = function () { function PositionalArguments() { _classCallCheck(this, PositionalArguments); this.length = 0; this.stack = null; this.start = 0; this._tag = null; this._references = null; } PositionalArguments.prototype.setup = function setup(stack, start, length) { this.stack = stack; this.start = start; this.length = length; this._tag = null; this._references = null; }; PositionalArguments.prototype.at = function at(position) { var start = this.start, length = this.length; if (position < 0 || position >= length) { return _references.UNDEFINED_REFERENCE; } // stack: pos1, pos2, pos3, named1, named2 // start: 4 (top - 4) // // at(0) === pos1 === top - start // at(1) === pos2 === top - (start - 1) // at(2) === pos3 === top - (start - 2) var fromTop = start - position - 1; return this.stack.fromTop(fromTop); }; PositionalArguments.prototype.capture = function capture() { return new CapturedPositionalArguments(this.tag, this.references); }; _createClass(PositionalArguments, [{ key: 'tag', get: function () { var tag = this._tag; if (!tag) { tag = this._tag = (0, _reference.combineTagged)(this.references); } return tag; } }, { key: 'references', get: function () { var references = this._references; if (!references) { var length = this.length; references = this._references = new Array(length); for (var i = 0; i < length; i++) { references[i] = this.at(i); } } return references; } }]); return PositionalArguments; }(); var CapturedPositionalArguments = function () { function CapturedPositionalArguments(tag, references) { var length = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : references.length; _classCallCheck(this, CapturedPositionalArguments); this.tag = tag; this.references = references; this.length = length; } CapturedPositionalArguments.prototype.at = function at(position) { return this.references[position]; }; CapturedPositionalArguments.prototype.value = function value() { return this.references.map(this.valueOf); }; CapturedPositionalArguments.prototype.get = function get(name) { var references = this.references, length = this.length; if (name === 'length') { return _references.PrimitiveReference.create(length); } else { var idx = parseInt(name, 10); if (idx < 0 || idx >= length) { return _references.UNDEFINED_REFERENCE; } else { return references[idx]; } } }; CapturedPositionalArguments.prototype.valueOf = function valueOf(reference) { return reference.value(); }; return CapturedPositionalArguments; }(); var NamedArguments = function () { function NamedArguments() { _classCallCheck(this, NamedArguments); this.length = 0; this._tag = null; this._references = null; this._names = null; this._realNames = _util.EMPTY_ARRAY; } NamedArguments.prototype.setup = function setup(stack, length, names, synthetic) { this.stack = stack; this.length = length; this._tag = null; this._references = null; if (synthetic) { this._names = names; this._realNames = _util.EMPTY_ARRAY; } else { this._names = null; this._realNames = names; } }; NamedArguments.prototype.has = function has(name) { return this.names.indexOf(name) !== -1; }; NamedArguments.prototype.get = function get(name) { var names = this.names, length = this.length; var idx = names.indexOf(name); if (idx === -1) { return _references.UNDEFINED_REFERENCE; } // stack: pos1, pos2, pos3, named1, named2 // start: 4 (top - 4) // namedDict: { named1: 1, named2: 0 }; // // get('named1') === named1 === top - (start - 1) // get('named2') === named2 === top - start var fromTop = length - idx; return this.stack.fromTop(fromTop); }; NamedArguments.prototype.capture = function capture() { return new CapturedNamedArguments(this.tag, this.names, this.references); }; NamedArguments.prototype.sliceName = function sliceName(name) { return name.slice(1); }; _createClass(NamedArguments, [{ key: 'tag', get: function () { return (0, _reference.combineTagged)(this.references); } }, { key: 'names', get: function () { var names = this._names; if (!names) { names = this._names = this._realNames.map(this.sliceName); } return names; } }, { key: 'references', get: function () { var references = this._references; if (!references) { var names = this.names, length = this.length; references = this._references = []; for (var i = 0; i < length; i++) { references[i] = this.get(names[i]); } } return references; } }]); return NamedArguments; }(); var CapturedNamedArguments = function () { function CapturedNamedArguments(tag, names, references) { _classCallCheck(this, CapturedNamedArguments); this.tag = tag; this.names = names; this.references = references; this.length = names.length; this._map = null; } CapturedNamedArguments.prototype.has = function has(name) { return this.names.indexOf(name) !== -1; }; CapturedNamedArguments.prototype.get = function get(name) { var names = this.names, references = this.references; var idx = names.indexOf(name); if (idx === -1) { return _references.UNDEFINED_REFERENCE; } else { return references[idx]; } }; CapturedNamedArguments.prototype.value = function value() { var names = this.names, references = this.references; var out = (0, _util.dict)(); for (var i = 0; i < names.length; i++) { var name = names[i]; out[name] = references[i].value(); } return out; }; _createClass(CapturedNamedArguments, [{ key: 'map', get: function () { var map = this._map; if (!map) { var names = this.names, references = this.references; map = this._map = (0, _util.dict)(); for (var i = 0; i < names.length; i++) { var name = names[i]; map[name] = references[i]; } } return map; } }]); return CapturedNamedArguments; }(); exports.default = new Arguments(); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi92bS9hcmd1bWVudHMuanMiXSwibmFtZXMiOlsiZGljdCIsIkVNUFRZX0FSUkFZIiwiY29tYmluZVRhZ2dlZCIsIlByaW1pdGl2ZVJlZmVyZW5jZSIsIlVOREVGSU5FRF9SRUZFUkVOQ0UiLCJBcmd1bWVudHMiLCJzdGFjayIsInBvc2l0aW9uYWwiLCJQb3NpdGlvbmFsQXJndW1lbnRzIiwibmFtZWQiLCJOYW1lZEFyZ3VtZW50cyIsImVtcHR5Iiwic2V0dXAiLCJzeW50aGV0aWMiLCJuYW1lcyIsImZyb21Ub3AiLCJuYW1lZENvdW50IiwibGVuZ3RoIiwicG9zaXRpb25hbENvdW50Iiwic3RhcnQiLCJhdCIsInBvcyIsImdldCIsIm5hbWUiLCJjYXB0dXJlIiwidGFnIiwiY2xlYXIiLCJwb3AiLCJfdGFnIiwiX3JlZmVyZW5jZXMiLCJwb3NpdGlvbiIsIkNhcHR1cmVkUG9zaXRpb25hbEFyZ3VtZW50cyIsInJlZmVyZW5jZXMiLCJBcnJheSIsImkiLCJ2YWx1ZSIsIm1hcCIsInZhbHVlT2YiLCJjcmVhdGUiLCJpZHgiLCJwYXJzZUludCIsInJlZmVyZW5jZSIsIl9uYW1lcyIsIl9yZWFsTmFtZXMiLCJoYXMiLCJpbmRleE9mIiwiQ2FwdHVyZWROYW1lZEFyZ3VtZW50cyIsInNsaWNlTmFtZSIsInNsaWNlIiwiX21hcCIsIm91dCJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBLEFBQVMsQUFBTSxBQUFtQjs7QUFDbEMsQUFBUyxBQUFxQjs7QUFDOUIsQUFBUyxBQUFvQixBQUEyQixBQUN4RDs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBQUEsQUFBYSw0Q0FDVDt5QkFBYzs4QkFDVjs7YUFBQSxBQUFLLFFBQUwsQUFBYSxBQUNiO2FBQUEsQUFBSyxhQUFhLElBQWxCLEFBQWtCLEFBQUksQUFDdEI7YUFBQSxBQUFLLFFBQVEsSUFBYixBQUFhLEFBQUksQUFDcEI7QUFMTDs7d0JBQUEsQUFNSSx5QkFBUSxBQUNKO2FBQUEsQUFBSyxNQUFMLEFBQVcsTUFBWCxBQUFpQixBQUNqQjtlQUFBLEFBQU8sQUFDVjtBQVRMOzt3QkFBQSxBQVVJLHVCQVZKLEFBVVUsT0FWVixBQVVpQixXQUFXLEFBQ3BCO2FBQUEsQUFBSyxRQUFMLEFBQWEsQUFDYjtZQUFJLFFBQVEsTUFBQSxBQUFNLFFBQWxCLEFBQVksQUFBYyxBQUMxQjtZQUFJLGFBQWEsTUFBakIsQUFBdUIsQUFDdkI7WUFBSSxrQkFBa0IsTUFBQSxBQUFNLFFBQVEsYUFBcEMsQUFBc0IsQUFBMkIsQUFDakQ7WUFBSSxRQUFRLGtCQUFBLEFBQWtCLGFBQTlCLEFBQTJDLEFBQzNDO1lBQUksYUFBYSxLQUFqQixBQUFzQixBQUN0QjttQkFBQSxBQUFXLE1BQVgsQUFBaUIsT0FBakIsQUFBd0IsT0FBeEIsQUFBK0IsQUFDL0I7WUFBSSxRQUFRLEtBQVosQUFBaUIsQUFDakI7Y0FBQSxBQUFNLE1BQU4sQUFBWSxPQUFaLEFBQW1CLFlBQW5CLEFBQStCLE9BQS9CLEFBQXNDLEFBQ3pDO0FBcEJMOzt3QkFBQSxBQTJCSSxpQkEzQkosQUEyQk8sS0FBSyxBQUNKO2VBQU8sS0FBQSxBQUFLLFdBQUwsQUFBZ0IsR0FBdkIsQUFBTyxBQUFtQixBQUM3QjtBQTdCTDs7d0JBQUEsQUE4QkksbUJBOUJKLEFBOEJRLE1BQU0sQUFDTjtlQUFPLEtBQUEsQUFBSyxNQUFMLEFBQVcsSUFBbEIsQUFBTyxBQUFlLEFBQ3pCO0FBaENMOzt3QkFBQSxBQWlDSSw2QkFBVSxBQUNOOztpQkFDUyxLQURGLEFBQ08sQUFDVjtvQkFBUSxLQUZMLEFBRVUsQUFDYjt3QkFBWSxLQUFBLEFBQUssV0FIZCxBQUdTLEFBQWdCLEFBQzVCO21CQUFPLEtBQUEsQUFBSyxNQUpoQixBQUFPLEFBSUksQUFBVyxBQUV6QjtBQU5VLEFBQ0g7QUFuQ1o7O3dCQUFBLEFBeUNJLHlCQUFRO1lBQUEsQUFDRSxRQURGLEFBQ29CLEtBRHBCLEFBQ0U7WUFERixBQUNTLFNBRFQsQUFDb0IsS0FEcEIsQUFDUyxBQUNiOztjQUFBLEFBQU0sSUFBSSxTQUFWLEFBQW1CLEFBQ3RCO0FBNUNMOzs7YUFBQTt5QkFxQmMsQUFDTjttQkFBTyw4QkFBYyxDQUFDLEtBQUQsQUFBTSxZQUFZLEtBQXZDLEFBQU8sQUFBYyxBQUF1QixBQUMvQztBQXZCTDtBQUFBO2FBQUE7eUJBd0JpQixBQUNUO21CQUFPLEtBQUEsQUFBSyxXQUFMLEFBQWdCLFNBQVMsS0FBQSxBQUFLLE1BQXJDLEFBQTJDLEFBQzlDO0FBMUJMO0FBQUE7O1dBQUE7OztJQThDTSxBLGtDQUNGO21DQUFjOzhCQUNWOzthQUFBLEFBQUssU0FBTCxBQUFjLEFBQ2Q7YUFBQSxBQUFLLFFBQUwsQUFBYSxBQUNiO2FBQUEsQUFBSyxRQUFMLEFBQWEsQUFDYjthQUFBLEFBQUssT0FBTCxBQUFZLEFBQ1o7YUFBQSxBQUFLLGNBQUwsQUFBbUIsQUFDdEI7OztrQ0FDRCxBLHVCQUFNLEEsT0FBTyxBLE8sQUFBTyxRQUFRLEFBQ3hCO2FBQUEsQUFBSyxRQUFMLEFBQWEsQUFDYjthQUFBLEFBQUssUUFBTCxBQUFhLEFBQ2I7YUFBQSxBQUFLLFNBQUwsQUFBYyxBQUNkO2FBQUEsQUFBSyxPQUFMLEFBQVksQUFDWjthQUFBLEFBQUssY0FBTCxBQUFtQixBQUN0QjtBOztrQ0FRRCxBLGlCLEFBQUcsVUFBVTtZQUFBLEFBQ0gsUUFERyxBQUNlLEtBRGYsQUFDSDtZQURHLEFBQ0ksU0FESixBQUNlLEtBRGYsQUFDSSxBQUNiOztZQUFJLFdBQUEsQUFBVyxLQUFLLFlBQXBCLEFBQWdDLFFBQVEsQUFDcEM7QUFBQSxBQUFPLEFBQ1Y7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtZQUFJLFVBQVUsUUFBQSxBQUFRLFdBQXRCLEFBQWlDLEFBQ2pDO2VBQU8sS0FBQSxBQUFLLE1BQUwsQUFBVyxRQUFsQixBQUFPLEFBQW1CLEFBQzdCO0E7O2tDQUNELEEsNkJBQVUsQUFDTjtlQUFPLElBQUEsQUFBSSw0QkFBNEIsS0FBaEMsQUFBcUMsS0FBSyxLQUFqRCxBQUFPLEFBQStDLEFBQ3pEO0E7Ozs7eUJBdkJTLEFBQ047Z0JBQUksTUFBTSxLQUFWLEFBQWUsQUFDZjtnQkFBSSxDQUFKLEFBQUssS0FBSyxBQUNOO3NCQUFNLEtBQUEsQUFBSyxPQUFPLDhCQUFjLEtBQWhDLEFBQWtCLEFBQW1CLEFBQ3hDO0FBQ0Q7bUJBQUEsQUFBTyxBQUNWOzs7O3lCQWtCZ0IsQUFDYjtnQkFBSSxhQUFhLEtBQWpCLEFBQXNCLEFBQ3RCO2dCQUFJLENBQUosQUFBSyxZQUFZO29CQUFBLEFBQ1AsU0FETyxBQUNJLEtBREosQUFDUCxBQUNOOzs2QkFBYSxLQUFBLEFBQUssY0FBYyxJQUFBLEFBQUksTUFBcEMsQUFBZ0MsQUFBVSxBQUMxQztxQkFBSyxJQUFJLElBQVQsQUFBYSxHQUFHLElBQWhCLEFBQW9CLFFBQXBCLEFBQTRCLEtBQUssQUFDN0I7K0JBQUEsQUFBVyxLQUFLLEtBQUEsQUFBSyxHQUFyQixBQUFnQixBQUFRLEFBQzNCO0FBQ0o7QUFDRDttQkFBQSxBQUFPLEFBQ1Y7Ozs7Ozs7SSxBQUVDLDBDQUNGO3lDQUFBLEFBQVksS0FBWixBQUFpQixZQUF3QztZQUE1QixBQUE0Qiw2RUFBbkIsV0FBVyxBQUFROzs4QkFDckQ7O2FBQUEsQUFBSyxNQUFMLEFBQVcsQUFDWDthQUFBLEFBQUssYUFBTCxBQUFrQixBQUNsQjthQUFBLEFBQUssU0FBTCxBQUFjLEFBQ2pCOzs7MEMsQUFDRCxpQixBQUFHLFVBQVUsQUFDVDtlQUFPLEtBQUEsQUFBSyxXQUFaLEFBQU8sQUFBZ0IsQUFDMUI7QTs7MENBQ0QsQSx5QkFBUSxBQUNKO2VBQU8sS0FBQSxBQUFLLFdBQUwsQUFBZ0IsSUFBSSxLQUEzQixBQUFPLEFBQXlCLEFBQ25DO0E7OzBDLEFBQ0QsbUIsQUFBSSxNQUFNO1lBQUEsQUFDQSxhQURBLEFBQ3VCLEtBRHZCLEFBQ0E7WUFEQSxBQUNZLFNBRFosQUFDdUIsS0FEdkIsQUFDWSxBQUNsQjs7WUFBSSxTQUFKLEFBQWEsVUFBVSxBQUNuQjttQkFBTywrQkFBQSxBQUFtQixPQUExQixBQUFPLEFBQTBCLEFBQ3BDO0FBRkQsZUFFTyxBQUNIO2dCQUFJLE1BQU0sU0FBQSxBQUFTLE1BQW5CLEFBQVUsQUFBZSxBQUN6QjtnQkFBSSxNQUFBLEFBQU0sS0FBSyxPQUFmLEFBQXNCLFFBQVEsQUFDMUI7QUFBQSxBQUFPLEFBQ1Y7QUFGRCxtQkFFTyxBQUNIO3VCQUFPLFdBQVAsQUFBTyxBQUFXLEFBQ3JCO0FBQ0o7QUFDSjtBOzswQ0FDRCxBLDJCQUFRLEEsV0FBVyxBQUNmO2VBQU8sVUFBUCxBQUFPLEFBQVUsQUFDcEI7QTs7Ozs7SSxBQUVDLDZCQUNGOzhCQUFjOzhCQUNWOzthQUFBLEFBQUssU0FBTCxBQUFjLEFBQ2Q7YUFBQSxBQUFLLE9BQUwsQUFBWSxBQUNaO2FBQUEsQUFBSyxjQUFMLEFBQW1CLEFBQ25CO2FBQUEsQUFBSyxTQUFMLEFBQWMsQUFDZDthQUFBLEFBQUssQUFBYSxBQUNyQjs7OzZCLEFBQ0QsdUIsQUFBTSxPLEFBQU8sUSxBQUFRLE8sQUFBTyxXQUFXLEFBQ25DO2FBQUEsQUFBSyxRQUFMLEFBQWEsQUFDYjthQUFBLEFBQUssU0FBTCxBQUFjLEFBQ2Q7YUFBQSxBQUFLLE9BQUwsQUFBWSxBQUNaO2FBQUEsQUFBSyxjQUFMLEFBQW1CLEFBQ25CO1lBQUEsQUFBSSxXQUFXLEFBQ1g7aUJBQUEsQUFBSyxTQUFMLEFBQWMsQUFDZDtpQkFBQSxBQUFLLEFBQWEsQUFDckI7QUFIRCxlQUdPLEFBQ0g7aUJBQUEsQUFBSyxTQUFMLEFBQWMsQUFDZDtpQkFBQSxBQUFLLGFBQUwsQUFBa0IsQUFDckI7QUFDSjtBOzs2QkFXRCxBLG1CQUFJLEEsTUFBTSxBQUNOO2VBQU8sS0FBQSxBQUFLLE1BQUwsQUFBVyxRQUFYLEFBQW1CLFVBQVUsQ0FBcEMsQUFBcUMsQUFDeEM7QTs7NkIsQUFDRCxtQkFBSSxBLE1BQU07WUFBQSxBQUNBLFFBREEsQUFDa0IsS0FEbEIsQUFDQTtZQURBLEFBQ08sU0FEUCxBQUNrQixLQURsQixBQUNPLEFBQ2I7O1lBQUksTUFBTSxNQUFBLEFBQU0sUUFBaEIsQUFBVSxBQUFjLEFBQ3hCO1lBQUksUUFBUSxDQUFaLEFBQWEsR0FBRyxBQUNaO0FBQUEsQUFBTyxBQUNWO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7WUFBSSxVQUFVLFNBQWQsQUFBdUIsQUFDdkI7ZUFBTyxLQUFBLEFBQUssTUFBTCxBQUFXLFFBQWxCLEFBQU8sQUFBbUIsQUFDN0I7QTs7NkIsQUFDRCw2QkFBVSxBQUNOO2VBQU8sSUFBQSxBQUFJLHVCQUF1QixLQUEzQixBQUFnQyxLQUFLLEtBQXJDLEFBQTBDLE9BQU8sS0FBeEQsQUFBTyxBQUFzRCxBQUNoRTtBOzs2QkFZRCxBLCtCLEFBQVUsTUFBTSxBQUNaO2VBQU8sS0FBQSxBQUFLLE1BQVosQUFBTyxBQUFXLEFBQ3JCO0E7Ozs7eUJBNUNTLEFBQ047bUJBQU8sOEJBQWMsS0FBckIsQUFBTyxBQUFtQixBQUM3Qjs7Ozt5QkFDVyxBQUNSO2dCQUFJLFFBQVEsS0FBWixBQUFpQixBQUNqQjtnQkFBSSxDQUFKLEFBQUssT0FBTyxBQUNSO3dCQUFRLEtBQUEsQUFBSyxTQUFTLEtBQUEsQUFBSyxXQUFMLEFBQWdCLElBQUksS0FBMUMsQUFBc0IsQUFBeUIsQUFDbEQ7QUFDRDttQkFBQSxBQUFPLEFBQ1Y7Ozs7eUJBc0JnQixBQUNiO2dCQUFJLGFBQWEsS0FBakIsQUFBc0IsQUFDdEI7Z0JBQUksQ0FBSixBQUFLLFlBQVk7b0JBQUEsQUFDUCxRQURPLEFBQ1csS0FEWCxBQUNQO29CQURPLEFBQ0EsU0FEQSxBQUNXLEtBRFgsQUFDQSxBQUNiOzs2QkFBYSxLQUFBLEFBQUssY0FBbEIsQUFBZ0MsQUFDaEM7cUJBQUssSUFBSSxJQUFULEFBQWEsR0FBRyxJQUFoQixBQUFvQixRQUFwQixBQUE0QixLQUFLLEFBQzdCOytCQUFBLEFBQVcsS0FBSyxLQUFBLEFBQUssSUFBSSxNQUF6QixBQUFnQixBQUFTLEFBQU0sQUFDbEM7QUFDSjtBQUNEO21CQUFBLEFBQU8sQUFDVjs7Ozs7OztJLEFBS0MscUNBQ0Y7b0NBQUEsQUFBWSxLQUFaLEFBQWlCLE9BQWpCLEFBQXdCLFlBQVk7OEJBQ2hDOzthQUFBLEFBQUssTUFBTCxBQUFXLEFBQ1g7YUFBQSxBQUFLLFFBQUwsQUFBYSxBQUNiO2FBQUEsQUFBSyxhQUFMLEFBQWtCLEFBQ2xCO2FBQUEsQUFBSyxTQUFTLE1BQWQsQUFBb0IsQUFDcEI7YUFBQSxBQUFLLE9BQUwsQUFBWSxBQUNmOzs7cUMsQUFhRCxtQkFBSSxBLE1BQU0sQUFDTjtlQUFPLEtBQUEsQUFBSyxNQUFMLEFBQVcsUUFBWCxBQUFtQixVQUFVLENBQXBDLEFBQXFDLEFBQ3hDO0E7O3FDQUNELEEsbUIsQUFBSSxNQUFNO1lBQUEsQUFDQSxRQURBLEFBQ3NCLEtBRHRCLEFBQ0E7WUFEQSxBQUNPLGFBRFAsQUFDc0IsS0FEdEIsQUFDTyxBQUNiOztZQUFJLE1BQU0sTUFBQSxBQUFNLFFBQWhCLEFBQVUsQUFBYyxBQUN4QjtZQUFJLFFBQVEsQ0FBWixBQUFhLEdBQUcsQUFDWjtBQUFBLEFBQU8sQUFDVjtBQUZELGVBRU8sQUFDSDttQkFBTyxXQUFQLEFBQU8sQUFBVyxBQUNyQjtBQUNKO0E7O3FDQUNELEEseUJBQVE7WUFBQSxBQUNFLFFBREYsQUFDd0IsS0FEeEIsQUFDRTtZQURGLEFBQ1MsYUFEVCxBQUN3QixLQUR4QixBQUNTLEFBQ2I7O1lBQUksTUFBSixBQUFVLEFBQ1Y7YUFBSyxJQUFJLElBQVQsQUFBYSxHQUFHLElBQUksTUFBcEIsQUFBMEIsUUFBMUIsQUFBa0MsS0FBSyxBQUNuQztnQkFBSSxPQUFPLE1BQVgsQUFBVyxBQUFNLEFBQ2pCO2dCQUFBLEFBQUksUUFBUSxXQUFBLEFBQVcsR0FBdkIsQUFBWSxBQUFjLEFBQzdCO0FBQ0Q7ZUFBQSxBQUFPLEFBQ1Y7QTs7Ozt5QkFoQ1MsQUFDTjtnQkFBSSxNQUFNLEtBQVYsQUFBZSxBQUNmO2dCQUFJLENBQUosQUFBSyxLQUFLO29CQUFBLEFBQ0EsUUFEQSxBQUNzQixLQUR0QixBQUNBO29CQURBLEFBQ08sYUFEUCxBQUNzQixLQUR0QixBQUNPLEFBQ2I7O3NCQUFNLEtBQUEsQUFBSyxPQUFYLEFBQWtCLEFBQ2xCO3FCQUFLLElBQUksSUFBVCxBQUFhLEdBQUcsSUFBSSxNQUFwQixBQUEwQixRQUExQixBQUFrQyxLQUFLLEFBQ25DO3dCQUFJLE9BQU8sTUFBWCxBQUFXLEFBQU0sQUFDakI7d0JBQUEsQUFBSSxRQUFRLFdBQVosQUFBWSxBQUFXLEFBQzFCO0FBQ0o7QUFDRDttQkFBQSxBQUFPLEFBQ1Y7Ozs7O0FBdUJMOztrQkFBZSxJQUFmLEFBQWUsQUFBSSIsImZpbGUiOiJsaWIvdm0vYXJndW1lbnRzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGljdCwgRU1QVFlfQVJSQVkgfSBmcm9tICdAZ2xpbW1lci91dGlsJztcbmltcG9ydCB7IGNvbWJpbmVUYWdnZWQgfSBmcm9tICdAZ2xpbW1lci9yZWZlcmVuY2UnO1xuaW1wb3J0IHsgUHJpbWl0aXZlUmVmZXJlbmNlLCBVTkRFRklORURfUkVGRVJFTkNFIH0gZnJvbSAnLi4vcmVmZXJlbmNlcyc7XG5leHBvcnQgY2xhc3MgQXJndW1lbnRzIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5zdGFjayA9IG51bGw7XG4gICAgICAgIHRoaXMucG9zaXRpb25hbCA9IG5ldyBQb3NpdGlvbmFsQXJndW1lbnRzKCk7XG4gICAgICAgIHRoaXMubmFtZWQgPSBuZXcgTmFtZWRBcmd1bWVudHMoKTtcbiAgICB9XG4gICAgZW1wdHkoKSB7XG4gICAgICAgIHRoaXMuc2V0dXAobnVsbCwgdHJ1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBzZXR1cChzdGFjaywgc3ludGhldGljKSB7XG4gICAgICAgIHRoaXMuc3RhY2sgPSBzdGFjaztcbiAgICAgICAgbGV0IG5hbWVzID0gc3RhY2suZnJvbVRvcCgwKTtcbiAgICAgICAgbGV0IG5hbWVkQ291bnQgPSBuYW1lcy5sZW5ndGg7XG4gICAgICAgIGxldCBwb3NpdGlvbmFsQ291bnQgPSBzdGFjay5mcm9tVG9wKG5hbWVkQ291bnQgKyAxKTtcbiAgICAgICAgbGV0IHN0YXJ0ID0gcG9zaXRpb25hbENvdW50ICsgbmFtZWRDb3VudCArIDI7XG4gICAgICAgIGxldCBwb3NpdGlvbmFsID0gdGhpcy5wb3NpdGlvbmFsO1xuICAgICAgICBwb3NpdGlvbmFsLnNldHVwKHN0YWNrLCBzdGFydCwgcG9zaXRpb25hbENvdW50KTtcbiAgICAgICAgbGV0IG5hbWVkID0gdGhpcy5uYW1lZDtcbiAgICAgICAgbmFtZWQuc2V0dXAoc3RhY2ssIG5hbWVkQ291bnQsIG5hbWVzLCBzeW50aGV0aWMpO1xuICAgIH1cbiAgICBnZXQgdGFnKCkge1xuICAgICAgICByZXR1cm4gY29tYmluZVRhZ2dlZChbdGhpcy5wb3NpdGlvbmFsLCB0aGlzLm5hbWVkXSk7XG4gICAgfVxuICAgIGdldCBsZW5ndGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9uYWwubGVuZ3RoICsgdGhpcy5uYW1lZC5sZW5ndGg7XG4gICAgfVxuICAgIGF0KHBvcykge1xuICAgICAgICByZXR1cm4gdGhpcy5wb3NpdGlvbmFsLmF0KHBvcyk7XG4gICAgfVxuICAgIGdldChuYW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5hbWVkLmdldChuYW1lKTtcbiAgICB9XG4gICAgY2FwdHVyZSgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRhZzogdGhpcy50YWcsXG4gICAgICAgICAgICBsZW5ndGg6IHRoaXMubGVuZ3RoLFxuICAgICAgICAgICAgcG9zaXRpb25hbDogdGhpcy5wb3NpdGlvbmFsLmNhcHR1cmUoKSxcbiAgICAgICAgICAgIG5hbWVkOiB0aGlzLm5hbWVkLmNhcHR1cmUoKVxuICAgICAgICB9O1xuICAgIH1cbiAgICBjbGVhcigpIHtcbiAgICAgICAgbGV0IHsgc3RhY2ssIGxlbmd0aCB9ID0gdGhpcztcbiAgICAgICAgc3RhY2sucG9wKGxlbmd0aCArIDIpO1xuICAgIH1cbn1cbmNsYXNzIFBvc2l0aW9uYWxBcmd1bWVudHMge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmxlbmd0aCA9IDA7XG4gICAgICAgIHRoaXMuc3RhY2sgPSBudWxsO1xuICAgICAgICB0aGlzLnN0YXJ0ID0gMDtcbiAgICAgICAgdGhpcy5fdGFnID0gbnVsbDtcbiAgICAgICAgdGhpcy5fcmVmZXJlbmNlcyA9IG51bGw7XG4gICAgfVxuICAgIHNldHVwKHN0YWNrLCBzdGFydCwgbGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuc3RhY2sgPSBzdGFjaztcbiAgICAgICAgdGhpcy5zdGFydCA9IHN0YXJ0O1xuICAgICAgICB0aGlzLmxlbmd0aCA9IGxlbmd0aDtcbiAgICAgICAgdGhpcy5fdGFnID0gbnVsbDtcbiAgICAgICAgdGhpcy5fcmVmZXJlbmNlcyA9IG51bGw7XG4gICAgfVxuICAgIGdldCB0YWcoKSB7XG4gICAgICAgIGxldCB0YWcgPSB0aGlzLl90YWc7XG4gICAgICAgIGlmICghdGFnKSB7XG4gICAgICAgICAgICB0YWcgPSB0aGlzLl90YWcgPSBjb21iaW5lVGFnZ2VkKHRoaXMucmVmZXJlbmNlcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRhZztcbiAgICB9XG4gICAgYXQocG9zaXRpb24pIHtcbiAgICAgICAgbGV0IHsgc3RhcnQsIGxlbmd0aCB9ID0gdGhpcztcbiAgICAgICAgaWYgKHBvc2l0aW9uIDwgMCB8fCBwb3NpdGlvbiA+PSBsZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBVTkRFRklORURfUkVGRVJFTkNFO1xuICAgICAgICB9XG4gICAgICAgIC8vIHN0YWNrOiBwb3MxLCBwb3MyLCBwb3MzLCBuYW1lZDEsIG5hbWVkMlxuICAgICAgICAvLyBzdGFydDogNCAodG9wIC0gNClcbiAgICAgICAgLy9cbiAgICAgICAgLy8gYXQoMCkgPT09IHBvczEgPT09IHRvcCAtIHN0YXJ0XG4gICAgICAgIC8vIGF0KDEpID09PSBwb3MyID09PSB0b3AgLSAoc3RhcnQgLSAxKVxuICAgICAgICAvLyBhdCgyKSA9PT0gcG9zMyA9PT0gdG9wIC0gKHN0YXJ0IC0gMilcbiAgICAgICAgbGV0IGZyb21Ub3AgPSBzdGFydCAtIHBvc2l0aW9uIC0gMTtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhY2suZnJvbVRvcChmcm9tVG9wKTtcbiAgICB9XG4gICAgY2FwdHVyZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDYXB0dXJlZFBvc2l0aW9uYWxBcmd1bWVudHModGhpcy50YWcsIHRoaXMucmVmZXJlbmNlcyk7XG4gICAgfVxuICAgIGdldCByZWZlcmVuY2VzKCkge1xuICAgICAgICBsZXQgcmVmZXJlbmNlcyA9IHRoaXMuX3JlZmVyZW5jZXM7XG4gICAgICAgIGlmICghcmVmZXJlbmNlcykge1xuICAgICAgICAgICAgbGV0IHsgbGVuZ3RoIH0gPSB0aGlzO1xuICAgICAgICAgICAgcmVmZXJlbmNlcyA9IHRoaXMuX3JlZmVyZW5jZXMgPSBuZXcgQXJyYXkobGVuZ3RoKTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICByZWZlcmVuY2VzW2ldID0gdGhpcy5hdChpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVmZXJlbmNlcztcbiAgICB9XG59XG5jbGFzcyBDYXB0dXJlZFBvc2l0aW9uYWxBcmd1bWVudHMge1xuICAgIGNvbnN0cnVjdG9yKHRhZywgcmVmZXJlbmNlcywgbGVuZ3RoID0gcmVmZXJlbmNlcy5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy50YWcgPSB0YWc7XG4gICAgICAgIHRoaXMucmVmZXJlbmNlcyA9IHJlZmVyZW5jZXM7XG4gICAgICAgIHRoaXMubGVuZ3RoID0gbGVuZ3RoO1xuICAgIH1cbiAgICBhdChwb3NpdGlvbikge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWZlcmVuY2VzW3Bvc2l0aW9uXTtcbiAgICB9XG4gICAgdmFsdWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlZmVyZW5jZXMubWFwKHRoaXMudmFsdWVPZik7XG4gICAgfVxuICAgIGdldChuYW1lKSB7XG4gICAgICAgIGxldCB7IHJlZmVyZW5jZXMsIGxlbmd0aCB9ID0gdGhpcztcbiAgICAgICAgaWYgKG5hbWUgPT09ICdsZW5ndGgnKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJpbWl0aXZlUmVmZXJlbmNlLmNyZWF0ZShsZW5ndGgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IGlkeCA9IHBhcnNlSW50KG5hbWUsIDEwKTtcbiAgICAgICAgICAgIGlmIChpZHggPCAwIHx8IGlkeCA+PSBsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gVU5ERUZJTkVEX1JFRkVSRU5DRTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXNbaWR4XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICB2YWx1ZU9mKHJlZmVyZW5jZSkge1xuICAgICAgICByZXR1cm4gcmVmZXJlbmNlLnZhbHVlKCk7XG4gICAgfVxufVxuY2xhc3MgTmFtZWRBcmd1bWVudHMge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmxlbmd0aCA9IDA7XG4gICAgICAgIHRoaXMuX3RhZyA9IG51bGw7XG4gICAgICAgIHRoaXMuX3JlZmVyZW5jZXMgPSBudWxsO1xuICAgICAgICB0aGlzLl9uYW1lcyA9IG51bGw7XG4gICAgICAgIHRoaXMuX3JlYWxOYW1lcyA9IEVNUFRZX0FSUkFZO1xuICAgIH1cbiAgICBzZXR1cChzdGFjaywgbGVuZ3RoLCBuYW1lcywgc3ludGhldGljKSB7XG4gICAgICAgIHRoaXMuc3RhY2sgPSBzdGFjaztcbiAgICAgICAgdGhpcy5sZW5ndGggPSBsZW5ndGg7XG4gICAgICAgIHRoaXMuX3RhZyA9IG51bGw7XG4gICAgICAgIHRoaXMuX3JlZmVyZW5jZXMgPSBudWxsO1xuICAgICAgICBpZiAoc3ludGhldGljKSB7XG4gICAgICAgICAgICB0aGlzLl9uYW1lcyA9IG5hbWVzO1xuICAgICAgICAgICAgdGhpcy5fcmVhbE5hbWVzID0gRU1QVFlfQVJSQVk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9uYW1lcyA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLl9yZWFsTmFtZXMgPSBuYW1lcztcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgdGFnKCkge1xuICAgICAgICByZXR1cm4gY29tYmluZVRhZ2dlZCh0aGlzLnJlZmVyZW5jZXMpO1xuICAgIH1cbiAgICBnZXQgbmFtZXMoKSB7XG4gICAgICAgIGxldCBuYW1lcyA9IHRoaXMuX25hbWVzO1xuICAgICAgICBpZiAoIW5hbWVzKSB7XG4gICAgICAgICAgICBuYW1lcyA9IHRoaXMuX25hbWVzID0gdGhpcy5fcmVhbE5hbWVzLm1hcCh0aGlzLnNsaWNlTmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5hbWVzO1xuICAgIH1cbiAgICBoYXMobmFtZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5uYW1lcy5pbmRleE9mKG5hbWUpICE9PSAtMTtcbiAgICB9XG4gICAgZ2V0KG5hbWUpIHtcbiAgICAgICAgbGV0IHsgbmFtZXMsIGxlbmd0aCB9ID0gdGhpcztcbiAgICAgICAgbGV0IGlkeCA9IG5hbWVzLmluZGV4T2YobmFtZSk7XG4gICAgICAgIGlmIChpZHggPT09IC0xKSB7XG4gICAgICAgICAgICByZXR1cm4gVU5ERUZJTkVEX1JFRkVSRU5DRTtcbiAgICAgICAgfVxuICAgICAgICAvLyBzdGFjazogcG9zMSwgcG9zMiwgcG9zMywgbmFtZWQxLCBuYW1lZDJcbiAgICAgICAgLy8gc3RhcnQ6IDQgKHRvcCAtIDQpXG4gICAgICAgIC8vIG5hbWVkRGljdDogeyBuYW1lZDE6IDEsIG5hbWVkMjogMCB9O1xuICAgICAgICAvL1xuICAgICAgICAvLyBnZXQoJ25hbWVkMScpID09PSBuYW1lZDEgPT09IHRvcCAtIChzdGFydCAtIDEpXG4gICAgICAgIC8vIGdldCgnbmFtZWQyJykgPT09IG5hbWVkMiA9PT0gdG9wIC0gc3RhcnRcbiAgICAgICAgbGV0IGZyb21Ub3AgPSBsZW5ndGggLSBpZHg7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YWNrLmZyb21Ub3AoZnJvbVRvcCk7XG4gICAgfVxuICAgIGNhcHR1cmUoKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ2FwdHVyZWROYW1lZEFyZ3VtZW50cyh0aGlzLnRhZywgdGhpcy5uYW1lcywgdGhpcy5yZWZlcmVuY2VzKTtcbiAgICB9XG4gICAgZ2V0IHJlZmVyZW5jZXMoKSB7XG4gICAgICAgIGxldCByZWZlcmVuY2VzID0gdGhpcy5fcmVmZXJlbmNlcztcbiAgICAgICAgaWYgKCFyZWZlcmVuY2VzKSB7XG4gICAgICAgICAgICBsZXQgeyBuYW1lcywgbGVuZ3RoIH0gPSB0aGlzO1xuICAgICAgICAgICAgcmVmZXJlbmNlcyA9IHRoaXMuX3JlZmVyZW5jZXMgPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICByZWZlcmVuY2VzW2ldID0gdGhpcy5nZXQobmFtZXNbaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZWZlcmVuY2VzO1xuICAgIH1cbiAgICBzbGljZU5hbWUobmFtZSkge1xuICAgICAgICByZXR1cm4gbmFtZS5zbGljZSgxKTtcbiAgICB9XG59XG5jbGFzcyBDYXB0dXJlZE5hbWVkQXJndW1lbnRzIHtcbiAgICBjb25zdHJ1Y3Rvcih0YWcsIG5hbWVzLCByZWZlcmVuY2VzKSB7XG4gICAgICAgIHRoaXMudGFnID0gdGFnO1xuICAgICAgICB0aGlzLm5hbWVzID0gbmFtZXM7XG4gICAgICAgIHRoaXMucmVmZXJlbmNlcyA9IHJlZmVyZW5jZXM7XG4gICAgICAgIHRoaXMubGVuZ3RoID0gbmFtZXMubGVuZ3RoO1xuICAgICAgICB0aGlzLl9tYXAgPSBudWxsO1xuICAgIH1cbiAgICBnZXQgbWFwKCkge1xuICAgICAgICBsZXQgbWFwID0gdGhpcy5fbWFwO1xuICAgICAgICBpZiAoIW1hcCkge1xuICAgICAgICAgICAgbGV0IHsgbmFtZXMsIHJlZmVyZW5jZXMgfSA9IHRoaXM7XG4gICAgICAgICAgICBtYXAgPSB0aGlzLl9tYXAgPSBkaWN0KCk7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IG5hbWUgPSBuYW1lc1tpXTtcbiAgICAgICAgICAgICAgICBtYXBbbmFtZV0gPSByZWZlcmVuY2VzW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtYXA7XG4gICAgfVxuICAgIGhhcyhuYW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5hbWVzLmluZGV4T2YobmFtZSkgIT09IC0xO1xuICAgIH1cbiAgICBnZXQobmFtZSkge1xuICAgICAgICBsZXQgeyBuYW1lcywgcmVmZXJlbmNlcyB9ID0gdGhpcztcbiAgICAgICAgbGV0IGlkeCA9IG5hbWVzLmluZGV4T2YobmFtZSk7XG4gICAgICAgIGlmIChpZHggPT09IC0xKSB7XG4gICAgICAgICAgICByZXR1cm4gVU5ERUZJTkVEX1JFRkVSRU5DRTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzW2lkeF07XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmFsdWUoKSB7XG4gICAgICAgIGxldCB7IG5hbWVzLCByZWZlcmVuY2VzIH0gPSB0aGlzO1xuICAgICAgICBsZXQgb3V0ID0gZGljdCgpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgbmFtZSA9IG5hbWVzW2ldO1xuICAgICAgICAgICAgb3V0W25hbWVdID0gcmVmZXJlbmNlc1tpXS52YWx1ZSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgfVxufVxuZXhwb3J0IGRlZmF1bHQgbmV3IEFyZ3VtZW50cygpOyJdfQ==