@gnwebsoft/ui 3.0.7 → 4.0.0

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.
Files changed (46) hide show
  1. package/dist/AsyncSelectPayload-B9-6l33R.d.cts +10 -0
  2. package/dist/AsyncSelectPayload-B9-6l33R.d.ts +10 -0
  3. package/dist/chunk-3OPVOWQK.js +140 -0
  4. package/dist/chunk-AEOF2TUF.cjs +2273 -0
  5. package/dist/chunk-ALHC7RLK.js +575 -0
  6. package/dist/chunk-BRRLB22L.js +72 -0
  7. package/dist/chunk-CHZU4PZB.js +2273 -0
  8. package/dist/chunk-EBRUE2WR.cjs +1 -1
  9. package/dist/chunk-HEHPKM4B.cjs +140 -0
  10. package/dist/chunk-K2EJ4YKO.cjs +72 -0
  11. package/dist/chunk-MVPLBJRK.cjs +1 -1
  12. package/dist/chunk-XY4U6A77.cjs +575 -0
  13. package/dist/components/index.cjs +1 -1
  14. package/dist/{enhanced-z-I7EHVS.d.cts → enhanced-CDTkKUlj.d.ts} +5 -5
  15. package/dist/{enhanced-z-I7EHVS.d.ts → enhanced-ZQoS03Cd.d.cts} +5 -5
  16. package/dist/events-BcHVCLBz.d.cts +77 -0
  17. package/dist/events-BcHVCLBz.d.ts +77 -0
  18. package/dist/hooks/index.cjs +3 -3
  19. package/dist/hooks/index.d.cts +3 -2
  20. package/dist/hooks/index.d.ts +3 -2
  21. package/dist/hooks/index.js +1 -1
  22. package/dist/index.cjs +67 -6
  23. package/dist/index.d.cts +5 -3
  24. package/dist/index.d.ts +5 -3
  25. package/dist/index.js +65 -4
  26. package/dist/types/index.cjs +31 -2
  27. package/dist/types/index.d.cts +589 -10
  28. package/dist/types/index.d.ts +589 -10
  29. package/dist/types/index.js +30 -1
  30. package/dist/utils/index.cjs +37 -3
  31. package/dist/utils/index.d.cts +330 -13
  32. package/dist/utils/index.d.ts +330 -13
  33. package/dist/utils/index.js +35 -1
  34. package/dist/wrappers/index.cjs +4 -4
  35. package/dist/wrappers/index.d.cts +41 -19
  36. package/dist/wrappers/index.d.ts +41 -19
  37. package/dist/wrappers/index.js +2 -2
  38. package/package.json +15 -14
  39. package/dist/chunk-4H3AFH7A.js +0 -505
  40. package/dist/chunk-55VNGODF.cjs +0 -2265
  41. package/dist/chunk-BWC3LJIB.js +0 -2265
  42. package/dist/chunk-DE62KYFK.js +0 -122
  43. package/dist/chunk-DEPJRTVT.js +0 -1
  44. package/dist/chunk-FD57PCAC.cjs +0 -1
  45. package/dist/chunk-R2YK4LTT.cjs +0 -122
  46. package/dist/chunk-ZC7FGYL2.cjs +0 -505
