import { NgbCalendarIslamicCivil } from './ngb-calendar-islamic-civil'; import { NgbDate } from '../ngb-date'; import { Injectable } from '@angular/core'; import * as i0 from "@angular/core"; /** * Umalqura calendar is one type of Hijri calendars used in islamic countries. * This Calendar is used by Saudi Arabia for administrative purpose. * Unlike tabular calendars, the algorithm involves astronomical calculation, but it's still deterministic. * http://cldr.unicode.org/development/development-process/design-proposals/islamic-calendar-types */ const GREGORIAN_FIRST_DATE = new Date(1882, 10, 12); const GREGORIAN_LAST_DATE = new Date(2174, 10, 25); const HIJRI_BEGIN = 1300; const HIJRI_END = 1600; const ONE_DAY = 1000 * 60 * 60 * 24; const MONTH_LENGTH = [ // 1300-1304 '101010101010', '110101010100', '111011001001', '011011010100', '011011101010', // 1305-1309 '001101101100', '101010101101', '010101010101', '011010101001', '011110010010', // 1310-1314 '101110101001', '010111010100', '101011011010', '010101011100', '110100101101', // 1315-1319 '011010010101', '011101001010', '101101010100', '101101101010', '010110101101', // 1320-1324 '010010101110', '101001001111', '010100010111', '011010001011', '011010100101', // 1325-1329 '101011010101', '001011010110', '100101011011', '010010011101', '101001001101', // 1330-1334 '110100100110', '110110010101', '010110101100', '100110110110', '001010111010', // 1335-1339 '101001011011', '010100101011', '101010010101', '011011001010', '101011101001', // 1340-1344 '001011110100', '100101110110', '001010110110', '100101010110', '101011001010', // 1345-1349 '101110100100', '101111010010', '010111011001', '001011011100', '100101101101', // 1350-1354 '010101001101', '101010100101', '101101010010', '101110100101', '010110110100', // 1355-1359 '100110110110', '010101010111', '001010010111', '010101001011', '011010100011', // 1360-1364 '011101010010', '101101100101', '010101101010', '101010101011', '010100101011', // 1365-1369 '110010010101', '110101001010', '110110100101', '010111001010', '101011010110', // 1370-1374 '100101010111', '010010101011', '100101001011', '101010100101', '101101010010', // 1375-1379 '101101101010', '010101110101', '001001110110', '100010110111', '010001011011', // 1380-1384 '010101010101', '010110101001', '010110110100', '100111011010', '010011011101', // 1385-1389 '001001101110', '100100110110', '101010101010', '110101010100', '110110110010', // 1390-1394 '010111010101', '001011011010', '100101011011', '010010101011', '101001010101', // 1395-1399 '101101001001', '101101100100', '101101110001', '010110110100', '101010110101', // 1400-1404 '101001010101', '110100100101', '111010010010', '111011001001', '011011010100', // 1405-1409 '101011101001', '100101101011', '010010101011', '101010010011', '110101001001', // 1410-1414 '110110100100', '110110110010', '101010111001', '010010111010', '101001011011', // 1415-1419 '010100101011', '101010010101', '101100101010', '101101010101', '010101011100', // 1420-1424 '010010111101', '001000111101', '100100011101', '101010010101', '101101001010', // 1425-1429 '101101011010', '010101101101', '001010110110', '100100111011', '010010011011', // 1430-1434 '011001010101', '011010101001', '011101010100', '101101101010', '010101101100', // 1435-1439 '101010101101', '010101010101', '101100101001', '101110010010', '101110101001', // 1440-1444 '010111010100', '101011011010', '010101011010', '101010101011', '010110010101', // 1445-1449 '011101001001', '011101100100', '101110101010', '010110110101', '001010110110', // 1450-1454 '101001010110', '111001001101', '101100100101', '101101010010', '101101101010', // 1455-1459 '010110101101', '001010101110', '100100101111', '010010010111', '011001001011', // 1460-1464 '011010100101', '011010101100', '101011010110', '010101011101', '010010011101', // 1465-1469 '101001001101', '110100010110', '110110010101', '010110101010', '010110110101', // 1470-1474 '001011011010', '100101011011', '010010101101', '010110010101', '011011001010', // 1475-1479 '011011100100', '101011101010', '010011110101', '001010110110', '100101010110', // 1480-1484 '101010101010', '101101010100', '101111010010', '010111011001', '001011101010', // 1485-1489 '100101101101', '010010101101', '101010010101', '101101001010', '101110100101', // 1490-1494 '010110110010', '100110110101', '010011010110', '101010010111', '010101000111', // 1495-1499 '011010010011', '011101001001', '101101010101', '010101101010', '101001101011', // 1500-1504 '010100101011', '101010001011', '110101000110', '110110100011', '010111001010', // 1505-1509 '101011010110', '010011011011', '001001101011', '100101001011', '101010100101', // 1510-1514 '101101010010', '101101101001', '010101110101', '000101110110', '100010110111', // 1515-1519 '001001011011', '010100101011', '010101100101', '010110110100', '100111011010', // 1520-1524 '010011101101', '000101101101', '100010110110', '101010100110', '110101010010', // 1525-1529 '110110101001', '010111010100', '101011011010', '100101011011', '010010101011', // 1530-1534 '011001010011', '011100101001', '011101100010', '101110101001', '010110110010', // 1535-1539 '101010110101', '010101010101', '101100100101', '110110010010', '111011001001', // 1540-1544 '011011010010', '101011101001', '010101101011', '010010101011', '101001010101', // 1545-1549 '110100101001', '110101010100', '110110101010', '100110110101', '010010111010', // 1550-1554 '101000111011', '010010011011', '101001001101', '101010101010', '101011010101', // 1555-1559 '001011011010', '100101011101', '010001011110', '101000101110', '110010011010', // 1560-1564 '110101010101', '011010110010', '011010111001', '010010111010', '101001011101', // 1565-1569 '010100101101', '101010010101', '101101010010', '101110101000', '101110110100', // 1570-1574 '010110111001', '001011011010', '100101011010', '101101001010', '110110100100', // 1575-1579 '111011010001', '011011101000', '101101101010', '010101101101', '010100110101', // 1580-1584 '011010010101', '110101001010', '110110101000', '110111010100', '011011011010', // 1585-1589 '010101011011', '001010011101', '011000101011', '101100010101', '101101001010', // 1590-1594 '101110010101', '010110101010', '101010101110', '100100101110', '110010001111', // 1595-1599 '010100100111', '011010010101', '011010101010', '101011010110', '010101011101', // 1600 '001010011101', ]; function getDaysDiff(date1, date2) { // Ignores the time part in date1 and date2: const time1 = Date.UTC(date1.getFullYear(), date1.getMonth(), date1.getDate()); const time2 = Date.UTC(date2.getFullYear(), date2.getMonth(), date2.getDate()); const diff = Math.abs(time1 - time2); return Math.round(diff / ONE_DAY); } export class NgbCalendarIslamicUmalqura extends NgbCalendarIslamicCivil { /** * Returns the equivalent islamic(Umalqura) date value for a give input Gregorian date. * `gdate` is s JS Date to be converted to Hijri. */ fromGregorian(gDate) { let hDay = 1, hMonth = 0, hYear = 1300; let daysDiff = getDaysDiff(gDate, GREGORIAN_FIRST_DATE); if (gDate.getTime() - GREGORIAN_FIRST_DATE.getTime() >= 0 && gDate.getTime() - GREGORIAN_LAST_DATE.getTime() <= 0) { let year = 1300; for (let i = 0; i < MONTH_LENGTH.length; i++, year++) { for (let j = 0; j < 12; j++) { let numOfDays = +MONTH_LENGTH[i][j] + 29; if (daysDiff <= numOfDays) { hDay = daysDiff + 1; if (hDay > numOfDays) { hDay = 1; j++; } if (j > 11) { j = 0; year++; } hMonth = j; hYear = year; return new NgbDate(hYear, hMonth + 1, hDay); } daysDiff = daysDiff - numOfDays; } } return null; } else { return super.fromGregorian(gDate); } } /** * Converts the current Hijri date to Gregorian. */ toGregorian(hDate) { const hYear = hDate.year; const hMonth = hDate.month - 1; const hDay = hDate.day; let gDate = new Date(GREGORIAN_FIRST_DATE); let dayDiff = hDay - 1; if (hYear >= HIJRI_BEGIN && hYear <= HIJRI_END) { for (let y = 0; y < hYear - HIJRI_BEGIN; y++) { for (let m = 0; m < 12; m++) { dayDiff += +MONTH_LENGTH[y][m] + 29; } } for (let m = 0; m < hMonth; m++) { dayDiff += +MONTH_LENGTH[hYear - HIJRI_BEGIN][m] + 29; } gDate.setDate(GREGORIAN_FIRST_DATE.getDate() + dayDiff); } else { gDate = super.toGregorian(hDate); } return gDate; } /** * Returns the number of days in a specific Hijri hMonth. * `hMonth` is 1 for Muharram, 2 for Safar, etc. * `hYear` is any Hijri hYear. */ getDaysPerMonth(hMonth, hYear) { if (hYear >= HIJRI_BEGIN && hYear <= HIJRI_END) { const pos = hYear - HIJRI_BEGIN; return +MONTH_LENGTH[pos][hMonth - 1] + 29; } return super.getDaysPerMonth(hMonth, hYear); } } NgbCalendarIslamicUmalqura.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.6", ngImport: i0, type: NgbCalendarIslamicUmalqura, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); NgbCalendarIslamicUmalqura.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.6", ngImport: i0, type: NgbCalendarIslamicUmalqura }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.6", ngImport: i0, type: NgbCalendarIslamicUmalqura, decorators: [{ type: Injectable }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmdiLWNhbGVuZGFyLWlzbGFtaWMtdW1hbHF1cmEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvZGF0ZXBpY2tlci9oaWpyaS9uZ2ItY2FsZW5kYXItaXNsYW1pYy11bWFscXVyYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN2RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBRTNDOzs7OztHQUtHO0FBRUgsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3BELE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNuRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUM7QUFDekIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDO0FBQ3ZCLE1BQU0sT0FBTyxHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUVwQyxNQUFNLFlBQVksR0FBRztJQUNwQixZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUNkLGNBQWM7SUFDZCxPQUFPO0lBQ1AsY0FBYztDQUNkLENBQUM7QUFFRixTQUFTLFdBQVcsQ0FBQyxLQUFXLEVBQUUsS0FBVztJQUM1Qyw0Q0FBNEM7SUFDNUMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLEVBQUUsS0FBSyxDQUFDLFFBQVEsRUFBRSxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQy9FLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxFQUFFLEtBQUssQ0FBQyxRQUFRLEVBQUUsRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUMvRSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQztJQUNyQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxDQUFDO0FBQ25DLENBQUM7QUFHRCxNQUFNLE9BQU8sMEJBQTJCLFNBQVEsdUJBQXVCO0lBQ3RFOzs7T0FHRztJQUNILGFBQWEsQ0FBQyxLQUFXO1FBQ3hCLElBQUksSUFBSSxHQUFHLENBQUMsRUFDWCxNQUFNLEdBQUcsQ0FBQyxFQUNWLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDZCxJQUFJLFFBQVEsR0FBRyxXQUFXLENBQUMsS0FBSyxFQUFFLG9CQUFvQixDQUFDLENBQUM7UUFDeEQsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLEdBQUcsb0JBQW9CLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsR0FBRyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEVBQUU7WUFDbEgsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDO1lBQ2hCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFO2dCQUNyRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO29CQUM1QixJQUFJLFNBQVMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQ3pDLElBQUksUUFBUSxJQUFJLFNBQVMsRUFBRTt3QkFDMUIsSUFBSSxHQUFHLFFBQVEsR0FBRyxDQUFDLENBQUM7d0JBQ3BCLElBQUksSUFBSSxHQUFHLFNBQVMsRUFBRTs0QkFDckIsSUFBSSxHQUFHLENBQUMsQ0FBQzs0QkFDVCxDQUFDLEVBQUUsQ0FBQzt5QkFDSjt3QkFDRCxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUU7NEJBQ1gsQ0FBQyxHQUFHLENBQUMsQ0FBQzs0QkFDTixJQUFJLEVBQUUsQ0FBQzt5QkFDUDt3QkFDRCxNQUFNLEdBQUcsQ0FBQyxDQUFDO3dCQUNYLEtBQUssR0FBRyxJQUFJLENBQUM7d0JBQ2IsT0FBTyxJQUFJLE9BQU8sQ0FBQyxLQUFLLEVBQUUsTUFBTSxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztxQkFDNUM7b0JBQ0QsUUFBUSxHQUFHLFFBQVEsR0FBRyxTQUFTLENBQUM7aUJBQ2hDO2FBQ0Q7WUFDRCxPQUFPLElBQVcsQ0FBQztTQUNuQjthQUFNO1lBQ04sT0FBTyxLQUFLLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ2xDO0lBQ0YsQ0FBQztJQUNEOztPQUVHO0lBQ0gsV0FBVyxDQUFDLEtBQWM7UUFDekIsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztRQUN6QixNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztRQUMvQixNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDO1FBQ3ZCLElBQUksS0FBSyxHQUFHLElBQUksSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDM0MsSUFBSSxPQUFPLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQztRQUN2QixJQUFJLEtBQUssSUFBSSxXQUFXLElBQUksS0FBSyxJQUFJLFNBQVMsRUFBRTtZQUMvQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxHQUFHLFdBQVcsRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDN0MsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRTtvQkFDNUIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztpQkFDcEM7YUFDRDtZQUNELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ2hDLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO2FBQ3REO1lBQ0QsS0FBSyxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLEVBQUUsR0FBRyxPQUFPLENBQUMsQ0FBQztTQUN4RDthQUFNO1lBQ04sS0FBSyxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDakM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNkLENBQUM7SUFDRDs7OztPQUlHO0lBQ0gsZUFBZSxDQUFDLE1BQWMsRUFBRSxLQUFhO1FBQzVDLElBQUksS0FBSyxJQUFJLFdBQVcsSUFBSSxLQUFLLElBQUksU0FBUyxFQUFFO1lBQy9DLE1BQU0sR0FBRyxHQUFHLEtBQUssR0FBRyxXQUFXLENBQUM7WUFDaEMsT0FBTyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1NBQzNDO1FBQ0QsT0FBTyxLQUFLLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUM3QyxDQUFDOzt1SEF4RVcsMEJBQTBCOzJIQUExQiwwQkFBMEI7MkZBQTFCLDBCQUEwQjtrQkFEdEMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nYkNhbGVuZGFySXNsYW1pY0NpdmlsIH0gZnJvbSAnLi9uZ2ItY2FsZW5kYXItaXNsYW1pYy1jaXZpbCc7XG5pbXBvcnQgeyBOZ2JEYXRlIH0gZnJvbSAnLi4vbmdiLWRhdGUnO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vKipcbiAqIFVtYWxxdXJhIGNhbGVuZGFyIGlzIG9uZSB0eXBlIG9mIEhpanJpIGNhbGVuZGFycyB1c2VkIGluIGlzbGFtaWMgY291bnRyaWVzLlxuICogVGhpcyBDYWxlbmRhciBpcyB1c2VkIGJ5IFNhdWRpIEFyYWJpYSBmb3IgYWRtaW5pc3RyYXRpdmUgcHVycG9zZS5cbiAqIFVubGlrZSB0YWJ1bGFyIGNhbGVuZGFycywgdGhlIGFsZ29yaXRobSBpbnZvbHZlcyBhc3Ryb25vbWljYWwgY2FsY3VsYXRpb24sIGJ1dCBpdCdzIHN0aWxsIGRldGVybWluaXN0aWMuXG4gKiBodHRwOi8vY2xkci51bmljb2RlLm9yZy9kZXZlbG9wbWVudC9kZXZlbG9wbWVudC1wcm9jZXNzL2Rlc2lnbi1wcm9wb3NhbHMvaXNsYW1pYy1jYWxlbmRhci10eXBlc1xuICovXG5cbmNvbnN0IEdSRUdPUklBTl9GSVJTVF9EQVRFID0gbmV3IERhdGUoMTg4MiwgMTAsIDEyKTtcbmNvbnN0IEdSRUdPUklBTl9MQVNUX0RBVEUgPSBuZXcgRGF0ZSgyMTc0LCAxMCwgMjUpO1xuY29uc3QgSElKUklfQkVHSU4gPSAxMzAwO1xuY29uc3QgSElKUklfRU5EID0gMTYwMDtcbmNvbnN0IE9ORV9EQVkgPSAxMDAwICogNjAgKiA2MCAqIDI0O1xuXG5jb25zdCBNT05USF9MRU5HVEggPSBbXG5cdC8vIDEzMDAtMTMwNFxuXHQnMTAxMDEwMTAxMDEwJyxcblx0JzExMDEwMTAxMDEwMCcsXG5cdCcxMTEwMTEwMDEwMDEnLFxuXHQnMDExMDExMDEwMTAwJyxcblx0JzAxMTAxMTEwMTAxMCcsXG5cdC8vIDEzMDUtMTMwOVxuXHQnMDAxMTAxMTAxMTAwJyxcblx0JzEwMTAxMDEwMTEwMScsXG5cdCcwMTAxMDEwMTAxMDEnLFxuXHQnMDExMDEwMTAxMDAxJyxcblx0JzAxMTExMDAxMDAxMCcsXG5cdC8vIDEzMTAtMTMxNFxuXHQnMTAxMTEwMTAxMDAxJyxcblx0JzAxMDExMTAxMDEwMCcsXG5cdCcxMDEwMTEwMTEwMTAnLFxuXHQnMDEwMTAxMDExMTAwJyxcblx0JzExMDEwMDEwMTEwMScsXG5cdC8vIDEzMTUtMTMxOVxuXHQnMDExMDEwMDEwMTAxJyxcblx0JzAxMTEwMTAwMTAxMCcsXG5cdCcxMDExMDEwMTAxMDAnLFxuXHQnMTAxMTAxMTAxMDEwJyxcblx0JzAxMDExMDEwMTEwMScsXG5cdC8vIDEzMjAtMTMyNFxuXHQnMDEwMDEwMTAxMTEwJyxcblx0JzEwMTAwMTAwMTExMScsXG5cdCcwMTAxMDAwMTAxMTEnLFxuXHQnMDExMDEwMDAxMDExJyxcblx0JzAxMTAxMDEwMDEwMScsXG5cdC8vIDEzMjUtMTMyOVxuXHQnMTAxMDExMDEwMTAxJyxcblx0JzAwMTAxMTAxMDExMCcsXG5cdCcxMDAxMDEwMTEwMTEnLFxuXHQnMDEwMDEwMDExMTAxJyxcblx0JzEwMTAwMTAwMTEwMScsXG5cdC8vIDEzMzAtMTMzNFxuXHQnMTEwMTAwMTAwMTEwJyxcblx0JzExMDExMDAxMDEwMScsXG5cdCcwMTAxMTAxMDExMDAnLFxuXHQnMTAwMTEwMTEwMTEwJyxcblx0JzAwMTAxMDExMTAxMCcsXG5cdC8vIDEzMzUtMTMzOVxuXHQnMTAxMDAxMDExMDExJyxcblx0JzAxMDEwMDEwMTAxMScsXG5cdCcxMDEwMTAwMTAxMDEnLFxuXHQnMDExMDExMDAxMDEwJyxcblx0JzEwMTAxMTEwMTAwMScsXG5cdC8vIDEzNDAtMTM0NFxuXHQnMDAxMDExMTEwMTAwJyxcblx0JzEwMDEwMTExMDExMCcsXG5cdCcwMDEwMTAxMTAxMTAnLFxuXHQnMTAwMTAxMDEwMTEwJyxcblx0JzEwMTAxMTAwMTAxMCcsXG5cdC8vIDEzNDUtMTM0OVxuXHQnMTAxMTEwMTAwMTAwJyxcblx0JzEwMTExMTAxMDAxMCcsXG5cdCcwMTAxMTEwMTEwMDEnLFxuXHQnMDAxMDExMDExMTAwJyxcblx0JzEwMDEwMTEwMTEwMScsXG5cdC8vIDEzNTAtMTM1NFxuXHQnMDEwMTAxMDAxMTAxJyxcblx0JzEwMTAxMDEwMDEwMScsXG5cdCcxMDExMDEwMTAwMTAnLFxuXHQnMTAxMTEwMTAwMTAxJyxcblx0JzAxMDExMDExMDEwMCcsXG5cdC8vIDEzNTUtMTM1OVxuXHQnMTAwMTEwMTEwMTEwJyxcblx0JzAxMDEwMTAxMDExMScsXG5cdCcwMDEwMTAwMTAxMTEnLFxuXHQnMDEwMTAxMDAxMDExJyxcblx0JzAxMTAxMDEwMDAxMScsXG5cdC8vIDEzNjAtMTM2NFxuXHQnMDExMTAxMDEwMDEwJyxcblx0JzEwMTEwMTEwMDEwMScsXG5cdCcwMTAxMDExMDEwMTAnLFxuXHQnMTAxMDEwMTAxMDExJyxcblx0JzAxMDEwMDEwMTAxMScsXG5cdC8vIDEzNjUtMTM2OVxuXHQnMTEwMDEwMDEwMTAxJyxcblx0JzExMDEwMTAwMTAxMCcsXG5cdCcxMTAxMTAxMDAxMDEnLFxuXHQnMDEwMTExMDAxMDEwJyxcblx0JzEwMTAxMTAxMDExMCcsXG5cdC8vIDEzNzAtMTM3NFxuXHQnMTAwMTAxMDEwMTExJyxcblx0JzAxMDAxMDEwMTAxMScsXG5cdCcxMDAxMDEwMDEwMTEnLFxuXHQnMTAxMDEwMTAwMTAxJyxcblx0JzEwMTEwMTAxMDAxMCcsXG5cdC8vIDEzNzUtMTM3OVxuXHQnMTAxMTAxMTAxMDEwJyxcblx0JzAxMDEwMTExMDEwMScsXG5cdCcwMDEwMDExMTAxMTAnLFxuXHQnMTAwMDEwMTEwMTExJyxcblx0JzAxMDAwMTAxMTAxMScsXG5cdC8vIDEzODAtMTM4NFxuXHQnMDEwMTAxMDEwMTAxJyxcblx0JzAxMDExMDEwMTAwMScsXG5cdCcwMTAxMTAxMTAxMDAnLFxuXHQnMTAwMTExMDExMDEwJyxcblx0JzAxMDAxMTAxMTEwMScsXG5cdC8vIDEzODUtMTM4OVxuXHQnMDAxMDAxMTAxMTEwJyxcblx0JzEwMDEwMDExMDExMCcsXG5cdCcxMDEwMTAxMDEwMTAnLFxuXHQnMTEwMTAxMDEwMTAwJyxcblx0JzExMDExMDExMDAxMCcsXG5cdC8vIDEzOTAtMTM5NFxuXHQnMDEwMTExMDEwMTAxJyxcblx0JzAwMTAxMTAxMTAxMCcsXG5cdCcxMDAxMDEwMTEwMTEnLFxuXHQnMDEwMDEwMTAxMDExJyxcblx0JzEwMTAwMTAxMDEwMScsXG5cdC8vIDEzOTUtMTM5OVxuXHQnMTAxMTAxMDAxMDAxJyxcblx0JzEwMTEwMTEwMDEwMCcsXG5cdCcxMDExMDExMTAwMDEnLFxuXHQnMDEwMTEwMTEwMTAwJyxcblx0JzEwMTAxMDExMDEwMScsXG5cdC8vIDE0MDAtMTQwNFxuXHQnMTAxMDAxMDEwMTAxJyxcblx0JzExMDEwMDEwMDEwMScsXG5cdCcxMTEwMTAwMTAwMTAnLFxuXHQnMTExMDExMDAxMDAxJyxcblx0JzAxMTAxMTAxMDEwMCcsXG5cdC8vIDE0MDUtMTQwOVxuXHQnMTAxMDExMTAxMDAxJyxcblx0JzEwMDEwMTEwMTAxMScsXG5cdCcwMTAwMTAxMDEwMTEnLFxuXHQnMTAxMDEwMDEwMDExJyxcblx0JzExMDEwMTAwMTAwMScsXG5cdC8vIDE0MTAtMTQxNFxuXHQnMTEwMTEwMTAwMTAwJyxcblx0JzExMDExMDExMDAxMCcsXG5cdCcxMDEwMTAxMTEwMDEnLFxuXHQnMDEwMDEwMTExMDEwJyxcblx0JzEwMTAwMTAxMTAxMScsXG5cdC8vIDE0MTUtMTQxOVxuXHQnMDEwMTAwMTAxMDExJyxcblx0JzEwMTAxMDAxMDEwMScsXG5cdCcxMDExMDAxMDEwMTAnLFxuXHQnMTAxMTAxMDEwMTAxJyxcblx0JzAxMDEwMTAxMTEwMCcsXG5cdC8vIDE0MjAtMTQyNFxuXHQnMDEwMDEwMTExMTAxJyxcblx0JzAwMTAwMDExMTEwMScsXG5cdCcxMDAxMDAwMTExMDEnLFxuXHQnMTAxMDEwMDEwMTAxJyxcblx0JzEwMTEwMTAwMTAxMCcsXG5cdC8vIDE0MjUtMTQyOVxuXHQnMTAxMTAxMDExMDEwJyxcblx0JzAxMDEwMTEwMTEwMScsXG5cdCcwMDEwMTAxMTAxMTAnLFxuXHQnMTAwMTAwMTExMDExJyxcblx0JzAxMDAxMDAxMTAxMScsXG5cdC8vIDE0MzAtMTQzNFxuXHQnMDExMDAxMDEwMTAxJyxcblx0JzAxMTAxMDEwMTAwMScsXG5cdCcwMTExMDEwMTAxMDAnLFxuXHQnMTAxMTAxMTAxMDEwJyxcblx0JzAxMDEwMTEwMTEwMCcsXG5cdC8vIDE0MzUtMTQzOVxuXHQnMTAxMDEwMTAxMTAxJyxcblx0JzAxMDEwMTAxMDEwMScsXG5cdCcxMDExMDAxMDEwMDEnLFxuXHQnMTAxMTEwMDEwMDEwJyxcblx0JzEwMTExMDEwMTAwMScsXG5cdC8vIDE0NDAtMTQ0NFxuXHQnMDEwMTExMDEwMTAwJyxcblx0JzEwMTAxMTAxMTAxMCcsXG5cdCcwMTAxMDEwMTEwMTAnLFxuXHQnMTAxMDEwMTAxMDExJyxcblx0JzAxMDExMDAxMDEwMScsXG5cdC8vIDE0NDUtMTQ0OVxuXHQnMDExMTAxMDAxMDAxJyxcblx0JzAxMTEwMTEwMDEwMCcsXG5cdCcxMDExMTAxMDEwMTAnLFxuXHQnMDEwMTEwMTEwMTAxJyxcblx0JzAwMTAxMDExMDExMCcsXG5cdC8vIDE0NTAtMTQ1NFxuXHQnMTAxMDAxMDEwMTEwJyxcblx0JzExMTAwMTAwMTEwMScsXG5cdCcxMDExMDAxMDAxMDEnLFxuXHQnMTAxMTAxMDEwMDEwJyxcblx0JzEwMTEwMTEwMTAxMCcsXG5cdC8vIDE0NTUtMTQ1OVxuXHQnMDEwMTEwMTAxMTAxJyxcblx0JzAwMTAxMDEwMTExMCcsXG5cdCcxMDAxMDAxMDExMTEnLFxuXHQnMDEwMDEwMDEwMTExJyxcblx0JzAxMTAwMTAwMTAxMScsXG5cdC8vIDE0NjAtMTQ2NFxuXHQnMDExMDEwMTAwMTAxJyxcblx0JzAxMTAxMDEwMTEwMCcsXG5cdCcxMDEwMTEwMTAxMTAnLFxuXHQnMDEwMTAxMDExMTAxJyxcblx0JzAxMDAxMDAxMTEwMScsXG5cdC8vIDE0NjUtMTQ2OVxuXHQnMTAxMDAxMDAxMTAxJyxcblx0JzExMDEwMDAxMDExMCcsXG5cdCcxMTAxMTAwMTAxMDEnLFxuXHQnMDEwMTEwMTAxMDEwJyxcblx0JzAxMDExMDExMDEwMScsXG5cdC8vIDE0NzAtMTQ3NFxuXHQnMDAxMDExMDExMDEwJyxcblx0JzEwMDEwMTAxMTAxMScsXG5cdCcwMTAwMTAxMDExMDEnLFxuXHQnMDEwMTEwMDEwMTAxJyxcblx0JzAxMTAxMTAwMTAxMCcsXG5cdC8vIDE0NzUtMTQ3OVxuXHQnMDExMDExMTAwMTAwJyxcblx0JzEwMTAxMTEwMTAxMCcsXG5cdCcwMTAwMTExMTAxMDEnLFxuXHQnMDAxMDEwMTEwMTEwJyxcblx0JzEwMDEwMTAxMDExMCcsXG5cdC8vIDE0ODAtMTQ4NFxuXHQnMTAxMDEwMTAxMDEwJyxcblx0JzEwMTEwMTAxMDEwMCcsXG5cdCcxMDExMTEwMTAwMTAnLFxuXHQnMDEwMTExMDExMDAxJyxcblx0JzAwMTAxMTEwMTAxMCcsXG5cdC8vIDE0ODUtMTQ4OVxuXHQnMTAwMTAxMTAxMTAxJyxcblx0JzAxMDAxMDEwMTEwMScsXG5cdCcxMDEwMTAwMTAxMDEnLFxuXHQnMTAxMTAxMDAxMDEwJyxcblx0JzEwMTExMDEwMDEwMScsXG5cdC8vIDE0OTAtMTQ5NFxuXHQnMDEwMTEwMTEwMDEwJyxcblx0JzEwMDExMDExMDEwMScsXG5cdCcwMTAwMTEwMTAxMTAnLFxuXHQnMTAxMDEwMDEwMTExJyxcblx0JzAxMDEwMTAwMDExMScsXG5cdC8vIDE0OTUtMTQ5OVxuXHQnMDExMDEwMDEwMDExJyxcblx0JzAxMTEwMTAwMTAwMScsXG5cdCcxMDExMDEwMTAxMDEnLFxuXHQnMDEwMTAxMTAxMDEwJyxcblx0JzEwMTAwMTEwMTAxMScsXG5cdC8vIDE1MDAtMTUwNFxuXHQnMDEwMTAwMTAxMDExJyxcblx0JzEwMTAxMDAwMTAxMScsXG5cdCcxMTAxMDEwMDAxMTAnLFxuXHQnMTEwMTEwMTAwMDExJyxcblx0JzAxMDExMTAwMTAxMCcsXG5cdC8vIDE1MDUtMTUwOVxuXHQnMTAxMDExMDEwMTEwJyxcblx0JzAxMDAxMTAxMTAxMScsXG5cdCcwMDEwMDExMDEwMTEnLFxuXHQnMTAwMTAxMDAxMDExJyxcblx0JzEwMTAxMDEwMDEwMScsXG5cdC8vIDE1MTAtMTUxNFxuXHQnMTAxMTAxMDEwMDEwJyxcblx0JzEwMTEwMTEwMTAwMScsXG5cdCcwMTAxMDExMTAxMDEnLFxuXHQnMDAwMTAxMTEwMTEwJyxcblx0JzEwMDAxMDExMDExMScsXG5cdC8vIDE1MTUtMTUxOVxuXHQnMDAxMDAxMDExMDExJyxcblx0JzAxMDEwMDEwMTAxMScsXG5cdCcwMTAxMDExMDAxMDEnLFxuXHQnMDEwMTEwMTEwMTAwJyxcblx0JzEwMDExMTAxMTAxMCcsXG5cdC8vIDE1MjAtMTUyNFxuXHQnMDEwMDExMTAxMTAxJyxcblx0JzAwMDEwMTEwMTEwMScsXG5cdCcxMDAwMTAxMTAxMTAnLFxuXHQnMTAxMDEwMTAwMTEwJyxcblx0JzExMDEwMTAxMDAxMCcsXG5cdC8vIDE1MjUtMTUyOVxuXHQnMTEwMTEwMTAxMDAxJyxcblx0JzAxMDExMTAxMDEwMCcsXG5cdCcxMDEwMTEwMTEwMTAnLFxuXHQnMTAwMTAxMDExMDExJyxcblx0JzAxMDAxMDEwMTAxMScsXG5cdC8vIDE1MzAtMTUzNFxuXHQnMDExMDAxMDEwMDExJyxcblx0JzAxMTEwMDEwMTAwMScsXG5cdCcwMTExMDExMDAwMTAnLFxuXHQnMTAxMTEwMTAxMDAxJyxcblx0JzAxMDExMDExMDAxMCcsXG5cdC8vIDE1MzUtMTUzOVxuXHQnMTAxMDEwMTEwMTAxJyxcblx0JzAxMDEwMTAxMDEwMScsXG5cdCcxMDExMDAxMDAxMDEnLFxuXHQnMTEwMTEwMDEwMDEwJyxcblx0JzExMTAxMTAwMTAwMScsXG5cdC8vIDE1NDAtMTU0NFxuXHQnMDExMDExMDEwMDEwJyxcblx0JzEwMTAxMTEwMTAwMScsXG5cdCcwMTAxMDExMDEwMTEnLFxuXHQnMDEwMDEwMTAxMDExJyxcblx0JzEwMTAwMTAxMDEwMScsXG5cdC8vIDE1NDUtMTU0OVxuXHQnMTEwMTAwMTAxMDAxJyxcblx0JzExMDEwMTAxMDEwMCcsXG5cdCcxMTAxMTAxMDEwMTAnLFxuXHQnMTAwMTEwMTEwMTAxJyxcblx0JzAxMDAxMDExMTAxMCcsXG5cdC8vIDE1NTAtMTU1NFxuXHQnMTAxMDAwMTExMDExJyxcblx0JzAxMDAxMDAxMTAxMScsXG5cdCcxMDEwMDEwMDExMDEnLFxuXHQnMTAxMDEwMTAxMDEwJyxcblx0JzEwMTAxMTAxMDEwMScsXG5cdC8vIDE1NTUtMTU1OVxuXHQnMDAxMDExMDExMDEwJyxcblx0JzEwMDEwMTAxMTEwMScsXG5cdCcwMTAwMDEwMTExMTAnLFxuXHQnMTAxMDAwMTAxMTEwJyxcblx0JzExMDAxMDAxMTAxMCcsXG5cdC8vIDE1NjAtMTU2NFxuXHQnMTEwMTAxMDEwMTAxJyxcblx0JzAxMTAxMDExMDAxMCcsXG5cdCcwMTEwMTAxMTEwMDEnLFxuXHQnMDEwMDEwMTExMDEwJyxcblx0JzEwMTAwMTAxMTEwMScsXG5cdC8vIDE1NjUtMTU2OVxuXHQnMDEwMTAwMTAxMTAxJyxcblx0JzEwMTAxMDAxMDEwMScsXG5cdCcxMDExMDEwMTAwMTAnLFxuXHQnMTAxMTEwMTAxMDAwJyxcblx0JzEwMTExMDExMDEwMCcsXG5cdC8vIDE1NzAtMTU3NFxuXHQnMDEwMTEwMTExMDAxJyxcblx0JzAwMTAxMTAxMTAxMCcsXG5cdCcxMDAxMDEwMTEwMTAnLFxuXHQnMTAxMTAxMDAxMDEwJyxcblx0JzExMDExMDEwMDEwMCcsXG5cdC8vIDE1NzUtMTU3OVxuXHQnMTExMDExMDEwMDAxJyxcblx0JzAxMTAxMTEwMTAwMCcsXG5cdCcxMDExMDExMDEwMTAnLFxuXHQnMDEwMTAxMTAxMTAxJyxcblx0JzAxMDEwMDExMDEwMScsXG5cdC8vIDE1ODAtMTU4NFxuXHQnMDExMDEwMDEwMTAxJyxcblx0JzExMDEwMTAwMTAxMCcsXG5cdCcxMTAxMTAxMDEwMDAnLFxuXHQnMTEwMTExMDEwMTAwJyxcblx0JzAxMTAxMTAxMTAxMCcsXG5cdC8vIDE1ODUtMTU4OVxuXHQnMDEwMTAxMDExMDExJyxcblx0JzAwMTAxMDAxMTEwMScsXG5cdCcwMTEwMDAxMDEwMTEnLFxuXHQnMTAxMTAwMDEwMTAxJyxcblx0JzEwMTEwMTAwMTAxMCcsXG5cdC8vIDE1OTAtMTU5NFxuXHQnMTAxMTEwMDEwMTAxJyxcblx0JzAxMDExMDEwMTAxMCcsXG5cdCcxMDEwMTAxMDExMTAnLFxuXHQnMTAwMTAwMTAxMTEwJyxcblx0JzExMDAxMDAwMTExMScsXG5cdC8vIDE1OTUtMTU5OVxuXHQnMDEwMTAwMTAwMTExJyxcblx0JzAxMTAxMDAxMDEwMScsXG5cdCcwMTEwMTAxMDEwMTAnLFxuXHQnMTAxMDExMDEwMTEwJyxcblx0JzAxMDEwMTAxMTEwMScsXG5cdC8vIDE2MDBcblx0JzAwMTAxMDAxMTEwMScsXG5dO1xuXG5mdW5jdGlvbiBnZXREYXlzRGlmZihkYXRlMTogRGF0ZSwgZGF0ZTI6IERhdGUpOiBudW1iZXIge1xuXHQvLyBJZ25vcmVzIHRoZSB0aW1lIHBhcnQgaW4gZGF0ZTEgYW5kIGRhdGUyOlxuXHRjb25zdCB0aW1lMSA9IERhdGUuVVRDKGRhdGUxLmdldEZ1bGxZZWFyKCksIGRhdGUxLmdldE1vbnRoKCksIGRhdGUxLmdldERhdGUoKSk7XG5cdGNvbnN0IHRpbWUyID0gRGF0ZS5VVEMoZGF0ZTIuZ2V0RnVsbFllYXIoKSwgZGF0ZTIuZ2V0TW9udGgoKSwgZGF0ZTIuZ2V0RGF0ZSgpKTtcblx0Y29uc3QgZGlmZiA9IE1hdGguYWJzKHRpbWUxIC0gdGltZTIpO1xuXHRyZXR1cm4gTWF0aC5yb3VuZChkaWZmIC8gT05FX0RBWSk7XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBOZ2JDYWxlbmRhcklzbGFtaWNVbWFscXVyYSBleHRlbmRzIE5nYkNhbGVuZGFySXNsYW1pY0NpdmlsIHtcblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGVxdWl2YWxlbnQgaXNsYW1pYyhVbWFscXVyYSkgZGF0ZSB2YWx1ZSBmb3IgYSBnaXZlIGlucHV0IEdyZWdvcmlhbiBkYXRlLlxuXHQgKiBgZ2RhdGVgIGlzIHMgSlMgRGF0ZSB0byBiZSBjb252ZXJ0ZWQgdG8gSGlqcmkuXG5cdCAqL1xuXHRmcm9tR3JlZ29yaWFuKGdEYXRlOiBEYXRlKTogTmdiRGF0ZSB7XG5cdFx0bGV0IGhEYXkgPSAxLFxuXHRcdFx0aE1vbnRoID0gMCxcblx0XHRcdGhZZWFyID0gMTMwMDtcblx0XHRsZXQgZGF5c0RpZmYgPSBnZXREYXlzRGlmZihnRGF0ZSwgR1JFR09SSUFOX0ZJUlNUX0RBVEUpO1xuXHRcdGlmIChnRGF0ZS5nZXRUaW1lKCkgLSBHUkVHT1JJQU5fRklSU1RfREFURS5nZXRUaW1lKCkgPj0gMCAmJiBnRGF0ZS5nZXRUaW1lKCkgLSBHUkVHT1JJQU5fTEFTVF9EQVRFLmdldFRpbWUoKSA8PSAwKSB7XG5cdFx0XHRsZXQgeWVhciA9IDEzMDA7XG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IE1PTlRIX0xFTkdUSC5sZW5ndGg7IGkrKywgeWVhcisrKSB7XG5cdFx0XHRcdGZvciAobGV0IGogPSAwOyBqIDwgMTI7IGorKykge1xuXHRcdFx0XHRcdGxldCBudW1PZkRheXMgPSArTU9OVEhfTEVOR1RIW2ldW2pdICsgMjk7XG5cdFx0XHRcdFx0aWYgKGRheXNEaWZmIDw9IG51bU9mRGF5cykge1xuXHRcdFx0XHRcdFx0aERheSA9IGRheXNEaWZmICsgMTtcblx0XHRcdFx0XHRcdGlmIChoRGF5ID4gbnVtT2ZEYXlzKSB7XG5cdFx0XHRcdFx0XHRcdGhEYXkgPSAxO1xuXHRcdFx0XHRcdFx0XHRqKys7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZiAoaiA+IDExKSB7XG5cdFx0XHRcdFx0XHRcdGogPSAwO1xuXHRcdFx0XHRcdFx0XHR5ZWFyKys7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRoTW9udGggPSBqO1xuXHRcdFx0XHRcdFx0aFllYXIgPSB5ZWFyO1xuXHRcdFx0XHRcdFx0cmV0dXJuIG5ldyBOZ2JEYXRlKGhZZWFyLCBoTW9udGggKyAxLCBoRGF5KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0ZGF5c0RpZmYgPSBkYXlzRGlmZiAtIG51bU9mRGF5cztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG51bGwgYXMgYW55O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gc3VwZXIuZnJvbUdyZWdvcmlhbihnRGF0ZSk7XG5cdFx0fVxuXHR9XG5cdC8qKlxuXHQgKiBDb252ZXJ0cyB0aGUgY3VycmVudCBIaWpyaSBkYXRlIHRvIEdyZWdvcmlhbi5cblx0ICovXG5cdHRvR3JlZ29yaWFuKGhEYXRlOiBOZ2JEYXRlKTogRGF0ZSB7XG5cdFx0Y29uc3QgaFllYXIgPSBoRGF0ZS55ZWFyO1xuXHRcdGNvbnN0IGhNb250aCA9IGhEYXRlLm1vbnRoIC0gMTtcblx0XHRjb25zdCBoRGF5ID0gaERhdGUuZGF5O1xuXHRcdGxldCBnRGF0ZSA9IG5ldyBEYXRlKEdSRUdPUklBTl9GSVJTVF9EQVRFKTtcblx0XHRsZXQgZGF5RGlmZiA9IGhEYXkgLSAxO1xuXHRcdGlmIChoWWVhciA+PSBISUpSSV9CRUdJTiAmJiBoWWVhciA8PSBISUpSSV9FTkQpIHtcblx0XHRcdGZvciAobGV0IHkgPSAwOyB5IDwgaFllYXIgLSBISUpSSV9CRUdJTjsgeSsrKSB7XG5cdFx0XHRcdGZvciAobGV0IG0gPSAwOyBtIDwgMTI7IG0rKykge1xuXHRcdFx0XHRcdGRheURpZmYgKz0gK01PTlRIX0xFTkdUSFt5XVttXSArIDI5O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRmb3IgKGxldCBtID0gMDsgbSA8IGhNb250aDsgbSsrKSB7XG5cdFx0XHRcdGRheURpZmYgKz0gK01PTlRIX0xFTkdUSFtoWWVhciAtIEhJSlJJX0JFR0lOXVttXSArIDI5O1xuXHRcdFx0fVxuXHRcdFx0Z0RhdGUuc2V0RGF0ZShHUkVHT1JJQU5fRklSU1RfREFURS5nZXREYXRlKCkgKyBkYXlEaWZmKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Z0RhdGUgPSBzdXBlci50b0dyZWdvcmlhbihoRGF0ZSk7XG5cdFx0fVxuXHRcdHJldHVybiBnRGF0ZTtcblx0fVxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGRheXMgaW4gYSBzcGVjaWZpYyBIaWpyaSBoTW9udGguXG5cdCAqIGBoTW9udGhgIGlzIDEgZm9yIE11aGFycmFtLCAyIGZvciBTYWZhciwgZXRjLlxuXHQgKiBgaFllYXJgIGlzIGFueSBIaWpyaSBoWWVhci5cblx0ICovXG5cdGdldERheXNQZXJNb250aChoTW9udGg6IG51bWJlciwgaFllYXI6IG51bWJlcik6IG51bWJlciB7XG5cdFx0aWYgKGhZZWFyID49IEhJSlJJX0JFR0lOICYmIGhZZWFyIDw9IEhJSlJJX0VORCkge1xuXHRcdFx0Y29uc3QgcG9zID0gaFllYXIgLSBISUpSSV9CRUdJTjtcblx0XHRcdHJldHVybiArTU9OVEhfTEVOR1RIW3Bvc11baE1vbnRoIC0gMV0gKyAyOTtcblx0XHR9XG5cdFx0cmV0dXJuIHN1cGVyLmdldERheXNQZXJNb250aChoTW9udGgsIGhZZWFyKTtcblx0fVxufVxuIl19