Socket
Socket
Sign inDemoInstall

@awesome-cordova-plugins/wifi-wizard-2

Package Overview
Dependencies
Maintainers
1
Versions
32
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@awesome-cordova-plugins/wifi-wizard-2 - npm Package Compare versions

Comparing version 6.0.0-alpha.4 to 6.0.0

32

ngx/bundle.js
'use strict';
Object.defineProperty(exports, '__esModule', { value: true });
var tslib = require('tslib');
var core$1 = require('@angular/core');
var i0 = require('@angular/core');
var core = require('@awesome-cordova-plugins/core');
function _interopNamespaceDefault(e) {
var n = Object.create(null);
if (e) {
Object.keys(e).forEach(function (k) {
if (k !== 'default') {
var d = Object.getOwnPropertyDescriptor(e, k);
Object.defineProperty(n, k, d.get ? d : {
enumerable: true,
get: function () { return e[k]; }
});
}
});
}
n.default = e;
return Object.freeze(n);
}
var i0__namespace = /*#__PURE__*/_interopNamespaceDefault(i0);
var WifiWizard2 = /** @class */ (function (_super) {

@@ -50,2 +67,4 @@ tslib.__extends(WifiWizard2, _super);

WifiWizard2.prototype.timeout = function (delay) { return core.cordovaFunctionOverride(this, "timeout", {}, arguments); };
WifiWizard2.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: WifiWizard2, deps: null, target: i0__namespace.ɵɵFactoryTarget.Injectable });
WifiWizard2.ɵprov = i0__namespace.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: WifiWizard2 });
WifiWizard2.pluginName = "WifiWizard2";

@@ -56,8 +75,9 @@ WifiWizard2.plugin = "cordova-plugin-wifiwizard2";

WifiWizard2.platforms = ["Android", "iOS"];
WifiWizard2.decorators = [
{ type: core$1.Injectable }
];
WifiWizard2 = tslib.__decorate([], WifiWizard2);
return WifiWizard2;
}(core.AwesomeCordovaNativePlugin));
i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: WifiWizard2, decorators: [{
type: i0.Injectable
}], propDecorators: { iOSConnectNetwork: [], iOSDisconnectNetwork: [], add: [], remove: [], connect: [], disconnect: [], enable: [], disable: [], reassociate: [], reconnect: [], listNetworks: [], scan: [], startScan: [], getScanResults: [], isWifiEnabled: [], setWifiEnabled: [], enableWifi: [], disableWifi: [], resetBindAll: [], setBindAll: [], getWifiRouterIP: [], getWifiIP: [], getWifiIPInfo: [], getSSIDNetworkID: [], getConnectedNetworkID: [], getConnectedSSID: [], getConnectedBSSID: [], isConnectedToInternet: [], canPingWifiRouter: [], canConnectToRouter: [], canConnectToInternet: [], requestPermission: [], formatWifiConfig: [], formatWPAConfig: [], formatWifiString: [], timeout: [] } });
exports.WifiWizard2 = WifiWizard2;

14

ngx/index.js

@@ -1,4 +0,5 @@

import { __extends } from "tslib";
import { __decorate, __extends } from "tslib";
import { Injectable } from '@angular/core';
import { AwesomeCordovaNativePlugin, cordovaFunctionOverride, cordova } from '@awesome-cordova-plugins/core';
import * as i0 from "@angular/core";
var WifiWizard2 = /** @class */ (function (_super) {

@@ -45,2 +46,4 @@ __extends(WifiWizard2, _super);

WifiWizard2.prototype.timeout = function (delay) { return cordovaFunctionOverride(this, "timeout", {}, arguments); };
WifiWizard2.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: WifiWizard2, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
WifiWizard2.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: WifiWizard2 });
WifiWizard2.pluginName = "WifiWizard2";

@@ -51,8 +54,9 @@ WifiWizard2.plugin = "cordova-plugin-wifiwizard2";

