bx-rest 1.4.0 → 1.5.1
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/CHANGELOG.md +126 -0
- package/README.en.md +3 -3
- package/README.md +3 -3
- package/esm2022/functions/errors.mjs +2 -1
- package/esm2022/functions/mapResult.mjs +4 -2
- package/esm2022/map/disk.mjs +13 -0
- package/esm2022/map/im/recent.mjs +1 -9
- package/esm2022/map/task.mjs +11 -5
- package/esm2022/map/tasks/task.mjs +3 -3
- package/esm2022/map/tasks.mjs +4 -3
- package/esm2022/map/user.mjs +5 -4
- package/esm2022/public-api.mjs +1 -1
- package/esm2022/request-navvy/bizproc.mjs +2 -2
- package/esm2022/request-navvy/crm/item.mjs +1 -1
- package/esm2022/request-navvy/crm/type.mjs +1 -1
- package/esm2022/request-navvy/pull/config.mjs +1 -3
- package/esm2022/request-navvy/task/operation/elapseditem.mjs +8 -65
- package/esm2022/rest/map.mjs +3 -3
- package/esm2022/services/base.mjs +7 -4
- package/esm2022/services/http/HttpBX.mjs +8 -3
- package/esm2022/services/navvy/extends/navvy-pag-base.mjs +78 -9
- package/esm2022/services/navvy/navvy-alternative-pagination-navigation.mjs +21 -71
- package/esm2022/services/navvy/navvy-pag-nav-result-key-object.mjs +12 -52
- package/esm2022/services/navvy/navvy-pag-nav-result-key.mjs +15 -71
- package/esm2022/services/navvy/navvy-pag-nav-tasks.mjs +5 -76
- package/esm2022/services/navvy/navvy-pag-nav-with-useless-key.mjs +10 -76
- package/esm2022/services/navvy/navvy-pag.mjs +7 -65
- package/esm2022/typification/rest/crm/universal.mjs +1 -1
- package/esm2022/typification/rest/settings.mjs +1 -1
- package/esm2022/typification/rest/user/user.mjs +1 -1
- package/fesm2022/bx-rest.mjs +507 -1653
- package/fesm2022/bx-rest.mjs.map +1 -1
- package/functions/errors.d.ts +1 -0
- package/map/disk.d.ts +10 -0
- package/map/task.d.ts +3 -3
- package/map/tasks/task.d.ts +1 -1
- package/map/tasks.d.ts +1 -1
- package/package.json +8 -2
- package/public-api.d.ts +5 -2
- package/request-navvy/crm/item.d.ts +6 -6
- package/request-navvy/crm/type.d.ts +6 -6
- package/request-navvy/pull/config.d.ts +0 -2
- package/rest/map.d.ts +2 -2
- package/services/navvy/extends/navvy-pag-base.d.ts +21 -1
- package/services/navvy/navvy-alternative-pagination-navigation.d.ts +5 -2
- package/services/navvy/navvy-pag-nav-result-key-object.d.ts +0 -2
- package/services/navvy/navvy-pag-nav-result-key.d.ts +1 -4
- package/services/navvy/navvy-pag-nav-tasks.d.ts +5 -9
- package/services/navvy/navvy-pag-nav-with-useless-key.d.ts +0 -2
- package/services/navvy/navvy-pag.d.ts +0 -2
- package/typification/rest/crm/universal.d.ts +116 -0
- package/typification/rest/settings.d.ts +1 -0
- package/typification/rest/user/user.d.ts +3 -3
|
@@ -145,8 +145,12 @@ function parseDateWithFormat(val, format) {
|
|
|
145
145
|
if (month < 1 || month > 12 || day < 1 || day > 31 || hour > 23 || minute > 59 || second > 59) {
|
|
146
146
|
return null;
|
|
147
147
|
}
|
|
148
|
+
return buildDate(year, month, day, hour, minute, second);
|
|
149
|
+
}
|
|
150
|
+
/** Собирает дату, отбрасывая несуществующие дни месяца: new Date() превратил бы 31 февраля в 3 марта. */
|
|
151
|
+
function buildDate(year, month, day, hour, minute, second) {
|
|
148
152
|
const date = new Date(year, month - 1, day, hour, minute, second);
|
|
149
|
-
return isNaN(date.getTime()) ? null : date;
|
|
153
|
+
return (isNaN(date.getTime()) || date.getMonth() !== month - 1 || date.getDate() !== day) ? null : date;
|
|
150
154
|
}
|
|
151
155
|
/**
|
|
152
156
|
* Последний резервный разбор — без знания конкретного формата. Работает только для чисто
|
|
@@ -189,8 +193,7 @@ function parseDateHeuristically(val) {
|
|
|
189
193
|
if (hour > 23 || minute > 59 || second > 59) {
|
|
190
194
|
return null;
|
|
191
195
|
}
|
|
192
|
-
|
|
193
|
-
return isNaN(date.getTime()) ? null : date;
|
|
196
|
+
return buildDate(year, month, day, hour, minute, second);
|
|
194
197
|
}
|
|
195
198
|
/**
|
|
196
199
|
* Преобразует значение в дату.
|
|
@@ -354,4 +357,4 @@ export function prepareBaseAddress(url, add = '') {
|
|
|
354
357
|
}
|
|
355
358
|
return url;
|
|
356
359
|
}
|
|
357
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2J4LXJlc3Qvc3JjL3NlcnZpY2VzL2Jhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFBO0FBRXREOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLEtBQUssQ0FBQyxHQUFRLEVBQUUsVUFBVSxHQUFHLEtBQUs7SUFDaEQsSUFBSSxHQUFHLEtBQUssSUFBSSxJQUFJLEdBQUcsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUN0QyxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ2YsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQkFBa0IsR0FBRyxnQ0FBZ0MsQ0FBQyxDQUFBO1FBQ3hFLENBQUM7UUFDRCxPQUFPLEVBQUUsQ0FBQTtJQUNYLENBQUM7SUFDRCxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQTtBQUNwQixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsS0FBSyxDQUFDLEdBQVEsRUFBRSxVQUFVLEdBQUcsSUFBSSxFQUFFLFFBQVEsR0FBRyxDQUFDO0lBQzdELE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUUxQixJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQ2xCLE1BQU0sS0FBSyxHQUFHLElBQUksVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBRWpDLElBQUksVUFBVTtZQUFFLE1BQU0sS0FBSyxDQUFBO1FBRTNCLGtEQUFrRDtRQUNsRCxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFBO1FBQy9CLE9BQU8sUUFBUSxDQUFBO0lBQ2pCLENBQUM7SUFFRCxPQUFPLE1BQU0sQ0FBQTtBQUNmLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sT0FBTyxVQUFXLFNBQVEsS0FBSztJQUNuQyxZQUE0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RSxLQUFLLENBQUMsQ0FBQyxDQUFDO1NBQ2QsQ0FBQTtJQUNILENBQUM7SUFDRCxPQUFPLFNBQVMsQ0FBQTtBQUNsQixDQUFDO0FBRUQsTUFBTSxVQUFVLGtCQUFrQixDQUFDLEdBQVcsRUFBRSxNQUEwQixFQUFFO0lBQzFFLCtEQUErRDtJQUMvRCwyQkFBMkI7SUFDM0IsSUFBSTtJQUVKLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDMUIsSUFBSSxHQUFHLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzlDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFBO1FBQ2pCLENBQUM7UUFFRCxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQTtJQUNqQixDQUFDO0lBRUQsSUFBSSxHQUFHLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzlDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFBO0lBQ2pCLENBQUM7SUFFRCxPQUFPLEdBQUcsQ0FBQTtBQUNaLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0b0xvY2FsQXRvbSB9IGZyb20gJy4uL2Z1bmN0aW9ucy90b0xvY2FsQXRvbSdcclxuXHJcbi8qKlxyXG4gKiDQn9GA0LXQvtCx0YDQsNC30YPQtdGCINC30L3QsNGH0LXQvdC40LUg0LIg0YHRgtGA0L7QutGDXHJcbiAqXHJcbiAqIEBwYXJhbSB2YWxcclxuICogQHBhcmFtIHRocm93RXJyb3JcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiB0b1N0cih2YWw6IGFueSwgdGhyb3dFcnJvciA9IGZhbHNlKTogc3RyaW5nIHtcclxuICBpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICBpZiAodGhyb3dFcnJvcikge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdmFsdWU6ICR7dmFsfSBjYW5ub3QgYmUgY29udmVydGVkIHRvIHN0cmluZ2ApXHJcbiAgICB9XHJcbiAgICByZXR1cm4gJydcclxuICB9XHJcbiAgcmV0dXJuIFN0cmluZyh2YWwpXHJcbn1cclxuXHJcbi8qKlxyXG4gKiDQn9GA0LXQvtCx0YDQsNC30YPQtdGCINC30L3QsNGH0LXQvdC40LUg0LIg0YfQuNGB0LvQvlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHRvTnVtKHZhbDogYW55LCB0aHJvd0Vycm9yID0gdHJ1ZSwgZGVmVmFsdWUgPSAwKTogbnVtYmVyIHtcclxuICBjb25zdCByZXN1bHQgPSBOdW1iZXIodmFsKVxyXG5cclxuICBpZiAoaXNOYU4ocmVzdWx0KSkge1xyXG4gICAgY29uc3QgZXJyb3IgPSBuZXcgVG9OdW1FcnJvcih2YWwpXHJcblxyXG4gICAgaWYgKHRocm93RXJyb3IpIHRocm93IGVycm9yXHJcblxyXG4gICAgLy8g0JXRgdC70Lgg0L7RiNC40LHQutCwINC90LUg0L/RgNC+0LHRgNCw0YHRi9Cy0LDQtdGC0YHRjyDigJQg0L/RgNC+0YHRgtC+INC70L7Qs9C40YDRg9C10LxcclxuICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IudG9TdHJpbmcoKSlcclxuICAgIHJldHVybiBkZWZWYWx1ZVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHJlc3VsdFxyXG59XHJcblxyXG4vKipcclxuICog0JrQsNGB0YLQvtC80L3Ri9C5INGC0LjQvyDQvtGI0LjQsdC60Lgg0LTQu9GPINGH0LjRgdC70L7QstGL0YUg0L/RgNC10L7QsdGA0LDQt9C+0LLQsNC90LjQuVxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIFRvTnVtRXJyb3IgZXh0ZW5kcyBFcnJvciB7XHJcbiAgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IHZhbHVlOiBhbnkpIHtcclxuICAgIGNvbnN0IHZhbHVlVHlwZSA9IHR5cGVvZiB2YWx1ZVxyXG4gICAgY29uc3QgZm9ybWF0dGVkVmFsdWUgPVxyXG4gICAgICB2YWx1ZVR5cGUgPT09ICdvYmplY3QnID8gSlNPTi5zdHJpbmdpZnkodmFsdWUpIDogU3RyaW5nKHZhbHVlKVxyXG4gICAgY29uc3QgbWVzc2FnZSA9IGBJbnZhbGlkIHZhbHVlIHBhc3NlZCB0byB0b051bSgpOiAke2Zvcm1hdHRlZFZhbHVlfSAodHlwZTogJHt2YWx1ZVR5cGV9KWBcclxuICAgIHN1cGVyKG1lc3NhZ2UpXHJcbiAgICB0aGlzLm5hbWUgPSAnVG9OdW1FcnJvcidcclxuXHJcbiAgICAvLyDRgdC+0YXRgNCw0L3Rj9C10Lwg0YHRgtC10Log0LLRi9C30L7QstCwICjQvtGC0YTQuNC70YzRgtGA0L7QstCw0LIg0YHQsNC8INC60L7QvdGB0YLRgNGD0LrRgtC+0YApXHJcbiAgICBpZiAodGhpcy5zdGFjaykge1xyXG4gICAgICBjb25zdCBzdGFja0xpbmVzID0gdGhpcy5zdGFjay5zcGxpdCgnXFxuJylcclxuICAgICAgLy8g0KPQtNCw0LvRj9C10Lwg0YHRgtGA0L7QutGDINC60L7QvdGB0YLRgNGD0LrRgtC+0YDQsCAo0YfRgtC+0LHRiyDRgdGC0LXQuiDQvdCw0YfQuNC90LDQu9GB0Y8g0YEg0LzQtdGB0YLQsCDQstGL0LfQvtCy0LAgdG9OdW0pXHJcbiAgICAgIHRoaXMuc3RhY2sgPSBbc3RhY2tMaW5lc1swXSwgLi4uc3RhY2tMaW5lcy5zbGljZSgyKV0uam9pbignXFxuJylcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIHRvU3RyaW5nKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gW1xyXG4gICAgICBg4p2MIFske3RoaXMubmFtZX1dICR7dGhpcy5tZXNzYWdlfWAsXHJcbiAgICAgIHRoaXMuc3RhY2sgPyBgICAgU3RhY2sgdHJhY2U6XFxuJHt0aGlzLnN0YWNrfWAgOiAnJyxcclxuICAgIF0uam9pbignXFxuJylcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiDQntC/0YbQuNC4INC00LvRjyB0b0RhdGUoKS4g0J7RgdGC0LDQstC70LXQvdGLINC00LvRjyDQvtCx0YDQsNGC0L3QvtC5INGB0L7QstC80LXRgdGC0LjQvNC+0YHRgtC4INGB0LjQs9C90LDRgtGD0YDRiyDigJQg0YDQsNC90LXQtSDQv9GA0L7QsdGA0LDRgdGL0LLQsNC70LjRgdGMXHJcbiAqINCyIGx1eG9uICjQt9C+0L3QsC/Qu9C+0LrQsNC70YwpLiDQoNCw0LfQsdC+0YAg0LTQsNGC0Ysg0YLQtdC/0LXRgNGMINC90LUg0LfQsNCy0LjRgdC40YIg0L7RgiDQstC90LXRiNC90LjRhSDQsdC40LHQu9C40L7RgtC10Log0Lgg0L/QvtC00LTQtdGA0LbQuNCy0LDQtdGCXHJcbiAqINGC0L7Qu9GM0LrQviDRhNC40LrRgdC40YDQvtCy0LDQvdC90YvQtSDRh9C40YHQu9C+0LLRi9C1INGC0L7QutC10L3RiyAo0YHQvC4gcGFyc2VEYXRlV2l0aEZvcm1hdCksINC/0L7RjdGC0L7QvNGDINC+0L/RhtC40Lgg0YHQtdC50YfQsNGBINC90LUg0LjRgdC/0L7Qu9GM0LfRg9GO0YLRgdGPLlxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBUb0RhdGVPcHRpb25zIHtcclxuICB6b25lPzogc3RyaW5nXHJcbiAgbG9jYWxlPzogc3RyaW5nXHJcbn1cclxuXHJcbi8qKiDQodC+0L7RgtCy0LXRgtGB0YLQstC40LUg0YLQvtC60LXQvdC+0LIg0YTQvtGA0LzQsNGC0LAg0YDQtdCz0YPQu9GP0YDQvdGL0Lwg0LPRgNGD0L/Qv9Cw0Lwg0LfQsNGF0LLQsNGC0LAuINCf0L7RgNGP0LTQvtC6INCy0LDQttC10L06INC00LvQuNC90L3Ri9C1INGC0L7QutC10L3RiyDQv9GA0L7QstC10YDRj9GO0YLRgdGPINGA0LDQvdGM0YjQtSDQutC+0YDQvtGC0LrQuNGFICovXHJcbmNvbnN0IERBVEVfRk9STUFUX1RPS0VOUzogW3N0cmluZywgc3RyaW5nXVtdID0gW1xyXG4gIFsneXl5eScsICcoPzx5eXl5PlxcXFxkezR9KSddLFxyXG4gIFsneXknLCAnKD88eXk+XFxcXGR7Mn0pJ10sXHJcbiAgWydNTScsICcoPzxNTT5cXFxcZHsyfSknXSxcclxuICBbJ00nLCAnKD88TT5cXFxcZHsxLDJ9KSddLFxyXG4gIFsnZGQnLCAnKD88ZGQ+XFxcXGR7Mn0pJ10sXHJcbiAgWydkJywgJyg/PGQ+XFxcXGR7MSwyfSknXSxcclxuICBbJ0hIJywgJyg/PEhIPlxcXFxkezJ9KSddLFxyXG4gIFsnSCcsICcoPzxIPlxcXFxkezEsMn0pJ10sXHJcbiAgWydtbScsICcoPzxtbT5cXFxcZHsyfSknXSxcclxuICBbJ20nLCAnKD88bT5cXFxcZHsxLDJ9KSddLFxyXG4gIFsnc3MnLCAnKD88c3M+XFxcXGR7Mn0pJ10sXHJcbiAgWydzJywgJyg/PHM+XFxcXGR7MSwyfSknXSxcclxuXVxyXG5cclxuY29uc3QgREFURV9GT1JNQVRfVE9LRU5fUkVHRVggPSBuZXcgUmVnRXhwKERBVEVfRk9STUFUX1RPS0VOUy5tYXAoKFt0b2tlbl0pID0+IHRva2VuKS5qb2luKCd8JyksICdnJylcclxuXHJcbmNvbnN0IFRJTUVfT05MWV9UT0tFTlMgPSBuZXcgU2V0KFsnSEgnLCAnSCcsICdtbScsICdtJywgJ3NzJywgJ3MnXSlcclxuXHJcbi8qKlxyXG4gKiDQktGL0LLQvtC00LjRgiDRhNC+0YDQvNCw0YIgXCLRgtC+0LvRjNC60L4g0LTQsNGC0LBcIiDQuNC3INGE0L7RgNC80LDRgtCwINC00LDRgtGLLdC4LdCy0YDQtdC80LXQvdC4IOKAlCDQvtGC0YDQtdC30LDQtdGCINCy0YDQtdC80Y8g0Lgg0YDQsNC30LTQtdC70LjRgtC10LvRjCDQv9C10YDQtdC0XHJcbiAqINC90LjQvCAo0L3QsNC/0YDQuNC80LXRgCwgYCdkZC5NTS55eXl5IEhIOm1tOnNzJ2Ag4oaSIGAnZGQuTU0ueXl5eSdgKS4g0J/QvtGA0Y/QtNC+0Log0LTQtdC90Ywv0LzQtdGB0Y/Rhi/Qs9C+0LQg0YMg0L/QvtC70LXQuVxyXG4gKiBcItC00LDRgtCwXCIg0LggXCLQtNCw0YLQsC3QstGA0LXQvNGPXCIg0L3QsCDQvtC00L3QvtC8INC/0L7RgNGC0LDQu9C1IEJpdHJpeDI0INCy0YHQtdCz0LTQsCDRgdC+0LPQu9Cw0YHQvtCy0LDQvSDigJQg0YDQsNC30LvQuNGH0LDQtdGC0YHRjyDRgtC+0LvRjNC60L5cclxuICog0L3QsNC70LjRh9C40LUgYEhIOm1tOnNzYCwg0L/QvtGN0YLQvtC80YMg0L3QtdGCINGB0LzRi9GB0LvQsCDQt9Cw0YHRgtCw0LLQu9GP0YLRjCDQstGL0LfRi9Cy0LDRjtGJ0LXQs9C+INC/0LXRgNC10LTQsNCy0LDRgtGMINC+0LHQsCDRhNC+0YDQvNCw0YLQsCDQuFxyXG4gKiDQtNC10YDQttCw0YLRjCDQuNGFINCyINGB0LjQvdGF0YDQvtC90LUg0LLRgNGD0YfQvdGD0Y4uXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZGVyaXZlRGF0ZU9ubHlGb3JtYXQoZGF0ZVRpbWVGb3JtYXQ6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgREFURV9GT1JNQVRfVE9LRU5fUkVHRVgubGFzdEluZGV4ID0gMFxyXG4gIGxldCBtYXRjaDogUmVnRXhwRXhlY0FycmF5IHwgbnVsbFxyXG5cclxuICB3aGlsZSAoKG1hdGNoID0gREFURV9GT1JNQVRfVE9LRU5fUkVHRVguZXhlYyhkYXRlVGltZUZvcm1hdCkpICE9PSBudWxsKSB7XHJcbiAgICBpZiAoVElNRV9PTkxZX1RPS0VOUy5oYXMobWF0Y2hbMF0pKSB7XHJcbiAgICAgIC8vINCe0YLRgNC10LfQsNC10Lwg0LvRjtCx0L7QuSDRgNCw0LfQtNC10LvQuNGC0LXQu9GMINC/0LXRgNC10LQg0LLRgNC10LzQtdC90LXQvCwg0LLQutC70Y7Rh9Cw0Y8g0LHRg9C60LLQtdC90L3Ri9C5ICjQvdCw0L/RgNC40LzQtdGAICdUJyDQsiBJU08t0YHRgtC40LvQtVxyXG4gICAgICAvLyAnZGQuTU0ueXl5eVRISDptbTpzcycpLCDQsCDQvdC1INGC0L7Qu9GM0LrQviDQv9GD0L3QutGC0YPQsNGG0LjRjiDigJQg0L7RgdGC0LDQvdCw0LLQu9C40LLQsNC10LzRgdGPINC90LAg0L/QvtGB0LvQtdC00L3QtdC8INGB0LjQvNCy0L7Qu9C1LFxyXG4gICAgICAvLyDQutC+0YLQvtGA0YvQuSDRgNC10LDQu9GM0L3QviDQvtGC0L3QvtGB0LjRgtGB0Y8g0Log0YLQvtC60LXQvdCw0Lwg0LTQsNGC0YsgKHkvTS9kKS5cclxuICAgICAgY29uc3QgZGF0ZVBhcnQgPSBkYXRlVGltZUZvcm1hdC5zbGljZSgwLCBtYXRjaC5pbmRleCkucmVwbGFjZSgvW155TWRdKyQvLCAnJylcclxuICAgICAgcmV0dXJuIGRhdGVQYXJ0IHx8IGRhdGVUaW1lRm9ybWF0XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4gZGF0ZVRpbWVGb3JtYXRcclxufVxyXG5cclxuZnVuY3Rpb24gZXNjYXBlUmVnRXhwKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcclxuICByZXR1cm4gc3RyLnJlcGxhY2UoL1suKis/XiR7fSgpfFtcXF1cXFxcXS9nLCAnXFxcXCQmJylcclxufVxyXG5cclxuLyoqXHJcbiAqINCk0L7RgNC80LDRgtGLINC00LDRgiwg0LrQvtGC0L7RgNGL0LUgQml0cml4MjQg0YDQtdCw0LvRjNC90L4g0L/RgNC40YHRi9C70LDQtdGCINCyINGA0LDQt9C90YvRhSDQvNC10YLQvtC00LDRhSBSRVNUINC4INC90LAg0YDQsNC30L3Ri9GFXHJcbiAqINC/0L7RgNGC0LDQu9Cw0YUg4oCUINGE0L7RgNC80LDRgiDQtNCw0YLRiy/QstGA0LXQvNC10L3QuCDQsiDQvtGC0LLQtdGC0LUg0LfQsNCy0LjRgdC40YIg0L7RgiDQvdCw0YHRgtGA0L7QtdC6INC/0L7RgNGC0LDQu9CwICjQndCw0YHRgtGA0L7QudC60Lgg4oaSINGE0L7RgNC80LDRglxyXG4gKiDQtNCw0YLRiyDQuCDQstGA0LXQvNC10L3QuCksINC/0L7RjdGC0L7QvNGDINC+0LTQuNC9INC30LDRhdCw0YDQtNC60L7QttC10L3QvdGL0Lkg0YjQsNCx0LvQvtC9INC90LUg0YPQvdC40LLQtdGA0YHQsNC70LXQvS4g0JXRgdC70Lgg0Y/QstC90YvQuSBgZm9ybWF0YCxcclxuICog0L/QtdGA0LXQtNCw0L3QvdGL0Lkg0LIgdG9EYXRlKCksINC90LUg0YHQvtCy0L/QsNC7INGB0L4g0LfQvdCw0YfQtdC90LjQtdC8LCDQv9C10YDQtdC0INGC0LXQvCDQutCw0Log0YHRh9C40YLQsNGC0Ywg0YHRgtGA0L7QutGDINC90LXQstCw0LvQuNC00L3QvtC5LFxyXG4gKiDQv9GA0L7QsdGD0LXQvCDRjdGC0Lgg0LLQsNGA0LjQsNC90YLRiyDQv9C+INC+0YfQtdGA0LXQtNC4IOKAlCDQvtC90Lgg0L3QtSDQv9C10YDQtdGB0LXQutCw0Y7RgtGB0Y8g0L/QviDRgNCw0LfQtNC10LvQuNGC0LXQu9GP0Lwv0L/QvtGA0Y/QtNC60YMg0YLQvtC60LXQvdC+0LIsXHJcbiAqINGC0LDQuiDRh9GC0L4g0LvQvtC20L3Ri9GFINGB0L7QstC/0LDQtNC10L3QuNC5INC90LUg0LHRg9C00LXRgi5cclxuICovXHJcbmNvbnN0IEZBTExCQUNLX0RBVEVfRk9STUFUUyA9IFtcclxuICAnZGQuTU0ueXl5eSBISDptbTpzcycsXHJcbiAgJ3l5eXktTU0tZGQgSEg6bW06c3MnLFxyXG4gICdkZC5NTS55eXl5JyxcclxuICAneXl5eS1NTS1kZCcsXHJcbl1cclxuXHJcbi8qKlxyXG4gKiDQoNCw0LfQsdC40YDQsNC10YIg0YHRgtGA0L7QutGDINC00LDRgtGLINC/0L4g0L/RgNC+0YHRgtC+0LzRgyDRiNCw0LHQu9C+0L3RgyAoeXl5eSwgTU0sIGRkLCBISCwgbW0sIHNzINC4INC40YUg0L7QtNC90L7QsdGD0LrQstC10L3QvdGL0LVcclxuICog0LLQsNGA0LjQsNC90YLRiywg0L3QsNC/0YDQuNC80LXRgCAnZGQuTU0ueXl5eSBISDptbTpzcycpLiDQoNCw0LfQtNC10LvQuNGC0LXQu9C4INC80LXQttC00YMg0YLQvtC60LXQvdCw0LzQuCDQsdC10YDRg9GC0YHRjyDQuNC3INGI0LDQsdC70L7QvdCwXHJcbiAqINC60LDQuiDQtdGB0YLRjC4g0J3QtSDQv9C+0LTQtNC10YDQttC40LLQsNC10YIg0LvQvtC60LDQu9C4LCDQvdCw0LfQstCw0L3QuNGPINC80LXRgdGP0YbQtdCyINC4INGH0LDRgdC+0LLRi9C1INC/0L7Rj9GB0LAg4oCUINC00LvRjyBSRVNULdC+0YLQstC10YLQvtCyXHJcbiAqIEJpdHJpeDI0INC+0L3QuCDQvdC1INGC0YDQtdCx0YPRjtGC0YHRjywg0LfQvdCw0YfQtdC90LjRjyDQstGB0LXQs9C00LAg0L/RgNC40YXQvtC00Y/RgiDQsiDRhNC40LrRgdC40YDQvtCy0LDQvdC90L7QvCDRh9C40YHQu9C+0LLQvtC8INCy0LjQtNC1LlxyXG4gKi9cclxuZnVuY3Rpb24gcGFyc2VEYXRlV2l0aEZvcm1hdCh2YWw6IHN0cmluZywgZm9ybWF0OiBzdHJpbmcpOiBEYXRlIHwgbnVsbCB7XHJcbiAgY29uc3QgdG9rZW5NYXAgPSBuZXcgTWFwKERBVEVfRk9STUFUX1RPS0VOUylcclxuICBsZXQgcGF0dGVybiA9ICcnXHJcbiAgbGV0IGxhc3RJbmRleCA9IDBcclxuICBsZXQgbWF0Y2g6IFJlZ0V4cEV4ZWNBcnJheSB8IG51bGxcclxuXHJcbiAgREFURV9GT1JNQVRfVE9LRU5fUkVHRVgubGFzdEluZGV4ID0gMFxyXG4gIHdoaWxlICgobWF0Y2ggPSBEQVRFX0ZPUk1BVF9UT0tFTl9SRUdFWC5leGVjKGZvcm1hdCkpICE9PSBudWxsKSB7XHJcbiAgICBwYXR0ZXJuICs9IGVzY2FwZVJlZ0V4cChmb3JtYXQuc2xpY2UobGFzdEluZGV4LCBtYXRjaC5pbmRleCkpXHJcbiAgICBwYXR0ZXJuICs9IHRva2VuTWFwLmdldChtYXRjaFswXSlcclxuICAgIGxhc3RJbmRleCA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoXHJcbiAgfVxyXG4gIHBhdHRlcm4gKz0gZXNjYXBlUmVnRXhwKGZvcm1hdC5zbGljZShsYXN0SW5kZXgpKVxyXG5cclxuICBjb25zdCByZXN1bHQgPSBuZXcgUmVnRXhwKGBeJHtwYXR0ZXJufSRgKS5leGVjKHZhbClcclxuICBpZiAoIXJlc3VsdD8uZ3JvdXBzKSB7XHJcbiAgICByZXR1cm4gbnVsbFxyXG4gIH1cclxuXHJcbiAgY29uc3QgZyA9IHJlc3VsdC5ncm91cHNcclxuICBjb25zdCB5ZWFyID0gZ1sneXl5eSddID8gTnVtYmVyKGdbJ3l5eXknXSkgOiBnWyd5eSddID8gMjAwMCArIE51bWJlcihnWyd5eSddKSA6IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKVxyXG4gIGNvbnN0IG1vbnRoID0gTnVtYmVyKGdbJ01NJ10gPz8gZ1snTSddID8/IDEpXHJcbiAgY29uc3QgZGF5ID0gTnVtYmVyKGdbJ2RkJ10gPz8gZ1snZCddID8/IDEpXHJcbiAgY29uc3QgaG91ciA9IE51bWJlcihnWydISCddID8/IGdbJ0gnXSA/PyAwKVxyXG4gIGNvbnN0IG1pbnV0ZSA9IE51bWJlcihnWydtbSddID8/IGdbJ20nXSA/PyAwKVxyXG4gIGNvbnN0IHNlY29uZCA9IE51bWJlcihnWydzcyddID8/IGdbJ3MnXSA/PyAwKVxyXG5cclxuICAvLyDQotC+0LrQtdC90Ysg4oCUINGN0YLQviDQv9GA0L7RgdGC0L4gXCJOINGG0LjRhNGAXCIsINCx0LXQtyDQv9GA0L7QstC10YDQutC4INC00LjQsNC/0LDQt9C+0L3QsCAocmVnZXgg0L3QtSDQvtGC0LvQuNGH0LjRgiBcIjEzXCIg0LzQtdGB0Y/RhtCwINC+0YJcclxuICAvLyBcIjEzXCIg0LTQvdGPKS4g0JHQtdC3INGN0YLQvtC5INC/0YDQvtCy0LXRgNC60LggbmV3IERhdGUoKSDQvNC+0LvRh9CwIFwi0L/QtdGA0LXQutCw0YLRi9Cy0LDQtdGCXCIg0L/QtdGA0LXQv9C+0LvQvdC10L3QuNC1INC90LAg0YHQvtGB0LXQtNC90LjQuVxyXG4gIC8vINC80LXRgdGP0YYv0LPQvtC0ICjQvdCw0L/RgNC40LzQtdGALCDQvNC10YHRj9GGPTEzIOKGkiDRj9C90LLQsNGA0Ywg0YHQu9C10LTRg9GO0YnQtdCz0L4g0LPQvtC00LApINCy0LzQtdGB0YLQviDRgtC+0LPQviwg0YfRgtC+0LHRiyDRgdGH0LjRgtCw0YLRjFxyXG4gIC8vINGB0YLRgNC+0LrRgyDQvdC10LLQsNC70LjQtNC90L7QuS5cclxuICBpZiAobW9udGggPCAxIHx8IG1vbnRoID4gMTIgfHwgZGF5IDwgMSB8fCBkYXkgPiAzMSB8fCBob3VyID4gMjMgfHwgbWludXRlID4gNTkgfHwgc2Vjb25kID4gNTkpIHtcclxuICAgIHJldHVybiBudWxsXHJcbiAgfVxyXG5cclxuICBjb25zdCBkYXRlID0gbmV3IERhdGUoeWVhciwgbW9udGggLSAxLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kKVxyXG4gIHJldHVybiBpc05hTihkYXRlLmdldFRpbWUoKSkgPyBudWxsIDogZGF0ZVxyXG59XHJcblxyXG4vKipcclxuICog0J/QvtGB0LvQtdC00L3QuNC5INGA0LXQt9C10YDQstC90YvQuSDRgNCw0LfQsdC+0YAg4oCUINCx0LXQtyDQt9C90LDQvdC40Y8g0LrQvtC90LrRgNC10YLQvdC+0LPQviDRhNC+0YDQvNCw0YLQsC4g0KDQsNCx0L7RgtCw0LXRgiDRgtC+0LvRjNC60L4g0LTQu9GPINGH0LjRgdGC0L5cclxuICog0YfQuNGB0LvQvtCy0YvRhSDQtNCw0YIgKNC90LjQutCw0LrQuNGFINC90LDQt9Cy0LDQvdC40Lkg0LzQtdGB0Y/RhtC10LIv0LTQvdC10Lkg4oCUINC00LvRjyDRjdGC0L7Qs9C+INC90YPQttC90YsgbG9jYWxlLdGC0LDQsdC70LjRhtGLLCDQsCDRjdGC0L4g0LrQsNC6XHJcbiAqINGA0LDQtyDRgtC+0YIg0LLQtdGBLCDRgNCw0LTQuCDRg9GF0L7QtNCwINC+0YIg0LrQvtGC0L7RgNC+0LPQviBsdXhvbiDQsdGL0Lsg0YPQsdGA0LDQvSDQuNC3INC30LDQstC40YHQuNC80L7RgdGC0LXQuSkuXHJcbiAqXHJcbiAqINCY0LTQtdGPOiDQs9C+0LQg4oCUINC10LTQuNC90YHRgtCy0LXQvdC90YvQuSDRgdC10LPQvNC10L3RgiDQtNC70LjQvdC+0Lkg0YDQvtCy0L3QviA0INGG0LjRhNGA0YssINC/0L7RjdGC0L7QvNGDINC10LPQviDQv9C+0LfQuNGG0LjRjyAo0L/QtdGA0LLRi9C5INC40LvQuFxyXG4gKiDQv9C+0YHQu9C10LTQvdC40Lkg0LjQtyDRgtGA0ZHRhSDRgdC10LPQvNC10L3RgtC+0LIg0LTQsNGC0YspINC+0LTQvdC+0LfQvdCw0YfQvdC+INC+0L/QvtC30L3QsNGR0YLRgdGPINC/0YDQuCDQu9GO0LHQvtC8INGA0LDQt9C00LXQu9C40YLQtdC70LUgKGAuYCwgYC1gLFxyXG4gKiBgL2AsINC/0YDQvtCx0LXQuy4uLikuINCc0LXRgdGP0YYg0L/QviDQstGB0LXQvCDRgNCw0YHQv9GA0L7RgdGC0YDQsNC90ZHQvdC90YvQvCDQsiDQvNC40YDQtSDRgdC+0LPQu9Cw0YjQtdC90LjRj9C8IChJU08gYHl5eXktTU0tZGRgINC4XHJcbiAqINC10LLRgNC+0L/QtdC50YHQutC+0LUgYGRkLk1NLnl5eXlgKSDRgdGC0L7QuNGCINC80LXQttC00YMg0LPQvtC00L7QvCDQuCDQtNC90ZHQvCwg0L/QvtGN0YLQvtC80YMg0LHQtdGA0ZHRgtGB0Y8g0LrQsNC6INGB0YDQtdC00L3QuNC5INGB0LXQs9C80LXQvdGCLlxyXG4gKiDQktGA0LXQvNGPLCDQtdGB0LvQuCDQtdGB0YLRjCwg0LLRgdC10LPQtNCwINC40LTRkdGCINC60LDQuiBgSEg6bW06c3NgIOKAlCDRjdGC0L7RgiDQv9C+0YDRj9C00L7QuiDRg9C90LjQstC10YDRgdCw0LvQtdC9LlxyXG4gKlxyXG4gKiDQndC1INGA0LXRiNCw0LXRgiDQuCDQvdC1INC/0YvRgtCw0LXRgtGB0Y8g0YDQtdGI0LjRgtGMINC90LXQvtC00L3QvtC30L3QsNGH0L3QvtGB0YLRjCDQtNC10L3RjC/QvNC10YHRj9GGINCyINGH0LjRgdGC0L4g0YfQuNGB0LvQvtCy0YvRhSDRhNC+0YDQvNCw0YLQsNGFINCy0LjQtNCwXHJcbiAqIGBNTS9kZC95eXl5YCAo0KHQqNCQKSwg0LPQtNC1INC+0LHQsCDRgdC10LPQvNC10L3RgtCwINC80L7Qs9GD0YIg0LHRi9GC0Ywg4omkMTIg4oCUINGD0LPQsNC00YvQstCw0YLRjCDRjdGC0L4g0LHQtdC3INC30L3QsNC90LjRjyDQu9C+0LrQsNC70LhcclxuICog0LfQvdCw0YfQuNC70L4g0LHRiyDQuNC90L7Qs9C00LAg0LzQvtC70YfQsCDQv9GD0YLQsNGC0Ywg0LTQtdC90Ywg0YEg0LzQtdGB0Y/RhtC10LwsINGH0YLQviDRhdGD0LbQtSDRj9Cy0L3QvtC5INC+0YjQuNCx0LrQuC5cclxuICovXHJcbmZ1bmN0aW9uIHBhcnNlRGF0ZUhldXJpc3RpY2FsbHkodmFsOiBzdHJpbmcpOiBEYXRlIHwgbnVsbCB7XHJcbiAgY29uc3QgcGFydHMgPSB2YWwubWF0Y2goL1xcZCsvZylcclxuICBpZiAoIXBhcnRzIHx8IHBhcnRzLmxlbmd0aCA8IDMgfHwgcGFydHMubGVuZ3RoID4gNikge1xyXG4gICAgcmV0dXJuIG51bGxcclxuICB9XHJcblxyXG4gIGNvbnN0IFtkMCwgZDEsIGQyLCAuLi50aW1lUGFydHNdID0gcGFydHNcclxuICBjb25zdCBkYXRlUGFydHMgPSBbZDAsIGQxLCBkMl1cclxuICBjb25zdCB5ZWFySWR4ID0gZGF0ZVBhcnRzLmZpbmRJbmRleChwID0+IHAubGVuZ3RoID09PSA0KVxyXG4gIC8vINCT0L7QtCDQtNC+0LvQttC10L0g0LHRi9GC0Ywg0L7QtNC90L7Qt9C90LDRh9C90L4g0L3QsNC50LTQtdC9ICjRgNC+0LLQvdC+IDQg0YbQuNGE0YDRiykg0Lgg0YHRgtC+0Y/RgtGMINGBINC60YDQsNGPLCDQsCDQvdC1INCyINGB0LXRgNC10LTQuNC90LUg4oCUXHJcbiAgLy8g0LjQvdCw0YfQtSDQv9C+0LfQuNGG0LjRjyDQvNC10YHRj9GG0LAv0LTQvdGPINC90LUg0L7Qv9GA0LXQtNC10LvQuNGC0Ywg0LHQtdC30L7Qv9Cw0YHQvdC+LlxyXG4gIGlmICh5ZWFySWR4ICE9PSAwICYmIHllYXJJZHggIT09IDIpIHtcclxuICAgIHJldHVybiBudWxsXHJcbiAgfVxyXG5cclxuICBjb25zdCB5ZWFyID0gTnVtYmVyKGRhdGVQYXJ0c1t5ZWFySWR4XSlcclxuICBjb25zdCBtb250aCA9IE51bWJlcihkYXRlUGFydHNbMV0pXHJcbiAgY29uc3QgZGF5ID0gTnVtYmVyKGRhdGVQYXJ0c1t5ZWFySWR4ID09PSAwID8gMiA6IDBdKVxyXG4gIGlmIChtb250aCA8IDEgfHwgbW9udGggPiAxMiB8fCBkYXkgPCAxIHx8IGRheSA+IDMxKSB7XHJcbiAgICByZXR1cm4gbnVsbFxyXG4gIH1cclxuXHJcbiAgY29uc3QgW2hoLCBtbSwgc3NdID0gdGltZVBhcnRzXHJcbiAgY29uc3QgaG91ciA9IGhoICE9PSB1bmRlZmluZWQgPyBOdW1iZXIoaGgpIDogMFxyXG4gIGNvbnN0IG1pbnV0ZSA9IG1tICE9PSB1bmRlZmluZWQgPyBOdW1iZXIobW0pIDogMFxyXG4gIGNvbnN0IHNlY29uZCA9IHNzICE9PSB1bmRlZmluZWQgPyBOdW1iZXIoc3MpIDogMFxyXG4gIGlmIChob3VyID4gMjMgfHwgbWludXRlID4gNTkgfHwgc2Vjb25kID4gNTkpIHtcclxuICAgIHJldHVybiBudWxsXHJcbiAgfVxyXG5cclxuICBjb25zdCBkYXRlID0gbmV3IERhdGUoeWVhciwgbW9udGggLSAxLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kKVxyXG4gIHJldHVybiBpc05hTihkYXRlLmdldFRpbWUoKSkgPyBudWxsIDogZGF0ZVxyXG59XHJcblxyXG4vKipcclxuICog0J/RgNC10L7QsdGA0LDQt9GD0LXRgiDQt9C90LDRh9C10L3QuNC1INCyINC00LDRgtGDLlxyXG4gKlxyXG4gKiDQldGB0LvQuCDQv9C10YDQtdC00LDQvSBgZm9ybWF0YCwg0L3QviDQt9C90LDRh9C10L3QuNC1INC10LzRgyDQvdC1INGB0L7QvtGC0LLQtdGC0YHRgtCy0YPQtdGCICjRgdC8LiBGQUxMQkFDS19EQVRFX0ZPUk1BVFMg4oCUXHJcbiAqINCw0LrRgtGD0LDQu9GM0L3QviDQtNC70Y8g0L/QvtC70LXQuSwg0LPQtNC1IEJpdHJpeDI0INC+0YLQtNCw0ZHRgiDQtNCw0YLRgyDQsiDRhNC+0YDQvNCw0YLQtSwg0L3QsNGB0YLRgNC+0LXQvdC90L7QvCDQvdCwINC/0L7RgNGC0LDQu9C1LCDQsCDQvdC1INCyXHJcbiAqINGC0L7QvCwg0YfRgtC+INC30LDRhdCw0YDQtNC60L7QttC10L0g0LIg0LzQsNC/0L/QtdGA0LUpLCDQv9C10YDQtdC0INGC0LXQvCDQutCw0Log0YHRh9C40YLQsNGC0Ywg0LfQvdCw0YfQtdC90LjQtSDQvdC10LLQsNC70LjQtNC90YvQvCwg0LTQtdC70LDRjtGC0YHRjyDQtdGJ0ZFcclxuICog0LTQstC1INC/0L7Qv9GL0YLQutC4OiDQtNGA0YPQs9C40LUg0YDQsNGB0L/RgNC+0YHRgtGA0LDQvdGR0L3QvdGL0LUg0YTQvtGA0LzQsNGC0YsgQml0cml4MjQsINCwINC30LDRgtC10Lwg4oCUINC/0L7Qt9C40YbQuNC+0L3QvdCw0Y8g0Y3QstGA0LjRgdGC0LjQutCwXHJcbiAqICjRgdC8LiBwYXJzZURhdGVIZXVyaXN0aWNhbGx5KSwg0LrQvtGC0L7RgNCw0Y8g0YDQsNGB0L/QvtC30L3QsNGR0YIg0L/RgNCw0LrRgtC40YfQtdGB0LrQuCDQu9GO0LHQvtC5INGH0LjRgdGC0L4g0YfQuNGB0LvQvtCy0L7QuSDRhNC+0YDQvNCw0YJcclxuICog0LTQsNGC0Ysg0L3QtdC30LDQstC40YHQuNC80L4g0L7RgiDRgNCw0LfQtNC10LvQuNGC0LXQu9GPLiDQldGB0LvQuCDQv9GA0LjQu9C+0LbQtdC90LjRjiDRgtC+0YfQvdC+INC40LfQstC10YHRgtC10L0g0YTQvtGA0LzQsNGCINC60L7QvdC60YDQtdGC0L3QvtCz0L4g0L/QvtGA0YLQsNC70LAsXHJcbiAqINC10LPQviDRgdGC0L7QuNGCINC/0LXRgNC10LTQsNCy0LDRgtGMINGP0LLQvdGL0LwgYGZvcm1hdGAg4oCUINGN0YLQviDQstGB0LXQs9C00LAg0L/RgNC40L7RgNC40YLQtdGC0L3QtdC1INGD0LPQsNC00YvQstCw0L3QuNGPLlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHRvRGF0ZSh2YWw6IG51bWJlciB8IHN0cmluZyB8IERhdGUsIGZvcm1hdD86IHN0cmluZywgb3B0PzogVG9EYXRlT3B0aW9ucywgdGhyb3dFcnJvciA9IHRydWUpOiBEYXRlIHtcclxuICBpZiAodmFsIGluc3RhbmNlb2YgRGF0ZSkge1xyXG4gICAgcmV0dXJuIHZhbFxyXG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcclxuICAgIGlmIChmb3JtYXQpIHtcclxuICAgICAgY29uc3QgcGFyc2VkID0gcGFyc2VEYXRlV2l0aEZvcm1hdCh2YWwsIGZvcm1hdClcclxuICAgICAgaWYgKHBhcnNlZCkge1xyXG4gICAgICAgIHJldHVybiBwYXJzZWRcclxuICAgICAgfVxyXG5cclxuICAgICAgZm9yIChjb25zdCBmYWxsYmFja0Zvcm1hdCBvZiBGQUxMQkFDS19EQVRFX0ZPUk1BVFMpIHtcclxuICAgICAgICBpZiAoZmFsbGJhY2tGb3JtYXQgPT09IGZvcm1hdCkgY29udGludWVcclxuICAgICAgICBjb25zdCBmYWxsYmFja1BhcnNlZCA9IHBhcnNlRGF0ZVdpdGhGb3JtYXQodmFsLCBmYWxsYmFja0Zvcm1hdClcclxuICAgICAgICBpZiAoZmFsbGJhY2tQYXJzZWQpIHtcclxuICAgICAgICAgIHJldHVybiBmYWxsYmFja1BhcnNlZFxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgaGV1cmlzdGljUGFyc2VkID0gcGFyc2VEYXRlSGV1cmlzdGljYWxseSh2YWwpXHJcbiAgICAgIGlmIChoZXVyaXN0aWNQYXJzZWQpIHtcclxuICAgICAgICByZXR1cm4gaGV1cmlzdGljUGFyc2VkXHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBuZXcgRGF0ZSh2YWwpXHJcbiAgICB9XHJcbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xyXG4gICAgcmV0dXJuIG5ldyBEYXRlKHZhbClcclxuICB9XHJcblxyXG4gIGlmICh0aHJvd0Vycm9yKSB7XHJcbiAgICBjb25zb2xlLmVycm9yKCdXcm9uZyBkYXRlIGZvcm1hdCcsIHZhbCwgZm9ybWF0KVxyXG4gICAgdGhyb3cgbmV3IEVycm9yKCdXcm9uZyBkYXRlIGZvcm1hdCcpXHJcbiAgfVxyXG5cclxuICByZXR1cm4gbmV3IERhdGUoKVxyXG59XHJcblxyXG4vKipcclxuICog0J/RgNC10L7QsdGA0LDQt9GD0LXRgiDQtNCw0YLRgyDQsiDRgdGC0YDQvtC60YMg0YEg0YPRh9C10YLQvtC8INCy0YDQtdC80LXQvdC90L7QuSDQt9C+0L3Ri1xyXG4gKlxyXG4gKiDQpNC+0YDQvNCw0YLQuNGA0L7QstCw0L3QuNC1INC00LXQu9C10LPQuNGA0L7QstCw0L3QviB0b0xvY2FsQXRvbSgpIOKAlCDRgNCw0L3RjNGI0LUg0LfQtNC10YHRjCDQsdGL0LvQsCDQstGC0L7RgNCw0Y8sXHJcbiAqINC90LXQt9Cw0LLQuNGB0LjQvNCw0Y8g0LrQvtC/0LjRjyDRgtC+0Lkg0LbQtSDRhNC+0YDQvNGD0LvRiyAocGFkZGluZCArINGB0LzQtdGJ0LXQvdC40LUg0YLQsNC50LzQt9C+0L3RiyksINC60L7RgtC+0YDQsNGPXHJcbiAqINC80L7Qs9C70LAg0YDQsNC30L7QudGC0LjRgdGMINGBIHRvTG9jYWxBdG9tKCkg0L/RgNC4INC/0YDQsNCy0LrQtSDQvtC00L3QvtC5INC40Lcg0L3QuNGFINC4INC90LUg0LTRgNGD0LPQvtC5LlxyXG4gKlxyXG4gKiBAcGFyYW0gZGF0ZVxyXG4gKiBAcGFyYW0gdGhyb3dFcnJvclxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHRvSVNPU3RyaW5nV2l0aFRpbWV6b25lKGRhdGU6IERhdGUsIHRocm93RXJyb3IgPSB0cnVlKTogc3RyaW5nIHtcclxuICBpZiAoIShkYXRlIGluc3RhbmNlb2YgRGF0ZSkpIHtcclxuICAgIGlmICh0aHJvd0Vycm9yKSB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgdmFsdWU6IG5vdCBhIHZhbGlkIERhdGUgb2JqZWN0JylcclxuICAgIHJldHVybiAnJ1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHRvTG9jYWxBdG9tKGRhdGUpXHJcbn1cclxuXHJcbi8qKlxyXG4gKiDQn9GA0LXQvtCx0YDQsNC30YPQtdGCINC30L3QsNGH0LXQvdC40LUg0LIg0LHRg9C70LXQstC+INC30L3QsNGH0LXQvdC40LVcclxuICpcclxuICogQHBhcmFtIHZhbFxyXG4gKiBAcGFyYW0gdGhyb3dFcnJvclxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHRvQm9vbCh2YWw6IGFueSwgdGhyb3dFcnJvciA9IHRydWUpOiBib29sZWFuIHtcclxuICBzd2l0Y2ggKHR5cGVvZiB2YWwpIHtcclxuICAgIGNhc2UgJ3N0cmluZyc6XHJcbiAgICAgIHZhbCA9IHZhbC50b0xvd2VyQ2FzZSgpXHJcbiAgICAgIGlmICh2YWwgPT09ICduJyB8fCB2YWwgPT09ICd5JykgeyAvLyDQsdC40YLRgNC40LrRgdC+0LLRi9C1INC/0L7QvdGP0YLQuNGPINC+IGJvb2xcclxuICAgICAgICByZXR1cm4gdmFsID09PSAneSdcclxuICAgICAgfSBlbHNlIGlmICh2YWwgPT09ICd0cnVlJyB8fCB2YWwgPT09ICdmYWxzZScpIHsgLy8g0LHQuNGC0YDQuNC60YHQvtCy0YvQtSDQv9C+0L3Rj9GC0LjRjyDQviBib29sXHJcbiAgICAgICAgcmV0dXJuIHZhbCA9PT0gJ3RydWUnXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKHRocm93RXJyb3IpIHRocm93IG5ldyBFcnJvcignSW52YWxpZCB2YWx1ZTogY2Fubm90IGJlIGNvbnZlcnRlZCB0byBib29sZWFuJylcclxuICAgICAgICByZXR1cm4gZmFsc2VcclxuICAgICAgfVxyXG4gICAgZGVmYXVsdDpcclxuICAgICAgcmV0dXJuIEJvb2xlYW4odmFsKVxyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqINCf0YDQtdC+0LHRgNCw0LfRg9C10YIg0LHRg9C70LXQstC+INC30L3QsNGH0LXQvdC40LUg0LIgJ1knINC40LvQuCAnTidcclxuICpcclxuICogQHBhcmFtIHZhbFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHRvQlhZb3JOKHZhbDogYm9vbGVhbik6IHN0cmluZyB7XHJcbiAgcmV0dXJuIHZhbCA/ICdZJyA6ICdOJ1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0QmFzZVVybEh0dHBzKHVybDogc3RyaW5nLCBjb21wb25lbnQgPSBmYWxzZSk6IHN0cmluZyB7XHJcbiAgaWYgKGNvbXBvbmVudCkge1xyXG4gICAgcmV0dXJuIGVuY29kZVVSSShjcm9wVXJsKHVybCkgKyAnLycpXHJcbiAgfSBlbHNlIHtcclxuICAgIHJldHVybiBlbmNvZGVVUkkoJ2h0dHBzOi8vJyArIGNyb3BVcmwodXJsKSArICcvJylcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiDQntCx0YDQtdC30LDQtdGCIFVSTCAo0YPQtNCw0LvRj9C10YIg0L/RgNC+0YLQvtC60L7QuylcclxuICpcclxuICogQHBhcmFtIHVybFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGNyb3BVcmwodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gIHVybCA9IHVybCA/IHVybC5yZXBsYWNlKCdodHRwczovLycsICcnKSA6ICcnXHJcbiAgdXJsID0gdXJsID8gdXJsLnJlcGxhY2UoJ2h0dHA6Ly8nLCAnJykgOiAnJ1xyXG4gIHVybCA9IHVybCA/IHVybC5yZXBsYWNlKCdodHRwczonLCAnJykgOiAnJ1xyXG4gIHVybCA9IHVybCA/IHVybC5yZXBsYWNlKCdodHRwOicsICcnKSA6ICcnXHJcbiAgcmV0dXJuIHVybFxyXG59XHJcblxyXG4vKipcclxuICog0J/RgNC10L7QsdGA0LDQt9GD0LXRgiDRhNCw0LnQuyDQsiBiYXNlNjRcclxuICpcclxuICogQHBhcmFtIGZpbGVcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRCYXNlNjRGaWxlKGZpbGU6IEZpbGUpOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpXHJcbiAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKVxyXG4gICAgcmVhZGVyLm9ubG9hZCA9ICgpID0+IHJlc29sdmUocmVhZGVyLnJlc3VsdCBhcyBzdHJpbmcpXHJcbiAgICByZWFkZXIub25lcnJvciA9IGVycm9yID0+IHJlamVjdChlcnJvcilcclxuICB9KVxyXG59XHJcblxyXG4vKipcclxuICog0J/QvtC70YPRh9C40YLRjCDRhNCw0LnQuyDQsiDRhNC+0YDQvNCw0YLQtSBiYXNlNjQg0YEg0YDQsNC30LHQuNCy0LrQvtC5INC90LAg0LfQsNCz0L7Qu9C+0LLQvtC6INC4INC00LDQvdC90YvQtVxyXG4gKlxyXG4gKiBAcGFyYW0gZmlsZVxyXG4gKi9cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEJhc2U2NEZpbGVMaWtlU3RyKGZpbGU6IEZpbGUpOiBQcm9taXNlPHtcclxuICBoZWFkZXI6IHN0cmluZyxcclxuICB2YWw6IHN0cmluZ1xyXG59IHwgdW5kZWZpbmVkPiB7XHJcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZ2V0QmFzZTY0RmlsZShmaWxlKVxyXG4gIGlmICh0eXBlb2YgcmVzdWx0ID09PSAnc3RyaW5nJykge1xyXG4gICAgY29uc3Qgc3BsaXQgPSByZXN1bHQuc3BsaXQoJywnKVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgaGVhZGVyOiBzcGxpdFswXSxcclxuICAgICAgdmFsOiBzcGxpdFsxXVxyXG4gICAgfVxyXG4gIH1cclxuICByZXR1cm4gdW5kZWZpbmVkXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBwcmVwYXJlQmFzZUFkZHJlc3ModXJsOiBzdHJpbmcsIGFkZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gJycpIHtcclxuICAvLyBpZiAodXJsLnNlYXJjaCgnaHR0cHM6Ly8nKSAhPT0gMCAmJiB1cmwuc2VhcmNoKCdodHRwOi8vJykpIHtcclxuICAvLyAgIHVybCA9ICdodHRwczovLycgKyB1cmxcclxuICAvLyB9XHJcblxyXG4gIGlmIChhZGQgJiYgYWRkLmxlbmd0aCA+IDApIHtcclxuICAgIGlmICh1cmwubGFzdEluZGV4T2YoJy8nKSAhPT0gKHVybC5sZW5ndGggLSAxKSkge1xyXG4gICAgICB1cmwgPSB1cmwgKyAnLydcclxuICAgIH1cclxuXHJcbiAgICB1cmwgPSB1cmwgKyBhZGRcclxuICB9XHJcblxyXG4gIGlmICh1cmwubGFzdEluZGV4T2YoJy8nKSAhPT0gKHVybC5sZW5ndGggLSAxKSkge1xyXG4gICAgdXJsID0gdXJsICsgJy8nXHJcbiAgfVxyXG5cclxuICByZXR1cm4gdXJsXHJcbn0iXX0=
|
|
360
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2J4LXJlc3Qvc3JjL3NlcnZpY2VzL2Jhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFBO0FBRXREOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLEtBQUssQ0FBQyxHQUFRLEVBQUUsVUFBVSxHQUFHLEtBQUs7SUFDaEQsSUFBSSxHQUFHLEtBQUssSUFBSSxJQUFJLEdBQUcsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUN0QyxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ2YsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQkFBa0IsR0FBRyxnQ0FBZ0MsQ0FBQyxDQUFBO1FBQ3hFLENBQUM7UUFDRCxPQUFPLEVBQUUsQ0FBQTtJQUNYLENBQUM7SUFDRCxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQTtBQUNwQixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsS0FBSyxDQUFDLEdBQVEsRUFBRSxVQUFVLEdBQUcsSUFBSSxFQUFFLFFBQVEsR0FBRyxDQUFDO0lBQzdELE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUUxQixJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQ2xCLE1BQU0sS0FBSyxHQUFHLElBQUksVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBRWpDLElBQUksVUFBVTtZQUFFLE1BQU0sS0FBSyxDQUFBO1FBRTNCLGtEQUFrRDtRQUNsRCxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFBO1FBQy9CLE9BQU8sUUFBUSxDQUFBO0lBQ2pCLENBQUM7SUFFRCxPQUFPLE1BQU0sQ0FBQTtBQUNmLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sT0FBTyxVQUFXLFNBQVEsS0FBSztJQUNuQyxZQUE0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QTtJQUN4QyxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQy9CLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDL0IsT0FBTztZQUNMLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ2hCLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1NBQ2QsQ0FBQTtJQUNILENBQUM7SUFDRCxPQUFPLFNBQVMsQ0FBQTtBQUNsQixDQUFDO0FBRUQsTUFBTSxVQUFVLGtCQUFrQixDQUFDLEdBQVcsRUFBRSxNQUEwQixFQUFFO0lBQzFFLCtEQUErRDtJQUMvRCwyQkFBMkI7SUFDM0IsSUFBSTtJQUVKLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDMUIsSUFBSSxHQUFHLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzlDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFBO1FBQ2pCLENBQUM7UUFFRCxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQTtJQUNqQixDQUFDO0lBRUQsSUFBSSxHQUFHLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzlDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFBO0lBQ2pCLENBQUM7SUFFRCxPQUFPLEdBQUcsQ0FBQTtBQUNaLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0b0xvY2FsQXRvbSB9IGZyb20gJy4uL2Z1bmN0aW9ucy90b0xvY2FsQXRvbSdcclxuXHJcbi8qKlxyXG4gKiDQn9GA0LXQvtCx0YDQsNC30YPQtdGCINC30L3QsNGH0LXQvdC40LUg0LIg0YHRgtGA0L7QutGDXHJcbiAqXHJcbiAqIEBwYXJhbSB2YWxcclxuICogQHBhcmFtIHRocm93RXJyb3JcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiB0b1N0cih2YWw6IGFueSwgdGhyb3dFcnJvciA9IGZhbHNlKTogc3RyaW5nIHtcclxuICBpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICBpZiAodGhyb3dFcnJvcikge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdmFsdWU6ICR7dmFsfSBjYW5ub3QgYmUgY29udmVydGVkIHRvIHN0cmluZ2ApXHJcbiAgICB9XHJcbiAgICByZXR1cm4gJydcclxuICB9XHJcbiAgcmV0dXJuIFN0cmluZyh2YWwpXHJcbn1cclxuXHJcbi8qKlxyXG4gKiDQn9GA0LXQvtCx0YDQsNC30YPQtdGCINC30L3QsNGH0LXQvdC40LUg0LIg0YfQuNGB0LvQvlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHRvTnVtKHZhbDogYW55LCB0aHJvd0Vycm9yID0gdHJ1ZSwgZGVmVmFsdWUgPSAwKTogbnVtYmVyIHtcclxuICBjb25zdCByZXN1bHQgPSBOdW1iZXIodmFsKVxyXG5cclxuICBpZiAoaXNOYU4ocmVzdWx0KSkge1xyXG4gICAgY29uc3QgZXJyb3IgPSBuZXcgVG9OdW1FcnJvcih2YWwpXHJcblxyXG4gICAgaWYgKHRocm93RXJyb3IpIHRocm93IGVycm9yXHJcblxyXG4gICAgLy8g0JXRgdC70Lgg0L7RiNC40LHQutCwINC90LUg0L/RgNC+0LHRgNCw0YHRi9Cy0LDQtdGC0YHRjyDigJQg0L/RgNC+0YHRgtC+INC70L7Qs9C40YDRg9C10LxcclxuICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IudG9TdHJpbmcoKSlcclxuICAgIHJldHVybiBkZWZWYWx1ZVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHJlc3VsdFxyXG59XHJcblxyXG4vKipcclxuICog0JrQsNGB0YLQvtC80L3Ri9C5INGC0LjQvyDQvtGI0LjQsdC60Lgg0LTQu9GPINGH0LjRgdC70L7QstGL0YUg0L/RgNC10L7QsdGA0LDQt9C+0LLQsNC90LjQuVxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIFRvTnVtRXJyb3IgZXh0ZW5kcyBFcnJvciB7XHJcbiAgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IHZhbHVlOiBhbnkpIHtcclxuICAgIGNvbnN0IHZhbHVlVHlwZSA9IHR5cGVvZiB2YWx1ZVxyXG4gICAgY29uc3QgZm9ybWF0dGVkVmFsdWUgPVxyXG4gICAgICB2YWx1ZVR5cGUgPT09ICdvYmplY3QnID8gSlNPTi5zdHJpbmdpZnkodmFsdWUpIDogU3RyaW5nKHZhbHVlKVxyXG4gICAgY29uc3QgbWVzc2FnZSA9IGBJbnZhbGlkIHZhbHVlIHBhc3NlZCB0byB0b051bSgpOiAke2Zvcm1hdHRlZFZhbHVlfSAodHlwZTogJHt2YWx1ZVR5cGV9KWBcclxuICAgIHN1cGVyKG1lc3NhZ2UpXHJcbiAgICB0aGlzLm5hbWUgPSAnVG9OdW1FcnJvcidcclxuXHJcbiAgICAvLyDRgdC+0YXRgNCw0L3Rj9C10Lwg0YHRgtC10Log0LLRi9C30L7QstCwICjQvtGC0YTQuNC70YzRgtGA0L7QstCw0LIg0YHQsNC8INC60L7QvdGB0YLRgNGD0LrRgtC+0YApXHJcbiAgICBpZiAodGhpcy5zdGFjaykge1xyXG4gICAgICBjb25zdCBzdGFja0xpbmVzID0gdGhpcy5zdGFjay5zcGxpdCgnXFxuJylcclxuICAgICAgLy8g0KPQtNCw0LvRj9C10Lwg0YHRgtGA0L7QutGDINC60L7QvdGB0YLRgNGD0LrRgtC+0YDQsCAo0YfRgtC+0LHRiyDRgdGC0LXQuiDQvdCw0YfQuNC90LDQu9GB0Y8g0YEg0LzQtdGB0YLQsCDQstGL0LfQvtCy0LAgdG9OdW0pXHJcbiAgICAgIHRoaXMuc3RhY2sgPSBbc3RhY2tMaW5lc1swXSwgLi4uc3RhY2tMaW5lcy5zbGljZSgyKV0uam9pbignXFxuJylcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIHRvU3RyaW5nKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gW1xyXG4gICAgICBg4p2MIFske3RoaXMubmFtZX1dICR7dGhpcy5tZXNzYWdlfWAsXHJcbiAgICAgIHRoaXMuc3RhY2sgPyBgICAgU3RhY2sgdHJhY2U6XFxuJHt0aGlzLnN0YWNrfWAgOiAnJyxcclxuICAgIF0uam9pbignXFxuJylcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiDQntC/0YbQuNC4INC00LvRjyB0b0RhdGUoKS4g0J7RgdGC0LDQstC70LXQvdGLINC00LvRjyDQvtCx0YDQsNGC0L3QvtC5INGB0L7QstC80LXRgdGC0LjQvNC+0YHRgtC4INGB0LjQs9C90LDRgtGD0YDRiyDigJQg0YDQsNC90LXQtSDQv9GA0L7QsdGA0LDRgdGL0LLQsNC70LjRgdGMXHJcbiAqINCyIGx1eG9uICjQt9C+0L3QsC/Qu9C+0LrQsNC70YwpLiDQoNCw0LfQsdC+0YAg0LTQsNGC0Ysg0YLQtdC/0LXRgNGMINC90LUg0LfQsNCy0LjRgdC40YIg0L7RgiDQstC90LXRiNC90LjRhSDQsdC40LHQu9C40L7RgtC10Log0Lgg0L/QvtC00LTQtdGA0LbQuNCy0LDQtdGCXHJcbiAqINGC0L7Qu9GM0LrQviDRhNC40LrRgdC40YDQvtCy0LDQvdC90YvQtSDRh9C40YHQu9C+0LLRi9C1INGC0L7QutC10L3RiyAo0YHQvC4gcGFyc2VEYXRlV2l0aEZvcm1hdCksINC/0L7RjdGC0L7QvNGDINC+0L/RhtC40Lgg0YHQtdC50YfQsNGBINC90LUg0LjRgdC/0L7Qu9GM0LfRg9GO0YLRgdGPLlxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBUb0RhdGVPcHRpb25zIHtcclxuICB6b25lPzogc3RyaW5nXHJcbiAgbG9jYWxlPzogc3RyaW5nXHJcbn1cclxuXHJcbi8qKiDQodC+0L7RgtCy0LXRgtGB0YLQstC40LUg0YLQvtC60LXQvdC+0LIg0YTQvtGA0LzQsNGC0LAg0YDQtdCz0YPQu9GP0YDQvdGL0Lwg0LPRgNGD0L/Qv9Cw0Lwg0LfQsNGF0LLQsNGC0LAuINCf0L7RgNGP0LTQvtC6INCy0LDQttC10L06INC00LvQuNC90L3Ri9C1INGC0L7QutC10L3RiyDQv9GA0L7QstC10YDRj9GO0YLRgdGPINGA0LDQvdGM0YjQtSDQutC+0YDQvtGC0LrQuNGFICovXHJcbmNvbnN0IERBVEVfRk9STUFUX1RPS0VOUzogW3N0cmluZywgc3RyaW5nXVtdID0gW1xyXG4gIFsneXl5eScsICcoPzx5eXl5PlxcXFxkezR9KSddLFxyXG4gIFsneXknLCAnKD88eXk+XFxcXGR7Mn0pJ10sXHJcbiAgWydNTScsICcoPzxNTT5cXFxcZHsyfSknXSxcclxuICBbJ00nLCAnKD88TT5cXFxcZHsxLDJ9KSddLFxyXG4gIFsnZGQnLCAnKD88ZGQ+XFxcXGR7Mn0pJ10sXHJcbiAgWydkJywgJyg/PGQ+XFxcXGR7MSwyfSknXSxcclxuICBbJ0hIJywgJyg/PEhIPlxcXFxkezJ9KSddLFxyXG4gIFsnSCcsICcoPzxIPlxcXFxkezEsMn0pJ10sXHJcbiAgWydtbScsICcoPzxtbT5cXFxcZHsyfSknXSxcclxuICBbJ20nLCAnKD88bT5cXFxcZHsxLDJ9KSddLFxyXG4gIFsnc3MnLCAnKD88c3M+XFxcXGR7Mn0pJ10sXHJcbiAgWydzJywgJyg/PHM+XFxcXGR7MSwyfSknXSxcclxuXVxyXG5cclxuY29uc3QgREFURV9GT1JNQVRfVE9LRU5fUkVHRVggPSBuZXcgUmVnRXhwKERBVEVfRk9STUFUX1RPS0VOUy5tYXAoKFt0b2tlbl0pID0+IHRva2VuKS5qb2luKCd8JyksICdnJylcclxuXHJcbmNvbnN0IFRJTUVfT05MWV9UT0tFTlMgPSBuZXcgU2V0KFsnSEgnLCAnSCcsICdtbScsICdtJywgJ3NzJywgJ3MnXSlcclxuXHJcbi8qKlxyXG4gKiDQktGL0LLQvtC00LjRgiDRhNC+0YDQvNCw0YIgXCLRgtC+0LvRjNC60L4g0LTQsNGC0LBcIiDQuNC3INGE0L7RgNC80LDRgtCwINC00LDRgtGLLdC4LdCy0YDQtdC80LXQvdC4IOKAlCDQvtGC0YDQtdC30LDQtdGCINCy0YDQtdC80Y8g0Lgg0YDQsNC30LTQtdC70LjRgtC10LvRjCDQv9C10YDQtdC0XHJcbiAqINC90LjQvCAo0L3QsNC/0YDQuNC80LXRgCwgYCdkZC5NTS55eXl5IEhIOm1tOnNzJ2Ag4oaSIGAnZGQuTU0ueXl5eSdgKS4g0J/QvtGA0Y/QtNC+0Log0LTQtdC90Ywv0LzQtdGB0Y/Rhi/Qs9C+0LQg0YMg0L/QvtC70LXQuVxyXG4gKiBcItC00LDRgtCwXCIg0LggXCLQtNCw0YLQsC3QstGA0LXQvNGPXCIg0L3QsCDQvtC00L3QvtC8INC/0L7RgNGC0LDQu9C1IEJpdHJpeDI0INCy0YHQtdCz0LTQsCDRgdC+0LPQu9Cw0YHQvtCy0LDQvSDigJQg0YDQsNC30LvQuNGH0LDQtdGC0YHRjyDRgtC+0LvRjNC60L5cclxuICog0L3QsNC70LjRh9C40LUgYEhIOm1tOnNzYCwg0L/QvtGN0YLQvtC80YMg0L3QtdGCINGB0LzRi9GB0LvQsCDQt9Cw0YHRgtCw0LLQu9GP0YLRjCDQstGL0LfRi9Cy0LDRjtGJ0LXQs9C+INC/0LXRgNC10LTQsNCy0LDRgtGMINC+0LHQsCDRhNC+0YDQvNCw0YLQsCDQuFxyXG4gKiDQtNC10YDQttCw0YLRjCDQuNGFINCyINGB0LjQvdGF0YDQvtC90LUg0LLRgNGD0YfQvdGD0Y4uXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZGVyaXZlRGF0ZU9ubHlGb3JtYXQoZGF0ZVRpbWVGb3JtYXQ6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgREFURV9GT1JNQVRfVE9LRU5fUkVHRVgubGFzdEluZGV4ID0gMFxyXG4gIGxldCBtYXRjaDogUmVnRXhwRXhlY0FycmF5IHwgbnVsbFxyXG5cclxuICB3aGlsZSAoKG1hdGNoID0gREFURV9GT1JNQVRfVE9LRU5fUkVHRVguZXhlYyhkYXRlVGltZUZvcm1hdCkpICE9PSBudWxsKSB7XHJcbiAgICBpZiAoVElNRV9PTkxZX1RPS0VOUy5oYXMobWF0Y2hbMF0pKSB7XHJcbiAgICAgIC8vINCe0YLRgNC10LfQsNC10Lwg0LvRjtCx0L7QuSDRgNCw0LfQtNC10LvQuNGC0LXQu9GMINC/0LXRgNC10LQg0LLRgNC10LzQtdC90LXQvCwg0LLQutC70Y7Rh9Cw0Y8g0LHRg9C60LLQtdC90L3Ri9C5ICjQvdCw0L/RgNC40LzQtdGAICdUJyDQsiBJU08t0YHRgtC40LvQtVxyXG4gICAgICAvLyAnZGQuTU0ueXl5eVRISDptbTpzcycpLCDQsCDQvdC1INGC0L7Qu9GM0LrQviDQv9GD0L3QutGC0YPQsNGG0LjRjiDigJQg0L7RgdGC0LDQvdCw0LLQu9C40LLQsNC10LzRgdGPINC90LAg0L/QvtGB0LvQtdC00L3QtdC8INGB0LjQvNCy0L7Qu9C1LFxyXG4gICAgICAvLyDQutC+0YLQvtGA0YvQuSDRgNC10LDQu9GM0L3QviDQvtGC0L3QvtGB0LjRgtGB0Y8g0Log0YLQvtC60LXQvdCw0Lwg0LTQsNGC0YsgKHkvTS9kKS5cclxuICAgICAgY29uc3QgZGF0ZVBhcnQgPSBkYXRlVGltZUZvcm1hdC5zbGljZSgwLCBtYXRjaC5pbmRleCkucmVwbGFjZSgvW155TWRdKyQvLCAnJylcclxuICAgICAgcmV0dXJuIGRhdGVQYXJ0IHx8IGRhdGVUaW1lRm9ybWF0XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4gZGF0ZVRpbWVGb3JtYXRcclxufVxyXG5cclxuZnVuY3Rpb24gZXNjYXBlUmVnRXhwKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcclxuICByZXR1cm4gc3RyLnJlcGxhY2UoL1suKis/XiR7fSgpfFtcXF1cXFxcXS9nLCAnXFxcXCQmJylcclxufVxyXG5cclxuLyoqXHJcbiAqINCk0L7RgNC80LDRgtGLINC00LDRgiwg0LrQvtGC0L7RgNGL0LUgQml0cml4MjQg0YDQtdCw0LvRjNC90L4g0L/RgNC40YHRi9C70LDQtdGCINCyINGA0LDQt9C90YvRhSDQvNC10YLQvtC00LDRhSBSRVNUINC4INC90LAg0YDQsNC30L3Ri9GFXHJcbiAqINC/0L7RgNGC0LDQu9Cw0YUg4oCUINGE0L7RgNC80LDRgiDQtNCw0YLRiy/QstGA0LXQvNC10L3QuCDQsiDQvtGC0LLQtdGC0LUg0LfQsNCy0LjRgdC40YIg0L7RgiDQvdCw0YHRgtGA0L7QtdC6INC/0L7RgNGC0LDQu9CwICjQndCw0YHRgtGA0L7QudC60Lgg4oaSINGE0L7RgNC80LDRglxyXG4gKiDQtNCw0YLRiyDQuCDQstGA0LXQvNC10L3QuCksINC/0L7RjdGC0L7QvNGDINC+0LTQuNC9INC30LDRhdCw0YDQtNC60L7QttC10L3QvdGL0Lkg0YjQsNCx0LvQvtC9INC90LUg0YPQvdC40LLQtdGA0YHQsNC70LXQvS4g0JXRgdC70Lgg0Y/QstC90YvQuSBgZm9ybWF0YCxcclxuICog0L/QtdGA0LXQtNCw0L3QvdGL0Lkg0LIgdG9EYXRlKCksINC90LUg0YHQvtCy0L/QsNC7INGB0L4g0LfQvdCw0YfQtdC90LjQtdC8LCDQv9C10YDQtdC0INGC0LXQvCDQutCw0Log0YHRh9C40YLQsNGC0Ywg0YHRgtGA0L7QutGDINC90LXQstCw0LvQuNC00L3QvtC5LFxyXG4gKiDQv9GA0L7QsdGD0LXQvCDRjdGC0Lgg0LLQsNGA0LjQsNC90YLRiyDQv9C+INC+0YfQtdGA0LXQtNC4IOKAlCDQvtC90Lgg0L3QtSDQv9C10YDQtdGB0LXQutCw0Y7RgtGB0Y8g0L/QviDRgNCw0LfQtNC10LvQuNGC0LXQu9GP0Lwv0L/QvtGA0Y/QtNC60YMg0YLQvtC60LXQvdC+0LIsXHJcbiAqINGC0LDQuiDRh9GC0L4g0LvQvtC20L3Ri9GFINGB0L7QstC/0LDQtNC10L3QuNC5INC90LUg0LHRg9C00LXRgi5cclxuICovXHJcbmNvbnN0IEZBTExCQUNLX0RBVEVfRk9STUFUUyA9IFtcclxuICAnZGQuTU0ueXl5eSBISDptbTpzcycsXHJcbiAgJ3l5eXktTU0tZGQgSEg6bW06c3MnLFxyXG4gICdkZC5NTS55eXl5JyxcclxuICAneXl5eS1NTS1kZCcsXHJcbl1cclxuXHJcbi8qKlxyXG4gKiDQoNCw0LfQsdC40YDQsNC10YIg0YHRgtGA0L7QutGDINC00LDRgtGLINC/0L4g0L/RgNC+0YHRgtC+0LzRgyDRiNCw0LHQu9C+0L3RgyAoeXl5eSwgTU0sIGRkLCBISCwgbW0sIHNzINC4INC40YUg0L7QtNC90L7QsdGD0LrQstC10L3QvdGL0LVcclxuICog0LLQsNGA0LjQsNC90YLRiywg0L3QsNC/0YDQuNC80LXRgCAnZGQuTU0ueXl5eSBISDptbTpzcycpLiDQoNCw0LfQtNC10LvQuNGC0LXQu9C4INC80LXQttC00YMg0YLQvtC60LXQvdCw0LzQuCDQsdC10YDRg9GC0YHRjyDQuNC3INGI0LDQsdC70L7QvdCwXHJcbiAqINC60LDQuiDQtdGB0YLRjC4g0J3QtSDQv9C+0LTQtNC10YDQttC40LLQsNC10YIg0LvQvtC60LDQu9C4LCDQvdCw0LfQstCw0L3QuNGPINC80LXRgdGP0YbQtdCyINC4INGH0LDRgdC+0LLRi9C1INC/0L7Rj9GB0LAg4oCUINC00LvRjyBSRVNULdC+0YLQstC10YLQvtCyXHJcbiAqIEJpdHJpeDI0INC+0L3QuCDQvdC1INGC0YDQtdCx0YPRjtGC0YHRjywg0LfQvdCw0YfQtdC90LjRjyDQstGB0LXQs9C00LAg0L/RgNC40YXQvtC00Y/RgiDQsiDRhNC40LrRgdC40YDQvtCy0LDQvdC90L7QvCDRh9C40YHQu9C+0LLQvtC8INCy0LjQtNC1LlxyXG4gKi9cclxuZnVuY3Rpb24gcGFyc2VEYXRlV2l0aEZvcm1hdCh2YWw6IHN0cmluZywgZm9ybWF0OiBzdHJpbmcpOiBEYXRlIHwgbnVsbCB7XHJcbiAgY29uc3QgdG9rZW5NYXAgPSBuZXcgTWFwKERBVEVfRk9STUFUX1RPS0VOUylcclxuICBsZXQgcGF0dGVybiA9ICcnXHJcbiAgbGV0IGxhc3RJbmRleCA9IDBcclxuICBsZXQgbWF0Y2g6IFJlZ0V4cEV4ZWNBcnJheSB8IG51bGxcclxuXHJcbiAgREFURV9GT1JNQVRfVE9LRU5fUkVHRVgubGFzdEluZGV4ID0gMFxyXG4gIHdoaWxlICgobWF0Y2ggPSBEQVRFX0ZPUk1BVF9UT0tFTl9SRUdFWC5leGVjKGZvcm1hdCkpICE9PSBudWxsKSB7XHJcbiAgICBwYXR0ZXJuICs9IGVzY2FwZVJlZ0V4cChmb3JtYXQuc2xpY2UobGFzdEluZGV4LCBtYXRjaC5pbmRleCkpXHJcbiAgICBwYXR0ZXJuICs9IHRva2VuTWFwLmdldChtYXRjaFswXSlcclxuICAgIGxhc3RJbmRleCA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoXHJcbiAgfVxyXG4gIHBhdHRlcm4gKz0gZXNjYXBlUmVnRXhwKGZvcm1hdC5zbGljZShsYXN0SW5kZXgpKVxyXG5cclxuICBjb25zdCByZXN1bHQgPSBuZXcgUmVnRXhwKGBeJHtwYXR0ZXJufSRgKS5leGVjKHZhbClcclxuICBpZiAoIXJlc3VsdD8uZ3JvdXBzKSB7XHJcbiAgICByZXR1cm4gbnVsbFxyXG4gIH1cclxuXHJcbiAgY29uc3QgZyA9IHJlc3VsdC5ncm91cHNcclxuICBjb25zdCB5ZWFyID0gZ1sneXl5eSddID8gTnVtYmVyKGdbJ3l5eXknXSkgOiBnWyd5eSddID8gMjAwMCArIE51bWJlcihnWyd5eSddKSA6IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKVxyXG4gIGNvbnN0IG1vbnRoID0gTnVtYmVyKGdbJ01NJ10gPz8gZ1snTSddID8/IDEpXHJcbiAgY29uc3QgZGF5ID0gTnVtYmVyKGdbJ2RkJ10gPz8gZ1snZCddID8/IDEpXHJcbiAgY29uc3QgaG91ciA9IE51bWJlcihnWydISCddID8/IGdbJ0gnXSA/PyAwKVxyXG4gIGNvbnN0IG1pbnV0ZSA9IE51bWJlcihnWydtbSddID8/IGdbJ20nXSA/PyAwKVxyXG4gIGNvbnN0IHNlY29uZCA9IE51bWJlcihnWydzcyddID8/IGdbJ3MnXSA/PyAwKVxyXG5cclxuICAvLyDQotC+0LrQtdC90Ysg4oCUINGN0YLQviDQv9GA0L7RgdGC0L4gXCJOINGG0LjRhNGAXCIsINCx0LXQtyDQv9GA0L7QstC10YDQutC4INC00LjQsNC/0LDQt9C+0L3QsCAocmVnZXgg0L3QtSDQvtGC0LvQuNGH0LjRgiBcIjEzXCIg0LzQtdGB0Y/RhtCwINC+0YJcclxuICAvLyBcIjEzXCIg0LTQvdGPKS4g0JHQtdC3INGN0YLQvtC5INC/0YDQvtCy0LXRgNC60LggbmV3IERhdGUoKSDQvNC+0LvRh9CwIFwi0L/QtdGA0LXQutCw0YLRi9Cy0LDQtdGCXCIg0L/QtdGA0LXQv9C+0LvQvdC10L3QuNC1INC90LAg0YHQvtGB0LXQtNC90LjQuVxyXG4gIC8vINC80LXRgdGP0YYv0LPQvtC0ICjQvdCw0L/RgNC40LzQtdGALCDQvNC10YHRj9GGPTEzIOKGkiDRj9C90LLQsNGA0Ywg0YHQu9C10LTRg9GO0YnQtdCz0L4g0LPQvtC00LApINCy0LzQtdGB0YLQviDRgtC+0LPQviwg0YfRgtC+0LHRiyDRgdGH0LjRgtCw0YLRjFxyXG4gIC8vINGB0YLRgNC+0LrRgyDQvdC10LLQsNC70LjQtNC90L7QuS5cclxuICBpZiAobW9udGggPCAxIHx8IG1vbnRoID4gMTIgfHwgZGF5IDwgMSB8fCBkYXkgPiAzMSB8fCBob3VyID4gMjMgfHwgbWludXRlID4gNTkgfHwgc2Vjb25kID4gNTkpIHtcclxuICAgIHJldHVybiBudWxsXHJcbiAgfVxyXG5cclxuICByZXR1cm4gYnVpbGREYXRlKHllYXIsIG1vbnRoLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kKVxyXG59XHJcblxyXG4vKiog0KHQvtCx0LjRgNCw0LXRgiDQtNCw0YLRgywg0L7RgtCx0YDQsNGB0YvQstCw0Y8g0L3QtdGB0YPRidC10YHRgtCy0YPRjtGJ0LjQtSDQtNC90Lgg0LzQtdGB0Y/RhtCwOiBuZXcgRGF0ZSgpINC/0YDQtdCy0YDQsNGC0LjQuyDQsdGLIDMxINGE0LXQstGA0LDQu9GPINCyIDMg0LzQsNGA0YLQsC4gKi9cclxuZnVuY3Rpb24gYnVpbGREYXRlKHllYXI6IG51bWJlciwgbW9udGg6IG51bWJlciwgZGF5OiBudW1iZXIsIGhvdXI6IG51bWJlciwgbWludXRlOiBudW1iZXIsIHNlY29uZDogbnVtYmVyKTogRGF0ZSB8IG51bGwge1xyXG4gIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCAtIDEsIGRheSwgaG91ciwgbWludXRlLCBzZWNvbmQpXHJcbiAgcmV0dXJuIChpc05hTihkYXRlLmdldFRpbWUoKSkgfHwgZGF0ZS5nZXRNb250aCgpICE9PSBtb250aCAtIDEgfHwgZGF0ZS5nZXREYXRlKCkgIT09IGRheSkgPyBudWxsIDogZGF0ZVxyXG59XHJcblxyXG4vKipcclxuICog0J/QvtGB0LvQtdC00L3QuNC5INGA0LXQt9C10YDQstC90YvQuSDRgNCw0LfQsdC+0YAg4oCUINCx0LXQtyDQt9C90LDQvdC40Y8g0LrQvtC90LrRgNC10YLQvdC+0LPQviDRhNC+0YDQvNCw0YLQsC4g0KDQsNCx0L7RgtCw0LXRgiDRgtC+0LvRjNC60L4g0LTQu9GPINGH0LjRgdGC0L5cclxuICog0YfQuNGB0LvQvtCy0YvRhSDQtNCw0YIgKNC90LjQutCw0LrQuNGFINC90LDQt9Cy0LDQvdC40Lkg0LzQtdGB0Y/RhtC10LIv0LTQvdC10Lkg4oCUINC00LvRjyDRjdGC0L7Qs9C+INC90YPQttC90YsgbG9jYWxlLdGC0LDQsdC70LjRhtGLLCDQsCDRjdGC0L4g0LrQsNC6XHJcbiAqINGA0LDQtyDRgtC+0YIg0LLQtdGBLCDRgNCw0LTQuCDRg9GF0L7QtNCwINC+0YIg0LrQvtGC0L7RgNC+0LPQviBsdXhvbiDQsdGL0Lsg0YPQsdGA0LDQvSDQuNC3INC30LDQstC40YHQuNC80L7RgdGC0LXQuSkuXHJcbiAqXHJcbiAqINCY0LTQtdGPOiDQs9C+0LQg4oCUINC10LTQuNC90YHRgtCy0LXQvdC90YvQuSDRgdC10LPQvNC10L3RgiDQtNC70LjQvdC+0Lkg0YDQvtCy0L3QviA0INGG0LjRhNGA0YssINC/0L7RjdGC0L7QvNGDINC10LPQviDQv9C+0LfQuNGG0LjRjyAo0L/QtdGA0LLRi9C5INC40LvQuFxyXG4gKiDQv9C+0YHQu9C10LTQvdC40Lkg0LjQtyDRgtGA0ZHRhSDRgdC10LPQvNC10L3RgtC+0LIg0LTQsNGC0YspINC+0LTQvdC+0LfQvdCw0YfQvdC+INC+0L/QvtC30L3QsNGR0YLRgdGPINC/0YDQuCDQu9GO0LHQvtC8INGA0LDQt9C00LXQu9C40YLQtdC70LUgKGAuYCwgYC1gLFxyXG4gKiBgL2AsINC/0YDQvtCx0LXQuy4uLikuINCc0LXRgdGP0YYg0L/QviDQstGB0LXQvCDRgNCw0YHQv9GA0L7RgdGC0YDQsNC90ZHQvdC90YvQvCDQsiDQvNC40YDQtSDRgdC+0LPQu9Cw0YjQtdC90LjRj9C8IChJU08gYHl5eXktTU0tZGRgINC4XHJcbiAqINC10LLRgNC+0L/QtdC50YHQutC+0LUgYGRkLk1NLnl5eXlgKSDRgdGC0L7QuNGCINC80LXQttC00YMg0LPQvtC00L7QvCDQuCDQtNC90ZHQvCwg0L/QvtGN0YLQvtC80YMg0LHQtdGA0ZHRgtGB0Y8g0LrQsNC6INGB0YDQtdC00L3QuNC5INGB0LXQs9C80LXQvdGCLlxyXG4gKiDQktGA0LXQvNGPLCDQtdGB0LvQuCDQtdGB0YLRjCwg0LLRgdC10LPQtNCwINC40LTRkdGCINC60LDQuiBgSEg6bW06c3NgIOKAlCDRjdGC0L7RgiDQv9C+0YDRj9C00L7QuiDRg9C90LjQstC10YDRgdCw0LvQtdC9LlxyXG4gKlxyXG4gKiDQndC1INGA0LXRiNCw0LXRgiDQuCDQvdC1INC/0YvRgtCw0LXRgtGB0Y8g0YDQtdGI0LjRgtGMINC90LXQvtC00L3QvtC30L3QsNGH0L3QvtGB0YLRjCDQtNC10L3RjC/QvNC10YHRj9GGINCyINGH0LjRgdGC0L4g0YfQuNGB0LvQvtCy0YvRhSDRhNC+0YDQvNCw0YLQsNGFINCy0LjQtNCwXHJcbiAqIGBNTS9kZC95eXl5YCAo0KHQqNCQKSwg0LPQtNC1INC+0LHQsCDRgdC10LPQvNC10L3RgtCwINC80L7Qs9GD0YIg0LHRi9GC0Ywg4omkMTIg4oCUINGD0LPQsNC00YvQstCw0YLRjCDRjdGC0L4g0LHQtdC3INC30L3QsNC90LjRjyDQu9C+0LrQsNC70LhcclxuICog0LfQvdCw0YfQuNC70L4g0LHRiyDQuNC90L7Qs9C00LAg0LzQvtC70YfQsCDQv9GD0YLQsNGC0Ywg0LTQtdC90Ywg0YEg0LzQtdGB0Y/RhtC10LwsINGH0YLQviDRhdGD0LbQtSDRj9Cy0L3QvtC5INC+0YjQuNCx0LrQuC5cclxuICovXHJcbmZ1bmN0aW9uIHBhcnNlRGF0ZUhldXJpc3RpY2FsbHkodmFsOiBzdHJpbmcpOiBEYXRlIHwgbnVsbCB7XHJcbiAgY29uc3QgcGFydHMgPSB2YWwubWF0Y2goL1xcZCsvZylcclxuICBpZiAoIXBhcnRzIHx8IHBhcnRzLmxlbmd0aCA8IDMgfHwgcGFydHMubGVuZ3RoID4gNikge1xyXG4gICAgcmV0dXJuIG51bGxcclxuICB9XHJcblxyXG4gIGNvbnN0IFtkMCwgZDEsIGQyLCAuLi50aW1lUGFydHNdID0gcGFydHNcclxuICBjb25zdCBkYXRlUGFydHMgPSBbZDAsIGQxLCBkMl1cclxuICBjb25zdCB5ZWFySWR4ID0gZGF0ZVBhcnRzLmZpbmRJbmRleChwID0+IHAubGVuZ3RoID09PSA0KVxyXG4gIC8vINCT0L7QtCDQtNC+0LvQttC10L0g0LHRi9GC0Ywg0L7QtNC90L7Qt9C90LDRh9C90L4g0L3QsNC50LTQtdC9ICjRgNC+0LLQvdC+IDQg0YbQuNGE0YDRiykg0Lgg0YHRgtC+0Y/RgtGMINGBINC60YDQsNGPLCDQsCDQvdC1INCyINGB0LXRgNC10LTQuNC90LUg4oCUXHJcbiAgLy8g0LjQvdCw0YfQtSDQv9C+0LfQuNGG0LjRjyDQvNC10YHRj9GG0LAv0LTQvdGPINC90LUg0L7Qv9GA0LXQtNC10LvQuNGC0Ywg0LHQtdC30L7Qv9Cw0YHQvdC+LlxyXG4gIGlmICh5ZWFySWR4ICE9PSAwICYmIHllYXJJZHggIT09IDIpIHtcclxuICAgIHJldHVybiBudWxsXHJcbiAgfVxyXG5cclxuICBjb25zdCB5ZWFyID0gTnVtYmVyKGRhdGVQYXJ0c1t5ZWFySWR4XSlcclxuICBjb25zdCBtb250aCA9IE51bWJlcihkYXRlUGFydHNbMV0pXHJcbiAgY29uc3QgZGF5ID0gTnVtYmVyKGRhdGVQYXJ0c1t5ZWFySWR4ID09PSAwID8gMiA6IDBdKVxyXG4gIGlmIChtb250aCA8IDEgfHwgbW9udGggPiAxMiB8fCBkYXkgPCAxIHx8IGRheSA+IDMxKSB7XHJcbiAgICByZXR1cm4gbnVsbFxyXG4gIH1cclxuXHJcbiAgY29uc3QgW2hoLCBtbSwgc3NdID0gdGltZVBhcnRzXHJcbiAgY29uc3QgaG91ciA9IGhoICE9PSB1bmRlZmluZWQgPyBOdW1iZXIoaGgpIDogMFxyXG4gIGNvbnN0IG1pbnV0ZSA9IG1tICE9PSB1bmRlZmluZWQgPyBOdW1iZXIobW0pIDogMFxyXG4gIGNvbnN0IHNlY29uZCA9IHNzICE9PSB1bmRlZmluZWQgPyBOdW1iZXIoc3MpIDogMFxyXG4gIGlmIChob3VyID4gMjMgfHwgbWludXRlID4gNTkgfHwgc2Vjb25kID4gNTkpIHtcclxuICAgIHJldHVybiBudWxsXHJcbiAgfVxyXG5cclxuICByZXR1cm4gYnVpbGREYXRlKHllYXIsIG1vbnRoLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kKVxyXG59XHJcblxyXG4vKipcclxuICog0J/RgNC10L7QsdGA0LDQt9GD0LXRgiDQt9C90LDRh9C10L3QuNC1INCyINC00LDRgtGDLlxyXG4gKlxyXG4gKiDQldGB0LvQuCDQv9C10YDQtdC00LDQvSBgZm9ybWF0YCwg0L3QviDQt9C90LDRh9C10L3QuNC1INC10LzRgyDQvdC1INGB0L7QvtGC0LLQtdGC0YHRgtCy0YPQtdGCICjRgdC8LiBGQUxMQkFDS19EQVRFX0ZPUk1BVFMg4oCUXHJcbiAqINCw0LrRgtGD0LDQu9GM0L3QviDQtNC70Y8g0L/QvtC70LXQuSwg0LPQtNC1IEJpdHJpeDI0INC+0YLQtNCw0ZHRgiDQtNCw0YLRgyDQsiDRhNC+0YDQvNCw0YLQtSwg0L3QsNGB0YLRgNC+0LXQvdC90L7QvCDQvdCwINC/0L7RgNGC0LDQu9C1LCDQsCDQvdC1INCyXHJcbiAqINGC0L7QvCwg0YfRgtC+INC30LDRhdCw0YDQtNC60L7QttC10L0g0LIg0LzQsNC/0L/QtdGA0LUpLCDQv9C10YDQtdC0INGC0LXQvCDQutCw0Log0YHRh9C40YLQsNGC0Ywg0LfQvdCw0YfQtdC90LjQtSDQvdC10LLQsNC70LjQtNC90YvQvCwg0LTQtdC70LDRjtGC0YHRjyDQtdGJ0ZFcclxuICog0LTQstC1INC/0L7Qv9GL0YLQutC4OiDQtNGA0YPQs9C40LUg0YDQsNGB0L/RgNC+0YHRgtGA0LDQvdGR0L3QvdGL0LUg0YTQvtGA0LzQsNGC0YsgQml0cml4MjQsINCwINC30LDRgtC10Lwg4oCUINC/0L7Qt9C40YbQuNC+0L3QvdCw0Y8g0Y3QstGA0LjRgdGC0LjQutCwXHJcbiAqICjRgdC8LiBwYXJzZURhdGVIZXVyaXN0aWNhbGx5KSwg0LrQvtGC0L7RgNCw0Y8g0YDQsNGB0L/QvtC30L3QsNGR0YIg0L/RgNCw0LrRgtC40YfQtdGB0LrQuCDQu9GO0LHQvtC5INGH0LjRgdGC0L4g0YfQuNGB0LvQvtCy0L7QuSDRhNC+0YDQvNCw0YJcclxuICog0LTQsNGC0Ysg0L3QtdC30LDQstC40YHQuNC80L4g0L7RgiDRgNCw0LfQtNC10LvQuNGC0LXQu9GPLiDQldGB0LvQuCDQv9GA0LjQu9C+0LbQtdC90LjRjiDRgtC+0YfQvdC+INC40LfQstC10YHRgtC10L0g0YTQvtGA0LzQsNGCINC60L7QvdC60YDQtdGC0L3QvtCz0L4g0L/QvtGA0YLQsNC70LAsXHJcbiAqINC10LPQviDRgdGC0L7QuNGCINC/0LXRgNC10LTQsNCy0LDRgtGMINGP0LLQvdGL0LwgYGZvcm1hdGAg4oCUINGN0YLQviDQstGB0LXQs9C00LAg0L/RgNC40L7RgNC40YLQtdGC0L3QtdC1INGD0LPQsNC00YvQstCw0L3QuNGPLlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHRvRGF0ZSh2YWw6IG51bWJlciB8IHN0cmluZyB8IERhdGUsIGZvcm1hdD86IHN0cmluZywgb3B0PzogVG9EYXRlT3B0aW9ucywgdGhyb3dFcnJvciA9IHRydWUpOiBEYXRlIHtcclxuICBpZiAodmFsIGluc3RhbmNlb2YgRGF0ZSkge1xyXG4gICAgcmV0dXJuIHZhbFxyXG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcclxuICAgIGlmIChmb3JtYXQpIHtcclxuICAgICAgY29uc3QgcGFyc2VkID0gcGFyc2VEYXRlV2l0aEZvcm1hdCh2YWwsIGZvcm1hdClcclxuICAgICAgaWYgKHBhcnNlZCkge1xyXG4gICAgICAgIHJldHVybiBwYXJzZWRcclxuICAgICAgfVxyXG5cclxuICAgICAgZm9yIChjb25zdCBmYWxsYmFja0Zvcm1hdCBvZiBGQUxMQkFDS19EQVRFX0ZPUk1BVFMpIHtcclxuICAgICAgICBpZiAoZmFsbGJhY2tGb3JtYXQgPT09IGZvcm1hdCkgY29udGludWVcclxuICAgICAgICBjb25zdCBmYWxsYmFja1BhcnNlZCA9IHBhcnNlRGF0ZVdpdGhGb3JtYXQodmFsLCBmYWxsYmFja0Zvcm1hdClcclxuICAgICAgICBpZiAoZmFsbGJhY2tQYXJzZWQpIHtcclxuICAgICAgICAgIHJldHVybiBmYWxsYmFja1BhcnNlZFxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgaGV1cmlzdGljUGFyc2VkID0gcGFyc2VEYXRlSGV1cmlzdGljYWxseSh2YWwpXHJcbiAgICAgIGlmIChoZXVyaXN0aWNQYXJzZWQpIHtcclxuICAgICAgICByZXR1cm4gaGV1cmlzdGljUGFyc2VkXHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBuZXcgRGF0ZSh2YWwpXHJcbiAgICB9XHJcbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xyXG4gICAgcmV0dXJuIG5ldyBEYXRlKHZhbClcclxuICB9XHJcblxyXG4gIGlmICh0aHJvd0Vycm9yKSB7XHJcbiAgICBjb25zb2xlLmVycm9yKCdXcm9uZyBkYXRlIGZvcm1hdCcsIHZhbCwgZm9ybWF0KVxyXG4gICAgdGhyb3cgbmV3IEVycm9yKCdXcm9uZyBkYXRlIGZvcm1hdCcpXHJcbiAgfVxyXG5cclxuICByZXR1cm4gbmV3IERhdGUoKVxyXG59XHJcblxyXG4vKipcclxuICog0J/RgNC10L7QsdGA0LDQt9GD0LXRgiDQtNCw0YLRgyDQsiDRgdGC0YDQvtC60YMg0YEg0YPRh9C10YLQvtC8INCy0YDQtdC80LXQvdC90L7QuSDQt9C+0L3Ri1xyXG4gKlxyXG4gKiDQpNC+0YDQvNCw0YLQuNGA0L7QstCw0L3QuNC1INC00LXQu9C10LPQuNGA0L7QstCw0L3QviB0b0xvY2FsQXRvbSgpIOKAlCDRgNCw0L3RjNGI0LUg0LfQtNC10YHRjCDQsdGL0LvQsCDQstGC0L7RgNCw0Y8sXHJcbiAqINC90LXQt9Cw0LLQuNGB0LjQvNCw0Y8g0LrQvtC/0LjRjyDRgtC+0Lkg0LbQtSDRhNC+0YDQvNGD0LvRiyAocGFkZGluZCArINGB0LzQtdGJ0LXQvdC40LUg0YLQsNC50LzQt9C+0L3RiyksINC60L7RgtC+0YDQsNGPXHJcbiAqINC80L7Qs9C70LAg0YDQsNC30L7QudGC0LjRgdGMINGBIHRvTG9jYWxBdG9tKCkg0L/RgNC4INC/0YDQsNCy0LrQtSDQvtC00L3QvtC5INC40Lcg0L3QuNGFINC4INC90LUg0LTRgNGD0LPQvtC5LlxyXG4gKlxyXG4gKiBAcGFyYW0gZGF0ZVxyXG4gKiBAcGFyYW0gdGhyb3dFcnJvclxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHRvSVNPU3RyaW5nV2l0aFRpbWV6b25lKGRhdGU6IERhdGUsIHRocm93RXJyb3IgPSB0cnVlKTogc3RyaW5nIHtcclxuICBpZiAoIShkYXRlIGluc3RhbmNlb2YgRGF0ZSkpIHtcclxuICAgIGlmICh0aHJvd0Vycm9yKSB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgdmFsdWU6IG5vdCBhIHZhbGlkIERhdGUgb2JqZWN0JylcclxuICAgIHJldHVybiAnJ1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHRvTG9jYWxBdG9tKGRhdGUpXHJcbn1cclxuXHJcbi8qKlxyXG4gKiDQn9GA0LXQvtCx0YDQsNC30YPQtdGCINC30L3QsNGH0LXQvdC40LUg0LIg0LHRg9C70LXQstC+INC30L3QsNGH0LXQvdC40LVcclxuICpcclxuICogQHBhcmFtIHZhbFxyXG4gKiBAcGFyYW0gdGhyb3dFcnJvclxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHRvQm9vbCh2YWw6IGFueSwgdGhyb3dFcnJvciA9IHRydWUpOiBib29sZWFuIHtcclxuICBzd2l0Y2ggKHR5cGVvZiB2YWwpIHtcclxuICAgIGNhc2UgJ3N0cmluZyc6XHJcbiAgICAgIHZhbCA9IHZhbC50b0xvd2VyQ2FzZSgpXHJcbiAgICAgIGlmICh2YWwgPT09ICduJyB8fCB2YWwgPT09ICd5JykgeyAvLyDQsdC40YLRgNC40LrRgdC+0LLRi9C1INC/0L7QvdGP0YLQuNGPINC+IGJvb2xcclxuICAgICAgICByZXR1cm4gdmFsID09PSAneSdcclxuICAgICAgfSBlbHNlIGlmICh2YWwgPT09ICd0cnVlJyB8fCB2YWwgPT09ICdmYWxzZScpIHsgLy8g0LHQuNGC0YDQuNC60YHQvtCy0YvQtSDQv9C+0L3Rj9GC0LjRjyDQviBib29sXHJcbiAgICAgICAgcmV0dXJuIHZhbCA9PT0gJ3RydWUnXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKHRocm93RXJyb3IpIHRocm93IG5ldyBFcnJvcignSW52YWxpZCB2YWx1ZTogY2Fubm90IGJlIGNvbnZlcnRlZCB0byBib29sZWFuJylcclxuICAgICAgICByZXR1cm4gZmFsc2VcclxuICAgICAgfVxyXG4gICAgZGVmYXVsdDpcclxuICAgICAgcmV0dXJuIEJvb2xlYW4odmFsKVxyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqINCf0YDQtdC+0LHRgNCw0LfRg9C10YIg0LHRg9C70LXQstC+INC30L3QsNGH0LXQvdC40LUg0LIgJ1knINC40LvQuCAnTidcclxuICpcclxuICogQHBhcmFtIHZhbFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHRvQlhZb3JOKHZhbDogYm9vbGVhbik6IHN0cmluZyB7XHJcbiAgcmV0dXJuIHZhbCA/ICdZJyA6ICdOJ1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0QmFzZVVybEh0dHBzKHVybDogc3RyaW5nLCBjb21wb25lbnQgPSBmYWxzZSk6IHN0cmluZyB7XHJcbiAgaWYgKGNvbXBvbmVudCkge1xyXG4gICAgcmV0dXJuIGVuY29kZVVSSShjcm9wVXJsKHVybCkgKyAnLycpXHJcbiAgfSBlbHNlIHtcclxuICAgIHJldHVybiBlbmNvZGVVUkkoJ2h0dHBzOi8vJyArIGNyb3BVcmwodXJsKSArICcvJylcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiDQntCx0YDQtdC30LDQtdGCIFVSTCAo0YPQtNCw0LvRj9C10YIg0L/RgNC+0YLQvtC60L7QuylcclxuICpcclxuICogQHBhcmFtIHVybFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGNyb3BVcmwodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gIHVybCA9IHVybCA/IHVybC5yZXBsYWNlKCdodHRwczovLycsICcnKSA6ICcnXHJcbiAgdXJsID0gdXJsID8gdXJsLnJlcGxhY2UoJ2h0dHA6Ly8nLCAnJykgOiAnJ1xyXG4gIHVybCA9IHVybCA/IHVybC5yZXBsYWNlKCdodHRwczonLCAnJykgOiAnJ1xyXG4gIHVybCA9IHVybCA/IHVybC5yZXBsYWNlKCdodHRwOicsICcnKSA6ICcnXHJcbiAgcmV0dXJuIHVybFxyXG59XHJcblxyXG4vKipcclxuICog0J/RgNC10L7QsdGA0LDQt9GD0LXRgiDRhNCw0LnQuyDQsiBiYXNlNjRcclxuICpcclxuICogQHBhcmFtIGZpbGVcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRCYXNlNjRGaWxlKGZpbGU6IEZpbGUpOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpXHJcbiAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKVxyXG4gICAgcmVhZGVyLm9ubG9hZCA9ICgpID0+IHJlc29sdmUocmVhZGVyLnJlc3VsdCBhcyBzdHJpbmcpXHJcbiAgICByZWFkZXIub25lcnJvciA9IGVycm9yID0+IHJlamVjdChlcnJvcilcclxuICB9KVxyXG59XHJcblxyXG4vKipcclxuICog0J/QvtC70YPRh9C40YLRjCDRhNCw0LnQuyDQsiDRhNC+0YDQvNCw0YLQtSBiYXNlNjQg0YEg0YDQsNC30LHQuNCy0LrQvtC5INC90LAg0LfQsNCz0L7Qu9C+0LLQvtC6INC4INC00LDQvdC90YvQtVxyXG4gKlxyXG4gKiBAcGFyYW0gZmlsZVxyXG4gKi9cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEJhc2U2NEZpbGVMaWtlU3RyKGZpbGU6IEZpbGUpOiBQcm9taXNlPHtcclxuICBoZWFkZXI6IHN0cmluZyxcclxuICB2YWw6IHN0cmluZ1xyXG59IHwgdW5kZWZpbmVkPiB7XHJcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZ2V0QmFzZTY0RmlsZShmaWxlKVxyXG4gIGlmICh0eXBlb2YgcmVzdWx0ID09PSAnc3RyaW5nJykge1xyXG4gICAgY29uc3Qgc3BsaXQgPSByZXN1bHQuc3BsaXQoJywnKVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgaGVhZGVyOiBzcGxpdFswXSxcclxuICAgICAgdmFsOiBzcGxpdFsxXVxyXG4gICAgfVxyXG4gIH1cclxuICByZXR1cm4gdW5kZWZpbmVkXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBwcmVwYXJlQmFzZUFkZHJlc3ModXJsOiBzdHJpbmcsIGFkZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gJycpIHtcclxuICAvLyBpZiAodXJsLnNlYXJjaCgnaHR0cHM6Ly8nKSAhPT0gMCAmJiB1cmwuc2VhcmNoKCdodHRwOi8vJykpIHtcclxuICAvLyAgIHVybCA9ICdodHRwczovLycgKyB1cmxcclxuICAvLyB9XHJcblxyXG4gIGlmIChhZGQgJiYgYWRkLmxlbmd0aCA+IDApIHtcclxuICAgIGlmICh1cmwubGFzdEluZGV4T2YoJy8nKSAhPT0gKHVybC5sZW5ndGggLSAxKSkge1xyXG4gICAgICB1cmwgPSB1cmwgKyAnLydcclxuICAgIH1cclxuXHJcbiAgICB1cmwgPSB1cmwgKyBhZGRcclxuICB9XHJcblxyXG4gIGlmICh1cmwubGFzdEluZGV4T2YoJy8nKSAhPT0gKHVybC5sZW5ndGggLSAxKSkge1xyXG4gICAgdXJsID0gdXJsICsgJy8nXHJcbiAgfVxyXG5cclxuICByZXR1cm4gdXJsXHJcbn0iXX0=
|
|
@@ -107,6 +107,7 @@ export class HttpBXServices extends HttpServices {
|
|
|
107
107
|
// Преобразуем параметры в формат x-www-form-urlencoded
|
|
108
108
|
const bodyString = this.serializeBitrixParams(paramsClone);
|
|
109
109
|
return from(this.axiosInstance.post(fullUrl, bodyString, {
|
|
110
|
+
withCredentials: this.session.getWithCredentials(),
|
|
110
111
|
headers: this.buildHeaders(headers, { 'Content-Type': 'application/x-www-form-urlencoded' }),
|
|
111
112
|
}).then((response) => response.data));
|
|
112
113
|
}
|
|
@@ -125,22 +126,26 @@ export class HttpBXServices extends HttpServices {
|
|
|
125
126
|
// авторизации — как в httpPost.
|
|
126
127
|
return withAuthRefresh(defer(() => {
|
|
127
128
|
const paramsClone = clone(params);
|
|
129
|
+
const key = this.session.getKeyAuth();
|
|
128
130
|
const auth = this.session.getAuthParams();
|
|
129
131
|
const checkIsOn = this.session.getCheckAuthParamsIsOn();
|
|
130
132
|
if (checkIsOn) {
|
|
131
133
|
if (!auth) {
|
|
132
134
|
return throwError(() => this.session.getAuthError('get'));
|
|
133
135
|
}
|
|
134
|
-
|
|
136
|
+
if (key !== 'OAuth2') {
|
|
137
|
+
paramsClone[key] = auth;
|
|
138
|
+
}
|
|
135
139
|
}
|
|
136
140
|
return this.session.getBaseUrl().pipe(switchMap((baseUrl) => {
|
|
137
141
|
if (!baseUrl) {
|
|
138
142
|
return throwError(() => this.session.getBaseUrlError('get'));
|
|
139
143
|
}
|
|
140
144
|
const fullUrl = prepareBaseAddress(baseUrl) + url;
|
|
141
|
-
const queryString =
|
|
145
|
+
const queryString = this.serializeBitrixParams(paramsClone);
|
|
142
146
|
const finalUrl = `${fullUrl}?${queryString}`;
|
|
143
147
|
return from(this.axiosInstance.get(finalUrl, {
|
|
148
|
+
withCredentials: this.session.getWithCredentials(),
|
|
144
149
|
headers: this.buildHeaders(headers),
|
|
145
150
|
}).then((response) => response.data));
|
|
146
151
|
}));
|
|
@@ -162,4 +167,4 @@ export class HttpBXServices extends HttpServices {
|
|
|
162
167
|
return arr.join('.');
|
|
163
168
|
}
|
|
164
169
|
}
|
|
165
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSHR0cEJYLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYngtcmVzdC9zcmMvc2VydmljZXMvaHR0cC9IdHRwQlgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFjLFVBQVUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUNwRSxPQUFPLEtBQUssTUFBTSxZQUFZLENBQUE7QUFDOUIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFFBQVEsQ0FBQTtBQUtyQyxPQUFPLE9BQU8sTUFBTSxpQkFBaUIsQ0FBQTtBQUNyQyxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQTtBQUMxRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFDMUMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sU0FBUyxDQUFBO0FBQzVDLE9BQU8sRUFBRSxxQkFBcUIsSUFBSSxxQkFBcUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFBO0FBRXRHLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFFL0MsTUFBTSxPQUFPLGNBQWUsU0FBUSxZQUFZO0lBRTlDOzs7O09BSUc7SUFDSCxNQUFNLENBQU8sS0FBeUQ7UUFFcEUsSUFBSSxZQUFZLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBUyxJQUFJLENBQUMsWUFBWSxDQUFJLEtBQUssQ0FBQyxDQUFDLENBQUE7UUFDdEUsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFBLENBQUMsbUJBQW1CO1FBQ25DLElBQUksUUFBUSxHQUFHLEVBQUUsQ0FBQSxDQUFDLDJDQUEyQztRQUM3RCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENB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OUQsQ0FBQztnQkFFRCxNQUFNLE9BQU8sR0FBRyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUE7Z0JBQ2pELE1BQU0sV0FBVyxHQUFHLElBQUksZUFBZSxDQUFDLFdBQVcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFBO2dCQUMvRCxNQUFNLFFBQVEsR0FBRyxHQUFHLE9BQU8sSUFBSSxXQUFXLEVBQUUsQ0FBQTtnQkFFNUMsT0FBTyxJQUFJLENBQ1QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUksUUFBUSxFQUFFO29CQUNsQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUM7aUJBQ3BDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FDckMsQ0FBQTtZQUNILENBQUMsQ0FBQyxDQUNILENBQUE7UUFDSCxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ0wsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ssWUFBWSxDQUFDLE9BQWdDLEVBQUUsV0FBbUMsRUFBRTtRQUMxRixPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxFQUFFLEdBQUcsT0FBTyxFQUFFLEdBQUcsUUFBUSxFQUFFLENBQUE7SUFDbEUsQ0FBQztJQUVELHFCQUFxQixDQUFDLE1BQWU7UUFDbkMsT0FBTyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUN0QyxDQUFDO0lBRUQsYUFBYSxDQUFDLEdBQWE7UUFDekIsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ3RCLENBQUM7Q0FFRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUsIHRocm93RXJyb3IsIGZvcmtKb2luLCBmcm9tLCBkZWZlciB9IGZyb20gJ3J4anMnXHJcbmltcG9ydCBjbG9uZSBmcm9tICdqdXN0LWNsb25lJ1xyXG5pbXBvcnQgeyBIdHRwU2VydmljZXMgfSBmcm9tICcuL2h0dHAnXHJcbmltcG9ydCB7XHJcbiAgaUJhdGNoUmVxdWVzdEFuc3dlciwgaUJhdGNoUmVxdWVzdFBhcmFtLCBpQmF0Y2hSZXF1ZXN0UGFyYW1BcnIsIGlCYXRjaFJlcXVlc3RQYXJhbUh0dHAsIGtleUJhdGNoLFxyXG59IGZyb20gJy4uLy4uL3R5cGlmaWNhdGlvbi9yZXN0L2JhdGNoL2JhdGNoUmVxdWVzdFBhcmFtJ1xyXG5pbXBvcnQgeyBpQlhSZXN0QW5zd2VyIH0gZnJvbSAnLi4vLi4vdHlwaWZpY2F0aW9uL3Jlc3QvYmFzZS9hbnN3ZXInXHJcbmltcG9ydCBmbGF0dGVuIGZyb20gJ2p1c3QtZmxhdHRlbi1pdCdcclxuaW1wb3J0IHsgaW5zdGFuY2VPZmlCWFJlc3RBbnN3ZXJTdWNjZXNzIH0gZnJvbSAnLi4vLi4vZnVuY3Rpb25zL21hcFJlc3VsdCdcclxuaW1wb3J0IHsgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnXHJcbmltcG9ydCB7IHByZXBhcmVCYXNlQWRkcmVzcyB9IGZyb20gJy4uL2Jhc2UnXHJcbmltcG9ydCB7IHNlcmlhbGl6ZUJpdHJpeFBhcmFtcyBhcyBzdHJpbmdpZnlCaXRyaXhQYXJhbXMgfSBmcm9tICcuLi8uLi9mdW5jdGlvbnMvc2VyaWFsaXplQml0cml4UGFyYW1zJ1xyXG5pbXBvcnQgeyBpSHR0cFBhcmFtU2V0dGluZ3MgfSBmcm9tICcuLi8uLi90eXBpZmljYXRpb24vcmVzdC9zZXR0aW5ncydcclxuaW1wb3J0IHsgd2l0aEF1dGhSZWZyZXNoIH0gZnJvbSAnLi9hdXRoUmVmcmVzaCdcclxuXHJcbmV4cG9ydCBjbGFzcyBIdHRwQlhTZXJ2aWNlcyBleHRlbmRzIEh0dHBTZXJ2aWNlcyB7XHJcblxyXG4gIC8qKlxyXG4gICAqINCd0LUg0YHRh9C40YLQsNC50YLQtSDRjdGC0L7RgiDQvNC10YLQvtC0INC+0LHRgNCw0LfRhtC+0Lwv0YTQuNC90LDQu9GM0L3Ri9C8IEFQSS5cclxuICAgKiBUT0RPOiDQo9C00LDQu9C40YLRjCDQtNCw0L3QvdGL0Lkg0LzQtdGC0L7QtCDQv9C+0YHQu9C1INGA0LXQsNC70LjQt9Cw0YbQuNC4INC10LPQviDQsiDRgNCw0LfQtNC10LvQtSBOYXZ2eVxyXG4gICAqIEBwYXJhbSBwYXJhbVxyXG4gICAqL1xyXG4gIGJyYW5jaDxULCBBPihwYXJhbTogaUJhdGNoUmVxdWVzdFBhcmFtQXJyPFQ+IHwgaUJhdGNoUmVxdWVzdFBhcmFtPFQ+W10pXHJcbiAgICA6IE9ic2VydmFibGU8aUJhdGNoUmVxdWVzdEFuc3dlcjxBPltdIHwgdW5kZWZpbmVkPiB7XHJcbiAgICBsZXQgcHJlcGFyZVBhcmFtID0gT2JqZWN0LmVudHJpZXM8c3RyaW5nPih0aGlzLnByZXBhcmVCYXRjaDxUPihwYXJhbSkpXHJcbiAgICBjb25zdCBzaXplID0gNTAgLy8g0LHQvtC70YzRiNC1INC90LUg0L7RgtC00LDRgdGCXHJcbiAgICBsZXQgc3ViYXJyYXkgPSBbXSAvL9C80LDRgdGB0LjQsiDQsiDQutC+0YLQvtGA0YvQuSDQsdGD0LTQtdGCINCy0YvQstC10LTQtdC9INGA0LXQt9GD0LvRjNGC0LDRgi5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgTWF0aC5jZWlsKHByZXBhcmVQYXJhbS5sZW5ndGggLyBzaXplKTsgaSsrKSB7XHJcbiAgICAgIHN1YmFycmF5W2ldID0gcHJlcGFyZVBhcmFtLnNsaWNlKChpICogc2l6ZSksIChpICogc2l6ZSkgKyBzaXplKVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmb3JrSm9pbihcclxuICAgICAgc3ViYXJyYXkubWFwKGkgPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBQb3N0KCdiYXRjaC5qc29uJywge1xyXG4gICAgICAgICAgaGFsdDogMCxcclxuICAgICAgICAgIGNtZDogT2JqZWN0LmFzc2lnbih7fSwgLi4uaS5tYXAoeCA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB7W3hbMF1dOiB4WzFdfVxyXG4gICAgICAgICAgfSkpXHJcbiAgICAgICAgfSlcclxuICAgICAgfSlcclxuICAgICkgYXMgT2JzZXJ2YWJsZTxpQmF0Y2hSZXF1ZXN0QW5zd2VyPEE+W10+XHJcbiAgfVxyXG5cclxuICBwcmVwYXJlQmF0Y2g8VD4ocGFyYW06IGlCYXRjaFJlcXVlc3RQYXJhbUFycjxUPiB8IGlCYXRjaFJlcXVlc3RQYXJhbTxUPltdKTogaUJhdGNoUmVxdWVzdFBhcmFtSHR0cCB7XHJcbiAgICBsZXQgcmVzOiBpQmF0Y2hSZXF1ZXN0UGFyYW1IdHRwID0gT2JqZWN0LmtleXMocGFyYW0pLnJlZHVjZShcclxuICAgICAgKG9iaiwga2V5KSA9PiB7XHJcbiAgICAgICAgb2JqW2tleV0gPSAnJ1xyXG4gICAgICAgIHJldHVybiBvYmpcclxuICAgICAgfSxcclxuICAgICAge30gYXMgaUJhdGNoUmVxdWVzdFBhcmFtSHR0cFxyXG4gICAgKVxyXG4gICAgZm9yIChsZXQga2V5IGluIHBhcmFtKSB7XHJcbiAgICAgIGlmICh0eXBlb2Yga2V5ID09PSAnc3RyaW5nJyB8fCB0eXBlb2Yga2V5ID09PSAnbnVtYmVyJyAmJiBwYXJhbVtrZXldLnBhcmFtKSB7XHJcbiAgICAgICAgcmVzW2tleV0gPSBwYXJhbVtrZXldLm5hbWUgKyAnPycgKyBzdHJpbmdpZnlCaXRyaXhQYXJhbXMocGFyYW1ba2V5XS5wYXJhbSlcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc1xyXG4gIH1cclxuXHJcbiAgbWFwQnJhbmNoUmVzdWx0PFQ+KHJlczogaUJhdGNoUmVxdWVzdEFuc3dlcjxUPltdKSB7XHJcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihbXSwgLi4ucmVzLm1hcChpID0+XHJcbiAgICAgIChpbnN0YW5jZU9maUJYUmVzdEFuc3dlclN1Y2Nlc3MoaSkgJiYgaW5zdGFuY2VPZmlCWFJlc3RBbnN3ZXJTdWNjZXNzKGkucmVzdWx0KSkgPyBpLnJlc3VsdC5yZXN1bHQgOiB1bmRlZmluZWQpXHJcbiAgICApIGFzIFJlY29yZDxrZXlCYXRjaCwgVD5cclxuICB9XHJcblxyXG4gIG1hcEJyYW5jaFJlc3VsdFdpdGhvdXRLZXk8VD4ocmVzOiBpQmF0Y2hSZXF1ZXN0QW5zd2VyPFQ+W10pOiBUW10ge1xyXG4gICAgcmV0dXJuIGZsYXR0ZW48VD4oT2JqZWN0LmFzc2lnbihbXSwgLi4ucmVzLm1hcChpID0+XHJcbiAgICAgIChpbnN0YW5jZU9maUJYUmVzdEFuc3dlclN1Y2Nlc3MoaSkgJiYgaW5zdGFuY2VPZmlCWFJlc3RBbnN3ZXJTdWNjZXNzKGkucmVzdWx0KSlcclxuICAgICAgICA/IGkucmVzdWx0LnJlc3VsdFxyXG4gICAgICAgIDogdW5kZWZpbmVkKSlcclxuICAgIClcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqINCe0YHQvdC+0LLQvdC+0Lkg0LzQtdGC0L7QtCDQtNC70Y8g0LfQsNC/0YDQvtGB0L7QslxyXG4gICAqXHJcbiAgICogQHBhcmFtIG5hbWVcclxuICAgKiBAcGFyYW0gcGFyYW1zXHJcbiAgICogQHBhcmFtIHJlc3RBcGlcclxuICAgKiBAcGFyYW0gaGVhZGVycyDQt9Cw0LPQvtC70L7QstC60Lgg0YLQvtC70YzQutC+INC00LvRjyDRjdGC0L7Qs9C+INC30LDQv9GA0L7RgdCwLCDQv9C+0LLQtdGA0YUgYEJYUmVzdFNldHRpbmdzLmhlYWRlcnNgXHJcbiAgICovXHJcbiAgcG9zdDxUPihuYW1lOiBzdHJpbmdbXSwgcGFyYW1zOiBhbnkgPSB7fSwgcmVzdEFwaSA9IGZhbHNlLCBoZWFkZXJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPikge1xyXG4gICAgY29uc3QgbWV0aG9kID0gdGhpcy5nZXROYW1lTWV0aG9kKG5hbWUpXHJcbiAgICByZXR1cm4gdGhpcy5odHRwUG9zdDxpQlhSZXN0QW5zd2VyPFQ+PihyZXN0QXBpID8gYGFwaS8ke21ldGhvZH1gIDogbWV0aG9kLCBwYXJhbXMsIHVuZGVmaW5lZCwgaGVhZGVycylcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqINCS0YLQvtGA0L7RgdGC0LXQv9C10L3QvdGL0Lkg0LzQtdGC0L7QtCDQtNC70Y8g0LfQsNC/0YDQvtGB0L7Qsi4g0J/QviDQstC+0LfQvNC+0LbQvdC+0YHRgtC4INC70YPRh9GI0LUg0L3QtSDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0YxcclxuICAgKlxyXG4gICAqIEBwYXJhbSBuYW1lXHJcbiAgICogQHBhcmFtIHBhcmFtc1xyXG4gICAqIEBwYXJhbSBoZWFkZXJzINC30LDQs9C+0LvQvtCy0LrQuCDRgtC+0LvRjNC60L4g0LTQu9GPINGN0YLQvtCz0L4g0LfQsNC/0YDQvtGB0LAsINC/0L7QstC10YDRhSBgQlhSZXN0U2V0dGluZ3MuaGVhZGVyc2BcclxuICAgKi9cclxuICBnZXQ8VD4obmFtZTogc3RyaW5nW10sIHBhcmFtczogYW55ID0ge30sIGhlYWRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwR2V0PGlCWFJlc3RBbnN3ZXI8VD4+KHRoaXMuZ2V0TmFtZU1ldGhvZChuYW1lKSwgcGFyYW1zLCB1bmRlZmluZWQsIGhlYWRlcnMpXHJcbiAgfVxyXG5cclxuICAvLyBzZXR0aW5ncyDigJQg0YLQvtC70YzQutC+INC00LvRjyDRgdC+0LLQvNC10YHRgtC40LzQvtGB0YLQuCDRgdC40LPQvdCw0YLRg9GA0Ysg0YEgSHR0cFNlcnZpY2VzOiDQt9C00LXRgdGMINGC0LXQu9C+XHJcbiAgLy8g0YPRhdC+0LTQuNGCIEpTT04t0L7QvC91cmxlbmNvZGVkLCDQuCDQv9C10YDQtdGB0YfRkdGCINC00LDRgiDQuNC3IGlIdHRwUGFyYW1TZXR0aW5ncyDQvdC1INC90YPQttC10L0uXHJcbiAgb3ZlcnJpZGUgaHR0cFBvc3Q8VD4oXHJcbiAgICB1cmw6IHN0cmluZyxcclxuICAgIHBhcmFtczogYW55ID0ge30sXHJcbiAgICBzZXR0aW5ncz86IGlIdHRwUGFyYW1TZXR0aW5ncyxcclxuICAgIGhlYWRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XHJcbiAgKTogT2JzZXJ2YWJsZTxUIHwgdW5kZWZpbmVkPiB7XHJcbiAgICAvLyBkZWZlcigpINC+0YLQutC70LDQtNGL0LLQsNC10YIg0LLRgdGRINGB0L7QtNC10YDQttC40LzQvtC1ICjQsiDRgtC+0Lwg0YfQuNGB0LvQtSDRh9GC0LXQvdC40LUgQlhSZXN0U2V0dGluZ3NcclxuICAgIC8vINGH0LXRgNC10LcgdGhpcy5zZXNzaW9uLiopINC00L4g0YDQtdCw0LvRjNC90L7QuSDQv9C+0LTQv9C40YHQutC4IOKAlCDQuNC90LDRh9C1INC00LDQttC1INGBIFwi0LbQuNCy0YvQvFwiXHJcbiAgICAvLyDQs9C10YLRgtC10YDQvtC8INCyIFNlc3Npb25LZXlTZXJ2aWNlcyDQvdCw0YHRgtGA0L7QudC60Lgg0YfQuNGC0LDQu9C40YHRjCDQsdGLINCyINC80L7QvNC10L3RgiDQstGL0LfQvtCy0LBcclxuICAgIC8vIC5yZXMoKSwg0LAg0L3QtSDQsiDQvNC+0LzQtdC90YIgc3Vic2NyaWJlKCkvZmlyc3RWYWx1ZUZyb20oKSwg0YfRgtC+INC4INC+0LHQtdGJ0LDQvdC+XHJcbiAgICAvLyDQsiBSRUFETUUg0LrQsNC6INC/0L7QstC10LTQtdC90LjQtSBcItC70LXQvdC40LLQvtCz0L5cIiBSRVNULdCy0YvQt9C+0LLQsC5cclxuICAgIC8vXHJcbiAgICAvLyB3aXRoQXV0aFJlZnJlc2goKSDQv9C+0LLRgtC+0YDRj9C10YIg0LfQsNC/0YDQvtGBINC/0L7RgdC70LUgQlhSZXN0U2V0dGluZ3MuYXV0aC5yZWZyZXNoIOKAlFxyXG4gICAgLy8g0L/QvtCy0YLQvtGA0L3QvtC5INC/0L7QtNC/0LjRgdC60L7QuSDQvdCwINGN0YLQvtGCINC20LUgZGVmZXIoKSwg0L/QvtGN0YLQvtC80YMg0L/QvtCy0YLQvtGAINC30LDQvdC+0LLQviDRh9C40YLQsNC10YJcclxuICAgIC8vINGC0L7QutC10L0sINCw0LTRgNC10YEg0Lgg0LfQsNCz0L7Qu9C+0LLQutC4LiDQp9C10YDQtdC3IGh0dHBQb3N0L2h0dHBHZXQg0LjQtNGD0YIg0LLRgdC1INC30LDQv9GA0L7RgdGLXHJcbiAgICAvLyDQsdC40LHQu9C40L7RgtC10LrQuCAocG9zdC9nZXQsIGJhdGNoLCDQstGB0LUg0LLQuNC00YsgTmF2dnkt0LfQsNC/0YDQvtGB0L7QsiksINGC0LDQuiDRh9GC0L4g0L/QvtCy0YLQvtGAXHJcbiAgICAvLyDQstGB0YLRgNC+0LXQvSDRgtC+0LvRjNC60L4g0LfQtNC10YHRjC5cclxuICAgIHJldHVybiB3aXRoQXV0aFJlZnJlc2goZGVmZXIoKCkgPT4ge1xyXG4gICAgICBjb25zdCBwYXJhbXNDbG9uZSA9IGNsb25lKHBhcmFtcylcclxuICAgICAgY29uc3Qga2V5ID0gdGhpcy5zZXNzaW9uLmdldEtleUF1dGgoKVxyXG4gICAgICBjb25zdCBhdXRoID0gdGhpcy5zZXNzaW9uLmdldEF1dGhQYXJhbXMoKVxyXG4gICAgICBjb25zdCBjaGVja0lzT24gPSB0aGlzLnNlc3Npb24uZ2V0Q2hlY2tBdXRoUGFyYW1zSXNPbigpXHJcblxyXG4gICAgICBpZiAoY2hlY2tJc09uKSB7XHJcbiAgICAgICAgaWYgKCFhdXRoKSB7XHJcbiAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiB0aGlzLnNlc3Npb24uZ2V0QXV0aEVycm9yKCdwb3N0JykpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoa2V5ICE9PSAnT0F1dGgyJykge1xyXG4gICAgICAgICAgcGFyYW1zQ2xvbmVba2V5XSA9IGF1dGhcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB0aGlzLnNlc3Npb24uZ2V0QmFzZVVybCgpLnBpcGUoXHJcbiAgICAgICAgc3dpdGNoTWFwKChiYXNlVXJsKSA9PiB7XHJcbiAgICAgICAgICBpZiAoIWJhc2VVcmwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gdGhpcy5zZXNzaW9uLmdldEJhc2VVcmxFcnJvcigncG9zdCcpKVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGNvbnN0IGZ1bGxVcmwgPSBwcmVwYXJlQmFzZUFkZHJlc3MoYmFzZVVybCkgKyB1cmxcclxuXHJcbiAgICAgICAgICBpZiAoa2V5ID09PSAnc2Vzc2lkJykge1xyXG4gICAgICAgICAgICAvLyDQn9GA0LXQvtCx0YDQsNC30YPQtdC8INC/0LDRgNCw0LzQtdGC0YDRiyDQsiDRhNC+0YDQvNCw0YIgeC13d3ctZm9ybS11cmxlbmNvZGVkXHJcbiAgICAgICAgICAgIGNvbnN0IGJvZHlTdHJpbmcgPSB0aGlzLnNlcmlhbGl6ZUJpdHJpeFBhcmFtcyhwYXJhbXNDbG9uZSlcclxuICAgICAgICAgICAgcmV0dXJuIGZyb20oXHJcbiAgICAgICAgICAgICAgdGhpcy5heGlvc0luc3RhbmNlLnBvc3Q8VD4oZnVsbFVybCwgYm9keVN0cmluZywge1xyXG4gICAgICAgICAgICAgICAgaGVhZGVyczogdGhpcy5idWlsZEhlYWRlcnMoaGVhZGVycywgeydDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJ30pLFxyXG4gICAgICAgICAgICAgIH0pLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5kYXRhKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgcmV0dXJuIGZyb20oXHJcbiAgICAgICAgICAgIHRoaXMuYXhpb3NJbnN0YW5jZS5wb3N0PFQ+KGZ1bGxVcmwsIHBhcmFtc0Nsb25lLFxyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdGhpcy5zZXNzaW9uLmdldFdpdGhDcmVkZW50aWFscygpLFxyXG4gICAgICAgICAgICAgICAgaGVhZGVyczogdGhpcy5idWlsZEhlYWRlcnMoaGVhZGVycywgeydDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbid9KSxcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICkudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLmRhdGEpXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgfSlcclxuICAgICAgKVxyXG4gICAgfSkpXHJcbiAgfVxyXG5cclxuICBvdmVycmlkZSBodHRwR2V0PFQ+KFxyXG4gICAgdXJsOiBzdHJpbmcsXHJcbiAgICBwYXJhbXM6IGFueSA9IHt9LFxyXG4gICAgc2V0dGluZ3M/OiBpSHR0cFBhcmFtU2V0dGluZ3MsXHJcbiAgICBoZWFkZXJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPlxyXG4gICk6IE9ic2VydmFibGU8VCB8IHVuZGVmaW5lZD4ge1xyXG4gICAgLy8g0KLQsCDQttC1INC/0YDQuNGH0LjQvdCwLCDRh9GC0L4g0Lgg0YMgaHR0cFBvc3Qg0LLRi9GI0LU6INC+0YLQutC70LDQtNGL0LLQsNC10Lwg0YfRgtC10L3QuNC1IEJYUmVzdFNldHRpbmdzXHJcbiAgICAvLyDQtNC+INC/0L7QtNC/0LjRgdC60LgsINGH0YLQvtCx0YsgYGdldCgpYCDQstGR0Lsg0YHQtdCx0Y8g0YLQsNC6INC20LUgXCLQu9C10L3QuNCy0L5cIiwg0LrQsNC6INC4IGBwb3N0KClgXHJcbiAgICAvLyAo0YHQuNC80LzQtdGC0YDQuNGPLCDQutC+0YLQvtGA0L7QuSDQvdC1INCx0YvQu9C+INC00L4g0Y3RgtC+0LPQviDigJQgR0VUINGA0LXQt9C+0LvQstC40Lsg0L3QsNGB0YLRgNC+0LnQutC4INCyINC80L7QvNC10L3RglxyXG4gICAgLy8g0LLRi9C30L7QstCwLCDQsCDQvdC1INCyINC80L7QvNC10L3RgiBzdWJzY3JpYmUoKSkuINCf0L7QstGC0L7RgCDQv9C+0YHQu9C1INC/0YDQvtC00LvQtdC90LjRj1xyXG4gICAgLy8g0LDQstGC0L7RgNC40LfQsNGG0LjQuCDigJQg0LrQsNC6INCyIGh0dHBQb3N0LlxyXG4gICAgcmV0dXJuIHdpdGhBdXRoUmVmcmVzaChkZWZlcigoKSA9PiB7XHJcbiAgICAgIGNvbnN0IHBhcmFtc0Nsb25lID0gY2xvbmUocGFyYW1zKVxyXG4gICAgICBjb25zdCBhdXRoID0gdGhpcy5zZXNzaW9uLmdldEF1dGhQYXJhbXMoKVxyXG4gICAgICBjb25zdCBjaGVja0lzT24gPSB0aGlzLnNlc3Npb24uZ2V0Q2hlY2tBdXRoUGFyYW1zSXNPbigpXHJcblxyXG4gICAgICBpZiAoY2hlY2tJc09uKSB7XHJcbiAgICAgICAgaWYgKCFhdXRoKSB7XHJcbiAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiB0aGlzLnNlc3Npb24uZ2V0QXV0aEVycm9yKCdnZXQnKSlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHBhcmFtc0Nsb25lW3RoaXMuc2Vzc2lvbi5nZXRLZXlBdXRoKCldID0gYXV0aFxyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gdGhpcy5zZXNzaW9uLmdldEJhc2VVcmwoKS5waXBlKFxyXG4gICAgICAgIHN3aXRjaE1hcCgoYmFzZVVybCkgPT4ge1xyXG4gICAgICAgICAgaWYgKCFiYXNlVXJsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IHRoaXMuc2Vzc2lvbi5nZXRCYXNlVXJsRXJyb3IoJ2dldCcpKVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGNvbnN0IGZ1bGxVcmwgPSBwcmVwYXJlQmFzZUFkZHJlc3MoYmFzZVVybCkgKyB1cmxcclxuICAgICAgICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhwYXJhbXNDbG9uZSkudG9TdHJpbmcoKVxyXG4gICAgICAgICAgY29uc3QgZmluYWxVcmwgPSBgJHtmdWxsVXJsfT8ke3F1ZXJ5U3RyaW5nfWBcclxuXHJcbiAgICAgICAgICByZXR1cm4gZnJvbShcclxuICAgICAgICAgICAgdGhpcy5heGlvc0luc3RhbmNlLmdldDxUPihmaW5hbFVybCwge1xyXG4gICAgICAgICAgICAgIGhlYWRlcnM6IHRoaXMuYnVpbGRIZWFkZXJzKGhlYWRlcnMpLFxyXG4gICAgICAgICAgICB9KS50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuZGF0YSlcclxuICAgICAgICAgIClcclxuICAgICAgICB9KVxyXG4gICAgICApXHJcbiAgICB9KSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqINCX0LDQs9C+0LvQvtCy0LrQuCDQt9Cw0L/RgNC+0YHQsDogYEJYUmVzdFNldHRpbmdzLmhlYWRlcnNgLCDQv9C+0LLQtdGA0YUg0L3QuNGFIOKAlCDQt9Cw0LPQvtC70L7QstC60LhcclxuICAgKiDQutC+0L3QutGA0LXRgtC90L7Qs9C+INC30LDQv9GA0L7RgdCwLCDQv9C+0LLQtdGA0YUg0LLRgdC10LPQviDigJQgYHJlcXVpcmVkYC4g0JIgYHJlcXVpcmVkYCDQuNC00ZHRglxyXG4gICAqIGBDb250ZW50LVR5cGVgOiDQvtGCINC90LXQs9C+INC30LDQstC40YHQuNGCLCDQutCw0Log0YHQtdGA0LLQtdGAINGA0LDQt9Cx0LXRgNGR0YIg0YLQtdC70L4sINC/0L7RjdGC0L7QvNGDXHJcbiAgICog0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GM0YHQutC40LUg0LfQsNCz0L7Qu9C+0LLQutC4INC10LPQviDQvdC1INC/0LXRgNC10LHQuNCy0LDRjtGCLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgYnVpbGRIZWFkZXJzKGhlYWRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LCByZXF1aXJlZDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9KSB7XHJcbiAgICByZXR1cm4geyAuLi50aGlzLnNlc3Npb24uZ2V0SGVhZGVycygpLCAuLi5oZWFkZXJzLCAuLi5yZXF1aXJlZCB9XHJcbiAgfVxyXG5cclxuICBzZXJpYWxpemVCaXRyaXhQYXJhbXMocGFyYW1zOiB1bmtub3duKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBzdHJpbmdpZnlCaXRyaXhQYXJhbXMocGFyYW1zKVxyXG4gIH1cclxuXHJcbiAgZ2V0TmFtZU1ldGhvZChhcnI6IHN0cmluZ1tdKSB7XHJcbiAgICByZXR1cm4gYXJyLmpvaW4oJy4nKVxyXG4gIH1cclxuXHJcbn1cclxuXHJcbiJdfQ==
|
|
170
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSHR0cEJYLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYngtcmVzdC9zcmMvc2VydmljZXMvaHR0cC9IdHRwQlgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFjLFVBQVUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUNwRSxPQUFPLEtBQUssTUFBTSxZQUFZLENBQUE7QUFDOUIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFFBQVEsQ0FBQTtBQUtyQyxPQUFPLE9BQU8sTUFBTSxpQkFBaUIsQ0FBQTtBQUNyQyxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQTtBQUMxRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFDMUMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sU0FBUyxDQUFBO0FBQzVDLE9BQU8sRUFBRSxxQkFBcUIsSUFBSSxxQkFBcUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFBO0FBRXRHLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFFL0MsTUFBTSxPQUFPLGNBQWUsU0FBUSxZQUFZO0lBRTlDOzs7O09BSUc7SUFDSCxNQUFNLENBQU8sS0FBeUQ7UUFFcEUsSUFBSSxZQUFZLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBUyxJQUFJLENBQUMsWUFBWSxDQUFJLEtBQUssQ0FBQyxDQUFDLENBQUE7UUFDdEUsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFBLENBQUMsbUJBQW1CO1FBQ25DLElBQUksUUFBUSxHQUFHLEVBQUUsQ0FBQSxDQUFDLDJDQUEyQztRQUM3RCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENB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QixDQUFDO0NBRUYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlLCB0aHJvd0Vycm9yLCBmb3JrSm9pbiwgZnJvbSwgZGVmZXIgfSBmcm9tICdyeGpzJ1xyXG5pbXBvcnQgY2xvbmUgZnJvbSAnanVzdC1jbG9uZSdcclxuaW1wb3J0IHsgSHR0cFNlcnZpY2VzIH0gZnJvbSAnLi9odHRwJ1xyXG5pbXBvcnQge1xyXG4gIGlCYXRjaFJlcXVlc3RBbnN3ZXIsIGlCYXRjaFJlcXVlc3RQYXJhbSwgaUJhdGNoUmVxdWVzdFBhcmFtQXJyLCBpQmF0Y2hSZXF1ZXN0UGFyYW1IdHRwLCBrZXlCYXRjaCxcclxufSBmcm9tICcuLi8uLi90eXBpZmljYXRpb24vcmVzdC9iYXRjaC9iYXRjaFJlcXVlc3RQYXJhbSdcclxuaW1wb3J0IHsgaUJYUmVzdEFuc3dlciB9IGZyb20gJy4uLy4uL3R5cGlmaWNhdGlvbi9yZXN0L2Jhc2UvYW5zd2VyJ1xyXG5pbXBvcnQgZmxhdHRlbiBmcm9tICdqdXN0LWZsYXR0ZW4taXQnXHJcbmltcG9ydCB7IGluc3RhbmNlT2ZpQlhSZXN0QW5zd2VyU3VjY2VzcyB9IGZyb20gJy4uLy4uL2Z1bmN0aW9ucy9tYXBSZXN1bHQnXHJcbmltcG9ydCB7IHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJ1xyXG5pbXBvcnQgeyBwcmVwYXJlQmFzZUFkZHJlc3MgfSBmcm9tICcuLi9iYXNlJ1xyXG5pbXBvcnQgeyBzZXJpYWxpemVCaXRyaXhQYXJhbXMgYXMgc3RyaW5naWZ5Qml0cml4UGFyYW1zIH0gZnJvbSAnLi4vLi4vZnVuY3Rpb25zL3NlcmlhbGl6ZUJpdHJpeFBhcmFtcydcclxuaW1wb3J0IHsgaUh0dHBQYXJhbVNldHRpbmdzIH0gZnJvbSAnLi4vLi4vdHlwaWZpY2F0aW9uL3Jlc3Qvc2V0dGluZ3MnXHJcbmltcG9ydCB7IHdpdGhBdXRoUmVmcmVzaCB9IGZyb20gJy4vYXV0aFJlZnJlc2gnXHJcblxyXG5leHBvcnQgY2xhc3MgSHR0cEJYU2VydmljZXMgZXh0ZW5kcyBIdHRwU2VydmljZXMge1xyXG5cclxuICAvKipcclxuICAgKiDQndC1INGB0YfQuNGC0LDQudGC0LUg0Y3RgtC+0YIg0LzQtdGC0L7QtCDQvtCx0YDQsNC30YbQvtC8L9GE0LjQvdCw0LvRjNC90YvQvCBBUEkuXHJcbiAgICogVE9ETzog0KPQtNCw0LvQuNGC0Ywg0LTQsNC90L3Ri9C5INC80LXRgtC+0LQg0L/QvtGB0LvQtSDRgNC10LDQu9C40LfQsNGG0LjQuCDQtdCz0L4g0LIg0YDQsNC30LTQtdC70LUgTmF2dnlcclxuICAgKiBAcGFyYW0gcGFyYW1cclxuICAgKi9cclxuICBicmFuY2g8VCwgQT4ocGFyYW06IGlCYXRjaFJlcXVlc3RQYXJhbUFycjxUPiB8IGlCYXRjaFJlcXVlc3RQYXJhbTxUPltdKVxyXG4gICAgOiBPYnNlcnZhYmxlPGlCYXRjaFJlcXVlc3RBbnN3ZXI8QT5bXSB8IHVuZGVmaW5lZD4ge1xyXG4gICAgbGV0IHByZXBhcmVQYXJhbSA9IE9iamVjdC5lbnRyaWVzPHN0cmluZz4odGhpcy5wcmVwYXJlQmF0Y2g8VD4ocGFyYW0pKVxyXG4gICAgY29uc3Qgc2l6ZSA9IDUwIC8vINCx0L7Qu9GM0YjQtSDQvdC1INC+0YLQtNCw0YHRglxyXG4gICAgbGV0IHN1YmFycmF5ID0gW10gLy/QvNCw0YHRgdC40LIg0LIg0LrQvtGC0L7RgNGL0Lkg0LHRg9C00LXRgiDQstGL0LLQtdC00LXQvSDRgNC10LfRg9C70YzRgtCw0YIuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IE1hdGguY2VpbChwcmVwYXJlUGFyYW0ubGVuZ3RoIC8gc2l6ZSk7IGkrKykge1xyXG4gICAgICBzdWJhcnJheVtpXSA9IHByZXBhcmVQYXJhbS5zbGljZSgoaSAqIHNpemUpLCAoaSAqIHNpemUpICsgc2l6ZSlcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZm9ya0pvaW4oXHJcbiAgICAgIHN1YmFycmF5Lm1hcChpID0+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwUG9zdCgnYmF0Y2guanNvbicsIHtcclxuICAgICAgICAgIGhhbHQ6IDAsXHJcbiAgICAgICAgICBjbWQ6IE9iamVjdC5hc3NpZ24oe30sIC4uLmkubWFwKHggPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4ge1t4WzBdXTogeFsxXX1cclxuICAgICAgICAgIH0pKVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH0pXHJcbiAgICApIGFzIE9ic2VydmFibGU8aUJhdGNoUmVxdWVzdEFuc3dlcjxBPltdPlxyXG4gIH1cclxuXHJcbiAgcHJlcGFyZUJhdGNoPFQ+KHBhcmFtOiBpQmF0Y2hSZXF1ZXN0UGFyYW1BcnI8VD4gfCBpQmF0Y2hSZXF1ZXN0UGFyYW08VD5bXSk6IGlCYXRjaFJlcXVlc3RQYXJhbUh0dHAge1xyXG4gICAgbGV0IHJlczogaUJhdGNoUmVxdWVzdFBhcmFtSHR0cCA9IE9iamVjdC5rZXlzKHBhcmFtKS5yZWR1Y2UoXHJcbiAgICAgIChvYmosIGtleSkgPT4ge1xyXG4gICAgICAgIG9ialtrZXldID0gJydcclxuICAgICAgICByZXR1cm4gb2JqXHJcbiAgICAgIH0sXHJcbiAgICAgIHt9IGFzIGlCYXRjaFJlcXVlc3RQYXJhbUh0dHBcclxuICAgIClcclxuICAgIGZvciAobGV0IGtleSBpbiBwYXJhbSkge1xyXG4gICAgICBpZiAodHlwZW9mIGtleSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIGtleSA9PT0gJ251bWJlcicgJiYgcGFyYW1ba2V5XS5wYXJhbSkge1xyXG4gICAgICAgIHJlc1trZXldID0gcGFyYW1ba2V5XS5uYW1lICsgJz8nICsgc3RyaW5naWZ5Qml0cml4UGFyYW1zKHBhcmFtW2tleV0ucGFyYW0pXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiByZXNcclxuICB9XHJcblxyXG4gIG1hcEJyYW5jaFJlc3VsdDxUPihyZXM6IGlCYXRjaFJlcXVlc3RBbnN3ZXI8VD5bXSkge1xyXG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oW10sIC4uLnJlcy5tYXAoaSA9PlxyXG4gICAgICAoaW5zdGFuY2VPZmlCWFJlc3RBbnN3ZXJTdWNjZXNzKGkpICYmIGluc3RhbmNlT2ZpQlhSZXN0QW5zd2VyU3VjY2VzcyhpLnJlc3VsdCkpID8gaS5yZXN1bHQucmVzdWx0IDogdW5kZWZpbmVkKVxyXG4gICAgKSBhcyBSZWNvcmQ8a2V5QmF0Y2gsIFQ+XHJcbiAgfVxyXG5cclxuICBtYXBCcmFuY2hSZXN1bHRXaXRob3V0S2V5PFQ+KHJlczogaUJhdGNoUmVxdWVzdEFuc3dlcjxUPltdKTogVFtdIHtcclxuICAgIHJldHVybiBmbGF0dGVuPFQ+KE9iamVjdC5hc3NpZ24oW10sIC4uLnJlcy5tYXAoaSA9PlxyXG4gICAgICAoaW5zdGFuY2VPZmlCWFJlc3RBbnN3ZXJTdWNjZXNzKGkpICYmIGluc3RhbmNlT2ZpQlhSZXN0QW5zd2VyU3VjY2VzcyhpLnJlc3VsdCkpXHJcbiAgICAgICAgPyBpLnJlc3VsdC5yZXN1bHRcclxuICAgICAgICA6IHVuZGVmaW5lZCkpXHJcbiAgICApXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDQntGB0L3QvtCy0L3QvtC5INC80LXRgtC+0LQg0LTQu9GPINC30LDQv9GA0L7RgdC+0LJcclxuICAgKlxyXG4gICAqIEBwYXJhbSBuYW1lXHJcbiAgICogQHBhcmFtIHBhcmFtc1xyXG4gICAqIEBwYXJhbSByZXN0QXBpXHJcbiAgICogQHBhcmFtIGhlYWRlcnMg0LfQsNCz0L7Qu9C+0LLQutC4INGC0L7Qu9GM0LrQviDQtNC70Y8g0Y3RgtC+0LPQviDQt9Cw0L/RgNC+0YHQsCwg0L/QvtCy0LXRgNGFIGBCWFJlc3RTZXR0aW5ncy5oZWFkZXJzYFxyXG4gICAqL1xyXG4gIHBvc3Q8VD4obmFtZTogc3RyaW5nW10sIHBhcmFtczogYW55ID0ge30sIHJlc3RBcGkgPSBmYWxzZSwgaGVhZGVycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pIHtcclxuICAgIGNvbnN0IG1ldGhvZCA9IHRoaXMuZ2V0TmFtZU1ldGhvZChuYW1lKVxyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFBvc3Q8aUJYUmVzdEFuc3dlcjxUPj4ocmVzdEFwaSA/IGBhcGkvJHttZXRob2R9YCA6IG1ldGhvZCwgcGFyYW1zLCB1bmRlZmluZWQsIGhlYWRlcnMpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDQktGC0L7RgNC+0YHRgtC10L/QtdC90L3Ri9C5INC80LXRgtC+0LQg0LTQu9GPINC30LDQv9GA0L7RgdC+0LIuINCf0L4g0LLQvtC30LzQvtC20L3QvtGB0YLQuCDQu9GD0YfRiNC1INC90LUg0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMXHJcbiAgICpcclxuICAgKiBAcGFyYW0gbmFtZVxyXG4gICAqIEBwYXJhbSBwYXJhbXNcclxuICAgKiBAcGFyYW0gaGVhZGVycyDQt9Cw0LPQvtC70L7QstC60Lgg0YLQvtC70YzQutC+INC00LvRjyDRjdGC0L7Qs9C+INC30LDQv9GA0L7RgdCwLCDQv9C+0LLQtdGA0YUgYEJYUmVzdFNldHRpbmdzLmhlYWRlcnNgXHJcbiAgICovXHJcbiAgZ2V0PFQ+KG5hbWU6IHN0cmluZ1tdLCBwYXJhbXM6IGFueSA9IHt9LCBoZWFkZXJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPikge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cEdldDxpQlhSZXN0QW5zd2VyPFQ+Pih0aGlzLmdldE5hbWVNZXRob2QobmFtZSksIHBhcmFtcywgdW5kZWZpbmVkLCBoZWFkZXJzKVxyXG4gIH1cclxuXHJcbiAgLy8gc2V0dGluZ3Mg4oCUINGC0L7Qu9GM0LrQviDQtNC70Y8g0YHQvtCy0LzQtdGB0YLQuNC80L7RgdGC0Lgg0YHQuNCz0L3QsNGC0YPRgNGLINGBIEh0dHBTZXJ2aWNlczog0LfQtNC10YHRjCDRgtC10LvQvlxyXG4gIC8vINGD0YXQvtC00LjRgiBKU09OLdC+0LwvdXJsZW5jb2RlZCwg0Lgg0L/QtdGA0LXRgdGH0ZHRgiDQtNCw0YIg0LjQtyBpSHR0cFBhcmFtU2V0dGluZ3Mg0L3QtSDQvdGD0LbQtdC9LlxyXG4gIG92ZXJyaWRlIGh0dHBQb3N0PFQ+KFxyXG4gICAgdXJsOiBzdHJpbmcsXHJcbiAgICBwYXJhbXM6IGFueSA9IHt9LFxyXG4gICAgc2V0dGluZ3M/OiBpSHR0cFBhcmFtU2V0dGluZ3MsXHJcbiAgICBoZWFkZXJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPlxyXG4gICk6IE9ic2VydmFibGU8VCB8IHVuZGVmaW5lZD4ge1xyXG4gICAgLy8gZGVmZXIoKSDQvtGC0LrQu9Cw0LTRi9Cy0LDQtdGCINCy0YHRkSDRgdC+0LTQtdGA0LbQuNC80L7QtSAo0LIg0YLQvtC8INGH0LjRgdC70LUg0YfRgtC10L3QuNC1IEJYUmVzdFNldHRpbmdzXHJcbiAgICAvLyDRh9C10YDQtdC3IHRoaXMuc2Vzc2lvbi4qKSDQtNC+INGA0LXQsNC70YzQvdC+0Lkg0L/QvtC00L/QuNGB0LrQuCDigJQg0LjQvdCw0YfQtSDQtNCw0LbQtSDRgSBcItC20LjQstGL0LxcIlxyXG4gICAgLy8g0LPQtdGC0YLQtdGA0L7QvCDQsiBTZXNzaW9uS2V5U2VydmljZXMg0L3QsNGB0YLRgNC+0LnQutC4INGH0LjRgtCw0LvQuNGB0Ywg0LHRiyDQsiDQvNC+0LzQtdC90YIg0LLRi9C30L7QstCwXHJcbiAgICAvLyAucmVzKCksINCwINC90LUg0LIg0LzQvtC80LXQvdGCIHN1YnNjcmliZSgpL2ZpcnN0VmFsdWVGcm9tKCksINGH0YLQviDQuCDQvtCx0LXRidCw0L3QvlxyXG4gICAgLy8g0LIgUkVBRE1FINC60LDQuiDQv9C+0LLQtdC00LXQvdC40LUgXCLQu9C10L3QuNCy0L7Qs9C+XCIgUkVTVC3QstGL0LfQvtCy0LAuXHJcbiAgICAvL1xyXG4gICAgLy8gd2l0aEF1dGhSZWZyZXNoKCkg0L/QvtCy0YLQvtGA0Y/QtdGCINC30LDQv9GA0L7RgSDQv9C+0YHQu9C1IEJYUmVzdFNldHRpbmdzLmF1dGgucmVmcmVzaCDigJRcclxuICAgIC8vINC/0L7QstGC0L7RgNC90L7QuSDQv9C+0LTQv9C40YHQutC+0Lkg0L3QsCDRjdGC0L7RgiDQttC1IGRlZmVyKCksINC/0L7RjdGC0L7QvNGDINC/0L7QstGC0L7RgCDQt9Cw0L3QvtCy0L4g0YfQuNGC0LDQtdGCXHJcbiAgICAvLyDRgtC+0LrQtdC9LCDQsNC00YDQtdGBINC4INC30LDQs9C+0LvQvtCy0LrQuC4g0KfQtdGA0LXQtyBodHRwUG9zdC9odHRwR2V0INC40LTRg9GCINCy0YHQtSDQt9Cw0L/RgNC+0YHRi1xyXG4gICAgLy8g0LHQuNCx0LvQuNC+0YLQtdC60LggKHBvc3QvZ2V0LCBiYXRjaCwg0LLRgdC1INCy0LjQtNGLIE5hdnZ5LdC30LDQv9GA0L7RgdC+0LIpLCDRgtCw0Log0YfRgtC+INC/0L7QstGC0L7RgFxyXG4gICAgLy8g0LLRgdGC0YDQvtC10L0g0YLQvtC70YzQutC+INC30LTQtdGB0YwuXHJcbiAgICByZXR1cm4gd2l0aEF1dGhSZWZyZXNoKGRlZmVyKCgpID0+IHtcclxuICAgICAgY29uc3QgcGFyYW1zQ2xvbmUgPSBjbG9uZShwYXJhbXMpXHJcbiAgICAgIGNvbnN0IGtleSA9IHRoaXMuc2Vzc2lvbi5nZXRLZXlBdXRoKClcclxuICAgICAgY29uc3QgYXV0aCA9IHRoaXMuc2Vzc2lvbi5nZXRBdXRoUGFyYW1zKClcclxuICAgICAgY29uc3QgY2hlY2tJc09uID0gdGhpcy5zZXNzaW9uLmdldENoZWNrQXV0aFBhcmFtc0lzT24oKVxyXG5cclxuICAgICAgaWYgKGNoZWNrSXNPbikge1xyXG4gICAgICAgIGlmICghYXV0aCkge1xyXG4gICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gdGhpcy5zZXNzaW9uLmdldEF1dGhFcnJvcigncG9zdCcpKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGtleSAhPT0gJ09BdXRoMicpIHtcclxuICAgICAgICAgIHBhcmFtc0Nsb25lW2tleV0gPSBhdXRoXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gdGhpcy5zZXNzaW9uLmdldEJhc2VVcmwoKS5waXBlKFxyXG4gICAgICAgIHN3aXRjaE1hcCgoYmFzZVVybCkgPT4ge1xyXG4gICAgICAgICAgaWYgKCFiYXNlVXJsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IHRoaXMuc2Vzc2lvbi5nZXRCYXNlVXJsRXJyb3IoJ3Bvc3QnKSlcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBjb25zdCBmdWxsVXJsID0gcHJlcGFyZUJhc2VBZGRyZXNzKGJhc2VVcmwpICsgdXJsXHJcblxyXG4gICAgICAgICAgaWYgKGtleSA9PT0gJ3Nlc3NpZCcpIHtcclxuICAgICAgICAgICAgLy8g0J/RgNC10L7QsdGA0LDQt9GD0LXQvCDQv9Cw0YDQsNC80LXRgtGA0Ysg0LIg0YTQvtGA0LzQsNGCIHgtd3d3LWZvcm0tdXJsZW5jb2RlZFxyXG4gICAgICAgICAgICBjb25zdCBib2R5U3RyaW5nID0gdGhpcy5zZXJpYWxpemVCaXRyaXhQYXJhbXMocGFyYW1zQ2xvbmUpXHJcbiAgICAgICAgICAgIHJldHVybiBmcm9tKFxyXG4gICAgICAgICAgICAgIHRoaXMuYXhpb3NJbnN0YW5jZS5wb3N0PFQ+KGZ1bGxVcmwsIGJvZHlTdHJpbmcsIHtcclxuICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdGhpcy5zZXNzaW9uLmdldFdpdGhDcmVkZW50aWFscygpLFxyXG4gICAgICAgICAgICAgICAgaGVhZGVyczogdGhpcy5idWlsZEhlYWRlcnMoaGVhZGVycywgeydDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJ30pLFxyXG4gICAgICAgICAgICAgIH0pLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5kYXRhKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgcmV0dXJuIGZyb20oXHJcbiAgICAgICAgICAgIHRoaXMuYXhpb3NJbnN0YW5jZS5wb3N0PFQ+KGZ1bGxVcmwsIHBhcmFtc0Nsb25lLFxyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdGhpcy5zZXNzaW9uLmdldFdpdGhDcmVkZW50aWFscygpLFxyXG4gICAgICAgICAgICAgICAgaGVhZGVyczogdGhpcy5idWlsZEhlYWRlcnMoaGVhZGVycywgeydDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbid9KSxcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICkudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLmRhdGEpXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgfSlcclxuICAgICAgKVxyXG4gICAgfSkpXHJcbiAgfVxyXG5cclxuICBvdmVycmlkZSBodHRwR2V0PFQ+KFxyXG4gICAgdXJsOiBzdHJpbmcsXHJcbiAgICBwYXJhbXM6IGFueSA9IHt9LFxyXG4gICAgc2V0dGluZ3M/OiBpSHR0cFBhcmFtU2V0dGluZ3MsXHJcbiAgICBoZWFkZXJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPlxyXG4gICk6IE9ic2VydmFibGU8VCB8IHVuZGVmaW5lZD4ge1xyXG4gICAgLy8g0KLQsCDQttC1INC/0YDQuNGH0LjQvdCwLCDRh9GC0L4g0Lgg0YMgaHR0cFBvc3Qg0LLRi9GI0LU6INC+0YLQutC70LDQtNGL0LLQsNC10Lwg0YfRgtC10L3QuNC1IEJYUmVzdFNldHRpbmdzXHJcbiAgICAvLyDQtNC+INC/0L7QtNC/0LjRgdC60LgsINGH0YLQvtCx0YsgYGdldCgpYCDQstGR0Lsg0YHQtdCx0Y8g0YLQsNC6INC20LUgXCLQu9C10L3QuNCy0L5cIiwg0LrQsNC6INC4IGBwb3N0KClgXHJcbiAgICAvLyAo0YHQuNC80LzQtdGC0YDQuNGPLCDQutC+0YLQvtGA0L7QuSDQvdC1INCx0YvQu9C+INC00L4g0Y3RgtC+0LPQviDigJQgR0VUINGA0LXQt9C+0LvQstC40Lsg0L3QsNGB0YLRgNC+0LnQutC4INCyINC80L7QvNC10L3RglxyXG4gICAgLy8g0LLRi9C30L7QstCwLCDQsCDQvdC1INCyINC80L7QvNC10L3RgiBzdWJzY3JpYmUoKSkuINCf0L7QstGC0L7RgCDQv9C+0YHQu9C1INC/0YDQvtC00LvQtdC90LjRj1xyXG4gICAgLy8g0LDQstGC0L7RgNC40LfQsNGG0LjQuCDigJQg0LrQsNC6INCyIGh0dHBQb3N0LlxyXG4gICAgcmV0dXJuIHdpdGhBdXRoUmVmcmVzaChkZWZlcigoKSA9PiB7XHJcbiAgICAgIGNvbnN0IHBhcmFtc0Nsb25lID0gY2xvbmUocGFyYW1zKVxyXG4gICAgICBjb25zdCBrZXkgPSB0aGlzLnNlc3Npb24uZ2V0S2V5QXV0aCgpXHJcbiAgICAgIGNvbnN0IGF1dGggPSB0aGlzLnNlc3Npb24uZ2V0QXV0aFBhcmFtcygpXHJcbiAgICAgIGNvbnN0IGNoZWNrSXNPbiA9IHRoaXMuc2Vzc2lvbi5nZXRDaGVja0F1dGhQYXJhbXNJc09uKClcclxuXHJcbiAgICAgIGlmIChjaGVja0lzT24pIHtcclxuICAgICAgICBpZiAoIWF1dGgpIHtcclxuICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IHRoaXMuc2Vzc2lvbi5nZXRBdXRoRXJyb3IoJ2dldCcpKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGtleSAhPT0gJ09BdXRoMicpIHtcclxuICAgICAgICAgIHBhcmFtc0Nsb25lW2tleV0gPSBhdXRoXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gdGhpcy5zZXNzaW9uLmdldEJhc2VVcmwoKS5waXBlKFxyXG4gICAgICAgIHN3aXRjaE1hcCgoYmFzZVVybCkgPT4ge1xyXG4gICAgICAgICAgaWYgKCFiYXNlVXJsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IHRoaXMuc2Vzc2lvbi5nZXRCYXNlVXJsRXJyb3IoJ2dldCcpKVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGNvbnN0IGZ1bGxVcmwgPSBwcmVwYXJlQmFzZUFkZHJlc3MoYmFzZVVybCkgKyB1cmxcclxuICAgICAgICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gdGhpcy5zZXJpYWxpemVCaXRyaXhQYXJhbXMocGFyYW1zQ2xvbmUpXHJcbiAgICAgICAgICBjb25zdCBmaW5hbFVybCA9IGAke2Z1bGxVcmx9PyR7cXVlcnlTdHJpbmd9YFxyXG5cclxuICAgICAgICAgIHJldHVybiBmcm9tKFxyXG4gICAgICAgICAgICB0aGlzLmF4aW9zSW5zdGFuY2UuZ2V0PFQ+KGZpbmFsVXJsLCB7XHJcbiAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0aGlzLnNlc3Npb24uZ2V0V2l0aENyZWRlbnRpYWxzKCksXHJcbiAgICAgICAgICAgICAgaGVhZGVyczogdGhpcy5idWlsZEhlYWRlcnMoaGVhZGVycyksXHJcbiAgICAgICAgICAgIH0pLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5kYXRhKVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIH0pXHJcbiAgICAgIClcclxuICAgIH0pKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog0JfQsNCz0L7Qu9C+0LLQutC4INC30LDQv9GA0L7RgdCwOiBgQlhSZXN0U2V0dGluZ3MuaGVhZGVyc2AsINC/0L7QstC10YDRhSDQvdC40YUg4oCUINC30LDQs9C+0LvQvtCy0LrQuFxyXG4gICAqINC60L7QvdC60YDQtdGC0L3QvtCz0L4g0LfQsNC/0YDQvtGB0LAsINC/0L7QstC10YDRhSDQstGB0LXQs9C+IOKAlCBgcmVxdWlyZWRgLiDQkiBgcmVxdWlyZWRgINC40LTRkdGCXHJcbiAgICogYENvbnRlbnQtVHlwZWA6INC+0YIg0L3QtdCz0L4g0LfQsNCy0LjRgdC40YIsINC60LDQuiDRgdC10YDQstC10YAg0YDQsNC30LHQtdGA0ZHRgiDRgtC10LvQviwg0L/QvtGN0YLQvtC80YNcclxuICAgKiDQv9C+0LvRjNC30L7QstCw0YLQtdC70YzRgdC60LjQtSDQt9Cw0LPQvtC70L7QstC60Lgg0LXQs9C+INC90LUg0L/QtdGA0LXQsdC40LLQsNGO0YIuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBidWlsZEhlYWRlcnMoaGVhZGVycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sIHJlcXVpcmVkOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge30pIHtcclxuICAgIHJldHVybiB7IC4uLnRoaXMuc2Vzc2lvbi5nZXRIZWFkZXJzKCksIC4uLmhlYWRlcnMsIC4uLnJlcXVpcmVkIH1cclxuICB9XHJcblxyXG4gIHNlcmlhbGl6ZUJpdHJpeFBhcmFtcyhwYXJhbXM6IHVua25vd24pOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHN0cmluZ2lmeUJpdHJpeFBhcmFtcyhwYXJhbXMpXHJcbiAgfVxyXG5cclxuICBnZXROYW1lTWV0aG9kKGFycjogc3RyaW5nW10pIHtcclxuICAgIHJldHVybiBhcnIuam9pbignLicpXHJcbiAgfVxyXG5cclxufVxyXG5cclxuIl19
|
|
@@ -1,7 +1,23 @@
|
|
|
1
|
+
import { concatMap, from, toArray } from 'rxjs';
|
|
1
2
|
import { catchError, map } from 'rxjs/operators';
|
|
3
|
+
import clone from 'just-clone';
|
|
2
4
|
import { BXRestMapResult, instanceOfiBXRestAnswerSuccess } from '../../../functions/mapResult';
|
|
3
5
|
import { HttpBXServices } from '../../http/HttpBX';
|
|
4
6
|
import { BXRestApiError, bxRestApiErrorFromHttp, getAuthRefreshError, parseBXRestErrorBody, } from '../../../functions/errors';
|
|
7
|
+
import { serializeBitrixParams } from '../../../functions/serializeBitrixParams';
|
|
8
|
+
/** Больше команд в одном запросе `batch` Bitrix не принимает. */
|
|
9
|
+
const BATCH_COMMANDS_LIMIT = 50;
|
|
10
|
+
/**
|
|
11
|
+
* Параметры остальных страниц для методов с постраничной навигацией через `start`.
|
|
12
|
+
* Отсчёт идёт от `start` самого запроса: первая страница уже получена именно с него.
|
|
13
|
+
*/
|
|
14
|
+
export function offsetPageParams(param, total, pageSize) {
|
|
15
|
+
const pages = [];
|
|
16
|
+
for (let start = (Number(param?.start) || 0) + pageSize; start < (total ?? 0); start += pageSize) {
|
|
17
|
+
pages.push({ ...clone(param), start });
|
|
18
|
+
}
|
|
19
|
+
return pages;
|
|
20
|
+
}
|
|
5
21
|
export class NavvyPagBase {
|
|
6
22
|
constructor(url, param, map = undefined, restApi = false) {
|
|
7
23
|
this.url = url;
|
|
@@ -45,14 +61,7 @@ export class NavvyPagBase {
|
|
|
45
61
|
}
|
|
46
62
|
mapAndError(request, options) {
|
|
47
63
|
const method = this.http.getNameMethod(this.url);
|
|
48
|
-
return request.pipe(
|
|
49
|
-
if (options?.throwOnApiError && v && !instanceOfiBXRestAnswerSuccess(v)) {
|
|
50
|
-
const parsed = parseBXRestErrorBody(v);
|
|
51
|
-
throw new BXRestApiError(parsed ? parsed.error : v.error, parsed ? parsed.error_description : v.error_description, { method });
|
|
52
|
-
}
|
|
53
|
-
return BXRestMapResult(v);
|
|
54
|
-
}), catchError((err) => {
|
|
55
|
-
console.error(err);
|
|
64
|
+
return request.pipe(catchError((err) => {
|
|
56
65
|
if (err instanceof BXRestApiError) {
|
|
57
66
|
throw err;
|
|
58
67
|
}
|
|
@@ -72,7 +81,67 @@ export class NavvyPagBase {
|
|
|
72
81
|
Object.assign(error, { authRefreshError });
|
|
73
82
|
}
|
|
74
83
|
throw error;
|
|
84
|
+
}), map(v => {
|
|
85
|
+
if (v && typeof v !== 'object') {
|
|
86
|
+
throw this.notRestAnswerError();
|
|
87
|
+
}
|
|
88
|
+
if (options?.throwOnApiError && v && !instanceOfiBXRestAnswerSuccess(v)) {
|
|
89
|
+
throw this.apiErrorFromBody(v);
|
|
90
|
+
}
|
|
91
|
+
return BXRestMapResult(v);
|
|
75
92
|
}));
|
|
76
93
|
}
|
|
94
|
+
/**
|
|
95
|
+
* Первая страница для `.resAll()`. Ошибка Bitrix в теле ответа 2xx становится `BXRestApiError`:
|
|
96
|
+
* страниц в таком ответе нет, и без этого `.resAll()` завершился бы безликим `EmptyError`.
|
|
97
|
+
*/
|
|
98
|
+
resFirstPage() {
|
|
99
|
+
return this.resVanilla().pipe(map(v => {
|
|
100
|
+
if (!v || typeof v !== 'object') {
|
|
101
|
+
throw this.notRestAnswerError();
|
|
102
|
+
}
|
|
103
|
+
if (!instanceOfiBXRestAnswerSuccess(v)) {
|
|
104
|
+
throw this.apiErrorFromBody(v);
|
|
105
|
+
}
|
|
106
|
+
return v;
|
|
107
|
+
}));
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Остальные страницы для `.resAll()`, в порядке `params`. Команды уходят через `batch`,
|
|
111
|
+
* пакеты — по очереди. Ошибка любой страницы завершает весь запрос: неполный список
|
|
112
|
+
* выглядел бы для вызывающего кода как полный.
|
|
113
|
+
*/
|
|
114
|
+
resPages(params) {
|
|
115
|
+
const method = this.http.getNameMethod(this.url);
|
|
116
|
+
const commands = params.map(param => method + '?' + serializeBitrixParams(param));
|
|
117
|
+
const batches = [];
|
|
118
|
+
for (let i = 0; i < commands.length; i += BATCH_COMMANDS_LIMIT) {
|
|
119
|
+
batches.push(commands.slice(i, i + BATCH_COMMANDS_LIMIT));
|
|
120
|
+
}
|
|
121
|
+
return from(batches).pipe(concatMap(cmd => this.http.post(['batch'], { halt: 1, cmd }, false, this.requestHeaders)), map(answer => this.batchPages(answer)), toArray(), map(pages => pages.flat()));
|
|
122
|
+
}
|
|
123
|
+
batchPages(answer) {
|
|
124
|
+
if (!answer || typeof answer !== 'object') {
|
|
125
|
+
throw this.notRestAnswerError();
|
|
126
|
+
}
|
|
127
|
+
if (!instanceOfiBXRestAnswerSuccess(answer)) {
|
|
128
|
+
throw this.apiErrorFromBody(answer);
|
|
129
|
+
}
|
|
130
|
+
// Портал отдаёт result_error массивом, когда ошибок нет, и объектом с ключами команд, когда есть
|
|
131
|
+
const failed = Object.values(answer.result?.result_error ?? {})[0];
|
|
132
|
+
if (failed) {
|
|
133
|
+
const parsed = parseBXRestErrorBody(failed);
|
|
134
|
+
throw new BXRestApiError(parsed?.error, parsed?.error_description, { method: this.http.getNameMethod(this.url) });
|
|
135
|
+
}
|
|
136
|
+
return Object.values(answer.result?.result ?? {}).filter(Boolean);
|
|
137
|
+
}
|
|
138
|
+
// В тексте ошибки — только метод, без тела ответа: это может быть целая HTML-страница
|
|
139
|
+
notRestAnswerError() {
|
|
140
|
+
return new Error(`Bitrix24 answered ${this.http.getNameMethod(this.url)} with a body that is not a REST response.`);
|
|
141
|
+
}
|
|
142
|
+
apiErrorFromBody(v) {
|
|
143
|
+
const parsed = parseBXRestErrorBody(v);
|
|
144
|
+
return new BXRestApiError(parsed ? parsed.error : v.error, parsed ? parsed.error_description : v.error_description, { method: this.http.getNameMethod(this.url) });
|
|
145
|
+
}
|
|
77
146
|
}
|
|
78
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2dnktcGFnLWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ieC1yZXN0L3NyYy9zZXJ2aWNlcy9uYXZ2eS9leHRlbmRzL25hdnZ5LXBhZy1iYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFDaEQsT0FBTyxFQUFFLGVBQWUsRUFBRSw4QkFBOEIsRUFBRSxNQUFNLDhCQUE4QixDQUFBO0FBQzlGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUVsRCxPQUFPLEVBQ0wsY0FBYyxFQUFFLHNCQUFzQixFQUFFLG1CQUFtQixFQUFFLG9CQUFvQixHQUNsRixNQUFNLDJCQUEyQixDQUFBO0FBaUJsQyxNQUFNLE9BQWdCLFlBQVk7SUFNaEMsWUFDWSxHQUFhLEVBQ2IsS0FBUSxFQUNSLE1BQTRELFNBQVMsRUFDckUsVUFBVSxLQUFLO1FBSGYsUUFBRyxHQUFILEdBQUcsQ0FBVTtRQUNiLFVBQUssR0FBTCxLQUFLLENBQUc7UUFDUixRQUFHLEdBQUgsR0FBRyxDQUFrRTtRQUNyRSxZQUFPLEdBQVAsT0FBTyxDQUFRO1FBTjNCLGFBQVEsR0FBRyxFQUFFLENBQUEsQ0FBQyw4QkFBOEI7UUFRMUMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLGNBQWMsRUFBRSxDQUFBO0lBQ2xDLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNILFdBQVcsQ0FBQyxPQUErQjtRQUN6QyxJQUFJLENBQUMsY0FBYyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUE7UUFDNUQsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDO0lBRUQsVUFBVTtRQUNSLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJ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Q2pELElBQUksZ0JBQWdCLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQ25DLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFBO1lBQzVDLENBQUM7WUFDRCxNQUFNLEtBQUssQ0FBQTtRQUNiLENBQUMsQ0FBQyxDQUNILENBQUE7SUFDSCxDQUFDO0NBRUYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcydcclxuaW1wb3J0IHsgaUJYUmVzdEFuc3dlciB9IGZyb20gJy4uLy4uLy4uL3R5cGlmaWNhdGlvbi9yZXN0L2Jhc2UvYW5zd2VyJ1xyXG5pbXBvcnQgeyBjYXRjaEVycm9yLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycydcclxuaW1wb3J0IHsgQlhSZXN0TWFwUmVzdWx0LCBpbnN0YW5jZU9maUJYUmVzdEFuc3dlclN1Y2Nlc3MgfSBmcm9tICcuLi8uLi8uLi9mdW5jdGlvbnMvbWFwUmVzdWx0J1xyXG5pbXBvcnQgeyBIdHRwQlhTZXJ2aWNlcyB9IGZyb20gJy4uLy4uL2h0dHAvSHR0cEJYJ1xyXG5pbXBvcnQgeyBSZXR1cm5UeXBlTmF2dnkgfSBmcm9tICcuLi9uYXZ2eS1zdXBwb3J0J1xyXG5pbXBvcnQge1xyXG4gIEJYUmVzdEFwaUVycm9yLCBieFJlc3RBcGlFcnJvckZyb21IdHRwLCBnZXRBdXRoUmVmcmVzaEVycm9yLCBwYXJzZUJYUmVzdEVycm9yQm9keSxcclxufSBmcm9tICcuLi8uLi8uLi9mdW5jdGlvbnMvZXJyb3JzJ1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBCWFJlc3RSZXNPcHRpb25zIHtcclxuICAvKipcclxuICAgKiBXaGVuIGB0cnVlYCwgYSBCaXRyaXgtbGV2ZWwgQVBJIGVycm9yIHRoYXQgY29tZXMgaW4gdGhlIGJvZHkgb2YgYSAyeHhcclxuICAgKiByZXNwb25zZSBtYWtlcyB0aGUgYE9ic2VydmFibGVgIHJldHVybmVkIGJ5IGAucmVzKClgIGVycm9yIG91dCB3aXRoIGFcclxuICAgKiBgQlhSZXN0QXBpRXJyb3JgIGluc3RlYWQgb2YgcmVzb2x2aW5nIHdpdGggYHVuZGVmaW5lZGAuXHJcbiAgICpcclxuICAgKiBFcnJvcnMgdGhhdCBCaXRyaXggc2VuZHMgd2l0aCBhIG5vbi0yeHggSFRUUCBzdGF0dXMgKG1vc3Qgb2YgdGhlbSwgZS5nLlxyXG4gICAqIGBleHBpcmVkX3Rva2VuYCwgYElOU1VGRklDSUVOVF9TQ09QRWApIGZhaWwgd2l0aCBgQlhSZXN0QXBpRXJyb3JgXHJcbiAgICogcmVnYXJkbGVzcyBvZiB0aGlzIG9wdGlvbi5cclxuICAgKlxyXG4gICAqIERlZmF1bHQ6IGBmYWxzZWAgKHByZXNlcnZlcyB0aGUgaGlzdG9yaWNhbCBgLnJlcygpYCBiZWhhdmlvdXIpLlxyXG4gICAqL1xyXG4gIHRocm93T25BcGlFcnJvcj86IGJvb2xlYW5cclxufVxyXG5cclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE5hdnZ5UGFnQmFzZTxULCBSLCBQPiB7XHJcblxyXG4gIHByb3RlY3RlZCByZWFkb25seSBodHRwOiBIdHRwQlhTZXJ2aWNlc1xyXG4gIHByb3RlY3RlZCByZXF1ZXN0SGVhZGVycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz5cclxuICBwYWdlU2l6ZSA9IDUwIC8vINGB0YLQsNC90LTQsNGA0YLQvdGL0Lkg0YDQsNC30LzQtdGAINGB0YLRgNCw0L3QuNGG0YtcclxuXHJcbiAgcHVibGljIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJvdGVjdGVkIHVybDogc3RyaW5nW10sXHJcbiAgICBwcm90ZWN0ZWQgcGFyYW06IFAsXHJcbiAgICBwcm90ZWN0ZWQgbWFwOiAoKHBhcmFtOiBUfCB1bmRlZmluZWQpID0+IFIgfCB1bmRlZmluZWQpIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkLFxyXG4gICAgcHJvdGVjdGVkIHJlc3RBcGkgPSBmYWxzZVxyXG4gICkge1xyXG4gICAgdGhpcy5odHRwID0gbmV3IEh0dHBCWFNlcnZpY2VzKClcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEhUVFAt0LfQsNCz0L7Qu9C+0LLQutC4INGC0L7Qu9GM0LrQviDQtNC70Y8g0Y3RgtC+0LPQviDQt9Cw0L/RgNC+0YHQsCDigJQg0L/QvtCy0LXRgNGFIGBCWFJlc3RTZXR0aW5ncy5oZWFkZXJzYFxyXG4gICAqICjQv9GA0Lgg0YHQvtCy0L/QsNC00LXQvdC40Lgg0LjQvNC10L3QuCDQv9C+0LHQtdC20LTQsNC10YIg0LfQvdCw0YfQtdC90LjQtSDQvtGC0YHRjtC00LApLiDQn9C+0LLRgtC+0YDQvdGL0LUg0LLRi9C30L7QstGLXHJcbiAgICog0LTQvtC/0L7Qu9C90Y/RjtGCINGD0LbQtSDQt9Cw0LTQsNC90L3Ri9C1INC30LDQs9C+0LvQvtCy0LrQuC4g0JTQtdC50YHRgtCy0YPQtdGCINC90LAgYC5yZXMoKWAsIGAucmVzVmFuaWxsYSgpYCxcclxuICAgKiBgLm1hcEZvclZhbmlsbGEoKWAg0Lgg0L3QsCDQstGB0LUgYmF0Y2gt0LfQsNC/0YDQvtGB0YsgYC5yZXNBbGwoKWAuXHJcbiAgICpcclxuICAgKiBAZXhhbXBsZVxyXG4gICAqIGJ4LmNybS5kZWFsLmxpc3QoeyAuLi4gfSkud2l0aEhlYWRlcnMoeyAnWC1SZXF1ZXN0LVNvdXJjZSc6ICdyZXBvcnQnIH0pLnJlc0FsbCgpXHJcbiAgICovXHJcbiAgd2l0aEhlYWRlcnMoaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IHRoaXMge1xyXG4gICAgdGhpcy5yZXF1ZXN0SGVhZGVycyA9IHsgLi4udGhpcy5yZXF1ZXN0SGVhZGVycywgLi4uaGVhZGVycyB9XHJcbiAgICByZXR1cm4gdGhpc1xyXG4gIH1cclxuXHJcbiAgcmVzVmFuaWxsYSgpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxUPih0aGlzLnVybCwgdGhpcy5wYXJhbSwgdGhpcy5yZXN0QXBpLCB0aGlzLnJlcXVlc3RIZWFkZXJzKVxyXG4gIH1cclxuXHJcbiAgbWFwRm9yVmFuaWxsYSgpOiBPYnNlcnZhYmxlPGlCWFJlc3RBbnN3ZXI8UmV0dXJuVHlwZU5hdnZ5PFQsIFI+PiB8IHVuZGVmaW5lZD4ge1xyXG4gICAgcmV0dXJuIHRoaXMucmVzVmFuaWxsYSgpXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCh2ID0+IHtcclxuICAgICAgICAgIGlmICh2ICYmIGluc3RhbmNlT2ZpQlhSZXN0QW5zd2VyU3VjY2Vzcyh2KSAmJiB0aGlzLm1hcCkge1xyXG4gICAgICAgICAgICAvLyDQn9GA0LjQvNC10L3Rj9C10LwgdGhpcy5tYXAg0Lgg0Y/QstC90L4g0L/RgNC40LLQvtC00LjQvCDRgtC40L8g0YDQtdC30YPQu9GM0YLQsNGC0LBcclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5tYXAodi5yZXN1bHQgYXMgVCkgYXMgUmV0dXJuVHlwZU5hdnZ5PFQsIFI+XHJcbiAgICAgICAgICAgIHJldHVybiB7IC4uLnYsIC4uLntyZXN1bHQ6IHJlc3VsdH0gfSBhcyBpQlhSZXN0QW5zd2VyPFJldHVyblR5cGVOYXZ2eTxULCBSPj5cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiB2IGFzIGlCWFJlc3RBbnN3ZXI8UmV0dXJuVHlwZU5hdnZ5PFQsIFI+PiB8IHVuZGVmaW5lZFxyXG4gICAgICAgIH0pXHJcbiAgICAgIClcclxuICB9XHJcblxyXG4gIHJlcyhvcHRpb25zPzogQlhSZXN0UmVzT3B0aW9ucykge1xyXG4gICAgcmV0dXJuIHRoaXMubWFwQW5kRXJyb3IodGhpcy5yZXNWYW5pbGxhKCksIG9wdGlvbnMpLnBpcGUoXHJcbiAgICAgIG1hcCh2ID0+ICh2ICYmIHRoaXMubWFwKVxyXG4gICAgICAgID8gdGhpcy5tYXAodilcclxuICAgICAgICA6IHZcclxuICAgICAgKVxyXG4gICAgKSBhcyBPYnNlcnZhYmxlPFJldHVyblR5cGVOYXZ2eTxULCBSPiB8IHVuZGVmaW5lZD5cclxuICB9XHJcblxyXG4gIG1hcEFuZEVycm9yPFQ+KFxyXG4gICAgcmVxdWVzdDogT2JzZXJ2YWJsZTxpQlhSZXN0QW5zd2VyPFQ+IHwgdW5kZWZpbmVkPixcclxuICAgIG9wdGlvbnM/OiBCWFJlc3RSZXNPcHRpb25zXHJcbiAgKSB7XHJcbiAgICBjb25zdCBtZXRob2QgPSB0aGlzLmh0dHAuZ2V0TmFtZU1ldGhvZCh0aGlzLnVybClcclxuICAgIHJldHVybiByZXF1ZXN0LnBpcGUoXHJcbiAgICAgIG1hcCh2ID0+IHtcclxuICAgICAgICBpZiAob3B0aW9ucz8udGhyb3dPbkFwaUVycm9yICYmIHYgJiYgIWluc3RhbmNlT2ZpQlhSZXN0QW5zd2VyU3VjY2Vzcyh2KSkge1xyXG4gICAgICAgICAgY29uc3QgcGFyc2VkID0gcGFyc2VCWFJlc3RFcnJvckJvZHkodilcclxuICAgICAgICAgIHRocm93IG5ldyBCWFJlc3RBcGlFcnJvcihcclxuICAgICAgICAgICAgcGFyc2VkID8gcGFyc2VkLmVycm9yIDogdi5lcnJvcixcclxuICAgICAgICAgICAgcGFyc2VkID8gcGFyc2VkLmVycm9yX2Rlc2NyaXB0aW9uIDogdi5lcnJvcl9kZXNjcmlwdGlvbixcclxuICAgICAgICAgICAgeyBtZXRob2QgfVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gQlhSZXN0TWFwUmVzdWx0KHYpXHJcbiAgICAgIH0pLFxyXG4gICAgICBjYXRjaEVycm9yKChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKVxyXG4gICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBCWFJlc3RBcGlFcnJvcikge1xyXG4gICAgICAgICAgdGhyb3cgZXJyXHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vINCR0L7Qu9GM0YjQuNC90YHRgtCy0L4g0L7RiNC40LHQvtC6IEJpdHJpeCDQv9GA0LjRhdC+0LTQuNGCINGB0L4g0YHRgtCw0YLRg9GB0L7QvCDQvdC1IDJ4eCwg0LggYXhpb3NcclxuICAgICAgICAvLyDQvtGC0LrQu9C+0L3Rj9C10YIg0YLQsNC60L7QuSDQvtGC0LLQtdGCIOKAlCDQtNC+0YHRgtCw0ZHQvCDQuNC3INC90LXQs9C+INC60L7QtCDQuCDQvtC/0LjRgdCw0L3QuNC1INC+0YjQuNCx0LrQuCxcclxuICAgICAgICAvLyDQsCDQvdC1INC+0YLQtNCw0ZHQvCDQsdC10LfQu9C40LrQvtC1IFwiQXhpb3NFcnJvcjogUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSA0MDBcIi5cclxuICAgICAgICBjb25zdCBhcGlFcnJvciA9IGJ4UmVzdEFwaUVycm9yRnJvbUh0dHAoZXJyLCBtZXRob2QpXHJcbiAgICAgICAgaWYgKGFwaUVycm9yKSB7XHJcbiAgICAgICAgICB0aHJvdyBhcGlFcnJvclxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyDQodC+0L7QsdGJ0LXQvdC40LUg0L/RgNC10LbQvdC10LUsINC90L4g0LjRgdGF0L7QtNC90LDRjyDQvtGI0LjQsdC60LAg0L7RgdGC0LDRkdGC0YHRjyDQsiBjYXVzZSDigJQg0LHQtdC3INC90LXRkVxyXG4gICAgICAgIC8vINGC0LXRgNGP0LvRgdGPIEhUVFAt0YHRgtCw0YLRg9GBINC+0YLQstC10YLQsCDQvdC1INC+0YIgQml0cml4ICjQvdCw0L/RgNC40LzQtdGALCDQv9GD0YHRgtC+0LPQviA0MDEg0L7RglxyXG4gICAgICAgIC8vINCx0Y3QutC10L3QtC3Qv9GA0L7QutGB0LgpOiDQvtC9INCx0YvQuyDRgtC+0LvRjNC60L4g0LIg0YLQtdC60YHRgtC1INGB0L7QvtCx0YnQtdC90LjRjy5cclxuICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcigoZXJyLmVycm9yKSA/IGVyci5lcnJvciA6IGVyciwgeyBjYXVzZTogZXJyIH0pXHJcbiAgICAgICAgY29uc3QgYXV0aFJlZnJlc2hFcnJvciA9IGdldEF1dGhSZWZyZXNoRXJyb3IoZXJyKVxyXG4gICAgICAgIGlmIChhdXRoUmVmcmVzaEVycm9yICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIE9iamVjdC5hc3NpZ24oZXJyb3IsIHsgYXV0aFJlZnJlc2hFcnJvciB9KVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aHJvdyBlcnJvclxyXG4gICAgICB9KVxyXG4gICAgKVxyXG4gIH1cclxuXHJcbn1cclxuIl19
|
|
147
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2dnktcGFnLWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ieC1yZXN0L3NyYy9zZXJ2aWNlcy9uYXZ2eS9leHRlbmRzL25hdnZ5LXBhZy1iYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUUzRCxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBQ2hELE9BQU8sS0FBSyxNQUFNLFlBQVksQ0FBQTtBQUM5QixPQUFPLEVBQUUsZUFBZSxFQUFFLDhCQUE4QixFQUFFLE1BQU0sOEJBQThCLENBQUE7QUFDOUYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBRWxELE9BQU8sRUFDTCxjQUFjLEVBQUUsc0JBQXNCLEVBQUUsbUJBQW1CLEVBQUUsb0JBQW9CLEdBQ2xGLE1BQU0sMkJBQTJCLENBQUE7QUFHbEMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMENBQTBDLENBQUE7QUFFaEYsaUVBQWlFO0FBQ2pFLE1BQU0sb0JBQW9CLEdBQUcsRUFBRSxDQUFBO0FBaUIvQjs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQThCLEtBQVEsRUFBRSxLQUF5QixFQUFFLFFBQWdCO0lBQ2pILE1BQU0sS0FBSyxHQUFRLEVBQUUsQ0FBQTtJQUNyQixLQUFLLElBQUksS0FBSyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxRQUFRLEVBQUUsS0FBSyxHQUFHLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUNqRyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEVB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Q0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUMvQixNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixFQUN2RCxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FDOUMsQ0FBQTtJQUNILENBQUM7Q0FFRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbmNhdE1hcCwgZnJvbSwgT2JzZXJ2YWJsZSwgdG9BcnJheSB9IGZyb20gJ3J4anMnXG5pbXBvcnQgeyBpQlhSZXN0QW5zd2VyLCBpQlhSZXN0QW5zd2VyRXJyb3IsIGlCWFJlc3RBbnN3ZXJTdWNjZXNzIH0gZnJvbSAnLi4vLi4vLi4vdHlwaWZpY2F0aW9uL3Jlc3QvYmFzZS9hbnN3ZXInXG5pbXBvcnQgeyBjYXRjaEVycm9yLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycydcbmltcG9ydCBjbG9uZSBmcm9tICdqdXN0LWNsb25lJ1xuaW1wb3J0IHsgQlhSZXN0TWFwUmVzdWx0LCBpbnN0YW5jZU9maUJYUmVzdEFuc3dlclN1Y2Nlc3MgfSBmcm9tICcuLi8uLi8uLi9mdW5jdGlvbnMvbWFwUmVzdWx0J1xuaW1wb3J0IHsgSHR0cEJYU2VydmljZXMgfSBmcm9tICcuLi8uLi9odHRwL0h0dHBCWCdcbmltcG9ydCB7IFJldHVyblR5cGVOYXZ2eSB9IGZyb20gJy4uL25hdnZ5LXN1cHBvcnQnXG5pbXBvcnQge1xuICBCWFJlc3RBcGlFcnJvciwgYnhSZXN0QXBpRXJyb3JGcm9tSHR0cCwgZ2V0QXV0aFJlZnJlc2hFcnJvciwgcGFyc2VCWFJlc3RFcnJvckJvZHksXG59IGZyb20gJy4uLy4uLy4uL2Z1bmN0aW9ucy9lcnJvcnMnXG5pbXBvcnQgeyBpQlhSZXN0UGFnaW5hdGlvbiB9IGZyb20gJy4uLy4uLy4uL3R5cGlmaWNhdGlvbi9yZXN0L2Jhc2UvYXBpLXBhZ2luYXRpb24tYngnXG5pbXBvcnQgeyBpQlhSZXN0QmF0Y2ggfSBmcm9tICcuLi8uLi8uLi90eXBpZmljYXRpb24vcmVzdC9iYXRjaCdcbmltcG9ydCB7IHNlcmlhbGl6ZUJpdHJpeFBhcmFtcyB9IGZyb20gJy4uLy4uLy4uL2Z1bmN0aW9ucy9zZXJpYWxpemVCaXRyaXhQYXJhbXMnXG5cbi8qKiDQkdC+0LvRjNGI0LUg0LrQvtC80LDQvdC0INCyINC+0LTQvdC+0Lwg0LfQsNC/0YDQvtGB0LUgYGJhdGNoYCBCaXRyaXgg0L3QtSDQv9GA0LjQvdC40LzQsNC10YIuICovXG5jb25zdCBCQVRDSF9DT01NQU5EU19MSU1JVCA9IDUwXG5cbmV4cG9ydCBpbnRlcmZhY2UgQlhSZXN0UmVzT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBXaGVuIGB0cnVlYCwgYSBCaXRyaXgtbGV2ZWwgQVBJIGVycm9yIHRoYXQgY29tZXMgaW4gdGhlIGJvZHkgb2YgYSAyeHhcbiAgICogcmVzcG9uc2UgbWFrZXMgdGhlIGBPYnNlcnZhYmxlYCByZXR1cm5lZCBieSBgLnJlcygpYCBlcnJvciBvdXQgd2l0aCBhXG4gICAqIGBCWFJlc3RBcGlFcnJvcmAgaW5zdGVhZCBvZiByZXNvbHZpbmcgd2l0aCBgdW5kZWZpbmVkYC5cbiAgICpcbiAgICogRXJyb3JzIHRoYXQgQml0cml4IHNlbmRzIHdpdGggYSBub24tMnh4IEhUVFAgc3RhdHVzIChtb3N0IG9mIHRoZW0sIGUuZy5cbiAgICogYGV4cGlyZWRfdG9rZW5gLCBgSU5TVUZGSUNJRU5UX1NDT1BFYCkgZmFpbCB3aXRoIGBCWFJlc3RBcGlFcnJvcmBcbiAgICogcmVnYXJkbGVzcyBvZiB0aGlzIG9wdGlvbi5cbiAgICpcbiAgICogRGVmYXVsdDogYGZhbHNlYCAocHJlc2VydmVzIHRoZSBoaXN0b3JpY2FsIGAucmVzKClgIGJlaGF2aW91cikuXG4gICAqL1xuICB0aHJvd09uQXBpRXJyb3I/OiBib29sZWFuXG59XG5cbi8qKlxuICog0J/QsNGA0LDQvNC10YLRgNGLINC+0YHRgtCw0LvRjNC90YvRhSDRgdGC0YDQsNC90LjRhiDQtNC70Y8g0LzQtdGC0L7QtNC+0LIg0YEg0L/QvtGB0YLRgNCw0L3QuNGH0L3QvtC5INC90LDQstC40LPQsNGG0LjQtdC5INGH0LXRgNC10LcgYHN0YXJ0YC5cbiAqINCe0YLRgdGH0ZHRgiDQuNC00ZHRgiDQvtGCIGBzdGFydGAg0YHQsNC80L7Qs9C+INC30LDQv9GA0L7RgdCwOiDQv9C10YDQstCw0Y8g0YHRgtGA0LDQvdC40YbQsCDRg9C20LUg0L/QvtC70YPRh9C10L3QsCDQuNC80LXQvdC90L4g0YEg0L3QtdCz0L4uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvZmZzZXRQYWdlUGFyYW1zPFAgZXh0ZW5kcyBpQlhSZXN0UGFnaW5hdGlvbj4ocGFyYW06IFAsIHRvdGFsOiBudW1iZXIgfCB1bmRlZmluZWQsIHBhZ2VTaXplOiBudW1iZXIpOiBQW10ge1xuICBjb25zdCBwYWdlczogUFtdID0gW11cbiAgZm9yIChsZXQgc3RhcnQgPSAoTnVtYmVyKHBhcmFtPy5zdGFydCkgfHwgMCkgKyBwYWdlU2l6ZTsgc3RhcnQgPCAodG90YWwgPz8gMCk7IHN0YXJ0ICs9IHBhZ2VTaXplKSB7XG4gICAgcGFnZXMucHVzaCh7IC4uLmNsb25lKHBhcmFtKSwgc3RhcnQgfSlcbiAgfVxuICByZXR1cm4gcGFnZXNcbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE5hdnZ5UGFnQmFzZTxULCBSLCBQPiB7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGh0dHA6IEh0dHBCWFNlcnZpY2VzXG4gIHByb3RlY3RlZCByZXF1ZXN0SGVhZGVycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz5cbiAgcGFnZVNpemUgPSA1MCAvLyDRgdGC0LDQvdC00LDRgNGC0L3Ri9C5INGA0LDQt9C80LXRgCDRgdGC0YDQsNC90LjRhtGLXG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCB1cmw6IHN0cmluZ1tdLFxuICAgIHByb3RlY3RlZCBwYXJhbTogUCxcbiAgICBwcm90ZWN0ZWQgbWFwOiAoKHBhcmFtOiBUfCB1bmRlZmluZWQpID0+IFIgfCB1bmRlZmluZWQpIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkLFxuICAgIHByb3RlY3RlZCByZXN0QXBpID0gZmFsc2VcbiAgKSB7XG4gICAgdGhpcy5odHRwID0gbmV3IEh0dHBCWFNlcnZpY2VzKClcbiAgfVxuXG4gIC8qKlxuICAgKiBIVFRQLdC30LDQs9C+0LvQvtCy0LrQuCDRgtC+0LvRjNC60L4g0LTQu9GPINGN0YLQvtCz0L4g0LfQsNC/0YDQvtGB0LAg4oCUINC/0L7QstC10YDRhSBgQlhSZXN0U2V0dGluZ3MuaGVhZGVyc2BcbiAgICogKNC/0YDQuCDRgdC+0LLQv9Cw0LTQtdC90LjQuCDQuNC80LXQvdC4INC/0L7QsdC10LbQtNCw0LXRgiDQt9C90LDRh9C10L3QuNC1INC+0YLRgdGO0LTQsCkuINCf0L7QstGC0L7RgNC90YvQtSDQstGL0LfQvtCy0YtcbiAgICog0LTQvtC/0L7Qu9C90Y/RjtGCINGD0LbQtSDQt9Cw0LTQsNC90L3Ri9C1INC30LDQs9C+0LvQvtCy0LrQuC4g0JTQtdC50YHRgtCy0YPQtdGCINC90LAgYC5yZXMoKWAsIGAucmVzVmFuaWxsYSgpYCxcbiAgICogYC5tYXBGb3JWYW5pbGxhKClgINC4INC90LAg0LLRgdC1IGJhdGNoLdC30LDQv9GA0L7RgdGLIGAucmVzQWxsKClgLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBieC5jcm0uZGVhbC5saXN0KHsgLi4uIH0pLndpdGhIZWFkZXJzKHsgJ1gtUmVxdWVzdC1Tb3VyY2UnOiAncmVwb3J0JyB9KS5yZXNBbGwoKVxuICAgKi9cbiAgd2l0aEhlYWRlcnMoaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IHRoaXMge1xuICAgIHRoaXMucmVxdWVzdEhlYWRlcnMgPSB7IC4uLnRoaXMucmVxdWVzdEhlYWRlcnMsIC4uLmhlYWRlcnMgfVxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICByZXNWYW5pbGxhKCkge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxUPih0aGlzLnVybCwgdGhpcy5wYXJhbSwgdGhpcy5yZXN0QXBpLCB0aGlzLnJlcXVlc3RIZWFkZXJzKVxuICB9XG5cbiAgbWFwRm9yVmFuaWxsYSgpOiBPYnNlcnZhYmxlPGlCWFJlc3RBbnN3ZXI8UmV0dXJuVHlwZU5hdnZ5PFQsIFI+PiB8IHVuZGVmaW5lZD4ge1xuICAgIHJldHVybiB0aGlzLnJlc1ZhbmlsbGEoKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCh2ID0+IHtcbiAgICAgICAgICBpZiAodiAmJiBpbnN0YW5jZU9maUJYUmVzdEFuc3dlclN1Y2Nlc3ModikgJiYgdGhpcy5tYXApIHtcbiAgICAgICAgICAgIC8vINCf0YDQuNC80LXQvdGP0LXQvCB0aGlzLm1hcCDQuCDRj9Cy0L3QviDQv9GA0LjQstC+0LTQuNC8INGC0LjQvyDRgNC10LfRg9C70YzRgtCw0YLQsFxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5tYXAodi5yZXN1bHQgYXMgVCkgYXMgUmV0dXJuVHlwZU5hdnZ5PFQsIFI+XG4gICAgICAgICAgICByZXR1cm4geyAuLi52LCAuLi57cmVzdWx0OiByZXN1bHR9IH0gYXMgaUJYUmVzdEFuc3dlcjxSZXR1cm5UeXBlTmF2dnk8VCwgUj4+XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB2IGFzIGlCWFJlc3RBbnN3ZXI8UmV0dXJuVHlwZU5hdnZ5PFQsIFI+PiB8IHVuZGVmaW5lZFxuICAgICAgICB9KVxuICAgICAgKVxuICB9XG5cbiAgcmVzKG9wdGlvbnM/OiBCWFJlc3RSZXNPcHRpb25zKSB7XG4gICAgcmV0dXJuIHRoaXMubWFwQW5kRXJyb3IodGhpcy5yZXNWYW5pbGxhKCksIG9wdGlvbnMpLnBpcGUoXG4gICAgICBtYXAodiA9PiAodiAmJiB0aGlzLm1hcClcbiAgICAgICAgPyB0aGlzLm1hcCh2KVxuICAgICAgICA6IHZcbiAgICAgIClcbiAgICApIGFzIE9ic2VydmFibGU8UmV0dXJuVHlwZU5hdnZ5PFQsIFI+IHwgdW5kZWZpbmVkPlxuICB9XG5cbiAgbWFwQW5kRXJyb3I8VD4oXG4gICAgcmVxdWVzdDogT2JzZXJ2YWJsZTxpQlhSZXN0QW5zd2VyPFQ+IHwgdW5kZWZpbmVkPixcbiAgICBvcHRpb25zPzogQlhSZXN0UmVzT3B0aW9uc1xuICApIHtcbiAgICBjb25zdCBtZXRob2QgPSB0aGlzLmh0dHAuZ2V0TmFtZU1ldGhvZCh0aGlzLnVybClcbiAgICByZXR1cm4gcmVxdWVzdC5waXBlKFxuICAgICAgY2F0Y2hFcnJvcigoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIEJYUmVzdEFwaUVycm9yKSB7XG4gICAgICAgICAgdGhyb3cgZXJyXG4gICAgICAgIH1cbiAgICAgICAgLy8g0JHQvtC70YzRiNC40L3RgdGC0LLQviDQvtGI0LjQsdC+0LogQml0cml4INC/0YDQuNGF0L7QtNC40YIg0YHQviDRgdGC0LDRgtGD0YHQvtC8INC90LUgMnh4LCDQuCBheGlvc1xuICAgICAgICAvLyDQvtGC0LrQu9C+0L3Rj9C10YIg0YLQsNC60L7QuSDQvtGC0LLQtdGCIOKAlCDQtNC+0YHRgtCw0ZHQvCDQuNC3INC90LXQs9C+INC60L7QtCDQuCDQvtC/0LjRgdCw0L3QuNC1INC+0YjQuNCx0LrQuCxcbiAgICAgICAgLy8g0LAg0L3QtSDQvtGC0LTQsNGR0Lwg0LHQtdC30LvQuNC60L7QtSBcIkF4aW9zRXJyb3I6IFJlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgNDAwXCIuXG4gICAgICAgIGNvbnN0IGFwaUVycm9yID0gYnhSZXN0QXBpRXJyb3JGcm9tSHR0cChlcnIsIG1ldGhvZClcbiAgICAgICAgaWYgKGFwaUVycm9yKSB7XG4gICAgICAgICAgdGhyb3cgYXBpRXJyb3JcbiAgICAgICAgfVxuICAgICAgICAvLyDQodC+0L7QsdGJ0LXQvdC40LUg0L/RgNC10LbQvdC10LUsINC90L4g0LjRgdGF0L7QtNC90LDRjyDQvtGI0LjQsdC60LAg0L7RgdGC0LDRkdGC0YHRjyDQsiBjYXVzZSDigJQg0LHQtdC3INC90LXRkVxuICAgICAgICAvLyDRgtC10YDRj9C70YHRjyBIVFRQLdGB0YLQsNGC0YPRgSDQvtGC0LLQtdGC0LAg0L3QtSDQvtGCIEJpdHJpeCAo0L3QsNC/0YDQuNC80LXRgCwg0L/Rg9GB0YLQvtCz0L4gNDAxINC+0YJcbiAgICAgICAgLy8g0LHRjdC60LXQvdC0LdC/0YDQvtC60YHQuCk6INC+0L0g0LHRi9C7INGC0L7Qu9GM0LrQviDQsiDRgtC10LrRgdGC0LUg0YHQvtC+0LHRidC10L3QuNGPLlxuICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcigoZXJyLmVycm9yKSA/IGVyci5lcnJvciA6IGVyciwgeyBjYXVzZTogZXJyIH0pXG4gICAgICAgIGNvbnN0IGF1dGhSZWZyZXNoRXJyb3IgPSBnZXRBdXRoUmVmcmVzaEVycm9yKGVycilcbiAgICAgICAgaWYgKGF1dGhSZWZyZXNoRXJyb3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIE9iamVjdC5hc3NpZ24oZXJyb3IsIHsgYXV0aFJlZnJlc2hFcnJvciB9KVxuICAgICAgICB9XG4gICAgICAgIHRocm93IGVycm9yXG4gICAgICB9KSxcbiAgICAgIG1hcCh2ID0+IHtcbiAgICAgICAgaWYgKHYgJiYgdHlwZW9mIHYgIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgdGhyb3cgdGhpcy5ub3RSZXN0QW5zd2VyRXJyb3IoKVxuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zPy50aHJvd09uQXBpRXJyb3IgJiYgdiAmJiAhaW5zdGFuY2VPZmlCWFJlc3RBbnN3ZXJTdWNjZXNzKHYpKSB7XG4gICAgICAgICAgdGhyb3cgdGhpcy5hcGlFcnJvckZyb21Cb2R5KHYpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIEJYUmVzdE1hcFJlc3VsdCh2KVxuICAgICAgfSlcbiAgICApXG4gIH1cblxuICAvKipcbiAgICog0J/QtdGA0LLQsNGPINGB0YLRgNCw0L3QuNGG0LAg0LTQu9GPIGAucmVzQWxsKClgLiDQntGI0LjQsdC60LAgQml0cml4INCyINGC0LXQu9C1INC+0YLQstC10YLQsCAyeHgg0YHRgtCw0L3QvtCy0LjRgtGB0Y8gYEJYUmVzdEFwaUVycm9yYDpcbiAgICog0YHRgtGA0LDQvdC40YYg0LIg0YLQsNC60L7QvCDQvtGC0LLQtdGC0LUg0L3QtdGCLCDQuCDQsdC10Lcg0Y3RgtC+0LPQviBgLnJlc0FsbCgpYCDQt9Cw0LLQtdGA0YjQuNC70YHRjyDQsdGLINCx0LXQt9C70LjQutC40LwgYEVtcHR5RXJyb3JgLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlc0ZpcnN0UGFnZSgpOiBPYnNlcnZhYmxlPGlCWFJlc3RBbnN3ZXJTdWNjZXNzPFQ+PiB7XG4gICAgcmV0dXJuIHRoaXMucmVzVmFuaWxsYSgpLnBpcGUoXG4gICAgICBtYXAodiA9PiB7XG4gICAgICAgIGlmICghdiB8fCB0eXBlb2YgdiAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICB0aHJvdyB0aGlzLm5vdFJlc3RBbnN3ZXJFcnJvcigpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpbnN0YW5jZU9maUJYUmVzdEFuc3dlclN1Y2Nlc3M8VD4odikpIHtcbiAgICAgICAgICB0aHJvdyB0aGlzLmFwaUVycm9yRnJvbUJvZHkodilcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdlxuICAgICAgfSlcbiAgICApXG4gIH1cblxuICAvKipcbiAgICog0J7RgdGC0LDQu9GM0L3Ri9C1INGB0YLRgNCw0L3QuNGG0Ysg0LTQu9GPIGAucmVzQWxsKClgLCDQsiDQv9C+0YDRj9C00LrQtSBgcGFyYW1zYC4g0JrQvtC80LDQvdC00Ysg0YPRhdC+0LTRj9GCINGH0LXRgNC10LcgYGJhdGNoYCxcbiAgICog0L/QsNC60LXRgtGLIOKAlCDQv9C+INC+0YfQtdGA0LXQtNC4LiDQntGI0LjQsdC60LAg0LvRjtCx0L7QuSDRgdGC0YDQsNC90LjRhtGLINC30LDQstC10YDRiNCw0LXRgiDQstC10YHRjCDQt9Cw0L/RgNC+0YE6INC90LXQv9C+0LvQvdGL0Lkg0YHQv9C40YHQvtC6XG4gICAqINCy0YvQs9C70Y/QtNC10Lsg0LHRiyDQtNC70Y8g0LLRi9C30YvQstCw0Y7RidC10LPQviDQutC+0LTQsCDQutCw0Log0L/QvtC70L3Ri9C5LlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlc1BhZ2VzPFBhZ2U+KHBhcmFtczogUFtdKTogT2JzZXJ2YWJsZTxQYWdlW10+IHtcbiAgICBjb25zdCBtZXRob2QgPSB0aGlzLmh0dHAuZ2V0TmFtZU1ldGhvZCh0aGlzLnVybClcbiAgICBjb25zdCBjb21tYW5kcyA9IHBhcmFtcy5tYXAocGFyYW0gPT4gbWV0aG9kICsgJz8nICsgc2VyaWFsaXplQml0cml4UGFyYW1zKHBhcmFtKSlcbiAgICBjb25zdCBiYXRjaGVzOiBzdHJpbmdbXVtdID0gW11cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29tbWFuZHMubGVuZ3RoOyBpICs9IEJBVENIX0NPTU1BTkRTX0xJTUlUKSB7XG4gICAgICBiYXRjaGVzLnB1c2goY29tbWFuZHMuc2xpY2UoaSwgaSArIEJBVENIX0NPTU1BTkRTX0xJTUlUKSlcbiAgICB9XG5cbiAgICByZXR1cm4gZnJvbShiYXRjaGVzKS5waXBlKFxuICAgICAgY29uY2F0TWFwKGNtZCA9PiB0aGlzLmh0dHAucG9zdDxpQlhSZXN0QmF0Y2g8UGFnZVtdPj4oWydiYXRjaCddLCB7IGhhbHQ6IDEsIGNtZCB9LCBmYWxzZSwgdGhpcy5yZXF1ZXN0SGVhZGVycykpLFxuICAgICAgbWFwKGFuc3dlciA9PiB0aGlzLmJhdGNoUGFnZXM8UGFnZT4oYW5zd2VyKSksXG4gICAgICB0b0FycmF5KCksXG4gICAgICBtYXAocGFnZXMgPT4gcGFnZXMuZmxhdCgpIGFzIFBhZ2VbXSlcbiAgICApXG4gIH1cblxuICBwcml2YXRlIGJhdGNoUGFnZXM8UGFnZT4oYW5zd2VyOiBpQlhSZXN0QW5zd2VyPGlCWFJlc3RCYXRjaDxQYWdlW10+PiB8IHVuZGVmaW5lZCk6IFBhZ2VbXSB7XG4gICAgaWYgKCFhbnN3ZXIgfHwgdHlwZW9mIGFuc3dlciAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IHRoaXMubm90UmVzdEFuc3dlckVycm9yKClcbiAgICB9XG4gICAgaWYgKCFpbnN0YW5jZU9maUJYUmVzdEFuc3dlclN1Y2Nlc3M8aUJYUmVzdEJhdGNoPFBhZ2VbXT4+KGFuc3dlcikpIHtcbiAgICAgIHRocm93IHRoaXMuYXBpRXJyb3JGcm9tQm9keShhbnN3ZXIpXG4gICAgfVxuICAgIC8vINCf0L7RgNGC0LDQuyDQvtGC0LTQsNGR0YIgcmVzdWx0X2Vycm9yINC80LDRgdGB0LjQstC+0LwsINC60L7Qs9C00LAg0L7RiNC40LHQvtC6INC90LXRgiwg0Lgg0L7QsdGK0LXQutGC0L7QvCDRgSDQutC70Y7Rh9Cw0LzQuCDQutC+0LzQsNC90LQsINC60L7Qs9C00LAg0LXRgdGC0YxcbiAgICBjb25zdCBmYWlsZWQgPSBPYmplY3QudmFsdWVzKGFuc3dlci5yZXN1bHQ/LnJlc3VsdF9lcnJvciA/PyB7fSlbMF1cbiAgICBpZiAoZmFpbGVkKSB7XG4gICAgICBjb25zdCBwYXJzZWQgPSBwYXJzZUJYUmVzdEVycm9yQm9keShmYWlsZWQpXG4gICAgICB0aHJvdyBuZXcgQlhSZXN0QXBpRXJyb3IocGFyc2VkPy5lcnJvciwgcGFyc2VkPy5lcnJvcl9kZXNjcmlwdGlvbiwgeyBtZXRob2Q6IHRoaXMuaHR0cC5nZXROYW1lTWV0aG9kKHRoaXMudXJsKSB9KVxuICAgIH1cbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhhbnN3ZXIucmVzdWx0Py5yZXN1bHQgPz8ge30pLmZpbHRlcihCb29sZWFuKSBhcyBQYWdlW11cbiAgfVxuXG4gIC8vINCSINGC0LXQutGB0YLQtSDQvtGI0LjQsdC60Lgg4oCUINGC0L7Qu9GM0LrQviDQvNC10YLQvtC0LCDQsdC10Lcg0YLQtdC70LAg0L7RgtCy0LXRgtCwOiDRjdGC0L4g0LzQvtC20LXRgiDQsdGL0YLRjCDRhtC10LvQsNGPIEhUTUwt0YHRgtGA0LDQvdC40YbQsFxuICBwcml2YXRlIG5vdFJlc3RBbnN3ZXJFcnJvcigpIHtcbiAgICByZXR1cm4gbmV3IEVycm9yKGBCaXRyaXgyNCBhbnN3ZXJlZCAke3RoaXMuaHR0cC5nZXROYW1lTWV0aG9kKHRoaXMudXJsKX0gd2l0aCBhIGJvZHkgdGhhdCBpcyBub3QgYSBSRVNUIHJlc3BvbnNlLmApXG4gIH1cblxuICBwcml2YXRlIGFwaUVycm9yRnJvbUJvZHkodjogaUJYUmVzdEFuc3dlckVycm9yKSB7XG4gICAgY29uc3QgcGFyc2VkID0gcGFyc2VCWFJlc3RFcnJvckJvZHkodilcbiAgICByZXR1cm4gbmV3IEJYUmVzdEFwaUVycm9yKFxuICAgICAgcGFyc2VkID8gcGFyc2VkLmVycm9yIDogdi5lcnJvcixcbiAgICAgIHBhcnNlZCA/IHBhcnNlZC5lcnJvcl9kZXNjcmlwdGlvbiA6IHYuZXJyb3JfZGVzY3JpcHRpb24sXG4gICAgICB7IG1ldGhvZDogdGhpcy5odHRwLmdldE5hbWVNZXRob2QodGhpcy51cmwpIH1cbiAgICApXG4gIH1cblxufVxuIl19
|