@algoux/standard-ranklist-renderer-component-angular 0.5.0 → 0.6.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 +48 -0
- package/package.json +9 -3
- package/dist/README.md +0 -100
- package/dist/esm2022/algoux-standard-ranklist-renderer-component-angular.mjs +0 -5
- package/dist/esm2022/lib/index.mjs +0 -8
- package/dist/esm2022/lib/modal/default-solution-modal.component.mjs +0 -146
- package/dist/esm2022/lib/modal/default-user-modal.component.mjs +0 -172
- package/dist/esm2022/lib/modal/modal-interactions.mjs +0 -2
- package/dist/esm2022/lib/modal/modal.component.mjs +0 -263
- package/dist/esm2022/lib/progress/progress-bar.component.mjs +0 -247
- package/dist/esm2022/lib/progress/progress-utils.mjs +0 -45
- package/dist/esm2022/lib/ranklist/ranklist-utils.mjs +0 -110
- package/dist/esm2022/lib/ranklist/ranklist.component.mjs +0 -593
- package/dist/esm2022/lib/ranklist/status-cell-template.directive.mjs +0 -18
- package/dist/esm2022/lib/ranklist/user-cell-template.directive.mjs +0 -18
- package/dist/esm2022/lib/types.mjs +0 -2
- package/dist/esm2022/public-api.mjs +0 -2
- package/dist/fesm2022/algoux-standard-ranklist-renderer-component-angular.mjs +0 -1585
- package/dist/fesm2022/algoux-standard-ranklist-renderer-component-angular.mjs.map +0 -1
- package/dist/index.d.ts +0 -5
- package/dist/lib/index.d.ts +0 -8
- package/dist/lib/modal/default-solution-modal.component.d.ts +0 -30
- package/dist/lib/modal/default-user-modal.component.d.ts +0 -34
- package/dist/lib/modal/modal-interactions.d.ts +0 -1
- package/dist/lib/modal/modal.component.d.ts +0 -49
- package/dist/lib/progress/progress-bar.component.d.ts +0 -31
- package/dist/lib/progress/progress-utils.d.ts +0 -15
- package/dist/lib/ranklist/ranklist-utils.d.ts +0 -22
- package/dist/lib/ranklist/ranklist.component.d.ts +0 -57
- package/dist/lib/ranklist/status-cell-template.directive.d.ts +0 -23
- package/dist/lib/ranklist/user-cell-template.directive.d.ts +0 -20
- package/dist/lib/types.d.ts +0 -27
- package/dist/public-api.d.ts +0 -1
|
@@ -1,110 +0,0 @@
|
|
|
1
|
-
import { EnumTheme, formatTimeDuration, numberToAlphabet, resolveStyle, resolveText, secToTimeStr, } from '@algoux/standard-ranklist-utils';
|
|
2
|
-
export { caniuse, srkSupportedVersions } from '@algoux/standard-ranklist-renderer-component-core';
|
|
3
|
-
export const defaultBackgroundColor = {
|
|
4
|
-
[EnumTheme.light]: '#ffffff',
|
|
5
|
-
[EnumTheme.dark]: '#191919',
|
|
6
|
-
};
|
|
7
|
-
export function resolveSrkAssetUrl(url, field, formatter) {
|
|
8
|
-
if (typeof formatter === 'function') {
|
|
9
|
-
return formatter(url, field);
|
|
10
|
-
}
|
|
11
|
-
if (url.startsWith('//')) {
|
|
12
|
-
return url;
|
|
13
|
-
}
|
|
14
|
-
const protocolMatch = url.match(/^([a-zA-Z][a-zA-Z0-9+.-]*):/);
|
|
15
|
-
if (protocolMatch) {
|
|
16
|
-
const protocol = protocolMatch[1].toLowerCase();
|
|
17
|
-
if (protocol === 'http' || protocol === 'https' || protocol === 'data') {
|
|
18
|
-
return url;
|
|
19
|
-
}
|
|
20
|
-
console.warn(`unsupported protocol "${protocol}" in srk asset url:`, url);
|
|
21
|
-
return '';
|
|
22
|
-
}
|
|
23
|
-
console.warn('unsupported srk asset url:', url);
|
|
24
|
-
return '';
|
|
25
|
-
}
|
|
26
|
-
export function getAcceptedStatusDetails(status) {
|
|
27
|
-
return `${status.tries}/${status.time ? formatTimeDuration(status.time, 'min', Math.floor) : '-'}`;
|
|
28
|
-
}
|
|
29
|
-
export function getSolutionResultMeta(result) {
|
|
30
|
-
switch (result) {
|
|
31
|
-
case 'FB':
|
|
32
|
-
return { label: 'First Blood', className: 'srk-preset-result-fb' };
|
|
33
|
-
case 'AC':
|
|
34
|
-
return { label: 'Accepted', className: 'srk-preset-result-ac' };
|
|
35
|
-
case 'RJ':
|
|
36
|
-
return { label: 'Rejected', className: 'srk-preset-result-rj' };
|
|
37
|
-
case '?':
|
|
38
|
-
return { label: 'Frozen', className: 'srk-preset-result-fz' };
|
|
39
|
-
case 'WA':
|
|
40
|
-
return { label: 'Wrong Answer', className: 'srk-preset-result-rj' };
|
|
41
|
-
case 'PE':
|
|
42
|
-
return { label: 'Presentation Error', className: 'srk-preset-result-rj' };
|
|
43
|
-
case 'TLE':
|
|
44
|
-
return { label: 'Time Limit Exceeded', className: 'srk-preset-result-rj' };
|
|
45
|
-
case 'MLE':
|
|
46
|
-
return { label: 'Memory Limit Exceeded', className: 'srk-preset-result-rj' };
|
|
47
|
-
case 'OLE':
|
|
48
|
-
return { label: 'Output Limit Exceeded', className: 'srk-preset-result-rj' };
|
|
49
|
-
case 'RTE':
|
|
50
|
-
return { label: 'Runtime Error', className: 'srk-preset-result-rj' };
|
|
51
|
-
case 'NOUT':
|
|
52
|
-
return { label: 'No Output' };
|
|
53
|
-
case 'CE':
|
|
54
|
-
return { label: 'Compile Error' };
|
|
55
|
-
case 'UKE':
|
|
56
|
-
return { label: 'Unknown Error' };
|
|
57
|
-
case null:
|
|
58
|
-
return { label: '--' };
|
|
59
|
-
default:
|
|
60
|
-
return { label: result };
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
export function getSolutionModalTitle(problemIndex, user) {
|
|
64
|
-
return `Solutions of ${numberToAlphabet(problemIndex)} (${resolveText(user.name)})`;
|
|
65
|
-
}
|
|
66
|
-
export function formatSolutionTimestamp(solution) {
|
|
67
|
-
return secToTimeStr(formatTimeDuration(solution.time, 's'));
|
|
68
|
-
}
|
|
69
|
-
export function getProblemHeaderBackgroundImage(style, theme) {
|
|
70
|
-
const { backgroundColor } = resolveStyle(style || {});
|
|
71
|
-
const resolvedColor = backgroundColor[theme] || defaultBackgroundColor[theme];
|
|
72
|
-
const bgColorAlphaStr = withAlpha(resolvedColor, 0.27);
|
|
73
|
-
return `linear-gradient(180deg, ${resolvedColor} 0%, ${resolvedColor} 10%, ${bgColorAlphaStr} 10%, transparent 100%)`;
|
|
74
|
-
}
|
|
75
|
-
export function getMarkerPresentation(marker, theme) {
|
|
76
|
-
if (typeof marker.style === 'string') {
|
|
77
|
-
return { className: `srk-preset-marker-${marker.style}` };
|
|
78
|
-
}
|
|
79
|
-
if (marker.style) {
|
|
80
|
-
return {
|
|
81
|
-
style: {
|
|
82
|
-
backgroundColor: resolveStyle(marker.style).backgroundColor[theme],
|
|
83
|
-
},
|
|
84
|
-
};
|
|
85
|
-
}
|
|
86
|
-
return {};
|
|
87
|
-
}
|
|
88
|
-
export function shouldShowTimeColumn(rows) {
|
|
89
|
-
return rows.some((row) => Boolean(row.score?.time));
|
|
90
|
-
}
|
|
91
|
-
function withAlpha(color, alpha) {
|
|
92
|
-
const hexMatch = color.match(/^#([0-9a-f]{6})$/i);
|
|
93
|
-
if (hexMatch) {
|
|
94
|
-
const value = hexMatch[1];
|
|
95
|
-
const red = parseInt(value.slice(0, 2), 16);
|
|
96
|
-
const green = parseInt(value.slice(2, 4), 16);
|
|
97
|
-
const blue = parseInt(value.slice(4, 6), 16);
|
|
98
|
-
return `rgba(${red}, ${green}, ${blue}, ${alpha})`;
|
|
99
|
-
}
|
|
100
|
-
const rgbMatch = color.match(/^rgb\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)$/i);
|
|
101
|
-
if (rgbMatch) {
|
|
102
|
-
return `rgba(${rgbMatch[1]}, ${rgbMatch[2]}, ${rgbMatch[3]}, ${alpha})`;
|
|
103
|
-
}
|
|
104
|
-
const rgbaMatch = color.match(/^rgba\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*,\s*[\d.]+\s*\)$/i);
|
|
105
|
-
if (rgbaMatch) {
|
|
106
|
-
return `rgba(${rgbaMatch[1]}, ${rgbaMatch[2]}, ${rgbaMatch[3]}, ${alpha})`;
|
|
107
|
-
}
|
|
108
|
-
return color;
|
|
109
|
-
}
|
|
110
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFua2xpc3QtdXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3JhbmtsaXN0L3JhbmtsaXN0LXV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFDTCxTQUFTLEVBQ1Qsa0JBQWtCLEVBQ2xCLGdCQUFnQixFQUNoQixZQUFZLEVBQ1osV0FBVyxFQUNYLFlBQVksR0FDYixNQUFNLGlDQUFpQyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUVsRyxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBOEI7SUFDL0QsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsU0FBUztJQUM1QixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxTQUFTO0NBQzVCLENBQUM7QUFjRixNQUFNLFVBQVUsa0JBQWtCLENBQ2hDLEdBQVcsRUFDWCxLQUFhLEVBQ2IsU0FBa0Q7SUFFbEQsSUFBSSxPQUFPLFNBQVMsS0FBSyxVQUFVLEVBQUUsQ0FBQztRQUNwQyxPQUFPLFNBQVMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUNELElBQUksR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ3pCLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUNELE1BQU0sYUFBYSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsNkJBQTZCLENBQUMsQ0FBQztJQUMvRCxJQUFJLGFBQWEsRUFBRSxDQUFDO1FBQ2xCLE1BQU0sUUFBUSxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNoRCxJQUFJLFFBQVEsS0FBSyxNQUFNLElBQUksUUFBUSxLQUFLLE9BQU8sSUFBSSxRQUFRLEtBQUssTUFBTSxFQUFFLENBQUM7WUFDdkUsT0FBTyxHQUFHLENBQUM7UUFDYixD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QUUsQ0FBQztRQUNiLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxQixNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDNUMsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzlDLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUM3QyxPQUFPLFFBQVEsR0FBRyxLQUFLLEtBQUssS0FBSyxJQUFJLEtBQUssS0FBSyxHQUFHLENBQUM7SUFDckQsQ0FBQztJQUVELE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsK0NBQStDLENBQUMsQ0FBQztJQUM5RSxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQ2IsT0FBTyxRQUFRLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssR0FBRyxDQUFDO0lBQzFFLENBQUM7SUFFRCxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLDZEQUE2RCxDQUFDLENBQUM7SUFDN0YsSUFBSSxTQUFTLEVBQUUsQ0FBQztRQUNkLE9BQU8sUUFBUSxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLEdBQUcsQ0FBQztJQUM3RSxDQUFDO0lBRUQsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgKiBhcyBzcmsgZnJvbSAnQGFsZ291eC9zdGFuZGFyZC1yYW5rbGlzdCc7XG5pbXBvcnQge1xuICBFbnVtVGhlbWUsXG4gIGZvcm1hdFRpbWVEdXJhdGlvbixcbiAgbnVtYmVyVG9BbHBoYWJldCxcbiAgcmVzb2x2ZVN0eWxlLFxuICByZXNvbHZlVGV4dCxcbiAgc2VjVG9UaW1lU3RyLFxufSBmcm9tICdAYWxnb3V4L3N0YW5kYXJkLXJhbmtsaXN0LXV0aWxzJztcbmV4cG9ydCB7IGNhbml1c2UsIHNya1N1cHBvcnRlZFZlcnNpb25zIH0gZnJvbSAnQGFsZ291eC9zdGFuZGFyZC1yYW5rbGlzdC1yZW5kZXJlci1jb21wb25lbnQtY29yZSc7XG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0QmFja2dyb3VuZENvbG9yOiBSZWNvcmQ8RW51bVRoZW1lLCBzdHJpbmc+ID0ge1xuICBbRW51bVRoZW1lLmxpZ2h0XTogJyNmZmZmZmYnLFxuICBbRW51bVRoZW1lLmRhcmtdOiAnIzE5MTkxOScsXG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIE1hcmtlclByZXNlbnRhdGlvbiB7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgc3R5bGU/OiB7XG4gICAgYmFja2dyb3VuZENvbG9yPzogc3RyaW5nO1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNvbHV0aW9uUmVzdWx0TWV0YSB7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVTcmtBc3NldFVybChcbiAgdXJsOiBzdHJpbmcsXG4gIGZpZWxkOiBzdHJpbmcsXG4gIGZvcm1hdHRlcj86ICh1cmw6IHN0cmluZywgZmllbGQ6IHN0cmluZykgPT4gc3RyaW5nLFxuKTogc3RyaW5nIHtcbiAgaWYgKHR5cGVvZiBmb3JtYXR0ZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZm9ybWF0dGVyKHVybCwgZmllbGQpO1xuICB9XG4gIGlmICh1cmwuc3RhcnRzV2l0aCgnLy8nKSkge1xuICAgIHJldHVybiB1cmw7XG4gIH1cbiAgY29uc3QgcHJvdG9jb2xNYXRjaCA9IHVybC5tYXRjaCgvXihbYS16QS1aXVthLXpBLVowLTkrLi1dKik6Lyk7XG4gIGlmIChwcm90b2NvbE1hdGNoKSB7XG4gICAgY29uc3QgcHJvdG9jb2wgPSBwcm90b2NvbE1hdGNoWzFdLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKHByb3RvY29sID09PSAnaHR0cCcgfHwgcHJvdG9jb2wgPT09ICdodHRwcycgfHwgcHJvdG9jb2wgPT09ICdkYXRhJykge1xuICAgICAgcmV0dXJuIHVybDtcbiAgICB9XG4gICAgY29uc29sZS53YXJuKGB1bnN1cHBvcnRlZCBwcm90b2NvbCBcIiR7cHJvdG9jb2x9XCIgaW4gc3JrIGFzc2V0IHVybDpgLCB1cmwpO1xuICAgIHJldHVybiAnJztcbiAgfVxuICBjb25zb2xlLndhcm4oJ3Vuc3VwcG9ydGVkIHNyayBhc3NldCB1cmw6JywgdXJsKTtcbiAgcmV0dXJuICcnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWNjZXB0ZWRTdGF0dXNEZXRhaWxzKHN0YXR1czogc3JrLlJhbmtQcm9ibGVtU3RhdHVzKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke3N0YXR1cy50cmllc30vJHtzdGF0dXMudGltZSA/IGZvcm1hdFRpbWVEdXJhdGlvbihzdGF0dXMudGltZSwgJ21pbicsIE1hdGguZmxvb3IpIDogJy0nfWA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTb2x1dGlvblJlc3VsdE1ldGEocmVzdWx0OiBzcmsuU29sdXRpb25bJ3Jlc3VsdCddKTogU29sdXRpb25SZXN1bHRNZXRhIHtcbiAgc3dpdGNoIChyZXN1bHQpIHtcbiAgICBjYXNlICdGQic6XG4gICAgICByZXR1cm4geyBsYWJlbDogJ0ZpcnN0IEJsb29kJywgY2xhc3NOYW1lOiAnc3JrLXByZXNldC1yZXN1bHQtZmInIH07XG4gICAgY2FzZSAnQUMnOlxuICAgICAgcmV0dXJuIHsgbGFiZWw6ICdBY2NlcHRlZCcsIGNsYXNzTmFtZTogJ3Nyay1wcmVzZXQtcmVzdWx0LWFjJyB9O1xuICAgIGNhc2UgJ1JKJzpcbiAgICAgIHJldHVybiB7IGxhYmVsOiAnUmVqZWN0ZWQnLCBjbGFzc05hbWU6ICdzcmstcHJlc2V0LXJlc3VsdC1yaicgfTtcbiAgICBjYXNlICc/JzpcbiAgICAgIHJldHVybiB7IGxhYmVsOiAnRnJvemVuJywgY2xhc3NOYW1lOiAnc3JrLXByZXNldC1yZXN1bHQtZnonIH07XG4gICAgY2FzZSAnV0EnOlxuICAgICAgcmV0dXJuIHsgbGFiZWw6ICdXcm9uZyBBbnN3ZXInLCBjbGFzc05hbWU6ICdzcmstcHJlc2V0LXJlc3VsdC1yaicgfTtcbiAgICBjYXNlICdQRSc6XG4gICAgICByZXR1cm4geyBsYWJlbDogJ1ByZXNlbnRhdGlvbiBFcnJvcicsIGNsYXNzTmFtZTogJ3Nyay1wcmVzZXQtcmVzdWx0LXJqJyB9O1xuICAgIGNhc2UgJ1RMRSc6XG4gICAgICByZXR1cm4geyBsYWJlbDogJ1RpbWUgTGltaXQgRXhjZWVkZWQnLCBjbGFzc05hbWU6ICdzcmstcHJlc2V0LXJlc3VsdC1yaicgfTtcbiAgICBjYXNlICdNTEUnOlxuICAgICAgcmV0dXJuIHsgbGFiZWw6ICdNZW1vcnkgTGltaXQgRXhjZWVkZWQnLCBjbGFzc05hbWU6ICdzcmstcHJlc2V0LXJlc3VsdC1yaicgfTtcbiAgICBjYXNlICdPTEUnOlxuICAgICAgcmV0dXJuIHsgbGFiZWw6ICdPdXRwdXQgTGltaXQgRXhjZWVkZWQnLCBjbGFzc05hbWU6ICdzcmstcHJlc2V0LXJlc3VsdC1yaicgfTtcbiAgICBjYXNlICdSVEUnOlxuICAgICAgcmV0dXJuIHsgbGFiZWw6ICdSdW50aW1lIEVycm9yJywgY2xhc3NOYW1lOiAnc3JrLXByZXNldC1yZXN1bHQtcmonIH07XG4gICAgY2FzZSAnTk9VVCc6XG4gICAgICByZXR1cm4geyBsYWJlbDogJ05vIE91dHB1dCcgfTtcbiAgICBjYXNlICdDRSc6XG4gICAgICByZXR1cm4geyBsYWJlbDogJ0NvbXBpbGUgRXJyb3InIH07XG4gICAgY2FzZSAnVUtFJzpcbiAgICAgIHJldHVybiB7IGxhYmVsOiAnVW5rbm93biBFcnJvcicgfTtcbiAgICBjYXNlIG51bGw6XG4gICAgICByZXR1cm4geyBsYWJlbDogJy0tJyB9O1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4geyBsYWJlbDogcmVzdWx0IH07XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNvbHV0aW9uTW9kYWxUaXRsZShwcm9ibGVtSW5kZXg6IG51bWJlciwgdXNlcjogc3JrLlVzZXIpOiBzdHJpbmcge1xuICByZXR1cm4gYFNvbHV0aW9ucyBvZiAke251bWJlclRvQWxwaGFiZXQocHJvYmxlbUluZGV4KX0gKCR7cmVzb2x2ZVRleHQodXNlci5uYW1lKX0pYDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFNvbHV0aW9uVGltZXN0YW1wKHNvbHV0aW9uOiBzcmsuU29sdXRpb24pOiBzdHJpbmcge1xuICByZXR1cm4gc2VjVG9UaW1lU3RyKGZvcm1hdFRpbWVEdXJhdGlvbihzb2x1dGlvbi50aW1lLCAncycpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFByb2JsZW1IZWFkZXJCYWNrZ3JvdW5kSW1hZ2Uoc3R5bGU6IHNyay5TdHlsZSB8IHVuZGVmaW5lZCwgdGhlbWU6IEVudW1UaGVtZSk6IHN0cmluZyB7XG4gIGNvbnN0IHsgYmFja2dyb3VuZENvbG9yIH0gPSByZXNvbHZlU3R5bGUoc3R5bGUgfHwge30pO1xuICBjb25zdCByZXNvbHZlZENvbG9yID0gYmFja2dyb3VuZENvbG9yW3RoZW1lXSB8fCBkZWZhdWx0QmFja2dyb3VuZENvbG9yW3RoZW1lXTtcbiAgY29uc3QgYmdDb2xvckFscGhhU3RyID0gd2l0aEFscGhhKHJlc29sdmVkQ29sb3IsIDAuMjcpO1xuICByZXR1cm4gYGxpbmVhci1ncmFkaWVudCgxODBkZWcsICR7cmVzb2x2ZWRDb2xvcn0gMCUsICR7cmVzb2x2ZWRDb2xvcn0gMTAlLCAke2JnQ29sb3JBbHBoYVN0cn0gMTAlLCB0cmFuc3BhcmVudCAxMDAlKWA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNYXJrZXJQcmVzZW50YXRpb24obWFya2VyOiBzcmsuTWFya2VyLCB0aGVtZTogRW51bVRoZW1lKTogTWFya2VyUHJlc2VudGF0aW9uIHtcbiAgaWYgKHR5cGVvZiBtYXJrZXIuc3R5bGUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHsgY2xhc3NOYW1lOiBgc3JrLXByZXNldC1tYXJrZXItJHttYXJrZXIuc3R5bGV9YCB9O1xuICB9XG4gIGlmIChtYXJrZXIuc3R5bGUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3R5bGU6IHtcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiByZXNvbHZlU3R5bGUobWFya2VyLnN0eWxlKS5iYWNrZ3JvdW5kQ29sb3JbdGhlbWVdLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG4gIHJldHVybiB7fTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNob3VsZFNob3dUaW1lQ29sdW1uKHJvd3M6IHNyay5SYW5rbGlzdFJvd1tdKTogYm9vbGVhbiB7XG4gIHJldHVybiByb3dzLnNvbWUoKHJvdykgPT4gQm9vbGVhbihyb3cuc2NvcmU/LnRpbWUpKTtcbn1cblxuZnVuY3Rpb24gd2l0aEFscGhhKGNvbG9yOiBzdHJpbmcsIGFscGhhOiBudW1iZXIpIHtcbiAgY29uc3QgaGV4TWF0Y2ggPSBjb2xvci5tYXRjaCgvXiMoWzAtOWEtZl17Nn0pJC9pKTtcbiAgaWYgKGhleE1hdGNoKSB7XG4gICAgY29uc3QgdmFsdWUgPSBoZXhNYXRjaFsxXTtcbiAgICBjb25zdCByZWQgPSBwYXJzZUludCh2YWx1ZS5zbGljZSgwLCAyKSwgMTYpO1xuICAgIGNvbnN0IGdyZWVuID0gcGFyc2VJbnQodmFsdWUuc2xpY2UoMiwgNCksIDE2KTtcbiAgICBjb25zdCBibHVlID0gcGFyc2VJbnQodmFsdWUuc2xpY2UoNCwgNiksIDE2KTtcbiAgICByZXR1cm4gYHJnYmEoJHtyZWR9LCAke2dyZWVufSwgJHtibHVlfSwgJHthbHBoYX0pYDtcbiAgfVxuXG4gIGNvbnN0IHJnYk1hdGNoID0gY29sb3IubWF0Y2goL15yZ2JcXChcXHMqKFxcZCspXFxzKixcXHMqKFxcZCspXFxzKixcXHMqKFxcZCspXFxzKlxcKSQvaSk7XG4gIGlmIChyZ2JNYXRjaCkge1xuICAgIHJldHVybiBgcmdiYSgke3JnYk1hdGNoWzFdfSwgJHtyZ2JNYXRjaFsyXX0sICR7cmdiTWF0Y2hbM119LCAke2FscGhhfSlgO1xuICB9XG5cbiAgY29uc3QgcmdiYU1hdGNoID0gY29sb3IubWF0Y2goL15yZ2JhXFwoXFxzKihcXGQrKVxccyosXFxzKihcXGQrKVxccyosXFxzKihcXGQrKVxccyosXFxzKltcXGQuXStcXHMqXFwpJC9pKTtcbiAgaWYgKHJnYmFNYXRjaCkge1xuICAgIHJldHVybiBgcmdiYSgke3JnYmFNYXRjaFsxXX0sICR7cmdiYU1hdGNoWzJdfSwgJHtyZ2JhTWF0Y2hbM119LCAke2FscGhhfSlgO1xuICB9XG5cbiAgcmV0dXJuIGNvbG9yO1xufVxuIl19
|