WifiWizard2.platforms = ["Android", "iOS"];
WifiWizard2.decorators = [
{ type: Injectable }
];
WifiWizard2 = __decorate([], WifiWizard2);
return WifiWizard2;
}(AwesomeCordovaNativePlugin));
export { WifiWizard2 };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvQGF3ZXNvbWUtY29yZG92YS1wbHVnaW5zL3BsdWdpbnMvd2lmaS13aXphcmQtMi9uZ3gvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxnRUFBd0UsTUFBTSwrQkFBK0IsQ0FBQzs7SUFvYnBGLCtCQUEwQjs7OztJQVl6RCx1Q0FBaUIsYUFBQyxJQUFZLEVBQUUsWUFBb0I7SUFjcEQsMENBQW9CLGFBQUMsSUFBWTtJQWFqQyx5QkFBRyxhQUFDLFVBQXNCO0lBYTFCLDRCQUFNLGFBQUMsSUFBcUI7SUFvQjVCLDZCQUFPLGFBQUMsSUFBcUIsRUFBRSxPQUFpQixFQUFFLFFBQWlCLEVBQUUsU0FBa0I7SUFpQnZGLGdDQUFVLGFBQUMsSUFBcUI7SUFnQmhDLDRCQUFNLGFBQUMsSUFBcUIsRUFBRSxPQUFpQixFQUFFLGlCQUEyQjtJQWM1RSw2QkFBTyxhQUFDLElBQXFCO0lBYTdCLGlDQUFXO0lBYVgsK0JBQVM7SUFZVCxrQ0FBWTtJQWFaLDBCQUFJLGFBQUMsT0FBeUI7SUFZOUIsK0JBQVM7SUFhVCxvQ0FBYyxhQUFDLE9BQStCO0lBWTlDLG1DQUFhO0lBY2Isb0NBQWMsYUFBQyxPQUFnQjtJQWEvQixnQ0FBVTtJQWFWLGlDQUFXO0lBWVgsa0NBQVk7SUFZWixnQ0FBVTtJQVlWLHFDQUFlO0lBWWYsK0JBQVM7SUFjVCxtQ0FBYTtJQWFiLHNDQUFnQixhQUFDLElBQXFCO0lBWXRDLDJDQUFxQjtJQVlyQixzQ0FBZ0I7SUFZaEIsdUNBQWlCO0lBWWpCLDJDQUFxQjtJQVlyQix1Q0FBaUI7SUFZakIsd0NBQWtCO0lBWWxCLDBDQUFvQjtJQWVwQix1Q0FBaUI7SUFjakIsc0NBQWdCLGFBQ2QsSUFBcUIsRUFDckIsUUFBZ0IsRUFDaEIsU0FBaUIsRUFDakIsWUFBcUI7SUFjdkIscUNBQWUsYUFBQyxJQUFxQixFQUFFLFFBQWdCLEVBQUUsWUFBcUI7SUFXOUUsc0NBQWdCLGFBQUMsSUFBcUI7SUFVdEMsNkJBQU8sYUFBQyxLQUFjOzs7Ozs7O2dCQTNkdkIsVUFBVTs7c0JBcGJYO0VBcWJpQywwQkFBMEI7U0FBOUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvcmRvdmEsIENvcmRvdmFGdW5jdGlvbk92ZXJyaWRlLCBBd2Vzb21lQ29yZG92YU5hdGl2ZVBsdWdpbiwgUGx1Z2luIH0gZnJvbSAnQGF3ZXNvbWUtY29yZG92YS1wbHVnaW5zL2NvcmUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFdpZmlDb25maWcge1xuICBTU0lEOiBzdHJpbmc7XG4gIGlzSGlkZGVuU1NJRDogYm9vbGVhbjtcbiAgYXV0aDoge1xuICAgIGFsZ29yaXRobTogc3RyaW5nO1xuICAgIHBhc3N3b3JkPzogc3RyaW5nO1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFdpZmlTY2FuUmVzdWx0c09wdGlvbnMge1xuICBudW1MZXZlbHM6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBXaWZpU2Nhbk9wdGlvbnMgZXh0ZW5kcyBXaWZpU2NhblJlc3VsdHNPcHRpb25zIHtcbiAgW2tleTogc3RyaW5nXTogYW55O1xufVxuXG4vKipcbiAqIEBuYW1lIFdpZmlXaXphcmQyXG4gKiBAZGVzY3JpcHRpb25cbiAqIFdpZmlXaXphcmQyIGVuYWJsZXMgV2lmaSBtYW5hZ2VtZW50IGZvciBib3RoIEFuZHJvaWQgYW5kIGlPUyBhcHBsaWNhdGlvbnMgd2l0aGluIENvcmRvdmEvUGhvbmVnYXAgcHJvamVjdHMuXG4gKlxuICogVGhpcyBwcm9qZWN0IGlzIGEgZm9yayBvZiB0aGUgV2lmaVdpemFyZCBwbHVnaW4gd2l0aCBmaXhlcyBhbmQgdXBkYXRlcywgYXMgd2VsbCBhcyBwYXRjaGVzIHRha2VuIGZyb20gdGhlIENvcmRvdmEgTmV0d29yayBNYW5hZ2VyIHBsdWdpbi5cbiAqIEB1c2FnZVxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgV2lmaVdpemFyZDIgfSBmcm9tICdAYXdlc29tZS1jb3Jkb3ZhLXBsdWdpbnMvd2lmaS13aXphcmQtMi9uZ3gnO1xuICpcbiAqXG4gKiBjb25zdHJ1Y3Rvcihwcml2YXRlIHdpZmlXaXphcmQyOiBXaWZpV2l6YXJkMikgeyB9XG4gKlxuICpcbiAqICMgR2xvYmFsIEZ1bmN0aW9uc1xuICogIFRoZXNlIGFyZSBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgdXNlZCBieSBib3RoIEFuZHJvaWQgYW5kIGlPUyBhcHBsaWNhdGlvbnNcbiAqICBgYGB0eXBlc2NyaXB0XG4gKiAgdGhpcy53aWZpV2l6YXJkMi5nZXRDb25uZWN0ZWRTU0lEKClcbiAqICBgYGBcbiAqICAtIFJldHVybnMgY29ubmVjdGVkIG5ldHdvcmsgU1NJRCAob25seSBpZiBjb25uZWN0ZWQpIGluIHN1Y2Nlc3MgY2FsbGJhY2ssIG90aGVyd2lzZSBmYWlsIGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIChpZiBub3QgY29ubmVjdGVkIG9yIHVuYWJsZSB0byByZXRyaWV2ZSlcbiAqICAtIFRoaXMgZG9lcyAqKk5PVCoqIHJldHVybiB0aGUgQlNTSUQgaWYgdW5hYmxlIHRvIG9idGFpbiBTU0lEIChsaWtlIG9yaWdpbmFsIFdpZmlXaXphcmQgZGlkKVxuICogIGBgYHR5cGVzY3JpcHRcbiAqICB0aGlzLndpZmlXaXphcmQyLmdldENvbm5lY3RlZEJTU0lEKClcbiAqICBgYGBcbiAqICAtIFNhbWUgYXMgYWJvdmUsIGV4Y2VwdCBCU1NJRCAobWFjKSBpcyByZXR1cm5lZFxuICpcbiAqICBgYGB0eXBlc2NyaXB0XG4gKiAgdGhpcy53aWZpV2l6YXJkMi50aW1lb3V0KGRlbGF5KVxuICogIGBgYFxuICogIC0gYGRlbGF5YCBzaG91bGQgYmUgdGltZSBpbiBtaWxsaXNlY29uZHMgdG8gZGVsYXlcbiAqICAtIEhlbHBlciBhc3luYyB0aW1lb3V0IGRlbGF5LCBgZGVsYXlgIGlzIG9wdGlvbmFsLCBkZWZhdWx0IGlzIDIwMDBtcyA9IDIgc2Vjb25kc1xuICogIC0gVGhpcyBtZXRob2QgYWx3YXlzIHJldHVybnMgYSByZXNvbHZlZCBwcm9taXNlIGFmdGVyIHRoZSBkZWxheSwgaXQgd2lsbCBuZXZlciByZWplY3Qgb3IgdGhyb3cgYW4gZXJyb3JcbiAqXG4gKiAgRXhhbXBsZSBpbnNpZGUgYXN5bmMgZnVuY3Rpb24qKlxuICogIGBgYHR5cGVzY3JpcHRcbiAqICBhc3luYyBmdW5jdGlvbiBleGFtcGxlKCl7XG4gKiAgICAgYXdhaXQgdGhpcy53aWZpV2l6YXJkMi50aW1lb3V0KDQwMDApO1xuICogICAgIC8vIGRvIHNvbWV0aGluZyBhZnRlciA0IHNlY29uZHNcbiAqIH1cbiAqICBgYGBcbiAqXG4gKiAgRXhhbXBsZSBpbnNpZGUgc3RhbmRhcmQgbm9uLWFzeW5jIGZ1bmN0aW9uKipcbiAqICBgYGB0eXBlc2NyaXB0XG4gKiAgZnVuY3Rpb24gZXhhbXBsZSgpe1xuICogICAgIHRoaXMud2lmaVdpemFyZDIudGltZW91dCg0MDAwKS50aGVuKCBmdW5jdGlvbigpe1xuICogICAgICAgICAvLyBkbyBzb21ldGhpbmcgYWZ0ZXIgd2FpdGluZyA0IHNlY29uZHNcbiAqICAgICB9KTpcbiAqIH1cbiAqICBgYGBcbiAqXG4gKiAgVGhyb3duIEVycm9ycyoqXG4gKlxuICogIC0gYFRJTUVPVVRfV0FJVElOR19GT1JfU0NBTmAgb24gdGltZW91dCB3YWl0aW5nIGZvciBzY2FuIDEwIHNlY29uZHMgK1xuICogIC0gYFNDQU5fRkFJTEVEYCBpZiB1bmFibGUgdG8gc3RhcnQgc2NhblxuICpcbiAqICAjIGlPUyBGdW5jdGlvbnNcbiAqICBGb3IgZnVuY3Rpb25hbGl0eSwgeW91IG5lZWQgdG8gbm90ZSB0aGUgZm9sbG93aW5nOlxuICogIC0gQ29ubmVjdC9EaXNjb25uZWN0IG9ubHkgd29ya3MgZm9yIGlPUzExK1xuICogIC0gQ2FuJ3QgcnVuIGluIHRoZSBzaW11bGF0b3Igc28geW91IG5lZWQgdG8gYXR0YWNoIGFuIGFjdHVhbCBkZXZpY2Ugd2hlbiBidWlsZGluZyB3aXRoIHhDb2RlXG4gKiAgLSBXaWxsIGVuc3VyZSAnSG90c3BvdENvbmZpZ3VyYXRpb24nIGFuZCAnTmV0d29ya0V4dGVuc2lvbnMnIGNhcGFiaWxpdGllcyBhcmUgYWRkZWQgdG8geW91ciB4Q29kZSBwcm9qZWN0XG4gKiAgLSBUbyBjb25uZWN0IHRvIG9wZW4gbmV0d29yayBvbWl0IGBzc2lkUGFzc3dvcmRgIG9yIGNhbGwgd2l0aCBgZmFsc2VgXG4gKlxuICogIGBgYHR5cGVzY3JpcHRcbiAqICB0aGlzLndpZmlXaXphcmQyLmlPU0Nvbm5lY3ROZXR3b3JrKHNzaWQsIHNzaWRQYXNzd29yZClcbiAqICBgYGBcbiAqICBgYGB0eXBlc2NyaXB0XG4gKiAgdGhpcy53aWZpV2l6YXJkMi5pT1NEaXNjb25uZWN0TmV0d29yayhzc2lkKVxuICogIGBgYFxuICpcbiAqICAjIEFuZHJvaWQgRnVuY3Rpb25zXG4gKiAgLSAqKldpZmlXaXphcmQyKiogKndpbGwgYXV0b21hZ2ljYWxseSB0cnkgdG8gZW5hYmxlIFdpRmkgaWYgaXQncyBkaXNhYmxlZCB3aGVuIGNhbGxpbmcgYW55IGFuZHJvaWQgcmVsYXRlZCBtZXRob2RzIHRoYXQgcmVxdWlyZSBXaUZpIHRvIGJlIGVuYWJsZWQqXG4gKlxuICogICMjIENvbm5lY3QgdnMgRW5hYmxlXG4gKiAgV2hlbiB3cml0aW5nIEFuZHJvaWQgSmF2YSBjb2RlLCB0aGVyZSBpcyBubyBgY29ubmVjdGAgbWV0aG9kcywgeW91IGJhc2ljYWxseSBlaXRoZXIgYGVuYWJsZWAgb3IgYGRpc2FibGVgIGEgbmV0d29yay4gSW4gdGhlIG9yaWdpbmFsIHZlcnNpb25zIG9mIFdpZmlXaXphcmQgdGhlIGBjb25uZWN0YCBtZXRob2Qgd291bGQgYmFzaWNhbGx5IGp1c3QgY2FsbCBgZW5hYmxlYCBpbiBBbmRyb2lkLlxuICogIEkgaGF2ZSBjaGFuZ2VkIHRoZSB3YXkgdGhpcyB3b3JrcyBpbiBXaWZpV2l6YXJkMiB2ZXJzaW9uIDMuMC4wKywgY29udmVydGluZyBpdCB0byBhIGhlbHBlciBtZXRob2QgdG8gZWxpbWluYXRlIGhhdmluZyB0byBjYWxsIGBmb3JtYXRXaWZpQ29uZmlnYCB0aGVuIGBhZGRgIGFuZCB0aGVuIGBlbmFibGVgIC4uLiB0aGUgYGNvbm5lY3RgIG1ldGhvZCB3aWxsIG5vdyBhdXRvbWF0aWNhbGx5IGNhbGwgYGZvcm1hdFdpZmlDb25maWdgLCB0aGVuIGNhbGwgYGFkZGAgdG8gZWl0aGVyIGFkZCBvciB1cGRhdGUgdGhlIG5ldHdvcmsgY29uZmlndXJhdGlvbiwgYW5kIHRoZW4gY2FsbCBgZW5hYmxlYC5cbiAqICBJZiB0aGUgY29ubmVjdCBtZXRob2QgaXMgdW5hYmxlIHRvIHVwZGF0ZSBleGlzdGluZyBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gKGFkZGVkIGJ5IHVzZXIgb3Igb3RoZXIgYXBwcyksIGJ1dCB0aGVyZSBpcyBhIHZhbGlkIG5ldHdvcmsgSUQsIGl0IHdpbGwgc3RpbGwgYXR0ZW1wdCB0byBlbmFibGUgdGhhdCBuZXR3b3JrIElELlxuICpcbiAqICBgYGB0eXBlc2NyaXB0XG4gKiAgdGhpcy53aWZpV2l6YXJkMi5jb25uZWN0KHNzaWQsIGJpbmRBbGwsIHBhc3N3b3JkLCBhbGdvcml0aG0sIGlzSGlkZGVuU1NJRClcbiAqICBgYGBcbiAqICAtIGBzc2lkYCBzaG91bGQgYmUgdGhlIFNTSUQgdG8gY29ubmVjdCB0byAqcmVxdWlyZWQqXG4gKiAgLSBgYmluZEFsbGAgc2hvdWxkIGJlIHNldCB0byBgdHJ1ZWAgdG8gdGVsbCBBbmRyb2lkIHRvIHJvdXRlIGFsbCBjb25uZWN0aW9ucyBmcm9tIHlvdXIgQW5kcm9pZCBhcHAsIHRocm91Z2ggdGhlIHdpZmkgY29ubmVjdGlvbiAoZGVmYXVsdCBpcyBgZmFsc2VgKSAqb3B0aW9uYWwqXG4gKiAgLSBTZWUgYFdpZmlXaXphcmQyLmVuYWJsZWAgZm9yIG1vcmUgZGV0YWlscyByZWdhcmRpbmcgYGJpbmRBbGxgIGZlYXR1cmVcbiAqICAtIGBhbGdvcml0aG1gIGFuZCBgcGFzc3dvcmRgIGlzIG5vdCByZXF1aXJlZCBpZiBjb25uZWN0aW5nIHRvIGFuIG9wZW4gbmV0d29ya1xuICogIC0gQ3VycmVudGx5IGBXUEFgIGFuZCBgV0VQYCBhcmUgb25seSBzdXBwb3J0ZWQgYWxnb3JpdGhtc1xuICogIC0gRm9yIGBXUEEyYCBqdXN0IHBhc3MgYFdQQWAgYXMgdGhlIGFsZ29yaXRobVxuICogIC0gU2V0IGBpc0hpZGRlblNTSURgIHRvIGB0cnVlYCBpZiB0aGUgbmV0d29yayB5b3UncmUgY29ubmVjdGluZyB0byBpcyBoaWRkZW5cbiAqICAtIFRoZXNlIGFyZ3VtZW50cyBhcmUgdGhlIHNhbWUgYXMgZm9yIGBmb3JtYXRXaWZpQ29uZmlnYFxuICogIC0gVGhpcyBtZXRob2QgZXNzZW50aWFsbHkgY2FsbHMgYGZvcm1hdFdpZmlDb25maWdgIHRoZW4gYGFkZGAgdGhlbiBgZW5hYmxlYFxuICogIC0gSWYgdW5hYmxlIHRvIHVwZGF0ZSBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gKHdhcyBhZGRlZCBieSB1c2VyIG9yIG90aGVyIGFwcCksIGJ1dCBhIHZhbGlkIG5ldHdvcmsgSUQgZXhpc3RzLCB0aGlzIG1ldGhvZCB3aWxsIHN0aWxsIGF0dGVtcHQgdG8gZW5hYmxlIHRoZSBuZXR3b3JrXG4gKiAgLSBQcm9taXNlIHdpbGwgbm90IGJlIHJldHVybmVkIHVudGlsIG1ldGhvZCBoYXMgdmVyaWZpZWQgdGhhdCBjb25uZWN0aW9uIHRvIFdpRmkgd2FzIGluIGNvbXBsZXRlZCBzdGF0ZSAod2FpdHMgdXAgdG8gNjAgc2Vjb25kcylcbiAqXG4gKiAgVGhyb3duIEVycm9ycyoqXG4gKlxuICpcbiAqICAtIGBDT05ORUNUX0ZBSUxFRF9USU1FT1VUYCB1bmFibGUgdG8gdmVyaWZ5IGNvbm5lY3Rpb24sIHRpbWVkIG91dCBhZnRlciA2MCBzZWNvbmRzXG4gKiAgLSBgSU5WQUxJRF9ORVRXT1JLX0lEX1RPX0NPTk5FQ1RgIFVuYWJsZSB0byBjb25uZWN0IGJhc2VkIG9uIGdlbmVyYXRlZCB3aWZpIGNvbmZpZ1xuICogIC0gYElOVEVSUFVUX0VYQ0VQVF9XSElMRV9DT05ORUNUSU5HYCBJbnRlcnVwdCBleGNlcHRpb24gd2hpbGUgd2FpdGluZyBmb3IgY29ubmVjdGlvblxuICpcbiAqXG4gKlxuICogICMjIERpc2Nvbm5lY3QgdnMgRGlzYWJsZVxuICogIFNhbWUgYXMgYWJvdmUgZm9yIENvbm5lY3QgdnMgRW5hYmxlLCBleGNlcHQgaW4gdGhpcyBzaXR1YXRpb24sIGBkaXNjb25uZWN0YCB3aWxsIGZpcnN0IGRpc2FibGUgdGhlIG5ldHdvcmssIGFuZCB0aGVuIGF0dGVtcHQgdG8gcmVtb3ZlIGl0IChpZiBTU0lEIGlzIHBhc3NlZClcbiAqXG4gKiAgYGBgdHlwZXNjcmlwdFxuICogIHRoaXMud2lmaVdpemFyZDIuZGlzY29ubmVjdChzc2lkKVxuICogIGBgYFxuICogIC0gYHNzaWRgIGNhbiBlaXRoZXIgYmUgYW4gU1NJRCAoc3RyaW5nKSBvciBhIG5ldHdvcmsgSUQgKGludGVnZXIpXG4gKiAgLSBgc3NpZGAgaXMgKipPUFRJT05BTCoqIC4uIGlmIG5vdCBwYXNzZWQsIHdpbGwgZGlzY29ubmVjdCBjdXJyZW50IFdpRmkgKGFsbW9zdCBhbGwgQW5kcm9pZCB2ZXJzaW9ucyBub3cgd2lsbCBqdXN0IGF1dG9tYXRpY2FsbHkgcmVjb25uZWN0IHRvIGxhc3Qgd2lmaSBhZnRlciBkaXNjb25uZWN0aW5nKVxuICogIC0gSWYgYHNzaWRgIGlzIHByb3ZpZGVkLCB0aGlzIG1ldGhvZCB3aWxsIGZpcnN0IGF0dGVtcHQgdG8gYGRpc2FibGVgIGFuZCB0aGVuIGByZW1vdmVgIHRoZSBuZXR3b3JrXG4gKiAgLSBJZiB5b3UgZG8gbm90IHdhbnQgdG8gcmVtb3ZlIG5ldHdvcmsgY29uZmlndXJhdGlvbiwgdXNlIGBkaXNhYmxlYCBpbnN0ZWFkXG4gKlxuICogIFRocm93biBFcnJvcnMqKlxuICpcbiAqICAtIGBESVNDT05ORUNUX05FVF9SRU1PVkVfRVJST1JgIEFuZHJvaWQgcmV0dXJuZWQgZXJyb3Igd2hlbiByZW1vdmluZyB3aWZpIGNvbmZpZ3VyYXRpb25cbiAqICAtIGBESVNDT05ORUNUX05FVF9ESVNBQkxFX0VSUk9SYCBVbmFibGUgdG8gY29ubmVjdCBiYXNlZCBvbiBnZW5lcmF0ZWQgd2lmaSBjb25maWdcbiAqICAtIGBESVNDT05ORUNUX05FVF9JRF9OT1RfRk9VTkRgIFVuYWJsZSB0byBkZXRlcm1pbmUgbmV0d29yayBJRCB0byBkaXNjb25uZWN0L3JlbW92ZSAoZnJvbSBwYXNzZWQgU1NJRClcbiAqICAtIGBFUlJPUl9ESVNDT05ORUNUYCAtIEFuZHJvaWQgZXJyb3IgZGlzY29ubmVjdGluZyB3aWZpIChvbmx5IHdoZW4gU1NJRCBpcyBub3QgcGFzc2VkKVxuICpcbiAqICBgYGB0eXBlc2NyaXB0XG4gKiAgdGhpcy53aWZpV2l6YXJkMi5mb3JtYXRXaWZpQ29uZmlnKHNzaWQsIHBhc3N3b3JkLCBhbGdvcml0aG0sIGlzSGlkZGVuU1NJRClcbiAqICBgYGBcbiAqICAtIGBhbGdvcml0aG1gIGFuZCBgcGFzc3dvcmRgIGlzIG5vdCByZXF1aXJlZCBpZiBjb25uZWN0aW5nIHRvIGFuIG9wZW4gbmV0d29ya1xuICogIC0gQ3VycmVudGx5IGBXUEFgIGFuZCBgV0VQYCBhcmUgb25seSBzdXBwb3J0ZWQgYWxnb3JpdGhtc1xuICogIC0gRm9yIGBXUEEyYCBqdXN0IHBhc3MgYFdQQWAgYXMgdGhlIGFsZ29yaXRobVxuICogIC0gU2V0IGBpc0hpZGRlblNTSURgIHRvIGB0cnVlYCBpZiB0aGUgbmV0d29yayB5b3UncmUgY29ubmVjdGluZyB0byBpcyBoaWRkZW5cbiAqICBgYGB0eXBlc2NyaXB0XG4gKiAgdGhpcy53aWZpV2l6YXJkMi5mb3JtYXRXUEFDb25maWcoc3NpZCwgcGFzc3dvcmQsIGlzSGlkZGVuU1NJRClcbiAqICBgYGBcbiAqICAtIFRoaXMgaXMganVzdCBhIGhlbHBlciBtZXRob2QgdGhhdCBjYWxscyBgV2lmaVdpemFyZDIuZm9ybWF0V2lmaUNvbmZpZyggc3NpZCwgcGFzc3dvcmQsICdXUEEnLCBpc0hpZGRlblNTSUQgKTtgXG4gKlxuICogIGBgYHR5cGVzY3JpcHRcbiAqICB0aGlzLndpZmlXaXphcmQyLmFkZCh3aWZpKVxuICogIGBgYFxuICogIC0gYHdpZmlgIG11c3QgYmUgYW4gb2JqZWN0IGZvcm1hdHRlZCBieSBgZm9ybWF0V2lmaUNvbmZpZ2AsIHRoaXMgKiptdXN0KiogYmUgZG9uZSBiZWZvcmUgY2FsbGluZyBgZW5hYmxlYFxuICpcbiAqICBUaHJvd24gRXJyb3JzKipcbiAqXG4gKiAgLSBgQVVUSF9UWVBFX05PVF9TVVBQT1JURURgIC0gSW52YWxpZCBhdXRoIHR5cGUgc3BlY2lmaWVkXG4gKiAgLSBgRVJST1JfQURESU5HX05FVFdPUktgIC0gQW5kcm9pZCByZXR1cm5lZCBgLTFgIHNwZWNpZnlpbmcgZXJyb3IgYWRkaW5nIG5ldHdvcmtcbiAqICAtIGBFUlJPUl9VUERBVElOR19ORVRXT1JLYCAtIFNhbWUgYXMgYWJvdmUsIGV4Y2VwdCBhbiBleGlzdGluZyBuZXR3b3JrIElEIHdhcyBmb3VuZCwgYW5kIHVuYWJsZSB0byB1cGRhdGUgaXRcbiAqXG4gKiAgYGBgdHlwZXNjcmlwdFxuICogIHRoaXMud2lmaVdpemFyZDIucmVtb3ZlKHNzaWQpXG4gKiAgYGBgXG4gKiAgLSBgc3NpZGAgY2FuIGVpdGhlciBiZSBhbiBTU0lEIChzdHJpbmcpIG9yIGEgbmV0d29yayBJRCAoaW50ZWdlcilcbiAqICAtIFBsZWFzZSBub3RlLCBtb3N0IG5ld2VyIHZlcnNpb25zIG9mIEFuZHJvaWQgd2lsbCBvbmx5IGFsbG93IHdpZmkgdG8gYmUgcmVtb3ZlZCBpZiBjcmVhdGVkIGJ5IHlvdXIgYXBwbGljYXRpb25cbiAqXG4gKiAgVGhyb3duIEVycm9ycyoqXG4gKlxuICogIC0gYFVOQUJMRV9UT19SRU1PVkVgIEFuZHJvaWQgcmV0dXJuZWQgZmFpbHVyZSBpbiByZW1vdmluZyBuZXR3b3JrXG4gKiAgLSBgUkVNT1ZFX05FVFdPUktfTk9UX0ZPVU5EYCBVbmFibGUgdG8gZGV0ZXJtaW5lIG5ldHdvcmsgSUQgZnJvbSBwYXNzZWQgU1NJRFxuICpcbiAqXG4gKiAgYGBgdHlwZXNjcmlwdFxuICogIHRoaXMud2lmaVdpemFyZDIubGlzdE5ldHdvcmtzKClcbiAqICBgYGBcbiAqXG4gKiAgYGBgdHlwZXNjcmlwdFxuICogIHRoaXMud2lmaVdpemFyZDIuc2Nhbihbb3B0aW9uc10pXG4gKiAgYGBgXG4gKiAgLSBTYW1lIGFzIGNhbGxpbmcgYHN0YXJ0U2NhbmAgYW5kIHRoZW4gYGdldFNjYW5SZXN1bHRzYCwgZXhjZXB0IHRoaXMgbWV0aG9kIHdpbGwgb25seSByZXNvbHZlIHRoZSBwcm9taXNlIGFmdGVyIHRoZSBzY2FuIGNvbXBsZXRlcyBhbmQgcmV0dXJucyB0aGUgcmVzdWx0cy5cbiAqXG4gKiAgYGBgdHlwZXNjcmlwdFxuICogIHRoaXMud2lmaVdpemFyZDIuc3RhcnRTY2FuKClcbiAqICBgYGBcbiAqICAtIEl0IGlzIHJlY29tbWVuZGVkIHRvIGp1c3QgdXNlIHRoZSBgc2NhbmAgbWV0aG9kIGluc3RlYWQgb2YgYHN0YXJ0U2NhbmBcbiAqXG4gKiAgVGhyb3duIEVycm9ycyoqXG4gKlxuICogIC0gYFNUQVJUU0NBTl9GQUlMRURgIEFuZHJvaWQgcmV0dXJuZWQgZmFpbHVyZSBpbiBzdGFydGluZyBzY2FuXG4gKlxuICpcbiAqICBgYGB0eXBlc2NyaXB0XG4gKiAgdGhpcy53aWZpV2l6YXJkMi5nZXRTY2FuUmVzdWx0cyhbb3B0aW9uc10pXG4gKiAgYGBgXG4gKiAgLSBgZ2V0U2NhblJlc3VsdHNgIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBhZnRlciBjYWxsaW5nIGBzdGFydFNjYW5gIChpdCBpcyByZWNvbW1lbmRlZCB0byB1c2UgYHNjYW5gIGluc3RlYWQgYXMgdGhpcyBzdGFydHMgdGhlIHNjYW4sIHRoZW4gcmV0dXJucyB0aGUgcmVzdWx0cylcbiAqICAtIGBbb3B0aW9uc11gIGlzIG9wdGlvbmFsLCBpZiB5b3UgZG8gbm90IHdhbnQgdG8gc3BlY2lmeSwganVzdCBwYXNzIGBzdWNjZXNzYCBjYWxsYmFjayBhcyBmaXJzdCBwYXJhbWV0ZXIsIGFuZCBgZmFpbGAgY2FsbGJhY2sgYXMgc2Vjb25kIHBhcmFtZXRlclxuICogIC0gUmV0cmlldmVzIGEgbGlzdCBvZiB0aGUgYXZhaWxhYmxlIG5ldHdvcmtzIGFzIGFuIGFycmF5IG9mIG9iamVjdHMgYW5kIHBhc3NlcyB0aGVtIHRvIHRoZSBmdW5jdGlvbiBsaXN0SGFuZGxlci4gVGhlIGZvcm1hdCBvZiB0aGUgYXJyYXkgaXM6XG4gKiAgYGBgdHlwZXNjcmlwdFxuICogIG5ldHdvcmtzID0gW1xuICogIHsgICBcImxldmVsXCI6IHNpZ25hbF9sZXZlbCwgLy8gcmF3IFJTU0kgdmFsdWVcbiAqICAgICAgICAgXCJTU0lEXCI6IHNzaWQsIC8vIFNTSUQgYXMgc3RyaW5nLCB3aXRoIGVzY2FwZWQgZG91YmxlIHF1b3RlczogXCJcXFwic3NpZCBuYW1lXFxcIlwiXG4gKiAgICAgICAgIFwiQlNTSURcIjogYnNzaWQgLy8gTUFDIGFkZHJlc3Mgb2YgV2lGaSByb3V0ZXIgYXMgc3RyaW5nXG4gKiAgICAgICAgIFwiZnJlcXVlbmN5XCI6IGZyZXF1ZW5jeSBvZiB0aGUgYWNjZXNzIHBvaW50IGNoYW5uZWwgaW4gTUh6XG4gKiAgICAgICAgIFwiY2FwYWJpbGl0aWVzXCI6IGNhcGFiaWxpdGllcyAvLyBEZXNjcmliZXMgdGhlIGF1dGhlbnRpY2F0aW9uLCBrZXkgbWFuYWdlbWVudCwgYW5kIGVuY3J5cHRpb24gc2NoZW1lcyBzdXBwb3J0ZWQgYnkgdGhlIGFjY2VzcyBwb2ludC5cbiAqICAgICAgICAgXCJ0aW1lc3RhbXBcIjogdGltZXN0YW1wIC8vIHRpbWVzdGFtcCBvZiB3aGVuIHRoZSBzY2FuIHdhcyBjb21wbGV0ZWRcbiAqICAgICAgICAgXCJjaGFubmVsV2lkdGhcIjpcbiAqICAgICAgICAgXCJjZW50ZXJGcmVxMFwiOlxuICogICAgICAgICBcImNlbnRlckZyZXExXCI6XG4gKiAgICAgfVxuICogIF1cbiAqICBgYGBcbiAqICAtIGBjaGFubmVsV2lkdGhgIGBjZW50ZXJGcmVxMGAgYW5kIGBjZW50ZXJGcmVxMWAgYXJlIG9ubHkgc3VwcG9ydGVkIG9uIEFQSSA+IDIzIChNYXJzaG1hbGxvdyksIGFueSBvbGRlciBBUEkgd2lsbCByZXR1cm4gbnVsbCBmb3IgdGhlc2UgdmFsdWVzXG4gKlxuICogIEFuIG9wdGlvbnMgb2JqZWN0IG1heSBiZSBwYXNzZWQuIEN1cnJlbnRseSwgdGhlIG9ubHkgc3VwcG9ydGVkIG9wdGlvbiBpcyBgbnVtTGV2ZWxzYCwgYW5kIGl0IGhhcyB0aGUgZm9sbG93aW5nIGJlaGF2aW9yOlxuICpcbiAqICAtIGlmIGAobiA9PSB0cnVlIHx8IG4gPCAyKWAsIGAqLmdldFNjYW5SZXN1bHRzKHtudW1MZXZlbHM6IG59KWAgd2lsbCByZXR1cm4gZGF0YSBhcyBiZWZvcmUsIHNwbGl0IGluIDUgbGV2ZWxzO1xuICogIC0gaWYgYChuID4gMSlgLCBgKi5nZXRTY2FuUmVzdWx0cyh7bnVtTGV2ZWxzOiBufSlgIHdpbGwgY2FsY3VsYXRlIHRoZSBzaWduYWwgbGV2ZWwsIHNwbGl0IGluIG4gbGV2ZWxzO1xuICogIC0gaWYgYChuID09IGZhbHNlKWAsIGAqLmdldFNjYW5SZXN1bHRzKHtudW1MZXZlbHM6IG59KWAgd2lsbCB1c2UgdGhlIHJhdyBzaWduYWwgbGV2ZWw7XG4gKlxuICogIGBgYHR5cGVzY3JpcHRcbiAqICB0aGlzLndpZmlXaXphcmQyLmlzV2lmaUVuYWJsZWQoKVxuICogIGBgYFxuICogIC0gUmV0dXJucyBib29sZWFuIHZhbHVlIG9mIHdoZXRoZXIgV2lmaSBpcyBlbmFibGVkIG9yIG5vdFxuICogIGBgYHR5cGVzY3JpcHRcbiAqICB0aGlzLndpZmlXaXphcmQyLnNldFdpZmlFbmFibGVkKGVuYWJsZWQpXG4gKiAgYGBgXG4gKiAgLSBQYXNzIGB0cnVlYCBmb3IgYGVuYWJsZWRgIHBhcmFtZXRlciB0byBzZXQgV2lmaSBlbmFibGVkXG4gKiAgLSBZb3UgZG8gbm90IG5lZWQgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIHRvIHNldCBXaUZpIGVuYWJsZWQgdG8gY2FsbCBvdGhlciBtZXRob2RzIHRoYXQgcmVxdWlyZSB3aWZpIGVuYWJsZWQuICBUaGlzIHBsdWdpbiB3aWxsIGF1dG9tYWdpY2FsbHkgZW5hYmxlIFdpRmkgaWYgYSBtZXRob2QgaXMgY2FsbGVkIHRoYXQgcmVxdWlyZXMgV2lGaSB0byBiZSBlbmFibGVkLlxuICpcbiAqICBUaHJvd24gRXJyb3JzKipcbiAqXG4gKiAgLSBgRVJST1JfU0VUV0lGSUVOQUJMRURgIHdpZmkgc3RhdGUgZG9lcyBub3QgbWF0Y2ggY2FsbCAoZW5hYmxlIG9yIGRpc2FibGUpXG4gKlxuICogIGBgYHR5cGVzY3JpcHRcbiAqICB0aGlzLndpZmlXaXphcmQyLmdldENvbm5lY3RlZE5ldHdvcmtJRCgpXG4gKiAgYGBgXG4gKiAgLSBSZXR1cm5zIGN1cnJlbnRseSBjb25uZWN0ZWQgbmV0d29yayBJRCBpbiBzdWNjZXNzIGNhbGxiYWNrIChvbmx5IGlmIGNvbm5lY3RlZCksIG90aGVyd2lzZSBmYWlsIGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkXG4gKlxuICogICoqVGhyb3duIEVycm9ycyoqXG4gKlxuICogIC0gYEdFVF9DT05ORUNURURfTkVUX0lEX0VSUk9SYCBVbmFibGUgdG8gZGV0ZXJtaW5lIGN1cnJlbnRseSBjb25uZWN0ZWQgbmV0d29yayBJRCAobWF5IG5vdCBiZSBjb25uZWN0ZWQpXG4gKlxuICogICMjIE5ldyB0byAzLjEuMStcbiAqICBgYGB0eXBlc2NyaXB0XG4gKiAgdGhpcy53aWZpV2l6YXJkMi5yZXNldEJpbmRBbGwoKVxuICogIGBgYFxuICogIC0gRGlzYWJsZSBiaW5kQWxsIHRvIFdpRmkgbmV0d29yayB3aXRob3V0IGRpc2Nvbm5lY3RpbmcgZnJvbSBXaUZpXG4gKlxuICogIGBgYHR5cGVzY3JpcHRcbiAqICB0aGlzLndpZmlXaXphcmQyLnNldEJpbmRBbGwoKVxuICogIGBgYFxuICogIC0gRW5hYmxlIGJpbmRBbGwgdG8gV2lGaSBuZXR3b3JrIHdpdGhvdXQgZGlzY29ubmVjdGluZyBmcm9tIFdpRmlcbiAqXG4gKiAgYGBgdHlwZXNjcmlwdFxuICogIHRoaXMud2lmaVdpemFyZDIuY2FuQ29ubmVjdFRvSW50ZXJuZXQoKVxuICogIGBgYFxuICpcbiAqICAtIFJldHVybnMgYm9vbGVhbiwgdHJ1ZSBvciBmYWxzZSwgaWYgZGV2aWNlIGlzIGFibGUgdG8gY29ubmVjdCB0byBodHRwczovL3d3dy5nb29nbGUuY29tIHZpYSBIVFRQIGNvbm5lY3Rpb24gKHNpbmNlIHBpbmcgaXMgdW5yZWxpYWJsZSlcbiAqICAtIFVua25vd24gZXJyb3JzIHdpbGwgc3RpbGwgYmUgdGhyb3duIGxpa2UgYWxsIG90aGVyIGFzeW5jIGZ1bmN0aW9uc1xuICogIC0gSWYgeW91IGNhbGxlZCBgY29ubmVjdGAgb3IgYGVuYWJsZWAgYW5kIHBhc3NlZCBgdHJ1ZWAgZm9yIGBiaW5kQWxsYCwgeW91ciBhcHBsaWNhdGlvbiB3aWxsIGZvcmNlIHRoZSBwaW5nIHRocm91Z2ggd2lmaSBjb25uZWN0aW9uLlxuICogIC0gSWYgeW91IGRpZCBub3QgcGFzcyBgdHJ1ZWAgKG9yIHBhc3NlZCBgZmFsc2VgKSBmb3IgYGJpbmRBbGxgLCBhbmQgdGhlIHdpZmkgZG9lcyBub3QgaGF2ZSBpbnRlcm5ldCBjb25uZWN0aW9uLCBBbmRyb2lkIExvbGxpcG9wKyAoQVBJIDIxKykgd2lsbCB1c2UgY2VsbCBjb25uZWN0aW9uIHRvIHBpbmcgKGR1ZSB0byBBbmRyb2lkIHVzaW5nIGNlbGwgY29ubmVjdGlvbiB3aGVuIHdpZmkgZG9lcyBub3QgaGF2ZSBpbnRlcm5ldCkgW01vcmUgRGV0YWlsc10oaHR0cHM6Ly9hbmRyb2lkLWRldmVsb3BlcnMuZ29vZ2xlYmxvZy5jb20vMjAxNi8wNy9jb25uZWN0aW5nLXlvdXItYXBwLXRvLXdpLWZpLWRldmljZS5odG1sKVxuICpcbiAqXG4gKiAgYGBgdHlwZXNjcmlwdFxuICogIHRoaXMud2lmaVdpemFyZDIuY2FuQ29ubmVjdFRvUm91dGVyKClcbiAqICBgYGBcbiAqICAtIEFzIGBjYW5QaW5nV2lmaVJvdXRlcmAgaXMgbm90b3Jpb3VzbHkgdW5yZWxpYWJsZSwgdGhpcyBtZXRob2QgdXNlcyBIVFRQIGNvbm5lY3Rpb24gdG8gdGVzdCBpZiBhYmxlIHRvIGNvbm5lY3QgdG8gcm91dGVyIChhcyBtb3N0IHJvdXRlcnMgc2hvdWxkIGhhdmUgd2ViIHNlcnZlciBydW5uaW5nIG9uIHBvcnQgODApXG4gKiAgLSBVbmtub3duIGVycm9ycyB3aWxsIHN0aWxsIGJlIHRocm93biBsaWtlIGFsbCBvdGhlciBhc3luYyBmdW5jdGlvbnNcbiAqICAtIFRoaXMgaXMgdXNlZnVsIGZvciB0ZXN0aW5nIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdXIgQW5kcm9pZCBhcHAgaXMgYWJsZSB0byBjb25uZWN0IHRvIHRoZSBwcml2YXRlIG5ldHdvcmsgYWZ0ZXIgY29ubmVjdGluZyB0byBXaUZpXG4gKiAgLSBUaGlzIHdhcyBhZGRlZCBmb3IgdGVzdGluZyB0aGUgYGJpbmRBbGxgIGZlYXR1cmUgdG8gc3VwcG9ydCBpc3N1ZXMgd2l0aCBBbmRyb2lkIExvbGxpcG9wKyAoQVBJIDIxKykgbm90IHJvdXRpbmcgY2FsbHMgdGhyb3VnaCBXaUZpIGlmIFdpRmkgZG9lcyBub3QgaGF2ZSBpbnRlcm5ldCBjb25uZWN0aW9uIFtTZWUgQW5kcm9pZCBCbG9nXShodHRwczovL2FuZHJvaWQtZGV2ZWxvcGVycy5nb29nbGVibG9nLmNvbS8yMDE2LzA3L2Nvbm5lY3RpbmcteW91ci1hcHAtdG8td2ktZmktZGV2aWNlLmh0bWwpXG4gKiAgLSBBdHRlbXB0cyB0byBjb25uZWN0IHJvdXRlciBJUCBIVFRQIHNlcnZlciBvbiBwb3J0IDgwIChleGFtcGxlOiBgaHR0cDovLzE5Mi4xNjguMC4xL2Agd2hlcmUgYDE5Mi4xNjguMC4xYCBpcyB0aGUgYXV0b21hdGljYWxseSBkZXRlY3RlZCBJUCBhZGRyZXNzKVxuICpcbiAqICAjIyBOZXcgdG8gMy4wLjArXG4gKiAgYGBgdHlwZXNjcmlwdFxuICogIHRoaXMud2lmaVdpemFyZDIuaXNDb25uZWN0ZWRUb0ludGVybmV0KClcbiAqICBgYGBcbiAqXG4gKiAgLSBSZXR1cm5zIGJvb2xlYW4sIHRydWUgb3IgZmFsc2UsIGlmIGRldmljZSBpcyBhYmxlIHRvIHBpbmcgOC44LjguOFxuICogIC0gVW5rbm93biBlcnJvcnMgd2lsbCBzdGlsbCBiZSB0aHJvd24gbGlrZSBhbGwgb3RoZXIgYXN5bmMgZnVuY3Rpb25zXG4gKiAgLSBJZiB5b3UgY2FsbGVkIGBjb25uZWN0YCBvciBgZW5hYmxlYCBhbmQgcGFzc2VkIGB0cnVlYCBmb3IgYGJpbmRBbGxgLCB5b3VyIGFwcGxpY2F0aW9uIHdpbGwgZm9yY2UgdGhlIHBpbmcgdGhyb3VnaCB3aWZpIGNvbm5lY3Rpb24uXG4gKiAgLSBJZiB5b3UgZGlkIG5vdCBwYXNzIGB0cnVlYCAob3IgcGFzc2VkIGBmYWxzZWApIGZvciBgYmluZEFsbGAsIGFuZCB0aGUgd2lmaSBkb2VzIG5vdCBoYXZlIGludGVybmV0IGNvbm5lY3Rpb24sIEFuZHJvaWQgTG9sbGlwb3ArIChBUEkgMjErKSB3aWxsIHVzZSBjZWxsIGNvbm5lY3Rpb24gdG8gcGluZyAoZHVlIHRvIEFuZHJvaWQgdXNpbmcgY2VsbCBjb25uZWN0aW9uIHdoZW4gd2lmaSBkb2VzIG5vdCBoYXZlIGludGVybmV0KSBbTW9yZSBEZXRhaWxzXShodHRwczovL2FuZHJvaWQtZGV2ZWxvcGVycy5nb29nbGVibG9nLmNvbS8yMDE2LzA3L2Nvbm5lY3RpbmcteW91ci1hcHAtdG8td2ktZmktZGV2aWNlLmh0bWwpXG4gKlxuICogIGBgYHR5cGVzY3JpcHRcbiAqICB0aGlzLndpZmlXaXphcmQyLmNhblBpbmdXaWZpUm91dGVyKClcbiAqICBgYGBcbiAqXG4gKiAgLSBSZXR1cm5zIGJvb2xlYW4sIHRydWUgb3IgZmFsc2UsIGlmIGRldmljZSBpcyBhYmxlIHRvIHBpbmcgdGhlIGNvbm5lY3RlZCBXaUZpIHJvdXRlciBJUCAob2J0YWluZWQgZnJvbSBESENQIGluZm8pXG4gKiAgLSBWZXJzaW9uIDMuMS4xKyB1c2VzIEhUVFAgY29ubmVjdGlvbiB0byB0ZXN0IGlmIGFibGUgdG8gY29ubmVjdCB0byByb3V0ZXIgKGFzIHBpbmcgcHJldmlvdXMgZGlkIG5vdCB3b3JrKVxuICogIC0gVW5rbm93biBlcnJvcnMgd2lsbCBzdGlsbCBiZSB0aHJvd24gbGlrZSBhbGwgb3RoZXIgYXN5bmMgZnVuY3Rpb25zXG4gKiAgLSBUaGlzIGlzIHVzZWZ1bCBmb3IgdGVzdGluZyB0byBtYWtlIHN1cmUgdGhhdCB5b3VyIEFuZHJvaWQgYXBwIGlzIGFibGUgdG8gY29ubmVjdCB0byB0aGUgcHJpdmF0ZSBuZXR3b3JrIGFmdGVyIGNvbm5lY3RpbmcgdG8gV2lGaVxuICogIC0gVGhpcyB3YXMgYWRkZWQgZm9yIHRlc3RpbmcgdGhlIGBiaW5kQWxsYCBmZWF0dXJlIHRvIHN1cHBvcnQgaXNzdWVzIHdpdGggQW5kcm9pZCBMb2xsaXBvcCsgKEFQSSAyMSspIG5vdCByb3V0aW5nIGNhbGxzIHRocm91Z2ggV2lGaSBpZiBXaUZpIGRvZXMgbm90IGhhdmUgaW50ZXJuZXQgY29ubmVjdGlvbiBbU2VlIEFuZHJvaWQgQmxvZ10oaHR0cHM6Ly9hbmRyb2lkLWRldmVsb3BlcnMuZ29vZ2xlYmxvZy5jb20vMjAxNi8wNy9jb25uZWN0aW5nLXlvdXItYXBwLXRvLXdpLWZpLWRldmljZS5odG1sKVxuICpcbiAqICBgYGB0eXBlc2NyaXB0XG4gKiAgdGhpcy53aWZpV2l6YXJkMi5lbmFibGVXaWZpKClcbiAqICBgYGBcbiAqXG4gKiAgYGBgdHlwZXNjcmlwdFxuICogIHRoaXMud2lmaVdpemFyZDIuZGlzYWJsZVdpZmkoKVxuICogIGBgYFxuICpcbiAqICBgYGB0eXBlc2NyaXB0XG4gKiAgdGhpcy53aWZpV2l6YXJkMi5nZXRXaWZpSVAoKVxuICogIGBgYFxuICogIC0gUmV0dXJucyBJUHY0IGFkZHJlc3Mgb2YgY3VycmVudGx5IGNvbm5lY3RlZCBXaUZpLCBvciByZWplY3RzIHByb21pc2UgaWYgSVAgbm90IGZvdW5kIG9yIHdpZmkgbm90IGNvbm5lY3RlZFxuICpcbiAqICBgYGB0eXBlc2NyaXB0XG4gKiAgdGhpcy53aWZpV2l6YXJkMi5nZXRXaWZpUm91dGVySVAoKVxuICogIGBgYFxuICogIC0gUmV0dXJucyBJUHY0IFdpRmkgcm91dGVyIElQIGZyb20gY3VycmVudGx5IGNvbm5lY3RlZCBXaUZpLCBvciByZWplY3RzIHByb21pc2UgaWYgdW5hYmxlIHRvIGRldGVybWluZSwgb3Igd2lmaSBub3QgY29ubmVjdGVkXG4gKlxuICogICoqVGhyb3duIEVycm9ycyoqXG4gKlxuICogIC0gYE5PX1ZBTElEX0lQX0lERU5USUZJRURgIGlmIHVuYWJsZSB0byBkZXRlcm1pbmUgYSB2YWxpZCBJUCAoaXAgcmV0dXJuZWQgZnJvbSBkZXZpY2UgaXMgYDAuMC4wLjBgKVxuICpcbiAqICBgYGB0eXBlc2NyaXB0XG4gKiAgdGhpcy53aWZpV2l6YXJkMi5nZXRXaWZpSVBJbmZvKClcbiAqICBgYGBcbiAqICAtIFJldHVybnMgYSBKU09OIG9iamVjdCB3aXRoIElQdjQgYWRkcmVzcyBhbmQgc3VibmV0IGB7XCJpcFwiOiBcIjE5Mi4xNjguMS4yXCIsIFwic3VibmV0XCI6IFwiMjU1LjI1NS4yNTUuMFwiIH1gIG9yIHJlamVjdGVkIHByb21pc2UgaWYgbm90IGZvdW5kIG9yIG5vdCBjb25uZWN0ZWRcbiAqICAqKlRocm93biBFcnJvcnMqKlxuICpcbiAqICAtIGBOT19WQUxJRF9JUF9JREVOVElGSUVEYCBpZiB1bmFibGUgdG8gZGV0ZXJtaW5lIGEgdmFsaWQgSVAgKGlwIHJldHVybmVkIGZyb20gZGV2aWNlIGlzIGAwLjAuMC4wYClcbiAqXG4gKiAgYGBgdHlwZXNjcmlwdFxuICogIHRoaXMud2lmaVdpemFyZDIucmVjb25uZWN0KClcbiAqICBgYGBcbiAqICAtIFJlY29ubmVjdCB0byB0aGUgY3VycmVudGx5IGFjdGl2ZSBhY2Nlc3MgcG9pbnQsICoqaWYgd2UgYXJlIGN1cnJlbnRseSBkaXNjb25uZWN0ZWQuKipcbiAqXG4gKiAgKipUaHJvd24gRXJyb3JzKipcbiAqXG4gKiAgLSBgRVJST1JfUkVDT05ORUNUYCBBbmRyb2lkIHJldHVybmVkIGVycm9yIHdoZW4gcmVjb25uZWN0aW5nXG4gKlxuICogIGBgYHR5cGVzY3JpcHRcbiAqICB0aGlzLndpZmlXaXphcmQyLnJlYXNzb2NpYXRlKClcbiAqICBgYGBcbiAqICAtIFJlY29ubmVjdCB0byB0aGUgY3VycmVudGx5IGFjdGl2ZSBhY2Nlc3MgcG9pbnQsICoqZXZlbiBpZiB3ZSBhcmUgYWxyZWFkeSBjb25uZWN0ZWQuKipcbiAqXG4gKiAgKipUaHJvd24gRXJyb3JzKipcbiAqXG4gKiAgLSBgRVJST1JfUkVBU1NPQ0lBVEVgIEFuZHJvaWQgcmV0dXJuZWQgZXJyb3Igd2hlbiByZWFzc29jaWF0aW5nXG4gKlxuICpcbiAqICBgYGB0eXBlc2NyaXB0XG4gKiAgdGhpcy53aWZpV2l6YXJkMi5nZXRTU0lETmV0d29ya0lEKHNzaWQpXG4gKiAgYGBgXG4gKiAgLSBHZXQgQW5kcm9pZCBOZXR3b3JrIElEIGZyb20gcGFzc2VkIFNTSURcbiAqXG4gKiAgYGBgdHlwZXNjcmlwdFxuICogIHRoaXMud2lmaVdpemFyZDIuZGlzYWJsZShzc2lkKVxuICogIGBgYFxuICogIC0gYHNzaWRgIGNhbiBlaXRoZXIgYmUgYW4gU1NJRCAoc3RyaW5nKSBvciBhIG5ldHdvcmsgSUQgKGludGVnZXIpXG4gKiAgLSBEaXNhYmxlIHRoZSBwYXNzZWQgU1NJRCBuZXR3b3JrXG4gKiAgLSBQbGVhc2Ugbm90ZSB0aGF0IG1vc3QgbmV3ZXIgdmVyc2lvbnMgb2YgQW5kcm9pZCB3aWxsIG9ubHkgYWxsb3cgeW91IHRvIGRpc2FibGUgbmV0d29ya3MgY3JlYXRlZCBieSB5b3VyIGFwcGxpY2F0aW9uXG4gKlxuICogICoqVGhyb3duIEVycm9ycyoqXG4gKlxuICogIC0gYFVOQUJMRV9UT19ESVNBQkxFYCBBbmRyb2lkIHJldHVybmVkIGZhaWx1cmUgaW4gZGlzYWJsaW5nIG5ldHdvcmtcbiAqICAtIGBESVNBQkxFX05FVFdPUktfTk9UX0ZPVU5EYCBVbmFibGUgdG8gZGV0ZXJtaW5lIG5ldHdvcmsgSUQgZnJvbSBwYXNzZWQgU1NJRCB0byBkaXNhYmxlXG4gKlxuICpcbiAqICBgYGB0eXBlc2NyaXB0XG4gKiAgdGhpcy53aWZpV2l6YXJkMi5yZXF1ZXN0UGVybWlzc2lvbigpXG4gKiAgYGBgXG4gKiAgLSBSZXF1ZXN0IGBBQ0NFU1NfRklORV9MT0NBVElPTmAgcGVybXNzaW9uXG4gKiAgLSBUaGlzIEFuZHJvaWQgcGVybWlzc2lvbiBpcyByZXF1aXJlZCB0byBydW4gYHNjYW5gLCBgc3RhcnRTdGFydGAgYW5kIGBnZXRTY2FuUmVzdWx0c2BcbiAqICAtIFlvdSBjYW4gcmVxdWVzdCBwZXJtaXNzaW9uIGJ5IHJ1bm5pbmcgdGhpcyBmdW5jdGlvbiBtYW51YWxseSwgb3IgV2lmaVdpemFyZDIgd2lsbCBhdXRvbWFnaWNhbGx5IHJlcXVlc3QgcGVybWlzc2lvbiB3aGVuIG9uZSBvZiB0aGUgZnVuY3Rpb25zIGFib3ZlIGlzIGNhbGxlZFxuICpcbiAqICAqKlRocm93biBFcnJvcnMqKlxuICpcbiAqICAtIGBQRVJNSVNTSU9OX0RFTklFRGAgdXNlciBkZW5pZWQgcGVybWlzc2lvbiBvbiBkZXZpY2VcbiAqXG4gKlxuICogIGBgYHR5cGVzY3JpcHRcbiAqICB0aGlzLndpZmlXaXphcmQyLmVuYWJsZShzc2lkLCBiaW5kQWxsLCB3YWl0Rm9yQ29ubmVjdGlvbilcbiAqICBgYGBcbiAqICAtIGBzc2lkYCBjYW4gZWl0aGVyIGJlIGFuIFNTSUQgKHN0cmluZykgb3IgYSBuZXR3b3JrIElEIChpbnRlZ2VyKVxuICogIC0gYGJpbmRBbGxgIHNob3VsZCBiZSBzZXQgdG8gYHRydWVgIHRvIHRlbGwgQW5kcm9pZCB0byByb3V0ZSBhbGwgY29ubmVjdGlvbnMgZnJvbSB5b3VyIEFuZHJvaWQgYXBwLCB0aHJvdWdoIHRoZSB3aWZpIGNvbm5lY3Rpb25cbiAqICAtIEFuZHJvaWQgTG9sbGlwb3ArIChBUEkgMjErKSB3aWxsIG5vdCByb3V0ZSBjb25uZWN0aW9ucyB0byB0aGUgV2lGaSBkZXZpY2UgaWYgaXQgZG9lcyBub3QgaGF2ZSBpbnRlcm5ldCBjb25uZWN0aW9uLiAgUGFzc2luZyBgdHJ1ZWAgdG8gYGJpbmRBbGxgIHdpbGwgZm9yY2UgQW5kcm9pZCB0byByb3V0ZSBjb25uZWN0aW9ucyBmcm9tIHlvdXIgQW5kcm9pZCBhcHAgdGhyb3VnaCBXaWZpLCByZWdhcmRsZXNzIG9mIGludGVybmV0IGNvbm5lY3Rpb24uXG4gKiAgLSBJZiB5b3UgYXJlIGhhdmluZyBwcm9ibGVtcyBjb25uZWN0aW5nIHRvIGEgbG9jYWwgSVAgdGhyb3VnaCBXaUZpIGJlY2F1c2UgaXQgZG9lcyBub3QgaGF2ZSBpbnRlcm5ldCwgdHJ5IGVuYWJsaW5nIGBiaW5kQWxsYCBhbmQgdGhpcyBzaG91bGQgZml4IHRoZSBwcm9ibGVtLlxuICogIC0gRHVyaW5nIG15IHRlc3RpbmcsIHNvbWUgdmVyc2lvbnMgb2YgQW5kcm9pZCAoNS4wIC0gNy4xLjIpIHdvdWxkIHN0aWxsIHJvdXRlIGNvbm5lY3Rpb25zIHRocm91Z2ggV2lGaSB3aXRob3V0IGludGVybmV0LCBidXQgaXQgd2FzIHJhbmRvbSB0aGF0IHNvbWUgdmVyc2lvbnMgd291bGQgYW5kIHdvdWxkIG5vdCB3b3JrLlxuICogIC0gVGVzdGluZyBBbmRyb2lkIE9yZW8rICg4LjAuMCspIGlmIHdpZmkgZG9lcyBub3QgaGF2ZSBpbnRlcm5ldCwgMTAwJSBvZiB0aGUgdGltZSBpdCB3b3VsZCBOT1Qgcm91dGUgY29ubmVjdGlvbnMgdGhyb3VnaCBXaUZpLCBzbyB5b3UgKm11c3QqIGVuYWJsZSB0aGlzIGZvciBPcmVvIG9yIG5ld2VyIHRvIHJvdXRlIGNvbm5lY3Rpb25zIGZyb20geW91ciBhcHBsaWNhdGlvbiB0aHJvdWdoIHdpZmkgd2l0aG91dCBpbnRlcm5ldC5cbiAqICAtIFdoZW4gYGJpbmRBbGxgIGlzIGVuYWJsZWQsICpBTEwqIGNvbm5lY3Rpb25zIGZyb20geW91ciBhcHAgd2lsbCBiZSByb3V0ZWQgdGhyb3VnaCBXaUZpLCB1bnRpbCB5b3UgY2FsbCBgZGlzY29ubmVjdGAgb3IgYGRpc2FibGVgXG4gKiAgLSBTZWUgdGhlIEdvb2dsZSBBbmRyb2lkIEJsb2cgZm9yIFtNb3JlIERldGFpbHNdKGh0dHBzOi8vYW5kcm9pZC1kZXZlbG9wZXJzLmdvb2dsZWJsb2cuY29tLzIwMTYvMDcvY29ubmVjdGluZy15b3VyLWFwcC10by13aS1maS1kZXZpY2UuaHRtbClcbiAqICAtIFRoaXMgZmVhdHVyZSAqT05MWSogd29ya3MgZm9yIEFuZHJvaWQgTG9sbGlwb3ArIChBUEkgMjErKSwgaWYgZGV2aWNlIGlzIHJ1bm5pbmcgQVBJIG9sZGVyIHRoYW4gMjEsIGBiaW5kYWxsYCB3aWxsIGJlIGlnbm9yZWQgKGFzIEFQSSBvbGRlciB0aGFuIDIxIGRvZXMgdGhpcyBieSBkZWZhdWx0KVxuICogIC0gRW5hYmxlIHRoZSBwYXNzZWQgU1NJRCBuZXR3b3JrXG4gKiAgLSBZb3UgKipNVVNUKiogY2FsbCBgV2lmaVdpemFyZDIuYWRkKHdpZmkpYCBiZWZvcmUgY2FsbGluZyBgZW5hYmxlYCBhcyB0aGUgd2lmaSBjb25maWd1cmF0aW9uIG11c3QgZXhpc3QgYmVmb3JlIHlvdSBjYW4gZW5hYmxlIGl0IChvciBwcmV2aW91c2x5IHVzZWQgYGNvbm5lY3RgIHdpdGhvdXQgY2FsbGluZyBgZGlzY29ubmVjdGApXG4gKiAgLSBUaGlzIG1ldGhvZCBkb2VzIE5PVCB3YWl0IG9yIHZlcmlmeSBjb25uZWN0aW9uIHRvIHdpZmkgbmV0d29yaywgcGFzcyBgdHJ1ZWAgdG8gYHdhaXRGb3JDb25uZWN0aW9uYCB0byBvbmx5IHJldHVybiBwcm9taXNlIG9uY2UgY29ubmVjdGlvbiBpcyB2ZXJpZmllZCBpbiBDT01QTEVURUQgc3RhdGUgdG8gc3BlY2lmaWMgYHNzaWRgXG4gKlxuICogICoqVGhyb3duIEVycm9ycyoqXG4gKlxuICogIGBVTkFCTEVfVE9fRU5BQkxFYCAtIEFuZHJvaWQgcmV0dXJuZWQgYC0xYCBzaWduaWZ5aW5nIGZhaWx1cmUgZW5hYmxpbmdcbiAqXG4gKiAgIyBJbnN0YWxsYXRpb25cbiAqXG4gKiAgIyMgTWFzdGVyXG4gKlxuICogIFJ1biBgYGBjb3Jkb3ZhIHBsdWdpbiBhZGQgaHR0cHM6Ly9naXRodWIuY29tL3RyaXBmbGV4L3dpZml3aXphcmQyYGBgXG4gKlxuICogIFRvIGluc3RhbGwgZnJvbSB0aGUgbWFzdGVyIGJyYW5jaCAobGF0ZXN0IG9uIEdpdEh1YilcbiAqXG4gKiAgVG8gaW5zdGFsbCBhIHNwZWNpZmljIGJyYW5jaCAoYWRkIGAjdGFnYCByZXBsYWNpbmcgYHRhZ2Agd2l0aCB0YWcgZnJvbSB0aGlzIHJlcG8sIGV4YW1wbGU6XG4gKiAgYGBgY29yZG92YSBwbHVnaW4gYWRkIGh0dHBzOi8vZ2l0aHViLmNvbS90cmlwZmxleC93aWZpd2l6YXJkMiN2My4xLjFgYGBcbiAqXG4gKiAgRmluZCBhdmFpbGFibGUgdGFncyBoZXJlOlxuICogIGh0dHBzOi8vZ2l0aHViLmNvbS90cmlwZmxleC9XaWZpV2l6YXJkMi90YWdzXG4gKlxuICpcbiAqICBJZiB5b3UgYXJlIHdhbnRpbmcgdG8gaGF2ZSB0aGUgbGF0ZXN0IGFuZCBncmVhdGVzdCBzdGFibGUgdmVyc2lvbiwgdGhlbiBydW4gdGhlICdSZWxlYXNlcycgY29tbWFuZCBiZWxvdy5cbiAqXG4gKiAgIyMgUmVsZWFzZXNcbiAqICBSdW4gYGBgY29yZG92YSBwbHVnaW4gYWRkIGNvcmRvdmEtcGx1Z2luLXdpZml3aXphcmQyYGBgXG4gKlxuICogICMjIE1ldGVvclxuICogIFRvIGluc3RhbGwgYW5kIHVzZSB0aGlzIHBsdWdpbiBpbiBhIE1ldGVvciBwcm9qZWN0LCB5b3UgaGF2ZSB0byBzcGVjaWZ5IHRoZSBleGFjdCB2ZXJzaW9uIGZyb20gTlBNIHJlcG9zaXRvcnk6XG4gKiAgW2h0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL2NvcmRvdmEtcGx1Z2luLXdpZml3aXphcmQyXShodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9jb3Jkb3ZhLXBsdWdpbi13aWZpd2l6YXJkMilcbiAqXG4gKiAgQXMgb2YgQXByaWwgNHRoIDIwMTksIHRoZSBsYXRlc3QgdmVyc2lvbiBpcyAzLjEuMTpcbiAqXG4gKiAgYGBgbWV0ZW9yIGFkZCBjb3Jkb3ZhOmNvcmRvdmEtcGx1Z2luLXdpZml3aXphcmQyQDMuMS4xYGBgXG4gKlxuICogICMgRXJyb3JzL1JlamVjdGlvbnNcbiAqICBNZXRob2RzIG5vdyByZXR1cm4gZm9ybWF0dGVkIHN0cmluZyBlcnJvcnMgYXMgZGV0YWlsZWQgYmVsb3csIGluc3RlYWQgb2YgcmV0dXJuaW5nIGdlbmVyaWMgZXJyb3IgbWVzc2FnZXMuICBUaGlzIGFsbG93cyB5b3UgdG8gY2hlY2sgeW91cnNlbGYgd2hhdCBzcGVjaWZpYyBlcnJvciB3YXMgcmV0dXJuZWQsIGFuZCBjdXN0b21pemUgdGhlIGVycm9yIG1lc3NhZ2UuXG4gKiAgSW4gYW4gdXBjb21pbmcgcmVsZWFzZSBJIG1heSBhZGQgZWFzeSB3YXlzIHRvIG92ZXJyaWRlIGdlbmVyaWMgbWVzc2FnZXMsIG9yIHNldCB5b3VyIG93biwgYnV0IGZvciBub3csIGVycm9ycyByZXR1cm5lZCBjYW4gYmUgZm91bmQgYmVsb3cgZWFjaCBtZXRob2QvZnVuY3Rpb24uXG4gKlxuICogICMjIEdlbmVyaWMgKipUaHJvd24gRXJyb3JzKipcbiAqICBgV0lGSV9OT1RfRU5BQkxFRGBcbiAqICBgYGBcbiAqL1xuQFBsdWdpbih7XG4gIHBsdWdpbk5hbWU6ICdXaWZpV2l6YXJkMicsXG4gIHBsdWdpbjogJ2NvcmRvdmEtcGx1Z2luLXdpZml3aXphcmQyJyxcbiAgcGx1Z2luUmVmOiAnV2lmaVdpemFyZDInLFxuICByZXBvOiAnaHR0cHM6Ly9naXRodWIuY29tL3RyaXBmbGV4L1dpZmlXaXphcmQyJyxcbiAgcGxhdGZvcm1zOiBbJ0FuZHJvaWQnLCAnaU9TJ10sXG59KVxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFdpZmlXaXphcmQyIGV4dGVuZHMgQXdlc29tZUNvcmRvdmFOYXRpdmVQbHVnaW4ge1xuICAvKipcbiAgICogQ29ubmVjdCB0byBuZXR3b3JrIG9uIGlPUyBkZXZpY2VcbiAgICpcbiAgICogQHBhcmFtIHNzaWRcbiAgICogQHBhcmFtIHNzaWRQYXNzd29yZCAgICAgIFBhc3N3b3JkIGlmIGNvbm5lY3RpbmcgdG8gV1BBL1dQQTIgbmV0d29yayAob21pdCBvciB1c2UgZmFsc2UgdG8gY29ubmVjdCB0byBvcGVuIG5ldHdvcmspXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfVxuICAgKi9cbiAgQENvcmRvdmEoe1xuICAgIG90aGVyUHJvbWlzZTogdHJ1ZSxcbiAgICBwbGF0Zm9ybXM6IFsnaU9TJ10sXG4gIH0pXG4gIGlPU0Nvbm5lY3ROZXR3b3JrKHNzaWQ6IHN0cmluZywgc3NpZFBhc3N3b3JkOiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNjb25uZWN0IGZyb20gU1NJRCBvbiBpT1MgZGV2aWNlXG4gICAqXG4gICAqIEBwYXJhbSBzc2lkXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfVxuICAgKi9cbiAgQENvcmRvdmEoe1xuICAgIG90aGVyUHJvbWlzZTogdHJ1ZSxcbiAgICBwbGF0Zm9ybXM6IFsnaU9TJ10sXG4gIH0pXG4gIGlPU0Rpc2Nvbm5lY3ROZXR3b3JrKHNzaWQ6IHN0cmluZyk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCB3aWZpIG5ldHdvcmsgY29uZmlndXJhdGlvblxuICAgKlxuICAgKiBAcGFyYW0gd2lmaUNvbmZpZyAgTXVzdCBiZSBvYmplY3QgY3JlYXRlZCBieSBmb3JtYXRXaWZpQ29uZmlnKClcbiAgICogQHJldHVybnMge1Byb21pc2U8YW55Pn1cbiAgICovXG4gIEBDb3Jkb3ZhKHtcbiAgICBvdGhlclByb21pc2U6IHRydWUsXG4gIH0pXG4gIGFkZCh3aWZpQ29uZmlnOiBXaWZpQ29uZmlnKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIHdpZmkgbmV0d29yayBjb25maWd1cmF0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gW3NzaWRdXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGFueT59XG4gICAqL1xuICBAQ29yZG92YSh7XG4gICAgb3RoZXJQcm9taXNlOiB0cnVlLFxuICB9KVxuICByZW1vdmUoc3NpZDogc3RyaW5nIHwgbnVtYmVyKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQ29ubmVjdCBuZXR3b3JrIHdpdGggc3BlY2lmaWVkIFNTSURcbiAgICpcbiAgICogVGhpcyBtZXRob2Qgd2lsbCBmaXJzdCBhZGQgdGhlIHdpZmkgY29uZmlndXJhdGlvbiwgdGhlbiBlbmFibGUgdGhlIG5ldHdvcmssIHJldHVybmluZyBwcm9taXNlIHdoZW4gY29ubmVjdGlvbiBpcyB2ZXJpZmllZC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBbc3NpZF1cbiAgICogQHBhcmFtIHtib29sZWFufSBbYmluZEFsbD1mYWxzZV0gLSBXaGV0aGVyIG9yIG5vdCB0byBiaW5kIGFsbCBjb25uZWN0aW9ucyBmcm9tIGFwcCwgdGhyb3VnaCBXaUZpIGNvbm5lY3Rpb25cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtwYXNzd29yZD1dXG4gICAqIEBwYXJhbSBwYXNzd29yZFxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2FsZ29yaXRobT1OT05FXSAtIFdQQSwgV1BBIChmb3IgV1BBMiksIFdFUCBvciBOT05FIChOT05FIGJ5IGRlZmF1bHQpXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGFueT59XG4gICAqL1xuICBAQ29yZG92YSh7XG4gICAgb3RoZXJQcm9taXNlOiB0cnVlLFxuICAgIHBsYXRmb3JtczogWydBbmRyb2lkJ10sXG4gIH0pXG4gIGNvbm5lY3Qoc3NpZDogc3RyaW5nIHwgbnVtYmVyLCBiaW5kQWxsPzogYm9vbGVhbiwgcGFzc3dvcmQ/OiBzdHJpbmcsIGFsZ29yaXRobT86IHN0cmluZyk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc2Nvbm5lY3QgKGN1cnJlbnQgaWYgU1NJRCBub3Qgc3VwcGxpZWQpXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kLCBpZiBwYXNzZWQgYW4gU1NJRCwgd2lsbCBmaXJzdCBkaXNhYmxlIHRoZSBuZXR3b3JrLCBhbmQgdGhlbiByZW1vdmUgaXQgZnJvbSB0aGUgZGV2aWNlLiAgVG8gb25seSBcImRpc2Nvbm5lY3RcIiAoaWUgZGlzYWJsZSBpbiBhbmRyb2lkKSxcbiAgICogY2FsbCBXaWZpV2l6YXJkMi5kaXNhYmxlKCkgaW5zdGVhZCBvZiBkaXNjb25uZWN0LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IFtzc2lkPWFsbF1cbiAgICogQHJldHVybnMge1Byb21pc2U8YW55Pn1cbiAgICovXG4gIEBDb3Jkb3ZhKHtcbiAgICBvdGhlclByb21pc2U6IHRydWUsXG4gICAgcGxhdGZvcm1zOiBbJ0FuZHJvaWQnXSxcbiAgfSlcbiAgZGlzY29ubmVjdChzc2lkOiBzdHJpbmcgfCBudW1iZXIpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmFibGUgTmV0d29ya1xuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IFtzc2lkXVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtiaW5kQWxsPWZhbHNlXSAtIFdoZXRoZXIgb3Igbm90IHRvIGJpbmQgYWxsIG5ldHdvcmsgcmVxdWVzdHMgdG8gdGhpcyB3aWZpIG5ldHdvcmtcbiAgICogQHBhcmFtIHtib29sZWFufSBbd2FpdEZvckNvbm5lY3Rpb249ZmFsc2VdIC0gV2hldGhlciBvciBub3QgdG8gd2FpdCBiZWZvcmUgcmVzb2x2aW5nIHByb21pc2UgdW50aWwgY29ubmVjdGlvbiB0byB3aWZpIGlzIHZlcmlmaWVkXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGFueT59XG4gICAqL1xuICBAQ29yZG92YSh7XG4gICAgb3RoZXJQcm9taXNlOiB0cnVlLFxuICAgIHBsYXRmb3JtczogWydBbmRyb2lkJ10sXG4gIH0pXG4gIGVuYWJsZShzc2lkOiBzdHJpbmcgfCBudW1iZXIsIGJpbmRBbGw/OiBib29sZWFuLCB3YWl0Rm9yQ29ubmVjdGlvbj86IGJvb2xlYW4pOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNhYmxlIE5ldHdvcmtcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBbc3NpZF1cbiAgICogQHJldHVybnMge1Byb21pc2U8YW55Pn1cbiAgICovXG4gIEBDb3Jkb3ZhKHtcbiAgICBvdGhlclByb21pc2U6IHRydWUsXG4gICAgcGxhdGZvcm1zOiBbJ0FuZHJvaWQnXSxcbiAgfSlcbiAgZGlzYWJsZShzc2lkOiBzdHJpbmcgfCBudW1iZXIpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNvbm5lY3QgdG8gdGhlIGN1cnJlbnRseSBhY3RpdmUgYWNjZXNzIHBvaW50LCBldmVuIGlmIHdlIGFyZSBhbHJlYWR5IGNvbm5lY3RlZC5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8YW55Pn1cbiAgICovXG4gIEBDb3Jkb3ZhKHtcbiAgICBvdGhlclByb21pc2U6IHRydWUsXG4gICAgcGxhdGZvcm1zOiBbJ0FuZHJvaWQnXSxcbiAgfSlcbiAgcmVhc3NvY2lhdGUoKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogUmVjb25uZWN0IHRvIHRoZSBjdXJyZW50bHkgYWN0aXZlIGFjY2VzcyBwb2ludCwgaWYgd2UgYXJlIGN1cnJlbnRseSBkaXNjb25uZWN0ZWQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGFueT59XG4gICAqL1xuICBAQ29yZG92YSh7XG4gICAgb3RoZXJQcm9taXNlOiB0cnVlLFxuICAgIHBsYXRmb3JtczogWydBbmRyb2lkJ10sXG4gIH0pXG4gIHJlY29ubmVjdCgpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGN1cnJlbnRseSBjb25maWd1cmVkIG5ldHdvcmtzXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGFueT59XG4gICAqL1xuICBAQ29yZG92YSh7XG4gICAgb3RoZXJQcm9taXNlOiB0cnVlLFxuICB9KVxuICBsaXN0TmV0d29ya3MoKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogU3RhcnQgbmV0d29yayBzY2FuIGFuZCByZXR1cm4gcmVzdWx0c1xuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9uc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fVxuICAgKi9cbiAgQENvcmRvdmEoe1xuICAgIG90aGVyUHJvbWlzZTogdHJ1ZSxcbiAgfSlcbiAgc2NhbihvcHRpb25zPzogV2lmaVNjYW5PcHRpb25zKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogU3RhcnQgd2lmaSBuZXR3b3JrIHNjYW4gKHJlc3VsdHMgY2FuIGJlIHJldHJpZXZlZCB3aXRoIGdldFNjYW5SZXN1bHRzKVxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fVxuICAgKi9cbiAgQENvcmRvdmEoe1xuICAgIG90aGVyUHJvbWlzZTogdHJ1ZSxcbiAgfSlcbiAgc3RhcnRTY2FuKCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB3aWZpIHNjYW4gcmVzdWx0cyAobXVzdCBjYWxsIHN0YXJ0U2NhbiBmaXJzdCwgb3IganVzdCB1c2Ugc2NhbigpKVxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9uc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fVxuICAgKi9cbiAgQENvcmRvdmEoe1xuICAgIG90aGVyUHJvbWlzZTogdHJ1ZSxcbiAgfSlcbiAgZ2V0U2NhblJlc3VsdHMob3B0aW9uczogV2lmaVNjYW5SZXN1bHRzT3B0aW9ucyk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIFdpRmkgaXMgZW5hYmxlZFxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fVxuICAgKi9cbiAgQENvcmRvdmEoe1xuICAgIG90aGVyUHJvbWlzZTogdHJ1ZSxcbiAgfSlcbiAgaXNXaWZpRW5hYmxlZCgpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmFibGUgb3IgRGlzYWJsZSBXaUZpXG4gICAqXG4gICAqIEBwYXJhbSBlbmFibGVkXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGFueT59XG4gICAqL1xuICBAQ29yZG92YSh7XG4gICAgb3RoZXJQcm9taXNlOiB0cnVlLFxuICAgIHBsYXRmb3JtczogWydBbmRyb2lkJ10sXG4gIH0pXG4gIHNldFdpZmlFbmFibGVkKGVuYWJsZWQ6IGJvb2xlYW4pOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmFibGUgV2lGaVxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fVxuICAgKi9cbiAgQENvcmRvdmEoe1xuICAgIG90aGVyUHJvbWlzZTogdHJ1ZSxcbiAgICBwbGF0Zm9ybXM6IFsnQW5kcm9pZCddLFxuICB9KVxuICBlbmFibGVXaWZpKCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc2FibGUgV2lGaVxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fVxuICAgKi9cbiAgQENvcmRvdmEoe1xuICAgIG90aGVyUHJvbWlzZTogdHJ1ZSxcbiAgICBwbGF0Zm9ybXM6IFsnQW5kcm9pZCddLFxuICB9KVxuICBkaXNhYmxlV2lmaSgpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBVbmJpbmQgTmV0d29ya1xuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fVxuICAgKi9cbiAgQENvcmRvdmEoe1xuICAgIG90aGVyUHJvbWlzZTogdHJ1ZSxcbiAgfSlcbiAgcmVzZXRCaW5kQWxsKCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEJpbmQgTmV0d29ya1xuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fVxuICAgKi9cbiAgQENvcmRvdmEoe1xuICAgIG90aGVyUHJvbWlzZTogdHJ1ZSxcbiAgfSlcbiAgc2V0QmluZEFsbCgpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgV2lmaSBSb3V0ZXIgSVAgZnJvbSBESENQXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGFueT59XG4gICAqL1xuICBAQ29yZG92YSh7XG4gICAgb3RoZXJQcm9taXNlOiB0cnVlLFxuICB9KVxuICBnZXRXaWZpUm91dGVySVAoKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogR2V0IFdpZmkgSVBcbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8YW55Pn1cbiAgICovXG4gIEBDb3Jkb3ZhKHtcbiAgICBvdGhlclByb21pc2U6IHRydWUsXG4gIH0pXG4gIGdldFdpZmlJUCgpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgV2lmaSBJUCBhbmQgU3VibmV0IEFkZHJlc3NcbiAgICpcbiAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIEpTT04gb2JqZWN0IHNpbWlsYXIgdG86IHsgXCJpcFwiOiBcIjAuMC4wLjBcIiwgXCJzdWJuZXRcIjogXCIwLjAuMC4wXCIgfVxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fVxuICAgKi9cbiAgQENvcmRvdmEoe1xuICAgIG90aGVyUHJvbWlzZTogdHJ1ZSxcbiAgfSlcbiAgZ2V0V2lmaUlQSW5mbygpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgTmV0d29yayBJRCBmcm9tIFNTSURcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBbc3NpZF1cbiAgICogQHJldHVybnMge1Byb21pc2U8YW55Pn1cbiAgICovXG4gIEBDb3Jkb3ZhKHtcbiAgICBvdGhlclByb21pc2U6IHRydWUsXG4gIH0pXG4gIGdldFNTSUROZXR3b3JrSUQoc3NpZDogc3RyaW5nIHwgbnVtYmVyKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogR2V0IGN1cnJlbnRseSBjb25uZWN0ZWQgbmV0d29yayBJRFxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fVxuICAgKi9cbiAgQENvcmRvdmEoe1xuICAgIG90aGVyUHJvbWlzZTogdHJ1ZSxcbiAgfSlcbiAgZ2V0Q29ubmVjdGVkTmV0d29ya0lEKCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBjdXJyZW50bHkgY29ubmVjdGVkIG5ldHdvcmsgU1NJRFxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fVxuICAgKi9cbiAgQENvcmRvdmEoe1xuICAgIG90aGVyUHJvbWlzZTogdHJ1ZSxcbiAgfSlcbiAgZ2V0Q29ubmVjdGVkU1NJRCgpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgY3VycmVudGx5IGNvbm5lY3RlZCBuZXR3b3JrIEJTU0lEL01BQ1xuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fVxuICAgKi9cbiAgQENvcmRvdmEoe1xuICAgIG90aGVyUHJvbWlzZTogdHJ1ZSxcbiAgfSlcbiAgZ2V0Q29ubmVjdGVkQlNTSUQoKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgY3VycmVudCBXaUZpIGNvbm5lY3Rpb24gaGFzIGNvbm5lY3Rpb24gdG8gdGhlIGludGVybmV0XG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGFueT59XG4gICAqL1xuICBAQ29yZG92YSh7XG4gICAgb3RoZXJQcm9taXNlOiB0cnVlLFxuICB9KVxuICBpc0Nvbm5lY3RlZFRvSW50ZXJuZXQoKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgd2UgY2FuIHBpbmcgY3VycmVudCBXaUZpIHJvdXRlciBJUCBhZGRyZXNzXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGFueT59XG4gICAqL1xuICBAQ29yZG92YSh7XG4gICAgb3RoZXJQcm9taXNlOiB0cnVlLFxuICB9KVxuICBjYW5QaW5nV2lmaVJvdXRlcigpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB3ZSBjYW4gY29ubmVjdCB2aWEgSFRUUCBjdXJyZW50IFdpRmkgcm91dGVyIElQIGFkZHJlc3NcbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8YW55Pn1cbiAgICovXG4gIEBDb3Jkb3ZhKHtcbiAgICBvdGhlclByb21pc2U6IHRydWUsXG4gIH0pXG4gIGNhbkNvbm5lY3RUb1JvdXRlcigpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBjdXJyZW50IFdpRmkgY29ubmVjdGlvbiBjYW4gY29ubmVjdCB0byBpbnRlcm5ldCAoY2hlY2tzIGNvbm5lY3Rpb24gdG8gZ29vZ2xlLmNvbSlcbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8YW55Pn1cbiAgICovXG4gIEBDb3Jkb3ZhKHtcbiAgICBvdGhlclByb21pc2U6IHRydWUsXG4gIH0pXG4gIGNhbkNvbm5lY3RUb0ludGVybmV0KCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlcXVlc3QgQUNDRVNTX0ZJTkVfTE9DQVRJT04gcGVybWlzc2lvblxuICAgKlxuICAgKiBUaGlzIHBlcm1pc3Npb24gaXMgcmVxdWlyZWQgYnkgQW5kcm9pZCB0byByZXR1cm4gc2NhbiByZXN1bHRzLCB5b3UgY2FuIG1hbnVhbGx5IHJlcXVlc3QgaXQgcHJpb3IgdG8gcnVubmluZyBgc2NhbmBcbiAgICogb3IgdGhpcyBwbHVnaW4gd2lsbCBhdXRvbWF0aWNhbGx5IGRvIGl0IHdoZW4gdGhlIHNjYW4gaXMgcmFuLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fVxuICAgKi9cbiAgQENvcmRvdmEoe1xuICAgIG90aGVyUHJvbWlzZTogdHJ1ZSxcbiAgfSlcbiAgcmVxdWVzdFBlcm1pc3Npb24oKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogRm9ybWF0IFdpRmkgY29uZmlndXJhdGlvbiBmb3IgQW5kcm9pZCBEZXZpY2VzXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gW3NzaWRdXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcGFzc3dvcmRdXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbYWxnb3JpdGhtXVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtpc0hpZGRlblNTSURdXG4gICAqIEByZXR1cm5zIHtXaWZpQ29uZmlnfGJvb2xlYW59XG4gICAqL1xuICBAQ29yZG92YUZ1bmN0aW9uT3ZlcnJpZGUoKVxuICBmb3JtYXRXaWZpQ29uZmlnKFxuICAgIHNzaWQ6IHN0cmluZyB8IG51bWJlcixcbiAgICBwYXNzd29yZDogc3RyaW5nLFxuICAgIGFsZ29yaXRobTogc3RyaW5nLFxuICAgIGlzSGlkZGVuU1NJRDogYm9vbGVhblxuICApOiBXaWZpQ29uZmlnIHwgYm9vbGVhbiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1hdCBXUEEgV2lGaSBjb25maWd1cmF0aW9uIGZvciBBbmRyb2lkIERldmljZXNcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBbc3NpZF1cbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhc3N3b3JkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNIaWRkZW5TU0lEXG4gICAqIEByZXR1cm5zIHtXaWZpQ29uZmlnfGJvb2xlYW59XG4gICAqL1xuICBAQ29yZG92YUZ1bmN0aW9uT3ZlcnJpZGUoKVxuICBmb3JtYXRXUEFDb25maWcoc3NpZDogc3RyaW5nIHwgbnVtYmVyLCBwYXNzd29yZDogc3RyaW5nLCBpc0hpZGRlblNTSUQ6IGJvb2xlYW4pOiBXaWZpQ29uZmlnIHwgYm9vbGVhbiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1hdCBXaUZpIFNTSUQgU3RyaW5nXG4gICAqXG4gICAqIEBwYXJhbSBzc2lkXG4gICAqIEByZXR1cm5zIHsqfVxuICAgKi9cbiAgQENvcmRvdmFGdW5jdGlvbk92ZXJyaWRlKClcbiAgZm9ybWF0V2lmaVN0cmluZyhzc2lkOiBzdHJpbmcgfCBudW1iZXIpOiBzdHJpbmcgfCBudW1iZXIge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBTeW5jaHJvbm91cyBTbGVlcC9UaW1lb3V0IGBhd2FpdCB0aGlzLnRpbWVvdXQoKWBcbiAgICpcbiAgICogQHBhcmFtIGRlbGF5ICB0aGUgYW1vdW50IG9mIHRpbWUgdG8gd2FpdCAoZGVmYXVsdCAyIHNlY29uZHMpXG4gICAqL1xuICBAQ29yZG92YUZ1bmN0aW9uT3ZlcnJpZGUoKVxuICB0aW1lb3V0KGRlbGF5PzogbnVtYmVyKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cbn1cbiJdfQ==
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: WifiWizard2, decorators: [{
type: Injectable
}], propDecorators: { iOSConnectNetwork: [], iOSDisconnectNetwork: [], add: [], remove: [], connect: [], disconnect: [], enable: [], disable: [], reassociate: [], reconnect: [], listNetworks: [], scan: [], startScan: [], getScanResults: [], isWifiEnabled: [], setWifiEnabled: [], enableWifi: [], disableWifi: [], resetBindAll: [], setBindAll: [], getWifiRouterIP: [], getWifiIP: [], getWifiIPInfo: [], getSSIDNetworkID: [], getConnectedNetworkID: [], getConnectedSSID: [], getConnectedBSSID: [], isConnectedToInternet: [], canPingWifiRouter: [], canConnectToRouter: [], canConnectToInternet: [], requestPermission: [], formatWifiConfig: [], formatWPAConfig: [], formatWifiString: [], timeout: [] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvQGF3ZXNvbWUtY29yZG92YS1wbHVnaW5zL3BsdWdpbnMvd2lmaS13aXphcmQtMi9uZ3gvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxnRUFBd0UsTUFBTSwrQkFBK0IsQ0FBQzs7O0lBb2JwRiwrQkFBMEI7Ozs7SUFZekQsdUNBQWlCLGFBQUMsSUFBWSxFQUFFLFlBQW9CO0lBY3BELDBDQUFvQixhQUFDLElBQVk7SUFhakMseUJBQUcsYUFBQyxVQUFzQjtJQWExQiw0QkFBTSxhQUFDLElBQXFCO0lBb0I1Qiw2QkFBTyxhQUFDLElBQXFCLEVBQUUsT0FBaUIsRUFBRSxRQUFpQixFQUFFLFNBQWtCO0lBaUJ2RixnQ0FBVSxhQUFDLElBQXFCO0lBZ0JoQyw0QkFBTSxhQUFDLElBQXFCLEVBQUUsT0FBaUIsRUFBRSxpQkFBMkI7SUFjNUUsNkJBQU8sYUFBQyxJQUFxQjtJQWE3QixpQ0FBVztJQWFYLCtCQUFTO0lBWVQsa0NBQVk7SUFhWiwwQkFBSSxhQUFDLE9BQXlCO0lBWTlCLCtCQUFTO0lBYVQsb0NBQWMsYUFBQyxPQUErQjtJQVk5QyxtQ0FBYTtJQWNiLG9DQUFjLGFBQUMsT0FBZ0I7SUFhL0IsZ0NBQVU7SUFhVixpQ0FBVztJQVlYLGtDQUFZO0lBWVosZ0NBQVU7SUFZVixxQ0FBZTtJQVlmLCtCQUFTO0lBY1QsbUNBQWE7SUFhYixzQ0FBZ0IsYUFBQyxJQUFxQjtJQVl0QywyQ0FBcUI7SUFZckIsc0NBQWdCO0lBWWhCLHVDQUFpQjtJQVlqQiwyQ0FBcUI7SUFZckIsdUNBQWlCO0lBWWpCLHdDQUFrQjtJQVlsQiwwQ0FBb0I7SUFlcEIsdUNBQWlCO0lBY2pCLHNDQUFnQixhQUNkLElBQXFCLEVBQ3JCLFFBQWdCLEVBQ2hCLFNBQWlCLEVBQ2pCLFlBQXFCO0lBY3ZCLHFDQUFlLGFBQUMsSUFBcUIsRUFBRSxRQUFnQixFQUFFLFlBQXFCO0lBVzlFLHNDQUFnQixhQUFDLElBQXFCO0lBVXRDLDZCQUFPLGFBQUMsS0FBYzs2R0ExZFgsV0FBVztpSEFBWCxXQUFXOzs7Ozs7SUFBWCxXQUFXLGtCQUFYLFdBQVc7c0JBcmJ4QjtFQXFiaUMsMEJBQTBCO1NBQTlDLFdBQVc7NEZBQVgsV0FBVztrQkFEdkIsVUFBVTs4QkFhVCxpQkFBaUIsTUFjakIsb0JBQW9CLE1BYXBCLEdBQUcsTUFhSCxNQUFNLE1Bb0JOLE9BQU8sTUFpQlAsVUFBVSxNQWdCVixNQUFNLE1BY04sT0FBTyxNQWFQLFdBQVcsTUFhWCxTQUFTLE1BWVQsWUFBWSxNQWFaLElBQUksTUFZSixTQUFTLE1BYVQsY0FBYyxNQVlkLGFBQWEsTUFjYixjQUFjLE1BYWQsVUFBVSxNQWFWLFdBQVcsTUFZWCxZQUFZLE1BWVosVUFBVSxNQVlWLGVBQWUsTUFZZixTQUFTLE1BY1QsYUFBYSxNQWFiLGdCQUFnQixNQVloQixxQkFBcUIsTUFZckIsZ0JBQWdCLE1BWWhCLGlCQUFpQixNQVlqQixxQkFBcUIsTUFZckIsaUJBQWlCLE1BWWpCLGtCQUFrQixNQVlsQixvQkFBb0IsTUFlcEIsaUJBQWlCLE1BY2pCLGdCQUFnQixNQWtCaEIsZUFBZSxNQVdmLGdCQUFnQixNQVVoQixPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29yZG92YSwgQ29yZG92YUZ1bmN0aW9uT3ZlcnJpZGUsIEF3ZXNvbWVDb3Jkb3ZhTmF0aXZlUGx1Z2luLCBQbHVnaW4gfSBmcm9tICdAYXdlc29tZS1jb3Jkb3ZhLXBsdWdpbnMvY29yZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgV2lmaUNvbmZpZyB7XG4gIFNTSUQ6IHN0cmluZztcbiAgaXNIaWRkZW5TU0lEOiBib29sZWFuO1xuICBhdXRoOiB7XG4gICAgYWxnb3JpdGhtOiBzdHJpbmc7XG4gICAgcGFzc3dvcmQ/OiBzdHJpbmc7XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgV2lmaVNjYW5SZXN1bHRzT3B0aW9ucyB7XG4gIG51bUxldmVsczogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFdpZmlTY2FuT3B0aW9ucyBleHRlbmRzIFdpZmlTY2FuUmVzdWx0c09wdGlvbnMge1xuICBba2V5OiBzdHJpbmddOiBhbnk7XG59XG5cbi8qKlxuICogQG5hbWUgV2lmaVdpemFyZDJcbiAqIEBkZXNjcmlwdGlvblxuICogV2lmaVdpemFyZDIgZW5hYmxlcyBXaWZpIG1hbmFnZW1lbnQgZm9yIGJvdGggQW5kcm9pZCBhbmQgaU9TIGFwcGxpY2F0aW9ucyB3aXRoaW4gQ29yZG92YS9QaG9uZWdhcCBwcm9qZWN0cy5cbiAqXG4gKiBUaGlzIHByb2plY3QgaXMgYSBmb3JrIG9mIHRoZSBXaWZpV2l6YXJkIHBsdWdpbiB3aXRoIGZpeGVzIGFuZCB1cGRhdGVzLCBhcyB3ZWxsIGFzIHBhdGNoZXMgdGFrZW4gZnJvbSB0aGUgQ29yZG92YSBOZXR3b3JrIE1hbmFnZXIgcGx1Z2luLlxuICogQHVzYWdlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBXaWZpV2l6YXJkMiB9IGZyb20gJ0Bhd2Vzb21lLWNvcmRvdmEtcGx1Z2lucy93aWZpLXdpemFyZC0yL25neCc7XG4gKlxuICpcbiAqIGNvbnN0cnVjdG9yKHByaXZhdGUgd2lmaVdpemFyZDI6IFdpZmlXaXphcmQyKSB7IH1cbiAqXG4gKlxuICogIyBHbG9iYWwgRnVuY3Rpb25zXG4gKiAgVGhlc2UgYXJlIGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSB1c2VkIGJ5IGJvdGggQW5kcm9pZCBhbmQgaU9TIGFwcGxpY2F0aW9uc1xuICogIGBgYHR5cGVzY3JpcHRcbiAqICB0aGlzLndpZmlXaXphcmQyLmdldENvbm5lY3RlZFNTSUQoKVxuICogIGBgYFxuICogIC0gUmV0dXJucyBjb25uZWN0ZWQgbmV0d29yayBTU0lEIChvbmx5IGlmIGNvbm5lY3RlZCkgaW4gc3VjY2VzcyBjYWxsYmFjaywgb3RoZXJ3aXNlIGZhaWwgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgKGlmIG5vdCBjb25uZWN0ZWQgb3IgdW5hYmxlIHRvIHJldHJpZXZlKVxuICogIC0gVGhpcyBkb2VzICoqTk9UKiogcmV0dXJuIHRoZSBCU1NJRCBpZiB1bmFibGUgdG8gb2J0YWluIFNTSUQgKGxpa2Ugb3JpZ2luYWwgV2lmaVdpemFyZCBkaWQpXG4gKiAgYGBgdHlwZXNjcmlwdFxuICogIHRoaXMud2lmaVdpemFyZDIuZ2V0Q29ubmVjdGVkQlNTSUQoKVxuICogIGBgYFxuICogIC0gU2FtZSBhcyBhYm92ZSwgZXhjZXB0IEJTU0lEIChtYWMpIGlzIHJldHVybmVkXG4gKlxuICogIGBgYHR5cGVzY3JpcHRcbiAqICB0aGlzLndpZmlXaXphcmQyLnRpbWVvdXQoZGVsYXkpXG4gKiAgYGBgXG4gKiAgLSBgZGVsYXlgIHNob3VsZCBiZSB0aW1lIGluIG1pbGxpc2Vjb25kcyB0byBkZWxheVxuICogIC0gSGVscGVyIGFzeW5jIHRpbWVvdXQgZGVsYXksIGBkZWxheWAgaXMgb3B0aW9uYWwsIGRlZmF1bHQgaXMgMjAwMG1zID0gMiBzZWNvbmRzXG4gKiAgLSBUaGlzIG1ldGhvZCBhbHdheXMgcmV0dXJucyBhIHJlc29sdmVkIHByb21pc2UgYWZ0ZXIgdGhlIGRlbGF5LCBpdCB3aWxsIG5ldmVyIHJlamVjdCBvciB0aHJvdyBhbiBlcnJvclxuICpcbiAqICBFeGFtcGxlIGluc2lkZSBhc3luYyBmdW5jdGlvbioqXG4gKiAgYGBgdHlwZXNjcmlwdFxuICogIGFzeW5jIGZ1bmN0aW9uIGV4YW1wbGUoKXtcbiAqICAgICBhd2FpdCB0aGlzLndpZmlXaXphcmQyLnRpbWVvdXQoNDAwMCk7XG4gKiAgICAgLy8gZG8gc29tZXRoaW5nIGFmdGVyIDQgc2Vjb25kc1xuICogfVxuICogIGBgYFxuICpcbiAqICBFeGFtcGxlIGluc2lkZSBzdGFuZGFyZCBub24tYXN5bmMgZnVuY3Rpb24qKlxuICogIGBgYHR5cGVzY3JpcHRcbiAqICBmdW5jdGlvbiBleGFtcGxlKCl7XG4gKiAgICAgdGhpcy53aWZpV2l6YXJkMi50aW1lb3V0KDQwMDApLnRoZW4oIGZ1bmN0aW9uKCl7XG4gKiAgICAgICAgIC8vIGRvIHNvbWV0aGluZyBhZnRlciB3YWl0aW5nIDQgc2Vjb25kc1xuICogICAgIH0pOlxuICogfVxuICogIGBgYFxuICpcbiAqICBUaHJvd24gRXJyb3JzKipcbiAqXG4gKiAgLSBgVElNRU9VVF9XQUlUSU5HX0ZPUl9TQ0FOYCBvbiB0aW1lb3V0IHdhaXRpbmcgZm9yIHNjYW4gMTAgc2Vjb25kcyArXG4gKiAgLSBgU0NBTl9GQUlMRURgIGlmIHVuYWJsZSB0byBzdGFydCBzY2FuXG4gKlxuICogICMgaU9TIEZ1bmN0aW9uc1xuICogIEZvciBmdW5jdGlvbmFsaXR5LCB5b3UgbmVlZCB0byBub3RlIHRoZSBmb2xsb3dpbmc6XG4gKiAgLSBDb25uZWN0L0Rpc2Nvbm5lY3Qgb25seSB3b3JrcyBmb3IgaU9TMTErXG4gKiAgLSBDYW4ndCBydW4gaW4gdGhlIHNpbXVsYXRvciBzbyB5b3UgbmVlZCB0byBhdHRhY2ggYW4gYWN0dWFsIGRldmljZSB3aGVuIGJ1aWxkaW5nIHdpdGggeENvZGVcbiAqICAtIFdpbGwgZW5zdXJlICdIb3RzcG90Q29uZmlndXJhdGlvbicgYW5kICdOZXR3b3JrRXh0ZW5zaW9ucycgY2FwYWJpbGl0aWVzIGFyZSBhZGRlZCB0byB5b3VyIHhDb2RlIHByb2plY3RcbiAqICAtIFRvIGNvbm5lY3QgdG8gb3BlbiBuZXR3b3JrIG9taXQgYHNzaWRQYXNzd29yZGAgb3IgY2FsbCB3aXRoIGBmYWxzZWBcbiAqXG4gKiAgYGBgdHlwZXNjcmlwdFxuICogIHRoaXMud2lmaVdpemFyZDIuaU9TQ29ubmVjdE5ldHdvcmsoc3NpZCwgc3NpZFBhc3N3b3JkKVxuICogIGBgYFxuICogIGBgYHR5cGVzY3JpcHRcbiAqICB0aGlzLndpZmlXaXphcmQyLmlPU0Rpc2Nvbm5lY3ROZXR3b3JrKHNzaWQpXG4gKiAgYGBgXG4gKlxuICogICMgQW5kcm9pZCBGdW5jdGlvbnNcbiAqICAtICoqV2lmaVdpemFyZDIqKiAqd2lsbCBhdXRvbWFnaWNhbGx5IHRyeSB0byBlbmFibGUgV2lGaSBpZiBpdCdzIGRpc2FibGVkIHdoZW4gY2FsbGluZyBhbnkgYW5kcm9pZCByZWxhdGVkIG1ldGhvZHMgdGhhdCByZXF1aXJlIFdpRmkgdG8gYmUgZW5hYmxlZCpcbiAqXG4gKiAgIyMgQ29ubmVjdCB2cyBFbmFibGVcbiAqICBXaGVuIHdyaXRpbmcgQW5kcm9pZCBKYXZhIGNvZGUsIHRoZXJlIGlzIG5vIGBjb25uZWN0YCBtZXRob2RzLCB5b3UgYmFzaWNhbGx5IGVpdGhlciBgZW5hYmxlYCBvciBgZGlzYWJsZWAgYSBuZXR3b3JrLiBJbiB0aGUgb3JpZ2luYWwgdmVyc2lvbnMgb2YgV2lmaVdpemFyZCB0aGUgYGNvbm5lY3RgIG1ldGhvZCB3b3VsZCBiYXNpY2FsbHkganVzdCBjYWxsIGBlbmFibGVgIGluIEFuZHJvaWQuXG4gKiAgSSBoYXZlIGNoYW5nZWQgdGhlIHdheSB0aGlzIHdvcmtzIGluIFdpZmlXaXphcmQyIHZlcnNpb24gMy4wLjArLCBjb252ZXJ0aW5nIGl0IHRvIGEgaGVscGVyIG1ldGhvZCB0byBlbGltaW5hdGUgaGF2aW5nIHRvIGNhbGwgYGZvcm1hdFdpZmlDb25maWdgIHRoZW4gYGFkZGAgYW5kIHRoZW4gYGVuYWJsZWAgLi4uIHRoZSBgY29ubmVjdGAgbWV0aG9kIHdpbGwgbm93IGF1dG9tYXRpY2FsbHkgY2FsbCBgZm9ybWF0V2lmaUNvbmZpZ2AsIHRoZW4gY2FsbCBgYWRkYCB0byBlaXRoZXIgYWRkIG9yIHVwZGF0ZSB0aGUgbmV0d29yayBjb25maWd1cmF0aW9uLCBhbmQgdGhlbiBjYWxsIGBlbmFibGVgLlxuICogIElmIHRoZSBjb25uZWN0IG1ldGhvZCBpcyB1bmFibGUgdG8gdXBkYXRlIGV4aXN0aW5nIG5ldHdvcmsgY29uZmlndXJhdGlvbiAoYWRkZWQgYnkgdXNlciBvciBvdGhlciBhcHBzKSwgYnV0IHRoZXJlIGlzIGEgdmFsaWQgbmV0d29yayBJRCwgaXQgd2lsbCBzdGlsbCBhdHRlbXB0IHRvIGVuYWJsZSB0aGF0IG5ldHdvcmsgSUQuXG4gKlxuICogIGBgYHR5cGVzY3JpcHRcbiAqICB0aGlzLndpZmlXaXphcmQyLmNvbm5lY3Qoc3NpZCwgYmluZEFsbCwgcGFzc3dvcmQsIGFsZ29yaXRobSwgaXNIaWRkZW5TU0lEKVxuICogIGBgYFxuICogIC0gYHNzaWRgIHNob3VsZCBiZSB0aGUgU1NJRCB0byBjb25uZWN0IHRvICpyZXF1aXJlZCpcbiAqICAtIGBiaW5kQWxsYCBzaG91bGQgYmUgc2V0IHRvIGB0cnVlYCB0byB0ZWxsIEFuZHJvaWQgdG8gcm91dGUgYWxsIGNvbm5lY3Rpb25zIGZyb20geW91ciBBbmRyb2lkIGFwcCwgdGhyb3VnaCB0aGUgd2lmaSBjb25uZWN0aW9uIChkZWZhdWx0IGlzIGBmYWxzZWApICpvcHRpb25hbCpcbiAqICAtIFNlZSBgV2lmaVdpemFyZDIuZW5hYmxlYCBmb3IgbW9yZSBkZXRhaWxzIHJlZ2FyZGluZyBgYmluZEFsbGAgZmVhdHVyZVxuICogIC0gYGFsZ29yaXRobWAgYW5kIGBwYXNzd29yZGAgaXMgbm90IHJlcXVpcmVkIGlmIGNvbm5lY3RpbmcgdG8gYW4gb3BlbiBuZXR3b3JrXG4gKiAgLSBDdXJyZW50bHkgYFdQQWAgYW5kIGBXRVBgIGFyZSBvbmx5IHN1cHBvcnRlZCBhbGdvcml0aG1zXG4gKiAgLSBGb3IgYFdQQTJgIGp1c3QgcGFzcyBgV1BBYCBhcyB0aGUgYWxnb3JpdGhtXG4gKiAgLSBTZXQgYGlzSGlkZGVuU1NJRGAgdG8gYHRydWVgIGlmIHRoZSBuZXR3b3JrIHlvdSdyZSBjb25uZWN0aW5nIHRvIGlzIGhpZGRlblxuICogIC0gVGhlc2UgYXJndW1lbnRzIGFyZSB0aGUgc2FtZSBhcyBmb3IgYGZvcm1hdFdpZmlDb25maWdgXG4gKiAgLSBUaGlzIG1ldGhvZCBlc3NlbnRpYWxseSBjYWxscyBgZm9ybWF0V2lmaUNvbmZpZ2AgdGhlbiBgYWRkYCB0aGVuIGBlbmFibGVgXG4gKiAgLSBJZiB1bmFibGUgdG8gdXBkYXRlIG5ldHdvcmsgY29uZmlndXJhdGlvbiAod2FzIGFkZGVkIGJ5IHVzZXIgb3Igb3RoZXIgYXBwKSwgYnV0IGEgdmFsaWQgbmV0d29yayBJRCBleGlzdHMsIHRoaXMgbWV0aG9kIHdpbGwgc3RpbGwgYXR0ZW1wdCB0byBlbmFibGUgdGhlIG5ldHdvcmtcbiAqICAtIFByb21pc2Ugd2lsbCBub3QgYmUgcmV0dXJuZWQgdW50aWwgbWV0aG9kIGhhcyB2ZXJpZmllZCB0aGF0IGNvbm5lY3Rpb24gdG8gV2lGaSB3YXMgaW4gY29tcGxldGVkIHN0YXRlICh3YWl0cyB1cCB0byA2MCBzZWNvbmRzKVxuICpcbiAqICBUaHJvd24gRXJyb3JzKipcbiAqXG4gKlxuICogIC0gYENPTk5FQ1RfRkFJTEVEX1RJTUVPVVRgIHVuYWJsZSB0byB2ZXJpZnkgY29ubmVjdGlvbiwgdGltZWQgb3V0IGFmdGVyIDYwIHNlY29uZHNcbiAqICAtIGBJTlZBTElEX05FVFdPUktfSURfVE9fQ09OTkVDVGAgVW5hYmxlIHRvIGNvbm5lY3QgYmFzZWQgb24gZ2VuZXJhdGVkIHdpZmkgY29uZmlnXG4gKiAgLSBgSU5URVJQVVRfRVhDRVBUX1dISUxFX0NPTk5FQ1RJTkdgIEludGVydXB0IGV4Y2VwdGlvbiB3aGlsZSB3YWl0aW5nIGZvciBjb25uZWN0aW9uXG4gKlxuICpcbiAqXG4gKiAgIyMgRGlzY29ubmVjdCB2cyBEaXNhYmxlXG4gKiAgU2FtZSBhcyBhYm92ZSBmb3IgQ29ubmVjdCB2cyBFbmFibGUsIGV4Y2VwdCBpbiB0aGlzIHNpdHVhdGlvbiwgYGRpc2Nvbm5lY3RgIHdpbGwgZmlyc3QgZGlzYWJsZSB0aGUgbmV0d29yaywgYW5kIHRoZW4gYXR0ZW1wdCB0byByZW1vdmUgaXQgKGlmIFNTSUQgaXMgcGFzc2VkKVxuICpcbiAqICBgYGB0eXBlc2NyaXB0XG4gKiAgdGhpcy53aWZpV2l6YXJkMi5kaXNjb25uZWN0KHNzaWQpXG4gKiAgYGBgXG4gKiAgLSBgc3NpZGAgY2FuIGVpdGhlciBiZSBhbiBTU0lEIChzdHJpbmcpIG9yIGEgbmV0d29yayBJRCAoaW50ZWdlcilcbiAqICAtIGBzc2lkYCBpcyAqKk9QVElPTkFMKiogLi4gaWYgbm90IHBhc3NlZCwgd2lsbCBkaXNjb25uZWN0IGN1cnJlbnQgV2lGaSAoYWxtb3N0IGFsbCBBbmRyb2lkIHZlcnNpb25zIG5vdyB3aWxsIGp1c3QgYXV0b21hdGljYWxseSByZWNvbm5lY3QgdG8gbGFzdCB3aWZpIGFmdGVyIGRpc2Nvbm5lY3RpbmcpXG4gKiAgLSBJZiBgc3NpZGAgaXMgcHJvdmlkZWQsIHRoaXMgbWV0aG9kIHdpbGwgZmlyc3QgYXR0ZW1wdCB0byBgZGlzYWJsZWAgYW5kIHRoZW4gYHJlbW92ZWAgdGhlIG5ldHdvcmtcbiAqICAtIElmIHlvdSBkbyBub3Qgd2FudCB0byByZW1vdmUgbmV0d29yayBjb25maWd1cmF0aW9uLCB1c2UgYGRpc2FibGVgIGluc3RlYWRcbiAqXG4gKiAgVGhyb3duIEVycm9ycyoqXG4gKlxuICogIC0gYERJU0NPTk5FQ1RfTkVUX1JFTU9WRV9FUlJPUmAgQW5kcm9pZCByZXR1cm5lZCBlcnJvciB3aGVuIHJlbW92aW5nIHdpZmkgY29uZmlndXJhdGlvblxuICogIC0gYERJU0NPTk5FQ1RfTkVUX0RJU0FCTEVfRVJST1JgIFVuYWJsZSB0byBjb25uZWN0IGJhc2VkIG9uIGdlbmVyYXRlZCB3aWZpIGNvbmZpZ1xuICogIC0gYERJU0NPTk5FQ1RfTkVUX0lEX05PVF9GT1VORGAgVW5hYmxlIHRvIGRldGVybWluZSBuZXR3b3JrIElEIHRvIGRpc2Nvbm5lY3QvcmVtb3ZlIChmcm9tIHBhc3NlZCBTU0lEKVxuICogIC0gYEVSUk9SX0RJU0NPTk5FQ1RgIC0gQW5kcm9pZCBlcnJvciBkaXNjb25uZWN0aW5nIHdpZmkgKG9ubHkgd2hlbiBTU0lEIGlzIG5vdCBwYXNzZWQpXG4gKlxuICogIGBgYHR5cGVzY3JpcHRcbiAqICB0aGlzLndpZmlXaXphcmQyLmZvcm1hdFdpZmlDb25maWcoc3NpZCwgcGFzc3dvcmQsIGFsZ29yaXRobSwgaXNIaWRkZW5TU0lEKVxuICogIGBgYFxuICogIC0gYGFsZ29yaXRobWAgYW5kIGBwYXNzd29yZGAgaXMgbm90IHJlcXVpcmVkIGlmIGNvbm5lY3RpbmcgdG8gYW4gb3BlbiBuZXR3b3JrXG4gKiAgLSBDdXJyZW50bHkgYFdQQWAgYW5kIGBXRVBgIGFyZSBvbmx5IHN1cHBvcnRlZCBhbGdvcml0aG1zXG4gKiAgLSBGb3IgYFdQQTJgIGp1c3QgcGFzcyBgV1BBYCBhcyB0aGUgYWxnb3JpdGhtXG4gKiAgLSBTZXQgYGlzSGlkZGVuU1NJRGAgdG8gYHRydWVgIGlmIHRoZSBuZXR3b3JrIHlvdSdyZSBjb25uZWN0aW5nIHRvIGlzIGhpZGRlblxuICogIGBgYHR5cGVzY3JpcHRcbiAqICB0aGlzLndpZmlXaXphcmQyLmZvcm1hdFdQQUNvbmZpZyhzc2lkLCBwYXNzd29yZCwgaXNIaWRkZW5TU0lEKVxuICogIGBgYFxuICogIC0gVGhpcyBpcyBqdXN0IGEgaGVscGVyIG1ldGhvZCB0aGF0IGNhbGxzIGBXaWZpV2l6YXJkMi5mb3JtYXRXaWZpQ29uZmlnKCBzc2lkLCBwYXNzd29yZCwgJ1dQQScsIGlzSGlkZGVuU1NJRCApO2BcbiAqXG4gKiAgYGBgdHlwZXNjcmlwdFxuICogIHRoaXMud2lmaVdpemFyZDIuYWRkKHdpZmkpXG4gKiAgYGBgXG4gKiAgLSBgd2lmaWAgbXVzdCBiZSBhbiBvYmplY3QgZm9ybWF0dGVkIGJ5IGBmb3JtYXRXaWZpQ29uZmlnYCwgdGhpcyAqKm11c3QqKiBiZSBkb25lIGJlZm9yZSBjYWxsaW5nIGBlbmFibGVgXG4gKlxuICogIFRocm93biBFcnJvcnMqKlxuICpcbiAqICAtIGBBVVRIX1RZUEVfTk9UX1NVUFBPUlRFRGAgLSBJbnZhbGlkIGF1dGggdHlwZSBzcGVjaWZpZWRcbiAqICAtIGBFUlJPUl9BRERJTkdfTkVUV09SS2AgLSBBbmRyb2lkIHJldHVybmVkIGAtMWAgc3BlY2lmeWluZyBlcnJvciBhZGRpbmcgbmV0d29ya1xuICogIC0gYEVSUk9SX1VQREFUSU5HX05FVFdPUktgIC0gU2FtZSBhcyBhYm92ZSwgZXhjZXB0IGFuIGV4aXN0aW5nIG5ldHdvcmsgSUQgd2FzIGZvdW5kLCBhbmQgdW5hYmxlIHRvIHVwZGF0ZSBpdFxuICpcbiAqICBgYGB0eXBlc2NyaXB0XG4gKiAgdGhpcy53aWZpV2l6YXJkMi5yZW1vdmUoc3NpZClcbiAqICBgYGBcbiAqICAtIGBzc2lkYCBjYW4gZWl0aGVyIGJlIGFuIFNTSUQgKHN0cmluZykgb3IgYSBuZXR3b3JrIElEIChpbnRlZ2VyKVxuICogIC0gUGxlYXNlIG5vdGUsIG1vc3QgbmV3ZXIgdmVyc2lvbnMgb2YgQW5kcm9pZCB3aWxsIG9ubHkgYWxsb3cgd2lmaSB0byBiZSByZW1vdmVkIGlmIGNyZWF0ZWQgYnkgeW91ciBhcHBsaWNhdGlvblxuICpcbiAqICBUaHJvd24gRXJyb3JzKipcbiAqXG4gKiAgLSBgVU5BQkxFX1RPX1JFTU9WRWAgQW5kcm9pZCByZXR1cm5lZCBmYWlsdXJlIGluIHJlbW92aW5nIG5ldHdvcmtcbiAqICAtIGBSRU1PVkVfTkVUV09SS19OT1RfRk9VTkRgIFVuYWJsZSB0byBkZXRlcm1pbmUgbmV0d29yayBJRCBmcm9tIHBhc3NlZCBTU0lEXG4gKlxuICpcbiAqICBgYGB0eXBlc2NyaXB0XG4gKiAgdGhpcy53aWZpV2l6YXJkMi5saXN0TmV0d29ya3MoKVxuICogIGBgYFxuICpcbiAqICBgYGB0eXBlc2NyaXB0XG4gKiAgdGhpcy53aWZpV2l6YXJkMi5zY2FuKFtvcHRpb25zXSlcbiAqICBgYGBcbiAqICAtIFNhbWUgYXMgY2FsbGluZyBgc3RhcnRTY2FuYCBhbmQgdGhlbiBgZ2V0U2NhblJlc3VsdHNgLCBleGNlcHQgdGhpcyBtZXRob2Qgd2lsbCBvbmx5IHJlc29sdmUgdGhlIHByb21pc2UgYWZ0ZXIgdGhlIHNjYW4gY29tcGxldGVzIGFuZCByZXR1cm5zIHRoZSByZXN1bHRzLlxuICpcbiAqICBgYGB0eXBlc2NyaXB0XG4gKiAgdGhpcy53aWZpV2l6YXJkMi5zdGFydFNjYW4oKVxuICogIGBgYFxuICogIC0gSXQgaXMgcmVjb21tZW5kZWQgdG8ganVzdCB1c2UgdGhlIGBzY2FuYCBtZXRob2QgaW5zdGVhZCBvZiBgc3RhcnRTY2FuYFxuICpcbiAqICBUaHJvd24gRXJyb3JzKipcbiAqXG4gKiAgLSBgU1RBUlRTQ0FOX0ZBSUxFRGAgQW5kcm9pZCByZXR1cm5lZCBmYWlsdXJlIGluIHN0YXJ0aW5nIHNjYW5cbiAqXG4gKlxuICogIGBgYHR5cGVzY3JpcHRcbiAqICB0aGlzLndpZmlXaXphcmQyLmdldFNjYW5SZXN1bHRzKFtvcHRpb25zXSlcbiAqICBgYGBcbiAqICAtIGBnZXRTY2FuUmVzdWx0c2Agc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGFmdGVyIGNhbGxpbmcgYHN0YXJ0U2NhbmAgKGl0IGlzIHJlY29tbWVuZGVkIHRvIHVzZSBgc2NhbmAgaW5zdGVhZCBhcyB0aGlzIHN0YXJ0cyB0aGUgc2NhbiwgdGhlbiByZXR1cm5zIHRoZSByZXN1bHRzKVxuICogIC0gYFtvcHRpb25zXWAgaXMgb3B0aW9uYWwsIGlmIHlvdSBkbyBub3Qgd2FudCB0byBzcGVjaWZ5LCBqdXN0IHBhc3MgYHN1Y2Nlc3NgIGNhbGxiYWNrIGFzIGZpcnN0IHBhcmFtZXRlciwgYW5kIGBmYWlsYCBjYWxsYmFjayBhcyBzZWNvbmQgcGFyYW1ldGVyXG4gKiAgLSBSZXRyaWV2ZXMgYSBsaXN0IG9mIHRoZSBhdmFpbGFibGUgbmV0d29ya3MgYXMgYW4gYXJyYXkgb2Ygb2JqZWN0cyBhbmQgcGFzc2VzIHRoZW0gdG8gdGhlIGZ1bmN0aW9uIGxpc3RIYW5kbGVyLiBUaGUgZm9ybWF0IG9mIHRoZSBhcnJheSBpczpcbiAqICBgYGB0eXBlc2NyaXB0XG4gKiAgbmV0d29ya3MgPSBbXG4gKiAgeyAgIFwibGV2ZWxcIjogc2lnbmFsX2xldmVsLCAvLyByYXcgUlNTSSB2YWx1ZVxuICogICAgICAgICBcIlNTSURcIjogc3NpZCwgLy8gU1NJRCBhcyBzdHJpbmcsIHdpdGggZXNjYXBlZCBkb3VibGUgcXVvdGVzOiBcIlxcXCJzc2lkIG5hbWVcXFwiXCJcbiAqICAgICAgICAgXCJCU1NJRFwiOiBic3NpZCAvLyBNQUMgYWRkcmVzcyBvZiBXaUZpIHJvdXRlciBhcyBzdHJpbmdcbiAqICAgICAgICAgXCJmcmVxdWVuY3lcIjogZnJlcXVlbmN5IG9mIHRoZSBhY2Nlc3MgcG9pbnQgY2hhbm5lbCBpbiBNSHpcbiAqICAgICAgICAgXCJjYXBhYmlsaXRpZXNcIjogY2FwYWJpbGl0aWVzIC8vIERlc2NyaWJlcyB0aGUgYXV0aGVudGljYXRpb24sIGtleSBtYW5hZ2VtZW50LCBhbmQgZW5jcnlwdGlvbiBzY2hlbWVzIHN1cHBvcnRlZCBieSB0aGUgYWNjZXNzIHBvaW50LlxuICogICAgICAgICBcInRpbWVzdGFtcFwiOiB0aW1lc3RhbXAgLy8gdGltZXN0YW1wIG9mIHdoZW4gdGhlIHNjYW4gd2FzIGNvbXBsZXRlZFxuICogICAgICAgICBcImNoYW5uZWxXaWR0aFwiOlxuICogICAgICAgICBcImNlbnRlckZyZXEwXCI6XG4gKiAgICAgICAgIFwiY2VudGVyRnJlcTFcIjpcbiAqICAgICB9XG4gKiAgXVxuICogIGBgYFxuICogIC0gYGNoYW5uZWxXaWR0aGAgYGNlbnRlckZyZXEwYCBhbmQgYGNlbnRlckZyZXExYCBhcmUgb25seSBzdXBwb3J0ZWQgb24gQVBJID4gMjMgKE1hcnNobWFsbG93KSwgYW55IG9sZGVyIEFQSSB3aWxsIHJldHVybiBudWxsIGZvciB0aGVzZSB2YWx1ZXNcbiAqXG4gKiAgQW4gb3B0aW9ucyBvYmplY3QgbWF5IGJlIHBhc3NlZC4gQ3VycmVudGx5LCB0aGUgb25seSBzdXBwb3J0ZWQgb3B0aW9uIGlzIGBudW1MZXZlbHNgLCBhbmQgaXQgaGFzIHRoZSBmb2xsb3dpbmcgYmVoYXZpb3I6XG4gKlxuICogIC0gaWYgYChuID09IHRydWUgfHwgbiA8IDIpYCwgYCouZ2V0U2NhblJlc3VsdHMoe251bUxldmVsczogbn0pYCB3aWxsIHJldHVybiBkYXRhIGFzIGJlZm9yZSwgc3BsaXQgaW4gNSBsZXZlbHM7XG4gKiAgLSBpZiBgKG4gPiAxKWAsIGAqLmdldFNjYW5SZXN1bHRzKHtudW1MZXZlbHM6IG59KWAgd2lsbCBjYWxjdWxhdGUgdGhlIHNpZ25hbCBsZXZlbCwgc3BsaXQgaW4gbiBsZXZlbHM7XG4gKiAgLSBpZiBgKG4gPT0gZmFsc2UpYCwgYCouZ2V0U2NhblJlc3VsdHMoe251bUxldmVsczogbn0pYCB3aWxsIHVzZSB0aGUgcmF3IHNpZ25hbCBsZXZlbDtcbiAqXG4gKiAgYGBgdHlwZXNjcmlwdFxuICogIHRoaXMud2lmaVdpemFyZDIuaXNXaWZpRW5hYmxlZCgpXG4gKiAgYGBgXG4gKiAgLSBSZXR1cm5zIGJvb2xlYW4gdmFsdWUgb2Ygd2hldGhlciBXaWZpIGlzIGVuYWJsZWQgb3Igbm90XG4gKiAgYGBgdHlwZXNjcmlwdFxuICogIHRoaXMud2lmaVdpemFyZDIuc2V0V2lmaUVuYWJsZWQoZW5hYmxlZClcbiAqICBgYGBcbiAqICAtIFBhc3MgYHRydWVgIGZvciBgZW5hYmxlZGAgcGFyYW1ldGVyIHRvIHNldCBXaWZpIGVuYWJsZWRcbiAqICAtIFlvdSBkbyBub3QgbmVlZCB0byBjYWxsIHRoaXMgZnVuY3Rpb24gdG8gc2V0IFdpRmkgZW5hYmxlZCB0byBjYWxsIG90aGVyIG1ldGhvZHMgdGhhdCByZXF1aXJlIHdpZmkgZW5hYmxlZC4gIFRoaXMgcGx1Z2luIHdpbGwgYXV0b21hZ2ljYWxseSBlbmFibGUgV2lGaSBpZiBhIG1ldGhvZCBpcyBjYWxsZWQgdGhhdCByZXF1aXJlcyBXaUZpIHRvIGJlIGVuYWJsZWQuXG4gKlxuICogIFRocm93biBFcnJvcnMqKlxuICpcbiAqICAtIGBFUlJPUl9TRVRXSUZJRU5BQkxFRGAgd2lmaSBzdGF0ZSBkb2VzIG5vdCBtYXRjaCBjYWxsIChlbmFibGUgb3IgZGlzYWJsZSlcbiAqXG4gKiAgYGBgdHlwZXNjcmlwdFxuICogIHRoaXMud2lmaVdpemFyZDIuZ2V0Q29ubmVjdGVkTmV0d29ya0lEKClcbiAqICBgYGBcbiAqICAtIFJldHVybnMgY3VycmVudGx5IGNvbm5lY3RlZCBuZXR3b3JrIElEIGluIHN1Y2Nlc3MgY2FsbGJhY2sgKG9ubHkgaWYgY29ubmVjdGVkKSwgb3RoZXJ3aXNlIGZhaWwgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWRcbiAqXG4gKiAgKipUaHJvd24gRXJyb3JzKipcbiAqXG4gKiAgLSBgR0VUX0NPTk5FQ1RFRF9ORVRfSURfRVJST1JgIFVuYWJsZSB0byBkZXRlcm1pbmUgY3VycmVudGx5IGNvbm5lY3RlZCBuZXR3b3JrIElEIChtYXkgbm90IGJlIGNvbm5lY3RlZClcbiAqXG4gKiAgIyMgTmV3IHRvIDMuMS4xK1xuICogIGBgYHR5cGVzY3JpcHRcbiAqICB0aGlzLndpZmlXaXphcmQyLnJlc2V0QmluZEFsbCgpXG4gKiAgYGBgXG4gKiAgLSBEaXNhYmxlIGJpbmRBbGwgdG8gV2lGaSBuZXR3b3JrIHdpdGhvdXQgZGlzY29ubmVjdGluZyBmcm9tIFdpRmlcbiAqXG4gKiAgYGBgdHlwZXNjcmlwdFxuICogIHRoaXMud2lmaVdpemFyZDIuc2V0QmluZEFsbCgpXG4gKiAgYGBgXG4gKiAgLSBFbmFibGUgYmluZEFsbCB0byBXaUZpIG5ldHdvcmsgd2l0aG91dCBkaXNjb25uZWN0aW5nIGZyb20gV2lGaVxuICpcbiAqICBgYGB0eXBlc2NyaXB0XG4gKiAgdGhpcy53aWZpV2l6YXJkMi5jYW5Db25uZWN0VG9JbnRlcm5ldCgpXG4gKiAgYGBgXG4gKlxuICogIC0gUmV0dXJucyBib29sZWFuLCB0cnVlIG9yIGZhbHNlLCBpZiBkZXZpY2UgaXMgYWJsZSB0byBjb25uZWN0IHRvIGh0dHBzOi8vd3d3Lmdvb2dsZS5jb20gdmlhIEhUVFAgY29ubmVjdGlvbiAoc2luY2UgcGluZyBpcyB1bnJlbGlhYmxlKVxuICogIC0gVW5rbm93biBlcnJvcnMgd2lsbCBzdGlsbCBiZSB0aHJvd24gbGlrZSBhbGwgb3RoZXIgYXN5bmMgZnVuY3Rpb25zXG4gKiAgLSBJZiB5b3UgY2FsbGVkIGBjb25uZWN0YCBvciBgZW5hYmxlYCBhbmQgcGFzc2VkIGB0cnVlYCBmb3IgYGJpbmRBbGxgLCB5b3VyIGFwcGxpY2F0aW9uIHdpbGwgZm9yY2UgdGhlIHBpbmcgdGhyb3VnaCB3aWZpIGNvbm5lY3Rpb24uXG4gKiAgLSBJZiB5b3UgZGlkIG5vdCBwYXNzIGB0cnVlYCAob3IgcGFzc2VkIGBmYWxzZWApIGZvciBgYmluZEFsbGAsIGFuZCB0aGUgd2lmaSBkb2VzIG5vdCBoYXZlIGludGVybmV0IGNvbm5lY3Rpb24sIEFuZHJvaWQgTG9sbGlwb3ArIChBUEkgMjErKSB3aWxsIHVzZSBjZWxsIGNvbm5lY3Rpb24gdG8gcGluZyAoZHVlIHRvIEFuZHJvaWQgdXNpbmcgY2VsbCBjb25uZWN0aW9uIHdoZW4gd2lmaSBkb2VzIG5vdCBoYXZlIGludGVybmV0KSBbTW9yZSBEZXRhaWxzXShodHRwczovL2FuZHJvaWQtZGV2ZWxvcGVycy5nb29nbGVibG9nLmNvbS8yMDE2LzA3L2Nvbm5lY3RpbmcteW91ci1hcHAtdG8td2ktZmktZGV2aWNlLmh0bWwpXG4gKlxuICpcbiAqICBgYGB0eXBlc2NyaXB0XG4gKiAgdGhpcy53aWZpV2l6YXJkMi5jYW5Db25uZWN0VG9Sb3V0ZXIoKVxuICogIGBgYFxuICogIC0gQXMgYGNhblBpbmdXaWZpUm91dGVyYCBpcyBub3RvcmlvdXNseSB1bnJlbGlhYmxlLCB0aGlzIG1ldGhvZCB1c2VzIEhUVFAgY29ubmVjdGlvbiB0byB0ZXN0IGlmIGFibGUgdG8gY29ubmVjdCB0byByb3V0ZXIgKGFzIG1vc3Qgcm91dGVycyBzaG91bGQgaGF2ZSB3ZWIgc2VydmVyIHJ1bm5pbmcgb24gcG9ydCA4MClcbiAqICAtIFVua25vd24gZXJyb3JzIHdpbGwgc3RpbGwgYmUgdGhyb3duIGxpa2UgYWxsIG90aGVyIGFzeW5jIGZ1bmN0aW9uc1xuICogIC0gVGhpcyBpcyB1c2VmdWwgZm9yIHRlc3RpbmcgdG8gbWFrZSBzdXJlIHRoYXQgeW91ciBBbmRyb2lkIGFwcCBpcyBhYmxlIHRvIGNvbm5lY3QgdG8gdGhlIHByaXZhdGUgbmV0d29yayBhZnRlciBjb25uZWN0aW5nIHRvIFdpRmlcbiAqICAtIFRoaXMgd2FzIGFkZGVkIGZvciB0ZXN0aW5nIHRoZSBgYmluZEFsbGAgZmVhdHVyZSB0byBzdXBwb3J0IGlzc3VlcyB3aXRoIEFuZHJvaWQgTG9sbGlwb3ArIChBUEkgMjErKSBub3Qgcm91dGluZyBjYWxscyB0aHJvdWdoIFdpRmkgaWYgV2lGaSBkb2VzIG5vdCBoYXZlIGludGVybmV0IGNvbm5lY3Rpb24gW1NlZSBBbmRyb2lkIEJsb2ddKGh0dHBzOi8vYW5kcm9pZC1kZXZlbG9wZXJzLmdvb2dsZWJsb2cuY29tLzIwMTYvMDcvY29ubmVjdGluZy15b3VyLWFwcC10by13aS1maS1kZXZpY2UuaHRtbClcbiAqICAtIEF0dGVtcHRzIHRvIGNvbm5lY3Qgcm91dGVyIElQIEhUVFAgc2VydmVyIG9uIHBvcnQgODAgKGV4YW1wbGU6IGBodHRwOi8vMTkyLjE2OC4wLjEvYCB3aGVyZSBgMTkyLjE2OC4wLjFgIGlzIHRoZSBhdXRvbWF0aWNhbGx5IGRldGVjdGVkIElQIGFkZHJlc3MpXG4gKlxuICogICMjIE5ldyB0byAzLjAuMCtcbiAqICBgYGB0eXBlc2NyaXB0XG4gKiAgdGhpcy53aWZpV2l6YXJkMi5pc0Nvbm5lY3RlZFRvSW50ZXJuZXQoKVxuICogIGBgYFxuICpcbiAqICAtIFJldHVybnMgYm9vbGVhbiwgdHJ1ZSBvciBmYWxzZSwgaWYgZGV2aWNlIGlzIGFibGUgdG8gcGluZyA4LjguOC44XG4gKiAgLSBVbmtub3duIGVycm9ycyB3aWxsIHN0aWxsIGJlIHRocm93biBsaWtlIGFsbCBvdGhlciBhc3luYyBmdW5jdGlvbnNcbiAqICAtIElmIHlvdSBjYWxsZWQgYGNvbm5lY3RgIG9yIGBlbmFibGVgIGFuZCBwYXNzZWQgYHRydWVgIGZvciBgYmluZEFsbGAsIHlvdXIgYXBwbGljYXRpb24gd2lsbCBmb3JjZSB0aGUgcGluZyB0aHJvdWdoIHdpZmkgY29ubmVjdGlvbi5cbiAqICAtIElmIHlvdSBkaWQgbm90IHBhc3MgYHRydWVgIChvciBwYXNzZWQgYGZhbHNlYCkgZm9yIGBiaW5kQWxsYCwgYW5kIHRoZSB3aWZpIGRvZXMgbm90IGhhdmUgaW50ZXJuZXQgY29ubmVjdGlvbiwgQW5kcm9pZCBMb2xsaXBvcCsgKEFQSSAyMSspIHdpbGwgdXNlIGNlbGwgY29ubmVjdGlvbiB0byBwaW5nIChkdWUgdG8gQW5kcm9pZCB1c2luZyBjZWxsIGNvbm5lY3Rpb24gd2hlbiB3aWZpIGRvZXMgbm90IGhhdmUgaW50ZXJuZXQpIFtNb3JlIERldGFpbHNdKGh0dHBzOi8vYW5kcm9pZC1kZXZlbG9wZXJzLmdvb2dsZWJsb2cuY29tLzIwMTYvMDcvY29ubmVjdGluZy15b3VyLWFwcC10by13aS1maS1kZXZpY2UuaHRtbClcbiAqXG4gKiAgYGBgdHlwZXNjcmlwdFxuICogIHRoaXMud2lmaVdpemFyZDIuY2FuUGluZ1dpZmlSb3V0ZXIoKVxuICogIGBgYFxuICpcbiAqICAtIFJldHVybnMgYm9vbGVhbiwgdHJ1ZSBvciBmYWxzZSwgaWYgZGV2aWNlIGlzIGFibGUgdG8gcGluZyB0aGUgY29ubmVjdGVkIFdpRmkgcm91dGVyIElQIChvYnRhaW5lZCBmcm9tIERIQ1AgaW5mbylcbiAqICAtIFZlcnNpb24gMy4xLjErIHVzZXMgSFRUUCBjb25uZWN0aW9uIHRvIHRlc3QgaWYgYWJsZSB0byBjb25uZWN0IHRvIHJvdXRlciAoYXMgcGluZyBwcmV2aW91cyBkaWQgbm90IHdvcmspXG4gKiAgLSBVbmtub3duIGVycm9ycyB3aWxsIHN0aWxsIGJlIHRocm93biBsaWtlIGFsbCBvdGhlciBhc3luYyBmdW5jdGlvbnNcbiAqICAtIFRoaXMgaXMgdXNlZnVsIGZvciB0ZXN0aW5nIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdXIgQW5kcm9pZCBhcHAgaXMgYWJsZSB0byBjb25uZWN0IHRvIHRoZSBwcml2YXRlIG5ldHdvcmsgYWZ0ZXIgY29ubmVjdGluZyB0byBXaUZpXG4gKiAgLSBUaGlzIHdhcyBhZGRlZCBmb3IgdGVzdGluZyB0aGUgYGJpbmRBbGxgIGZlYXR1cmUgdG8gc3VwcG9ydCBpc3N1ZXMgd2l0aCBBbmRyb2lkIExvbGxpcG9wKyAoQVBJIDIxKykgbm90IHJvdXRpbmcgY2FsbHMgdGhyb3VnaCBXaUZpIGlmIFdpRmkgZG9lcyBub3QgaGF2ZSBpbnRlcm5ldCBjb25uZWN0aW9uIFtTZWUgQW5kcm9pZCBCbG9nXShodHRwczovL2FuZHJvaWQtZGV2ZWxvcGVycy5nb29nbGVibG9nLmNvbS8yMDE2LzA3L2Nvbm5lY3RpbmcteW91ci1hcHAtdG8td2ktZmktZGV2aWNlLmh0bWwpXG4gKlxuICogIGBgYHR5cGVzY3JpcHRcbiAqICB0aGlzLndpZmlXaXphcmQyLmVuYWJsZVdpZmkoKVxuICogIGBgYFxuICpcbiAqICBgYGB0eXBlc2NyaXB0XG4gKiAgdGhpcy53aWZpV2l6YXJkMi5kaXNhYmxlV2lmaSgpXG4gKiAgYGBgXG4gKlxuICogIGBgYHR5cGVzY3JpcHRcbiAqICB0aGlzLndpZmlXaXphcmQyLmdldFdpZmlJUCgpXG4gKiAgYGBgXG4gKiAgLSBSZXR1cm5zIElQdjQgYWRkcmVzcyBvZiBjdXJyZW50bHkgY29ubmVjdGVkIFdpRmksIG9yIHJlamVjdHMgcHJvbWlzZSBpZiBJUCBub3QgZm91bmQgb3Igd2lmaSBub3QgY29ubmVjdGVkXG4gKlxuICogIGBgYHR5cGVzY3JpcHRcbiAqICB0aGlzLndpZmlXaXphcmQyLmdldFdpZmlSb3V0ZXJJUCgpXG4gKiAgYGBgXG4gKiAgLSBSZXR1cm5zIElQdjQgV2lGaSByb3V0ZXIgSVAgZnJvbSBjdXJyZW50bHkgY29ubmVjdGVkIFdpRmksIG9yIHJlamVjdHMgcHJvbWlzZSBpZiB1bmFibGUgdG8gZGV0ZXJtaW5lLCBvciB3aWZpIG5vdCBjb25uZWN0ZWRcbiAqXG4gKiAgKipUaHJvd24gRXJyb3JzKipcbiAqXG4gKiAgLSBgTk9fVkFMSURfSVBfSURFTlRJRklFRGAgaWYgdW5hYmxlIHRvIGRldGVybWluZSBhIHZhbGlkIElQIChpcCByZXR1cm5lZCBmcm9tIGRldmljZSBpcyBgMC4wLjAuMGApXG4gKlxuICogIGBgYHR5cGVzY3JpcHRcbiAqICB0aGlzLndpZmlXaXphcmQyLmdldFdpZmlJUEluZm8oKVxuICogIGBgYFxuICogIC0gUmV0dXJucyBhIEpTT04gb2JqZWN0IHdpdGggSVB2NCBhZGRyZXNzIGFuZCBzdWJuZXQgYHtcImlwXCI6IFwiMTkyLjE2OC4xLjJcIiwgXCJzdWJuZXRcIjogXCIyNTUuMjU1LjI1NS4wXCIgfWAgb3IgcmVqZWN0ZWQgcHJvbWlzZSBpZiBub3QgZm91bmQgb3Igbm90IGNvbm5lY3RlZFxuICogICoqVGhyb3duIEVycm9ycyoqXG4gKlxuICogIC0gYE5PX1ZBTElEX0lQX0lERU5USUZJRURgIGlmIHVuYWJsZSB0byBkZXRlcm1pbmUgYSB2YWxpZCBJUCAoaXAgcmV0dXJuZWQgZnJvbSBkZXZpY2UgaXMgYDAuMC4wLjBgKVxuICpcbiAqICBgYGB0eXBlc2NyaXB0XG4gKiAgdGhpcy53aWZpV2l6YXJkMi5yZWNvbm5lY3QoKVxuICogIGBgYFxuICogIC0gUmVjb25uZWN0IHRvIHRoZSBjdXJyZW50bHkgYWN0aXZlIGFjY2VzcyBwb2ludCwgKippZiB3ZSBhcmUgY3VycmVudGx5IGRpc2Nvbm5lY3RlZC4qKlxuICpcbiAqICAqKlRocm93biBFcnJvcnMqKlxuICpcbiAqICAtIGBFUlJPUl9SRUNPTk5FQ1RgIEFuZHJvaWQgcmV0dXJuZWQgZXJyb3Igd2hlbiByZWNvbm5lY3RpbmdcbiAqXG4gKiAgYGBgdHlwZXNjcmlwdFxuICogIHRoaXMud2lmaVdpemFyZDIucmVhc3NvY2lhdGUoKVxuICogIGBgYFxuICogIC0gUmVjb25uZWN0IHRvIHRoZSBjdXJyZW50bHkgYWN0aXZlIGFjY2VzcyBwb2ludCwgKipldmVuIGlmIHdlIGFyZSBhbHJlYWR5IGNvbm5lY3RlZC4qKlxuICpcbiAqICAqKlRocm93biBFcnJvcnMqKlxuICpcbiAqICAtIGBFUlJPUl9SRUFTU09DSUFURWAgQW5kcm9pZCByZXR1cm5lZCBlcnJvciB3aGVuIHJlYXNzb2NpYXRpbmdcbiAqXG4gKlxuICogIGBgYHR5cGVzY3JpcHRcbiAqICB0aGlzLndpZmlXaXphcmQyLmdldFNTSUROZXR3b3JrSUQoc3NpZClcbiAqICBgYGBcbiAqICAtIEdldCBBbmRyb2lkIE5ldHdvcmsgSUQgZnJvbSBwYXNzZWQgU1NJRFxuICpcbiAqICBgYGB0eXBlc2NyaXB0XG4gKiAgdGhpcy53aWZpV2l6YXJkMi5kaXNhYmxlKHNzaWQpXG4gKiAgYGBgXG4gKiAgLSBgc3NpZGAgY2FuIGVpdGhlciBiZSBhbiBTU0lEIChzdHJpbmcpIG9yIGEgbmV0d29yayBJRCAoaW50ZWdlcilcbiAqICAtIERpc2FibGUgdGhlIHBhc3NlZCBTU0lEIG5ldHdvcmtcbiAqICAtIFBsZWFzZSBub3RlIHRoYXQgbW9zdCBuZXdlciB2ZXJzaW9ucyBvZiBBbmRyb2lkIHdpbGwgb25seSBhbGxvdyB5b3UgdG8gZGlzYWJsZSBuZXR3b3JrcyBjcmVhdGVkIGJ5IHlvdXIgYXBwbGljYXRpb25cbiAqXG4gKiAgKipUaHJvd24gRXJyb3JzKipcbiAqXG4gKiAgLSBgVU5BQkxFX1RPX0RJU0FCTEVgIEFuZHJvaWQgcmV0dXJuZWQgZmFpbHVyZSBpbiBkaXNhYmxpbmcgbmV0d29ya1xuICogIC0gYERJU0FCTEVfTkVUV09SS19OT1RfRk9VTkRgIFVuYWJsZSB0byBkZXRlcm1pbmUgbmV0d29yayBJRCBmcm9tIHBhc3NlZCBTU0lEIHRvIGRpc2FibGVcbiAqXG4gKlxuICogIGBgYHR5cGVzY3JpcHRcbiAqICB0aGlzLndpZmlXaXphcmQyLnJlcXVlc3RQZXJtaXNzaW9uKClcbiAqICBgYGBcbiAqICAtIFJlcXVlc3QgYEFDQ0VTU19GSU5FX0xPQ0FUSU9OYCBwZXJtc3Npb25cbiAqICAtIFRoaXMgQW5kcm9pZCBwZXJtaXNzaW9uIGlzIHJlcXVpcmVkIHRvIHJ1biBgc2NhbmAsIGBzdGFydFN0YXJ0YCBhbmQgYGdldFNjYW5SZXN1bHRzYFxuICogIC0gWW91IGNhbiByZXF1ZXN0IHBlcm1pc3Npb24gYnkgcnVubmluZyB0aGlzIGZ1bmN0aW9uIG1hbnVhbGx5LCBvciBXaWZpV2l6YXJkMiB3aWxsIGF1dG9tYWdpY2FsbHkgcmVxdWVzdCBwZXJtaXNzaW9uIHdoZW4gb25lIG9mIHRoZSBmdW5jdGlvbnMgYWJvdmUgaXMgY2FsbGVkXG4gKlxuICogICoqVGhyb3duIEVycm9ycyoqXG4gKlxuICogIC0gYFBFUk1JU1NJT05fREVOSUVEYCB1c2VyIGRlbmllZCBwZXJtaXNzaW9uIG9uIGRldmljZVxuICpcbiAqXG4gKiAgYGBgdHlwZXNjcmlwdFxuICogIHRoaXMud2lmaVdpemFyZDIuZW5hYmxlKHNzaWQsIGJpbmRBbGwsIHdhaXRGb3JDb25uZWN0aW9uKVxuICogIGBgYFxuICogIC0gYHNzaWRgIGNhbiBlaXRoZXIgYmUgYW4gU1NJRCAoc3RyaW5nKSBvciBhIG5ldHdvcmsgSUQgKGludGVnZXIpXG4gKiAgLSBgYmluZEFsbGAgc2hvdWxkIGJlIHNldCB0byBgdHJ1ZWAgdG8gdGVsbCBBbmRyb2lkIHRvIHJvdXRlIGFsbCBjb25uZWN0aW9ucyBmcm9tIHlvdXIgQW5kcm9pZCBhcHAsIHRocm91Z2ggdGhlIHdpZmkgY29ubmVjdGlvblxuICogIC0gQW5kcm9pZCBMb2xsaXBvcCsgKEFQSSAyMSspIHdpbGwgbm90IHJvdXRlIGNvbm5lY3Rpb25zIHRvIHRoZSBXaUZpIGRldmljZSBpZiBpdCBkb2VzIG5vdCBoYXZlIGludGVybmV0IGNvbm5lY3Rpb24uICBQYXNzaW5nIGB0cnVlYCB0byBgYmluZEFsbGAgd2lsbCBmb3JjZSBBbmRyb2lkIHRvIHJvdXRlIGNvbm5lY3Rpb25zIGZyb20geW91ciBBbmRyb2lkIGFwcCB0aHJvdWdoIFdpZmksIHJlZ2FyZGxlc3Mgb2YgaW50ZXJuZXQgY29ubmVjdGlvbi5cbiAqICAtIElmIHlvdSBhcmUgaGF2aW5nIHByb2JsZW1zIGNvbm5lY3RpbmcgdG8gYSBsb2NhbCBJUCB0aHJvdWdoIFdpRmkgYmVjYXVzZSBpdCBkb2VzIG5vdCBoYXZlIGludGVybmV0LCB0cnkgZW5hYmxpbmcgYGJpbmRBbGxgIGFuZCB0aGlzIHNob3VsZCBmaXggdGhlIHByb2JsZW0uXG4gKiAgLSBEdXJpbmcgbXkgdGVzdGluZywgc29tZSB2ZXJzaW9ucyBvZiBBbmRyb2lkICg1LjAgLSA3LjEuMikgd291bGQgc3RpbGwgcm91dGUgY29ubmVjdGlvbnMgdGhyb3VnaCBXaUZpIHdpdGhvdXQgaW50ZXJuZXQsIGJ1dCBpdCB3YXMgcmFuZG9tIHRoYXQgc29tZSB2ZXJzaW9ucyB3b3VsZCBhbmQgd291bGQgbm90IHdvcmsuXG4gKiAgLSBUZXN0aW5nIEFuZHJvaWQgT3JlbysgKDguMC4wKykgaWYgd2lmaSBkb2VzIG5vdCBoYXZlIGludGVybmV0LCAxMDAlIG9mIHRoZSB0aW1lIGl0IHdvdWxkIE5PVCByb3V0ZSBjb25uZWN0aW9ucyB0aHJvdWdoIFdpRmksIHNvIHlvdSAqbXVzdCogZW5hYmxlIHRoaXMgZm9yIE9yZW8gb3IgbmV3ZXIgdG8gcm91dGUgY29ubmVjdGlvbnMgZnJvbSB5b3VyIGFwcGxpY2F0aW9uIHRocm91Z2ggd2lmaSB3aXRob3V0IGludGVybmV0LlxuICogIC0gV2hlbiBgYmluZEFsbGAgaXMgZW5hYmxlZCwgKkFMTCogY29ubmVjdGlvbnMgZnJvbSB5b3VyIGFwcCB3aWxsIGJlIHJvdXRlZCB0aHJvdWdoIFdpRmksIHVudGlsIHlvdSBjYWxsIGBkaXNjb25uZWN0YCBvciBgZGlzYWJsZWBcbiAqICAtIFNlZSB0aGUgR29vZ2xlIEFuZHJvaWQgQmxvZyBmb3IgW01vcmUgRGV0YWlsc10oaHR0cHM6Ly9hbmRyb2lkLWRldmVsb3BlcnMuZ29vZ2xlYmxvZy5jb20vMjAxNi8wNy9jb25uZWN0aW5nLXlvdXItYXBwLXRvLXdpLWZpLWRldmljZS5odG1sKVxuICogIC0gVGhpcyBmZWF0dXJlICpPTkxZKiB3b3JrcyBmb3IgQW5kcm9pZCBMb2xsaXBvcCsgKEFQSSAyMSspLCBpZiBkZXZpY2UgaXMgcnVubmluZyBBUEkgb2xkZXIgdGhhbiAyMSwgYGJpbmRhbGxgIHdpbGwgYmUgaWdub3JlZCAoYXMgQVBJIG9sZGVyIHRoYW4gMjEgZG9lcyB0aGlzIGJ5IGRlZmF1bHQpXG4gKiAgLSBFbmFibGUgdGhlIHBhc3NlZCBTU0lEIG5ldHdvcmtcbiAqICAtIFlvdSAqKk1VU1QqKiBjYWxsIGBXaWZpV2l6YXJkMi5hZGQod2lmaSlgIGJlZm9yZSBjYWxsaW5nIGBlbmFibGVgIGFzIHRoZSB3aWZpIGNvbmZpZ3VyYXRpb24gbXVzdCBleGlzdCBiZWZvcmUgeW91IGNhbiBlbmFibGUgaXQgKG9yIHByZXZpb3VzbHkgdXNlZCBgY29ubmVjdGAgd2l0aG91dCBjYWxsaW5nIGBkaXNjb25uZWN0YClcbiAqICAtIFRoaXMgbWV0aG9kIGRvZXMgTk9UIHdhaXQgb3IgdmVyaWZ5IGNvbm5lY3Rpb24gdG8gd2lmaSBuZXR3b3JrLCBwYXNzIGB0cnVlYCB0byBgd2FpdEZvckNvbm5lY3Rpb25gIHRvIG9ubHkgcmV0dXJuIHByb21pc2Ugb25jZSBjb25uZWN0aW9uIGlzIHZlcmlmaWVkIGluIENPTVBMRVRFRCBzdGF0ZSB0byBzcGVjaWZpYyBgc3NpZGBcbiAqXG4gKiAgKipUaHJvd24gRXJyb3JzKipcbiAqXG4gKiAgYFVOQUJMRV9UT19FTkFCTEVgIC0gQW5kcm9pZCByZXR1cm5lZCBgLTFgIHNpZ25pZnlpbmcgZmFpbHVyZSBlbmFibGluZ1xuICpcbiAqICAjIEluc3RhbGxhdGlvblxuICpcbiAqICAjIyBNYXN0ZXJcbiAqXG4gKiAgUnVuIGBgYGNvcmRvdmEgcGx1Z2luIGFkZCBodHRwczovL2dpdGh1Yi5jb20vdHJpcGZsZXgvd2lmaXdpemFyZDJgYGBcbiAqXG4gKiAgVG8gaW5zdGFsbCBmcm9tIHRoZSBtYXN0ZXIgYnJhbmNoIChsYXRlc3Qgb24gR2l0SHViKVxuICpcbiAqICBUbyBpbnN0YWxsIGEgc3BlY2lmaWMgYnJhbmNoIChhZGQgYCN0YWdgIHJlcGxhY2luZyBgdGFnYCB3aXRoIHRhZyBmcm9tIHRoaXMgcmVwbywgZXhhbXBsZTpcbiAqICBgYGBjb3Jkb3ZhIHBsdWdpbiBhZGQgaHR0cHM6Ly9naXRodWIuY29tL3RyaXBmbGV4L3dpZml3aXphcmQyI3YzLjEuMWBgYFxuICpcbiAqICBGaW5kIGF2YWlsYWJsZSB0YWdzIGhlcmU6XG4gKiAgaHR0cHM6Ly9naXRodWIuY29tL3RyaXBmbGV4L1dpZmlXaXphcmQyL3RhZ3NcbiAqXG4gKlxuICogIElmIHlvdSBhcmUgd2FudGluZyB0byBoYXZlIHRoZSBsYXRlc3QgYW5kIGdyZWF0ZXN0IHN0YWJsZSB2ZXJzaW9uLCB0aGVuIHJ1biB0aGUgJ1JlbGVhc2VzJyBjb21tYW5kIGJlbG93LlxuICpcbiAqICAjIyBSZWxlYXNlc1xuICogIFJ1biBgYGBjb3Jkb3ZhIHBsdWdpbiBhZGQgY29yZG92YS1wbHVnaW4td2lmaXdpemFyZDJgYGBcbiAqXG4gKiAgIyMgTWV0ZW9yXG4gKiAgVG8gaW5zdGFsbCBhbmQgdXNlIHRoaXMgcGx1Z2luIGluIGEgTWV0ZW9yIHByb2plY3QsIHlvdSBoYXZlIHRvIHNwZWNpZnkgdGhlIGV4YWN0IHZlcnNpb24gZnJvbSBOUE0gcmVwb3NpdG9yeTpcbiAqICBbaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvY29yZG92YS1wbHVnaW4td2lmaXdpemFyZDJdKGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL2NvcmRvdmEtcGx1Z2luLXdpZml3aXphcmQyKVxuICpcbiAqICBBcyBvZiBBcHJpbCA0dGggMjAxOSwgdGhlIGxhdGVzdCB2ZXJzaW9uIGlzIDMuMS4xOlxuICpcbiAqICBgYGBtZXRlb3IgYWRkIGNvcmRvdmE6Y29yZG92YS1wbHVnaW4td2lmaXdpemFyZDJAMy4xLjFgYGBcbiAqXG4gKiAgIyBFcnJvcnMvUmVqZWN0aW9uc1xuICogIE1ldGhvZHMgbm93IHJldHVybiBmb3JtYXR0ZWQgc3RyaW5nIGVycm9ycyBhcyBkZXRhaWxlZCBiZWxvdywgaW5zdGVhZCBvZiByZXR1cm5pbmcgZ2VuZXJpYyBlcnJvciBtZXNzYWdlcy4gIFRoaXMgYWxsb3dzIHlvdSB0byBjaGVjayB5b3Vyc2VsZiB3aGF0IHNwZWNpZmljIGVycm9yIHdhcyByZXR1cm5lZCwgYW5kIGN1c3RvbWl6ZSB0aGUgZXJyb3IgbWVzc2FnZS5cbiAqICBJbiBhbiB1cGNvbWluZyByZWxlYXNlIEkgbWF5IGFkZCBlYXN5IHdheXMgdG8gb3ZlcnJpZGUgZ2VuZXJpYyBtZXNzYWdlcywgb3Igc2V0IHlvdXIgb3duLCBidXQgZm9yIG5vdywgZXJyb3JzIHJldHVybmVkIGNhbiBiZSBmb3VuZCBiZWxvdyBlYWNoIG1ldGhvZC9mdW5jdGlvbi5cbiAqXG4gKiAgIyMgR2VuZXJpYyAqKlRocm93biBFcnJvcnMqKlxuICogIGBXSUZJX05PVF9FTkFCTEVEYFxuICogIGBgYFxuICovXG5AUGx1Z2luKHtcbiAgcGx1Z2luTmFtZTogJ1dpZmlXaXphcmQyJyxcbiAgcGx1Z2luOiAnY29yZG92YS1wbHVnaW4td2lmaXdpemFyZDInLFxuICBwbHVnaW5SZWY6ICdXaWZpV2l6YXJkMicsXG4gIHJlcG86ICdodHRwczovL2dpdGh1Yi5jb20vdHJpcGZsZXgvV2lmaVdpemFyZDInLFxuICBwbGF0Zm9ybXM6IFsnQW5kcm9pZCcsICdpT1MnXSxcbn0pXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgV2lmaVdpemFyZDIgZXh0ZW5kcyBBd2Vzb21lQ29yZG92YU5hdGl2ZVBsdWdpbiB7XG4gIC8qKlxuICAgKiBDb25uZWN0IHRvIG5ldHdvcmsgb24gaU9TIGRldmljZVxuICAgKlxuICAgKiBAcGFyYW0gc3NpZFxuICAgKiBAcGFyYW0gc3NpZFBhc3N3b3JkICAgICAgUGFzc3dvcmQgaWYgY29ubmVjdGluZyB0byBXUEEvV1BBMiBuZXR3b3JrIChvbWl0IG9yIHVzZSBmYWxzZSB0byBjb25uZWN0IHRvIG9wZW4gbmV0d29yaylcbiAgICogQHJldHVybnMge1Byb21pc2V9XG4gICAqL1xuICBAQ29yZG92YSh7XG4gICAgb3RoZXJQcm9taXNlOiB0cnVlLFxuICAgIHBsYXRmb3JtczogWydpT1MnXSxcbiAgfSlcbiAgaU9TQ29ubmVjdE5ldHdvcmsoc3NpZDogc3RyaW5nLCBzc2lkUGFzc3dvcmQ6IHN0cmluZyk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc2Nvbm5lY3QgZnJvbSBTU0lEIG9uIGlPUyBkZXZpY2VcbiAgICpcbiAgICogQHBhcmFtIHNzaWRcbiAgICogQHJldHVybnMge1Byb21pc2V9XG4gICAqL1xuICBAQ29yZG92YSh7XG4gICAgb3RoZXJQcm9taXNlOiB0cnVlLFxuICAgIHBsYXRmb3JtczogWydpT1MnXSxcbiAgfSlcbiAgaU9TRGlzY29ubmVjdE5ldHdvcmsoc3NpZDogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQWRkIHdpZmkgbmV0d29yayBjb25maWd1cmF0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB3aWZpQ29uZmlnICBNdXN0IGJlIG9iamVjdCBjcmVhdGVkIGJ5IGZvcm1hdFdpZmlDb25maWcoKVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fVxuICAgKi9cbiAgQENvcmRvdmEoe1xuICAgIG90aGVyUHJvbWlzZTogdHJ1ZSxcbiAgfSlcbiAgYWRkKHdpZmlDb25maWc6IFdpZmlDb25maWcpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgd2lmaSBuZXR3b3JrIGNvbmZpZ3VyYXRpb25cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBbc3NpZF1cbiAgICogQHJldHVybnMge1Byb21pc2U8YW55Pn1cbiAgICovXG4gIEBDb3Jkb3ZhKHtcbiAgICBvdGhlclByb21pc2U6IHRydWUsXG4gIH0pXG4gIHJlbW92ZShzc2lkOiBzdHJpbmcgfCBudW1iZXIpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25uZWN0IG5ldHdvcmsgd2l0aCBzcGVjaWZpZWQgU1NJRFxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCB3aWxsIGZpcnN0IGFkZCB0aGUgd2lmaSBjb25maWd1cmF0aW9uLCB0aGVuIGVuYWJsZSB0aGUgbmV0d29yaywgcmV0dXJuaW5nIHByb21pc2Ugd2hlbiBjb25uZWN0aW9uIGlzIHZlcmlmaWVkLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IFtzc2lkXVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtiaW5kQWxsPWZhbHNlXSAtIFdoZXRoZXIgb3Igbm90IHRvIGJpbmQgYWxsIGNvbm5lY3Rpb25zIGZyb20gYXBwLCB0aHJvdWdoIFdpRmkgY29ubmVjdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3Bhc3N3b3JkPV1cbiAgICogQHBhcmFtIHBhc3N3b3JkXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbYWxnb3JpdGhtPU5PTkVdIC0gV1BBLCBXUEEgKGZvciBXUEEyKSwgV0VQIG9yIE5PTkUgKE5PTkUgYnkgZGVmYXVsdClcbiAgICogQHJldHVybnMge1Byb21pc2U8YW55Pn1cbiAgICovXG4gIEBDb3Jkb3ZhKHtcbiAgICBvdGhlclByb21pc2U6IHRydWUsXG4gICAgcGxhdGZvcm1zOiBbJ0FuZHJvaWQnXSxcbiAgfSlcbiAgY29ubmVjdChzc2lkOiBzdHJpbmcgfCBudW1iZXIsIGJpbmRBbGw/OiBib29sZWFuLCBwYXNzd29yZD86IHN0cmluZywgYWxnb3JpdGhtPzogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogRGlzY29ubmVjdCAoY3VycmVudCBpZiBTU0lEIG5vdCBzdXBwbGllZClcbiAgICpcbiAgICogVGhpcyBtZXRob2QsIGlmIHBhc3NlZCBhbiBTU0lELCB3aWxsIGZpcnN0IGRpc2FibGUgdGhlIG5ldHdvcmssIGFuZCB0aGVuIHJlbW92ZSBpdCBmcm9tIHRoZSBkZXZpY2UuICBUbyBvbmx5IFwiZGlzY29ubmVjdFwiIChpZSBkaXNhYmxlIGluIGFuZHJvaWQpLFxuICAgKiBjYWxsIFdpZmlXaXphcmQyLmRpc2FibGUoKSBpbnN0ZWFkIG9mIGRpc2Nvbm5lY3QuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gW3NzaWQ9YWxsXVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fVxuICAgKi9cbiAgQENvcmRvdmEoe1xuICAgIG90aGVyUHJvbWlzZTogdHJ1ZSxcbiAgICBwbGF0Zm9ybXM6IFsnQW5kcm9pZCddLFxuICB9KVxuICBkaXNjb25uZWN0KHNzaWQ6IHN0cmluZyB8IG51bWJlcik6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuYWJsZSBOZXR3b3JrXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gW3NzaWRdXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2JpbmRBbGw9ZmFsc2VdIC0gV2hldGhlciBvciBub3QgdG8gYmluZCBhbGwgbmV0d29yayByZXF1ZXN0cyB0byB0aGlzIHdpZmkgbmV0d29ya1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFt3YWl0Rm9yQ29ubmVjdGlvbj1mYWxzZV0gLSBXaGV0aGVyIG9yIG5vdCB0byB3YWl0IGJlZm9yZSByZXNvbHZpbmcgcHJvbWlzZSB1bnRpbCBjb25uZWN0aW9uIHRvIHdpZmkgaXMgdmVyaWZpZWRcbiAgICogQHJldHVybnMge1Byb21pc2U8YW55Pn1cbiAgICovXG4gIEBDb3Jkb3ZhKHtcbiAgICBvdGhlclByb21pc2U6IHRydWUsXG4gICAgcGxhdGZvcm1zOiBbJ0FuZHJvaWQnXSxcbiAgfSlcbiAgZW5hYmxlKHNzaWQ6IHN0cmluZyB8IG51bWJlciwgYmluZEFsbD86IGJvb2xlYW4sIHdhaXRGb3JDb25uZWN0aW9uPzogYm9vbGVhbik6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc2FibGUgTmV0d29ya1xuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IFtzc2lkXVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fVxuICAgKi9cbiAgQENvcmRvdmEoe1xuICAgIG90aGVyUHJvbWlzZTogdHJ1ZSxcbiAgICBwbGF0Zm9ybXM6IFsnQW5kcm9pZCddLFxuICB9KVxuICBkaXNhYmxlKHNzaWQ6IHN0cmluZyB8IG51bWJlcik6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY29ubmVjdCB0byB0aGUgY3VycmVudGx5IGFjdGl2ZSBhY2Nlc3MgcG9pbnQsIGV2ZW4gaWYgd2UgYXJlIGFscmVhZHkgY29ubmVjdGVkLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fVxuICAgKi9cbiAgQENvcmRvdmEoe1xuICAgIG90aGVyUHJvbWlzZTogdHJ1ZSxcbiAgICBwbGF0Zm9ybXM6IFsnQW5kcm9pZCddLFxuICB9KVxuICByZWFzc29jaWF0ZSgpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNvbm5lY3QgdG8gdGhlIGN1cnJlbnRseSBhY3RpdmUgYWNjZXNzIHBvaW50LCBpZiB3ZSBhcmUgY3VycmVudGx5IGRpc2Nvbm5lY3RlZC5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8YW55Pn1cbiAgICovXG4gIEBDb3Jkb3ZhKHtcbiAgICBvdGhlclByb21pc2U6IHRydWUsXG4gICAgcGxhdGZvcm1zOiBbJ0FuZHJvaWQnXSxcbiAgfSlcbiAgcmVjb25uZWN0KCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgY3VycmVudGx5IGNvbmZpZ3VyZWQgbmV0d29ya3NcbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8YW55Pn1cbiAgICovXG4gIEBDb3Jkb3ZhKHtcbiAgICBvdGhlclByb21pc2U6IHRydWUsXG4gIH0pXG4gIGxpc3ROZXR3b3JrcygpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydCBuZXR3b3JrIHNjYW4gYW5kIHJldHVybiByZXN1bHRzXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGFueT59XG4gICAqL1xuICBAQ29yZG92YSh7XG4gICAgb3RoZXJQcm9taXNlOiB0cnVlLFxuICB9KVxuICBzY2FuKG9wdGlvbnM/OiBXaWZpU2Nhbk9wdGlvbnMpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydCB3aWZpIG5ldHdvcmsgc2NhbiAocmVzdWx0cyBjYW4gYmUgcmV0cmlldmVkIHdpdGggZ2V0U2NhblJlc3VsdHMpXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGFueT59XG4gICAqL1xuICBAQ29yZG92YSh7XG4gICAgb3RoZXJQcm9taXNlOiB0cnVlLFxuICB9KVxuICBzdGFydFNjYW4oKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogR2V0IHdpZmkgc2NhbiByZXN1bHRzIChtdXN0IGNhbGwgc3RhcnRTY2FuIGZpcnN0LCBvciBqdXN0IHVzZSBzY2FuKCkpXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGFueT59XG4gICAqL1xuICBAQ29yZG92YSh7XG4gICAgb3RoZXJQcm9taXNlOiB0cnVlLFxuICB9KVxuICBnZXRTY2FuUmVzdWx0cyhvcHRpb25zOiBXaWZpU2NhblJlc3VsdHNPcHRpb25zKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgV2lGaSBpcyBlbmFibGVkXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGFueT59XG4gICAqL1xuICBAQ29yZG92YSh7XG4gICAgb3RoZXJQcm9taXNlOiB0cnVlLFxuICB9KVxuICBpc1dpZmlFbmFibGVkKCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuYWJsZSBvciBEaXNhYmxlIFdpRmlcbiAgICpcbiAgICogQHBhcmFtIGVuYWJsZWRcbiAgICogQHJldHVybnMge1Byb21pc2U8YW55Pn1cbiAgICovXG4gIEBDb3Jkb3ZhKHtcbiAgICBvdGhlclByb21pc2U6IHRydWUsXG4gICAgcGxhdGZvcm1zOiBbJ0FuZHJvaWQnXSxcbiAgfSlcbiAgc2V0V2lmaUVuYWJsZWQoZW5hYmxlZDogYm9vbGVhbik6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuYWJsZSBXaUZpXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGFueT59XG4gICAqL1xuICBAQ29yZG92YSh7XG4gICAgb3RoZXJQcm9taXNlOiB0cnVlLFxuICAgIHBsYXRmb3JtczogWydBbmRyb2lkJ10sXG4gIH0pXG4gIGVuYWJsZVdpZmkoKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogRGlzYWJsZSBXaUZpXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGFueT59XG4gICAqL1xuICBAQ29yZG92YSh7XG4gICAgb3RoZXJQcm9taXNlOiB0cnVlLFxuICAgIHBsYXRmb3JtczogWydBbmRyb2lkJ10sXG4gIH0pXG4gIGRpc2FibGVXaWZpKCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIFVuYmluZCBOZXR3b3JrXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGFueT59XG4gICAqL1xuICBAQ29yZG92YSh7XG4gICAgb3RoZXJQcm9taXNlOiB0cnVlLFxuICB9KVxuICByZXNldEJpbmRBbGwoKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQmluZCBOZXR3b3JrXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGFueT59XG4gICAqL1xuICBAQ29yZG92YSh7XG4gICAgb3RoZXJQcm9taXNlOiB0cnVlLFxuICB9KVxuICBzZXRCaW5kQWxsKCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBXaWZpIFJvdXRlciBJUCBmcm9tIERIQ1BcbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8YW55Pn1cbiAgICovXG4gIEBDb3Jkb3ZhKHtcbiAgICBvdGhlclByb21pc2U6IHRydWUsXG4gIH0pXG4gIGdldFdpZmlSb3V0ZXJJUCgpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgV2lmaSBJUFxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fVxuICAgKi9cbiAgQENvcmRvdmEoe1xuICAgIG90aGVyUHJvbWlzZTogdHJ1ZSxcbiAgfSlcbiAgZ2V0V2lmaUlQKCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBXaWZpIElQIGFuZCBTdWJuZXQgQWRkcmVzc1xuICAgKlxuICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgSlNPTiBvYmplY3Qgc2ltaWxhciB0bzogeyBcImlwXCI6IFwiMC4wLjAuMFwiLCBcInN1Ym5ldFwiOiBcIjAuMC4wLjBcIiB9XG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGFueT59XG4gICAqL1xuICBAQ29yZG92YSh7XG4gICAgb3RoZXJQcm9taXNlOiB0cnVlLFxuICB9KVxuICBnZXRXaWZpSVBJbmZvKCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBOZXR3b3JrIElEIGZyb20gU1NJRFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IFtzc2lkXVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fVxuICAgKi9cbiAgQENvcmRvdmEoe1xuICAgIG90aGVyUHJvbWlzZTogdHJ1ZSxcbiAgfSlcbiAgZ2V0U1NJRE5ldHdvcmtJRChzc2lkOiBzdHJpbmcgfCBudW1iZXIpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgY3VycmVudGx5IGNvbm5lY3RlZCBuZXR3b3JrIElEXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGFueT59XG4gICAqL1xuICBAQ29yZG92YSh7XG4gICAgb3RoZXJQcm9taXNlOiB0cnVlLFxuICB9KVxuICBnZXRDb25uZWN0ZWROZXR3b3JrSUQoKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogR2V0IGN1cnJlbnRseSBjb25uZWN0ZWQgbmV0d29yayBTU0lEXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGFueT59XG4gICAqL1xuICBAQ29yZG92YSh7XG4gICAgb3RoZXJQcm9taXNlOiB0cnVlLFxuICB9KVxuICBnZXRDb25uZWN0ZWRTU0lEKCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBjdXJyZW50bHkgY29ubmVjdGVkIG5ldHdvcmsgQlNTSUQvTUFDXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGFueT59XG4gICAqL1xuICBAQ29yZG92YSh7XG4gICAgb3RoZXJQcm9taXNlOiB0cnVlLFxuICB9KVxuICBnZXRDb25uZWN0ZWRCU1NJRCgpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBjdXJyZW50IFdpRmkgY29ubmVjdGlvbiBoYXMgY29ubmVjdGlvbiB0byB0aGUgaW50ZXJuZXRcbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8YW55Pn1cbiAgICovXG4gIEBDb3Jkb3ZhKHtcbiAgICBvdGhlclByb21pc2U6IHRydWUsXG4gIH0pXG4gIGlzQ29ubmVjdGVkVG9JbnRlcm5ldCgpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB3ZSBjYW4gcGluZyBjdXJyZW50IFdpRmkgcm91dGVyIElQIGFkZHJlc3NcbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8YW55Pn1cbiAgICovXG4gIEBDb3Jkb3ZhKHtcbiAgICBvdGhlclByb21pc2U6IHRydWUsXG4gIH0pXG4gIGNhblBpbmdXaWZpUm91dGVyKCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHdlIGNhbiBjb25uZWN0IHZpYSBIVFRQIGN1cnJlbnQgV2lGaSByb3V0ZXIgSVAgYWRkcmVzc1xuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fVxuICAgKi9cbiAgQENvcmRvdmEoe1xuICAgIG90aGVyUHJvbWlzZTogdHJ1ZSxcbiAgfSlcbiAgY2FuQ29ubmVjdFRvUm91dGVyKCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGN1cnJlbnQgV2lGaSBjb25uZWN0aW9uIGNhbiBjb25uZWN0IHRvIGludGVybmV0IChjaGVja3MgY29ubmVjdGlvbiB0byBnb29nbGUuY29tKVxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fVxuICAgKi9cbiAgQENvcmRvdmEoe1xuICAgIG90aGVyUHJvbWlzZTogdHJ1ZSxcbiAgfSlcbiAgY2FuQ29ubmVjdFRvSW50ZXJuZXQoKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogUmVxdWVzdCBBQ0NFU1NfRklORV9MT0NBVElPTiBwZXJtaXNzaW9uXG4gICAqXG4gICAqIFRoaXMgcGVybWlzc2lvbiBpcyByZXF1aXJlZCBieSBBbmRyb2lkIHRvIHJldHVybiBzY2FuIHJlc3VsdHMsIHlvdSBjYW4gbWFudWFsbHkgcmVxdWVzdCBpdCBwcmlvciB0byBydW5uaW5nIGBzY2FuYFxuICAgKiBvciB0aGlzIHBsdWdpbiB3aWxsIGF1dG9tYXRpY2FsbHkgZG8gaXQgd2hlbiB0aGUgc2NhbiBpcyByYW4uXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGFueT59XG4gICAqL1xuICBAQ29yZG92YSh7XG4gICAgb3RoZXJQcm9taXNlOiB0cnVlLFxuICB9KVxuICByZXF1ZXN0UGVybWlzc2lvbigpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3JtYXQgV2lGaSBjb25maWd1cmF0aW9uIGZvciBBbmRyb2lkIERldmljZXNcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBbc3NpZF1cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtwYXNzd29yZF1cbiAgICogQHBhcmFtIHtzdHJpbmd9IFthbGdvcml0aG1dXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzSGlkZGVuU1NJRF1cbiAgICogQHJldHVybnMge1dpZmlDb25maWd8Ym9vbGVhbn1cbiAgICovXG4gIEBDb3Jkb3ZhRnVuY3Rpb25PdmVycmlkZSgpXG4gIGZvcm1hdFdpZmlDb25maWcoXG4gICAgc3NpZDogc3RyaW5nIHwgbnVtYmVyLFxuICAgIHBhc3N3b3JkOiBzdHJpbmcsXG4gICAgYWxnb3JpdGhtOiBzdHJpbmcsXG4gICAgaXNIaWRkZW5TU0lEOiBib29sZWFuXG4gICk6IFdpZmlDb25maWcgfCBib29sZWFuIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogRm9ybWF0IFdQQSBXaUZpIGNvbmZpZ3VyYXRpb24gZm9yIEFuZHJvaWQgRGV2aWNlc1xuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IFtzc2lkXVxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGFzc3dvcmRcbiAgICogQHBhcmFtIHtib29sZWFufSBpc0hpZGRlblNTSURcbiAgICogQHJldHVybnMge1dpZmlDb25maWd8Ym9vbGVhbn1cbiAgICovXG4gIEBDb3Jkb3ZhRnVuY3Rpb25PdmVycmlkZSgpXG4gIGZvcm1hdFdQQUNvbmZpZyhzc2lkOiBzdHJpbmcgfCBudW1iZXIsIHBhc3N3b3JkOiBzdHJpbmcsIGlzSGlkZGVuU1NJRDogYm9vbGVhbik6IFdpZmlDb25maWcgfCBib29sZWFuIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogRm9ybWF0IFdpRmkgU1NJRCBTdHJpbmdcbiAgICpcbiAgICogQHBhcmFtIHNzaWRcbiAgICogQHJldHVybnMgeyp9XG4gICAqL1xuICBAQ29yZG92YUZ1bmN0aW9uT3ZlcnJpZGUoKVxuICBmb3JtYXRXaWZpU3RyaW5nKHNzaWQ6IHN0cmluZyB8IG51bWJlcik6IHN0cmluZyB8IG51bWJlciB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIFN5bmNocm9ub3VzIFNsZWVwL1RpbWVvdXQgYGF3YWl0IHRoaXMudGltZW91dCgpYFxuICAgKlxuICAgKiBAcGFyYW0gZGVsYXkgIHRoZSBhbW91bnQgb2YgdGltZSB0byB3YWl0IChkZWZhdWx0IDIgc2Vjb25kcylcbiAgICovXG4gIEBDb3Jkb3ZhRnVuY3Rpb25PdmVycmlkZSgpXG4gIHRpbWVvdXQoZGVsYXk/OiBudW1iZXIpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxufVxuIl19

@@ -1,1 +0,1 @@

{"description":"Awesome Cordova Plugins - Native plugins for ionic apps","main":"bundle.js","module":"index.js","typings":"index.d.ts","author":"Daniel Sogl","license":"MIT","repository":{"type":"git","url":"https://github.com/danielsogl/awesome-cordova-plugins.git"},"name":"@awesome-cordova-plugins/wifi-wizard-2","dependencies":{"@types/cordova":"latest"},"peerDependencies":{"rxjs":"^5.5.0 || ^6.5.0 || ^7.3.0","@awesome-cordova-plugins/core":"^6.0.0-alpha.0"},"version":"6.0.0-alpha.4"}
{"description":"Awesome Cordova Plugins - Native plugins for ionic apps","main":"bundle.js","module":"index.js","typings":"index.d.ts","author":"ionic","license":"MIT","repository":{"type":"git","url":"https://github.com/danielsogl/awesome-cordova-plugins.git"},"name":"@awesome-cordova-plugins/wifi-wizard-2","dependencies":{"@types/cordova":"latest"},"peerDependencies":{"rxjs":"^5.5.0 || ^6.5.0 || ^7.3.0","@awesome-cordova-plugins/core":"^5.1.0"},"version":"6.0.0"}

@@ -1,1 +0,1 @@

{"description":"Awesome Cordova Plugins - Native plugins for ionic apps","main":"bundle.js","module":"index.js","typings":"index.d.ts","author":"Daniel Sogl","license":"MIT","repository":{"type":"git","url":"https://github.com/danielsogl/awesome-cordova-plugins.git"},"name":"@awesome-cordova-plugins/wifi-wizard-2","dependencies":{"@types/cordova":"latest"},"peerDependencies":{"rxjs":"^5.5.0 || ^6.5.0 || ^7.3.0","@awesome-cordova-plugins/core":"^6.0.0-alpha.0"},"version":"6.0.0-alpha.4"}
{"description":"Awesome Cordova Plugins - Native plugins for ionic apps","main":"bundle.js","module":"index.js","typings":"index.d.ts","author":"ionic","license":"MIT","repository":{"type":"git","url":"https://github.com/danielsogl/awesome-cordova-plugins.git"},"name":"@awesome-cordova-plugins/wifi-wizard-2","dependencies":{"@types/cordova":"latest"},"peerDependencies":{"rxjs":"^5.5.0 || ^6.5.0 || ^7.3.0","@awesome-cordova-plugins/core":"^5.1.0"},"version":"6.0.0"}
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc