velocious 1.0.503 → 1.0.505
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/build/application.js +2 -0
- package/build/configuration-types.js +8 -8
- package/build/configuration.js +2 -2
- package/build/database/drivers/sqlite/table-rebuilder.js +35 -0
- package/build/src/application.d.ts.map +1 -1
- package/build/src/application.js +3 -1
- package/build/src/configuration-types.d.ts +17 -17
- package/build/src/configuration-types.d.ts.map +1 -1
- package/build/src/configuration-types.js +9 -9
- package/build/src/configuration.d.ts +4 -4
- package/build/src/configuration.d.ts.map +1 -1
- package/build/src/configuration.js +3 -3
- package/build/src/database/drivers/sqlite/table-rebuilder.d.ts.map +1 -1
- package/build/src/database/drivers/sqlite/table-rebuilder.js +31 -1
- package/build/src/sync/sync-channel-name.d.ts +9 -0
- package/build/src/sync/sync-channel-name.d.ts.map +1 -0
- package/build/src/sync/sync-channel-name.js +10 -0
- package/build/src/sync/sync-client-types.d.ts +10 -7
- package/build/src/sync/sync-client-types.d.ts.map +1 -1
- package/build/src/sync/sync-client-types.js +1 -1
- package/build/src/sync/sync-client.d.ts +1 -1
- package/build/src/sync/sync-client.js +2 -2
- package/build/src/sync/sync-model-change-feed-service.d.ts +6 -1
- package/build/src/sync/sync-model-change-feed-service.d.ts.map +1 -1
- package/build/src/sync/sync-model-change-feed-service.js +15 -4
- package/build/src/sync/sync-publisher-types.d.ts +53 -21
- package/build/src/sync/sync-publisher-types.d.ts.map +1 -1
- package/build/src/sync/sync-publisher-types.js +1 -1
- package/build/src/sync/sync-publisher.d.ts +32 -9
- package/build/src/sync/sync-publisher.d.ts.map +1 -1
- package/build/src/sync/sync-publisher.js +170 -37
- package/build/src/sync/sync-realtime-bridge.d.ts +33 -10
- package/build/src/sync/sync-realtime-bridge.d.ts.map +1 -1
- package/build/src/sync/sync-realtime-bridge.js +51 -12
- package/build/src/sync/sync-scope-attributes.d.ts +15 -0
- package/build/src/sync/sync-scope-attributes.d.ts.map +1 -0
- package/build/src/sync/sync-scope-attributes.js +24 -0
- package/build/src/sync/sync-websocket-channel.d.ts +58 -0
- package/build/src/sync/sync-websocket-channel.d.ts.map +1 -0
- package/build/src/sync/sync-websocket-channel.js +131 -0
- package/build/sync/sync-channel-name.js +10 -0
- package/build/sync/sync-client-types.js +12 -6
- package/build/sync/sync-client.js +1 -1
- package/build/sync/sync-model-change-feed-service.js +17 -3
- package/build/sync/sync-publisher-types.js +32 -12
- package/build/sync/sync-publisher.js +192 -41
- package/build/sync/sync-realtime-bridge.js +56 -11
- package/build/sync/sync-scope-attributes.js +26 -0
- package/build/sync/sync-websocket-channel.js +146 -0
- package/build/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/application.js +2 -0
- package/src/configuration-types.js +8 -8
- package/src/configuration.js +2 -2
- package/src/database/drivers/sqlite/table-rebuilder.js +35 -0
- package/src/sync/sync-channel-name.js +10 -0
- package/src/sync/sync-client-types.js +12 -6
- package/src/sync/sync-client.js +1 -1
- package/src/sync/sync-model-change-feed-service.js +17 -3
- package/src/sync/sync-publisher-types.js +32 -12
- package/src/sync/sync-publisher.js +192 -41
- package/src/sync/sync-realtime-bridge.js +56 -11
- package/src/sync/sync-scope-attributes.js +26 -0
- package/src/sync/sync-websocket-channel.js +146 -0
|
@@ -341,18 +341,18 @@
|
|
|
341
341
|
* One realtime channel subscription descriptor.
|
|
342
342
|
* @typedef {object} VelociousSyncRealtimeChannelDescriptor
|
|
343
343
|
* @property {string} channel - Server channel name to subscribe.
|
|
344
|
-
* @property {Record<string, ?>} [params] - Subscribe params (runtime values
|
|
344
|
+
* @property {Record<string, ?>} [params] - Subscribe params (runtime scope values). The framework injects `authenticationToken` automatically.
|
|
345
345
|
* @property {string} [resourceType] - Default resource/model name for pushed changes that do not carry their own resourceType.
|
|
346
346
|
*/
|
|
347
347
|
/**
|
|
348
|
-
* Realtime push configuration for the sync client. Only the genuinely
|
|
349
|
-
*
|
|
350
|
-
*
|
|
351
|
-
*
|
|
352
|
-
* pull-on-reconnect - is derived.
|
|
348
|
+
* Realtime push configuration for the sync client. Only the genuinely
|
|
349
|
+
* app-owned callback lives here: how to build the websocket client.
|
|
350
|
+
* Everything else - deriving the framework sync channel subscriptions from
|
|
351
|
+
* the declared pull scopes, subscribing, applying pushes through the derived
|
|
352
|
+
* resource applier, echo suppression, and pull-on-reconnect - is derived.
|
|
353
353
|
* @typedef {object} VelociousSyncClientRealtimeConfiguration
|
|
354
354
|
* @property {() => VelociousSyncRealtimeWebsocketClient | Promise<VelociousSyncRealtimeWebsocketClient>} createClient - Builds the (unconnected) websocket client; the framework owns connect/disconnect.
|
|
355
|
-
* @property {(context: ?) => Array<VelociousSyncRealtimeChannelDescriptor> | Promise<Array<VelociousSyncRealtimeChannelDescriptor>>} [channels] -
|
|
355
|
+
* @property {(context: ?) => Array<VelociousSyncRealtimeChannelDescriptor> | Promise<Array<VelociousSyncRealtimeChannelDescriptor>>} [channels] - Deprecated legacy escape hatch: resolves extra app-channel descriptors from the `subscribeRealtime(context)` context. Declared pull scopes subscribe the framework sync channel automatically.
|
|
356
356
|
* @property {() => string | Promise<string>} [localOrigin] - Resolves this device's echo origin; pushed messages with a matching `echoOrigin` are dropped.
|
|
357
357
|
* @property {boolean} [pullOnReconnect] - Fire a coalesced `pull()` when subscriptions become ready or resume after a drop, closing offline gaps. Defaults to true.
|
|
358
358
|
*/
|
|
@@ -475,7 +475,7 @@
|
|
|
475
475
|
* @typedef {typeof import("./authorization/base-resource.js").default} AbilityResourceClassType
|
|
476
476
|
*/
|
|
477
477
|
/**
|
|
478
|
-
* @typedef {function({configuration: import("./configuration.js").default, params: Record<string, ?>, request: import("./http-server/client/request.js").default | import("./http-server/client/websocket-request.js").default, response: import("./http-server/client/response.js").default}) : import("./authorization/ability.js").default | void | Promise<import("./authorization/ability.js").default | void>} AbilityResolverType
|
|
478
|
+
* @typedef {function({configuration: import("./configuration.js").default, params: Record<string, ?>, request: import("./http-server/client/request.js").default | import("./http-server/client/websocket-request.js").default | undefined, response: import("./http-server/client/response.js").default | undefined}) : import("./authorization/ability.js").default | void | Promise<import("./authorization/ability.js").default | void>} AbilityResolverType
|
|
479
479
|
*/
|
|
480
480
|
/**
|
|
481
481
|
* @typedef {function({configuration: import("./configuration.js").default, params: Record<string, ?>, request: import("./http-server/client/request.js").default | import("./http-server/client/websocket-request.js").default | undefined, response: import("./http-server/client/response.js").default | undefined, subscription?: {channel: string, params?: Record<string, ?>}}) : ? | void | Promise<? | void>} TenantResolverType
|
|
@@ -541,4 +541,4 @@
|
|
|
541
541
|
* @property {WebsocketMessageHandlerResolverType} [websocketMessageHandlerResolver] - Resolve a raw websocket message handler for each connection.
|
|
542
542
|
*/
|
|
543
543
|
export const nothing = {};
|
|
544
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJhdGlvbi10eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb25maWd1cmF0aW9uLXR5cGVzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWjs7R0FFRztBQUVIOztHQUVHO0FBRUg7O0dBRUc7QUFFSDs7Ozs7O0dBTUc7QUFFSDs7R0FFRztBQUVIOzs7Ozs7OztHQVFHO0FBRUg7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFFSDs7Ozs7R0FLRztBQUVIOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EyQkc7QUFFSDs7R0FFRztBQUVIOzs7Ozs7R0FNRztBQUVIOzs7O0dBSUc7QUFFSDs7OztHQUlHO0FBRUg7O0dBRUc7QUFFSDs7Ozs7Ozs7Ozs7R0FXRztBQUVIOzs7O0dBSUc7QUFFSDs7Ozs7Ozs7Ozs7R0FXRztBQUVIOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBRUg7Ozs7Ozs7O0dBUUc7QUFFSDs7Ozs7OztHQU9HO0FBRUg7OztHQUdHO0FBRUg7Ozs7Ozs7O0dBUUc7QUFFSDs7R0FFRztBQUVIOztHQUVHO0FBRUg7Ozs7O0dBS0c7QUFFSDs7Ozs7Ozs7O0dBU0c7QUFFSDs7Ozs7OztHQU9HO0FBRUg7O0dBRUc7QUFFSDs7R0FFRztBQUVIOzs7R0FHRztBQUVIOztHQUVHO0FBRUg7Ozs7O0dBS0c7QUFFSDs7Ozs7O0dBTUc7QUFFSDs7O0dBR0c7QUFHSDs7R0FFRztBQUVIOzs7Ozs7R0FNRztBQUVIOzs7Ozs7Ozs7O0dBVUc7QUFFSDs7O0dBR0c7QUFFSDs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSDs7Ozs7OztHQU9HO0FBRUg7Ozs7R0FJRztBQUVIOzs7R0FHRztBQUVIOzs7Ozs7Ozs7OztHQVdHO0FBRUg7Ozs7O0dBS0c7QUFFSDs7Ozs7R0FLRztBQUVIOzs7Ozs7O0dBT0c7QUFFSDs7Ozs7O0dBTUc7QUFFSDs7Ozs7O0dBTUc7QUFFSDs7Ozs7Ozs7Ozs7R0FXRztBQUVIOzs7Ozs7Ozs7Ozs7R0FZRztBQUVIOzs7Ozs7Ozs7R0FTRztBQUVIOzs7Ozs7Ozs7R0FTRztBQUVIOzs7Ozs7Ozs7O0dBVUc7QUFFSDs7R0FFRztBQUVIOztHQUVHO0FBRUg7Ozs7Ozs7R0FPRztBQUVIOzs7Ozs7Ozs7R0FTRztBQUVIOzs7Ozs7O0dBT0c7QUFFSDs7Ozs7Ozs7OztHQVVHO0FBRUg7O0dBRUc7QUFFSDs7Ozs7Ozs7O0dBU0c7QUFFSDs7Ozs7Ozs7Ozs7R0FXRztBQUVIOztHQUVHO0FBRUg7O0dBRUc7QUFFSDs7R0FFRztBQUVIOztHQUVHO0FBRUg7O0dBRUc7QUFFSDs7OztHQUlHO0FBRUg7Ozs7Ozs7O0dBUUc7QUFFSDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMENHO0FBRUgsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG4vKipcbiAqIEBtb2R1bGUgdHlwZXNcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtmdW5jdGlvbih7cmVxdWVzdDogaW1wb3J0KFwiLi9odHRwLXNlcnZlci9jbGllbnQvcmVxdWVzdC5qc1wiKS5kZWZhdWx0IHwgaW1wb3J0KFwiLi9odHRwLXNlcnZlci9jbGllbnQvd2Vic29ja2V0LXJlcXVlc3QuanNcIikuZGVmYXVsdCwgcmVzcG9uc2U6IGltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3Jlc3BvbnNlLmpzXCIpLmRlZmF1bHR9KTogUHJvbWlzZTx2b2lkPn0gQ29yc1R5cGVcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtmdW5jdGlvbih7cmVxdWVzdDogaW1wb3J0KFwiLi9odHRwLXNlcnZlci9jbGllbnQvcmVxdWVzdC5qc1wiKS5kZWZhdWx0IHwgaW1wb3J0KFwiLi9odHRwLXNlcnZlci9jbGllbnQvd2Vic29ja2V0LXJlcXVlc3QuanNcIikuZGVmYXVsdCB8IHVuZGVmaW5lZCwgc3Vic2NyaXB0aW9uPzoge2NoYW5uZWw6IHN0cmluZywgcGFyYW1zPzogUmVjb3JkPHN0cmluZywgPz59LCBjbGllbnQ6IGltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvY2xpZW50L2luZGV4LmpzXCIpLmRlZmF1bHQsIHdlYnNvY2tldFNlc3Npb246IGltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3dlYnNvY2tldC1zZXNzaW9uLmpzXCIpLmRlZmF1bHQsIGNvbmZpZ3VyYXRpb246IGltcG9ydChcIi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0fSk6IHR5cGVvZiBpbXBvcnQoXCIuL2h0dHAtc2VydmVyL3dlYnNvY2tldC1jaGFubmVsLmpzXCIpLmRlZmF1bHQgfCBpbXBvcnQoXCIuL2h0dHAtc2VydmVyL3dlYnNvY2tldC1jaGFubmVsLmpzXCIpLmRlZmF1bHQgfCB2b2lkIHwgUHJvbWlzZTx0eXBlb2YgaW1wb3J0KFwiLi9odHRwLXNlcnZlci93ZWJzb2NrZXQtY2hhbm5lbC5qc1wiKS5kZWZhdWx0IHwgaW1wb3J0KFwiLi9odHRwLXNlcnZlci93ZWJzb2NrZXQtY2hhbm5lbC5qc1wiKS5kZWZhdWx0IHwgdm9pZD59IFdlYnNvY2tldENoYW5uZWxSZXNvbHZlclR5cGVcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFdlYnNvY2tldE1lc3NhZ2VIYW5kbGVyXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKHttZXNzYWdlOiA/LCBzZXNzaW9uOiBpbXBvcnQoXCIuL2h0dHAtc2VydmVyL2NsaWVudC93ZWJzb2NrZXQtc2Vzc2lvbi5qc1wiKS5kZWZhdWx0fSkgOiBQcm9taXNlPHZvaWQ+IHwgdm9pZH0gW29uTWVzc2FnZV0gLSBIYW5kbGVyIGZvciBpbmNvbWluZyB3ZWJzb2NrZXQgbWVzc2FnZXMuXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKHtzZXNzaW9uOiBpbXBvcnQoXCIuL2h0dHAtc2VydmVyL2NsaWVudC93ZWJzb2NrZXQtc2Vzc2lvbi5qc1wiKS5kZWZhdWx0fSkgOiBQcm9taXNlPHZvaWQ+IHwgdm9pZH0gW29uT3Blbl0gLSBIYW5kbGVyIHdoZW4gdGhlIHdlYnNvY2tldCBzZXNzaW9uIG9wZW5zLlxuICogQHByb3BlcnR5IHtmdW5jdGlvbih7c2Vzc2lvbjogaW1wb3J0KFwiLi9odHRwLXNlcnZlci9jbGllbnQvd2Vic29ja2V0LXNlc3Npb24uanNcIikuZGVmYXVsdH0pIDogUHJvbWlzZTx2b2lkPiB8IHZvaWR9IFtvbkNsb3NlXSAtIEhhbmRsZXIgd2hlbiB0aGUgd2Vic29ja2V0IHNlc3Npb24gY2xvc2VzLlxuICogQHByb3BlcnR5IHtmdW5jdGlvbih7ZXJyb3I6IEVycm9yLCBzZXNzaW9uOiBpbXBvcnQoXCIuL2h0dHAtc2VydmVyL2NsaWVudC93ZWJzb2NrZXQtc2Vzc2lvbi5qc1wiKS5kZWZhdWx0fSkgOiBQcm9taXNlPHZvaWQ+IHwgdm9pZH0gW29uRXJyb3JdIC0gSGFuZGxlciB3aGVuIGEgd2Vic29ja2V0IG1lc3NhZ2UgZXJyb3JzLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge2Z1bmN0aW9uKHtyZXF1ZXN0OiBpbXBvcnQoXCIuL2h0dHAtc2VydmVyL2NsaWVudC9yZXF1ZXN0LmpzXCIpLmRlZmF1bHQgfCBpbXBvcnQoXCIuL2h0dHAtc2VydmVyL2NsaWVudC93ZWJzb2NrZXQtcmVxdWVzdC5qc1wiKS5kZWZhdWx0IHwgdW5kZWZpbmVkLCBjbGllbnQ6IGltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvY2xpZW50L2luZGV4LmpzXCIpLmRlZmF1bHQsIGNvbmZpZ3VyYXRpb246IGltcG9ydChcIi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0fSk6IFdlYnNvY2tldE1lc3NhZ2VIYW5kbGVyIHwgdm9pZCB8IFByb21pc2U8V2Vic29ja2V0TWVzc2FnZUhhbmRsZXIgfCB2b2lkPn0gV2Vic29ja2V0TWVzc2FnZUhhbmRsZXJSZXNvbHZlclR5cGVcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHsoaWQ6IHN0cmluZykgPT4ge2RlZmF1bHQ6IHR5cGVvZiBpbXBvcnQoXCIuL2luaXRpYWxpemVyLmpzXCIpLmRlZmF1bHR9fSBJbml0aWFsaXplcnNSZXF1aXJlQ29udGV4dFR5cGVcbiAqIEB0eXBlZGVmIHtJbml0aWFsaXplcnNSZXF1aXJlQ29udGV4dFR5cGUgJiB7XG4gKiAgIGtleXM6ICgpID0+IHN0cmluZ1tdLFxuICogICBpZDogc3RyaW5nXG4gKiB9fSBXZWJwYWNrUmVxdWlyZUNvbnRleHRcbiAqIEB0eXBlZGVmIHt7cmVxdWlyZUNvbnRleHQ6IFdlYnBhY2tSZXF1aXJlQ29udGV4dH19IEluaXRpYWxpemVyc0V4cG9ydFR5cGVcbiAqIEB0eXBlZGVmIHtmdW5jdGlvbih7Y29uZmlndXJhdGlvbjogaW1wb3J0KFwiLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHR9KSA6IFByb21pc2U8SW5pdGlhbGl6ZXJzRXhwb3J0VHlwZT59IEluaXRpYWxpemVyc1R5cGVcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFNxbENvbmZpZ1xuICogQHByb3BlcnR5IHtzdHJpbmd9IFtkYXRhYmFzZV0gLSBEYXRhYmFzZSBuYW1lIGZvciB0aGUgU1FMIGRyaXZlci5cbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBbb3B0aW9uc10gLSBEcml2ZXItc3BlY2lmaWMgY29ubmVjdGlvbiBvcHRpb25zLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbb3B0aW9ucy5lbmNyeXB0XSAtIFdoZXRoZXIgdG8gZW5jcnlwdCB0aGUgY29ubmVjdGlvbiAoTVNTUUwpLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtvcHRpb25zLnNjaGVtYV0gLSBEZWZhdWx0IHNjaGVtYSBmb3IgdW5xdWFsaWZpZWQgdGFibGUgbG9va3VwcyAoTVNTUUwpLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtvcHRpb25zLnNlcnZlck5hbWVdIC0gVExTIFNOSSBzZXJ2ZXIgbmFtZSBvdmVycmlkZSBmb3IgTVNTUUwgKGVtcHR5IHN0cmluZyBkaXNhYmxlcyBTTkkpLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbb3B0aW9ucy50cnVzdFNlcnZlckNlcnRpZmljYXRlXSAtIFdoZXRoZXIgdG8gdHJ1c3QgdGhlIHNlcnZlciBjZXJ0aWZpY2F0ZSAoTVNTUUwpLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtwYXNzd29yZF0gLSBQYXNzd29yZCBmb3IgdGhlIFNRTCB1c2VyLlxuICogQHByb3BlcnR5IHtvYmplY3R9IFtwb29sXSAtIENvbm5lY3Rpb24gcG9vbCBjb25maWd1cmF0aW9uLlxuICogQHByb3BlcnR5IHtudW1iZXIgfCBudWxsfSBbcG9vbC5tYXhdIC0gTWF4aW11bSBudW1iZXIgb2YgY29ubmVjdGlvbnMuIFNldCBudWxsIHRvIGRpc2FibGUgdGhlIGNhcC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbcG9vbC5taW5dIC0gTWluaW11bSBudW1iZXIgb2YgY29ubmVjdGlvbnMuXG4gKiBAcHJvcGVydHkge251bWJlcn0gW3Bvb2wuaWRsZVRpbWVvdXRNaWxsaXNdIC0gSWRsZSB0aW1lb3V0IGJlZm9yZSByZWxlYXNpbmcgYSBjb25uZWN0aW9uLlxuICogQHByb3BlcnR5IHtudW1iZXIgfCBudWxsfSBbcG9vbC5jaGVja291dFRpbWVvdXRNaWxsaXNdIC0gVGltZW91dCB3aGlsZSB3YWl0aW5nIGZvciBhbiBhdmFpbGFibGUgY29ubmVjdGlvbiBhZnRlciB0aGUgbWF4IGNvbm5lY3Rpb24gY2FwIGlzIHJlYWNoZWQuIFNldCBudWxsIHRvIHdhaXQgaW5kZWZpbml0ZWx5LlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtzZXJ2ZXJdIC0gU1FMIHNlcnZlciBob3N0bmFtZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbdXNlcl0gLSBTUUwgdXNlcm5hbWUuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBEYXRhYmFzZVBvb2xDb25maWd1cmF0aW9uXG4gKiBAcHJvcGVydHkge251bWJlciB8IG51bGx9IFtjaGVja291dFRpbWVvdXRNaWxsaXNdIC0gVGltZW91dCB3aGlsZSBhIGNoZWNrb3V0IHdhaXRzIGZvciBhbiBhdmFpbGFibGUgYXN5bmMtdHJhY2tlZCBjb25uZWN0aW9uIGFmdGVyIHRoZSBtYXggbGl2ZSBjb25uZWN0aW9uIGNhcCBpcyByZWFjaGVkLiBTZXQgbnVsbCB0byB3YWl0IGluZGVmaW5pdGVseS4gRGVmYXVsdDogMTAwMDAuXG4gKiBAcHJvcGVydHkge251bWJlciB8IG51bGx9IFtpZGxlVGltZW91dE1pbGxpc10gLSBJZGxlIHRpbWVvdXQgYmVmb3JlIGNsb3NpbmcgYSBjaGVja2VkLWluIGFzeW5jLXRyYWNrZWQgY29ubmVjdGlvbi4gU2V0IG51bGwgdG8gZGlzYWJsZSBpZGxlIHJlYXBpbmcuIERlZmF1bHQ6IDUwMDAuXG4gKiBAcHJvcGVydHkge251bWJlciB8IG51bGx9IFttYXhdIC0gTWF4aW11bSBsaXZlIGFzeW5jLXRyYWNrZWQgY29ubmVjdGlvbnMgZm9yIHRoaXMgcG9vbC4gRGVmYXVsdHMgdG8gMTAuIEV4dHJhIGNoZWNrb3V0cyB3YWl0IHVudGlsIGEgbWF0Y2hpbmcgY29ubmVjdGlvbiBpcyBjaGVja2VkIGluIG9yIGNhcGFjaXR5IGlzIGZyZWVkLiBTZXQgbnVsbCB0byBkaXNhYmxlIHRoZSBjYXAuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBEYXRhYmFzZUNvbmZpZ3VyYXRpb25UeXBlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2RhdGFiYXNlQ2hhcnNldF0gLSBEZWZhdWx0IGNoYXJhY3RlciBzZXQgYXBwbGllZCBieSBgZGI6Y3JlYXRlYCB2aWEgbXlzcWwvbWFyaWFkYiBgQ1JFQVRFIERBVEFCQVNFIC4uLiBDSEFSQUNURVIgU0VUYC4gRGlzdGluY3QgZnJvbSBgY2hhcnNldGAsIHdoaWNoIGlzIHRoZSBjbGllbnQgY29ubmVjdGlvbiBjaGFyc2V0IGZvcndhcmRlZCB0byB0aGUgbXlzcWwyIGRyaXZlci5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbZGF0YWJhc2VDb2xsYXRpb25dIC0gRGVmYXVsdCBjb2xsYXRpb24gYXBwbGllZCBieSBgZGI6Y3JlYXRlYCB2aWEgbXlzcWwvbWFyaWFkYiBgQ1JFQVRFIERBVEFCQVNFIC4uLiBDT0xMQVRFYC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbZGF0YWJhc2VdIC0gRGF0YWJhc2UgbmFtZSBmb3IgdGhpcyBjb25uZWN0aW9uLlxuICogQHByb3BlcnR5IHt0eXBlb2YgaW1wb3J0KFwiLi9kYXRhYmFzZS9kcml2ZXJzL2Jhc2UuanNcIikuZGVmYXVsdH0gW2RyaXZlcl0gLSBEcml2ZXIgY2xhc3MgdG8gdXNlIGZvciB0aGlzIGRhdGFiYXNlLlxuICogQHByb3BlcnR5IHt0eXBlb2YgaW1wb3J0KFwiLi9kYXRhYmFzZS9wb29sL2Jhc2UuanNcIikuZGVmYXVsdH0gW3Bvb2xUeXBlXSAtIFBvb2wgY2xhc3MgdG8gdXNlIGZvciB0aGlzIGRhdGFiYXNlLlxuICogQHByb3BlcnR5IHtmdW5jdGlvbigpIDogP30gW2dldENvbm5lY3Rpb25dIC0gQ3VzdG9tIGNvbm5lY3Rpb24gZmFjdG9yeSBvdmVycmlkZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbaG9zdF0gLSBEYXRhYmFzZSBob3N0LlxuICogQHByb3BlcnR5IHtib29sZWFufSBbbWlncmF0aW9uc10gLSBXaGV0aGVyIG1pZ3JhdGlvbnMgYXJlIGVuYWJsZWQgZm9yIHRoaXMgZGF0YWJhc2UuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3Bhc3N3b3JkXSAtIFBhc3N3b3JkIGZvciB0aGUgZGF0YWJhc2UgdXNlci5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbcG9ydF0gLSBEYXRhYmFzZSBwb3J0LlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtwcmltYXJ5S2V5VHlwZV0gLSBEZWZhdWx0IHR5cGUgZm9yIGltcGxpY2l0IG1pZ3JhdGlvbiBwcmltYXJ5IGtleXMgYW5kIHJlZmVyZW5jZXMuIERlZmF1bHRzIHRvIGB1dWlkYC5cbiAqIEBwcm9wZXJ0eSB7RGF0YWJhc2VQb29sQ29uZmlndXJhdGlvbn0gW3Bvb2xdIC0gVmVsb2Npb3VzIGRhdGFiYXNlIHBvb2wgbGlmZWN5Y2xlIGNvbmZpZ3VyYXRpb24uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW25hbWVdIC0gRnJpZW5kbHkgbmFtZSBmb3IgdGhlIGNvbmZpZ3VyYXRpb24uXG4gKiBAcHJvcGVydHkgeyhmaWxlOiBzdHJpbmcpID0+IHN0cmluZ30gW2xvY2F0ZUZpbGVdIC0gT3B0aW9uYWwgc3FsaXRlLXdlYiBzcWwuanMgd2FzbSByZXNvbHZlciAoYGluaXRTcWxKcyh7bG9jYXRlRmlsZX0pYCkuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtyZWFkT25seV0gLSBXaGV0aGVyIHdyaXRlcyBzaG91bGQgYmUgYmxvY2tlZCBmb3IgdGhpcyBkYXRhYmFzZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbc2NoZW1hXSAtIERlZmF1bHQgc2NoZW1hIGZvciB1bnF1YWxpZmllZCB0YWJsZSBsb29rdXBzIChNU1NRTCkuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtzY2hlbWFDYWNoZV0gLSBXaGV0aGVyIHNjaGVtYSBtZXRhZGF0YSBzaG91bGQgYmUgY2FjaGVkIG9uIHRoZSBkcml2ZXIuIERlZmF1bHRzIHRvIHRydWUuXG4gKiBAcHJvcGVydHkge29iamVjdH0gW3JlY29yZF0gLSBSZWNvcmQtbGV2ZWwgY29uZmlndXJhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3JlY29yZC50cmFuc2FjdGlvbnNdIC0gV2hldGhlciByZWNvcmQgb3BlcmF0aW9ucyBzaG91bGQgdXNlIHRyYW5zYWN0aW9ucy5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3Jlc2V0XSAtIFdoZXRoZXIgdG8gcmVzZXQgdGhlIGRhdGFiYXNlIG9uIHN0YXJ0dXAuXG4gKiBAcHJvcGVydHkge1NxbENvbmZpZ30gW3NxbENvbmZpZ10gLSBEcml2ZXItc3BlY2lmaWMgU1FMIGNvbmZpZy5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3RlbmFudE9ubHldIC0gV2hldGhlciB0aGlzIGRhdGFiYXNlIGlkZW50aWZpZXIgaXMgb25seSBhY3RpdmUgaW5zaWRlIGEgcmVzb2x2ZWQgdGVuYW50IGNvbnRleHQuXG4gKiBAcHJvcGVydHkge1wibXNzcWxcIiB8IFwibXlzcWxcIiB8IFwicGdzcWxcIiB8IFwic3FsaXRlXCJ9IFt0eXBlXSAtIERhdGFiYXNlIHR5cGUgaWRlbnRpZmllci5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbdXNlRGF0YWJhc2VdIC0gRGF0YWJhc2UgdG8gc3dpdGNoIHRvIGFmdGVyIGNvbm5lY3RpbmcuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3VzZXJuYW1lXSAtIFVzZXJuYW1lIGZvciBkYXRhYmFzZSBhdXRoZW50aWNhdGlvbi5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtcImRlYnVnLWxvdy1sZXZlbFwiIHwgXCJkZWJ1Z1wiIHwgXCJpbmZvXCIgfCBcIndhcm5cIiB8IFwiZXJyb3JcIn0gTG9nTGV2ZWxcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IExvZ2dpbmdPdXRwdXRQYXlsb2FkXG4gKiBAcHJvcGVydHkge0xvZ0xldmVsfSBsZXZlbCAtIExvZyBsZXZlbC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBtZXNzYWdlIC0gRm9ybWF0dGVkIG1lc3NhZ2UuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gc3ViamVjdCAtIExvZyBzdWJqZWN0LlxuICogQHByb3BlcnR5IHtEYXRlfSB0aW1lc3RhbXAgLSBUaW1lc3RhbXAuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBMb2dnaW5nT3V0cHV0XG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKExvZ2dpbmdPdXRwdXRQYXlsb2FkKTogUHJvbWlzZTx2b2lkPiB8IHZvaWR9IHdyaXRlIC0gV3JpdGUgYSBsb2cgZW50cnkuXG4gKiBAcHJvcGVydHkge0xvZ0xldmVsW119IFtsZXZlbHNdIC0gRGVmYXVsdCBsZXZlbHMgZm9yIHRoaXMgb3V0cHV0LlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gTG9nZ2luZ091dHB1dENvbmZpZ1xuICogQHByb3BlcnR5IHtMb2dnaW5nT3V0cHV0fSBvdXRwdXQgLSBPdXRwdXQgaW5zdGFuY2UuXG4gKiBAcHJvcGVydHkge0FycmF5PExvZ0xldmVsPn0gW2xldmVsc10gLSBMZXZlbHMgZW5hYmxlZCBmb3IgdGhpcyBvdXRwdXQuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7TG9nZ2luZ091dHB1dENvbmZpZyB8IExvZ2dpbmdPdXRwdXQgfCBpbXBvcnQoXCIuL2xvZ2dlci9iYXNlLWxvZ2dlci5qc1wiKS5kZWZhdWx0fSBMb2dnZXJDb25maWdcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IExvZ2dpbmdDb25maWd1cmF0aW9uXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtjb25zb2xlXSAtIEVuYWJsZS9kaXNhYmxlIGNvbnNvbGUgbG9nZ2luZyBmb3IgcmVxdWVzdCBsb2dnaW5nLiBEZWZhdWx0cyB0byB0cnVlIG91dHNpZGUgb2YgXCJ0ZXN0XCIgYW5kIGZvciBIVFRQIHNlcnZlciBsb2dzLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbZmlsZV0gLSBFbmFibGUvZGlzYWJsZSB3cml0aW5nIGxvZ3MgdG8gYSBmaWxlLiBEZWZhdWx0cyB0byB0cnVlLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtkaXJlY3RvcnldIC0gRGlyZWN0b3J5IHdoZXJlIGxvZyBmaWxlcyBhcmUgc3RvcmVkLiBEZWZhdWx0cyB0byBcIjxwcm9qZWN0Pi9sb2dcIi5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbZmlsZVBhdGhdIC0gRXhwbGljaXQgcGF0aCBmb3IgdGhlIGxvZyBmaWxlLiBEZWZhdWx0cyB0byBcIjxkaXJlY3Rvcnk+LzxlbnZpcm9ubWVudD4ubG9nXCIuXG4gKiBAcHJvcGVydHkge0FycmF5PFwiZGVidWctbG93LWxldmVsXCIgfCBcImRlYnVnXCIgfCBcImluZm9cIiB8IFwid2FyblwiIHwgXCJlcnJvclwiPn0gW2xldmVsc10gLSBPdmVycmlkZSB3aGljaCBsb2cgbGV2ZWxzIGFyZSBlbWl0dGVkLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbZGVidWdMb3dMZXZlbF0gLSBDb252ZW5pZW5jZSBmbGFnIHRvIGluY2x1ZGUgdmVyeSBsb3ctbGV2ZWwgZGVidWcgbG9ncy5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3F1ZXJ5TG9nZ2luZ10gLSBFbmFibGUvZGlzYWJsZSBkYXRhYmFzZSBxdWVyeSBsb2dnaW5nLiBEZWZhdWx0cyB0byB0cnVlIG91dHNpZGUgdGVzdCBhbmQgZmFsc2UgaW4gdGVzdC5cbiAqIEBwcm9wZXJ0eSB7TG9nZ2VyQ29uZmlnW119IFtsb2dnZXJzXSAtIExvZ2dlciBpbnN0YW5jZXMgKGNvbnZlcnRlZCB0byBvdXRwdXRzIHdoZW4gY29uZmlndXJlZCkuXG4gKiBAcHJvcGVydHkge0xvZ2dpbmdPdXRwdXRDb25maWdbXX0gW291dHB1dHNdIC0gRXhwbGljaXQgbG9nZ2VyIG91dHB1dHMgKG92ZXJyaWRlcyBjb25zb2xlL2ZpbGUgZGVmYXVsdHMgd2hlbiBwcm92aWRlZCkuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBTdHJ1Y3R1cmVTcWxDb25maWd1cmF0aW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfSBbZW5hYmxlZEVudmlyb25tZW50c10gLSBFbnZpcm9ubWVudHMgYWxsb3dlZCB0byB3cml0ZSBzdHJ1Y3R1cmUgc3FsIGZpbGVzIGR1cmluZyBhdXRvbWF0aWMgbWlncmF0aW9uIGR1bXBzLlxuICogQHByb3BlcnR5IHtzdHJpbmdbXX0gW2Rpc2FibGVkRW52aXJvbm1lbnRzXSAtIEVudmlyb25tZW50cyB0aGF0IHNob3VsZCBza2lwIHdyaXRpbmcgc3RydWN0dXJlIHNxbCBmaWxlcy5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtcImJlYWNvblwiIHwgXCJwb2xsaW5nXCJ9IEJhY2tncm91bmRKb2JzRGlzcGF0Y2hTdHJhdGVneVxuICpcbiAqIC0gYFwiYmVhY29uXCJgIChkZWZhdWx0KTogZXZlbnQtZHJpdmVuIGRpc3BhdGNoLiBUaGVcbiAqICAgYGJhY2tncm91bmQtam9icy1tYWluYCBwcm9jZXNzIGRyYWlucyB0aGUgcXVldWUgb24gZW5xdWV1ZSwgb25cbiAqICAgd29ya2VyIHJlYWRpbmVzcywgb24gQmVhY29uIGJyb2FkY2FzdHMgKHNvIGNyb3NzLXByb2Nlc3MgZW5xdWV1ZXNcbiAqICAgd2FrZSBpdCksIGFuZCBhcm1zIGEgYHNldFRpbWVvdXRgIGZvciB0aGUgc29vbmVzdCBmdXR1cmUtc2NoZWR1bGVkXG4gKiAgIGpvYi4gRmFsbHMgYmFjayBncmFjZWZ1bGx5IHRvIGRpcmVjdCBpbi1wcm9jZXNzIHRyaWdnZXJpbmcgd2hlblxuICogICBCZWFjb24gaXMgbm90IGNvbmZpZ3VyZWQuXG4gKiAtIGBcInBvbGxpbmdcImA6IGxlZ2FjeSBtb2RlLCBydW5zIGEgZml4ZWQtaW50ZXJ2YWwgcG9sbCBvdmVyIHRoZVxuICogICBgYmFja2dyb3VuZF9qb2JzYCB0YWJsZSAoc2VlIGBwb2xsSW50ZXJ2YWxNc2ApLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gQmFja2dyb3VuZEpvYnNDb25maWd1cmF0aW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2hvc3RdIC0gSG9zdG5hbWUgZm9yIHRoZSBiYWNrZ3JvdW5kIGpvYnMgbWFpbiBwcm9jZXNzLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtwb3J0XSAtIFBvcnQgZm9yIHRoZSBiYWNrZ3JvdW5kIGpvYnMgbWFpbiBwcm9jZXNzLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtkYXRhYmFzZUlkZW50aWZpZXJdIC0gRGF0YWJhc2UgaWRlbnRpZmllciB1c2VkIHRvIHN0b3JlIGJhY2tncm91bmQgam9icy5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbbWF4Q29uY3VycmVudElubGluZUpvYnNdIC0gSG93IG1hbnkgYGZvcmtlZDogZmFsc2VgIGpvYnMgYSBzaW5nbGVcbiAqICAgYGJhY2tncm91bmQtam9icy13b3JrZXJgIHByb2Nlc3MgaXMgYWxsb3dlZCB0byBydW4gaW4gcGFyYWxsZWwuIENvbmN1cnJlbmN5XG4gKiAgIGlzIGF0IHRoZSBKUyBldmVudC1sb29wIGxldmVsOiBldmVyeSBjb25jdXJyZW50IGpvYiBzaGFyZXMgdGhlIHdvcmtlcidzXG4gKiAgIHByb2Nlc3MgYW5kIERCIGNvbm5lY3Rpb24gcG9vbCwgc28gdGhpcyBzaG91bGQgZml0IHRoZSBwb29sIHNpemUsIG5vdCB0aGVcbiAqICAgQ1BVIGNvdW50LiBGb3JraW5nIHJlbWFpbnMgdGhlIHJpZ2h0IHRvb2wgZm9yIG1lbW9yeSBpc29sYXRpb24gYWNyb3NzXG4gKiAgIGxvbmctcnVubmluZyBqb2JzIGFuZCBmb3IgdXNpbmcgbW9yZSBjb3Jlcy4gRGVmYXVsdDogYDRgLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFttYXhDb25jdXJyZW50Rm9ya2VkSm9ic10gLSBIb3cgbWFueSBvdXQtb2YtcHJvY2Vzc1xuICogICBgXCJmb3JrZWRcImAgb3IgYFwic3Bhd25lZFwiYCBqb2JzIGEgc2luZ2xlIGBiYWNrZ3JvdW5kLWpvYnMtd29ya2VyYCBpc1xuICogICBhbGxvd2VkIHRvIGtlZXAgaW4gZmxpZ2h0LiBEZWZhdWx0OiBgNGAuXG4gKiBAcHJvcGVydHkge0JhY2tncm91bmRKb2JzRGlzcGF0Y2hTdHJhdGVneX0gW2Rpc3BhdGNoU3RyYXRlZ3ldIC0gSG93IHRoZSBtYWluIHByb2Nlc3NcbiAqICAgZGV0ZWN0cyBuZXcgd29yay4gRGVmYXVsdHMgdG8gYFwiYmVhY29uXCJgIChldmVudC1kcml2ZW4pLiBTZXQgdG8gYFwicG9sbGluZ1wiYFxuICogICB0byByZXN0b3JlIHRoZSBsZWdhY3kgZml4ZWQtaW50ZXJ2YWwgcG9sbC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbcG9sbEludGVydmFsTXNdIC0gUG9sbCBpbnRlcnZhbCBpbiBtaWxsaXNlY29uZHMuIE9ubHkgdXNlZFxuICogICB3aGVuIGBkaXNwYXRjaFN0cmF0ZWd5ID09PSBcInBvbGxpbmdcImAuIERlZmF1bHQ6IGAxMDAwYC5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IEJlYWNvbkNvbmZpZ3VyYXRpb25cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2VuYWJsZWRdIC0gV2hldGhlciB0byBjb25uZWN0IHRvIGEgQmVhY29uIGJyb2tlci4gRGVmYXVsdHMgdG8gZmFsc2UgdW5sZXNzIGBob3N0YC9gcG9ydGAgb3IgYGluUHJvY2VzczogdHJ1ZWAgYXJlIHNldCwgb3IgZW52IHZhcnMgYXJlIHByZXNlbnQuIEV4cGxpY2l0IGBmYWxzZWAgZGlzYWJsZXMgQmVhY29uIGV2ZW4gd2hlbiBlbnYgdmFycyBhcmUgc2V0LlxuICogQHByb3BlcnR5IHtib29sZWFufSBbaW5Qcm9jZXNzXSAtIFdoZW4gdHJ1ZSwgdXNlIGEgbW9kdWxlLWxldmVsIGluLXByb2Nlc3MgYnJva2VyIHNpbmdsZXRvbiBpbnN0ZWFkIG9mIGNvbm5lY3Rpbmcgb3ZlciBUQ1AuIE11dHVhbGx5IGV4Y2x1c2l2ZSB3aXRoIGBob3N0YC9gcG9ydGAuIFVzZWZ1bCBmb3IgdGVzdHMgYW5kIHNpbmdsZS1wcm9jZXNzIGRlcGxveW1lbnRzLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtob3N0XSAtIEhvc3RuYW1lIG9mIHRoZSBCZWFjb24gYnJva2VyIGRhZW1vbi5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbcG9ydF0gLSBQb3J0IG9mIHRoZSBCZWFjb24gYnJva2VyIGRhZW1vbi5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbcGVlclR5cGVdIC0gT3B0aW9uYWwgaHVtYW4tcmVhZGFibGUgbGFiZWwgZm9yIHRoaXMgcGVlciAoZS5nLiBcInNlcnZlclwiLCBcImJhY2tncm91bmQtam9icy13b3JrZXJcIikuXG4gKiBAcHJvcGVydHkge251bWJlcn0gW3VucmVhY2hhYmxlUmVwb3J0TXNdIC0gR3JhY2Ugd2luZG93IChtcykgYSBiZWFjb24gY29ubmVjdC9kaXNjb25uZWN0IGJsaXAgbXVzdCBwZXJzaXN0IGJlZm9yZSBpdCBpcyByZXBvcnRlZCBhcyBhIGZyYW1ld29yay1lcnJvci4gVHJhbnNpZW50IG91dGFnZXMgdGhhdCByZWNvdmVyIHdpdGhpbiB0aGlzIHdpbmRvdyAoZS5nLiBhIGRlcGxveSByZXN0YXJ0aW5nIHRoZSBicm9rZXIpIGFyZSBub3QgcmVwb3J0ZWQuIERlZmF1bHRzIHRvIDMwMDAwLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gSHR0cFNlcnZlckNvbmZpZ3VyYXRpb25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbaG9zdF0gLSBIb3N0bmFtZSB0byBiaW5kIHRoZSBIVFRQIHNlcnZlciB0by5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2luUHJvY2Vzc10gLSBSdW4gSFRUUCBoYW5kbGVycyBpbiB0aGUgbWFpbiB0aHJlYWQgaW5zdGVhZCBvZiB3b3JrZXIgdGhyZWFkcy5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbbWF4V29ya2Vyc10gLSBCYWNrd2FyZC1jb21wYXRpYmxlIGFsaWFzIGZvciB3b3JrZXJzLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtwb3J0XSAtIFBvcnQgdG8gYmluZCB0aGUgSFRUUCBzZXJ2ZXIgdG8uXG4gKiBAcHJvcGVydHkge251bWJlcn0gW3dvcmtlcnNdIC0gV29ya2VyIGhhbmRsZXJzIHRvIHN0YXJ0IGZvciB0aGUgSFRUUCBzZXJ2ZXIuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBTY2hlZHVsZWRCYWNrZ3JvdW5kSm9iRXZlcnlPcHRpb25zXG4gKiBAcHJvcGVydHkge251bWJlciB8IHN0cmluZ30gW2ZpcnN0SW5dIC0gRGVsYXkgYmVmb3JlIHRoZSBmaXJzdCBlbnF1ZXVlLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gU2NoZWR1bGVkQmFja2dyb3VuZEpvYkNvbmZpZ3VyYXRpb25cbiAqIEBwcm9wZXJ0eSB7QXJyYXk8Pz59IFthcmdzXSAtIEFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIGpvYiB3aGVuIGVucXVldWVkLlxuICogQHByb3BlcnR5IHt0eXBlb2YgaW1wb3J0KFwiLi9iYWNrZ3JvdW5kLWpvYnMvam9iLmpzXCIpLmRlZmF1bHR9IGNsYXNzIC0gSm9iIGNsYXNzIHRvIGVucXVldWUuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2Nyb25dIC0gQ3JvbnRhYiBleHByZXNzaW9uICg1LWZpZWxkIFBPU0lYLCBwbHVzIGBAaG91cmx5YC9gQGRhaWx5YC9gQHdlZWtseWAvYEBtb250aGx5YC9gQHllYXJseWAvYEBtaWRuaWdodGApLiBNdXR1YWxseSBleGNsdXNpdmUgd2l0aCBgZXZlcnlgLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbZW5hYmxlZF0gLSBXaGV0aGVyIHRoZSBzY2hlZHVsZSBpcyBlbmFibGVkLlxuICogQHByb3BlcnR5IHtudW1iZXIgfCBzdHJpbmcgfCBbbnVtYmVyIHwgc3RyaW5nLCBTY2hlZHVsZWRCYWNrZ3JvdW5kSm9iRXZlcnlPcHRpb25zXX0gW2V2ZXJ5XSAtIFJlcGVhdCBpbnRlcnZhbC4gRWl0aGVyIGBldmVyeWAgb3IgYGNyb25gIG11c3QgYmUgc2V0LlxuICogQHByb3BlcnR5IHtpbXBvcnQoXCIuL2JhY2tncm91bmQtam9icy90eXBlcy5qc1wiKS5CYWNrZ3JvdW5kSm9iT3B0aW9uc30gW29wdGlvbnNdIC0gSm9iIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7UmVjb3JkPHN0cmluZywgc3RyaW5nPn0gVmVsb2Npb3VzUGFyYW1zXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7UmVjb3JkPHN0cmluZywgaW1wb3J0KFwiLi9mcm9udGVuZC1tb2RlbHMvcXVlcnkuanNcIikuRnJvbnRlbmRNb2RlbFRyYW5zcG9ydFZhbHVlPn0gQ2xpZW50RXJyb3JQYXlsb2FkUmVwb3J0ZXJQYXlsb2FkXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBFcnJvclJlcXVlc3REZXRhaWxzXG4gKiBAcHJvcGVydHkgez99IFtib2R5XSAtIFNhbml0aXplZCBwYXJzZWQgcmVxdWVzdCBib2R5LCB3aGVuIGF2YWlsYWJsZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBodHRwTWV0aG9kIC0gUmVxdWVzdCBIVFRQIG1ldGhvZC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwYXRoIC0gUmVxdWVzdCBwYXRoLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gQ2xpZW50RXJyb3JQYXlsb2FkQ29udGV4dFxuICogQHByb3BlcnR5IHtzdHJpbmd9IGNvbnRyb2xsZXIgLSBDb250cm9sbGVyIGNsYXNzIG5hbWUuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2FjdGlvbl0gLSBDb250cm9sbGVyIGFjdGlvbiBvciBlbmRwb2ludCBsYWJlbC5cbiAqIEBwcm9wZXJ0eSB7XCJpbmRleFwiIHwgXCJmaW5kXCIgfCBcImNyZWF0ZVwiIHwgXCJ1cGRhdGVcIiB8IFwiZGVzdHJveVwiIHwgXCJhdHRhY2hcIiB8IFwiYXR0YWNobWVudExpc3RcIiB8IFwiZG93bmxvYWRcIiB8IFwidXJsXCIgfCBcImN1c3RvbS1jb21tYW5kXCJ9IFtjb21tYW5kVHlwZV0gLSBGcm9udGVuZC1tb2RlbCBjb21tYW5kIHR5cGUuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtleHBlY3RlZEVycm9yXSAtIFdoZXRoZXIgdGhlIGVycm9yIGlzIGFuIGV4cGVjdGVkIHVzZXItZmxvdyBmYWlsdXJlLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbZnJvbnRlbmRNb2RlbEVuZHBvaW50XSAtIFdoZXRoZXIgdGhlIGVycm9yIGNhbWUgZnJvbSB0aGUgZnJvbnRlbmQtbW9kZWwgZW5kcG9pbnQuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW21vZGVsXSAtIEZyb250ZW5kLW1vZGVsIG5hbWUgZnJvbSB0aGUgZmFpbGVkIHJlcXVlc3QuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3JlcXVlc3RJZF0gLSBTaGFyZWQgZnJvbnRlbmQtbW9kZWwgcmVxdWVzdCBpZC5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtmdW5jdGlvbih7XG4gKiAgIGNvbnRleHQ6IENsaWVudEVycm9yUGF5bG9hZENvbnRleHQsXG4gKiAgIGVycm9yOiBFcnJvcixcbiAqICAgcmVxdWVzdDogaW1wb3J0KFwiLi9odHRwLXNlcnZlci9jbGllbnQvcmVxdWVzdC5qc1wiKS5kZWZhdWx0IHwgaW1wb3J0KFwiLi9odHRwLXNlcnZlci9jbGllbnQvd2Vic29ja2V0LXJlcXVlc3QuanNcIikuZGVmYXVsdCB8IHVuZGVmaW5lZCxcbiAqICAgcmVxdWVzdERldGFpbHM6IEVycm9yUmVxdWVzdERldGFpbHMgfCBudWxsXG4gKiB9KTogUHJvbWlzZTxDbGllbnRFcnJvclBheWxvYWRSZXBvcnRlclBheWxvYWQgfCB2b2lkPiB8IENsaWVudEVycm9yUGF5bG9hZFJlcG9ydGVyUGF5bG9hZCB8IHZvaWR9IENsaWVudEVycm9yUGF5bG9hZFJlcG9ydGVyVHlwZVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge1JlY29yZDxzdHJpbmcsIHVua25vd24+ICYge2NvbmZpZ3VyYXRpb24/OiBpbXBvcnQoXCIuL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdCwgY3VycmVudERldmljZT86IHVua25vd24sIGN1cnJlbnRVc2VyPzogdW5rbm93biwgbW9kZWxSZWdpc3RyeT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwge21vZGVsOiAobmFtZTogc3RyaW5nKSA9PiB1bmtub3dufSwgbm93PzogRGF0ZSB8ICgoKSA9PiBEYXRlKSwgb2ZmbGluZUdyYW50PzogdW5rbm93biwgcGFyYW1zPzogVmVsb2Npb3VzUGFyYW1zLCByZXF1ZXN0PzogaW1wb3J0KFwiLi9odHRwLXNlcnZlci9jbGllbnQvcmVxdWVzdC5qc1wiKS5kZWZhdWx0IHwgaW1wb3J0KFwiLi9odHRwLXNlcnZlci9jbGllbnQvd2Vic29ja2V0LXJlcXVlc3QuanNcIikuZGVmYXVsdCwgcmVzb3VyY2VSdW50aW1lPzogXCJiYWNrZW5kXCIgfCBcImZyb250ZW5kXCIgfCBcIm9mZmxpbmVcIn19IFZlbG9jaW91c0xvb3NlT2JqZWN0XG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7bmV3IChhcmdzOiB7YXR0YWNobWVudE5hbWU/OiBzdHJpbmcsIGNvbmZpZ3VyYXRpb246IGltcG9ydChcIi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0LCBtb2RlbENsYXNzPzogdHlwZW9mIGltcG9ydChcIi4vZGF0YWJhc2UvcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHQsIG5hbWU/OiBzdHJpbmcsIG9wdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCA/Pn0pID0+IG9iamVjdH0gQXR0YWNobWVudERyaXZlckNvbnN0cnVjdG9yXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBTY2hlZHVsZWRCYWNrZ3JvdW5kSm9ic0NvbmZpZ3VyYXRpb25cbiAqIEBwcm9wZXJ0eSB7UmVjb3JkPHN0cmluZywgU2NoZWR1bGVkQmFja2dyb3VuZEpvYkNvbmZpZ3VyYXRpb24+fSBqb2JzIC0gU2NoZWR1bGVkIGpvYnMga2V5ZWQgYnkgbmFtZS5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtmdW5jdGlvbih7Y29uZmlndXJhdGlvbjogaW1wb3J0KFwiLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHR9KSA6IFNjaGVkdWxlZEJhY2tncm91bmRKb2JzQ29uZmlndXJhdGlvbiB8IFByb21pc2U8U2NoZWR1bGVkQmFja2dyb3VuZEpvYnNDb25maWd1cmF0aW9uPn0gU2NoZWR1bGVkQmFja2dyb3VuZEpvYnNMb2FkZXJUeXBlXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBBdHRhY2htZW50RHJpdmVyQ29uZmlndXJhdGlvblxuICogQHByb3BlcnR5IHtmdW5jdGlvbih7Y29uZmlndXJhdGlvbjogaW1wb3J0KFwiLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHQsIG5hbWU6IHN0cmluZywgb3B0aW9uczogUmVjb3JkPHN0cmluZywgPz59KSA6IFJlY29yZDxzdHJpbmcsID8+fSBbY3JlYXRlXSAtIE9wdGlvbmFsIGZhY3RvcnkgZm9yIGEgY3VzdG9tIGF0dGFjaG1lbnQgZHJpdmVyIGluc3RhbmNlLlxuICogQHByb3BlcnR5IHtBdHRhY2htZW50RHJpdmVyQ29uc3RydWN0b3J9IFtkcml2ZXJDbGFzc10gLSBPcHRpb25hbCBjdXN0b20gYXR0YWNobWVudCBkcml2ZXIgY2xhc3MuXG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmcsID8+fSBbaW5zdGFuY2VdIC0gT3B0aW9uYWwgY3VzdG9tIGF0dGFjaG1lbnQgZHJpdmVyIGluc3RhbmNlLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gQXR0YWNobWVudHNDb25maWd1cmF0aW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2RlZmF1bHREcml2ZXJdIC0gRGVmYXVsdCBhdHRhY2htZW50IHN0b3JhZ2UgZHJpdmVyIG5hbWUuXG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmcsIEF0dGFjaG1lbnREcml2ZXJDb25maWd1cmF0aW9uICYgUmVjb3JkPHN0cmluZywgPz4+fSBbZHJpdmVyc10gLSBOYW1lZCBhdHRhY2htZW50IGRyaXZlciBjb25maWd1cmF0aW9ucy5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2FsbG93UGF0aElucHV0XSAtIFdoZXRoZXIgYHtwYXRoOiAuLi59YCBhdHRhY2htZW50IGlucHV0IGlzIGFsbG93ZWQuXG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfSBbYWxsb3dlZFBhdGhQcmVmaXhlc10gLSBPcHRpb25hbCBhbGxvd2xpc3Qgb2YgZGlyZWN0b3JpZXMgZm9yIGB7cGF0aDogLi4ufWAgaW5wdXQuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBNYWlsZXJCYWNrZW5kXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKHtwYXlsb2FkOiBpbXBvcnQoXCIuL21haWxlci5qc1wiKS5NYWlsZXJEZWxpdmVyeVBheWxvYWQsIGNvbmZpZ3VyYXRpb246IGltcG9ydChcIi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0fSkgOiBQcm9taXNlPD8+IHwgP30gZGVsaXZlciAtIERlbGl2ZXIgYSBtYWlsZXIgcGF5bG9hZC5cbiAqL1xuXG5cbi8qKlxuICogQHR5cGVkZWYge1JlY29yZDxzdHJpbmcsIHN0cmluZ1tdPn0gTG9jYWxlRmFsbGJhY2tzVHlwZVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gRnJvbnRlbmRNb2RlbFJlbGF0aW9uc2hpcENvbmZpZ3VyYXRpb25cbiAqIEBwcm9wZXJ0eSB7XCJiZWxvbmdzVG9cIiB8IFwiaGFzT25lXCIgfCBcImhhc01hbnlcIn0gdHlwZSAtIFJlbGF0aW9uc2hpcCB0eXBlLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFttb2RlbF0gLSBUYXJnZXQgbW9kZWwgY2xhc3MgbmFtZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbY2xhc3NOYW1lXSAtIEFsaWFzIG9mIHRhcmdldCBtb2RlbCBjbGFzcyBuYW1lLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFttb2RlbENsYXNzTmFtZV0gLSBFeHBsaWNpdCB0YXJnZXQgbW9kZWwgY2xhc3MgbmFtZS5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IEZyb250ZW5kTW9kZWxBdHRyaWJ1dGVDb25maWd1cmF0aW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3R5cGVdIC0gQ29sdW1uIHR5cGUgbmFtZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbY29sdW1uVHlwZV0gLSBBbGlhcyBmb3IgY29sdW1uIHR5cGUgbmFtZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbc3FsVHlwZV0gLSBBbGlhcyBmb3IgY29sdW1uIHR5cGUgbmFtZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbZGF0YVR5cGVdIC0gQWxpYXMgZm9yIGNvbHVtbiB0eXBlIG5hbWUuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2pzRG9jVHlwZV0gLSBFeGFjdCBnZW5lcmF0ZWQgSlNEb2MgdHlwZSBmb3Igbm9uLWNvbHVtbiBhdHRyaWJ1dGVzLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtuYW1lXSAtIEF0dHJpYnV0ZSBuYW1lIHdoZW4gY29uZmlndXJlZCBhcyBhbiBhcnJheSBlbnRyeS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW251bGxdIC0gV2hldGhlciB2YWx1ZSBjYW4gYmUgbnVsbC5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3NlbGVjdGVkQnlEZWZhdWx0XSAtIFdoZXRoZXIgaW5jbHVkZWQgaW4gZGVmYXVsdCBzZXJpYWxpemF0aW9uLiBEZWZhdWx0cyB0byB0cnVlLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gRnJvbnRlbmRNb2RlbEF0dGFjaG1lbnRDb25maWd1cmF0aW9uXG4gKiBAcHJvcGVydHkge1wiaGFzT25lXCIgfCBcImhhc01hbnlcIn0gdHlwZSAtIEF0dGFjaG1lbnQgY2FyZGluYWxpdHkuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBGcm9udGVuZE1vZGVsUmVzb3VyY2VDb25maWd1cmF0aW9uXG4gKiBAcHJvcGVydHkge0FycmF5PHN0cmluZyB8IEZyb250ZW5kTW9kZWxBdHRyaWJ1dGVDb25maWd1cmF0aW9uPiB8IFJlY29yZDxzdHJpbmcsIEZyb250ZW5kTW9kZWxBdHRyaWJ1dGVDb25maWd1cmF0aW9uIHwgaW1wb3J0KFwiLi9kYXRhYmFzZS9kcml2ZXJzL2Jhc2UtY29sdW1uLmpzXCIpLmRlZmF1bHQgfCBib29sZWFuPn0gYXR0cmlidXRlcyAtIEF0dHJpYnV0ZXMgdG8gZXhwb3NlIG9uIHRoZSBmcm9udGVuZCBtb2RlbC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IFthYmlsaXRpZXNdIC0gQWRkaXRpb25hbCBjYW1lbENhc2UgYWJpbGl0eSBhY3Rpb24gbmFtZXMgdG8gZXhwb3NlIGZvciBwZXItcmVjb3JkIGByZWNvcmQuY2FuKGFjdGlvbilgIHJlYWRzLiBCYXNlIENSVUQgYWN0aW9ucyAoYHJlYWRgLCBgY3JlYXRlYCwgYHVwZGF0ZWAsIGBkZXN0cm95YCkgYXJlIGFsd2F5cyBpbmNsdWRlZCBhbmQgbXVzdCBub3QgYmUgbGlzdGVkIGhlcmUuXG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmcsIEZyb250ZW5kTW9kZWxBdHRhY2htZW50Q29uZmlndXJhdGlvbj59IFthdHRhY2htZW50c10gLSBBdHRhY2htZW50IGhlbHBlcnMga2V5ZWQgYnkgYXR0YWNobWVudCBuYW1lLlxuICogQHByb3BlcnR5IHtzdHJpbmdbXX0gW2NvbW1hbmRzXSAtIExlZ2FjeSBidWlsdC1pbiBjb21tYW5kIG5hbWVzIChgaW5kZXhgLCBgZmluZGAsIGBjcmVhdGVgLCBgdXBkYXRlYCwgYGRlc3Ryb3lgLCBgYXR0YWNoYCwgYGRvd25sb2FkYCwgYHVybGApLlxuICogQHByb3BlcnR5IHtBcnJheTxGcm9udGVuZE1vZGVsUmVzb3VyY2VDdXN0b21Db21tYW5kPn0gW2NvbGxlY3Rpb25Db21tYW5kc10gLSBDdXN0b20gY29sbGVjdGlvbiBjb21tYW5kcy4gRWFjaCBlbnRyeSBpcyBhIGNhbWVsQ2FzZSBtZXRob2QgbmFtZSwgb3IgYSBge25hbWUsIGFyZ3M/LCByZXR1cm5UeXBlP31gIG9iamVjdCBkZWNsYXJpbmcgdHlwZWQgYXJndW1lbnRzIGFuZC9vciBhIHJlc3BvbnNlIHR5cGUuIFRoZSBydW50aW1lIGRlcml2ZXMgdGhlIGtlYmFiLWNhc2UgY29tbWFuZCBzbHVnIGZyb20gdGhlIG5hbWUuXG4gKiBAcHJvcGVydHkge0FycmF5PEZyb250ZW5kTW9kZWxSZXNvdXJjZUN1c3RvbUNvbW1hbmQ+fSBbbWVtYmVyQ29tbWFuZHNdIC0gQ3VzdG9tIG1lbWJlciBjb21tYW5kcy4gRWFjaCBlbnRyeSBpcyBhIGNhbWVsQ2FzZSBtZXRob2QgbmFtZSwgb3IgYSBge25hbWUsIGFyZ3M/LCByZXR1cm5UeXBlP31gIG9iamVjdCBkZWNsYXJpbmcgdHlwZWQgYXJndW1lbnRzIGFuZC9vciBhIHJlc3BvbnNlIHR5cGUuIFRoZSBydW50aW1lIGRlcml2ZXMgdGhlIGtlYmFiLWNhc2UgY29tbWFuZCBzbHVnIGZyb20gdGhlIG5hbWUuXG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfSBbYnVpbHRJbkNvbGxlY3Rpb25Db21tYW5kc10gLSBCdWlsdC1pbiBjb2xsZWN0aW9uIGNvbW1hbmQgbmFtZXMgKGBpbmRleGAsIGBjcmVhdGVgKS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IFtidWlsdEluTWVtYmVyQ29tbWFuZHNdIC0gQnVpbHQtaW4gbWVtYmVyIGNvbW1hbmQgbmFtZXMgKGBmaW5kYCwgYHVwZGF0ZWAsIGBkZXN0cm95YCwgYGF0dGFjaGAsIGBkb3dubG9hZGAsIGB1cmxgKS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbbW9kZWxOYW1lXSAtIEZyb250ZW5kIG1vZGVsIG5hbWUgb3ZlcnJpZGUuXG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfSBbcmVsYXRpb25zaGlwc10gLSBSZWxhdGlvbnNoaXAgbmFtZXMgdG8gZXhwb3NlIGluIGZyb250ZW5kIG1vZGVscy4gVHlwZSBhbmQgdGFyZ2V0IG1vZGVsIGFyZSBpbmZlcnJlZCBmcm9tIHRoZSBiYWNrZW5kIG1vZGVsJ3MgcmVnaXN0ZXJlZCByZWxhdGlvbnNoaXBzLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtwcmltYXJ5S2V5XSAtIFByaW1hcnkga2V5IGF0dHJpYnV0ZSBuYW1lLlxuICogQHByb3BlcnR5IHtGcm9udGVuZE1vZGVsUmVzb3VyY2VTZXJ2ZXJDb25maWd1cmF0aW9ufSBbc2VydmVyXSAtIE9wdGlvbmFsIGxlZ2FjeSBiYWNrZW5kIGJlaGF2aW9yIG92ZXJyaWRlcyBmb3IgYnVpbHQtaW4gZnJvbnRlbmQgYWN0aW9ucy5cbiAqIEBwcm9wZXJ0eSB7RnJvbnRlbmRNb2RlbFJlc291cmNlU3luY0NvbmZpZ3VyYXRpb24gfCBib29sZWFufSBbc3luY10gLSBPcHRpb25hbCBzYWZlIGxvY2FsL29mZmxpbmUgc3luYyBwb2xpY3kgbWV0YWRhdGEuIGBwb2xpY3lgIHBhcnRpY2lwYXRlcyBpbiB0aGUgaGFzaCBidXQgaXMgbm90IGV4cG9zZWQgdG8gZ2VuZXJhdGVkIGZyb250ZW5kIGNvbmZpZy9tYW5pZmVzdC5cbiAqL1xuXG4vKipcbiAqIE9iamVjdCBmb3JtIG9mIGEgY3VzdG9tIGNvbW1hbmQgZW50cnksIGRlY2xhcmluZyBpdHMgdHlwZWQgYXJndW1lbnRzIGFuZC9vclxuICogcmVzcG9uc2UgdHlwZSBhbG9uZ3NpZGUgdGhlIGNvbW1hbmQgbmFtZS5cbiAqIEB0eXBlZGVmIHtvYmplY3R9IEZyb250ZW5kTW9kZWxSZXNvdXJjZUN1c3RvbUNvbW1hbmRPYmplY3RcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBuYW1lIC0gY2FtZWxDYXNlIGNvbW1hbmQgbWV0aG9kIG5hbWUuXG4gKiBAcHJvcGVydHkge0FycmF5PHtuYW1lOiBzdHJpbmcsIHR5cGU6IHN0cmluZ30+fSBbYXJnc10gLSBUeXBlZCBjb21tYW5kIGFyZ3VtZW50czsgZWFjaCBnZW5lcmF0ZXMgYSBuYW1lZCwgdHlwZWQgbWV0aG9kIHBhcmFtZXRlciBtYXBwZWQgcG9zaXRpb25hbGx5IGludG8gdGhlIGNvbW1hbmQgcGF5bG9hZC4gYHR5cGVgIGlzIGEgSlNEb2MgdHlwZSBzdHJpbmcuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3JldHVyblR5cGVdIC0gSlNEb2MgdHlwZSBmb3IgdGhlIGNvbW1hbmQgcmVzcG9uc2UuIFdoZW4gc2V0LCB0aGUgZ2VuZXJhdGVkIG1ldGhvZCBpcyB0eXBlZCBgUHJvbWlzZTxyZXR1cm5UeXBlPmAgaW5zdGVhZCBvZiBgUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCA/Pj5gLiBFbWl0dGVkIHZlcmJhdGltIGludG8gdGhlIGdlbmVyYXRlZCBmcm9udGVuZCBtb2RlbCwgc28gaXQgbXVzdCByZXNvbHZlIHRoZXJlLlxuICovXG5cbi8qKlxuICogQSBjdXN0b20gY29tbWFuZCBlbnRyeTogYSBwbGFpbiBjYW1lbENhc2UgbWV0aG9kIG5hbWUsIG9yIGFuIG9iamVjdCBkZWNsYXJpbmdcbiAqIHR5cGVkIGFyZ3MgYW5kL29yIGEgcmVzcG9uc2UgdHlwZS5cbiAqIEB0eXBlZGVmIHtzdHJpbmcgfCBGcm9udGVuZE1vZGVsUmVzb3VyY2VDdXN0b21Db21tYW5kT2JqZWN0fSBGcm9udGVuZE1vZGVsUmVzb3VyY2VDdXN0b21Db21tYW5kXG4gKi9cblxuLyoqXG4gKiBKU09OIHZhbHVlIGFjY2VwdGVkIGJ5IHN5bmMgcG9saWN5IG1ldGFkYXRhL2hhc2ggaW5wdXRzLlxuICogQHR5cGVkZWYge251bGwgfCBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgdW5rbm93bltdIHwgUmVjb3JkPHN0cmluZywgdW5rbm93bj59IEZyb250ZW5kTW9kZWxTeW5jSnNvblZhbHVlXG4gKi9cblxuLyoqXG4gKiBGcm9udGVuZC1tb2RlbCBsb2NhbC9vZmZsaW5lIHN5bmMgcG9saWN5IGNvbmZpZy4gYG1ldGFkYXRhYCBpcyBleHBvc2VkIHRvXG4gKiBmcm9udGVuZHMgYW5kIHBlZXJzOyBgcG9saWN5YCBpcyBoYXNoZWQgYnV0IGludGVudGlvbmFsbHkgb21pdHRlZCBmcm9tXG4gKiBmcm9udGVuZC1zYWZlIG1hbmlmZXN0cy5cbiAqIEB0eXBlZGVmIHtvYmplY3R9IEZyb250ZW5kTW9kZWxSZXNvdXJjZVN5bmNDb25maWd1cmF0aW9uXG4gKiBAcHJvcGVydHkge1wib3B0aW1pc3RpY1ZlcnNpb25cIiB8IFwic2VydmVyV2luc1wiIHwgXCJsYXN0V3JpdGVyV2luc1wiIHwgXCJmaWVsZFRocmVlV2F5XCIgfCBcImFwcGVuZE9ubHlcIn0gW2NvbmZsaWN0U3RyYXRlZ3ldIC0gU3RyYXRlZ3kgdXNlZCB3aGVuIHJlcGxheSBkZXRlY3RzIHNlcnZlci9jbGllbnQgZGl2ZXJnZW5jZS4gRGVmYXVsdHMgdG8gYG9wdGltaXN0aWNWZXJzaW9uYC5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2VuYWJsZWRdIC0gV2hldGhlciB0aGUgcmVzb3VyY2UgaXMgc3luYy1lbmFibGVkLiBEZWZhdWx0cyB0byB0cnVlIHdoZW4gYHN5bmNgIGlzIGNvbmZpZ3VyZWQuXG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfSBbb3BlcmF0aW9uc10gLSBTeW5jIG9wZXJhdGlvbiBuYW1lcyBzdWNoIGFzIGBpbmRleGAsIGBmaW5kYCwgYGNyZWF0ZWAsIGB1cGRhdGVgLCBjdXN0b20gZG9tYWluIGNvbW1hbmRzLCBldGMuXG4gKiBAcHJvcGVydHkge3N0cmluZyB8IG51bWJlcn0gW3BvbGljeVZlcnNpb25dIC0gQXBwLWNvbnRyb2xsZWQgcG9saWN5IHZlcnNpb24gdXNlZCBhcyBhIHN0YWJsZSBjaGFuZ2Ugc2lnbmFsLlxuICogQHByb3BlcnR5IHtSZWNvcmQ8c3RyaW5nLCBGcm9udGVuZE1vZGVsU3luY0pzb25WYWx1ZT59IFttZXRhZGF0YV0gLSBTYWZlIGZyb250ZW5kLXZpc2libGUgbWV0YWRhdGEuXG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmcsIEZyb250ZW5kTW9kZWxTeW5jSnNvblZhbHVlPn0gW3BvbGljeV0gLSBEZXRlcm1pbmlzdGljIG5vbi1zZWNyZXQgcG9saWN5IGlucHV0cyBpbmNsdWRlZCBpbiB0aGUgcG9saWN5IGhhc2ggb25seS5cbiAqL1xuXG4vKipcbiAqIFZlbG9jaW91cyBzeW5jIEFQSSBlbmRwb2ludCBjb25maWd1cmF0aW9uLlxuICogQHR5cGVkZWYge29iamVjdH0gVmVsb2Npb3VzU3luY0FwaUNvbmZpZ3VyYXRpb25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbbW91bnRQYXRoXSAtIE1vdW50IHBhdGggZm9yIHRoZSBzeW5jIGVuZHBvaW50cy4gRGVmYXVsdHMgdG8gXCIvdmVsb2Npb3VzL3N5bmNcIi5cbiAqIEBwcm9wZXJ0eSB7RnJvbnRlbmRNb2RlbFJlc291cmNlQ2xhc3NUeXBlfSByZXNvdXJjZUNsYXNzIC0gQXBwIHN5bmMgcmVzb3VyY2UgY2xhc3Mgc2VydmVkIGJ5IHRoZSBhdXRvLW1vdW50ZWQgc3luYyBlbmRwb2ludHMuXG4gKi9cblxuLyoqXG4gKiBDbGllbnQtc2lkZSBzeW5jIHRyYW5zcG9ydCBvd25pbmcgSFRUUCBQT1NUcyB0byB0aGUgZnJhbWV3b3JrIHN5bmMgZW5kcG9pbnRzLFxuICogbWF0Y2hpbmcgdGhlIGZyb250ZW5kLW1vZGVsIHdlYnNvY2tldCBjbGllbnQgcG9zdCBjb250cmFjdC5cbiAqIEB0eXBlZGVmIHtvYmplY3R9IFZlbG9jaW91c1N5bmNDbGllbnRUcmFuc3BvcnRcbiAqIEBwcm9wZXJ0eSB7KHBhdGg6IHN0cmluZywgYm9keT86ID8sIG9wdGlvbnM/OiB7aGVhZGVycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz59KSA9PiBQcm9taXNlPHtqc29uOiAoKSA9PiA/fT59IHBvc3QgLSBQb3N0cyBvbmUgcmVxdWVzdCBhbmQgcmVzb2x2ZXMgYSByZXNwb25zZSB3aXRoIGEganNvbiBhY2Nlc3Nvci5cbiAqL1xuXG4vKipcbiAqIFdlYnNvY2tldCBjbGllbnQgY29udHJhY3QgcmVxdWlyZWQgZnJvbSBgc3luYy5jbGllbnQucmVhbHRpbWUuY3JlYXRlQ2xpZW50YCxcbiAqIG1hdGNoaW5nIGBWZWxvY2lvdXNXZWJzb2NrZXRDbGllbnRgIC8gc25hcHJlcSdzIHdlYnNvY2tldCBjbGllbnQuXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBWZWxvY2lvdXNTeW5jUmVhbHRpbWVXZWJzb2NrZXRDbGllbnRcbiAqIEBwcm9wZXJ0eSB7KCkgPT4gUHJvbWlzZTw/Pn0gY29ubmVjdCAtIENvbm5lY3RzIHRoZSB3ZWJzb2NrZXQuXG4gKiBAcHJvcGVydHkgeyhjaGFubmVsVHlwZTogc3RyaW5nLCBvcHRpb25zPzoge3BhcmFtcz86IFJlY29yZDxzdHJpbmcsID8+LCBvbk1lc3NhZ2U/OiAoYm9keTogPykgPT4gdm9pZCwgb25SZXN1bWU/OiAoKSA9PiB2b2lkLCBvbkNsb3NlPzogKHJlYXNvbjogc3RyaW5nKSA9PiB2b2lkfSkgPT4gVmVsb2Npb3VzU3luY1JlYWx0aW1lU3Vic2NyaXB0aW9ufSBzdWJzY3JpYmVDaGFubmVsIC0gT3BlbnMgb25lIGNoYW5uZWwgc3Vic2NyaXB0aW9uLlxuICogQHByb3BlcnR5IHsoKSA9PiBQcm9taXNlPHZvaWQ+fSBkaXNjb25uZWN0QW5kU3RvcFJlY29ubmVjdCAtIENsb3NlcyB0aGUgc29ja2V0IGFuZCBzdG9wcyBhdXRvLXJlY29ubmVjdC5cbiAqL1xuXG4vKipcbiAqIENoYW5uZWwgc3Vic2NyaXB0aW9uIGhhbmRsZSByZXR1cm5lZCBieSBgc3Vic2NyaWJlQ2hhbm5lbGAuXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBWZWxvY2lvdXNTeW5jUmVhbHRpbWVTdWJzY3JpcHRpb25cbiAqIEBwcm9wZXJ0eSB7KCkgPT4gdm9pZH0gY2xvc2UgLSBDbG9zZXMgdGhlIHN1YnNjcmlwdGlvbi5cbiAqIEBwcm9wZXJ0eSB7KCkgPT4gYm9vbGVhbn0gaXNSZWFkeSAtIFdoZXRoZXIgdGhlIHN1YnNjcmlwdGlvbiBpcyBhY2tub3dsZWRnZWQgYW5kIHJlYWR5LlxuICogQHByb3BlcnR5IHsocGFyYW1zPzoge3RpbWVvdXRNcz86IG51bWJlcn0pID0+IFByb21pc2U8dm9pZD59IHdhaXRGb3JSZWFkeSAtIFJlc29sdmVzIG9uY2UgdGhlIHNlcnZlciBhY2tub3dsZWRnZXMgdGhlIHN1YnNjcmlwdGlvbi5cbiAqL1xuXG4vKipcbiAqIE9uZSByZWFsdGltZSBjaGFubmVsIHN1YnNjcmlwdGlvbiBkZXNjcmlwdG9yLlxuICogQHR5cGVkZWYge29iamVjdH0gVmVsb2Npb3VzU3luY1JlYWx0aW1lQ2hhbm5lbERlc2NyaXB0b3JcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjaGFubmVsIC0gU2VydmVyIGNoYW5uZWwgbmFtZSB0byBzdWJzY3JpYmUuXG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmcsID8+fSBbcGFyYW1zXSAtIFN1YnNjcmliZSBwYXJhbXMgKHJ1bnRpbWUgdmFsdWVzIGxpa2UgZXZlbnRJZCkuIFRoZSBmcmFtZXdvcmsgaW5qZWN0cyBgYXV0aGVudGljYXRpb25Ub2tlbmAgYXV0b21hdGljYWxseS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbcmVzb3VyY2VUeXBlXSAtIERlZmF1bHQgcmVzb3VyY2UvbW9kZWwgbmFtZSBmb3IgcHVzaGVkIGNoYW5nZXMgdGhhdCBkbyBub3QgY2FycnkgdGhlaXIgb3duIHJlc291cmNlVHlwZS5cbiAqL1xuXG4vKipcbiAqIFJlYWx0aW1lIHB1c2ggY29uZmlndXJhdGlvbiBmb3IgdGhlIHN5bmMgY2xpZW50LiBPbmx5IHRoZSBnZW51aW5lbHkgYXBwLW93bmVkXG4gKiBjYWxsYmFja3MgbGl2ZSBoZXJlOiBob3cgdG8gYnVpbGQgdGhlIHdlYnNvY2tldCBjbGllbnQgYW5kIHdoaWNoIGNoYW5uZWxzXG4gKiAod2l0aCBydW50aW1lIHBhcmFtcykgdG8gc3Vic2NyaWJlLiBFdmVyeXRoaW5nIGVsc2UgLSBzdWJzY3JpYmluZywgYXBwbHlpbmdcbiAqIHB1c2hlcyB0aHJvdWdoIHRoZSBkZXJpdmVkIHJlc291cmNlIGFwcGxpZXIsIGVjaG8gc3VwcHJlc3Npb24sIGFuZFxuICogcHVsbC1vbi1yZWNvbm5lY3QgLSBpcyBkZXJpdmVkLlxuICogQHR5cGVkZWYge29iamVjdH0gVmVsb2Npb3VzU3luY0NsaWVudFJlYWx0aW1lQ29uZmlndXJhdGlvblxuICogQHByb3BlcnR5IHsoKSA9PiBWZWxvY2lvdXNTeW5jUmVhbHRpbWVXZWJzb2NrZXRDbGllbnQgfCBQcm9taXNlPFZlbG9jaW91c1N5bmNSZWFsdGltZVdlYnNvY2tldENsaWVudD59IGNyZWF0ZUNsaWVudCAtIEJ1aWxkcyB0aGUgKHVuY29ubmVjdGVkKSB3ZWJzb2NrZXQgY2xpZW50OyB0aGUgZnJhbWV3b3JrIG93bnMgY29ubmVjdC9kaXNjb25uZWN0LlxuICogQHByb3BlcnR5IHsoY29udGV4dDogPykgPT4gQXJyYXk8VmVsb2Npb3VzU3luY1JlYWx0aW1lQ2hhbm5lbERlc2NyaXB0b3I+IHwgUHJvbWlzZTxBcnJheTxWZWxvY2lvdXNTeW5jUmVhbHRpbWVDaGFubmVsRGVzY3JpcHRvcj4+fSBbY2hhbm5lbHNdIC0gUmVzb2x2ZXMgY2hhbm5lbCBkZXNjcmlwdG9ycyBmcm9tIHRoZSBgc3Vic2NyaWJlUmVhbHRpbWUoY29udGV4dClgIGNvbnRleHQgKHJ1bnRpbWUgcGFyYW1zIGxpa2UgZXZlbnRJZCkuIE9wdGlvbmFsIHdoZW4gbW9kZWxzIGRlY2xhcmUgYHN0YXRpYyBzeW5jID0ge3JlYWx0aW1lOiB7Y2hhbm5lbH19YC5cbiAqIEBwcm9wZXJ0eSB7KCkgPT4gc3RyaW5nIHwgUHJvbWlzZTxzdHJpbmc+fSBbbG9jYWxPcmlnaW5dIC0gUmVzb2x2ZXMgdGhpcyBkZXZpY2UncyBlY2hvIG9yaWdpbjsgcHVzaGVkIG1lc3NhZ2VzIHdpdGggYSBtYXRjaGluZyBgZWNob09yaWdpbmAgYXJlIGRyb3BwZWQuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtwdWxsT25SZWNvbm5lY3RdIC0gRmlyZSBhIGNvYWxlc2NlZCBgcHVsbCgpYCB3aGVuIHN1YnNjcmlwdGlvbnMgYmVjb21lIHJlYWR5IG9yIHJlc3VtZSBhZnRlciBhIGRyb3AsIGNsb3Npbmcgb2ZmbGluZSBnYXBzLiBEZWZhdWx0cyB0byB0cnVlLlxuICovXG5cbi8qKlxuICogQ2xpZW50LXNpZGUgc3luYyBjb25maWd1cmF0aW9uIGNvbnN1bWVkIGJ5IGBTeW5jQ2xpZW50LmZyb21Db25maWd1cmF0aW9uKC4uLilgLlxuICogVGhlIGZyYW1ld29yayBvd25zIHRoZSBgJHttb3VudFBhdGh9L2NoYW5nZXNgIGFuZCBgJHttb3VudFBhdGh9L3JlcGxheWBcbiAqIFBPU1RlcnMgb3ZlciB0aGUgZ2l2ZW4gdHJhbnNwb3J0LlxuICogQHR5cGVkZWYge29iamVjdH0gVmVsb2Npb3VzU3luY0NsaWVudENvbmZpZ3VyYXRpb25cbiAqIEBwcm9wZXJ0eSB7KCkgPT4gc3RyaW5nIHwgUHJvbWlzZTxzdHJpbmc+fSBhdXRoZW50aWNhdGlvblRva2VuIC0gUmVzb2x2ZXMgdGhlIGF1dGggdG9rZW4gc2VudCB3aXRoIHN5bmMgcmVxdWVzdHMuXG4gKiBAcHJvcGVydHkge251bWJlcn0gW2JhdGNoU2l6ZV0gLSBNYXggc3luY3MgcGVyIHJlcXVlc3QuXG4gKiBAcHJvcGVydHkgeygpID0+IGJvb2xlYW4gfCBQcm9taXNlPGJvb2xlYW4+fSBbaXNPbmxpbmVdIC0gQ29ubmVjdGl2aXR5IGdhdGUgZm9yIHB1bGxzIGFuZCByZXBsYXlzLiBEZWZhdWx0cyB0byBhbHdheXMgb25saW5lLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFttb3VudFBhdGhdIC0gTW91bnQgcGF0aCB0aGUgc2VydmVyIHNlcnZlcyB0aGUgc3luYyBlbmRwb2ludHMgdW5kZXIgKG1hdGNoIHRoZSBzZXJ2ZXIncyBgc3luYy5hcGkubW91bnRQYXRoYCkuIERlZmF1bHRzIHRvIFwiL3ZlbG9jaW91cy9zeW5jXCI7IG5vcm1hbGl6YXRpb24gc3RyaXBzIHRyYWlsaW5nIHNsYXNoZXMgYW5kIGFsd2F5cyBmaWxscyBpbiB0aGUgZGVmYXVsdC5cbiAqIEBwcm9wZXJ0eSB7KGVycm9yOiBFcnJvcikgPT4gdm9pZH0gW29uRXJyb3JdIC0gUmVwb3J0cyBiYWNrZ3JvdW5kIHJlcGxheS9wdWxsIGZhaWx1cmVzLiBEZWZhdWx0cyB0byByZXRocm93aW5nLlxuICogQHByb3BlcnR5IHtWZWxvY2lvdXNTeW5jQ2xpZW50UmVhbHRpbWVDb25maWd1cmF0aW9ufSBbcmVhbHRpbWVdIC0gUmVhbHRpbWUgcHVzaCBjb25maWd1cmF0aW9uIGNvbnN1bWVkIGJ5IGBzdWJzY3JpYmVSZWFsdGltZSguLi4pYC5cbiAqIEBwcm9wZXJ0eSB7VmVsb2Npb3VzU3luY0NsaWVudFRyYW5zcG9ydH0gdHJhbnNwb3J0IC0gVHJhbnNwb3J0IHBvc3RpbmcgdG8gdGhlIGZyYW1ld29yayBzeW5jIGVuZHBvaW50cyAoZS5nLiB0aGUgZnJvbnRlbmQtbW9kZWwgd2Vic29ja2V0IGNsaWVudCkuXG4gKi9cblxuLyoqXG4gKiBWZWxvY2lvdXMgc3luYyBjb25maWd1cmF0aW9uLlxuICogQHR5cGVkZWYge29iamVjdH0gVmVsb2Npb3VzU3luY0NvbmZpZ3VyYXRpb25cbiAqIEBwcm9wZXJ0eSB7VmVsb2Npb3VzU3luY0FwaUNvbmZpZ3VyYXRpb259IFthcGldIC0gQXV0by1tb3VudHMgdGhlIFZlbG9jaW91cyBzeW5jIGNoYW5nZXMvcmVwbGF5IGVuZHBvaW50cyBmb3IgdGhpcyByZXNvdXJjZSBjbGFzcy5cbiAqIEBwcm9wZXJ0eSB7VmVsb2Npb3VzU3luY0NsaWVudENvbmZpZ3VyYXRpb259IFtjbGllbnRdIC0gQ2xpZW50LXNpZGUgc3luYyBjb25maWd1cmF0aW9uIGNvbnN1bWVkIGJ5IGBTeW5jQ2xpZW50LmZyb21Db25maWd1cmF0aW9uKC4uLilgLlxuICogQHByb3BlcnR5IHtpbXBvcnQoXCIuL3N5bmMvZGV2aWNlLWlkZW50aXR5LmpzXCIpLlN5bmNKc29uV2ViS2V5IHwgbnVsbH0gW2RldmljZUNlcnRpZmljYXRlQmFja2VuZFB1YmxpY0tleV0gLSBQdWJsaWMgYmFja2VuZCBrZXkgdXNlZCB0byB2ZXJpZnkgb2ZmbGluZSBkZXZpY2UgY2VydGlmaWNhdGVzIGZvciBzeW5jIHJlcGxheS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbY2hhbmdlRmVlZFJldGVudGlvblNpemVdIC0gTnVtYmVyIG9mIGFjY2VwdGVkIHNlcnZlciBjaGFuZ2VzIHJldGFpbmVkIGJlZm9yZSBjbGllbnRzIG11c3QgcmVmcmVzaCBmcm9tIHNuYXBzaG90LlxuICogQHByb3BlcnR5IHtBcnJheTxpbXBvcnQoXCIuL3N5bmMvb2ZmbGluZS1ncmFudC5qc1wiKS5PZmZsaW5lR3JhbnRTaWduaW5nS2V5Pn0gb2ZmbGluZUdyYW50U2lnbmluZ0tleXMgLSBTaWduaW5nIGtleXMgdXNlZCB0byBpc3N1ZSBhbmQgdmVyaWZ5IG9mZmxpbmUgZ3JhbnRzLiBTZWNyZXRzIG11c3QgbmV2ZXIgYmUgZXhwb3NlZCB0byBjbGllbnRzLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtvZmZsaW5lR3JhbnRUdGxNc10gLSBEZWZhdWx0IG9mZmxpbmUgZ3JhbnQgVFRMIGluIG1pbGxpc2Vjb25kcy4gRGVmYXVsdHMgdG8gMjQgaG91cnMuXG4gKi9cblxuLyoqXG4gKiBGcm9udGVuZC1zYWZlIG5vcm1hbGl6ZWQgc3luYyBtZXRhZGF0YS5cbiAqIEB0eXBlZGVmIHtvYmplY3R9IE5vcm1hbGl6ZWRGcm9udGVuZE1vZGVsUmVzb3VyY2VTeW5jQ29uZmlndXJhdGlvblxuICogQHByb3BlcnR5IHtcIm9wdGltaXN0aWNWZXJzaW9uXCIgfCBcInNlcnZlcldpbnNcIiB8IFwibGFzdFdyaXRlcldpbnNcIiB8IFwiZmllbGRUaHJlZVdheVwiIHwgXCJhcHBlbmRPbmx5XCJ9IGNvbmZsaWN0U3RyYXRlZ3kgLSBOb3JtYWxpemVkIHJlcGxheSBjb25mbGljdCBzdHJhdGVneS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZW5hYmxlZCAtIFdoZXRoZXIgdGhlIHJlc291cmNlIGlzIHN5bmMtZW5hYmxlZC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IG9wZXJhdGlvbnMgLSBTb3J0ZWQsIGR1cGxpY2F0ZS1mcmVlIHN5bmMgb3BlcmF0aW9uIG5hbWVzLlxuICogQHByb3BlcnR5IHtzdHJpbmcgfCBudWxsfSBwb2xpY3lWZXJzaW9uIC0gQXBwLWNvbnRyb2xsZWQgcG9saWN5IHZlcnNpb24sIG9yIG51bGwuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcG9saWN5SGFzaCAtIERldGVybWluaXN0aWMgc2hhMjU2IGhhc2ggb2Ygc2FmZSBwb2xpY3kgaW5wdXRzLlxuICogQHByb3BlcnR5IHtSZWNvcmQ8c3RyaW5nLCBGcm9udGVuZE1vZGVsU3luY0pzb25WYWx1ZT59IFttZXRhZGF0YV0gLSBTYWZlIGZyb250ZW5kLXZpc2libGUgbWV0YWRhdGEuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7T21pdDxGcm9udGVuZE1vZGVsUmVzb3VyY2VDb25maWd1cmF0aW9uLCBcImFiaWxpdGllc1wiIHwgXCJidWlsdEluQ29sbGVjdGlvbkNvbW1hbmRzXCIgfCBcImJ1aWx0SW5NZW1iZXJDb21tYW5kc1wiIHwgXCJjb2xsZWN0aW9uQ29tbWFuZHNcIiB8IFwiY29tbWFuZHNcIiB8IFwibWVtYmVyQ29tbWFuZHNcIiB8IFwic3luY1wiPiAmIHtcbiAqICAgYWJpbGl0aWVzOiBGcm9udGVuZE1vZGVsUmVzb3VyY2VBYmlsaXRpZXNDb25maWd1cmF0aW9uXG4gKiAgIGJ1aWx0SW5Db2xsZWN0aW9uQ29tbWFuZHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz5cbiAqICAgYnVpbHRJbk1lbWJlckNvbW1hbmRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XG4gKiAgIGNvbGxlY3Rpb25Db21tYW5kczogUmVjb3JkPHN0cmluZywgc3RyaW5nPlxuICogICBjb21tYW5kTWV0YWRhdGE6IFJlY29yZDxzdHJpbmcsIHthcmdzOiBBcnJheTx7bmFtZTogc3RyaW5nLCB0eXBlOiBzdHJpbmd9PiwgcmV0dXJuVHlwZTogc3RyaW5nIHwgbnVsbH0+XG4gKiAgIG1lbWJlckNvbW1hbmRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XG4gKiAgIHN5bmM/OiBOb3JtYWxpemVkRnJvbnRlbmRNb2RlbFJlc291cmNlU3luY0NvbmZpZ3VyYXRpb25cbiAqIH19IE5vcm1hbGl6ZWRGcm9udGVuZE1vZGVsUmVzb3VyY2VDb25maWd1cmF0aW9uXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7T21pdDx0eXBlb2YgaW1wb3J0KFwiLi9mcm9udGVuZC1tb2RlbC1yZXNvdXJjZS9iYXNlLXJlc291cmNlLmpzXCIpLmRlZmF1bHQsIG5ldmVyPiAmIHtuZXcgKGFyZ3M6IGltcG9ydChcIi4vZnJvbnRlbmQtbW9kZWwtcmVzb3VyY2UvYmFzZS1yZXNvdXJjZS5qc1wiKS5Gcm9udGVuZE1vZGVsUmVzb3VyY2VBYmlsaXR5QXJncyB8IGltcG9ydChcIi4vZnJvbnRlbmQtbW9kZWwtcmVzb3VyY2UvYmFzZS1yZXNvdXJjZS5qc1wiKS5Gcm9udGVuZE1vZGVsUmVzb3VyY2VDb250cm9sbGVyQXJncyk6IGltcG9ydChcIi4vZnJvbnRlbmQtbW9kZWwtcmVzb3VyY2UvYmFzZS1yZXNvdXJjZS5qc1wiKS5kZWZhdWx0PHR5cGVvZiBpbXBvcnQoXCIuL2RhdGFiYXNlL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0Pn19IEZyb250ZW5kTW9kZWxSZXNvdXJjZUNsYXNzVHlwZVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge0Zyb250ZW5kTW9kZWxSZXNvdXJjZUNsYXNzVHlwZX0gRnJvbnRlbmRNb2RlbFJlc291cmNlRGVmaW5pdGlvblxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gRnJvbnRlbmRNb2RlbFJlc291cmNlQWJpbGl0aWVzQ29uZmlndXJhdGlvblxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtpbmRleF0gLSBBYmlsaXR5IGFjdGlvbiBmb3IgZnJvbnRlbmQgaW5kZXguXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2ZpbmRdIC0gQWJpbGl0eSBhY3Rpb24gZm9yIGZyb250ZW5kIGZpbmQuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2NyZWF0ZV0gLSBBYmlsaXR5IGFjdGlvbiBmb3IgZnJvbnRlbmQgY3JlYXRlLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFt1cGRhdGVdIC0gQWJpbGl0eSBhY3Rpb24gZm9yIGZyb250ZW5kIHVwZGF0ZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbZGVzdHJveV0gLSBBYmlsaXR5IGFjdGlvbiBmb3IgZnJvbnRlbmQgZGVzdHJveS5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IEZyb250ZW5kTW9kZWxSZXNvdXJjZVNlcnZlckNvbmZpZ3VyYXRpb25cbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oe2FjdGlvbjogXCJpbmRleFwiIHwgXCJmaW5kXCIgfCBcImNyZWF0ZVwiIHwgXCJ1cGRhdGVcIiB8IFwiZGVzdHJveVwiIHwgXCJhdHRhY2hcIiB8IFwiYXR0YWNobWVudExpc3RcIiB8IFwiZG93bmxvYWRcIiB8IFwidXJsXCIsIGNvbnRyb2xsZXI6IGltcG9ydChcIi4vY29udHJvbGxlci5qc1wiKS5kZWZhdWx0LCBwYXJhbXM6IFJlY29yZDxzdHJpbmcsID8+LCBtb2RlbENsYXNzOiB0eXBlb2YgaW1wb3J0KFwiLi9kYXRhYmFzZS9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdH0pIDogKGJvb2xlYW4gfCB2b2lkIHwgUHJvbWlzZTxib29sZWFuIHwgdm9pZD4pfSBbYmVmb3JlQWN0aW9uXSAtIE9wdGlvbmFsIGNhbGxiYWNrIHJ1biBiZWZvcmUgYnVpbHQtaW4gZnJvbnRlbmQgYWN0aW9ucy5cbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oe2FjdGlvbjogXCJpbmRleFwiLCBjb250cm9sbGVyOiBpbXBvcnQoXCIuL2NvbnRyb2xsZXIuanNcIikuZGVmYXVsdCwgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCA/PiwgbW9kZWxDbGFzczogdHlwZW9mIGltcG9ydChcIi4vZGF0YWJhc2UvcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHR9KSA6IFByb21pc2U8aW1wb3J0KFwiLi9kYXRhYmFzZS9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdFtdPn0gW3JlY29yZHNdIC0gUmVjb3JkcyBsb2FkZXIgZm9yIGZyb250ZW5kSW5kZXguXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKHthY3Rpb246IFwiaW5kZXhcIiB8IFwiZmluZFwiIHwgXCJjcmVhdGVcIiB8IFwidXBkYXRlXCIsIGNvbnRyb2xsZXI6IGltcG9ydChcIi4vY29udHJvbGxlci5qc1wiKS5kZWZhdWx0LCBwYXJhbXM6IFJlY29yZDxzdHJpbmcsID8+LCBtb2RlbENsYXNzOiB0eXBlb2YgaW1wb3J0KFwiLi9kYXRhYmFzZS9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdCwgbW9kZWw6IGltcG9ydChcIi4vZGF0YWJhc2UvcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHR9KSA6IFJlY29yZDxzdHJpbmcsID8+IHwgUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCA/Pj59IFtzZXJpYWxpemVdIC0gUmVjb3JkIHNlcmlhbGl6ZXIgZm9yIHJlc3BvbnNlIHBheWxvYWRzLlxuICogQHByb3BlcnR5IHtmdW5jdGlvbih7YWN0aW9uOiBcImZpbmRcIiB8IFwidXBkYXRlXCIgfCBcImRlc3Ryb3lcIiB8IFwiYXR0YWNoXCIgfCBcImF0dGFjaG1lbnRMaXN0XCIgfCBcImRvd25sb2FkXCIgfCBcInVybFwiLCBjb250cm9sbGVyOiBpbXBvcnQoXCIuL2NvbnRyb2xsZXIuanNcIikuZGVmYXVsdCwgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCA/PiwgbW9kZWxDbGFzczogdHlwZW9mIGltcG9ydChcIi4vZGF0YWJhc2UvcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHQsIGlkOiBzdHJpbmcgfCBudW1iZXJ9KSA6IFByb21pc2U8aW1wb3J0KFwiLi9kYXRhYmFzZS9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdCB8IG51bGw+fSBbZmluZF0gLSBSZWNvcmQgbG9hZGVyIGZvciBmaW5kL3VwZGF0ZS9kZXN0cm95L2F0dGFjaC9kb3dubG9hZC91cmwgYWN0aW9ucy5cbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oe2FjdGlvbjogXCJjcmVhdGVcIiwgY29udHJvbGxlcjogaW1wb3J0KFwiLi9jb250cm9sbGVyLmpzXCIpLmRlZmF1bHQsIHBhcmFtczogUmVjb3JkPHN0cmluZywgPz4sIG1vZGVsQ2xhc3M6IHR5cGVvZiBpbXBvcnQoXCIuL2RhdGFiYXNlL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0LCBhdHRyaWJ1dGVzOiBSZWNvcmQ8c3RyaW5nLCA/Pn0pIDogUHJvbWlzZTxpbXBvcnQoXCIuL2RhdGFiYXNlL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0Pn0gW2NyZWF0ZV0gLSBDdXN0b20gY3JlYXRlIGNhbGxiYWNrLlxuICogQHByb3BlcnR5IHtmdW5jdGlvbih7YWN0aW9uOiBcInVwZGF0ZVwiLCBjb250cm9sbGVyOiBpbXBvcnQoXCIuL2NvbnRyb2xsZXIuanNcIikuZGVmYXVsdCwgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCA/PiwgbW9kZWxDbGFzczogdHlwZW9mIGltcG9ydChcIi4vZGF0YWJhc2UvcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHQsIG1vZGVsOiBpbXBvcnQoXCIuL2RhdGFiYXNlL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0LCBhdHRyaWJ1dGVzOiBSZWNvcmQ8c3RyaW5nLCA/Pn0pIDogUHJvbWlzZTxpbXBvcnQoXCIuL2RhdGFiYXNlL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0IHwgdm9pZD59IFt1cGRhdGVdIC0gQ3VzdG9tIHVwZGF0ZSBjYWxsYmFjay5cbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oe2FjdGlvbjogXCJkZXN0cm95XCIsIGNvbnRyb2xsZXI6IGltcG9ydChcIi4vY29udHJvbGxlci5qc1wiKS5kZWZhdWx0LCBwYXJhbXM6IFJlY29yZDxzdHJpbmcsID8+LCBtb2RlbENsYXNzOiB0eXBlb2YgaW1wb3J0KFwiLi9kYXRhYmFzZS9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdCwgbW9kZWw6IGltcG9ydChcIi4vZGF0YWJhc2UvcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHR9KSA6IFByb21pc2U8dm9pZD59IFtkZXN0cm95XSAtIEN1c3RvbSBkZXN0cm95IGNhbGxiYWNrLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gQmFja2VuZFByb2plY3RDb25maWd1cmF0aW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcGF0aCAtIFBhdGggdG8gdGhlIGJhY2tlbmQgcHJvamVjdC4gTWF5IGJlIGFuIGFwcCByb290IG9yIGEgY29udHJpYnV0aW5nIHBhY2thZ2Ugcm9vdCAocGFja2FnZSBlbnRyaWVzIGFyZSBhcHBlbmRlZCBpbnRlcm5hbGx5IGZyb20gYHBhY2thZ2VzYCkuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2Zyb250ZW5kTW9kZWxzT3V0cHV0UGF0aF0gLSBPcHRpb25hbCBvdXRwdXQgcHJvamVjdCBwYXRoIHdoZXJlIGBzcmMvZnJvbnRlbmQtbW9kZWxzYCBzaG91bGQgYmUgZ2VuZXJhdGVkLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtyZXNvdXJjZXNQYXRoXSAtIE9wdGlvbmFsIG92ZXJyaWRlIGZvciB0aGUgcmVzb3VyY2VzIGRpcmVjdG9yeSB0byBhdXRvLWRpc2NvdmVyOyBkZWZhdWx0cyB0byBgPHBhdGg+L3NyYy9yZXNvdXJjZXNgLiBTZXQgaW50ZXJuYWxseSBmb3IgcGFja2FnZSBlbnRyaWVzLlxuICogQHByb3BlcnR5IHtSZWNvcmQ8c3RyaW5nLCBGcm9udGVuZE1vZGVsUmVzb3VyY2VEZWZpbml0aW9uPn0gW2Zyb250ZW5kTW9kZWxzXSAtIEF1dG8tZGlzY292ZXJlZCBmcm9udGVuZCBtb2RlbCBkZWZpbml0aW9ucyBrZXllZCBieSBtb2RlbCBjbGFzcyBuYW1lLiBTZXQgaW50ZXJuYWxseSBieSB0aGUgZW52aXJvbm1lbnQgaGFuZGxlciDigJQgZG8gbm90IHNldCBtYW51YWxseS5cbiAqIEBwcm9wZXJ0eSB7QWJpbGl0eVJlc291cmNlQ2xhc3NUeXBlW119IFthYmlsaXR5UmVzb3VyY2VzXSAtIEF1dG8tZGlzY292ZXJlZCBhYmlsaXR5IHJlc291cmNlIGNsYXNzZXMgKGZyb250ZW5kLW1vZGVsIGFuZCBhdXRob3JpemF0aW9uKSBmcm9tIHRoaXMgcHJvamVjdCdzIHJlc291cmNlcyBkaXJlY3RvcnkuIFNldCBpbnRlcm5hbGx5IGJ5IHRoZSBlbnZpcm9ubWVudCBoYW5kbGVyIOKAlCBkbyBub3Qgc2V0IG1hbnVhbGx5LlxuICovXG5cbi8qKlxuICogQSBkZXNjcmlwdG9yIGZvciBhbiBleHRlcm5hbCBWZWxvY2lvdXMgcGFja2FnZSAoZW5naW5lKSB0aGF0IGNvbnRyaWJ1dGVzIG1vZGVscyxcbiAqIHJlc291cmNlcyBhbmQgbWlncmF0aW9ucy4gQSBwYWNrYWdlIHVzdWFsbHkgZXhwb3J0cyBgbmV3IFZlbG9jaW91c1BhY2thZ2Uoe25hbWUsIHVybDogaW1wb3J0Lm1ldGEudXJsfSlgLlxuICogQHR5cGVkZWYge29iamVjdH0gVmVsb2Npb3VzUGFja2FnZURlc2NyaXB0b3JcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBuYW1lIC0gVGhlIHBhY2thZ2UgbmFtZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbdXJsXSAtIFRoZSBkZXNjcmlwdG9yIG1vZHVsZSdzIGBpbXBvcnQubWV0YS51cmxgOyB0aGUgcGFja2FnZSByb290IGlzIGRlcml2ZWQgZnJvbSBpdCB3aGVuIGBwYXRoYCBpcyBvbWl0dGVkLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtwYXRoXSAtIFRoZSBwYWNrYWdlIHJvb3QgZGlyZWN0b3J5ICh0aGUgb25lIGNvbnRhaW5pbmcgYHNyY2ApLiBEZXJpdmVkIGZyb20gYHVybGAgd2hlbiBvbWl0dGVkLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFttb2RlbHNQYXRoXSAtIE92ZXJyaWRlIGZvciB0aGUgcGFja2FnZSdzIG1vZGVscyBkaXJlY3RvcnkgKGRlZmF1bHQgYDxwYXRoPi9zcmMvbW9kZWxzYCkuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3Jlc291cmNlc1BhdGhdIC0gT3ZlcnJpZGUgZm9yIHRoZSBwYWNrYWdlJ3MgZnJvbnRlbmQtbW9kZWwgcmVzb3VyY2VzIGRpcmVjdG9yeSAoZGVmYXVsdCBgPHBhdGg+L3NyYy9yZXNvdXJjZXNgKS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbbWlncmF0aW9uc1BhdGhdIC0gT3ZlcnJpZGUgZm9yIHRoZSBwYWNrYWdlJ3MgbWlncmF0aW9ucyBkaXJlY3RvcnkgKGRlZmF1bHQgYDxwYXRoPi9zcmMvZGF0YWJhc2UvbWlncmF0aW9uc2ApLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydChcIi4vcGFja2FnZXMvdmVsb2Npb3VzLXBhY2thZ2UuanNcIikuZGVmYXVsdCB8IFZlbG9jaW91c1BhY2thZ2VEZXNjcmlwdG9yfSBWZWxvY2lvdXNQYWNrYWdlQ29uZmlndXJhdGlvblxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gUm91dGVSZXNvbHZlckhvb2tBcmdzXG4gKiBAcHJvcGVydHkge2ltcG9ydChcIi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0fSBjb25maWd1cmF0aW9uIC0gQ29uZmlndXJhdGlvbiBpbnN0YW5jZS5cbiAqIEBwcm9wZXJ0eSB7UmVjb3JkPHN0cmluZywgPz59IHBhcmFtcyAtIE11dGFibGUgcmVxdWVzdCBwYXJhbXMgb2JqZWN0LlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGN1cnJlbnRQYXRoIC0gUmVxdWVzdCBwYXRoIHdpdGhvdXQgcXVlcnkuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtoYXNNYXRjaGluZ0N1c3RvbVJvdXRlXSAtIFRydWUgd2hlbiBtYXRjaGluZyBhIGNvbmZpZ3VyZWQgY3VzdG9tIHJvdXRlLlxuICogQHByb3BlcnR5IHtpbXBvcnQoXCIuL2h0dHAtc2VydmVyL2NsaWVudC9yZXF1ZXN0LmpzXCIpLmRlZmF1bHQgfCBpbXBvcnQoXCIuL2h0dHAtc2VydmVyL2NsaWVudC93ZWJzb2NrZXQtcmVxdWVzdC5qc1wiKS5kZWZhdWx0fSByZXF1ZXN0IC0gUmVxdWVzdCBvYmplY3QuXG4gKiBAcHJvcGVydHkge2ltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3Jlc3BvbnNlLmpzXCIpLmRlZmF1bHR9IHJlc3BvbnNlIC0gUmVzcG9uc2Ugb2JqZWN0LlxuICogQHByb3BlcnR5IHtpbXBvcnQoXCIuL3JvdXRlcy9yZXNvbHZlci5qc1wiKS5kZWZhdWx0fSByZXNvbHZlciAtIFJlc29sdmVyIGluc3RhbmNlLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gUm91dGVSZXNvbHZlckhvb2tSZXN1bHRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhY3Rpb24gLSBEYXNoZXJpemVkIGFjdGlvbiBuYW1lIChmb3IgZXhhbXBsZSBgZnJvbnRlbmQtaW5kZXhgKS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjb250cm9sbGVyIC0gQ29udHJvbGxlciBwYXRoIChmb3IgZXhhbXBsZSBgYWNjb3VudHNgKS5cbiAqIEBwcm9wZXJ0eSB7dHlwZW9mIGltcG9ydChcIi4vY29udHJvbGxlci5qc1wiKS5kZWZhdWx0fSBbY29udHJvbGxlckNsYXNzXSAtIE9wdGlvbmFsIGNvbnRyb2xsZXIgY2xhc3Mgb3ZlcnJpZGUuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2NvbnRyb2xsZXJQYXRoXSAtIE9wdGlvbmFsIGFic29sdXRlL3JlbGF0aXZlIGNvbnRyb2xsZXIgZmlsZSBwYXRoIG92ZXJyaWRlLlxuICogQHByb3BlcnR5IHtSZWNvcmQ8c3RyaW5nLCA/Pn0gW3BhcmFtc10gLSBFeHRyYSBwYXJhbXMgdG8gbWVyZ2UgZm9yIGNvbnRyb2xsZXIvYWN0aW9uLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbc2tpcEFiaWxpdHlSZXNvbHV0aW9uXSAtIFdoZXRoZXIgdG8gcnVuIHRoZSBjb250cm9sbGVyIGFjdGlvbiB3aXRob3V0IHJlc29sdmluZyByZXF1ZXN0IGFiaWxpdHkuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtza2lwQ29udHJvbGxlckNvbm5lY3Rpb25zXSAtIFdoZXRoZXIgdG8gcnVuIHRoZSBjb250cm9sbGVyIGFjdGlvbiB3aXRob3V0IHRoZSBhdXRvbWF0aWMgZGF0YWJhc2UgY2hlY2tvdXQgd3JhcHBlci5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3NraXBUZW5hbnRSZXNvbHV0aW9uXSAtIFdoZXRoZXIgdG8gcnVuIHRoZSBjb250cm9sbGVyIGFjdGlvbiB3aXRob3V0IHJlc29sdmluZyByZXF1ZXN0IHRlbmFudC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbdmlld1BhdGhdIC0gT3B0aW9uYWwgdmlldyBwYXRoIG92ZXJyaWRlIHVzZWQgYnkgY29udHJvbGxlciByZW5kZXIgbG9va3Vwcy5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtmdW5jdGlvbihSb3V0ZVJlc29sdmVySG9va0FyZ3MpIDogUm91dGVSZXNvbHZlckhvb2tSZXN1bHQgfCBudWxsIHwgUHJvbWlzZTxSb3V0ZVJlc29sdmVySG9va1Jlc3VsdCB8IG51bGw+fSBSb3V0ZVJlc29sdmVySG9va1R5cGVcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHt0eXBlb2YgaW1wb3J0KFwiLi9hdXRob3JpemF0aW9uL2Jhc2UtcmVzb3VyY2UuanNcIikuZGVmYXVsdH0gQWJpbGl0eVJlc291cmNlQ2xhc3NUeXBlXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7ZnVuY3Rpb24oe2NvbmZpZ3VyYXRpb246IGltcG9ydChcIi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0LCBwYXJhbXM6IFJlY29yZDxzdHJpbmcsID8+LCByZXF1ZXN0OiBpbXBvcnQoXCIuL2h0dHAtc2VydmVyL2NsaWVudC9yZXF1ZXN0LmpzXCIpLmRlZmF1bHQgfCBpbXBvcnQoXCIuL2h0dHAtc2VydmVyL2NsaWVudC93ZWJzb2NrZXQtcmVxdWVzdC5qc1wiKS5kZWZhdWx0LCByZXNwb25zZTogaW1wb3J0KFwiLi9odHRwLXNlcnZlci9jbGllbnQvcmVzcG9uc2UuanNcIikuZGVmYXVsdH0pIDogaW1wb3J0KFwiLi9hdXRob3JpemF0aW9uL2FiaWxpdHkuanNcIikuZGVmYXVsdCB8IHZvaWQgfCBQcm9taXNlPGltcG9ydChcIi4vYXV0aG9yaXphdGlvbi9hYmlsaXR5LmpzXCIpLmRlZmF1bHQgfCB2b2lkPn0gQWJpbGl0eVJlc29sdmVyVHlwZVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge2Z1bmN0aW9uKHtjb25maWd1cmF0aW9uOiBpbXBvcnQoXCIuL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdCwgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCA/PiwgcmVxdWVzdDogaW1wb3J0KFwiLi9odHRwLXNlcnZlci9jbGllbnQvcmVxdWVzdC5qc1wiKS5kZWZhdWx0IHwgaW1wb3J0KFwiLi9odHRwLXNlcnZlci9jbGllbnQvd2Vic29ja2V0LXJlcXVlc3QuanNcIikuZGVmYXVsdCB8IHVuZGVmaW5lZCwgcmVzcG9uc2U6IGltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3Jlc3BvbnNlLmpzXCIpLmRlZmF1bHQgfCB1bmRlZmluZWQsIHN1YnNjcmlwdGlvbj86IHtjaGFubmVsOiBzdHJpbmcsIHBhcmFtcz86IFJlY29yZDxzdHJpbmcsID8+fX0pIDogPyB8IHZvaWQgfCBQcm9taXNlPD8gfCB2b2lkPn0gVGVuYW50UmVzb2x2ZXJUeXBlXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7ZnVuY3Rpb24oe2NvbmZpZ3VyYXRpb246IGltcG9ydChcIi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0LCBkYXRhYmFzZUNvbmZpZ3VyYXRpb246IERhdGFiYXNlQ29uZmlndXJhdGlvblR5cGUsIGlkZW50aWZpZXI6IHN0cmluZywgdGVuYW50OiA/fSkgOiBEYXRhYmFzZUNvbmZpZ3VyYXRpb25UeXBlIHwgUGFydGlhbDxEYXRhYmFzZUNvbmZpZ3VyYXRpb25UeXBlPiB8IHZvaWR9IFRlbmFudERhdGFiYXNlUmVzb2x2ZXJUeXBlXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBEZWJ1Z0VuZHBvaW50Q29uZmlndXJhdGlvblxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtwYXRoXSAtIEhUVFAgcGF0aCBmb3IgdGhlIGJ1aWx0LWluIGRlYnVnIGVuZHBvaW50LiBEZWZhdWx0cyB0byBgL3ZlbG9jaW91cy9kZWJ1Z2AuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3Rva2VuXSAtIEJlYXJlciB0b2tlbiByZXF1aXJlZCBpbiB0aGUgYEF1dGhvcml6YXRpb246IEJlYXJlciA8dG9rZW4+YCBoZWFkZXIuIFdoZW4gc2V0LCByZXF1ZXN0cyB3aXRob3V0IGEgbWF0Y2hpbmcgdG9rZW4gYXJlIG5vdCByb3V0ZWQgKDQwNCksIHNvIHRoZSBlbmRwb2ludCBzdGF5cyBoaWRkZW4uXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBUZW5hbnREYXRhYmFzZVByb3ZpZGVyVHlwZVxuICogQHByb3BlcnR5IHtmdW5jdGlvbih7Y29uZmlndXJhdGlvbjogaW1wb3J0KFwiLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHQsIGlkZW50aWZpZXI6IHN0cmluZ30pIDogQXJyYXk8Pz4gfCBQcm9taXNlPEFycmF5PD8+Pn0gbGlzdFRlbmFudHMgLSBMaXN0cyB0ZW5hbnRzIHRoYXQgc2hvdWxkIGJlIGNyZWF0ZWQsIGNoZWNrZWQsIG9yIG1pZ3JhdGVkIGZvciB0aGlzIGRhdGFiYXNlIGlkZW50aWZpZXIuXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKHtjb25maWd1cmF0aW9uOiBpbXBvcnQoXCIuL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdCwgaWRlbnRpZmllcjogc3RyaW5nfSkgOiBBcnJheTw/PiB8IFByb21pc2U8QXJyYXk8Pz4+fSBbbGlzdFJlc3RyaWN0VGVuYW50c10gLSBMaXN0cyBleGlzdGluZyB0ZW5hbnRzIHRoYXQgc2hvdWxkIGJlIGNoZWNrZWQgZm9yIGRlcGVuZGVudCByZXN0cmljdCBkZXN0cm95cy4gRGVmYXVsdHMgdG8gbGlzdFRlbmFudHMuXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKHtjb25maWd1cmF0aW9uOiBpbXBvcnQoXCIuL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdCwgZGF0YWJhc2VDb25maWd1cmF0aW9uOiBEYXRhYmFzZUNvbmZpZ3VyYXRpb25UeXBlLCBpZGVudGlmaWVyOiBzdHJpbmcsIHRlbmFudDogP30pIDogdm9pZCB8IFByb21pc2U8dm9pZD59IFtjcmVhdGVEYXRhYmFzZV0gLSBDcmVhdGVzIHRoZSB0ZW5hbnQgZGF0YWJhc2Uvc2NoZW1hIGZvciBvbmUgdGVuYW50LlxuICogQHByb3BlcnR5IHtmdW5jdGlvbih7Y29uZmlndXJhdGlvbjogaW1wb3J0KFwiLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHQsIGRhdGFiYXNlQ29uZmlndXJhdGlvbjogRGF0YWJhc2VDb25maWd1cmF0aW9uVHlwZSwgaWRlbnRpZmllcjogc3RyaW5nLCB0ZW5hbnQ6ID99KSA6IHZvaWQgfCBQcm9taXNlPHZvaWQ+fSBbZHJvcERhdGFiYXNlXSAtIERyb3BzIHRoZSB0ZW5hbnQgZGF0YWJhc2Uvc2NoZW1hIGZvciBvbmUgdGVuYW50LlxuICogQHByb3BlcnR5IHtmdW5jdGlvbih7Y29uZmlndXJhdGlvbjogaW1wb3J0KFwiLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHQsIGRhdGFiYXNlQ29uZmlndXJhdGlvbjogRGF0YWJhc2VDb25maWd1cmF0aW9uVHlwZSwgaWRlbnRpZmllcjogc3RyaW5nLCB0ZW5hbnQ6ID99KSA6IHZvaWQgfCBQcm9taXNlPHZvaWQ+fSBbY2hlY2tUZW5hbnRdIC0gQ2hlY2tzIG9uZSB0ZW5hbnQgZGF0YWJhc2UgYmVmb3JlIGdlbmVyaWMgY29ubmVjdGlvbiB2YWxpZGF0aW9uLlxuICogQHByb3BlcnR5IHtmdW5jdGlvbih7Y29uZmlndXJhdGlvbjogaW1wb3J0KFwiLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHQsIGRhdGFiYXNlQ29uZmlndXJhdGlvbjogRGF0YWJhc2VDb25maWd1cmF0aW9uVHlwZSwgaWRlbnRpZmllcjogc3RyaW5nLCBtaWdyYXRpb25zQXBwbGllZDogbnVtYmVyLCB0ZW5hbnQ6ID99KSA6IHZvaWQgfCBQcm9taXNlPHZvaWQ+fSBbYWZ0ZXJNaWdyYXRlVGVuYW50XSAtIFJ1bnMgYXBwLW93bmVkIHRlbmFudCB3b3JrIGFmdGVyIGdlbmVyaWMgbWlncmF0aW9ucyBmb3Igb25lIHRlbmFudC4gYG1pZ3JhdGlvbnNBcHBsaWVkYCBpcyBob3cgbWFueSBtaWdyYXRpb25zIGFjdHVhbGx5IHJhbiAoMCB3aGVuIHRoZSB0ZW5hbnQgd2FzIGFscmVhZHkgdXAgdG8gZGF0ZSksIHNvIHRoZSBhcHAgY2FuIHNraXAgZXhwZW5zaXZlIHBlci10ZW5hbnQgd29yayBvbiBuby1vcCBkZXBsb3lzLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gQ29uZmlndXJhdGlvbkFyZ3NUeXBlXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFthdXRvbG9hZF0gLSBHbG9iYWxseSBlbmFibGUgYXV0by1iYXRjaC1wcmVsb2FkIG9mIHJlbGF0aW9uc2hpcHMgb24gbGF6eSBhY2Nlc3MuIERlZmF1bHQgdHJ1ZS5cbiAqIEBwcm9wZXJ0eSB7Q29yc1R5cGV9IFtjb3JzXSAtIENPUlMgY29uZmlndXJhdGlvbiBmb3IgdGhlIEhUVFAgc2VydmVyLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtjb29raWVTZWNyZXRdIC0gU2VjcmV0IGZvciBlbmNyeXB0aW5nIGNvb2tpZXMuXG4gKiBAcHJvcGVydHkge0FiaWxpdHlSZXNvdXJjZUNsYXNzVHlwZVtdfSBbYWJpbGl0eVJlc291cmNlc10gLSBSZXNvdXJjZSBjbGFzc2VzIHVzZWQgdG8gZGVmaW5lIGFiaWxpdGllcyBwZXIgbW9kZWwuXG4gKiBAcHJvcGVydHkge0FiaWxpdHlSZXNvbHZlclR5cGV9IFthYmlsaXR5UmVzb2x2ZXJdIC0gUmVzb2x2ZXIgZm9yIGNyZWF0aW5nIHJlcXVlc3Qtc2NvcGVkIGFiaWxpdHkgaW5zdGFuY2VzLlxuICogQHByb3BlcnR5IHtBdHRhY2htZW50c0NvbmZpZ3VyYXRpb259IFthdHRhY2htZW50c10gLSBBdHRhY2htZW50IHN0b3JhZ2UgY29uZmlndXJhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7QmFja2VuZFByb2plY3RDb25maWd1cmF0aW9uW119IFtiYWNrZW5kUHJvamVjdHNdIC0gQmFja2VuZCBwcm9qZWN0IGRlZmluaXRpb25zIHVzZWQgZm9yIGZyb250ZW5kIG1vZGVsIGdlbmVyYXRpb24uXG4gKiBAcHJvcGVydHkge1ZlbG9jaW91c1BhY2thZ2VDb25maWd1cmF0aW9uW119IFtwYWNrYWdlc10gLSBFeHRlcm5hbCBWZWxvY2lvdXMgcGFja2FnZXMgdGhhdCBjb250cmlidXRlIG1vZGVscywgZnJvbnRlbmQtbW9kZWwgcmVzb3VyY2VzIGFuZCBtaWdyYXRpb25zLlxuICogQHByb3BlcnR5IHt7W2tleTogc3RyaW5nXToge1trZXk6IHN0cmluZ106IERhdGFiYXNlQ29uZmlndXJhdGlvblR5cGV9fX0gZGF0YWJhc2UgLSBEYXRhYmFzZSBjb25maWd1cmF0aW9ucyBrZXllZCBieSBlbnZpcm9ubWVudCBhbmQgaWRlbnRpZmllci5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2RlYnVnXSAtIEVuYWJsZSBkZWJ1ZyBsb2dnaW5nLlxuICogQHByb3BlcnR5IHtib29sZWFuIHwgRGVidWdFbmRwb2ludENvbmZpZ3VyYXRpb259IFtkZWJ1Z0VuZHBvaW50XSAtIEVuYWJsZSB0aGUgYnVpbHQtaW4gZGVidWcgZW5kcG9pbnQuIERlZmF1bHRzIHRvIGZhbHNlLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtkaXJlY3RvcnldIC0gQmFzZSBkaXJlY3RvcnkgZm9yIHRoZSBwcm9qZWN0LlxuICogQHByb3BlcnR5IHtib29sZWFufSBbZW5mb3JjZVRlbmFudERhdGFiYXNlU2NvcGVzXSAtIFJlcXVpcmUgdGVuYW50LXN3aXRjaGVkIG1vZGVsIHF1ZXJpZXMgdG8gcmVzb2x2ZSBhIHRlbmFudCBkYXRhYmFzZSBpZGVudGlmaWVyLiBEZWZhdWx0cyB0byB0cnVlLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtlbnZpcm9ubWVudF0gLSBDdXJyZW50IGVudmlyb25tZW50IG5hbWUuXG4gKiBAcHJvcGVydHkge2ltcG9ydChcIi4vZW52aXJvbm1lbnQtaGFuZGxlcnMvYmFzZS5qc1wiKS5kZWZhdWx0fSBlbnZpcm9ubWVudEhhbmRsZXIgLSBFbnZpcm9ubWVudCBoYW5kbGVyIGluc3RhbmNlLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbZXhwb3NlSW50ZXJuYWxFcnJvcnNUb0NsaWVudHNdIC0gUmV0dXJuIHVuZXhwZWN0ZWQgaW50ZXJuYWwgZXJyb3IgZGV0YWlscyBpbiBjbGllbnQgQVBJIHBheWxvYWRzIG91dHNpZGUgcHJvZHVjdGlvbi4gRGVmYXVsdHMgdG8gZmFsc2UuXG4gKiBAcHJvcGVydHkge0h0dHBTZXJ2ZXJDb25maWd1cmF0aW9ufSBbaHR0cFNlcnZlcl0gLSBEZWZhdWx0IEhUVFAgc2VydmVyIGNvbmZpZ3VyYXRpb24gZm9yIGFwcGxpY2F0aW9ucyBzdGFydGVkIGZyb20gdGhpcyBjb25maWd1cmF0aW9uLlxuICogQHByb3BlcnR5IHtMb2dnaW5nQ29uZmlndXJhdGlvbn0gW2xvZ2dpbmddIC0gTG9nZ2luZyBjb25maWd1cmF0aW9uLlxuICogQHByb3BlcnR5IHtCYWNrZ3JvdW5kSm9ic0NvbmZpZ3VyYXRpb259IFtiYWNrZ3JvdW5kSm9ic10gLSBCYWNrZ3JvdW5kIGpvYnMgY29uZmlndXJhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7QmVhY29uQ29uZmlndXJhdGlvbn0gW2JlYWNvbl0gLSBCZWFjb24gYnJvYWRjYXN0IGJ1cyBjb25maWd1cmF0aW9uLlxuICogQHByb3BlcnR5IHtTY2hlZHVsZWRCYWNrZ3JvdW5kSm9ic0NvbmZpZ3VyYXRpb24gfCBTY2hlZHVsZWRCYWNrZ3JvdW5kSm9ic0xvYWRlclR5cGV9IFtzY2hlZHVsZWRCYWNrZ3JvdW5kSm9ic10gLSBTY2hlZHVsZWQgYmFja2dyb3VuZCBqb2JzIGNvbmZpZ3VyYXRpb24uXG4gKiBAcHJvcGVydHkge01haWxlckJhY2tlbmR9IFttYWlsZXJCYWNrZW5kXSAtIE1haWwgZGVsaXZlcnkgYmFja2VuZC5cbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oe2NvbmZpZ3VyYXRpb246IGltcG9ydChcIi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0LCB0eXBlOiBzdHJpbmd9KSA6IHZvaWR9IGluaXRpYWxpemVNb2RlbHMgLSBIb29rIHRvIHJlZ2lzdGVyIG1vZGVscyBmb3IgYSBnaXZlbiBpbml0aWFsaXphdGlvbiB0eXBlLlxuICogQHByb3BlcnR5IHtJbml0aWFsaXplcnNUeXBlfSBbaW5pdGlhbGl6ZXJzXSAtIEluaXRpYWxpemVyIGxvYWRlciBmb3IgZW52aXJvbm1lbnQgYm9vdHN0cmFwcGluZy5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nIHwgZnVuY3Rpb24oKSA6IHN0cmluZ30gbG9jYWxlIC0gRGVmYXVsdCBsb2NhbGUgb3IgbG9jYWxlIHJlc29sdmVyLlxuICogQHByb3BlcnR5IHtzdHJpbmdbXX0gbG9jYWxlcyAtIFN1cHBvcnRlZCBsb2NhbGVzLlxuICogQHByb3BlcnR5IHtMb2NhbGVGYWxsYmFja3NUeXBlfSBsb2NhbGVGYWxsYmFja3MgLSBMb2NhbGUgZmFsbGJhY2sgbWFwLlxuICogQHByb3BlcnR5IHtTdHJ1Y3R1cmVTcWxDb25maWd1cmF0aW9ufSBbc3RydWN0dXJlU3FsXSAtIFN0cnVjdHVyZSBTUUwgZ2VuZXJhdGlvbiBjb25maWd1cmF0aW9uLlxuICogQHByb3BlcnR5IHtWZWxvY2lvdXNTeW5jQ29uZmlndXJhdGlvbn0gW3N5bmNdIC0gTG9jYWwvb2ZmbGluZSBzeW5jIGZyYW1ld29yayBjb25maWd1cmF0aW9uLlxuICogQHByb3BlcnR5IHtUZW5hbnRSZXNvbHZlclR5cGV9IFt0ZW5hbnRSZXNvbHZlcl0gLSBSZXNvbHZlciBmb3IgY3JlYXRpbmcgcmVxdWVzdC1zY29wZWQgdGVuYW50IGNvbnRleHQgb2JqZWN0cy5cbiAqIEBwcm9wZXJ0eSB7VGVuYW50RGF0YWJhc2VSZXNvbHZlclR5cGV9IFt0ZW5hbnREYXRhYmFzZVJlc29sdmVyXSAtIFJlc29sdmVyIGZvciBkZXJpdmluZyB0ZW5hbnQtc3BlY2lmaWMgZGF0YWJhc2UgY29uZmlnIG92ZXJyaWRlcy5cbiAqIEBwcm9wZXJ0eSB7UmVjb3JkPHN0cmluZywgVGVuYW50RGF0YWJhc2VQcm92aWRlclR5cGU+fSBbdGVuYW50RGF0YWJhc2VQcm92aWRlcnNdIC0gVGVuYW50IGRhdGFiYXNlIGxpZmVjeWNsZSBwcm92aWRlcnMga2V5ZWQgYnkgZGF0YWJhc2UgaWRlbnRpZmllci5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbdGVzdGluZ10gLSBQYXRoIHRvIHRoZSB0ZXN0aW5nIGNvbmZpZ3VyYXRpb24gZmlsZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nIHwgKCgpID0+IHN0cmluZyB8IHVuZGVmaW5lZCl9IFt0aW1lWm9uZV0gLSBEZWZhdWx0IHRpbWV6b25lIGZvciB0aW1lem9uZS1sZXNzIGRhdGV0aW1lIHN0cmluZ3MuXG4gKiBAcHJvcGVydHkge251bWJlciB8ICgoKSA9PiBudW1iZXIpfSBbdGltZXpvbmVPZmZzZXRNaW51dGVzXSAtIERlZmF1bHQgdGltZXpvbmUgb2Zmc2V0IGluIG1pbnV0ZXMuXG4gKiBAcHJvcGVydHkge3N0cmluZyB8IHN0cmluZ1tdfSBbdHJ1c3RlZFByb3hpZXNdIC0gVHJ1c3RlZCByZXZlcnNlIHByb3h5IGFkZHJlc3MgcmFuZ2VzIHVzZWQgdG8gcmVzb2x2ZSByZXF1ZXN0IHJlbW90ZSBhZGRyZXNzZXMgZnJvbSBmb3J3YXJkaW5nIGhlYWRlcnMuXG4gKiBAcHJvcGVydHkge251bWJlciB8ICgoKSA9PiBudW1iZXIpfSBbcmVxdWVzdFRpbWVvdXRNc10gLSBUaW1lb3V0IGluIHNlY29uZHMgZm9yIGNvbXBsZXRpbmcgYSBIVFRQIHJlcXVlc3QuXG4gKiBAcHJvcGVydHkge1JvdXRlUmVzb2x2ZXJIb29rVHlwZVtdfSBbcm91dGVSZXNvbHZlckhvb2tzXSAtIEhvb2sgY2FsbGJhY2tzIHRoYXQgY2FuIGhpamFjayB1bnJlc29sdmVkIHJvdXRlcy5cbiAqIEBwcm9wZXJ0eSB7V2Vic29ja2V0Q2hhbm5lbFJlc29sdmVyVHlwZX0gW3dlYnNvY2tldENoYW5uZWxSZXNvbHZlcl0gLSBSZXNvbHZlIGEgd2Vic29ja2V0IGNoYW5uZWwgY2xhc3MvaW5zdGFuY2UgZm9yIGVhY2ggY29ubmVjdGlvbi5cbiAqIEBwcm9wZXJ0eSB7V2Vic29ja2V0TWVzc2FnZUhhbmRsZXJSZXNvbHZlclR5cGV9IFt3ZWJzb2NrZXRNZXNzYWdlSGFuZGxlclJlc29sdmVyXSAtIFJlc29sdmUgYSByYXcgd2Vic29ja2V0IG1lc3NhZ2UgaGFuZGxlciBmb3IgZWFjaCBjb25uZWN0aW9uLlxuICovXG5cbmV4cG9ydCBjb25zdCBub3RoaW5nID0ge31cbiJdfQ==
|
|
544
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJhdGlvbi10eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb25maWd1cmF0aW9uLXR5cGVzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWjs7R0FFRztBQUVIOztHQUVHO0FBRUg7O0dBRUc7QUFFSDs7Ozs7O0dBTUc7QUFFSDs7R0FFRztBQUVIOzs7Ozs7OztHQVFHO0FBRUg7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFFSDs7Ozs7R0FLRztBQUVIOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EyQkc7QUFFSDs7R0FFRztBQUVIOzs7Ozs7R0FNRztBQUVIOzs7O0dBSUc7QUFFSDs7OztHQUlHO0FBRUg7O0dBRUc7QUFFSDs7Ozs7Ozs7Ozs7R0FXRztBQUVIOzs7O0dBSUc7QUFFSDs7Ozs7Ozs7Ozs7R0FXRztBQUVIOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBRUg7Ozs7Ozs7O0dBUUc7QUFFSDs7Ozs7OztHQU9HO0FBRUg7OztHQUdHO0FBRUg7Ozs7Ozs7O0dBUUc7QUFFSDs7R0FFRztBQUVIOztHQUVHO0FBRUg7Ozs7O0dBS0c7QUFFSDs7Ozs7Ozs7O0dBU0c7QUFFSDs7Ozs7OztHQU9HO0FBRUg7O0dBRUc7QUFFSDs7R0FFRztBQUVIOzs7R0FHRztBQUVIOztHQUVHO0FBRUg7Ozs7O0dBS0c7QUFFSDs7Ozs7O0dBTUc7QUFFSDs7O0dBR0c7QUFHSDs7R0FFRztBQUVIOzs7Ozs7R0FNRztBQUVIOzs7Ozs7Ozs7O0dBVUc7QUFFSDs7O0dBR0c7QUFFSDs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSDs7Ozs7OztHQU9HO0FBRUg7Ozs7R0FJRztBQUVIOzs7R0FHRztBQUVIOzs7Ozs7Ozs7OztHQVdHO0FBRUg7Ozs7O0dBS0c7QUFFSDs7Ozs7R0FLRztBQUVIOzs7Ozs7O0dBT0c7QUFFSDs7Ozs7O0dBTUc7QUFFSDs7Ozs7O0dBTUc7QUFFSDs7Ozs7Ozs7Ozs7R0FXRztBQUVIOzs7Ozs7Ozs7Ozs7R0FZRztBQUVIOzs7Ozs7Ozs7R0FTRztBQUVIOzs7Ozs7Ozs7R0FTRztBQUVIOzs7Ozs7Ozs7O0dBVUc7QUFFSDs7R0FFRztBQUVIOztHQUVHO0FBRUg7Ozs7Ozs7R0FPRztBQUVIOzs7Ozs7Ozs7R0FTRztBQUVIOzs7Ozs7O0dBT0c7QUFFSDs7Ozs7Ozs7OztHQVVHO0FBRUg7O0dBRUc7QUFFSDs7Ozs7Ozs7O0dBU0c7QUFFSDs7Ozs7Ozs7Ozs7R0FXRztBQUVIOztHQUVHO0FBRUg7O0dBRUc7QUFFSDs7R0FFRztBQUVIOztHQUVHO0FBRUg7O0dBRUc7QUFFSDs7OztHQUlHO0FBRUg7Ozs7Ozs7O0dBUUc7QUFFSDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMENHO0FBRUgsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG4vKipcbiAqIEBtb2R1bGUgdHlwZXNcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtmdW5jdGlvbih7cmVxdWVzdDogaW1wb3J0KFwiLi9odHRwLXNlcnZlci9jbGllbnQvcmVxdWVzdC5qc1wiKS5kZWZhdWx0IHwgaW1wb3J0KFwiLi9odHRwLXNlcnZlci9jbGllbnQvd2Vic29ja2V0LXJlcXVlc3QuanNcIikuZGVmYXVsdCwgcmVzcG9uc2U6IGltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3Jlc3BvbnNlLmpzXCIpLmRlZmF1bHR9KTogUHJvbWlzZTx2b2lkPn0gQ29yc1R5cGVcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtmdW5jdGlvbih7cmVxdWVzdDogaW1wb3J0KFwiLi9odHRwLXNlcnZlci9jbGllbnQvcmVxdWVzdC5qc1wiKS5kZWZhdWx0IHwgaW1wb3J0KFwiLi9odHRwLXNlcnZlci9jbGllbnQvd2Vic29ja2V0LXJlcXVlc3QuanNcIikuZGVmYXVsdCB8IHVuZGVmaW5lZCwgc3Vic2NyaXB0aW9uPzoge2NoYW5uZWw6IHN0cmluZywgcGFyYW1zPzogUmVjb3JkPHN0cmluZywgPz59LCBjbGllbnQ6IGltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvY2xpZW50L2luZGV4LmpzXCIpLmRlZmF1bHQsIHdlYnNvY2tldFNlc3Npb246IGltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3dlYnNvY2tldC1zZXNzaW9uLmpzXCIpLmRlZmF1bHQsIGNvbmZpZ3VyYXRpb246IGltcG9ydChcIi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0fSk6IHR5cGVvZiBpbXBvcnQoXCIuL2h0dHAtc2VydmVyL3dlYnNvY2tldC1jaGFubmVsLmpzXCIpLmRlZmF1bHQgfCBpbXBvcnQoXCIuL2h0dHAtc2VydmVyL3dlYnNvY2tldC1jaGFubmVsLmpzXCIpLmRlZmF1bHQgfCB2b2lkIHwgUHJvbWlzZTx0eXBlb2YgaW1wb3J0KFwiLi9odHRwLXNlcnZlci93ZWJzb2NrZXQtY2hhbm5lbC5qc1wiKS5kZWZhdWx0IHwgaW1wb3J0KFwiLi9odHRwLXNlcnZlci93ZWJzb2NrZXQtY2hhbm5lbC5qc1wiKS5kZWZhdWx0IHwgdm9pZD59IFdlYnNvY2tldENoYW5uZWxSZXNvbHZlclR5cGVcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFdlYnNvY2tldE1lc3NhZ2VIYW5kbGVyXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKHttZXNzYWdlOiA/LCBzZXNzaW9uOiBpbXBvcnQoXCIuL2h0dHAtc2VydmVyL2NsaWVudC93ZWJzb2NrZXQtc2Vzc2lvbi5qc1wiKS5kZWZhdWx0fSkgOiBQcm9taXNlPHZvaWQ+IHwgdm9pZH0gW29uTWVzc2FnZV0gLSBIYW5kbGVyIGZvciBpbmNvbWluZyB3ZWJzb2NrZXQgbWVzc2FnZXMuXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKHtzZXNzaW9uOiBpbXBvcnQoXCIuL2h0dHAtc2VydmVyL2NsaWVudC93ZWJzb2NrZXQtc2Vzc2lvbi5qc1wiKS5kZWZhdWx0fSkgOiBQcm9taXNlPHZvaWQ+IHwgdm9pZH0gW29uT3Blbl0gLSBIYW5kbGVyIHdoZW4gdGhlIHdlYnNvY2tldCBzZXNzaW9uIG9wZW5zLlxuICogQHByb3BlcnR5IHtmdW5jdGlvbih7c2Vzc2lvbjogaW1wb3J0KFwiLi9odHRwLXNlcnZlci9jbGllbnQvd2Vic29ja2V0LXNlc3Npb24uanNcIikuZGVmYXVsdH0pIDogUHJvbWlzZTx2b2lkPiB8IHZvaWR9IFtvbkNsb3NlXSAtIEhhbmRsZXIgd2hlbiB0aGUgd2Vic29ja2V0IHNlc3Npb24gY2xvc2VzLlxuICogQHByb3BlcnR5IHtmdW5jdGlvbih7ZXJyb3I6IEVycm9yLCBzZXNzaW9uOiBpbXBvcnQoXCIuL2h0dHAtc2VydmVyL2NsaWVudC93ZWJzb2NrZXQtc2Vzc2lvbi5qc1wiKS5kZWZhdWx0fSkgOiBQcm9taXNlPHZvaWQ+IHwgdm9pZH0gW29uRXJyb3JdIC0gSGFuZGxlciB3aGVuIGEgd2Vic29ja2V0IG1lc3NhZ2UgZXJyb3JzLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge2Z1bmN0aW9uKHtyZXF1ZXN0OiBpbXBvcnQoXCIuL2h0dHAtc2VydmVyL2NsaWVudC9yZXF1ZXN0LmpzXCIpLmRlZmF1bHQgfCBpbXBvcnQoXCIuL2h0dHAtc2VydmVyL2NsaWVudC93ZWJzb2NrZXQtcmVxdWVzdC5qc1wiKS5kZWZhdWx0IHwgdW5kZWZpbmVkLCBjbGllbnQ6IGltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvY2xpZW50L2luZGV4LmpzXCIpLmRlZmF1bHQsIGNvbmZpZ3VyYXRpb246IGltcG9ydChcIi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0fSk6IFdlYnNvY2tldE1lc3NhZ2VIYW5kbGVyIHwgdm9pZCB8IFByb21pc2U8V2Vic29ja2V0TWVzc2FnZUhhbmRsZXIgfCB2b2lkPn0gV2Vic29ja2V0TWVzc2FnZUhhbmRsZXJSZXNvbHZlclR5cGVcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHsoaWQ6IHN0cmluZykgPT4ge2RlZmF1bHQ6IHR5cGVvZiBpbXBvcnQoXCIuL2luaXRpYWxpemVyLmpzXCIpLmRlZmF1bHR9fSBJbml0aWFsaXplcnNSZXF1aXJlQ29udGV4dFR5cGVcbiAqIEB0eXBlZGVmIHtJbml0aWFsaXplcnNSZXF1aXJlQ29udGV4dFR5cGUgJiB7XG4gKiAgIGtleXM6ICgpID0+IHN0cmluZ1tdLFxuICogICBpZDogc3RyaW5nXG4gKiB9fSBXZWJwYWNrUmVxdWlyZUNvbnRleHRcbiAqIEB0eXBlZGVmIHt7cmVxdWlyZUNvbnRleHQ6IFdlYnBhY2tSZXF1aXJlQ29udGV4dH19IEluaXRpYWxpemVyc0V4cG9ydFR5cGVcbiAqIEB0eXBlZGVmIHtmdW5jdGlvbih7Y29uZmlndXJhdGlvbjogaW1wb3J0KFwiLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHR9KSA6IFByb21pc2U8SW5pdGlhbGl6ZXJzRXhwb3J0VHlwZT59IEluaXRpYWxpemVyc1R5cGVcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFNxbENvbmZpZ1xuICogQHByb3BlcnR5IHtzdHJpbmd9IFtkYXRhYmFzZV0gLSBEYXRhYmFzZSBuYW1lIGZvciB0aGUgU1FMIGRyaXZlci5cbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBbb3B0aW9uc10gLSBEcml2ZXItc3BlY2lmaWMgY29ubmVjdGlvbiBvcHRpb25zLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbb3B0aW9ucy5lbmNyeXB0XSAtIFdoZXRoZXIgdG8gZW5jcnlwdCB0aGUgY29ubmVjdGlvbiAoTVNTUUwpLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtvcHRpb25zLnNjaGVtYV0gLSBEZWZhdWx0IHNjaGVtYSBmb3IgdW5xdWFsaWZpZWQgdGFibGUgbG9va3VwcyAoTVNTUUwpLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtvcHRpb25zLnNlcnZlck5hbWVdIC0gVExTIFNOSSBzZXJ2ZXIgbmFtZSBvdmVycmlkZSBmb3IgTVNTUUwgKGVtcHR5IHN0cmluZyBkaXNhYmxlcyBTTkkpLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbb3B0aW9ucy50cnVzdFNlcnZlckNlcnRpZmljYXRlXSAtIFdoZXRoZXIgdG8gdHJ1c3QgdGhlIHNlcnZlciBjZXJ0aWZpY2F0ZSAoTVNTUUwpLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtwYXNzd29yZF0gLSBQYXNzd29yZCBmb3IgdGhlIFNRTCB1c2VyLlxuICogQHByb3BlcnR5IHtvYmplY3R9IFtwb29sXSAtIENvbm5lY3Rpb24gcG9vbCBjb25maWd1cmF0aW9uLlxuICogQHByb3BlcnR5IHtudW1iZXIgfCBudWxsfSBbcG9vbC5tYXhdIC0gTWF4aW11bSBudW1iZXIgb2YgY29ubmVjdGlvbnMuIFNldCBudWxsIHRvIGRpc2FibGUgdGhlIGNhcC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbcG9vbC5taW5dIC0gTWluaW11bSBudW1iZXIgb2YgY29ubmVjdGlvbnMuXG4gKiBAcHJvcGVydHkge251bWJlcn0gW3Bvb2wuaWRsZVRpbWVvdXRNaWxsaXNdIC0gSWRsZSB0aW1lb3V0IGJlZm9yZSByZWxlYXNpbmcgYSBjb25uZWN0aW9uLlxuICogQHByb3BlcnR5IHtudW1iZXIgfCBudWxsfSBbcG9vbC5jaGVja291dFRpbWVvdXRNaWxsaXNdIC0gVGltZW91dCB3aGlsZSB3YWl0aW5nIGZvciBhbiBhdmFpbGFibGUgY29ubmVjdGlvbiBhZnRlciB0aGUgbWF4IGNvbm5lY3Rpb24gY2FwIGlzIHJlYWNoZWQuIFNldCBudWxsIHRvIHdhaXQgaW5kZWZpbml0ZWx5LlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtzZXJ2ZXJdIC0gU1FMIHNlcnZlciBob3N0bmFtZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbdXNlcl0gLSBTUUwgdXNlcm5hbWUuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBEYXRhYmFzZVBvb2xDb25maWd1cmF0aW9uXG4gKiBAcHJvcGVydHkge251bWJlciB8IG51bGx9IFtjaGVja291dFRpbWVvdXRNaWxsaXNdIC0gVGltZW91dCB3aGlsZSBhIGNoZWNrb3V0IHdhaXRzIGZvciBhbiBhdmFpbGFibGUgYXN5bmMtdHJhY2tlZCBjb25uZWN0aW9uIGFmdGVyIHRoZSBtYXggbGl2ZSBjb25uZWN0aW9uIGNhcCBpcyByZWFjaGVkLiBTZXQgbnVsbCB0byB3YWl0IGluZGVmaW5pdGVseS4gRGVmYXVsdDogMTAwMDAuXG4gKiBAcHJvcGVydHkge251bWJlciB8IG51bGx9IFtpZGxlVGltZW91dE1pbGxpc10gLSBJZGxlIHRpbWVvdXQgYmVmb3JlIGNsb3NpbmcgYSBjaGVja2VkLWluIGFzeW5jLXRyYWNrZWQgY29ubmVjdGlvbi4gU2V0IG51bGwgdG8gZGlzYWJsZSBpZGxlIHJlYXBpbmcuIERlZmF1bHQ6IDUwMDAuXG4gKiBAcHJvcGVydHkge251bWJlciB8IG51bGx9IFttYXhdIC0gTWF4aW11bSBsaXZlIGFzeW5jLXRyYWNrZWQgY29ubmVjdGlvbnMgZm9yIHRoaXMgcG9vbC4gRGVmYXVsdHMgdG8gMTAuIEV4dHJhIGNoZWNrb3V0cyB3YWl0IHVudGlsIGEgbWF0Y2hpbmcgY29ubmVjdGlvbiBpcyBjaGVja2VkIGluIG9yIGNhcGFjaXR5IGlzIGZyZWVkLiBTZXQgbnVsbCB0byBkaXNhYmxlIHRoZSBjYXAuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBEYXRhYmFzZUNvbmZpZ3VyYXRpb25UeXBlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2RhdGFiYXNlQ2hhcnNldF0gLSBEZWZhdWx0IGNoYXJhY3RlciBzZXQgYXBwbGllZCBieSBgZGI6Y3JlYXRlYCB2aWEgbXlzcWwvbWFyaWFkYiBgQ1JFQVRFIERBVEFCQVNFIC4uLiBDSEFSQUNURVIgU0VUYC4gRGlzdGluY3QgZnJvbSBgY2hhcnNldGAsIHdoaWNoIGlzIHRoZSBjbGllbnQgY29ubmVjdGlvbiBjaGFyc2V0IGZvcndhcmRlZCB0byB0aGUgbXlzcWwyIGRyaXZlci5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbZGF0YWJhc2VDb2xsYXRpb25dIC0gRGVmYXVsdCBjb2xsYXRpb24gYXBwbGllZCBieSBgZGI6Y3JlYXRlYCB2aWEgbXlzcWwvbWFyaWFkYiBgQ1JFQVRFIERBVEFCQVNFIC4uLiBDT0xMQVRFYC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbZGF0YWJhc2VdIC0gRGF0YWJhc2UgbmFtZSBmb3IgdGhpcyBjb25uZWN0aW9uLlxuICogQHByb3BlcnR5IHt0eXBlb2YgaW1wb3J0KFwiLi9kYXRhYmFzZS9kcml2ZXJzL2Jhc2UuanNcIikuZGVmYXVsdH0gW2RyaXZlcl0gLSBEcml2ZXIgY2xhc3MgdG8gdXNlIGZvciB0aGlzIGRhdGFiYXNlLlxuICogQHByb3BlcnR5IHt0eXBlb2YgaW1wb3J0KFwiLi9kYXRhYmFzZS9wb29sL2Jhc2UuanNcIikuZGVmYXVsdH0gW3Bvb2xUeXBlXSAtIFBvb2wgY2xhc3MgdG8gdXNlIGZvciB0aGlzIGRhdGFiYXNlLlxuICogQHByb3BlcnR5IHtmdW5jdGlvbigpIDogP30gW2dldENvbm5lY3Rpb25dIC0gQ3VzdG9tIGNvbm5lY3Rpb24gZmFjdG9yeSBvdmVycmlkZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbaG9zdF0gLSBEYXRhYmFzZSBob3N0LlxuICogQHByb3BlcnR5IHtib29sZWFufSBbbWlncmF0aW9uc10gLSBXaGV0aGVyIG1pZ3JhdGlvbnMgYXJlIGVuYWJsZWQgZm9yIHRoaXMgZGF0YWJhc2UuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3Bhc3N3b3JkXSAtIFBhc3N3b3JkIGZvciB0aGUgZGF0YWJhc2UgdXNlci5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbcG9ydF0gLSBEYXRhYmFzZSBwb3J0LlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtwcmltYXJ5S2V5VHlwZV0gLSBEZWZhdWx0IHR5cGUgZm9yIGltcGxpY2l0IG1pZ3JhdGlvbiBwcmltYXJ5IGtleXMgYW5kIHJlZmVyZW5jZXMuIERlZmF1bHRzIHRvIGB1dWlkYC5cbiAqIEBwcm9wZXJ0eSB7RGF0YWJhc2VQb29sQ29uZmlndXJhdGlvbn0gW3Bvb2xdIC0gVmVsb2Npb3VzIGRhdGFiYXNlIHBvb2wgbGlmZWN5Y2xlIGNvbmZpZ3VyYXRpb24uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW25hbWVdIC0gRnJpZW5kbHkgbmFtZSBmb3IgdGhlIGNvbmZpZ3VyYXRpb24uXG4gKiBAcHJvcGVydHkgeyhmaWxlOiBzdHJpbmcpID0+IHN0cmluZ30gW2xvY2F0ZUZpbGVdIC0gT3B0aW9uYWwgc3FsaXRlLXdlYiBzcWwuanMgd2FzbSByZXNvbHZlciAoYGluaXRTcWxKcyh7bG9jYXRlRmlsZX0pYCkuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtyZWFkT25seV0gLSBXaGV0aGVyIHdyaXRlcyBzaG91bGQgYmUgYmxvY2tlZCBmb3IgdGhpcyBkYXRhYmFzZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbc2NoZW1hXSAtIERlZmF1bHQgc2NoZW1hIGZvciB1bnF1YWxpZmllZCB0YWJsZSBsb29rdXBzIChNU1NRTCkuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtzY2hlbWFDYWNoZV0gLSBXaGV0aGVyIHNjaGVtYSBtZXRhZGF0YSBzaG91bGQgYmUgY2FjaGVkIG9uIHRoZSBkcml2ZXIuIERlZmF1bHRzIHRvIHRydWUuXG4gKiBAcHJvcGVydHkge29iamVjdH0gW3JlY29yZF0gLSBSZWNvcmQtbGV2ZWwgY29uZmlndXJhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3JlY29yZC50cmFuc2FjdGlvbnNdIC0gV2hldGhlciByZWNvcmQgb3BlcmF0aW9ucyBzaG91bGQgdXNlIHRyYW5zYWN0aW9ucy5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3Jlc2V0XSAtIFdoZXRoZXIgdG8gcmVzZXQgdGhlIGRhdGFiYXNlIG9uIHN0YXJ0dXAuXG4gKiBAcHJvcGVydHkge1NxbENvbmZpZ30gW3NxbENvbmZpZ10gLSBEcml2ZXItc3BlY2lmaWMgU1FMIGNvbmZpZy5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3RlbmFudE9ubHldIC0gV2hldGhlciB0aGlzIGRhdGFiYXNlIGlkZW50aWZpZXIgaXMgb25seSBhY3RpdmUgaW5zaWRlIGEgcmVzb2x2ZWQgdGVuYW50IGNvbnRleHQuXG4gKiBAcHJvcGVydHkge1wibXNzcWxcIiB8IFwibXlzcWxcIiB8IFwicGdzcWxcIiB8IFwic3FsaXRlXCJ9IFt0eXBlXSAtIERhdGFiYXNlIHR5cGUgaWRlbnRpZmllci5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbdXNlRGF0YWJhc2VdIC0gRGF0YWJhc2UgdG8gc3dpdGNoIHRvIGFmdGVyIGNvbm5lY3RpbmcuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3VzZXJuYW1lXSAtIFVzZXJuYW1lIGZvciBkYXRhYmFzZSBhdXRoZW50aWNhdGlvbi5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtcImRlYnVnLWxvdy1sZXZlbFwiIHwgXCJkZWJ1Z1wiIHwgXCJpbmZvXCIgfCBcIndhcm5cIiB8IFwiZXJyb3JcIn0gTG9nTGV2ZWxcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IExvZ2dpbmdPdXRwdXRQYXlsb2FkXG4gKiBAcHJvcGVydHkge0xvZ0xldmVsfSBsZXZlbCAtIExvZyBsZXZlbC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBtZXNzYWdlIC0gRm9ybWF0dGVkIG1lc3NhZ2UuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gc3ViamVjdCAtIExvZyBzdWJqZWN0LlxuICogQHByb3BlcnR5IHtEYXRlfSB0aW1lc3RhbXAgLSBUaW1lc3RhbXAuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBMb2dnaW5nT3V0cHV0XG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKExvZ2dpbmdPdXRwdXRQYXlsb2FkKTogUHJvbWlzZTx2b2lkPiB8IHZvaWR9IHdyaXRlIC0gV3JpdGUgYSBsb2cgZW50cnkuXG4gKiBAcHJvcGVydHkge0xvZ0xldmVsW119IFtsZXZlbHNdIC0gRGVmYXVsdCBsZXZlbHMgZm9yIHRoaXMgb3V0cHV0LlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gTG9nZ2luZ091dHB1dENvbmZpZ1xuICogQHByb3BlcnR5IHtMb2dnaW5nT3V0cHV0fSBvdXRwdXQgLSBPdXRwdXQgaW5zdGFuY2UuXG4gKiBAcHJvcGVydHkge0FycmF5PExvZ0xldmVsPn0gW2xldmVsc10gLSBMZXZlbHMgZW5hYmxlZCBmb3IgdGhpcyBvdXRwdXQuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7TG9nZ2luZ091dHB1dENvbmZpZyB8IExvZ2dpbmdPdXRwdXQgfCBpbXBvcnQoXCIuL2xvZ2dlci9iYXNlLWxvZ2dlci5qc1wiKS5kZWZhdWx0fSBMb2dnZXJDb25maWdcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IExvZ2dpbmdDb25maWd1cmF0aW9uXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtjb25zb2xlXSAtIEVuYWJsZS9kaXNhYmxlIGNvbnNvbGUgbG9nZ2luZyBmb3IgcmVxdWVzdCBsb2dnaW5nLiBEZWZhdWx0cyB0byB0cnVlIG91dHNpZGUgb2YgXCJ0ZXN0XCIgYW5kIGZvciBIVFRQIHNlcnZlciBsb2dzLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbZmlsZV0gLSBFbmFibGUvZGlzYWJsZSB3cml0aW5nIGxvZ3MgdG8gYSBmaWxlLiBEZWZhdWx0cyB0byB0cnVlLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtkaXJlY3RvcnldIC0gRGlyZWN0b3J5IHdoZXJlIGxvZyBmaWxlcyBhcmUgc3RvcmVkLiBEZWZhdWx0cyB0byBcIjxwcm9qZWN0Pi9sb2dcIi5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbZmlsZVBhdGhdIC0gRXhwbGljaXQgcGF0aCBmb3IgdGhlIGxvZyBmaWxlLiBEZWZhdWx0cyB0byBcIjxkaXJlY3Rvcnk+LzxlbnZpcm9ubWVudD4ubG9nXCIuXG4gKiBAcHJvcGVydHkge0FycmF5PFwiZGVidWctbG93LWxldmVsXCIgfCBcImRlYnVnXCIgfCBcImluZm9cIiB8IFwid2FyblwiIHwgXCJlcnJvclwiPn0gW2xldmVsc10gLSBPdmVycmlkZSB3aGljaCBsb2cgbGV2ZWxzIGFyZSBlbWl0dGVkLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbZGVidWdMb3dMZXZlbF0gLSBDb252ZW5pZW5jZSBmbGFnIHRvIGluY2x1ZGUgdmVyeSBsb3ctbGV2ZWwgZGVidWcgbG9ncy5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3F1ZXJ5TG9nZ2luZ10gLSBFbmFibGUvZGlzYWJsZSBkYXRhYmFzZSBxdWVyeSBsb2dnaW5nLiBEZWZhdWx0cyB0byB0cnVlIG91dHNpZGUgdGVzdCBhbmQgZmFsc2UgaW4gdGVzdC5cbiAqIEBwcm9wZXJ0eSB7TG9nZ2VyQ29uZmlnW119IFtsb2dnZXJzXSAtIExvZ2dlciBpbnN0YW5jZXMgKGNvbnZlcnRlZCB0byBvdXRwdXRzIHdoZW4gY29uZmlndXJlZCkuXG4gKiBAcHJvcGVydHkge0xvZ2dpbmdPdXRwdXRDb25maWdbXX0gW291dHB1dHNdIC0gRXhwbGljaXQgbG9nZ2VyIG91dHB1dHMgKG92ZXJyaWRlcyBjb25zb2xlL2ZpbGUgZGVmYXVsdHMgd2hlbiBwcm92aWRlZCkuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBTdHJ1Y3R1cmVTcWxDb25maWd1cmF0aW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfSBbZW5hYmxlZEVudmlyb25tZW50c10gLSBFbnZpcm9ubWVudHMgYWxsb3dlZCB0byB3cml0ZSBzdHJ1Y3R1cmUgc3FsIGZpbGVzIGR1cmluZyBhdXRvbWF0aWMgbWlncmF0aW9uIGR1bXBzLlxuICogQHByb3BlcnR5IHtzdHJpbmdbXX0gW2Rpc2FibGVkRW52aXJvbm1lbnRzXSAtIEVudmlyb25tZW50cyB0aGF0IHNob3VsZCBza2lwIHdyaXRpbmcgc3RydWN0dXJlIHNxbCBmaWxlcy5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtcImJlYWNvblwiIHwgXCJwb2xsaW5nXCJ9IEJhY2tncm91bmRKb2JzRGlzcGF0Y2hTdHJhdGVneVxuICpcbiAqIC0gYFwiYmVhY29uXCJgIChkZWZhdWx0KTogZXZlbnQtZHJpdmVuIGRpc3BhdGNoLiBUaGVcbiAqICAgYGJhY2tncm91bmQtam9icy1tYWluYCBwcm9jZXNzIGRyYWlucyB0aGUgcXVldWUgb24gZW5xdWV1ZSwgb25cbiAqICAgd29ya2VyIHJlYWRpbmVzcywgb24gQmVhY29uIGJyb2FkY2FzdHMgKHNvIGNyb3NzLXByb2Nlc3MgZW5xdWV1ZXNcbiAqICAgd2FrZSBpdCksIGFuZCBhcm1zIGEgYHNldFRpbWVvdXRgIGZvciB0aGUgc29vbmVzdCBmdXR1cmUtc2NoZWR1bGVkXG4gKiAgIGpvYi4gRmFsbHMgYmFjayBncmFjZWZ1bGx5IHRvIGRpcmVjdCBpbi1wcm9jZXNzIHRyaWdnZXJpbmcgd2hlblxuICogICBCZWFjb24gaXMgbm90IGNvbmZpZ3VyZWQuXG4gKiAtIGBcInBvbGxpbmdcImA6IGxlZ2FjeSBtb2RlLCBydW5zIGEgZml4ZWQtaW50ZXJ2YWwgcG9sbCBvdmVyIHRoZVxuICogICBgYmFja2dyb3VuZF9qb2JzYCB0YWJsZSAoc2VlIGBwb2xsSW50ZXJ2YWxNc2ApLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gQmFja2dyb3VuZEpvYnNDb25maWd1cmF0aW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2hvc3RdIC0gSG9zdG5hbWUgZm9yIHRoZSBiYWNrZ3JvdW5kIGpvYnMgbWFpbiBwcm9jZXNzLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtwb3J0XSAtIFBvcnQgZm9yIHRoZSBiYWNrZ3JvdW5kIGpvYnMgbWFpbiBwcm9jZXNzLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtkYXRhYmFzZUlkZW50aWZpZXJdIC0gRGF0YWJhc2UgaWRlbnRpZmllciB1c2VkIHRvIHN0b3JlIGJhY2tncm91bmQgam9icy5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbbWF4Q29uY3VycmVudElubGluZUpvYnNdIC0gSG93IG1hbnkgYGZvcmtlZDogZmFsc2VgIGpvYnMgYSBzaW5nbGVcbiAqICAgYGJhY2tncm91bmQtam9icy13b3JrZXJgIHByb2Nlc3MgaXMgYWxsb3dlZCB0byBydW4gaW4gcGFyYWxsZWwuIENvbmN1cnJlbmN5XG4gKiAgIGlzIGF0IHRoZSBKUyBldmVudC1sb29wIGxldmVsOiBldmVyeSBjb25jdXJyZW50IGpvYiBzaGFyZXMgdGhlIHdvcmtlcidzXG4gKiAgIHByb2Nlc3MgYW5kIERCIGNvbm5lY3Rpb24gcG9vbCwgc28gdGhpcyBzaG91bGQgZml0IHRoZSBwb29sIHNpemUsIG5vdCB0aGVcbiAqICAgQ1BVIGNvdW50LiBGb3JraW5nIHJlbWFpbnMgdGhlIHJpZ2h0IHRvb2wgZm9yIG1lbW9yeSBpc29sYXRpb24gYWNyb3NzXG4gKiAgIGxvbmctcnVubmluZyBqb2JzIGFuZCBmb3IgdXNpbmcgbW9yZSBjb3Jlcy4gRGVmYXVsdDogYDRgLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFttYXhDb25jdXJyZW50Rm9ya2VkSm9ic10gLSBIb3cgbWFueSBvdXQtb2YtcHJvY2Vzc1xuICogICBgXCJmb3JrZWRcImAgb3IgYFwic3Bhd25lZFwiYCBqb2JzIGEgc2luZ2xlIGBiYWNrZ3JvdW5kLWpvYnMtd29ya2VyYCBpc1xuICogICBhbGxvd2VkIHRvIGtlZXAgaW4gZmxpZ2h0LiBEZWZhdWx0OiBgNGAuXG4gKiBAcHJvcGVydHkge0JhY2tncm91bmRKb2JzRGlzcGF0Y2hTdHJhdGVneX0gW2Rpc3BhdGNoU3RyYXRlZ3ldIC0gSG93IHRoZSBtYWluIHByb2Nlc3NcbiAqICAgZGV0ZWN0cyBuZXcgd29yay4gRGVmYXVsdHMgdG8gYFwiYmVhY29uXCJgIChldmVudC1kcml2ZW4pLiBTZXQgdG8gYFwicG9sbGluZ1wiYFxuICogICB0byByZXN0b3JlIHRoZSBsZWdhY3kgZml4ZWQtaW50ZXJ2YWwgcG9sbC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbcG9sbEludGVydmFsTXNdIC0gUG9sbCBpbnRlcnZhbCBpbiBtaWxsaXNlY29uZHMuIE9ubHkgdXNlZFxuICogICB3aGVuIGBkaXNwYXRjaFN0cmF0ZWd5ID09PSBcInBvbGxpbmdcImAuIERlZmF1bHQ6IGAxMDAwYC5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IEJlYWNvbkNvbmZpZ3VyYXRpb25cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2VuYWJsZWRdIC0gV2hldGhlciB0byBjb25uZWN0IHRvIGEgQmVhY29uIGJyb2tlci4gRGVmYXVsdHMgdG8gZmFsc2UgdW5sZXNzIGBob3N0YC9gcG9ydGAgb3IgYGluUHJvY2VzczogdHJ1ZWAgYXJlIHNldCwgb3IgZW52IHZhcnMgYXJlIHByZXNlbnQuIEV4cGxpY2l0IGBmYWxzZWAgZGlzYWJsZXMgQmVhY29uIGV2ZW4gd2hlbiBlbnYgdmFycyBhcmUgc2V0LlxuICogQHByb3BlcnR5IHtib29sZWFufSBbaW5Qcm9jZXNzXSAtIFdoZW4gdHJ1ZSwgdXNlIGEgbW9kdWxlLWxldmVsIGluLXByb2Nlc3MgYnJva2VyIHNpbmdsZXRvbiBpbnN0ZWFkIG9mIGNvbm5lY3Rpbmcgb3ZlciBUQ1AuIE11dHVhbGx5IGV4Y2x1c2l2ZSB3aXRoIGBob3N0YC9gcG9ydGAuIFVzZWZ1bCBmb3IgdGVzdHMgYW5kIHNpbmdsZS1wcm9jZXNzIGRlcGxveW1lbnRzLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtob3N0XSAtIEhvc3RuYW1lIG9mIHRoZSBCZWFjb24gYnJva2VyIGRhZW1vbi5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbcG9ydF0gLSBQb3J0IG9mIHRoZSBCZWFjb24gYnJva2VyIGRhZW1vbi5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbcGVlclR5cGVdIC0gT3B0aW9uYWwgaHVtYW4tcmVhZGFibGUgbGFiZWwgZm9yIHRoaXMgcGVlciAoZS5nLiBcInNlcnZlclwiLCBcImJhY2tncm91bmQtam9icy13b3JrZXJcIikuXG4gKiBAcHJvcGVydHkge251bWJlcn0gW3VucmVhY2hhYmxlUmVwb3J0TXNdIC0gR3JhY2Ugd2luZG93IChtcykgYSBiZWFjb24gY29ubmVjdC9kaXNjb25uZWN0IGJsaXAgbXVzdCBwZXJzaXN0IGJlZm9yZSBpdCBpcyByZXBvcnRlZCBhcyBhIGZyYW1ld29yay1lcnJvci4gVHJhbnNpZW50IG91dGFnZXMgdGhhdCByZWNvdmVyIHdpdGhpbiB0aGlzIHdpbmRvdyAoZS5nLiBhIGRlcGxveSByZXN0YXJ0aW5nIHRoZSBicm9rZXIpIGFyZSBub3QgcmVwb3J0ZWQuIERlZmF1bHRzIHRvIDMwMDAwLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gSHR0cFNlcnZlckNvbmZpZ3VyYXRpb25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbaG9zdF0gLSBIb3N0bmFtZSB0byBiaW5kIHRoZSBIVFRQIHNlcnZlciB0by5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2luUHJvY2Vzc10gLSBSdW4gSFRUUCBoYW5kbGVycyBpbiB0aGUgbWFpbiB0aHJlYWQgaW5zdGVhZCBvZiB3b3JrZXIgdGhyZWFkcy5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbbWF4V29ya2Vyc10gLSBCYWNrd2FyZC1jb21wYXRpYmxlIGFsaWFzIGZvciB3b3JrZXJzLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtwb3J0XSAtIFBvcnQgdG8gYmluZCB0aGUgSFRUUCBzZXJ2ZXIgdG8uXG4gKiBAcHJvcGVydHkge251bWJlcn0gW3dvcmtlcnNdIC0gV29ya2VyIGhhbmRsZXJzIHRvIHN0YXJ0IGZvciB0aGUgSFRUUCBzZXJ2ZXIuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBTY2hlZHVsZWRCYWNrZ3JvdW5kSm9iRXZlcnlPcHRpb25zXG4gKiBAcHJvcGVydHkge251bWJlciB8IHN0cmluZ30gW2ZpcnN0SW5dIC0gRGVsYXkgYmVmb3JlIHRoZSBmaXJzdCBlbnF1ZXVlLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gU2NoZWR1bGVkQmFja2dyb3VuZEpvYkNvbmZpZ3VyYXRpb25cbiAqIEBwcm9wZXJ0eSB7QXJyYXk8Pz59IFthcmdzXSAtIEFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIGpvYiB3aGVuIGVucXVldWVkLlxuICogQHByb3BlcnR5IHt0eXBlb2YgaW1wb3J0KFwiLi9iYWNrZ3JvdW5kLWpvYnMvam9iLmpzXCIpLmRlZmF1bHR9IGNsYXNzIC0gSm9iIGNsYXNzIHRvIGVucXVldWUuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2Nyb25dIC0gQ3JvbnRhYiBleHByZXNzaW9uICg1LWZpZWxkIFBPU0lYLCBwbHVzIGBAaG91cmx5YC9gQGRhaWx5YC9gQHdlZWtseWAvYEBtb250aGx5YC9gQHllYXJseWAvYEBtaWRuaWdodGApLiBNdXR1YWxseSBleGNsdXNpdmUgd2l0aCBgZXZlcnlgLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbZW5hYmxlZF0gLSBXaGV0aGVyIHRoZSBzY2hlZHVsZSBpcyBlbmFibGVkLlxuICogQHByb3BlcnR5IHtudW1iZXIgfCBzdHJpbmcgfCBbbnVtYmVyIHwgc3RyaW5nLCBTY2hlZHVsZWRCYWNrZ3JvdW5kSm9iRXZlcnlPcHRpb25zXX0gW2V2ZXJ5XSAtIFJlcGVhdCBpbnRlcnZhbC4gRWl0aGVyIGBldmVyeWAgb3IgYGNyb25gIG11c3QgYmUgc2V0LlxuICogQHByb3BlcnR5IHtpbXBvcnQoXCIuL2JhY2tncm91bmQtam9icy90eXBlcy5qc1wiKS5CYWNrZ3JvdW5kSm9iT3B0aW9uc30gW29wdGlvbnNdIC0gSm9iIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7UmVjb3JkPHN0cmluZywgc3RyaW5nPn0gVmVsb2Npb3VzUGFyYW1zXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7UmVjb3JkPHN0cmluZywgaW1wb3J0KFwiLi9mcm9udGVuZC1tb2RlbHMvcXVlcnkuanNcIikuRnJvbnRlbmRNb2RlbFRyYW5zcG9ydFZhbHVlPn0gQ2xpZW50RXJyb3JQYXlsb2FkUmVwb3J0ZXJQYXlsb2FkXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBFcnJvclJlcXVlc3REZXRhaWxzXG4gKiBAcHJvcGVydHkgez99IFtib2R5XSAtIFNhbml0aXplZCBwYXJzZWQgcmVxdWVzdCBib2R5LCB3aGVuIGF2YWlsYWJsZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBodHRwTWV0aG9kIC0gUmVxdWVzdCBIVFRQIG1ldGhvZC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwYXRoIC0gUmVxdWVzdCBwYXRoLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gQ2xpZW50RXJyb3JQYXlsb2FkQ29udGV4dFxuICogQHByb3BlcnR5IHtzdHJpbmd9IGNvbnRyb2xsZXIgLSBDb250cm9sbGVyIGNsYXNzIG5hbWUuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2FjdGlvbl0gLSBDb250cm9sbGVyIGFjdGlvbiBvciBlbmRwb2ludCBsYWJlbC5cbiAqIEBwcm9wZXJ0eSB7XCJpbmRleFwiIHwgXCJmaW5kXCIgfCBcImNyZWF0ZVwiIHwgXCJ1cGRhdGVcIiB8IFwiZGVzdHJveVwiIHwgXCJhdHRhY2hcIiB8IFwiYXR0YWNobWVudExpc3RcIiB8IFwiZG93bmxvYWRcIiB8IFwidXJsXCIgfCBcImN1c3RvbS1jb21tYW5kXCJ9IFtjb21tYW5kVHlwZV0gLSBGcm9udGVuZC1tb2RlbCBjb21tYW5kIHR5cGUuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtleHBlY3RlZEVycm9yXSAtIFdoZXRoZXIgdGhlIGVycm9yIGlzIGFuIGV4cGVjdGVkIHVzZXItZmxvdyBmYWlsdXJlLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbZnJvbnRlbmRNb2RlbEVuZHBvaW50XSAtIFdoZXRoZXIgdGhlIGVycm9yIGNhbWUgZnJvbSB0aGUgZnJvbnRlbmQtbW9kZWwgZW5kcG9pbnQuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW21vZGVsXSAtIEZyb250ZW5kLW1vZGVsIG5hbWUgZnJvbSB0aGUgZmFpbGVkIHJlcXVlc3QuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3JlcXVlc3RJZF0gLSBTaGFyZWQgZnJvbnRlbmQtbW9kZWwgcmVxdWVzdCBpZC5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtmdW5jdGlvbih7XG4gKiAgIGNvbnRleHQ6IENsaWVudEVycm9yUGF5bG9hZENvbnRleHQsXG4gKiAgIGVycm9yOiBFcnJvcixcbiAqICAgcmVxdWVzdDogaW1wb3J0KFwiLi9odHRwLXNlcnZlci9jbGllbnQvcmVxdWVzdC5qc1wiKS5kZWZhdWx0IHwgaW1wb3J0KFwiLi9odHRwLXNlcnZlci9jbGllbnQvd2Vic29ja2V0LXJlcXVlc3QuanNcIikuZGVmYXVsdCB8IHVuZGVmaW5lZCxcbiAqICAgcmVxdWVzdERldGFpbHM6IEVycm9yUmVxdWVzdERldGFpbHMgfCBudWxsXG4gKiB9KTogUHJvbWlzZTxDbGllbnRFcnJvclBheWxvYWRSZXBvcnRlclBheWxvYWQgfCB2b2lkPiB8IENsaWVudEVycm9yUGF5bG9hZFJlcG9ydGVyUGF5bG9hZCB8IHZvaWR9IENsaWVudEVycm9yUGF5bG9hZFJlcG9ydGVyVHlwZVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge1JlY29yZDxzdHJpbmcsIHVua25vd24+ICYge2NvbmZpZ3VyYXRpb24/OiBpbXBvcnQoXCIuL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdCwgY3VycmVudERldmljZT86IHVua25vd24sIGN1cnJlbnRVc2VyPzogdW5rbm93biwgbW9kZWxSZWdpc3RyeT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwge21vZGVsOiAobmFtZTogc3RyaW5nKSA9PiB1bmtub3dufSwgbm93PzogRGF0ZSB8ICgoKSA9PiBEYXRlKSwgb2ZmbGluZUdyYW50PzogdW5rbm93biwgcGFyYW1zPzogVmVsb2Npb3VzUGFyYW1zLCByZXF1ZXN0PzogaW1wb3J0KFwiLi9odHRwLXNlcnZlci9jbGllbnQvcmVxdWVzdC5qc1wiKS5kZWZhdWx0IHwgaW1wb3J0KFwiLi9odHRwLXNlcnZlci9jbGllbnQvd2Vic29ja2V0LXJlcXVlc3QuanNcIikuZGVmYXVsdCwgcmVzb3VyY2VSdW50aW1lPzogXCJiYWNrZW5kXCIgfCBcImZyb250ZW5kXCIgfCBcIm9mZmxpbmVcIn19IFZlbG9jaW91c0xvb3NlT2JqZWN0XG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7bmV3IChhcmdzOiB7YXR0YWNobWVudE5hbWU/OiBzdHJpbmcsIGNvbmZpZ3VyYXRpb246IGltcG9ydChcIi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0LCBtb2RlbENsYXNzPzogdHlwZW9mIGltcG9ydChcIi4vZGF0YWJhc2UvcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHQsIG5hbWU/OiBzdHJpbmcsIG9wdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCA/Pn0pID0+IG9iamVjdH0gQXR0YWNobWVudERyaXZlckNvbnN0cnVjdG9yXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBTY2hlZHVsZWRCYWNrZ3JvdW5kSm9ic0NvbmZpZ3VyYXRpb25cbiAqIEBwcm9wZXJ0eSB7UmVjb3JkPHN0cmluZywgU2NoZWR1bGVkQmFja2dyb3VuZEpvYkNvbmZpZ3VyYXRpb24+fSBqb2JzIC0gU2NoZWR1bGVkIGpvYnMga2V5ZWQgYnkgbmFtZS5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtmdW5jdGlvbih7Y29uZmlndXJhdGlvbjogaW1wb3J0KFwiLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHR9KSA6IFNjaGVkdWxlZEJhY2tncm91bmRKb2JzQ29uZmlndXJhdGlvbiB8IFByb21pc2U8U2NoZWR1bGVkQmFja2dyb3VuZEpvYnNDb25maWd1cmF0aW9uPn0gU2NoZWR1bGVkQmFja2dyb3VuZEpvYnNMb2FkZXJUeXBlXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBBdHRhY2htZW50RHJpdmVyQ29uZmlndXJhdGlvblxuICogQHByb3BlcnR5IHtmdW5jdGlvbih7Y29uZmlndXJhdGlvbjogaW1wb3J0KFwiLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHQsIG5hbWU6IHN0cmluZywgb3B0aW9uczogUmVjb3JkPHN0cmluZywgPz59KSA6IFJlY29yZDxzdHJpbmcsID8+fSBbY3JlYXRlXSAtIE9wdGlvbmFsIGZhY3RvcnkgZm9yIGEgY3VzdG9tIGF0dGFjaG1lbnQgZHJpdmVyIGluc3RhbmNlLlxuICogQHByb3BlcnR5IHtBdHRhY2htZW50RHJpdmVyQ29uc3RydWN0b3J9IFtkcml2ZXJDbGFzc10gLSBPcHRpb25hbCBjdXN0b20gYXR0YWNobWVudCBkcml2ZXIgY2xhc3MuXG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmcsID8+fSBbaW5zdGFuY2VdIC0gT3B0aW9uYWwgY3VzdG9tIGF0dGFjaG1lbnQgZHJpdmVyIGluc3RhbmNlLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gQXR0YWNobWVudHNDb25maWd1cmF0aW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2RlZmF1bHREcml2ZXJdIC0gRGVmYXVsdCBhdHRhY2htZW50IHN0b3JhZ2UgZHJpdmVyIG5hbWUuXG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmcsIEF0dGFjaG1lbnREcml2ZXJDb25maWd1cmF0aW9uICYgUmVjb3JkPHN0cmluZywgPz4+fSBbZHJpdmVyc10gLSBOYW1lZCBhdHRhY2htZW50IGRyaXZlciBjb25maWd1cmF0aW9ucy5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2FsbG93UGF0aElucHV0XSAtIFdoZXRoZXIgYHtwYXRoOiAuLi59YCBhdHRhY2htZW50IGlucHV0IGlzIGFsbG93ZWQuXG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfSBbYWxsb3dlZFBhdGhQcmVmaXhlc10gLSBPcHRpb25hbCBhbGxvd2xpc3Qgb2YgZGlyZWN0b3JpZXMgZm9yIGB7cGF0aDogLi4ufWAgaW5wdXQuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBNYWlsZXJCYWNrZW5kXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKHtwYXlsb2FkOiBpbXBvcnQoXCIuL21haWxlci5qc1wiKS5NYWlsZXJEZWxpdmVyeVBheWxvYWQsIGNvbmZpZ3VyYXRpb246IGltcG9ydChcIi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0fSkgOiBQcm9taXNlPD8+IHwgP30gZGVsaXZlciAtIERlbGl2ZXIgYSBtYWlsZXIgcGF5bG9hZC5cbiAqL1xuXG5cbi8qKlxuICogQHR5cGVkZWYge1JlY29yZDxzdHJpbmcsIHN0cmluZ1tdPn0gTG9jYWxlRmFsbGJhY2tzVHlwZVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gRnJvbnRlbmRNb2RlbFJlbGF0aW9uc2hpcENvbmZpZ3VyYXRpb25cbiAqIEBwcm9wZXJ0eSB7XCJiZWxvbmdzVG9cIiB8IFwiaGFzT25lXCIgfCBcImhhc01hbnlcIn0gdHlwZSAtIFJlbGF0aW9uc2hpcCB0eXBlLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFttb2RlbF0gLSBUYXJnZXQgbW9kZWwgY2xhc3MgbmFtZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbY2xhc3NOYW1lXSAtIEFsaWFzIG9mIHRhcmdldCBtb2RlbCBjbGFzcyBuYW1lLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFttb2RlbENsYXNzTmFtZV0gLSBFeHBsaWNpdCB0YXJnZXQgbW9kZWwgY2xhc3MgbmFtZS5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IEZyb250ZW5kTW9kZWxBdHRyaWJ1dGVDb25maWd1cmF0aW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3R5cGVdIC0gQ29sdW1uIHR5cGUgbmFtZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbY29sdW1uVHlwZV0gLSBBbGlhcyBmb3IgY29sdW1uIHR5cGUgbmFtZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbc3FsVHlwZV0gLSBBbGlhcyBmb3IgY29sdW1uIHR5cGUgbmFtZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbZGF0YVR5cGVdIC0gQWxpYXMgZm9yIGNvbHVtbiB0eXBlIG5hbWUuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2pzRG9jVHlwZV0gLSBFeGFjdCBnZW5lcmF0ZWQgSlNEb2MgdHlwZSBmb3Igbm9uLWNvbHVtbiBhdHRyaWJ1dGVzLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtuYW1lXSAtIEF0dHJpYnV0ZSBuYW1lIHdoZW4gY29uZmlndXJlZCBhcyBhbiBhcnJheSBlbnRyeS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW251bGxdIC0gV2hldGhlciB2YWx1ZSBjYW4gYmUgbnVsbC5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3NlbGVjdGVkQnlEZWZhdWx0XSAtIFdoZXRoZXIgaW5jbHVkZWQgaW4gZGVmYXVsdCBzZXJpYWxpemF0aW9uLiBEZWZhdWx0cyB0byB0cnVlLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gRnJvbnRlbmRNb2RlbEF0dGFjaG1lbnRDb25maWd1cmF0aW9uXG4gKiBAcHJvcGVydHkge1wiaGFzT25lXCIgfCBcImhhc01hbnlcIn0gdHlwZSAtIEF0dGFjaG1lbnQgY2FyZGluYWxpdHkuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBGcm9udGVuZE1vZGVsUmVzb3VyY2VDb25maWd1cmF0aW9uXG4gKiBAcHJvcGVydHkge0FycmF5PHN0cmluZyB8IEZyb250ZW5kTW9kZWxBdHRyaWJ1dGVDb25maWd1cmF0aW9uPiB8IFJlY29yZDxzdHJpbmcsIEZyb250ZW5kTW9kZWxBdHRyaWJ1dGVDb25maWd1cmF0aW9uIHwgaW1wb3J0KFwiLi9kYXRhYmFzZS9kcml2ZXJzL2Jhc2UtY29sdW1uLmpzXCIpLmRlZmF1bHQgfCBib29sZWFuPn0gYXR0cmlidXRlcyAtIEF0dHJpYnV0ZXMgdG8gZXhwb3NlIG9uIHRoZSBmcm9udGVuZCBtb2RlbC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IFthYmlsaXRpZXNdIC0gQWRkaXRpb25hbCBjYW1lbENhc2UgYWJpbGl0eSBhY3Rpb24gbmFtZXMgdG8gZXhwb3NlIGZvciBwZXItcmVjb3JkIGByZWNvcmQuY2FuKGFjdGlvbilgIHJlYWRzLiBCYXNlIENSVUQgYWN0aW9ucyAoYHJlYWRgLCBgY3JlYXRlYCwgYHVwZGF0ZWAsIGBkZXN0cm95YCkgYXJlIGFsd2F5cyBpbmNsdWRlZCBhbmQgbXVzdCBub3QgYmUgbGlzdGVkIGhlcmUuXG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmcsIEZyb250ZW5kTW9kZWxBdHRhY2htZW50Q29uZmlndXJhdGlvbj59IFthdHRhY2htZW50c10gLSBBdHRhY2htZW50IGhlbHBlcnMga2V5ZWQgYnkgYXR0YWNobWVudCBuYW1lLlxuICogQHByb3BlcnR5IHtzdHJpbmdbXX0gW2NvbW1hbmRzXSAtIExlZ2FjeSBidWlsdC1pbiBjb21tYW5kIG5hbWVzIChgaW5kZXhgLCBgZmluZGAsIGBjcmVhdGVgLCBgdXBkYXRlYCwgYGRlc3Ryb3lgLCBgYXR0YWNoYCwgYGRvd25sb2FkYCwgYHVybGApLlxuICogQHByb3BlcnR5IHtBcnJheTxGcm9udGVuZE1vZGVsUmVzb3VyY2VDdXN0b21Db21tYW5kPn0gW2NvbGxlY3Rpb25Db21tYW5kc10gLSBDdXN0b20gY29sbGVjdGlvbiBjb21tYW5kcy4gRWFjaCBlbnRyeSBpcyBhIGNhbWVsQ2FzZSBtZXRob2QgbmFtZSwgb3IgYSBge25hbWUsIGFyZ3M/LCByZXR1cm5UeXBlP31gIG9iamVjdCBkZWNsYXJpbmcgdHlwZWQgYXJndW1lbnRzIGFuZC9vciBhIHJlc3BvbnNlIHR5cGUuIFRoZSBydW50aW1lIGRlcml2ZXMgdGhlIGtlYmFiLWNhc2UgY29tbWFuZCBzbHVnIGZyb20gdGhlIG5hbWUuXG4gKiBAcHJvcGVydHkge0FycmF5PEZyb250ZW5kTW9kZWxSZXNvdXJjZUN1c3RvbUNvbW1hbmQ+fSBbbWVtYmVyQ29tbWFuZHNdIC0gQ3VzdG9tIG1lbWJlciBjb21tYW5kcy4gRWFjaCBlbnRyeSBpcyBhIGNhbWVsQ2FzZSBtZXRob2QgbmFtZSwgb3IgYSBge25hbWUsIGFyZ3M/LCByZXR1cm5UeXBlP31gIG9iamVjdCBkZWNsYXJpbmcgdHlwZWQgYXJndW1lbnRzIGFuZC9vciBhIHJlc3BvbnNlIHR5cGUuIFRoZSBydW50aW1lIGRlcml2ZXMgdGhlIGtlYmFiLWNhc2UgY29tbWFuZCBzbHVnIGZyb20gdGhlIG5hbWUuXG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfSBbYnVpbHRJbkNvbGxlY3Rpb25Db21tYW5kc10gLSBCdWlsdC1pbiBjb2xsZWN0aW9uIGNvbW1hbmQgbmFtZXMgKGBpbmRleGAsIGBjcmVhdGVgKS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IFtidWlsdEluTWVtYmVyQ29tbWFuZHNdIC0gQnVpbHQtaW4gbWVtYmVyIGNvbW1hbmQgbmFtZXMgKGBmaW5kYCwgYHVwZGF0ZWAsIGBkZXN0cm95YCwgYGF0dGFjaGAsIGBkb3dubG9hZGAsIGB1cmxgKS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbbW9kZWxOYW1lXSAtIEZyb250ZW5kIG1vZGVsIG5hbWUgb3ZlcnJpZGUuXG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfSBbcmVsYXRpb25zaGlwc10gLSBSZWxhdGlvbnNoaXAgbmFtZXMgdG8gZXhwb3NlIGluIGZyb250ZW5kIG1vZGVscy4gVHlwZSBhbmQgdGFyZ2V0IG1vZGVsIGFyZSBpbmZlcnJlZCBmcm9tIHRoZSBiYWNrZW5kIG1vZGVsJ3MgcmVnaXN0ZXJlZCByZWxhdGlvbnNoaXBzLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtwcmltYXJ5S2V5XSAtIFByaW1hcnkga2V5IGF0dHJpYnV0ZSBuYW1lLlxuICogQHByb3BlcnR5IHtGcm9udGVuZE1vZGVsUmVzb3VyY2VTZXJ2ZXJDb25maWd1cmF0aW9ufSBbc2VydmVyXSAtIE9wdGlvbmFsIGxlZ2FjeSBiYWNrZW5kIGJlaGF2aW9yIG92ZXJyaWRlcyBmb3IgYnVpbHQtaW4gZnJvbnRlbmQgYWN0aW9ucy5cbiAqIEBwcm9wZXJ0eSB7RnJvbnRlbmRNb2RlbFJlc291cmNlU3luY0NvbmZpZ3VyYXRpb24gfCBib29sZWFufSBbc3luY10gLSBPcHRpb25hbCBzYWZlIGxvY2FsL29mZmxpbmUgc3luYyBwb2xpY3kgbWV0YWRhdGEuIGBwb2xpY3lgIHBhcnRpY2lwYXRlcyBpbiB0aGUgaGFzaCBidXQgaXMgbm90IGV4cG9zZWQgdG8gZ2VuZXJhdGVkIGZyb250ZW5kIGNvbmZpZy9tYW5pZmVzdC5cbiAqL1xuXG4vKipcbiAqIE9iamVjdCBmb3JtIG9mIGEgY3VzdG9tIGNvbW1hbmQgZW50cnksIGRlY2xhcmluZyBpdHMgdHlwZWQgYXJndW1lbnRzIGFuZC9vclxuICogcmVzcG9uc2UgdHlwZSBhbG9uZ3NpZGUgdGhlIGNvbW1hbmQgbmFtZS5cbiAqIEB0eXBlZGVmIHtvYmplY3R9IEZyb250ZW5kTW9kZWxSZXNvdXJjZUN1c3RvbUNvbW1hbmRPYmplY3RcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBuYW1lIC0gY2FtZWxDYXNlIGNvbW1hbmQgbWV0aG9kIG5hbWUuXG4gKiBAcHJvcGVydHkge0FycmF5PHtuYW1lOiBzdHJpbmcsIHR5cGU6IHN0cmluZ30+fSBbYXJnc10gLSBUeXBlZCBjb21tYW5kIGFyZ3VtZW50czsgZWFjaCBnZW5lcmF0ZXMgYSBuYW1lZCwgdHlwZWQgbWV0aG9kIHBhcmFtZXRlciBtYXBwZWQgcG9zaXRpb25hbGx5IGludG8gdGhlIGNvbW1hbmQgcGF5bG9hZC4gYHR5cGVgIGlzIGEgSlNEb2MgdHlwZSBzdHJpbmcuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3JldHVyblR5cGVdIC0gSlNEb2MgdHlwZSBmb3IgdGhlIGNvbW1hbmQgcmVzcG9uc2UuIFdoZW4gc2V0LCB0aGUgZ2VuZXJhdGVkIG1ldGhvZCBpcyB0eXBlZCBgUHJvbWlzZTxyZXR1cm5UeXBlPmAgaW5zdGVhZCBvZiBgUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCA/Pj5gLiBFbWl0dGVkIHZlcmJhdGltIGludG8gdGhlIGdlbmVyYXRlZCBmcm9udGVuZCBtb2RlbCwgc28gaXQgbXVzdCByZXNvbHZlIHRoZXJlLlxuICovXG5cbi8qKlxuICogQSBjdXN0b20gY29tbWFuZCBlbnRyeTogYSBwbGFpbiBjYW1lbENhc2UgbWV0aG9kIG5hbWUsIG9yIGFuIG9iamVjdCBkZWNsYXJpbmdcbiAqIHR5cGVkIGFyZ3MgYW5kL29yIGEgcmVzcG9uc2UgdHlwZS5cbiAqIEB0eXBlZGVmIHtzdHJpbmcgfCBGcm9udGVuZE1vZGVsUmVzb3VyY2VDdXN0b21Db21tYW5kT2JqZWN0fSBGcm9udGVuZE1vZGVsUmVzb3VyY2VDdXN0b21Db21tYW5kXG4gKi9cblxuLyoqXG4gKiBKU09OIHZhbHVlIGFjY2VwdGVkIGJ5IHN5bmMgcG9saWN5IG1ldGFkYXRhL2hhc2ggaW5wdXRzLlxuICogQHR5cGVkZWYge251bGwgfCBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgdW5rbm93bltdIHwgUmVjb3JkPHN0cmluZywgdW5rbm93bj59IEZyb250ZW5kTW9kZWxTeW5jSnNvblZhbHVlXG4gKi9cblxuLyoqXG4gKiBGcm9udGVuZC1tb2RlbCBsb2NhbC9vZmZsaW5lIHN5bmMgcG9saWN5IGNvbmZpZy4gYG1ldGFkYXRhYCBpcyBleHBvc2VkIHRvXG4gKiBmcm9udGVuZHMgYW5kIHBlZXJzOyBgcG9saWN5YCBpcyBoYXNoZWQgYnV0IGludGVudGlvbmFsbHkgb21pdHRlZCBmcm9tXG4gKiBmcm9udGVuZC1zYWZlIG1hbmlmZXN0cy5cbiAqIEB0eXBlZGVmIHtvYmplY3R9IEZyb250ZW5kTW9kZWxSZXNvdXJjZVN5bmNDb25maWd1cmF0aW9uXG4gKiBAcHJvcGVydHkge1wib3B0aW1pc3RpY1ZlcnNpb25cIiB8IFwic2VydmVyV2luc1wiIHwgXCJsYXN0V3JpdGVyV2luc1wiIHwgXCJmaWVsZFRocmVlV2F5XCIgfCBcImFwcGVuZE9ubHlcIn0gW2NvbmZsaWN0U3RyYXRlZ3ldIC0gU3RyYXRlZ3kgdXNlZCB3aGVuIHJlcGxheSBkZXRlY3RzIHNlcnZlci9jbGllbnQgZGl2ZXJnZW5jZS4gRGVmYXVsdHMgdG8gYG9wdGltaXN0aWNWZXJzaW9uYC5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2VuYWJsZWRdIC0gV2hldGhlciB0aGUgcmVzb3VyY2UgaXMgc3luYy1lbmFibGVkLiBEZWZhdWx0cyB0byB0cnVlIHdoZW4gYHN5bmNgIGlzIGNvbmZpZ3VyZWQuXG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfSBbb3BlcmF0aW9uc10gLSBTeW5jIG9wZXJhdGlvbiBuYW1lcyBzdWNoIGFzIGBpbmRleGAsIGBmaW5kYCwgYGNyZWF0ZWAsIGB1cGRhdGVgLCBjdXN0b20gZG9tYWluIGNvbW1hbmRzLCBldGMuXG4gKiBAcHJvcGVydHkge3N0cmluZyB8IG51bWJlcn0gW3BvbGljeVZlcnNpb25dIC0gQXBwLWNvbnRyb2xsZWQgcG9saWN5IHZlcnNpb24gdXNlZCBhcyBhIHN0YWJsZSBjaGFuZ2Ugc2lnbmFsLlxuICogQHByb3BlcnR5IHtSZWNvcmQ8c3RyaW5nLCBGcm9udGVuZE1vZGVsU3luY0pzb25WYWx1ZT59IFttZXRhZGF0YV0gLSBTYWZlIGZyb250ZW5kLXZpc2libGUgbWV0YWRhdGEuXG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmcsIEZyb250ZW5kTW9kZWxTeW5jSnNvblZhbHVlPn0gW3BvbGljeV0gLSBEZXRlcm1pbmlzdGljIG5vbi1zZWNyZXQgcG9saWN5IGlucHV0cyBpbmNsdWRlZCBpbiB0aGUgcG9saWN5IGhhc2ggb25seS5cbiAqL1xuXG4vKipcbiAqIFZlbG9jaW91cyBzeW5jIEFQSSBlbmRwb2ludCBjb25maWd1cmF0aW9uLlxuICogQHR5cGVkZWYge29iamVjdH0gVmVsb2Npb3VzU3luY0FwaUNvbmZpZ3VyYXRpb25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbbW91bnRQYXRoXSAtIE1vdW50IHBhdGggZm9yIHRoZSBzeW5jIGVuZHBvaW50cy4gRGVmYXVsdHMgdG8gXCIvdmVsb2Npb3VzL3N5bmNcIi5cbiAqIEBwcm9wZXJ0eSB7RnJvbnRlbmRNb2RlbFJlc291cmNlQ2xhc3NUeXBlfSByZXNvdXJjZUNsYXNzIC0gQXBwIHN5bmMgcmVzb3VyY2UgY2xhc3Mgc2VydmVkIGJ5IHRoZSBhdXRvLW1vdW50ZWQgc3luYyBlbmRwb2ludHMuXG4gKi9cblxuLyoqXG4gKiBDbGllbnQtc2lkZSBzeW5jIHRyYW5zcG9ydCBvd25pbmcgSFRUUCBQT1NUcyB0byB0aGUgZnJhbWV3b3JrIHN5bmMgZW5kcG9pbnRzLFxuICogbWF0Y2hpbmcgdGhlIGZyb250ZW5kLW1vZGVsIHdlYnNvY2tldCBjbGllbnQgcG9zdCBjb250cmFjdC5cbiAqIEB0eXBlZGVmIHtvYmplY3R9IFZlbG9jaW91c1N5bmNDbGllbnRUcmFuc3BvcnRcbiAqIEBwcm9wZXJ0eSB7KHBhdGg6IHN0cmluZywgYm9keT86ID8sIG9wdGlvbnM/OiB7aGVhZGVycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz59KSA9PiBQcm9taXNlPHtqc29uOiAoKSA9PiA/fT59IHBvc3QgLSBQb3N0cyBvbmUgcmVxdWVzdCBhbmQgcmVzb2x2ZXMgYSByZXNwb25zZSB3aXRoIGEganNvbiBhY2Nlc3Nvci5cbiAqL1xuXG4vKipcbiAqIFdlYnNvY2tldCBjbGllbnQgY29udHJhY3QgcmVxdWlyZWQgZnJvbSBgc3luYy5jbGllbnQucmVhbHRpbWUuY3JlYXRlQ2xpZW50YCxcbiAqIG1hdGNoaW5nIGBWZWxvY2lvdXNXZWJzb2NrZXRDbGllbnRgIC8gc25hcHJlcSdzIHdlYnNvY2tldCBjbGllbnQuXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBWZWxvY2lvdXNTeW5jUmVhbHRpbWVXZWJzb2NrZXRDbGllbnRcbiAqIEBwcm9wZXJ0eSB7KCkgPT4gUHJvbWlzZTw/Pn0gY29ubmVjdCAtIENvbm5lY3RzIHRoZSB3ZWJzb2NrZXQuXG4gKiBAcHJvcGVydHkgeyhjaGFubmVsVHlwZTogc3RyaW5nLCBvcHRpb25zPzoge3BhcmFtcz86IFJlY29yZDxzdHJpbmcsID8+LCBvbk1lc3NhZ2U/OiAoYm9keTogPykgPT4gdm9pZCwgb25SZXN1bWU/OiAoKSA9PiB2b2lkLCBvbkNsb3NlPzogKHJlYXNvbjogc3RyaW5nKSA9PiB2b2lkfSkgPT4gVmVsb2Npb3VzU3luY1JlYWx0aW1lU3Vic2NyaXB0aW9ufSBzdWJzY3JpYmVDaGFubmVsIC0gT3BlbnMgb25lIGNoYW5uZWwgc3Vic2NyaXB0aW9uLlxuICogQHByb3BlcnR5IHsoKSA9PiBQcm9taXNlPHZvaWQ+fSBkaXNjb25uZWN0QW5kU3RvcFJlY29ubmVjdCAtIENsb3NlcyB0aGUgc29ja2V0IGFuZCBzdG9wcyBhdXRvLXJlY29ubmVjdC5cbiAqL1xuXG4vKipcbiAqIENoYW5uZWwgc3Vic2NyaXB0aW9uIGhhbmRsZSByZXR1cm5lZCBieSBgc3Vic2NyaWJlQ2hhbm5lbGAuXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBWZWxvY2lvdXNTeW5jUmVhbHRpbWVTdWJzY3JpcHRpb25cbiAqIEBwcm9wZXJ0eSB7KCkgPT4gdm9pZH0gY2xvc2UgLSBDbG9zZXMgdGhlIHN1YnNjcmlwdGlvbi5cbiAqIEBwcm9wZXJ0eSB7KCkgPT4gYm9vbGVhbn0gaXNSZWFkeSAtIFdoZXRoZXIgdGhlIHN1YnNjcmlwdGlvbiBpcyBhY2tub3dsZWRnZWQgYW5kIHJlYWR5LlxuICogQHByb3BlcnR5IHsocGFyYW1zPzoge3RpbWVvdXRNcz86IG51bWJlcn0pID0+IFByb21pc2U8dm9pZD59IHdhaXRGb3JSZWFkeSAtIFJlc29sdmVzIG9uY2UgdGhlIHNlcnZlciBhY2tub3dsZWRnZXMgdGhlIHN1YnNjcmlwdGlvbi5cbiAqL1xuXG4vKipcbiAqIE9uZSByZWFsdGltZSBjaGFubmVsIHN1YnNjcmlwdGlvbiBkZXNjcmlwdG9yLlxuICogQHR5cGVkZWYge29iamVjdH0gVmVsb2Npb3VzU3luY1JlYWx0aW1lQ2hhbm5lbERlc2NyaXB0b3JcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjaGFubmVsIC0gU2VydmVyIGNoYW5uZWwgbmFtZSB0byBzdWJzY3JpYmUuXG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmcsID8+fSBbcGFyYW1zXSAtIFN1YnNjcmliZSBwYXJhbXMgKHJ1bnRpbWUgc2NvcGUgdmFsdWVzKS4gVGhlIGZyYW1ld29yayBpbmplY3RzIGBhdXRoZW50aWNhdGlvblRva2VuYCBhdXRvbWF0aWNhbGx5LlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtyZXNvdXJjZVR5cGVdIC0gRGVmYXVsdCByZXNvdXJjZS9tb2RlbCBuYW1lIGZvciBwdXNoZWQgY2hhbmdlcyB0aGF0IGRvIG5vdCBjYXJyeSB0aGVpciBvd24gcmVzb3VyY2VUeXBlLlxuICovXG5cbi8qKlxuICogUmVhbHRpbWUgcHVzaCBjb25maWd1cmF0aW9uIGZvciB0aGUgc3luYyBjbGllbnQuIE9ubHkgdGhlIGdlbnVpbmVseVxuICogYXBwLW93bmVkIGNhbGxiYWNrIGxpdmVzIGhlcmU6IGhvdyB0byBidWlsZCB0aGUgd2Vic29ja2V0IGNsaWVudC5cbiAqIEV2ZXJ5dGhpbmcgZWxzZSAtIGRlcml2aW5nIHRoZSBmcmFtZXdvcmsgc3luYyBjaGFubmVsIHN1YnNjcmlwdGlvbnMgZnJvbVxuICogdGhlIGRlY2xhcmVkIHB1bGwgc2NvcGVzLCBzdWJzY3JpYmluZywgYXBwbHlpbmcgcHVzaGVzIHRocm91Z2ggdGhlIGRlcml2ZWRcbiAqIHJlc291cmNlIGFwcGxpZXIsIGVjaG8gc3VwcHJlc3Npb24sIGFuZCBwdWxsLW9uLXJlY29ubmVjdCAtIGlzIGRlcml2ZWQuXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBWZWxvY2lvdXNTeW5jQ2xpZW50UmVhbHRpbWVDb25maWd1cmF0aW9uXG4gKiBAcHJvcGVydHkgeygpID0+IFZlbG9jaW91c1N5bmNSZWFsdGltZVdlYnNvY2tldENsaWVudCB8IFByb21pc2U8VmVsb2Npb3VzU3luY1JlYWx0aW1lV2Vic29ja2V0Q2xpZW50Pn0gY3JlYXRlQ2xpZW50IC0gQnVpbGRzIHRoZSAodW5jb25uZWN0ZWQpIHdlYnNvY2tldCBjbGllbnQ7IHRoZSBmcmFtZXdvcmsgb3ducyBjb25uZWN0L2Rpc2Nvbm5lY3QuXG4gKiBAcHJvcGVydHkgeyhjb250ZXh0OiA/KSA9PiBBcnJheTxWZWxvY2lvdXNTeW5jUmVhbHRpbWVDaGFubmVsRGVzY3JpcHRvcj4gfCBQcm9taXNlPEFycmF5PFZlbG9jaW91c1N5bmNSZWFsdGltZUNoYW5uZWxEZXNjcmlwdG9yPj59IFtjaGFubmVsc10gLSBEZXByZWNhdGVkIGxlZ2FjeSBlc2NhcGUgaGF0Y2g6IHJlc29sdmVzIGV4dHJhIGFwcC1jaGFubmVsIGRlc2NyaXB0b3JzIGZyb20gdGhlIGBzdWJzY3JpYmVSZWFsdGltZShjb250ZXh0KWAgY29udGV4dC4gRGVjbGFyZWQgcHVsbCBzY29wZXMgc3Vic2NyaWJlIHRoZSBmcmFtZXdvcmsgc3luYyBjaGFubmVsIGF1dG9tYXRpY2FsbHkuXG4gKiBAcHJvcGVydHkgeygpID0+IHN0cmluZyB8IFByb21pc2U8c3RyaW5nPn0gW2xvY2FsT3JpZ2luXSAtIFJlc29sdmVzIHRoaXMgZGV2aWNlJ3MgZWNobyBvcmlnaW47IHB1c2hlZCBtZXNzYWdlcyB3aXRoIGEgbWF0Y2hpbmcgYGVjaG9PcmlnaW5gIGFyZSBkcm9wcGVkLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbcHVsbE9uUmVjb25uZWN0XSAtIEZpcmUgYSBjb2FsZXNjZWQgYHB1bGwoKWAgd2hlbiBzdWJzY3JpcHRpb25zIGJlY29tZSByZWFkeSBvciByZXN1bWUgYWZ0ZXIgYSBkcm9wLCBjbG9zaW5nIG9mZmxpbmUgZ2Fwcy4gRGVmYXVsdHMgdG8gdHJ1ZS5cbiAqL1xuXG4vKipcbiAqIENsaWVudC1zaWRlIHN5bmMgY29uZmlndXJhdGlvbiBjb25zdW1lZCBieSBgU3luY0NsaWVudC5mcm9tQ29uZmlndXJhdGlvbiguLi4pYC5cbiAqIFRoZSBmcmFtZXdvcmsgb3ducyB0aGUgYCR7bW91bnRQYXRofS9jaGFuZ2VzYCBhbmQgYCR7bW91bnRQYXRofS9yZXBsYXlgXG4gKiBQT1NUZXJzIG92ZXIgdGhlIGdpdmVuIHRyYW5zcG9ydC5cbiAqIEB0eXBlZGVmIHtvYmplY3R9IFZlbG9jaW91c1N5bmNDbGllbnRDb25maWd1cmF0aW9uXG4gKiBAcHJvcGVydHkgeygpID0+IHN0cmluZyB8IFByb21pc2U8c3RyaW5nPn0gYXV0aGVudGljYXRpb25Ub2tlbiAtIFJlc29sdmVzIHRoZSBhdXRoIHRva2VuIHNlbnQgd2l0aCBzeW5jIHJlcXVlc3RzLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtiYXRjaFNpemVdIC0gTWF4IHN5bmNzIHBlciByZXF1ZXN0LlxuICogQHByb3BlcnR5IHsoKSA9PiBib29sZWFuIHwgUHJvbWlzZTxib29sZWFuPn0gW2lzT25saW5lXSAtIENvbm5lY3Rpdml0eSBnYXRlIGZvciBwdWxscyBhbmQgcmVwbGF5cy4gRGVmYXVsdHMgdG8gYWx3YXlzIG9ubGluZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbbW91bnRQYXRoXSAtIE1vdW50IHBhdGggdGhlIHNlcnZlciBzZXJ2ZXMgdGhlIHN5bmMgZW5kcG9pbnRzIHVuZGVyIChtYXRjaCB0aGUgc2VydmVyJ3MgYHN5bmMuYXBpLm1vdW50UGF0aGApLiBEZWZhdWx0cyB0byBcIi92ZWxvY2lvdXMvc3luY1wiOyBub3JtYWxpemF0aW9uIHN0cmlwcyB0cmFpbGluZyBzbGFzaGVzIGFuZCBhbHdheXMgZmlsbHMgaW4gdGhlIGRlZmF1bHQuXG4gKiBAcHJvcGVydHkgeyhlcnJvcjogRXJyb3IpID0+IHZvaWR9IFtvbkVycm9yXSAtIFJlcG9ydHMgYmFja2dyb3VuZCByZXBsYXkvcHVsbCBmYWlsdXJlcy4gRGVmYXVsdHMgdG8gcmV0aHJvd2luZy5cbiAqIEBwcm9wZXJ0eSB7VmVsb2Npb3VzU3luY0NsaWVudFJlYWx0aW1lQ29uZmlndXJhdGlvbn0gW3JlYWx0aW1lXSAtIFJlYWx0aW1lIHB1c2ggY29uZmlndXJhdGlvbiBjb25zdW1lZCBieSBgc3Vic2NyaWJlUmVhbHRpbWUoLi4uKWAuXG4gKiBAcHJvcGVydHkge1ZlbG9jaW91c1N5bmNDbGllbnRUcmFuc3BvcnR9IHRyYW5zcG9ydCAtIFRyYW5zcG9ydCBwb3N0aW5nIHRvIHRoZSBmcmFtZXdvcmsgc3luYyBlbmRwb2ludHMgKGUuZy4gdGhlIGZyb250ZW5kLW1vZGVsIHdlYnNvY2tldCBjbGllbnQpLlxuICovXG5cbi8qKlxuICogVmVsb2Npb3VzIHN5bmMgY29uZmlndXJhdGlvbi5cbiAqIEB0eXBlZGVmIHtvYmplY3R9IFZlbG9jaW91c1N5bmNDb25maWd1cmF0aW9uXG4gKiBAcHJvcGVydHkge1ZlbG9jaW91c1N5bmNBcGlDb25maWd1cmF0aW9ufSBbYXBpXSAtIEF1dG8tbW91bnRzIHRoZSBWZWxvY2lvdXMgc3luYyBjaGFuZ2VzL3JlcGxheSBlbmRwb2ludHMgZm9yIHRoaXMgcmVzb3VyY2UgY2xhc3MuXG4gKiBAcHJvcGVydHkge1ZlbG9jaW91c1N5bmNDbGllbnRDb25maWd1cmF0aW9ufSBbY2xpZW50XSAtIENsaWVudC1zaWRlIHN5bmMgY29uZmlndXJhdGlvbiBjb25zdW1lZCBieSBgU3luY0NsaWVudC5mcm9tQ29uZmlndXJhdGlvbiguLi4pYC5cbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwiLi9zeW5jL2RldmljZS1pZGVudGl0eS5qc1wiKS5TeW5jSnNvbldlYktleSB8IG51bGx9IFtkZXZpY2VDZXJ0aWZpY2F0ZUJhY2tlbmRQdWJsaWNLZXldIC0gUHVibGljIGJhY2tlbmQga2V5IHVzZWQgdG8gdmVyaWZ5IG9mZmxpbmUgZGV2aWNlIGNlcnRpZmljYXRlcyBmb3Igc3luYyByZXBsYXkuXG4gKiBAcHJvcGVydHkge251bWJlcn0gW2NoYW5nZUZlZWRSZXRlbnRpb25TaXplXSAtIE51bWJlciBvZiBhY2NlcHRlZCBzZXJ2ZXIgY2hhbmdlcyByZXRhaW5lZCBiZWZvcmUgY2xpZW50cyBtdXN0IHJlZnJlc2ggZnJvbSBzbmFwc2hvdC5cbiAqIEBwcm9wZXJ0eSB7QXJyYXk8aW1wb3J0KFwiLi9zeW5jL29mZmxpbmUtZ3JhbnQuanNcIikuT2ZmbGluZUdyYW50U2lnbmluZ0tleT59IG9mZmxpbmVHcmFudFNpZ25pbmdLZXlzIC0gU2lnbmluZyBrZXlzIHVzZWQgdG8gaXNzdWUgYW5kIHZlcmlmeSBvZmZsaW5lIGdyYW50cy4gU2VjcmV0cyBtdXN0IG5ldmVyIGJlIGV4cG9zZWQgdG8gY2xpZW50cy5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbb2ZmbGluZUdyYW50VHRsTXNdIC0gRGVmYXVsdCBvZmZsaW5lIGdyYW50IFRUTCBpbiBtaWxsaXNlY29uZHMuIERlZmF1bHRzIHRvIDI0IGhvdXJzLlxuICovXG5cbi8qKlxuICogRnJvbnRlbmQtc2FmZSBub3JtYWxpemVkIHN5bmMgbWV0YWRhdGEuXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBOb3JtYWxpemVkRnJvbnRlbmRNb2RlbFJlc291cmNlU3luY0NvbmZpZ3VyYXRpb25cbiAqIEBwcm9wZXJ0eSB7XCJvcHRpbWlzdGljVmVyc2lvblwiIHwgXCJzZXJ2ZXJXaW5zXCIgfCBcImxhc3RXcml0ZXJXaW5zXCIgfCBcImZpZWxkVGhyZWVXYXlcIiB8IFwiYXBwZW5kT25seVwifSBjb25mbGljdFN0cmF0ZWd5IC0gTm9ybWFsaXplZCByZXBsYXkgY29uZmxpY3Qgc3RyYXRlZ3kuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGVuYWJsZWQgLSBXaGV0aGVyIHRoZSByZXNvdXJjZSBpcyBzeW5jLWVuYWJsZWQuXG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfSBvcGVyYXRpb25zIC0gU29ydGVkLCBkdXBsaWNhdGUtZnJlZSBzeW5jIG9wZXJhdGlvbiBuYW1lcy5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nIHwgbnVsbH0gcG9saWN5VmVyc2lvbiAtIEFwcC1jb250cm9sbGVkIHBvbGljeSB2ZXJzaW9uLCBvciBudWxsLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHBvbGljeUhhc2ggLSBEZXRlcm1pbmlzdGljIHNoYTI1NiBoYXNoIG9mIHNhZmUgcG9saWN5IGlucHV0cy5cbiAqIEBwcm9wZXJ0eSB7UmVjb3JkPHN0cmluZywgRnJvbnRlbmRNb2RlbFN5bmNKc29uVmFsdWU+fSBbbWV0YWRhdGFdIC0gU2FmZSBmcm9udGVuZC12aXNpYmxlIG1ldGFkYXRhLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge09taXQ8RnJvbnRlbmRNb2RlbFJlc291cmNlQ29uZmlndXJhdGlvbiwgXCJhYmlsaXRpZXNcIiB8IFwiYnVpbHRJbkNvbGxlY3Rpb25Db21tYW5kc1wiIHwgXCJidWlsdEluTWVtYmVyQ29tbWFuZHNcIiB8IFwiY29sbGVjdGlvbkNvbW1hbmRzXCIgfCBcImNvbW1hbmRzXCIgfCBcIm1lbWJlckNvbW1hbmRzXCIgfCBcInN5bmNcIj4gJiB7XG4gKiAgIGFiaWxpdGllczogRnJvbnRlbmRNb2RlbFJlc291cmNlQWJpbGl0aWVzQ29uZmlndXJhdGlvblxuICogICBidWlsdEluQ29sbGVjdGlvbkNvbW1hbmRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XG4gKiAgIGJ1aWx0SW5NZW1iZXJDb21tYW5kczogUmVjb3JkPHN0cmluZywgc3RyaW5nPlxuICogICBjb2xsZWN0aW9uQ29tbWFuZHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz5cbiAqICAgY29tbWFuZE1ldGFkYXRhOiBSZWNvcmQ8c3RyaW5nLCB7YXJnczogQXJyYXk8e25hbWU6IHN0cmluZywgdHlwZTogc3RyaW5nfT4sIHJldHVyblR5cGU6IHN0cmluZyB8IG51bGx9PlxuICogICBtZW1iZXJDb21tYW5kczogUmVjb3JkPHN0cmluZywgc3RyaW5nPlxuICogICBzeW5jPzogTm9ybWFsaXplZEZyb250ZW5kTW9kZWxSZXNvdXJjZVN5bmNDb25maWd1cmF0aW9uXG4gKiB9fSBOb3JtYWxpemVkRnJvbnRlbmRNb2RlbFJlc291cmNlQ29uZmlndXJhdGlvblxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge09taXQ8dHlwZW9mIGltcG9ydChcIi4vZnJvbnRlbmQtbW9kZWwtcmVzb3VyY2UvYmFzZS1yZXNvdXJjZS5qc1wiKS5kZWZhdWx0LCBuZXZlcj4gJiB7bmV3IChhcmdzOiBpbXBvcnQoXCIuL2Zyb250ZW5kLW1vZGVsLXJlc291cmNlL2Jhc2UtcmVzb3VyY2UuanNcIikuRnJvbnRlbmRNb2RlbFJlc291cmNlQWJpbGl0eUFyZ3MgfCBpbXBvcnQoXCIuL2Zyb250ZW5kLW1vZGVsLXJlc291cmNlL2Jhc2UtcmVzb3VyY2UuanNcIikuRnJvbnRlbmRNb2RlbFJlc291cmNlQ29udHJvbGxlckFyZ3MpOiBpbXBvcnQoXCIuL2Zyb250ZW5kLW1vZGVsLXJlc291cmNlL2Jhc2UtcmVzb3VyY2UuanNcIikuZGVmYXVsdDx0eXBlb2YgaW1wb3J0KFwiLi9kYXRhYmFzZS9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdD59fSBGcm9udGVuZE1vZGVsUmVzb3VyY2VDbGFzc1R5cGVcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtGcm9udGVuZE1vZGVsUmVzb3VyY2VDbGFzc1R5cGV9IEZyb250ZW5kTW9kZWxSZXNvdXJjZURlZmluaXRpb25cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IEZyb250ZW5kTW9kZWxSZXNvdXJjZUFiaWxpdGllc0NvbmZpZ3VyYXRpb25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbaW5kZXhdIC0gQWJpbGl0eSBhY3Rpb24gZm9yIGZyb250ZW5kIGluZGV4LlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtmaW5kXSAtIEFiaWxpdHkgYWN0aW9uIGZvciBmcm9udGVuZCBmaW5kLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtjcmVhdGVdIC0gQWJpbGl0eSBhY3Rpb24gZm9yIGZyb250ZW5kIGNyZWF0ZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbdXBkYXRlXSAtIEFiaWxpdHkgYWN0aW9uIGZvciBmcm9udGVuZCB1cGRhdGUuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2Rlc3Ryb3ldIC0gQWJpbGl0eSBhY3Rpb24gZm9yIGZyb250ZW5kIGRlc3Ryb3kuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBGcm9udGVuZE1vZGVsUmVzb3VyY2VTZXJ2ZXJDb25maWd1cmF0aW9uXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKHthY3Rpb246IFwiaW5kZXhcIiB8IFwiZmluZFwiIHwgXCJjcmVhdGVcIiB8IFwidXBkYXRlXCIgfCBcImRlc3Ryb3lcIiB8IFwiYXR0YWNoXCIgfCBcImF0dGFjaG1lbnRMaXN0XCIgfCBcImRvd25sb2FkXCIgfCBcInVybFwiLCBjb250cm9sbGVyOiBpbXBvcnQoXCIuL2NvbnRyb2xsZXIuanNcIikuZGVmYXVsdCwgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCA/PiwgbW9kZWxDbGFzczogdHlwZW9mIGltcG9ydChcIi4vZGF0YWJhc2UvcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHR9KSA6IChib29sZWFuIHwgdm9pZCB8IFByb21pc2U8Ym9vbGVhbiB8IHZvaWQ+KX0gW2JlZm9yZUFjdGlvbl0gLSBPcHRpb25hbCBjYWxsYmFjayBydW4gYmVmb3JlIGJ1aWx0LWluIGZyb250ZW5kIGFjdGlvbnMuXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKHthY3Rpb246IFwiaW5kZXhcIiwgY29udHJvbGxlcjogaW1wb3J0KFwiLi9jb250cm9sbGVyLmpzXCIpLmRlZmF1bHQsIHBhcmFtczogUmVjb3JkPHN0cmluZywgPz4sIG1vZGVsQ2xhc3M6IHR5cGVvZiBpbXBvcnQoXCIuL2RhdGFiYXNlL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0fSkgOiBQcm9taXNlPGltcG9ydChcIi4vZGF0YWJhc2UvcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHRbXT59IFtyZWNvcmRzXSAtIFJlY29yZHMgbG9hZGVyIGZvciBmcm9udGVuZEluZGV4LlxuICogQHByb3BlcnR5IHtmdW5jdGlvbih7YWN0aW9uOiBcImluZGV4XCIgfCBcImZpbmRcIiB8IFwiY3JlYXRlXCIgfCBcInVwZGF0ZVwiLCBjb250cm9sbGVyOiBpbXBvcnQoXCIuL2NvbnRyb2xsZXIuanNcIikuZGVmYXVsdCwgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCA/PiwgbW9kZWxDbGFzczogdHlwZW9mIGltcG9ydChcIi4vZGF0YWJhc2UvcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHQsIG1vZGVsOiBpbXBvcnQoXCIuL2RhdGFiYXNlL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0fSkgOiBSZWNvcmQ8c3RyaW5nLCA/PiB8IFByb21pc2U8UmVjb3JkPHN0cmluZywgPz4+fSBbc2VyaWFsaXplXSAtIFJlY29yZCBzZXJpYWxpemVyIGZvciByZXNwb25zZSBwYXlsb2Fkcy5cbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oe2FjdGlvbjogXCJmaW5kXCIgfCBcInVwZGF0ZVwiIHwgXCJkZXN0cm95XCIgfCBcImF0dGFjaFwiIHwgXCJhdHRhY2htZW50TGlzdFwiIHwgXCJkb3dubG9hZFwiIHwgXCJ1cmxcIiwgY29udHJvbGxlcjogaW1wb3J0KFwiLi9jb250cm9sbGVyLmpzXCIpLmRlZmF1bHQsIHBhcmFtczogUmVjb3JkPHN0cmluZywgPz4sIG1vZGVsQ2xhc3M6IHR5cGVvZiBpbXBvcnQoXCIuL2RhdGFiYXNlL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0LCBpZDogc3RyaW5nIHwgbnVtYmVyfSkgOiBQcm9taXNlPGltcG9ydChcIi4vZGF0YWJhc2UvcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHQgfCBudWxsPn0gW2ZpbmRdIC0gUmVjb3JkIGxvYWRlciBmb3IgZmluZC91cGRhdGUvZGVzdHJveS9hdHRhY2gvZG93bmxvYWQvdXJsIGFjdGlvbnMuXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKHthY3Rpb246IFwiY3JlYXRlXCIsIGNvbnRyb2xsZXI6IGltcG9ydChcIi4vY29udHJvbGxlci5qc1wiKS5kZWZhdWx0LCBwYXJhbXM6IFJlY29yZDxzdHJpbmcsID8+LCBtb2RlbENsYXNzOiB0eXBlb2YgaW1wb3J0KFwiLi9kYXRhYmFzZS9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdCwgYXR0cmlidXRlczogUmVjb3JkPHN0cmluZywgPz59KSA6IFByb21pc2U8aW1wb3J0KFwiLi9kYXRhYmFzZS9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdD59IFtjcmVhdGVdIC0gQ3VzdG9tIGNyZWF0ZSBjYWxsYmFjay5cbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oe2FjdGlvbjogXCJ1cGRhdGVcIiwgY29udHJvbGxlcjogaW1wb3J0KFwiLi9jb250cm9sbGVyLmpzXCIpLmRlZmF1bHQsIHBhcmFtczogUmVjb3JkPHN0cmluZywgPz4sIG1vZGVsQ2xhc3M6IHR5cGVvZiBpbXBvcnQoXCIuL2RhdGFiYXNlL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0LCBtb2RlbDogaW1wb3J0KFwiLi9kYXRhYmFzZS9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdCwgYXR0cmlidXRlczogUmVjb3JkPHN0cmluZywgPz59KSA6IFByb21pc2U8aW1wb3J0KFwiLi9kYXRhYmFzZS9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdCB8IHZvaWQ+fSBbdXBkYXRlXSAtIEN1c3RvbSB1cGRhdGUgY2FsbGJhY2suXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKHthY3Rpb246IFwiZGVzdHJveVwiLCBjb250cm9sbGVyOiBpbXBvcnQoXCIuL2NvbnRyb2xsZXIuanNcIikuZGVmYXVsdCwgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCA/PiwgbW9kZWxDbGFzczogdHlwZW9mIGltcG9ydChcIi4vZGF0YWJhc2UvcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHQsIG1vZGVsOiBpbXBvcnQoXCIuL2RhdGFiYXNlL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0fSkgOiBQcm9taXNlPHZvaWQ+fSBbZGVzdHJveV0gLSBDdXN0b20gZGVzdHJveSBjYWxsYmFjay5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IEJhY2tlbmRQcm9qZWN0Q29uZmlndXJhdGlvblxuICogQHByb3BlcnR5IHtzdHJpbmd9IHBhdGggLSBQYXRoIHRvIHRoZSBiYWNrZW5kIHByb2plY3QuIE1heSBiZSBhbiBhcHAgcm9vdCBvciBhIGNvbnRyaWJ1dGluZyBwYWNrYWdlIHJvb3QgKHBhY2thZ2UgZW50cmllcyBhcmUgYXBwZW5kZWQgaW50ZXJuYWxseSBmcm9tIGBwYWNrYWdlc2ApLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtmcm9udGVuZE1vZGVsc091dHB1dFBhdGhdIC0gT3B0aW9uYWwgb3V0cHV0IHByb2plY3QgcGF0aCB3aGVyZSBgc3JjL2Zyb250ZW5kLW1vZGVsc2Agc2hvdWxkIGJlIGdlbmVyYXRlZC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbcmVzb3VyY2VzUGF0aF0gLSBPcHRpb25hbCBvdmVycmlkZSBmb3IgdGhlIHJlc291cmNlcyBkaXJlY3RvcnkgdG8gYXV0by1kaXNjb3ZlcjsgZGVmYXVsdHMgdG8gYDxwYXRoPi9zcmMvcmVzb3VyY2VzYC4gU2V0IGludGVybmFsbHkgZm9yIHBhY2thZ2UgZW50cmllcy5cbiAqIEBwcm9wZXJ0eSB7UmVjb3JkPHN0cmluZywgRnJvbnRlbmRNb2RlbFJlc291cmNlRGVmaW5pdGlvbj59IFtmcm9udGVuZE1vZGVsc10gLSBBdXRvLWRpc2NvdmVyZWQgZnJvbnRlbmQgbW9kZWwgZGVmaW5pdGlvbnMga2V5ZWQgYnkgbW9kZWwgY2xhc3MgbmFtZS4gU2V0IGludGVybmFsbHkgYnkgdGhlIGVudmlyb25tZW50IGhhbmRsZXIg4oCUIGRvIG5vdCBzZXQgbWFudWFsbHkuXG4gKiBAcHJvcGVydHkge0FiaWxpdHlSZXNvdXJjZUNsYXNzVHlwZVtdfSBbYWJpbGl0eVJlc291cmNlc10gLSBBdXRvLWRpc2NvdmVyZWQgYWJpbGl0eSByZXNvdXJjZSBjbGFzc2VzIChmcm9udGVuZC1tb2RlbCBhbmQgYXV0aG9yaXphdGlvbikgZnJvbSB0aGlzIHByb2plY3QncyByZXNvdXJjZXMgZGlyZWN0b3J5LiBTZXQgaW50ZXJuYWxseSBieSB0aGUgZW52aXJvbm1lbnQgaGFuZGxlciDigJQgZG8gbm90IHNldCBtYW51YWxseS5cbiAqL1xuXG4vKipcbiAqIEEgZGVzY3JpcHRvciBmb3IgYW4gZXh0ZXJuYWwgVmVsb2Npb3VzIHBhY2thZ2UgKGVuZ2luZSkgdGhhdCBjb250cmlidXRlcyBtb2RlbHMsXG4gKiByZXNvdXJjZXMgYW5kIG1pZ3JhdGlvbnMuIEEgcGFja2FnZSB1c3VhbGx5IGV4cG9ydHMgYG5ldyBWZWxvY2lvdXNQYWNrYWdlKHtuYW1lLCB1cmw6IGltcG9ydC5tZXRhLnVybH0pYC5cbiAqIEB0eXBlZGVmIHtvYmplY3R9IFZlbG9jaW91c1BhY2thZ2VEZXNjcmlwdG9yXG4gKiBAcHJvcGVydHkge3N0cmluZ30gbmFtZSAtIFRoZSBwYWNrYWdlIG5hbWUuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3VybF0gLSBUaGUgZGVzY3JpcHRvciBtb2R1bGUncyBgaW1wb3J0Lm1ldGEudXJsYDsgdGhlIHBhY2thZ2Ugcm9vdCBpcyBkZXJpdmVkIGZyb20gaXQgd2hlbiBgcGF0aGAgaXMgb21pdHRlZC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbcGF0aF0gLSBUaGUgcGFja2FnZSByb290IGRpcmVjdG9yeSAodGhlIG9uZSBjb250YWluaW5nIGBzcmNgKS4gRGVyaXZlZCBmcm9tIGB1cmxgIHdoZW4gb21pdHRlZC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbbW9kZWxzUGF0aF0gLSBPdmVycmlkZSBmb3IgdGhlIHBhY2thZ2UncyBtb2RlbHMgZGlyZWN0b3J5IChkZWZhdWx0IGA8cGF0aD4vc3JjL21vZGVsc2ApLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtyZXNvdXJjZXNQYXRoXSAtIE92ZXJyaWRlIGZvciB0aGUgcGFja2FnZSdzIGZyb250ZW5kLW1vZGVsIHJlc291cmNlcyBkaXJlY3RvcnkgKGRlZmF1bHQgYDxwYXRoPi9zcmMvcmVzb3VyY2VzYCkuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW21pZ3JhdGlvbnNQYXRoXSAtIE92ZXJyaWRlIGZvciB0aGUgcGFja2FnZSdzIG1pZ3JhdGlvbnMgZGlyZWN0b3J5IChkZWZhdWx0IGA8cGF0aD4vc3JjL2RhdGFiYXNlL21pZ3JhdGlvbnNgKS5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoXCIuL3BhY2thZ2VzL3ZlbG9jaW91cy1wYWNrYWdlLmpzXCIpLmRlZmF1bHQgfCBWZWxvY2lvdXNQYWNrYWdlRGVzY3JpcHRvcn0gVmVsb2Npb3VzUGFja2FnZUNvbmZpZ3VyYXRpb25cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFJvdXRlUmVzb2x2ZXJIb29rQXJnc1xuICogQHByb3BlcnR5IHtpbXBvcnQoXCIuL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdH0gY29uZmlndXJhdGlvbiAtIENvbmZpZ3VyYXRpb24gaW5zdGFuY2UuXG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmcsID8+fSBwYXJhbXMgLSBNdXRhYmxlIHJlcXVlc3QgcGFyYW1zIG9iamVjdC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjdXJyZW50UGF0aCAtIFJlcXVlc3QgcGF0aCB3aXRob3V0IHF1ZXJ5LlxuICogQHByb3BlcnR5IHtib29sZWFufSBbaGFzTWF0Y2hpbmdDdXN0b21Sb3V0ZV0gLSBUcnVlIHdoZW4gbWF0Y2hpbmcgYSBjb25maWd1cmVkIGN1c3RvbSByb3V0ZS5cbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwiLi9odHRwLXNlcnZlci9jbGllbnQvcmVxdWVzdC5qc1wiKS5kZWZhdWx0IHwgaW1wb3J0KFwiLi9odHRwLXNlcnZlci9jbGllbnQvd2Vic29ja2V0LXJlcXVlc3QuanNcIikuZGVmYXVsdH0gcmVxdWVzdCAtIFJlcXVlc3Qgb2JqZWN0LlxuICogQHByb3BlcnR5IHtpbXBvcnQoXCIuL2h0dHAtc2VydmVyL2NsaWVudC9yZXNwb25zZS5qc1wiKS5kZWZhdWx0fSByZXNwb25zZSAtIFJlc3BvbnNlIG9iamVjdC5cbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwiLi9yb3V0ZXMvcmVzb2x2ZXIuanNcIikuZGVmYXVsdH0gcmVzb2x2ZXIgLSBSZXNvbHZlciBpbnN0YW5jZS5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFJvdXRlUmVzb2x2ZXJIb29rUmVzdWx0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gYWN0aW9uIC0gRGFzaGVyaXplZCBhY3Rpb24gbmFtZSAoZm9yIGV4YW1wbGUgYGZyb250ZW5kLWluZGV4YCkuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gY29udHJvbGxlciAtIENvbnRyb2xsZXIgcGF0aCAoZm9yIGV4YW1wbGUgYGFjY291bnRzYCkuXG4gKiBAcHJvcGVydHkge3R5cGVvZiBpbXBvcnQoXCIuL2NvbnRyb2xsZXIuanNcIikuZGVmYXVsdH0gW2NvbnRyb2xsZXJDbGFzc10gLSBPcHRpb25hbCBjb250cm9sbGVyIGNsYXNzIG92ZXJyaWRlLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtjb250cm9sbGVyUGF0aF0gLSBPcHRpb25hbCBhYnNvbHV0ZS9yZWxhdGl2ZSBjb250cm9sbGVyIGZpbGUgcGF0aCBvdmVycmlkZS5cbiAqIEBwcm9wZXJ0eSB7UmVjb3JkPHN0cmluZywgPz59IFtwYXJhbXNdIC0gRXh0cmEgcGFyYW1zIHRvIG1lcmdlIGZvciBjb250cm9sbGVyL2FjdGlvbi5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3NraXBBYmlsaXR5UmVzb2x1dGlvbl0gLSBXaGV0aGVyIHRvIHJ1biB0aGUgY29udHJvbGxlciBhY3Rpb24gd2l0aG91dCByZXNvbHZpbmcgcmVxdWVzdCBhYmlsaXR5LlxuICogQHByb3BlcnR5IHtib29sZWFufSBbc2tpcENvbnRyb2xsZXJDb25uZWN0aW9uc10gLSBXaGV0aGVyIHRvIHJ1biB0aGUgY29udHJvbGxlciBhY3Rpb24gd2l0aG91dCB0aGUgYXV0b21hdGljIGRhdGFiYXNlIGNoZWNrb3V0IHdyYXBwZXIuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtza2lwVGVuYW50UmVzb2x1dGlvbl0gLSBXaGV0aGVyIHRvIHJ1biB0aGUgY29udHJvbGxlciBhY3Rpb24gd2l0aG91dCByZXNvbHZpbmcgcmVxdWVzdCB0ZW5hbnQuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3ZpZXdQYXRoXSAtIE9wdGlvbmFsIHZpZXcgcGF0aCBvdmVycmlkZSB1c2VkIGJ5IGNvbnRyb2xsZXIgcmVuZGVyIGxvb2t1cHMuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7ZnVuY3Rpb24oUm91dGVSZXNvbHZlckhvb2tBcmdzKSA6IFJvdXRlUmVzb2x2ZXJIb29rUmVzdWx0IHwgbnVsbCB8IFByb21pc2U8Um91dGVSZXNvbHZlckhvb2tSZXN1bHQgfCBudWxsPn0gUm91dGVSZXNvbHZlckhvb2tUeXBlXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7dHlwZW9mIGltcG9ydChcIi4vYXV0aG9yaXphdGlvbi9iYXNlLXJlc291cmNlLmpzXCIpLmRlZmF1bHR9IEFiaWxpdHlSZXNvdXJjZUNsYXNzVHlwZVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge2Z1bmN0aW9uKHtjb25maWd1cmF0aW9uOiBpbXBvcnQoXCIuL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdCwgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCA/PiwgcmVxdWVzdDogaW1wb3J0KFwiLi9odHRwLXNlcnZlci9jbGllbnQvcmVxdWVzdC5qc1wiKS5kZWZhdWx0IHwgaW1wb3J0KFwiLi9odHRwLXNlcnZlci9jbGllbnQvd2Vic29ja2V0LXJlcXVlc3QuanNcIikuZGVmYXVsdCB8IHVuZGVmaW5lZCwgcmVzcG9uc2U6IGltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3Jlc3BvbnNlLmpzXCIpLmRlZmF1bHQgfCB1bmRlZmluZWR9KSA6IGltcG9ydChcIi4vYXV0aG9yaXphdGlvbi9hYmlsaXR5LmpzXCIpLmRlZmF1bHQgfCB2b2lkIHwgUHJvbWlzZTxpbXBvcnQoXCIuL2F1dGhvcml6YXRpb24vYWJpbGl0eS5qc1wiKS5kZWZhdWx0IHwgdm9pZD59IEFiaWxpdHlSZXNvbHZlclR5cGVcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtmdW5jdGlvbih7Y29uZmlndXJhdGlvbjogaW1wb3J0KFwiLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHQsIHBhcmFtczogUmVjb3JkPHN0cmluZywgPz4sIHJlcXVlc3Q6IGltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3JlcXVlc3QuanNcIikuZGVmYXVsdCB8IGltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3dlYnNvY2tldC1yZXF1ZXN0LmpzXCIpLmRlZmF1bHQgfCB1bmRlZmluZWQsIHJlc3BvbnNlOiBpbXBvcnQoXCIuL2h0dHAtc2VydmVyL2NsaWVudC9yZXNwb25zZS5qc1wiKS5kZWZhdWx0IHwgdW5kZWZpbmVkLCBzdWJzY3JpcHRpb24/OiB7Y2hhbm5lbDogc3RyaW5nLCBwYXJhbXM/OiBSZWNvcmQ8c3RyaW5nLCA/Pn19KSA6ID8gfCB2b2lkIHwgUHJvbWlzZTw/IHwgdm9pZD59IFRlbmFudFJlc29sdmVyVHlwZVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge2Z1bmN0aW9uKHtjb25maWd1cmF0aW9uOiBpbXBvcnQoXCIuL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdCwgZGF0YWJhc2VDb25maWd1cmF0aW9uOiBEYXRhYmFzZUNvbmZpZ3VyYXRpb25UeXBlLCBpZGVudGlmaWVyOiBzdHJpbmcsIHRlbmFudDogP30pIDogRGF0YWJhc2VDb25maWd1cmF0aW9uVHlwZSB8IFBhcnRpYWw8RGF0YWJhc2VDb25maWd1cmF0aW9uVHlwZT4gfCB2b2lkfSBUZW5hbnREYXRhYmFzZVJlc29sdmVyVHlwZVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gRGVidWdFbmRwb2ludENvbmZpZ3VyYXRpb25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbcGF0aF0gLSBIVFRQIHBhdGggZm9yIHRoZSBidWlsdC1pbiBkZWJ1ZyBlbmRwb2ludC4gRGVmYXVsdHMgdG8gYC92ZWxvY2lvdXMvZGVidWdgLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFt0b2tlbl0gLSBCZWFyZXIgdG9rZW4gcmVxdWlyZWQgaW4gdGhlIGBBdXRob3JpemF0aW9uOiBCZWFyZXIgPHRva2VuPmAgaGVhZGVyLiBXaGVuIHNldCwgcmVxdWVzdHMgd2l0aG91dCBhIG1hdGNoaW5nIHRva2VuIGFyZSBub3Qgcm91dGVkICg0MDQpLCBzbyB0aGUgZW5kcG9pbnQgc3RheXMgaGlkZGVuLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gVGVuYW50RGF0YWJhc2VQcm92aWRlclR5cGVcbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oe2NvbmZpZ3VyYXRpb246IGltcG9ydChcIi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0LCBpZGVudGlmaWVyOiBzdHJpbmd9KSA6IEFycmF5PD8+IHwgUHJvbWlzZTxBcnJheTw/Pj59IGxpc3RUZW5hbnRzIC0gTGlzdHMgdGVuYW50cyB0aGF0IHNob3VsZCBiZSBjcmVhdGVkLCBjaGVja2VkLCBvciBtaWdyYXRlZCBmb3IgdGhpcyBkYXRhYmFzZSBpZGVudGlmaWVyLlxuICogQHByb3BlcnR5IHtmdW5jdGlvbih7Y29uZmlndXJhdGlvbjogaW1wb3J0KFwiLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHQsIGlkZW50aWZpZXI6IHN0cmluZ30pIDogQXJyYXk8Pz4gfCBQcm9taXNlPEFycmF5PD8+Pn0gW2xpc3RSZXN0cmljdFRlbmFudHNdIC0gTGlzdHMgZXhpc3RpbmcgdGVuYW50cyB0aGF0IHNob3VsZCBiZSBjaGVja2VkIGZvciBkZXBlbmRlbnQgcmVzdHJpY3QgZGVzdHJveXMuIERlZmF1bHRzIHRvIGxpc3RUZW5hbnRzLlxuICogQHByb3BlcnR5IHtmdW5jdGlvbih7Y29uZmlndXJhdGlvbjogaW1wb3J0KFwiLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHQsIGRhdGFiYXNlQ29uZmlndXJhdGlvbjogRGF0YWJhc2VDb25maWd1cmF0aW9uVHlwZSwgaWRlbnRpZmllcjogc3RyaW5nLCB0ZW5hbnQ6ID99KSA6IHZvaWQgfCBQcm9taXNlPHZvaWQ+fSBbY3JlYXRlRGF0YWJhc2VdIC0gQ3JlYXRlcyB0aGUgdGVuYW50IGRhdGFiYXNlL3NjaGVtYSBmb3Igb25lIHRlbmFudC5cbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oe2NvbmZpZ3VyYXRpb246IGltcG9ydChcIi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0LCBkYXRhYmFzZUNvbmZpZ3VyYXRpb246IERhdGFiYXNlQ29uZmlndXJhdGlvblR5cGUsIGlkZW50aWZpZXI6IHN0cmluZywgdGVuYW50OiA/fSkgOiB2b2lkIHwgUHJvbWlzZTx2b2lkPn0gW2Ryb3BEYXRhYmFzZV0gLSBEcm9wcyB0aGUgdGVuYW50IGRhdGFiYXNlL3NjaGVtYSBmb3Igb25lIHRlbmFudC5cbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oe2NvbmZpZ3VyYXRpb246IGltcG9ydChcIi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0LCBkYXRhYmFzZUNvbmZpZ3VyYXRpb246IERhdGFiYXNlQ29uZmlndXJhdGlvblR5cGUsIGlkZW50aWZpZXI6IHN0cmluZywgdGVuYW50OiA/fSkgOiB2b2lkIHwgUHJvbWlzZTx2b2lkPn0gW2NoZWNrVGVuYW50XSAtIENoZWNrcyBvbmUgdGVuYW50IGRhdGFiYXNlIGJlZm9yZSBnZW5lcmljIGNvbm5lY3Rpb24gdmFsaWRhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oe2NvbmZpZ3VyYXRpb246IGltcG9ydChcIi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0LCBkYXRhYmFzZUNvbmZpZ3VyYXRpb246IERhdGFiYXNlQ29uZmlndXJhdGlvblR5cGUsIGlkZW50aWZpZXI6IHN0cmluZywgbWlncmF0aW9uc0FwcGxpZWQ6IG51bWJlciwgdGVuYW50OiA/fSkgOiB2b2lkIHwgUHJvbWlzZTx2b2lkPn0gW2FmdGVyTWlncmF0ZVRlbmFudF0gLSBSdW5zIGFwcC1vd25lZCB0ZW5hbnQgd29yayBhZnRlciBnZW5lcmljIG1pZ3JhdGlvbnMgZm9yIG9uZSB0ZW5hbnQuIGBtaWdyYXRpb25zQXBwbGllZGAgaXMgaG93IG1hbnkgbWlncmF0aW9ucyBhY3R1YWxseSByYW4gKDAgd2hlbiB0aGUgdGVuYW50IHdhcyBhbHJlYWR5IHVwIHRvIGRhdGUpLCBzbyB0aGUgYXBwIGNhbiBza2lwIGV4cGVuc2l2ZSBwZXItdGVuYW50IHdvcmsgb24gbm8tb3AgZGVwbG95cy5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IENvbmZpZ3VyYXRpb25BcmdzVHlwZVxuICogQHByb3BlcnR5IHtib29sZWFufSBbYXV0b2xvYWRdIC0gR2xvYmFsbHkgZW5hYmxlIGF1dG8tYmF0Y2gtcHJlbG9hZCBvZiByZWxhdGlvbnNoaXBzIG9uIGxhenkgYWNjZXNzLiBEZWZhdWx0IHRydWUuXG4gKiBAcHJvcGVydHkge0NvcnNUeXBlfSBbY29yc10gLSBDT1JTIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBIVFRQIHNlcnZlci5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbY29va2llU2VjcmV0XSAtIFNlY3JldCBmb3IgZW5jcnlwdGluZyBjb29raWVzLlxuICogQHByb3BlcnR5IHtBYmlsaXR5UmVzb3VyY2VDbGFzc1R5cGVbXX0gW2FiaWxpdHlSZXNvdXJjZXNdIC0gUmVzb3VyY2UgY2xhc3NlcyB1c2VkIHRvIGRlZmluZSBhYmlsaXRpZXMgcGVyIG1vZGVsLlxuICogQHByb3BlcnR5IHtBYmlsaXR5UmVzb2x2ZXJUeXBlfSBbYWJpbGl0eVJlc29sdmVyXSAtIFJlc29sdmVyIGZvciBjcmVhdGluZyByZXF1ZXN0LXNjb3BlZCBhYmlsaXR5IGluc3RhbmNlcy5cbiAqIEBwcm9wZXJ0eSB7QXR0YWNobWVudHNDb25maWd1cmF0aW9ufSBbYXR0YWNobWVudHNdIC0gQXR0YWNobWVudCBzdG9yYWdlIGNvbmZpZ3VyYXRpb24uXG4gKiBAcHJvcGVydHkge0JhY2tlbmRQcm9qZWN0Q29uZmlndXJhdGlvbltdfSBbYmFja2VuZFByb2plY3RzXSAtIEJhY2tlbmQgcHJvamVjdCBkZWZpbml0aW9ucyB1c2VkIGZvciBmcm9udGVuZCBtb2RlbCBnZW5lcmF0aW9uLlxuICogQHByb3BlcnR5IHtWZWxvY2lvdXNQYWNrYWdlQ29uZmlndXJhdGlvbltdfSBbcGFja2FnZXNdIC0gRXh0ZXJuYWwgVmVsb2Npb3VzIHBhY2thZ2VzIHRoYXQgY29udHJpYnV0ZSBtb2RlbHMsIGZyb250ZW5kLW1vZGVsIHJlc291cmNlcyBhbmQgbWlncmF0aW9ucy5cbiAqIEBwcm9wZXJ0eSB7e1trZXk6IHN0cmluZ106IHtba2V5OiBzdHJpbmddOiBEYXRhYmFzZUNvbmZpZ3VyYXRpb25UeXBlfX19IGRhdGFiYXNlIC0gRGF0YWJhc2UgY29uZmlndXJhdGlvbnMga2V5ZWQgYnkgZW52aXJvbm1lbnQgYW5kIGlkZW50aWZpZXIuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtkZWJ1Z10gLSBFbmFibGUgZGVidWcgbG9nZ2luZy5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbiB8IERlYnVnRW5kcG9pbnRDb25maWd1cmF0aW9ufSBbZGVidWdFbmRwb2ludF0gLSBFbmFibGUgdGhlIGJ1aWx0LWluIGRlYnVnIGVuZHBvaW50LiBEZWZhdWx0cyB0byBmYWxzZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbZGlyZWN0b3J5XSAtIEJhc2UgZGlyZWN0b3J5IGZvciB0aGUgcHJvamVjdC5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2VuZm9yY2VUZW5hbnREYXRhYmFzZVNjb3Blc10gLSBSZXF1aXJlIHRlbmFudC1zd2l0Y2hlZCBtb2RlbCBxdWVyaWVzIHRvIHJlc29sdmUgYSB0ZW5hbnQgZGF0YWJhc2UgaWRlbnRpZmllci4gRGVmYXVsdHMgdG8gdHJ1ZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbZW52aXJvbm1lbnRdIC0gQ3VycmVudCBlbnZpcm9ubWVudCBuYW1lLlxuICogQHByb3BlcnR5IHtpbXBvcnQoXCIuL2Vudmlyb25tZW50LWhhbmRsZXJzL2Jhc2UuanNcIikuZGVmYXVsdH0gZW52aXJvbm1lbnRIYW5kbGVyIC0gRW52aXJvbm1lbnQgaGFuZGxlciBpbnN0YW5jZS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2V4cG9zZUludGVybmFsRXJyb3JzVG9DbGllbnRzXSAtIFJldHVybiB1bmV4cGVjdGVkIGludGVybmFsIGVycm9yIGRldGFpbHMgaW4gY2xpZW50IEFQSSBwYXlsb2FkcyBvdXRzaWRlIHByb2R1Y3Rpb24uIERlZmF1bHRzIHRvIGZhbHNlLlxuICogQHByb3BlcnR5IHtIdHRwU2VydmVyQ29uZmlndXJhdGlvbn0gW2h0dHBTZXJ2ZXJdIC0gRGVmYXVsdCBIVFRQIHNlcnZlciBjb25maWd1cmF0aW9uIGZvciBhcHBsaWNhdGlvbnMgc3RhcnRlZCBmcm9tIHRoaXMgY29uZmlndXJhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7TG9nZ2luZ0NvbmZpZ3VyYXRpb259IFtsb2dnaW5nXSAtIExvZ2dpbmcgY29uZmlndXJhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7QmFja2dyb3VuZEpvYnNDb25maWd1cmF0aW9ufSBbYmFja2dyb3VuZEpvYnNdIC0gQmFja2dyb3VuZCBqb2JzIGNvbmZpZ3VyYXRpb24uXG4gKiBAcHJvcGVydHkge0JlYWNvbkNvbmZpZ3VyYXRpb259IFtiZWFjb25dIC0gQmVhY29uIGJyb2FkY2FzdCBidXMgY29uZmlndXJhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7U2NoZWR1bGVkQmFja2dyb3VuZEpvYnNDb25maWd1cmF0aW9uIHwgU2NoZWR1bGVkQmFja2dyb3VuZEpvYnNMb2FkZXJUeXBlfSBbc2NoZWR1bGVkQmFja2dyb3VuZEpvYnNdIC0gU2NoZWR1bGVkIGJhY2tncm91bmQgam9icyBjb25maWd1cmF0aW9uLlxuICogQHByb3BlcnR5IHtNYWlsZXJCYWNrZW5kfSBbbWFpbGVyQmFja2VuZF0gLSBNYWlsIGRlbGl2ZXJ5IGJhY2tlbmQuXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKHtjb25maWd1cmF0aW9uOiBpbXBvcnQoXCIuL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdCwgdHlwZTogc3RyaW5nfSkgOiB2b2lkfSBpbml0aWFsaXplTW9kZWxzIC0gSG9vayB0byByZWdpc3RlciBtb2RlbHMgZm9yIGEgZ2l2ZW4gaW5pdGlhbGl6YXRpb24gdHlwZS5cbiAqIEBwcm9wZXJ0eSB7SW5pdGlhbGl6ZXJzVHlwZX0gW2luaXRpYWxpemVyc10gLSBJbml0aWFsaXplciBsb2FkZXIgZm9yIGVudmlyb25tZW50IGJvb3RzdHJhcHBpbmcuXG4gKiBAcHJvcGVydHkge3N0cmluZyB8IGZ1bmN0aW9uKCkgOiBzdHJpbmd9IGxvY2FsZSAtIERlZmF1bHQgbG9jYWxlIG9yIGxvY2FsZSByZXNvbHZlci5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IGxvY2FsZXMgLSBTdXBwb3J0ZWQgbG9jYWxlcy5cbiAqIEBwcm9wZXJ0eSB7TG9jYWxlRmFsbGJhY2tzVHlwZX0gbG9jYWxlRmFsbGJhY2tzIC0gTG9jYWxlIGZhbGxiYWNrIG1hcC5cbiAqIEBwcm9wZXJ0eSB7U3RydWN0dXJlU3FsQ29uZmlndXJhdGlvbn0gW3N0cnVjdHVyZVNxbF0gLSBTdHJ1Y3R1cmUgU1FMIGdlbmVyYXRpb24gY29uZmlndXJhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7VmVsb2Npb3VzU3luY0NvbmZpZ3VyYXRpb259IFtzeW5jXSAtIExvY2FsL29mZmxpbmUgc3luYyBmcmFtZXdvcmsgY29uZmlndXJhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7VGVuYW50UmVzb2x2ZXJUeXBlfSBbdGVuYW50UmVzb2x2ZXJdIC0gUmVzb2x2ZXIgZm9yIGNyZWF0aW5nIHJlcXVlc3Qtc2NvcGVkIHRlbmFudCBjb250ZXh0IG9iamVjdHMuXG4gKiBAcHJvcGVydHkge1RlbmFudERhdGFiYXNlUmVzb2x2ZXJUeXBlfSBbdGVuYW50RGF0YWJhc2VSZXNvbHZlcl0gLSBSZXNvbHZlciBmb3IgZGVyaXZpbmcgdGVuYW50LXNwZWNpZmljIGRhdGFiYXNlIGNvbmZpZyBvdmVycmlkZXMuXG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmcsIFRlbmFudERhdGFiYXNlUHJvdmlkZXJUeXBlPn0gW3RlbmFudERhdGFiYXNlUHJvdmlkZXJzXSAtIFRlbmFudCBkYXRhYmFzZSBsaWZlY3ljbGUgcHJvdmlkZXJzIGtleWVkIGJ5IGRhdGFiYXNlIGlkZW50aWZpZXIuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3Rlc3RpbmddIC0gUGF0aCB0byB0aGUgdGVzdGluZyBjb25maWd1cmF0aW9uIGZpbGUuXG4gKiBAcHJvcGVydHkge3N0cmluZyB8ICgoKSA9PiBzdHJpbmcgfCB1bmRlZmluZWQpfSBbdGltZVpvbmVdIC0gRGVmYXVsdCB0aW1lem9uZSBmb3IgdGltZXpvbmUtbGVzcyBkYXRldGltZSBzdHJpbmdzLlxuICogQHByb3BlcnR5IHtudW1iZXIgfCAoKCkgPT4gbnVtYmVyKX0gW3RpbWV6b25lT2Zmc2V0TWludXRlc10gLSBEZWZhdWx0IHRpbWV6b25lIG9mZnNldCBpbiBtaW51dGVzLlxuICogQHByb3BlcnR5IHtzdHJpbmcgfCBzdHJpbmdbXX0gW3RydXN0ZWRQcm94aWVzXSAtIFRydXN0ZWQgcmV2ZXJzZSBwcm94eSBhZGRyZXNzIHJhbmdlcyB1c2VkIHRvIHJlc29sdmUgcmVxdWVzdCByZW1vdGUgYWRkcmVzc2VzIGZyb20gZm9yd2FyZGluZyBoZWFkZXJzLlxuICogQHByb3BlcnR5IHtudW1iZXIgfCAoKCkgPT4gbnVtYmVyKX0gW3JlcXVlc3RUaW1lb3V0TXNdIC0gVGltZW91dCBpbiBzZWNvbmRzIGZvciBjb21wbGV0aW5nIGEgSFRUUCByZXF1ZXN0LlxuICogQHByb3BlcnR5IHtSb3V0ZVJlc29sdmVySG9va1R5cGVbXX0gW3JvdXRlUmVzb2x2ZXJIb29rc10gLSBIb29rIGNhbGxiYWNrcyB0aGF0IGNhbiBoaWphY2sgdW5yZXNvbHZlZCByb3V0ZXMuXG4gKiBAcHJvcGVydHkge1dlYnNvY2tldENoYW5uZWxSZXNvbHZlclR5cGV9IFt3ZWJzb2NrZXRDaGFubmVsUmVzb2x2ZXJdIC0gUmVzb2x2ZSBhIHdlYnNvY2tldCBjaGFubmVsIGNsYXNzL2luc3RhbmNlIGZvciBlYWNoIGNvbm5lY3Rpb24uXG4gKiBAcHJvcGVydHkge1dlYnNvY2tldE1lc3NhZ2VIYW5kbGVyUmVzb2x2ZXJUeXBlfSBbd2Vic29ja2V0TWVzc2FnZUhhbmRsZXJSZXNvbHZlcl0gLSBSZXNvbHZlIGEgcmF3IHdlYnNvY2tldCBtZXNzYWdlIGhhbmRsZXIgZm9yIGVhY2ggY29ubmVjdGlvbi5cbiAqL1xuXG5leHBvcnQgY29uc3Qgbm90aGluZyA9IHt9XG4iXX0=
|
|
@@ -1127,14 +1127,14 @@ export default class VelociousConfiguration {
|
|
|
1127
1127
|
* Runs resolve ability.
|
|
1128
1128
|
* @param {object} args - Ability resolver args.
|
|
1129
1129
|
* @param {Record<string, ?>} args.params - Request params.
|
|
1130
|
-
* @param {import("./http-server/client/request.js").default | import("./http-server/client/websocket-request.js").default} args.request - Request object.
|
|
1131
|
-
* @param {import("./http-server/client/response.js").default} args.response - Response object.
|
|
1130
|
+
* @param {import("./http-server/client/request.js").default | import("./http-server/client/websocket-request.js").default} [args.request] - Request object. Absent for websocket channel subscriptions resolved from subscribe params.
|
|
1131
|
+
* @param {import("./http-server/client/response.js").default} [args.response] - Response object. Absent outside HTTP request handling.
|
|
1132
1132
|
* @returns {Promise<import("./authorization/ability.js").default | undefined>} - Resolved ability.
|
|
1133
1133
|
*/
|
|
1134
1134
|
resolveAbility({ params, request, response }: {
|
|
1135
1135
|
params: Record<string, unknown>;
|
|
1136
|
-
request
|
|
1137
|
-
response
|
|
1136
|
+
request?: import("./http-server/client/websocket-request.js").default | import("./http-server/client/request.js").default | undefined;
|
|
1137
|
+
response?: import("./http-server/client/response.js").default | undefined;
|
|
1138
1138
|
}): Promise<import("./authorization/ability.js").default | undefined>;
|
|
1139
1139
|
/**
|
|
1140
1140
|
* Runs run with ability.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configuration.d.ts","sourceRoot":"","sources":["../../src/configuration.js"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"configuration.d.ts","sourceRoot":"","sources":["../../src/configuration.js"],"names":[],"mappings":"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"}
|