@witnet/sdk 1.0.12 → 1.0.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/package.json +1 -2
- package/dist/src/lib/crypto/payloads.d.ts.map +1 -1
- package/dist/src/lib/crypto/payloads.js +10 -4
- package/dist/src/lib/crypto/transmitters.d.ts.map +1 -1
- package/dist/src/lib/crypto/transmitters.js +4 -3
- package/dist/src/lib/rpc/provider.d.ts +8 -2
- package/dist/src/lib/rpc/provider.d.ts.map +1 -1
- package/dist/src/lib/rpc/provider.js +10 -17
- package/dist/src/lib/utils.d.ts +1 -1
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +3 -2
- package/package.json +1 -2
- package/src/bin/cli/inspect.js +16 -4
- package/src/bin/cli/wallet.js +4 -4
- package/docs/inspect.png +0 -0
- package/docs/network.png +0 -0
- package/docs/nodes.png +0 -0
- package/docs/radon.png +0 -0
- package/docs/wallet.png +0 -0
package/README.md
CHANGED
|
@@ -73,7 +73,7 @@ Retrieve dynamic information from the Witnet's P2P network:
|
|
|
73
73
|
|
|
74
74
|
---
|
|
75
75
|
#### `$ npx witsdk wallet`
|
|
76
|
-
Self-
|
|
76
|
+
Self-custody local wallet for spending and staking at will your own $WIT coins:
|
|
77
77
|

