diff --git a/src/compiler/factory/emitHelpers.ts b/src/compiler/factory/emitHelpers.ts index 9f0cd1d2a9d9e..e14652a3ab4b8 100644 --- a/src/compiler/factory/emitHelpers.ts +++ b/src/compiler/factory/emitHelpers.ts @@ -761,10 +761,10 @@ export const esDecorateHelper: UnscopedEmitHelper = { if (result === null || typeof result !== "object") throw new TypeError("Object expected"); if (_ = accept(result.get)) descriptor.get = _; if (_ = accept(result.set)) descriptor.set = _; - if (_ = accept(result.init)) initializers.push(_); + if (_ = accept(result.init)) initializers.unshift(_); } else if (_ = accept(result)) { - if (kind === "field") initializers.push(_); + if (kind === "field") initializers.unshift(_); else descriptor[key] = _; } } diff --git a/src/testRunner/unittests/evaluation/esDecorators.ts b/src/testRunner/unittests/evaluation/esDecorators.ts index 0a73c43c5b59f..35be87f5a5c41 100644 --- a/src/testRunner/unittests/evaluation/esDecorators.ts +++ b/src/testRunner/unittests/evaluation/esDecorators.ts @@ -1729,12 +1729,11 @@ describe("unittests:: evaluation:: esDecorators", () => { `; assert.strictEqual(C.x, 2); }); - it("multiple initializer pipe-throughs applied in reverse order", () => { + it("multiple initializer pipe-throughs applied in order", () => { const { C } = exec` - function initializer(x) { return x + 1; } export class C { - @((t, c) => x => [...x, 3]) @((t, c) => x => [...x, 2]) + @((t, c) => x => [...x, 3]) static x: number[] = [1]; } `; @@ -1797,12 +1796,11 @@ describe("unittests:: evaluation:: esDecorators", () => { `; assert.strictEqual(C.x, 2); }); - it("multiple initializer pipe-throughs applied in reverse order", () => { + it("multiple init pipe-throughs applied in order", () => { const { C } = exec` - function initializer(x) { return x + 1; } export class C { - @((t, c) => ({ init: x => [...x, 3] })) @((t, c) => ({ init: x => [...x, 2] })) + @((t, c) => ({ init: x => [...x, 3] })) static accessor x: number[] = [1]; } `; @@ -1861,6 +1859,38 @@ describe("unittests:: evaluation:: esDecorators", () => { assert.throws(() => main("abc")); }); }); + it("accessor 'init' evaluation order (#54267)", () => { + const { main } = exec` + function minusTwo({ set }: any, ctx: any) { + return { + set(v) { set.call(this, v - 2); }, + init(v) { return v - 2; }, + }; + } + + function timesFour({ set }: any, ctx: any) { + return { + set(v) { set.call(this, v * 4); }, + init(v) { return v * 4; } + }; + } + + class C { + @minusTwo @timesFour accessor x = 5; + } + + export const main = () => { + const obj = new C(); + const afterInit = obj.x; + obj.x = 5; + const afterSet = obj.x; + return { afterInit, afterSet }; + }; + `; + const { afterInit, afterSet } = main(); + assert.strictEqual(afterInit, 12); + assert.strictEqual(afterSet, 12); + }); }); const nodeVersion = new ts.Version(process.versions.node); @@ -2162,11 +2192,11 @@ describe("unittests:: evaluation:: esDecorators", () => { // order and applied to the replacement class: "static block evaluation", "static field initializer evaluation", - "static field injected initializer evaluation 2", "static field injected initializer evaluation 1", + "static field injected initializer evaluation 2", "static auto-accessor initializer evaluation", - "static auto-accessor injected initializer evaluation 2", "static auto-accessor injected initializer evaluation 1", + "static auto-accessor injected initializer evaluation 2", // NOTE: at this point, static private fields will be installed (TODO: on the replacement class) // finally, class extra initializers are applied in the order they were added (i.e., methods before fields, @@ -2208,11 +2238,11 @@ describe("unittests:: evaluation:: esDecorators", () => { // next, instance initializers (i.e., fields, auto-accessors, and static blocks) are evaluated in document // order: "instance field initializer evaluation", - "instance field injected initializer evaluation 2", "instance field injected initializer evaluation 1", + "instance field injected initializer evaluation 2", "instance auto-accessor initializer evaluation", - "instance auto-accessor injected initializer evaluation 2", "instance auto-accessor injected initializer evaluation 1", + "instance auto-accessor injected initializer evaluation 2", // NOTE: at this point, instance private fields will be installed. // finally, statements in the constructor after the call to `super()` are evaluated: diff --git a/tests/baselines/reference/esDecorators-classDeclaration-commonjs-classNamespaceMerge.js b/tests/baselines/reference/esDecorators-classDeclaration-commonjs-classNamespaceMerge.js index 3b5db4fbeb0b5..9671f6675be73 100644 --- a/tests/baselines/reference/esDecorators-classDeclaration-commonjs-classNamespaceMerge.js +++ b/tests/baselines/reference/esDecorators-classDeclaration-commonjs-classNamespaceMerge.js @@ -31,10 +31,10 @@ var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, if (result === null || typeof result !== "object") throw new TypeError("Object expected"); if (_ = accept(result.get)) descriptor.get = _; if (_ = accept(result.set)) descriptor.set = _; - if (_ = accept(result.init)) initializers.push(_); + if (_ = accept(result.init)) initializers.unshift(_); } else if (_ = accept(result)) { - if (kind === "field") initializers.push(_); + if (kind === "field") initializers.unshift(_); else descriptor[key] = _; } } diff --git a/tests/baselines/reference/esDecorators-classDeclaration-commonjs.js b/tests/baselines/reference/esDecorators-classDeclaration-commonjs.js index 13fb03cb1bf67..55dc6b3912140 100644 --- a/tests/baselines/reference/esDecorators-classDeclaration-commonjs.js +++ b/tests/baselines/reference/esDecorators-classDeclaration-commonjs.js @@ -27,10 +27,10 @@ var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, if (result === null || typeof result !== "object") throw new TypeError("Object expected"); if (_ = accept(result.get)) descriptor.get = _; if (_ = accept(result.set)) descriptor.set = _; - if (_ = accept(result.init)) initializers.push(_); + if (_ = accept(result.init)) initializers.unshift(_); } else if (_ = accept(result)) { - if (kind === "field") initializers.push(_); + if (kind === "field") initializers.unshift(_); else descriptor[key] = _; } } diff --git a/tests/baselines/reference/esDecorators-classDeclaration-sourceMap(target=es2015).js b/tests/baselines/reference/esDecorators-classDeclaration-sourceMap(target=es2015).js index 4a0fc9bb6e509..7c8569ce89065 100644 --- a/tests/baselines/reference/esDecorators-classDeclaration-sourceMap(target=es2015).js +++ b/tests/baselines/reference/esDecorators-classDeclaration-sourceMap(target=es2015).js @@ -64,10 +64,10 @@ var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, if (result === null || typeof result !== "object") throw new TypeError("Object expected"); if (_ = accept(result.get)) descriptor.get = _; if (_ = accept(result.set)) descriptor.set = _; - if (_ = accept(result.init)) initializers.push(_); + if (_ = accept(result.init)) initializers.unshift(_); } else if (_ = accept(result)) { - if (kind === "field") initializers.push(_); + if (kind === "field") initializers.unshift(_); else descriptor[key] = _; } } diff --git a/tests/baselines/reference/esDecorators-classDeclaration-sourceMap(target=es2015).js.map b/tests/baselines/reference/esDecorators-classDeclaration-sourceMap(target=es2015).js.map index 2ce07138d52c0..25a35851e66e1 100644 --- a/tests/baselines/reference/esDecorators-classDeclaration-sourceMap(target=es2015).js.map +++ b/tests/baselines/reference/esDecorators-classDeclaration-sourceMap(target=es2015).js.map @@ -1,6 +1,6 @@ //// [esDecorators-classDeclaration-sourceMap.js.map] {"version":3,"file":"esDecorators-classDeclaration-sourceMap.js","sourceRoot":"","sources":["esDecorators-classDeclaration-sourceMap.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAIM,CAAC;;4BAFN,GAAG,EACH,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;YAgBA,MAAC,kGAAG,CAAC,GAAC;YAIG,yEAAI,CAAC,GAAC;QAqBnB,CAAC;QArCG,MAAM,KAAI,CAAC;QAIX,IAAI,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;QAIrB,IAAI,CAAC,CAAC,KAAa,IAAI,CAAC;QAQxB,IAAS,CAAC,uEAAK;QAAf,IAAS,CAAC,4EAAK;;;;;;;;;;8BAlBd,GAAG,EACH,GAAG;6BAGH,GAAG,EACH,GAAG;6BAGH,GAAG,EACH,GAAG;yBAGH,GAAG,EACH,GAAG;yBAGH,GAAG,EACH,GAAG;6CAGH,GAAG,EACH,GAAG;4CAGH,GAAG,EACH,GAAG;4CAGH,GAAG,EACH,GAAG;wCAGH,GAAG,EACH,GAAG;wCAGH,GAAG,EACH,GAAG;QAfJ,+DAAA,yBAAA,cAAkB,CAAC,YAAA,gRAAA;QAInB,8DAAA,uBAAA,cAAkB,OAAO,CAAC,CAAC,CAAC,CAAC,cAAA,qQAAA;QAI7B,8DAAA,uBAAA,UAAc,KAAa,IAAI,CAAC,cAAA,0RAAA;QAQhC,0DAAA,uBAAA,gGAAuB,cAAA,EAAvB,uBAAA,qGAAuB,cAAA,oXAAA;QApCvB,2KAAA,MAAM,wCAAK;QAIX,gKAAI,CAAC,wCAAgB;QAIrB,2KAAI,CAAC,mDAAmB;QAQxB,8JAAS,CAAC,6BAAD,CAAC,8DAAK;QAgBf,8XAAc;QApBd,qJAAA,CAAC,6BAAD,CAAC,8DAAK;QAfV,wJAwCC;;QAxCK,wDAAC;;IAmCI,4EAAK,CAAC,GAAJ,CAAK;IAIE,6FAAK,CAAC,GAAJ,CAAK;;QAvCrB,uDAAC"} -//// https://sokra.github.io/source-map-visualization#base64,dmFyIF9fZXNEZWNvcmF0ZSA9ICh0aGlzICYmIHRoaXMuX19lc0RlY29yYXRlKSB8fCBmdW5jdGlvbiAoY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsNCiAgICBmdW5jdGlvbiBhY2NlcHQoZikgeyBpZiAoZiAhPT0gdm9pZCAwICYmIHR5cGVvZiBmICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOyByZXR1cm4gZjsgfQ0KICAgIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleSA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsNCiAgICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7DQogICAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7DQogICAgdmFyIF8sIGRvbmUgPSBmYWxzZTsNCiAgICBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgew0KICAgICAgICB2YXIgY29udGV4dCA9IHt9Ow0KICAgICAgICBmb3IgKHZhciBwIGluIGNvbnRleHRJbikgY29udGV4dFtwXSA9IHAgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcF07DQogICAgICAgIGZvciAodmFyIHAgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dC5hY2Nlc3NbcF0gPSBjb250ZXh0SW4uYWNjZXNzW3BdOw0KICAgICAgICBjb250ZXh0LmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24gKGYpIHsgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOyBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmIHx8IG51bGwpKTsgfTsNCiAgICAgICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2ldKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleV0sIGNvbnRleHQpOw0KICAgICAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgew0KICAgICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsNCiAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOw0KICAgICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzsNCiAgICAgICAgICAgIGlmIChfID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF87DQogICAgICAgICAgICBpZiAoXyA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy5wdXNoKF8pOw0KICAgICAgICB9DQogICAgICAgIGVsc2UgaWYgKF8gPSBhY2NlcHQocmVzdWx0KSkgew0KICAgICAgICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy5wdXNoKF8pOw0KICAgICAgICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleV0gPSBfOw0KICAgICAgICB9DQogICAgfQ0KICAgIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsNCiAgICBkb25lID0gdHJ1ZTsNCn07DQp2YXIgX19ydW5Jbml0aWFsaXplcnMgPSAodGhpcyAmJiB0aGlzLl9fcnVuSW5pdGlhbGl6ZXJzKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZSkgew0KICAgIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOw0KICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaSsrKSB7DQogICAgICAgIHZhbHVlID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaV0uY2FsbCh0aGlzQXJnLCB2YWx1ZSkgOiBpbml0aWFsaXplcnNbaV0uY2FsbCh0aGlzQXJnKTsNCiAgICB9DQogICAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUgOiB2b2lkIDA7DQp9Ow0KdmFyIF9fc2V0RnVuY3Rpb25OYW1lID0gKHRoaXMgJiYgdGhpcy5fX3NldEZ1bmN0aW9uTmFtZSkgfHwgZnVuY3Rpb24gKGYsIG5hbWUsIHByZWZpeCkgew0KICAgIGlmICh0eXBlb2YgbmFtZSA9PT0gInN5bWJvbCIpIG5hbWUgPSBuYW1lLmRlc2NyaXB0aW9uID8gIlsiLmNvbmNhdChuYW1lLmRlc2NyaXB0aW9uLCAiXSIpIDogIiI7DQogICAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmLCAibmFtZSIsIHsgY29uZmlndXJhYmxlOiB0cnVlLCB2YWx1ZTogcHJlZml4ID8gIiIuY29uY2F0KHByZWZpeCwgIiAiLCBuYW1lKSA6IG5hbWUgfSk7DQp9Ow0KdmFyIF9fY2xhc3NQcml2YXRlRmllbGRHZXQgPSAodGhpcyAmJiB0aGlzLl9fY2xhc3NQcml2YXRlRmllbGRHZXQpIHx8IGZ1bmN0aW9uIChyZWNlaXZlciwgc3RhdGUsIGtpbmQsIGYpIHsNCiAgICBpZiAoa2luZCA9PT0gImEiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBnZXR0ZXIiKTsNCiAgICBpZiAodHlwZW9mIHN0YXRlID09PSAiZnVuY3Rpb24iID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCByZWFkIHByaXZhdGUgbWVtYmVyIGZyb20gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdCIpOw0KICAgIHJldHVybiBraW5kID09PSAibSIgPyBmIDoga2luZCA9PT0gImEiID8gZi5jYWxsKHJlY2VpdmVyKSA6IGYgPyBmLnZhbHVlIDogc3RhdGUuZ2V0KHJlY2VpdmVyKTsNCn07DQp2YXIgX19jbGFzc1ByaXZhdGVGaWVsZFNldCA9ICh0aGlzICYmIHRoaXMuX19jbGFzc1ByaXZhdGVGaWVsZFNldCkgfHwgZnVuY3Rpb24gKHJlY2VpdmVyLCBzdGF0ZSwgdmFsdWUsIGtpbmQsIGYpIHsNCiAgICBpZiAoa2luZCA9PT0gIm0iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIG1ldGhvZCBpcyBub3Qgd3JpdGFibGUiKTsNCiAgICBpZiAoa2luZCA9PT0gImEiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBzZXR0ZXIiKTsNCiAgICBpZiAodHlwZW9mIHN0YXRlID09PSAiZnVuY3Rpb24iID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCB3cml0ZSBwcml2YXRlIG1lbWJlciB0byBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0Iik7DQogICAgcmV0dXJuIChraW5kID09PSAiYSIgPyBmLmNhbGwocmVjZWl2ZXIsIHZhbHVlKSA6IGYgPyBmLnZhbHVlID0gdmFsdWUgOiBzdGF0ZS5zZXQocmVjZWl2ZXIsIHZhbHVlKSksIHZhbHVlOw0KfTsNCnZhciBfX2NsYXNzUHJpdmF0ZUZpZWxkSW4gPSAodGhpcyAmJiB0aGlzLl9fY2xhc3NQcml2YXRlRmllbGRJbikgfHwgZnVuY3Rpb24oc3RhdGUsIHJlY2VpdmVyKSB7DQogICAgaWYgKHJlY2VpdmVyID09PSBudWxsIHx8ICh0eXBlb2YgcmVjZWl2ZXIgIT09ICJvYmplY3QiICYmIHR5cGVvZiByZWNlaXZlciAhPT0gImZ1bmN0aW9uIikpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCB1c2UgJ2luJyBvcGVyYXRvciBvbiBub24tb2JqZWN0Iik7DQogICAgcmV0dXJuIHR5cGVvZiBzdGF0ZSA9PT0gImZ1bmN0aW9uIiA/IHJlY2VpdmVyID09PSBzdGF0ZSA6IHN0YXRlLmhhcyhyZWNlaXZlcik7DQp9Ow0KbGV0IEMgPSAoKCkgPT4gew0KICAgIHZhciBfbWV0aG9kX2dldCwgX3hfZ2V0LCBfeF9zZXQsIF95LCBfel9hY2Nlc3Nvcl9zdG9yYWdlLCBfel9nZXQsIF96X3NldCwgX3pfMV9hY2Nlc3Nvcl9zdG9yYWdlOw0KICAgIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW2RlYywgZGVjXTsNCiAgICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsNCiAgICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsNCiAgICBsZXQgX2NsYXNzVGhpczsNCiAgICBsZXQgX3N0YXRpY0V4dHJhSW5pdGlhbGl6ZXJzID0gW107DQogICAgbGV0IF9pbnN0YW5jZUV4dHJhSW5pdGlhbGl6ZXJzID0gW107DQogICAgbGV0IF9zdGF0aWNfcHJpdmF0ZV9tZXRob2RfZGVjb3JhdG9yczsNCiAgICBsZXQgX3N0YXRpY19wcml2YXRlX21ldGhvZF9kZXNjcmlwdG9yOw0KICAgIGxldCBfc3RhdGljX3ByaXZhdGVfZ2V0X3hfZGVjb3JhdG9yczsNCiAgICBsZXQgX3N0YXRpY19wcml2YXRlX2dldF94X2Rlc2NyaXB0b3I7DQogICAgbGV0IF9zdGF0aWNfcHJpdmF0ZV9zZXRfeF9kZWNvcmF0b3JzOw0KICAgIGxldCBfc3RhdGljX3ByaXZhdGVfc2V0X3hfZGVzY3JpcHRvcjsNCiAgICBsZXQgX3N0YXRpY19wcml2YXRlX3lfZGVjb3JhdG9yczsNCiAgICBsZXQgX3N0YXRpY19wcml2YXRlX3lfaW5pdGlhbGl6ZXJzID0gW107DQogICAgbGV0IF9zdGF0aWNfcHJpdmF0ZV96X2RlY29yYXRvcnM7DQogICAgbGV0IF9zdGF0aWNfcHJpdmF0ZV96X2luaXRpYWxpemVycyA9IFtdOw0KICAgIGxldCBfc3RhdGljX3ByaXZhdGVfel9kZXNjcmlwdG9yOw0KICAgIGxldCBfbWV0aG9kX2RlY29yYXRvcnM7DQogICAgbGV0IF9nZXRfeF9kZWNvcmF0b3JzOw0KICAgIGxldCBfc2V0X3hfZGVjb3JhdG9yczsNCiAgICBsZXQgX3lfZGVjb3JhdG9yczsNCiAgICBsZXQgX3lfaW5pdGlhbGl6ZXJzID0gW107DQogICAgbGV0IF96X2RlY29yYXRvcnM7DQogICAgbGV0IF96X2luaXRpYWxpemVycyA9IFtdOw0KICAgIHZhciBDID0gX2NsYXNzVGhpcyA9IGNsYXNzIHsNCiAgICAgICAgY29uc3RydWN0b3IoKSB7DQogICAgICAgICAgICB0aGlzLnkgPSAoX19ydW5Jbml0aWFsaXplcnModGhpcywgX2luc3RhbmNlRXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVycyh0aGlzLCBfeV9pbml0aWFsaXplcnMsIDEpKTsNCiAgICAgICAgICAgIF96XzFfYWNjZXNzb3Jfc3RvcmFnZS5zZXQodGhpcywgX19ydW5Jbml0aWFsaXplcnModGhpcywgX3pfaW5pdGlhbGl6ZXJzLCAxKSk7DQogICAgICAgIH0NCiAgICAgICAgbWV0aG9kKCkgeyB9DQogICAgICAgIGdldCB4KCkgeyByZXR1cm4gMTsgfQ0KICAgICAgICBzZXQgeCh2YWx1ZSkgeyB9DQogICAgICAgIGdldCB6KCkgeyByZXR1cm4gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfel8xX2FjY2Vzc29yX3N0b3JhZ2UsICJmIik7IH0NCiAgICAgICAgc2V0IHoodmFsdWUpIHsgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfel8xX2FjY2Vzc29yX3N0b3JhZ2UsIHZhbHVlLCAiZiIpOyB9DQogICAgfTsNCiAgICBfel8xX2FjY2Vzc29yX3N0b3JhZ2UgPSBuZXcgV2Vha01hcCgpOw0KICAgIF9tZXRob2RfZ2V0ID0gZnVuY3Rpb24gX21ldGhvZF9nZXQoKSB7IHJldHVybiBfc3RhdGljX3ByaXZhdGVfbWV0aG9kX2Rlc2NyaXB0b3IudmFsdWU7IH07DQogICAgX3hfZ2V0ID0gZnVuY3Rpb24gX3hfZ2V0KCkgeyByZXR1cm4gX3N0YXRpY19wcml2YXRlX2dldF94X2Rlc2NyaXB0b3IuZ2V0LmNhbGwodGhpcyk7IH07DQogICAgX3hfc2V0ID0gZnVuY3Rpb24gX3hfc2V0KHZhbHVlKSB7IHJldHVybiBfc3RhdGljX3ByaXZhdGVfc2V0X3hfZGVzY3JpcHRvci5zZXQuY2FsbCh0aGlzLCB2YWx1ZSk7IH07DQogICAgX3pfZ2V0ID0gZnVuY3Rpb24gX3pfZ2V0KCkgeyByZXR1cm4gX3N0YXRpY19wcml2YXRlX3pfZGVzY3JpcHRvci5nZXQuY2FsbCh0aGlzKTsgfTsNCiAgICBfel9zZXQgPSBmdW5jdGlvbiBfel9zZXQodmFsdWUpIHsgcmV0dXJuIF9zdGF0aWNfcHJpdmF0ZV96X2Rlc2NyaXB0b3Iuc2V0LmNhbGwodGhpcywgdmFsdWUpOyB9Ow0KICAgIF9fc2V0RnVuY3Rpb25OYW1lKF9jbGFzc1RoaXMsICJDIik7DQogICAgKCgpID0+IHsNCiAgICAgICAgX21ldGhvZF9kZWNvcmF0b3JzID0gW2RlYywgZGVjXTsNCiAgICAgICAgX2dldF94X2RlY29yYXRvcnMgPSBbZGVjLCBkZWNdOw0KICAgICAgICBfc2V0X3hfZGVjb3JhdG9ycyA9IFtkZWMsIGRlY107DQogICAgICAgIF95X2RlY29yYXRvcnMgPSBbZGVjLCBkZWNdOw0KICAgICAgICBfel9kZWNvcmF0b3JzID0gW2RlYywgZGVjXTsNCiAgICAgICAgX3N0YXRpY19wcml2YXRlX21ldGhvZF9kZWNvcmF0b3JzID0gW2RlYywgZGVjXTsNCiAgICAgICAgX3N0YXRpY19wcml2YXRlX2dldF94X2RlY29yYXRvcnMgPSBbZGVjLCBkZWNdOw0KICAgICAgICBfc3RhdGljX3ByaXZhdGVfc2V0X3hfZGVjb3JhdG9ycyA9IFtkZWMsIGRlY107DQogICAgICAgIF9zdGF0aWNfcHJpdmF0ZV95X2RlY29yYXRvcnMgPSBbZGVjLCBkZWNdOw0KICAgICAgICBfc3RhdGljX3ByaXZhdGVfel9kZWNvcmF0b3JzID0gW2RlYywgZGVjXTsNCiAgICAgICAgX19lc0RlY29yYXRlKF9jbGFzc1RoaXMsIF9zdGF0aWNfcHJpdmF0ZV9tZXRob2RfZGVzY3JpcHRvciA9IHsgdmFsdWU6IF9fc2V0RnVuY3Rpb25OYW1lKGZ1bmN0aW9uICgpIHsgfSwgIiNtZXRob2QiKSB9LCBfc3RhdGljX3ByaXZhdGVfbWV0aG9kX2RlY29yYXRvcnMsIHsga2luZDogIm1ldGhvZCIsIG5hbWU6ICIjbWV0aG9kIiwgc3RhdGljOiB0cnVlLCBwcml2YXRlOiB0cnVlLCBhY2Nlc3M6IHsgaGFzOiBvYmogPT4gX19jbGFzc1ByaXZhdGVGaWVsZEluKF9jbGFzc1RoaXMsIG9iaiksIGdldDogb2JqID0+IF9fY2xhc3NQcml2YXRlRmllbGRHZXQob2JqLCBfY2xhc3NUaGlzLCAiYSIsIF9tZXRob2RfZ2V0KSB9IH0sIG51bGwsIF9zdGF0aWNFeHRyYUluaXRpYWxpemVycyk7DQogICAgICAgIF9fZXNEZWNvcmF0ZShfY2xhc3NUaGlzLCBfc3RhdGljX3ByaXZhdGVfZ2V0X3hfZGVzY3JpcHRvciA9IHsgZ2V0OiBfX3NldEZ1bmN0aW9uTmFtZShmdW5jdGlvbiAoKSB7IHJldHVybiAxOyB9LCAiI3giLCAiZ2V0IikgfSwgX3N0YXRpY19wcml2YXRlX2dldF94X2RlY29yYXRvcnMsIHsga2luZDogImdldHRlciIsIG5hbWU6ICIjeCIsIHN0YXRpYzogdHJ1ZSwgcHJpdmF0ZTogdHJ1ZSwgYWNjZXNzOiB7IGhhczogb2JqID0+IF9fY2xhc3NQcml2YXRlRmllbGRJbihfY2xhc3NUaGlzLCBvYmopLCBnZXQ6IG9iaiA9PiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KG9iaiwgX2NsYXNzVGhpcywgImEiLCBfeF9nZXQpIH0gfSwgbnVsbCwgX3N0YXRpY0V4dHJhSW5pdGlhbGl6ZXJzKTsNCiAgICAgICAgX19lc0RlY29yYXRlKF9jbGFzc1RoaXMsIF9zdGF0aWNfcHJpdmF0ZV9zZXRfeF9kZXNjcmlwdG9yID0geyBzZXQ6IF9fc2V0RnVuY3Rpb25OYW1lKGZ1bmN0aW9uICh2YWx1ZSkgeyB9LCAiI3giLCAic2V0IikgfSwgX3N0YXRpY19wcml2YXRlX3NldF94X2RlY29yYXRvcnMsIHsga2luZDogInNldHRlciIsIG5hbWU6ICIjeCIsIHN0YXRpYzogdHJ1ZSwgcHJpdmF0ZTogdHJ1ZSwgYWNjZXNzOiB7IGhhczogb2JqID0+IF9fY2xhc3NQcml2YXRlRmllbGRJbihfY2xhc3NUaGlzLCBvYmopLCBzZXQ6IChvYmosIHZhbHVlKSA9PiB7IF9fY2xhc3NQcml2YXRlRmllbGRTZXQob2JqLCBfY2xhc3NUaGlzLCB2YWx1ZSwgImEiLCBfeF9zZXQpOyB9IH0gfSwgbnVsbCwgX3N0YXRpY0V4dHJhSW5pdGlhbGl6ZXJzKTsNCiAgICAgICAgX19lc0RlY29yYXRlKF9jbGFzc1RoaXMsIF9zdGF0aWNfcHJpdmF0ZV96X2Rlc2NyaXB0b3IgPSB7IGdldDogX19zZXRGdW5jdGlvbk5hbWUoZnVuY3Rpb24gKCkgeyByZXR1cm4gX19jbGFzc1ByaXZhdGVGaWVsZEdldChfY2xhc3NUaGlzLCBfY2xhc3NUaGlzLCAiZiIsIF96X2FjY2Vzc29yX3N0b3JhZ2UpOyB9LCAiI3oiLCAiZ2V0IiksIHNldDogX19zZXRGdW5jdGlvbk5hbWUoZnVuY3Rpb24gKHZhbHVlKSB7IF9fY2xhc3NQcml2YXRlRmllbGRTZXQoX2NsYXNzVGhpcywgX2NsYXNzVGhpcywgdmFsdWUsICJmIiwgX3pfYWNjZXNzb3Jfc3RvcmFnZSk7IH0sICIjeiIsICJzZXQiKSB9LCBfc3RhdGljX3ByaXZhdGVfel9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICIjeiIsIHN0YXRpYzogdHJ1ZSwgcHJpdmF0ZTogdHJ1ZSwgYWNjZXNzOiB7IGhhczogb2JqID0+IF9fY2xhc3NQcml2YXRlRmllbGRJbihfY2xhc3NUaGlzLCBvYmopLCBnZXQ6IG9iaiA9PiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KG9iaiwgX2NsYXNzVGhpcywgImEiLCBfel9nZXQpLCBzZXQ6IChvYmosIHZhbHVlKSA9PiB7IF9fY2xhc3NQcml2YXRlRmllbGRTZXQob2JqLCBfY2xhc3NUaGlzLCB2YWx1ZSwgImEiLCBfel9zZXQpOyB9IH0gfSwgX3N0YXRpY19wcml2YXRlX3pfaW5pdGlhbGl6ZXJzLCBfc3RhdGljRXh0cmFJbml0aWFsaXplcnMpOw0KICAgICAgICBfX2VzRGVjb3JhdGUoX2NsYXNzVGhpcywgbnVsbCwgX21ldGhvZF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJtZXRob2QiLCBuYW1lOiAibWV0aG9kIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IG9iaiA9PiAibWV0aG9kIiBpbiBvYmosIGdldDogb2JqID0+IG9iai5tZXRob2QgfSB9LCBudWxsLCBfaW5zdGFuY2VFeHRyYUluaXRpYWxpemVycyk7DQogICAgICAgIF9fZXNEZWNvcmF0ZShfY2xhc3NUaGlzLCBudWxsLCBfZ2V0X3hfZGVjb3JhdG9ycywgeyBraW5kOiAiZ2V0dGVyIiwgbmFtZTogIngiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogb2JqID0+ICJ4IiBpbiBvYmosIGdldDogb2JqID0+IG9iai54IH0gfSwgbnVsbCwgX2luc3RhbmNlRXh0cmFJbml0aWFsaXplcnMpOw0KICAgICAgICBfX2VzRGVjb3JhdGUoX2NsYXNzVGhpcywgbnVsbCwgX3NldF94X2RlY29yYXRvcnMsIHsga2luZDogInNldHRlciIsIG5hbWU6ICJ4Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IG9iaiA9PiAieCIgaW4gb2JqLCBzZXQ6IChvYmosIHZhbHVlKSA9PiB7IG9iai54ID0gdmFsdWU7IH0gfSB9LCBudWxsLCBfaW5zdGFuY2VFeHRyYUluaXRpYWxpemVycyk7DQogICAgICAgIF9fZXNEZWNvcmF0ZShfY2xhc3NUaGlzLCBudWxsLCBfel9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ6Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IG9iaiA9PiAieiIgaW4gb2JqLCBnZXQ6IG9iaiA9PiBvYmoueiwgc2V0OiAob2JqLCB2YWx1ZSkgPT4geyBvYmoueiA9IHZhbHVlOyB9IH0gfSwgX3pfaW5pdGlhbGl6ZXJzLCBfaW5zdGFuY2VFeHRyYUluaXRpYWxpemVycyk7DQogICAgICAgIF9fZXNEZWNvcmF0ZShudWxsLCBudWxsLCBfc3RhdGljX3ByaXZhdGVfeV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJmaWVsZCIsIG5hbWU6ICIjeSIsIHN0YXRpYzogdHJ1ZSwgcHJpdmF0ZTogdHJ1ZSwgYWNjZXNzOiB7IGhhczogb2JqID0+IF9fY2xhc3NQcml2YXRlRmllbGRJbihfY2xhc3NUaGlzLCBvYmopLCBnZXQ6IG9iaiA9PiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KG9iaiwgX2NsYXNzVGhpcywgImYiLCBfeSksIHNldDogKG9iaiwgdmFsdWUpID0+IHsgX19jbGFzc1ByaXZhdGVGaWVsZFNldChvYmosIF9jbGFzc1RoaXMsIHZhbHVlLCAiZiIsIF95KTsgfSB9IH0sIF9zdGF0aWNfcHJpdmF0ZV95X2luaXRpYWxpemVycywgX3N0YXRpY0V4dHJhSW5pdGlhbGl6ZXJzKTsNCiAgICAgICAgX19lc0RlY29yYXRlKG51bGwsIG51bGwsIF95X2RlY29yYXRvcnMsIHsga2luZDogImZpZWxkIiwgbmFtZTogInkiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogb2JqID0+ICJ5IiBpbiBvYmosIGdldDogb2JqID0+IG9iai55LCBzZXQ6IChvYmosIHZhbHVlKSA9PiB7IG9iai55ID0gdmFsdWU7IH0gfSB9LCBfeV9pbml0aWFsaXplcnMsIF9pbnN0YW5jZUV4dHJhSW5pdGlhbGl6ZXJzKTsNCiAgICAgICAgX19lc0RlY29yYXRlKG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsNCiAgICAgICAgQyA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOw0KICAgICAgICBfX3J1bkluaXRpYWxpemVycyhfY2xhc3NUaGlzLCBfc3RhdGljRXh0cmFJbml0aWFsaXplcnMpOw0KICAgIH0pKCk7DQogICAgX3kgPSB7IHZhbHVlOiBfX3J1bkluaXRpYWxpemVycyhfY2xhc3NUaGlzLCBfc3RhdGljX3ByaXZhdGVfeV9pbml0aWFsaXplcnMsIDEpIH07DQogICAgX3pfYWNjZXNzb3Jfc3RvcmFnZSA9IHsgdmFsdWU6IF9fcnVuSW5pdGlhbGl6ZXJzKF9jbGFzc1RoaXMsIF9zdGF0aWNfcHJpdmF0ZV96X2luaXRpYWxpemVycywgMSkgfTsNCiAgICAoKCkgPT4gew0KICAgICAgICBfX3J1bkluaXRpYWxpemVycyhfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7DQogICAgfSkoKTsNCiAgICByZXR1cm4gQyA9IF9jbGFzc1RoaXM7DQp9KSgpOw0KLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZXNEZWNvcmF0b3JzLWNsYXNzRGVjbGFyYXRpb24tc291cmNlTWFwLmpzLm1hcA==,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNEZWNvcmF0b3JzLWNsYXNzRGVjbGFyYXRpb24tc291cmNlTWFwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZXNEZWNvcmF0b3JzLWNsYXNzRGVjbGFyYXRpb24tc291cmNlTWFwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBSU0sQ0FBQzs7NEJBRk4sR0FBRyxFQUNILEdBQUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1lBZ0JBLE1BQUMsa0dBQUcsQ0FBQyxHQUFDO1lBSUcseUVBQUksQ0FBQyxHQUFDO1FBcUJuQixDQUFDO1FBckNHLE1BQU0sS0FBSSxDQUFDO1FBSVgsSUFBSSxDQUFDLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBSXJCLElBQUksQ0FBQyxDQUFDLEtBQWEsSUFBSSxDQUFDO1FBUXhCLElBQVMsQ0FBQyx1RUFBSztRQUFmLElBQVMsQ0FBQyw0RUFBSzs7Ozs7Ozs7Ozs4QkFsQmQsR0FBRyxFQUNILEdBQUc7NkJBR0gsR0FBRyxFQUNILEdBQUc7NkJBR0gsR0FBRyxFQUNILEdBQUc7eUJBR0gsR0FBRyxFQUNILEdBQUc7eUJBR0gsR0FBRyxFQUNILEdBQUc7NkNBR0gsR0FBRyxFQUNILEdBQUc7NENBR0gsR0FBRyxFQUNILEdBQUc7NENBR0gsR0FBRyxFQUNILEdBQUc7d0NBR0gsR0FBRyxFQUNILEdBQUc7d0NBR0gsR0FBRyxFQUNILEdBQUc7UUFmSiwrREFBQSx5QkFBQSxjQUFrQixDQUFDLFlBQUEsZ1JBQUE7UUFJbkIsOERBQUEsdUJBQUEsY0FBa0IsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQUEscVFBQUE7UUFJN0IsOERBQUEsdUJBQUEsVUFBYyxLQUFhLElBQUksQ0FBQyxjQUFBLDBSQUFBO1FBUWhDLDBEQUFBLHVCQUFBLGdHQUF1QixjQUFBLEVBQXZCLHVCQUFBLHFHQUF1QixjQUFBLG9YQUFBO1FBcEN2QiwyS0FBQSxNQUFNLHdDQUFLO1FBSVgsZ0tBQUksQ0FBQyx3Q0FBZ0I7UUFJckIsMktBQUksQ0FBQyxtREFBbUI7UUFReEIsOEpBQVMsQ0FBQyw2QkFBRCxDQUFDLDhEQUFLO1FBZ0JmLDhYQUFjO1FBcEJkLHFKQUFBLENBQUMsNkJBQUQsQ0FBQyw4REFBSztRQWZWLHdKQXdDQzs7UUF4Q0ssd0RBQUM7O0lBbUNJLDRFQUFLLENBQUMsR0FBSixDQUFLO0lBSUUsNkZBQUssQ0FBQyxHQUFKLENBQUs7O1FBdkNyQix1REFBQyJ9,ZGVjbGFyZSB2YXIgZGVjOiBhbnk7CgpAZGVjCkBkZWMKY2xhc3MgQyB7CiAgICBAZGVjCiAgICBAZGVjCiAgICBtZXRob2QoKSB7fQoKICAgIEBkZWMKICAgIEBkZWMKICAgIGdldCB4KCkgeyByZXR1cm4gMTsgfQoKICAgIEBkZWMKICAgIEBkZWMKICAgIHNldCB4KHZhbHVlOiBudW1iZXIpIHsgfQoKICAgIEBkZWMKICAgIEBkZWMKICAgIHkgPSAxOwoKICAgIEBkZWMKICAgIEBkZWMKICAgIGFjY2Vzc29yIHogPSAxOwoKICAgIEBkZWMKICAgIEBkZWMKICAgIHN0YXRpYyAjbWV0aG9kKCkge30KCiAgICBAZGVjCiAgICBAZGVjCiAgICBzdGF0aWMgZ2V0ICN4KCkgeyByZXR1cm4gMTsgfQoKICAgIEBkZWMKICAgIEBkZWMKICAgIHN0YXRpYyBzZXQgI3godmFsdWU6IG51bWJlcikgeyB9CgogICAgQGRlYwogICAgQGRlYwogICAgc3RhdGljICN5ID0gMTsKCiAgICBAZGVjCiAgICBAZGVjCiAgICBzdGF0aWMgYWNjZXNzb3IgI3ogPSAxOwp9Cg== +//// https://sokra.github.io/source-map-visualization#base64,dmFyIF9fZXNEZWNvcmF0ZSA9ICh0aGlzICYmIHRoaXMuX19lc0RlY29yYXRlKSB8fCBmdW5jdGlvbiAoY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsNCiAgICBmdW5jdGlvbiBhY2NlcHQoZikgeyBpZiAoZiAhPT0gdm9pZCAwICYmIHR5cGVvZiBmICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOyByZXR1cm4gZjsgfQ0KICAgIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleSA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsNCiAgICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7DQogICAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7DQogICAgdmFyIF8sIGRvbmUgPSBmYWxzZTsNCiAgICBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgew0KICAgICAgICB2YXIgY29udGV4dCA9IHt9Ow0KICAgICAgICBmb3IgKHZhciBwIGluIGNvbnRleHRJbikgY29udGV4dFtwXSA9IHAgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcF07DQogICAgICAgIGZvciAodmFyIHAgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dC5hY2Nlc3NbcF0gPSBjb250ZXh0SW4uYWNjZXNzW3BdOw0KICAgICAgICBjb250ZXh0LmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24gKGYpIHsgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOyBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmIHx8IG51bGwpKTsgfTsNCiAgICAgICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2ldKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleV0sIGNvbnRleHQpOw0KICAgICAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgew0KICAgICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsNCiAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOw0KICAgICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzsNCiAgICAgICAgICAgIGlmIChfID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF87DQogICAgICAgICAgICBpZiAoXyA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF8pOw0KICAgICAgICB9DQogICAgICAgIGVsc2UgaWYgKF8gPSBhY2NlcHQocmVzdWx0KSkgew0KICAgICAgICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF8pOw0KICAgICAgICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleV0gPSBfOw0KICAgICAgICB9DQogICAgfQ0KICAgIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsNCiAgICBkb25lID0gdHJ1ZTsNCn07DQp2YXIgX19ydW5Jbml0aWFsaXplcnMgPSAodGhpcyAmJiB0aGlzLl9fcnVuSW5pdGlhbGl6ZXJzKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZSkgew0KICAgIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOw0KICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaSsrKSB7DQogICAgICAgIHZhbHVlID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaV0uY2FsbCh0aGlzQXJnLCB2YWx1ZSkgOiBpbml0aWFsaXplcnNbaV0uY2FsbCh0aGlzQXJnKTsNCiAgICB9DQogICAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUgOiB2b2lkIDA7DQp9Ow0KdmFyIF9fc2V0RnVuY3Rpb25OYW1lID0gKHRoaXMgJiYgdGhpcy5fX3NldEZ1bmN0aW9uTmFtZSkgfHwgZnVuY3Rpb24gKGYsIG5hbWUsIHByZWZpeCkgew0KICAgIGlmICh0eXBlb2YgbmFtZSA9PT0gInN5bWJvbCIpIG5hbWUgPSBuYW1lLmRlc2NyaXB0aW9uID8gIlsiLmNvbmNhdChuYW1lLmRlc2NyaXB0aW9uLCAiXSIpIDogIiI7DQogICAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmLCAibmFtZSIsIHsgY29uZmlndXJhYmxlOiB0cnVlLCB2YWx1ZTogcHJlZml4ID8gIiIuY29uY2F0KHByZWZpeCwgIiAiLCBuYW1lKSA6IG5hbWUgfSk7DQp9Ow0KdmFyIF9fY2xhc3NQcml2YXRlRmllbGRHZXQgPSAodGhpcyAmJiB0aGlzLl9fY2xhc3NQcml2YXRlRmllbGRHZXQpIHx8IGZ1bmN0aW9uIChyZWNlaXZlciwgc3RhdGUsIGtpbmQsIGYpIHsNCiAgICBpZiAoa2luZCA9PT0gImEiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBnZXR0ZXIiKTsNCiAgICBpZiAodHlwZW9mIHN0YXRlID09PSAiZnVuY3Rpb24iID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCByZWFkIHByaXZhdGUgbWVtYmVyIGZyb20gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdCIpOw0KICAgIHJldHVybiBraW5kID09PSAibSIgPyBmIDoga2luZCA9PT0gImEiID8gZi5jYWxsKHJlY2VpdmVyKSA6IGYgPyBmLnZhbHVlIDogc3RhdGUuZ2V0KHJlY2VpdmVyKTsNCn07DQp2YXIgX19jbGFzc1ByaXZhdGVGaWVsZFNldCA9ICh0aGlzICYmIHRoaXMuX19jbGFzc1ByaXZhdGVGaWVsZFNldCkgfHwgZnVuY3Rpb24gKHJlY2VpdmVyLCBzdGF0ZSwgdmFsdWUsIGtpbmQsIGYpIHsNCiAgICBpZiAoa2luZCA9PT0gIm0iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIG1ldGhvZCBpcyBub3Qgd3JpdGFibGUiKTsNCiAgICBpZiAoa2luZCA9PT0gImEiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBzZXR0ZXIiKTsNCiAgICBpZiAodHlwZW9mIHN0YXRlID09PSAiZnVuY3Rpb24iID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCB3cml0ZSBwcml2YXRlIG1lbWJlciB0byBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0Iik7DQogICAgcmV0dXJuIChraW5kID09PSAiYSIgPyBmLmNhbGwocmVjZWl2ZXIsIHZhbHVlKSA6IGYgPyBmLnZhbHVlID0gdmFsdWUgOiBzdGF0ZS5zZXQocmVjZWl2ZXIsIHZhbHVlKSksIHZhbHVlOw0KfTsNCnZhciBfX2NsYXNzUHJpdmF0ZUZpZWxkSW4gPSAodGhpcyAmJiB0aGlzLl9fY2xhc3NQcml2YXRlRmllbGRJbikgfHwgZnVuY3Rpb24oc3RhdGUsIHJlY2VpdmVyKSB7DQogICAgaWYgKHJlY2VpdmVyID09PSBudWxsIHx8ICh0eXBlb2YgcmVjZWl2ZXIgIT09ICJvYmplY3QiICYmIHR5cGVvZiByZWNlaXZlciAhPT0gImZ1bmN0aW9uIikpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCB1c2UgJ2luJyBvcGVyYXRvciBvbiBub24tb2JqZWN0Iik7DQogICAgcmV0dXJuIHR5cGVvZiBzdGF0ZSA9PT0gImZ1bmN0aW9uIiA/IHJlY2VpdmVyID09PSBzdGF0ZSA6IHN0YXRlLmhhcyhyZWNlaXZlcik7DQp9Ow0KbGV0IEMgPSAoKCkgPT4gew0KICAgIHZhciBfbWV0aG9kX2dldCwgX3hfZ2V0LCBfeF9zZXQsIF95LCBfel9hY2Nlc3Nvcl9zdG9yYWdlLCBfel9nZXQsIF96X3NldCwgX3pfMV9hY2Nlc3Nvcl9zdG9yYWdlOw0KICAgIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW2RlYywgZGVjXTsNCiAgICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsNCiAgICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsNCiAgICBsZXQgX2NsYXNzVGhpczsNCiAgICBsZXQgX3N0YXRpY0V4dHJhSW5pdGlhbGl6ZXJzID0gW107DQogICAgbGV0IF9pbnN0YW5jZUV4dHJhSW5pdGlhbGl6ZXJzID0gW107DQogICAgbGV0IF9zdGF0aWNfcHJpdmF0ZV9tZXRob2RfZGVjb3JhdG9yczsNCiAgICBsZXQgX3N0YXRpY19wcml2YXRlX21ldGhvZF9kZXNjcmlwdG9yOw0KICAgIGxldCBfc3RhdGljX3ByaXZhdGVfZ2V0X3hfZGVjb3JhdG9yczsNCiAgICBsZXQgX3N0YXRpY19wcml2YXRlX2dldF94X2Rlc2NyaXB0b3I7DQogICAgbGV0IF9zdGF0aWNfcHJpdmF0ZV9zZXRfeF9kZWNvcmF0b3JzOw0KICAgIGxldCBfc3RhdGljX3ByaXZhdGVfc2V0X3hfZGVzY3JpcHRvcjsNCiAgICBsZXQgX3N0YXRpY19wcml2YXRlX3lfZGVjb3JhdG9yczsNCiAgICBsZXQgX3N0YXRpY19wcml2YXRlX3lfaW5pdGlhbGl6ZXJzID0gW107DQogICAgbGV0IF9zdGF0aWNfcHJpdmF0ZV96X2RlY29yYXRvcnM7DQogICAgbGV0IF9zdGF0aWNfcHJpdmF0ZV96X2luaXRpYWxpemVycyA9IFtdOw0KICAgIGxldCBfc3RhdGljX3ByaXZhdGVfel9kZXNjcmlwdG9yOw0KICAgIGxldCBfbWV0aG9kX2RlY29yYXRvcnM7DQogICAgbGV0IF9nZXRfeF9kZWNvcmF0b3JzOw0KICAgIGxldCBfc2V0X3hfZGVjb3JhdG9yczsNCiAgICBsZXQgX3lfZGVjb3JhdG9yczsNCiAgICBsZXQgX3lfaW5pdGlhbGl6ZXJzID0gW107DQogICAgbGV0IF96X2RlY29yYXRvcnM7DQogICAgbGV0IF96X2luaXRpYWxpemVycyA9IFtdOw0KICAgIHZhciBDID0gX2NsYXNzVGhpcyA9IGNsYXNzIHsNCiAgICAgICAgY29uc3RydWN0b3IoKSB7DQogICAgICAgICAgICB0aGlzLnkgPSAoX19ydW5Jbml0aWFsaXplcnModGhpcywgX2luc3RhbmNlRXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVycyh0aGlzLCBfeV9pbml0aWFsaXplcnMsIDEpKTsNCiAgICAgICAgICAgIF96XzFfYWNjZXNzb3Jfc3RvcmFnZS5zZXQodGhpcywgX19ydW5Jbml0aWFsaXplcnModGhpcywgX3pfaW5pdGlhbGl6ZXJzLCAxKSk7DQogICAgICAgIH0NCiAgICAgICAgbWV0aG9kKCkgeyB9DQogICAgICAgIGdldCB4KCkgeyByZXR1cm4gMTsgfQ0KICAgICAgICBzZXQgeCh2YWx1ZSkgeyB9DQogICAgICAgIGdldCB6KCkgeyByZXR1cm4gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfel8xX2FjY2Vzc29yX3N0b3JhZ2UsICJmIik7IH0NCiAgICAgICAgc2V0IHoodmFsdWUpIHsgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfel8xX2FjY2Vzc29yX3N0b3JhZ2UsIHZhbHVlLCAiZiIpOyB9DQogICAgfTsNCiAgICBfel8xX2FjY2Vzc29yX3N0b3JhZ2UgPSBuZXcgV2Vha01hcCgpOw0KICAgIF9tZXRob2RfZ2V0ID0gZnVuY3Rpb24gX21ldGhvZF9nZXQoKSB7IHJldHVybiBfc3RhdGljX3ByaXZhdGVfbWV0aG9kX2Rlc2NyaXB0b3IudmFsdWU7IH07DQogICAgX3hfZ2V0ID0gZnVuY3Rpb24gX3hfZ2V0KCkgeyByZXR1cm4gX3N0YXRpY19wcml2YXRlX2dldF94X2Rlc2NyaXB0b3IuZ2V0LmNhbGwodGhpcyk7IH07DQogICAgX3hfc2V0ID0gZnVuY3Rpb24gX3hfc2V0KHZhbHVlKSB7IHJldHVybiBfc3RhdGljX3ByaXZhdGVfc2V0X3hfZGVzY3JpcHRvci5zZXQuY2FsbCh0aGlzLCB2YWx1ZSk7IH07DQogICAgX3pfZ2V0ID0gZnVuY3Rpb24gX3pfZ2V0KCkgeyByZXR1cm4gX3N0YXRpY19wcml2YXRlX3pfZGVzY3JpcHRvci5nZXQuY2FsbCh0aGlzKTsgfTsNCiAgICBfel9zZXQgPSBmdW5jdGlvbiBfel9zZXQodmFsdWUpIHsgcmV0dXJuIF9zdGF0aWNfcHJpdmF0ZV96X2Rlc2NyaXB0b3Iuc2V0LmNhbGwodGhpcywgdmFsdWUpOyB9Ow0KICAgIF9fc2V0RnVuY3Rpb25OYW1lKF9jbGFzc1RoaXMsICJDIik7DQogICAgKCgpID0+IHsNCiAgICAgICAgX21ldGhvZF9kZWNvcmF0b3JzID0gW2RlYywgZGVjXTsNCiAgICAgICAgX2dldF94X2RlY29yYXRvcnMgPSBbZGVjLCBkZWNdOw0KICAgICAgICBfc2V0X3hfZGVjb3JhdG9ycyA9IFtkZWMsIGRlY107DQogICAgICAgIF95X2RlY29yYXRvcnMgPSBbZGVjLCBkZWNdOw0KICAgICAgICBfel9kZWNvcmF0b3JzID0gW2RlYywgZGVjXTsNCiAgICAgICAgX3N0YXRpY19wcml2YXRlX21ldGhvZF9kZWNvcmF0b3JzID0gW2RlYywgZGVjXTsNCiAgICAgICAgX3N0YXRpY19wcml2YXRlX2dldF94X2RlY29yYXRvcnMgPSBbZGVjLCBkZWNdOw0KICAgICAgICBfc3RhdGljX3ByaXZhdGVfc2V0X3hfZGVjb3JhdG9ycyA9IFtkZWMsIGRlY107DQogICAgICAgIF9zdGF0aWNfcHJpdmF0ZV95X2RlY29yYXRvcnMgPSBbZGVjLCBkZWNdOw0KICAgICAgICBfc3RhdGljX3ByaXZhdGVfel9kZWNvcmF0b3JzID0gW2RlYywgZGVjXTsNCiAgICAgICAgX19lc0RlY29yYXRlKF9jbGFzc1RoaXMsIF9zdGF0aWNfcHJpdmF0ZV9tZXRob2RfZGVzY3JpcHRvciA9IHsgdmFsdWU6IF9fc2V0RnVuY3Rpb25OYW1lKGZ1bmN0aW9uICgpIHsgfSwgIiNtZXRob2QiKSB9LCBfc3RhdGljX3ByaXZhdGVfbWV0aG9kX2RlY29yYXRvcnMsIHsga2luZDogIm1ldGhvZCIsIG5hbWU6ICIjbWV0aG9kIiwgc3RhdGljOiB0cnVlLCBwcml2YXRlOiB0cnVlLCBhY2Nlc3M6IHsgaGFzOiBvYmogPT4gX19jbGFzc1ByaXZhdGVGaWVsZEluKF9jbGFzc1RoaXMsIG9iaiksIGdldDogb2JqID0+IF9fY2xhc3NQcml2YXRlRmllbGRHZXQob2JqLCBfY2xhc3NUaGlzLCAiYSIsIF9tZXRob2RfZ2V0KSB9IH0sIG51bGwsIF9zdGF0aWNFeHRyYUluaXRpYWxpemVycyk7DQogICAgICAgIF9fZXNEZWNvcmF0ZShfY2xhc3NUaGlzLCBfc3RhdGljX3ByaXZhdGVfZ2V0X3hfZGVzY3JpcHRvciA9IHsgZ2V0OiBfX3NldEZ1bmN0aW9uTmFtZShmdW5jdGlvbiAoKSB7IHJldHVybiAxOyB9LCAiI3giLCAiZ2V0IikgfSwgX3N0YXRpY19wcml2YXRlX2dldF94X2RlY29yYXRvcnMsIHsga2luZDogImdldHRlciIsIG5hbWU6ICIjeCIsIHN0YXRpYzogdHJ1ZSwgcHJpdmF0ZTogdHJ1ZSwgYWNjZXNzOiB7IGhhczogb2JqID0+IF9fY2xhc3NQcml2YXRlRmllbGRJbihfY2xhc3NUaGlzLCBvYmopLCBnZXQ6IG9iaiA9PiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KG9iaiwgX2NsYXNzVGhpcywgImEiLCBfeF9nZXQpIH0gfSwgbnVsbCwgX3N0YXRpY0V4dHJhSW5pdGlhbGl6ZXJzKTsNCiAgICAgICAgX19lc0RlY29yYXRlKF9jbGFzc1RoaXMsIF9zdGF0aWNfcHJpdmF0ZV9zZXRfeF9kZXNjcmlwdG9yID0geyBzZXQ6IF9fc2V0RnVuY3Rpb25OYW1lKGZ1bmN0aW9uICh2YWx1ZSkgeyB9LCAiI3giLCAic2V0IikgfSwgX3N0YXRpY19wcml2YXRlX3NldF94X2RlY29yYXRvcnMsIHsga2luZDogInNldHRlciIsIG5hbWU6ICIjeCIsIHN0YXRpYzogdHJ1ZSwgcHJpdmF0ZTogdHJ1ZSwgYWNjZXNzOiB7IGhhczogb2JqID0+IF9fY2xhc3NQcml2YXRlRmllbGRJbihfY2xhc3NUaGlzLCBvYmopLCBzZXQ6IChvYmosIHZhbHVlKSA9PiB7IF9fY2xhc3NQcml2YXRlRmllbGRTZXQob2JqLCBfY2xhc3NUaGlzLCB2YWx1ZSwgImEiLCBfeF9zZXQpOyB9IH0gfSwgbnVsbCwgX3N0YXRpY0V4dHJhSW5pdGlhbGl6ZXJzKTsNCiAgICAgICAgX19lc0RlY29yYXRlKF9jbGFzc1RoaXMsIF9zdGF0aWNfcHJpdmF0ZV96X2Rlc2NyaXB0b3IgPSB7IGdldDogX19zZXRGdW5jdGlvbk5hbWUoZnVuY3Rpb24gKCkgeyByZXR1cm4gX19jbGFzc1ByaXZhdGVGaWVsZEdldChfY2xhc3NUaGlzLCBfY2xhc3NUaGlzLCAiZiIsIF96X2FjY2Vzc29yX3N0b3JhZ2UpOyB9LCAiI3oiLCAiZ2V0IiksIHNldDogX19zZXRGdW5jdGlvbk5hbWUoZnVuY3Rpb24gKHZhbHVlKSB7IF9fY2xhc3NQcml2YXRlRmllbGRTZXQoX2NsYXNzVGhpcywgX2NsYXNzVGhpcywgdmFsdWUsICJmIiwgX3pfYWNjZXNzb3Jfc3RvcmFnZSk7IH0sICIjeiIsICJzZXQiKSB9LCBfc3RhdGljX3ByaXZhdGVfel9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICIjeiIsIHN0YXRpYzogdHJ1ZSwgcHJpdmF0ZTogdHJ1ZSwgYWNjZXNzOiB7IGhhczogb2JqID0+IF9fY2xhc3NQcml2YXRlRmllbGRJbihfY2xhc3NUaGlzLCBvYmopLCBnZXQ6IG9iaiA9PiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KG9iaiwgX2NsYXNzVGhpcywgImEiLCBfel9nZXQpLCBzZXQ6IChvYmosIHZhbHVlKSA9PiB7IF9fY2xhc3NQcml2YXRlRmllbGRTZXQob2JqLCBfY2xhc3NUaGlzLCB2YWx1ZSwgImEiLCBfel9zZXQpOyB9IH0gfSwgX3N0YXRpY19wcml2YXRlX3pfaW5pdGlhbGl6ZXJzLCBfc3RhdGljRXh0cmFJbml0aWFsaXplcnMpOw0KICAgICAgICBfX2VzRGVjb3JhdGUoX2NsYXNzVGhpcywgbnVsbCwgX21ldGhvZF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJtZXRob2QiLCBuYW1lOiAibWV0aG9kIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IG9iaiA9PiAibWV0aG9kIiBpbiBvYmosIGdldDogb2JqID0+IG9iai5tZXRob2QgfSB9LCBudWxsLCBfaW5zdGFuY2VFeHRyYUluaXRpYWxpemVycyk7DQogICAgICAgIF9fZXNEZWNvcmF0ZShfY2xhc3NUaGlzLCBudWxsLCBfZ2V0X3hfZGVjb3JhdG9ycywgeyBraW5kOiAiZ2V0dGVyIiwgbmFtZTogIngiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogb2JqID0+ICJ4IiBpbiBvYmosIGdldDogb2JqID0+IG9iai54IH0gfSwgbnVsbCwgX2luc3RhbmNlRXh0cmFJbml0aWFsaXplcnMpOw0KICAgICAgICBfX2VzRGVjb3JhdGUoX2NsYXNzVGhpcywgbnVsbCwgX3NldF94X2RlY29yYXRvcnMsIHsga2luZDogInNldHRlciIsIG5hbWU6ICJ4Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IG9iaiA9PiAieCIgaW4gb2JqLCBzZXQ6IChvYmosIHZhbHVlKSA9PiB7IG9iai54ID0gdmFsdWU7IH0gfSB9LCBudWxsLCBfaW5zdGFuY2VFeHRyYUluaXRpYWxpemVycyk7DQogICAgICAgIF9fZXNEZWNvcmF0ZShfY2xhc3NUaGlzLCBudWxsLCBfel9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ6Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IG9iaiA9PiAieiIgaW4gb2JqLCBnZXQ6IG9iaiA9PiBvYmoueiwgc2V0OiAob2JqLCB2YWx1ZSkgPT4geyBvYmoueiA9IHZhbHVlOyB9IH0gfSwgX3pfaW5pdGlhbGl6ZXJzLCBfaW5zdGFuY2VFeHRyYUluaXRpYWxpemVycyk7DQogICAgICAgIF9fZXNEZWNvcmF0ZShudWxsLCBudWxsLCBfc3RhdGljX3ByaXZhdGVfeV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJmaWVsZCIsIG5hbWU6ICIjeSIsIHN0YXRpYzogdHJ1ZSwgcHJpdmF0ZTogdHJ1ZSwgYWNjZXNzOiB7IGhhczogb2JqID0+IF9fY2xhc3NQcml2YXRlRmllbGRJbihfY2xhc3NUaGlzLCBvYmopLCBnZXQ6IG9iaiA9PiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KG9iaiwgX2NsYXNzVGhpcywgImYiLCBfeSksIHNldDogKG9iaiwgdmFsdWUpID0+IHsgX19jbGFzc1ByaXZhdGVGaWVsZFNldChvYmosIF9jbGFzc1RoaXMsIHZhbHVlLCAiZiIsIF95KTsgfSB9IH0sIF9zdGF0aWNfcHJpdmF0ZV95X2luaXRpYWxpemVycywgX3N0YXRpY0V4dHJhSW5pdGlhbGl6ZXJzKTsNCiAgICAgICAgX19lc0RlY29yYXRlKG51bGwsIG51bGwsIF95X2RlY29yYXRvcnMsIHsga2luZDogImZpZWxkIiwgbmFtZTogInkiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogb2JqID0+ICJ5IiBpbiBvYmosIGdldDogb2JqID0+IG9iai55LCBzZXQ6IChvYmosIHZhbHVlKSA9PiB7IG9iai55ID0gdmFsdWU7IH0gfSB9LCBfeV9pbml0aWFsaXplcnMsIF9pbnN0YW5jZUV4dHJhSW5pdGlhbGl6ZXJzKTsNCiAgICAgICAgX19lc0RlY29yYXRlKG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsNCiAgICAgICAgQyA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOw0KICAgICAgICBfX3J1bkluaXRpYWxpemVycyhfY2xhc3NUaGlzLCBfc3RhdGljRXh0cmFJbml0aWFsaXplcnMpOw0KICAgIH0pKCk7DQogICAgX3kgPSB7IHZhbHVlOiBfX3J1bkluaXRpYWxpemVycyhfY2xhc3NUaGlzLCBfc3RhdGljX3ByaXZhdGVfeV9pbml0aWFsaXplcnMsIDEpIH07DQogICAgX3pfYWNjZXNzb3Jfc3RvcmFnZSA9IHsgdmFsdWU6IF9fcnVuSW5pdGlhbGl6ZXJzKF9jbGFzc1RoaXMsIF9zdGF0aWNfcHJpdmF0ZV96X2luaXRpYWxpemVycywgMSkgfTsNCiAgICAoKCkgPT4gew0KICAgICAgICBfX3J1bkluaXRpYWxpemVycyhfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7DQogICAgfSkoKTsNCiAgICByZXR1cm4gQyA9IF9jbGFzc1RoaXM7DQp9KSgpOw0KLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZXNEZWNvcmF0b3JzLWNsYXNzRGVjbGFyYXRpb24tc291cmNlTWFwLmpzLm1hcA==,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNEZWNvcmF0b3JzLWNsYXNzRGVjbGFyYXRpb24tc291cmNlTWFwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZXNEZWNvcmF0b3JzLWNsYXNzRGVjbGFyYXRpb24tc291cmNlTWFwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBSU0sQ0FBQzs7NEJBRk4sR0FBRyxFQUNILEdBQUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1lBZ0JBLE1BQUMsa0dBQUcsQ0FBQyxHQUFDO1lBSUcseUVBQUksQ0FBQyxHQUFDO1FBcUJuQixDQUFDO1FBckNHLE1BQU0sS0FBSSxDQUFDO1FBSVgsSUFBSSxDQUFDLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBSXJCLElBQUksQ0FBQyxDQUFDLEtBQWEsSUFBSSxDQUFDO1FBUXhCLElBQVMsQ0FBQyx1RUFBSztRQUFmLElBQVMsQ0FBQyw0RUFBSzs7Ozs7Ozs7Ozs4QkFsQmQsR0FBRyxFQUNILEdBQUc7NkJBR0gsR0FBRyxFQUNILEdBQUc7NkJBR0gsR0FBRyxFQUNILEdBQUc7eUJBR0gsR0FBRyxFQUNILEdBQUc7eUJBR0gsR0FBRyxFQUNILEdBQUc7NkNBR0gsR0FBRyxFQUNILEdBQUc7NENBR0gsR0FBRyxFQUNILEdBQUc7NENBR0gsR0FBRyxFQUNILEdBQUc7d0NBR0gsR0FBRyxFQUNILEdBQUc7d0NBR0gsR0FBRyxFQUNILEdBQUc7UUFmSiwrREFBQSx5QkFBQSxjQUFrQixDQUFDLFlBQUEsZ1JBQUE7UUFJbkIsOERBQUEsdUJBQUEsY0FBa0IsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQUEscVFBQUE7UUFJN0IsOERBQUEsdUJBQUEsVUFBYyxLQUFhLElBQUksQ0FBQyxjQUFBLDBSQUFBO1FBUWhDLDBEQUFBLHVCQUFBLGdHQUF1QixjQUFBLEVBQXZCLHVCQUFBLHFHQUF1QixjQUFBLG9YQUFBO1FBcEN2QiwyS0FBQSxNQUFNLHdDQUFLO1FBSVgsZ0tBQUksQ0FBQyx3Q0FBZ0I7UUFJckIsMktBQUksQ0FBQyxtREFBbUI7UUFReEIsOEpBQVMsQ0FBQyw2QkFBRCxDQUFDLDhEQUFLO1FBZ0JmLDhYQUFjO1FBcEJkLHFKQUFBLENBQUMsNkJBQUQsQ0FBQyw4REFBSztRQWZWLHdKQXdDQzs7UUF4Q0ssd0RBQUM7O0lBbUNJLDRFQUFLLENBQUMsR0FBSixDQUFLO0lBSUUsNkZBQUssQ0FBQyxHQUFKLENBQUs7O1FBdkNyQix1REFBQyJ9,ZGVjbGFyZSB2YXIgZGVjOiBhbnk7CgpAZGVjCkBkZWMKY2xhc3MgQyB7CiAgICBAZGVjCiAgICBAZGVjCiAgICBtZXRob2QoKSB7fQoKICAgIEBkZWMKICAgIEBkZWMKICAgIGdldCB4KCkgeyByZXR1cm4gMTsgfQoKICAgIEBkZWMKICAgIEBkZWMKICAgIHNldCB4KHZhbHVlOiBudW1iZXIpIHsgfQoKICAgIEBkZWMKICAgIEBkZWMKICAgIHkgPSAxOwoKICAgIEBkZWMKICAgIEBkZWMKICAgIGFjY2Vzc29yIHogPSAxOwoKICAgIEBkZWMKICAgIEBkZWMKICAgIHN0YXRpYyAjbWV0aG9kKCkge30KCiAgICBAZGVjCiAgICBAZGVjCiAgICBzdGF0aWMgZ2V0ICN4KCkgeyByZXR1cm4gMTsgfQoKICAgIEBkZWMKICAgIEBkZWMKICAgIHN0YXRpYyBzZXQgI3godmFsdWU6IG51bWJlcikgeyB9CgogICAgQGRlYwogICAgQGRlYwogICAgc3RhdGljICN5ID0gMTsKCiAgICBAZGVjCiAgICBAZGVjCiAgICBzdGF0aWMgYWNjZXNzb3IgI3ogPSAxOwp9Cg== //// [esDecorators-classDeclaration-sourceMap.d.ts.map] {"version":3,"file":"esDecorators-classDeclaration-sourceMap.d.ts","sourceRoot":"","sources":["esDecorators-classDeclaration-sourceMap.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,IAAI,GAAG,EAAE,GAAG,CAAC;AAErB,cAEM,CAAC;;IAGH,MAAM;IAEN,IAEI,CAAC,IAIQ,MAAM,CAJE;IAErB,IAEI,CAAC,CAAC,KAAK,EAAE,MAAM,EAAK;IAIxB,CAAC,SAAK;IAIN,QAAQ,CAAC,CAAC,SAAK;CAqBlB"} diff --git a/tests/baselines/reference/esDecorators-classDeclaration-sourceMap(target=es2015).sourcemap.txt b/tests/baselines/reference/esDecorators-classDeclaration-sourceMap(target=es2015).sourcemap.txt index 423df848069d8..e794c7bed252e 100644 --- a/tests/baselines/reference/esDecorators-classDeclaration-sourceMap(target=es2015).sourcemap.txt +++ b/tests/baselines/reference/esDecorators-classDeclaration-sourceMap(target=es2015).sourcemap.txt @@ -25,10 +25,10 @@ sourceFile:esDecorators-classDeclaration-sourceMap.ts >>> if (result === null || typeof result !== "object") throw new TypeError("Object expected"); >>> if (_ = accept(result.get)) descriptor.get = _; >>> if (_ = accept(result.set)) descriptor.set = _; ->>> if (_ = accept(result.init)) initializers.push(_); +>>> if (_ = accept(result.init)) initializers.unshift(_); >>> } >>> else if (_ = accept(result)) { ->>> if (kind === "field") initializers.push(_); +>>> if (kind === "field") initializers.unshift(_); >>> else descriptor[key] = _; >>> } >>> } diff --git a/tests/baselines/reference/esDecorators-classDeclaration-sourceMap(target=es2022).js b/tests/baselines/reference/esDecorators-classDeclaration-sourceMap(target=es2022).js index b6e536c35d998..472f216805b80 100644 --- a/tests/baselines/reference/esDecorators-classDeclaration-sourceMap(target=es2022).js +++ b/tests/baselines/reference/esDecorators-classDeclaration-sourceMap(target=es2022).js @@ -64,10 +64,10 @@ var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, if (result === null || typeof result !== "object") throw new TypeError("Object expected"); if (_ = accept(result.get)) descriptor.get = _; if (_ = accept(result.set)) descriptor.set = _; - if (_ = accept(result.init)) initializers.push(_); + if (_ = accept(result.init)) initializers.unshift(_); } else if (_ = accept(result)) { - if (kind === "field") initializers.push(_); + if (kind === "field") initializers.unshift(_); else descriptor[key] = _; } } diff --git a/tests/baselines/reference/esDecorators-classDeclaration-sourceMap(target=es2022).js.map b/tests/baselines/reference/esDecorators-classDeclaration-sourceMap(target=es2022).js.map index 756374c8c3b4f..5752ff8d4310a 100644 --- a/tests/baselines/reference/esDecorators-classDeclaration-sourceMap(target=es2022).js.map +++ b/tests/baselines/reference/esDecorators-classDeclaration-sourceMap(target=es2022).js.map @@ -1,6 +1,6 @@ //// [esDecorators-classDeclaration-sourceMap.js.map] {"version":3,"file":"esDecorators-classDeclaration-sourceMap.js","sourceRoot":"","sources":["esDecorators-classDeclaration-sourceMap.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAIM,CAAC;;4BAFN,GAAG,EACH,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;kCAEC,GAAG,EACH,GAAG;iCAGH,GAAG,EACH,GAAG;iCAGH,GAAG,EACH,GAAG;6BAGH,GAAG,EACH,GAAG;6BAGH,GAAG,EACH,GAAG;iDAGH,GAAG,EACH,GAAG;gDAGH,GAAG,EACH,GAAG;gDAGH,GAAG,EACH,GAAG;4CAGH,GAAG,EACH,GAAG;4CAGH,GAAG,EACH,GAAG;YAfJ,yDAAA,yBAAA,cAAkB,CAAC,YAAA,gRAAA;YAInB,wDAAA,uBAAA,cAAkB,OAAO,CAAC,CAAC,CAAC,CAAC,cAAA,qQAAA;YAI7B,wDAAA,uBAAA,UAAc,KAAa,IAAI,CAAC,cAAA,0RAAA;YAQhC,oDAAA,uBAAA,0FAAuB,cAAA,EAAvB,uBAAA,+FAAuB,cAAA,oXAAA;YApCvB,qKAAA,MAAM,wCAAK;YAIX,0JAAI,CAAC,wCAAgB;YAIrB,qKAAI,CAAC,mDAAmB;YAQxB,wJAAS,CAAC,6BAAD,CAAC,8DAAK;YAgBf,8XAAc;YApBd,qJAAA,CAAC,6BAAD,CAAC,8DAAK;YAfV,4IAwCC;;YAxCK,wDAAC;;QAGH,MAAM,KAAI,CAAC;QAIX,IAAI,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;QAIrB,IAAI,CAAC,CAAC,KAAa,IAAI,CAAC;QAIxB,CAAC,kGAAG,CAAC,GAAC;QAIN,+DAAa,CAAC,EAAC;QAAf,IAAS,CAAC,uCAAK;QAAf,IAAS,CAAC,6CAAK;;YAgBR,4EAAK,CAAC,GAAJ,CAAK;;;YAIE,6FAAK,CAAC,GAAJ,CAAK;;;YAvCrB,uDAAC"} -//// https://sokra.github.io/source-map-visualization#base64,dmFyIF9fZXNEZWNvcmF0ZSA9ICh0aGlzICYmIHRoaXMuX19lc0RlY29yYXRlKSB8fCBmdW5jdGlvbiAoY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsNCiAgICBmdW5jdGlvbiBhY2NlcHQoZikgeyBpZiAoZiAhPT0gdm9pZCAwICYmIHR5cGVvZiBmICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOyByZXR1cm4gZjsgfQ0KICAgIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleSA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsNCiAgICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7DQogICAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7DQogICAgdmFyIF8sIGRvbmUgPSBmYWxzZTsNCiAgICBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgew0KICAgICAgICB2YXIgY29udGV4dCA9IHt9Ow0KICAgICAgICBmb3IgKHZhciBwIGluIGNvbnRleHRJbikgY29udGV4dFtwXSA9IHAgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcF07DQogICAgICAgIGZvciAodmFyIHAgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dC5hY2Nlc3NbcF0gPSBjb250ZXh0SW4uYWNjZXNzW3BdOw0KICAgICAgICBjb250ZXh0LmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24gKGYpIHsgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOyBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmIHx8IG51bGwpKTsgfTsNCiAgICAgICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2ldKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleV0sIGNvbnRleHQpOw0KICAgICAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgew0KICAgICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsNCiAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOw0KICAgICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzsNCiAgICAgICAgICAgIGlmIChfID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF87DQogICAgICAgICAgICBpZiAoXyA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy5wdXNoKF8pOw0KICAgICAgICB9DQogICAgICAgIGVsc2UgaWYgKF8gPSBhY2NlcHQocmVzdWx0KSkgew0KICAgICAgICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy5wdXNoKF8pOw0KICAgICAgICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleV0gPSBfOw0KICAgICAgICB9DQogICAgfQ0KICAgIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsNCiAgICBkb25lID0gdHJ1ZTsNCn07DQp2YXIgX19ydW5Jbml0aWFsaXplcnMgPSAodGhpcyAmJiB0aGlzLl9fcnVuSW5pdGlhbGl6ZXJzKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZSkgew0KICAgIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOw0KICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaSsrKSB7DQogICAgICAgIHZhbHVlID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaV0uY2FsbCh0aGlzQXJnLCB2YWx1ZSkgOiBpbml0aWFsaXplcnNbaV0uY2FsbCh0aGlzQXJnKTsNCiAgICB9DQogICAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUgOiB2b2lkIDA7DQp9Ow0KdmFyIF9fc2V0RnVuY3Rpb25OYW1lID0gKHRoaXMgJiYgdGhpcy5fX3NldEZ1bmN0aW9uTmFtZSkgfHwgZnVuY3Rpb24gKGYsIG5hbWUsIHByZWZpeCkgew0KICAgIGlmICh0eXBlb2YgbmFtZSA9PT0gInN5bWJvbCIpIG5hbWUgPSBuYW1lLmRlc2NyaXB0aW9uID8gIlsiLmNvbmNhdChuYW1lLmRlc2NyaXB0aW9uLCAiXSIpIDogIiI7DQogICAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmLCAibmFtZSIsIHsgY29uZmlndXJhYmxlOiB0cnVlLCB2YWx1ZTogcHJlZml4ID8gIiIuY29uY2F0KHByZWZpeCwgIiAiLCBuYW1lKSA6IG5hbWUgfSk7DQp9Ow0KdmFyIF9fY2xhc3NQcml2YXRlRmllbGRJbiA9ICh0aGlzICYmIHRoaXMuX19jbGFzc1ByaXZhdGVGaWVsZEluKSB8fCBmdW5jdGlvbihzdGF0ZSwgcmVjZWl2ZXIpIHsNCiAgICBpZiAocmVjZWl2ZXIgPT09IG51bGwgfHwgKHR5cGVvZiByZWNlaXZlciAhPT0gIm9iamVjdCIgJiYgdHlwZW9mIHJlY2VpdmVyICE9PSAiZnVuY3Rpb24iKSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IHVzZSAnaW4nIG9wZXJhdG9yIG9uIG5vbi1vYmplY3QiKTsNCiAgICByZXR1cm4gdHlwZW9mIHN0YXRlID09PSAiZnVuY3Rpb24iID8gcmVjZWl2ZXIgPT09IHN0YXRlIDogc3RhdGUuaGFzKHJlY2VpdmVyKTsNCn07DQp2YXIgX19jbGFzc1ByaXZhdGVGaWVsZEdldCA9ICh0aGlzICYmIHRoaXMuX19jbGFzc1ByaXZhdGVGaWVsZEdldCkgfHwgZnVuY3Rpb24gKHJlY2VpdmVyLCBzdGF0ZSwga2luZCwgZikgew0KICAgIGlmIChraW5kID09PSAiYSIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIGdldHRlciIpOw0KICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09ICJmdW5jdGlvbiIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IHJlYWQgcHJpdmF0ZSBtZW1iZXIgZnJvbSBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0Iik7DQogICAgcmV0dXJuIGtpbmQgPT09ICJtIiA/IGYgOiBraW5kID09PSAiYSIgPyBmLmNhbGwocmVjZWl2ZXIpIDogZiA/IGYudmFsdWUgOiBzdGF0ZS5nZXQocmVjZWl2ZXIpOw0KfTsNCnZhciBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0ID0gKHRoaXMgJiYgdGhpcy5fX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KSB8fCBmdW5jdGlvbiAocmVjZWl2ZXIsIHN0YXRlLCB2YWx1ZSwga2luZCwgZikgew0KICAgIGlmIChraW5kID09PSAibSIpIHRocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgbWV0aG9kIGlzIG5vdCB3cml0YWJsZSIpOw0KICAgIGlmIChraW5kID09PSAiYSIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIHNldHRlciIpOw0KICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09ICJmdW5jdGlvbiIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IHdyaXRlIHByaXZhdGUgbWVtYmVyIHRvIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXQiKTsNCiAgICByZXR1cm4gKGtpbmQgPT09ICJhIiA/IGYuY2FsbChyZWNlaXZlciwgdmFsdWUpIDogZiA/IGYudmFsdWUgPSB2YWx1ZSA6IHN0YXRlLnNldChyZWNlaXZlciwgdmFsdWUpKSwgdmFsdWU7DQp9Ow0KbGV0IEMgPSAoKCkgPT4gew0KICAgIHZhciBfbWV0aG9kX2dldCwgX3hfZ2V0LCBfeF9zZXQsIF95LCBfel9hY2Nlc3Nvcl9zdG9yYWdlLCBfel9nZXQsIF96X3NldDsNCiAgICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFtkZWMsIGRlY107DQogICAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7DQogICAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107DQogICAgbGV0IF9jbGFzc1RoaXM7DQogICAgbGV0IF9zdGF0aWNFeHRyYUluaXRpYWxpemVycyA9IFtdOw0KICAgIGxldCBfaW5zdGFuY2VFeHRyYUluaXRpYWxpemVycyA9IFtdOw0KICAgIGxldCBfc3RhdGljX3ByaXZhdGVfbWV0aG9kX2RlY29yYXRvcnM7DQogICAgbGV0IF9zdGF0aWNfcHJpdmF0ZV9tZXRob2RfZGVzY3JpcHRvcjsNCiAgICBsZXQgX3N0YXRpY19wcml2YXRlX2dldF94X2RlY29yYXRvcnM7DQogICAgbGV0IF9zdGF0aWNfcHJpdmF0ZV9nZXRfeF9kZXNjcmlwdG9yOw0KICAgIGxldCBfc3RhdGljX3ByaXZhdGVfc2V0X3hfZGVjb3JhdG9yczsNCiAgICBsZXQgX3N0YXRpY19wcml2YXRlX3NldF94X2Rlc2NyaXB0b3I7DQogICAgbGV0IF9zdGF0aWNfcHJpdmF0ZV95X2RlY29yYXRvcnM7DQogICAgbGV0IF9zdGF0aWNfcHJpdmF0ZV95X2luaXRpYWxpemVycyA9IFtdOw0KICAgIGxldCBfc3RhdGljX3ByaXZhdGVfel9kZWNvcmF0b3JzOw0KICAgIGxldCBfc3RhdGljX3ByaXZhdGVfel9pbml0aWFsaXplcnMgPSBbXTsNCiAgICBsZXQgX3N0YXRpY19wcml2YXRlX3pfZGVzY3JpcHRvcjsNCiAgICBsZXQgX21ldGhvZF9kZWNvcmF0b3JzOw0KICAgIGxldCBfZ2V0X3hfZGVjb3JhdG9yczsNCiAgICBsZXQgX3NldF94X2RlY29yYXRvcnM7DQogICAgbGV0IF95X2RlY29yYXRvcnM7DQogICAgbGV0IF95X2luaXRpYWxpemVycyA9IFtdOw0KICAgIGxldCBfel9kZWNvcmF0b3JzOw0KICAgIGxldCBfel9pbml0aWFsaXplcnMgPSBbXTsNCiAgICB2YXIgQyA9IGNsYXNzIHsNCiAgICAgICAgc3RhdGljIHsgX19zZXRGdW5jdGlvbk5hbWUodGhpcywgIkMiKTsgfQ0KICAgICAgICBzdGF0aWMgeyBfbWV0aG9kX2dldCA9IGZ1bmN0aW9uIF9tZXRob2RfZ2V0KCkgeyByZXR1cm4gX3N0YXRpY19wcml2YXRlX21ldGhvZF9kZXNjcmlwdG9yLnZhbHVlOyB9LCBfeF9nZXQgPSBmdW5jdGlvbiBfeF9nZXQoKSB7IHJldHVybiBfc3RhdGljX3ByaXZhdGVfZ2V0X3hfZGVzY3JpcHRvci5nZXQuY2FsbCh0aGlzKTsgfSwgX3hfc2V0ID0gZnVuY3Rpb24gX3hfc2V0KHZhbHVlKSB7IHJldHVybiBfc3RhdGljX3ByaXZhdGVfc2V0X3hfZGVzY3JpcHRvci5zZXQuY2FsbCh0aGlzLCB2YWx1ZSk7IH0sIF96X2dldCA9IGZ1bmN0aW9uIF96X2dldCgpIHsgcmV0dXJuIF9zdGF0aWNfcHJpdmF0ZV96X2Rlc2NyaXB0b3IuZ2V0LmNhbGwodGhpcyk7IH0sIF96X3NldCA9IGZ1bmN0aW9uIF96X3NldCh2YWx1ZSkgeyByZXR1cm4gX3N0YXRpY19wcml2YXRlX3pfZGVzY3JpcHRvci5zZXQuY2FsbCh0aGlzLCB2YWx1ZSk7IH07IH0NCiAgICAgICAgc3RhdGljIHsNCiAgICAgICAgICAgIF9tZXRob2RfZGVjb3JhdG9ycyA9IFtkZWMsIGRlY107DQogICAgICAgICAgICBfZ2V0X3hfZGVjb3JhdG9ycyA9IFtkZWMsIGRlY107DQogICAgICAgICAgICBfc2V0X3hfZGVjb3JhdG9ycyA9IFtkZWMsIGRlY107DQogICAgICAgICAgICBfeV9kZWNvcmF0b3JzID0gW2RlYywgZGVjXTsNCiAgICAgICAgICAgIF96X2RlY29yYXRvcnMgPSBbZGVjLCBkZWNdOw0KICAgICAgICAgICAgX3N0YXRpY19wcml2YXRlX21ldGhvZF9kZWNvcmF0b3JzID0gW2RlYywgZGVjXTsNCiAgICAgICAgICAgIF9zdGF0aWNfcHJpdmF0ZV9nZXRfeF9kZWNvcmF0b3JzID0gW2RlYywgZGVjXTsNCiAgICAgICAgICAgIF9zdGF0aWNfcHJpdmF0ZV9zZXRfeF9kZWNvcmF0b3JzID0gW2RlYywgZGVjXTsNCiAgICAgICAgICAgIF9zdGF0aWNfcHJpdmF0ZV95X2RlY29yYXRvcnMgPSBbZGVjLCBkZWNdOw0KICAgICAgICAgICAgX3N0YXRpY19wcml2YXRlX3pfZGVjb3JhdG9ycyA9IFtkZWMsIGRlY107DQogICAgICAgICAgICBfX2VzRGVjb3JhdGUodGhpcywgX3N0YXRpY19wcml2YXRlX21ldGhvZF9kZXNjcmlwdG9yID0geyB2YWx1ZTogX19zZXRGdW5jdGlvbk5hbWUoZnVuY3Rpb24gKCkgeyB9LCAiI21ldGhvZCIpIH0sIF9zdGF0aWNfcHJpdmF0ZV9tZXRob2RfZGVjb3JhdG9ycywgeyBraW5kOiAibWV0aG9kIiwgbmFtZTogIiNtZXRob2QiLCBzdGF0aWM6IHRydWUsIHByaXZhdGU6IHRydWUsIGFjY2VzczogeyBoYXM6IG9iaiA9PiBfX2NsYXNzUHJpdmF0ZUZpZWxkSW4oX2NsYXNzVGhpcywgb2JqKSwgZ2V0OiBvYmogPT4gX19jbGFzc1ByaXZhdGVGaWVsZEdldChvYmosIF9jbGFzc1RoaXMsICJhIiwgX21ldGhvZF9nZXQpIH0gfSwgbnVsbCwgX3N0YXRpY0V4dHJhSW5pdGlhbGl6ZXJzKTsNCiAgICAgICAgICAgIF9fZXNEZWNvcmF0ZSh0aGlzLCBfc3RhdGljX3ByaXZhdGVfZ2V0X3hfZGVzY3JpcHRvciA9IHsgZ2V0OiBfX3NldEZ1bmN0aW9uTmFtZShmdW5jdGlvbiAoKSB7IHJldHVybiAxOyB9LCAiI3giLCAiZ2V0IikgfSwgX3N0YXRpY19wcml2YXRlX2dldF94X2RlY29yYXRvcnMsIHsga2luZDogImdldHRlciIsIG5hbWU6ICIjeCIsIHN0YXRpYzogdHJ1ZSwgcHJpdmF0ZTogdHJ1ZSwgYWNjZXNzOiB7IGhhczogb2JqID0+IF9fY2xhc3NQcml2YXRlRmllbGRJbihfY2xhc3NUaGlzLCBvYmopLCBnZXQ6IG9iaiA9PiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KG9iaiwgX2NsYXNzVGhpcywgImEiLCBfeF9nZXQpIH0gfSwgbnVsbCwgX3N0YXRpY0V4dHJhSW5pdGlhbGl6ZXJzKTsNCiAgICAgICAgICAgIF9fZXNEZWNvcmF0ZSh0aGlzLCBfc3RhdGljX3ByaXZhdGVfc2V0X3hfZGVzY3JpcHRvciA9IHsgc2V0OiBfX3NldEZ1bmN0aW9uTmFtZShmdW5jdGlvbiAodmFsdWUpIHsgfSwgIiN4IiwgInNldCIpIH0sIF9zdGF0aWNfcHJpdmF0ZV9zZXRfeF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJzZXR0ZXIiLCBuYW1lOiAiI3giLCBzdGF0aWM6IHRydWUsIHByaXZhdGU6IHRydWUsIGFjY2VzczogeyBoYXM6IG9iaiA9PiBfX2NsYXNzUHJpdmF0ZUZpZWxkSW4oX2NsYXNzVGhpcywgb2JqKSwgc2V0OiAob2JqLCB2YWx1ZSkgPT4geyBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KG9iaiwgX2NsYXNzVGhpcywgdmFsdWUsICJhIiwgX3hfc2V0KTsgfSB9IH0sIG51bGwsIF9zdGF0aWNFeHRyYUluaXRpYWxpemVycyk7DQogICAgICAgICAgICBfX2VzRGVjb3JhdGUodGhpcywgX3N0YXRpY19wcml2YXRlX3pfZGVzY3JpcHRvciA9IHsgZ2V0OiBfX3NldEZ1bmN0aW9uTmFtZShmdW5jdGlvbiAoKSB7IHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9jbGFzc1RoaXMsICJmIiwgX3pfYWNjZXNzb3Jfc3RvcmFnZSk7IH0sICIjeiIsICJnZXQiKSwgc2V0OiBfX3NldEZ1bmN0aW9uTmFtZShmdW5jdGlvbiAodmFsdWUpIHsgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfY2xhc3NUaGlzLCB2YWx1ZSwgImYiLCBfel9hY2Nlc3Nvcl9zdG9yYWdlKTsgfSwgIiN6IiwgInNldCIpIH0sIF9zdGF0aWNfcHJpdmF0ZV96X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIiN6Iiwgc3RhdGljOiB0cnVlLCBwcml2YXRlOiB0cnVlLCBhY2Nlc3M6IHsgaGFzOiBvYmogPT4gX19jbGFzc1ByaXZhdGVGaWVsZEluKF9jbGFzc1RoaXMsIG9iaiksIGdldDogb2JqID0+IF9fY2xhc3NQcml2YXRlRmllbGRHZXQob2JqLCBfY2xhc3NUaGlzLCAiYSIsIF96X2dldCksIHNldDogKG9iaiwgdmFsdWUpID0+IHsgX19jbGFzc1ByaXZhdGVGaWVsZFNldChvYmosIF9jbGFzc1RoaXMsIHZhbHVlLCAiYSIsIF96X3NldCk7IH0gfSB9LCBfc3RhdGljX3ByaXZhdGVfel9pbml0aWFsaXplcnMsIF9zdGF0aWNFeHRyYUluaXRpYWxpemVycyk7DQogICAgICAgICAgICBfX2VzRGVjb3JhdGUodGhpcywgbnVsbCwgX21ldGhvZF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJtZXRob2QiLCBuYW1lOiAibWV0aG9kIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IG9iaiA9PiAibWV0aG9kIiBpbiBvYmosIGdldDogb2JqID0+IG9iai5tZXRob2QgfSB9LCBudWxsLCBfaW5zdGFuY2VFeHRyYUluaXRpYWxpemVycyk7DQogICAgICAgICAgICBfX2VzRGVjb3JhdGUodGhpcywgbnVsbCwgX2dldF94X2RlY29yYXRvcnMsIHsga2luZDogImdldHRlciIsIG5hbWU6ICJ4Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IG9iaiA9PiAieCIgaW4gb2JqLCBnZXQ6IG9iaiA9PiBvYmoueCB9IH0sIG51bGwsIF9pbnN0YW5jZUV4dHJhSW5pdGlhbGl6ZXJzKTsNCiAgICAgICAgICAgIF9fZXNEZWNvcmF0ZSh0aGlzLCBudWxsLCBfc2V0X3hfZGVjb3JhdG9ycywgeyBraW5kOiAic2V0dGVyIiwgbmFtZTogIngiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogb2JqID0+ICJ4IiBpbiBvYmosIHNldDogKG9iaiwgdmFsdWUpID0+IHsgb2JqLnggPSB2YWx1ZTsgfSB9IH0sIG51bGwsIF9pbnN0YW5jZUV4dHJhSW5pdGlhbGl6ZXJzKTsNCiAgICAgICAgICAgIF9fZXNEZWNvcmF0ZSh0aGlzLCBudWxsLCBfel9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ6Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IG9iaiA9PiAieiIgaW4gb2JqLCBnZXQ6IG9iaiA9PiBvYmoueiwgc2V0OiAob2JqLCB2YWx1ZSkgPT4geyBvYmoueiA9IHZhbHVlOyB9IH0gfSwgX3pfaW5pdGlhbGl6ZXJzLCBfaW5zdGFuY2VFeHRyYUluaXRpYWxpemVycyk7DQogICAgICAgICAgICBfX2VzRGVjb3JhdGUobnVsbCwgbnVsbCwgX3N0YXRpY19wcml2YXRlX3lfZGVjb3JhdG9ycywgeyBraW5kOiAiZmllbGQiLCBuYW1lOiAiI3kiLCBzdGF0aWM6IHRydWUsIHByaXZhdGU6IHRydWUsIGFjY2VzczogeyBoYXM6IG9iaiA9PiBfX2NsYXNzUHJpdmF0ZUZpZWxkSW4oX2NsYXNzVGhpcywgb2JqKSwgZ2V0OiBvYmogPT4gX19jbGFzc1ByaXZhdGVGaWVsZEdldChvYmosIF9jbGFzc1RoaXMsICJmIiwgX3kpLCBzZXQ6IChvYmosIHZhbHVlKSA9PiB7IF9fY2xhc3NQcml2YXRlRmllbGRTZXQob2JqLCBfY2xhc3NUaGlzLCB2YWx1ZSwgImYiLCBfeSk7IH0gfSB9LCBfc3RhdGljX3ByaXZhdGVfeV9pbml0aWFsaXplcnMsIF9zdGF0aWNFeHRyYUluaXRpYWxpemVycyk7DQogICAgICAgICAgICBfX2VzRGVjb3JhdGUobnVsbCwgbnVsbCwgX3lfZGVjb3JhdG9ycywgeyBraW5kOiAiZmllbGQiLCBuYW1lOiAieSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiBvYmogPT4gInkiIGluIG9iaiwgZ2V0OiBvYmogPT4gb2JqLnksIHNldDogKG9iaiwgdmFsdWUpID0+IHsgb2JqLnkgPSB2YWx1ZTsgfSB9IH0sIF95X2luaXRpYWxpemVycywgX2luc3RhbmNlRXh0cmFJbml0aWFsaXplcnMpOw0KICAgICAgICAgICAgX19lc0RlY29yYXRlKG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiB0aGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogdGhpcy5uYW1lIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsNCiAgICAgICAgICAgIEMgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsNCiAgICAgICAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzKF9jbGFzc1RoaXMsIF9zdGF0aWNFeHRyYUluaXRpYWxpemVycyk7DQogICAgICAgIH0NCiAgICAgICAgbWV0aG9kKCkgeyB9DQogICAgICAgIGdldCB4KCkgeyByZXR1cm4gMTsgfQ0KICAgICAgICBzZXQgeCh2YWx1ZSkgeyB9DQogICAgICAgIHkgPSAoX19ydW5Jbml0aWFsaXplcnModGhpcywgX2luc3RhbmNlRXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVycyh0aGlzLCBfeV9pbml0aWFsaXplcnMsIDEpKTsNCiAgICAgICAgI3pfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzKHRoaXMsIF96X2luaXRpYWxpemVycywgMSk7DQogICAgICAgIGdldCB6KCkgeyByZXR1cm4gdGhpcy4jel9hY2Nlc3Nvcl9zdG9yYWdlOyB9DQogICAgICAgIHNldCB6KHZhbHVlKSB7IHRoaXMuI3pfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlOyB9DQogICAgICAgIHN0YXRpYyB7DQogICAgICAgICAgICBfeSA9IHsgdmFsdWU6IF9fcnVuSW5pdGlhbGl6ZXJzKF9jbGFzc1RoaXMsIF9zdGF0aWNfcHJpdmF0ZV95X2luaXRpYWxpemVycywgMSkgfTsNCiAgICAgICAgfQ0KICAgICAgICBzdGF0aWMgew0KICAgICAgICAgICAgX3pfYWNjZXNzb3Jfc3RvcmFnZSA9IHsgdmFsdWU6IF9fcnVuSW5pdGlhbGl6ZXJzKF9jbGFzc1RoaXMsIF9zdGF0aWNfcHJpdmF0ZV96X2luaXRpYWxpemVycywgMSkgfTsNCiAgICAgICAgfQ0KICAgICAgICBzdGF0aWMgew0KICAgICAgICAgICAgX19ydW5Jbml0aWFsaXplcnMoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOw0KICAgICAgICB9DQogICAgfTsNCiAgICByZXR1cm4gQyA9IF9jbGFzc1RoaXM7DQp9KSgpOw0KLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZXNEZWNvcmF0b3JzLWNsYXNzRGVjbGFyYXRpb24tc291cmNlTWFwLmpzLm1hcA==,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNEZWNvcmF0b3JzLWNsYXNzRGVjbGFyYXRpb24tc291cmNlTWFwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZXNEZWNvcmF0b3JzLWNsYXNzRGVjbGFyYXRpb24tc291cmNlTWFwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBSU0sQ0FBQzs7NEJBRk4sR0FBRyxFQUNILEdBQUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7a0NBRUMsR0FBRyxFQUNILEdBQUc7aUNBR0gsR0FBRyxFQUNILEdBQUc7aUNBR0gsR0FBRyxFQUNILEdBQUc7NkJBR0gsR0FBRyxFQUNILEdBQUc7NkJBR0gsR0FBRyxFQUNILEdBQUc7aURBR0gsR0FBRyxFQUNILEdBQUc7Z0RBR0gsR0FBRyxFQUNILEdBQUc7Z0RBR0gsR0FBRyxFQUNILEdBQUc7NENBR0gsR0FBRyxFQUNILEdBQUc7NENBR0gsR0FBRyxFQUNILEdBQUc7WUFmSix5REFBQSx5QkFBQSxjQUFrQixDQUFDLFlBQUEsZ1JBQUE7WUFJbkIsd0RBQUEsdUJBQUEsY0FBa0IsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQUEscVFBQUE7WUFJN0Isd0RBQUEsdUJBQUEsVUFBYyxLQUFhLElBQUksQ0FBQyxjQUFBLDBSQUFBO1lBUWhDLG9EQUFBLHVCQUFBLDBGQUF1QixjQUFBLEVBQXZCLHVCQUFBLCtGQUF1QixjQUFBLG9YQUFBO1lBcEN2QixxS0FBQSxNQUFNLHdDQUFLO1lBSVgsMEpBQUksQ0FBQyx3Q0FBZ0I7WUFJckIscUtBQUksQ0FBQyxtREFBbUI7WUFReEIsd0pBQVMsQ0FBQyw2QkFBRCxDQUFDLDhEQUFLO1lBZ0JmLDhYQUFjO1lBcEJkLHFKQUFBLENBQUMsNkJBQUQsQ0FBQyw4REFBSztZQWZWLDRJQXdDQzs7WUF4Q0ssd0RBQUM7O1FBR0gsTUFBTSxLQUFJLENBQUM7UUFJWCxJQUFJLENBQUMsS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFJckIsSUFBSSxDQUFDLENBQUMsS0FBYSxJQUFJLENBQUM7UUFJeEIsQ0FBQyxrR0FBRyxDQUFDLEdBQUM7UUFJTiwrREFBYSxDQUFDLEVBQUM7UUFBZixJQUFTLENBQUMsdUNBQUs7UUFBZixJQUFTLENBQUMsNkNBQUs7O1lBZ0JSLDRFQUFLLENBQUMsR0FBSixDQUFLOzs7WUFJRSw2RkFBSyxDQUFDLEdBQUosQ0FBSzs7O1lBdkNyQix1REFBQyJ9,ZGVjbGFyZSB2YXIgZGVjOiBhbnk7CgpAZGVjCkBkZWMKY2xhc3MgQyB7CiAgICBAZGVjCiAgICBAZGVjCiAgICBtZXRob2QoKSB7fQoKICAgIEBkZWMKICAgIEBkZWMKICAgIGdldCB4KCkgeyByZXR1cm4gMTsgfQoKICAgIEBkZWMKICAgIEBkZWMKICAgIHNldCB4KHZhbHVlOiBudW1iZXIpIHsgfQoKICAgIEBkZWMKICAgIEBkZWMKICAgIHkgPSAxOwoKICAgIEBkZWMKICAgIEBkZWMKICAgIGFjY2Vzc29yIHogPSAxOwoKICAgIEBkZWMKICAgIEBkZWMKICAgIHN0YXRpYyAjbWV0aG9kKCkge30KCiAgICBAZGVjCiAgICBAZGVjCiAgICBzdGF0aWMgZ2V0ICN4KCkgeyByZXR1cm4gMTsgfQoKICAgIEBkZWMKICAgIEBkZWMKICAgIHN0YXRpYyBzZXQgI3godmFsdWU6IG51bWJlcikgeyB9CgogICAgQGRlYwogICAgQGRlYwogICAgc3RhdGljICN5ID0gMTsKCiAgICBAZGVjCiAgICBAZGVjCiAgICBzdGF0aWMgYWNjZXNzb3IgI3ogPSAxOwp9Cg== +//// https://sokra.github.io/source-map-visualization#base64,dmFyIF9fZXNEZWNvcmF0ZSA9ICh0aGlzICYmIHRoaXMuX19lc0RlY29yYXRlKSB8fCBmdW5jdGlvbiAoY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsNCiAgICBmdW5jdGlvbiBhY2NlcHQoZikgeyBpZiAoZiAhPT0gdm9pZCAwICYmIHR5cGVvZiBmICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOyByZXR1cm4gZjsgfQ0KICAgIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleSA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsNCiAgICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7DQogICAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7DQogICAgdmFyIF8sIGRvbmUgPSBmYWxzZTsNCiAgICBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgew0KICAgICAgICB2YXIgY29udGV4dCA9IHt9Ow0KICAgICAgICBmb3IgKHZhciBwIGluIGNvbnRleHRJbikgY29udGV4dFtwXSA9IHAgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcF07DQogICAgICAgIGZvciAodmFyIHAgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dC5hY2Nlc3NbcF0gPSBjb250ZXh0SW4uYWNjZXNzW3BdOw0KICAgICAgICBjb250ZXh0LmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24gKGYpIHsgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOyBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmIHx8IG51bGwpKTsgfTsNCiAgICAgICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2ldKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleV0sIGNvbnRleHQpOw0KICAgICAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgew0KICAgICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsNCiAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOw0KICAgICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzsNCiAgICAgICAgICAgIGlmIChfID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF87DQogICAgICAgICAgICBpZiAoXyA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF8pOw0KICAgICAgICB9DQogICAgICAgIGVsc2UgaWYgKF8gPSBhY2NlcHQocmVzdWx0KSkgew0KICAgICAgICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF8pOw0KICAgICAgICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleV0gPSBfOw0KICAgICAgICB9DQogICAgfQ0KICAgIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsNCiAgICBkb25lID0gdHJ1ZTsNCn07DQp2YXIgX19ydW5Jbml0aWFsaXplcnMgPSAodGhpcyAmJiB0aGlzLl9fcnVuSW5pdGlhbGl6ZXJzKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZSkgew0KICAgIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOw0KICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaSsrKSB7DQogICAgICAgIHZhbHVlID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaV0uY2FsbCh0aGlzQXJnLCB2YWx1ZSkgOiBpbml0aWFsaXplcnNbaV0uY2FsbCh0aGlzQXJnKTsNCiAgICB9DQogICAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUgOiB2b2lkIDA7DQp9Ow0KdmFyIF9fc2V0RnVuY3Rpb25OYW1lID0gKHRoaXMgJiYgdGhpcy5fX3NldEZ1bmN0aW9uTmFtZSkgfHwgZnVuY3Rpb24gKGYsIG5hbWUsIHByZWZpeCkgew0KICAgIGlmICh0eXBlb2YgbmFtZSA9PT0gInN5bWJvbCIpIG5hbWUgPSBuYW1lLmRlc2NyaXB0aW9uID8gIlsiLmNvbmNhdChuYW1lLmRlc2NyaXB0aW9uLCAiXSIpIDogIiI7DQogICAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmLCAibmFtZSIsIHsgY29uZmlndXJhYmxlOiB0cnVlLCB2YWx1ZTogcHJlZml4ID8gIiIuY29uY2F0KHByZWZpeCwgIiAiLCBuYW1lKSA6IG5hbWUgfSk7DQp9Ow0KdmFyIF9fY2xhc3NQcml2YXRlRmllbGRJbiA9ICh0aGlzICYmIHRoaXMuX19jbGFzc1ByaXZhdGVGaWVsZEluKSB8fCBmdW5jdGlvbihzdGF0ZSwgcmVjZWl2ZXIpIHsNCiAgICBpZiAocmVjZWl2ZXIgPT09IG51bGwgfHwgKHR5cGVvZiByZWNlaXZlciAhPT0gIm9iamVjdCIgJiYgdHlwZW9mIHJlY2VpdmVyICE9PSAiZnVuY3Rpb24iKSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IHVzZSAnaW4nIG9wZXJhdG9yIG9uIG5vbi1vYmplY3QiKTsNCiAgICByZXR1cm4gdHlwZW9mIHN0YXRlID09PSAiZnVuY3Rpb24iID8gcmVjZWl2ZXIgPT09IHN0YXRlIDogc3RhdGUuaGFzKHJlY2VpdmVyKTsNCn07DQp2YXIgX19jbGFzc1ByaXZhdGVGaWVsZEdldCA9ICh0aGlzICYmIHRoaXMuX19jbGFzc1ByaXZhdGVGaWVsZEdldCkgfHwgZnVuY3Rpb24gKHJlY2VpdmVyLCBzdGF0ZSwga2luZCwgZikgew0KICAgIGlmIChraW5kID09PSAiYSIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIGdldHRlciIpOw0KICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09ICJmdW5jdGlvbiIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IHJlYWQgcHJpdmF0ZSBtZW1iZXIgZnJvbSBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0Iik7DQogICAgcmV0dXJuIGtpbmQgPT09ICJtIiA/IGYgOiBraW5kID09PSAiYSIgPyBmLmNhbGwocmVjZWl2ZXIpIDogZiA/IGYudmFsdWUgOiBzdGF0ZS5nZXQocmVjZWl2ZXIpOw0KfTsNCnZhciBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0ID0gKHRoaXMgJiYgdGhpcy5fX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KSB8fCBmdW5jdGlvbiAocmVjZWl2ZXIsIHN0YXRlLCB2YWx1ZSwga2luZCwgZikgew0KICAgIGlmIChraW5kID09PSAibSIpIHRocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgbWV0aG9kIGlzIG5vdCB3cml0YWJsZSIpOw0KICAgIGlmIChraW5kID09PSAiYSIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIHNldHRlciIpOw0KICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09ICJmdW5jdGlvbiIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IHdyaXRlIHByaXZhdGUgbWVtYmVyIHRvIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXQiKTsNCiAgICByZXR1cm4gKGtpbmQgPT09ICJhIiA/IGYuY2FsbChyZWNlaXZlciwgdmFsdWUpIDogZiA/IGYudmFsdWUgPSB2YWx1ZSA6IHN0YXRlLnNldChyZWNlaXZlciwgdmFsdWUpKSwgdmFsdWU7DQp9Ow0KbGV0IEMgPSAoKCkgPT4gew0KICAgIHZhciBfbWV0aG9kX2dldCwgX3hfZ2V0LCBfeF9zZXQsIF95LCBfel9hY2Nlc3Nvcl9zdG9yYWdlLCBfel9nZXQsIF96X3NldDsNCiAgICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFtkZWMsIGRlY107DQogICAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7DQogICAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107DQogICAgbGV0IF9jbGFzc1RoaXM7DQogICAgbGV0IF9zdGF0aWNFeHRyYUluaXRpYWxpemVycyA9IFtdOw0KICAgIGxldCBfaW5zdGFuY2VFeHRyYUluaXRpYWxpemVycyA9IFtdOw0KICAgIGxldCBfc3RhdGljX3ByaXZhdGVfbWV0aG9kX2RlY29yYXRvcnM7DQogICAgbGV0IF9zdGF0aWNfcHJpdmF0ZV9tZXRob2RfZGVzY3JpcHRvcjsNCiAgICBsZXQgX3N0YXRpY19wcml2YXRlX2dldF94X2RlY29yYXRvcnM7DQogICAgbGV0IF9zdGF0aWNfcHJpdmF0ZV9nZXRfeF9kZXNjcmlwdG9yOw0KICAgIGxldCBfc3RhdGljX3ByaXZhdGVfc2V0X3hfZGVjb3JhdG9yczsNCiAgICBsZXQgX3N0YXRpY19wcml2YXRlX3NldF94X2Rlc2NyaXB0b3I7DQogICAgbGV0IF9zdGF0aWNfcHJpdmF0ZV95X2RlY29yYXRvcnM7DQogICAgbGV0IF9zdGF0aWNfcHJpdmF0ZV95X2luaXRpYWxpemVycyA9IFtdOw0KICAgIGxldCBfc3RhdGljX3ByaXZhdGVfel9kZWNvcmF0b3JzOw0KICAgIGxldCBfc3RhdGljX3ByaXZhdGVfel9pbml0aWFsaXplcnMgPSBbXTsNCiAgICBsZXQgX3N0YXRpY19wcml2YXRlX3pfZGVzY3JpcHRvcjsNCiAgICBsZXQgX21ldGhvZF9kZWNvcmF0b3JzOw0KICAgIGxldCBfZ2V0X3hfZGVjb3JhdG9yczsNCiAgICBsZXQgX3NldF94X2RlY29yYXRvcnM7DQogICAgbGV0IF95X2RlY29yYXRvcnM7DQogICAgbGV0IF95X2luaXRpYWxpemVycyA9IFtdOw0KICAgIGxldCBfel9kZWNvcmF0b3JzOw0KICAgIGxldCBfel9pbml0aWFsaXplcnMgPSBbXTsNCiAgICB2YXIgQyA9IGNsYXNzIHsNCiAgICAgICAgc3RhdGljIHsgX19zZXRGdW5jdGlvbk5hbWUodGhpcywgIkMiKTsgfQ0KICAgICAgICBzdGF0aWMgeyBfbWV0aG9kX2dldCA9IGZ1bmN0aW9uIF9tZXRob2RfZ2V0KCkgeyByZXR1cm4gX3N0YXRpY19wcml2YXRlX21ldGhvZF9kZXNjcmlwdG9yLnZhbHVlOyB9LCBfeF9nZXQgPSBmdW5jdGlvbiBfeF9nZXQoKSB7IHJldHVybiBfc3RhdGljX3ByaXZhdGVfZ2V0X3hfZGVzY3JpcHRvci5nZXQuY2FsbCh0aGlzKTsgfSwgX3hfc2V0ID0gZnVuY3Rpb24gX3hfc2V0KHZhbHVlKSB7IHJldHVybiBfc3RhdGljX3ByaXZhdGVfc2V0X3hfZGVzY3JpcHRvci5zZXQuY2FsbCh0aGlzLCB2YWx1ZSk7IH0sIF96X2dldCA9IGZ1bmN0aW9uIF96X2dldCgpIHsgcmV0dXJuIF9zdGF0aWNfcHJpdmF0ZV96X2Rlc2NyaXB0b3IuZ2V0LmNhbGwodGhpcyk7IH0sIF96X3NldCA9IGZ1bmN0aW9uIF96X3NldCh2YWx1ZSkgeyByZXR1cm4gX3N0YXRpY19wcml2YXRlX3pfZGVzY3JpcHRvci5zZXQuY2FsbCh0aGlzLCB2YWx1ZSk7IH07IH0NCiAgICAgICAgc3RhdGljIHsNCiAgICAgICAgICAgIF9tZXRob2RfZGVjb3JhdG9ycyA9IFtkZWMsIGRlY107DQogICAgICAgICAgICBfZ2V0X3hfZGVjb3JhdG9ycyA9IFtkZWMsIGRlY107DQogICAgICAgICAgICBfc2V0X3hfZGVjb3JhdG9ycyA9IFtkZWMsIGRlY107DQogICAgICAgICAgICBfeV9kZWNvcmF0b3JzID0gW2RlYywgZGVjXTsNCiAgICAgICAgICAgIF96X2RlY29yYXRvcnMgPSBbZGVjLCBkZWNdOw0KICAgICAgICAgICAgX3N0YXRpY19wcml2YXRlX21ldGhvZF9kZWNvcmF0b3JzID0gW2RlYywgZGVjXTsNCiAgICAgICAgICAgIF9zdGF0aWNfcHJpdmF0ZV9nZXRfeF9kZWNvcmF0b3JzID0gW2RlYywgZGVjXTsNCiAgICAgICAgICAgIF9zdGF0aWNfcHJpdmF0ZV9zZXRfeF9kZWNvcmF0b3JzID0gW2RlYywgZGVjXTsNCiAgICAgICAgICAgIF9zdGF0aWNfcHJpdmF0ZV95X2RlY29yYXRvcnMgPSBbZGVjLCBkZWNdOw0KICAgICAgICAgICAgX3N0YXRpY19wcml2YXRlX3pfZGVjb3JhdG9ycyA9IFtkZWMsIGRlY107DQogICAgICAgICAgICBfX2VzRGVjb3JhdGUodGhpcywgX3N0YXRpY19wcml2YXRlX21ldGhvZF9kZXNjcmlwdG9yID0geyB2YWx1ZTogX19zZXRGdW5jdGlvbk5hbWUoZnVuY3Rpb24gKCkgeyB9LCAiI21ldGhvZCIpIH0sIF9zdGF0aWNfcHJpdmF0ZV9tZXRob2RfZGVjb3JhdG9ycywgeyBraW5kOiAibWV0aG9kIiwgbmFtZTogIiNtZXRob2QiLCBzdGF0aWM6IHRydWUsIHByaXZhdGU6IHRydWUsIGFjY2VzczogeyBoYXM6IG9iaiA9PiBfX2NsYXNzUHJpdmF0ZUZpZWxkSW4oX2NsYXNzVGhpcywgb2JqKSwgZ2V0OiBvYmogPT4gX19jbGFzc1ByaXZhdGVGaWVsZEdldChvYmosIF9jbGFzc1RoaXMsICJhIiwgX21ldGhvZF9nZXQpIH0gfSwgbnVsbCwgX3N0YXRpY0V4dHJhSW5pdGlhbGl6ZXJzKTsNCiAgICAgICAgICAgIF9fZXNEZWNvcmF0ZSh0aGlzLCBfc3RhdGljX3ByaXZhdGVfZ2V0X3hfZGVzY3JpcHRvciA9IHsgZ2V0OiBfX3NldEZ1bmN0aW9uTmFtZShmdW5jdGlvbiAoKSB7IHJldHVybiAxOyB9LCAiI3giLCAiZ2V0IikgfSwgX3N0YXRpY19wcml2YXRlX2dldF94X2RlY29yYXRvcnMsIHsga2luZDogImdldHRlciIsIG5hbWU6ICIjeCIsIHN0YXRpYzogdHJ1ZSwgcHJpdmF0ZTogdHJ1ZSwgYWNjZXNzOiB7IGhhczogb2JqID0+IF9fY2xhc3NQcml2YXRlRmllbGRJbihfY2xhc3NUaGlzLCBvYmopLCBnZXQ6IG9iaiA9PiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KG9iaiwgX2NsYXNzVGhpcywgImEiLCBfeF9nZXQpIH0gfSwgbnVsbCwgX3N0YXRpY0V4dHJhSW5pdGlhbGl6ZXJzKTsNCiAgICAgICAgICAgIF9fZXNEZWNvcmF0ZSh0aGlzLCBfc3RhdGljX3ByaXZhdGVfc2V0X3hfZGVzY3JpcHRvciA9IHsgc2V0OiBfX3NldEZ1bmN0aW9uTmFtZShmdW5jdGlvbiAodmFsdWUpIHsgfSwgIiN4IiwgInNldCIpIH0sIF9zdGF0aWNfcHJpdmF0ZV9zZXRfeF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJzZXR0ZXIiLCBuYW1lOiAiI3giLCBzdGF0aWM6IHRydWUsIHByaXZhdGU6IHRydWUsIGFjY2VzczogeyBoYXM6IG9iaiA9PiBfX2NsYXNzUHJpdmF0ZUZpZWxkSW4oX2NsYXNzVGhpcywgb2JqKSwgc2V0OiAob2JqLCB2YWx1ZSkgPT4geyBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KG9iaiwgX2NsYXNzVGhpcywgdmFsdWUsICJhIiwgX3hfc2V0KTsgfSB9IH0sIG51bGwsIF9zdGF0aWNFeHRyYUluaXRpYWxpemVycyk7DQogICAgICAgICAgICBfX2VzRGVjb3JhdGUodGhpcywgX3N0YXRpY19wcml2YXRlX3pfZGVzY3JpcHRvciA9IHsgZ2V0OiBfX3NldEZ1bmN0aW9uTmFtZShmdW5jdGlvbiAoKSB7IHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9jbGFzc1RoaXMsICJmIiwgX3pfYWNjZXNzb3Jfc3RvcmFnZSk7IH0sICIjeiIsICJnZXQiKSwgc2V0OiBfX3NldEZ1bmN0aW9uTmFtZShmdW5jdGlvbiAodmFsdWUpIHsgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfY2xhc3NUaGlzLCB2YWx1ZSwgImYiLCBfel9hY2Nlc3Nvcl9zdG9yYWdlKTsgfSwgIiN6IiwgInNldCIpIH0sIF9zdGF0aWNfcHJpdmF0ZV96X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIiN6Iiwgc3RhdGljOiB0cnVlLCBwcml2YXRlOiB0cnVlLCBhY2Nlc3M6IHsgaGFzOiBvYmogPT4gX19jbGFzc1ByaXZhdGVGaWVsZEluKF9jbGFzc1RoaXMsIG9iaiksIGdldDogb2JqID0+IF9fY2xhc3NQcml2YXRlRmllbGRHZXQob2JqLCBfY2xhc3NUaGlzLCAiYSIsIF96X2dldCksIHNldDogKG9iaiwgdmFsdWUpID0+IHsgX19jbGFzc1ByaXZhdGVGaWVsZFNldChvYmosIF9jbGFzc1RoaXMsIHZhbHVlLCAiYSIsIF96X3NldCk7IH0gfSB9LCBfc3RhdGljX3ByaXZhdGVfel9pbml0aWFsaXplcnMsIF9zdGF0aWNFeHRyYUluaXRpYWxpemVycyk7DQogICAgICAgICAgICBfX2VzRGVjb3JhdGUodGhpcywgbnVsbCwgX21ldGhvZF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJtZXRob2QiLCBuYW1lOiAibWV0aG9kIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IG9iaiA9PiAibWV0aG9kIiBpbiBvYmosIGdldDogb2JqID0+IG9iai5tZXRob2QgfSB9LCBudWxsLCBfaW5zdGFuY2VFeHRyYUluaXRpYWxpemVycyk7DQogICAgICAgICAgICBfX2VzRGVjb3JhdGUodGhpcywgbnVsbCwgX2dldF94X2RlY29yYXRvcnMsIHsga2luZDogImdldHRlciIsIG5hbWU6ICJ4Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IG9iaiA9PiAieCIgaW4gb2JqLCBnZXQ6IG9iaiA9PiBvYmoueCB9IH0sIG51bGwsIF9pbnN0YW5jZUV4dHJhSW5pdGlhbGl6ZXJzKTsNCiAgICAgICAgICAgIF9fZXNEZWNvcmF0ZSh0aGlzLCBudWxsLCBfc2V0X3hfZGVjb3JhdG9ycywgeyBraW5kOiAic2V0dGVyIiwgbmFtZTogIngiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogb2JqID0+ICJ4IiBpbiBvYmosIHNldDogKG9iaiwgdmFsdWUpID0+IHsgb2JqLnggPSB2YWx1ZTsgfSB9IH0sIG51bGwsIF9pbnN0YW5jZUV4dHJhSW5pdGlhbGl6ZXJzKTsNCiAgICAgICAgICAgIF9fZXNEZWNvcmF0ZSh0aGlzLCBudWxsLCBfel9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ6Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IG9iaiA9PiAieiIgaW4gb2JqLCBnZXQ6IG9iaiA9PiBvYmoueiwgc2V0OiAob2JqLCB2YWx1ZSkgPT4geyBvYmoueiA9IHZhbHVlOyB9IH0gfSwgX3pfaW5pdGlhbGl6ZXJzLCBfaW5zdGFuY2VFeHRyYUluaXRpYWxpemVycyk7DQogICAgICAgICAgICBfX2VzRGVjb3JhdGUobnVsbCwgbnVsbCwgX3N0YXRpY19wcml2YXRlX3lfZGVjb3JhdG9ycywgeyBraW5kOiAiZmllbGQiLCBuYW1lOiAiI3kiLCBzdGF0aWM6IHRydWUsIHByaXZhdGU6IHRydWUsIGFjY2VzczogeyBoYXM6IG9iaiA9PiBfX2NsYXNzUHJpdmF0ZUZpZWxkSW4oX2NsYXNzVGhpcywgb2JqKSwgZ2V0OiBvYmogPT4gX19jbGFzc1ByaXZhdGVGaWVsZEdldChvYmosIF9jbGFzc1RoaXMsICJmIiwgX3kpLCBzZXQ6IChvYmosIHZhbHVlKSA9PiB7IF9fY2xhc3NQcml2YXRlRmllbGRTZXQob2JqLCBfY2xhc3NUaGlzLCB2YWx1ZSwgImYiLCBfeSk7IH0gfSB9LCBfc3RhdGljX3ByaXZhdGVfeV9pbml0aWFsaXplcnMsIF9zdGF0aWNFeHRyYUluaXRpYWxpemVycyk7DQogICAgICAgICAgICBfX2VzRGVjb3JhdGUobnVsbCwgbnVsbCwgX3lfZGVjb3JhdG9ycywgeyBraW5kOiAiZmllbGQiLCBuYW1lOiAieSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiBvYmogPT4gInkiIGluIG9iaiwgZ2V0OiBvYmogPT4gb2JqLnksIHNldDogKG9iaiwgdmFsdWUpID0+IHsgb2JqLnkgPSB2YWx1ZTsgfSB9IH0sIF95X2luaXRpYWxpemVycywgX2luc3RhbmNlRXh0cmFJbml0aWFsaXplcnMpOw0KICAgICAgICAgICAgX19lc0RlY29yYXRlKG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiB0aGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogdGhpcy5uYW1lIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsNCiAgICAgICAgICAgIEMgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsNCiAgICAgICAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzKF9jbGFzc1RoaXMsIF9zdGF0aWNFeHRyYUluaXRpYWxpemVycyk7DQogICAgICAgIH0NCiAgICAgICAgbWV0aG9kKCkgeyB9DQogICAgICAgIGdldCB4KCkgeyByZXR1cm4gMTsgfQ0KICAgICAgICBzZXQgeCh2YWx1ZSkgeyB9DQogICAgICAgIHkgPSAoX19ydW5Jbml0aWFsaXplcnModGhpcywgX2luc3RhbmNlRXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVycyh0aGlzLCBfeV9pbml0aWFsaXplcnMsIDEpKTsNCiAgICAgICAgI3pfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzKHRoaXMsIF96X2luaXRpYWxpemVycywgMSk7DQogICAgICAgIGdldCB6KCkgeyByZXR1cm4gdGhpcy4jel9hY2Nlc3Nvcl9zdG9yYWdlOyB9DQogICAgICAgIHNldCB6KHZhbHVlKSB7IHRoaXMuI3pfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlOyB9DQogICAgICAgIHN0YXRpYyB7DQogICAgICAgICAgICBfeSA9IHsgdmFsdWU6IF9fcnVuSW5pdGlhbGl6ZXJzKF9jbGFzc1RoaXMsIF9zdGF0aWNfcHJpdmF0ZV95X2luaXRpYWxpemVycywgMSkgfTsNCiAgICAgICAgfQ0KICAgICAgICBzdGF0aWMgew0KICAgICAgICAgICAgX3pfYWNjZXNzb3Jfc3RvcmFnZSA9IHsgdmFsdWU6IF9fcnVuSW5pdGlhbGl6ZXJzKF9jbGFzc1RoaXMsIF9zdGF0aWNfcHJpdmF0ZV96X2luaXRpYWxpemVycywgMSkgfTsNCiAgICAgICAgfQ0KICAgICAgICBzdGF0aWMgew0KICAgICAgICAgICAgX19ydW5Jbml0aWFsaXplcnMoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOw0KICAgICAgICB9DQogICAgfTsNCiAgICByZXR1cm4gQyA9IF9jbGFzc1RoaXM7DQp9KSgpOw0KLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZXNEZWNvcmF0b3JzLWNsYXNzRGVjbGFyYXRpb24tc291cmNlTWFwLmpzLm1hcA==,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNEZWNvcmF0b3JzLWNsYXNzRGVjbGFyYXRpb24tc291cmNlTWFwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZXNEZWNvcmF0b3JzLWNsYXNzRGVjbGFyYXRpb24tc291cmNlTWFwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBSU0sQ0FBQzs7NEJBRk4sR0FBRyxFQUNILEdBQUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7a0NBRUMsR0FBRyxFQUNILEdBQUc7aUNBR0gsR0FBRyxFQUNILEdBQUc7aUNBR0gsR0FBRyxFQUNILEdBQUc7NkJBR0gsR0FBRyxFQUNILEdBQUc7NkJBR0gsR0FBRyxFQUNILEdBQUc7aURBR0gsR0FBRyxFQUNILEdBQUc7Z0RBR0gsR0FBRyxFQUNILEdBQUc7Z0RBR0gsR0FBRyxFQUNILEdBQUc7NENBR0gsR0FBRyxFQUNILEdBQUc7NENBR0gsR0FBRyxFQUNILEdBQUc7WUFmSix5REFBQSx5QkFBQSxjQUFrQixDQUFDLFlBQUEsZ1JBQUE7WUFJbkIsd0RBQUEsdUJBQUEsY0FBa0IsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQUEscVFBQUE7WUFJN0Isd0RBQUEsdUJBQUEsVUFBYyxLQUFhLElBQUksQ0FBQyxjQUFBLDBSQUFBO1lBUWhDLG9EQUFBLHVCQUFBLDBGQUF1QixjQUFBLEVBQXZCLHVCQUFBLCtGQUF1QixjQUFBLG9YQUFBO1lBcEN2QixxS0FBQSxNQUFNLHdDQUFLO1lBSVgsMEpBQUksQ0FBQyx3Q0FBZ0I7WUFJckIscUtBQUksQ0FBQyxtREFBbUI7WUFReEIsd0pBQVMsQ0FBQyw2QkFBRCxDQUFDLDhEQUFLO1lBZ0JmLDhYQUFjO1lBcEJkLHFKQUFBLENBQUMsNkJBQUQsQ0FBQyw4REFBSztZQWZWLDRJQXdDQzs7WUF4Q0ssd0RBQUM7O1FBR0gsTUFBTSxLQUFJLENBQUM7UUFJWCxJQUFJLENBQUMsS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFJckIsSUFBSSxDQUFDLENBQUMsS0FBYSxJQUFJLENBQUM7UUFJeEIsQ0FBQyxrR0FBRyxDQUFDLEdBQUM7UUFJTiwrREFBYSxDQUFDLEVBQUM7UUFBZixJQUFTLENBQUMsdUNBQUs7UUFBZixJQUFTLENBQUMsNkNBQUs7O1lBZ0JSLDRFQUFLLENBQUMsR0FBSixDQUFLOzs7WUFJRSw2RkFBSyxDQUFDLEdBQUosQ0FBSzs7O1lBdkNyQix1REFBQyJ9,ZGVjbGFyZSB2YXIgZGVjOiBhbnk7CgpAZGVjCkBkZWMKY2xhc3MgQyB7CiAgICBAZGVjCiAgICBAZGVjCiAgICBtZXRob2QoKSB7fQoKICAgIEBkZWMKICAgIEBkZWMKICAgIGdldCB4KCkgeyByZXR1cm4gMTsgfQoKICAgIEBkZWMKICAgIEBkZWMKICAgIHNldCB4KHZhbHVlOiBudW1iZXIpIHsgfQoKICAgIEBkZWMKICAgIEBkZWMKICAgIHkgPSAxOwoKICAgIEBkZWMKICAgIEBkZWMKICAgIGFjY2Vzc29yIHogPSAxOwoKICAgIEBkZWMKICAgIEBkZWMKICAgIHN0YXRpYyAjbWV0aG9kKCkge30KCiAgICBAZGVjCiAgICBAZGVjCiAgICBzdGF0aWMgZ2V0ICN4KCkgeyByZXR1cm4gMTsgfQoKICAgIEBkZWMKICAgIEBkZWMKICAgIHN0YXRpYyBzZXQgI3godmFsdWU6IG51bWJlcikgeyB9CgogICAgQGRlYwogICAgQGRlYwogICAgc3RhdGljICN5ID0gMTsKCiAgICBAZGVjCiAgICBAZGVjCiAgICBzdGF0aWMgYWNjZXNzb3IgI3ogPSAxOwp9Cg== //// [esDecorators-classDeclaration-sourceMap.d.ts.map] {"version":3,"file":"esDecorators-classDeclaration-sourceMap.d.ts","sourceRoot":"","sources":["esDecorators-classDeclaration-sourceMap.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,IAAI,GAAG,EAAE,GAAG,CAAC;AAErB,cAEM,CAAC;;IAGH,MAAM;IAEN,IAEI,CAAC,IAIQ,MAAM,CAJE;IAErB,IAEI,CAAC,CAAC,KAAK,EAAE,MAAM,EAAK;IAIxB,CAAC,SAAK;IAIN,QAAQ,CAAC,CAAC,SAAK;CAqBlB"} diff --git a/tests/baselines/reference/esDecorators-classDeclaration-sourceMap(target=es2022).sourcemap.txt b/tests/baselines/reference/esDecorators-classDeclaration-sourceMap(target=es2022).sourcemap.txt index ce13b1e7883e6..0e5d5e8f83245 100644 --- a/tests/baselines/reference/esDecorators-classDeclaration-sourceMap(target=es2022).sourcemap.txt +++ b/tests/baselines/reference/esDecorators-classDeclaration-sourceMap(target=es2022).sourcemap.txt @@ -25,10 +25,10 @@ sourceFile:esDecorators-classDeclaration-sourceMap.ts >>> if (result === null || typeof result !== "object") throw new TypeError("Object expected"); >>> if (_ = accept(result.get)) descriptor.get = _; >>> if (_ = accept(result.set)) descriptor.set = _; ->>> if (_ = accept(result.init)) initializers.push(_); +>>> if (_ = accept(result.init)) initializers.unshift(_); >>> } >>> else if (_ = accept(result)) { ->>> if (kind === "field") initializers.push(_); +>>> if (kind === "field") initializers.unshift(_); >>> else descriptor[key] = _; >>> } >>> } diff --git a/tests/baselines/reference/tscWatch/programUpdates/updates-diagnostics-and-emit-for-decorators.js b/tests/baselines/reference/tscWatch/programUpdates/updates-diagnostics-and-emit-for-decorators.js index 187d21dab4321..ed2e7fe25f368 100644 --- a/tests/baselines/reference/tscWatch/programUpdates/updates-diagnostics-and-emit-for-decorators.js +++ b/tests/baselines/reference/tscWatch/programUpdates/updates-diagnostics-and-emit-for-decorators.js @@ -96,10 +96,10 @@ var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, if (result === null || typeof result !== "object") throw new TypeError("Object expected"); if (_ = accept(result.get)) descriptor.get = _; if (_ = accept(result.set)) descriptor.set = _; - if (_ = accept(result.init)) initializers.push(_); + if (_ = accept(result.init)) initializers.unshift(_); } else if (_ = accept(result)) { - if (kind === "field") initializers.push(_); + if (kind === "field") initializers.unshift(_); else descriptor[key] = _; } }