-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
66 lines (66 loc) · 23.9 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
import { IonicNativePlugin, cordovaInstance, cordova, checkAvailability } from '@ionic-native/core';
import { Observable } from 'rxjs';
var PushOriginal = /** @class */ (function (_super) {
__extends(PushOriginal, _super);
function PushOriginal() {
return _super !== null && _super.apply(this, arguments) || this;
}
/**
* Init push notifications
* @param options {PushOptions}
* @return {PushObject}
*/
PushOriginal.prototype.init = function (options) {
return new PushObject(options);
};
PushOriginal.prototype.hasPermission = function () { return cordova(this, "hasPermission", {}, arguments); };
PushOriginal.prototype.createChannel = function (channel) { return cordova(this, "createChannel", { "callbackOrder": "reverse" }, arguments); };
PushOriginal.prototype.deleteChannel = function (id) { return cordova(this, "deleteChannel", { "callbackOrder": "reverse" }, arguments); };
PushOriginal.prototype.listChannels = function () { return cordova(this, "listChannels", {}, arguments); };
PushOriginal.prototype.getPublicKey = function () { return cordova(this, "getPublicKey", {}, arguments); };
PushOriginal.pluginName = "Push";
PushOriginal.plugin = "phonegap-plugin-push";
PushOriginal.pluginRef = "PushNotification";
PushOriginal.repo = "https://github.com/moodlemobile/phonegap-plugin-push";
PushOriginal.install = "ionic cordova plugin add phonegap-plugin-push";
PushOriginal.platforms = ["Android", "Browser", "iOS", "Windows"];
return PushOriginal;
}(IonicNativePlugin));
var Push = new PushOriginal();
export { Push };
var PushObject = /** @class */ (function () {
function PushObject(options) {
if (checkAvailability('PushNotification', 'init', 'PushNotification') === true) {
if (typeof window !== 'undefined') {
this._objectInstance = window.PushNotification.init(options);
}
}
}
PushObject.prototype.on = function (event) { return cordovaInstance(this, "on", { "observable": true, "clearFunction": "off", "clearWithArgs": true }, arguments); };
PushObject.prototype.unregister = function () { return cordovaInstance(this, "unregister", {}, arguments); };
PushObject.prototype.setApplicationIconBadgeNumber = function (count) { return cordovaInstance(this, "setApplicationIconBadgeNumber", { "callbackOrder": "reverse" }, arguments); };
PushObject.prototype.getApplicationIconBadgeNumber = function () { return cordovaInstance(this, "getApplicationIconBadgeNumber", {}, arguments); };
PushObject.prototype.finish = function (id) { return cordovaInstance(this, "finish", { "callbackOrder": "reverse" }, arguments); };
PushObject.prototype.clearAllNotifications = function () { return cordovaInstance(this, "clearAllNotifications", {}, arguments); };
PushObject.prototype.subscribe = function (topic) { return cordovaInstance(this, "subscribe", {}, arguments); };
PushObject.prototype.unsubscribe = function (topic) { return cordovaInstance(this, "unsubscribe", {}, arguments); };
PushObject.pluginName = "Push";
PushObject.plugin = "phonegap-plugin-push";
PushObject.pluginRef = "PushNotification";
return PushObject;
}());
export { PushObject };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvQGlvbmljLW5hdGl2ZS9wbHVnaW5zL3B1c2gvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUNBLE9BQU8sK0NBQXVELGlCQUFpQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDNUcsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7SUF1VVIsd0JBQWlCOzs7O0lBQ3pDOzs7O09BSUc7SUFDSCxtQkFBSSxHQUFKLFVBQUssT0FBb0I7UUFDdkIsT0FBTyxJQUFJLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBT0QsNEJBQWE7SUFXYiw0QkFBYSxhQUFDLE9BQWlCO0lBVy9CLDRCQUFhLGFBQUMsRUFBVztJQVN6QiwyQkFBWTtJQVNaLDJCQUFZOzs7Ozs7O2VBaFlkO0VBeVUwQixpQkFBaUI7U0FBOUIsSUFBSTs7SUF1RWYsb0JBQVksT0FBb0I7UUFDOUIsSUFBSSxpQkFBaUIsQ0FBQyxrQkFBa0IsRUFBRSxNQUFNLEVBQUUsa0JBQWtCLENBQUMsS0FBSyxJQUFJLEVBQUU7WUFDOUUsSUFBSSxPQUFPLE1BQU0sS0FBSyxXQUFXLEVBQUU7Z0JBQ2pDLElBQUksQ0FBQyxlQUFlLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUM5RDtTQUNGO0lBQ0gsQ0FBQztJQVlELHVCQUFFLGFBQUMsS0FBZ0I7SUFVbkIsK0JBQVU7SUFlVixrREFBNkIsYUFBQyxLQUFjO0lBUTVDLGtEQUE2QjtJQWE3QiwyQkFBTSxhQUFDLEVBQVc7SUFRbEIsMENBQXFCO0lBVXJCLDhCQUFTLGFBQUMsS0FBYTtJQVV2QixnQ0FBVyxhQUFDLEtBQWE7Ozs7cUJBNWUzQjs7U0E2WWEsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvcmRvdmEsIENvcmRvdmFJbnN0YW5jZSwgSW9uaWNOYXRpdmVQbHVnaW4sIFBsdWdpbiwgY2hlY2tBdmFpbGFiaWxpdHkgfSBmcm9tICdAaW9uaWMtbmF0aXZlL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuXG5kZWNsYXJlIGNvbnN0IHdpbmRvdzogYW55O1xuXG5leHBvcnQgdHlwZSBFdmVudFJlc3BvbnNlID0gUmVnaXN0cmF0aW9uRXZlbnRSZXNwb25zZSAmIE5vdGlmaWNhdGlvbkV2ZW50UmVzcG9uc2UgJiBFcnJvcjtcblxuZXhwb3J0IGludGVyZmFjZSBSZWdpc3RyYXRpb25FdmVudFJlc3BvbnNlIHtcbiAgLyoqXG4gICAqIFRoZSByZWdpc3RyYXRpb24gSUQgcHJvdmlkZWQgYnkgdGhlIDNyZCBwYXJ0eSByZW1vdGUgcHVzaCBzZXJ2aWNlLlxuICAgKi9cbiAgcmVnaXN0cmF0aW9uSWQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOb3RpZmljYXRpb25FdmVudFJlc3BvbnNlIHtcbiAgLyoqXG4gICAqIFRoZSB0ZXh0IG9mIHRoZSBwdXNoIG1lc3NhZ2Ugc2VudCBmcm9tIHRoZSAzcmQgcGFydHkgc2VydmljZS5cbiAgICovXG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBvcHRpb25hbCB0aXRsZSBvZiB0aGUgcHVzaCBtZXNzYWdlIHNlbnQgZnJvbSB0aGUgM3JkIHBhcnR5IHNlcnZpY2UuXG4gICAqL1xuICB0aXRsZT86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2YgbWVzc2FnZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBiYWRnZSBpT1Mgb3IgbWVzc2FnZSBjb3VudCBpbiB0aGUgbm90aWZpY2F0aW9uIHNoYWRlIGluIEFuZHJvaWQuXG4gICAqIEZvciB3aW5kb3dzLCBpdCByZXByZXNlbnRzIHRoZSB2YWx1ZSBpbiB0aGUgYmFkZ2Ugbm90aWZpY2F0aW9uIHdoaWNoIGNvdWxkIGJlIGEgbnVtYmVyIG9yIGEgc3RhdHVzIGdseXBoLlxuICAgKi9cbiAgY291bnQ6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBzb3VuZCBmaWxlIHRvIGJlIHBsYXllZCB1cG9uIHJlY2VpcHQgb2YgdGhlIG5vdGlmaWNhdGlvbi5cbiAgICovXG4gIHNvdW5kOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgcGF0aCBvZiB0aGUgaW1hZ2UgZmlsZSB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIG5vdGlmaWNhdGlvbi5cbiAgICovXG4gIGltYWdlOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBBbiBvcHRpb25hbCBjb2xsZWN0aW9uIG9mIGRhdGEgc2VudCBieSB0aGUgM3JkIHBhcnR5IHB1c2ggc2VydmljZSB0aGF0IGRvZXMgbm90IGZpdCBpbiB0aGUgYWJvdmUgcHJvcGVydGllcy5cbiAgICovXG4gIGFkZGl0aW9uYWxEYXRhOiBOb3RpZmljYXRpb25FdmVudEFkZGl0aW9uYWxEYXRhICYgYW55O1xufVxuXG4vKipcbiAqIExvb3NlbmVkIHVwIHdpdGggYSBkaWN0aW9uYXJ5IG5vdGF0aW9uLCBidXQgYWxsIG5vbi1kZWZpbmVkIHByb3BlcnRpZXMgbmVlZCB0byB1c2UgKG1hcFsncHJvcCddKSBub3RhdGlvblxuICpcbiAqIElkZWFsbHkgdGhlIGRldmVsb3BlciB3b3VsZCBvdmVybG9hZCAobWVyZ2VkIGRlY2xhcmF0aW9uKSB0aGlzIG9yIGNyZWF0ZSBhIG5ldyBpbnRlcmZhY2UgdGhhdCB3b3VsZCBleHRlbmQgdGhpcyBvbmVcbiAqIHNvIHRoYXQgaGUgY291bGQgc3BlY2lmeSBhbnkgY3VzdG9tIGNvZGUgd2l0aG91dCBoYXZpbmcgdG8gdXNlIGFycmF5IG5vdGF0aW9uIChtYXBbJ3Byb3AnXSkgZm9yIGFsbCBvZiB0aGVtLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5vdGlmaWNhdGlvbkV2ZW50QWRkaXRpb25hbERhdGEge1xuICAvKipcbiAgICogV2hldGhlciB0aGUgbm90aWZpY2F0aW9uIHdhcyByZWNlaXZlZCB3aGlsZSB0aGUgYXBwIHdhcyBpbiB0aGUgZm9yZWdyb3VuZFxuICAgKi9cbiAgZm9yZWdyb3VuZD86IGJvb2xlYW47XG4gIGNvbGxhcHNlX2tleT86IHN0cmluZztcbiAgY29sZHN0YXJ0PzogYm9vbGVhbjtcbiAgZnJvbT86IHN0cmluZztcbiAgbm90SWQ/OiBzdHJpbmc7XG5cbiAgW25hbWU6IHN0cmluZ106IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJT1NQdXNoT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHVzZSBwcm9kIG9yIHNhbmRib3ggR0NNIHNldHRpbmcuXG4gICAqL1xuICBmY21TYW5kYm94PzogYm9vbGVhbiB8IHN0cmluZztcblxuICAvKipcbiAgICogSWYgdHJ1ZSB0aGUgZGV2aWNlIHNob3dzIGFuIGFsZXJ0IG9uIHJlY2VpcHQgb2Ygbm90aWZpY2F0aW9uLlxuICAgKiAqKk5vdGUqKjogdGhlIHZhbHVlIHlvdSBzZXQgdGhpcyBvcHRpb24gdG8gdGhlIGZpcnN0IHRpbWUgeW91IGNhbGwgdGhlIGluaXRcbiAgICogbWV0aG9kIHdpbGwgYmUgaG93IHRoZSBhcHBsaWNhdGlvbiBhbHdheXMgYWN0cy4gT25jZSB0aGlzIGlzIHNldFxuICAgKiBwcm9ncmFtbWF0aWNhbGx5IGluIHRoZSBpbml0IG1ldGhvZCBpdCBjYW4gb25seSBiZSBjaGFuZ2VkIG1hbnVhbGx5IGJ5IHRoZVxuICAgKiB1c2VyIGluIFNldHRpbmdzPk5vdGlmaWNhdGlvbnM+QXBwIE5hbWUuIFRoaXMgaXMgbm9ybWFsIGlPUyBiZWhhdmlvdXIuXG4gICAqL1xuICBhbGVydD86IGJvb2xlYW4gfCBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElmIHRydWUgdGhlIGRldmljZSBzZXRzIHRoZSBiYWRnZSBudW1iZXIgb24gcmVjZWlwdCBvZiBub3RpZmljYXRpb24uXG4gICAqICoqTm90ZSoqOiB0aGUgdmFsdWUgeW91IHNldCB0aGlzIG9wdGlvbiB0byB0aGUgZmlyc3QgdGltZSB5b3UgY2FsbCB0aGUgaW5pdFxuICAgKiBtZXRob2Qgd2lsbCBiZSBob3cgdGhlIGFwcGxpY2F0aW9uIGFsd2F5cyBhY3RzLiBPbmNlIHRoaXMgaXMgc2V0XG4gICAqIHByb2dyYW1tYXRpY2FsbHkgaW4gdGhlIGluaXQgbWV0aG9kIGl0IGNhbiBvbmx5IGJlIGNoYW5nZWQgbWFudWFsbHkgYnkgdGhlXG4gICAqIHVzZXIgaW4gU2V0dGluZ3M+Tm90aWZpY2F0aW9ucz5BcHAgTmFtZS4gVGhpcyBpcyBub3JtYWwgaU9TIGJlaGF2aW91ci5cbiAgICovXG4gIGJhZGdlPzogYm9vbGVhbiB8IHN0cmluZztcblxuICAvKipcbiAgICogSWYgdHJ1ZSB0aGUgZGV2aWNlIHBsYXlzIGEgc291bmQgb24gcmVjZWlwdCBvZiBub3RpZmljYXRpb24uXG4gICAqICoqTm90ZSoqOiB0aGUgdmFsdWUgeW91IHNldCB0aGlzIG9wdGlvbiB0byB0aGUgZmlyc3QgdGltZSB5b3UgY2FsbCB0aGUgaW5pdFxuICAgKiBtZXRob2Qgd2lsbCBiZSBob3cgdGhlIGFwcGxpY2F0aW9uIGFsd2F5cyBhY3RzLiBPbmNlIHRoaXMgaXMgc2V0XG4gICAqIHByb2dyYW1tYXRpY2FsbHkgaW4gdGhlIGluaXQgbWV0aG9kIGl0IGNhbiBvbmx5IGJlIGNoYW5nZWQgbWFudWFsbHkgYnkgdGhlXG4gICAqIHVzZXIgaW4gU2V0dGluZ3M+Tm90aWZpY2F0aW9ucz5BcHAgTmFtZS4gVGhpcyBpcyBub3JtYWwgaU9TIGJlaGF2aW91ci5cbiAgICovXG4gIHNvdW5kPzogYm9vbGVhbiB8IHN0cmluZztcblxuICAvKipcbiAgICogSWYgdHJ1ZSB0aGUgYmFkZ2Ugd2lsbCBiZSBjbGVhcmVkIG9uIGFwcCBzdGFydHVwLlxuICAgKi9cbiAgY2xlYXJCYWRnZT86IGJvb2xlYW4gfCBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElmIHRoZSBhcnJheSBjb250YWlucyBvbmUgb3IgbW9yZSBzdHJpbmdzIGVhY2ggc3RyaW5nIHdpbGwgYmUgdXNlZCB0b1xuICAgKiBzdWJzY3JpYmUgdG8gYSBHY21QdWJTdWIgdG9waWMuXG4gICAqICoqTm90ZSoqOiBvbmx5IHVzYWJsZSBpbiBjb25qdW5jdGlvbiB3aXRoIGBzZW5kZXJJRGAuXG4gICAqL1xuICB0b3BpY3M/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIGRhdGEgcmVxdWlyZWQgaW4gb3JkZXIgdG8gZW5hYmxlIEFjdGlvbiBCdXR0b25zIGZvciBpT1MuXG4gICAqIEFjdGlvbiBCdXR0b25zIG9uIGlPUyAtIGh0dHBzOi8vZ2l0aHViLmNvbS9waG9uZWdhcC9waG9uZWdhcC1wbHVnaW4tcHVzaC9ibG9iL21hc3Rlci9kb2NzL1BBWUxPQUQubWQjYWN0aW9uLWJ1dHRvbnMtMVxuICAgKi9cbiAgY2F0ZWdvcmllcz86IENhdGVnb3J5QXJyYXk7XG5cbiAgLyoqXG4gICAqIElmIHRydWUgdGhlIGRldmljZSB3aWxsIGJlIHNldCB1cCB0byByZWNlaXZlIFZvSVAgUHVzaCBub3RpZmljYXRpb25zIGFuZCB0aGVcbiAgICogb3RoZXIgb3B0aW9ucyB3aWxsIGJlIGlnbm9yZWQgc2luY2UgVm9JUCBub3RpZmljYXRpb25zIGFyZSBzaWxlbnRcbiAgICogbm90aWZpY2F0aW9ucyB0aGF0IHNob3VsZCBiZSBoYW5kbGVkIGluIHRoZSBcIm5vdGlmaWNhdGlvblwiIGV2ZW50LlxuICAgKi9cbiAgdm9pcD86IGJvb2xlYW4gfCBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2F0ZWdvcnlBcnJheSB7XG4gIFtuYW1lOiBzdHJpbmddOiBDYXRlZ29yeUFjdGlvbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDYXRlZ29yeUFjdGlvbiB7XG4gIHllcz86IENhdGVnb3J5QWN0aW9uRGF0YTtcbiAgbm8/OiBDYXRlZ29yeUFjdGlvbkRhdGE7XG4gIG1heWJlPzogQ2F0ZWdvcnlBY3Rpb25EYXRhO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENhdGVnb3J5QWN0aW9uRGF0YSB7XG4gIGNhbGxiYWNrOiBzdHJpbmc7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGZvcmVncm91bmQ6IGJvb2xlYW47XG4gIGRlc3RydWN0aXZlOiBib29sZWFuO1xuICBpbmxpbmU/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFuZHJvaWRQdXNoT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBNYXBzIHRvIHRoZSBwcm9qZWN0IG51bWJlciBpbiB0aGUgR29vZ2xlIERldmVsb3BlciBDb25zb2xlLlxuICAgKi9cbiAgc2VuZGVySUQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIGEgZHJhd2FibGUgcmVzb3VyY2UgdG8gdXNlIGFzIHRoZSBzbWFsbC1pY29uLiBUaGUgbmFtZSBzaG91bGRcbiAgICogbm90IGluY2x1ZGUgdGhlIGV4dGVuc2lvbi5cbiAgICovXG4gIGljb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGJhY2tncm91bmQgY29sb3Igb2YgdGhlIHNtYWxsIGljb24gb24gQW5kcm9pZCA1LjAgYW5kIGdyZWF0ZXIuXG4gICAqIFtTdXBwb3J0ZWQgRm9ybWF0c10oaHR0cDovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9pbnRsL3J1L3JlZmVyZW5jZS9hbmRyb2lkL2dyYXBoaWNzL0NvbG9yLmh0bWwjcGFyc2VDb2xvcihqYXZhLmxhbmcuU3RyaW5nKSlcbiAgICovXG4gIGljb25Db2xvcj86IHN0cmluZztcblxuICAvKipcbiAgICogSWYgdHJ1ZSBpdCBwbGF5cyB0aGUgc291bmQgc3BlY2lmaWVkIGluIHRoZSBwdXNoIGRhdGEgb3IgdGhlIGRlZmF1bHQgc3lzdGVtXG4gICAqIHNvdW5kLlxuICAgKi9cbiAgc291bmQ/OiBib29sZWFuIHwgc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJZiB0cnVlIHRoZSBkZXZpY2UgdmlicmF0ZXMgb24gcmVjZWlwdCBvZiBub3RpZmljYXRpb24uXG4gICAqL1xuICB2aWJyYXRlPzogYm9vbGVhbiB8IHN0cmluZztcblxuICAvKipcbiAgICogSWYgdHJ1ZSB0aGUgaWNvbiBiYWRnZSB3aWxsIGJlIGNsZWFyZWQgb24gaW5pdCBhbmQgYmVmb3JlIHB1c2ggbWVzc2FnZXMgYXJlIHByb2Nlc3NlZC5cbiAgICovXG4gIGNsZWFyQmFkZ2U/OiBib29sZWFuIHwgc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJZiB0cnVlIHRoZSBhcHAgY2xlYXJzIGFsbCBwZW5kaW5nIG5vdGlmaWNhdGlvbnMgd2hlbiBpdCBpcyBjbG9zZWQuXG4gICAqL1xuICBjbGVhck5vdGlmaWNhdGlvbnM/OiBib29sZWFuIHwgc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJZiB0cnVlIHdpbGwgYWx3YXlzIHNob3cgYSBub3RpZmljYXRpb24sIGV2ZW4gd2hlbiB0aGUgYXBwIGlzIG9uIHRoZVxuICAgKiBmb3JlZ3JvdW5kLlxuICAgKi9cbiAgZm9yY2VTaG93PzogYm9vbGVhbiB8IHN0cmluZztcblxuICAvKipcbiAgICogSWYgdGhlIGFycmF5IGNvbnRhaW5zIG9uZSBvciBtb3JlIHN0cmluZ3MgZWFjaCBzdHJpbmcgd2lsbCBiZSB1c2VkIHRvXG4gICAqIHN1YnNjcmliZSB0byBhIEdjbVB1YlN1YiB0b3BpYy5cbiAgICovXG4gIHRvcGljcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUga2V5IHRvIHNlYXJjaCBmb3IgdGV4dCBvZiBub3RpZmljYXRpb24uXG4gICAqL1xuICBtZXNzYWdlS2V5Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUga2V5IHRvIHNlYXJjaCBmb3IgdGl0bGUgb2Ygbm90aWZpY2F0aW9uLlxuICAgKi9cbiAgdGl0bGVLZXk/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnJvd3NlclB1c2hPcHRpb25zIHtcbiAgLyoqXG4gICAqIE9wdGlvbmFsLiBZb3VyIEdDTSBBUEkga2V5IGlmIHlvdSBhcmUgdXNpbmcgVkFQSUQga2V5cy5cbiAgICovXG4gIGFwcGxpY2F0aW9uU2VydmVyS2V5Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBVUkwgZm9yIHRoZSBwdXNoIHNlcnZlciB5b3Ugd2FudCB0byB1c2UuXG4gICAqIERlZmF1bHQ6IGh0dHA6Ly9wdXNoLmFwaS5waG9uZWdhcC5jb20vdjEvcHVzaCAgT3B0aW9uYWwuXG4gICAqL1xuICBwdXNoU2VydmljZVVSTD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQdXNoT3B0aW9ucyB7XG4gIGlvcz86IElPU1B1c2hPcHRpb25zO1xuICBhbmRyb2lkPzogQW5kcm9pZFB1c2hPcHRpb25zO1xuICB3aW5kb3dzPzogYW55O1xuICBicm93c2VyPzogQnJvd3NlclB1c2hPcHRpb25zO1xufVxuXG5leHBvcnQgdHlwZSBQcmlvcml0eSA9IDEgfCAyIHwgMyB8IDQgfCA1O1xuZXhwb3J0IHR5cGUgVmlzaWJpbGl0eSA9IDAgfCAxIHwgLTE7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhbm5lbCB7XG4gIGlkOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIGltcG9ydGFuY2U6IFByaW9yaXR5O1xuICBzb3VuZD86IHN0cmluZztcbiAgdmlicmF0aW9uPzogYm9vbGVhbiB8IG51bWJlcltdO1xuICB2aXNpYmlsaXR5PzogVmlzaWJpbGl0eTtcbiAgYmFkZ2U/OiBib29sZWFuO1xufVxuXG5leHBvcnQgdHlwZSBQdXNoRXZlbnQgPSBzdHJpbmc7XG5cbi8qKlxuICogQG5hbWUgUHVzaFxuICogQGRlc2NyaXB0aW9uXG4gKiBSZWdpc3RlciBhbmQgcmVjZWl2ZSBwdXNoIG5vdGlmaWNhdGlvbnMuXG4gKlxuICogUmVxdWlyZXMgQ29yZG92YSBwbHVnaW46IGBwaG9uZWdhcC1wbHVnaW4tcHVzaGAuIEZvciBtb3JlIGluZm8sIHBsZWFzZSBzZWUgdGhlIFtQdXNoIHBsdWdpbiBkb2NzXShodHRwczovL2dpdGh1Yi5jb20vbW9vZGxlbW9iaWxlL3Bob25lZ2FwLXBsdWdpbi1wdXNoKS5cbiAqXG4gKiBGb3IgVHlwZVNjcmlwdCB1c2Vycywgc2VlIHRoZSBbUHVzaCBwbHVnaW4gZG9jcyBhYm91dCB1c2luZyBUeXBlU2NyaXB0IGZvciBjdXN0b20gbm90aWZpY2F0aW9uc10oaHR0cHM6Ly9naXRodWIuY29tL21vb2RsZW1vYmlsZS9waG9uZWdhcC1wbHVnaW4tcHVzaC9ibG9iL21hc3Rlci9kb2NzL1RZUEVTQ1JJUFQubWQpLlxuICpcbiAqIEB1c2FnZVxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgUHVzaCwgUHVzaE9iamVjdCwgUHVzaE9wdGlvbnMgfSBmcm9tICdAbW9vZGxlaHEvcHVzaC9uZ3gnO1xuICpcbiAqIGNvbnN0cnVjdG9yKHByaXZhdGUgcHVzaDogUHVzaCkgeyB9XG4gKlxuICogLi4uXG4gKlxuICpcbiAqIC8vIHRvIGNoZWNrIGlmIHdlIGhhdmUgcGVybWlzc2lvblxuICogdGhpcy5wdXNoLmhhc1Blcm1pc3Npb24oKVxuICogICAudGhlbigocmVzOiBhbnkpID0+IHtcbiAqXG4gKiAgICAgaWYgKHJlcy5pc0VuYWJsZWQpIHtcbiAqICAgICAgIGNvbnNvbGUubG9nKCdXZSBoYXZlIHBlcm1pc3Npb24gdG8gc2VuZCBwdXNoIG5vdGlmaWNhdGlvbnMnKTtcbiAqICAgICB9IGVsc2Uge1xuICogICAgICAgY29uc29sZS5sb2coJ1dlIGRvIG5vdCBoYXZlIHBlcm1pc3Npb24gdG8gc2VuZCBwdXNoIG5vdGlmaWNhdGlvbnMnKTtcbiAqICAgICB9XG4gKlxuICogICB9KTtcbiAqXG4gKiAvLyBDcmVhdGUgYSBjaGFubmVsIChBbmRyb2lkIE8gYW5kIGFib3ZlKS4gWW91J2xsIG5lZWQgdG8gcHJvdmlkZSB0aGUgaWQsIGRlc2NyaXB0aW9uIGFuZCBpbXBvcnRhbmNlIHByb3BlcnRpZXMuXG4gKiB0aGlzLnB1c2guY3JlYXRlQ2hhbm5lbCh7XG4gKiAgaWQ6IFwidGVzdGNoYW5uZWwxXCIsXG4gKiAgZGVzY3JpcHRpb246IFwiTXkgZmlyc3QgdGVzdCBjaGFubmVsXCIsXG4gKiAgLy8gVGhlIGltcG9ydGFuY2UgcHJvcGVydHkgZ29lcyBmcm9tIDEgPSBMb3dlc3QsIDIgPSBMb3csIDMgPSBOb3JtYWwsIDQgPSBIaWdoIGFuZCA1ID0gSGlnaGVzdC5cbiAqICBpbXBvcnRhbmNlOiAzLFxuICogIC8vYmFkZ2UgaXMgdXNlZCB0byBpZiBiYWRnZSBhcHBlYXJzIG9uIHRoZSBhcHAgaWNvbiBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2FuZHJvaWQvYXBwL05vdGlmaWNhdGlvbkNoYW5uZWwuaHRtbCNzZXRTaG93QmFkZ2UoYm9vbGVhbikuXG4gKiAgLy9mYWxzZSA9IG5vIGJhZGdlIG9uIGFwcCBpY29uLlxuICogIC8vdHJ1ZSA9IGJhZGdlIG9uIGFwcCBpY29uXG4gKiAgYmFkZ2U6IGZhbHNlXG4gKiB9KS50aGVuKCgpID0+IGNvbnNvbGUubG9nKCdDaGFubmVsIGNyZWF0ZWQnKSk7XG4gKlxuICogLy8gRGVsZXRlIGEgY2hhbm5lbCAoQW5kcm9pZCBPIGFuZCBhYm92ZSlcbiAqIHRoaXMucHVzaC5kZWxldGVDaGFubmVsKCd0ZXN0Y2hhbm5lbDEnKS50aGVuKCgpID0+IGNvbnNvbGUubG9nKCdDaGFubmVsIGRlbGV0ZWQnKSk7XG4gKlxuICogLy8gUmV0dXJuIGEgbGlzdCBvZiBjdXJyZW50bHkgY29uZmlndXJlZCBjaGFubmVsc1xuICogdGhpcy5wdXNoLmxpc3RDaGFubmVscygpLnRoZW4oKGNoYW5uZWxzKSA9PiBjb25zb2xlLmxvZygnTGlzdCBvZiBjaGFubmVscycsIGNoYW5uZWxzKSlcbiAqXG4gKiAvLyB0byBpbml0aWFsaXplIHB1c2ggbm90aWZpY2F0aW9uc1xuICpcbiAqIGNvbnN0IG9wdGlvbnM6IFB1c2hPcHRpb25zID0ge1xuICogICAgYW5kcm9pZDoge30sXG4gKiAgICBpb3M6IHtcbiAqICAgICAgICBhbGVydDogJ3RydWUnLFxuICogICAgICAgIGJhZGdlOiB0cnVlLFxuICogICAgICAgIHNvdW5kOiAnZmFsc2UnXG4gKiAgICB9LFxuICogICAgd2luZG93czoge30sXG4gKiAgICBicm93c2VyOiB7XG4gKiAgICAgICAgcHVzaFNlcnZpY2VVUkw6ICdodHRwOi8vcHVzaC5hcGkucGhvbmVnYXAuY29tL3YxL3B1c2gnXG4gKiAgICB9XG4gKiB9XG4gKlxuICogY29uc3QgcHVzaE9iamVjdDogUHVzaE9iamVjdCA9IHRoaXMucHVzaC5pbml0KG9wdGlvbnMpO1xuICpcbiAqXG4gKiBwdXNoT2JqZWN0Lm9uKCdub3RpZmljYXRpb24nKS5zdWJzY3JpYmUoKG5vdGlmaWNhdGlvbjogYW55KSA9PiBjb25zb2xlLmxvZygnUmVjZWl2ZWQgYSBub3RpZmljYXRpb24nLCBub3RpZmljYXRpb24pKTtcbiAqXG4gKiBwdXNoT2JqZWN0Lm9uKCdyZWdpc3RyYXRpb24nKS5zdWJzY3JpYmUoKHJlZ2lzdHJhdGlvbjogYW55KSA9PiBjb25zb2xlLmxvZygnRGV2aWNlIHJlZ2lzdGVyZWQnLCByZWdpc3RyYXRpb24pKTtcbiAqXG4gKiBwdXNoT2JqZWN0Lm9uKCdlcnJvcicpLnN1YnNjcmliZShlcnJvciA9PiBjb25zb2xlLmVycm9yKCdFcnJvciB3aXRoIFB1c2ggcGx1Z2luJywgZXJyb3IpKTtcbiAqXG4gKlxuICogYGBgXG4gKlxuICogQGludGVyZmFjZXNcbiAqIFJlZ2lzdHJhdGlvbkV2ZW50UmVzcG9uc2VcbiAqIE5vdGlmaWNhdGlvbkV2ZW50UmVzcG9uc2VcbiAqIE5vdGlmaWNhdGlvbkV2ZW50QWRkaXRpb25hbERhdGFcbiAqIElPU1B1c2hPcHRpb25zXG4gKiBBbmRyb2lkUHVzaE9wdGlvbnNcbiAqIEJyb3dzZXJQdXNoT3B0aW9uc1xuICogUHVzaE9wdGlvbnNcbiAqL1xuQFBsdWdpbih7XG4gIHBsdWdpbk5hbWU6ICdQdXNoJyxcbiAgcGx1Z2luOiAncGhvbmVnYXAtcGx1Z2luLXB1c2gnLFxuICBwbHVnaW5SZWY6ICdQdXNoTm90aWZpY2F0aW9uJyxcbiAgcmVwbzogJ2h0dHBzOi8vZ2l0aHViLmNvbS9tb29kbGVtb2JpbGUvcGhvbmVnYXAtcGx1Z2luLXB1c2gnLFxuICBpbnN0YWxsOiAnaW9uaWMgY29yZG92YSBwbHVnaW4gYWRkIHBob25lZ2FwLXBsdWdpbi1wdXNoJyxcbiAgcGxhdGZvcm1zOiBbJ0FuZHJvaWQnLCAnQnJvd3NlcicsICdpT1MnLCAnV2luZG93cyddLFxufSlcbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBQdXNoIGV4dGVuZHMgSW9uaWNOYXRpdmVQbHVnaW4ge1xuICAvKipcbiAgICogSW5pdCBwdXNoIG5vdGlmaWNhdGlvbnNcbiAgICogQHBhcmFtIG9wdGlvbnMge1B1c2hPcHRpb25zfVxuICAgKiBAcmV0dXJuIHtQdXNoT2JqZWN0fVxuICAgKi9cbiAgaW5pdChvcHRpb25zOiBQdXNoT3B0aW9ucyk6IFB1c2hPYmplY3Qge1xuICAgIHJldHVybiBuZXcgUHVzaE9iamVjdChvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB3aGV0aGVyIHRoZSBwdXNoIG5vdGlmaWNhdGlvbiBwZXJtaXNzaW9uIGhhcyBiZWVuIGdyYW50ZWQuXG4gICAqIEByZXR1cm4ge1Byb21pc2U8e2lzRW5hYmxlZDogYm9vbGVhbn0+fSBSZXR1cm5zIGEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggYW4gb2JqZWN0IHdpdGggb25lIHByb3BlcnR5OiBpc0VuYWJsZWQsIGEgYm9vbGVhbiB0aGF0IGluZGljYXRlcyBpZiBwZXJtaXNzaW9uIGhhcyBiZWVuIGdyYW50ZWQuXG4gICAqL1xuICBAQ29yZG92YSgpXG4gIGhhc1Blcm1pc3Npb24oKTogUHJvbWlzZTx7IGlzRW5hYmxlZDogYm9vbGVhbiB9PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBub3RpZmljYXRpb24gY2hhbm5lbCBmb3IgQW5kcm9pZCBPIGFuZCBhYm92ZS5cbiAgICogQHBhcmFtIGNoYW5uZWwge0NoYW5uZWx9XG4gICAqL1xuICBAQ29yZG92YSh7XG4gICAgY2FsbGJhY2tPcmRlcjogJ3JldmVyc2UnLFxuICB9KVxuICBjcmVhdGVDaGFubmVsKGNoYW5uZWw/OiBDaGFubmVsKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlIGEgbm90aWZpY2F0aW9uIGNoYW5uZWwgZm9yIEFuZHJvaWQgTyBhbmQgYWJvdmUuXG4gICAqIEBwYXJhbSBpZCB7c3RyaW5nfVxuICAgKi9cbiAgQENvcmRvdmEoe1xuICAgIGNhbGxiYWNrT3JkZXI6ICdyZXZlcnNlJyxcbiAgfSlcbiAgZGVsZXRlQ2hhbm5lbChpZD86IHN0cmluZyk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBsaXN0IG9mIGN1cnJlbnRseSBjb25maWd1cmVkIGNoYW5uZWxzLlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPENoYW5uZWxbXT59XG4gICAqL1xuICBAQ29yZG92YSgpXG4gIGxpc3RDaGFubmVscygpOiBQcm9taXNlPENoYW5uZWxbXT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgZ2V0UHVibGljS2V5IG1ldGhvZCBpcyB1c2VkIHRvIHJldHJpZXZlIHguNTA5IHB1YmxpYyBrZXkgZnJvbSB0aGUgZGV2aWNlIGtleWNoYWluLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxzdHJpbmc+fVxuICAgKi9cbiAgQENvcmRvdmEoKVxuICBnZXRQdWJsaWNLZXkoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm47XG4gIH1cbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbkBQbHVnaW4oe1xuICBwbHVnaW5OYW1lOiAnUHVzaCcsXG4gIHBsdWdpbjogJ3Bob25lZ2FwLXBsdWdpbi1wdXNoJyxcbiAgcGx1Z2luUmVmOiAnUHVzaE5vdGlmaWNhdGlvbicsXG59KVxuZXhwb3J0IGNsYXNzIFB1c2hPYmplY3Qge1xuICBwcml2YXRlIF9vYmplY3RJbnN0YW5jZTogYW55O1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IFB1c2hPcHRpb25zKSB7XG4gICAgaWYgKGNoZWNrQXZhaWxhYmlsaXR5KCdQdXNoTm90aWZpY2F0aW9uJywgJ2luaXQnLCAnUHVzaE5vdGlmaWNhdGlvbicpID09PSB0cnVlKSB7XG4gICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdGhpcy5fb2JqZWN0SW5zdGFuY2UgPSB3aW5kb3cuUHVzaE5vdGlmaWNhdGlvbi5pbml0KG9wdGlvbnMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGFuIGV2ZW50IGxpc3RlbmVyXG4gICAqIEBwYXJhbSBldmVudCB7c3RyaW5nfVxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPEV2ZW50UmVzcG9uc2U+fVxuICAgKi9cbiAgQENvcmRvdmFJbnN0YW5jZSh7XG4gICAgb2JzZXJ2YWJsZTogdHJ1ZSxcbiAgICBjbGVhckZ1bmN0aW9uOiAnb2ZmJyxcbiAgICBjbGVhcldpdGhBcmdzOiB0cnVlLFxuICB9KVxuICBvbihldmVudDogUHVzaEV2ZW50KTogT2JzZXJ2YWJsZTxFdmVudFJlc3BvbnNlPiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSB1bnJlZ2lzdGVyIG1ldGhvZCBpcyB1c2VkIHdoZW4gdGhlIGFwcGxpY2F0aW9uIG5vIGxvbmdlciB3YW50cyB0byByZWNlaXZlIHB1c2ggbm90aWZpY2F0aW9ucy5cbiAgICogQmV3YXJlIHRoYXQgdGhpcyBjbGVhbnMgdXAgYWxsIGV2ZW50IGhhbmRsZXJzIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCxcbiAgICogc28geW91IHdpbGwgbmVlZCB0byByZS1yZWdpc3RlciB0aGVtIGlmIHlvdSB3YW50IHRoZW0gdG8gZnVuY3Rpb24gYWdhaW4gd2l0aG91dCBhbiBhcHBsaWNhdGlvbiByZWxvYWQuXG4gICAqL1xuICBAQ29yZG92YUluc3RhbmNlKClcbiAgdW5yZWdpc3RlcigpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGJhZGdlIGNvdW50IHZpc2libGUgd2hlbiB0aGUgYXBwIGlzIG5vdCBydW5uaW5nXG4gICAqXG4gICAqIFRoZSBjb3VudCBpcyBhbiBpbnRlZ2VyIGluZGljYXRpbmcgd2hhdCBudW1iZXIgc2hvdWxkIHNob3cgdXAgaW4gdGhlIGJhZGdlLlxuICAgKiBQYXNzaW5nIDAgd2lsbCBjbGVhciB0aGUgYmFkZ2UuXG4gICAqIEVhY2ggbm90aWZpY2F0aW9uIGV2ZW50IGNvbnRhaW5zIGEgZGF0YS5jb3VudCB2YWx1ZSB3aGljaCBjYW4gYmUgdXNlZCB0byBzZXQgdGhlIGJhZGdlIHRvIGNvcnJlY3QgbnVtYmVyLlxuICAgKiBAcGFyYW0gY291bnRcbiAgICovXG4gIEBDb3Jkb3ZhSW5zdGFuY2Uoe1xuICAgIGNhbGxiYWNrT3JkZXI6ICdyZXZlcnNlJyxcbiAgfSlcbiAgc2V0QXBwbGljYXRpb25JY29uQmFkZ2VOdW1iZXIoY291bnQ/OiBudW1iZXIpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuICAvKipcbiAgICogR2V0IHRoZSBjdXJyZW50IGJhZGdlIGNvdW50IHZpc2libGUgd2hlbiB0aGUgYXBwIGlzIG5vdCBydW5uaW5nXG4gICAqIHN1Y2Nlc3NIYW5kbGVyIGdldHMgY2FsbGVkIHdpdGggYW4gaW50ZWdlciB3aGljaCBpcyB0aGUgY3VycmVudCBiYWRnZSBjb3VudFxuICAgKi9cbiAgQENvcmRvdmFJbnN0YW5jZSgpXG4gIGdldEFwcGxpY2F0aW9uSWNvbkJhZGdlTnVtYmVyKCk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIGlPUyBvbmx5XG4gICAqIFRlbGxzIHRoZSBPUyB0aGF0IHlvdSBhcmUgZG9uZSBwcm9jZXNzaW5nIGEgYmFja2dyb3VuZCBwdXNoIG5vdGlmaWNhdGlvbi5cbiAgICogc3VjY2Vzc0hhbmRsZXIgZ2V0cyBjYWxsZWQgd2hlbiBiYWNrZ3JvdW5kIHB1c2ggcHJvY2Vzc2luZyBpcyBzdWNjZXNzZnVsbHkgY29tcGxldGVkLlxuICAgKiBAcGFyYW0gW2lkXVxuICAgKi9cbiAgQENvcmRvdmFJbnN0YW5jZSh7XG4gICAgY2FsbGJhY2tPcmRlcjogJ3JldmVyc2UnLFxuICB9KVxuICBmaW5pc2goaWQ/OiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBUZWxscyB0aGUgT1MgdG8gY2xlYXIgYWxsIG5vdGlmaWNhdGlvbnMgZnJvbSB0aGUgTm90aWZpY2F0aW9uIENlbnRlclxuICAgKi9cbiAgQENvcmRvdmFJbnN0YW5jZSgpXG4gIGNsZWFyQWxsTm90aWZpY2F0aW9ucygpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgc3Vic2NyaWJlIG1ldGhvZCBpcyB1c2VkIHdoZW4gdGhlIGFwcGxpY2F0aW9uIHdhbnRzIHRvIHN1YnNjcmliZSBhIG5ldyB0b3BpYyB0byByZWNlaXZlIHB1c2ggbm90aWZpY2F0aW9ucy5cbiAgICogQHBhcmFtIHRvcGljIHtzdHJpbmd9IFRvcGljIHRvIHN1YnNjcmliZSB0by5cbiAgICogQHJldHVybiB7UHJvbWlzZTxhbnk+fVxuICAgKi9cbiAgQENvcmRvdmFJbnN0YW5jZSgpXG4gIHN1YnNjcmliZSh0b3BpYzogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogVGhlIHVuc3Vic2NyaWJlIG1ldGhvZCBpcyB1c2VkIHdoZW4gdGhlIGFwcGxpY2F0aW9uIG5vIGxvbmdlciB3YW50cyB0byByZWNlaXZlIHB1c2ggbm90aWZpY2F0aW9ucyBmcm9tIGEgc3BlY2lmaWMgdG9waWMgYnV0IGNvbnRpbnVlIHRvIHJlY2VpdmUgb3RoZXIgcHVzaCBtZXNzYWdlcy5cbiAgICogQHBhcmFtIHRvcGljIHtzdHJpbmd9IFRvcGljIHRvIHVuc3Vic2NyaWJlIGZyb20uXG4gICAqIEByZXR1cm4ge1Byb21pc2U8YW55Pn1cbiAgICovXG4gIEBDb3Jkb3ZhSW5zdGFuY2UoKVxuICB1bnN1YnNjcmliZSh0b3BpYzogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cbn1cbiJdfQ==