|
|
78
78
|
|
|
79
79
|
---
|
package/dist/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@witnet/sdk",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.13",
|
|
4
4
|
"description": "Typescript library and CLI tooling for Web3 buidlers willing to interact with the Witnet blockchain.",
|
|
5
5
|
"author": "Witnet Foundation",
|
|
6
6
|
"license": "MIT",
|
|
@@ -12,7 +12,6 @@
|
|
|
12
12
|
},
|
|
13
13
|
"files": [
|
|
14
14
|
"dist",
|
|
15
|
-
"docs",
|
|
16
15
|
"src/bin",
|
|
17
16
|
"witnet/witnet.proto.json",
|
|
18
17
|
"witnet/assets",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"payloads.d.ts","sourceRoot":"","sources":["../../../../src/lib/crypto/payloads.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"payloads.d.ts","sourceRoot":"","sources":["../../../../src/lib/crypto/payloads.ts"],"names":[],"mappings":"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"}
|
|
@@ -81,14 +81,16 @@ class TransactionPayloadMultiSig extends TransactionPayload {
|
|
|
81
81
|
}
|
|
82
82
|
const prepared = this.prepared;
|
|
83
83
|
if (!this.covered) {
|
|
84
|
-
// console.log(ledger.constructor.name, "cacheInfo =>", ledger.pkh, ledger.cacheInfo)
|
|
85
84
|
// console.log(await ledger.getUtxos())
|
|
86
85
|
// consume utxos as to cover this.value, at least
|
|
87
86
|
const utxos = await ledger.selectUtxos({
|
|
88
87
|
value: types_1.Coins.fromPedros(this.value.pedros - this._covered),
|
|
89
88
|
reload,
|
|
90
89
|
});
|
|
90
|
+
// console.log(ledger.constructor.name, "cacheInfo =>", ledger.pkh, ledger.cacheInfo, this.value.pedros, this._covered)
|
|
91
|
+
// console.log(utxos)
|
|
91
92
|
this._covered += utxos.map(utxo => utxo.value).reduce((prev, curr) => prev + curr, 0n);
|
|
93
|
+
// console.log("initial cover =>", this._covered)
|
|
92
94
|
this._inputs.push(...utxos);
|
|
93
95
|
ledger.consumeUtxos(...utxos);
|
|
94
96
|
// try to cover fees only if this.value is covered first
|
|
@@ -104,7 +106,7 @@ class TransactionPayloadMultiSig extends TransactionPayload {
|
|
|
104
106
|
value: types_1.Coins.fromPedros(this.value.pedros + this._fees - this._covered),
|
|
105
107
|
});
|
|
106
108
|
ledger.consumeUtxos(...extras);
|
|
107
|
-
this._covered += extras.map(utxo => utxo.value).reduce((prev, curr) => prev + curr);
|
|
109
|
+
this._covered += extras.map(utxo => utxo.value).reduce((prev, curr) => prev + curr, 0n);
|
|
108
110
|
this._inputs.push(...extras);
|
|
109
111
|
}
|
|
110
112
|
this._change = this._covered - (this.value.pedros + this._fees);
|
|
@@ -122,7 +124,7 @@ class TransactionPayloadMultiSig extends TransactionPayload {
|
|
|
122
124
|
value: types_1.Coins.fromPedros(this.value.pedros + this._fees - this._covered)
|
|
123
125
|
});
|
|
124
126
|
ledger.consumeUtxos(...extras);
|
|
125
|
-
this._covered += extras.map(utxo => utxo.value).reduce((prev, curr) => prev + curr);
|
|
127
|
+
this._covered += extras.map(utxo => utxo.value).reduce((prev, curr) => prev + curr, 0n);
|
|
126
128
|
this._inputs.push(...extras);
|
|
127
129
|
}
|
|
128
130
|
this._change = this._covered - (this.value.pedros + this._fees);
|
|
@@ -138,7 +140,11 @@ class TransactionPayloadMultiSig extends TransactionPayload {
|
|
|
138
140
|
}
|
|
139
141
|
}
|
|
140
142
|
}
|
|
143
|
+
else {
|
|
144
|
+
return 0n;
|
|
145
|
+
}
|
|
141
146
|
}
|
|
147
|
+
// console.log("change =>", this._change)
|
|
142
148
|
// prepare outputs, only if value and fees got fully covered for the first time:
|
|
143
149
|
if (this._change >= 0 && !prepared) {
|
|
144
150
|
// console.log('-'.repeat(80))
|
|
@@ -167,4 +173,4 @@ class TransactionPayloadMultiSig extends TransactionPayload {
|
|
|
167
173
|
}
|
|
168
174
|
}
|
|
169
175
|
exports.TransactionPayloadMultiSig = TransactionPayloadMultiSig;
|
|
170
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF5bG9hZHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2NyeXB0by9wYXlsb2Fkcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwyQ0FBaUU7QUFDakUsTUFBTSxTQUFTLEdBQUcsaUJBQVMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLG1DQUFtQyxDQUFDLENBQUMsQ0FBQTtBQUdsRixvQ0FBc0M7QUFHdEMsbUNBQWdDO0FBQ2hDLG1DQUFnRjtBQUVoRixNQUFzQixrQkFBa0I7SUFTcEMsWUFBWSxhQUFxQixFQUFFLGFBQXFCO1FBQ3BELElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQTtRQUNyRCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLENBQUE7UUFDakQsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUE7UUFDakIsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUE7UUFDbEIsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUE7SUFDbkIsQ0FBQztJQUVELElBQVcsUUFBUTtRQUNmLHlEQUF5RDtRQUN6RCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUE7UUFDN0IsOERBQThEO1FBQzlELElBQUksQ0FBQyxHQUFHO1lBQUUsT0FBTyxTQUFTLENBQUE7UUFFMUIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDdkMsSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUNOLE1BQU0sU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQ3hCLENBQUM7YUFBTSxDQUFDO1lBQ0osK0NBQStDO1lBQy9DLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1lBQy9D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QyxNQUFvRDtRQUN0RSxJQUFJLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQztZQUNoQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztnQkFDZixHQUFHLEVBQUUsTUFBTSxDQUFDLEdBQUc7Z0JBQ2YsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLO2dCQUNuQixTQUFTLEVBQUUsQ0FBQzthQUNmLENBQUMsQ0FBQTtRQUNOLENBQUM7SUFDTCxDQUFDO0lBRU0sV0FBVyxDQUFDLE1BQWE7UUFDNUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUE7UUFDakIsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUE7UUFDbEIsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUE7UUFDZixJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQTtRQUNqQixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQTtRQUNsQixJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQTtRQUNyQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUE7SUFDM0IsQ0FBQztDQVdKO0FBbElELGdFQWtJQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFR5cGUgYXMgUHJvdG9UeXBlLCBSb290IGFzIFByb3RvUm9vdCB9IGZyb20gXCJwcm90b2J1ZmpzXCJcclxuY29uc3QgcHJvdG9Sb290ID0gUHJvdG9Sb290LmZyb21KU09OKHJlcXVpcmUoXCIuLi8uLi8uLi93aXRuZXQvd2l0bmV0LnByb3RvLmpzb25cIikpXHJcblxyXG5pbXBvcnQgeyBIYXNoLCBOZXR3b3JrUHJpb3JpdGllcywgVmFsdWVUcmFuc2Zlck91dHB1dCB9IGZyb20gXCIuLi90eXBlc1wiXHJcbmltcG9ydCB7IHRvSGV4U3RyaW5nIH0gZnJvbSBcIi4uL3V0aWxzXCJcclxuXHJcbmltcG9ydCB7IElMZWRnZXIsIElKc29uUnBjUHJvdmlkZXIsIElUcmFuc2FjdGlvblBheWxvYWQsIElUcmFuc2FjdGlvblBheWxvYWRNdWx0aVNpZyB9IGZyb20gXCIuL2ludGVyZmFjZXNcIlxyXG5pbXBvcnQgeyBzaGEyNTYgfSBmcm9tIFwiLi91dGlsc1wiXHJcbmltcG9ydCB7IENvaW5zLCBQdWJsaWNLZXlIYXNoU3RyaW5nLCBUcmFuc2FjdGlvblByaW9yaXR5LCBVdHhvIH0gZnJvbSBcIi4vdHlwZXNcIjtcclxuXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBUcmFuc2FjdGlvblBheWxvYWQ8U3BlY3M+IGltcGxlbWVudHMgSVRyYW5zYWN0aW9uUGF5bG9hZDxTcGVjcz4ge1xyXG4gXHJcbiAgICBwcm90ZWN0ZWQgX2NoYW5nZTogYmlnaW50O1xyXG4gICAgcHJvdGVjdGVkIF9jb3ZlcmVkOiBiaWdpbnQ7XHJcbiAgICBwcm90ZWN0ZWQgX2ZlZXM6IGJpZ2ludDtcclxuICAgIHByb3RlY3RlZCBfcHJpb3JpdGllcz86IE5ldHdvcmtQcmlvcml0aWVzO1xyXG4gICAgcHJvdGVjdGVkIF9wcm90b1R5cGU6IFByb3RvVHlwZTtcclxuICAgIHByb3RlY3RlZCBfdGFyZ2V0PzogU3BlY3M7XHJcbiAgICBcclxuICAgIGNvbnN0cnVjdG9yKHByb3RvVHlwZU5hbWU6IHN0cmluZywgaW5pdGlhbFRhcmdldD86IFNwZWNzKSB7XHJcbiAgICAgICAgdGhpcy5fcHJvdG9UeXBlID0gcHJvdG9Sb290Lmxvb2t1cFR5cGUocHJvdG9UeXBlTmFtZSlcclxuICAgICAgICB0aGlzLl90YXJnZXQgPSB0aGlzLnZhbGlkYXRlVGFyZ2V0KGluaXRpYWxUYXJnZXQpXHJcbiAgICAgICAgdGhpcy5fY2hhbmdlID0gMG5cclxuICAgICAgICB0aGlzLl9jb3ZlcmVkID0gMG5cclxuICAgICAgICB0aGlzLl9mZWVzID0gMG5cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IGJ5dGVjb2RlKCk6IFVpbnQ4QXJyYXkgfCB1bmRlZmluZWQge1xyXG4gICAgICAgIC8vIG1ha2UgdG9Qcm90b2J1ZiByZXR1cm4gUHJvdG9idWYncyBkZXNlcmlhbGl6ZWQgbWVzc2FnZVxyXG4gICAgICAgIGNvbnN0IG9iaiA9IHRoaXMudG9Qcm90b2J1ZigpXHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJUcmFuc2FjdGlvblBheWxvYWQ8U3BlY3M+LmJ5dGVjb2RlKCkgPT5cIiwgb2JqKVxyXG4gICAgICAgIGlmICghb2JqKSByZXR1cm4gdW5kZWZpbmVkXHJcblxyXG4gICAgICAgIGNvbnN0IGVyciA9IHRoaXMuX3Byb3RvVHlwZS52ZXJpZnkob2JqKVxyXG4gICAgICAgIGlmIChlcnIpIHtcclxuICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKGVycilcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIlxcbm9iaiA9PlwiLCBKU09OLnN0cmluZ2lmeShvYmopKVxyXG4gICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gdGhpcy5fcHJvdG9UeXBlLmZyb21PYmplY3Qob2JqKVxyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIlxcbm1lc3NhZ2UgPT5cIiwgSlNPTi5zdHJpbmdpZnkobWVzc2FnZSkpXHJcbiAgICAgICAgICAgIGNvbnN0IGJ5dGVjb2RlID0gdGhpcy5fcHJvdG9UeXBlLmVuY29kZShtZXNzYWdlKS5maW5pc2goKVxyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIlxcbmJ5dGVjb2RlID0+XCIsIHRvSGV4U3RyaW5nKGJ5dGVjb2RlKSlcclxuICAgICAgICAgICAgcmV0dXJuIGJ5dGVjb2RlXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgY2hhbmdlKCk6IENvaW5zIHwgdW5kZWZpbmVkIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY2hhbmdlID4gMCA/IENvaW5zLmZyb21QZWRyb3ModGhpcy5fY2hhbmdlKSA6IHVuZGVmaW5lZFxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgY292ZXJlZCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAhIXRoaXMuZmVlc1xyXG4gICAgICAgICAgICAgICAgJiYgdGhpcy5fY292ZXJlZCA+PSB0aGlzLnZhbHVlLnBlZHJvcyArIHRoaXMuZmVlcy5wZWRyb3NcclxuICAgICAgICApXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBmZWVzKCk6IENvaW5zIHwgdW5kZWZpbmVkIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZmVlcyA+IDAgPyBDb2lucy5mcm9tUGVkcm9zKHRoaXMuX2ZlZXMpIDogdW5kZWZpbmVkXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBoYXNoKCk6IEhhc2ggfCB1bmRlZmluZWQge1xyXG4gICAgICAgIGNvbnN0IF9ieXRlY29kZSA9IHRoaXMuYnl0ZWNvZGVcclxuICAgICAgICBpZiAoX2J5dGVjb2RlIGluc3RhbmNlb2YgVWludDhBcnJheSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdG9IZXhTdHJpbmcoc2hhMjU2KF9ieXRlY29kZSkpXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaW50b1JlY2VpcHQodGFyZ2V0OiBTcGVjcyk6IGFueSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgLi4udGFyZ2V0XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFic3RyYWN0IGNvbnN1bWVVdHhvcyhsZWRnZXI6IElMZWRnZXIpOiBQcm9taXNlPGJpZ2ludD47XHJcbiAgICBhYnN0cmFjdCBwcmVwYXJlT3V0cHV0cyhjaGFuZ2U/OiB7IHZhbHVlOiBiaWdpbnQsIHBraDogUHVibGljS2V5SGFzaFN0cmluZyB9LCBwYXJhbXM/OiBhbnkpOiBhbnk7XHJcbiAgICBhYnN0cmFjdCByZXNldFRhcmdldCh0YXJnZXQ6IFNwZWNzKTogYW55O1xyXG4gICAgYWJzdHJhY3QgdG9KU09OKGh1bWFuaXplOiBib29sZWFuKTogYW55O1xyXG4gICAgYWJzdHJhY3QgdG9Qcm90b2J1ZigpOiBhbnk7XHJcbiAgICBhYnN0cmFjdCB2YWxpZGF0ZVRhcmdldCh0YXJnZXQ/OiBhbnkpOiBTcGVjcyB8IHVuZGVmaW5lZDtcclxuXHJcbiAgICBhYnN0cmFjdCBnZXQgb3V0cHV0cygpOiBBcnJheTxWYWx1ZVRyYW5zZmVyT3V0cHV0PjtcclxuICAgIGFic3RyYWN0IGdldCBtYXhXZWlnaHQoKTogbnVtYmVyO1xyXG4gICAgYWJzdHJhY3QgZ2V0IHByZXBhcmVkKCk6IGJvb2xlYW47XHJcbiAgICBhYnN0cmFjdCBnZXQgdmFsdWUoKTogQ29pbnM7XHJcbiAgICBhYnN0cmFjdCBnZXQgd2VpZ2h0KCk6IG51bWJlcjtcclxuXHJcbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgX2NsZWFuVGFyZ2V0RXh0cmFzKHBhcmFtcz86IGFueSk6IGFueTtcclxuICAgIHByb3RlY3RlZCBhYnN0cmFjdCBfZXN0aW1hdGVOZXR3b3JrRmVlcyhwcm92aWRlcjogSUpzb25ScGNQcm92aWRlciwgcHJpb3JpdHk/OiBUcmFuc2FjdGlvblByaW9yaXR5KTogUHJvbWlzZTxiaWdpbnQ+O1xyXG59XHJcblxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgVHJhbnNhY3Rpb25QYXlsb2FkTXVsdGlTaWc8U3BlY3M+IFxyXG4gICAgZXh0ZW5kcyBUcmFuc2FjdGlvblBheWxvYWQ8U3BlY3M+XHJcbiAgICBpbXBsZW1lbnRzIElUcmFuc2FjdGlvblBheWxvYWRNdWx0aVNpZzxTcGVjcz5cclxue1xyXG4gICAgcHJvdGVjdGVkIF9pbnB1dHM6IEFycmF5PFV0eG8+XHJcbiAgICBwcm90ZWN0ZWQgX291dHB1dHM6IEFycmF5PFZhbHVlVHJhbnNmZXJPdXRwdXQ+XHJcbiAgICBcclxuICAgIGNvbnN0cnVjdG9yKHByb3RvVHlwZU5hbWU6IHN0cmluZywgaW5pdGlhbFRhcmdldD86IFNwZWNzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvdG9UeXBlTmFtZSwgaW5pdGlhbFRhcmdldClcclxuICAgICAgICB0aGlzLl9pbnB1dHMgPSBbXVxyXG4gICAgICAgIHRoaXMuX291dHB1dHMgPSBbXVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgaW5wdXRzKCk6IEFycmF5PFV0eG8+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5faW5wdXRzXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBvdXRwdXRzKCk6IEFycmF5PFZhbHVlVHJhbnNmZXJPdXRwdXQ+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fb3V0cHV0c1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgcHJlcGFyZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgdGhpcy5faW5wdXRzLmxlbmd0aCA+IDAgXHJcbiAgICAgICAgICAgICAgICAmJiB0aGlzLl9vdXRwdXRzLmxlbmd0aCA+IDBcclxuICAgICAgICApXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIGNvbnN1bWVVdHhvcyhsZWRnZXI6IElMZWRnZXIsIHJlbG9hZD86IGJvb2xlYW4pOiBQcm9taXNlPGJpZ2ludD4ge1xyXG4gICAgICAgIGlmICghdGhpcy5fdGFyZ2V0KSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9OiBpbnRlcm5hbCBlcnJvcjogbm8gaW4tZmxpZ2h0IHBhcmFtcy5gKVxyXG4gICAgICAgIH0gXHJcbiAgICAgICAgY29uc3QgcHJlcGFyZWQgPSB0aGlzLnByZXBhcmVkXHJcbiAgICAgICAgaWYgKCF0aGlzLmNvdmVyZWQpIHtcclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2cobGVkZ2VyLmNvbnN0cnVjdG9yLm5hbWUsIFwiY2FjaGVJbmZvID0+XCIsIGxlZGdlci5wa2gsIGxlZGdlci5jYWNoZUluZm8pXHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGF3YWl0IGxlZGdlci5nZXRVdHhvcygpKVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLy8gY29uc3VtZSB1dHhvcyBhcyB0byBjb3ZlciB0aGlzLnZhbHVlLCBhdCBsZWFzdFxyXG4gICAgICAgICAgICBjb25zdCB1dHhvcyA9IGF3YWl0IGxlZGdlci5zZWxlY3RVdHhvcyh7IFxyXG4gICAgICAgICAgICAgICAgdmFsdWU6IENvaW5zLmZyb21QZWRyb3ModGhpcy52YWx1ZS5wZWRyb3MgLSB0aGlzLl9jb3ZlcmVkKSwgXHJcbiAgICAgICAgICAgICAgICByZWxvYWQsXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIHRoaXMuX2NvdmVyZWQgKz0gdXR4b3MubWFwKHV0eG8gPT4gdXR4by52YWx1ZSkucmVkdWNlKChwcmV2LCBjdXJyKSA9PiBwcmV2ICsgY3VyciwgMG4pXHJcbiAgICAgICAgICAgIHRoaXMuX2lucHV0cy5wdXNoKC4uLnV0eG9zKVxyXG4gICAgICAgICAgICBsZWRnZXIuY29uc3VtZVV0eG9zKC4uLnV0eG9zKVxyXG5cclxuICAgICAgICAgICAgLy8gdHJ5IHRvIGNvdmVyIGZlZXMgb25seSBpZiB0aGlzLnZhbHVlIGlzIGNvdmVyZWQgZmlyc3RcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2NvdmVyZWQgPj0gdGhpcy52YWx1ZS5wZWRyb3MpIHtcclxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuX2lucHV0cylcclxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwicmVtYWluaW5nIHV0eG9zID0+XCIsIGF3YWl0IGxlZGdlci5nZXRVdHhvcygpKVxyXG4gICAgICAgICAgICAgICAgaWYgKCh0aGlzLl90YXJnZXQgYXMgYW55KT8uZmVlcyBpbnN0YW5jZW9mIENvaW5zKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZmVlcyA9ICh0aGlzLl90YXJnZXQgYXMgYW55KS5mZWVzLnBlZHJvcztcclxuICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyh0aGlzLl9jb3ZlcmVkLCB0aGlzLnZhbHVlLnBlZHJvcywgdGhpcy5fZmVlcywgdGhpcy5fY292ZXJlZCA8IHRoaXMudmFsdWUucGVkcm9zICsgdGhpcy5fZmVlcylcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY292ZXJlZCA8IHRoaXMudmFsdWUucGVkcm9zICsgdGhpcy5fZmVlcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIm1vcmUgdXR4b3MgcmVxdWlyZWQuLi5cIilcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZXh0cmFzID0gYXdhaXQgbGVkZ2VyLnNlbGVjdFV0eG9zKHsgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogQ29pbnMuZnJvbVBlZHJvcyh0aGlzLnZhbHVlLnBlZHJvcyArIHRoaXMuX2ZlZXMgIC0gdGhpcy5fY292ZXJlZCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlZGdlci5jb25zdW1lVXR4b3MoLi4uZXh0cmFzKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb3ZlcmVkICs9IGV4dHJhcy5tYXAodXR4byA9PiB1dHhvLnZhbHVlKS5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IHByZXYgKyBjdXJyKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbnB1dHMucHVzaCguLi5leHRyYXMpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5nZSA9IHRoaXMuX2NvdmVyZWQgLSAodGhpcy52YWx1ZS5wZWRyb3MgKyB0aGlzLl9mZWVzKVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuX2NoYW5nZSlcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJpb3JpdHkgPSAodGhpcy5fdGFyZ2V0IGFzIGFueSk/LmZlZXMgYXMgVHJhbnNhY3Rpb25Qcmlvcml0eSB8fCBUcmFuc2FjdGlvblByaW9yaXR5Lk9wdWxlbnRcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZXN0aW1hdGVkRmVlcyA9IGF3YWl0IHRoaXMuX2VzdGltYXRlTmV0d29ya0ZlZXMobGVkZ2VyLnByb3ZpZGVyLCBwcmlvcml0eSk7XHJcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHRoaXMuX2ZlZXMgPCBlc3RpbWF0ZWRGZWVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2ZlZXMgPSBlc3RpbWF0ZWRGZWVzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX291dHB1dHMgPSBbXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBhZGQgbW9yZSB1dHhvcyBvbmx5IGlmIHRoZSBvbmVzIHNlbGVjdGVkIGZvciBjb3ZlcmluZyB0aGUgdmFsdWUgYW5kIHRoZSBlc3RpbWF0ZSBmZWVzIGRvbid0IHN1ZmZpY2U6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jb3ZlcmVkIDwgdGhpcy52YWx1ZS5wZWRyb3MgKyB0aGlzLl9mZWVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBleHRyYXMgPSBhd2FpdCBsZWRnZXIuc2VsZWN0VXR4b3MoeyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogQ29pbnMuZnJvbVBlZHJvcyh0aGlzLnZhbHVlLnBlZHJvcyArIHRoaXMuX2ZlZXMgLSB0aGlzLl9jb3ZlcmVkKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZGdlci5jb25zdW1lVXR4b3MoLi4uZXh0cmFzKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY292ZXJlZCArPSBleHRyYXMubWFwKHV0eG8gPT4gdXR4by52YWx1ZSkucmVkdWNlKChwcmV2LCBjdXJyKSA9PiBwcmV2ICsgY3VycilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2lucHV0cy5wdXNoKC4uLmV4dHJhcylcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFuZ2UgPSB0aGlzLl9jb3ZlcmVkIC0gKHRoaXMudmFsdWUucGVkcm9zICsgdGhpcy5fZmVlcylcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5nZSA8IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluc3VmZmljaWVudCBmdW5kcyAuLi5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByZXBhcmVPdXRwdXRzKHsgdmFsdWU6IHRoaXMuX2NoYW5nZSwgcGtoOiBsZWRnZXIuY2hhbmdlUGtoIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpdGVyYXRlIHVudGlsIGFjdHVhbCBmZWVzIG1hdGNoIGVzdGltYXRlZCBmZWVzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlc3RpbWF0ZWRGZWVzID0gYXdhaXQgdGhpcy5fZXN0aW1hdGVOZXR3b3JrRmVlcyhsZWRnZXIucHJvdmlkZXIsIHByaW9yaXR5KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHByZXBhcmUgb3V0cHV0cywgb25seSBpZiB2YWx1ZSBhbmQgZmVlcyBnb3QgZnVsbHkgY292ZXJlZCBmb3IgdGhlIGZpcnN0IHRpbWU6XHJcbiAgICAgICAgaWYgKHRoaXMuX2NoYW5nZSA+PSAwICYmICFwcmVwYXJlZCkge1xyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnLScucmVwZWF0KDgwKSlcclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2codGhpcy5faW5wdXRzKVxyXG4gICAgICAgICAgICB0aGlzLnByZXBhcmVPdXRwdXRzKHsgdmFsdWU6IHRoaXMuX2NoYW5nZSwgcGtoOiBsZWRnZXIuY2hhbmdlUGtoIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLl9jaGFuZ2VcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcHJlcGFyZU91dHB1dHMoY2hhbmdlPzogeyB2YWx1ZTogYmlnaW50LCBwa2g6IFB1YmxpY0tleUhhc2hTdHJpbmcgfSk6IGFueSB7XHJcbiAgICAgICAgaWYgKGNoYW5nZT8udmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5fb3V0cHV0cy5wdXNoKHtcclxuICAgICAgICAgICAgICAgIHBraDogY2hhbmdlLnBraCxcclxuICAgICAgICAgICAgICAgIHZhbHVlOiBjaGFuZ2UudmFsdWUsXHJcbiAgICAgICAgICAgICAgICB0aW1lX2xvY2s6IDAsXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZXNldFRhcmdldCh0YXJnZXQ6IFNwZWNzKTogYW55IHtcclxuICAgICAgICB0aGlzLl9jaGFuZ2UgPSAwblxyXG4gICAgICAgIHRoaXMuX2NvdmVyZWQgPSAwblxyXG4gICAgICAgIHRoaXMuX2ZlZXMgPSAwblxyXG4gICAgICAgIHRoaXMuX2lucHV0cyA9IFtdXHJcbiAgICAgICAgdGhpcy5fb3V0cHV0cyA9IFtdXHJcbiAgICAgICAgdGhpcy5fdGFyZ2V0ID0gdGFyZ2V0XHJcbiAgICAgICAgZGVsZXRlIHRoaXMuX3ByaW9yaXRpZXNcclxuICAgIH1cclxuXHJcbiAgICBhYnN0cmFjdCB0b0pTT04oaHVtYW5pemU6IGJvb2xlYW4pOiBhbnk7XHJcbiAgICBhYnN0cmFjdCB0b1Byb3RvYnVmKCk6IGFueTtcclxuICAgIGFic3RyYWN0IHZhbGlkYXRlVGFyZ2V0KHRhcmdldD86IGFueSk6IFNwZWNzIHwgdW5kZWZpbmVkO1xyXG5cclxuICAgIGFic3RyYWN0IGdldCBtYXhXZWlnaHQoKTogbnVtYmVyO1xyXG4gICAgYWJzdHJhY3QgZ2V0IHZhbHVlKCk6IENvaW5zO1xyXG4gICAgYWJzdHJhY3QgZ2V0IHdlaWdodCgpOiBudW1iZXI7XHJcbiAgICBcclxuICAgIHByb3RlY3RlZCBhYnN0cmFjdCBfY2xlYW5UYXJnZXRFeHRyYXMocGFyYW1zPzogYW55KTogYW55O1xyXG59XHJcbiJdfQ==
|
|
176
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF5bG9hZHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2NyeXB0by9wYXlsb2Fkcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwyQ0FBaUU7QUFDakUsTUFBTSxTQUFTLEdBQUcsaUJBQVMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLG1DQUFtQyxDQUFDLENBQUMsQ0FBQTtBQUdsRixvQ0FBc0M7QUFHdEMsbUNBQWdDO0FBQ2hDLG1DQUFnRjtBQUVoRixNQUFzQixrQkFBa0I7SUFTcEMsWUFBWSxhQUFxQixFQUFFLGFBQXFCO1FBQ3BELElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQTtRQUNyRCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLENBQUE7UUFDakQsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUE7UUFDakIsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUE7UUFDbEIsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUE7SUFDbkIsQ0FBQztJQUVELElBQVcsUUFBUTtRQUNmLHlEQUF5RDtRQUN6RCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUE7UUFDN0IsOERBQThEO1FBQzlELElBQUksQ0FBQyxHQUFHO1lBQUUsT0FBTyxTQUFTLENBQUE7UUFFMUIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDdkMsSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUNOLE1BQU0sU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQ3hCLENBQUM7YUFBTSxDQUFDO1lBQ0osK0NBQStDO1lBQy9DLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1lBQy9D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LEVBQUUsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUE7UUFDdkUsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQTtJQUN2QixDQUFDO0lBRU0sY0FBYyxDQUFDLE1BQW9EO1FBQ3RFLElBQUksTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO2dCQUNmLEdBQUcsRUFBRSxNQUFNLENBQUMsR0FBRztnQkFDZixLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUs7Z0JBQ25CLFNBQVMsRUFBRSxDQUFDO2FBQ2YsQ0FBQyxDQUFBO1FBQ04sQ0FBQztJQUNMLENBQUM7SUFFTSxXQUFXLENBQUMsTUFBYTtRQUM1QixJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQTtRQUNqQixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQTtRQUNsQixJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQTtRQUNmLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFBO1FBQ2pCLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFBO1FBQ2xCLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFBO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQTtJQUMzQixDQUFDO0NBV0o7QUF2SUQsZ0VBdUlDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVHlwZSBhcyBQcm90b1R5cGUsIFJvb3QgYXMgUHJvdG9Sb290IH0gZnJvbSBcInByb3RvYnVmanNcIlxyXG5jb25zdCBwcm90b1Jvb3QgPSBQcm90b1Jvb3QuZnJvbUpTT04ocmVxdWlyZShcIi4uLy4uLy4uL3dpdG5ldC93aXRuZXQucHJvdG8uanNvblwiKSlcclxuXHJcbmltcG9ydCB7IEhhc2gsIE5ldHdvcmtQcmlvcml0aWVzLCBWYWx1ZVRyYW5zZmVyT3V0cHV0IH0gZnJvbSBcIi4uL3R5cGVzXCJcclxuaW1wb3J0IHsgdG9IZXhTdHJpbmcgfSBmcm9tIFwiLi4vdXRpbHNcIlxyXG5cclxuaW1wb3J0IHsgSUxlZGdlciwgSUpzb25ScGNQcm92aWRlciwgSVRyYW5zYWN0aW9uUGF5bG9hZCwgSVRyYW5zYWN0aW9uUGF5bG9hZE11bHRpU2lnIH0gZnJvbSBcIi4vaW50ZXJmYWNlc1wiXHJcbmltcG9ydCB7IHNoYTI1NiB9IGZyb20gXCIuL3V0aWxzXCJcclxuaW1wb3J0IHsgQ29pbnMsIFB1YmxpY0tleUhhc2hTdHJpbmcsIFRyYW5zYWN0aW9uUHJpb3JpdHksIFV0eG8gfSBmcm9tIFwiLi90eXBlc1wiO1xyXG5cclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFRyYW5zYWN0aW9uUGF5bG9hZDxTcGVjcz4gaW1wbGVtZW50cyBJVHJhbnNhY3Rpb25QYXlsb2FkPFNwZWNzPiB7XHJcbiBcclxuICAgIHByb3RlY3RlZCBfY2hhbmdlOiBiaWdpbnQ7XHJcbiAgICBwcm90ZWN0ZWQgX2NvdmVyZWQ6IGJpZ2ludDtcclxuICAgIHByb3RlY3RlZCBfZmVlczogYmlnaW50O1xyXG4gICAgcHJvdGVjdGVkIF9wcmlvcml0aWVzPzogTmV0d29ya1ByaW9yaXRpZXM7XHJcbiAgICBwcm90ZWN0ZWQgX3Byb3RvVHlwZTogUHJvdG9UeXBlO1xyXG4gICAgcHJvdGVjdGVkIF90YXJnZXQ/OiBTcGVjcztcclxuICAgIFxyXG4gICAgY29uc3RydWN0b3IocHJvdG9UeXBlTmFtZTogc3RyaW5nLCBpbml0aWFsVGFyZ2V0PzogU3BlY3MpIHtcclxuICAgICAgICB0aGlzLl9wcm90b1R5cGUgPSBwcm90b1Jvb3QubG9va3VwVHlwZShwcm90b1R5cGVOYW1lKVxyXG4gICAgICAgIHRoaXMuX3RhcmdldCA9IHRoaXMudmFsaWRhdGVUYXJnZXQoaW5pdGlhbFRhcmdldClcclxuICAgICAgICB0aGlzLl9jaGFuZ2UgPSAwblxyXG4gICAgICAgIHRoaXMuX2NvdmVyZWQgPSAwblxyXG4gICAgICAgIHRoaXMuX2ZlZXMgPSAwblxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgYnl0ZWNvZGUoKTogVWludDhBcnJheSB8IHVuZGVmaW5lZCB7XHJcbiAgICAgICAgLy8gbWFrZSB0b1Byb3RvYnVmIHJldHVybiBQcm90b2J1ZidzIGRlc2VyaWFsaXplZCBtZXNzYWdlXHJcbiAgICAgICAgY29uc3Qgb2JqID0gdGhpcy50b1Byb3RvYnVmKClcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhcIlRyYW5zYWN0aW9uUGF5bG9hZDxTcGVjcz4uYnl0ZWNvZGUoKSA9PlwiLCBvYmopXHJcbiAgICAgICAgaWYgKCFvYmopIHJldHVybiB1bmRlZmluZWRcclxuXHJcbiAgICAgICAgY29uc3QgZXJyID0gdGhpcy5fcHJvdG9UeXBlLnZlcmlmeShvYmopXHJcbiAgICAgICAgaWYgKGVycikge1xyXG4gICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoZXJyKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiXFxub2JqID0+XCIsIEpTT04uc3RyaW5naWZ5KG9iaikpXHJcbiAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB0aGlzLl9wcm90b1R5cGUuZnJvbU9iamVjdChvYmopXHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiXFxubWVzc2FnZSA9PlwiLCBKU09OLnN0cmluZ2lmeShtZXNzYWdlKSlcclxuICAgICAgICAgICAgY29uc3QgYnl0ZWNvZGUgPSB0aGlzLl9wcm90b1R5cGUuZW5jb2RlKG1lc3NhZ2UpLmZpbmlzaCgpXHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiXFxuYnl0ZWNvZGUgPT5cIiwgdG9IZXhTdHJpbmcoYnl0ZWNvZGUpKVxyXG4gICAgICAgICAgICByZXR1cm4gYnl0ZWNvZGVcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBjaGFuZ2UoKTogQ29pbnMgfCB1bmRlZmluZWQge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jaGFuZ2UgPiAwID8gQ29pbnMuZnJvbVBlZHJvcyh0aGlzLl9jaGFuZ2UpIDogdW5kZWZpbmVkXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBjb3ZlcmVkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICEhdGhpcy5mZWVzXHJcbiAgICAgICAgICAgICAgICAmJiB0aGlzLl9jb3ZlcmVkID49IHRoaXMudmFsdWUucGVkcm9zICsgdGhpcy5mZWVzLnBlZHJvc1xyXG4gICAgICAgIClcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IGZlZXMoKTogQ29pbnMgfCB1bmRlZmluZWQge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9mZWVzID4gMCA/IENvaW5zLmZyb21QZWRyb3ModGhpcy5fZmVlcykgOiB1bmRlZmluZWRcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IGhhc2goKTogSGFzaCB8IHVuZGVmaW5lZCB7XHJcbiAgICAgICAgY29uc3QgX2J5dGVjb2RlID0gdGhpcy5ieXRlY29kZVxyXG4gICAgICAgIGlmIChfYnl0ZWNvZGUgaW5zdGFuY2VvZiBVaW50OEFycmF5KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0b0hleFN0cmluZyhzaGEyNTYoX2J5dGVjb2RlKSlcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpbnRvUmVjZWlwdCh0YXJnZXQ6IFNwZWNzKTogYW55IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAuLi50YXJnZXRcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYWJzdHJhY3QgY29uc3VtZVV0eG9zKGxlZGdlcjogSUxlZGdlcik6IFByb21pc2U8YmlnaW50PjtcclxuICAgIGFic3RyYWN0IHByZXBhcmVPdXRwdXRzKGNoYW5nZT86IHsgdmFsdWU6IGJpZ2ludCwgcGtoOiBQdWJsaWNLZXlIYXNoU3RyaW5nIH0sIHBhcmFtcz86IGFueSk6IGFueTtcclxuICAgIGFic3RyYWN0IHJlc2V0VGFyZ2V0KHRhcmdldDogU3BlY3MpOiBhbnk7XHJcbiAgICBhYnN0cmFjdCB0b0pTT04oaHVtYW5pemU6IGJvb2xlYW4pOiBhbnk7XHJcbiAgICBhYnN0cmFjdCB0b1Byb3RvYnVmKCk6IGFueTtcclxuICAgIGFic3RyYWN0IHZhbGlkYXRlVGFyZ2V0KHRhcmdldD86IGFueSk6IFNwZWNzIHwgdW5kZWZpbmVkO1xyXG5cclxuICAgIGFic3RyYWN0IGdldCBvdXRwdXRzKCk6IEFycmF5PFZhbHVlVHJhbnNmZXJPdXRwdXQ+O1xyXG4gICAgYWJzdHJhY3QgZ2V0IG1heFdlaWdodCgpOiBudW1iZXI7XHJcbiAgICBhYnN0cmFjdCBnZXQgcHJlcGFyZWQoKTogYm9vbGVhbjtcclxuICAgIGFic3RyYWN0IGdldCB2YWx1ZSgpOiBDb2lucztcclxuICAgIGFic3RyYWN0IGdldCB3ZWlnaHQoKTogbnVtYmVyO1xyXG5cclxuICAgIHByb3RlY3RlZCBhYnN0cmFjdCBfY2xlYW5UYXJnZXRFeHRyYXMocGFyYW1zPzogYW55KTogYW55O1xyXG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IF9lc3RpbWF0ZU5ldHdvcmtGZWVzKHByb3ZpZGVyOiBJSnNvblJwY1Byb3ZpZGVyLCBwcmlvcml0eT86IFRyYW5zYWN0aW9uUHJpb3JpdHkpOiBQcm9taXNlPGJpZ2ludD47XHJcbn1cclxuXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBUcmFuc2FjdGlvblBheWxvYWRNdWx0aVNpZzxTcGVjcz4gXHJcbiAgICBleHRlbmRzIFRyYW5zYWN0aW9uUGF5bG9hZDxTcGVjcz5cclxuICAgIGltcGxlbWVudHMgSVRyYW5zYWN0aW9uUGF5bG9hZE11bHRpU2lnPFNwZWNzPlxyXG57XHJcbiAgICBwcm90ZWN0ZWQgX2lucHV0czogQXJyYXk8VXR4bz5cclxuICAgIHByb3RlY3RlZCBfb3V0cHV0czogQXJyYXk8VmFsdWVUcmFuc2Zlck91dHB1dD5cclxuICAgIFxyXG4gICAgY29uc3RydWN0b3IocHJvdG9UeXBlTmFtZTogc3RyaW5nLCBpbml0aWFsVGFyZ2V0PzogU3BlY3MpIHtcclxuICAgICAgICBzdXBlcihwcm90b1R5cGVOYW1lLCBpbml0aWFsVGFyZ2V0KVxyXG4gICAgICAgIHRoaXMuX2lucHV0cyA9IFtdXHJcbiAgICAgICAgdGhpcy5fb3V0cHV0cyA9IFtdXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBpbnB1dHMoKTogQXJyYXk8VXR4bz4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9pbnB1dHNcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IG91dHB1dHMoKTogQXJyYXk8VmFsdWVUcmFuc2Zlck91dHB1dD4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9vdXRwdXRzXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBwcmVwYXJlZCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICB0aGlzLl9pbnB1dHMubGVuZ3RoID4gMCBcclxuICAgICAgICAgICAgICAgICYmIHRoaXMuX291dHB1dHMubGVuZ3RoID4gMFxyXG4gICAgICAgIClcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgY29uc3VtZVV0eG9zKGxlZGdlcjogSUxlZGdlciwgcmVsb2FkPzogYm9vbGVhbik6IFByb21pc2U8YmlnaW50PiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl90YXJnZXQpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3RoaXMuY29uc3RydWN0b3IubmFtZX06IGludGVybmFsIGVycm9yOiBubyBpbi1mbGlnaHQgcGFyYW1zLmApXHJcbiAgICAgICAgfSBcclxuICAgICAgICBjb25zdCBwcmVwYXJlZCA9IHRoaXMucHJlcGFyZWRcclxuICAgICAgICBpZiAoIXRoaXMuY292ZXJlZCkge1xyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhhd2FpdCBsZWRnZXIuZ2V0VXR4b3MoKSlcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vIGNvbnN1bWUgdXR4b3MgYXMgdG8gY292ZXIgdGhpcy52YWx1ZSwgYXQgbGVhc3RcclxuICAgICAgICAgICAgY29uc3QgdXR4b3MgPSBhd2FpdCBsZWRnZXIuc2VsZWN0VXR4b3MoeyBcclxuICAgICAgICAgICAgICAgIHZhbHVlOiBDb2lucy5mcm9tUGVkcm9zKHRoaXMudmFsdWUucGVkcm9zIC0gdGhpcy5fY292ZXJlZCksIFxyXG4gICAgICAgICAgICAgICAgcmVsb2FkLFxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhsZWRnZXIuY29uc3RydWN0b3IubmFtZSwgXCJjYWNoZUluZm8gPT5cIiwgbGVkZ2VyLnBraCwgbGVkZ2VyLmNhY2hlSW5mbywgdGhpcy52YWx1ZS5wZWRyb3MsIHRoaXMuX2NvdmVyZWQpXHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHV0eG9zKVxyXG4gICAgICAgICAgICB0aGlzLl9jb3ZlcmVkICs9IHV0eG9zLm1hcCh1dHhvID0+IHV0eG8udmFsdWUpLnJlZHVjZSgocHJldiwgY3VycikgPT4gcHJldiArIGN1cnIsIDBuKVxyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcImluaXRpYWwgY292ZXIgPT5cIiwgdGhpcy5fY292ZXJlZClcclxuICAgICAgICAgICAgdGhpcy5faW5wdXRzLnB1c2goLi4udXR4b3MpXHJcbiAgICAgICAgICAgIGxlZGdlci5jb25zdW1lVXR4b3MoLi4udXR4b3MpXHJcblxyXG4gICAgICAgICAgICAvLyB0cnkgdG8gY292ZXIgZmVlcyBvbmx5IGlmIHRoaXMudmFsdWUgaXMgY292ZXJlZCBmaXJzdFxyXG4gICAgICAgICAgICBpZiAodGhpcy5fY292ZXJlZCA+PSB0aGlzLnZhbHVlLnBlZHJvcykge1xyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2codGhpcy5faW5wdXRzKVxyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJyZW1haW5pbmcgdXR4b3MgPT5cIiwgYXdhaXQgbGVkZ2VyLmdldFV0eG9zKCkpXHJcbiAgICAgICAgICAgICAgICBpZiAoKHRoaXMuX3RhcmdldCBhcyBhbnkpPy5mZWVzIGluc3RhbmNlb2YgQ29pbnMpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9mZWVzID0gKHRoaXMuX3RhcmdldCBhcyBhbnkpLmZlZXMucGVkcm9zO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuX2NvdmVyZWQsIHRoaXMudmFsdWUucGVkcm9zLCB0aGlzLl9mZWVzLCB0aGlzLl9jb3ZlcmVkIDwgdGhpcy52YWx1ZS5wZWRyb3MgKyB0aGlzLl9mZWVzKVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jb3ZlcmVkIDwgdGhpcy52YWx1ZS5wZWRyb3MgKyB0aGlzLl9mZWVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwibW9yZSB1dHhvcyByZXF1aXJlZC4uLlwiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBleHRyYXMgPSBhd2FpdCBsZWRnZXIuc2VsZWN0VXR4b3MoeyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBDb2lucy5mcm9tUGVkcm9zKHRoaXMudmFsdWUucGVkcm9zICsgdGhpcy5fZmVlcyAgLSB0aGlzLl9jb3ZlcmVkKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGVkZ2VyLmNvbnN1bWVVdHhvcyguLi5leHRyYXMpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvdmVyZWQgKz0gZXh0cmFzLm1hcCh1dHhvID0+IHV0eG8udmFsdWUpLnJlZHVjZSgocHJldiwgY3VycikgPT4gcHJldiArIGN1cnIsIDBuKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbnB1dHMucHVzaCguLi5leHRyYXMpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5nZSA9IHRoaXMuX2NvdmVyZWQgLSAodGhpcy52YWx1ZS5wZWRyb3MgKyB0aGlzLl9mZWVzKVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuX2NoYW5nZSlcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJpb3JpdHkgPSAodGhpcy5fdGFyZ2V0IGFzIGFueSk/LmZlZXMgYXMgVHJhbnNhY3Rpb25Qcmlvcml0eSB8fCBUcmFuc2FjdGlvblByaW9yaXR5Lk9wdWxlbnRcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZXN0aW1hdGVkRmVlcyA9IGF3YWl0IHRoaXMuX2VzdGltYXRlTmV0d29ya0ZlZXMobGVkZ2VyLnByb3ZpZGVyLCBwcmlvcml0eSk7XHJcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHRoaXMuX2ZlZXMgPCBlc3RpbWF0ZWRGZWVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2ZlZXMgPSBlc3RpbWF0ZWRGZWVzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX291dHB1dHMgPSBbXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBhZGQgbW9yZSB1dHhvcyBvbmx5IGlmIHRoZSBvbmVzIHNlbGVjdGVkIGZvciBjb3ZlcmluZyB0aGUgdmFsdWUgYW5kIHRoZSBlc3RpbWF0ZSBmZWVzIGRvbid0IHN1ZmZpY2U6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jb3ZlcmVkIDwgdGhpcy52YWx1ZS5wZWRyb3MgKyB0aGlzLl9mZWVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBleHRyYXMgPSBhd2FpdCBsZWRnZXIuc2VsZWN0VXR4b3MoeyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogQ29pbnMuZnJvbVBlZHJvcyh0aGlzLnZhbHVlLnBlZHJvcyArIHRoaXMuX2ZlZXMgLSB0aGlzLl9jb3ZlcmVkKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZGdlci5jb25zdW1lVXR4b3MoLi4uZXh0cmFzKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY292ZXJlZCArPSBleHRyYXMubWFwKHV0eG8gPT4gdXR4by52YWx1ZSkucmVkdWNlKChwcmV2LCBjdXJyKSA9PiBwcmV2ICsgY3VyciwgMG4pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbnB1dHMucHVzaCguLi5leHRyYXMpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbmdlID0gdGhpcy5fY292ZXJlZCAtICh0aGlzLnZhbHVlLnBlZHJvcyArIHRoaXMuX2ZlZXMpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFuZ2UgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbnN1ZmZpY2llbnQgZnVuZHMgLi4uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcmVwYXJlT3V0cHV0cyh7IHZhbHVlOiB0aGlzLl9jaGFuZ2UsIHBraDogbGVkZ2VyLmNoYW5nZVBraCB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaXRlcmF0ZSB1bnRpbCBhY3R1YWwgZmVlcyBtYXRjaCBlc3RpbWF0ZWQgZmVlc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXN0aW1hdGVkRmVlcyA9IGF3YWl0IHRoaXMuX2VzdGltYXRlTmV0d29ya0ZlZXMobGVkZ2VyLnByb3ZpZGVyLCBwcmlvcml0eSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAwbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhcImNoYW5nZSA9PlwiLCB0aGlzLl9jaGFuZ2UpXHJcbiAgICAgICAgLy8gcHJlcGFyZSBvdXRwdXRzLCBvbmx5IGlmIHZhbHVlIGFuZCBmZWVzIGdvdCBmdWxseSBjb3ZlcmVkIGZvciB0aGUgZmlyc3QgdGltZTpcclxuICAgICAgICBpZiAodGhpcy5fY2hhbmdlID49IDAgJiYgIXByZXBhcmVkKSB7XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCctJy5yZXBlYXQoODApKVxyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyh0aGlzLl9pbnB1dHMpXHJcbiAgICAgICAgICAgIHRoaXMucHJlcGFyZU91dHB1dHMoeyB2YWx1ZTogdGhpcy5fY2hhbmdlLCBwa2g6IGxlZGdlci5jaGFuZ2VQa2ggfSlcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NoYW5nZVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBwcmVwYXJlT3V0cHV0cyhjaGFuZ2U/OiB7IHZhbHVlOiBiaWdpbnQsIHBraDogUHVibGljS2V5SGFzaFN0cmluZyB9KTogYW55IHtcclxuICAgICAgICBpZiAoY2hhbmdlPy52YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLl9vdXRwdXRzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgcGtoOiBjaGFuZ2UucGtoLFxyXG4gICAgICAgICAgICAgICAgdmFsdWU6IGNoYW5nZS52YWx1ZSxcclxuICAgICAgICAgICAgICAgIHRpbWVfbG9jazogMCxcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlc2V0VGFyZ2V0KHRhcmdldDogU3BlY3MpOiBhbnkge1xyXG4gICAgICAgIHRoaXMuX2NoYW5nZSA9IDBuXHJcbiAgICAgICAgdGhpcy5fY292ZXJlZCA9IDBuXHJcbiAgICAgICAgdGhpcy5fZmVlcyA9IDBuXHJcbiAgICAgICAgdGhpcy5faW5wdXRzID0gW11cclxuICAgICAgICB0aGlzLl9vdXRwdXRzID0gW11cclxuICAgICAgICB0aGlzLl90YXJnZXQgPSB0YXJnZXRcclxuICAgICAgICBkZWxldGUgdGhpcy5fcHJpb3JpdGllc1xyXG4gICAgfVxyXG5cclxuICAgIGFic3RyYWN0IHRvSlNPTihodW1hbml6ZTogYm9vbGVhbik6IGFueTtcclxuICAgIGFic3RyYWN0IHRvUHJvdG9idWYoKTogYW55O1xyXG4gICAgYWJzdHJhY3QgdmFsaWRhdGVUYXJnZXQodGFyZ2V0PzogYW55KTogU3BlY3MgfCB1bmRlZmluZWQ7XHJcblxyXG4gICAgYWJzdHJhY3QgZ2V0IG1heFdlaWdodCgpOiBudW1iZXI7XHJcbiAgICBhYnN0cmFjdCBnZXQgdmFsdWUoKTogQ29pbnM7XHJcbiAgICBhYnN0cmFjdCBnZXQgd2VpZ2h0KCk6IG51bWJlcjtcclxuICAgIFxyXG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IF9jbGVhblRhcmdldEV4dHJhcyhwYXJhbXM/OiBhbnkpOiBhbnk7XHJcbn1cclxuIl19
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transmitters.d.ts","sourceRoot":"","sources":["../../../../src/lib/crypto/transmitters.ts"],"names":[],"mappings":"AAEA,OAAO,EAAqB,IAAI,IAAI,SAAS,EAAE,MAAM,YAAY,CAAA;AAKjE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAGxC,OAAO,EACH,OAAO,EACP,gBAAgB,EAChB,YAAY,EACZ,mBAAmB,EACnB,2BAA2B,EAC9B,MAAM,cAAc,CAAA;AAErB,OAAO,EACH,cAAc,EAEd,mBAAmB,EAEnB,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EAEjB,YAAY,EAGf,MAAM,SAAS,CAAA;AAEhB,8BAAsB,WAAW,CAAC,KAAK,EAAE,OAAO,SAAS,mBAAmB,CAAC,KAAK,CAAC,CAAE,YAAW,YAAY;IAExG,SAAgB,MAAM,EAAE,OAAO,CAAC;IAChC,SAAgB,SAAS,EAAE,mBAAmB,CAAC;IAE/C,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC5B,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC;IAC/B,SAAS,CAAC,WAAW,EAAE,KAAK,CAAC,cAAc,CAAC,CAAK;IACjD,SAAS,CAAC,aAAa,EAAE,KAAK,CAAC,IAAI,CAAC,CAAK;gBAE5B,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,mBAAmB;IAatG,IAAW,OAAO,IAAI,OAAO,GAAG,SAAS,CAExC;IAED,IAAW,QAAQ,IAAI,gBAAgB,CAEtC;IAED,IAAW,OAAO,IAAI,OAAO,CAE5B;IAED,IAAW,YAAY,IAAI,KAAK,CAAC,IAAI,CAAC,CAErC;IAED,IAAW,IAAI,IAAI,MAAM,CAExB;IAED,SAAS,KAAK,KAAK,IAAI,KAAK,CAAC,mBAAmB,CAAC,GAAG,SAAS,CAa5D;IAED,SAAS,KAAK,SAAS,IAAI,OAAO,CAMjC;IAEY,eAAe,CAAC,MAAM,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAoC5D,eAAe,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,WAAW,UAAQ,GAAG,OAAO,CAAC,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"transmitters.d.ts","sourceRoot":"","sources":["../../../../src/lib/crypto/transmitters.ts"],"names":[],"mappings":"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"}
|
|
@@ -113,15 +113,16 @@ class Transmitter {
|
|
|
113
113
|
// clean current signatures, so new UTXOs can be consumed and therefore a new transaction hash be incepted
|
|
114
114
|
this._cleanSignatures(target);
|
|
115
115
|
// if not yet prepared, try to cover transaction expenses with existing utxos on signers:
|
|
116
|
+
let change = 0n;
|
|
116
117
|
if (!this._payload.prepared) {
|
|
117
|
-
await this._payload.consumeUtxos(this.ledger, reloadUtxos)
|
|
118
|
+
change = await this._payload.consumeUtxos(this.ledger, reloadUtxos)
|
|
118
119
|
.catch((err) => {
|
|
119
120
|
throw Error(`${this.constructor.name}: cannot consume UTXOs from ${this.ledger.constructor.name} ${this.ledger.pkh}: ${err}.`);
|
|
120
121
|
});
|
|
121
122
|
}
|
|
122
123
|
if (!this._payload.prepared) {
|
|
123
124
|
// throws exeception if not enough utxos were found to cover transaction expenses:
|
|
124
|
-
throw Error(`${this.constructor.name}: insufficient funds on ${this.ledger.constructor.name}
|
|
125
|
+
throw Error(`${this.constructor.name}: insufficient funds on ${this.ledger.constructor.name}${this.ledger.pkh}${change < 0 ? `: requires extra ${-change} $nanowits.` : "."}`);
|
|
125
126
|
}
|
|
126
127
|
// double-check weight does not exceeds block limit...
|
|
127
128
|
if (this._payload.weight > this._payload.maxWeight) {
|
|
@@ -413,4 +414,4 @@ class TransmitterMultiSig extends Transmitter {
|
|
|
413
414
|
}
|
|
414
415
|
}
|
|
415
416
|
exports.TransmitterMultiSig = TransmitterMultiSig;
|
|
416
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNtaXR0ZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9jcnlwdG8vdHJhbnNtaXR0ZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQztBQUV4RCwyQ0FBaUU7QUFDakUsTUFBTSxTQUFTLEdBQUcsaUJBQVMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLG1DQUFtQyxDQUFDLENBQUMsQ0FBQTtBQUdsRixnQ0FBd0M7QUFFeEMsb0NBQXVDO0FBVXZDLG1DQVlnQjtBQUVoQixNQUFzQixXQUFXO0lBVTdCLFlBQWEsYUFBcUIsRUFBRSxPQUFnQixFQUFFLE1BQWUsRUFBRSxTQUErQjtRQUg1RixnQkFBVyxHQUEwQixFQUFFLENBQUE7UUFDdkMsa0JBQWEsR0FBZ0IsRUFBRSxDQUFBO1FBR3JDLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQTtRQUNwRCxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztRQUN4QixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQTtRQUNwQixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUMzQixNQUFNLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSx5Q0FBeUMsQ0FBQyxDQUFBO1FBQ3RGLENBQUM7UUFDRCxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFBO1FBQzlDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQ3BDLE1BQU0sU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLCtDQUErQyxJQUFJLENBQUMsU0FBUyxH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QUksQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQ3ZJLENBQUM7cUJBQU0sQ0FBQztvQkFDTCxpRUFBaUU7b0JBQ2pFLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtnQkFDaEQsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFBO1lBQ0YsT0FBTyxJQUFJLENBQUE7UUFDZixDQUFDO0lBQ0wsQ0FBQztJQUVTLE9BQU8sQ0FBQyxRQUFpQjtRQUMvQixPQUFPO1lBQ0gsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ1QsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDO2dCQUNsRCxVQUFVLEVBQUUsSUFBSSxDQUFDLFdBQVc7YUFDL0I7U0FDSixDQUFBO0lBQ0wsQ0FBQztJQUVTLFdBQVc7UUFDakIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQTtRQUN2QyxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDM0IsT0FBTztnQkFDSCxJQUFJO2dCQUNKLFVBQVUsRUFBRSxJQUFJLENBQUMsV0FBVzthQUMvQixDQUFBO1FBQ0wsQ0FBQztJQUNMLENBQUM7Q0FDSjtBQXJFRCxrREFxRUMiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBwcm9taXNlUG9sbGVyID0gcmVxdWlyZSgncHJvbWlzZS1wb2xsZXInKS5kZWZhdWx0O1xyXG5cclxuaW1wb3J0IHsgUm9vdCBhcyBQcm90b1Jvb3QsIFR5cGUgYXMgUHJvdG9UeXBlIH0gZnJvbSBcInByb3RvYnVmanNcIlxyXG5jb25zdCBwcm90b1Jvb3QgPSBQcm90b1Jvb3QuZnJvbUpTT04ocmVxdWlyZShcIi4uLy4uLy4uL3dpdG5ldC93aXRuZXQucHJvdG8uanNvblwiKSkgXHJcblxyXG5pbXBvcnQgeyBUcmFuc2FjdGlvblJlcG9ydCwgVXR4b01ldGFkYXRhLCBWYWx1ZVRyYW5zZmVyT3V0cHV0IH0gZnJvbSBcIi4uL3JwYy90eXBlc1wiXHJcbmltcG9ydCB7IEpzb25ScGNQcm92aWRlciB9IGZyb20gXCIuLi9ycGNcIlxyXG5pbXBvcnQgeyBIYXNoLCBOZXR3b3JrIH0gZnJvbSBcIi4uL3R5cGVzXCJcclxuaW1wb3J0IHsgaXNIZXhTdHJpbmcgfSBmcm9tIFwiLi4vdXRpbHNcIjtcclxuXHJcbmltcG9ydCB7IFxyXG4gICAgSUxlZGdlcixcclxuICAgIElKc29uUnBjUHJvdmlkZXIsIFxyXG4gICAgSVRyYW5zbWl0dGVyLCBcclxuICAgIElUcmFuc2FjdGlvblBheWxvYWQsIFxyXG4gICAgSVRyYW5zYWN0aW9uUGF5bG9hZE11bHRpU2lnLCBcclxufSBmcm9tIFwiLi9pbnRlcmZhY2VzXCJcclxuXHJcbmltcG9ydCB7IFxyXG4gICAgS2V5ZWRTaWduYXR1cmUsIFxyXG4gICAgUHVibGljS2V5LCBcclxuICAgIFB1YmxpY0tleUhhc2hTdHJpbmcsIFxyXG4gICAgTWVtcG9vbEVycm9yLFxyXG4gICAgVHJhbnNhY3Rpb25DYWxsYmFjaywgXHJcbiAgICBUcmFuc2FjdGlvblJlY2VpcHQsIFxyXG4gICAgVHJhbnNhY3Rpb25TdGF0dXMsIFxyXG4gICAgVGltZW91dEVycm9yLFxyXG4gICAgVHJhbnNtaXNzaW9uLFxyXG4gICAgVHJhbnNtaXNzaW9uRXJyb3IsXHJcbiAgICBVdHhvLFxyXG59IGZyb20gXCIuL3R5cGVzXCJcclxuXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBUcmFuc21pdHRlcjxTcGVjcywgUGF5bG9hZCBleHRlbmRzIElUcmFuc2FjdGlvblBheWxvYWQ8U3BlY3M+PiBpbXBsZW1lbnRzIElUcmFuc21pdHRlciB7XHJcbiAgICBcclxuICAgIHB1YmxpYyByZWFkb25seSBsZWRnZXI6IElMZWRnZXI7XHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgY2hhbmdlUGtoOiBQdWJsaWNLZXlIYXNoU3RyaW5nO1xyXG4gICAgXHJcbiAgICBwcm90ZWN0ZWQgX3BheWxvYWQ6IFBheWxvYWQ7XHJcbiAgICBwcm90ZWN0ZWQgX3Byb3RvQnVmOiBQcm90b1R5cGU7XHJcbiAgICBwcm90ZWN0ZWQgX3NpZ25hdHVyZXM6IEFycmF5PEtleWVkU2lnbmF0dXJlPiA9IFtdXHJcbiAgICBwcm90ZWN0ZWQgX3RyYW5zYWN0aW9uczogQXJyYXk8SGFzaD4gPSBbXVxyXG5cclxuICAgIGNvbnN0cnVjdG9yIChwcm90b1R5cGVOYW1lOiBzdHJpbmcsIHBheWxvYWQ6IFBheWxvYWQsIGxlZGdlcjogSUxlZGdlciwgY2hhbmdlUGtoPzogUHVibGljS2V5SGFzaFN0cmluZykge1xyXG4gICAgICAgIHRoaXMuX3Byb3RvQnVmID0gcHJvdG9Sb290Lmxvb2t1cFR5cGUocHJvdG9UeXBlTmFtZSlcclxuICAgICAgICB0aGlzLl9wYXlsb2FkID0gcGF5bG9hZDtcclxuICAgICAgICB0aGlzLmxlZGdlciA9IGxlZGdlclxyXG4gICAgICAgIGlmICghbGVkZ2VyLnByb3ZpZGVyLm5ldHdvcmspIHtcclxuICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKGAke3RoaXMuY29uc3RydWN0b3IubmFtZX06IGxlZGdlcidzIHByb3ZpZGVyIGlzIG5vdCBpbml0aWFsaXplZC5gKVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNoYW5nZVBraCA9IGNoYW5nZVBraCB8fCBsZWRnZXIuY2hhbmdlUGtoXHJcbiAgICAgICAgaWYgKCFsZWRnZXIuZ2V0U2lnbmVyKHRoaXMuY2hhbmdlUGtoKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoYCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfTogbGVkZ2VyIGhvbGRzIG5vIFNpZ25lciBmb3IgY2hhbmdlIGFkZHJlc3MgJHt0aGlzLmNoYW5nZVBraH0uYClcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBwYXlsb2FkKCk6IFBheWxvYWQgfCB1bmRlZmluZWQge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wYXlsb2FkLnByZXBhcmVkID8gdGhpcy5fcGF5bG9hZCA6IHVuZGVmaW5lZFxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgcHJvdmlkZXIoKTogSUpzb25ScGNQcm92aWRlciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubGVkZ2VyLnByb3ZpZGVyXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBuZXR3b3JrKCk6IE5ldHdvcmsge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnByb3ZpZGVyLm5ldHdvcmsgfHwgXCJtYWlubmV0XCJcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IHRyYW5zYWN0aW9ucygpOiBBcnJheTxIYXNoPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zYWN0aW9uc1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgdHlwZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wYXlsb2FkLmNvbnN0cnVjdG9yLm5hbWUuc3BsaXQoLyhbYS16XSg/PVtBLVpdKSkvZykuc2xpY2UoMCwgLTEpLmpvaW4oXCJcIilcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgZ2V0IF9mcm9tKCk6IEFycmF5PFB1YmxpY0tleUhhc2hTdHJpbmc+IHwgdW5kZWZpbmVkIHtcclxuICAgICAgICBpZiAodGhpcy5fc2lnbmF0dXJlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zaWduYXR1cmVzXHJcbiAgICAgICAgICAgICAgICAubWFwKGtzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwa2ggPSBQdWJsaWNLZXkuZnJvbVByb3RvYnVmKGtzLnB1YmxpY19rZXkpLmhhc2goKS50b0JlY2gzMih0aGlzLm5ldHdvcmspXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubGVkZ2VyLmdldFNpZ25lcihwa2gpPy5wa2ggfHwgdGhpcy5sZWRnZXIucGtoXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgLy8gYXZvaWQgcmVwZXRpdGlvbnNcclxuICAgICAgICAgICAgICAgIC5maWx0ZXIoKHBraCwgaW5kZXgsIGFycmF5KSA9PiBpbmRleCA9PT0gYXJyYXkuaW5kZXhPZihwa2gpKVxyXG4gICAgICAgIFxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWRcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGdldCBfcHJlcGFyZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgdGhpcy5fcGF5bG9hZC5wcmVwYXJlZFxyXG4gICAgICAgICAgICAgICAgJiYgISF0aGlzLl9zaWduYXR1cmVzXHJcbiAgICAgICAgICAgICAgICAmJiB0aGlzLl9zaWduYXR1cmVzLmxlbmd0aCA+IDBcclxuICAgICAgICApXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIHNlbmRUcmFuc2FjdGlvbih0YXJnZXQ/OiBTcGVjcyk6IFByb21pc2U8VHJhbnNhY3Rpb25SZWNlaXB0PiB7XHJcbiAgICAgICAgbGV0IHJlY2VpcHQgPSB0aGlzLl9nZXRJbmZsaWdodFJlY2VpcHQoKVxyXG4gICAgICAgIGlmICghcmVjZWlwdCB8fCB0YXJnZXQpIHtcclxuICAgICAgICAgICAgLy8gaWYgaW5mbGlnaHQgbm90IHlldCBwcmVwYXJlZCwgb3IgcHJlcGFyZWQgYnV0IG5vdCB5ZXQgdHJhbnNtaXR0ZWQsXHJcbiAgICAgICAgICAgIC8vIHByZXBhcmUgYSBuZXcgaW5mbGlnaHQgZWl0aGVyIHdpdGggc3BlY2lmaWVkIHBhcmFtcyAoaWYgYW55KSxcclxuICAgICAgICAgICAgLy8gb3IgcHJldmlvdXNseSBwcmVwYXJlZCBpbmZsaWdodCAoaWYga25vd24pLlxyXG4gICAgICAgICAgICByZWNlaXB0ID0gYXdhaXQgdGhpcy5zaWduVHJhbnNhY3Rpb24odGFyZ2V0IHx8IHJlY2VpcHQgYXMgU3BlY3MpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChyZWNlaXB0Py5zdGF0dXMgJiYgcmVjZWlwdC5zdGF0dXMgIT09IFwic2lnbmVkXCIgJiYgIXJlY2VpcHQ/LmVycm9yKSB7XHJcbiAgICAgICAgICAgIC8vIGlmIGN1cnJlbnQgaW5mbGlnaHQgd2FzIGFscmVhZHkgdHJhbnNtaXR0ZWQgYW5kIGl0J3Mgbm90IHlldCBrbm93biB0byBmYWlsIC4uLlxyXG4gICAgICAgICAgICByZXR1cm4gcmVjZWlwdFxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBpZiB3ZSByZWFjaCB0aGlzIHBvaW50IGlzIGJlY2F1c2UgYW4gaW5mbGlnaHQgdHJhbnNhY3Rpb24gaXMgXHJcbiAgICAgICAgLy8gcmVhZHkgdG8gYmUgdHJhbnNtaXR0ZWRcclxuICAgICAgICBKc29uUnBjUHJvdmlkZXIucmVjZWlwdHNbcmVjZWlwdC5oYXNoXS5zdGF0dXMgPSBcInBlbmRpbmdcIlxyXG4gICAgICAgIGRlbGV0ZSBKc29uUnBjUHJvdmlkZXIucmVjZWlwdHNbcmVjZWlwdC5oYXNoXS5lcnJvclxyXG4gICAgICAgIHJldHVybiB0aGlzLnByb3ZpZGVyXHJcbiAgICAgICAgICAgIC5zZW5kUmF3VHJhbnNhY3Rpb24odGhpcy5fdG9KU09OKGZhbHNlKSlcclxuICAgICAgICAgICAgLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBUcmFuc21pc3Npb25FcnJvcih0aGlzLl9nZXRJbmZsaWdodFRyYW5zbWlzc2lvbigpLCBlcnIpXHJcbiAgICAgICAgICAgICAgICBKc29uUnBjUHJvdmlkZXIucmVjZWlwdHNbcmVjZWlwdC5oYXNoXS5lcnJvciA9IGVycm9yXHJcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvclxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAudGhlbihhY2NlcHRlZCA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYWNjZXB0ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBKc29uUnBjUHJvdmlkZXIucmVjZWlwdHNbcmVjZWlwdC5oYXNoXS5zdGF0dXMgPSBcInJlbGF5ZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBKc29uUnBjUHJvdmlkZXIucmVjZWlwdHNbcmVjZWlwdC5oYXNoXVxyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBUcmFuc21pc3Npb25FcnJvcih0aGlzLl9nZXRJbmZsaWdodFRyYW5zbWlzc2lvbigpLCBFcnJvcihgUmVqZWN0ZWQgZm9yIHVua25vd24gcmVhc29uc2ApKVxyXG4gICAgICAgICAgICAgICAgICAgIEpzb25ScGNQcm92aWRlci5yZWNlaXB0c1tyZWNlaXB0Lmhhc2hdLmVycm9yID0gZXJyb3JcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnJvclxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBzaWduVHJhbnNhY3Rpb24odGFyZ2V0PzogU3BlY3MsIHJlbG9hZFV0eG9zID0gZmFsc2UpOiBQcm9taXNlPFRyYW5zYWN0aW9uUmVjZWlwdD4ge1xyXG4gICAgICAgIHRhcmdldCA9IGF3YWl0IHRoaXMuX3BheWxvYWQudmFsaWRhdGVUYXJnZXQodGFyZ2V0KVxyXG4gICAgICAgIGlmICghdGFyZ2V0KSB7XHJcbiAgICAgICAgICAgIC8vIGUuZy4gaWYgY2FsbGVkIGZyb20gdGhpcy5zZW5kKCkgd2l0aCBubyBwYXJhbXNcclxuICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKGAke3RoaXMuY29uc3RydWN0b3IubmFtZX06IGNhbm5vdCBzaWduIGEgdHJhbnNhY3Rpb24gaWYgbm8gcGFyYW1zIHdlcmUgcHJldmlvdXNseSBzcGVjaWZpZWQuYClcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgY29uc3QgaW5mbGlnaHQgPSB0aGlzLl9nZXRJbmZsaWdodFJlY2VpcHQoKVxyXG4gICAgICAgIGlmIChpbmZsaWdodCkge1xyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcInNpZ24ucGVuZGluZ1JlY2VpcHQgPT5cIiwgaW5mbGlnaHQpXHJcbiAgICAgICAgICAgIGlmICghaW5mbGlnaHQ/LnN0YXR1cyB8fCBpbmZsaWdodC5zdGF0dXMgPT09IFwic2lnbmVkXCIpIHtcclxuICAgICAgICAgICAgICAgIC8vIHJlY292ZXIgaW5wdXQgdXR4b3MgaWYgcHJldmlvdXNseSBzaWduZWQgcGFyYW1zIHdlcmUgbm90IGV2ZW4gYXR0ZW1wdGVkIHRvIGJlIHNlbnRcclxuICAgICAgICAgICAgICAgIGlmICghcmVsb2FkVXR4b3MpIHRoaXMuX3JlY292ZXJJbnB1dFV0eG9zKClcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5mbGlnaHQuc3RhdHVzID09PSBcInBlbmRpbmdcIiAmJiAhaW5mbGlnaHQuZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIC8vIHRocm93IGV4Y2VwdGlvbiBpZiBhIGZvcm1lcmx5IHNpZ25lZCB0cmFuc2FjdGlvbiBpcyBzdGlsbCB3YWl0aW5nIHRvIGJlIHJlbGF5ZWQgYnkgYSBwcm92aWRlclxyXG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoYCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfTogaW4tZmxpZ2h0IHR4IGJlaW5nIHJlbGF5ZWQ6ICR7aW5mbGlnaHQuaGFzaH1gKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBcclxuICAgICAgICBcclxuICAgICAgICAvLyBjbGVhbiBjdXJyZW50IHNpZ25hdHVyZXMsIHNvIG5ldyBVVFhPcyBjYW4gYmUgY29uc3VtZWQgYW5kIHRoZXJlZm9yZSBhIG5ldyB0cmFuc2FjdGlvbiBoYXNoIGJlIGluY2VwdGVkXHJcbiAgICAgICAgdGhpcy5fY2xlYW5TaWduYXR1cmVzKHRhcmdldClcclxuICAgICAgICBcclxuICAgICAgICAvLyBpZiBub3QgeWV0IHByZXBhcmVkLCB0cnkgdG8gY292ZXIgdHJhbnNhY3Rpb24gZXhwZW5zZXMgd2l0aCBleGlzdGluZyB1dHhvcyBvbiBzaWduZXJzOlxyXG4gICAgICAgIGlmICghdGhpcy5fcGF5bG9hZC5wcmVwYXJlZCkge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9wYXlsb2FkLmNvbnN1bWVVdHhvcyh0aGlzLmxlZGdlciwgcmVsb2FkVXR4b3MpXHJcbiAgICAgICAgICAgIC5jYXRjaCgoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFxyXG4gICAgICAgICAgICAgICAgICAgIGAke3RoaXMuY29uc3RydWN0b3IubmFtZX06IGNhbm5vdCBjb25zdW1lIFVUWE9zIGZyb20gJHt0aGlzLmxlZGdlci5jb25zdHJ1Y3Rvci5uYW1lfSAke3RoaXMubGVkZ2VyLnBraH06ICR7ZXJyfS5gXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIH0pICBcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKCF0aGlzLl9wYXlsb2FkLnByZXBhcmVkKSB7XHJcbiAgICAgICAgICAgIC8vIHRocm93cyBleGVjZXB0aW9uIGlmIG5vdCBlbm91Z2ggdXR4b3Mgd2VyZSBmb3VuZCB0byBjb3ZlciB0cmFuc2FjdGlvbiBleHBlbnNlczpcclxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXHJcbiAgICAgICAgICAgICAgICBgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9OiBpbnN1ZmZpY2llbnQgZnVuZHMgb24gJHt0aGlzLmxlZGdlci5jb25zdHJ1Y3Rvci5uYW1lfSAke3RoaXMubGVkZ2VyLnBraH0uYFxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgfSBcclxuXHJcbiAgICAgICAgLy8gZG91YmxlLWNoZWNrIHdlaWdodCBkb2VzIG5vdCBleGNlZWRzIGJsb2NrIGxpbWl0Li4uXHJcbiAgICAgICAgaWYgKHRoaXMuX3BheWxvYWQud2VpZ2h0ID4gdGhpcy5fcGF5bG9hZC5tYXhXZWlnaHQpIHtcclxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXHJcbiAgICAgICAgICAgICAgICBgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9OiB0cmFuc2FjdGlvbiB3ZWlnaHQgZXhjZWVkZWQgYmxvY2sgbGltaXQ6ICR7dGhpcy5fcGF5bG9hZC53ZWlnaHR9ID4gJHt0aGlzLl9wYXlsb2FkLm1heFdlaWdodH0uYFxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBzaWduaW5nIHRoZSB0cmFuc2FjdGlvbiBwYXlsb2FkIGdlbmVyYXRlcyB0aGUgdHJhbnNhY3Rpb24gaGFzaCwgYW5kIHRoZSByZWNlaXB0XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Vwc2VydFRyYW5zYWN0aW9uUmVjZWlwdCh0aGlzLl9zaWduVHJhbnNhY3Rpb25QYXlsb2FkKCksIHRhcmdldCwgXCJzaWduZWRcIikgICAgXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIGNvbmZpcm1UcmFuc2FjdGlvbihcclxuICAgICAgICBoYXNoOiBIYXNoLCBcclxuICAgICAgICBvcHRpb25zPzoge1xyXG4gICAgICAgICAgICBjb25maXJtYXRpb25zPzogbnVtYmVyLFxyXG4gICAgICAgICAgICB0aW1lb3V0U2Vjcz86IG51bWJlcixcclxuICAgICAgICAgICAgb25DaGVja3BvaW50PzogVHJhbnNhY3Rpb25DYWxsYmFjayxcclxuICAgICAgICAgICAgb25TdGF0dXNDaGFuZ2U/OiBUcmFuc2FjdGlvbkNhbGxiYWNrLFxyXG4gICAgICAgIH1cclxuICAgICk6IFByb21pc2U8VHJhbnNhY3Rpb25SZWNlaXB0PiB7XHJcblxyXG4gICAgICAgIGxldCByZWNlaXB0ID0gSnNvblJwY1Byb3ZpZGVyLnJlY2VpcHRzW2hhc2hdXHJcbiAgICAgICAgaWYgKCFyZWNlaXB0IHx8IHJlY2VpcHQuaGFzaCAhPT0gaGFzaCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfTogdHJhbnNhY3Rpb24gbm90IGZvdW5kOiAke2hhc2h9YClcclxuICAgICAgICBcclxuICAgICAgICB9IGVsc2UgaWYgKFtcInNpZ25lZFwiLCBcInBlbmRpbmdcIl0uaW5jbHVkZXMocmVjZWlwdC5zdGF0dXMpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9OiB0cmFuc2FjdGlvbiBzdGF0dXMgXCIke3JlY2VpcHQuc3RhdHVzfVwiOiAke2hhc2h9YClcclxuICAgICAgICBcclxuICAgICAgICB9IGVsc2UgaWYgKHJlY2VpcHQuc3RhdHVzID09PSBcInJlbW92ZWRcIikge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgTWVtcG9vbEVycm9yKHJlY2VpcHQsIGAke3RoaXMuY29uc3RydWN0b3IubmFtZX06IHRyYW5zYWN0aW9uIHJlbW92ZWQgZnJvbSBtZW1wb29sOiAke2hhc2h9YClcclxuICAgICAgICBcclxuICAgICAgICB9IGVsc2UgaWYgKHJlY2VpcHQuc3RhdHVzID09PSBcInJlbGF5ZWRcIiAmJiBvcHRpb25zPy5vblN0YXR1c0NoYW5nZSkgdHJ5IHtcclxuICAgICAgICAgICAgb3B0aW9ucy5vblN0YXR1c0NoYW5nZShyZWNlaXB0KVxyXG4gICAgICAgIH0gY2F0Y2gge307XHJcblxyXG4gICAgICAgIGNvbnN0IGdsb2JhbFRpbWVyID0gKHN0YXJ0OiBudW1iZXIsIG1zOiBudW1iZXIpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChfLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoXHJcbiAgICAgICAgICAgICAgICAgICAgKCkgPT4gcmVqZWN0KGAke3RoaXMuY29uc3RydWN0b3IubmFtZX06IHBvbGxpbmcgdGltZW91dCBhZnRlciAke01hdGguZmxvb3IoKERhdGUubm93KCkgLSBzdGFydCkgLyAxMDAwKX0gc2VjcykuYCksIFxyXG4gICAgICAgICAgICAgICAgICAgIG1zXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IFtjb25maXJtYXRpb25zLCBpbnRlcnZhbCwgdGltZW91dCwgZ2xvYmFsVGltZW91dF0gPSBbXHJcbiAgICAgICAgICAgIG9wdGlvbnM/LmNvbmZpcm1hdGlvbnMgfHwgMCxcclxuICAgICAgICAgICAgMTAwMDAsXHJcbiAgICAgICAgICAgIDUwMDAsXHJcbiAgICAgICAgICAgIChvcHRpb25zPy50aW1lb3V0U2VjcyB8fCA2MDApICogMTAwMCxcclxuICAgICAgICBdO1xyXG5cclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yYWNlKFtcclxuICAgICAgICAgICAgZ2xvYmFsVGltZXIoRGF0ZS5ub3coKSwgZ2xvYmFsVGltZW91dClcclxuICAgICAgICAgICAgICAgIC5jYXRjaCgocmVhc29uOiBhbnkpID0+IHsgdGhyb3cgbmV3IFRpbWVvdXRFcnJvcihnbG9iYWxUaW1lb3V0LCByZWNlaXB0LCByZWFzb24pIH0pLFxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgcHJvbWlzZVBvbGxlcih7XHJcbiAgICAgICAgICAgICAgICB0YXNrRm46ICgpID0+IHRoaXMucHJvdmlkZXIuZ2V0VHJhbnNhY3Rpb24oaGFzaCksXHJcbiAgICAgICAgICAgICAgICBzaG91bGRDb250aW51ZTogKGVycm9yOiBhbnksIHJlcG9ydDogVHJhbnNhY3Rpb25SZXBvcnQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGF0dXMgPSByZWNlaXB0LnN0YXR1c1xyXG4gICAgICAgICAgICAgICAgICAgIHJlY2VpcHQuZXJyb3IgPSBlcnJvclxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmIGVycm9yLm1lc3NhZ2UuaW5kZXhPZihcIm5vdCBmb3VuZFwiKSA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlY2VpcHQuc3RhdHVzID0gXCJyZW1vdmVkXCJcclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugc3dpdGNoIChyZWNlaXB0LnN0YXR1cykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwicmVsYXllZFwiOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcG9ydD8uYmxvY2tIYXNoICYmIGlzSGV4U3RyaW5nKHJlcG9ydC5ibG9ja0hhc2gpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjZWlwdC5jb25maXJtYXRpb25zID0gcmVwb3J0LmNvbmZpcm1hdGlvbnNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNlaXB0LmJsb2NrSGFzaCA9IHJlcG9ydC5ibG9ja0hhc2gsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjZWlwdC5ibG9ja0Vwb2NoID0gcmVwb3J0LmJsb2NrRXBvY2gsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjZWlwdC5ibG9ja1RpbWVzdGFtcCA9IHJlcG9ydC5ibG9ja1RpbWVzdGFtcFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2VpcHQuc3RhdHVzID0gKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBvcnQuY29uZmlybWVkIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBcImZpbmFsaXplZFwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAocmVwb3J0Py5jb25maXJtYXRpb25zID49IGNvbmZpcm1hdGlvbnMgPyBcImNvbmZpcm1lZFwiIDogXCJtaW5lZFwiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJtaW5lZFwiOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXBvcnQ/LmJsb2NrSGFzaCB8fCByZXBvcnQuYmxvY2tIYXNoICE9PSByZWNlaXB0LmJsb2NrSGFzaCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSByZWNlaXB0LmJsb2NrSGFzaFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSByZWNlaXB0LmJsb2NrRXBvY2hcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgcmVjZWlwdC5ibG9ja01pbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHJlY2VpcHQuYmxvY2tUaW1lc3RhbXBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNlaXB0LnN0YXR1cyA9IFwicmVsYXllZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjZWlwdC5zdGF0dXMgPSAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydC5jb25maXJtZWQgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFwiZmluYWxpemVkXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IChyZXBvcnQ/LmNvbmZpcm1hdGlvbnMgPj0gY29uZmlybWF0aW9ucyA/IFwiY29uZmlybWVkXCIgOiBcIm1pbmVkXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVwb3J0Py5jb25maXJtYXRpb25zICE9PSByZWNlaXB0LmNvbmZpcm1hdGlvbnMpIHsgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2VpcHQuY29uZmlybWF0aW9ucyA9IHJlcG9ydC5jb25maXJtYXRpb25zXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWNlaXB0LnN0YXR1cyA9PT0gXCJtaW5lZFwiICYmIG9wdGlvbnM/Lm9uQ2hlY2twb2ludCkgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMub25DaGVja3BvaW50KHJlY2VpcHQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2gge307XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyAhPT0gcmVjZWlwdC5zdGF0dXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVjZWlwdC50aW1lc3RhbXAgPSBNYXRoLmZsb29yKERhdGUubm93KCkgLyAxMDAwKSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFbXCJjb25maXJtZWRcIiwgXCJmaW5hbGl6ZWRcIl0uaW5jbHVkZXMocmVjZWlwdC5zdGF0dXMpICYmIG9wdGlvbnM/Lm9uU3RhdHVzQ2hhbmdlKSB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5vblN0YXR1c0NoYW5nZShyZWNlaXB0KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIHt9O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBKc29uUnBjUHJvdmlkZXIucmVjZWlwdHNbaGFzaF0gPSByZWNlaXB0XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtcInJlbGF5ZWRcIiwgXCJtaW5lZFwiXS5pbmNsdWRlcyhyZWNlaXB0LnN0YXR1cylcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBpbnRlcnZhbCwgdGltZW91dCwgXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9KS50aGVuKGFzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChyZWNlaXB0LnN0YXR1cyA9PT0gXCJyZW1vdmVkXCIgJiYgcmVjZWlwdC50eXBlICE9PSBcIlVuc3Rha2VcIikge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIFRSQU5TQUNUSU9OIFJFTU9WRUQgRlJPTSBNRU1QT09MIC8vXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gMS4gVHJ5IHRvIHJlY292ZXIgaW5wdXQgdXR4b3MgYmVsb25naW5nIHRvIGxlZGdlcidzIGFkZHJlc3NlczpcclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnB1dHM6IEFycmF5PFV0eG9NZXRhZGF0YT4gPSByZWNlaXB0LnR4W3JlY2VpcHQudHlwZV0uYm9keS5pbnB1dHNcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2lnbmF0dXJlczogQXJyYXk8S2V5ZWRTaWduYXR1cmU+ID0gcmVjZWlwdC50eFtyZWNlaXB0LnR5cGVdLnNpZ25hdHVyZXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXR4b3M6IEFycmF5PFV0eG8+ID0gW11cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0cy5sZW5ndGggPT09IHNpZ25hdHVyZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dHMuZm9yRWFjaCgobWV0YWRhdGEsIGluZGV4KSA9PiAoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLm1ldGFkYXRhLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25lcjogUHVibGljS2V5LmZyb21Qcm90b2J1ZihzaWduYXR1cmVzW2luZGV4XS5wdWJsaWNfa2V5KS5oYXNoKCkudG9CZWNoMzIodGhpcy5uZXR3b3JrKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGVkZ2VyLmFkZFV0eG9zKC4uLnV0eG9zKVxyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGAke3RoaXMuY29uc3RydWN0b3IubmFtZX06IHdhcm5pbmc6IGNhbm5vdCByZWNvdmVyIGlucHV0IFVUWE9TIGZyb20gdHggJHtoYXNofTogJHtlcnJ9YClcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gMi4gVGhyb3cgTWVtcG9vbEVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IE1lbXBvb2xFcnJvcihyZWNlaXB0LCBgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9OiB0cmFuc2FjdGlvbiByZW1vdmVkIGZyb20gbWVtcG9vbDogJHtoYXNofWApO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIFRSQU5TQUNUSU9OIEVJVEhFUiBDT05GSVJNRUQgT1IgRklOQUxJWkVEIC8vXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gMS4gVHJ5IHRvIGxvYWQgdmFsdWUgdHJhbnNmZXIgb3V0cHV0cyBpbnRvIHRoZSBsZWRnZXIncyBsb2NhbCBjYWNoZTogXHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXR4b3M6IEFycmF5PFV0eG8+ID0gW11cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFtcIlN0YWtlXCIsIFwiVW5zdGFrZVwiXS5pbmNsdWRlcyhyZWNlaXB0LnR5cGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdnRvOiBWYWx1ZVRyYW5zZmVyT3V0cHV0ID0gKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2VpcHQudHlwZSA9PT0gXCJTdGFrZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gcmVjZWlwdC50eFtyZWNlaXB0LnR5cGVdLmJvZHk/Lm91dHB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHJlY2VpcHQudHhbcmVjZWlwdC50eXBlXS5ib2R5Py53aXRoZHJhd2FsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZ0bykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV0eG9zLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfcG9pbnRlcjogYCR7cmVjZWlwdC5oYXNofTowYCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZWxvY2s6IHZ0by50aW1lX2xvY2ssXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV0eG9fbWF0dXJlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogQmlnSW50KHZ0by52YWx1ZSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25lcjogdnRvLnBraCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3V0cHV0czogQXJyYXk8VmFsdWVUcmFuc2Zlck91dHB1dD4gPSByZWNlaXB0LnR4W3JlY2VpcHQudHlwZV0uYm9keT8ub3V0cHV0cyB8fCBbXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0cy5mb3JFYWNoKCh2dG8sIGluZGV4KSA9PiB1dHhvcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfcG9pbnRlcjogYCR7cmVjZWlwdC5oYXNofToke2luZGV4fWAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZWxvY2s6IHZ0by50aW1lX2xvY2ssXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXR4b19tYXR1cmU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IEJpZ0ludCh2dG8udmFsdWUpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25lcjogdnRvLnBraCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwib3V0cHV0IHV0eG9zIGJlZm9yZSA9PlwiLCB1dHhvcylcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJvdXRwdXQgdXR4b3MgYWZ0ZXIgID0+XCIsIHRoaXMubGVkZ2VyLmFkZFV0eG9zKC4uLnV0eG9zKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sZWRnZXIuYWRkVXR4b3MoLi4udXR4b3MpXHJcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfTogd2FybmluZzogY2Fubm90IHJlY292ZXIgb3V0cHV0IFVUWE9zIGZyb20gJHtoYXNofTogJHtlcnJ9YClcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gMi4gQWRkIGJsb2NrTWluZXIgYWRkcmVzcyB0byB0aGUgdHJhbnNhY3Rpb24gcmVjZWlwdDogXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlY2VpcHQ/LmJsb2NrSGFzaCAmJiBpc0hleFN0cmluZyhyZWNlaXB0LmJsb2NrSGFzaCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmxvY2sgPSBhd2FpdCB0aGlzLnByb3ZpZGVyLmdldEJsb2NrKHJlY2VpcHQuYmxvY2tIYXNoIHx8IFwiXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEpzb25ScGNQcm92aWRlci5yZWNlaXB0c1toYXNoXS5ibG9ja01pbmVyID0gUHVibGljS2V5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZnJvbVByb3RvYnVmKGJsb2NrLmJsb2NrX3NpZy5wdWJsaWNfa2V5KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmhhc2goKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRvQmVjaDMyKHRoaXMubmV0d29yayk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zPy5vblN0YXR1c0NoYW5nZSkgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5vblN0YXR1c0NoYW5nZShyZWNlaXB0KVxyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2gge307XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gMy4gUmV0dXJuIHRyYW5zYWN0aW9uIHJlY2VpcHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpzb25ScGNQcm92aWRlci5yZWNlaXB0c1toYXNoXVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIF0pXHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9jbGVhblNpZ25hdHVyZXMobmV3VGFyZ2V0OiBTcGVjcyk6IGFueSB7XHJcbiAgICAgICAgdGhpcy5fcGF5bG9hZC5yZXNldFRhcmdldChuZXdUYXJnZXQpXHJcbiAgICAgICAgdGhpcy5fc2lnbmF0dXJlcyA9IFtdXHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9nZXRJbmZsaWdodEJ5dGVjb2RlKCk6IFVpbnQ4QXJyYXkgfCB1bmRlZmluZWQge1xyXG4gICAgICAgIGNvbnN0IG9iaiA9IHRoaXMuX3RvUHJvdG9idWYoKVxyXG4gICAgICAgIGNvbnN0IGVyciA9IHRoaXMuX3Byb3RvQnVmLnZlcmlmeShvYmopXHJcbiAgICAgICAgaWYgKCFlcnIpIHtcclxuICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IHRoaXMuX3Byb3RvQnVmLmZyb21PYmplY3Qob2JqKVxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcHJvdG9CdWYuZW5jb2RlKG1lc3NhZ2UpLmZpbmlzaCgpXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX2dldEluZmxpZ2h0UmVjZWlwdCgpOiBUcmFuc2FjdGlvblJlY2VpcHQgfCB1bmRlZmluZWQge1xyXG4gICAgICAgIGNvbnN0IGhhc2ggPSB0aGlzLl9wYXlsb2FkLmhhc2hcclxuICAgICAgICBpZiAoaGFzaCkge1xyXG4gICAgICAgICAgICByZXR1cm4gSnNvblJwY1Byb3ZpZGVyLnJlY2VpcHRzW2hhc2hdXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX2dldEluZmxpZ2h0VHJhbnNtaXNzaW9uKCk6IFRyYW5zbWlzc2lvbiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgYnl0ZWNvZGU6IHRoaXMuX2dldEluZmxpZ2h0Qnl0ZWNvZGUoKSxcclxuICAgICAgICAgICAgaGFzaDogdGhpcy5fcGF5bG9hZC5oYXNoLFxyXG4gICAgICAgICAgICBtZXNzYWdlOiB0aGlzLl90b0pTT04odHJ1ZSksXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfcmVjb3ZlcklucHV0VXR4b3MoKTogYW55IHt9XHJcbiAgICBwcm90ZWN0ZWQgX3JlY292ZXJPdXRwdXRVdHhvcygpOiBhbnkge31cclxuXHJcbiAgICBwcm90ZWN0ZWQgX3Vwc2VydFRyYW5zYWN0aW9uUmVjZWlwdChoYXNoOiBIYXNoLCB0YXJnZXQ6IFNwZWNzLCBzdGF0dXM6IFRyYW5zYWN0aW9uU3RhdHVzKTogVHJhbnNhY3Rpb25SZWNlaXB0IHtcclxuICAgICAgICBKc29uUnBjUHJvdmlkZXIucmVjZWlwdHNbaGFzaF0gPSB7XHJcbiAgICAgICAgICAgIC4uLnRoaXMuX3BheWxvYWQuaW50b1JlY2VpcHQodGFyZ2V0LCB0aGlzLm5ldHdvcmspLFxyXG4gICAgICAgICAgICBoYXNoLFxyXG4gICAgICAgICAgICBjaGFuZ2U6IHRoaXMuX3BheWxvYWQuY2hhbmdlLFxyXG4gICAgICAgICAgICBmZWVzOiB0aGlzLl9wYXlsb2FkLmZlZXMsXHJcbiAgICAgICAgICAgIGZyb206IHRoaXMuX2Zyb20sXHJcbiAgICAgICAgICAgIHN0YXR1cyxcclxuICAgICAgICAgICAgdGltZXN0YW1wOiBNYXRoLmZsb29yKERhdGUubm93KCkgLyAxMDAwKSxcclxuICAgICAgICAgICAgdHg6IHRoaXMuX3RvSlNPTih0cnVlKSxcclxuICAgICAgICAgICAgdHlwZTogdGhpcy50eXBlLFxyXG4gICAgICAgICAgICB2YWx1ZTogdGhpcy5fcGF5bG9hZC52YWx1ZSxcclxuICAgICAgICAgICAgd2VpZ2h0OiB0aGlzLl9wYXlsb2FkLndlaWdodCxcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIEpzb25ScGNQcm92aWRlci5yZWNlaXB0c1toYXNoXVxyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBhYnN0cmFjdCBfc2lnblRyYW5zYWN0aW9uUGF5bG9hZCgpOiBIYXNoO1xyXG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IF90b0pTT04oX2h1bWFuaXplOiBib29sZWFuKTogYW55O1xyXG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IF90b1Byb3RvYnVmKCk6IGFueTtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBUcmFuc21pdHRlck11bHRpU2lnPFNwZWNzLCBQYXlsb2FkIGV4dGVuZHMgSVRyYW5zYWN0aW9uUGF5bG9hZE11bHRpU2lnPFNwZWNzPj4gXHJcbiAgICBleHRlbmRzIFRyYW5zbWl0dGVyPFNwZWNzLCBQYXlsb2FkPiBcclxue1xyXG4gICAgY29uc3RydWN0b3IgKHByb3RvVHlwZU5hbWU6IHN0cmluZywgcGF5bG9hZDogUGF5bG9hZCwgbGVkZ2VyOiBJTGVkZ2VyLCBjaGFuZ2VQa2g/OiBQdWJsaWNLZXlIYXNoU3RyaW5nKSB7XHJcbiAgICAgICAgc3VwZXIocHJvdG9UeXBlTmFtZSwgcGF5bG9hZCwgbGVkZ2VyLCBjaGFuZ2VQa2gpXHJcbiAgICAgICAgdGhpcy5fcGF5bG9hZCA9IHBheWxvYWQ7XHJcbiAgICB9XHJcblxyXG4gICAgLy8vIFJlY292ZXIgZm9ybWVybHkgY29uc3VtZWQgVVRYT3MgYnkgYSBmYWlsaW5nIHRyYW5zYWN0aW9uIGJhY2sgdG8gdGhlaXIgcmVzcGVjdGl2ZSBzaWduZXIncyBVVFhPIHBvb2xcclxuICAgIHByb3RlY3RlZCBfcmVjb3ZlcklucHV0VXR4b3MoKTogYW55IHtcclxuICAgICAgICBpZiAodGhpcy5fcGF5bG9hZC5pbnB1dHMpIHsgICAgXHJcbiAgICAgICAgICAgIHRoaXMubGVkZ2VyLmFkZFV0eG9zKC4uLnRoaXMuX3BheWxvYWQuaW5wdXRzKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLy8gUmVjb3ZlciBzZWxmLXRhcmdldGVkIG91dHB1dHMgYXMgZXhwZW5kYWJsZSB1dHhvcyBvbiB0aGVpciByZXNwZWN0aXZlIHNpZ25lcidzIG1lbW9pemVkIGNhY2hlXHJcbiAgICBwcm90ZWN0ZWQgX3JlY292ZXJPdXRwdXRVdHhvcygpOiBhbnkge1xyXG4gICAgICAgIGlmICh0aGlzLl9wYXlsb2FkLmhhc2ggJiYgdGhpcy5fcGF5bG9hZC5vdXRwdXRzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHV0eG9zOiBBcnJheTxVdHhvPiA9IFtdXHJcbiAgICAgICAgICAgIHRoaXMuX3BheWxvYWQub3V0cHV0cy5mb3JFYWNoKCh2dG8sIGluZGV4KSA9PiB7ICAgIFxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubGVkZ2VyLmdldFNpZ25lcih2dG8ucGtoKSkgdXR4b3MucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgc2lnbmVyOiB2dG8ucGtoLFxyXG4gICAgICAgICAgICAgICAgICAgIG91dHB1dF9wb2ludGVyOiBgJHt0aGlzLl9wYXlsb2FkLmhhc2h9OiR7aW5kZXh9YCxcclxuICAgICAgICAgICAgICAgICAgICB0aW1lbG9jazogdnRvLnRpbWVfbG9jayxcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdnRvLnZhbHVlLFxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgdGhpcy5sZWRnZXIuYWRkVXR4b3MoLi4udXR4b3MpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfc2lnblRyYW5zYWN0aW9uUGF5bG9hZCgpOiBIYXNoIHtcclxuICAgICAgICBjb25zdCBoYXNoID0gdGhpcy5fcGF5bG9hZC5oYXNoXHJcbiAgICAgICAgaWYgKCFoYXNoKSB7XHJcbiAgICAgICAgICAgIHRocm93IEVycm9yKFxyXG4gICAgICAgICAgICAgICAgYCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfTogaW50ZXJuYWwgZXJyb3I6IHVuYWJsZSB0byBoYXNoaWZ5IHBheWxvYWQ6ICR7dGhpcy5fcGF5bG9hZC50b0pTT04odHJ1ZSwgdGhpcy5uZXR3b3JrKX19LmBcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3BheWxvYWQuaW5wdXRzLmZvckVhY2godXR4byA9PiB7IFxyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2lnbmVyID0gdGhpcy5sZWRnZXIuZ2V0U2lnbmVyKHV0eG8uc2lnbmVyKVxyXG4gICAgICAgICAgICAgICAgaWYgKCFzaWduZXIpIHRocm93IEVycm9yKFxyXG4gICAgICAgICAgICAgICAgICAgIGAke3RoaXMuY29uc3RydWN0b3IubmFtZX06IGludGVybmFsIGVycm9yOiBjYW5ub3QgZmluZCBTaWduZXIgJHt1dHhvLnNpZ25lcn0gaW4gJHt0aGlzLmxlZGdlci5jb25zdHJ1Y3Rvci5uYW1lfSAke3RoaXMubGVkZ2VyLnBraH0uYCAgICBcclxuICAgICAgICAgICAgICAgICk7IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGAuLi5zaWduZXIgJHtzaWduZXIucGtofSBzaWduaW5nIGhhc2ggJHtoYXNofS4uLmApXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2lnbmF0dXJlcy5wdXNoKHNpZ25lci5zaWduSGFzaChoYXNoKSkgXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIHJldHVybiBoYXNoXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfdG9KU09OKGh1bWFuaXplOiBib29sZWFuKTogYW55IHtcclxuICAgICAgICByZXR1cm4geyBcclxuICAgICAgICAgICAgW3RoaXMudHlwZV06IHsgXHJcbiAgICAgICAgICAgICAgICBib2R5OiB0aGlzLl9wYXlsb2FkLnRvSlNPTihodW1hbml6ZSwgdGhpcy5uZXR3b3JrKSxcclxuICAgICAgICAgICAgICAgIHNpZ25hdHVyZXM6IHRoaXMuX3NpZ25hdHVyZXMsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfdG9Qcm90b2J1ZigpOiBhbnkge1xyXG4gICAgICAgIGNvbnN0IGJvZHkgPSB0aGlzLl9wYXlsb2FkLnRvUHJvdG9idWYoKVxyXG4gICAgICAgIGlmIChib2R5ICYmIHRoaXMuX3NpZ25hdHVyZXMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGJvZHksXHJcbiAgICAgICAgICAgICAgICBzaWduYXR1cmVzOiB0aGlzLl9zaWduYXR1cmVzLFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiJdfQ==
|
|
417
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNtaXR0ZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9jcnlwdG8vdHJhbnNtaXR0ZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQztBQUV4RCwyQ0FBaUU7QUFDakUsTUFBTSxTQUFTLEdBQUcsaUJBQVMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLG1DQUFtQyxDQUFDLENBQUMsQ0FBQTtBQUdsRixnQ0FBd0M7QUFFeEMsb0NBQXVDO0FBVXZDLG1DQVlnQjtBQUVoQixNQUFzQixXQUFXO0lBVTdCLFlBQWEsYUFBcUIsRUFBRSxPQUFnQixFQUFFLE1BQWUsRUFBRSxTQUErQjtRQUg1RixnQkFBVyxHQUEwQixFQUFFLENBQUE7UUFDdkMsa0JBQWEsR0FBZ0IsRUFBRSxDQUFBO1FBR3JDLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQTtRQUNwRCxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztRQUN4QixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQTtRQUNwQixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUMzQixNQUFNLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSx5Q0FBeUMsQ0FBQyxDQUFBO1FBQ3RGLENBQUM7UUFDRCxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFBO1FBQzlDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQ3BDLE1BQU0sU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLCtDQUErQyxJQUFJLENBQUMsU0FBUyxH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RSxNQUFNLEtBQUssQ0FDcEIsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksd0NBQXdDLElBQUksQ0FBQyxNQUFNLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQ3ZJLENBQUM7cUJBQU0sQ0FBQztvQkFDTCxpRUFBaUU7b0JBQ2pFLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtnQkFDaEQsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFBO1lBQ0YsT0FBTyxJQUFJLENBQUE7UUFDZixDQUFDO0lBQ0wsQ0FBQztJQUVTLE9BQU8sQ0FBQyxRQUFpQjtRQUMvQixPQUFPO1lBQ0gsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ1QsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDO2dCQUNsRCxVQUFVLEVBQUUsSUFBSSxDQUFDLFdBQVc7YUFDL0I7U0FDSixDQUFBO0lBQ0wsQ0FBQztJQUVTLFdBQVc7UUFDakIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQTtRQUN2QyxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDM0IsT0FBTztnQkFDSCxJQUFJO2dCQUNKLFVBQVUsRUFBRSxJQUFJLENBQUMsV0FBVzthQUMvQixDQUFBO1FBQ0wsQ0FBQztJQUNMLENBQUM7Q0FDSjtBQXJFRCxrREFxRUMiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBwcm9taXNlUG9sbGVyID0gcmVxdWlyZSgncHJvbWlzZS1wb2xsZXInKS5kZWZhdWx0O1xyXG5cclxuaW1wb3J0IHsgUm9vdCBhcyBQcm90b1Jvb3QsIFR5cGUgYXMgUHJvdG9UeXBlIH0gZnJvbSBcInByb3RvYnVmanNcIlxyXG5jb25zdCBwcm90b1Jvb3QgPSBQcm90b1Jvb3QuZnJvbUpTT04ocmVxdWlyZShcIi4uLy4uLy4uL3dpdG5ldC93aXRuZXQucHJvdG8uanNvblwiKSkgXHJcblxyXG5pbXBvcnQgeyBUcmFuc2FjdGlvblJlcG9ydCwgVXR4b01ldGFkYXRhLCBWYWx1ZVRyYW5zZmVyT3V0cHV0IH0gZnJvbSBcIi4uL3JwYy90eXBlc1wiXHJcbmltcG9ydCB7IEpzb25ScGNQcm92aWRlciB9IGZyb20gXCIuLi9ycGNcIlxyXG5pbXBvcnQgeyBIYXNoLCBOZXR3b3JrIH0gZnJvbSBcIi4uL3R5cGVzXCJcclxuaW1wb3J0IHsgaXNIZXhTdHJpbmcgfSBmcm9tIFwiLi4vdXRpbHNcIjtcclxuXHJcbmltcG9ydCB7IFxyXG4gICAgSUxlZGdlcixcclxuICAgIElKc29uUnBjUHJvdmlkZXIsIFxyXG4gICAgSVRyYW5zbWl0dGVyLCBcclxuICAgIElUcmFuc2FjdGlvblBheWxvYWQsIFxyXG4gICAgSVRyYW5zYWN0aW9uUGF5bG9hZE11bHRpU2lnLCBcclxufSBmcm9tIFwiLi9pbnRlcmZhY2VzXCJcclxuXHJcbmltcG9ydCB7IFxyXG4gICAgS2V5ZWRTaWduYXR1cmUsIFxyXG4gICAgUHVibGljS2V5LCBcclxuICAgIFB1YmxpY0tleUhhc2hTdHJpbmcsIFxyXG4gICAgTWVtcG9vbEVycm9yLFxyXG4gICAgVHJhbnNhY3Rpb25DYWxsYmFjaywgXHJcbiAgICBUcmFuc2FjdGlvblJlY2VpcHQsIFxyXG4gICAgVHJhbnNhY3Rpb25TdGF0dXMsIFxyXG4gICAgVGltZW91dEVycm9yLFxyXG4gICAgVHJhbnNtaXNzaW9uLFxyXG4gICAgVHJhbnNtaXNzaW9uRXJyb3IsXHJcbiAgICBVdHhvLFxyXG59IGZyb20gXCIuL3R5cGVzXCJcclxuXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBUcmFuc21pdHRlcjxTcGVjcywgUGF5bG9hZCBleHRlbmRzIElUcmFuc2FjdGlvblBheWxvYWQ8U3BlY3M+PiBpbXBsZW1lbnRzIElUcmFuc21pdHRlciB7XHJcbiAgICBcclxuICAgIHB1YmxpYyByZWFkb25seSBsZWRnZXI6IElMZWRnZXI7XHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgY2hhbmdlUGtoOiBQdWJsaWNLZXlIYXNoU3RyaW5nO1xyXG4gICAgXHJcbiAgICBwcm90ZWN0ZWQgX3BheWxvYWQ6IFBheWxvYWQ7XHJcbiAgICBwcm90ZWN0ZWQgX3Byb3RvQnVmOiBQcm90b1R5cGU7XHJcbiAgICBwcm90ZWN0ZWQgX3NpZ25hdHVyZXM6IEFycmF5PEtleWVkU2lnbmF0dXJlPiA9IFtdXHJcbiAgICBwcm90ZWN0ZWQgX3RyYW5zYWN0aW9uczogQXJyYXk8SGFzaD4gPSBbXVxyXG5cclxuICAgIGNvbnN0cnVjdG9yIChwcm90b1R5cGVOYW1lOiBzdHJpbmcsIHBheWxvYWQ6IFBheWxvYWQsIGxlZGdlcjogSUxlZGdlciwgY2hhbmdlUGtoPzogUHVibGljS2V5SGFzaFN0cmluZykge1xyXG4gICAgICAgIHRoaXMuX3Byb3RvQnVmID0gcHJvdG9Sb290Lmxvb2t1cFR5cGUocHJvdG9UeXBlTmFtZSlcclxuICAgICAgICB0aGlzLl9wYXlsb2FkID0gcGF5bG9hZDtcclxuICAgICAgICB0aGlzLmxlZGdlciA9IGxlZGdlclxyXG4gICAgICAgIGlmICghbGVkZ2VyLnByb3ZpZGVyLm5ldHdvcmspIHtcclxuICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKGAke3RoaXMuY29uc3RydWN0b3IubmFtZX06IGxlZGdlcidzIHByb3ZpZGVyIGlzIG5vdCBpbml0aWFsaXplZC5gKVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNoYW5nZVBraCA9IGNoYW5nZVBraCB8fCBsZWRnZXIuY2hhbmdlUGtoXHJcbiAgICAgICAgaWYgKCFsZWRnZXIuZ2V0U2lnbmVyKHRoaXMuY2hhbmdlUGtoKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoYCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfTogbGVkZ2VyIGhvbGRzIG5vIFNpZ25lciBmb3IgY2hhbmdlIGFkZHJlc3MgJHt0aGlzLmNoYW5nZVBraH0uYClcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBwYXlsb2FkKCk6IFBheWxvYWQgfCB1bmRlZmluZWQge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wYXlsb2FkLnByZXBhcmVkID8gdGhpcy5fcGF5bG9hZCA6IHVuZGVmaW5lZFxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgcHJvdmlkZXIoKTogSUpzb25ScGNQcm92aWRlciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubGVkZ2VyLnByb3ZpZGVyXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBuZXR3b3JrKCk6IE5ldHdvcmsge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnByb3ZpZGVyLm5ldHdvcmsgfHwgXCJtYWlubmV0XCJcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IHRyYW5zYWN0aW9ucygpOiBBcnJheTxIYXNoPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zYWN0aW9uc1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgdHlwZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wYXlsb2FkLmNvbnN0cnVjdG9yLm5hbWUuc3BsaXQoLyhbYS16XSg/PVtBLVpdKSkvZykuc2xpY2UoMCwgLTEpLmpvaW4oXCJcIilcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgZ2V0IF9mcm9tKCk6IEFycmF5PFB1YmxpY0tleUhhc2hTdHJpbmc+IHwgdW5kZWZpbmVkIHtcclxuICAgICAgICBpZiAodGhpcy5fc2lnbmF0dXJlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zaWduYXR1cmVzXHJcbiAgICAgICAgICAgICAgICAubWFwKGtzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwa2ggPSBQdWJsaWNLZXkuZnJvbVByb3RvYnVmKGtzLnB1YmxpY19rZXkpLmhhc2goKS50b0JlY2gzMih0aGlzLm5ldHdvcmspXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubGVkZ2VyLmdldFNpZ25lcihwa2gpPy5wa2ggfHwgdGhpcy5sZWRnZXIucGtoXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgLy8gYXZvaWQgcmVwZXRpdGlvbnNcclxuICAgICAgICAgICAgICAgIC5maWx0ZXIoKHBraCwgaW5kZXgsIGFycmF5KSA9PiBpbmRleCA9PT0gYXJyYXkuaW5kZXhPZihwa2gpKVxyXG4gICAgICAgIFxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWRcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGdldCBfcHJlcGFyZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgdGhpcy5fcGF5bG9hZC5wcmVwYXJlZFxyXG4gICAgICAgICAgICAgICAgJiYgISF0aGlzLl9zaWduYXR1cmVzXHJcbiAgICAgICAgICAgICAgICAmJiB0aGlzLl9zaWduYXR1cmVzLmxlbmd0aCA+IDBcclxuICAgICAgICApXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIHNlbmRUcmFuc2FjdGlvbih0YXJnZXQ/OiBTcGVjcyk6IFByb21pc2U8VHJhbnNhY3Rpb25SZWNlaXB0PiB7XHJcbiAgICAgICAgbGV0IHJlY2VpcHQgPSB0aGlzLl9nZXRJbmZsaWdodFJlY2VpcHQoKVxyXG4gICAgICAgIGlmICghcmVjZWlwdCB8fCB0YXJnZXQpIHtcclxuICAgICAgICAgICAgLy8gaWYgaW5mbGlnaHQgbm90IHlldCBwcmVwYXJlZCwgb3IgcHJlcGFyZWQgYnV0IG5vdCB5ZXQgdHJhbnNtaXR0ZWQsXHJcbiAgICAgICAgICAgIC8vIHByZXBhcmUgYSBuZXcgaW5mbGlnaHQgZWl0aGVyIHdpdGggc3BlY2lmaWVkIHBhcmFtcyAoaWYgYW55KSxcclxuICAgICAgICAgICAgLy8gb3IgcHJldmlvdXNseSBwcmVwYXJlZCBpbmZsaWdodCAoaWYga25vd24pLlxyXG4gICAgICAgICAgICByZWNlaXB0ID0gYXdhaXQgdGhpcy5zaWduVHJhbnNhY3Rpb24odGFyZ2V0IHx8IHJlY2VpcHQgYXMgU3BlY3MpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChyZWNlaXB0Py5zdGF0dXMgJiYgcmVjZWlwdC5zdGF0dXMgIT09IFwic2lnbmVkXCIgJiYgIXJlY2VpcHQ/LmVycm9yKSB7XHJcbiAgICAgICAgICAgIC8vIGlmIGN1cnJlbnQgaW5mbGlnaHQgd2FzIGFscmVhZHkgdHJhbnNtaXR0ZWQgYW5kIGl0J3Mgbm90IHlldCBrbm93biB0byBmYWlsIC4uLlxyXG4gICAgICAgICAgICByZXR1cm4gcmVjZWlwdFxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBpZiB3ZSByZWFjaCB0aGlzIHBvaW50IGlzIGJlY2F1c2UgYW4gaW5mbGlnaHQgdHJhbnNhY3Rpb24gaXMgXHJcbiAgICAgICAgLy8gcmVhZHkgdG8gYmUgdHJhbnNtaXR0ZWRcclxuICAgICAgICBKc29uUnBjUHJvdmlkZXIucmVjZWlwdHNbcmVjZWlwdC5oYXNoXS5zdGF0dXMgPSBcInBlbmRpbmdcIlxyXG4gICAgICAgIGRlbGV0ZSBKc29uUnBjUHJvdmlkZXIucmVjZWlwdHNbcmVjZWlwdC5oYXNoXS5lcnJvclxyXG4gICAgICAgIHJldHVybiB0aGlzLnByb3ZpZGVyXHJcbiAgICAgICAgICAgIC5zZW5kUmF3VHJhbnNhY3Rpb24odGhpcy5fdG9KU09OKGZhbHNlKSlcclxuICAgICAgICAgICAgLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBUcmFuc21pc3Npb25FcnJvcih0aGlzLl9nZXRJbmZsaWdodFRyYW5zbWlzc2lvbigpLCBlcnIpXHJcbiAgICAgICAgICAgICAgICBKc29uUnBjUHJvdmlkZXIucmVjZWlwdHNbcmVjZWlwdC5oYXNoXS5lcnJvciA9IGVycm9yXHJcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvclxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAudGhlbihhY2NlcHRlZCA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYWNjZXB0ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBKc29uUnBjUHJvdmlkZXIucmVjZWlwdHNbcmVjZWlwdC5oYXNoXS5zdGF0dXMgPSBcInJlbGF5ZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBKc29uUnBjUHJvdmlkZXIucmVjZWlwdHNbcmVjZWlwdC5oYXNoXVxyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBUcmFuc21pc3Npb25FcnJvcih0aGlzLl9nZXRJbmZsaWdodFRyYW5zbWlzc2lvbigpLCBFcnJvcihgUmVqZWN0ZWQgZm9yIHVua25vd24gcmVhc29uc2ApKVxyXG4gICAgICAgICAgICAgICAgICAgIEpzb25ScGNQcm92aWRlci5yZWNlaXB0c1tyZWNlaXB0Lmhhc2hdLmVycm9yID0gZXJyb3JcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnJvclxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBzaWduVHJhbnNhY3Rpb24odGFyZ2V0PzogU3BlY3MsIHJlbG9hZFV0eG9zID0gZmFsc2UpOiBQcm9taXNlPFRyYW5zYWN0aW9uUmVjZWlwdD4ge1xyXG4gICAgICAgIHRhcmdldCA9IGF3YWl0IHRoaXMuX3BheWxvYWQudmFsaWRhdGVUYXJnZXQodGFyZ2V0KVxyXG4gICAgICAgIGlmICghdGFyZ2V0KSB7XHJcbiAgICAgICAgICAgIC8vIGUuZy4gaWYgY2FsbGVkIGZyb20gdGhpcy5zZW5kKCkgd2l0aCBubyBwYXJhbXNcclxuICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKGAke3RoaXMuY29uc3RydWN0b3IubmFtZX06IGNhbm5vdCBzaWduIGEgdHJhbnNhY3Rpb24gaWYgbm8gcGFyYW1zIHdlcmUgcHJldmlvdXNseSBzcGVjaWZpZWQuYClcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgY29uc3QgaW5mbGlnaHQgPSB0aGlzLl9nZXRJbmZsaWdodFJlY2VpcHQoKVxyXG4gICAgICAgIGlmIChpbmZsaWdodCkge1xyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcInNpZ24ucGVuZGluZ1JlY2VpcHQgPT5cIiwgaW5mbGlnaHQpXHJcbiAgICAgICAgICAgIGlmICghaW5mbGlnaHQ/LnN0YXR1cyB8fCBpbmZsaWdodC5zdGF0dXMgPT09IFwic2lnbmVkXCIpIHtcclxuICAgICAgICAgICAgICAgIC8vIHJlY292ZXIgaW5wdXQgdXR4b3MgaWYgcHJldmlvdXNseSBzaWduZWQgcGFyYW1zIHdlcmUgbm90IGV2ZW4gYXR0ZW1wdGVkIHRvIGJlIHNlbnRcclxuICAgICAgICAgICAgICAgIGlmICghcmVsb2FkVXR4b3MpIHRoaXMuX3JlY292ZXJJbnB1dFV0eG9zKClcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5mbGlnaHQuc3RhdHVzID09PSBcInBlbmRpbmdcIiAmJiAhaW5mbGlnaHQuZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIC8vIHRocm93IGV4Y2VwdGlvbiBpZiBhIGZvcm1lcmx5IHNpZ25lZCB0cmFuc2FjdGlvbiBpcyBzdGlsbCB3YWl0aW5nIHRvIGJlIHJlbGF5ZWQgYnkgYSBwcm92aWRlclxyXG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoYCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfTogaW4tZmxpZ2h0IHR4IGJlaW5nIHJlbGF5ZWQ6ICR7aW5mbGlnaHQuaGFzaH1gKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBcclxuICAgICAgICBcclxuICAgICAgICAvLyBjbGVhbiBjdXJyZW50IHNpZ25hdHVyZXMsIHNvIG5ldyBVVFhPcyBjYW4gYmUgY29uc3VtZWQgYW5kIHRoZXJlZm9yZSBhIG5ldyB0cmFuc2FjdGlvbiBoYXNoIGJlIGluY2VwdGVkXHJcbiAgICAgICAgdGhpcy5fY2xlYW5TaWduYXR1cmVzKHRhcmdldClcclxuICAgICAgICBcclxuICAgICAgICAvLyBpZiBub3QgeWV0IHByZXBhcmVkLCB0cnkgdG8gY292ZXIgdHJhbnNhY3Rpb24gZXhwZW5zZXMgd2l0aCBleGlzdGluZyB1dHhvcyBvbiBzaWduZXJzOlxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSAwblxyXG4gICAgICAgIGlmICghdGhpcy5fcGF5bG9hZC5wcmVwYXJlZCkge1xyXG4gICAgICAgICAgICBjaGFuZ2UgPSBhd2FpdCB0aGlzLl9wYXlsb2FkLmNvbnN1bWVVdHhvcyh0aGlzLmxlZGdlciwgcmVsb2FkVXR4b3MpXHJcbiAgICAgICAgICAgIC5jYXRjaCgoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFxyXG4gICAgICAgICAgICAgICAgICAgIGAke3RoaXMuY29uc3RydWN0b3IubmFtZX06IGNhbm5vdCBjb25zdW1lIFVUWE9zIGZyb20gJHt0aGlzLmxlZGdlci5jb25zdHJ1Y3Rvci5uYW1lfSAke3RoaXMubGVkZ2VyLnBraH06ICR7ZXJyfS5gXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIH0pICBcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKCF0aGlzLl9wYXlsb2FkLnByZXBhcmVkKSB7XHJcbiAgICAgICAgICAgIC8vIHRocm93cyBleGVjZXB0aW9uIGlmIG5vdCBlbm91Z2ggdXR4b3Mgd2VyZSBmb3VuZCB0byBjb3ZlciB0cmFuc2FjdGlvbiBleHBlbnNlczpcclxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXHJcbiAgICAgICAgICAgICAgICBgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9OiBpbnN1ZmZpY2llbnQgZnVuZHMgb24gJHt0aGlzLmxlZGdlci5jb25zdHJ1Y3Rvci5uYW1lfSR7dGhpcy5sZWRnZXIucGtofSR7Y2hhbmdlIDwgMCA/IGA6IHJlcXVpcmVzIGV4dHJhICR7LWNoYW5nZX0gJG5hbm93aXRzLmAgOiBcIi5cIn1gXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICB9IFxyXG5cclxuICAgICAgICAvLyBkb3VibGUtY2hlY2sgd2VpZ2h0IGRvZXMgbm90IGV4Y2VlZHMgYmxvY2sgbGltaXQuLi5cclxuICAgICAgICBpZiAodGhpcy5fcGF5bG9hZC53ZWlnaHQgPiB0aGlzLl9wYXlsb2FkLm1heFdlaWdodCkge1xyXG4gICAgICAgICAgICB0aHJvdyBFcnJvcihcclxuICAgICAgICAgICAgICAgIGAke3RoaXMuY29uc3RydWN0b3IubmFtZX06IHRyYW5zYWN0aW9uIHdlaWdodCBleGNlZWRlZCBibG9jayBsaW1pdDogJHt0aGlzLl9wYXlsb2FkLndlaWdodH0gPiAke3RoaXMuX3BheWxvYWQubWF4V2VpZ2h0fS5gXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHNpZ25pbmcgdGhlIHRyYW5zYWN0aW9uIHBheWxvYWQgZ2VuZXJhdGVzIHRoZSB0cmFuc2FjdGlvbiBoYXNoLCBhbmQgdGhlIHJlY2VpcHRcclxuICAgICAgICByZXR1cm4gdGhpcy5fdXBzZXJ0VHJhbnNhY3Rpb25SZWNlaXB0KHRoaXMuX3NpZ25UcmFuc2FjdGlvblBheWxvYWQoKSwgdGFyZ2V0LCBcInNpZ25lZFwiKSAgICBcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgY29uZmlybVRyYW5zYWN0aW9uKFxyXG4gICAgICAgIGhhc2g6IEhhc2gsIFxyXG4gICAgICAgIG9wdGlvbnM/OiB7XHJcbiAgICAgICAgICAgIGNvbmZpcm1hdGlvbnM/OiBudW1iZXIsXHJcbiAgICAgICAgICAgIHRpbWVvdXRTZWNzPzogbnVtYmVyLFxyXG4gICAgICAgICAgICBvbkNoZWNrcG9pbnQ/OiBUcmFuc2FjdGlvbkNhbGxiYWNrLFxyXG4gICAgICAgICAgICBvblN0YXR1c0NoYW5nZT86IFRyYW5zYWN0aW9uQ2FsbGJhY2ssXHJcbiAgICAgICAgfVxyXG4gICAgKTogUHJvbWlzZTxUcmFuc2FjdGlvblJlY2VpcHQ+IHtcclxuXHJcbiAgICAgICAgbGV0IHJlY2VpcHQgPSBKc29uUnBjUHJvdmlkZXIucmVjZWlwdHNbaGFzaF1cclxuICAgICAgICBpZiAoIXJlY2VpcHQgfHwgcmVjZWlwdC5oYXNoICE9PSBoYXNoKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9OiB0cmFuc2FjdGlvbiBub3QgZm91bmQ6ICR7aGFzaH1gKVxyXG4gICAgICAgIFxyXG4gICAgICAgIH0gZWxzZSBpZiAoW1wic2lnbmVkXCIsIFwicGVuZGluZ1wiXS5pbmNsdWRlcyhyZWNlaXB0LnN0YXR1cykpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3RoaXMuY29uc3RydWN0b3IubmFtZX06IHRyYW5zYWN0aW9uIHN0YXR1cyBcIiR7cmVjZWlwdC5zdGF0dXN9XCI6ICR7aGFzaH1gKVxyXG4gICAgICAgIFxyXG4gICAgICAgIH0gZWxzZSBpZiAocmVjZWlwdC5zdGF0dXMgPT09IFwicmVtb3ZlZFwiKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBNZW1wb29sRXJyb3IocmVjZWlwdCwgYCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfTogdHJhbnNhY3Rpb24gcmVtb3ZlZCBmcm9tIG1lbXBvb2w6ICR7aGFzaH1gKVxyXG4gICAgICAgIFxyXG4gICAgICAgIH0gZWxzZSBpZiAocmVjZWlwdC5zdGF0dXMgPT09IFwicmVsYXllZFwiICYmIG9wdGlvbnM/Lm9uU3RhdHVzQ2hhbmdlKSB0cnkge1xyXG4gICAgICAgICAgICBvcHRpb25zLm9uU3RhdHVzQ2hhbmdlKHJlY2VpcHQpXHJcbiAgICAgICAgfSBjYXRjaCB7fTtcclxuXHJcbiAgICAgICAgY29uc3QgZ2xvYmFsVGltZXIgPSAoc3RhcnQ6IG51bWJlciwgbXM6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKF8sIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChcclxuICAgICAgICAgICAgICAgICAgICAoKSA9PiByZWplY3QoYCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfTogcG9sbGluZyB0aW1lb3V0IGFmdGVyICR7TWF0aC5mbG9vcigoRGF0ZS5ub3coKSAtIHN0YXJ0KSAvIDEwMDApfSBzZWNzKS5gKSwgXHJcbiAgICAgICAgICAgICAgICAgICAgbXNcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgW2NvbmZpcm1hdGlvbnMsIGludGVydmFsLCB0aW1lb3V0LCBnbG9iYWxUaW1lb3V0XSA9IFtcclxuICAgICAgICAgICAgb3B0aW9ucz8uY29uZmlybWF0aW9ucyB8fCAwLFxyXG4gICAgICAgICAgICAxMDAwMCxcclxuICAgICAgICAgICAgNTAwMCxcclxuICAgICAgICAgICAgKG9wdGlvbnM/LnRpbWVvdXRTZWNzIHx8IDYwMCkgKiAxMDAwLFxyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJhY2UoW1xyXG4gICAgICAgICAgICBnbG9iYWxUaW1lcihEYXRlLm5vdygpLCBnbG9iYWxUaW1lb3V0KVxyXG4gICAgICAgICAgICAgICAgLmNhdGNoKChyZWFzb246IGFueSkgPT4geyB0aHJvdyBuZXcgVGltZW91dEVycm9yKGdsb2JhbFRpbWVvdXQsIHJlY2VpcHQsIHJlYXNvbikgfSksXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBwcm9taXNlUG9sbGVyKHtcclxuICAgICAgICAgICAgICAgIHRhc2tGbjogKCkgPT4gdGhpcy5wcm92aWRlci5nZXRUcmFuc2FjdGlvbihoYXNoKSxcclxuICAgICAgICAgICAgICAgIHNob3VsZENvbnRpbnVlOiAoZXJyb3I6IGFueSwgcmVwb3J0OiBUcmFuc2FjdGlvblJlcG9ydCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXR1cyA9IHJlY2VpcHQuc3RhdHVzXHJcbiAgICAgICAgICAgICAgICAgICAgcmVjZWlwdC5lcnJvciA9IGVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiYgZXJyb3IubWVzc2FnZS5pbmRleE9mKFwibm90IGZvdW5kXCIpID49IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVjZWlwdC5zdGF0dXMgPSBcInJlbW92ZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBzd2l0Y2ggKHJlY2VpcHQuc3RhdHVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJyZWxheWVkXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVwb3J0Py5ibG9ja0hhc2ggJiYgaXNIZXhTdHJpbmcocmVwb3J0LmJsb2NrSGFzaCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNlaXB0LmNvbmZpcm1hdGlvbnMgPSByZXBvcnQuY29uZmlybWF0aW9uc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2VpcHQuYmxvY2tIYXNoID0gcmVwb3J0LmJsb2NrSGFzaCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNlaXB0LmJsb2NrRXBvY2ggPSByZXBvcnQuYmxvY2tFcG9jaCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNlaXB0LmJsb2NrVGltZXN0YW1wID0gcmVwb3J0LmJsb2NrVGltZXN0YW1wXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjZWlwdC5zdGF0dXMgPSAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydC5jb25maXJtZWQgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFwiZmluYWxpemVkXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IChyZXBvcnQ/LmNvbmZpcm1hdGlvbnMgPj0gY29uZmlybWF0aW9ucyA/IFwiY29uZmlybWVkXCIgOiBcIm1pbmVkXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcIm1pbmVkXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJlcG9ydD8uYmxvY2tIYXNoIHx8IHJlcG9ydC5ibG9ja0hhc2ggIT09IHJlY2VpcHQuYmxvY2tIYXNoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHJlY2VpcHQuYmxvY2tIYXNoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHJlY2VpcHQuYmxvY2tFcG9jaFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSByZWNlaXB0LmJsb2NrTWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgcmVjZWlwdC5ibG9ja1RpbWVzdGFtcFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2VpcHQuc3RhdHVzID0gXCJyZWxheWVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNlaXB0LnN0YXR1cyA9IChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0LmNvbmZpcm1lZCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gXCJmaW5hbGl6ZWRcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKHJlcG9ydD8uY29uZmlybWF0aW9ucyA+PSBjb25maXJtYXRpb25zID8gXCJjb25maXJtZWRcIiA6IFwibWluZWRcIilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXBvcnQ/LmNvbmZpcm1hdGlvbnMgIT09IHJlY2VpcHQuY29uZmlybWF0aW9ucykgeyAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjZWlwdC5jb25maXJtYXRpb25zID0gcmVwb3J0LmNvbmZpcm1hdGlvbnNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlY2VpcHQuc3RhdHVzID09PSBcIm1pbmVkXCIgJiYgb3B0aW9ucz8ub25DaGVja3BvaW50KSB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5vbkNoZWNrcG9pbnQocmVjZWlwdClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCB7fTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzICE9PSByZWNlaXB0LnN0YXR1cykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZWNlaXB0LnRpbWVzdGFtcCA9IE1hdGguZmxvb3IoRGF0ZS5ub3coKSAvIDEwMDApIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIVtcImNvbmZpcm1lZFwiLCBcImZpbmFsaXplZFwiXS5pbmNsdWRlcyhyZWNlaXB0LnN0YXR1cykgJiYgb3B0aW9ucz8ub25TdGF0dXNDaGFuZ2UpIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLm9uU3RhdHVzQ2hhbmdlKHJlY2VpcHQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2gge307XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIEpzb25ScGNQcm92aWRlci5yZWNlaXB0c1toYXNoXSA9IHJlY2VpcHRcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gW1wicmVsYXllZFwiLCBcIm1pbmVkXCJdLmluY2x1ZGVzKHJlY2VpcHQuc3RhdHVzKVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGludGVydmFsLCB0aW1lb3V0LCBcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH0pLnRoZW4oYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlY2VpcHQuc3RhdHVzID09PSBcInJlbW92ZWRcIiAmJiByZWNlaXB0LnR5cGUgIT09IFwiVW5zdGFrZVwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVFJBTlNBQ1RJT04gUkVNT1ZFRCBGUk9NIE1FTVBPT0wgLy9cclxuICAgICAgICAgICAgICAgICAgICAvLyAxLiBUcnkgdG8gcmVjb3ZlciBpbnB1dCB1dHhvcyBiZWxvbmdpbmcgdG8gbGVkZ2VyJ3MgYWRkcmVzc2VzOlxyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlucHV0czogQXJyYXk8VXR4b01ldGFkYXRhPiA9IHJlY2VpcHQudHhbcmVjZWlwdC50eXBlXS5ib2R5LmlucHV0c1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaWduYXR1cmVzOiBBcnJheTxLZXllZFNpZ25hdHVyZT4gPSByZWNlaXB0LnR4W3JlY2VpcHQudHlwZV0uc2lnbmF0dXJlc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1dHhvczogQXJyYXk8VXR4bz4gPSBbXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXRzLmxlbmd0aCA9PT0gc2lnbmF0dXJlcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0cy5mb3JFYWNoKChtZXRhZGF0YSwgaW5kZXgpID0+ICh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ubWV0YWRhdGEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmVyOiBQdWJsaWNLZXkuZnJvbVByb3RvYnVmKHNpZ25hdHVyZXNbaW5kZXhdLnB1YmxpY19rZXkpLmhhc2goKS50b0JlY2gzMih0aGlzLm5ldHdvcmspLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sZWRnZXIuYWRkVXR4b3MoLi4udXR4b3MpXHJcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfTogd2FybmluZzogY2Fubm90IHJlY292ZXIgaW5wdXQgVVRYT1MgZnJvbSB0eCAke2hhc2h9OiAke2Vycn1gKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAvLyAyLiBUaHJvdyBNZW1wb29sRXJyb3JcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgTWVtcG9vbEVycm9yKHJlY2VpcHQsIGAke3RoaXMuY29uc3RydWN0b3IubmFtZX06IHRyYW5zYWN0aW9uIHJlbW92ZWQgZnJvbSBtZW1wb29sOiAke2hhc2h9YCk7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVFJBTlNBQ1RJT04gRUlUSEVSIENPTkZJUk1FRCBPUiBGSU5BTElaRUQgLy9cclxuICAgICAgICAgICAgICAgICAgICAvLyAxLiBUcnkgdG8gbG9hZCB2YWx1ZSB0cmFuc2ZlciBvdXRwdXRzIGludG8gdGhlIGxlZGdlcidzIGxvY2FsIGNhY2hlOiBcclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1dHhvczogQXJyYXk8VXR4bz4gPSBbXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoW1wiU3Rha2VcIiwgXCJVbnN0YWtlXCJdLmluY2x1ZGVzKHJlY2VpcHQudHlwZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2dG86IFZhbHVlVHJhbnNmZXJPdXRwdXQgPSAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjZWlwdC50eXBlID09PSBcIlN0YWtlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyByZWNlaXB0LnR4W3JlY2VpcHQudHlwZV0uYm9keT8ub3V0cHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogcmVjZWlwdC50eFtyZWNlaXB0LnR5cGVdLmJvZHk/LndpdGhkcmF3YWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodnRvKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXR4b3MucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9wb2ludGVyOiBgJHtyZWNlaXB0Lmhhc2h9OjBgLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lbG9jazogdnRvLnRpbWVfbG9jayxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXR4b19tYXR1cmU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBCaWdJbnQodnRvLnZhbHVlKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmVyOiB2dG8ucGtoLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdXRwdXRzOiBBcnJheTxWYWx1ZVRyYW5zZmVyT3V0cHV0PiA9IHJlY2VpcHQudHhbcmVjZWlwdC50eXBlXS5ib2R5Py5vdXRwdXRzIHx8IFtdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRzLmZvckVhY2goKHZ0bywgaW5kZXgpID0+IHV0eG9zLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9wb2ludGVyOiBgJHtyZWNlaXB0Lmhhc2h9OiR7aW5kZXh9YCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lbG9jazogdnRvLnRpbWVfbG9jayxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dHhvX21hdHVyZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogQmlnSW50KHZ0by52YWx1ZSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmVyOiB2dG8ucGtoLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJvdXRwdXQgdXR4b3MgYmVmb3JlID0+XCIsIHV0eG9zKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIm91dHB1dCB1dHhvcyBhZnRlciAgPT5cIiwgdGhpcy5sZWRnZXIuYWRkVXR4b3MoLi4udXR4b3MpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxlZGdlci5hZGRVdHhvcyguLi51dHhvcylcclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9OiB3YXJuaW5nOiBjYW5ub3QgcmVjb3ZlciBvdXRwdXQgVVRYT3MgZnJvbSAke2hhc2h9OiAke2Vycn1gKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAvLyAyLiBBZGQgYmxvY2tNaW5lciBhZGRyZXNzIHRvIHRoZSB0cmFuc2FjdGlvbiByZWNlaXB0OiBcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVjZWlwdD8uYmxvY2tIYXNoICYmIGlzSGV4U3RyaW5nKHJlY2VpcHQuYmxvY2tIYXNoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBibG9jayA9IGF3YWl0IHRoaXMucHJvdmlkZXIuZ2V0QmxvY2socmVjZWlwdC5ibG9ja0hhc2ggfHwgXCJcIilcclxuICAgICAgICAgICAgICAgICAgICAgICAgSnNvblJwY1Byb3ZpZGVyLnJlY2VpcHRzW2hhc2hdLmJsb2NrTWluZXIgPSBQdWJsaWNLZXlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5mcm9tUHJvdG9idWYoYmxvY2suYmxvY2tfc2lnLnB1YmxpY19rZXkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuaGFzaCgpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAudG9CZWNoMzIodGhpcy5uZXR3b3JrKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnM/Lm9uU3RhdHVzQ2hhbmdlKSB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLm9uU3RhdHVzQ2hhbmdlKHJlY2VpcHQpXHJcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCB7fTtcclxuICAgICAgICAgICAgICAgICAgICAvLyAzLiBSZXR1cm4gdHJhbnNhY3Rpb24gcmVjZWlwdDpcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gSnNvblJwY1Byb3ZpZGVyLnJlY2VpcHRzW2hhc2hdXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgXSlcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX2NsZWFuU2lnbmF0dXJlcyhuZXdUYXJnZXQ6IFNwZWNzKTogYW55IHtcclxuICAgICAgICB0aGlzLl9wYXlsb2FkLnJlc2V0VGFyZ2V0KG5ld1RhcmdldClcclxuICAgICAgICB0aGlzLl9zaWduYXR1cmVzID0gW11cclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX2dldEluZmxpZ2h0Qnl0ZWNvZGUoKTogVWludDhBcnJheSB8IHVuZGVmaW5lZCB7XHJcbiAgICAgICAgY29uc3Qgb2JqID0gdGhpcy5fdG9Qcm90b2J1ZigpXHJcbiAgICAgICAgY29uc3QgZXJyID0gdGhpcy5fcHJvdG9CdWYudmVyaWZ5KG9iailcclxuICAgICAgICBpZiAoIWVycikge1xyXG4gICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gdGhpcy5fcHJvdG9CdWYuZnJvbU9iamVjdChvYmopXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9wcm90b0J1Zi5lbmNvZGUobWVzc2FnZSkuZmluaXNoKClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfZ2V0SW5mbGlnaHRSZWNlaXB0KCk6IFRyYW5zYWN0aW9uUmVjZWlwdCB8IHVuZGVmaW5lZCB7XHJcbiAgICAgICAgY29uc3QgaGFzaCA9IHRoaXMuX3BheWxvYWQuaGFzaFxyXG4gICAgICAgIGlmIChoYXNoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBKc29uUnBjUHJvdmlkZXIucmVjZWlwdHNbaGFzaF1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfZ2V0SW5mbGlnaHRUcmFuc21pc3Npb24oKTogVHJhbnNtaXNzaW9uIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBieXRlY29kZTogdGhpcy5fZ2V0SW5mbGlnaHRCeXRlY29kZSgpLFxyXG4gICAgICAgICAgICBoYXNoOiB0aGlzLl9wYXlsb2FkLmhhc2gsXHJcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRoaXMuX3RvSlNPTih0cnVlKSxcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9yZWNvdmVySW5wdXRVdHhvcygpOiBhbnkge31cclxuICAgIHByb3RlY3RlZCBfcmVjb3Zlck91dHB1dFV0eG9zKCk6IGFueSB7fVxyXG5cclxuICAgIHByb3RlY3RlZCBfdXBzZXJ0VHJhbnNhY3Rpb25SZWNlaXB0KGhhc2g6IEhhc2gsIHRhcmdldDogU3BlY3MsIHN0YXR1czogVHJhbnNhY3Rpb25TdGF0dXMpOiBUcmFuc2FjdGlvblJlY2VpcHQge1xyXG4gICAgICAgIEpzb25ScGNQcm92aWRlci5yZWNlaXB0c1toYXNoXSA9IHtcclxuICAgICAgICAgICAgLi4udGhpcy5fcGF5bG9hZC5pbnRvUmVjZWlwdCh0YXJnZXQsIHRoaXMubmV0d29yayksXHJcbiAgICAgICAgICAgIGhhc2gsXHJcbiAgICAgICAgICAgIGNoYW5nZTogdGhpcy5fcGF5bG9hZC5jaGFuZ2UsXHJcbiAgICAgICAgICAgIGZlZXM6IHRoaXMuX3BheWxvYWQuZmVlcyxcclxuICAgICAgICAgICAgZnJvbTogdGhpcy5fZnJvbSxcclxuICAgICAgICAgICAgc3RhdHVzLFxyXG4gICAgICAgICAgICB0aW1lc3RhbXA6IE1hdGguZmxvb3IoRGF0ZS5ub3coKSAvIDEwMDApLFxyXG4gICAgICAgICAgICB0eDogdGhpcy5fdG9KU09OKHRydWUpLFxyXG4gICAgICAgICAgICB0eXBlOiB0aGlzLnR5cGUsXHJcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLl9wYXlsb2FkLnZhbHVlLFxyXG4gICAgICAgICAgICB3ZWlnaHQ6IHRoaXMuX3BheWxvYWQud2VpZ2h0LFxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gSnNvblJwY1Byb3ZpZGVyLnJlY2VpcHRzW2hhc2hdXHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IF9zaWduVHJhbnNhY3Rpb25QYXlsb2FkKCk6IEhhc2g7XHJcbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgX3RvSlNPTihfaHVtYW5pemU6IGJvb2xlYW4pOiBhbnk7XHJcbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgX3RvUHJvdG9idWYoKTogYW55O1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFRyYW5zbWl0dGVyTXVsdGlTaWc8U3BlY3MsIFBheWxvYWQgZXh0ZW5kcyBJVHJhbnNhY3Rpb25QYXlsb2FkTXVsdGlTaWc8U3BlY3M+PiBcclxuICAgIGV4dGVuZHMgVHJhbnNtaXR0ZXI8U3BlY3MsIFBheWxvYWQ+IFxyXG57XHJcbiAgICBjb25zdHJ1Y3RvciAocHJvdG9UeXBlTmFtZTogc3RyaW5nLCBwYXlsb2FkOiBQYXlsb2FkLCBsZWRnZXI6IElMZWRnZXIsIGNoYW5nZVBraD86IFB1YmxpY0tleUhhc2hTdHJpbmcpIHtcclxuICAgICAgICBzdXBlcihwcm90b1R5cGVOYW1lLCBwYXlsb2FkLCBsZWRnZXIsIGNoYW5nZVBraClcclxuICAgICAgICB0aGlzLl9wYXlsb2FkID0gcGF5bG9hZDtcclxuICAgIH1cclxuXHJcbiAgICAvLy8gUmVjb3ZlciBmb3JtZXJseSBjb25zdW1lZCBVVFhPcyBieSBhIGZhaWxpbmcgdHJhbnNhY3Rpb24gYmFjayB0byB0aGVpciByZXNwZWN0aXZlIHNpZ25lcidzIFVUWE8gcG9vbFxyXG4gICAgcHJvdGVjdGVkIF9yZWNvdmVySW5wdXRVdHhvcygpOiBhbnkge1xyXG4gICAgICAgIGlmICh0aGlzLl9wYXlsb2FkLmlucHV0cykgeyAgICBcclxuICAgICAgICAgICAgdGhpcy5sZWRnZXIuYWRkVXR4b3MoLi4udGhpcy5fcGF5bG9hZC5pbnB1dHMpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vLyBSZWNvdmVyIHNlbGYtdGFyZ2V0ZWQgb3V0cHV0cyBhcyBleHBlbmRhYmxlIHV0eG9zIG9uIHRoZWlyIHJlc3BlY3RpdmUgc2lnbmVyJ3MgbWVtb2l6ZWQgY2FjaGVcclxuICAgIHByb3RlY3RlZCBfcmVjb3Zlck91dHB1dFV0eG9zKCk6IGFueSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3BheWxvYWQuaGFzaCAmJiB0aGlzLl9wYXlsb2FkLm91dHB1dHMpIHtcclxuICAgICAgICAgICAgY29uc3QgdXR4b3M6IEFycmF5PFV0eG8+ID0gW11cclxuICAgICAgICAgICAgdGhpcy5fcGF5bG9hZC5vdXRwdXRzLmZvckVhY2goKHZ0bywgaW5kZXgpID0+IHsgICAgXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5sZWRnZXIuZ2V0U2lnbmVyKHZ0by5wa2gpKSB1dHhvcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICBzaWduZXI6IHZ0by5wa2gsXHJcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0X3BvaW50ZXI6IGAke3RoaXMuX3BheWxvYWQuaGFzaH06JHtpbmRleH1gLFxyXG4gICAgICAgICAgICAgICAgICAgIHRpbWVsb2NrOiB2dG8udGltZV9sb2NrLFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2dG8udmFsdWUsXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB0aGlzLmxlZGdlci5hZGRVdHhvcyguLi51dHhvcylcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9zaWduVHJhbnNhY3Rpb25QYXlsb2FkKCk6IEhhc2gge1xyXG4gICAgICAgIGNvbnN0IGhhc2ggPSB0aGlzLl9wYXlsb2FkLmhhc2hcclxuICAgICAgICBpZiAoIWhhc2gpIHtcclxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXHJcbiAgICAgICAgICAgICAgICBgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9OiBpbnRlcm5hbCBlcnJvcjogdW5hYmxlIHRvIGhhc2hpZnkgcGF5bG9hZDogJHt0aGlzLl9wYXlsb2FkLnRvSlNPTih0cnVlLCB0aGlzLm5ldHdvcmspfX0uYFxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fcGF5bG9hZC5pbnB1dHMuZm9yRWFjaCh1dHhvID0+IHsgXHJcbiAgICAgICAgICAgICAgICBjb25zdCBzaWduZXIgPSB0aGlzLmxlZGdlci5nZXRTaWduZXIodXR4by5zaWduZXIpXHJcbiAgICAgICAgICAgICAgICBpZiAoIXNpZ25lcikgdGhyb3cgRXJyb3IoXHJcbiAgICAgICAgICAgICAgICAgICAgYCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfTogaW50ZXJuYWwgZXJyb3I6IGNhbm5vdCBmaW5kIFNpZ25lciAke3V0eG8uc2lnbmVyfSBpbiAke3RoaXMubGVkZ2VyLmNvbnN0cnVjdG9yLm5hbWV9ICR7dGhpcy5sZWRnZXIucGtofS5gICAgIFxyXG4gICAgICAgICAgICAgICAgKTsgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coYC4uLnNpZ25lciAke3NpZ25lci5wa2h9IHNpZ25pbmcgaGFzaCAke2hhc2h9Li4uYClcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaWduYXR1cmVzLnB1c2goc2lnbmVyLnNpZ25IYXNoKGhhc2gpKSBcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgcmV0dXJuIGhhc2hcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF90b0pTT04oaHVtYW5pemU6IGJvb2xlYW4pOiBhbnkge1xyXG4gICAgICAgIHJldHVybiB7IFxyXG4gICAgICAgICAgICBbdGhpcy50eXBlXTogeyBcclxuICAgICAgICAgICAgICAgIGJvZHk6IHRoaXMuX3BheWxvYWQudG9KU09OKGh1bWFuaXplLCB0aGlzLm5ldHdvcmspLFxyXG4gICAgICAgICAgICAgICAgc2lnbmF0dXJlczogdGhpcy5fc2lnbmF0dXJlcyxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF90b1Byb3RvYnVmKCk6IGFueSB7XHJcbiAgICAgICAgY29uc3QgYm9keSA9IHRoaXMuX3BheWxvYWQudG9Qcm90b2J1ZigpXHJcbiAgICAgICAgaWYgKGJvZHkgJiYgdGhpcy5fc2lnbmF0dXJlcykge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgYm9keSxcclxuICAgICAgICAgICAgICAgIHNpZ25hdHVyZXM6IHRoaXMuX3NpZ25hdHVyZXMsXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIl19
|
|
@@ -23,7 +23,10 @@ export interface IJsonRpcProvider {
|
|
|
23
23
|
getSuperblock(epoch: Epoch): Promise<SuperblockReport>;
|
|
24
24
|
getTransaction(txHash: Hash): Promise<TransactionReport>;
|
|
25
25
|
getTransactionReceipt(txHash: Hash): Promise<TransactionReceipt>;
|
|
26
|
-
getUtxos(pkh: PublicKeyHashString,
|
|
26
|
+
getUtxos(pkh: PublicKeyHashString, filter?: {
|
|
27
|
+
minValue?: bigint;
|
|
28
|
+
signer?: PublicKeyHashString;
|
|
29
|
+
}): Promise<Array<UtxoMetadata>>;
|
|
27
30
|
getValueTransfer(txHash: Hash, mode?: string): Promise<any>;
|
|
28
31
|
sendRawTransaction(tx: any): Promise<boolean>;
|
|
29
32
|
}
|
|
@@ -82,7 +85,10 @@ export declare class JsonRpcProvider implements IJsonRpcProvider {
|
|
|
82
85
|
getSuperblock(epoch: Epoch): Promise<SuperblockReport>;
|
|
83
86
|
getTransaction(txHash: Hash): Promise<TransactionReport>;
|
|
84
87
|
getTransactionReceipt(txHash: Hash): Promise<TransactionReceipt>;
|
|
85
|
-
getUtxos(pkh: PublicKeyHashString,
|
|
88
|
+
getUtxos(pkh: PublicKeyHashString, filter?: {
|
|
89
|
+
minValue?: bigint | string;
|
|
90
|
+
fromSigner?: PublicKeyHashString;
|
|
91
|
+
}): Promise<Array<UtxoMetadata>>;
|
|
86
92
|
getValueTransfer(txHash: Hash, mode?: string, force?: boolean): Promise<any>;
|
|
87
93
|
sendRawTransaction(transaction: any): Promise<boolean>;
|
|
88
94
|
supplyInfo(): Promise<SupplyInfo>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../../src/lib/rpc/provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,YAAY,EAAE,MAAM,OAAO,CAAA;AAMtD,OAAO,EAAa,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AACpF,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAG7D,OAAO,EACM,QAAQ,EAAE,KAAK,EAAE,kBAAkB,EAC5C,wBAAwB,EAAE,4BAA4B,EAAE,kBAAkB,EAC1E,OAAO,EAAW,QAAQ,EAAE,UAAU,EAAE,YAAY,EACpD,WAAW,EAAE,kBAAkB,EAC/B,iBAAiB,EAAE,aAAa,EAAE,UAAU,EAAE,YAAY,EAC1D,gBAAgB,EAAE,UAAU,EAAE,UAAU,EAC3C,MAAM,SAAS,CAAA;AAEhB,MAAM,WAAW,gBAAgB;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,IAAI,CAA0B,CAAC,CAAC,CAAC;IAC7F,SAAS,IAAI,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACzC,OAAO,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,mBAAmB,EAAE,QAAQ,CAAC,CAAC,CAAA;IACvE,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5B,MAAM,CAAC,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;IAClE,UAAU,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC;IAClC,YAAY,IAAI,OAAO,CAAC,YAAY,CAAC,CAAC;IACtC,MAAM,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;IACxD,UAAU,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC;IAClC,UAAU,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC;IAC3B,IAAI,IAAI,OAAO,CAAC,aAAa,CAAC,CAAC;IAC/B,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAE7B,UAAU,CAAC,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IACxD,QAAQ,CAAC,SAAS,EAAE,IAAI,EAAE,qBAAqB,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IAC3E,cAAc,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,wBAAwB,GAAG,4BAA4B,CAAC,CAAC;IAC5H,aAAa,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACvD,cAAc,CAAC,MAAM,EAAE,IAAI,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACzD,qBAAqB,CAAC,MAAM,EAAE,IAAI,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACjE,QAAQ,CAAC,GAAG,EAAE,mBAAmB,EAAE,
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../../src/lib/rpc/provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -308,23 +308,16 @@ class JsonRpcProvider {
|
|
|
308
308
|
return JsonRpcProvider.receipts[txHash];
|
|
309
309
|
}
|
|
310
310
|
/// Get utxos
|
|
311
|
-
async getUtxos(pkh,
|
|
311
|
+
async getUtxos(pkh, filter) {
|
|
312
|
+
if (filter) {
|
|
313
|
+
filter.minValue = filter?.minValue?.toString() ?? "0";
|
|
314
|
+
}
|
|
312
315
|
return this
|
|
313
|
-
.callApiMethod(types_2.Methods.GetUtxoInfo, [pkh,])
|
|
314
|
-
.then((result) => {
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
return inversor;
|
|
319
|
-
else if (a.value < b.value)
|
|
320
|
-
return -inversor;
|
|
321
|
-
else
|
|
322
|
-
return 0;
|
|
323
|
-
}).map((utxo) => ({
|
|
324
|
-
...utxo,
|
|
325
|
-
value: BigInt(utxo.value),
|
|
326
|
-
}));
|
|
327
|
-
});
|
|
316
|
+
.callApiMethod(types_2.Methods.GetUtxoInfo, [pkh, filter])
|
|
317
|
+
.then((result) => result.utxos.map((utxo) => ({
|
|
318
|
+
...utxo,
|
|
319
|
+
value: BigInt(utxo.value)
|
|
320
|
+
})));
|
|
328
321
|
}
|
|
329
322
|
async getValueTransfer(txHash, mode, force = false) {
|
|
330
323
|
return this.callApiMethod(types_2.Methods.GetValueTransfer, {
|
|
@@ -344,4 +337,4 @@ class JsonRpcProvider {
|
|
|
344
337
|
}
|
|
345
338
|
exports.JsonRpcProvider = JsonRpcProvider;
|
|
346
339
|
JsonRpcProvider.receipts = {};
|
|
347
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3JwYy9wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwrQ0FBc0Q7QUFDdEQsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQ3ZDLDJDQUE4QztBQUM5QyxNQUFNLFNBQVMsR0FBRyxpQkFBUyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsbUNBQW1DLENBQUMsQ0FBQyxDQUFBO0FBQ2xGLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUMsb0JBQW9CLENBQUMsQ0FBQTtBQUUzRCwyQ0FBb0Y7QUFFcEYsZ0RBQWlDO0FBRWpDLG1DQU9nQjtBQStCaEIsTUFBYSxvQkFBcUIsU0FBUSxLQUFLO0lBSTNDLFlBQVksTUFBYyxFQUFFLE1BQWEsRUFBRSxLQUFXO1FBQ2xELEtBQUssQ0FBQyxHQUFHLE1BQU0sSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQ3hFLE9BQU8sS0FBSyxFQUFFLEtBQUssQ0FBQTtRQUNuQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQTtRQUNsQixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQTtRQUNwQixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQTtJQUN4QixDQUFDO0NBQ0o7QUFYRCxvREFXQztBQUVELE1BQWEsZUFBZTtJQVN4Qjs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBWTtRQUM3QixPQUFPLGVBQWUsQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsdUJBQXVCLElBQUksMEJBQTBCLENBQUMsQ0FB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SUFBSSxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLO29CQUFFLE9BQU8sQ0FBRSxRQUFRLENBQUM7O29CQUN6QyxPQUFPLENBQUMsQ0FBQztZQUNsQixDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFrQixFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUM1QixHQUFHLElBQUk7Z0JBQ1AsS0FBSyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO2FBQzVCLENBQUMsQ0FBQyxDQUFBO1FBQ1AsQ0FBQyxDQUFDLENBQUE7SUFDVixDQUFDO0lBRU0sS0FBSyxDQUFDLGdCQUFnQixDQUFDLE1BQVksRUFBRSxJQUFhLEVBQUUsS0FBSyxHQUFHLEtBQUs7UUFDcEUsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFNLGVBQU8sQ0FBQyxnQkFBZ0IsRUFBRTtZQUNyRCxJQUFJLEVBQUUsTUFBTTtZQUNaLElBQUksRUFBRSxJQUFJO1lBQ1YsS0FBSztTQUNSLENBQUMsQ0FBQTtJQUNOLENBQUM7SUFFRCxtSEFBbUg7SUFDNUcsS0FBSyxDQUFDLGtCQUFrQixDQUFDLFdBQWdCO1FBQzVDLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBVSxlQUFPLENBQUMsU0FBUyxFQUFFLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQTtJQUMxRSxDQUFDO0lBRUQsbUJBQW1CO0lBQ1osS0FBSyxDQUFDLFVBQVU7UUFDbkIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFhLGVBQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQTtJQUNoRSxDQUFDOztBQXRVTCwwQ0F1VUM7QUFuVWlCLHdCQUFRLEdBQXFDLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRlZmF1bHQgYXMgYXhpb3MsIEF4aW9zSGVhZGVycyB9IGZyb20gXCJheGlvc1wiXHJcbmNvbnN0IGpzb25CaWcgPSByZXF1aXJlKCdqc29uLWJpZ2ludCcpO1xyXG5pbXBvcnQgeyBSb290IGFzIFByb3RvUm9vdCB9IGZyb20gXCJwcm90b2J1ZmpzXCJcclxuY29uc3QgcHJvdG9Sb290ID0gUHJvdG9Sb290LmZyb21KU09OKHJlcXVpcmUoXCIuLi8uLi8uLi93aXRuZXQvd2l0bmV0LnByb3RvLmpzb25cIikpIFxyXG5jb25zdCBwcm90b0J1ZiA9IHByb3RvUm9vdC5sb29rdXBUeXBlKFwiQ29uc2Vuc3VzQ29uc3RhbnRzXCIpXHJcblxyXG5pbXBvcnQgeyBQdWJsaWNLZXksIFB1YmxpY0tleUhhc2hTdHJpbmcsIFRyYW5zYWN0aW9uUmVjZWlwdCB9IGZyb20gXCIuLi9jcnlwdG8vdHlwZXNcIlxyXG5pbXBvcnQgeyBFcG9jaCwgSGFzaCwgTmV0d29yaywgVXR4b01ldGFkYXRhIH0gZnJvbSBcIi4uL3R5cGVzXCJcclxuaW1wb3J0ICogYXMgdXRpbHMgZnJvbSBcIi4uL3V0aWxzXCJcclxuXHJcbmltcG9ydCB7XHJcbiAgICBCYWxhbmNlLCBCYWxhbmNlMiwgQmxvY2ssIENvbnNlbnN1c0NvbnN0YW50cywgXHJcbiAgICBHZXREYXRhUmVxdWVzdEZ1bGxSZXBvcnQsIEdldERhdGFSZXF1ZXN0RXRoZXJlYWxSZXBvcnQsIEdldERhdGFSZXF1ZXN0TW9kZSxcclxuICAgIE1lbXBvb2wsIE1ldGhvZHMsIFBlZXJBZGRyLCBQcmlvcml0aWVzLCBQcm90b2NvbEluZm8sIFxyXG4gICAgUXVlcnlTdGFrZXMsIFF1ZXJ5U3Rha2luZ1Bvd2VycyxcclxuICAgIFRyYW5zYWN0aW9uUmVwb3J0LCBTaWduYWxpbmdJbmZvLCBTdGFrZUVudHJ5LCBTdGFraW5nUG93ZXIsIFxyXG4gICAgU3VwZXJibG9ja1JlcG9ydCwgU3VwcGx5SW5mbywgU3luY1N0YXR1cywgVXR4b0luZm8sXHJcbn0gZnJvbSBcIi4vdHlwZXNcIlxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJSnNvblJwY1Byb3ZpZGVyIHtcclxuICAgIG5ldHdvcms/OiBOZXR3b3JrO1xyXG4gICAgbmV0d29ya0lkPzogbnVtYmVyO1xyXG4gICAgXHJcbiAgICBibG9ja3Moc2luY2U6IEVwb2NoLCBsaW1pdDogbnVtYmVyKTogUHJvbWlzZTxBcnJheTxbbnVtYmVyLCBIYXNoLyosIFB1YmxpY0tleUhhc2hTdHJpbmcqL10+PjtcclxuICAgIGNvbnN0YW50cygpOiBQcm9taXNlPENvbnNlbnN1c0NvbnN0YW50cz47XHJcbiAgICBob2xkZXJzKGxpbWl0PzogbnVtYmVyKTogUHJvbWlzZTxSZWNvcmQ8UHVibGljS2V5SGFzaFN0cmluZywgQmFsYW5jZTI+PiBcclxuICAgIG1lbXBvb2woKTogUHJvbWlzZTxNZW1wb29sPjtcclxuICAgIHBvd2VycyhwYXJhbXM/OiBRdWVyeVN0YWtpbmdQb3dlcnMpOiBQcm9taXNlPEFycmF5PFN0YWtpbmdQb3dlcj4+O1xyXG4gICAgcHJpb3JpdGllcygpOiBQcm9taXNlPFByaW9yaXRpZXM+O1xyXG4gICAgcHJvdG9jb2xJbmZvKCk6IFByb21pc2U8UHJvdG9jb2xJbmZvPjtcclxuICAgIHN0YWtlcyhwYXJhbXM6IFF1ZXJ5U3Rha2VzKTogUHJvbWlzZTxBcnJheTxTdGFrZUVudHJ5Pj47IFxyXG4gICAgc3VwcGx5SW5mbygpOiBQcm9taXNlPFN1cHBseUluZm8+O1xyXG4gICAgc3luY1N0YXR1cygpOiBQcm9taXNlPGFueT47XHJcbiAgICB3aXBzKCk6IFByb21pc2U8U2lnbmFsaW5nSW5mbz47XHJcbiAgICB3aXRuZXNzZXMoKTogUHJvbWlzZTxudW1iZXI+O1xyXG5cclxuICAgIGdldEJhbGFuY2UocGtoOiBQdWJsaWNLZXlIYXNoU3RyaW5nKTogUHJvbWlzZTxCYWxhbmNlMj47XHJcbiAgICBnZXRCbG9jayhibG9ja0hhc2g6IEhhc2gsIHNob3dUcmFuc2FjdGlvbkhhc2hlcz86IGJvb2xlYW4pOiBQcm9taXNlPEJsb2NrPjtcclxuICAgIGdldERhdGFSZXF1ZXN0KGRyVHhIYXNoOiBIYXNoLCBtb2RlPzogR2V0RGF0YVJlcXVlc3RNb2RlKTogUHJvbWlzZTxHZXREYXRhUmVxdWVzdEZ1bGxSZXBvcnQgfCBHZXREYXRhUmVxdWVzdEV0aGVyZWFsUmVwb3J0PjtcclxuICAgIGdldFN1cGVyYmxvY2soZXBvY2g6IEVwb2NoKTogUHJvbWlzZTxTdXBlcmJsb2NrUmVwb3J0PjtcclxuICAgIGdldFRyYW5zYWN0aW9uKHR4SGFzaDogSGFzaCk6IFByb21pc2U8VHJhbnNhY3Rpb25SZXBvcnQ+O1xyXG4gICAgZ2V0VHJhbnNhY3Rpb25SZWNlaXB0KHR4SGFzaDogSGFzaCk6IFByb21pc2U8VHJhbnNhY3Rpb25SZWNlaXB0PjtcclxuICAgIGdldFV0eG9zKHBraDogUHVibGljS2V5SGFzaFN0cmluZywgc21hbGxlc3RGaXJzdD86IGJvb2xlYW4pOiBQcm9taXNlPEFycmF5PFV0eG9NZXRhZGF0YT4+O1xyXG4gICAgZ2V0VmFsdWVUcmFuc2Zlcih0eEhhc2g6IEhhc2gsIG1vZGU/OiBzdHJpbmcpOiBQcm9taXNlPGFueT47XHJcbiAgICAgICAgXHJcbiAgICBzZW5kUmF3VHJhbnNhY3Rpb24odHg6IGFueSk6IFByb21pc2U8Ym9vbGVhbj47XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBKc29uUnBjUHJvdmlkZXJFcnJvciBleHRlbmRzIEVycm9yIHtcclxuICAgIHJlYWRvbmx5IGVycm9yPzogYW55O1xyXG4gICAgcmVhZG9ubHkgbWV0aG9kOiBzdHJpbmc7XHJcbiAgICByZWFkb25seSBwYXJhbXM6IGFueVtdO1xyXG4gICAgY29uc3RydWN0b3IobWV0aG9kOiBzdHJpbmcsIHBhcmFtczogYW55W10sIGVycm9yPzogYW55KSB7XHJcbiAgICAgICAgc3VwZXIoYCR7bWV0aG9kfSgke0pTT04uc3RyaW5naWZ5KHBhcmFtcyl9KTogJHtKU09OLnN0cmluZ2lmeShlcnJvcil9KWApXHJcbiAgICAgICAgZGVsZXRlIGVycm9yPy5zdGFja1xyXG4gICAgICAgIHRoaXMuZXJyb3IgPSBlcnJvclxyXG4gICAgICAgIHRoaXMubWV0aG9kID0gbWV0aG9kXHJcbiAgICAgICAgdGhpcy5wYXJhbXMgPSBwYXJhbXNcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEpzb25ScGNQcm92aWRlciBpbXBsZW1lbnRzIElKc29uUnBjUHJvdmlkZXIge1xyXG4gICAgXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgZW5kcG9pbnRzOiBzdHJpbmdbXVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgcmVjZWlwdHM6IFJlY29yZDxIYXNoLCBUcmFuc2FjdGlvblJlY2VpcHQ+ID0ge307XHJcblxyXG4gICAgcHJvdGVjdGVkIF9jb25zdGFudHM/OiBDb25zZW5zdXNDb25zdGFudHNcclxuICAgIHByb3RlY3RlZCBfaGVhZGVyczogQXhpb3NIZWFkZXJzO1xyXG4gICAgXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZSBhbmQgaW5pdGlhbGl6ZSBhIEpzb25ScGNQcm92aWRlciBvYmplY3QgY29ubmVjdGVkIHRvIHRoZSBkZWZhdWx0IFdpdC9SUEMgZW5kcG9pbnQuXHJcbiAgICAgKiBEZWZhdWx0cyB0byBodHRwczovL3JwYy0wMS53aXRuZXQuaW8gaWYgbm8gV0lUTkVUX1NES19QUk9WSURFUl9VUkwgZW52YXIgaXMgc2V0dGxlZFxyXG4gICAgICogb24gdGhlIGVudmlyb25tZW50LlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgYXN5bmMgZnJvbUVudih1cmw/OiBzdHJpbmcpOiBQcm9taXNlPEpzb25ScGNQcm92aWRlcj4ge1xyXG4gICAgICAgIHJldHVybiBKc29uUnBjUHJvdmlkZXIuZnJvbVVSTCh1cmwgfHwgcHJvY2Vzcy5lbnYuV0lUTkVUX1NES19QUk9WSURFUl9VUkwgfHwgXCJodHRwczovL3JwYy0wMS53aXRuZXQuaW9cIilcclxuICAgIH1cclxuICAgIFxyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGUgYW5kIGluaXRpYWxpemUgYSBKc29uUnBjUHJvdmlkZXIgb2JqZWN0IGNvbm5lY3RlZCB0byB0aGUgc3BlY2lmaWVkIFdpdC9SUEMgZW5kcG9pbnQuXHJcbiAgICAgKiBAcGFyYW0gdXJsIFdpdC9SUEMgZW5kcG9pbnQgVVJMLlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgYXN5bmMgZnJvbVVSTCh1cmw6IHN0cmluZyk6IFByb21pc2U8SnNvblJwY1Byb3ZpZGVyPiB7XHJcbiAgICAgICAgY29uc3QgcHJvdmlkZXIgPSBuZXcgSnNvblJwY1Byb3ZpZGVyKHVybClcclxuICAgICAgICByZXR1cm4gcHJvdmlkZXIuY29uc3RhbnRzKCkudGhlbigoKSA9PiBwcm92aWRlcilcclxuICAgIH1cclxuXHJcbiAgICBjb25zdHJ1Y3Rvcih1cmw/OiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLmVuZHBvaW50cyA9IFtdXHJcbiAgICAgICAgaWYgKHVybCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHVybHMgPSB1cmwucmVwbGFjZUFsbCgnLCcsICc7Jykuc3BsaXQoJzsnKVxyXG4gICAgICAgICAgICB1cmxzLmZvckVhY2godXJsID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IFtzY2hlbWEsIF0gPSB1dGlscy5wYXJzZVVSTCh1cmwpXHJcbiAgICAgICAgICAgICAgICBpZiAoIXNjaGVtYS5zdGFydHNXaXRoKFwiaHR0cDovL1wiKSAmJiAhc2NoZW1hLnN0YXJ0c1dpdGgoXCJodHRwczovL1wiKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKGBXaXRuZXQuSnNvblJwY1Byb3ZpZGVyOiB1bnN1cHBvcnRlZCBVUkwgc2NoZW1hICR7c2NoZW1hfWApXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIHRoaXMuZW5kcG9pbnRzID0gdXJsc1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZW5kcG9pbnRzLnB1c2gocHJvY2Vzcy5lbnYuV0lUTkVUX1NES19QUk9WSURFUl9VUkwgfHwgXCJodHRwczovL3JwYy0wMS53aXRuZXQuaW9cIilcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5faGVhZGVycyA9IG5ldyBBeGlvc0hlYWRlcnMoeyBcclxuICAgICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIgXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IG5ldHdvcmsoKTogTmV0d29yayB8IHVuZGVmaW5lZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2NvbnN0YW50cykge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fY29uc3RhbnRzLmJvb3RzdHJhcHBpbmdfY29tbWl0dGVlWzBdLnN0YXJ0c1dpdGgoJ3dpdCcpID8gXCJtYWlubmV0XCI6IFwidGVzdG5ldFwiXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IG5ldHdvcmtJZCgpOiBudW1iZXIgfCB1bmRlZmluZWQge1xyXG4gICAgICAgIGlmICh0aGlzLl9jb25zdGFudHMpIHtcclxuICAgICAgICAgICAgY29uc3Qgb2JqOiBhbnkgPSB7fVxyXG4gICAgICAgICAgICBvYmouYWN0aXZpdHlQZXJpb2QgPSB0aGlzLl9jb25zdGFudHMuYWN0aXZpdHlfcGVyaW9kO1xyXG4gICAgICAgICAgICBvYmouYm9vdHN0cmFwSGFzaCA9IHsgU0hBMjU2OiBBcnJheS5mcm9tKHV0aWxzLmZyb21IZXhTdHJpbmcodGhpcy5fY29uc3RhbnRzLmJvb3RzdHJhcF9oYXNoKSkgfVxyXG4gICAgICAgICAgICBvYmouYm9vdHN0cmFwcGluZ0NvbW1pdHRlZSA9IHRoaXMuX2NvbnN0YW50cy5ib290c3RyYXBwaW5nX2NvbW1pdHRlZVxyXG4gICAgICAgICAgICBvYmouY2hlY2twb2ludFplcm9UaW1lc3RhbXAgPSB0aGlzLl9jb25zdGFudHMuY2hlY2twb2ludF96ZXJvX3RpbWVzdGFtcFxyXG4gICAgICAgICAgICBvYmouY2hlY2twb2ludHNQZXJpb2QgPSB0aGlzLl9jb25zdGFudHMuY2hlY2twb2ludHNfcGVyaW9kXHJcbiAgICAgICAgICAgIG9iai5jb2xsYXRlcmFsQWdlID0gdGhpcy5fY29uc3RhbnRzLmNvbGxhdGVyYWxfYWdlXHJcbiAgICAgICAgICAgIG9iai5jb2xsYXRlcmFsTWluaW11bSA9IHRoaXMuX2NvbnN0YW50cy5jb2xsYXRlcmFsX21pbmltdW1cclxuICAgICAgICAgICAgb2JqLmVwb2Noc1dpdGhNaW5pbXVtRGlmZmljdWx0eSA9IHRoaXMuX2NvbnN0YW50cy5lcG9jaHNfd2l0aF9taW5pbXVtX2RpZmZpY3VsdHlcclxuICAgICAgICAgICAgb2JqLmV4dHJhUm91bmRzID0gdGhpcy5fY29uc3RhbnRzLmV4dHJhX3JvdW5kc1xyXG4gICAgICAgICAgICBvYmouZ2VuZXNpc0hhc2ggPSB7IFNIQTI1NjogQXJyYXkuZnJvbSh1dGlscy5mcm9tSGV4U3RyaW5nKHRoaXMuX2NvbnN0YW50cy5nZW5lc2lzX2hhc2gpKSB9XHJcbiAgICAgICAgICAgIG9iai5oYWx2aW5nUGVyaW9kID0gdGhpcy5fY29uc3RhbnRzLmhhbHZpbmdfcGVyaW9kXHJcbiAgICAgICAgICAgIG9iai5pbml0aWFsQmxvY2tSZXdhcmQgPSB0aGlzLl9jb25zdGFudHMuaW5pdGlhbF9ibG9ja19yZXdhcmRcclxuICAgICAgICAgICAgb2JqLm1heERyV2VpZ2h0ID0gdGhpcy5fY29uc3RhbnRzLm1heF9kcl93ZWlnaHRcclxuICAgICAgICAgICAgb2JqLm1heFZ0V2VpZ2h0ID0gdGhpcy5fY29uc3RhbnRzLm1heF92dF93ZWlnaHRcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2NvbnN0YW50cy5taW5pbXVtX2RpZmZpY3VsdHkgPiAwKSBvYmoubWluaW11bURpZmZpY3VsdHkgPSB0aGlzLl9jb25zdGFudHMubWluaW11bV9kaWZmaWN1bHR5XHJcbiAgICAgICAgICAgIG9iai5taW5pbmdCYWNrdXBGYWN0b3IgPSB0aGlzLl9jb25zdGFudHMubWluaW5nX2JhY2t1cF9mYWN0b3JcclxuICAgICAgICAgICAgb2JqLm1pbmluZ1JlcGxpY2F0aW9uRmFjdG9yID0gdGhpcy5fY29uc3RhbnRzLm1pbmluZ19yZXBsaWNhdGlvbl9mYWN0b3JcclxuICAgICAgICAgICAgb2JqLnJlcHV0YXRpb25FeHBpcmVBbHBoYURpZmYgPSB0aGlzLl9jb25zdGFudHMucmVwdXRhdGlvbl9leHBpcmVfYWxwaGFfZGlmZlxyXG4gICAgICAgICAgICBvYmoucmVwdXRhdGlvbklzc3VhbmNlID0gdGhpcy5fY29uc3RhbnRzLnJlcHV0YXRpb25faXNzdWFuY2VcclxuICAgICAgICAgICAgb2JqLnJlcHV0YXRpb25Jc3N1YW5jZVN0b3AgPSB0aGlzLl9jb25zdGFudHMucmVwdXRhdGlvbl9pc3N1YW5jZV9zdG9wXHJcbiAgICAgICAgICAgIG9iai5yZXB1dGF0aW9uUGVuYWxpemF0aW9uRmFjdG9yID0gdGhpcy5fY29uc3RhbnRzLnJlcHV0YXRpb25fcGVuYWxpemF0aW9uX2ZhY3RvclxyXG4gICAgICAgICAgICBvYmouc3VwZXJibG9ja0NvbW1pdHRlZURlY3JlYXNpbmdQZXJpb2QgPSB0aGlzLl9jb25zdGFudHMuc3VwZXJibG9ja19jb21taXR0ZWVfZGVjcmVhc2luZ19wZXJpb2RcclxuICAgICAgICAgICAgb2JqLnN1cGVyYmxvY2tDb21taXR0ZWVEZWNyZWFzaW5nU3RlcCA9IHRoaXMuX2NvbnN0YW50cy5zdXBlcmJsb2NrX2NvbW1pdHRlZV9kZWNyZWFzaW5nX3N0ZXBcclxuICAgICAgICAgICAgb2JqLnN1cGVyYmxvY2tQZXJpb2QgPSB0aGlzLl9jb25zdGFudHMuc3VwZXJibG9ja19wZXJpb2RcclxuICAgICAgICAgICAgb2JqLnN1cGVyYmxvY2tTaWduaW5nQ29tbWl0dGVlU2l6ZSA9IHRoaXMuX2NvbnN0YW50cy5zdXBlcmJsb2NrX3NpZ25pbmdfY29tbWl0dGVlX3NpemVcclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2cob2JqKVxyXG4gICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gcHJvdG9CdWYuZnJvbU9iamVjdChvYmopXHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKG1lc3NhZ2UpXHJcbiAgICAgICAgICAgIGNvbnN0IGJ1ZmZlciA9IHByb3RvQnVmLmVuY29kZShtZXNzYWdlKS5maW5pc2goKVxyXG4gICAgICAgICAgICBjb25zdCBoYXNoID0gdXRpbHMudG9IZXhTdHJpbmcodXRpbHMuc2hhMjU2KGJ1ZmZlcikpIFxyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhoYXNoKVxyXG4gICAgICAgICAgICBjb25zdCBoZXggPSBoYXNoLnN1YnN0cmluZygwLCA0KVxyXG4gICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQoaGV4LCAxNilcclxuICAgICAgICB9IFxyXG4gICAgICAgIHJldHVybiB1bmRlZmluZWRcclxuICAgIH1cclxuICAgIFxyXG4gICAgcHJvdGVjdGVkIG5leHRVUkwoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5lbmRwb2ludHNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogdGhpcy5lbmRwb2ludHMubGVuZ3RoKV1cclxuICAgIH1cclxuICAgIFxyXG4gICAgcHJvdGVjdGVkIGFzeW5jIGNhbGxBcGlNZXRob2Q8VD4obWV0aG9kOiBzdHJpbmcsIHBhcmFtcz86IEFycmF5PGFueT4gfCBhbnkgKTogUHJvbWlzZTxFcnJvciB8IGFueT4ge1xyXG4gICAgICAgIGNvbnN0IHVybCA9IHRoaXMubmV4dFVSTCgpXHJcbiAgICAgICAgcmV0dXJuIGF4aW9zXHJcbiAgICAgICAgICAgIC5wb3N0KFxyXG4gICAgICAgICAgICAgICAgdXJsLFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGpzb25ycGM6ICcyLjAnLFxyXG4gICAgICAgICAgICAgICAgICAgIGlkOiArIG5ldyBEYXRlKCksXHJcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kLFxyXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtcyxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogdGhpcy5faGVhZGVycyxcclxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1SZXNwb25zZTogZnVuY3Rpb24ocmVzcG9uc2UpIHsgcmV0dXJuIGpzb25CaWcoKS5wYXJzZShyZXNwb25zZSkgfSxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICApLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZT8uZXJyb3IgfHwgcmVzcG9uc2U/LmRhdGE/LmVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEpzb25ScGNQcm92aWRlckVycm9yKG1ldGhvZCwgcGFyYW1zLCByZXNwb25zZT8uZXJyb3IgfHwgcmVzcG9uc2U/LmRhdGE/LmVycm9yKTtcclxuXHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgcmV0dXJuIHJlc3BvbnNlPy5kYXRhPy5yZXN1bHQgYXMgVDtcclxuICAgICAgICAgICAgfSlcclxuICAgIH1cclxuICAgIFxyXG4gICAgLy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICBcclxuICAgIC8qKlxyXG4gICAgICogR2V0IHRoZSBsaXN0IG9mIGJsb2NrIGhhc2hlcyB3aXRoaW4gZ2l2ZW4gcmFuZ2UsIGFzIGtub3duIGJ5IHRoZSBwcm92aWRlci5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzaW5jZSAtIEZpcnN0IGVwb2NoIGZvciB3aGljaCB0byByZXR1cm4gYmxvY2sgaGFzaGVzLiBJZiBuZWdhdGl2ZSwgcmV0dXJuIGJsb2NrIGhhc2hlcyBmcm9tIHRoZSBsYXN0IG4gZXBvY2hzLlxyXG4gICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsaW1pdCAtIE51bWJlciBvZiBibG9jayBoYXNoZXMgdG8gcmV0dXJuLiBJZiBuZWdhdGl2ZSwgcmV0dXJuIHRoZSBsYXN0IG4gYmxvY2sgaGFzaGVzIGZyb20gdGhpcyBlcG9jaCByYW5nZS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGFzeW5jIGJsb2NrcyhzaW5jZTogbnVtYmVyID0gLTEsIGxpbWl0OiBudW1iZXIgPSAxLCk6IFByb21pc2U8QXJyYXk8W251bWJlciwgSGFzaF0+PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsbEFwaU1ldGhvZDxbTnVtYmVyLCBIYXNoXT4oTWV0aG9kcy5HZXRCbG9ja0NoYWluLCBbc2luY2UsIGxpbWl0LCBdKTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgLy8vIEdldCBjb25zZW5zdXMgY29uc3RhbnRzIHVzZWQgYnkgdGhlIG5vZGVcclxuICAgIHB1YmxpYyBhc3luYyBjb25zdGFudHMoKTogUHJvbWlzZTxDb25zZW5zdXNDb25zdGFudHM+IHtcclxuICAgICAgICBpZiAoIXRoaXMuX2NvbnN0YW50cykge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpc1xyXG4gICAgICAgICAgICAgICAgLmNhbGxBcGlNZXRob2Q8Q29uc2Vuc3VzQ29uc3RhbnRzPihNZXRob2RzLkdldENvbnNlbnN1c0NvbnN0YW50cylcclxuICAgICAgICAgICAgICAgIC50aGVuKChjb25zdGFudHM6IENvbnNlbnN1c0NvbnN0YW50cykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbnN0YW50cyA9IGNvbnN0YW50c1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb25zdGFudHNcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnN0YW50c1xyXG4gICAgICAgIH0gICAgXHJcbiAgICB9XHJcblxyXG4gICAgLy8vIEdldCBsaW1pdGVkIGxpc3Qgb2YgY3VycmVudGx5IHRvcCBob2xkZXJzLCBhcyBrbm93biBieSB0aGUgcHJvdmlkZXIuXHJcbiAgICBwdWJsaWMgYXN5bmMgaG9sZGVycyhtaW5CYWxhbmNlID0gMCwgbWF4QmFsYW5jZT86IG51bWJlcik6IFByb21pc2U8UmVjb3JkPFB1YmxpY0tleUhhc2hTdHJpbmcsIEJhbGFuY2UyPj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzXHJcbiAgICAgICAgICAgIC5jYWxsQXBpTWV0aG9kPFJlY29yZDxQdWJsaWNLZXlIYXNoU3RyaW5nLCBCYWxhbmNlPj4oTWV0aG9kcy5HZXRCYWxhbmNlMiwge1xyXG4gICAgICAgICAgICAgICAgYWxsOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWluQmFsYW5jZSxcclxuICAgICAgICAgICAgICAgICAgICAuLi4gbWF4QmFsYW5jZSA/IHsgbWF4QmFsYW5jZSB9IDoge31cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSkudGhlbigoYmFsYW5jZXM6IFJlY29yZDxQdWJsaWNLZXlIYXNoU3RyaW5nLCBCYWxhbmNlMj4pID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VDb21wYXJlID0gKGE6IEJhbGFuY2UyLCBiOiBCYWxhbmNlMikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFfdG90ID0gYS5sb2NrZWQgKyBhLnVubG9ja2VkICsgYS5zdGFrZWRcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBiX3RvdCA9IGIubG9ja2VkICsgYi51bmxvY2tlZCArIGIuc3Rha2VkXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFfdG90IDwgYl90b3QpIHJldHVybiAxO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGFfdG90ID4gYl90b3QpIHJldHVybiAtMTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHJldHVybiAwO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcclxuICAgICAgICAgICAgICAgICAgICBPYmplY3QuZW50cmllcyhiYWxhbmNlcylcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnNvcnQoKGE6IChzdHJpbmcgfCBCYWxhbmNlMilbXSwgYjogKHN0cmluZyB8IEJhbGFuY2UyKVtdKSA9PiByZXZlcnNlQ29tcGFyZShhWzFdIGFzIEJhbGFuY2UyLCBiWzFdIGFzIEJhbGFuY2UyKSlcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8vLyBHZXQgbGlzdCBvZiBrbm93biBwZWVyc1xyXG4gICAgcHVibGljIGFzeW5jIGtub3duUGVlcnMoKTogUHJvbWlzZTxBcnJheTxQZWVyQWRkcj4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jYWxsQXBpTWV0aG9kPEFycmF5PFBlZXJBZGRyPj4oTWV0aG9kcy5Lbm93blBlZXJzKTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgLy8vIEdldCBhbGwgdGhlIHBlbmRpbmcgdHJhbnNhY3Rpb25zXHJcbiAgICBwdWJsaWMgYXN5bmMgbWVtcG9vbCgpOiBQcm9taXNlPE1lbXBvb2w+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jYWxsQXBpTWV0aG9kPE1lbXBvb2w+KE1ldGhvZHMuR2V0TWVtcG9vbCk7XHJcbiAgICB9ICAgIFxyXG4gICAgXHJcbiAgICAvLy8gR2V0IHByaW9yaXR5IGFuZCB0aW1lLXRvLWJsb2NrIGVzdGltYXRpb25zIGZvciBkaWZmZXJlbnQgcHJpb3JpdHkgdGllcnMuXHJcbiAgICBwdWJsaWMgYXN5bmMgcHJpb3JpdGllcygpOiBQcm9taXNlPFByaW9yaXRpZXM+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jYWxsQXBpTWV0aG9kPFByaW9yaXRpZXM+KE1ldGhvZHMuUHJpb3JpdHkpXHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8vLyBHZXQgaW5mb3JtYXRpb24gYWJvdXQgcHJvdG9jb2wgdmVyc2lvbnMgYW5kIHdoaWNoIHZlcnNpb24gaXMgY3VycmVudGx5IGJlaW5nIGVuZm9yY2VkLlxyXG4gICAgcHVibGljIGFzeW5jIHByb3RvY29sSW5mbygpOiBQcm9taXNlPFByb3RvY29sSW5mbz4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNhbGxBcGlNZXRob2Q8UHJvdG9jb2xJbmZvPihNZXRob2RzLlByb3RvY29sKVxyXG4gICAgfVxyXG4gICAgXHJcbiAgICAvLy8gR2V0IGEgZnVsbCBsaXN0IG9mIHN0YWtpbmcgcG93ZXJzIG9yZGVyZWQgYnkgcmFua1xyXG4gICAgcHVibGljIGFzeW5jIHBvd2VycyhxdWVyeT86IFF1ZXJ5U3Rha2luZ1Bvd2Vycyk6IFByb21pc2U8QXJyYXk8U3Rha2luZ1Bvd2VyPj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNhbGxBcGlNZXRob2Q8QXJyYXk8U3Rha2luZ1Bvd2VyPj4oTWV0aG9kcy5RdWVyeVN0YWtpbmdQb3dlcnMsIHF1ZXJ5KVxyXG4gICAgfVxyXG4gICAgXHJcbiAgICAvLy8gR2V0IGEgZnVsbCBsaXN0IG9mIGN1cnJlbnQgc3Rha2UgZW50cmllcyAgUXVlcnkgdGhlIGFtb3VudCBvZiBuYW5vd2l0cyBzdGFrZWQgYnkgYW4gYWRkcmVzcy5cclxuICAgIHB1YmxpYyBhc3luYyBzdGFrZXMocXVlcnk/OiBRdWVyeVN0YWtlcyk6IFByb21pc2U8QXJyYXk8U3Rha2VFbnRyeT4+IHtcclxuICAgICAgICByZXR1cm4gdGhpc1xyXG4gICAgICAgICAgICAuY2FsbEFwaU1ldGhvZDxBcnJheTxTdGFrZUVudHJ5Pj4oTWV0aG9kcy5RdWVyeVN0YWtlcywgcXVlcnkpXHJcbiAgICAgICAgICAgIC5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGVycj8uZXJyb3I/Lm1lc3NhZ2UgJiYgZXJyLmVycm9yLm1lc3NhZ2UuaW5kZXhPZihcIm5vdCByZWdpc3RlcmVkXCIpID4gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gW11cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8vLyBHZXQgbm9kZSBzdGF0dXNcclxuICAgIHB1YmxpYyBhc3luYyBzeW5jU3RhdHVzKCk6IFByb21pc2U8U3luY1N0YXR1cz4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNhbGxBcGlNZXRob2Q8U3luY1N0YXR1cz4oTWV0aG9kcy5TeW5jU3RhdHVzKTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgcHVibGljIGFzeW5jIHdpcHMoKTogUHJvbWlzZTxTaWduYWxpbmdJbmZvPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsbEFwaU1ldGhvZDxTaWduYWxpbmdJbmZvPihNZXRob2RzLlNpZ25hbGluZ0luZm8pXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIHdpdG5lc3Nlcyhfc2luY2U/OiBudW1iZXIpOiBQcm9taXNlPG51bWJlcj4ge1xyXG4gICAgICAgIC8vIHRvZG86IHdpdG5lc3NlcyBlc3RpbWF0aW9uIHNob3VsZCBpbnN0ZWFkIGJlIGNvbXB1dGVkIGluIHByb3BvcnRpb24gdG9cclxuICAgICAgICAvLyAgICAgICByYXRpbyBvZiB2YWxpZGF0b3JzIHRoYXQgaGF2ZSBob25lc3RseSB3aXRuZXNzZWQgZGF0YSByZXF1ZXN0c1xyXG4gICAgICAgIC8vICAgICAgIHZzIHZhbGlkYXRvcnMgdGhhdCBoYXZlIGhvbmVzdGx5IHdpdG5lc3NlZCBkYXRhIHJlcXVlc3RzIGFuZFxyXG4gICAgICAgIC8vICAgICAgIG5ldmVyIHJldmVhbGVkIFwiaSBwYXNzZWRcIiBvdXQgb2YgbWFqb3JpdHksIFxyXG4gICAgICAgIC8vICAgICAgIHdpdGhpbiB0aGUgc3BlY2lmaWVkIHJhbmdlIG9mIGVwb2Nocy5cclxuICAgICAgICBsZXQgY2Vuc3VzID0gMFxyXG4gICAgICAgIHJldHVybiB0aGlzIFxyXG4gICAgICAgICAgICAuc3Rha2VzKHsgcGFyYW1zOiB7IGRpc3RpbmN0OiB0cnVlIH19KSAvLyB0b2RvOiBpbXBsZW1lbnQgYGNvdW50YCBmbGFnIG9uIElKc29uUnBjUHJvdmlkZXIuc3Rha2VzKClcclxuICAgICAgICAgICAgLnRoZW4ocmVjb3JkcyA9PiB7XHJcbiAgICAgICAgICAgICAgICBjZW5zdXMgPSByZWNvcmRzLmxlbmd0aFxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmxvY2tzKC0xNiwgMTYpIC8vIHRvZG86IGJsb2NrcygpIHNob3VsZCByZXR1cm4gZXBvY2gsIGhhc2ggYW5kIHZhbGlkYXRvciBwa2ggZm9yIGVhY2ggYmxvY2tcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLnRoZW4ocmVjb3JkcyA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwocmVjb3Jkcy5tYXAocmVjb3JkID0+IHRoaXMuZ2V0QmxvY2socmVjb3JkWzFdKSkpXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC50aGVuKGJsb2NrcyA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB2YWxpZGF0b3JzOiBBcnJheTxQdWJsaWNLZXlIYXNoU3RyaW5nPiA9IFtdXHJcbiAgICAgICAgICAgICAgICBibG9ja3MubWFwKGJsb2NrID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwa2ggPSBQdWJsaWNLZXkuZnJvbVByb3RvYnVmKGJsb2NrLmJsb2NrX3NpZy5wdWJsaWNfa2V5KS5oYXNoKCkudG9CZWNoMzIodGhpcy5uZXR3b3JrKVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdmFsaWRhdG9ycy5pbmNsdWRlcyhwa2gpKSB2YWxpZGF0b3JzLnB1c2gocGtoKTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5taW4oXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9ycy5sZW5ndGgsXHJcbiAgICAgICAgICAgICAgICAgICAgTWF0aC5mbG9vcih0aGlzLm5ldHdvcmsgPT09IFwidGVzdG5ldFwiID8gY2Vuc3VzIC8gMiA6IGNlbnN1cyAvIDQpXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vLyBHZXQgYmFsYW5jZVxyXG4gICAgcHVibGljIGFzeW5jIGdldEJhbGFuY2UocGtoOiBQdWJsaWNLZXlIYXNoU3RyaW5nKTogUHJvbWlzZTxCYWxhbmNlMj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzXHJcbiAgICAgICAgICAgIC5jYWxsQXBpTWV0aG9kPEJhbGFuY2UyPihNZXRob2RzLkdldEJhbGFuY2UyLCB7IHBraCB9KVxyXG4gICAgICAgICAgICAudGhlbigoYmFsYW5jZTogQmFsYW5jZTIpID0+ICh7XHJcbiAgICAgICAgICAgICAgICBsb2NrZWQ6IEJpZ0ludChiYWxhbmNlLmxvY2tlZCksXHJcbiAgICAgICAgICAgICAgICBzdGFrZWQ6IEJpZ0ludChiYWxhbmNlLnN0YWtlZCksXHJcbiAgICAgICAgICAgICAgICB1bmxvY2tlZDogQmlnSW50KGJhbGFuY2UudW5sb2NrZWQpLFxyXG4gICAgICAgICAgICB9KSlcclxuICAgIH1cclxuICAgIFxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgYmxvY2sgaW5mbyBieSBoYXNoXHJcbiAgICAgKiBAcGFyYW0ge0hhc2h9IGJsb2NrSGFzaCAtIEhhc2ggb2YgdGhlIGJsb2NrIHRoYXQgd2UgYXJlIHF1ZXJ5aW5nLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBzaG93VHJhbnNhY3Rpb25IYXNoIC0gV2hldGhlciB0byBpbmNsdWRlIGFuIGV4dHJhIGZpZWxkIGNvbnRhaW5pbmcgYXJyYXkgb2YgdHJhbnNhY3Rpb24gaGFzaGVzLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYXN5bmMgZ2V0QmxvY2soXHJcbiAgICAgICAgICAgIGJsb2NrSGFzaDogSGFzaCxcclxuICAgICAgICAgICAgc2hvd1RyYW5zYWN0aW9uSGFzaCA9IGZhbHNlLFxyXG4gICAgICAgICk6IFByb21pc2U8QmxvY2s+XHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsbEFwaU1ldGhvZDxCbG9jaz4oTWV0aG9kcy5HZXRCbG9jaywgW2Jsb2NrSGFzaCwgc2hvd1RyYW5zYWN0aW9uSGFzaCwgXSlcclxuICAgIH1cclxuICAgIFxyXG4gICAgcHVibGljIGFzeW5jIGdldERhdGFSZXF1ZXN0KGRyVHhIYXNoOiBIYXNoLCBtb2RlPzogR2V0RGF0YVJlcXVlc3RNb2RlLCBmb3JjZSA9IGZhbHNlKTogUHJvbWlzZTxHZXREYXRhUmVxdWVzdEZ1bGxSZXBvcnQgfCBHZXREYXRhUmVxdWVzdEV0aGVyZWFsUmVwb3J0PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsbEFwaU1ldGhvZDxHZXREYXRhUmVxdWVzdEZ1bGxSZXBvcnQgfCBHZXREYXRhUmVxdWVzdEV0aGVyZWFsUmVwb3J0PihNZXRob2RzLkdldERhdGFSZXF1ZXN0LCB7XHJcbiAgICAgICAgICAgIGhhc2g6IGRyVHhIYXNoLFxyXG4gICAgICAgICAgICBtb2RlOiBtb2RlIHx8IFwiZnVsbFwiLFxyXG4gICAgICAgICAgICBmb3JjZVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8vLyBHZXQgdGhlIGJsb2NrcyB0aGF0IHBlcnRhaW4gdG8gdGhlIHN1cGVyYmxvY2sgaW5kZXhcclxuICAgIHB1YmxpYyBhc3luYyBnZXRTdXBlcmJsb2NrKGVwb2NoOiBFcG9jaCk6IFByb21pc2U8U3VwZXJibG9ja1JlcG9ydD4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNhbGxBcGlNZXRob2Q8U3VwZXJibG9ja1JlcG9ydD4oTWV0aG9kcy5HZXRTdXBlcmJsb2NrLCB7IFwiYmxvY2tfZXBvY2hcIjogZXBvY2ggfSk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHB1YmxpYyBhc3luYyBnZXRUcmFuc2FjdGlvbih0eEhhc2g6IEhhc2gpOiBQcm9taXNlPFRyYW5zYWN0aW9uUmVwb3J0PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsbEFwaU1ldGhvZDxUcmFuc2FjdGlvblJlcG9ydD4oTWV0aG9kcy5HZXRUcmFuc2FjdGlvbiwgW3R4SGFzaCwgXSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIGdldFRyYW5zYWN0aW9uUmVjZWlwdCh0eEhhc2g6IEhhc2gpOiBQcm9taXNlPFRyYW5zYWN0aW9uUmVjZWlwdD4ge1xyXG4gICAgICAgIC8vIHRvZG86IGZldGNoL3VwZGF0ZSByZWNlaXB0IGZyb20gcHJvdmlkZXIsIGlmIG5vdCBjYWNoZWRcclxuICAgICAgICByZXR1cm4gSnNvblJwY1Byb3ZpZGVyLnJlY2VpcHRzW3R4SGFzaF1cclxuICAgIH1cclxuICAgIFxyXG4gICAgLy8vIEdldCB1dHhvc1xyXG4gICAgcHVibGljIGFzeW5jIGdldFV0eG9zKHBraDogUHVibGljS2V5SGFzaFN0cmluZywgc21hbGxGaXJzdCA9IHRydWUpOiBQcm9taXNlPEFycmF5PFV0eG9NZXRhZGF0YT4+IHtcclxuICAgICAgICByZXR1cm4gdGhpc1xyXG4gICAgICAgICAgICAuY2FsbEFwaU1ldGhvZDxVdHhvSW5mbz4oTWV0aG9kcy5HZXRVdHhvSW5mbywgW3BraCwgXSlcclxuICAgICAgICAgICAgLnRoZW4oKHJlc3VsdDogVXR4b0luZm8pID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGludmVyc29yID0gc21hbGxGaXJzdCA/IDEgOiAtMVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC51dHhvcy5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGEudmFsdWUgPiBiLnZhbHVlKSByZXR1cm4gaW52ZXJzb3I7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoYS52YWx1ZSA8IGIudmFsdWUpIHJldHVybiAtIGludmVyc29yO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgcmV0dXJuIDA7XHJcbiAgICAgICAgICAgICAgICB9KS5tYXAoKHV0eG86IFV0eG9NZXRhZGF0YSkgPT4gKHtcclxuICAgICAgICAgICAgICAgICAgICAuLi51dHhvLFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBCaWdJbnQodXR4by52YWx1ZSksXHJcbiAgICAgICAgICAgICAgICB9KSlcclxuICAgICAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgZ2V0VmFsdWVUcmFuc2Zlcih0eEhhc2g6IEhhc2gsIG1vZGU/OiBzdHJpbmcsIGZvcmNlID0gZmFsc2UpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNhbGxBcGlNZXRob2Q8YW55PihNZXRob2RzLkdldFZhbHVlVHJhbnNmZXIsIHtcclxuICAgICAgICAgICAgaGFzaDogdHhIYXNoLFxyXG4gICAgICAgICAgICBtb2RlOiBtb2RlLFxyXG4gICAgICAgICAgICBmb3JjZVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIHB1YmxpYyBhc3luYyBzZW5kUmF3VHJhbnNhY3Rpb24odHJhbnNhY3Rpb246IGFueSk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNhbGxBcGlNZXRob2Q8Ym9vbGVhbj4oTWV0aG9kcy5JbnZlbnRvcnksIHsgdHJhbnNhY3Rpb24gfSlcclxuICAgIH1cclxuXHJcbiAgICAvLy8gR2V0IHN1cHBseSBpbmZvXHJcbiAgICBwdWJsaWMgYXN5bmMgc3VwcGx5SW5mbygpOiBQcm9taXNlPFN1cHBseUluZm8+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jYWxsQXBpTWV0aG9kPFN1cHBseUluZm8+KE1ldGhvZHMuR2V0U3VwcGx5SW5mbylcclxuICAgIH1cclxufSJdfQ==
|
|
340
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3JwYy9wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwrQ0FBc0Q7QUFDdEQsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQ3ZDLDJDQUE4QztBQUM5QyxNQUFNLFNBQVMsR0FBRyxpQkFBUyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsbUNBQW1DLENBQUMsQ0FBQyxDQUFBO0FBQ2xGLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUMsb0JBQW9CLENBQUMsQ0FBQTtBQUUzRCwyQ0FBb0Y7QUFFcEYsZ0RBQWlDO0FBRWpDLG1DQU9nQjtBQStCaEIsTUFBYSxvQkFBcUIsU0FBUSxLQUFLO0lBSTNDLFlBQVksTUFBYyxFQUFFLE1BQWEsRUFBRSxLQUFXO1FBQ2xELEtBQUssQ0FBQyxHQUFHLE1BQU0sSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQ3hFLE9BQU8sS0FBSyxFQUFFLEtBQUssQ0FBQTtRQUNuQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQTtRQUNsQixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQTtRQUNwQixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQTtJQUN4QixDQUFDO0NBQ0o7QUFYRCxvREFXQztBQUVELE1BQWEsZUFBZTtJQVN4Qjs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBWTtRQUM3QixPQUFPLGVBQWUsQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsdUJBQXVCLElBQUksMEJBQTBCLENBQUMsQ0FB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QyxLQUFLLENBQUM7U0FDNUIsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNaLENBQUM7SUFFTSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsTUFBWSxFQUFFLElBQWEsRUFBRSxLQUFLLEdBQUcsS0FBSztRQUNwRSxPQUFPLElBQUksQ0FBQyxhQUFhLENBQU0sZUFBTyxDQUFDLGdCQUFnQixFQUFFO1lBQ3JELElBQUksRUFBRSxNQUFNO1lBQ1osSUFBSSxFQUFFLElBQUk7WUFDVixLQUFLO1NBQ1IsQ0FBQyxDQUFBO0lBQ04sQ0FBQztJQUVELG1IQUFtSDtJQUM1RyxLQUFLLENBQUMsa0JBQWtCLENBQUMsV0FBZ0I7UUFDNUMsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFVLGVBQU8sQ0FBQyxTQUFTLEVBQUUsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFBO0lBQzFFLENBQUM7SUFFRCxtQkFBbUI7SUFDWixLQUFLLENBQUMsVUFBVTtRQUNuQixPQUFPLElBQUksQ0FBQyxhQUFhLENBQWEsZUFBTyxDQUFDLGFBQWEsQ0FBQyxDQUFBO0lBQ2hFLENBQUM7O0FBbFVMLDBDQW1VQztBQS9UaUIsd0JBQVEsR0FBcUMsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGVmYXVsdCBhcyBheGlvcywgQXhpb3NIZWFkZXJzIH0gZnJvbSBcImF4aW9zXCJcclxuY29uc3QganNvbkJpZyA9IHJlcXVpcmUoJ2pzb24tYmlnaW50Jyk7XHJcbmltcG9ydCB7IFJvb3QgYXMgUHJvdG9Sb290IH0gZnJvbSBcInByb3RvYnVmanNcIlxyXG5jb25zdCBwcm90b1Jvb3QgPSBQcm90b1Jvb3QuZnJvbUpTT04ocmVxdWlyZShcIi4uLy4uLy4uL3dpdG5ldC93aXRuZXQucHJvdG8uanNvblwiKSkgXHJcbmNvbnN0IHByb3RvQnVmID0gcHJvdG9Sb290Lmxvb2t1cFR5cGUoXCJDb25zZW5zdXNDb25zdGFudHNcIilcclxuXHJcbmltcG9ydCB7IFB1YmxpY0tleSwgUHVibGljS2V5SGFzaFN0cmluZywgVHJhbnNhY3Rpb25SZWNlaXB0IH0gZnJvbSBcIi4uL2NyeXB0by90eXBlc1wiXHJcbmltcG9ydCB7IEVwb2NoLCBIYXNoLCBOZXR3b3JrLCBVdHhvTWV0YWRhdGEgfSBmcm9tIFwiLi4vdHlwZXNcIlxyXG5pbXBvcnQgKiBhcyB1dGlscyBmcm9tIFwiLi4vdXRpbHNcIlxyXG5cclxuaW1wb3J0IHtcclxuICAgIEJhbGFuY2UsIEJhbGFuY2UyLCBCbG9jaywgQ29uc2Vuc3VzQ29uc3RhbnRzLCBcclxuICAgIEdldERhdGFSZXF1ZXN0RnVsbFJlcG9ydCwgR2V0RGF0YVJlcXVlc3RFdGhlcmVhbFJlcG9ydCwgR2V0RGF0YVJlcXVlc3RNb2RlLFxyXG4gICAgTWVtcG9vbCwgTWV0aG9kcywgUGVlckFkZHIsIFByaW9yaXRpZXMsIFByb3RvY29sSW5mbywgXHJcbiAgICBRdWVyeVN0YWtlcywgUXVlcnlTdGFraW5nUG93ZXJzLFxyXG4gICAgVHJhbnNhY3Rpb25SZXBvcnQsIFNpZ25hbGluZ0luZm8sIFN0YWtlRW50cnksIFN0YWtpbmdQb3dlciwgXHJcbiAgICBTdXBlcmJsb2NrUmVwb3J0LCBTdXBwbHlJbmZvLCBTeW5jU3RhdHVzLCBVdHhvSW5mbyxcclxufSBmcm9tIFwiLi90eXBlc1wiXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElKc29uUnBjUHJvdmlkZXIge1xyXG4gICAgbmV0d29yaz86IE5ldHdvcms7XHJcbiAgICBuZXR3b3JrSWQ/OiBudW1iZXI7XHJcbiAgICBcclxuICAgIGJsb2NrcyhzaW5jZTogRXBvY2gsIGxpbWl0OiBudW1iZXIpOiBQcm9taXNlPEFycmF5PFtudW1iZXIsIEhhc2gvKiwgUHVibGljS2V5SGFzaFN0cmluZyovXT4+O1xyXG4gICAgY29uc3RhbnRzKCk6IFByb21pc2U8Q29uc2Vuc3VzQ29uc3RhbnRzPjtcclxuICAgIGhvbGRlcnMobGltaXQ/OiBudW1iZXIpOiBQcm9taXNlPFJlY29yZDxQdWJsaWNLZXlIYXNoU3RyaW5nLCBCYWxhbmNlMj4+IFxyXG4gICAgbWVtcG9vbCgpOiBQcm9taXNlPE1lbXBvb2w+O1xyXG4gICAgcG93ZXJzKHBhcmFtcz86IFF1ZXJ5U3Rha2luZ1Bvd2Vycyk6IFByb21pc2U8QXJyYXk8U3Rha2luZ1Bvd2VyPj47XHJcbiAgICBwcmlvcml0aWVzKCk6IFByb21pc2U8UHJpb3JpdGllcz47XHJcbiAgICBwcm90b2NvbEluZm8oKTogUHJvbWlzZTxQcm90b2NvbEluZm8+O1xyXG4gICAgc3Rha2VzKHBhcmFtczogUXVlcnlTdGFrZXMpOiBQcm9taXNlPEFycmF5PFN0YWtlRW50cnk+PjsgXHJcbiAgICBzdXBwbHlJbmZvKCk6IFByb21pc2U8U3VwcGx5SW5mbz47XHJcbiAgICBzeW5jU3RhdHVzKCk6IFByb21pc2U8YW55PjtcclxuICAgIHdpcHMoKTogUHJvbWlzZTxTaWduYWxpbmdJbmZvPjtcclxuICAgIHdpdG5lc3NlcygpOiBQcm9taXNlPG51bWJlcj47XHJcblxyXG4gICAgZ2V0QmFsYW5jZShwa2g6IFB1YmxpY0tleUhhc2hTdHJpbmcpOiBQcm9taXNlPEJhbGFuY2UyPjtcclxuICAgIGdldEJsb2NrKGJsb2NrSGFzaDogSGFzaCwgc2hvd1RyYW5zYWN0aW9uSGFzaGVzPzogYm9vbGVhbik6IFByb21pc2U8QmxvY2s+O1xyXG4gICAgZ2V0RGF0YVJlcXVlc3QoZHJUeEhhc2g6IEhhc2gsIG1vZGU/OiBHZXREYXRhUmVxdWVzdE1vZGUpOiBQcm9taXNlPEdldERhdGFSZXF1ZXN0RnVsbFJlcG9ydCB8IEdldERhdGFSZXF1ZXN0RXRoZXJlYWxSZXBvcnQ+O1xyXG4gICAgZ2V0U3VwZXJibG9jayhlcG9jaDogRXBvY2gpOiBQcm9taXNlPFN1cGVyYmxvY2tSZXBvcnQ+O1xyXG4gICAgZ2V0VHJhbnNhY3Rpb24odHhIYXNoOiBIYXNoKTogUHJvbWlzZTxUcmFuc2FjdGlvblJlcG9ydD47XHJcbiAgICBnZXRUcmFuc2FjdGlvblJlY2VpcHQodHhIYXNoOiBIYXNoKTogUHJvbWlzZTxUcmFuc2FjdGlvblJlY2VpcHQ+O1xyXG4gICAgZ2V0VXR4b3MocGtoOiBQdWJsaWNLZXlIYXNoU3RyaW5nLCBmaWx0ZXI/OiB7IG1pblZhbHVlPzogYmlnaW50LCBzaWduZXI/OiBQdWJsaWNLZXlIYXNoU3RyaW5nIH0pOiBQcm9taXNlPEFycmF5PFV0eG9NZXRhZGF0YT4+O1xyXG4gICAgZ2V0VmFsdWVUcmFuc2Zlcih0eEhhc2g6IEhhc2gsIG1vZGU/OiBzdHJpbmcpOiBQcm9taXNlPGFueT47XHJcbiAgICAgICAgXHJcbiAgICBzZW5kUmF3VHJhbnNhY3Rpb24odHg6IGFueSk6IFByb21pc2U8Ym9vbGVhbj47XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBKc29uUnBjUHJvdmlkZXJFcnJvciBleHRlbmRzIEVycm9yIHtcclxuICAgIHJlYWRvbmx5IGVycm9yPzogYW55O1xyXG4gICAgcmVhZG9ubHkgbWV0aG9kOiBzdHJpbmc7XHJcbiAgICByZWFkb25seSBwYXJhbXM6IGFueVtdO1xyXG4gICAgY29uc3RydWN0b3IobWV0aG9kOiBzdHJpbmcsIHBhcmFtczogYW55W10sIGVycm9yPzogYW55KSB7XHJcbiAgICAgICAgc3VwZXIoYCR7bWV0aG9kfSgke0pTT04uc3RyaW5naWZ5KHBhcmFtcyl9KTogJHtKU09OLnN0cmluZ2lmeShlcnJvcil9KWApXHJcbiAgICAgICAgZGVsZXRlIGVycm9yPy5zdGFja1xyXG4gICAgICAgIHRoaXMuZXJyb3IgPSBlcnJvclxyXG4gICAgICAgIHRoaXMubWV0aG9kID0gbWV0aG9kXHJcbiAgICAgICAgdGhpcy5wYXJhbXMgPSBwYXJhbXNcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEpzb25ScGNQcm92aWRlciBpbXBsZW1lbnRzIElKc29uUnBjUHJvdmlkZXIge1xyXG4gICAgXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgZW5kcG9pbnRzOiBzdHJpbmdbXVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgcmVjZWlwdHM6IFJlY29yZDxIYXNoLCBUcmFuc2FjdGlvblJlY2VpcHQ+ID0ge307XHJcblxyXG4gICAgcHJvdGVjdGVkIF9jb25zdGFudHM/OiBDb25zZW5zdXNDb25zdGFudHNcclxuICAgIHByb3RlY3RlZCBfaGVhZGVyczogQXhpb3NIZWFkZXJzO1xyXG4gICAgXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZSBhbmQgaW5pdGlhbGl6ZSBhIEpzb25ScGNQcm92aWRlciBvYmplY3QgY29ubmVjdGVkIHRvIHRoZSBkZWZhdWx0IFdpdC9SUEMgZW5kcG9pbnQuXHJcbiAgICAgKiBEZWZhdWx0cyB0byBodHRwczovL3JwYy0wMS53aXRuZXQuaW8gaWYgbm8gV0lUTkVUX1NES19QUk9WSURFUl9VUkwgZW52YXIgaXMgc2V0dGxlZFxyXG4gICAgICogb24gdGhlIGVudmlyb25tZW50LlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgYXN5bmMgZnJvbUVudih1cmw/OiBzdHJpbmcpOiBQcm9taXNlPEpzb25ScGNQcm92aWRlcj4ge1xyXG4gICAgICAgIHJldHVybiBKc29uUnBjUHJvdmlkZXIuZnJvbVVSTCh1cmwgfHwgcHJvY2Vzcy5lbnYuV0lUTkVUX1NES19QUk9WSURFUl9VUkwgfHwgXCJodHRwczovL3JwYy0wMS53aXRuZXQuaW9cIilcclxuICAgIH1cclxuICAgIFxyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGUgYW5kIGluaXRpYWxpemUgYSBKc29uUnBjUHJvdmlkZXIgb2JqZWN0IGNvbm5lY3RlZCB0byB0aGUgc3BlY2lmaWVkIFdpdC9SUEMgZW5kcG9pbnQuXHJcbiAgICAgKiBAcGFyYW0gdXJsIFdpdC9SUEMgZW5kcG9pbnQgVVJMLlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgYXN5bmMgZnJvbVVSTCh1cmw6IHN0cmluZyk6IFByb21pc2U8SnNvblJwY1Byb3ZpZGVyPiB7XHJcbiAgICAgICAgY29uc3QgcHJvdmlkZXIgPSBuZXcgSnNvblJwY1Byb3ZpZGVyKHVybClcclxuICAgICAgICByZXR1cm4gcHJvdmlkZXIuY29uc3RhbnRzKCkudGhlbigoKSA9PiBwcm92aWRlcilcclxuICAgIH1cclxuXHJcbiAgICBjb25zdHJ1Y3Rvcih1cmw/OiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLmVuZHBvaW50cyA9IFtdXHJcbiAgICAgICAgaWYgKHVybCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHVybHMgPSB1cmwucmVwbGFjZUFsbCgnLCcsICc7Jykuc3BsaXQoJzsnKVxyXG4gICAgICAgICAgICB1cmxzLmZvckVhY2godXJsID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IFtzY2hlbWEsIF0gPSB1dGlscy5wYXJzZVVSTCh1cmwpXHJcbiAgICAgICAgICAgICAgICBpZiAoIXNjaGVtYS5zdGFydHNXaXRoKFwiaHR0cDovL1wiKSAmJiAhc2NoZW1hLnN0YXJ0c1dpdGgoXCJodHRwczovL1wiKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKGBXaXRuZXQuSnNvblJwY1Byb3ZpZGVyOiB1bnN1cHBvcnRlZCBVUkwgc2NoZW1hICR7c2NoZW1hfWApXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIHRoaXMuZW5kcG9pbnRzID0gdXJsc1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZW5kcG9pbnRzLnB1c2gocHJvY2Vzcy5lbnYuV0lUTkVUX1NES19QUk9WSURFUl9VUkwgfHwgXCJodHRwczovL3JwYy0wMS53aXRuZXQuaW9cIilcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5faGVhZGVycyA9IG5ldyBBeGlvc0hlYWRlcnMoeyBcclxuICAgICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIgXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IG5ldHdvcmsoKTogTmV0d29yayB8IHVuZGVmaW5lZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2NvbnN0YW50cykge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fY29uc3RhbnRzLmJvb3RzdHJhcHBpbmdfY29tbWl0dGVlWzBdLnN0YXJ0c1dpdGgoJ3dpdCcpID8gXCJtYWlubmV0XCI6IFwidGVzdG5ldFwiXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IG5ldHdvcmtJZCgpOiBudW1iZXIgfCB1bmRlZmluZWQge1xyXG4gICAgICAgIGlmICh0aGlzLl9jb25zdGFudHMpIHtcclxuICAgICAgICAgICAgY29uc3Qgb2JqOiBhbnkgPSB7fVxyXG4gICAgICAgICAgICBvYmouYWN0aXZpdHlQZXJpb2QgPSB0aGlzLl9jb25zdGFudHMuYWN0aXZpdHlfcGVyaW9kO1xyXG4gICAgICAgICAgICBvYmouYm9vdHN0cmFwSGFzaCA9IHsgU0hBMjU2OiBBcnJheS5mcm9tKHV0aWxzLmZyb21IZXhTdHJpbmcodGhpcy5fY29uc3RhbnRzLmJvb3RzdHJhcF9oYXNoKSkgfVxyXG4gICAgICAgICAgICBvYmouYm9vdHN0cmFwcGluZ0NvbW1pdHRlZSA9IHRoaXMuX2NvbnN0YW50cy5ib290c3RyYXBwaW5nX2NvbW1pdHRlZVxyXG4gICAgICAgICAgICBvYmouY2hlY2twb2ludFplcm9UaW1lc3RhbXAgPSB0aGlzLl9jb25zdGFudHMuY2hlY2twb2ludF96ZXJvX3RpbWVzdGFtcFxyXG4gICAgICAgICAgICBvYmouY2hlY2twb2ludHNQZXJpb2QgPSB0aGlzLl9jb25zdGFudHMuY2hlY2twb2ludHNfcGVyaW9kXHJcbiAgICAgICAgICAgIG9iai5jb2xsYXRlcmFsQWdlID0gdGhpcy5fY29uc3RhbnRzLmNvbGxhdGVyYWxfYWdlXHJcbiAgICAgICAgICAgIG9iai5jb2xsYXRlcmFsTWluaW11bSA9IHRoaXMuX2NvbnN0YW50cy5jb2xsYXRlcmFsX21pbmltdW1cclxuICAgICAgICAgICAgb2JqLmVwb2Noc1dpdGhNaW5pbXVtRGlmZmljdWx0eSA9IHRoaXMuX2NvbnN0YW50cy5lcG9jaHNfd2l0aF9taW5pbXVtX2RpZmZpY3VsdHlcclxuICAgICAgICAgICAgb2JqLmV4dHJhUm91bmRzID0gdGhpcy5fY29uc3RhbnRzLmV4dHJhX3JvdW5kc1xyXG4gICAgICAgICAgICBvYmouZ2VuZXNpc0hhc2ggPSB7IFNIQTI1NjogQXJyYXkuZnJvbSh1dGlscy5mcm9tSGV4U3RyaW5nKHRoaXMuX2NvbnN0YW50cy5nZW5lc2lzX2hhc2gpKSB9XHJcbiAgICAgICAgICAgIG9iai5oYWx2aW5nUGVyaW9kID0gdGhpcy5fY29uc3RhbnRzLmhhbHZpbmdfcGVyaW9kXHJcbiAgICAgICAgICAgIG9iai5pbml0aWFsQmxvY2tSZXdhcmQgPSB0aGlzLl9jb25zdGFudHMuaW5pdGlhbF9ibG9ja19yZXdhcmRcclxuICAgICAgICAgICAgb2JqLm1heERyV2VpZ2h0ID0gdGhpcy5fY29uc3RhbnRzLm1heF9kcl93ZWlnaHRcclxuICAgICAgICAgICAgb2JqLm1heFZ0V2VpZ2h0ID0gdGhpcy5fY29uc3RhbnRzLm1heF92dF93ZWlnaHRcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2NvbnN0YW50cy5taW5pbXVtX2RpZmZpY3VsdHkgPiAwKSBvYmoubWluaW11bURpZmZpY3VsdHkgPSB0aGlzLl9jb25zdGFudHMubWluaW11bV9kaWZmaWN1bHR5XHJcbiAgICAgICAgICAgIG9iai5taW5pbmdCYWNrdXBGYWN0b3IgPSB0aGlzLl9jb25zdGFudHMubWluaW5nX2JhY2t1cF9mYWN0b3JcclxuICAgICAgICAgICAgb2JqLm1pbmluZ1JlcGxpY2F0aW9uRmFjdG9yID0gdGhpcy5fY29uc3RhbnRzLm1pbmluZ19yZXBsaWNhdGlvbl9mYWN0b3JcclxuICAgICAgICAgICAgb2JqLnJlcHV0YXRpb25FeHBpcmVBbHBoYURpZmYgPSB0aGlzLl9jb25zdGFudHMucmVwdXRhdGlvbl9leHBpcmVfYWxwaGFfZGlmZlxyXG4gICAgICAgICAgICBvYmoucmVwdXRhdGlvbklzc3VhbmNlID0gdGhpcy5fY29uc3RhbnRzLnJlcHV0YXRpb25faXNzdWFuY2VcclxuICAgICAgICAgICAgb2JqLnJlcHV0YXRpb25Jc3N1YW5jZVN0b3AgPSB0aGlzLl9jb25zdGFudHMucmVwdXRhdGlvbl9pc3N1YW5jZV9zdG9wXHJcbiAgICAgICAgICAgIG9iai5yZXB1dGF0aW9uUGVuYWxpemF0aW9uRmFjdG9yID0gdGhpcy5fY29uc3RhbnRzLnJlcHV0YXRpb25fcGVuYWxpemF0aW9uX2ZhY3RvclxyXG4gICAgICAgICAgICBvYmouc3VwZXJibG9ja0NvbW1pdHRlZURlY3JlYXNpbmdQZXJpb2QgPSB0aGlzLl9jb25zdGFudHMuc3VwZXJibG9ja19jb21taXR0ZWVfZGVjcmVhc2luZ19wZXJpb2RcclxuICAgICAgICAgICAgb2JqLnN1cGVyYmxvY2tDb21taXR0ZWVEZWNyZWFzaW5nU3RlcCA9IHRoaXMuX2NvbnN0YW50cy5zdXBlcmJsb2NrX2NvbW1pdHRlZV9kZWNyZWFzaW5nX3N0ZXBcclxuICAgICAgICAgICAgb2JqLnN1cGVyYmxvY2tQZXJpb2QgPSB0aGlzLl9jb25zdGFudHMuc3VwZXJibG9ja19wZXJpb2RcclxuICAgICAgICAgICAgb2JqLnN1cGVyYmxvY2tTaWduaW5nQ29tbWl0dGVlU2l6ZSA9IHRoaXMuX2NvbnN0YW50cy5zdXBlcmJsb2NrX3NpZ25pbmdfY29tbWl0dGVlX3NpemVcclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2cob2JqKVxyXG4gICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gcHJvdG9CdWYuZnJvbU9iamVjdChvYmopXHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKG1lc3NhZ2UpXHJcbiAgICAgICAgICAgIGNvbnN0IGJ1ZmZlciA9IHByb3RvQnVmLmVuY29kZShtZXNzYWdlKS5maW5pc2goKVxyXG4gICAgICAgICAgICBjb25zdCBoYXNoID0gdXRpbHMudG9IZXhTdHJpbmcodXRpbHMuc2hhMjU2KGJ1ZmZlcikpIFxyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhoYXNoKVxyXG4gICAgICAgICAgICBjb25zdCBoZXggPSBoYXNoLnN1YnN0cmluZygwLCA0KVxyXG4gICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQoaGV4LCAxNilcclxuICAgICAgICB9IFxyXG4gICAgICAgIHJldHVybiB1bmRlZmluZWRcclxuICAgIH1cclxuICAgIFxyXG4gICAgcHJvdGVjdGVkIG5leHRVUkwoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5lbmRwb2ludHNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogdGhpcy5lbmRwb2ludHMubGVuZ3RoKV1cclxuICAgIH1cclxuICAgIFxyXG4gICAgcHJvdGVjdGVkIGFzeW5jIGNhbGxBcGlNZXRob2Q8VD4obWV0aG9kOiBzdHJpbmcsIHBhcmFtcz86IEFycmF5PGFueT4gfCBhbnkgKTogUHJvbWlzZTxFcnJvciB8IGFueT4ge1xyXG4gICAgICAgIGNvbnN0IHVybCA9IHRoaXMubmV4dFVSTCgpXHJcbiAgICAgICAgcmV0dXJuIGF4aW9zXHJcbiAgICAgICAgICAgIC5wb3N0KFxyXG4gICAgICAgICAgICAgICAgdXJsLFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGpzb25ycGM6ICcyLjAnLFxyXG4gICAgICAgICAgICAgICAgICAgIGlkOiArIG5ldyBEYXRlKCksXHJcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kLFxyXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtcyxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogdGhpcy5faGVhZGVycyxcclxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1SZXNwb25zZTogZnVuY3Rpb24ocmVzcG9uc2UpIHsgcmV0dXJuIGpzb25CaWcoKS5wYXJzZShyZXNwb25zZSkgfSxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICApLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZT8uZXJyb3IgfHwgcmVzcG9uc2U/LmRhdGE/LmVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEpzb25ScGNQcm92aWRlckVycm9yKG1ldGhvZCwgcGFyYW1zLCByZXNwb25zZT8uZXJyb3IgfHwgcmVzcG9uc2U/LmRhdGE/LmVycm9yKTtcclxuXHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgcmV0dXJuIHJlc3BvbnNlPy5kYXRhPy5yZXN1bHQgYXMgVDtcclxuICAgICAgICAgICAgfSlcclxuICAgIH1cclxuICAgIFxyXG4gICAgLy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICBcclxuICAgIC8qKlxyXG4gICAgICogR2V0IHRoZSBsaXN0IG9mIGJsb2NrIGhhc2hlcyB3aXRoaW4gZ2l2ZW4gcmFuZ2UsIGFzIGtub3duIGJ5IHRoZSBwcm92aWRlci5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzaW5jZSAtIEZpcnN0IGVwb2NoIGZvciB3aGljaCB0byByZXR1cm4gYmxvY2sgaGFzaGVzLiBJZiBuZWdhdGl2ZSwgcmV0dXJuIGJsb2NrIGhhc2hlcyBmcm9tIHRoZSBsYXN0IG4gZXBvY2hzLlxyXG4gICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsaW1pdCAtIE51bWJlciBvZiBibG9jayBoYXNoZXMgdG8gcmV0dXJuLiBJZiBuZWdhdGl2ZSwgcmV0dXJuIHRoZSBsYXN0IG4gYmxvY2sgaGFzaGVzIGZyb20gdGhpcyBlcG9jaCByYW5nZS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGFzeW5jIGJsb2NrcyhzaW5jZTogbnVtYmVyID0gLTEsIGxpbWl0OiBudW1iZXIgPSAxLCk6IFByb21pc2U8QXJyYXk8W251bWJlciwgSGFzaF0+PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsbEFwaU1ldGhvZDxbTnVtYmVyLCBIYXNoXT4oTWV0aG9kcy5HZXRCbG9ja0NoYWluLCBbc2luY2UsIGxpbWl0LCBdKTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgLy8vIEdldCBjb25zZW5zdXMgY29uc3RhbnRzIHVzZWQgYnkgdGhlIG5vZGVcclxuICAgIHB1YmxpYyBhc3luYyBjb25zdGFudHMoKTogUHJvbWlzZTxDb25zZW5zdXNDb25zdGFudHM+IHtcclxuICAgICAgICBpZiAoIXRoaXMuX2NvbnN0YW50cykge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpc1xyXG4gICAgICAgICAgICAgICAgLmNhbGxBcGlNZXRob2Q8Q29uc2Vuc3VzQ29uc3RhbnRzPihNZXRob2RzLkdldENvbnNlbnN1c0NvbnN0YW50cylcclxuICAgICAgICAgICAgICAgIC50aGVuKChjb25zdGFudHM6IENvbnNlbnN1c0NvbnN0YW50cykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbnN0YW50cyA9IGNvbnN0YW50c1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb25zdGFudHNcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnN0YW50c1xyXG4gICAgICAgIH0gICAgXHJcbiAgICB9XHJcblxyXG4gICAgLy8vIEdldCBsaW1pdGVkIGxpc3Qgb2YgY3VycmVudGx5IHRvcCBob2xkZXJzLCBhcyBrbm93biBieSB0aGUgcHJvdmlkZXIuXHJcbiAgICBwdWJsaWMgYXN5bmMgaG9sZGVycyhtaW5CYWxhbmNlID0gMCwgbWF4QmFsYW5jZT86IG51bWJlcik6IFByb21pc2U8UmVjb3JkPFB1YmxpY0tleUhhc2hTdHJpbmcsIEJhbGFuY2UyPj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzXHJcbiAgICAgICAgICAgIC5jYWxsQXBpTWV0aG9kPFJlY29yZDxQdWJsaWNLZXlIYXNoU3RyaW5nLCBCYWxhbmNlPj4oTWV0aG9kcy5HZXRCYWxhbmNlMiwge1xyXG4gICAgICAgICAgICAgICAgYWxsOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWluQmFsYW5jZSxcclxuICAgICAgICAgICAgICAgICAgICAuLi4gbWF4QmFsYW5jZSA/IHsgbWF4QmFsYW5jZSB9IDoge31cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSkudGhlbigoYmFsYW5jZXM6IFJlY29yZDxQdWJsaWNLZXlIYXNoU3RyaW5nLCBCYWxhbmNlMj4pID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VDb21wYXJlID0gKGE6IEJhbGFuY2UyLCBiOiBCYWxhbmNlMikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFfdG90ID0gYS5sb2NrZWQgKyBhLnVubG9ja2VkICsgYS5zdGFrZWRcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBiX3RvdCA9IGIubG9ja2VkICsgYi51bmxvY2tlZCArIGIuc3Rha2VkXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFfdG90IDwgYl90b3QpIHJldHVybiAxO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGFfdG90ID4gYl90b3QpIHJldHVybiAtMTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHJldHVybiAwO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcclxuICAgICAgICAgICAgICAgICAgICBPYmplY3QuZW50cmllcyhiYWxhbmNlcylcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnNvcnQoKGE6IChzdHJpbmcgfCBCYWxhbmNlMilbXSwgYjogKHN0cmluZyB8IEJhbGFuY2UyKVtdKSA9PiByZXZlcnNlQ29tcGFyZShhWzFdIGFzIEJhbGFuY2UyLCBiWzFdIGFzIEJhbGFuY2UyKSlcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8vLyBHZXQgbGlzdCBvZiBrbm93biBwZWVyc1xyXG4gICAgcHVibGljIGFzeW5jIGtub3duUGVlcnMoKTogUHJvbWlzZTxBcnJheTxQZWVyQWRkcj4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jYWxsQXBpTWV0aG9kPEFycmF5PFBlZXJBZGRyPj4oTWV0aG9kcy5Lbm93blBlZXJzKTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgLy8vIEdldCBhbGwgdGhlIHBlbmRpbmcgdHJhbnNhY3Rpb25zXHJcbiAgICBwdWJsaWMgYXN5bmMgbWVtcG9vbCgpOiBQcm9taXNlPE1lbXBvb2w+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jYWxsQXBpTWV0aG9kPE1lbXBvb2w+KE1ldGhvZHMuR2V0TWVtcG9vbCk7XHJcbiAgICB9ICAgIFxyXG4gICAgXHJcbiAgICAvLy8gR2V0IHByaW9yaXR5IGFuZCB0aW1lLXRvLWJsb2NrIGVzdGltYXRpb25zIGZvciBkaWZmZXJlbnQgcHJpb3JpdHkgdGllcnMuXHJcbiAgICBwdWJsaWMgYXN5bmMgcHJpb3JpdGllcygpOiBQcm9taXNlPFByaW9yaXRpZXM+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jYWxsQXBpTWV0aG9kPFByaW9yaXRpZXM+KE1ldGhvZHMuUHJpb3JpdHkpXHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8vLyBHZXQgaW5mb3JtYXRpb24gYWJvdXQgcHJvdG9jb2wgdmVyc2lvbnMgYW5kIHdoaWNoIHZlcnNpb24gaXMgY3VycmVudGx5IGJlaW5nIGVuZm9yY2VkLlxyXG4gICAgcHVibGljIGFzeW5jIHByb3RvY29sSW5mbygpOiBQcm9taXNlPFByb3RvY29sSW5mbz4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNhbGxBcGlNZXRob2Q8UHJvdG9jb2xJbmZvPihNZXRob2RzLlByb3RvY29sKVxyXG4gICAgfVxyXG4gICAgXHJcbiAgICAvLy8gR2V0IGEgZnVsbCBsaXN0IG9mIHN0YWtpbmcgcG93ZXJzIG9yZGVyZWQgYnkgcmFua1xyXG4gICAgcHVibGljIGFzeW5jIHBvd2VycyhxdWVyeT86IFF1ZXJ5U3Rha2luZ1Bvd2Vycyk6IFByb21pc2U8QXJyYXk8U3Rha2luZ1Bvd2VyPj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNhbGxBcGlNZXRob2Q8QXJyYXk8U3Rha2luZ1Bvd2VyPj4oTWV0aG9kcy5RdWVyeVN0YWtpbmdQb3dlcnMsIHF1ZXJ5KVxyXG4gICAgfVxyXG4gICAgXHJcbiAgICAvLy8gR2V0IGEgZnVsbCBsaXN0IG9mIGN1cnJlbnQgc3Rha2UgZW50cmllcyAgUXVlcnkgdGhlIGFtb3VudCBvZiBuYW5vd2l0cyBzdGFrZWQgYnkgYW4gYWRkcmVzcy5cclxuICAgIHB1YmxpYyBhc3luYyBzdGFrZXMocXVlcnk/OiBRdWVyeVN0YWtlcyk6IFByb21pc2U8QXJyYXk8U3Rha2VFbnRyeT4+IHtcclxuICAgICAgICByZXR1cm4gdGhpc1xyXG4gICAgICAgICAgICAuY2FsbEFwaU1ldGhvZDxBcnJheTxTdGFrZUVudHJ5Pj4oTWV0aG9kcy5RdWVyeVN0YWtlcywgcXVlcnkpXHJcbiAgICAgICAgICAgIC5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGVycj8uZXJyb3I/Lm1lc3NhZ2UgJiYgZXJyLmVycm9yLm1lc3NhZ2UuaW5kZXhPZihcIm5vdCByZWdpc3RlcmVkXCIpID4gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gW11cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8vLyBHZXQgbm9kZSBzdGF0dXNcclxuICAgIHB1YmxpYyBhc3luYyBzeW5jU3RhdHVzKCk6IFByb21pc2U8U3luY1N0YXR1cz4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNhbGxBcGlNZXRob2Q8U3luY1N0YXR1cz4oTWV0aG9kcy5TeW5jU3RhdHVzKTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgcHVibGljIGFzeW5jIHdpcHMoKTogUHJvbWlzZTxTaWduYWxpbmdJbmZvPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsbEFwaU1ldGhvZDxTaWduYWxpbmdJbmZvPihNZXRob2RzLlNpZ25hbGluZ0luZm8pXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIHdpdG5lc3Nlcyhfc2luY2U/OiBudW1iZXIpOiBQcm9taXNlPG51bWJlcj4ge1xyXG4gICAgICAgIC8vIHRvZG86IHdpdG5lc3NlcyBlc3RpbWF0aW9uIHNob3VsZCBpbnN0ZWFkIGJlIGNvbXB1dGVkIGluIHByb3BvcnRpb24gdG9cclxuICAgICAgICAvLyAgICAgICByYXRpbyBvZiB2YWxpZGF0b3JzIHRoYXQgaGF2ZSBob25lc3RseSB3aXRuZXNzZWQgZGF0YSByZXF1ZXN0c1xyXG4gICAgICAgIC8vICAgICAgIHZzIHZhbGlkYXRvcnMgdGhhdCBoYXZlIGhvbmVzdGx5IHdpdG5lc3NlZCBkYXRhIHJlcXVlc3RzIGFuZFxyXG4gICAgICAgIC8vICAgICAgIG5ldmVyIHJldmVhbGVkIFwiaSBwYXNzZWRcIiBvdXQgb2YgbWFqb3JpdHksIFxyXG4gICAgICAgIC8vICAgICAgIHdpdGhpbiB0aGUgc3BlY2lmaWVkIHJhbmdlIG9mIGVwb2Nocy5cclxuICAgICAgICBsZXQgY2Vuc3VzID0gMFxyXG4gICAgICAgIHJldHVybiB0aGlzIFxyXG4gICAgICAgICAgICAuc3Rha2VzKHsgcGFyYW1zOiB7IGRpc3RpbmN0OiB0cnVlIH19KSAvLyB0b2RvOiBpbXBsZW1lbnQgYGNvdW50YCBmbGFnIG9uIElKc29uUnBjUHJvdmlkZXIuc3Rha2VzKClcclxuICAgICAgICAgICAgLnRoZW4ocmVjb3JkcyA9PiB7XHJcbiAgICAgICAgICAgICAgICBjZW5zdXMgPSByZWNvcmRzLmxlbmd0aFxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmxvY2tzKC0xNiwgMTYpIC8vIHRvZG86IGJsb2NrcygpIHNob3VsZCByZXR1cm4gZXBvY2gsIGhhc2ggYW5kIHZhbGlkYXRvciBwa2ggZm9yIGVhY2ggYmxvY2tcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLnRoZW4ocmVjb3JkcyA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwocmVjb3Jkcy5tYXAocmVjb3JkID0+IHRoaXMuZ2V0QmxvY2socmVjb3JkWzFdKSkpXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC50aGVuKGJsb2NrcyA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB2YWxpZGF0b3JzOiBBcnJheTxQdWJsaWNLZXlIYXNoU3RyaW5nPiA9IFtdXHJcbiAgICAgICAgICAgICAgICBibG9ja3MubWFwKGJsb2NrID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwa2ggPSBQdWJsaWNLZXkuZnJvbVByb3RvYnVmKGJsb2NrLmJsb2NrX3NpZy5wdWJsaWNfa2V5KS5oYXNoKCkudG9CZWNoMzIodGhpcy5uZXR3b3JrKVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdmFsaWRhdG9ycy5pbmNsdWRlcyhwa2gpKSB2YWxpZGF0b3JzLnB1c2gocGtoKTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5taW4oXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9ycy5sZW5ndGgsXHJcbiAgICAgICAgICAgICAgICAgICAgTWF0aC5mbG9vcih0aGlzLm5ldHdvcmsgPT09IFwidGVzdG5ldFwiID8gY2Vuc3VzIC8gMiA6IGNlbnN1cyAvIDQpXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vLyBHZXQgYmFsYW5jZVxyXG4gICAgcHVibGljIGFzeW5jIGdldEJhbGFuY2UocGtoOiBQdWJsaWNLZXlIYXNoU3RyaW5nKTogUHJvbWlzZTxCYWxhbmNlMj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzXHJcbiAgICAgICAgICAgIC5jYWxsQXBpTWV0aG9kPEJhbGFuY2UyPihNZXRob2RzLkdldEJhbGFuY2UyLCB7IHBraCB9KVxyXG4gICAgICAgICAgICAudGhlbigoYmFsYW5jZTogQmFsYW5jZTIpID0+ICh7XHJcbiAgICAgICAgICAgICAgICBsb2NrZWQ6IEJpZ0ludChiYWxhbmNlLmxvY2tlZCksXHJcbiAgICAgICAgICAgICAgICBzdGFrZWQ6IEJpZ0ludChiYWxhbmNlLnN0YWtlZCksXHJcbiAgICAgICAgICAgICAgICB1bmxvY2tlZDogQmlnSW50KGJhbGFuY2UudW5sb2NrZWQpLFxyXG4gICAgICAgICAgICB9KSlcclxuICAgIH1cclxuICAgIFxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgYmxvY2sgaW5mbyBieSBoYXNoXHJcbiAgICAgKiBAcGFyYW0ge0hhc2h9IGJsb2NrSGFzaCAtIEhhc2ggb2YgdGhlIGJsb2NrIHRoYXQgd2UgYXJlIHF1ZXJ5aW5nLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBzaG93VHJhbnNhY3Rpb25IYXNoIC0gV2hldGhlciB0byBpbmNsdWRlIGFuIGV4dHJhIGZpZWxkIGNvbnRhaW5pbmcgYXJyYXkgb2YgdHJhbnNhY3Rpb24gaGFzaGVzLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYXN5bmMgZ2V0QmxvY2soXHJcbiAgICAgICAgICAgIGJsb2NrSGFzaDogSGFzaCxcclxuICAgICAgICAgICAgc2hvd1RyYW5zYWN0aW9uSGFzaCA9IGZhbHNlLFxyXG4gICAgICAgICk6IFByb21pc2U8QmxvY2s+XHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsbEFwaU1ldGhvZDxCbG9jaz4oTWV0aG9kcy5HZXRCbG9jaywgW2Jsb2NrSGFzaCwgc2hvd1RyYW5zYWN0aW9uSGFzaCwgXSlcclxuICAgIH1cclxuICAgIFxyXG4gICAgcHVibGljIGFzeW5jIGdldERhdGFSZXF1ZXN0KGRyVHhIYXNoOiBIYXNoLCBtb2RlPzogR2V0RGF0YVJlcXVlc3RNb2RlLCBmb3JjZSA9IGZhbHNlKTogUHJvbWlzZTxHZXREYXRhUmVxdWVzdEZ1bGxSZXBvcnQgfCBHZXREYXRhUmVxdWVzdEV0aGVyZWFsUmVwb3J0PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsbEFwaU1ldGhvZDxHZXREYXRhUmVxdWVzdEZ1bGxSZXBvcnQgfCBHZXREYXRhUmVxdWVzdEV0aGVyZWFsUmVwb3J0PihNZXRob2RzLkdldERhdGFSZXF1ZXN0LCB7XHJcbiAgICAgICAgICAgIGhhc2g6IGRyVHhIYXNoLFxyXG4gICAgICAgICAgICBtb2RlOiBtb2RlIHx8IFwiZnVsbFwiLFxyXG4gICAgICAgICAgICBmb3JjZVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8vLyBHZXQgdGhlIGJsb2NrcyB0aGF0IHBlcnRhaW4gdG8gdGhlIHN1cGVyYmxvY2sgaW5kZXhcclxuICAgIHB1YmxpYyBhc3luYyBnZXRTdXBlcmJsb2NrKGVwb2NoOiBFcG9jaCk6IFByb21pc2U8U3VwZXJibG9ja1JlcG9ydD4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNhbGxBcGlNZXRob2Q8U3VwZXJibG9ja1JlcG9ydD4oTWV0aG9kcy5HZXRTdXBlcmJsb2NrLCB7IFwiYmxvY2tfZXBvY2hcIjogZXBvY2ggfSk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHB1YmxpYyBhc3luYyBnZXRUcmFuc2FjdGlvbih0eEhhc2g6IEhhc2gpOiBQcm9taXNlPFRyYW5zYWN0aW9uUmVwb3J0PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsbEFwaU1ldGhvZDxUcmFuc2FjdGlvblJlcG9ydD4oTWV0aG9kcy5HZXRUcmFuc2FjdGlvbiwgW3R4SGFzaCwgXSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIGdldFRyYW5zYWN0aW9uUmVjZWlwdCh0eEhhc2g6IEhhc2gpOiBQcm9taXNlPFRyYW5zYWN0aW9uUmVjZWlwdD4ge1xyXG4gICAgICAgIC8vIHRvZG86IGZldGNoL3VwZGF0ZSByZWNlaXB0IGZyb20gcHJvdmlkZXIsIGlmIG5vdCBjYWNoZWRcclxuICAgICAgICByZXR1cm4gSnNvblJwY1Byb3ZpZGVyLnJlY2VpcHRzW3R4SGFzaF1cclxuICAgIH1cclxuICAgIFxyXG4gICAgLy8vIEdldCB1dHhvc1xyXG4gICAgcHVibGljIGFzeW5jIGdldFV0eG9zKHBraDogUHVibGljS2V5SGFzaFN0cmluZywgZmlsdGVyPzogeyBtaW5WYWx1ZT86IGJpZ2ludCB8IHN0cmluZywgZnJvbVNpZ25lcj86IFB1YmxpY0tleUhhc2hTdHJpbmcgfSk6IFByb21pc2U8QXJyYXk8VXR4b01ldGFkYXRhPj4ge1xyXG4gICAgICAgIGlmIChmaWx0ZXIpIHtcclxuICAgICAgICAgICAgZmlsdGVyLm1pblZhbHVlID0gZmlsdGVyPy5taW5WYWx1ZT8udG9TdHJpbmcoKSA/PyBcIjBcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuICAgICAgICAgICAgLmNhbGxBcGlNZXRob2Q8VXR4b0luZm8+KE1ldGhvZHMuR2V0VXR4b0luZm8sIFtwa2gsIGZpbHRlcl0pXHJcbiAgICAgICAgICAgIC50aGVuKChyZXN1bHQ6IFV0eG9JbmZvKSA9PiByZXN1bHQudXR4b3MubWFwKCh1dHhvOiBVdHhvTWV0YWRhdGEpID0+ICh7IFxyXG4gICAgICAgICAgICAgICAgLi4udXR4bywgXHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogQmlnSW50KHV0eG8udmFsdWUpXHJcbiAgICAgICAgICAgIH0pKSlcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgZ2V0VmFsdWVUcmFuc2Zlcih0eEhhc2g6IEhhc2gsIG1vZGU/OiBzdHJpbmcsIGZvcmNlID0gZmFsc2UpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNhbGxBcGlNZXRob2Q8YW55PihNZXRob2RzLkdldFZhbHVlVHJhbnNmZXIsIHtcclxuICAgICAgICAgICAgaGFzaDogdHhIYXNoLFxyXG4gICAgICAgICAgICBtb2RlOiBtb2RlLFxyXG4gICAgICAgICAgICBmb3JjZVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIHB1YmxpYyBhc3luYyBzZW5kUmF3VHJhbnNhY3Rpb24odHJhbnNhY3Rpb246IGFueSk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNhbGxBcGlNZXRob2Q8Ym9vbGVhbj4oTWV0aG9kcy5JbnZlbnRvcnksIHsgdHJhbnNhY3Rpb24gfSlcclxuICAgIH1cclxuXHJcbiAgICAvLy8gR2V0IHN1cHBseSBpbmZvXHJcbiAgICBwdWJsaWMgYXN5bmMgc3VwcGx5SW5mbygpOiBQcm9taXNlPFN1cHBseUluZm8+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jYWxsQXBpTWV0aG9kPFN1cHBseUluZm8+KE1ldGhvZHMuR2V0U3VwcGx5SW5mbylcclxuICAgIH1cclxufSJdfQ==
|
package/dist/src/lib/utils.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export * as cbor from 'cbor';
|
|
2
2
|
export { fromHexString, ipIsPrivateOrLocalhost, isHexString, isHexStringOfLength, parseURL, toHexString, toUtf8Array, utf8ArrayToStr, toUtf16Bytes, } from "../bin/helpers";
|
|
3
|
-
export { ecdsaVerify, decipherXprv, parseXprv, sha256, totalCoins, } from "./crypto/utils";
|
|
3
|
+
export { ecdsaVerify, decipherXprv, parseXprv, selectUtxos, sha256, totalCoins, } from "./crypto/utils";
|
|
4
4
|
export { execRadonBytecode, parseRadonScript, searchRadonAssets, } from "./radon/utils";
|
|
5
5
|
import { RadonModal, RadonRequest, RadonTemplate } from "./radon";
|
|
6
6
|
export declare function digestMessage(text: string): Buffer<ArrayBufferLike>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/lib/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAA;AAE5B,OAAO,EACL,aAAa,EACb,sBAAsB,EACtB,WAAW,EACX,mBAAmB,EACnB,QAAQ,EACR,WAAW,EACX,WAAW,EACX,cAAc,EACd,YAAY,GACb,MAAM,gBAAgB,CAAA;AAEvB,OAAO,EACL,WAAW,EACX,YAAY,EACZ,SAAS,EACT,MAAM,EACN,UAAU,GACX,MAAM,gBAAgB,CAAA;AAEvB,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,eAAe,CAAA;AAItB,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAGjE,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,eAAe,CAAC,CAInE;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAI9E;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAIhF;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAI1E;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,GAAG,YAAY,GAAG,SAAS,CAE5F;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,GAAG,aAAa,GAAG,SAAS,CAE9F;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,GAAG,UAAU,GAAG,SAAS,CAExF;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,yBAYxD"}
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/lib/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAA;AAE5B,OAAO,EACL,aAAa,EACb,sBAAsB,EACtB,WAAW,EACX,mBAAmB,EACnB,QAAQ,EACR,WAAW,EACX,WAAW,EACX,cAAc,EACd,YAAY,GACb,MAAM,gBAAgB,CAAA;AAEvB,OAAO,EACL,WAAW,EACX,YAAY,EACZ,SAAS,EACT,WAAW,EACX,MAAM,EACN,UAAU,GACX,MAAM,gBAAgB,CAAA;AAEvB,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,eAAe,CAAA;AAItB,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAGjE,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,eAAe,CAAC,CAInE;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAI9E;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAIhF;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAI1E;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,GAAG,YAAY,GAAG,SAAS,CAE5F;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,GAAG,aAAa,GAAG,SAAS,CAE9F;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,GAAG,UAAU,GAAG,SAAS,CAExF;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,yBAYxD"}
|
package/dist/src/lib/utils.js
CHANGED
|
@@ -33,7 +33,7 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.searchRadonAssets = exports.parseRadonScript = exports.execRadonBytecode = exports.totalCoins = exports.sha256 = exports.parseXprv = exports.decipherXprv = exports.ecdsaVerify = exports.toUtf16Bytes = exports.utf8ArrayToStr = exports.toUtf8Array = exports.toHexString = exports.parseURL = exports.isHexStringOfLength = exports.isHexString = exports.ipIsPrivateOrLocalhost = exports.fromHexString = exports.cbor = void 0;
|
|
36
|
+
exports.searchRadonAssets = exports.parseRadonScript = exports.execRadonBytecode = exports.totalCoins = exports.sha256 = exports.selectUtxos = exports.parseXprv = exports.decipherXprv = exports.ecdsaVerify = exports.toUtf16Bytes = exports.utf8ArrayToStr = exports.toUtf8Array = exports.toHexString = exports.parseURL = exports.isHexStringOfLength = exports.isHexString = exports.ipIsPrivateOrLocalhost = exports.fromHexString = exports.cbor = void 0;
|
|
37
37
|
exports.digestMessage = digestMessage;
|
|
38
38
|
exports.flattenRadonRequests = flattenRadonRequests;
|
|
39
39
|
exports.flattenRadonTemplates = flattenRadonTemplates;
|
|
@@ -57,6 +57,7 @@ var utils_1 = require("./crypto/utils");
|
|
|
57
57
|
Object.defineProperty(exports, "ecdsaVerify", { enumerable: true, get: function () { return utils_1.ecdsaVerify; } });
|
|
58
58
|
Object.defineProperty(exports, "decipherXprv", { enumerable: true, get: function () { return utils_1.decipherXprv; } });
|
|
59
59
|
Object.defineProperty(exports, "parseXprv", { enumerable: true, get: function () { return utils_1.parseXprv; } });
|
|
60
|
+
Object.defineProperty(exports, "selectUtxos", { enumerable: true, get: function () { return utils_1.selectUtxos; } });
|
|
60
61
|
Object.defineProperty(exports, "sha256", { enumerable: true, get: function () { return utils_1.sha256; } });
|
|
61
62
|
Object.defineProperty(exports, "totalCoins", { enumerable: true, get: function () { return utils_1.totalCoins; } });
|
|
62
63
|
var utils_2 = require("./radon/utils");
|
|
@@ -101,4 +102,4 @@ function txJsonReplacer(key, value) {
|
|
|
101
102
|
return value;
|
|
102
103
|
}
|
|
103
104
|
}
|
|
104
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
105
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWtDQSxzQ0FJQztBQUVELG9EQUlDO0FBRUQsc0RBSUM7QUFFRCxnREFJQztBQUVELGtEQUVDO0FBRUQsb0RBRUM7QUFFRCw4Q0FFQztBQUVELHdDQVlDO0FBbEZELDZDQUE0QjtBQUU1QiwwQ0FVdUI7QUFUckIsd0dBQUEsYUFBYSxPQUFBO0FBQ2IsaUhBQUEsc0JBQXNCLE9BQUE7QUFDdEIsc0dBQUEsV0FBVyxPQUFBO0FBQ1gsOEdBQUEsbUJBQW1CLE9BQUE7QUFDbkIsbUdBQUEsUUFBUSxPQUFBO0FBQ1Isc0dBQUEsV0FBVyxPQUFBO0FBQ1gsc0dBQUEsV0FBVyxPQUFBO0FBQ1gseUdBQUEsY0FBYyxPQUFBO0FBQ2QsdUdBQUEsWUFBWSxPQUFBO0FBR2Qsd0NBT3VCO0FBTnJCLG9HQUFBLFdBQVcsT0FBQTtBQUNYLHFHQUFBLFlBQVksT0FBQTtBQUNaLGtHQUFBLFNBQVMsT0FBQTtBQUNULG9HQUFBLFdBQVcsT0FBQTtBQUNYLCtGQUFBLE1BQU0sT0FBQTtBQUNOLG1HQUFBLFVBQVUsT0FBQTtBQUdaLHVDQUlzQjtBQUhwQiwwR0FBQSxpQkFBaUIsT0FBQTtBQUNqQix5R0FBQSxnQkFBZ0IsT0FBQTtBQUNoQiwwR0FBQSxpQkFBaUIsT0FBQTtBQUduQiw0Q0FBMEQ7QUFDMUQsMENBQXVDO0FBQ3ZDLG1DQUFpRTtBQUNqRSx5Q0FBcUU7QUFFckUsU0FBZ0IsYUFBYSxDQUFDLElBQVk7SUFDeEMsT0FBTyxJQUFBLGNBQU0sRUFDWCxJQUFJLFVBQVUsQ0FBQyxJQUFBLHNCQUFZLEVBQUMsSUFBSSxDQUFDLENBQUMsQ0FDbkMsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFnQixvQkFBb0IsQ0FBQyxNQUFXO0lBQzlDLE9BQU8sTUFBTSxDQUFDLFdBQVcsQ0FDdkIsSUFBQSwwQkFBa0IsRUFBQyxNQUFNLEVBQUUsb0JBQVksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FDN0UsQ0FBQTtBQUNILENBQUM7QUFFRCxTQUFnQixxQkFBcUIsQ0FBQyxNQUFXO0lBQy9DLE9BQU8sTUFBTSxDQUFDLFdBQVcsQ0FDdkIsSUFBQSwwQkFBa0IsRUFBQyxNQUFNLEVBQUUscUJBQWEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUUsUUFBUSxDQUFFLENBQUMsQ0FDdkYsQ0FBQTtBQUNILENBQUM7QUFFRCxTQUFnQixrQkFBa0IsQ0FBQyxNQUFXO0lBQzVDLE9BQU8sTUFBTSxDQUFDLFdBQVcsQ0FDdkIsSUFBQSwwQkFBa0IsRUFBQyxNQUFNLEVBQUUsa0JBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FDM0UsQ0FBQTtBQUNILENBQUM7QUFFRCxTQUFnQixtQkFBbUIsQ0FBQyxRQUFnQixFQUFFLE1BQVk7SUFDaEUsT0FBTyxJQUFBLHlCQUFpQixFQUFDLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsb0JBQVksRUFBRSxDQUFDLENBQUE7QUFDcEUsQ0FBQztBQUVELFNBQWdCLG9CQUFvQixDQUFDLFFBQWdCLEVBQUUsTUFBWTtJQUNqRSxPQUFPLElBQUEseUJBQWlCLEVBQUMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxxQkFBYSxFQUFFLENBQUMsQ0FBQTtBQUNyRSxDQUFDO0FBRUQsU0FBZ0IsaUJBQWlCLENBQUMsUUFBZ0IsRUFBRSxNQUFZO0lBQzlELE9BQU8sSUFBQSx5QkFBaUIsRUFBQyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLGtCQUFVLEVBQUUsQ0FBQyxDQUFBO0FBQ2xFLENBQUM7QUFFRCxTQUFnQixjQUFjLENBQUMsR0FBVyxFQUFFLEtBQWE7SUFDdkQsUUFBUSxHQUFHLEVBQUUsQ0FBQztRQUNWLEtBQUssT0FBTyxDQUFDO1FBQ2IsS0FBSyxLQUFLO1lBQ04sT0FBTyxJQUFBLHFCQUFXLEVBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFBO1FBQ25DLEtBQUssSUFBSTtZQUNMLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsY0FBYyxDQUFDLENBQUE7UUFDaEQsS0FBSyxjQUFjO1lBQ2YsT0FBTyxvQkFBWSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUMzQztZQUNJLE9BQU8sS0FBSyxDQUFBO0lBQ3BCLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogYXMgY2JvciBmcm9tICdjYm9yJ1xyXG5cclxuZXhwb3J0IHtcclxuICBmcm9tSGV4U3RyaW5nLFxyXG4gIGlwSXNQcml2YXRlT3JMb2NhbGhvc3QsXHJcbiAgaXNIZXhTdHJpbmcsXHJcbiAgaXNIZXhTdHJpbmdPZkxlbmd0aCxcclxuICBwYXJzZVVSTCwgXHJcbiAgdG9IZXhTdHJpbmcsXHJcbiAgdG9VdGY4QXJyYXksIFxyXG4gIHV0ZjhBcnJheVRvU3RyLFxyXG4gIHRvVXRmMTZCeXRlcyxcclxufSBmcm9tIFwiLi4vYmluL2hlbHBlcnNcIlxyXG5cclxuZXhwb3J0IHtcclxuICBlY2RzYVZlcmlmeSxcclxuICBkZWNpcGhlclhwcnYsXHJcbiAgcGFyc2VYcHJ2LFxyXG4gIHNlbGVjdFV0eG9zLFxyXG4gIHNoYTI1NixcclxuICB0b3RhbENvaW5zLFxyXG59IGZyb20gXCIuL2NyeXB0by91dGlsc1wiXHJcblxyXG5leHBvcnQge1xyXG4gIGV4ZWNSYWRvbkJ5dGVjb2RlLFxyXG4gIHBhcnNlUmFkb25TY3JpcHQsXHJcbiAgc2VhcmNoUmFkb25Bc3NldHMsXHJcbn0gZnJvbSBcIi4vcmFkb24vdXRpbHNcIlxyXG5cclxuaW1wb3J0IHsgdG9IZXhTdHJpbmcsIHRvVXRmMTZCeXRlcyB9IGZyb20gXCIuLi9iaW4vaGVscGVyc1wiXHJcbmltcG9ydCB7IHNoYTI1NiB9IGZyb20gXCIuL2NyeXB0by91dGlsc1wiXHJcbmltcG9ydCB7IFJhZG9uTW9kYWwsIFJhZG9uUmVxdWVzdCwgUmFkb25UZW1wbGF0ZSB9IGZyb20gXCIuL3JhZG9uXCJcclxuaW1wb3J0IHsgZmxhdHRlblJhZG9uQXNzZXRzLCByZXF1aXJlUmFkb25Bc3NldCB9IGZyb20gXCIuL3JhZG9uL3V0aWxzXCJcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBkaWdlc3RNZXNzYWdlKHRleHQ6IHN0cmluZyk6IEJ1ZmZlcjxBcnJheUJ1ZmZlckxpa2U+IHtcclxuICByZXR1cm4gc2hhMjU2KFxyXG4gICAgbmV3IFVpbnQ4QXJyYXkodG9VdGYxNkJ5dGVzKHRleHQpKVxyXG4gICk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBmbGF0dGVuUmFkb25SZXF1ZXN0cyhhc3NldHM6IGFueSk6IFJlY29yZDxzdHJpbmcsIFJhZG9uUmVxdWVzdD4ge1xyXG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXHJcbiAgICBmbGF0dGVuUmFkb25Bc3NldHMoYXNzZXRzLCBSYWRvblJlcXVlc3QpLm1hcChhc3NldCA9PiBPYmplY3QuZW50cmllcyhhc3NldCkpXHJcbiAgKVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZmxhdHRlblJhZG9uVGVtcGxhdGVzKGFzc2V0czogYW55KTogUmVjb3JkPHN0cmluZywgUmFkb25UZW1wbGF0ZT4ge1xyXG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXHJcbiAgICBmbGF0dGVuUmFkb25Bc3NldHMoYXNzZXRzLCBSYWRvblRlbXBsYXRlKS5tYXAoYXNzZXQgPT4gWyBhc3NldC5rZXksIGFzc2V0LiBhcnRpZmFjdCBdKVxyXG4gIClcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGZsYXR0ZW5SYWRvbk1vZGFscyhhc3NldHM6IGFueSk6IFJlY29yZDxzdHJpbmcsIFJhZG9uTW9kYWw+IHtcclxuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxyXG4gICAgZmxhdHRlblJhZG9uQXNzZXRzKGFzc2V0cywgUmFkb25Nb2RhbCkubWFwKGFzc2V0ID0+IE9iamVjdC5lbnRyaWVzKGFzc2V0KSlcclxuICApXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByZXF1aXJlUmFkb25SZXF1ZXN0KGFydGlmYWN0OiBzdHJpbmcsIGFzc2V0cz86IGFueSk6IFJhZG9uUmVxdWVzdCB8IHVuZGVmaW5lZCB7XHJcbiAgcmV0dXJuIHJlcXVpcmVSYWRvbkFzc2V0KHsgYXJ0aWZhY3QsIGFzc2V0cywgdHlwZTogUmFkb25SZXF1ZXN0IH0pXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByZXF1aXJlUmFkb25UZW1wbGF0ZShhcnRpZmFjdDogc3RyaW5nLCBhc3NldHM/OiBhbnkpOiBSYWRvblRlbXBsYXRlIHwgdW5kZWZpbmVkIHtcclxuICByZXR1cm4gcmVxdWlyZVJhZG9uQXNzZXQoeyBhcnRpZmFjdCwgYXNzZXRzLCB0eXBlOiBSYWRvblRlbXBsYXRlIH0pXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByZXF1aXJlUmFkb25Nb2RhbChhcnRpZmFjdDogc3RyaW5nLCBhc3NldHM/OiBhbnkpOiBSYWRvbk1vZGFsIHwgdW5kZWZpbmVkIHtcclxuICByZXR1cm4gcmVxdWlyZVJhZG9uQXNzZXQoeyBhcnRpZmFjdCwgYXNzZXRzLCB0eXBlOiBSYWRvbk1vZGFsIH0pXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiB0eEpzb25SZXBsYWNlcihrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZykge1xyXG4gIHN3aXRjaCAoa2V5KSB7XHJcbiAgICAgIGNhc2UgJ2J5dGVzJzpcclxuICAgICAgY2FzZSAnZGVyJzpcclxuICAgICAgICAgIHJldHVybiB0b0hleFN0cmluZyh2YWx1ZSwgdHJ1ZSlcclxuICAgICAgY2FzZSAndHgnOlxyXG4gICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHZhbHVlLCB0eEpzb25SZXBsYWNlcilcclxuICAgICAgY2FzZSAnZGF0YV9yZXF1ZXN0JzpcclxuICAgICAgICAgIHJldHVybiBSYWRvblJlcXVlc3QuZnJvbVByb3RvYnVmKHZhbHVlKVxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgcmV0dXJuIHZhbHVlXHJcbiAgfVxyXG59Il19
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@witnet/sdk",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.13",
|
|
4
4
|
"description": "Typescript library and CLI tooling for Web3 buidlers willing to interact with the Witnet blockchain.",
|
|
5
5
|
"author": "Witnet Foundation",
|
|
6
6
|
"license": "MIT",
|
|
@@ -12,7 +12,6 @@
|
|
|
12
12
|
},
|
|
13
13
|
"files": [
|
|
14
14
|
"dist",
|
|
15
|
-
"docs",
|
|
16
15
|
"src/bin",
|
|
17
16
|
"witnet/witnet.proto.json",
|
|
18
17
|
"witnet/assets",
|
package/src/bin/cli/inspect.js
CHANGED
|
@@ -95,8 +95,17 @@ module.exports = {
|
|
|
95
95
|
hint: "List UTXOs available to the specified address.",
|
|
96
96
|
params: "WIT_ADDRESS",
|
|
97
97
|
options: {
|
|
98
|
-
|
|
99
|
-
hint: "
|
|
98
|
+
from: {
|
|
99
|
+
hint: "Show only UTXOs that previously belonged to this other address.",
|
|
100
|
+
param: "WIT_ADDRESS",
|
|
101
|
+
},
|
|
102
|
+
"min-value": {
|
|
103
|
+
hint: "Filter out UTXOs with a value smaller than this amount.",
|
|
104
|
+
param: "WITS"
|
|
105
|
+
},
|
|
106
|
+
strategy: {
|
|
107
|
+
hint: "UTXOs listing order: `big-first`, `random`, `small-first` (default: `big-first`).",
|
|
108
|
+
param: "STRATEGY",
|
|
100
109
|
},
|
|
101
110
|
},
|
|
102
111
|
},
|
|
@@ -227,10 +236,13 @@ async function utxos (options = {}, args = []) {
|
|
|
227
236
|
}
|
|
228
237
|
const now = Math.floor(Date.now() / 1000)
|
|
229
238
|
const provider = new Witnet.JsonRpcProvider(options?.provider)
|
|
230
|
-
let utxos = await provider.getUtxos(args[0],
|
|
239
|
+
let utxos = await provider.getUtxos(args[0], {
|
|
240
|
+
minValue: options["min-value"] ? Witnet.Coins.fromWits(Number(options["min-value"])).pedros : undefined,
|
|
241
|
+
fromSigner: options["from"],
|
|
242
|
+
})
|
|
231
243
|
let totalBalance = 0n
|
|
232
244
|
if (!options?.verbose) {
|
|
233
|
-
utxos = utxos
|
|
245
|
+
utxos = utils.selectUtxos({ utxos, strategy: options?.strategy || "big-first"})
|
|
234
246
|
.filter(utxo => utxo.timelock <= now)
|
|
235
247
|
.map(utxo => {
|
|
236
248
|
totalBalance += utxo.value
|
package/src/bin/cli/wallet.js
CHANGED
|
@@ -582,7 +582,7 @@ async function stake (options = {}, [authorization]) {
|
|
|
582
582
|
if (available < coins.pedros) {
|
|
583
583
|
throw Error(`Insufficient funds ${options?.from ? `on address ${options.from}.` : "on wallet."}`)
|
|
584
584
|
} else if (params?.fees && coins.pedros <= params.fees.pedros) {
|
|
585
|
-
throw Error(`
|
|
585
|
+
throw Error(`The fees cannot be greater than the value: ${params.fees.pedros} > ${coins.pedros} $pedros`)
|
|
586
586
|
}
|
|
587
587
|
|
|
588
588
|
// todo: validate withdrawer matches delegatee's withdrawer
|
|
@@ -645,7 +645,7 @@ async function transfer (options = {}) {
|
|
|
645
645
|
if (available < coins.pedros) {
|
|
646
646
|
throw Error(`Insufficient funds ${options?.from ? `on address ${options.from}.` : "on wallet."}`)
|
|
647
647
|
} else if (params?.fees && coins.pedros <= params.fees.pedros) {
|
|
648
|
-
throw Error(`
|
|
648
|
+
throw Error(`The fees cannot be greater than the value: ${params.fees.pedros} > ${coins.pedros} $pedros`)
|
|
649
649
|
}
|
|
650
650
|
|
|
651
651
|
// transfer value
|
|
@@ -741,7 +741,7 @@ async function unstake (options = {}) {
|
|
|
741
741
|
if (available < value.pedros + params?.fees.pedros) {
|
|
742
742
|
throw Error(`Cannot withdraw that much: ${value.pedros} > ${available}`)
|
|
743
743
|
} else if (params?.fees && value.pedros <= params.fees.pedros) {
|
|
744
|
-
throw Error(`
|
|
744
|
+
throw Error(`The fees cannot be greater than the value: ${params.fees.pedros} > ${value.pedros} $pedros`)
|
|
745
745
|
}
|
|
746
746
|
|
|
747
747
|
// withdraw deposit from validator into withdrawer:
|
|
@@ -807,7 +807,7 @@ async function utxos (options = {}, [from]) {
|
|
|
807
807
|
if (available < value.pedros) {
|
|
808
808
|
throw Error(`Insufficient funds ${from ? `on address ${from}.` : "on wallet."}`)
|
|
809
809
|
} else if (params?.fees && value.pedros <= params.fees.pedros) {
|
|
810
|
-
throw Error(`
|
|
810
|
+
throw Error(`The fees cannot be greater than the value: ${params.fees.pedros} > ${value.pedros} $pedros`)
|
|
811
811
|
}
|
|
812
812
|
const utxos = await ledger.selectUtxos({ value })
|
|
813
813
|
const covered = utxos.map(utxo => BigInt(utxo.value))?.reduce((prev, curr) => prev + curr, 0n) || 0n
|
package/docs/inspect.png
DELETED
|
Binary file
|
package/docs/network.png
DELETED
|
Binary file
|
package/docs/nodes.png
DELETED
|
Binary file
|
package/docs/radon.png
DELETED
|
Binary file
|
package/docs/wallet.png
DELETED
|
Binary file
|