@verified-network/verified-custody 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +80 -0
- package/dist/assets/icon128.png +0 -0
- package/dist/assets/icon16.png +0 -0
- package/dist/assets/icon32.png +0 -0
- package/dist/assets/icon48.png +0 -0
- package/dist/autoreload-bg.1777342b.js +392 -0
- package/dist/autoreload.af9e0afa.js +393 -0
- package/dist/main.js +2 -0
- package/dist/main.js.LICENSE.txt +190 -0
- package/dist/manifest.json +39 -0
- package/dist/src/scripts/background.js +866 -0
- package/dist/src/scripts/content.js +22029 -0
- package/dist/src/static/options.b1269179.js +22033 -0
- package/dist/src/static/options.html +9 -0
- package/dist/src/static/popup.e3c8c7b7.js +22043 -0
- package/dist/src/static/popup.html +9 -0
- package/dist/webext-prod/assets/icon128.png +0 -0
- package/dist/webext-prod/assets/icon16.png +0 -0
- package/dist/webext-prod/assets/icon32.png +0 -0
- package/dist/webext-prod/assets/icon48.png +0 -0
- package/dist/webext-prod/manifest.json +36 -0
- package/dist/webext-prod/src/scripts/background.js +2 -0
- package/dist/webext-prod/src/scripts/background.js.map +1 -0
- package/dist/webext-prod/src/scripts/content.js +35 -0
- package/dist/webext-prod/src/scripts/content.js.map +1 -0
- package/dist/webext-prod/src/static/options.a111dcd9.js +2 -0
- package/dist/webext-prod/src/static/options.a111dcd9.js.map +1 -0
- package/dist/webext-prod/src/static/options.html +1 -0
- package/dist/webext-prod/src/static/popup.70071e3e.js +35 -0
- package/dist/webext-prod/src/static/popup.70071e3e.js.map +1 -0
- package/dist/webext-prod/src/static/popup.cc04f56e.js +2 -0
- package/dist/webext-prod/src/static/popup.cc04f56e.js.map +1 -0
- package/dist/webext-prod/src/static/popup.e8a65b8a.js +35 -0
- package/dist/webext-prod/src/static/popup.e8a65b8a.js.map +1 -0
- package/dist/webext-prod/src/static/popup.html +1 -0
- package/package.json +51 -0
package/README.md
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# Verified Wallet
|
|
2
|
+
|
|
3
|
+
# Verified Custody Module.
|
|
4
|
+
|
|
5
|
+
This module allows users to create a vault using Mobile/ E-mail as their vault address and gives you a private Key which the users can use to sign all transactions further.
|
|
6
|
+
|
|
7
|
+
Usage:
|
|
8
|
+
- All the components of the module is compiled and available under the dist/ directory.
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
Install:
|
|
12
|
+
- npm install verified-wallet
|
|
13
|
+
|
|
14
|
+
The Module exports some constants and functions which will be useful when changing UI based on a user state or any Business Logic
|
|
15
|
+
|
|
16
|
+
- IS_CUSTODY_SET - (bool) - Returns true when the user's pk is stored in the device and is validated by the users pin.
|
|
17
|
+
- useCustody() - hook - contains vaultInfo and IS_CUSTODY_SET.
|
|
18
|
+
|
|
19
|
+
- initializeMessaging() - (void) - Should be called to initialise the fcm which will get the device token. Should be called at the earliest.
|
|
20
|
+
|
|
21
|
+
- getPermissionStatus - (bool) - Returns the status whether the user has allowed Push notification permissions.
|
|
22
|
+
|
|
23
|
+
- getFcmToken - ( string) - Returns the FCM token of the device.
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
**< StartCustody />** component is the entry component, which starts from asking the user to enter their phone/email and follows.
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
return (
|
|
32
|
+
<>
|
|
33
|
+
{ IS_CUSTODY_SET ? (
|
|
34
|
+
<div>Welcome to dashboard</div>
|
|
35
|
+
) : permissionStatus === "granted" ? (
|
|
36
|
+
<>
|
|
37
|
+
{ fcmToken ? (
|
|
38
|
+
<StartCustody creatorInfo={{ fcmToken }} />
|
|
39
|
+
) : (
|
|
40
|
+
<div>Retrieving fcm token...</div>
|
|
41
|
+
) }
|
|
42
|
+
</>
|
|
43
|
+
) : permissionStatus === 'denied' ? (
|
|
44
|
+
<div style={{
|
|
45
|
+
position: "absolute",
|
|
46
|
+
left: "50%",
|
|
47
|
+
top: "50%",
|
|
48
|
+
transform: "translate(-50%, -50%)",
|
|
49
|
+
textAlign: "center",
|
|
50
|
+
}}
|
|
51
|
+
>
|
|
52
|
+
<p>
|
|
53
|
+
Notifications are blocked. Please enable them from your browser
|
|
54
|
+
settings.
|
|
55
|
+
</p>
|
|
56
|
+
</div>
|
|
57
|
+
) : (
|
|
58
|
+
<div>Requesting notification permissions...</div>
|
|
59
|
+
)}
|
|
60
|
+
</>
|
|
61
|
+
)
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
This **< StartCustody />** component, can be used for multiple use case like to Sign Transactions and Retrieve Private Key by passing props.
|
|
65
|
+
|
|
66
|
+
- To Accept and Decline Cosigner Request
|
|
67
|
+
- To Sign Transactions
|
|
68
|
+
- To Retrieve Private Key
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
<StartCustody
|
|
72
|
+
startPoint={{
|
|
73
|
+
component: "StartCosigner", // currently supports all forms of signing
|
|
74
|
+
args: { creator, txId, transactionType, id },
|
|
75
|
+
}}
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
- **creator, txId, transactionType** will be obtained from the notification params and as the query params.
|
|
80
|
+
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,392 @@
|
|
|
1
|
+
// modules are defined as an array
|
|
2
|
+
// [ module function, map of requires ]
|
|
3
|
+
//
|
|
4
|
+
// map of requires is short require name -> numeric require
|
|
5
|
+
//
|
|
6
|
+
// anything defined in a previous bundle is accessed via the
|
|
7
|
+
// orig method which is the require for previous bundles
|
|
8
|
+
|
|
9
|
+
(function(modules, entry, mainEntry, parcelRequireName, globalName) {
|
|
10
|
+
/* eslint-disable no-undef */
|
|
11
|
+
var globalObject =
|
|
12
|
+
typeof globalThis !== 'undefined'
|
|
13
|
+
? globalThis
|
|
14
|
+
: typeof self !== 'undefined'
|
|
15
|
+
? self
|
|
16
|
+
: typeof window !== 'undefined'
|
|
17
|
+
? window
|
|
18
|
+
: typeof global !== 'undefined'
|
|
19
|
+
? global
|
|
20
|
+
: {};
|
|
21
|
+
/* eslint-enable no-undef */
|
|
22
|
+
|
|
23
|
+
// Save the require from previous bundle to this closure if any
|
|
24
|
+
var previousRequire =
|
|
25
|
+
typeof globalObject[parcelRequireName] === 'function' &&
|
|
26
|
+
globalObject[parcelRequireName];
|
|
27
|
+
|
|
28
|
+
var cache = previousRequire.cache || {};
|
|
29
|
+
// Do not use `require` to prevent Webpack from trying to bundle this call
|
|
30
|
+
var nodeRequire =
|
|
31
|
+
typeof module !== 'undefined' &&
|
|
32
|
+
typeof module.require === 'function' &&
|
|
33
|
+
module.require.bind(module);
|
|
34
|
+
|
|
35
|
+
function newRequire(name, jumped) {
|
|
36
|
+
if (!cache[name]) {
|
|
37
|
+
if (!modules[name]) {
|
|
38
|
+
// if we cannot find the module within our internal map or
|
|
39
|
+
// cache jump to the current global require ie. the last bundle
|
|
40
|
+
// that was added to the page.
|
|
41
|
+
var currentRequire =
|
|
42
|
+
typeof globalObject[parcelRequireName] === 'function' &&
|
|
43
|
+
globalObject[parcelRequireName];
|
|
44
|
+
if (!jumped && currentRequire) {
|
|
45
|
+
return currentRequire(name, true);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// If there are other bundles on this page the require from the
|
|
49
|
+
// previous one is saved to 'previousRequire'. Repeat this as
|
|
50
|
+
// many times as there are bundles until the module is found or
|
|
51
|
+
// we exhaust the require chain.
|
|
52
|
+
if (previousRequire) {
|
|
53
|
+
return previousRequire(name, true);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// Try the node require function if it exists.
|
|
57
|
+
if (nodeRequire && typeof name === 'string') {
|
|
58
|
+
return nodeRequire(name);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
var err = new Error("Cannot find module '" + name + "'");
|
|
62
|
+
err.code = 'MODULE_NOT_FOUND';
|
|
63
|
+
throw err;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
localRequire.resolve = resolve;
|
|
67
|
+
localRequire.cache = {};
|
|
68
|
+
|
|
69
|
+
var module = (cache[name] = new newRequire.Module(name));
|
|
70
|
+
|
|
71
|
+
modules[name][0].call(
|
|
72
|
+
module.exports,
|
|
73
|
+
localRequire,
|
|
74
|
+
module,
|
|
75
|
+
module.exports,
|
|
76
|
+
this,
|
|
77
|
+
);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
return cache[name].exports;
|
|
81
|
+
|
|
82
|
+
function localRequire(x) {
|
|
83
|
+
return newRequire(localRequire.resolve(x));
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
function resolve(x) {
|
|
87
|
+
return modules[name][1][x] || x;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
function Module(moduleName) {
|
|
92
|
+
this.id = moduleName;
|
|
93
|
+
this.bundle = newRequire;
|
|
94
|
+
this.exports = {};
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
newRequire.isParcelRequire = true;
|
|
98
|
+
newRequire.Module = Module;
|
|
99
|
+
newRequire.modules = modules;
|
|
100
|
+
newRequire.cache = cache;
|
|
101
|
+
newRequire.parent = previousRequire;
|
|
102
|
+
newRequire.register = function(id, exports) {
|
|
103
|
+
modules[id] = [
|
|
104
|
+
function(require, module) {
|
|
105
|
+
module.exports = exports;
|
|
106
|
+
},
|
|
107
|
+
{},
|
|
108
|
+
];
|
|
109
|
+
};
|
|
110
|
+
|
|
111
|
+
Object.defineProperty(newRequire, 'root', {
|
|
112
|
+
get: function() {
|
|
113
|
+
return globalObject[parcelRequireName];
|
|
114
|
+
},
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
globalObject[parcelRequireName] = newRequire;
|
|
118
|
+
|
|
119
|
+
for (var i = 0; i < entry.length; i++) {
|
|
120
|
+
newRequire(entry[i]);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
if (mainEntry) {
|
|
124
|
+
// Expose entry point to Node, AMD or browser globals
|
|
125
|
+
// Based on https://github.com/ForbesLindesay/umd/blob/master/template.js
|
|
126
|
+
var mainExports = newRequire(mainEntry);
|
|
127
|
+
|
|
128
|
+
// CommonJS
|
|
129
|
+
if (typeof exports === 'object' && typeof module !== 'undefined') {
|
|
130
|
+
module.exports = mainExports;
|
|
131
|
+
|
|
132
|
+
// RequireJS
|
|
133
|
+
} else if (typeof define === 'function' && define.amd) {
|
|
134
|
+
define(function() {
|
|
135
|
+
return mainExports;
|
|
136
|
+
});
|
|
137
|
+
|
|
138
|
+
// <script>
|
|
139
|
+
} else if (globalName) {
|
|
140
|
+
this[globalName] = mainExports;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
})({"2LQkc":[function(require,module,exports) {
|
|
144
|
+
var HMR_HOST = "localhost";
|
|
145
|
+
var HMR_PORT = null;
|
|
146
|
+
var HMR_SECURE = false;
|
|
147
|
+
var HMR_ENV_HASH = "d751713988987e9331980363e24189ce";
|
|
148
|
+
module.bundle.HMR_BUNDLE_ID = "fea19916c1436d4f3e8a348b1777342b"; // @flow
|
|
149
|
+
/* global HMR_HOST, HMR_PORT, HMR_ENV_HASH, HMR_SECURE */ /*::
|
|
150
|
+
import type {
|
|
151
|
+
HMRAsset,
|
|
152
|
+
HMRMessage,
|
|
153
|
+
} from '@parcel/reporter-dev-server/src/HMRServer.js';
|
|
154
|
+
interface ParcelRequire {
|
|
155
|
+
(string): mixed;
|
|
156
|
+
cache: {|[string]: ParcelModule|};
|
|
157
|
+
hotData: mixed;
|
|
158
|
+
Module: any;
|
|
159
|
+
parent: ?ParcelRequire;
|
|
160
|
+
isParcelRequire: true;
|
|
161
|
+
modules: {|[string]: [Function, {|[string]: string|}]|};
|
|
162
|
+
HMR_BUNDLE_ID: string;
|
|
163
|
+
root: ParcelRequire;
|
|
164
|
+
}
|
|
165
|
+
interface ParcelModule {
|
|
166
|
+
hot: {|
|
|
167
|
+
data: mixed,
|
|
168
|
+
accept(cb: (Function) => void): void,
|
|
169
|
+
dispose(cb: (mixed) => void): void,
|
|
170
|
+
// accept(deps: Array<string> | string, cb: (Function) => void): void,
|
|
171
|
+
// decline(): void,
|
|
172
|
+
_acceptCallbacks: Array<(Function) => void>,
|
|
173
|
+
_disposeCallbacks: Array<(mixed) => void>,
|
|
174
|
+
|};
|
|
175
|
+
}
|
|
176
|
+
declare var module: {bundle: ParcelRequire, ...};
|
|
177
|
+
declare var HMR_HOST: string;
|
|
178
|
+
declare var HMR_PORT: string;
|
|
179
|
+
declare var HMR_ENV_HASH: string;
|
|
180
|
+
declare var HMR_SECURE: boolean;
|
|
181
|
+
*/ var OVERLAY_ID = '__parcel__error__overlay__';
|
|
182
|
+
var OldModule = module.bundle.Module;
|
|
183
|
+
function Module(moduleName) {
|
|
184
|
+
OldModule.call(this, moduleName);
|
|
185
|
+
this.hot = {
|
|
186
|
+
data: module.bundle.hotData,
|
|
187
|
+
_acceptCallbacks: [],
|
|
188
|
+
_disposeCallbacks: [],
|
|
189
|
+
accept: function(fn) {
|
|
190
|
+
this._acceptCallbacks.push(fn || function() {
|
|
191
|
+
});
|
|
192
|
+
},
|
|
193
|
+
dispose: function(fn) {
|
|
194
|
+
this._disposeCallbacks.push(fn);
|
|
195
|
+
}
|
|
196
|
+
};
|
|
197
|
+
module.bundle.hotData = undefined;
|
|
198
|
+
}
|
|
199
|
+
module.bundle.Module = Module;
|
|
200
|
+
var checkedAssets/*: {|[string]: boolean|} */ , acceptedAssets/*: {|[string]: boolean|} */ , assetsToAccept/*: Array<[ParcelRequire, string]> */ ;
|
|
201
|
+
function getHostname() {
|
|
202
|
+
return HMR_HOST || (location.protocol.indexOf('http') === 0 ? location.hostname : 'localhost');
|
|
203
|
+
}
|
|
204
|
+
function getPort() {
|
|
205
|
+
return HMR_PORT || location.port;
|
|
206
|
+
}
|
|
207
|
+
// eslint-disable-next-line no-redeclare
|
|
208
|
+
var parent = module.bundle.parent;
|
|
209
|
+
if ((!parent || !parent.isParcelRequire) && typeof WebSocket !== 'undefined') {
|
|
210
|
+
var hostname = getHostname();
|
|
211
|
+
var port = getPort();
|
|
212
|
+
var protocol = HMR_SECURE || location.protocol == 'https:' && !/localhost|127.0.0.1|0.0.0.0/.test(hostname) ? 'wss' : 'ws';
|
|
213
|
+
var ws = new WebSocket(protocol + '://' + hostname + (port ? ':' + port : '') + '/');
|
|
214
|
+
// $FlowFixMe
|
|
215
|
+
ws.onmessage = function(event/*: {data: string, ...} */ ) {
|
|
216
|
+
checkedAssets = {
|
|
217
|
+
};
|
|
218
|
+
acceptedAssets = {
|
|
219
|
+
};
|
|
220
|
+
assetsToAccept = [];
|
|
221
|
+
var data = JSON.parse(event.data);
|
|
222
|
+
if (data.type === 'update') {
|
|
223
|
+
// Remove error overlay if there is one
|
|
224
|
+
removeErrorOverlay();
|
|
225
|
+
let assets = data.assets.filter((asset)=>asset.envHash === HMR_ENV_HASH
|
|
226
|
+
);
|
|
227
|
+
// Handle HMR Update
|
|
228
|
+
var handled = false;
|
|
229
|
+
assets.forEach((asset)=>{
|
|
230
|
+
var didAccept = asset.type === 'css' || asset.type === 'js' && hmrAcceptCheck(module.bundle.root, asset.id, asset.depsByBundle);
|
|
231
|
+
if (didAccept) handled = true;
|
|
232
|
+
});
|
|
233
|
+
if (handled) {
|
|
234
|
+
console.clear();
|
|
235
|
+
assets.forEach(function(asset) {
|
|
236
|
+
hmrApply(module.bundle.root, asset);
|
|
237
|
+
});
|
|
238
|
+
for(var i = 0; i < assetsToAccept.length; i++){
|
|
239
|
+
var id = assetsToAccept[i][1];
|
|
240
|
+
if (!acceptedAssets[id]) hmrAcceptRun(assetsToAccept[i][0], id);
|
|
241
|
+
}
|
|
242
|
+
} else window.location.reload();
|
|
243
|
+
}
|
|
244
|
+
if (data.type === 'error') {
|
|
245
|
+
// Log parcel errors to console
|
|
246
|
+
for (let ansiDiagnostic of data.diagnostics.ansi){
|
|
247
|
+
let stack = ansiDiagnostic.codeframe ? ansiDiagnostic.codeframe : ansiDiagnostic.stack;
|
|
248
|
+
console.error('🚨 [parcel]: ' + ansiDiagnostic.message + '\n' + stack + '\n\n' + ansiDiagnostic.hints.join('\n'));
|
|
249
|
+
}
|
|
250
|
+
// Render the fancy html overlay
|
|
251
|
+
removeErrorOverlay();
|
|
252
|
+
var overlay = createErrorOverlay(data.diagnostics.html);
|
|
253
|
+
// $FlowFixMe
|
|
254
|
+
document.body.appendChild(overlay);
|
|
255
|
+
}
|
|
256
|
+
};
|
|
257
|
+
ws.onerror = function(e) {
|
|
258
|
+
console.error(e.message);
|
|
259
|
+
};
|
|
260
|
+
ws.onclose = function(e) {
|
|
261
|
+
console.warn('[parcel] 🚨 Connection to the HMR server was lost');
|
|
262
|
+
};
|
|
263
|
+
}
|
|
264
|
+
function removeErrorOverlay() {
|
|
265
|
+
var overlay = document.getElementById(OVERLAY_ID);
|
|
266
|
+
if (overlay) {
|
|
267
|
+
overlay.remove();
|
|
268
|
+
console.log('[parcel] ✨ Error resolved');
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
function createErrorOverlay(diagnostics) {
|
|
272
|
+
var overlay = document.createElement('div');
|
|
273
|
+
overlay.id = OVERLAY_ID;
|
|
274
|
+
let errorHTML = '<div style="background: black; opacity: 0.85; font-size: 16px; color: white; position: fixed; height: 100%; width: 100%; top: 0px; left: 0px; padding: 30px; font-family: Menlo, Consolas, monospace; z-index: 9999;">';
|
|
275
|
+
for (let diagnostic of diagnostics){
|
|
276
|
+
let stack = diagnostic.codeframe ? diagnostic.codeframe : diagnostic.stack;
|
|
277
|
+
errorHTML += `\n <div>\n <div style="font-size: 18px; font-weight: bold; margin-top: 20px;">\n 🚨 ${diagnostic.message}\n </div>\n <pre>\n ${stack}\n </pre>\n <div>\n ${diagnostic.hints.map((hint)=>'<div>' + hint + '</div>'
|
|
278
|
+
).join('')}\n </div>\n </div>\n `;
|
|
279
|
+
}
|
|
280
|
+
errorHTML += '</div>';
|
|
281
|
+
overlay.innerHTML = errorHTML;
|
|
282
|
+
return overlay;
|
|
283
|
+
}
|
|
284
|
+
function getParents(bundle, id) /*: Array<[ParcelRequire, string]> */ {
|
|
285
|
+
var modules = bundle.modules;
|
|
286
|
+
if (!modules) return [];
|
|
287
|
+
var parents = [];
|
|
288
|
+
var k, d, dep;
|
|
289
|
+
for(k in modules)for(d in modules[k][1]){
|
|
290
|
+
dep = modules[k][1][d];
|
|
291
|
+
if (dep === id || Array.isArray(dep) && dep[dep.length - 1] === id) parents.push([
|
|
292
|
+
bundle,
|
|
293
|
+
k
|
|
294
|
+
]);
|
|
295
|
+
}
|
|
296
|
+
if (bundle.parent) parents = parents.concat(getParents(bundle.parent, id));
|
|
297
|
+
return parents;
|
|
298
|
+
}
|
|
299
|
+
function updateLink(link) {
|
|
300
|
+
var newLink = link.cloneNode();
|
|
301
|
+
newLink.onload = function() {
|
|
302
|
+
if (link.parentNode !== null) // $FlowFixMe
|
|
303
|
+
link.parentNode.removeChild(link);
|
|
304
|
+
};
|
|
305
|
+
newLink.setAttribute('href', // $FlowFixMe
|
|
306
|
+
link.getAttribute('href').split('?')[0] + '?' + Date.now());
|
|
307
|
+
// $FlowFixMe
|
|
308
|
+
link.parentNode.insertBefore(newLink, link.nextSibling);
|
|
309
|
+
}
|
|
310
|
+
var cssTimeout = null;
|
|
311
|
+
function reloadCSS() {
|
|
312
|
+
if (cssTimeout) return;
|
|
313
|
+
cssTimeout = setTimeout(function() {
|
|
314
|
+
var links = document.querySelectorAll('link[rel="stylesheet"]');
|
|
315
|
+
for(var i = 0; i < links.length; i++){
|
|
316
|
+
// $FlowFixMe[incompatible-type]
|
|
317
|
+
var href = links[i].getAttribute('href');
|
|
318
|
+
var hostname = getHostname();
|
|
319
|
+
var servedFromHMRServer = hostname === 'localhost' ? new RegExp('^(https?:\\/\\/(0.0.0.0|127.0.0.1)|localhost):' + getPort()).test(href) : href.indexOf(hostname + ':' + getPort());
|
|
320
|
+
var absolute = /^https?:\/\//i.test(href) && href.indexOf(window.location.origin) !== 0 && !servedFromHMRServer;
|
|
321
|
+
if (!absolute) updateLink(links[i]);
|
|
322
|
+
}
|
|
323
|
+
cssTimeout = null;
|
|
324
|
+
}, 50);
|
|
325
|
+
}
|
|
326
|
+
function hmrApply(bundle/*: ParcelRequire */ , asset/*: HMRAsset */ ) {
|
|
327
|
+
var modules = bundle.modules;
|
|
328
|
+
if (!modules) return;
|
|
329
|
+
if (asset.type === 'css') {
|
|
330
|
+
reloadCSS();
|
|
331
|
+
return;
|
|
332
|
+
}
|
|
333
|
+
let deps = asset.depsByBundle[bundle.HMR_BUNDLE_ID];
|
|
334
|
+
if (deps) {
|
|
335
|
+
var fn = new Function('require', 'module', 'exports', asset.output);
|
|
336
|
+
modules[asset.id] = [
|
|
337
|
+
fn,
|
|
338
|
+
deps
|
|
339
|
+
];
|
|
340
|
+
} else if (bundle.parent) hmrApply(bundle.parent, asset);
|
|
341
|
+
}
|
|
342
|
+
function hmrAcceptCheck(bundle/*: ParcelRequire */ , id/*: string */ , depsByBundle/*: ?{ [string]: { [string]: string } }*/ ) {
|
|
343
|
+
var modules = bundle.modules;
|
|
344
|
+
if (!modules) return;
|
|
345
|
+
if (depsByBundle && !depsByBundle[bundle.HMR_BUNDLE_ID]) {
|
|
346
|
+
// If we reached the root bundle without finding where the asset should go,
|
|
347
|
+
// there's nothing to do. Mark as "accepted" so we don't reload the page.
|
|
348
|
+
if (!bundle.parent) return true;
|
|
349
|
+
return hmrAcceptCheck(bundle.parent, id, depsByBundle);
|
|
350
|
+
}
|
|
351
|
+
if (checkedAssets[id]) return;
|
|
352
|
+
checkedAssets[id] = true;
|
|
353
|
+
var cached = bundle.cache[id];
|
|
354
|
+
assetsToAccept.push([
|
|
355
|
+
bundle,
|
|
356
|
+
id
|
|
357
|
+
]);
|
|
358
|
+
if (cached && cached.hot && cached.hot._acceptCallbacks.length) return true;
|
|
359
|
+
return getParents(module.bundle.root, id).some(function(v) {
|
|
360
|
+
return hmrAcceptCheck(v[0], v[1], null);
|
|
361
|
+
});
|
|
362
|
+
}
|
|
363
|
+
function hmrAcceptRun(bundle/*: ParcelRequire */ , id/*: string */ ) {
|
|
364
|
+
var cached = bundle.cache[id];
|
|
365
|
+
bundle.hotData = {
|
|
366
|
+
};
|
|
367
|
+
if (cached && cached.hot) cached.hot.data = bundle.hotData;
|
|
368
|
+
if (cached && cached.hot && cached.hot._disposeCallbacks.length) cached.hot._disposeCallbacks.forEach(function(cb) {
|
|
369
|
+
cb(bundle.hotData);
|
|
370
|
+
});
|
|
371
|
+
delete bundle.cache[id];
|
|
372
|
+
bundle(id);
|
|
373
|
+
cached = bundle.cache[id];
|
|
374
|
+
if (cached && cached.hot && cached.hot._acceptCallbacks.length) cached.hot._acceptCallbacks.forEach(function(cb) {
|
|
375
|
+
var assetsToAlsoAccept = cb(function() {
|
|
376
|
+
return getParents(module.bundle.root, id);
|
|
377
|
+
});
|
|
378
|
+
if (assetsToAlsoAccept && assetsToAccept.length) assetsToAccept.push.apply(assetsToAccept, assetsToAlsoAccept);
|
|
379
|
+
});
|
|
380
|
+
acceptedAssets[id] = true;
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
},{}],"2F2EN":[function(require,module,exports) {
|
|
384
|
+
"use strict";
|
|
385
|
+
/* global window */ var env = window.chrome || window.browser;
|
|
386
|
+
env.runtime.onMessage.addListener(function(msg) {
|
|
387
|
+
if (msg.__parcel_hmr_reload__) env.runtime.reload();
|
|
388
|
+
});
|
|
389
|
+
|
|
390
|
+
},{}]},["2LQkc","2F2EN"], "2F2EN", "parcelRequire5c9f")
|
|
391
|
+
|
|
392
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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R0FBRyxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUM1RCxNQUFNLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLE9BQU8sVUFBVSxFQUFFO1lBQ3pDLGtCQUFrQixHQUFHLEVBQUU7bUJBQ2xCLFVBQVUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxFQUFFOztZQUV0QyxrQkFBa0IsSUFBSSxjQUFjLENBQUMsTUFBTSxFQUM3QyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLEVBQUUsa0JBQWtCOztJQUlsRSxjQUFjLENBQUMsRUFBRSxJQUFJLElBQUk7Ozs7Q0M3VzNCLFVBQVk7QUFFWixFQUFBLGVBQUEsRUFBbUIsS0FDZixHQUFHLEdBQUcsTUFBTSxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsT0FBTztBQUN6QyxHQUFHLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxXQUFXLFVBQVcsR0FBRztRQUN6QyxHQUFHLENBQUMscUJBQXFCLEVBQzNCLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSIsInNvdXJjZXMiOlsibm9kZV9tb2R1bGVzL0BwYXJjZWwvY29uZmlnLXdlYmV4dGVuc2lvbi9ub2RlX21vZHVsZXMvQHBhcmNlbC9ydW50aW1lLWJyb3dzZXItaG1yL2xpYi9ydW50aW1lLTE3NjhkMmNiZTEzOTE0NGY1MzNjZGRiMzlmZmJmMjk4LmpzIiwibm9kZV9tb2R1bGVzL0BwYXJjZWwvdHJhbnNmb3JtZXItd2ViZXh0ZW5zaW9uL2xpYi9ydW50aW1lL2F1dG9yZWxvYWQtYmcuanMiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIEhNUl9IT1NUID0gXCJsb2NhbGhvc3RcIjt2YXIgSE1SX1BPUlQgPSBudWxsO3ZhciBITVJfU0VDVVJFID0gZmFsc2U7dmFyIEhNUl9FTlZfSEFTSCA9IFwiZDc1MTcxMzk4ODk4N2U5MzMxOTgwMzYzZTI0MTg5Y2VcIjttb2R1bGUuYnVuZGxlLkhNUl9CVU5ETEVfSUQgPSBcImZlYTE5OTE2YzE0MzZkNGYzZThhMzQ4YjE3NzczNDJiXCI7Ly8gQGZsb3dcbi8qIGdsb2JhbCBITVJfSE9TVCwgSE1SX1BPUlQsIEhNUl9FTlZfSEFTSCwgSE1SX1NFQ1VSRSAqL1xuXG4vKjo6XG5pbXBvcnQgdHlwZSB7XG4gIEhNUkFzc2V0LFxuICBITVJNZXNzYWdlLFxufSBmcm9tICdAcGFyY2VsL3JlcG9ydGVyLWRldi1zZXJ2ZXIvc3JjL0hNUlNlcnZlci5qcyc7XG5pbnRlcmZhY2UgUGFyY2VsUmVxdWlyZSB7XG4gIChzdHJpbmcpOiBtaXhlZDtcbiAgY2FjaGU6IHt8W3N0cmluZ106IFBhcmNlbE1vZHVsZXx9O1xuICBob3REYXRhOiBtaXhlZDtcbiAgTW9kdWxlOiBhbnk7XG4gIHBhcmVudDogP1BhcmNlbFJlcXVpcmU7XG4gIGlzUGFyY2VsUmVxdWlyZTogdHJ1ZTtcbiAgbW9kdWxlczoge3xbc3RyaW5nXTogW0Z1bmN0aW9uLCB7fFtzdHJpbmddOiBzdHJpbmd8fV18fTtcbiAgSE1SX0JVTkRMRV9JRDogc3RyaW5nO1xuICByb290OiBQYXJjZWxSZXF1aXJlO1xufVxuaW50ZXJmYWNlIFBhcmNlbE1vZHVsZSB7XG4gIGhvdDoge3xcbiAgICBkYXRhOiBtaXhlZCxcbiAgICBhY2NlcHQoY2I6IChGdW5jdGlvbikgPT4gdm9pZCk6IHZvaWQsXG4gICAgZGlzcG9zZShjYjogKG1peGVkKSA9PiB2b2lkKTogdm9pZCxcbiAgICAvLyBhY2NlcHQoZGVwczogQXJyYXk8c3RyaW5nPiB8IHN0cmluZywgY2I6IChGdW5jdGlvbikgPT4gdm9pZCk6IHZvaWQsXG4gICAgLy8gZGVjbGluZSgpOiB2b2lkLFxuICAgIF9hY2NlcHRDYWxsYmFja3M6IEFycmF5PChGdW5jdGlvbikgPT4gdm9pZD4sXG4gICAgX2Rpc3Bvc2VDYWxsYmFja3M6IEFycmF5PChtaXhlZCkgPT4gdm9pZD4sXG4gIHx9O1xufVxuZGVjbGFyZSB2YXIgbW9kdWxlOiB7YnVuZGxlOiBQYXJjZWxSZXF1aXJlLCAuLi59O1xuZGVjbGFyZSB2YXIgSE1SX0hPU1Q6IHN0cmluZztcbmRlY2xhcmUgdmFyIEhNUl9QT1JUOiBzdHJpbmc7XG5kZWNsYXJlIHZhciBITVJfRU5WX0hBU0g6IHN0cmluZztcbmRlY2xhcmUgdmFyIEhNUl9TRUNVUkU6IGJvb2xlYW47XG4qL1xuXG52YXIgT1ZFUkxBWV9JRCA9ICdfX3BhcmNlbF9fZXJyb3JfX292ZXJsYXlfXyc7XG5cbnZhciBPbGRNb2R1bGUgPSBtb2R1bGUuYnVuZGxlLk1vZHVsZTtcblxuZnVuY3Rpb24gTW9kdWxlKG1vZHVsZU5hbWUpIHtcbiAgT2xkTW9kdWxlLmNhbGwodGhpcywgbW9kdWxlTmFtZSk7XG4gIHRoaXMuaG90ID0ge1xuICAgIGRhdGE6IG1vZHVsZS5idW5kbGUuaG90RGF0YSxcbiAgICBfYWNjZXB0Q2FsbGJhY2tzOiBbXSxcbiAgICBfZGlzcG9zZUNhbGxiYWNrczogW10sXG4gICAgYWNjZXB0OiBmdW5jdGlvbihmbikge1xuICAgICAgdGhpcy5fYWNjZXB0Q2FsbGJhY2tzLnB1c2goZm4gfHwgZnVuY3Rpb24oKSB7fSk7XG4gICAgfSxcbiAgICBkaXNwb3NlOiBmdW5jdGlvbihmbikge1xuICAgICAgdGhpcy5fZGlzcG9zZUNhbGxiYWNrcy5wdXNoKGZuKTtcbiAgICB9LFxuICB9O1xuICBtb2R1bGUuYnVuZGxlLmhvdERhdGEgPSB1bmRlZmluZWQ7XG59XG5tb2R1bGUuYnVuZGxlLk1vZHVsZSA9IE1vZHVsZTtcblxudmFyIGNoZWNrZWRBc3NldHMgLyo6IHt8W3N0cmluZ106IGJvb2xlYW58fSAqLyxcbiAgYWNjZXB0ZWRBc3NldHMgLyo6IHt8W3N0cmluZ106IGJvb2xlYW58fSAqLyxcbiAgYXNzZXRzVG9BY2NlcHQgLyo6IEFycmF5PFtQYXJjZWxSZXF1aXJlLCBzdHJpbmddPiAqLztcblxuZnVuY3Rpb24gZ2V0SG9zdG5hbWUoKSB7XG4gIHJldHVybiAoXG4gICAgSE1SX0hPU1QgfHxcbiAgICAobG9jYXRpb24ucHJvdG9jb2wuaW5kZXhPZignaHR0cCcpID09PSAwID8gbG9jYXRpb24uaG9zdG5hbWUgOiAnbG9jYWxob3N0JylcbiAgKTtcbn1cblxuZnVuY3Rpb24gZ2V0UG9ydCgpIHtcbiAgcmV0dXJuIEhNUl9QT1JUIHx8IGxvY2F0aW9uLnBvcnQ7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZWRlY2xhcmVcbnZhciBwYXJlbnQgPSBtb2R1bGUuYnVuZGxlLnBhcmVudDtcbmlmICgoIXBhcmVudCB8fCAhcGFyZW50LmlzUGFyY2VsUmVxdWlyZSkgJiYgdHlwZW9mIFdlYlNvY2tldCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgdmFyIGhvc3RuYW1lID0gZ2V0SG9zdG5hbWUoKTtcbiAgdmFyIHBvcnQgPSBnZXRQb3J0KCk7XG4gIHZhciBwcm90b2NvbCA9XG4gICAgSE1SX1NFQ1VSRSB8fFxuICAgIChsb2NhdGlvbi5wcm90b2NvbCA9PSAnaHR0cHM6JyAmJlxuICAgICAgIS9sb2NhbGhvc3R8MTI3LjAuMC4xfDAuMC4wLjAvLnRlc3QoaG9zdG5hbWUpKVxuICAgICAgPyAnd3NzJ1xuICAgICAgOiAnd3MnO1xuICB2YXIgd3MgPSBuZXcgV2ViU29ja2V0KFxuICAgIHByb3RvY29sICsgJzovLycgKyBob3N0bmFtZSArIChwb3J0ID8gJzonICsgcG9ydCA6ICcnKSArICcvJyxcbiAgKTtcbiAgLy8gJEZsb3dGaXhNZVxuICB3cy5vbm1lc3NhZ2UgPSBmdW5jdGlvbihldmVudCAvKjoge2RhdGE6IHN0cmluZywgLi4ufSAqLykge1xuICAgIGNoZWNrZWRBc3NldHMgPSAoe30gLyo6IHt8W3N0cmluZ106IGJvb2xlYW58fSAqLyk7XG4gICAgYWNjZXB0ZWRBc3NldHMgPSAoe30gLyo6IHt8W3N0cmluZ106IGJvb2xlYW58fSAqLyk7XG4gICAgYXNzZXRzVG9BY2NlcHQgPSBbXTtcblxuICAgIHZhciBkYXRhIC8qOiBITVJNZXNzYWdlICovID0gSlNPTi5wYXJzZShldmVudC5kYXRhKTtcblxuICAgIGlmIChkYXRhLnR5cGUgPT09ICd1cGRhdGUnKSB7XG4gICAgICAvLyBSZW1vdmUgZXJyb3Igb3ZlcmxheSBpZiB0aGVyZSBpcyBvbmVcbiAgICAgIHJlbW92ZUVycm9yT3ZlcmxheSgpO1xuXG4gICAgICBsZXQgYXNzZXRzID0gZGF0YS5hc3NldHMuZmlsdGVyKGFzc2V0ID0+IGFzc2V0LmVudkhhc2ggPT09IEhNUl9FTlZfSEFTSCk7XG5cbiAgICAgIC8vIEhhbmRsZSBITVIgVXBkYXRlXG4gICAgICB2YXIgaGFuZGxlZCA9IGZhbHNlO1xuICAgICAgYXNzZXRzLmZvckVhY2goYXNzZXQgPT4ge1xuICAgICAgICB2YXIgZGlkQWNjZXB0ID1cbiAgICAgICAgICBhc3NldC50eXBlID09PSAnY3NzJyB8fFxuICAgICAgICAgIChhc3NldC50eXBlID09PSAnanMnICYmXG4gICAgICAgICAgICBobXJBY2NlcHRDaGVjayhtb2R1bGUuYnVuZGxlLnJvb3QsIGFzc2V0LmlkLCBhc3NldC5kZXBzQnlCdW5kbGUpKTtcbiAgICAgICAgaWYgKGRpZEFjY2VwdCkge1xuICAgICAgICAgIGhhbmRsZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgaWYgKGhhbmRsZWQpIHtcbiAgICAgICAgY29uc29sZS5jbGVhcigpO1xuXG4gICAgICAgIGFzc2V0cy5mb3JFYWNoKGZ1bmN0aW9uKGFzc2V0KSB7XG4gICAgICAgICAgaG1yQXBwbHkobW9kdWxlLmJ1bmRsZS5yb290LCBhc3NldCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXNzZXRzVG9BY2NlcHQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB2YXIgaWQgPSBhc3NldHNUb0FjY2VwdFtpXVsxXTtcbiAgICAgICAgICBpZiAoIWFjY2VwdGVkQXNzZXRzW2lkXSkge1xuICAgICAgICAgICAgaG1yQWNjZXB0UnVuKGFzc2V0c1RvQWNjZXB0W2ldWzBdLCBpZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGRhdGEudHlwZSA9PT0gJ2Vycm9yJykge1xuICAgICAgLy8gTG9nIHBhcmNlbCBlcnJvcnMgdG8gY29uc29sZVxuICAgICAgZm9yIChsZXQgYW5zaURpYWdub3N0aWMgb2YgZGF0YS5kaWFnbm9zdGljcy5hbnNpKSB7XG4gICAgICAgIGxldCBzdGFjayA9IGFuc2lEaWFnbm9zdGljLmNvZGVmcmFtZVxuICAgICAgICAgID8gYW5zaURpYWdub3N0aWMuY29kZWZyYW1lXG4gICAgICAgICAgOiBhbnNpRGlhZ25vc3RpYy5zdGFjaztcblxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICfwn5qoIFtwYXJjZWxdOiAnICtcbiAgICAgICAgICAgIGFuc2lEaWFnbm9zdGljLm1lc3NhZ2UgK1xuICAgICAgICAgICAgJ1xcbicgK1xuICAgICAgICAgICAgc3RhY2sgK1xuICAgICAgICAgICAgJ1xcblxcbicgK1xuICAgICAgICAgICAgYW5zaURpYWdub3N0aWMuaGludHMuam9pbignXFxuJyksXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIC8vIFJlbmRlciB0aGUgZmFuY3kgaHRtbCBvdmVybGF5XG4gICAgICByZW1vdmVFcnJvck92ZXJsYXkoKTtcbiAgICAgIHZhciBvdmVybGF5ID0gY3JlYXRlRXJyb3JPdmVybGF5KGRhdGEuZGlhZ25vc3RpY3MuaHRtbCk7XG4gICAgICAvLyAkRmxvd0ZpeE1lXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG92ZXJsYXkpO1xuICAgIH1cbiAgfTtcbiAgd3Mub25lcnJvciA9IGZ1bmN0aW9uKGUpIHtcbiAgICBjb25zb2xlLmVycm9yKGUubWVzc2FnZSk7XG4gIH07XG4gIHdzLm9uY2xvc2UgPSBmdW5jdGlvbihlKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52LlBBUkNFTF9CVUlMRF9FTlYgIT09ICd0ZXN0Jykge1xuICAgICAgY29uc29sZS53YXJuKCdbcGFyY2VsXSDwn5qoIENvbm5lY3Rpb24gdG8gdGhlIEhNUiBzZXJ2ZXIgd2FzIGxvc3QnKTtcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUVycm9yT3ZlcmxheSgpIHtcbiAgdmFyIG92ZXJsYXkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChPVkVSTEFZX0lEKTtcbiAgaWYgKG92ZXJsYXkpIHtcbiAgICBvdmVybGF5LnJlbW92ZSgpO1xuICAgIGNvbnNvbGUubG9nKCdbcGFyY2VsXSDinKggRXJyb3IgcmVzb2x2ZWQnKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVFcnJvck92ZXJsYXkoZGlhZ25vc3RpY3MpIHtcbiAgdmFyIG92ZXJsYXkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgb3ZlcmxheS5pZCA9IE9WRVJMQVlfSUQ7XG5cbiAgbGV0IGVycm9ySFRNTCA9XG4gICAgJzxkaXYgc3R5bGU9XCJiYWNrZ3JvdW5kOiBibGFjazsgb3BhY2l0eTogMC44NTsgZm9udC1zaXplOiAxNnB4OyBjb2xvcjogd2hpdGU7IHBvc2l0aW9uOiBmaXhlZDsgaGVpZ2h0OiAxMDAlOyB3aWR0aDogMTAwJTsgdG9wOiAwcHg7IGxlZnQ6IDBweDsgcGFkZGluZzogMzBweDsgZm9udC1mYW1pbHk6IE1lbmxvLCBDb25zb2xhcywgbW9ub3NwYWNlOyB6LWluZGV4OiA5OTk5O1wiPic7XG5cbiAgZm9yIChsZXQgZGlhZ25vc3RpYyBvZiBkaWFnbm9zdGljcykge1xuICAgIGxldCBzdGFjayA9IGRpYWdub3N0aWMuY29kZWZyYW1lID8gZGlhZ25vc3RpYy5jb2RlZnJhbWUgOiBkaWFnbm9zdGljLnN0YWNrO1xuXG4gICAgZXJyb3JIVE1MICs9IGBcbiAgICAgIDxkaXY+XG4gICAgICAgIDxkaXYgc3R5bGU9XCJmb250LXNpemU6IDE4cHg7IGZvbnQtd2VpZ2h0OiBib2xkOyBtYXJnaW4tdG9wOiAyMHB4O1wiPlxuICAgICAgICAgIPCfmqggJHtkaWFnbm9zdGljLm1lc3NhZ2V9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8cHJlPlxuICAgICAgICAgICR7c3RhY2t9XG4gICAgICAgIDwvcHJlPlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgICR7ZGlhZ25vc3RpYy5oaW50cy5tYXAoaGludCA9PiAnPGRpdj4nICsgaGludCArICc8L2Rpdj4nKS5qb2luKCcnKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICBgO1xuICB9XG5cbiAgZXJyb3JIVE1MICs9ICc8L2Rpdj4nO1xuXG4gIG92ZXJsYXkuaW5uZXJIVE1MID0gZXJyb3JIVE1MO1xuXG4gIHJldHVybiBvdmVybGF5O1xufVxuXG5mdW5jdGlvbiBnZXRQYXJlbnRzKGJ1bmRsZSwgaWQpIC8qOiBBcnJheTxbUGFyY2VsUmVxdWlyZSwgc3RyaW5nXT4gKi8ge1xuICB2YXIgbW9kdWxlcyA9IGJ1bmRsZS5tb2R1bGVzO1xuICBpZiAoIW1vZHVsZXMpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICB2YXIgcGFyZW50cyA9IFtdO1xuICB2YXIgaywgZCwgZGVwO1xuXG4gIGZvciAoayBpbiBtb2R1bGVzKSB7XG4gICAgZm9yIChkIGluIG1vZHVsZXNba11bMV0pIHtcbiAgICAgIGRlcCA9IG1vZHVsZXNba11bMV1bZF07XG5cbiAgICAgIGlmIChkZXAgPT09IGlkIHx8IChBcnJheS5pc0FycmF5KGRlcCkgJiYgZGVwW2RlcC5sZW5ndGggLSAxXSA9PT0gaWQpKSB7XG4gICAgICAgIHBhcmVudHMucHVzaChbYnVuZGxlLCBrXSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGJ1bmRsZS5wYXJlbnQpIHtcbiAgICBwYXJlbnRzID0gcGFyZW50cy5jb25jYXQoZ2V0UGFyZW50cyhidW5kbGUucGFyZW50LCBpZCkpO1xuICB9XG5cbiAgcmV0dXJuIHBhcmVudHM7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUxpbmsobGluaykge1xuICB2YXIgbmV3TGluayA9IGxpbmsuY2xvbmVOb2RlKCk7XG4gIG5ld0xpbmsub25sb2FkID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKGxpbmsucGFyZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgICAgLy8gJEZsb3dGaXhNZVxuICAgICAgbGluay5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGxpbmspO1xuICAgIH1cbiAgfTtcbiAgbmV3TGluay5zZXRBdHRyaWJ1dGUoXG4gICAgJ2hyZWYnLFxuICAgIC8vICRGbG93Rml4TWVcbiAgICBsaW5rLmdldEF0dHJpYnV0ZSgnaHJlZicpLnNwbGl0KCc/JylbMF0gKyAnPycgKyBEYXRlLm5vdygpLFxuICApO1xuICAvLyAkRmxvd0ZpeE1lXG4gIGxpbmsucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobmV3TGluaywgbGluay5uZXh0U2libGluZyk7XG59XG5cbnZhciBjc3NUaW1lb3V0ID0gbnVsbDtcbmZ1bmN0aW9uIHJlbG9hZENTUygpIHtcbiAgaWYgKGNzc1RpbWVvdXQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjc3NUaW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICB2YXIgbGlua3MgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdsaW5rW3JlbD1cInN0eWxlc2hlZXRcIl0nKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmtzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS10eXBlXVxuICAgICAgdmFyIGhyZWYgLyo6IHN0cmluZyAqLyA9IGxpbmtzW2ldLmdldEF0dHJpYnV0ZSgnaHJlZicpO1xuICAgICAgdmFyIGhvc3RuYW1lID0gZ2V0SG9zdG5hbWUoKTtcbiAgICAgIHZhciBzZXJ2ZWRGcm9tSE1SU2VydmVyID1cbiAgICAgICAgaG9zdG5hbWUgPT09ICdsb2NhbGhvc3QnXG4gICAgICAgICAgPyBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgICAnXihodHRwcz86XFxcXC9cXFxcLygwLjAuMC4wfDEyNy4wLjAuMSl8bG9jYWxob3N0KTonICsgZ2V0UG9ydCgpLFxuICAgICAgICAgICAgKS50ZXN0KGhyZWYpXG4gICAgICAgICAgOiBocmVmLmluZGV4T2YoaG9zdG5hbWUgKyAnOicgKyBnZXRQb3J0KCkpO1xuICAgICAgdmFyIGFic29sdXRlID1cbiAgICAgICAgL15odHRwcz86XFwvXFwvL2kudGVzdChocmVmKSAmJlxuICAgICAgICBocmVmLmluZGV4T2Yod2luZG93LmxvY2F0aW9uLm9yaWdpbikgIT09IDAgJiZcbiAgICAgICAgIXNlcnZlZEZyb21ITVJTZXJ2ZXI7XG4gICAgICBpZiAoIWFic29sdXRlKSB7XG4gICAgICAgIHVwZGF0ZUxpbmsobGlua3NbaV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNzc1RpbWVvdXQgPSBudWxsO1xuICB9LCA1MCk7XG59XG5cbmZ1bmN0aW9uIGhtckFwcGx5KGJ1bmRsZSAvKjogUGFyY2VsUmVxdWlyZSAqLywgYXNzZXQgLyo6ICBITVJBc3NldCAqLykge1xuICB2YXIgbW9kdWxlcyA9IGJ1bmRsZS5tb2R1bGVzO1xuICBpZiAoIW1vZHVsZXMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoYXNzZXQudHlwZSA9PT0gJ2NzcycpIHtcbiAgICByZWxvYWRDU1MoKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBsZXQgZGVwcyA9IGFzc2V0LmRlcHNCeUJ1bmRsZVtidW5kbGUuSE1SX0JVTkRMRV9JRF07XG4gIGlmIChkZXBzKSB7XG4gICAgdmFyIGZuID0gbmV3IEZ1bmN0aW9uKCdyZXF1aXJlJywgJ21vZHVsZScsICdleHBvcnRzJywgYXNzZXQub3V0cHV0KTtcbiAgICBtb2R1bGVzW2Fzc2V0LmlkXSA9IFtmbiwgZGVwc107XG4gIH0gZWxzZSBpZiAoYnVuZGxlLnBhcmVudCkge1xuICAgIGhtckFwcGx5KGJ1bmRsZS5wYXJlbnQsIGFzc2V0KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBobXJBY2NlcHRDaGVjayhcbiAgYnVuZGxlIC8qOiBQYXJjZWxSZXF1aXJlICovLFxuICBpZCAvKjogc3RyaW5nICovLFxuICBkZXBzQnlCdW5kbGUgLyo6ID97IFtzdHJpbmddOiB7IFtzdHJpbmddOiBzdHJpbmcgfSB9Ki8sXG4pIHtcbiAgdmFyIG1vZHVsZXMgPSBidW5kbGUubW9kdWxlcztcbiAgaWYgKCFtb2R1bGVzKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGRlcHNCeUJ1bmRsZSAmJiAhZGVwc0J5QnVuZGxlW2J1bmRsZS5ITVJfQlVORExFX0lEXSkge1xuICAgIC8vIElmIHdlIHJlYWNoZWQgdGhlIHJvb3QgYnVuZGxlIHdpdGhvdXQgZmluZGluZyB3aGVyZSB0aGUgYXNzZXQgc2hvdWxkIGdvLFxuICAgIC8vIHRoZXJlJ3Mgbm90aGluZyB0byBkby4gTWFyayBhcyBcImFjY2VwdGVkXCIgc28gd2UgZG9uJ3QgcmVsb2FkIHRoZSBwYWdlLlxuICAgIGlmICghYnVuZGxlLnBhcmVudCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGhtckFjY2VwdENoZWNrKGJ1bmRsZS5wYXJlbnQsIGlkLCBkZXBzQnlCdW5kbGUpO1xuICB9XG5cbiAgaWYgKGNoZWNrZWRBc3NldHNbaWRdKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY2hlY2tlZEFzc2V0c1tpZF0gPSB0cnVlO1xuXG4gIHZhciBjYWNoZWQgPSBidW5kbGUuY2FjaGVbaWRdO1xuXG4gIGFzc2V0c1RvQWNjZXB0LnB1c2goW2J1bmRsZSwgaWRdKTtcblxuICBpZiAoY2FjaGVkICYmIGNhY2hlZC5ob3QgJiYgY2FjaGVkLmhvdC5fYWNjZXB0Q2FsbGJhY2tzLmxlbmd0aCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGdldFBhcmVudHMobW9kdWxlLmJ1bmRsZS5yb290LCBpZCkuc29tZShmdW5jdGlvbih2KSB7XG4gICAgcmV0dXJuIGhtckFjY2VwdENoZWNrKHZbMF0sIHZbMV0sIG51bGwpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gaG1yQWNjZXB0UnVuKGJ1bmRsZSAvKjogUGFyY2VsUmVxdWlyZSAqLywgaWQgLyo6IHN0cmluZyAqLykge1xuICB2YXIgY2FjaGVkID0gYnVuZGxlLmNhY2hlW2lkXTtcbiAgYnVuZGxlLmhvdERhdGEgPSB7fTtcbiAgaWYgKGNhY2hlZCAmJiBjYWNoZWQuaG90KSB7XG4gICAgY2FjaGVkLmhvdC5kYXRhID0gYnVuZGxlLmhvdERhdGE7XG4gIH1cblxuICBpZiAoY2FjaGVkICYmIGNhY2hlZC5ob3QgJiYgY2FjaGVkLmhvdC5fZGlzcG9zZUNhbGxiYWNrcy5sZW5ndGgpIHtcbiAgICBjYWNoZWQuaG90Ll9kaXNwb3NlQ2FsbGJhY2tzLmZvckVhY2goZnVuY3Rpb24oY2IpIHtcbiAgICAgIGNiKGJ1bmRsZS5ob3REYXRhKTtcbiAgICB9KTtcbiAgfVxuXG4gIGRlbGV0ZSBidW5kbGUuY2FjaGVbaWRdO1xuICBidW5kbGUoaWQpO1xuXG4gIGNhY2hlZCA9IGJ1bmRsZS5jYWNoZVtpZF07XG4gIGlmIChjYWNoZWQgJiYgY2FjaGVkLmhvdCAmJiBjYWNoZWQuaG90Ll9hY2NlcHRDYWxsYmFja3MubGVuZ3RoKSB7XG4gICAgY2FjaGVkLmhvdC5fYWNjZXB0Q2FsbGJhY2tzLmZvckVhY2goZnVuY3Rpb24oY2IpIHtcbiAgICAgIHZhciBhc3NldHNUb0Fsc29BY2NlcHQgPSBjYihmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGdldFBhcmVudHMobW9kdWxlLmJ1bmRsZS5yb290LCBpZCk7XG4gICAgICB9KTtcbiAgICAgIGlmIChhc3NldHNUb0Fsc29BY2NlcHQgJiYgYXNzZXRzVG9BY2NlcHQubGVuZ3RoKSB7XG4gICAgICAgIGFzc2V0c1RvQWNjZXB0LnB1c2guYXBwbHkoYXNzZXRzVG9BY2NlcHQsIGFzc2V0c1RvQWxzb0FjY2VwdCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgYWNjZXB0ZWRBc3NldHNbaWRdID0gdHJ1ZTtcbn1cbiIsIlwidXNlIHN0cmljdFwiO1xuXG4vKiBnbG9iYWwgd2luZG93ICovXG52YXIgZW52ID0gd2luZG93LmNocm9tZSB8fCB3aW5kb3cuYnJvd3NlcjtcbmVudi5ydW50aW1lLm9uTWVzc2FnZS5hZGRMaXN0ZW5lcihmdW5jdGlvbiAobXNnKSB7XG4gIGlmIChtc2cuX19wYXJjZWxfaG1yX3JlbG9hZF9fKSB7XG4gICAgZW52LnJ1bnRpbWUucmVsb2FkKCk7XG4gIH1cbn0pOyJdLCJuYW1lcyI6W10sInZlcnNpb24iOjMsImZpbGUiOiJhdXRvcmVsb2FkLWJnLkhBU0hfUkVGX2ZlYTE5OTE2YzE0MzZkNGYzZThhMzQ4YjE3NzczNDJiLmpzLm1hcCJ9
|