velocious 1.0.626 → 1.0.628
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 +15 -3
- package/build/background-jobs/job-runner.js +9 -1
- package/build/background-jobs/local-dispatcher.js +23 -1
- package/build/background-jobs/main.js +6 -4
- package/build/background-jobs/perform-job.js +10 -1
- package/build/background-jobs/platform-job.js +62 -0
- package/build/background-jobs/runtime.js +6 -3
- package/build/background-jobs/types.js +8 -0
- package/build/background-jobs/worker.js +3 -1
- package/build/database/pool/async-tracked-multi-connection.js +46 -9
- package/build/database/pool/base.js +3 -0
- package/build/database/pool/checkout-timeout-error.js +16 -0
- package/build/http-client/websocket-client.js +52 -0
- package/build/http-server/client/index.js +6 -0
- package/build/http-server/client/websocket-session.js +30 -0
- package/build/http-server/index.js +202 -38
- package/build/http-server/worker-handler/index.js +15 -1
- package/build/http-server/worker-handler/worker-thread.js +8 -0
- package/build/src/background-jobs/job-runner.d.ts.map +1 -1
- package/build/src/background-jobs/job-runner.js +10 -2
- package/build/src/background-jobs/local-dispatcher.d.ts.map +1 -1
- package/build/src/background-jobs/local-dispatcher.js +24 -2
- package/build/src/background-jobs/main.d.ts.map +1 -1
- package/build/src/background-jobs/main.js +7 -5
- package/build/src/background-jobs/perform-job.d.ts +5 -1
- package/build/src/background-jobs/perform-job.d.ts.map +1 -1
- package/build/src/background-jobs/perform-job.js +11 -2
- package/build/src/background-jobs/platform-job.d.ts +34 -0
- package/build/src/background-jobs/platform-job.d.ts.map +1 -1
- package/build/src/background-jobs/platform-job.js +56 -1
- package/build/src/background-jobs/runtime.d.ts.map +1 -1
- package/build/src/background-jobs/runtime.js +7 -4
- package/build/src/background-jobs/types.d.ts +30 -0
- package/build/src/background-jobs/types.d.ts.map +1 -1
- package/build/src/background-jobs/types.js +9 -1
- package/build/src/background-jobs/worker.d.ts.map +1 -1
- package/build/src/background-jobs/worker.js +4 -2
- package/build/src/database/pool/async-tracked-multi-connection.d.ts +22 -2
- package/build/src/database/pool/async-tracked-multi-connection.d.ts.map +1 -1
- package/build/src/database/pool/async-tracked-multi-connection.js +44 -10
- package/build/src/database/pool/base.d.ts +15 -0
- package/build/src/database/pool/base.d.ts.map +1 -1
- package/build/src/database/pool/base.js +4 -1
- package/build/src/database/pool/checkout-timeout-error.d.ts +13 -0
- package/build/src/database/pool/checkout-timeout-error.d.ts.map +1 -0
- package/build/src/database/pool/checkout-timeout-error.js +15 -0
- package/build/src/http-client/websocket-client.d.ts +18 -0
- package/build/src/http-client/websocket-client.d.ts.map +1 -1
- package/build/src/http-client/websocket-client.js +48 -1
- package/build/src/http-server/client/index.d.ts.map +1 -1
- package/build/src/http-server/client/index.js +7 -1
- package/build/src/http-server/client/websocket-session.d.ts +6 -0
- package/build/src/http-server/client/websocket-session.d.ts.map +1 -1
- package/build/src/http-server/client/websocket-session.js +27 -1
- package/build/src/http-server/index.d.ts +82 -10
- package/build/src/http-server/index.d.ts.map +1 -1
- package/build/src/http-server/index.js +186 -33
- package/build/src/http-server/worker-handler/index.d.ts +28 -1
- package/build/src/http-server/worker-handler/index.d.ts.map +1 -1
- package/build/src/http-server/worker-handler/index.js +23 -2
- package/build/src/http-server/worker-handler/worker-thread.d.ts.map +1 -1
- package/build/src/http-server/worker-handler/worker-thread.js +7 -1
- package/build/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/background-jobs/job-runner.js +9 -1
- package/src/background-jobs/local-dispatcher.js +23 -1
- package/src/background-jobs/main.js +6 -4
- package/src/background-jobs/perform-job.js +10 -1
- package/src/background-jobs/platform-job.js +62 -0
- package/src/background-jobs/runtime.js +6 -3
- package/src/background-jobs/types.js +8 -0
- package/src/background-jobs/worker.js +3 -1
- package/src/database/pool/async-tracked-multi-connection.js +46 -9
- package/src/database/pool/base.js +3 -0
- package/src/database/pool/checkout-timeout-error.js +16 -0
- package/src/http-client/websocket-client.js +52 -0
- package/src/http-server/client/index.js +6 -0
- package/src/http-server/client/websocket-session.js +30 -0
- package/src/http-server/index.js +202 -38
- package/src/http-server/worker-handler/index.js +15 -1
- package/src/http-server/worker-handler/worker-thread.js +8 -0
|
@@ -70,6 +70,10 @@ export type DatabasePoolDebugSnapshot = {
|
|
|
70
70
|
* - Number of idle connections.
|
|
71
71
|
*/
|
|
72
72
|
idleCount: number;
|
|
73
|
+
/**
|
|
74
|
+
* - Idle connections that can satisfy at least one pending checkout.
|
|
75
|
+
*/
|
|
76
|
+
idleMatchingPendingCheckoutCount?: number;
|
|
73
77
|
/**
|
|
74
78
|
* - Database identifier.
|
|
75
79
|
*/
|
|
@@ -86,6 +90,14 @@ export type DatabasePoolDebugSnapshot = {
|
|
|
86
90
|
* - Number of queued checkout requests.
|
|
87
91
|
*/
|
|
88
92
|
pendingCheckoutCount: number;
|
|
93
|
+
/**
|
|
94
|
+
* - Whether a checkout drain pass is active.
|
|
95
|
+
*/
|
|
96
|
+
pendingCheckoutDrainActive?: boolean;
|
|
97
|
+
/**
|
|
98
|
+
* - Whether another checkout drain pass was requested.
|
|
99
|
+
*/
|
|
100
|
+
pendingCheckoutDrainRequested?: boolean;
|
|
89
101
|
/**
|
|
90
102
|
* - Pool class name.
|
|
91
103
|
*/
|
|
@@ -144,10 +156,13 @@ export type DatabasePoolDebugSnapshot = {
|
|
|
144
156
|
* @property {Array<Record<string, ReturnType<typeof JSON.parse>>>} connections - Live connection snapshots.
|
|
145
157
|
* @property {number} connectionsBeingSpawned - Number of in-progress connection spawns.
|
|
146
158
|
* @property {number} idleCount - Number of idle connections.
|
|
159
|
+
* @property {number} [idleMatchingPendingCheckoutCount] - Idle connections that can satisfy at least one pending checkout.
|
|
147
160
|
* @property {string} identifier - Database identifier.
|
|
148
161
|
* @property {number} inUseCount - Number of checked-out connections.
|
|
149
162
|
* @property {Array<DatabasePoolPendingCheckoutDebugSnapshot>} [pendingCheckouts] - Waiting checkout snapshots.
|
|
150
163
|
* @property {number} pendingCheckoutCount - Number of queued checkout requests.
|
|
164
|
+
* @property {boolean} [pendingCheckoutDrainActive] - Whether a checkout drain pass is active.
|
|
165
|
+
* @property {boolean} [pendingCheckoutDrainRequested] - Whether another checkout drain pass was requested.
|
|
151
166
|
* @property {string} poolClass - Pool class name.
|
|
152
167
|
* @property {{connectionCreationCount: number, connectionCreationFailureCount: number, connectionCreationMaxMs: number, connectionCreationTotalMs: number, checkoutTimeoutCount: number, checkoutWaitCount: number, checkoutWaitMaxMs: number, checkoutWaitTotalMs: number, idleReapCount: number, idleReapDisposalCount: number, idleReapFailureCount: number, idleReapMaxMs: number, idleReapTotalMs: number, peakLiveConnections: number}} [telemetry] - Cumulative pool lifecycle telemetry.
|
|
153
168
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../../src/database/pool/base.js"],"names":[],"mappings":"AAEA,OAAO,aAAa,MAAM,wBAAwB,CAAA;AAClD,OAAO,MAAM,MAAM,iBAAiB,CAAA;AAMjC,YAA2B,gCAAgC,GAAjD;IAAC,KAAK,EAAE,MAAM,CAAA;CAAC,CAAkC;AAK3D,YAAkB,yBAAyB,GAC3C;;;;IAAoB,IAAI,AAAxB,CACF,EADa,MAAM,CACnB;CAAA,CAAA;AAGE,YAAkB,yBAAyB,GAC3C;;;;IAA6E,qBAAqB,EAAvF,OAAO,8BAA8B,EAAE,yBAAyB,CAC3E;;;;IAAoB,IAAI,AAAxB,CACF,EADa,MAAM,CACnB;CAAA,CAAA;AAGE,YAAkB,wCAAwC,GAC1D;;;;IAA+B,YAAY,EAAhC,MAAM,GAAG,SAAS,CAC7B;;;;IAAmB,UAAU,EAAlB,MAAM,CACjB;;;;IAAmB,KAAK,EAAb,MAAM,CACjB;;;;IAA0B,kBAAkB,EAAjC,MAAM,GAAG,IAAI,CACxB;;;;IAAmB,QAAQ,EAAhB,MAAM,CACjB;;;;IAA0B,SAAS,EAAxB,MAAM,GAAG,IAAI,CACxB;;;;IAA0B,aAAa,EAA5B,MAAM,GAAG,IAAI,CACxB;;;;IAAmB,YAAY,EAApB,MAAM,CACnB;CAAA,CAAA;AAGE,YAAkB,yBAAyB,GAC3C;;;;IAA0D,aAAa,EAA5D,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CACxD;;;;IAAiE,WAAW,EAAjE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAC/D;;;;IAAmB,uBAAuB,EAA/B,MAAM,CACjB;;;;IAAmB,SAAS,EAAjB,MAAM,CACjB;;;;IAAmB,UAAU,EAAlB,MAAM,CACjB;;;;IAAmB,UAAU,EAAlB,MAAM,CACjB;;;;IAA6D,gBAAgB,AAA7E,CACA,EADW,KAAK,CAAC,wCAAwC,CAAC,CAC1D;;;;IAAmB,oBAAoB,EAA5B,MAAM,CACjB;;;;IAAmB,SAAS,EAAjB,MAAM,CACjB;;;;IAA6a,SAAS,AAAtb,CACF,EADa;QAAC,uBAAuB,EAAE,MAAM,CAAC;QAAC,8BAA8B,EAAE,MAAM,CAAC;QAAC,uBAAuB,EAAE,MAAM,CAAC;QAAC,yBAAyB,EAAE,MAAM,CAAC;QAAC,oBAAoB,EAAE,MAAM,CAAC;QAAC,iBAAiB,EAAE,MAAM,CAAC;QAAC,iBAAiB,EAAE,MAAM,CAAC;QAAC,mBAAmB,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,qBAAqB,EAAE,MAAM,CAAC;QAAC,oBAAoB,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,MAAM,CAAC;QAAC,mBAAmB,EAAE,MAAM,CAAA;KAAC,CAC5a;CAAA,CAAA;
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../../src/database/pool/base.js"],"names":[],"mappings":"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"}
|
|
@@ -37,10 +37,13 @@ import sha256Hex from "../../utils/sha256-hex.js";
|
|
|
37
37
|
* @property {Array<Record<string, ReturnType<typeof JSON.parse>>>} connections - Live connection snapshots.
|
|
38
38
|
* @property {number} connectionsBeingSpawned - Number of in-progress connection spawns.
|
|
39
39
|
* @property {number} idleCount - Number of idle connections.
|
|
40
|
+
* @property {number} [idleMatchingPendingCheckoutCount] - Idle connections that can satisfy at least one pending checkout.
|
|
40
41
|
* @property {string} identifier - Database identifier.
|
|
41
42
|
* @property {number} inUseCount - Number of checked-out connections.
|
|
42
43
|
* @property {Array<DatabasePoolPendingCheckoutDebugSnapshot>} [pendingCheckouts] - Waiting checkout snapshots.
|
|
43
44
|
* @property {number} pendingCheckoutCount - Number of queued checkout requests.
|
|
45
|
+
* @property {boolean} [pendingCheckoutDrainActive] - Whether a checkout drain pass is active.
|
|
46
|
+
* @property {boolean} [pendingCheckoutDrainRequested] - Whether another checkout drain pass was requested.
|
|
44
47
|
* @property {string} poolClass - Pool class name.
|
|
45
48
|
* @property {{connectionCreationCount: number, connectionCreationFailureCount: number, connectionCreationMaxMs: number, connectionCreationTotalMs: number, checkoutTimeoutCount: number, checkoutWaitCount: number, checkoutWaitMaxMs: number, checkoutWaitTotalMs: number, idleReapCount: number, idleReapDisposalCount: number, idleReapFailureCount: number, idleReapMaxMs: number, idleReapTotalMs: number, peakLiveConnections: number}} [telemetry] - Cumulative pool lifecycle telemetry.
|
|
46
49
|
*/
|
|
@@ -510,4 +513,4 @@ class VelociousDatabasePoolBase {
|
|
|
510
513
|
}
|
|
511
514
|
baseMethodsForward(VelociousDatabasePoolBase);
|
|
512
515
|
export default VelociousDatabasePoolBase;
|
|
513
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kYXRhYmFzZS9wb29sL2Jhc2UuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sYUFBYSxNQUFNLHdCQUF3QixDQUFBO0FBQ2xELE9BQU8sTUFBTSxNQUFNLGlCQUFpQixDQUFBO0FBQ3BDLE9BQU8sa0JBQWtCLE1BQU0sMkJBQTJCLENBQUE7QUFDMUQsT0FBTyxTQUFTLE1BQU0sMkJBQTJCLENBQUE7QUFFakQ7OztHQUdHO0FBRUg7Ozs7R0FJRztBQUNIOzs7OztHQUtHO0FBQ0g7Ozs7Ozs7Ozs7O0dBV0c7QUFDSDs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsTUFBTSxDQUFDLCtCQUErQixDQUFDLENBQUE7QUFFN0U7OzZEQUU2RDtBQUM3RCxNQUFNLE1BQU0sR0FBRztJQUNiLFdBQVcsRUFBRSxJQUFJO0NBQ2xCLENBQUE7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxlQUFlLENBQUMsS0FBSztJQUM1QixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN6QixPQUFPLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUE7SUFDdEUsQ0FBQztJQUVELElBQUksS0FBSyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ3ZDLE1BQU0sT0FBTyxHQUFHLE1BQU07YUFDbkIsSUFBSSxDQUFDLDREQUE0RCxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDMUUsSUFBSSxFQUFFO2FBQ04sR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FB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QUMsVUFBVSxFQUFFLE9BQU8sR0FBRyxFQUFFO1FBQzlDLE1BQU0scUJBQXFCLEdBQUcseUZBQXlGLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUVwSSxPQUFPO1lBQ0wsR0FBRyxVQUFVLENBQUMsZ0JBQWdCLEVBQUU7WUFDaEMsR0FBRyxPQUFPO1lBQ1YsUUFBUSxFQUFFLHFCQUFxQixDQUFDLHNCQUFzQixDQUFDO1NBQ3hELENBQUE7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLFFBQVEsS0FBSSxDQUFDO0NBQ3BCO0FBRUQsa0JBQWtCLENBQUMseUJBQXlCLENBQUMsQ0FBQTtBQUU3QyxlQUFlLHlCQUF5QixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCBDb25maWd1cmF0aW9uIGZyb20gXCIuLi8uLi9jb25maWd1cmF0aW9uLmpzXCJcbmltcG9ydCBMb2dnZXIgZnJvbSBcIi4uLy4uL2xvZ2dlci5qc1wiXG5pbXBvcnQgYmFzZU1ldGhvZHNGb3J3YXJkIGZyb20gXCIuL2Jhc2UtbWV0aG9kcy1mb3J3YXJkLmpzXCJcbmltcG9ydCBzaGEyNTZIZXggZnJvbSBcIi4uLy4uL3V0aWxzL3NoYTI1Ni1oZXguanNcIlxuXG4vKipcbiAqIE9wYXF1ZSBvd25lcnNoaXAgaGFuZGxlIGZvciBhbiBpbi1wcm9jZXNzIHRlc3Qgc2hhcmVkIGNvbm5lY3Rpb24gcmVnaXN0cmF0aW9uLlxuICogQHR5cGVkZWYge3tvd25lcjogc3ltYm9sfX0gVGVzdFNoYXJlZENvbm5lY3Rpb25SZWdpc3RyYXRpb25cbiAqL1xuXG4vKipcbiAqIENvbm5lY3Rpb25DaGVja291dE9wdGlvbnMgdHlwZS5cbiAqIEB0eXBlZGVmIHtvYmplY3R9IENvbm5lY3Rpb25DaGVja291dE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbbmFtZV0gLSBIdW1hbi1yZWFkYWJsZSBuYW1lIGZvciB0aGUgY2hlY2tlZC1vdXQgY29ubmVjdGlvbi5cbiAqL1xuLyoqXG4gKiBDYXB0dXJlZENvbm5lY3Rpb25PcHRpb25zIHR5cGUuXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBDYXB0dXJlZENvbm5lY3Rpb25PcHRpb25zXG4gKiBAcHJvcGVydHkge2ltcG9ydChcIi4uLy4uL2NvbmZpZ3VyYXRpb24tdHlwZXMuanNcIikuRGF0YWJhc2VDb25maWd1cmF0aW9uVHlwZX0gZGF0YWJhc2VDb25maWd1cmF0aW9uIC0gUmVzb2x2ZWQgcGh5c2ljYWwgZGF0YWJhc2UgY29uZmlndXJhdGlvbiBjYXB0dXJlZCBieSB0aGUgY2FsbGVyLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtuYW1lXSAtIEh1bWFuLXJlYWRhYmxlIG5hbWUgZm9yIHRoZSBjaGVja2VkLW91dCBjb25uZWN0aW9uLlxuICovXG4vKipcbiAqIERhdGFiYXNlUG9vbFBlbmRpbmdDaGVja291dERlYnVnU25hcHNob3QgdHlwZS5cbiAqIEB0eXBlZGVmIHtvYmplY3R9IERhdGFiYXNlUG9vbFBlbmRpbmdDaGVja291dERlYnVnU25hcHNob3RcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nIHwgdW5kZWZpbmVkfSBjaGVja291dE5hbWUgLSBIdW1hbi1yZWFkYWJsZSBjaGVja291dCBuYW1lLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGVucXVldWVkQXQgLSBUaW1lc3RhbXAgd2hlbiB0aGUgY2hlY2tvdXQgc3RhcnRlZCB3YWl0aW5nLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGluZGV4IC0gUGVuZGluZyBjaGVja291dCBxdWV1ZSBpbmRleC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyIHwgbnVsbH0gcmVtYWluaW5nVGltZW91dE1zIC0gTWlsbGlzZWNvbmRzIGJlZm9yZSB0aGUgY2hlY2tvdXQgdGltZXMgb3V0LCBvciBudWxsIHdoZW4gZGlzYWJsZWQuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcmV1c2VLZXkgLSBEYXRhYmFzZSBjb25maWd1cmF0aW9uIHJldXNlIGtleSBuZWVkZWQgYnkgdGhlIGNoZWNrb3V0LlxuICogQHByb3BlcnR5IHtudW1iZXIgfCBudWxsfSB0aW1lb3V0QXQgLSBUaW1lc3RhbXAgd2hlbiB0aGUgY2hlY2tvdXQgd2lsbCB0aW1lIG91dCwgb3IgbnVsbCB3aGVuIGRpc2FibGVkLlxuICogQHByb3BlcnR5IHtudW1iZXIgfCBudWxsfSB0aW1lb3V0TWlsbGlzIC0gVGltZW91dCBjb25maWd1cmVkIGZvciB0aGUgY2hlY2tvdXQsIG9yIG51bGwgd2hlbiBkaXNhYmxlZC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB3YWl0aW5nRm9yTXMgLSBNaWxsaXNlY29uZHMgYWxyZWFkeSBzcGVudCB3YWl0aW5nLlxuICovXG4vKipcbiAqIERhdGFiYXNlUG9vbERlYnVnU25hcHNob3QgdHlwZS5cbiAqIEB0eXBlZGVmIHtvYmplY3R9IERhdGFiYXNlUG9vbERlYnVnU25hcHNob3RcbiAqIEBwcm9wZXJ0eSB7UmVjb3JkPHN0cmluZywgUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+fSBjb25maWd1cmF0aW9uIC0gU2FuaXRpemVkIHJlc29sdmVkIGRhdGFiYXNlIGNvbmZpZ3VyYXRpb24uXG4gKiBAcHJvcGVydHkge0FycmF5PFJlY29yZDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+Pj59IGNvbm5lY3Rpb25zIC0gTGl2ZSBjb25uZWN0aW9uIHNuYXBzaG90cy5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBjb25uZWN0aW9uc0JlaW5nU3Bhd25lZCAtIE51bWJlciBvZiBpbi1wcm9ncmVzcyBjb25uZWN0aW9uIHNwYXducy5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBpZGxlQ291bnQgLSBOdW1iZXIgb2YgaWRsZSBjb25uZWN0aW9ucy5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBpZGVudGlmaWVyIC0gRGF0YWJhc2UgaWRlbnRpZmllci5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBpblVzZUNvdW50IC0gTnVtYmVyIG9mIGNoZWNrZWQtb3V0IGNvbm5lY3Rpb25zLlxuICogQHByb3BlcnR5IHtBcnJheTxEYXRhYmFzZVBvb2xQZW5kaW5nQ2hlY2tvdXREZWJ1Z1NuYXBzaG90Pn0gW3BlbmRpbmdDaGVja291dHNdIC0gV2FpdGluZyBjaGVja291dCBzbmFwc2hvdHMuXG4gKiBAcHJvcGVydHkge251bWJlcn0gcGVuZGluZ0NoZWNrb3V0Q291bnQgLSBOdW1iZXIgb2YgcXVldWVkIGNoZWNrb3V0IHJlcXVlc3RzLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHBvb2xDbGFzcyAtIFBvb2wgY2xhc3MgbmFtZS5cbiAqIEBwcm9wZXJ0eSB7e2Nvbm5lY3Rpb25DcmVhdGlvbkNvdW50OiBudW1iZXIsIGNvbm5lY3Rpb25DcmVhdGlvbkZhaWx1cmVDb3VudDogbnVtYmVyLCBjb25uZWN0aW9uQ3JlYXRpb25NYXhNczogbnVtYmVyLCBjb25uZWN0aW9uQ3JlYXRpb25Ub3RhbE1zOiBudW1iZXIsIGNoZWNrb3V0VGltZW91dENvdW50OiBudW1iZXIsIGNoZWNrb3V0V2FpdENvdW50OiBudW1iZXIsIGNoZWNrb3V0V2FpdE1heE1zOiBudW1iZXIsIGNoZWNrb3V0V2FpdFRvdGFsTXM6IG51bWJlciwgaWRsZVJlYXBDb3VudDogbnVtYmVyLCBpZGxlUmVhcERpc3Bvc2FsQ291bnQ6IG51bWJlciwgaWRsZVJlYXBGYWlsdXJlQ291bnQ6IG51bWJlciwgaWRsZVJlYXBNYXhNczogbnVtYmVyLCBpZGxlUmVhcFRvdGFsTXM6IG51bWJlciwgcGVha0xpdmVDb25uZWN0aW9uczogbnVtYmVyfX0gW3RlbGVtZXRyeV0gLSBDdW11bGF0aXZlIHBvb2wgbGlmZWN5Y2xlIHRlbGVtZXRyeS5cbiAqL1xuZXhwb3J0IGNvbnN0IFBPT0xfQ09ORklHVVJBVElPTl9LRVkgPSBTeW1ib2woXCJ2ZWxvY2lvdXNQb29sQ29uZmlndXJhdGlvbktleVwiKVxuXG4vKipcbiAqIFNoYXJlZC5cbiAqIEB0eXBlIHt7Y3VycmVudFBvb2w6IFZlbG9jaW91c0RhdGFiYXNlUG9vbEJhc2UgfCBudWxsfX0gKi9cbmNvbnN0IHNoYXJlZCA9IHtcbiAgY3VycmVudFBvb2w6IG51bGxcbn1cblxuLyoqXG4gKiBSdW5zIHN0YWJsZSBzdHJpbmdpZnkuXG4gKiBAcGFyYW0ge1JldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+fSB2YWx1ZSAtIFZhbHVlIHRvIHN0cmluZ2lmeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IC0gU3RhYmxlIEpTT04gc3RyaW5nLlxuICovXG5mdW5jdGlvbiBzdGFibGVTdHJpbmdpZnkodmFsdWUpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIGBbJHt2YWx1ZS5tYXAoKGVudHJ5KSA9PiBzdGFibGVTdHJpbmdpZnkoZW50cnkpKS5qb2luKFwiLFwiKX1dYFxuICB9XG5cbiAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIikge1xuICAgIGNvbnN0IGVudHJpZXMgPSBPYmplY3RcbiAgICAgIC5rZXlzKC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+fSAqLyAodmFsdWUpKVxuICAgICAgLnNvcnQoKVxuICAgICAgLm1hcCgoa2V5KSA9PiBgJHtKU09OLnN0cmluZ2lmeShrZXkpfToke3N0YWJsZVN0cmluZ2lmeSgvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+Pn0gKi8gKHZhbHVlKVtrZXldKX1gKVxuXG4gICAgcmV0dXJuIGB7JHtlbnRyaWVzLmpvaW4oXCIsXCIpfX1gXG4gIH1cblxuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUpXG59XG5cbmNsYXNzIFZlbG9jaW91c0RhdGFiYXNlUG9vbEJhc2Uge1xuICAvKipcbiAgICogV2l0aG91dCBjdXJyZW50IGNvbm5lY3Rpb24gY29udGV4dC5cbiAgICogQHR5cGUge3VuZGVmaW5lZCB8ICgoY2FsbGJhY2s6ICgpID0+IFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+KSA9PiBSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPil9ICovXG4gIF93aXRob3V0Q3VycmVudENvbm5lY3Rpb25Db250ZXh0ID0gdW5kZWZpbmVkXG5cbiAgLyoqXG4gICAqIFJ1bnMgY3VycmVudC5cbiAgICogQHJldHVybnMge1ZlbG9jaW91c0RhdGFiYXNlUG9vbEJhc2V9IC0gVGhlIGN1cnJlbnQuXG4gICAqL1xuICBzdGF0aWMgY3VycmVudCgpIHtcbiAgICBpZiAoIXNoYXJlZC5jdXJyZW50UG9vbCkgdGhyb3cgbmV3IEVycm9yKFwiQSBkYXRhYmFzZSBwb29sIGhhc24ndCBiZWVuIHNldFwiKVxuXG4gICAgcmV0dXJuIHNoYXJlZC5jdXJyZW50UG9vbFxuICB9XG5cbiAgLyoqXG4gICAqIENsZWFycyBhbnkgZ2xvYmFsIGNvbm5lY3Rpb25zIGZvciB0aGUgZ2l2ZW4gY29uZmlndXJhdGlvbi5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi8uLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHR9IGNvbmZpZ3VyYXRpb24gLSBDb25maWd1cmF0aW9uIG93bmluZyB0aGUgcG9vbC5cbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgc3RhdGljIGNsZWFyR2xvYmFsQ29ubmVjdGlvbnMoY29uZmlndXJhdGlvbikgeyB2b2lkIGNvbmZpZ3VyYXRpb24gfVxuXG4gIC8qKlxuICAgKiBSdW5zIGNvbnN0cnVjdG9yLlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcGFyYW0ge0NvbmZpZ3VyYXRpb259IGFyZ3MuY29uZmlndXJhdGlvbiAtIENvbmZpZ3VyYXRpb24gaW5zdGFuY2UuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLmlkZW50aWZpZXIgLSBJZGVudGlmaWVyLlxuICAgKi9cbiAgY29uc3RydWN0b3Ioe2NvbmZpZ3VyYXRpb24sIGlkZW50aWZpZXJ9KSB7XG4gICAgdGhpcy5jb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvbiB8fCBDb25maWd1cmF0aW9uLmN1cnJlbnQoKVxuXG4gICAgaWYgKCF0aGlzLmNvbmZpZ3VyYXRpb24pIHRocm93IG5ldyBFcnJvcihcIk5vIGNvbmZpZ3VyYXRpb24gZ2l2ZW5cIilcbiAgICBpZiAoIWlkZW50aWZpZXIpIHRocm93IG5ldyBFcnJvcihcIk5vIGlkZW50aWZpZXIgd2FzIGdpdmVuXCIpXG5cbiAgICB0aGlzLmlkZW50aWZpZXIgPSBpZGVudGlmaWVyXG4gICAgdGhpcy5sb2dnZXIgPSBuZXcgTG9nZ2VyKHRoaXMpXG4gIH1cblxuICAvKipcbiAgICogUnVucyBjaGVja2luLlxuICAgKiBAYWJzdHJhY3RcbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9kcml2ZXJzL2Jhc2UuanNcIikuZGVmYXVsdH0gX2Nvbm5lY3Rpb24gLSBDb25uZWN0aW9uLlxuICAgKi9cbiAgY2hlY2tpbihfY29ubmVjdGlvbikge1xuICAgIHRocm93IG5ldyBFcnJvcihcIidjaGVja2luJyBub3QgaW1wbGVtZW50ZWRcIilcbiAgfVxuXG4gIC8qKlxuICAgKiBQZXJtYW5lbnRseSBkaXNjYXJkcyBhbiBhdHRlbXB0LW93bmVkIGNoZWNrZWQtb3V0IGNvbm5lY3Rpb24uXG4gICAqIEBhYnN0cmFjdFxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2RyaXZlcnMvYmFzZS5qc1wiKS5kZWZhdWx0fSBfY29ubmVjdGlvbiAtIENvbm5lY3Rpb24gdGhhdCBtdXN0IG5vdCByZXR1cm4gdG8gdGhlIHBvb2wuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIGFmdGVyIHRoZSBjb25uZWN0aW9uIGlzIGNsb3NlZCBhbmQgcmVtb3ZlZCBmcm9tIHBvb2wgb3duZXJzaGlwLlxuICAgKi9cbiAgZGlzY2FyZChfY29ubmVjdGlvbikge1xuICAgIHRocm93IG5ldyBFcnJvcihcIidkaXNjYXJkJyBub3QgaW1wbGVtZW50ZWRcIilcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGNoZWNrb3V0LlxuICAgKiBAYWJzdHJhY3RcbiAgICogQHBhcmFtIHtDb25uZWN0aW9uQ2hlY2tvdXRPcHRpb25zfSBbX29wdGlvbnNdIC0gQ2hlY2tvdXQgb3B0aW9ucy5cbiAgICogQHJldHVybnMge1Byb21pc2U8aW1wb3J0KFwiLi4vZHJpdmVycy9iYXNlLmpzXCIpLmRlZmF1bHQ+fSAtIFJlc29sdmVzIHdpdGggdGhlIGNoZWNrb3V0LlxuICAgKi9cbiAgY2hlY2tvdXQoX29wdGlvbnMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCInY2hlY2tvdXQnIG5vdCBpbXBsZW1lbnRlZFwiKVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgZ2V0IGN1cnJlbnQgY29ubmVjdGlvbi5cbiAgICogQGFic3RyYWN0XG4gICAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9kcml2ZXJzL2Jhc2UuanNcIikuZGVmYXVsdH0gLSBUaGUgY3VycmVudCBjb25uZWN0aW9uLlxuICAgKi9cbiAgZ2V0Q3VycmVudENvbm5lY3Rpb24oKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiJ2dldEN1cnJlbnRDb25uZWN0aW9uJyBub3QgaW1wbGVtZW50ZWRcIilcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBjb25uZWN0aW9uIHBpbm5lZCB0byB0aGUgY3VycmVudCBjb250ZXh0LCBpZiBhbnkuXG4gICAqIERlZmF1bHQgaW1wbGVtZW50YXRpb24gZGVmZXJzIHRvIGBnZXRDdXJyZW50Q29ubmVjdGlvbmAuXG4gICAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9kcml2ZXJzL2Jhc2UuanNcIikuZGVmYXVsdCB8IHVuZGVmaW5lZH0gLSBUaGUgY3VycmVudCBjb250ZXh0IGNvbm5lY3Rpb24uXG4gICAqL1xuICBnZXRDdXJyZW50Q29udGV4dENvbm5lY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q3VycmVudENvbm5lY3Rpb24oKVxuICB9XG5cbiAgLyoqXG4gICAqIFBpbnMgYSBjb25uZWN0aW9uIHRvIGJlIHJldHVybmVkIHRvIGNhbGxlcnMgdGhhdCBydW4gd2l0aG91dCBhIGNvbm5lY3Rpb24tY29udGV4dFxuICAgKiBwaW4gKHVzZWQgYnkgdGhlIHRlc3QgcnVubmVyIHRvIHNoYXJlIG9uZSBjb25uZWN0aW9uIHdpdGggaW4tcHJvY2VzcyBIVFRQIGhhbmRsZXJzKS5cbiAgICogQmFzZSBwb29scyB0aGF0IGRvIG5vdCB0cmFjayBhc3luYyBjb250ZXh0IGlnbm9yZSBpdDsgYXN5bmMtY29udGV4dCBwb29scyBvdmVycmlkZS5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9kcml2ZXJzL2Jhc2UuanNcIikuZGVmYXVsdH0gX2Nvbm5lY3Rpb24gLSBTaGFyZWQgY29ubmVjdGlvbi5cbiAgICogQHJldHVybnMge1Rlc3RTaGFyZWRDb25uZWN0aW9uUmVnaXN0cmF0aW9uIHwgdW5kZWZpbmVkfSAtIE9wYXF1ZSByZWdpc3RyYXRpb24gaGFuZGxlIHdoZW4gc3VwcG9ydGVkLlxuICAgKi9cbiAgc2V0VGVzdFNoYXJlZENvbm5lY3Rpb24oX2Nvbm5lY3Rpb24pIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH1cblxuICAvKipcbiAgICogU2V0cyBhIHByb3ZpZGVyIHRoYXQgcmVzb2x2ZXMgdGhlIGNvbm5lY3Rpb24gZWxpZ2libGUgZm9yIGluLXByb2Nlc3MgdGVzdCByZXF1ZXN0IHNoYXJpbmcuXG4gICAqIEJhc2UgcG9vbHMgdGhhdCBkbyBub3QgdHJhY2sgYXN5bmMgY29udGV4dCBpZ25vcmUgaXQ7IGFzeW5jLWNvbnRleHQgcG9vbHMgb3ZlcnJpZGUuXG4gICAqIEBwYXJhbSB7KCkgPT4gaW1wb3J0KFwiLi4vZHJpdmVycy9iYXNlLmpzXCIpLmRlZmF1bHQgfCB1bmRlZmluZWR9IF9wcm92aWRlciAtIFNoYXJlZCBjb25uZWN0aW9uIHByb3ZpZGVyLlxuICAgKiBAcmV0dXJucyB7VGVzdFNoYXJlZENvbm5lY3Rpb25SZWdpc3RyYXRpb24gfCB1bmRlZmluZWR9IC0gT3BhcXVlIHJlZ2lzdHJhdGlvbiBoYW5kbGUgd2hlbiBzdXBwb3J0ZWQuXG4gICAqL1xuICBzZXRUZXN0U2hhcmVkQ29ubmVjdGlvblByb3ZpZGVyKF9wcm92aWRlcikge1xuICAgIHJldHVybiB1bmRlZmluZWRcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgYSB0ZXN0IHNoYXJlZCBjb25uZWN0aW9uIHNlbGVjdGVkIGJ5IHRoZSBjYWxsZXIncyBsaXZlIGFzeW5jIGNvbnRleHQuXG4gICAqIEJhc2UgcG9vbHMgdGhhdCBkbyBub3QgdHJhY2sgYXN5bmMgY29udGV4dCBpZ25vcmUgaXQuXG4gICAqIEBwYXJhbSB7e21hdGNoZXM6ICgpID0+IGJvb2xlYW4sIHByb3ZpZGVyOiAoKSA9PiBpbXBvcnQoXCIuLi9kcml2ZXJzL2Jhc2UuanNcIikuZGVmYXVsdCB8IHVuZGVmaW5lZH19IF9hcmdzIC0gQ29udGV4dCBzZWxlY3RvciBhbmQgY29ubmVjdGlvbiBwcm92aWRlci5cbiAgICogQHJldHVybnMge1Rlc3RTaGFyZWRDb25uZWN0aW9uUmVnaXN0cmF0aW9uIHwgdW5kZWZpbmVkfSAtIE9wYXF1ZSBzY29wZWQgcmVnaXN0cmF0aW9uIGhhbmRsZS5cbiAgICovXG4gIHJlZ2lzdGVyVGVzdFNoYXJlZENvbm5lY3Rpb25Qcm92aWRlcihfYXJncykge1xuICAgIHJldHVybiB1bmRlZmluZWRcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgYSB0ZXN0IGNvbm5lY3Rpb24gZm9yIG9uZSByZXNvbHZlZCBwaHlzaWNhbCBkYXRhYmFzZSBjb25maWd1cmF0aW9uLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2RyaXZlcnMvYmFzZS5qc1wiKS5kZWZhdWx0fSBfY29ubmVjdGlvbiAtIEF0dGVtcHQtb3duZWQgY29ubmVjdGlvbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IF9yZXVzZUtleSAtIFJlc29sdmVkIHBoeXNpY2FsIGNvbmZpZ3VyYXRpb24gaWRlbnRpdHkuXG4gICAqIEByZXR1cm5zIHtUZXN0U2hhcmVkQ29ubmVjdGlvblJlZ2lzdHJhdGlvbiB8IHVuZGVmaW5lZH0gLSBPcGFxdWUgcmVnaXN0cmF0aW9uIGhhbmRsZSB3aGVuIHN1cHBvcnRlZC5cbiAgICovXG4gIHNldFRlc3RTaGFyZWRDb25uZWN0aW9uRm9yQ29uZmlndXJhdGlvbihfY29ubmVjdGlvbiwgX3JldXNlS2V5KSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZFxuICB9XG5cbiAgLyoqXG4gICAqIENsZWFycyB0aGUgc2hhcmVkIGNvbm5lY3Rpb24gb3IgcHJvdmlkZXIgc2V0IGZvciBpbi1wcm9jZXNzIHRlc3QgcmVxdWVzdHMuIE5vLW9wIGJ5IGRlZmF1bHQuXG4gICAqIFdoZW4gYSByZWdpc3RyYXRpb24gaXMgcHJvdmlkZWQsIGNsZWFycyBvbmx5IGlmIGl0IGlzIHN0aWxsIHRoZSBhY3RpdmUgcmVnaXN0cmF0aW9uLlxuICAgKiBAcGFyYW0ge1Rlc3RTaGFyZWRDb25uZWN0aW9uUmVnaXN0cmF0aW9ufSBbX3JlZ2lzdHJhdGlvbl0gLSBPcGFxdWUgaGFuZGxlIHJldHVybmVkIHdoZW4gdGhlIHNoYXJlZCB2YWx1ZSB3YXMgc2V0LlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGNsZWFyVGVzdFNoYXJlZENvbm5lY3Rpb24oX3JlZ2lzdHJhdGlvbikge31cblxuICAvKipcbiAgICogUnVucyBhIGNhbGxiYWNrIGluc2lkZSB0aGUgdGVzdCBzaGFyZWQgY29ubmVjdGlvbidzIGNvbnRleHQuIEJhc2UgcG9vbHMgdGhhdCBkbyBub3RcbiAgICogdHJhY2sgYXN5bmMgY29udGV4dCBqdXN0IHJ1biB0aGUgY2FsbGJhY2sgYXMtaXM7IGFzeW5jLWNvbnRleHQgcG9vbHMgb3ZlcnJpZGUuXG4gICAqIEB0ZW1wbGF0ZSBUXG4gICAqIEBwYXJhbSB7KCkgPT4gVH0gY2FsbGJhY2sgLSBDYWxsYmFjayB0byBydW4uXG4gICAqIEByZXR1cm5zIHtUfSAtIENhbGxiYWNrIHJlc3VsdC5cbiAgICovXG4gIHJ1bldpdGhUZXN0U2hhcmVkQ29ubmVjdGlvbihjYWxsYmFjaykge1xuICAgIHJldHVybiBjYWxsYmFjaygpXG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY29ubmVjdGlvbiByZWdpc3RlcmVkIGZvciB0ZXN0LW9ubHkgaW4tcHJvY2VzcyBzaGFyaW5nLlxuICAgKiBCYXNlIHBvb2xzIGRvIG5vdCBuZWVkIGEgc2VwYXJhdGUgc2hhcmVkIGNvbm5lY3Rpb24uXG4gICAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9kcml2ZXJzL2Jhc2UuanNcIikuZGVmYXVsdCB8IHVuZGVmaW5lZH0gLSBTaGFyZWQgY29ubmVjdGlvbi5cbiAgICovXG4gIHRlc3RTaGFyZWRDb25uZWN0aW9uKCkge1xuICAgIHJldHVybiB1bmRlZmluZWRcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIGN1cnJlbnQgY29ubmVjdGlvbiBpcyBwaW5uZWQgdG8gYW4gZXhlY3V0aW9uIGNvbnRleHQuXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIFdoZXRoZXIgdGhlIGN1cnJlbnQgY29ubmVjdGlvbiBjYW4gYmUgcmV1c2VkIGJ5IG5lc3RlZCBjb2RlLlxuICAgKi9cbiAgaGFzQ3VycmVudENvbm5lY3Rpb25Db250ZXh0KCkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvKipcbiAgICogUnVucyB3aXRob3V0IGN1cnJlbnQgY29ubmVjdGlvbiBjb250ZXh0LlxuICAgKiBAdGVtcGxhdGUgVFxuICAgKiBAcGFyYW0geygpID0+IFR9IGNhbGxiYWNrIC0gQ2FsbGJhY2sgdG8gcnVuIHdpdGhvdXQgPyBjdXJyZW50IGNvbm5lY3Rpb24gY29udGV4dC5cbiAgICogQHJldHVybnMge1R9IC0gQ2FsbGJhY2sgcmVzdWx0LlxuICAgKi9cbiAgd2l0aG91dEN1cnJlbnRDb25uZWN0aW9uQ29udGV4dChjYWxsYmFjaykge1xuICAgIGlmICh0aGlzLl93aXRob3V0Q3VycmVudENvbm5lY3Rpb25Db250ZXh0KSByZXR1cm4gLyoqIEB0eXBlIHtUfSAqLyAodGhpcy5fd2l0aG91dEN1cnJlbnRDb25uZWN0aW9uQ29udGV4dChjYWxsYmFjaykpXG5cbiAgICByZXR1cm4gY2FsbGJhY2soKVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgZ2V0IGNvbmZpZ3VyYXRpb24uXG4gICAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi8uLi9jb25maWd1cmF0aW9uLXR5cGVzLmpzXCIpLkRhdGFiYXNlQ29uZmlndXJhdGlvblR5cGV9IC0gUmVzb2x2ZWQgZGF0YWJhc2UgY29uZmlndXJhdGlvbiBmb3IgdGhlIHBvb2wgaWRlbnRpZmllci5cbiAgICovXG4gIGdldENvbmZpZ3VyYXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlndXJhdGlvbi5yZXNvbHZlRGF0YWJhc2VDb25maWd1cmF0aW9uKHRoaXMuaWRlbnRpZmllcilcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGdldCBjb25maWd1cmF0aW9uIHJldXNlIGtleS5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi8uLi9jb25maWd1cmF0aW9uLXR5cGVzLmpzXCIpLkRhdGFiYXNlQ29uZmlndXJhdGlvblR5cGV9IFtkYXRhYmFzZUNvbmZpZ3VyYXRpb25dIC0gUmVzb2x2ZWQgY29uZmlndXJhdGlvbiB0byBpZGVudGlmeS5cbiAgICogQHJldHVybnMge3N0cmluZ30gLSBSZXVzZSBrZXkgZm9yIHRoZSBjdXJyZW50bHkgcmVzb2x2ZWQgZGF0YWJhc2UgY29uZmlndXJhdGlvbi5cbiAgICovXG4gIGdldENvbmZpZ3VyYXRpb25SZXVzZUtleShkYXRhYmFzZUNvbmZpZ3VyYXRpb24gPSB0aGlzLmdldENvbmZpZ3VyYXRpb24oKSkge1xuICAgIHJldHVybiBzdGFibGVTdHJpbmdpZnkoe1xuICAgICAgZGF0YWJhc2U6IGRhdGFiYXNlQ29uZmlndXJhdGlvbi5kYXRhYmFzZSxcbiAgICAgIGhvc3Q6IGRhdGFiYXNlQ29uZmlndXJhdGlvbi5ob3N0LFxuICAgICAgbmFtZTogZGF0YWJhc2VDb25maWd1cmF0aW9uLm5hbWUsXG4gICAgICBwb3J0OiBkYXRhYmFzZUNvbmZpZ3VyYXRpb24ucG9ydCxcbiAgICAgIHNjaGVtYTogZGF0YWJhc2VDb25maWd1cmF0aW9uLnNjaGVtYSxcbiAgICAgIHNjaGVtYUNhY2hlOiBkYXRhYmFzZUNvbmZpZ3VyYXRpb24uc2NoZW1hQ2FjaGUsXG4gICAgICBzcWxDb25maWc6IGRhdGFiYXNlQ29uZmlndXJhdGlvbi5zcWxDb25maWcsXG4gICAgICB0eXBlOiBkYXRhYmFzZUNvbmZpZ3VyYXRpb24udHlwZSxcbiAgICAgIHVzZURhdGFiYXNlOiBkYXRhYmFzZUNvbmZpZ3VyYXRpb24udXNlRGF0YWJhc2UsXG4gICAgICB1c2VybmFtZTogZGF0YWJhc2VDb25maWd1cmF0aW9uLnVzZXJuYW1lXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGNvbm5lY3Rpb24gbWF0Y2hlcyBjdXJyZW50IGNvbmZpZ3VyYXRpb24uXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vZHJpdmVycy9iYXNlLmpzXCIpLmRlZmF1bHR9IGNvbm5lY3Rpb24gLSBDb25uZWN0aW9uLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBXaGV0aGVyIGNvbm5lY3Rpb24gbWF0Y2hlcyBjdXJyZW50IHJlc29sdmVkIGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICBjb25uZWN0aW9uTWF0Y2hlc0N1cnJlbnRDb25maWd1cmF0aW9uKGNvbm5lY3Rpb24pIHtcbiAgICByZXR1cm4gdGhpcy5nZXRDb25uZWN0aW9uQ29uZmlndXJhdGlvblJldXNlS2V5KGNvbm5lY3Rpb24pID09PSB0aGlzLmdldENvbmZpZ3VyYXRpb25SZXVzZUtleSgpXG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgcmVzb2x2ZWQgZGF0YWJhc2UgY29uZmlndXJhdGlvbiBrZXkgc3RhbXBlZCBvbiBhIGNvbm5lY3Rpb24gYXQgY2hlY2tvdXQuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vZHJpdmVycy9iYXNlLmpzXCIpLmRlZmF1bHR9IGNvbm5lY3Rpb24gLSBDaGVja2VkLW91dCBjb25uZWN0aW9uLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIENvbm5lY3Rpb24gY29uZmlndXJhdGlvbiByZXVzZSBrZXkuXG4gICAqL1xuICBnZXRDb25uZWN0aW9uQ29uZmlndXJhdGlvblJldXNlS2V5KGNvbm5lY3Rpb24pIHtcbiAgICBjb25zdCBjb25uZWN0aW9uV2l0aFBvb2xLZXkgPSAvKiogQHR5cGUge2ltcG9ydChcIi4uL2RyaXZlcnMvYmFzZS5qc1wiKS5kZWZhdWx0ICYge1tQT09MX0NPTkZJR1VSQVRJT05fS0VZXT86IHN0cmluZ319ICovIChjb25uZWN0aW9uKVxuICAgIGNvbnN0IHJldXNlS2V5ID0gY29ubmVjdGlvbldpdGhQb29sS2V5W1BPT0xfQ09ORklHVVJBVElPTl9LRVldXG5cbiAgICBpZiAoIXJldXNlS2V5KSB0aHJvdyBuZXcgRXJyb3IoXCJEYXRhYmFzZSBjb25uZWN0aW9uIGlzIG1pc3NpbmcgaXRzIGNvbmZpZ3VyYXRpb24gcmV1c2Uga2V5XCIpXG5cbiAgICByZXR1cm4gcmV1c2VLZXlcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhcnMgc2NoZW1hIG1ldGFkYXRhIGNhY2hlZCBieSB0aGlzIHBvb2wncyBjdXJyZW50IGNvbm5lY3Rpb24uXG4gICAqIFBvb2xzIHRoYXQga2VlcCBtdWx0aXBsZSBjb25uZWN0aW9ucyBhbGl2ZSBzaG91bGQgb3ZlcnJpZGUgdGhpcyB0byBjbGVhciBldmVyeSBsaXZlIGNvbm5lY3Rpb24uXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIGNsZWFyU2NoZW1hQ2FjaGUoKSB7XG4gICAgdGhpcy5fY2xlYXJDb25uZWN0aW9uU2NoZW1hQ2FjaGUodGhpcy5nZXRDdXJyZW50Q29ubmVjdGlvbigpKVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgY2xlYXIgY29ubmVjdGlvbiBzY2hlbWEgY2FjaGUuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vZHJpdmVycy9iYXNlLmpzXCIpLmRlZmF1bHR9IGNvbm5lY3Rpb24gLSBDb25uZWN0aW9uIHdob3NlIGxvY2FsIHNjaGVtYSBjYWNoZSBzaG91bGQgYmUgY2xlYXJlZC5cbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgX2NsZWFyQ29ubmVjdGlvblNjaGVtYUNhY2hlKGNvbm5lY3Rpb24pIHtcbiAgICBjb25uZWN0aW9uLl9jbGVhckxvY2FsU2NoZW1hQ2FjaGUoKVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgcHJpbWFyeSBrZXkgdHlwZS5cbiAgICogQGFic3RyYWN0XG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gVGhlIHByaW1hcnkga2V5IHR5cGUuXG4gICAqL1xuICBwcmltYXJ5S2V5VHlwZSgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIncHJpbWFyeUtleVR5cGUnIG5vdCBpbXBsZW1lbnRlZFwiKVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgc2V0IGN1cnJlbnQuXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIHNldEN1cnJlbnQoKSB7XG4gICAgc2hhcmVkLmN1cnJlbnRQb29sID0gdGhpc1xuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgc2V0IGRyaXZlciBjbGFzcy5cbiAgICogQHBhcmFtIHt0eXBlb2YgaW1wb3J0KFwiLi4vZHJpdmVycy9iYXNlLmpzXCIpLmRlZmF1bHR9IGRyaXZlckNsYXNzIC0gRHJpdmVyIGNsYXNzLlxuICAgKi9cbiAgc2V0RHJpdmVyQ2xhc3MoZHJpdmVyQ2xhc3MpIHtcbiAgICB0aGlzLmRyaXZlckNsYXNzID0gZHJpdmVyQ2xhc3NcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHNwYXduIGNvbm5lY3Rpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGltcG9ydChcIi4uL2RyaXZlcnMvYmFzZS5qc1wiKS5kZWZhdWx0Pn0gLSBSZXNvbHZlcyB3aXRoIHRoZSBzcGF3biBjb25uZWN0aW9uLlxuICAgKi9cbiAgYXN5bmMgc3Bhd25Db25uZWN0aW9uKCkge1xuICAgIGNvbnN0IGRhdGFiYXNlQ29uZmlnID0gdGhpcy5nZXRDb25maWd1cmF0aW9uKClcblxuICAgIHRoaXMubG9nZ2VyLmRlYnVnKFwic3Bhd25Db25uZWN0aW9uXCIsIHtpZGVudGlmaWVyOiB0aGlzLmlkZW50aWZpZXIsIGRhdGFiYXNlQ29uZmlnfSlcblxuICAgIHJldHVybiBhd2FpdCB0aGlzLnNwYXduQ29ubmVjdGlvbkZvckNvbmZpZ3VyYXRpb24oZGF0YWJhc2VDb25maWcpXG4gIH1cblxuICAvKipcbiAgICogU3Bhd25zIGEgY29ubmVjdGlvbiBmb3IgYW4gYWxyZWFkeS1yZXNvbHZlZCBwaHlzaWNhbCBkYXRhYmFzZSBjb25maWd1cmF0aW9uLlxuICAgKiBUaGUgcmV1c2UgaWRlbnRpdHkgaXMgZGVyaXZlZCBvbmx5IGZyb20gdGhhdCBjYXB0dXJlZCBjb25maWd1cmF0aW9uLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uLy4uL2NvbmZpZ3VyYXRpb24tdHlwZXMuanNcIikuRGF0YWJhc2VDb25maWd1cmF0aW9uVHlwZX0gZGF0YWJhc2VDb25maWd1cmF0aW9uIC0gQ2FwdHVyZWQgcmVzb2x2ZWQgY29uZmlndXJhdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8aW1wb3J0KFwiLi4vZHJpdmVycy9iYXNlLmpzXCIpLmRlZmF1bHQ+fSAtIENvbm5lY3RlZCBhbmQgaWRlbnRpdHktc3RhbXBlZCBkcml2ZXIuXG4gICAqL1xuICBhc3luYyBzcGF3bkNvbm5lY3Rpb25Gb3JDb25maWd1cmF0aW9uKGRhdGFiYXNlQ29uZmlndXJhdGlvbikge1xuICAgIGNvbnN0IHJldXNlS2V5ID0gdGhpcy5nZXRDb25maWd1cmF0aW9uUmV1c2VLZXkoZGF0YWJhc2VDb25maWd1cmF0aW9uKVxuICAgIGNvbnN0IGNvbm5lY3Rpb24gPSBhd2FpdCB0aGlzLnNwYXduQ29ubmVjdGlvbldpdGhDb25maWd1cmF0aW9uKGRhdGFiYXNlQ29uZmlndXJhdGlvbiwgcmV1c2VLZXkpXG5cbiAgICB0aGlzLnN0YW1wQ29ubmVjdGlvbkZvckNvbmZpZ3VyYXRpb25SZXVzZUtleShjb25uZWN0aW9uLCByZXVzZUtleSlcblxuICAgIHJldHVybiBjb25uZWN0aW9uXG4gIH1cblxuICAvKipcbiAgICogU3RhbXBzIGEgY29ubmVjdGVkIGRyaXZlciB3aXRoIGl0cyBwb29sIHJldXNlIGlkZW50aXR5IGFuZCBkaWFnbm9zdGljLXNhZmUgb3BhcXVlIGlkZW50aXR5LlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2RyaXZlcnMvYmFzZS5qc1wiKS5kZWZhdWx0fSBjb25uZWN0aW9uIC0gQ29ubmVjdGVkIGRyaXZlci5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHJldXNlS2V5IC0gRXhhY3QgcGh5c2ljYWwgY29uZmlndXJhdGlvbiByZXVzZSBrZXkgY2FwdHVyZWQgZm9yIHRoaXMgc3Bhd24uXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgc3RhbXBDb25uZWN0aW9uRm9yQ29uZmlndXJhdGlvblJldXNlS2V5KGNvbm5lY3Rpb24sIHJldXNlS2V5KSB7XG4gICAgY29uc3QgY29ubmVjdGlvbldpdGhQb29sS2V5ID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9kcml2ZXJzL2Jhc2UuanNcIikuZGVmYXVsdCAmIHtbUE9PTF9DT05GSUdVUkFUSU9OX0tFWV0/OiBzdHJpbmd9fSAqLyAoY29ubmVjdGlvbilcbiAgICBjb25zdCBkYXRhYmFzZUlkZW50aXR5RmluZ2VycHJpbnQgPSBgc2hhMjU2OiR7c2hhMjU2SGV4KGBkYXRhYmFzZS1jb25maWd1cmF0aW9uLXJldXNlOnYxXFwwJHtyZXVzZUtleX1gKX1gXG5cbiAgICBjb25uZWN0aW9uV2l0aFBvb2xLZXlbUE9PTF9DT05GSUdVUkFUSU9OX0tFWV0gPSByZXVzZUtleVxuICAgIGNvbm5lY3Rpb24uc2V0UG9vbERpYWdub3N0aWNJZGVudGl0eSh7XG4gICAgICBkYXRhYmFzZUlkZW50aWZpZXI6IHRoaXMuaWRlbnRpZmllcixcbiAgICAgIGRhdGFiYXNlSWRlbnRpdHlGaW5nZXJwcmludFxuICAgIH0pXG4gICAgY29ubmVjdGlvbi5zZXRTY2hlbWFDYWNoZUludmFsaWRhdG9yKCgpID0+IHtcbiAgICAgIHRoaXMuY2xlYXJTY2hlbWFDYWNoZSgpXG4gICAgICB0aGlzLmNvbmZpZ3VyYXRpb24uY2xlYXJTY2hlbWFDYWNoZXNGb3JSZXVzZUtleShyZXVzZUtleSlcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgc3Bhd24gY29ubmVjdGlvbiB3aXRoIGNvbmZpZ3VyYXRpb24uXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vLi4vY29uZmlndXJhdGlvbi10eXBlcy5qc1wiKS5EYXRhYmFzZUNvbmZpZ3VyYXRpb25UeXBlfSBjb25maWcgLSBDb25maWd1cmF0aW9uIG9iamVjdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtyZXVzZUtleV0gLSBFeGFjdCByZXNvbHZlZCBwaHlzaWNhbCBpZGVudGl0eS5cbiAgICogQHJldHVybnMge1Byb21pc2U8aW1wb3J0KFwiLi4vZHJpdmVycy9iYXNlLmpzXCIpLmRlZmF1bHQ+fSAtIFJlc29sdmVzIHdpdGggdGhlIHNwYXduIGNvbm5lY3Rpb24gd2l0aCBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgYXN5bmMgc3Bhd25Db25uZWN0aW9uV2l0aENvbmZpZ3VyYXRpb24oY29uZmlnLCByZXVzZUtleSkge1xuICAgIGNvbnN0IERyaXZlckNsYXNzID0gY29uZmlnLmRyaXZlciB8fCB0aGlzLmRyaXZlckNsYXNzXG5cbiAgICBpZiAoIURyaXZlckNsYXNzKSB0aHJvdyBuZXcgRXJyb3IoXCJObyBkcml2ZXIgY2xhc3Mgc2V0IGluIGRhdGFiYXNlIHBvb2wgb3IgaW4gZ2l2ZW4gY29uZmlnXCIpXG5cbiAgICBjb25zdCBzaGFyZWRDb25uZWN0aW9uID0gYXdhaXQgdGhpcy5jb25maWd1cmF0aW9uLmdldEVudmlyb25tZW50SGFuZGxlcigpLmNyZWF0ZVRlc3RTaGFyZWRUcmFuc2FjdGlvbkNvbm5lY3Rpb24oe1xuICAgICAgRHJpdmVyQ2xhc3MsXG4gICAgICBjb25maWcsXG4gICAgICBjb25maWd1cmF0aW9uOiB0aGlzLmNvbmZpZ3VyYXRpb24sXG4gICAgICBkYXRhYmFzZUlkZW50aWZpZXI6IHRoaXMuaWRlbnRpZmllcixcbiAgICAgIHJldXNlS2V5XG4gICAgfSlcbiAgICBjb25zdCBjb25uZWN0aW9uID0gc2hhcmVkQ29ubmVjdGlvbiB8fCBuZXcgRHJpdmVyQ2xhc3MoY29uZmlnLCB0aGlzLmNvbmZpZ3VyYXRpb24pXG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgY29ubmVjdGlvbi5jb25uZWN0KClcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgYXdhaXQgdGhpcy5jbG9zZUNvbm5lY3Rpb25BZnRlckZhaWxlZENvbm5lY3QoY29ubmVjdGlvbilcbiAgICAgIHRocm93IGVycm9yXG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbm5lY3Rpb25cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3Mgb3V0IGEgY29ubmVjdGlvbiBmb3IgYW4gYWxyZWFkeS1yZXNvbHZlZCBwaHlzaWNhbCBjb25maWd1cmF0aW9uLlxuICAgKiBNdWx0aS1jb25maWd1cmF0aW9uIHBvb2xzIG92ZXJyaWRlIHRoaXMgZm9yIGV4cGxpY2l0IHRlbmFudCByZWdpc3RyYXRpb25zLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uLy4uL2NvbmZpZ3VyYXRpb24tdHlwZXMuanNcIikuRGF0YWJhc2VDb25maWd1cmF0aW9uVHlwZX0gX2RhdGFiYXNlQ29uZmlndXJhdGlvbiAtIENhcHR1cmVkIGNvbmZpZ3VyYXRpb24uXG4gICAqIEBwYXJhbSB7Q29ubmVjdGlvbkNoZWNrb3V0T3B0aW9uc30gW19vcHRpb25zXSAtIENoZWNrb3V0IG9wdGlvbnMuXG4gICAqIEBwYXJhbSB7e3JldGFpbjogYm9vbGVhbn19IFtfYXJnc10gLSBQb29sLXNwZWNpZmljIHJldGVudGlvbiBiZWhhdmlvci5cbiAgICogQHJldHVybnMge1Byb21pc2U8aW1wb3J0KFwiLi4vZHJpdmVycy9iYXNlLmpzXCIpLmRlZmF1bHQ+fSAtIENoZWNrZWQtb3V0IGNvbm5lY3Rpb24uXG4gICAqL1xuICBhc3luYyBjaGVja291dEZvckNvbmZpZ3VyYXRpb24oX2RhdGFiYXNlQ29uZmlndXJhdGlvbiwgX29wdGlvbnMsIF9hcmdzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiRGF0YWJhc2UgcG9vbCBkb2VzIG5vdCBzdXBwb3J0IGNhcHR1cmVkIGNvbmZpZ3VyYXRpb24gY2hlY2tvdXRcIilcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGNsb3NlIGNvbm5lY3Rpb24gYWZ0ZXIgZmFpbGVkIGNvbm5lY3QuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vZHJpdmVycy9iYXNlLmpzXCIpLmRlZmF1bHR9IGNvbm5lY3Rpb24gLSBDb25uZWN0aW9uIHRvIGNsb3NlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIGNsZWFudXAgaGFzIGJlZW4gYXR0ZW1wdGVkLlxuICAgKi9cbiAgYXN5bmMgY2xvc2VDb25uZWN0aW9uQWZ0ZXJGYWlsZWRDb25uZWN0KGNvbm5lY3Rpb24pIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgY29ubmVjdGlvbi5jbG9zZSgpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMubG9nZ2VyLndhcm4oXCJGYWlsZWQgdG8gY2xvc2UgZGF0YWJhc2UgY29ubmVjdGlvbiBhZnRlciBjb25uZWN0IGZhaWxlZFwiLCB7ZXJyb3J9KVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHdpdGggY29ubmVjdGlvbi5cbiAgICogQHRlbXBsYXRlIFRcbiAgICogQGFic3RyYWN0XG4gICAqIEBwYXJhbSB7Q29ubmVjdGlvbkNoZWNrb3V0T3B0aW9ucyB8ICgoYXJnOiBpbXBvcnQoXCIuLi9kcml2ZXJzL2Jhc2UuanNcIikuZGVmYXVsdCkgPT4gUHJvbWlzZTxUPil9IF9vcHRpb25zT3JDYWxsYmFjayAtIENoZWNrb3V0IG9wdGlvbnMgb3IgY2FsbGJhY2sgZnVuY3Rpb24uXG4gICAqIEBwYXJhbSB7KGFyZzogaW1wb3J0KFwiLi4vZHJpdmVycy9iYXNlLmpzXCIpLmRlZmF1bHQpID0+IFByb21pc2U8VD59IFtfY2FsbGJhY2tdIC0gQ2FsbGJhY2sgZnVuY3Rpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFQ+fSAtIFJlc29sdmVzIHdpdGggdGhlIGNhbGxiYWNrIHJlc3VsdC5cbiAgICovXG4gIHdpdGhDb25uZWN0aW9uKF9vcHRpb25zT3JDYWxsYmFjaywgX2NhbGxiYWNrKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiJ3dpdGhDb25uZWN0aW9uJyBub3QgaW1wbGVtZW50ZWRcIilcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGFuIG9wZXJhdGlvbiBvbiBhIGZyZXNobHkgY2hlY2tlZC1vdXQgY29ubmVjdGlvbi5cbiAgICogQHRlbXBsYXRlIFRcbiAgICogQHBhcmFtIHtDb25uZWN0aW9uQ2hlY2tvdXRPcHRpb25zfSBvcHRpb25zIC0gQ2hlY2tvdXQgb3B0aW9ucy5cbiAgICogQHBhcmFtIHsoY29ubmVjdGlvbjogaW1wb3J0KFwiLi4vZHJpdmVycy9iYXNlLmpzXCIpLmRlZmF1bHQsIG93bmVyOiBzeW1ib2wpID0+IFByb21pc2U8VD59IGNhbGxiYWNrIC0gT3BlcmF0aW9uIGNhbGxiYWNrLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxUPn0gLSBSZXNvbHZlcyB3aXRoIHRoZSBjYWxsYmFjayByZXN1bHQuXG4gICAqL1xuICBhc3luYyB3aXRoT3BlcmF0aW9uQ29ubmVjdGlvbihvcHRpb25zLCBjYWxsYmFjaykge1xuICAgIGNvbnN0IG93bmVyID0gU3ltYm9sKFwiZGF0YWJhc2Utb3BlcmF0aW9uLW93bmVyXCIpXG5cbiAgICByZXR1cm4gYXdhaXQgdGhpcy53aXRoQ29ubmVjdGlvbihvcHRpb25zLCBhc3luYyAoY29ubmVjdGlvbikgPT4gYXdhaXQgY2FsbGJhY2soY29ubmVjdGlvbiwgb3duZXIpKVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgd29yayB0aHJvdWdoIGEgcG9vbC1vd25lZCBjaGVja291dCBmb3IgYW4gaW1tdXRhYmxlLCBhbHJlYWR5LXJlc29sdmVkXG4gICAqIHBoeXNpY2FsIGNvbmZpZ3VyYXRpb24uIENvbmNyZXRlIHBvb2xzIG11c3QgcHJlc2VydmUgdGhlaXIgY2FwYWNpdHksXG4gICAqIHRpbWVvdXQsIHF1ZXVlLCBkZWJ1ZywgYW5kIGNsb3NlQWxsIG93bmVyc2hpcCBvbiB0aGlzIHBhdGguXG4gICAqIEB0ZW1wbGF0ZSBUXG4gICAqIEBwYXJhbSB7Q2FwdHVyZWRDb25uZWN0aW9uT3B0aW9uc30gb3B0aW9ucyAtIENhcHR1cmVkIGNoZWNrb3V0IG9wdGlvbnMuXG4gICAqIEBwYXJhbSB7KGNvbm5lY3Rpb246IGltcG9ydChcIi4uL2RyaXZlcnMvYmFzZS5qc1wiKS5kZWZhdWx0LCBvd25lcjogc3ltYm9sKSA9PiBQcm9taXNlPFQ+fSBjYWxsYmFjayAtIE9wZXJhdGlvbiBjYWxsYmFjay5cbiAgICogQHJldHVybnMge1Byb21pc2U8VD59IC0gQ2FsbGJhY2sgcmVzdWx0LlxuICAgKi9cbiAgYXN5bmMgd2l0aENhcHR1cmVkT3BlcmF0aW9uQ29ubmVjdGlvbihvcHRpb25zLCBjYWxsYmFjaykge1xuICAgIHZvaWQgb3B0aW9uc1xuICAgIHZvaWQgY2FsbGJhY2tcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCInd2l0aENhcHR1cmVkT3BlcmF0aW9uQ29ubmVjdGlvbicgbm90IGltcGxlbWVudGVkXCIpXG4gIH1cblxuICBhc3luYyBvcGVuQ2FwdHVyZWRDb25uZWN0aW9uKC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vLi4vY29uZmlndXJhdGlvbi10eXBlcy5qc1wiKS5EYXRhYmFzZUNvbmZpZ3VyYXRpb25UeXBlfSAqLyBfZGF0YWJhc2VDb25maWd1cmF0aW9uKSB7IHRocm93IG5ldyBFcnJvcihcIkZyb250ZW5kIHRlbmFudCBTUUxpdGUgbGlmZWN5Y2xlIHJlcXVpcmVzIGEga2V5ZWQgc2luZ2xlLWNvbm5lY3Rpb24gcG9vbFwiKSB9XG4gIGFzeW5jIGZsdXNoQ2FwdHVyZWRDb25uZWN0aW9uKC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vLi4vY29uZmlndXJhdGlvbi10eXBlcy5qc1wiKS5EYXRhYmFzZUNvbmZpZ3VyYXRpb25UeXBlfSAqLyBfZGF0YWJhc2VDb25maWd1cmF0aW9uKSB7IHRocm93IG5ldyBFcnJvcihcIkZyb250ZW5kIHRlbmFudCBTUUxpdGUgbGlmZWN5Y2xlIHJlcXVpcmVzIGEga2V5ZWQgc2luZ2xlLWNvbm5lY3Rpb24gcG9vbFwiKSB9XG4gIGFzeW5jIGNsb3NlQ2FwdHVyZWRDb25uZWN0aW9uKC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vLi4vY29uZmlndXJhdGlvbi10eXBlcy5qc1wiKS5EYXRhYmFzZUNvbmZpZ3VyYXRpb25UeXBlfSAqLyBfZGF0YWJhc2VDb25maWd1cmF0aW9uKSB7IHRocm93IG5ldyBFcnJvcihcIkZyb250ZW5kIHRlbmFudCBTUUxpdGUgbGlmZWN5Y2xlIHJlcXVpcmVzIGEga2V5ZWQgc2luZ2xlLWNvbm5lY3Rpb24gcG9vbFwiKSB9XG4gIGFzeW5jIGRlbGV0ZUNhcHR1cmVkRGF0YWJhc2UoLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi8uLi9jb25maWd1cmF0aW9uLXR5cGVzLmpzXCIpLkRhdGFiYXNlQ29uZmlndXJhdGlvblR5cGV9ICovIF9kYXRhYmFzZUNvbmZpZ3VyYXRpb24pIHsgdGhyb3cgbmV3IEVycm9yKFwiRnJvbnRlbmQgdGVuYW50IFNRTGl0ZSBsaWZlY3ljbGUgcmVxdWlyZXMgYSBrZXllZCBzaW5nbGUtY29ubmVjdGlvbiBwb29sXCIpIH1cbiAgY2FwdHVyZWRDb25uZWN0aW9uSW5Vc2UoLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi8uLi9jb25maWd1cmF0aW9uLXR5cGVzLmpzXCIpLkRhdGFiYXNlQ29uZmlndXJhdGlvblR5cGV9ICovIF9kYXRhYmFzZUNvbmZpZ3VyYXRpb24pIHsgcmV0dXJuIGZhbHNlIH1cbiAgY2FwdHVyZWRDb25uZWN0aW9uSGFzUGVuZGluZ1dyaXRlcygvKiogQHR5cGUge2ltcG9ydChcIi4uLy4uL2NvbmZpZ3VyYXRpb24tdHlwZXMuanNcIikuRGF0YWJhc2VDb25maWd1cmF0aW9uVHlwZX0gKi8gX2RhdGFiYXNlQ29uZmlndXJhdGlvbikgeyByZXR1cm4gZmFsc2UgfVxuXG4gIC8qKlxuICAgKiBFbnN1cmVzIGEgcmV1c2FibGUgY29ubmVjdGlvbiBleGlzdHMgZm9yIGNvbnRleHRzIHdoZXJlIEFzeW5jTG9jYWxTdG9yYWdlIGlzbid0IHNldC5cbiAgICogRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBqdXN0IGNoZWNrcyBvdXQgYSBjb25uZWN0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxpbXBvcnQoXCIuLi9kcml2ZXJzL2Jhc2UuanNcIikuZGVmYXVsdD59IC0gUmVzb2x2ZXMgd2l0aCB0aGUgZ2xvYmFsIGNvbm5lY3Rpb24uXG4gICAqL1xuICBhc3luYyBlbnN1cmVHbG9iYWxDb25uZWN0aW9uKCkge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNoZWNrb3V0KClcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGdldCBkZWJ1ZyBzbmFwc2hvdC5cbiAgICogQHJldHVybnMge0RhdGFiYXNlUG9vbERlYnVnU25hcHNob3R9IC0gRGlhZ25vc3RpYyBzbmFwc2hvdCBmb3IgdGhpcyBwb29sLlxuICAgKi9cbiAgZ2V0RGVidWdTbmFwc2hvdCgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY29uZmlndXJhdGlvbjogdGhpcy5kZWJ1Z0NvbmZpZ3VyYXRpb25TbmFwc2hvdCgpLFxuICAgICAgY29ubmVjdGlvbnM6IFtdLFxuICAgICAgY29ubmVjdGlvbnNCZWluZ1NwYXduZWQ6IDAsXG4gICAgICBpZGVudGlmaWVyOiB0aGlzLmlkZW50aWZpZXIsXG4gICAgICBpZGxlQ291bnQ6IDAsXG4gICAgICBpblVzZUNvdW50OiAwLFxuICAgICAgcGVuZGluZ0NoZWNrb3V0Q291bnQ6IDAsXG4gICAgICBwb29sQ2xhc3M6IHRoaXMuY29uc3RydWN0b3IubmFtZVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGRlYnVnIGNvbmZpZ3VyYXRpb24gc25hcHNob3QuXG4gICAqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nLCBSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPj59IC0gU2FuaXRpemVkIHJlc29sdmVkIGRhdGFiYXNlIGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICBkZWJ1Z0NvbmZpZ3VyYXRpb25TbmFwc2hvdCgpIHtcbiAgICBjb25zdCBkYXRhYmFzZUNvbmZpZyA9IHRoaXMuZ2V0Q29uZmlndXJhdGlvbigpXG4gICAgY29uc3QgcG9vbENvbmZpZyA9IGRhdGFiYXNlQ29uZmlnLnBvb2xcblxuICAgIHJldHVybiB7XG4gICAgICBkYXRhYmFzZTogZGF0YWJhc2VDb25maWcuZGF0YWJhc2UsXG4gICAgICBkcml2ZXI6IGRhdGFiYXNlQ29uZmlnLmRyaXZlcj8ubmFtZSxcbiAgICAgIGhvc3Q6IGRhdGFiYXNlQ29uZmlnLmhvc3QsXG4gICAgICBtaWdyYXRpb25zOiBkYXRhYmFzZUNvbmZpZy5taWdyYXRpb25zLFxuICAgICAgbmFtZTogZGF0YWJhc2VDb25maWcubmFtZSxcbiAgICAgIHBvb2w6IHBvb2xDb25maWcgPyB7aWRsZVRpbWVvdXRNaWxsaXM6IHBvb2xDb25maWcuaWRsZVRpbWVvdXRNaWxsaXMsIG1heDogcG9vbENvbmZpZy5tYXh9IDogdW5kZWZpbmVkLFxuICAgICAgcG9ydDogZGF0YWJhc2VDb25maWcucG9ydCxcbiAgICAgIHNjaGVtYTogZGF0YWJhc2VDb25maWcuc2NoZW1hLFxuICAgICAgdHlwZTogZGF0YWJhc2VDb25maWcudHlwZSxcbiAgICAgIHVzZURhdGFiYXNlOiBkYXRhYmFzZUNvbmZpZy51c2VEYXRhYmFzZSxcbiAgICAgIHVzZXJuYW1lOiBkYXRhYmFzZUNvbmZpZy51c2VybmFtZVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGRlYnVnIGNvbm5lY3Rpb24gc25hcHNob3QuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vZHJpdmVycy9iYXNlLmpzXCIpLmRlZmF1bHR9IGNvbm5lY3Rpb24gLSBEYXRhYmFzZSBjb25uZWN0aW9uLlxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+Pn0gZGV0YWlscyAtIEV4dHJhIGRpYWdub3N0aWMgZmllbGRzLlxuICAgKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZywgUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+fSAtIENvbm5lY3Rpb24gZGlhZ25vc3RpYyBzbmFwc2hvdC5cbiAgICovXG4gIGRlYnVnQ29ubmVjdGlvblNuYXBzaG90KGNvbm5lY3Rpb24sIGRldGFpbHMgPSB7fSkge1xuICAgIGNvbnN0IGNvbm5lY3Rpb25XaXRoUG9vbEtleSA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vZHJpdmVycy9iYXNlLmpzXCIpLmRlZmF1bHQgJiB7W1BPT0xfQ09ORklHVVJBVElPTl9LRVldPzogc3RyaW5nfX0gKi8gKGNvbm5lY3Rpb24pXG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uY29ubmVjdGlvbi5nZXREZWJ1Z1NuYXBzaG90KCksXG4gICAgICAuLi5kZXRhaWxzLFxuICAgICAgcmV1c2VLZXk6IGNvbm5lY3Rpb25XaXRoUG9vbEtleVtQT09MX0NPTkZJR1VSQVRJT05fS0VZXVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZXMgYWxsIGNvbm5lY3Rpb25zIGZvciB0aGlzIHBvb2wuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gY29tcGxldGUuXG4gICAqL1xuICBhc3luYyBjbG9zZUFsbCgpIHt9XG59XG5cbmJhc2VNZXRob2RzRm9yd2FyZChWZWxvY2lvdXNEYXRhYmFzZVBvb2xCYXNlKVxuXG5leHBvcnQgZGVmYXVsdCBWZWxvY2lvdXNEYXRhYmFzZVBvb2xCYXNlXG4iXX0=
|
|
516
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kYXRhYmFzZS9wb29sL2Jhc2UuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sYUFBYSxNQUFNLHdCQUF3QixDQUFBO0FBQ2xELE9BQU8sTUFBTSxNQUFNLGlCQUFpQixDQUFBO0FBQ3BDLE9BQU8sa0JBQWtCLE1BQU0sMkJBQTJCLENBQUE7QUFDMUQsT0FBTyxTQUFTLE1BQU0sMkJBQTJCLENBQUE7QUFFakQ7OztHQUdHO0FBRUg7Ozs7R0FJRztBQUNIOzs7OztHQUtHO0FBQ0g7Ozs7Ozs7Ozs7O0dBV0c7QUFDSDs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUNILE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLE1BQU0sQ0FBQywrQkFBK0IsQ0FBQyxDQUFBO0FBRTdFOzs2REFFNkQ7QUFDN0QsTUFBTSxNQUFNLEdBQUc7SUFDYixXQUFXLEVBQUUsSUFBSTtDQUNsQixDQUFBO0FBRUQ7Ozs7R0FJRztBQUNILFNBQVMsZUFBZSxDQUFDLEtBQUs7SUFDNUIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDekIsT0FBTyxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFBO0lBQ3RFLENBQUM7SUFFRCxJQUFJLEtBQUssSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUN2QyxNQUFNLE9BQU8sR0FBRyxNQUFNO2FBQ25CLElBQUksQ0FBQyw0REFBNEQsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQzFFLElBQUksRUFBRTthQUNOLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFD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QixDQUFDLFVBQVUsRUFBRSxPQUFPLEdBQUcsRUFBRTtRQUM5QyxNQUFNLHFCQUFxQixHQUFHLHlGQUF5RixDQUFDLENBQUMsVUFBVSxDQUFDLENBQUE7UUFFcEksT0FBTztZQUNMLEdBQUcsVUFBVSxDQUFDLGdCQUFnQixFQUFFO1lBQ2hDLEdBQUcsT0FBTztZQUNWLFFBQVEsRUFBRSxxQkFBcUIsQ0FBQyxzQkFBc0IsQ0FBQztTQUN4RCxDQUFBO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxRQUFRLEtBQUksQ0FBQztDQUNwQjtBQUVELGtCQUFrQixDQUFDLHlCQUF5QixDQUFDLENBQUE7QUFFN0MsZUFBZSx5QkFBeUIsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgQ29uZmlndXJhdGlvbiBmcm9tIFwiLi4vLi4vY29uZmlndXJhdGlvbi5qc1wiXG5pbXBvcnQgTG9nZ2VyIGZyb20gXCIuLi8uLi9sb2dnZXIuanNcIlxuaW1wb3J0IGJhc2VNZXRob2RzRm9yd2FyZCBmcm9tIFwiLi9iYXNlLW1ldGhvZHMtZm9yd2FyZC5qc1wiXG5pbXBvcnQgc2hhMjU2SGV4IGZyb20gXCIuLi8uLi91dGlscy9zaGEyNTYtaGV4LmpzXCJcblxuLyoqXG4gKiBPcGFxdWUgb3duZXJzaGlwIGhhbmRsZSBmb3IgYW4gaW4tcHJvY2VzcyB0ZXN0IHNoYXJlZCBjb25uZWN0aW9uIHJlZ2lzdHJhdGlvbi5cbiAqIEB0eXBlZGVmIHt7b3duZXI6IHN5bWJvbH19IFRlc3RTaGFyZWRDb25uZWN0aW9uUmVnaXN0cmF0aW9uXG4gKi9cblxuLyoqXG4gKiBDb25uZWN0aW9uQ2hlY2tvdXRPcHRpb25zIHR5cGUuXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBDb25uZWN0aW9uQ2hlY2tvdXRPcHRpb25zXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW25hbWVdIC0gSHVtYW4tcmVhZGFibGUgbmFtZSBmb3IgdGhlIGNoZWNrZWQtb3V0IGNvbm5lY3Rpb24uXG4gKi9cbi8qKlxuICogQ2FwdHVyZWRDb25uZWN0aW9uT3B0aW9ucyB0eXBlLlxuICogQHR5cGVkZWYge29iamVjdH0gQ2FwdHVyZWRDb25uZWN0aW9uT3B0aW9uc1xuICogQHByb3BlcnR5IHtpbXBvcnQoXCIuLi8uLi9jb25maWd1cmF0aW9uLXR5cGVzLmpzXCIpLkRhdGFiYXNlQ29uZmlndXJhdGlvblR5cGV9IGRhdGFiYXNlQ29uZmlndXJhdGlvbiAtIFJlc29sdmVkIHBoeXNpY2FsIGRhdGFiYXNlIGNvbmZpZ3VyYXRpb24gY2FwdHVyZWQgYnkgdGhlIGNhbGxlci5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbbmFtZV0gLSBIdW1hbi1yZWFkYWJsZSBuYW1lIGZvciB0aGUgY2hlY2tlZC1vdXQgY29ubmVjdGlvbi5cbiAqL1xuLyoqXG4gKiBEYXRhYmFzZVBvb2xQZW5kaW5nQ2hlY2tvdXREZWJ1Z1NuYXBzaG90IHR5cGUuXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBEYXRhYmFzZVBvb2xQZW5kaW5nQ2hlY2tvdXREZWJ1Z1NuYXBzaG90XG4gKiBAcHJvcGVydHkge3N0cmluZyB8IHVuZGVmaW5lZH0gY2hlY2tvdXROYW1lIC0gSHVtYW4tcmVhZGFibGUgY2hlY2tvdXQgbmFtZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBlbnF1ZXVlZEF0IC0gVGltZXN0YW1wIHdoZW4gdGhlIGNoZWNrb3V0IHN0YXJ0ZWQgd2FpdGluZy5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBpbmRleCAtIFBlbmRpbmcgY2hlY2tvdXQgcXVldWUgaW5kZXguXG4gKiBAcHJvcGVydHkge251bWJlciB8IG51bGx9IHJlbWFpbmluZ1RpbWVvdXRNcyAtIE1pbGxpc2Vjb25kcyBiZWZvcmUgdGhlIGNoZWNrb3V0IHRpbWVzIG91dCwgb3IgbnVsbCB3aGVuIGRpc2FibGVkLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHJldXNlS2V5IC0gRGF0YWJhc2UgY29uZmlndXJhdGlvbiByZXVzZSBrZXkgbmVlZGVkIGJ5IHRoZSBjaGVja291dC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyIHwgbnVsbH0gdGltZW91dEF0IC0gVGltZXN0YW1wIHdoZW4gdGhlIGNoZWNrb3V0IHdpbGwgdGltZSBvdXQsIG9yIG51bGwgd2hlbiBkaXNhYmxlZC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyIHwgbnVsbH0gdGltZW91dE1pbGxpcyAtIFRpbWVvdXQgY29uZmlndXJlZCBmb3IgdGhlIGNoZWNrb3V0LCBvciBudWxsIHdoZW4gZGlzYWJsZWQuXG4gKiBAcHJvcGVydHkge251bWJlcn0gd2FpdGluZ0Zvck1zIC0gTWlsbGlzZWNvbmRzIGFscmVhZHkgc3BlbnQgd2FpdGluZy5cbiAqL1xuLyoqXG4gKiBEYXRhYmFzZVBvb2xEZWJ1Z1NuYXBzaG90IHR5cGUuXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBEYXRhYmFzZVBvb2xEZWJ1Z1NuYXBzaG90XG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+Pn0gY29uZmlndXJhdGlvbiAtIFNhbml0aXplZCByZXNvbHZlZCBkYXRhYmFzZSBjb25maWd1cmF0aW9uLlxuICogQHByb3BlcnR5IHtBcnJheTxSZWNvcmQ8c3RyaW5nLCBSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPj4+fSBjb25uZWN0aW9ucyAtIExpdmUgY29ubmVjdGlvbiBzbmFwc2hvdHMuXG4gKiBAcHJvcGVydHkge251bWJlcn0gY29ubmVjdGlvbnNCZWluZ1NwYXduZWQgLSBOdW1iZXIgb2YgaW4tcHJvZ3Jlc3MgY29ubmVjdGlvbiBzcGF3bnMuXG4gKiBAcHJvcGVydHkge251bWJlcn0gaWRsZUNvdW50IC0gTnVtYmVyIG9mIGlkbGUgY29ubmVjdGlvbnMuXG4gKiBAcHJvcGVydHkge251bWJlcn0gW2lkbGVNYXRjaGluZ1BlbmRpbmdDaGVja291dENvdW50XSAtIElkbGUgY29ubmVjdGlvbnMgdGhhdCBjYW4gc2F0aXNmeSBhdCBsZWFzdCBvbmUgcGVuZGluZyBjaGVja291dC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBpZGVudGlmaWVyIC0gRGF0YWJhc2UgaWRlbnRpZmllci5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBpblVzZUNvdW50IC0gTnVtYmVyIG9mIGNoZWNrZWQtb3V0IGNvbm5lY3Rpb25zLlxuICogQHByb3BlcnR5IHtBcnJheTxEYXRhYmFzZVBvb2xQZW5kaW5nQ2hlY2tvdXREZWJ1Z1NuYXBzaG90Pn0gW3BlbmRpbmdDaGVja291dHNdIC0gV2FpdGluZyBjaGVja291dCBzbmFwc2hvdHMuXG4gKiBAcHJvcGVydHkge251bWJlcn0gcGVuZGluZ0NoZWNrb3V0Q291bnQgLSBOdW1iZXIgb2YgcXVldWVkIGNoZWNrb3V0IHJlcXVlc3RzLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbcGVuZGluZ0NoZWNrb3V0RHJhaW5BY3RpdmVdIC0gV2hldGhlciBhIGNoZWNrb3V0IGRyYWluIHBhc3MgaXMgYWN0aXZlLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbcGVuZGluZ0NoZWNrb3V0RHJhaW5SZXF1ZXN0ZWRdIC0gV2hldGhlciBhbm90aGVyIGNoZWNrb3V0IGRyYWluIHBhc3Mgd2FzIHJlcXVlc3RlZC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwb29sQ2xhc3MgLSBQb29sIGNsYXNzIG5hbWUuXG4gKiBAcHJvcGVydHkge3tjb25uZWN0aW9uQ3JlYXRpb25Db3VudDogbnVtYmVyLCBjb25uZWN0aW9uQ3JlYXRpb25GYWlsdXJlQ291bnQ6IG51bWJlciwgY29ubmVjdGlvbkNyZWF0aW9uTWF4TXM6IG51bWJlciwgY29ubmVjdGlvbkNyZWF0aW9uVG90YWxNczogbnVtYmVyLCBjaGVja291dFRpbWVvdXRDb3VudDogbnVtYmVyLCBjaGVja291dFdhaXRDb3VudDogbnVtYmVyLCBjaGVja291dFdhaXRNYXhNczogbnVtYmVyLCBjaGVja291dFdhaXRUb3RhbE1zOiBudW1iZXIsIGlkbGVSZWFwQ291bnQ6IG51bWJlciwgaWRsZVJlYXBEaXNwb3NhbENvdW50OiBudW1iZXIsIGlkbGVSZWFwRmFpbHVyZUNvdW50OiBudW1iZXIsIGlkbGVSZWFwTWF4TXM6IG51bWJlciwgaWRsZVJlYXBUb3RhbE1zOiBudW1iZXIsIHBlYWtMaXZlQ29ubmVjdGlvbnM6IG51bWJlcn19IFt0ZWxlbWV0cnldIC0gQ3VtdWxhdGl2ZSBwb29sIGxpZmVjeWNsZSB0ZWxlbWV0cnkuXG4gKi9cbmV4cG9ydCBjb25zdCBQT09MX0NPTkZJR1VSQVRJT05fS0VZID0gU3ltYm9sKFwidmVsb2Npb3VzUG9vbENvbmZpZ3VyYXRpb25LZXlcIilcblxuLyoqXG4gKiBTaGFyZWQuXG4gKiBAdHlwZSB7e2N1cnJlbnRQb29sOiBWZWxvY2lvdXNEYXRhYmFzZVBvb2xCYXNlIHwgbnVsbH19ICovXG5jb25zdCBzaGFyZWQgPSB7XG4gIGN1cnJlbnRQb29sOiBudWxsXG59XG5cbi8qKlxuICogUnVucyBzdGFibGUgc3RyaW5naWZ5LlxuICogQHBhcmFtIHtSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPn0gdmFsdWUgLSBWYWx1ZSB0byBzdHJpbmdpZnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIFN0YWJsZSBKU09OIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gc3RhYmxlU3RyaW5naWZ5KHZhbHVlKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiBgWyR7dmFsdWUubWFwKChlbnRyeSkgPT4gc3RhYmxlU3RyaW5naWZ5KGVudHJ5KSkuam9pbihcIixcIil9XWBcbiAgfVxuXG4gIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIpIHtcbiAgICBjb25zdCBlbnRyaWVzID0gT2JqZWN0XG4gICAgICAua2V5cygvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+Pn0gKi8gKHZhbHVlKSlcbiAgICAgIC5zb3J0KClcbiAgICAgIC5tYXAoKGtleSkgPT4gYCR7SlNPTi5zdHJpbmdpZnkoa2V5KX06JHtzdGFibGVTdHJpbmdpZnkoLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPj59ICovICh2YWx1ZSlba2V5XSl9YClcblxuICAgIHJldHVybiBgeyR7ZW50cmllcy5qb2luKFwiLFwiKX19YFxuICB9XG5cbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHZhbHVlKVxufVxuXG5jbGFzcyBWZWxvY2lvdXNEYXRhYmFzZVBvb2xCYXNlIHtcbiAgLyoqXG4gICAqIFdpdGhvdXQgY3VycmVudCBjb25uZWN0aW9uIGNvbnRleHQuXG4gICAqIEB0eXBlIHt1bmRlZmluZWQgfCAoKGNhbGxiYWNrOiAoKSA9PiBSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPikgPT4gUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4pfSAqL1xuICBfd2l0aG91dEN1cnJlbnRDb25uZWN0aW9uQ29udGV4dCA9IHVuZGVmaW5lZFxuXG4gIC8qKlxuICAgKiBSdW5zIGN1cnJlbnQuXG4gICAqIEByZXR1cm5zIHtWZWxvY2lvdXNEYXRhYmFzZVBvb2xCYXNlfSAtIFRoZSBjdXJyZW50LlxuICAgKi9cbiAgc3RhdGljIGN1cnJlbnQoKSB7XG4gICAgaWYgKCFzaGFyZWQuY3VycmVudFBvb2wpIHRocm93IG5ldyBFcnJvcihcIkEgZGF0YWJhc2UgcG9vbCBoYXNuJ3QgYmVlbiBzZXRcIilcblxuICAgIHJldHVybiBzaGFyZWQuY3VycmVudFBvb2xcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhcnMgYW55IGdsb2JhbCBjb25uZWN0aW9ucyBmb3IgdGhlIGdpdmVuIGNvbmZpZ3VyYXRpb24uXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vLi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0fSBjb25maWd1cmF0aW9uIC0gQ29uZmlndXJhdGlvbiBvd25pbmcgdGhlIHBvb2wuXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIHN0YXRpYyBjbGVhckdsb2JhbENvbm5lY3Rpb25zKGNvbmZpZ3VyYXRpb24pIHsgdm9pZCBjb25maWd1cmF0aW9uIH1cblxuICAvKipcbiAgICogUnVucyBjb25zdHJ1Y3Rvci5cbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBPcHRpb25zIG9iamVjdC5cbiAgICogQHBhcmFtIHtDb25maWd1cmF0aW9ufSBhcmdzLmNvbmZpZ3VyYXRpb24gLSBDb25maWd1cmF0aW9uIGluc3RhbmNlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy5pZGVudGlmaWVyIC0gSWRlbnRpZmllci5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHtjb25maWd1cmF0aW9uLCBpZGVudGlmaWVyfSkge1xuICAgIHRoaXMuY29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb24gfHwgQ29uZmlndXJhdGlvbi5jdXJyZW50KClcblxuICAgIGlmICghdGhpcy5jb25maWd1cmF0aW9uKSB0aHJvdyBuZXcgRXJyb3IoXCJObyBjb25maWd1cmF0aW9uIGdpdmVuXCIpXG4gICAgaWYgKCFpZGVudGlmaWVyKSB0aHJvdyBuZXcgRXJyb3IoXCJObyBpZGVudGlmaWVyIHdhcyBnaXZlblwiKVxuXG4gICAgdGhpcy5pZGVudGlmaWVyID0gaWRlbnRpZmllclxuICAgIHRoaXMubG9nZ2VyID0gbmV3IExvZ2dlcih0aGlzKVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgY2hlY2tpbi5cbiAgICogQGFic3RyYWN0XG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vZHJpdmVycy9iYXNlLmpzXCIpLmRlZmF1bHR9IF9jb25uZWN0aW9uIC0gQ29ubmVjdGlvbi5cbiAgICovXG4gIGNoZWNraW4oX2Nvbm5lY3Rpb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCInY2hlY2tpbicgbm90IGltcGxlbWVudGVkXCIpXG4gIH1cblxuICAvKipcbiAgICogUGVybWFuZW50bHkgZGlzY2FyZHMgYW4gYXR0ZW1wdC1vd25lZCBjaGVja2VkLW91dCBjb25uZWN0aW9uLlxuICAgKiBAYWJzdHJhY3RcbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9kcml2ZXJzL2Jhc2UuanNcIikuZGVmYXVsdH0gX2Nvbm5lY3Rpb24gLSBDb25uZWN0aW9uIHRoYXQgbXVzdCBub3QgcmV0dXJuIHRvIHRoZSBwb29sLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyBhZnRlciB0aGUgY29ubmVjdGlvbiBpcyBjbG9zZWQgYW5kIHJlbW92ZWQgZnJvbSBwb29sIG93bmVyc2hpcC5cbiAgICovXG4gIGRpc2NhcmQoX2Nvbm5lY3Rpb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCInZGlzY2FyZCcgbm90IGltcGxlbWVudGVkXCIpXG4gIH1cblxuICAvKipcbiAgICogUnVucyBjaGVja291dC5cbiAgICogQGFic3RyYWN0XG4gICAqIEBwYXJhbSB7Q29ubmVjdGlvbkNoZWNrb3V0T3B0aW9uc30gW19vcHRpb25zXSAtIENoZWNrb3V0IG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGltcG9ydChcIi4uL2RyaXZlcnMvYmFzZS5qc1wiKS5kZWZhdWx0Pn0gLSBSZXNvbHZlcyB3aXRoIHRoZSBjaGVja291dC5cbiAgICovXG4gIGNoZWNrb3V0KF9vcHRpb25zKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiJ2NoZWNrb3V0JyBub3QgaW1wbGVtZW50ZWRcIilcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGdldCBjdXJyZW50IGNvbm5lY3Rpb24uXG4gICAqIEBhYnN0cmFjdFxuICAgKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vZHJpdmVycy9iYXNlLmpzXCIpLmRlZmF1bHR9IC0gVGhlIGN1cnJlbnQgY29ubmVjdGlvbi5cbiAgICovXG4gIGdldEN1cnJlbnRDb25uZWN0aW9uKCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIidnZXRDdXJyZW50Q29ubmVjdGlvbicgbm90IGltcGxlbWVudGVkXCIpXG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY29ubmVjdGlvbiBwaW5uZWQgdG8gdGhlIGN1cnJlbnQgY29udGV4dCwgaWYgYW55LlxuICAgKiBEZWZhdWx0IGltcGxlbWVudGF0aW9uIGRlZmVycyB0byBgZ2V0Q3VycmVudENvbm5lY3Rpb25gLlxuICAgKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vZHJpdmVycy9iYXNlLmpzXCIpLmRlZmF1bHQgfCB1bmRlZmluZWR9IC0gVGhlIGN1cnJlbnQgY29udGV4dCBjb25uZWN0aW9uLlxuICAgKi9cbiAgZ2V0Q3VycmVudENvbnRleHRDb25uZWN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmdldEN1cnJlbnRDb25uZWN0aW9uKClcbiAgfVxuXG4gIC8qKlxuICAgKiBQaW5zIGEgY29ubmVjdGlvbiB0byBiZSByZXR1cm5lZCB0byBjYWxsZXJzIHRoYXQgcnVuIHdpdGhvdXQgYSBjb25uZWN0aW9uLWNvbnRleHRcbiAgICogcGluICh1c2VkIGJ5IHRoZSB0ZXN0IHJ1bm5lciB0byBzaGFyZSBvbmUgY29ubmVjdGlvbiB3aXRoIGluLXByb2Nlc3MgSFRUUCBoYW5kbGVycykuXG4gICAqIEJhc2UgcG9vbHMgdGhhdCBkbyBub3QgdHJhY2sgYXN5bmMgY29udGV4dCBpZ25vcmUgaXQ7IGFzeW5jLWNvbnRleHQgcG9vbHMgb3ZlcnJpZGUuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vZHJpdmVycy9iYXNlLmpzXCIpLmRlZmF1bHR9IF9jb25uZWN0aW9uIC0gU2hhcmVkIGNvbm5lY3Rpb24uXG4gICAqIEByZXR1cm5zIHtUZXN0U2hhcmVkQ29ubmVjdGlvblJlZ2lzdHJhdGlvbiB8IHVuZGVmaW5lZH0gLSBPcGFxdWUgcmVnaXN0cmF0aW9uIGhhbmRsZSB3aGVuIHN1cHBvcnRlZC5cbiAgICovXG4gIHNldFRlc3RTaGFyZWRDb25uZWN0aW9uKF9jb25uZWN0aW9uKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZFxuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgYSBwcm92aWRlciB0aGF0IHJlc29sdmVzIHRoZSBjb25uZWN0aW9uIGVsaWdpYmxlIGZvciBpbi1wcm9jZXNzIHRlc3QgcmVxdWVzdCBzaGFyaW5nLlxuICAgKiBCYXNlIHBvb2xzIHRoYXQgZG8gbm90IHRyYWNrIGFzeW5jIGNvbnRleHQgaWdub3JlIGl0OyBhc3luYy1jb250ZXh0IHBvb2xzIG92ZXJyaWRlLlxuICAgKiBAcGFyYW0geygpID0+IGltcG9ydChcIi4uL2RyaXZlcnMvYmFzZS5qc1wiKS5kZWZhdWx0IHwgdW5kZWZpbmVkfSBfcHJvdmlkZXIgLSBTaGFyZWQgY29ubmVjdGlvbiBwcm92aWRlci5cbiAgICogQHJldHVybnMge1Rlc3RTaGFyZWRDb25uZWN0aW9uUmVnaXN0cmF0aW9uIHwgdW5kZWZpbmVkfSAtIE9wYXF1ZSByZWdpc3RyYXRpb24gaGFuZGxlIHdoZW4gc3VwcG9ydGVkLlxuICAgKi9cbiAgc2V0VGVzdFNoYXJlZENvbm5lY3Rpb25Qcm92aWRlcihfcHJvdmlkZXIpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIGEgdGVzdCBzaGFyZWQgY29ubmVjdGlvbiBzZWxlY3RlZCBieSB0aGUgY2FsbGVyJ3MgbGl2ZSBhc3luYyBjb250ZXh0LlxuICAgKiBCYXNlIHBvb2xzIHRoYXQgZG8gbm90IHRyYWNrIGFzeW5jIGNvbnRleHQgaWdub3JlIGl0LlxuICAgKiBAcGFyYW0ge3ttYXRjaGVzOiAoKSA9PiBib29sZWFuLCBwcm92aWRlcjogKCkgPT4gaW1wb3J0KFwiLi4vZHJpdmVycy9iYXNlLmpzXCIpLmRlZmF1bHQgfCB1bmRlZmluZWR9fSBfYXJncyAtIENvbnRleHQgc2VsZWN0b3IgYW5kIGNvbm5lY3Rpb24gcHJvdmlkZXIuXG4gICAqIEByZXR1cm5zIHtUZXN0U2hhcmVkQ29ubmVjdGlvblJlZ2lzdHJhdGlvbiB8IHVuZGVmaW5lZH0gLSBPcGFxdWUgc2NvcGVkIHJlZ2lzdHJhdGlvbiBoYW5kbGUuXG4gICAqL1xuICByZWdpc3RlclRlc3RTaGFyZWRDb25uZWN0aW9uUHJvdmlkZXIoX2FyZ3MpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIGEgdGVzdCBjb25uZWN0aW9uIGZvciBvbmUgcmVzb2x2ZWQgcGh5c2ljYWwgZGF0YWJhc2UgY29uZmlndXJhdGlvbi5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9kcml2ZXJzL2Jhc2UuanNcIikuZGVmYXVsdH0gX2Nvbm5lY3Rpb24gLSBBdHRlbXB0LW93bmVkIGNvbm5lY3Rpb24uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBfcmV1c2VLZXkgLSBSZXNvbHZlZCBwaHlzaWNhbCBjb25maWd1cmF0aW9uIGlkZW50aXR5LlxuICAgKiBAcmV0dXJucyB7VGVzdFNoYXJlZENvbm5lY3Rpb25SZWdpc3RyYXRpb24gfCB1bmRlZmluZWR9IC0gT3BhcXVlIHJlZ2lzdHJhdGlvbiBoYW5kbGUgd2hlbiBzdXBwb3J0ZWQuXG4gICAqL1xuICBzZXRUZXN0U2hhcmVkQ29ubmVjdGlvbkZvckNvbmZpZ3VyYXRpb24oX2Nvbm5lY3Rpb24sIF9yZXVzZUtleSkge1xuICAgIHJldHVybiB1bmRlZmluZWRcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhcnMgdGhlIHNoYXJlZCBjb25uZWN0aW9uIG9yIHByb3ZpZGVyIHNldCBmb3IgaW4tcHJvY2VzcyB0ZXN0IHJlcXVlc3RzLiBOby1vcCBieSBkZWZhdWx0LlxuICAgKiBXaGVuIGEgcmVnaXN0cmF0aW9uIGlzIHByb3ZpZGVkLCBjbGVhcnMgb25seSBpZiBpdCBpcyBzdGlsbCB0aGUgYWN0aXZlIHJlZ2lzdHJhdGlvbi5cbiAgICogQHBhcmFtIHtUZXN0U2hhcmVkQ29ubmVjdGlvblJlZ2lzdHJhdGlvbn0gW19yZWdpc3RyYXRpb25dIC0gT3BhcXVlIGhhbmRsZSByZXR1cm5lZCB3aGVuIHRoZSBzaGFyZWQgdmFsdWUgd2FzIHNldC5cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBjbGVhclRlc3RTaGFyZWRDb25uZWN0aW9uKF9yZWdpc3RyYXRpb24pIHt9XG5cbiAgLyoqXG4gICAqIFJ1bnMgYSBjYWxsYmFjayBpbnNpZGUgdGhlIHRlc3Qgc2hhcmVkIGNvbm5lY3Rpb24ncyBjb250ZXh0LiBCYXNlIHBvb2xzIHRoYXQgZG8gbm90XG4gICAqIHRyYWNrIGFzeW5jIGNvbnRleHQganVzdCBydW4gdGhlIGNhbGxiYWNrIGFzLWlzOyBhc3luYy1jb250ZXh0IHBvb2xzIG92ZXJyaWRlLlxuICAgKiBAdGVtcGxhdGUgVFxuICAgKiBAcGFyYW0geygpID0+IFR9IGNhbGxiYWNrIC0gQ2FsbGJhY2sgdG8gcnVuLlxuICAgKiBAcmV0dXJucyB7VH0gLSBDYWxsYmFjayByZXN1bHQuXG4gICAqL1xuICBydW5XaXRoVGVzdFNoYXJlZENvbm5lY3Rpb24oY2FsbGJhY2spIHtcbiAgICByZXR1cm4gY2FsbGJhY2soKVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGNvbm5lY3Rpb24gcmVnaXN0ZXJlZCBmb3IgdGVzdC1vbmx5IGluLXByb2Nlc3Mgc2hhcmluZy5cbiAgICogQmFzZSBwb29scyBkbyBub3QgbmVlZCBhIHNlcGFyYXRlIHNoYXJlZCBjb25uZWN0aW9uLlxuICAgKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vZHJpdmVycy9iYXNlLmpzXCIpLmRlZmF1bHQgfCB1bmRlZmluZWR9IC0gU2hhcmVkIGNvbm5lY3Rpb24uXG4gICAqL1xuICB0ZXN0U2hhcmVkQ29ubmVjdGlvbigpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBjdXJyZW50IGNvbm5lY3Rpb24gaXMgcGlubmVkIHRvIGFuIGV4ZWN1dGlvbiBjb250ZXh0LlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBXaGV0aGVyIHRoZSBjdXJyZW50IGNvbm5lY3Rpb24gY2FuIGJlIHJldXNlZCBieSBuZXN0ZWQgY29kZS5cbiAgICovXG4gIGhhc0N1cnJlbnRDb25uZWN0aW9uQ29udGV4dCgpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgd2l0aG91dCBjdXJyZW50IGNvbm5lY3Rpb24gY29udGV4dC5cbiAgICogQHRlbXBsYXRlIFRcbiAgICogQHBhcmFtIHsoKSA9PiBUfSBjYWxsYmFjayAtIENhbGxiYWNrIHRvIHJ1biB3aXRob3V0ID8gY3VycmVudCBjb25uZWN0aW9uIGNvbnRleHQuXG4gICAqIEByZXR1cm5zIHtUfSAtIENhbGxiYWNrIHJlc3VsdC5cbiAgICovXG4gIHdpdGhvdXRDdXJyZW50Q29ubmVjdGlvbkNvbnRleHQoY2FsbGJhY2spIHtcbiAgICBpZiAodGhpcy5fd2l0aG91dEN1cnJlbnRDb25uZWN0aW9uQ29udGV4dCkgcmV0dXJuIC8qKiBAdHlwZSB7VH0gKi8gKHRoaXMuX3dpdGhvdXRDdXJyZW50Q29ubmVjdGlvbkNvbnRleHQoY2FsbGJhY2spKVxuXG4gICAgcmV0dXJuIGNhbGxiYWNrKClcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGdldCBjb25maWd1cmF0aW9uLlxuICAgKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vLi4vY29uZmlndXJhdGlvbi10eXBlcy5qc1wiKS5EYXRhYmFzZUNvbmZpZ3VyYXRpb25UeXBlfSAtIFJlc29sdmVkIGRhdGFiYXNlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBwb29sIGlkZW50aWZpZXIuXG4gICAqL1xuICBnZXRDb25maWd1cmF0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZ3VyYXRpb24ucmVzb2x2ZURhdGFiYXNlQ29uZmlndXJhdGlvbih0aGlzLmlkZW50aWZpZXIpXG4gIH1cblxuICAvKipcbiAgICogUnVucyBnZXQgY29uZmlndXJhdGlvbiByZXVzZSBrZXkuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vLi4vY29uZmlndXJhdGlvbi10eXBlcy5qc1wiKS5EYXRhYmFzZUNvbmZpZ3VyYXRpb25UeXBlfSBbZGF0YWJhc2VDb25maWd1cmF0aW9uXSAtIFJlc29sdmVkIGNvbmZpZ3VyYXRpb24gdG8gaWRlbnRpZnkuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gUmV1c2Uga2V5IGZvciB0aGUgY3VycmVudGx5IHJlc29sdmVkIGRhdGFiYXNlIGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICBnZXRDb25maWd1cmF0aW9uUmV1c2VLZXkoZGF0YWJhc2VDb25maWd1cmF0aW9uID0gdGhpcy5nZXRDb25maWd1cmF0aW9uKCkpIHtcbiAgICByZXR1cm4gc3RhYmxlU3RyaW5naWZ5KHtcbiAgICAgIGRhdGFiYXNlOiBkYXRhYmFzZUNvbmZpZ3VyYXRpb24uZGF0YWJhc2UsXG4gICAgICBob3N0OiBkYXRhYmFzZUNvbmZpZ3VyYXRpb24uaG9zdCxcbiAgICAgIG5hbWU6IGRhdGFiYXNlQ29uZmlndXJhdGlvbi5uYW1lLFxuICAgICAgcG9ydDogZGF0YWJhc2VDb25maWd1cmF0aW9uLnBvcnQsXG4gICAgICBzY2hlbWE6IGRhdGFiYXNlQ29uZmlndXJhdGlvbi5zY2hlbWEsXG4gICAgICBzY2hlbWFDYWNoZTogZGF0YWJhc2VDb25maWd1cmF0aW9uLnNjaGVtYUNhY2hlLFxuICAgICAgc3FsQ29uZmlnOiBkYXRhYmFzZUNvbmZpZ3VyYXRpb24uc3FsQ29uZmlnLFxuICAgICAgdHlwZTogZGF0YWJhc2VDb25maWd1cmF0aW9uLnR5cGUsXG4gICAgICB1c2VEYXRhYmFzZTogZGF0YWJhc2VDb25maWd1cmF0aW9uLnVzZURhdGFiYXNlLFxuICAgICAgdXNlcm5hbWU6IGRhdGFiYXNlQ29uZmlndXJhdGlvbi51c2VybmFtZVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogUnVucyBjb25uZWN0aW9uIG1hdGNoZXMgY3VycmVudCBjb25maWd1cmF0aW9uLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2RyaXZlcnMvYmFzZS5qc1wiKS5kZWZhdWx0fSBjb25uZWN0aW9uIC0gQ29ubmVjdGlvbi5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IC0gV2hldGhlciBjb25uZWN0aW9uIG1hdGNoZXMgY3VycmVudCByZXNvbHZlZCBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgY29ubmVjdGlvbk1hdGNoZXNDdXJyZW50Q29uZmlndXJhdGlvbihjb25uZWN0aW9uKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q29ubmVjdGlvbkNvbmZpZ3VyYXRpb25SZXVzZUtleShjb25uZWN0aW9uKSA9PT0gdGhpcy5nZXRDb25maWd1cmF0aW9uUmV1c2VLZXkoKVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHJlc29sdmVkIGRhdGFiYXNlIGNvbmZpZ3VyYXRpb24ga2V5IHN0YW1wZWQgb24gYSBjb25uZWN0aW9uIGF0IGNoZWNrb3V0LlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2RyaXZlcnMvYmFzZS5qc1wiKS5kZWZhdWx0fSBjb25uZWN0aW9uIC0gQ2hlY2tlZC1vdXQgY29ubmVjdGlvbi5cbiAgICogQHJldHVybnMge3N0cmluZ30gLSBDb25uZWN0aW9uIGNvbmZpZ3VyYXRpb24gcmV1c2Uga2V5LlxuICAgKi9cbiAgZ2V0Q29ubmVjdGlvbkNvbmZpZ3VyYXRpb25SZXVzZUtleShjb25uZWN0aW9uKSB7XG4gICAgY29uc3QgY29ubmVjdGlvbldpdGhQb29sS2V5ID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9kcml2ZXJzL2Jhc2UuanNcIikuZGVmYXVsdCAmIHtbUE9PTF9DT05GSUdVUkFUSU9OX0tFWV0/OiBzdHJpbmd9fSAqLyAoY29ubmVjdGlvbilcbiAgICBjb25zdCByZXVzZUtleSA9IGNvbm5lY3Rpb25XaXRoUG9vbEtleVtQT09MX0NPTkZJR1VSQVRJT05fS0VZXVxuXG4gICAgaWYgKCFyZXVzZUtleSkgdGhyb3cgbmV3IEVycm9yKFwiRGF0YWJhc2UgY29ubmVjdGlvbiBpcyBtaXNzaW5nIGl0cyBjb25maWd1cmF0aW9uIHJldXNlIGtleVwiKVxuXG4gICAgcmV0dXJuIHJldXNlS2V5XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXJzIHNjaGVtYSBtZXRhZGF0YSBjYWNoZWQgYnkgdGhpcyBwb29sJ3MgY3VycmVudCBjb25uZWN0aW9uLlxuICAgKiBQb29scyB0aGF0IGtlZXAgbXVsdGlwbGUgY29ubmVjdGlvbnMgYWxpdmUgc2hvdWxkIG92ZXJyaWRlIHRoaXMgdG8gY2xlYXIgZXZlcnkgbGl2ZSBjb25uZWN0aW9uLlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICBjbGVhclNjaGVtYUNhY2hlKCkge1xuICAgIHRoaXMuX2NsZWFyQ29ubmVjdGlvblNjaGVtYUNhY2hlKHRoaXMuZ2V0Q3VycmVudENvbm5lY3Rpb24oKSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGNsZWFyIGNvbm5lY3Rpb24gc2NoZW1hIGNhY2hlLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2RyaXZlcnMvYmFzZS5qc1wiKS5kZWZhdWx0fSBjb25uZWN0aW9uIC0gQ29ubmVjdGlvbiB3aG9zZSBsb2NhbCBzY2hlbWEgY2FjaGUgc2hvdWxkIGJlIGNsZWFyZWQuXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIF9jbGVhckNvbm5lY3Rpb25TY2hlbWFDYWNoZShjb25uZWN0aW9uKSB7XG4gICAgY29ubmVjdGlvbi5fY2xlYXJMb2NhbFNjaGVtYUNhY2hlKClcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHByaW1hcnkga2V5IHR5cGUuXG4gICAqIEBhYnN0cmFjdFxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIFRoZSBwcmltYXJ5IGtleSB0eXBlLlxuICAgKi9cbiAgcHJpbWFyeUtleVR5cGUoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiJ3ByaW1hcnlLZXlUeXBlJyBub3QgaW1wbGVtZW50ZWRcIilcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHNldCBjdXJyZW50LlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICBzZXRDdXJyZW50KCkge1xuICAgIHNoYXJlZC5jdXJyZW50UG9vbCA9IHRoaXNcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHNldCBkcml2ZXIgY2xhc3MuXG4gICAqIEBwYXJhbSB7dHlwZW9mIGltcG9ydChcIi4uL2RyaXZlcnMvYmFzZS5qc1wiKS5kZWZhdWx0fSBkcml2ZXJDbGFzcyAtIERyaXZlciBjbGFzcy5cbiAgICovXG4gIHNldERyaXZlckNsYXNzKGRyaXZlckNsYXNzKSB7XG4gICAgdGhpcy5kcml2ZXJDbGFzcyA9IGRyaXZlckNsYXNzXG4gIH1cblxuICAvKipcbiAgICogUnVucyBzcGF3biBjb25uZWN0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxpbXBvcnQoXCIuLi9kcml2ZXJzL2Jhc2UuanNcIikuZGVmYXVsdD59IC0gUmVzb2x2ZXMgd2l0aCB0aGUgc3Bhd24gY29ubmVjdGlvbi5cbiAgICovXG4gIGFzeW5jIHNwYXduQ29ubmVjdGlvbigpIHtcbiAgICBjb25zdCBkYXRhYmFzZUNvbmZpZyA9IHRoaXMuZ2V0Q29uZmlndXJhdGlvbigpXG5cbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcInNwYXduQ29ubmVjdGlvblwiLCB7aWRlbnRpZmllcjogdGhpcy5pZGVudGlmaWVyLCBkYXRhYmFzZUNvbmZpZ30pXG5cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5zcGF3bkNvbm5lY3Rpb25Gb3JDb25maWd1cmF0aW9uKGRhdGFiYXNlQ29uZmlnKVxuICB9XG5cbiAgLyoqXG4gICAqIFNwYXducyBhIGNvbm5lY3Rpb24gZm9yIGFuIGFscmVhZHktcmVzb2x2ZWQgcGh5c2ljYWwgZGF0YWJhc2UgY29uZmlndXJhdGlvbi5cbiAgICogVGhlIHJldXNlIGlkZW50aXR5IGlzIGRlcml2ZWQgb25seSBmcm9tIHRoYXQgY2FwdHVyZWQgY29uZmlndXJhdGlvbi5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi8uLi9jb25maWd1cmF0aW9uLXR5cGVzLmpzXCIpLkRhdGFiYXNlQ29uZmlndXJhdGlvblR5cGV9IGRhdGFiYXNlQ29uZmlndXJhdGlvbiAtIENhcHR1cmVkIHJlc29sdmVkIGNvbmZpZ3VyYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGltcG9ydChcIi4uL2RyaXZlcnMvYmFzZS5qc1wiKS5kZWZhdWx0Pn0gLSBDb25uZWN0ZWQgYW5kIGlkZW50aXR5LXN0YW1wZWQgZHJpdmVyLlxuICAgKi9cbiAgYXN5bmMgc3Bhd25Db25uZWN0aW9uRm9yQ29uZmlndXJhdGlvbihkYXRhYmFzZUNvbmZpZ3VyYXRpb24pIHtcbiAgICBjb25zdCByZXVzZUtleSA9IHRoaXMuZ2V0Q29uZmlndXJhdGlvblJldXNlS2V5KGRhdGFiYXNlQ29uZmlndXJhdGlvbilcbiAgICBjb25zdCBjb25uZWN0aW9uID0gYXdhaXQgdGhpcy5zcGF3bkNvbm5lY3Rpb25XaXRoQ29uZmlndXJhdGlvbihkYXRhYmFzZUNvbmZpZ3VyYXRpb24sIHJldXNlS2V5KVxuXG4gICAgdGhpcy5zdGFtcENvbm5lY3Rpb25Gb3JDb25maWd1cmF0aW9uUmV1c2VLZXkoY29ubmVjdGlvbiwgcmV1c2VLZXkpXG5cbiAgICByZXR1cm4gY29ubmVjdGlvblxuICB9XG5cbiAgLyoqXG4gICAqIFN0YW1wcyBhIGNvbm5lY3RlZCBkcml2ZXIgd2l0aCBpdHMgcG9vbCByZXVzZSBpZGVudGl0eSBhbmQgZGlhZ25vc3RpYy1zYWZlIG9wYXF1ZSBpZGVudGl0eS5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9kcml2ZXJzL2Jhc2UuanNcIikuZGVmYXVsdH0gY29ubmVjdGlvbiAtIENvbm5lY3RlZCBkcml2ZXIuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZXVzZUtleSAtIEV4YWN0IHBoeXNpY2FsIGNvbmZpZ3VyYXRpb24gcmV1c2Uga2V5IGNhcHR1cmVkIGZvciB0aGlzIHNwYXduLlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIHN0YW1wQ29ubmVjdGlvbkZvckNvbmZpZ3VyYXRpb25SZXVzZUtleShjb25uZWN0aW9uLCByZXVzZUtleSkge1xuICAgIGNvbnN0IGNvbm5lY3Rpb25XaXRoUG9vbEtleSA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vZHJpdmVycy9iYXNlLmpzXCIpLmRlZmF1bHQgJiB7W1BPT0xfQ09ORklHVVJBVElPTl9LRVldPzogc3RyaW5nfX0gKi8gKGNvbm5lY3Rpb24pXG4gICAgY29uc3QgZGF0YWJhc2VJZGVudGl0eUZpbmdlcnByaW50ID0gYHNoYTI1Njoke3NoYTI1NkhleChgZGF0YWJhc2UtY29uZmlndXJhdGlvbi1yZXVzZTp2MVxcMCR7cmV1c2VLZXl9YCl9YFxuXG4gICAgY29ubmVjdGlvbldpdGhQb29sS2V5W1BPT0xfQ09ORklHVVJBVElPTl9LRVldID0gcmV1c2VLZXlcbiAgICBjb25uZWN0aW9uLnNldFBvb2xEaWFnbm9zdGljSWRlbnRpdHkoe1xuICAgICAgZGF0YWJhc2VJZGVudGlmaWVyOiB0aGlzLmlkZW50aWZpZXIsXG4gICAgICBkYXRhYmFzZUlkZW50aXR5RmluZ2VycHJpbnRcbiAgICB9KVxuICAgIGNvbm5lY3Rpb24uc2V0U2NoZW1hQ2FjaGVJbnZhbGlkYXRvcigoKSA9PiB7XG4gICAgICB0aGlzLmNsZWFyU2NoZW1hQ2FjaGUoKVxuICAgICAgdGhpcy5jb25maWd1cmF0aW9uLmNsZWFyU2NoZW1hQ2FjaGVzRm9yUmV1c2VLZXkocmV1c2VLZXkpXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHNwYXduIGNvbm5lY3Rpb24gd2l0aCBjb25maWd1cmF0aW9uLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uLy4uL2NvbmZpZ3VyYXRpb24tdHlwZXMuanNcIikuRGF0YWJhc2VDb25maWd1cmF0aW9uVHlwZX0gY29uZmlnIC0gQ29uZmlndXJhdGlvbiBvYmplY3QuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcmV1c2VLZXldIC0gRXhhY3QgcmVzb2x2ZWQgcGh5c2ljYWwgaWRlbnRpdHkuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGltcG9ydChcIi4uL2RyaXZlcnMvYmFzZS5qc1wiKS5kZWZhdWx0Pn0gLSBSZXNvbHZlcyB3aXRoIHRoZSBzcGF3biBjb25uZWN0aW9uIHdpdGggY29uZmlndXJhdGlvbi5cbiAgICovXG4gIGFzeW5jIHNwYXduQ29ubmVjdGlvbldpdGhDb25maWd1cmF0aW9uKGNvbmZpZywgcmV1c2VLZXkpIHtcbiAgICBjb25zdCBEcml2ZXJDbGFzcyA9IGNvbmZpZy5kcml2ZXIgfHwgdGhpcy5kcml2ZXJDbGFzc1xuXG4gICAgaWYgKCFEcml2ZXJDbGFzcykgdGhyb3cgbmV3IEVycm9yKFwiTm8gZHJpdmVyIGNsYXNzIHNldCBpbiBkYXRhYmFzZSBwb29sIG9yIGluIGdpdmVuIGNvbmZpZ1wiKVxuXG4gICAgY29uc3Qgc2hhcmVkQ29ubmVjdGlvbiA9IGF3YWl0IHRoaXMuY29uZmlndXJhdGlvbi5nZXRFbnZpcm9ubWVudEhhbmRsZXIoKS5jcmVhdGVUZXN0U2hhcmVkVHJhbnNhY3Rpb25Db25uZWN0aW9uKHtcbiAgICAgIERyaXZlckNsYXNzLFxuICAgICAgY29uZmlnLFxuICAgICAgY29uZmlndXJhdGlvbjogdGhpcy5jb25maWd1cmF0aW9uLFxuICAgICAgZGF0YWJhc2VJZGVudGlmaWVyOiB0aGlzLmlkZW50aWZpZXIsXG4gICAgICByZXVzZUtleVxuICAgIH0pXG4gICAgY29uc3QgY29ubmVjdGlvbiA9IHNoYXJlZENvbm5lY3Rpb24gfHwgbmV3IERyaXZlckNsYXNzKGNvbmZpZywgdGhpcy5jb25maWd1cmF0aW9uKVxuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGNvbm5lY3Rpb24uY29ubmVjdCgpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGF3YWl0IHRoaXMuY2xvc2VDb25uZWN0aW9uQWZ0ZXJGYWlsZWRDb25uZWN0KGNvbm5lY3Rpb24pXG4gICAgICB0aHJvdyBlcnJvclxuICAgIH1cblxuICAgIHJldHVybiBjb25uZWN0aW9uXG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIG91dCBhIGNvbm5lY3Rpb24gZm9yIGFuIGFscmVhZHktcmVzb2x2ZWQgcGh5c2ljYWwgY29uZmlndXJhdGlvbi5cbiAgICogTXVsdGktY29uZmlndXJhdGlvbiBwb29scyBvdmVycmlkZSB0aGlzIGZvciBleHBsaWNpdCB0ZW5hbnQgcmVnaXN0cmF0aW9ucy5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi8uLi9jb25maWd1cmF0aW9uLXR5cGVzLmpzXCIpLkRhdGFiYXNlQ29uZmlndXJhdGlvblR5cGV9IF9kYXRhYmFzZUNvbmZpZ3VyYXRpb24gLSBDYXB0dXJlZCBjb25maWd1cmF0aW9uLlxuICAgKiBAcGFyYW0ge0Nvbm5lY3Rpb25DaGVja291dE9wdGlvbnN9IFtfb3B0aW9uc10gLSBDaGVja291dCBvcHRpb25zLlxuICAgKiBAcGFyYW0ge3tyZXRhaW46IGJvb2xlYW59fSBbX2FyZ3NdIC0gUG9vbC1zcGVjaWZpYyByZXRlbnRpb24gYmVoYXZpb3IuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGltcG9ydChcIi4uL2RyaXZlcnMvYmFzZS5qc1wiKS5kZWZhdWx0Pn0gLSBDaGVja2VkLW91dCBjb25uZWN0aW9uLlxuICAgKi9cbiAgYXN5bmMgY2hlY2tvdXRGb3JDb25maWd1cmF0aW9uKF9kYXRhYmFzZUNvbmZpZ3VyYXRpb24sIF9vcHRpb25zLCBfYXJncykge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkRhdGFiYXNlIHBvb2wgZG9lcyBub3Qgc3VwcG9ydCBjYXB0dXJlZCBjb25maWd1cmF0aW9uIGNoZWNrb3V0XCIpXG4gIH1cblxuICAvKipcbiAgICogUnVucyBjbG9zZSBjb25uZWN0aW9uIGFmdGVyIGZhaWxlZCBjb25uZWN0LlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2RyaXZlcnMvYmFzZS5qc1wiKS5kZWZhdWx0fSBjb25uZWN0aW9uIC0gQ29ubmVjdGlvbiB0byBjbG9zZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiBjbGVhbnVwIGhhcyBiZWVuIGF0dGVtcHRlZC5cbiAgICovXG4gIGFzeW5jIGNsb3NlQ29ubmVjdGlvbkFmdGVyRmFpbGVkQ29ubmVjdChjb25uZWN0aW9uKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGNvbm5lY3Rpb24uY2xvc2UoKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLmxvZ2dlci53YXJuKFwiRmFpbGVkIHRvIGNsb3NlIGRhdGFiYXNlIGNvbm5lY3Rpb24gYWZ0ZXIgY29ubmVjdCBmYWlsZWRcIiwge2Vycm9yfSlcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUnVucyB3aXRoIGNvbm5lY3Rpb24uXG4gICAqIEB0ZW1wbGF0ZSBUXG4gICAqIEBhYnN0cmFjdFxuICAgKiBAcGFyYW0ge0Nvbm5lY3Rpb25DaGVja291dE9wdGlvbnMgfCAoKGFyZzogaW1wb3J0KFwiLi4vZHJpdmVycy9iYXNlLmpzXCIpLmRlZmF1bHQpID0+IFByb21pc2U8VD4pfSBfb3B0aW9uc09yQ2FsbGJhY2sgLSBDaGVja291dCBvcHRpb25zIG9yIGNhbGxiYWNrIGZ1bmN0aW9uLlxuICAgKiBAcGFyYW0geyhhcmc6IGltcG9ydChcIi4uL2RyaXZlcnMvYmFzZS5qc1wiKS5kZWZhdWx0KSA9PiBQcm9taXNlPFQ+fSBbX2NhbGxiYWNrXSAtIENhbGxiYWNrIGZ1bmN0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxUPn0gLSBSZXNvbHZlcyB3aXRoIHRoZSBjYWxsYmFjayByZXN1bHQuXG4gICAqL1xuICB3aXRoQ29ubmVjdGlvbihfb3B0aW9uc09yQ2FsbGJhY2ssIF9jYWxsYmFjaykge1xuICAgIHRocm93IG5ldyBFcnJvcihcIid3aXRoQ29ubmVjdGlvbicgbm90IGltcGxlbWVudGVkXCIpXG4gIH1cblxuICAvKipcbiAgICogUnVucyBhbiBvcGVyYXRpb24gb24gYSBmcmVzaGx5IGNoZWNrZWQtb3V0IGNvbm5lY3Rpb24uXG4gICAqIEB0ZW1wbGF0ZSBUXG4gICAqIEBwYXJhbSB7Q29ubmVjdGlvbkNoZWNrb3V0T3B0aW9uc30gb3B0aW9ucyAtIENoZWNrb3V0IG9wdGlvbnMuXG4gICAqIEBwYXJhbSB7KGNvbm5lY3Rpb246IGltcG9ydChcIi4uL2RyaXZlcnMvYmFzZS5qc1wiKS5kZWZhdWx0LCBvd25lcjogc3ltYm9sKSA9PiBQcm9taXNlPFQ+fSBjYWxsYmFjayAtIE9wZXJhdGlvbiBjYWxsYmFjay5cbiAgICogQHJldHVybnMge1Byb21pc2U8VD59IC0gUmVzb2x2ZXMgd2l0aCB0aGUgY2FsbGJhY2sgcmVzdWx0LlxuICAgKi9cbiAgYXN5bmMgd2l0aE9wZXJhdGlvbkNvbm5lY3Rpb24ob3B0aW9ucywgY2FsbGJhY2spIHtcbiAgICBjb25zdCBvd25lciA9IFN5bWJvbChcImRhdGFiYXNlLW9wZXJhdGlvbi1vd25lclwiKVxuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMud2l0aENvbm5lY3Rpb24ob3B0aW9ucywgYXN5bmMgKGNvbm5lY3Rpb24pID0+IGF3YWl0IGNhbGxiYWNrKGNvbm5lY3Rpb24sIG93bmVyKSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHdvcmsgdGhyb3VnaCBhIHBvb2wtb3duZWQgY2hlY2tvdXQgZm9yIGFuIGltbXV0YWJsZSwgYWxyZWFkeS1yZXNvbHZlZFxuICAgKiBwaHlzaWNhbCBjb25maWd1cmF0aW9uLiBDb25jcmV0ZSBwb29scyBtdXN0IHByZXNlcnZlIHRoZWlyIGNhcGFjaXR5LFxuICAgKiB0aW1lb3V0LCBxdWV1ZSwgZGVidWcsIGFuZCBjbG9zZUFsbCBvd25lcnNoaXAgb24gdGhpcyBwYXRoLlxuICAgKiBAdGVtcGxhdGUgVFxuICAgKiBAcGFyYW0ge0NhcHR1cmVkQ29ubmVjdGlvbk9wdGlvbnN9IG9wdGlvbnMgLSBDYXB0dXJlZCBjaGVja291dCBvcHRpb25zLlxuICAgKiBAcGFyYW0geyhjb25uZWN0aW9uOiBpbXBvcnQoXCIuLi9kcml2ZXJzL2Jhc2UuanNcIikuZGVmYXVsdCwgb3duZXI6IHN5bWJvbCkgPT4gUHJvbWlzZTxUPn0gY2FsbGJhY2sgLSBPcGVyYXRpb24gY2FsbGJhY2suXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFQ+fSAtIENhbGxiYWNrIHJlc3VsdC5cbiAgICovXG4gIGFzeW5jIHdpdGhDYXB0dXJlZE9wZXJhdGlvbkNvbm5lY3Rpb24ob3B0aW9ucywgY2FsbGJhY2spIHtcbiAgICB2b2lkIG9wdGlvbnNcbiAgICB2b2lkIGNhbGxiYWNrXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiJ3dpdGhDYXB0dXJlZE9wZXJhdGlvbkNvbm5lY3Rpb24nIG5vdCBpbXBsZW1lbnRlZFwiKVxuICB9XG5cbiAgYXN5bmMgb3BlbkNhcHR1cmVkQ29ubmVjdGlvbigvKiogQHR5cGUge2ltcG9ydChcIi4uLy4uL2NvbmZpZ3VyYXRpb24tdHlwZXMuanNcIikuRGF0YWJhc2VDb25maWd1cmF0aW9uVHlwZX0gKi8gX2RhdGFiYXNlQ29uZmlndXJhdGlvbikgeyB0aHJvdyBuZXcgRXJyb3IoXCJGcm9udGVuZCB0ZW5hbnQgU1FMaXRlIGxpZmVjeWNsZSByZXF1aXJlcyBhIGtleWVkIHNpbmdsZS1jb25uZWN0aW9uIHBvb2xcIikgfVxuICBhc3luYyBmbHVzaENhcHR1cmVkQ29ubmVjdGlvbigvKiogQHR5cGUge2ltcG9ydChcIi4uLy4uL2NvbmZpZ3VyYXRpb24tdHlwZXMuanNcIikuRGF0YWJhc2VDb25maWd1cmF0aW9uVHlwZX0gKi8gX2RhdGFiYXNlQ29uZmlndXJhdGlvbikgeyB0aHJvdyBuZXcgRXJyb3IoXCJGcm9udGVuZCB0ZW5hbnQgU1FMaXRlIGxpZmVjeWNsZSByZXF1aXJlcyBhIGtleWVkIHNpbmdsZS1jb25uZWN0aW9uIHBvb2xcIikgfVxuICBhc3luYyBjbG9zZUNhcHR1cmVkQ29ubmVjdGlvbigvKiogQHR5cGUge2ltcG9ydChcIi4uLy4uL2NvbmZpZ3VyYXRpb24tdHlwZXMuanNcIikuRGF0YWJhc2VDb25maWd1cmF0aW9uVHlwZX0gKi8gX2RhdGFiYXNlQ29uZmlndXJhdGlvbikgeyB0aHJvdyBuZXcgRXJyb3IoXCJGcm9udGVuZCB0ZW5hbnQgU1FMaXRlIGxpZmVjeWNsZSByZXF1aXJlcyBhIGtleWVkIHNpbmdsZS1jb25uZWN0aW9uIHBvb2xcIikgfVxuICBhc3luYyBkZWxldGVDYXB0dXJlZERhdGFiYXNlKC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vLi4vY29uZmlndXJhdGlvbi10eXBlcy5qc1wiKS5EYXRhYmFzZUNvbmZpZ3VyYXRpb25UeXBlfSAqLyBfZGF0YWJhc2VDb25maWd1cmF0aW9uKSB7IHRocm93IG5ldyBFcnJvcihcIkZyb250ZW5kIHRlbmFudCBTUUxpdGUgbGlmZWN5Y2xlIHJlcXVpcmVzIGEga2V5ZWQgc2luZ2xlLWNvbm5lY3Rpb24gcG9vbFwiKSB9XG4gIGNhcHR1cmVkQ29ubmVjdGlvbkluVXNlKC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vLi4vY29uZmlndXJhdGlvbi10eXBlcy5qc1wiKS5EYXRhYmFzZUNvbmZpZ3VyYXRpb25UeXBlfSAqLyBfZGF0YWJhc2VDb25maWd1cmF0aW9uKSB7IHJldHVybiBmYWxzZSB9XG4gIGNhcHR1cmVkQ29ubmVjdGlvbkhhc1BlbmRpbmdXcml0ZXMoLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi8uLi9jb25maWd1cmF0aW9uLXR5cGVzLmpzXCIpLkRhdGFiYXNlQ29uZmlndXJhdGlvblR5cGV9ICovIF9kYXRhYmFzZUNvbmZpZ3VyYXRpb24pIHsgcmV0dXJuIGZhbHNlIH1cblxuICAvKipcbiAgICogRW5zdXJlcyBhIHJldXNhYmxlIGNvbm5lY3Rpb24gZXhpc3RzIGZvciBjb250ZXh0cyB3aGVyZSBBc3luY0xvY2FsU3RvcmFnZSBpc24ndCBzZXQuXG4gICAqIERlZmF1bHQgaW1wbGVtZW50YXRpb24ganVzdCBjaGVja3Mgb3V0IGEgY29ubmVjdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8aW1wb3J0KFwiLi4vZHJpdmVycy9iYXNlLmpzXCIpLmRlZmF1bHQ+fSAtIFJlc29sdmVzIHdpdGggdGhlIGdsb2JhbCBjb25uZWN0aW9uLlxuICAgKi9cbiAgYXN5bmMgZW5zdXJlR2xvYmFsQ29ubmVjdGlvbigpIHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jaGVja291dCgpXG4gIH1cblxuICAvKipcbiAgICogUnVucyBnZXQgZGVidWcgc25hcHNob3QuXG4gICAqIEByZXR1cm5zIHtEYXRhYmFzZVBvb2xEZWJ1Z1NuYXBzaG90fSAtIERpYWdub3N0aWMgc25hcHNob3QgZm9yIHRoaXMgcG9vbC5cbiAgICovXG4gIGdldERlYnVnU25hcHNob3QoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbmZpZ3VyYXRpb246IHRoaXMuZGVidWdDb25maWd1cmF0aW9uU25hcHNob3QoKSxcbiAgICAgIGNvbm5lY3Rpb25zOiBbXSxcbiAgICAgIGNvbm5lY3Rpb25zQmVpbmdTcGF3bmVkOiAwLFxuICAgICAgaWRlbnRpZmllcjogdGhpcy5pZGVudGlmaWVyLFxuICAgICAgaWRsZUNvdW50OiAwLFxuICAgICAgaW5Vc2VDb3VudDogMCxcbiAgICAgIHBlbmRpbmdDaGVja291dENvdW50OiAwLFxuICAgICAgcG9vbENsYXNzOiB0aGlzLmNvbnN0cnVjdG9yLm5hbWVcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUnVucyBkZWJ1ZyBjb25maWd1cmF0aW9uIHNuYXBzaG90LlxuICAgKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZywgUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+fSAtIFNhbml0aXplZCByZXNvbHZlZCBkYXRhYmFzZSBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgZGVidWdDb25maWd1cmF0aW9uU25hcHNob3QoKSB7XG4gICAgY29uc3QgZGF0YWJhc2VDb25maWcgPSB0aGlzLmdldENvbmZpZ3VyYXRpb24oKVxuICAgIGNvbnN0IHBvb2xDb25maWcgPSBkYXRhYmFzZUNvbmZpZy5wb29sXG5cbiAgICByZXR1cm4ge1xuICAgICAgZGF0YWJhc2U6IGRhdGFiYXNlQ29uZmlnLmRhdGFiYXNlLFxuICAgICAgZHJpdmVyOiBkYXRhYmFzZUNvbmZpZy5kcml2ZXI/Lm5hbWUsXG4gICAgICBob3N0OiBkYXRhYmFzZUNvbmZpZy5ob3N0LFxuICAgICAgbWlncmF0aW9uczogZGF0YWJhc2VDb25maWcubWlncmF0aW9ucyxcbiAgICAgIG5hbWU6IGRhdGFiYXNlQ29uZmlnLm5hbWUsXG4gICAgICBwb29sOiBwb29sQ29uZmlnID8ge2lkbGVUaW1lb3V0TWlsbGlzOiBwb29sQ29uZmlnLmlkbGVUaW1lb3V0TWlsbGlzLCBtYXg6IHBvb2xDb25maWcubWF4fSA6IHVuZGVmaW5lZCxcbiAgICAgIHBvcnQ6IGRhdGFiYXNlQ29uZmlnLnBvcnQsXG4gICAgICBzY2hlbWE6IGRhdGFiYXNlQ29uZmlnLnNjaGVtYSxcbiAgICAgIHR5cGU6IGRhdGFiYXNlQ29uZmlnLnR5cGUsXG4gICAgICB1c2VEYXRhYmFzZTogZGF0YWJhc2VDb25maWcudXNlRGF0YWJhc2UsXG4gICAgICB1c2VybmFtZTogZGF0YWJhc2VDb25maWcudXNlcm5hbWVcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUnVucyBkZWJ1ZyBjb25uZWN0aW9uIHNuYXBzaG90LlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2RyaXZlcnMvYmFzZS5qc1wiKS5kZWZhdWx0fSBjb25uZWN0aW9uIC0gRGF0YWJhc2UgY29ubmVjdGlvbi5cbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPj59IGRldGFpbHMgLSBFeHRyYSBkaWFnbm9zdGljIGZpZWxkcy5cbiAgICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+Pn0gLSBDb25uZWN0aW9uIGRpYWdub3N0aWMgc25hcHNob3QuXG4gICAqL1xuICBkZWJ1Z0Nvbm5lY3Rpb25TbmFwc2hvdChjb25uZWN0aW9uLCBkZXRhaWxzID0ge30pIHtcbiAgICBjb25zdCBjb25uZWN0aW9uV2l0aFBvb2xLZXkgPSAvKiogQHR5cGUge2ltcG9ydChcIi4uL2RyaXZlcnMvYmFzZS5qc1wiKS5kZWZhdWx0ICYge1tQT09MX0NPTkZJR1VSQVRJT05fS0VZXT86IHN0cmluZ319ICovIChjb25uZWN0aW9uKVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmNvbm5lY3Rpb24uZ2V0RGVidWdTbmFwc2hvdCgpLFxuICAgICAgLi4uZGV0YWlscyxcbiAgICAgIHJldXNlS2V5OiBjb25uZWN0aW9uV2l0aFBvb2xLZXlbUE9PTF9DT05GSUdVUkFUSU9OX0tFWV1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2xvc2VzIGFsbCBjb25uZWN0aW9ucyBmb3IgdGhpcyBwb29sLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIGNvbXBsZXRlLlxuICAgKi9cbiAgYXN5bmMgY2xvc2VBbGwoKSB7fVxufVxuXG5iYXNlTWV0aG9kc0ZvcndhcmQoVmVsb2Npb3VzRGF0YWJhc2VQb29sQmFzZSlcblxuZXhwb3J0IGRlZmF1bHQgVmVsb2Npb3VzRGF0YWJhc2VQb29sQmFzZVxuIl19
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/** Stable framework error for a database pool checkout that exceeded its wait limit. */
|
|
2
|
+
export default class DatabasePoolCheckoutTimeoutError extends Error {
|
|
3
|
+
code: string;
|
|
4
|
+
/**
|
|
5
|
+
* Builds a database pool checkout timeout error.
|
|
6
|
+
* @param {string} message - Detailed sanitized pool timeout message.
|
|
7
|
+
* @param {{cause?: unknown}} [args] - Error options.
|
|
8
|
+
*/
|
|
9
|
+
constructor(message: string, { cause }?: {
|
|
10
|
+
cause?: unknown;
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=checkout-timeout-error.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkout-timeout-error.d.ts","sourceRoot":"","sources":["../../../../src/database/pool/checkout-timeout-error.js"],"names":[],"mappings":"AAEA,wFAAwF;AACxF,MAAM,CAAC,OAAO,OAAO,gCAAiC,SAAQ,KAAK;IAU1D,IAAI;IATX;;;;OAIG;IACH,YAAY,OAAO,EAHR,MAGQ,EAAE,EAAC,KAAK,EAAC,AAFzB,CACF,EADU;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAEM,EAKhC;CACF"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
// @ts-check
|
|
2
|
+
/** Stable framework error for a database pool checkout that exceeded its wait limit. */
|
|
3
|
+
export default class DatabasePoolCheckoutTimeoutError extends Error {
|
|
4
|
+
/**
|
|
5
|
+
* Builds a database pool checkout timeout error.
|
|
6
|
+
* @param {string} message - Detailed sanitized pool timeout message.
|
|
7
|
+
* @param {{cause?: unknown}} [args] - Error options.
|
|
8
|
+
*/
|
|
9
|
+
constructor(message, { cause } = {}) {
|
|
10
|
+
super(message, cause === undefined ? undefined : { cause });
|
|
11
|
+
this.name = "DatabasePoolCheckoutTimeoutError";
|
|
12
|
+
this.code = "VELOCIOUS_DATABASE_POOL_CHECKOUT_TIMEOUT";
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tvdXQtdGltZW91dC1lcnJvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kYXRhYmFzZS9wb29sL2NoZWNrb3V0LXRpbWVvdXQtZXJyb3IuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLHdGQUF3RjtBQUN4RixNQUFNLENBQUMsT0FBTyxPQUFPLGdDQUFpQyxTQUFRLEtBQUs7SUFDakU7Ozs7T0FJRztJQUNILFlBQVksT0FBTyxFQUFFLEVBQUMsS0FBSyxFQUFDLEdBQUcsRUFBRTtRQUMvQixLQUFLLENBQUMsT0FBTyxFQUFFLEtBQUssS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBQyxLQUFLLEVBQUMsQ0FBQyxDQUFBO1FBRXpELElBQUksQ0FBQyxJQUFJLEdBQUcsa0NBQWtDLENBQUE7UUFDOUMsSUFBSSxDQUFDLElBQUksR0FBRywwQ0FBMEMsQ0FBQTtJQUN4RCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuLyoqIFN0YWJsZSBmcmFtZXdvcmsgZXJyb3IgZm9yIGEgZGF0YWJhc2UgcG9vbCBjaGVja291dCB0aGF0IGV4Y2VlZGVkIGl0cyB3YWl0IGxpbWl0LiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGF0YWJhc2VQb29sQ2hlY2tvdXRUaW1lb3V0RXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIC8qKlxuICAgKiBCdWlsZHMgYSBkYXRhYmFzZSBwb29sIGNoZWNrb3V0IHRpbWVvdXQgZXJyb3IuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIC0gRGV0YWlsZWQgc2FuaXRpemVkIHBvb2wgdGltZW91dCBtZXNzYWdlLlxuICAgKiBAcGFyYW0ge3tjYXVzZT86IHVua25vd259fSBbYXJnc10gLSBFcnJvciBvcHRpb25zLlxuICAgKi9cbiAgY29uc3RydWN0b3IobWVzc2FnZSwge2NhdXNlfSA9IHt9KSB7XG4gICAgc3VwZXIobWVzc2FnZSwgY2F1c2UgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHtjYXVzZX0pXG5cbiAgICB0aGlzLm5hbWUgPSBcIkRhdGFiYXNlUG9vbENoZWNrb3V0VGltZW91dEVycm9yXCJcbiAgICB0aGlzLmNvZGUgPSBcIlZFTE9DSU9VU19EQVRBQkFTRV9QT09MX0NIRUNLT1VUX1RJTUVPVVRcIlxuICB9XG59XG4iXX0=
|
|
@@ -12,11 +12,29 @@ export default class VelociousWebsocketClient extends SnapReqWebSocketClient {
|
|
|
12
12
|
runningReconnectTasks: Set<Promise<void>>;
|
|
13
13
|
/** @type {Promise<void> | null} */
|
|
14
14
|
gracefulClosePromise: Promise<void> | null;
|
|
15
|
+
routingBaseUrl: string;
|
|
15
16
|
/**
|
|
16
17
|
* Runs constructor.
|
|
17
18
|
* @param {Partial<ConstructorParameters<typeof SnapReqWebSocketClient>[0]>} [args] - Options forwarded to `SnapReqWebSocketClient`.
|
|
18
19
|
*/
|
|
19
20
|
constructor(args?: Partial<ConstructorParameters<typeof SnapReqWebSocketClient>[0]>);
|
|
21
|
+
/**
|
|
22
|
+
* Restores a persisted session before opening the socket so the host can route
|
|
23
|
+
* the HTTP upgrade to the worker that owns its paused state.
|
|
24
|
+
* @returns {Promise<void>}
|
|
25
|
+
*/
|
|
26
|
+
_restoreSessionIdForRouting(): Promise<void>;
|
|
27
|
+
/**
|
|
28
|
+
* Builds the WebSocket URL carrying only the current resumable session routing hint.
|
|
29
|
+
* @returns {string} - WebSocket URL.
|
|
30
|
+
*/
|
|
31
|
+
_sessionRoutingUrl(): string;
|
|
32
|
+
/**
|
|
33
|
+
* Restores routing state before delegating socket creation to SnapReq.
|
|
34
|
+
* @param {Parameters<SnapReqWebSocketClient["_connect"]>[0]} [options] - Connect options.
|
|
35
|
+
* @returns {Promise<void>} - Resolves when the session is ready.
|
|
36
|
+
*/
|
|
37
|
+
_connect(options?: Parameters<SnapReqWebSocketClient["_connect"]>[0]): Promise<void>;
|
|
20
38
|
/**
|
|
21
39
|
* Ignores an online result resolved after reconnect teardown began.
|
|
22
40
|
* @returns {Promise<boolean>} - Whether this client generation is online.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"websocket-client.d.ts","sourceRoot":"","sources":["../../../src/http-client/websocket-client.js"],"names":[],"mappings":"AAEA,OAAO,sBAAsB,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"websocket-client.d.ts","sourceRoot":"","sources":["../../../src/http-client/websocket-client.js"],"names":[],"mappings":"AAEA,OAAO,sBAAsB,MAAM,mBAAmB,CAAA;AAMtD;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,OAAO,wBAAyB,SAAQ,sBAAsB;IAWnE,mBAAmB;IACxB,iCAAiC;IAC5B,qBAAqB,EADf,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAE7B,mCAAmC;IAC9B,oBAAoB,EADd,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAE1B,cAAc;IAfrB;;;OAGG;IACH,YAAY,IAAI,AAFb,CACF,EADU,OAAO,CAAC,qBAAqB,CAAC,OAAO,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAErD,EAYpB;IAED;;;;OAIG;IACG,2BAA2B,IAFpB,OAAO,CAAC,IAAI,CAAC,CAkBzB;IAED;;;OAGG;IACH,kBAAkB,IAFL,MAAM,CAYlB;IAED;;;;OAIG;IACG,QAAQ,CAAC,OAAO,AAHnB,CACA,EADQ,UAAU,CAAC,sBAAsB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAGrC,GAFT,OAAO,CAAC,IAAI,CAAC,CAMzB;IAED;;;OAGG;IACG,SAAS,IAFF,OAAO,CAAC,OAAO,CAAC,CAO5B;IAED;;;OAGG;IACG,iBAAiB,IAFV,OAAO,CAAC,IAAI,CAAC,CAYzB;IAED;;;;OAIG;IACG,KAAK,IAFE,OAAO,CAAC,IAAI,CAAC,CAyBzB;IAED;;;;OAIG;IACG,0BAA0B,IAFnB,OAAO,CAAC,IAAI,CAAC,CAazB;CACF"}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
import SnapReqWebSocketClient from "snapreq/websocket";
|
|
3
3
|
import { deserializeFrontendModelTransportValue } from "../frontend-models/transport-serialization.js";
|
|
4
4
|
const DEFAULT_URL = "ws://127.0.0.1:3006/websocket";
|
|
5
|
+
const SESSION_ROUTING_PARAMETER = "velociousSessionId";
|
|
5
6
|
/**
|
|
6
7
|
* Velocious's WebSocket client. The cross-platform connection/session/channel
|
|
7
8
|
* machinery lives in snapreq's `SnapReqWebSocketClient`; this thin subclass only
|
|
@@ -25,6 +26,52 @@ export default class VelociousWebsocketClient extends SnapReqWebSocketClient {
|
|
|
25
26
|
this.runningReconnectTasks = new Set();
|
|
26
27
|
/** @type {Promise<void> | null} */
|
|
27
28
|
this.gracefulClosePromise = null;
|
|
29
|
+
this.routingBaseUrl = this.url;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Restores a persisted session before opening the socket so the host can route
|
|
33
|
+
* the HTTP upgrade to the worker that owns its paused state.
|
|
34
|
+
* @returns {Promise<void>}
|
|
35
|
+
*/
|
|
36
|
+
async _restoreSessionIdForRouting() {
|
|
37
|
+
// SnapReq initializes these internal session fields in its constructor, but
|
|
38
|
+
// its declaration does not expose that definite-assignment lifecycle here.
|
|
39
|
+
const routingState = /** @type {{_sessionId: string | null, _sessionStore: {get: () => string | null | undefined | Promise<string | null | undefined>} | undefined, _sessionStoreRestored: boolean}} */ ( /** @type {unknown} */(this));
|
|
40
|
+
if (routingState._sessionId || routingState._sessionStoreRestored || !routingState._sessionStore)
|
|
41
|
+
return;
|
|
42
|
+
routingState._sessionStoreRestored = true;
|
|
43
|
+
try {
|
|
44
|
+
const storedId = await routingState._sessionStore.get();
|
|
45
|
+
if (typeof storedId === "string" && storedId.length > 0)
|
|
46
|
+
routingState._sessionId = storedId;
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
this._debug("sessionStore.get failed", error);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Builds the WebSocket URL carrying only the current resumable session routing hint.
|
|
54
|
+
* @returns {string} - WebSocket URL.
|
|
55
|
+
*/
|
|
56
|
+
_sessionRoutingUrl() {
|
|
57
|
+
const url = new URL(this.routingBaseUrl);
|
|
58
|
+
if (this._sessionId) {
|
|
59
|
+
url.searchParams.set(SESSION_ROUTING_PARAMETER, this._sessionId);
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
url.searchParams.delete(SESSION_ROUTING_PARAMETER);
|
|
63
|
+
}
|
|
64
|
+
return url.toString();
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Restores routing state before delegating socket creation to SnapReq.
|
|
68
|
+
* @param {Parameters<SnapReqWebSocketClient["_connect"]>[0]} [options] - Connect options.
|
|
69
|
+
* @returns {Promise<void>} - Resolves when the session is ready.
|
|
70
|
+
*/
|
|
71
|
+
async _connect(options) {
|
|
72
|
+
await this._restoreSessionIdForRouting();
|
|
73
|
+
this.url = this._sessionRoutingUrl();
|
|
74
|
+
await super._connect(options);
|
|
28
75
|
}
|
|
29
76
|
/**
|
|
30
77
|
* Ignores an online result resolved after reconnect teardown began.
|
|
@@ -93,4 +140,4 @@ export default class VelociousWebsocketClient extends SnapReqWebSocketClient {
|
|
|
93
140
|
await super.disconnectAndStopReconnect();
|
|
94
141
|
}
|
|
95
142
|
}
|
|
96
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2Vic29ja2V0LWNsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9odHRwLWNsaWVudC93ZWJzb2NrZXQtY2xpZW50LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLHNCQUFzQixNQUFNLG1CQUFtQixDQUFBO0FBQ3RELE9BQU8sRUFBQyxzQ0FBc0MsRUFBQyxNQUFNLCtDQUErQyxDQUFBO0FBRXBHLE1BQU0sV0FBVyxHQUFHLCtCQUErQixDQUFBO0FBRW5EOzs7Ozs7R0FNRztBQUNILE1BQU0sQ0FBQyxPQUFPLE9BQU8sd0JBQXlCLFNBQVEsc0JBQXNCO0lBQzFFOzs7T0FHRztJQUNILFlBQVksSUFBSSxHQUFHLEVBQUU7UUFDbkIsS0FBSyxDQUFDO1lBQ0osR0FBRyxJQUFJO1lBQ1AsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksV0FBVztZQUM1QixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVcsSUFBSSxzQ0FBc0M7U0FDeEUsQ0FBQyxDQUFBO1FBQ0YsSUFBSSxDQUFDLG1CQUFtQixHQUFHLENBQUMsQ0FBQTtRQUM1QixpQ0FBaUM7UUFDakMsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksR0FBRyxFQUFFLENBQUE7UUFDdEMsbUNBQW1DO1FBQ25DLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUE7SUFDbEMsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxTQUFTO1FBQ2IsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFBO1FBQzNDLE1BQU0sUUFBUSxHQUFHLE1BQU0sS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFBO1FBRXhDLE9BQU8sVUFBVSxLQUFLLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxRQUFRLENBQUE7SUFDNUQsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxpQkFBaUI7UUFDckIsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDLGlCQUFpQixFQUFFLENBQUE7UUFFL0MsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQTtRQUU3QyxJQUFJLENBQUM7WUFDSCxNQUFNLGFBQWEsQ0FBQTtRQUNyQixDQUFDO2dCQUFTLENBQUM7WUFDVCxJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFBO1FBQ2xELENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEtBQUssQ0FBQyxLQUFLO1FBQ1QsSUFBSSxJQUFJLENBQUMsb0JBQW9CO1lBQUUsT0FBTyxNQUFNLElBQUksQ0FBQyxvQkFBb0IsQ0FBQTtRQUVyRSxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQTtRQUMxQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFBO1FBQzFCLE1BQU0sWUFBWSxHQUFHLENBQUMsS0FBSyxJQUFJLEVBQUU7WUFDL0IsSUFBSSxNQUFNLElBQUksTUFBTSxDQUFDLFVBQVUsS0FBSyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ2hELE1BQU0sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtvQkFDNUIsTUFBTSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBQyxJQUFJLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQTtvQkFDeEUsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQTtnQkFDcEIsQ0FBQyxDQUFDLENBQUE7WUFDSixDQUFDO1lBRUQsTUFBTSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUE7UUFDckIsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtRQUVKLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxZQUFZLENBQUE7UUFFeEMsSUFBSSxDQUFDO1lBQ0gsTUFBTSxZQUFZLENBQUE7UUFDcEIsQ0FBQztnQkFBUyxDQUFDO1lBQ1QsSUFBSSxJQUFJLENBQUMsb0JBQW9CLEtBQUssWUFBWTtnQkFBRSxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFBO1FBQ2xGLENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEtBQUssQ0FBQywwQkFBMEI7UUFDOUIsSUFBSSxDQUFDLG1CQUFtQixJQUFJLENBQUMsQ0FBQTtRQUM3QixNQUFNLEtBQUssQ0FBQywwQkFBMEIsRUFBRSxDQUFBO1FBRXhDLElBQUksSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksS0FBSyxDQUFDO1lBQUUsT0FBTTtRQUVqRCxPQUFPLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDM0MsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFBO1FBQy9DLENBQUM7UUFFRCxNQUFNLEtBQUssQ0FBQywwQkFBMEIsRUFBRSxDQUFBO0lBQzFDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgU25hcFJlcVdlYlNvY2tldENsaWVudCBmcm9tIFwic25hcHJlcS93ZWJzb2NrZXRcIlxuaW1wb3J0IHtkZXNlcmlhbGl6ZUZyb250ZW5kTW9kZWxUcmFuc3BvcnRWYWx1ZX0gZnJvbSBcIi4uL2Zyb250ZW5kLW1vZGVscy90cmFuc3BvcnQtc2VyaWFsaXphdGlvbi5qc1wiXG5cbmNvbnN0IERFRkFVTFRfVVJMID0gXCJ3czovLzEyNy4wLjAuMTozMDA2L3dlYnNvY2tldFwiXG5cbi8qKlxuICogVmVsb2Npb3VzJ3MgV2ViU29ja2V0IGNsaWVudC4gVGhlIGNyb3NzLXBsYXRmb3JtIGNvbm5lY3Rpb24vc2Vzc2lvbi9jaGFubmVsXG4gKiBtYWNoaW5lcnkgbGl2ZXMgaW4gc25hcHJlcSdzIGBTbmFwUmVxV2ViU29ja2V0Q2xpZW50YDsgdGhpcyB0aGluIHN1YmNsYXNzIG9ubHlcbiAqIHByZS13aXJlcyB0aGUgdHdvIFZlbG9jaW91cy1zcGVjaWZpYyBkZWZhdWx0czogdGhlIGxvY2FsIGRldmVsb3BtZW50IHdlYnNvY2tldFxuICogVVJMIGFuZCBmcm9udGVuZC1tb2RlbCB0cmFuc3BvcnQgZGVzZXJpYWxpemF0aW9uIGluc2lkZSBgcmVzcG9uc2UuanNvbigpYC5cbiAqIEBhdWdtZW50cyBTbmFwUmVxV2ViU29ja2V0Q2xpZW50XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZlbG9jaW91c1dlYnNvY2tldENsaWVudCBleHRlbmRzIFNuYXBSZXFXZWJTb2NrZXRDbGllbnQge1xuICAvKipcbiAgICogUnVucyBjb25zdHJ1Y3Rvci5cbiAgICogQHBhcmFtIHtQYXJ0aWFsPENvbnN0cnVjdG9yUGFyYW1ldGVyczx0eXBlb2YgU25hcFJlcVdlYlNvY2tldENsaWVudD5bMF0+fSBbYXJnc10gLSBPcHRpb25zIGZvcndhcmRlZCB0byBgU25hcFJlcVdlYlNvY2tldENsaWVudGAuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihhcmdzID0ge30pIHtcbiAgICBzdXBlcih7XG4gICAgICAuLi5hcmdzLFxuICAgICAgdXJsOiBhcmdzLnVybCA/PyBERUZBVUxUX1VSTCxcbiAgICAgIGRlc2VyaWFsaXplOiBhcmdzLmRlc2VyaWFsaXplID8/IGRlc2VyaWFsaXplRnJvbnRlbmRNb2RlbFRyYW5zcG9ydFZhbHVlXG4gICAgfSlcbiAgICB0aGlzLnJlY29ubmVjdEdlbmVyYXRpb24gPSAwXG4gICAgLyoqIEB0eXBlIHtTZXQ8UHJvbWlzZTx2b2lkPj59ICovXG4gICAgdGhpcy5ydW5uaW5nUmVjb25uZWN0VGFza3MgPSBuZXcgU2V0KClcbiAgICAvKiogQHR5cGUge1Byb21pc2U8dm9pZD4gfCBudWxsfSAqL1xuICAgIHRoaXMuZ3JhY2VmdWxDbG9zZVByb21pc2UgPSBudWxsXG4gIH1cblxuICAvKipcbiAgICogSWdub3JlcyBhbiBvbmxpbmUgcmVzdWx0IHJlc29sdmVkIGFmdGVyIHJlY29ubmVjdCB0ZWFyZG93biBiZWdhbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Ym9vbGVhbj59IC0gV2hldGhlciB0aGlzIGNsaWVudCBnZW5lcmF0aW9uIGlzIG9ubGluZS5cbiAgICovXG4gIGFzeW5jIF9pc09ubGluZSgpIHtcbiAgICBjb25zdCBnZW5lcmF0aW9uID0gdGhpcy5yZWNvbm5lY3RHZW5lcmF0aW9uXG4gICAgY29uc3QgaXNPbmxpbmUgPSBhd2FpdCBzdXBlci5faXNPbmxpbmUoKVxuXG4gICAgcmV0dXJuIGdlbmVyYXRpb24gPT09IHRoaXMucmVjb25uZWN0R2VuZXJhdGlvbiAmJiBpc09ubGluZVxuICB9XG5cbiAgLyoqXG4gICAqIFRyYWNrcyBhdXRvbWF0aWMgcmVjb25uZWN0IHdvcmsgc28gdGVhcmRvd24gY2FuIGRyYWluIHN0YWxlIGF0dGVtcHRzLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyBhZnRlciB0aGUgcmVjb25uZWN0IGF0dGVtcHQgc2V0dGxlcy5cbiAgICovXG4gIGFzeW5jIF9hdHRlbXB0UmVjb25uZWN0KCkge1xuICAgIGNvbnN0IHJlY29ubmVjdFRhc2sgPSBzdXBlci5fYXR0ZW1wdFJlY29ubmVjdCgpXG5cbiAgICB0aGlzLnJ1bm5pbmdSZWNvbm5lY3RUYXNrcy5hZGQocmVjb25uZWN0VGFzaylcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCByZWNvbm5lY3RUYXNrXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMucnVubmluZ1JlY29ubmVjdFRhc2tzLmRlbGV0ZShyZWNvbm5lY3RUYXNrKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZXMgdGhlIFdlYlNvY2tldCBhcyBhIG5vcm1hbCBzaHV0ZG93biBzbyB0aGUgc2VydmVyIHBlcm1hbmVudGx5XG4gICAqIHJlbGVhc2VzIHJlc3VtYWJsZSBzZXNzaW9uIHN0YXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyBvbmNlIGNsb3NlZC5cbiAgICovXG4gIGFzeW5jIGNsb3NlKCkge1xuICAgIGlmICh0aGlzLmdyYWNlZnVsQ2xvc2VQcm9taXNlKSByZXR1cm4gYXdhaXQgdGhpcy5ncmFjZWZ1bENsb3NlUHJvbWlzZVxuXG4gICAgdGhpcy5hdXRvUmVjb25uZWN0ID0gZmFsc2VcbiAgICBjb25zdCBzb2NrZXQgPSB0aGlzLnNvY2tldFxuICAgIGNvbnN0IGNsb3NlUHJvbWlzZSA9IChhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoc29ja2V0ICYmIHNvY2tldC5yZWFkeVN0YXRlID09PSBzb2NrZXQuT1BFTikge1xuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgIHNvY2tldC5hZGRFdmVudExpc3RlbmVyKFwiY2xvc2VcIiwgKCkgPT4gcmVzb2x2ZSh1bmRlZmluZWQpLCB7b25jZTogdHJ1ZX0pXG4gICAgICAgICAgc29ja2V0LmNsb3NlKDEwMDApXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGF3YWl0IHN1cGVyLmNsb3NlKClcbiAgICB9KSgpXG5cbiAgICB0aGlzLmdyYWNlZnVsQ2xvc2VQcm9taXNlID0gY2xvc2VQcm9taXNlXG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgY2xvc2VQcm9taXNlXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmICh0aGlzLmdyYWNlZnVsQ2xvc2VQcm9taXNlID09PSBjbG9zZVByb21pc2UpIHRoaXMuZ3JhY2VmdWxDbG9zZVByb21pc2UgPSBudWxsXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFN0b3BzIHJlY29ubmVjdCwgZHJhaW5zIHdvcmsgdGhhdCBhbHJlYWR5IHBhc3NlZCBTbmFwUmVxJ3MgcmVjb25uZWN0IGd1YXJkLFxuICAgKiBhbmQgY2xlYXJzIHN0YXRlIGNoYW5nZWQgYnkgYSBzdGFsZSBhdHRlbXB0IHdoaWxlIGl0IHNldHRsZWQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIG9uY2Ugbm8gcmVjb25uZWN0IGNhbiByZXN1cnJlY3QgYSBzb2NrZXQuXG4gICAqL1xuICBhc3luYyBkaXNjb25uZWN0QW5kU3RvcFJlY29ubmVjdCgpIHtcbiAgICB0aGlzLnJlY29ubmVjdEdlbmVyYXRpb24gKz0gMVxuICAgIGF3YWl0IHN1cGVyLmRpc2Nvbm5lY3RBbmRTdG9wUmVjb25uZWN0KClcblxuICAgIGlmICh0aGlzLnJ1bm5pbmdSZWNvbm5lY3RUYXNrcy5zaXplID09PSAwKSByZXR1cm5cblxuICAgIHdoaWxlICh0aGlzLnJ1bm5pbmdSZWNvbm5lY3RUYXNrcy5zaXplID4gMCkge1xuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwodGhpcy5ydW5uaW5nUmVjb25uZWN0VGFza3MpXG4gICAgfVxuXG4gICAgYXdhaXQgc3VwZXIuZGlzY29ubmVjdEFuZFN0b3BSZWNvbm5lY3QoKVxuICB9XG59XG4iXX0=
|
|
143
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2Vic29ja2V0LWNsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9odHRwLWNsaWVudC93ZWJzb2NrZXQtY2xpZW50LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLHNCQUFzQixNQUFNLG1CQUFtQixDQUFBO0FBQ3RELE9BQU8sRUFBQyxzQ0FBc0MsRUFBQyxNQUFNLCtDQUErQyxDQUFBO0FBRXBHLE1BQU0sV0FBVyxHQUFHLCtCQUErQixDQUFBO0FBQ25ELE1BQU0seUJBQXlCLEdBQUcsb0JBQW9CLENBQUE7QUFFdEQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLE9BQU8sT0FBTyx3QkFBeUIsU0FBUSxzQkFBc0I7SUFDMUU7OztPQUdHO0lBQ0gsWUFBWSxJQUFJLEdBQUcsRUFBRTtRQUNuQixLQUFLLENBQUM7WUFDSixHQUFHLElBQUk7WUFDUCxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxXQUFXO1lBQzVCLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVyxJQUFJLHNDQUFzQztTQUN4RSxDQUFDLENBQUE7UUFDRixJQUFJLENBQUMsbUJBQW1CLEdBQUcsQ0FBQyxDQUFBO1FBQzVCLGlDQUFpQztRQUNqQyxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQTtRQUN0QyxtQ0FBbUM7UUFDbkMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQTtRQUNoQyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUE7SUFDaEMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxLQUFLLENBQUMsMkJBQTJCO1FBQy9CLDRFQUE0RTtRQUM1RSwyRUFBMkU7UUFDM0UsTUFBTSxZQUFZLEdBQUcsa0xBQWtMLENBQUMsRUFBQyxzQkFBdUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBRXZPLElBQUksWUFBWSxDQUFDLFVBQVUsSUFBSSxZQUFZLENB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QUFDLElBQUksQ0FBQyxDQUFBO2dCQUNwQixDQUFDLENBQUMsQ0FBQTtZQUNKLENBQUM7WUFFRCxNQUFNLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQTtRQUNyQixDQUFDLENBQUMsRUFBRSxDQUFBO1FBRUosSUFBSSxDQUFDLG9CQUFvQixHQUFHLFlBQVksQ0FBQTtRQUV4QyxJQUFJLENBQUM7WUFDSCxNQUFNLFlBQVksQ0FBQTtRQUNwQixDQUFDO2dCQUFTLENBQUM7WUFDVCxJQUFJLElBQUksQ0FBQyxvQkFBb0IsS0FBSyxZQUFZO2dCQUFFLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUE7UUFDbEYsQ0FBQztJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLDBCQUEwQjtRQUM5QixJQUFJLENBQUMsbUJBQW1CLElBQUksQ0FBQyxDQUFBO1FBQzdCLE1BQU0sS0FBSyxDQUFDLDBCQUEwQixFQUFFLENBQUE7UUFFeEMsSUFBSSxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxLQUFLLENBQUM7WUFBRSxPQUFNO1FBRWpELE9BQU8sSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMzQyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUE7UUFDL0MsQ0FBQztRQUVELE1BQU0sS0FBSyxDQUFDLDBCQUEwQixFQUFFLENBQUE7SUFDMUMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCBTbmFwUmVxV2ViU29ja2V0Q2xpZW50IGZyb20gXCJzbmFwcmVxL3dlYnNvY2tldFwiXG5pbXBvcnQge2Rlc2VyaWFsaXplRnJvbnRlbmRNb2RlbFRyYW5zcG9ydFZhbHVlfSBmcm9tIFwiLi4vZnJvbnRlbmQtbW9kZWxzL3RyYW5zcG9ydC1zZXJpYWxpemF0aW9uLmpzXCJcblxuY29uc3QgREVGQVVMVF9VUkwgPSBcIndzOi8vMTI3LjAuMC4xOjMwMDYvd2Vic29ja2V0XCJcbmNvbnN0IFNFU1NJT05fUk9VVElOR19QQVJBTUVURVIgPSBcInZlbG9jaW91c1Nlc3Npb25JZFwiXG5cbi8qKlxuICogVmVsb2Npb3VzJ3MgV2ViU29ja2V0IGNsaWVudC4gVGhlIGNyb3NzLXBsYXRmb3JtIGNvbm5lY3Rpb24vc2Vzc2lvbi9jaGFubmVsXG4gKiBtYWNoaW5lcnkgbGl2ZXMgaW4gc25hcHJlcSdzIGBTbmFwUmVxV2ViU29ja2V0Q2xpZW50YDsgdGhpcyB0aGluIHN1YmNsYXNzIG9ubHlcbiAqIHByZS13aXJlcyB0aGUgdHdvIFZlbG9jaW91cy1zcGVjaWZpYyBkZWZhdWx0czogdGhlIGxvY2FsIGRldmVsb3BtZW50IHdlYnNvY2tldFxuICogVVJMIGFuZCBmcm9udGVuZC1tb2RlbCB0cmFuc3BvcnQgZGVzZXJpYWxpemF0aW9uIGluc2lkZSBgcmVzcG9uc2UuanNvbigpYC5cbiAqIEBhdWdtZW50cyBTbmFwUmVxV2ViU29ja2V0Q2xpZW50XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZlbG9jaW91c1dlYnNvY2tldENsaWVudCBleHRlbmRzIFNuYXBSZXFXZWJTb2NrZXRDbGllbnQge1xuICAvKipcbiAgICogUnVucyBjb25zdHJ1Y3Rvci5cbiAgICogQHBhcmFtIHtQYXJ0aWFsPENvbnN0cnVjdG9yUGFyYW1ldGVyczx0eXBlb2YgU25hcFJlcVdlYlNvY2tldENsaWVudD5bMF0+fSBbYXJnc10gLSBPcHRpb25zIGZvcndhcmRlZCB0byBgU25hcFJlcVdlYlNvY2tldENsaWVudGAuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihhcmdzID0ge30pIHtcbiAgICBzdXBlcih7XG4gICAgICAuLi5hcmdzLFxuICAgICAgdXJsOiBhcmdzLnVybCA/PyBERUZBVUxUX1VSTCxcbiAgICAgIGRlc2VyaWFsaXplOiBhcmdzLmRlc2VyaWFsaXplID8/IGRlc2VyaWFsaXplRnJvbnRlbmRNb2RlbFRyYW5zcG9ydFZhbHVlXG4gICAgfSlcbiAgICB0aGlzLnJlY29ubmVjdEdlbmVyYXRpb24gPSAwXG4gICAgLyoqIEB0eXBlIHtTZXQ8UHJvbWlzZTx2b2lkPj59ICovXG4gICAgdGhpcy5ydW5uaW5nUmVjb25uZWN0VGFza3MgPSBuZXcgU2V0KClcbiAgICAvKiogQHR5cGUge1Byb21pc2U8dm9pZD4gfCBudWxsfSAqL1xuICAgIHRoaXMuZ3JhY2VmdWxDbG9zZVByb21pc2UgPSBudWxsXG4gICAgdGhpcy5yb3V0aW5nQmFzZVVybCA9IHRoaXMudXJsXG4gIH1cblxuICAvKipcbiAgICogUmVzdG9yZXMgYSBwZXJzaXN0ZWQgc2Vzc2lvbiBiZWZvcmUgb3BlbmluZyB0aGUgc29ja2V0IHNvIHRoZSBob3N0IGNhbiByb3V0ZVxuICAgKiB0aGUgSFRUUCB1cGdyYWRlIHRvIHRoZSB3b3JrZXIgdGhhdCBvd25zIGl0cyBwYXVzZWQgc3RhdGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgYXN5bmMgX3Jlc3RvcmVTZXNzaW9uSWRGb3JSb3V0aW5nKCkge1xuICAgIC8vIFNuYXBSZXEgaW5pdGlhbGl6ZXMgdGhlc2UgaW50ZXJuYWwgc2Vzc2lvbiBmaWVsZHMgaW4gaXRzIGNvbnN0cnVjdG9yLCBidXRcbiAgICAvLyBpdHMgZGVjbGFyYXRpb24gZG9lcyBub3QgZXhwb3NlIHRoYXQgZGVmaW5pdGUtYXNzaWdubWVudCBsaWZlY3ljbGUgaGVyZS5cbiAgICBjb25zdCByb3V0aW5nU3RhdGUgPSAvKiogQHR5cGUge3tfc2Vzc2lvbklkOiBzdHJpbmcgfCBudWxsLCBfc2Vzc2lvblN0b3JlOiB7Z2V0OiAoKSA9PiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkIHwgUHJvbWlzZTxzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkPn0gfCB1bmRlZmluZWQsIF9zZXNzaW9uU3RvcmVSZXN0b3JlZDogYm9vbGVhbn19ICovICgvKiogQHR5cGUge3Vua25vd259ICovICh0aGlzKSlcblxuICAgIGlmIChyb3V0aW5nU3RhdGUuX3Nlc3Npb25JZCB8fCByb3V0aW5nU3RhdGUuX3Nlc3Npb25TdG9yZVJlc3RvcmVkIHx8ICFyb3V0aW5nU3RhdGUuX3Nlc3Npb25TdG9yZSkgcmV0dXJuXG5cbiAgICByb3V0aW5nU3RhdGUuX3Nlc3Npb25TdG9yZVJlc3RvcmVkID0gdHJ1ZVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0b3JlZElkID0gYXdhaXQgcm91dGluZ1N0YXRlLl9zZXNzaW9uU3RvcmUuZ2V0KClcblxuICAgICAgaWYgKHR5cGVvZiBzdG9yZWRJZCA9PT0gXCJzdHJpbmdcIiAmJiBzdG9yZWRJZC5sZW5ndGggPiAwKSByb3V0aW5nU3RhdGUuX3Nlc3Npb25JZCA9IHN0b3JlZElkXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMuX2RlYnVnKFwic2Vzc2lvblN0b3JlLmdldCBmYWlsZWRcIiwgZXJyb3IpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkcyB0aGUgV2ViU29ja2V0IFVSTCBjYXJyeWluZyBvbmx5IHRoZSBjdXJyZW50IHJlc3VtYWJsZSBzZXNzaW9uIHJvdXRpbmcgaGludC5cbiAgICogQHJldHVybnMge3N0cmluZ30gLSBXZWJTb2NrZXQgVVJMLlxuICAgKi9cbiAgX3Nlc3Npb25Sb3V0aW5nVXJsKCkge1xuICAgIGNvbnN0IHVybCA9IG5ldyBVUkwodGhpcy5yb3V0aW5nQmFzZVVybClcblxuICAgIGlmICh0aGlzLl9zZXNzaW9uSWQpIHtcbiAgICAgIHVybC5zZWFyY2hQYXJhbXMuc2V0KFNFU1NJT05fUk9VVElOR19QQVJBTUVURVIsIHRoaXMuX3Nlc3Npb25JZClcbiAgICB9IGVsc2Uge1xuICAgICAgdXJsLnNlYXJjaFBhcmFtcy5kZWxldGUoU0VTU0lPTl9ST1VUSU5HX1BBUkFNRVRFUilcbiAgICB9XG5cbiAgICByZXR1cm4gdXJsLnRvU3RyaW5nKClcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXN0b3JlcyByb3V0aW5nIHN0YXRlIGJlZm9yZSBkZWxlZ2F0aW5nIHNvY2tldCBjcmVhdGlvbiB0byBTbmFwUmVxLlxuICAgKiBAcGFyYW0ge1BhcmFtZXRlcnM8U25hcFJlcVdlYlNvY2tldENsaWVudFtcIl9jb25uZWN0XCJdPlswXX0gW29wdGlvbnNdIC0gQ29ubmVjdCBvcHRpb25zLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIHRoZSBzZXNzaW9uIGlzIHJlYWR5LlxuICAgKi9cbiAgYXN5bmMgX2Nvbm5lY3Qob3B0aW9ucykge1xuICAgIGF3YWl0IHRoaXMuX3Jlc3RvcmVTZXNzaW9uSWRGb3JSb3V0aW5nKClcbiAgICB0aGlzLnVybCA9IHRoaXMuX3Nlc3Npb25Sb3V0aW5nVXJsKClcbiAgICBhd2FpdCBzdXBlci5fY29ubmVjdChvcHRpb25zKVxuICB9XG5cbiAgLyoqXG4gICAqIElnbm9yZXMgYW4gb25saW5lIHJlc3VsdCByZXNvbHZlZCBhZnRlciByZWNvbm5lY3QgdGVhcmRvd24gYmVnYW4uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGJvb2xlYW4+fSAtIFdoZXRoZXIgdGhpcyBjbGllbnQgZ2VuZXJhdGlvbiBpcyBvbmxpbmUuXG4gICAqL1xuICBhc3luYyBfaXNPbmxpbmUoKSB7XG4gICAgY29uc3QgZ2VuZXJhdGlvbiA9IHRoaXMucmVjb25uZWN0R2VuZXJhdGlvblxuICAgIGNvbnN0IGlzT25saW5lID0gYXdhaXQgc3VwZXIuX2lzT25saW5lKClcblxuICAgIHJldHVybiBnZW5lcmF0aW9uID09PSB0aGlzLnJlY29ubmVjdEdlbmVyYXRpb24gJiYgaXNPbmxpbmVcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmFja3MgYXV0b21hdGljIHJlY29ubmVjdCB3b3JrIHNvIHRlYXJkb3duIGNhbiBkcmFpbiBzdGFsZSBhdHRlbXB0cy5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgYWZ0ZXIgdGhlIHJlY29ubmVjdCBhdHRlbXB0IHNldHRsZXMuXG4gICAqL1xuICBhc3luYyBfYXR0ZW1wdFJlY29ubmVjdCgpIHtcbiAgICBjb25zdCByZWNvbm5lY3RUYXNrID0gc3VwZXIuX2F0dGVtcHRSZWNvbm5lY3QoKVxuXG4gICAgdGhpcy5ydW5uaW5nUmVjb25uZWN0VGFza3MuYWRkKHJlY29ubmVjdFRhc2spXG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgcmVjb25uZWN0VGFza1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLnJ1bm5pbmdSZWNvbm5lY3RUYXNrcy5kZWxldGUocmVjb25uZWN0VGFzaylcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2xvc2VzIHRoZSBXZWJTb2NrZXQgYXMgYSBub3JtYWwgc2h1dGRvd24gc28gdGhlIHNlcnZlciBwZXJtYW5lbnRseVxuICAgKiByZWxlYXNlcyByZXN1bWFibGUgc2Vzc2lvbiBzdGF0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgb25jZSBjbG9zZWQuXG4gICAqL1xuICBhc3luYyBjbG9zZSgpIHtcbiAgICBpZiAodGhpcy5ncmFjZWZ1bENsb3NlUHJvbWlzZSkgcmV0dXJuIGF3YWl0IHRoaXMuZ3JhY2VmdWxDbG9zZVByb21pc2VcblxuICAgIHRoaXMuYXV0b1JlY29ubmVjdCA9IGZhbHNlXG4gICAgY29uc3Qgc29ja2V0ID0gdGhpcy5zb2NrZXRcbiAgICBjb25zdCBjbG9zZVByb21pc2UgPSAoYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKHNvY2tldCAmJiBzb2NrZXQucmVhZHlTdGF0ZSA9PT0gc29ja2V0Lk9QRU4pIHtcbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICBzb2NrZXQuYWRkRXZlbnRMaXN0ZW5lcihcImNsb3NlXCIsICgpID0+IHJlc29sdmUodW5kZWZpbmVkKSwge29uY2U6IHRydWV9KVxuICAgICAgICAgIHNvY2tldC5jbG9zZSgxMDAwKVxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBhd2FpdCBzdXBlci5jbG9zZSgpXG4gICAgfSkoKVxuXG4gICAgdGhpcy5ncmFjZWZ1bENsb3NlUHJvbWlzZSA9IGNsb3NlUHJvbWlzZVxuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGNsb3NlUHJvbWlzZVxuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAodGhpcy5ncmFjZWZ1bENsb3NlUHJvbWlzZSA9PT0gY2xvc2VQcm9taXNlKSB0aGlzLmdyYWNlZnVsQ2xvc2VQcm9taXNlID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTdG9wcyByZWNvbm5lY3QsIGRyYWlucyB3b3JrIHRoYXQgYWxyZWFkeSBwYXNzZWQgU25hcFJlcSdzIHJlY29ubmVjdCBndWFyZCxcbiAgICogYW5kIGNsZWFycyBzdGF0ZSBjaGFuZ2VkIGJ5IGEgc3RhbGUgYXR0ZW1wdCB3aGlsZSBpdCBzZXR0bGVkLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyBvbmNlIG5vIHJlY29ubmVjdCBjYW4gcmVzdXJyZWN0IGEgc29ja2V0LlxuICAgKi9cbiAgYXN5bmMgZGlzY29ubmVjdEFuZFN0b3BSZWNvbm5lY3QoKSB7XG4gICAgdGhpcy5yZWNvbm5lY3RHZW5lcmF0aW9uICs9IDFcbiAgICBhd2FpdCBzdXBlci5kaXNjb25uZWN0QW5kU3RvcFJlY29ubmVjdCgpXG5cbiAgICBpZiAodGhpcy5ydW5uaW5nUmVjb25uZWN0VGFza3Muc2l6ZSA9PT0gMCkgcmV0dXJuXG5cbiAgICB3aGlsZSAodGhpcy5ydW5uaW5nUmVjb25uZWN0VGFza3Muc2l6ZSA+IDApIHtcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKHRoaXMucnVubmluZ1JlY29ubmVjdFRhc2tzKVxuICAgIH1cblxuICAgIGF3YWl0IHN1cGVyLmRpc2Nvbm5lY3RBbmRTdG9wUmVjb25uZWN0KClcbiAgfVxufVxuIl19
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/http-server/client/index.js"],"names":[],"mappings":"AAOA,OAAO,MAAM,MAAM,iBAAiB,CAAA;AACpC,OAAO,OAAO,MAAM,cAAc,CAAA;AAClC,OAAO,aAAa,MAAM,qBAAqB,CAAA;AAE/C,OAAO,gBAAgB,MAAM,wBAAwB,CAAA;AA0BrD,MAAM,CAAC,OAAO,OAAO,0BAA0B;IAwBtC,MAAM;IACN,WAAW;IACX,aAAa;IACb,aAAa;IAElB;;iCAE6B;IACxB,cAAc,EADT,aAAa,EAAE;IAGzB,sEAAsE;IACjE,oBAAoB,EADd,GAAG,CAAC,CAAC,MAAM,EAAE,WAAW,GAAG,SAAS,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IA4D7D,cAAc;IAwKd,gBAAgB;IArQvB,MAAM,6DAAqB;IAC3B,KAAK,SAAY;IAEjB;;yBAEqB;IACrB,wBAAwB,EADd,OAAO,CACe;IAEhC;;yBAEqB;IACrB,yBAAyB,EADf,OAAO,CACgB;IAEjC;;;;;;OAMG;IACH,YAAY,EAAC,WAAW,EAAE,aAAa,EAAE,aAAa,EAAC,EAJpD;QAAqB,WAAW,EAAxB,MAAM,CACd;QAAuD,aAAa,EAA5D,OAAO,wBAAwB,EAAE,OAAO,CAChD;QAAsB,aAAa,AAAnC,CACF,EADU,MAAM,CAChB;KACsD,EAetD;IAED;;;;OAIG;IACH,uBAAuB,CAAC,OAAO,EAHpB,MAGoB,GAFlB,IAAI,CAgBhB;IAED;;;;OAIG;IACH,uBAAuB,CAAC,OAAO,EAHpB,MAGoB,GAFlB,IAAI,CAgBhB;IAED;;;;OAIG;IACH,gBAAgB,CAAC,KAAK,EAHX,KAGW,GAFT,IAAI,CAehB;IAED,qBAAqB,aA+BpB;IAED;;;;OAIG;IACH,OAAO,CAAC,IAAI,EAHD,MAGC,GAFC,IAAI,CAgEhB;IAED;;;;OAIG;IACH,mBAAmB,CAAC,OAAO,EAHhB,OAAO,cAAc,EAAE,OAGP,GAFd,OAAO,CAOnB;IAED;;;OAGG;IACH,mBAAmB,IAFN,IAAI,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/http-server/client/index.js"],"names":[],"mappings":"AAOA,OAAO,MAAM,MAAM,iBAAiB,CAAA;AACpC,OAAO,OAAO,MAAM,cAAc,CAAA;AAClC,OAAO,aAAa,MAAM,qBAAqB,CAAA;AAE/C,OAAO,gBAAgB,MAAM,wBAAwB,CAAA;AA0BrD,MAAM,CAAC,OAAO,OAAO,0BAA0B;IAwBtC,MAAM;IACN,WAAW;IACX,aAAa;IACb,aAAa;IAElB;;iCAE6B;IACxB,cAAc,EADT,aAAa,EAAE;IAGzB,sEAAsE;IACjE,oBAAoB,EADd,GAAG,CAAC,CAAC,MAAM,EAAE,WAAW,GAAG,SAAS,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IA4D7D,cAAc;IAwKd,gBAAgB;IArQvB,MAAM,6DAAqB;IAC3B,KAAK,SAAY;IAEjB;;yBAEqB;IACrB,wBAAwB,EADd,OAAO,CACe;IAEhC;;yBAEqB;IACrB,yBAAyB,EADf,OAAO,CACgB;IAEjC;;;;;;OAMG;IACH,YAAY,EAAC,WAAW,EAAE,aAAa,EAAE,aAAa,EAAC,EAJpD;QAAqB,WAAW,EAAxB,MAAM,CACd;QAAuD,aAAa,EAA5D,OAAO,wBAAwB,EAAE,OAAO,CAChD;QAAsB,aAAa,AAAnC,CACF,EADU,MAAM,CAChB;KACsD,EAetD;IAED;;;;OAIG;IACH,uBAAuB,CAAC,OAAO,EAHpB,MAGoB,GAFlB,IAAI,CAgBhB;IAED;;;;OAIG;IACH,uBAAuB,CAAC,OAAO,EAHpB,MAGoB,GAFlB,IAAI,CAgBhB;IAED;;;;OAIG;IACH,gBAAgB,CAAC,KAAK,EAHX,KAGW,GAFT,IAAI,CAehB;IAED,qBAAqB,aA+BpB;IAED;;;;OAIG;IACH,OAAO,CAAC,IAAI,EAHD,MAGC,GAFC,IAAI,CAgEhB;IAED;;;;OAIG;IACH,mBAAmB,CAAC,OAAO,EAHhB,OAAO,cAAc,EAAE,OAGP,GAFd,OAAO,CAOnB;IAED;;;OAGG;IACH,mBAAmB,IAFN,IAAI,CAyEhB;IAED,WAAW,sBAOV;IAED;;;;;;OAMG;IACG,kBAAkB,IAFX,OAAO,CAAC,IAAI,CAAC,CAkBzB;IAEK,gBAAgB,kBA6BrB;IAED;;;;OAIG;IACG,YAAY,CAAC,aAAa,EAHrB,aAGqB,GAFnB,OAAO,CAAC,IAAI,CAAC,CA6HzB;IAED;;;;;;OAMG;IACG,cAAc,CAAC,QAAQ,EALlB,MAKkB,EAAE,QAAQ,EAJ5B,OAI4B,EAAE,UAAU,EAHxC,CAAC,CAAC,MAAM,EAAE,WAAW,GAAG,SAAS,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,IAGtB,GAFtC,OAAO,CAAC,IAAI,CAAC,CAuBzB;IAED;;;;;;;OAOG;IACG,iBAAiB,CAAC,EAAC,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAC,EALnD;QAAqB,QAAQ,EAArB,MAAM,CACd;QAAiF,UAAU,EAAnF,CAAC,CAAC,MAAM,EAAE,WAAW,GAAG,SAAS,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAC1E;QAAsC,MAAM,EAApC,WAAW,GAAG,SAAS,CAC/B;KAEmD,GAFzC,OAAO,CAAC,IAAI,CAAC,CAoBzB;IAED;;;OAGG;IACG,yBAAyB,IAFlB,OAAO,CAAC,IAAI,CAAC,CAIzB;IAED;;;;OAIG;IACH,qBAAqB,CAAC,OAAO,EAHlB,OAAO,cAAc,EAAE,OAAO,GAAG,OAAO,wBAAwB,EAAE,OAGhD,GAFhB,OAAO,CAenB;CACF"}
|