@@ -0,0 +1,72 @@
1
+ // src/types/api.ts
2
+ function isJsonObject(value) {
3
+ return typeof value === "object" && value !== null && !Array.isArray(value) && !(value instanceof FormData);
4
+ }
5
+ function isJsonArray(value) {
6
+ return Array.isArray(value);
7
+ }
8
+ function isFormData(value) {
9
+ return value instanceof FormData;
10
+ }
11
+ function isRequestBody(value) {
12
+ return isJsonObject(value) || isJsonArray(value) || isFormData(value);
13
+ }
14
+
15
+ // src/types/events.ts
16
+ function isInputChangeEvent(value) {
17
+ return typeof value === "object" && value !== null && "target" in value && typeof value.target === "object" && value.target !== null && "value" in value.target;
18
+ }
19
+ function isSelectChangeEvent(value) {
20
+ return isInputChangeEvent(value);
21
+ }
22
+ function isFormChangeEvent(value) {
23
+ return isInputChangeEvent(value) || isSelectChangeEvent(value);
24
+ }
25
+ function extractEventValue(eventOrValue, fallbackValue) {
26
+ if (isFormChangeEvent(eventOrValue)) {
27
+ return eventOrValue.target.value;
28
+ }
29
+ if (typeof eventOrValue === "object" && eventOrValue !== null && "target" in eventOrValue && typeof eventOrValue.target === "object" && eventOrValue.target !== null && "value" in eventOrValue.target) {
30
+ return eventOrValue.target.value;
31
+ }
32
+ return eventOrValue ?? fallbackValue;
33
+ }
34
+ function createEventValueExtractor() {
35
+ return (eventOrValue, directValue) => {
36
+ if (directValue !== void 0) {
37
+ return directValue;
38
+ }
39
+ return extractEventValue(eventOrValue);
40
+ };
41
+ }
42
+
43
+ // src/types/utilities.ts
44
+ function brand(value) {
45
+ return value;
46
+ }
47
+ function typedKeys(obj) {
48
+ return Object.keys(obj);
49
+ }
50
+ function typedEntries(obj) {
51
+ return Object.entries(obj);
52
+ }
53
+ function typedValues(obj) {
54
+ return Object.values(obj);
55
+ }
56
+
57
+ export {
58
+ isJsonObject,
59
+ isJsonArray,
60
+ isFormData,
61
+ isRequestBody,
62
+ isInputChangeEvent,
63
+ isSelectChangeEvent,
64
+ isFormChangeEvent,
65
+ extractEventValue,
66
+ createEventValueExtractor,
67
+ brand,
68
+ typedKeys,
69
+ typedEntries,
70
+ typedValues
71
+ };
72
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL3R5cGVzL2FwaS50cyIsICIuLi9zcmMvdHlwZXMvZXZlbnRzLnRzIiwgIi4uL3NyYy90eXBlcy91dGlsaXRpZXMudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogVHlwZS1zYWZlIEFQSSByZXF1ZXN0IGFuZCByZXNwb25zZSB1dGlsaXRpZXNcbiAqIEBtb2R1bGUgdHlwZXMvYXBpXG4gKi9cblxuLyoqXG4gKiBIVFRQIG1ldGhvZHMgc3VwcG9ydGVkIGJ5IHRoZSBBUElcbiAqL1xuZXhwb3J0IHR5cGUgSHR0cE1ldGhvZCA9ICdHRVQnIHwgJ1BPU1QnIHwgJ1BVVCcgfCAnREVMRVRFJyB8ICdQQVRDSCc7XG5cbi8qKlxuICogVmFsaWQgSlNPTiBwcmltaXRpdmUgdHlwZXMgdGhhdCBjYW4gYmUgc2VudCBpbiByZXF1ZXN0IGJvZGllc1xuICovXG5leHBvcnQgdHlwZSBKc29uUHJpbWl0aXZlID0gc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG51bGw7XG5cbi8qKlxuICogVmFsaWQgSlNPTiB2YWx1ZXMgKHByaW1pdGl2ZXMsIG9iamVjdHMsIGFycmF5cylcbiAqL1xuZXhwb3J0IHR5cGUgSnNvblZhbHVlID1cbiAgfCBKc29uUHJpbWl0aXZlXG4gIHwgSnNvbk9iamVjdFxuICB8IEpzb25BcnJheTtcblxuLyoqXG4gKiBKU09OIG9iamVjdCB3aXRoIHN0cmluZyBrZXlzIGFuZCBKU09OIHZhbHVlc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEpzb25PYmplY3Qge1xuICBba2V5OiBzdHJpbmddOiBKc29uVmFsdWU7XG59XG5cbi8qKlxuICogSlNPTiBhcnJheSBjb250YWluaW5nIEpTT04gdmFsdWVzXG4gKi9cbmV4cG9ydCB0eXBlIEpzb25BcnJheSA9IEpzb25WYWx1ZVtdO1xuXG4vKipcbiAqIFR5cGUtc2FmZSByZXF1ZXN0IGJvZHkgLSBtdXN0IGJlIEpTT04tc2VyaWFsaXphYmxlXG4gKi9cbmV4cG9ydCB0eXBlIFJlcXVlc3RCb2R5ID0gSnNvbk9iamVjdCB8IEpzb25BcnJheSB8IEZvcm1EYXRhO1xuXG4vKipcbiAqIFN0YW5kYXJkIEhUVFAgaGVhZGVycyB3aXRoIGtub3duIGhlYWRlciBuYW1lc1xuICovXG5leHBvcnQgdHlwZSBIdHRwSGVhZGVycyA9IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgbWFraW5nIEhUVFAgcmVxdWVzdHMgKGJhc2VkIG9uIGZldGNoIEFQSSlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXF1ZXN0T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBIVFRQIG1ldGhvZCBmb3IgdGhlIHJlcXVlc3RcbiAgICovXG4gIG1ldGhvZDogSHR0cE1ldGhvZDtcbiAgLyoqXG4gICAqIFJlcXVlc3QgaGVhZGVyc1xuICAgKi9cbiAgaGVhZGVycz86IEh0dHBIZWFkZXJzO1xuICAvKipcbiAgICogUmVxdWVzdCBib2R5IChzdHJpbmcgZm9yIEpTT04sIEZvcm1EYXRhIGZvciBmaWxlIHVwbG9hZHMpXG4gICAqL1xuICBib2R5Pzogc3RyaW5nIHwgRm9ybURhdGE7XG4gIC8qKlxuICAgKiBSZXF1ZXN0IGNyZWRlbnRpYWxzIG1vZGVcbiAgICovXG4gIGNyZWRlbnRpYWxzPzogUmVxdWVzdENyZWRlbnRpYWxzO1xuICAvKipcbiAgICogUmVxdWVzdCBtb2RlIChjb3JzLCBuby1jb3JzLCBzYW1lLW9yaWdpbilcbiAgICovXG4gIG1vZGU/OiBSZXF1ZXN0TW9kZTtcbiAgLyoqXG4gICAqIENhY2hlIG1vZGUgZm9yIHRoZSByZXF1ZXN0XG4gICAqL1xuICBjYWNoZT86IFJlcXVlc3RDYWNoZTtcbiAgLyoqXG4gICAqIFJlZGlyZWN0IG1vZGUgZm9yIHRoZSByZXF1ZXN0XG4gICAqL1xuICByZWRpcmVjdD86IFJlcXVlc3RSZWRpcmVjdDtcbiAgLyoqXG4gICAqIFJlZmVycmVyIHBvbGljeSBmb3IgdGhlIHJlcXVlc3RcbiAgICovXG4gIHJlZmVycmVyUG9saWN5PzogUmVmZXJyZXJQb2xpY3k7XG4gIC8qKlxuICAgKiBBYm9ydFNpZ25hbCBmb3IgcmVxdWVzdCBjYW5jZWxsYXRpb25cbiAgICovXG4gIHNpZ25hbD86IEFib3J0U2lnbmFsO1xufVxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgQVBJIGNhbGxzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXBpQ2FsbE9wdGlvbnMge1xuICAvKipcbiAgICogQ3VzdG9tIGhlYWRlcnMgdG8gaW5jbHVkZSBpbiB0aGUgcmVxdWVzdFxuICAgKi9cbiAgaGVhZGVycz86IEh0dHBIZWFkZXJzO1xuICAvKipcbiAgICogV2hldGhlciB0byBpbmNsdWRlIGF1dGhlbnRpY2F0aW9uIHRva2VuXG4gICAqIEBkZWZhdWx0VmFsdWUgdHJ1ZVxuICAgKi9cbiAgaW5jbHVkZUF1dGg/OiBib29sZWFuO1xuICAvKipcbiAgICogQWJvcnRTaWduYWwgZm9yIHJlcXVlc3QgY2FuY2VsbGF0aW9uXG4gICAqL1xuICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbiAgLyoqXG4gICAqIEN1c3RvbSBiYXNlIFVSTCAob3ZlcnJpZGVzIGRlZmF1bHQpXG4gICAqL1xuICBiYXNlVXJsPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGZldGNoIG9wZXJhdGlvbnMgd2l0aCBhbnkgYWRkaXRpb25hbCBwYXJhbWV0ZXJzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmV0Y2hPcHRpb25zIGV4dGVuZHMgT21pdDxSZXF1ZXN0SW5pdCwgJ2JvZHknIHwgJ2hlYWRlcnMnPiB7XG4gIC8qKlxuICAgKiBSZXF1ZXN0IGhlYWRlcnNcbiAgICovXG4gIGhlYWRlcnM/OiBIdHRwSGVhZGVycztcbiAgLyoqXG4gICAqIFJlcXVlc3QgYm9keVxuICAgKi9cbiAgYm9keT86IFJlcXVlc3RCb2R5O1xufVxuXG4vKipcbiAqIFR5cGUgZ3VhcmQgdG8gY2hlY2sgaWYgYSB2YWx1ZSBpcyBhIHZhbGlkIEpTT04gb2JqZWN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0pzb25PYmplY3QodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBKc29uT2JqZWN0IHtcbiAgcmV0dXJuIChcbiAgICB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmXG4gICAgdmFsdWUgIT09IG51bGwgJiZcbiAgICAhQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiZcbiAgICAhKHZhbHVlIGluc3RhbmNlb2YgRm9ybURhdGEpXG4gICk7XG59XG5cbi8qKlxuICogVHlwZSBndWFyZCB0byBjaGVjayBpZiBhIHZhbHVlIGlzIGEgdmFsaWQgSlNPTiBhcnJheVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNKc29uQXJyYXkodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBKc29uQXJyYXkge1xuICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG59XG5cbi8qKlxuICogVHlwZSBndWFyZCB0byBjaGVjayBpZiBhIHZhbHVlIGlzIEZvcm1EYXRhXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0Zvcm1EYXRhKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgRm9ybURhdGEge1xuICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBGb3JtRGF0YTtcbn1cblxuLyoqXG4gKiBUeXBlIGd1YXJkIHRvIGNoZWNrIGlmIGEgdmFsdWUgaXMgYSB2YWxpZCByZXF1ZXN0IGJvZHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUmVxdWVzdEJvZHkodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBSZXF1ZXN0Qm9keSB7XG4gIHJldHVybiBpc0pzb25PYmplY3QodmFsdWUpIHx8IGlzSnNvbkFycmF5KHZhbHVlKSB8fCBpc0Zvcm1EYXRhKHZhbHVlKTtcbn1cbiIsICIvKipcbiAqIFR5cGUtc2FmZSBET00gZXZlbnQgYW5kIGhhbmRsZXIgdXRpbGl0aWVzIGZvciBmb3JtIHRyYW5zZm9ybWF0aW9uc1xuICogQG1vZHVsZSB0eXBlcy9ldmVudHNcbiAqL1xuXG5pbXBvcnQgdHlwZSB7IENoYW5nZUV2ZW50LCBTeW50aGV0aWNFdmVudCB9IGZyb20gXCJyZWFjdFwiO1xuXG4vKipcbiAqIEhUTUwgaW5wdXQgZWxlbWVudHMgdGhhdCBzdXBwb3J0IHRoZSBvbkNoYW5nZSBldmVudCB3aXRoIGEgdmFsdWVcbiAqL1xuZXhwb3J0IHR5cGUgSW5wdXRFbGVtZW50ID0gSFRNTElucHV0RWxlbWVudCB8IEhUTUxUZXh0QXJlYUVsZW1lbnQ7XG5cbi8qKlxuICogSFRNTCBzZWxlY3QgZWxlbWVudFxuICovXG5leHBvcnQgdHlwZSBIdG1sU2VsZWN0RWxlbWVudCA9IEhUTUxTZWxlY3RFbGVtZW50O1xuXG4vKipcbiAqIFN0YW5kYXJkIFJlYWN0IGNoYW5nZSBldmVudCBmb3IgaW5wdXQvdGV4dGFyZWEgZWxlbWVudHNcbiAqL1xuZXhwb3J0IHR5cGUgSW5wdXRDaGFuZ2VFdmVudCA9IENoYW5nZUV2ZW50PElucHV0RWxlbWVudD47XG5cbi8qKlxuICogU3RhbmRhcmQgUmVhY3QgY2hhbmdlIGV2ZW50IGZvciBzZWxlY3QgZWxlbWVudHNcbiAqL1xuZXhwb3J0IHR5cGUgU2VsZWN0Q2hhbmdlRXZlbnQgPSBDaGFuZ2VFdmVudDxIdG1sU2VsZWN0RWxlbWVudD47XG5cbi8qKlxuICogVW5pb24gb2YgYWxsIHN0YW5kYXJkIGZvcm0gY2hhbmdlIGV2ZW50c1xuICovXG5leHBvcnQgdHlwZSBGb3JtQ2hhbmdlRXZlbnQgPSBJbnB1dENoYW5nZUV2ZW50IHwgU2VsZWN0Q2hhbmdlRXZlbnQ7XG5cbi8qKlxuICogR2VuZXJpYyBzeW50aGV0aWMgZXZlbnQgZnJvbSBSZWFjdFxuICovXG5leHBvcnQgdHlwZSBHZW5lcmljU3ludGhldGljRXZlbnQgPSBTeW50aGV0aWNFdmVudDxFbGVtZW50PjtcblxuLyoqXG4gKiBWYWx1ZSBleHRyYWN0ZWQgZnJvbSBhbiBldmVudCBvciBwYXNzZWQgZGlyZWN0bHlcbiAqIFRoaXMgY292ZXJzIE1VSSdzIHBhdHRlcm4gb2YgKGV2ZW50LCB2YWx1ZSkgY2FsbGJhY2tzXG4gKi9cbmV4cG9ydCB0eXBlIEV2ZW50T3JWYWx1ZTxUVmFsdWUgPSB1bmtub3duPiA9IFxuICB8IFRWYWx1ZSBcbiAgfCBJbnB1dENoYW5nZUV2ZW50IFxuICB8IFNlbGVjdENoYW5nZUV2ZW50XG4gIHwgR2VuZXJpY1N5bnRoZXRpY0V2ZW50O1xuXG4vKipcbiAqIFRyYW5zZm9ybSBvdXRwdXQgaGFuZGxlciB0aGF0IGFjY2VwdHMgdmFyaW91cyBldmVudCBwYXR0ZXJuc1xuICogU3VwcG9ydHM6XG4gKiAtIFN0YW5kYXJkIG9uQ2hhbmdlOiAoZXZlbnQ6IENoYW5nZUV2ZW50KSA9PiB2b2lkXG4gKiAtIE1VSSBvbkNoYW5nZTogKGV2ZW50OiBDaGFuZ2VFdmVudCwgdmFsdWU6IFQpID0+IHZvaWRcbiAqIC0gRGlyZWN0IHZhbHVlOiAodmFsdWU6IFQpID0+IHZvaWRcbiAqL1xuZXhwb3J0IHR5cGUgVHJhbnNmb3JtT3V0cHV0SGFuZGxlcjxUVmFsdWUgPSB1bmtub3duPiA9IChcbiAgZXZlbnRPclZhbHVlOiBFdmVudE9yVmFsdWU8VFZhbHVlPixcbiAgdmFsdWU/OiBUVmFsdWVcbikgPT4gVFZhbHVlO1xuXG4vKipcbiAqIFRyYW5zZm9ybSBpbnB1dCBoYW5kbGVyIHRoYXQgY29udmVydHMgYSB2YWx1ZSB0byBkaXNwbGF5IGZvcm1hdFxuICovXG5leHBvcnQgdHlwZSBUcmFuc2Zvcm1JbnB1dEhhbmRsZXI8VElucHV0ID0gdW5rbm93biwgVE91dHB1dCA9IHVua25vd24+ID0gKFxuICB2YWx1ZTogVElucHV0XG4pID0+IFRPdXRwdXQ7XG5cbi8qKlxuICogR2VuZXJpYyBldmVudCBoYW5kbGVyIHRoYXQgYWNjZXB0cyByZXN0IHBhcmFtZXRlcnNcbiAqIFVzZWQgZm9yIGZsZXhpYmlsaXR5IGluIGV2ZW50IGhhbmRsaW5nXG4gKi9cbmV4cG9ydCB0eXBlIEdlbmVyaWNFdmVudEhhbmRsZXI8VFJldHVybiA9IHZvaWQ+ID0gKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gVFJldHVybjtcblxuLyoqXG4gKiBUeXBlIGd1YXJkIHRvIGNoZWNrIGlmIGEgdmFsdWUgaXMgYW4gSW5wdXRDaGFuZ2VFdmVudFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNJbnB1dENoYW5nZUV2ZW50KHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgSW5wdXRDaGFuZ2VFdmVudCB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJlxuICAgIHZhbHVlICE9PSBudWxsICYmXG4gICAgJ3RhcmdldCcgaW4gdmFsdWUgJiZcbiAgICB0eXBlb2YgKHZhbHVlIGFzIHsgdGFyZ2V0OiB1bmtub3duIH0pLnRhcmdldCA9PT0gJ29iamVjdCcgJiZcbiAgICAodmFsdWUgYXMgeyB0YXJnZXQ6IHVua25vd24gfSkudGFyZ2V0ICE9PSBudWxsICYmXG4gICAgJ3ZhbHVlJyBpbiAodmFsdWUgYXMgeyB0YXJnZXQ6IHsgdmFsdWU/OiB1bmtub3duIH0gfSkudGFyZ2V0XG4gICk7XG59XG5cbi8qKlxuICogVHlwZSBndWFyZCB0byBjaGVjayBpZiBhIHZhbHVlIGlzIGEgU2VsZWN0Q2hhbmdlRXZlbnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzU2VsZWN0Q2hhbmdlRXZlbnQodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBTZWxlY3RDaGFuZ2VFdmVudCB7XG4gIHJldHVybiBpc0lucHV0Q2hhbmdlRXZlbnQodmFsdWUpOyAvLyBTYW1lIHN0cnVjdHVyZSwgZGlmZmVyZW50IGVsZW1lbnQgdHlwZVxufVxuXG4vKipcbiAqIFR5cGUgZ3VhcmQgdG8gY2hlY2sgaWYgYSB2YWx1ZSBpcyBhbnkgZm9ybSBjaGFuZ2UgZXZlbnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRm9ybUNoYW5nZUV2ZW50KHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgRm9ybUNoYW5nZUV2ZW50IHtcbiAgcmV0dXJuIGlzSW5wdXRDaGFuZ2VFdmVudCh2YWx1ZSkgfHwgaXNTZWxlY3RDaGFuZ2VFdmVudCh2YWx1ZSk7XG59XG5cbi8qKlxuICogRXh0cmFjdCB2YWx1ZSBmcm9tIGV2ZW50IG9yIHJldHVybiB0aGUgdmFsdWUgZGlyZWN0bHlcbiAqIEhhbmRsZXMgdGhlIGNvbW1vbiBwYXR0ZXJuOiB2YWx1ZSA/PyBldmVudD8udGFyZ2V0Py52YWx1ZSA/PyBldmVudFxuICovXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdEV2ZW50VmFsdWU8VFZhbHVlID0gdW5rbm93bj4oXG4gIGV2ZW50T3JWYWx1ZTogRXZlbnRPclZhbHVlPFRWYWx1ZT4sXG4gIGZhbGxiYWNrVmFsdWU/OiBUVmFsdWVcbik6IFRWYWx1ZSB7XG4gIC8vIElmIGl0J3MgYSBmb3JtIGNoYW5nZSBldmVudCwgZXh0cmFjdCB0aGUgdGFyZ2V0IHZhbHVlXG4gIGlmIChpc0Zvcm1DaGFuZ2VFdmVudChldmVudE9yVmFsdWUpKSB7XG4gICAgcmV0dXJuIGV2ZW50T3JWYWx1ZS50YXJnZXQudmFsdWUgYXMgVFZhbHVlO1xuICB9XG4gIFxuICAvLyBJZiBpdCBoYXMgYSB0YXJnZXQudmFsdWUgKGJ1dCBkaWRuJ3QgbWF0Y2ggYWJvdmUgZ3VhcmRzKSwgdHJ5IHRvIGV4dHJhY3QgaXRcbiAgaWYgKFxuICAgIHR5cGVvZiBldmVudE9yVmFsdWUgPT09ICdvYmplY3QnICYmXG4gICAgZXZlbnRPclZhbHVlICE9PSBudWxsICYmXG4gICAgJ3RhcmdldCcgaW4gZXZlbnRPclZhbHVlICYmXG4gICAgdHlwZW9mIGV2ZW50T3JWYWx1ZS50YXJnZXQgPT09ICdvYmplY3QnICYmXG4gICAgZXZlbnRPclZhbHVlLnRhcmdldCAhPT0gbnVsbCAmJlxuICAgICd2YWx1ZScgaW4gZXZlbnRPclZhbHVlLnRhcmdldFxuICApIHtcbiAgICByZXR1cm4gKGV2ZW50T3JWYWx1ZS50YXJnZXQgYXMgeyB2YWx1ZTogVFZhbHVlIH0pLnZhbHVlO1xuICB9XG4gIFxuICAvLyBPdGhlcndpc2UsIHRyZWF0IGl0IGFzIHRoZSB2YWx1ZSBpdHNlbGZcbiAgcmV0dXJuIChldmVudE9yVmFsdWUgPz8gZmFsbGJhY2tWYWx1ZSkgYXMgVFZhbHVlO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIHNhZmUgZXZlbnQgdmFsdWUgZXh0cmFjdG9yIHdpdGggdHlwZSBuYXJyb3dpbmdcbiAqIFVzZWZ1bCBmb3IgTVVJIGNvbXBvbmVudHMgdGhhdCBwYXNzIChldmVudCwgdmFsdWUpIHBhdHRlcm5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUV2ZW50VmFsdWVFeHRyYWN0b3I8VFZhbHVlID0gdW5rbm93bj4oKSB7XG4gIHJldHVybiAoZXZlbnRPclZhbHVlOiBFdmVudE9yVmFsdWU8VFZhbHVlPiwgZGlyZWN0VmFsdWU/OiBUVmFsdWUpOiBUVmFsdWUgPT4ge1xuICAgIC8vIElmIGEgZGlyZWN0IHZhbHVlIGlzIHByb3ZpZGVkIChNVUkgcGF0dGVybiksIHVzZSBpdFxuICAgIGlmIChkaXJlY3RWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZGlyZWN0VmFsdWU7XG4gICAgfVxuICAgIFxuICAgIHJldHVybiBleHRyYWN0RXZlbnRWYWx1ZShldmVudE9yVmFsdWUpO1xuICB9O1xufVxuIiwgIi8qKlxuICogVXRpbGl0eSB0eXBlcyBhbmQgdHlwZSBoZWxwZXJzIGZvciBlbmhhbmNlZCB0eXBlIHNhZmV0eVxuICogXG4gKiBAcGFja2FnZURvY3VtZW50YXRpb25cbiAqL1xuXG4vKipcbiAqIE1ha2VzIGFsbCBwcm9wZXJ0aWVzIG9mIFQgcmVxdWlyZWQgYW5kIG5vbi1udWxsYWJsZVxuICogXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaW50ZXJmYWNlIFVzZXIge1xuICogICBpZD86IHN0cmluZztcbiAqICAgbmFtZT86IHN0cmluZyB8IG51bGw7XG4gKiB9XG4gKiBcbiAqIHR5cGUgUmVxdWlyZWRVc2VyID0gRGVlcFJlcXVpcmVkPFVzZXI+O1xuICogLy8geyBpZDogc3RyaW5nOyBuYW1lOiBzdHJpbmcgfVxuICogYGBgXG4gKiBcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IHR5cGUgRGVlcFJlcXVpcmVkPFQ+ID0ge1xuICBbUCBpbiBrZXlvZiBUXS0/OiBOb25OdWxsYWJsZTxUW1BdPjtcbn07XG5cbi8qKlxuICogTWFrZXMgYWxsIHByb3BlcnRpZXMgb2YgVCBvcHRpb25hbFxuICogXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaW50ZXJmYWNlIFVzZXIge1xuICogICBpZDogc3RyaW5nO1xuICogICBuYW1lOiBzdHJpbmc7XG4gKiB9XG4gKiBcbiAqIHR5cGUgUGFydGlhbFVzZXIgPSBEZWVwUGFydGlhbDxVc2VyPjtcbiAqIC8vIHsgaWQ/OiBzdHJpbmc7IG5hbWU/OiBzdHJpbmcgfVxuICogYGBgXG4gKiBcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IHR5cGUgRGVlcFBhcnRpYWw8VD4gPSB7XG4gIFtQIGluIGtleW9mIFRdPzogVFtQXSBleHRlbmRzIG9iamVjdFxuICAgID8gRGVlcFBhcnRpYWw8VFtQXT5cbiAgICA6IFRbUF07XG59O1xuXG4vKipcbiAqIE1ha2VzIGFsbCBwcm9wZXJ0aWVzIG9mIFQgcmVhZG9ubHkgZGVlcGx5XG4gKiBcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbnRlcmZhY2UgVXNlciB7XG4gKiAgIGlkOiBzdHJpbmc7XG4gKiAgIHByb2ZpbGU6IHtcbiAqICAgICBuYW1lOiBzdHJpbmc7XG4gKiAgIH07XG4gKiB9XG4gKiBcbiAqIHR5cGUgUmVhZG9ubHlVc2VyID0gRGVlcFJlYWRvbmx5PFVzZXI+O1xuICogLy8geyByZWFkb25seSBpZDogc3RyaW5nOyByZWFkb25seSBwcm9maWxlOiB7IHJlYWRvbmx5IG5hbWU6IHN0cmluZyB9IH1cbiAqIGBgYFxuICogXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIERlZXBSZWFkb25seTxUPiA9IHtcbiAgcmVhZG9ubHkgW1AgaW4ga2V5b2YgVF06IFRbUF0gZXh0ZW5kcyBvYmplY3RcbiAgICA/IERlZXBSZWFkb25seTxUW1BdPlxuICAgIDogVFtQXTtcbn07XG5cbi8qKlxuICogRXh0cmFjdHMga2V5cyBmcm9tIFQgdGhhdCBhcmUgbm90IHVuZGVmaW5lZFxuICogXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaW50ZXJmYWNlIFVzZXIge1xuICogICBpZDogc3RyaW5nO1xuICogICBuYW1lPzogc3RyaW5nO1xuICogICBlbWFpbDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICogfVxuICogXG4gKiB0eXBlIFJlcXVpcmVkS2V5cyA9IFJlcXVpcmVkS2V5czxVc2VyPjtcbiAqIC8vICdpZCdcbiAqIGBgYFxuICogXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIFJlcXVpcmVkS2V5czxUPiA9IHtcbiAgW0sgaW4ga2V5b2YgVF0tPzogdW5kZWZpbmVkIGV4dGVuZHMgVFtLXSA/IG5ldmVyIDogSztcbn1ba2V5b2YgVF07XG5cbi8qKlxuICogRXh0cmFjdHMga2V5cyBmcm9tIFQgdGhhdCBjYW4gYmUgdW5kZWZpbmVkXG4gKiBcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbnRlcmZhY2UgVXNlciB7XG4gKiAgIGlkOiBzdHJpbmc7XG4gKiAgIG5hbWU/OiBzdHJpbmc7XG4gKiAgIGVtYWlsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gKiB9XG4gKiBcbiAqIHR5cGUgT3B0S2V5cyA9IE9wdGlvbmFsS2V5czxVc2VyPjtcbiAqIC8vICduYW1lJyB8ICdlbWFpbCdcbiAqIGBgYFxuICogXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIE9wdGlvbmFsS2V5czxUPiA9IHtcbiAgW0sgaW4ga2V5b2YgVF0tPzogdW5kZWZpbmVkIGV4dGVuZHMgVFtLXSA/IEsgOiBuZXZlcjtcbn1ba2V5b2YgVF07XG5cbi8qKlxuICogTWFrZXMgc3BlY2lmaWVkIGtleXMgSyBvZiB0eXBlIFQgcmVxdWlyZWRcbiAqIFxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGludGVyZmFjZSBVc2VyIHtcbiAqICAgaWQ/OiBzdHJpbmc7XG4gKiAgIG5hbWU/OiBzdHJpbmc7XG4gKiAgIGVtYWlsPzogc3RyaW5nO1xuICogfVxuICogXG4gKiB0eXBlIFVzZXJXaXRoSWQgPSBSZXF1aXJlS2V5czxVc2VyLCAnaWQnIHwgJ2VtYWlsJz47XG4gKiAvLyB7IGlkOiBzdHJpbmc7IG5hbWU/OiBzdHJpbmc7IGVtYWlsOiBzdHJpbmcgfVxuICogYGBgXG4gKiBcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IHR5cGUgUmVxdWlyZUtleXM8VCwgSyBleHRlbmRzIGtleW9mIFQ+ID0gT21pdDxULCBLPiAmXG4gIFJlcXVpcmVkPFBpY2s8VCwgSz4+O1xuXG4vKipcbiAqIE1ha2VzIHNwZWNpZmllZCBrZXlzIEsgb2YgdHlwZSBUIG9wdGlvbmFsXG4gKiBcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbnRlcmZhY2UgVXNlciB7XG4gKiAgIGlkOiBzdHJpbmc7XG4gKiAgIG5hbWU6IHN0cmluZztcbiAqICAgZW1haWw6IHN0cmluZztcbiAqIH1cbiAqIFxuICogdHlwZSBVc2VyVXBkYXRlID0gUGFydGlhbEtleXM8VXNlciwgJ25hbWUnIHwgJ2VtYWlsJz47XG4gKiAvLyB7IGlkOiBzdHJpbmc7IG5hbWU/OiBzdHJpbmc7IGVtYWlsPzogc3RyaW5nIH1cbiAqIGBgYFxuICogXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIFBhcnRpYWxLZXlzPFQsIEsgZXh0ZW5kcyBrZXlvZiBUPiA9IE9taXQ8VCwgSz4gJlxuICBQYXJ0aWFsPFBpY2s8VCwgSz4+O1xuXG4vKipcbiAqIEV4Y2x1ZGVzIGtleXMgSyBmcm9tIHR5cGUgVFxuICogXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaW50ZXJmYWNlIFVzZXIge1xuICogICBpZDogc3RyaW5nO1xuICogICBwYXNzd29yZDogc3RyaW5nO1xuICogICBlbWFpbDogc3RyaW5nO1xuICogfVxuICogXG4gKiB0eXBlIFB1YmxpY1VzZXIgPSBFeGNsdWRlS2V5czxVc2VyLCAncGFzc3dvcmQnPjtcbiAqIC8vIHsgaWQ6IHN0cmluZzsgZW1haWw6IHN0cmluZyB9XG4gKiBgYGBcbiAqIFxuICogQHB1YmxpY1xuICovXG5leHBvcnQgdHlwZSBFeGNsdWRlS2V5czxULCBLIGV4dGVuZHMga2V5b2YgVD4gPSBPbWl0PFQsIEs+O1xuXG4vKipcbiAqIFBpY2tzIG9ubHkga2V5cyBLIGZyb20gdHlwZSBUXG4gKiBcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbnRlcmZhY2UgVXNlciB7XG4gKiAgIGlkOiBzdHJpbmc7XG4gKiAgIG5hbWU6IHN0cmluZztcbiAqICAgZW1haWw6IHN0cmluZztcbiAqIH1cbiAqIFxuICogdHlwZSBVc2VyQ3JlZGVudGlhbHMgPSBQaWNrS2V5czxVc2VyLCAnZW1haWwnPjtcbiAqIC8vIHsgZW1haWw6IHN0cmluZyB9XG4gKiBgYGBcbiAqIFxuICogQHB1YmxpY1xuICovXG5leHBvcnQgdHlwZSBQaWNrS2V5czxULCBLIGV4dGVuZHMga2V5b2YgVD4gPSBQaWNrPFQsIEs+O1xuXG4vKipcbiAqIEV4dHJhY3RzIHRoZSB2YWx1ZSB0eXBlIGZyb20gYW4gYXJyYXkgdHlwZVxuICogXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogdHlwZSBTdHJpbmdBcnJheSA9IHN0cmluZ1tdO1xuICogdHlwZSBJdGVtID0gQXJyYXlFbGVtZW50PFN0cmluZ0FycmF5PjtcbiAqIC8vIHN0cmluZ1xuICogYGBgXG4gKiBcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IHR5cGUgQXJyYXlFbGVtZW50PFQ+ID0gVCBleHRlbmRzIHJlYWRvbmx5IChpbmZlciBFKVtdID8gRSA6IG5ldmVyO1xuXG4vKipcbiAqIEV4dHJhY3RzIHRoZSByZXR1cm4gdHlwZSBvZiBhbiBhc3luYyBmdW5jdGlvblxuICogXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogYXN5bmMgZnVuY3Rpb24gZ2V0VXNlcigpOiBQcm9taXNlPFVzZXI+IHtcbiAqICAgcmV0dXJuIHsgaWQ6ICcxJywgbmFtZTogJ0pvaG4nIH07XG4gKiB9XG4gKiBcbiAqIHR5cGUgVXNlciA9IEFzeW5jUmV0dXJuVHlwZTx0eXBlb2YgZ2V0VXNlcj47XG4gKiAvLyBVc2VyXG4gKiBgYGBcbiAqIFxuICogQHB1YmxpY1xuICovXG5leHBvcnQgdHlwZSBBc3luY1JldHVyblR5cGU8VCBleHRlbmRzICguLi5hcmdzOiByZWFkb25seSB1bmtub3duW10pID0+IFByb21pc2U8dW5rbm93bj4+ID1cbiAgVCBleHRlbmRzICguLi5hcmdzOiByZWFkb25seSB1bmtub3duW10pID0+IFByb21pc2U8aW5mZXIgUj4gPyBSIDogbmV2ZXI7XG5cbi8qKlxuICogTWFrZXMgYSB0eXBlIG51bGxhYmxlIChhZGRzIG51bGwpXG4gKiBcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiB0eXBlIFVzZXJuYW1lID0gc3RyaW5nO1xuICogdHlwZSBOdWxsYWJsZVVzZXJuYW1lID0gTnVsbGFibGU8VXNlcm5hbWU+O1xuICogLy8gc3RyaW5nIHwgbnVsbFxuICogYGBgXG4gKiBcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IHR5cGUgTnVsbGFibGU8VD4gPSBUIHwgbnVsbDtcblxuLyoqXG4gKiBNYWtlcyBhIHR5cGUgb3B0aW9uYWwgKGFkZHMgdW5kZWZpbmVkKVxuICogXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogdHlwZSBVc2VybmFtZSA9IHN0cmluZztcbiAqIHR5cGUgT3B0aW9uYWxVc2VybmFtZSA9IE1heWJlPFVzZXJuYW1lPjtcbiAqIC8vIHN0cmluZyB8IHVuZGVmaW5lZFxuICogYGBgXG4gKiBcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IHR5cGUgTWF5YmU8VD4gPSBUIHwgdW5kZWZpbmVkO1xuXG4vKipcbiAqIE1ha2VzIGEgdHlwZSBudWxsaXNoIChhZGRzIG51bGwgYW5kIHVuZGVmaW5lZClcbiAqIFxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIHR5cGUgVXNlcm5hbWUgPSBzdHJpbmc7XG4gKiB0eXBlIE51bGxpc2hVc2VybmFtZSA9IE51bGxpc2g8VXNlcm5hbWU+O1xuICogLy8gc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZFxuICogYGBgXG4gKiBcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IHR5cGUgTnVsbGlzaDxUPiA9IFQgfCBudWxsIHwgdW5kZWZpbmVkO1xuXG4vKipcbiAqIENyZWF0ZXMgYSB1bmlvbiBvZiBhbGwgcG9zc2libGUgcGF0aHMgdGhyb3VnaCBhbiBvYmplY3QgdHlwZVxuICogXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaW50ZXJmYWNlIFVzZXIge1xuICogICBwcm9maWxlOiB7XG4gKiAgICAgbmFtZTogc3RyaW5nO1xuICogICAgIGFkZHJlc3M6IHtcbiAqICAgICAgIGNpdHk6IHN0cmluZztcbiAqICAgICB9O1xuICogICB9O1xuICogfVxuICogXG4gKiB0eXBlIFBhdGhzID0gT2JqZWN0UGF0aHM8VXNlcj47XG4gKiAvLyAncHJvZmlsZScgfCAncHJvZmlsZS5uYW1lJyB8ICdwcm9maWxlLmFkZHJlc3MnIHwgJ3Byb2ZpbGUuYWRkcmVzcy5jaXR5J1xuICogYGBgXG4gKiBcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IHR5cGUgT2JqZWN0UGF0aHM8VD4gPSB7XG4gIFtLIGluIGtleW9mIFQgJiBzdHJpbmddOiBUW0tdIGV4dGVuZHMgb2JqZWN0XG4gICAgPyBLIHwgYCR7S30uJHtPYmplY3RQYXRoczxUW0tdPn1gXG4gICAgOiBLO1xufVtrZXlvZiBUICYgc3RyaW5nXTtcblxuLyoqXG4gKiBNZXJnZXMgdHdvIHR5cGVzLCB3aXRoIHByb3BlcnRpZXMgZnJvbSBCIG92ZXJyaWRpbmcgdGhvc2UgaW4gQVxuICogXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaW50ZXJmYWNlIEEge1xuICogICBpZDogbnVtYmVyO1xuICogICBuYW1lOiBzdHJpbmc7XG4gKiB9XG4gKiBcbiAqIGludGVyZmFjZSBCIHtcbiAqICAgaWQ6IHN0cmluZztcbiAqICAgZW1haWw6IHN0cmluZztcbiAqIH1cbiAqIFxuICogdHlwZSBNZXJnZWQgPSBNZXJnZTxBLCBCPjtcbiAqIC8vIHsgaWQ6IHN0cmluZzsgbmFtZTogc3RyaW5nOyBlbWFpbDogc3RyaW5nIH1cbiAqIGBgYFxuICogXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIE1lcmdlPEEsIEI+ID0gT21pdDxBLCBrZXlvZiBCPiAmIEI7XG5cbi8qKlxuICogRW5zdXJlcyBhIHR5cGUgaXMgc2VyaWFsaXphYmxlIChubyBmdW5jdGlvbnMsIHN5bWJvbHMsIHVuZGVmaW5lZClcbiAqIFxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGludGVyZmFjZSBEYXRhIHtcbiAqICAgaWQ6IHN0cmluZztcbiAqICAgY2FsbGJhY2s6ICgpID0+IHZvaWQ7XG4gKiAgIHZhbHVlOiBudW1iZXI7XG4gKiB9XG4gKiBcbiAqIHR5cGUgU2VyaWFsaXphYmxlRGF0YSA9IFNlcmlhbGl6YWJsZTxEYXRhPjtcbiAqIC8vIHsgaWQ6IHN0cmluZzsgdmFsdWU6IG51bWJlciB9XG4gKiBgYGBcbiAqIFxuICogQHB1YmxpY1xuICovXG5leHBvcnQgdHlwZSBTZXJpYWxpemFibGU8VD4gPSB7XG4gIFtLIGluIGtleW9mIFQgYXMgVFtLXSBleHRlbmRzICguLi5hcmdzOiByZWFkb25seSB1bmtub3duW10pID0+IHVua25vd25cbiAgICA/IG5ldmVyXG4gICAgOiBUW0tdIGV4dGVuZHMgc3ltYm9sXG4gICAgPyBuZXZlclxuICAgIDogVFtLXSBleHRlbmRzIHVuZGVmaW5lZFxuICAgID8gbmV2ZXJcbiAgICA6IEtdOiBUW0tdIGV4dGVuZHMgb2JqZWN0ID8gU2VyaWFsaXphYmxlPFRbS10+IDogVFtLXTtcbn07XG5cbi8qKlxuICogQ29udmVydHMgYSB1bmlvbiB0eXBlIHRvIGFuIGludGVyc2VjdGlvbiB0eXBlXG4gKiBcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiB0eXBlIFVuaW9uID0geyBhOiBzdHJpbmcgfSB8IHsgYjogbnVtYmVyIH07XG4gKiB0eXBlIEludGVyc2VjdGlvbiA9IFVuaW9uVG9JbnRlcnNlY3Rpb248VW5pb24+O1xuICogLy8geyBhOiBzdHJpbmcgfSAmIHsgYjogbnVtYmVyIH1cbiAqIGBgYFxuICogXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIFVuaW9uVG9JbnRlcnNlY3Rpb248VT4gPSAoXG4gIFUgZXh0ZW5kcyB1bmtub3duID8gKGs6IFUpID0+IHZvaWQgOiBuZXZlclxuKSBleHRlbmRzIChrOiBpbmZlciBJKSA9PiB2b2lkXG4gID8gSVxuICA6IG5ldmVyO1xuXG4vKipcbiAqIEdldHMgYWxsIGtleXMgb2YgVCB3aG9zZSB2YWx1ZXMgZXh0ZW5kIFZcbiAqIFxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGludGVyZmFjZSBVc2VyIHtcbiAqICAgaWQ6IHN0cmluZztcbiAqICAgYWdlOiBudW1iZXI7XG4gKiAgIG5hbWU6IHN0cmluZztcbiAqICAgYWN0aXZlOiBib29sZWFuO1xuICogfVxuICogXG4gKiB0eXBlIFN0cmluZ0tleXMgPSBLZXlzT2ZUeXBlPFVzZXIsIHN0cmluZz47XG4gKiAvLyAnaWQnIHwgJ25hbWUnXG4gKiBgYGBcbiAqIFxuICogQHB1YmxpY1xuICovXG5leHBvcnQgdHlwZSBLZXlzT2ZUeXBlPFQsIFY+ID0ge1xuICBbSyBpbiBrZXlvZiBUXTogVFtLXSBleHRlbmRzIFYgPyBLIDogbmV2ZXI7XG59W2tleW9mIFRdO1xuXG4vKipcbiAqIEVuc3VyZXMgYSB2YWx1ZSBpcyBleGFjdGx5IHRoZSB0eXBlIFQgKG5vIHdpZGVyIHR5cGVzIGFsbG93ZWQpXG4gKiBcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBjb25maWc6IEV4YWN0PHsgZGVidWc6IGJvb2xlYW4gfT4gPSB7XG4gKiAgIGRlYnVnOiB0cnVlLFxuICogICAvLyBleHRyYTogJ3ZhbHVlJyAgLy8gXHUyNzRDIEVycm9yOiBleHRyYSBwcm9wZXJ0eSBub3QgYWxsb3dlZFxuICogfTtcbiAqIGBgYFxuICogXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIEV4YWN0PFQsIFNoYXBlID0gVD4gPSBUIGV4dGVuZHMgU2hhcGVcbiAgPyBFeGNsdWRlPGtleW9mIFQsIGtleW9mIFNoYXBlPiBleHRlbmRzIG5ldmVyXG4gICAgPyBUXG4gICAgOiBuZXZlclxuICA6IG5ldmVyO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBicmFuZGVkIHR5cGUgZm9yIG5vbWluYWwgdHlwaW5nXG4gKiBUaGlzIHByZXZlbnRzIG1peGluZyB2YWx1ZXMgb2YgdGhlIHNhbWUgcHJpbWl0aXZlIHR5cGVcbiAqIFxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIHR5cGUgVXNlcklkID0gQnJhbmQ8c3RyaW5nLCAnVXNlcklkJz47XG4gKiB0eXBlIFByb2R1Y3RJZCA9IEJyYW5kPHN0cmluZywgJ1Byb2R1Y3RJZCc+O1xuICogXG4gKiBjb25zdCB1c2VySWQ6IFVzZXJJZCA9ICcxMjMnIGFzIFVzZXJJZDtcbiAqIGNvbnN0IHByb2R1Y3RJZDogUHJvZHVjdElkID0gJzQ1NicgYXMgUHJvZHVjdElkO1xuICogXG4gKiAvLyBcdTI3NEMgVHlwZSBlcnJvcjogVXNlcklkIGlzIG5vdCBhc3NpZ25hYmxlIHRvIFByb2R1Y3RJZFxuICogY29uc3QgdGVzdDogUHJvZHVjdElkID0gdXNlcklkO1xuICogYGBgXG4gKiBcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IHR5cGUgQnJhbmQ8VCwgVEJyYW5kIGV4dGVuZHMgc3RyaW5nPiA9IFQgJiB7XG4gIHJlYWRvbmx5IF9fYnJhbmQ6IFRCcmFuZDtcbn07XG5cbi8qKlxuICogSGVscGVyIHRvIGNyZWF0ZSBhIGJyYW5kZWQgdmFsdWVcbiAqIFxuICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIGJyYW5kXG4gKiBAcmV0dXJucyBUaGUgdmFsdWUgYXMgYSBicmFuZGVkIHR5cGVcbiAqIFxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIHR5cGUgVXNlcklkID0gQnJhbmQ8c3RyaW5nLCAnVXNlcklkJz47XG4gKiBjb25zdCBpZCA9IGJyYW5kPHN0cmluZywgJ1VzZXJJZCc+KCd1c2VyLTEyMycpO1xuICogLy8gaWQgaGFzIHR5cGUgVXNlcklkXG4gKiBgYGBcbiAqIFxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gYnJhbmQ8VCwgVEJyYW5kIGV4dGVuZHMgc3RyaW5nPih2YWx1ZTogVCk6IEJyYW5kPFQsIFRCcmFuZD4ge1xuICByZXR1cm4gdmFsdWUgYXMgQnJhbmQ8VCwgVEJyYW5kPjtcbn1cblxuLyoqXG4gKiBSZW1vdmVzIGJyYW5kaW5nIGZyb20gYSBicmFuZGVkIHR5cGVcbiAqIFxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIHR5cGUgVXNlcklkID0gQnJhbmQ8c3RyaW5nLCAnVXNlcklkJz47XG4gKiB0eXBlIFBsYWluSWQgPSBVbmJyYW5kPFVzZXJJZD47XG4gKiAvLyBzdHJpbmdcbiAqIGBgYFxuICogXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIFVuYnJhbmQ8VD4gPSBUIGV4dGVuZHMgaW5mZXIgVSAmIHsgcmVhZG9ubHkgX19icmFuZDogc3RyaW5nIH0gPyBVIDogVDtcblxuLyoqXG4gKiBUeXBlLXNhZmUgT2JqZWN0LmtleXMgdGhhdCBwcmVzZXJ2ZXMga2V5IHR5cGVzXG4gKiBcbiAqIEBwYXJhbSBvYmogLSBUaGUgb2JqZWN0IHRvIGdldCBrZXlzIGZyb21cbiAqIEByZXR1cm5zIEFycmF5IG9mIGtleXMgd2l0aCBwcm9wZXIgdHlwZVxuICogXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgdXNlciA9IHsgaWQ6ICcxJywgbmFtZTogJ0pvaG4nIH0gYXMgY29uc3Q7XG4gKiBjb25zdCBrZXlzID0gdHlwZWRLZXlzKHVzZXIpO1xuICogLy8ga2V5cyBoYXMgdHlwZTogKCdpZCcgfCAnbmFtZScpW11cbiAqIGBgYFxuICogXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0eXBlZEtleXM8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+PihcbiAgb2JqOiBUXG4pOiBBcnJheTxrZXlvZiBUPiB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmopIGFzIEFycmF5PGtleW9mIFQ+O1xufVxuXG4vKipcbiAqIFR5cGUtc2FmZSBPYmplY3QuZW50cmllcyB0aGF0IHByZXNlcnZlcyBrZXkgYW5kIHZhbHVlIHR5cGVzXG4gKiBcbiAqIEBwYXJhbSBvYmogLSBUaGUgb2JqZWN0IHRvIGdldCBlbnRyaWVzIGZyb21cbiAqIEByZXR1cm5zIEFycmF5IG9mIFtrZXksIHZhbHVlXSB0dXBsZXMgd2l0aCBwcm9wZXIgdHlwZXNcbiAqIFxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHVzZXIgPSB7IGlkOiAnMScsIGFnZTogMzAgfSBhcyBjb25zdDtcbiAqIGNvbnN0IGVudHJpZXMgPSB0eXBlZEVudHJpZXModXNlcik7XG4gKiAvLyBlbnRyaWVzIGhhcyB0eXBlOiBbJ2lkJywgJzEnXSB8IFsnYWdlJywgMzBdXG4gKiBgYGBcbiAqIFxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gdHlwZWRFbnRyaWVzPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oXG4gIG9iajogVFxuKTogQXJyYXk8W2tleW9mIFQsIFRba2V5b2YgVF1dPiB7XG4gIHJldHVybiBPYmplY3QuZW50cmllcyhvYmopIGFzIEFycmF5PFtrZXlvZiBULCBUW2tleW9mIFRdXT47XG59XG5cbi8qKlxuICogVHlwZS1zYWZlIE9iamVjdC52YWx1ZXMgdGhhdCBwcmVzZXJ2ZXMgdmFsdWUgdHlwZXNcbiAqIFxuICogQHBhcmFtIG9iaiAtIFRoZSBvYmplY3QgdG8gZ2V0IHZhbHVlcyBmcm9tXG4gKiBAcmV0dXJucyBBcnJheSBvZiB2YWx1ZXMgd2l0aCBwcm9wZXIgdHlwZVxuICogXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgdXNlciA9IHsgaWQ6ICcxJywgYWdlOiAzMCB9O1xuICogY29uc3QgdmFsdWVzID0gdHlwZWRWYWx1ZXModXNlcik7XG4gKiAvLyB2YWx1ZXMgaGFzIHR5cGU6IChzdHJpbmcgfCBudW1iZXIpW11cbiAqIGBgYFxuICogXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0eXBlZFZhbHVlczxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KFxuICBvYmo6IFRcbik6IEFycmF5PFRba2V5b2YgVF0+IHtcbiAgcmV0dXJuIE9iamVjdC52YWx1ZXMob2JqKSBhcyBBcnJheTxUW2tleW9mIFRdPjtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7QUErSE8sU0FBUyxhQUFhLE9BQXFDO0FBQ2hFLFNBQ0UsT0FBTyxVQUFVLFlBQ2pCLFVBQVUsUUFDVixDQUFDLE1BQU0sUUFBUSxLQUFLLEtBQ3BCLEVBQUUsaUJBQWlCO0FBRXZCO0FBS08sU0FBUyxZQUFZLE9BQW9DO0FBQzlELFNBQU8sTUFBTSxRQUFRLEtBQUs7QUFDNUI7QUFLTyxTQUFTLFdBQVcsT0FBbUM7QUFDNUQsU0FBTyxpQkFBaUI7QUFDMUI7QUFLTyxTQUFTLGNBQWMsT0FBc0M7QUFDbEUsU0FBTyxhQUFhLEtBQUssS0FBSyxZQUFZLEtBQUssS0FBSyxXQUFXLEtBQUs7QUFDdEU7OztBQ2hGTyxTQUFTLG1CQUFtQixPQUEyQztBQUM1RSxTQUNFLE9BQU8sVUFBVSxZQUNqQixVQUFVLFFBQ1YsWUFBWSxTQUNaLE9BQVEsTUFBOEIsV0FBVyxZQUNoRCxNQUE4QixXQUFXLFFBQzFDLFdBQVksTUFBMEM7QUFFMUQ7QUFLTyxTQUFTLG9CQUFvQixPQUE0QztBQUM5RSxTQUFPLG1CQUFtQixLQUFLO0FBQ2pDO0FBS08sU0FBUyxrQkFBa0IsT0FBMEM7QUFDMUUsU0FBTyxtQkFBbUIsS0FBSyxLQUFLLG9CQUFvQixLQUFLO0FBQy9EO0FBTU8sU0FBUyxrQkFDZCxjQUNBLGVBQ1E7QUFFUixNQUFJLGtCQUFrQixZQUFZLEdBQUc7QUFDbkMsV0FBTyxhQUFhLE9BQU87QUFBQSxFQUM3QjtBQUdBLE1BQ0UsT0FBTyxpQkFBaUIsWUFDeEIsaUJBQWlCLFFBQ2pCLFlBQVksZ0JBQ1osT0FBTyxhQUFhLFdBQVcsWUFDL0IsYUFBYSxXQUFXLFFBQ3hCLFdBQVcsYUFBYSxRQUN4QjtBQUNBLFdBQVEsYUFBYSxPQUE2QjtBQUFBLEVBQ3BEO0FBR0EsU0FBUSxnQkFBZ0I7QUFDMUI7QUFNTyxTQUFTLDRCQUE4QztBQUM1RCxTQUFPLENBQUMsY0FBb0MsZ0JBQWlDO0FBRTNFLFFBQUksZ0JBQWdCLFFBQVc7QUFDN0IsYUFBTztBQUFBLElBQ1Q7QUFFQSxXQUFPLGtCQUFrQixZQUFZO0FBQUEsRUFDdkM7QUFDRjs7O0FDd1NPLFNBQVMsTUFBZ0MsT0FBNEI7QUFDMUUsU0FBTztBQUNUO0FBK0JPLFNBQVMsVUFDZCxLQUNnQjtBQUNoQixTQUFPLE9BQU8sS0FBSyxHQUFHO0FBQ3hCO0FBaUJPLFNBQVMsYUFDZCxLQUM4QjtBQUM5QixTQUFPLE9BQU8sUUFBUSxHQUFHO0FBQzNCO0FBaUJPLFNBQVMsWUFDZCxLQUNtQjtBQUNuQixTQUFPLE9BQU8sT0FBTyxHQUFHO0FBQzFCOyIsCiAgIm5hbWVzIjogW10KfQo=